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 2403FC433F5 for ; Tue, 4 Jan 2022 08:36:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233650AbiADIgh (ORCPT ); Tue, 4 Jan 2022 03:36:37 -0500 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:45449 "EHLO relay5-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229677AbiADIgg (ORCPT ); Tue, 4 Jan 2022 03:36:36 -0500 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id A8DD01C0006; Tue, 4 Jan 2022 08:36:31 +0000 (UTC) From: Miquel Raynal To: Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus , Pratyush Yadav , Michael Walle , , Mark Brown , Cc: Julien Su , Jaime Liao , Thomas Petazzoni , Boris Brezillon , Xiangsheng Hou , Miquel Raynal Subject: [PATCH v9 00/13] External ECC engines & Macronix support Date: Tue, 4 Jan 2022 09:36:18 +0100 Message-Id: <20220104083631.40776-1-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-spi@vger.kernel.org Hello all, I've applied the beginning of the series (bindings + ECC part) in a branch named spi-mem-ecc on the MTD korg repository. After discussing a bit more some details, I decided not to rush and did not apply the second halve of the series for v5.17. Here is now the second halve again in a hopefully better shape. I am expecting a few acks on this one and I'll then rebase spi-mem-ecc on top of v5.18-rc1, apply these patches and share them with the spi tree. Cheers, Miquèl Changes in v9: * Dropped the patch from Pratyush, keeping the DTR check in spi_mem_dtr_supports_op() as it was before the series. Pratyush will later reroll its entire series on top of this. * Changed the location of the spi_controller_mem_caps capabilities to be in the spi-controller structure, as initially advised by Mark, then repeated by Boris and Pratyush. Changes in v8: * Applied this patch from Pratyush at the beginning of my series: https://lore.kernel.org/all/20210531181757.19458-5-p.yadav@ti.com/ Made the necessary changes in the following commits. * Changed the spi-mem-op ecc_en parameter to become ecc and match the dtr parameter. Changed its type to "u8 : 1" as well for the same reason. Moved it to the data sub-structure as advised by Pratyush. * Added the received Acks/R-by. Changes in v7: * Added a macro to check if the caps are present or not before accessing them. This allows for optional caps. * Dropped the 'no-caps' instance created in v6. * Reworked a bit all the patches using these caps to have a nice and bisectable series, like adding missing static keywords. Changes in v6: * Re-include the first patches because a few things have changed in the bindings. These are only style changes as Rob asked to group every property above or below the description field, which I applied to all the binding commits, but without any further update. * Created a spi-mem capabilities structure. Put that one in the spi-mem ops strucure and ensured that all the controllers provided one. * Created a default "no-caps" empty instance that controller drivers can point to by default. * Dropped the spi_mem_generic_defaults_op() intermediate helper entirely (not needed anymore). Changes in v5: * Moved a helper in the core as it seems that it will be useful for other ECC engines as well (Xiangsheng Hou for Mediatek will need it). * Changed the parameters of the spi_mem_generic_supports_op() function in order to take a structure as input instead of a list of arguments, which will be much easier to complement in the future if ever needed. Changes in v4: * The first half of the series has been left aside (all the binding changes + the external mode in the Macronix driver), now let's focus on the pipelined mode. * Added the ecc_en spi_mem_op structure parameter in a dedicated commit. * Introduced a new helper for supporting generically the supported ops. * Used this new helper in the macronix driver. * By default all the other drivers would refuse a spi_mem_op with ecc_en enabled. Changes in v3: * Added Mark's R-by. * Added a commit changing the initialization order between the dirmaps and the ECC engine so that the core might now if we are using a pipelined engine or not. * Stopped creating additional dirmaps with ECC if the engine is not a pipelined engine. * Solved the kernel test robot reports. In particular, I added a dependency on MTD_NAND_ECC to Macronix SPI controller driver. * Added a patch to clean the NAND controller yaml file before moving some bits to nand-chip.yaml. This addresses the comments made by Rob about the useless allOf's. * Used platform_get_irq_byname_optional() in order to avoid useless warnings when there is no IRQ. Changes in v2: * Fixed the bindings and added Rob's acks when relevant. * Added locking in the ECC engine driver. * Brought more changes in the core in order to bring the ECC information into the spi_mem_op structure with the idea of avoiding any races between parallel calls on the same engine. * Reorganized the ECC driver entirely in order to have a per-engine mxic structure plus a per-NAND context. This lead to a number of changes internally which cannot all be listed. Changes since the RFC: * Rebased on top of v5.15-rc1. * Fixed the dirmap configuration. * Added the various tags received. * Fixed the bindings as reported by the robots. * Fixed the return value of the helper counting bitflips. * Included a fix from Jaime Liao in the external pattern logic. * Added the yaml conversion of Macronix SPI controller description. * Added the yaml conversion of the SPI-NAND description. * Created a nand-chip.yaml file to share properties between SPI-NAND and raw NAND. Miquel Raynal (13): spi: spi-mem: Introduce a capability structure spi: spi-mem: Check the controller extra capabilities spi: cadence-quadspi: Provide a capability structure spi: mxic: Provide a capability structure spi: spi-mem: Kill the spi_mem_dtr_supports_op() helper spi: spi-mem: Add an ecc parameter to the spi_mem_op structure mtd: spinand: Delay a little bit the dirmap creation mtd: spinand: Create direct mapping descriptors for ECC operations spi: mxic: Fix the transmit path spi: mxic: Create a helper to configure the controller before an operation spi: mxic: Create a helper to ease the start of an operation spi: mxic: Add support for direct mapping spi: mxic: Add support for pipelined ECC operations drivers/mtd/nand/spi/core.c | 51 ++++- drivers/spi/Kconfig | 2 +- drivers/spi/spi-cadence-quadspi.c | 10 +- drivers/spi/spi-mem.c | 32 +-- drivers/spi/spi-mxic.c | 340 ++++++++++++++++++++++++------ include/linux/mtd/spinand.h | 2 + include/linux/spi/spi-mem.h | 27 ++- include/linux/spi/spi.h | 3 + 8 files changed, 367 insertions(+), 100 deletions(-) -- 2.27.0 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 19A22C433F5 for ; Tue, 4 Jan 2022 08:37:54 +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=h8MYbBfxstB3IEOyjFzQNxXWIriUaCjD+MseVdOPYdE=; b=ADG3MswRoJzuR3 r5Kcu8P5rHq+N+NXrQ2tILY127hVT8ucsIpcxK52vur7F2ntneB3BWhAaozNlAcbZf+Br2CYSWRKn 9ToXOpcwlIdvS8JHhQlPSgZFopavDcVM/2PnOa2UZIreEyCLq+b8qOoSzQPsaoLYsZgKutvOO/xu0 W1xc7vxiBB4WRioajL8aRZQP2i1zp9npV1oCNAANfsS1B5lEijLkJFUbMYAQ/mLq4Z/quJLGN0O6J WB01ueK29+n9g5J63FCX4KABW64yQDf/Ubw9UofX3RpBesy6IiGZLlHYsH1oCwEgSrTigBVROazQR pTqdBUiVVAqdSM4qbm/Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4fJk-00Akqr-L8; Tue, 04 Jan 2022 08:37:16 +0000 Received: from relay5-d.mail.gandi.net ([217.70.183.197]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1n4fJ8-00Ake3-7d for linux-mtd@lists.infradead.org; Tue, 04 Jan 2022 08:36:44 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id A8DD01C0006; Tue, 4 Jan 2022 08:36:31 +0000 (UTC) From: Miquel Raynal To: Richard Weinberger , Vignesh Raghavendra , Tudor Ambarus , Pratyush Yadav , Michael Walle , , Mark Brown , Cc: Julien Su , Jaime Liao , Thomas Petazzoni , Boris Brezillon , Xiangsheng Hou , Miquel Raynal Subject: [PATCH v9 00/13] External ECC engines & Macronix support Date: Tue, 4 Jan 2022 09:36:18 +0100 Message-Id: <20220104083631.40776-1-miquel.raynal@bootlin.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220104_003638_623910_BD688BE1 X-CRM114-Status: GOOD ( 27.48 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGVsbG8gYWxsLAoKSSd2ZSBhcHBsaWVkIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlcmllcyAoYmlu ZGluZ3MgKyBFQ0MgcGFydCkgaW4gYQpicmFuY2ggbmFtZWQgc3BpLW1lbS1lY2Mgb24gdGhlIE1U RCBrb3JnIHJlcG9zaXRvcnkuIEFmdGVyIGRpc2N1c3NpbmcgYQpiaXQgbW9yZSBzb21lIGRldGFp bHMsIEkgZGVjaWRlZCBub3QgdG8gcnVzaCBhbmQgZGlkIG5vdCBhcHBseSB0aGUKc2Vjb25kIGhh bHZlIG9mIHRoZSBzZXJpZXMgZm9yIHY1LjE3LiBIZXJlIGlzIG5vdyB0aGUgc2Vjb25kIGhhbHZl IGFnYWluCmluIGEgaG9wZWZ1bGx5IGJldHRlciBzaGFwZS4gSSBhbSBleHBlY3RpbmcgYSBmZXcg YWNrcyBvbiB0aGlzIG9uZSBhbmQKSSdsbCB0aGVuIHJlYmFzZSBzcGktbWVtLWVjYyBvbiB0b3Ag b2YgdjUuMTgtcmMxLCBhcHBseSB0aGVzZSBwYXRjaGVzCmFuZCBzaGFyZSB0aGVtIHdpdGggdGhl IHNwaSB0cmVlLgoKQ2hlZXJzLApNaXF1w6hsCgpDaGFuZ2VzIGluIHY5OgoqIERyb3BwZWQgdGhl IHBhdGNoIGZyb20gUHJhdHl1c2gsIGtlZXBpbmcgdGhlIERUUiBjaGVjayBpbgogIHNwaV9tZW1f ZHRyX3N1cHBvcnRzX29wKCkgYXMgaXQgd2FzIGJlZm9yZSB0aGUgc2VyaWVzLiBQcmF0eXVzaCB3 aWxsCiAgbGF0ZXIgcmVyb2xsIGl0cyBlbnRpcmUgc2VyaWVzIG9uIHRvcCBvZiB0aGlzLgoqIENo YW5nZWQgdGhlIGxvY2F0aW9uIG9mIHRoZSBzcGlfY29udHJvbGxlcl9tZW1fY2FwcyBjYXBhYmls aXRpZXMgdG8gYmUKICBpbiB0aGUgc3BpLWNvbnRyb2xsZXIgc3RydWN0dXJlLCBhcyBpbml0aWFs bHkgYWR2aXNlZCBieSBNYXJrLCB0aGVuCiAgcmVwZWF0ZWQgYnkgQm9yaXMgYW5kIFByYXR5dXNo LgoKQ2hhbmdlcyBpbiB2ODoKKiBBcHBsaWVkIHRoaXMgcGF0Y2ggZnJvbSBQcmF0eXVzaCBhdCB0 aGUgYmVnaW5uaW5nIG9mIG15IHNlcmllczoKICBodHRwczovL2xvcmUua2VybmVsLm9yZy9hbGwv MjAyMTA1MzExODE3NTcuMTk0NTgtNS1wLnlhZGF2QHRpLmNvbS8KICBNYWRlIHRoZSBuZWNlc3Nh cnkgY2hhbmdlcyBpbiB0aGUgZm9sbG93aW5nIGNvbW1pdHMuCiogQ2hhbmdlZCB0aGUgc3BpLW1l bS1vcCBlY2NfZW4gcGFyYW1ldGVyIHRvIGJlY29tZSBlY2MgYW5kIG1hdGNoIHRoZQogIGR0ciBw YXJhbWV0ZXIuIENoYW5nZWQgaXRzIHR5cGUgdG8gInU4IDogMSIgYXMgd2VsbCBmb3IgdGhlIHNh bWUKICByZWFzb24uIE1vdmVkIGl0IHRvIHRoZSBkYXRhIHN1Yi1zdHJ1Y3R1cmUgYXMgYWR2aXNl ZCBieSBQcmF0eXVzaC4KKiBBZGRlZCB0aGUgcmVjZWl2ZWQgQWNrcy9SLWJ5LgoKQ2hhbmdlcyBp biB2NzoKKiBBZGRlZCBhIG1hY3JvIHRvIGNoZWNrIGlmIHRoZSBjYXBzIGFyZSBwcmVzZW50IG9y IG5vdCBiZWZvcmUgYWNjZXNzaW5nCiAgdGhlbS4gVGhpcyBhbGxvd3MgZm9yIG9wdGlvbmFsIGNh cHMuCiogRHJvcHBlZCB0aGUgJ25vLWNhcHMnIGluc3RhbmNlIGNyZWF0ZWQgaW4gdjYuCiogUmV3 b3JrZWQgYSBiaXQgYWxsIHRoZSBwYXRjaGVzIHVzaW5nIHRoZXNlIGNhcHMgdG8gaGF2ZSBhIG5p Y2UgYW5kCiAgYmlzZWN0YWJsZSBzZXJpZXMsIGxpa2UgYWRkaW5nIG1pc3Npbmcgc3RhdGljIGtl eXdvcmRzLgoKQ2hhbmdlcyBpbiB2NjoKKiBSZS1pbmNsdWRlIHRoZSBmaXJzdCBwYXRjaGVzIGJl Y2F1c2UgYSBmZXcgdGhpbmdzIGhhdmUgY2hhbmdlZCBpbiB0aGUKICBiaW5kaW5ncy4gVGhlc2Ug YXJlIG9ubHkgc3R5bGUgY2hhbmdlcyBhcyBSb2IgYXNrZWQgdG8gZ3JvdXAgZXZlcnkKICBwcm9w ZXJ0eSBhYm92ZSBvciBiZWxvdyB0aGUgZGVzY3JpcHRpb24gZmllbGQsIHdoaWNoIEkgYXBwbGll ZCB0byBhbGwKICB0aGUgYmluZGluZyBjb21taXRzLCBidXQgd2l0aG91dCBhbnkgZnVydGhlciB1 cGRhdGUuCiogQ3JlYXRlZCBhIHNwaS1tZW0gY2FwYWJpbGl0aWVzIHN0cnVjdHVyZS4gUHV0IHRo YXQgb25lIGluIHRoZSBzcGktbWVtCiAgb3BzIHN0cnVjdXJlIGFuZCBlbnN1cmVkIHRoYXQgYWxs IHRoZSBjb250cm9sbGVycyBwcm92aWRlZCBvbmUuCiogQ3JlYXRlZCBhIGRlZmF1bHQgIm5vLWNh cHMiIGVtcHR5IGluc3RhbmNlIHRoYXQgY29udHJvbGxlciBkcml2ZXJzIGNhbgogIHBvaW50IHRv IGJ5IGRlZmF1bHQuCiogRHJvcHBlZCB0aGUgc3BpX21lbV9nZW5lcmljX2RlZmF1bHRzX29wKCkg aW50ZXJtZWRpYXRlIGhlbHBlciBlbnRpcmVseQogIChub3QgbmVlZGVkIGFueW1vcmUpLgoKQ2hh bmdlcyBpbiB2NToKKiBNb3ZlZCBhIGhlbHBlciBpbiB0aGUgY29yZSBhcyBpdCBzZWVtcyB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsIGZvcgogIG90aGVyIEVDQyBlbmdpbmVzIGFzIHdlbGwgKFhpYW5n c2hlbmcgSG91IGZvciBNZWRpYXRlayB3aWxsIG5lZWQgaXQpLgoqIENoYW5nZWQgdGhlIHBhcmFt ZXRlcnMgb2YgdGhlIHNwaV9tZW1fZ2VuZXJpY19zdXBwb3J0c19vcCgpIGZ1bmN0aW9uCiAgaW4g b3JkZXIgdG8gdGFrZSBhIHN0cnVjdHVyZSBhcyBpbnB1dCBpbnN0ZWFkIG9mIGEgbGlzdCBvZiBh cmd1bWVudHMsCiAgd2hpY2ggd2lsbCBiZSBtdWNoIGVhc2llciB0byBjb21wbGVtZW50IGluIHRo ZSBmdXR1cmUgaWYgZXZlciBuZWVkZWQuCgpDaGFuZ2VzIGluIHY0OgoqIFRoZSBmaXJzdCBoYWxm IG9mIHRoZSBzZXJpZXMgaGFzIGJlZW4gbGVmdCBhc2lkZSAoYWxsIHRoZSBiaW5kaW5nCiAgY2hh bmdlcyArIHRoZSBleHRlcm5hbCBtb2RlIGluIHRoZSBNYWNyb25peCBkcml2ZXIpLCBub3cgbGV0 J3MgZm9jdXMKICBvbiB0aGUgcGlwZWxpbmVkIG1vZGUuCiogQWRkZWQgdGhlIGVjY19lbiBzcGlf bWVtX29wIHN0cnVjdHVyZSBwYXJhbWV0ZXIgaW4gYSBkZWRpY2F0ZWQgY29tbWl0LgoqIEludHJv ZHVjZWQgYSBuZXcgaGVscGVyIGZvciBzdXBwb3J0aW5nIGdlbmVyaWNhbGx5IHRoZSBzdXBwb3J0 ZWQgb3BzLgoqIFVzZWQgdGhpcyBuZXcgaGVscGVyIGluIHRoZSBtYWNyb25peCBkcml2ZXIuCiog QnkgZGVmYXVsdCBhbGwgdGhlIG90aGVyIGRyaXZlcnMgd291bGQgcmVmdXNlIGEgc3BpX21lbV9v cCB3aXRoIGVjY19lbgogIGVuYWJsZWQuCgpDaGFuZ2VzIGluIHYzOgoqIEFkZGVkIE1hcmsncyBS LWJ5LgoqIEFkZGVkIGEgY29tbWl0IGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiBvcmRlciBi ZXR3ZWVuIHRoZSBkaXJtYXBzCiAgYW5kIHRoZSBFQ0MgZW5naW5lIHNvIHRoYXQgdGhlIGNvcmUg bWlnaHQgbm93IGlmIHdlIGFyZSB1c2luZyBhCiAgcGlwZWxpbmVkIGVuZ2luZSBvciBub3QuCiog U3RvcHBlZCBjcmVhdGluZyBhZGRpdGlvbmFsIGRpcm1hcHMgd2l0aCBFQ0MgaWYgdGhlIGVuZ2lu ZSBpcyBub3QgYQogIHBpcGVsaW5lZCBlbmdpbmUuCiogU29sdmVkIHRoZSBrZXJuZWwgdGVzdCBy b2JvdCByZXBvcnRzLiBJbiBwYXJ0aWN1bGFyLCBJIGFkZGVkIGEKICBkZXBlbmRlbmN5IG9uIE1U RF9OQU5EX0VDQyB0byBNYWNyb25peCBTUEkgY29udHJvbGxlciBkcml2ZXIuCiogQWRkZWQgYSBw YXRjaCB0byBjbGVhbiB0aGUgTkFORCBjb250cm9sbGVyIHlhbWwgZmlsZSBiZWZvcmUgbW92aW5n CiAgc29tZSBiaXRzIHRvIG5hbmQtY2hpcC55YW1sLiBUaGlzIGFkZHJlc3NlcyB0aGUgY29tbWVu dHMgbWFkZSBieSBSb2IKICBhYm91dCB0aGUgdXNlbGVzcyBhbGxPZidzLgoqIFVzZWQgcGxhdGZv cm1fZ2V0X2lycV9ieW5hbWVfb3B0aW9uYWwoKSBpbiBvcmRlciB0byBhdm9pZCB1c2VsZXNzCiAg d2FybmluZ3Mgd2hlbiB0aGVyZSBpcyBubyBJUlEuCgpDaGFuZ2VzIGluIHYyOgoqIEZpeGVkIHRo ZSBiaW5kaW5ncyBhbmQgYWRkZWQgUm9iJ3MgYWNrcyB3aGVuIHJlbGV2YW50LgoqIEFkZGVkIGxv Y2tpbmcgaW4gdGhlIEVDQyBlbmdpbmUgZHJpdmVyLgoqIEJyb3VnaHQgbW9yZSBjaGFuZ2VzIGlu IHRoZSBjb3JlIGluIG9yZGVyIHRvIGJyaW5nIHRoZSBFQ0MgaW5mb3JtYXRpb24KICBpbnRvIHRo ZSBzcGlfbWVtX29wIHN0cnVjdHVyZSB3aXRoIHRoZSBpZGVhIG9mIGF2b2lkaW5nIGFueSByYWNl cwogIGJldHdlZW4gcGFyYWxsZWwgY2FsbHMgb24gdGhlIHNhbWUgZW5naW5lLgoqIFJlb3JnYW5p emVkIHRoZSBFQ0MgZHJpdmVyIGVudGlyZWx5IGluIG9yZGVyIHRvIGhhdmUgYSBwZXItZW5naW5l IG14aWMKICBzdHJ1Y3R1cmUgcGx1cyBhIHBlci1OQU5EIGNvbnRleHQuIFRoaXMgbGVhZCB0byBh IG51bWJlciBvZiBjaGFuZ2VzCiAgaW50ZXJuYWxseSB3aGljaCBjYW5ub3QgYWxsIGJlIGxpc3Rl ZC4KCkNoYW5nZXMgc2luY2UgdGhlIFJGQzoKKiBSZWJhc2VkIG9uIHRvcCBvZiB2NS4xNS1yYzEu CiogRml4ZWQgdGhlIGRpcm1hcCBjb25maWd1cmF0aW9uLgoqIEFkZGVkIHRoZSB2YXJpb3VzIHRh Z3MgcmVjZWl2ZWQuCiogRml4ZWQgdGhlIGJpbmRpbmdzIGFzIHJlcG9ydGVkIGJ5IHRoZSByb2Jv dHMuCiogRml4ZWQgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgaGVscGVyIGNvdW50aW5nIGJpdGZs aXBzLgoqIEluY2x1ZGVkIGEgZml4IGZyb20gSmFpbWUgTGlhbyBpbiB0aGUgZXh0ZXJuYWwgcGF0 dGVybiBsb2dpYy4KKiBBZGRlZCB0aGUgeWFtbCBjb252ZXJzaW9uIG9mIE1hY3Jvbml4IFNQSSBj b250cm9sbGVyIGRlc2NyaXB0aW9uLgoqIEFkZGVkIHRoZSB5YW1sIGNvbnZlcnNpb24gb2YgdGhl IFNQSS1OQU5EIGRlc2NyaXB0aW9uLgoqIENyZWF0ZWQgYSBuYW5kLWNoaXAueWFtbCBmaWxlIHRv IHNoYXJlIHByb3BlcnRpZXMgYmV0d2VlbiBTUEktTkFORCBhbmQKICByYXcgTkFORC4KCk1pcXVl bCBSYXluYWwgKDEzKToKICBzcGk6IHNwaS1tZW06IEludHJvZHVjZSBhIGNhcGFiaWxpdHkgc3Ry dWN0dXJlCiAgc3BpOiBzcGktbWVtOiBDaGVjayB0aGUgY29udHJvbGxlciBleHRyYSBjYXBhYmls aXRpZXMKICBzcGk6IGNhZGVuY2UtcXVhZHNwaTogUHJvdmlkZSBhIGNhcGFiaWxpdHkgc3RydWN0 dXJlCiAgc3BpOiBteGljOiBQcm92aWRlIGEgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKICBzcGk6IHNw aS1tZW06IEtpbGwgdGhlIHNwaV9tZW1fZHRyX3N1cHBvcnRzX29wKCkgaGVscGVyCiAgc3BpOiBz cGktbWVtOiBBZGQgYW4gZWNjIHBhcmFtZXRlciB0byB0aGUgc3BpX21lbV9vcCBzdHJ1Y3R1cmUK ICBtdGQ6IHNwaW5hbmQ6IERlbGF5IGEgbGl0dGxlIGJpdCB0aGUgZGlybWFwIGNyZWF0aW9uCiAg bXRkOiBzcGluYW5kOiBDcmVhdGUgZGlyZWN0IG1hcHBpbmcgZGVzY3JpcHRvcnMgZm9yIEVDQyBv cGVyYXRpb25zCiAgc3BpOiBteGljOiBGaXggdGhlIHRyYW5zbWl0IHBhdGgKICBzcGk6IG14aWM6 IENyZWF0ZSBhIGhlbHBlciB0byBjb25maWd1cmUgdGhlIGNvbnRyb2xsZXIgYmVmb3JlIGFuCiAg ICBvcGVyYXRpb24KICBzcGk6IG14aWM6IENyZWF0ZSBhIGhlbHBlciB0byBlYXNlIHRoZSBzdGFy dCBvZiBhbiBvcGVyYXRpb24KICBzcGk6IG14aWM6IEFkZCBzdXBwb3J0IGZvciBkaXJlY3QgbWFw cGluZwogIHNwaTogbXhpYzogQWRkIHN1cHBvcnQgZm9yIHBpcGVsaW5lZCBFQ0Mgb3BlcmF0aW9u cwoKIGRyaXZlcnMvbXRkL25hbmQvc3BpL2NvcmUuYyAgICAgICB8ICA1MSArKysrLQogZHJpdmVy cy9zcGkvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL3NwaS9zcGktY2Fk ZW5jZS1xdWFkc3BpLmMgfCAgMTAgKy0KIGRyaXZlcnMvc3BpL3NwaS1tZW0uYyAgICAgICAgICAg ICB8ICAzMiArLS0KIGRyaXZlcnMvc3BpL3NwaS1teGljLmMgICAgICAgICAgICB8IDM0MCArKysr KysrKysrKysrKysrKysrKysrKystLS0tLS0KIGluY2x1ZGUvbGludXgvbXRkL3NwaW5hbmQuaCAg ICAgICB8ICAgMiArCiBpbmNsdWRlL2xpbnV4L3NwaS9zcGktbWVtLmggICAgICAgfCAgMjcgKyst CiBpbmNsdWRlL2xpbnV4L3NwaS9zcGkuaCAgICAgICAgICAgfCAgIDMgKwogOCBmaWxlcyBjaGFu Z2VkLCAzNjcgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQoKLS0gCjIuMjcuMAoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51 eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg==