From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: passt.top; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=jH6tdyfT; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by passt.top (Postfix) with ESMTPS id A59445A061B for ; Wed, 12 Aug 2026 09:27:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1786519620; 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=exeTcy0betvh6sfMbUvNaKMqnZrwrBOU5va5R43ick4=; b=jH6tdyfTPzrXs5YhHseIGUHvrT0nwltEvxepJRYlvRdWki3Ku2PxsmaSUSaR1fb6FripXp jlepGWnKItBrw0oZjHFKPrO3YDkn0cKh+xXqjRz/pO4aNpcDhURSnRsEvs8hYV+8JmVI54 /ZB2APqw17eeFLO/IXCSAhzVb2wmyRc= Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-663-peCZ89a7Nn2RGueR0SIp5g-1; Wed, 12 Aug 2026 03:26:59 -0400 X-MC-Unique: peCZ89a7Nn2RGueR0SIp5g-1 X-Mimecast-MFC-AGG-ID: peCZ89a7Nn2RGueR0SIp5g_1786519618 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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 mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 025411956049; Wed, 12 Aug 2026 07:26:58 +0000 (UTC) Received: from anskuma-thinkpadp1gen7.bengluru.csb (unknown [10.74.80.105]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id ADC6A195DF91; Wed, 12 Aug 2026 07:26:53 +0000 (UTC) From: Anshu Kumari To: david@gibson.dropbear.id.au, sbrivio@redhat.com, passt-dev@passt.top Subject: [PATCH 5/5] fuzz: Add test server for bidirectional protocol fuzzing Date: Wed, 12 Aug 2026 12:56:28 +0530 Message-ID: <20260812072630.3235261-6-anskuma@redhat.com> In-Reply-To: <20260812072630.3235261-1-anskuma@redhat.com> References: <20260812072630.3235261-1-anskuma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ljkXMdFzkkf4V3GN54IfIMN9MUateCF4w0717zq5-sE_1786519618 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: K4QK2QPWRQTU4WMA3XISDV2OVOF2AYKH X-Message-ID-Hash: K4QK2QPWRQTU4WMA3XISDV2OVOF2AYKH X-MailFrom: anskuma@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 CC: aerosound161@gmail.com, abdobngad@gmail.com, anskuma@redhat.com, lvivier@redhat.com 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: QWRkIGZ1enotc2VydmVyIHRoYXQgYWN0cyBhcyBwYXNzdCdzIG5ldHdvcmsgcGVlcg0KZHVyaW5n IGZ1enppbmcuIEl0IGNvbm5lY3RzIHRvIHBhc3N0J3MgVU5JWCBzb2NrZXQNCmFuZCBsaXN0ZW5z IG9uIDEyNy4wLjAuMTo5OTk5IGZvciBUQ1AgY29ubmVjdGlvbnMuDQoNClVOSVggc29ja2V0IHBh dGg6IHJlc3BvbmRzIHRvIEFSUCByZXF1ZXN0cyBhbmQgVENQIFNZTnMgd2l0aA0KICBzdGF0ZWxl c3MgcmVwbGllcyAoc3dhcHBlZCBhZGRyZXNzZXMsIGZpeGVkIElTTikuIFJlc3BvbnNlcw0KICBh cmUgWE9SJ2Qgd2l0aCBBRkwrKyBzaGFyZWQgbWVtb3J5IGRhdGEgc28gdGhlIGZ1enplciBjYW4N CiAgbXV0YXRlIHNlcnZlciBiZWhhdmlvci4NCg0KVENQIGxvb3BiYWNrIHBhdGg6IGFjY2VwdHMg Y29ubmVjdGlvbnMgb24gcG9ydCA5OTk5LCByZWFkcw0KICBkYXRhLCBYT1ItbXV0YXRlcyB3aXRo IEFGTCsrIHNoYXJlZCBtZW1vcnksIGFuZCBlY2hvZXMgaXQNCiAgYmFjay4gVXNlcyBTT19MSU5H RVIoMCkgZm9yIGltbWVkaWF0ZSBSU1Qgb24gY2xvc2UgdG8NCiAgYXZvaWQgVElNRV9XQUlUIHBv cnQgZXhoYXVzdGlvbi4NCg0KVHVybi1iYXNlZCBzeW5jaHJvbml6YXRpb24gdmlhIG1tYXAnZCBm bGFnIGluIC9kZXYvc2htDQogIGNvb3JkaW5hdGVzIGZyYW1lIGV4Y2hhbmdlIGJldHdlZW4gcGFz c3QgYW5kIHRoZSBzZXJ2ZXIuDQoNCkFsc28gYWRkczoNCi0gZnV6emluZy90ZXN0Y2FzZV9kaXIv ZW1wdHkuYmluDQotIGZ1enppbmcvUkVBRE1FLmZ1enppbmcubWQNCg0KU2lnbmVkLW9mZi1ieTog QW5zaHUgS3VtYXJpIDxhbnNrdW1hQHJlZGhhdC5jb20+DQotLS0NCiBNYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDggKy0NCiBmdXp6LXNlcnZlci5jICAgICAgICAgICAgICAgICAg fCA0OTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogZnV6emluZy9SRUFETUUu ZnV6emluZy5tZCAgICAgIHwgIDk1ICsrKysrKysNCiBmdXp6aW5nL3Rlc3RjYXNlX2Rpci9lbXB0 eS5iaW4gfCBCaW4gMCAtPiAxMiBieXRlcw0KIDQgZmlsZXMgY2hhbmdlZCwgNTkxIGluc2VydGlv bnMoKyksIDIgZGVsZXRpb25zKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGZ1enotc2VydmVyLmMN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZnV6emluZy9SRUFETUUuZnV6emluZy5tZA0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBmdXp6aW5nL3Rlc3RjYXNlX2Rpci9lbXB0eS5iaW4NCg0KZGlmZiAtLWdpdCBh L01ha2VmaWxlIGIvTWFrZWZpbGUNCmluZGV4IDhlNDEyMWUuLjQ1MTdiYzcgMTAwNjQ0DQotLS0g YS9NYWtlZmlsZQ0KKysrIGIvTWFrZWZpbGUNCkBAIC0xMjUsMTcgKzEyNSwyMSBAQCB2YWxncmlu ZDogYWxsDQogDQogRlVaWl9DQyA/PSBhZmwtY2xhbmctZmFzdA0KIA0KLS5QSE9OWTogZnV6eg0K Ky5QSE9OWTogZnV6eiBmdXp6LXNlcnZlcg0KIA0KIGZ1eno6DQogCSQoTUFLRSkgY2xlYW4NCiAJ JChNQUtFKSBDQz0iJChGVVpaX0NDKSIgQ1BQRkxBR1M9Ii1ERlVaWklORyAtRE5ERUJVRyIgQ0ZM QUdTPSItZyAtZnNhbml0aXplPWFkZHJlc3MiIHBhc3N0DQogDQorZnV6ei1zZXJ2ZXI6DQorCSQo Q0MpIC1EX0dOVV9TT1VSQ0UgLU8yIC1vIGZ1enotc2VydmVyIGZ1enotc2VydmVyLmMNCisNCiAu UEhPTlk6IGNsZWFuDQogY2xlYW46DQogCSQoUk0pICQoQklOKSAqfiAqLm8gc2VjY29tcC5oIHNl Y2NvbXBfcmVwYWlyLmggc2VjY29tcF9wZXN0by5oIHBhc3RhLjEgXA0KIAkJcGFzc3QudGFyIHBh c3N0LnRhci5neiAqLmRlYiAqLnJwbSBcDQotCQlwYXNzdC5waWQgUkVBRE1FLnBsYWluLm1kDQor CQlwYXNzdC5waWQgUkVBRE1FLnBsYWluLm1kIFwNCisJCWZ1enotc2VydmVyDQogDQogaW5zdGFs bDogJChCSU4pICQoTUFOUEFHRVMpIGRvY3MNCiAJbWtkaXIgLXAgJChERVNURElSKSQoYmluZGly KSAkKERFU1RESVIpJChtYW4xZGlyKQ0KZGlmZiAtLWdpdCBhL2Z1enotc2VydmVyLmMgYi9mdXp6 LXNlcnZlci5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uYzliNDEwMQ0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZnV6ei1zZXJ2ZXIuYw0KQEAgLTAsMCArMSw0OTAgQEANCisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcg0KKw0KKy8qIGZ1enot c2VydmVyLmMgLSBUZXN0IHNlcnZlciBmb3IgYmlkaXJlY3Rpb25hbCBmdXp6IHRlc3Rpbmcgb2Yg cGFzc3QNCisgKg0KKyAqIENvbm5lY3RzIHRvIHBhc3N0J3MgVU5JWCBzb2NrZXQgYXMgYSBjbGll bnQuDQorICogUmVhZHMgb3V0Ym91bmQgZnJhbWVzLCBnZW5lcmF0ZXMgcHJvdG9jb2wgcmVzcG9u c2VzLCBYT1JzIHRoZW0NCisgKiB3aXRoIEFGTCsrIHNoYXJlZCBtZW1vcnkgZGF0YSwgYW5kIHdy aXRlcyB0aGVtIGJhY2suDQorICoNCisgKiBCdWlsZDogbWFrZSBmdXp6LXNlcnZlcg0KKyAqIFJ1 bjogICAuL2Z1enotc2VydmVyIChhZnRlciBwYXNzdC5mdXp6IGlzIGxpc3RlbmluZykNCisgKg0K KyAqIENvcHlyaWdodCBSZWQgSGF0DQorICogQXV0aG9yOiBBbnNodSBLdW1hcmkgPGFuc2t1bWFA cmVkaGF0LmNvbT4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4NCisjaW5j bHVkZSA8bmV0aW5ldC9pbi5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRs aWIuaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPHN0ZGludC5oPg0KKyNpbmNs dWRlIDx1bmlzdGQuaD4NCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaW5jbHVkZSA8ZmNudGwuaD4N CisjaW5jbHVkZSA8c3lzL21tYW4uaD4NCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KKyNpbmNs dWRlIDxzeXMvdW4uaD4NCisjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+DQorI2luY2x1ZGUgPHN5cy9z aG0uaD4NCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQorI2luY2x1ZGUgPG5ldC9ldGhlcm5ldC5o Pg0KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+DQorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4NCisj aW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4NCisNCisjZGVmaW5lIEZVWlpfU09DS19QQVRICQkiL3Rt cC9wYXNzdF9mdXp6XzEuc29ja2V0Ig0KKyNkZWZpbmUgRlVaWl9UVVJOX1BBVEgJCSIvZGV2L3No bS9wYXNzdF9mdXp6X3R1cm4iDQorI2RlZmluZSBGVVpaX1hPUl9PRkYJCSgxMiArIDY0ICogMTAy NCkNCisjZGVmaW5lIE1BWF9GUkFNRQkJMTYwMA0KKyNkZWZpbmUgVENQX0xJU1RFTl9QT1JUCQk5 OTk5DQorI2RlZmluZSBUQ1BfTUFYX0VWRU5UUwkJMTYNCisNCisvKioNCisgKiBzdHJ1Y3QgZnV6 el90dXJuIC0gVHVybi1iYXNlZCBzeW5jaHJvbml6YXRpb24gZmxhZyAobW1hcCdkIHNoYXJlZCBt ZW1vcnkpDQorICogQHR1cm46CTAgPSBwYXNzdCdzIHR1cm4sIDEgPSBzZXJ2ZXIncyB0dXJuDQor ICovDQorc3RydWN0IGZ1enpfdHVybiB7DQorCXVpbnQzMl90IHR1cm47DQorfTsNCisNCisvKioN CisgKiBzd2FwX2V0aF9pcCgpIC0gU3dhcCBFdGhlcm5ldCBNQUNzIGFuZCBJUHY0IGFkZHJlc3Nl cw0KKyAqIEBwa3Q6CVBvaW50ZXIgdG8gc3RhcnQgb2YgRXRoZXJuZXQgZnJhbWUNCisgKi8NCitz dGF0aWMgdm9pZCBzd2FwX2V0aF9pcCh1aW50OF90ICpwa3QpDQorew0KKwlzdHJ1Y3QgZXRoaGRy ICpldGggPSAodm9pZCAqKXBrdDsNCisJc3RydWN0IGlwaGRyICppcGggPSAodm9pZCAqKShldGgg KyAxKTsNCisJdWludDhfdCB0bXBfbWFjW0VUSF9BTEVOXTsNCisJdWludDhfdCB0bXBfaXBbNF07 DQorDQorCW1lbWNweSh0bXBfbWFjLCBldGgtPmhfc291cmNlLCBFVEhfQUxFTik7DQorCW1lbWNw eShldGgtPmhfc291cmNlLCBldGgtPmhfZGVzdCwgRVRIX0FMRU4pOw0KKwltZW1jcHkoZXRoLT5o X2Rlc3QsIHRtcF9tYWMsIEVUSF9BTEVOKTsNCisNCisJbWVtY3B5KHRtcF9pcCwgJmlwaC0+c2Fk ZHIsIDQpOw0KKwltZW1jcHkoJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLCA0KTsNCisJbWVtY3B5 KCZpcGgtPmRhZGRyLCB0bXBfaXAsIDQpOw0KK30NCisNCisvKioNCisgKiByZXNwb25kX2FycCgp IC0gR2VuZXJhdGUgQVJQIHJlcGx5IGZvciBhbiBBUlAgcmVxdWVzdA0KKyAqIEBpbjoJCUluY29t aW5nIGZyYW1lDQorICogQGluX2xlbjoJSW5jb21pbmcgZnJhbWUgbGVuZ3RoDQorICogQG91dDoJ T3V0cHV0IGJ1ZmZlciBmb3IgcmVzcG9uc2UNCisgKg0KKyAqIFN3YXBzIHNlbmRlciBoYXJkd2Fy ZSBhbmQgcHJvdG9jb2wgYWRkcmVzc2VzIHRvIGZvcm0gYQ0KKyAqIHZhbGlkIEFSUCByZXBseS4g T25seSByZXNwb25kcyB0byBBUlAgcmVxdWVzdHMgKG9wPTEpLg0KKyAqDQorICogUmV0dXJuOiBy ZXNwb25zZSBsZW5ndGgsIG9yIDAgaWYgbm90IGFuIEFSUCByZXF1ZXN0DQorICovDQorc3RhdGlj IGludCByZXNwb25kX2FycChjb25zdCB1aW50OF90ICppbiwgdWludDMyX3QgaW5fbGVuLCB1aW50 OF90ICpvdXQpDQorew0KKwkvKiBNaW4gQVJQIEZyYW1lIHNpemU6IGV0aCgxNCkgKyBBUlAgSGVh ZGVyKDgpICsgUGF5bG9hZCgyMCkgKi8NCisJaWYgKGluX2xlbiA8IDQyKQ0KKwkJcmV0dXJuIDA7 DQorDQorCWNvbnN0IHN0cnVjdCBldGhoZHIgKmV0aCA9IChjb25zdCB2b2lkICopaW47DQorCWNv bnN0IHN0cnVjdCBhcnBoZHIgKmFycCA9IChjb25zdCB2b2lkICopKGV0aCArIDEpOw0KKw0KKwlp ZiAoZXRoLT5oX3Byb3RvICE9IGh0b25zKEVUSF9QX0FSUCkgfHwNCisJICAgIGFycC0+YXJfb3Ag IT0gaHRvbnMoQVJQT1BfUkVRVUVTVCkpDQorCQlyZXR1cm4gMDsNCisNCisJbWVtY3B5KG91dCwg aW4sIGluX2xlbik7DQorDQorCXN0cnVjdCBldGhoZHIgKm91dF9ldGggPSAodm9pZCAqKW91dDsN CisJc3RydWN0IGFycGhkciAqb3V0X2FycCA9ICh2b2lkICopKG91dF9ldGggKyAxKTsNCisNCisJ Lyogc2V0IE1BQyBhZGRyZXNzZXMgZm9yIG91dHB1dCBidWZmZXIgKi8NCisJbWVtY3B5KG91dF9l dGgtPmhfZGVzdCwgZXRoLT5oX3NvdXJjZSwgRVRIX0FMRU4pOw0KKwltZW1jcHkob3V0X2V0aC0+ aF9zb3VyY2UsIGV0aC0+aF9kZXN0LCBFVEhfQUxFTik7DQorDQorCS8qIHNldCBBUlAgb3BlcmF0 aW9uIHRvIFJFUExZICovDQorCW91dF9hcnAtPmFyX29wID0gaHRvbnMoQVJQT1BfUkVQTFkpOw0K Kw0KKwkvKiBTd2FwIEFSUCBTZW5kZXIgYW5kIFRhcmdldCBmaWVsZHMgKi8NCisJdWludDhfdCAq c2VuZGVyID0gKHVpbnQ4X3QgKikob3V0X2FycCArIDEpOw0KKwl1aW50OF90ICp0YXJnZXQgPSBz ZW5kZXIgKyAxMDsNCisJdWludDhfdCB0bXBbMTBdOw0KKw0KKwltZW1jcHkodG1wLCBzZW5kZXIs IDEwKTsNCisJbWVtY3B5KHNlbmRlciwgdGFyZ2V0LCAxMCk7DQorCW1lbWNweSh0YXJnZXQsIHRt cCwgMTApOw0KKw0KKwlyZXR1cm4gaW5fbGVuOw0KK30NCisNCisvKioNCisgKiByZXNwb25kX3Rj cF9zeW4oKSAtIEdlbmVyYXRlIFNZTi1BQ0sgZm9yIGEgVENQIFNZTg0KKyAqIEBpbjogICAgICAg ICBJbmNvbWluZyBmcmFtZQ0KKyAqIEBpbl9sZW46ICAgICBJbmNvbWluZyBmcmFtZSBsZW5ndGgN CisgKiBAb3V0OiAgICAgICAgT3V0cHV0IGJ1ZmZlciBmb3IgcmVzcG9uc2UNCisgKg0KKyAqIFN3 YXBzIE1BQy9JUC9wb3J0IGFkZHJlc3NlcyBhbmQgY3JhZnRzIGEgc3RhdGVsZXNzIFNZTi1BQ0sg d2l0aA0KKyAqIGEgZml4ZWQgSVNOIG9mIDEwMDAuIE9ubHkgcmVzcG9uZHMgdG8gcHVyZSBTWU4g KG5vIEFDSyBzZXQpLg0KKyAqDQorICogUmV0dXJuOiByZXNwb25zZSBsZW5ndGgsIG9yIDAgaWYg bm90IGEgVENQIFNZTg0KKyAqLw0KK3N0YXRpYyBpbnQgcmVzcG9uZF90Y3Bfc3luKGNvbnN0IHVp bnQ4X3QgKmluLCB1aW50MzJfdCBpbl9sZW4sIHVpbnQ4X3QgKm91dCkNCit7DQorCWNvbnN0IHN0 cnVjdCBldGhoZHIgKmV0aCA9IChjb25zdCB2b2lkICopaW47DQorCWNvbnN0IHN0cnVjdCBpcGhk ciAqaXBoOw0KKwljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsNCisJc3RydWN0IHRjcGhkciAqb3V0 X3RoOw0KKwl1aW50MzJfdCBpaGwsIGhkcl9sZW47DQorDQorCS8qIENvbWJpbmVkIG1pbmltdW0g bGVuZ3RoIGNoZWNrIGZvciBFdGggKyBJUCArIFRDUCAqLw0KKwlpZiAoaW5fbGVuIDwgc2l6ZW9m KCpldGgpICsgc2l6ZW9mKCppcGgpICsgc2l6ZW9mKCp0aCkpDQorCQlyZXR1cm4gMDsNCisNCisJ aWYgKGV0aC0+aF9wcm90byAhPSBodG9ucyhFVEhfUF9JUCkpDQorCQlyZXR1cm4gMDsNCisNCisJ aXBoID0gKGNvbnN0IHZvaWQgKikoZXRoICsgMSk7DQorCWlobCA9IGlwaC0+aWhsICogNDsNCisN CisJaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1AgfHwNCisJICAgIGluX2xlbiA8IHNp emVvZigqZXRoKSArIGlobCArIHNpemVvZigqdGgpKQ0KKwkJcmV0dXJuIDA7DQorDQorCXRoID0g KGNvbnN0IHZvaWQgKikoKGNvbnN0IHVpbnQ4X3QgKilpcGggKyBpaGwpOw0KKw0KKwkvKiBPbmx5 IHJlc3BvbmQgdG8gcHVyZSBTWU4gcGFja2V0cyAobm8gQUNLIHNldCkgKi8NCisJaWYgKCF0aC0+ c3luIHx8IHRoLT5hY2spDQorCQlyZXR1cm4gMDsNCisNCisJaGRyX2xlbiA9IHNpemVvZigqZXRo KSArIGlobCArIHNpemVvZigqdGgpOw0KKwltZW1jcHkob3V0LCBpbiwgaGRyX2xlbik7DQorCXN3 YXBfZXRoX2lwKG91dCk7DQorDQorCS8qIENyYWZ0IFNZTi1BQ0sgcmVzcG9uc2UgaGVhZGVyICov DQorCW91dF90aCA9IChzdHJ1Y3QgdGNwaGRyICopKG91dCArIHNpemVvZigqZXRoKSArIGlobCk7 DQorCW91dF90aC0+c291cmNlICA9IHRoLT5kZXN0Ow0KKwlvdXRfdGgtPmRlc3QgICAgPSB0aC0+ c291cmNlOw0KKwlvdXRfdGgtPnNlcSAgICAgPSBodG9ubCgxMDAwKTsNCisJb3V0X3RoLT5hY2tf c2VxID0gaHRvbmwobnRvaGwodGgtPnNlcSkgKyAxKTsNCisJb3V0X3RoLT5zeW4gICAgID0gMTsN CisJb3V0X3RoLT5hY2sgICAgID0gMTsNCisJb3V0X3RoLT5kb2ZmICAgID0gNTsNCisJb3V0X3Ro LT5jaGVjayAgID0gMDsNCisNCisJcmV0dXJuIGhkcl9sZW47DQorfQ0KKw0KKy8qKg0KKyAqIGdl bmVyYXRlX3Jlc3BvbnNlKCkgLSBUcnkgYWxsIHByb3RvY29sIHJlc3BvbmRlcnMgb24gYSBmcmFt ZQ0KKyAqIEBpbjoJCUluY29taW5nIGZyYW1lDQorICogQGluX2xlbjoJSW5jb21pbmcgZnJhbWUg bGVuZ3RoDQorICogQG91dDoJT3V0cHV0IGJ1ZmZlciBmb3IgcmVzcG9uc2UNCisgKg0KKyAqIFRy aWVzIEFSUCB0aGVuIFRDUCBTWU4gcmVzcG9uZGVycyBpbiBvcmRlci4gUmV0dXJucyB0aGUgZmly c3QNCisgKiBzdWNjZXNzZnVsIHJlc3BvbnNlLg0KKyAqDQorICogUmV0dXJuOiByZXNwb25zZSBs ZW5ndGgsIG9yIDAgaWYgbm8gcmVzcG9uZGVyIG1hdGNoZWQNCisgKi8NCitzdGF0aWMgaW50IGdl bmVyYXRlX3Jlc3BvbnNlKGNvbnN0IHVpbnQ4X3QgKmluLCB1aW50MzJfdCBpbl9sZW4sIHVpbnQ4 X3QgKm91dCkNCit7DQorCWludCBsZW47DQorDQorCWlmIChpbl9sZW4gPCBzaXplb2Yoc3RydWN0 IGV0aGhkcikpDQorCQlyZXR1cm4gMDsNCisNCisJaWYgKChsZW4gPSByZXNwb25kX2FycChpbiwg aW5fbGVuLCBvdXQpKSA+IDApDQorCQlyZXR1cm4gbGVuOw0KKwlpZiAoKGxlbiA9IHJlc3BvbmRf dGNwX3N5bihpbiwgaW5fbGVuLCBvdXQpKSA+IDApDQorCQlyZXR1cm4gbGVuOw0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQorLyoqDQorICogbWFwX2FmbF9zaG0oKSAtIE1hcCBBRkwrKyBzaGFyZWQg bWVtb3J5IGZvciBYT1IgbXV0YXRpb24NCisgKg0KKyAqIFJlYWRzIF9fQUZMX1NITV9GVVpaX0lE IGZyb20gdGhlIEFGTCsrIGVudmlyb25tZW50DQorICogdmFyaWFibGUgYW5kIGF0dGFjaGVzIHRo ZSBjb3JyZXNwb25kaW5nIHNoYXJlZCBtZW1vcnkNCisgKiBzZWdtZW50IHJlYWQtb25seS4NCisg Kg0KKyAqIFJldHVybjogcG9pbnRlciB0byBtYXBwZWQgU0hNLCBvciBOVUxMIGlmIG5vdCBhdmFp bGFibGUNCisgKi8NCitzdGF0aWMgdWludDhfdCAqbWFwX2FmbF9zaG0odm9pZCkNCit7DQorCWNv bnN0IGNoYXIgKmlkX3N0ciA9IGdldGVudigiX19BRkxfU0hNX0ZVWlpfSUQiKTsNCisJaW50IHNo bV9pZDsNCisJdWludDhfdCAqbWFwOw0KKw0KKwlpZiAoIWlkX3N0cikNCisJCXJldHVybiBOVUxM Ow0KKw0KKwlzaG1faWQgPSBhdG9pKGlkX3N0cik7DQorCW1hcCA9IHNobWF0KHNobV9pZCwgTlVM TCwgU0hNX1JET05MWSk7DQorCWlmIChtYXAgPT0gKHZvaWQgKiktMSkNCisJCXJldHVybiBOVUxM Ow0KKw0KKwlyZXR1cm4gbWFwOw0KK30NCisNCisvKioNCisgKiBhcHBseV94b3JfbWFzaygpIC0g WE9SIGJ1ZmZlciB3aXRoIEFGTCsrIHNoYXJlZCBtZW1vcnkgZGF0YQ0KKyAqIEBidWY6CUJ1ZmZl ciB0byBtdXRhdGUgaW4gcGxhY2UNCisgKiBAbGVuOglCdWZmZXIgbGVuZ3RoDQorICogQGFmbF9i dWY6CUFGTCsrIHNoYXJlZCBtZW1vcnkNCisgKg0KKyAqIFhPUnMgZWFjaCBieXRlIG9mIEBidWYg d2l0aCB0aGUgY29ycmVzcG9uZGluZyBieXRlIGZyb20gdGhlDQorICogQUZMKysgYnVmZmVyIHN0 YXJ0aW5nIGF0IG9mZnNldCBGVVpaX1hPUl9PRkYgKDY1NTQ4KS4gVGhpcw0KKyAqIGxldHMgQUZM KysgbXV0YXRlIHNlcnZlciByZXNwb25zZXMuDQorICovDQorc3RhdGljIHZvaWQgYXBwbHlfeG9y X21hc2sodWludDhfdCAqYnVmLCBpbnQgbGVuLCBjb25zdCB1aW50OF90ICphZmxfYnVmKQ0KK3sN CisJaW50IGk7DQorDQorCWlmICghYWZsX2J1ZikNCisJCXJldHVybjsNCisNCisJZm9yIChpID0g MDsgaSA8IGxlbjsgaSsrKQ0KKwkJYnVmW2ldIF49IGFmbF9idWZbRlVaWl9YT1JfT0ZGICsgaV07 DQorfQ0KKw0KKy8qIC0tLS0gVENQIEhvc3QgTGlzdGVuZXIgKExvb3BiYWNrKSAtLS0tICovDQor DQorc3RhdGljIGludCB0Y3BfbGlzdGVuX2ZkID0gLTE7DQorc3RhdGljIGludCB0Y3BfZXBmZCA9 IC0xOw0KKw0KKy8qKg0KKyAqIHRjcF9saXN0ZW5lcl9pbml0KCkgLSBTZXQgdXAgVENQIGxpc3Rl bmVyIG9uIGxvb3BiYWNrIHBvcnQgOTk5OQ0KKyAqDQorICogQ3JlYXRlcyBhbiBlcG9sbCBpbnN0 YW5jZSBhbmQgYSBub24tYmxvY2tpbmcgVENQIGxpc3RlbmVyIG9uDQorICogMTI3LjAuMC4xOjk5 OTkgd2l0aCBTT19SRVVTRUFERFIuDQorICoNCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEg b24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyBpbnQgdGNwX2xpc3RlbmVyX2luaXQodm9pZCkNCit7 DQorCXN0cnVjdCBzb2NrYWRkcl9pbiBzYSA9IHsNCisJCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwN CisJCS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLA0KKwkJLnNpbl9w b3J0ID0gaHRvbnMoVENQX0xJU1RFTl9QT1JUKSwNCisJfTsNCisJc3RydWN0IGVwb2xsX2V2ZW50 IGV2Ow0KKwlpbnQgb3B0ID0gMTsNCisNCisJdGNwX2VwZmQgPSBlcG9sbF9jcmVhdGUxKEVQT0xM X0NMT0VYRUMpOw0KKwl0Y3BfbGlzdGVuX2ZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFN IHwgU09DS19OT05CTE9DSywgMCk7DQorCWlmICh0Y3BfZXBmZCA8IDAgfHwgdGNwX2xpc3Rlbl9m ZCA8IDApDQorCQlyZXR1cm4gLTE7DQorDQorCXNldHNvY2tvcHQodGNwX2xpc3Rlbl9mZCwgU09M X1NPQ0tFVCwgU09fUkVVU0VBRERSLCAmb3B0LCBzaXplb2Yob3B0KSk7DQorDQorCWlmIChiaW5k KHRjcF9saXN0ZW5fZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSkpIDwgMCB8 fA0KKwkgICAgbGlzdGVuKHRjcF9saXN0ZW5fZmQsIDEyOCkgPCAwKQ0KKwkJcmV0dXJuIC0xOw0K Kw0KKwlldi5ldmVudHMgPSBFUE9MTElOOw0KKwlldi5kYXRhLmZkID0gdGNwX2xpc3Rlbl9mZDsN CisJZXBvbGxfY3RsKHRjcF9lcGZkLCBFUE9MTF9DVExfQURELCB0Y3BfbGlzdGVuX2ZkLCAmZXYp Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogdGNwX2hhbmRsZV9hY2NlcHQoKSAt IERyYWluIGFsbCBwZW5kaW5nIFRDUCBjb25uZWN0aW9ucw0KKyAqDQorICogU2V0cyBTT19MSU5H RVIgd2l0aCBsX2xpbmdlcj0wIG9uIGV2ZXJ5IGFjY2VwdGVkIGNvbm5lY3Rpb24sDQorICogd2hp Y2ggZG9lcyB0aGUgaW1tZWRpYXRlIFJTVCBvbiBjb25uZWN0aW9uIGNsb3NlIGluc3RlYWQgb2YN CisgKiB3YWl0aW5nIGZvciBjb25uZWN0aW9uIHRvIGNsb3NlIG9uIGl0J3Mgb3duLg0KKyAqLw0K K3N0YXRpYyB2b2lkIHRjcF9oYW5kbGVfYWNjZXB0KHZvaWQpDQorew0KKwlzdHJ1Y3QgbGluZ2Vy IGxnID0geyAubF9vbm9mZiA9IDEsIC5sX2xpbmdlciA9IDAgfTsNCisJc3RydWN0IGVwb2xsX2V2 ZW50IGV2Ow0KKwlpbnQgZmQ7DQorDQorCS8qIERyYWluIEFMTCBwZW5kaW5nIGNvbm5lY3Rpb25z IGluIHRoZSBiYWNrbG9nICovDQorCXdoaWxlICgoZmQgPSBhY2NlcHQ0KHRjcF9saXN0ZW5fZmQs IE5VTEwsIE5VTEwsDQorCQkJICAgICBTT0NLX05PTkJMT0NLKSkgPj0gMCkgew0KKwkJc2V0c29j a29wdChmZCwgU09MX1NPQ0tFVCwgU09fTElOR0VSLCAmbGcsIHNpemVvZihsZykpOw0KKw0KKwkJ ZXYuZXZlbnRzID0gRVBPTExJTiB8IEVQT0xMUkRIVVAgfCBFUE9MTEhVUCB8IEVQT0xMRVJSOw0K KwkJZXYuZGF0YS5mZCA9IGZkOw0KKwkJZXBvbGxfY3RsKHRjcF9lcGZkLCBFUE9MTF9DVExfQURE LCBmZCwgJmV2KTsNCisJfQ0KK30NCisNCisvKioNCisgKiB0Y3BfaGFuZGxlX2RhdGEoKSAtIFJl YWQgVENQIGRhdGEsIFhPUi1tdXRhdGUsIGVjaG8gYmFjaw0KKyAqIEBmZDoJCUNvbm5lY3RlZCBU Q1Agc29ja2V0DQorICogQGFmbF9idWY6CUFGTCsrIHNoYXJlZCBtZW1vcnkgZm9yIFhPUiBtYXNr DQorICovDQorc3RhdGljIHZvaWQgdGNwX2hhbmRsZV9kYXRhKGludCBmZCwgY29uc3QgdWludDhf dCAqYWZsX2J1ZikNCit7DQorCXVpbnQ4X3QgYnVmW01BWF9GUkFNRV07DQorCXNzaXplX3Qgbiwg d3JpdHRlbiwgcmV0Ow0KKw0KKwluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSk7DQorCWlm IChuIDw9IDApIHsNCisJCWVwb2xsX2N0bCh0Y3BfZXBmZCwgRVBPTExfQ1RMX0RFTCwgZmQsIE5V TEwpOw0KKwkJY2xvc2UoZmQpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCWFwcGx5X3hvcl9tYXNr KGJ1ZiwgKHVpbnQzMl90KW4sIGFmbF9idWYpOw0KKw0KKwkvKiBFbnN1cmUgYWxsIG4gYnl0ZXMg YXJlIHdyaXR0ZW4sIGhhbmRsaW5nIHNob3J0IHdyaXRlcyAqLw0KKwl3cml0dGVuID0gMDsNCisJ d2hpbGUgKHdyaXR0ZW4gPCBuKSB7DQorCQlyZXQgPSB3cml0ZShmZCwgYnVmICsgd3JpdHRlbiwg KHNpemVfdCkobiAtIHdyaXR0ZW4pKTsNCisJCWlmIChyZXQgPD0gMCkgew0KKwkJCWlmIChyZXQg PCAwICYmIChlcnJubyA9PSBFQUdBSU4gfHwNCisJCQkJCWVycm5vID09IEVXT1VMREJMT0NLKSkN CisJCQkJY29udGludWU7DQorDQorCQkJZXBvbGxfY3RsKHRjcF9lcGZkLCBFUE9MTF9DVExfREVM LCBmZCwgTlVMTCk7DQorCQkJY2xvc2UoZmQpOw0KKwkJCXJldHVybjsNCisJCX0NCisJCXdyaXR0 ZW4gKz0gcmV0Ow0KKwl9DQorfQ0KKw0KKy8qKg0KKyAqIHRjcF9wcm9jZXNzX2V2ZW50cygpIC0g Tm9uLWJsb2NraW5nIHBvbGwgZm9yIFRDUCBldmVudHMNCisgKiBAYWZsX2J1ZjoJQUZMKysgc2hh cmVkIG1lbW9yeQ0KKyAqLw0KK3N0YXRpYyB2b2lkIHRjcF9wcm9jZXNzX2V2ZW50cyhjb25zdCB1 aW50OF90ICphZmxfYnVmKQ0KK3sNCisJc3RydWN0IGVwb2xsX2V2ZW50IGV2ZW50c1tUQ1BfTUFY X0VWRU5UU107DQorCWludCBuZmRzLCBpOw0KKw0KKwluZmRzID0gZXBvbGxfd2FpdCh0Y3BfZXBm ZCwgZXZlbnRzLCBUQ1BfTUFYX0VWRU5UUywgMCk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBuZmRz OyBpKyspIHsNCisJCWludCBmZCA9IGV2ZW50c1tpXS5kYXRhLmZkOw0KKw0KKwkJaWYgKGZkID09 IHRjcF9saXN0ZW5fZmQpIHsNCisJCQl0Y3BfaGFuZGxlX2FjY2VwdCgpOw0KKwkJfSBlbHNlIGlm IChldmVudHNbaV0uZXZlbnRzICYgKEVQT0xMSU4gfCBFUE9MTFJESFVQKSkgew0KKwkJCXRjcF9o YW5kbGVfZGF0YShmZCwgYWZsX2J1Zik7DQorCQl9IGVsc2UgaWYgKGV2ZW50c1tpXS5ldmVudHMg JiAoRVBPTExIVVAgfCBFUE9MTEVSUikpIHsNCisJCQllcG9sbF9jdGwodGNwX2VwZmQsIEVQT0xM X0NUTF9ERUwsIGZkLCBOVUxMKTsNCisJCQljbG9zZShmZCk7DQorCQl9DQorCX0NCit9DQorDQor LyoqDQorICogY3JlYXRlX3R1cm5fZmxhZygpIC0gQ3JlYXRlIGFuZCBtbWFwIHRoZSB0dXJuIHN5 bmNocm9uaXphdGlvbiBmbGFnDQorICoNCisgKiBDcmVhdGVzIEZVWlpfVFVSTl9QQVRIIGluIC9k ZXYvc2htIGFuZCBtYXBzIGl0DQorICogYXMgc2hhcmVkIG1lbW9yeS4gQm90aCBwYXNzdCBhbmQg ZnV6ei1zZXJ2ZXIgbWFwIHRoaXMgZmlsZSB0bw0KKyAqIGNvb3JkaW5hdGUgdHVybi1iYXNlZCBm cmFtZSBleGNoYW5nZSB2aWEgYXRvbWljIGxvYWQvc3RvcmUuDQorICoNCisgKiBSZXR1cm46IHBv aW50ZXIgdG8gbWFwcGVkIHR1cm4gc3RydWN0LCBvciBOVUxMIG9uIGZhaWx1cmUNCisgKi8NCitz dGF0aWMgc3RydWN0IGZ1enpfdHVybiAqY3JlYXRlX3R1cm5fZmxhZyh2b2lkKQ0KK3sNCisJc3Ry dWN0IGZ1enpfdHVybiAqdDsNCisJaW50IGZkOw0KKw0KKwlmZCA9IG9wZW4oRlVaWl9UVVJOX1BB VEgsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsNCisJaWYgKGZkIDwgMCkNCisJ CXJldHVybiBOVUxMOw0KKw0KKwlpZiAoZnRydW5jYXRlKGZkLCBzaXplb2Yoc3RydWN0IGZ1enpf dHVybikpIDwgMCkgew0KKwkJY2xvc2UoZmQpOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJ dCA9IG1tYXAoTlVMTCwgc2l6ZW9mKCp0KSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NI QVJFRCwgZmQsIDApOw0KKwljbG9zZShmZCk7DQorDQorCWlmICh0ID09IE1BUF9GQUlMRUQpDQor CQlyZXR1cm4gTlVMTDsNCisNCisJdC0+dHVybiA9IDA7DQorCXJldHVybiB0Ow0KK30NCisNCisv KioNCisgKiBtYWluKCkgLSBTZXJ2ZXIgZW50cnkgcG9pbnQNCisgKg0KKyAqIE91dGVyIGxvb3Ag cmVjb25uZWN0cyB0byBwYXNzdCdzIFVOSVggc29ja2V0IG9uIGVhY2ggQUZMKysgZm9yaw0KKyAq IHNlcnZlciByZXN0YXJ0LiBJbm5lciBsb29wIGhhbmRsZXMgdHVybi1iYXNlZCBUQVAgZnJhbWUg ZXhjaGFuZ2UNCisgKiBhbmQgVENQIGV2ZW50cyBjb25jdXJyZW50bHkuDQorICoNCisgKiBSZXR1 cm46IDAgb24gc3VjY2VzcywgMSBvbiBpbml0aWFsaXphdGlvbiBmYWlsdXJlDQorICovDQoraW50 IG1haW4odm9pZCkNCit7DQorCXN0cnVjdCBzb2NrYWRkcl91biBhZGRyID0geyAuc3VuX2ZhbWls eSA9IEFGX1VOSVggfTsNCisJdWludDhfdCBmcmFtZVtNQVhfRlJBTUVdLCByZXNwb25zZVtNQVhf RlJBTUVdOw0KKwlzdHJ1Y3QgZnV6el90dXJuICp0dXJuOw0KKwl1aW50OF90ICphZmxfYnVmOw0K Kw0KKwlzdHJuY3B5KGFkZHIuc3VuX3BhdGgsIEZVWlpfU09DS19QQVRILCBzaXplb2YoYWRkci5z dW5fcGF0aCkgLSAxKTsNCisNCisJdHVybiA9IGNyZWF0ZV90dXJuX2ZsYWcoKTsNCisJaWYgKCF0 dXJuIHx8IHRjcF9saXN0ZW5lcl9pbml0KCkgPCAwKSB7DQorCQkodm9pZClmcHJpbnRmKHN0ZGVy ciwNCisJCQkgICAgICAiZnV6ei1zZXJ2ZXI6IHRjcCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIp Ow0KKwkJcmV0dXJuIDE7DQorCX0NCisNCisJYWZsX2J1ZiA9IG1hcF9hZmxfc2htKCk7DQorCSh2 b2lkKWZwcmludGYoc3RkZXJyLA0KKwkJICAgICAgImZ1enotc2VydmVyOiByZWFkeSwgVENQIGxp c3RlbmluZyBvbiAxMjcuMC4wLjE6JWRcbiIsDQorCQlUQ1BfTElTVEVOX1BPUlQpOw0KKw0KKwkv Kg0KKwkgKiBSZWNvbm5lY3QgVU5JWCBzb2NrZXQgb24gcGFzc3QgcmVzdGFydCDigJQgQUZMKysn cyBmb3JrIHNlcnZlcg0KKwkgKiByZXN0YXJ0cyBwYXNzdCBvbiBlYWNoIGl0ZXJhdGlvbi4NCisJ ICovDQorCXdoaWxlICgxKSB7DQorCQlzc2l6ZV90IG47DQorCQlpbnQgc29jazsNCisNCisJCXNv Y2sgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TRVFQQUNLRVQsIDApOw0KKwkJaWYgKHNvY2sgPCAw KQ0KKwkJCXJldHVybiAxOw0KKw0KKwkJd2hpbGUgKGNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2Nr YWRkciAqKSZhZGRyLA0KKwkJCSAgICAgICBzaXplb2YoYWRkcikpIDwgMCkNCisJCQl1c2xlZXAo MTAwMDApOw0KKw0KKwkJd2hpbGUgKDEpIHsNCisJCQl0Y3BfcHJvY2Vzc19ldmVudHMoYWZsX2J1 Zik7DQorDQorCQkJaWYgKF9fYXRvbWljX2xvYWRfbigmdHVybi0+dHVybiwNCisJCQkJCSAgICBf X0FUT01JQ19BQ1FVSVJFKSA9PSAxKSB7DQorCQkJCW4gPSByZWN2KHNvY2ssIGZyYW1lLCBNQVhf RlJBTUUsDQorCQkJCQkgTVNHX0RPTlRXQUlUKTsNCisJCQkJaWYgKG4gPiAwKSB7DQorCQkJCQlp bnQgcmVzcF9sZW47DQorDQorCQkJCQlyZXNwX2xlbiA9IGdlbmVyYXRlX3Jlc3BvbnNlKA0KKwkJ CQkJCQlmcmFtZSwgbiwgcmVzcG9uc2UpOw0KKwkJCQkJaWYgKHJlc3BfbGVuID4gMCkgew0KKwkJ CQkJCWFwcGx5X3hvcl9tYXNrKHJlc3BvbnNlLA0KKwkJCQkJCQkgICAgICAgcmVzcF9sZW4sDQor CQkJCQkJCSAgICAgICBhZmxfYnVmKTsNCisJCQkJCQlzZW5kKHNvY2ssIHJlc3BvbnNlLA0KKwkJ CQkJCSAgICAgcmVzcF9sZW4sIE1TR19OT1NJR05BTCk7DQorCQkJCQl9DQorCQkJCX0gZWxzZSBp ZiAobiA9PSAwIHx8DQorCQkJCQkgICAobiA8IDAgJiYgZXJybm8gIT0gRUFHQUlOICYmDQorCQkJ CQkgICAgZXJybm8gIT0gRVdPVUxEQkxPQ0spKSB7DQorCQkJCQlfX2F0b21pY19zdG9yZV9uKCZ0 dXJuLT50dXJuLCAwLA0KKwkJCQkJCQkgX19BVE9NSUNfUkVMRUFTRSk7DQorCQkJCQlicmVhazsN CisJCQkJfQ0KKw0KKwkJCQlfX2F0b21pY19zdG9yZV9uKCZ0dXJuLT50dXJuLCAwLA0KKwkJCQkJ CSBfX0FUT01JQ19SRUxFQVNFKTsNCisJCQl9DQorCQl9DQorDQorCQljbG9zZShzb2NrKTsNCisJ fQ0KKw0KKwlyZXR1cm4gMDsNCit9DQpkaWZmIC0tZ2l0IGEvZnV6emluZy9SRUFETUUuZnV6emlu Zy5tZCBiL2Z1enppbmcvUkVBRE1FLmZ1enppbmcubWQNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQpp bmRleCAwMDAwMDAwLi5mMjNlMjY1DQotLS0gL2Rldi9udWxsDQorKysgYi9mdXp6aW5nL1JFQURN RS5mdXp6aW5nLm1kDQpAQCAtMCwwICsxLDk1IEBADQorIyMgRnV6emluZyBwYXNzdCB3aXRoIEFG TCsrDQorDQorIyMjIFByZXJlcXVpc2l0ZXMNCisNCistIEFGTCsrIChhZmwtY2xhbmctZmFzdCwg YWZsLWZ1enopDQorDQorIyMjIEJ1aWxkDQorDQorYGBgDQorbWFrZSBmdXp6DQorY3AgcGFzc3Qg cGFzc3QuZnV6eg0KK21ha2UgZnV6ei1zZXJ2ZXINCitgYGANCisNCitUaGlzIHByb2R1Y2VzOg0K Ky0gYHBhc3N0LmZ1enpgIC0tIGluc3RydW1lbnRlZCB3aXRoIEFGTCsrIGFuZCBBZGRyZXNzU2Fu aXRpemVyDQorLSBgZnV6ei1zZXJ2ZXJgIC0tIHRlc3Qgc2VydmVyIGZvciBiaWRpcmVjdGlvbmFs IHByb3RvY29sIGZ1enppbmcNCisNCitUbyB1c2UgYSBzcGVjaWZpYyBBRkwrKyBpbnN0YWxsYXRp b246DQorDQorYGBgDQorbWFrZSBGVVpaX0NDPS9wYXRoL3RvL2FmbC1jbGFuZy1mYXN0IGZ1enoN CitgYGANCisNCisjIyMgUnVuDQorDQorU3RhcnQgdGhlIHRlc3Qgc2VydmVyIGZpcnN0LCB0aGVu IHRoZSBmdXp6ZXI6DQorDQorYGBgDQorIyBUZXJtaW5hbCAxIC0tIHRlc3Qgc2VydmVyOg0KKy4v ZnV6ei1zZXJ2ZXINCisNCisjIFRlcm1pbmFsIDIgLS0gZnV6emVyOg0KK2FmbC1mdXp6IC1pIGZ1 enppbmcvdGVzdGNhc2VfZGlyIC1vIGZ1enppbmcvc3luY19kaXIgXA0KKyAgLS0gLi9wYXNzdC5m dXp6IC0tZm9yZWdyb3VuZA0KK2BgYA0KKw0KK011bHRpLWNvcmUgKHNlY29uZGFyeSBpbnN0YW5j ZXMgc2hhcmUgdGhlIGNvcnB1cyk6DQorDQorYGBgDQorIyBUZXJtaW5hbCAxIC0tIG1haW4gaW5z dGFuY2U6DQorYWZsLWZ1enogLU0gbWFpbiAtaSBmdXp6aW5nL3Rlc3RjYXNlX2RpciAtbyBmdXp6 aW5nL3N5bmNfZGlyIFwNCisgIC0tIC4vcGFzc3QuZnV6eiAtLWZvcmVncm91bmQNCisNCisjIFRl cm1pbmFsIDIgLS0gc2Vjb25kYXJ5IHdpdGggZGlmZmVyZW50IHBvd2VyIHNjaGVkdWxlOg0KK2Fm bC1mdXp6IC1TIHZhcmlhbnQxIC1wIHJhcmUgLWkgZnV6emluZy90ZXN0Y2FzZV9kaXIgXA0KKyAg LW8gZnV6emluZy9zeW5jX2RpciAtLSAuL3Bhc3N0LmZ1enogLS1mb3JlZ3JvdW5kDQorYGBgDQor DQorIyMjIEFyY2hpdGVjdHVyZQ0KKw0KK1RoZSBmdXp6ZXIgdXNlcyBBRkwrKyBwZXJzaXN0ZW50 IG1vZGUgd2l0aCBzaGFyZWQgbWVtb3J5IGZ1enppbmcuDQorRWFjaCBpdGVyYXRpb246DQorDQor MS4gUmVzZXRzIGRldGVybWluaXN0aWMgc3RhdGUgKGNsb2NrLCBmbG93IHRhYmxlLCBlcG9sbCkN CisyLiBSZWFkcyBhbiBlcG9sbCBldmVudCBhbmQgcGFja2V0IGRhdGEgZnJvbSBBRkwrKyBzaGFy ZWQgbWVtb3J5DQorMy4gRm9yIFRBUCBldmVudHM6IGluamVjdHMgYSBwYWNrZXQgd2l0aCBmaXhl ZCBMMi9MMy9MNCBoZWFkZXJzDQorICAgaW50byB0aGUgdGFwIHBpcGVsaW5lIHZpYSB0YXBfYWRk X3BhY2tldCgpICsgdGFwX2hhbmRsZXIoKS4NCisgICBUaGUgVENQIGRlc3RpbmF0aW9uIHBvcnQg aXMgZml4ZWQgdG8gOTk5OSAodGhlIHRlc3Qgc2VydmVyJ3MNCisgICBsaXN0ZW5pbmcgcG9ydCku DQorNC4gRXhjaGFuZ2VzIGEgdHVybiBmbGFnIHdpdGggZnV6ei1zZXJ2ZXIgZm9yIGJpZGlyZWN0 aW9uYWwgZmxvdy4NCis1LiBDYWxscyBwYXNzdF93b3JrZXIoKSB0byBwcm9jZXNzIHRoZSBlcG9s bCBldmVudA0KKzYuIFBvbGxzIGZvciBob3N0LXNpZGUgVENQIGV2ZW50cyAoY29ubmVjdCBjb21w bGV0aW9uLCBzZXJ2ZXIgZGF0YSkNCisNCitUaGUgdGVzdCBzZXJ2ZXIgY29ubmVjdHMgdG8gcGFz c3QncyBVTklYIHNvY2tldCAoU09DS19TRVFQQUNLRVQpDQorYW5kIGxpc3RlbnMgb24gMTI3LjAu MC4xOjk5OTkgZm9yIFRDUCBjb25uZWN0aW9ucy4gSXQgcmVzcG9uZHMgdG8NCitBUlAgcmVxdWVz dHMgYW5kIFRDUCBTWU5zIG9uIHRoZSBVTklYIHNvY2tldCwgYW5kIGVjaG9lcyBUQ1AgZGF0YQ0K KyhYT1InZCB3aXRoIEFGTCsrIHNoYXJlZCBtZW1vcnkpIG9uIHRoZSBsb29wYmFjayBzaWRlLg0K Kw0KK0RldGVybWluaXN0aWMgd3JhcHBlcnMgaW4gZnV6ei5jIHJlcGxhY2UgY2xvY2tfZ2V0dGlt ZSgpLA0KK2dldHJhbmRvbSgpLCBnZXRzb2Nrb3B0KFRDUF9JTkZPKSwgYW5kIHJlY3YvcmVjdm1z Zy9yZWN2ZnJvbS8NCityZWN2bW1zZyB0byBlbGltaW5hdGUgbm9uLWRldGVybWluaXNtIGZyb20g a2VybmVsIHN0YXRlLiBUaGUgcmVjdg0KK3dyYXBwZXJzIHJldHVybiBBRkwrKyBidWZmZXIgZGF0 YSBmb3Igbm9uLVRBUCBmaWxlIGRlc2NyaXB0b3JzLA0KK2dpdmluZyB0aGUgZnV6emVyIGNvbnRy b2wgb3ZlciB3aGF0IHBhc3N0ICJyZWNlaXZlcyIgZnJvbSBob3N0DQorc29ja2V0cy4NCisNCisj IyMgU2VlZCBpbnB1dHMNCisNCitgdGVzdGNhc2VfZGlyL2VtcHR5LmJpbmAgaXMgYSAxMi1ieXRl IHplcm8gZmlsZQ0KKyhzaXplb2Yoc3RydWN0IGVwb2xsX2V2ZW50KSkuIEFGTCsrIGRpc2NvdmVy cyBwYWNrZXQgZm9ybWF0cw0KK3Rocm91Z2ggbXV0YXRpb24gZnJvbSB0aGlzIG1pbmltYWwgc2Vl ZC4NCisNCisjIyMgUmVwcm9kdWNpbmcgY3Jhc2hlcw0KKw0KK2BgYA0KKy4vcGFzc3QuZnV6eiAt LWZvcmVncm91bmQgPCBcDQorICBmdXp6aW5nL3N5bmNfZGlyL2RlZmF1bHQvY3Jhc2hlcy9pZDow MDAwMDAsLi4uDQorYGBgDQorDQorTWluaW1pemUgYSBjcmFzaCBpbnB1dDoNCisNCitgYGANCith ZmwtdG1pbiAtaSBmdXp6aW5nL3N5bmNfZGlyL2RlZmF1bHQvY3Jhc2hlcy9pZDowMDAwMDAsLi4u IFwNCisgIC1vIGNyYXNoX21pbmltaXplZCAtLSAuL3Bhc3N0LmZ1enogLS1mb3JlZ3JvdW5kDQor YGBgDQpkaWZmIC0tZ2l0IGEvZnV6emluZy90ZXN0Y2FzZV9kaXIvZW1wdHkuYmluIGIvZnV6emlu Zy90ZXN0Y2FzZV9kaXIvZW1wdHkuYmluDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2U1OGJjOWY4NGI5NjIzZTcw OGRlNGViODQyN2E1N2Q5ZjlhMTYwZg0KR0lUIGJpbmFyeSBwYXRjaA0KbGl0ZXJhbCAxMg0KS2Nt WlF6S21ZJiQzOytRRA0KDQpsaXRlcmFsIDANCkhjbVY/ZDAwMDAxDQoNCi0tIA0KMi41NS4wDQoN Cg==