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=-8.0 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,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 CA785CA9EA0 for ; Mon, 4 Nov 2019 10:24:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 93A0221E6F for ; Mon, 4 Nov 2019 10:24:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="eSNWnwv3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728365AbfKDKYw (ORCPT ); Mon, 4 Nov 2019 05:24:52 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:34701 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726633AbfKDKYw (ORCPT ); Mon, 4 Nov 2019 05:24:52 -0500 Received: by mail-wr1-f67.google.com with SMTP id e6so14530279wrw.1 for ; Mon, 04 Nov 2019 02:24:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition:in-reply-to:user-agent; bh=Hvkk7RONc9SrfQNrWrK3s3UYcl8AIEq79yP2mzZcaZA=; b=eSNWnwv3fB7Fj0a7kurApPAHHox5dFhx/NM3EAsFGjte7RLs9BE5V64dy8FlNtLzEW 6KxCKQQP9FfDdFQbjmXcpbvyWk+JY0eAuXm+Rq3ubuLbfl43Nx0vFV+MWOsHq//iw+ZO 0iYtdKt8PWGTGIndD4hc5wcMHW+maRs2aRUlc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=Hvkk7RONc9SrfQNrWrK3s3UYcl8AIEq79yP2mzZcaZA=; b=VxgUUTjSLaJzYySc+T67D1OMJdWsHvE3VhHOrAuQtZULWYjua2CBUEv+/fCOgART9R 6trHXaqdQkKJvsFUu92y1CoZuhMujXWgS+M0vWWnJHGQvBV8LQI12TVvwEsFpiiJkA4s bOZ8GdPOfMeT1zZ5TDI6agslOG4oIXPArJZKEnknSRkahIsmKi+wXTN9Gi4n7Pc9e6F6 mV+F7d0qzrR8TEhLp6R/e/LrGOgcmjlwDJsnklUE8JldkY7XPt+d+51b4WcBkyys7SmB 9xyN4p32H6shoqbUJTObOS+rcMadPcTmeFXdbMdTS208f5fN0dGbQ+6FxBKlY4vfqDiM 2nLg== X-Gm-Message-State: APjAAAXF730+cH8A6I9xUEEcvzeMm0yKClVQ7bmePmdb3jwtn0bQCotp CtCci5bOkgytUxJ+ZACasYGiEw== X-Google-Smtp-Source: APXvYqyrMVjUdiJaQjzgMyOTS8FWPykBYXOG+rwf6O+oLUfiLei6jNj6k8cIGflHK7qS8E+0dnsDOg== X-Received: by 2002:adf:ebcb:: with SMTP id v11mr20907185wrn.24.1572863087835; Mon, 04 Nov 2019 02:24:47 -0800 (PST) Received: from phenom.ffwll.local (212-51-149-96.fiber7.init7.net. [212.51.149.96]) by smtp.gmail.com with ESMTPSA id v16sm17579034wrc.84.2019.11.04.02.24.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 02:24:47 -0800 (PST) Date: Mon, 4 Nov 2019 11:24:45 +0100 From: Daniel Vetter To: John Stultz Cc: lkml , Sandeep Patil , Mike Rapoport , Chenbo Feng , Alistair Strachan , Liam Mark , Yue Hu , dri-devel@lists.freedesktop.org, "Andrew F . Davis" , Hridya Valsaraju , Andrew Morton , Pratik Patel Subject: Re: [RFC][PATCH 2/2] dma-buf: heaps: Allow system & cma heaps to be configured as a modules Message-ID: <20191104102445.GE10326@phenom.ffwll.local> Mail-Followup-To: John Stultz , lkml , Sandeep Patil , Mike Rapoport , Chenbo Feng , Alistair Strachan , Liam Mark , Yue Hu , dri-devel@lists.freedesktop.org, "Andrew F . Davis" , Hridya Valsaraju , Andrew Morton , Pratik Patel References: <20191025234834.28214-1-john.stultz@linaro.org> <20191025234834.28214-3-john.stultz@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20191025234834.28214-3-john.stultz@linaro.org> X-Operating-System: Linux phenom 5.2.0-3-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 25, 2019 at 11:48:34PM +0000, John Stultz wrote: > Allow loading system and cma heap as a module instead of just as > a statically built in heap. > > Since there isn't a good mechanism for dmabuf lifetime tracking > it isn't safe to allow the heap drivers to be unloaded, so these > drivers do not implement any module unloading functionality and > will show up in lsmod as "[permanent]". dma-buf itself has all the try_module_get we'll need ... why is this not possible? -Daniel > > This patch also exports key functions from dmabuf heaps core and > the heap helper functions so they can be accessed by the module. > > Cc: Laura Abbott > Cc: Benjamin Gaignard > Cc: Sumit Semwal > Cc: Liam Mark > Cc: Pratik Patel > Cc: Brian Starkey > Cc: Andrew F. Davis > Cc: Andrew Morton > Cc: Yue Hu > Cc: Mike Rapoport > Cc: Chenbo Feng > Cc: Alistair Strachan > Cc: Sandeep Patil > Cc: Hridya Valsaraju > Cc: dri-devel@lists.freedesktop.org > Signed-off-by: John Stultz > --- > drivers/dma-buf/dma-heap.c | 2 ++ > drivers/dma-buf/heaps/Kconfig | 4 ++-- > drivers/dma-buf/heaps/heap-helpers.c | 2 ++ > 3 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c > index 9a41b73e54b4..2c4ac71a715b 100644 > --- a/drivers/dma-buf/dma-heap.c > +++ b/drivers/dma-buf/dma-heap.c > @@ -161,6 +161,7 @@ void *dma_heap_get_drvdata(struct dma_heap *heap) > { > return heap->priv; > } > +EXPORT_SYMBOL_GPL(dma_heap_get_drvdata); > > struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) > { > @@ -243,6 +244,7 @@ struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) > kfree(heap); > return err_ret; > } > +EXPORT_SYMBOL_GPL(dma_heap_add); > > static char *dma_heap_devnode(struct device *dev, umode_t *mode) > { > diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig > index a5eef06c4226..e273fb18feca 100644 > --- a/drivers/dma-buf/heaps/Kconfig > +++ b/drivers/dma-buf/heaps/Kconfig > @@ -1,12 +1,12 @@ > config DMABUF_HEAPS_SYSTEM > - bool "DMA-BUF System Heap" > + tristate "DMA-BUF System Heap" > depends on DMABUF_HEAPS > help > Choose this option to enable the system dmabuf heap. The system heap > is backed by pages from the buddy allocator. If in doubt, say Y. > > config DMABUF_HEAPS_CMA > - bool "DMA-BUF CMA Heap" > + tristate "DMA-BUF CMA Heap" > depends on DMABUF_HEAPS && DMA_CMA > help > Choose this option to enable dma-buf CMA heap. This heap is backed > diff --git a/drivers/dma-buf/heaps/heap-helpers.c b/drivers/dma-buf/heaps/heap-helpers.c > index 750bef4e902d..fb9835126893 100644 > --- a/drivers/dma-buf/heaps/heap-helpers.c > +++ b/drivers/dma-buf/heaps/heap-helpers.c > @@ -24,6 +24,7 @@ void init_heap_helper_buffer(struct heap_helper_buffer *buffer, > INIT_LIST_HEAD(&buffer->attachments); > buffer->free = free; > } > +EXPORT_SYMBOL_GPL(init_heap_helper_buffer); > > struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, > int fd_flags) > @@ -37,6 +38,7 @@ struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, > > return dma_buf_export(&exp_info); > } > +EXPORT_SYMBOL_GPL(heap_helper_export_dmabuf); > > static void *dma_heap_map_kernel(struct heap_helper_buffer *buffer) > { > -- > 2.17.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC][PATCH 2/2] dma-buf: heaps: Allow system & cma heaps to be configured as a modules Date: Mon, 4 Nov 2019 11:24:45 +0100 Message-ID: <20191104102445.GE10326@phenom.ffwll.local> References: <20191025234834.28214-1-john.stultz@linaro.org> <20191025234834.28214-3-john.stultz@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4EB576E266 for ; Mon, 4 Nov 2019 10:24:49 +0000 (UTC) Received: by mail-wr1-x442.google.com with SMTP id e6so14530278wrw.1 for ; Mon, 04 Nov 2019 02:24:49 -0800 (PST) Content-Disposition: inline In-Reply-To: <20191025234834.28214-3-john.stultz@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: John Stultz Cc: Sandeep Patil , Chenbo Feng , Alistair Strachan , Liam Mark , lkml , Yue Hu , dri-devel@lists.freedesktop.org, "Andrew F . Davis" , Hridya Valsaraju , Andrew Morton , Mike Rapoport , Pratik Patel List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBPY3QgMjUsIDIwMTkgYXQgMTE6NDg6MzRQTSArMDAwMCwgSm9obiBTdHVsdHogd3Jv dGU6Cj4gQWxsb3cgbG9hZGluZyBzeXN0ZW0gYW5kIGNtYSBoZWFwIGFzIGEgbW9kdWxlIGluc3Rl YWQgb2YganVzdCBhcwo+IGEgc3RhdGljYWxseSBidWlsdCBpbiBoZWFwLgo+IAo+IFNpbmNlIHRo ZXJlIGlzbid0IGEgZ29vZCBtZWNoYW5pc20gZm9yIGRtYWJ1ZiBsaWZldGltZSB0cmFja2luZwo+ IGl0IGlzbid0IHNhZmUgdG8gYWxsb3cgdGhlIGhlYXAgZHJpdmVycyB0byBiZSB1bmxvYWRlZCwg c28gdGhlc2UKPiBkcml2ZXJzIGRvIG5vdCBpbXBsZW1lbnQgYW55IG1vZHVsZSB1bmxvYWRpbmcg ZnVuY3Rpb25hbGl0eSBhbmQKPiB3aWxsIHNob3cgdXAgaW4gbHNtb2QgYXMgIltwZXJtYW5lbnRd Ii4KCmRtYS1idWYgaXRzZWxmIGhhcyBhbGwgdGhlIHRyeV9tb2R1bGVfZ2V0IHdlJ2xsIG5lZWQg Li4uIHdoeSBpcyB0aGlzIG5vdApwb3NzaWJsZT8KLURhbmllbAoKPiAKPiBUaGlzIHBhdGNoIGFs c28gZXhwb3J0cyBrZXkgZnVuY3Rpb25zIGZyb20gZG1hYnVmIGhlYXBzIGNvcmUgYW5kCj4gdGhl IGhlYXAgaGVscGVyIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBieSB0aGUgbW9k dWxlLgo+IAo+IENjOiBMYXVyYSBBYmJvdHQgPGxhYmJvdHRAcmVkaGF0LmNvbT4KPiBDYzogQmVu amFtaW4gR2FpZ25hcmQgPGJlbmphbWluLmdhaWduYXJkQGxpbmFyby5vcmc+Cj4gQ2M6IFN1bWl0 IFNlbXdhbCA8c3VtaXQuc2Vtd2FsQGxpbmFyby5vcmc+Cj4gQ2M6IExpYW0gTWFyayA8bG1hcmtA Y29kZWF1cm9yYS5vcmc+Cj4gQ2M6IFByYXRpayBQYXRlbCA8cHJhdGlrcEBjb2RlYXVyb3JhLm9y Zz4KPiBDYzogQnJpYW4gU3RhcmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgo+IENjOiBBbmRy ZXcgRi4gRGF2aXMgPGFmZEB0aS5jb20+Cj4gQ2M6IEFuZHJldyBNb3J0b24gPGFrcG1AbGludXgt Zm91bmRhdGlvbi5vcmc+Cj4gQ2M6IFl1ZSBIdSA8aHV5dWUyQHl1bG9uZy5jb20+Cj4gQ2M6IE1p a2UgUmFwb3BvcnQgPHJwcHRAbGludXguaWJtLmNvbT4KPiBDYzogQ2hlbmJvIEZlbmcgPGZlbmdj QGdvb2dsZS5jb20+Cj4gQ2M6IEFsaXN0YWlyIFN0cmFjaGFuIDxhc3RyYWNoYW5AZ29vZ2xlLmNv bT4KPiBDYzogU2FuZGVlcCBQYXRpbCA8c3NwYXRpbEBnb29nbGUuY29tPgo+IENjOiBIcmlkeWEg VmFsc2FyYWp1IDxocmlkeWFAZ29vZ2xlLmNvbT4KPiBDYzogZHJpLWRldmVsQGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwo+IFNpZ25lZC1vZmYtYnk6IEpvaG4gU3R1bHR6IDxqb2huLnN0dWx0ekBsaW5h cm8ub3JnPgo+IC0tLQo+ICBkcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYyAgICAgICAgICAgfCAy ICsrCj4gIGRyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnICAgICAgICB8IDQgKystLQo+ICBk cml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMgfCAyICsrCj4gIDMgZmlsZXMgY2hh bmdlZCwgNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtaGVhcC5jCj4g aW5kZXggOWE0MWI3M2U1NGI0Li4yYzRhYzcxYTcxNWIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9k bWEtYnVmL2RtYS1oZWFwLmMKPiArKysgYi9kcml2ZXJzL2RtYS1idWYvZG1hLWhlYXAuYwo+IEBA IC0xNjEsNiArMTYxLDcgQEAgdm9pZCAqZG1hX2hlYXBfZ2V0X2RydmRhdGEoc3RydWN0IGRtYV9o ZWFwICpoZWFwKQo+ICB7Cj4gIAlyZXR1cm4gaGVhcC0+cHJpdjsKPiAgfQo+ICtFWFBPUlRfU1lN Qk9MX0dQTChkbWFfaGVhcF9nZXRfZHJ2ZGF0YSk7Cj4gIAo+ICBzdHJ1Y3QgZG1hX2hlYXAgKmRt YV9oZWFwX2FkZChjb25zdCBzdHJ1Y3QgZG1hX2hlYXBfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQo+ ICB7Cj4gQEAgLTI0Myw2ICsyNDQsNyBAQCBzdHJ1Y3QgZG1hX2hlYXAgKmRtYV9oZWFwX2FkZChj b25zdCBzdHJ1Y3QgZG1hX2hlYXBfZXhwb3J0X2luZm8gKmV4cF9pbmZvKQo+ICAJa2ZyZWUoaGVh cCk7Cj4gIAlyZXR1cm4gZXJyX3JldDsKPiAgfQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkbWFfaGVh cF9hZGQpOwo+ICAKPiAgc3RhdGljIGNoYXIgKmRtYV9oZWFwX2Rldm5vZGUoc3RydWN0IGRldmlj ZSAqZGV2LCB1bW9kZV90ICptb2RlKQo+ICB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hLWJ1 Zi9oZWFwcy9LY29uZmlnIGIvZHJpdmVycy9kbWEtYnVmL2hlYXBzL0tjb25maWcKPiBpbmRleCBh NWVlZjA2YzQyMjYuLmUyNzNmYjE4ZmVjYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYv aGVhcHMvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZG1hLWJ1Zi9oZWFwcy9LY29uZmlnCj4gQEAg LTEsMTIgKzEsMTIgQEAKPiAgY29uZmlnIERNQUJVRl9IRUFQU19TWVNURU0KPiAtCWJvb2wgIkRN QS1CVUYgU3lzdGVtIEhlYXAiCj4gKwl0cmlzdGF0ZSAiRE1BLUJVRiBTeXN0ZW0gSGVhcCIKPiAg CWRlcGVuZHMgb24gRE1BQlVGX0hFQVBTCj4gIAloZWxwCj4gIAkgIENob29zZSB0aGlzIG9wdGlv biB0byBlbmFibGUgdGhlIHN5c3RlbSBkbWFidWYgaGVhcC4gVGhlIHN5c3RlbSBoZWFwCj4gIAkg IGlzIGJhY2tlZCBieSBwYWdlcyBmcm9tIHRoZSBidWRkeSBhbGxvY2F0b3IuIElmIGluIGRvdWJ0 LCBzYXkgWS4KPiAgCj4gIGNvbmZpZyBETUFCVUZfSEVBUFNfQ01BCj4gLQlib29sICJETUEtQlVG IENNQSBIZWFwIgo+ICsJdHJpc3RhdGUgIkRNQS1CVUYgQ01BIEhlYXAiCj4gIAlkZXBlbmRzIG9u IERNQUJVRl9IRUFQUyAmJiBETUFfQ01BCj4gIAloZWxwCj4gIAkgIENob29zZSB0aGlzIG9wdGlv biB0byBlbmFibGUgZG1hLWJ1ZiBDTUEgaGVhcC4gVGhpcyBoZWFwIGlzIGJhY2tlZAo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMgYi9kcml2ZXJzL2Rt YS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMKPiBpbmRleCA3NTBiZWY0ZTkwMmQuLmZiOTgzNTEy Njg5MyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMK PiArKysgYi9kcml2ZXJzL2RtYS1idWYvaGVhcHMvaGVhcC1oZWxwZXJzLmMKPiBAQCAtMjQsNiAr MjQsNyBAQCB2b2lkIGluaXRfaGVhcF9oZWxwZXJfYnVmZmVyKHN0cnVjdCBoZWFwX2hlbHBlcl9i dWZmZXIgKmJ1ZmZlciwKPiAgCUlOSVRfTElTVF9IRUFEKCZidWZmZXItPmF0dGFjaG1lbnRzKTsK PiAgCWJ1ZmZlci0+ZnJlZSA9IGZyZWU7Cj4gIH0KPiArRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF9o ZWFwX2hlbHBlcl9idWZmZXIpOwo+ICAKPiAgc3RydWN0IGRtYV9idWYgKmhlYXBfaGVscGVyX2V4 cG9ydF9kbWFidWYoc3RydWN0IGhlYXBfaGVscGVyX2J1ZmZlciAqYnVmZmVyLAo+ICAJCQkJCSAg aW50IGZkX2ZsYWdzKQo+IEBAIC0zNyw2ICszOCw3IEBAIHN0cnVjdCBkbWFfYnVmICpoZWFwX2hl bHBlcl9leHBvcnRfZG1hYnVmKHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlciwKPiAg Cj4gIAlyZXR1cm4gZG1hX2J1Zl9leHBvcnQoJmV4cF9pbmZvKTsKPiAgfQo+ICtFWFBPUlRfU1lN Qk9MX0dQTChoZWFwX2hlbHBlcl9leHBvcnRfZG1hYnVmKTsKPiAgCj4gIHN0YXRpYyB2b2lkICpk bWFfaGVhcF9tYXBfa2VybmVsKHN0cnVjdCBoZWFwX2hlbHBlcl9idWZmZXIgKmJ1ZmZlcikKPiAg ewo+IC0tIAo+IDIuMTcuMQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIElu dGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==