From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-14.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4C5FCC10F11 for ; Mon, 22 Apr 2019 13:30:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D94F62064A for ; Mon, 22 Apr 2019 13:30:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1555939834; bh=7XcDrqT2xuqquOBL0BDd1vl/WCk2ddQJuQfpRgY6k2M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=mGdMIl4Y0wpP4oVt7CiDGkuuR5fePjLm25Dc91KhkfpCbkgXi8I980QfInut+vZiP /IxyK+9m9bs06qv7Pg4B8pdvhQDMGAQpOIGY1prKZSO0z06sdeNcQ8tj6x2VPtXb4I Nmk8tyflgzGde3qyJx2YMfuKhBW3j8twZHlno2ho= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727875AbfDVNab (ORCPT ); Mon, 22 Apr 2019 09:30:31 -0400 Received: from bombadil.infradead.org ([198.137.202.133]:37746 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727552AbfDVN2X (ORCPT ); Mon, 22 Apr 2019 09:28:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help: List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=vtktnCLv916WLDmhNAkr45ZMiAEz0f0XZ9eblFG9bXo=; b=LsnXbpEPUA46S4YhGKWWlWgbcA 1beOLrCxsQV3/nnikm0QGeX/oHqOX4VKp4uiOGo3PpG/sdVRZXfZTRPKRXrJfapvSDhYD5lIxniiF OSqRkFvWfVOdT7uKrxDl4k4NkfKPlzwDfyKP2R/Tq+SBsfqfJUuZa7bdVKW9gMA74m8c3nRRVML2i UVfHExf5oeGsKXXOAgYR4kZD2TluxpWLnX4OBNfPwUyeGAApaVOoie1wX1B9BqpYrc8jcww9ctKJw 0GPk5enmRKUNl2PzKtzXzBUGx6P3oNtv/QRiTnYU4u+Pz5So768b1uxap9qi6TrOkrqxL+ehgew3O D/FVCEKw==; Received: from 179.176.125.229.dynamic.adsl.gvt.net.br ([179.176.125.229] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtpsa (Exim 4.90_1 #2 (Red Hat Linux)) id 1hIYza-0005Hw-5x; Mon, 22 Apr 2019 13:28:19 +0000 Received: from mchehab by bombadil.infradead.org with local (Exim 4.92) (envelope-from ) id 1hIYzU-0005oF-3g; Mon, 22 Apr 2019 10:28:12 -0300 From: Mauro Carvalho Chehab To: Linux Doc Mailing List Cc: Mauro Carvalho Chehab , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, Jonathan Corbet , Jiri Kosina , Jonathan Cameron , Srinivas Pandruvada , Benjamin Tissoires , Dmitry Torokhov , linux-input@vger.kernel.org, linux-iio@vger.kernel.org, linux-usb@vger.kernel.org Subject: [PATCH v2 59/79] docs: hid: convert to ReST Date: Mon, 22 Apr 2019 10:27:48 -0300 Message-Id: X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Rename the HID documentation files to ReST, add an index for them and adjust in order to produce a nice html output via the Sphinx build system. While here, fix the sysfs example from hid-sensor.txt, that has a lot of "?" instead of the proper UTF-8 characters that are produced by the tree command. At its new index.rst, let's add a :orphan: while this is not linked to the main index.rst file, in order to avoid build warnings. Signed-off-by: Mauro Carvalho Chehab --- .../hid/{hid-alps.txt => hid-alps.rst} | 85 ++- .../hid/{hid-sensor.txt => hid-sensor.rst} | 192 +++---- .../{hid-transport.txt => hid-transport.rst} | 82 ++- Documentation/hid/{hiddev.txt => hiddev.rst} | 130 +++-- Documentation/hid/{hidraw.txt => hidraw.rst} | 53 +- Documentation/hid/index.rst | 18 + Documentation/hid/intel-ish-hid.rst | 485 ++++++++++++++++++ Documentation/hid/intel-ish-hid.txt | 454 ---------------- Documentation/hid/{uhid.txt => uhid.rst} | 46 +- Documentation/input/input.rst | 2 +- MAINTAINERS | 2 +- 11 files changed, 885 insertions(+), 664 deletions(-) rename Documentation/hid/{hid-alps.txt => hid-alps.rst} (64%) rename Documentation/hid/{hid-sensor.txt => hid-sensor.rst} (61%) rename Documentation/hid/{hid-transport.txt => hid-transport.rst} (93%) rename Documentation/hid/{hiddev.txt => hiddev.rst} (80%) rename Documentation/hid/{hidraw.txt => hidraw.rst} (89%) create mode 100644 Documentation/hid/index.rst create mode 100644 Documentation/hid/intel-ish-hid.rst delete mode 100644 Documentation/hid/intel-ish-hid.txt rename Documentation/hid/{uhid.txt => uhid.rst} (94%) diff --git a/Documentation/hid/hid-alps.txt b/Documentation/hid/hid-alps.rst similarity index 64% rename from Documentation/hid/hid-alps.txt rename to Documentation/hid/hid-alps.rst index 6b02a2447c77..e2f4c4c11e3f 100644 --- a/Documentation/hid/hid-alps.txt +++ b/Documentation/hid/hid-alps.rst @@ -1,19 +1,26 @@ +========================== ALPS HID Touchpad Protocol ----------------------- +========================== Introduction ------------ Currently ALPS HID driver supports U1 Touchpad device. -U1 devuce basic information. +U1 device basic information. + +========== ====== Vender ID 0x044E Product ID 0x120B Version ID 0x0121 +========== ====== HID Descriptor ------------- +-------------- + +======= ==================== ===== ======================================= Byte Field Value Notes +======= ==================== ===== ======================================= 0 wHIDDescLength 001E Length of HID Descriptor : 30 bytes 2 bcdVersion 0100 Compliant with Version 1.00 4 wReportDescLength 00B2 Report Descriptor is 178 Bytes (0x00B2) @@ -28,32 +35,42 @@ Byte Field Value Notes 22 wProductID 120B Product ID 0x120B 24 wVersionID 0121 Version 01.21 26 RESERVED 0000 RESERVED +======= ==================== ===== ======================================= Report ID ------------- -ReportID-1 (Input Reports) (HIDUsage-Mouse) for TP&SP -ReportID-2 (Input Reports) (HIDUsage-keyboard) for TP -ReportID-3 (Input Reports) (Vendor Usage: Max 10 finger data) for TP -ReportID-4 (Input Reports) (Vendor Usage: ON bit data) for GP -ReportID-5 (Feature Reports) Feature Reports -ReportID-6 (Input Reports) (Vendor Usage: StickPointer data) for SP -ReportID-7 (Feature Reports) Flash update (Bootloader) +--------- + +========== ================= ========================================= +ReportID-1 (Input Reports) (HIDUsage-Mouse) for TP&SP +ReportID-2 (Input Reports) (HIDUsage-keyboard) for TP +ReportID-3 (Input Reports) (Vendor Usage: Max 10 finger data) for TP +ReportID-4 (Input Reports) (Vendor Usage: ON bit data) for GP +ReportID-5 (Feature Reports) Feature Reports +ReportID-6 (Input Reports) (Vendor Usage: StickPointer data) for SP +ReportID-7 (Feature Reports) Flash update (Bootloader) +========== ================= ========================================= Data pattern ------------ + +===== ========== ===== ================= Case1 ReportID_1 TP/SP Relative/Relative Case2 ReportID_3 TP Absolute ReportID_6 SP Absolute +===== ========== ===== ================= Command Read/Write ------------------ To read/write to RAM, need to send a commands to the device. + The command format is as below. DataByte(SET_REPORT) + +===== ====================== Byte1 Command Byte Byte2 Address - Byte 0 (LSB) Byte3 Address - Byte 1 @@ -61,13 +78,19 @@ Byte4 Address - Byte 2 Byte5 Address - Byte 3 (MSB) Byte6 Value Byte Byte7 Checksum +===== ====================== Command Byte is read=0xD1/write=0xD2 . + Address is read/write RAM address. + Value Byte is writing data when you send the write commands. + When you read RAM, there is no meaning. DataByte(GET_REPORT) + +===== ====================== Byte1 Response Byte Byte2 Address - Byte 0 (LSB) Byte3 Address - Byte 1 @@ -75,6 +98,7 @@ Byte4 Address - Byte 2 Byte5 Address - Byte 3 (MSB) Byte6 Value Byte Byte7 Checksum +===== ====================== Read value is stored in Value Byte. @@ -82,7 +106,11 @@ Read value is stored in Value Byte. Packet Format Touchpad data byte ------------------ - b7 b6 b5 b4 b3 b2 b1 b0 + + +======= ======= ======= ======= ======= ======= ======= ======= ===== +- b7 b6 b5 b4 b3 b2 b1 b0 +======= ======= ======= ======= ======= ======= ======= ======= ===== 1 0 0 SW6 SW5 SW4 SW3 SW2 SW1 2 0 0 0 Fcv Fn3 Fn2 Fn1 Fn0 3 Xa0_7 Xa0_6 Xa0_5 Xa0_4 Xa0_3 Xa0_2 Xa0_1 Xa0_0 @@ -114,17 +142,25 @@ Touchpad data byte 25 Ya4_7 Ya4_6 Ya4_5 Ya4_4 Ya4_3 Ya4_2 Ya4_1 Ya4_0 26 Ya4_15 Ya4_14 Ya4_13 Ya4_12 Ya4_11 Ya4_10 Ya4_9 Ya4_8 27 LFB4 Zs4_6 Zs4_5 Zs4_4 Zs4_3 Zs4_2 Zs4_1 Zs4_0 +======= ======= ======= ======= ======= ======= ======= ======= ===== -SW1-SW6: SW ON/OFF status -Xan_15-0(16bit):X Absolute data of the "n"th finger -Yan_15-0(16bit):Y Absolute data of the "n"th finger -Zsn_6-0(7bit): Operation area of the "n"th finger +SW1-SW6: + SW ON/OFF status +Xan_15-0(16bit): + X Absolute data of the "n"th finger +Yan_15-0(16bit): + Y Absolute data of the "n"th finger +Zsn_6-0(7bit): + Operation area of the "n"th finger StickPointer data byte ------------------- - b7 b6 b5 b4 b3 b2 b1 b0 +---------------------- + +======= ======= ======= ======= ======= ======= ======= ======= ===== +- b7 b6 b5 b4 b3 b2 b1 b0 +======= ======= ======= ======= ======= ======= ======= ======= ===== Byte1 1 1 1 0 1 SW3 SW2 SW1 Byte2 X7 X6 X5 X4 X3 X2 X1 X0 Byte3 X15 X14 X13 X12 X11 X10 X9 X8 @@ -132,8 +168,13 @@ Byte4 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 Byte5 Y15 Y14 Y13 Y12 Y11 Y10 Y9 Y8 Byte6 Z7 Z6 Z5 Z4 Z3 Z2 Z1 Z0 Byte7 T&P Z14 Z13 Z12 Z11 Z10 Z9 Z8 +======= ======= ======= ======= ======= ======= ======= ======= ===== -SW1-SW3: SW ON/OFF status -Xn_15-0(16bit):X Absolute data -Yn_15-0(16bit):Y Absolute data -Zn_14-0(15bit):Z +SW1-SW3: + SW ON/OFF status +Xn_15-0(16bit): + X Absolute data +Yn_15-0(16bit): + Y Absolute data +Zn_14-0(15bit): + Z diff --git a/Documentation/hid/hid-sensor.txt b/Documentation/hid/hid-sensor.rst similarity index 61% rename from Documentation/hid/hid-sensor.txt rename to Documentation/hid/hid-sensor.rst index b287752a31cd..758972e34971 100644 --- a/Documentation/hid/hid-sensor.txt +++ b/Documentation/hid/hid-sensor.rst @@ -1,6 +1,6 @@ - +===================== HID Sensors Framework -====================== +===================== HID sensor framework provides necessary interfaces to implement sensor drivers, which are connected to a sensor hub. The sensor hub is a HID device and it provides a report descriptor conforming to HID 1.12 sensor usage tables. @@ -15,22 +15,22 @@ the drivers themselves." This specification describes many usage IDs, which describe the type of sensor and also the individual data fields. Each sensor can have variable number of data fields. The length and order is specified in the report descriptor. For -example a part of report descriptor can look like: +example a part of report descriptor can look like:: - INPUT(1)[INPUT] - .. - Field(2) - Physical(0020.0073) - Usage(1) - 0020.045f - Logical Minimum(-32767) - Logical Maximum(32767) - Report Size(8) - Report Count(1) - Report Offset(16) - Flags(Variable Absolute) -.. -.. + INPUT(1)[INPUT] + .. + Field(2) + Physical(0020.0073) + Usage(1) + 0020.045f + Logical Minimum(-32767) + Logical Maximum(32767) + Report Size(8) + Report Count(1) + Report Offset(16) + Flags(Variable Absolute) + .. + .. The report is indicating "sensor page (0x20)" contains an accelerometer-3D (0x73). This accelerometer-3D has some fields. Here for example field 2 is motion intensity @@ -40,13 +40,14 @@ data will use this format. Implementation -================= +============== This specification defines many different types of sensors with different sets of data fields. It is difficult to have a common input event to user space applications, for different sensors. For example an accelerometer can send X,Y and Z data, whereas an ambient light sensor can send illumination data. So the implementation has two parts: + - Core hid driver - Individual sensor processing part (sensor drivers) @@ -55,8 +56,11 @@ Core driver The core driver registers (hid-sensor-hub) registers as a HID driver. It parses report descriptors and identifies all the sensors present. It adds an MFD device with name HID-SENSOR-xxxx (where xxxx is usage id from the specification). -For example + +For example: + HID-SENSOR-200073 is registered for an Accelerometer 3D driver. + So if any driver with this name is inserted, then the probe routine for that function will be called. So an accelerometer processing driver can register with this name and will be probed if there is an accelerometer-3D detected. @@ -66,7 +70,8 @@ drivers to register and get events for that usage id. Also it provides parsing functions, which get and set each input/feature/output report. Individual sensor processing part (sensor drivers) ------------ +-------------------------------------------------- + The processing driver will use an interface provided by the core driver to parse the report and get the indexes of the fields and also can get events. This driver can use IIO interface to use the standard ABI defined for a type of sensor. @@ -75,31 +80,34 @@ can use IIO interface to use the standard ABI defined for a type of sensor. Core driver Interface ===================== -Callback structure: -Each processing driver can use this structure to set some callbacks. +Callback structure:: + + Each processing driver can use this structure to set some callbacks. int (*suspend)(..): Callback when HID suspend is received int (*resume)(..): Callback when HID resume is received int (*capture_sample)(..): Capture a sample for one of its data fields int (*send_event)(..): One complete event is received which can have multiple data fields. -Registration functions: -int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev, +Registration functions:: + + int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev, u32 usage_id, struct hid_sensor_hub_callbacks *usage_callback): Registers callbacks for an usage id. The callback functions are not allowed -to sleep. +to sleep:: -int sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev, + int sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev, u32 usage_id): Removes callbacks for an usage id. -Parsing function: -int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev, +Parsing function:: + + int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev, u8 type, u32 usage_id, u32 attr_usage_id, struct hid_sensor_hub_attribute_info *info); @@ -110,26 +118,27 @@ so that fields can be set or get individually. These indexes avoid searching every time and getting field index to get or set. -Set Feature report -int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, +Set Feature report:: + + int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, u32 field_index, s32 value); This interface is used to set a value for a field in feature report. For example if there is a field report_interval, which is parsed by a call to -sensor_hub_input_get_attribute_info before, then it can directly set that individual -field. +sensor_hub_input_get_attribute_info before, then it can directly set that +individual field:: -int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, + int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, u32 field_index, s32 *value); This interface is used to get a value for a field in input report. For example if there is a field report_interval, which is parsed by a call to -sensor_hub_input_get_attribute_info before, then it can directly get that individual -field value. +sensor_hub_input_get_attribute_info before, then it can directly get that +individual field value:: -int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, + int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, u32 usage_id, u32 attr_usage_id, u32 report_id); @@ -143,6 +152,8 @@ registered callback function to process the sample. ---------- HID Custom and generic Sensors +------------------------------ + HID Sensor specification defines two special sensor usage types. Since they don't represent a standard sensor, it is not possible to define using Linux IIO @@ -158,66 +169,73 @@ keyboard attached/detached or lid open/close. To allow application to utilize these sensors, here they are exported uses sysfs attribute groups, attributes and misc device interface. -An example of this representation on sysfs: -/sys/devices/pci0000:00/INT33C2:00/i2c-0/i2c-INT33D1:00/0018:8086:09FA.0001/HID-SENSOR-2000e1.6.auto$ tree -R -. -????????? enable_sensor -????????? feature-0-200316 -??????? ????????? feature-0-200316-maximum -??????? ????????? feature-0-200316-minimum -??????? ????????? feature-0-200316-name -??????? ????????? feature-0-200316-size -??????? ????????? feature-0-200316-unit-expo -??????? ????????? feature-0-200316-units -??????? ????????? feature-0-200316-value -????????? feature-1-200201 -??????? ????????? feature-1-200201-maximum -??????? ????????? feature-1-200201-minimum -??????? ????????? feature-1-200201-name -??????? ????????? feature-1-200201-size -??????? ????????? feature-1-200201-unit-expo -??????? ????????? feature-1-200201-units -??????? ????????? feature-1-200201-value -????????? input-0-200201 -??????? ????????? input-0-200201-maximum -??????? ????????? input-0-200201-minimum -??????? ????????? input-0-200201-name -??????? ????????? input-0-200201-size -??????? ????????? input-0-200201-unit-expo -??????? ????????? input-0-200201-units -??????? ????????? input-0-200201-value -????????? input-1-200202 -??????? ????????? input-1-200202-maximum -??????? ????????? input-1-200202-minimum -??????? ????????? input-1-200202-name -??????? ????????? input-1-200202-size -??????? ????????? input-1-200202-unit-expo -??????? ????????? input-1-200202-units -??????? ????????? input-1-200202-value +An example of this representation on sysfs:: + + /sys/devices/pci0000:00/INT33C2:00/i2c-0/i2c-INT33D1:00/0018:8086:09FA.0001/HID-SENSOR-2000e1.6.auto$ tree -R + . + │   ├── enable_sensor + │   │   ├── feature-0-200316 + │   │   │   ├── feature-0-200316-maximum + │   │   │   ├── feature-0-200316-minimum + │   │   │   ├── feature-0-200316-name + │   │   │   ├── feature-0-200316-size + │   │   │   ├── feature-0-200316-unit-expo + │   │   │   ├── feature-0-200316-units + │   │   │   ├── feature-0-200316-value + │   │   ├── feature-1-200201 + │   │   │   ├── feature-1-200201-maximum + │   │   │   ├── feature-1-200201-minimum + │   │   │   ├── feature-1-200201-name + │   │   │   ├── feature-1-200201-size + │   │   │   ├── feature-1-200201-unit-expo + │   │   │   ├── feature-1-200201-units + │   │   │   ├── feature-1-200201-value + │   │   ├── input-0-200201 + │   │   │   ├── input-0-200201-maximum + │   │   │   ├── input-0-200201-minimum + │   │   │   ├── input-0-200201-name + │   │   │   ├── input-0-200201-size + │   │   │   ├── input-0-200201-unit-expo + │   │   │   ├── input-0-200201-units + │   │   │   ├── input-0-200201-value + │   │   ├── input-1-200202 + │   │   │   ├── input-1-200202-maximum + │   │   │   ├── input-1-200202-minimum + │   │   │   ├── input-1-200202-name + │   │   │   ├── input-1-200202-size + │   │   │   ├── input-1-200202-unit-expo + │   │   │   ├── input-1-200202-units + │   │   │   ├── input-1-200202-value Here there is a custom sensors with four fields, two feature and two inputs. Each field is represented by a set of attributes. All fields except the "value" are read only. The value field is a RW field. -Example -/sys/bus/platform/devices/HID-SENSOR-2000e1.6.auto/feature-0-200316$ grep -r . * -feature-0-200316-maximum:6 -feature-0-200316-minimum:0 -feature-0-200316-name:property-reporting-state -feature-0-200316-size:1 -feature-0-200316-unit-expo:0 -feature-0-200316-units:25 -feature-0-200316-value:1 + +Example:: + + /sys/bus/platform/devices/HID-SENSOR-2000e1.6.auto/feature-0-200316$ grep -r . * + feature-0-200316-maximum:6 + feature-0-200316-minimum:0 + feature-0-200316-name:property-reporting-state + feature-0-200316-size:1 + feature-0-200316-unit-expo:0 + feature-0-200316-units:25 + feature-0-200316-value:1 How to enable such sensor? +^^^^^^^^^^^^^^^^^^^^^^^^^^ + By default sensor can be power gated. To enable sysfs attribute "enable" can be -used. -$ echo 1 > enable_sensor +used:: + + $ echo 1 > enable_sensor Once enabled and powered on, sensor can report value using HID reports. -These reports are pushed using misc device interface in a FIFO order. -/dev$ tree | grep HID-SENSOR-2000e1.6.auto -??????? ????????? 10:53 -> ../HID-SENSOR-2000e1.6.auto -????????? HID-SENSOR-2000e1.6.auto +These reports are pushed using misc device interface in a FIFO order:: + + /dev$ tree | grep HID-SENSOR-2000e1.6.auto + │   │   │   ├── 10:53 -> ../HID-SENSOR-2000e1.6.auto + │   ├── HID-SENSOR-2000e1.6.auto Each reports can be of variable length preceded by a header. This header consist of a 32 bit usage id, 64 bit time stamp and 32 bit length field of raw diff --git a/Documentation/hid/hid-transport.txt b/Documentation/hid/hid-transport.rst similarity index 93% rename from Documentation/hid/hid-transport.txt rename to Documentation/hid/hid-transport.rst index 3dcba9fd4a3a..6f3aaa86ce7b 100644 --- a/Documentation/hid/hid-transport.txt +++ b/Documentation/hid/hid-transport.rst @@ -1,5 +1,6 @@ - HID I/O Transport Drivers - =========================== +========================= +HID I/O Transport Drivers +========================= The HID subsystem is independent of the underlying transport driver. Initially, only USB was supported, but other specifications adopted the HID design and @@ -16,6 +17,8 @@ transport and device setup/management. HID core is responsible of report-parsing, report interpretation and the user-space API. Device specifics and quirks are handled by all layers depending on the quirk. +:: + +-----------+ +-----------+ +-----------+ +-----------+ | Device #1 | | Device #i | | Device #j | | Device #k | +-----------+ +-----------+ +-----------+ +-----------+ @@ -42,8 +45,9 @@ and quirks are handled by all layers depending on the quirk. +----------------+ +-----------+ +------------------+ +------------------+ Example Drivers: - I/O: USB, I2C, Bluetooth-l2cap - Transport: USB-HID, I2C-HID, BT-HIDP + + - I/O: USB, I2C, Bluetooth-l2cap + - Transport: USB-HID, I2C-HID, BT-HIDP Everything below "HID Core" is simplified in this graph as it is only of interest to HID device drivers. Transport drivers do not need to know the @@ -183,7 +187,7 @@ Other ctrl-channel requests are supported by USB-HID but are not available ------------------- Transport drivers normally use the following procedure to register a new device -with HID core: +with HID core:: struct hid_device *hid; int ret; @@ -215,7 +219,7 @@ Once hid_add_device() is entered, HID core might use the callbacks provided in "custom_ll_driver". Note that fields like "country" can be ignored by underlying transport-drivers if not supported. -To unregister a device, use: +To unregister a device, use:: hid_destroy_device(hid); @@ -226,73 +230,110 @@ driver callbacks. ----------------------------- The available HID callbacks are: - - int (*start) (struct hid_device *hdev) + + :: + + int (*start) (struct hid_device *hdev) + Called from HID device drivers once they want to use the device. Transport drivers can choose to setup their device in this callback. However, normally devices are already set up before transport drivers register them to HID core so this is mostly only used by USB-HID. - - void (*stop) (struct hid_device *hdev) + :: + + void (*stop) (struct hid_device *hdev) + Called from HID device drivers once they are done with a device. Transport drivers can free any buffers and deinitialize the device. But note that ->start() might be called again if another HID device driver is loaded on the device. + Transport drivers are free to ignore it and deinitialize devices after they destroyed them via hid_destroy_device(). - - int (*open) (struct hid_device *hdev) + :: + + int (*open) (struct hid_device *hdev) + Called from HID device drivers once they are interested in data reports. Usually, while user-space didn't open any input API/etc., device drivers are not interested in device data and transport drivers can put devices asleep. However, once ->open() is called, transport drivers must be ready for I/O. ->open() calls are nested for each client that opens the HID device. - - void (*close) (struct hid_device *hdev) + :: + + void (*close) (struct hid_device *hdev) + Called from HID device drivers after ->open() was called but they are no longer interested in device reports. (Usually if user-space closed any input devices of the driver). + Transport drivers can put devices asleep and terminate any I/O of all ->open() calls have been followed by a ->close() call. However, ->start() may be called again if the device driver is interested in input reports again. - - int (*parse) (struct hid_device *hdev) + :: + + int (*parse) (struct hid_device *hdev) + Called once during device setup after ->start() has been called. Transport drivers must read the HID report-descriptor from the device and tell HID core about it via hid_parse_report(). - - int (*power) (struct hid_device *hdev, int level) + :: + + int (*power) (struct hid_device *hdev, int level) + Called by HID core to give PM hints to transport drivers. Usually this is analogical to the ->open() and ->close() hints and redundant. - - void (*request) (struct hid_device *hdev, struct hid_report *report, - int reqtype) + :: + + void (*request) (struct hid_device *hdev, struct hid_report *report, + int reqtype) + Send an HID request on the ctrl channel. "report" contains the report that should be sent and "reqtype" the request type. Request-type can be HID_REQ_SET_REPORT or HID_REQ_GET_REPORT. + This callback is optional. If not provided, HID core will assemble a raw report following the HID specs and send it via the ->raw_request() callback. The transport driver is free to implement this asynchronously. - - int (*wait) (struct hid_device *hdev) + :: + + int (*wait) (struct hid_device *hdev) + Used by HID core before calling ->request() again. A transport driver can use it to wait for any pending requests to complete if only one request is allowed at a time. - - int (*raw_request) (struct hid_device *hdev, unsigned char reportnum, - __u8 *buf, size_t count, unsigned char rtype, - int reqtype) + :: + + int (*raw_request) (struct hid_device *hdev, unsigned char reportnum, + __u8 *buf, size_t count, unsigned char rtype, + int reqtype) + Same as ->request() but provides the report as raw buffer. This request shall be synchronous. A transport driver must not use ->wait() to complete such requests. This request is mandatory and hid core will reject the device if it is missing. - - int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len) + :: + + int (*output_report) (struct hid_device *hdev, __u8 *buf, size_t len) + Send raw output report via intr channel. Used by some HID device drivers which require high throughput for outgoing requests on the intr channel. This must not cause SET_REPORT calls! This must be implemented as asynchronous output report on the intr channel! - - int (*idle) (struct hid_device *hdev, int report, int idle, int reqtype) + :: + + int (*idle) (struct hid_device *hdev, int report, int idle, int reqtype) + Perform SET/GET_IDLE request. Only used by USB-HID, do not implement! 2.3) Data Path @@ -314,4 +355,5 @@ transport driver and not passed to hid_input_report(). Acknowledgements to SET_REPORT requests are not of interest to HID core. ---------------------------------------------------- + Written 2013, David Herrmann diff --git a/Documentation/hid/hiddev.txt b/Documentation/hid/hiddev.rst similarity index 80% rename from Documentation/hid/hiddev.txt rename to Documentation/hid/hiddev.rst index 638448707aa2..16c663530db2 100644 --- a/Documentation/hid/hiddev.txt +++ b/Documentation/hid/hiddev.rst @@ -1,6 +1,9 @@ +================================================ Care and feeding of your Human Interface Devices +================================================ -INTRODUCTION +Introduction +============ In addition to the normal input type HID devices, USB also uses the human interface device protocols for things that are not really human @@ -16,7 +19,7 @@ normalised event interface - see Documentation/input/input.rst * the hiddev interface, which provides fairly raw HID events The data flow for a HID event produced by a device is something like -the following : +the following:: usb.c ---> hid-core.c ----> hid-input.c ----> [keyboard/mouse/joystick/event] | @@ -27,27 +30,29 @@ In addition, other subsystems (apart from USB) can potentially feed events into the input subsystem, but these have no effect on the hid device interface. -USING THE HID DEVICE INTERFACE +Using the HID Device Interface +============================== The hiddev interface is a char interface using the normal USB major, with the minor numbers starting at 96 and finishing at 111. Therefore, -you need the following commands: -mknod /dev/usb/hiddev0 c 180 96 -mknod /dev/usb/hiddev1 c 180 97 -mknod /dev/usb/hiddev2 c 180 98 -mknod /dev/usb/hiddev3 c 180 99 -mknod /dev/usb/hiddev4 c 180 100 -mknod /dev/usb/hiddev5 c 180 101 -mknod /dev/usb/hiddev6 c 180 102 -mknod /dev/usb/hiddev7 c 180 103 -mknod /dev/usb/hiddev8 c 180 104 -mknod /dev/usb/hiddev9 c 180 105 -mknod /dev/usb/hiddev10 c 180 106 -mknod /dev/usb/hiddev11 c 180 107 -mknod /dev/usb/hiddev12 c 180 108 -mknod /dev/usb/hiddev13 c 180 109 -mknod /dev/usb/hiddev14 c 180 110 -mknod /dev/usb/hiddev15 c 180 111 +you need the following commands:: + + mknod /dev/usb/hiddev0 c 180 96 + mknod /dev/usb/hiddev1 c 180 97 + mknod /dev/usb/hiddev2 c 180 98 + mknod /dev/usb/hiddev3 c 180 99 + mknod /dev/usb/hiddev4 c 180 100 + mknod /dev/usb/hiddev5 c 180 101 + mknod /dev/usb/hiddev6 c 180 102 + mknod /dev/usb/hiddev7 c 180 103 + mknod /dev/usb/hiddev8 c 180 104 + mknod /dev/usb/hiddev9 c 180 105 + mknod /dev/usb/hiddev10 c 180 106 + mknod /dev/usb/hiddev11 c 180 107 + mknod /dev/usb/hiddev12 c 180 108 + mknod /dev/usb/hiddev13 c 180 109 + mknod /dev/usb/hiddev14 c 180 110 + mknod /dev/usb/hiddev15 c 180 111 So you point your hiddev compliant user-space program at the correct interface for your device, and it all just works. @@ -56,7 +61,9 @@ Assuming that you have a hiddev compliant user-space program, of course. If you need to write one, read on. -THE HIDDEV API +The HIDDEV API +============== + This description should be read in conjunction with the HID specification, freely available from http://www.usb.org, and conveniently linked of http://www.linux-usb.org. @@ -69,12 +76,14 @@ each of which can have one or more "usages". In the hid-core, each one of these usages has a single signed 32 bit value. read(): +------- + This is the event interface. When the HID device's state changes, it performs an interrupt transfer containing a report which contains the changed value. The hid-core.c module parses the report, and returns to hiddev.c the individual usages that have changed within the report. In its basic mode, the hiddev will make these individual -usage changes available to the reader using a struct hiddev_event: +usage changes available to the reader using a struct hiddev_event:: struct hiddev_event { unsigned hid; @@ -91,12 +100,18 @@ ioctl() described below. ioctl(): +-------- + This is the control interface. There are a number of controls: -HIDIOCGVERSION - int (read) -Gets the version code out of the hiddev driver. +HIDIOCGVERSION + - int (read) + + Gets the version code out of the hiddev driver. + +HIDIOCAPPLICATION + - (none) -HIDIOCAPPLICATION - (none) This ioctl call returns the HID application usage associated with the hid device. The third argument to ioctl() specifies which application index to get. This is useful when the device has more than one @@ -106,7 +121,9 @@ returns -1. You can find out beforehand how many application collections the device has from the num_applications field from the hiddev_devinfo structure. -HIDIOCGCOLLECTIONINFO - struct hiddev_collection_info (read/write) +HIDIOCGCOLLECTIONINFO + - struct hiddev_collection_info (read/write) + This returns a superset of the information above, providing not only application collections, but all the collections the device has. It also returns the level the collection lives in the hierarchy. @@ -115,14 +132,20 @@ field set to the index that should be returned. The ioctl fills in the other fields. If the index is larger than the last collection index, the ioctl returns -1 and sets errno to -EINVAL. -HIDIOCGDEVINFO - struct hiddev_devinfo (read) +HIDIOCGDEVINFO + - struct hiddev_devinfo (read) + Gets a hiddev_devinfo structure which describes the device. -HIDIOCGSTRING - struct hiddev_string_descriptor (read/write) +HIDIOCGSTRING + - struct hiddev_string_descriptor (read/write) + Gets a string descriptor from the device. The caller must fill in the "index" field to indicate which descriptor should be returned. -HIDIOCINITREPORT - (none) +HIDIOCINITREPORT + - (none) + Instructs the kernel to retrieve all input and feature report values from the device. At this point, all the usage structures will contain current values for the device, and will maintain it as the device @@ -130,21 +153,29 @@ changes. Note that the use of this ioctl is unnecessary in general, since later kernels automatically initialize the reports from the device at attach time. -HIDIOCGNAME - string (variable length) +HIDIOCGNAME + - string (variable length) + Gets the device name -HIDIOCGREPORT - struct hiddev_report_info (write) +HIDIOCGREPORT + - struct hiddev_report_info (write) + Instructs the kernel to get a feature or input report from the device, in order to selectively update the usage structures (in contrast to INITREPORT). -HIDIOCSREPORT - struct hiddev_report_info (write) +HIDIOCSREPORT + - struct hiddev_report_info (write) + Instructs the kernel to send a report to the device. This report can be filled in by the user through HIDIOCSUSAGE calls (below) to fill in individual usage values in the report before sending the report in full to the device. -HIDIOCGREPORTINFO - struct hiddev_report_info (read/write) +HIDIOCGREPORTINFO + - struct hiddev_report_info (read/write) + Fills in a hiddev_report_info structure for the user. The report is looked up by type (input, output or feature) and id, so these fields must be filled in by the user. The ID can be absolute -- the actual @@ -156,19 +187,25 @@ use the relative IDs above to enumerate the valid IDs. The ioctl returns non-zero when there is no more next ID. The real report ID is filled into the returned hiddev_report_info structure. -HIDIOCGFIELDINFO - struct hiddev_field_info (read/write) +HIDIOCGFIELDINFO + - struct hiddev_field_info (read/write) + Returns the field information associated with a report in a hiddev_field_info structure. The user must fill in report_id and report_type in this structure, as above. The field_index should also be filled in, which should be a number from 0 and maxfield-1, as returned from a previous HIDIOCGREPORTINFO call. -HIDIOCGUCODE - struct hiddev_usage_ref (read/write) +HIDIOCGUCODE + - struct hiddev_usage_ref (read/write) + Returns the usage_code in a hiddev_usage_ref structure, given that given its report type, report id, field index, and index within the field have already been filled into the structure. -HIDIOCGUSAGE - struct hiddev_usage_ref (read/write) +HIDIOCGUSAGE + - struct hiddev_usage_ref (read/write) + Returns the value of a usage in a hiddev_usage_ref structure. The usage to be retrieved can be specified as above, or the user can choose to fill in the report_type field and specify the report_id as @@ -176,28 +213,37 @@ HID_REPORT_ID_UNKNOWN. In this case, the hiddev_usage_ref will be filled in with the report and field information associated with this usage if it is found. -HIDIOCSUSAGE - struct hiddev_usage_ref (write) +HIDIOCSUSAGE + - struct hiddev_usage_ref (write) + Sets the value of a usage in an output report. The user fills in the hiddev_usage_ref structure as above, but additionally fills in the value field. -HIDIOGCOLLECTIONINDEX - struct hiddev_usage_ref (write) +HIDIOGCOLLECTIONINDEX + - struct hiddev_usage_ref (write) + Returns the collection index associated with this usage. This indicates where in the collection hierarchy this usage sits. -HIDIOCGFLAG - int (read) -HIDIOCSFLAG - int (write) +HIDIOCGFLAG + - int (read) +HIDIOCSFLAG + - int (write) + These operations respectively inspect and replace the mode flags that influence the read() call above. The flags are as follows: - HIDDEV_FLAG_UREF - read() calls will now return + HIDDEV_FLAG_UREF + - read() calls will now return struct hiddev_usage_ref instead of struct hiddev_event. This is a larger structure, but in situations where the device has more than one usage in its reports with the same usage code, this mode serves to resolve such ambiguity. - HIDDEV_FLAG_REPORT - This flag can only be used in conjunction + HIDDEV_FLAG_REPORT + - This flag can only be used in conjunction with HIDDEV_FLAG_UREF. With this flag set, when the device sends a report, a struct hiddev_usage_ref will be returned to read() filled in with the report_type and report_id, but diff --git a/Documentation/hid/hidraw.txt b/Documentation/hid/hidraw.rst similarity index 89% rename from Documentation/hid/hidraw.txt rename to Documentation/hid/hidraw.rst index c8436e354f44..4a4a0ba1f362 100644 --- a/Documentation/hid/hidraw.txt +++ b/Documentation/hid/hidraw.rst @@ -1,5 +1,6 @@ - HIDRAW - Raw Access to USB and Bluetooth Human Interface Devices - ================================================================== +================================================================ +HIDRAW - Raw Access to USB and Bluetooth Human Interface Devices +================================================================ The hidraw driver provides a raw interface to USB and Bluetooth Human Interface Devices (HIDs). It differs from hiddev in that reports sent and @@ -31,6 +32,7 @@ directly under /dev (eg: /dev/hidraw0). As this location is distribution- and udev rule-dependent, applications should use libudev to locate hidraw devices attached to the system. There is a tutorial on libudev with a working example at: + http://www.signal11.us/oss/udev/ The HIDRAW API @@ -51,7 +53,7 @@ byte. For devices which do not use numbered reports, the report data will begin at the first byte. write() --------- +------- The write() function will write a report to the device. For USB devices, if the device has an INTERRUPT OUT endpoint, the report will be sent on that endpoint. If it does not, the report will be sent over the control endpoint, @@ -62,38 +64,52 @@ number. If the device does not use numbered reports, the first byte should be set to 0. The report data itself should begin at the second byte. ioctl() --------- +------- Hidraw supports the following ioctls: -HIDIOCGRDESCSIZE: Get Report Descriptor Size +HIDIOCGRDESCSIZE: + Get Report Descriptor Size + This ioctl will get the size of the device's report descriptor. -HIDIOCGRDESC: Get Report Descriptor +HIDIOCGRDESC: + Get Report Descriptor + This ioctl returns the device's report descriptor using a hidraw_report_descriptor struct. Make sure to set the size field of the hidraw_report_descriptor struct to the size returned from HIDIOCGRDESCSIZE. -HIDIOCGRAWINFO: Get Raw Info +HIDIOCGRAWINFO: + Get Raw Info + This ioctl will return a hidraw_devinfo struct containing the bus type, the vendor ID (VID), and product ID (PID) of the device. The bus type can be one -of: - BUS_USB - BUS_HIL - BUS_BLUETOOTH - BUS_VIRTUAL +of:: + + - BUS_USB + - BUS_HIL + - BUS_BLUETOOTH + - BUS_VIRTUAL + which are defined in uapi/linux/input.h. -HIDIOCGRAWNAME(len): Get Raw Name +HIDIOCGRAWNAME(len): + Get Raw Name + This ioctl returns a string containing the vendor and product strings of the device. The returned string is Unicode, UTF-8 encoded. -HIDIOCGRAWPHYS(len): Get Physical Address +HIDIOCGRAWPHYS(len): + Get Physical Address + This ioctl returns a string representing the physical address of the device. For USB devices, the string contains the physical path to the device (the USB controller, hubs, ports, etc). For Bluetooth devices, the string contains the hardware (MAC) address of the device. -HIDIOCSFEATURE(len): Send a Feature Report +HIDIOCSFEATURE(len): + Send a Feature Report + This ioctl will send a feature report to the device. Per the HID specification, feature reports are always sent using the control endpoint. Set the first byte of the supplied buffer to the report number. For devices @@ -101,7 +117,9 @@ which do not use numbered reports, set the first byte to 0. The report data begins in the second byte. Make sure to set len accordingly, to one more than the length of the report (to account for the report number). -HIDIOCGFEATURE(len): Get a Feature Report +HIDIOCGFEATURE(len): + Get a Feature Report + This ioctl will request a feature report from the device using the control endpoint. The first byte of the supplied buffer should be set to the report number of the requested report. For devices which do not use numbered @@ -109,11 +127,12 @@ reports, set the first byte to 0. The report will be returned starting at the first byte of the buffer (ie: the report number is not returned). Example ---------- +------- In samples/, find hid-example.c, which shows examples of read(), write(), and all the ioctls for hidraw. The code may be used by anyone for any purpose, and can serve as a starting point for developing applications using hidraw. Document by: + Alan Ott , Signal 11 Software diff --git a/Documentation/hid/index.rst b/Documentation/hid/index.rst new file mode 100644 index 000000000000..af4324902622 --- /dev/null +++ b/Documentation/hid/index.rst @@ -0,0 +1,18 @@ +:orphan: + +============================= +Human Interface Devices (HID) +============================= + +.. toctree:: + :maxdepth: 1 + + hiddev + hidraw + hid-sensor + hid-transport + + uhid + + hid-alps + intel-ish-hid diff --git a/Documentation/hid/intel-ish-hid.rst b/Documentation/hid/intel-ish-hid.rst new file mode 100644 index 000000000000..cccbf4be17d7 --- /dev/null +++ b/Documentation/hid/intel-ish-hid.rst @@ -0,0 +1,485 @@ +================================= +Intel Integrated Sensor Hub (ISH) +================================= + +A sensor hub enables the ability to offload sensor polling and algorithm +processing to a dedicated low power co-processor. This allows the core +processor to go into low power modes more often, resulting in the increased +battery life. + +There are many vendors providing external sensor hubs confirming to HID +Sensor usage tables, and used in several tablets, 2 in 1 convertible laptops +and embedded products. Linux had this support since Linux 3.9. + +Intel® introduced integrated sensor hubs as a part of the SoC starting from +Cherry Trail and now supported on multiple generations of CPU packages. There +are many commercial devices already shipped with Integrated Sensor Hubs (ISH). +These ISH also comply to HID sensor specification, but the difference is the +transport protocol used for communication. The current external sensor hubs +mainly use HID over i2C or USB. But ISH doesn't use either i2c or USB. + +1. Overview +=========== + +Using a analogy with a usbhid implementation, the ISH follows a similar model +for a very high speed communication:: + + ----------------- ---------------------- + | USB HID | --> | ISH HID | + ----------------- ---------------------- + ----------------- ---------------------- + | USB protocol | --> | ISH Transport | + ----------------- ---------------------- + ----------------- ---------------------- + | EHCI/XHCI | --> | ISH IPC | + ----------------- ---------------------- + PCI PCI + ----------------- ---------------------- + |Host controller| --> | ISH processor | + ----------------- ---------------------- + USB Link + ----------------- ---------------------- + | USB End points| --> | ISH Clients | + ----------------- ---------------------- + +Like USB protocol provides a method for device enumeration, link management +and user data encapsulation, the ISH also provides similar services. But it is +very light weight tailored to manage and communicate with ISH client +applications implemented in the firmware. + +The ISH allows multiple sensor management applications executing in the +firmware. Like USB endpoints the messaging can be to/from a client. As part of +enumeration process, these clients are identified. These clients can be simple +HID sensor applications, sensor calibration application or senor firmware +update application. + +The implementation model is similar, like USB bus, ISH transport is also +implemented as a bus. Each client application executing in the ISH processor +is registered as a device on this bus. The driver, which binds each device +(ISH HID driver) identifies the device type and registers with the hid core. + +2. ISH Implementation: Block Diagram +==================================== + +:: + + --------------------------- + | User Space Applications | + --------------------------- + + ----------------IIO ABI---------------- + -------------------------- + | IIO Sensor Drivers | + -------------------------- + -------------------------- + | IIO core | + -------------------------- + -------------------------- + | HID Sensor Hub MFD | + -------------------------- + -------------------------- + | HID Core | + -------------------------- + -------------------------- + | HID over ISH Client | + -------------------------- + -------------------------- + | ISH Transport (ISHTP) | + -------------------------- + -------------------------- + | IPC Drivers | + -------------------------- + OS + ---------------- PCI ----------------- + Hardware + Firmware + ---------------------------- + | ISH Hardware/Firmware(FW) | + ---------------------------- + +3. High level processing in above blocks +======================================== + +3.1 Hardware Interface +---------------------- + +The ISH is exposed as "Non-VGA unclassified PCI device" to the host. The PCI +product and vendor IDs are changed from different generations of processors. So +the source code which enumerate drivers needs to update from generation to +generation. + +3.2 Inter Processor Communication (IPC) driver +---------------------------------------------- + +Location: drivers/hid/intel-ish-hid/ipc + +The IPC message used memory mapped I/O. The registers are defined in +hw-ish-regs.h. + +3.2.1 IPC/FW message types +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +There are two types of messages, one for management of link and other messages +are to and from transport layers. + +TX and RX of Transport messages +............................... + +A set of memory mapped register offers support of multi byte messages TX and +RX (E.g.IPC_REG_ISH2HOST_MSG, IPC_REG_HOST2ISH_MSG). The IPC layer maintains +internal queues to sequence messages and send them in order to the FW. +Optionally the caller can register handler to get notification of completion. +A door bell mechanism is used in messaging to trigger processing in host and +client firmware side. When ISH interrupt handler is called, the ISH2HOST +doorbell register is used by host drivers to determine that the interrupt +is for ISH. + +Each side has 32 32-bit message registers and a 32-bit doorbell. Doorbell +register has the following format: +Bits 0..6: fragment length (7 bits are used) +Bits 10..13: encapsulated protocol +Bits 16..19: management command (for IPC management protocol) +Bit 31: doorbell trigger (signal H/W interrupt to the other side) +Other bits are reserved, should be 0. + +3.2.2 Transport layer interface +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To abstract HW level IPC communication, a set of callbacks are registered. +The transport layer uses them to send and receive messages. +Refer to struct ishtp_hw_ops for callbacks. + +3.3 ISH Transport layer +----------------------- + +Location: drivers/hid/intel-ish-hid/ishtp/ + +3.3.1 A Generic Transport Layer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The transport layer is a bi-directional protocol, which defines: +- Set of commands to start, stop, connect, disconnect and flow control +(ishtp/hbm.h) for details +- A flow control mechanism to avoid buffer overflows + +This protocol resembles bus messages described in the following document: +http://www.intel.com/content/dam/www/public/us/en/documents/technical-\ +specifications/dcmi-hi-1-0-spec.pdf "Chapter 7: Bus Message Layer" + +3.3.2 Connection and Flow Control Mechanism +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Each FW client and a protocol is identified by an UUID. In order to communicate +to a FW client, a connection must be established using connect request and +response bus messages. If successful, a pair (host_client_id and fw_client_id) +will identify the connection. + +Once connection is established, peers send each other flow control bus messages +independently. Every peer may send a message only if it has received a +flow-control credit before. Once it sent a message, it may not send another one +before receiving the next flow control credit. +Either side can send disconnect request bus message to end communication. Also +the link will be dropped if major FW reset occurs. + +3.3.3 Peer to Peer data transfer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Peer to Peer data transfer can happen with or without using DMA. Depending on +the sensor bandwidth requirement DMA can be enabled by using module parameter +ishtp_use_dma under intel_ishtp. + +Each side (host and FW) manages its DMA transfer memory independently. When an +ISHTP client from either host or FW side wants to send something, it decides +whether to send over IPC or over DMA; for each transfer the decision is +independent. The sending side sends DMA_XFER message when the message is in +the respective host buffer (TX when host client sends, RX when FW client +sends). The recipient of DMA message responds with DMA_XFER_ACK, indicating +the sender that the memory region for that message may be reused. + +DMA initialization is started with host sending DMA_ALLOC_NOTIFY bus message +(that includes RX buffer) and FW responds with DMA_ALLOC_NOTIFY_ACK. +Additionally to DMA address communication, this sequence checks capabilities: +if thw host doesn't support DMA, then it won't send DMA allocation, so FW can't +send DMA; if FW doesn't support DMA then it won't respond with +DMA_ALLOC_NOTIFY_ACK, in which case host will not use DMA transfers. +Here ISH acts as busmaster DMA controller. Hence when host sends DMA_XFER, +it's request to do host->ISH DMA transfer; when FW sends DMA_XFER, it means +that it already did DMA and the message resides at host. Thus, DMA_XFER +and DMA_XFER_ACK act as ownership indicators. + +At initial state all outgoing memory belongs to the sender (TX to host, RX to +FW), DMA_XFER transfers ownership on the region that contains ISHTP message to +the receiving side, DMA_XFER_ACK returns ownership to the sender. A sender +needs not wait for previous DMA_XFER to be ack'ed, and may send another message +as long as remaining continuous memory in its ownership is enough. +In principle, multiple DMA_XFER and DMA_XFER_ACK messages may be sent at once +(up to IPC MTU), thus allowing for interrupt throttling. +Currently, ISH FW decides to send over DMA if ISHTP message is more than 3 IPC +fragments and via IPC otherwise. + +3.3.4 Ring Buffers +^^^^^^^^^^^^^^^^^^ + +When a client initiate a connection, a ring or RX and TX buffers are allocated. +The size of ring can be specified by the client. HID client set 16 and 32 for +TX and RX buffers respectively. On send request from client, the data to be +sent is copied to one of the send ring buffer and scheduled to be sent using +bus message protocol. These buffers are required because the FW may have not +have processed the last message and may not have enough flow control credits +to send. Same thing holds true on receive side and flow control is required. + +3.3.5 Host Enumeration +^^^^^^^^^^^^^^^^^^^^^^ + +The host enumeration bus command allow discovery of clients present in the FW. +There can be multiple sensor clients and clients for calibration function. + +To ease in implantation and allow independent driver handle each client +this transport layer takes advantage of Linux Bus driver model. Each +client is registered as device on the the transport bus (ishtp bus). + +Enumeration sequence of messages: + +- Host sends HOST_START_REQ_CMD, indicating that host ISHTP layer is up. +- FW responds with HOST_START_RES_CMD +- Host sends HOST_ENUM_REQ_CMD (enumerate FW clients) +- FW responds with HOST_ENUM_RES_CMD that includes bitmap of available FW + client IDs +- For each FW ID found in that bitmap host sends + HOST_CLIENT_PROPERTIES_REQ_CMD +- FW responds with HOST_CLIENT_PROPERTIES_RES_CMD. Properties include UUID, + max ISHTP message size, etc. +- Once host received properties for that last discovered client, it considers + ISHTP device fully functional (and allocates DMA buffers) + +3.4 HID over ISH Client +----------------------- + +Location: drivers/hid/intel-ish-hid + +The ISHTP client driver is responsible for: + +- enumerate HID devices under FW ISH client +- Get Report descriptor +- Register with HID core as a LL driver +- Process Get/Set feature request +- Get input reports + +3.5 HID Sensor Hub MFD and IIO sensor drivers +--------------------------------------------- + +The functionality in these drivers is the same as an external sensor hub. +Refer to +Documentation/hid/hid-sensor.rst for HID sensor +Documentation/ABI/testing/sysfs-bus-iio for IIO ABIs to user space + +3.6 End to End HID transport Sequence Diagram +--------------------------------------------- + +:: + + HID-ISH-CLN ISHTP IPC HW + | | | | + | | |-----WAKE UP------------------>| + | | | | + | | |-----HOST READY--------------->| + | | | | + | | |<----MNG_RESET_NOTIFY_ACK----- | + | | | | + | |<----ISHTP_START------ | | + | | | | + | |<-----------------HOST_START_RES_CMD-------------------| + | | | | + | |------------------QUERY_SUBSCRIBER-------------------->| + | | | | + | |------------------HOST_ENUM_REQ_CMD------------------->| + | | | | + | |<-----------------HOST_ENUM_RES_CMD--------------------| + | | | | + | |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>| + | | | | + | |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------| + | Create new device on in ishtp bus | | + | | | | + | |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>| + | | | | + | |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------| + | Create new device on in ishtp bus | | + | | | | + | |--Repeat HOST_CLIENT_PROPERTIES_REQ_CMD-till last one--| + | | | | + probed() + |----ishtp_cl_connect--->|----------------- CLIENT_CONNECT_REQ_CMD-------------->| + | | | | + | |<----------------CLIENT_CONNECT_RES_CMD----------------| + | | | | + |register event callback | | | + | | | | + |ishtp_cl_send( + HOSTIF_DM_ENUM_DEVICES) |----------fill ishtp_msg_hdr struct write to HW----- >| + | | | | + | | |<-----IRQ(IPC_PROTOCOL_ISHTP---| + | | | | + |<--ENUM_DEVICE RSP------| | | + | | | | + for each enumerated device + |ishtp_cl_send( + HOSTIF_GET_HID_DESCRIPTOR|----------fill ishtp_msg_hdr struct write to HW----- >| + | | | | + ...Response + | | | | + for each enumerated device + |ishtp_cl_send( + HOSTIF_GET_REPORT_DESCRIPTOR|--------------fill ishtp_msg_hdr struct write to HW-- >| + | | | | + | | | | + hid_allocate_device + | | | | + hid_add_device | | | + | | | | + + +3.7 ISH Debugging +----------------- + +To debug ISH, event tracing mechanism is used. To enable debug logs +echo 1 > /sys/kernel/debug/tracing/events/intel_ish/enable +cat sys/kernel/debug/tracing/trace + +3.8 ISH IIO sysfs Example on Lenovo thinkpad Yoga 260 +----------------------------------------------------- + +:: + + root@otcpl-ThinkPad-Yoga-260:~# tree -l /sys/bus/iio/devices/ + /sys/bus/iio/devices/ + ├── iio:device0 -> ../../../devices/0044:8086:22D8.0001/HID-SENSOR-200073.9.auto/iio:device0 + │   ├── buffer + │   │   ├── enable + │   │   ├── length + │   │   └── watermark + ... + │   ├── in_accel_hysteresis + │   ├── in_accel_offset + │   ├── in_accel_sampling_frequency + │   ├── in_accel_scale + │   ├── in_accel_x_raw + │   ├── in_accel_y_raw + │   ├── in_accel_z_raw + │   ├── name + │   ├── scan_elements + │   │   ├── in_accel_x_en + │   │   ├── in_accel_x_index + │   │   ├── in_accel_x_type + │   │   ├── in_accel_y_en + │   │   ├── in_accel_y_index + │   │   ├── in_accel_y_type + │   │   ├── in_accel_z_en + │   │   ├── in_accel_z_index + │   │   └── in_accel_z_type + ... + │   │   ├── devices + │   │   │   │   ├── buffer + │   │   │   │   │   ├── enable + │   │   │   │   │   ├── length + │   │   │   │   │   └── watermark + │   │   │   │   ├── dev + │   │   │   │   ├── in_intensity_both_raw + │   │   │   │   ├── in_intensity_hysteresis + │   │   │   │   ├── in_intensity_offset + │   │   │   │   ├── in_intensity_sampling_frequency + │   │   │   │   ├── in_intensity_scale + │   │   │   │   ├── name + │   │   │   │   ├── scan_elements + │   │   │   │   │   ├── in_intensity_both_en + │   │   │   │   │   ├── in_intensity_both_index + │   │   │   │   │   └── in_intensity_both_type + │   │   │   │   ├── trigger + │   │   │   │   │   └── current_trigger + ... + │   │   │   │   ├── buffer + │   │   │   │   │   ├── enable + │   │   │   │   │   ├── length + │   │   │   │   │   └── watermark + │   │   │   │   ├── dev + │   │   │   │   ├── in_magn_hysteresis + │   │   │   │   ├── in_magn_offset + │   │   │   │   ├── in_magn_sampling_frequency + │   │   │   │   ├── in_magn_scale + │   │   │   │   ├── in_magn_x_raw + │   │   │   │   ├── in_magn_y_raw + │   │   │   │   ├── in_magn_z_raw + │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_raw + │   │   │   │   ├── in_rot_hysteresis + │   │   │   │   ├── in_rot_offset + │   │   │   │   ├── in_rot_sampling_frequency + │   │   │   │   ├── in_rot_scale + │   │   │   │   ├── name + ... + │   │   │   │   ├── scan_elements + │   │   │   │   │   ├── in_magn_x_en + │   │   │   │   │   ├── in_magn_x_index + │   │   │   │   │   ├── in_magn_x_type + │   │   │   │   │   ├── in_magn_y_en + │   │   │   │   │   ├── in_magn_y_index + │   │   │   │   │   ├── in_magn_y_type + │   │   │   │   │   ├── in_magn_z_en + │   │   │   │   │   ├── in_magn_z_index + │   │   │   │   │   ├── in_magn_z_type + │   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_en + │   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_index + │   │   │   │   │   └── in_rot_from_north_magnetic_tilt_comp_type + │   │   │   │   ├── trigger + │   │   │   │   │   └── current_trigger + ... + │   │   │   │   ├── buffer + │   │   │   │   │   ├── enable + │   │   │   │   │   ├── length + │   │   │   │   │   └── watermark + │   │   │   │   ├── dev + │   │   │   │   ├── in_anglvel_hysteresis + │   │   │   │   ├── in_anglvel_offset + │   │   │   │   ├── in_anglvel_sampling_frequency + │   │   │   │   ├── in_anglvel_scale + │   │   │   │   ├── in_anglvel_x_raw + │   │   │   │   ├── in_anglvel_y_raw + │   │   │   │   ├── in_anglvel_z_raw + │   │   │   │   ├── name + │   │   │   │   ├── scan_elements + │   │   │   │   │   ├── in_anglvel_x_en + │   │   │   │   │   ├── in_anglvel_x_index + │   │   │   │   │   ├── in_anglvel_x_type + │   │   │   │   │   ├── in_anglvel_y_en + │   │   │   │   │   ├── in_anglvel_y_index + │   │   │   │   │   ├── in_anglvel_y_type + │   │   │   │   │   ├── in_anglvel_z_en + │   │   │   │   │   ├── in_anglvel_z_index + │   │   │   │   │   └── in_anglvel_z_type + │   │   │   │   ├── trigger + │   │   │   │   │   └── current_trigger + ... + │   │   │   │   ├── buffer + │   │   │   │   │   ├── enable + │   │   │   │   │   ├── length + │   │   │   │   │   └── watermark + │   │   │   │   ├── dev + │   │   │   │   ├── in_anglvel_hysteresis + │   │   │   │   ├── in_anglvel_offset + │   │   │   │   ├── in_anglvel_sampling_frequency + │   │   │   │   ├── in_anglvel_scale + │   │   │   │   ├── in_anglvel_x_raw + │   │   │   │   ├── in_anglvel_y_raw + │   │   │   │   ├── in_anglvel_z_raw + │   │   │   │   ├── name + │   │   │   │   ├── scan_elements + │   │   │   │   │   ├── in_anglvel_x_en + │   │   │   │   │   ├── in_anglvel_x_index + │   │   │   │   │   ├── in_anglvel_x_type + │   │   │   │   │   ├── in_anglvel_y_en + │   │   │   │   │   ├── in_anglvel_y_index + │   │   │   │   │   ├── in_anglvel_y_type + │   │   │   │   │   ├── in_anglvel_z_en + │   │   │   │   │   ├── in_anglvel_z_index + │   │   │   │   │   └── in_anglvel_z_type + │   │   │   │   ├── trigger + │   │   │   │   │   └── current_trigger + ... diff --git a/Documentation/hid/intel-ish-hid.txt b/Documentation/hid/intel-ish-hid.txt deleted file mode 100644 index d48b21c71ddd..000000000000 --- a/Documentation/hid/intel-ish-hid.txt +++ /dev/null @@ -1,454 +0,0 @@ -Intel Integrated Sensor Hub (ISH) -=============================== - -A sensor hub enables the ability to offload sensor polling and algorithm -processing to a dedicated low power co-processor. This allows the core -processor to go into low power modes more often, resulting in the increased -battery life. - -There are many vendors providing external sensor hubs confirming to HID -Sensor usage tables, and used in several tablets, 2 in 1 convertible laptops -and embedded products. Linux had this support since Linux 3.9. - -Intel® introduced integrated sensor hubs as a part of the SoC starting from -Cherry Trail and now supported on multiple generations of CPU packages. There -are many commercial devices already shipped with Integrated Sensor Hubs (ISH). -These ISH also comply to HID sensor specification, but the difference is the -transport protocol used for communication. The current external sensor hubs -mainly use HID over i2C or USB. But ISH doesn't use either i2c or USB. - -1. Overview - -Using a analogy with a usbhid implementation, the ISH follows a similar model -for a very high speed communication: - - ----------------- ---------------------- - | USB HID | --> | ISH HID | - ----------------- ---------------------- - ----------------- ---------------------- - | USB protocol | --> | ISH Transport | - ----------------- ---------------------- - ----------------- ---------------------- - | EHCI/XHCI | --> | ISH IPC | - ----------------- ---------------------- - PCI PCI - ----------------- ---------------------- - |Host controller| --> | ISH processor | - ----------------- ---------------------- - USB Link - ----------------- ---------------------- - | USB End points| --> | ISH Clients | - ----------------- ---------------------- - -Like USB protocol provides a method for device enumeration, link management -and user data encapsulation, the ISH also provides similar services. But it is -very light weight tailored to manage and communicate with ISH client -applications implemented in the firmware. - -The ISH allows multiple sensor management applications executing in the -firmware. Like USB endpoints the messaging can be to/from a client. As part of -enumeration process, these clients are identified. These clients can be simple -HID sensor applications, sensor calibration application or senor firmware -update application. - -The implementation model is similar, like USB bus, ISH transport is also -implemented as a bus. Each client application executing in the ISH processor -is registered as a device on this bus. The driver, which binds each device -(ISH HID driver) identifies the device type and registers with the hid core. - -2. ISH Implementation: Block Diagram - - --------------------------- - | User Space Applications | - --------------------------- - -----------------IIO ABI---------------- - -------------------------- - | IIO Sensor Drivers | - -------------------------- - -------------------------- - | IIO core | - -------------------------- - -------------------------- - | HID Sensor Hub MFD | - -------------------------- - -------------------------- - | HID Core | - -------------------------- - -------------------------- - | HID over ISH Client | - -------------------------- - -------------------------- - | ISH Transport (ISHTP) | - -------------------------- - -------------------------- - | IPC Drivers | - -------------------------- -OS ----------------- PCI ----------------- -Hardware + Firmware - ---------------------------- - | ISH Hardware/Firmware(FW) | - ---------------------------- - -3. High level processing in above blocks - -3.1 Hardware Interface - -The ISH is exposed as "Non-VGA unclassified PCI device" to the host. The PCI -product and vendor IDs are changed from different generations of processors. So -the source code which enumerate drivers needs to update from generation to -generation. - -3.2 Inter Processor Communication (IPC) driver -Location: drivers/hid/intel-ish-hid/ipc - -The IPC message used memory mapped I/O. The registers are defined in -hw-ish-regs.h. - -3.2.1 IPC/FW message types - -There are two types of messages, one for management of link and other messages -are to and from transport layers. - -TX and RX of Transport messages - -A set of memory mapped register offers support of multi byte messages TX and -RX (E.g.IPC_REG_ISH2HOST_MSG, IPC_REG_HOST2ISH_MSG). The IPC layer maintains -internal queues to sequence messages and send them in order to the FW. -Optionally the caller can register handler to get notification of completion. -A door bell mechanism is used in messaging to trigger processing in host and -client firmware side. When ISH interrupt handler is called, the ISH2HOST -doorbell register is used by host drivers to determine that the interrupt -is for ISH. - -Each side has 32 32-bit message registers and a 32-bit doorbell. Doorbell -register has the following format: -Bits 0..6: fragment length (7 bits are used) -Bits 10..13: encapsulated protocol -Bits 16..19: management command (for IPC management protocol) -Bit 31: doorbell trigger (signal H/W interrupt to the other side) -Other bits are reserved, should be 0. - -3.2.2 Transport layer interface - -To abstract HW level IPC communication, a set of callbacks are registered. -The transport layer uses them to send and receive messages. -Refer to struct ishtp_hw_ops for callbacks. - -3.3 ISH Transport layer -Location: drivers/hid/intel-ish-hid/ishtp/ - -3.3.1 A Generic Transport Layer - -The transport layer is a bi-directional protocol, which defines: -- Set of commands to start, stop, connect, disconnect and flow control -(ishtp/hbm.h) for details -- A flow control mechanism to avoid buffer overflows - -This protocol resembles bus messages described in the following document: -http://www.intel.com/content/dam/www/public/us/en/documents/technical-\ -specifications/dcmi-hi-1-0-spec.pdf "Chapter 7: Bus Message Layer" - -3.3.2 Connection and Flow Control Mechanism - -Each FW client and a protocol is identified by an UUID. In order to communicate -to a FW client, a connection must be established using connect request and -response bus messages. If successful, a pair (host_client_id and fw_client_id) -will identify the connection. - -Once connection is established, peers send each other flow control bus messages -independently. Every peer may send a message only if it has received a -flow-control credit before. Once it sent a message, it may not send another one -before receiving the next flow control credit. -Either side can send disconnect request bus message to end communication. Also -the link will be dropped if major FW reset occurs. - -3.3.3 Peer to Peer data transfer - -Peer to Peer data transfer can happen with or without using DMA. Depending on -the sensor bandwidth requirement DMA can be enabled by using module parameter -ishtp_use_dma under intel_ishtp. - -Each side (host and FW) manages its DMA transfer memory independently. When an -ISHTP client from either host or FW side wants to send something, it decides -whether to send over IPC or over DMA; for each transfer the decision is -independent. The sending side sends DMA_XFER message when the message is in -the respective host buffer (TX when host client sends, RX when FW client -sends). The recipient of DMA message responds with DMA_XFER_ACK, indicating -the sender that the memory region for that message may be reused. - -DMA initialization is started with host sending DMA_ALLOC_NOTIFY bus message -(that includes RX buffer) and FW responds with DMA_ALLOC_NOTIFY_ACK. -Additionally to DMA address communication, this sequence checks capabilities: -if thw host doesn't support DMA, then it won't send DMA allocation, so FW can't -send DMA; if FW doesn't support DMA then it won't respond with -DMA_ALLOC_NOTIFY_ACK, in which case host will not use DMA transfers. -Here ISH acts as busmaster DMA controller. Hence when host sends DMA_XFER, -it's request to do host->ISH DMA transfer; when FW sends DMA_XFER, it means -that it already did DMA and the message resides at host. Thus, DMA_XFER -and DMA_XFER_ACK act as ownership indicators. - -At initial state all outgoing memory belongs to the sender (TX to host, RX to -FW), DMA_XFER transfers ownership on the region that contains ISHTP message to -the receiving side, DMA_XFER_ACK returns ownership to the sender. A sender -needs not wait for previous DMA_XFER to be ack'ed, and may send another message -as long as remaining continuous memory in its ownership is enough. -In principle, multiple DMA_XFER and DMA_XFER_ACK messages may be sent at once -(up to IPC MTU), thus allowing for interrupt throttling. -Currently, ISH FW decides to send over DMA if ISHTP message is more than 3 IPC -fragments and via IPC otherwise. - -3.3.4 Ring Buffers - -When a client initiate a connection, a ring or RX and TX buffers are allocated. -The size of ring can be specified by the client. HID client set 16 and 32 for -TX and RX buffers respectively. On send request from client, the data to be -sent is copied to one of the send ring buffer and scheduled to be sent using -bus message protocol. These buffers are required because the FW may have not -have processed the last message and may not have enough flow control credits -to send. Same thing holds true on receive side and flow control is required. - -3.3.5 Host Enumeration - -The host enumeration bus command allow discovery of clients present in the FW. -There can be multiple sensor clients and clients for calibration function. - -To ease in implantation and allow independent driver handle each client -this transport layer takes advantage of Linux Bus driver model. Each -client is registered as device on the the transport bus (ishtp bus). - -Enumeration sequence of messages: -- Host sends HOST_START_REQ_CMD, indicating that host ISHTP layer is up. -- FW responds with HOST_START_RES_CMD -- Host sends HOST_ENUM_REQ_CMD (enumerate FW clients) -- FW responds with HOST_ENUM_RES_CMD that includes bitmap of available FW -client IDs -- For each FW ID found in that bitmap host sends -HOST_CLIENT_PROPERTIES_REQ_CMD -- FW responds with HOST_CLIENT_PROPERTIES_RES_CMD. Properties include UUID, -max ISHTP message size, etc. -- Once host received properties for that last discovered client, it considers -ISHTP device fully functional (and allocates DMA buffers) - -3.4 HID over ISH Client -Location: drivers/hid/intel-ish-hid - -The ISHTP client driver is responsible for: -- enumerate HID devices under FW ISH client -- Get Report descriptor -- Register with HID core as a LL driver -- Process Get/Set feature request -- Get input reports - -3.5 HID Sensor Hub MFD and IIO sensor drivers - -The functionality in these drivers is the same as an external sensor hub. -Refer to -Documentation/hid/hid-sensor.txt for HID sensor -Documentation/ABI/testing/sysfs-bus-iio for IIO ABIs to user space - -3.6 End to End HID transport Sequence Diagram - -HID-ISH-CLN ISHTP IPC HW - | | | | - | | |-----WAKE UP------------------>| - | | | | - | | |-----HOST READY--------------->| - | | | | - | | |<----MNG_RESET_NOTIFY_ACK----- | - | | | | - | |<----ISHTP_START------ | | - | | | | - | |<-----------------HOST_START_RES_CMD-------------------| - | | | | - | |------------------QUERY_SUBSCRIBER-------------------->| - | | | | - | |------------------HOST_ENUM_REQ_CMD------------------->| - | | | | - | |<-----------------HOST_ENUM_RES_CMD--------------------| - | | | | - | |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>| - | | | | - | |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------| - | Create new device on in ishtp bus | | - | | | | - | |------------------HOST_CLIENT_PROPERTIES_REQ_CMD------>| - | | | | - | |<-----------------HOST_CLIENT_PROPERTIES_RES_CMD-------| - | Create new device on in ishtp bus | | - | | | | - | |--Repeat HOST_CLIENT_PROPERTIES_REQ_CMD-till last one--| - | | | | - probed() - |----ishtp_cl_connect-->|----------------- CLIENT_CONNECT_REQ_CMD-------------->| - | | | | - | |<----------------CLIENT_CONNECT_RES_CMD----------------| - | | | | - |register event callback| | | - | | | | - |ishtp_cl_send( - HOSTIF_DM_ENUM_DEVICES) |----------fill ishtp_msg_hdr struct write to HW----- >| - | | | | - | | |<-----IRQ(IPC_PROTOCOL_ISHTP---| - | | | | - |<--ENUM_DEVICE RSP-----| | | - | | | | -for each enumerated device - |ishtp_cl_send( - HOSTIF_GET_HID_DESCRIPTOR |----------fill ishtp_msg_hdr struct write to HW--- >| - | | | | - ...Response - | | | | -for each enumerated device - |ishtp_cl_send( - HOSTIF_GET_REPORT_DESCRIPTOR |----------fill ishtp_msg_hdr struct write to HW- >| - | | | | - | | | | - hid_allocate_device - | | | | - hid_add_device | | | - | | | | - - -3.7 ISH Debugging - -To debug ISH, event tracing mechanism is used. To enable debug logs -echo 1 > /sys/kernel/debug/tracing/events/intel_ish/enable -cat sys/kernel/debug/tracing/trace - -3.8 ISH IIO sysfs Example on Lenovo thinkpad Yoga 260 - -root@otcpl-ThinkPad-Yoga-260:~# tree -l /sys/bus/iio/devices/ -/sys/bus/iio/devices/ -├── iio:device0 -> ../../../devices/0044:8086:22D8.0001/HID-SENSOR-200073.9.auto/iio:device0 -│   ├── buffer -│   │   ├── enable -│   │   ├── length -│   │   └── watermark -... -│   ├── in_accel_hysteresis -│   ├── in_accel_offset -│   ├── in_accel_sampling_frequency -│   ├── in_accel_scale -│   ├── in_accel_x_raw -│   ├── in_accel_y_raw -│   ├── in_accel_z_raw -│   ├── name -│   ├── scan_elements -│   │   ├── in_accel_x_en -│   │   ├── in_accel_x_index -│   │   ├── in_accel_x_type -│   │   ├── in_accel_y_en -│   │   ├── in_accel_y_index -│   │   ├── in_accel_y_type -│   │   ├── in_accel_z_en -│   │   ├── in_accel_z_index -│   │   └── in_accel_z_type -... -│   │   ├── devices -│   │   │   │   ├── buffer -│   │   │   │   │   ├── enable -│   │   │   │   │   ├── length -│   │   │   │   │   └── watermark -│   │   │   │   ├── dev -│   │   │   │   ├── in_intensity_both_raw -│   │   │   │   ├── in_intensity_hysteresis -│   │   │   │   ├── in_intensity_offset -│   │   │   │   ├── in_intensity_sampling_frequency -│   │   │   │   ├── in_intensity_scale -│   │   │   │   ├── name -│   │   │   │   ├── scan_elements -│   │   │   │   │   ├── in_intensity_both_en -│   │   │   │   │   ├── in_intensity_both_index -│   │   │   │   │   └── in_intensity_both_type -│   │   │   │   ├── trigger -│   │   │   │   │   └── current_trigger -... -│   │   │   │   ├── buffer -│   │   │   │   │   ├── enable -│   │   │   │   │   ├── length -│   │   │   │   │   └── watermark -│   │   │   │   ├── dev -│   │   │   │   ├── in_magn_hysteresis -│   │   │   │   ├── in_magn_offset -│   │   │   │   ├── in_magn_sampling_frequency -│   │   │   │   ├── in_magn_scale -│   │   │   │   ├── in_magn_x_raw -│   │   │   │   ├── in_magn_y_raw -│   │   │   │   ├── in_magn_z_raw -│   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_raw -│   │   │   │   ├── in_rot_hysteresis -│   │   │   │   ├── in_rot_offset -│   │   │   │   ├── in_rot_sampling_frequency -│   │   │   │   ├── in_rot_scale -│   │   │   │   ├── name -... -│   │   │   │   ├── scan_elements -│   │   │   │   │   ├── in_magn_x_en -│   │   │   │   │   ├── in_magn_x_index -│   │   │   │   │   ├── in_magn_x_type -│   │   │   │   │   ├── in_magn_y_en -│   │   │   │   │   ├── in_magn_y_index -│   │   │   │   │   ├── in_magn_y_type -│   │   │   │   │   ├── in_magn_z_en -│   │   │   │   │   ├── in_magn_z_index -│   │   │   │   │   ├── in_magn_z_type -│   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_en -│   │   │   │   │   ├── in_rot_from_north_magnetic_tilt_comp_index -│   │   │   │   │   └── in_rot_from_north_magnetic_tilt_comp_type -│   │   │   │   ├── trigger -│   │   │   │   │   └── current_trigger -... -│   │   │   │   ├── buffer -│   │   │   │   │   ├── enable -│   │   │   │   │   ├── length -│   │   │   │   │   └── watermark -│   │   │   │   ├── dev -│   │   │   │   ├── in_anglvel_hysteresis -│   │   │   │   ├── in_anglvel_offset -│   │   │   │   ├── in_anglvel_sampling_frequency -│   │   │   │   ├── in_anglvel_scale -│   │   │   │   ├── in_anglvel_x_raw -│   │   │   │   ├── in_anglvel_y_raw -│   │   │   │   ├── in_anglvel_z_raw -│   │   │   │   ├── name -│   │   │   │   ├── scan_elements -│   │   │   │   │   ├── in_anglvel_x_en -│   │   │   │   │   ├── in_anglvel_x_index -│   │   │   │   │   ├── in_anglvel_x_type -│   │   │   │   │   ├── in_anglvel_y_en -│   │   │   │   │   ├── in_anglvel_y_index -│   │   │   │   │   ├── in_anglvel_y_type -│   │   │   │   │   ├── in_anglvel_z_en -│   │   │   │   │   ├── in_anglvel_z_index -│   │   │   │   │   └── in_anglvel_z_type -│   │   │   │   ├── trigger -│   │   │   │   │   └── current_trigger -... -│   │   │   │   ├── buffer -│   │   │   │   │   ├── enable -│   │   │   │   │   ├── length -│   │   │   │   │   └── watermark -│   │   │   │   ├── dev -│   │   │   │   ├── in_anglvel_hysteresis -│   │   │   │   ├── in_anglvel_offset -│   │   │   │   ├── in_anglvel_sampling_frequency -│   │   │   │   ├── in_anglvel_scale -│   │   │   │   ├── in_anglvel_x_raw -│   │   │   │   ├── in_anglvel_y_raw -│   │   │   │   ├── in_anglvel_z_raw -│   │   │   │   ├── name -│   │   │   │   ├── scan_elements -│   │   │   │   │   ├── in_anglvel_x_en -│   │   │   │   │   ├── in_anglvel_x_index -│   │   │   │   │   ├── in_anglvel_x_type -│   │   │   │   │   ├── in_anglvel_y_en -│   │   │   │   │   ├── in_anglvel_y_index -│   │   │   │   │   ├── in_anglvel_y_type -│   │   │   │   │   ├── in_anglvel_z_en -│   │   │   │   │   ├── in_anglvel_z_index -│   │   │   │   │   └── in_anglvel_z_type -│   │   │   │   ├── trigger -│   │   │   │   │   └── current_trigger -... diff --git a/Documentation/hid/uhid.txt b/Documentation/hid/uhid.rst similarity index 94% rename from Documentation/hid/uhid.txt rename to Documentation/hid/uhid.rst index 958fff945304..b18cb96c885f 100644 --- a/Documentation/hid/uhid.txt +++ b/Documentation/hid/uhid.rst @@ -1,5 +1,6 @@ - UHID - User-space I/O driver support for HID subsystem - ======================================================== +====================================================== +UHID - User-space I/O driver support for HID subsystem +====================================================== UHID allows user-space to implement HID transport drivers. Please see hid-transport.txt for an introduction into HID transport drivers. This document @@ -22,9 +23,9 @@ If a new device is detected by your HID I/O Driver and you want to register this device with the HID subsystem, then you need to open /dev/uhid once for each device you want to register. All further communication is done by read()'ing or write()'ing "struct uhid_event" objects. Non-blocking operations are supported -by setting O_NONBLOCK. +by setting O_NONBLOCK:: -struct uhid_event { + struct uhid_event { __u32 type; union { struct uhid_create2_req create2; @@ -32,7 +33,7 @@ struct uhid_event { struct uhid_input2_req input2; ... } u; -}; + }; The "type" field contains the ID of the event. Depending on the ID different payloads are sent. You must not split a single event across multiple read()'s or @@ -86,31 +87,31 @@ the request was handled successfully. O_NONBLOCK does not affect write() as writes are always handled immediately in a non-blocking fashion. Future requests might make use of O_NONBLOCK, though. - UHID_CREATE2: +UHID_CREATE2: This creates the internal HID device. No I/O is possible until you send this event to the kernel. The payload is of type struct uhid_create2_req and contains information about your device. You can start I/O now. - UHID_DESTROY: +UHID_DESTROY: This destroys the internal HID device. No further I/O will be accepted. There may still be pending messages that you can receive with read() but no further UHID_INPUT events can be sent to the kernel. You can create a new device by sending UHID_CREATE2 again. There is no need to reopen the character device. - UHID_INPUT2: +UHID_INPUT2: You must send UHID_CREATE2 before sending input to the kernel! This event contains a data-payload. This is the raw data that you read from your device on the interrupt channel. The kernel will parse the HID reports. - UHID_GET_REPORT_REPLY: +UHID_GET_REPORT_REPLY: If you receive a UHID_GET_REPORT request you must answer with this request. You must copy the "id" field from the request into the answer. Set the "err" field to 0 if no error occurred or to EIO if an I/O error occurred. If "err" is 0 then you should fill the buffer of the answer with the results of the GET_REPORT request and set "size" correspondingly. - UHID_SET_REPORT_REPLY: +UHID_SET_REPORT_REPLY: This is the SET_REPORT equivalent of UHID_GET_REPORT_REPLY. Unlike GET_REPORT, SET_REPORT never returns a data buffer, therefore, it's sufficient to set the "id" and "err" fields correctly. @@ -120,16 +121,18 @@ read() read() will return a queued output report. No reaction is required to any of them but you should handle them according to your needs. - UHID_START: +UHID_START: This is sent when the HID device is started. Consider this as an answer to UHID_CREATE2. This is always the first event that is sent. Note that this event might not be available immediately after write(UHID_CREATE2) returns. Device drivers might required delayed setups. This event contains a payload of type uhid_start_req. The "dev_flags" field describes special behaviors of a device. The following flags are defined: - UHID_DEV_NUMBERED_FEATURE_REPORTS: - UHID_DEV_NUMBERED_OUTPUT_REPORTS: - UHID_DEV_NUMBERED_INPUT_REPORTS: + + - UHID_DEV_NUMBERED_FEATURE_REPORTS + - UHID_DEV_NUMBERED_OUTPUT_REPORTS + - UHID_DEV_NUMBERED_INPUT_REPORTS + Each of these flags defines whether a given report-type uses numbered reports. If numbered reports are used for a type, all messages from the kernel already have the report-number as prefix. Otherwise, no @@ -137,33 +140,35 @@ them but you should handle them according to your needs. For messages sent by user-space to the kernel, you must adjust the prefixes according to these flags. - UHID_STOP: +UHID_STOP: This is sent when the HID device is stopped. Consider this as an answer to UHID_DESTROY. + If you didn't destroy your device via UHID_DESTROY, but the kernel sends an UHID_STOP event, this should usually be ignored. It means that the kernel reloaded/changed the device driver loaded on your HID device (or some other maintenance actions happened). + You can usually ignored any UHID_STOP events safely. - UHID_OPEN: +UHID_OPEN: This is sent when the HID device is opened. That is, the data that the HID device provides is read by some other process. You may ignore this event but it is useful for power-management. As long as you haven't received this event there is actually no other process that reads your data so there is no need to send UHID_INPUT2 events to the kernel. - UHID_CLOSE: +UHID_CLOSE: This is sent when there are no more processes which read the HID data. It is the counterpart of UHID_OPEN and you may as well ignore this event. - UHID_OUTPUT: +UHID_OUTPUT: This is sent if the HID device driver wants to send raw data to the I/O device on the interrupt channel. You should read the payload and forward it to the device. The payload is of type "struct uhid_output_req". This may be received even though you haven't received UHID_OPEN, yet. - UHID_GET_REPORT: +UHID_GET_REPORT: This event is sent if the kernel driver wants to perform a GET_REPORT request on the control channeld as described in the HID specs. The report-type and report-number are available in the payload. @@ -177,11 +182,12 @@ them but you should handle them according to your needs. timed out, the kernel will ignore the response silently. The "id" field is never re-used, so conflicts cannot happen. - UHID_SET_REPORT: +UHID_SET_REPORT: This is the SET_REPORT equivalent of UHID_GET_REPORT. On receipt, you shall send a SET_REPORT request to your hid device. Once it replies, you must tell the kernel about it via UHID_SET_REPORT_REPLY. The same restrictions as for UHID_GET_REPORT apply. ---------------------------------------------------- + Written 2012, David Herrmann diff --git a/Documentation/input/input.rst b/Documentation/input/input.rst index 47f86a4bf16c..0eb61e67a7b7 100644 --- a/Documentation/input/input.rst +++ b/Documentation/input/input.rst @@ -188,7 +188,7 @@ LCDs and many other purposes. The monitor and speaker controls should be easy to add to the hid/input interface, but for the UPSs and LCDs it doesn't make much sense. For this, -the hiddev interface was designed. See Documentation/hid/hiddev.txt +the hiddev interface was designed. See Documentation/hid/hiddev.rst for more information about it. The usage of the usbhid module is very simple, it takes no parameters, diff --git a/MAINTAINERS b/MAINTAINERS index 66bcec263dbf..4e1e598a32d9 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -16165,7 +16165,7 @@ M: Benjamin Tissoires L: linux-usb@vger.kernel.org T: git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git S: Maintained -F: Documentation/hid/hiddev.txt +F: Documentation/hid/hiddev.rst F: drivers/hid/usbhid/ USB INTEL XHCI ROLE MUX DRIVER -- 2.20.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v2,59/79] docs: hid: convert to ReST From: Mauro Carvalho Chehab Message-Id: Date: Mon, 22 Apr 2019 10:27:48 -0300 To: Linux Doc Mailing List Cc: Mauro Carvalho Chehab , Mauro Carvalho Chehab , linux-kernel@vger.kernel.org, Jonathan Corbet , Jiri Kosina , Jonathan Cameron , Srinivas Pandruvada , Benjamin Tissoires , Dmitry Torokhov , linux-input@vger.kernel.org, linux-iio@vger.kernel.org, linux-usb@vger.kernel.org List-ID: UmVuYW1lIHRoZSBISUQgZG9jdW1lbnRhdGlvbiBmaWxlcyB0byBSZVNULCBhZGQgYW4KaW5kZXgg Zm9yIHRoZW0gYW5kIGFkanVzdCBpbiBvcmRlciB0byBwcm9kdWNlIGEgbmljZSBodG1sCm91dHB1 dCB2aWEgdGhlIFNwaGlueCBidWlsZCBzeXN0ZW0uCgpXaGlsZSBoZXJlLCBmaXggdGhlIHN5c2Zz IGV4YW1wbGUgZnJvbSBoaWQtc2Vuc29yLnR4dCwgdGhhdApoYXMgYSBsb3Qgb2YgIj8iIGluc3Rl YWQgb2YgdGhlIHByb3BlciBVVEYtOCBjaGFyYWN0ZXJzIHRoYXQKYXJlIHByb2R1Y2VkIGJ5IHRo ZSB0cmVlIGNvbW1hbmQuCgpBdCBpdHMgbmV3IGluZGV4LnJzdCwgbGV0J3MgYWRkIGEgOm9ycGhh bjogd2hpbGUgdGhpcyBpcyBub3QgbGlua2VkIHRvCnRoZSBtYWluIGluZGV4LnJzdCBmaWxlLCBp biBvcmRlciB0byBhdm9pZCBidWlsZCB3YXJuaW5ncy4KClNpZ25lZC1vZmYtYnk6IE1hdXJvIENh cnZhbGhvIENoZWhhYiA8bWNoZWhhYitzYW1zdW5nQGtlcm5lbC5vcmc+Ci0tLQogLi4uL2hpZC97 aGlkLWFscHMudHh0ID0+IGhpZC1hbHBzLnJzdH0gICAgICAgIHwgIDg1ICsrLQogLi4uL2hpZC97 aGlkLXNlbnNvci50eHQgPT4gaGlkLXNlbnNvci5yc3R9ICAgIHwgMTkyICsrKy0tLS0KIC4uLi97 aGlkLXRyYW5zcG9ydC50eHQgPT4gaGlkLXRyYW5zcG9ydC5yc3R9ICB8ICA4MiArKy0KIERvY3Vt ZW50YXRpb24vaGlkL3toaWRkZXYudHh0ID0+IGhpZGRldi5yc3R9ICB8IDEzMCArKystLQogRG9j dW1lbnRhdGlvbi9oaWQve2hpZHJhdy50eHQgPT4gaGlkcmF3LnJzdH0gIHwgIDUzICstCiBEb2N1 bWVudGF0aW9uL2hpZC9pbmRleC5yc3QgICAgICAgICAgICAgICAgICAgfCAgMTggKwogRG9jdW1l bnRhdGlvbi9oaWQvaW50ZWwtaXNoLWhpZC5yc3QgICAgICAgICAgIHwgNDg1ICsrKysrKysrKysr KysrKysrKwogRG9jdW1lbnRhdGlvbi9oaWQvaW50ZWwtaXNoLWhpZC50eHQgICAgICAgICAgIHwg NDU0IC0tLS0tLS0tLS0tLS0tLS0KIERvY3VtZW50YXRpb24vaGlkL3t1aGlkLnR4dCA9PiB1aGlk LnJzdH0gICAgICB8ICA0NiArLQogRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC5yc3QgICAgICAg ICAgICAgICAgIHwgICAyICstCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDIgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDg4NSBpbnNlcnRpb25zKCspLCA2 NjQgZGVsZXRpb25zKC0pCiByZW5hbWUgRG9jdW1lbnRhdGlvbi9oaWQve2hpZC1hbHBzLnR4dCA9 PiBoaWQtYWxwcy5yc3R9ICg2NCUpCiByZW5hbWUgRG9jdW1lbnRhdGlvbi9oaWQve2hpZC1zZW5z b3IudHh0ID0+IGhpZC1zZW5zb3IucnN0fSAoNjElKQogcmVuYW1lIERvY3VtZW50YXRpb24vaGlk L3toaWQtdHJhbnNwb3J0LnR4dCA9PiBoaWQtdHJhbnNwb3J0LnJzdH0gKDkzJSkKIHJlbmFtZSBE b2N1bWVudGF0aW9uL2hpZC97aGlkZGV2LnR4dCA9PiBoaWRkZXYucnN0fSAoODAlKQogcmVuYW1l IERvY3VtZW50YXRpb24vaGlkL3toaWRyYXcudHh0ID0+IGhpZHJhdy5yc3R9ICg4OSUpCiBjcmVh dGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9oaWQvaW5kZXgucnN0CiBjcmVhdGUgbW9kZSAx MDA2NDQgRG9jdW1lbnRhdGlvbi9oaWQvaW50ZWwtaXNoLWhpZC5yc3QKIGRlbGV0ZSBtb2RlIDEw MDY0NCBEb2N1bWVudGF0aW9uL2hpZC9pbnRlbC1pc2gtaGlkLnR4dAogcmVuYW1lIERvY3VtZW50 YXRpb24vaGlkL3t1aGlkLnR4dCA9PiB1aGlkLnJzdH0gKDk0JSkKCmRpZmYgLS1naXQgYS9Eb2N1 bWVudGF0aW9uL2hpZC9oaWQtYWxwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2hpZC9oaWQtYWxwcy5y c3QKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9oaWQvaGlk LWFscHMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2hpZC9oaWQtYWxwcy5yc3QKaW5kZXgg NmIwMmEyNDQ3Yzc3Li5lMmY0YzRjMTFlM2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaGlk L2hpZC1hbHBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hpZC9oaWQtYWxwcy5yc3QKQEAgLTEs MTkgKzEsMjYgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09CiBBTFBTIEhJRCBUb3VjaHBh ZCBQcm90b2NvbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PT09PT09PT09PT09PT09PT09 PT09PT0KIAogSW50cm9kdWN0aW9uCiAtLS0tLS0tLS0tLS0KIEN1cnJlbnRseSBBTFBTIEhJRCBk cml2ZXIgc3VwcG9ydHMgVTEgVG91Y2hwYWQgZGV2aWNlLgogCi1VMSBkZXZ1Y2UgYmFzaWMgaW5m b3JtYXRpb24uCitVMSBkZXZpY2UgYmFzaWMgaW5mb3JtYXRpb24uCisKKz09PT09PT09PT0JPT09 PT09CiBWZW5kZXIgSUQJMHgwNDRFCiBQcm9kdWN0IElECTB4MTIwQgogVmVyc2lvbiBJRAkweDAx MjEKKz09PT09PT09PT0JPT09PT09CiAKIAogSElEIERlc2NyaXB0b3IKLS0tLS0tLS0tLS0tLQor LS0tLS0tLS0tLS0tLS0KKworPT09PT09PQk9PT09PT09PT09PT09PT09PT09PQk9PT09PQk9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEJ5dGUJRmllbGQJCQlWYWx1ZQlO b3RlcworPT09PT09PQk9PT09PT09PT09PT09PT09PT09PQk9PT09PQk9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KIDAJd0hJRERlc2NMZW5ndGgJCTAwMUUJTGVuZ3RoIG9m IEhJRCBEZXNjcmlwdG9yIDogMzAgYnl0ZXMKIDIJYmNkVmVyc2lvbgkJMDEwMAlDb21wbGlhbnQg d2l0aCBWZXJzaW9uIDEuMDAKIDQJd1JlcG9ydERlc2NMZW5ndGgJMDBCMglSZXBvcnQgRGVzY3Jp cHRvciBpcyAxNzggQnl0ZXMgKDB4MDBCMikKQEAgLTI4LDMyICszNSw0MiBAQCBCeXRlCUZpZWxk CQkJVmFsdWUJTm90ZXMKIDIyCXdQcm9kdWN0SUQJCTEyMEIJUHJvZHVjdCBJRCAweDEyMEIKIDI0 CXdWZXJzaW9uSUQJCTAxMjEJVmVyc2lvbiAwMS4yMQogMjYJUkVTRVJWRUQJCTAwMDAJUkVTRVJW RUQKKz09PT09PT0JPT09PT09PT09PT09PT09PT09PT0JPT09PT0JPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CiAKIAogUmVwb3J0IElECi0tLS0tLS0tLS0tLS0KLVJlcG9y dElELTEJKElucHV0IFJlcG9ydHMpCShISURVc2FnZS1Nb3VzZSkgZm9yIFRQJlNQCi1SZXBvcnRJ RC0yCShJbnB1dCBSZXBvcnRzKQkoSElEVXNhZ2Uta2V5Ym9hcmQpIGZvciBUUAotUmVwb3J0SUQt MwkoSW5wdXQgUmVwb3J0cykJKFZlbmRvciBVc2FnZTogTWF4IDEwIGZpbmdlciBkYXRhKSBmb3Ig VFAKLVJlcG9ydElELTQJKElucHV0IFJlcG9ydHMpCShWZW5kb3IgVXNhZ2U6IE9OIGJpdCBkYXRh KSBmb3IgR1AKLVJlcG9ydElELTUJKEZlYXR1cmUgUmVwb3J0cykJRmVhdHVyZSBSZXBvcnRzCi1S ZXBvcnRJRC02CShJbnB1dCBSZXBvcnRzKQkoVmVuZG9yIFVzYWdlOiBTdGlja1BvaW50ZXIgZGF0 YSkgZm9yIFNQCi1SZXBvcnRJRC03CShGZWF0dXJlIFJlcG9ydHMpCUZsYXNoIHVwZGF0ZSAoQm9v dGxvYWRlcikKKy0tLS0tLS0tLQorCis9PT09PT09PT09CT09PT09PT09PT09PT09PT09ICA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUmVwb3J0SUQtMQkoSW5wdXQg UmVwb3J0cykJICAgKEhJRFVzYWdlLU1vdXNlKSBmb3IgVFAmU1AKK1JlcG9ydElELTIJKElucHV0 IFJlcG9ydHMpCSAgIChISURVc2FnZS1rZXlib2FyZCkgZm9yIFRQCitSZXBvcnRJRC0zCShJbnB1 dCBSZXBvcnRzKQkgICAoVmVuZG9yIFVzYWdlOiBNYXggMTAgZmluZ2VyIGRhdGEpIGZvciBUUAor UmVwb3J0SUQtNAkoSW5wdXQgUmVwb3J0cykJICAgKFZlbmRvciBVc2FnZTogT04gYml0IGRhdGEp IGZvciBHUAorUmVwb3J0SUQtNQkoRmVhdHVyZSBSZXBvcnRzKSAgRmVhdHVyZSBSZXBvcnRzCitS ZXBvcnRJRC02CShJbnB1dCBSZXBvcnRzKQkgICAoVmVuZG9yIFVzYWdlOiBTdGlja1BvaW50ZXIg ZGF0YSkgZm9yIFNQCitSZXBvcnRJRC03CShGZWF0dXJlIFJlcG9ydHMpICBGbGFzaCB1cGRhdGUg KEJvb3Rsb2FkZXIpCis9PT09PT09PT09CT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKIERhdGEgcGF0dGVybgogLS0tLS0tLS0t LS0tCisKKz09PT09CT09PT09PT09PT0JPT09PT0JPT09PT09PT09PT09PT09PT0KIENhc2UxCVJl cG9ydElEXzEJVFAvU1AJUmVsYXRpdmUvUmVsYXRpdmUKIENhc2UyCVJlcG9ydElEXzMJVFAJQWJz b2x1dGUKIAlSZXBvcnRJRF82CVNQCUFic29sdXRlCis9PT09PQk9PT09PT09PT09CT09PT09CT09 PT09PT09PT09PT09PT09CiAKIAogQ29tbWFuZCBSZWFkL1dyaXRlCiAtLS0tLS0tLS0tLS0tLS0t LS0KIFRvIHJlYWQvd3JpdGUgdG8gUkFNLCBuZWVkIHRvIHNlbmQgYSBjb21tYW5kcyB0byB0aGUg ZGV2aWNlLgorCiBUaGUgY29tbWFuZCBmb3JtYXQgaXMgYXMgYmVsb3cuCiAKIERhdGFCeXRlKFNF VF9SRVBPUlQpCisKKz09PT09CT09PT09PT09PT09PT09PT09PT09PT0KIEJ5dGUxCUNvbW1hbmQg Qnl0ZQogQnl0ZTIJQWRkcmVzcyAtIEJ5dGUgMCAoTFNCKQogQnl0ZTMJQWRkcmVzcyAtIEJ5dGUg MQpAQCAtNjEsMTMgKzc4LDE5IEBAIEJ5dGU0CUFkZHJlc3MgLSBCeXRlIDIKIEJ5dGU1CUFkZHJl c3MgLSBCeXRlIDMgKE1TQikKIEJ5dGU2CVZhbHVlIEJ5dGUKIEJ5dGU3CUNoZWNrc3VtCis9PT09 PQk9PT09PT09PT09PT09PT09PT09PT09CiAKIENvbW1hbmQgQnl0ZSBpcyByZWFkPTB4RDEvd3Jp dGU9MHhEMiAuCisKIEFkZHJlc3MgaXMgcmVhZC93cml0ZSBSQU0gYWRkcmVzcy4KKwogVmFsdWUg Qnl0ZSBpcyB3cml0aW5nIGRhdGEgd2hlbiB5b3Ugc2VuZCB0aGUgd3JpdGUgY29tbWFuZHMuCisK IFdoZW4geW91IHJlYWQgUkFNLCB0aGVyZSBpcyBubyBtZWFuaW5nLgogCiBEYXRhQnl0ZShHRVRf UkVQT1JUKQorCis9PT09PQk9PT09PT09PT09PT09PT09PT09PT09CiBCeXRlMQlSZXNwb25zZSBC eXRlCiBCeXRlMglBZGRyZXNzIC0gQnl0ZSAwIChMU0IpCiBCeXRlMwlBZGRyZXNzIC0gQnl0ZSAx CkBAIC03NSw2ICs5OCw3IEBAIEJ5dGU0CUFkZHJlc3MgLSBCeXRlIDIKIEJ5dGU1CUFkZHJlc3Mg LSBCeXRlIDMgKE1TQikKIEJ5dGU2CVZhbHVlIEJ5dGUKIEJ5dGU3CUNoZWNrc3VtCis9PT09PQk9 PT09PT09PT09PT09PT09PT09PT09CiAKIFJlYWQgdmFsdWUgaXMgc3RvcmVkIGluIFZhbHVlIEJ5 dGUuCiAKQEAgLTgyLDcgKzEwNiwxMSBAQCBSZWFkIHZhbHVlIGlzIHN0b3JlZCBpbiBWYWx1ZSBC eXRlLgogUGFja2V0IEZvcm1hdAogVG91Y2hwYWQgZGF0YSBieXRlCiAtLS0tLS0tLS0tLS0tLS0t LS0KLQliNwliNgliNQliNAliMwliMgliMQliMAorCisKKz09PT09PT0gPT09PT09PSA9PT09PT09 ID09PT09PT0gPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PQorLQliNwliNgli NQliNAliMwliMgliMQliMAorPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PT09 ID09PT09PT0gPT09PT09PSA9PT09PT09ID09PT09CiAxCTAJMAlTVzYJU1c1CVNXNAlTVzMJU1cy CVNXMQogMgkwCTAJMAlGY3YJRm4zCUZuMglGbjEJRm4wCiAzCVhhMF83CVhhMF82CVhhMF81CVhh MF80CVhhMF8zCVhhMF8yCVhhMF8xCVhhMF8wCkBAIC0xMTQsMTcgKzE0MiwyNSBAQCBUb3VjaHBh ZCBkYXRhIGJ5dGUKIDI1CVlhNF83CVlhNF82CVlhNF81CVlhNF80CVlhNF8zCVlhNF8yCVlhNF8x CVlhNF8wCiAyNglZYTRfMTUJWWE0XzE0CVlhNF8xMwlZYTRfMTIJWWE0XzExCVlhNF8xMAlZYTRf OQlZYTRfOAogMjcJTEZCNAlaczRfNglaczRfNQlaczRfNAlaczRfMwlaczRfMglaczRfMQlaczRf MAorPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09 PSA9PT09PT09ID09PT09CiAKIAotU1cxLVNXNjoJU1cgT04vT0ZGIHN0YXR1cwotWGFuXzE1LTAo MTZiaXQpOlggQWJzb2x1dGUgZGF0YSBvZiB0aGUgIm4idGggZmluZ2VyCi1ZYW5fMTUtMCgxNmJp dCk6WSBBYnNvbHV0ZSBkYXRhIG9mIHRoZSAibiJ0aCBmaW5nZXIKLVpzbl82LTAoN2JpdCk6CU9w ZXJhdGlvbiBhcmVhIG9mIHRoZSAibiJ0aCBmaW5nZXIKK1NXMS1TVzY6CisJU1cgT04vT0ZGIHN0 YXR1cworWGFuXzE1LTAoMTZiaXQpOgorCVggQWJzb2x1dGUgZGF0YSBvZiB0aGUgIm4idGggZmlu Z2VyCitZYW5fMTUtMCgxNmJpdCk6CisJWSBBYnNvbHV0ZSBkYXRhIG9mIHRoZSAibiJ0aCBmaW5n ZXIKK1pzbl82LTAoN2JpdCk6CisJT3BlcmF0aW9uIGFyZWEgb2YgdGhlICJuInRoIGZpbmdlcgog CiAKIFN0aWNrUG9pbnRlciBkYXRhIGJ5dGUKLS0tLS0tLS0tLS0tLS0tLS0tLQotCWI3CWI2CWI1 CWI0CWIzCWIyCWIxCWIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT0gPT09PT09 PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PQor LQliNwliNgliNQliNAliMwliMgliMQliMAorPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09 PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PT09ID09PT09CiBCeXRlMQkxCTEJMQkwCTEJ U1czCVNXMglTVzEKIEJ5dGUyCVg3CVg2CVg1CVg0CVgzCVgyCVgxCVgwCiBCeXRlMwlYMTUJWDE0 CVgxMwlYMTIJWDExCVgxMAlYOQlYOApAQCAtMTMyLDggKzE2OCwxMyBAQCBCeXRlNAlZNwlZNglZ NQlZNAlZMwlZMglZMQlZMAogQnl0ZTUJWTE1CVkxNAlZMTMJWTEyCVkxMQlZMTAJWTkJWTgKIEJ5 dGU2CVo3CVo2CVo1CVo0CVozCVoyCVoxCVowCiBCeXRlNwlUJlAJWjE0CVoxMwlaMTIJWjExCVox MAlaOQlaOAorPT09PT09PSA9PT09PT09ID09PT09PT0gPT09PT09PSA9PT09PT09ID09PT09PT0g PT09PT09PSA9PT09PT09ID09PT09CiAKLVNXMS1TVzM6CVNXIE9OL09GRiBzdGF0dXMKLVhuXzE1 LTAoMTZiaXQpOlggQWJzb2x1dGUgZGF0YQotWW5fMTUtMCgxNmJpdCk6WSBBYnNvbHV0ZSBkYXRh Ci1abl8xNC0wKDE1Yml0KTpaCitTVzEtU1czOgorCVNXIE9OL09GRiBzdGF0dXMKK1huXzE1LTAo MTZiaXQpOgorCVggQWJzb2x1dGUgZGF0YQorWW5fMTUtMCgxNmJpdCk6CisJWSBBYnNvbHV0ZSBk YXRhCitabl8xNC0wKDE1Yml0KToKKwlaCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hpZC9o aWQtc2Vuc29yLnR4dCBiL0RvY3VtZW50YXRpb24vaGlkL2hpZC1zZW5zb3IucnN0CnNpbWlsYXJp dHkgaW5kZXggNjElCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaGlkL2hpZC1zZW5zb3IudHh0 CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2hpZC9oaWQtc2Vuc29yLnJzdAppbmRleCBiMjg3NzUy YTMxY2QuLjc1ODk3MmUzNDk3MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9oaWQvaGlkLXNl bnNvci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9oaWQvaGlkLXNlbnNvci5yc3QKQEAgLTEsNiAr MSw2IEBACi0KKz09PT09PT09PT09PT09PT09PT09PQogSElEIFNlbnNvcnMgRnJhbWV3b3JrCi09 PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT0KIEhJRCBzZW5zb3Ig ZnJhbWV3b3JrIHByb3ZpZGVzIG5lY2Vzc2FyeSBpbnRlcmZhY2VzIHRvIGltcGxlbWVudCBzZW5z b3IgZHJpdmVycywKIHdoaWNoIGFyZSBjb25uZWN0ZWQgdG8gYSBzZW5zb3IgaHViLiBUaGUgc2Vu c29yIGh1YiBpcyBhIEhJRCBkZXZpY2UgYW5kIGl0IHByb3ZpZGVzCiBhIHJlcG9ydCBkZXNjcmlw dG9yIGNvbmZvcm1pbmcgdG8gSElEIDEuMTIgc2Vuc29yIHVzYWdlIHRhYmxlcy4KQEAgLTE1LDIy ICsxNSwyMiBAQCB0aGUgZHJpdmVycyB0aGVtc2VsdmVzLiIKIFRoaXMgc3BlY2lmaWNhdGlvbiBk ZXNjcmliZXMgbWFueSB1c2FnZSBJRHMsIHdoaWNoIGRlc2NyaWJlIHRoZSB0eXBlIG9mIHNlbnNv cgogYW5kIGFsc28gdGhlIGluZGl2aWR1YWwgZGF0YSBmaWVsZHMuIEVhY2ggc2Vuc29yIGNhbiBo YXZlIHZhcmlhYmxlIG51bWJlciBvZgogZGF0YSBmaWVsZHMuIFRoZSBsZW5ndGggYW5kIG9yZGVy IGlzIHNwZWNpZmllZCBpbiB0aGUgcmVwb3J0IGRlc2NyaXB0b3IuIEZvcgotZXhhbXBsZSBhIHBh cnQgb2YgcmVwb3J0IGRlc2NyaXB0b3IgY2FuIGxvb2sgbGlrZToKK2V4YW1wbGUgYSBwYXJ0IG9m IHJlcG9ydCBkZXNjcmlwdG9yIGNhbiBsb29rIGxpa2U6OgogCi0gICBJTlBVVCgxKVtJTlBVVF0K LSAuLgotICAgIEZpZWxkKDIpCi0gICAgICBQaHlzaWNhbCgwMDIwLjAwNzMpCi0gICAgICBVc2Fn ZSgxKQotICAgICAgICAwMDIwLjA0NWYKLSAgICAgIExvZ2ljYWwgTWluaW11bSgtMzI3NjcpCi0g ICAgICBMb2dpY2FsIE1heGltdW0oMzI3NjcpCi0gICAgICBSZXBvcnQgU2l6ZSg4KQotICAgICAg UmVwb3J0IENvdW50KDEpCi0gICAgICBSZXBvcnQgT2Zmc2V0KDE2KQotICAgICAgRmxhZ3MoVmFy aWFibGUgQWJzb2x1dGUpCi0uLgotLi4KKyAgICAgSU5QVVQoMSlbSU5QVVRdCisgICAuLgorICAg ICAgRmllbGQoMikKKyAgICAgICAgUGh5c2ljYWwoMDAyMC4wMDczKQorICAgICAgICBVc2FnZSgx KQorICAgICAgICAgIDAwMjAuMDQ1ZgorICAgICAgICBMb2dpY2FsIE1pbmltdW0oLTMyNzY3KQor ICAgICAgICBMb2dpY2FsIE1heGltdW0oMzI3NjcpCisgICAgICAgIFJlcG9ydCBTaXplKDgpCisg ICAgICAgIFJlcG9ydCBDb3VudCgxKQorICAgICAgICBSZXBvcnQgT2Zmc2V0KDE2KQorICAgICAg ICBGbGFncyhWYXJpYWJsZSBBYnNvbHV0ZSkKKyAgLi4KKyAgLi4KIAogVGhlIHJlcG9ydCBpcyBp bmRpY2F0aW5nICJzZW5zb3IgcGFnZSAoMHgyMCkiIGNvbnRhaW5zIGFuIGFjY2VsZXJvbWV0ZXIt M0QgKDB4NzMpLgogVGhpcyBhY2NlbGVyb21ldGVyLTNEIGhhcyBzb21lIGZpZWxkcy4gSGVyZSBm b3IgZXhhbXBsZSBmaWVsZCAyIGlzIG1vdGlvbiBpbnRlbnNpdHkKQEAgLTQwLDEzICs0MCwxNCBA QCBkYXRhIHdpbGwgdXNlIHRoaXMgZm9ybWF0LgogCiAKIEltcGxlbWVudGF0aW9uCi09PT09PT09 PT09PT09PT09PQorPT09PT09PT09PT09PT0KIAogVGhpcyBzcGVjaWZpY2F0aW9uIGRlZmluZXMg bWFueSBkaWZmZXJlbnQgdHlwZXMgb2Ygc2Vuc29ycyB3aXRoIGRpZmZlcmVudCBzZXRzIG9mCiBk YXRhIGZpZWxkcy4gSXQgaXMgZGlmZmljdWx0IHRvIGhhdmUgYSBjb21tb24gaW5wdXQgZXZlbnQg dG8gdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMsCiBmb3IgZGlmZmVyZW50IHNlbnNvcnMuIEZvciBl eGFtcGxlIGFuIGFjY2VsZXJvbWV0ZXIgY2FuIHNlbmQgWCxZIGFuZCBaIGRhdGEsIHdoZXJlYXMK IGFuIGFtYmllbnQgbGlnaHQgc2Vuc29yIGNhbiBzZW5kIGlsbHVtaW5hdGlvbiBkYXRhLgogU28g dGhlIGltcGxlbWVudGF0aW9uIGhhcyB0d28gcGFydHM6CisKIC0gQ29yZSBoaWQgZHJpdmVyCiAt IEluZGl2aWR1YWwgc2Vuc29yIHByb2Nlc3NpbmcgcGFydCAoc2Vuc29yIGRyaXZlcnMpCiAKQEAg LTU1LDggKzU2LDExIEBAIENvcmUgZHJpdmVyCiBUaGUgY29yZSBkcml2ZXIgcmVnaXN0ZXJzICho aWQtc2Vuc29yLWh1YikgcmVnaXN0ZXJzIGFzIGEgSElEIGRyaXZlci4gSXQgcGFyc2VzCiByZXBv cnQgZGVzY3JpcHRvcnMgYW5kIGlkZW50aWZpZXMgYWxsIHRoZSBzZW5zb3JzIHByZXNlbnQuIEl0 IGFkZHMgYW4gTUZEIGRldmljZQogd2l0aCBuYW1lIEhJRC1TRU5TT1IteHh4eCAod2hlcmUgeHh4 eCBpcyB1c2FnZSBpZCBmcm9tIHRoZSBzcGVjaWZpY2F0aW9uKS4KLUZvciBleGFtcGxlCisKK0Zv ciBleGFtcGxlOgorCiBISUQtU0VOU09SLTIwMDA3MyBpcyByZWdpc3RlcmVkIGZvciBhbiBBY2Nl bGVyb21ldGVyIDNEIGRyaXZlci4KKwogU28gaWYgYW55IGRyaXZlciB3aXRoIHRoaXMgbmFtZSBp cyBpbnNlcnRlZCwgdGhlbiB0aGUgcHJvYmUgcm91dGluZSBmb3IgdGhhdAogZnVuY3Rpb24gd2ls bCBiZSBjYWxsZWQuIFNvIGFuIGFjY2VsZXJvbWV0ZXIgcHJvY2Vzc2luZyBkcml2ZXIgY2FuIHJl Z2lzdGVyCiB3aXRoIHRoaXMgbmFtZSBhbmQgd2lsbCBiZSBwcm9iZWQgaWYgdGhlcmUgaXMgYW4g YWNjZWxlcm9tZXRlci0zRCBkZXRlY3RlZC4KQEAgLTY2LDcgKzcwLDggQEAgZHJpdmVycyB0byBy ZWdpc3RlciBhbmQgZ2V0IGV2ZW50cyBmb3IgdGhhdCB1c2FnZSBpZC4gQWxzbyBpdCBwcm92aWRl cyBwYXJzaW5nCiBmdW5jdGlvbnMsIHdoaWNoIGdldCBhbmQgc2V0IGVhY2ggaW5wdXQvZmVhdHVy ZS9vdXRwdXQgcmVwb3J0LgogCiBJbmRpdmlkdWFsIHNlbnNvciBwcm9jZXNzaW5nIHBhcnQgKHNl bnNvciBkcml2ZXJzKQotLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFRoZSBwcm9jZXNzaW5nIGRyaXZlciB3aWxsIHVzZSBh biBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIGNvcmUgZHJpdmVyIHRvIHBhcnNlCiB0aGUgcmVw b3J0IGFuZCBnZXQgdGhlIGluZGV4ZXMgb2YgdGhlIGZpZWxkcyBhbmQgYWxzbyBjYW4gZ2V0IGV2 ZW50cy4gVGhpcyBkcml2ZXIKIGNhbiB1c2UgSUlPIGludGVyZmFjZSB0byB1c2UgdGhlIHN0YW5k YXJkIEFCSSBkZWZpbmVkIGZvciBhIHR5cGUgb2Ygc2Vuc29yLgpAQCAtNzUsMzEgKzgwLDM0IEBA IGNhbiB1c2UgSUlPIGludGVyZmFjZSB0byB1c2UgdGhlIHN0YW5kYXJkIEFCSSBkZWZpbmVkIGZv ciBhIHR5cGUgb2Ygc2Vuc29yLgogQ29yZSBkcml2ZXIgSW50ZXJmYWNlCiA9PT09PT09PT09PT09 PT09PT09PT0KIAotQ2FsbGJhY2sgc3RydWN0dXJlOgotRWFjaCBwcm9jZXNzaW5nIGRyaXZlciBj YW4gdXNlIHRoaXMgc3RydWN0dXJlIHRvIHNldCBzb21lIGNhbGxiYWNrcy4KK0NhbGxiYWNrIHN0 cnVjdHVyZTo6CisKKyAgRWFjaCBwcm9jZXNzaW5nIGRyaXZlciBjYW4gdXNlIHRoaXMgc3RydWN0 dXJlIHRvIHNldCBzb21lIGNhbGxiYWNrcy4KIAlpbnQgKCpzdXNwZW5kKSguLik6IENhbGxiYWNr IHdoZW4gSElEIHN1c3BlbmQgaXMgcmVjZWl2ZWQKIAlpbnQgKCpyZXN1bWUpKC4uKTogQ2FsbGJh Y2sgd2hlbiBISUQgcmVzdW1lIGlzIHJlY2VpdmVkCiAJaW50ICgqY2FwdHVyZV9zYW1wbGUpKC4u KTogQ2FwdHVyZSBhIHNhbXBsZSBmb3Igb25lIG9mIGl0cyBkYXRhIGZpZWxkcwogCWludCAoKnNl bmRfZXZlbnQpKC4uKTogT25lIGNvbXBsZXRlIGV2ZW50IGlzIHJlY2VpdmVkIHdoaWNoIGNhbiBo YXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgZGF0YSBmaWVsZHMu CiAKLVJlZ2lzdHJhdGlvbiBmdW5jdGlvbnM6Ci1pbnQgc2Vuc29yX2h1Yl9yZWdpc3Rlcl9jYWxs YmFjayhzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldiwKK1JlZ2lzdHJhdGlvbiBm dW5jdGlvbnM6OgorCisgIGludCBzZW5zb3JfaHViX3JlZ2lzdGVyX2NhbGxiYWNrKHN0cnVjdCBo aWRfc2Vuc29yX2h1Yl9kZXZpY2UgKmhzZGV2LAogCQkJdTMyIHVzYWdlX2lkLAogCQkJc3RydWN0 IGhpZF9zZW5zb3JfaHViX2NhbGxiYWNrcyAqdXNhZ2VfY2FsbGJhY2spOgogCiBSZWdpc3RlcnMg Y2FsbGJhY2tzIGZvciBhbiB1c2FnZSBpZC4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9ucyBhcmUgbm90 IGFsbG93ZWQKLXRvIHNsZWVwLgordG8gc2xlZXA6OgogCiAKLWludCBzZW5zb3JfaHViX3JlbW92 ZV9jYWxsYmFjayhzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldiwKKyAgaW50IHNl bnNvcl9odWJfcmVtb3ZlX2NhbGxiYWNrKHN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9kZXZpY2UgKmhz ZGV2LAogCQkJdTMyIHVzYWdlX2lkKToKIAogUmVtb3ZlcyBjYWxsYmFja3MgZm9yIGFuIHVzYWdl IGlkLgogCiAKLVBhcnNpbmcgZnVuY3Rpb246Ci1pbnQgc2Vuc29yX2h1Yl9pbnB1dF9nZXRfYXR0 cmlidXRlX2luZm8oc3RydWN0IGhpZF9zZW5zb3JfaHViX2RldmljZSAqaHNkZXYsCitQYXJzaW5n IGZ1bmN0aW9uOjoKKworICBpbnQgc2Vuc29yX2h1Yl9pbnB1dF9nZXRfYXR0cmlidXRlX2luZm8o c3RydWN0IGhpZF9zZW5zb3JfaHViX2RldmljZSAqaHNkZXYsCiAJCQl1OCB0eXBlLAogCQkJdTMy IHVzYWdlX2lkLCB1MzIgYXR0cl91c2FnZV9pZCwKIAkJCXN0cnVjdCBoaWRfc2Vuc29yX2h1Yl9h dHRyaWJ1dGVfaW5mbyAqaW5mbyk7CkBAIC0xMTAsMjYgKzExOCwyNyBAQCBzbyB0aGF0IGZpZWxk cyBjYW4gYmUgc2V0IG9yIGdldCBpbmRpdmlkdWFsbHkuCiBUaGVzZSBpbmRleGVzIGF2b2lkIHNl YXJjaGluZyBldmVyeSB0aW1lIGFuZCBnZXR0aW5nIGZpZWxkIGluZGV4IHRvIGdldCBvciBzZXQu CiAKIAotU2V0IEZlYXR1cmUgcmVwb3J0Ci1pbnQgc2Vuc29yX2h1Yl9zZXRfZmVhdHVyZShzdHJ1 Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldiwgdTMyIHJlcG9ydF9pZCwKK1NldCBGZWF0 dXJlIHJlcG9ydDo6CisKKyAgaW50IHNlbnNvcl9odWJfc2V0X2ZlYXR1cmUoc3RydWN0IGhpZF9z ZW5zb3JfaHViX2RldmljZSAqaHNkZXYsIHUzMiByZXBvcnRfaWQsCiAJCQl1MzIgZmllbGRfaW5k ZXgsIHMzMiB2YWx1ZSk7CiAKIFRoaXMgaW50ZXJmYWNlIGlzIHVzZWQgdG8gc2V0IGEgdmFsdWUg Zm9yIGEgZmllbGQgaW4gZmVhdHVyZSByZXBvcnQuIEZvciBleGFtcGxlCiBpZiB0aGVyZSBpcyBh IGZpZWxkIHJlcG9ydF9pbnRlcnZhbCwgd2hpY2ggaXMgcGFyc2VkIGJ5IGEgY2FsbCB0bwotc2Vu c29yX2h1Yl9pbnB1dF9nZXRfYXR0cmlidXRlX2luZm8gYmVmb3JlLCB0aGVuIGl0IGNhbiBkaXJl Y3RseSBzZXQgdGhhdCBpbmRpdmlkdWFsCi1maWVsZC4KK3NlbnNvcl9odWJfaW5wdXRfZ2V0X2F0 dHJpYnV0ZV9pbmZvIGJlZm9yZSwgdGhlbiBpdCBjYW4gZGlyZWN0bHkgc2V0IHRoYXQKK2luZGl2 aWR1YWwgZmllbGQ6OgogCiAKLWludCBzZW5zb3JfaHViX2dldF9mZWF0dXJlKHN0cnVjdCBoaWRf c2Vuc29yX2h1Yl9kZXZpY2UgKmhzZGV2LCB1MzIgcmVwb3J0X2lkLAorICBpbnQgc2Vuc29yX2h1 Yl9nZXRfZmVhdHVyZShzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldiwgdTMyIHJl cG9ydF9pZCwKIAkJCXUzMiBmaWVsZF9pbmRleCwgczMyICp2YWx1ZSk7CiAKIFRoaXMgaW50ZXJm YWNlIGlzIHVzZWQgdG8gZ2V0IGEgdmFsdWUgZm9yIGEgZmllbGQgaW4gaW5wdXQgcmVwb3J0LiBG b3IgZXhhbXBsZQogaWYgdGhlcmUgaXMgYSBmaWVsZCByZXBvcnRfaW50ZXJ2YWwsIHdoaWNoIGlz IHBhcnNlZCBieSBhIGNhbGwgdG8KLXNlbnNvcl9odWJfaW5wdXRfZ2V0X2F0dHJpYnV0ZV9pbmZv IGJlZm9yZSwgdGhlbiBpdCBjYW4gZGlyZWN0bHkgZ2V0IHRoYXQgaW5kaXZpZHVhbAotZmllbGQg dmFsdWUuCitzZW5zb3JfaHViX2lucHV0X2dldF9hdHRyaWJ1dGVfaW5mbyBiZWZvcmUsIHRoZW4g aXQgY2FuIGRpcmVjdGx5IGdldCB0aGF0CitpbmRpdmlkdWFsIGZpZWxkIHZhbHVlOjoKIAogCi1p bnQgc2Vuc29yX2h1Yl9pbnB1dF9hdHRyX2dldF9yYXdfdmFsdWUoc3RydWN0IGhpZF9zZW5zb3Jf aHViX2RldmljZSAqaHNkZXYsCisgIGludCBzZW5zb3JfaHViX2lucHV0X2F0dHJfZ2V0X3Jhd192 YWx1ZShzdHJ1Y3QgaGlkX3NlbnNvcl9odWJfZGV2aWNlICpoc2RldiwKIAkJCXUzMiB1c2FnZV9p ZCwKIAkJCXUzMiBhdHRyX3VzYWdlX2lkLCB1MzIgcmVwb3J0X2lkKTsKIApAQCAtMTQzLDYgKzE1 Miw4IEBAIHJlZ2lzdGVyZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgc2FtcGxl LgogLS0tLS0tLS0tLQogCiBISUQgQ3VzdG9tIGFuZCBnZW5lcmljIFNlbnNvcnMKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAKIEhJRCBTZW5zb3Igc3BlY2lmaWNhdGlvbiBkZWZp bmVzIHR3byBzcGVjaWFsIHNlbnNvciB1c2FnZSB0eXBlcy4gU2luY2UgdGhleQogZG9uJ3QgcmVw cmVzZW50IGEgc3RhbmRhcmQgc2Vuc29yLCBpdCBpcyBub3QgcG9zc2libGUgdG8gZGVmaW5lIHVz aW5nIExpbnV4IElJTwpAQCAtMTU4LDY2ICsxNjksNzMgQEAga2V5Ym9hcmQgYXR0YWNoZWQvZGV0 YWNoZWQgb3IgbGlkIG9wZW4vY2xvc2UuCiBUbyBhbGxvdyBhcHBsaWNhdGlvbiB0byB1dGlsaXpl IHRoZXNlIHNlbnNvcnMsIGhlcmUgdGhleSBhcmUgZXhwb3J0ZWQgdXNlcyBzeXNmcwogYXR0cmli dXRlIGdyb3VwcywgYXR0cmlidXRlcyBhbmQgbWlzYyBkZXZpY2UgaW50ZXJmYWNlLgogCi1BbiBl eGFtcGxlIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb24gc3lzZnM6Ci0vc3lzL2RldmljZXMvcGNp MDAwMDowMC9JTlQzM0MyOjAwL2kyYy0wL2kyYy1JTlQzM0QxOjAwLzAwMTg6ODA4NjowOUZBLjAw MDEvSElELVNFTlNPUi0yMDAwZTEuNi5hdXRvJCB0cmVlIC1SCi0uCi0/Pz8/Pz8/Pz8gZW5hYmxl X3NlbnNvcgotPz8/Pz8/Pz8/IGZlYXR1cmUtMC0yMDAzMTYKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGZl YXR1cmUtMC0yMDAzMTYtbWF4aW11bQotPz8/Pz8/PyA/Pz8/Pz8/Pz8gZmVhdHVyZS0wLTIwMDMx Ni1taW5pbXVtCi0/Pz8/Pz8/ID8/Pz8/Pz8/PyBmZWF0dXJlLTAtMjAwMzE2LW5hbWUKLT8/Pz8/ Pz8gPz8/Pz8/Pz8/IGZlYXR1cmUtMC0yMDAzMTYtc2l6ZQotPz8/Pz8/PyA/Pz8/Pz8/Pz8gZmVh dHVyZS0wLTIwMDMxNi11bml0LWV4cG8KLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGZlYXR1cmUtMC0yMDAz MTYtdW5pdHMKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGZlYXR1cmUtMC0yMDAzMTYtdmFsdWUKLT8/Pz8/ Pz8/PyBmZWF0dXJlLTEtMjAwMjAxCi0/Pz8/Pz8/ID8/Pz8/Pz8/PyBmZWF0dXJlLTEtMjAwMjAx LW1heGltdW0KLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGZlYXR1cmUtMS0yMDAyMDEtbWluaW11bQotPz8/ Pz8/PyA/Pz8/Pz8/Pz8gZmVhdHVyZS0xLTIwMDIwMS1uYW1lCi0/Pz8/Pz8/ID8/Pz8/Pz8/PyBm ZWF0dXJlLTEtMjAwMjAxLXNpemUKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGZlYXR1cmUtMS0yMDAyMDEt dW5pdC1leHBvCi0/Pz8/Pz8/ID8/Pz8/Pz8/PyBmZWF0dXJlLTEtMjAwMjAxLXVuaXRzCi0/Pz8/ Pz8/ID8/Pz8/Pz8/PyBmZWF0dXJlLTEtMjAwMjAxLXZhbHVlCi0/Pz8/Pz8/Pz8gaW5wdXQtMC0y MDAyMDEKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTAtMjAwMjAxLW1heGltdW0KLT8/Pz8/Pz8g Pz8/Pz8/Pz8/IGlucHV0LTAtMjAwMjAxLW1pbmltdW0KLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0 LTAtMjAwMjAxLW5hbWUKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTAtMjAwMjAxLXNpemUKLT8/ Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTAtMjAwMjAxLXVuaXQtZXhwbwotPz8/Pz8/PyA/Pz8/Pz8/ Pz8gaW5wdXQtMC0yMDAyMDEtdW5pdHMKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTAtMjAwMjAx LXZhbHVlCi0/Pz8/Pz8/Pz8gaW5wdXQtMS0yMDAyMDIKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0 LTEtMjAwMjAyLW1heGltdW0KLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTEtMjAwMjAyLW1pbmlt dW0KLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTEtMjAwMjAyLW5hbWUKLT8/Pz8/Pz8gPz8/Pz8/ Pz8/IGlucHV0LTEtMjAwMjAyLXNpemUKLT8/Pz8/Pz8gPz8/Pz8/Pz8/IGlucHV0LTEtMjAwMjAy LXVuaXQtZXhwbwotPz8/Pz8/PyA/Pz8/Pz8/Pz8gaW5wdXQtMS0yMDAyMDItdW5pdHMKLT8/Pz8/ Pz8gPz8/Pz8/Pz8/IGlucHV0LTEtMjAwMjAyLXZhbHVlCitBbiBleGFtcGxlIG9mIHRoaXMgcmVw cmVzZW50YXRpb24gb24gc3lzZnM6OgorCisgIC9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwL0lOVDMz QzI6MDAvaTJjLTAvaTJjLUlOVDMzRDE6MDAvMDAxODo4MDg2OjA5RkEuMDAwMS9ISUQtU0VOU09S LTIwMDBlMS42LmF1dG8kIHRyZWUgLVIKKyAgLgorICDilILCoMKgIOKUnOKUgOKUgCAgZW5hYmxl X3NlbnNvcgorICDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGZlYXR1cmUtMC0yMDAzMTYKKyAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGZlYXR1cmUtMC0yMDAzMTYtbWF4aW11 bQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgZmVhdHVyZS0wLTIwMDMxNi1t aW5pbXVtCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBmZWF0dXJlLTAtMjAw MzE2LW5hbWUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGZlYXR1cmUtMC0y MDAzMTYtc2l6ZQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgZmVhdHVyZS0w LTIwMDMxNi11bml0LWV4cG8KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGZl YXR1cmUtMC0yMDAzMTYtdW5pdHMKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IGZlYXR1cmUtMC0yMDAzMTYtdmFsdWUKKyAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBmZWF0 dXJlLTEtMjAwMjAxCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBmZWF0dXJl LTEtMjAwMjAxLW1heGltdW0KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGZl YXR1cmUtMS0yMDAyMDEtbWluaW11bQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDi lIAgZmVhdHVyZS0xLTIwMDIwMS1uYW1lCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKU gOKUgCBmZWF0dXJlLTEtMjAwMjAxLXNpemUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc 4pSA4pSAIGZlYXR1cmUtMS0yMDAyMDEtdW5pdC1leHBvCisgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUnOKUgOKUgCBmZWF0dXJlLTEtMjAwMjAxLXVuaXRzCisgIOKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUnOKUgOKUgCBmZWF0dXJlLTEtMjAwMjAxLXZhbHVlCisgIOKUgsKgwqAg4pSCwqDC oCDilJzilIDilIAgaW5wdXQtMC0yMDAyMDEKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc 4pSA4pSAIGlucHV0LTAtMjAwMjAxLW1heGltdW0KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSc4pSA4pSAIGlucHV0LTAtMjAwMjAxLW1pbmltdW0KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGlucHV0LTAtMjAwMjAxLW5hbWUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGlucHV0LTAtMjAwMjAxLXNpemUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGlucHV0LTAtMjAwMjAxLXVuaXQtZXhwbworICDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilJzilIDilIAgaW5wdXQtMC0yMDAyMDEtdW5pdHMKKyAg4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSc4pSA4pSAIGlucHV0LTAtMjAwMjAxLXZhbHVlCisgIOKUgsKgwqAg4pSCwqDC oCDilJzilIDilIAgaW5wdXQtMS0yMDAyMDIKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc 4pSA4pSAIGlucHV0LTEtMjAwMjAyLW1heGltdW0KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSc4pSA4pSAIGlucHV0LTEtMjAwMjAyLW1pbmltdW0KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGlucHV0LTEtMjAwMjAyLW5hbWUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGlucHV0LTEtMjAwMjAyLXNpemUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGlucHV0LTEtMjAwMjAyLXVuaXQtZXhwbworICDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilJzilIDilIAgaW5wdXQtMS0yMDAyMDItdW5pdHMKKyAg4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSc4pSA4pSAIGlucHV0LTEtMjAwMjAyLXZhbHVlCiAKIEhlcmUgdGhlcmUgaXMg YSBjdXN0b20gc2Vuc29ycyB3aXRoIGZvdXIgZmllbGRzLCB0d28gZmVhdHVyZSBhbmQgdHdvIGlu cHV0cy4KIEVhY2ggZmllbGQgaXMgcmVwcmVzZW50ZWQgYnkgYSBzZXQgb2YgYXR0cmlidXRlcy4g QWxsIGZpZWxkcyBleGNlcHQgdGhlICJ2YWx1ZSIKIGFyZSByZWFkIG9ubHkuIFRoZSB2YWx1ZSBm aWVsZCBpcyBhIFJXIGZpZWxkLgotRXhhbXBsZQotL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy9I SUQtU0VOU09SLTIwMDBlMS42LmF1dG8vZmVhdHVyZS0wLTIwMDMxNiQgZ3JlcCAtciAuICoKLWZl YXR1cmUtMC0yMDAzMTYtbWF4aW11bTo2Ci1mZWF0dXJlLTAtMjAwMzE2LW1pbmltdW06MAotZmVh dHVyZS0wLTIwMDMxNi1uYW1lOnByb3BlcnR5LXJlcG9ydGluZy1zdGF0ZQotZmVhdHVyZS0wLTIw MDMxNi1zaXplOjEKLWZlYXR1cmUtMC0yMDAzMTYtdW5pdC1leHBvOjAKLWZlYXR1cmUtMC0yMDAz MTYtdW5pdHM6MjUKLWZlYXR1cmUtMC0yMDAzMTYtdmFsdWU6MQorCitFeGFtcGxlOjoKKworICAv c3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzL0hJRC1TRU5TT1ItMjAwMGUxLjYuYXV0by9mZWF0dXJl LTAtMjAwMzE2JCBncmVwIC1yIC4gKgorICBmZWF0dXJlLTAtMjAwMzE2LW1heGltdW06NgorICBm ZWF0dXJlLTAtMjAwMzE2LW1pbmltdW06MAorICBmZWF0dXJlLTAtMjAwMzE2LW5hbWU6cHJvcGVy dHktcmVwb3J0aW5nLXN0YXRlCisgIGZlYXR1cmUtMC0yMDAzMTYtc2l6ZToxCisgIGZlYXR1cmUt MC0yMDAzMTYtdW5pdC1leHBvOjAKKyAgZmVhdHVyZS0wLTIwMDMxNi11bml0czoyNQorICBmZWF0 dXJlLTAtMjAwMzE2LXZhbHVlOjEKIAogSG93IHRvIGVuYWJsZSBzdWNoIHNlbnNvcj8KK15eXl5e Xl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIEJ5IGRlZmF1bHQgc2Vuc29yIGNhbiBiZSBwb3dlciBn YXRlZC4gVG8gZW5hYmxlIHN5c2ZzIGF0dHJpYnV0ZSAiZW5hYmxlIiBjYW4gYmUKLXVzZWQuCi0k IGVjaG8gMSA+IGVuYWJsZV9zZW5zb3IKK3VzZWQ6OgorCisJJCBlY2hvIDEgPiBlbmFibGVfc2Vu c29yCiAKIE9uY2UgZW5hYmxlZCBhbmQgcG93ZXJlZCBvbiwgc2Vuc29yIGNhbiByZXBvcnQgdmFs dWUgdXNpbmcgSElEIHJlcG9ydHMuCi1UaGVzZSByZXBvcnRzIGFyZSBwdXNoZWQgdXNpbmcgbWlz YyBkZXZpY2UgaW50ZXJmYWNlIGluIGEgRklGTyBvcmRlci4KLS9kZXYkIHRyZWUgfCBncmVwIEhJ RC1TRU5TT1ItMjAwMGUxLjYuYXV0bwotPz8/Pz8/PyA/Pz8/Pz8/Pz8gMTA6NTMgLT4gLi4vSElE LVNFTlNPUi0yMDAwZTEuNi5hdXRvCi0/Pz8/Pz8/Pz8gSElELVNFTlNPUi0yMDAwZTEuNi5hdXRv CitUaGVzZSByZXBvcnRzIGFyZSBwdXNoZWQgdXNpbmcgbWlzYyBkZXZpY2UgaW50ZXJmYWNlIGlu IGEgRklGTyBvcmRlcjo6CisKKwkvZGV2JCB0cmVlIHwgZ3JlcCBISUQtU0VOU09SLTIwMDBlMS42 LmF1dG8KKwnilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgMTA6NTMgLT4gLi4vSElE LVNFTlNPUi0yMDAwZTEuNi5hdXRvCisJ4pSCwqDCoCDilJzilIDilIAgIEhJRC1TRU5TT1ItMjAw MGUxLjYuYXV0bwogCiBFYWNoIHJlcG9ydHMgY2FuIGJlIG9mIHZhcmlhYmxlIGxlbmd0aCBwcmVj ZWRlZCBieSBhIGhlYWRlci4gVGhpcyBoZWFkZXIKIGNvbnNpc3Qgb2YgYSAzMiBiaXQgdXNhZ2Ug aWQsIDY0IGJpdCB0aW1lIHN0YW1wIGFuZCAzMiBiaXQgbGVuZ3RoIGZpZWxkIG9mIHJhdwpkaWZm IC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9oaWQvaGlkLXRyYW5zcG9ydC50eHQgYi9Eb2N1bWVudGF0 aW9uL2hpZC9oaWQtdHJhbnNwb3J0LnJzdApzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJv bSBEb2N1bWVudGF0aW9uL2hpZC9oaWQtdHJhbnNwb3J0LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRh dGlvbi9oaWQvaGlkLXRyYW5zcG9ydC5yc3QKaW5kZXggM2RjYmE5ZmQ0YTNhLi42ZjNhYWE4NmNl N2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaGlkL2hpZC10cmFuc3BvcnQudHh0CisrKyBi L0RvY3VtZW50YXRpb24vaGlkL2hpZC10cmFuc3BvcnQucnN0CkBAIC0xLDUgKzEsNiBAQAotICAg ICAgICAgICAgICAgICAgICAgICAgICBISUQgSS9PIFRyYW5zcG9ydCBEcml2ZXJzCi0gICAgICAg ICAgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09 PT09PT09PT09PT09PT09CitISUQgSS9PIFRyYW5zcG9ydCBEcml2ZXJzCis9PT09PT09PT09PT09 PT09PT09PT09PT09CiAKIFRoZSBISUQgc3Vic3lzdGVtIGlzIGluZGVwZW5kZW50IG9mIHRoZSB1 bmRlcmx5aW5nIHRyYW5zcG9ydCBkcml2ZXIuIEluaXRpYWxseSwKIG9ubHkgVVNCIHdhcyBzdXBw b3J0ZWQsIGJ1dCBvdGhlciBzcGVjaWZpY2F0aW9ucyBhZG9wdGVkIHRoZSBISUQgZGVzaWduIGFu ZApAQCAtMTYsNiArMTcsOCBAQCB0cmFuc3BvcnQgYW5kIGRldmljZSBzZXR1cC9tYW5hZ2VtZW50 LiBISUQgY29yZSBpcyByZXNwb25zaWJsZSBvZgogcmVwb3J0LXBhcnNpbmcsIHJlcG9ydCBpbnRl cnByZXRhdGlvbiBhbmQgdGhlIHVzZXItc3BhY2UgQVBJLiBEZXZpY2Ugc3BlY2lmaWNzCiBhbmQg cXVpcmtzIGFyZSBoYW5kbGVkIGJ5IGFsbCBsYXllcnMgZGVwZW5kaW5nIG9uIHRoZSBxdWlyay4K IAorOjoKKwogICstLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLSsgICAgICAgICAgICArLS0tLS0t LS0tLS0rICArLS0tLS0tLS0tLS0rCiAgfCBEZXZpY2UgIzEgfCAgfCBEZXZpY2UgI2kgfCAgICAg ICAgICAgIHwgRGV2aWNlICNqIHwgIHwgRGV2aWNlICNrIHwKICArLS0tLS0tLS0tLS0rICArLS0t LS0tLS0tLS0rICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0tKwpAQCAtNDIs OCArNDUsOSBAQCBhbmQgcXVpcmtzIGFyZSBoYW5kbGVkIGJ5IGFsbCBsYXllcnMgZGVwZW5kaW5n IG9uIHRoZSBxdWlyay4KICArLS0tLS0tLS0tLS0tLS0tLSsgICstLS0tLS0tLS0tLSsgICstLS0t LS0tLS0tLS0tLS0tLS0rICArLS0tLS0tLS0tLS0tLS0tLS0tKwogCiBFeGFtcGxlIERyaXZlcnM6 Ci0gIEkvTzogVVNCLCBJMkMsIEJsdWV0b290aC1sMmNhcAotICBUcmFuc3BvcnQ6IFVTQi1ISUQs IEkyQy1ISUQsIEJULUhJRFAKKworICAtIEkvTzogVVNCLCBJMkMsIEJsdWV0b290aC1sMmNhcAor ICAtIFRyYW5zcG9ydDogVVNCLUhJRCwgSTJDLUhJRCwgQlQtSElEUAogCiBFdmVyeXRoaW5nIGJl bG93ICJISUQgQ29yZSIgaXMgc2ltcGxpZmllZCBpbiB0aGlzIGdyYXBoIGFzIGl0IGlzIG9ubHkg b2YKIGludGVyZXN0IHRvIEhJRCBkZXZpY2UgZHJpdmVycy4gVHJhbnNwb3J0IGRyaXZlcnMgZG8g bm90IG5lZWQgdG8ga25vdyB0aGUKQEAgLTE4Myw3ICsxODcsNyBAQCBPdGhlciBjdHJsLWNoYW5u ZWwgcmVxdWVzdHMgYXJlIHN1cHBvcnRlZCBieSBVU0ItSElEIGJ1dCBhcmUgbm90IGF2YWlsYWJs ZQogLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUcmFuc3BvcnQgZHJpdmVycyBub3JtYWxseSB1c2Ug dGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgdG8gcmVnaXN0ZXIgYSBuZXcgZGV2aWNlCi13aXRoIEhJ RCBjb3JlOgord2l0aCBISUQgY29yZTo6CiAKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOwogCWlu dCByZXQ7CkBAIC0yMTUsNyArMjE5LDcgQEAgT25jZSBoaWRfYWRkX2RldmljZSgpIGlzIGVudGVy ZWQsIEhJRCBjb3JlIG1pZ2h0IHVzZSB0aGUgY2FsbGJhY2tzIHByb3ZpZGVkIGluCiAiY3VzdG9t X2xsX2RyaXZlciIuIE5vdGUgdGhhdCBmaWVsZHMgbGlrZSAiY291bnRyeSIgY2FuIGJlIGlnbm9y ZWQgYnkgdW5kZXJseWluZwogdHJhbnNwb3J0LWRyaXZlcnMgaWYgbm90IHN1cHBvcnRlZC4KIAot VG8gdW5yZWdpc3RlciBhIGRldmljZSwgdXNlOgorVG8gdW5yZWdpc3RlciBhIGRldmljZSwgdXNl OjoKIAogCWhpZF9kZXN0cm95X2RldmljZShoaWQpOwogCkBAIC0yMjYsNzMgKzIzMCwxMTAgQEAg ZHJpdmVyIGNhbGxiYWNrcy4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBh dmFpbGFibGUgSElEIGNhbGxiYWNrcyBhcmU6Ci0gLSBpbnQgKCpzdGFydCkgKHN0cnVjdCBoaWRf ZGV2aWNlICpoZGV2KQorCisgICA6OgorCisgICAgICBpbnQgKCpzdGFydCkgKHN0cnVjdCBoaWRf ZGV2aWNlICpoZGV2KQorCiAgICBDYWxsZWQgZnJvbSBISUQgZGV2aWNlIGRyaXZlcnMgb25jZSB0 aGV5IHdhbnQgdG8gdXNlIHRoZSBkZXZpY2UuIFRyYW5zcG9ydAogICAgZHJpdmVycyBjYW4gY2hv b3NlIHRvIHNldHVwIHRoZWlyIGRldmljZSBpbiB0aGlzIGNhbGxiYWNrLiBIb3dldmVyLCBub3Jt YWxseQogICAgZGV2aWNlcyBhcmUgYWxyZWFkeSBzZXQgdXAgYmVmb3JlIHRyYW5zcG9ydCBkcml2 ZXJzIHJlZ2lzdGVyIHRoZW0gdG8gSElEIGNvcmUKICAgIHNvIHRoaXMgaXMgbW9zdGx5IG9ubHkg dXNlZCBieSBVU0ItSElELgogCi0gLSB2b2lkICgqc3RvcCkgKHN0cnVjdCBoaWRfZGV2aWNlICpo ZGV2KQorICAgOjoKKworICAgICAgdm9pZCAoKnN0b3ApIChzdHJ1Y3QgaGlkX2RldmljZSAqaGRl dikKKwogICAgQ2FsbGVkIGZyb20gSElEIGRldmljZSBkcml2ZXJzIG9uY2UgdGhleSBhcmUgZG9u ZSB3aXRoIGEgZGV2aWNlLiBUcmFuc3BvcnQKICAgIGRyaXZlcnMgY2FuIGZyZWUgYW55IGJ1ZmZl cnMgYW5kIGRlaW5pdGlhbGl6ZSB0aGUgZGV2aWNlLiBCdXQgbm90ZSB0aGF0CiAgICAtPnN0YXJ0 KCkgbWlnaHQgYmUgY2FsbGVkIGFnYWluIGlmIGFub3RoZXIgSElEIGRldmljZSBkcml2ZXIgaXMg bG9hZGVkIG9uIHRoZQogICAgZGV2aWNlLgorCiAgICBUcmFuc3BvcnQgZHJpdmVycyBhcmUgZnJl ZSB0byBpZ25vcmUgaXQgYW5kIGRlaW5pdGlhbGl6ZSBkZXZpY2VzIGFmdGVyIHRoZXkKICAgIGRl c3Ryb3llZCB0aGVtIHZpYSBoaWRfZGVzdHJveV9kZXZpY2UoKS4KIAotIC0gaW50ICgqb3Blbikg KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2KQorICAgOjoKKworICAgICAgaW50ICgqb3BlbikgKHN0 cnVjdCBoaWRfZGV2aWNlICpoZGV2KQorCiAgICBDYWxsZWQgZnJvbSBISUQgZGV2aWNlIGRyaXZl cnMgb25jZSB0aGV5IGFyZSBpbnRlcmVzdGVkIGluIGRhdGEgcmVwb3J0cy4KICAgIFVzdWFsbHks IHdoaWxlIHVzZXItc3BhY2UgZGlkbid0IG9wZW4gYW55IGlucHV0IEFQSS9ldGMuLCBkZXZpY2Ug ZHJpdmVycyBhcmUKICAgIG5vdCBpbnRlcmVzdGVkIGluIGRldmljZSBkYXRhIGFuZCB0cmFuc3Bv cnQgZHJpdmVycyBjYW4gcHV0IGRldmljZXMgYXNsZWVwLgogICAgSG93ZXZlciwgb25jZSAtPm9w ZW4oKSBpcyBjYWxsZWQsIHRyYW5zcG9ydCBkcml2ZXJzIG11c3QgYmUgcmVhZHkgZm9yIEkvTy4K ICAgIC0+b3BlbigpIGNhbGxzIGFyZSBuZXN0ZWQgZm9yIGVhY2ggY2xpZW50IHRoYXQgb3BlbnMg dGhlIEhJRCBkZXZpY2UuCiAKLSAtIHZvaWQgKCpjbG9zZSkgKHN0cnVjdCBoaWRfZGV2aWNlICpo ZGV2KQorICAgOjoKKworICAgICAgdm9pZCAoKmNsb3NlKSAoc3RydWN0IGhpZF9kZXZpY2UgKmhk ZXYpCisKICAgIENhbGxlZCBmcm9tIEhJRCBkZXZpY2UgZHJpdmVycyBhZnRlciAtPm9wZW4oKSB3 YXMgY2FsbGVkIGJ1dCB0aGV5IGFyZSBubwogICAgbG9uZ2VyIGludGVyZXN0ZWQgaW4gZGV2aWNl IHJlcG9ydHMuIChVc3VhbGx5IGlmIHVzZXItc3BhY2UgY2xvc2VkIGFueSBpbnB1dAogICAgZGV2 aWNlcyBvZiB0aGUgZHJpdmVyKS4KKwogICAgVHJhbnNwb3J0IGRyaXZlcnMgY2FuIHB1dCBkZXZp Y2VzIGFzbGVlcCBhbmQgdGVybWluYXRlIGFueSBJL08gb2YgYWxsCiAgICAtPm9wZW4oKSBjYWxs cyBoYXZlIGJlZW4gZm9sbG93ZWQgYnkgYSAtPmNsb3NlKCkgY2FsbC4gSG93ZXZlciwgLT5zdGFy dCgpIG1heQogICAgYmUgY2FsbGVkIGFnYWluIGlmIHRoZSBkZXZpY2UgZHJpdmVyIGlzIGludGVy ZXN0ZWQgaW4gaW5wdXQgcmVwb3J0cyBhZ2Fpbi4KIAotIC0gaW50ICgqcGFyc2UpIChzdHJ1Y3Qg aGlkX2RldmljZSAqaGRldikKKyAgIDo6CisKKyAgICAgIGludCAoKnBhcnNlKSAoc3RydWN0IGhp ZF9kZXZpY2UgKmhkZXYpCisKICAgIENhbGxlZCBvbmNlIGR1cmluZyBkZXZpY2Ugc2V0dXAgYWZ0 ZXIgLT5zdGFydCgpIGhhcyBiZWVuIGNhbGxlZC4gVHJhbnNwb3J0CiAgICBkcml2ZXJzIG11c3Qg cmVhZCB0aGUgSElEIHJlcG9ydC1kZXNjcmlwdG9yIGZyb20gdGhlIGRldmljZSBhbmQgdGVsbCBI SUQgY29yZQogICAgYWJvdXQgaXQgdmlhIGhpZF9wYXJzZV9yZXBvcnQoKS4KIAotIC0gaW50ICgq cG93ZXIpIChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgaW50IGxldmVsKQorICAgOjoKKworICAg ICAgaW50ICgqcG93ZXIpIChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgaW50IGxldmVsKQorCiAg ICBDYWxsZWQgYnkgSElEIGNvcmUgdG8gZ2l2ZSBQTSBoaW50cyB0byB0cmFuc3BvcnQgZHJpdmVy cy4gVXN1YWxseSB0aGlzIGlzCiAgICBhbmFsb2dpY2FsIHRvIHRoZSAtPm9wZW4oKSBhbmQgLT5j bG9zZSgpIGhpbnRzIGFuZCByZWR1bmRhbnQuCiAKLSAtIHZvaWQgKCpyZXF1ZXN0KSAoc3RydWN0 IGhpZF9kZXZpY2UgKmhkZXYsIHN0cnVjdCBoaWRfcmVwb3J0ICpyZXBvcnQsCi0gICAgICAgICAg ICAgICAgICAgIGludCByZXF0eXBlKQorICAgOjoKKworICAgICAgdm9pZCAoKnJlcXVlc3QpIChz dHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydCwKKwkJICAg ICAgIGludCByZXF0eXBlKQorCiAgICBTZW5kIGFuIEhJRCByZXF1ZXN0IG9uIHRoZSBjdHJsIGNo YW5uZWwuICJyZXBvcnQiIGNvbnRhaW5zIHRoZSByZXBvcnQgdGhhdAogICAgc2hvdWxkIGJlIHNl bnQgYW5kICJyZXF0eXBlIiB0aGUgcmVxdWVzdCB0eXBlLiBSZXF1ZXN0LXR5cGUgY2FuIGJlCiAg ICBISURfUkVRX1NFVF9SRVBPUlQgb3IgSElEX1JFUV9HRVRfUkVQT1JULgorCiAgICBUaGlzIGNh bGxiYWNrIGlzIG9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWQsIEhJRCBjb3JlIHdpbGwgYXNzZW1i bGUgYSByYXcKICAgIHJlcG9ydCBmb2xsb3dpbmcgdGhlIEhJRCBzcGVjcyBhbmQgc2VuZCBpdCB2 aWEgdGhlIC0+cmF3X3JlcXVlc3QoKSBjYWxsYmFjay4KICAgIFRoZSB0cmFuc3BvcnQgZHJpdmVy IGlzIGZyZWUgdG8gaW1wbGVtZW50IHRoaXMgYXN5bmNocm9ub3VzbHkuCiAKLSAtIGludCAoKndh aXQpIChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKKyAgIDo6CisKKyAgICAgIGludCAoKndhaXQp IChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldikKKwogICAgVXNlZCBieSBISUQgY29yZSBiZWZvcmUg Y2FsbGluZyAtPnJlcXVlc3QoKSBhZ2Fpbi4gQSB0cmFuc3BvcnQgZHJpdmVyIGNhbiB1c2UKICAg IGl0IHRvIHdhaXQgZm9yIGFueSBwZW5kaW5nIHJlcXVlc3RzIHRvIGNvbXBsZXRlIGlmIG9ubHkg b25lIHJlcXVlc3QgaXMKICAgIGFsbG93ZWQgYXQgYSB0aW1lLgogCi0gLSBpbnQgKCpyYXdfcmVx dWVzdCkgKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCB1bnNpZ25lZCBjaGFyIHJlcG9ydG51bSwK LSAgICAgICAgICAgICAgICAgICAgICAgX191OCAqYnVmLCBzaXplX3QgY291bnQsIHVuc2lnbmVk IGNoYXIgcnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCByZXF0eXBlKQorICAgOjoK KworICAgICAgaW50ICgqcmF3X3JlcXVlc3QpIChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdW5z aWduZWQgY2hhciByZXBvcnRudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdTggKmJ1 Ziwgc2l6ZV90IGNvdW50LCB1bnNpZ25lZCBjaGFyIHJ0eXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcmVxdHlwZSkKKwogICAgU2FtZSBhcyAtPnJlcXVlc3QoKSBidXQgcHJvdmlk ZXMgdGhlIHJlcG9ydCBhcyByYXcgYnVmZmVyLiBUaGlzIHJlcXVlc3Qgc2hhbGwKICAgIGJlIHN5 bmNocm9ub3VzLiBBIHRyYW5zcG9ydCBkcml2ZXIgbXVzdCBub3QgdXNlIC0+d2FpdCgpIHRvIGNv bXBsZXRlIHN1Y2gKICAgIHJlcXVlc3RzLiBUaGlzIHJlcXVlc3QgaXMgbWFuZGF0b3J5IGFuZCBo aWQgY29yZSB3aWxsIHJlamVjdCB0aGUgZGV2aWNlIGlmCiAgICBpdCBpcyBtaXNzaW5nLgogCi0g LSBpbnQgKCpvdXRwdXRfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYsIF9fdTggKmJ1 Ziwgc2l6ZV90IGxlbikKKyAgIDo6CisKKyAgICAgIGludCAoKm91dHB1dF9yZXBvcnQpIChzdHJ1 Y3QgaGlkX2RldmljZSAqaGRldiwgX191OCAqYnVmLCBzaXplX3QgbGVuKQorCiAgICBTZW5kIHJh dyBvdXRwdXQgcmVwb3J0IHZpYSBpbnRyIGNoYW5uZWwuIFVzZWQgYnkgc29tZSBISUQgZGV2aWNl IGRyaXZlcnMKICAgIHdoaWNoIHJlcXVpcmUgaGlnaCB0aHJvdWdocHV0IGZvciBvdXRnb2luZyBy ZXF1ZXN0cyBvbiB0aGUgaW50ciBjaGFubmVsLiBUaGlzCiAgICBtdXN0IG5vdCBjYXVzZSBTRVRf UkVQT1JUIGNhbGxzISBUaGlzIG11c3QgYmUgaW1wbGVtZW50ZWQgYXMgYXN5bmNocm9ub3VzCiAg ICBvdXRwdXQgcmVwb3J0IG9uIHRoZSBpbnRyIGNoYW5uZWwhCiAKLSAtIGludCAoKmlkbGUpIChz dHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgaW50IHJlcG9ydCwgaW50IGlkbGUsIGludCByZXF0eXBl KQorICAgOjoKKworICAgICAgaW50ICgqaWRsZSkgKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBp bnQgcmVwb3J0LCBpbnQgaWRsZSwgaW50IHJlcXR5cGUpCisKICAgIFBlcmZvcm0gU0VUL0dFVF9J RExFIHJlcXVlc3QuIE9ubHkgdXNlZCBieSBVU0ItSElELCBkbyBub3QgaW1wbGVtZW50IQogCiAy LjMpIERhdGEgUGF0aApAQCAtMzE0LDQgKzM1NSw1IEBAIHRyYW5zcG9ydCBkcml2ZXIgYW5kIG5v dCBwYXNzZWQgdG8gaGlkX2lucHV0X3JlcG9ydCgpLgogQWNrbm93bGVkZ2VtZW50cyB0byBTRVRf UkVQT1JUIHJlcXVlc3RzIGFyZSBub3Qgb2YgaW50ZXJlc3QgdG8gSElEIGNvcmUuCiAKIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV3JpdHRl biAyMDEzLCBEYXZpZCBIZXJybWFubiA8ZGguaGVycm1hbm5AZ21haWwuY29tPgpkaWZmIC0tZ2l0 IGEvRG9jdW1lbnRhdGlvbi9oaWQvaGlkZGV2LnR4dCBiL0RvY3VtZW50YXRpb24vaGlkL2hpZGRl di5yc3QKc2ltaWxhcml0eSBpbmRleCA4MCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9oaWQv aGlkZGV2LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9oaWQvaGlkZGV2LnJzdAppbmRleCA2 Mzg0NDg3MDdhYTIuLjE2YzY2MzUzMGRiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9oaWQv aGlkZGV2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hpZC9oaWRkZXYucnN0CkBAIC0xLDYgKzEs OSBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBD YXJlIGFuZCBmZWVkaW5nIG9mIHlvdXIgSHVtYW4gSW50ZXJmYWNlIERldmljZXMKKz09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1JTlRST0RVQ1RJT04K K0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CiAKIEluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwg aW5wdXQgdHlwZSBISUQgZGV2aWNlcywgVVNCIGFsc28gdXNlcyB0aGUKIGh1bWFuIGludGVyZmFj ZSBkZXZpY2UgcHJvdG9jb2xzIGZvciB0aGluZ3MgdGhhdCBhcmUgbm90IHJlYWxseSBodW1hbgpA QCAtMTYsNyArMTksNyBAQCBub3JtYWxpc2VkIGV2ZW50IGludGVyZmFjZSAtIHNlZSBEb2N1bWVu dGF0aW9uL2lucHV0L2lucHV0LnJzdAogKiB0aGUgaGlkZGV2IGludGVyZmFjZSwgd2hpY2ggcHJv dmlkZXMgZmFpcmx5IHJhdyBISUQgZXZlbnRzCiAKIFRoZSBkYXRhIGZsb3cgZm9yIGEgSElEIGV2 ZW50IHByb2R1Y2VkIGJ5IGEgZGV2aWNlIGlzIHNvbWV0aGluZyBsaWtlCi10aGUgZm9sbG93aW5n IDoKK3RoZSBmb2xsb3dpbmc6OgogCiAgdXNiLmMgLS0tPiBoaWQtY29yZS5jICAtLS0tPiBoaWQt aW5wdXQuYyAtLS0tPiBba2V5Ym9hcmQvbW91c2Uvam95c3RpY2svZXZlbnRdCiAgICAgICAgICAg ICAgICAgICAgICAgICAgfApAQCAtMjcsMjcgKzMwLDI5IEBAIEluIGFkZGl0aW9uLCBvdGhlciBz dWJzeXN0ZW1zIChhcGFydCBmcm9tIFVTQikgY2FuIHBvdGVudGlhbGx5IGZlZWQKIGV2ZW50cyBp bnRvIHRoZSBpbnB1dCBzdWJzeXN0ZW0sIGJ1dCB0aGVzZSBoYXZlIG5vIGVmZmVjdCBvbiB0aGUg aGlkCiBkZXZpY2UgaW50ZXJmYWNlLgogCi1VU0lORyBUSEUgSElEIERFVklDRSBJTlRFUkZBQ0UK K1VzaW5nIHRoZSBISUQgRGV2aWNlIEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CiAKIFRoZSBoaWRkZXYgaW50ZXJmYWNlIGlzIGEgY2hhciBpbnRlcmZhY2UgdXNpbmcg dGhlIG5vcm1hbCBVU0IgbWFqb3IsCiB3aXRoIHRoZSBtaW5vciBudW1iZXJzIHN0YXJ0aW5nIGF0 IDk2IGFuZCBmaW5pc2hpbmcgYXQgMTExLiBUaGVyZWZvcmUsCi15b3UgbmVlZCB0aGUgZm9sbG93 aW5nIGNvbW1hbmRzOgotbWtub2QgL2Rldi91c2IvaGlkZGV2MCBjIDE4MCA5NgotbWtub2QgL2Rl di91c2IvaGlkZGV2MSBjIDE4MCA5NwotbWtub2QgL2Rldi91c2IvaGlkZGV2MiBjIDE4MCA5OAot bWtub2QgL2Rldi91c2IvaGlkZGV2MyBjIDE4MCA5OQotbWtub2QgL2Rldi91c2IvaGlkZGV2NCBj IDE4MCAxMDAKLW1rbm9kIC9kZXYvdXNiL2hpZGRldjUgYyAxODAgMTAxCi1ta25vZCAvZGV2L3Vz Yi9oaWRkZXY2IGMgMTgwIDEwMgotbWtub2QgL2Rldi91c2IvaGlkZGV2NyBjIDE4MCAxMDMKLW1r bm9kIC9kZXYvdXNiL2hpZGRldjggYyAxODAgMTA0Ci1ta25vZCAvZGV2L3VzYi9oaWRkZXY5IGMg MTgwIDEwNQotbWtub2QgL2Rldi91c2IvaGlkZGV2MTAgYyAxODAgMTA2Ci1ta25vZCAvZGV2L3Vz Yi9oaWRkZXYxMSBjIDE4MCAxMDcKLW1rbm9kIC9kZXYvdXNiL2hpZGRldjEyIGMgMTgwIDEwOAot bWtub2QgL2Rldi91c2IvaGlkZGV2MTMgYyAxODAgMTA5Ci1ta25vZCAvZGV2L3VzYi9oaWRkZXYx NCBjIDE4MCAxMTAKLW1rbm9kIC9kZXYvdXNiL2hpZGRldjE1IGMgMTgwIDExMQoreW91IG5lZWQg dGhlIGZvbGxvd2luZyBjb21tYW5kczo6CisKKwlta25vZCAvZGV2L3VzYi9oaWRkZXYwIGMgMTgw IDk2CisJbWtub2QgL2Rldi91c2IvaGlkZGV2MSBjIDE4MCA5NworCW1rbm9kIC9kZXYvdXNiL2hp ZGRldjIgYyAxODAgOTgKKwlta25vZCAvZGV2L3VzYi9oaWRkZXYzIGMgMTgwIDk5CisJbWtub2Qg L2Rldi91c2IvaGlkZGV2NCBjIDE4MCAxMDAKKwlta25vZCAvZGV2L3VzYi9oaWRkZXY1IGMgMTgw IDEwMQorCW1rbm9kIC9kZXYvdXNiL2hpZGRldjYgYyAxODAgMTAyCisJbWtub2QgL2Rldi91c2Iv aGlkZGV2NyBjIDE4MCAxMDMKKwlta25vZCAvZGV2L3VzYi9oaWRkZXY4IGMgMTgwIDEwNAorCW1r bm9kIC9kZXYvdXNiL2hpZGRldjkgYyAxODAgMTA1CisJbWtub2QgL2Rldi91c2IvaGlkZGV2MTAg YyAxODAgMTA2CisJbWtub2QgL2Rldi91c2IvaGlkZGV2MTEgYyAxODAgMTA3CisJbWtub2QgL2Rl di91c2IvaGlkZGV2MTIgYyAxODAgMTA4CisJbWtub2QgL2Rldi91c2IvaGlkZGV2MTMgYyAxODAg MTA5CisJbWtub2QgL2Rldi91c2IvaGlkZGV2MTQgYyAxODAgMTEwCisJbWtub2QgL2Rldi91c2Iv aGlkZGV2MTUgYyAxODAgMTExCiAKIFNvIHlvdSBwb2ludCB5b3VyIGhpZGRldiBjb21wbGlhbnQg dXNlci1zcGFjZSBwcm9ncmFtIGF0IHRoZSBjb3JyZWN0CiBpbnRlcmZhY2UgZm9yIHlvdXIgZGV2 aWNlLCBhbmQgaXQgYWxsIGp1c3Qgd29ya3MuCkBAIC01Niw3ICs2MSw5IEBAIEFzc3VtaW5nIHRo YXQgeW91IGhhdmUgYSBoaWRkZXYgY29tcGxpYW50IHVzZXItc3BhY2UgcHJvZ3JhbSwgb2YKIGNv dXJzZS4gSWYgeW91IG5lZWQgdG8gd3JpdGUgb25lLCByZWFkIG9uLgogCiAKLVRIRSBISURERVYg QVBJCitUaGUgSElEREVWIEFQSQorPT09PT09PT09PT09PT0KKwogVGhpcyBkZXNjcmlwdGlvbiBz aG91bGQgYmUgcmVhZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBISUQKIHNwZWNpZmljYXRpb24s IGZyZWVseSBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LnVzYi5vcmcsIGFuZAogY29udmVuaWVu dGx5IGxpbmtlZCBvZiBodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcuCkBAIC02OSwxMiArNzYsMTQg QEAgZWFjaCBvZiB3aGljaCBjYW4gaGF2ZSBvbmUgb3IgbW9yZSAidXNhZ2VzIi4gIEluIHRoZSBo aWQtY29yZSwKIGVhY2ggb25lIG9mIHRoZXNlIHVzYWdlcyBoYXMgYSBzaW5nbGUgc2lnbmVkIDMy IGJpdCB2YWx1ZS4KIAogcmVhZCgpOgorLS0tLS0tLQorCiBUaGlzIGlzIHRoZSBldmVudCBpbnRl cmZhY2UuICBXaGVuIHRoZSBISUQgZGV2aWNlJ3Mgc3RhdGUgY2hhbmdlcywKIGl0IHBlcmZvcm1z IGFuIGludGVycnVwdCB0cmFuc2ZlciBjb250YWluaW5nIGEgcmVwb3J0IHdoaWNoIGNvbnRhaW5z CiB0aGUgY2hhbmdlZCB2YWx1ZS4gIFRoZSBoaWQtY29yZS5jIG1vZHVsZSBwYXJzZXMgdGhlIHJl cG9ydCwgYW5kCiByZXR1cm5zIHRvIGhpZGRldi5jIHRoZSBpbmRpdmlkdWFsIHVzYWdlcyB0aGF0 IGhhdmUgY2hhbmdlZCB3aXRoaW4KIHRoZSByZXBvcnQuICBJbiBpdHMgYmFzaWMgbW9kZSwgdGhl IGhpZGRldiB3aWxsIG1ha2UgdGhlc2UgaW5kaXZpZHVhbAotdXNhZ2UgY2hhbmdlcyBhdmFpbGFi bGUgdG8gdGhlIHJlYWRlciB1c2luZyBhIHN0cnVjdCBoaWRkZXZfZXZlbnQ6Cit1c2FnZSBjaGFu Z2VzIGF2YWlsYWJsZSB0byB0aGUgcmVhZGVyIHVzaW5nIGEgc3RydWN0IGhpZGRldl9ldmVudDo6 CiAKICAgICAgICBzdHJ1Y3QgaGlkZGV2X2V2ZW50IHsKICAgICAgICAgICAgdW5zaWduZWQgaGlk OwpAQCAtOTEsMTIgKzEwMCwxOCBAQCBpb2N0bCgpIGRlc2NyaWJlZCBiZWxvdy4KIAogCiBpb2N0 bCgpOiAKKy0tLS0tLS0tCisKIFRoaXMgaXMgdGhlIGNvbnRyb2wgaW50ZXJmYWNlLiBUaGVyZSBh cmUgYSBudW1iZXIgb2YgY29udHJvbHM6IAogCi1ISURJT0NHVkVSU0lPTiAtIGludCAocmVhZCkK LUdldHMgdGhlIHZlcnNpb24gY29kZSBvdXQgb2YgdGhlIGhpZGRldiBkcml2ZXIuCitISURJT0NH VkVSU0lPTgorICAtIGludCAocmVhZCkKKworIEdldHMgdGhlIHZlcnNpb24gY29kZSBvdXQgb2Yg dGhlIGhpZGRldiBkcml2ZXIuCisKK0hJRElPQ0FQUExJQ0FUSU9OCisgIC0gKG5vbmUpCiAKLUhJ RElPQ0FQUExJQ0FUSU9OIC0gKG5vbmUpCiBUaGlzIGlvY3RsIGNhbGwgcmV0dXJucyB0aGUgSElE IGFwcGxpY2F0aW9uIHVzYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUKIGhpZCBkZXZpY2UuIFRoZSB0 aGlyZCBhcmd1bWVudCB0byBpb2N0bCgpIHNwZWNpZmllcyB3aGljaCBhcHBsaWNhdGlvbgogaW5k ZXggdG8gZ2V0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBkZXZpY2UgaGFzIG1vcmUgdGhhbiBv bmUKQEAgLTEwNiw3ICsxMjEsOSBAQCByZXR1cm5zIC0xLiBZb3UgY2FuIGZpbmQgb3V0IGJlZm9y ZWhhbmQgaG93IG1hbnkgYXBwbGljYXRpb24KIGNvbGxlY3Rpb25zIHRoZSBkZXZpY2UgaGFzIGZy b20gdGhlIG51bV9hcHBsaWNhdGlvbnMgZmllbGQgZnJvbSB0aGUKIGhpZGRldl9kZXZpbmZvIHN0 cnVjdHVyZS4gCiAKLUhJRElPQ0dDT0xMRUNUSU9OSU5GTyAtIHN0cnVjdCBoaWRkZXZfY29sbGVj dGlvbl9pbmZvIChyZWFkL3dyaXRlKQorSElESU9DR0NPTExFQ1RJT05JTkZPCisgIC0gc3RydWN0 IGhpZGRldl9jb2xsZWN0aW9uX2luZm8gKHJlYWQvd3JpdGUpCisKIFRoaXMgcmV0dXJucyBhIHN1 cGVyc2V0IG9mIHRoZSBpbmZvcm1hdGlvbiBhYm92ZSwgcHJvdmlkaW5nIG5vdCBvbmx5CiBhcHBs aWNhdGlvbiBjb2xsZWN0aW9ucywgYnV0IGFsbCB0aGUgY29sbGVjdGlvbnMgdGhlIGRldmljZSBo YXMuICBJdAogYWxzbyByZXR1cm5zIHRoZSBsZXZlbCB0aGUgY29sbGVjdGlvbiBsaXZlcyBpbiB0 aGUgaGllcmFyY2h5LgpAQCAtMTE1LDE0ICsxMzIsMjAgQEAgZmllbGQgc2V0IHRvIHRoZSBpbmRl eCB0aGF0IHNob3VsZCBiZSByZXR1cm5lZC4gIFRoZSBpb2N0bCBmaWxscyBpbgogdGhlIG90aGVy IGZpZWxkcy4gIElmIHRoZSBpbmRleCBpcyBsYXJnZXIgdGhhbiB0aGUgbGFzdCBjb2xsZWN0aW9u IAogaW5kZXgsIHRoZSBpb2N0bCByZXR1cm5zIC0xIGFuZCBzZXRzIGVycm5vIHRvIC1FSU5WQUwu CiAKLUhJRElPQ0dERVZJTkZPIC0gc3RydWN0IGhpZGRldl9kZXZpbmZvIChyZWFkKQorSElESU9D R0RFVklORk8KKyAgLSBzdHJ1Y3QgaGlkZGV2X2RldmluZm8gKHJlYWQpCisKIEdldHMgYSBoaWRk ZXZfZGV2aW5mbyBzdHJ1Y3R1cmUgd2hpY2ggZGVzY3JpYmVzIHRoZSBkZXZpY2UuCiAKLUhJRElP Q0dTVFJJTkcgLSBzdHJ1Y3QgaGlkZGV2X3N0cmluZ19kZXNjcmlwdG9yIChyZWFkL3dyaXRlKQor SElESU9DR1NUUklORworICAtIHN0cnVjdCBoaWRkZXZfc3RyaW5nX2Rlc2NyaXB0b3IgKHJlYWQv d3JpdGUpCisKIEdldHMgYSBzdHJpbmcgZGVzY3JpcHRvciBmcm9tIHRoZSBkZXZpY2UuIFRoZSBj YWxsZXIgbXVzdCBmaWxsIGluIHRoZQogImluZGV4IiBmaWVsZCB0byBpbmRpY2F0ZSB3aGljaCBk ZXNjcmlwdG9yIHNob3VsZCBiZSByZXR1cm5lZC4KIAotSElESU9DSU5JVFJFUE9SVCAtIChub25l KQorSElESU9DSU5JVFJFUE9SVAorICAtIChub25lKQorCiBJbnN0cnVjdHMgdGhlIGtlcm5lbCB0 byByZXRyaWV2ZSBhbGwgaW5wdXQgYW5kIGZlYXR1cmUgcmVwb3J0IHZhbHVlcwogZnJvbSB0aGUg ZGV2aWNlLiBBdCB0aGlzIHBvaW50LCBhbGwgdGhlIHVzYWdlIHN0cnVjdHVyZXMgd2lsbCBjb250 YWluCiBjdXJyZW50IHZhbHVlcyBmb3IgdGhlIGRldmljZSwgYW5kIHdpbGwgbWFpbnRhaW4gaXQg YXMgdGhlIGRldmljZQpAQCAtMTMwLDIxICsxNTMsMjkgQEAgY2hhbmdlcy4gIE5vdGUgdGhhdCB0 aGUgdXNlIG9mIHRoaXMgaW9jdGwgaXMgdW5uZWNlc3NhcnkgaW4gZ2VuZXJhbCwKIHNpbmNlIGxh dGVyIGtlcm5lbHMgYXV0b21hdGljYWxseSBpbml0aWFsaXplIHRoZSByZXBvcnRzIGZyb20gdGhl CiBkZXZpY2UgYXQgYXR0YWNoIHRpbWUuCiAKLUhJRElPQ0dOQU1FIC0gc3RyaW5nICh2YXJpYWJs ZSBsZW5ndGgpCitISURJT0NHTkFNRQorICAtIHN0cmluZyAodmFyaWFibGUgbGVuZ3RoKQorCiBH ZXRzIHRoZSBkZXZpY2UgbmFtZQogCi1ISURJT0NHUkVQT1JUIC0gc3RydWN0IGhpZGRldl9yZXBv cnRfaW5mbyAod3JpdGUpCitISURJT0NHUkVQT1JUCisgIC0gc3RydWN0IGhpZGRldl9yZXBvcnRf aW5mbyAod3JpdGUpCisKIEluc3RydWN0cyB0aGUga2VybmVsIHRvIGdldCBhIGZlYXR1cmUgb3Ig aW5wdXQgcmVwb3J0IGZyb20gdGhlIGRldmljZSwKIGluIG9yZGVyIHRvIHNlbGVjdGl2ZWx5IHVw ZGF0ZSB0aGUgdXNhZ2Ugc3RydWN0dXJlcyAoaW4gY29udHJhc3QgdG8KIElOSVRSRVBPUlQpLgog Ci1ISURJT0NTUkVQT1JUIC0gc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAod3JpdGUpCitISURJ T0NTUkVQT1JUCisgIC0gc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAod3JpdGUpCisKIEluc3Ry dWN0cyB0aGUga2VybmVsIHRvIHNlbmQgYSByZXBvcnQgdG8gdGhlIGRldmljZS4gVGhpcyByZXBv cnQgY2FuCiBiZSBmaWxsZWQgaW4gYnkgdGhlIHVzZXIgdGhyb3VnaCBISURJT0NTVVNBR0UgY2Fs bHMgKGJlbG93KSB0byBmaWxsIGluCiBpbmRpdmlkdWFsIHVzYWdlIHZhbHVlcyBpbiB0aGUgcmVw b3J0IGJlZm9yZSBzZW5kaW5nIHRoZSByZXBvcnQgaW4gZnVsbAogdG8gdGhlIGRldmljZS4gCiAK LUhJRElPQ0dSRVBPUlRJTkZPIC0gc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAocmVhZC93cml0 ZSkKK0hJRElPQ0dSRVBPUlRJTkZPCisgIC0gc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAocmVh ZC93cml0ZSkKKwogRmlsbHMgaW4gYSBoaWRkZXZfcmVwb3J0X2luZm8gc3RydWN0dXJlIGZvciB0 aGUgdXNlci4gVGhlIHJlcG9ydCBpcwogbG9va2VkIHVwIGJ5IHR5cGUgKGlucHV0LCBvdXRwdXQg b3IgZmVhdHVyZSkgYW5kIGlkLCBzbyB0aGVzZSBmaWVsZHMKIG11c3QgYmUgZmlsbGVkIGluIGJ5 IHRoZSB1c2VyLiBUaGUgSUQgY2FuIGJlIGFic29sdXRlIC0tIHRoZSBhY3R1YWwKQEAgLTE1Niwx OSArMTg3LDI1IEBAIHVzZSB0aGUgcmVsYXRpdmUgSURzIGFib3ZlIHRvIGVudW1lcmF0ZSB0aGUg dmFsaWQgSURzLiBUaGUgaW9jdGwKIHJldHVybnMgbm9uLXplcm8gd2hlbiB0aGVyZSBpcyBubyBt b3JlIG5leHQgSUQuIFRoZSByZWFsIHJlcG9ydCBJRCBpcwogZmlsbGVkIGludG8gdGhlIHJldHVy bmVkIGhpZGRldl9yZXBvcnRfaW5mbyBzdHJ1Y3R1cmUuIAogCi1ISURJT0NHRklFTERJTkZPIC0g c3RydWN0IGhpZGRldl9maWVsZF9pbmZvIChyZWFkL3dyaXRlKQorSElESU9DR0ZJRUxESU5GTwor ICAtIHN0cnVjdCBoaWRkZXZfZmllbGRfaW5mbyAocmVhZC93cml0ZSkKKwogUmV0dXJucyB0aGUg ZmllbGQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgcmVwb3J0IGluIGEKIGhpZGRldl9m aWVsZF9pbmZvIHN0cnVjdHVyZS4gVGhlIHVzZXIgbXVzdCBmaWxsIGluIHJlcG9ydF9pZCBhbmQK IHJlcG9ydF90eXBlIGluIHRoaXMgc3RydWN0dXJlLCBhcyBhYm92ZS4gVGhlIGZpZWxkX2luZGV4 IHNob3VsZCBhbHNvCiBiZSBmaWxsZWQgaW4sIHdoaWNoIHNob3VsZCBiZSBhIG51bWJlciBmcm9t IDAgYW5kIG1heGZpZWxkLTEsIGFzCiByZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgSElESU9DR1JF UE9SVElORk8gY2FsbC4gCiAKLUhJRElPQ0dVQ09ERSAtIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVm IChyZWFkL3dyaXRlKQorSElESU9DR1VDT0RFCisgIC0gc3RydWN0IGhpZGRldl91c2FnZV9yZWYg KHJlYWQvd3JpdGUpCisKIFJldHVybnMgdGhlIHVzYWdlX2NvZGUgaW4gYSBoaWRkZXZfdXNhZ2Vf cmVmIHN0cnVjdHVyZSwgZ2l2ZW4gdGhhdAogZ2l2ZW4gaXRzIHJlcG9ydCB0eXBlLCByZXBvcnQg aWQsIGZpZWxkIGluZGV4LCBhbmQgaW5kZXggd2l0aGluIHRoZQogZmllbGQgaGF2ZSBhbHJlYWR5 IGJlZW4gZmlsbGVkIGludG8gdGhlIHN0cnVjdHVyZS4KIAotSElESU9DR1VTQUdFIC0gc3RydWN0 IGhpZGRldl91c2FnZV9yZWYgKHJlYWQvd3JpdGUpCitISURJT0NHVVNBR0UKKyAgLSBzdHJ1Y3Qg aGlkZGV2X3VzYWdlX3JlZiAocmVhZC93cml0ZSkKKwogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSB1 c2FnZSBpbiBhIGhpZGRldl91c2FnZV9yZWYgc3RydWN0dXJlLiBUaGUKIHVzYWdlIHRvIGJlIHJl dHJpZXZlZCBjYW4gYmUgc3BlY2lmaWVkIGFzIGFib3ZlLCBvciB0aGUgdXNlciBjYW4KIGNob29z ZSB0byBmaWxsIGluIHRoZSByZXBvcnRfdHlwZSBmaWVsZCBhbmQgc3BlY2lmeSB0aGUgcmVwb3J0 X2lkIGFzCkBAIC0xNzYsMjggKzIxMywzNyBAQCBISURfUkVQT1JUX0lEX1VOS05PV04uIEluIHRo aXMgY2FzZSwgdGhlIGhpZGRldl91c2FnZV9yZWYgd2lsbCBiZQogZmlsbGVkIGluIHdpdGggdGhl IHJlcG9ydCBhbmQgZmllbGQgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMKIHVzYWdl IGlmIGl0IGlzIGZvdW5kLiAKIAotSElESU9DU1VTQUdFIC0gc3RydWN0IGhpZGRldl91c2FnZV9y ZWYgKHdyaXRlKQorSElESU9DU1VTQUdFCisgIC0gc3RydWN0IGhpZGRldl91c2FnZV9yZWYgKHdy aXRlKQorCiBTZXRzIHRoZSB2YWx1ZSBvZiBhIHVzYWdlIGluIGFuIG91dHB1dCByZXBvcnQuICBU aGUgdXNlciBmaWxscyBpbgogdGhlIGhpZGRldl91c2FnZV9yZWYgc3RydWN0dXJlIGFzIGFib3Zl LCBidXQgYWRkaXRpb25hbGx5IGZpbGxzIGluCiB0aGUgdmFsdWUgZmllbGQuCiAKLUhJRElPR0NP TExFQ1RJT05JTkRFWCAtIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmICh3cml0ZSkKK0hJRElPR0NP TExFQ1RJT05JTkRFWAorICAtIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmICh3cml0ZSkKKwogUmV0 dXJucyB0aGUgY29sbGVjdGlvbiBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhpcyB1c2FnZS4gIFRo aXMKIGluZGljYXRlcyB3aGVyZSBpbiB0aGUgY29sbGVjdGlvbiBoaWVyYXJjaHkgdGhpcyB1c2Fn ZSBzaXRzLgogCi1ISURJT0NHRkxBRyAtIGludCAocmVhZCkKLUhJRElPQ1NGTEFHIC0gaW50ICh3 cml0ZSkKK0hJRElPQ0dGTEFHCisgIC0gaW50IChyZWFkKQorSElESU9DU0ZMQUcKKyAgLSBpbnQg KHdyaXRlKQorCiBUaGVzZSBvcGVyYXRpb25zIHJlc3BlY3RpdmVseSBpbnNwZWN0IGFuZCByZXBs YWNlIHRoZSBtb2RlIGZsYWdzCiB0aGF0IGluZmx1ZW5jZSB0aGUgcmVhZCgpIGNhbGwgYWJvdmUu ICBUaGUgZmxhZ3MgYXJlIGFzIGZvbGxvd3M6CiAKLSAgICBISURERVZfRkxBR19VUkVGIC0gcmVh ZCgpIGNhbGxzIHdpbGwgbm93IHJldHVybiAKKyAgICBISURERVZfRkxBR19VUkVGCisgICAgICAt IHJlYWQoKSBjYWxscyB3aWxsIG5vdyByZXR1cm4KICAgICAgICAgc3RydWN0IGhpZGRldl91c2Fn ZV9yZWYgaW5zdGVhZCBvZiBzdHJ1Y3QgaGlkZGV2X2V2ZW50LgogICAgICAgICBUaGlzIGlzIGEg bGFyZ2VyIHN0cnVjdHVyZSwgYnV0IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlCiAgICAgICAgIGRl dmljZSBoYXMgbW9yZSB0aGFuIG9uZSB1c2FnZSBpbiBpdHMgcmVwb3J0cyB3aXRoIHRoZQogICAg ICAgICBzYW1lIHVzYWdlIGNvZGUsIHRoaXMgbW9kZSBzZXJ2ZXMgdG8gcmVzb2x2ZSBzdWNoCiAg ICAgICAgIGFtYmlndWl0eS4KIAotICAgIEhJRERFVl9GTEFHX1JFUE9SVCAtIFRoaXMgZmxhZyBj YW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uCisgICAgSElEREVWX0ZMQUdfUkVQT1JUCisg ICAgICAtIFRoaXMgZmxhZyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uCiAgICAgICAg IHdpdGggSElEREVWX0ZMQUdfVVJFRi4gIFdpdGggdGhpcyBmbGFnIHNldCwgd2hlbiB0aGUgZGV2 aWNlCiAgICAgICAgIHNlbmRzIGEgcmVwb3J0LCBhIHN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmIHdp bGwgYmUgcmV0dXJuZWQKICAgICAgICAgdG8gcmVhZCgpIGZpbGxlZCBpbiB3aXRoIHRoZSByZXBv cnRfdHlwZSBhbmQgcmVwb3J0X2lkLCBidXQgCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hp ZC9oaWRyYXcudHh0IGIvRG9jdW1lbnRhdGlvbi9oaWQvaGlkcmF3LnJzdApzaW1pbGFyaXR5IGlu ZGV4IDg5JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2hpZC9oaWRyYXcudHh0CnJlbmFtZSB0 byBEb2N1bWVudGF0aW9uL2hpZC9oaWRyYXcucnN0CmluZGV4IGM4NDM2ZTM1NGY0NC4uNGE0YTBi YTFmMzYyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2hpZC9oaWRyYXcudHh0CisrKyBiL0Rv Y3VtZW50YXRpb24vaGlkL2hpZHJhdy5yc3QKQEAgLTEsNSArMSw2IEBACi0gICAgICBISURSQVcg LSBSYXcgQWNjZXNzIHRvIFVTQiBhbmQgQmx1ZXRvb3RoIEh1bWFuIEludGVyZmFjZSBEZXZpY2Vz Ci0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorSElEUkFXIC0gUmF3IEFjY2VzcyB0byBVU0IgYW5k IEJsdWV0b290aCBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlcworPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGUgaGlkcmF3 IGRyaXZlciBwcm92aWRlcyBhIHJhdyBpbnRlcmZhY2UgdG8gVVNCIGFuZCBCbHVldG9vdGggSHVt YW4KIEludGVyZmFjZSBEZXZpY2VzIChISURzKS4gIEl0IGRpZmZlcnMgZnJvbSBoaWRkZXYgaW4g dGhhdCByZXBvcnRzIHNlbnQgYW5kCkBAIC0zMSw2ICszMiw3IEBAIGRpcmVjdGx5IHVuZGVyIC9k ZXYgKGVnOiAvZGV2L2hpZHJhdzApLiAgQXMgdGhpcyBsb2NhdGlvbiBpcyBkaXN0cmlidXRpb24t CiBhbmQgdWRldiBydWxlLWRlcGVuZGVudCwgYXBwbGljYXRpb25zIHNob3VsZCB1c2UgbGlidWRl diB0byBsb2NhdGUgaGlkcmF3CiBkZXZpY2VzIGF0dGFjaGVkIHRvIHRoZSBzeXN0ZW0uICBUaGVy ZSBpcyBhIHR1dG9yaWFsIG9uIGxpYnVkZXYgd2l0aCBhCiB3b3JraW5nIGV4YW1wbGUgYXQ6CisK IAlodHRwOi8vd3d3LnNpZ25hbDExLnVzL29zcy91ZGV2LwogCiBUaGUgSElEUkFXIEFQSQpAQCAt NTEsNyArNTMsNyBAQCBieXRlLiAgRm9yIGRldmljZXMgd2hpY2ggZG8gbm90IHVzZSBudW1iZXJl ZCByZXBvcnRzLCB0aGUgcmVwb3J0IGRhdGEKIHdpbGwgYmVnaW4gYXQgdGhlIGZpcnN0IGJ5dGUu CiAKIHdyaXRlKCkKLS0tLS0tLS0tCistLS0tLS0tCiBUaGUgd3JpdGUoKSBmdW5jdGlvbiB3aWxs IHdyaXRlIGEgcmVwb3J0IHRvIHRoZSBkZXZpY2UuIEZvciBVU0IgZGV2aWNlcywgaWYKIHRoZSBk ZXZpY2UgaGFzIGFuIElOVEVSUlVQVCBPVVQgZW5kcG9pbnQsIHRoZSByZXBvcnQgd2lsbCBiZSBz ZW50IG9uIHRoYXQKIGVuZHBvaW50LiBJZiBpdCBkb2VzIG5vdCwgdGhlIHJlcG9ydCB3aWxsIGJl IHNlbnQgb3ZlciB0aGUgY29udHJvbCBlbmRwb2ludCwKQEAgLTYyLDM4ICs2NCw1MiBAQCBudW1i ZXIuICBJZiB0aGUgZGV2aWNlIGRvZXMgbm90IHVzZSBudW1iZXJlZCByZXBvcnRzLCB0aGUgZmly c3QgYnl0ZSBzaG91bGQKIGJlIHNldCB0byAwLiBUaGUgcmVwb3J0IGRhdGEgaXRzZWxmIHNob3Vs ZCBiZWdpbiBhdCB0aGUgc2Vjb25kIGJ5dGUuCiAKIGlvY3RsKCkKLS0tLS0tLS0tCistLS0tLS0t CiBIaWRyYXcgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBpb2N0bHM6CiAKLUhJRElPQ0dSREVTQ1NJ WkU6IEdldCBSZXBvcnQgRGVzY3JpcHRvciBTaXplCitISURJT0NHUkRFU0NTSVpFOgorCUdldCBS ZXBvcnQgRGVzY3JpcHRvciBTaXplCisKIFRoaXMgaW9jdGwgd2lsbCBnZXQgdGhlIHNpemUgb2Yg dGhlIGRldmljZSdzIHJlcG9ydCBkZXNjcmlwdG9yLgogCi1ISURJT0NHUkRFU0M6IEdldCBSZXBv cnQgRGVzY3JpcHRvcgorSElESU9DR1JERVNDOgorCUdldCBSZXBvcnQgRGVzY3JpcHRvcgorCiBU aGlzIGlvY3RsIHJldHVybnMgdGhlIGRldmljZSdzIHJlcG9ydCBkZXNjcmlwdG9yIHVzaW5nIGEK IGhpZHJhd19yZXBvcnRfZGVzY3JpcHRvciBzdHJ1Y3QuICBNYWtlIHN1cmUgdG8gc2V0IHRoZSBz aXplIGZpZWxkIG9mIHRoZQogaGlkcmF3X3JlcG9ydF9kZXNjcmlwdG9yIHN0cnVjdCB0byB0aGUg c2l6ZSByZXR1cm5lZCBmcm9tIEhJRElPQ0dSREVTQ1NJWkUuCiAKLUhJRElPQ0dSQVdJTkZPOiBH ZXQgUmF3IEluZm8KK0hJRElPQ0dSQVdJTkZPOgorCUdldCBSYXcgSW5mbworCiBUaGlzIGlvY3Rs IHdpbGwgcmV0dXJuIGEgaGlkcmF3X2RldmluZm8gc3RydWN0IGNvbnRhaW5pbmcgdGhlIGJ1cyB0 eXBlLCB0aGUKIHZlbmRvciBJRCAoVklEKSwgYW5kIHByb2R1Y3QgSUQgKFBJRCkgb2YgdGhlIGRl dmljZS4gVGhlIGJ1cyB0eXBlIGNhbiBiZSBvbmUKLW9mOgotCUJVU19VU0IKLQlCVVNfSElMCi0J QlVTX0JMVUVUT09USAotCUJVU19WSVJUVUFMCitvZjo6CisKKwktIEJVU19VU0IKKwktIEJVU19I SUwKKwktIEJVU19CTFVFVE9PVEgKKwktIEJVU19WSVJUVUFMCisKIHdoaWNoIGFyZSBkZWZpbmVk IGluIHVhcGkvbGludXgvaW5wdXQuaC4KIAotSElESU9DR1JBV05BTUUobGVuKTogR2V0IFJhdyBO YW1lCitISURJT0NHUkFXTkFNRShsZW4pOgorCUdldCBSYXcgTmFtZQorCiBUaGlzIGlvY3RsIHJl dHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgdmVuZG9yIGFuZCBwcm9kdWN0IHN0cmluZ3Mg b2YKIHRoZSBkZXZpY2UuICBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIFVuaWNvZGUsIFVURi04IGVu Y29kZWQuCiAKLUhJRElPQ0dSQVdQSFlTKGxlbik6IEdldCBQaHlzaWNhbCBBZGRyZXNzCitISURJ T0NHUkFXUEhZUyhsZW4pOgorCUdldCBQaHlzaWNhbCBBZGRyZXNzCisKIFRoaXMgaW9jdGwgcmV0 dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRl dmljZS4KIEZvciBVU0IgZGV2aWNlcywgdGhlIHN0cmluZyBjb250YWlucyB0aGUgcGh5c2ljYWwg cGF0aCB0byB0aGUgZGV2aWNlICh0aGUKIFVTQiBjb250cm9sbGVyLCBodWJzLCBwb3J0cywgZXRj KS4gIEZvciBCbHVldG9vdGggZGV2aWNlcywgdGhlIHN0cmluZwogY29udGFpbnMgdGhlIGhhcmR3 YXJlIChNQUMpIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4KIAotSElESU9DU0ZFQVRVUkUobGVuKTog U2VuZCBhIEZlYXR1cmUgUmVwb3J0CitISURJT0NTRkVBVFVSRShsZW4pOgorCVNlbmQgYSBGZWF0 dXJlIFJlcG9ydAorCiBUaGlzIGlvY3RsIHdpbGwgc2VuZCBhIGZlYXR1cmUgcmVwb3J0IHRvIHRo ZSBkZXZpY2UuICBQZXIgdGhlIEhJRAogc3BlY2lmaWNhdGlvbiwgZmVhdHVyZSByZXBvcnRzIGFy ZSBhbHdheXMgc2VudCB1c2luZyB0aGUgY29udHJvbCBlbmRwb2ludC4KIFNldCB0aGUgZmlyc3Qg Ynl0ZSBvZiB0aGUgc3VwcGxpZWQgYnVmZmVyIHRvIHRoZSByZXBvcnQgbnVtYmVyLiAgRm9yIGRl dmljZXMKQEAgLTEwMSw3ICsxMTcsOSBAQCB3aGljaCBkbyBub3QgdXNlIG51bWJlcmVkIHJlcG9y dHMsIHNldCB0aGUgZmlyc3QgYnl0ZSB0byAwLiBUaGUgcmVwb3J0IGRhdGEKIGJlZ2lucyBpbiB0 aGUgc2Vjb25kIGJ5dGUuIE1ha2Ugc3VyZSB0byBzZXQgbGVuIGFjY29yZGluZ2x5LCB0byBvbmUg bW9yZQogdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSByZXBvcnQgKHRvIGFjY291bnQgZm9yIHRoZSBy ZXBvcnQgbnVtYmVyKS4KIAotSElESU9DR0ZFQVRVUkUobGVuKTogR2V0IGEgRmVhdHVyZSBSZXBv cnQKK0hJRElPQ0dGRUFUVVJFKGxlbik6CisJR2V0IGEgRmVhdHVyZSBSZXBvcnQKKwogVGhpcyBp b2N0bCB3aWxsIHJlcXVlc3QgYSBmZWF0dXJlIHJlcG9ydCBmcm9tIHRoZSBkZXZpY2UgdXNpbmcg dGhlIGNvbnRyb2wKIGVuZHBvaW50LiAgVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHN1cHBsaWVkIGJ1 ZmZlciBzaG91bGQgYmUgc2V0IHRvIHRoZSByZXBvcnQKIG51bWJlciBvZiB0aGUgcmVxdWVzdGVk IHJlcG9ydC4gIEZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCB1c2UgbnVtYmVyZWQKQEAgLTEwOSwx MSArMTI3LDEyIEBAIHJlcG9ydHMsIHNldCB0aGUgZmlyc3QgYnl0ZSB0byAwLiAgVGhlIHJlcG9y dCB3aWxsIGJlIHJldHVybmVkIHN0YXJ0aW5nIGF0CiB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgYnVm ZmVyIChpZTogdGhlIHJlcG9ydCBudW1iZXIgaXMgbm90IHJldHVybmVkKS4KIAogRXhhbXBsZQot LS0tLS0tLS0tCistLS0tLS0tCiBJbiBzYW1wbGVzLywgZmluZCBoaWQtZXhhbXBsZS5jLCB3aGlj aCBzaG93cyBleGFtcGxlcyBvZiByZWFkKCksIHdyaXRlKCksCiBhbmQgYWxsIHRoZSBpb2N0bHMg Zm9yIGhpZHJhdy4gIFRoZSBjb2RlIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBmb3IgYW55CiBwdXJw b3NlLCBhbmQgY2FuIHNlcnZlIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGRldmVsb3BpbmcgYXBw bGljYXRpb25zIHVzaW5nCiBoaWRyYXcuCiAKIERvY3VtZW50IGJ5OgorCiAJQWxhbiBPdHQgPGFs YW5Ac2lnbmFsMTEudXM+LCBTaWduYWwgMTEgU29mdHdhcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vaGlkL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vaGlkL2luZGV4LnJzdApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmFmNDMyNDkwMjYyMgotLS0gL2Rldi9u dWxsCisrKyBiL0RvY3VtZW50YXRpb24vaGlkL2luZGV4LnJzdApAQCAtMCwwICsxLDE4IEBACis6 b3JwaGFuOgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorSHVtYW4gSW50ZXJmYWNl IERldmljZXMgKEhJRCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIHRvY3Ry ZWU6OgorICAgOm1heGRlcHRoOiAxCisKKyAgIGhpZGRldgorICAgaGlkcmF3CisgICBoaWQtc2Vu c29yCisgICBoaWQtdHJhbnNwb3J0CisKKyAgIHVoaWQKKworICAgaGlkLWFscHMKKyAgIGludGVs LWlzaC1oaWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaGlkL2ludGVsLWlzaC1oaWQucnN0 IGIvRG9jdW1lbnRhdGlvbi9oaWQvaW50ZWwtaXNoLWhpZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jY2NiZjRiZTE3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9E b2N1bWVudGF0aW9uL2hpZC9pbnRlbC1pc2gtaGlkLnJzdApAQCAtMCwwICsxLDQ4NSBAQAorPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbnRlbCBJbnRlZ3JhdGVkIFNlbnNvciBI dWIgKElTSCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIHNlbnNvciBo dWIgZW5hYmxlcyB0aGUgYWJpbGl0eSB0byBvZmZsb2FkIHNlbnNvciBwb2xsaW5nIGFuZCBhbGdv cml0aG0KK3Byb2Nlc3NpbmcgdG8gYSBkZWRpY2F0ZWQgbG93IHBvd2VyIGNvLXByb2Nlc3Nvci4g VGhpcyBhbGxvd3MgdGhlIGNvcmUKK3Byb2Nlc3NvciB0byBnbyBpbnRvIGxvdyBwb3dlciBtb2Rl cyBtb3JlIG9mdGVuLCByZXN1bHRpbmcgaW4gdGhlIGluY3JlYXNlZAorYmF0dGVyeSBsaWZlLgor CitUaGVyZSBhcmUgbWFueSB2ZW5kb3JzIHByb3ZpZGluZyBleHRlcm5hbCBzZW5zb3IgaHVicyBj b25maXJtaW5nIHRvIEhJRAorU2Vuc29yIHVzYWdlIHRhYmxlcywgYW5kIHVzZWQgaW4gc2V2ZXJh bCB0YWJsZXRzLCAyIGluIDEgY29udmVydGlibGUgbGFwdG9wcworYW5kIGVtYmVkZGVkIHByb2R1 Y3RzLiBMaW51eCBoYWQgdGhpcyBzdXBwb3J0IHNpbmNlIExpbnV4IDMuOS4KKworSW50ZWzCriBp bnRyb2R1Y2VkIGludGVncmF0ZWQgc2Vuc29yIGh1YnMgYXMgYSBwYXJ0IG9mIHRoZSBTb0Mgc3Rh cnRpbmcgZnJvbQorQ2hlcnJ5IFRyYWlsIGFuZCBub3cgc3VwcG9ydGVkIG9uIG11bHRpcGxlIGdl bmVyYXRpb25zIG9mIENQVSBwYWNrYWdlcy4gVGhlcmUKK2FyZSBtYW55IGNvbW1lcmNpYWwgZGV2 aWNlcyBhbHJlYWR5IHNoaXBwZWQgd2l0aCBJbnRlZ3JhdGVkIFNlbnNvciBIdWJzIChJU0gpLgor VGhlc2UgSVNIIGFsc28gY29tcGx5IHRvIEhJRCBzZW5zb3Igc3BlY2lmaWNhdGlvbiwgYnV0IHRo ZSAgZGlmZmVyZW5jZSBpcyB0aGUKK3RyYW5zcG9ydCBwcm90b2NvbCB1c2VkIGZvciBjb21tdW5p Y2F0aW9uLiBUaGUgY3VycmVudCBleHRlcm5hbCBzZW5zb3IgaHVicworbWFpbmx5IHVzZSBISUQg b3ZlciBpMkMgb3IgVVNCLiBCdXQgSVNIIGRvZXNuJ3QgdXNlIGVpdGhlciBpMmMgb3IgVVNCLgor CisxLiBPdmVydmlldworPT09PT09PT09PT0KKworVXNpbmcgYSBhbmFsb2d5IHdpdGggYSB1c2Jo aWQgaW1wbGVtZW50YXRpb24sIHRoZSBJU0ggZm9sbG93cyBhIHNpbWlsYXIgbW9kZWwKK2ZvciBh IHZlcnkgaGlnaCBzcGVlZCBjb21tdW5pY2F0aW9uOjoKKworCS0tLS0tLS0tLS0tLS0tLS0tCQkt LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfCAgICBVU0IgSElECXwJLS0+CXwgICAgSVNIIEhJRAkg ICAgIHwKKwktLS0tLS0tLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCS0tLS0t LS0tLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfCAgVVNCIHByb3RvY29sCXwJ LS0+CXwgICAgSVNIIFRyYW5zcG9ydCAgIHwKKwktLS0tLS0tLS0tLS0tLS0tLQkJLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCS0tLS0tLS0tLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisJfCAgRUhDSS9YSENJCXwJLS0+CXwgICAgSVNIIElQQwkgICAgIHwKKwktLS0tLS0tLS0tLS0t LS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgIFBDSQkJCQkgUENJCisJLS0tLS0t LS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgfEhvc3QgY29udHJv bGxlcnwJLS0+CXwgICAgSVNIIHByb2Nlc3NvciAgIHwKKwktLS0tLS0tLS0tLS0tLS0tLQkJLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgVVNCIExpbmsKKwktLS0tLS0tLS0tLS0tLS0tLQkJ LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXwgVVNCIEVuZCBwb2ludHN8CS0tPgl8ICAgIElTSCBD bGllbnRzICAgICB8CisJLS0tLS0tLS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KworTGlrZSBVU0IgcHJvdG9jb2wgcHJvdmlkZXMgYSBtZXRob2QgZm9yIGRldmljZSBlbnVtZXJh dGlvbiwgbGluayBtYW5hZ2VtZW50CithbmQgdXNlciBkYXRhIGVuY2Fwc3VsYXRpb24sIHRoZSBJ U0ggYWxzbyBwcm92aWRlcyBzaW1pbGFyIHNlcnZpY2VzLiBCdXQgaXQgaXMKK3ZlcnkgbGlnaHQg d2VpZ2h0IHRhaWxvcmVkIHRvIG1hbmFnZSBhbmQgY29tbXVuaWNhdGUgd2l0aCBJU0ggY2xpZW50 CithcHBsaWNhdGlvbnMgaW1wbGVtZW50ZWQgaW4gdGhlIGZpcm13YXJlLgorCitUaGUgSVNIIGFs bG93cyBtdWx0aXBsZSBzZW5zb3IgbWFuYWdlbWVudCBhcHBsaWNhdGlvbnMgZXhlY3V0aW5nIGlu IHRoZQorZmlybXdhcmUuIExpa2UgVVNCIGVuZHBvaW50cyB0aGUgbWVzc2FnaW5nIGNhbiBiZSB0 by9mcm9tIGEgY2xpZW50LiBBcyBwYXJ0IG9mCitlbnVtZXJhdGlvbiBwcm9jZXNzLCB0aGVzZSBj bGllbnRzIGFyZSBpZGVudGlmaWVkLiBUaGVzZSBjbGllbnRzIGNhbiBiZSBzaW1wbGUKK0hJRCBz ZW5zb3IgYXBwbGljYXRpb25zLCBzZW5zb3IgY2FsaWJyYXRpb24gYXBwbGljYXRpb24gb3Igc2Vu b3IgZmlybXdhcmUKK3VwZGF0ZSBhcHBsaWNhdGlvbi4KKworVGhlIGltcGxlbWVudGF0aW9uIG1v ZGVsIGlzIHNpbWlsYXIsIGxpa2UgVVNCIGJ1cywgSVNIIHRyYW5zcG9ydCBpcyBhbHNvCitpbXBs ZW1lbnRlZCBhcyBhIGJ1cy4gRWFjaCBjbGllbnQgYXBwbGljYXRpb24gZXhlY3V0aW5nIGluIHRo ZSBJU0ggcHJvY2Vzc29yCitpcyByZWdpc3RlcmVkIGFzIGEgZGV2aWNlIG9uIHRoaXMgYnVzLiBU aGUgZHJpdmVyLCB3aGljaCBiaW5kcyBlYWNoIGRldmljZQorKElTSCBISUQgZHJpdmVyKSBpZGVu dGlmaWVzIHRoZSBkZXZpY2UgdHlwZSBhbmQgcmVnaXN0ZXJzIHdpdGggdGhlIGhpZCBjb3JlLgor CisyLiBJU0ggSW1wbGVtZW50YXRpb246IEJsb2NrIERpYWdyYW0KKz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorCis6OgorCisJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCXwgIFVzZXIgU3BhY2UgQXBwbGljYXRpb25zICB8CisJIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorCisgIC0tLS0tLS0tLS0tLS0tLS1JSU8gQUJJLS0tLS0tLS0tLS0tLS0tLQorCSAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXwgIElJTyBTZW5zb3IgRHJpdmVycwkgIHwKKwkg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K Kwl8CSBJSU8gY29yZQkgIHwKKwkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwl8ICAgSElEIFNlbnNvciBIdWIgTUZECSAgfAorCSAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCXwg ICAgICAgSElEIENvcmUJICB8CisJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfCAgIEhJRCBvdmVyIElTSCBDbGllbnQgICB8CisJIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJ fCAgIElTSCBUcmFuc3BvcnQgKElTSFRQKSB8CisJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfCAgICAgIElQQyBEcml2ZXJzCSAgfAor CSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBPUworICAtLS0tLS0tLS0tLS0tLS0tIFBD SSAtLS0tLS0tLS0tLS0tLS0tLQorICBIYXJkd2FyZSArIEZpcm13YXJlCisJIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKwl8IElTSCBIYXJkd2FyZS9GaXJtd2FyZShGVykgfAorCSAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzMuIEhpZ2ggbGV2ZWwgcHJvY2Vzc2luZyBpbiBh Ym92ZSBibG9ja3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwor My4xIEhhcmR3YXJlIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgSVNI IGlzIGV4cG9zZWQgYXMgIk5vbi1WR0EgdW5jbGFzc2lmaWVkIFBDSSBkZXZpY2UiIHRvIHRoZSBo b3N0LiBUaGUgUENJCitwcm9kdWN0IGFuZCB2ZW5kb3IgSURzIGFyZSBjaGFuZ2VkIGZyb20gZGlm ZmVyZW50IGdlbmVyYXRpb25zIG9mIHByb2Nlc3NvcnMuIFNvCit0aGUgc291cmNlIGNvZGUgd2hp Y2ggZW51bWVyYXRlIGRyaXZlcnMgbmVlZHMgdG8gdXBkYXRlIGZyb20gZ2VuZXJhdGlvbiB0bwor Z2VuZXJhdGlvbi4KKworMy4yIEludGVyIFByb2Nlc3NvciBDb21tdW5pY2F0aW9uIChJUEMpIGRy aXZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitM b2NhdGlvbjogZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pcGMKKworVGhlIElQQyBtZXNzYWdl IHVzZWQgbWVtb3J5IG1hcHBlZCBJL08uIFRoZSByZWdpc3RlcnMgYXJlIGRlZmluZWQgaW4KK2h3 LWlzaC1yZWdzLmguCisKKzMuMi4xIElQQy9GVyBtZXNzYWdlIHR5cGVzCiteXl5eXl5eXl5eXl5e Xl5eXl5eXl5eXl5eXgorCitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIG1lc3NhZ2VzLCBvbmUgZm9y IG1hbmFnZW1lbnQgb2YgbGluayBhbmQgb3RoZXIgbWVzc2FnZXMKK2FyZSB0byBhbmQgZnJvbSB0 cmFuc3BvcnQgbGF5ZXJzLgorCitUWCBhbmQgUlggb2YgVHJhbnNwb3J0IG1lc3NhZ2VzCisuLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0Egc2V0IG9mIG1lbW9yeSBtYXBwZWQgcmVn aXN0ZXIgb2ZmZXJzIHN1cHBvcnQgb2YgbXVsdGkgYnl0ZSBtZXNzYWdlcyBUWCBhbmQKK1JYIChF LmcuSVBDX1JFR19JU0gySE9TVF9NU0csIElQQ19SRUdfSE9TVDJJU0hfTVNHKS4gVGhlIElQQyBs YXllciBtYWludGFpbnMKK2ludGVybmFsIHF1ZXVlcyB0byBzZXF1ZW5jZSBtZXNzYWdlcyBhbmQg c2VuZCB0aGVtIGluIG9yZGVyIHRvIHRoZSBGVy4KK09wdGlvbmFsbHkgdGhlIGNhbGxlciBjYW4g cmVnaXN0ZXIgaGFuZGxlciB0byBnZXQgbm90aWZpY2F0aW9uIG9mIGNvbXBsZXRpb24uCitBIGRv b3IgYmVsbCBtZWNoYW5pc20gaXMgdXNlZCBpbiBtZXNzYWdpbmcgdG8gdHJpZ2dlciBwcm9jZXNz aW5nIGluIGhvc3QgYW5kCitjbGllbnQgZmlybXdhcmUgc2lkZS4gV2hlbiBJU0ggaW50ZXJydXB0 IGhhbmRsZXIgaXMgY2FsbGVkLCB0aGUgSVNIMkhPU1QKK2Rvb3JiZWxsIHJlZ2lzdGVyIGlzIHVz ZWQgYnkgaG9zdCBkcml2ZXJzIHRvIGRldGVybWluZSB0aGF0IHRoZSBpbnRlcnJ1cHQKK2lzIGZv ciBJU0guCisKK0VhY2ggc2lkZSBoYXMgMzIgMzItYml0IG1lc3NhZ2UgcmVnaXN0ZXJzIGFuZCBh IDMyLWJpdCBkb29yYmVsbC4gRG9vcmJlbGwKK3JlZ2lzdGVyIGhhcyB0aGUgZm9sbG93aW5nIGZv cm1hdDoKK0JpdHMgMC4uNjogZnJhZ21lbnQgbGVuZ3RoICg3IGJpdHMgYXJlIHVzZWQpCitCaXRz IDEwLi4xMzogZW5jYXBzdWxhdGVkIHByb3RvY29sCitCaXRzIDE2Li4xOTogbWFuYWdlbWVudCBj b21tYW5kIChmb3IgSVBDIG1hbmFnZW1lbnQgcHJvdG9jb2wpCitCaXQgMzE6IGRvb3JiZWxsIHRy aWdnZXIgKHNpZ25hbCBIL1cgaW50ZXJydXB0IHRvIHRoZSBvdGhlciBzaWRlKQorT3RoZXIgYml0 cyBhcmUgcmVzZXJ2ZWQsIHNob3VsZCBiZSAwLgorCiszLjIuMiBUcmFuc3BvcnQgbGF5ZXIgaW50 ZXJmYWNlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RvIGFic3RyYWN0IEhX IGxldmVsIElQQyBjb21tdW5pY2F0aW9uLCBhIHNldCBvZiBjYWxsYmFja3MgYXJlIHJlZ2lzdGVy ZWQuCitUaGUgdHJhbnNwb3J0IGxheWVyIHVzZXMgdGhlbSB0byBzZW5kIGFuZCByZWNlaXZlIG1l c3NhZ2VzLgorUmVmZXIgdG8gIHN0cnVjdCBpc2h0cF9od19vcHMgZm9yIGNhbGxiYWNrcy4KKwor My4zIElTSCBUcmFuc3BvcnQgbGF5ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xvY2F0 aW9uOiBkcml2ZXJzL2hpZC9pbnRlbC1pc2gtaGlkL2lzaHRwLworCiszLjMuMSBBIEdlbmVyaWMg VHJhbnNwb3J0IExheWVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSB0 cmFuc3BvcnQgbGF5ZXIgaXMgYSBiaS1kaXJlY3Rpb25hbCBwcm90b2NvbCwgd2hpY2ggZGVmaW5l czoKKy0gU2V0IG9mIGNvbW1hbmRzIHRvIHN0YXJ0LCBzdG9wLCBjb25uZWN0LCBkaXNjb25uZWN0 IGFuZCBmbG93IGNvbnRyb2wKKyhpc2h0cC9oYm0uaCkgZm9yIGRldGFpbHMKKy0gQSBmbG93IGNv bnRyb2wgbWVjaGFuaXNtIHRvIGF2b2lkIGJ1ZmZlciBvdmVyZmxvd3MKKworVGhpcyBwcm90b2Nv bCByZXNlbWJsZXMgYnVzIG1lc3NhZ2VzIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nIGRvY3Vt ZW50OgoraHR0cDovL3d3dy5pbnRlbC5jb20vY29udGVudC9kYW0vd3d3L3B1YmxpYy91cy9lbi9k b2N1bWVudHMvdGVjaG5pY2FsLVwKK3NwZWNpZmljYXRpb25zL2RjbWktaGktMS0wLXNwZWMucGRm ICJDaGFwdGVyIDc6IEJ1cyBNZXNzYWdlIExheWVyIgorCiszLjMuMiBDb25uZWN0aW9uIGFuZCBG bG93IENvbnRyb2wgTWVjaGFuaXNtCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5e Xl5eXl5eXl5eCisKK0VhY2ggRlcgY2xpZW50IGFuZCBhIHByb3RvY29sIGlzIGlkZW50aWZpZWQg YnkgYW4gVVVJRC4gSW4gb3JkZXIgdG8gY29tbXVuaWNhdGUKK3RvIGEgRlcgY2xpZW50LCBhIGNv bm5lY3Rpb24gbXVzdCBiZSBlc3RhYmxpc2hlZCB1c2luZyBjb25uZWN0IHJlcXVlc3QgYW5kCity ZXNwb25zZSBidXMgbWVzc2FnZXMuIElmIHN1Y2Nlc3NmdWwsIGEgcGFpciAoaG9zdF9jbGllbnRf aWQgYW5kIGZ3X2NsaWVudF9pZCkKK3dpbGwgaWRlbnRpZnkgdGhlIGNvbm5lY3Rpb24uCisKK09u Y2UgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgcGVlcnMgc2VuZCBlYWNoIG90aGVyIGZsb3cg Y29udHJvbCBidXMgbWVzc2FnZXMKK2luZGVwZW5kZW50bHkuIEV2ZXJ5IHBlZXIgbWF5IHNlbmQg YSBtZXNzYWdlIG9ubHkgaWYgaXQgaGFzIHJlY2VpdmVkIGEKK2Zsb3ctY29udHJvbCBjcmVkaXQg YmVmb3JlLiBPbmNlIGl0IHNlbnQgYSBtZXNzYWdlLCBpdCBtYXkgbm90IHNlbmQgYW5vdGhlciBv bmUKK2JlZm9yZSByZWNlaXZpbmcgdGhlIG5leHQgZmxvdyBjb250cm9sIGNyZWRpdC4KK0VpdGhl ciBzaWRlIGNhbiBzZW5kIGRpc2Nvbm5lY3QgcmVxdWVzdCBidXMgbWVzc2FnZSB0byBlbmQgY29t bXVuaWNhdGlvbi4gQWxzbwordGhlIGxpbmsgd2lsbCBiZSBkcm9wcGVkIGlmIG1ham9yIEZXIHJl c2V0IG9jY3Vycy4KKworMy4zLjMgUGVlciB0byBQZWVyIGRhdGEgdHJhbnNmZXIKK15eXl5eXl5e Xl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1BlZXIgdG8gUGVlciBkYXRhIHRyYW5zZmVyIGNh biBoYXBwZW4gd2l0aCBvciB3aXRob3V0IHVzaW5nIERNQS4gRGVwZW5kaW5nIG9uCit0aGUgc2Vu c29yIGJhbmR3aWR0aCByZXF1aXJlbWVudCBETUEgY2FuIGJlIGVuYWJsZWQgYnkgdXNpbmcgbW9k dWxlIHBhcmFtZXRlcgoraXNodHBfdXNlX2RtYSB1bmRlciBpbnRlbF9pc2h0cC4KKworRWFjaCBz aWRlIChob3N0IGFuZCBGVykgbWFuYWdlcyBpdHMgRE1BIHRyYW5zZmVyIG1lbW9yeSBpbmRlcGVu ZGVudGx5LiBXaGVuIGFuCitJU0hUUCBjbGllbnQgZnJvbSBlaXRoZXIgaG9zdCBvciBGVyBzaWRl IHdhbnRzIHRvIHNlbmQgc29tZXRoaW5nLCBpdCBkZWNpZGVzCit3aGV0aGVyIHRvIHNlbmQgb3Zl ciBJUEMgb3Igb3ZlciBETUE7IGZvciBlYWNoIHRyYW5zZmVyIHRoZSBkZWNpc2lvbiBpcworaW5k ZXBlbmRlbnQuIFRoZSBzZW5kaW5nIHNpZGUgc2VuZHMgRE1BX1hGRVIgbWVzc2FnZSB3aGVuIHRo ZSBtZXNzYWdlIGlzIGluCit0aGUgcmVzcGVjdGl2ZSBob3N0IGJ1ZmZlciAoVFggd2hlbiBob3N0 IGNsaWVudCBzZW5kcywgUlggd2hlbiBGVyBjbGllbnQKK3NlbmRzKS4gVGhlIHJlY2lwaWVudCBv ZiBETUEgbWVzc2FnZSByZXNwb25kcyB3aXRoIERNQV9YRkVSX0FDSywgaW5kaWNhdGluZwordGhl IHNlbmRlciB0aGF0IHRoZSBtZW1vcnkgcmVnaW9uIGZvciB0aGF0IG1lc3NhZ2UgbWF5IGJlIHJl dXNlZC4KKworRE1BIGluaXRpYWxpemF0aW9uIGlzIHN0YXJ0ZWQgd2l0aCBob3N0IHNlbmRpbmcg RE1BX0FMTE9DX05PVElGWSBidXMgbWVzc2FnZQorKHRoYXQgaW5jbHVkZXMgUlggYnVmZmVyKSBh bmQgRlcgcmVzcG9uZHMgd2l0aCBETUFfQUxMT0NfTk9USUZZX0FDSy4KK0FkZGl0aW9uYWxseSB0 byBETUEgYWRkcmVzcyBjb21tdW5pY2F0aW9uLCB0aGlzIHNlcXVlbmNlIGNoZWNrcyBjYXBhYmls aXRpZXM6CitpZiB0aHcgaG9zdCBkb2Vzbid0IHN1cHBvcnQgRE1BLCB0aGVuIGl0IHdvbid0IHNl bmQgRE1BIGFsbG9jYXRpb24sIHNvIEZXIGNhbid0CitzZW5kIERNQTsgaWYgRlcgZG9lc24ndCBz dXBwb3J0IERNQSB0aGVuIGl0IHdvbid0IHJlc3BvbmQgd2l0aAorRE1BX0FMTE9DX05PVElGWV9B Q0ssIGluIHdoaWNoIGNhc2UgaG9zdCB3aWxsIG5vdCB1c2UgRE1BIHRyYW5zZmVycy4KK0hlcmUg SVNIIGFjdHMgYXMgYnVzbWFzdGVyIERNQSBjb250cm9sbGVyLiBIZW5jZSB3aGVuIGhvc3Qgc2Vu ZHMgRE1BX1hGRVIsCitpdCdzIHJlcXVlc3QgdG8gZG8gaG9zdC0+SVNIIERNQSB0cmFuc2Zlcjsg d2hlbiBGVyBzZW5kcyBETUFfWEZFUiwgaXQgbWVhbnMKK3RoYXQgaXQgYWxyZWFkeSBkaWQgRE1B IGFuZCB0aGUgbWVzc2FnZSByZXNpZGVzIGF0IGhvc3QuIFRodXMsIERNQV9YRkVSCithbmQgRE1B X1hGRVJfQUNLIGFjdCBhcyBvd25lcnNoaXAgaW5kaWNhdG9ycy4KKworQXQgaW5pdGlhbCBzdGF0 ZSBhbGwgb3V0Z29pbmcgbWVtb3J5IGJlbG9uZ3MgdG8gdGhlIHNlbmRlciAoVFggdG8gaG9zdCwg UlggdG8KK0ZXKSwgRE1BX1hGRVIgdHJhbnNmZXJzIG93bmVyc2hpcCBvbiB0aGUgcmVnaW9uIHRo YXQgY29udGFpbnMgSVNIVFAgbWVzc2FnZSB0bwordGhlIHJlY2VpdmluZyBzaWRlLCBETUFfWEZF Ul9BQ0sgcmV0dXJucyBvd25lcnNoaXAgdG8gdGhlIHNlbmRlci4gQSBzZW5kZXIKK25lZWRzIG5v dCB3YWl0IGZvciBwcmV2aW91cyBETUFfWEZFUiB0byBiZSBhY2snZWQsIGFuZCBtYXkgc2VuZCBh bm90aGVyIG1lc3NhZ2UKK2FzIGxvbmcgYXMgcmVtYWluaW5nIGNvbnRpbnVvdXMgbWVtb3J5IGlu IGl0cyBvd25lcnNoaXAgaXMgZW5vdWdoLgorSW4gcHJpbmNpcGxlLCBtdWx0aXBsZSBETUFfWEZF UiBhbmQgRE1BX1hGRVJfQUNLIG1lc3NhZ2VzIG1heSBiZSBzZW50IGF0IG9uY2UKKyh1cCB0byBJ UEMgTVRVKSwgdGh1cyBhbGxvd2luZyBmb3IgaW50ZXJydXB0IHRocm90dGxpbmcuCitDdXJyZW50 bHksIElTSCBGVyBkZWNpZGVzIHRvIHNlbmQgb3ZlciBETUEgaWYgSVNIVFAgbWVzc2FnZSBpcyBt b3JlIHRoYW4gMyBJUEMKK2ZyYWdtZW50cyBhbmQgdmlhIElQQyBvdGhlcndpc2UuCisKKzMuMy40 IFJpbmcgQnVmZmVycworXl5eXl5eXl5eXl5eXl5eXl5eCisKK1doZW4gYSBjbGllbnQgaW5pdGlh dGUgYSBjb25uZWN0aW9uLCBhIHJpbmcgb3IgUlggYW5kIFRYIGJ1ZmZlcnMgYXJlIGFsbG9jYXRl ZC4KK1RoZSBzaXplIG9mIHJpbmcgY2FuIGJlIHNwZWNpZmllZCBieSB0aGUgY2xpZW50LiBISUQg Y2xpZW50IHNldCAxNiBhbmQgMzIgZm9yCitUWCBhbmQgUlggYnVmZmVycyByZXNwZWN0aXZlbHku IE9uIHNlbmQgcmVxdWVzdCBmcm9tIGNsaWVudCwgdGhlIGRhdGEgdG8gYmUKK3NlbnQgaXMgY29w aWVkIHRvIG9uZSBvZiB0aGUgc2VuZCByaW5nIGJ1ZmZlciBhbmQgc2NoZWR1bGVkIHRvIGJlIHNl bnQgdXNpbmcKK2J1cyBtZXNzYWdlIHByb3RvY29sLiBUaGVzZSBidWZmZXJzIGFyZSByZXF1aXJl ZCBiZWNhdXNlIHRoZSBGVyBtYXkgaGF2ZSBub3QKK2hhdmUgcHJvY2Vzc2VkIHRoZSBsYXN0IG1l c3NhZ2UgYW5kIG1heSBub3QgaGF2ZSBlbm91Z2ggZmxvdyBjb250cm9sIGNyZWRpdHMKK3RvIHNl bmQuIFNhbWUgdGhpbmcgaG9sZHMgdHJ1ZSBvbiByZWNlaXZlIHNpZGUgYW5kIGZsb3cgY29udHJv bCBpcyByZXF1aXJlZC4KKworMy4zLjUgSG9zdCBFbnVtZXJhdGlvbgorXl5eXl5eXl5eXl5eXl5e Xl5eXl5eXgorCitUaGUgaG9zdCBlbnVtZXJhdGlvbiBidXMgY29tbWFuZCBhbGxvdyBkaXNjb3Zl cnkgb2YgY2xpZW50cyBwcmVzZW50IGluIHRoZSBGVy4KK1RoZXJlIGNhbiBiZSBtdWx0aXBsZSBz ZW5zb3IgY2xpZW50cyBhbmQgY2xpZW50cyBmb3IgY2FsaWJyYXRpb24gZnVuY3Rpb24uCisKK1Rv IGVhc2UgaW4gaW1wbGFudGF0aW9uIGFuZCBhbGxvdyBpbmRlcGVuZGVudCBkcml2ZXIgaGFuZGxl IGVhY2ggY2xpZW50Cit0aGlzIHRyYW5zcG9ydCBsYXllciB0YWtlcyBhZHZhbnRhZ2Ugb2YgTGlu dXggQnVzIGRyaXZlciBtb2RlbC4gRWFjaAorY2xpZW50IGlzIHJlZ2lzdGVyZWQgYXMgZGV2aWNl IG9uIHRoZSB0aGUgdHJhbnNwb3J0IGJ1cyAoaXNodHAgYnVzKS4KKworRW51bWVyYXRpb24gc2Vx dWVuY2Ugb2YgbWVzc2FnZXM6CisKKy0gSG9zdCBzZW5kcyBIT1NUX1NUQVJUX1JFUV9DTUQsIGlu ZGljYXRpbmcgdGhhdCBob3N0IElTSFRQIGxheWVyIGlzIHVwLgorLSBGVyByZXNwb25kcyB3aXRo IEhPU1RfU1RBUlRfUkVTX0NNRAorLSBIb3N0IHNlbmRzIEhPU1RfRU5VTV9SRVFfQ01EIChlbnVt ZXJhdGUgRlcgY2xpZW50cykKKy0gRlcgcmVzcG9uZHMgd2l0aCBIT1NUX0VOVU1fUkVTX0NNRCB0 aGF0IGluY2x1ZGVzIGJpdG1hcCBvZiBhdmFpbGFibGUgRlcKKyAgY2xpZW50IElEcworLSBGb3Ig ZWFjaCBGVyBJRCBmb3VuZCBpbiB0aGF0IGJpdG1hcCBob3N0IHNlbmRzCisgIEhPU1RfQ0xJRU5U X1BST1BFUlRJRVNfUkVRX0NNRAorLSBGVyByZXNwb25kcyB3aXRoIEhPU1RfQ0xJRU5UX1BST1BF UlRJRVNfUkVTX0NNRC4gUHJvcGVydGllcyBpbmNsdWRlIFVVSUQsCisgIG1heCBJU0hUUCBtZXNz YWdlIHNpemUsIGV0Yy4KKy0gT25jZSBob3N0IHJlY2VpdmVkIHByb3BlcnRpZXMgZm9yIHRoYXQg bGFzdCBkaXNjb3ZlcmVkIGNsaWVudCwgaXQgY29uc2lkZXJzCisgIElTSFRQIGRldmljZSBmdWxs eSBmdW5jdGlvbmFsIChhbmQgYWxsb2NhdGVzIERNQSBidWZmZXJzKQorCiszLjQgSElEIG92ZXIg SVNIIENsaWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTG9jYXRpb246IGRyaXZlcnMv aGlkL2ludGVsLWlzaC1oaWQKKworVGhlIElTSFRQIGNsaWVudCBkcml2ZXIgaXMgcmVzcG9uc2li bGUgZm9yOgorCistIGVudW1lcmF0ZSBISUQgZGV2aWNlcyB1bmRlciBGVyBJU0ggY2xpZW50Cist IEdldCBSZXBvcnQgZGVzY3JpcHRvcgorLSBSZWdpc3RlciB3aXRoIEhJRCBjb3JlIGFzIGEgTEwg ZHJpdmVyCistIFByb2Nlc3MgR2V0L1NldCBmZWF0dXJlIHJlcXVlc3QKKy0gR2V0IGlucHV0IHJl cG9ydHMKKworMy41IEhJRCBTZW5zb3IgSHViIE1GRCBhbmQgSUlPIHNlbnNvciBkcml2ZXJzCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZ1bmN0 aW9uYWxpdHkgaW4gdGhlc2UgZHJpdmVycyBpcyB0aGUgc2FtZSBhcyBhbiBleHRlcm5hbCBzZW5z b3IgaHViLgorUmVmZXIgdG8KK0RvY3VtZW50YXRpb24vaGlkL2hpZC1zZW5zb3IucnN0IGZvciBI SUQgc2Vuc29yCitEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1paW8gZm9yIElJ TyBBQklzIHRvIHVzZXIgc3BhY2UKKworMy42IEVuZCB0byBFbmQgSElEIHRyYW5zcG9ydCBTZXF1 ZW5jZSBEaWFncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKworOjoKKworICBISUQtSVNILUNMTiAgICAgICAgICAgICAgICAgICAgSVNIVFAgICAgICAg ICAgICAgICAgICAgIElQQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFcKKyAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLVdBS0UgVVAtLS0tLS0tLS0tLS0t LS0tLS0+fAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfC0tLS0tSE9T VCBSRUFEWS0tLS0tLS0tLS0tLS0tLT58CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICAgICB8PC0tLS1NTkdfUkVTRVRfTk9USUZZX0FDSy0tLS0tIHwKKyAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg IHw8LS0tLUlTSFRQX1NUQVJULS0tLS0tIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLUhPU1RfU1RBUlRfUkVTX0NNRC0t LS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tUVVF UllfU1VCU0NSSUJFUi0tLS0tLS0tLS0tLS0tLS0tLS0tPnwKKyAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0t LS0tLS0tLS0tLS0tLS1IT1NUX0VOVU1fUkVRX0NNRC0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICAgfDwtLS0tLS0tLS0tLS0tLS0tLUhPU1RfRU5VTV9SRVNfQ01ELS0tLS0tLS0t LS0tLS0tLS0tLS18CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tSE9TVF9DTElF TlRfUFJPUEVSVElFU19SRVFfQ01ELS0tLS0tPnwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHw8LS0tLS0tLS0t LS0tLS0tLS1IT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFU19DTUQtLS0tLS0tfAorICAgICAgICAg IHwgICAgICAgQ3JlYXRlIG5ldyBkZXZpY2Ugb24gaW4gaXNodHAgYnVzICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS0tLS0t LS0tLS1IT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFUV9DTUQtLS0tLS0+fAorICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgfDwtLS0tLS0tLS0tLS0tLS0tLUhPU1RfQ0xJRU5UX1BST1BFUlRJRVNfUkVTX0NNRC0tLS0t LS18CisgICAgICAgICAgfCAgICAgICBDcmVhdGUgbmV3IGRldmljZSBvbiBpbiBpc2h0cCBidXMg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg fC0tUmVwZWF0IEhPU1RfQ0xJRU5UX1BST1BFUlRJRVNfUkVRX0NNRC10aWxsIGxhc3Qgb25lLS18 CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgIHByb2JlZCgpCisg ICAgICAgICAgfC0tLS1pc2h0cF9jbF9jb25uZWN0LS0tPnwtLS0tLS0tLS0tLS0tLS0tLSBDTElF TlRfQ09OTkVDVF9SRVFfQ01ELS0tLS0tLS0tLS0tLS0+fAorICAgICAgICAgIHwgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfDwtLS0t LS0tLS0tLS0tLS0tQ0xJRU5UX0NPTk5FQ1RfUkVTX0NNRC0tLS0tLS0tLS0tLS0tLS18CisgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgIHxyZWdpc3RlciBldmVu dCBjYWxsYmFjayB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAg ICAgfGlzaHRwX2NsX3NlbmQoCisgICAgICAgICAgSE9TVElGX0RNX0VOVU1fREVWSUNFUykgIHwt LS0tLS0tLS0tZmlsbCBpc2h0cF9tc2dfaGRyIHN0cnVjdCB3cml0ZSB0byBIVy0tLS0tICA+fAor ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfDwtLS0tLUlSUShJUENfUFJP VE9DT0xfSVNIVFAtLS18CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg ICAgICAgIHw8LS1FTlVNX0RFVklDRSBSU1AtLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8CisgIGZvciBlYWNoIGVudW1lcmF0ZWQgZGV2aWNlCisgICAgICAgICAgfGlz aHRwX2NsX3NlbmQoCisgICAgICAgICAgSE9TVElGX0dFVF9ISURfREVTQ1JJUFRPUnwtLS0tLS0t LS0tZmlsbCBpc2h0cF9tc2dfaGRyIHN0cnVjdCB3cml0ZSB0byBIVy0tLS0tICA+fAorICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAuLi5SZXNwb25zZQorICAg ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgZm9yIGVhY2ggZW51bWVyYXRlZCBk ZXZpY2UKKyAgICAgICAgICB8aXNodHBfY2xfc2VuZCgKKyAgICAgICBIT1NUSUZfR0VUX1JFUE9S VF9ERVNDUklQVE9SfC0tLS0tLS0tLS0tLS0tZmlsbCBpc2h0cF9tc2dfaGRyIHN0cnVjdCB3cml0 ZSB0byBIVy0tID58CisgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIGhpZF9hbGxvY2F0ZV9kZXZpY2UKKyAg ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICBoaWRfYWRkX2RldmljZSAgICAg ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAorICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKworCisz LjcgSVNIIERlYnVnZ2luZworLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gZGVidWcgSVNILCBldmVu dCB0cmFjaW5nIG1lY2hhbmlzbSBpcyB1c2VkLiBUbyBlbmFibGUgZGVidWcgbG9ncworZWNobyAx ID4gL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvaW50ZWxfaXNoL2VuYWJsZQorY2F0 IHN5cy9rZXJuZWwvZGVidWcvdHJhY2luZy90cmFjZQorCiszLjggSVNIIElJTyBzeXNmcyBFeGFt cGxlIG9uIExlbm92byB0aGlua3BhZCBZb2dhIDI2MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOjoKKworICByb290QG90Y3BsLVRoaW5r UGFkLVlvZ2EtMjYwOn4jIHRyZWUgLWwgL3N5cy9idXMvaWlvL2RldmljZXMvCisgIC9zeXMvYnVz L2lpby9kZXZpY2VzLworICDilJzilIDilIAgaWlvOmRldmljZTAgLT4gLi4vLi4vLi4vZGV2aWNl cy8wMDQ0OjgwODY6MjJEOC4wMDAxL0hJRC1TRU5TT1ItMjAwMDczLjkuYXV0by9paW86ZGV2aWNl MAorICDilILCoMKgIOKUnOKUgOKUgCBidWZmZXIKKyAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBlbmFibGUKKyAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBsZW5ndGgKKyAg4pSCwqDCoCDi lILCoMKgIOKUlOKUgOKUgCB3YXRlcm1hcmsKKyAgLi4uCisgIOKUgsKgwqAg4pSc4pSA4pSAIGlu X2FjY2VsX2h5c3RlcmVzaXMKKyAg4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxfb2Zmc2V0Cisg IOKUgsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX3NhbXBsaW5nX2ZyZXF1ZW5jeQorICDilILCoMKg IOKUnOKUgOKUgCBpbl9hY2NlbF9zY2FsZQorICDilILCoMKgIOKUnOKUgOKUgCBpbl9hY2NlbF94 X3JhdworICDilILCoMKgIOKUnOKUgOKUgCBpbl9hY2NlbF95X3JhdworICDilILCoMKgIOKUnOKU gOKUgCBpbl9hY2NlbF96X3JhdworICDilILCoMKgIOKUnOKUgOKUgCBuYW1lCisgIOKUgsKgwqAg 4pSc4pSA4pSAIHNjYW5fZWxlbWVudHMKKyAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9h Y2NlbF94X2VuCisgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxfeF9pbmRleAor ICDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX3hfdHlwZQorICDilILCoMKgIOKU gsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX3lfZW4KKyAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBpbl9hY2NlbF95X2luZGV4CisgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxf eV90eXBlCisgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxfel9lbgorICDilILC oMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX3pfaW5kZXgKKyAg4pSCwqDCoCDilILCoMKg IOKUlOKUgOKUgCBpbl9hY2NlbF96X3R5cGUKKyAgLi4uCisgIOKUgsKgwqAg4pSCwqDCoCDilJzi lIDilIAgZGV2aWNlcworICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBidWZmZXIKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKU gOKUgCBlbmFibGUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBsZW5ndGgKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUlOKUgOKUgCB3YXRlcm1hcmsKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lJzilIDilIAgZGV2CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IGluX2ludGVuc2l0eV9ib3RoX3JhdworICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUnOKUgOKUgCBpbl9pbnRlbnNpdHlfaHlzdGVyZXNpcworICDilILCoMKgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9pbnRlbnNpdHlfb2Zmc2V0CisgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2ludGVuc2l0eV9zYW1wbGluZ19mcmVx dWVuY3kKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5faW50 ZW5zaXR5X3NjYWxlCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IG5hbWUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgc2Nhbl9l bGVtZW50cworICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA 4pSAIGluX2ludGVuc2l0eV9ib3RoX2VuCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilJzilIDilIAgaW5faW50ZW5zaXR5X2JvdGhfaW5kZXgKKyAg4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBpbl9pbnRlbnNpdHlfYm90 aF90eXBlCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIHRyaWdn ZXIKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBj dXJyZW50X3RyaWdnZXIKKyAgLi4uCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSc4pSA4pSAIGJ1ZmZlcgorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGVuYWJsZQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSc4pSA4pSAIGxlbmd0aAorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSU4pSA4pSAIHdhdGVybWFyaworICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUnOKUgOKUgCBkZXYKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lJzilIDilIAgaW5fbWFnbl9oeXN0ZXJlc2lzCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSc4pSA4pSAIGluX21hZ25fb2Zmc2V0CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25fc2FtcGxpbmdfZnJlcXVlbmN5CisgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25fc2NhbGUKKyAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fbWFnbl94X3JhdworICDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9tYWduX3lfcmF3CisgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25fel9yYXcKKyAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fcm90X2Zyb21fbm9y dGhfbWFnbmV0aWNfdGlsdF9jb21wX3JhdworICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUnOKUgOKUgCBpbl9yb3RfaHlzdGVyZXNpcworICDilILCoMKgIOKUgsKgwqAg4pSCwqDC oCDilILCoMKgIOKUnOKUgOKUgCBpbl9yb3Rfb2Zmc2V0CisgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX3JvdF9zYW1wbGluZ19mcmVxdWVuY3kKKyAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fcm90X3NjYWxlCisgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIG5hbWUKKyAgLi4uCisgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIHNjYW5fZWxlbWVudHMKKyAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9tYWduX3hf ZW4KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBp bl9tYWduX3hfaW5kZXgKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUnOKUgOKUgCBpbl9tYWduX3hfdHlwZQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25feV9lbgorICDilILCoMKgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25feV9pbmRleAorICDilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25feV90eXBl CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5f bWFnbl96X2VuCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzi lIDilIAgaW5fbWFnbl96X2luZGV4CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilJzilIDilIAgaW5fbWFnbl96X3R5cGUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9yb3RfZnJvbV9ub3J0aF9tYWduZXRpY190 aWx0X2NvbXBfZW4KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9yb3RfZnJvbV9ub3J0aF9tYWduZXRpY190aWx0X2NvbXBfaW5kZXgKKyAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBpbl9yb3RfZnJv bV9ub3J0aF9tYWduZXRpY190aWx0X2NvbXBfdHlwZQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDC oCDilILCoMKgIOKUnOKUgOKUgCB0cmlnZ2VyCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilJTilIDilIAgY3VycmVudF90cmlnZ2VyCisgIC4uLgorICDilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBidWZmZXIKKyAg4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBlbmFibGUKKyAg4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBsZW5ndGgKKyAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCB3YXRlcm1hcmsKKyAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgZGV2CisgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfaHlzdGVyZXNpcwor ICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX29m ZnNldAorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmds dmVsX3NhbXBsaW5nX2ZyZXF1ZW5jeQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUnOKUgOKUgCBpbl9hbmdsdmVsX3NjYWxlCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeF9yYXcKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95X3JhdworICDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfcmF3CisgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIG5hbWUKKyAg4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilJzilIDilIAgc2Nhbl9lbGVtZW50cworICDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeF9lbgorICDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxf eF9pbmRleAorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA 4pSAIGluX2FuZ2x2ZWxfeF90eXBlCisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95X2VuCisgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95X2luZGV4CisgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95 X3R5cGUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBpbl9hbmdsdmVsX3pfZW4KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfaW5kZXgKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBpbl9hbmdsdmVsX3pfdHlwZQorICDilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCB0cmlnZ2VyCisgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgY3VycmVudF90cmlnZ2VyCisg IC4uLgorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBidWZmZXIK KyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBlbmFi bGUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBs ZW5ndGgKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKU gCB3YXRlcm1hcmsKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAg ZGV2CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2 ZWxfaHlzdGVyZXNpcworICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBpbl9hbmdsdmVsX29mZnNldAorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9hbmdsdmVsX3NhbXBsaW5nX2ZyZXF1ZW5jeQorICDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3NjYWxlCisgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeF9yYXcKKyAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95X3JhdworICDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfcmF3 CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIG5hbWUKKyAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgc2Nhbl9lbGVtZW50cworICDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2 ZWxfeF9lbgorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA 4pSAIGluX2FuZ2x2ZWxfeF9pbmRleAorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeF90eXBlCisgIOKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95X2VuCisgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95 X2luZGV4CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDi lIAgaW5fYW5nbHZlbF95X3R5cGUKKyAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfZW4KKyAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfaW5kZXgKKyAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBpbl9hbmdsdmVsX3pf dHlwZQorICDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCB0cmlnZ2Vy CisgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgY3Vy cmVudF90cmlnZ2VyCisgIC4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9oaWQvaW50ZWwt aXNoLWhpZC50eHQgYi9Eb2N1bWVudGF0aW9uL2hpZC9pbnRlbC1pc2gtaGlkLnR4dApkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ4YjIxYzcxZGRkLi4wMDAwMDAwMDAwMDAKLS0tIGEv RG9jdW1lbnRhdGlvbi9oaWQvaW50ZWwtaXNoLWhpZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0 NTQgKzAsMCBAQAotSW50ZWwgSW50ZWdyYXRlZCBTZW5zb3IgSHViIChJU0gpCi09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Ci0KLUEgc2Vuc29yIGh1YiBlbmFibGVzIHRoZSBhYmlsaXR5 IHRvIG9mZmxvYWQgc2Vuc29yIHBvbGxpbmcgYW5kIGFsZ29yaXRobQotcHJvY2Vzc2luZyB0byBh IGRlZGljYXRlZCBsb3cgcG93ZXIgY28tcHJvY2Vzc29yLiBUaGlzIGFsbG93cyB0aGUgY29yZQot cHJvY2Vzc29yIHRvIGdvIGludG8gbG93IHBvd2VyIG1vZGVzIG1vcmUgb2Z0ZW4sIHJlc3VsdGlu ZyBpbiB0aGUgaW5jcmVhc2VkCi1iYXR0ZXJ5IGxpZmUuCi0KLVRoZXJlIGFyZSBtYW55IHZlbmRv cnMgcHJvdmlkaW5nIGV4dGVybmFsIHNlbnNvciBodWJzIGNvbmZpcm1pbmcgdG8gSElECi1TZW5z b3IgdXNhZ2UgdGFibGVzLCBhbmQgdXNlZCBpbiBzZXZlcmFsIHRhYmxldHMsIDIgaW4gMSBjb252 ZXJ0aWJsZSBsYXB0b3BzCi1hbmQgZW1iZWRkZWQgcHJvZHVjdHMuIExpbnV4IGhhZCB0aGlzIHN1 cHBvcnQgc2luY2UgTGludXggMy45LgotCi1JbnRlbMKuIGludHJvZHVjZWQgaW50ZWdyYXRlZCBz ZW5zb3IgaHVicyBhcyBhIHBhcnQgb2YgdGhlIFNvQyBzdGFydGluZyBmcm9tCi1DaGVycnkgVHJh aWwgYW5kIG5vdyBzdXBwb3J0ZWQgb24gbXVsdGlwbGUgZ2VuZXJhdGlvbnMgb2YgQ1BVIHBhY2th Z2VzLiBUaGVyZQotYXJlIG1hbnkgY29tbWVyY2lhbCBkZXZpY2VzIGFscmVhZHkgc2hpcHBlZCB3 aXRoIEludGVncmF0ZWQgU2Vuc29yIEh1YnMgKElTSCkuCi1UaGVzZSBJU0ggYWxzbyBjb21wbHkg dG8gSElEIHNlbnNvciBzcGVjaWZpY2F0aW9uLCBidXQgdGhlICBkaWZmZXJlbmNlIGlzIHRoZQot dHJhbnNwb3J0IHByb3RvY29sIHVzZWQgZm9yIGNvbW11bmljYXRpb24uIFRoZSBjdXJyZW50IGV4 dGVybmFsIHNlbnNvciBodWJzCi1tYWlubHkgdXNlIEhJRCBvdmVyIGkyQyBvciBVU0IuIEJ1dCBJ U0ggZG9lc24ndCB1c2UgZWl0aGVyIGkyYyBvciBVU0IuCi0KLTEuIE92ZXJ2aWV3Ci0KLVVzaW5n IGEgYW5hbG9neSB3aXRoIGEgdXNiaGlkIGltcGxlbWVudGF0aW9uLCB0aGUgSVNIIGZvbGxvd3Mg YSBzaW1pbGFyIG1vZGVsCi1mb3IgYSB2ZXJ5IGhpZ2ggc3BlZWQgY29tbXVuaWNhdGlvbjoKLQot CS0tLS0tLS0tLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JfCAgICBVU0IgSElE CXwJLS0+CXwgICAgSVNIIEhJRAkgICAgIHwKLQktLS0tLS0tLS0tLS0tLS0tLQkJLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotCS0tLS0tLS0tLS0tLS0tLS0tCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0JfCAgVVNCIHByb3RvY29sCXwJLS0+CXwgICAgSVNIIFRyYW5zcG9ydCAgIHwKLQktLS0tLS0t LS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCS0tLS0tLS0tLS0tLS0tLS0tCQkt LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JfCAgRUhDSS9YSENJCXwJLS0+CXwgICAgSVNIIElQQwkg ICAgIHwKLQktLS0tLS0tLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAgICAg IFBDSQkJCQkgUENJCi0JLS0tLS0tLS0tLS0tLS0tLS0JCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSAgICAgICAgfEhvc3QgY29udHJvbGxlcnwJLS0+CXwgICAgSVNIIHByb2Nlc3NvciAgIHwKLQkt LS0tLS0tLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAgICAgVVNCIExpbmsK LQktLS0tLS0tLS0tLS0tLS0tLQkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXwgVVNCIEVuZCBw b2ludHN8CS0tPgl8ICAgIElTSCBDbGllbnRzICAgICB8Ci0JLS0tLS0tLS0tLS0tLS0tLS0JCS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGlrZSBVU0IgcHJvdG9jb2wgcHJvdmlkZXMgYSBtZXRo b2QgZm9yIGRldmljZSBlbnVtZXJhdGlvbiwgbGluayBtYW5hZ2VtZW50Ci1hbmQgdXNlciBkYXRh IGVuY2Fwc3VsYXRpb24sIHRoZSBJU0ggYWxzbyBwcm92aWRlcyBzaW1pbGFyIHNlcnZpY2VzLiBC dXQgaXQgaXMKLXZlcnkgbGlnaHQgd2VpZ2h0IHRhaWxvcmVkIHRvIG1hbmFnZSBhbmQgY29tbXVu aWNhdGUgd2l0aCBJU0ggY2xpZW50Ci1hcHBsaWNhdGlvbnMgaW1wbGVtZW50ZWQgaW4gdGhlIGZp cm13YXJlLgotCi1UaGUgSVNIIGFsbG93cyBtdWx0aXBsZSBzZW5zb3IgbWFuYWdlbWVudCBhcHBs aWNhdGlvbnMgZXhlY3V0aW5nIGluIHRoZQotZmlybXdhcmUuIExpa2UgVVNCIGVuZHBvaW50cyB0 aGUgbWVzc2FnaW5nIGNhbiBiZSB0by9mcm9tIGEgY2xpZW50LiBBcyBwYXJ0IG9mCi1lbnVtZXJh dGlvbiBwcm9jZXNzLCB0aGVzZSBjbGllbnRzIGFyZSBpZGVudGlmaWVkLiBUaGVzZSBjbGllbnRz IGNhbiBiZSBzaW1wbGUKLUhJRCBzZW5zb3IgYXBwbGljYXRpb25zLCBzZW5zb3IgY2FsaWJyYXRp b24gYXBwbGljYXRpb24gb3Igc2Vub3IgZmlybXdhcmUKLXVwZGF0ZSBhcHBsaWNhdGlvbi4KLQot VGhlIGltcGxlbWVudGF0aW9uIG1vZGVsIGlzIHNpbWlsYXIsIGxpa2UgVVNCIGJ1cywgSVNIIHRy YW5zcG9ydCBpcyBhbHNvCi1pbXBsZW1lbnRlZCBhcyBhIGJ1cy4gRWFjaCBjbGllbnQgYXBwbGlj YXRpb24gZXhlY3V0aW5nIGluIHRoZSBJU0ggcHJvY2Vzc29yCi1pcyByZWdpc3RlcmVkIGFzIGEg ZGV2aWNlIG9uIHRoaXMgYnVzLiBUaGUgZHJpdmVyLCB3aGljaCBiaW5kcyBlYWNoIGRldmljZQot KElTSCBISUQgZHJpdmVyKSBpZGVudGlmaWVzIHRoZSBkZXZpY2UgdHlwZSBhbmQgcmVnaXN0ZXJz IHdpdGggdGhlIGhpZCBjb3JlLgotCi0yLiBJU0ggSW1wbGVtZW50YXRpb246IEJsb2NrIERpYWdy YW0KLQotCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl8ICBVc2VyIFNwYWNlIEFwcGxp Y2F0aW9ucyAgfAotCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLS0tLS0tLS0tLS0t LS0tLUlJTyBBQkktLS0tLS0tLS0tLS0tLS0tCi0JIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0JfCAgSUlPIFNlbnNvciBEcml2ZXJzCSAgfAotCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXwJIElJTyBjb3JlCSAgfAotCSAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCXwg ICBISUQgU2Vuc29yIEh1YiBNRkQJICB8Ci0JIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0J IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JfCAgICAgICBISUQgQ29yZQkgIHwKLQkgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl8 ICAgSElEIG92ZXIgSVNIIENsaWVudCAgIHwKLQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl8ICAgSVNIIFRyYW5zcG9ydCAoSVNIVFAp IHwKLQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KLQl8ICAgICAgSVBDIERyaXZlcnMJICB8Ci0JIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi1PUwotLS0tLS0tLS0tLS0tLS0tLSAgIFBDSSAtLS0tLS0tLS0tLS0tLS0tLQotSGFyZHdh cmUgKyBGaXJtd2FyZQotCSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JfCBJU0ggSGFy ZHdhcmUvRmlybXdhcmUoRlcpIHwKLQkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0z LiBIaWdoIGxldmVsIHByb2Nlc3NpbmcgaW4gYWJvdmUgYmxvY2tzCi0KLTMuMSBIYXJkd2FyZSBJ bnRlcmZhY2UKLQotVGhlIElTSCBpcyBleHBvc2VkIGFzICJOb24tVkdBIHVuY2xhc3NpZmllZCBQ Q0kgZGV2aWNlIiB0byB0aGUgaG9zdC4gVGhlIFBDSQotcHJvZHVjdCBhbmQgdmVuZG9yIElEcyBh cmUgY2hhbmdlZCBmcm9tIGRpZmZlcmVudCBnZW5lcmF0aW9ucyBvZiBwcm9jZXNzb3JzLiBTbwot dGhlIHNvdXJjZSBjb2RlIHdoaWNoIGVudW1lcmF0ZSBkcml2ZXJzIG5lZWRzIHRvIHVwZGF0ZSBm cm9tIGdlbmVyYXRpb24gdG8KLWdlbmVyYXRpb24uCi0KLTMuMiBJbnRlciBQcm9jZXNzb3IgQ29t bXVuaWNhdGlvbiAoSVBDKSBkcml2ZXIKLUxvY2F0aW9uOiBkcml2ZXJzL2hpZC9pbnRlbC1pc2gt aGlkL2lwYwotCi1UaGUgSVBDIG1lc3NhZ2UgdXNlZCBtZW1vcnkgbWFwcGVkIEkvTy4gVGhlIHJl Z2lzdGVycyBhcmUgZGVmaW5lZCBpbgotaHctaXNoLXJlZ3MuaC4KLQotMy4yLjEgSVBDL0ZXIG1l c3NhZ2UgdHlwZXMKLQotVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBtZXNzYWdlcywgb25lIGZvciBt YW5hZ2VtZW50IG9mIGxpbmsgYW5kIG90aGVyIG1lc3NhZ2VzCi1hcmUgdG8gYW5kIGZyb20gdHJh bnNwb3J0IGxheWVycy4KLQotVFggYW5kIFJYIG9mIFRyYW5zcG9ydCBtZXNzYWdlcwotCi1BIHNl dCBvZiBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIG9mZmVycyBzdXBwb3J0IG9mIG11bHRpIGJ5dGUg bWVzc2FnZXMgVFggYW5kCi1SWCAoRS5nLklQQ19SRUdfSVNIMkhPU1RfTVNHLCBJUENfUkVHX0hP U1QySVNIX01TRykuIFRoZSBJUEMgbGF5ZXIgbWFpbnRhaW5zCi1pbnRlcm5hbCBxdWV1ZXMgdG8g c2VxdWVuY2UgbWVzc2FnZXMgYW5kIHNlbmQgdGhlbSBpbiBvcmRlciB0byB0aGUgRlcuCi1PcHRp b25hbGx5IHRoZSBjYWxsZXIgY2FuIHJlZ2lzdGVyIGhhbmRsZXIgdG8gZ2V0IG5vdGlmaWNhdGlv biBvZiBjb21wbGV0aW9uLgotQSBkb29yIGJlbGwgbWVjaGFuaXNtIGlzIHVzZWQgaW4gbWVzc2Fn aW5nIHRvIHRyaWdnZXIgcHJvY2Vzc2luZyBpbiBob3N0IGFuZAotY2xpZW50IGZpcm13YXJlIHNp ZGUuIFdoZW4gSVNIIGludGVycnVwdCBoYW5kbGVyIGlzIGNhbGxlZCwgdGhlIElTSDJIT1NUCi1k b29yYmVsbCByZWdpc3RlciBpcyB1c2VkIGJ5IGhvc3QgZHJpdmVycyB0byBkZXRlcm1pbmUgdGhh dCB0aGUgaW50ZXJydXB0Ci1pcyBmb3IgSVNILgotCi1FYWNoIHNpZGUgaGFzIDMyIDMyLWJpdCBt ZXNzYWdlIHJlZ2lzdGVycyBhbmQgYSAzMi1iaXQgZG9vcmJlbGwuIERvb3JiZWxsCi1yZWdpc3Rl ciBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6Ci1CaXRzIDAuLjY6IGZyYWdtZW50IGxlbmd0aCAo NyBiaXRzIGFyZSB1c2VkKQotQml0cyAxMC4uMTM6IGVuY2Fwc3VsYXRlZCBwcm90b2NvbAotQml0 cyAxNi4uMTk6IG1hbmFnZW1lbnQgY29tbWFuZCAoZm9yIElQQyBtYW5hZ2VtZW50IHByb3RvY29s KQotQml0IDMxOiBkb29yYmVsbCB0cmlnZ2VyIChzaWduYWwgSC9XIGludGVycnVwdCB0byB0aGUg b3RoZXIgc2lkZSkKLU90aGVyIGJpdHMgYXJlIHJlc2VydmVkLCBzaG91bGQgYmUgMC4KLQotMy4y LjIgVHJhbnNwb3J0IGxheWVyIGludGVyZmFjZQotCi1UbyBhYnN0cmFjdCBIVyBsZXZlbCBJUEMg Y29tbXVuaWNhdGlvbiwgYSBzZXQgb2YgY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkLgotVGhlIHRy YW5zcG9ydCBsYXllciB1c2VzIHRoZW0gdG8gc2VuZCBhbmQgcmVjZWl2ZSBtZXNzYWdlcy4KLVJl ZmVyIHRvICBzdHJ1Y3QgaXNodHBfaHdfb3BzIGZvciBjYWxsYmFja3MuCi0KLTMuMyBJU0ggVHJh bnNwb3J0IGxheWVyCi1Mb2NhdGlvbjogZHJpdmVycy9oaWQvaW50ZWwtaXNoLWhpZC9pc2h0cC8K LQotMy4zLjEgQSBHZW5lcmljIFRyYW5zcG9ydCBMYXllcgotCi1UaGUgdHJhbnNwb3J0IGxheWVy IGlzIGEgYmktZGlyZWN0aW9uYWwgcHJvdG9jb2wsIHdoaWNoIGRlZmluZXM6Ci0tIFNldCBvZiBj b21tYW5kcyB0byBzdGFydCwgc3RvcCwgY29ubmVjdCwgZGlzY29ubmVjdCBhbmQgZmxvdyBjb250 cm9sCi0oaXNodHAvaGJtLmgpIGZvciBkZXRhaWxzCi0tIEEgZmxvdyBjb250cm9sIG1lY2hhbmlz bSB0byBhdm9pZCBidWZmZXIgb3ZlcmZsb3dzCi0KLVRoaXMgcHJvdG9jb2wgcmVzZW1ibGVzIGJ1 cyBtZXNzYWdlcyBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBkb2N1bWVudDoKLWh0dHA6Ly93 d3cuaW50ZWwuY29tL2NvbnRlbnQvZGFtL3d3dy9wdWJsaWMvdXMvZW4vZG9jdW1lbnRzL3RlY2hu aWNhbC1cCi1zcGVjaWZpY2F0aW9ucy9kY21pLWhpLTEtMC1zcGVjLnBkZiAiQ2hhcHRlciA3OiBC dXMgTWVzc2FnZSBMYXllciIKLQotMy4zLjIgQ29ubmVjdGlvbiBhbmQgRmxvdyBDb250cm9sIE1l Y2hhbmlzbQotCi1FYWNoIEZXIGNsaWVudCBhbmQgYSBwcm90b2NvbCBpcyBpZGVudGlmaWVkIGJ5 IGFuIFVVSUQuIEluIG9yZGVyIHRvIGNvbW11bmljYXRlCi10byBhIEZXIGNsaWVudCwgYSBjb25u ZWN0aW9uIG11c3QgYmUgZXN0YWJsaXNoZWQgdXNpbmcgY29ubmVjdCByZXF1ZXN0IGFuZAotcmVz cG9uc2UgYnVzIG1lc3NhZ2VzLiBJZiBzdWNjZXNzZnVsLCBhIHBhaXIgKGhvc3RfY2xpZW50X2lk IGFuZCBmd19jbGllbnRfaWQpCi13aWxsIGlkZW50aWZ5IHRoZSBjb25uZWN0aW9uLgotCi1PbmNl IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIHBlZXJzIHNlbmQgZWFjaCBvdGhlciBmbG93IGNv bnRyb2wgYnVzIG1lc3NhZ2VzCi1pbmRlcGVuZGVudGx5LiBFdmVyeSBwZWVyIG1heSBzZW5kIGEg bWVzc2FnZSBvbmx5IGlmIGl0IGhhcyByZWNlaXZlZCBhCi1mbG93LWNvbnRyb2wgY3JlZGl0IGJl Zm9yZS4gT25jZSBpdCBzZW50IGEgbWVzc2FnZSwgaXQgbWF5IG5vdCBzZW5kIGFub3RoZXIgb25l Ci1iZWZvcmUgcmVjZWl2aW5nIHRoZSBuZXh0IGZsb3cgY29udHJvbCBjcmVkaXQuCi1FaXRoZXIg c2lkZSBjYW4gc2VuZCBkaXNjb25uZWN0IHJlcXVlc3QgYnVzIG1lc3NhZ2UgdG8gZW5kIGNvbW11 bmljYXRpb24uIEFsc28KLXRoZSBsaW5rIHdpbGwgYmUgZHJvcHBlZCBpZiBtYWpvciBGVyByZXNl dCBvY2N1cnMuCi0KLTMuMy4zIFBlZXIgdG8gUGVlciBkYXRhIHRyYW5zZmVyCi0KLVBlZXIgdG8g UGVlciBkYXRhIHRyYW5zZmVyIGNhbiBoYXBwZW4gd2l0aCBvciB3aXRob3V0IHVzaW5nIERNQS4g RGVwZW5kaW5nIG9uCi10aGUgc2Vuc29yIGJhbmR3aWR0aCByZXF1aXJlbWVudCBETUEgY2FuIGJl IGVuYWJsZWQgYnkgdXNpbmcgbW9kdWxlIHBhcmFtZXRlcgotaXNodHBfdXNlX2RtYSB1bmRlciBp bnRlbF9pc2h0cC4KLQotRWFjaCBzaWRlIChob3N0IGFuZCBGVykgbWFuYWdlcyBpdHMgRE1BIHRy YW5zZmVyIG1lbW9yeSBpbmRlcGVuZGVudGx5LiBXaGVuIGFuCi1JU0hUUCBjbGllbnQgZnJvbSBl aXRoZXIgaG9zdCBvciBGVyBzaWRlIHdhbnRzIHRvIHNlbmQgc29tZXRoaW5nLCBpdCBkZWNpZGVz Ci13aGV0aGVyIHRvIHNlbmQgb3ZlciBJUEMgb3Igb3ZlciBETUE7IGZvciBlYWNoIHRyYW5zZmVy IHRoZSBkZWNpc2lvbiBpcwotaW5kZXBlbmRlbnQuIFRoZSBzZW5kaW5nIHNpZGUgc2VuZHMgRE1B X1hGRVIgbWVzc2FnZSB3aGVuIHRoZSBtZXNzYWdlIGlzIGluCi10aGUgcmVzcGVjdGl2ZSBob3N0 IGJ1ZmZlciAoVFggd2hlbiBob3N0IGNsaWVudCBzZW5kcywgUlggd2hlbiBGVyBjbGllbnQKLXNl bmRzKS4gVGhlIHJlY2lwaWVudCBvZiBETUEgbWVzc2FnZSByZXNwb25kcyB3aXRoIERNQV9YRkVS X0FDSywgaW5kaWNhdGluZwotdGhlIHNlbmRlciB0aGF0IHRoZSBtZW1vcnkgcmVnaW9uIGZvciB0 aGF0IG1lc3NhZ2UgbWF5IGJlIHJldXNlZC4KLQotRE1BIGluaXRpYWxpemF0aW9uIGlzIHN0YXJ0 ZWQgd2l0aCBob3N0IHNlbmRpbmcgRE1BX0FMTE9DX05PVElGWSBidXMgbWVzc2FnZQotKHRoYXQg aW5jbHVkZXMgUlggYnVmZmVyKSBhbmQgRlcgcmVzcG9uZHMgd2l0aCBETUFfQUxMT0NfTk9USUZZ X0FDSy4KLUFkZGl0aW9uYWxseSB0byBETUEgYWRkcmVzcyBjb21tdW5pY2F0aW9uLCB0aGlzIHNl cXVlbmNlIGNoZWNrcyBjYXBhYmlsaXRpZXM6Ci1pZiB0aHcgaG9zdCBkb2Vzbid0IHN1cHBvcnQg RE1BLCB0aGVuIGl0IHdvbid0IHNlbmQgRE1BIGFsbG9jYXRpb24sIHNvIEZXIGNhbid0Ci1zZW5k IERNQTsgaWYgRlcgZG9lc24ndCBzdXBwb3J0IERNQSB0aGVuIGl0IHdvbid0IHJlc3BvbmQgd2l0 aAotRE1BX0FMTE9DX05PVElGWV9BQ0ssIGluIHdoaWNoIGNhc2UgaG9zdCB3aWxsIG5vdCB1c2Ug RE1BIHRyYW5zZmVycy4KLUhlcmUgSVNIIGFjdHMgYXMgYnVzbWFzdGVyIERNQSBjb250cm9sbGVy LiBIZW5jZSB3aGVuIGhvc3Qgc2VuZHMgRE1BX1hGRVIsCi1pdCdzIHJlcXVlc3QgdG8gZG8gaG9z dC0+SVNIIERNQSB0cmFuc2Zlcjsgd2hlbiBGVyBzZW5kcyBETUFfWEZFUiwgaXQgbWVhbnMKLXRo YXQgaXQgYWxyZWFkeSBkaWQgRE1BIGFuZCB0aGUgbWVzc2FnZSByZXNpZGVzIGF0IGhvc3QuIFRo dXMsIERNQV9YRkVSCi1hbmQgRE1BX1hGRVJfQUNLIGFjdCBhcyBvd25lcnNoaXAgaW5kaWNhdG9y cy4KLQotQXQgaW5pdGlhbCBzdGF0ZSBhbGwgb3V0Z29pbmcgbWVtb3J5IGJlbG9uZ3MgdG8gdGhl IHNlbmRlciAoVFggdG8gaG9zdCwgUlggdG8KLUZXKSwgRE1BX1hGRVIgdHJhbnNmZXJzIG93bmVy c2hpcCBvbiB0aGUgcmVnaW9uIHRoYXQgY29udGFpbnMgSVNIVFAgbWVzc2FnZSB0bwotdGhlIHJl Y2VpdmluZyBzaWRlLCBETUFfWEZFUl9BQ0sgcmV0dXJucyBvd25lcnNoaXAgdG8gdGhlIHNlbmRl ci4gQSBzZW5kZXIKLW5lZWRzIG5vdCB3YWl0IGZvciBwcmV2aW91cyBETUFfWEZFUiB0byBiZSBh Y2snZWQsIGFuZCBtYXkgc2VuZCBhbm90aGVyIG1lc3NhZ2UKLWFzIGxvbmcgYXMgcmVtYWluaW5n IGNvbnRpbnVvdXMgbWVtb3J5IGluIGl0cyBvd25lcnNoaXAgaXMgZW5vdWdoLgotSW4gcHJpbmNp cGxlLCBtdWx0aXBsZSBETUFfWEZFUiBhbmQgRE1BX1hGRVJfQUNLIG1lc3NhZ2VzIG1heSBiZSBz ZW50IGF0IG9uY2UKLSh1cCB0byBJUEMgTVRVKSwgdGh1cyBhbGxvd2luZyBmb3IgaW50ZXJydXB0 IHRocm90dGxpbmcuCi1DdXJyZW50bHksIElTSCBGVyBkZWNpZGVzIHRvIHNlbmQgb3ZlciBETUEg aWYgSVNIVFAgbWVzc2FnZSBpcyBtb3JlIHRoYW4gMyBJUEMKLWZyYWdtZW50cyBhbmQgdmlhIElQ QyBvdGhlcndpc2UuCi0KLTMuMy40IFJpbmcgQnVmZmVycwotCi1XaGVuIGEgY2xpZW50IGluaXRp YXRlIGEgY29ubmVjdGlvbiwgYSByaW5nIG9yIFJYIGFuZCBUWCBidWZmZXJzIGFyZSBhbGxvY2F0 ZWQuCi1UaGUgc2l6ZSBvZiByaW5nIGNhbiBiZSBzcGVjaWZpZWQgYnkgdGhlIGNsaWVudC4gSElE IGNsaWVudCBzZXQgMTYgYW5kIDMyIGZvcgotVFggYW5kIFJYIGJ1ZmZlcnMgcmVzcGVjdGl2ZWx5 LiBPbiBzZW5kIHJlcXVlc3QgZnJvbSBjbGllbnQsIHRoZSBkYXRhIHRvIGJlCi1zZW50IGlzIGNv cGllZCB0byBvbmUgb2YgdGhlIHNlbmQgcmluZyBidWZmZXIgYW5kIHNjaGVkdWxlZCB0byBiZSBz ZW50IHVzaW5nCi1idXMgbWVzc2FnZSBwcm90b2NvbC4gVGhlc2UgYnVmZmVycyBhcmUgcmVxdWly ZWQgYmVjYXVzZSB0aGUgRlcgbWF5IGhhdmUgbm90Ci1oYXZlIHByb2Nlc3NlZCB0aGUgbGFzdCBt ZXNzYWdlIGFuZCBtYXkgbm90IGhhdmUgZW5vdWdoIGZsb3cgY29udHJvbCBjcmVkaXRzCi10byBz ZW5kLiBTYW1lIHRoaW5nIGhvbGRzIHRydWUgb24gcmVjZWl2ZSBzaWRlIGFuZCBmbG93IGNvbnRy b2wgaXMgcmVxdWlyZWQuCi0KLTMuMy41IEhvc3QgRW51bWVyYXRpb24KLQotVGhlIGhvc3QgZW51 bWVyYXRpb24gYnVzIGNvbW1hbmQgYWxsb3cgZGlzY292ZXJ5IG9mIGNsaWVudHMgcHJlc2VudCBp biB0aGUgRlcuCi1UaGVyZSBjYW4gYmUgbXVsdGlwbGUgc2Vuc29yIGNsaWVudHMgYW5kIGNsaWVu dHMgZm9yIGNhbGlicmF0aW9uIGZ1bmN0aW9uLgotCi1UbyBlYXNlIGluIGltcGxhbnRhdGlvbiBh bmQgYWxsb3cgaW5kZXBlbmRlbnQgZHJpdmVyIGhhbmRsZSBlYWNoIGNsaWVudAotdGhpcyB0cmFu c3BvcnQgbGF5ZXIgdGFrZXMgYWR2YW50YWdlIG9mIExpbnV4IEJ1cyBkcml2ZXIgbW9kZWwuIEVh Y2gKLWNsaWVudCBpcyByZWdpc3RlcmVkIGFzIGRldmljZSBvbiB0aGUgdGhlIHRyYW5zcG9ydCBi dXMgKGlzaHRwIGJ1cykuCi0KLUVudW1lcmF0aW9uIHNlcXVlbmNlIG9mIG1lc3NhZ2VzOgotLSBI b3N0IHNlbmRzIEhPU1RfU1RBUlRfUkVRX0NNRCwgaW5kaWNhdGluZyB0aGF0IGhvc3QgSVNIVFAg bGF5ZXIgaXMgdXAuCi0tIEZXIHJlc3BvbmRzIHdpdGggSE9TVF9TVEFSVF9SRVNfQ01ECi0tIEhv c3Qgc2VuZHMgSE9TVF9FTlVNX1JFUV9DTUQgKGVudW1lcmF0ZSBGVyBjbGllbnRzKQotLSBGVyBy ZXNwb25kcyB3aXRoIEhPU1RfRU5VTV9SRVNfQ01EIHRoYXQgaW5jbHVkZXMgYml0bWFwIG9mIGF2 YWlsYWJsZSBGVwotY2xpZW50IElEcwotLSBGb3IgZWFjaCBGVyBJRCBmb3VuZCBpbiB0aGF0IGJp dG1hcCBob3N0IHNlbmRzCi1IT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFUV9DTUQKLS0gRlcgcmVz cG9uZHMgd2l0aCBIT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFU19DTUQuIFByb3BlcnRpZXMgaW5j bHVkZSBVVUlELAotbWF4IElTSFRQIG1lc3NhZ2Ugc2l6ZSwgZXRjLgotLSBPbmNlIGhvc3QgcmVj ZWl2ZWQgcHJvcGVydGllcyBmb3IgdGhhdCBsYXN0IGRpc2NvdmVyZWQgY2xpZW50LCBpdCBjb25z aWRlcnMKLUlTSFRQIGRldmljZSBmdWxseSBmdW5jdGlvbmFsIChhbmQgYWxsb2NhdGVzIERNQSBi dWZmZXJzKQotCi0zLjQgSElEIG92ZXIgSVNIIENsaWVudAotTG9jYXRpb246IGRyaXZlcnMvaGlk L2ludGVsLWlzaC1oaWQKLQotVGhlIElTSFRQIGNsaWVudCBkcml2ZXIgaXMgcmVzcG9uc2libGUg Zm9yOgotLSBlbnVtZXJhdGUgSElEIGRldmljZXMgdW5kZXIgRlcgSVNIIGNsaWVudAotLSBHZXQg UmVwb3J0IGRlc2NyaXB0b3IKLS0gUmVnaXN0ZXIgd2l0aCBISUQgY29yZSBhcyBhIExMIGRyaXZl cgotLSBQcm9jZXNzIEdldC9TZXQgZmVhdHVyZSByZXF1ZXN0Ci0tIEdldCBpbnB1dCByZXBvcnRz Ci0KLTMuNSBISUQgU2Vuc29yIEh1YiBNRkQgYW5kIElJTyBzZW5zb3IgZHJpdmVycwotCi1UaGUg ZnVuY3Rpb25hbGl0eSBpbiB0aGVzZSBkcml2ZXJzIGlzIHRoZSBzYW1lIGFzIGFuIGV4dGVybmFs IHNlbnNvciBodWIuCi1SZWZlciB0bwotRG9jdW1lbnRhdGlvbi9oaWQvaGlkLXNlbnNvci50eHQg Zm9yIEhJRCBzZW5zb3IKLURvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWlpbyBm b3IgSUlPIEFCSXMgdG8gdXNlciBzcGFjZQotCi0zLjYgRW5kIHRvIEVuZCBISUQgdHJhbnNwb3J0 IFNlcXVlbmNlIERpYWdyYW0KLQotSElELUlTSC1DTE4JCQlJU0hUUAkJCUlQQwkJCQlIVwotCXwJ CQl8CQkJfAkJCQl8Ci0JfAkJCXwJCQl8LS0tLS1XQUtFIFVQLS0tLS0tLS0tLS0tLS0tLS0tPnwK LQl8CQkJfAkJCXwJCQkJfAotCXwJCQl8CQkJfC0tLS0tSE9TVCBSRUFEWS0tLS0tLS0tLS0tLS0t LT58Ci0JfAkJCXwJCQl8CQkJCXwKLQl8CQkJfAkJCXw8LS0tLU1OR19SRVNFVF9OT1RJRllfQUNL LS0tLS0gfAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXw8LS0tLUlTSFRQX1NUQVJULS0tLS0tIHwJ CQkJfAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXw8LS0tLS0tLS0tLS0tLS0tLS1IT1NUX1NUQVJU X1JFU19DTUQtLS0tLS0tLS0tLS0tLS0tLS0tfAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXwtLS0t LS0tLS0tLS0tLS0tLS1RVUVSWV9TVUJTQ1JJQkVSLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAotCXwJ CQl8CQkJfAkJCQl8Ci0JfAkJCXwtLS0tLS0tLS0tLS0tLS0tLS1IT1NUX0VOVU1fUkVRX0NNRC0t LS0tLS0tLS0tLS0tLS0tLS0+fAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXw8LS0tLS0tLS0tLS0t LS0tLS1IT1NUX0VOVU1fUkVTX0NNRC0tLS0tLS0tLS0tLS0tLS0tLS0tfAotCXwJCQl8CQkJfAkJ CQl8Ci0JfAkJCXwtLS0tLS0tLS0tLS0tLS0tLS1IT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFUV9D TUQtLS0tLS0+fAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXw8LS0tLS0tLS0tLS0tLS0tLS1IT1NU X0NMSUVOVF9QUk9QRVJUSUVTX1JFU19DTUQtLS0tLS0tfAotCXwJQ3JlYXRlIG5ldyBkZXZpY2Ug b24gaW4gaXNodHAgYnVzCXwJCQkJfAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXwtLS0tLS0tLS0t LS0tLS0tLS1IT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JFUV9DTUQtLS0tLS0+fAotCXwJCQl8CQkJ fAkJCQl8Ci0JfAkJCXw8LS0tLS0tLS0tLS0tLS0tLS1IT1NUX0NMSUVOVF9QUk9QRVJUSUVTX1JF U19DTUQtLS0tLS0tfAotCXwJQ3JlYXRlIG5ldyBkZXZpY2Ugb24gaW4gaXNodHAgYnVzCXwJCQkJ fAotCXwJCQl8CQkJfAkJCQl8Ci0JfAkJCXwtLVJlcGVhdCBIT1NUX0NMSUVOVF9QUk9QRVJUSUVT X1JFUV9DTUQtdGlsbCBsYXN0IG9uZS0tfAotCXwJCQl8CQkJfAkJCQl8Ci0gICAgIHByb2JlZCgp Ci0JfC0tLS1pc2h0cF9jbF9jb25uZWN0LS0+fC0tLS0tLS0tLS0tLS0tLS0tIENMSUVOVF9DT05O RUNUX1JFUV9DTUQtLS0tLS0tLS0tLS0tLT58Ci0JfAkJCXwJCQl8CQkJCXwKLQl8CQkJfDwtLS0t LS0tLS0tLS0tLS0tQ0xJRU5UX0NPTk5FQ1RfUkVTX0NNRC0tLS0tLS0tLS0tLS0tLS18Ci0JfAkJ CXwJCQl8CQkJCXwKLQl8cmVnaXN0ZXIgZXZlbnQgY2FsbGJhY2t8CQkJfAkJCQl8Ci0JfAkJCXwJ CQl8CQkJCXwKLQl8aXNodHBfY2xfc2VuZCgKLQlIT1NUSUZfRE1fRU5VTV9ERVZJQ0VTKSB8LS0t LS0tLS0tLWZpbGwgaXNodHBfbXNnX2hkciBzdHJ1Y3Qgd3JpdGUgdG8gSFctLS0tLSAgPnwKLQl8 CQkJfAkJCXwJCQkJfAotCXwJCQl8CQkJfDwtLS0tLUlSUShJUENfUFJPVE9DT0xfSVNIVFAtLS18 Ci0JfAkJCXwJCQl8CQkJCXwKLQl8PC0tRU5VTV9ERVZJQ0UgUlNQLS0tLS18CQkJfAkJCQl8Ci0J fAkJCXwJCQl8CQkJCXwKLWZvciBlYWNoIGVudW1lcmF0ZWQgZGV2aWNlCi0JfGlzaHRwX2NsX3Nl bmQoCi0JSE9TVElGX0dFVF9ISURfREVTQ1JJUFRPUiB8LS0tLS0tLS0tLWZpbGwgaXNodHBfbXNn X2hkciBzdHJ1Y3Qgd3JpdGUgdG8gSFctLS0gID58Ci0JfAkJCXwJCQl8CQkJCXwKLQkuLi5SZXNw b25zZQotCXwJCQl8CQkJfAkJCQl8Ci1mb3IgZWFjaCBlbnVtZXJhdGVkIGRldmljZQotCXxpc2h0 cF9jbF9zZW5kKAotCUhPU1RJRl9HRVRfUkVQT1JUX0RFU0NSSVBUT1IgfC0tLS0tLS0tLS1maWxs IGlzaHRwX21zZ19oZHIgc3RydWN0IHdyaXRlIHRvIEhXLSA+fAotCXwJCQl8CQkJfAkJCQl8Ci0J fAkJCXwJCQl8CQkJCXwKLSBoaWRfYWxsb2NhdGVfZGV2aWNlCi0JfAkJCXwJCQl8CQkJCXwKLSBo aWRfYWRkX2RldmljZQkJCXwJCQl8CQkJCXwKLQl8CQkJfAkJCXwJCQkJfAotCi0KLTMuNyBJU0gg RGVidWdnaW5nCi0KLVRvIGRlYnVnIElTSCwgZXZlbnQgdHJhY2luZyBtZWNoYW5pc20gaXMgdXNl ZC4gVG8gZW5hYmxlIGRlYnVnIGxvZ3MKLWVjaG8gMSA+IC9zeXMva2VybmVsL2RlYnVnL3RyYWNp bmcvZXZlbnRzL2ludGVsX2lzaC9lbmFibGUKLWNhdCBzeXMva2VybmVsL2RlYnVnL3RyYWNpbmcv dHJhY2UKLQotMy44IElTSCBJSU8gc3lzZnMgRXhhbXBsZSBvbiBMZW5vdm8gdGhpbmtwYWQgWW9n YSAyNjAKLQotcm9vdEBvdGNwbC1UaGlua1BhZC1Zb2dhLTI2MDp+IyB0cmVlIC1sIC9zeXMvYnVz L2lpby9kZXZpY2VzLwotL3N5cy9idXMvaWlvL2RldmljZXMvCi3ilJzilIDilIAgaWlvOmRldmlj ZTAgLT4gLi4vLi4vLi4vZGV2aWNlcy8wMDQ0OjgwODY6MjJEOC4wMDAxL0hJRC1TRU5TT1ItMjAw MDczLjkuYXV0by9paW86ZGV2aWNlMAot4pSCwqDCoCDilJzilIDilIAgYnVmZmVyCi3ilILCoMKg IOKUgsKgwqAg4pSc4pSA4pSAIGVuYWJsZQot4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBsZW5n dGgKLeKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgd2F0ZXJtYXJrCi0uLi4KLeKUgsKgwqAg4pSc 4pSA4pSAIGluX2FjY2VsX2h5c3RlcmVzaXMKLeKUgsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX29m ZnNldAot4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxfc2FtcGxpbmdfZnJlcXVlbmN5Ci3ilILC oMKgIOKUnOKUgOKUgCBpbl9hY2NlbF9zY2FsZQot4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxf eF9yYXcKLeKUgsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX3lfcmF3Ci3ilILCoMKgIOKUnOKUgOKU gCBpbl9hY2NlbF96X3Jhdwot4pSCwqDCoCDilJzilIDilIAgbmFtZQot4pSCwqDCoCDilJzilIDi lIAgc2Nhbl9lbGVtZW50cwot4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hY2NlbF94X2Vu Ci3ilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FjY2VsX3hfaW5kZXgKLeKUgsKgwqAg4pSC wqDCoCDilJzilIDilIAgaW5fYWNjZWxfeF90eXBlCi3ilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IGluX2FjY2VsX3lfZW4KLeKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYWNjZWxfeV9pbmRl eAot4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hY2NlbF95X3R5cGUKLeKUgsKgwqAg4pSC wqDCoCDilJzilIDilIAgaW5fYWNjZWxfel9lbgot4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBp bl9hY2NlbF96X2luZGV4Ci3ilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIGluX2FjY2VsX3pfdHlw ZQotLi4uCi3ilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGRldmljZXMKLeKUgsKgwqAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGJ1ZmZlcgot4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBlbmFibGUKLeKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgbGVuZ3RoCi3ilILCoMKgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIHdhdGVybWFyawot4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgZGV2Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUnOKUgOKUgCBpbl9pbnRlbnNpdHlfYm90aF9yYXcKLeKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2ludGVuc2l0eV9oeXN0ZXJlc2lzCi3ilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9pbnRlbnNpdHlfb2Zmc2V0Ci3i lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9pbnRlbnNpdHlfc2Ft cGxpbmdfZnJlcXVlbmN5Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBpbl9pbnRlbnNpdHlfc2NhbGUKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc 4pSA4pSAIG5hbWUKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIHNj YW5fZWxlbWVudHMKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzi lIDilIAgaW5faW50ZW5zaXR5X2JvdGhfZW4KLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilJzilIDilIAgaW5faW50ZW5zaXR5X2JvdGhfaW5kZXgKLeKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgaW5faW50ZW5zaXR5X2JvdGhf dHlwZQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgdHJpZ2dlcgot 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBjdXJyZW50 X3RyaWdnZXIKLS4uLgot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAg YnVmZmVyCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IGVuYWJsZQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKU gCBsZW5ndGgKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJTilIDi lIAgd2F0ZXJtYXJrCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBk ZXYKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25faHlz dGVyZXNpcwot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fbWFn bl9vZmZzZXQKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21h Z25fc2FtcGxpbmdfZnJlcXVlbmN5Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9tYWduX3NjYWxlCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9tYWduX3hfcmF3Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9tYWduX3lfcmF3Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9tYWduX3pfcmF3Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU nOKUgOKUgCBpbl9yb3RfZnJvbV9ub3J0aF9tYWduZXRpY190aWx0X2NvbXBfcmF3Ci3ilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9yb3RfaHlzdGVyZXNpcwot4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fcm90X29mZnNldAot4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fcm90X3NhbXBsaW5nX2Zy ZXF1ZW5jeQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fcm90 X3NjYWxlCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBuYW1lCi0u Li4KLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIHNjYW5fZWxlbWVu dHMKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5f bWFnbl94X2VuCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA 4pSAIGluX21hZ25feF9pbmRleAot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUnOKUgOKUgCBpbl9tYWduX3hfdHlwZQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9tYWduX3lfZW4KLeKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fbWFnbl95X2luZGV4Ci3ilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25feV90eXBlCi3i lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX21hZ25f el9lbgot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBp bl9tYWduX3pfaW5kZXgKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lJzilIDilIAgaW5fbWFnbl96X3R5cGUKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilJzilIDilIAgaW5fcm90X2Zyb21fbm9ydGhfbWFnbmV0aWNfdGlsdF9jb21wX2Vu Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX3Jv dF9mcm9tX25vcnRoX21hZ25ldGljX3RpbHRfY29tcF9pbmRleAot4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCBpbl9yb3RfZnJvbV9ub3J0aF9tYWduZXRp Y190aWx0X2NvbXBfdHlwZQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDi lIAgdHJpZ2dlcgot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKU gOKUgCBjdXJyZW50X3RyaWdnZXIKLS4uLgot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDC oCDilJzilIDilIAgYnVmZmVyCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGVuYWJsZQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILC oMKgIOKUnOKUgOKUgCBsZW5ndGgKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSC wqDCoCDilJTilIDilIAgd2F0ZXJtYXJrCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUnOKUgOKUgCBkZXYKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IGluX2FuZ2x2ZWxfaHlzdGVyZXNpcwot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lJzilIDilIAgaW5fYW5nbHZlbF9vZmZzZXQKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfc2FtcGxpbmdfZnJlcXVlbmN5Ci3ilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3NjYWxlCi3ilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3hfcmF3Ci3ilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3lfcmF3Ci3ilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfcmF3Ci3i lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBuYW1lCi3ilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBzY2FuX2VsZW1lbnRzCi3ilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeF9lbgot 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmds dmVsX3hfaW5kZXgKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzi lIDilIAgaW5fYW5nbHZlbF94X3R5cGUKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF95X2VuCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDC oCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeV9pbmRleAot4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3lfdHlw ZQot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9h bmdsdmVsX3pfZW4KLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzi lIDilIAgaW5fYW5nbHZlbF96X2luZGV4Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSU4pSA4pSAIGluX2FuZ2x2ZWxfel90eXBlCi3ilILCoMKgIOKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUnOKUgOKUgCB0cmlnZ2VyCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSU4pSA4pSAIGN1cnJlbnRfdHJpZ2dlcgotLi4uCi3ilILCoMKgIOKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBidWZmZXIKLeKUgsKgwqAg4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgZW5hYmxlCi3ilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGxlbmd0aAot4pSCwqDCoCDilILCoMKg IOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUlOKUgOKUgCB3YXRlcm1hcmsKLeKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGRldgot4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF9oeXN0ZXJlc2lzCi3ilILCoMKgIOKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX29mZnNldAot4pSCwqDCoCDi lILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZlbF9zYW1wbGluZ19mcmVx dWVuY3kKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2 ZWxfc2NhbGUKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGluX2Fu Z2x2ZWxfeF9yYXcKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIGlu X2FuZ2x2ZWxfeV9yYXcKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSA IGluX2FuZ2x2ZWxfel9yYXcKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA 4pSAIG5hbWUKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIHNjYW5f ZWxlbWVudHMKLeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDi lIAgaW5fYW5nbHZlbF94X2VuCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKg wqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfeF9pbmRleAot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3hfdHlwZQot4pSCwqDCoCDilILC oMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3lfZW4KLeKU gsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJzilIDilIAgaW5fYW5nbHZl bF95X2luZGV4Ci3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA 4pSAIGluX2FuZ2x2ZWxfeV90eXBlCi3ilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKU gsKgwqAg4pSc4pSA4pSAIGluX2FuZ2x2ZWxfel9lbgot4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg 4pSCwqDCoCDilILCoMKgIOKUnOKUgOKUgCBpbl9hbmdsdmVsX3pfaW5kZXgKLeKUgsKgwqAg4pSC wqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgaW5fYW5nbHZlbF96X3R5cGUK LeKUgsKgwqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSc4pSA4pSAIHRyaWdnZXIKLeKUgsKg wqAg4pSCwqDCoCDilILCoMKgIOKUgsKgwqAg4pSCwqDCoCDilJTilIDilIAgY3VycmVudF90cmln Z2VyCi0uLi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaGlkL3VoaWQudHh0IGIvRG9jdW1l bnRhdGlvbi9oaWQvdWhpZC5yc3QKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gRG9j dW1lbnRhdGlvbi9oaWQvdWhpZC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vaGlkL3VoaWQu cnN0CmluZGV4IDk1OGZmZjk0NTMwNC4uYjE4Y2I5NmM4ODVmIDEwMDY0NAotLS0gYS9Eb2N1bWVu dGF0aW9uL2hpZC91aGlkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2hpZC91aGlkLnJzdApAQCAt MSw1ICsxLDYgQEAKLSAgICAgIFVISUQgLSBVc2VyLXNwYWNlIEkvTyBkcml2ZXIgc3VwcG9ydCBm b3IgSElEIHN1YnN5c3RlbQotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CitVSElEIC0gVXNlci1zcGFjZSBJL08gZHJpdmVyIHN1cHBv cnQgZm9yIEhJRCBzdWJzeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQogCiBVSElEIGFsbG93cyB1c2VyLXNwYWNlIHRvIGltcGxlbWVu dCBISUQgdHJhbnNwb3J0IGRyaXZlcnMuIFBsZWFzZSBzZWUKIGhpZC10cmFuc3BvcnQudHh0IGZv ciBhbiBpbnRyb2R1Y3Rpb24gaW50byBISUQgdHJhbnNwb3J0IGRyaXZlcnMuIFRoaXMgZG9jdW1l bnQKQEAgLTIyLDkgKzIzLDkgQEAgSWYgYSBuZXcgZGV2aWNlIGlzIGRldGVjdGVkIGJ5IHlvdXIg SElEIEkvTyBEcml2ZXIgYW5kIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHRoaXMKIGRldmljZSB3aXRo IHRoZSBISUQgc3Vic3lzdGVtLCB0aGVuIHlvdSBuZWVkIHRvIG9wZW4gL2Rldi91aGlkIG9uY2Ug Zm9yIGVhY2gKIGRldmljZSB5b3Ugd2FudCB0byByZWdpc3Rlci4gQWxsIGZ1cnRoZXIgY29tbXVu aWNhdGlvbiBpcyBkb25lIGJ5IHJlYWQoKSdpbmcgb3IKIHdyaXRlKCknaW5nICJzdHJ1Y3QgdWhp ZF9ldmVudCIgb2JqZWN0cy4gTm9uLWJsb2NraW5nIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZAot Ynkgc2V0dGluZyBPX05PTkJMT0NLLgorYnkgc2V0dGluZyBPX05PTkJMT0NLOjoKIAotc3RydWN0 IHVoaWRfZXZlbnQgeworICBzdHJ1Y3QgdWhpZF9ldmVudCB7CiAgICAgICAgIF9fdTMyIHR5cGU7 CiAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWhpZF9jcmVhdGUyX3Jl cSBjcmVhdGUyOwpAQCAtMzIsNyArMzMsNyBAQCBzdHJ1Y3QgdWhpZF9ldmVudCB7CiAgICAgICAg ICAgICAgICAgc3RydWN0IHVoaWRfaW5wdXQyX3JlcSBpbnB1dDI7CiAgICAgICAgICAgICAgICAg Li4uCiAgICAgICAgIH0gdTsKLX07CisgIH07CiAKIFRoZSAidHlwZSIgZmllbGQgY29udGFpbnMg dGhlIElEIG9mIHRoZSBldmVudC4gRGVwZW5kaW5nIG9uIHRoZSBJRCBkaWZmZXJlbnQKIHBheWxv YWRzIGFyZSBzZW50LiBZb3UgbXVzdCBub3Qgc3BsaXQgYSBzaW5nbGUgZXZlbnQgYWNyb3NzIG11 bHRpcGxlIHJlYWQoKSdzIG9yCkBAIC04NiwzMSArODcsMzEgQEAgdGhlIHJlcXVlc3Qgd2FzIGhh bmRsZWQgc3VjY2Vzc2Z1bGx5LiBPX05PTkJMT0NLIGRvZXMgbm90IGFmZmVjdCB3cml0ZSgpIGFz CiB3cml0ZXMgYXJlIGFsd2F5cyBoYW5kbGVkIGltbWVkaWF0ZWx5IGluIGEgbm9uLWJsb2NraW5n IGZhc2hpb24uIEZ1dHVyZSByZXF1ZXN0cwogbWlnaHQgbWFrZSB1c2Ugb2YgT19OT05CTE9DSywg dGhvdWdoLgogCi0gIFVISURfQ1JFQVRFMjoKK1VISURfQ1JFQVRFMjoKICAgVGhpcyBjcmVhdGVz IHRoZSBpbnRlcm5hbCBISUQgZGV2aWNlLiBObyBJL08gaXMgcG9zc2libGUgdW50aWwgeW91IHNl bmQgdGhpcwogICBldmVudCB0byB0aGUga2VybmVsLiBUaGUgcGF5bG9hZCBpcyBvZiB0eXBlIHN0 cnVjdCB1aGlkX2NyZWF0ZTJfcmVxIGFuZAogICBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB5 b3VyIGRldmljZS4gWW91IGNhbiBzdGFydCBJL08gbm93LgogCi0gIFVISURfREVTVFJPWToKK1VI SURfREVTVFJPWToKICAgVGhpcyBkZXN0cm95cyB0aGUgaW50ZXJuYWwgSElEIGRldmljZS4gTm8g ZnVydGhlciBJL08gd2lsbCBiZSBhY2NlcHRlZC4gVGhlcmUKICAgbWF5IHN0aWxsIGJlIHBlbmRp bmcgbWVzc2FnZXMgdGhhdCB5b3UgY2FuIHJlY2VpdmUgd2l0aCByZWFkKCkgYnV0IG5vIGZ1cnRo ZXIKICAgVUhJRF9JTlBVVCBldmVudHMgY2FuIGJlIHNlbnQgdG8gdGhlIGtlcm5lbC4KICAgWW91 IGNhbiBjcmVhdGUgYSBuZXcgZGV2aWNlIGJ5IHNlbmRpbmcgVUhJRF9DUkVBVEUyIGFnYWluLiBU aGVyZSBpcyBubyBuZWVkIHRvCiAgIHJlb3BlbiB0aGUgY2hhcmFjdGVyIGRldmljZS4KIAotICBV SElEX0lOUFVUMjoKK1VISURfSU5QVVQyOgogICBZb3UgbXVzdCBzZW5kIFVISURfQ1JFQVRFMiBi ZWZvcmUgc2VuZGluZyBpbnB1dCB0byB0aGUga2VybmVsISBUaGlzIGV2ZW50CiAgIGNvbnRhaW5z IGEgZGF0YS1wYXlsb2FkLiBUaGlzIGlzIHRoZSByYXcgZGF0YSB0aGF0IHlvdSByZWFkIGZyb20g eW91ciBkZXZpY2UKICAgb24gdGhlIGludGVycnVwdCBjaGFubmVsLiBUaGUga2VybmVsIHdpbGwg cGFyc2UgdGhlIEhJRCByZXBvcnRzLgogCi0gIFVISURfR0VUX1JFUE9SVF9SRVBMWToKK1VISURf R0VUX1JFUE9SVF9SRVBMWToKICAgSWYgeW91IHJlY2VpdmUgYSBVSElEX0dFVF9SRVBPUlQgcmVx dWVzdCB5b3UgbXVzdCBhbnN3ZXIgd2l0aCB0aGlzIHJlcXVlc3QuCiAgIFlvdSAgbXVzdCBjb3B5 IHRoZSAiaWQiIGZpZWxkIGZyb20gdGhlIHJlcXVlc3QgaW50byB0aGUgYW5zd2VyLiBTZXQgdGhl ICJlcnIiCiAgIGZpZWxkIHRvIDAgaWYgbm8gZXJyb3Igb2NjdXJyZWQgb3IgdG8gRUlPIGlmIGFu IEkvTyBlcnJvciBvY2N1cnJlZC4KICAgSWYgImVyciIgaXMgMCB0aGVuIHlvdSBzaG91bGQgZmls bCB0aGUgYnVmZmVyIG9mIHRoZSBhbnN3ZXIgd2l0aCB0aGUgcmVzdWx0cwogICBvZiB0aGUgR0VU X1JFUE9SVCByZXF1ZXN0IGFuZCBzZXQgInNpemUiIGNvcnJlc3BvbmRpbmdseS4KIAotICBVSElE X1NFVF9SRVBPUlRfUkVQTFk6CitVSElEX1NFVF9SRVBPUlRfUkVQTFk6CiAgIFRoaXMgaXMgdGhl IFNFVF9SRVBPUlQgZXF1aXZhbGVudCBvZiBVSElEX0dFVF9SRVBPUlRfUkVQTFkuIFVubGlrZSBH RVRfUkVQT1JULAogICBTRVRfUkVQT1JUIG5ldmVyIHJldHVybnMgYSBkYXRhIGJ1ZmZlciwgdGhl cmVmb3JlLCBpdCdzIHN1ZmZpY2llbnQgdG8gc2V0IHRoZQogICAiaWQiIGFuZCAiZXJyIiBmaWVs ZHMgY29ycmVjdGx5LgpAQCAtMTIwLDE2ICsxMjEsMTggQEAgcmVhZCgpCiByZWFkKCkgd2lsbCBy ZXR1cm4gYSBxdWV1ZWQgb3V0cHV0IHJlcG9ydC4gTm8gcmVhY3Rpb24gaXMgcmVxdWlyZWQgdG8g YW55IG9mCiB0aGVtIGJ1dCB5b3Ugc2hvdWxkIGhhbmRsZSB0aGVtIGFjY29yZGluZyB0byB5b3Vy IG5lZWRzLgogCi0gIFVISURfU1RBUlQ6CitVSElEX1NUQVJUOgogICBUaGlzIGlzIHNlbnQgd2hl biB0aGUgSElEIGRldmljZSBpcyBzdGFydGVkLiBDb25zaWRlciB0aGlzIGFzIGFuIGFuc3dlciB0 bwogICBVSElEX0NSRUFURTIuIFRoaXMgaXMgYWx3YXlzIHRoZSBmaXJzdCBldmVudCB0aGF0IGlz IHNlbnQuIE5vdGUgdGhhdCB0aGlzCiAgIGV2ZW50IG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW1t ZWRpYXRlbHkgYWZ0ZXIgd3JpdGUoVUhJRF9DUkVBVEUyKSByZXR1cm5zLgogICBEZXZpY2UgZHJp dmVycyBtaWdodCByZXF1aXJlZCBkZWxheWVkIHNldHVwcy4KICAgVGhpcyBldmVudCBjb250YWlu cyBhIHBheWxvYWQgb2YgdHlwZSB1aGlkX3N0YXJ0X3JlcS4gVGhlICJkZXZfZmxhZ3MiIGZpZWxk CiAgIGRlc2NyaWJlcyBzcGVjaWFsIGJlaGF2aW9ycyBvZiBhIGRldmljZS4gVGhlIGZvbGxvd2lu ZyBmbGFncyBhcmUgZGVmaW5lZDoKLSAgICAgIFVISURfREVWX05VTUJFUkVEX0ZFQVRVUkVfUkVQ T1JUUzoKLSAgICAgIFVISURfREVWX05VTUJFUkVEX09VVFBVVF9SRVBPUlRTOgotICAgICAgVUhJ RF9ERVZfTlVNQkVSRURfSU5QVVRfUkVQT1JUUzoKKworICAgICAgLSBVSElEX0RFVl9OVU1CRVJF RF9GRUFUVVJFX1JFUE9SVFMKKyAgICAgIC0gVUhJRF9ERVZfTlVNQkVSRURfT1VUUFVUX1JFUE9S VFMKKyAgICAgIC0gVUhJRF9ERVZfTlVNQkVSRURfSU5QVVRfUkVQT1JUUworCiAgICAgICAgICAg RWFjaCBvZiB0aGVzZSBmbGFncyBkZWZpbmVzIHdoZXRoZXIgYSBnaXZlbiByZXBvcnQtdHlwZSB1 c2VzIG51bWJlcmVkCiAgICAgICAgICAgcmVwb3J0cy4gSWYgbnVtYmVyZWQgcmVwb3J0cyBhcmUg dXNlZCBmb3IgYSB0eXBlLCBhbGwgbWVzc2FnZXMgZnJvbQogICAgICAgICAgIHRoZSBrZXJuZWwg YWxyZWFkeSBoYXZlIHRoZSByZXBvcnQtbnVtYmVyIGFzIHByZWZpeC4gT3RoZXJ3aXNlLCBubwpA QCAtMTM3LDMzICsxNDAsMzUgQEAgdGhlbSBidXQgeW91IHNob3VsZCBoYW5kbGUgdGhlbSBhY2Nv cmRpbmcgdG8geW91ciBuZWVkcy4KICAgICAgICAgICBGb3IgbWVzc2FnZXMgc2VudCBieSB1c2Vy LXNwYWNlIHRvIHRoZSBrZXJuZWwsIHlvdSBtdXN0IGFkanVzdCB0aGUKICAgICAgICAgICBwcmVm aXhlcyBhY2NvcmRpbmcgdG8gdGhlc2UgZmxhZ3MuCiAKLSAgVUhJRF9TVE9QOgorVUhJRF9TVE9Q OgogICBUaGlzIGlzIHNlbnQgd2hlbiB0aGUgSElEIGRldmljZSBpcyBzdG9wcGVkLiBDb25zaWRl ciB0aGlzIGFzIGFuIGFuc3dlciB0bwogICBVSElEX0RFU1RST1kuCisKICAgSWYgeW91IGRpZG4n dCBkZXN0cm95IHlvdXIgZGV2aWNlIHZpYSBVSElEX0RFU1RST1ksIGJ1dCB0aGUga2VybmVsIHNl bmRzIGFuCiAgIFVISURfU1RPUCBldmVudCwgdGhpcyBzaG91bGQgdXN1YWxseSBiZSBpZ25vcmVk LiBJdCBtZWFucyB0aGF0IHRoZSBrZXJuZWwKICAgcmVsb2FkZWQvY2hhbmdlZCB0aGUgZGV2aWNl IGRyaXZlciBsb2FkZWQgb24geW91ciBISUQgZGV2aWNlIChvciBzb21lIG90aGVyCiAgIG1haW50 ZW5hbmNlIGFjdGlvbnMgaGFwcGVuZWQpLgorCiAgIFlvdSBjYW4gdXN1YWxseSBpZ25vcmVkIGFu eSBVSElEX1NUT1AgZXZlbnRzIHNhZmVseS4KIAotICBVSElEX09QRU46CitVSElEX09QRU46CiAg IFRoaXMgaXMgc2VudCB3aGVuIHRoZSBISUQgZGV2aWNlIGlzIG9wZW5lZC4gVGhhdCBpcywgdGhl IGRhdGEgdGhhdCB0aGUgSElECiAgIGRldmljZSBwcm92aWRlcyBpcyByZWFkIGJ5IHNvbWUgb3Ro ZXIgcHJvY2Vzcy4gWW91IG1heSBpZ25vcmUgdGhpcyBldmVudCBidXQKICAgaXQgaXMgdXNlZnVs IGZvciBwb3dlci1tYW5hZ2VtZW50LiBBcyBsb25nIGFzIHlvdSBoYXZlbid0IHJlY2VpdmVkIHRo aXMgZXZlbnQKICAgdGhlcmUgaXMgYWN0dWFsbHkgbm8gb3RoZXIgcHJvY2VzcyB0aGF0IHJlYWRz IHlvdXIgZGF0YSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCiAgIHNlbmQgVUhJRF9JTlBVVDIgZXZl bnRzIHRvIHRoZSBrZXJuZWwuCiAKLSAgVUhJRF9DTE9TRToKK1VISURfQ0xPU0U6CiAgIFRoaXMg aXMgc2VudCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHByb2Nlc3NlcyB3aGljaCByZWFkIHRoZSBI SUQgZGF0YS4gSXQgaXMKICAgdGhlIGNvdW50ZXJwYXJ0IG9mIFVISURfT1BFTiBhbmQgeW91IG1h eSBhcyB3ZWxsIGlnbm9yZSB0aGlzIGV2ZW50LgogCi0gIFVISURfT1VUUFVUOgorVUhJRF9PVVRQ VVQ6CiAgIFRoaXMgaXMgc2VudCBpZiB0aGUgSElEIGRldmljZSBkcml2ZXIgd2FudHMgdG8gc2Vu ZCByYXcgZGF0YSB0byB0aGUgSS9PCiAgIGRldmljZSBvbiB0aGUgaW50ZXJydXB0IGNoYW5uZWwu IFlvdSBzaG91bGQgcmVhZCB0aGUgcGF5bG9hZCBhbmQgZm9yd2FyZCBpdCB0bwogICB0aGUgZGV2 aWNlLiBUaGUgcGF5bG9hZCBpcyBvZiB0eXBlICJzdHJ1Y3QgdWhpZF9vdXRwdXRfcmVxIi4KICAg VGhpcyBtYXkgYmUgcmVjZWl2ZWQgZXZlbiB0aG91Z2ggeW91IGhhdmVuJ3QgcmVjZWl2ZWQgVUhJ RF9PUEVOLCB5ZXQuCiAKLSAgVUhJRF9HRVRfUkVQT1JUOgorVUhJRF9HRVRfUkVQT1JUOgogICBU aGlzIGV2ZW50IGlzIHNlbnQgaWYgdGhlIGtlcm5lbCBkcml2ZXIgd2FudHMgdG8gcGVyZm9ybSBh IEdFVF9SRVBPUlQgcmVxdWVzdAogICBvbiB0aGUgY29udHJvbCBjaGFubmVsZCBhcyBkZXNjcmli ZWQgaW4gdGhlIEhJRCBzcGVjcy4gVGhlIHJlcG9ydC10eXBlIGFuZAogICByZXBvcnQtbnVtYmVy IGFyZSBhdmFpbGFibGUgaW4gdGhlIHBheWxvYWQuCkBAIC0xNzcsMTEgKzE4MiwxMiBAQCB0aGVt IGJ1dCB5b3Ugc2hvdWxkIGhhbmRsZSB0aGVtIGFjY29yZGluZyB0byB5b3VyIG5lZWRzLgogICB0 aW1lZCBvdXQsIHRoZSBrZXJuZWwgd2lsbCBpZ25vcmUgdGhlIHJlc3BvbnNlIHNpbGVudGx5LiBU aGUgImlkIiBmaWVsZCBpcwogICBuZXZlciByZS11c2VkLCBzbyBjb25mbGljdHMgY2Fubm90IGhh cHBlbi4KIAotICBVSElEX1NFVF9SRVBPUlQ6CitVSElEX1NFVF9SRVBPUlQ6CiAgIFRoaXMgaXMg dGhlIFNFVF9SRVBPUlQgZXF1aXZhbGVudCBvZiBVSElEX0dFVF9SRVBPUlQuIE9uIHJlY2VpcHQs IHlvdSBzaGFsbAogICBzZW5kIGEgU0VUX1JFUE9SVCByZXF1ZXN0IHRvIHlvdXIgaGlkIGRldmlj ZS4gT25jZSBpdCByZXBsaWVzLCB5b3UgbXVzdCB0ZWxsCiAgIHRoZSBrZXJuZWwgYWJvdXQgaXQg dmlhIFVISURfU0VUX1JFUE9SVF9SRVBMWS4KICAgVGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZv ciBVSElEX0dFVF9SRVBPUlQgYXBwbHkuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV3JpdHRlbiAyMDEyLCBEYXZpZCBIZXJybWFubiA8 ZGguaGVycm1hbm5AZ21haWwuY29tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9p bnB1dC5yc3QgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lucHV0LnJzdAppbmRleCA0N2Y4NmE0YmYx NmMuLjBlYjYxZTY3YTdiNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC5y c3QKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC5yc3QKQEAgLTE4OCw3ICsxODgsNyBA QCBMQ0RzIGFuZCBtYW55IG90aGVyIHB1cnBvc2VzLgogCiBUaGUgbW9uaXRvciBhbmQgc3BlYWtl ciBjb250cm9scyBzaG91bGQgYmUgZWFzeSB0byBhZGQgdG8gdGhlIGhpZC9pbnB1dAogaW50ZXJm YWNlLCBidXQgZm9yIHRoZSBVUFNzIGFuZCBMQ0RzIGl0IGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNl LiBGb3IgdGhpcywKLXRoZSBoaWRkZXYgaW50ZXJmYWNlIHdhcyBkZXNpZ25lZC4gU2VlIERvY3Vt ZW50YXRpb24vaGlkL2hpZGRldi50eHQKK3RoZSBoaWRkZXYgaW50ZXJmYWNlIHdhcyBkZXNpZ25l ZC4gU2VlIERvY3VtZW50YXRpb24vaGlkL2hpZGRldi5yc3QKIGZvciBtb3JlIGluZm9ybWF0aW9u IGFib3V0IGl0LgogCiBUaGUgdXNhZ2Ugb2YgdGhlIHVzYmhpZCBtb2R1bGUgaXMgdmVyeSBzaW1w bGUsIGl0IHRha2VzIG5vIHBhcmFtZXRlcnMsCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01B SU5UQUlORVJTCmluZGV4IDY2YmNlYzI2M2RiZi4uNGUxZTU5OGEzMmQ5IDEwMDY0NAotLS0gYS9N QUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTYxNjUsNyArMTYxNjUsNyBAQCBNOglC ZW5qYW1pbiBUaXNzb2lyZXMgPGJlbmphbWluLnRpc3NvaXJlc0ByZWRoYXQuY29tPgogTDoJbGlu dXgtdXNiQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9z Y20vbGludXgva2VybmVsL2dpdC9oaWQvaGlkLmdpdAogUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1l bnRhdGlvbi9oaWQvaGlkZGV2LnR4dAorRjoJRG9jdW1lbnRhdGlvbi9oaWQvaGlkZGV2LnJzdAog RjoJZHJpdmVycy9oaWQvdXNiaGlkLwogCiBVU0IgSU5URUwgWEhDSSBST0xFIE1VWCBEUklWRVIK