From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0067.outbound.protection.outlook.com [104.47.2.67]) by dpdk.org (Postfix) with ESMTP id C91434C9F for ; Tue, 2 Oct 2018 22:52:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ubXb6mX+5oUkqsIZXkiY/3ZoRN+Izml0aRelzruluWA=; b=fqekNCEBYGT3ydKez9Z8MYPuL1ffSCv/c+gKlKKCCE8blwj7wtFNwJOG/XSiHKhPkz4NafKR/gZHNzhEA8hzpE1URv5xjYh0V/1UJyO+3Q7OnahBylzbHBSQJYHVDAgbVRvftB08twc6G5W5NDcjHi82C1PNxpVcA6ECg3q96SY= Received: from AM0PR08MB3379.eurprd08.prod.outlook.com (20.177.109.79) by AM0PR08MB3250.eurprd08.prod.outlook.com (52.134.94.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1185.25; Tue, 2 Oct 2018 20:52:53 +0000 Received: from AM0PR08MB3379.eurprd08.prod.outlook.com ([fe80::d940:1651:50e8:7267]) by AM0PR08MB3379.eurprd08.prod.outlook.com ([fe80::d940:1651:50e8:7267%5]) with mapi id 15.20.1164.029; Tue, 2 Oct 2018 20:52:53 +0000 From: Dharmik Thakkar To: Yipeng Wang CC: "bruce.richardson@intel.com" , "konstantin.ananyev@intel.com" , "dev@dpdk.org" , Honnappa Nagarahalli , "sameh.gobriel@intel.com" Thread-Topic: [dpdk-dev] [PATCH v5 4/4] hash: use partial-key hashing Thread-Index: AQHUWfD3C+MXEk3DsUynI5fWXEDw0KUMb+MA Date: Tue, 2 Oct 2018 20:52:53 +0000 Message-ID: <78E29C5B-78E9-4CB5-8B4C-15C603AA0C1C@arm.com> References: <1537993618-92630-1-git-send-email-yipeng1.wang@intel.com> <1538418902-154892-1-git-send-email-yipeng1.wang@intel.com> <1538418902-154892-5-git-send-email-yipeng1.wang@intel.com> In-Reply-To: <1538418902-154892-5-git-send-email-yipeng1.wang@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Dharmik.Thakkar@arm.com; x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM0PR08MB3250; 6:y5UJlitd+OPJQ2mndGDZpSHjaHBmQy1iFFqOTKs8IEtmwvg+ui5IeOMZWcwTe3db9dBolin2cZt2MdZjq3oB/DyALO2gBPzWdwpIJsiY1xPhYZn7ju27+R3HB91obVdW4/xHFNOsB7tMhr10QC/vxyKn/sCNzh296u4KstWLD1nOCMeoQU8vaJQ7CzCZT8omaGlrwVj3IWtTrb3J5Thaac8MCcUEK/IKNeyHCdrqDYHHiQSiG/SCFgZWEz+LqExnqnR5uIR5WH+iBOG+a8bp0VP/C9FE5li8aoecynAJPFmFJrMBHdFFX3wuh7WyksDwpwcxqiv8Sm/uakG/7O7NKcPxVYefG2HhDYqtkN9G2gWGBvV5+bPo9Gl2GDhtRLxhPNqu1nMwuffA5tMSvhMddDigr8yRJQWpF10IQ60eZw2br3lub1eHcnJNaE3GgPkc57hfIf/Xeu5W6APOHssLbw==; 5:m7qtQwCu82FpMkCqPpB3LP5o/8nbpqJRiFT1Sra5cUkmKIjaaxpijF+vIFVm4e/uVx6cmGCqzcrb/WWFPy9kXdF7j7Fk5OI+pJyD83uEXkLTMlNkmgVoPEY4XMuLhtQ9rmePvGp05O0mU3lVlzoc+qke/Gno2WzeKqDrIQht1UI=; 7:4RGWxQSPovRU0pLrlKEMu65ihOntrPI1URHmrv8OptmqDEM78RSi3xXhsBhdugOdQ6kGeuGaomi57JHHfyNwVJN1M3oLYSllzXh/5MQFZXDMEYrHUeTHCGugeNp17iAmcrpBozupB9b0FMOT8rvlLljR0A/li3ptDHz/lTi1YQ/dYdDsCIj+vTWIrlXQOe3r8bpPuP8CgXZrgRN3R9oQ63CaENOJke9CP7JX5q+o6PIsz3YA4sOPZ7iDsSINgeTV x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-correlation-id: dd83007e-9505-48d0-933a-08d628a90609 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM0PR08MB3250; x-ms-traffictypediagnostic: AM0PR08MB3250: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(131327999870524)(228905959029699)(180628864354917); x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231355)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(6055026)(149066)(150057)(6041310)(20161123560045)(20161123558120)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051); SRVR:AM0PR08MB3250; BCL:0; PCL:0; RULEID:; SRVR:AM0PR08MB3250; x-forefront-prvs: 0813C68E65 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(39860400002)(346002)(366004)(376002)(40434004)(189003)(199004)(5250100002)(486006)(53546011)(26005)(446003)(36756003)(33656002)(105586002)(6506007)(11346002)(5660300001)(76176011)(68736007)(2616005)(53936002)(72206003)(6916009)(106356001)(102836004)(99286004)(476003)(82746002)(3846002)(14454004)(6116002)(7736002)(81166006)(81156014)(8676002)(6486002)(83716004)(97736004)(71200400001)(71190400001)(305945005)(2906002)(229853002)(4326008)(8936002)(316002)(6512007)(54906003)(86362001)(66066001)(53946003)(25786009)(6436002)(14444005)(5024004)(478600001)(2900100001)(256004)(4744004)(186003)(6246003)(579004)(559001); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB3250; H:AM0PR08MB3379.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: dhqqy1tO9ACxTBdBgbpeyOp5PAGXMSrQOQdJQDQ5dBqgGPOvYPy7ku5v63vqmMp5wRfuGT/19WNkL4FyyvGaEmMq17CDFNKxFXdOiw7/GnX2vSMOHoBTB8bpuiiNTBUZTMduTgxCWBThMZq2J7gCXN+wv0KPdvHZwDmWRe9UtKAXZ9ziOY2H+8ukG8UIYONprl2PoA0yXbVcgwAz5CxFYV4CMJxYMz3byJpmGy+n3M0jexDjbwc2KOwGRI8ZvVrmB86sk/WrxJbzFiVYltB9Gw8CrEdYjzd10nE29QmNfYAcsV0GI0ai3nD2bxCD2s8hlZJPEzbHGhXZTydgge5UwPirPQ9UFkjb6jz5UOY82f8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="utf-8" Content-ID: <574B96848CCAFC4BB3268A0EE04568AC@eurprd08.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd83007e-9505-48d0-933a-08d628a90609 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Oct 2018 20:52:53.4007 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3250 Subject: Re: [dpdk-dev] [PATCH v5 4/4] hash: use partial-key hashing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Oct 2018 20:52:56 -0000 SSBhbSBhdHRlbXB0aW5nIHRvIHRlc3QgdGhlIHBhdGNoIG9uIGFuIEFybSBtYWNoaW5lLCBidXQg aXQgZmFpbGVkIHRvIGFwcGx5Lg0KDQpJ4oCZbSBnZXR0aW5nIHRoZSBmb2xsb3dpbmcgZXJyb3I6 DQoNCmVycm9yOiBwYXRjaCBmYWlsZWQ6IHRlc3QvdGVzdC90ZXN0X2hhc2hfcGVyZi5jOjE4DQpl cnJvcjogdGVzdC90ZXN0L3Rlc3RfaGFzaF9wZXJmLmM6IHBhdGNoIGRvZXMgbm90IGFwcGx5DQpQ YXRjaCBmYWlsZWQgYXQgMDAwMyB0ZXN0L2hhc2g6IGltcGxlbWVudCBleHRlbmRhYmxlIGJ1Y2tl dCBoYXNoIHRlc3QNCg0KPiBPbiBPY3QgMSwgMjAxOCwgYXQgMTozNSBQTSwgWWlwZW5nIFdhbmcg PHlpcGVuZzEud2FuZ0BpbnRlbC5jb20+IHdyb3RlOg0KPg0KPiBUaGlzIGNvbW1pdCBjaGFuZ2Vz IHRoZSBoYXNoaW5nIG1lY2hhbmlzbSB0byAicGFydGlhbC1rZXkNCj4gaGFzaGluZyIgdG8gY2Fs Y3VsYXRlIGJ1Y2tldCBpbmRleCBhbmQgc2lnbmF0dXJlIG9mIGtleS4NCj4NCj4gVGhpcyBpcyAg cHJvcG9zZWQgaW4gQmluIEZhbiwgZXQgYWwncyBwYXBlcg0KPiAiTWVtQzM6IENvbXBhY3QgYW5k IENvbmN1cnJlbnQgTWVtQ2FjaGUgd2l0aCBEdW1iZXIgQ2FjaGluZw0KPiBhbmQgU21hcnRlciBI YXNoaW5nIi4gQmFzY2lhbGx5IHRoZSBpZGVhIGlzIHRvIHVzZSAieG9yIiB0bw0KPiBkZXJpdmUg YWx0ZXJuYXRpdmUgYnVja2V0IGZyb20gY3VycmVudCBidWNrZXQgaW5kZXggYW5kDQo+IHNpZ25h dHVyZS4NCj4NCj4gV2l0aCAicGFydGlhbC1rZXkgaGFzaGluZyIsIGl0IHJlZHVjZXMgdGhlIGJ1 Y2tldCBtZW1vcnkNCj4gcmVxdWlyZW1lbnQgZnJvbSB0d28gY2FjaGUgbGluZXMgdG8gb25lIGNh Y2hlIGxpbmUsIHdoaWNoDQo+IGltcHJvdmVzIHRoZSBtZW1vcnkgZWZmaWNpZW5jeSBhbmQgdGh1 cyB0aGUgbG9va3VwIHNwZWVkLg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBZaXBlbmcgV2FuZyA8eWlw ZW5nMS53YW5nQGludGVsLmNvbT4NCj4gUmV2aWV3ZWQtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxp IDxob25uYXBwYS5uYWdhcmFoYWxsaUBhcm0uY29tPg0KPiAtLS0NCj4gbGliL2xpYnJ0ZV9oYXNo L3J0ZV9jdWNrb29faGFzaC5jIHwgMjQ2ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t LS0tLS0tDQo+IGxpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guaCB8ICAgNiArLQ0KPiBs aWIvbGlicnRlX2hhc2gvcnRlX2hhc2guaCAgICAgICAgfCAgIDUgKy0NCj4gMyBmaWxlcyBjaGFu Z2VkLCAxMzEgaW5zZXJ0aW9ucygrKSwgMTI2IGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZmIC0tZ2l0 IGEvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNrb29faGFzaC5jIGIvbGliL2xpYnJ0ZV9oYXNoL3J0 ZV9jdWNrb29faGFzaC5jDQo+IGluZGV4IDEzM2UxODEuLjNjN2M5YzUgMTAwNjQ0DQo+IC0tLSBh L2xpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hhc2guYw0KPiArKysgYi9saWIvbGlicnRlX2hh c2gvcnRlX2N1Y2tvb19oYXNoLmMNCj4gQEAgLTkwLDYgKzkwLDM2IEBAIHJ0ZV9oYXNoX2NtcF9l cShjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lkICprZXkyLCBjb25zdCBzdHJ1Y3QgcnRlX2hh c2ggKmgpDQo+IHJldHVybiBjbXBfanVtcF90YWJsZVtoLT5jbXBfanVtcF90YWJsZV9pZHhdKGtl eTEsIGtleTIsIGgtPmtleV9sZW4pOw0KPiB9DQo+DQo+ICsvKg0KPiArICogV2UgdXNlIGhpZ2hl ciAxNiBiaXRzIG9mIGhhc2ggYXMgdGhlIHNpZ25hdHVyZSB2YWx1ZSBzdG9yZWQgaW4gdGFibGUu DQo+ICsgKiBXZSB1c2UgdGhlIGxvd2VyIGJpdHMgZm9yIHRoZSBwcmltYXJ5IGJ1Y2tldA0KPiAr ICogbG9jYXRpb24uIFRoZW4gd2UgWE9SIHByaW1hcnkgYnVja2V0IGxvY2F0aW9uIGFuZCB0aGUg c2lnbmF0dXJlDQo+ICsgKiB0byBnZXQgdGhlIHNlY29uZGFyeSBidWNrZXQgbG9jYXRpb24uIFRo aXMgaXMgc2FtZSBhcw0KPiArICogcHJvcG9zZWQgaW4gQmluIEZhbiwgZXQgYWwncyBwYXBlcg0K PiArICogIk1lbUMzOiBDb21wYWN0IGFuZCBDb25jdXJyZW50IE1lbUNhY2hlIHdpdGggRHVtYmVy IENhY2hpbmcgYW5kDQo+ICsgKiBTbWFydGVyIEhhc2hpbmciLiBUaGUgYmVuZWZpdCB0byB1c2UN Cj4gKyAqIFhPUiBpcyB0aGF0IG9uZSBjb3VsZCBkZXJpdmUgdGhlIGFsdGVybmF0aXZlIGJ1Y2tl dCBsb2NhdGlvbg0KPiArICogYnkgb25seSB1c2luZyB0aGUgY3VycmVudCBidWNrZXQgbG9jYXRp b24gYW5kIHRoZSBzaWduYXR1cmUuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdWludDE2X3QN Cj4gK2dldF9zaG9ydF9zaWcoY29uc3QgaGFzaF9zaWdfdCBoYXNoKQ0KPiArew0KPiArcmV0dXJu IGhhc2ggPj4gMTY7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QNCj4gK2dl dF9wcmltX2J1Y2tldF9pbmRleChjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0IGhhc2hf c2lnX3QgaGFzaCkNCj4gK3sNCj4gK3JldHVybiBoYXNoICYgaC0+YnVja2V0X2JpdG1hc2s7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QNCj4gK2dldF9hbHRfYnVja2V0X2lu ZGV4KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4gK3VpbnQzMl90IGN1cl9ia3RfaWR4LCB1 aW50MTZfdCBzaWcpDQo+ICt7DQo+ICtyZXR1cm4gKGN1cl9ia3RfaWR4IF4gc2lnKSAmIGgtPmJ1 Y2tldF9iaXRtYXNrOw0KPiArfQ0KPiArDQo+IHN0cnVjdCBydGVfaGFzaCAqDQo+IHJ0ZV9oYXNo X2NyZWF0ZShjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfcGFyYW1ldGVycyAqcGFyYW1zKQ0KPiB7DQo+ IEBAIC0zMjcsOSArMzU3LDcgQEAgcnRlX2hhc2hfY3JlYXRlKGNvbnN0IHN0cnVjdCBydGVfaGFz aF9wYXJhbWV0ZXJzICpwYXJhbXMpDQo+IGgtPmV4dF90YWJsZV9zdXBwb3J0ID0gZXh0X3RhYmxl X3N1cHBvcnQ7DQo+DQo+ICNpZiBkZWZpbmVkKFJURV9BUkNIX1g4NikNCj4gLWlmIChydGVfY3B1 X2dldF9mbGFnX2VuYWJsZWQoUlRFX0NQVUZMQUdfQVZYMikpDQo+IC1oLT5zaWdfY21wX2ZuID0g UlRFX0hBU0hfQ09NUEFSRV9BVlgyOw0KPiAtZWxzZSBpZiAocnRlX2NwdV9nZXRfZmxhZ19lbmFi bGVkKFJURV9DUFVGTEFHX1NTRTIpKQ0KPiAraWYgKHJ0ZV9jcHVfZ2V0X2ZsYWdfZW5hYmxlZChS VEVfQ1BVRkxBR19TU0UyKSkNCj4gaC0+c2lnX2NtcF9mbiA9IFJURV9IQVNIX0NPTVBBUkVfU1NF Ow0KPiBlbHNlDQo+ICNlbmRpZg0KPiBAQCAtNDE3LDE4ICs0NDUsNiBAQCBydGVfaGFzaF9oYXNo KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5KQ0KPiByZXR1cm4gaC0+ aGFzaF9mdW5jKGtleSwgaC0+a2V5X2xlbiwgaC0+aGFzaF9mdW5jX2luaXRfdmFsKTsNCj4gfQ0K Pg0KPiAtLyogQ2FsYyB0aGUgc2Vjb25kYXJ5IGhhc2ggdmFsdWUgZnJvbSB0aGUgcHJpbWFyeSBo YXNoIHZhbHVlIG9mIGEgZ2l2ZW4ga2V5ICovDQo+IC1zdGF0aWMgaW5saW5lIGhhc2hfc2lnX3QN Cj4gLXJ0ZV9oYXNoX3NlY29uZGFyeV9oYXNoKGNvbnN0IGhhc2hfc2lnX3QgcHJpbWFyeV9oYXNo KQ0KPiAtew0KPiAtc3RhdGljIGNvbnN0IHVuc2lnbmVkIGFsbF9iaXRzX3NoaWZ0ID0gMTI7DQo+ IC1zdGF0aWMgY29uc3QgdW5zaWduZWQgYWx0X2JpdHNfeG9yID0gMHg1YmQxZTk5NTsNCj4gLQ0K PiAtdWludDMyX3QgdGFnID0gcHJpbWFyeV9oYXNoID4+IGFsbF9iaXRzX3NoaWZ0Ow0KPiAtDQo+ IC1yZXR1cm4gcHJpbWFyeV9oYXNoIF4gKCh0YWcgKyAxKSAqIGFsdF9iaXRzX3hvcik7DQo+IC19 DQo+IC0NCj4gaW50MzJfdA0KPiBydGVfaGFzaF9jb3VudChjb25zdCBzdHJ1Y3QgcnRlX2hhc2gg KmgpDQo+IHsNCj4gQEAgLTU2MCwxNCArNTc2LDEzIEBAIGVucXVldWVfc2xvdF9iYWNrKGNvbnN0 IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4gLyogU2VhcmNoIGEga2V5IGZyb20gYnVja2V0IGFuZCB1 cGRhdGUgaXRzIGRhdGEgKi8NCj4gc3RhdGljIGlubGluZSBpbnQzMl90DQo+IHNlYXJjaF9hbmRf dXBkYXRlKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgdm9pZCAqZGF0YSwgY29uc3Qgdm9pZCAq a2V5LA0KPiAtc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqYmt0LCBoYXNoX3NpZ190IHNpZywgaGFz aF9zaWdfdCBhbHRfaGFzaCkNCj4gK3N0cnVjdCBydGVfaGFzaF9idWNrZXQgKmJrdCwgdWludDE2 X3Qgc2lnKQ0KPiB7DQo+IGludCBpOw0KPiBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICprLCAqa2V5cyA9 IGgtPmtleV9zdG9yZTsNCj4NCj4gZm9yIChpID0gMDsgaSA8IFJURV9IQVNIX0JVQ0tFVF9FTlRS SUVTOyBpKyspIHsNCj4gLWlmIChia3QtPnNpZ19jdXJyZW50W2ldID09IHNpZyAmJg0KPiAtYmt0 LT5zaWdfYWx0W2ldID09IGFsdF9oYXNoKSB7DQo+ICtpZiAoYmt0LT5zaWdfY3VycmVudFtpXSA9 PSBzaWcpIHsNCj4gayA9IChzdHJ1Y3QgcnRlX2hhc2hfa2V5ICopICgoY2hhciAqKWtleXMgKw0K PiBia3QtPmtleV9pZHhbaV0gKiBoLT5rZXlfZW50cnlfc2l6ZSk7DQo+IGlmIChydGVfaGFzaF9j bXBfZXEoa2V5LCBrLT5rZXksIGgpID09IDApIHsNCj4gQEAgLTU5NCw3ICs2MDksNyBAQCBydGVf aGFzaF9jdWNrb29faW5zZXJ0X213KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4gc3RydWN0 IHJ0ZV9oYXNoX2J1Y2tldCAqcHJpbV9ia3QsDQo+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKnNl Y19ia3QsDQo+IGNvbnN0IHN0cnVjdCBydGVfaGFzaF9rZXkgKmtleSwgdm9pZCAqZGF0YSwNCj4g LWhhc2hfc2lnX3Qgc2lnLCBoYXNoX3NpZ190IGFsdF9oYXNoLCB1aW50MzJfdCBuZXdfaWR4LA0K PiArdWludDE2X3Qgc2lnLCB1aW50MzJfdCBuZXdfaWR4LA0KPiBpbnQzMl90ICpyZXRfdmFsKQ0K PiB7DQo+IHVuc2lnbmVkIGludCBpOw0KPiBAQCAtNjA1LDcgKzYyMCw3IEBAIHJ0ZV9oYXNoX2N1 Y2tvb19pbnNlcnRfbXcoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0KPiAvKiBDaGVjayBpZiBr ZXkgd2FzIGluc2VydGVkIGFmdGVyIGxhc3QgY2hlY2sgYnV0IGJlZm9yZSB0aGlzDQo+ICAqIHBy b3RlY3RlZCByZWdpb24gaW4gY2FzZSBvZiBpbnNlcnRpbmcgZHVwbGljYXRlZCBrZXlzLg0KPiAg Ki8NCj4gLXJldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgsIGRhdGEsIGtleSwgcHJpbV9ia3QsIHNp ZywgYWx0X2hhc2gpOw0KPiArcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwgZGF0YSwga2V5LCBw cmltX2JrdCwgc2lnKTsNCj4gaWYgKHJldCAhPSAtMSkgew0KPiBfX2hhc2hfcndfd3JpdGVyX3Vu bG9jayhoKTsNCj4gKnJldF92YWwgPSByZXQ7DQo+IEBAIC02MTMsNyArNjI4LDcgQEAgcnRlX2hh c2hfY3Vja29vX2luc2VydF9tdyhjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsDQo+IH0NCj4NCj4g Rk9SX0VBQ0hfQlVDS0VUKGN1cl9ia3QsIHNlY19ia3QpIHsNCj4gLXJldCA9IHNlYXJjaF9hbmRf dXBkYXRlKGgsIGRhdGEsIGtleSwgY3VyX2JrdCwgYWx0X2hhc2gsIHNpZyk7DQo+ICtyZXQgPSBz ZWFyY2hfYW5kX3VwZGF0ZShoLCBkYXRhLCBrZXksIGN1cl9ia3QsIHNpZyk7DQo+IGlmIChyZXQg IT0gLTEpIHsNCj4gX19oYXNoX3J3X3dyaXRlcl91bmxvY2soaCk7DQo+ICpyZXRfdmFsID0gcmV0 Ow0KPiBAQCAtNjI4LDcgKzY0Myw2IEBAIHJ0ZV9oYXNoX2N1Y2tvb19pbnNlcnRfbXcoY29uc3Qg c3RydWN0IHJ0ZV9oYXNoICpoLA0KPiAvKiBDaGVjayBpZiBzbG90IGlzIGF2YWlsYWJsZSAqLw0K PiBpZiAobGlrZWx5KHByaW1fYmt0LT5rZXlfaWR4W2ldID09IEVNUFRZX1NMT1QpKSB7DQo+IHBy aW1fYmt0LT5zaWdfY3VycmVudFtpXSA9IHNpZzsNCj4gLXByaW1fYmt0LT5zaWdfYWx0W2ldID0g YWx0X2hhc2g7DQo+IHByaW1fYmt0LT5rZXlfaWR4W2ldID0gbmV3X2lkeDsNCj4gYnJlYWs7DQo+ IH0NCj4gQEAgLTY1Myw3ICs2NjcsNyBAQCBydGVfaGFzaF9jdWNrb29fbW92ZV9pbnNlcnRfbXco Y29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0KPiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICphbHRf Ymt0LA0KPiBjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICprZXksIHZvaWQgKmRhdGEsDQo+IHN0 cnVjdCBxdWV1ZV9ub2RlICpsZWFmLCB1aW50MzJfdCBsZWFmX3Nsb3QsDQo+IC1oYXNoX3NpZ190 IHNpZywgaGFzaF9zaWdfdCBhbHRfaGFzaCwgdWludDMyX3QgbmV3X2lkeCwNCj4gK3VpbnQxNl90 IHNpZywgdWludDMyX3QgbmV3X2lkeCwNCj4gaW50MzJfdCAqcmV0X3ZhbCkNCj4gew0KPiB1aW50 MzJfdCBwcmV2X2FsdF9ia3RfaWR4Ow0KPiBAQCAtNjc0LDcgKzY4OCw3IEBAIHJ0ZV9oYXNoX2N1 Y2tvb19tb3ZlX2luc2VydF9tdyhjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsDQo+IC8qIENoZWNr IGlmIGtleSB3YXMgaW5zZXJ0ZWQgYWZ0ZXIgbGFzdCBjaGVjayBidXQgYmVmb3JlIHRoaXMNCj4g ICogcHJvdGVjdGVkIHJlZ2lvbi4NCj4gICovDQo+IC1yZXQgPSBzZWFyY2hfYW5kX3VwZGF0ZSho LCBkYXRhLCBrZXksIGJrdCwgc2lnLCBhbHRfaGFzaCk7DQo+ICtyZXQgPSBzZWFyY2hfYW5kX3Vw ZGF0ZShoLCBkYXRhLCBrZXksIGJrdCwgc2lnKTsNCj4gaWYgKHJldCAhPSAtMSkgew0KPiBfX2hh c2hfcndfd3JpdGVyX3VubG9jayhoKTsNCj4gKnJldF92YWwgPSByZXQ7DQo+IEBAIC02ODIsNyAr Njk2LDcgQEAgcnRlX2hhc2hfY3Vja29vX21vdmVfaW5zZXJ0X213KGNvbnN0IHN0cnVjdCBydGVf aGFzaCAqaCwNCj4gfQ0KPg0KPiBGT1JfRUFDSF9CVUNLRVQoY3VyX2JrdCwgYWx0X2JrdCkgew0K PiAtcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwgZGF0YSwga2V5LCBjdXJfYmt0LCBhbHRfaGFz aCwgc2lnKTsNCj4gK3JldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgsIGRhdGEsIGtleSwgY3VyX2Jr dCwgc2lnKTsNCj4gaWYgKHJldCAhPSAtMSkgew0KPiBfX2hhc2hfcndfd3JpdGVyX3VubG9jayho KTsNCj4gKnJldF92YWwgPSByZXQ7DQo+IEBAIC02OTUsOCArNzA5LDkgQEAgcnRlX2hhc2hfY3Vj a29vX21vdmVfaW5zZXJ0X213KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4gcHJldl9ia3Qg PSBwcmV2X25vZGUtPmJrdDsNCj4gcHJldl9zbG90ID0gY3Vycl9ub2RlLT5wcmV2X3Nsb3Q7DQo+ DQo+IC1wcmV2X2FsdF9ia3RfaWR4ID0NCj4gLXByZXZfYmt0LT5zaWdfYWx0W3ByZXZfc2xvdF0g JiBoLT5idWNrZXRfYml0bWFzazsNCj4gK3ByZXZfYWx0X2JrdF9pZHggPSBnZXRfYWx0X2J1Y2tl dF9pbmRleChoLA0KPiArcHJldl9ub2RlLT5jdXJfYmt0X2lkeCwNCj4gK3ByZXZfYmt0LT5zaWdf Y3VycmVudFtwcmV2X3Nsb3RdKTsNCj4NCj4gaWYgKHVubGlrZWx5KCZoLT5idWNrZXRzW3ByZXZf YWx0X2JrdF9pZHhdDQo+ICE9IGN1cnJfYmt0KSkgew0KPiBAQCAtNzEwLDEwICs3MjUsOCBAQCBy dGVfaGFzaF9jdWNrb29fbW92ZV9pbnNlcnRfbXcoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0K PiAgKiBDdWNrb28gaW5zZXJ0IHRvIG1vdmUgZWxlbWVudHMgYmFjayB0byBpdHMNCj4gICogcHJp bWFyeSBidWNrZXQgaWYgYXZhaWxhYmxlDQo+ICAqLw0KPiAtY3Vycl9ia3QtPnNpZ19hbHRbY3Vy cl9zbG90XSA9DQo+IC0gcHJldl9ia3QtPnNpZ19jdXJyZW50W3ByZXZfc2xvdF07DQo+IGN1cnJf Ymt0LT5zaWdfY3VycmVudFtjdXJyX3Nsb3RdID0NCj4gLXByZXZfYmt0LT5zaWdfYWx0W3ByZXZf c2xvdF07DQo+ICtwcmV2X2JrdC0+c2lnX2N1cnJlbnRbcHJldl9zbG90XTsNCj4gY3Vycl9ia3Qt PmtleV9pZHhbY3Vycl9zbG90XSA9DQo+IHByZXZfYmt0LT5rZXlfaWR4W3ByZXZfc2xvdF07DQo+ DQo+IEBAIC03MjMsNyArNzM2LDYgQEAgcnRlX2hhc2hfY3Vja29vX21vdmVfaW5zZXJ0X213KGNv bnN0IHN0cnVjdCBydGVfaGFzaCAqaCwNCj4gfQ0KPg0KPiBjdXJyX2JrdC0+c2lnX2N1cnJlbnRb Y3Vycl9zbG90XSA9IHNpZzsNCj4gLWN1cnJfYmt0LT5zaWdfYWx0W2N1cnJfc2xvdF0gPSBhbHRf aGFzaDsNCj4gY3Vycl9ia3QtPmtleV9pZHhbY3Vycl9zbG90XSA9IG5ld19pZHg7DQo+DQo+IF9f aGFzaF9yd193cml0ZXJfdW5sb2NrKGgpOw0KPiBAQCAtNzQxLDM5ICs3NTMsNDQgQEAgcnRlX2hh c2hfY3Vja29vX21ha2Vfc3BhY2VfbXcoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLA0KPiBzdHJ1 Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsDQo+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKnNlY19i a3QsDQo+IGNvbnN0IHN0cnVjdCBydGVfaGFzaF9rZXkgKmtleSwgdm9pZCAqZGF0YSwNCj4gLWhh c2hfc2lnX3Qgc2lnLCBoYXNoX3NpZ190IGFsdF9oYXNoLA0KPiArdWludDE2X3Qgc2lnLCB1aW50 MzJfdCBidWNrZXRfaWR4LA0KPiB1aW50MzJfdCBuZXdfaWR4LCBpbnQzMl90ICpyZXRfdmFsKQ0K PiB7DQo+IHVuc2lnbmVkIGludCBpOw0KPiBzdHJ1Y3QgcXVldWVfbm9kZSBxdWV1ZVtSVEVfSEFT SF9CRlNfUVVFVUVfTUFYX0xFTl07DQo+IHN0cnVjdCBxdWV1ZV9ub2RlICp0YWlsLCAqaGVhZDsN Cj4gc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqY3Vycl9ia3QsICphbHRfYmt0Ow0KPiArdWludDMy X3QgY3VyX2lkeCwgYWx0X2lkeDsNCj4NCj4gdGFpbCA9IHF1ZXVlOw0KPiBoZWFkID0gcXVldWUg KyAxOw0KPiB0YWlsLT5ia3QgPSBia3Q7DQo+IHRhaWwtPnByZXYgPSBOVUxMOw0KPiB0YWlsLT5w cmV2X3Nsb3QgPSAtMTsNCj4gK3RhaWwtPmN1cl9ia3RfaWR4ID0gYnVja2V0X2lkeDsNCj4NCj4g LyogQ3Vja29vIGJmcyBTZWFyY2ggKi8NCj4gd2hpbGUgKGxpa2VseSh0YWlsICE9IGhlYWQgJiYg aGVhZCA8DQo+IHF1ZXVlICsgUlRFX0hBU0hfQkZTX1FVRVVFX01BWF9MRU4gLQ0KPiBSVEVfSEFT SF9CVUNLRVRfRU5UUklFUykpIHsNCj4gY3Vycl9ia3QgPSB0YWlsLT5ia3Q7DQo+ICtjdXJfaWR4 ID0gdGFpbC0+Y3VyX2JrdF9pZHg7DQo+IGZvciAoaSA9IDA7IGkgPCBSVEVfSEFTSF9CVUNLRVRf RU5UUklFUzsgaSsrKSB7DQo+IGlmIChjdXJyX2JrdC0+a2V5X2lkeFtpXSA9PSBFTVBUWV9TTE9U KSB7DQo+IGludDMyX3QgcmV0ID0gcnRlX2hhc2hfY3Vja29vX21vdmVfaW5zZXJ0X213KGgsDQo+ IGJrdCwgc2VjX2JrdCwga2V5LCBkYXRhLA0KPiAtdGFpbCwgaSwgc2lnLCBhbHRfaGFzaCwNCj4g K3RhaWwsIGksIHNpZywNCj4gbmV3X2lkeCwgcmV0X3ZhbCk7DQo+IGlmIChsaWtlbHkocmV0ICE9 IC0xKSkNCj4gcmV0dXJuIHJldDsNCj4gfQ0KPg0KPiAvKiBFbnF1ZXVlIG5ldyBub2RlIGFuZCBr ZWVwIHByZXYgbm9kZSBpbmZvICovDQo+IC1hbHRfYmt0ID0gJihoLT5idWNrZXRzW2N1cnJfYmt0 LT5zaWdfYWx0W2ldDQo+IC0gICAgJiBoLT5idWNrZXRfYml0bWFza10pOw0KPiArYWx0X2lkeCA9 IGdldF9hbHRfYnVja2V0X2luZGV4KGgsIGN1cl9pZHgsDQo+ICtjdXJyX2JrdC0+c2lnX2N1cnJl bnRbaV0pOw0KPiArYWx0X2JrdCA9ICYoaC0+YnVja2V0c1thbHRfaWR4XSk7DQo+IGhlYWQtPmJr dCA9IGFsdF9ia3Q7DQo+ICtoZWFkLT5jdXJfYmt0X2lkeCA9IGFsdF9pZHg7DQo+IGhlYWQtPnBy ZXYgPSB0YWlsOw0KPiBoZWFkLT5wcmV2X3Nsb3QgPSBpOw0KPiBoZWFkKys7DQo+IEBAIC03ODgs NyArODA1LDcgQEAgc3RhdGljIGlubGluZSBpbnQzMl90DQo+IF9fcnRlX2hhc2hfYWRkX2tleV93 aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXksDQo+IGhh c2hfc2lnX3Qgc2lnLCB2b2lkICpkYXRhKQ0KPiB7DQo+IC1oYXNoX3NpZ190IGFsdF9oYXNoOw0K PiArdWludDE2X3Qgc2hvcnRfc2lnOw0KPiB1aW50MzJfdCBwcmltX2J1Y2tldF9pZHgsIHNlY19i dWNrZXRfaWR4Ow0KPiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpwcmltX2JrdCwgKnNlY19ia3Qs ICpjdXJfYmt0Ow0KPiBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICpuZXdfaywgKmtleXMgPSBoLT5rZXlf c3RvcmU7DQo+IEBAIC04MDMsMTggKzgyMCwxNyBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9o YXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPiBpbnQzMl90 IHJldF92YWw7DQo+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgKmxhc3Q7DQo+DQo+IC1wcmltX2J1 Y2tldF9pZHggPSBzaWcgJiBoLT5idWNrZXRfYml0bWFzazsNCj4gK3Nob3J0X3NpZyA9IGdldF9z aG9ydF9zaWcoc2lnKTsNCj4gK3ByaW1fYnVja2V0X2lkeCA9IGdldF9wcmltX2J1Y2tldF9pbmRl eChoLCBzaWcpOw0KPiArc2VjX2J1Y2tldF9pZHggPSBnZXRfYWx0X2J1Y2tldF9pbmRleChoLCBw cmltX2J1Y2tldF9pZHgsIHNob3J0X3NpZyk7DQo+IHByaW1fYmt0ID0gJmgtPmJ1Y2tldHNbcHJp bV9idWNrZXRfaWR4XTsNCj4gLXJ0ZV9wcmVmZXRjaDAocHJpbV9ia3QpOw0KPiAtDQo+IC1hbHRf aGFzaCA9IHJ0ZV9oYXNoX3NlY29uZGFyeV9oYXNoKHNpZyk7DQo+IC1zZWNfYnVja2V0X2lkeCA9 IGFsdF9oYXNoICYgaC0+YnVja2V0X2JpdG1hc2s7DQo+IHNlY19ia3QgPSAmaC0+YnVja2V0c1tz ZWNfYnVja2V0X2lkeF07DQo+ICtydGVfcHJlZmV0Y2gwKHByaW1fYmt0KTsNCj4gcnRlX3ByZWZl dGNoMChzZWNfYmt0KTsNCj4NCj4gLyogQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgaW5zZXJ0ZWQg aW4gcHJpbWFyeSBsb2NhdGlvbiAqLw0KPiBfX2hhc2hfcndfd3JpdGVyX2xvY2soaCk7DQo+IC1y ZXQgPSBzZWFyY2hfYW5kX3VwZGF0ZShoLCBkYXRhLCBrZXksIHByaW1fYmt0LCBzaWcsIGFsdF9o YXNoKTsNCj4gK3JldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgsIGRhdGEsIGtleSwgcHJpbV9ia3Qs IHNob3J0X3NpZyk7DQo+IGlmIChyZXQgIT0gLTEpIHsNCj4gX19oYXNoX3J3X3dyaXRlcl91bmxv Y2soaCk7DQo+IHJldHVybiByZXQ7DQo+IEBAIC04MjIsMTIgKzgzOCwxMyBAQCBfX3J0ZV9oYXNo X2FkZF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAq a2V5LA0KPg0KPiAvKiBDaGVjayBpZiBrZXkgaXMgYWxyZWFkeSBpbnNlcnRlZCBpbiBzZWNvbmRh cnkgbG9jYXRpb24gKi8NCj4gRk9SX0VBQ0hfQlVDS0VUKGN1cl9ia3QsIHNlY19ia3QpIHsNCj4g LXJldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgsIGRhdGEsIGtleSwgY3VyX2JrdCwgYWx0X2hhc2gs IHNpZyk7DQo+ICtyZXQgPSBzZWFyY2hfYW5kX3VwZGF0ZShoLCBkYXRhLCBrZXksIGN1cl9ia3Qs IHNob3J0X3NpZyk7DQo+IGlmIChyZXQgIT0gLTEpIHsNCj4gX19oYXNoX3J3X3dyaXRlcl91bmxv Y2soaCk7DQo+IHJldHVybiByZXQ7DQo+IH0NCj4gfQ0KPiArDQo+IF9faGFzaF9yd193cml0ZXJf dW5sb2NrKGgpOw0KPg0KPiAvKiBEaWQgbm90IGZpbmQgYSBtYXRjaCwgc28gZ2V0IGEgbmV3IHNs b3QgZm9yIHN0b3JpbmcgdGhlIG5ldyBrZXkgKi8NCj4gQEAgLTg2NSw3ICs4ODIsNyBAQCBfX3J0 ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qg dm9pZCAqa2V5LA0KPg0KPiAvKiBGaW5kIGFuIGVtcHR5IHNsb3QgYW5kIGluc2VydCAqLw0KPiBy ZXQgPSBydGVfaGFzaF9jdWNrb29faW5zZXJ0X213KGgsIHByaW1fYmt0LCBzZWNfYmt0LCBrZXks IGRhdGEsDQo+IC1zaWcsIGFsdF9oYXNoLCBuZXdfaWR4LCAmcmV0X3ZhbCk7DQo+ICtzaG9ydF9z aWcsIG5ld19pZHgsICZyZXRfdmFsKTsNCj4gaWYgKHJldCA9PSAwKQ0KPiByZXR1cm4gbmV3X2lk eCAtIDE7DQo+IGVsc2UgaWYgKHJldCA9PSAxKSB7DQo+IEBAIC04NzUsNyArODkyLDcgQEAgX19y dGVfaGFzaF9hZGRfa2V5X3dpdGhfaGFzaChjb25zdCBzdHJ1Y3QgcnRlX2hhc2ggKmgsIGNvbnN0 IHZvaWQgKmtleSwNCj4NCj4gLyogUHJpbWFyeSBidWNrZXQgZnVsbCwgbmVlZCB0byBtYWtlIHNw YWNlIGZvciBuZXcgZW50cnkgKi8NCj4gcmV0ID0gcnRlX2hhc2hfY3Vja29vX21ha2Vfc3BhY2Vf bXcoaCwgcHJpbV9ia3QsIHNlY19ia3QsIGtleSwgZGF0YSwNCj4gLXNpZywgYWx0X2hhc2gsIG5l d19pZHgsICZyZXRfdmFsKTsNCj4gK3Nob3J0X3NpZywgcHJpbV9idWNrZXRfaWR4LCBuZXdfaWR4 LCAmcmV0X3ZhbCk7DQo+IGlmIChyZXQgPT0gMCkNCj4gcmV0dXJuIG5ld19pZHggLSAxOw0KPiBl bHNlIGlmIChyZXQgPT0gMSkgew0KPiBAQCAtODg1LDcgKzkwMiw3IEBAIF9fcnRlX2hhc2hfYWRk X2tleV93aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXks DQo+DQo+IC8qIEFsc28gc2VhcmNoIHNlY29uZGFyeSBidWNrZXQgdG8gZ2V0IGJldHRlciBvY2N1 cGFuY3kgKi8NCj4gcmV0ID0gcnRlX2hhc2hfY3Vja29vX21ha2Vfc3BhY2VfbXcoaCwgc2VjX2Jr dCwgcHJpbV9ia3QsIGtleSwgZGF0YSwNCj4gLWFsdF9oYXNoLCBzaWcsIG5ld19pZHgsICZyZXRf dmFsKTsNCj4gK3Nob3J0X3NpZywgc2VjX2J1Y2tldF9pZHgsIG5ld19pZHgsICZyZXRfdmFsKTsN Cj4NCj4gaWYgKHJldCA9PSAwKQ0KPiByZXR1cm4gbmV3X2lkeCAtIDE7DQo+IEBAIC05MDUsMTQg KzkyMiwxNCBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVjdCBydGVf aGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPiAgKi8NCj4gX19oYXNoX3J3X3dyaXRlcl9sb2Nr KGgpOw0KPiAvKiBXZSBjaGVjayBmb3IgZHVwbGljYXRlcyBhZ2FpbiBzaW5jZSBjb3VsZCBiZSBp bnNlcnRlZCBiZWZvcmUgdGhlIGxvY2sgKi8NCj4gLXJldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgs IGRhdGEsIGtleSwgcHJpbV9ia3QsIHNpZywgYWx0X2hhc2gpOw0KPiArcmV0ID0gc2VhcmNoX2Fu ZF91cGRhdGUoaCwgZGF0YSwga2V5LCBwcmltX2JrdCwgc2hvcnRfc2lnKTsNCj4gaWYgKHJldCAh PSAtMSkgew0KPiBlbnF1ZXVlX3Nsb3RfYmFjayhoLCBjYWNoZWRfZnJlZV9zbG90cywgc2xvdF9p ZCk7DQo+IGdvdG8gZmFpbHVyZTsNCj4gfQ0KPg0KPiBGT1JfRUFDSF9CVUNLRVQoY3VyX2JrdCwg c2VjX2JrdCkgew0KPiAtcmV0ID0gc2VhcmNoX2FuZF91cGRhdGUoaCwgZGF0YSwga2V5LCBjdXJf Ymt0LCBhbHRfaGFzaCwgc2lnKTsNCj4gK3JldCA9IHNlYXJjaF9hbmRfdXBkYXRlKGgsIGRhdGEs IGtleSwgY3VyX2JrdCwgc2hvcnRfc2lnKTsNCj4gaWYgKHJldCAhPSAtMSkgew0KPiBlbnF1ZXVl X3Nsb3RfYmFjayhoLCBjYWNoZWRfZnJlZV9zbG90cywgc2xvdF9pZCk7DQo+IGdvdG8gZmFpbHVy ZTsNCj4gQEAgLTkyNCw4ICs5NDEsNyBAQCBfX3J0ZV9oYXNoX2FkZF9rZXlfd2l0aF9oYXNoKGNv bnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPiBmb3IgKGkgPSAwOyBp IDwgUlRFX0hBU0hfQlVDS0VUX0VOVFJJRVM7IGkrKykgew0KPiAvKiBDaGVjayBpZiBzbG90IGlz IGF2YWlsYWJsZSAqLw0KPiBpZiAobGlrZWx5KGN1cl9ia3QtPmtleV9pZHhbaV0gPT0gRU1QVFlf U0xPVCkpIHsNCj4gLWN1cl9ia3QtPnNpZ19jdXJyZW50W2ldID0gYWx0X2hhc2g7DQo+IC1jdXJf Ymt0LT5zaWdfYWx0W2ldID0gc2lnOw0KPiArY3VyX2JrdC0+c2lnX2N1cnJlbnRbaV0gPSBzaG9y dF9zaWc7DQo+IGN1cl9ia3QtPmtleV9pZHhbaV0gPSBuZXdfaWR4Ow0KPiBfX2hhc2hfcndfd3Jp dGVyX3VubG9jayhoKTsNCj4gcmV0dXJuIG5ld19pZHggLSAxOw0KPiBAQCAtOTQzLDggKzk1OSw3 IEBAIF9fcnRlX2hhc2hfYWRkX2tleV93aXRoX2hhc2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpo LCBjb25zdCB2b2lkICprZXksDQo+DQo+IGJrdF9pZCA9ICh1aW50MzJfdCkoKHVpbnRwdHJfdCll eHRfYmt0X2lkKSAtIDE7DQo+IC8qIFVzZSB0aGUgZmlyc3QgbG9jYXRpb24gb2YgdGhlIG5ldyBi dWNrZXQgKi8NCj4gLShoLT5idWNrZXRzX2V4dFtia3RfaWRdKS5zaWdfY3VycmVudFswXSA9IGFs dF9oYXNoOw0KPiAtKGgtPmJ1Y2tldHNfZXh0W2JrdF9pZF0pLnNpZ19hbHRbMF0gPSBzaWc7DQo+ ICsoaC0+YnVja2V0c19leHRbYmt0X2lkXSkuc2lnX2N1cnJlbnRbMF0gPSBzaG9ydF9zaWc7DQo+ IChoLT5idWNrZXRzX2V4dFtia3RfaWRdKS5rZXlfaWR4WzBdID0gbmV3X2lkeDsNCj4gLyogTGlu ayB0aGUgbmV3IGJ1Y2tldCB0byBzZWMgYnVja2V0IGxpbmtlZCBsaXN0ICovDQo+IGxhc3QgPSBy dGVfaGFzaF9nZXRfbGFzdF9ia3Qoc2VjX2JrdCk7DQo+IEBAIC0xMDAzLDcgKzEwMTgsNyBAQCBy dGVfaGFzaF9hZGRfa2V5X2RhdGEoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lk ICprZXksIHZvaWQgKmRhdGEpDQo+DQo+IC8qIFNlYXJjaCBvbmUgYnVja2V0IHRvIGZpbmQgdGhl IG1hdGNoIGtleSAqLw0KPiBzdGF0aWMgaW5saW5lIGludDMyX3QNCj4gLXNlYXJjaF9vbmVfYnVj a2V0KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LCBoYXNoX3NpZ190 IHNpZywNCj4gK3NlYXJjaF9vbmVfYnVja2V0KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29u c3Qgdm9pZCAqa2V5LCB1aW50MTZfdCBzaWcsDQo+IHZvaWQgKipkYXRhLCBjb25zdCBzdHJ1Y3Qg cnRlX2hhc2hfYnVja2V0ICpia3QpDQo+IHsNCj4gaW50IGk7DQo+IEBAIC0xMDMyLDMwICsxMDQ3 LDMwIEBAIHN0YXRpYyBpbmxpbmUgaW50MzJfdA0KPiBfX3J0ZV9oYXNoX2xvb2t1cF93aXRoX2hh c2goY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICprZXksDQo+IGhhc2hfc2ln X3Qgc2lnLCB2b2lkICoqZGF0YSkNCj4gew0KPiAtdWludDMyX3QgYnVja2V0X2lkeDsNCj4gLWhh c2hfc2lnX3QgYWx0X2hhc2g7DQo+ICt1aW50MzJfdCBwcmltX2J1Y2tldF9pZHgsIHNlY19idWNr ZXRfaWR4Ow0KPiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsICpjdXJfYmt0Ow0KPiBpbnQg cmV0Ow0KPiArdWludDE2X3Qgc2hvcnRfc2lnOw0KPg0KPiAtYnVja2V0X2lkeCA9IHNpZyAmIGgt PmJ1Y2tldF9iaXRtYXNrOw0KPiAtYmt0ID0gJmgtPmJ1Y2tldHNbYnVja2V0X2lkeF07DQo+ICtz aG9ydF9zaWcgPSBnZXRfc2hvcnRfc2lnKHNpZyk7DQo+ICtwcmltX2J1Y2tldF9pZHggPSBnZXRf cHJpbV9idWNrZXRfaW5kZXgoaCwgc2lnKTsNCj4gK3NlY19idWNrZXRfaWR4ID0gZ2V0X2FsdF9i dWNrZXRfaW5kZXgoaCwgcHJpbV9idWNrZXRfaWR4LCBzaG9ydF9zaWcpOw0KPiArYmt0ID0gJmgt PmJ1Y2tldHNbcHJpbV9idWNrZXRfaWR4XTsNCj4NCj4gX19oYXNoX3J3X3JlYWRlcl9sb2NrKGgp Ow0KPg0KPiAvKiBDaGVjayBpZiBrZXkgaXMgaW4gcHJpbWFyeSBsb2NhdGlvbiAqLw0KPiAtcmV0 ID0gc2VhcmNoX29uZV9idWNrZXQoaCwga2V5LCBzaWcsIGRhdGEsIGJrdCk7DQo+ICtyZXQgPSBz ZWFyY2hfb25lX2J1Y2tldChoLCBrZXksIHNob3J0X3NpZywgZGF0YSwgYmt0KTsNCj4gaWYgKHJl dCAhPSAtMSkgew0KPiBfX2hhc2hfcndfcmVhZGVyX3VubG9jayhoKTsNCj4gcmV0dXJuIHJldDsN Cj4gfQ0KPiAvKiBDYWxjdWxhdGUgc2Vjb25kYXJ5IGhhc2ggKi8NCj4gLWFsdF9oYXNoID0gcnRl X2hhc2hfc2Vjb25kYXJ5X2hhc2goc2lnKTsNCj4gLWJ1Y2tldF9pZHggPSBhbHRfaGFzaCAmIGgt PmJ1Y2tldF9iaXRtYXNrOw0KPiAtYmt0ID0gJmgtPmJ1Y2tldHNbYnVja2V0X2lkeF07DQo+ICti a3QgPSAmaC0+YnVja2V0c1tzZWNfYnVja2V0X2lkeF07DQo+DQo+IC8qIENoZWNrIGlmIGtleSBp cyBpbiBzZWNvbmRhcnkgbG9jYXRpb24gKi8NCj4gRk9SX0VBQ0hfQlVDS0VUKGN1cl9ia3QsIGJr dCkgew0KPiAtcmV0ID0gc2VhcmNoX29uZV9idWNrZXQoaCwga2V5LCBhbHRfaGFzaCwgZGF0YSwg Y3VyX2JrdCk7DQo+ICtyZXQgPSBzZWFyY2hfb25lX2J1Y2tldChoLCBrZXksIHNob3J0X3NpZywg ZGF0YSwgY3VyX2JrdCk7DQo+IGlmIChyZXQgIT0gLTEpIHsNCj4gX19oYXNoX3J3X3JlYWRlcl91 bmxvY2soaCk7DQo+IHJldHVybiByZXQ7DQo+IEBAIC0xMTAyLDcgKzExMTcsNiBAQCByZW1vdmVf ZW50cnkoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpi a3QsIHVuc2lnbmVkIGkpDQo+IHN0cnVjdCBsY29yZV9jYWNoZSAqY2FjaGVkX2ZyZWVfc2xvdHM7 DQo+DQo+IGJrdC0+c2lnX2N1cnJlbnRbaV0gPSBOVUxMX1NJR05BVFVSRTsNCj4gLWJrdC0+c2ln X2FsdFtpXSA9IE5VTExfU0lHTkFUVVJFOw0KPiBpZiAoaC0+bXVsdGlfd3JpdGVyX3N1cHBvcnQp IHsNCj4gbGNvcmVfaWQgPSBydGVfbGNvcmVfaWQoKTsNCj4gY2FjaGVkX2ZyZWVfc2xvdHMgPSAm aC0+bG9jYWxfZnJlZV9zbG90c1tsY29yZV9pZF07DQo+IEBAIC0xMTQxLDkgKzExNTUsNyBAQCBf X3J0ZV9oYXNoX2NvbXBhY3RfbGwoc3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqY3VyX2JrdCwgaW50 IHBvcykgew0KPiBpZiAobGFzdF9ia3QtPmtleV9pZHhbaV0gIT0gRU1QVFlfU0xPVCkgew0KPiBj dXJfYmt0LT5rZXlfaWR4W3Bvc10gPSBsYXN0X2JrdC0+a2V5X2lkeFtpXTsNCj4gY3VyX2JrdC0+ c2lnX2N1cnJlbnRbcG9zXSA9IGxhc3RfYmt0LT5zaWdfY3VycmVudFtpXTsNCj4gLWN1cl9ia3Qt PnNpZ19hbHRbcG9zXSA9IGxhc3RfYmt0LT5zaWdfYWx0W2ldOw0KPiBsYXN0X2JrdC0+c2lnX2N1 cnJlbnRbaV0gPSBOVUxMX1NJR05BVFVSRTsNCj4gLWxhc3RfYmt0LT5zaWdfYWx0W2ldID0gTlVM TF9TSUdOQVRVUkU7DQo+IGxhc3RfYmt0LT5rZXlfaWR4W2ldID0gRU1QVFlfU0xPVDsNCj4gcmV0 dXJuOw0KPiB9DQo+IEBAIC0xMTUzLDcgKzExNjUsNyBAQCBfX3J0ZV9oYXNoX2NvbXBhY3RfbGwo c3RydWN0IHJ0ZV9oYXNoX2J1Y2tldCAqY3VyX2JrdCwgaW50IHBvcykgew0KPiAvKiBTZWFyY2gg b25lIGJ1Y2tldCBhbmQgcmVtb3ZlIHRoZSBtYXRjaGVkIGtleSAqLw0KPiBzdGF0aWMgaW5saW5l IGludDMyX3QNCj4gc2VhcmNoX2FuZF9yZW1vdmUoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBj b25zdCB2b2lkICprZXksDQo+IC1zdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpia3QsIGhhc2hfc2ln X3Qgc2lnLCBpbnQgKnBvcykNCj4gK3N0cnVjdCBydGVfaGFzaF9idWNrZXQgKmJrdCwgdWludDE2 X3Qgc2lnLCBpbnQgKnBvcykNCj4gew0KPiBzdHJ1Y3QgcnRlX2hhc2hfa2V5ICprLCAqa2V5cyA9 IGgtPmtleV9zdG9yZTsNCj4gdW5zaWduZWQgaW50IGk7DQo+IEBAIC0xMTg1LDE5ICsxMTk3LDIx IEBAIHN0YXRpYyBpbmxpbmUgaW50MzJfdA0KPiBfX3J0ZV9oYXNoX2RlbF9rZXlfd2l0aF9oYXNo KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPiBoYXNoX3NpZ190 IHNpZykNCj4gew0KPiAtdWludDMyX3QgYnVja2V0X2lkeDsNCj4gLWhhc2hfc2lnX3QgYWx0X2hh c2g7DQo+ICt1aW50MzJfdCBwcmltX2J1Y2tldF9pZHgsIHNlY19idWNrZXRfaWR4Ow0KPiBzdHJ1 Y3QgcnRlX2hhc2hfYnVja2V0ICpwcmltX2JrdCwgKnNlY19ia3QsICpwcmV2X2JrdCwgKmxhc3Rf Ymt0Ow0KPiBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpjdXJfYmt0Ow0KPiBpbnQgcG9zOw0KPiBp bnQzMl90IHJldCwgaTsNCj4gK3VpbnQxNl90IHNob3J0X3NpZzsNCj4NCj4gLWJ1Y2tldF9pZHgg PSBzaWcgJiBoLT5idWNrZXRfYml0bWFzazsNCj4gLXByaW1fYmt0ID0gJmgtPmJ1Y2tldHNbYnVj a2V0X2lkeF07DQo+ICtzaG9ydF9zaWcgPSBnZXRfc2hvcnRfc2lnKHNpZyk7DQo+ICtwcmltX2J1 Y2tldF9pZHggPSBnZXRfcHJpbV9idWNrZXRfaW5kZXgoaCwgc2lnKTsNCj4gK3NlY19idWNrZXRf aWR4ID0gZ2V0X2FsdF9idWNrZXRfaW5kZXgoaCwgcHJpbV9idWNrZXRfaWR4LCBzaG9ydF9zaWcp Ow0KPiArcHJpbV9ia3QgPSAmaC0+YnVja2V0c1twcmltX2J1Y2tldF9pZHhdOw0KPg0KPiBfX2hh c2hfcndfd3JpdGVyX2xvY2soaCk7DQo+IC8qIGxvb2sgZm9yIGtleSBpbiBwcmltYXJ5IGJ1Y2tl dCAqLw0KPiAtcmV0ID0gc2VhcmNoX2FuZF9yZW1vdmUoaCwga2V5LCBwcmltX2JrdCwgc2lnLCAm cG9zKTsNCj4gK3JldCA9IHNlYXJjaF9hbmRfcmVtb3ZlKGgsIGtleSwgcHJpbV9ia3QsIHNob3J0 X3NpZywgJnBvcyk7DQo+IGlmIChyZXQgIT0gLTEpIHsNCj4gX19ydGVfaGFzaF9jb21wYWN0X2xs KHByaW1fYmt0LCBwb3MpOw0KPiBsYXN0X2JrdCA9IHByaW1fYmt0LT5uZXh0Ow0KPiBAQCAtMTIw NiwxMiArMTIyMCwxMCBAQCBfX3J0ZV9oYXNoX2RlbF9rZXlfd2l0aF9oYXNoKGNvbnN0IHN0cnVj dCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqa2V5LA0KPiB9DQo+DQo+IC8qIENhbGN1bGF0ZSBz ZWNvbmRhcnkgaGFzaCAqLw0KPiAtYWx0X2hhc2ggPSBydGVfaGFzaF9zZWNvbmRhcnlfaGFzaChz aWcpOw0KPiAtYnVja2V0X2lkeCA9IGFsdF9oYXNoICYgaC0+YnVja2V0X2JpdG1hc2s7DQo+IC1z ZWNfYmt0ID0gJmgtPmJ1Y2tldHNbYnVja2V0X2lkeF07DQo+ICtzZWNfYmt0ID0gJmgtPmJ1Y2tl dHNbc2VjX2J1Y2tldF9pZHhdOw0KPg0KPiBGT1JfRUFDSF9CVUNLRVQoY3VyX2JrdCwgc2VjX2Jr dCkgew0KPiAtcmV0ID0gc2VhcmNoX2FuZF9yZW1vdmUoaCwga2V5LCBjdXJfYmt0LCBhbHRfaGFz aCwgJnBvcyk7DQo+ICtyZXQgPSBzZWFyY2hfYW5kX3JlbW92ZShoLCBrZXksIGN1cl9ia3QsIHNo b3J0X3NpZywgJnBvcyk7DQo+IGlmIChyZXQgIT0gLTEpIHsNCj4gX19ydGVfaGFzaF9jb21wYWN0 X2xsKGN1cl9ia3QsIHBvcyk7DQo+IGxhc3RfYmt0ID0gc2VjX2JrdC0+bmV4dDsNCj4gQEAgLTEy ODgsNTUgKzEzMDAsMzUgQEAgc3RhdGljIGlubGluZSB2b2lkDQo+IGNvbXBhcmVfc2lnbmF0dXJl cyh1aW50MzJfdCAqcHJpbV9oYXNoX21hdGNoZXMsIHVpbnQzMl90ICpzZWNfaGFzaF9tYXRjaGVz LA0KPiBjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpwcmltX2JrdCwNCj4gY29uc3Qgc3Ry dWN0IHJ0ZV9oYXNoX2J1Y2tldCAqc2VjX2JrdCwNCj4gLWhhc2hfc2lnX3QgcHJpbV9oYXNoLCBo YXNoX3NpZ190IHNlY19oYXNoLA0KPiArdWludDE2X3Qgc2lnLA0KPiBlbnVtIHJ0ZV9oYXNoX3Np Z19jb21wYXJlX2Z1bmN0aW9uIHNpZ19jbXBfZm4pDQo+IHsNCj4gdW5zaWduZWQgaW50IGk7DQo+ DQo+ICsvKiBGb3IgbWF0Y2ggbWFzayB0aGUgZmlyc3QgYml0IG9mIGV2ZXJ5IHR3byBiaXRzIGlu ZGljYXRlcyB0aGUgbWF0Y2ggKi8NCj4gc3dpdGNoIChzaWdfY21wX2ZuKSB7DQo+IC0jaWZkZWYg UlRFX01BQ0hJTkVfQ1BVRkxBR19BVlgyDQo+IC1jYXNlIFJURV9IQVNIX0NPTVBBUkVfQVZYMjoN Cj4gLSpwcmltX2hhc2hfbWF0Y2hlcyA9IF9tbTI1Nl9tb3ZlbWFza19wcygoX19tMjU2KV9tbTI1 Nl9jbXBlcV9lcGkzMigNCj4gLV9tbTI1Nl9sb2FkX3NpMjU2KA0KPiAtKF9fbTI1NmkgY29uc3Qg KilwcmltX2JrdC0+c2lnX2N1cnJlbnQpLA0KPiAtX21tMjU2X3NldDFfZXBpMzIocHJpbV9oYXNo KSkpOw0KPiAtKnNlY19oYXNoX21hdGNoZXMgPSBfbW0yNTZfbW92ZW1hc2tfcHMoKF9fbTI1Nilf bW0yNTZfY21wZXFfZXBpMzIoDQo+IC1fbW0yNTZfbG9hZF9zaTI1NigNCj4gLShfX20yNTZpIGNv bnN0ICopc2VjX2JrdC0+c2lnX2N1cnJlbnQpLA0KPiAtX21tMjU2X3NldDFfZXBpMzIoc2VjX2hh c2gpKSk7DQo+IC1icmVhazsNCj4gLSNlbmRpZg0KPiAjaWZkZWYgUlRFX01BQ0hJTkVfQ1BVRkxB R19TU0UyDQo+IGNhc2UgUlRFX0hBU0hfQ09NUEFSRV9TU0U6DQo+IC0vKiBDb21wYXJlIHRoZSBm aXJzdCA0IHNpZ25hdHVyZXMgaW4gdGhlIGJ1Y2tldCAqLw0KPiAtKnByaW1faGFzaF9tYXRjaGVz ID0gX21tX21vdmVtYXNrX3BzKChfX20xMjgpX21tX2NtcGVxX2VwaTE2KA0KPiArLyogQ29tcGFy ZSBhbGwgc2lnbmF0dXJlcyBpbiB0aGUgYnVja2V0ICovDQo+ICsqcHJpbV9oYXNoX21hdGNoZXMg PSBfbW1fbW92ZW1hc2tfZXBpOChfbW1fY21wZXFfZXBpMTYoDQo+IF9tbV9sb2FkX3NpMTI4KA0K PiAoX19tMTI4aSBjb25zdCAqKXByaW1fYmt0LT5zaWdfY3VycmVudCksDQo+IC1fbW1fc2V0MV9l cGkzMihwcmltX2hhc2gpKSk7DQo+IC0qcHJpbV9oYXNoX21hdGNoZXMgfD0gKF9tbV9tb3ZlbWFz a19wcygoX19tMTI4KV9tbV9jbXBlcV9lcGkxNigNCj4gLV9tbV9sb2FkX3NpMTI4KA0KPiAtKF9f bTEyOGkgY29uc3QgKikmcHJpbV9ia3QtPnNpZ19jdXJyZW50WzRdKSwNCj4gLV9tbV9zZXQxX2Vw aTMyKHByaW1faGFzaCkpKSkgPDwgNDsNCj4gLS8qIENvbXBhcmUgdGhlIGZpcnN0IDQgc2lnbmF0 dXJlcyBpbiB0aGUgYnVja2V0ICovDQo+IC0qc2VjX2hhc2hfbWF0Y2hlcyA9IF9tbV9tb3ZlbWFz a19wcygoX19tMTI4KV9tbV9jbXBlcV9lcGkxNigNCj4gK19tbV9zZXQxX2VwaTE2KHNpZykpKTsN Cj4gKy8qIENvbXBhcmUgYWxsIHNpZ25hdHVyZXMgaW4gdGhlIGJ1Y2tldCAqLw0KPiArKnNlY19o YXNoX21hdGNoZXMgPSBfbW1fbW92ZW1hc2tfZXBpOChfbW1fY21wZXFfZXBpMTYoDQo+IF9tbV9s b2FkX3NpMTI4KA0KPiAoX19tMTI4aSBjb25zdCAqKXNlY19ia3QtPnNpZ19jdXJyZW50KSwNCj4g LV9tbV9zZXQxX2VwaTMyKHNlY19oYXNoKSkpOw0KPiAtKnNlY19oYXNoX21hdGNoZXMgfD0gKF9t bV9tb3ZlbWFza19wcygoX19tMTI4KV9tbV9jbXBlcV9lcGkxNigNCj4gLV9tbV9sb2FkX3NpMTI4 KA0KPiAtKF9fbTEyOGkgY29uc3QgKikmc2VjX2JrdC0+c2lnX2N1cnJlbnRbNF0pLA0KPiAtX21t X3NldDFfZXBpMzIoc2VjX2hhc2gpKSkpIDw8IDQ7DQo+ICtfbW1fc2V0MV9lcGkxNihzaWcpKSk7 DQo+IGJyZWFrOw0KPiAjZW5kaWYNCj4gZGVmYXVsdDoNCj4gZm9yIChpID0gMDsgaSA8IFJURV9I QVNIX0JVQ0tFVF9FTlRSSUVTOyBpKyspIHsNCj4gKnByaW1faGFzaF9tYXRjaGVzIHw9DQo+IC0o KHByaW1faGFzaCA9PSBwcmltX2JrdC0+c2lnX2N1cnJlbnRbaV0pIDw8IGkpOw0KPiArKChzaWcg PT0gcHJpbV9ia3QtPnNpZ19jdXJyZW50W2ldKSA8PCAoaSA8PCAxKSk7DQo+ICpzZWNfaGFzaF9t YXRjaGVzIHw9DQo+IC0oKHNlY19oYXNoID09IHNlY19ia3QtPnNpZ19jdXJyZW50W2ldKSA8PCBp KTsNCj4gKygoc2lnID09IHNlY19ia3QtPnNpZ19jdXJyZW50W2ldKSA8PCAoaSA8PCAxKSk7DQo+ IH0NCj4gfQ0KPiAtDQo+IH0NCj4NCj4gI2RlZmluZSBQUkVGRVRDSF9PRkZTRVQgNA0KPiBAQCAt MTM0OSw3ICsxMzQxLDkgQEAgX19ydGVfaGFzaF9sb29rdXBfYnVsayhjb25zdCBzdHJ1Y3QgcnRl X2hhc2ggKmgsIGNvbnN0IHZvaWQgKiprZXlzLA0KPiBpbnQzMl90IGk7DQo+IGludDMyX3QgcmV0 Ow0KPiB1aW50MzJfdCBwcmltX2hhc2hbUlRFX0hBU0hfTE9PS1VQX0JVTEtfTUFYXTsNCj4gLXVp bnQzMl90IHNlY19oYXNoW1JURV9IQVNIX0xPT0tVUF9CVUxLX01BWF07DQo+ICt1aW50MzJfdCBw cmltX2luZGV4W1JURV9IQVNIX0xPT0tVUF9CVUxLX01BWF07DQo+ICt1aW50MzJfdCBzZWNfaW5k ZXhbUlRFX0hBU0hfTE9PS1VQX0JVTEtfTUFYXTsNCj4gK3VpbnQxNl90IHNpZ1tSVEVfSEFTSF9M T09LVVBfQlVMS19NQVhdOw0KPiBjb25zdCBzdHJ1Y3QgcnRlX2hhc2hfYnVja2V0ICpwcmltYXJ5 X2JrdFtSVEVfSEFTSF9MT09LVVBfQlVMS19NQVhdOw0KPiBjb25zdCBzdHJ1Y3QgcnRlX2hhc2hf YnVja2V0ICpzZWNvbmRhcnlfYmt0W1JURV9IQVNIX0xPT0tVUF9CVUxLX01BWF07DQo+IHVpbnQz Ml90IHByaW1faGl0bWFza1tSVEVfSEFTSF9MT09LVVBfQlVMS19NQVhdID0gezB9Ow0KPiBAQCAt MTM2OCwxMCArMTM2MiwxMyBAQCBfX3J0ZV9oYXNoX2xvb2t1cF9idWxrKGNvbnN0IHN0cnVjdCBy dGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtleXMsDQo+IHJ0ZV9wcmVmZXRjaDAoa2V5c1tpICsg UFJFRkVUQ0hfT0ZGU0VUXSk7DQo+DQo+IHByaW1faGFzaFtpXSA9IHJ0ZV9oYXNoX2hhc2goaCwg a2V5c1tpXSk7DQo+IC1zZWNfaGFzaFtpXSA9IHJ0ZV9oYXNoX3NlY29uZGFyeV9oYXNoKHByaW1f aGFzaFtpXSk7DQo+DQo+IC1wcmltYXJ5X2JrdFtpXSA9ICZoLT5idWNrZXRzW3ByaW1faGFzaFtp XSAmIGgtPmJ1Y2tldF9iaXRtYXNrXTsNCj4gLXNlY29uZGFyeV9ia3RbaV0gPSAmaC0+YnVja2V0 c1tzZWNfaGFzaFtpXSAmIGgtPmJ1Y2tldF9iaXRtYXNrXTsNCj4gK3NpZ1tpXSA9IGdldF9zaG9y dF9zaWcocHJpbV9oYXNoW2ldKTsNCj4gK3ByaW1faW5kZXhbaV0gPSBnZXRfcHJpbV9idWNrZXRf aW5kZXgoaCwgcHJpbV9oYXNoW2ldKTsNCj4gK3NlY19pbmRleFtpXSA9IGdldF9hbHRfYnVja2V0 X2luZGV4KGgsIHByaW1faW5kZXhbaV0sIHNpZ1tpXSk7DQo+ICsNCj4gK3ByaW1hcnlfYmt0W2ld ID0gJmgtPmJ1Y2tldHNbcHJpbV9pbmRleFtpXV07DQo+ICtzZWNvbmRhcnlfYmt0W2ldID0gJmgt PmJ1Y2tldHNbc2VjX2luZGV4W2ldXTsNCj4NCj4gcnRlX3ByZWZldGNoMChwcmltYXJ5X2JrdFtp XSk7DQo+IHJ0ZV9wcmVmZXRjaDAoc2Vjb25kYXJ5X2JrdFtpXSk7DQo+IEBAIC0xMzgwLDEwICsx Mzc3LDEzIEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1bGsoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpo LCBjb25zdCB2b2lkICoqa2V5cywNCj4gLyogQ2FsY3VsYXRlIGFuZCBwcmVmZXRjaCByZXN0IG9m IHRoZSBidWNrZXRzICovDQo+IGZvciAoOyBpIDwgbnVtX2tleXM7IGkrKykgew0KPiBwcmltX2hh c2hbaV0gPSBydGVfaGFzaF9oYXNoKGgsIGtleXNbaV0pOw0KPiAtc2VjX2hhc2hbaV0gPSBydGVf aGFzaF9zZWNvbmRhcnlfaGFzaChwcmltX2hhc2hbaV0pOw0KPg0KPiAtcHJpbWFyeV9ia3RbaV0g PSAmaC0+YnVja2V0c1twcmltX2hhc2hbaV0gJiBoLT5idWNrZXRfYml0bWFza107DQo+IC1zZWNv bmRhcnlfYmt0W2ldID0gJmgtPmJ1Y2tldHNbc2VjX2hhc2hbaV0gJiBoLT5idWNrZXRfYml0bWFz a107DQo+ICtzaWdbaV0gPSBnZXRfc2hvcnRfc2lnKHByaW1faGFzaFtpXSk7DQo+ICtwcmltX2lu ZGV4W2ldID0gZ2V0X3ByaW1fYnVja2V0X2luZGV4KGgsIHByaW1faGFzaFtpXSk7DQo+ICtzZWNf aW5kZXhbaV0gPSBnZXRfYWx0X2J1Y2tldF9pbmRleChoLCBwcmltX2luZGV4W2ldLCBzaWdbaV0p Ow0KPiArDQo+ICtwcmltYXJ5X2JrdFtpXSA9ICZoLT5idWNrZXRzW3ByaW1faW5kZXhbaV1dOw0K PiArc2Vjb25kYXJ5X2JrdFtpXSA9ICZoLT5idWNrZXRzW3NlY19pbmRleFtpXV07DQo+DQo+IHJ0 ZV9wcmVmZXRjaDAocHJpbWFyeV9ia3RbaV0pOw0KPiBydGVfcHJlZmV0Y2gwKHNlY29uZGFyeV9i a3RbaV0pOw0KPiBAQCAtMTM5NCwxMCArMTM5NCwxMSBAQCBfX3J0ZV9oYXNoX2xvb2t1cF9idWxr KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtleXMsDQo+IGZvciAoaSA9 IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7DQo+IGNvbXBhcmVfc2lnbmF0dXJlcygmcHJpbV9oaXRt YXNrW2ldLCAmc2VjX2hpdG1hc2tbaV0sDQo+IHByaW1hcnlfYmt0W2ldLCBzZWNvbmRhcnlfYmt0 W2ldLA0KPiAtcHJpbV9oYXNoW2ldLCBzZWNfaGFzaFtpXSwgaC0+c2lnX2NtcF9mbik7DQo+ICtz aWdbaV0sIGgtPnNpZ19jbXBfZm4pOw0KPg0KPiBpZiAocHJpbV9oaXRtYXNrW2ldKSB7DQo+IC11 aW50MzJfdCBmaXJzdF9oaXQgPSBfX2J1aWx0aW5fY3R6bChwcmltX2hpdG1hc2tbaV0pOw0KPiAr dWludDMyX3QgZmlyc3RfaGl0ID0NCj4gK19fYnVpbHRpbl9jdHpsKHByaW1faGl0bWFza1tpXSkg Pj4gMTsNCj4gdWludDMyX3Qga2V5X2lkeCA9IHByaW1hcnlfYmt0W2ldLT5rZXlfaWR4W2ZpcnN0 X2hpdF07DQo+IGNvbnN0IHN0cnVjdCBydGVfaGFzaF9rZXkgKmtleV9zbG90ID0NCj4gKGNvbnN0 IHN0cnVjdCBydGVfaGFzaF9rZXkgKikoDQo+IEBAIC0xNDA4LDcgKzE0MDksOCBAQCBfX3J0ZV9o YXNoX2xvb2t1cF9idWxrKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtl eXMsDQo+IH0NCj4NCj4gaWYgKHNlY19oaXRtYXNrW2ldKSB7DQo+IC11aW50MzJfdCBmaXJzdF9o aXQgPSBfX2J1aWx0aW5fY3R6bChzZWNfaGl0bWFza1tpXSk7DQo+ICt1aW50MzJfdCBmaXJzdF9o aXQgPQ0KPiArX19idWlsdGluX2N0emwoc2VjX2hpdG1hc2tbaV0pID4+IDE7DQo+IHVpbnQzMl90 IGtleV9pZHggPSBzZWNvbmRhcnlfYmt0W2ldLT5rZXlfaWR4W2ZpcnN0X2hpdF07DQo+IGNvbnN0 IHN0cnVjdCBydGVfaGFzaF9rZXkgKmtleV9zbG90ID0NCj4gKGNvbnN0IHN0cnVjdCBydGVfaGFz aF9rZXkgKikoDQo+IEBAIC0xNDIyLDcgKzE0MjQsOCBAQCBfX3J0ZV9oYXNoX2xvb2t1cF9idWxr KGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtleXMsDQo+IGZvciAoaSA9 IDA7IGkgPCBudW1fa2V5czsgaSsrKSB7DQo+IHBvc2l0aW9uc1tpXSA9IC1FTk9FTlQ7DQo+IHdo aWxlIChwcmltX2hpdG1hc2tbaV0pIHsNCj4gLXVpbnQzMl90IGhpdF9pbmRleCA9IF9fYnVpbHRp bl9jdHpsKHByaW1faGl0bWFza1tpXSk7DQo+ICt1aW50MzJfdCBoaXRfaW5kZXggPQ0KPiArX19i dWlsdGluX2N0emwocHJpbV9oaXRtYXNrW2ldKSA+PiAxOw0KPg0KPiB1aW50MzJfdCBrZXlfaWR4 ID0gcHJpbWFyeV9ia3RbaV0tPmtleV9pZHhbaGl0X2luZGV4XTsNCj4gY29uc3Qgc3RydWN0IHJ0 ZV9oYXNoX2tleSAqa2V5X3Nsb3QgPQ0KPiBAQCAtMTQ0MSwxMSArMTQ0NCwxMiBAQCBfX3J0ZV9o YXNoX2xvb2t1cF9idWxrKGNvbnN0IHN0cnVjdCBydGVfaGFzaCAqaCwgY29uc3Qgdm9pZCAqKmtl eXMsDQo+IHBvc2l0aW9uc1tpXSA9IGtleV9pZHggLSAxOw0KPiBnb3RvIG5leHRfa2V5Ow0KPiB9 DQo+IC1wcmltX2hpdG1hc2tbaV0gJj0gfigxIDw8IChoaXRfaW5kZXgpKTsNCj4gK3ByaW1faGl0 bWFza1tpXSAmPSB+KDNVTEwgPDwgKGhpdF9pbmRleCA8PCAxKSk7DQo+IH0NCj4NCj4gd2hpbGUg KHNlY19oaXRtYXNrW2ldKSB7DQo+IC11aW50MzJfdCBoaXRfaW5kZXggPSBfX2J1aWx0aW5fY3R6 bChzZWNfaGl0bWFza1tpXSk7DQo+ICt1aW50MzJfdCBoaXRfaW5kZXggPQ0KPiArX19idWlsdGlu X2N0emwoc2VjX2hpdG1hc2tbaV0pID4+IDE7DQo+DQo+IHVpbnQzMl90IGtleV9pZHggPSBzZWNv bmRhcnlfYmt0W2ldLT5rZXlfaWR4W2hpdF9pbmRleF07DQo+IGNvbnN0IHN0cnVjdCBydGVfaGFz aF9rZXkgKmtleV9zbG90ID0NCj4gQEAgLTE0NjUsNyArMTQ2OSw3IEBAIF9fcnRlX2hhc2hfbG9v a3VwX2J1bGsoY29uc3Qgc3RydWN0IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywNCj4g cG9zaXRpb25zW2ldID0ga2V5X2lkeCAtIDE7DQo+IGdvdG8gbmV4dF9rZXk7DQo+IH0NCj4gLXNl Y19oaXRtYXNrW2ldICY9IH4oMSA8PCAoaGl0X2luZGV4KSk7DQo+ICtzZWNfaGl0bWFza1tpXSAm PSB+KDNVTEwgPDwgKGhpdF9pbmRleCA8PCAxKSk7DQo+IH0NCj4NCj4gbmV4dF9rZXk6DQo+IEBA IC0xNDg4LDEwICsxNDkyLDEwIEBAIF9fcnRlX2hhc2hfbG9va3VwX2J1bGsoY29uc3Qgc3RydWN0 IHJ0ZV9oYXNoICpoLCBjb25zdCB2b2lkICoqa2V5cywNCj4gRk9SX0VBQ0hfQlVDS0VUKGN1cl9i a3QsIG5leHRfYmt0KSB7DQo+IGlmIChkYXRhICE9IE5VTEwpDQo+IHJldCA9IHNlYXJjaF9vbmVf YnVja2V0KGgsIGtleXNbaV0sDQo+IC1zZWNfaGFzaFtpXSwgJmRhdGFbaV0sIGN1cl9ia3QpOw0K PiArc2lnW2ldLCAmZGF0YVtpXSwgY3VyX2JrdCk7DQo+IGVsc2UNCj4gcmV0ID0gc2VhcmNoX29u ZV9idWNrZXQoaCwga2V5c1tpXSwNCj4gLXNlY19oYXNoW2ldLCBOVUxMLCBjdXJfYmt0KTsNCj4g K3NpZ1tpXSwgTlVMTCwgY3VyX2JrdCk7DQo+IGlmIChyZXQgIT0gLTEpIHsNCj4gcG9zaXRpb25z W2ldID0gcmV0Ow0KPiBoaXRzIHw9IDFVTEwgPDwgaTsNCj4gZGlmZiAtLWdpdCBhL2xpYi9saWJy dGVfaGFzaC9ydGVfY3Vja29vX2hhc2guaCBiL2xpYi9saWJydGVfaGFzaC9ydGVfY3Vja29vX2hh c2guaA0KPiBpbmRleCBlNjAxNTIwLi43NzUzY2Q4IDEwMDY0NA0KPiAtLS0gYS9saWIvbGlicnRl X2hhc2gvcnRlX2N1Y2tvb19oYXNoLmgNCj4gKysrIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9jdWNr b29faGFzaC5oDQo+IEBAIC0xMjksMTggKzEyOSwxNSBAQCBzdHJ1Y3QgcnRlX2hhc2hfa2V5IHsN Cj4gZW51bSBydGVfaGFzaF9zaWdfY29tcGFyZV9mdW5jdGlvbiB7DQo+IFJURV9IQVNIX0NPTVBB UkVfU0NBTEFSID0gMCwNCj4gUlRFX0hBU0hfQ09NUEFSRV9TU0UsDQo+IC1SVEVfSEFTSF9DT01Q QVJFX0FWWDIsDQo+IFJURV9IQVNIX0NPTVBBUkVfTlVNDQo+IH07DQo+DQo+IC8qKiBCdWNrZXQg c3RydWN0dXJlICovDQo+IHN0cnVjdCBydGVfaGFzaF9idWNrZXQgew0KPiAtaGFzaF9zaWdfdCBz aWdfY3VycmVudFtSVEVfSEFTSF9CVUNLRVRfRU5UUklFU107DQo+ICt1aW50MTZfdCBzaWdfY3Vy cmVudFtSVEVfSEFTSF9CVUNLRVRfRU5UUklFU107DQo+DQo+IHVpbnQzMl90IGtleV9pZHhbUlRF X0hBU0hfQlVDS0VUX0VOVFJJRVNdOw0KPg0KPiAtaGFzaF9zaWdfdCBzaWdfYWx0W1JURV9IQVNI X0JVQ0tFVF9FTlRSSUVTXTsNCj4gLQ0KPiB1aW50OF90IGZsYWdbUlRFX0hBU0hfQlVDS0VUX0VO VFJJRVNdOw0KPg0KPiB2b2lkICpuZXh0Ow0KPiBAQCAtMTkzLDYgKzE5MCw3IEBAIHN0cnVjdCBy dGVfaGFzaCB7DQo+DQo+IHN0cnVjdCBxdWV1ZV9ub2RlIHsNCj4gc3RydWN0IHJ0ZV9oYXNoX2J1 Y2tldCAqYmt0OyAvKiBDdXJyZW50IGJ1Y2tldCBvbiB0aGUgYmZzIHNlYXJjaCAqLw0KPiArdWlu dDMyX3QgY3VyX2JrdF9pZHg7DQo+DQo+IHN0cnVjdCBxdWV1ZV9ub2RlICpwcmV2OyAgICAgLyog UGFyZW50KGJ1Y2tldCkgaW4gc2VhcmNoIHBhdGggKi8NCj4gaW50IHByZXZfc2xvdDsgICAgICAg ICAgICAgICAvKiBQYXJlbnQoc2xvdCkgaW4gc2VhcmNoIHBhdGggKi8NCj4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfaGFzaC9ydGVfaGFzaC5oIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmgN Cj4gaW5kZXggMTFkOGUyOC4uNmFjZTY0ZSAxMDA2NDQNCj4gLS0tIGEvbGliL2xpYnJ0ZV9oYXNo L3J0ZV9oYXNoLmgNCj4gKysrIGIvbGliL2xpYnJ0ZV9oYXNoL3J0ZV9oYXNoLmgNCj4gQEAgLTQw LDcgKzQwLDEwIEBAIGV4dGVybiAiQyIgew0KPiAvKiogRmxhZyB0byBpbmRpY2F0ZSB0aGUgZXh0 ZW5kYWJlIGJ1Y2tldCB0YWJsZSBmZWF0dXJlIHNob3VsZCBiZSB1c2VkICovDQo+ICNkZWZpbmUg UlRFX0hBU0hfRVhUUkFfRkxBR1NfRVhUX1RBQkxFIDB4MDgNCj4NCj4gLS8qKiBTaWduYXR1cmUg b2Yga2V5IHRoYXQgaXMgc3RvcmVkIGludGVybmFsbHkuICovDQo+ICsvKioNCj4gKyAqIFRoZSB0 eXBlIG9mIGhhc2ggdmFsdWUgb2YgYSBrZXkuDQo+ICsgKiBJdCBzaG91bGQgYmUgYSB2YWx1ZSBv ZiBhdCBsZWFzdCAzMmJpdCB3aXRoIGZ1bGx5IHJhbmRvbSBwYXR0ZXJuLg0KPiArICovDQo+IHR5 cGVkZWYgdWludDMyX3QgaGFzaF9zaWdfdDsNCj4NCj4gLyoqIFR5cGUgb2YgZnVuY3Rpb24gdGhh dCBjYW4gYmUgdXNlZCBmb3IgY2FsY3VsYXRpbmcgdGhlIGhhc2ggdmFsdWUuICovDQo+IC0tDQo+ IDIuNy40DQo+DQoNCklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWls IGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJp dmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5v dGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRl bnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3Jl IG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==