From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=fail (p=quarantine dis=none) header.from=redhat.com 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 CF6345A0626 for ; Thu, 29 Oct 2026 19:13:14 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1793297593; 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=3w2fmQ5QaAdmqUzPNUuaJAre2OtVikPnfYtdmA5ZGmY=; b=QPOfaL0wIHYSX90oCmqZCtB3mSC0yDOa0962knt2h5DA8sgFA5+zY4dtbLQrrxZCE2Teju HntehQ2QhTq1HL3oTC358yhUfJ+8ssCMV54i8KdKwioouOJLwJx0aDUc9wn85bOEi1Kdaa uNfdvxH9vVFbYtcYca5abI49KUTyVrE= 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-471-a-t6wvDZMaiPNFttB7x6Ww-1; Thu, 29 Oct 2026 14:13:12 -0400 X-MC-Unique: a-t6wvDZMaiPNFttB7x6Ww-1 X-Mimecast-MFC-AGG-ID: a-t6wvDZMaiPNFttB7x6Ww_1793297591 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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2FC7B1956042 for ; Thu, 29 Oct 2026 18:13:11 +0000 (UTC) Received: from anskuma-thinkpadp1gen7.bengluru.csb (unknown [10.74.80.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C784018005B7; Thu, 29 Oct 2026 18:13:08 +0000 (UTC) From: Anshu Kumari To: sbrivio@redhat.com, passt-dev@passt.top Subject: [PATCH v5 1/2] dhcpv6: Add --dhcpv6-opt with option type table and value parser Date: Thu, 29 Oct 2026 23:43:01 +0530 Message-ID: <20261029181303.714616-2-anskuma@redhat.com> In-Reply-To: <20261029181303.714616-1-anskuma@redhat.com> References: <20261029181303.714616-1-anskuma@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: q_eEPNYiWHQ7hsj5XATggAAaGWLptqC2nNjfLG175Xk_1793297591 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-ID-Hash: RTIPKUUHIFEXRUL2H54IXGOB4TVGXM2J X-Message-ID-Hash: RTIPKUUHIFEXRUL2H54IXGOB4TVGXM2J 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: lvivier@redhat.com, anskuma@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: SW50cm9kdWNlIHRoZSAtLWRoY3B2Ni1vcHQgZmxhZyB0aGF0IGFsbG93cyBzZXR0aW5nIGFyYml0 cmFyeSBESENQdjYNCm9wdGlvbnMgZnJvbSBjb21tYW5kLWxpbmUgaW4gdGhlIGZvcm0gWy0tZGhj cHY2LW9wdCBDT0RFLFZBTFVFXS4NCg0KQWRkIGEgdHlwZSBsb29rdXAgdGFibGUgbWFwcGluZyBv cHRpb24gY29kZXMgdG8gdmFsdWUgdHlwZXMgKElQdjYsDQpJUHY2IGxpc3QsIGludGVnZXIsIHN0 cmluZywgdmVuZG9yIGNsYXNzLCBsZW5ndGgtcHJlZml4ZWQgc3RyaW5nDQpsaXN0KSBhbmQgZGhj cHY2X29wdF9wYXJzZSgpIHRvIGNvbnZlcnQgQ0xJIHN0cmluZ3MgdG8gYmluYXJ5IHdpcmUNCmZv cm1hdC4gSWYgdGhlIHNhbWUgb3B0aW9uIGNvZGUgaXMgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIHRo ZQ0KbGFzdCB2YWx1ZSB3aW5zLg0KDQpMaW5rOiBodHRwczovL2J1Z3MucGFzc3QudG9wL3Nob3df YnVnLmNnaT9pZD0xOTINClNpZ25lZC1vZmYtYnk6IEFuc2h1IEt1bWFyaSA8YW5za3VtYUByZWRo YXQuY29tPg0KLS0tDQp2NToNCiAgLSBSZXBsYWNlZCBvcHRidWZbNTEyXSB3aXRoIG9wdGJ1ZltJ TkFOWV9BRERSU1RSTEVOICogMl0NCiAgLSBBZGRlZCBvZmZzZXQtYmFzZWQgbG9vcCBmb3IgZGhj cHY2X29wdF90b19zdHIoKSB0bw0KICAgIHBhZ2luYXRlIGxvbmcgSVB2NiBsaXN0cw0KICAtIFJl bmFtZWQgYXJyYXkgZGhjcHY2X29wdF90eXBlcyDihpIgZGhjcHY2X29wdCwgcmVuYW1lZA0KICAg IGZ1bmN0aW9uIGRoY3B2Nl9vcHQoKSDihpIgZGhjcHY2X2dldF9vcHQoKSB0byBhdm9pZCBuYW1p bmcgY29uZmxpY3QNCiAgLSBVcGRhdGVkIFJGQyByZWZlcmVuY2VzIGZyb20gODQxNSB0byA5OTE1 DQoNCnY0Og0KICAtIFRoZSBkaGNwdjZfb3B0X2NvZGUgPCAxIGNoZWNrIHdhcyByZXBsYWNlZCB3 aXRoIHByb3BlciB2YWxpZGF0aW9uOg0KICAgIGRoY3B2Nl9vcHRfY29kZSA9PSAwIHx8IGRoY3B2 Nl9vcHRfY29kZSA+IFVJTlQxNl9NQVggaW4gY29uZi5jDQogIC0gQWxsIHVpbnQxNl90L3VpbnQz Ml90IHdyaXRlcyB0byBieXRlIGJ1ZmZlcnMgbm93IHVzZSBpbnRlcm1lZGlhdGUNCiAgICB2YXJp YWJsZXMgKyBtZW1jcHkoKSBpbnN0ZWFkIG9mIGRpcmVjdCBwb2ludGVyIGNhc3RzLg0KICAtIFRo ZSBESENQVjZfT1BUX1NUUiBjYXNlIG5vdyB1c2VzIHNsZW4gPiBidWZfbGVuIGluc3RlYWQgb2Yg c2xlbiA+PSBidWZfbGVuLg0KICAtIE9wdGlvbiAxNyAoVmVuZG9yLXNwZWNpZmljIEluZm8pIGV4 Y2x1ZGVkLg0KICAtIEEgc2VwYXJhdGUgY2hhciBvcHRidWZbNTEyXSB3YXMgYWRkZWQgaW4gY29u Zl9wcmludCgpIGluc3RlYWQgb2YNCiAgICByZXVzaW5nIHRoZSBzbWFsbCBJTkFOWV9BRERSU1RS TEVOLXNpemVkIGJ1ZiBmb3Igb3B0aW9uIHJlbmRlcmluZy4NCiAgLSBpbmV0X250b3AoKSByZXR1 cm4gdmFsdWUgY2hlY2tlZC4NCiAgLSBVc2VzIG9mZiArPSBzdHJsZW4oYnVmICsgb2ZmKSBpbnN0 ZWFkIG9mIG9mZiA9IHN0cmxlbihidWYpIGluDQogICAgdGhlIElQdjYgbGlzdCByZW5kZXJpbmcg bG9vcC4NCiAgLSBJdGVyYXRvciBtYWNybyBhZGRlZCDigJQgZm9yX2VhY2hfaW42X29mZihvZmYs IGxlbikuDQogIC0gVGhlIGFkZHIgYW5kIGFmIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQgYXQgZnVu Y3Rpb24gc2NvcGUNCiAgICBpbiBkaGNwdjZfb3B0X3BhcnNlKCkgcmF0aGVyIHRoYW4gaW5zaWRl IGJsb2NrIHdyYXBwZXJzLg0KICAtIHNucHJpbnRmKCkgYWxpZ25tZW50IGFuZCBsaW5lIGZvcm1h dHRpbmcuDQoNCnYzOg0KICAtIFVzZSBwYXJzZV91bnNpZ25lZCgpLCBwYXJzZV9saXRlcmFsKCks IHBhcnNlX2VvaSgpIGZyb20gcGFyc2UuYw0KICAgIGluc3RlYWQgb2YgbWFudWFsIHN0cnRvdWwo KS9lcnJuby9zdHJjaHIoKSBpbiBkaGNwdjZfb3B0X3BhcnNlKCkNCiAgICBmb3IgVUlOVCBhbmQg VkVORE9SX0NMQVNTIGNhc2VzLg0KICAtIFN0b3JlIG9wdGlvbnMgYXMgcHJlLXBhcnNlZCBiaW5h cnkgaW4gYSBzdGF0aWMgYXJyYXkgaW5kZXhlZCBieQ0KICAgIG9wdGlvbiBjb2RlLCBpbnN0ZWFk IG9mIHN0b3JpbmcgcmF3IHN0cmluZ3MuDQogIC0gQWRkIGRoY3B2Nl9vcHRfdG9fc3RyKCkgdG8g cmVuZGVyIGJpbmFyeSBvcHRpb24gdmFsdWVzIGJhY2sgdG8NCiAgICBwcmludGFibGUgc3RyaW5n cyBmb3Igc3RhcnR1cCBsb2dnaW5nIGluIGNvbmZfcHJpbnQoKS4NCg0KdjI6DQogIC0gUmVuYW1l ZCBjdXN0b21fdjZvcHRzIHRvIGRoY3B2Nl9vcHRzLCBNQVhfQ1VTVE9NX0RIQ1BWNl9PUFRTDQog ICAgdG8gTUFYX0RIQ1BWNl9PUFRTLg0KICAtIERyb3BwZWQgdmFsL2xlbiBmcm9tIGN0eCBzdHJ1 Y3QuDQogIC0gTW92ZWQgZGhjcHY2X2FkZF9vcHRpb24oKSB0byBjb25mLmMgYXMgc3RhdGljDQog ICAgY29uZl9kaGNwdjZfb3B0aW9uKCkuDQogIC0gTWFkZSBkaGNwdjZfb3B0X3BhcnNlKCkgbm9u LXN0YXRpYywgZGVjbGFyZWQgaW4gZGhjcHY2LmgNCiAgLSBPbWl0dGVkIGV4cGxpY2l0IFsyNTZd IGZyb20gZGhjcHY2X29wdF90eXBlc1tdLg0KICAtIE1vdmVkIGNodW5rIGRlY2xhcmF0aW9uIGlu dG8gd2hpbGUgYmxvY2suDQogIC0gUmVtb3ZlZCByZWR1bmRhbnQgIXNsZW4gY2hlY2sgaW4gREhD UFY2X09QVF9TVFIgY2FzZS4NCiAgLSBBbGwgZXJyb3JzIGluIGRoY3B2Nl9vcHRfcGFyc2UoKSBy ZXR1cm4gLTEsIHJlbW92ZWQgZGllKCkNCiAgICBjYWxscy4NCi0tLQ0KIGNvbmYuYyAgIHwgIDI3 ICsrKy0NCiBkaGNwdjYuYyB8IDM2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tDQogZGhjcHY2LmggfCAgIDMgKw0KIHBhc3N0LjEgIHwgIDMx ICsrKysrDQogNCBmaWxlcyBjaGFuZ2VkLCA0MjAgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25z KC0pDQoNCmRpZmYgLS1naXQgYS9jb25mLmMgYi9jb25mLmMNCmluZGV4IDE0OWE0Yzc5Li42NjA3 YWRkMSAxMDA2NDQNCi0tLSBhL2NvbmYuYw0KKysrIGIvY29uZi5jDQpAQCAtNDcsNiArNDcsNyBA QA0KICNpbmNsdWRlICJsaW5lcmVhZC5oIg0KICNpbmNsdWRlICJpc29sYXRpb24uaCINCiAjaW5j bHVkZSAibG9nLmgiDQorI2luY2x1ZGUgImRoY3B2Ni5oIg0KICNpbmNsdWRlICJ2aG9zdF91c2Vy LmgiDQogI2luY2x1ZGUgImVwb2xsX2N0bC5oIg0KICNpbmNsdWRlICJjb25mLmgiDQpAQCAtNjMy LDcgKzYzMyw4IEBAIHN0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUgKmYs IGludCBzdGF0dXMpDQogCQkiICAtUywgLS1zZWFyY2ggTElTVAlTcGFjZS1zZXBhcmF0ZWQgbGlz dCwgc2VhcmNoIGRvbWFpbnNcbiINCiAJCSIgICAgYSBzaW5nbGUsIGVtcHR5IG9wdGlvbiBkaXNh YmxlcyB0aGUgRE5TIHNlYXJjaCBsaXN0XG4iDQogCQkiICAtSCwgLS1ob3N0bmFtZSBOQU1FIAlI b3N0bmFtZSB0byBjb25maWd1cmUgY2xpZW50IHdpdGhcbiINCi0JCSIgIC0tZnFkbiBOQU1FCQlG UUROIHRvIGNvbmZpZ3VyZSBjbGllbnQgd2l0aFxuIik7DQorCQkiICAtLWZxZG4gTkFNRQkJRlFE TiB0byBjb25maWd1cmUgY2xpZW50IHdpdGhcbiINCisJCSIgIC0tZGhjcHY2LW9wdCBDT0RFLFZB TAlTZXQgREhDUHY2IG9wdGlvbiBDT0RFIHRvIFZBTFxuIik7DQogCWlmIChzdHJzdHIobmFtZSwg InBhc3RhIikpDQogCQlGUFJJTlRGKGYsICIgICAgZGVmYXVsdDogZG9uJ3QgdXNlIGFueSBzZWFy Y2ggbGlzdFxuIik7DQogCWVsc2UNCkBAIC04MDAsNiArODAyLDcgQEAgZW51bSBwYXNzdF9tb2Rl cyBjb25mX21vZGUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgKi8NCiBzdGF0aWMgdm9pZCBj b25mX3ByaW50KGNvbnN0IHN0cnVjdCBjdHggKmMpDQogew0KKwljaGFyIG9wdGJ1ZltJTkFOWV9B RERSU1RSTEVOICogMl07DQogCWNoYXIgYnVmW0lOQU5ZX0FERFJTVFJMRU5dOw0KIAlpbnQgaTsN CiANCkBAIC05MDEsNiArOTA0LDEzIEBAIHN0YXRpYyB2b2lkIGNvbmZfcHJpbnQoY29uc3Qgc3Ry dWN0IGN0eCAqYykNCiAJCWluZm8oIiAgICBvdXIgbGluay1sb2NhbDogJXMiLA0KIAkJICAgICBp bmV0X250b3AoQUZfSU5FVDYsICZjLT5pcDYub3VyX3RhcF9sbCwNCiAJCQkgICAgICAgYnVmLCBz aXplb2YoYnVmKSkpOw0KKwkJZm9yIChpID0gMTsgaSA8IFVJTlQxNl9NQVg7IGkrKykgew0KKwkJ CWludCBvZmZzZXQgPSAwOw0KKw0KKwkJCXdoaWxlIChkaGNwdjZfb3B0X3RvX3N0cihpLCBvcHRi dWYsDQorCQkJCQkJIHNpemVvZihvcHRidWYpLCAmb2Zmc2V0KSkNCisJCQkJaW5mbygiICAgIG9w dGlvbiAldTogJXMiLCBpLCBvcHRidWYpOw0KKwkJfQ0KIA0KIGRuczY6DQogCQlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjLT5pcDYuZG5zKTsgaSsrKSB7DQpAQCAtMTMxNyw2ICsxMzI3LDcg QEAgdm9pZCBjb25mKHN0cnVjdCBjdHggKmMsIGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsi Y29uZi1wYXRoIiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCQknYycgfSwNCiAJCXsiY2hyb290 LWZhbGxiYWNrIiwgbm9fYXJndW1lbnQsCU5VTEwsIAkJMzIgfSwNCiAJCXsibm8tcGlkbnMiLAlu b19hcmd1bWVudCwJCU5VTEwsCQkzMyB9LA0KKwkJeyJkaGNwdjYtb3B0IiwJcmVxdWlyZWRfYXJn dW1lbnQsCU5VTEwsCQkzNiB9LA0KIAkJeyAwIH0sDQogCX07DQogCWNvbnN0IGNoYXIgKm9wdHN0 cmluZyA9ICIrZHFmZWw6aHM6YzpGOkk6cDpQOm06YTpuOk06ZzppOm86RDpTOkg6NDYxdDp1OlQ6 VToiOw0KQEAgLTEzMjksNiArMTM0MCw3IEBAIHZvaWQgY29uZihzdHJ1Y3QgY3R4ICpjLCBpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCXVuc2lnbmVkIGxvbmcgbWF4X210dSA9IElQX01BWF9NVFU7 DQogCXN0cnVjdCBmcWRuICpkbnNzID0gYy0+ZG5zX3NlYXJjaDsNCiAJdW5zaWduZWQgaW50IGlm aTQgPSAwLCBpZmk2ID0gMDsNCisJdW5zaWduZWQgbG9uZyBkaGNwdjZfb3B0X2NvZGU7DQogCWJv b2wgb3B0X2FfaXNfcHJlZml4ID0gZmFsc2U7DQogCWNvbnN0IGNoYXIgKmxvZ2ZpbGUgPSBOVUxM Ow0KIAljaGFyICpydW5hcyA9IE5VTEw7DQpAQCAtMTU2Nyw2ICsxNTc5LDE5IEBAIHZvaWQgY29u ZihzdHJ1Y3QgY3R4ICpjLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogDQogCQkJYy0+bm9fcGlk bnMgPSB0cnVlOw0KIAkJCWJyZWFrOw0KKwkJY2FzZSAzNjoNCisJCQlwID0gb3B0YXJnOw0KKw0K KwkJCWlmICghcGFyc2VfdW5zaWduZWQoJnAsIDAsICZkaGNwdjZfb3B0X2NvZGUpIHx8DQorCQkJ ICAgICFwYXJzZV9saXRlcmFsKCZwLCAiLCIpKQ0KKwkJCQlkaWUoIi0tZGhjcHY2LW9wdCByZXF1 aXJlcyBDT0RFLFZBTFVFIGZvcm1hdCIpOw0KKw0KKwkJCWlmIChkaGNwdjZfb3B0X2NvZGUgPT0g MCB8fA0KKwkJCSAgICBkaGNwdjZfb3B0X2NvZGUgPiBVSU5UMTZfTUFYKQ0KKwkJCQlkaWUoIklu dmFsaWQgREhDUHY2IG9wdGlvbiBjb2RlOiAlcyIsIG9wdGFyZyk7DQorDQorCQkJZGhjcHY2X3Nl dF9vcHQoZGhjcHY2X29wdF9jb2RlLCBwKTsNCisJCQlicmVhazsNCiAJCWNhc2UgJ2QnOg0KIAkJ CWMtPmRlYnVnID0gMTsNCiAJCQljLT5xdWlldCA9IDA7DQpkaWZmIC0tZ2l0IGEvZGhjcHY2LmMg Yi9kaGNwdjYuYw0KaW5kZXggMjljN2UzMjAuLmE5OGYxYTljIDEwMDY0NA0KLS0tIGEvZGhjcHY2 LmMNCisrKyBiL2RoY3B2Ni5jDQpAQCAtMzEsNiArMzEsOCBAQA0KICNpbmNsdWRlICJwYXNzdC5o Ig0KICNpbmNsdWRlICJ0YXAuaCINCiAjaW5jbHVkZSAibG9nLmgiDQorI2luY2x1ZGUgImluYW55 LmgiDQorI2luY2x1ZGUgInBhcnNlLmgiDQogDQogLyoqDQogICogc3RydWN0IG9wdF9oZHIgLSBE SENQdjYgb3B0aW9uIGhlYWRlcg0KQEAgLTYzLDYgKzY1LDExIEBAIHN0cnVjdCBvcHRfaGRyIHsN CiAjZGVmaW5lIE9QVF9NQVhfU0laRQkJSVBWNl9NSU5fTVRVIC0gKHNpemVvZihzdHJ1Y3QgaXB2 NmhkcikgKyBcDQogCQkJCQkJVURQX01TR19IRFJfU0laRSkNCiANCisjZGVmaW5lIGZvcl9lYWNo X2luNl9vZmYob2ZmLCBzdGFydCwgbGVuKQkJCQlcDQorCWZvciAoKG9mZikgPSAoc3RhcnQpOwkJ CQkJCVwNCisJICAgICAob2ZmKSArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpIDw9ICh1bnNpZ25l ZCBpbnQpKGxlbik7CVwNCisJICAgICAob2ZmKSArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkN CisNCiAvKioNCiAgKiBzdHJ1Y3Qgb3B0X2NsaWVudF9pZCAtIERIQ1B2NiBDbGllbnQgSWRlbnRp ZmllciBvcHRpb24NCiAgKiBAaGRyOgkJT3B0aW9uIGhlYWRlcg0KQEAgLTI3OSw3ICsyODYsMzUx IEBAIHN0YXRpYyBzdHJ1Y3QgcmVzcF9ub3Rfb25fbGlua190IHsNCiB9Ow0KIA0KIC8qKg0KLSAq IGRoY3B2Nl9vcHQoKSAtIEdldCBvcHRpb24gZnJvbSBESENQdjYgbWVzc2FnZQ0KKyAqIGVudW0g ZGhjcHY2X29wdF90eXBlIC0gREhDUHY2IG9wdGlvbiB2YWx1ZSB0eXBlcw0KKyAqIEBESENQVjZf T1BUX05PTkU6CQlVbnN1cHBvcnRlZCBvciB1bmtub3duIG9wdGlvbg0KKyAqIEBESENQVjZfT1BU X1NUUjoJCVZhcmlhYmxlLWxlbmd0aCBzdHJpbmcNCisgKiBAREhDUFY2X09QVF9JUFY2OgkJU2lu Z2xlIElQdjYgYWRkcmVzcw0KKyAqIEBESENQVjZfT1BUX0lQVjZfTElTVDoJTXVsdGlwbGUgSVB2 NiBhZGRyZXNzZXMsIGNvbW1hLXNlcGFyYXRlZA0KKyAqIEBESENQVjZfT1BUX1VJTlQ4OgkJVW5z aWduZWQgOC1iaXQgaW50ZWdlcg0KKyAqIEBESENQVjZfT1BUX1VJTlQxNjoJCVVuc2lnbmVkIDE2 LWJpdCBpbnRlZ2VyDQorICogQERIQ1BWNl9PUFRfVUlOVDMyOgkJVW5zaWduZWQgMzItYml0IGlu dGVnZXINCisgKiBAREhDUFY2X09QVF9WRU5ET1JfQ0xBU1M6CUVudGVycHJpc2UgbnVtYmVyICsg bGVuZ3RoLXByZWZpeGVkIGRhdGENCisgKiBAREhDUFY2X09QVF9MRU5fU1RSX0xJU1Q6CUxlbmd0 aC1wcmVmaXhlZCBzdHJpbmcgbGlzdA0KKyAqLw0KK2VudW0gZGhjcHY2X29wdF90eXBlIHsNCisJ REhDUFY2X09QVF9OT05FLA0KKwlESENQVjZfT1BUX1NUUiwNCisJREhDUFY2X09QVF9JUFY2LA0K KwlESENQVjZfT1BUX0lQVjZfTElTVCwNCisJREhDUFY2X09QVF9VSU5UOCwNCisJREhDUFY2X09Q VF9VSU5UMTYsDQorCURIQ1BWNl9PUFRfVUlOVDMyLA0KKwlESENQVjZfT1BUX1ZFTkRPUl9DTEFT UywNCisJREhDUFY2X09QVF9MRU5fU1RSX0xJU1QsDQorfTsNCisNCisvKioNCisgKiBkaGNwdjZf b3B0IC0gRGVzY3JpcHRpb24gb2YgREhDUHY2IG9wdGlvbnMgKHZhbHVlIHR5cGUpLCBpbmRleGVk IGJ5IGNvZGUNCisgKiBSRkMgOTkxNSBvcHRpb25zOiA3LCAxNSwgMTYsIDMyLCA4MiwgODMNCisg KiBSRkMgNTk3MCBvcHRpb25zOiA1OSwgNjANCisgKiBSRkMgNDA3NSBvcHRpb25zOiAzMQ0KKyAq Lw0KK3N0YXRpYyBjb25zdCBlbnVtIGRoY3B2Nl9vcHRfdHlwZSBkaGNwdjZfb3B0W10gPSB7DQor CVs3XSAgID0gREhDUFY2X09QVF9VSU5UOCwJCS8qIFByZWZlcmVuY2UgKi8NCisJWzE1XSAgPSBE SENQVjZfT1BUX0xFTl9TVFJfTElTVCwJLyogVXNlciBDbGFzcyAqLw0KKwlbMTZdICA9IERIQ1BW Nl9PUFRfVkVORE9SX0NMQVNTLAkvKiBWZW5kb3IgQ2xhc3MgKi8NCisJWzMxXSAgPSBESENQVjZf T1BUX0lQVjZfTElTVCwJCS8qIFNOVFAgU2VydmVycyAqLw0KKwlbMzJdICA9IERIQ1BWNl9PUFRf VUlOVDMyLAkJLyogSW5mb3JtYXRpb24gUmVmcmVzaCBUaW1lICovDQorCVs1OV0gID0gREhDUFY2 X09QVF9TVFIsCQkJLyogQm9vdCBGaWxlIFVSTCAqLw0KKwlbNjBdICA9IERIQ1BWNl9PUFRfTEVO X1NUUl9MSVNULAkvKiBCb290IEZpbGUgUGFyYW1zICovDQorCVs4Ml0gID0gREhDUFY2X09QVF9V SU5UMzIsCQkvKiBTT0xfTUFYX1JUICovDQorCVs4M10gID0gREhDUFY2X09QVF9VSU5UMzIsCQkv KiBJTkZfTUFYX1JUICovDQorfTsNCisNCisvKioNCisgKiBkaGNwdjZfb3B0X3BhcnNlKCkgLSBQ YXJzZSBhIERIQ1B2NiBvcHRpb24gdmFsdWUgc3RyaW5nIGludG8gYmluYXJ5DQorICogQGNvZGU6 CURIQ1B2NiBvcHRpb24gY29kZQ0KKyAqIEBzdHI6CVZhbHVlIHN0cmluZyBmcm9tIGNvbW1hbmQg bGluZQ0KKyAqIEBidWY6CU91dHB1dCBidWZmZXIgZm9yIGJpbmFyeSB2YWx1ZQ0KKyAqIEBidWZf bGVuOglTaXplIG9mIG91dHB1dCBidWZmZXINCisgKg0KKyAqIFJldHVybjogbnVtYmVyIG9mIGJ5 dGVzIHdyaXR0ZW4gdG8gQGJ1Ziwgb3IgLTEgb24gZXJyb3INCisgKi8NCitzdGF0aWMgaW50IGRo Y3B2Nl9vcHRfcGFyc2UodWludDE2X3QgY29kZSwgY29uc3QgY2hhciAqc3RyLA0KKwkJCSAgICB1 aW50OF90ICpidWYsIHNpemVfdCBidWZfbGVuKQ0KK3sNCisJZW51bSBkaGNwdjZfb3B0X3R5cGUg dHlwZTsNCisJdW5pb24gaW5hbnlfYWRkciBhZGRyOw0KKwl1bnNpZ25lZCBsb25nIHZhbDsNCisJ dWludDE2X3Qgc2xlbl9uZXQ7DQorCXNhX2ZhbWlseV90IGFmOw0KKwl1aW50OF90IHdpZHRoOw0K Kwl1aW50MzJfdCBlbnQ7DQorCXNpemVfdCBzbGVuOw0KKwlpbnQgbGVuOw0KKw0KKwlpZiAoISpz dHIpDQorCQlyZXR1cm4gLTE7DQorDQorCWlmIChjb2RlID49IEFSUkFZX1NJWkUoZGhjcHY2X29w dCkpDQorCQlyZXR1cm4gLTE7DQorDQorCXR5cGUgPSBkaGNwdjZfb3B0W2NvZGVdOw0KKw0KKwlz d2l0Y2ggKHR5cGUpIHsNCisJY2FzZSBESENQVjZfT1BUX05PTkU6DQorCQlyZXR1cm4gLTE7DQor CWNhc2UgREhDUFY2X09QVF9JUFY2Og0KKwljYXNlIERIQ1BWNl9PUFRfSVBWNl9MSVNUOg0KKwkJ bGVuID0gMDsNCisNCisJCWRvIHsNCisJCQlpZiAobGVuICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRk cikgPiBidWZfbGVuKQ0KKwkJCQlyZXR1cm4gLTE7DQorDQorCQkJaWYgKCFwYXJzZV9pbmFueV8o JnN0ciwgJmFkZHIsICZhZikgfHwgYWYgIT0gQUZfSU5FVDYpDQorCQkJCXJldHVybiAtMTsNCisN CisJCQltZW1jcHkoYnVmICsgbGVuLCAmYWRkci5hNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikp Ow0KKwkJCWxlbiArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsNCisNCisJCQlpZiAodHlwZSA9 PSBESENQVjZfT1BUX0lQVjYpDQorCQkJCWJyZWFrOw0KKwkJfSB3aGlsZSAocGFyc2VfbGl0ZXJh bCgmc3RyLCAiLCIpKTsNCisNCisJCWlmICghbGVuIHx8ICFwYXJzZV9lb2koc3RyKSkNCisJCQly ZXR1cm4gLTE7DQorDQorCQlyZXR1cm4gbGVuOw0KKwljYXNlIERIQ1BWNl9PUFRfVUlOVDg6DQor CWNhc2UgREhDUFY2X09QVF9VSU5UMTY6DQorCWNhc2UgREhDUFY2X09QVF9VSU5UMzI6DQorCQlp ZiAodHlwZSA9PSBESENQVjZfT1BUX1VJTlQ4KQ0KKwkJCXdpZHRoID0gMTsNCisJCWVsc2UgaWYg KHR5cGUgPT0gREhDUFY2X09QVF9VSU5UMTYpDQorCQkJd2lkdGggPSAyOw0KKwkJZWxzZQ0KKwkJ CXdpZHRoID0gNDsNCisNCisJCWlmIChidWZfbGVuIDwgd2lkdGgpDQorCQkJcmV0dXJuIC0xOw0K Kw0KKwkJaWYgKCFwYXJzZV91bnNpZ25lZCgmc3RyLCAwLCAmdmFsKSB8fCAhcGFyc2VfZW9pKHN0 cikgfHwNCisJCSAgICB2YWwgPj0gKDFVTEwgPDwgKHdpZHRoICogOCkpKQ0KKwkJCXJldHVybiAt MTsNCisNCisJCWlmICh0eXBlID09IERIQ1BWNl9PUFRfVUlOVDE2KSB7DQorCQkJdWludDE2X3Qg djE2ID0gaHRvbnModmFsKTsNCisJCQltZW1jcHkoYnVmLCAmdjE2LCBzaXplb2YodjE2KSk7DQor CQl9IGVsc2UgaWYgKHR5cGUgPT0gREhDUFY2X09QVF9VSU5UMzIpIHsNCisJCQl1aW50MzJfdCB2 MzIgPSBodG9ubCh2YWwpOw0KKwkJCW1lbWNweShidWYsICZ2MzIsIHNpemVvZih2MzIpKTsNCisJ CX0gZWxzZSB7DQorCQkJYnVmWzBdID0gdmFsOw0KKwkJfQ0KKw0KKwkJcmV0dXJuIHdpZHRoOw0K KwljYXNlIERIQ1BWNl9PUFRfU1RSOg0KKwkJc2xlbiA9IHN0cmxlbihzdHIpOw0KKw0KKwkJaWYg KHNsZW4gPiBidWZfbGVuKQ0KKwkJCXJldHVybiAtMTsNCisNCisJCW1lbWNweShidWYsIHN0ciwg c2xlbik7DQorDQorCQlyZXR1cm4gc2xlbjsNCisJY2FzZSBESENQVjZfT1BUX1ZFTkRPUl9DTEFT UzoNCisJCWlmICghcGFyc2VfdW5zaWduZWQoJnN0ciwgMCwgJnZhbCkgfHwNCisJCSAgICAhcGFy c2VfbGl0ZXJhbCgmc3RyLCAiOiIpIHx8IHZhbCA+IFVJTlQzMl9NQVgpDQorCQkJcmV0dXJuIC0x Ow0KKw0KKwkJc2xlbiA9IHN0cmxlbihzdHIpOw0KKwkJaWYgKCFzbGVuKQ0KKwkJCXJldHVybiAt MTsNCisNCisJCWxlbiA9IHNpemVvZih1aW50MzJfdCkgKyBzaXplb2YodWludDE2X3QpICsgc2xl bjsNCisJCWlmICgoc2l6ZV90KWxlbiA+IGJ1Zl9sZW4pDQorCQkJcmV0dXJuIC0xOw0KKw0KKwkJ ZW50ID0gaHRvbmwodmFsKTsNCisJCW1lbWNweShidWYsICZlbnQsIHNpemVvZihlbnQpKTsNCisN CisJCXNsZW5fbmV0ID0gaHRvbnMoc2xlbik7DQorCQltZW1jcHkoYnVmICsgc2l6ZW9mKHVpbnQz Ml90KSwgJnNsZW5fbmV0LCBzaXplb2Yoc2xlbl9uZXQpKTsNCisNCisJCW1lbWNweShidWYgKyBz aXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQxNl90KSwgc3RyLCBzbGVuKTsNCisNCisJCXJl dHVybiBsZW47DQorCWNhc2UgREhDUFY2X09QVF9MRU5fU1RSX0xJU1Q6DQorCQlsZW4gPSAwOw0K Kw0KKwkJd2hpbGUgKCpzdHIpIHsNCisJCQlzbGVuID0gc3RyY3NwbihzdHIsICIsIik7DQorCQkJ aWYgKCFzbGVuKQ0KKwkJCQlyZXR1cm4gLTE7DQorDQorCQkJaWYgKGxlbiArIChpbnQpKHNpemVv Zih1aW50MTZfdCkgKyBzbGVuKSA+IChpbnQpYnVmX2xlbikNCisJCQkJcmV0dXJuIC0xOw0KKw0K KwkJCXNsZW5fbmV0ID0gaHRvbnMoc2xlbik7DQorCQkJbWVtY3B5KGJ1ZiArIGxlbiwgJnNsZW5f bmV0LCBzaXplb2Yoc2xlbl9uZXQpKTsNCisJCQlsZW4gKz0gc2l6ZW9mKHVpbnQxNl90KTsNCisN CisJCQltZW1jcHkoYnVmICsgbGVuLCBzdHIsIHNsZW4pOw0KKwkJCWxlbiArPSBzbGVuOw0KKw0K KwkJCXN0ciArPSBzbGVuOw0KKwkJCWlmICgqc3RyID09ICcsJykNCisJCQkJc3RyKys7DQorCQl9 DQorDQorCQlpZiAoIWxlbikNCisJCQlyZXR1cm4gLTE7DQorDQorCQlyZXR1cm4gbGVuOw0KKwl9 DQorDQorCXJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogc3RydWN0IGRoY3B2Nl91c2VyX29w dHMgLSBVc2VyLXNwZWNpZmllZCBESENQdjYgb3B0aW9ucyBmcm9tIC0tZGhjcHY2LW9wdA0KKyAq IEB2YWw6CUJpbmFyeSBvcHRpb24gdmFsdWUgaW4gd2lyZSBmb3JtYXQNCisgKiBAbGVuOglMZW5n dGggb2YgQHZhbCBpbiBieXRlcywgMCBpZiBub3Qgc2V0DQorICovDQorc3RhdGljIHN0cnVjdCB7 DQorCXVpbnQ4X3QgdmFsW1VJTlQxNl9NQVhdOw0KKwlpbnQgbGVuOw0KK30gZGhjcHY2X3VzZXJf b3B0c1tBUlJBWV9TSVpFKGRoY3B2Nl9vcHQpXTsNCisNCisvKioNCisgKiBkaGNwdjZfb3B0X3Rv X3N0cigpIC0gUmVuZGVyIGEgYmluYXJ5IERIQ1B2NiBvcHRpb24gdmFsdWUgdG8gcHJpbnRhYmxl IHN0cmluZw0KKyAqIEBjb2RlOglESENQdjYgb3B0aW9uIGNvZGUNCisgKiBAYnVmOglPdXRwdXQg c3RyaW5nIGJ1ZmZlcg0KKyAqIEBidWZfbGVuOglTaXplIG9mIG91dHB1dCBidWZmZXINCisgKiBA b2ZmOglPcGFxdWUgYnl0ZSBvZmZzZXQgaW50byBvcHRpb24gdmFsdWUsIGNhbGxlciBzZXRzIHRv IDAgaW5pdGlhbGx5DQorICoNCisgKiBSZXR1cm46IHBvaW50ZXIgdG8gQGJ1ZiBpZiBvcHRpb24g ZGF0YSB3YXMgcmVuZGVyZWQsIE5VTEwgd2hlbiBkb25lDQorICovDQorY29uc3QgY2hhciAqZGhj cHY2X29wdF90b19zdHIodWludDE2X3QgY29kZSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwN CisJCQkgICAgICBpbnQgKm9mZikNCit7DQorCWVudW0gZGhjcHY2X29wdF90eXBlIHR5cGU7DQor CXVpbnQ4X3QgKm9wdF92YWw7DQorCXVpbnQzMl90IHZhbCA9IDA7DQorCWludCBidWZfb2ZmID0g MDsNCisJdW5zaWduZWQgaW50IGk7DQorCXVpbnQxNl90IHNsZW47DQorCWludCAqb3B0X2xlbjsN CisNCisJaWYgKGNvZGUgPj0gQVJSQVlfU0laRShkaGNwdjZfdXNlcl9vcHRzKSkNCisJCXJldHVy biBOVUxMOw0KKw0KKwlvcHRfbGVuID0gJmRoY3B2Nl91c2VyX29wdHNbY29kZV0ubGVuOw0KKwlp ZiAoISpvcHRfbGVuKQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCW9wdF92YWwgPSBkaGNwdjZfdXNl cl9vcHRzW2NvZGVdLnZhbDsNCisJdHlwZSA9IGRoY3B2Nl9vcHRbY29kZV07DQorDQorCXN3aXRj aCAodHlwZSkgew0KKwljYXNlIERIQ1BWNl9PUFRfSVBWNjoNCisJY2FzZSBESENQVjZfT1BUX0lQ VjZfTElTVDoNCisJCWZvcl9lYWNoX2luNl9vZmYoaSwgKm9mZiwgKm9wdF9sZW4pIHsNCisJCQlp ZiAoYnVmX29mZikgew0KKwkJCQlpZiAoYnVmX29mZiArIDEgPj0gKGludClidWZfbGVuKQ0KKwkJ CQkJYnJlYWs7DQorCQkJCWJ1ZltidWZfb2ZmKytdID0gJywnOw0KKwkJCX0NCisJCQlpZiAoIWlu ZXRfbnRvcChBRl9JTkVUNiwgb3B0X3ZhbCArIGksDQorCQkJCSAgICAgICBidWYgKyBidWZfb2Zm LCBidWZfbGVuIC0gYnVmX29mZikpDQorCQkJCWJyZWFrOw0KKwkJCWJ1Zl9vZmYgKz0gc3RybGVu KGJ1ZiArIGJ1Zl9vZmYpOw0KKwkJCSpvZmYgPSBpICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7 DQorCQl9DQorDQorCQlpZiAoIWJ1Zl9vZmYpDQorCQkJcmV0dXJuIE5VTEw7DQorDQorCQlyZXR1 cm4gYnVmOw0KKwljYXNlIERIQ1BWNl9PUFRfVUlOVDg6DQorCWNhc2UgREhDUFY2X09QVF9VSU5U MTY6DQorCWNhc2UgREhDUFY2X09QVF9VSU5UMzI6DQorCQlpZiAoKm9mZikNCisJCQlyZXR1cm4g TlVMTDsNCisNCisJCWlmICgqb3B0X2xlbiA9PSAxKSB7DQorCQkJdmFsID0gb3B0X3ZhbFswXTsN CisJCX0gZWxzZSBpZiAoKm9wdF9sZW4gPT0gMikgew0KKwkJCXVpbnQxNl90IHYxNjsNCisJCQlt ZW1jcHkoJnYxNiwgb3B0X3ZhbCwgc2l6ZW9mKHYxNikpOw0KKwkJCXZhbCA9IG50b2hzKHYxNik7 DQorCQl9IGVsc2UgaWYgKCpvcHRfbGVuID09IDQpIHsNCisJCQltZW1jcHkoJnZhbCwgb3B0X3Zh bCwgc2l6ZW9mKHZhbCkpOw0KKwkJCXZhbCA9IG50b2hsKHZhbCk7DQorCQl9DQorDQorCQkodm9p ZClzbnByaW50ZihidWYsIGJ1Zl9sZW4sICIldSIsIHZhbCk7DQorCQkqb2ZmID0gKm9wdF9sZW47 DQorCQlyZXR1cm4gYnVmOw0KKwljYXNlIERIQ1BWNl9PUFRfU1RSOg0KKwkJaWYgKCpvZmYpDQor CQkJcmV0dXJuIE5VTEw7DQorDQorCQkodm9pZClzbnByaW50ZihidWYsIGJ1Zl9sZW4sICIlLipz IiwgKm9wdF9sZW4sIG9wdF92YWwpOw0KKwkJKm9mZiA9ICpvcHRfbGVuOw0KKwkJcmV0dXJuIGJ1 ZjsNCisJY2FzZSBESENQVjZfT1BUX1ZFTkRPUl9DTEFTUzoNCisJCWlmICgqb2ZmKQ0KKwkJCXJl dHVybiBOVUxMOw0KKw0KKwkJaWYgKCpvcHRfbGVuIDwgKGludCkoc2l6ZW9mKHVpbnQzMl90KSAr IHNpemVvZih1aW50MTZfdCkpKQ0KKwkJCXJldHVybiBOVUxMOw0KKw0KKwkJbWVtY3B5KCZ2YWws IG9wdF92YWwsIHNpemVvZih2YWwpKTsNCisJCW1lbWNweSgmc2xlbiwgb3B0X3ZhbCArIHNpemVv Zih1aW50MzJfdCksIHNpemVvZihzbGVuKSk7DQorDQorCQkodm9pZClzbnByaW50ZihidWYsIGJ1 Zl9sZW4sICIldTolLipzIiwNCisJCQkgICAgICAgbnRvaGwodmFsKSwgbnRvaHMoc2xlbiksDQor CQkJICAgICAgIG9wdF92YWwgKyBzaXplb2YodWludDMyX3QpICsgc2l6ZW9mKHVpbnQxNl90KSk7 DQorCQkqb2ZmID0gKm9wdF9sZW47DQorCQlyZXR1cm4gYnVmOw0KKwljYXNlIERIQ1BWNl9PUFRf TEVOX1NUUl9MSVNUOg0KKwkJaWYgKCpvZmYpDQorCQkJcmV0dXJuIE5VTEw7DQorDQorCQlpID0g MDsNCisJCXdoaWxlIChpICsgc2l6ZW9mKHVpbnQxNl90KSA8PSAodW5zaWduZWQgaW50KSpvcHRf bGVuKSB7DQorCQkJbWVtY3B5KCZzbGVuLCBvcHRfdmFsICsgaSwgc2l6ZW9mKHNsZW4pKTsNCisJ CQlzbGVuID0gbnRvaHMoc2xlbik7DQorCQkJaSArPSBzaXplb2YodWludDE2X3QpOw0KKw0KKwkJ CWlmIChpICsgc2xlbiA+ICh1bnNpZ25lZCBpbnQpKm9wdF9sZW4pDQorCQkJCWJyZWFrOw0KKw0K KwkJCWlmIChidWZfb2ZmKSB7DQorCQkJCWlmIChidWZfb2ZmICsgMSA+PSAoaW50KWJ1Zl9sZW4p DQorCQkJCQlyZXR1cm4gTlVMTDsNCisJCQkJYnVmW2J1Zl9vZmYrK10gPSAnLCc7DQorCQkJfQ0K KwkJCWlmIChidWZfb2ZmICsgc2xlbiA+PSAoaW50KWJ1Zl9sZW4pDQorCQkJCXJldHVybiBOVUxM Ow0KKwkJCW1lbWNweShidWYgKyBidWZfb2ZmLCBvcHRfdmFsICsgaSwgc2xlbik7DQorCQkJYnVm X29mZiArPSBzbGVuOw0KKwkJCWkgKz0gc2xlbjsNCisJCX0NCisJCWJ1ZltidWZfb2ZmXSA9ICdc MCc7DQorCQkqb2ZmID0gKm9wdF9sZW47DQorCQlyZXR1cm4gYnVmOw0KKwlkZWZhdWx0Og0KKwkJ cmV0dXJuIE5VTEw7DQorCX0NCit9DQorDQorLyoqDQorICogZGhjcHY2X3NldF9vcHQoKSAtIFBh cnNlIGFuZCBzdG9yZSBhIHVzZXItc3BlY2lmaWVkIERIQ1B2NiBvcHRpb24NCisgKiBAY29kZToJ REhDUHY2IG9wdGlvbiBjb2RlDQorICogQHZhbF9zdHI6CVZhbHVlIHN0cmluZyBmcm9tIGNvbW1h bmQgbGluZQ0KKyAqLw0KK3ZvaWQgZGhjcHY2X3NldF9vcHQodWludDE2X3QgY29kZSwgY29uc3Qg Y2hhciAqdmFsX3N0cikNCit7DQorCWludCByZXQ7DQorDQorCWlmIChjb2RlID49IEFSUkFZX1NJ WkUoZGhjcHY2X29wdCkgfHwNCisJICAgIGRoY3B2Nl9vcHRbY29kZV0gPT0gREhDUFY2X09QVF9O T05FKQ0KKwkJZGllKCJESENQdjYgb3B0aW9uICV1IGlzIG5vdCBzdXBwb3J0ZWQiLCBjb2RlKTsN CisNCisJcmV0ID0gZGhjcHY2X29wdF9wYXJzZShjb2RlLCB2YWxfc3RyLA0KKwkJCSAgICAgICBk aGNwdjZfdXNlcl9vcHRzW2NvZGVdLnZhbCwNCisJCQkgICAgICAgc2l6ZW9mKGRoY3B2Nl91c2Vy X29wdHNbY29kZV0udmFsKSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZGllKCJJbnZhbGlkIHZhbHVl IGZvciBESENQdjYgb3B0aW9uICV1OiAlcyIsIGNvZGUsIHZhbF9zdHIpOw0KKw0KKwlkaGNwdjZf dXNlcl9vcHRzW2NvZGVdLmxlbiA9IHJldDsNCit9DQorDQorLyoqDQorICogZGhjcHY2X2dldF9v cHQoKSAtIEdldCBvcHRpb24gZnJvbSBESENQdjYgbWVzc2FnZQ0KICAqIEBkYXRhOglCdWZmZXIg d2l0aCBvcHRpb25zLCBzZXQgdG8gbWF0Y2hpbmcgb3B0aW9uIG9uIHJldHVybg0KICAqIEB0eXBl OglPcHRpb24gdHlwZSB0byBsb29rIHVwLCBuZXR3b3JrIG9yZGVyDQogICoNCkBAIC0yODcsNyAr NjM4LDcgQEAgc3RhdGljIHN0cnVjdCByZXNwX25vdF9vbl9saW5rX3Qgew0KICAqICAgICAgICAg b3IgZmFsc2Ugb24gbWFsZm9ybWVkIG9yIG1pc3Npbmcgb3B0aW9uIGFuZCBAZGF0YSBpcw0KICAq ICAgICAgICAgdW5tb2RpZmllZC4NCiAgKi8NCi1zdGF0aWMgYm9vbCBkaGNwdjZfb3B0KHN0cnVj dCBpb3ZfdGFpbCAqZGF0YSwgdWludDE2X3QgdHlwZSkNCitzdGF0aWMgYm9vbCBkaGNwdjZfZ2V0 X29wdChzdHJ1Y3QgaW92X3RhaWwgKmRhdGEsIHVpbnQxNl90IHR5cGUpDQogew0KIAlzdHJ1Y3Qg aW92X3RhaWwgaGVhZCA9ICpkYXRhOw0KIAlzdHJ1Y3Qgb3B0X2hkciBvX3N0b3JhZ2U7DQpAQCAt MzM0LDEzICs2ODUsMTMgQEAgc3RhdGljIGJvb2wgZGhjcHY2X2lhX25vdG9ubGluayhzdHJ1Y3Qg aW92X3RhaWwgKmRhdGEsDQogDQogCWZvcmVhY2goaWFfdHlwZSwgaWFfdHlwZXMpIHsNCiAJCWN1 cnJlbnQgPSAqZGF0YTsNCi0JCXdoaWxlIChkaGNwdjZfb3B0KCZjdXJyZW50LCAqaWFfdHlwZSkp IHsNCisJCXdoaWxlIChkaGNwdjZfZ2V0X29wdCgmY3VycmVudCwgKmlhX3R5cGUpKSB7DQogCQkJ aWFfYmFzZSA9IGN1cnJlbnQ7DQogCQkJaWEgPSBJT1ZfUkVNT1ZFX0hFQURFUigmY3VycmVudCwg aWFfc3RvcmFnZSk7DQogCQkJaWYgKCFpYSB8fCBudG9ocyhpYS0+aGRyLmwpIDwgT1BUX1ZTSVpF KGlhX25hKSkNCiAJCQkJZ290byBub3Rmb3VuZDsNCiANCi0JCQl3aGlsZSAoZGhjcHY2X29wdCgm Y3VycmVudCwgT1BUX0lBQUFEUikpIHsNCisJCQl3aGlsZSAoZGhjcHY2X2dldF9vcHQoJmN1cnJl bnQsIE9QVF9JQUFBRFIpKSB7DQogCQkJCWggPSBJT1ZfUEVFS19IRUFERVIoJmN1cnJlbnQsIGhf c3RvcmFnZSk7DQogCQkJCWlmICghaCB8fCBudG9ocyhoLT5sKSAhPSBPUFRfVlNJWkUoaWFfYWRk cikpDQogCQkJCQlnb3RvIG5vdGZvdW5kOw0KQEAgLTUyMyw3ICs4NzQsNyBAQCBzdGF0aWMgc2l6 ZV90IGRoY3B2Nl9jbGllbnRfZnFkbl9maWxsKGNvbnN0IHN0cnVjdCBpb3ZfdGFpbCAqZGF0YSwN CiAJbyA9IChzdHJ1Y3Qgb3B0X2NsaWVudF9mcWRuICopKGJ1ZiArIG9mZnNldCk7DQogCW8tPmZs YWdzID0gMHgwMDsNCiAJZW5jb2RlX2RvbWFpbl9uYW1lKG8tPmRvbWFpbl9uYW1lLCBjLT5mcWRu KTsNCi0JaWYgKGRoY3B2Nl9vcHQoJmN1cnJlbnQsIE9QVF9DTElFTlRfRlFETikpIHsNCisJaWYg KGRoY3B2Nl9nZXRfb3B0KCZjdXJyZW50LCBPUFRfQ0xJRU5UX0ZRRE4pKSB7DQogCQlzdHJ1Y3Qg b3B0X2NsaWVudF9mcWRuIHJlcV9vcHRfc3RvcmFnZTsNCiAJCXN0cnVjdCBvcHRfY2xpZW50X2Zx ZG4gY29uc3QgKnJlcV9vcHQ7DQogDQpAQCAtNTk4LDE5ICs5NDksMTkgQEAgaW50IGRoY3B2Nihz dHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgaW92X3RhaWwgKmRhdGEsDQogCQlyZXR1cm4gLTE7DQogDQog CWNsaWVudF9pZF9iYXNlID0gKmRhdGE7DQotCWlmIChkaGNwdjZfb3B0KCZjbGllbnRfaWRfYmFz ZSwgT1BUX0NMSUVOVElEKSkNCisJaWYgKGRoY3B2Nl9nZXRfb3B0KCZjbGllbnRfaWRfYmFzZSwg T1BUX0NMSUVOVElEKSkNCiAJCWNsaWVudF9pZCA9IElPVl9QRUVLX0hFQURFUigmY2xpZW50X2lk X2Jhc2UsIGNsaWVudF9pZF9zdG9yYWdlKTsNCiAJaWYgKCFjbGllbnRfaWQgfHwgbnRvaHMoY2xp ZW50X2lkLT5sKSA+IE9QVF9WU0laRShjbGllbnRfaWQpKQ0KIAkJcmV0dXJuIC0xOw0KIA0KIAlv cHQgPSAqZGF0YTsNCi0JaWYgKGRoY3B2Nl9vcHQoJm9wdCwgT1BUX1NFUlZFUklEKSkNCisJaWYg KGRoY3B2Nl9nZXRfb3B0KCZvcHQsIE9QVF9TRVJWRVJJRCkpDQogCQlzZXJ2ZXJfaWQgPSBJT1Zf UEVFS19IRUFERVIoJm9wdCwgc2VydmVyX2lkX3N0b3JhZ2UpOw0KIAlpZiAoc2VydmVyX2lkICYm IG50b2hzKHNlcnZlcl9pZC0+aGRyLmwpICE9IE9QVF9WU0laRShzZXJ2ZXJfaWQpKQ0KIAkJcmV0 dXJuIC0xOw0KIA0KIAlvcHQgPSAqZGF0YTsNCi0JaWYgKGRoY3B2Nl9vcHQoJm9wdCwgT1BUX0lB X05BKSkNCisJaWYgKGRoY3B2Nl9nZXRfb3B0KCZvcHQsIE9QVF9JQV9OQSkpDQogCQlpYSA9IElP Vl9QRUVLX0hFQURFUigmb3B0LCBpYV9zdG9yYWdlKTsNCiAJaWYgKGlhICYmIG50b2hzKGlhLT5o ZHIubCkgPCBNSU4oT1BUX1ZTSVpFKGlhX25hKSwgT1BUX1ZTSVpFKGlhX3RhKSkpDQogCQlyZXR1 cm4gLTE7DQpAQCAtNjQ0LDcgKzk5NSw3IEBAIGludCBkaGNwdjYoc3RydWN0IGN0eCAqYywgc3Ry dWN0IGlvdl90YWlsICpkYXRhLA0KIAkJICAgIG1lbWNtcCgmcmVzcC5zZXJ2ZXJfaWQsIHNlcnZl cl9pZCwgc2l6ZW9mKHJlc3Auc2VydmVyX2lkKSkpDQogCQkJcmV0dXJuIC0xOw0KIA0KLQkJaWYg KGlhIHx8IGRoY3B2Nl9vcHQoZGF0YSwgT1BUX0lBX1RBKSkNCisJCWlmIChpYSB8fCBkaGNwdjZf Z2V0X29wdChkYXRhLCBPUFRfSUFfVEEpKQ0KIAkJCXJldHVybiAtMTsNCiANCiAJCWluZm8oIkRI Q1B2NjogcmVjZWl2ZWQgSU5GT1JNQVRJT05fUkVRVUVTVCwgc2VuZGluZyBSRVBMWSIpOw0KZGlm ZiAtLWdpdCBhL2RoY3B2Ni5oIGIvZGhjcHY2LmgNCmluZGV4IDEwMTVhMWE3Li42Y2VmZDE1YiAx MDA2NDQNCi0tLSBhL2RoY3B2Ni5oDQorKysgYi9kaGNwdjYuaA0KQEAgLTksNSArOSw4IEBADQog aW50IGRoY3B2NihzdHJ1Y3QgY3R4ICpjLCBzdHJ1Y3QgaW92X3RhaWwgKmRhdGEsDQogCSAgIGNv bnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZGFkZHIp Ow0KIHZvaWQgZGhjcHY2X2luaXQoY29uc3Qgc3RydWN0IGN0eCAqYyk7DQordm9pZCBkaGNwdjZf c2V0X29wdCh1aW50MTZfdCBjb2RlLCBjb25zdCBjaGFyICp2YWxfc3RyKTsNCitjb25zdCBjaGFy ICpkaGNwdjZfb3B0X3RvX3N0cih1aW50MTZfdCBjb2RlLCBjaGFyICpidWYsIHNpemVfdCBidWZf bGVuLA0KKwkJCSAgICAgaW50ICpvZmYpOw0KIA0KICNlbmRpZiAvKiBESENQVjZfSCAqLw0KZGlm ZiAtLWdpdCBhL3Bhc3N0LjEgYi9wYXNzdC4xDQppbmRleCAwYjc4MGZlYy4uNTQzMjhiMWIgMTAw NjQ0DQotLS0gYS9wYXNzdC4xDQorKysgYi9wYXNzdC4xDQpAQCAtNDQwLDYgKzQ0MCwzNyBAQCBT ZW5kIFxmSW5hbWVcZlIgYXMgREhDUCBvcHRpb24gMTIgKGhvc3RuYW1lKS4NCiBGUUROIHRvIGNv bmZpZ3VyZSB0aGUgY2xpZW50IHdpdGguDQogU2VuZCBcZkluYW1lXGZSIGFzIENsaWVudCBGUURO OiBESENQIG9wdGlvbiA4MSBhbmQgREhDUHY2IG9wdGlvbiAzOS4NCiANCisuVFANCisuQlIgXC1c LWRoY3B2Ni1vcHQgIiAiIFxmSUNPREVcZlIsXGZJVkFMVUVcZlINCitTZXQgREhDUHY2IG9wdGlv biBcZklDT0RFXGZSIHRvIFxmSVZBTFVFXGZSLiAgVGhlIHZhbHVlIGZvcm1hdCBkZXBlbmRzDQor b24gdGhlIG9wdGlvbiB0eXBlIGFuZCBpcyBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0 aGUgb3B0aW9uIGNvZGUuDQorTXVsdGlwbGUgSVB2NiBhZGRyZXNzZXMgYXJlIGNvbW1hLXNlcGFy YXRlZC4NCitUaGlzIG9wdGlvbiBjYW4gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLiAgSWYg dGhlIHNhbWUgb3B0aW9uIGNvZGUgaXMNCitnaXZlbiBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3Qg dmFsdWUgd2lucy4NCisuUlMNCisuVFANCisuQiBTdHJpbmcgb3B0aW9ucw0KKzU5IChCb290IEZp bGUgVVJMLCBSRkMgNTk3MCkNCisuVFANCisuQiBMZW5ndGgtcHJlZml4ZWQgc3RyaW5nIGxpc3Qg b3B0aW9ucyAoY29tbWEtc2VwYXJhdGVkIGVudHJpZXMpDQorMTUgKFVzZXIgQ2xhc3MsIFJGQyA5 OTE1KSwgNjAgKEJvb3QgRmlsZSBQYXJhbXMsIFJGQyA1OTcwKS4NCitFYWNoIGNvbW1hLXNlcGFy YXRlZCBlbnRyeSBpcyBlbmNvZGVkIHdpdGggYSAyLWJ5dGUgbGVuZ3RoIHByZWZpeC4NCitFeGFt cGxlOiBcZkJcLVwtZGhjcHY2LW9wdCAxNSxjbGFzczEsY2xhc3MyXGZSLg0KKy5UUA0KKy5CIFZl bmRvciBjbGFzcyBvcHRpb25zIChFTlRFUlBSSVNFOkRBVEEgZm9ybWF0KQ0KKzE2IChWZW5kb3Ig Q2xhc3MsIFJGQyA5OTE1KS4NCitWQUxVRSBpcyBcZklFTlRFUlBSSVNFXGZSOlxmSURBVEFcZlIg d2hlcmUgXGZJRU5URVJQUklTRVxmUiBpcyB0aGUgSUFOQQ0KK1ByaXZhdGUgRW50ZXJwcmlzZSBO dW1iZXIgYW5kIFxmSURBVEFcZlIgaXMgdGhlIHZlbmRvciBjbGFzcyBzdHJpbmcuDQorRXhhbXBs ZTogXGZCXC1cLWRoY3B2Ni1vcHQgMTYsMDpIVFRQQ2xpZW50XGZSIGZvciBVRUZJIEhUVFAgQm9v dC4NCisuVFANCisuQiBJUHY2IGFkZHJlc3MgbGlzdCBvcHRpb25zIChjb21tYS1zZXBhcmF0ZWQp DQorMzEgKFNOVFAgU2VydmVycykNCisuVFANCisuQiBJbnRlZ2VyIG9wdGlvbnMNCis3IChQcmVm ZXJlbmNlLCA4LWJpdCksIDMyIChJbmZvcm1hdGlvbiBSZWZyZXNoIFRpbWUsIDMyLWJpdCksDQor ODIgKFNPTF9NQVhfUlQsIDMyLWJpdCksIDgzIChJTkZfTUFYX1JULCAzMi1iaXQpDQorLlJFDQor DQogLlRQDQogLkJSIFwtdCAiLCAiIFwtXC10Y3AtcG9ydHMgIiAiIFxmSXNwZWMNCiBDb25maWd1 cmUgVENQIHBvcnQgZm9yd2FyZGluZyB0byBndWVzdCBvciBuYW1lc3BhY2UuIFxmSXNwZWNcZlIg Y2FuIGJlIGVpdGhlcjoNCi0tIA0KMi41NS4wDQoNCg==