From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id EB62758DD for ; Thu, 8 Jan 2015 17:28:18 +0100 (CET) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga102.jf.intel.com with ESMTP; 08 Jan 2015 08:25:48 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.97,862,1389772800"; d="scan'208";a="438078701" Received: from irsmsx110.ger.corp.intel.com ([163.33.3.25]) by FMSMGA003.fm.intel.com with ESMTP; 08 Jan 2015 08:15:44 -0800 Received: from irsmsx109.ger.corp.intel.com ([169.254.13.244]) by IRSMSX110.ger.corp.intel.com ([169.254.15.55]) with mapi id 14.03.0195.001; Thu, 8 Jan 2015 16:28:15 +0000 From: "Pattan, Reshma" To: Richard Sanger Thread-Topic: [dpdk-dev] [PATCH 1/3] librte_reorder: New reorder library Thread-Index: AQHQKpiDjILGhYpI3kagulLGqv9iMZy1J1MAgAFCq7A= Date: Thu, 8 Jan 2015 16:28:15 +0000 Message-ID: <3AEA2BF9852C6F48A459DA490692831FE508FB@IRSMSX109.ger.corp.intel.com> References: <1420648753-17136-1-git-send-email-reshma.pattan@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.180] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH 1/3] librte_reorder: New reorder library X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Jan 2015 16:28:21 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmljaGFyZCBTYW5nZXIg W21haWx0bzpyc2FuZ2VyYXJqQGdtYWlsLmNvbV0NCj4gU2VudDogV2VkbmVzZGF5LCBKYW51YXJ5 IDcsIDIwMTUgOToxMCBQTQ0KPiBUbzogUGF0dGFuLCBSZXNobWENCj4gQ2M6IGRldkBkcGRrLm9y Zw0KPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggMS8zXSBsaWJydGVfcmVvcmRlcjog TmV3IHJlb3JkZXIgbGlicmFyeQ0KPiANCj4gT24gOCBKYW51YXJ5IDIwMTUgYXQgMDU6MzksIFJl c2htYSBQYXR0YW4gPHJlc2htYS5wYXR0YW5AaW50ZWwuY29tPiB3cm90ZToNCj4gPiBGcm9tOiBS ZXNobWEgUGF0dGFuIDxyZXNobWEucGF0dGFuQGludGVsLmNvbT4NCj4gPg0KPiA+ICAgICAgICAg ICAgIDEpTmV3IGxpYnJhcnkgdG8gcHJvdmlkZSByZW9yZGVyaW5nIG9mIG91dCBvZiBvcmRlcmVk DQo+ID4gICAgICAgICAgICAgbWJ1ZnMgYmFzZWQgb24gc2VxdWVuY2UgbnVtYmVyIG9mIG1idWYu IExpYnJhcnkgdXNlcyByZW9yZGVyIGJ1ZmZlcg0KPiBzdHJ1Y3R1cmUNCj4gPiAgICAgICAgICAg ICB3aGljaCBpbiB0ZXJuIHVzZXMgdHdvIGNpcmN1bGFyIGJ1ZmZlcnMgY2FsbGVkIHJlYWR5IGFu ZCBvcmRlciBidWZmZXJzLg0KPiA+ICAgICAgICAgICAgICpydGVfcmVvcmRlcl9jcmVhdGUgQVBJ IGNyZWF0ZXMgaW5zdGFuY2Ugb2YgcmVvcmRlciBidWZmZXIuDQo+ID4gICAgICAgICAgICAgKnJ0 ZV9yZW9yZGVyX2luaXQgQVBJIGluaXRpYWxpemVzIGdpdmVuIHJlb3JkZXIgYnVmZmVyIGluc3Rh bmNlLg0KPiA+ICAgICAgICAgICAgICpydGVfcmVvcmRlcl9yZXNldCBBUEkgcmVzZXRzIGdpdmVu IHJlb3JkZXIgYnVmZmVyIGluc3RhbmNlLg0KPiA+ICAgICAgICAgICAgICpydGVfcmVvcmRlcl9p bnNlcnQgQVBJIGluc2VydHMgdGhlIG1idWYgaW50byBvcmRlciBjaXJjdWxhciBidWZmZXIuDQo+ ID4gICAgICAgICAgICAgKnJ0ZV9yZW9yZGVyX2ZpbGxfb3ZlcmZsb3cgbW92ZXMgbWJ1ZnMgZnJv bSBvcmRlciBidWZmZXIgdG8gcmVhZHkNCj4gYnVmZmVyDQo+ID4gICAgICAgICAgICAgdG8gYWNj b21vZGF0ZSBlYXJseSBwYWNrZXRzIGluIG9yZGVyIGJ1ZmZlci4NCj4gPiAgICAgICAgICAgICAq cnRlX3Jlb3JkZXJfZHJhaW4gQVBJIHByb3ZpZGVzIGRyYWluaW5nIGZhY2lsaXR5IHRvIGZldGNo IG91dA0KPiA+ICAgICAgICAgICAgIHJlb3JkZXJlZCBtYnVmcyBmcm9tIG9yZGVyIGFuZCByZWFk eSBidWZmZXJzLg0KPiA+DQo+ID4gICAgICAgICBTaWduZWQtb2ZmLWJ5OiBSZXNobWEgUGF0dGFu IDxyZXNobWEucGF0dGFuQGludGVsLmNvbT4NCj4gPiAgICAgICAgIFNpZ25lZC1vZmYtYnk6IFJp Y2hhcmRzb24gQnJ1Y2UgPGJydWNlLnJpY2hhcmRzb25AaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ ICBjb25maWcvY29tbW9uX2JzZGFwcCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICsN Cj4gPiAgY29uZmlnL2NvbW1vbl9saW51eGFwcCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NSArDQo+ID4gIGxpYi9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKw0KPiA+ICBsaWIvbGlicnRlX2VhbC9jb21tb24vaW5jbHVkZS9ydGVfdGFpbHFfZWxl bS5oIHwgICAyICsNCj4gPiAgbGliL2xpYnJ0ZV9tYnVmL3J0ZV9tYnVmLmggICAgICAgICAgICAg ICAgICAgICB8ICAgMyArDQo+ID4gIGxpYi9saWJydGVfcmVvcmRlci9NYWtlZmlsZSAgICAgICAg ICAgICAgICAgICAgfCAgNTAgKysrDQo+ID4gIGxpYi9saWJydGVfcmVvcmRlci9ydGVfcmVvcmRl ci5jICAgICAgICAgICAgICAgfCA0NjQgKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICBs aWIvbGlicnRlX3Jlb3JkZXIvcnRlX3Jlb3JkZXIuaCAgICAgICAgICAgICAgIHwgMTg0ICsrKysr KysrKysNCj4gPiAgOCBmaWxlcyBjaGFuZ2VkLCA3MTQgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9yZW9yZGVyL01ha2VmaWxlICBjcmVhdGUgbW9kZSAx MDA2NDQNCj4gPiBsaWIvbGlicnRlX3Jlb3JkZXIvcnRlX3Jlb3JkZXIuYyAgY3JlYXRlIG1vZGUg MTAwNjQ0DQo+ID4gbGliL2xpYnJ0ZV9yZW9yZGVyL3J0ZV9yZW9yZGVyLmgNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9jb25maWcvY29tbW9uX2JzZGFwcCBiL2NvbmZpZy9jb21tb25fYnNkYXBwIGlu ZGV4DQo+ID4gOTE3N2RiMS4uZTNlMGU5NCAxMDA2NDQNCj4gPiAtLS0gYS9jb25maWcvY29tbW9u X2JzZGFwcA0KPiA+ICsrKyBiL2NvbmZpZy9jb21tb25fYnNkYXBwDQo+ID4gQEAgLTMzNCw2ICsz MzQsMTEgQEAgQ09ORklHX1JURV9TQ0hFRF9QT1JUX05fR1JJTkRFUlM9OA0KPiA+ICBDT05GSUdf UlRFX0xJQlJURV9ESVNUUklCVVRPUj15DQo+ID4NCj4gPiAgIw0KPiA+ICsjIENvbXBpbGUgdGhl IHJlb3JkZXIgbGlicmFyeQ0KPiA+ICsjDQo+ID4gK0NPTkZJR19SVEVfTElCUlRFX1JFT1JERVI9 eQ0KPiA+ICsNCj4gPiArIw0KPiA+ICAjIENvbXBpbGUgbGlicnRlX3BvcnQNCj4gPiAgIw0KPiA+ ICBDT05GSUdfUlRFX0xJQlJURV9QT1JUPXkNCj4gPiBkaWZmIC0tZ2l0IGEvY29uZmlnL2NvbW1v bl9saW51eGFwcCBiL2NvbmZpZy9jb21tb25fbGludXhhcHAgaW5kZXgNCj4gPiAyZjk2NDNiLi5i NWVjNzMwIDEwMDY0NA0KPiA+IC0tLSBhL2NvbmZpZy9jb21tb25fbGludXhhcHANCj4gPiArKysg Yi9jb25maWcvY29tbW9uX2xpbnV4YXBwDQo+ID4gQEAgLTM0Miw2ICszNDIsMTEgQEAgQ09ORklH X1JURV9TQ0hFRF9QT1JUX05fR1JJTkRFUlM9OA0KPiA+ICBDT05GSUdfUlRFX0xJQlJURV9ESVNU UklCVVRPUj15DQo+ID4NCj4gPiAgIw0KPiA+ICsjIENvbXBpbGUgdGhlIHJlb3JkZXIgbGlicmFy eQ0KPiA+ICsjDQo+ID4gK0NPTkZJR19SVEVfTElCUlRFX1JFT1JERVI9eQ0KPiA+ICsNCj4gPiAr Iw0KPiA+ICAjIENvbXBpbGUgbGlicnRlX3BvcnQNCj4gPiAgIw0KPiA+ICBDT05GSUdfUlRFX0xJ QlJURV9QT1JUPXkNCj4gPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxl IGluZGV4IDBmZmM5ODIuLjU5MTlkMzIgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL01ha2VmaWxlDQo+ ID4gKysrIGIvbGliL01ha2VmaWxlDQo+ID4gQEAgLTY1LDYgKzY1LDcgQEAgRElSUy0kKENPTkZJ R19SVEVfTElCUlRFX0RJU1RSSUJVVE9SKSArPQ0KPiA+IGxpYnJ0ZV9kaXN0cmlidXRvcg0KPiA+ ICBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUE9SVCkgKz0gbGlicnRlX3BvcnQNCj4gPiAgRElS Uy0kKENPTkZJR19SVEVfTElCUlRFX1RBQkxFKSArPSBsaWJydGVfdGFibGUNCj4gPiAgRElSUy0k KENPTkZJR19SVEVfTElCUlRFX1BJUEVMSU5FKSArPSBsaWJydGVfcGlwZWxpbmUNCj4gPiArRElS Uy0kKENPTkZJR19SVEVfTElCUlRFX1JFT1JERVIpICs9IGxpYnJ0ZV9yZW9yZGVyDQo+ID4NCj4g PiAgaWZlcSAoJChDT05GSUdfUlRFX0VYRUNfRU5WX0xJTlVYQVBQKSx5KQ0KPiA+ICBESVJTLSQo Q09ORklHX1JURV9MSUJSVEVfS05JKSArPSBsaWJydGVfa25pIGRpZmYgLS1naXQNCj4gPiBhL2xp Yi9saWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV90YWlscV9lbGVtLmgNCj4gPiBiL2xpYi9s aWJydGVfZWFsL2NvbW1vbi9pbmNsdWRlL3J0ZV90YWlscV9lbGVtLmgNCj4gPiBpbmRleCBmNzRm YzdjLi4zMDEzODY5IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9saWJydGVfZWFsL2NvbW1vbi9pbmNs dWRlL3J0ZV90YWlscV9lbGVtLmgNCj4gPiArKysgYi9saWIvbGlicnRlX2VhbC9jb21tb24vaW5j bHVkZS9ydGVfdGFpbHFfZWxlbS5oDQo+ID4gQEAgLTg0LDYgKzg0LDggQEAgcnRlX3RhaWxxX2Vs ZW0oUlRFX1RBSUxRX0FDTCwgIlJURV9BQ0wiKQ0KPiA+DQo+ID4gIHJ0ZV90YWlscV9lbGVtKFJU RV9UQUlMUV9ESVNUUklCVVRPUiwgIlJURV9ESVNUUklCVVRPUiIpDQo+ID4NCj4gPiArcnRlX3Rh aWxxX2VsZW0oUlRFX1RBSUxRX1JFT1JERVIsICJSVEVfUkVPUkRFUiIpDQo+ID4gKw0KPiA+ICBy dGVfdGFpbHFfZW5kKFJURV9UQUlMUV9OVU0pDQo+ID4NCj4gPiAgI3VuZGVmIHJ0ZV90YWlscV9l bGVtDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfbWJ1Zi9ydGVfbWJ1Zi5oIGIvbGliL2xp YnJ0ZV9tYnVmL3J0ZV9tYnVmLmgNCj4gPiBpbmRleCAxNjA1OWM2Li5lZDI3ZWI4IDEwMDY0NA0K PiA+IC0tLSBhL2xpYi9saWJydGVfbWJ1Zi9ydGVfbWJ1Zi5oDQo+ID4gKysrIGIvbGliL2xpYnJ0 ZV9tYnVmL3J0ZV9tYnVmLmgNCj4gPiBAQCAtMjYyLDYgKzI2Miw5IEBAIHN0cnVjdCBydGVfbWJ1 ZiB7DQo+ID4gICAgICAgICAgICAgICAgIHVpbnQzMl90IHVzcjsgICAgIC8qKjwgVXNlciBkZWZp bmVkIHRhZ3MuIFNlZSBAcnRlX2Rpc3RyaWJ1dG9yX3Byb2Nlc3MNCj4gKi8NCj4gPiAgICAgICAg IH0gaGFzaDsgICAgICAgICAgICAgICAgICAgLyoqPCBoYXNoIGluZm9ybWF0aW9uICovDQo+ID4N Cj4gPiArICAgICAgIC8qIHNlcXVlbmNlIG51bWJlciAtIGZpZWxkIHVzZWQgaW4gZGlzdHJpYnV0 b3IgYW5kIHJlb3JkZXIgbGlicmFyeSAqLw0KPiA+ICsgICAgICAgdWludDMyX3Qgc2VxbjsNCj4g PiArDQo+ID4gICAgICAgICAvKiBzZWNvbmQgY2FjaGUgbGluZSAtIGZpZWxkcyBvbmx5IHVzZWQg aW4gc2xvdyBwYXRoIG9yIG9uIFRYICovDQo+ID4gICAgICAgICBNQVJLRVIgY2FjaGVsaW5lMSBf X3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmVv cmRlci9NYWtlZmlsZSBiL2xpYi9saWJydGVfcmVvcmRlci9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLjEyYjkxNmYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gKysrIGIvbGliL2xpYnJ0ZV9yZW9yZGVyL01ha2VmaWxlDQo+ID4gQEAgLTAsMCArMSw1MCBA QA0KPiA+ICsjICAgQlNEIExJQ0VOU0UNCj4gPiArIw0KPiA+ICsjICAgQ29weXJpZ2h0KGMpIDIw MTAtMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArIyAg IEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyMNCj4gPiArIyAgIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KPiA+ICsj ICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zDQo+ID4gKyMgICBhcmUgbWV0Og0KPiA+ICsjDQo+ID4gKyMgICAgICogUmVk aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln aHQNCj4gPiArIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIuDQo+ID4gKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gPiArIyAgICAg ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns YWltZXIgaW4NCj4gPiArIyAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ID4gKyMgICAgICAgZGlzdHJpYnV0aW9uLg0KPiA+ ICsjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBu YW1lcyBvZiBpdHMNCj4gPiArIyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gPiArIyAgICAgICBmcm9tIHRoaXMg c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ID4g KyMNCj4gPiArIyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI T0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMNCj4gPiArIyAgICJBUyBJUyIgQU5EIEFOWSBFWFBS RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQNCj4gTk9UDQo+ID4gKyMg ICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB TkQNCj4gRklUTkVTUyBGT1INCj4gPiArIyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4gQ09QWVJJR0hUDQo+ID4gKyMgICBPV05F UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCj4g SU5DSURFTlRBTCwNCj4gPiArIyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVA0KPiBOT1QNCj4gPiArIyAgIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MNCj4gT0YgVVNF LA0KPiA+ICsjICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI T1dFVkVSIENBVVNFRA0KPiBBTkQgT04gQU5ZDQo+ID4gKyMgICBUSEVPUlkgT0YgTElBQklMSVRZ LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUg0KPiBUT1JUDQo+ID4g KyMgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkgT1VUIE9GDQo+IFRIRSBVU0UNCj4gPiArIyAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSA0KPiBEQU1BR0UuDQo+ID4gKw0KPiA+ ICtpbmNsdWRlICQoUlRFX1NESykvbWsvcnRlLnZhcnMubWsNCj4gPiArDQo+ID4gKyMgbGlicmFy eSBuYW1lDQo+ID4gK0xJQiA9IGxpYnJ0ZV9yZW9yZGVyLmENCj4gPiArDQo+ID4gK0NGTEFHUyAr PSAtTzMNCj4gPiArQ0ZMQUdTICs9ICQoV0VSUk9SX0ZMQUdTKSAtSSQoU1JDRElSKQ0KPiA+ICsN Cj4gPiArIyBhbGwgc291cmNlIGFyZSBzdG9yZWQgaW4gU1JDUy15DQo+ID4gK1NSQ1MtJChDT05G SUdfUlRFX0xJQlJURV9SRU9SREVSKSA6PSBydGVfcmVvcmRlci5jDQo+ID4gKw0KPiA+ICsjIGlu c3RhbGwgdGhpcyBoZWFkZXIgZmlsZQ0KPiA+ICtTWU1MSU5LLSQoQ09ORklHX1JURV9MSUJSVEVf UkVPUkRFUiktaW5jbHVkZSA6PSBydGVfcmVvcmRlci5oDQo+ID4gKw0KPiA+ICsjIHRoaXMgbGli IGRlcGVuZHMgdXBvbjoNCj4gPiArREVQRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1JFT1JERVIp ICs9IGxpYi9saWJydGVfbWJ1Zg0KPiA+ICtERVBESVJTLSQoQ09ORklHX1JURV9MSUJSVEVfUkVP UkRFUikgKz0gbGliL2xpYnJ0ZV9lYWwNCj4gPiArDQo+ID4gK2luY2x1ZGUgJChSVEVfU0RLKS9t ay9ydGUubGliLm1rDQo+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmVvcmRlci9ydGVfcmVv cmRlci5jDQo+ID4gYi9saWIvbGlicnRlX3Jlb3JkZXIvcnRlX3Jlb3JkZXIuYw0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMC4uZmIzZTk4Ng0KPiA+IC0tLSAvZGV2 L251bGwNCj4gPiArKysgYi9saWIvbGlicnRlX3Jlb3JkZXIvcnRlX3Jlb3JkZXIuYw0KPiA+IEBA IC0wLDAgKzEsNDY0IEBADQo+ID4gKy8qLQ0KPiA+ICsgKiAgIEJTRCBMSUNFTlNFDQo+ID4gKyAq DQo+ID4gKyAqICAgQ29weXJpZ2h0KGMpIDIwMTAtMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs IHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICogICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsg Kg0KPiA+ICsgKiAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg Zm9ybXMsIHdpdGggb3Igd2l0aG91dA0KPiA+ICsgKiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KPiA+ICsgKiAgIGFy ZSBtZXQ6DQo+ID4gKyAqDQo+ID4gKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ID4gKyAqICAgICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4N Cj4gPiArICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCj4gPiArICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluDQo+ID4gKyAqICAg ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUNCj4gPiArICogICAgICAgZGlzdHJpYnV0aW9uLg0KPiA+ICsgKiAgICAgKiBOZWl0aGVy IHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzDQo+ID4g KyAqICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg cHJvZHVjdHMgZGVyaXZlZA0KPiA+ICsgKiAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQo+ID4gKyAqDQo+ID4gKyAqICAg VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EDQo+ IENPTlRSSUJVVE9SUw0KPiA+ICsgKiAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQNCj4gTk9UDQo+ID4gKyAqICAgTElNSVRFRCBU TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EDQo+IEZJVE5F U1MgRk9SDQo+ID4gKyAqICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO IE5PIEVWRU5UIFNIQUxMIFRIRQ0KPiBDT1BZUklHSFQNCj4gPiArICogICBPV05FUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwNCj4gSU5DSURFTlRB TCwNCj4gPiArICogICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF UyAoSU5DTFVESU5HLCBCVVQNCj4gTk9UDQo+ID4gKyAqICAgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUw0KPiBPRiBVU0UsDQo+ID4g KyAqICAgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS IENBVVNFRA0KPiBBTkQgT04gQU5ZDQo+ID4gKyAqICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1INCj4gVE9SVA0KPiA+ICsgKiAg IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YNCj4gVEhFIFVTRQ0KPiA+ICsgKiAgIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSA0KPiBEQU1BR0UuDQo+ID4gKyAqLw0KPiA+ ICsNCj4gPiArI2luY2x1ZGUgPGludHR5cGVzLmg+DQo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4N Cj4gPiArDQo+ID4gKyNpbmNsdWRlIDxydGVfbG9nLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfbWJ1 Zi5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX21lbXpvbmUuaD4NCj4gPiArI2luY2x1ZGUgPHJ0ZV9l YWxfbWVtY29uZmlnLmg+DQo+ID4gKyNpbmNsdWRlIDxydGVfZXJybm8uaD4NCj4gPiArI2luY2x1 ZGUgPHJ0ZV90YWlscS5oPg0KPiA+ICsjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0KPiA+ICsNCj4g PiArI2luY2x1ZGUgInJ0ZV9yZW9yZGVyLmgiDQo+ID4gKw0KPiA+ICtUQUlMUV9IRUFEKHJ0ZV9y ZW9yZGVyX2xpc3QsIHJ0ZV90YWlscV9lbnRyeSk7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIE5PX0ZM QUdTIDANCj4gPiArI2RlZmluZSBSVEVfUkVPUkRFUl9QUkVGSVggIlJPXyINCj4gPiArI2RlZmlu ZSBSVEVfUkVPUkRFUl9OQU1FU0laRSAzMg0KPiA+ICsNCj4gPiArLyogTWFjcm9zIGZvciBwcmlu dGluZyB1c2luZyBSVEVfTE9HICovDQo+ID4gKyNkZWZpbmUgUlRFX0xPR1RZUEVfUkVPUkRFUiAg ICBSVEVfTE9HVFlQRV9VU0VSMQ0KPiA+ICsNCj4gPiArLyogQSBnZW5lcmljIGNpcmN1bGFyIGJ1 ZmZlciAqLw0KPiA+ICtzdHJ1Y3QgY2lyX2J1ZmZlciB7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBp bnQgc2l6ZTsgICAvKio8IE51bWJlciBvZiBlbnRyaWVzIHRoYXQgY2FuIGJlIHN0b3JlZCAqLw0K PiA+ICsgICAgICAgdW5zaWduZWQgaW50IG1hc2s7ICAgLyoqPCBbYnVmZmVyX3NpemUgLSAxXTog dXNlZCBmb3Igd3JhcC1hcm91bmQgKi8NCj4gPiArICAgICAgIHVuc2lnbmVkIGludCBoZWFkOyAg IC8qKjwgaW5zZXJ0aW9uIHBvaW50IGluIGJ1ZmZlciAqLw0KPiA+ICsgICAgICAgdW5zaWduZWQg aW50IHRhaWw7ICAgLyoqPCBleHRyYWN0aW9uIHBvaW50IGluIGJ1ZmZlciAqLw0KPiA+ICsgICAg ICAgc3RydWN0IHJ0ZV9tYnVmICoqZW50cmllczsNCj4gPiArfSBfX3J0ZV9jYWNoZV9hbGlnbmVk Ow0KPiA+ICsNCj4gPiArLyogVGhlIHJlb3JkZXIgYnVmZmVyIGRhdGEgc3RydWN0dXJlIGl0c2Vs ZiAqLyBzdHJ1Y3QNCj4gPiArcnRlX3Jlb3JkZXJfYnVmZmVyIHsNCj4gPiArICAgICAgIGNoYXIg bmFtZVtSVEVfUkVPUkRFUl9OQU1FU0laRV07DQo+ID4gKyAgICAgICB1aW50MzJfdCBtaW5fc2Vx bjsgIC8qKjwgTG93ZXN0IHNlcS4gbnVtYmVyIHRoYXQgY2FuIGJlIGluIHRoZSBidWZmZXIgKi8N Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBtZW1zaXplOyAvKio8IG1lbW9yeSBhcmVhIHNpemUg b2YgcmVvcmRlciBidWZmZXIgKi8NCj4gPiArICAgICAgIHN0cnVjdCBjaXJfYnVmZmVyIHJlYWR5 X2J1ZjsgLyoqPCB0ZW1wIGJ1ZmZlciBmb3IgZGVxdWV1ZWQgZW50cmllcyAqLw0KPiA+ICsgICAg ICAgc3RydWN0IGNpcl9idWZmZXIgb3JkZXJfYnVmOyAvKio8IGJ1ZmZlciB1c2VkIHRvIHJlb3Jk ZXINCj4gPiArZW50cmllcyAqLyB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gKw0KPiA+ICtz dHJ1Y3QgcnRlX3Jlb3JkZXJfYnVmZmVyICoNCj4gPiArcnRlX3Jlb3JkZXJfaW5pdCh2b2lkICpi dWYsIHVuc2lnbmVkIGludCBidWZzaXplLA0KPiA+ICsgICAgICAgY29uc3QgY2hhciAqbmFtZSwg dW5zaWduZWQgaW50IHNpemUpIHsNCj4gPiArICAgICAgIHN0cnVjdCBydGVfcmVvcmRlcl9idWZm ZXIgKmIgPSAoc3RydWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqKWJ1ZjsNCj4gPiArICAgICAgIGNv bnN0IHVuc2lnbmVkIGludCBtaW5fYnVmc2l6ZSA9IHNpemVvZigqYikgKw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiAqIHNpemUgKiBzaXplb2Yoc3RydWN0 DQo+ID4gK3J0ZV9tYnVmICopKTsNCj4gPiArDQo+ID4gKyAgICAgICBzdHJ1Y3QgcnRlX3Jlb3Jk ZXJfYnVmZmVyICpiZTsNCj4gPiArICAgICAgIHN0cnVjdCBydGVfdGFpbHFfZW50cnkgKnRlOw0K PiA+ICsgICAgICAgc3RydWN0IHJ0ZV9yZW9yZGVyX2xpc3QgKnJlb3JkZXJfbGlzdDsNCj4gPiAr DQo+ID4gKyAgICAgICAvKiBjaGVjayB0aGF0IHdlIGhhdmUgYW4gaW5pdGlhbGlzZWQgdGFpbCBx dWV1ZSAqLw0KPiA+ICsgICAgICAgcmVvcmRlcl9saXN0ID0gUlRFX1RBSUxRX0xPT0tVUF9CWV9J RFgoUlRFX1RBSUxRX1JFT1JERVIsDQo+IHJ0ZV9yZW9yZGVyX2xpc3QpOw0KPiA+ICsgICAgICAg aWYgKCFyZW9yZGVyX2xpc3QpIHsNCj4gPiArICAgICAgICAgICAgICAgcnRlX2Vycm5vID0gRV9S VEVfTk9fVEFJTFE7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGlmICghcnRlX2lzX3Bvd2VyX29mXzIoc2l6ZSkpIHsN Cj4gPiArICAgICAgICAgICAgICAgUlRFX0xPRyhFUlIsIFJFT1JERVIsICJJbnZhbGlkIHJlb3Jk ZXIgYnVmZmVyIHNpemUiDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0g Tm90IGEgcG93ZXIgb2YgMlxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJ0ZV9lcnJubyA9IEVJ TlZBTDsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgICAgICB9DQo+ ID4gKyAgICAgICBpZiAoYiA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAgICAgICAgIFJURV9MT0co RVJSLCBSRU9SREVSLCAiSW52YWxpZCByZW9yZGVyIGJ1ZmZlciBwYXJhbWV0ZXI6Ig0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIE5VTExcbiIpOw0KPiA+ICsg ICAgICAgICAgICAgICBydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICAgIHJl dHVybiBOVUxMOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkg ew0KPiA+ICsgICAgICAgICAgICAgICBSVEVfTE9HKEVSUiwgUkVPUkRFUiwgIkludmFsaWQgcmVv cmRlciBidWZmZXIgbmFtZSBwdHI6Ig0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIE5VTExcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICBydGVfZXJybm8gPSBF SU5WQUw7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgICAgfQ0K PiA+ICsgICAgICAgaWYgKGJ1ZnNpemUgPCBtaW5fYnVmc2l6ZSkgew0KPiA+ICsgICAgICAgICAg ICAgICBSVEVfTE9HKEVSUiwgUkVPUkRFUiwgIkludmFsaWQgcmVvcmRlciBidWZmZXIgc2l6ZTol dSwgIg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgbWluaW11bToldVxu IiwgYnVmc2l6ZSwgbWluX2J1ZnNpemUpOw0KPiA+ICsgICAgICAgICAgICAgICBydGVfZXJybm8g PSBFTk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgIHJ0ZV9yd2xvY2tfd3JpdGVfbG9jayhSVEVfRUFMX1RBSUxR X1JXTE9DSyk7DQo+ID4gKw0KPiA+ICsgICAgICAgLyogZ3VhcmFudGVlIHRoZXJlJ3Mgbm8gZXhp c3RpbmcgKi8NCj4gPiArICAgICAgIFRBSUxRX0ZPUkVBQ0godGUsIHJlb3JkZXJfbGlzdCwgbmV4 dCkgew0KPiA+ICsgICAgICAgICAgICAgICBiZSA9IChzdHJ1Y3QgcnRlX3Jlb3JkZXJfYnVmZmVy ICopIHRlLT5kYXRhOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoc3RybmNtcChuYW1lLCBiZS0+ bmFtZSwgUlRFX1JFT1JERVJfTkFNRVNJWkUpID09IDApDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBpZiAodGUgIT0gTlVMTCkg ew0KPiA+ICsgICAgICAgICAgICAgICBiID0gYmU7DQo+ID4gKyAgICAgICAgICAgICAgIG1lbXNl dChiLCAwLCBidWZzaXplKTsNCj4gPiArICAgICAgICAgICAgICAgc25wcmludGYoYi0+bmFtZSwg c2l6ZW9mKGItPm5hbWUpLCAiJXMiLCBuYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgYi0+bWVt c2l6ZSA9IGJ1ZnNpemU7DQo+ID4gKyAgICAgICAgICAgICAgIGItPm9yZGVyX2J1Zi5zaXplID0g Yi0+cmVhZHlfYnVmLnNpemUgPSBzaXplOw0KPiA+ICsgICAgICAgICAgICAgICBiLT5vcmRlcl9i dWYubWFzayA9IGItPnJlYWR5X2J1Zi5tYXNrID0gc2l6ZSAtIDE7DQo+ID4gKyAgICAgICAgICAg ICAgIGItPnJlYWR5X2J1Zi5lbnRyaWVzID0gKHZvaWQgKikmYlsxXTsNCj4gPiArICAgICAgICAg ICAgICAgYi0+b3JkZXJfYnVmLmVudHJpZXMgPSBSVEVfUFRSX0FERCgmYlsxXSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXplb2YoYi0+cmVhZHlfYnVmLmVu dHJpZXNbMF0pKTsNCj4gPiArICAgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgIC8qIGFsbG9jYXRlIHRhaWxxIGVudHJ5ICovDQo+ID4gKyAg ICAgICB0ZSA9IHJ0ZV96bWFsbG9jKCJSRU9SREVSX1RBSUxRX0VOVFJZIiwgc2l6ZW9mKCp0ZSks IDApOw0KPiA+ICsgICAgICAgaWYgKHRlID09IE5VTEwpIHsNCj4gPiArICAgICAgICAgICAgICAg UlRFX0xPRyhFUlIsIFJFT1JERVIsICJGYWlsZWQgdG8gYWxsb2NhdGUgdGFpbHEgZW50cnlcbiIp Ow0KPiA+ICsgICAgICAgICAgICAgICBnb3RvIGV4aXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgbWVtc2V0KGIsIDAsIGJ1ZnNpemUpOw0KPiA+ICsgICAgICAgc25wcmludGYo Yi0+bmFtZSwgc2l6ZW9mKGItPm5hbWUpLCAiJXMiLCBuYW1lKTsNCj4gPiArICAgICAgIGItPm1l bXNpemUgPSBidWZzaXplOw0KPiA+ICsgICAgICAgYi0+b3JkZXJfYnVmLnNpemUgPSBiLT5yZWFk eV9idWYuc2l6ZSA9IHNpemU7DQo+ID4gKyAgICAgICBiLT5vcmRlcl9idWYubWFzayA9IGItPnJl YWR5X2J1Zi5tYXNrID0gc2l6ZSAtIDE7DQo+ID4gKyAgICAgICBiLT5yZWFkeV9idWYuZW50cmll cyA9ICh2b2lkICopJmJbMV07DQo+ID4gKyAgICAgICBiLT5vcmRlcl9idWYuZW50cmllcyA9IFJU RV9QVFJfQUREKCZiWzFdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHNpemUgKiBzaXpl b2YoYi0+cmVhZHlfYnVmLmVudHJpZXNbMF0pKTsNCj4gPiArDQo+ID4gKyAgICAgICB0ZS0+ZGF0 YSA9ICh2b2lkICopIGI7DQo+ID4gKw0KPiA+ICsgICAgICAgVEFJTFFfSU5TRVJUX1RBSUwocmVv cmRlcl9saXN0LCB0ZSwgbmV4dCk7DQo+ID4gKw0KPiA+ICtleGl0Og0KPiA+ICsgICAgICAgcnRl X3J3bG9ja193cml0ZV91bmxvY2soUlRFX0VBTF9UQUlMUV9SV0xPQ0spOw0KPiA+ICsgICAgICAg cmV0dXJuIGI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcnRlX3Jlb3JkZXJfcmVzZXQoc3Ry dWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqYikgew0KPiA+ICsgICAgICAgdW5zaWduZWQgaW50IGkg PSAwOw0KPiA+ICsgICAgICAgY2hhciBuYW1lW1JURV9SRU9SREVSX05BTUVTSVpFXTsNCj4gPiAr ICAgICAgIC8qIEZyZWUgdXAgdGhlIG1idWZzIG9mIG9yZGVyIGJ1ZmZlciAmIHJlYWR5IGJ1ZmZl ciAqLw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IGItPm9yZGVyX2J1Zi5zaXplOyBpKysp IHsNCj4gPiArICAgICAgICAgICAgICAgaWYgKGItPm9yZGVyX2J1Zi5lbnRyaWVzW2ldKQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJ0ZV9wa3RtYnVmX2ZyZWUoYi0+b3JkZXJfYnVmLmVu dHJpZXNbaV0pOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoYi0+cmVhZHlfYnVmLmVudHJpZXNb aV0pDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcnRlX3BrdG1idWZfZnJlZShiLT5yZWFk eV9idWYuZW50cmllc1tpXSk7DQo+ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBzbnByaW50Zihu YW1lLCBzaXplb2YobmFtZSksICIlcyIsIGItPm5hbWUpOw0KPiA+ICsgICAgICAgcnRlX3Jlb3Jk ZXJfaW5pdChiLCBiLT5tZW1zaXplLCBuYW1lLCBiLT5vcmRlcl9idWYuc2l6ZSk7IH0NCj4gPiAr DQo+ID4gK3N0cnVjdCBydGVfcmVvcmRlcl9idWZmZXIqDQo+ID4gK3J0ZV9yZW9yZGVyX2NyZWF0 ZShjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBzb2NrZXRfaWQsIHVuc2lnbmVkIGludA0KPiA+ ICtzaXplKSB7DQo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3QgcnRlX21lbXpvbmUgKm16Ow0KPiA+ ICsgICAgICAgc3RydWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqYiA9IE5VTEw7DQo+ID4gKyAgICAg ICBzdHJ1Y3QgcnRlX3RhaWxxX2VudHJ5ICp0ZTsNCj4gPiArICAgICAgIHN0cnVjdCBydGVfcmVv cmRlcl9saXN0ICpyZW9yZGVyX2xpc3Q7DQo+ID4gKyAgICAgICBjaGFyIG16X25hbWVbUlRFX01F TVpPTkVfTkFNRVNJWkVdOw0KPiA+ICsNCj4gPiArICAgICAgIC8qIGNoZWNrIHRoYXQgd2UgaGF2 ZSBhbiBpbml0aWFsaXNlZCB0YWlsIHF1ZXVlICovDQo+ID4gKyAgICAgICByZW9yZGVyX2xpc3Qg PSBSVEVfVEFJTFFfTE9PS1VQX0JZX0lEWChSVEVfVEFJTFFfUkVPUkRFUiwNCj4gcnRlX3Jlb3Jk ZXJfbGlzdCk7DQo+ID4gKyAgICAgICBpZiAoIXJlb3JkZXJfbGlzdCkgew0KPiA+ICsgICAgICAg ICAgICAgICBydGVfZXJybm8gPSBFX1JURV9OT19UQUlMUTsNCj4gPiArICAgICAgICAgICAgICAg cmV0dXJuIE5VTEw7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgLyogQ2hlY2sg dXNlciBhcmd1bWVudHMuICovDQo+ID4gKyAgICAgICBpZiAoIXJ0ZV9pc19wb3dlcl9vZl8yKHNp emUpKSB7DQo+ID4gKyAgICAgICAgICAgICAgIFJURV9MT0coRVJSLCBSRU9SREVSLCAiSW52YWxp ZCByZW9yZGVyIGJ1ZmZlciBzaXplIg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiAtIE5vdCBhIHBvd2VyIG9mIDJcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICBydGVfZXJy bm8gPSBFSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAg ICAgfQ0KPiA+ICsgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgew0KPiA+ICsgICAgICAgICAgICAg ICBSVEVfTE9HKEVSUiwgUkVPUkRFUiwgIkludmFsaWQgcmVvcmRlciBidWZmZXIgbmFtZSBwdHI6 Ig0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIE5VTExcbiIp Ow0KPiA+ICsgICAgICAgICAgICAgICBydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJ0 ZV9yd2xvY2tfd3JpdGVfbG9jayhSVEVfRUFMX1RBSUxRX1JXTE9DSyk7DQo+ID4gKw0KPiA+ICsg ICAgICAgLyogZ3VhcmFudGVlIHRoZXJlJ3Mgbm8gZXhpc3RpbmcgKi8NCj4gPiArICAgICAgIFRB SUxRX0ZPUkVBQ0godGUsIHJlb3JkZXJfbGlzdCwgbmV4dCkgew0KPiA+ICsgICAgICAgICAgICAg ICBiID0gKHN0cnVjdCBydGVfcmVvcmRlcl9idWZmZXIgKikgdGUtPmRhdGE7DQo+ID4gKyAgICAg ICAgICAgICAgIGlmIChzdHJuY21wKG5hbWUsIGItPm5hbWUsIFJURV9SRU9SREVSX05BTUVTSVpF KSA9PSAwKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAg fQ0KPiA+ICsgICAgICAgaWYgKHRlICE9IE5VTEwpDQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8g ZXhpdDsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBhbGxvY2F0ZSB0YWlscSBlbnRyeSAqLw0KPiA+ ICsgICAgICAgdGUgPSBydGVfem1hbGxvYygiUkVPUkRFUl9UQUlMUV9FTlRSWSIsIHNpemVvZigq dGUpLCAwKTsNCj4gPiArICAgICAgIGlmICh0ZSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgICAgICAg ICAgIFJURV9MT0coRVJSLCBSRU9SREVSLCAiRmFpbGVkIHRvIGFsbG9jYXRlIHRhaWxxIGVudHJ5 XG4iKTsNCj4gPiArICAgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSB0byBzdG9yZSB0aGUgcmVvcmRlciBi dWZmZXIgc3RydWN0dXJlLiAqLw0KPiA+ICsgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGJ1ZnNp emUgPSBzaXplb2Yoc3RydWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlcikgKw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiAqIHNpemUgKiBzaXplb2Yoc3RydWN0IHJ0 ZV9tYnVmICopKTsNCj4gPiArICAgICAgIHNucHJpbnRmKG16X25hbWUsIHNpemVvZihtel9uYW1l KSwgUlRFX1JFT1JERVJfUFJFRklYIiVzIiwgbmFtZSk7DQo+ID4gKyAgICAgICBteiA9IHJ0ZV9t ZW16b25lX3Jlc2VydmUobXpfbmFtZSwgYnVmc2l6ZSwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBzb2NrZXRfaWQsIE5PX0ZMQUdTKTsNCj4gPiArICAgICAgIGlmIChteiA9PSBOVUxMKSB7 DQo+ID4gKyAgICAgICAgICAgICAgIFJURV9MT0coRVJSLCBSRU9SREVSLCAiTWVtem9uZSBhbGxv Y2F0aW9uIGZhaWxlZFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJ0ZV9lcnJubyA9IEVOT01F TTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgICAgICB9DQo+ID4g KyAgICAgICBiID0gbXotPmFkZHI7DQo+ID4gKyAgICAgICBtZW1zZXQoYiwgMCwgYnVmc2l6ZSk7 DQo+ID4gKyAgICAgICBzbnByaW50ZihiLT5uYW1lLCBzaXplb2YoYi0+bmFtZSksICIlcyIsIG5h bWUpOw0KPiA+ICsgICAgICAgYi0+bWVtc2l6ZSA9IGJ1ZnNpemU7DQo+ID4gKyAgICAgICBiLT5v cmRlcl9idWYuc2l6ZSA9IGItPnJlYWR5X2J1Zi5zaXplID0gc2l6ZTsNCj4gPiArICAgICAgIGIt Pm9yZGVyX2J1Zi5tYXNrID0gYi0+cmVhZHlfYnVmLm1hc2sgPSBzaXplIC0gMTsNCj4gPiArICAg ICAgIGItPnJlYWR5X2J1Zi5lbnRyaWVzID0gKHZvaWQgKikmYlsxXTsNCj4gPiArICAgICAgIGIt Pm9yZGVyX2J1Zi5lbnRyaWVzID0gUlRFX1BUUl9BREQoJmJbMV0sDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZSAqIHNpemVvZihiLT5yZWFkeV9idWYuZW50cmllc1swXSkpOw0KPiA+ ICsNCj4gPiArICAgICAgIHRlLT5kYXRhID0gKHZvaWQgKikgYjsNCj4gPiArDQo+ID4gKyAgICAg ICBUQUlMUV9JTlNFUlRfVEFJTChyZW9yZGVyX2xpc3QsIHRlLCBuZXh0KTsNCj4gPiArDQo+ID4g K2V4aXQ6DQo+ID4gKyAgICAgICBydGVfcndsb2NrX3dyaXRlX3VubG9jayhSVEVfRUFMX1RBSUxR X1JXTE9DSyk7DQo+ID4gKyAgICAgICByZXR1cm4gYjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9p ZA0KPiA+ICtydGVfcmVvcmRlcl9mcmVlKHN0cnVjdCBydGVfcmVvcmRlcl9idWZmZXIgKmIpIHsN Cj4gPiArICAgICAgIHN0cnVjdCBydGVfcmVvcmRlcl9saXN0ICpyZW9yZGVyX2xpc3Q7DQo+ID4g KyAgICAgICBzdHJ1Y3QgcnRlX3RhaWxxX2VudHJ5ICp0ZTsNCj4gPiArDQo+ID4gKyAgICAgICAv KiBDaGVjayB1c2VyIGFyZ3VtZW50cy4gKi8NCj4gPiArICAgICAgIGlmIChiID09IE5VTEwpDQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBjaGVjayB0 aGF0IHdlIGhhdmUgYW4gaW5pdGlhbGlzZWQgdGFpbCBxdWV1ZSAqLw0KPiA+ICsgICAgICAgcmVv cmRlcl9saXN0ID0gUlRFX1RBSUxRX0xPT0tVUF9CWV9JRFgoUlRFX1RBSUxRX1JFT1JERVIsDQo+ IHJ0ZV9yZW9yZGVyX2xpc3QpOw0KPiA+ICsgICAgICAgaWYgKCFyZW9yZGVyX2xpc3QpIHsNCj4g PiArICAgICAgICAgICAgICAgcnRlX2Vycm5vID0gRV9SVEVfTk9fVEFJTFE7DQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBydGVf cndsb2NrX3dyaXRlX2xvY2soUlRFX0VBTF9UQUlMUV9SV0xPQ0spOw0KPiA+ICsNCj4gPiArICAg ICAgIC8qIGZpbmQgb3VyIHRhaWxxIGVudHJ5ICovDQo+ID4gKyAgICAgICBUQUlMUV9GT1JFQUNI KHRlLCByZW9yZGVyX2xpc3QsIG5leHQpIHsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHRlLT5k YXRhID09ICh2b2lkICopIGIpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgICB9DQo+ID4gKyAgICAgICBpZiAodGUgPT0gTlVMTCkgew0KPiA+ICsgICAgICAg ICAgICAgICBydGVfcndsb2NrX3dyaXRlX3VubG9jayhSVEVfRUFMX1RBSUxRX1JXTE9DSyk7DQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICBUQUlMUV9SRU1PVkUocmVvcmRlcl9saXN0LCB0ZSwgbmV4dCk7DQo+ID4gKw0KPiA+ICsg ICAgICAgcnRlX3J3bG9ja193cml0ZV91bmxvY2soUlRFX0VBTF9UQUlMUV9SV0xPQ0spOw0KPiA+ ICsNCj4gPiArICAgICAgIHJ0ZV9mcmVlKGIpOw0KPiA+ICsgICAgICAgcnRlX2ZyZWUodGUpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcnRlX3Jlb3JkZXJfYnVmZmVyICoNCj4gPiArcnRl X3Jlb3JkZXJfZmluZF9leGlzdGluZyhjb25zdCBjaGFyICpuYW1lKSB7DQo+ID4gKyAgICAgICBz dHJ1Y3QgcnRlX3Jlb3JkZXJfYnVmZmVyICpiID0gTlVMTDsNCj4gPiArICAgICAgIHN0cnVjdCBy dGVfdGFpbHFfZW50cnkgKnRlOw0KPiA+ICsgICAgICAgc3RydWN0IHJ0ZV9yZW9yZGVyX2xpc3Qg KnJlb3JkZXJfbGlzdDsNCj4gPiArDQo+ID4gKyAgICAgICAvKiBjaGVjayB0aGF0IHdlIGhhdmUg YW4gaW5pdGlhbGlzZWQgdGFpbCBxdWV1ZSAqLw0KPiA+ICsgICAgICAgcmVvcmRlcl9saXN0ID0g UlRFX1RBSUxRX0xPT0tVUF9CWV9JRFgoUlRFX1RBSUxRX1JFT1JERVIsDQo+IHJ0ZV9yZW9yZGVy X2xpc3QpOw0KPiA+ICsgICAgICAgaWYgKCFyZW9yZGVyX2xpc3QpIHsNCj4gPiArICAgICAgICAg ICAgICAgcnRlX2Vycm5vID0gRV9SVEVfTk9fVEFJTFE7DQo+ID4gKyAgICAgICAgICAgICAgIHJl dHVybiBOVUxMOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJ0ZV9yd2xvY2tf cmVhZF9sb2NrKFJURV9FQUxfVEFJTFFfUldMT0NLKTsNCj4gPiArICAgICAgIFRBSUxRX0ZPUkVB Q0godGUsIHJlb3JkZXJfbGlzdCwgbmV4dCkgew0KPiA+ICsgICAgICAgICAgICAgICBiID0gKHN0 cnVjdCBydGVfcmVvcmRlcl9idWZmZXIgKikgdGUtPmRhdGE7DQo+ID4gKyAgICAgICAgICAgICAg IGlmIChzdHJuY21wKG5hbWUsIGItPm5hbWUsIFJURV9SRU9SREVSX05BTUVTSVpFKSA9PSAwKQ0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsg ICAgICAgcnRlX3J3bG9ja19yZWFkX3VubG9jayhSVEVfRUFMX1RBSUxRX1JXTE9DSyk7DQo+ID4g Kw0KPiA+ICsgICAgICAgaWYgKHRlID09IE5VTEwpIHsNCj4gPiArICAgICAgICAgICAgICAgcnRl X2Vycm5vID0gRU5PRU5UOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiAr ICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gYjsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHVuc2lnbmVkDQo+ID4gK3J0ZV9yZW9yZGVyX2ZpbGxfb3ZlcmZsb3coc3RydWN0 IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqYiwgdW5zaWduZWQgbikgew0KPiA+ICsgICAgICAgLyoNCj4g PiArICAgICAgICAqIDEuIE1vdmUgYWxsIHJlYWR5IGVudHJpZXMgdGhhdCBmaXQgdG8gdGhlIHJl YWR5X2J1Zg0KPiA+ICsgICAgICAgICogMi4gY2hlY2sgaWYgd2UgbWVldCB0aGUgbWluaW11bSBu ZWVkZWQgKG4pLg0KPiA+ICsgICAgICAgICogMy4gSWYgbm90LCB0aGVuIHNraXAgYW55IGdhcHMg YW5kIGtlZXAgbW92aW5nLg0KPiA+ICsgICAgICAgICogNC4gSWYgYXQgYW55IHBvaW50IHRoZSBy ZWFkeSBidWZmZXIgaXMgZnVsbCwgc3RvcA0KPiA+ICsgICAgICAgICogNS4gUmV0dXJuIHRoZSBu dW1iZXIgb2YgcG9zaXRpb25zIHRoZSBvcmRlcl9idWYgaGVhZCBoYXMgbW92ZWQNCj4gPiArICAg ICAgICAqLw0KPiA+ICsNCj4gPiArICAgICAgIHN0cnVjdCBjaXJfYnVmZmVyICpvcmRlcl9idWYg PSAmYi0+b3JkZXJfYnVmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICpyZWFkeV9idWYg PSAmYi0+cmVhZHlfYnVmOw0KPiA+ICsNCj4gPiArICAgICAgIHVuc2lnbmVkIGludCBvcmRlcl9o ZWFkX2FkdiA9IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgLyoNCj4gPiArICAgICAgICAqIG1vdmUg YXQgbGVhc3QgbiBwYWNrZXRzIHRvIHJlYWR5IGJ1ZmZlciwgYXNzdW1pbmcgcmVhZHkgYnVmZmVy DQo+ID4gKyAgICAgICAgKiBoYXMgcm9vbSBmb3IgdGhvc2UgcGFja2V0cy4NCj4gPiArICAgICAg ICAqLw0KPiA+ICsgICAgICAgd2hpbGUgKG9yZGVyX2hlYWRfYWR2IDwgbiAmJg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICgocmVhZHlfYnVmLT5oZWFkICsgMSkgJiByZWFkeV9idWYtPm1h c2spICE9DQo+ID4gKyByZWFkeV9idWYtPnRhaWwpIHsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIC8qIGlmIHdlIGFyZSBibG9ja2VkIHdhaXRpbmcgb24gYSBwYWNrZXQsIHNraXAgaXQgKi8N Cj4gPiArICAgICAgICAgICAgICAgaWYgKG9yZGVyX2J1Zi0+ZW50cmllc1tvcmRlcl9idWYtPmhl YWRdID09IE5VTEwpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9idWYtPmhl YWQrKywgb3JkZXJfaGVhZF9hZHYrKzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgaWYgKG9yZGVyX2J1Zi0+aGVhZCA9PSBvcmRlcl9idWYtPnNpemUpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcmRlcl9idWYtPmhlYWQgPSAwOw0KPiA+ICsgICAgICAg ICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAvKiBNb3ZlIGFsbCByZWFkeSBl bnRyaWVzIHRoYXQgZml0IHRvIHRoZSByZWFkeV9idWYgKi8NCj4gPiArICAgICAgICAgICAgICAg d2hpbGUgKG9yZGVyX2J1Zi0+ZW50cmllc1tvcmRlcl9idWYtPmhlYWRdICE9IE5VTEwpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICByZWFkeV9idWYtPmVudHJpZXNbcmVhZHlfYnVmLT5o ZWFkKytdID0NCj4gPiArDQo+ID4gKyBvcmRlcl9idWYtPmVudHJpZXNbb3JkZXJfYnVmLT5oZWFk XTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJfYnVmLT5lbnRyaWVz W29yZGVyX2J1Zi0+aGVhZCsrXSA9IE5VTEw7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg b3JkZXJfaGVhZF9hZHYrKzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYg KHJlYWR5X2J1Zi0+aGVhZCA9PSByZWFkeV9idWYtPnNpemUpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWFkeV9idWYtPmhlYWQgPSAwOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGlmIChvcmRlcl9idWYtPmhlYWQgPT0gb3JkZXJfYnVmLT5zaXplKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJfYnVmLT5oZWFkID0gMDsNCj4gPiAr DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgocmVhZHlfYnVmLT5oZWFkKzEpICYg cmVhZHlfYnVmLT5tYXNrKSA9PSByZWFkeV9idWYtPnRhaWwpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGItPm1pbl9zZXFuICs9IG9yZGVyX2hlYWRfYWR2Ow0K PiA+ICsgICAgICAgLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgcG9zaXRpb25zIHRoZSBvcmRlcl9i dWYgaGVhZCBoYXMgbW92ZWQgKi8NCj4gPiArICAgICAgIHJldHVybiBvcmRlcl9oZWFkX2FkdjsN Cj4gPiArfQ0KPiA+ICsNCj4gPiAraW50DQo+ID4gK3J0ZV9yZW9yZGVyX2luc2VydChzdHJ1Y3Qg cnRlX3Jlb3JkZXJfYnVmZmVyICpiLCBzdHJ1Y3QgcnRlX21idWYNCj4gPiArKm1idWYpIHsNCj4g PiArICAgICAgIHVpbnQzMl90IG9mZnNldCwgcG9zaXRpb247DQo+ID4gKyAgICAgICBzdHJ1Y3Qg Y2lyX2J1ZmZlciAqb3JkZXJfYnVmID0gJmItPm9yZGVyX2J1ZjsNCj4gPiArDQo+ID4gKyAgICAg ICAvKg0KPiA+ICsgICAgICAgICogY2FsY3VsYXRlIHRoZSBvZmZzZXQgZnJvbSB0aGUgaGVhZCBw b2ludGVyIHdlIG5lZWQgdG8gZ28uDQo+ID4gKyAgICAgICAgKiBUaGUgc3VidHJhY3Rpb24gdGFr ZXMgY2FyZSBvZiB0aGUgc2VxdWVuY2UgbnVtYmVyIHdyYXBwaW5nLg0KPiA+ICsgICAgICAgICog Rm9yIGV4YW1wbGUgKHVzaW5nIDE2LWJpdCBmb3IgYnJldml0eSk6DQo+ID4gKyAgICAgICAgKiAg ICAgIG1pbl9zZXFuICA9IDB4RkZGRA0KPiA+ICsgICAgICAgICogICAgICBtYnVmX3NlcW4gPSAw eDAwMTANCj4gPiArICAgICAgICAqICAgICAgb2Zmc2V0ICAgID0gMHgwMDEwIC0gMHhGRkZEID0g MHgxMw0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICBvZmZzZXQgPSBtYnVmLT5zZXFuIC0g Yi0+bWluX3NlcW47DQo+ID4gKw0KPiA+ICsgICAgICAgLyoNCj4gPiArICAgICAgICAqIGFjdGlv biB0byB0YWtlIGRlcGVuZHMgb24gb2Zmc2V0Lg0KPiA+ICsgICAgICAgICogb2Zmc2V0IDwgYnVm ZmVyLT5zaXplOiB0aGUgbWJ1ZiBmaXRzIHdpdGhpbiB0aGUgY3VycmVudCB3aW5kb3cgb2YNCj4g PiArICAgICAgICAqICAgIHNlcXVlbmNlIG51bWJlcnMgd2UgY2FuIHJlb3JkZXIuIEVYUEVDVEVE IENBU0UuDQo+ID4gKyAgICAgICAgKiBvZmZzZXQgPiBidWZmZXItPnNpemU6IHRoZSBtYnVmIGlz IG91dHNpZGUgdGhlIGN1cnJlbnQgd2luZG93LiBUaGVyZQ0KPiA+ICsgICAgICAgICogICAgYXJl IGEgbnVtYmVyIG9mIGNhc2VzIHRvIGNvbnNpZGVyOg0KPiA+ICsgICAgICAgICogICAgMS4gVGhl IHBhY2tldCBzZXF1ZW5jZSBpcyBqdXN0IG91dHNpZGUgdGhlIHdpbmRvdywgdGhlbiB3ZSBuZWVk DQo+ID4gKyAgICAgICAgKiAgICAgICB0byBzZWUgYWJvdXQgc2hpZnRpbmcgdGhlIGhlYWQgcG9p bnRlciBhbmQgdGFraW5nIGFueSByZWFkeQ0KPiA+ICsgICAgICAgICogICAgICAgdG8gcmV0dXJu IHBhY2tldHMgb3V0IG9mIHRoZSByaW5nLiBJZiB0aGVyZSB3YXMgYSBkZWxheWVkDQo+ID4gKyAg ICAgICAgKiAgICAgICBvciBkcm9wcGVkIHBhY2tldCBwcmV2ZW50aW5nIGRyYWlucyBmcm9tIHNo aWZ0aW5nIHRoZSB3aW5kb3cNCj4gPiArICAgICAgICAqICAgICAgIHRoaXMgY2FzZSB3aWxsIHNr aXAgb3ZlciB0aGUgZHJvcHBlZCBwYWNrZXQgaW5zdGVhZCwgYW5kIGFueQ0KPiA+ICsgICAgICAg ICogICAgICAgcGFja2V0cyBkZXF1ZXVlZCBoZXJlIHdpbGwgYmUgcmV0dXJuZWQgb24gdGhlIG5l eHQgZHJhaW4gY2FsbC4NCj4gPiArICAgICAgICAqICAgIDIuIFRoZSBwYWNrZXQgc2VxdWVuY2Ug bnVtYmVyIGlzIHZhc3RseSBvdXRzaWRlIG91ciB3aW5kb3csIHRha2VuDQo+ID4gKyAgICAgICAg KiAgICAgICBoZXJlIGFzIGhhdmluZyBvZmZzZXQgZ3JlYXRlciB0aGFuIHR3aWNlIHRoZSBidWZm ZXIgc2l6ZS4gSW4NCj4gPiArICAgICAgICAqICAgICAgIHRoaXMgY2FzZSwgdGhlIHBhY2tldCBp cyBwcm9iYWJseSBhbiBvbGQgb3IgbGF0ZSBwYWNrZXQgdGhhdA0KPiA+ICsgICAgICAgICogICAg ICAgd2FzIHByZXZpb3VzbHkgc2tpcHBlZCwgc28ganVzdCBlbnF1ZXVlIHRoZSBwYWNrZXQgZm9y DQo+ID4gKyAgICAgICAgKiAgICAgICBpbW1lZGlhdGUgcmV0dXJuIG9uIHRoZSBuZXh0IGRyYWlu IGNhbGwsIG9yIGVsc2UgcmV0dXJuIGVycm9yLg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAg ICBpZiAob2Zmc2V0IDwgYi0+b3JkZXJfYnVmLnNpemUpIHsNCj4gPiArICAgICAgICAgICAgICAg cG9zaXRpb24gPSAob3JkZXJfYnVmLT5oZWFkICsgb2Zmc2V0KSAmIG9yZGVyX2J1Zi0+bWFzazsN Cj4gPiArICAgICAgICAgICAgICAgb3JkZXJfYnVmLT5lbnRyaWVzW3Bvc2l0aW9uXSA9IG1idWY7 DQo+ID4gKyAgICAgICB9IGVsc2UgaWYgKG9mZnNldCA8IDIgKiBiLT5vcmRlcl9idWYuc2l6ZSkg ew0KPiA+ICsgICAgICAgICAgICAgICBpZiAocnRlX3Jlb3JkZXJfZmlsbF9vdmVyZmxvdyhiLCBv ZmZzZXQgLSBvcmRlcl9idWYtPnNpemUpIDwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9mZnNldCAtIG9yZGVyX2J1Zi0+c2l6ZSkgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIC8qIFB1dCBpbiBoYW5kbGluZyBmb3IgZW5xdWV1ZSBzdHJhaWdodCB0byBvdXRwdXQg Ki8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBydGVfZXJybm8gPSBFTk9TUEM7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KPiA+ICsgICAgICAgICAgICAgICB9 DQo+ID4gKyAgICAgICAgICAgICAgIG9mZnNldCA9IG1idWYtPnNlcW4gLSBiLT5taW5fc2VxbjsN Cj4gPiArICAgICAgICAgICAgICAgcG9zaXRpb24gPSAob3JkZXJfYnVmLT5oZWFkICsgb2Zmc2V0 KSAmIG9yZGVyX2J1Zi0+bWFzazsNCj4gPiArICAgICAgICAgICAgICAgb3JkZXJfYnVmLT5lbnRy aWVzW3Bvc2l0aW9uXSA9IG1idWY7DQo+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAg ICAgICAgICAvKiBQdXQgaW4gaGFuZGxpbmcgZm9yIGVucXVldWUgc3RyYWlnaHQgdG8gb3V0cHV0 ICovDQo+ID4gKyAgICAgICAgICAgICAgIHJ0ZV9lcnJubyA9IEVSQU5HRTsNCj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuIC0xOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcmV0dXJuIDA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3Vuc2lnbmVkIGludA0KPiA+ICtydGVfcmVvcmRlcl9kcmFp bihzdHJ1Y3QgcnRlX3Jlb3JkZXJfYnVmZmVyICpiLCBzdHJ1Y3QgcnRlX21idWYgKiptYnVmcywN Cj4gPiArICAgICAgICAgICAgICAgdW5zaWduZWQgbWF4X21idWZzKQ0KPiA+ICt7DQo+ID4gKyAg ICAgICB1bnNpZ25lZCBpbnQgZHJhaW5fY250ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICBzdHJ1 Y3QgY2lyX2J1ZmZlciAqb3JkZXJfYnVmID0gJmItPm9yZGVyX2J1ZiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAqcmVhZHlfYnVmID0gJmItPnJlYWR5X2J1ZjsNCj4gPiArDQo+ID4gKyAg ICAgICAvKiBUcnkgdG8gZmV0Y2ggcmVxdWVzdGVkIG51bWJlciBvZiBtYnVmcyBmcm9tIHJlYWR5 IGJ1ZmZlciAqLw0KPiA+ICsgICAgICAgd2hpbGUgKChkcmFpbl9jbnQgPCBtYXhfbWJ1ZnMpICYm IChyZWFkeV9idWYtPnRhaWwgIT0gcmVhZHlfYnVmLT5oZWFkKSkNCj4gew0KPiA+ICsgICAgICAg ICAgICAgICBtYnVmc1tkcmFpbl9jbnQrK10gPSByZWFkeV9idWYtPmVudHJpZXNbcmVhZHlfYnVm LT50YWlsKytdOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAocmVhZHlfYnVmLT50YWlsID09IHJl YWR5X2J1Zi0+c2l6ZSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZWFkeV9idWYtPnRh aWwgPSAwOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIC8qDQo+ID4gKyAgICAg ICAgKiBJZiByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ1ZmZlcnMgbm90IGZldGNoZWQgZnJvbSByZWFk eSBidWZmZXIsIGZldGNoDQo+ID4gKyAgICAgICAgKiByZW1haW5pbmcgYnVmZmVycyBmcm9tIG9y ZGVyIGJ1ZmZlcg0KPiA+ICsgICAgICAgICovDQo+ID4gKyAgICAgICB3aGlsZSAoKGRyYWluX2Nu dCA8IG1heF9tYnVmcykgJiYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAob3JkZXJfYnVm LT5lbnRyaWVzW29yZGVyX2J1Zi0+aGVhZF0gIT0gTlVMTCkpIHsNCj4gPiArICAgICAgICAgICAg ICAgbWJ1ZnNbZHJhaW5fY250KytdID0gb3JkZXJfYnVmLT5lbnRyaWVzW29yZGVyX2J1Zi0+aGVh ZF07DQo+ID4gKyAgICAgICAgICAgICAgIG9yZGVyX2J1Zi0+ZW50cmllc1tvcmRlcl9idWYtPmhl YWRdID0gTlVMTDsNCj4gPiArICAgICAgICAgICAgICAgYi0+bWluX3NlcW4rKzsNCj4gPiArICAg ICAgICAgICAgICAgb3JkZXJfYnVmLT5oZWFkKys7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChv cmRlcl9idWYtPmhlYWQgPT0gb3JkZXJfYnVmLT5zaXplKQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIG9yZGVyX2J1Zi0+aGVhZCA9IDA7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsg ICAgICAgcmV0dXJuIGRyYWluX2NudDsNCj4gPiArfQ0KPiA+IGRpZmYgLS1naXQgYS9saWIvbGli cnRlX3Jlb3JkZXIvcnRlX3Jlb3JkZXIuaA0KPiA+IGIvbGliL2xpYnJ0ZV9yZW9yZGVyL3J0ZV9y ZW9yZGVyLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjNl YzcwMTENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9yZW9yZGVyL3J0 ZV9yZW9yZGVyLmgNCj4gPiBAQCAtMCwwICsxLDE4NCBAQA0KPiA+ICsvKi0NCj4gPiArICogICBC U0QgTElDRU5TRQ0KPiA+ICsgKg0KPiA+ICsgKiAgIENvcHlyaWdodChjKSAyMDEwLTIwMTQgSW50 ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyAqICAgQWxsIHJpZ2h0 cyByZXNlcnZlZC4NCj4gPiArICoNCj4gPiArICogICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCj4gPiArICogICBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMNCj4gPiArICogICBhcmUgbWV0Og0KPiA+ICsgKg0KPiA+ICsgKiAgICAgKiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0K PiA+ICsgKiAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIuDQo+ID4gKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQo+ID4gKyAqICAgICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbg0KPiA+ICsgKiAgICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlDQo+ID4gKyAqICAgICAgIGRpc3RyaWJ1dGlvbi4NCj4g PiArICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhl IG5hbWVzIG9mIGl0cw0KPiA+ICsgKiAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQNCj4gPiArICogICAgICAgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0K PiA+ICsgKg0KPiA+ICsgKiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS SUdIVCBIT0xERVJTIEFORA0KPiBDT05UUklCVVRPUlMNCj4gPiArICogICAiQVMgSVMiIEFORCBB TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUDQo+IE5PVA0K PiA+ICsgKiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORA0KPiBGSVRORVNTIEZPUg0KPiA+ICsgKiAgIEEgUEFSVElDVUxBUiBQVVJQT1NF IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCj4gQ09QWVJJR0hUDQo+ID4g KyAqICAgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E SVJFQ1QsDQo+IElOQ0lERU5UQUwsDQo+ID4gKyAqICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUDQo+IE5PVA0KPiA+ICsgKiAgIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP U1MNCj4gT0YgVVNFLA0KPiA+ICsgKiAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQNCj4gQU5EIE9OIEFOWQ0KPiA+ICsgKiAgIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S DQo+IFRPUlQNCj4gPiArICogICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GDQo+IFRIRSBVU0UNCj4gPiArICogICBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gNCj4gREFN QUdFLg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX1JURV9SRU9SREVSX0hfDQo+ID4g KyNkZWZpbmUgX1JURV9SRU9SREVSX0hfDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQGZpbGUN Cj4gPiArICogUlRFIHJlb3JkZXINCj4gPiArICoNCj4gPiArICogUmVvcmRlciBsaWJyYXJ5IGlz IGEgY29tcG9uZW50IHdoaWNoIGlzIGRlc2lnbmVkIHRvDQo+ID4gKyAqIHByb3ZpZGUgb3JkZXJp bmcgb2Ygb3V0IG9mIG9yZGVyZWQgcGFja2V0cyBiYXNlZCBvbg0KPiA+ICsgKiBzZXF1ZW5jZSBu dW1iZXIgcHJlc2VudCBpbiBtYnVmLg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNp ZmRlZiBfX2NwbHVzcGx1cw0KPiA+ICtleHRlcm4gIkMiIHsNCj4gPiArI2VuZGlmDQo+ID4gKw0K PiA+ICtzdHJ1Y3QgcnRlX3Jlb3JkZXJfYnVmZmVyOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAq IENyZWF0ZSBhIG5ldyByZW9yZGVyIGJ1ZmZlciBpbnN0YW5jZQ0KPiA+ICsgKg0KPiA+ICsgKiBB bGxvY2F0ZSBtZW1vcnkgYW5kIGluaXRpYWxpemUgYSBuZXcgcmVvcmRlciBidWZmZXIgaW4gdGhh dA0KPiA+ICsgKiBtZW1vcnksIHJldHVybmluZyB0aGUgcmVvcmRlciBidWZmZXIgcG9pbnRlciB0 byB0aGUgdXNlcg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gbmFtZQ0KPiA+ICsgKiAgIFRoZSBu YW1lIHRvIGJlIGdpdmVuIHRvIHRoZSByZW9yZGVyIGJ1ZmZlciBpbnN0YW5jZS4NCj4gPiArICog QHBhcmFtIHNvY2tldF9pZA0KPiA+ICsgKiAgIFRoZSBOVU1BIG5vZGUgb24gd2hpY2ggdGhlIG1l bW9yeSBmb3IgdGhlIHJlb3JkZXIgYnVmZmVyDQo+ID4gKyAqICAgaW5zdGFuY2UgaXMgdG8gYmUg cmVzZXJ2ZWQuDQo+ID4gKyAqIEBwYXJhbSBzaXplDQo+ID4gKyAqICAgTWF4IG51bWJlciBvZiBl bGVtZW50cyB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIHJlb3JkZXIgYnVmZmVyDQo+ID4gKyAq IEByZXR1cm4NCj4gPiArICogICBUaGUgaW5pdGlhbGl6ZWQgcmVvcmRlciBidWZmZXIgaW5zdGFu Y2UsIG9yIE5VTEwgb24gZXJyb3INCj4gPiArICogICBPbiBlcnJvciBjYXNlLCBydGVfZXJybm8g d2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseToNCj4gPiArICogICAgLSBFTk9NRU0gLSBubyBhcHBy b3ByaWF0ZSBtZW1vcnkgYXJlYSBmb3VuZCBpbiB3aGljaCB0byBjcmVhdGUNCj4gbWVtem9uZQ0K PiA+ICsgKiAgICAtIEVJTlZBTCAtIGludmFsaWQgcGFyYW1ldGVycw0KPiA+ICsgKi8NCj4gPiAr c3RydWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqDQo+ID4gK3J0ZV9yZW9yZGVyX2NyZWF0ZShjb25z dCBjaGFyICpuYW1lLCB1bnNpZ25lZCBzb2NrZXRfaWQsIHVuc2lnbmVkIGludA0KPiA+ICtzaXpl KTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBJbml0aWFsaXplcyBnaXZlbiByZW9yZGVyIGJ1 ZmZlciBpbnN0YW5jZQ0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gYnVmDQo+ID4gKyAqICAgUG9p bnRlciB0byBtZW1vcnkgYXJlYSB3aGVyZSByZW9yZGVyIGJ1ZmZlciBpbnN0YW5jZQ0KPiA+ICsg KiAgIHNob3VsZCBiZSBpbml0aWFsaXplZA0KPiA+ICsgKiBAcGFyYW0gYnVmc2l6ZQ0KPiA+ICsg KiAgIFNpemUgb2YgdGhlIG1lbW9yeSBhcmVhIHRvIGJlIHVzZWQgZm9yIHJlb3JkZXIgYnVmZmVy IGluc3RhbmNlDQo+ID4gKyAqICAgaW5pdGlhbGl6YXRpb24NCj4gPiArICogQHBhcmFtIG5hbWUN Cj4gPiArICogICBUaGUgbmFtZSB0byBiZSBnaXZlbiB0byB0aGUgcmVvcmRlciBidWZmZXIgaW5z dGFuY2UNCj4gPiArICogQHBhcmFtIHNpemUNCj4gPiArICogICBOdW1iZXIgb2YgZWxlbWVudHMg dGhhdCBjYW4gYmUgc3RvcmVkIGluIHJlb3JkZXIgYnVmZmVyDQo+ID4gKyAqIEByZXR1cm4NCj4g PiArICogICBUaGUgaW5pdGlhbGl6ZWQgcmVvcmRlciBidWZmZXIgaW5zdGFuY2UsIG9yIE5VTEwg b24gZXJyb3INCj4gPiArICogICBPbiBlcnJvciBjYXNlLCBydGVfZXJybm8gd2lsbCBiZSBzZXQg YXBwcm9wcmlhdGVseToNCj4gPiArICogICAgLSBFSU5WQUwgLSBpbnZhbGlkIHBhcmFtZXRlcnMN Cj4gPiArICogICAgLSBFTk9NRU0gLSBub3QgZW5vdWdoIG1lbW9yeSBmb3IgcmVvcmRlciBidWZm ZXIgaW5zdGFuY2UNCj4gPiArICogICAgaW5pdGlhbGl6YXRpb24NCj4gPiArICovDQo+ID4gK3N0 cnVjdCBydGVfcmVvcmRlcl9idWZmZXIgKg0KPiA+ICtydGVfcmVvcmRlcl9pbml0KHZvaWQgKmJ1 ZiwgdW5zaWduZWQgaW50IGJ1ZnNpemUsDQo+ID4gKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg Km5hbWUsIHVuc2lnbmVkIGludCBzaXplKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZXNl dCB0aGUgZ2l2ZW4gcmVvcmRlciBidWZmZXIgaW5zdGFuY2Ugd2l0aCBpbml0aWFsIHZhbHVlcy4N Cj4gPiArICoNCj4gPiArICogQHBhcmFtIGINCj4gPiArICogICBSZW9yZGVyIGJ1ZmZlciBpbnN0 YW5jZSB3aGljaCBoYXMgdG8gYmUgcmVzZXQNCj4gPiArICovDQo+ID4gK3ZvaWQgcnRlX3Jlb3Jk ZXJfcmVzZXQoc3RydWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqYik7DQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICogRmluZCBhbiBleGlzdGluZyByZW9yZGVyIGJ1ZmZlciBpbnN0YW5jZQ0KPiA+ICsg KiBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIG5h bWUNCj4gPiArICogICBOYW1lIG9mIHRoZSByZW9yZGVyIGJ1ZmZlciBpbnN0YWNuZSBhcyBwYXNz ZWQgdG8gcnRlX3Jlb3JkZXJfY3JlYXRlKCkNCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIFBv aW50ZXIgdG8gcmVvcmRlciBidWZmZXIgaW5zdGFuY2Ugb3IgTlVMTCBpZiBvYmplY3Qgbm90IGZv dW5kIHdpdGgNCj4gcnRlX2Vycm5vDQo+ID4gKyAqICAgc2V0IGFwcHJvcHJpYXRlbHkuIFBvc3Np YmxlIHJ0ZV9lcnJubyB2YWx1ZXMgaW5jbHVkZToNCj4gPiArICogICAgLSBFTk9FTlQgLSByZXF1 aXJlZCBlbnRyeSBub3QgYXZhaWxhYmxlIHRvIHJldHVybi4NCj4gPiArICogICAgLSBFX1JURV9O T19UQUlMUSAtIG5vIHRhaWxxIGxpc3QgY291bGQgYmUgZ290IGZvciB0aGUNCj4gPiArICogICAg cmVvcmRlciBpbnN0YW5jZSBsaXN0DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX3Jlb3JkZXJf YnVmZmVyICoNCj4gPiArcnRlX3Jlb3JkZXJfZmluZF9leGlzdGluZyhjb25zdCBjaGFyICpuYW1l KTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBGcmVlIHJlb3JkZXIgYnVmZmVyIGluc3RhbmNl Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gYg0KPiA+ICsgKiAgIHJlb3JkZXIgYnVmZmVyIGlu c3RhbmNlDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBOb25lDQo+ID4gKyAqLw0KPiA+ICt2 b2lkDQo+ID4gK3J0ZV9yZW9yZGVyX2ZyZWUoc3RydWN0IHJ0ZV9yZW9yZGVyX2J1ZmZlciAqYik7 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogSW5zZXJ0IGdpdmVuIG1idWYgaW4gcmVvcmRlciBi dWZmZXIgaW4gaXRzIGNvcnJlY3QgcG9zaXRpb24NCj4gPiArICoNCj4gPiArICogVGhlIGdpdmVu IG1idWYgaXMgdG8gYmUgcmVvcmRlcmVkIHJlbGF0aXZlIHRvIG90aGVyIG1idWZzIGluIHRoZSBz eXN0ZW0uDQo+ID4gKyAqIFRoZSBtYnVmIG11c3QgY29udGFpbiBhIHNlcXVlbmNlIG51bWJlciB3 aGljaCBpcyB0aGVuIHVzZWQgdG8NCj4gPiArcGxhY2UNCj4gPiArICogdGhlIGJ1ZmZlciBpbiB0 aGUgY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgcmVvcmRlciBidWZmZXIuDQo+ID4gK1Jlb3JkZXJl ZA0KPiA+ICsgKiBwYWNrZXRzIGNhbiBsYXRlciBiZSB0YWtlbiBmcm9tIHRoZSBidWZmZXIgdXNp bmcgdGhlDQo+ID4gK3J0ZV9yZW9yZGVyX2RyYWluKCkNCj4gPiArICogQVBJLg0KPiA+ICsgKg0K PiA+ICsgKiBAcGFyYW0gYg0KPiA+ICsgKiAgIFJlb3JkZXIgYnVmZmVyIHdoZXJlIHRoZSBtYnVm IGhhcyB0byBiZSBpbnNlcnRlZC4NCj4gPiArICogQHBhcmFtIG1idWYNCj4gPiArICogICBtYnVm IG9mIHBhY2tldCB0aGF0IG5lZWRzIHRvIGJlIGluc2VydGVkIGluIHJlb3JkZXIgYnVmZmVyLg0K PiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgMCBvbiBzdWNjZXNzDQo+ID4gKyAqICAgLTEgb24g ZXJyb3INCj4gPiArICogICBPbiBlcnJvciBjYXNlLCBydGVfZXJybm8gd2lsbCBiZSBzZXQgYXBw cm9wcmlhdGVseToNCj4gPiArICogICAgLSBFTk9TUEMgLSBDYW5ub3QgbW92ZSBleGlzdGluZyBt YnVmcyBmcm9tIHJlb3JkZXIgYnVmZmVyIHRvDQo+IGFjY29tb2RhdGUgZWFscnkgbWJ1Zi4NCj4g PiArICogICAgQnV0IG1idWYgY2FuIGJlIGFjY29tb2RhdGVkIGJ5IHBlcmZvcm1pbmcgZHJhaW4g YW5kIHRoZW4gaW5zZXJ0Lg0KPiA+ICsgKiAgICAtIEVSQU5HRSAtIFRvbyBlYXJseSBvciBsYXRl IG1idWYgd2hpY2ggaXMgdmFzdGx5IG91dCBvZg0KPiA+ICsgKiAgICByYW5nZSBvZiBleHBlY3Rl ZCB3aW5kb3cgc2hvdWxkIGJlIGluZ25vcmVkIHdpdGhvdXQgYW55IGhhbmRsaW5nLg0KPiA+ICsg Ki8NCj4gPiAraW50DQo+ID4gK3J0ZV9yZW9yZGVyX2luc2VydChzdHJ1Y3QgcnRlX3Jlb3JkZXJf YnVmZmVyICpiLCBzdHJ1Y3QgcnRlX21idWYNCj4gPiArKm1idWYpOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEZldGNoIHJlb3JkZXJlZCBidWZmZXJzDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVy bnMgYSBzZXQgb2YgaW4tb3JkZXIgYnVmZmVycyBmcm9tIHRoZSByZW9yZGVyIGJ1ZmZlcg0KPiA+ ICtzdHJ1Y3R1cmUuIEdhcHMNCj4gPiArICogbWF5IGJlIHByZXNlbnQgaW4gdGhlIHNlcXVlbmNl IG51bWJlcnMgb2YgdGhlIG1idWYgaWYgcGFja2V0cyBoYXZlDQo+ID4gK2JlZW4NCj4gPiArICog ZGVsYXllZCB0b28gbG9uZyBiZWZvcmUgcmVhY2hpbmcgdGhlIHJlb3JkZXIgd2luZG93LCBvciBo YXZlIGJlZW4NCj4gPiArcHJldmlvdXNseQ0KPiA+ICsgKiBkcm9wcGVkIGJ5IHRoZSBzeXN0ZW0u DQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJhbSBiDQo+ID4gKyAqICAgUmVvcmRlciBidWZmZXIgaW5z dGFuY2UgZnJvbSB3aGljaCBwYWNrZXRzIGFyZSB0byBiZSBkcmFpbmVkDQo+ID4gKyAqIEBwYXJh bSBtYnVmcw0KPiA+ICsgKiAgIGFycmF5IG9mIG1idWZzIHdoZXJlIHJlb3JkZXJlZCBwYWNrZXRz IHdpbGwgYmUgaW5zZXJ0ZWQgZnJvbSByZW9yZGVyDQo+IGJ1ZmZlcg0KPiA+ICsgKiBAcGFyYW0g bWF4X21idWZzDQo+ID4gKyAqICAgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbWJ1ZnMg YXJyYXkuDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBudW1iZXIgb2YgbWJ1ZiBwb2ludGVy cyB3cml0dGVuIHRvIG1idWZzLiAwIDw9IE4gPCBtYXhfbWJ1ZnMuDQo+ID4gKyAqLw0KPiA+ICt1 bnNpZ25lZCBpbnQNCj4gPiArcnRlX3Jlb3JkZXJfZHJhaW4oc3RydWN0IHJ0ZV9yZW9yZGVyX2J1 ZmZlciAqYiwgc3RydWN0IHJ0ZV9tYnVmICoqbWJ1ZnMsDQo+ID4gKyAgICAgICB1bnNpZ25lZCBt YXhfbWJ1ZnMpOw0KPiA+ICsNCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gK30NCj4gPiAr I2VuZGlmDQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX1JURV9SRU9SREVSX0hfICovDQo+ID4gLS0N Cj4gPiAxLjguMy4xDQo+ID4NCj4gDQo+IFVzaW5nIHVpbnQzMl90J3MgZm9yIHNlcXVlbmNlIG51 bWJlcnMgaXMgc3VzY2VwdGlibGUgdG8gb3ZlcmZsb3csIHRoZXkgc2hvdWxkDQo+IHByb2JhYmx5 IGJlIHVpbnQ2NF90J3MgdW5sZXNzIHRoZXJlIGlzIGEgZ29vZCByZWFzb24gbm90IHRvLg0KPiAN Cj4gQ2hlZXJzLA0KDQpIaSwNCg0KVXNpbmcgIFVpbnQ2NF90IGZvciBzZXFuIGNvbnN1bWVzIGFu b3RoZXIgNCBleHRyYSBieXRlcyBpbiBtYnVmIG9uIGNhY2hlIGxpbmUwLiBUbyBhdm9pZCB0aGUg c2FtZSBpdCBpcyBjaG9zZW4gdWludDMyX3QuDQoNClRoYW5rcywNClJlc2htYQ0K