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=-4.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 92767C433DB for ; Tue, 23 Mar 2021 14:01:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 66513619B2 for ; Tue, 23 Mar 2021 14:01:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231924AbhCWOA7 (ORCPT ); Tue, 23 Mar 2021 10:00:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42638 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231908AbhCWOAf (ORCPT ); Tue, 23 Mar 2021 10:00:35 -0400 Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 05A7EC061574 for ; Tue, 23 Mar 2021 07:00:33 -0700 (PDT) Received: by mail-lj1-x229.google.com with SMTP id u4so25737403ljo.6 for ; Tue, 23 Mar 2021 07:00:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=6kMwyvk3PqnCYTAEX+fT1GEBQ4EBnaqGRGP9Fon/5iY=; b=Jp7zFpw0wiHpMHVIU0jDDV6ArGe1naCyxm8D+4T+MhHKHZRVcQoBHU7WJ2y8blRwFw wzK7UTetOk8/k8fFvgCaHvLNLIkwcoPFAoTTUFGtg5+0zqbpXnNUY4yHayZypaTmxJoy 3GvKWGUQWTU6qkxxbSydC2p+ZasR2vHAiHLg+OCy5I4qw7+e41Tay5yFlIaH99/rJVi1 U9ZuSHeG+zPfdXeOtks38o2t73XCemxHoSF2FzY1NUHqwd3qQ9QrGn+oWJnkvxW4pZRn QEInmhy0H5eqLxjSlqvkbNu97YzszUPhdXmzOAWbhvlV1wBG8O9KxbbysLxTM349VR4R 9M+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=6kMwyvk3PqnCYTAEX+fT1GEBQ4EBnaqGRGP9Fon/5iY=; b=bFDCkXSN/KEUOBmo/dq6NDct2VsjrKCG4HOlBxyIp2ULlSAip5gxIpZy3dpbejHeZp 2vMZPDcocmAhZwKuqoooT8cT3Ic5fTLMkV54ugjtUvvIQMUXVYH+ojLE5NU8JSfFSQsE C5oGW7hI/hnIONGzL/sY4PALAKR6IHavI7bsn6Psg0Z+fJ0j4RfQx76Y57sQaHZlV9Re z1PZR/yQhWRXubcQ88KfYThHJseUnh1IpyDAGB0516p+yq1kX7eDWUEFtiRf03Xv9jEr M2vHPLP9MTRQOjyA+CHv4tVL14X6lCMLoQ7zT8b8s7smruFFZaxzRtRFdqpnU2B/e+ex ym7g== X-Gm-Message-State: AOAM533XP6RgIpJpAI0Z7QPNhD75yOxEllfpkiGhViWE4QAmTY+UxsLr NtOuVl6Gj9nPozRzxQ7vS54= X-Google-Smtp-Source: ABdhPJy7Ef0gPGVxmUmytvgXlLT6lRUG29YrcvOI+ibuQOkAtFJEuH9MFZfVY/ZOsCMtw03ynNdUjg== X-Received: by 2002:a2e:508:: with SMTP id 8mr3269597ljf.207.1616508031506; Tue, 23 Mar 2021 07:00:31 -0700 (PDT) Received: from [192.168.2.145] (109-252-193-60.dynamic.spd-mgts.ru. [109.252.193.60]) by smtp.googlemail.com with ESMTPSA id b28sm1723988lfv.109.2021.03.23.07.00.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Mar 2021 07:00:30 -0700 (PDT) Subject: Re: [PATCH v5 15/21] drm/tegra: Add new UAPI to header To: Thierry Reding , Mikko Perttunen Cc: Mikko Perttunen , jonathanh@nvidia.com, airlied@linux.ie, daniel@ffwll.ch, linux-tegra@vger.kernel.org, talho@nvidia.com, bhuntsman@nvidia.com, dri-devel@lists.freedesktop.org References: <20210111130019.3515669-1-mperttunen@nvidia.com> <20210111130019.3515669-16-mperttunen@nvidia.com> From: Dmitry Osipenko Message-ID: <0cc2ec5c-f8aa-ed45-92b6-32f9eadbdc5a@gmail.com> Date: Tue, 23 Mar 2021 17:00:30 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org 23.03.2021 15:30, Thierry Reding пишет: > On Thu, Jan 14, 2021 at 12:34:22PM +0200, Mikko Perttunen wrote: >> On 1/14/21 10:36 AM, Dmitry Osipenko wrote: >>> 13.01.2021 21:56, Mikko Perttunen пишет: >>>> On 1/13/21 8:14 PM, Dmitry Osipenko wrote: >>>>> 11.01.2021 16:00, Mikko Perttunen пишет: >>>>>> +struct drm_tegra_submit_buf { >>>>>> +    /** >>>>>> +     * @mapping_id: [in] >>>>>> +     * >>>>>> +     * Identifier of the mapping to use in the submission. >>>>>> +     */ >>>>>> +    __u32 mapping_id; >>>>> >>>>> I'm now in process of trying out the UAPI using grate drivers and this >>>>> becomes the first obstacle. >>>>> >>>>> Looks like this is not going to work well for older Tegra SoCs, in >>>>> particular for T20, which has a small GART. >>>>> >>>>> Given that the usefulness of the partial mapping feature is very >>>>> questionable until it will be proven with a real userspace, we should >>>>> start with a dynamic mappings that are done at a time of job submission. >>>>> >>>>> DRM already should have everything necessary for creating and managing >>>>> caches of mappings, grate kernel driver has been using drm_mm_scan for a >>>>> long time now for that. >>>>> >>>>> It should be fine to support the static mapping feature, but it should >>>>> be done separately with the drm_mm integration, IMO. >>>>> >>>>> What do think? >>>>> >>>> >>>> Can you elaborate on the requirements to be able to use GART? Are there >>>> any other reasons this would not work on older chips? >>> >>> We have all DRM devices in a single address space on T30+, hence having >>> duplicated mappings for each device should be a bit wasteful. >> >> I guess this should be pretty easy to change to only keep one mapping per >> GEM object. > > The important point here is the semantics: this IOCTL establishes a > mapping for a given GEM object on a given channel. If the underlying > implementation is such that the mapping doesn't fit into the GART, then > that's an implementation detail that the driver needs to take care of. > Similarly, if multiple devices share a single address space, that's > something the driver already knows and can take advantage of by simply > reusing an existing mapping if one already exists. In both cases the > semantics would be correctly implemented and that's really all that > matters. > > Overall this interface seems sound from a high-level point of view and > allows these mappings to be properly created even for the cases we have > where each channel may have a separate address space. It may not be the > optimal interface for all use-cases or any one individual case, but the > very nature of these interfaces is to abstract away certain differences > in order to provide a unified interface to a common programming model. > So there will always be certain tradeoffs. For now this IOCTL isn't useful from a userspace perspective of older SoCs and I'll need to add a lot of code that won't do anything useful just to conform to the specific needs of the newer SoCs. Trying to unify everything into a single API doesn't sound like a good idea at this point and I already suggested to Mikko to try out variant with a separated per-SoC code paths in the next version, then the mappings could be handled separately by the T186+ paths. 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=-2.0 required=3.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=no 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 79549C433DB for ; Tue, 23 Mar 2021 14:00:35 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1D8A8619BF for ; Tue, 23 Mar 2021 14:00:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1D8A8619BF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 833116E069; Tue, 23 Mar 2021 14:00:34 +0000 (UTC) Received: from mail-lj1-x22e.google.com (mail-lj1-x22e.google.com [IPv6:2a00:1450:4864:20::22e]) by gabe.freedesktop.org (Postfix) with ESMTPS id 684456E069 for ; Tue, 23 Mar 2021 14:00:33 +0000 (UTC) Received: by mail-lj1-x22e.google.com with SMTP id 15so25811321ljj.0 for ; Tue, 23 Mar 2021 07:00:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=6kMwyvk3PqnCYTAEX+fT1GEBQ4EBnaqGRGP9Fon/5iY=; b=Jp7zFpw0wiHpMHVIU0jDDV6ArGe1naCyxm8D+4T+MhHKHZRVcQoBHU7WJ2y8blRwFw wzK7UTetOk8/k8fFvgCaHvLNLIkwcoPFAoTTUFGtg5+0zqbpXnNUY4yHayZypaTmxJoy 3GvKWGUQWTU6qkxxbSydC2p+ZasR2vHAiHLg+OCy5I4qw7+e41Tay5yFlIaH99/rJVi1 U9ZuSHeG+zPfdXeOtks38o2t73XCemxHoSF2FzY1NUHqwd3qQ9QrGn+oWJnkvxW4pZRn QEInmhy0H5eqLxjSlqvkbNu97YzszUPhdXmzOAWbhvlV1wBG8O9KxbbysLxTM349VR4R 9M+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=6kMwyvk3PqnCYTAEX+fT1GEBQ4EBnaqGRGP9Fon/5iY=; b=QnbyAKnvvV2Ime1R/PIqUKvY5GtCTHMr+mF84G7bnzHHixxJRy9KjcCzfQ4ASiKRxj BIcxydszqDeb14BCDYSli1TwmTwZ1AGJR+e/FtwHTLPfog6Wfo9NZuWFqXfpYuINGMiw /swy61FNk1NaxVRrOHLRJ4gCWKeFhcYL8hV9A3lgiDT844iOlKNWXCoZCczj96sodcgP 5aqVlKlKFlx5AoQ47x3hMsqCUom31XRfkr6hY4bh1/GpD+71gGU3hTugYEzjGyGkX4CW SsIZOscvBwHIu9Ce3GYgH01rwKyd6lwvzpHKyPKAioyd0Wb4IQdd3E5rdNJeofv6MO2h E+aQ== X-Gm-Message-State: AOAM533rPoyrLB7OpiQDxqvX2Vfvv0vZyPI22wcwLlTBnIAmhIoMTQse VoqSFULul+IdEem4BzYwCXj2gcn0YFE= X-Google-Smtp-Source: ABdhPJy7Ef0gPGVxmUmytvgXlLT6lRUG29YrcvOI+ibuQOkAtFJEuH9MFZfVY/ZOsCMtw03ynNdUjg== X-Received: by 2002:a2e:508:: with SMTP id 8mr3269597ljf.207.1616508031506; Tue, 23 Mar 2021 07:00:31 -0700 (PDT) Received: from [192.168.2.145] (109-252-193-60.dynamic.spd-mgts.ru. [109.252.193.60]) by smtp.googlemail.com with ESMTPSA id b28sm1723988lfv.109.2021.03.23.07.00.30 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Mar 2021 07:00:30 -0700 (PDT) Subject: Re: [PATCH v5 15/21] drm/tegra: Add new UAPI to header To: Thierry Reding , Mikko Perttunen References: <20210111130019.3515669-1-mperttunen@nvidia.com> <20210111130019.3515669-16-mperttunen@nvidia.com> From: Dmitry Osipenko Message-ID: <0cc2ec5c-f8aa-ed45-92b6-32f9eadbdc5a@gmail.com> Date: Tue, 23 Mar 2021 17:00:30 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: airlied@linux.ie, dri-devel@lists.freedesktop.org, jonathanh@nvidia.com, talho@nvidia.com, bhuntsman@nvidia.com, linux-tegra@vger.kernel.org, Mikko Perttunen Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" MjMuMDMuMjAyMSAxNTozMCwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKPiBPbiBUaHUsIEph biAxNCwgMjAyMSBhdCAxMjozNDoyMlBNICswMjAwLCBNaWtrbyBQZXJ0dHVuZW4gd3JvdGU6Cj4+ IE9uIDEvMTQvMjEgMTA6MzYgQU0sIERtaXRyeSBPc2lwZW5rbyB3cm90ZToKPj4+IDEzLjAxLjIw MjEgMjE6NTYsIE1pa2tvIFBlcnR0dW5lbiDQv9C40YjQtdGCOgo+Pj4+IE9uIDEvMTMvMjEgODox NCBQTSwgRG1pdHJ5IE9zaXBlbmtvIHdyb3RlOgo+Pj4+PiAxMS4wMS4yMDIxIDE2OjAwLCBNaWtr byBQZXJ0dHVuZW4g0L/QuNGI0LXRgjoKPj4+Pj4+ICtzdHJ1Y3QgZHJtX3RlZ3JhX3N1Ym1pdF9i dWYgewo+Pj4+Pj4gK8KgwqDCoCAvKioKPj4+Pj4+ICvCoMKgwqDCoCAqIEBtYXBwaW5nX2lkOiBb aW5dCj4+Pj4+PiArwqDCoMKgwqAgKgo+Pj4+Pj4gK8KgwqDCoMKgICogSWRlbnRpZmllciBvZiB0 aGUgbWFwcGluZyB0byB1c2UgaW4gdGhlIHN1Ym1pc3Npb24uCj4+Pj4+PiArwqDCoMKgwqAgKi8K Pj4+Pj4+ICvCoMKgwqAgX191MzIgbWFwcGluZ19pZDsKPj4+Pj4KPj4+Pj4gSSdtIG5vdyBpbiBw cm9jZXNzIG9mIHRyeWluZyBvdXQgdGhlIFVBUEkgdXNpbmcgZ3JhdGUgZHJpdmVycyBhbmQgdGhp cwo+Pj4+PiBiZWNvbWVzIHRoZSBmaXJzdCBvYnN0YWNsZS4KPj4+Pj4KPj4+Pj4gTG9va3MgbGlr ZSB0aGlzIGlzIG5vdCBnb2luZyB0byB3b3JrIHdlbGwgZm9yIG9sZGVyIFRlZ3JhIFNvQ3MsIGlu Cj4+Pj4+IHBhcnRpY3VsYXIgZm9yIFQyMCwgd2hpY2ggaGFzIGEgc21hbGwgR0FSVC4KPj4+Pj4K Pj4+Pj4gR2l2ZW4gdGhhdCB0aGUgdXNlZnVsbmVzcyBvZiB0aGUgcGFydGlhbCBtYXBwaW5nIGZl YXR1cmUgaXMgdmVyeQo+Pj4+PiBxdWVzdGlvbmFibGUgdW50aWwgaXQgd2lsbCBiZSBwcm92ZW4g d2l0aCBhIHJlYWwgdXNlcnNwYWNlLCB3ZSBzaG91bGQKPj4+Pj4gc3RhcnQgd2l0aCBhIGR5bmFt aWMgbWFwcGluZ3MgdGhhdCBhcmUgZG9uZSBhdCBhIHRpbWUgb2Ygam9iIHN1Ym1pc3Npb24uCj4+ Pj4+Cj4+Pj4+IERSTSBhbHJlYWR5IHNob3VsZCBoYXZlIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZv ciBjcmVhdGluZyBhbmQgbWFuYWdpbmcKPj4+Pj4gY2FjaGVzIG9mIG1hcHBpbmdzLCBncmF0ZSBr ZXJuZWwgZHJpdmVyIGhhcyBiZWVuIHVzaW5nIGRybV9tbV9zY2FuIGZvciBhCj4+Pj4+IGxvbmcg dGltZSBub3cgZm9yIHRoYXQuCj4+Pj4+Cj4+Pj4+IEl0IHNob3VsZCBiZSBmaW5lIHRvIHN1cHBv cnQgdGhlIHN0YXRpYyBtYXBwaW5nIGZlYXR1cmUsIGJ1dCBpdCBzaG91bGQKPj4+Pj4gYmUgZG9u ZSBzZXBhcmF0ZWx5IHdpdGggdGhlIGRybV9tbSBpbnRlZ3JhdGlvbiwgSU1PLgo+Pj4+Pgo+Pj4+ PiBXaGF0IGRvIHRoaW5rPwo+Pj4+Pgo+Pj4+Cj4+Pj4gQ2FuIHlvdSBlbGFib3JhdGUgb24gdGhl IHJlcXVpcmVtZW50cyB0byBiZSBhYmxlIHRvIHVzZSBHQVJUPyBBcmUgdGhlcmUKPj4+PiBhbnkg b3RoZXIgcmVhc29ucyB0aGlzIHdvdWxkIG5vdCB3b3JrIG9uIG9sZGVyIGNoaXBzPwo+Pj4KPj4+ IFdlIGhhdmUgYWxsIERSTSBkZXZpY2VzIGluIGEgc2luZ2xlIGFkZHJlc3Mgc3BhY2Ugb24gVDMw KywgaGVuY2UgaGF2aW5nCj4+PiBkdXBsaWNhdGVkIG1hcHBpbmdzIGZvciBlYWNoIGRldmljZSBz aG91bGQgYmUgYSBiaXQgd2FzdGVmdWwuCj4+Cj4+IEkgZ3Vlc3MgdGhpcyBzaG91bGQgYmUgcHJl dHR5IGVhc3kgdG8gY2hhbmdlIHRvIG9ubHkga2VlcCBvbmUgbWFwcGluZyBwZXIKPj4gR0VNIG9i amVjdC4KPiAKPiBUaGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhlIHNlbWFudGljczogdGhp cyBJT0NUTCBlc3RhYmxpc2hlcyBhCj4gbWFwcGluZyBmb3IgYSBnaXZlbiBHRU0gb2JqZWN0IG9u IGEgZ2l2ZW4gY2hhbm5lbC4gSWYgdGhlIHVuZGVybHlpbmcKPiBpbXBsZW1lbnRhdGlvbiBpcyBz dWNoIHRoYXQgdGhlIG1hcHBpbmcgZG9lc24ndCBmaXQgaW50byB0aGUgR0FSVCwgdGhlbgo+IHRo YXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdGhhdCB0aGUgZHJpdmVyIG5lZWRzIHRvIHRh a2UgY2FyZSBvZi4KPiBTaW1pbGFybHksIGlmIG11bHRpcGxlIGRldmljZXMgc2hhcmUgYSBzaW5n bGUgYWRkcmVzcyBzcGFjZSwgdGhhdCdzCj4gc29tZXRoaW5nIHRoZSBkcml2ZXIgYWxyZWFkeSBr bm93cyBhbmQgY2FuIHRha2UgYWR2YW50YWdlIG9mIGJ5IHNpbXBseQo+IHJldXNpbmcgYW4gZXhp c3RpbmcgbWFwcGluZyBpZiBvbmUgYWxyZWFkeSBleGlzdHMuIEluIGJvdGggY2FzZXMgdGhlCj4g c2VtYW50aWNzIHdvdWxkIGJlIGNvcnJlY3RseSBpbXBsZW1lbnRlZCBhbmQgdGhhdCdzIHJlYWxs eSBhbGwgdGhhdAo+IG1hdHRlcnMuCj4gCj4gT3ZlcmFsbCB0aGlzIGludGVyZmFjZSBzZWVtcyBz b3VuZCBmcm9tIGEgaGlnaC1sZXZlbCBwb2ludCBvZiB2aWV3IGFuZAo+IGFsbG93cyB0aGVzZSBt YXBwaW5ncyB0byBiZSBwcm9wZXJseSBjcmVhdGVkIGV2ZW4gZm9yIHRoZSBjYXNlcyB3ZSBoYXZl Cj4gd2hlcmUgZWFjaCBjaGFubmVsIG1heSBoYXZlIGEgc2VwYXJhdGUgYWRkcmVzcyBzcGFjZS4g SXQgbWF5IG5vdCBiZSB0aGUKPiBvcHRpbWFsIGludGVyZmFjZSBmb3IgYWxsIHVzZS1jYXNlcyBv ciBhbnkgb25lIGluZGl2aWR1YWwgY2FzZSwgYnV0IHRoZQo+IHZlcnkgbmF0dXJlIG9mIHRoZXNl IGludGVyZmFjZXMgaXMgdG8gYWJzdHJhY3QgYXdheSBjZXJ0YWluIGRpZmZlcmVuY2VzCj4gaW4g b3JkZXIgdG8gcHJvdmlkZSBhIHVuaWZpZWQgaW50ZXJmYWNlIHRvIGEgY29tbW9uIHByb2dyYW1t aW5nIG1vZGVsLgo+IFNvIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGNlcnRhaW4gdHJhZGVvZmZzLgoK Rm9yIG5vdyB0aGlzIElPQ1RMIGlzbid0IHVzZWZ1bCBmcm9tIGEgdXNlcnNwYWNlIHBlcnNwZWN0 aXZlIG9mIG9sZGVyClNvQ3MgYW5kIEknbGwgbmVlZCB0byBhZGQgYSBsb3Qgb2YgY29kZSB0aGF0 IHdvbid0IGRvIGFueXRoaW5nIHVzZWZ1bApqdXN0IHRvIGNvbmZvcm0gdG8gdGhlIHNwZWNpZmlj IG5lZWRzIG9mIHRoZSBuZXdlciBTb0NzLiBUcnlpbmcgdG8gdW5pZnkKZXZlcnl0aGluZyBpbnRv IGEgc2luZ2xlIEFQSSBkb2Vzbid0IHNvdW5kIGxpa2UgYSBnb29kIGlkZWEgYXQgdGhpcwpwb2lu dCBhbmQgSSBhbHJlYWR5IHN1Z2dlc3RlZCB0byBNaWtrbyB0byB0cnkgb3V0IHZhcmlhbnQgd2l0 aCBhCnNlcGFyYXRlZCBwZXItU29DIGNvZGUgcGF0aHMgaW4gdGhlIG5leHQgdmVyc2lvbiwgdGhl biB0aGUgbWFwcGluZ3MKY291bGQgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGJ5IHRoZSBUMTg2KyBw YXRocy4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==