From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailout1.samsung.com ([203.254.224.24]) by bombadil.infradead.org with esmtp (Exim 4.68 #1 (Red Hat Linux)) id 1Kgf8a-0007yZ-KR for linux-mtd@lists.infradead.org; Fri, 19 Sep 2008 12:31:10 +0000 Received: from ep_ms13_bk (mailout1.samsung.com [203.254.224.24]) by mailout1.samsung.com (iPlanet Messaging Server 5.2 Patch 2 (built Jul 14 2004)) with ESMTP id <0K7G00L4D03O7I@mailout1.samsung.com> for linux-mtd@lists.infradead.org; Fri, 19 Sep 2008 21:31:00 +0900 (KST) Received: from ep_spt01 (ms13.samsung.com [203.254.225.109]) by ms13.samsung.com (iPlanet Messaging Server 5.2 Patch 2 (built Jul 14 2004)) with ESMTP id <0K7G00LP303OMY@ms13.samsung.com> for linux-mtd@lists.infradead.org; Fri, 19 Sep 2008 21:31:00 +0900 (KST) Content-return: prohibited Date: Fri, 19 Sep 2008 12:31:00 +0000 (GMT) From: AYYANARPONNUSAMY GANGHEYAMOORTHY Subject: [ANNOUNCE] [PATCH] [MTD] Flex-OneNAND MTD Driver available. To: linux-mtd@lists.infradead.org Message-id: <19198934.52871221827459790.JavaMail.weblogic@epml16> MIME-version: 1.0 MIME-version: 1.0 Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: base64 Cc: Kyungmin Park Reply-To: moorthy.apg@samsung.com List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , SGkgQWxsLA0KV2UgYXJlIGhhcHB5IHRvIHJlbGVhc2UgRmxleC1PbmVOQU5EIE1URCB0byBvcGVu IHNvdXJjZSBjb21tdW5pdHkuDQoNCkJyaWVmIGRlc2NyaXB0aW9uIG9mIEZsZXgtT25lTkFORCA6 DQpTYW1zdW5nIEZsZXgtT25lTkFORCBpcyBhIGhpZ2hseSByZWxpYWJsZSBlbWJlZGRlZCBtZW1v cnkgdGFyZ2V0ZWQNCmZvciBib3RoIGNvbnN1bWVyIGVsZWN0cm9uaWNzLCBhbmQgbmV4dCBnZW5l cmF0aW9uIG1vYmlsZSBwaG9uZSBtYXJrZXQuDQpXaXRoIFNhbXN1bmcncyBhY2N1bXVsYXRlZCBO QU5EIGZsYXNoIHRlY2hub2xvZ2llcyBvdmVyIHRoZSBsYXN0IGRlY2FkZSwNClNhbXN1bmcgZGVz aWducyBhbiBpZGVhbCBzaW5nbGUgbWVtb3J5IGNoaXAgYmFzZWQgb24gTkFORCBhcmNoaXRlY3R1 cmUNCmludGVncmF0aW5nIFNSQU0gYnVmZmVycyBhbmQgbG9naWMgaW50ZXJmYWNlLiBTYW1zdW5n IEZsZXgtT25lTkFORCB0YWtlcw0KYm90aCBhZHZhbnRhZ2VzIGZyb20gaGlnaC1zcGVlZCBkYXRh IHJlYWQgZnVuY3Rpb24gb2YgTk9SIGZsYXNoIGFuZCB0aGUNCmFkdmFuY2VkIGRhdGEgc3RvcmFn ZSBmdW5jdGlvbiBvZiBOQU5EIGZsYXNoLg0KDQpGbGV4LU9uZU5BTkQgY29tYmluZXMgU0xDIGFu ZCBNTEMgdGVjaG5vbG9naWVzIGludG8gYSBzaW5nbGUgZGV2aWNlLg0KU0xDIGFyZWEgcHJvdmlk ZXMgaW5jcmVhc2VkIHJlbGlhYmlsaXR5IGFuZCBzcGVlZCwgc3VpdGFibGUgZm9yIHN0b3JpbmcN CmNvZGUgYW5kIGRhdGEsIHN1Y2ggYXMgYm9vdGxvYWRlciwga2VybmVsIGFuZCByb290IGZpbGUg c3lzdGVtLg0KTUxDIGFyZWEgcHJvdmlkZXMgaGlnaCBkZW5zaXR5IGFuZCBpcyBiZXN0IHVzZWQg Zm9yIHN0b3JpbmcgdXNlciBkYXRhLg0KVXNlcnMgY2FuIGNvbmZpZ3VyZSB0aGUgc2l6ZSBvZiBT TEMgYW5kIE1MQyByZWdpb25zLg0KDQpSZWZlciAoaHR0cDovL3d3dy5zYW1zdW5nLmNvbS9nbG9i YWwvYnVzaW5lc3Mvc2VtaWNvbmR1Y3Rvci9wcm9kdWN0cy9mdXNpb25tZW1vcnkvUHJvZHVjdHNf RmxleE9uZU5BTkQuaHRtbCkNCg0KRXhpc3RpbmcgTVREIGRvZXMgbm90IGFsbG93IGZvciBlcmFz ZSByZWdpb25zIHdpdGggb2RkIG51bWJlcg0Kb2YgYmxvY2tzKHBhcnRpdGlvbnMgdHVybiByZWFk IG9ubHkpLiBTbyBpdCBpcyBiZXR0ZXIgdG8gc2V0DQp0aGUgZGllIGJvdW5kYXJ5IHRvIG9kZCB2 YWx1ZXMuIERpZSBib3VuZGFyeSBzZXR0aW5nIGNhbiBiZQ0KZG9uZSBpbiBpbmNsdWRlL210ZC9v bmVuYW5kLmgNCg0KQSBwYXJ0aXRpb24sIHRoZW9yZXRpY2FsbHksICBjYW4gc3BhbiBhY3Jvc3Mg U0xDIGFuZCBNTEMgcmVnaW9ucy4NClRoZXJlIGlzIG5vIGFwcGFyZW50IGFkdmFudGFnZSB3aXRo IGl0IGhvd2V2ZXIuIEFsc28sIHN1Y2ggYQ0KcGFydGl0aW9uIHdpbGwgaGF2ZSBNTEMgZXJhc2Ug c2l6ZSwgd2l0aCB0d28gU0xDIGJsb2NrcyBlcmFzZWQgYXQNCmEgdGltZSBkdXJpbmcgb3BlcmF0 aW9uLiBJZiB0aGUgc2Vjb25kIGJsb2NrIGdvZXMgYmFkLCB3ZSBlbmQgdXANCm1hcmtpbmcgdGhl IGZpcnN0IGJsb2NrIGFzIGJhZC4gU28sIGFnYWluLCBpdCBpcyBub3QgYWR2aXNhYmxlDQp0byBj cmVhdGUgcGFydGl0aW9ucyBhY3Jvc3MgZXJhc2UgcmVnaW9ucy4NCg0KQXBhcnQgZnJvbSB0aGlz IHBhdGNoLCBzb21lIG1vcmUgcG9zdHMgZm9yIEZsZXgtT25lTkFORCBzdXBwb3J0IGFyZQ0KMS4g SkZGUzIJW1BBVENIIDEvMV0gW01URF0gW0pGRlMyXSBNTEMgTkFORCBzdXBwb3J0DQoJW1BBVENI IDEvMl0gW01URF0gW0pGRlMyXSBNTEMgTkFORCBzdXBwb3J0DQoNCjIuIE1URC1VVElMUwlbUEFU Q0hdIFtNVEQtVVRJTFNdIEFkZCBzdXBwb3J0IGZvciA0S0IgcGFnZSBmbGFzaCBkZXZpY2VzIA0K DQozLiBVQk9PVAlbVS1Cb290XSBbUEFUQ0hdIEZsZXhPbmVOQU5EIHN1cHBvcnQgaW4gVS1Cb290 DQogICAgICAgICAgICAgICAoUG9zdGVkIGluIGh0dHA6Ly9saXN0cy5kZW54LmRlL21haWxtYW4v bGlzdGluZm8vdS1ib290KQ0KDQpTaWduZWQtb2ZmLWJ5OiBWaXNoYWsgRyA8dmlzaGFrLmdAc2Ft c3VuZy5jb20+DQpTaWduZWQtb2ZmLWJ5OiBSb2hpdCBIYWdhcmd1bmRnaSA8aC5yb2hpdEBzYW1z dW5nLmNvbT4NCi0tLQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9i YXNlLmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jDQppbmRleCA5MjZjZjNh Li40MmMxOWNiIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2Uu Yw0KKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYw0KQEAgLTksNiArOSwx MCBAQA0KICAqCWF1dG8tcGxhY2VtZW50IHN1cHBvcnQsIHJlYWQtd2hpbGUgbG9hZCBzdXBwb3J0 LCB2YXJpb3VzIGZpeGVzDQogICoJQ29weXJpZ2h0IChDKSBOb2tpYSBDb3Jwb3JhdGlvbiwgMjAw Nw0KICAqDQorICoJVmlzaGFrIEcgPHZpc2hhay5nQHNhbXN1bmcuY29tPiwgUm9oaXQgSGFnYXJn dW5kZ2kgPGgucm9oaXRAc2Ftc3VuZy5jb20+DQorICoJRmxleC1PbmVOQU5EIHN1cHBvcnQNCisg KglDb3B5cmlnaHQgKEMpIFNhbXN1bmcgRWxlY3Ryb25pY3MsIDIwMDgNCisgKg0KICAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5DQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMNCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4NCkBAIC0yNyw2ICszMSwzNyBAQA0KIA0KICNpbmNsdWRlIDxhc20vaW8uaD4N CiANCitzdGF0aWMgaW50IGJvdW5kYXJ5W10gPSB7DQorCUZMRVhPTkVOQU5EX0RJRTBfQk9VTkRB UlksDQorCUZMRVhPTkVOQU5EX0RJRTFfQk9VTkRBUlksDQorfTsNCisNCitzdGF0aWMgaW50IGxv Y2tbXSA9IHsNCisJRkxFWE9ORU5BTkRfRElFMF9JU0xPQ0tFRCwNCisJRkxFWE9ORU5BTkRfRElF MV9JU0xPQ0tFRCwNCit9Ow0KKw0KKy8qKg0KKyAqICBvbmVuYW5kX29vYl8xMjggLSBvb2IgaW5m byBmb3IgRmxleC1PbmVuYW5kIHdpdGggNEtCIHBhZ2UNCisgKi8NCitzdGF0aWMgc3RydWN0IG5h bmRfZWNjbGF5b3V0IG9uZW5hbmRfb29iXzEyOCA9IHsNCisJLmVjY2J5dGVzCT0gODAsDQorCS5l Y2Nwb3MJCT0gew0KKwkJNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwNCisJCTIy LCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLA0KKwkJMzgsIDM5LCA0MCwgNDEs IDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsDQorCQk1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwg NjEsIDYyLCA2MywNCisJCTcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LA0K KwkJODYsIDg3LCA4OCwgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsDQorCQkxMDIsIDEwMywg MTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsDQorCQkxMTgsIDExOSwgMTIw LCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcNCisJCX0sDQorCS5vb2JmcmVlCT0g ew0KKwkJezIsIDR9LCB7MTYsIDZ9LCB7MzIsIDZ9LCB7NDgsIDZ9LA0KKwkJezY0LCA2fSwgezgw LCA2fSwgezk2LCA2fSwgezExMiwgNn0NCisJfQ0KK307DQorDQogLyoqDQogICogb25lbmFuZF9v b2JfNjQgLSBvb2IgaW5mbyBmb3IgbGFyZ2UgKDJLQikgcGFnZQ0KICAqLw0KQEAgLTY1LDYgKzEw MCwxNCBAQA0KIAkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm LAkvKiA0OCAqLw0KIAkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAw eGZmLA0KIAkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAkv KiA2NCAqLw0KKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZm LA0KKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAkvKiA4 MCAqLw0KKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLA0K KwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAkvKiA5NiAq Lw0KKwkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLA0KKwkw eGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAkvKiAxMTIgKi8N CisJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwNCisJMHhm ZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwJLyogMTI4ICovDQog fTsNCiANCiAvKioNCkBAIC0xNzEsNiArMjE0LDQ3IEBADQogfQ0KIA0KIC8qKg0KKyAqIG9uZW5h bmRfZ2V0X2Jsb2NrCS0gRm9yIGdpdmVuIGFkZHJlc3MgcmV0dXJuIGJsb2NrIG51bWJlciBhbmQg aWYgc2xjDQorICogQHBhcmFtIG10ZAkJLSBNVEQgZGV2aWNlIHN0cnVjdHVyZQ0KKyAqIEBwYXJh bSBhZGRyCQktIEFkZHJlc3MgZm9yIHdoaWNoIGJsb2NrIG51bWJlciBpcyBuZWVkZWQNCisgKiBA cmV0dXJuIGlzYmxrc2xjCS0gQmxvY2sgaXMgYW4gU0xDIGJsb2NrIG9yIG5vdA0KKyAqLw0KK3Vu c2lnbmVkIG9uZW5hbmRfZ2V0X2Jsb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgYWRk ciwNCisJCQkgICB1bnNpZ25lZCAqaXNibGtzbGMpDQorew0KKwlzdHJ1Y3Qgb25lbmFuZF9jaGlw ICp0aGlzID0gbXRkLT5wcml2Ow0KKwl1bnNpZ25lZCBib3VuZGFyeSwgYmxrLCBkaWUgPSAwOw0K Kw0KKwlpZiAoIUZMRVhPTkVOQU5EKHRoaXMpKQ0KKwkJcmV0dXJuIGFkZHIgPj4gdGhpcy0+ZXJh c2Vfc2hpZnQ7DQorDQorCWlmICh0aGlzLT5jaGlwc2l6ZSA9PSAwKSB7DQorCQkvKiBXZSBoYXZl IGJlZW4gY2FsbGVkIGJ5IGZsZXhvbmVuYW5kX2dldF9ib3VuZGFyeS4NCisJCSAqIGFkZHIgY29u dGFpbnMgZGllIGluZGV4IGluIHRoaXMgY2FzZS4NCisJCSAqLw0KKwkJYmxrID0gYWRkciAqIHRo aXMtPmRlbnNpdHlfbWFzazsNCisJCXJldHVybiBibGs7DQorCX0NCisNCisJaWYgKGFkZHIgPj0g dGhpcy0+ZGllc2l6ZVswXSkgew0KKwkJZGllID0gMTsNCisJCWFkZHIgLT0gdGhpcy0+ZGllc2l6 ZVswXTsNCisJfQ0KKw0KKwlib3VuZGFyeSA9IHRoaXMtPmJvdW5kYXJ5W2RpZV07DQorDQorCWJs ayA9IGFkZHIgPj4gKHRoaXMtPmVyYXNlX3NoaWZ0IC0gMSk7DQorCWlmIChibGsgPiBib3VuZGFy eSkNCisJCWJsayA9IChibGsgKyBib3VuZGFyeSArIDEpID4+IDE7DQorDQorCWlmIChpc2Jsa3Ns YykNCisJCSppc2Jsa3NsYyA9IChibGsgPD0gYm91bmRhcnkpID8gMSA6IDA7DQorDQorCWJsayAr PSBkaWUgPyB0aGlzLT5kZW5zaXR5X21hc2sgOiAwOw0KKwlyZXR1cm4gYmxrOw0KK30NCisNCisv KioNCiAgKiBvbmVuYW5kX2dldF9kZW5zaXR5IC0gW0RFRkFVTFRdIEdldCBPbmVOQU5EIGRlbnNp dHkNCiAgKiBAcGFyYW0gZGV2X2lkCU9uZU5BTkQgZGV2aWNlIElEDQogICoNCkBAIC0xOTYsNiAr MjgwLDcgQEANCiB7DQogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7DQog CWludCB2YWx1ZSwgYmxvY2ssIHBhZ2U7DQorCXVuc2lnbmVkIHNsYyA9IDA7DQogDQogCS8qIEFk ZHJlc3MgdHJhbnNsYXRpb24gKi8NCiAJc3dpdGNoIChjbWQpIHsNCkBAIC0yMDcsMTUgKzI5Miwx NiBAQA0KIAkJcGFnZSA9IC0xOw0KIAkJYnJlYWs7DQogDQorCWNhc2UgRkxFWE9ORU5BTkRfQ01E X1BJX0FDQ0VTUzoNCiAJY2FzZSBPTkVOQU5EX0NNRF9FUkFTRToNCiAJY2FzZSBPTkVOQU5EX0NN RF9CVUZGRVJSQU06DQogCWNhc2UgT05FTkFORF9DTURfT1RQX0FDQ0VTUzoNCi0JCWJsb2NrID0g KGludCkgKGFkZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpOw0KKwkJYmxvY2sgPSBvbmVuYW5kX2dl dF9ibG9jayhtdGQsIGFkZHIsIE5VTEwpOw0KIAkJcGFnZSA9IC0xOw0KIAkJYnJlYWs7DQogDQog CWRlZmF1bHQ6DQotCQlibG9jayA9IChpbnQpIChhZGRyID4+IHRoaXMtPmVyYXNlX3NoaWZ0KTsN CisJCWJsb2NrID0gb25lbmFuZF9nZXRfYmxvY2sobXRkLCBhZGRyLCAmc2xjKTsNCiAJCXBhZ2Ug PSAoaW50KSAoYWRkciA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsNCiANCiAJCWlmIChPTkVOQU5EX0lT XzJQTEFORSh0aGlzKSkgew0KQEAgLTIyNyw2ICszMTMsOCBAQA0KIAkJCXBhZ2UgPj49IDE7DQog CQl9DQogCQlwYWdlICY9IHRoaXMtPnBhZ2VfbWFzazsNCisJCWlmIChGTEVYT05FTkFORCh0aGlz KSAmJiBzbGMpDQorCQkJcGFnZSAmPSAodGhpcy0+cGFnZV9tYXNrID4+IDEpOw0KIAkJYnJlYWs7 DQogCX0NCiANCkBAIC0yMzYsNyArMzI0LDcgQEANCiAJCXZhbHVlID0gb25lbmFuZF9idWZmZXJy YW1fYWRkcmVzcyh0aGlzLCBibG9jayk7DQogCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlz LT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOw0KIA0KLQkJaWYgKE9ORU5BTkRf SVNfMlBMQU5FKHRoaXMpKQ0KKwkJaWYgKE9ORU5BTkRfSVNfTUxDKHRoaXMpIHx8IE9ORU5BTkRf SVNfMlBMQU5FKHRoaXMpKQ0KIAkJCS8qIEl0IGlzIGFsd2F5cyBCdWZmZXJSQU0wICovDQogCQkJ T05FTkFORF9TRVRfQlVGRkVSUkFNMCh0aGlzKTsNCiAJCWVsc2UNCkBAIC0yNTgsMTMgKzM0Niwx OCBAQA0KIA0KIAlpZiAocGFnZSAhPSAtMSkgew0KIAkJLyogTm93IHdlIHVzZSBwYWdlIHNpemUg b3BlcmF0aW9uICovDQotCQlpbnQgc2VjdG9ycyA9IDQsIGNvdW50ID0gNDsNCisJCWludCBzZWN0 b3JzID0gMCwgY291bnQgPSAwOw0KIAkJaW50IGRhdGFyYW07DQogDQogCQlzd2l0Y2ggKGNtZCkg ew0KKwkJY2FzZSBGTEVYT05FTkFORF9DTURfUkVDT1ZFUl9MU0I6DQogCQljYXNlIE9ORU5BTkRf Q01EX1JFQUQ6DQogCQljYXNlIE9ORU5BTkRfQ01EX1JFQURPT0I6DQotCQkJZGF0YXJhbSA9IE9O RU5BTkRfU0VUX05FWFRfQlVGRkVSUkFNKHRoaXMpOw0KKwkJCWlmIChPTkVOQU5EX0lTX01MQyh0 aGlzKSkNCisJCQkJLyogSXQgaXMgYWx3YXlzIEJ1ZmZlclJBTTAgKi8NCisJCQkJZGF0YXJhbSA9 IE9ORU5BTkRfU0VUX0JVRkZFUlJBTTAodGhpcyk7DQorCQkJZWxzZQ0KKwkJCQlkYXRhcmFtID0g T05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7DQogCQkJYnJlYWs7DQogDQogCQlkZWZh dWx0Og0KQEAgLTI5Myw2ICszODYsMzEgQEANCiB9DQogDQogLyoqDQorICogb25lbmFuZF9yZWFk X2VjYyAtIHJldHVybiBlY2Mgc3RhdHVzDQorICogQHBhcmFtIG10ZCAJCU1URCBkZXZpY2Ugc3Ry dWN0dXJlDQorICovDQoraW50IG9uZW5hbmRfcmVhZF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQp DQorew0KKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2Ow0KKwlpbnQgZWNj WzRdOw0KKwlpbnQgaSwgcmVzdWx0ID0gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ew0KKwkJZWNjW2ldID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKw0KKwkJCQkJIChPTkVO QU5EX1JFR19FQ0NfU1RBVFVTICsgaSkpOw0KKwkJaWYgKCFGTEVYT05FTkFORCh0aGlzKSkNCisJ CQlyZXR1cm4gZWNjW2ldOw0KKwkJaWYgKGVjY1tpXSAmIEZMRVhPTkVOQU5EX1VOQ09SUkVDVEFC TEVfRVJST1IpIHsNCisJCQlyZXN1bHQgPSBPTkVOQU5EX0VDQ18yQklUX0FMTDsNCisJCQlicmVh azsNCisJCX0gZWxzZSBpZiAoZWNjW2ldKQ0KKwkJCXJlc3VsdCA9IE9ORU5BTkRfRUNDXzFCSVRf QUxMOw0KKwl9DQorDQorCXJldHVybiByZXN1bHQ7DQorfQ0KKw0KKy8qKg0KICAqIG9uZW5hbmRf d2FpdCAtIFtERUZBVUxUXSB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGRvbmUNCiAgKiBAcGFy YW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQ0KICAqIEBwYXJhbSBzdGF0ZQkJc3RhdGUgdG8g c2VsZWN0IHRoZSBtYXguIHRpbWVvdXQgdmFsdWUNCkBAIC0zMzEsNyArNDQ5LDcgQEANCiAJICog cG93ZXIgb2ZmIHJlY292ZXJ5IChQT1IpIHRlc3QsIGl0IHNob3VsZCByZWFkIEVDQyBzdGF0dXMg Zmlyc3QNCiAJICovDQogCWlmIChpbnRlcnJ1cHQgJiBPTkVOQU5EX0lOVF9SRUFEKSB7DQotCQlp bnQgZWNjID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19FQ0NfU1RB VFVTKTsNCisJCWludCBlY2MgPSBvbmVuYW5kX3JlYWRfZWNjKG10ZCk7DQogCQlpZiAoZWNjKSB7 DQogCQkJaWYgKGVjYyAmIE9ORU5BTkRfRUNDXzJCSVRfQUxMKSB7DQogCQkJCXByaW50ayhLRVJO X0VSUiAib25lbmFuZF93YWl0OiBFQ0MgZXJyb3IgPSAweCUwNHhcbiIsIGVjYyk7DQpAQCAtNjU2 LDcgKzc3NCw3IEBADQogDQogCWlmIChmb3VuZCAmJiBPTkVOQU5EX0lTX0REUCh0aGlzKSkgew0K IAkJLyogU2VsZWN0IERhdGFSQU0gZm9yIEREUCAqLw0KLQkJaW50IGJsb2NrID0gKGludCkgKGFk ZHIgPj4gdGhpcy0+ZXJhc2Vfc2hpZnQpOw0KKwkJaW50IGJsb2NrID0gb25lbmFuZF9nZXRfYmxv Y2sobXRkLCBhZGRyLCBOVUxMKTsNCiAJCWludCB2YWx1ZSA9IG9uZW5hbmRfYnVmZmVycmFtX2Fk ZHJlc3ModGhpcywgYmxvY2spOw0KIAkJdGhpcy0+d3JpdGVfd29yZCh2YWx1ZSwgdGhpcy0+YmFz ZSArIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1MyKTsNCiAJfQ0KQEAgLTgxNiw2ICs5MzQsNDMg QEANCiB9DQogDQogLyoqDQorICogb25lbmFuZF9yZWNvdmVyX2xzYiAtIFtGbGV4LU9uZU5BTkRd IFJlY292ZXIgTFNCIHBhZ2UgZGF0YQ0KKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0 dXJlDQorICogQHBhcmFtIGFkZHIJCWFkZHJlc3MgdG8gcmVjb3Zlcg0KKyAqIEBwYXJhbSBzdGF0 dXMJcmV0dXJuIHZhbHVlIGZyb20gb25lbmFuZF93YWl0IC8gb25lbmFuZF9iYnRfd2FpdA0KKyAq DQorICogSXNzdWUgcmVjb3ZlcnkgY29tbWFuZCB3aGVuIHJlYWQgZmFpbHMgb24gTUxDIGFyZWEu DQorICovDQorc3RhdGljIGludCBvbmVuYW5kX3JlY292ZXJfbHNiKHN0cnVjdCBtdGRfaW5mbyAq bXRkLCBsb2ZmX3QgYWRkciwgaW50IHN0YXR1cykNCit7DQorCXN0cnVjdCBvbmVuYW5kX2NoaXAg KnRoaXMgPSBtdGQtPnByaXY7DQorCXVuc2lnbmVkIHNsYyA9IDA7DQorDQorCS8qIFJlY292ZXJ5 IGlzIG9ubHkgZm9yIEZsZXgtT25lTkFORCAqLw0KKwlpZiAoIUZMRVhPTkVOQU5EKHRoaXMpKQ0K KwkJcmV0dXJuIHN0YXR1czsNCisNCisJLyogY2hlY2sgaWYgd2UgZmFpbGVkIGR1ZSB0byB1bmNv cnJlY3RhYmxlIGVycm9yICovDQorCWlmIChzdGF0dXMgIT0gKC1FQkFETVNHKSAmJiBzdGF0dXMg IT0gKE9ORU5BTkRfQkJUX1JFQURfRUNDX0VSUk9SKSkNCisJCXJldHVybiBzdGF0dXM7DQorDQor CS8qIGNoZWNrIGlmIGFkZHJlc3MgbGllcyBpbiBNTEMgcmVnaW9uICovDQorCW9uZW5hbmRfZ2V0 X2Jsb2NrKG10ZCwgYWRkciwgJnNsYyk7DQorCWlmIChzbGMpDQorCQlyZXR1cm4gc3RhdHVzOw0K Kw0KKwkvKiBXZSBhcmUgYXR0ZW1wdGluZyB0byByZXJlYWQsIHNvIGRlY3JlbWVudCBzdGF0cy5m YWlsZWQNCisJICogd2hpY2ggd2FzIGluY3JlbWVudGVkIGJ5IG9uZW5hbmRfd2FpdCBkdWUgdG8g cmVhZCBmYWlsdXJlDQorCSAqLw0KKwlwcmludGsoS0VSTl9ERUJVRyAiQXR0ZW1wdGluZyB0byBy ZWNvdmVyIGZyb20gdW5jb3JyZWN0YWJsZSByZWFkXG4iKTsNCisJbXRkLT5lY2Nfc3RhdHMuZmFp bGVkLS07DQorDQorCS8qIElzc3VlIHRoZSBMU0IgcGFnZSByZWNvdmVyeSBjb21tYW5kICovDQor CXRoaXMtPmNvbW1hbmQobXRkLCBGTEVYT05FTkFORF9DTURfUkVDT1ZFUl9MU0IsIGFkZHIsIHRo aXMtPndyaXRlc2l6ZSk7DQorCXJldHVybiB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7DQor fQ0KKw0KKy8qKg0KICAqIG9uZW5hbmRfcmVhZF9vcHNfbm9sb2NrIC0gW09uZU5BTkQgSW50ZXJm YWNlXSBPbmVOQU5EIHJlYWQgbWFpbiBhbmQvb3Igb3V0LW9mLWJhbmQNCiAgKiBAcGFyYW0gbXRk CQlNVEQgZGV2aWNlIHN0cnVjdHVyZQ0KICAqIEBwYXJhbSBmcm9tCQlvZmZzZXQgdG8gcmVhZCBm cm9tDQpAQCAtODU3LDEyICsxMDEyLDE0IEBADQogCXN0YXRzID0gbXRkLT5lY2Nfc3RhdHM7DQog DQogIAkvKiBSZWFkLXdoaWxlLWxvYWQgbWV0aG9kICovDQorCS8qIE5vdGU6IFdlIGNhbid0IHVz ZSB0aGlzIGZlYXR1cmUgaW4gTUxDICovDQogDQogIAkvKiBEbyBmaXJzdCBsb2FkIHRvIGJ1ZmZl clJBTSAqLw0KICAJaWYgKHJlYWQgPCBsZW4pIHsNCiAgCQlpZiAoIW9uZW5hbmRfY2hlY2tfYnVm ZmVycmFtKG10ZCwgZnJvbSkpIHsNCiAJCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURf UkVBRCwgZnJvbSwgd3JpdGVzaXplKTsNCiAgCQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JF QURJTkcpOw0KKwkJCXJldCA9IHJldCA/IG9uZW5hbmRfcmVjb3Zlcl9sc2IobXRkLCBmcm9tLCBy ZXQpIDogcmV0Ow0KICAJCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCBmcm9tLCAhcmV0 KTsNCiAJCQlpZiAocmV0ID09IC1FQkFETVNHKQ0KIAkJCQlyZXQgPSAwOw0KQEAgLTg3Nyw3ICsx MDM0LDcgQEANCiAgCXdoaWxlICghcmV0KSB7DQogIAkJLyogSWYgdGhlcmUgaXMgbW9yZSB0byBs b2FkIHRoZW4gc3RhcnQgbmV4dCBsb2FkICovDQogIAkJZnJvbSArPSB0aGlzbGVuOw0KLSAJCWlm IChyZWFkICsgdGhpc2xlbiA8IGxlbikgew0KKwkJaWYgKCFPTkVOQU5EX0lTX01MQyh0aGlzKSAm JiByZWFkICsgdGhpc2xlbiA8IGxlbikgew0KIAkJCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5E X0NNRF9SRUFELCBmcm9tLCB3cml0ZXNpemUpOw0KICAJCQkvKg0KICAJCQkgKiBDaGlwIGJvdW5k YXJ5IGhhbmRsaW5nIGluIEREUA0KQEAgLTkwOSw2ICsxMDY2LDE1IEBADQogCQkJb29iY29sdW1u ID0gMDsNCiAJCX0NCiANCisJCWlmIChPTkVOQU5EX0lTX01MQyh0aGlzKSAmJiAocmVhZCArIHRo aXNsZW4gPCBsZW4pKSB7DQorCQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQs IGZyb20sIHdyaXRlc2l6ZSk7DQorCQkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcp Ow0KKwkJCXJldCA9IHJldCA/IG9uZW5hbmRfcmVjb3Zlcl9sc2IobXRkLCBmcm9tLCByZXQpIDog cmV0Ow0KKwkJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZyb20sICFyZXQpOw0KKwkJ CWlmIChyZXQgPT0gLUVCQURNU0cpDQorCQkJCXJldCA9IDA7DQorCQl9DQorDQogIAkJLyogU2Vl IGlmIHdlIGFyZSBkb25lICovDQogIAkJcmVhZCArPSB0aGlzbGVuOw0KICAJCWlmIChyZWFkID09 IGxlbikNCkBAIC05MTYsMTYgKzEwODIsMTkgQEANCiAgCQkvKiBTZXQgdXAgZm9yIG5leHQgcmVh ZCBmcm9tIGJ1ZmZlclJBTSAqLw0KICAJCWlmICh1bmxpa2VseShib3VuZGFyeSkpDQogIAkJCXRo aXMtPndyaXRlX3dvcmQoT05FTkFORF9ERFBfQ0hJUDEsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JF R19TVEFSVF9BRERSRVNTMik7DQotIAkJT05FTkFORF9TRVRfTkVYVF9CVUZGRVJSQU0odGhpcyk7 DQorCQlpZiAoIU9ORU5BTkRfSVNfTUxDKHRoaXMpKQ0KKwkJCU9ORU5BTkRfU0VUX05FWFRfQlVG RkVSUkFNKHRoaXMpOw0KICAJCWJ1ZiArPSB0aGlzbGVuOw0KIAkJdGhpc2xlbiA9IG1pbl90KGlu dCwgd3JpdGVzaXplLCBsZW4gLSByZWFkKTsNCiAgCQljb2x1bW4gPSAwOw0KICAJCWNvbmRfcmVz Y2hlZCgpOw0KLSAJCS8qIE5vdyB3YWl0IGZvciBsb2FkICovDQotIAkJcmV0ID0gdGhpcy0+d2Fp dChtdGQsIEZMX1JFQURJTkcpOw0KLSAJCW9uZW5hbmRfdXBkYXRlX2J1ZmZlcnJhbShtdGQsIGZy b20sICFyZXQpOw0KLQkJaWYgKHJldCA9PSAtRUJBRE1TRykNCi0JCQlyZXQgPSAwOw0KKwkJaWYg KCFPTkVOQU5EX0lTX01MQyh0aGlzKSkgew0KKwkJCS8qIE5vdyB3YWl0IGZvciBsb2FkIGluIFNM QyAqLw0KKwkJCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9SRUFESU5HKTsNCisJCQlvbmVuYW5k X3VwZGF0ZV9idWZmZXJyYW0obXRkLCBmcm9tLCAhcmV0KTsNCisJCQlpZiAocmV0ID09IC1FQkFE TVNHKQ0KKwkJCQlyZXQgPSAwOw0KKwkJfQ0KICAJfQ0KIA0KIAkvKg0KQEAgLTk2Miw3ICsxMTMx LDcgQEANCiAJc2l6ZV90IGxlbiA9IG9wcy0+b29ibGVuOw0KIAltdGRfb29iX21vZGVfdCBtb2Rl ID0gb3BzLT5tb2RlOw0KIAl1X2NoYXIgKmJ1ZiA9IG9wcy0+b29iYnVmOw0KLQlpbnQgcmV0ID0g MDsNCisJaW50IHJldCA9IDAsIHJlYWRjbWQ7DQogDQogCWZyb20gKz0gb3BzLT5vb2JvZmZzOw0K IA0KQEAgLTk5MywxNyArMTE2MiwyMSBAQA0KIA0KIAlzdGF0cyA9IG10ZC0+ZWNjX3N0YXRzOw0K IA0KKwlyZWFkY21kID0gT05FTkFORF9JU19NTEModGhpcykgPyBPTkVOQU5EX0NNRF9SRUFEIDog T05FTkFORF9DTURfUkVBRE9PQjsNCisNCiAJd2hpbGUgKHJlYWQgPCBsZW4pIHsNCiAJCWNvbmRf cmVzY2hlZCgpOw0KIA0KIAkJdGhpc2xlbiA9IG9vYnNpemUgLSBjb2x1bW47DQogCQl0aGlzbGVu ID0gbWluX3QoaW50LCB0aGlzbGVuLCBsZW4pOw0KIA0KLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9O RU5BTkRfQ01EX1JFQURPT0IsIGZyb20sIG10ZC0+b29ic2l6ZSk7DQorCQl0aGlzLT5jb21tYW5k KG10ZCwgcmVhZGNtZCwgZnJvbSwgbXRkLT5vb2JzaXplKTsNCiANCiAJCW9uZW5hbmRfdXBkYXRl X2J1ZmZlcnJhbShtdGQsIGZyb20sIDApOw0KIA0KIAkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZM X1JFQURJTkcpOw0KKwkJcmV0ID0gcmV0ID8gb25lbmFuZF9yZWNvdmVyX2xzYihtdGQsIGZyb20s IHJldCkgOiByZXQ7DQorDQogCQlpZiAocmV0ICYmIHJldCAhPSAtRUJBRE1TRykgew0KIAkJCXBy aW50ayhLRVJOX0VSUiAib25lbmFuZF9yZWFkX29vYl9ub2xvY2s6IHJlYWQgZmFpbGVkID0gMHgl eFxuIiwgcmV0KTsNCiAJCQlicmVhazsNCkBAIC0xMTI4LDExICsxMzAxLDExIEBADQogCWN0cmwg PSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NUUkxfU1RBVFVTKTsN CiANCiAJaWYgKGludGVycnVwdCAmIE9ORU5BTkRfSU5UX1JFQUQpIHsNCi0JCWludCBlY2MgPSB0 aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0VDQ19TVEFUVVMpOw0KKwkJ aW50IGVjYyA9IG9uZW5hbmRfcmVhZF9lY2MobXRkKTsNCiAJCWlmIChlY2MgJiBPTkVOQU5EX0VD Q18yQklUX0FMTCkgew0KIAkJCXByaW50ayhLRVJOX0lORk8gIm9uZW5hbmRfYmJ0X3dhaXQ6IGVj YyBlcnJvciA9IDB4JTA0eCINCiAJCQkJIiwgY29udHJvbGxlciBlcnJvciAweCUwNHhcbiIsIGVj YywgY3RybCk7DQotCQkJcmV0dXJuIE9ORU5BTkRfQkJUX1JFQURfRVJST1I7DQorCQkJcmV0dXJu IE9ORU5BTkRfQkJUX1JFQURfRUNDX0VSUk9SOw0KIAkJfQ0KIAl9IGVsc2Ugew0KIAkJcHJpbnRr KEtFUk5fRVJSICJvbmVuYW5kX2JidF93YWl0OiByZWFkIHRpbWVvdXQhIg0KQEAgLTExNjMsNyAr MTMzNiw3IEBADQogew0KIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2Ow0K IAlpbnQgcmVhZCA9IDAsIHRoaXNsZW4sIGNvbHVtbjsNCi0JaW50IHJldCA9IDA7DQorCWludCBy ZXQgPSAwLCByZWFkY21kOw0KIAlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47DQogCXVfY2hhciAq YnVmID0gb3BzLT5vb2JidWY7DQogDQpAQCAtMTE4MywxNyArMTM1NiwyMSBAQA0KIA0KIAljb2x1 bW4gPSBmcm9tICYgKG10ZC0+b29ic2l6ZSAtIDEpOw0KIA0KKwlyZWFkY21kID0gT05FTkFORF9J U19NTEModGhpcykgPyBPTkVOQU5EX0NNRF9SRUFEIDogT05FTkFORF9DTURfUkVBRE9PQjsNCisN CiAJd2hpbGUgKHJlYWQgPCBsZW4pIHsNCiAJCWNvbmRfcmVzY2hlZCgpOw0KIA0KIAkJdGhpc2xl biA9IG10ZC0+b29ic2l6ZSAtIGNvbHVtbjsNCiAJCXRoaXNsZW4gPSBtaW5fdChpbnQsIHRoaXNs ZW4sIGxlbik7DQogDQotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRE9PQiwg ZnJvbSwgbXRkLT5vb2JzaXplKTsNCisJCXRoaXMtPmNvbW1hbmQobXRkLCByZWFkY21kLCBmcm9t LCBtdGQtPm9vYnNpemUpOw0KIA0KIAkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgZnJv bSwgMCk7DQogDQogCQlyZXQgPSBvbmVuYW5kX2JidF93YWl0KG10ZCwgRkxfUkVBRElORyk7DQor CQlyZXQgPSByZXQgPyBvbmVuYW5kX3JlY292ZXJfbHNiKG10ZCwgZnJvbSwgcmV0KSA6IHJldDsN CisNCiAJCWlmIChyZXQpDQogCQkJYnJlYWs7DQogDQpAQCAtMTIzMCw5ICsxNDA3LDExIEBADQog ew0KIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2Ow0KIAl1X2NoYXIgKm9v Yl9idWYgPSB0aGlzLT5vb2JfYnVmOw0KLQlpbnQgc3RhdHVzLCBpOw0KKwlpbnQgc3RhdHVzLCBp LCByZWFkY21kOw0KIA0KLQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRE9PQiwg dG8sIG10ZC0+b29ic2l6ZSk7DQorCXJlYWRjbWQgPSBPTkVOQU5EX0lTX01MQyh0aGlzKSA/IE9O RU5BTkRfQ01EX1JFQUQgOiBPTkVOQU5EX0NNRF9SRUFET09COw0KKw0KKwl0aGlzLT5jb21tYW5k KG10ZCwgcmVhZGNtZCwgdG8sIG10ZC0+b29ic2l6ZSk7DQogCW9uZW5hbmRfdXBkYXRlX2J1ZmZl cnJhbShtdGQsIHRvLCAwKTsNCiAJc3RhdHVzID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcp Ow0KIAlpZiAoc3RhdHVzKQ0KQEAgLTE1ODYsNyArMTc2NSw3IEBADQogew0KIAlzdHJ1Y3Qgb25l bmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2Ow0KIAlpbnQgY29sdW1uLCByZXQgPSAwLCBvb2Jz aXplOw0KLQlpbnQgd3JpdHRlbiA9IDA7DQorCWludCB3cml0dGVuID0gMCwgb29iY21kOw0KIAl1 X2NoYXIgKm9vYmJ1ZjsNCiAJc2l6ZV90IGxlbiA9IG9wcy0+b29ibGVuOw0KIAljb25zdCB1X2No YXIgKmJ1ZiA9IG9wcy0+b29iYnVmOw0KQEAgLTE2MjgsNiArMTgwNyw4IEBADQogDQogCW9vYmJ1 ZiA9IHRoaXMtPm9vYl9idWY7DQogDQorCW9vYmNtZCA9IE9ORU5BTkRfSVNfTUxDKHRoaXMpID8g T05FTkFORF9DTURfUFJPRyA6IE9ORU5BTkRfQ01EX1BST0dPT0I7DQorDQogCS8qIExvb3AgdW50 aWwgYWxsIGRhdGEgd3JpdGUgKi8NCiAJd2hpbGUgKHdyaXR0ZW4gPCBsZW4pIHsNCiAJCWludCB0 aGlzbGVuID0gbWluX3QoaW50LCBvb2JzaXplLCBsZW4gLSB3cml0dGVuKTsNCkBAIC0xNjQ1LDcg KzE4MjYsMTQgQEANCiAJCQltZW1jcHkob29iYnVmICsgY29sdW1uLCBidWYsIHRoaXNsZW4pOw0K IAkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgb29iYnVmLCAw LCBtdGQtPm9vYnNpemUpOw0KIA0KLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1BS T0dPT0IsIHRvLCBtdGQtPm9vYnNpemUpOw0KKwkJaWYgKE9ORU5BTkRfSVNfTUxDKHRoaXMpKSB7 DQorCQkJLyogU2V0IG1haW4gYXJlYSBvZiBEYXRhUkFNIHRvIDB4ZmYqLw0KKwkJCW1lbXNldCh0 aGlzLT5wYWdlX2J1ZiwgMHhmZiwgbXRkLT53cml0ZXNpemUpOw0KKwkJCXRoaXMtPndyaXRlX2J1 ZmZlcnJhbShtdGQsIE9ORU5BTkRfREFUQVJBTSwNCisJCQkJCSB0aGlzLT5wYWdlX2J1ZiwgMCwg bXRkLT53cml0ZXNpemUpOw0KKwkJfQ0KKw0KKwkJdGhpcy0+Y29tbWFuZChtdGQsIG9vYmNtZCwg dG8sIG10ZC0+b29ic2l6ZSk7DQogDQogCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0 bywgMCk7DQogCQlpZiAoT05FTkFORF9JU18yUExBTkUodGhpcykpIHsNCkBAIC0xNzcwLDExICsx OTU4LDMyIEBADQogCXVuc2lnbmVkIGludCBibG9ja19zaXplOw0KIAlsb2ZmX3QgYWRkcjsNCiAJ aW50IGxlbjsNCi0JaW50IHJldCA9IDA7DQorCWludCByZXQgPSAwLCBpID0gMDsNCiANCiAJREVC VUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfZXJhc2U6IHN0YXJ0ID0gMHglMDh4LCBsZW4g PSAlaVxuIiwgKHVuc2lnbmVkIGludCkgaW5zdHItPmFkZHIsICh1bnNpZ25lZCBpbnQpIGluc3Ry LT5sZW4pOw0KIA0KLQlibG9ja19zaXplID0gKDEgPDwgdGhpcy0+ZXJhc2Vfc2hpZnQpOw0KKwkv KiBEbyBub3QgYWxsb3cgZXJhc2UgcGFzdCBlbmQgb2YgZGV2aWNlICovDQorCWlmICh1bmxpa2Vs eSgoaW5zdHItPmxlbiArIGluc3RyLT5hZGRyKSA+IG10ZC0+c2l6ZSkpIHsNCisJCXByaW50ayhL RVJOX0VSUiAib25lbmFuZF9lcmFzZTogRXJhc2UgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsNCisJ CXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWlmIChGTEVYT05FTkFORCh0aGlzKSAmJiAobXRk LT5udW1lcmFzZXJlZ2lvbnMgPiAxKSkgew0KKwkJLyogRmluZCB0aGUgZXJhc2VyZWdpb24gb2Yg dGhpcyBhZGRyZXNzICovDQorCQlmb3IgKDsgaSA8IG10ZC0+bnVtZXJhc2VyZWdpb25zICYmDQor CQkJaW5zdHItPmFkZHIgPj0gbXRkLT5lcmFzZXJlZ2lvbnNbaV0ub2Zmc2V0OyBpKyspDQorCQkJ Ow0KKwkJaS0tOw0KKwkJYmxvY2tfc2l6ZSA9IG10ZC0+ZXJhc2VyZWdpb25zW2ldLmVyYXNlc2l6 ZTsNCisNCisJCS8qIFN0YXJ0IGFkZHJlc3Mgc2hvdWxkIGJlIGFsaWduZWQgb24gZXJhc2UgcmVn aW9uIGJvdW5kYXJ5ICovDQorCQlpZiAodW5saWtlbHkoKGluc3RyLT5hZGRyIC0gbXRkLT5lcmFz ZXJlZ2lvbnNbaV0ub2Zmc2V0KSAmDQorCQkJCQkJCShibG9ja19zaXplIC0gMSkpKSB7DQorCQkJ cHJpbnRrKEtFUk5fRVJSICJvbmVuYW5kX2VyYXNlOiBVbmFsaWduZWQgYWRkcmVzc1xuIik7DQor CQkJcmV0dXJuIC1FSU5WQUw7DQorCQl9DQorCX0gZWxzZQ0KKwkJYmxvY2tfc2l6ZSA9IG10ZC0+ ZXJhc2VzaXplOw0KIA0KIAkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91 bmRhcnkgKi8NCiAJaWYgKHVubGlrZWx5KGluc3RyLT5hZGRyICYgKGJsb2NrX3NpemUgLSAxKSkp IHsNCkBAIC0xNzg4LDEyICsxOTk3LDYgQEANCiAJCXJldHVybiAtRUlOVkFMOw0KIAl9DQogDQot CS8qIERvIG5vdCBhbGxvdyBlcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8NCi0JaWYgKHVubGlr ZWx5KChpbnN0ci0+bGVuICsgaW5zdHItPmFkZHIpID4gbXRkLT5zaXplKSkgew0KLQkJcHJpbnRr KEtFUk5fRVJSICJvbmVuYW5kX2VyYXNlOiBFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOw0K LQkJcmV0dXJuIC1FSU5WQUw7DQotCX0NCi0NCiAJaW5zdHItPmZhaWxfYWRkciA9IE1URF9GQUlM X0FERFJfVU5LTk9XTjsNCiANCiAJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZp Y2UgaXMgYXZhaWxhYmxlICovDQpAQCAtMTgyMiw3ICsyMDI1LDggQEANCiAJCXJldCA9IHRoaXMt PndhaXQobXRkLCBGTF9FUkFTSU5HKTsNCiAJCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90 ZWN0ZWQgKi8NCiAJCWlmIChyZXQpIHsNCi0JCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJh c2U6IEZhaWxlZCBlcmFzZSwgYmxvY2sgJWRcbiIsICh1bnNpZ25lZCkgKGFkZHIgPj4gdGhpcy0+ ZXJhc2Vfc2hpZnQpKTsNCisJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IEZhaWxl ZCBlcmFzZSwgYmxvY2sgJWRcbiIsDQorCQkJICh1bnNpZ25lZClvbmVuYW5kX2dldF9ibG9jayht dGQsIGFkZHIsIE5VTEwpKTsNCiAJCQlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRkFJTEVEOw0K IAkJCWluc3RyLT5mYWlsX2FkZHIgPSBhZGRyOw0KIAkJCWdvdG8gZXJhc2VfZXhpdDsNCkBAIC0x ODMwLDYgKzIwMzQsMTkgQEANCiANCiAJCWxlbiAtPSBibG9ja19zaXplOw0KIAkJYWRkciArPSBi bG9ja19zaXplOw0KKwkJaWYgKEZMRVhPTkVOQU5EKHRoaXMpICYmIChtdGQtPm51bWVyYXNlcmVn aW9ucyA+IDEpKSB7DQorCQkJaWYgKChpIDwgKG10ZC0+bnVtZXJhc2VyZWdpb25zIC0gMSkpICYm DQorCQkJICAgIChhZGRyID09IG10ZC0+ZXJhc2VyZWdpb25zW2kgKyAxXS5vZmZzZXQpKQ0KKwkJ CQlpKys7DQorCQkJYmxvY2tfc2l6ZSA9IG10ZC0+ZXJhc2VyZWdpb25zW2ldLmVyYXNlc2l6ZTsN CisJCQlpZiAobGVuICYgKGJsb2NrX3NpemUgLSAxKSkgew0KKwkJCQkvKiBUaGlzIHNob3VsZCBi ZSBoYW5kbGVkIGF0IE1URCBwYXJ0aXRpb25pbmcNCisJCQkJICogbGV2ZWwuDQorCQkJCSAqLw0K KwkJCQlwcmludGsoS0VSTl9FUlIgIm9uZW5hbmRfZXJhc2U6IFVuYWxpZ25lZCBhZGRyZXNzXG4i KTsNCisJCQkJZ290byBlcmFzZV9leGl0Ow0KKwkJCX0NCisJCX0NCiAJfQ0KIA0KIAlpbnN0ci0+ c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsNCkBAIC0xOTA4LDEzICsyMTI1LDE3IEBADQogCWludCBi bG9jazsNCiANCiAJLyogR2V0IGJsb2NrIG51bWJlciAqLw0KLQlibG9jayA9ICgoaW50KSBvZnMp ID4+IGJibS0+YmJ0X2VyYXNlX3NoaWZ0Ow0KKwlibG9jayA9IG9uZW5hbmRfZ2V0X2Jsb2NrKG10 ZCwgb2ZzLCBOVUxMKTsNCiAgICAgICAgIGlmIChiYm0tPmJidCkNCiAgICAgICAgICAgICAgICAg YmJtLT5iYnRbYmxvY2sgPj4gMl0gfD0gMHgwMSA8PCAoKGJsb2NrICYgMHgwMykgPDwgMSk7DQog DQogICAgICAgICAvKiBXZSB3cml0ZSB0d28gYnl0ZXMsIHNvIHdlIGRvbnQgaGF2ZSB0byBtZXNz IHdpdGggMTYgYml0IGFjY2VzcyAqLw0KICAgICAgICAgb2ZzICs9IG10ZC0+b29ic2l6ZSArIChi Ym0tPmJhZGJsb2NrcG9zICYgfjB4MDEpOw0KLSAgICAgICAgcmV0dXJuIG9uZW5hbmRfd3JpdGVf b29iX25vbG9jayhtdGQsIG9mcywgJm9wcyk7DQorCS8qIEZJWE1FIDogV2hhdCB0byBkbyB3aGVu IG1hcmtpbmcgU0xDIGJsb2NrIGluIHBhcnRpdGlvbg0KKwkgKiAJICAgd2l0aCBNTEMgZXJhc2Vz aXplPyBGb3Igbm93LCBpdCBpcyBub3QgYWR2aXNhYmxlIHRvDQorCSAqCSAgIGNyZWF0ZSBwYXJ0 aXRpb25zIGNvbnRhaW5pbmcgYm90aCBTTEMgYW5kIE1MQyByZWdpb25zLg0KKwkgKi8NCisJcmV0 dXJuIG9uZW5hbmRfd3JpdGVfb29iX25vbG9jayhtdGQsIG9mcywgJm9wcyk7DQogfQ0KIA0KIC8q Kg0KQEAgLTE5NTgsOCArMjE3OSw4IEBADQogCWludCBzdGFydCwgZW5kLCBibG9jaywgdmFsdWUs IHN0YXR1czsNCiAJaW50IHdwX3N0YXR1c19tYXNrOw0KIA0KLQlzdGFydCA9IG9mcyA+PiB0aGlz LT5lcmFzZV9zaGlmdDsNCi0JZW5kID0gbGVuID4+IHRoaXMtPmVyYXNlX3NoaWZ0Ow0KKwlzdGFy dCA9IG9uZW5hbmRfZ2V0X2Jsb2NrKG10ZCwgb2ZzLCBOVUxMKTsNCisJZW5kID0gb25lbmFuZF9n ZXRfYmxvY2sobXRkLCBvZnMgKyBsZW4sIE5VTEwpIC0gMTsNCiANCiAJaWYgKGNtZCA9PSBPTkVO QU5EX0NNRF9MT0NLKQ0KIAkJd3Bfc3RhdHVzX21hc2sgPSBPTkVOQU5EX1dQX0xTOw0KQEAgLTE5 NzEsNyArMjE5Miw4IEBADQogCQkvKiBTZXQgc3RhcnQgYmxvY2sgYWRkcmVzcyAqLw0KIAkJdGhp cy0+d3JpdGVfd29yZChzdGFydCwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NUQVJUX0JMT0NL X0FERFJFU1MpOw0KIAkJLyogU2V0IGVuZCBibG9jayBhZGRyZXNzICovDQotCQl0aGlzLT53cml0 ZV93b3JkKHN0YXJ0ICsgZW5kIC0gMSwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0VORF9CTE9D S19BRERSRVNTKTsNCisJCXRoaXMtPndyaXRlX3dvcmQoZW5kLCB0aGlzLT5iYXNlICsNCisJCQkJ CQkgT05FTkFORF9SRUdfRU5EX0JMT0NLX0FERFJFU1MpOw0KIAkJLyogV3JpdGUgbG9jayBjb21t YW5kICovDQogCQl0aGlzLT5jb21tYW5kKG10ZCwgY21kLCAwLCAwKTsNCiANCkBAIC0xOTkyLDcg KzIyMTQsNyBAQA0KIAl9DQogDQogCS8qIEJsb2NrIGxvY2sgc2NoZW1lICovDQotCWZvciAoYmxv Y2sgPSBzdGFydDsgYmxvY2sgPCBzdGFydCArIGVuZDsgYmxvY2srKykgew0KKwlmb3IgKGJsb2Nr ID0gc3RhcnQ7IGJsb2NrIDwgZW5kICsgMTsgYmxvY2srKykgew0KIAkJLyogU2V0IGJsb2NrIGFk ZHJlc3MgKi8NCiAJCXZhbHVlID0gb25lbmFuZF9ibG9ja19hZGRyZXNzKHRoaXMsIGJsb2NrKTsN CiAJCXRoaXMtPndyaXRlX3dvcmQodmFsdWUsIHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TVEFS VF9BRERSRVNTMSk7DQpAQCAtMjA4Niw3ICsyMzA4LDYgQEANCiAJCQlyZXR1cm4gMDsNCiAJCX0N CiAJfQ0KLQ0KIAlyZXR1cm4gMTsNCiB9DQogDQpAQCAtMjEzMSw2ICsyMzUyLDI4IEBADQogCW9u ZW5hbmRfZG9fbG9ja19jbWQobXRkLCBvZnMsIGxlbiwgT05FTkFORF9DTURfVU5MT0NLKTsNCiB9 DQogDQorLyoqDQorICogZmxleG9uZW5hbmRfdW5sb2NrX2FsbCAtIFtGbGV4LU9uZU5BTkQgSW50 ZXJmYWNlXSB1bmxvY2sgYWxsIGJsb2Nrcw0KKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3Ry dWN0dXJlDQorICoNCisgKiBVbmxvY2sgYWxsIGJsb2Nrcw0KKyAqLw0KK3N0YXRpYyBpbnQgZmxl eG9uZW5hbmRfdW5sb2NrX2FsbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkNCit7DQorCXN0cnVjdCBv bmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7DQorCXNpemVfdCBsZW4gPSBtdGQtPmVyYXNl c2l6ZTsNCisNCisJaWYgKG10ZC0+bnVtZXJhc2VyZWdpb25zID4gMSkNCisJCWxlbiA+Pj0gMTsN CisNCisJb25lbmFuZF9kb19sb2NrX2NtZChtdGQsIDAsIGxlbiwgT05FTkFORF9DTURfVU5MT0NL X0FMTCk7DQorCWlmIChPTkVOQU5EX0lTX0REUCh0aGlzKSkNCisJCW9uZW5hbmRfZG9fbG9ja19j bWQobXRkLCB0aGlzLT5kaWVzaXplWzBdLCBsZW4sDQorCQkJCQkJIE9ORU5BTkRfQ01EX1VOTE9D S19BTEwpOw0KKwlvbmVuYW5kX2NoZWNrX2xvY2tfc3RhdHVzKHRoaXMpOw0KKwlyZXR1cm4gMDsN Cit9DQorDQogI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9PVFANCiANCiAvKiBJbnRlcmFsIE9U UCBvcGVyYXRpb24gKi8NCkBAIC0yMjMwLDIxICsyNDczLDMwIEBADQogCQlzaXplX3QgKnJldGxl biwgdV9jaGFyICpidWYpDQogew0KIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5w cml2Ow0KLQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzID0gew0KLQkJLm1vZGUgPSBNVERfT09CX1BM QUNFLA0KLQkJLm9vYmxlbiA9IGxlbiwNCi0JCS5vb2JidWYgPSBidWYsDQotCQkub29ib2ZmcyA9 IDAsDQotCX07DQorCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7DQogCWludCByZXQ7DQogDQorCWlm IChGTEVYT05FTkFORCh0aGlzKSkgew0KKwkJb3BzLmxlbiA9IG10ZC0+d3JpdGVzaXplOw0KKwkJ b3BzLm9vYmxlbiA9IDA7DQorCQlvcHMuZGF0YnVmID0gYnVmOw0KKwkJb3BzLm9vYmJ1ZiA9IE5V TEw7DQorCX0gZWxzZSB7DQorCQlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7DQorCQlvcHMub29i bGVuID0gbGVuOw0KKwkJb3BzLm9vYmJ1ZiA9IGJ1ZjsNCisJCW9wcy5vb2JvZmZzID0gMDsNCisJ fQ0KKw0KIAkvKiBFbnRlciBPVFAgYWNjZXNzIG1vZGUgKi8NCiAJdGhpcy0+Y29tbWFuZChtdGQs IE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOw0KIAl0aGlzLT53YWl0KG10ZCwgRkxfT1RQ SU5HKTsNCiANCi0JcmV0ID0gb25lbmFuZF93cml0ZV9vb2Jfbm9sb2NrKG10ZCwgZnJvbSwgJm9w cyk7DQorCXJldCA9IEZMRVhPTkVOQU5EKHRoaXMpID8NCisJCW9uZW5hbmRfd3JpdGVfb3BzX25v bG9jayhtdGQsIChtdGQtPndyaXRlc2l6ZSAqIDQ5KSwgJm9wcykNCisJCTogb25lbmFuZF93cml0 ZV9vb2Jfbm9sb2NrKG10ZCwgZnJvbSwgJm9wcyk7DQogDQotCSpyZXRsZW4gPSBvcHMub29icmV0 bGVuOw0KKwkqcmV0bGVuID0gRkxFWE9ORU5BTkQodGhpcykgPyBvcHMucmV0bGVuIDogb3BzLm9v YnJldGxlbjsNCiANCiAJLyogRXhpdCBPVFAgYWNjZXNzIG1vZGUgKi8NCiAJdGhpcy0+Y29tbWFu ZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsNCkBAIC0yNDI4LDI1ICsyNjgwLDMyIEBA DQogCQkJc2l6ZV90IGxlbikNCiB7DQogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQt PnByaXY7DQotCXVfY2hhciAqb29iX2J1ZiA9IHRoaXMtPm9vYl9idWY7DQorCXVfY2hhciAqb29i X2J1ZiA9IEZMRVhPTkVOQU5EKHRoaXMpID8gdGhpcy0+cGFnZV9idWYgOiB0aGlzLT5vb2JfYnVm Ow0KIAlzaXplX3QgcmV0bGVuOw0KIAlpbnQgcmV0Ow0KIA0KLQltZW1zZXQob29iX2J1ZiwgMHhm ZiwgbXRkLT5vb2JzaXplKTsNCisJbWVtc2V0KG9vYl9idWYsIDB4ZmYsIEZMRVhPTkVOQU5EKHRo aXMpID8gdGhpcy0+d3JpdGVzaXplDQorCQkJCQkJIDogbXRkLT5vb2JzaXplKTsNCiAJLyoNCiAJ ICogTm90ZTogT1RQIGxvY2sgb3BlcmF0aW9uDQogCSAqICAgICAgIE9UUCBibG9jayA6IDB4WFhG Qw0KIAkgKiAgICAgICAxc3QgYmxvY2sgOiAweFhYRjMgKElmIGNoaXAgc3VwcG9ydCkNCiAJICog ICAgICAgQm90aCAgICAgIDogMHhYWEYwIChJZiBjaGlwIHN1cHBvcnQpDQogCSAqLw0KLQlvb2Jf YnVmW09ORU5BTkRfT1RQX0xPQ0tfT0ZGU0VUXSA9IDB4RkM7DQorCWlmIChGTEVYT05FTkFORCh0 aGlzKSkNCisJCW9vYl9idWZbRkxFWE9ORU5BTkRfT1RQX0xPQ0tfT0ZGU0VUXSA9IDB4RkM7DQor CWVsc2UNCisJCW9vYl9idWZbT05FTkFORF9PVFBfTE9DS19PRkZTRVRdID0gMHhGQzsNCiANCiAJ LyoNCiAJICogV3JpdGUgbG9jayBtYXJrIHRvIDh0aCB3b3JkIG9mIHNlY3RvcjAgb2YgcGFnZTAg b2YgdGhlIHNwYXJlMC4NCiAJICogV2Ugd3JpdGUgMTYgYnl0ZXMgc3BhcmUgYXJlYSBpbnN0ZWFk IG9mIDIgYnl0ZXMuDQorCSAqIEZvciBGbGV4LU9uZU5BTkQsIHdlIHdyaXRlIGxvY2sgbWFyayB0 byAxc3Qgd29yZCBvZiBzZWN0b3IgNCBvZg0KKwkgKiBtYWluIGFyZWEgb2YgcGFnZSA0OS4NCiAJ ICovDQorDQogCWZyb20gPSAwOw0KLQlsZW4gPSAxNjsNCisJbGVuID0gRkxFWE9ORU5BTkQodGhp cykgPyBtdGQtPndyaXRlc2l6ZSA6IDE2Ow0KIA0KIAlyZXQgPSBvbmVuYW5kX290cF93YWxrKG10 ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBvb2JfYnVmLCBkb19vdHBfbG9jaywgTVREX09UUF9VU0VS KTsNCiANCkBAIC0yNDk1LDYgKzI3NTQsMTQgQEANCiAJCWJyZWFrOw0KIAl9DQogDQorCWlmIChP TkVOQU5EX0lTX01MQyh0aGlzKSkNCisJCXRoaXMtPm9wdGlvbnMgJj0gfk9ORU5BTkRfSEFTXzJQ TEFORTsNCisNCisJaWYgKEZMRVhPTkVOQU5EKHRoaXMpKSB7DQorCQl0aGlzLT5vcHRpb25zICY9 IH5PTkVOQU5EX0hBU19DT05UX0xPQ0s7DQorCQl0aGlzLT5vcHRpb25zIHw9IE9ORU5BTkRfSEFT X1VOTE9DS19BTEw7DQorCX0NCisNCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBPTkVOQU5EX0hBU19D T05UX0xPQ0spDQogCQlwcmludGsoS0VSTl9ERUJVRyAiTG9jayBzY2hlbWUgaXMgQ29udGludW91 cyBMb2NrXG4iKTsNCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBPTkVOQU5EX0hBU19VTkxPQ0tfQUxM KQ0KQEAgLTI1MTIsMTkgKzI3NzksMjIgQEANCiAgKi8NCiBzdGF0aWMgdm9pZCBvbmVuYW5kX3By aW50X2RldmljZV9pbmZvKGludCBkZXZpY2UsIGludCB2ZXJzaW9uKQ0KIHsNCi0gICAgICAgIGlu dCB2Y2MsIGRlbXV4ZWQsIGRkcCwgZGVuc2l0eTsNCisJaW50IHZjYywgZGVtdXhlZCwgZGRwLCBk ZW5zaXR5LCBmbGV4b25lbmFuZDsNCiANCiAgICAgICAgIHZjYyA9IGRldmljZSAmIE9ORU5BTkRf REVWSUNFX1ZDQ19NQVNLOw0KICAgICAgICAgZGVtdXhlZCA9IGRldmljZSAmIE9ORU5BTkRfREVW SUNFX0lTX0RFTVVYOw0KICAgICAgICAgZGRwID0gZGV2aWNlICYgT05FTkFORF9ERVZJQ0VfSVNf RERQOw0KICAgICAgICAgZGVuc2l0eSA9IG9uZW5hbmRfZ2V0X2RlbnNpdHkoZGV2aWNlKTsNCi0g ICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzT25lTkFORCVzICVkTUIgJXNWIDE2LWJpdCAoMHgl MDJ4KVxuIiwNCi0gICAgICAgICAgICAgICAgZGVtdXhlZCA/ICIiIDogIk11eGVkICIsDQorCWZs ZXhvbmVuYW5kID0gZGV2aWNlICYgREVWSUNFX0lTX0ZMRVhPTkVOQU5EOw0KKwlwcmludGsoS0VS Tl9JTkZPICIlcyVzT25lTkFORCVzICVkTUIgJXNWIDE2LWJpdCAoMHglMDJ4KVxuIiwNCisJCWZs ZXhvbmVuYW5kID8gIkZsZXgtIiA6ICIiLA0KKwkJZGVtdXhlZCA/ICIiIDogIk11eCIsDQogICAg ICAgICAgICAgICAgIGRkcCA/ICIoRERQKSIgOiAiIiwNCiAgICAgICAgICAgICAgICAgKDE2IDw8 IGRlbnNpdHkpLA0KICAgICAgICAgICAgICAgICB2Y2MgPyAiMi42NS8zLjMiIDogIjEuOCIsDQog ICAgICAgICAgICAgICAgIGRldmljZSk7DQotCXByaW50ayhLRVJOX0lORk8gIk9uZU5BTkQgdmVy c2lvbiA9IDB4JTA0eFxuIiwgdmVyc2lvbik7DQorCXByaW50ayhLRVJOX0lORk8gIiVzT25lTkFO RCB2ZXJzaW9uID0gMHglMDR4XG4iLA0KKwlmbGV4b25lbmFuZCA/ICJGbGV4LSIgOiAiIiwgdmVy c2lvbik7DQogfQ0KIA0KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb25lbmFuZF9tYW51ZmFjdHVyZXJz IG9uZW5hbmRfbWFudWZfaWRzW10gPSB7DQpAQCAtMjU1OCw2ICsyODI4LDE4MSBAQA0KIH0NCiAN CiAvKioNCisqIGZsZXhvbmVuYW5kX2dldF9ib3VuZGFyeQktIFJlYWRzIHRoZSBTTEMgYm91bmRh cnkNCisqIEBwYXJhbSBvbmVuYW5kX2luZm8JCS0gb25lbmFuZCBpbmZvIHN0cnVjdHVyZQ0KKyoq Lw0KK3N0YXRpYyBpbnQgZmxleG9uZW5hbmRfZ2V0X2JvdW5kYXJ5KHN0cnVjdCBtdGRfaW5mbyAq bXRkKQ0KK3sNCisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsNCisJdW5z aWduZWQgZGllLCBiZHJ5Ow0KKwlpbnQgcmV0LCBzeXNjZmcsIGxvY2tlZDsNCisNCisJLyogRGlz YWJsZSBFQ0MgKi8NCisJc3lzY2ZnID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVO QU5EX1JFR19TWVNfQ0ZHMSk7DQorCXRoaXMtPndyaXRlX3dvcmQoKHN5c2NmZyB8IDB4MDEwMCks IHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19TWVNfQ0ZHMSk7DQorDQorCWZvciAoZGllID0gMDsg ZGllIDwgdGhpcy0+ZGllczsgZGllKyspIHsNCisJCXRoaXMtPmNvbW1hbmQobXRkLCBGTEVYT05F TkFORF9DTURfUElfQUNDRVNTLCBkaWUsIDApOw0KKwkJdGhpcy0+d2FpdChtdGQsIEZMX1NZTkNJ TkcpOw0KKw0KKwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFQUQsIGRpZSwgMCk7 DQorCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7DQorDQorCQliZHJ5ID0gdGhp cy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX0RBVEFSQU0pOw0KKwkJbG9ja2VkID0g YmRyeSA+PiBGTEVYT05FTkFORF9QSV9VTkxPQ0tfU0hJRlQ7DQorCQlsb2NrZWQgPSAobG9ja2Vk ID09IDB4MykgPyAwIDogMTsNCisJCXRoaXMtPmJvdW5kYXJ5W2RpZV0gPSBiZHJ5ICYgRkxFWE9O RU5BTkRfUElfTUFTSzsNCisJCXRoaXMtPmJvdW5kYXJ5X2xvY2tlZFtkaWVdID0gbG9ja2VkOw0K KwkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsNCisJCXJldCA9 IHRoaXMtPndhaXQobXRkLCBGTF9SRVNFVElORyk7DQorDQorCQlwcmludGsoS0VSTl9JTkZPICJE aWUgJWQgYm91bmRhcnk6ICVkJXNcbiIsIGRpZSwNCisJCSAgICAgICB0aGlzLT5ib3VuZGFyeVtk aWVdLCBsb2NrZWQgPyAiKExvY2tlZCkiIDogIihVbmxvY2tlZCkiKTsNCisJfQ0KKw0KKwkvKiBF bmFibGUgRUNDICovDQorCXRoaXMtPndyaXRlX3dvcmQoc3lzY2ZnLCB0aGlzLT5iYXNlICsgT05F TkFORF9SRUdfU1lTX0NGRzEpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyoqDQorICogZ2V0X2Zs ZXhvbmVuYW5kX3NpemUgLSBGaWxsIHVwIGZpZWxkcyBpbiBvbmVuYW5kX2NoaXANCisgKiAJCQkg IGJvdW5kYXJ5W10sIGRpZXNpemVbXSwgY2hpcHNpemUsDQorICoJCQkgIGJvdW5kYXJ5X2xvY2tl ZFtdDQorICogQHBhcmFtIG10ZAkJLSBNVEQgZGV2aWNlIHN0cnVjdHVyZQ0KKyAqLw0KK3ZvaWQg Z2V0X2ZsZXhvbmVuYW5kX3NpemUoc3RydWN0IG10ZF9pbmZvICptdGQpDQorew0KKwlzdHJ1Y3Qg b25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2Ow0KKwlpbnQgZGllLCBvZnMsIGksIGVyYXNl c2hpZnQsIGRlbnNpdHk7DQorCWludCBibGtzcGVyZGllLCBtYXhiZHJ5Ow0KKw0KKwlkZW5zaXR5 ID0gb25lbmFuZF9nZXRfZGVuc2l0eSh0aGlzLT5kZXZpY2VfaWQpOw0KKwlibGtzcGVyZGllID0g KCgxNiA8PCBkZW5zaXR5KSA8PCAyMCkgPj4gKHRoaXMtPmVyYXNlX3NoaWZ0KTsNCisJYmxrc3Bl cmRpZSA+Pj0gT05FTkFORF9JU19ERFAodGhpcykgPyAxIDogMDsNCisJbWF4YmRyeSA9IGJsa3Nw ZXJkaWUgLSAxOw0KKwllcmFzZXNoaWZ0ID0gdGhpcy0+ZXJhc2Vfc2hpZnQgLSAxOw0KKw0KKwl0 aGlzLT5jaGlwc2l6ZSA9IDA7DQorCW10ZC0+bnVtZXJhc2VyZWdpb25zID0gdGhpcy0+ZGllcyA8 PCAxOw0KKw0KKwkvKiBUaGlzIGZpbGxzIHVwIHRoZSBkZXZpY2UgYm91bmRhcnkgKi8NCisJZmxl eG9uZW5hbmRfZ2V0X2JvdW5kYXJ5KG10ZCk7DQorCWRpZSA9IG9mcyA9IDA7DQorCWkgPSAtMTsN CisJZm9yICg7IGRpZSA8IHRoaXMtPmRpZXM7IGRpZSsrKSB7DQorCQlpZiAoIWRpZSB8fCB0aGlz LT5ib3VuZGFyeVtkaWUtMV0gIT0gbWF4YmRyeSkgew0KKwkJCWkrKzsNCisJCQltdGQtPmVyYXNl cmVnaW9uc1tpXS5vZmZzZXQgPSBvZnM7DQorCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0uZXJhc2Vz aXplID0gMSA8PCBlcmFzZXNoaWZ0Ow0KKwkJCW10ZC0+ZXJhc2VyZWdpb25zW2ldLm51bWJsb2Nr cyA9DQorCQkJCQkJCXRoaXMtPmJvdW5kYXJ5W2RpZV0gKyAxOw0KKwkJCW9mcyArPSBtdGQtPmVy YXNlcmVnaW9uc1tpXS5udW1ibG9ja3MgPDwgZXJhc2VzaGlmdDsNCisJCQllcmFzZXNoaWZ0Kys7 DQorCQl9IGVsc2Ugew0KKwkJCW10ZC0+bnVtZXJhc2VyZWdpb25zIC09IDE7DQorCQkJbXRkLT5l cmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzICs9DQorCQkJCQkJCXRoaXMtPmJvdW5kYXJ5W2RpZV0g KyAxOw0KKwkJCW9mcyArPSAodGhpcy0+Ym91bmRhcnlbZGllXSArIDEpIDw8IChlcmFzZXNoaWZ0 IC0gMSk7DQorCQl9DQorCQlpZiAodGhpcy0+Ym91bmRhcnlbZGllXSAhPSBtYXhiZHJ5KSB7DQor CQkJaSsrOw0KKwkJCW10ZC0+ZXJhc2VyZWdpb25zW2ldLm9mZnNldCA9IG9mczsNCisJCQltdGQt PmVyYXNlcmVnaW9uc1tpXS5lcmFzZXNpemUgPSAxIDw8IGVyYXNlc2hpZnQ7DQorCQkJbXRkLT5l cmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzID0gbWF4YmRyeSBeDQorCQkJCQkJCSB0aGlzLT5ib3Vu ZGFyeVtkaWVdOw0KKwkJCW9mcyArPSBtdGQtPmVyYXNlcmVnaW9uc1tpXS5udW1ibG9ja3MgPDwg ZXJhc2VzaGlmdDsNCisJCQllcmFzZXNoaWZ0LS07DQorCQl9IGVsc2UNCisJCQltdGQtPm51bWVy YXNlcmVnaW9ucyAtPSAxOw0KKwl9DQorDQorCW10ZC0+ZXJhc2VzaXplID0gMSA8PCAodGhpcy0+ ZXJhc2Vfc2hpZnQpOw0KKwlpZiAobXRkLT5udW1lcmFzZXJlZ2lvbnMgPT0gMSkNCisJCW10ZC0+ ZXJhc2VzaXplID4+PSAxOw0KKw0KKwlwcmludGsoS0VSTl9JTkZPICJEZXZpY2UgaGFzICVkIGVy YXNlcmVnaW9uc1xuIiwgbXRkLT5udW1lcmFzZXJlZ2lvbnMpOw0KKwlmb3IgKGkgPSAwOyBpIDwg bXRkLT5udW1lcmFzZXJlZ2lvbnM7IGkrKykNCisJCXByaW50ayhLRVJOX0lORk8gIltvZmZzZXQ6 IDB4JTA4eCwgZXJhc2VzaXplOiAweCUwNXgsIg0KKwkJCSAiIG51bWJsb2NrczogJTA0dV1cbiIs IG10ZC0+ZXJhc2VyZWdpb25zW2ldLm9mZnNldCwNCisJCQltdGQtPmVyYXNlcmVnaW9uc1tpXS5l cmFzZXNpemUsDQorCQkJbXRkLT5lcmFzZXJlZ2lvbnNbaV0ubnVtYmxvY2tzKTsNCisNCisJZm9y IChkaWUgPSAwLCBtdGQtPnNpemUgPSAwOyBkaWUgPCB0aGlzLT5kaWVzOyBkaWUrKykgew0KKwkJ dGhpcy0+ZGllc2l6ZVtkaWVdID0gKGJsa3NwZXJkaWUgPDwgdGhpcy0+ZXJhc2Vfc2hpZnQpOw0K KwkJdGhpcy0+ZGllc2l6ZVtkaWVdIC09ICh0aGlzLT5ib3VuZGFyeVtkaWVdICsgMSkNCisJCQkJ CQkgPDwgKHRoaXMtPmVyYXNlX3NoaWZ0IC0gMSk7DQorCQltdGQtPnNpemUgKz0gdGhpcy0+ZGll c2l6ZVtkaWVdOw0KKwl9DQorDQorCS8qIHRoaXMtPmNoaXBzaXplIHJlcHJlc2VudHMgbWF4aW11 bSBwb3NzaWJsZSBjaGlwIHNpemUgKi8NCisJdGhpcy0+Y2hpcHNpemUgPSAoMTYgPDwgZGVuc2l0 eSkgPDwgMjA7DQorfQ0KKw0KKy8qKg0KKyAqIGZsZXhvbmVuYW5kX3NldF9ib3VuZGFyeQktIFdy aXRlcyB0aGUgU0xDIGJvdW5kYXJ5DQorICogQHBhcmFtIG9uZW5hbmRfaW5mbwkJLSBvbmVuYW5k IGluZm8gc3RydWN0dXJlDQorICovDQorc3RhdGljIGludCBmbGV4b25lbmFuZF9zZXRfYm91bmRh cnkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVuc2lnbmVkIGRpZSwNCisJCQkJCQlpbnQgYm91bmRh cnksIGludCBsb2NrKQ0KK3sNCisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJp djsNCisJaW50IHJldCwgZGVuc2l0eSwgYmxrc3BlcmRpZTsNCisJbG9mZl90IGFkZHI7DQorDQor CWRlbnNpdHkgPSBvbmVuYW5kX2dldF9kZW5zaXR5KHRoaXMtPmRldmljZV9pZCk7DQorCWJsa3Nw ZXJkaWUgPSAoKDE2IDw8IGRlbnNpdHkpIDw8IDIwKSA+PiB0aGlzLT5lcmFzZV9zaGlmdDsNCisJ Ymxrc3BlcmRpZSA+Pj0gT05FTkFORF9JU19ERFAodGhpcykgPyAxIDogMDsNCisNCisJcHJpbnRr KEtFUk5fSU5GTyAiQ2hhbmdpbmcgZGllICVkIGJvdW5kYXJ5OiAlZCVzXG4iLCBkaWUsIGJvdW5k YXJ5LA0KKwkJCQkJIGxvY2sgPyAiKExvY2tlZCkiIDogIihVbmxvY2tlZCkiKTsNCisJaWYgKGJv dW5kYXJ5ID49IGJsa3NwZXJkaWUpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBib3Vu ZGFyeSB2YWx1ZS5cDQorCQkJCQkJIEJvdW5kYXJ5IG5vdCBjaGFuZ2VkLlxuIik7DQorCQlyZXR1 cm4gLTE7DQorCX0NCisNCisJaWYgKHRoaXMtPmJvdW5kYXJ5X2xvY2tlZFtkaWVdKSB7DQorCQlw cmludGsoS0VSTl9FUlIgIkRpZSBib3VuZGFyeSBpcyBsb2NrZWQuXA0KKwkJCQkJCSBCb3VuZGFy eSBub3QgY2hhbmdlZC5cbiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9DQorDQorCWFkZHIgPSBkaWUg PyB0aGlzLT5kaWVzaXplWzBdIDogMDsNCisNCisJYm91bmRhcnkgJj0gRkxFWE9ORU5BTkRfUElf TUFTSzsNCisJYm91bmRhcnkgfD0gbG9jayA/IDAgOiAoMyA8PCBGTEVYT05FTkFORF9QSV9VTkxP Q0tfU0hJRlQpOw0KKw0KKwl0aGlzLT5jb21tYW5kKG10ZCwgRkxFWE9ORU5BTkRfQ01EX1BJX0FD Q0VTUywgYWRkciwgMCk7DQorCXRoaXMtPndhaXQobXRkLCBGTF9TWU5DSU5HKTsNCisNCisJdGhp cy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0VSQVNFLCBhZGRyLCAwKTsNCisJdGhpcy0+d2Fp dChtdGQsIEZMX0VSQVNJTkcpOw0KKw0KKwl0aGlzLT53cml0ZV93b3JkKGJvdW5kYXJ5LCB0aGlz LT5iYXNlICsgT05FTkFORF9EQVRBUkFNKTsNCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRf Q01EX1BST0csIGFkZHIsIDApOw0KKwlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfV1JJVElORyk7 DQorCWlmIChyZXQpIHsNCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIFBJIHdyaXRlIGZvciBE aWUgJWRcbiIsIGRpZSk7DQorCQlnb3RvIG91dDsNCisJfQ0KKw0KKwl0aGlzLT5jb21tYW5kKG10 ZCwgRkxFWE9ORU5BTkRfQ01EX1BJX1VQREFURSwgZGllLCAwKTsNCisJcmV0ID0gdGhpcy0+d2Fp dChtdGQsIEZMX1dSSVRJTkcpOw0KKwlpZiAocmV0KQ0KKwkJcHJpbnRrKEtFUk5fRVJSICJGYWls ZWQgUEkgdXBkYXRlIGZvciBEaWUgJWRcbiIsIGRpZSk7DQorCWVsc2UNCisJCXByaW50ayhLRVJO X0lORk8gIkRvbmVcbiIpOw0KK291dDoNCisJdGhpcy0+d3JpdGVfd29yZChPTkVOQU5EX0NNRF9S RVNFVCwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0NPTU1BTkQpOw0KKwl0aGlzLT53YWl0KG10 ZCwgRkxfUkVTRVRJTkcpOw0KKwlpZiAoIXJldCkNCisJCS8qIFJlY2FsY3VsYXRlIGRldmljZSBz aXplIG9uIGJvdW5kYXJ5IGNoYW5nZSovDQorCQlnZXRfZmxleG9uZW5hbmRfc2l6ZShtdGQpOw0K KwlyZXR1cm4gcmV0Ow0KK30NCisNCisvKioNCiAgKiBvbmVuYW5kX3Byb2JlIC0gW09uZU5BTkQg SW50ZXJmYWNlXSBQcm9iZSB0aGUgT25lTkFORCBkZXZpY2UNCiAgKiBAcGFyYW0gbXRkCQlNVEQg ZGV2aWNlIHN0cnVjdHVyZQ0KICAqDQpAQCAtMjU5OSw2ICszMDQ0LDcgQEANCiAJbWFmX2lkID0g dGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19NQU5VRkFDVFVSRVJfSUQp Ow0KIAlkZXZfaWQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0RF VklDRV9JRCk7DQogCXZlcl9pZCA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFO RF9SRUdfVkVSU0lPTl9JRCk7DQorCXRoaXMtPnRlY2hub2xvZ3kgPSB0aGlzLT5yZWFkX3dvcmQo dGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1RFQ0hOT0xPR1kpOw0KIA0KIAkvKiBDaGVjayBPbmVO QU5EIGRldmljZSAqLw0KIAlpZiAobWFmX2lkICE9IGJyYW1fbWFmX2lkIHx8IGRldl9pZCAhPSBi cmFtX2Rldl9pZCkNCkBAIC0yNjEwLDIwICszMDU2LDM0IEBADQogCXRoaXMtPnZlcnNpb25faWQg PSB2ZXJfaWQ7DQogDQogCWRlbnNpdHkgPSBvbmVuYW5kX2dldF9kZW5zaXR5KGRldl9pZCk7DQot CXRoaXMtPmNoaXBzaXplID0gKDE2IDw8IGRlbnNpdHkpIDw8IDIwOw0KKwlpZiAoRkxFWE9ORU5B TkQodGhpcykpIHsNCisJCXRoaXMtPmRpZXMgPSBPTkVOQU5EX0lTX0REUCh0aGlzKSA/IDIgOiAx Ow0KKwkJLyogTWF4aW11bSBwb3NzaWJsZSBlcmFzZSByZWdpb25zICovDQorCQltdGQtPm51bWVy YXNlcmVnaW9ucyA9IHRoaXMtPmRpZXMgPDwgMTsNCisJCW10ZC0+ZXJhc2VyZWdpb25zID0ga3ph bGxvYyhzaXplb2Yoc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbykNCisJCQkJCSogKHRoaXMt PmRpZXMgPDwgMSksIEdGUF9LRVJORUwpOw0KKwkJaWYgKCFtdGQtPmVyYXNlcmVnaW9ucykNCisJ CQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKwl0aGlzLT5jaGlwc2l6ZSA9IEZMRVhPTkVOQU5EKHRo aXMpID8gMCA6ICgxNiA8PCBkZW5zaXR5KSA8PCAyMDsNCiAJLyogU2V0IGRlbnNpdHkgbWFzay4g aXQgaXMgdXNlZCBmb3IgRERQICovDQogCWlmIChPTkVOQU5EX0lTX0REUCh0aGlzKSkNCi0JCXRo aXMtPmRlbnNpdHlfbWFzayA9ICgxIDw8IChkZW5zaXR5ICsgNikpOw0KKwkJdGhpcy0+ZGVuc2l0 eV9tYXNrID0gKDEgPDwgKGRlbnNpdHkgKw0KKwkJCQkJCSAoRkxFWE9ORU5BTkQodGhpcykgPyA0 IDogNikpKTsNCiAJZWxzZQ0KIAkJdGhpcy0+ZGVuc2l0eV9tYXNrID0gMDsNCiANCiAJLyogT25l TkFORCBwYWdlIHNpemUgJiBibG9jayBzaXplICovDQogCS8qIFRoZSBkYXRhIGJ1ZmZlciBzaXpl IGlzIGVxdWFsIHRvIHBhZ2Ugc2l6ZSAqLw0KIAltdGQtPndyaXRlc2l6ZSA9IHRoaXMtPnJlYWRf d29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfREFUQV9CVUZGRVJfU0laRSk7DQorCS8qIFdl IHVzZSB0aGUgZnVsbCBCdWZmZXJSQU0gKi8NCisJaWYgKE9ORU5BTkRfSVNfTUxDKHRoaXMpKQ0K KwkJbXRkLT53cml0ZXNpemUgPDw9IDE7DQorDQogCW10ZC0+b29ic2l6ZSA9IG10ZC0+d3JpdGVz aXplID4+IDU7DQogCS8qIFBhZ2VzIHBlciBhIGJsb2NrIGFyZSBhbHdheXMgNjQgaW4gT25lTkFO RCAqLw0KIAltdGQtPmVyYXNlc2l6ZSA9IG10ZC0+d3JpdGVzaXplIDw8IDY7DQotDQorCW10ZC0+ ZXJhc2VzaXplIDw8PSBGTEVYT05FTkFORCh0aGlzKSA/IDEgOiAwOw0KIAl0aGlzLT5lcmFzZV9z aGlmdCA9IGZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOw0KIAl0aGlzLT5wYWdlX3NoaWZ0ID0gZmZz KG10ZC0+d3JpdGVzaXplKSAtIDE7DQogCXRoaXMtPnBhZ2VfbWFzayA9ICgxIDw8ICh0aGlzLT5l cmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7DQpAQCAtMjYzMiw3ICszMDkyLDIw IEBADQogDQogCS8qIFJFVklTVDogTXVsdGljaGlwIGhhbmRsaW5nICovDQogDQotCW10ZC0+c2l6 ZSA9IHRoaXMtPmNoaXBzaXplOw0KKwlpZiAoRkxFWE9ORU5BTkQodGhpcykpIHsNCisJCXVuc2ln bmVkIGRpZTsNCisNCisJCWdldF9mbGV4b25lbmFuZF9zaXplKG10ZCk7DQorDQorCQkvKiBDaGFu Z2UgdGhlIGRldmljZSBib3VuZGFyaWVzIGlmIHJlcXVpcmVkICovDQorCQlmb3IgKGRpZSA9IDA7 IGRpZSA8IHRoaXMtPmRpZXM7IGRpZSsrKQ0KKwkJCWlmICgoIXRoaXMtPmJvdW5kYXJ5X2xvY2tl ZFtkaWVdKSAmJg0KKwkJCSAgIChib3VuZGFyeVtkaWVdID49IDApICYmDQorCQkJICAgKGJvdW5k YXJ5W2RpZV0gIT0gdGhpcy0+Ym91bmRhcnlbZGllXSkpDQorCQkJCWZsZXhvbmVuYW5kX3NldF9i b3VuZGFyeShtdGQsIGRpZSwNCisJCQkJCQkgYm91bmRhcnlbZGllXSwgbG9ja1tkaWVdKTsNCisJ fSBlbHNlDQorCQltdGQtPnNpemUgPSB0aGlzLT5jaGlwc2l6ZTsNCiANCiAJLyogQ2hlY2sgT25l TkFORCBmZWF0dXJlcyAqLw0KIAlvbmVuYW5kX2NoZWNrX2ZlYXR1cmVzKG10ZCk7DQpAQCAtMjc0 OSw2ICszMjIyLDEwIEBADQogCSAqIEFsbG93IHN1YnBhZ2Ugd3JpdGVzIHVwIHRvIG9vYnNpemUu DQogCSAqLw0KIAlzd2l0Y2ggKG10ZC0+b29ic2l6ZSkgew0KKwljYXNlIDEyODoNCisJCXRoaXMt PmVjY2xheW91dCA9ICZvbmVuYW5kX29vYl8xMjg7DQorCQltdGQtPnN1YnBhZ2Vfc2Z0ID0gMDsN CisJCWJyZWFrOw0KIAljYXNlIDY0Og0KIAkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29i XzY0Ow0KIAkJbXRkLT5zdWJwYWdlX3NmdCA9IDI7DQpAQCAtMjc2OCw2ICszMjQ1LDEwIEBADQog CQlicmVhazsNCiAJfQ0KIA0KKwkvKiBEb24ndCBhbGxvdyB0aGUgc3ViLXBhZ2Ugd3JpdGUgaW4g TUxDICovDQorCWlmIChPTkVOQU5EX0lTX01MQyh0aGlzKSkNCisJCW10ZC0+c3VicGFnZV9zZnQg PSAwOw0KKw0KIAl0aGlzLT5zdWJwYWdlc2l6ZSA9IG10ZC0+d3JpdGVzaXplID4+IG10ZC0+c3Vi cGFnZV9zZnQ7DQogDQogCS8qDQpAQCAtMjgxMiw3ICszMjkzLDggQEANCiAJbXRkLT5vd25lciA9 IFRISVNfTU9EVUxFOw0KIA0KIAkvKiBVbmxvY2sgd2hvbGUgYmxvY2sgKi8NCi0Jb25lbmFuZF91 bmxvY2tfYWxsKG10ZCk7DQorCUZMRVhPTkVOQU5EKHRoaXMpID8gZmxleG9uZW5hbmRfdW5sb2Nr X2FsbChtdGQpDQorCQkJIDogb25lbmFuZF91bmxvY2tfYWxsKG10ZCk7DQogDQogCXJldHVybiB0 aGlzLT5zY2FuX2JidChtdGQpOw0KIH0NCkBAIC0yODQzLDYgKzMzMjUsOCBAQA0KIAkJa2ZyZWUo dGhpcy0+cGFnZV9idWYpOw0KIAlpZiAodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfT09CQlVGX0FM TE9DKQ0KIAkJa2ZyZWUodGhpcy0+b29iX2J1Zik7DQorCWlmIChGTEVYT05FTkFORCh0aGlzKSkN CisJCWtmcmVlKG10ZC0+ZXJhc2VyZWdpb25zKTsNCiB9DQogDQogRVhQT1JUX1NZTUJPTF9HUEwo b25lbmFuZF9zY2FuKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRf YmJ0LmMgYi9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMNCi0tLSBhL2RyaXZlcnMv bXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYw0KKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVu YW5kX2JidC5jDQpAQCAtNjAsNiArNjAsNyBAQA0KIAlzdHJ1Y3QgYmJtX2luZm8gKmJibSA9IHRo aXMtPmJibTsNCiAJaW50IGksIGosIG51bWJsb2NrcywgbGVuLCBzY2FubGVuOw0KIAlpbnQgc3Rh cnRibG9jazsNCisJdW5zaWduZWQgc2xjOw0KIAlsb2ZmX3QgZnJvbTsNCiAJc2l6ZV90IHJlYWRs ZW4sIG9vYmxlbjsNCiAJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsNCkBAIC03Niw3ICs3Nyw3IEBA DQogCS8qIE5vdGUgdGhhdCBudW1ibG9ja3MgaXMgMiAqIChyZWFsIG51bWJsb2NrcykgaGVyZTsN CiAJICogc2VlIGkgKz0gMiBiZWxvdyBhcyBpdCBtYWtzZXMgc2hpZnRpbmcgYW5kIG1hc2tpbmcg bGVzcyBwYWluZnVsDQogCSAqLw0KLQludW1ibG9ja3MgPSBtdGQtPnNpemUgPj4gKGJibS0+YmJ0 X2VyYXNlX3NoaWZ0IC0gMSk7DQorCW51bWJsb2NrcyA9IHRoaXMtPmNoaXBzaXplID4+IChiYm0t PmJidF9lcmFzZV9zaGlmdCAtIDEpOw0KIAlzdGFydGJsb2NrID0gMDsNCiAJZnJvbSA9IDA7DQog DQpAQCAtMTA2LDcgKzEwNywxMyBAQA0KIAkJCX0NCiAJCX0NCiAJCWkgKz0gMjsNCi0JCWZyb20g Kz0gKDEgPDwgYmJtLT5iYnRfZXJhc2Vfc2hpZnQpOw0KKwkJaWYgKEZMRVhPTkVOQU5EKHRoaXMp KSB7DQorCQkJb25lbmFuZF9nZXRfYmxvY2sobXRkLCBmcm9tLCAmc2xjKTsNCisJCQlmcm9tICs9 ICgxIDw8IGJibS0+YmJ0X2VyYXNlX3NoaWZ0KSA+PiAxOw0KKwkJCWlmICghc2xjKQ0KKwkJCQlm cm9tICs9ICgxIDw8IGJibS0+YmJ0X2VyYXNlX3NoaWZ0KSA+PiAxOw0KKwkJfSBlbHNlDQorCQkJ ZnJvbSArPSAoMSA8PCBiYm0tPmJidF9lcmFzZV9zaGlmdCk7DQogCX0NCiANCiAJcmV0dXJuIDA7 DQpAQCAtMTQzLDcgKzE1MCw3IEBADQogCXVpbnQ4X3QgcmVzOw0KIA0KIAkvKiBHZXQgYmxvY2sg bnVtYmVyICogMiAqLw0KLQlibG9jayA9IChpbnQpIChvZmZzID4+IChiYm0tPmJidF9lcmFzZV9z aGlmdCAtIDEpKTsNCisJYmxvY2sgPSAoaW50KSAob25lbmFuZF9nZXRfYmxvY2sobXRkLCBvZmZz LCBOVUxMKSA8PCAxKTsNCiAJcmVzID0gKGJibS0+YmJ0W2Jsb2NrID4+IDNdID4+IChibG9jayAm IDB4MDYpKSAmIDB4MDM7DQogDQogCURFQlVHKE1URF9ERUJVR19MRVZFTDIsICJvbmVuYW5kX2lz YmFkX2JidDogYmJ0IGluZm8gZm9yIG9mZnMgMHglMDh4OiAoYmxvY2sgJWQpIDB4JTAyeFxuIiwN CkBAIC0xNzgsNyArMTg1LDcgQEANCiAJc3RydWN0IGJibV9pbmZvICpiYm0gPSB0aGlzLT5iYm07 DQogCWludCBsZW4sIHJldCA9IDA7DQogDQotCWxlbiA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+ZXJh c2Vfc2hpZnQgKyAyKTsNCisJbGVuID0gdGhpcy0+Y2hpcHNpemUgPj4gKHRoaXMtPmVyYXNlX3No aWZ0ICsgMik7DQogCS8qIEFsbG9jYXRlIG1lbW9yeSAoMmJpdCBwZXIgYmxvY2spIGFuZCBjbGVh ciB0aGUgbWVtb3J5IGJhZCBibG9jayB0YWJsZSAqLw0KIAliYm0tPmJidCA9IGt6YWxsb2MobGVu LCBHRlBfS0VSTkVMKTsNCiAJaWYgKCFiYm0tPmJidCkgew0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL29uZW5hbmQvb25lbmFuZF9zaW0uYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9z aW0uYw0KLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX3NpbS5jDQorKysgYi9kcml2 ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfc2ltLmMNCkBAIC02LDYgKzYsMTAgQEANCiAgKiAgQ29w eXJpZ2h0IMKpIDIwMDUtMjAwNyBTYW1zdW5nIEVsZWN0cm9uaWNzDQogICogIEt5dW5nbWluIFBh cmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+DQogICoNCisgKiAgVmlzaGFrIEcgPHZpc2hh ay5nQHNhbXN1bmcuY29tPiwgUm9oaXQgSGFnYXJndW5kZ2kgPGgucm9oaXRAc2Ftc3VuZy5jb20+ DQorICogIEZsZXgtT25lTkFORCBzaW11bGF0b3Igc3VwcG9ydA0KKyAqICBDb3B5cmlnaHQgKEMp IFNhbXN1bmcgRWxlY3Ryb25pY3MsIDIwMDgNCisgKg0KICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMNCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4NCkBA IC0yNCwxNiArMjgsMzggQEANCiAjaWZuZGVmIENPTkZJR19PTkVOQU5EX1NJTV9NQU5VRkFDVFVS RVINCiAjZGVmaW5lIENPTkZJR19PTkVOQU5EX1NJTV9NQU5VRkFDVFVSRVIgICAgICAgICAweGVj DQogI2VuZGlmDQorDQogI2lmbmRlZiBDT05GSUdfT05FTkFORF9TSU1fREVWSUNFX0lEDQogI2Rl ZmluZSBDT05GSUdfT05FTkFORF9TSU1fREVWSUNFX0lEICAgICAgICAgICAgMHgwNA0KICNlbmRp Zg0KKw0KKyNkZWZpbmUgQ09ORklHX0ZMRVhPTkVOQU5EICgoQ09ORklHX09ORU5BTkRfU0lNX0RF VklDRV9JRCA+PiA5KSAmIDEpDQorDQogI2lmbmRlZiBDT05GSUdfT05FTkFORF9TSU1fVkVSU0lP Tl9JRA0KICNkZWZpbmUgQ09ORklHX09ORU5BTkRfU0lNX1ZFUlNJT05fSUQgICAgICAgICAgIDB4 MWUNCiAjZW5kaWYNCiANCisjaWZuZGVmIENPTkZJR19PTkVOQU5EX1NJTV9URUNITk9MT0dZX0lE DQorI2RlZmluZSBDT05GSUdfT05FTkFORF9TSU1fVEVDSE5PTE9HWV9JRCBDT05GSUdfRkxFWE9O RU5BTkQNCisjZW5kaWYNCisNCisvKiBJbml0aWFsIGJvdW5kYXJ5IHZhbHVlcyBmb3IgRmxleC1P bmVOQU5EIFNpbXVsYXRvciAqLw0KKyNpZm5kZWYgQ09ORklHX0ZMRVhPTkVOQU5EX1NJTV9ESUUw X0JPVU5EQVJZDQorI2RlZmluZSBDT05GSUdfRkxFWE9ORU5BTkRfU0lNX0RJRTBfQk9VTkRBUlkJ MHgwMQ0KKyNlbmRpZg0KKw0KKyNpZm5kZWYgQ09ORklHX0ZMRVhPTkVOQU5EX1NJTV9ESUUxX0JP VU5EQVJZDQorI2RlZmluZSBDT05GSUdfRkxFWE9ORU5BTkRfU0lNX0RJRTFfQk9VTkRBUlkJMHgw MQ0KKyNlbmRpZg0KKw0KIHN0YXRpYyBpbnQgbWFudWZfaWQJPSBDT05GSUdfT05FTkFORF9TSU1f TUFOVUZBQ1RVUkVSOw0KIHN0YXRpYyBpbnQgZGV2aWNlX2lkCT0gQ09ORklHX09ORU5BTkRfU0lN X0RFVklDRV9JRDsNCiBzdGF0aWMgaW50IHZlcnNpb25faWQJPSBDT05GSUdfT05FTkFORF9TSU1f VkVSU0lPTl9JRDsNCitzdGF0aWMgaW50IHRlY2hub2xvZ3lfaWQgPSBDT05GSUdfT05FTkFORF9T SU1fVEVDSE5PTE9HWV9JRDsNCitzdGF0aWMgaW50IGJvdW5kYXJ5W10gPSB7DQorCUNPTkZJR19G TEVYT05FTkFORF9TSU1fRElFMF9CT1VOREFSWSwNCisJQ09ORklHX0ZMRVhPTkVOQU5EX1NJTV9E SUUxX0JPVU5EQVJZLA0KK307DQogDQogc3RydWN0IG9uZW5hbmRfZmxhc2ggew0KIAl2b2lkIF9f aW9tZW0gKmJhc2U7DQpAQCAtNTcsMTIgKzgzLDE4IEBADQogCSh3cml0ZXcodiwgdGhpcy0+YmFz ZSArIE9ORU5BTkRfUkVHX1dQX1NUQVRVUykpDQogDQogLyogSXQgaGFzIGFsbCAweGZmIGNoYXJz ICovDQotI2RlZmluZSBNQVhfT05FTkFORF9QQUdFU0laRQkJKDIwNDggKyA2NCkNCisjZGVmaW5l IE1BWF9PTkVOQU5EX1BBR0VTSVpFCQkoNDA5NiArIDEyOCkNCiBzdGF0aWMgdW5zaWduZWQgY2hh ciAqZmZjaGFyczsNCiANCisjaWYgQ09ORklHX0ZMRVhPTkVOQU5EDQorI2RlZmluZSBQQVJUSVRJ T05fTkFNRSAiRmxleC1PbmVOQU5EIHNpbXVsYXRvciBwYXJ0aXRpb24iDQorI2Vsc2UNCisjZGVm aW5lIFBBUlRJVElPTl9OQU1FICJPbmVOQU5EIHNpbXVsYXRvciBwYXJ0aXRpb24iDQorI2VuZGlm DQorDQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9zX3BhcnRpdGlvbnNbXSA9IHsNCiAJ ew0KLQkJLm5hbWUJCT0gIk9uZU5BTkQgc2ltdWxhdG9yIHBhcnRpdGlvbiIsDQorCQkubmFtZQkJ PSBQQVJUSVRJT05fTkFNRSwNCiAJCS5vZmZzZXQJCT0gMCwNCiAJCS5zaXplCQk9IE1URFBBUlRf U0laX0ZVTEwsDQogCX0sDQpAQCAtMTA0LDYgKzEzNiw3IEBADQogDQogCXN3aXRjaCAoY21kKSB7 DQogCWNhc2UgT05FTkFORF9DTURfVU5MT0NLOg0KKwljYXNlIE9ORU5BTkRfQ01EX1VOTE9DS19B TEw6DQogCQlpZiAoYmxvY2tfbG9ja19zY2hlbWUpDQogCQkJT05FTkFORF9TRVRfV1BfU1RBVFVT KE9ORU5BTkRfV1BfVVMsIHRoaXMpOw0KIAkJZWxzZQ0KQEAgLTIyOCwxMCArMjYxLDExIEBADQog ew0KIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9ICZpbmZvLT5tdGQ7DQogCXN0cnVjdCBvbmVuYW5k X2ZsYXNoICpmbGFzaCA9IHRoaXMtPnByaXY7DQotCWludCBtYWluX29mZnNldCwgc3BhcmVfb2Zm c2V0Ow0KKwlpbnQgbWFpbl9vZmZzZXQsIHNwYXJlX29mZnNldCwgZGllID0gMDsNCiAJdm9pZCBf X2lvbWVtICpzcmM7DQogCXZvaWQgX19pb21lbSAqZGVzdDsNCi0JdW5zaWduZWQgaW50IGk7DQor CXVuc2lnbmVkIGludCBpLCBzbGMgPSAwOw0KKwlzdGF0aWMgaW50IHBpX29wZXJhdGlvbjsNCiAN CiAJaWYgKGRhdGFyYW0pIHsNCiAJCW1haW5fb2Zmc2V0ID0gbXRkLT53cml0ZXNpemU7DQpAQCAt MjQxLDEwICsyNzUsMjcgQEANCiAJCXNwYXJlX29mZnNldCA9IDA7DQogCX0NCiANCisJaWYgKHBp X29wZXJhdGlvbikgew0KKwkJZGllID0gcmVhZHcodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NU QVJUX0FERFJFU1MyKTsNCisJCWRpZSA+Pj0gT05FTkFORF9ERFBfU0hJRlQ7DQorCX0NCisNCiAJ c3dpdGNoIChjbWQpIHsNCisJY2FzZSBGTEVYT05FTkFORF9DTURfUElfQUNDRVNTOg0KKwkJcGlf b3BlcmF0aW9uID0gMTsNCisJCWJyZWFrOw0KKw0KKwljYXNlIE9ORU5BTkRfQ01EX1JFU0VUOg0K KwkJcGlfb3BlcmF0aW9uID0gMDsNCisJCWJyZWFrOw0KKw0KIAljYXNlIE9ORU5BTkRfQ01EX1JF QUQ6DQogCQlzcmMgPSBPTkVOQU5EX0NPUkUoZmxhc2gpICsgb2Zmc2V0Ow0KIAkJZGVzdCA9IE9O RU5BTkRfTUFJTl9BUkVBKHRoaXMsIG1haW5fb2Zmc2V0KTsNCisJCWlmIChwaV9vcGVyYXRpb24p IHsNCisJCQl3cml0ZXcoYm91bmRhcnlbZGllXSwgdGhpcy0+YmFzZSArIE9ORU5BTkRfREFUQVJB TSk7DQorCQkJYnJlYWs7DQorCQl9DQogCQltZW1jcHkoZGVzdCwgc3JjLCBtdGQtPndyaXRlc2l6 ZSk7DQogCQkvKiBGYWxsIHRocm91Z2ggKi8NCiANCkBAIC0yNTcsNiArMzA4LDEwIEBADQogCWNh c2UgT05FTkFORF9DTURfUFJPRzoNCiAJCXNyYyA9IE9ORU5BTkRfTUFJTl9BUkVBKHRoaXMsIG1h aW5fb2Zmc2V0KTsNCiAJCWRlc3QgPSBPTkVOQU5EX0NPUkUoZmxhc2gpICsgb2Zmc2V0Ow0KKwkJ aWYgKHBpX29wZXJhdGlvbikgew0KKwkJCWJvdW5kYXJ5W2RpZV0gPSByZWFkdyh0aGlzLT5iYXNl ICsgT05FTkFORF9EQVRBUkFNKTsNCisJCQlicmVhazsNCisJCX0NCiAJCS8qIFRvIGhhbmRsZSBw YXJ0aWFsIHdyaXRlICovDQogCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgbXRkLT5zdWJwYWdlX3Nm dCk7IGkrKykgew0KIAkJCWludCBvZmYgPSBpICogdGhpcy0+c3VicGFnZXNpemU7DQpAQCAtMjg0 LDkgKzMzOSwxNiBAQA0KIAkJYnJlYWs7DQogDQogCWNhc2UgT05FTkFORF9DTURfRVJBU0U6DQor CQlpZiAocGlfb3BlcmF0aW9uKQ0KKwkJCWJyZWFrOw0KKwkJb25lbmFuZF9nZXRfYmxvY2sobXRk LCBvZmZzZXQsICZzbGMpOw0KKwkJaWYgKHNsYyAmJiAobXRkLT5udW1lcmFzZXJlZ2lvbnMgPiAx KSkNCisJCQltdGQtPmVyYXNlc2l6ZSA+Pj0gMTsNCiAJCW1lbXNldChPTkVOQU5EX0NPUkUoZmxh c2gpICsgb2Zmc2V0LCAweGZmLCBtdGQtPmVyYXNlc2l6ZSk7DQogCQltZW1zZXQoT05FTkFORF9D T1JFX1NQQVJFKGZsYXNoLCB0aGlzLCBvZmZzZXQpLCAweGZmLA0KIAkJICAgICAgIChtdGQtPmVy YXNlc2l6ZSA+PiA1KSk7DQorCQlpZiAoc2xjICYmIChtdGQtPm51bWVyYXNlcmVnaW9ucyA+IDEp KQ0KKwkJCW10ZC0+ZXJhc2VzaXplIDw8PSAxOw0KIAkJYnJlYWs7DQogDQogCWRlZmF1bHQ6DQpA QCAtMjk1LDYgKzM1NywyOSBAQA0KIH0NCiANCiAvKioNCisgKiBmbGV4b25lbmFuZF9nZXRfYWRk ciAtIFJldHVybiBhZGRyZXNzIG9mIHRoZSBibG9jaw0KKyAqIEBibG9jazoJCUJsb2NrIG51bWJl ciBvbiBGbGV4LU9uZU5BTkQNCisgKg0KKyAqLw0KK2xvZmZfdCBmbGV4b25lbmFuZF9nZXRfYWRk cihzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzLCBpbnQgYmxvY2spDQorew0KKwlsb2ZmX3Qgb2Zz Ow0KKwlpbnQgZGllID0gMCwgYm91bmRhcnk7DQorDQorCW9mcyA9IDA7DQorCWlmIChPTkVOQU5E X0lTX0REUCh0aGlzKSAmJiBibG9jayA+PSB0aGlzLT5kZW5zaXR5X21hc2spIHsNCisJCWJsb2Nr IC09IHRoaXMtPmRlbnNpdHlfbWFzazsNCisJCWRpZSA9IDE7DQorCQlvZnMgPSB0aGlzLT5kaWVz aXplWzBdOw0KKwl9DQorCWJvdW5kYXJ5ID0gdGhpcy0+Ym91bmRhcnlbZGllXTsNCisJb2ZzICs9 IGJsb2NrIDw8ICh0aGlzLT5lcmFzZV9zaGlmdCAtIDEpOw0KKwlpZiAoYmxvY2sgPiAoYm91bmRh cnkgKyAxKSkNCisJCW9mcyArPSAoYmxvY2sgLSBib3VuZGFyeSAtIDEpIDw8ICh0aGlzLT5lcmFz ZV9zaGlmdCAtIDEpOw0KKwlyZXR1cm4gb2ZzOw0KK30NCisNCisvKioNCiAgKiBvbmVuYW5kX2Nv bW1hbmRfaGFuZGxlIC0gSGFuZGxlIGNvbW1hbmQNCiAgKiBAdGhpczoJCU9uZU5BTkQgZGV2aWNl IHN0cnVjdHVyZQ0KICAqIEBjbWQ6CQlUaGUgY29tbWFuZCB0byBiZSBzZW50DQpAQCAtMzM4LDgg KzQyMywxMiBAQA0KIAkJYnJlYWs7DQogCX0NCiANCi0JaWYgKGJsb2NrICE9IC0xKQ0KLQkJb2Zm c2V0ICs9IGJsb2NrIDw8IHRoaXMtPmVyYXNlX3NoaWZ0Ow0KKwlpZiAoYmxvY2sgIT0gLTEpIHsN CisJCWlmIChGTEVYT05FTkFORCh0aGlzKSkNCisJCQlvZmZzZXQgPSBmbGV4b25lbmFuZF9nZXRf YWRkcih0aGlzLCBibG9jayk7DQorCQllbHNlDQorCQkJb2Zmc2V0ICs9IGJsb2NrIDw8IHRoaXMt PmVyYXNlX3NoaWZ0Ow0KKwl9DQogDQogCWlmIChwYWdlICE9IC0xKQ0KIAkJb2Zmc2V0ICs9IHBh Z2UgPDwgdGhpcy0+cGFnZV9zaGlmdDsNCkBAIC0zOTAsNiArNDc5LDcgQEANCiAJfQ0KIA0KIAlk ZW5zaXR5ID0gZGV2aWNlX2lkID4+IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfU0hJRlQ7DQorCWRl bnNpdHkgJj0gT05FTkFORF9ERVZJQ0VfREVOU0lUWV9NQVNLOw0KIAlzaXplID0gKCgxNiA8PCAy MCkgPDwgZGVuc2l0eSk7DQogDQogCU9ORU5BTkRfQ09SRShmbGFzaCkgPSB2bWFsbG9jKHNpemUg KyAoc2l6ZSA+PiA1KSk7DQpAQCAtNDA1LDggKzQ5NSw5IEBADQogCXdyaXRldyhtYW51Zl9pZCwg Zmxhc2gtPmJhc2UgKyBPTkVOQU5EX1JFR19NQU5VRkFDVFVSRVJfSUQpOw0KIAl3cml0ZXcoZGV2 aWNlX2lkLCBmbGFzaC0+YmFzZSArIE9ORU5BTkRfUkVHX0RFVklDRV9JRCk7DQogCXdyaXRldyh2 ZXJzaW9uX2lkLCBmbGFzaC0+YmFzZSArIE9ORU5BTkRfUkVHX1ZFUlNJT05fSUQpOw0KKwl3cml0 ZXcodGVjaG5vbG9neV9pZCwgZmxhc2gtPmJhc2UgKyBPTkVOQU5EX1JFR19URUNITk9MT0dZKTsN CiANCi0JaWYgKGRlbnNpdHkgPCAyKQ0KKwlpZiAoZGVuc2l0eSA8IDIgJiYgKCFDT05GSUdfRkxF WE9ORU5BTkQpKQ0KIAkJYnVmZmVyX3NpemUgPSAweDA0MDA7CS8qIDFLaUIgcGFnZSAqLw0KIAll bHNlDQogCQlidWZmZXJfc2l6ZSA9IDB4MDgwMDsJLyogMktpQiBwYWdlICovDQpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFu ZC5oDQotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgNCisrKyBiL2luY2x1ZGUvbGlu dXgvbXRkL29uZW5hbmQuaA0KQEAgLTE3LDggKzE3LDI0IEBADQogI2luY2x1ZGUgPGxpbnV4L210 ZC9vbmVuYW5kX3JlZ3MuaD4NCiAjaW5jbHVkZSA8bGludXgvbXRkL2JibS5oPg0KIA0KKyNkZWZp bmUgTUFYX0RJRVMJCQkyDQogI2RlZmluZSBNQVhfQlVGRkVSUkFNCQkyDQogDQorLyoqDQorICog IEZsZXhPbmVOQU5EIGRldmljZSBib3VuZGFyeSBzZXR0aW5nDQorICogIFNldHRpbmcgLTEgd2ls bCBub3QgY2hhbmdlIHRoZSBib3VuZGFyeQ0KKyAqLw0KKyNkZWZpbmUgRkxFWE9ORU5BTkRfRElF MF9CT1VOREFSWQktMQ0KKyNkZWZpbmUgRkxFWE9ORU5BTkRfRElFMV9CT1VOREFSWQktMQ0KKw0K Ky8qKg0KKyAqICBTZXR0aW5nIHZhbHVlIDEgbG9ja3MgdGhlIGJvdW5kYXJ5DQorICogIFdBUk5J TkcgOiBPbmNlIGxvY2tlZCwgdGhlIGJvdW5kYXJ5IGNhbm5vdCBiZSBjaGFuZ2VkLg0KKyAqCSAg ICAgIFVzZSB3aXRoIGNhcmUuDQorICovDQorI2RlZmluZSBGTEVYT05FTkFORF9ESUUwX0lTTE9D S0VECTANCisjZGVmaW5lIEZMRVhPTkVOQU5EX0RJRTFfSVNMT0NLRUQJMA0KKw0KIC8qIFNjYW4g YW5kIGlkZW50aWZ5IGEgT25lTkFORCBkZXZpY2UgKi8NCiBleHRlcm4gaW50IG9uZW5hbmRfc2Nh bihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heF9jaGlwcyk7DQogLyogRnJlZSByZXNvdXJj ZXMgaGVsZCBieSB0aGUgT25lTkFORCBkZXZpY2UgKi8NCkBAIC01MSw2ICs2NywxMSBAQA0KIC8q Kg0KICAqIHN0cnVjdCBvbmVuYW5kX2NoaXAgLSBPbmVOQU5EIFByaXZhdGUgRmxhc2ggQ2hpcCBE YXRhDQogICogQGJhc2U6CQlbQk9BUkRTUEVDSUZJQ10gYWRkcmVzcyB0byBhY2Nlc3MgT25lTkFO RA0KKyAqIEBkaWVzOgkJW0lOVEVSTl1bRkxFWC1PTkVOQU5EXSBudW1iZXIgb2YgZGllcyBvbiBj aGlwDQorICogQGJvdW5kYXJ5OgkJW0lOVEVSTl1bRkxFWC1PTkVOQU5EXSBCb3VuZGFyeSBvZiB0 aGUgZGllcw0KKyAqIEBib3VuZGFyeV9sb2NrZWQ6CVtJTlRFUk5dW0ZMRVgtT05FTkFORF0gVFJV RSBpbmRpY2F0ZXMgZGllIGJvdW5kYXJ5DQorICogCQkJaXMgbG9ja2VkIGFuZCBjYW5ub3QgYmUg Y2hhbmdlZA0KKyAqIEBkaWVzaXplOgkJW0lOVEVSTl1bRkxFWC1PTkVOQU5EXSBTaXplIG9mIHRo ZSBkaWVzDQogICogQGNoaXBzaXplOgkJW0lOVEVSTl0gdGhlIHNpemUgb2Ygb25lIGNoaXAgZm9y IG11bHRpY2hpcCBhcnJheXMNCiAgKiBAZGV2aWNlX2lkOgkJW0lOVEVSTl0gZGV2aWNlIElEDQog ICogQGRlbnNpdHlfbWFzazoJY2hpcCBkZW5zaXR5LCB1c2VkIGZvciBERFAgZGV2aWNlcw0KQEAg LTkyLDkgKzExMywxNCBAQA0KICAqLw0KIHN0cnVjdCBvbmVuYW5kX2NoaXAgew0KIAl2b2lkIF9f aW9tZW0JCSpiYXNlOw0KKwl1bnNpZ25lZAkJZGllczsNCisJdW5zaWduZWQJCWJvdW5kYXJ5W01B WF9ESUVTXTsNCisJdW5zaWduZWQgaW50IAkJYm91bmRhcnlfbG9ja2VkW01BWF9ESUVTXTsNCisJ dW5zaWduZWQgaW50CQlkaWVzaXplW01BWF9ESUVTXTsNCiAJdW5zaWduZWQgaW50CQljaGlwc2l6 ZTsNCiAJdW5zaWduZWQgaW50CQlkZXZpY2VfaWQ7DQogCXVuc2lnbmVkIGludAkJdmVyc2lvbl9p ZDsNCisJdW5zaWduZWQgaW50CQl0ZWNobm9sb2d5Ow0KIAl1bnNpZ25lZCBpbnQJCWRlbnNpdHlf bWFzazsNCiAJdW5zaWduZWQgaW50CQlvcHRpb25zOw0KIA0KQEAgLTE0NSw2ICsxNzEsOCBAQA0K ICNkZWZpbmUgT05FTkFORF9TRVRfQlVGRkVSUkFNMCh0aGlzKQkJKHRoaXMtPmJ1ZmZlcnJhbV9p bmRleCA9IDApDQogI2RlZmluZSBPTkVOQU5EX1NFVF9CVUZGRVJSQU0xKHRoaXMpCQkodGhpcy0+ YnVmZmVycmFtX2luZGV4ID0gMSkNCiANCisjZGVmaW5lIEZMRVhPTkVOQU5EKHRoaXMpCQkJCQkJ XA0KKwkodGhpcy0+ZGV2aWNlX2lkICYgREVWSUNFX0lTX0ZMRVhPTkVOQU5EKQ0KICNkZWZpbmUg T05FTkFORF9HRVRfU1lTX0NGRzEodGhpcykJCQkJCVwNCiAJKHRoaXMtPnJlYWRfd29yZCh0aGlz LT5iYXNlICsgT05FTkFORF9SRUdfU1lTX0NGRzEpKQ0KICNkZWZpbmUgT05FTkFORF9TRVRfU1lT X0NGRzEodiwgdGhpcykJCQkJCVwNCkBAIC0xNTMsNiArMTgxLDkgQEANCiAjZGVmaW5lIE9ORU5B TkRfSVNfRERQKHRoaXMpCQkJCQkJXA0KIAkodGhpcy0+ZGV2aWNlX2lkICYgT05FTkFORF9ERVZJ Q0VfSVNfRERQKQ0KIA0KKyNkZWZpbmUgT05FTkFORF9JU19NTEModGhpcykJCQkJCQlcDQorCSh0 aGlzLT50ZWNobm9sb2d5ICYgT05FTkFORF9URUNITk9MT0dZX0lTX01MQykNCisNCiAjaWZkZWYg Q09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0NCiAjZGVmaW5lIE9ORU5BTkRfSVNfMlBMQU5F KHRoaXMpCQkJCQkJXA0KIAkodGhpcy0+b3B0aW9ucyAmIE9ORU5BTkRfSEFTXzJQTEFORSkNCkBA IC0xODksNSArMjIwLDcgQEANCiANCiBpbnQgb25lbmFuZF9iYnRfcmVhZF9vb2Ioc3RydWN0IG10 ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLA0KIAkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7 DQordW5zaWduZWQgb25lbmFuZF9nZXRfYmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZf dCBhZGRyLA0KKwkJCSB1bnNpZ25lZCAqaXNibGtzbGMpOw0KIA0KICNlbmRpZgkvKiBfX0xJTlVY X01URF9PTkVOQU5EX0ggKi8NCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5k X3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oDQotLS0gYS9pbmNsdWRl L2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaA0KKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFu ZF9yZWdzLmgNCkBAIC02Nyw2ICs2Nyw5IEBADQogLyoNCiAgKiBEZXZpY2UgSUQgUmVnaXN0ZXIg RjAwMWggKFIpDQogICovDQorI2RlZmluZSBERVZJQ0VfSVNfRkxFWE9ORU5BTkQJCSgxIDw8IDkp DQorI2RlZmluZSBGTEVYT05FTkFORF9QSV9NQVNLCQkoMHgzZmYpDQorI2RlZmluZSBGTEVYT05F TkFORF9QSV9VTkxPQ0tfU0hJRlQJKDE0KQ0KICNkZWZpbmUgT05FTkFORF9ERVZJQ0VfREVOU0lU WV9NQVNLCSgweGYpDQogI2RlZmluZSBPTkVOQU5EX0RFVklDRV9ERU5TSVRZX1NISUZUCSg0KQ0K ICNkZWZpbmUgT05FTkFORF9ERVZJQ0VfSVNfRERQCQkoMSA8PCAzKQ0KQEAgLTg0LDYgKzg3LDEx IEBADQogI2RlZmluZSBPTkVOQU5EX1ZFUlNJT05fUFJPQ0VTU19TSElGVAkoOCkNCiANCiAvKg0K KyAqIFRlY2hub2xvZ3kgUmVnaXN0ZXIgRjAwNmggKFIpDQorICovDQorI2RlZmluZSBPTkVOQU5E X1RFQ0hOT0xPR1lfSVNfTUxDCSgxIDw8IDApDQorDQorLyoNCiAgKiBTdGFydCBBZGRyZXNzIDEg RjEwMGggKFIvVykgJiBTdGFydCBBZGRyZXNzIDIgRjEwMWggKFIvVykNCiAgKi8NCiAjZGVmaW5l IE9ORU5BTkRfRERQX1NISUZUCQkoMTUpDQpAQCAtOTMsNyArMTAxLDggQEANCiAvKg0KICAqIFN0 YXJ0IEFkZHJlc3MgOCBGMTA3aCAoUi9XKQ0KICAqLw0KLSNkZWZpbmUgT05FTkFORF9GUEFfTUFT SwkJKDB4M2YpDQorLyogTm90ZTogSXQncyBhY3R1YWxseSAweDNmIGluIGNhc2Ugb2YgU0xDICov DQorI2RlZmluZSBPTkVOQU5EX0ZQQV9NQVNLCQkoMHg3ZikNCiAjZGVmaW5lIE9ORU5BTkRfRlBB X1NISUZUCQkoMikNCiAjZGVmaW5lIE9ORU5BTkRfRlNBX01BU0sJCSgweDAzKQ0KIA0KQEAgLTEw NSw3ICsxMTQsOCBAQA0KICNkZWZpbmUgT05FTkFORF9CU0FfQk9PVFJBTQkJKDAgPDwgMikNCiAj ZGVmaW5lIE9ORU5BTkRfQlNBX0RBVEFSQU0wCQkoMiA8PCAyKQ0KICNkZWZpbmUgT05FTkFORF9C U0FfREFUQVJBTTEJCSgzIDw8IDIpDQotI2RlZmluZSBPTkVOQU5EX0JTQ19NQVNLCQkoMHgwMykN CisvKiBOb3RlOiBJdCdzIGFjdHVhbGx5IDB4MDMgaW4gY2FzZSBvZiBTTEMgKi8NCisjZGVmaW5l IE9ORU5BTkRfQlNDX01BU0sJCSgweDA3KQ0KIA0KIC8qDQogICogQ29tbWFuZCBSZWdpc3RlciBG MjIwaCAoUi9XKQ0KQEAgLTEyNCw2ICsxMzQsOSBAQA0KICNkZWZpbmUgT05FTkFORF9DTURfUkVT RVQJCSgweEYwKQ0KICNkZWZpbmUgT05FTkFORF9DTURfT1RQX0FDQ0VTUwkJKDB4NjUpDQogI2Rl ZmluZSBPTkVOQU5EX0NNRF9SRUFESUQJCSgweDkwKQ0KKyNkZWZpbmUgRkxFWE9ORU5BTkRfQ01E X1BJX1VQREFURQkoMHgwNSkNCisjZGVmaW5lIEZMRVhPTkVOQU5EX0NNRF9QSV9BQ0NFU1MJKDB4 NjYpDQorI2RlZmluZSBGTEVYT05FTkFORF9DTURfUkVDT1ZFUl9MU0IJKDB4MDUpDQogDQogLyog Tk9URTogVGhvc2UgYXJlIG5vdCAqUkVBTCogY29tbWFuZHMgKi8NCiAjZGVmaW5lIE9ORU5BTkRf Q01EX0JVRkZFUlJBTQkJKDB4MTk3OCkNCkBAIC0xOTAsMTAgKzIwMywxMiBAQA0KICNkZWZpbmUg T05FTkFORF9FQ0NfMUJJVF9BTEwJCSgweDU1NTUpDQogI2RlZmluZSBPTkVOQU5EX0VDQ18yQklU CQkoMSA8PCAxKQ0KICNkZWZpbmUgT05FTkFORF9FQ0NfMkJJVF9BTEwJCSgweEFBQUEpDQorI2Rl ZmluZSBGTEVYT05FTkFORF9VTkNPUlJFQ1RBQkxFX0VSUk9SCSgweDEwMTApDQogDQogLyoNCiAg KiBPbmUtVGltZSBQcm9ncmFtbWFibGUgKE9UUCkNCiAgKi8NCisjZGVmaW5lIEZMRVhPTkVOQU5E X09UUF9MT0NLX09GRlNFVAkJKDIwNDgpDQogI2RlZmluZSBPTkVOQU5EX09UUF9MT0NLX09GRlNF VAkJKDE0KQ0KIA0KICNlbmRpZgkvKiBfX09ORU5BTkRfUkVHX0ggKi8NCmRpZmYgLS1naXQgYS9p bmNsdWRlL210ZC9tdGQtYWJpLmggYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgNCi0tLSBhL2luY2x1 ZGUvbXRkL210ZC1hYmkuaA0KKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oDQpAQCAtMTAyLDcg KzEwMiwxMSBAQA0KIAl1aW50MzJfdCB1c2VlY2M7DQogCXVpbnQzMl90IGVjY2J5dGVzOw0KIAl1 aW50MzJfdCBvb2JmcmVlWzhdWzJdOw0KKyNpZmRlZiBDT05GSUdfTVREX09ORU5BTkQNCisJdWlu dDMyX3QgZWNjcG9zWzEyOF07DQorI2Vsc2UNCiAJdWludDMyX3QgZWNjcG9zWzMyXTsNCisjZW5k aWYNCiB9Ow0KIA0KIHN0cnVjdCBuYW5kX29vYmZyZWUgew0KQEAgLTExNyw3ICsxMjEsMTEgQEAN CiAgKi8NCiBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgew0KIAl1aW50MzJfdCBlY2NieXRlczsNCisj aWZkZWYgQ09ORklHX01URF9PTkVOQU5EDQorCXVpbnQzMl90IGVjY3Bvc1sxMjhdOw0KKyNlbHNl DQogCXVpbnQzMl90IGVjY3Bvc1s2NF07DQorI2VuZGlmDQogCXVpbnQzMl90IG9vYmF2YWlsOw0K IAlzdHJ1Y3QgbmFuZF9vb2JmcmVlIG9vYmZyZWVbTVREX01BWF9PT0JGUkVFX0VOVFJJRVNdOw0K IH07DQoNCiA=