From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 DE2A5111B for ; Thu, 2 Feb 2023 10:05:28 +0000 (UTC) Received: by mail-wm1-f45.google.com with SMTP id m5-20020a05600c4f4500b003db03b2559eso920966wmq.5 for ; Thu, 02 Feb 2023 02:05:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=//FGsavWGq7T3Rr30An+rU9ir1tcyiUHbK5lp+YEfbI=; b=BZZULLBl0kGh3VFc2wse3O+99pkqDuhwdixhuEcU5czRIGW7hx+T9jnMpkAwP2wJFc 167d7InIG09+4fCSeEZ82uxXS+lsutAENcw6/0k0FC9CFQWLAno8O4r4cwTYaeGElYRv MoWcq0HldC40ljDfBLau7/anN1rpYKBaQAsdJ7IE7068gIbjO0828VMU/Ujns+DWa8Cc 6TNXfAyvGMS+pWmBumpxSFR/R2kCpdKCNBRc4WWunbKbukxx0vogiE8CMqwwvCxjuGpR aFhwm3dkxyc/8sR8TkZ5Xc2B1Jefh1BYqUPLy65KgJp+QtRVHe9h1wN4w9ITz04LpZJ+ ewug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=//FGsavWGq7T3Rr30An+rU9ir1tcyiUHbK5lp+YEfbI=; b=6co4nwGpoNZJoNAnbpV5KcVzikSOoQfDMqCx671xPX8Qm3IU8Kjsrwz2B1U6BdIGId 87azitqHc+O6KoQOhssANZlto25USIwxbEM38wIA1cbd22bryxExdRv1Xp//M8+oGui3 CA+62xKvYpHYSoAwpzkrxNRNrYp5HlOc7iYTRrzc5nvKkT3pup9LP+H0/UU/xmg/M8z9 BeQqX5oO1oogBCQDUNk6Y5S4N6dJ8j9HfrQf5658sVFhEiQq2hTy2/uljbvr3cAg/BI8 Kmf3e4QCfCCfFAR6oO9EF8H/kp2eQddAu5gOLZA8fFdVebXg3UV003ym3yivfPhpx1n9 dhGQ== X-Gm-Message-State: AO0yUKU6LZ5Yn5OuBje4n6L90h+ZaYRINbANNFmbYJEV47/KeN3tBnVD hTZAM/4cCqrrPQbRwsH0aMrH3w== X-Google-Smtp-Source: AK7set9o9lUlSUCSbmSEE4a5cgm2BnJoKtnZQXI83oGKvNCQcsNp6lAJvxlkrOmiL9ELrc7eKFXsrA== X-Received: by 2002:a7b:ce11:0:b0:3dd:393c:20b5 with SMTP id m17-20020a7bce11000000b003dd393c20b5mr5414944wmc.35.1675332327049; Thu, 02 Feb 2023 02:05:27 -0800 (PST) Received: from myrica (054592b0.skybroadband.com. [5.69.146.176]) by smtp.gmail.com with ESMTPSA id i40-20020a05600c4b2800b003dc42d48defsm4004276wmp.6.2023.02.02.02.05.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Feb 2023 02:05:26 -0800 (PST) Date: Thu, 2 Feb 2023 10:05:22 +0000 From: Jean-Philippe Brucker To: "Tian, Kevin" Cc: "maz@kernel.org" , "catalin.marinas@arm.com" , "will@kernel.org" , "joro@8bytes.org" , "robin.murphy@arm.com" , "james.morse@arm.com" , "suzuki.poulose@arm.com" , "oliver.upton@linux.dev" , "yuzenghui@huawei.com" , "smostafa@google.com" , "dbrazdil@google.com" , "ryan.roberts@arm.com" , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.linux.dev" , "iommu@lists.linux.dev" , "Chen, Jason CJ" , "Zhang, Tina" Subject: Re: [RFC PATCH 00/45] KVM: Arm SMMUv3 driver for pKVM Message-ID: References: <20230201125328.2186498-1-jean-philippe@linaro.org> Precedence: bulk X-Mailing-List: kvmarm@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Thu, Feb 02, 2023 at 07:07:55AM +0000, Tian, Kevin wrote: > > From: Jean-Philippe Brucker > > Sent: Wednesday, February 1, 2023 8:53 PM > > > > 3. Private I/O page tables > > > > A flexible alternative uses private page tables in the SMMU, entirely > > disconnected from the CPU page tables. With this the SMMU can implement > > a > > reduced set of features, even shed a stage of translation. This also > > provides a virtual I/O address space to the host, which allows more > > efficient memory allocation for large buffers, and for devices with > > limited addressing abilities. > > > > This is the solution implemented in this series. The host creates > > IOVA->HPA mappings with two hypercalls map_pages() and unmap_pages(), > > and > > the hypervisor populates the page tables. Page tables are abstracted into > > IOMMU domains, which allow multiple devices to share the same address > > space. Another four hypercalls, alloc_domain(), attach_dev(), detach_dev() > > and free_domain(), manage the domains. > > > > Out of curiosity. Does virtio-iommu fit in this usage? I don't think so, because you still need a driver for the physical IOMMU in the hypervisor. virtio-iommu would only replace the hypercall interface with queues, and I don't think that buys us anything. Maybe virtio on the guest side could be advantageous, because that interface has to be stable and virtio comes with stable APIs for several classes of devices. But implementing virtio in pkvm means a lot of extra code so it needs to be considered carefully. > If yes then there is > no need to add specific enlightenment in existing iommu drivers. If no > probably because as mentioned in the start a full-fledged iommu driver > doesn't fit nVHE so lots of smmu driver logic has to be kept in the host? To minimize the attack surface of the hypervisor, we don't want to load any superfluous code, so the hypervisor part of the SMMUv3 driver only contains code to populate tables and send commands (which is still too much for my taste but seems unavoidable to isolate host DMA). Left in the host are things like ACPI/DT parser, interrupts, possibly the event queue (which informs of DMA errors), extra features and complex optimizations. The host also has to implement IOMMU ops to liaise between the DMA API and the hypervisor. > anyway just want to check your thoughts on the possibility. > > btw some of my colleagues are porting pKVM to Intel platform. I believe > they will post their work shortly and there might require some common > framework in pKVM hypervisor like iommu domain, hypercalls, etc. like > what we have in the host iommu subsystem. CC them in case of any early > thought they want to throw in. 😊 Cool! The hypervisor part contains iommu/iommu.c which deals with hypercalls and domains and doesn't contain anything specific to Arm (it's only in arch/arm64 because that's where pkvm currently sits). It does rely on io-pgtable at the moment which is not used by VT-d but that can be abstracted as well. It's possible however that on Intel an entirely different set of hypercalls will be needed, if a simpler solution such as sharing page tables fits better because VT-d implementations are more homogeneous. Thanks, Jean 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 89EFDC61DA4 for ; Thu, 2 Feb 2023 10:06:44 +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:In-Reply-To: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-Owner; bh=boE4KE2uiGfS9k1CH9+7BbVtsYLJptUdT3IbIQ12+T4=; b=V31DjRzHfiZbyw AgHY377Vv6mZrlbnIKioH535EO8QGZBXo6KOHcaabt/DVmmkgq3ybNHYkrEbHYJFzixKbnQh7Cnjs Do0Unax4EHGVZbcm3bnczdL64ZimmUNDUXuDUkMJoCHRi8oPJRR60TCRBoOxH/4QVatVNxJCxBYDI YQF0bFL/MeYvbKmiCxzj0oU2Y+RwgjSC+h5Tt7hmn6/qZoEkKN8ZNKenQQNqdO8Eqz9l2pc8g+0Fz UPeVSWV6Z0+Jcb523jR8KjqswKjc6SItRH607pahn5H+lQ7KZPN1ugKFrGlDLyVL5EKmWgKNQNo4W +KmxORQ9xPIu3G36rwaw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pNWTG-00FK3Y-Ay; Thu, 02 Feb 2023 10:05:34 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pNWTB-00FK2G-2S for linux-arm-kernel@lists.infradead.org; Thu, 02 Feb 2023 10:05:30 +0000 Received: by mail-wm1-x32c.google.com with SMTP id c10-20020a05600c0a4a00b003db0636ff84so956693wmq.0 for ; Thu, 02 Feb 2023 02:05:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to; bh=//FGsavWGq7T3Rr30An+rU9ir1tcyiUHbK5lp+YEfbI=; b=BZZULLBl0kGh3VFc2wse3O+99pkqDuhwdixhuEcU5czRIGW7hx+T9jnMpkAwP2wJFc 167d7InIG09+4fCSeEZ82uxXS+lsutAENcw6/0k0FC9CFQWLAno8O4r4cwTYaeGElYRv MoWcq0HldC40ljDfBLau7/anN1rpYKBaQAsdJ7IE7068gIbjO0828VMU/Ujns+DWa8Cc 6TNXfAyvGMS+pWmBumpxSFR/R2kCpdKCNBRc4WWunbKbukxx0vogiE8CMqwwvCxjuGpR aFhwm3dkxyc/8sR8TkZ5Xc2B1Jefh1BYqUPLy65KgJp+QtRVHe9h1wN4w9ITz04LpZJ+ ewug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=//FGsavWGq7T3Rr30An+rU9ir1tcyiUHbK5lp+YEfbI=; b=gPXiL5BhZQG7xgQlKENIoC15PMzjtQhZxbyHH+wjlNgK+xH55q0+D21koR6DkxFQWp yfwmGgRlDbYWxd+UP8ySpO3BxLqQZOm6c6FDVGYxXt1EhqBCnXY1Oycawp8m5lyTcKTd bOn4WykqxQOT7I6JDUsRv/2E04jFFxJnTaZ/3eutbyLPZuL48wFRO4Y/eaiHj04z2fLQ 0QyZMYsCEee1yOriiGlRnQG9hXS/q0kxa/25/KJHL08Fw8Qzu3TeNHCOUhKFF3p1guw7 yHXodiuF00/SJeDF/kS6qb3DNfl4682I8VtRUAYQw4CC+RklipHvRtmWgSvMGQiL4GrN LI0w== X-Gm-Message-State: AO0yUKWPDD5f0e90YnJaeqYJqYlrYRvUjh0a0oebsXM4/JOmMSnZNvjD sO3BUW1ZKfwKrzXDDQ1roNVu7w== X-Google-Smtp-Source: AK7set9o9lUlSUCSbmSEE4a5cgm2BnJoKtnZQXI83oGKvNCQcsNp6lAJvxlkrOmiL9ELrc7eKFXsrA== X-Received: by 2002:a7b:ce11:0:b0:3dd:393c:20b5 with SMTP id m17-20020a7bce11000000b003dd393c20b5mr5414944wmc.35.1675332327049; Thu, 02 Feb 2023 02:05:27 -0800 (PST) Received: from myrica (054592b0.skybroadband.com. [5.69.146.176]) by smtp.gmail.com with ESMTPSA id i40-20020a05600c4b2800b003dc42d48defsm4004276wmp.6.2023.02.02.02.05.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 02 Feb 2023 02:05:26 -0800 (PST) Date: Thu, 2 Feb 2023 10:05:22 +0000 From: Jean-Philippe Brucker To: "Tian, Kevin" Cc: "maz@kernel.org" , "catalin.marinas@arm.com" , "will@kernel.org" , "joro@8bytes.org" , "robin.murphy@arm.com" , "james.morse@arm.com" , "suzuki.poulose@arm.com" , "oliver.upton@linux.dev" , "yuzenghui@huawei.com" , "smostafa@google.com" , "dbrazdil@google.com" , "ryan.roberts@arm.com" , "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.linux.dev" , "iommu@lists.linux.dev" , "Chen, Jason CJ" , "Zhang, Tina" Subject: Re: [RFC PATCH 00/45] KVM: Arm SMMUv3 driver for pKVM Message-ID: References: <20230201125328.2186498-1-jean-philippe@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230202_020529_138788_FF19C530 X-CRM114-Status: GOOD ( 29.27 ) X-BeenThere: linux-arm-kernel@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-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVGh1LCBGZWIgMDIsIDIwMjMgYXQgMDc6MDc6NTVBTSArMDAwMCwgVGlhbiwgS2V2aW4gd3Jv dGU6Cj4gPiBGcm9tOiBKZWFuLVBoaWxpcHBlIEJydWNrZXIgPGplYW4tcGhpbGlwcGVAbGluYXJv Lm9yZz4KPiA+IFNlbnQ6IFdlZG5lc2RheSwgRmVicnVhcnkgMSwgMjAyMyA4OjUzIFBNCj4gPiAK PiA+IDMuIFByaXZhdGUgSS9PIHBhZ2UgdGFibGVzCj4gPiAKPiA+IEEgZmxleGlibGUgYWx0ZXJu YXRpdmUgdXNlcyBwcml2YXRlIHBhZ2UgdGFibGVzIGluIHRoZSBTTU1VLCBlbnRpcmVseQo+ID4g ZGlzY29ubmVjdGVkIGZyb20gdGhlIENQVSBwYWdlIHRhYmxlcy4gV2l0aCB0aGlzIHRoZSBTTU1V IGNhbiBpbXBsZW1lbnQKPiA+IGEKPiA+IHJlZHVjZWQgc2V0IG9mIGZlYXR1cmVzLCBldmVuIHNo ZWQgYSBzdGFnZSBvZiB0cmFuc2xhdGlvbi4gVGhpcyBhbHNvCj4gPiBwcm92aWRlcyBhIHZpcnR1 YWwgSS9PIGFkZHJlc3Mgc3BhY2UgdG8gdGhlIGhvc3QsIHdoaWNoIGFsbG93cyBtb3JlCj4gPiBl ZmZpY2llbnQgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGxhcmdlIGJ1ZmZlcnMsIGFuZCBmb3IgZGV2 aWNlcyB3aXRoCj4gPiBsaW1pdGVkIGFkZHJlc3NpbmcgYWJpbGl0aWVzLgo+ID4gCj4gPiBUaGlz IGlzIHRoZSBzb2x1dGlvbiBpbXBsZW1lbnRlZCBpbiB0aGlzIHNlcmllcy4gVGhlIGhvc3QgY3Jl YXRlcwo+ID4gSU9WQS0+SFBBIG1hcHBpbmdzIHdpdGggdHdvIGh5cGVyY2FsbHMgbWFwX3BhZ2Vz KCkgYW5kIHVubWFwX3BhZ2VzKCksCj4gPiBhbmQKPiA+IHRoZSBoeXBlcnZpc29yIHBvcHVsYXRl cyB0aGUgcGFnZSB0YWJsZXMuIFBhZ2UgdGFibGVzIGFyZSBhYnN0cmFjdGVkIGludG8KPiA+IElP TU1VIGRvbWFpbnMsIHdoaWNoIGFsbG93IG11bHRpcGxlIGRldmljZXMgdG8gc2hhcmUgdGhlIHNh bWUgYWRkcmVzcwo+ID4gc3BhY2UuIEFub3RoZXIgZm91ciBoeXBlcmNhbGxzLCBhbGxvY19kb21h aW4oKSwgYXR0YWNoX2RldigpLCBkZXRhY2hfZGV2KCkKPiA+IGFuZCBmcmVlX2RvbWFpbigpLCBt YW5hZ2UgdGhlIGRvbWFpbnMuCj4gPiAKPiAKPiBPdXQgb2YgY3VyaW9zaXR5LiBEb2VzIHZpcnRp by1pb21tdSBmaXQgaW4gdGhpcyB1c2FnZT8KCkkgZG9uJ3QgdGhpbmsgc28sIGJlY2F1c2UgeW91 IHN0aWxsIG5lZWQgYSBkcml2ZXIgZm9yIHRoZSBwaHlzaWNhbCBJT01NVQppbiB0aGUgaHlwZXJ2 aXNvci4gdmlydGlvLWlvbW11IHdvdWxkIG9ubHkgcmVwbGFjZSB0aGUgaHlwZXJjYWxsIGludGVy ZmFjZQp3aXRoIHF1ZXVlcywgYW5kIEkgZG9uJ3QgdGhpbmsgdGhhdCBidXlzIHVzIGFueXRoaW5n LgoKTWF5YmUgdmlydGlvIG9uIHRoZSBndWVzdCBzaWRlIGNvdWxkIGJlIGFkdmFudGFnZW91cywg YmVjYXVzZSB0aGF0CmludGVyZmFjZSBoYXMgdG8gYmUgc3RhYmxlIGFuZCB2aXJ0aW8gY29tZXMg d2l0aCBzdGFibGUgQVBJcyBmb3Igc2V2ZXJhbApjbGFzc2VzIG9mIGRldmljZXMuIEJ1dCBpbXBs ZW1lbnRpbmcgdmlydGlvIGluIHBrdm0gbWVhbnMgYSBsb3Qgb2YgZXh0cmEKY29kZSBzbyBpdCBu ZWVkcyB0byBiZSBjb25zaWRlcmVkIGNhcmVmdWxseS4KCj4gSWYgeWVzIHRoZW4gdGhlcmUgaXMK PiBubyBuZWVkIHRvIGFkZCBzcGVjaWZpYyBlbmxpZ2h0ZW5tZW50IGluIGV4aXN0aW5nIGlvbW11 IGRyaXZlcnMuIElmIG5vIAo+IHByb2JhYmx5IGJlY2F1c2UgYXMgbWVudGlvbmVkIGluIHRoZSBz dGFydCBhIGZ1bGwtZmxlZGdlZCBpb21tdSBkcml2ZXIgCj4gZG9lc24ndCBmaXQgblZIRSBzbyBs b3RzIG9mIHNtbXUgZHJpdmVyIGxvZ2ljIGhhcyB0byBiZSBrZXB0IGluIHRoZSBob3N0PwoKVG8g bWluaW1pemUgdGhlIGF0dGFjayBzdXJmYWNlIG9mIHRoZSBoeXBlcnZpc29yLCB3ZSBkb24ndCB3 YW50IHRvIGxvYWQKYW55IHN1cGVyZmx1b3VzIGNvZGUsIHNvIHRoZSBoeXBlcnZpc29yIHBhcnQg b2YgdGhlIFNNTVV2MyBkcml2ZXIgb25seQpjb250YWlucyBjb2RlIHRvIHBvcHVsYXRlIHRhYmxl cyBhbmQgc2VuZCBjb21tYW5kcyAod2hpY2ggaXMgc3RpbGwgdG9vCm11Y2ggZm9yIG15IHRhc3Rl IGJ1dCBzZWVtcyB1bmF2b2lkYWJsZSB0byBpc29sYXRlIGhvc3QgRE1BKS4gTGVmdCBpbiB0aGUK aG9zdCBhcmUgdGhpbmdzIGxpa2UgQUNQSS9EVCBwYXJzZXIsIGludGVycnVwdHMsIHBvc3NpYmx5 IHRoZSBldmVudCBxdWV1ZQood2hpY2ggaW5mb3JtcyBvZiBETUEgZXJyb3JzKSwgZXh0cmEgZmVh dHVyZXMgYW5kIGNvbXBsZXggb3B0aW1pemF0aW9ucy4KVGhlIGhvc3QgYWxzbyBoYXMgdG8gaW1w bGVtZW50IElPTU1VIG9wcyB0byBsaWFpc2UgYmV0d2VlbiB0aGUgRE1BIEFQSSBhbmQKdGhlIGh5 cGVydmlzb3IuCgo+IGFueXdheSBqdXN0IHdhbnQgdG8gY2hlY2sgeW91ciB0aG91Z2h0cyBvbiB0 aGUgcG9zc2liaWxpdHkuCj4gCj4gYnR3IHNvbWUgb2YgbXkgY29sbGVhZ3VlcyBhcmUgcG9ydGlu ZyBwS1ZNIHRvIEludGVsIHBsYXRmb3JtLiBJIGJlbGlldmUKPiB0aGV5IHdpbGwgcG9zdCB0aGVp ciB3b3JrIHNob3J0bHkgYW5kIHRoZXJlIG1pZ2h0IHJlcXVpcmUgc29tZSBjb21tb24KPiBmcmFt ZXdvcmsgaW4gcEtWTSBoeXBlcnZpc29yIGxpa2UgaW9tbXUgZG9tYWluLCBoeXBlcmNhbGxzLCBl dGMuIGxpa2UgCj4gd2hhdCB3ZSBoYXZlIGluIHRoZSBob3N0IGlvbW11IHN1YnN5c3RlbS4gQ0Mg dGhlbSBpbiBjYXNlIG9mIGFueSBlYXJseQo+IHRob3VnaHQgdGhleSB3YW50IHRvIHRocm93IGlu LiDwn5iKCgpDb29sISBUaGUgaHlwZXJ2aXNvciBwYXJ0IGNvbnRhaW5zIGlvbW11L2lvbW11LmMg d2hpY2ggZGVhbHMgd2l0aApoeXBlcmNhbGxzIGFuZCBkb21haW5zIGFuZCBkb2Vzbid0IGNvbnRh aW4gYW55dGhpbmcgc3BlY2lmaWMgdG8gQXJtIChpdCdzCm9ubHkgaW4gYXJjaC9hcm02NCBiZWNh dXNlIHRoYXQncyB3aGVyZSBwa3ZtIGN1cnJlbnRseSBzaXRzKS4gSXQgZG9lcyByZWx5Cm9uIGlv LXBndGFibGUgYXQgdGhlIG1vbWVudCB3aGljaCBpcyBub3QgdXNlZCBieSBWVC1kIGJ1dCB0aGF0 IGNhbiBiZQphYnN0cmFjdGVkIGFzIHdlbGwuIEl0J3MgcG9zc2libGUgaG93ZXZlciB0aGF0IG9u IEludGVsIGFuIGVudGlyZWx5CmRpZmZlcmVudCBzZXQgb2YgaHlwZXJjYWxscyB3aWxsIGJlIG5l ZWRlZCwgaWYgYSBzaW1wbGVyIHNvbHV0aW9uIHN1Y2ggYXMKc2hhcmluZyBwYWdlIHRhYmxlcyBm aXRzIGJldHRlciBiZWNhdXNlIFZULWQgaW1wbGVtZW50YXRpb25zIGFyZSBtb3JlCmhvbW9nZW5l b3VzLgoKVGhhbmtzLApKZWFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==