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=-16.4 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=unavailable 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 EAFBCC43461 for ; Tue, 11 May 2021 08:31:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D0D6F6128C for ; Tue, 11 May 2021 08:31:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230442AbhEKIci (ORCPT ); Tue, 11 May 2021 04:32:38 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:22687 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230333AbhEKIcf (ORCPT ); Tue, 11 May 2021 04:32:35 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1620721889; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L03rSJtnAgFGyBancVHdJ/m6c98PSwpvaqqILqNedlU=; b=RlaU0GA0oUn0fmp5YNWmyLXWQ35SHuQwHReCOXA8ggQnQ3qnk26WdGTyhEHXKoXqzu0r/h 9e2nWbRvk1Ht/3Q6aXQn+jwvCXHgWiX4H3M8BbosIUEbCkbtJWCEov8Ye+4nvCnXoiF0UJ HLKzSbwSK6ndiW3xP4fpLbpeuBW2GEY= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-205-B38zmp3DNUOMrnFx2_L-eQ-1; Tue, 11 May 2021 04:31:27 -0400 X-MC-Unique: B38zmp3DNUOMrnFx2_L-eQ-1 Received: by mail-lf1-f72.google.com with SMTP id l27-20020a056512333bb02901d2b8c62620so4037234lfe.8 for ; Tue, 11 May 2021 01:31:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=L03rSJtnAgFGyBancVHdJ/m6c98PSwpvaqqILqNedlU=; b=Wc9ZiJgSetzGpc754MxFuIFpQ4UiUB73lpaaROhQrYnk2v7djUK1lIfMW1TdIcSFEd 7vk0Enc/QXgdNPqj0dHp95kYmKkgfsjNDRNF6oKYgUPraCopv67LzvijPJX3sDz2fg1k OuGxcI8p4PS6ZLI3dGAXw2rtczAxSGNwS15FEt4U3csmkFz2xIc/4vMghtKHt+lRsrbV hZmwtbzTx3/rLaP1ho+JKEM3Ma+JCDM5AUZroFekDj8hW1XeMyKvIJRihf9E3XkD9Yqm Ko8FzzKMe4UDyu2wszgXEZdEWxe4vGjV0Dkh1hf00eTIjGdTn/+vEzk7SeDfeQAbrR5J J6AQ== X-Gm-Message-State: AOAM530kB8YPNfL1zS4TX55wtV8/z7ufyyEIjB7ajborU8mNrOZD8RCj z9yjxBkGyI34UDQWSn+8hSwhSjqrrNyJGpU4s/FE08yysUGKxmSph/uLDx1nLyZAkd/R9MB24wH F0Cd7sPWwvmEzXbfcEHud2njudTCTlzPUdeJTig7E X-Received: by 2002:a05:651c:3cf:: with SMTP id f15mr6277313ljp.404.1620721885566; Tue, 11 May 2021 01:31:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzHLZ1YD9/2pHaEcCCi78y5495opccD/EC/LlPQBQi+2b5oR/fD3/SoV4oxtDLQhEshzmLVnKu039vKj+S2Isw= X-Received: by 2002:a05:651c:3cf:: with SMTP id f15mr6277299ljp.404.1620721885330; Tue, 11 May 2021 01:31:25 -0700 (PDT) MIME-Version: 1.0 References: <20210511044253.469034-1-yuri.benditovich@daynix.com> <20210511044253.469034-3-yuri.benditovich@daynix.com> <0e31ea70-f12a-070e-c72b-6e1d337a89bc@redhat.com> In-Reply-To: From: Jason Wang Date: Tue, 11 May 2021 16:31:10 +0800 Message-ID: Subject: Re: [PATCH 2/4] virtio-net: add support of UDP segmentation (USO) on the host To: Yuri Benditovich Cc: "David S. Miller" , Jakub Kicinski , "Michael S . Tsirkin" , Network Development , LKML , virtualization , Yan Vugenfirer Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 11, 2021 at 4:24 PM Yuri Benditovich wrote: > > On Tue, May 11, 2021 at 9:47 AM Jason Wang wrote: > > > > > > =E5=9C=A8 2021/5/11 =E4=B8=8B=E5=8D=8812:42, Yuri Benditovich =E5=86=99= =E9=81=93: > > > Large UDP packet provided by the guest with GSO type set to > > > VIRTIO_NET_HDR_GSO_UDP_L4 will be divided to several UDP > > > packets according to the gso_size field. > > > > > > Signed-off-by: Yuri Benditovich > > > --- > > > include/linux/virtio_net.h | 5 +++++ > > > 1 file changed, 5 insertions(+) > > > > > > diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h > > > index b465f8f3e554..4ecf9a1ca912 100644 > > > --- a/include/linux/virtio_net.h > > > +++ b/include/linux/virtio_net.h > > > @@ -51,6 +51,11 @@ static inline int virtio_net_hdr_to_skb(struct sk_= buff *skb, > > > ip_proto =3D IPPROTO_UDP; > > > thlen =3D sizeof(struct udphdr); > > > break; > > > + case VIRTIO_NET_HDR_GSO_UDP_L4: > > > + gso_type =3D SKB_GSO_UDP_L4; > > > + ip_proto =3D IPPROTO_UDP; > > > + thlen =3D sizeof(struct udphdr); > > > + break; > > > > > > This is only for rx, how about tx? > > In terms of the guest this is only for TX. So virtio_net_hdr_to_skb() can be called by all the followings: 1) receive_buf() which is guest RX. 2) tun_get_user() which is guest TX 3) tap_get_user() which is guest TX 4) {t}packet_send() which is userspace TX So it touches for both RX and TX. > Guest RX is a different thing, this is actually coalescing of > segmented UDP packets into a large one. Another case, the packet could be sent from another VM (like the UFO case). Supporting that for both TX and RX and greatly improve the performance of VM2VM traffic. Thanks > This feature is not defined in the virtio spec yet and the support of > it first of all depends on the OS. > For example: TCP LSO (guest TX) is supported almost by all the > versions of Windows. > TCP RSC (coalescing of TCP segments) is supported by Win 8 / Server 2012 = and up. > UDP segmentation is supported by Windows kernels 1903+ > UDP coalescing is defined by Windows kernels 2004+ and not supported > by the driver yet. > > > > > Thanks > > > > > > > > > default: > > > return -EINVAL; > > > } > > > 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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 61F64C43460 for ; Tue, 11 May 2021 08:31:39 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 D5335611C9 for ; Tue, 11 May 2021 08:31:38 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D5335611C9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 68DC24065C; Tue, 11 May 2021 08:31:38 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OcF8hh-CHZyQ; Tue, 11 May 2021 08:31:37 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp4.osuosl.org (Postfix) with ESMTP id BBAA240E73; Tue, 11 May 2021 08:31:36 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9D428C000D; Tue, 11 May 2021 08:31:36 +0000 (UTC) Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 9DD92C0001 for ; Tue, 11 May 2021 08:31:33 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 8BE3684467 for ; Tue, 11 May 2021 08:31:33 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (1024-bit key) header.d=redhat.com Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ij6g8r50jfeE for ; Tue, 11 May 2021 08:31:32 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by smtp1.osuosl.org (Postfix) with ESMTPS id 9711084418 for ; Tue, 11 May 2021 08:31:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1620721890; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L03rSJtnAgFGyBancVHdJ/m6c98PSwpvaqqILqNedlU=; b=AOT/s5sGx44ID7+HBigkPDpbmdqz7uBmUh0SJr1B+OUube/p9QUkJD+gfnwG38TZgK+XEr OHJ+5FGvlUn38pBOVymjs18kN1l9VrjkSsZBoukXhSn+oO2h05wS2JAOrc34x3+CeUWrxJ m06pkTKAV0L+4yqrKnDV2MW4kWgceVE= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-145-z6lB5VfROZSPtaumL-s2ow-1; Tue, 11 May 2021 04:31:27 -0400 X-MC-Unique: z6lB5VfROZSPtaumL-s2ow-1 Received: by mail-lf1-f72.google.com with SMTP id p20-20020a0565123134b02901d2ab33b9bcso4026625lfd.5 for ; Tue, 11 May 2021 01:31:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=L03rSJtnAgFGyBancVHdJ/m6c98PSwpvaqqILqNedlU=; b=eAXcztth62rQy2yVrANVHdSDaSKL//gdkFUIF20iyRKut1maJVltaqmnSxPt5vpkWV MyEzcwKtudHmoSqtpBTYg7+TJ3dmics6UUNUAkBr6KpsqXcVQI0/wsX30SpJVw8tz/4j N/KmQWH06+fKeBjNqmhsouptlIgPT0nkc70KqW9FgJVs37R0PuhTZYWYJmGfp9RhiAAw lj1MyJg0uVmZut9msy0Ytp9taklt/MJZCqCBKXyCzHG7Oph9jTKMFNiYnIkGviUG5BQz wNWRZFYyot5zk6FomRtIqVVW4JCaA6Wrls6AxSMUEG47pWfqHJ0pD2BYhMyuos0Nv3Di qtjg== X-Gm-Message-State: AOAM531df07vBPKnzTF7ts/csTjs6mjDQrQDEbbHr57BG1YOvjFBWiGv 221dh666WI7fNAxGB62YgAlGNiHEJyUpL51buXJ7UJflUMqUM4crzpqwBpvKncHLDMroUtIdch4 qCHW80nNcXT5UKKJQPRkNCf5QF/8BNn9VsZfzD9nLVkxCv9ZKqMnIRzXqFA== X-Received: by 2002:a05:651c:3cf:: with SMTP id f15mr6277317ljp.404.1620721885568; Tue, 11 May 2021 01:31:25 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzHLZ1YD9/2pHaEcCCi78y5495opccD/EC/LlPQBQi+2b5oR/fD3/SoV4oxtDLQhEshzmLVnKu039vKj+S2Isw= X-Received: by 2002:a05:651c:3cf:: with SMTP id f15mr6277299ljp.404.1620721885330; Tue, 11 May 2021 01:31:25 -0700 (PDT) MIME-Version: 1.0 References: <20210511044253.469034-1-yuri.benditovich@daynix.com> <20210511044253.469034-3-yuri.benditovich@daynix.com> <0e31ea70-f12a-070e-c72b-6e1d337a89bc@redhat.com> In-Reply-To: From: Jason Wang Date: Tue, 11 May 2021 16:31:10 +0800 Message-ID: Subject: Re: [PATCH 2/4] virtio-net: add support of UDP segmentation (USO) on the host To: Yuri Benditovich Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=jasowang@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: "Michael S . Tsirkin" , Network Development , LKML , virtualization , Yan Vugenfirer , Jakub Kicinski , "David S. Miller" X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" T24gVHVlLCBNYXkgMTEsIDIwMjEgYXQgNDoyNCBQTSBZdXJpIEJlbmRpdG92aWNoCjx5dXJpLmJl bmRpdG92aWNoQGRheW5peC5jb20+IHdyb3RlOgo+Cj4gT24gVHVlLCBNYXkgMTEsIDIwMjEgYXQg OTo0NyBBTSBKYXNvbiBXYW5nIDxqYXNvd2FuZ0ByZWRoYXQuY29tPiB3cm90ZToKPiA+Cj4gPgo+ ID4g5ZyoIDIwMjEvNS8xMSDkuIvljYgxMjo0MiwgWXVyaSBCZW5kaXRvdmljaCDlhpnpgZM6Cj4g PiA+IExhcmdlIFVEUCBwYWNrZXQgcHJvdmlkZWQgYnkgdGhlIGd1ZXN0IHdpdGggR1NPIHR5cGUg c2V0IHRvCj4gPiA+IFZJUlRJT19ORVRfSERSX0dTT19VRFBfTDQgd2lsbCBiZSBkaXZpZGVkIHRv IHNldmVyYWwgVURQCj4gPiA+IHBhY2tldHMgYWNjb3JkaW5nIHRvIHRoZSBnc29fc2l6ZSBmaWVs ZC4KPiA+ID4KPiA+ID4gU2lnbmVkLW9mZi1ieTogWXVyaSBCZW5kaXRvdmljaCA8eXVyaS5iZW5k aXRvdmljaEBkYXluaXguY29tPgo+ID4gPiAtLS0KPiA+ID4gICBpbmNsdWRlL2xpbnV4L3ZpcnRp b19uZXQuaCB8IDUgKysrKysKPiA+ID4gICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCsp Cj4gPiA+Cj4gPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaCBiL2lu Y2x1ZGUvbGludXgvdmlydGlvX25ldC5oCj4gPiA+IGluZGV4IGI0NjVmOGYzZTU1NC4uNGVjZjlh MWNhOTEyIDEwMDY0NAo+ID4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAo+ID4g PiArKysgYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb19uZXQuaAo+ID4gPiBAQCAtNTEsNiArNTEsMTEg QEAgc3RhdGljIGlubGluZSBpbnQgdmlydGlvX25ldF9oZHJfdG9fc2tiKHN0cnVjdCBza19idWZm ICpza2IsCj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICBpcF9wcm90byA9IElQUFJPVE9fVURQ Owo+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgdGhsZW4gPSBzaXplb2Yoc3RydWN0IHVkcGhk cik7Cj4gPiA+ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ID4gKyAgICAgICAgICAg ICBjYXNlIFZJUlRJT19ORVRfSERSX0dTT19VRFBfTDQ6Cj4gPiA+ICsgICAgICAgICAgICAgICAg ICAgICBnc29fdHlwZSA9IFNLQl9HU09fVURQX0w0Owo+ID4gPiArICAgICAgICAgICAgICAgICAg ICAgaXBfcHJvdG8gPSBJUFBST1RPX1VEUDsKPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRo bGVuID0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwo+ID4gPiArICAgICAgICAgICAgICAgICAgICAg YnJlYWs7Cj4gPgo+ID4KPiA+IFRoaXMgaXMgb25seSBmb3IgcngsIGhvdyBhYm91dCB0eD8KPgo+ IEluIHRlcm1zIG9mIHRoZSBndWVzdCB0aGlzIGlzIG9ubHkgZm9yIFRYLgoKU28gdmlydGlvX25l dF9oZHJfdG9fc2tiKCkgY2FuIGJlIGNhbGxlZCBieSBhbGwgdGhlIGZvbGxvd2luZ3M6CgoxKSBy ZWNlaXZlX2J1ZigpIHdoaWNoIGlzIGd1ZXN0IFJYLgoyKSB0dW5fZ2V0X3VzZXIoKSB3aGljaCBp cyBndWVzdCBUWAozKSB0YXBfZ2V0X3VzZXIoKSB3aGljaCBpcyBndWVzdCBUWAo0KSB7dH1wYWNr ZXRfc2VuZCgpIHdoaWNoIGlzIHVzZXJzcGFjZSBUWAoKU28gaXQgdG91Y2hlcyBmb3IgYm90aCBS WCBhbmQgVFguCgo+IEd1ZXN0IFJYIGlzIGEgZGlmZmVyZW50IHRoaW5nLCB0aGlzIGlzIGFjdHVh bGx5IGNvYWxlc2Npbmcgb2YKPiBzZWdtZW50ZWQgVURQIHBhY2tldHMgaW50byBhIGxhcmdlIG9u ZS4KCkFub3RoZXIgY2FzZSwgdGhlIHBhY2tldCBjb3VsZCBiZSBzZW50IGZyb20gYW5vdGhlciBW TSAobGlrZSB0aGUgVUZPIGNhc2UpLgoKU3VwcG9ydGluZyB0aGF0IGZvciBib3RoIFRYIGFuZCBS WCBhbmQgZ3JlYXRseSBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZQpvZiBWTTJWTSB0cmFmZmljLgoK VGhhbmtzCgo+IFRoaXMgZmVhdHVyZSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgdmlydGlvIHNwZWMg eWV0IGFuZCB0aGUgc3VwcG9ydCBvZgo+IGl0IGZpcnN0IG9mIGFsbCBkZXBlbmRzIG9uIHRoZSBP Uy4KPiBGb3IgZXhhbXBsZTogVENQIExTTyAoZ3Vlc3QgVFgpIGlzIHN1cHBvcnRlZCBhbG1vc3Qg YnkgYWxsIHRoZQo+IHZlcnNpb25zIG9mIFdpbmRvd3MuCj4gVENQIFJTQyAoY29hbGVzY2luZyBv ZiBUQ1Agc2VnbWVudHMpIGlzIHN1cHBvcnRlZCBieSBXaW4gOCAvIFNlcnZlciAyMDEyIGFuZCB1 cC4KPiBVRFAgc2VnbWVudGF0aW9uIGlzIHN1cHBvcnRlZCBieSBXaW5kb3dzIGtlcm5lbHMgMTkw MysKPiBVRFAgY29hbGVzY2luZyBpcyBkZWZpbmVkIGJ5IFdpbmRvd3Mga2VybmVscyAyMDA0KyBh bmQgbm90IHN1cHBvcnRlZAo+IGJ5IHRoZSBkcml2ZXIgeWV0Lgo+Cj4gPgo+ID4gVGhhbmtzCj4g Pgo+ID4KPiA+Cj4gPiA+ICAgICAgICAgICAgICAgZGVmYXVsdDoKPiA+ID4gICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+ID4gPiAgICAgICAgICAgICAgIH0KPiA+Cj4KCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0 aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9y ZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0 dWFsaXphdGlvbg==