From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by passt.top (Postfix) with ESMTP id 019105A0306 for ; Fri, 17 May 2024 17:06:07 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1715958366; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mAECMjKhOyov8P8STuwA2sWzDtZWO8zYGf7uPTofInc=; b=WyMYUS5VOikrOJr2igy+7CdmFxoa+sAa+qOba1KW9jg31eAhv7XjLvECfU4T+wWzi8hSS9 7UgkoMDxvT9lLhGCTOisfPJdiub2DhpYBIqIkkjC+Xq18ldLDzaO5zhR6CcYMR53IsuR7q x6MTlXAkixDBg9vNX4fO6ZfUppEeCzc= Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-686-19CEWDrXPMS8S5la7cwaTw-1; Fri, 17 May 2024 11:06:05 -0400 X-MC-Unique: 19CEWDrXPMS8S5la7cwaTw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 4FE4F1C05146 for ; Fri, 17 May 2024 15:06:05 +0000 (UTC) Received: from fenrir.redhat.com (unknown [10.22.8.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE62840C6EB7; Fri, 17 May 2024 15:06:04 +0000 (UTC) From: Jon Maloy To: passt-dev@passt.top, sbrivio@redhat.com, lvivier@redhat.com, dgibson@redhat.com, jmaloy@redhat.com Subject: [PATCH v6 3/3] tcp: allow retransmit when peer receive window is zero Date: Fri, 17 May 2024 11:06:02 -0400 Message-ID: <20240517150602.1186203-4-jmaloy@redhat.com> In-Reply-To: <20240517150602.1186203-1-jmaloy@redhat.com> References: <20240517150602.1186203-1-jmaloy@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: ZH5P2D6DIH6KFG5F7O22QXGFBSXBGFO6 X-Message-ID-Hash: ZH5P2D6DIH6KFG5F7O22QXGFBSXBGFO6 X-MailFrom: jmaloy@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: QSBidWcgaW4ga2VybmVsIFRDUCBtYXkgbGVhZCB0byBhIGRlYWRsb2NrIHdoZXJlIGEgemVybyB3 aW5kb3cgaXMgc2VudA0KZnJvbSB0aGUgcGVlciwgd2hpbGUgaXQgaXMgdW5hYmxlIHRvIHNlbmQg b3V0IHdpbmRvdyB1cGRhdGVzIGV2ZW4gYWZ0ZXINCnJlYWRzIGhhdmUgZnJlZWQgdXAgZW5vdWdo IGJ1ZmZlciBzcGFjZSB0byBwZXJtaXQgYSBsYXJnZXIgd2luZG93Lg0KSW4gdGhpcyBzaXR1YXRp b24sIG5ldyB3aW5kb3cgYWR2ZXJ0aXNlbW50cyBmcm9tIHRoZSBwZWVyIGNhbiBvbmx5IGJlDQp0 cmlnZ2VyZWQgYnkgcGFja2V0cyBhcnJpdmluZyBmcm9tIHRoaXMgc2lkZS4NCg0KSG93ZXZlciwg c3VjaCBwYWNrZXRzIGFyZSBuZXZlciBzZW50LCBiZWNhdXNlIHRoZSB6ZXJvLXdpbmRvdyBjb25k aXRpb24NCmN1cnJlbnRseSBwcmV2ZW50cyB0aGlzIHNpZGUgZnJvbSBzZW5kaW5nIG91dCBhbnkg cGFja2V0cyB3aGF0c29ldmVyDQp0byB0aGUgcGVlci4NCg0KV2Ugbm90aWNlIHRoYXQgdGhlIGFi b3ZlIGJ1ZyBpcyB0cmlnZ2VyZWQgKm9ubHkqIGFmdGVyIHRoZSBwZWVyIGhhcw0KZHJvcHBlZCBh biBhcnJpdmluZyBwYWNrZXQgYmVjYXVzZSBvZiBzZXZlcmUgbWVtb3J5IHNxdWVlemUsIGFuZCB0 aGF0IHdlDQpoZW5jZSBhbHdheXMgZW50ZXIgYSByZXRyYW5zbWlzc2lvbiBzaXR1YXRpb24gd2hl biB0aGlzIG9jY3Vycy4gVGhpcw0KYWxzbyBtZWFucyB0aGF0IGl0IGdvZXMgYWdhaW5zdCB0aGUg UkZDIDkyOTMgcmVjb21tZW5kYXRpb24gdGhhdCBhDQpwcmV2aW91c2x5IGFkdmVydGlzZWQgd2lu ZG93IG5ldmVyIHNob3VsZCBzaHJpbmsuDQoNClJGQyA5MjkzIGdpdmVzIHRoZSBzb2x1dGlvbiB0 byB0aGlzIHNpdHVhdGlvbi4gSW4gY2hhcHRlciAzLjYuMSB3ZSBmaW5kDQp0aGUgZm9sbG93aW5n IHN0YXRlbWVudDoNCiJBIFRDUCByZWNlaXZlciBTSE9VTEQgTk9UIHNocmluayB0aGUgd2luZG93 LCBpLmUuLCBtb3ZlIHRoZSByaWdodA0Kd2luZG93IGVkZ2UgdG8gdGhlIGxlZnQgKFNITEQtMTQp LiBIb3dldmVyLCBhIHNlbmRpbmcgVENQIHBlZXIgTVVTVA0KYmUgcm9idXN0IGFnYWluc3Qgd2lu ZG93IHNocmlua2luZywgd2hpY2ggbWF5IGNhdXNlIHRoZQ0KInVzYWJsZSB3aW5kb3ciIChzZWUg U2VjdGlvbiAzLjguNi4yLjEpIHRvIGJlY29tZSBuZWdhdGl2ZSAoTVVTVC0zNCkuDQoNCklmIHRo aXMgaGFwcGVucywgdGhlIHNlbmRlciBTSE9VTEQgTk9UIHNlbmQgbmV3IGRhdGEgKFNITEQtMTUp LCBidXQNClNIT1VMRCByZXRyYW5zbWl0IG5vcm1hbGx5IHRoZSBvbGQgdW5hY2tub3dsZWRnZWQg ZGF0YSBiZXR3ZWVuIFNORC5VTkENCmFuZCBTTkQuVU5BK1NORC5XTkQgKFNITEQtMTYpLiBUaGUg c2VuZGVyIE1BWSBhbHNvIHJldHJhbnNtaXQgb2xkIGRhdGENCmJleW9uZCBTTkQuVU5BK1NORC5X TkQgKE1BWS03KSINCg0KV2UgbmV2ZXIgc2VlIHRoZSB3aW5kb3cgYmVjb21lIG5lZ2F0aXZlLCBi dXQgd2UgaW50ZXJwcmV0IHRoaXMgYXMgYQ0KcmVjb21tZW5kYXRpb24gdG8gdXNlIHRoZSBwcmV2 aW91c2x5IGF2YWlsYWJsZSB3aW5kb3cgZHVyaW5nDQpyZXRyYW5zbWlzc2lvbiBldmVuIHdoZW4g dGhlIGN1cnJlbnRseSBhZHZlcnRpc2VkIHdpbmRvdyBpcyB6ZXJvLg0KDQpXZSB1c2UgdGhlIGFi b3ZlIG1lY2hhbmlzbSBvbmx5IGZvciB0aW1lci1pbmR1Y2VkIHJldHJhbnNtaXRzLCB3aGlsZQ0K dGhlIGZhc3QtcmV0cmFuc21pdCBtZWNoYW5pc20gd29uJ3QgdHJpZ2dlciBvbiB0aGlzIGNvbmRp dGlvbi4NCg0KSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgYWx0aG91Z2ggdGhpcyBzb2x2ZXMgdGhl IHByb2JsZW0gd2UgaGF2ZSBhdA0KaGFuZCwgaXQgaXMgbm90IGEgZ2VudWluZSBzb2x1dGlvbiB0 byB0aGUga2VybmVsIGJ1Zy4gVGhlcmUgbWF5IHdlbGwNCmJlIFRDUCBzdGFja3MgYXJvdW5kIGlu IG90aGVyIE9TLWVzIHdoaWNoIGRvbid0IGRvIHRoaXMsIG5vciBoYXZlDQprZWVwLWFsaXZlIHBy b2JpbmcgYXMgYW4gYWx0ZXJuYXR2ZSB3YXkgdG8gc29sdmUgdGhlIHNpdHVhdGlvbi4NCg0KU2ln bmVkLW9mZi1ieTogSm9uIE1hbG95IDxqbWFsb3lAcmVkaGF0LmNvbT4NCg0KLS0tDQp2MjogLSBV c2luZyBwcmV2aW91c2x5IGFkdmVydGlzZWQgd2luZG93IGR1cmluZyByZXRyYW5zbWlzc2lvbiwg aW5zdGVhZA0KICAgICAgaGlnaGVzdCBzZW5kIHNlcXVlbmNlY2UgbnVtYmVyIGluIHRoZSBjeWNs ZS4NCnYzOiAtIFJlYmFzZWQgdG8gbmV3ZXN0IGNvZGUNCiAgICAtIENoYW5nZXMgYmFzZWQgb24g ZmVlZGJhY2sgZnJvbSBQQVNTVCB0ZWFtDQogICAgLSBTZW5kaW5nIG91dCBlbXB0eSBwcm9iZSBt ZXNzYWdlIGF0IHRpbWVyIGV4cGlyYXRpb24gd2hlbg0KICAgICAgd2UgYXJlIG5vdCBpbiByZXRy YW5zbWl0IHNpdHVhdGlvbi4NCnY0OiAtIFNvbWUgc21hbGwgY2hhbmdlcyBiYXNlZCBvbiBmZWVk YmFjayBmcm9tIFBBU1NUIHRlYW0uDQogICAgLSBSZXBsYWNlZCBmYXN0IHJldHJhbnNtaXQgd2l0 aCBhIG9uZS10aW1lICdmYXN0IHByb2JlJyB3aGVuDQogICAgICB3aW5kb3cgaXMgemVyby4NCnY1 OiAtIEdhdmUgdXAgb24gJ2Zhc3QgcHJvYmluZycgZm9yIG5vdy4gV2hlbiBJIGdvdCB0aGUgc2Vx dWVuY2UNCiAgICAgIG51bWJlcnMgcmlnaHQgaW4gdGhlIGZsYWcgbWVzc2FnZSAoYWZ0ZXIgaGF2 aW5nIGVtcHRpZWQgdGhlIHRhcA0KICAgICAgcXVldWUpLCBpdCB0dXJucyBvdXQgYW4gZW1wdHkg bWVzc2FnZSBkb2VzICpub3QqIGZvcmNlIGEgbmV3IHBlZXINCiAgICAgIHdpbmRvdyB1cGRhdGUg YXMgd2FzIG15IHByZXZpb3VzIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUuDQogICAgLSBBZGRl ZCBjcHBjaGVjayBzdXBwcmVzc2lvbiBsaW5lICh3aGljaCBJIHdhcyB1bmFibGUgdG8gdmVyaWZ5 KQ0KICAgICAgYXMgc3VnZ2VzdGVkIGJ5IFMuIEJyaXZpby4NCiAgICAtIFJlbW92ZWQgc2VuZGlu ZyBvZiBlbXB0eSBwcm9iZSB3aGVuIHdpbmRvdyBmcm9tIHRhcCBzaWRlIGlzIHplcm8uDQogICAg ICBJdCBsb29rcyBwb2ludGxlc3MgYXQgdGhlIG1vbWVudCwgYXQgbGVhc3QgZm9yIHNvbHZpbmcg dGhlIGFib3ZlDQogICAgICBkZXNjcmliZWQgc2l0dWF0aW9uLg0KdjY6IC0gRW5zdXJlIHRoYXQg YXJyaXZhbCBvZiBuZXcgZGF0YSBkb2VzbsK0dCBjYXVzZSB1cyB0byBpZ25vcmUgYQ0KICAgICAg emVyby13aW5kb3cgc2l0dWF0aW9uLg0KICAgIC0gUmVtb3ZlZCB0aGUgcG9pbnRsZXNzIHByb2Jp bmcgcmVmZXJyZWQgdG8gaW4gdjUgY29tbWVudC4NCi0tLQ0KIHRjcC5jICAgICAgfCAyNiArKysr KysrKysrKysrKysrKysrKy0tLS0tLQ0KIHRjcF9jb25uLmggfCAgMiArKw0KIDIgZmlsZXMgY2hh bmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkNCg0KZGlmZiAtLWdpdCBhL3Rj cC5jIGIvdGNwLmMNCmluZGV4IGZhMTMyOTIuLjM4YzM0ODAgMTAwNjQ0DQotLS0gYS90Y3AuYw0K KysrIGIvdGNwLmMNCkBAIC0xNzY0LDkgKzE3NjQsMTcgQEAgc3RhdGljIHZvaWQgdGNwX2dldF90 YXBfd3Moc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwNCiAgKi8NCiBzdGF0aWMgdm9pZCB0Y3Bf dGFwX3dpbmRvd191cGRhdGUoc3RydWN0IHRjcF90YXBfY29ubiAqY29ubiwgdW5zaWduZWQgd25k KQ0KIHsNCisJdWludDMyX3Qgd25kX2VkZ2U7DQorDQogCXduZCA9IE1JTihNQVhfV0lORE9XLCB3 bmQgPDwgY29ubi0+d3NfZnJvbV90YXApOw0KKwkvKiBjcHBjaGVjay1zdXBwcmVzcyBba25vd25D b25kaXRpb25UcnVlRmFsc2UsIHVubWF0Y2hlZFN1cHByZXNzaW9uXSAqLw0KKw0KIAljb25uLT53 bmRfZnJvbV90YXAgPSBNSU4od25kID4+IGNvbm4tPndzX2Zyb21fdGFwLCBVU0hSVF9NQVgpOw0K IA0KKwl3bmRfZWRnZSA9IGNvbm4tPnNlcV9hY2tfZnJvbV90YXAgKyB3bmQ7DQorCWlmICh3bmQg JiYgU0VRX0dUKHduZF9lZGdlLCBjb25uLT5zZXFfd25kX2VkZ2VfZnJvbV90YXApKQ0KKwkJY29u bi0+c2VxX3duZF9lZGdlX2Zyb21fdGFwID0gd25kX2VkZ2U7DQorDQogCS8qIEZJWE1FOiByZWZs ZWN0IHRoZSB0YXAtc2lkZSByZWNlaXZlcidzIHdpbmRvdyBiYWNrIHRvIHRoZSBzb2NrLXNpZGUN CiAJICogc2VuZGVyIGJ5IGFkanVzdGluZyBTT19SQ1ZCVUY/ICovDQogfQ0KQEAgLTE3OTksNiAr MTgwNyw3IEBAIHN0YXRpYyB2b2lkIHRjcF9zZXFfaW5pdChjb25zdCBzdHJ1Y3QgY3R4ICpjLCBz dHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KIAlucyA9IChub3ctPnR2X3NlYyAqIDEwMDAwMDAw MDAgKyBub3ctPnR2X25zZWMpID4+IDU7DQogDQogCWNvbm4tPnNlcV90b190YXAgPSAoKHVpbnQz Ml90KShoYXNoID4+IDMyKSBeICh1aW50MzJfdCloYXNoKSArIG5zOw0KKwljb25uLT5zZXFfd25k X2VkZ2VfZnJvbV90YXAgPSBjb25uLT5zZXFfdG9fdGFwOw0KIH0NCiANCiAvKioNCkBAIC0yMjA4 LDEzICsyMjE3LDEyIEBAIHN0YXRpYyB2b2lkIHRjcF9kYXRhX3RvX3RhcChjb25zdCBzdHJ1Y3Qg Y3R4ICpjLCBzdHJ1Y3QgdGNwX3RhcF9jb25uICpjb25uLA0KICAqLw0KIHN0YXRpYyBpbnQgdGNw X2RhdGFfZnJvbV9zb2NrKHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0Y3BfdGFwX2Nvbm4gKmNvbm4p DQogew0KLQl1aW50MzJfdCB3bmRfc2NhbGVkID0gY29ubi0+d25kX2Zyb21fdGFwIDw8IGNvbm4t PndzX2Zyb21fdGFwOw0KIAlpbnQgZmlsbF9idWZzLCBzZW5kX2J1ZnMgPSAwLCBsYXN0X2xlbiwg aW92X3JlbSA9IDA7DQogCWludCBzZW5kbGVuLCBsZW4sIGRsZW4sIHY0ID0gQ09OTl9WNChjb25u KTsNCisJdWludDMyX3QgYWxyZWFkeV9zZW50LCBtYXhfc2VuZCwgc2VxOw0KIAlpbnQgcyA9IGNv bm4tPnNvY2ssIGksIHJldCA9IDA7DQogCXN0cnVjdCBtc2doZHIgbWhfc29jayA9IHsgMCB9Ow0K IAl1aW50MTZfdCBtc3MgPSBNU1NfR0VUKGNvbm4pOw0KLQl1aW50MzJfdCBhbHJlYWR5X3NlbnQs IHNlcTsNCiAJc3RydWN0IGlvdmVjICppb3Y7DQogDQogCS8qIEhvdyBtdWNoIGhhdmUgd2UgcmVh ZC9zZW50IHNpbmNlIGxhc3QgcmVjZWl2ZWQgYWNrID8gKi8NCkBAIC0yMjI4LDE5ICsyMjM2LDI0 IEBAIHN0YXRpYyBpbnQgdGNwX2RhdGFfZnJvbV9zb2NrKHN0cnVjdCBjdHggKmMsIHN0cnVjdCB0 Y3BfdGFwX2Nvbm4gKmNvbm4pDQogCQl0Y3Bfc2V0X3BlZWtfb2Zmc2V0KHMsIDApOw0KIAl9DQog DQotCWlmICghd25kX3NjYWxlZCB8fCBhbHJlYWR5X3NlbnQgPj0gd25kX3NjYWxlZCkgew0KKwkv KiBIb3cgbXVjaCBhcmUgd2Ugc3RpbGwgYWxsb3dlZCB0byBzZW5kIHdpdGhpbiBjdXJyZW50IHdp bmRvdyA/ICovDQorCW1heF9zZW5kID0gY29ubi0+c2VxX3duZF9lZGdlX2Zyb21fdGFwIC0gY29u bi0+c2VxX3RvX3RhcDsNCisJaWYgKFNFUV9MRShtYXhfc2VuZCwgMCkpIHsNCisJCWZsb3dfdHJh Y2UoY29ubiwgIldpbmRvdyBmdWxsOiByaWdodCBlZGdlOiAldSwgc2VudDogJXUiLA0KKwkJCSAg IGNvbm4tPnNlcV93bmRfZWRnZV9mcm9tX3RhcCwgY29ubi0+c2VxX3RvX3RhcCk7DQorCQljb25u LT5zZXFfd25kX2VkZ2VfZnJvbV90YXAgPSBjb25uLT5zZXFfdG9fdGFwOw0KIAkJY29ubl9mbGFn KGMsIGNvbm4sIFNUQUxMRUQpOw0KIAkJY29ubl9mbGFnKGMsIGNvbm4sIEFDS19GUk9NX1RBUF9E VUUpOw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCiAJLyogU2V0IHVwIGJ1ZmZlciBkZXNjcmlwdG9y cyB3ZSdsbCBmaWxsIGNvbXBsZXRlbHkgYW5kIHBhcnRpYWxseS4gKi8NCi0JZmlsbF9idWZzID0g RElWX1JPVU5EX1VQKHduZF9zY2FsZWQgLSBhbHJlYWR5X3NlbnQsIG1zcyk7DQorCWZpbGxfYnVm cyA9IERJVl9ST1VORF9VUChtYXhfc2VuZCwgIG1zcyk7DQogCWlmIChmaWxsX2J1ZnMgPiBUQ1Bf RlJBTUVTKSB7DQogCQlmaWxsX2J1ZnMgPSBUQ1BfRlJBTUVTOw0KIAkJaW92X3JlbSA9IDA7DQog CX0gZWxzZSB7DQotCQlpb3ZfcmVtID0gKHduZF9zY2FsZWQgLSBhbHJlYWR5X3NlbnQpICUgbXNz Ow0KKwkJaW92X3JlbSA9IG1heF9zZW5kICUgbXNzOw0KIAl9DQogDQogCS8qIFByZXBhcmUgaW92 IGFjY29yZGluZyB0byBrZXJuZWwgY2FwYWJpbGl0eSAqLw0KQEAgLTIzNDcsNiArMjM2MCw3IEBA IGVycjoNCiAgKg0KICAqIFJldHVybjogY291bnQgb2YgY29uc3VtZWQgcGFja2V0cw0KICAqLw0K Kw0KIHN0YXRpYyBpbnQgdGNwX2RhdGFfZnJvbV90YXAoc3RydWN0IGN0eCAqYywgc3RydWN0IHRj cF90YXBfY29ubiAqY29ubiwNCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgcG9vbCAqcCwgaW50IGlk eCkNCiB7DQpAQCAtMjk1MCw3ICsyOTY0LDcgQEAgdm9pZCB0Y3Bfc29ja19oYW5kbGVyKHN0cnVj dCBjdHggKmMsIHVuaW9uIGVwb2xsX3JlZiByZWYsIHVpbnQzMl90IGV2ZW50cykNCiAJCWlmIChl dmVudHMgJiAoRVBPTExSREhVUCB8IEVQT0xMSFVQKSkNCiAJCQljb25uX2V2ZW50KGMsIGNvbm4s IFNPQ0tfRklOX1JDVkQpOw0KIA0KLQkJaWYgKGV2ZW50cyAmIEVQT0xMSU4pDQorCQlpZiAoZXZl bnRzICYgRVBPTExJTiAmJiBjb25uLT53bmRfZnJvbV90YXApDQogCQkJdGNwX2RhdGFfZnJvbV9z b2NrKGMsIGNvbm4pOw0KIA0KIAkJaWYgKGV2ZW50cyAmIEVQT0xMT1VUKQ0KZGlmZiAtLWdpdCBh L3RjcF9jb25uLmggYi90Y3BfY29ubi5oDQppbmRleCBkMjgwYjIyLi41Y2JhZDJhIDEwMDY0NA0K LS0tIGEvdGNwX2Nvbm4uaA0KKysrIGIvdGNwX2Nvbm4uaA0KQEAgLTMwLDYgKzMwLDcgQEANCiAg KiBAd25kX3RvX3RhcDoJCVNlbmRpbmcgd2luZG93IGFkdmVydGlzZWQgdG8gdGFwLCB1bnNjYWxl ZCAoYXMgc2VudCkNCiAgKiBAc2VxX3RvX3RhcDoJCU5leHQgc2VxdWVuY2UgZm9yIHBhY2tldHMg dG8gdGFwDQogICogQHNlcV9hY2tfZnJvbV90YXA6CUxhc3QgQUNLIG51bWJlciByZWNlaXZlZCBm cm9tIHRhcA0KKyAqIEBzZXFfd25kX2VkZ2VfZnJvbV90YXA6IFJpZ2h0IGVkZ2Ugb2YgbGFzdCBu b24temVybyB3aW5kb3cgZnJvbSB0YXANCiAgKiBAc2VxX2Zyb21fdGFwOglOZXh0IHNlcXVlbmNl IGZvciBwYWNrZXRzIGZyb20gdGFwIChub3QgYWN0dWFsbHkgc2VudCkNCiAgKiBAc2VxX2Fja190 b190YXA6CUxhc3QgQUNLIG51bWJlciBzZW50IHRvIHRhcA0KICAqIEBzZXFfaW5pdF9mcm9tX3Rh cDoJSW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgZnJvbSB0YXANCkBAIC0xMDEsNiArMTAyLDcgQEAg c3RydWN0IHRjcF90YXBfY29ubiB7DQogDQogCXVpbnQzMl90CXNlcV90b190YXA7DQogCXVpbnQz Ml90CXNlcV9hY2tfZnJvbV90YXA7DQorCXVpbnQzMl90CXNlcV93bmRfZWRnZV9mcm9tX3RhcDsN CiAJdWludDMyX3QJc2VxX2Zyb21fdGFwOw0KIAl1aW50MzJfdAlzZXFfYWNrX3RvX3RhcDsNCiAJ dWludDMyX3QJc2VxX2luaXRfZnJvbV90YXA7DQotLSANCjIuNDIuMA0KDQo=