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 3C986C433DB for ; Tue, 23 Mar 2021 17:33:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 122CB600EF for ; Tue, 23 Mar 2021 17:33:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230227AbhCWRdN (ORCPT ); Tue, 23 Mar 2021 13:33:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60834 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230169AbhCWRcx (ORCPT ); Tue, 23 Mar 2021 13:32:53 -0400 Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6A6DEC061574 for ; Tue, 23 Mar 2021 10:32:53 -0700 (PDT) Received: by mail-lf1-x133.google.com with SMTP id f3so19499071lfu.5 for ; Tue, 23 Mar 2021 10:32:53 -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=fQt6xCmMqTbZa/RTqpTUck38Lk7jAmjj8bDIroCl9cY=; b=iKDKEABbhNUa0T1Pv7XQXNOm5HZy9Pwyhj5F3vHzHGTzl75hhZL8Df/7H1qyg3jaeB 6LxKIXxa4+CKk4uVIObaNimrGISoiG8KAWOMmmoWROirht+FHkRbpmOs4mGn1GV4h5t2 4v6HW0dCzJfL6PFe1amo1oul7Z9q+s++KyaEmuoiXBzbZEmSKk6mHlLzXqDDEj65p2Ae sZIshdo5hj+B6kV30U1e0JO2MYFQrdda0jiuZvnAuX45jA5GTBYu12K7t3CbxCh8w7pR UzxyCqRtrwo4EIJJP2Lg/zU9sc3PpHWBmTEQwlxajt4KZ5uhP3Bt0Ypxme+C4HEJmE7+ yf5Q== 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=fQt6xCmMqTbZa/RTqpTUck38Lk7jAmjj8bDIroCl9cY=; b=UXm3XU5iZVLueJDzjTFU/eWvQYGxMbkk5nujOyiwPVCOw1Hm9qETsI92HZyz0TbIPs sLlI+VN55htR7ykOzJyWvmqy0jgtUE2FWUSDb/bbjiBm3uv1NeLeCQhy5cIoigDBEP7o un3sVyIc3UKCuyimC7pYTQqNvZm9Cw/M+r3mmYj9UjIg03bndhKBPKy3NVVCp4srYSPy qDiRAwlCbo/Qs4AyZAa5WrORU61ZimR4ZJ0ouwIvrQ9g+O09xp5Eic0KUqsB2bv1lCOF Rv1MlvpswrmlMAbY0IPQU17IN2Nud2hG4oPTCbFR5NUKaqI/doH7XF1GiYUYqXeVhCEy nbGQ== X-Gm-Message-State: AOAM5332NUw2FAMt43c2H1Nt1WwL2jgWb1/JbFUavqHXmXR1N3tBrbtR G9CRYxAzilRpBLNdasI5yiU= X-Google-Smtp-Source: ABdhPJwH6K3S4OE4JZag5tWk0lBSLFj34jgsxu40rASVwxlzsESceA1Rbwo6zW8Vb+GfbzbbZn9DQQ== X-Received: by 2002:a19:ee13:: with SMTP id g19mr3168533lfb.657.1616520771923; Tue, 23 Mar 2021 10:32:51 -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 f23sm1914441lfc.283.2021.03.23.10.32.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Mar 2021 10:32:51 -0700 (PDT) Subject: Re: [PATCH v5 15/21] drm/tegra: Add new UAPI to header To: Thierry Reding Cc: Mikko Perttunen , 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> <0cc2ec5c-f8aa-ed45-92b6-32f9eadbdc5a@gmail.com> From: Dmitry Osipenko Message-ID: Date: Tue, 23 Mar 2021 20:32:50 +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 19:44, Thierry Reding пишет: > On Tue, Mar 23, 2021 at 05:00:30PM +0300, Dmitry Osipenko wrote: >> 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. > > I'm not sure I understand what you're saying. Obviously the underlying > implementation of this might have to differ depending on SoC generation. > But it sounds like you're suggesting having different UAPIs depending on > SoC generation. I suggested that this IOCTL shouldn't be mandatory for older SoCs, which we should to have anyways for preserving the older UAPI. Yes, this makes UAPI different and I want to see how it will look like in the next version since the current variant was sub-optimal. 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 7B4B0C433DB for ; Tue, 23 Mar 2021 17:32:56 +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 3DB80619C1 for ; Tue, 23 Mar 2021 17:32:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3DB80619C1 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 9DCAB6E90D; Tue, 23 Mar 2021 17:32:55 +0000 (UTC) Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by gabe.freedesktop.org (Postfix) with ESMTPS id F10826E90D for ; Tue, 23 Mar 2021 17:32:53 +0000 (UTC) Received: by mail-lf1-x136.google.com with SMTP id o10so27852209lfb.9 for ; Tue, 23 Mar 2021 10:32:53 -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=fQt6xCmMqTbZa/RTqpTUck38Lk7jAmjj8bDIroCl9cY=; b=iKDKEABbhNUa0T1Pv7XQXNOm5HZy9Pwyhj5F3vHzHGTzl75hhZL8Df/7H1qyg3jaeB 6LxKIXxa4+CKk4uVIObaNimrGISoiG8KAWOMmmoWROirht+FHkRbpmOs4mGn1GV4h5t2 4v6HW0dCzJfL6PFe1amo1oul7Z9q+s++KyaEmuoiXBzbZEmSKk6mHlLzXqDDEj65p2Ae sZIshdo5hj+B6kV30U1e0JO2MYFQrdda0jiuZvnAuX45jA5GTBYu12K7t3CbxCh8w7pR UzxyCqRtrwo4EIJJP2Lg/zU9sc3PpHWBmTEQwlxajt4KZ5uhP3Bt0Ypxme+C4HEJmE7+ yf5Q== 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=fQt6xCmMqTbZa/RTqpTUck38Lk7jAmjj8bDIroCl9cY=; b=ROD3zwgZWrHVUcRXMlrfgu40TWmF6RgBuOsnEINhWnflFgfF7jkHv9vOFHAvW1KFjp rgMeGPGXEoCAOUN/ZEx9xs9HEEr/2IKvofSefbl6rq+/YaUWdpjIvIKNd/ygcJd/vo9l +L4FFHlOCA/CIPuf7/QP4MGUYytRnsGRuz6CgIvZc+fS2xzNWI671YDihFqmkt4SYL7w bMfjqOkp87krlcpn0FfMpitPvEPM43gqdbJQ2EVfL/UJg3WzLP6agOZBec5P80kh8wh4 Xi0PFGizOzDIH3tVvTl+2EPSxV8S1s83huabkSyn3vZIqHhFPKyOJy5CTiACEVcC1LqW x3kg== X-Gm-Message-State: AOAM532IoOmtN+gnEF5qucC87w8gaGCZY9T5ZR8jfIZMqrpsyJ91M7A6 OZ9LTOY98y25e3LbFikw7n5pIQX8pGU= X-Google-Smtp-Source: ABdhPJwH6K3S4OE4JZag5tWk0lBSLFj34jgsxu40rASVwxlzsESceA1Rbwo6zW8Vb+GfbzbbZn9DQQ== X-Received: by 2002:a19:ee13:: with SMTP id g19mr3168533lfb.657.1616520771923; Tue, 23 Mar 2021 10:32:51 -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 f23sm1914441lfc.283.2021.03.23.10.32.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 Mar 2021 10:32:51 -0700 (PDT) Subject: Re: [PATCH v5 15/21] drm/tegra: Add new UAPI to header To: Thierry Reding References: <20210111130019.3515669-1-mperttunen@nvidia.com> <20210111130019.3515669-16-mperttunen@nvidia.com> <0cc2ec5c-f8aa-ed45-92b6-32f9eadbdc5a@gmail.com> From: Dmitry Osipenko Message-ID: Date: Tue, 23 Mar 2021 20:32:50 +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: Mikko Perttunen , 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" MjMuMDMuMjAyMSAxOTo0NCwgVGhpZXJyeSBSZWRpbmcg0L/QuNGI0LXRgjoKPiBPbiBUdWUsIE1h ciAyMywgMjAyMSBhdCAwNTowMDozMFBNICswMzAwLCBEbWl0cnkgT3NpcGVua28gd3JvdGU6Cj4+ IDIzLjAzLjIwMjEgMTU6MzAsIFRoaWVycnkgUmVkaW5nINC/0LjRiNC10YI6Cj4+PiBPbiBUaHUs IEphbiAxNCwgMjAyMSBhdCAxMjozNDoyMlBNICswMjAwLCBNaWtrbyBQZXJ0dHVuZW4gd3JvdGU6 Cj4+Pj4gT24gMS8xNC8yMSAxMDozNiBBTSwgRG1pdHJ5IE9zaXBlbmtvIHdyb3RlOgo+Pj4+PiAx My4wMS4yMDIxIDIxOjU2LCBNaWtrbyBQZXJ0dHVuZW4g0L/QuNGI0LXRgjoKPj4+Pj4+IE9uIDEv MTMvMjEgODoxNCBQTSwgRG1pdHJ5IE9zaXBlbmtvIHdyb3RlOgo+Pj4+Pj4+IDExLjAxLjIwMjEg MTY6MDAsIE1pa2tvIFBlcnR0dW5lbiDQv9C40YjQtdGCOgo+Pj4+Pj4+PiArc3RydWN0IGRybV90 ZWdyYV9zdWJtaXRfYnVmIHsKPj4+Pj4+Pj4gK8KgwqDCoCAvKioKPj4+Pj4+Pj4gK8KgwqDCoMKg ICogQG1hcHBpbmdfaWQ6IFtpbl0KPj4+Pj4+Pj4gK8KgwqDCoMKgICoKPj4+Pj4+Pj4gK8KgwqDC oMKgICogSWRlbnRpZmllciBvZiB0aGUgbWFwcGluZyB0byB1c2UgaW4gdGhlIHN1Ym1pc3Npb24u Cj4+Pj4+Pj4+ICvCoMKgwqDCoCAqLwo+Pj4+Pj4+PiArwqDCoMKgIF9fdTMyIG1hcHBpbmdfaWQ7 Cj4+Pj4+Pj4KPj4+Pj4+PiBJJ20gbm93IGluIHByb2Nlc3Mgb2YgdHJ5aW5nIG91dCB0aGUgVUFQ SSB1c2luZyBncmF0ZSBkcml2ZXJzIGFuZCB0aGlzCj4+Pj4+Pj4gYmVjb21lcyB0aGUgZmlyc3Qg b2JzdGFjbGUuCj4+Pj4+Pj4KPj4+Pj4+PiBMb29rcyBsaWtlIHRoaXMgaXMgbm90IGdvaW5nIHRv IHdvcmsgd2VsbCBmb3Igb2xkZXIgVGVncmEgU29DcywgaW4KPj4+Pj4+PiBwYXJ0aWN1bGFyIGZv ciBUMjAsIHdoaWNoIGhhcyBhIHNtYWxsIEdBUlQuCj4+Pj4+Pj4KPj4+Pj4+PiBHaXZlbiB0aGF0 IHRoZSB1c2VmdWxuZXNzIG9mIHRoZSBwYXJ0aWFsIG1hcHBpbmcgZmVhdHVyZSBpcyB2ZXJ5Cj4+ Pj4+Pj4gcXVlc3Rpb25hYmxlIHVudGlsIGl0IHdpbGwgYmUgcHJvdmVuIHdpdGggYSByZWFsIHVz ZXJzcGFjZSwgd2Ugc2hvdWxkCj4+Pj4+Pj4gc3RhcnQgd2l0aCBhIGR5bmFtaWMgbWFwcGluZ3Mg dGhhdCBhcmUgZG9uZSBhdCBhIHRpbWUgb2Ygam9iIHN1Ym1pc3Npb24uCj4+Pj4+Pj4KPj4+Pj4+ PiBEUk0gYWxyZWFkeSBzaG91bGQgaGF2ZSBldmVyeXRoaW5nIG5lY2Vzc2FyeSBmb3IgY3JlYXRp bmcgYW5kIG1hbmFnaW5nCj4+Pj4+Pj4gY2FjaGVzIG9mIG1hcHBpbmdzLCBncmF0ZSBrZXJuZWwg ZHJpdmVyIGhhcyBiZWVuIHVzaW5nIGRybV9tbV9zY2FuIGZvciBhCj4+Pj4+Pj4gbG9uZyB0aW1l IG5vdyBmb3IgdGhhdC4KPj4+Pj4+Pgo+Pj4+Pj4+IEl0IHNob3VsZCBiZSBmaW5lIHRvIHN1cHBv cnQgdGhlIHN0YXRpYyBtYXBwaW5nIGZlYXR1cmUsIGJ1dCBpdCBzaG91bGQKPj4+Pj4+PiBiZSBk b25lIHNlcGFyYXRlbHkgd2l0aCB0aGUgZHJtX21tIGludGVncmF0aW9uLCBJTU8uCj4+Pj4+Pj4K Pj4+Pj4+PiBXaGF0IGRvIHRoaW5rPwo+Pj4+Pj4+Cj4+Pj4+Pgo+Pj4+Pj4gQ2FuIHlvdSBlbGFi b3JhdGUgb24gdGhlIHJlcXVpcmVtZW50cyB0byBiZSBhYmxlIHRvIHVzZSBHQVJUPyBBcmUgdGhl cmUKPj4+Pj4+IGFueSBvdGhlciByZWFzb25zIHRoaXMgd291bGQgbm90IHdvcmsgb24gb2xkZXIg Y2hpcHM/Cj4+Pj4+Cj4+Pj4+IFdlIGhhdmUgYWxsIERSTSBkZXZpY2VzIGluIGEgc2luZ2xlIGFk ZHJlc3Mgc3BhY2Ugb24gVDMwKywgaGVuY2UgaGF2aW5nCj4+Pj4+IGR1cGxpY2F0ZWQgbWFwcGlu Z3MgZm9yIGVhY2ggZGV2aWNlIHNob3VsZCBiZSBhIGJpdCB3YXN0ZWZ1bC4KPj4+Pgo+Pj4+IEkg Z3Vlc3MgdGhpcyBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gY2hhbmdlIHRvIG9ubHkga2VlcCBv bmUgbWFwcGluZyBwZXIKPj4+PiBHRU0gb2JqZWN0Lgo+Pj4KPj4+IFRoZSBpbXBvcnRhbnQgcG9p bnQgaGVyZSBpcyB0aGUgc2VtYW50aWNzOiB0aGlzIElPQ1RMIGVzdGFibGlzaGVzIGEKPj4+IG1h cHBpbmcgZm9yIGEgZ2l2ZW4gR0VNIG9iamVjdCBvbiBhIGdpdmVuIGNoYW5uZWwuIElmIHRoZSB1 bmRlcmx5aW5nCj4+PiBpbXBsZW1lbnRhdGlvbiBpcyBzdWNoIHRoYXQgdGhlIG1hcHBpbmcgZG9l c24ndCBmaXQgaW50byB0aGUgR0FSVCwgdGhlbgo+Pj4gdGhhdCdzIGFuIGltcGxlbWVudGF0aW9u IGRldGFpbCB0aGF0IHRoZSBkcml2ZXIgbmVlZHMgdG8gdGFrZSBjYXJlIG9mLgo+Pj4gU2ltaWxh cmx5LCBpZiBtdWx0aXBsZSBkZXZpY2VzIHNoYXJlIGEgc2luZ2xlIGFkZHJlc3Mgc3BhY2UsIHRo YXQncwo+Pj4gc29tZXRoaW5nIHRoZSBkcml2ZXIgYWxyZWFkeSBrbm93cyBhbmQgY2FuIHRha2Ug YWR2YW50YWdlIG9mIGJ5IHNpbXBseQo+Pj4gcmV1c2luZyBhbiBleGlzdGluZyBtYXBwaW5nIGlm IG9uZSBhbHJlYWR5IGV4aXN0cy4gSW4gYm90aCBjYXNlcyB0aGUKPj4+IHNlbWFudGljcyB3b3Vs ZCBiZSBjb3JyZWN0bHkgaW1wbGVtZW50ZWQgYW5kIHRoYXQncyByZWFsbHkgYWxsIHRoYXQKPj4+ IG1hdHRlcnMuCj4+Pgo+Pj4gT3ZlcmFsbCB0aGlzIGludGVyZmFjZSBzZWVtcyBzb3VuZCBmcm9t IGEgaGlnaC1sZXZlbCBwb2ludCBvZiB2aWV3IGFuZAo+Pj4gYWxsb3dzIHRoZXNlIG1hcHBpbmdz IHRvIGJlIHByb3Blcmx5IGNyZWF0ZWQgZXZlbiBmb3IgdGhlIGNhc2VzIHdlIGhhdmUKPj4+IHdo ZXJlIGVhY2ggY2hhbm5lbCBtYXkgaGF2ZSBhIHNlcGFyYXRlIGFkZHJlc3Mgc3BhY2UuIEl0IG1h eSBub3QgYmUgdGhlCj4+PiBvcHRpbWFsIGludGVyZmFjZSBmb3IgYWxsIHVzZS1jYXNlcyBvciBh bnkgb25lIGluZGl2aWR1YWwgY2FzZSwgYnV0IHRoZQo+Pj4gdmVyeSBuYXR1cmUgb2YgdGhlc2Ug aW50ZXJmYWNlcyBpcyB0byBhYnN0cmFjdCBhd2F5IGNlcnRhaW4gZGlmZmVyZW5jZXMKPj4+IGlu IG9yZGVyIHRvIHByb3ZpZGUgYSB1bmlmaWVkIGludGVyZmFjZSB0byBhIGNvbW1vbiBwcm9ncmFt bWluZyBtb2RlbC4KPj4+IFNvIHRoZXJlIHdpbGwgYWx3YXlzIGJlIGNlcnRhaW4gdHJhZGVvZmZz Lgo+Pgo+PiBGb3Igbm93IHRoaXMgSU9DVEwgaXNuJ3QgdXNlZnVsIGZyb20gYSB1c2Vyc3BhY2Ug cGVyc3BlY3RpdmUgb2Ygb2xkZXIKPj4gU29DcyBhbmQgSSdsbCBuZWVkIHRvIGFkZCBhIGxvdCBv ZiBjb2RlIHRoYXQgd29uJ3QgZG8gYW55dGhpbmcgdXNlZnVsCj4+IGp1c3QgdG8gY29uZm9ybSB0 byB0aGUgc3BlY2lmaWMgbmVlZHMgb2YgdGhlIG5ld2VyIFNvQ3MuIFRyeWluZyB0byB1bmlmeQo+ PiBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgQVBJIGRvZXNuJ3Qgc291bmQgbGlrZSBhIGdvb2Qg aWRlYSBhdCB0aGlzCj4+IHBvaW50IGFuZCBJIGFscmVhZHkgc3VnZ2VzdGVkIHRvIE1pa2tvIHRv IHRyeSBvdXQgdmFyaWFudCB3aXRoIGEKPj4gc2VwYXJhdGVkIHBlci1Tb0MgY29kZSBwYXRocyBp biB0aGUgbmV4dCB2ZXJzaW9uLCB0aGVuIHRoZSBtYXBwaW5ncwo+PiBjb3VsZCBiZSBoYW5kbGVk IHNlcGFyYXRlbHkgYnkgdGhlIFQxODYrIHBhdGhzLgo+IAo+IEknbSBub3Qgc3VyZSBJIHVuZGVy c3RhbmQgd2hhdCB5b3UncmUgc2F5aW5nLiBPYnZpb3VzbHkgdGhlIHVuZGVybHlpbmcKPiBpbXBs ZW1lbnRhdGlvbiBvZiB0aGlzIG1pZ2h0IGhhdmUgdG8gZGlmZmVyIGRlcGVuZGluZyBvbiBTb0Mg Z2VuZXJhdGlvbi4KPiBCdXQgaXQgc291bmRzIGxpa2UgeW91J3JlIHN1Z2dlc3RpbmcgaGF2aW5n IGRpZmZlcmVudCBVQVBJcyBkZXBlbmRpbmcgb24KPiBTb0MgZ2VuZXJhdGlvbi4KCkkgc3VnZ2Vz dGVkIHRoYXQgdGhpcyBJT0NUTCBzaG91bGRuJ3QgYmUgbWFuZGF0b3J5IGZvciBvbGRlciBTb0Nz LCB3aGljaAp3ZSBzaG91bGQgdG8gaGF2ZSBhbnl3YXlzIGZvciBwcmVzZXJ2aW5nIHRoZSBvbGRl ciBVQVBJLiBZZXMsIHRoaXMgbWFrZXMKVUFQSSBkaWZmZXJlbnQgYW5kIEkgd2FudCB0byBzZWUg aG93IGl0IHdpbGwgbG9vayBsaWtlIGluIHRoZSBuZXh0CnZlcnNpb24gc2luY2UgdGhlIGN1cnJl bnQgdmFyaWFudCB3YXMgc3ViLW9wdGltYWwuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=