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=-5.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable 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 16AB9C433E3 for ; Tue, 19 May 2020 11:44:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E1C2320709 for ; Tue, 19 May 2020 11:44:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="TYgG8EpJ" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728286AbgESLoG (ORCPT ); Tue, 19 May 2020 07:44:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59072 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726880AbgESLoF (ORCPT ); Tue, 19 May 2020 07:44:05 -0400 Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7CFB5C08C5C0; Tue, 19 May 2020 04:44:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=i/jtSTSQlToCGqMg1V6jGHW2xzHSbUDOgdHVIrB8dzY=; b=TYgG8EpJqFSmsxPMOIGUuUVYi 4qhSxnegror40ySupeBudw0I8hLpyWZdTXJbD6EWZaB+gpDmpTqGm9SNIYA6ktyjoevOyBZJRkAVb vUjUKytksSEhivQ8Mk2GmB5GMxW5fwDPFhd6QAv+rHccKbgBDLrpYf5B5f3L8fUtnhCOkwwPGQXuM meG+3tQpAGwLsrJpOc0qwN6oZKhWm2JSI75DshabhMfeK7aDGP5ljAFGxTaNVI3n/4wtMksDixuaV ShIgEPfU97Z0lNrqKfFrF7rzwUaUHn5By24AlmYQSvpRWNrxSXy0m3kzvGJynsrt+Wn6JLrLPFrjo TmhOqb73Q==; Received: from shell.armlinux.org.uk ([2001:4d48:ad52:3201:5054:ff:fe00:4ec]:42220) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jb0el-00056N-K6; Tue, 19 May 2020 12:43:35 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1jb0ef-0005hE-Ts; Tue, 19 May 2020 12:43:29 +0100 Date: Tue, 19 May 2020 12:43:29 +0100 From: Russell King - ARM Linux admin To: Geert Uytterhoeven Cc: Lukasz Stelmach , Dmitry Osipenko , Nicolas Pitre , Arnd Bergmann , Eric Miao , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Masahiro Yamada , Ard Biesheuvel , Marek Szyprowski , Chris Brandt , Linux ARM , Linux-Renesas , Linux Kernel Mailing List , Bartlomiej Zolnierkiewicz , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Rob Herring , Grant Likely Subject: Re: [PATCH v6] ARM: boot: Obtain start of physical memory from DTB Message-ID: <20200519114329.GB1551@shell.armlinux.org.uk> References: <20200429082120.16259-1-geert+renesas@glider.be> <20200519094637.GZ1551@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-renesas-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-renesas-soc@vger.kernel.org On Tue, May 19, 2020 at 01:21:09PM +0200, Geert Uytterhoeven wrote: > Hi Russell, > > CC devicetree > > On Tue, May 19, 2020 at 11:46 AM Russell King - ARM Linux admin > wrote: > > On Tue, May 19, 2020 at 11:44:17AM +0200, Geert Uytterhoeven wrote: > > > On Tue, May 19, 2020 at 10:54 AM Lukasz Stelmach wrote: > > > > It was <2020-04-29 śro 10:21>, when Geert Uytterhoeven wrote: > > > > > Currently, the start address of physical memory is obtained by masking > > > > > the program counter with a fixed mask of 0xf8000000. This mask value > > > > > was chosen as a balance between the requirements of different platforms. > > > > > However, this does require that the start address of physical memory is > > > > > a multiple of 128 MiB, precluding booting Linux on platforms where this > > > > > requirement is not fulfilled. > > > > > > > > > > Fix this limitation by obtaining the start address from the DTB instead, > > > > > if available (either explicitly passed, or appended to the kernel). > > > > > Fall back to the traditional method when needed. > > > > > > > > > > This allows to boot Linux on r7s9210/rza2mevb using the 64 MiB of SDRAM > > > > > on the RZA2MEVB sub board, which is located at 0x0C000000 (CS3 space), > > > > > i.e. not at a multiple of 128 MiB. > > > > > > > > > > Suggested-by: Nicolas Pitre > > > > > Signed-off-by: Geert Uytterhoeven > > > > > Reviewed-by: Nicolas Pitre > > > > > Reviewed-by: Ard Biesheuvel > > > > > Tested-by: Marek Szyprowski > > > > > Tested-by: Dmitry Osipenko > > > > > --- > > > > > > > > [...] > > > > > > > > Apparently reading physical memory layout from DTB breaks crashdump > > > > kernels. A crashdump kernel is loaded into a region of memory, that is > > > > reserved in the original (i.e. to be crashed) kernel. The reserved > > > > region is large enough for the crashdump kernel to run completely inside > > > > it and don't modify anything outside it, just read and dump the remains > > > > of the crashed kernel. Using the information from DTB makes the > > > > decompressor place the kernel outside of the dedicated region. > > > > > > > > The log below shows that a zImage and DTB are loaded at 0x18eb8000 and > > > > 0x193f6000 (physical). The kernel is expected to run at 0x18008000, but > > > > it is decompressed to 0x00008000 (see r4 reported before jumping from > > > > within __enter_kernel). If I were to suggest something, there need to be > > > > one more bit of information passed in the DTB telling the decompressor > > > > to use the old masking technique to determain kernel address. It would > > > > be set in the DTB loaded along with the crashdump kernel. > > > > > > Shouldn't the DTB passed to the crashkernel describe which region of > > > memory is to be used instead? > > > > Definitely not. The crashkernel needs to know where the RAM in the > > machine is, so that it can create a coredump of the crashed kernel. > > So the DTB should describe both ;-) > > > > Describing "to use the old masking technique" sounds a bit hackish to me. > > > I guess it cannot just restrict the /memory node to the reserved region, > > > as the crashkernel needs to be able to dump the remains of the crashed > > > kernel, which lie outside this region. > > > > Correct. > > > > > However, something under /chosen should work. > > > > Yet another sticky plaster... > > IMHO the old masking technique is the hacky solution covered by > plasters. One line of code is not "covered by plasters". There are no plasters. It's a solution that works for 99.99% of people, unlike your approach that has had a stream of issues over the last four months, and has required many reworks of the code to fix each one. That in itself speaks volumes about the suitability of the approach. > DT describes the hardware. Right, so DT is correct. > In general, where to put the kernel is a > software policy, and thus doesn't belong in DT, except perhaps under > /chosen. But that would open another can of worms, as people usually > have no business in specifying where the kernel should be located. > In the crashkernel case, there is a clear separation between memory to > be used by the crashkernel, and memory to be solely inspected by the > crashkernel. > > Devicetree Specification, Release v0.3, Section 3.4 "/memory node" says: > > "The client program may access memory not covered by any memory > reservations (see section 5.3)" > > (Section 5.3 "Memory Reservation Block" only talks about structures in > the FDT, not about DTS) > > Hence according to the above, the crashkernel is rightfully allowed to > do whatever it wants with all memory under the /memory node. > However, there is also > Documentation/devicetree/bindings/reserved-memory/reserved-memory.txt. > This suggests the crashkernel should be passed a DTB that contains a > /reserved-memory node, describing which memory cannot be used freely. > Then the decompressor needs to take this into account when deciding > where the put the kernel. So you want to throw yet more complexity at this solution to try and make it work... > Yes, the above requires changing code. But at least it provides a > path forward, getting rid of the fragile old masking technique. It's hardly fragile when it's worked fine for the last 20+ years, whereas your solution can't work without some regression being reported within a couple of weeks of it being applied. Again, that speaks volumes about which one is better than the other. Continually patching this approach to workaround one issue after another shows that it is _this_ solution that is the fragile implementation. A fragile implementation is by definition one that keeps breaking. That's yours. The masking approach hasn't "broken" for anyone, and hasn't been the cause of one single regression anywhere. Yes, there are some platforms that it doesn't work for (because they choose to reserve the first chunk of RAM for something) but that is not a regression. So, I'm not going to apply the next revision of this patch for at least one whole kernel cycle - that means scheduling it for 5.10-rc at the earliest. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC for 0.8m (est. 1762m) line in suburbia: sync at 13.1Mbps down 424kbps up 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=-5.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 7248BC433E2 for ; Tue, 19 May 2020 11:44:09 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 3F05C20709 for ; Tue, 19 May 2020 11:44:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="SYHPvhpB"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="TYgG8EpJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3F05C20709 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=armlinux.org.uk Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=sZqFfm2e89/dU5wdal3ZKRt7gMokc2PlPyUhl/3vIdk=; b=SYHPvhpBV8XE+F TmuWEGteVQrc51z4c44m5/WvoxpzynHTtGjrA89lIxCtNe0HSBOyuPKlfB7r1JEKhuk1qU5Uls0Wl W3sDGaxcZKgPPGWzH3H8EXxFUMhaHK2I54Pvh1m2UQocEKeNz3m+F8HY2iq5PBvtf++nISkP4d/t9 5HsKh83wXzmOOd5YBfmNxqZWAEfNac1KvJZgCF9YfbsqLIcahCr+DH3CD5151eBbfF4ssVImheQLk b8JaGuVBziJNu1EWEKK2iITSrTX7z3OQIASu0faLT0AueqoGTDHMIVyd/JRg9Xqo9uypa1ASMxavq ellgczXxtIJ7KvLkeBYg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jb0fI-0000Nf-Sn; Tue, 19 May 2020 11:44:08 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:3201:214:fdff:fe10:1be6]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jb0fE-0000L6-Md for linux-arm-kernel@lists.infradead.org; Tue, 19 May 2020 11:44:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=i/jtSTSQlToCGqMg1V6jGHW2xzHSbUDOgdHVIrB8dzY=; b=TYgG8EpJqFSmsxPMOIGUuUVYi 4qhSxnegror40ySupeBudw0I8hLpyWZdTXJbD6EWZaB+gpDmpTqGm9SNIYA6ktyjoevOyBZJRkAVb vUjUKytksSEhivQ8Mk2GmB5GMxW5fwDPFhd6QAv+rHccKbgBDLrpYf5B5f3L8fUtnhCOkwwPGQXuM meG+3tQpAGwLsrJpOc0qwN6oZKhWm2JSI75DshabhMfeK7aDGP5ljAFGxTaNVI3n/4wtMksDixuaV ShIgEPfU97Z0lNrqKfFrF7rzwUaUHn5By24AlmYQSvpRWNrxSXy0m3kzvGJynsrt+Wn6JLrLPFrjo TmhOqb73Q==; Received: from shell.armlinux.org.uk ([2001:4d48:ad52:3201:5054:ff:fe00:4ec]:42220) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jb0el-00056N-K6; Tue, 19 May 2020 12:43:35 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.92) (envelope-from ) id 1jb0ef-0005hE-Ts; Tue, 19 May 2020 12:43:29 +0100 Date: Tue, 19 May 2020 12:43:29 +0100 From: Russell King - ARM Linux admin To: Geert Uytterhoeven Subject: Re: [PATCH v6] ARM: boot: Obtain start of physical memory from DTB Message-ID: <20200519114329.GB1551@shell.armlinux.org.uk> References: <20200429082120.16259-1-geert+renesas@glider.be> <20200519094637.GZ1551@shell.armlinux.org.uk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200519_044405_188938_CC69AC3A X-CRM114-Status: GOOD ( 35.92 ) 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: "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , Grant Likely , Arnd Bergmann , Nicolas Pitre , Masahiro Yamada , Bartlomiej Zolnierkiewicz , Lukasz Stelmach , Linux Kernel Mailing List , Linux-Renesas , Chris Brandt , Rob Herring , Uwe =?iso-8859-1?Q?Kleine-K=F6nig?= , Eric Miao , Dmitry Osipenko , Ard Biesheuvel , Linux ARM , Marek Szyprowski Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCBNYXkgMTksIDIwMjAgYXQgMDE6MjE6MDlQTSArMDIwMCwgR2VlcnQgVXl0dGVyaG9l dmVuIHdyb3RlOgo+IEhpIFJ1c3NlbGwsCj4gCj4gQ0MgZGV2aWNldHJlZQo+IAo+IE9uIFR1ZSwg TWF5IDE5LCAyMDIwIGF0IDExOjQ2IEFNIFJ1c3NlbGwgS2luZyAtIEFSTSBMaW51eCBhZG1pbgo+ IDxsaW51eEBhcm1saW51eC5vcmcudWs+IHdyb3RlOgo+ID4gT24gVHVlLCBNYXkgMTksIDIwMjAg YXQgMTE6NDQ6MTdBTSArMDIwMCwgR2VlcnQgVXl0dGVyaG9ldmVuIHdyb3RlOgo+ID4gPiBPbiBU dWUsIE1heSAxOSwgMjAyMCBhdCAxMDo1NCBBTSBMdWthc3ogU3RlbG1hY2ggPGwuc3RlbG1hY2hA c2Ftc3VuZy5jb20+IHdyb3RlOgo+ID4gPiA+IEl0IHdhcyA8MjAyMC0wNC0yOSDFm3JvIDEwOjIx Piwgd2hlbiBHZWVydCBVeXR0ZXJob2V2ZW4gd3JvdGU6Cj4gPiA+ID4gPiBDdXJyZW50bHksIHRo ZSBzdGFydCBhZGRyZXNzIG9mIHBoeXNpY2FsIG1lbW9yeSBpcyBvYnRhaW5lZCBieSBtYXNraW5n Cj4gPiA+ID4gPiB0aGUgcHJvZ3JhbSBjb3VudGVyIHdpdGggYSBmaXhlZCBtYXNrIG9mIDB4Zjgw MDAwMDAuICBUaGlzIG1hc2sgdmFsdWUKPiA+ID4gPiA+IHdhcyBjaG9zZW4gYXMgYSBiYWxhbmNl IGJldHdlZW4gdGhlIHJlcXVpcmVtZW50cyBvZiBkaWZmZXJlbnQgcGxhdGZvcm1zLgo+ID4gPiA+ ID4gSG93ZXZlciwgdGhpcyBkb2VzIHJlcXVpcmUgdGhhdCB0aGUgc3RhcnQgYWRkcmVzcyBvZiBw aHlzaWNhbCBtZW1vcnkgaXMKPiA+ID4gPiA+IGEgbXVsdGlwbGUgb2YgMTI4IE1pQiwgcHJlY2x1 ZGluZyBib290aW5nIExpbnV4IG9uIHBsYXRmb3JtcyB3aGVyZSB0aGlzCj4gPiA+ID4gPiByZXF1 aXJlbWVudCBpcyBub3QgZnVsZmlsbGVkLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEZpeCB0aGlzIGxp bWl0YXRpb24gYnkgb2J0YWluaW5nIHRoZSBzdGFydCBhZGRyZXNzIGZyb20gdGhlIERUQiBpbnN0 ZWFkLAo+ID4gPiA+ID4gaWYgYXZhaWxhYmxlIChlaXRoZXIgZXhwbGljaXRseSBwYXNzZWQsIG9y IGFwcGVuZGVkIHRvIHRoZSBrZXJuZWwpLgo+ID4gPiA+ID4gRmFsbCBiYWNrIHRvIHRoZSB0cmFk aXRpb25hbCBtZXRob2Qgd2hlbiBuZWVkZWQuCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhpcyBhbGxv d3MgdG8gYm9vdCBMaW51eCBvbiByN3M5MjEwL3J6YTJtZXZiIHVzaW5nIHRoZSA2NCBNaUIgb2Yg U0RSQU0KPiA+ID4gPiA+IG9uIHRoZSBSWkEyTUVWQiBzdWIgYm9hcmQsIHdoaWNoIGlzIGxvY2F0 ZWQgYXQgMHgwQzAwMDAwMCAoQ1MzIHNwYWNlKSwKPiA+ID4gPiA+IGkuZS4gbm90IGF0IGEgbXVs dGlwbGUgb2YgMTI4IE1pQi4KPiA+ID4gPiA+Cj4gPiA+ID4gPiBTdWdnZXN0ZWQtYnk6IE5pY29s YXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+Cj4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHZWVy dCBVeXR0ZXJob2V2ZW4gPGdlZXJ0K3JlbmVzYXNAZ2xpZGVyLmJlPgo+ID4gPiA+ID4gUmV2aWV3 ZWQtYnk6IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+Cj4gPiA+ID4gPiBSZXZpZXdl ZC1ieTogQXJkIEJpZXNoZXV2ZWwgPGFyZGJAa2VybmVsLm9yZz4KPiA+ID4gPiA+IFRlc3RlZC1i eTogTWFyZWsgU3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPgo+ID4gPiA+ID4g VGVzdGVkLWJ5OiBEbWl0cnkgT3NpcGVua28gPGRpZ2V0eEBnbWFpbC5jb20+Cj4gPiA+ID4gPiAt LS0KPiA+ID4gPgo+ID4gPiA+IFsuLi5dCj4gPiA+ID4KPiA+ID4gPiBBcHBhcmVudGx5IHJlYWRp bmcgcGh5c2ljYWwgbWVtb3J5IGxheW91dCBmcm9tIERUQiBicmVha3MgY3Jhc2hkdW1wCj4gPiA+ ID4ga2VybmVscy4gQSBjcmFzaGR1bXAga2VybmVsIGlzIGxvYWRlZCBpbnRvIGEgcmVnaW9uIG9m IG1lbW9yeSwgdGhhdCBpcwo+ID4gPiA+IHJlc2VydmVkIGluIHRoZSBvcmlnaW5hbCAoaS5lLiB0 byBiZSBjcmFzaGVkKSBrZXJuZWwuIFRoZSByZXNlcnZlZAo+ID4gPiA+IHJlZ2lvbiBpcyBsYXJn ZSBlbm91Z2ggZm9yIHRoZSBjcmFzaGR1bXAga2VybmVsIHRvIHJ1biBjb21wbGV0ZWx5IGluc2lk ZQo+ID4gPiA+IGl0IGFuZCBkb24ndCBtb2RpZnkgYW55dGhpbmcgb3V0c2lkZSBpdCwganVzdCBy ZWFkIGFuZCBkdW1wIHRoZSByZW1haW5zCj4gPiA+ID4gb2YgdGhlIGNyYXNoZWQga2VybmVsLiBV c2luZyB0aGUgaW5mb3JtYXRpb24gZnJvbSBEVEIgbWFrZXMgdGhlCj4gPiA+ID4gZGVjb21wcmVz c29yIHBsYWNlIHRoZSBrZXJuZWwgb3V0c2lkZSBvZiB0aGUgZGVkaWNhdGVkIHJlZ2lvbi4KPiA+ ID4gPgo+ID4gPiA+IFRoZSBsb2cgYmVsb3cgc2hvd3MgdGhhdCBhIHpJbWFnZSBhbmQgRFRCIGFy ZSBsb2FkZWQgYXQgMHgxOGViODAwMCBhbmQKPiA+ID4gPiAweDE5M2Y2MDAwIChwaHlzaWNhbCku IFRoZSBrZXJuZWwgaXMgZXhwZWN0ZWQgdG8gcnVuIGF0IDB4MTgwMDgwMDAsIGJ1dAo+ID4gPiA+ IGl0IGlzIGRlY29tcHJlc3NlZCB0byAweDAwMDA4MDAwIChzZWUgcjQgcmVwb3J0ZWQgYmVmb3Jl IGp1bXBpbmcgZnJvbQo+ID4gPiA+IHdpdGhpbiBfX2VudGVyX2tlcm5lbCkuIElmIEkgd2VyZSB0 byBzdWdnZXN0IHNvbWV0aGluZywgdGhlcmUgbmVlZCB0byBiZQo+ID4gPiA+IG9uZSBtb3JlIGJp dCBvZiBpbmZvcm1hdGlvbiBwYXNzZWQgaW4gdGhlIERUQiB0ZWxsaW5nIHRoZSBkZWNvbXByZXNz b3IKPiA+ID4gPiB0byB1c2UgdGhlIG9sZCBtYXNraW5nIHRlY2huaXF1ZSB0byBkZXRlcm1haW4g a2VybmVsIGFkZHJlc3MuIEl0IHdvdWxkCj4gPiA+ID4gYmUgc2V0IGluIHRoZSBEVEIgbG9hZGVk IGFsb25nIHdpdGggdGhlIGNyYXNoZHVtcCBrZXJuZWwuCj4gPiA+Cj4gPiA+IFNob3VsZG4ndCB0 aGUgRFRCIHBhc3NlZCB0byB0aGUgY3Jhc2hrZXJuZWwgZGVzY3JpYmUgd2hpY2ggcmVnaW9uIG9m Cj4gPiA+IG1lbW9yeSBpcyB0byBiZSB1c2VkIGluc3RlYWQ/Cj4gPgo+ID4gRGVmaW5pdGVseSBu b3QuICBUaGUgY3Jhc2hrZXJuZWwgbmVlZHMgdG8ga25vdyB3aGVyZSB0aGUgUkFNIGluIHRoZQo+ ID4gbWFjaGluZSBpcywgc28gdGhhdCBpdCBjYW4gY3JlYXRlIGEgY29yZWR1bXAgb2YgdGhlIGNy YXNoZWQga2VybmVsLgo+IAo+IFNvIHRoZSBEVEIgc2hvdWxkIGRlc2NyaWJlIGJvdGggOy0pCj4g Cj4gPiA+IERlc2NyaWJpbmcgInRvIHVzZSB0aGUgb2xkIG1hc2tpbmcgdGVjaG5pcXVlIiBzb3Vu ZHMgYSBiaXQgaGFja2lzaCB0byBtZS4KPiA+ID4gSSBndWVzcyBpdCBjYW5ub3QganVzdCByZXN0 cmljdCB0aGUgL21lbW9yeSBub2RlIHRvIHRoZSByZXNlcnZlZCByZWdpb24sCj4gPiA+IGFzIHRo ZSBjcmFzaGtlcm5lbCBuZWVkcyB0byBiZSBhYmxlIHRvIGR1bXAgdGhlIHJlbWFpbnMgb2YgdGhl IGNyYXNoZWQKPiA+ID4ga2VybmVsLCB3aGljaCBsaWUgb3V0c2lkZSB0aGlzIHJlZ2lvbi4KPiA+ Cj4gPiBDb3JyZWN0Lgo+ID4KPiA+ID4gSG93ZXZlciwgc29tZXRoaW5nIHVuZGVyIC9jaG9zZW4g c2hvdWxkIHdvcmsuCj4gPgo+ID4gWWV0IGFub3RoZXIgc3RpY2t5IHBsYXN0ZXIuLi4KPiAKPiBJ TUhPIHRoZSBvbGQgbWFza2luZyB0ZWNobmlxdWUgaXMgdGhlIGhhY2t5IHNvbHV0aW9uIGNvdmVy ZWQgYnkKPiBwbGFzdGVycy4KCk9uZSBsaW5lIG9mIGNvZGUgaXMgbm90ICJjb3ZlcmVkIGJ5IHBs YXN0ZXJzIi4gIFRoZXJlIGFyZSBubyBwbGFzdGVycy4KSXQncyBhIHNvbHV0aW9uIHRoYXQgd29y a3MgZm9yIDk5Ljk5JSBvZiBwZW9wbGUsIHVubGlrZSB5b3VyIGFwcHJvYWNoCnRoYXQgaGFzIGhh ZCBhIHN0cmVhbSBvZiBpc3N1ZXMgb3ZlciB0aGUgbGFzdCBmb3VyIG1vbnRocywgYW5kIGhhcwpy ZXF1aXJlZCBtYW55IHJld29ya3Mgb2YgdGhlIGNvZGUgdG8gZml4IGVhY2ggb25lLiAgVGhhdCBp biBpdHNlbGYKc3BlYWtzIHZvbHVtZXMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBhcHBy b2FjaC4KCj4gRFQgZGVzY3JpYmVzIHRoZSBoYXJkd2FyZS4KClJpZ2h0LCBzbyBEVCBpcyBjb3Jy ZWN0LgoKPiBJbiBnZW5lcmFsLCB3aGVyZSB0byBwdXQgdGhlIGtlcm5lbCBpcyBhCj4gc29mdHdh cmUgcG9saWN5LCBhbmQgdGh1cyBkb2Vzbid0IGJlbG9uZyBpbiBEVCwgZXhjZXB0IHBlcmhhcHMg dW5kZXIKPiAvY2hvc2VuLiAgQnV0IHRoYXQgd291bGQgb3BlbiBhbm90aGVyIGNhbiBvZiB3b3Jt cywgYXMgcGVvcGxlIHVzdWFsbHkKPiBoYXZlIG5vIGJ1c2luZXNzIGluIHNwZWNpZnlpbmcgd2hl cmUgdGhlIGtlcm5lbCBzaG91bGQgYmUgbG9jYXRlZC4KPiBJbiB0aGUgY3Jhc2hrZXJuZWwgY2Fz ZSwgdGhlcmUgaXMgYSBjbGVhciBzZXBhcmF0aW9uIGJldHdlZW4gbWVtb3J5IHRvCj4gYmUgdXNl ZCBieSB0aGUgY3Jhc2hrZXJuZWwsIGFuZCBtZW1vcnkgdG8gYmUgc29sZWx5IGluc3BlY3RlZCBi eSB0aGUKPiBjcmFzaGtlcm5lbC4KPiAKPiBEZXZpY2V0cmVlIFNwZWNpZmljYXRpb24sIFJlbGVh c2UgdjAuMywgU2VjdGlvbiAzLjQgIi9tZW1vcnkgbm9kZSIgc2F5czoKPiAKPiAgICAgIlRoZSBj bGllbnQgcHJvZ3JhbSBtYXkgYWNjZXNzIG1lbW9yeSBub3QgY292ZXJlZCBieSBhbnkgbWVtb3J5 Cj4gICAgICByZXNlcnZhdGlvbnMgKHNlZSBzZWN0aW9uIDUuMykiCj4gCj4gKFNlY3Rpb24gNS4z ICJNZW1vcnkgUmVzZXJ2YXRpb24gQmxvY2siIG9ubHkgdGFsa3MgYWJvdXQgc3RydWN0dXJlcyBp bgo+IHRoZSBGRFQsIG5vdCBhYm91dCBEVFMpCj4gCj4gSGVuY2UgYWNjb3JkaW5nIHRvIHRoZSBh Ym92ZSwgdGhlIGNyYXNoa2VybmVsIGlzIHJpZ2h0ZnVsbHkgYWxsb3dlZCB0bwo+IGRvIHdoYXRl dmVyIGl0IHdhbnRzIHdpdGggYWxsIG1lbW9yeSB1bmRlciB0aGUgL21lbW9yeSBub2RlLgo+IEhv d2V2ZXIsIHRoZXJlIGlzIGFsc28KPiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mv cmVzZXJ2ZWQtbWVtb3J5L3Jlc2VydmVkLW1lbW9yeS50eHQuCj4gVGhpcyBzdWdnZXN0cyB0aGUg Y3Jhc2hrZXJuZWwgc2hvdWxkIGJlIHBhc3NlZCBhIERUQiB0aGF0IGNvbnRhaW5zIGEKPiAvcmVz ZXJ2ZWQtbWVtb3J5IG5vZGUsIGRlc2NyaWJpbmcgd2hpY2ggbWVtb3J5IGNhbm5vdCBiZSB1c2Vk IGZyZWVseS4KPiBUaGVuIHRoZSBkZWNvbXByZXNzb3IgbmVlZHMgdG8gdGFrZSB0aGlzIGludG8g YWNjb3VudCB3aGVuIGRlY2lkaW5nCj4gd2hlcmUgdGhlIHB1dCB0aGUga2VybmVsLgoKU28geW91 IHdhbnQgdG8gdGhyb3cgeWV0IG1vcmUgY29tcGxleGl0eSBhdCB0aGlzIHNvbHV0aW9uIHRvIHRy eSBhbmQKbWFrZSBpdCB3b3JrLi4uCgo+IFllcywgdGhlIGFib3ZlIHJlcXVpcmVzIGNoYW5naW5n IGNvZGUuIEJ1dCBhdCBsZWFzdCBpdCBwcm92aWRlcyBhCj4gcGF0aCBmb3J3YXJkLCBnZXR0aW5n IHJpZCBvZiB0aGUgZnJhZ2lsZSBvbGQgbWFza2luZyB0ZWNobmlxdWUuCgpJdCdzIGhhcmRseSBm cmFnaWxlIHdoZW4gaXQncyB3b3JrZWQgZmluZSBmb3IgdGhlIGxhc3QgMjArIHllYXJzLAp3aGVy ZWFzIHlvdXIgc29sdXRpb24gY2FuJ3Qgd29yayB3aXRob3V0IHNvbWUgcmVncmVzc2lvbiBiZWlu ZyByZXBvcnRlZAp3aXRoaW4gYSBjb3VwbGUgb2Ygd2Vla3Mgb2YgaXQgYmVpbmcgYXBwbGllZC4g IEFnYWluLCB0aGF0IHNwZWFrcwp2b2x1bWVzIGFib3V0IHdoaWNoIG9uZSBpcyBiZXR0ZXIgdGhh biB0aGUgb3RoZXIuCgpDb250aW51YWxseSBwYXRjaGluZyB0aGlzIGFwcHJvYWNoIHRvIHdvcmth cm91bmQgb25lIGlzc3VlIGFmdGVyIGFub3RoZXIKc2hvd3MgdGhhdCBpdCBpcyBfdGhpc18gc29s dXRpb24gdGhhdCBpcyB0aGUgZnJhZ2lsZSBpbXBsZW1lbnRhdGlvbi4KCkEgZnJhZ2lsZSBpbXBs ZW1lbnRhdGlvbiBpcyBieSBkZWZpbml0aW9uIG9uZSB0aGF0IGtlZXBzIGJyZWFraW5nLgpUaGF0 J3MgeW91cnMuICBUaGUgbWFza2luZyBhcHByb2FjaCBoYXNuJ3QgImJyb2tlbiIgZm9yIGFueW9u ZSwgYW5kCmhhc24ndCBiZWVuIHRoZSBjYXVzZSBvZiBvbmUgc2luZ2xlIHJlZ3Jlc3Npb24gYW55 d2hlcmUuICBZZXMsIHRoZXJlCmFyZSBzb21lIHBsYXRmb3JtcyB0aGF0IGl0IGRvZXNuJ3Qgd29y ayBmb3IgKGJlY2F1c2UgdGhleSBjaG9vc2UgdG8KcmVzZXJ2ZSB0aGUgZmlyc3QgY2h1bmsgb2Yg UkFNIGZvciBzb21ldGhpbmcpIGJ1dCB0aGF0IGlzIG5vdCBhCnJlZ3Jlc3Npb24uCgpTbywgSSdt IG5vdCBnb2luZyB0byBhcHBseSB0aGUgbmV4dCByZXZpc2lvbiBvZiB0aGlzIHBhdGNoIGZvciBh dCBsZWFzdApvbmUgd2hvbGUga2VybmVsIGN5Y2xlIC0gdGhhdCBtZWFucyBzY2hlZHVsaW5nIGl0 IGZvciA1LjEwLXJjIGF0IHRoZQplYXJsaWVzdC4KCi0tIApSTUsncyBQYXRjaCBzeXN0ZW06IGh0 dHBzOi8vd3d3LmFybWxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hlcy8KRlRUQyBmb3IgMC44 bSAoZXN0LiAxNzYybSkgbGluZSBpbiBzdWJ1cmJpYTogc3luYyBhdCAxMy4xTWJwcyBkb3duIDQy NGticHMgdXAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5m cmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LWFybS1rZXJuZWwK