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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34B3AECAAD8 for ; Fri, 23 Sep 2022 02:52:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231799AbiIWCv6 (ORCPT ); Thu, 22 Sep 2022 22:51:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231942AbiIWCvz (ORCPT ); Thu, 22 Sep 2022 22:51:55 -0400 Received: from mail-pj1-x102c.google.com (mail-pj1-x102c.google.com [IPv6:2607:f8b0:4864:20::102c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F2C38118B12; Thu, 22 Sep 2022 19:51:50 -0700 (PDT) Received: by mail-pj1-x102c.google.com with SMTP id q3so11626137pjg.3; Thu, 22 Sep 2022 19:51:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date; bh=a0siKTUe6VkWkGnovJyPWl+zYDlkEXkKiu5zd0hOi/4=; b=PUDpaej+QtKfqIaRn9xsoxuQdJoLPs/PMA9yJSrzYQsGfXtqeA04rdFIxsIBmVnPT4 bbiyLm8Hgp0QrGXB4s6/IgFgWM+turLd5mtALWA18sugoOdVLoq9acn7FchqHlD+67gP 5OfSVIkgFp14CYQaGQLhW+IIlwmMOX4Z8UKDrLn0UQnRQLmjff5gE+Rs9ZpufUhMsMWM DYoPhNDDejWRbWST8hPMxAV3tzojcBZTQj/rurijRnBRi250f7N6lzQmREiTSVNIDT5O K9GRH4m86FbsLHHLUPxkdijt2hI4QdI2tLcWXaMwDjZ1H952B5Mn/qrSz9ejJtiTZDN5 Rgxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date; bh=a0siKTUe6VkWkGnovJyPWl+zYDlkEXkKiu5zd0hOi/4=; b=P23DxJVJ0+fgT3ZDMa7brPndgMF1Of9ppz/vfKsy4nKm8bUaDw+KsHAuIJt+zuyROr DI8pANOPUYBpU92eXxE/pJE4x3KUcIHHbb0ZOu9KCtHioOJU2jk7/Aj4tW8pVuQ1JCqe F0sSQw/CYT+tBpas1dVtfYEFr7J7NtyhQP5colxFjCxPT8qdDcneTk+5Yw1I+unOcpD9 fjEo9AGiM41c5SSHA3dqFxep6oQUVeoyC+w0MjrPJ1KXzZZd4UsN6GGl6XtP4nsv+iD2 6E/+KmZlx7/uIvQpziCrwkRroiUP8pbB2pmAvEI+sbGv13BIg5utAq+8EOGm90XJ/f56 cPhA== X-Gm-Message-State: ACrzQf3pgJf+Oyc6NFz0BK/4FlrIDIvOVsaPK5r4yS00x+9M5r7a/OoU vFB5uFYxpMZdkoCEZuF/tmpZWcJ0Jws= X-Google-Smtp-Source: AMsMyM5BU9nHP2pU8tSJEurHOSudaNAyID565NVKxj/YHE2rdf3M6xH9WNKkF9YLzKZ2nuEi2XwMYQ== X-Received: by 2002:a17:902:d2d2:b0:178:a68:f40f with SMTP id n18-20020a170902d2d200b001780a68f40fmr6366093plc.149.1663901510226; Thu, 22 Sep 2022 19:51:50 -0700 (PDT) Received: from RD-3580-24288.rt.l (42-76-89-227.emome-ip.hinet.net. [42.76.89.227]) by smtp.gmail.com with ESMTPSA id f21-20020a623815000000b0053e85a4a2c9sm5167058pfa.5.2022.09.22.19.51.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Sep 2022 19:51:49 -0700 (PDT) From: ChiaEn Wu To: pavel@ucw.cz, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, matthias.bgg@gmail.com, jic23@kernel.org, lars@metafoo.de, andriy.shevchenko@linux.intel.com Cc: chiaen_wu@richtek.com, alice_chen@richtek.com, cy_huang@richtek.com, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, szunichen@gmail.com Subject: [PATCH v12 0/5] Add MediaTek MT6370 PMIC support Date: Fri, 23 Sep 2022 10:51:20 +0800 Message-Id: X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: ChiaEn Wu This patch series add MediaTek MT6370 PMIC support and add a index macro to . The MT6370 is a highly-integrated smart power management IC, which includes a single cell Li-Ion/Li-Polymer switching battery charger, a USB Type-C & Power Delivery (PD) controller, dual Flash LED current sources, a RGB LED driver, a backlight WLED driver, a display bias driver and a general LDO for portable devices. First, in this series of patches, - 'dt-binding: mfd' and 'mfd driver' have been applied by Lee in the v7. https://lore.kernel.org/all/YvJdpq0MWNPQZw5c@google.com/ https://lore.kernel.org/all/YvJdxEpC2cB58Bq9@google.com/ - 'tcpci driver' has been applied by Greg in the v8. https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-next&id=c2a8ea5997fdfeb43eda259d5533234c3cae05d7 - 'dt-binding: backlight' and 'backlight driver' have been applied by Lee in v9. https://lore.kernel.org/all/YxYSDSlnOELL2mPF@google.com/ https://lore.kernel.org/all/YxYS7%2FdZI69lMXeh@google.com/ - 'dt-binding: charger', 'charger driver' and 'linear_range.h' patch have been applied by Sebastian in v11. https://lore.kernel.org/all/20220920160857.6qfi66gtmgwesq7g@mercury.elektranox.org/ https://lore.kernel.org/all/20220920161218.dkkfvfomrruebahi@mercury.elektranox.org/ https://lore.kernel.org/all/20220920161238.dswtmyon462324dm@mercury.elektranox.org/ Second, the LED RGB driver is based on Andy's patch which moves led_init_default_state_get() to the global header. https://lore.kernel.org/all/20220805154907.32263-3-andriy.shevchenko@linux.intel.com/ In addition, we made some changes for MT6370 flash driver (see v12 section of the change log below). Thank you, ChiaEn Wu --- Change in v12: - In Patch 5/5 (MT6370 Flash): - Rename all 'led_flash_setting *s' --> 'led_flash_setting *setting' - Rename 'max_uA' --> 'max_ua' in mt6370_init_flash_properties() Change in v11: - In Patch 1/8 (dt-bindings: MT6370 Charger) - Add more detailed description of irqs. - Adujust the order of irqs Change in v10: - In Patch 6/8 (MT6370 Charger): - Add a feature (disable input current limit) in 'mt6370_chg_init_setting()' - Add the header file for using 'devm_work_autocancel()' and 'devm_delayed_work_autocancel() - Rename 'pwr_rdy' to 'opposite_pwr_rdy' in 'mt6370_chg_pwr_rdy_check()' - Rename enum elements ('MT6370_ATTACH_STAT_ATTACH_BC12_NOT_DONE' --> 'MT6370_ATTACH_STAT_ATTACH_WAIT_FOR_BC12') - Revise the assignment value of 'val.intval' in 'mt6370_chg_pwr_rdy_check()' to make the code easy to read. - Revise the initialization of bc12_work (INIT_WORK() --> using devm_work_autocancel()) and mivr_dwork (INIT_DELAYED_WORK + devm_add_action_or_reset() --> devm_delayed_work_autocancel()) - In Patch 8/8 (MT6370 LED Flashlight): - Add the revert code when '__mt6370_flash_brightness_set()' return failed. - Revise type of 'led_no' (u32 -> u8) - Revise type of 'default_state' (u32 -> enum led_default_state) - Revise the return value of '_mt6370_flash_brightness_set()' - Remove the useless function 'mt6370_init_common_properties()' - Use 'led_init_default_state_get()' to init 'led->default_state' Changes in v9: - In Patch 05/10: - Revise LINEAR_RANGE() and LINEAR_RANGE_IDX() - In Patch 07/10: - Fix wrong 'F_IINLMTSEL' setting in 'mt6370_chg_init_setting()' - Revise the usage of LINEAR_RANGE_IDX() - In Patch 09/10: - Revise the format of the comments. - In Patch 10/10: - Revise the format of the comments. Changes in v8: - In Patch 06/12: - Add linear_range_idx macro for declaring the linear_range struct simply. - In Patch 09/12: - Remove MT6370_CHG_LINEAR_RANGE() macro, and change to use LINEAR_RANGE_IDX() macro - In Patch 10/12: - Add include header file - Remove useless 'enum mt6370_state' because of using 'enum led_default_state' - Revise the calculation of 'val' in 'mt6370_gen_breath_pattern()' - Replace the medthod of getting default-state by using led_init_default_state_get() - In Patch 11/12: - Add missing 'dependency config' in Kconfig - Revise all multi-line comments - In Patch 12/12: - Add missing header file - Remove useledd header file - Revise the comment of 'mt6370_check_vendor_info()' Changes in v7: - In Patch 05/13: - Add the second compatible string for 'mt6372' - Add 'mediatek,bled-exponential-mode-enable' property for enable the exponential mode of backlight brightness - Add validation for the maximum value of 'default-brightness' and 'max-brightness' - In Patch 07/13: - Move '#define MT6370_REG_MAXADDR' to the next line of '#define MT6370_REG_CHG_MASK1' - Rename 'MT6370_REG_ADDRLEN' to 'MT6370_MAX_ADDRLEN' - In Patch 08/13: - Revise 'devm_add_action_or_reset(dev, ...)' to one line - Revise 'return regmap_update_bits(...)' with using positive conditional - In Patch 09/13: - Add AICR(100mA ~ 350mA), ICHG(100mA ~ 800mA) macros - Remove 400mA AICR and 900mA ICHG macros - Revise using 'if-else' to 'switch-case' in mt6370_adc_read_scale() where the adc channel is ibus or ibat - In Patch 10/13: - Revise the method to enable/disable irq - Revise all 'if (ret < 0)' to 'if (ret)' after using mt6370_chg_field_set/get() - Revise all 'OTG' text again - In Patch 11/13: - Add the comment for the union of 'struct mt6370_led' - Revise the wrong description of 'Authors' - Revise some typos (e.g. led --> LED) - Revise 'if (!fwnode_property_read_string())' to 'ret = fwnode_property_read_string()' - Replace 'memcpy(...)' with 'put_unaligned_be24()' in mt6370_gen_breath_pattern() - Replace all 'LED_OFF' with 0 - Remove the redundant assignment in mt6370_mc_pattern_clear() - In Patch 12/13: - Fix the indentation. - For the well defined macro, the parenthesis is needed for input parameters. - Replace some dev_warn to dev_info in 'init_flash_properties'. - Add sentinel comment for the terminator entry of of_device_id. - Use priv->fled_torch_used directly. - Delete 0 in {}. - Use _uA instead of _UA in definition. - Refine the description. - Use usleep_range instead of udelay. - Rename config to LEDS_MT6370_FLASH. - Add missing ">" in copyright. - Change the Kconfig order - In Patch 13/13: - Add support 'exponential mode' property parsing - Add 'return dev_err_probe()' after 'if (IS_ERR(priv->enable_gpio))' - Add 'mt6372' compatible string - Revise Kconfig help text - Revise update()/get() for supporting 16384 steps (MT6372) - Revise all shift usages form using 'ffs() and fls()' to defining the _SHIFT macros. - Revise 'brightness ? 1 : 0' to '!!brightness' in gpiod_set_value() Changes in v6: - In Patch 03/13: - Add 'reg' property of led of multi-led to prevent checking error. - In Patch 08/13: - Convert tcpci as device resource managed with 'devm_add_action_or_reset' api. - Refine remvoe callback. - Refine the commit text from 'this commit add' to 'add'. - In Patch 09/13: - Using 'struct device *dev = &pdev->dev' in probe() - Revise the sixth parameter of regmap_read_poll_timeout() by Replacing '1000' with 'MILLI' - Revise the units of three macros - MT6370_AICR_400MA --> MT6370_AICR_400_mA - MT6370_ICHG_500MA --> MT6370_ICHG_500_mA - MT6370_ICHG_900MA --> MT6370_ICHG_900_mA - In patch 10/13: - Remove the varable (*psy_desc) of struct mt6370_priv - Remove the deprecated usb type (POWER_SUPPLY_TYPE_USB_CDP and POWER_SUPPLY_TYPE_USB_DCP) - Remove useless remove() - Revise all units from mini- to micro- - Revise get/set power_supply_prop (change to directly return get/set regmap_field) - Revise probe() and use devm_add_action_or_reset() for handling of the workqueue/delayed_work/mutex - Revise mt6370_chg_psy_desc - Add '.name = "mt6370-charger"' - Use 'static const' - In patch 11/13: - Remove the 'ko' from mt6370 led Kconfig description. - Add both authors for Alice and ChiYuan. - Use pdata to distinguish the code from mt6370/71 to mt6372. - Instead of 'state' define, use the 'state' enum. - Fix the typo for 'MT6372_PMW_DUTY'. - For pwm_duty define, replace with bit macro - 1. - Refine all the labels from 'out' to 'out_unlock'. - Use struct 'dev' variable and 'dev_err_probe' to optimize the LOC. - Revise for the array initialization from {0} to {}. - Move into rgb folder and rename file name to 'leds-mt6370-rgb'. - Refine the 'comma' usage in struct/enum. - In patch 12/13: - Use 'GENMASK' instead of 'BIT'. - Use dev_err_probe to decrease LOC. - Use 'dev' variable to make probe function more clean. - Refine the return of _mt6370_flash_brightness_set function. - Refine the descriptions. - Use mt6370_clamp() instead of clamp_align(). - Use device resource managed API for v4l2 flash_release. Changes in v5: - In patch 07/13: - Add the comma in the last REGMAP_IRQ_REG_LINE(), DEFINE_RES_IRQ_NAMED() and MFD_CELL_RES() - Add the prefix in the first parameter of all mfd_cell - Move enum and struct mt6370_info to mt6370.h - Remove struct device *dev in struct mt6370_info - Revise the description of Kconfig help text - Revise MODULE_DESCRIPTION() - In patch 08/13: - Add comma for the last index of mt6370_reg_init. - Use dev_err_probe to decrease LOC. - Use 'dev' variable to make probe function more clean. - Refine kconfig text. - Remove both 'else' in set_vbus callback. - Remove comma for of_device_id if the assigned member is only one. - In patch 09/13: - Replace using snprintf() with sysfs_emit() in mt6370_adc_read_label() - Remove macro ADC_CONV_TIME_US - Revise all variable ordering - Revise the description of Kconfig help text - Revise MODULE_DESCRIPTION() - In patch 10/13: - Replace unsigned int type of pwr_rdy with bool in mt6370_chg_set_online() - Remove redundant 'else' in mt6370_chg_field_get() - Revise 'if-else' in mt6370_chg_field_set() - Revise 'if' condition in mt6370_chg_enable_irq() - Revise all text 'otg' --> 'OTG' - Revise MT6370_MIVR_IBUS_TH_100_MA --> MT6370_MIVR_IBUS_TH_100_mA - Revise the description of Kconfig help text - In patch 12/13: - Refine the coding style. - Use "dev" instead of "&pdev->dev". - In patch 13/13: - Add missed - Add struct device *dev in probe() to make code cleaning - Remove useless including header file , - Remove useless variable uasage in mt6370_init_backlight_properties() - Remove redundant checking enable_gpio in mt6370_bl_update_status() - Remove redundant parentheses in mt6370_bl_get_brightness() - Revise the description of Kconfig help text - Revise the calculation of hys_th_steps Changes in v4: - In patch 02/13: - Add minItems of "io-channel-names" - Replace text "Mediatek" with "MediaTek" - In patch 06/13: - Roll back all "$ref: " to v2 patch style (using "/schemas/...") - In patch 07/13: - Replace text "Mediatek" with "MediaTek" in Kconfig - Replace "first break and then return" with "return directly" in "mt6370_check_vendor_info()" - Add module name related description in Kconfig helptext - Add Copyright in the source code - Add header file "mt6370.h" for all "#define IRQ" - Adjust Makefile order of MT6370 - Refine "bank_idx" and "bank_addr" in "mt6375_regmap_read()" / "mt6375_regmap_write()" - Refine redundant "else if" in "mt6370_regmap_read()" - In patch 08/13: - Replace text "Mediatek" with "MediaTek" in Kconfig - Replace "first ret=regulator_(dis/en)able and then return" with "return directly" in "mt6370_tcpc_set_vbus()" - Replace header file with - Add Copyright in the source code - Add module name related description in Kconfig helptext - Remove header file - Refine all probe error by using dev_err_probe() - In patch 09/13: - Replace text "Mediatek" with "MediaTek" - Replace all "first dev_err() and then return" with "return dev_err_probe()" - Add Copyright in the source code - Add module name related description in Kconfig - Add unit suffix of macro "ADC_CONV_POLLING_TIME" - Add new macro "ADC_CONV_TIME_MS" - Adjust the position of include file - Adjust the postions between and - Fix some incorrect characters - In patch 10/13: - Replace text "Mediatek" with "MediaTek" in Kconfig and MODULE_DESCRIPTION() - Replace "mt6370_chg_val_to_reg" and "mt6370_chg_reg_to_val" with "linear_range" API - Replace "first break and then return" with "return directly" in all cases of get/set power_supply_property - Replace all "first dev_err() and then return" with "return dev_err_probe()" - Replace all "return IS_ERR(priv->rdev) ? PTR_ERR(priv->rdev) : 0" with "PTR_ERR_OR_ZERO()" - Replace "priv->dev->of_node" with "dev_of_node()" - Add Copyright in the source code - Add module name related description in Kconfig helptext - Add proper unit of "MT6370_MIVR_IBUS_TH" - Add error check in "mt6370_chg_get_status" - Remove including header file - Remove redundant comma of every enum terminator line - Remove unwanted blank lines - Remove the useless label (toggle_cfo_exit:) - Remove using atomic - Remove using of_match_ptr() - Fix some incorrect characters - Fix updating wrong bits when using ena_gpiod of OTG regulator - Adjust the probe order in probe() - In patch 11/13: - Replace text "Mediatek" with "MediaTek" in Kconfig - Replace text "const" with "constant" in Kconfig - Add Copyright in the source code - In patch 12/13: - Replace text "Mediatek" with "MediaTek" in Kconfig - Add Copyright in the source code - In patch 13/13: - Replace text "Mediatek" with "MediaTek" in Kconfig - Add Copyright in the source code - Revise the comment of "PWM HYS STEPS" Changes in v3: - Remove ADC ABI file, which is added in v2 Patch 7 - In patch 02/14: - Add items and remove maxItems of io-channels - Add io-channel-names and describe each item - Add "unevaluatedProperties: false" in "usb-otg-vbus-regulator" - Rename "enable-gpio" to "enable-gpios" in "usb-otg-vbus-regulator" - In patch 03/14: - Use leds-class-multicolor.yaml instead of common.yaml. - Split multi-led and led node. - Add subdevice "led" in "multi-led". - In patch 04/14: - Remove the description of enum. - In patch 05/14: - Rename "mediatek,bled-pwm-hys-input-threshold-steps" to "mediatek,bled-pwm-hys-input-th-steps" - Refine "bled-pwm-hys-input-th-steps", "bled-ovp-microvolt", "bled-ocp-microamp" enum values - In patch 06/14: - Use " in entire patchset - Refine ADC description - Rename "enable-gpio" to "enable-gpios" in "regualtor" - In patch 07/14: - Refine Kconfig help text - Refine error message of unknown vendor ID in mt6370_check_vendor_info() - Refine return value handling of mt6370_regmap_read() - Refine all probe error by using dev_err_probe() - Refine "bank_idx" and "bank_addr" in mt6370_regmap_read() and mt6370_regmap_write() - Add "#define VENID*" and drop the comments in mt6370_check_vendor_info() - Drop "MFD" in MODULE_DESCRIPTION() - In patch 09/14: - Refine Kconfig help text - In patch 10/14: - Refine Kconfig help text - Refine all channel value in read_scale() a. current: uA --> mA b. voltage: uV --> mV c. temperature: degrees Celsius --> milli degrees Celsius - Add "default:" condition of switch statement in read_scale() and read_raw() - Add error message for reading ADC register failed - Add the comment for adc_lock - Add header file for struct of_device_id - Replace "adc" text with "ADC" in all of the error messages - In patch 12/14: - Refine the grammer of the Kconfig. - Change reg mode to the const current mode. - In patch 14/14: - Refine bool properties parsing (pwm-enable, ovp-shutdown, ocp-shutdown) in DT parsing function - Refine u32 and u8 properties parsing (pwm-hys-input-th-steps, ovp-microvolt, ocp-microamp), from using register value to using actual value - Refine error string of "channle-use" parsing failed - Refine Kconfig help text Changes in v2: - In patch 01/15: - Add "unevaluatedProperties: false". - Delete "DT bindings". - Refine the description to fit in 80 columns. - Skip the connector description. - In patch 02/15: - Refine items description of interrupt-name - Rename "usb-otg-vbus" to "usb-otg-vbus-regulator" - Add constraint properties for ADC - In patch 03/15: - Skip not useful description of "^(multi-)?led@[0-3]$" and reg. - Due to the dependency, remove the mention of mfd document directory. - Delete Soft-start property. In design aspect, we think soft-restart should always be enabled, our new chip has deleted the related setting register , also, we don’t allow user adjust this parameter in this chip. - Refine the commit message. - In patch 04/15: - Skip not useful description of "^led@[0-1]$" and reg. - Add apace after '#'. - Refine the commit message. - In patch 05/15: - Remove "binding documentation" in subject title - Refine description of mt6370 backlight binding document - Refine properties name(bled-pwm-hys-input-bit, bled-ovp-microvolt, bled-ocp-microamp) and their description - In patch 06/15: - Refine ADC and Regulator descriptions - Refine include header usage in example - Refine node name to generic node name("pmic@34") - Refine led example indentation - Refine license of mediatek,mt6370_adc.h - Rename the dts example from IRQ define to number. - Remove mediatek,mt6370.h - In patch 07/15: - Add ABI documentation for mt6370 non-standard ADC sysfs interfaces. - In patch 08/15: - Add all IRQ define into mt6370.c. - Refine include header usage - In patch 09/15: - No changes. - In patch 10/15: - Use 'gpiod_get_from_of_node' to replace 'fwnode_gpiod_get_index'. - In patch 11/15: - Refine Kconfig mt6370 help text - Refine mask&shift to FIELD_PREP() - Refine mutex lock name ("lock" -> "adc_lock") - Refine mt6370_adc_read_scale() - Refine mt6370_adc_read_offset() - Refine mt6370_channel_labels[] by using enum to index chan spec - Refine MT6370_ADC_CHAN() - Refine indio_dev->name - Remove useless include header files - In patch 12/15: - Refine mt6370_chg_otg_rdesc.of_match ("mt6370,otg-vbus" -> "usb-otg-vbus-regulator") to match DT binding - In patch 13/15: - Refine Kconfig description. - Remove include "linux/of.h" and use "linux/mod_devicetable.h". - Place a comma for the last element of the const unsigned int array. - Add a comment line for the mutex 'lock'. - In probe function, use 'dev_err_probe' in some judgement to reduce the LOC. - Refine include header usage. BIT/GENMASK -> linux/bits.h FIELD_GET -> linux/bitfield.h - In patch 14/15: - Add blank line. - Replace container_of() with to_mt6370_led() . - Refine description of ramping. - Refine the mt6370_init_common_properties function. - Refine the probe return. - In patch 15/15: - Refine MT6370 help text in Kconfig - Refine DT Parse function - Remove useless enum - Add comment for 6372 backward compatible in bl_update_status() and check_vendor_info() - Using dev_err_probe(); insteads dev_err()&return; in the probe() Alice Chen (2): dt-bindings: leds: Add MediaTek MT6370 flashlight leds: flash: mt6370: Add MediaTek MT6370 flashlight support ChiYuan Huang (2): dt-bindings: leds: mt6370: Add MediaTek MT6370 current sink type LED indicator leds: rgb: mt6370: Add MediaTek MT6370 current sink type LED Indicator support ChiaEn Wu (1): iio: adc: mt6370: Add MediaTek MT6370 support .../bindings/leds/mediatek,mt6370-flashlight.yaml | 41 + .../bindings/leds/mediatek,mt6370-indicator.yaml | 81 ++ drivers/iio/adc/Kconfig | 12 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/mt6370-adc.c | 305 ++++++ drivers/leds/flash/Kconfig | 14 + drivers/leds/flash/Makefile | 1 + drivers/leds/flash/leds-mt6370-flash.c | 631 ++++++++++++ drivers/leds/rgb/Kconfig | 13 + drivers/leds/rgb/Makefile | 1 + drivers/leds/rgb/leds-mt6370-rgb.c | 1010 ++++++++++++++++++++ 11 files changed, 2110 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/mediatek,mt6370-flashlight.yaml create mode 100644 Documentation/devicetree/bindings/leds/mediatek,mt6370-indicator.yaml create mode 100644 drivers/iio/adc/mt6370-adc.c create mode 100644 drivers/leds/flash/leds-mt6370-flash.c create mode 100644 drivers/leds/rgb/leds-mt6370-rgb.c -- 2.7.4 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 8DADFECAAD8 for ; Fri, 23 Sep 2022 02:53:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version: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:In-Reply-To:References: List-Owner; bh=0/YfVhDVqg1i2mNKyihwNmr2yFhF9fCFnfV4fNduYbw=; b=r+y56piI2s8T2X t8XgJR8SGMBq3gt7fWu0+E5w3XliRUCuRXabDIV4ZWtG/sLplfKfbBfGTdPxB3O7KscGV+t+UTXKX 8EXLxIRYRYthv6YMV2qeGqC6Bi0CEvnzNEJfWMYtO4syov4UN6olC91HDpFGO3JAkLkDKdZCI7Dih q8fvhCSdZJw9ReNIydEqhBFdK7+LnNe5H3bSQ0BtuyN4vLJTNZN0X6qtpR0IJcCyfKWVCqcFSoFS6 lEt2v7Kkg1WsWqdpjURGX0xFhUksCl99POwC1Q+lq6swQTMJwwUtDbC6XA5bK9Z533Dfky9SKd9Wt gJ2IUsBKJqxIBtGoPgKA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1obYnK-001cVW-Vx; Fri, 23 Sep 2022 02:52:03 +0000 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1obYnA-001cSv-BN; Fri, 23 Sep 2022 02:51:55 +0000 Received: by mail-pj1-x1036.google.com with SMTP id fv3so11689974pjb.0; Thu, 22 Sep 2022 19:51:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date; bh=a0siKTUe6VkWkGnovJyPWl+zYDlkEXkKiu5zd0hOi/4=; b=PUDpaej+QtKfqIaRn9xsoxuQdJoLPs/PMA9yJSrzYQsGfXtqeA04rdFIxsIBmVnPT4 bbiyLm8Hgp0QrGXB4s6/IgFgWM+turLd5mtALWA18sugoOdVLoq9acn7FchqHlD+67gP 5OfSVIkgFp14CYQaGQLhW+IIlwmMOX4Z8UKDrLn0UQnRQLmjff5gE+Rs9ZpufUhMsMWM DYoPhNDDejWRbWST8hPMxAV3tzojcBZTQj/rurijRnBRi250f7N6lzQmREiTSVNIDT5O K9GRH4m86FbsLHHLUPxkdijt2hI4QdI2tLcWXaMwDjZ1H952B5Mn/qrSz9ejJtiTZDN5 Rgxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date; bh=a0siKTUe6VkWkGnovJyPWl+zYDlkEXkKiu5zd0hOi/4=; b=q1+A7cBAkNKv/D7x503/ydD924Lpb98MnlJ1EIuitd/WK6Qgcxj2fFcwq2jMuGfK/A tT/gIdqZCdameYCBqtiw0wRYW6zblZv0sote8hbj/g+KXyDKJ2g1Ba+wCTQyC3rjC8kI 2npZyZTP/AaGU8xoZvqzWRtzfNdQYy1XddFqSq2Xlu/PAAFfWGP1A1mGCbd6axwOQAdL M7IXPS6UBao9IFeeYFQsdWjVO6dDAuHH/ybXnQneBNCpn5Jh3EjbARlUC+l3Nmv2hcDc Pv4iRb84/2oereYWUhTebdi9aKljYOkz7sstmtAJK00eHGA+s3aV71gO43R3s47bcAzZ PLxg== X-Gm-Message-State: ACrzQf12IXR9ey5JPxxRwZMsGwwO0JDqSNG4YIH2V8o9q1Pft197Afoz nhsxhurj08bdnyTgLYgO0n4= X-Google-Smtp-Source: AMsMyM5BU9nHP2pU8tSJEurHOSudaNAyID565NVKxj/YHE2rdf3M6xH9WNKkF9YLzKZ2nuEi2XwMYQ== X-Received: by 2002:a17:902:d2d2:b0:178:a68:f40f with SMTP id n18-20020a170902d2d200b001780a68f40fmr6366093plc.149.1663901510226; Thu, 22 Sep 2022 19:51:50 -0700 (PDT) Received: from RD-3580-24288.rt.l (42-76-89-227.emome-ip.hinet.net. [42.76.89.227]) by smtp.gmail.com with ESMTPSA id f21-20020a623815000000b0053e85a4a2c9sm5167058pfa.5.2022.09.22.19.51.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Sep 2022 19:51:49 -0700 (PDT) From: ChiaEn Wu To: pavel@ucw.cz, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, matthias.bgg@gmail.com, jic23@kernel.org, lars@metafoo.de, andriy.shevchenko@linux.intel.com Cc: chiaen_wu@richtek.com, alice_chen@richtek.com, cy_huang@richtek.com, linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org, szunichen@gmail.com Subject: [PATCH v12 0/5] Add MediaTek MT6370 PMIC support Date: Fri, 23 Sep 2022 10:51:20 +0800 Message-Id: X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220922_195152_453932_E7999414 X-CRM114-Status: GOOD ( 23.84 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogQ2hpYUVuIFd1IDxjaGlhZW5fd3VAcmljaHRlay5jb20+CgpUaGlzIHBhdGNoIHNlcmll cyBhZGQgTWVkaWFUZWsgTVQ2MzcwIFBNSUMgc3VwcG9ydCBhbmQgYWRkIGEgaW5kZXggbWFjcm8K dG8gPGxpbmVhcl9yYW5nZS5oPi4gVGhlIE1UNjM3MCBpcyBhIGhpZ2hseS1pbnRlZ3JhdGVkIHNt YXJ0IHBvd2VyCm1hbmFnZW1lbnQgSUMsIHdoaWNoIGluY2x1ZGVzIGEgc2luZ2xlIGNlbGwgTGkt SW9uL0xpLVBvbHltZXIgc3dpdGNoaW5nCmJhdHRlcnkgY2hhcmdlciwgYSBVU0IgVHlwZS1DICYg UG93ZXIgRGVsaXZlcnkgKFBEKSBjb250cm9sbGVyLCBkdWFsCkZsYXNoIExFRCBjdXJyZW50IHNv dXJjZXMsIGEgUkdCIExFRCBkcml2ZXIsIGEgYmFja2xpZ2h0IFdMRUQgZHJpdmVyLAphIGRpc3Bs YXkgYmlhcyBkcml2ZXIgYW5kIGEgZ2VuZXJhbCBMRE8gZm9yIHBvcnRhYmxlIGRldmljZXMuCgpG aXJzdCwgaW4gdGhpcyBzZXJpZXMgb2YgcGF0Y2hlcywKLSAnZHQtYmluZGluZzogbWZkJyBhbmQg J21mZCBkcml2ZXInIGhhdmUgYmVlbiBhcHBsaWVkIGJ5IExlZSBpbiB0aGUgdjcuCiAgaHR0cHM6 Ly9sb3JlLmtlcm5lbC5vcmcvYWxsL1l2SmRwcTBNV05QUVp3NWNAZ29vZ2xlLmNvbS8KICBodHRw czovL2xvcmUua2VybmVsLm9yZy9hbGwvWXZKZHhFcEMyY0I1OEJxOUBnb29nbGUuY29tLwoKLSAn dGNwY2kgZHJpdmVyJyBoYXMgYmVlbiBhcHBsaWVkIGJ5IEdyZWcgaW4gdGhlIHY4LgogIGh0dHBz Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dyZWdraC91c2IuZ2l0 L2NvbW1pdC8/aD11c2ItbmV4dCZpZD1jMmE4ZWE1OTk3ZmRmZWI0M2VkYTI1OWQ1NTMzMjM0YzNj YWUwNWQ3CgotICdkdC1iaW5kaW5nOiBiYWNrbGlnaHQnIGFuZCAnYmFja2xpZ2h0IGRyaXZlcicg aGF2ZSBiZWVuIGFwcGxpZWQKICBieSBMZWUgaW4gdjkuCiAgaHR0cHM6Ly9sb3JlLmtlcm5lbC5v cmcvYWxsL1l4WVNEU2xuT0VMTDJtUEZAZ29vZ2xlLmNvbS8KICBodHRwczovL2xvcmUua2VybmVs Lm9yZy9hbGwvWXhZUzclMkZkWkk2OWxNWGVoQGdvb2dsZS5jb20vCgotICdkdC1iaW5kaW5nOiBj aGFyZ2VyJywgJ2NoYXJnZXIgZHJpdmVyJyBhbmQgJ2xpbmVhcl9yYW5nZS5oJyBwYXRjaCBoYXZl CiAgYmVlbiBhcHBsaWVkIGJ5IFNlYmFzdGlhbiBpbiB2MTEuCiAgaHR0cHM6Ly9sb3JlLmtlcm5l bC5vcmcvYWxsLzIwMjIwOTIwMTYwODU3LjZxZmk2Nmd0bWd3ZXNxN2dAbWVyY3VyeS5lbGVrdHJh bm94Lm9yZy8KICBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwvMjAyMjA5MjAxNjEyMTguZGtr ZnZmb21ycnVlYmFoaUBtZXJjdXJ5LmVsZWt0cmFub3gub3JnLwogIGh0dHBzOi8vbG9yZS5rZXJu ZWwub3JnL2FsbC8yMDIyMDkyMDE2MTIzOC5kc3d0bXlvbjQ2MjMyNGRtQG1lcmN1cnkuZWxla3Ry YW5veC5vcmcvCgpTZWNvbmQsIHRoZSBMRUQgUkdCIGRyaXZlciBpcyBiYXNlZCBvbiBBbmR5J3Mg cGF0Y2ggd2hpY2ggbW92ZXMKbGVkX2luaXRfZGVmYXVsdF9zdGF0ZV9nZXQoKSB0byB0aGUgZ2xv YmFsIGhlYWRlci4KaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjIwODA1MTU0OTA3LjMy MjYzLTMtYW5kcml5LnNoZXZjaGVua29AbGludXguaW50ZWwuY29tLwoKSW4gYWRkaXRpb24sIHdl IG1hZGUgc29tZSBjaGFuZ2VzIGZvciBNVDYzNzAgZmxhc2ggZHJpdmVyIChzZWUgdjEyIHNlY3Rp b24Kb2YgdGhlIGNoYW5nZSBsb2cgYmVsb3cpLgoKVGhhbmsgeW91LApDaGlhRW4gV3UKLS0tCkNo YW5nZSBpbiB2MTI6Ci0gSW4gUGF0Y2ggNS81IChNVDYzNzAgRmxhc2gpOgoJLSBSZW5hbWUgYWxs ICdsZWRfZmxhc2hfc2V0dGluZyAqcycgLS0+ICdsZWRfZmxhc2hfc2V0dGluZyAqc2V0dGluZycK CS0gUmVuYW1lICdtYXhfdUEnIC0tPiAnbWF4X3VhJyBpbiBtdDYzNzBfaW5pdF9mbGFzaF9wcm9w ZXJ0aWVzKCkKCgpDaGFuZ2UgaW4gdjExOgotIEluIFBhdGNoIDEvOCAoZHQtYmluZGluZ3M6IE1U NjM3MCBDaGFyZ2VyKQoJLSBBZGQgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBpcnFzLgoJ LSBBZHVqdXN0IHRoZSBvcmRlciBvZiBpcnFzCgoKQ2hhbmdlIGluIHYxMDoKLSBJbiBQYXRjaCA2 LzggKE1UNjM3MCBDaGFyZ2VyKToKCS0gQWRkIGEgZmVhdHVyZSAoZGlzYWJsZSBpbnB1dCBjdXJy ZW50IGxpbWl0KSBpbgoJICAnbXQ2MzcwX2NoZ19pbml0X3NldHRpbmcoKScKCS0gQWRkIHRoZSBo ZWFkZXIgZmlsZSA8bGludXgvZGV2bS1oZWxwZXJzLmg+IGZvciB1c2luZwoJICAnZGV2bV93b3Jr X2F1dG9jYW5jZWwoKScgYW5kICdkZXZtX2RlbGF5ZWRfd29ya19hdXRvY2FuY2VsKCkKCS0gUmVu YW1lICdwd3JfcmR5JyB0byAnb3Bwb3NpdGVfcHdyX3JkeScgaW4KCSAgJ210NjM3MF9jaGdfcHdy X3JkeV9jaGVjaygpJwoJLSBSZW5hbWUgZW51bSBlbGVtZW50cwoJICAoJ01UNjM3MF9BVFRBQ0hf U1RBVF9BVFRBQ0hfQkMxMl9OT1RfRE9ORScgLS0+CgkgICAnTVQ2MzcwX0FUVEFDSF9TVEFUX0FU VEFDSF9XQUlUX0ZPUl9CQzEyJykKCS0gUmV2aXNlIHRoZSBhc3NpZ25tZW50IHZhbHVlIG9mICd2 YWwuaW50dmFsJyBpbgoJICAnbXQ2MzcwX2NoZ19wd3JfcmR5X2NoZWNrKCknIHRvIG1ha2UgdGhl IGNvZGUgZWFzeSB0byByZWFkLgoJLSBSZXZpc2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGJjMTJf d29yayAoSU5JVF9XT1JLKCkgLS0+CgkgIHVzaW5nIGRldm1fd29ya19hdXRvY2FuY2VsKCkpIGFu ZCBtaXZyX2R3b3JrCgkgIChJTklUX0RFTEFZRURfV09SSyArIGRldm1fYWRkX2FjdGlvbl9vcl9y ZXNldCgpIC0tPgoJICAgZGV2bV9kZWxheWVkX3dvcmtfYXV0b2NhbmNlbCgpKQoKLSBJbiBQYXRj aCA4LzggKE1UNjM3MCBMRUQgRmxhc2hsaWdodCk6CgktIEFkZCB0aGUgcmV2ZXJ0IGNvZGUgd2hl biAnX19tdDYzNzBfZmxhc2hfYnJpZ2h0bmVzc19zZXQoKScKCSAgcmV0dXJuIGZhaWxlZC4KCS0g UmV2aXNlIHR5cGUgb2YgJ2xlZF9ubycgKHUzMiAtPiB1OCkKCS0gUmV2aXNlIHR5cGUgb2YgJ2Rl ZmF1bHRfc3RhdGUnICh1MzIgLT4gZW51bSBsZWRfZGVmYXVsdF9zdGF0ZSkKCS0gUmV2aXNlIHRo ZSByZXR1cm4gdmFsdWUgb2YgJ19tdDYzNzBfZmxhc2hfYnJpZ2h0bmVzc19zZXQoKScKCS0gUmVt b3ZlIHRoZSB1c2VsZXNzIGZ1bmN0aW9uICdtdDYzNzBfaW5pdF9jb21tb25fcHJvcGVydGllcygp JwoJLSBVc2UgJ2xlZF9pbml0X2RlZmF1bHRfc3RhdGVfZ2V0KCknIHRvIGluaXQgJ2xlZC0+ZGVm YXVsdF9zdGF0ZScKCgpDaGFuZ2VzIGluIHY5OgotIEluIFBhdGNoIDA1LzEwOgoJLSBSZXZpc2Ug TElORUFSX1JBTkdFKCkgYW5kIExJTkVBUl9SQU5HRV9JRFgoKQoKLSBJbiBQYXRjaCAwNy8xMDoK CS0gRml4IHdyb25nICdGX0lJTkxNVFNFTCcgc2V0dGluZyBpbiAnbXQ2MzcwX2NoZ19pbml0X3Nl dHRpbmcoKScKCS0gUmV2aXNlIHRoZSB1c2FnZSBvZiBMSU5FQVJfUkFOR0VfSURYKCkKCi0gSW4g UGF0Y2ggMDkvMTA6CgktIFJldmlzZSB0aGUgZm9ybWF0IG9mIHRoZSBjb21tZW50cy4KCi0gSW4g UGF0Y2ggMTAvMTA6CgktIFJldmlzZSB0aGUgZm9ybWF0IG9mIHRoZSBjb21tZW50cy4KCgpDaGFu Z2VzIGluIHY4OgotIEluIFBhdGNoIDA2LzEyOgoJLSBBZGQgbGluZWFyX3JhbmdlX2lkeCBtYWNy byBmb3IgZGVjbGFyaW5nIHRoZSBsaW5lYXJfcmFuZ2UKCSAgc3RydWN0IHNpbXBseS4KCi0gSW4g UGF0Y2ggMDkvMTI6CgktIFJlbW92ZSBNVDYzNzBfQ0hHX0xJTkVBUl9SQU5HRSgpIG1hY3JvLCBh bmQgY2hhbmdlIHRvIHVzZQoJICBMSU5FQVJfUkFOR0VfSURYKCkgbWFjcm8KCi0gSW4gUGF0Y2gg MTAvMTI6CgktIEFkZCBpbmNsdWRlIGhlYWRlciBmaWxlIDxsaW51eC9sZWRzLmg+CgktIFJlbW92 ZSB1c2VsZXNzICdlbnVtIG10NjM3MF9zdGF0ZScgYmVjYXVzZSBvZiB1c2luZyAnZW51bSBsZWRf ZGVmYXVsdF9zdGF0ZScKCS0gUmV2aXNlIHRoZSBjYWxjdWxhdGlvbiBvZiAndmFsJyBpbiAnbXQ2 MzcwX2dlbl9icmVhdGhfcGF0dGVybigpJwoJLSBSZXBsYWNlIHRoZSBtZWR0aG9kIG9mIGdldHRp bmcgZGVmYXVsdC1zdGF0ZSBieSB1c2luZwoJICBsZWRfaW5pdF9kZWZhdWx0X3N0YXRlX2dldCgp CgotIEluIFBhdGNoIDExLzEyOgoJLSBBZGQgbWlzc2luZyAnZGVwZW5kZW5jeSBjb25maWcnIGlu IEtjb25maWcKCS0gUmV2aXNlIGFsbCBtdWx0aS1saW5lIGNvbW1lbnRzCgotIEluIFBhdGNoIDEy LzEyOgoJLSBBZGQgbWlzc2luZyBoZWFkZXIgZmlsZSA8bGludXgvcHJvcGVydHkuaD4KCS0gUmVt b3ZlIHVzZWxlZGQgaGVhZGVyIGZpbGUgPGxpbnV4L29mX2RldmljZS5oPgoJLSBSZXZpc2UgdGhl IGNvbW1lbnQgb2YgJ210NjM3MF9jaGVja192ZW5kb3JfaW5mbygpJwoKCkNoYW5nZXMgaW4gdjc6 Ci0gSW4gUGF0Y2ggMDUvMTM6CgktIEFkZCB0aGUgc2Vjb25kIGNvbXBhdGlibGUgc3RyaW5nIGZv ciAnbXQ2MzcyJwoJLSBBZGQgJ21lZGlhdGVrLGJsZWQtZXhwb25lbnRpYWwtbW9kZS1lbmFibGUn IHByb3BlcnR5IGZvciBlbmFibGUgdGhlCgkgIGV4cG9uZW50aWFsIG1vZGUgb2YgYmFja2xpZ2h0 IGJyaWdodG5lc3MKCS0gQWRkIHZhbGlkYXRpb24gZm9yIHRoZSBtYXhpbXVtIHZhbHVlIG9mICdk ZWZhdWx0LWJyaWdodG5lc3MnIGFuZAoJICAnbWF4LWJyaWdodG5lc3MnCgotIEluIFBhdGNoIDA3 LzEzOgoJLSBNb3ZlICcjZGVmaW5lIE1UNjM3MF9SRUdfTUFYQUREUicgdG8gdGhlIG5leHQgbGlu ZSBvZgoJICAnI2RlZmluZSBNVDYzNzBfUkVHX0NIR19NQVNLMScKCS0gUmVuYW1lICdNVDYzNzBf UkVHX0FERFJMRU4nIHRvICdNVDYzNzBfTUFYX0FERFJMRU4nCgotIEluIFBhdGNoIDA4LzEzOgoJ LSBSZXZpc2UgJ2Rldm1fYWRkX2FjdGlvbl9vcl9yZXNldChkZXYsIC4uLiknIHRvIG9uZSBsaW5l CgktIFJldmlzZSAncmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyguLi4pJyB3aXRoIHVzaW5nIHBv c2l0aXZlCgkgIGNvbmRpdGlvbmFsCgotIEluIFBhdGNoIDA5LzEzOgoJLSBBZGQgQUlDUigxMDBt QSB+IDM1MG1BKSwgSUNIRygxMDBtQSB+IDgwMG1BKSBtYWNyb3MKCS0gUmVtb3ZlIDQwMG1BIEFJ Q1IgYW5kIDkwMG1BIElDSEcgbWFjcm9zCgktIFJldmlzZSB1c2luZyAnaWYtZWxzZScgdG8gJ3N3 aXRjaC1jYXNlJyBpbiBtdDYzNzBfYWRjX3JlYWRfc2NhbGUoKQoJICB3aGVyZSB0aGUgYWRjIGNo YW5uZWwgaXMgaWJ1cyBvciBpYmF0CgotIEluIFBhdGNoIDEwLzEzOgoJLSBSZXZpc2UgdGhlIG1l dGhvZCB0byBlbmFibGUvZGlzYWJsZSBpcnEKCS0gUmV2aXNlIGFsbCAnaWYgKHJldCA8IDApJyB0 byAnaWYgKHJldCknIGFmdGVyIHVzaW5nCgkgIG10NjM3MF9jaGdfZmllbGRfc2V0L2dldCgpCgkt IFJldmlzZSBhbGwgJ09URycgdGV4dCBhZ2FpbgoKLSBJbiBQYXRjaCAxMS8xMzoKCS0gQWRkIHRo ZSBjb21tZW50IGZvciB0aGUgdW5pb24gb2YgJ3N0cnVjdCBtdDYzNzBfbGVkJwoJLSBSZXZpc2Ug dGhlIHdyb25nIGRlc2NyaXB0aW9uIG9mICdBdXRob3JzJwoJLSBSZXZpc2Ugc29tZSB0eXBvcyAo ZS5nLiBsZWQgLS0+IExFRCkKCS0gUmV2aXNlICdpZiAoIWZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0 cmluZygpKScgdG8KCSAgJ3JldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3N0cmluZygpJwoJLSBS ZXBsYWNlICdtZW1jcHkoLi4uKScgd2l0aCAncHV0X3VuYWxpZ25lZF9iZTI0KCknIGluCgkgIG10 NjM3MF9nZW5fYnJlYXRoX3BhdHRlcm4oKQoJLSBSZXBsYWNlIGFsbCAnTEVEX09GRicgd2l0aCAw CgktIFJlbW92ZSB0aGUgcmVkdW5kYW50IGFzc2lnbm1lbnQgaW4gbXQ2MzcwX21jX3BhdHRlcm5f Y2xlYXIoKQoKLSBJbiBQYXRjaCAxMi8xMzoKCS0gRml4IHRoZSBpbmRlbnRhdGlvbi4KCS0gRm9y IHRoZSB3ZWxsIGRlZmluZWQgbWFjcm8sIHRoZSBwYXJlbnRoZXNpcyBpcyBuZWVkZWQgZm9yIGlu cHV0IHBhcmFtZXRlcnMuCgktIFJlcGxhY2Ugc29tZSBkZXZfd2FybiB0byBkZXZfaW5mbyBpbiAn aW5pdF9mbGFzaF9wcm9wZXJ0aWVzJy4KCS0gQWRkIHNlbnRpbmVsIGNvbW1lbnQgZm9yIHRoZSB0 ZXJtaW5hdG9yIGVudHJ5IG9mIG9mX2RldmljZV9pZC4KCS0gVXNlIHByaXYtPmZsZWRfdG9yY2hf dXNlZCBkaXJlY3RseS4KCS0gRGVsZXRlIDAgaW4ge30uCgktIFVzZSBfdUEgaW5zdGVhZCBvZiBf VUEgaW4gZGVmaW5pdGlvbi4KCS0gUmVmaW5lIHRoZSBkZXNjcmlwdGlvbi4KCS0gVXNlIHVzbGVl cF9yYW5nZSBpbnN0ZWFkIG9mIHVkZWxheS4KCS0gUmVuYW1lIGNvbmZpZyB0byBMRURTX01UNjM3 MF9GTEFTSC4KCS0gQWRkIG1pc3NpbmcgIj4iIGluIGNvcHlyaWdodC4KCS0gQ2hhbmdlIHRoZSBL Y29uZmlnIG9yZGVyCgotIEluIFBhdGNoIDEzLzEzOgoJLSBBZGQgc3VwcG9ydCAnZXhwb25lbnRp YWwgbW9kZScgcHJvcGVydHkgcGFyc2luZwoJLSBBZGQgJ3JldHVybiBkZXZfZXJyX3Byb2JlKCkn IGFmdGVyICdpZiAoSVNfRVJSKHByaXYtPmVuYWJsZV9ncGlvKSknCgktIEFkZCAnbXQ2MzcyJyBj b21wYXRpYmxlIHN0cmluZwoJLSBSZXZpc2UgS2NvbmZpZyBoZWxwIHRleHQKCS0gUmV2aXNlIHVw ZGF0ZSgpL2dldCgpIGZvciBzdXBwb3J0aW5nIDE2Mzg0IHN0ZXBzIChNVDYzNzIpCgktIFJldmlz ZSBhbGwgc2hpZnQgdXNhZ2VzIGZvcm0gdXNpbmcgJ2ZmcygpIGFuZCBmbHMoKScgdG8gZGVmaW5p bmcgdGhlCgkgIF9TSElGVCBtYWNyb3MuCgktIFJldmlzZSAnYnJpZ2h0bmVzcyA/IDEgOiAwJyB0 byAnISFicmlnaHRuZXNzJyBpbiBncGlvZF9zZXRfdmFsdWUoKQoKCkNoYW5nZXMgaW4gdjY6Ci0g SW4gUGF0Y2ggMDMvMTM6CgktIEFkZCAncmVnJyBwcm9wZXJ0eSBvZiBsZWQgb2YgbXVsdGktbGVk IHRvIHByZXZlbnQgY2hlY2tpbmcKCSAgZXJyb3IuCgotIEluIFBhdGNoIDA4LzEzOgoJLSBDb252 ZXJ0IHRjcGNpIGFzIGRldmljZSByZXNvdXJjZSBtYW5hZ2VkIHdpdGgKCSAgJ2Rldm1fYWRkX2Fj dGlvbl9vcl9yZXNldCcgYXBpLgoJLSBSZWZpbmUgcmVtdm9lIGNhbGxiYWNrLgoJLSBSZWZpbmUg dGhlIGNvbW1pdCB0ZXh0IGZyb20gJ3RoaXMgY29tbWl0IGFkZCcgdG8gJ2FkZCcuCgotIEluIFBh dGNoIDA5LzEzOgoJLSBVc2luZyAnc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldicgaW4g cHJvYmUoKQoJLSBSZXZpc2UgdGhlIHNpeHRoIHBhcmFtZXRlciBvZiByZWdtYXBfcmVhZF9wb2xs X3RpbWVvdXQoKSBieQoJICBSZXBsYWNpbmcgJzEwMDAnIHdpdGggJ01JTExJJwoJLSBSZXZpc2Ug dGhlIHVuaXRzIG9mIHRocmVlIG1hY3JvcwoJLSBNVDYzNzBfQUlDUl80MDBNQSAtLT4gTVQ2Mzcw X0FJQ1JfNDAwX21BCgktIE1UNjM3MF9JQ0hHXzUwME1BIC0tPiBNVDYzNzBfSUNIR181MDBfbUEK CS0gTVQ2MzcwX0lDSEdfOTAwTUEgLS0+IE1UNjM3MF9JQ0hHXzkwMF9tQQoKLSBJbiBwYXRjaCAx MC8xMzoKCS0gUmVtb3ZlIHRoZSB2YXJhYmxlICgqcHN5X2Rlc2MpIG9mIHN0cnVjdCBtdDYzNzBf cHJpdgoJLSBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgdXNiIHR5cGUgKFBPV0VSX1NVUFBMWV9UWVBF X1VTQl9DRFAgYW5kCgkgIFBPV0VSX1NVUFBMWV9UWVBFX1VTQl9EQ1ApCgktIFJlbW92ZSB1c2Vs ZXNzIHJlbW92ZSgpCgktIFJldmlzZSBhbGwgdW5pdHMgZnJvbSBtaW5pLSB0byBtaWNyby0KCS0g UmV2aXNlIGdldC9zZXQgcG93ZXJfc3VwcGx5X3Byb3AgKGNoYW5nZSB0byBkaXJlY3RseSByZXR1 cm4gZ2V0L3NldAoJICByZWdtYXBfZmllbGQpCgktIFJldmlzZSBwcm9iZSgpIGFuZCB1c2UgZGV2 bV9hZGRfYWN0aW9uX29yX3Jlc2V0KCkgZm9yIGhhbmRsaW5nIG9mIHRoZQoJICB3b3JrcXVldWUv ZGVsYXllZF93b3JrL211dGV4CgktIFJldmlzZSBtdDYzNzBfY2hnX3BzeV9kZXNjCgkJLSBBZGQg Jy5uYW1lID0gIm10NjM3MC1jaGFyZ2VyIicKCQktIFVzZSAnc3RhdGljIGNvbnN0JwoKLSBJbiBw YXRjaCAxMS8xMzoKCS0gUmVtb3ZlIHRoZSAna28nIGZyb20gbXQ2MzcwIGxlZCBLY29uZmlnIGRl c2NyaXB0aW9uLgoJLSBBZGQgYm90aCBhdXRob3JzIGZvciBBbGljZSBhbmQgQ2hpWXVhbi4KCS0g VXNlIHBkYXRhIHRvIGRpc3Rpbmd1aXNoIHRoZSBjb2RlIGZyb20gbXQ2MzcwLzcxIHRvIG10NjM3 Mi4KCS0gSW5zdGVhZCBvZiAnc3RhdGUnIGRlZmluZSwgdXNlIHRoZSAnc3RhdGUnIGVudW0uCgkt IEZpeCB0aGUgdHlwbyBmb3IgJ01UNjM3Ml9QTVdfRFVUWScuCgktIEZvciBwd21fZHV0eSBkZWZp bmUsIHJlcGxhY2Ugd2l0aCBiaXQgbWFjcm8gLSAxLgoJLSBSZWZpbmUgYWxsIHRoZSBsYWJlbHMg ZnJvbSAnb3V0JyB0byAnb3V0X3VubG9jaycuCgktIFVzZSBzdHJ1Y3QgJ2RldicgdmFyaWFibGUg YW5kICdkZXZfZXJyX3Byb2JlJyB0byBvcHRpbWl6ZSB0aGUgTE9DLgoJLSBSZXZpc2UgZm9yIHRo ZSBhcnJheSBpbml0aWFsaXphdGlvbiBmcm9tIHswfSB0byB7fS4KCS0gTW92ZSBpbnRvIHJnYiBm b2xkZXIgYW5kIHJlbmFtZSBmaWxlIG5hbWUgdG8gJ2xlZHMtbXQ2MzcwLXJnYicuCgktIFJlZmlu ZSB0aGUgJ2NvbW1hJyB1c2FnZSBpbiBzdHJ1Y3QvZW51bS4KCi0gSW4gcGF0Y2ggMTIvMTM6Cgkt IFVzZSAnR0VOTUFTSycgaW5zdGVhZCBvZiAnQklUJy4KCS0gVXNlIGRldl9lcnJfcHJvYmUgdG8g ZGVjcmVhc2UgTE9DLgoJLSBVc2UgJ2RldicgdmFyaWFibGUgdG8gbWFrZSBwcm9iZSBmdW5jdGlv biBtb3JlIGNsZWFuLgoJLSBSZWZpbmUgdGhlIHJldHVybiBvZiBfbXQ2MzcwX2ZsYXNoX2JyaWdo dG5lc3Nfc2V0IGZ1bmN0aW9uLgoJLSBSZWZpbmUgdGhlIGRlc2NyaXB0aW9ucy4KCS0gVXNlIG10 NjM3MF9jbGFtcCgpIGluc3RlYWQgb2YgY2xhbXBfYWxpZ24oKS4KCS0gVXNlIGRldmljZSByZXNv dXJjZSBtYW5hZ2VkIEFQSSBmb3IgdjRsMiBmbGFzaF9yZWxlYXNlLgoKCkNoYW5nZXMgaW4gdjU6 Ci0gSW4gcGF0Y2ggMDcvMTM6CgktIEFkZCB0aGUgY29tbWEgaW4gdGhlIGxhc3QgUkVHTUFQX0lS UV9SRUdfTElORSgpLAoJICBERUZJTkVfUkVTX0lSUV9OQU1FRCgpIGFuZCBNRkRfQ0VMTF9SRVMo KQoJLSBBZGQgdGhlIHByZWZpeCBpbiB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIGFsbCBtZmRfY2Vs bAoJLSBNb3ZlIGVudW0gYW5kIHN0cnVjdCBtdDYzNzBfaW5mbyB0byBtdDYzNzAuaAoJLSBSZW1v dmUgc3RydWN0IGRldmljZSAqZGV2IGluIHN0cnVjdCBtdDYzNzBfaW5mbwoJLSBSZXZpc2UgdGhl IGRlc2NyaXB0aW9uIG9mIEtjb25maWcgaGVscCB0ZXh0CgktIFJldmlzZSBNT0RVTEVfREVTQ1JJ UFRJT04oKQoKLSBJbiBwYXRjaCAwOC8xMzoKCS0gQWRkIGNvbW1hIGZvciB0aGUgbGFzdCBpbmRl eCBvZiBtdDYzNzBfcmVnX2luaXQuCgktIFVzZSBkZXZfZXJyX3Byb2JlIHRvIGRlY3JlYXNlIExP Qy4KCS0gVXNlICdkZXYnIHZhcmlhYmxlIHRvIG1ha2UgcHJvYmUgZnVuY3Rpb24gbW9yZSBjbGVh bi4KCS0gUmVmaW5lIGtjb25maWcgdGV4dC4KCS0gUmVtb3ZlIGJvdGggJ2Vsc2UnIGluIHNldF92 YnVzIGNhbGxiYWNrLgoJLSBSZW1vdmUgY29tbWEgZm9yIG9mX2RldmljZV9pZCBpZiB0aGUgYXNz aWduZWQgbWVtYmVyIGlzIG9ubHkgb25lLgoKLSBJbiBwYXRjaCAwOS8xMzoKCS0gUmVwbGFjZSB1 c2luZyBzbnByaW50ZigpIHdpdGggc3lzZnNfZW1pdCgpIGluIG10NjM3MF9hZGNfcmVhZF9sYWJl bCgpCgktIFJlbW92ZSBtYWNybyBBRENfQ09OVl9USU1FX1VTCgktIFJldmlzZSBhbGwgdmFyaWFi bGUgb3JkZXJpbmcKCS0gUmV2aXNlIHRoZSBkZXNjcmlwdGlvbiBvZiBLY29uZmlnIGhlbHAgdGV4 dAoJLSBSZXZpc2UgTU9EVUxFX0RFU0NSSVBUSU9OKCkKCi0gSW4gcGF0Y2ggMTAvMTM6CgktIFJl cGxhY2UgdW5zaWduZWQgaW50IHR5cGUgb2YgcHdyX3JkeSB3aXRoIGJvb2wgaW4KCSAgbXQ2Mzcw X2NoZ19zZXRfb25saW5lKCkKCS0gUmVtb3ZlIHJlZHVuZGFudCAnZWxzZScgaW4gbXQ2MzcwX2No Z19maWVsZF9nZXQoKQoJLSBSZXZpc2UgJ2lmLWVsc2UnIGluIG10NjM3MF9jaGdfZmllbGRfc2V0 KCkKCS0gUmV2aXNlICdpZicgY29uZGl0aW9uIGluIG10NjM3MF9jaGdfZW5hYmxlX2lycSgpCgkt IFJldmlzZSBhbGwgdGV4dCAnb3RnJyAtLT4gJ09URycKCS0gUmV2aXNlIE1UNjM3MF9NSVZSX0lC VVNfVEhfMTAwX01BIC0tPiBNVDYzNzBfTUlWUl9JQlVTX1RIXzEwMF9tQQoJLSBSZXZpc2UgdGhl IGRlc2NyaXB0aW9uIG9mIEtjb25maWcgaGVscCB0ZXh0CgotIEluIHBhdGNoIDEyLzEzOgoJLSBS ZWZpbmUgdGhlIGNvZGluZyBzdHlsZS4KCS0gVXNlICJkZXYiIGluc3RlYWQgb2YgIiZwZGV2LT5k ZXYiLgoKLSBJbiBwYXRjaCAxMy8xMzoKCS0gQWRkIG1pc3NlZCA8bW9kX2RldmljZXRhYmxlLmg+ CgktIEFkZCBzdHJ1Y3QgZGV2aWNlICpkZXYgaW4gcHJvYmUoKSB0byBtYWtlIGNvZGUgY2xlYW5p bmcKCS0gUmVtb3ZlIHVzZWxlc3MgaW5jbHVkaW5nIGhlYWRlciBmaWxlIDxncGlvL2RyaXZlci5o PiwgPG9mLmg+CgktIFJlbW92ZSB1c2VsZXNzIHZhcmlhYmxlIHVhc2FnZSBpbiBtdDYzNzBfaW5p dF9iYWNrbGlnaHRfcHJvcGVydGllcygpCgktIFJlbW92ZSByZWR1bmRhbnQgY2hlY2tpbmcgZW5h YmxlX2dwaW8gaW4gbXQ2MzcwX2JsX3VwZGF0ZV9zdGF0dXMoKQoJLSBSZW1vdmUgcmVkdW5kYW50 IHBhcmVudGhlc2VzIGluIG10NjM3MF9ibF9nZXRfYnJpZ2h0bmVzcygpCgktIFJldmlzZSB0aGUg ZGVzY3JpcHRpb24gb2YgS2NvbmZpZyBoZWxwIHRleHQKCS0gUmV2aXNlIHRoZSBjYWxjdWxhdGlv biBvZiBoeXNfdGhfc3RlcHMKCgpDaGFuZ2VzIGluIHY0OgotIEluIHBhdGNoIDAyLzEzOgoJLSBB ZGQgbWluSXRlbXMgb2YgImlvLWNoYW5uZWwtbmFtZXMiCgktIFJlcGxhY2UgdGV4dCAiTWVkaWF0 ZWsiIHdpdGggIk1lZGlhVGVrIgoKLSBJbiBwYXRjaCAwNi8xMzoKCS0gUm9sbCBiYWNrIGFsbCAi JHJlZjogIiB0byB2MiBwYXRjaCBzdHlsZSAodXNpbmcgIi9zY2hlbWFzLy4uLiIpCgotIEluIHBh dGNoIDA3LzEzOgoJLSBSZXBsYWNlIHRleHQgIk1lZGlhdGVrIiB3aXRoICJNZWRpYVRlayIgaW4g S2NvbmZpZwoJLSBSZXBsYWNlICJmaXJzdCBicmVhayBhbmQgdGhlbiByZXR1cm4iIHdpdGggInJl dHVybiBkaXJlY3RseSIKCSAgaW4gIm10NjM3MF9jaGVja192ZW5kb3JfaW5mbygpIgoJLSBBZGQg bW9kdWxlIG5hbWUgcmVsYXRlZCBkZXNjcmlwdGlvbiBpbiBLY29uZmlnIGhlbHB0ZXh0CgktIEFk ZCBDb3B5cmlnaHQgaW4gdGhlIHNvdXJjZSBjb2RlCgktIEFkZCBoZWFkZXIgZmlsZSAibXQ2Mzcw LmgiIGZvciBhbGwgIiNkZWZpbmUgSVJRIgoJLSBBZGp1c3QgTWFrZWZpbGUgb3JkZXIgb2YgTVQ2 MzcwCgktIFJlZmluZSAiYmFua19pZHgiIGFuZCAiYmFua19hZGRyIiBpbgoJICAibXQ2Mzc1X3Jl Z21hcF9yZWFkKCkiIC8gIm10NjM3NV9yZWdtYXBfd3JpdGUoKSIKCS0gUmVmaW5lIHJlZHVuZGFu dCAiZWxzZSBpZiIgaW4gIm10NjM3MF9yZWdtYXBfcmVhZCgpIgoKLSBJbiBwYXRjaCAwOC8xMzoK CS0gUmVwbGFjZSB0ZXh0ICJNZWRpYXRlayIgd2l0aCAiTWVkaWFUZWsiIGluIEtjb25maWcKCS0g UmVwbGFjZSAiZmlyc3QgcmV0PXJlZ3VsYXRvcl8oZGlzL2VuKWFibGUgYW5kIHRoZW4gcmV0dXJu IgoJICB3aXRoICJyZXR1cm4gZGlyZWN0bHkiIGluICJtdDYzNzBfdGNwY19zZXRfdmJ1cygpIgoJ LSBSZXBsYWNlIGhlYWRlciBmaWxlIDxsaW51eC9vZi5oPiB3aXRoIDxsaW51eC9tb2RfZGV2aWNl dGFibGUuaD4KCS0gQWRkIENvcHlyaWdodCBpbiB0aGUgc291cmNlIGNvZGUKCS0gQWRkIG1vZHVs ZSBuYW1lIHJlbGF0ZWQgZGVzY3JpcHRpb24gaW4gS2NvbmZpZyBoZWxwdGV4dAoJLSBSZW1vdmUg aGVhZGVyIGZpbGUgPGxpbnV4L29mLmg+CgktIFJlZmluZSBhbGwgcHJvYmUgZXJyb3IgYnkgdXNp bmcgZGV2X2Vycl9wcm9iZSgpCgotIEluIHBhdGNoIDA5LzEzOgoJLSBSZXBsYWNlIHRleHQgIk1l ZGlhdGVrIiB3aXRoICJNZWRpYVRlayIKCS0gUmVwbGFjZSBhbGwgImZpcnN0IGRldl9lcnIoKSBh bmQgdGhlbiByZXR1cm4iIHdpdGgKCSAgInJldHVybiBkZXZfZXJyX3Byb2JlKCkiCgktIEFkZCBD b3B5cmlnaHQgaW4gdGhlIHNvdXJjZSBjb2RlCgktIEFkZCBtb2R1bGUgbmFtZSByZWxhdGVkIGRl c2NyaXB0aW9uIGluIEtjb25maWcKCS0gQWRkIHVuaXQgc3VmZml4IG9mIG1hY3JvICJBRENfQ09O Vl9QT0xMSU5HX1RJTUUiCgktIEFkZCBuZXcgbWFjcm8gIkFEQ19DT05WX1RJTUVfTVMiCgktIEFk anVzdCB0aGUgcG9zaXRpb24gb2YgaW5jbHVkZSBmaWxlIDxtZWRpYXRlayxtdDYzNzBfYWRjLmg+ CgktIEFkanVzdCB0aGUgcG9zdGlvbnMgYmV0d2VlbiA8bGludXgvbW9kdWxlLmg+IGFuZAoJICAg PGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgoJLSBGaXggc29tZSBpbmNvcnJlY3QgY2hhcmFjdGVy cwoKLSBJbiBwYXRjaCAxMC8xMzoKCS0gUmVwbGFjZSB0ZXh0ICJNZWRpYXRlayIgd2l0aCAiTWVk aWFUZWsiIGluIEtjb25maWcgYW5kCgkgIE1PRFVMRV9ERVNDUklQVElPTigpCgktIFJlcGxhY2Ug Im10NjM3MF9jaGdfdmFsX3RvX3JlZyIgYW5kICJtdDYzNzBfY2hnX3JlZ190b192YWwiCgkgIHdp dGggImxpbmVhcl9yYW5nZSIgQVBJCgktIFJlcGxhY2UgImZpcnN0IGJyZWFrIGFuZCB0aGVuIHJl dHVybiIgd2l0aCAicmV0dXJuIGRpcmVjdGx5IgoJICBpbiBhbGwgY2FzZXMgb2YgZ2V0L3NldCBw b3dlcl9zdXBwbHlfcHJvcGVydHkKCS0gUmVwbGFjZSBhbGwgImZpcnN0IGRldl9lcnIoKSBhbmQg dGhlbiByZXR1cm4iIHdpdGggInJldHVybgoJICBkZXZfZXJyX3Byb2JlKCkiCgktIFJlcGxhY2Ug YWxsICJyZXR1cm4gSVNfRVJSKHByaXYtPnJkZXYpID8gUFRSX0VSUihwcml2LT5yZGV2KSA6IDAi CgkgIHdpdGggIlBUUl9FUlJfT1JfWkVSTygpIgoJLSBSZXBsYWNlICJwcml2LT5kZXYtPm9mX25v ZGUiIHdpdGggImRldl9vZl9ub2RlKCkiCgktIEFkZCBDb3B5cmlnaHQgaW4gdGhlIHNvdXJjZSBj b2RlCgktIEFkZCBtb2R1bGUgbmFtZSByZWxhdGVkIGRlc2NyaXB0aW9uIGluIEtjb25maWcgaGVs cHRleHQKCS0gQWRkIHByb3BlciB1bml0IG9mICJNVDYzNzBfTUlWUl9JQlVTX1RIIgoJLSBBZGQg ZXJyb3IgY2hlY2sgaW4gIm10NjM3MF9jaGdfZ2V0X3N0YXR1cyIKCS0gUmVtb3ZlIGluY2x1ZGlu ZyA8bWVkaWF0ZWssbXQ2MzcwX2FkYy5oPiBoZWFkZXIgZmlsZQoJLSBSZW1vdmUgcmVkdW5kYW50 IGNvbW1hIG9mIGV2ZXJ5IGVudW0gdGVybWluYXRvciBsaW5lCgktIFJlbW92ZSB1bndhbnRlZCBi bGFuayBsaW5lcwoJLSBSZW1vdmUgdGhlIHVzZWxlc3MgbGFiZWwgKHRvZ2dsZV9jZm9fZXhpdDop CgktIFJlbW92ZSB1c2luZyBhdG9taWMKCS0gUmVtb3ZlIHVzaW5nIG9mX21hdGNoX3B0cigpCgkt IEZpeCBzb21lIGluY29ycmVjdCBjaGFyYWN0ZXJzCgktIEZpeCB1cGRhdGluZyB3cm9uZyBiaXRz IHdoZW4gdXNpbmcgZW5hX2dwaW9kIG9mIE9URyByZWd1bGF0b3IKCS0gQWRqdXN0IHRoZSBwcm9i ZSBvcmRlciBpbiBwcm9iZSgpCgotIEluIHBhdGNoIDExLzEzOgoJLSBSZXBsYWNlIHRleHQgIk1l ZGlhdGVrIiB3aXRoICJNZWRpYVRlayIgaW4gS2NvbmZpZwoJLSBSZXBsYWNlIHRleHQgImNvbnN0 IiB3aXRoICJjb25zdGFudCIgaW4gS2NvbmZpZwoJLSBBZGQgQ29weXJpZ2h0IGluIHRoZSBzb3Vy Y2UgY29kZQoKLSBJbiBwYXRjaCAxMi8xMzoKCS0gUmVwbGFjZSB0ZXh0ICJNZWRpYXRlayIgd2l0 aCAiTWVkaWFUZWsiIGluIEtjb25maWcKCS0gQWRkIENvcHlyaWdodCBpbiB0aGUgc291cmNlIGNv ZGUKCi0gSW4gcGF0Y2ggMTMvMTM6CgktIFJlcGxhY2UgdGV4dCAiTWVkaWF0ZWsiIHdpdGggIk1l ZGlhVGVrIiBpbiBLY29uZmlnCgktIEFkZCBDb3B5cmlnaHQgaW4gdGhlIHNvdXJjZSBjb2RlCgkt IFJldmlzZSB0aGUgY29tbWVudCBvZiAiUFdNIEhZUyBTVEVQUyIKCgpDaGFuZ2VzIGluIHYzOgot IFJlbW92ZSBBREMgQUJJIGZpbGUsIHdoaWNoIGlzIGFkZGVkIGluIHYyIFBhdGNoIDcKLSBJbiBw YXRjaCAwMi8xNDoKCS0gQWRkIGl0ZW1zIGFuZCByZW1vdmUgbWF4SXRlbXMgb2YgaW8tY2hhbm5l bHMKCS0gQWRkIGlvLWNoYW5uZWwtbmFtZXMgYW5kIGRlc2NyaWJlIGVhY2ggaXRlbQoJLSBBZGQg InVuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2UiIGluICJ1c2Itb3RnLXZidXMtcmVndWxhdG9y IgoJLSBSZW5hbWUgImVuYWJsZS1ncGlvIiB0byAiZW5hYmxlLWdwaW9zIiBpbiAidXNiLW90Zy12 YnVzLXJlZ3VsYXRvciIKCi0gSW4gcGF0Y2ggMDMvMTQ6CgktIFVzZSBsZWRzLWNsYXNzLW11bHRp Y29sb3IueWFtbCBpbnN0ZWFkIG9mIGNvbW1vbi55YW1sLgoJLSBTcGxpdCBtdWx0aS1sZWQgYW5k IGxlZCBub2RlLgoJLSBBZGQgc3ViZGV2aWNlICJsZWQiIGluICJtdWx0aS1sZWQiLgoKLSBJbiBw YXRjaCAwNC8xNDoKCS0gUmVtb3ZlIHRoZSBkZXNjcmlwdGlvbiBvZiBlbnVtLgoKLSBJbiBwYXRj aCAwNS8xNDoKCS0gUmVuYW1lICJtZWRpYXRlayxibGVkLXB3bS1oeXMtaW5wdXQtdGhyZXNob2xk LXN0ZXBzIiB0bwoJICAibWVkaWF0ZWssYmxlZC1wd20taHlzLWlucHV0LXRoLXN0ZXBzIgoJLSBS ZWZpbmUgImJsZWQtcHdtLWh5cy1pbnB1dC10aC1zdGVwcyIsICJibGVkLW92cC1taWNyb3ZvbHQi LAoJICAiYmxlZC1vY3AtbWljcm9hbXAiIGVudW0gdmFsdWVzCgotIEluIHBhdGNoIDA2LzE0OgoJ LSBVc2UgIiBpbiBlbnRpcmUgcGF0Y2hzZXQKCS0gUmVmaW5lIEFEQyBkZXNjcmlwdGlvbgoJLSBS ZW5hbWUgImVuYWJsZS1ncGlvIiB0byAiZW5hYmxlLWdwaW9zIiBpbiAicmVndWFsdG9yIgoKLSBJ biBwYXRjaCAwNy8xNDoKCS0gUmVmaW5lIEtjb25maWcgaGVscCB0ZXh0CgktIFJlZmluZSBlcnJv ciBtZXNzYWdlIG9mIHVua25vd24gdmVuZG9yIElEIGluCgkgIG10NjM3MF9jaGVja192ZW5kb3Jf aW5mbygpCgktIFJlZmluZSByZXR1cm4gdmFsdWUgaGFuZGxpbmcgb2YgbXQ2MzcwX3JlZ21hcF9y ZWFkKCkKCS0gUmVmaW5lIGFsbCBwcm9iZSBlcnJvciBieSB1c2luZyBkZXZfZXJyX3Byb2JlKCkK CS0gUmVmaW5lICJiYW5rX2lkeCIgYW5kICJiYW5rX2FkZHIiIGluIG10NjM3MF9yZWdtYXBfcmVh ZCgpIGFuZAoJICBtdDYzNzBfcmVnbWFwX3dyaXRlKCkKCS0gQWRkICIjZGVmaW5lIFZFTklEKiIg YW5kIGRyb3AgdGhlIGNvbW1lbnRzIGluCgkgIG10NjM3MF9jaGVja192ZW5kb3JfaW5mbygpCgkt IERyb3AgIk1GRCIgaW4gTU9EVUxFX0RFU0NSSVBUSU9OKCkKCi0gSW4gcGF0Y2ggMDkvMTQ6Cgkt IFJlZmluZSBLY29uZmlnIGhlbHAgdGV4dAoKLSBJbiBwYXRjaCAxMC8xNDoKCS0gUmVmaW5lIEtj b25maWcgaGVscCB0ZXh0CgktIFJlZmluZSBhbGwgY2hhbm5lbCB2YWx1ZSBpbiByZWFkX3NjYWxl KCkKCQlhLiBjdXJyZW50OiB1QSAtLT4gbUEKCQliLiB2b2x0YWdlOiB1ViAtLT4gbVYKCQljLiB0 ZW1wZXJhdHVyZTogZGVncmVlcyBDZWxzaXVzIC0tPiBtaWxsaSBkZWdyZWVzIENlbHNpdXMKCS0g QWRkICJkZWZhdWx0OiIgY29uZGl0aW9uIG9mIHN3aXRjaCBzdGF0ZW1lbnQgaW4gcmVhZF9zY2Fs ZSgpIGFuZCByZWFkX3JhdygpCgktIEFkZCBlcnJvciBtZXNzYWdlIGZvciByZWFkaW5nIEFEQyBy ZWdpc3RlciBmYWlsZWQKCS0gQWRkIHRoZSBjb21tZW50IGZvciBhZGNfbG9jawoJLSBBZGQgPGxp bnV4L21vZF9kZXZpY2V0YWJsZS5oPiBoZWFkZXIgZmlsZSBmb3Igc3RydWN0IG9mX2RldmljZV9p ZAoJLSBSZXBsYWNlICJhZGMiIHRleHQgd2l0aCAiQURDIiBpbiBhbGwgb2YgdGhlIGVycm9yIG1l c3NhZ2VzCgotIEluIHBhdGNoIDEyLzE0OgoJLSBSZWZpbmUgdGhlIGdyYW1tZXIgb2YgdGhlIEtj b25maWcuCgktIENoYW5nZSByZWcgbW9kZSB0byB0aGUgY29uc3QgY3VycmVudCBtb2RlLgoKLSBJ biBwYXRjaCAxNC8xNDoKCS0gUmVmaW5lIGJvb2wgcHJvcGVydGllcyBwYXJzaW5nIChwd20tZW5h YmxlLCBvdnAtc2h1dGRvd24sIG9jcC1zaHV0ZG93bikgaW4gRFQKCSAgcGFyc2luZyBmdW5jdGlv bgoJLSBSZWZpbmUgdTMyIGFuZCB1OCBwcm9wZXJ0aWVzIHBhcnNpbmcgKHB3bS1oeXMtaW5wdXQt dGgtc3RlcHMsIG92cC1taWNyb3ZvbHQsCgkgIG9jcC1taWNyb2FtcCksIGZyb20gdXNpbmcgcmVn aXN0ZXIgdmFsdWUgdG8gdXNpbmcgYWN0dWFsIHZhbHVlCgktIFJlZmluZSBlcnJvciBzdHJpbmcg b2YgImNoYW5ubGUtdXNlIiBwYXJzaW5nIGZhaWxlZAoJLSBSZWZpbmUgS2NvbmZpZyBoZWxwIHRl eHQKCgpDaGFuZ2VzIGluIHYyOgotIEluIHBhdGNoIDAxLzE1OgoJLSBBZGQgInVuZXZhbHVhdGVk UHJvcGVydGllczogZmFsc2UiLgoJLSBEZWxldGUgIkRUIGJpbmRpbmdzIi4KCS0gUmVmaW5lIHRo ZSBkZXNjcmlwdGlvbiB0byBmaXQgaW4gODAgY29sdW1ucy4KCS0gU2tpcCB0aGUgY29ubmVjdG9y IGRlc2NyaXB0aW9uLgoKLSBJbiBwYXRjaCAwMi8xNToKCS0gUmVmaW5lIGl0ZW1zIGRlc2NyaXB0 aW9uIG9mIGludGVycnVwdC1uYW1lCgktIFJlbmFtZSAidXNiLW90Zy12YnVzIiB0byAidXNiLW90 Zy12YnVzLXJlZ3VsYXRvciIKCS0gQWRkIGNvbnN0cmFpbnQgcHJvcGVydGllcyBmb3IgQURDCgot IEluIHBhdGNoIDAzLzE1OgoJLSBTa2lwIG5vdCB1c2VmdWwgZGVzY3JpcHRpb24gb2YgIl4obXVs dGktKT9sZWRAWzAtM10kIgoJICBhbmQgcmVnLgoJLSBEdWUgdG8gdGhlIGRlcGVuZGVuY3ksIHJl bW92ZSB0aGUgbWVudGlvbiBvZiBtZmQKCSAgZG9jdW1lbnQgZGlyZWN0b3J5LgoJLSBEZWxldGUg U29mdC1zdGFydCBwcm9wZXJ0eS4gSW4gZGVzaWduIGFzcGVjdCwgd2UgdGhpbmsKCSAgc29mdC1y ZXN0YXJ0IHNob3VsZCBhbHdheXMgYmUgZW5hYmxlZCwgb3VyIG5ldyBjaGlwCgkgIGhhcyBkZWxl dGVkIHRoZSByZWxhdGVkIHNldHRpbmcgcmVnaXN0ZXIgLCBhbHNvLCB3ZSBkb27igJl0CgkgIGFs bG93IHVzZXIgYWRqdXN0IHRoaXMgcGFyYW1ldGVyIGluIHRoaXMgY2hpcC4KCS0gUmVmaW5lIHRo ZSBjb21taXQgbWVzc2FnZS4KCi0gSW4gcGF0Y2ggMDQvMTU6CgktIFNraXAgbm90IHVzZWZ1bCBk ZXNjcmlwdGlvbiBvZiAiXmxlZEBbMC0xXSQiIGFuZCByZWcuCgktIEFkZCBhcGFjZSBhZnRlciAn IycuCgktIFJlZmluZSB0aGUgY29tbWl0IG1lc3NhZ2UuCgotIEluIHBhdGNoIDA1LzE1OgoJLSBS ZW1vdmUgImJpbmRpbmcgZG9jdW1lbnRhdGlvbiIgaW4gc3ViamVjdCB0aXRsZQoJLSBSZWZpbmUg ZGVzY3JpcHRpb24gb2YgbXQ2MzcwIGJhY2tsaWdodCBiaW5kaW5nCgkgIGRvY3VtZW50CgktIFJl ZmluZSBwcm9wZXJ0aWVzIG5hbWUoYmxlZC1wd20taHlzLWlucHV0LWJpdCwKCSAgYmxlZC1vdnAt bWljcm92b2x0LCBibGVkLW9jcC1taWNyb2FtcCkgYW5kIHRoZWlyCgkgIGRlc2NyaXB0aW9uCgot IEluIHBhdGNoIDA2LzE1OgoJLSBSZWZpbmUgQURDIGFuZCBSZWd1bGF0b3IgZGVzY3JpcHRpb25z CgktIFJlZmluZSBpbmNsdWRlIGhlYWRlciB1c2FnZSBpbiBleGFtcGxlCgktIFJlZmluZSBub2Rl IG5hbWUgdG8gZ2VuZXJpYyBub2RlIG5hbWUoInBtaWNAMzQiKQoJLSBSZWZpbmUgbGVkIGV4YW1w bGUgaW5kZW50YXRpb24KCS0gUmVmaW5lIGxpY2Vuc2Ugb2YgbWVkaWF0ZWssbXQ2MzcwX2FkYy5o CgktIFJlbmFtZSB0aGUgZHRzIGV4YW1wbGUgZnJvbSBJUlEgZGVmaW5lIHRvIG51bWJlci4KCS0g UmVtb3ZlIG1lZGlhdGVrLG10NjM3MC5oCgotIEluIHBhdGNoIDA3LzE1OgoJLSBBZGQgQUJJIGRv Y3VtZW50YXRpb24gZm9yIG10NjM3MCBub24tc3RhbmRhcmQgQURDCgkgIHN5c2ZzIGludGVyZmFj ZXMuCgotIEluIHBhdGNoIDA4LzE1OgoJLSBBZGQgYWxsIElSUSBkZWZpbmUgaW50byBtdDYzNzAu Yy4KCS0gUmVmaW5lIGluY2x1ZGUgaGVhZGVyIHVzYWdlCgotIEluIHBhdGNoIDA5LzE1OgoJLSBO byBjaGFuZ2VzLgoKLSBJbiBwYXRjaCAxMC8xNToKCS0gVXNlICdncGlvZF9nZXRfZnJvbV9vZl9u b2RlJyB0byByZXBsYWNlCgkgICdmd25vZGVfZ3Bpb2RfZ2V0X2luZGV4Jy4KCi0gSW4gcGF0Y2gg MTEvMTU6CgktIFJlZmluZSBLY29uZmlnIG10NjM3MCBoZWxwIHRleHQKCS0gUmVmaW5lIG1hc2sm c2hpZnQgdG8gRklFTERfUFJFUCgpCgktIFJlZmluZSBtdXRleCBsb2NrIG5hbWUgKCJsb2NrIiAt PiAiYWRjX2xvY2siKQoJLSBSZWZpbmUgbXQ2MzcwX2FkY19yZWFkX3NjYWxlKCkKCS0gUmVmaW5l IG10NjM3MF9hZGNfcmVhZF9vZmZzZXQoKQoJLSBSZWZpbmUgbXQ2MzcwX2NoYW5uZWxfbGFiZWxz W10gYnkgdXNpbmcgZW51bSB0byBpbmRleAoJICBjaGFuIHNwZWMKCS0gUmVmaW5lIE1UNjM3MF9B RENfQ0hBTigpCgktIFJlZmluZSBpbmRpb19kZXYtPm5hbWUKCS0gUmVtb3ZlIHVzZWxlc3MgaW5j bHVkZSBoZWFkZXIgZmlsZXMKCi0gSW4gcGF0Y2ggMTIvMTU6CgktIFJlZmluZSBtdDYzNzBfY2hn X290Z19yZGVzYy5vZl9tYXRjaAoJICAoIm10NjM3MCxvdGctdmJ1cyIgLT4gInVzYi1vdGctdmJ1 cy1yZWd1bGF0b3IiKSB0byBtYXRjaAoJICBEVCBiaW5kaW5nCgotIEluIHBhdGNoIDEzLzE1OgoJ LSBSZWZpbmUgS2NvbmZpZyBkZXNjcmlwdGlvbi4KCS0gUmVtb3ZlIGluY2x1ZGUgImxpbnV4L29m LmgiIGFuZCB1c2UKCSAgImxpbnV4L21vZF9kZXZpY2V0YWJsZS5oIi4KCS0gUGxhY2UgYSBjb21t YSBmb3IgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgY29uc3QKCSAgdW5zaWduZWQgaW50IGFycmF5 LgoJLSBBZGQgYSBjb21tZW50IGxpbmUgZm9yIHRoZSBtdXRleCAnbG9jaycuCgktIEluIHByb2Jl IGZ1bmN0aW9uLCB1c2UgJ2Rldl9lcnJfcHJvYmUnIGluIHNvbWUKCSAganVkZ2VtZW50IHRvIHJl ZHVjZSB0aGUgTE9DLgoJLSBSZWZpbmUgaW5jbHVkZSBoZWFkZXIgdXNhZ2UuCgkgIEJJVC9HRU5N QVNLIC0+IGxpbnV4L2JpdHMuaAoJICBGSUVMRF9HRVQgLT4gbGludXgvYml0ZmllbGQuaAoKLSBJ biBwYXRjaCAxNC8xNToKCS0gQWRkIGJsYW5rIGxpbmUuCgktIFJlcGxhY2UgY29udGFpbmVyX29m KCkgd2l0aCB0b19tdDYzNzBfbGVkKCkgLgoJLSBSZWZpbmUgZGVzY3JpcHRpb24gb2YgcmFtcGlu Zy4KCS0gUmVmaW5lIHRoZSBtdDYzNzBfaW5pdF9jb21tb25fcHJvcGVydGllcyBmdW5jdGlvbi4K CS0gUmVmaW5lIHRoZSBwcm9iZSByZXR1cm4uCgotIEluIHBhdGNoIDE1LzE1OgoJLSBSZWZpbmUg TVQ2MzcwIGhlbHAgdGV4dCBpbiBLY29uZmlnCgktIFJlZmluZSBEVCBQYXJzZSBmdW5jdGlvbgoJ LSBSZW1vdmUgdXNlbGVzcyBlbnVtCgktIEFkZCBjb21tZW50IGZvciA2MzcyIGJhY2t3YXJkIGNv bXBhdGlibGUgaW4KCSAgYmxfdXBkYXRlX3N0YXR1cygpIGFuZAoJICBjaGVja192ZW5kb3JfaW5m bygpCgktIFVzaW5nIGRldl9lcnJfcHJvYmUoKTsgaW5zdGVhZHMgZGV2X2VycigpJnJldHVybjsg aW4KCSAgdGhlIHByb2JlKCkKCgoKCkFsaWNlIENoZW4gKDIpOgogIGR0LWJpbmRpbmdzOiBsZWRz OiBBZGQgTWVkaWFUZWsgTVQ2MzcwIGZsYXNobGlnaHQKICBsZWRzOiBmbGFzaDogbXQ2MzcwOiBB ZGQgTWVkaWFUZWsgTVQ2MzcwIGZsYXNobGlnaHQgc3VwcG9ydAoKQ2hpWXVhbiBIdWFuZyAoMik6 CiAgZHQtYmluZGluZ3M6IGxlZHM6IG10NjM3MDogQWRkIE1lZGlhVGVrIE1UNjM3MCBjdXJyZW50 IHNpbmsgdHlwZSBMRUQKICAgIGluZGljYXRvcgogIGxlZHM6IHJnYjogbXQ2MzcwOiBBZGQgTWVk aWFUZWsgTVQ2MzcwIGN1cnJlbnQgc2luayB0eXBlIExFRCBJbmRpY2F0b3IKICAgIHN1cHBvcnQK CkNoaWFFbiBXdSAoMSk6CiAgaWlvOiBhZGM6IG10NjM3MDogQWRkIE1lZGlhVGVrIE1UNjM3MCBz dXBwb3J0CgogLi4uL2JpbmRpbmdzL2xlZHMvbWVkaWF0ZWssbXQ2MzcwLWZsYXNobGlnaHQueWFt bCAgfCAgIDQxICsKIC4uLi9iaW5kaW5ncy9sZWRzL21lZGlhdGVrLG10NjM3MC1pbmRpY2F0b3Iu eWFtbCAgIHwgICA4MSArKwogZHJpdmVycy9paW8vYWRjL0tjb25maWcgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDEyICsKIGRyaXZlcnMvaWlvL2FkYy9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2lpby9hZGMvbXQ2MzcwLWFkYy5jICAg ICAgICAgICAgICAgICAgICAgICB8ICAzMDUgKysrKysrCiBkcml2ZXJzL2xlZHMvZmxhc2gvS2Nv bmZpZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgKwogZHJpdmVycy9sZWRzL2ZsYXNo L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvbGVkcy9m bGFzaC9sZWRzLW10NjM3MC1mbGFzaC5jICAgICAgICAgICAgIHwgIDYzMSArKysrKysrKysrKysK IGRyaXZlcnMvbGVkcy9yZ2IvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx MyArCiBkcml2ZXJzL2xlZHMvcmdiL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDEgKwogZHJpdmVycy9sZWRzL3JnYi9sZWRzLW10NjM3MC1yZ2IuYyAgICAgICAgICAgICAg ICAgfCAxMDEwICsrKysrKysrKysrKysrKysrKysrCiAxMSBmaWxlcyBjaGFuZ2VkLCAyMTEwIGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvbGVkcy9tZWRpYXRlayxtdDYzNzAtZmxhc2hsaWdodC55YW1sCiBjcmVhdGUgbW9k ZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2xlZHMvbWVkaWF0ZWss bXQ2MzcwLWluZGljYXRvci55YW1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9paW8vYWRj L210NjM3MC1hZGMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9mbGFzaC9sZWRz LW10NjM3MC1mbGFzaC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9sZWRzL3JnYi9sZWRz LW10NjM3MC1yZ2IuYwoKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=