Return-path: Received: from mx0b-0016f401.pphosted.com ([67.231.156.173]:54837 "EHLO mx0b-0016f401.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751865AbdBHDQT (ORCPT ); Tue, 7 Feb 2017 22:16:19 -0500 From: David Lin To: Steve deRosier CC: Kalle Valo , "linux-wireless@vger.kernel.org" , Johannes Berg , Chor Teck Law , James Lin , Pete Hsieh Subject: Re: [PATCH v9] Add new mac80211 driver mwlwifi. Date: Wed, 8 Feb 2017 03:16:11 +0000 Message-ID: <38f601c3e7a246f2aa3781909d143ed5@SC-EXCH02.marvell.com> (sfid-20170208_041641_802941_6915CE9B) References: <260962939eeb4dbbb6e462cc010aac21@SC-EXCH02.marvell.com> In-Reply-To: Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-wireless-owner@vger.kernel.org List-ID: PiBGcm9tOiBzdGV2ZS5kZXJvc2llckBnbWFpbC5jb20gV3JvdGU6DQo+IEhpIERhdmlkLA0KPiAN Cj4gRmlyc3Qgb2ZmLCBJIHdhbnRlZCB0byBzYXkgdGhhbmsteW91IGZvciB5b3VyIHdvcmsgYW5k IGVmZm9ydCBpbiANCj4gdHJ5aW5nIHRvIGdldCBtd2x3aWZpIHVwc3RyZWFtLiBNeSBjb21tZW50 cyBhcmUgaW4tbGluZSB3aXRoIG15IA0KPiBnZW5lcmFsIG5vdGVzIGFmdGVyd2FyZHMuDQo+IA0K PiBPbiBUdWUsIERlYyAyMCwgMjAxNiBhdCA4OjExIFBNLCBEYXZpZCBMaW4gPGRsaW5AbWFydmVs bC5jb20+IHdyb3RlOg0KPiANCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mv bWFydmVsbC9td2x3aWZpL2RlYnVnZnMuaA0KPiA+IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFy dmVsbC9td2x3aWZpL2RlYnVnZnMuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gKyNp Zm5kZWYgX01XTF9ERUJVR0ZTX0hfDQo+ID4gKyNkZWZpbmUgX01XTF9ERUJVR0ZTX0hfDQo+ID4g Kw0KPiA+ICt2b2lkIG13bF9kZWJ1Z2ZzX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOyB2 b2lkIA0KPiA+ICttd2xfZGVidWdmc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOw0K PiA+ICsNCj4gDQo+IFlvdSBzaG91bGQgZ3VhcmQgdGhlc2Ugc28gdGhleSBkZWZpbmUgdG8gZW1w dHkgZnVuY3Rpb25zIGlmIA0KPiBDT05GSUdfREVCVUdfRlMgaXNuJ3QgZW5hYmxlZCBzbyB0aGV5 IGNhbiBiZSB1c2VkIGJ5IGEgY2FsbGVyIHdpdGhvdXQgDQo+IGV4cGxpY2l0IGd1YXJkcy4NCj4g DQoNCkkgd2lsbCBtb2RpZnkgaXQuDQoNCj4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv d2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Rldi5oDQo+ID4gYi9kcml2ZXJzL25ldC93aXJlbGVz cy9tYXJ2ZWxsL213bHdpZmkvZGV2LmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAuLmM3YjEwYWMNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVy cy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Rldi5oDQo+ID4gKyNpZmRlZiBDT05GSUdf REVCVUdfRlMNCj4gPiArI2RlZmluZSBNQUNfUkVHX0FERFJfUENJKG9mZnNldCkgICAgICAoKHBy aXYtPmlvYmFzZTEgKyAweEEwMDApICsNCj4gKG9mZnNldCkpDQo+ID4gKw0KPiA+ICsjZGVmaW5l IE1XTF9BQ0NFU1NfTUFDICAgICAgICAgICAgICAgIDENCj4gPiArI2RlZmluZSBNV0xfQUNDRVNT X1JGICAgICAgICAgICAgICAgICAyDQo+ID4gKyNkZWZpbmUgTVdMX0FDQ0VTU19CQlAgICAgICAg ICAgICAgICAgMw0KPiA+ICsjZGVmaW5lIE1XTF9BQ0NFU1NfQ0FVICAgICAgICAgICAgICAgIDQN Cj4gPiArI2RlZmluZSBNV0xfQUNDRVNTX0FERFIwICAgICAgICAgICAgICA1DQo+ID4gKyNkZWZp bmUgTVdMX0FDQ0VTU19BRERSMSAgICAgICAgICAgICAgNg0KPiA+ICsjZGVmaW5lIE1XTF9BQ0NF U1NfQUREUiAgICAgICAgICAgICAgIDcNCj4gPiArI2VuZGlmDQo+IA0KPiBPSywgSSBnZXQgdGhh dCB5b3UncmUgb25seSB1c2luZyB0aGUgYWJvdmUgaW4gdGhlIGRlYnVnZnMgZnVuY3Rpb25zLCAN Cj4gYnV0IGFzIGZvciBnZW5lcmljIHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMsIHRoZXNlIHdv dWxkIGJlIHZhbGlkIG5vIA0KPiBtYXR0ZXIgaWYgQ09ORklHX0RFQlVHX0ZTIGlzIGRlZmluZWQu IEhhdmluZyB0aGUgZ3VhcmQgaGVyZSBqdXN0IHNlZW1zIA0KPiB0byBjb21wbGljYXRlIHRoaW5n cy4NCj4gDQoNCkkgd2lsbCByZW1vdmUgaXQuDQoNCj4gDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbXds X3ByaXYgew0KPiA+ICsgc3RydWN0IGllZWU4MDIxMV9odyAqaHc7DQo+ID4gKyBzdHJ1Y3QgZmly bXdhcmUgKmZ3X3Vjb2RlOw0KPiA+ICsgYm9vbCBmd19kZXZpY2VfcHdydGJsOw0KPiA+ICsgYm9v bCBmb3JiaWRkZW5fc2V0dGluZzsNCj4gPiArDQo+ID4gKyBzdHJ1Y3QgdGhlcm1hbF9jb29saW5n X2RldmljZSAqY2RldjsNCj4gPiArIHUzMiB0aHJvdHRsZV9zdGF0ZTsNCj4gPiArIHUzMiBxdWll dF9wZXJpb2Q7DQo+ID4gKyBpbnQgdGVtcGVyYXR1cmU7DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09O RklHX0RFQlVHX0ZTDQo+ID4gKyBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsNCj4gPiArIHUz MiByZWdfdHlwZTsNCj4gPiArIHUzMiByZWdfb2Zmc2V0Ow0KPiA+ICsgdTMyIHJlZ192YWx1ZTsN Cj4gPiArIGludCB0eF9kZXNjX251bTsNCj4gPiArI2VuZGlmDQo+IA0KPiBXZSdyZSBzYXZpbmcg YSBmZXcgYnl0ZXMgaGVyZSBhdCB0aGUgY29zdCBvZiBzb21lIGNvbXBsZXhpdHkuIEkgY291bGQg DQo+IGdvIGVpdGhlciB3YXksIGJ1dCBJIGhhdGUgd2hlbiBwcml2IHN0cnVjdHVyZXMgbXV0YXRl Lg0KPiANCg0KSSB3aWxsIHJlbW92ZSB0aGUgY29tcGlsZSBjb250cm9sLg0KDQo+IA0KPiA+ICsv KiBEZWZpbmVkIGluIG1hYzgwMjExLmMuICovDQo+ID4gK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVl ZTgwMjExX29wcyBtd2xfbWFjODAyMTFfb3BzOw0KPiANCj4gRG9lcyB0aGlzIG5lZWQgdG8gYmUg aW4gZGV2Lmg/DQo+IA0KPiANCg0KSXQgY2FuIGJlIG1vdmVkIHRvIG1haW4uYy4NCg0KPiANCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL2Z3Y21k LmMNCj4gPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2NtZC5jDQo+ ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi45YzNjY2Y5DQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXds d2lmaS9md2NtZC5jDQo+ID4gQEAgLTAsMCArMSwyODM3IEBADQo+ID4gKy8qDQo+ID4gKyAqIENv cHlyaWdodCAoQykgMjAwNi0yMDE2LCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLg0KPiA+ICsg Kg0KPiA+ICsgKiBUaGlzIHNvZnR3YXJlIGZpbGUgKHRoZSAiRmlsZSIpIGlzIGRpc3RyaWJ1dGVk IGJ5IE1hcnZlbGwgDQo+ID4gK0ludGVybmF0aW9uYWwNCj4gPiArICogTHRkLiB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gDQo+ID4gKzIs IEp1bmUgMTk5MQ0KPiA+ICsgKiAodGhlICJMaWNlbnNlIikuICBZb3UgbWF5IHVzZSwgcmVkaXN0 cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcw0KPiA+ICsNCj4gPiArI2RlZmluZSBNQVhfV0FJVF9G V19DT01QTEVURV9JVEVSQVRJT05TICAgICAgICAgMjAwMA0KPiA+ICsjZGVmaW5lIE1BWF9XQUlU X0dFVF9IV19TUEVDU19JVEVSQVRPTlMgICAgICAgICAzDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgY21k X2hlYWRlciB7DQo+ID4gKyBfX2xlMTYgY29tbWFuZDsNCj4gPiArIF9fbGUxNiBsZW47DQo+ID4g K30gX19wYWNrZWQ7DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBtd2xfZndjbWRfY2hrX2FkYXB0 ZXIoc3RydWN0IG13bF9wcml2ICpwcml2KSB7DQo+ID4gKyB1MzIgcmVndmFsOw0KPiA+ICsNCj4g PiArIHJlZ3ZhbCA9IHJlYWRsKHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVHX0lOVF9DT0RFKTsN Cj4gDQo+IENvdWxkbid0IHRoZSBhYm92ZSBiZSBvbmUgbGluZT8NCj4NCg0KWWVzLiBJIHdpbGwg bW9kaWZ5IGl0Lg0KIA0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXdsX2Z3Y21kX2dldF90 eF9wb3dlcnMoc3RydWN0IG13bF9wcml2ICpwcml2LCB1MTYgDQo+ID4gKypwb3dsaXN0LA0KPiB1 MTYgY2gsDQo+ID4gKyAgIHUxNiBiYW5kLCB1MTYgd2lkdGgsIHUxNiBzdWJfY2gpIHsgIHN0cnVj dCANCj4gPiAraG9zdGNtZF9jbWRfODAyXzExX3R4X3Bvd2VyICpwY21kOyAgaW50IGk7DQo+ID4g Kw0KPiA+ICsgcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfODAyXzExX3R4X3Bvd2VyICopJnBy aXYtPnBjbWRfYnVmWzBdOw0KPiANCj4gT2Z0ZW4gaGFwcGVucywgc28gSSBwcm9iYWJseSB3b24n dCBjYXRjaCB0aGVtIGFsbCwgYnV0IHRoaXMgY291bGQgDQo+IGxpa2V3aXNlIGJlIGRvbmUgaW4g b25lIGxpbmUuIFRoZW4gYWdhaW4uLi4gbGluZSBsZW5ndGggaXNzdWVzLCBzbyA1MC81MCBvbiB0 aGF0Lg0KPiANCj4NCg0KSSB3aWxsIG1vZGlmeSBpdC4NCg0KPiA+ICsNCj4gPiArc3RhdGljIHU4 IG13bF9md2NtZF9nZXRfODBtX3ByaV9jaG5sKHU4IGNoYW5uZWwpIHsNCj4gPiArIHU4IGFjdF9w cmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8wOw0KPiA+ICsNCj4gPiArIHN3aXRjaCAoY2hhbm5l bCkgew0KPiA+ICsgY2FzZSAzNjoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hB Tl8wOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNlIDQwOg0KPiA+ICsgYWN0X3ByaW1hcnkgPSBB Q1RfUFJJTUFSWV9DSEFOXzE7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgNDQ6DQo+ID4gKyBh Y3RfcHJpbWFyeSA9IEFDVF9QUklNQVJZX0NIQU5fMjsNCj4gPiArIGJyZWFrOw0KPiA+ICsgY2Fz ZSA0ODoNCj4gPiArIGFjdF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8zOw0KPiA+ICsgYnJl YWs7DQo+ID4gKyBjYXNlIDUyOg0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFO XzA7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgNTY6DQo+ID4gKyBhY3RfcHJpbWFyeSA9IEFD VF9QUklNQVJZX0NIQU5fMTsNCj4gPiArIGJyZWFrOw0KPiA+ICsgY2FzZSA2MDoNCj4gPiArIGFj dF9wcmltYXJ5ID0gQUNUX1BSSU1BUllfQ0hBTl8yOw0KPiA+ICsgYnJlYWs7DQo+ID4gKyBjYXNl IDY0Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7DQo+ID4gKyBicmVh azsNCj4gPiArIGNhc2UgMTAwOg0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFO XzA7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTA0Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBB Q1RfUFJJTUFSWV9DSEFOXzE7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTA4Og0KPiA+ICsg YWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQo+ID4gKyBicmVhazsNCj4gPiArIGNh c2UgMTEyOg0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7DQo+ID4gKyBi cmVhazsNCj4gPiArIGNhc2UgMTE2Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9D SEFOXzA7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTIwOg0KPiA+ICsgYWN0X3ByaW1hcnkg PSBBQ1RfUFJJTUFSWV9DSEFOXzE7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTI0Og0KPiA+ ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQo+ID4gKyBicmVhazsNCj4gPiAr IGNhc2UgMTI4Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7DQo+ID4g KyBicmVhazsNCj4gPiArIGNhc2UgMTMyOg0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFS WV9DSEFOXzA7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTM2Og0KPiA+ICsgYWN0X3ByaW1h cnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzE7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTQwOg0K PiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQo+ID4gKyBicmVhazsNCj4g PiArIGNhc2UgMTQ0Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7DQo+ ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTQ5Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJ TUFSWV9DSEFOXzA7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTUzOg0KPiA+ICsgYWN0X3By aW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzE7DQo+ID4gKyBicmVhazsNCj4gPiArIGNhc2UgMTU3 Og0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzI7DQo+ID4gKyBicmVhazsN Cj4gPiArIGNhc2UgMTYxOg0KPiA+ICsgYWN0X3ByaW1hcnkgPSBBQ1RfUFJJTUFSWV9DSEFOXzM7 DQo+ID4gKyBicmVhazsNCj4gPiArIH0NCj4gPiArDQo+ID4gKyByZXR1cm4gYWN0X3ByaW1hcnk7 DQo+ID4gK30NCj4gPiArDQo+IA0KPiBJZ25vcmFuY2Ugc3BlYWtpbmcgaGVyZSBwZXJoYXBzLCBi dXQgdGhlIGFib3ZlIGxvb2tzIGxpa2Ugc29tZXRoaW5nIA0KPiB0aGF0IG5lYXJseSBldmVyeSBk cml2ZXIgd291bGQgbmVlZCB0byBkZWFsIHdpdGguIElzbid0IHRoZXJlIGEgaGVscGVyIA0KPiBm dW5jdGlvbiBpbg0KPiBtYWM4MDIxMSBvciBzb21lIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aGFu IGV4cGxpY2l0bHkgZG9pbmcgYSBzd2l0Y2ggDQo+IGxvZ2ljIGxvb2t1cD8NCj4gDQoNClRoaXMg aXMgdGhlIGZ1bmN0aW9uIG5lZWRlZCBmb3Igb3VyIGhvc3QgY29tbWFuZC4gVGhlcmUgaXMgbm8g aGVscGVyIGZ1bmN0aW9uIGluIG1hYzgwMjExLiBJIHdpbGwgbW9kaWZ5IHRoZSBjb2RlLg0KDQo+ ID4gK2ludCBtd2xfZndjbWRfc2V0X25ld19zdG5fYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LA0KPiA+ICsgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KPiA+ICsgICAgICBzdHJ1 Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0KPiA+ICt7DQo+ID4gKyBzdHJ1Y3QgbXdsX3ByaXYgKnBy aXYgPSBody0+cHJpdjsNCj4gPiArIHN0cnVjdCBtd2xfdmlmICptd2xfdmlmOw0KPiA+ICsgc3Ry dWN0IGhvc3RjbWRfY21kX3NldF9uZXdfc3RuICpwY21kOw0KPiA+ICsgdTMyIHJhdGVzOw0KPiA+ ICsNCj4gPiArIG13bF92aWYgPSBtd2xfZGV2X2dldF92aWYodmlmKTsNCj4gPiArDQo+ID4gKyBw Y21kID0gKHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0biAqKSZwcml2LT5wY21kX2J1Zlsw XTsNCj4gPiArDQo+ID4gKyBtdXRleF9sb2NrKCZwcml2LT5md2NtZF9tdXRleCk7DQo+ID4gKw0K PiA+ICsgbWVtc2V0KHBjbWQsIDB4MDAsIHNpemVvZigqcGNtZCkpOw0KPiA+ICsgcGNtZC0+Y21k X2hkci5jbWQgPSBjcHVfdG9fbGUxNihIT1NUQ01EX0NNRF9TRVRfTkVXX1NUTik7DQo+ID4gKyBw Y21kLT5jbWRfaGRyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcGNtZCkpOyBjbWRfaGRyLm1h Y2lkID0gDQo+ID4gKyBwY21kLT5td2xfdmlmLT5tYWNpZDsNCj4gPiArDQo+ID4gKyBwY21kLT5h Y3Rpb24gPSBjcHVfdG9fbGUxNihIT1NUQ01EX0FDVF9TVEFfQUNUSU9OX0FERCk7DQo+ID4gKyBp ZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsNCj4gPiArIHBjbWQtPmFp ZCA9IDA7DQo+ID4gKyBwY21kLT5zdG5faWQgPSAwOw0KPiA+ICsgfSBlbHNlIHsNCj4gPiArIHBj bWQtPmFpZCA9IGNwdV90b19sZTE2KHN0YS0+YWlkKTsgc3RuX2lkID0gY3B1X3RvX2xlMTYoc3Rh LT5haWQpOw0KPiA+ICsgfQ0KPiA+ICsgZXRoZXJfYWRkcl9jb3B5KHBjbWQtPm1hY19hZGRyLCBz dGEtPmFkZHIpOw0KPiA+ICsNCj4gPiArIGlmIChody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQg PT0gTkw4MDIxMV9CQU5EXzJHSFopIHJhdGVzID0NCj4gPiArIHN0YS0+c3VwcF9yYXRlc1tOTDgw MjExX0JBTkRfMkdIWl07DQo+ID4gKyBlbHNlDQo+ID4gKyByYXRlcyA9IHN0YS0+c3VwcF9yYXRl c1tOTDgwMjExX0JBTkRfNUdIWl0gPDwgNTsNCj4gPiArIHBjbWQtPnBlZXJfaW5mby5sZWdhY3lf cmF0ZV9iaXRtYXAgPSBjcHVfdG9fbGUzMihyYXRlcyk7DQo+ID4gKw0KPiA+ICsgaWYgKHN0YS0+ aHRfY2FwLmh0X3N1cHBvcnRlZCkgew0KPiA+ICsgcGNtZC0+cGVlcl9pbmZvLmh0X3JhdGVzWzBd ID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMF07IA0KPiA+ICsgcGNtZC0+cGVlcl9pbmZvLmh0 X3JhdGVzWzFdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMV07IA0KPiA+ICsgcGNtZC0+cGVl cl9pbmZvLmh0X3JhdGVzWzJdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMl07IA0KPiA+ICsg cGNtZC0+cGVlcl9pbmZvLmh0X3JhdGVzWzNdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbM107 IA0KPiA+ICsgcGNtZC0+cGVlcl9pbmZvLmh0X2NhcF9pbmZvID0gY3B1X3RvX2xlMTYoc3RhLT5o dF9jYXAuY2FwKTsgDQo+ID4gKyBwY21kLT5wZWVyX2luZm8ubWFjX2h0X3BhcmFtX2luZm8gPQ0K PiA+ICsgKHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvciAmIDMpIHwNCj4gPiArICgoc3RhLT5odF9j YXAuYW1wZHVfZGVuc2l0eSAmIDcpIDw8IDIpOyB9DQo+ID4gKw0KPiA+ICsgaWYgKHN0YS0+dmh0 X2NhcC52aHRfc3VwcG9ydGVkKSB7DQo+ID4gKyBwY21kLT5wZWVyX2luZm8udmh0X21heF9yeF9t Y3MgPQ0KPiA+ICsgY3B1X3RvX2xlMzIoKigodTMyICopDQo+ID4gKyAmc3RhLT52aHRfY2FwLnZo dF9tY3MucnhfbWNzX21hcCkpOw0KPiA+ICsgcGNtZC0+cGVlcl9pbmZvLnZodF9jYXAgPSBjcHVf dG9fbGUzMihzdGEtPnZodF9jYXAuY2FwKTsgDQo+ID4gKyBwY21kLT5wZWVyX2luZm8udmh0X3J4 X2NoYW5uZWxfd2lkdGggPSBzdGEtPmJhbmR3aWR0aDsNCj4gPiArIH0NCj4gPiArDQo+ID4gKyBw Y21kLT5pc19xb3Nfc3RhID0gc3RhLT53bWU7DQo+ID4gKyBwY21kLT5xb3NfaW5mbyA9ICgoc3Rh LT51YXBzZF9xdWV1ZXMgPDwgNCkgfCAoc3RhLT5tYXhfc3AgPDwgMSkpOw0KPiA+ICsNCj4gPiAr IGlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VUX05FV19TVE4pKSB7 IA0KPiA+ICsgbXV0ZXhfdW5sb2NrKCZwcml2LT5md2NtZF9tdXRleCk7IHdpcGh5X2Vycihody0+ d2lwaHksICJmYWlsZWQgDQo+ID4gKyBleGVjdXRpb25cbiIpOyByZXR1cm4gLUVJTzsgfQ0KPiA+ ICsNCj4gPiArIGlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeyANCj4g PiArIGV0aGVyX2FkZHJfY29weShwY21kLT5tYWNfYWRkciwgbXdsX3ZpZi0+c3RhX21hYyk7DQo+ ID4gKw0KPiA+ICsgaWYgKG13bF9md2NtZF9leGVjX2NtZChwcml2LCBIT1NUQ01EX0NNRF9TRVRf TkVXX1NUTikpIHsgDQo+ID4gKyBtdXRleF91bmxvY2soJnByaXYtPmZ3Y21kX211dGV4KTsgd2lw aHlfZXJyKGh3LT53aXBoeSwgImZhaWxlZCANCj4gPiArIGV4ZWN1dGlvblxuIik7IHJldHVybiAt RUlPOyB9IH0NCj4gDQo+IE9LLCB0aW1lIHRvIGFzay4gV2h5IGFyZSB3ZSB0ZWxsaW5nIHRoZSBm aXJtd2FyZSB0aGF0IHdlJ3JlIGNvbm5lY3RlZCANCj4gdG8gb3Vyc2VsdmVzPyBJIHdvdWxkIHBy ZXN1bWUgdGhlIGZpcm13YXJlIGFscmVhZHkga25vd3Mgb3VyIE1BQyBhZGRyZXNzLg0KPiANCj4g SSBub3RpY2VkIHRoaXMgb3JpZ2luYWxseSBiZWNhdXNlIHRoZXJlJ3MgYSBuYXN0eSBidWcgd2l0 aCByZWN5Y2xpbmcgDQo+IHRoZSBjb21tYW5kIGJ1ZmZlciAoZm9yIHNkaW8sIGl0J3Mgbm90IHJl bGV2YW50IGZvciB0aGlzIGRyaXZlcikgYW5kIA0KPiBpbiBkb2luZyBleHBlcmltZW50cyBJIG5v dGljZWQgdGhhdCB0aHJvdWdocHV0IHNpZ25pZmljYW50bHkgaW5jcmVhc2VzIA0KPiBpbiBTVEEg bW9kZSBpZiB3ZSBqdXN0IGxlYXZlIG91dCB0aGUgZW50aXJlIGNsYXVzZS4NCj4gDQo+IEluIGJy aWVmbHkgZXhhbWluaW5nIHRoZSBmaXJtd2FyZSBzb3VyY2UgSSBzZWUgbm8gcmVhc29uIHRvIGRv IHRoaXMsIA0KPiBidXQgdGhlcmUncyBhIGhpZGRlbiBjaHVuayBhbmQgSSBkb24ndCBrbm93IHdo YXQgdGhlIGhhcmR3YXJlIGl0c2VsZiANCj4gZG9lcyB3aXRoIHRoZSBNQUMgdGFibGUuDQo+IA0K PiBTbywgd2h5IGlzIGl0IG5lY2Vzc2FyeT8NCj4gDQoNCkkgd2lsbCBjaGVjay4NCg0KPiANCj4g PiAraW50IG13bF9md2NtZF9zZXRfbmV3X3N0bl9kZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs DQo+ID4gKyAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICphZGRyKSB7ICBzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYgDQo+ID4gKz0NCj4gPiAraHctPnByaXY7ICBzdHJ1Y3QgbXdsX3Zp ZiAqbXdsX3ZpZjsgIHN0cnVjdCBob3N0Y21kX2NtZF9zZXRfbmV3X3N0bg0KPiA+ICsqcGNtZDsN Cj4gPiArDQo+ID4gKyBtd2xfdmlmID0gbXdsX2Rldl9nZXRfdmlmKHZpZik7DQo+ID4gKw0KPiA+ ICsgcGNtZCA9IChzdHJ1Y3QgaG9zdGNtZF9jbWRfc2V0X25ld19zdG4gKikmcHJpdi0+cGNtZF9i dWZbMF07DQo+ID4gKw0KPiA+ICsgbXV0ZXhfbG9jaygmcHJpdi0+ZndjbWRfbXV0ZXgpOw0KPiA+ ICsNCj4gPiArIG1lbXNldChwY21kLCAweDAwLCBzaXplb2YoKnBjbWQpKTsNCj4gPiArIHBjbWQt PmNtZF9oZHIuY21kID0gY3B1X3RvX2xlMTYoSE9TVENNRF9DTURfU0VUX05FV19TVE4pOw0KPiA+ ICsgcGNtZC0+Y21kX2hkci5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnBjbWQpKTsgY21kX2hk ci5tYWNpZCA9IA0KPiA+ICsgcGNtZC0+bXdsX3ZpZi0+bWFjaWQ7DQo+ID4gKw0KPiA+ICsgcGNt ZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoSE9TVENNRF9BQ1RfU1RBX0FDVElPTl9SRU1PVkUpOw0K PiA+ICsgZXRoZXJfYWRkcl9jb3B5KHBjbWQtPm1hY19hZGRyLCBhZGRyKTsNCj4gPiArDQo+ID4g KyBpZiAobXdsX2Z3Y21kX2V4ZWNfY21kKHByaXYsIEhPU1RDTURfQ01EX1NFVF9ORVdfU1ROKSkg eyANCj4gPiArIG11dGV4X3VubG9jaygmcHJpdi0+ZndjbWRfbXV0ZXgpOyB3aXBoeV9lcnIoaHct PndpcGh5LCAiZmFpbGVkIA0KPiA+ICsgZXhlY3V0aW9uXG4iKTsgcmV0dXJuIC1FSU87IH0NCj4g PiArDQo+ID4gKyBpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsgDQo+ ID4gKyBldGhlcl9hZGRyX2NvcHkocGNtZC0+bWFjX2FkZHIsIG13bF92aWYtPnN0YV9tYWMpOw0K PiA+ICsNCj4gPiArIGlmIChtd2xfZndjbWRfZXhlY19jbWQocHJpdiwgSE9TVENNRF9DTURfU0VU X05FV19TVE4pKSB7IA0KPiA+ICsgbXV0ZXhfdW5sb2NrKCZwcml2LT5md2NtZF9tdXRleCk7IHdp cGh5X2Vycihody0+d2lwaHksICJmYWlsZWQgDQo+ID4gKyBleGVjdXRpb25cbiIpOyByZXR1cm4g LUVJTzsgfSB9DQo+ID4gKw0KPiANCj4gRGl0dG8uDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndkbC5jDQo+ID4gYi9kcml2ZXJzL25l dC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvZndkbC5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gPiBpbmRleCAwMDAwMDAwLi5mNGQ1ZmExDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsr KyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9md2RsLmMNCj4gLi4uDQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtd2xfZndkbF90cmlnX3BjaWNtZChzdHJ1Y3QgbXdsX3By aXYgKnByaXYpIHsgDQo+ID4gK3dyaXRlbChwcml2LT5wcGh5c19jbWRfYnVmLCBwcml2LT5pb2Jh c2UxICsgTUFDUkVHX1JFR19HRU5fUFRSKTsNCj4gPiArDQo+ID4gKyB3cml0ZWwoMHgwMCwgcHJp di0+aW9iYXNlMSArIE1BQ1JFR19SRUdfSU5UX0NPREUpOw0KPiA+ICsNCj4gPiArIHdyaXRlbChN QUNSRUdfSDJBUklDX0JJVF9ET09SX0JFTEwsDQo+ID4gKyAgICAgICBwcml2LT5pb2Jhc2UxICsg TUFDUkVHX1JFR19IMkFfSU5URVJSVVBUX0VWRU5UUyk7IH0NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIG13bF9md2RsX3RyaWdfcGNpY21kX2Jvb3Rjb2RlKHN0cnVjdCBtd2xfcHJpdiAqcHJpdikg eyANCj4gPiArd3JpdGVsKHByaXYtPnBwaHlzX2NtZF9idWYsIHByaXYtPmlvYmFzZTEgKyBNQUNS RUdfUkVHX0dFTl9QVFIpOw0KPiA+ICsNCj4gPiArIHdyaXRlbCgweDAwLCBwcml2LT5pb2Jhc2Ux ICsgTUFDUkVHX1JFR19JTlRfQ09ERSk7DQo+ID4gKw0KPiA+ICsgd3JpdGVsKE1BQ1JFR19IMkFS SUNfQklUX0RPT1JfQkVMTCwNCj4gPiArICAgICAgIHByaXYtPmlvYmFzZTEgKyBNQUNSRUdfUkVH X0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsgfQ0KPiA+ICsNCj4gDQo+IFVubGVzcyBJJ20gbWlzdGFr ZW4gdGhlIGFib3ZlIHR3byBmdW5jdGlvbnMgYXJlIDEwMCUgaWRlbnRpY2FsLiBJbiBteSANCj4g dmVyc2lvbiBJIGNvbGxhcHNlZCB0aGVtIHRvIGEgc2luZ2xlIG9uZSBhbmQgaXQgd29ya3MgZmlu ZS4NCj4gDQoNCkkgd2lsbCBjaGVjayBhbmQgbW9kaWZ5IGl0Lg0KDQo+ID4gK2ludCBtd2xfZndk bF9kb3dubG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykgew0KPiAuLi4NCj4g PiArDQo+ID4gKyB3aGlsZSAoc2l6ZV9md19kb3dubG9hZGVkIDwgZnctPnNpemUpIHsgbGVuID0g cmVhZGwocHJpdi0+aW9iYXNlMSANCj4gPiArICsgMHhjNDApOw0KPiA+ICsNCj4gPiArIGlmICgh bGVuKQ0KPiA+ICsgYnJlYWs7DQo+ID4gKw0KPiA+ICsgLyogdGhpcyBjb3BpZXMgdGhlIG5leHQg Y2h1bmsgb2YgZncgYmluYXJ5IHRvIGJlIGRlbGl2ZXJlZCAqLyANCj4gPiArIG1lbWNweSgoY2hh ciAqKSZwcml2LT5wY21kX2J1ZlswXSwNCj4gPiArICAgICAgIChmdy0+ZGF0YSArIHNpemVfZndf ZG93bmxvYWRlZCksIGxlbik7DQo+ID4gKw0KPiA+ICsgLyogdGhpcyBmdW5jdGlvbiB3cml0ZXMg cGRhdGEgdG8gYzEwLCB0aGVuIHdyaXRlIDIgdG8gYzE4ICovIA0KPiA+ICsgbXdsX2Z3ZGxfdHJp Z19wY2ljbWRfYm9vdGNvZGUocHJpdik7DQo+ID4gKw0KPiA+ICsgLyogdGhpcyBpcyBhcmJpdHJh cnkgcGVyIHlvdXIgcGxhdGZvcm07IHdlIHVzZSAweGZmZmYgKi8gDQo+ID4gKyBjdXJyX2l0ZXJh dGlvbiA9IEZXX01BWF9OVU1fQ0hFQ0tTOw0KPiA+ICsNCj4gPiArIC8qIE5PVEU6IHRoZSBmb2xs b3dpbmcgYmFjayB0byBiYWNrIGNoZWNrcyBvbiBDMUMgaXMgdGltZQ0KPiA+ICsgKiBzZW5zaXRp dmUsIGhlbmNlIG1heSBuZWVkIHRvIGJlIHR3ZWFrZWQgZGVwZW5kZW50IG9uIGhvc3QNCj4gPiAr ICogcHJvY2Vzc29yLiBUaW1lIGZvciBTQzIgdG8gZ28gZnJvbSB0aGUgd3JpdGUgb2YgZXZlbnQg MiB0bw0KPiA+ICsgKiBDMUMgPT0gMiBpcyB+MTMwMCBuU2VjLiBIZW5jZSB0aGUgY2hlY2tpbmdz IG9uIGhvc3QgaGFzIHRvDQo+ID4gKyAqIGNvbnNpZGVyIGhvdyBlZmZpY2llbnQgeW91ciBjb2Rl IGNhbiBiZSB0byBtZWV0IHRoaXMgdGltaW5nLA0KPiA+ICsgKiBvciB5b3UgY2FuIGFsdGVybmF0 aXZlbHkgdHdlYWsgdGhpcyByb3V0aW5lcyB0byBmaXQgeW91cg0KPiA+ICsgKiBwbGF0Zm9ybQ0K PiA+ICsgKi8NCj4gPiArIGRvIHsNCj4gPiArIGludF9jb2RlID0gcmVhZGwocHJpdi0+aW9iYXNl MSArIDB4YzFjKTsgaWYgKGludF9jb2RlICE9IDApIGJyZWFrOyANCj4gPiArIGNvbmRfcmVzY2hl ZCgpOyBjdXJyX2l0ZXJhdGlvbi0tOyB9IHdoaWxlIChjdXJyX2l0ZXJhdGlvbik7DQo+ID4gKw0K PiANCj4gVGhlcmUncyBzb21ldGhpbmcgZmlzaHkgd2l0aCB0aGUgYWJvdmUuIEhhdmluZyB0byAi dHdlYWsiIGRyaXZlciANCj4gdGltaW5nIGJhc2VkIG9uIHBsYXRmb3JtIGlzIGEgaHVnZSByZWQg ZmxhZy4gVGhlcmUncyBnb3QgdG8gYmUgDQo+IHNvbWV0aGluZyBiZXR0ZXIgdGhhbiB0aGUgYWJv dmUuDQo+IA0KDQpJdCB3aWxsIHJlbGVhc2UgQ1BVLg0KDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213bHdpZmkvbWFjODAyMTEuYw0KPiA+IGIvZHJp dmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL21hYzgwMjExLmMNCj4gLi4uDQo+ID4g K3N0YXRpYyBpbnQgbXdsX21hYzgwMjExX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywN Cj4gPiArICAgICAgIHUzMiBjaGFuZ2VkKQ0KPiA+ICt7DQo+ID4gKyBzdHJ1Y3QgaWVlZTgwMjEx X2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7ICBpbnQgcmM7DQo+ID4gKw0KPiA+ICsgd2lwaHlfZGVi dWcoaHctPndpcGh5LCAiY2hhbmdlOiAweCV4XG4iLCBjaGFuZ2VkKTsNCj4gPiArDQo+ID4gKyBp ZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSByYyA9IA0KPiA+ICsgbXdsX2Z3 Y21kX3JhZGlvX2Rpc2FibGUoaHcpOyBlbHNlIHJjID0gbXdsX2Z3Y21kX3JhZGlvX2VuYWJsZSho dyk7DQo+ID4gKw0KPiA+ICsgaWYgKHJjKQ0KPiA+ICsgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsg aWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgeyBpbnQgcmF0ZSA9 IDA7DQo+ID4gKw0KPiA+ICsgaWYgKGNvbmYtPmNoYW5kZWYuY2hhbi0+YmFuZCA9PSBOTDgwMjEx X0JBTkRfMkdIWikgew0KPiANCj4gQ2F1c2VzIGNvbXBpbGUgd2FybmluZy4gU2hvdWxkIGJlIElF RUU4MDIxMV9CQU5EXzJHSFouDQo+IA0KDQpObywgeW91IG5lZWQgdG8gdXNlIHVwZGF0ZWQgbWFj ODAyMTEuDQoNCj4gDQo+ID4gKyBtd2xfZndjbWRfc2V0X2FwbW9kZShodywgQVBfTU9ERV8yXzRH SFpfMTFBQ19NSVhFRCk7IA0KPiA+ICsgbXdsX2Z3Y21kX3NldF9saW5rYWRhcHRfY3NfbW9kZSho dywNCj4gPiArIExJTktfQ1NfU1RBVEVfQ09OU0VSVik7DQo+ID4gKyByYXRlID0gbXdsX3JhdGVz XzI0WzBdLmh3X3ZhbHVlOw0KPiA+ICsgfSBlbHNlIGlmIChjb25mLT5jaGFuZGVmLmNoYW4tPmJh bmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopIHsNCj4gDQo+IENhdXNlcyBjb21waWxlIHdhcm5pbmcu IFNob3VsZCBiZSBJRUVFODAyMTFfQkFORF81R0haLg0KPiANCj4gPiArc3RhdGljIHZvaWQgbXds X21hYzgwMjExX2Jzc19pbmZvX2NoYW5nZWRfYXAoc3RydWN0IGllZWU4MDIxMV9odw0KPiAqaHcs DQo+ID4gKyAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCj4gPiArICAgICBzdHJ1Y3Qg aWVlZTgwMjExX2Jzc19jb25mICppbmZvLA0KPiA+ICsgICAgIHUzMiBjaGFuZ2VkKQ0KPiA+ICt7 DQo+ID4gKyBpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgDQo+ID4gK213 bF9md2NtZF9zZXRfcmFkaW9fcHJlYW1ibGUoaHcsDQo+ID4gKyAgICAgdmlmLT5ic3NfY29uZi51 c2Vfc2hvcnRfcHJlYW1ibGUpOw0KPiA+ICsNCj4gPiArIGlmIChjaGFuZ2VkICYgQlNTX0NIQU5H RURfQkFTSUNfUkFURVMpIHsgaW50IGlkeDsgaW50IHJhdGU7DQo+ID4gKw0KPiA+ICsgLyogVXNl IGxvd2VzdCBzdXBwb3J0ZWQgYmFzaWMgcmF0ZSBmb3IgbXVsdGljYXN0cw0KPiA+ICsgKiBhbmQg bWFuYWdlbWVudCBmcmFtZXMgKHN1Y2ggYXMgcHJvYmUgcmVzcG9uc2VzIC0tDQo+ID4gKyAqIGJl YWNvbnMgd2lsbCBhbHdheXMgZ28gb3V0IGF0IDEgTWIvcykuDQo+ID4gKyAqLw0KPiA+ICsgaWR4 ID0gZmZzKHZpZi0+YnNzX2NvbmYuYmFzaWNfcmF0ZXMpOyBpZiAoaWR4KSBpZHgtLTsNCj4gPiAr DQo+ID4gKyBpZiAoaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kID09IE5MODAyMTFfQkFORF8y R0haKQ0KPiANCj4gQ2F1c2VzIGNvbXBpbGUgd2FybmluZy4gU2hvdWxkIGJlIElFRUU4MDIxMV9C QU5EXzJHSFouDQo+IA0KDQpObywgeW91IG5lZWQgdG8gdXNlIHVwZGF0ZWQgbWFjODAyMTEuDQoN Cj4gDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lm aS9tYWluLmMNCj4gPiBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdsd2lmaS9tYWlu LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiAuLi4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPg0KPiA+ICsjaWZkZWYgQ09ORklHX09GDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zi5oPg0KPiA+ICsjZW5kaWYNCj4gDQo+IElzbid0IG9mLmggaW50ZXJuYWxseSBndWFyZGVkPw0K PiANCg0KWWVzLiBJdCBpcyBtZW50aW9uZWQgYnkgSm9oYW5uZXMsIEkgd2lsbCByZW1vdmUgaXQu DQoNCj4gPiArDQo+ID4gKyNpbmNsdWRlICJzeXNhZHB0LmgiDQo+ID4gKyNpbmNsdWRlICJkZXYu aCINCj4gPiArI2luY2x1ZGUgImZ3ZGwuaCINCj4gPiArI2luY2x1ZGUgImZ3Y21kLmgiDQo+ID4g KyNpbmNsdWRlICJ0eC5oIg0KPiA+ICsjaW5jbHVkZSAicnguaCINCj4gPiArI2luY2x1ZGUgImlz ci5oIg0KPiA+ICsjaW5jbHVkZSAidGhlcm1hbC5oIg0KPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVH X0ZTDQo+ID4gKyNpbmNsdWRlICJkZWJ1Z2ZzLmgiDQo+ID4gKyNlbmRpZg0KPiANCj4gWW91ciBk ZWJ1Z2ZzLmggc2hvdWxkIGJlIGludGVybmFsbHkgZ3VhcmRlZC4gTW9yZSBsYXRlci4uLg0KPiAN Cg0KU2FtZSBhcyBhYm92ZS4NCg0KPiA+ICsNCj4gPiArI2RlZmluZSBNV0xfREVTQyAgICAgICAg ICJNYXJ2ZWxsIDgwMi4xMWFjIFdpcmVsZXNzIE5ldHdvcmsgRHJpdmVyIg0KPiA+ICsjZGVmaW5l IE1XTF9ERVZfTkFNRSAgICAgIk1hcnZlbGwgODAyLjExYWMgQWRhcHRlciINCj4gPiArDQo+ID4g KyNkZWZpbmUgRklMRV9QQVRIX0xFTiAgICA2NA0KPiA+ICsjZGVmaW5lIENNRF9CVUZfU0laRSAg ICAgMHg0MDAwDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXdsX3Bj aV9pZF90YmxbXSA9IHsgIHsgDQo+ID4gK1BDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmE1NSksIC5k cml2ZXJfZGF0YSA9IE1XTDg4NjQsIH0sICB7IA0KPiA+ICtQQ0lfVkRFVklDRShNQVJWRUxMLCAw eDJiMzgpLCAuZHJpdmVyX2RhdGEgPSBNV0w4ODk3LCB9LCAgeyB9LCB9Ow0KPiA+ICsNCj4gPiAr c3RhdGljIHN0cnVjdCBtd2xfY2hpcF9pbmZvIG13bF9jaGlwX3RibFtdID0geyAgW01XTDg4NjRd ID0geyANCj4gPiArLnBhcnRfbmFtZSA9ICI4OFc4ODY0IiwgIC5md19pbWFnZSA9ICJtd2x3aWZp Lzg4Vzg4NjQuYmluIiwgDQo+ID4gKy5hbnRlbm5hX3R4ID0gQU5URU5OQV9UWF80X0FVVE8sICAu YW50ZW5uYV9yeCA9DQo+IEFOVEVOTkFfUlhfNF9BVVRPLA0KPiA+ICt9LCAgW01XTDg4OTddID0g eyAgLnBhcnRfbmFtZSA9ICI4OFc4ODk3IiwgIC5md19pbWFnZSA9IA0KPiA+ICsibXdsd2lmaS84 OFc4ODk3LmJpbiIsICAuYW50ZW5uYV90eCA9IEFOVEVOTkFfVFhfMiwgIC5hbnRlbm5hX3J4ID0g DQo+ID4gK0FOVEVOTkFfUlhfMiwgIH0sIH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGllZWU4MDIxMV9jaGFubmVsIG13bF9jaGFubmVsc18yNFtdID0geyAgeyANCj4gPiArLmJh bmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0g MSwgfSwgIA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9 IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sICANCj4gPiAreyAuYmFuZCA9IE5MODAyMTFfQkFORF8y R0haLCAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LCAgDQo+ID4gK3sgLmJh bmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQyNywgLmh3X3ZhbHVlID0g NCwgfSwgIA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9 IDI0MzIsIC5od192YWx1ZSA9IDUsIH0sICANCj4gPiAreyAuYmFuZCA9IE5MODAyMTFfQkFORF8y R0haLCAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2LCB9LCAgDQo+ID4gK3sgLmJh bmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLmh3X3ZhbHVlID0g NywgfSwgIA0KPiA+ICt7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzJHSFosIC5jZW50ZXJfZnJlcSA9 IDI0NDcsIC5od192YWx1ZSA9IDgsIH0sICANCj4gPiAreyAuYmFuZCA9IE5MODAyMTFfQkFORF8y R0haLCAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5LCB9LCAgDQo+ID4gK3sgLmJh bmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQ1NywgLmh3X3ZhbHVlID0g MTAsIA0KPiA+ICt9LCAgeyAuYmFuZCA9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2ZyZXEg PSAyNDYyLCAuaHdfdmFsdWUgPSANCj4gPiArMTEsIH0sICB7IC5iYW5kID0gTkw4MDIxMV9CQU5E XzJHSFosIC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSANCj4gPiArPSAxMiwgfSwgIHsg LmJhbmQgPSBOTDgwMjExX0JBTkRfMkdIWiwgLmNlbnRlcl9mcmVxID0gMjQ3MiwgDQo+ID4gKy5o d192YWx1ZSA9IDEzLCB9LCAgeyAuYmFuZCA9IE5MODAyMTFfQkFORF8yR0haLCAuY2VudGVyX2Zy ZXEgPSANCj4gPiArMjQ4NCwgLmh3X3ZhbHVlID0gMTQsIH0sIH07DQo+ID4gKw0KPiANCj4gU28s IGludGVyZXN0aW5nIHRoaW5nLi4uIHRoZXJlJ3MgNjIgdXNlcyBvZiBOTDgwMjExX0JBTkRfeCBp biB0aGlzIA0KPiBkcml2ZXIsIGJ1dCBvbmx5IHRoZSBmZXcgc3BvdHMgSSBtZW50aW9uZWQgY2F1 c2Ugd2FybmluZ3MuIEkgbm90aWNlIGluIA0KPiB0aGUgbW9zdCByZWNlbnQgaW50ZXJuYWwgZHJv cCB5b3UndmUgY2hhbmdlZCB0aGUgYWJvdmUgdG8gDQo+IElFRUU4MDIxMV9CQU5EXzJHSFouIEkg d29uZGVyIGlmIHRoYXQgaXMgd2hhdCBzaG91bGQgYmUgZG9uZSBldmVyeXdoZXJlPw0KPiANCg0K UGxlYXNlIHVzZSB1cGRhdGVkIG1hYzgwMjExLg0KDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg aWVlZTgwMjExX3JhdGUgbXdsX3JhdGVzXzI0W10gPSB7ICB7IC5iaXRyYXRlID0gDQo+ID4gKzEw LCAuaHdfdmFsdWUgPSAyLCB9LCAgeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSA0LCB9LCAg eyANCj4gPiArLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gMTEsIH0sICB7IC5iaXRyYXRlID0g MTEwLCAuaHdfdmFsdWUgPSANCj4gPiArMjIsIH0sICB7IC5iaXRyYXRlID0gMjIwLCAuaHdfdmFs dWUgPSA0NCwgfSwgIHsgLmJpdHJhdGUgPSA2MCwgDQo+ID4gKy5od192YWx1ZSA9IDEyLCB9LCAg eyAuYml0cmF0ZSA9IDkwLCAuaHdfdmFsdWUgPSAxOCwgfSwgIHsgLmJpdHJhdGUgDQo+ID4gKz0g MTIwLCAuaHdfdmFsdWUgPSAyNCwgfSwgIHsgLmJpdHJhdGUgPSAxODAsIC5od192YWx1ZSA9IDM2 LCB9LCAgeyANCj4gPiArLmJpdHJhdGUgPSAyNDAsIC5od192YWx1ZSA9IDQ4LCB9LCAgeyAuYml0 cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gDQo+ID4gKzcyLCB9LCAgeyAuYml0cmF0ZSA9IDQ4MCwg Lmh3X3ZhbHVlID0gOTYsIH0sICB7IC5iaXRyYXRlID0gNTQwLCANCj4gPiArLmh3X3ZhbHVlID0g MTA4LCB9LCB9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hh bm5lbCBtd2xfY2hhbm5lbHNfNTBbXSA9IHsgIHsgDQo+ID4gKy5iYW5kID0gTkw4MDIxMV9CQU5E XzVHSFosIC5jZW50ZXJfZnJlcSA9IDUxODAsIC5od192YWx1ZSA9IDM2LCB9LCAgDQo+ID4gK3sg LmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTIwMCwgLmh3X3ZhbHVl ID0gNDAsIA0KPiA+ICt9LCAgeyAuYmFuZCA9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2Zy ZXEgPSA1MjIwLCAuaHdfdmFsdWUgPSANCj4gPiArNDQsIH0sICB7IC5iYW5kID0gTkw4MDIxMV9C QU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDUyNDAsIC5od192YWx1ZSANCj4gPiArPSA0OCwgfSwg IHsgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTI2MCwgDQo+ID4g Ky5od192YWx1ZSA9IDUyLCB9LCAgeyAuYmFuZCA9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVy X2ZyZXEgPSANCj4gPiArNTI4MCwgLmh3X3ZhbHVlID0gNTYsIH0sICB7IC5iYW5kID0gTkw4MDIx MV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSANCj4gPiArPSA1MzAwLCAuaHdfdmFsdWUgPSA2MCwg fSwgIHsgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgDQo+ID4gKy5jZW50ZXJfZnJlcSA9IDUz MjAsIC5od192YWx1ZSA9IDY0LCB9LCAgeyAuYmFuZCA9IA0KPiA+ICtOTDgwMjExX0JBTkRfNUdI WiwgLmNlbnRlcl9mcmVxID0gNTUwMCwgLmh3X3ZhbHVlID0gMTAwLCB9LCAgeyANCj4gPiArLmJh bmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTUyMCwgLmh3X3ZhbHVlID0g MTA0LCB9LCANCj4gPiAreyAuYmFuZCA9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEg PSA1NTQwLCAuaHdfdmFsdWUgPSAxMDgsIA0KPiA+ICt9LCB7IC5iYW5kID0gTkw4MDIxMV9CQU5E XzVHSFosIC5jZW50ZXJfZnJlcSA9IDU1NjAsIC5od192YWx1ZSA9IA0KPiA+ICsxMTIsIH0sIHsg LmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxID0gNTU4MCwgLmh3X3ZhbHVl IA0KPiA+ICs9IDExNiwgfSwgeyAuYmFuZCA9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2Zy ZXEgPSA1NjAwLCANCj4gPiArLmh3X3ZhbHVlID0gMTIwLCB9LCB7IC5iYW5kID0gTkw4MDIxMV9C QU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IA0KPiA+ICs1NjIwLCAuaHdfdmFsdWUgPSAxMjQsIH0s IHsgLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdIWiwgLmNlbnRlcl9mcmVxIA0KPiA+ICs9IDU2NDAs IC5od192YWx1ZSA9IDEyOCwgfSwgeyAuYmFuZCA9IE5MODAyMTFfQkFORF81R0haLCANCj4gPiAr LmNlbnRlcl9mcmVxID0gNTY2MCwgLmh3X3ZhbHVlID0gMTMyLCB9LCB7IC5iYW5kID0gDQo+ID4g K05MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NjgwLCAuaHdfdmFsdWUgPSAxMzYs IH0sIHsgLmJhbmQgDQo+ID4gKz0gTkw4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9IDU3 MDAsIC5od192YWx1ZSA9IDE0MCwgfSwgeyANCj4gPiArLmJhbmQgPSBOTDgwMjExX0JBTkRfNUdI WiwgLmNlbnRlcl9mcmVxID0gNTcyMCwgLmh3X3ZhbHVlID0gMTQ0LCB9LCANCj4gPiAreyAuYmFu ZCA9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1NzQ1LCAuaHdfdmFsdWUgPSAx NDksIA0KPiA+ICt9LCB7IC5iYW5kID0gTkw4MDIxMV9CQU5EXzVHSFosIC5jZW50ZXJfZnJlcSA9 IDU3NjUsIC5od192YWx1ZSA9IA0KPiA+ICsxNTMsIH0sIHsgLmJhbmQgPSBOTDgwMjExX0JBTkRf NUdIWiwgLmNlbnRlcl9mcmVxID0gNTc4NSwgLmh3X3ZhbHVlIA0KPiA+ICs9IDE1NywgfSwgeyAu YmFuZCA9IE5MODAyMTFfQkFORF81R0haLCAuY2VudGVyX2ZyZXEgPSA1ODA1LCANCj4gPiArLmh3 X3ZhbHVlID0gMTYxLCB9LCB9Ow0KPiANCj4gRGl0dG8uDQo+IA0KPiAuLi4NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIG13bF9wcm9jZXNzX29mX2R0cyhzdHJ1Y3QgbXdsX3ByaXYgKnByaXYpIHsg I2lmZGVmIA0KPiA+ICtDT05GSUdfT0YNCj4gDQo+IFNvIGEgbW9yZSBjb21tb24gaWRpb20gaW4g dGhlIGRyaXZlcnMgaXM6DQo+ICAgI2lmZGVmIENPTkZJR19PRg0KPiAgIGRlZmluZSBwcm9jZXNz IG9mX2R0cyBmdW5jdGlvbiB7fQ0KPiAgICNlbHNlDQo+ICAgZGVmaW5lIEVNUFRZIG9mX2R0cyBm dW5jdGlvbiB7fQ0KPiAgICNlbmRpZg0KPiANCj4gSSBndWVzcyBpdCdzIHRoZSBzYW1lIGVmZmVj dCBlaXRoZXIgd2F5LiBJIGRvbid0IG11Y2ggY2FyZSBhcyBsb25nIGFzDQo+IG13bF9wcm9jZXNz X29mX2R0cygpIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBndWFyZHMsIHdoaWNoIGl0IGNhbi4gQnV0 IEkgDQo+IHRob3VnaHQgSSBzaG91bGQgbWVudGlvbiBpdCBpbmNhc2UgYW55b25lIGVsc2UgY2Fy ZXMuIEFuZCB0aGlzIGlzIG5vdCANCj4gY29uc2lzdGVudCB3aXRoIGhvdyB5b3UgaGF2ZSBkb25l IHRoZSBzYW1lIHRoaW5nIGZvciBDT05GSUdfREVCVUdfRlMNCj4gDQoNCkkgd2lsbCBtb2RpZnkg aXQuDQoNCj4gPiArIHN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCj4gPiArIHUzMiBwcm9wX3ZhbHVl Ow0KPiA+ICsNCj4gPiArIHByaXYtPmR0X25vZGUgPQ0KPiA+ICsgb2ZfZmluZF9ub2RlX2J5X25h bWUocGNpX2J1c190b19PRl9ub2RlKHByaXYtPnBkZXYtPmJ1cyksDQo+ID4gKyAgICAgIm13bHdp ZmkiKTsNCj4gPiArIGlmICghcHJpdi0+ZHRfbm9kZSkNCj4gPiArIHJldHVybjsNCj4gPiArDQo+ ID4gKyAvKiBsb29rIGZvciBhbGwgbWF0Y2hpbmcgcHJvcGVydHkgbmFtZXMgKi8gDQo+ID4gKyBm b3JfZWFjaF9wcm9wZXJ0eV9vZl9ub2RlKHByaXYtPmR0X25vZGUsIHByb3ApIHsgaWYgDQo+ID4g KyAoc3RyY21wKHByb3AtPm5hbWUsICJtYXJ2ZWxsLDJnaHoiKSA9PSAwKQ0KPiA+ICsgcHJpdi0+ ZGlzYWJsZV8yZyA9IHRydWU7DQo+ID4gKyBpZiAoc3RyY21wKHByb3AtPm5hbWUsICJtYXJ2ZWxs LDVnaHoiKSA9PSAwKQ0KPiA+ICsgcHJpdi0+ZGlzYWJsZV81ZyA9IHRydWU7DQo+ID4gKyBpZiAo c3RyY21wKHByb3AtPm5hbWUsICJtYXJ2ZWxsLGNoYWlubWFzayIpID09IDApIHsgcHJvcF92YWx1 ZSA9DQo+ID4gKyBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKilwcm9wLT52YWx1ZSkpOyBpZiAocHJv cF92YWx1ZSA9PSAyKQ0KPiA+ICsgcHJpdi0+YW50ZW5uYV90eCA9IEFOVEVOTkFfVFhfMjsNCj4g PiArDQo+ID4gKyBwcm9wX3ZhbHVlID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChwcm9wLT52 YWx1ZSArIDQpKSk7IGlmIA0KPiA+ICsgKHByb3BfdmFsdWUgPT0gMikNCj4gPiArIHByaXYtPmFu dGVubmFfcnggPSBBTlRFTk5BX1JYXzI7DQo+ID4gKyB9DQo+ID4gKyB9DQo+ID4gKw0KPiA+ICsg cHJpdi0+cHdyX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShwcml2LT5kdF9ub2RlLA0KPiA+ ICsgICAgICAibWFydmVsbCxwb3dlcnRhYmxlIik7DQo+ID4gKyNlbmRpZg0KPiA+ICt9DQo+IA0K PiBBRkFJQ1QsIHRoZXJlJ3Mgbm8gZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgRFQgYmluZGluZ3Mu IFRoZSBtd2x3aWZpIA0KPiBub2RlIGFuZCB0aGUgbWFydmVsbCxwb3dlcnRhYmxlIGJvdGggbmVl ZCBmdWxsIGRvY3VtZW50YXRpb24gaW4gDQo+IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5k aW5ncy8uLi4gLg0KPiANCj4gRnJhbmtseSBJIGhhdmUgYSBmZWVsaW5nIEknbSBnb2luZyB0byBu ZWVkIHRoZXNlIERUIG5vZGVzIGFuZCBJJ2QgbGlrZSANCj4gdG8gbm90IGhhdmUgdG8gZ3Vlc3Mt YW5kLWNoZWNrIGJhc2VkIG9uIHRoZSBjb2RlLg0KPiANCg0KUG93ZXIgdGFibGUgd29uJ3QgYmUg dXNlZCBmb3IgY2hpcCB3aXRoIGRldmljZSBwb3dlciB0YWJsZSwgaXQgaXMgb25seSB1c2VkIGZv ciBvbGQgcHJvZHVjdHMgb2YgT3BlbldydC4gRm9yIHVwc3RyZWFtLCB0aGUgcmVsYXRlZCBjb2Rl IGlzIHJlbW92ZWQuDQo8bWFydmVsbCwyZ2h6PiBpcyB1c2VkIHRvIGRpc2FibGUgMmcgYmFuZC4N CjxtYXJ2ZWxsLDVnaHo+IGlzIHVzZWQgdG8gZGlzYWJsZSA1ZyBiYW5kLg0KPG1hcnZlbGwsIGNo YWlubWFzaz4gaXMgdXNlZCB0byBzcGVjaWZ5IGFudGVubmEgbnVtYmVyIChpZiBkZWZhdWx0IG51 bWJlciBpcyBzdWl0YWJsZSBmb3IgeW91LCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGlzIHBh cmFtZXRlcikuIA0KDQo+IC4uLg0KPiANCj4gPiArc3RhdGljIGludCBtd2xfd2xfaW5pdChzdHJ1 Y3QgbXdsX3ByaXYgKnByaXYpIHsgIHN0cnVjdCANCj4gPiAraWVlZTgwMjExX2h3ICpodzsgIGlu dCByYzsgIGludCBpOw0KPiA+ICsNCj4gPiArIGh3ID0gcHJpdi0+aHc7DQo+ID4gKw0KPiA+ICsg aHctPmV4dHJhX3R4X2hlYWRyb29tID0gU1lTQURQVF9NSU5fQllURVNfSEVBRFJPT007IHF1ZXVl cyA9IA0KPiA+ICsgaHctPlNZU0FEUFRfVFhfV01NX1FVRVVFUzsNCj4gPiArDQo+ID4gKyAvKiBT ZXQgcnNzaSB2YWx1ZXMgdG8gZEJtICovDQo+ID4gKyBpZWVlODAyMTFfaHdfc2V0KGh3LCBTSUdO QUxfREJNKTsNCj4gPiArIGllZWU4MDIxMV9od19zZXQoaHcsIEhBU19SQVRFX0NPTlRST0wpOw0K PiA+ICsNCj4gPiArIC8qIEFzayBtYWM4MDIxMSBub3QgdG8gdHJpZ2dlciBQUyBtb2RlDQo+ID4g KyAqIGJhc2VkIG9uIFBNIGJpdCBvZiBpbmNvbWluZyBmcmFtZXMuDQo+ID4gKyAqLw0KPiA+ICsg aWVlZTgwMjExX2h3X3NldChodywgQVBfTElOS19QUyk7DQo+ID4gKw0KPiA+ICsgaWVlZTgwMjEx X2h3X3NldChodywgU1VQUE9SVFNfUEVSX1NUQV9HVEspOyBpZWVlODAyMTFfaHdfc2V0KGh3LCAN Cj4gPiArIE1GUF9DQVBBQkxFKTsNCj4gPiArDQo+ID4gKyBody0+d2lwaHktPmZsYWdzIHw9IFdJ UEhZX0ZMQUdfSUJTU19SU047IGZsYWdzIHw9IA0KPiA+ICsgaHctPndpcGh5LT5XSVBIWV9GTEFH X0hBU19DSEFOTkVMX1NXSVRDSDsNCj4gPiArDQo+ID4gKyBody0+d2lwaHktPmZsYWdzIHw9IFdJ UEhZX0ZMQUdfU1VQUE9SVFNfVERMUzsNCj4gPiArDQo+ID4gKyBody0+dmlmX2RhdGFfc2l6ZSA9 IHNpemVvZihzdHJ1Y3QgbXdsX3ZpZik7IHN0YV9kYXRhX3NpemUgPSANCj4gPiArIGh3LT5zaXpl b2Yoc3RydWN0IG13bF9zdGEpOw0KPiA+ICsNCj4gPiArIHByaXYtPmFwX21hY2lkc19zdXBwb3J0 ZWQgPSAweDAwMDBmZmZmOyBzdGFfbWFjaWRzX3N1cHBvcnRlZCA9IA0KPiA+ICsgcHJpdi0+MHgw MDAxMDAwMDsNCj4gDQo+IEhvdyBhYm91dCB3ZSBkb2N1bWVudCB3aGF0IHRoZXNlIG1hZ2ljIG51 bWJlcnMgYXJlPyBBIG5pY2UgbmFtZWQgDQo+IGNvbnN0YW50IGF0IGxlYXN0IHdvdWxkIGJlIG5p Y2UuDQoNClRoZXkgYXJlIHVzZWQgdG8ga2VlcCBzdGF0dXMgb2YgdXNlZCBBUCBhbmQgU1RBLg0K DQo+IA0KPiA+ICtzdGF0aWMgaW50IG13bF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29u c3Qgc3RydWN0IA0KPiA+ICtwY2lfZGV2aWNlX2lkDQo+ID4gKyppZCkgew0KPiAuLi4NCj4gPiAr IHdpcGh5X2luZm8ocHJpdi0+aHctPndpcGh5LCAiJXMgVFggYW50ZW5uYXMsICVzIFJYIGFudGVu bmFzXG4iLA0KPiA+ICsgICAocHJpdi0+YW50ZW5uYV90eCA9PSBBTlRFTk5BX1RYXzRfQVVUTykg PyAiNCIgOiAiMiIsDQo+ID4gKyAgIChwcml2LT5hbnRlbm5hX3J4ID09IEFOVEVOTkFfUlhfNF9B VVRPKSA/ICI0IiA6ICIyIik7DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX0RFQlVHX0ZTDQo+ ID4gKyBtd2xfZGVidWdmc19pbml0KGh3KTsNCj4gDQo+IFRoZSBndWFyZHMgc2hvdWxkIGJlIGlu dGVybmFsIHRvIG13bF9kZWJ1Z2ZzX2luaXQoKSBzbyB3ZSBkb24ndCBoYXZlIA0KPiB0byBndWFy ZCBpdCB3aGVuIHdlIGNhbGwgaXQuIE11Y2ggbGlrZSBtd2xfcHJvY2Vzc19vZl9kdHMoKSBpcyBh YmxlIHRvIA0KPiBiZSBjYWxsZWQgYW5kIGNvbXBpbGVzIG91dCBpZiBDT05GSUdfT0YgaXNuJ3Qg ZGVmaW5lZCwgDQo+IG13bF9kZWJ1Z2ZzX2luaXQoKSBzaG91bGQgaGF2ZSB0aGUgZ3VhcmRzIGlu dGVybmFsIHRvIA0KPiBkZWJ1Z2ZzLmgvZGVidWdmcy5jIGFuZCB3ZSBzaG91bGRuJ3QgbmVlZCB0 byB3b3JyeSBhYm91dCBpdCB3aGVuIHdlIGNhbGwgaXQuDQo+IA0KDQpJIHdpbGwgbW9kaWZ5IGl0 Lg0KDQo+ID4gK3N0YXRpYyB2b2lkIG13bF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsg IHN0cnVjdCBpZWVlODAyMTFfaHcgDQo+ID4gKypodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsg IHN0cnVjdCBtd2xfcHJpdiAqcHJpdjsNCj4gPiArDQo+ID4gKyBpZiAoIWh3KQ0KPiA+ICsgcmV0 dXJuOw0KPiA+ICsNCj4gPiArIHByaXYgPSBody0+cHJpdjsNCj4gPiArDQo+ID4gKyBtd2xfd2xf ZGVpbml0KHByaXYpOw0KPiA+ICsgcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOw0KPiA+ICsg aWVlZTgwMjExX2ZyZWVfaHcoaHcpOw0KPiA+ICsgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOw0K PiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19ERUJVR19GUw0KPiA+ICsgbXdsX2RlYnVnZnNfcmVt b3ZlKGh3KTsNCj4gPiArI2VuZGlmDQo+IA0KPiBBcyBwcmV2aW91c2x5IGNvbW1lbnRlZCBvbi4N Cj4gDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2x3aWZpL3RoZXJt YWwuYw0KPiAuLi4NCj4gPiArc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwg MDQ0NCwNCj4gbXdsX3RoZXJtYWxfc2hvd190ZW1wLA0KPiA+ICsgIE5VTEwsIDApOw0KPiA+ICsN Cj4gDQo+IFNob3VsZCB1c2UgU19JUlVHTyBpbnN0ZWFkIG9mIG51bWVyaWMgMDQ0NC4NCj4gDQo+ IE9LLCB0aGF0J3MgaXQgZm9yIHNwZWNpZmljcy4gSSBrbm93IGEgbnVtYmVyIG9mIHRoZW0gYXJl IGp1c3Qgbml0cy4NCj4gDQoNCllvdSBuZWVkIHRvIG1vZGlmeSB0aGlzIHdheSB0byBwYXNzIGNo ZWNrcGF0Y2gucGwuDQoNCj4gQSBmZXcgZ2VuZXJhbCBjb21tZW50czoNCj4gDQo+ICogSSBzYXcg aXQgaXQgcXVpdGUgYSBiaXQsIGJ1dCBkaWRuJ3QgY29tbWVudCBvbiBpdCBldmVyeSB0aW1lOiAN Cj4gdGhlcmUncyBtYW55IHBsYWNlcyB3aGVyZSBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGNhbiBi ZSBjb21iaW5lZCB3aXRoIA0KPiBpdHMgaW5pdGlhbCBhc3NpZ25tZW50Lg0KPiANCj4gKiBJIGhh cHBlbiB0byBjb25jdXIgd2l0aCBKb2hhbm5lcycgY29tbWVudHMgcmVnYXJkaW5nIHRoZSBJRXMg YW5kIA0KPiB5b3VyIGJlYWNvbiBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgaXNz dWUsIHdpdGggcG90ZW50aWFsIA0KPiBmb3IgYmlnIGJ1Z3MgZG93biB0aGUgcm9hZC4gQXQgdGhl IHZlcnkgbGVhc3QsIGl0J3MgYSBtYWludGVuYW5jZSBoZWFkYWNoZS4NCj4gDQo+IEZyb20gbXkg cGVyc3BlY3RpdmUsIEknZCBjb25zaWRlciBpdCBhIGZpcm13YXJlIGJ1ZyBpZiB0aGVyZSdzIG5v IHdheSBhcm91bmQgaXQuDQo+IElzIHRoZSBmaXJtd2FyZSBnb2luZyB0byBzdHJpcCB0aGUgSUVz IHRoYXQgaG9zdGFwZCBoYXBwZW5zIHRvIGFkZCB0byANCj4gdGhlIGJlYWNvbnM/IElzIHRoZXJl IHNvbWUgInBhc3N0aHJvdWdoIiBvciBzb21lIG90aGVyIHdheSB0aGF0IGl0IGNhbiANCj4gYmUg cmVjb25jaWxlZD8NCj4gDQo+IEkgc3Ryb25nbHkgc3VzcGVjdCB0aGVyZSdzIGJldHRlciB3YXlz IHRvIGhhbmRsZSBpdCwgZXZlbiB3aXRob3V0IA0KPiBjaGFuZ2luZyB0aGUgZmlybXdhcmUsIGJ1 dCBJIGhhdmVuJ3QgeWV0IHRha2VuIGEgbG9vayB0byBzZWUgaWYgdGhlcmUgaXMuDQo+IA0KPiBJ biBhbnkgY2FzZSwgd2hpbGUgdGhlcmUncyBzdHVmZiBJIHdvdWxkbid0IG1pbmQgc2VlaW5nIGNo YW5nZWQsIEkgDQo+IHJhdGhlciBzZWUgaXQgZ28gaW4gc29vbmVyIHJhdGhlciB0aGFuIGxhdGVy IHNvIEkgYW5kIG90aGVycyBjYW4gDQo+IGNvbnRyaWJ1dGUgb24gdG9wIG9mIGl0LCBpbnN0ZWFk IG9mIHdhaXRpbmcgdG8gc2VlIGl0ICJwZXJmZWN0IiBmaXJzdC4NCg0KLSBUaGUgb2JqZWN0aXZl IGlzIHRvIHVzZSB0aGUgc2FtZSBwcm9kdWN0aW9uIGZpcm13YXJlIGJpbmFyeSBmb3IgYm90aCB0 aGUgb3BlbiBzb3VyY2UgYW5kIHByb3ByaWV0YXJ5IGRyaXZlci4gU2FtZSBpbnRlcmZhY2UgaXMg Y3VycmVudGx5IHVzZWQgYnkgcHJvcHJpZXRhcnkgZHJpdmVyIGZvciBoaXN0b3JpY2FsbHkgcmVh c29uLCB3aGlsZSB0aGUgb3BlbiBzb3VyY2UgSEFMIGlzIGFkYXB0aW5nIHRvIGl0IGZvciB0aGUg ZXhpc3Rpbmcgc2hpcHBpbmcgcHJvZHVjdC4NCi0gV2Ugd2lsbCBtYWtlIGNoYW5nZXMgYW5kIGNs ZWFuIHRoaW5ncyB1cCBpbiBmdXR1cmUuIEkgd2lsbCBzcGVuZCBlZmZvcnQgdG8gY29udGludWUg aXRzIG1haW50ZW5hbmNlIGFuZCBjbGVhbi11cC4NCg0KPiANCj4gUGxlYXNlIGFkZCBteSByZXZp ZXdlZC1ieS4gIElmIHdlJ3JlIHdhaXRpbmcgb24gYSB2MTAsIGRvIHlvdSBoYXZlIGFuIEVUQT8N Cg0KSXQgbG9va3MgbGlrZSB0aGVyZSBpcyBubyBtb3JlIGNvbW1lbnRzIGZvciBwYXRjaCB2OSwg SSB3aWxsIHNlbmQgb3V0IHBhdGNoIHYxMCBlbmQgb2YgdGhpcyBtb250aC4NCg0KVGhhbmtzLA0K RGF2aWQNCg0KPiANCj4gVGhhbmtzLA0KPiAtIFN0ZXZlDQo=