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=HkAEHbIG; 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 28BBA5A0274 for ; Tue, 01 Apr 2025 13:38:24 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1743507503; 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=mMfqR7uR9ei6J3gbEvS/0OiBTe/AeY1d6dLwYUrWebg=; b=HkAEHbIG+db+MqAVmS0B62JMpoQRmdjGFnYOOVAYWRSJKs49YrsLkxbNzn7F0gJjiAxiGN dUozOQCOgL5R6dgz3IbCVciCZrqQTAWK6g6X2AcSxTn2e1eAUEGNSGDS54HMSUmFaMujrT +XToaVBnIHWZINfasD7rqCLWGXTGayw= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-145-PNUsWRQaPGKpAxh_FBXgiQ-1; Tue, 01 Apr 2025 07:38:21 -0400 X-MC-Unique: PNUsWRQaPGKpAxh_FBXgiQ-1 X-Mimecast-MFC-AGG-ID: PNUsWRQaPGKpAxh_FBXgiQ_1743507499 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AFEEB180034D for ; Tue, 1 Apr 2025 11:38:19 +0000 (UTC) Received: from eperezma-thinkpadt480s.rmtes.csb (unknown [10.45.225.39]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A6D0E1801747; Tue, 1 Apr 2025 11:38:17 +0000 (UTC) From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: passt-dev@passt.top Subject: [PATCH 2/3] tap: implement vhost_call_cb Date: Tue, 1 Apr 2025 13:38:08 +0200 Message-ID: <20250401113809.1765282-3-eperezma@redhat.com> In-Reply-To: <20250401113809.1765282-1-eperezma@redhat.com> References: <20250401113809.1765282-1-eperezma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: ZrltduRoRKcJAG92zfC7fQdxwHx6b0QUmet45axjbJs_1743507499 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: TV7Y6PVATI5RHJ7462UJVXCB6THHZOUI X-Message-ID-Hash: TV7Y6PVATI5RHJ7462UJVXCB6THHZOUI X-MailFrom: eperezma@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: jmaloy@redhat.com, sbrivio@redhat.com, lvivier@redhat.com, dgibson@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: VGhpcyBpcyB0aGUgbWFpbiBjYWxsYmFjayB3aGVuIHRoZSB0YXAgZGV2aWNlIGhhcyBwcm9jZXNz ZWQgYW55IGJ1ZmZlci4NCkFub3RoZXIgcG9zc2liaWxpdHkgaXMgdG8gcmV1c2UgdGhlIHRhcCBj YWxsYmFjayBmb3IgdGhpcywgc28gbGVzcyBjb2RlDQpjaGFuZ2VzIGFyZSBuZWVkZWQuDQoNClNp Z25lZC1vZmYtYnk6IEV1Z2VuaW8gUMOpcmV6IDxlcGVyZXptYUByZWRoYXQuY29tPg0KLS0tDQog ZXBvbGxfdHlwZS5oIHwgICAyICsNCiBwYXNzdC5jICAgICAgfCAgIDQgKw0KIHBhc3N0LmggICAg ICB8ICAxMiArLQ0KIHRhcC5jICAgICAgICB8IDMxNiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0NCiB0YXAuaCAgICAgICAgfCAgIDIgKw0KIDUgZmls ZXMgY2hhbmdlZCwgMzM0IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1n aXQgYS9lcG9sbF90eXBlLmggYi9lcG9sbF90eXBlLmgNCmluZGV4IDdmMmExMjEuLjYyODRjNzkg MTAwNjQ0DQotLS0gYS9lcG9sbF90eXBlLmgNCisrKyBiL2Vwb2xsX3R5cGUuaA0KQEAgLTQ0LDYg KzQ0LDggQEAgZW51bSBlcG9sbF90eXBlIHsNCiAJRVBPTExfVFlQRV9SRVBBSVJfTElTVEVOLA0K IAkvKiBUQ1BfUkVQQUlSIGhlbHBlciBzb2NrZXQgKi8NCiAJRVBPTExfVFlQRV9SRVBBSVIsDQor CS8qIHZob3N0LWtlcm5lbCBjYWxsIHNvY2tldCAqLw0KKwlFUE9MTF9UWVBFX1ZIT1NUX0NBTEws DQogDQogCUVQT0xMX05VTV9UWVBFUywNCiB9Ow0KZGlmZiAtLWdpdCBhL3Bhc3N0LmMgYi9wYXNz dC5jDQppbmRleCBjZDA2NzcyLi4xOWM1ZDVmIDEwMDY0NA0KLS0tIGEvcGFzc3QuYw0KKysrIGIv cGFzc3QuYw0KQEAgLTc5LDYgKzc5LDcgQEAgY2hhciAqZXBvbGxfdHlwZV9zdHJbXSA9IHsNCiAJ W0VQT0xMX1RZUEVfVkhPU1RfS0lDS10JCT0gInZob3N0LXVzZXIga2ljayBzb2NrZXQiLA0KIAlb RVBPTExfVFlQRV9SRVBBSVJfTElTVEVOXQk9ICJUQ1BfUkVQQUlSIGhlbHBlciBsaXN0ZW5pbmcg c29ja2V0IiwNCiAJW0VQT0xMX1RZUEVfUkVQQUlSXQkJPSAiVENQX1JFUEFJUiBoZWxwZXIgc29j a2V0IiwNCisJW0VQT0xMX1RZUEVfVkhPU1RfQ0FMTF0JCT0gInZob3N0LWtlcm5lbCBjYWxsIHNv Y2tldCIsDQogfTsNCiBzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoZXBvbGxfdHlwZV9zdHIpID09 IEVQT0xMX05VTV9UWVBFUywNCiAJICAgICAgImVwb2xsX3R5cGVfc3RyW10gZG9lc24ndCBtYXRj aCBlbnVtIGVwb2xsX3R5cGUiKTsNCkBAIC0zNTcsNiArMzU4LDkgQEAgbG9vcDoNCiAJCWNhc2Ug RVBPTExfVFlQRV9SRVBBSVI6DQogCQkJcmVwYWlyX2hhbmRsZXIoJmMsIGV2ZW50bWFzayk7DQog CQkJYnJlYWs7DQorCQljYXNlIEVQT0xMX1RZUEVfVkhPU1RfQ0FMTDoNCisJCQl2aG9zdF9jYWxs X2NiKCZjLCByZWYsICZub3cpOw0KKwkJCWJyZWFrOw0KIAkJZGVmYXVsdDoNCiAJCQkvKiBDYW4n dCBoYXBwZW4gKi8NCiAJCQlBU1NFUlQoMCk7DQpkaWZmIC0tZ2l0IGEvcGFzc3QuaCBiL3Bhc3N0 LmgNCmluZGV4IDhmNDUwOTEuLmViNWFhMDMgMTAwNjQ0DQotLS0gYS9wYXNzdC5oDQorKysgYi9w YXNzdC5oDQpAQCAtNDUsNyArNDUsNyBAQCB1bmlvbiBlcG9sbF9yZWY7DQogICogQGljbXA6CUlD TVAtc3BlY2lmaWMgcmVmZXJlbmNlIHBhcnQNCiAgKiBAZGF0YToJRGF0YSBoYW5kbGVkIGJ5IHBy b3RvY29sIGhhbmRsZXJzDQogICogQG5zZGlyX2ZkOgluZXRucyBkaXJmZCBmb3IgZmFsbGJhY2sg dGltZXIgY2hlY2tpbmcgaWYgbmFtZXNwYWNlIGlzIGdvbmUNCi0gKiBAcXVldWU6CXZob3N0LXVz ZXIgcXVldWUgaW5kZXggZm9yIHRoaXMgZmQNCisgKiBAcXVldWU6CXZob3N0IHF1ZXVlIGluZGV4 IGZvciB0aGlzIGZkDQogICogQHU2NDoJT3BhcXVlIHJlZmVyZW5jZSBmb3IgZXBvbGxfY3RsKCkg YW5kIGVwb2xsX3dhaXQoKQ0KICAqLw0KIHVuaW9uIGVwb2xsX3JlZiB7DQpAQCAtMjcxLDExICsy NzEsMTQgQEAgc3RydWN0IGN0eCB7DQogCWludCBmZF90YXA7DQogCWludCBmZF9yZXBhaXJfbGlz dGVuOw0KIAlpbnQgZmRfcmVwYWlyOw0KKwkvKiBUT0RPIGRvY3VtZW50IGFsbCBhZGRlZCBmaWVs ZHMgKi8NCisJaW50IGZkX3Zob3N0Ow0KIAl1bnNpZ25lZCBjaGFyIG91cl90YXBfbWFjW0VUSF9B TEVOXTsNCiAJdW5zaWduZWQgY2hhciBndWVzdF9tYWNbRVRIX0FMRU5dOw0KIAl1aW50MTZfdCBt dHU7DQogDQogCXVpbnQ2NF90IGhhc2hfc2VjcmV0WzJdOw0KKwl1aW50NjRfdCB2aXJ0aW9fZmVh dHVyZXM7DQogDQogCWludCBpZmk0Ow0KIAlzdHJ1Y3QgaXA0X2N0eCBpcDQ7DQpAQCAtMjk5LDYg KzMwMiwxMyBAQCBzdHJ1Y3QgY3R4IHsNCiAJaW50IG5vX2ljbXA7DQogCXN0cnVjdCBpY21wX2N0 eCBpY21wOw0KIA0KKwlzdHJ1Y3Qgew0KKwkJdWludDE2X3QgbGFzdF91c2VkX2lkeDsNCisNCisJ CWludCBraWNrX2ZkOw0KKwkJaW50IGNhbGxfZmQ7DQorCX0gdnFbMl07DQorDQogCWludCBub19k bnM7DQogCWludCBub19kbnNfc2VhcmNoOw0KIAlpbnQgbm9fZGhjcF9kbnM7DQpkaWZmIC0tZ2l0 IGEvdGFwLmMgYi90YXAuYw0KaW5kZXggY2U4NTliYS4uZmJlODNhYSAxMDA2NDQNCi0tLSBhL3Rh cC5jDQorKysgYi90YXAuYw0KQEAgLTMxLDYgKzMxLDcgQEANCiAjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+DQogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogI2luY2x1ZGUgPGZjbnRsLmg+DQorI2luY2x1 ZGUgPHN5cy9ldmVudGZkLmg+DQogI2luY2x1ZGUgPHN5cy91aW8uaD4NCiAjaW5jbHVkZSA8c3Rk Ym9vbC5oPg0KICNpbmNsdWRlIDxzdGRsaWIuaD4NCkBAIC04Miw2ICs4Myw0NiBAQCBzdGF0aWMg UEFDS0VUX1BPT0xfTk9JTklUKHBvb2xfdGFwNiwgVEFQX01TR1MsIHBrdF9idWYpOw0KICNkZWZp bmUgVEFQX1NFUVMJCTEyOCAvKiBEaWZmZXJlbnQgTDQgdHVwbGVzIGluIG9uZSBiYXRjaCAqLw0K ICNkZWZpbmUgRlJBR01FTlRfTVNHX1JBVEUJMTAgIC8qICMgc2Vjb25kcyBiZXR3ZWVuIGZyYWdt ZW50IHdhcm5pbmdzICovDQogDQorI2RlZmluZSBWSE9TVF9WSVJUSU8gMHhBRg0KKyNkZWZpbmUg VkhPU1RfR0VUX0ZFQVRVUkVTIF9JT1IoVkhPU1RfVklSVElPLCAweDAwLCBfX3U2NCkNCisjZGVm aW5lIFZIT1NUX1NFVF9GRUFUVVJFUyBfSU9XKFZIT1NUX1ZJUlRJTywgMHgwMCwgX191NjQpDQor I2RlZmluZSBWSE9TVF9TRVRfT1dORVIgX0lPKFZIT1NUX1ZJUlRJTywgMHgwMSkNCisjZGVmaW5l IFZIT1NUX1NFVF9NRU1fVEFCTEUgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MDMsIHN0cnVjdCB2aG9z dF9tZW1vcnkpDQorI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfTlVNIF9JT1coVkhPU1RfVklSVElP LCAweDEwLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUpDQorI2RlZmluZSBWSE9TVF9TRVRfVlJJ TkdfQUREUiBfSU9XKFZIT1NUX1ZJUlRJTywgMHgxMSwgc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIp DQorI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfS0lDSyBfSU9XKFZIT1NUX1ZJUlRJTywgMHgyMCwg c3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpDQorI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfQ0FMTCBf SU9XKFZIT1NUX1ZJUlRJTywgMHgyMSwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpDQorI2RlZmlu ZSBWSE9TVF9TRVRfVlJJTkdfRVJSIF9JT1coVkhPU1RfVklSVElPLCAweDIyLCBzdHJ1Y3Qgdmhv c3RfdnJpbmdfZmlsZSkNCisjZGVmaW5lIFZIT1NUX1NFVF9CQUNLRU5EX0ZFQVRVUkVTIF9JT1co VkhPU1RfVklSVElPLCAweDI1LCBfX3U2NCkNCisjZGVmaW5lIFZIT1NUX05FVF9TRVRfQkFDS0VO RCBfSU9XKFZIT1NUX1ZJUlRJTywgMHgzMCwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpDQorDQor Y2hhciB2aXJ0aW9fcnhfcGt0X2J1ZltQS1RfQlVGX0JZVEVTXSBfX2F0dHJpYnV0ZV9fKChhbGln bmVkKFBBR0VfU0laRSkpKTsNCitzdGF0aWMgUEFDS0VUX1BPT0xfTk9JTklUKHBvb2xfdmlydGlv cng0LCBUQVBfTVNHUywgdmlydGlvX3J4X3BrdF9idWYpOw0KK3N0YXRpYyBQQUNLRVRfUE9PTF9O T0lOSVQocG9vbF92aXJ0aW9yeDYsIFRBUF9NU0dTLCB2aXJ0aW9fcnhfcGt0X2J1Zik7DQorDQor LyogVE9ETyBpcyBpdCBiZXR0ZXIgdG8gaGF2ZSAxMDI0IG9yIDY1NTIwIGJ5dGVzIHBlciBwYWNr ZXQ/ICovDQorI2RlZmluZSBWSE9TVF9OREVTQ1MgMTAyNA0KK3N0YXRpYyBzdHJ1Y3QgdnJpbmdf ZGVzYyB2cmluZ19kZXNjWzJdW1ZIT1NUX05ERVNDU10gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQ QUdFX1NJWkUpKSk7DQorc3RhdGljIHVuaW9uIHsNCisJc3RydWN0IHZyaW5nX2F2YWlsIGF2YWls Ow0KKwljaGFyIGJ1ZltvZmZzZXRvZihzdHJ1Y3QgdnJpbmdfYXZhaWwsIHJpbmdbVkhPU1RfTkRF U0NTXSldOw0KK30gdnJpbmdfYXZhaWxfMCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0la RSkpKSwgdnJpbmdfYXZhaWxfMSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsN CitzdGF0aWMgdW5pb24gew0KKwlzdHJ1Y3QgdnJpbmdfdXNlZCB1c2VkOw0KKwljaGFyIGJ1Zltv ZmZzZXRvZihzdHJ1Y3QgdnJpbmdfdXNlZCwgcmluZ1tWSE9TVF9OREVTQ1NdKV07DQorfSB2cmlu Z191c2VkXzAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChQQUdFX1NJWkUpKSksIHZyaW5nX3VzZWRf MSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsNCisNCisvKiBhbGwgZGVzY3Mg cmluZyArIDJyaW5ncyAqIDJ2cXMgKyB0eCBwa3QgYnVmICsgcnggcGt0IGJ1ZiAqLw0KKyNkZWZp bmUgTl9WSE9TVF9SRUdJT05TIDcNCit1bmlvbiB7DQorCXN0cnVjdCB2aG9zdF9tZW1vcnkgbWVt Ow0KKwljaGFyIGJ1ZltvZmZzZXRvZihzdHJ1Y3Qgdmhvc3RfbWVtb3J5LCByZWdpb25zW05fVkhP U1RfUkVHSU9OU10pXTsNCit9IHZob3N0X21lbW9yeSA9IHsNCisJLm1lbSA9IHsNCisJCS5ucmVn aW9ucyA9IE5fVkhPU1RfUkVHSU9OUywNCisJfSwNCit9Ow0KKw0KIC8qKg0KICAqIHRhcF9sMl9t YXhfbGVuKCkgLSBNYXhpbXVtIGZyYW1lIHNpemUgKGluY2x1ZGluZyBMMiBoZWFkZXIpIGZvciBj dXJyZW50IG1vZGUNCiAgKiBAYzoJCUV4ZWN1dGlvbiBjb250ZXh0DQpAQCAtMTM2MCw2ICsxNDAx LDg5IEBAIHZvaWQgdGFwX2xpc3Rlbl9oYW5kbGVyKHN0cnVjdCBjdHggKmMsIHVpbnQzMl90IGV2 ZW50cykNCiAJdGFwX3N0YXJ0X2Nvbm5lY3Rpb24oYyk7DQogfQ0KIA0KK3N0YXRpYyB2b2lkICp2 aXJ0cXVldWVfZ2V0X2J1ZihzdHJ1Y3QgY3R4ICpjLCB1bnNpZ25lZCBxaWQsIHVuc2lnbmVkICps ZW4pDQorew0KKwlzdHJ1Y3QgdnJpbmdfdXNlZCAqdXNlZCA9ICFxaWQgPyAmdnJpbmdfdXNlZF8w LnVzZWQgOiAmdnJpbmdfdXNlZF8xLnVzZWQ7DQorCXVpbnQzMl90IGk7DQorCXVpbnQxNl90IHVz ZWRfaWR4LCBsYXN0X3VzZWQ7DQorDQorCS8qIFRPRE8gdGhpbmsgaWYgdGhpcyBoYXMgcmFjZXMg d2l0aCBwcmV2aW91cyBldmVudGZkX3JlYWQgKi8NCisJLyogVE9ETyB3ZSBjb3VsZCBpbXByb3Zl IHBlcmZvcm1hbmNlIHdpdGggYSBzaGFkb3dfdXNlZF9pZHggKi8NCisJdXNlZF9pZHggPSBsZTE2 dG9oKHVzZWQtPmlkeCk7DQorDQorCXNtcF9ybWIoKTsNCisNCisJaWYgKHVzZWRfaWR4ID09IGMt PnZxW3FpZF0ubGFzdF91c2VkX2lkeCkgew0KKwkJKmxlbiA9IDA7DQorCQlyZXR1cm4gTlVMTDsN CisJfQ0KKw0KKwlsYXN0X3VzZWQgPSBjLT52cVtxaWRdLmxhc3RfdXNlZF9pZHggJiBWSE9TVF9O REVTQ1M7DQorCWkgPSBsZTMydG9oKHVzZWQtPnJpbmdbbGFzdF91c2VkXS5pZCk7DQorCSpsZW4g PSBsZTMydG9oKHVzZWQtPnJpbmdbbGFzdF91c2VkXS5sZW4pOw0KKw0KKwlpZiAoaSA+IFZIT1NU X05ERVNDUykgew0KKwkJLyogVE9ETyBpbXBvcm92ZSB0aGlzLCBpdCB3aWxsIGNhdXNlIGluZmlu aXRlIGxvb3AgKi8NCisJCXdhcm4oInZob3N0OiBpZCAldSBhdCB1c2VkIHBvc2l0aW9uICV1IG91 dCBvZiByYW5nZSAobWF4PSV1KSIsIGksIGxhc3RfdXNlZCwgVkhPU1RfTkRFU0NTKTsNCisJCXJl dHVybiBOVUxMOw0KKwl9DQorDQorCWlmICgqbGVuID4gUEtUX0JVRl9CWVRFUy9WSE9TVF9OREVT Q1MpIHsNCisJCXdhcm4oInZob3N0OiBpZCAlZCBsZW4gJXUgPiAlenUiLCBpLCAqbGVuLCBQS1Rf QlVGX0JZVEVTL1ZIT1NUX05ERVNDUyk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0KKw0KKwkvKiBU T0RPIGNoZWNrIGlmIHRoZSBpZCBpcyB2YWxpZCBhbmQgaXQgaGFzIG5vdCBiZWVuIGRvdWJsZSB1 c2VkICovDQorCWMtPnZxW3FpZF0ubGFzdF91c2VkX2lkeCsrOw0KKwlyZXR1cm4gdmlydGlvX3J4 X3BrdF9idWYgKyBpICogKFBLVF9CVUZfQllURVMvVkhPU1RfTkRFU0NTKTsNCit9DQorDQorLyog Y29udGFpbmVyIGlzIHR4IGJ1dCB3ZSByZWNlaXZlIGl0IGZyb20gdmhvc3QgUE9WICovDQordm9p ZCB2aG9zdF9jYWxsX2NiKHN0cnVjdCBjdHggKmMsIHVuaW9uIGVwb2xsX3JlZiByZWYsIGNvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqbm93KQ0KK3sNCisJZXZlbnRmZF9yZWFkKHJlZi5mZCwgKGV2ZW50 ZmRfdFtdKXsgMCB9KTsNCisNCisJdGFwX2ZsdXNoX3Bvb2xzKCk7DQorDQorCXdoaWxlICh0cnVl KSB7DQorCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4YnVmICpoZHI7DQorCQl1bnNpZ25l ZCBsZW47DQorDQorCQloZHIgPSB2aXJ0cXVldWVfZ2V0X2J1ZihjLCByZWYucXVldWUsICZsZW4p Ow0KKwkJaWYgKCFoZHIpDQorCQkJYnJlYWs7DQorDQorCQlpZiAobGVuIDwgc2l6ZW9mKCpoZHIp KSB7DQorCQkJd2Fybigidmhvc3Q6IGludmFsaWQgbGVuICV1IiwgbGVuKTsNCisJCQljb250aW51 ZTsNCisJCX0NCisNCisJCS8qIFRPRE8gdGhpcyB3aWxsIGJyZWFrIGZyb20gdGhpcyBtb21lbnQg Ki8NCisJCWlmIChoZHItPm51bV9idWZmZXJzICE9IDEpIHsNCisJCQl3YXJuKCJ2aG9zdDogVG9v IG1hbnkgYnVmZmVycyAldSwgJXp1IGJ5dGVzIHNob3VsZCBiZSBlbm91Z2ggZm9yIGV2ZXJ5Ym9k eSEiLCBoZHItPm51bV9idWZmZXJzLCBQS1RfQlVGX0JZVEVTL1ZIT1NUX05ERVNDUyk7DQorCQkJ Y29udGludWU7DQorCQl9DQorDQorCQkvKiBUT0RPIGZpeCB0aGUgdjYgcG9vbCB0byBzdXBwb3J0 IGlwdjYgKi8NCisJCXRhcF9hZGRfcGFja2V0KGMsIGxlbiAtIHNpemVvZigqaGRyKSwgKHZvaWQg KikoaGRyKzEpLCBwb29sX3ZpcnRpb3J4NCwgcG9vbF92aXJ0aW9yeDYpOw0KKwl9DQorDQorCXRh cF9oYW5kbGVyKGMsIG5vdywgcG9vbF92aXJ0aW9yeDQsIHBvb2xfdmlydGlvcng2KTsNCit9DQor DQorLyogVE9ETzogQWN0dWFsbHkgcmVmaWxsICovDQorc3RhdGljIHZvaWQgcnhfcGt0X3JlZmls bChpbnQga2lja19mZCkNCit7DQorCWZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBWSE9TVF9OREVT Q1M7ICsraSkgew0KKwkJdnJpbmdfZGVzY1swXVtpXS5hZGRyID0gKHVpbnRwdHJfdCl2aXJ0aW9f cnhfcGt0X2J1ZiArIGkgKiAoUEtUX0JVRl9CWVRFUy9WSE9TVF9OREVTQ1MpOw0KKwkJdnJpbmdf ZGVzY1swXVtpXS5sZW4gPSBQS1RfQlVGX0JZVEVTL1ZIT1NUX05ERVNDUzsNCisJCXZyaW5nX2Rl c2NbMF1baV0uZmxhZ3MgPSBWUklOR19ERVNDX0ZfV1JJVEU7DQorCX0NCisNCisJdnJpbmdfYXZh aWxfMC5hdmFpbC5pZHggPSBWSE9TVF9OREVTQ1M7DQorCWV2ZW50ZmRfd3JpdGUoa2lja19mZCwg MSk7DQorfQ0KKw0KIC8qKg0KICAqIHRhcF9uc190dW4oKSAtIEdldCB0dW50YXAgZmQgaW4gbmFt ZXNwYWNlDQogICogQGM6CQlFeGVjdXRpb24gY29udGV4dA0KQEAgLTEzNzAsMTAgKzE0OTQsMTMg QEAgdm9pZCB0YXBfbGlzdGVuX2hhbmRsZXIoc3RydWN0IGN0eCAqYywgdWludDMyX3QgZXZlbnRz KQ0KICAqLw0KIHN0YXRpYyBpbnQgdGFwX25zX3R1bih2b2lkICphcmcpDQogew0KKwkvKiBUT0RP IHdlIG5lZWQgdG8gY2hlY2sgaWYgdmhvc3Qgc3VwcG9ydCBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVG IGFuZCBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUiBhY3R1YWxseSAqLw0KKwlzdGF0aWMgY29u c3QgdWludDY0X3QgZmVhdHVyZXMgPQ0KKwkJKDFVTEwgPDwgVklSVElPX0ZfVkVSU0lPTl8xKSB8 ICgxVUxMIDw8IFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpIHwgKDFVTEwgPDwgVkhPU1RfTkVUX0Zf VklSVElPX05FVF9IRFIpOw0KIAlzdHJ1Y3QgaWZyZXEgaWZyID0geyAuaWZyX2ZsYWdzID0gSUZG X1RBUCB8IElGRl9OT19QSSB9Ow0KIAlpbnQgZmxhZ3MgPSBPX1JEV1IgfCBPX05PTkJMT0NLIHwg T19DTE9FWEVDOw0KIAlzdHJ1Y3QgY3R4ICpjID0gKHN0cnVjdCBjdHggKilhcmc7DQotCWludCBm ZCwgcmM7DQorCWludCBmZCwgdmhvc3RfZmQsIHJjOw0KIA0KIAljLT5mZF90YXAgPSAtMTsNCiAJ bWVtY3B5KGlmci5pZnJfbmFtZSwgYy0+cGFzdGFfaWZuLCBJRk5BTVNJWik7DQpAQCAtMTM4Myw2 ICsxNTEwLDE3NSBAQCBzdGF0aWMgaW50IHRhcF9uc190dW4odm9pZCAqYXJnKQ0KIAlpZiAoZmQg PCAwKQ0KIAkJZGllX3BlcnJvcigiRmFpbGVkIHRvIG9wZW4oKSAvZGV2L25ldC90dW4iKTsNCiAN CisJdmhvc3RfZmQgPSBvcGVuKCIvZGV2L3Zob3N0LW5ldCIsIGZsYWdzKTsNCisJaWYgKHZob3N0 X2ZkIDwgMCkNCisJCWRpZV9wZXJyb3IoIkZhaWxlZCB0byBvcGVuKCkgL2Rldi92aG9zdC1uZXQi KTsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX09XTkVSLCBOVUxMKTsNCisJ aWYgKHJjIDwgMCkNCisJCWRpZV9wZXJyb3IoIlZIT1NUX1NFVF9PV05FUiBpb2N0bCBvbiAvZGV2 L3Zob3N0LW5ldCBmYWlsZWQiKTsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfR0VU X0ZFQVRVUkVTLCAmYy0+dmlydGlvX2ZlYXR1cmVzKTsNCisJaWYgKHJjIDwgMCkNCisJCWRpZV9w ZXJyb3IoIlZIT1NUX0dFVF9GRUFUVVJFUyBpb2N0bCBvbiAvZGV2L3Zob3N0LW5ldCBmYWlsZWQi KTsNCisNCisJLyogVE9ETyBpbmZvcm0gbW9yZSBleHBsaWNpdGVseSAqLw0KKwlmcHJpbnRmKHN0 ZGVyciwgInZob3N0IGZlYXR1cmVzOiAlbHhcbiIsIGMtPnZpcnRpb19mZWF0dXJlcyk7DQorCWZw cmludGYoc3RkZXJyLCAicmVxIGZlYXR1cmVzOiAlbHhcbiIsIGZlYXR1cmVzKTsNCisJYy0+dmly dGlvX2ZlYXR1cmVzICY9IGZlYXR1cmVzOw0KKwlpZiAoYy0+dmlydGlvX2ZlYXR1cmVzICE9IGZl YXR1cmVzKQ0KKwkJZGllKCJ2aG9zdCBkb2VzIG5vdCBzdXBwb3J0IHJlcXVpcmVkIGZlYXR1cmVz Iik7DQorDQorCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShjLT52cSk7IGkrKykgew0K KwkJc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUgZmlsZSA9IHsNCisJCQkuaW5kZXggPSBpLA0KKwkJ fTsNCisJCXVuaW9uIGVwb2xsX3JlZiByZWYgPSB7IC50eXBlID0gRVBPTExfVFlQRV9WSE9TVF9D QUxMLA0KKwkJCQkJLnF1ZXVlID0gaSB9Ow0KKwkJc3RydWN0IGVwb2xsX2V2ZW50IGV2Ow0KKw0K KwkJZmlsZS5mZCA9IGV2ZW50ZmQoMCwgRUZEX05PTkJMT0NLIHwgRUZEX0NMT0VYRUMpOw0KKwkJ cmVmLmZkID0gZmlsZS5mZDsNCisJCWlmIChmaWxlLmZkIDwgMCkNCisJCQlkaWVfcGVycm9yKCJG YWlsZWQgdG8gY3JlYXRlIGNhbGwgZXZlbnRmZCIpOw0KKw0KKwkJcmMgPSBpb2N0bCh2aG9zdF9m ZCwgVkhPU1RfU0VUX1ZSSU5HX0NBTEwsICZmaWxlKTsNCisJCWlmIChyYyA8IDApDQorCQkJZGll X3BlcnJvcigNCisJCQkJIlZIT1NUX1NFVF9WUklOR19DQUxMIGlvY3RsIG9uIC9kZXYvdmhvc3Qt bmV0IGZhaWxlZCIpOw0KKw0KKwkJZXYgPSAoc3RydWN0IGVwb2xsX2V2ZW50KXsgLmRhdGEudTY0 ID0gcmVmLnU2NCwgLmV2ZW50cyA9IEVQT0xMSU4gfTsNCisJCXJjID0gZXBvbGxfY3RsKGMtPmVw b2xsZmQsIEVQT0xMX0NUTF9BREQsIHJlZi5mZCwgJmV2KTsNCisJCWlmIChyYyA8IDApDQorCQkJ ZGllX3BlcnJvcigiRmFpbGVkIHRvIGFkZCBjYWxsIGV2ZW50ZmQgdG8gZXBvbGwiKTsNCisJCWMt PnZxW2ldLmNhbGxfZmQgPSBmaWxlLmZkOw0KKwl9DQorDQorCS8qIDE6MSB0cmFuc2xhdGlvbiAq Lw0KKwl2aG9zdF9tZW1vcnkubWVtLnJlZ2lvbnNbMF0gPSAoc3RydWN0IHZob3N0X21lbW9yeV9y ZWdpb24pew0KKwkJLmd1ZXN0X3BoeXNfYWRkciA9ICh1aW50cHRyX3QpJnZyaW5nX2Rlc2MsDQor CQkvKiBtZW1vcnkgc2l6ZSBzaG91bGQgaW5jbHVkZSB0aGUgbGFzdCBieXRlLCBidXQgd2UgcHJv YmFibHkgbmV2ZXIgc2VuZA0KKwkJICogcHRycyB0aGVyZSBzby4uLg0KKwkJICovDQorCQkubWVt b3J5X3NpemUgPSBzaXplb2YodnJpbmdfZGVzYyksDQorCQkudXNlcnNwYWNlX2FkZHIgPSAodWlu dHB0cl90KSZ2cmluZ19kZXNjLA0KKwl9Ow0KKwl2aG9zdF9tZW1vcnkubWVtLnJlZ2lvbnNbMV0g PSAoc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24pew0KKwkJLmd1ZXN0X3BoeXNfYWRkciA9ICh1 aW50cHRyX3QpJnZyaW5nX2F2YWlsXzAsDQorCQkvKiBtZW1vcnkgc2l6ZSBzaG91bGQgaW5jbHVk ZSB0aGUgbGFzdCBieXRlLCBidXQgd2UgcHJvYmFibHkgbmV2ZXIgc2VuZA0KKwkJCSogcHRycyB0 aGVyZSBzby4uLg0KKwkJCSovDQorCQkubWVtb3J5X3NpemUgPSBzaXplb2YodnJpbmdfYXZhaWxf MCksDQorCQkudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90KSZ2cmluZ19hdmFpbF8wLA0KKwl9 Ow0KKwl2aG9zdF9tZW1vcnkubWVtLnJlZ2lvbnNbMl0gPSAoc3RydWN0IHZob3N0X21lbW9yeV9y ZWdpb24pew0KKwkJLmd1ZXN0X3BoeXNfYWRkciA9ICh1aW50cHRyX3QpJnZyaW5nX2F2YWlsXzEs DQorCQkvKiBtZW1vcnkgc2l6ZSBzaG91bGQgaW5jbHVkZSB0aGUgbGFzdCBieXRlLCBidXQgd2Ug cHJvYmFibHkgbmV2ZXIgc2VuZA0KKwkJCSogcHRycyB0aGVyZSBzby4uLg0KKwkJCSovDQorCQku bWVtb3J5X3NpemUgPSBzaXplb2YodnJpbmdfYXZhaWxfMSksDQorCQkudXNlcnNwYWNlX2FkZHIg PSAodWludHB0cl90KSZ2cmluZ19hdmFpbF8xLA0KKwl9Ow0KKwl2aG9zdF9tZW1vcnkubWVtLnJl Z2lvbnNbM10gPSAoc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24pew0KKwkJLmd1ZXN0X3BoeXNf YWRkciA9ICh1aW50cHRyX3QpJnZyaW5nX3VzZWRfMCwNCisJCS8qIG1lbW9yeSBzaXplIHNob3Vs ZCBpbmNsdWRlIHRoZSBsYXN0IGJ5dGUsIGJ1dCB3ZSBwcm9iYWJseSBuZXZlciBzZW5kDQorCQkJ KiBwdHJzIHRoZXJlIHNvLi4uDQorCQkJKi8NCisJCS5tZW1vcnlfc2l6ZSA9IHNpemVvZih2cmlu Z19hdmFpbF8wKSwNCisJCS51c2Vyc3BhY2VfYWRkciA9ICh1aW50cHRyX3QpJnZyaW5nX3VzZWRf MCwNCisJfTsNCisJdmhvc3RfbWVtb3J5Lm1lbS5yZWdpb25zWzRdID0gKHN0cnVjdCB2aG9zdF9t ZW1vcnlfcmVnaW9uKXsNCisJCS5ndWVzdF9waHlzX2FkZHIgPSAodWludHB0cl90KSZ2cmluZ191 c2VkXzEsDQorCQkvKiBtZW1vcnkgc2l6ZSBzaG91bGQgaW5jbHVkZSB0aGUgbGFzdCBieXRlLCBi dXQgd2UgcHJvYmFibHkgbmV2ZXIgc2VuZA0KKwkJCSogcHRycyB0aGVyZSBzby4uLg0KKwkJCSov DQorCQkubWVtb3J5X3NpemUgPSBzaXplb2YodnJpbmdfYXZhaWxfMSksDQorCQkudXNlcnNwYWNl X2FkZHIgPSAodWludHB0cl90KSZ2cmluZ191c2VkXzEsDQorCX07DQorCXZob3N0X21lbW9yeS5t ZW0ucmVnaW9uc1s1XSA9IChzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbil7DQorCQkuZ3Vlc3Rf cGh5c19hZGRyID0gKHVpbnRwdHJfdCl2aXJ0aW9fcnhfcGt0X2J1ZiwNCisJCS8qIG1lbW9yeSBz aXplIHNob3VsZCBpbmNsdWRlIHRoZSBsYXN0IGJ5dGUsIGJ1dCB3ZSBwcm9iYWJseSBuZXZlciBz ZW5kDQorCQkJKiBwdHJzIHRoZXJlIHNvLi4uDQorCQkJKi8NCisJCS5tZW1vcnlfc2l6ZSA9IHNp emVvZih2aXJ0aW9fcnhfcGt0X2J1ZiksDQorCQkudXNlcnNwYWNlX2FkZHIgPSAodWludHB0cl90 KXZpcnRpb19yeF9wa3RfYnVmLA0KKwl9Ow0KKwl2aG9zdF9tZW1vcnkubWVtLnJlZ2lvbnNbNl0g PSAoc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24pew0KKwkJLmd1ZXN0X3BoeXNfYWRkciA9ICh1 aW50cHRyX3QpcGt0X2J1ZiwNCisJCS8qIG1lbW9yeSBzaXplIHNob3VsZCBpbmNsdWRlIHRoZSBs YXN0IGJ5dGUsIGJ1dCB3ZSBwcm9iYWJseSBuZXZlciBzZW5kDQorCQkJKiBwdHJzIHRoZXJlIHNv Li4uDQorCQkJKi8NCisJCS5tZW1vcnlfc2l6ZSA9IHNpemVvZihwa3RfYnVmKSwNCisJCS51c2Vy c3BhY2VfYWRkciA9ICh1aW50cHRyX3QpcGt0X2J1ZiwNCisJfTsNCisJc3RhdGljX2Fzc2VydCg2 IDwgTl9WSE9TVF9SRUdJT05TKTsNCisNCisJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VU X01FTV9UQUJMRSwgJnZob3N0X21lbW9yeS5tZW0pOw0KKwlpZiAocmMgPCAwKQ0KKwkJZGllX3Bl cnJvcigNCisJCQkiVkhPU1RfU0VUX01FTV9UQUJMRSBpb2N0bCBvbiAvZGV2L3Zob3N0LW5ldCBm YWlsZWQiKTsNCisNCisJLyogVE9ETzogcHJvYmFibHkgaXQgaW5jcmVhc2VzIFJYIHBlcmYgKi8N CisjaWYgMA0KKwlzdHJ1Y3QgaWZyZXEgaWZyOw0KKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlm cikpOw0KKw0KKwlpZiAoaW9jdGwoZmQsIFRVTkdFVElGRiwgJmlmcikgIT0gMCkNCisJCWRpZV9w ZXJyb3IoIlVuYWJsZSB0byBxdWVyeSBUVU5HRVRJRkYgb24gRkQgJWQiLCBmZCk7DQorCX0NCisN CisJaWYgKGlmci5pZnJfZmxhZ3MgJiBJRkZfVk5FVF9IRFIpDQorCQluZXQtPmRldi5mZWF0dXJl cyAmPSB+KDFVTEwgPDwgVklSVElPX05FVF9GX01SR19SWEJVRik7DQorI2VuZGlmDQorCXJjID0g aW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9GRUFUVVJFUywgJmMtPnZpcnRpb19mZWF0dXJlcyk7 DQorCWlmIChyYyA8IDApDQorCQlkaWVfcGVycm9yKCJWSE9TVF9TRVRfRkVBVFVSRVMgaW9jdGwg b24gL2Rldi92aG9zdC1uZXQgZmFpbGVkIik7DQorDQorCS8qIER1cGxpY2F0aW5nIGZvcmVhY2gg cXVldWUgdG8gZm9sbG93IHRoZSBleGFjdCBvcmRlciBmcm9tIFFFTVUgKi8NCisJZm9yIChpbnQg aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGMtPnZxKTsgaSsrKSB7DQorCQlzdHJ1Y3Qgdmhvc3RfdnJp bmdfYWRkciBhZGRyID0gew0KKwkJCS5pbmRleCA9IGksDQorCQkJLmRlc2NfdXNlcl9hZGRyID0g KHVuc2lnbmVkIGxvbmcpdnJpbmdfZGVzY1tpXSwNCisJCQkuYXZhaWxfdXNlcl9hZGRyID0gaSA9 PSAwID8gKHVuc2lnbmVkIGxvbmcpJnZyaW5nX2F2YWlsXzAgOg0KKwkJCQkJCQkJCQkodW5zaWdu ZWQgbG9uZykmdnJpbmdfYXZhaWxfMSwNCisJCQkudXNlZF91c2VyX2FkZHIgPSBpID09IDAgPyAo dW5zaWduZWQgbG9uZykmdnJpbmdfdXNlZF8wIDoNCisJCQkJCQkJCQkJKHVuc2lnbmVkIGxvbmcp JnZyaW5nX3VzZWRfMSwNCisJCQkvKiBHUEEgYWRkciAqLw0KKwkJCS5sb2dfZ3Vlc3RfYWRkciA9 IGkgPT0gMCA/ICh1bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkXzAgOg0KKwkJCQkJCQkJCSAgICh1 bnNpZ25lZCBsb25nKSZ2cmluZ191c2VkXzEsDQorCQl9Ow0KKwkJc3RydWN0IHZob3N0X3ZyaW5n X3N0YXRlIHN0YXRlID0gew0KKwkJCS5pbmRleCA9IGksDQorCQkJLm51bSA9IFZIT1NUX05ERVND UywNCisJCX07DQorCQlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBmaWxlID0gew0KKwkJCS5pbmRl eCA9IGksDQorCQl9Ow0KKw0KKwkJcmMgPSBpb2N0bCh2aG9zdF9mZCwgVkhPU1RfU0VUX1ZSSU5H X05VTSwgJnN0YXRlKTsNCisJCWlmIChyYyA8IDApDQorCQkJZGllX3BlcnJvcigNCisJCQkJIlZI T1NUX1NFVF9WUklOR19OVU0gaW9jdGwgb24gL2Rldi92aG9zdC1uZXQgZmFpbGVkIik7DQorDQor CQlmcHJpbnRmKHN0ZGVyciwgInFpZDogJWRcbiIsIGkpOw0KKwkJZnByaW50ZihzdGRlcnIsICJ2 aG9zdCBkZXNjIGFkZHI6IDB4JWxseFxuIiwgYWRkci5kZXNjX3VzZXJfYWRkcik7DQorCQlmcHJp bnRmKHN0ZGVyciwgInZob3N0IGF2YWlsIGFkZHI6IDB4JWxseFxuIiwgYWRkci5hdmFpbF91c2Vy X2FkZHIpOw0KKwkJZnByaW50ZihzdGRlcnIsICJ2aG9zdCB1c2VkIGFkZHI6IDB4JWxseFxuIiwg YWRkci51c2VkX3VzZXJfYWRkcik7DQorCQlyYyA9IGlvY3RsKHZob3N0X2ZkLCBWSE9TVF9TRVRf VlJJTkdfQUREUiwgJmFkZHIpOw0KKwkJaWYgKHJjIDwgMCkNCisJCQlkaWVfcGVycm9yKA0KKwkJ CQkiVkhPU1RfU0VUX1ZSSU5HX0FERFIgaW9jdGwgb24gL2Rldi92aG9zdC1uZXQgZmFpbGVkIik7 DQorDQorCQlmaWxlLmZkID0gZXZlbnRmZCgwLCBFRkRfTk9OQkxPQ0sgfCBFRkRfQ0xPRVhFQyk7 DQorCQlpZiAoZmlsZS5mZCA8IDApDQorCQkJZGllX3BlcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBr aWNrIGV2ZW50ZmQiKTsNCisJCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NUX1NFVF9WUklOR19L SUNLLCAmZmlsZSk7DQorCQlpZiAocmMgPCAwKQ0KKwkJCWRpZV9wZXJyb3IoDQorCQkJCSJWSE9T VF9TRVRfVlJJTkdfS0lDSyBpb2N0bCBvbiAvZGV2L3Zob3N0LW5ldCBmYWlsZWQiKTsNCisJCWMt PnZxW2ldLmtpY2tfZmQgPSBmaWxlLmZkOw0KKwl9DQorDQogCXJjID0gaW9jdGwoZmQsIChpbnQp VFVOU0VUSUZGLCAmaWZyKTsNCiAJaWYgKHJjIDwgMCkNCiAJCWRpZV9wZXJyb3IoIlRVTlNFVElG RiBpb2N0bCBvbiAvZGV2L25ldC90dW4gZmFpbGVkIik7DQpAQCAtMTM5MCw3ICsxNjg2LDI1IEBA IHN0YXRpYyBpbnQgdGFwX25zX3R1bih2b2lkICphcmcpDQogCWlmICghKGMtPnBhc3RhX2lmaSA9 IGlmX25hbWV0b2luZGV4KGMtPnBhc3RhX2lmbikpKQ0KIAkJZGllKCJUYXAgZGV2aWNlIG9wZW5l ZCBidXQgbm8gbmV0d29yayBpbnRlcmZhY2UgZm91bmQiKTsNCiANCisJcnhfcGt0X3JlZmlsbChj LT52cVswXS5raWNrX2ZkKTsNCisNCisJLyogRHVwbGljYXRpbmcgZm9yZWFjaCBxdWV1ZSB0byBm b2xsb3cgdGhlIGV4YWN0IG9yZGVyIGZyb20gUUVNVSAqLw0KKwlmb3IgKGludCBpID0gMDsgaSA8 IEFSUkFZX1NJWkUoYy0+dnEpOyBpKyspIHsNCisJCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIGZp bGUgPSB7DQorCQkJLmluZGV4ID0gaSwNCisJCQkuZmQgPSBmZCwNCisJCX07DQorDQorCQlmcHJp bnRmKHN0ZGVyciwgInFpZDogJWRcbiIsIGZpbGUuaW5kZXgpOw0KKwkJZnByaW50ZihzdGRlcnIs ICJ0YXAgZmQ6ICVkXG4iLCBmaWxlLmZkKTsNCisJCXJjID0gaW9jdGwodmhvc3RfZmQsIFZIT1NU X05FVF9TRVRfQkFDS0VORCwgJmZpbGUpOw0KKwkJaWYgKHJjIDwgMCkNCisJCQlkaWVfcGVycm9y KA0KKwkJCQkiVkhPU1RfTkVUX1NFVF9CQUNLRU5EIGlvY3RsIG9uIC9kZXYvdmhvc3QtbmV0IGZh aWxlZCIpOw0KKwl9DQorDQogCWMtPmZkX3RhcCA9IGZkOw0KKwljLT5mZF92aG9zdCA9IHZob3N0 X2ZkOw0KIA0KIAlyZXR1cm4gMDsNCiB9DQpkaWZmIC0tZ2l0IGEvdGFwLmggYi90YXAuaA0KaW5k ZXggMGI1YWQxNy4uOTFkM2Y2MiAxMDA2NDQNCi0tLSBhL3RhcC5oDQorKysgYi90YXAuaA0KQEAg LTY5LDYgKzY5LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHRhcF9oZHJfdXBkYXRlKHN0cnVjdCB0 YXBfaGRyICp0aGRyLCBzaXplX3QgbDJsZW4pDQogCQl0aGRyLT52bmV0X2xlbiA9IGh0b25sKGwy bGVuKTsNCiB9DQogDQordm9pZCB2aG9zdF9jYWxsX2NiKHN0cnVjdCBjdHggKmMsIHVuaW9uIGVw b2xsX3JlZiByZWYsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqbm93KTsNCisNCiB1bnNpZ25lZCBs b25nIHRhcF9sMl9tYXhfbGVuKGNvbnN0IHN0cnVjdCBjdHggKmMpOw0KIHZvaWQgKnRhcF9wdXNo X2wyaChjb25zdCBzdHJ1Y3QgY3R4ICpjLCB2b2lkICpidWYsIHVpbnQxNl90IHByb3RvKTsNCiB2 b2lkICp0YXBfcHVzaF9pcDRoKHN0cnVjdCBpcGhkciAqaXA0aCwgc3RydWN0IGluX2FkZHIgc3Jj LA0KLS0gDQoyLjQ5LjANCg0K