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=-11.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 6A2E2C4361B for ; Thu, 17 Dec 2020 07:53:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1586B2388E for ; Thu, 17 Dec 2020 07:53:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727192AbgLQHxE (ORCPT ); Thu, 17 Dec 2020 02:53:04 -0500 Received: from esa.microchip.iphmx.com ([68.232.154.123]:25260 "EHLO esa.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725468AbgLQHxD (ORCPT ); Thu, 17 Dec 2020 02:53:03 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1608191583; x=1639727583; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=V0+P/Wau6DK+VWISPTtfqREu8S66VAPbxr1EelllKKg=; b=IakvAJ1j5Gpsm4sVMAhptc48GNxSxPkbFrxwadjP2JHwRz6UiAdluwQv WLacAhNpfUFGYzDeweLkfHLem+hp3riuVdFlo65HK6fQiW5/plNrb9hyL ir9+0AGl1I4MrNqPGribxo9Pj4SeEjRH7CArlAkZn8w+Jasv3+nBQSyzf UoSZfLhhpLwuS06o/2fcBOHJTm6CkYySIl9GJ7TKkxQg5F2iTSj8i1g6L vr/+dVbkwF/LAGYUqSmIt7DSyIpi+Lm4flE+u1yPYDI6HITVqvPs1N1e2 fUaDBBxaDqMww/xuE9nnFl0ZdqQWGzp+lx1rDlyA5U1ezeyyUOI8u0f35 Q==; IronPort-SDR: be209Wyx6TQlBk3m/qVQtPNl6cYEKfZu//cXDiGmdDNdgRIXLHLtYrT591PK6cTLgsmJ3ad1Cg M3O1B28M4HTGhmybi4gI0t6pvrnN+q1/m4lFaLqvs2c3k2uWuu1jpj640F8CrLqc10LoaNNiIV DbUBDAA4CgBjo5613gtBdml5YCzYlGJi4p6k23G1TkD3oGFZtosy0LtDfuZ7ex3ue132DYNC33 Zjh07XcktCbILeUq6RwdLGyUK4J71UDoCthUDZ59R3GyDsOpwJuCnKffl5f/Wj/sQ1gYPWKUuk f2o= X-IronPort-AV: E=Sophos;i="5.78,426,1599548400"; d="scan'208";a="37730270" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 17 Dec 2020 00:51:46 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Thu, 17 Dec 2020 00:51:46 -0700 Received: from mchp-dev-shegelun.microchip.com (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.1979.3 via Frontend Transport; Thu, 17 Dec 2020 00:51:42 -0700 From: Steen Hegelund To: "David S. Miller" , Jakub Kicinski CC: Steen Hegelund , Andrew Lunn , Russell King , Lars Povlsen , Bjarni Jonasson , Microchip Linux Driver Support , Alexandre Belloni , Madalin Bucur , Nicolas Ferre , Mark Einon , Masahiro Yamada , Arnd Bergmann , , , Subject: [RFC PATCH v2 0/8] Adding the Sparx5 Switch Driver Date: Thu, 17 Dec 2020 08:51:26 +0100 Message-ID: <20201217075134.919699-1-steen.hegelund@microchip.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This series provides the Microchip Sparx5 Switch Driver The Sparx5 Carrier Ethernet and Industrial switch family delivers 64 Ethernet ports and up to 200 Gbps of switching bandwidth. It provides a rich set of Ethernet switching features such as hierarchical QoS, hardware-based OAM and service activation testing, protection switching, IEEE 1588, and Synchronous Ethernet. Using provider bridging (Q-in-Q) and MPLS/MPLS-TP technology, it delivers MEF CE 2.0 Ethernet virtual connections (EVCs) and features advanced TCAM classification in both ingress and egress. Per-EVC features include advanced L3-aware classification, a rich set of statistics, OAM for end-to-end performance monitoring, and dual-rate policing and shaping. Time sensitive networking (TSN) is supported through a comprehensive set of features including frame preemption, cut-through, frame replication and elimination for reliability, enhanced scheduling: credit-based shaping, time-aware shaping, cyclic queuing, and forwarding, and per-stream policing and filtering. Together with IEEE 1588 and IEEE 802.1AS support, this guarantees low-latency deterministic networking for Fronthaul, Carrier, and Industrial Ethernet. The Sparx5 switch family consists of following SKUs: - VSC7546 Sparx5-64 up to 64 Gbps of bandwidth with the following primary port configurations: - 6 *10G - 16 * 2.5G + 2 * 10G - 24 * 1G + 4 * 10G - VSC7549 Sparx5-90 up to 90 Gbps of bandwidth with the following primary port configurations: - 9 * 10G - 16 * 2.5G + 4 * 10G - 48 * 1G + 4 * 10G - VSC7552 Sparx5-128 up to 128 Gbps of bandwidth with the following primary port configurations: - 12 * 10G - 16 * 2.5G + 8 * 10G - 48 * 1G + 8 * 10G - VSC7556 Sparx5-160 up to 160 Gbps of bandwidth with the following primary port configurations: - 16 * 10G - 10 * 10G + 2 * 25G - 16 * 2.5G + 10 * 10G - 48 * 1G + 10 * 10G - VSC7558 Sparx5-200 up to 200 Gbps of bandwidth with the following primary port configurations: - 20 * 10G - 8 * 25G In addition, the device supports one 10/100/1000/2500/5000 Mbps SGMII/SerDes node processor interface (NPI) Ethernet port. The Sparx5 support is developed on the PCB134 and PCB135 evaluation boards. - PCB134 main networking features: - 12x SFP+ front 10G module slots (connected to Sparx5 through SFI). - 8x SFP28 front 25G module slots (connected to Sparx5 through SFI high speed). - Optional, one additional 10/100/1000BASE-T (RJ45) Ethernet port (on-board VSC8211 PHY connected to Sparx5 through SGMII). - PCB135 main networking features: - 48x1G (10/100/1000M) RJ45 front ports using 12xVSC8514 QuadPHY’s each connected to VSC7558 through QSGMII. - 4x10G (1G/2.5G/5G/10G) RJ45 front ports using the AQR407 10G QuadPHY each port connects to VSC7558 through SFI. - 4x SFP28 25G module slots on back connected to VSC7558 through SFI high speed. - Optional, one additional 1G (10/100/1000M) RJ45 port using an on-board VSC8211 PHY, which can be connected to VSC7558 NPI port through SGMII using a loopback add-on PCB) This series provides support for: - SFPs and DAC cables via PHYLINK with a number of 5G, 10G and 25G devices and media types. - Port module configuration for 10M to 25G speeds with SGMII, QSGMII, 1000BASEX, 2500BASEX and 10GBASER as appropriate for these modes. - SerDes configuration via the Sparx5 SerDes driver (see below). - Host mode providing register based injection and extraction. - Switch mode providing MAC/VLAN table learning and Layer2 switching offloaded to the Sparx5 switch. - STP state, VLAN support, host/bridge port mode, Forwarding DB, and configuration and statistics via ethtool. More support will be added at a later stage. The Sparx5 Switch chip register model can be browsed here: Link: https://microchip-ung.github.io/sparx-5_reginfo/reginfo_sparx-5.html The series depends on the following series currently on their way into the kernel: - Sparx5 SerDes Driver Link: https://lore.kernel.org/r/20201211090541.157926-1-steen.hegelund@microchip.com/ - Serial GPIO Controller Link: https://lore.kernel.org/r/20201113145151.68900-1-lars.povlsen@microchip.com/ ChangeLog: v2: - The driver patch has been split into 6 patches by functionality like this: - the basic sparx5 driver - hostmode with phylink support - port module support - switching, vlan and mactable support - calendar bandwidth allocation support - ethtool configuration and statistics support - IO ranges have been collapsed into just 2 (the SerDes driver uses the area inbetween) and the driver uses an offset table to get the target instances. - register macros have been converted to functions - register_netdev() moved to the end of the switch initialization. - sparx5_update_port_stats: use reverse christmas tree - sparx5_get_sset_strings: copy individual strings - sparx5_port_open: updated to better use phylink: just call phylink_of_phy_connect directly - sparx5_destroy_netdev: always take the NL lock - sparx5_attr_stp_state_set: added learning state. - sparx5_phylink_mac_config: use phylink to provide the status for the devices phylink controls. - sparx5_get_1000basex_status: renamed to sparx5_get_dev2g5_status and corrected an error when combining the sync and link status information. - let phylink provide link status for cuPHYs and SFPs - corrected the pause mode status handling - use ethtool's get_link function directly - remove the use of the phy_validate function - sparx5_update_counter function: no longer inline - Removed the wrapper functions around the mactable mutex Steen Hegelund (8): dt-bindings: net: sparx5: Add sparx5-switch bindings net: sparx5: add the basic sparx5 driver net: sparx5: add hostmode with phylink support net: sparx5: add port module support net: sparx5: add switching, vlan and mactable support net: sparx5: add calendar bandwidth allocation support net: sparx5: add ethtool configuration and statistics support arm64: dts: sparx5: Add the Sparx5 switch node .../bindings/net/microchip,sparx5-switch.yaml | 178 + arch/arm64/boot/dts/microchip/sparx5.dtsi | 60 + .../dts/microchip/sparx5_pcb134_board.dtsi | 424 +- .../dts/microchip/sparx5_pcb135_board.dtsi | 602 ++- drivers/net/ethernet/microchip/Kconfig | 2 + drivers/net/ethernet/microchip/Makefile | 2 + drivers/net/ethernet/microchip/sparx5/Kconfig | 8 + .../net/ethernet/microchip/sparx5/Makefile | 11 + .../microchip/sparx5/sparx5_calendar.c | 595 +++ .../microchip/sparx5/sparx5_ethtool.c | 979 ++++ .../microchip/sparx5/sparx5_mactable.c | 502 +++ .../ethernet/microchip/sparx5/sparx5_main.c | 855 ++++ .../ethernet/microchip/sparx5/sparx5_main.h | 372 ++ .../microchip/sparx5/sparx5_main_regs.h | 3922 +++++++++++++++++ .../ethernet/microchip/sparx5/sparx5_netdev.c | 246 ++ .../ethernet/microchip/sparx5/sparx5_packet.c | 279 ++ .../microchip/sparx5/sparx5_phylink.c | 193 + .../ethernet/microchip/sparx5/sparx5_port.c | 1140 +++++ .../ethernet/microchip/sparx5/sparx5_port.h | 98 + .../microchip/sparx5/sparx5_switchdev.c | 516 +++ .../ethernet/microchip/sparx5/sparx5_vlan.c | 223 + 21 files changed, 11147 insertions(+), 60 deletions(-) create mode 100644 Documentation/devicetree/bindings/net/microchip,sparx5-switch.yaml create mode 100644 drivers/net/ethernet/microchip/sparx5/Kconfig create mode 100644 drivers/net/ethernet/microchip/sparx5/Makefile create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_calendar.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_ethtool.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_mactable.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_main.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_main.h create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_main_regs.h create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_packet.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_phylink.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_port.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_port.h create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_switchdev.c create mode 100644 drivers/net/ethernet/microchip/sparx5/sparx5_vlan.c -- 2.29.2 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=-11.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,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 6E174C2BB48 for ; Thu, 17 Dec 2020 07:53:24 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DA3B723877 for ; Thu, 17 Dec 2020 07:53:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DA3B723877 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=microchip.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:Subject: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=Ja6pufd8jQBtJ/bdBhnHAVZA1W2s8lQJRhYKgnBAaNc=; b=LllmBTYF/rcbckzhbOkX0iJN81 OpusjSSk3H5a1BfR7WxdCEiRl8V92GOMNaBBQgW/mjlqTmV5JkBQYfCrZKYjaJqTazfK8FE2y6IgR 254wC4E4e/TtXywSlObYhVYNYuC4GtA310dJS1bSuJx3qvrKgsb8TJQKX9p4ZPvaVFq+kEcvFSllT O5XPs63dXfk8jz+USkrKYgj4s8nXnzd5vxy68nVpkFgEM51wHjWpr5Vs64DT8NDxcC+0Bq25ifqEU wsKopqn8Xi6dT3tRoaZxWVI2ISpnvuUkmsgzXjViHRVG0Vs2fcnwXcv4dAW2sZ6zm1eLb1KdY3bV2 OOLcVJxA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kpo4o-0006Yu-Gd; Thu, 17 Dec 2020 07:51:54 +0000 Received: from esa.microchip.iphmx.com ([68.232.154.123]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kpo4k-0006YB-L1 for linux-arm-kernel@lists.infradead.org; Thu, 17 Dec 2020 07:51:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1608191510; x=1639727510; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=V0+P/Wau6DK+VWISPTtfqREu8S66VAPbxr1EelllKKg=; b=oldBU15dC7XNATiWO4ojgCGq9AqXH31s8A6qfqU5TXl25fnEvOZhWntL px0mpk8KI4Mr6FXNXWSC3co8D+2iSJkoXOoKkIzmV19shcsyqwk6KFmWL gBYk55wfcE99UN8aC76AzdcX6/JPAC4P/P1GBpzy0e4cjhxLdqIZevI48 TKRPlDt1+RAkVSForlGhO5ZORUxy5Mqgga+0sEVbr0H+2mfukctPJ4RVa e5DMuHjuih2RSZTJt+FGmPJn+rI5RS3yDJD/vkKqc+Eu8JEvKnfucfaTY 6jNdBVBcM72GCSUiWtto0094/MH9mvJg85iGyHxL0TKiw8iTlMkyi6qsY w==; IronPort-SDR: be209Wyx6TQlBk3m/qVQtPNl6cYEKfZu//cXDiGmdDNdgRIXLHLtYrT591PK6cTLgsmJ3ad1Cg M3O1B28M4HTGhmybi4gI0t6pvrnN+q1/m4lFaLqvs2c3k2uWuu1jpj640F8CrLqc10LoaNNiIV DbUBDAA4CgBjo5613gtBdml5YCzYlGJi4p6k23G1TkD3oGFZtosy0LtDfuZ7ex3ue132DYNC33 Zjh07XcktCbILeUq6RwdLGyUK4J71UDoCthUDZ59R3GyDsOpwJuCnKffl5f/Wj/sQ1gYPWKUuk f2o= X-IronPort-AV: E=Sophos;i="5.78,426,1599548400"; d="scan'208";a="37730270" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa6.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 17 Dec 2020 00:51:46 -0700 Received: from chn-vm-ex03.mchp-main.com (10.10.85.151) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1979.3; Thu, 17 Dec 2020 00:51:46 -0700 Received: from mchp-dev-shegelun.microchip.com (10.10.115.15) by chn-vm-ex03.mchp-main.com (10.10.85.151) with Microsoft SMTP Server id 15.1.1979.3 via Frontend Transport; Thu, 17 Dec 2020 00:51:42 -0700 From: Steen Hegelund To: "David S. Miller" , Jakub Kicinski Subject: [RFC PATCH v2 0/8] Adding the Sparx5 Switch Driver Date: Thu, 17 Dec 2020 08:51:26 +0100 Message-ID: <20201217075134.919699-1-steen.hegelund@microchip.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201217_025150_885421_7096852E X-CRM114-Status: GOOD ( 20.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Andrew Lunn , Alexandre Belloni , linux-kernel@vger.kernel.org, Arnd Bergmann , Bjarni Jonasson , Madalin Bucur , netdev@vger.kernel.org, Steen Hegelund , Russell King , Microchip Linux Driver Support , linux-arm-kernel@lists.infradead.org, Mark Einon , Masahiro Yamada , Lars Povlsen 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 VGhpcyBzZXJpZXMgcHJvdmlkZXMgdGhlIE1pY3JvY2hpcCBTcGFyeDUgU3dpdGNoIERyaXZlcgoK VGhlIFNwYXJ4NSBDYXJyaWVyIEV0aGVybmV0IGFuZCBJbmR1c3RyaWFsIHN3aXRjaCBmYW1pbHkg ZGVsaXZlcnMgNjQKRXRoZXJuZXQgcG9ydHMgYW5kIHVwIHRvIDIwMCBHYnBzIG9mIHN3aXRjaGlu ZyBiYW5kd2lkdGguCgpJdCBwcm92aWRlcyBhIHJpY2ggc2V0IG9mIEV0aGVybmV0IHN3aXRjaGlu ZyBmZWF0dXJlcyBzdWNoIGFzIGhpZXJhcmNoaWNhbApRb1MsIGhhcmR3YXJlLWJhc2VkIE9BTSAg YW5kIHNlcnZpY2UgYWN0aXZhdGlvbiB0ZXN0aW5nLCBwcm90ZWN0aW9uCnN3aXRjaGluZywgSUVF RSAxNTg4LCBhbmQgU3luY2hyb25vdXMgRXRoZXJuZXQuCgpVc2luZyBwcm92aWRlciBicmlkZ2lu ZyAoUS1pbi1RKSBhbmQgTVBMUy9NUExTLVRQIHRlY2hub2xvZ3ksIGl0IGRlbGl2ZXJzCk1FRiBD RQoyLjAgRXRoZXJuZXQgdmlydHVhbCBjb25uZWN0aW9ucyAoRVZDcykgYW5kIGZlYXR1cmVzIGFk dmFuY2VkIFRDQU0KICBjbGFzc2lmaWNhdGlvbiBpbiBib3RoIGluZ3Jlc3MgYW5kIGVncmVzcy4K ClBlci1FVkMgZmVhdHVyZXMgaW5jbHVkZSBhZHZhbmNlZCBMMy1hd2FyZSBjbGFzc2lmaWNhdGlv biwgYSByaWNoIHNldCBvZgpzdGF0aXN0aWNzLCBPQU0gZm9yIGVuZC10by1lbmQgcGVyZm9ybWFu Y2UgbW9uaXRvcmluZywgYW5kIGR1YWwtcmF0ZQpwb2xpY2luZyBhbmQgc2hhcGluZy4KClRpbWUg c2Vuc2l0aXZlIG5ldHdvcmtpbmcgKFRTTikgaXMgc3VwcG9ydGVkIHRocm91Z2ggYSBjb21wcmVo ZW5zaXZlIHNldCBvZgpmZWF0dXJlcyBpbmNsdWRpbmcgZnJhbWUgcHJlZW1wdGlvbiwgY3V0LXRo cm91Z2gsIGZyYW1lIHJlcGxpY2F0aW9uIGFuZAplbGltaW5hdGlvbiBmb3IgcmVsaWFiaWxpdHks IGVuaGFuY2VkIHNjaGVkdWxpbmc6IGNyZWRpdC1iYXNlZCBzaGFwaW5nLAp0aW1lLWF3YXJlIHNo YXBpbmcsIGN5Y2xpYyBxdWV1aW5nLCBhbmQgZm9yd2FyZGluZywgYW5kIHBlci1zdHJlYW0gcG9s aWNpbmcKYW5kIGZpbHRlcmluZy4KClRvZ2V0aGVyIHdpdGggSUVFRSAxNTg4IGFuZCBJRUVFIDgw Mi4xQVMgc3VwcG9ydCwgdGhpcyBndWFyYW50ZWVzCmxvdy1sYXRlbmN5IGRldGVybWluaXN0aWMg bmV0d29ya2luZyBmb3IgRnJvbnRoYXVsLCBDYXJyaWVyLCBhbmQgSW5kdXN0cmlhbApFdGhlcm5l dC4KClRoZSBTcGFyeDUgc3dpdGNoIGZhbWlseSBjb25zaXN0cyBvZiBmb2xsb3dpbmcgU0tVczoK Ci0gVlNDNzU0NiBTcGFyeDUtNjQgdXAgdG8gNjQgR2JwcyBvZiBiYW5kd2lkdGggd2l0aCB0aGUg Zm9sbG93aW5nIHByaW1hcnkKICBwb3J0IGNvbmZpZ3VyYXRpb25zOgogIC0gNiAqMTBHCiAgLSAx NiAqIDIuNUcgKyAyICogMTBHCiAgLSAyNCAqIDFHICsgNCAqIDEwRwoKLSBWU0M3NTQ5IFNwYXJ4 NS05MCB1cCB0byA5MCBHYnBzIG9mIGJhbmR3aWR0aCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpbWFy eQogIHBvcnQgY29uZmlndXJhdGlvbnM6CiAgLSA5ICogMTBHCiAgLSAxNiAqIDIuNUcgKyA0ICog MTBHCiAgLSA0OCAqIDFHICsgNCAqIDEwRwoKLSBWU0M3NTUyIFNwYXJ4NS0xMjggdXAgdG8gMTI4 IEdicHMgb2YgYmFuZHdpZHRoIHdpdGggdGhlIGZvbGxvd2luZyBwcmltYXJ5CiAgcG9ydCBjb25m aWd1cmF0aW9uczoKICAtIDEyICogMTBHCiAgLSAxNiAqIDIuNUcgKyA4ICogMTBHCiAgLSA0OCAq IDFHICsgOCAqIDEwRwoKLSBWU0M3NTU2IFNwYXJ4NS0xNjAgdXAgdG8gMTYwIEdicHMgb2YgYmFu ZHdpZHRoIHdpdGggdGhlIGZvbGxvd2luZyBwcmltYXJ5CiAgcG9ydCBjb25maWd1cmF0aW9uczoK ICAtIDE2ICogMTBHCiAgLSAxMCAqIDEwRyArIDIgKiAyNUcKICAtIDE2ICogMi41RyArIDEwICog MTBHCiAgLSA0OCAqIDFHICsgMTAgKiAxMEcKCi0gVlNDNzU1OCBTcGFyeDUtMjAwIHVwIHRvIDIw MCBHYnBzIG9mIGJhbmR3aWR0aCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJpbWFyeQogIHBvcnQgY29u ZmlndXJhdGlvbnM6CiAgLSAyMCAqIDEwRwogIC0gOCAqIDI1RwoKSW4gYWRkaXRpb24sIHRoZSBk ZXZpY2Ugc3VwcG9ydHMgb25lIDEwLzEwMC8xMDAwLzI1MDAvNTAwMCBNYnBzClNHTUlJL1NlckRl cyBub2RlIHByb2Nlc3NvciBpbnRlcmZhY2UgKE5QSSkgRXRoZXJuZXQgcG9ydC4KClRoZSBTcGFy eDUgc3VwcG9ydCBpcyBkZXZlbG9wZWQgb24gdGhlIFBDQjEzNCBhbmQgUENCMTM1IGV2YWx1YXRp b24gYm9hcmRzLgoKLSBQQ0IxMzQgbWFpbiBuZXR3b3JraW5nIGZlYXR1cmVzOgogIC0gMTJ4IFNG UCsgZnJvbnQgMTBHIG1vZHVsZSBzbG90cyAoY29ubmVjdGVkIHRvIFNwYXJ4NSB0aHJvdWdoIFNG SSkuCiAgLSA4eCBTRlAyOCBmcm9udCAyNUcgbW9kdWxlIHNsb3RzIChjb25uZWN0ZWQgdG8gU3Bh cng1IHRocm91Z2ggU0ZJIGhpZ2gKICAgIHNwZWVkKS4KICAtIE9wdGlvbmFsLCBvbmUgYWRkaXRp b25hbCAxMC8xMDAvMTAwMEJBU0UtVCAoUko0NSkgRXRoZXJuZXQgcG9ydAogICAgKG9uLWJvYXJk IFZTQzgyMTEgUEhZIGNvbm5lY3RlZCB0byBTcGFyeDUgdGhyb3VnaCBTR01JSSkuCgotIFBDQjEz NSBtYWluIG5ldHdvcmtpbmcgZmVhdHVyZXM6CiAgLSA0OHgxRyAoMTAvMTAwLzEwMDBNKSBSSjQ1 IGZyb250IHBvcnRzIHVzaW5nIDEyeFZTQzg1MTQgUXVhZFBIWeKAmXMgZWFjaAogICAgY29ubmVj dGVkIHRvIFZTQzc1NTggdGhyb3VnaCBRU0dNSUkuCiAgLSA0eDEwRyAoMUcvMi41Ry81Ry8xMEcp IFJKNDUgZnJvbnQgcG9ydHMgdXNpbmcgdGhlIEFRUjQwNyAxMEcgUXVhZFBIWQogICAgZWFjaCBw b3J0IGNvbm5lY3RzIHRvIFZTQzc1NTggdGhyb3VnaCBTRkkuCiAgLSA0eCBTRlAyOCAyNUcgbW9k dWxlIHNsb3RzIG9uIGJhY2sgY29ubmVjdGVkIHRvIFZTQzc1NTggdGhyb3VnaCBTRkkgaGlnaAog ICAgc3BlZWQuCiAgLSBPcHRpb25hbCwgb25lIGFkZGl0aW9uYWwgMUcgKDEwLzEwMC8xMDAwTSkg Uko0NSBwb3J0IHVzaW5nIGFuIG9uLWJvYXJkCiAgICBWU0M4MjExIFBIWSwgd2hpY2ggY2FuIGJl IGNvbm5lY3RlZCB0byBWU0M3NTU4IE5QSSBwb3J0IHRocm91Z2ggU0dNSUkKICAgIHVzaW5nIGEg bG9vcGJhY2sgYWRkLW9uIFBDQikKClRoaXMgc2VyaWVzIHByb3ZpZGVzIHN1cHBvcnQgZm9yOgog IC0gU0ZQcyBhbmQgREFDIGNhYmxlcyB2aWEgUEhZTElOSyB3aXRoIGEgbnVtYmVyIG9mIDVHLCAx MEcgYW5kIDI1RwogICAgZGV2aWNlcyBhbmQgbWVkaWEgdHlwZXMuCiAgLSBQb3J0IG1vZHVsZSBj b25maWd1cmF0aW9uIGZvciAxME0gdG8gMjVHIHNwZWVkcyB3aXRoIFNHTUlJLCBRU0dNSUksCiAg ICAxMDAwQkFTRVgsIDI1MDBCQVNFWCBhbmQgMTBHQkFTRVIgYXMgYXBwcm9wcmlhdGUgZm9yIHRo ZXNlIG1vZGVzLgogIC0gU2VyRGVzIGNvbmZpZ3VyYXRpb24gdmlhIHRoZSBTcGFyeDUgU2VyRGVz IGRyaXZlciAoc2VlIGJlbG93KS4KICAtIEhvc3QgbW9kZSBwcm92aWRpbmcgcmVnaXN0ZXIgYmFz ZWQgaW5qZWN0aW9uIGFuZCBleHRyYWN0aW9uLgogIC0gU3dpdGNoIG1vZGUgcHJvdmlkaW5nIE1B Qy9WTEFOIHRhYmxlIGxlYXJuaW5nIGFuZCBMYXllcjIgc3dpdGNoaW5nCiAgICBvZmZsb2FkZWQg dG8gdGhlIFNwYXJ4NSBzd2l0Y2guCiAgLSBTVFAgc3RhdGUsIFZMQU4gc3VwcG9ydCwgaG9zdC9i cmlkZ2UgcG9ydCBtb2RlLCBGb3J3YXJkaW5nIERCLCBhbmQKICAgIGNvbmZpZ3VyYXRpb24gYW5k IHN0YXRpc3RpY3MgdmlhIGV0aHRvb2wuCgpNb3JlIHN1cHBvcnQgd2lsbCBiZSBhZGRlZCBhdCBh IGxhdGVyIHN0YWdlLgoKVGhlIFNwYXJ4NSBTd2l0Y2ggY2hpcCByZWdpc3RlciBtb2RlbCBjYW4g YmUgYnJvd3NlZCBoZXJlOgpMaW5rOiBodHRwczovL21pY3JvY2hpcC11bmcuZ2l0aHViLmlvL3Nw YXJ4LTVfcmVnaW5mby9yZWdpbmZvX3NwYXJ4LTUuaHRtbAoKVGhlIHNlcmllcyBkZXBlbmRzIG9u IHRoZSBmb2xsb3dpbmcgc2VyaWVzIGN1cnJlbnRseSBvbiB0aGVpciB3YXkKaW50byB0aGUga2Vy bmVsOgoKLSBTcGFyeDUgU2VyRGVzIERyaXZlcgogIExpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwu b3JnL3IvMjAyMDEyMTEwOTA1NDEuMTU3OTI2LTEtc3RlZW4uaGVnZWx1bmRAbWljcm9jaGlwLmNv bS8KCi0gU2VyaWFsIEdQSU8gQ29udHJvbGxlcgogIExpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwu b3JnL3IvMjAyMDExMTMxNDUxNTEuNjg5MDAtMS1sYXJzLnBvdmxzZW5AbWljcm9jaGlwLmNvbS8K CkNoYW5nZUxvZzoKICAgIHYyOgogICAgICAgIC0gVGhlIGRyaXZlciBwYXRjaCBoYXMgYmVlbiBz cGxpdCBpbnRvIDYgcGF0Y2hlcyBieSBmdW5jdGlvbmFsaXR5CiAgICAgICAgICBsaWtlIHRoaXM6 CiAgICAgICAgICAgIC0gdGhlIGJhc2ljIHNwYXJ4NSBkcml2ZXIKICAgICAgICAgICAgLSBob3N0 bW9kZSB3aXRoIHBoeWxpbmsgc3VwcG9ydAogICAgICAgICAgICAtIHBvcnQgbW9kdWxlIHN1cHBv cnQKICAgICAgICAgICAgLSBzd2l0Y2hpbmcsIHZsYW4gYW5kIG1hY3RhYmxlIHN1cHBvcnQKICAg ICAgICAgICAgLSBjYWxlbmRhciBiYW5kd2lkdGggYWxsb2NhdGlvbiBzdXBwb3J0CiAgICAgICAg ICAgIC0gZXRodG9vbCBjb25maWd1cmF0aW9uIGFuZCBzdGF0aXN0aWNzIHN1cHBvcnQKICAgICAg ICAtIElPIHJhbmdlcyBoYXZlIGJlZW4gY29sbGFwc2VkIGludG8ganVzdCAyICh0aGUgU2VyRGVz CiAgICAgICAgICBkcml2ZXIgdXNlcyB0aGUgYXJlYSBpbmJldHdlZW4pIGFuZCB0aGUgZHJpdmVy IHVzZXMgYW4KICAgICAgICAgIG9mZnNldCB0YWJsZSB0byBnZXQgdGhlIHRhcmdldCBpbnN0YW5j ZXMuCiAgICAgICAgLSByZWdpc3RlciBtYWNyb3MgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBmdW5j dGlvbnMKICAgICAgICAtIHJlZ2lzdGVyX25ldGRldigpIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhl IHN3aXRjaCBpbml0aWFsaXphdGlvbi4KICAgICAgICAtIHNwYXJ4NV91cGRhdGVfcG9ydF9zdGF0 czogdXNlIHJldmVyc2UgY2hyaXN0bWFzIHRyZWUKICAgICAgICAtIHNwYXJ4NV9nZXRfc3NldF9z dHJpbmdzOiBjb3B5IGluZGl2aWR1YWwgc3RyaW5ncwogICAgICAgIC0gc3Bhcng1X3BvcnRfb3Bl bjogdXBkYXRlZCB0byBiZXR0ZXIgdXNlIHBoeWxpbms6IGp1c3QgY2FsbAogICAgICAgICAgcGh5 bGlua19vZl9waHlfY29ubmVjdCBkaXJlY3RseQogICAgICAgIC0gc3Bhcng1X2Rlc3Ryb3lfbmV0 ZGV2OiBhbHdheXMgdGFrZSB0aGUgTkwgbG9jawogICAgICAgIC0gc3Bhcng1X2F0dHJfc3RwX3N0 YXRlX3NldDogYWRkZWQgbGVhcm5pbmcgc3RhdGUuCiAgICAgICAgLSBzcGFyeDVfcGh5bGlua19t YWNfY29uZmlnOiB1c2UgcGh5bGluayB0byBwcm92aWRlIHRoZQogICAgICAgICAgc3RhdHVzIGZv ciB0aGUgZGV2aWNlcyBwaHlsaW5rIGNvbnRyb2xzLgogICAgICAgIC0gc3Bhcng1X2dldF8xMDAw YmFzZXhfc3RhdHVzOiByZW5hbWVkIHRvIHNwYXJ4NV9nZXRfZGV2Mmc1X3N0YXR1cwogICAgICAg ICAgYW5kIGNvcnJlY3RlZCBhbiBlcnJvciB3aGVuIGNvbWJpbmluZyB0aGUgc3luYyBhbmQgbGlu ayBzdGF0dXMKICAgICAgICAgIGluZm9ybWF0aW9uLgogICAgICAgIC0gbGV0IHBoeWxpbmsgcHJv dmlkZSBsaW5rIHN0YXR1cyBmb3IgY3VQSFlzIGFuZCBTRlBzCiAgICAgICAgLSBjb3JyZWN0ZWQg dGhlIHBhdXNlIG1vZGUgc3RhdHVzIGhhbmRsaW5nCiAgICAgICAgLSB1c2UgZXRodG9vbCdzIGdl dF9saW5rIGZ1bmN0aW9uIGRpcmVjdGx5CiAgICAgICAgLSByZW1vdmUgdGhlIHVzZSBvZiB0aGUg cGh5X3ZhbGlkYXRlIGZ1bmN0aW9uCiAgICAgICAgLSBzcGFyeDVfdXBkYXRlX2NvdW50ZXIgZnVu Y3Rpb246IG5vIGxvbmdlciBpbmxpbmUKICAgICAgICAtIFJlbW92ZWQgdGhlIHdyYXBwZXIgZnVu Y3Rpb25zIGFyb3VuZCB0aGUgbWFjdGFibGUgbXV0ZXgKCgpTdGVlbiBIZWdlbHVuZCAoOCk6CiAg ZHQtYmluZGluZ3M6IG5ldDogc3Bhcng1OiBBZGQgc3Bhcng1LXN3aXRjaCBiaW5kaW5ncwogIG5l dDogc3Bhcng1OiBhZGQgdGhlIGJhc2ljIHNwYXJ4NSBkcml2ZXIKICBuZXQ6IHNwYXJ4NTogYWRk IGhvc3Rtb2RlIHdpdGggcGh5bGluayBzdXBwb3J0CiAgbmV0OiBzcGFyeDU6IGFkZCBwb3J0IG1v ZHVsZSBzdXBwb3J0CiAgbmV0OiBzcGFyeDU6IGFkZCBzd2l0Y2hpbmcsIHZsYW4gYW5kIG1hY3Rh YmxlIHN1cHBvcnQKICBuZXQ6IHNwYXJ4NTogYWRkIGNhbGVuZGFyIGJhbmR3aWR0aCBhbGxvY2F0 aW9uIHN1cHBvcnQKICBuZXQ6IHNwYXJ4NTogYWRkIGV0aHRvb2wgY29uZmlndXJhdGlvbiBhbmQg c3RhdGlzdGljcyBzdXBwb3J0CiAgYXJtNjQ6IGR0czogc3Bhcng1OiBBZGQgdGhlIFNwYXJ4NSBz d2l0Y2ggbm9kZQoKIC4uLi9iaW5kaW5ncy9uZXQvbWljcm9jaGlwLHNwYXJ4NS1zd2l0Y2gueWFt bCB8ICAxNzggKwogYXJjaC9hcm02NC9ib290L2R0cy9taWNyb2NoaXAvc3Bhcng1LmR0c2kgICAg IHwgICA2MCArCiAuLi4vZHRzL21pY3JvY2hpcC9zcGFyeDVfcGNiMTM0X2JvYXJkLmR0c2kgICAg fCAgNDI0ICstCiAuLi4vZHRzL21pY3JvY2hpcC9zcGFyeDVfcGNiMTM1X2JvYXJkLmR0c2kgICAg fCAgNjAyICsrLQogZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL0tjb25maWcgICAgICAg IHwgICAgMiArCiBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvTWFrZWZpbGUgICAgICAg fCAgICAyICsKIGRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZyB8 ICAgIDggKwogLi4uL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L01ha2VmaWxlICAgIHwg ICAxMSArCiAuLi4vbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfY2FsZW5kYXIuYyAgICAgICAgfCAg NTk1ICsrKwogLi4uL21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2V0aHRvb2wuYyAgICAgICAgIHwg IDk3OSArKysrCiAuLi4vbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFjdGFibGUuYyAgICAgICAg fCAgNTAyICsrKwogLi4uL2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X21haW4uYyAg IHwgIDg1NSArKysrCiAuLi4vZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5o ICAgfCAgMzcyICsrCiAuLi4vbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbl9yZWdzLmggICAg ICAgfCAzOTIyICsrKysrKysrKysrKysrKysrCiAuLi4vZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4 NS9zcGFyeDVfbmV0ZGV2LmMgfCAgMjQ2ICsrCiAuLi4vZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4 NS9zcGFyeDVfcGFja2V0LmMgfCAgMjc5ICsrCiAuLi4vbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVf cGh5bGluay5jICAgICAgICAgfCAgMTkzICsKIC4uLi9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1 L3NwYXJ4NV9wb3J0LmMgICB8IDExNDAgKysrKysKIC4uLi9ldGhlcm5ldC9taWNyb2NoaXAvc3Bh cng1L3NwYXJ4NV9wb3J0LmggICB8ICAgOTggKwogLi4uL21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1 X3N3aXRjaGRldi5jICAgICAgIHwgIDUxNiArKysKIC4uLi9ldGhlcm5ldC9taWNyb2NoaXAvc3Bh cng1L3NwYXJ4NV92bGFuLmMgICB8ICAyMjMgKwogMjEgZmlsZXMgY2hhbmdlZCwgMTExNDcgaW5z ZXJ0aW9ucygrKSwgNjAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9taWNyb2NoaXAsc3Bhcng1LXN3aXRjaC55YW1s CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4 NS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9j aGlwL3NwYXJ4NS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVy bmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X2NhbGVuZGFyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV9ldGh0b29sLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1 L3NwYXJ4NV9tYWN0YWJsZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJu ZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfbWFpbi5oCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVf bWFpbl9yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNy b2NoaXAvc3Bhcng1L3NwYXJ4NV9uZXRkZXYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3BhY2tldC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfcGh5 bGluay5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlw L3NwYXJ4NS9zcGFyeDVfcG9ydC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRo ZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfcG9ydC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfc3dpdGNoZGV2LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1 L3NwYXJ4NV92bGFuLmMKCi0tCjIuMjkuMgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK