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 3B3D4C44501 for ; Tue, 14 Jul 2026 14:53:28 +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:References:In-Reply-To: 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-Owner; bh=9D2A39RSXqrY/hp9RIEyUVr/V+wp06DewrcCBWg1JZg=; b=Mm4305GqyVGBbz 27iQKEL2u6BWacoi2t5yYjtJe2/UlW8PJiL5SmM1sWaQb4CF8nFMEV/ZbBQYJIynLsR5T5JgyPhem bJ2iowjWP0wXe2NMsSOrQzjC+JH77xcUwRGiM34KE7aVErZwtRjyc/OtsfylbMdYWjz69v4V2yKxB 4lKxn2AYOS2U2zDL0CXFB99D38O06lf+ztJ13fwwbpxCRHKlaeC7RSciaN8GGP9eN0kYPEA8RJaF9 gtxDsr2a/lP68JwzYeqmHpUssZac41YYf8Adlc9xgWSNZXIyvFnich2wbS4vj0GeqT7mJ6vjnZ1Ea z7A2tY/DHcHG0lRnsezA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wjeVZ-0000000CRPB-1ocH; Tue, 14 Jul 2026 14:53:17 +0000 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wjeVW-0000000CRMz-2qIW for linux-riscv@lists.infradead.org; Tue, 14 Jul 2026 14:53:16 +0000 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-493b27c7451so12829975e9.0 for ; Tue, 14 Jul 2026 07:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784040793; x=1784645593; darn=lists.infradead.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=pbWrlFJpCsAWWpngb8AaY/VxYoSajEZxkhMh3lUDPkg=; b=D0xopS+zvobzm7ApUseAc/ejkRfGLn06MymUuTYI7wiOYq1bOab7VUTJ6cZlZ9o1jR ILq/wOUpc0BgK5YeR6DksaAnAlW1YKdtqji2ieGgkks7zIE3v22O9KphZ/vOWG1yF/m9 lDgzR5nme+29553cSlrrHoVyNrr6UWRoEiQTDXXIaZnkA/IB9A7+aBXritFg//IdtciG uEA2tg/b7A5TMBnHP4EL8hzcECfXx99YONdxn2q2w+MEsVoT1rpFjRRa8erhrR57DKqO OBM1VnWNd5/G7OxjWE6NwBjPXQLvvji9q4B50bL4BWoFhuQCIYUYAToi3kGrPSMtQzkp WEvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784040793; x=1784645593; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pbWrlFJpCsAWWpngb8AaY/VxYoSajEZxkhMh3lUDPkg=; b=VpgzUDvaHdal9Dv/88FGiGn2uCVQuRT8gQvhAK+zbfILnTb19waBfp0c8rPloEhEZD hmQ18j98kZj2Q03rODf+GNqaMs91ov+xEDZwN/LmM5FcCUHRQmdTBv+fD7PhY+T8WsKB wFchKGTZBYQ/aoDomYXU2QfItnC0FD6FZp8hbGSuzWVKN3zeVRJB8Onj7g3tlq/b7zFV 1ya3qTMi3w0c3Wdd+17HTSz4SoJcvu5oeSnsz2isNorzIYkTag5MPNK0F4FgsfGdnCWx fV1c6pRJl/dO06nP++Vdhz6z4B3ZRXrYgtqb8X/RZ2wEc4gIn+BOLcOarRS8nRxNXBmx J30g== X-Forwarded-Encrypted: i=1; AHgh+RqCd7DidcS+dRbtQYSZmYWrWcaO8skJm2m+sX2GkfyT3BF9Chv82QLcXdz7kj+ClnH759s48FJSs6gBcg==@lists.infradead.org X-Gm-Message-State: AOJu0Yx4zWwuzjXbctioCHy1UaJBV5NByJpiW3PL9ZYh0li1b8cJTmBp oUnWI4HRnQtBtvF0vLIP1++QsC4f8sUq4JRKqsjqxbVe9P8D1ywgK1fi X-Gm-Gg: AfdE7cmdKUIbUyDHtpup57ILc3n8GizOBqbcx5Zskc71f2CdG8l3kwt7F7COrER/Lyp w3gKr26cco11ThXx5AbvIZNLxQOONqtbptSqwJqHzr2vgTim5jms5/nR84+NBSr2hnseO3Rjg64 BwtW3KttS0ILEDusixdKXiYB5mLEKz5TTYCLZe3Bb6IXbyU7j0umndDJEGyNv+KeoT15sKqbVKF JAw7W2u9yEKvhrsglb05PsfU6RuGh5NQ+QfZRDp//c+YuwBjHOiu2sFBtPjqZKqo7DlzsLY7jWp PusLReNll7PcBals6nfe/JDJpSmT4+7bjXUzBBeWxEvYM/+DiogTcoGXj1B2QzimiyYtyHXbQmz tw4ayT38nWIAxymBfh833yGUK23GJ6QR70i7vcaaGf4SPkxy+D0Gt/eDX4XE+whIL6ibkYJBeu0 BPb1O7vduYV7sUYywGYrQxzqD1G9NqW6mX1uLIYWEBYAJfg1q3A3AQKnJO+j+F X-Received: by 2002:a05:600c:8b65:b0:493:f478:4c71 with SMTP id 5b1f17b1804b1-493f8885308mr139772165e9.7.1784040792394; Tue, 14 Jul 2026 07:53:12 -0700 (PDT) Received: from pumpkin (82-69-66-36.dsl.in-addr.zen.co.uk. [82.69.66.36]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49508724786sm82851595e9.3.2026.07.14.07.53.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jul 2026 07:53:12 -0700 (PDT) Date: Tue, 14 Jul 2026 15:53:10 +0100 From: David Laight To: Guo Ren Cc: Robin Murphy , Zhanpeng Zhang , Tomasz Jeznach , Joerg Roedel , Will Deacon , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Vivian Wang , Zong Li , cuiyunhui@bytedance.com, yuanzhu@bytedance.com, iommu@lists.linux.dev, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] iommu/riscv: Use 32-bit MMIO accesses for 64-bit registers Message-ID: <20260714155310.2e17473c@pumpkin> In-Reply-To: References: <20260615064855.90316-1-zhangzhanpeng.jasper@bytedance.com> <20260713122903.9458-1-zhangzhanpeng.jasper@bytedance.com> <3591a185-d0b5-4cb0-a0d5-ae9608a4e244@arm.com> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260714_075314_775493_A5419CDD X-CRM114-Status: GOOD ( 49.94 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gVHVlLCAxNCBKdWwgMjAyNiAyMToyNDoxOSArMDgwMApHdW8gUmVuIDxndW9yZW5Aa2VybmVs Lm9yZz4gd3JvdGU6Cgo+IE9uIFR1ZSwgSnVsIDE0LCAyMDI2IGF0IDg6MjfigK9QTSBSb2JpbiBN dXJwaHkgPHJvYmluLm11cnBoeUBhcm0uY29tPiB3cm90ZToKPiA+Cj4gPiBPbiAxMy8wNy8yMDI2 IDE6MjkgcG0sIFpoYW5wZW5nIFpoYW5nIHdyb3RlOiAgCj4gPiA+IFRoZSBSSVNDLVYgSU9NTVUg c3BlY2lmaWNhdGlvbiBbMV0gcGVybWl0cyA2NC1iaXQgcmVnaXN0ZXJzIHRvIGJlIGFjY2Vzc2Vk Cj4gPiA+IHVzaW5nIHR3byAzMi1iaXQgdHJhbnNhY3Rpb25zLCBoaWdoIGhhbGYgZmlyc3QsIGFu ZCBsZWF2ZXMgdGhlIHNpbmdsZS1jb3B5Cj4gPiA+IGF0b21pY2l0eSBvZiA4LWJ5dGUgSU9NTVUg cmVnaXN0ZXIgYWNjZXNzZXMgdW5zcGVjaWZpZWQuCj4gPiA+Cj4gPiA+IFVzZSB0aGUgZ2VuZXJp YyBoaV9sb19yZWFkcV9yZWxheGVkKCkgYW5kIGhpX2xvX3dyaXRlcV9yZWxheGVkKCkgaGVscGVy cwo+ID4gPiBmb3Igb3JkaW5hcnkgNjQtYml0IElPTU1VIHJlZ2lzdGVycy4gRm9yIEREVFAsIHBv bGwgQlVTWSBpbiB0aGUgbG93IGhhbGYsCj4gPiA+IHRoZW4gcmVhZCB0aGUgaGlnaCBoYWxmIGFu ZCBjb21wb3NlIHRoZSByZWdpc3RlciB2YWx1ZSBmcm9tIHRoZSBwb2xsZWQgbG93Cj4gPiA+IGhh bGYuIEhQTSBjb3VudGVyIHJlYWRzIHJlcXVpcmUgYSByb2xsb3Zlci1hd2FyZSBzZXF1ZW5jZSBh bmQgcmVtYWluCj4gPiA+IG91dHNpZGUgdGhlc2UgYWNjZXNzb3JzLgo+ID4gPgo+ID4gPiBUaGlz IGZvbGxvd3MgdGhlIDMyLWJpdCBhY2Nlc3MgZGlyZWN0aW9uIHByb3Bvc2VkIGJ5IEd1byBSZW4g WzJdIGFuZCB1c2VzCj4gPiA+IHRoZSBnZW5lcmljIG5vbi1hdG9taWMgTU1JTyBoZWxwZXJzIHN1 Z2dlc3RlZCBieSBEYXZpZCBMYWlnaHQuCj4gPiA+Cj4gPiA+IFsxXSBodHRwczovL2RvY3Mucmlz Y3Yub3JnL3JlZmVyZW5jZS9pb21tdS8KPiA+ID4gWzJdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3Jn L3IvMjAyNTA5MDMxNDQyMTcuODM3NDQ4LTEtZ3VvcmVuQGtlcm5lbC5vcmcKPiA+ID4KPiA+ID4g U3VnZ2VzdGVkLWJ5OiBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4KPiA+ID4gU3VnZ2VzdGVk LWJ5OiBEYXZpZCBMYWlnaHQgPGRhdmlkLmxhaWdodC5saW51eEBnbWFpbC5jb20+Cj4gPiA+IFNp Z25lZC1vZmYtYnk6IFpoYW5wZW5nIFpoYW5nIDx6aGFuZ3poYW5wZW5nLmphc3BlckBieXRlZGFu Y2UuY29tPgo+ID4gPiAtLS0KPiA+ID4gQ2hhbmdlcyBpbiB2MzoKPiA+ID4gLSBVc2UgdGhlIERE VFAgYWNjZXNzIHNlcXVlbmNlIGZyb20gWzFdOiByZXRhaW4gdGhlIGxvdyBoYWxmIHJldHVybmVk IGJ5Cj4gPiA+ICAgIEJVU1kgcG9sbGluZywgcmVhZCBvbmx5IHRoZSBoaWdoIGhhbGYsIGFuZCBj b21wb3NlIHRoZSBERFRQIHZhbHVlIGZyb20KPiA+ID4gICAgdGhvc2UgdHdvIDMyLWJpdCByZWFk cy4KPiA+ID4KPiA+ID4gQ2hhbmdlcyBpbiB2MjoKPiA+ID4gLSBSZXdvcmsgdGhlIHBhdGNoIGJh c2VkIG9uIEd1byBSZW4ncyBlYXJsaWVyIHByb3Bvc2FsIFsxXS4KPiA+ID4gLSBEcm9wIHRoZSBi dWlsZC10aW1lIG9wdGlvbiBhbmQgdXNlIDMyLWJpdCBhY2Nlc3NlcyB1bmNvbmRpdGlvbmFsbHku Cj4gPiA+IC0gRHJvcCB0aGUgZ2xvYmFsIGxvY2sgYW5kIHVzZSB0aGUgZ2VuZXJpYyBoaWdoLWxv dyBNTUlPIGhlbHBlcnMsIGFzCj4gPiA+ICAgIHN1Z2dlc3RlZCBieSBEYXZpZCBMYWlnaHQuCj4g PiA+IC0gUG9sbCBERFRQLkJVU1kgdGhyb3VnaCBpdHMgbG93IGhhbGYuCj4gPiA+Cj4gPiA+IExp bmsgdG8gdjE6IFsyXQo+ID4gPiBTcGVjaWZpY2F0aW9uIGRpc2N1c3Npb246IFszXQo+ID4gPgo+ ID4gPiBbMV06IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyNTA5MDMxNDQyMTcuODM3NDQ4 LTEtZ3VvcmVuQGtlcm5lbC5vcmcKPiA+ID4gWzJdOiBodHRwczovL2xvcmUua2VybmVsLm9yZy9y LzIwMjYwNjE1MDY0ODU1LjkwMzE2LTEtemhhbmd6aGFucGVuZy5qYXNwZXJAYnl0ZWRhbmNlLmNv bQo+ID4gPiBbM106IGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi1ub24taXNhL3Jpc2N2LWlvbW11 L2lzc3Vlcy83NjUKPiA+ID4KPiA+ID4gICBkcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMgfCA5 ICsrKysrKy0tLQo+ID4gPiAgIGRyaXZlcnMvaW9tbXUvcmlzY3YvaW9tbXUuaCB8IDkgKysrLS0t LS0tCj4gPiA+ICAgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25z KC0pCj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMg Yi9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMKPiA+ID4gaW5kZXggY2VjM2RkZDdhYjEuLmQ2 NDdiNzFlYmVjIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmMK PiA+ID4gKysrIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS5jCj4gPiA+IEBAIC02NzAsOSAr NjcwLDEyIEBAIHZvaWQgcmlzY3ZfaW9tbXVfZGlzYWJsZShzdHJ1Y3QgcmlzY3ZfaW9tbXVfZGV2 aWNlICppb21tdSkKPiA+ID4KPiA+ID4gICAjZGVmaW5lIHJpc2N2X2lvbW11X3JlYWRfZGR0cChp b21tdSkgKHsgXAo+ID4gPiAgICAgICB1NjQgZGR0cDsgXAo+ID4gPiAtICAgICByaXNjdl9pb21t dV9yZWFkcV90aW1lb3V0KChpb21tdSksIFJJU0NWX0lPTU1VX1JFR19ERFRQLCBkZHRwLCBcCj4g PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShkZHRwICYgUklTQ1ZfSU9NTVVf RERUUF9CVVNZKSwgMTAsIFwKPiA+ID4gKyAgICAgdTMyIGRkdHBfbG8sIGRkdHBfaGk7IFwKPiA+ ID4gKyAgICAgcmlzY3ZfaW9tbXVfcmVhZGxfdGltZW91dCgoaW9tbXUpLCBSSVNDVl9JT01NVV9S RUdfRERUUCwgZGR0cF9sbywgXAo+ID4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICEoZGR0cF9sbyAmIFJJU0NWX0lPTU1VX0REVFBfQlVTWSksIDEwLCBcCj4gPiA+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUklTQ1ZfSU9NTVVfRERUUF9USU1FT1VUKTsgXAo+ID4g PiArICAgICBkZHRwX2hpID0gcmlzY3ZfaW9tbXVfcmVhZGwoKGlvbW11KSwgUklTQ1ZfSU9NTVVf UkVHX0REVFAgKyA0KTsgXCAgCj4gPgo+ID4gSXQgbG9va3MgbGlrZSB3aGVuZXZlciB5b3UgcmVh ZCBERFRQIHlvdSdyZSBvbmx5IHJlYWxseSBsb29raW5nIGF0IHRoZQo+ID4gQlVTWS9NT0RFIGZp ZWxkcyBhbnl3YXksIHNvIGRvZXMgdGhpcyBhY3R1YWxseSBuZWVkIHRvIHJlYWQgdGhlIHVwcGVy Cj4gPiBiaXRzIG9mIFBQTiBhdCBhbGw/IChUaGUgc3BlYyBzYXlzIHRoZXkgZG9uJ3QgZXZlbiBu ZWVkIHRvIGJlIHdyaXR0ZW4gb24KPiA+IFJWMzIgZWl0aGVyKSAgCj4gCj4gVGhlIG1vdGl2YXRp b24gaXMgbm90IFJWMzIgY29tcGF0aWJpbGl0eS4gSXQgYWRkcmVzc2VzIFJWNjQgcGxhdGZvcm1z Cj4gd2hlcmUgdGhlIElPTU1VIGNvbnRyb2wgcGxhbmUgY2FuIG9ubHkgYmUgYWNjZXNzZWQgdmlh IDMyLWJpdCBNTUlPLgo+IAo+ID4gIAo+ID4gPiArICAgICBkZHRwID0gKCh1NjQpZGR0cF9oaSA8 PCAzMikgfCBkZHRwX2xvOyBcCj4gPiA+ICAgICAgIGRkdHA7IH0pCj4gPiA+Cj4gPiA+ICAgc3Rh dGljIGludCByaXNjdl9pb21tdV9pb2Rpcl9hbGxvYyhzdHJ1Y3QgcmlzY3ZfaW9tbXVfZGV2aWNl ICppb21tdSkKPiA+ID4gQEAgLTE1MDEsNyArMTUwNCw3IEBAIHN0YXRpYyBpbnQgcmlzY3ZfaW9t bXVfaW5pdF9jaGVjayhzdHJ1Y3QgcmlzY3ZfaW9tbXVfZGV2aWNlICppb21tdSkKPiA+ID4gICAg ICAgICogcmVndWxhciBib290IGZsb3cgYW5kIGRpc2FibGUgdHJhbnNsYXRpb24gd2hlbiB3ZSBi b290IGludG8gYSBrZXhlYwo+ID4gPiAgICAgICAgKiBrZXJuZWwgYW5kIHRoZSBwcmV2aW91cyBr ZXJuZWwgbGVmdCB0aGVtIGVuYWJsZWQuCj4gPiA+ICAgICAgICAqLwo+ID4gPiAtICAgICBkZHRw ID0gcmlzY3ZfaW9tbXVfcmVhZHEoaW9tbXUsIFJJU0NWX0lPTU1VX1JFR19ERFRQKTsKPiA+ID4g KyAgICAgZGR0cCA9IHJpc2N2X2lvbW11X3JlYWRfZGR0cChpb21tdSk7Cj4gPiA+ICAgICAgIGlm IChkZHRwICYgUklTQ1ZfSU9NTVVfRERUUF9CVVNZKQo+ID4gPiAgICAgICAgICAgICAgIHJldHVy biAtRUJVU1k7Cj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L3Jpc2N2L2lv bW11LmggYi9kcml2ZXJzL2lvbW11L3Jpc2N2L2lvbW11LmgKPiA+ID4gaW5kZXggNDZkZjc5ZGQ1 NDkuLjFiMDM3OTBmYmUxIDEwMDY0NAo+ID4gPiAtLS0gYS9kcml2ZXJzL2lvbW11L3Jpc2N2L2lv bW11LmgKPiA+ID4gKysrIGIvZHJpdmVycy9pb21tdS9yaXNjdi9pb21tdS5oCj4gPiA+IEBAIC0x MSw2ICsxMSw3IEBACj4gPiA+ICAgI2lmbmRlZiBfUklTQ1ZfSU9NTVVfSF8KPiA+ID4gICAjZGVm aW5lIF9SSVNDVl9JT01NVV9IXwo+ID4gPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLTY0LW5v bmF0b21pYy1oaS1sby5oPgo+ID4gPiAgICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgo+ID4gPiAg ICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gPiAgICNpbmNsdWRlIDxsaW51eC9pb3BvbGwu aD4KPiA+ID4gQEAgLTcwLDE3ICs3MSwxMyBAQCB2b2lkIHJpc2N2X2lvbW11X2Rpc2FibGUoc3Ry dWN0IHJpc2N2X2lvbW11X2RldmljZSAqaW9tbXUpOwo+ID4gPiAgICAgICByZWFkbF9yZWxheGVk KChpb21tdSktPnJlZyArIChhZGRyKSkKPiA+ID4KPiA+ID4gICAjZGVmaW5lIHJpc2N2X2lvbW11 X3JlYWRxKGlvbW11LCBhZGRyKSBcCj4gPiA+IC0gICAgIHJlYWRxX3JlbGF4ZWQoKGlvbW11KS0+ cmVnICsgKGFkZHIpKQo+ID4gPiArICAgICBoaV9sb19yZWFkcV9yZWxheGVkKChpb21tdSktPnJl ZyArIChhZGRyKSkgIAo+ID4KPiA+IFRoaXMgc2VlbXMgdW5uZWNlc3NhcnkgKHNpbWlsYXJseSBm b3Igd3JpdGVxKCkgYmVsb3cpIC0gb25jZSB5b3UndmUKPiA+IGluY2x1ZGVkIHRoZSBoZWFkZXIs IHRoZW4gaXQgYXV0b21hdGljYWxseSBwcm92aWRlcyByZWFkcXtfcmVsYXhlZH0oKQo+ID4gZm9y IFJWMzIgdmlhIHRoZSBub24tYXRvbWljIGltcGxlbWVudGF0aW9uLCBhbmQgd2hlcmV2ZXIgYXRv bWljaXR5Cj4gPiBkb2Vzbid0IG1hdHRlciwgdGhlbiBhcyB3cml0dGVuIHRoZXJlIHNlZW1zIHRv IGJlIG5vIHJlYXNvbiBmb3IgUlY2NCB0bwo+ID4gc3RvcCB1c2luZyB0aGUgcmVndWxhciBhcmNo IHJlYWRxKCkuCj4gPgo+ID4gTm90IHRoYXQgaXQgbWFrZXMgYW55IGRpZmZlcmVuY2UgdG8gbWUg ZWl0aGVyIHdheSwgYnV0IEkgZG9uJ3Qgc2VlIGFueQo+ID4gcmVhbCBpc3N1ZSB3aXRoIHRoZSBz cGVjIC0gaWYgc29mdHdhcmUgKm1heSogbWFrZSBhIDY0LWJpdCBhY2Nlc3MgdG8gYW55Cj4gPiA2 NC1iaXQgcmVnaXN0ZXIgdW5jb25kaXRpb25hbGx5LCB0aGVuIHRoYXQgY2FuIG9ubHkgaW1wbHkg dGhhdCBoYXJkd2FyZQo+ID4gKm11c3QqIGJlIGFibGUgdG8gYWNjb21tb2RhdGUgUlY2NCBzb2Z0 d2FyZSBjaG9vc2luZyB0byBkbyBzbywgYW5kCj4gPiB0aGVyZWZvcmUgbXVzdCBzdXBwb3J0ICpi b3RoKiAzMmIgYW5kIDY0YiBhY2Nlc3NlcyBpbiBnZW5lcmFsLCBleGNlcHQKPiA+IHBlcmhhcHMg b24gUlYzMi1vbmx5IHN5c3RlbXMgaWYgc29mdHdhcmUgY291bGQgbmV2ZXIgbWFrZSA2NGIgYWNj ZXNzZXMKPiA+IGluIHRoZSBmaXJzdCBwbGFjZS4gSWYgNjRiIHNpbmdsZS1jb3B5IGF0b21pY2l0 eSBpcyBub3QKPiA+IHJlcXVpcmVkL3NwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSB2YWxpZCB0 byBhY2hpZXZlIHRoYXQgYnkganVzdAo+ID4gc3RpY2tpbmcgYSBkb3duc2l6ZXIgaW4gdGhlIHVw c3RyZWFtIGludGVyY29ubmVjdCB0byBzcGxpdCA2NGIgYWNjZXNzZXMKPiA+IGludG8gMzJieDIg aW5jcmVtZW50YWwgYnVyc3RzLgo+ID4KPiA+IElmIGRvIGFjdHVhbGx5IHlvdSBuZWVkIHRoaXMg YXMgYW4gZXJyYXR1bSB3b3JrYXJvdW5kIHRvIHN1cHBvcnQKPiA+IHNwZWNpZmljIGhhcmR3YXJl IHdoaWNoIGhhcyBtaXNpbnRlcnByZXRlZCB0aGUgc3BlYyB0aGVuIEkgdGhpbmsgeW91Cj4gPiBz aG91bGQgYmUgY2xlYXIgYWJvdXQgdGhhdC4gT3RoZXJ3aXNlLCBhZGRpbmcgc3BlY3VsYXRpdmUg Indvcmthcm91bmRzIgo+ID4gd2hpY2ggKHNsaWdodGx5KSBwZW5hbGlzZSBoYXJkd2FyZSB0aGF0 IGdvdCBpdCByaWdodCwgd2hpbGUgaW52aXRpbmcKPiA+IGZ1dHVyZSBoYXJkd2FyZSB0byBnZXQg aXQgd3JvbmcsIGRvZXNuJ3Qgc2VlbSBsaWtlIHRoZSByaWdodCB3YXkgdG8gZ28KPiA+IGF0IGFs bC4uLiAgCj4gCj4gVGhlIG9ubHkgdGhyZWUgNjQtYml0IHJlZ2lzdGVycyB0aGUgZHJpdmVyIGV2 ZXIgdG91Y2hlcyBhcmUgRERUUCwKPiBDQVBBQklMSVRJRVMsIGFuZCBNU0lfQ0ZHX1RCTF9BRERS LiBOb25lIG9mIHRoZW0gaXMgb24gYW55Cj4gcGVyZm9ybWFuY2UtY3JpdGljYWwgb3IgaG90IHBh dGguIEV2ZW4gaWYgbmF0aXZlIDY0LWJpdCBNTUlPIGFjY2Vzc2VzCj4gd2VyZSB1c2VkLCB0aGVy ZSB3b3VsZCBiZSBubyBvYnNlcnZhYmxlIHBlcmZvcm1hbmNlIGJlbmVmaXQuCj4gVGhlcmVmb3Jl LCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBwZW5hbGl6ZSBhbnkgaGFyZHdhcmUuCj4gCj4gUmVnYXJk aW5nIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGVyZSByZW1haW5zIHN1YnN0YW50aWFsIGRpc2FncmVl bWVudAo+IG92ZXIgd2hldGhlciA2NC1iaXQgYWNjZXNzZXMgYXJlIG1hbmRhdG9yeS4gVGhlIHJl bGV2YW50IHNlbnRlbmNlIHVzZXMKPiB0aGUgd29yZCDigJxtYXnigJ0gKOKAnG1heSBiZSBhY2Nl c3NlZCB1c2luZyBlaXRoZXIgYSAzMi1iaXQgb3IgYSA2NC1iaXQKPiBhY2Nlc3PigJ0pLiBQZXIg UkZDIDIxMTksIOKAnG1heeKAnSBkb2VzIG5vdCBleHByZXNzIGEgcmVxdWlyZW1lbnQuIEJlY2F1 c2UKPiBldmVyeSBleGlzdGluZyBpbXBsZW1lbnRhdGlvbiBhbHJlYWR5IHByb3ZpZGVzIHdvcmtp bmcgMzItYml0IE1NSU8KPiBhY2Nlc3MsIHdlIGJlbGlldmUgdGhlIHNhZmVyIGFuZCBsZXNzIGNv bnRyb3ZlcnNpYWwgY2hvaWNlIGlzIHRvIHVzZQo+IHRoZSBwb3J0YWJsZSAzMi1iaXQgcGF0aCB2 aWEgdGhlIGdlbmVyaWMgaGktbG8gaGVscGVycy4KPiAKClRoZXJlIGlzIGFsc28gdGhpcyBjbGF1 c2U6CglUaGUgOC1ieXRlIElPTU1VIHJlZ2lzdGVycyBhcmUgZGVmaW5lZCBpbiBzdWNoIGEgd2F5 IHRoYXQgc29mdHdhcmUgY2FuCglwZXJmb3JtIHR3byBpbmRpdmlkdWFsIDQtYnl0ZSBhY2Nlc3Nl cywgb3IgaGFyZHdhcmUgY2FuIHBlcmZvcm0gdHdvCglpbmRlcGVuZGVudCA0LWJ5dGUgdHJhbnNh Y3Rpb25zIHJlc3VsdGluZyBmcm9tIGFuIDgtYnl0ZSBhY2Nlc3MsCgl0byB0aGUgaGlnaCBhbmQg bG93IGhhbHZlcyBvZiB0aGUgcmVnaXN0ZXIsIGluIHRoYXQgb3JkZXIsIGFzIGxvbmcgYXMKCXRo ZSByZWdpc3RlciBzZW1hbnRpY3MsIHdpdGggcmVnYXJkIHRvIHNpZGUtZWZmZWN0cywgYXJlIHJl c3BlY3RlZAoJYmV0d2VlbiB0aGUgdHdvIHNvZnR3YXJlIGFjY2Vzc2VzLCBvciB0d28gaGFyZHdh cmUgdHJhbnNhY3Rpb25zLAoJcmVzcGVjdGl2ZWx5LgoKSSdtIG5vdCBzdXJlIHdoYXQgdGhlIHJl bGV2YW5jZSBvZiB0aGUgaGlnaC1sb3cgb3JkZXIgaXMuCkl0IGNvdWxkIG1lYW4sIGZvciBleGFt cGxlLCB0aGF0IGEgcmVhZCBvZiB0aGUgaGlnaCB3b3JkIGNhbiBsYXRjaCB0aGUgbG93CmZvciB0 aGUgbmV4dCByZWFkIC0gc28gdGhhdCB5b3UgZ2V0IGFuIGF0b21pYyA2NGJpdCByZWFkLgpUaGF0 IG1pZ2h0IGJlIG9rIGlmIGhhcmR3YXJlIHNwbGl0cyB0aGUgNjRiaXQgcmVhZCwgYnV0IGlmIHNv ZnR3YXJlIGRvZXMgaXQKaXQgaXNuJ3QgZ29pbmcgdG8gZ28gd2VsbCB1bmxlc3MgdGhlIGRyaXZl ciBsb2NrcyBhbGwgKGFuZCBpdCBtaWdodCBiZSBhbGwpCnNsYXZlIGFjY2Vzc2VzLgpJbiB0aGUg d29yc3QgY2FzZSB0aGVyZSBtaWdodCBiZSBhIHNpbmdsZSBsYXRjaCBmb3IgYWxsIG9kZCB3b3Jk IHJlYWRzLgpXcml0ZXMgY291bGQgYmUgd29yc2UhCgpIYXJkd2FyZSBjYW4gYmUgdGhhdCBicm9r ZW4uCkkgcmVtZW1iZXIgYSBQQ0kgc2xhdmUgdGhhdCB0ZXJtaW5hdGVkIHJlYWRzIHJlcXVlc3Rp bmcgJ2N5Y2xlIHJlcnVuJwphbmQgdGhlbiBhc3N1bWVkIHRoYXQgdGhlIGZvbGxvd2luZyByZWFk cyB3b3VsZCBiZSByZXBlYXRzIG9mIHRoZSBzYW1lCnJlYWQsIG5vdCByZWFkcyBvZiBhIGRpZmZl cmVudCBhZGRyZXNzIGJ5IHRoZSBvdGhlciBjcHUuCkl0IGRpZG4ndCBkbyB3cml0ZXMgcHJvcGVy bHkgZWl0aGVyLCBJJ3ZlIGZvcmdvdHRlbiB0aGUgZXhhY3QgZGV0YWlscwpidXQgSSB0aGluayBh IHNlY29uZCAodGhpcmQ/KSB3cml0ZSBvdmVyd3JpdGUgc29tZSBsYXRjaGVzLgoKCURhdmlkCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtcmlz Y3YgbWFpbGluZyBsaXN0CmxpbnV4LXJpc2N2QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1yaXNjdgo=