From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDC5B37AA64 for ; Tue, 16 Jun 2026 19:51:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781639513; cv=none; b=nPhsOikUWhMETMIq1KKIrAPQCQ3MwMPq1d+nP/4+ukFLq1fKNqmKH5C9gWb+mLggA6G1RcCW9i6rU/rsirK8s3pBYSPNOTlSLzGSMX5NuOx5wIuBTKOLfo99psKEdmab5ZIzsP99ApW4fbYj4xSb+7fOYRBSaULDsJIF2bRqIuc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781639513; c=relaxed/simple; bh=DnPGynuAcDBjqgYuYiqIJ/6gosF6RXzkPZWMPRbrPjE=; h=Date:From:To:Cc:Subject:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=l/DURATmPwft07S2YFcuVPYTlKQwkwFwcK2scJymoeogI3zqJpbwTV5fz9eh+kWQdtiao6Yd7Fv23Nj2iFrnMsICTYNM9xYFSvzaiCmMgJpoFSUKKjkuCMta7Q1+7QsH1CpIGuOZLKiGWCJBGDSnkX29CtS9pZ3rYM42iQl120A= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NJM+gS/4; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NJM+gS/4" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-4624a44e152so163516f8f.2 for ; Tue, 16 Jun 2026 12:51:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781639510; x=1782244310; darn=lists.linux.dev; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=oopXsR4ZloQpsMUe2KpHNKd/hTq06Y8sLkgS8GBE8k8=; b=NJM+gS/4oBBZS24mRc8SMyZKNgBdtEcCh24NPlR7WkWsUXwqjkATYJ/n7sP5LqnruS C7YpUckqV16Yv4rTSi0339c36BKBFNu0UA14W5IaN+Zn8NtzvBcLsoDzOSESH2Aat1Hb 3acZj655SaLKzx5aFh2bsYWSk5+Fpq3HqFoBw6yFIm6zcHNRLmFZX+dUY+5iFwdO3tuZ Gi1UVUmSoG7mPoVY0NObxJnx7xoQ25OoxWbgObSPTk8+3SMveeexZ8TvUQuFI8QOvHFE 5PBPhp4hJ5dha0OBk4a+nTKzR8H/jjVlVJVNkJI9RLtrfTojiknAhhTO0cWRBGYG4cSi S70Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781639510; x=1782244310; h=content-transfer-encoding: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; bh=oopXsR4ZloQpsMUe2KpHNKd/hTq06Y8sLkgS8GBE8k8=; b=XyzyNqrB57YxMrpWbLkmwKI11gk5Ag8b5p6W+icYOkl32Kt6BWcaz7hs6am8fPy0uM ic5QkUsQBXZLNLc+yQXrKMXUfNxmA7qdSDR8Giqstc0HxOgAyuhRbuvUacgG2Fk9lFm8 ubWgcH0BKeO5apVoIXfxK+97rVsqtpX7NTS5S8s1m2EG7dUUeevnrMnIwOWsDOj9DX1e ypc3GJ13XOBn6KvoyiOlWAZsrPCv8kUEeLsinSc3LrKvWaelplMzOoWMQQMzvBTAjl52 PM+LldmqL+hj+alDjA8i1qy2G9RSOcDMeMvyR2bAmuXWCKGqYqeQ6LpmZZgWNldYgYu4 R3iQ== X-Forwarded-Encrypted: i=1; AFNElJ+VSG2SZDV7UNB1JAjpraqRfosuBV+CaxvYXxwfNLJ41K7O76fSD6MDr6u3+UbdfvPt9jQQ+A==@lists.linux.dev X-Gm-Message-State: AOJu0YxqW8UqGoHwT12N4lkW0y7pGtkfSnMzMvcLBalhQhrj8dX0NAGw OxZpPZsu7rbIjmYduISdR0uHyECeEht5tIrGQMlzCCrtQJWhpkdEepCI X-Gm-Gg: Acq92OHwsLOblMoZunNIrorSHwxsV/1swUeaiomZ3WXob9eYs9xkYAxFh1XUZYQgwM5 pFF+wc74mQ3vRJp1t3RFb+T//BAJZpFhgiYgOEhlxRgjPiNXnp0SXaHLoUrFckKsMptMtXEcidS i4QoF3LGWNZCvedIY9xWtPcpjqaw7QeZDtuxkwZRmDaHc00mnEKEVw+vL1DCMj90zMh+RVQnD2a q/+NQ3x95gpnlXGdxt31pxuRBwehNgZPHV8Rs/uD93+wYmgqA/T+rvOLACENXmNbzY6tuGYJvnk exk3fgLBMjzskmrvGZrf5vJxFrmFwbJJ15LuO5rti9fFStSEpUoNINt4XyAZzWgpI7h78PJ/uOe w2/ziZQN4pa0JaMlngJ1R3AbHSP/jkhGDktHHpmmj2+iNseb0sMd7/vlQuYXMb+6PqdVNZdjZ1x yvxErHhEm5mJ/EEEFIIF5mQ/c7i8WtozSqRPfJqbbT0r/m6llQPDGMoEND1q+r X-Received: by 2002:a5d:6d44:0:b0:460:3234:293f with SMTP id ffacd0b85a97d-4623983b959mr1183937f8f.42.1781639510142; Tue, 16 Jun 2026 12:51:50 -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 ffacd0b85a97d-4619a041986sm22952948f8f.23.2026.06.16.12.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jun 2026 12:51:49 -0700 (PDT) Date: Tue, 16 Jun 2026 20:51:47 +0100 From: David Laight To: Guo Ren Cc: zhangzhanpeng.jasper@bytedance.com, alex@ghiti.fr, aou@eecs.berkeley.edu, cuiyunhui@bytedance.com, iommu@lists.linux.dev, joro@8bytes.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, luxu.kernel@bytedance.com, palmer@dabbelt.com, pjw@kernel.org, robin.murphy@arm.com, tjeznach@rivosinc.com, will@kernel.org, yuanzhu@bytedance.com Subject: Re: [PATCH v1] iommu/riscv: Support 32-bit register accesses Message-ID: <20260616205147.6aa7df98@pumpkin> In-Reply-To: References: <20260615064855.90316-1-zhangzhanpeng.jasper@bytedance.com> <20260615123821.373248-1-guoren@kernel.org> <20260616113651.1048a19a@pumpkin> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; arm-unknown-linux-gnueabihf) Precedence: bulk X-Mailing-List: iommu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Tue, 16 Jun 2026 23:47:05 +0800 Guo Ren wrote: > On Tue, Jun 16, 2026 at 6:36=E2=80=AFPM David Laight > wrote: > > > > On Mon, 15 Jun 2026 12:38:17 +0000 > > Guo Ren wrote: > > =20 > > > Hi Zhanpeng Zhang, =20 > > .. =20 > > > 3. Only performance-monitoring counters require 64-bit IO access or t= he > > > high-low-high do-while retry strategy. For ordinary status and control > > > MMIO registers, a single read is sufficient. =20 > > > > Actually this sequence should be enough for a counter: > > hi =3D read_hi(); > > lo =3D read_lo(); > > if (hi !=3D read_hi()) { > > // Pick a value that happened while doing the reads. > > hi++; > > lo =3D 0; > > } =20 > This is not a free optimization =E2=80=94 it does not preserve the same > semantics as an atomic 64-bit read. There are at least two correctness > issues: >=20 > 1. Loss of precision: If hi changed during the read, setting lo =3D 0 > discards the actual lo value. The correct approach is to re-read lo > after detecting the change, not fabricate a value. >=20 > 2. Multiple overflows: This assumes at most one overflow occurs > between reads. If two overflows happen (e.g., due to interrupt > injection), hi++ will produce an incorrect result, silently corrupting > the counter value. >=20 > Negligible benefit: hi changing between reads is an extremely rare > event. Optimizing away the retry loop for such a rare case provides no > meaningful performance gain. And if hi never stabilizes, that > indicates a hardware failure =E2=80=94 in which case hanging in the retry= loop > is actually the more appropriate behavior, as it makes the failure > visible rather than silently producing garbage values. >=20 > The high-low-high do-while retry strategy exists precisely to handle > these cases correctly. I don't think this proposed sequence is a valid > replacement. >=20 The point is that if the value is an incrementing counter (of some form) then the value is stale by the time the reading sequence completes. So all the code can be assumed to do is return a value the counter had sometime between when the code started and when it finished. If hi changes then hi+1:0 must have happened while the code was running so it is a safe return value. It is likely that the reads are also much slower than memory reads. If hi changes relatively infrequently (compared to the number of reads) it may be worth saving the previously read value and avoiding the second read of hi if it is the same as the previous read hi and lo has got larger. David 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 997AACD98E4 for ; Tue, 16 Jun 2026 19:52: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: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=wsdx4JY8PKrHctH3B/njg+th1UZZ/tPOh2hJPT/yNpM=; b=sfAEs7TZwHhUWb D044kZK9vQ94kqm1E2OHZOGD+e4267N/6M0mXJ8Bn2Gr+0Bmc+w0J5dTtQUTz9WNr4z5F48WCqXWJ tS8Wttw0QeGCO6YJZhrug+Xzvu8Q7g7c2gmLWe1RSzCfze6D4xwm2+tVh2m31kQWh7NoNfBtsMltO XQDE4RfnPeT5Z5h4m/A71CfdSRZ2Yv9FSQ2q004ga9AW+N4lurXVNS2YvAl5luMCB4xeqSwWxP2rx J0C4uNsowgNfuVJuEdGWA2IvJLxBBOoGq57L8cec17v9FFTE6LbsRQO7h41mfZJqSQUfUReJD7Jum SvPP/kSwvZ8m+Utht6eA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wZZpC-0000000GGJ0-42ky; Tue, 16 Jun 2026 19:51:54 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wZZpA-0000000GGI2-1NYp for linux-riscv@lists.infradead.org; Tue, 16 Jun 2026 19:51:53 +0000 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-4624a44e152so163513f8f.2 for ; Tue, 16 Jun 2026 12:51:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781639510; x=1782244310; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:subject:cc:to:from:date:from:to:cc:subject:date :message-id:reply-to; bh=oopXsR4ZloQpsMUe2KpHNKd/hTq06Y8sLkgS8GBE8k8=; b=Mv84w187ktcmdYwTx0mDw06vVu0dhYi1JXVByxwtYs4gs0BBVRSoRykMXEtioMKWz2 jvJ986RuZtxQ8GN1EPAeiNIIH/MfY3FmPZgHb5dLyDbChSwrX5CDX78rvkKKOrPnDZKw N9+rGE0AZtjD/l/l/ucziHWNfhveZUCsMr3XUP0bc5DM7GPOcLdvTnVibZwrbPO1GHcn Q67KuICW/WL1iqkQXUCMq1VWNyd6W+v7vVuuDO9/aDpl1TV4Y7Bd1npX4pIbXYmlTVX3 BSwyMXG/bj7GPEbqzRdAVlIO3rRWv72epGl4dCPGbi20zvfSJSTKS1Y8D47Z5HUmLc0R bFzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781639510; x=1782244310; h=content-transfer-encoding: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; bh=oopXsR4ZloQpsMUe2KpHNKd/hTq06Y8sLkgS8GBE8k8=; b=lhORj5YpaVsZhgY4EM/GgoCrYl+45+yhLZLim7a+7oFqGAUFGEcbFSv2b48R/waU8w kzYH+wuZjXtRpCJnttpVKcrcUQN5Ll2BWA2dr/cs21/dK2BYgEWJ8BDC6e+jkksct9VB IFsbHz+bqMhMURXFUTKCwDouorg9oFFty/jN2NSzs46DmmjjFEdPeHXsuplgPJJ4l6Ez 1uijuKKWxMG1aRW6am2I1oCFXE6PG3Y64+Kh76IzHvqZnCAghaMSEdQYvW3eDvZapsYZ wE6mWVi2PTtZxMUW1EMIJbxnWyl9slQwGR47EbgIfZPwwBJDHybq/gF0oCSGyaqIIqWp EVgw== X-Forwarded-Encrypted: i=1; AFNElJ+HnNMFVSzwzMLc8JveBgR5xM429G3R/NPaVDmduRaYMSxhL4Nyz2OVR8Inn6i+b5K0UvwdZcRtWtVxhg==@lists.infradead.org X-Gm-Message-State: AOJu0YymMeu/qT9nP5F9/Q3LbOFc2A4nQzkCjFe9kl/KMeX0imEbFP8f D+i52oLtaiq/a0fMHSnXoA/zIB7T8+5rSOuXEknY8XZuIRCGA/bB6TY7 X-Gm-Gg: Acq92OG9jekUUeM6trML5Eo+TjNnOfSr7pmstjkJN9PyI81+l1Tcb9yzpopCzuSutIE IMuNBqomqLTb4AMog20fLaaSzM5XJ8ii/YaFRiPGKHm9y2jnQN60Q3fRJxRZtsIiNj8ThT5yu9i kIyoMFakdZTOXMLOO8mUgBmKALlgbUeFj8q++k1KXl9jnVHt/MOKnsCsP+QDf+bB9AIhvT80V7g mfyDzbxMsBTSYKU+3fTnSdBN79iOXXtzMjSZ7yw3mb3nzICu7tq8VFx1n6pMY/kUjocAGBx59eG CfqGwsauuR4a2Hac3acGf2MY6RoT9Dej+hgJ2qf/NaS4miPzWKnZ5VMrFW/dD7rFp0k6NtNgdSo RgKe43Sxa/NN8wMeumjeOdI6DDqoapnhYKyJJwW5I77kII8H0/skNr2zAkdEC7R3wT2EsrbWltJ 1Yxvs5/ZeIrHtR5iOPSztzW4UjW569Oif6FKA7PB3kl41KSIzkkNBG/SKREkr4 X-Received: by 2002:a5d:6d44:0:b0:460:3234:293f with SMTP id ffacd0b85a97d-4623983b959mr1183937f8f.42.1781639510142; Tue, 16 Jun 2026 12:51:50 -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 ffacd0b85a97d-4619a041986sm22952948f8f.23.2026.06.16.12.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Jun 2026 12:51:49 -0700 (PDT) Date: Tue, 16 Jun 2026 20:51:47 +0100 From: David Laight To: Guo Ren Cc: zhangzhanpeng.jasper@bytedance.com, alex@ghiti.fr, aou@eecs.berkeley.edu, cuiyunhui@bytedance.com, iommu@lists.linux.dev, joro@8bytes.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, luxu.kernel@bytedance.com, palmer@dabbelt.com, pjw@kernel.org, robin.murphy@arm.com, tjeznach@rivosinc.com, will@kernel.org, yuanzhu@bytedance.com Subject: Re: [PATCH v1] iommu/riscv: Support 32-bit register accesses Message-ID: <20260616205147.6aa7df98@pumpkin> In-Reply-To: References: <20260615064855.90316-1-zhangzhanpeng.jasper@bytedance.com> <20260615123821.373248-1-guoren@kernel.org> <20260616113651.1048a19a@pumpkin> 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-20260616_125152_385345_B52B4BDE X-CRM114-Status: GOOD ( 26.16 ) 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 T24gVHVlLCAxNiBKdW4gMjAyNiAyMzo0NzowNSArMDgwMApHdW8gUmVuIDxndW9yZW5Aa2VybmVs Lm9yZz4gd3JvdGU6Cgo+IE9uIFR1ZSwgSnVuIDE2LCAyMDI2IGF0IDY6MzbigK9QTSBEYXZpZCBM YWlnaHQKPiA8ZGF2aWQubGFpZ2h0LmxpbnV4QGdtYWlsLmNvbT4gd3JvdGU6Cj4gPgo+ID4gT24g TW9uLCAxNSBKdW4gMjAyNiAxMjozODoxNyArMDAwMAo+ID4gR3VvIFJlbiA8Z3VvcmVuQGtlcm5l bC5vcmc+IHdyb3RlOgo+ID4gIAo+ID4gPiBIaSBaaGFucGVuZyBaaGFuZywgIAo+ID4gLi4gIAo+ ID4gPiAzLiBPbmx5IHBlcmZvcm1hbmNlLW1vbml0b3JpbmcgY291bnRlcnMgcmVxdWlyZSA2NC1i aXQgSU8gYWNjZXNzIG9yIHRoZQo+ID4gPiBoaWdoLWxvdy1oaWdoIGRvLXdoaWxlIHJldHJ5IHN0 cmF0ZWd5LiBGb3Igb3JkaW5hcnkgc3RhdHVzIGFuZCBjb250cm9sCj4gPiA+IE1NSU8gcmVnaXN0 ZXJzLCBhIHNpbmdsZSByZWFkIGlzIHN1ZmZpY2llbnQuICAKPiA+Cj4gPiBBY3R1YWxseSB0aGlz IHNlcXVlbmNlIHNob3VsZCBiZSBlbm91Z2ggZm9yIGEgY291bnRlcjoKPiA+ICAgICAgICAgaGkg PSByZWFkX2hpKCk7Cj4gPiAgICAgICAgIGxvID0gcmVhZF9sbygpOwo+ID4gICAgICAgICBpZiAo aGkgIT0gcmVhZF9oaSgpKSB7Cj4gPiAgICAgICAgICAgICAgICAgLy8gUGljayBhIHZhbHVlIHRo YXQgaGFwcGVuZWQgd2hpbGUgZG9pbmcgdGhlIHJlYWRzLgo+ID4gICAgICAgICAgICAgICAgIGhp Kys7Cj4gPiAgICAgICAgICAgICAgICAgbG8gPSAwOwo+ID4gICAgICAgICB9ICAKPiBUaGlzIGlz IG5vdCBhIGZyZWUgb3B0aW1pemF0aW9uIOKAlCBpdCBkb2VzIG5vdCBwcmVzZXJ2ZSB0aGUgc2Ft ZQo+IHNlbWFudGljcyBhcyBhbiBhdG9taWMgNjQtYml0IHJlYWQuIFRoZXJlIGFyZSBhdCBsZWFz dCB0d28gY29ycmVjdG5lc3MKPiBpc3N1ZXM6Cj4gCj4gMS4gTG9zcyBvZiBwcmVjaXNpb246IElm IGhpIGNoYW5nZWQgZHVyaW5nIHRoZSByZWFkLCBzZXR0aW5nIGxvID0gMAo+IGRpc2NhcmRzIHRo ZSBhY3R1YWwgbG8gdmFsdWUuIFRoZSBjb3JyZWN0IGFwcHJvYWNoIGlzIHRvIHJlLXJlYWQgbG8K PiBhZnRlciBkZXRlY3RpbmcgdGhlIGNoYW5nZSwgbm90IGZhYnJpY2F0ZSBhIHZhbHVlLgo+IAo+ IDIuIE11bHRpcGxlIG92ZXJmbG93czogVGhpcyBhc3N1bWVzIGF0IG1vc3Qgb25lIG92ZXJmbG93 IG9jY3Vycwo+IGJldHdlZW4gcmVhZHMuIElmIHR3byBvdmVyZmxvd3MgaGFwcGVuIChlLmcuLCBk dWUgdG8gaW50ZXJydXB0Cj4gaW5qZWN0aW9uKSwgaGkrKyB3aWxsIHByb2R1Y2UgYW4gaW5jb3Jy ZWN0IHJlc3VsdCwgc2lsZW50bHkgY29ycnVwdGluZwo+IHRoZSBjb3VudGVyIHZhbHVlLgo+IAo+ IE5lZ2xpZ2libGUgYmVuZWZpdDogaGkgY2hhbmdpbmcgYmV0d2VlbiByZWFkcyBpcyBhbiBleHRy ZW1lbHkgcmFyZQo+IGV2ZW50LiBPcHRpbWl6aW5nIGF3YXkgdGhlIHJldHJ5IGxvb3AgZm9yIHN1 Y2ggYSByYXJlIGNhc2UgcHJvdmlkZXMgbm8KPiBtZWFuaW5nZnVsIHBlcmZvcm1hbmNlIGdhaW4u IEFuZCBpZiBoaSBuZXZlciBzdGFiaWxpemVzLCB0aGF0Cj4gaW5kaWNhdGVzIGEgaGFyZHdhcmUg ZmFpbHVyZSDigJQgaW4gd2hpY2ggY2FzZSBoYW5naW5nIGluIHRoZSByZXRyeSBsb29wCj4gaXMg YWN0dWFsbHkgdGhlIG1vcmUgYXBwcm9wcmlhdGUgYmVoYXZpb3IsIGFzIGl0IG1ha2VzIHRoZSBm YWlsdXJlCj4gdmlzaWJsZSByYXRoZXIgdGhhbiBzaWxlbnRseSBwcm9kdWNpbmcgZ2FyYmFnZSB2 YWx1ZXMuCj4gCj4gVGhlIGhpZ2gtbG93LWhpZ2ggZG8td2hpbGUgcmV0cnkgc3RyYXRlZ3kgZXhp c3RzIHByZWNpc2VseSB0byBoYW5kbGUKPiB0aGVzZSBjYXNlcyBjb3JyZWN0bHkuIEkgZG9uJ3Qg dGhpbmsgdGhpcyBwcm9wb3NlZCBzZXF1ZW5jZSBpcyBhIHZhbGlkCj4gcmVwbGFjZW1lbnQuCj4g CgpUaGUgcG9pbnQgaXMgdGhhdCBpZiB0aGUgdmFsdWUgaXMgYW4gaW5jcmVtZW50aW5nIGNvdW50 ZXIgKG9mIHNvbWUgZm9ybSkKdGhlbiB0aGUgdmFsdWUgaXMgc3RhbGUgYnkgdGhlIHRpbWUgdGhl IHJlYWRpbmcgc2VxdWVuY2UgY29tcGxldGVzLgpTbyBhbGwgdGhlIGNvZGUgY2FuIGJlIGFzc3Vt ZWQgdG8gZG8gaXMgcmV0dXJuIGEgdmFsdWUgdGhlIGNvdW50ZXIgaGFkCnNvbWV0aW1lIGJldHdl ZW4gd2hlbiB0aGUgY29kZSBzdGFydGVkIGFuZCB3aGVuIGl0IGZpbmlzaGVkLgpJZiBoaSBjaGFu Z2VzIHRoZW4gaGkrMTowIG11c3QgaGF2ZSBoYXBwZW5lZCB3aGlsZSB0aGUgY29kZSB3YXMgcnVu bmluZwpzbyBpdCBpcyBhIHNhZmUgcmV0dXJuIHZhbHVlLgoKSXQgaXMgbGlrZWx5IHRoYXQgdGhl IHJlYWRzIGFyZSBhbHNvIG11Y2ggc2xvd2VyIHRoYW4gbWVtb3J5IHJlYWRzLgpJZiBoaSBjaGFu Z2VzIHJlbGF0aXZlbHkgaW5mcmVxdWVudGx5IChjb21wYXJlZCB0byB0aGUgbnVtYmVyIG9mIHJl YWRzKQppdCBtYXkgYmUgd29ydGggc2F2aW5nIHRoZSBwcmV2aW91c2x5IHJlYWQgdmFsdWUgYW5k IGF2b2lkaW5nIHRoZSBzZWNvbmQKcmVhZCBvZiBoaSBpZiBpdCBpcyB0aGUgc2FtZSBhcyB0aGUg cHJldmlvdXMgcmVhZCBoaSBhbmQgbG8gaGFzIGdvdCBsYXJnZXIuCgoJRGF2aWQKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWls aW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5m cmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==