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 38369C0015E for ; Wed, 5 Jul 2023 09:11:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231918AbjGEJLk (ORCPT ); Wed, 5 Jul 2023 05:11:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230157AbjGEJLi (ORCPT ); Wed, 5 Jul 2023 05:11:38 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 726A910D5 for ; Wed, 5 Jul 2023 02:11:36 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 459C41042; Wed, 5 Jul 2023 02:12:17 -0700 (PDT) Received: from [10.57.76.116] (unknown [10.57.76.116]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3324E3F762; Wed, 5 Jul 2023 02:11:33 -0700 (PDT) Message-ID: <9c5f3515-ad39-e416-902e-96e9387a3b60@arm.com> Date: Wed, 5 Jul 2023 10:11:31 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() To: Yu Zhao Cc: Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , Yin Fengwei , David Hildenbrand , Catalin Marinas , Will Deacon , Anshuman Khandual , Yang Shi , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20230703135330.1865927-1-ryan.roberts@arm.com> <20230703135330.1865927-4-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/07/2023 03:07, Yu Zhao wrote: > On Tue, Jul 4, 2023 at 7:20 AM Ryan Roberts wrote: >> >> On 03/07/2023 20:50, Yu Zhao wrote: >>> On Mon, Jul 3, 2023 at 7:53 AM Ryan Roberts wrote: >>>> >>>> arch_wants_pte_order() can be overridden by the arch to return the >>>> preferred folio order for pte-mapped memory. This is useful as some >>>> architectures (e.g. arm64) can coalesce TLB entries when the physical >>>> memory is suitably contiguous. >>>> >>>> The first user for this hint will be FLEXIBLE_THP, which aims to >>>> allocate large folios for anonymous memory to reduce page faults and >>>> other per-page operation costs. >>>> >>>> Here we add the default implementation of the function, used when the >>>> architecture does not define it, which returns the order corresponding >>>> to 64K. >>> >>> I don't really mind a non-zero default value. But people would ask why >>> non-zero and why 64KB. Probably you could argue this is the large size >>> all known archs support if they have TLB coalescing. For x86, AMD CPUs >>> would want to override this. I'll leave it to Fengwei to decide >>> whether Intel wants a different default value.> >>> Also I don't like the vma parameter because it makes >>> arch_wants_pte_order() a mix of hw preference and vma policy. From my >>> POV, the function should be only about the former; the latter should >>> be decided by arch-independent MM code. However, I can live with it if >>> ARM MM people think this is really what you want. ATM, I'm skeptical >>> they do. >> >> Here's the big picture for what I'm tryng to achieve: >> >> - In the common case, I'd like all programs to get a performance bump by >> automatically and transparently using large anon folios - so no explicit >> requirement on the process to opt-in. > > We all agree on this :) > >> - On arm64, in the above case, I'd like the preferred folio size to be 64K; >> from the (admittedly limitted) testing I've done that's about where the >> performance knee is and it doesn't appear to increase the memory wastage very >> much. It also has the benefits that for 4K base pages this is the contpte size >> (order-4) so I can take full benefit of contpte mappings transparently to the >> process. And for 16K this is the HPA size (order-2). > > My highest priority is to get 16KB proven first because it would > benefit both client and server devices. So it may be different from > yours but I don't see any conflict. Do you mean 16K folios on a 4K base page system, or large folios on a 16K base page system? I thought your focus was on speeding up 4K base page client systems but this statement has got me wondering? > >> - On arm64 when the process has marked the VMA for THP (or when >> transparent_hugepage=always) but the VMA does not meet the requirements for a >> PMD-sized mapping (or we failed to allocate, ...) then I'd like to map using >> contpte. For 4K base pages this is 64K (order-4), for 16K this is 2M (order-7) >> and for 64K this is 2M (order-5). The 64K base page case is very important since >> the PMD size for that base page is 512MB which is almost impossible to allocate >> in practice. > > Which case (server or client) are you focusing on here? For our client > devices, I can confidently say that 64KB has to be after 16KB, if it > happens at all. For servers in general, I don't know of any major > memory-intensive workloads that are not THP-aware, i.e., I don't think > "VMA does not meet the requirements" is a concern. For the 64K base page case, the focus is server. The problem reported by our partner is that the 512M huge page size is too big to reliably allocate and so the fauls always fall back to 64K base pages in practice. I would also speculate (happy to be proved wrong) that there are many THP-aware workloads that assume the THP size is 2M. In this case, their VMAs may well be too small to fit a 512M huge page when running on 64K base page system. But the TL;DR is that Arm has a partner for which enabling 2M THP on a 64K base page system is a very real requirement. Our intent is that this will be the mechanism we use to enable it. 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 960CCEB64DA for ; Thu, 6 Jul 2023 02:15:03 +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:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mhaIFAQXseZ6J3UdfSXHr7s6jGVjXirRjq+awtVhs38=; b=r3eT00Zr+nJKw8 kfNigx9tVDwAixW14VoRdJNoO4k+RHfPiIsGufy5xsOzi6Ja8CONO8Mcw0EbZis2uCjA/vclI9WxO XZ0KsB4Mha01yGLVwkigFloRcjgh2oAb6JrJCrZetOrfW7RAvViPe7EziWDgLgcVkkO1NkgMKlsTv ZYGtaM1zTLi98BCeHC8Dbme4audI+8iT7p+jPDXZWaZ9/lUeBEj1ny9fEjm5YdvWz/fjfMnsaRFFe vGauQn03CJm1bTp8cDqLcVXN+CdAbGQbY5N0g9JFrTjFzf6p6eUCnbZQdiQvvOmAdb4n6cf0ilGr+ 3wgGCn5V4O4Pd5xbwEjQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qHEVy-0005rU-27; Thu, 06 Jul 2023 02:14:38 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qHEVv-0005pJ-1o for linux-arm-kernel@lists.infradead.org; Thu, 06 Jul 2023 02:14:37 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 459C41042; Wed, 5 Jul 2023 02:12:17 -0700 (PDT) Received: from [10.57.76.116] (unknown [10.57.76.116]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3324E3F762; Wed, 5 Jul 2023 02:11:33 -0700 (PDT) Message-ID: <9c5f3515-ad39-e416-902e-96e9387a3b60@arm.com> Date: Wed, 5 Jul 2023 10:11:31 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() To: Yu Zhao Cc: Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , Yin Fengwei , David Hildenbrand , Catalin Marinas , Will Deacon , Anshuman Khandual , Yang Shi , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <20230703135330.1865927-1-ryan.roberts@arm.com> <20230703135330.1865927-4-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230705_191435_695244_0728F319 X-CRM114-Status: GOOD ( 31.92 ) 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 T24gMDUvMDcvMjAyMyAwMzowNywgWXUgWmhhbyB3cm90ZToKPiBPbiBUdWUsIEp1bCA0LCAyMDIz IGF0IDc6MjDigK9BTSBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPiB3cm90ZToK Pj4KPj4gT24gMDMvMDcvMjAyMyAyMDo1MCwgWXUgWmhhbyB3cm90ZToKPj4+IE9uIE1vbiwgSnVs IDMsIDIwMjMgYXQgNzo1M+KAr0FNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+ IHdyb3RlOgo+Pj4+Cj4+Pj4gYXJjaF93YW50c19wdGVfb3JkZXIoKSBjYW4gYmUgb3ZlcnJpZGRl biBieSB0aGUgYXJjaCB0byByZXR1cm4gdGhlCj4+Pj4gcHJlZmVycmVkIGZvbGlvIG9yZGVyIGZv ciBwdGUtbWFwcGVkIG1lbW9yeS4gVGhpcyBpcyB1c2VmdWwgYXMgc29tZQo+Pj4+IGFyY2hpdGVj dHVyZXMgKGUuZy4gYXJtNjQpIGNhbiBjb2FsZXNjZSBUTEIgZW50cmllcyB3aGVuIHRoZSBwaHlz aWNhbAo+Pj4+IG1lbW9yeSBpcyBzdWl0YWJseSBjb250aWd1b3VzLgo+Pj4+Cj4+Pj4gVGhlIGZp cnN0IHVzZXIgZm9yIHRoaXMgaGludCB3aWxsIGJlIEZMRVhJQkxFX1RIUCwgd2hpY2ggYWltcyB0 bwo+Pj4+IGFsbG9jYXRlIGxhcmdlIGZvbGlvcyBmb3IgYW5vbnltb3VzIG1lbW9yeSB0byByZWR1 Y2UgcGFnZSBmYXVsdHMgYW5kCj4+Pj4gb3RoZXIgcGVyLXBhZ2Ugb3BlcmF0aW9uIGNvc3RzLgo+ Pj4+Cj4+Pj4gSGVyZSB3ZSBhZGQgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZ1 bmN0aW9uLCB1c2VkIHdoZW4gdGhlCj4+Pj4gYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGRlZmluZSBp dCwgd2hpY2ggcmV0dXJucyB0aGUgb3JkZXIgY29ycmVzcG9uZGluZwo+Pj4+IHRvIDY0Sy4KPj4+ Cj4+PiBJIGRvbid0IHJlYWxseSBtaW5kIGEgbm9uLXplcm8gZGVmYXVsdCB2YWx1ZS4gQnV0IHBl b3BsZSB3b3VsZCBhc2sgd2h5Cj4+PiBub24temVybyBhbmQgd2h5IDY0S0IuIFByb2JhYmx5IHlv dSBjb3VsZCBhcmd1ZSB0aGlzIGlzIHRoZSBsYXJnZSBzaXplCj4+PiBhbGwga25vd24gYXJjaHMg c3VwcG9ydCBpZiB0aGV5IGhhdmUgVExCIGNvYWxlc2NpbmcuIEZvciB4ODYsIEFNRCBDUFVzCj4+ PiB3b3VsZCB3YW50IHRvIG92ZXJyaWRlIHRoaXMuIEknbGwgbGVhdmUgaXQgdG8gRmVuZ3dlaSB0 byBkZWNpZGUKPj4+IHdoZXRoZXIgSW50ZWwgd2FudHMgYSBkaWZmZXJlbnQgZGVmYXVsdCB2YWx1 ZS4+Cj4+PiBBbHNvIEkgZG9uJ3QgbGlrZSB0aGUgdm1hIHBhcmFtZXRlciBiZWNhdXNlIGl0IG1h a2VzCj4+PiBhcmNoX3dhbnRzX3B0ZV9vcmRlcigpIGEgbWl4IG9mIGh3IHByZWZlcmVuY2UgYW5k IHZtYSBwb2xpY3kuIEZyb20gbXkKPj4+IFBPViwgdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5 IGFib3V0IHRoZSBmb3JtZXI7IHRoZSBsYXR0ZXIgc2hvdWxkCj4+PiBiZSBkZWNpZGVkIGJ5IGFy Y2gtaW5kZXBlbmRlbnQgTU0gY29kZS4gSG93ZXZlciwgSSBjYW4gbGl2ZSB3aXRoIGl0IGlmCj4+ PiBBUk0gTU0gcGVvcGxlIHRoaW5rIHRoaXMgaXMgcmVhbGx5IHdoYXQgeW91IHdhbnQuIEFUTSwg SSdtIHNrZXB0aWNhbAo+Pj4gdGhleSBkby4KPj4KPj4gSGVyZSdzIHRoZSBiaWcgcGljdHVyZSBm b3Igd2hhdCBJJ20gdHJ5bmcgdG8gYWNoaWV2ZToKPj4KPj4gIC0gSW4gdGhlIGNvbW1vbiBjYXNl LCBJJ2QgbGlrZSBhbGwgcHJvZ3JhbXMgdG8gZ2V0IGEgcGVyZm9ybWFuY2UgYnVtcCBieQo+PiBh dXRvbWF0aWNhbGx5IGFuZCB0cmFuc3BhcmVudGx5IHVzaW5nIGxhcmdlIGFub24gZm9saW9zIC0g c28gbm8gZXhwbGljaXQKPj4gcmVxdWlyZW1lbnQgb24gdGhlIHByb2Nlc3MgdG8gb3B0LWluLgo+ IAo+IFdlIGFsbCBhZ3JlZSBvbiB0aGlzIDopCj4gCj4+ICAtIE9uIGFybTY0LCBpbiB0aGUgYWJv dmUgY2FzZSwgSSdkIGxpa2UgdGhlIHByZWZlcnJlZCBmb2xpbyBzaXplIHRvIGJlIDY0SzsKPj4g ZnJvbSB0aGUgKGFkbWl0dGVkbHkgbGltaXR0ZWQpIHRlc3RpbmcgSSd2ZSBkb25lIHRoYXQncyBh Ym91dCB3aGVyZSB0aGUKPj4gcGVyZm9ybWFuY2Uga25lZSBpcyBhbmQgaXQgZG9lc24ndCBhcHBl YXIgdG8gaW5jcmVhc2UgdGhlIG1lbW9yeSB3YXN0YWdlIHZlcnkKPj4gbXVjaC4gSXQgYWxzbyBo YXMgdGhlIGJlbmVmaXRzIHRoYXQgZm9yIDRLIGJhc2UgcGFnZXMgdGhpcyBpcyB0aGUgY29udHB0 ZSBzaXplCj4+IChvcmRlci00KSBzbyBJIGNhbiB0YWtlIGZ1bGwgYmVuZWZpdCBvZiBjb250cHRl IG1hcHBpbmdzIHRyYW5zcGFyZW50bHkgdG8gdGhlCj4+IHByb2Nlc3MuIEFuZCBmb3IgMTZLIHRo aXMgaXMgdGhlIEhQQSBzaXplIChvcmRlci0yKS4KPiAKPiBNeSBoaWdoZXN0IHByaW9yaXR5IGlz IHRvIGdldCAxNktCIHByb3ZlbiBmaXJzdCBiZWNhdXNlIGl0IHdvdWxkCj4gYmVuZWZpdCBib3Ro IGNsaWVudCBhbmQgc2VydmVyIGRldmljZXMuIFNvIGl0IG1heSBiZSBkaWZmZXJlbnQgZnJvbQo+ IHlvdXJzIGJ1dCBJIGRvbid0IHNlZSBhbnkgY29uZmxpY3QuCgpEbyB5b3UgbWVhbiAxNksgZm9s aW9zIG9uIGEgNEsgYmFzZSBwYWdlIHN5c3RlbSwgb3IgbGFyZ2UgZm9saW9zIG9uIGEgMTZLIGJh c2UKcGFnZSBzeXN0ZW0/IEkgdGhvdWdodCB5b3VyIGZvY3VzIHdhcyBvbiBzcGVlZGluZyB1cCA0 SyBiYXNlIHBhZ2UgY2xpZW50IHN5c3RlbXMKYnV0IHRoaXMgc3RhdGVtZW50IGhhcyBnb3QgbWUg d29uZGVyaW5nPwoKPiAKPj4gIC0gT24gYXJtNjQgd2hlbiB0aGUgcHJvY2VzcyBoYXMgbWFya2Vk IHRoZSBWTUEgZm9yIFRIUCAob3Igd2hlbgo+PiB0cmFuc3BhcmVudF9odWdlcGFnZT1hbHdheXMp IGJ1dCB0aGUgVk1BIGRvZXMgbm90IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBmb3IgYQo+PiBQTUQt c2l6ZWQgbWFwcGluZyAob3Igd2UgZmFpbGVkIHRvIGFsbG9jYXRlLCAuLi4pIHRoZW4gSSdkIGxp a2UgdG8gbWFwIHVzaW5nCj4+IGNvbnRwdGUuIEZvciA0SyBiYXNlIHBhZ2VzIHRoaXMgaXMgNjRL IChvcmRlci00KSwgZm9yIDE2SyB0aGlzIGlzIDJNIChvcmRlci03KQo+PiBhbmQgZm9yIDY0SyB0 aGlzIGlzIDJNIChvcmRlci01KS4gVGhlIDY0SyBiYXNlIHBhZ2UgY2FzZSBpcyB2ZXJ5IGltcG9y dGFudCBzaW5jZQo+PiB0aGUgUE1EIHNpemUgZm9yIHRoYXQgYmFzZSBwYWdlIGlzIDUxMk1CIHdo aWNoIGlzIGFsbW9zdCBpbXBvc3NpYmxlIHRvIGFsbG9jYXRlCj4+IGluIHByYWN0aWNlLgo+IAo+ IFdoaWNoIGNhc2UgKHNlcnZlciBvciBjbGllbnQpIGFyZSB5b3UgZm9jdXNpbmcgb24gaGVyZT8g Rm9yIG91ciBjbGllbnQKPiBkZXZpY2VzLCBJIGNhbiBjb25maWRlbnRseSBzYXkgdGhhdCA2NEtC IGhhcyB0byBiZSBhZnRlciAxNktCLCBpZiBpdAo+IGhhcHBlbnMgYXQgYWxsLiBGb3Igc2VydmVy cyBpbiBnZW5lcmFsLCBJIGRvbid0IGtub3cgb2YgYW55IG1ham9yCj4gbWVtb3J5LWludGVuc2l2 ZSB3b3JrbG9hZHMgdGhhdCBhcmUgbm90IFRIUC1hd2FyZSwgaS5lLiwgSSBkb24ndCB0aGluawo+ ICJWTUEgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIiBpcyBhIGNvbmNlcm4uCgpGb3Ig dGhlIDY0SyBiYXNlIHBhZ2UgY2FzZSwgdGhlIGZvY3VzIGlzIHNlcnZlci4gVGhlIHByb2JsZW0g cmVwb3J0ZWQgYnkgb3VyCnBhcnRuZXIgaXMgdGhhdCB0aGUgNTEyTSBodWdlIHBhZ2Ugc2l6ZSBp cyB0b28gYmlnIHRvIHJlbGlhYmx5IGFsbG9jYXRlIGFuZCBzbwp0aGUgZmF1bHMgYWx3YXlzIGZh bGwgYmFjayB0byA2NEsgYmFzZSBwYWdlcyBpbiBwcmFjdGljZS4gSSB3b3VsZCBhbHNvIHNwZWN1 bGF0ZQooaGFwcHkgdG8gYmUgcHJvdmVkIHdyb25nKSB0aGF0IHRoZXJlIGFyZSBtYW55IFRIUC1h d2FyZSB3b3JrbG9hZHMgdGhhdCBhc3N1bWUKdGhlIFRIUCBzaXplIGlzIDJNLiBJbiB0aGlzIGNh c2UsIHRoZWlyIFZNQXMgbWF5IHdlbGwgYmUgdG9vIHNtYWxsIHRvIGZpdCBhIDUxMk0KaHVnZSBw YWdlIHdoZW4gcnVubmluZyBvbiA2NEsgYmFzZSBwYWdlIHN5c3RlbS4KCkJ1dCB0aGUgVEw7RFIg aXMgdGhhdCBBcm0gaGFzIGEgcGFydG5lciBmb3Igd2hpY2ggZW5hYmxpbmcgMk0gVEhQIG9uIGEg NjRLIGJhc2UKcGFnZSBzeXN0ZW0gaXMgYSB2ZXJ5IHJlYWwgcmVxdWlyZW1lbnQuIE91ciBpbnRl bnQgaXMgdGhhdCB0aGlzIHdpbGwgYmUgdGhlCm1lY2hhbmlzbSB3ZSB1c2UgdG8gZW5hYmxlIGl0 LgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGlu dXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt YXJtLWtlcm5lbAo=