From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from [217.147.39.138] ([217.147.39.138]:58888 "EHLO [82.135.208.232]" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1757187AbZCXIRJ (ORCPT ); Tue, 24 Mar 2009 04:17:09 -0400 Message-ID: <49C88D83.20906@gmail.com> Date: Tue, 24 Mar 2009 09:36:35 +0200 From: Darius MIME-Version: 1.0 CC: linux-media@vger.kernel.org, Guennadi Liakhovetski , corbet@lwn.net, Jonathan Cameron Subject: [RFC] Another OV7670 Soc-camera driver Content-Type: multipart/mixed; boundary="------------060907030207010804010007" To: unlisted-recipients:; (no To-header on input) Sender: linux-media-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------060907030207010804010007 Content-Type: text/plain; charset=ISO-8859-13; format=flowed Content-Transfer-Encoding: 7bit Hi All, seems everybody has their own OV7670 driver... I have one written from scratch too. It is written using Omnivision user manual, application note, and register reference settings. Omnivision provides settings arrays for every resolution (VGA, QVGA, QQVGA, CIF, QCIF). This driver has lot of harcoded magic numbers. Of course OV7670 has lot of undocumented mystery and strange bugs. Maybe my work could be useful merging all available OV7670 drivers into single one. This driver is tested with MXLADS v2.0 board. So there it is: --- --------------060907030207010804010007 Content-Type: text/plain; name="patch-OV7670" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="patch-OV7670" RnJvbTogRGFyaXVzIEF1Z3VsaXMgPGF1Z3VsaXMuZGFyaXVzQGdtYWlsLmNvbT4KClNvYyBj YW1lcmEgZHJpdmVyIGZvciBPVjc2NzAgc2Vuc29yIGZyb20gT01OSVZJU0lPTi4KClNpZ25l ZC1vZmYtYnk6IERhcml1cyBBdWd1bGlzIDxhdWd1bGlzLmRhcml1c0BnbWFpbC5jb20+CgpJ bmRleDogbGludXgtMi42LjI5LXJjNS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gbGludXgtMi42LjI5LXJjNS5vcmlnL2RyaXZlcnMvbWVkaWEvdmlk ZW8vS2NvbmZpZworKysgbGludXgtMi42LjI5LXJjNS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tj b25maWcKQEAgLTc3OSw2ICs3NzksMTMgQEAgY29uZmlnIFNPQ19DQU1FUkFfT1Y3NzJYCiAJ aGVscAogCSAgVGhpcyBpcyBhIG92NzcyeCBjYW1lcmEgZHJpdmVyCiAKK2NvbmZpZyBTT0Nf Q0FNRVJBX09WNzY3MAorCXRyaXN0YXRlICJvdjc2NzAgc3VwcG9ydCIKKwlkZXBlbmRzIG9u IFNPQ19DQU1FUkEgJiYgSTJDCisJaGVscAorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgT21u aVZpc2lvbiBPVjc2NzAgVkdBIGNhbWVyYS4KKwkgIEl0IGN1cnJlbnRseSBvbmx5IHdvcmtz IHdpdGggU29DIENhbWVyYSBpbnRlcmZhY2UuCisKIGNvbmZpZyBWSURFT19QWEEyN3gKIAl0 cmlzdGF0ZSAiUFhBMjd4IFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlIGRyaXZlciIKIAlkZXBl bmRzIG9uIFZJREVPX0RFViAmJiBQWEEyN3ggJiYgU09DX0NBTUVSQQpJbmRleDogbGludXgt Mi42LjI5LXJjNS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K LS0tIGxpbnV4LTIuNi4yOS1yYzUub3JpZy9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxl CisrKyBsaW51eC0yLjYuMjktcmM1L2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAg LTEwNCw3ICsxMDQsNyBAQCBvYmotJChDT05GSUdfVklERU9fVVBENjQwODMpICs9IHVwZDY0 MDgzCiBvYmotJChDT05GSUdfVklERU9fQ1gyMzQxWCkgKz0gY3gyMzQxeC5vCiAKIG9iai0k KENPTkZJR19WSURFT19DQUZFX0NDSUMpICs9IGNhZmVfY2NpYy5vCi1vYmotJChDT05GSUdf VklERU9fT1Y3NjcwKSAJKz0gb3Y3NjcwLm8KK29iai0kKENPTkZJR19WSURFT19PVjc2NzAp CSs9IG92NzY3MC5vCiAKIG9iai0kKENPTkZJR19WSURFT19UQ004MjVYKSArPSB0Y204MjV4 Lm8KIApAQCAtMTQ0LDYgKzE0NCw3IEBAIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0x MTEpCSs9IG10OW0KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEpCSs9IG10OXQw MzEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMikJKz0gbXQ5djAyMi5vCiBv YmotJChDT05GSUdfU09DX0NBTUVSQV9PVjc3MlgpCQkrPSBvdjc3Mngubworb2JqLSQoQ09O RklHX1NPQ19DQU1FUkFfT1Y3NjcwKQkJKz0gb3Y3NjcwX3NvYy5vCiBvYmotJChDT05GSUdf U09DX0NBTUVSQV9QTEFURk9STSkJKz0gc29jX2NhbWVyYV9wbGF0Zm9ybS5vCiBvYmotJChD T05GSUdfU09DX0NBTUVSQV9UVzk5MTApCQkrPSB0dzk5MTAubwogCkluZGV4OiBsaW51eC0y LjYuMjktcmM1L2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwX3NvYy5jCj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIC9kZXYvbnVsbAorKysgbGludXgtMi42LjI5LXJjNS9kcml2ZXJzL21lZGlhL3Zp ZGVvL292NzY3MF9zb2MuYwpAQCAtMCwwICsxLDE0MTEgQEAKKy8qCisgKiBEcml2ZXIgZm9y IE9WNzY3MCBDTU9TIEltYWdlIFNlbnNvciBmcm9tIE9tbmlWaXNpb24KKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMDgsIERhcml1cyBBdWd1bGlzIDxkYXJpdXMuYXVndWxpc0BnbWFpbC5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisvKiBSZW1vdmUg Y29tbWVudCB0byBjb21waWxlIGluIGRlYnVnIG1lc3NhZ2VzICovCisvLyNkZWZpbmUgREVC VUcKKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o PgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29t bW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8 bWVkaWEvc29jX2NhbWVyYS5oPgorCisvKiBPVjc2NzAgaGFzIHNsYXZlIEkyQyBhZGRyZXNz IDB4NDIgKi8KKyNkZWZpbmUgT1Y3NjcwX0kyQ19BRERSIDB4NDIKKworLyogT1Y3NjcwIHJl Z2lzdGVycyAqLworI2RlZmluZQlPVjc2NzBfUElECQkJMHgwQQkvKgk3NglSCSovCisjZGVm aW5lCU9WNzY3MF9WRVIJCQkweDBCCS8qCTczCVIJKi8KKyNkZWZpbmUJT1Y3NjcwX0NPTTcJ CQkweDEyCS8qCTAJUlcJKi8KKyNkZWZpbmUJT1Y3NjcwX0NPTTEwCQkJMHgxNQkvKgkwCVJX CSovCisjZGVmaW5lCU9WNzY3MF9NSURICQkJMHgxQwkvKgk3RglSCSovCisjZGVmaW5lCU9W NzY3MF9NSURMCQkJMHgxRAkvKglBMglSCSovCisjZGVmaW5lCU9WNzY3MF9NVkZQCQkJMHgx RQkvKgkxCVJXCSovCisjZGVmaW5lCU9WNzY3MF9CUklHSFQJCQkweDU1CS8qCTAJUlcJKi8K KyNkZWZpbmUJT1Y3NjcwX0NPTlRSQVMJCQkweDU2CS8qCTQwCVJXCSovCisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBvdjc2NzBfZm9ybWF0c1tdID0g eworCXsKKwkJLm5hbWUJCT0gIllVViA0OjI6MiIsCisJCS5kZXB0aAkJPSAxNiwKKwkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9S U1BBQ0VfU1JHQiwKKwl9Cit9OworCitzdHJ1Y3Qgb3Y3NjcwIHsKKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50OworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CisJaW50IG1v ZGVsOworfTsKKworLyogQ2FtZXJhIHNlbnNvciByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25z ICovCitzdGF0aWMgdTggcmVnX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29u c3QgdTggcmVnKQoreworCXU4IGkyY19idWZbMl07CisJaTJjX2J1ZlswXSA9IHJlZzsKKwlp MmNfbWFzdGVyX3NlbmQoY2xpZW50LCBpMmNfYnVmLCAxKTsKKwlpMmNfbWFzdGVyX3JlY3Yo Y2xpZW50LCBpMmNfYnVmLCAxKTsKKwlyZXR1cm4gaTJjX2J1ZlswXTsKK30KKworc3RhdGlj IHU4IHJlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCByZWcs IHU4IGRhdGEpCit7CisJdTggaTJjX2J1ZlsyXTsKKwlpMmNfYnVmWzBdID0gcmVnOworCWky Y19idWZbMV0gPSBkYXRhOworCXJldHVybiBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBpMmNf YnVmLCAyKTsKK30KKworLyogWUNiQ3IsIFZHQQ0gKiAxNWZwcyBAIDI0TUh6IGlucHV0IGNs b2NrCisgKi8KK3U4IGluaXRfYXJyYXlfdmdhW11bMl0gPSB7DQorCXsgMHgxMSwgMHgwMyB9 LA0KKwl7IDB4M2EsIDB4MDQgfSwNCisJeyAweDEyLCAweDAwIH0sDQorCXsgMHgxNywgMHgx MyB9LA0KKwl7IDB4MTgsIDB4MDEgfSwNCisJeyAweDMyLCAweGI2IH0sDQorCXsgMHgxOSwg MHgwMiB9LA0KKwl7IDB4MWEsIDB4N2EgfSwNCisJeyAweDAzLCAweDBhIH0sDQorCXsgMHgw YywgMHgwMCB9LA0KKwl7IDB4M2UsIDB4MDAgfSwNCisJeyAweDcwLCAweDNhIH0sDQorCXsg MHg3MSwgMHgzNSB9LA0KKwl7IDB4NzIsIDB4MTEgfSwNCisJeyAweDczLCAweGYwIH0sDQor CXsgMHhhMiwgMHgwMiB9LA0KKw0KKwl7IDB4N2EsIDB4MjAgfSwNCisJeyAweDdiLCAweDEw IH0sDQorCXsgMHg3YywgMHgxZSB9LA0KKwl7IDB4N2QsIDB4MzUgfSwNCisJeyAweDdlLCAw eDVhIH0sDQorCXsgMHg3ZiwgMHg2OSB9LA0KKwl7IDB4ODAsIDB4NzYgfSwNCisJeyAweDgx LCAweDgwIH0sDQorCXsgMHg4MiwgMHg4OCB9LA0KKwl7IDB4ODMsIDB4OGYgfSwNCisJeyAw eDg0LCAweDk2IH0sDQorCXsgMHg4NSwgMHhhMyB9LA0KKwl7IDB4ODYsIDB4YWYgfSwNCisJ eyAweDg3LCAweGM0IH0sDQorCXsgMHg4OCwgMHhkNyB9LA0KKwl7IDB4ODksIDB4ZTggfSwN CisNCisJeyAweDEzLCAweGUwIH0sDQorCXsgMHgwMCwgMHgwMCB9LA0KKwl7IDB4MTAsIDB4 MDAgfSwNCisJeyAweDBkLCAweDQwIH0sDQorCXsgMHgxNCwgMHgxOCB9LA0KKwl7IDB4YTUs IDB4MDUgfSwNCisJeyAweGFiLCAweDA3IH0sDQorCXsgMHgyNCwgMHg5NSB9LA0KKwl7IDB4 MjUsIDB4MzMgfSwNCisJeyAweDI2LCAweGUzIH0sDQorCXsgMHg5ZiwgMHg3OCB9LA0KKwl7 IDB4YTAsIDB4NjggfSwNCisJeyAweGExLCAweDAzIH0sDQorCXsgMHhhNiwgMHhkOCB9LA0K Kwl7IDB4YTcsIDB4ZDggfSwNCisJeyAweGE4LCAweGYwIH0sDQorCXsgMHhhOSwgMHg5MCB9 LA0KKwl7IDB4YWEsIDB4OTQgfSwNCisJeyAweDEzLCAweGU1IH0sDQorDQorCXsgMHgwZSwg MHg2MSB9LA0KKwl7IDB4MGYsIDB4NGIgfSwNCisJeyAweDE2LCAweDAyIH0sDQorCXsgMHgx ZSwgMHgwNyB9LA0KKwl7IDB4MjEsIDB4MDIgfSwNCisJeyAweDIyLCAweDkxIH0sDQorCXsg MHgyOSwgMHgwNyB9LA0KKwl7IDB4MzMsIDB4MGIgfSwNCisJeyAweDM1LCAweDBiIH0sDQor CXsgMHgzNywgMHgxZCB9LA0KKwl7IDB4MzgsIDB4NzEgfSwNCisJeyAweDM5LCAweDJhIH0s DQorCXsgMHgzYywgMHg3OCB9LA0KKwl7IDB4NGQsIDB4NDAgfSwNCisJeyAweDRlLCAweDIw IH0sDQorCXsgMHg2OSwgMHgwMCB9LA0KKwl7IDB4NmIsIDB4NGEgfSwNCisJeyAweDc0LCAw eDEwIH0sDQorCXsgMHg4ZCwgMHg0ZiB9LA0KKwl7IDB4OGUsIDB4MDAgfSwNCisJeyAweDhm LCAweDAwIH0sDQorCXsgMHg5MCwgMHgwMCB9LA0KKwl7IDB4OTEsIDB4MDAgfSwNCisJeyAw eDk2LCAweDAwIH0sDQorCXsgMHg5YSwgMHg4MCB9LA0KKwl7IDB4YjAsIDB4ODQgfSwNCisJ eyAweGIxLCAweDBjIH0sDQorCXsgMHhiMiwgMHgwZSB9LA0KKwl7IDB4YjMsIDB4ODIgfSwN CisJeyAweGI4LCAweDBhIH0sDQorDQorCXsgMHg0MywgMHgwYSB9LA0KKwl7IDB4NDQsIDB4 ZjAgfSwNCisJeyAweDQ1LCAweDM0IH0sDQorCXsgMHg0NiwgMHg1OCB9LA0KKwl7IDB4NDcs IDB4MjggfSwNCisJeyAweDQ4LCAweDNhIH0sDQorCXsgMHg1OSwgMHg4OCB9LA0KKwl7IDB4 NWEsIDB4ODggfSwNCisJeyAweDViLCAweDQ0IH0sDQorCXsgMHg1YywgMHg2NyB9LA0KKwl7 IDB4NWQsIDB4NDkgfSwNCisJeyAweDVlLCAweDBlIH0sDQorCXsgMHg2YywgMHgwYSB9LA0K Kwl7IDB4NmQsIDB4NTUgfSwNCisJeyAweDZlLCAweDExIH0sDQorCXsgMHg2ZiwgMHg5ZiB9 LCAvKiA5ZSAqLw0KKwl7IDB4NmEsIDB4NDAgfSwNCisJeyAweDAxLCAweDQwIH0sDQorCXsg MHgwMiwgMHg0MCB9LA0KKwl7IDB4MTMsIDB4ZTcgfSwNCisNCisJeyAweDRmLCAweDgwIH0s DQorCXsgMHg1MCwgMHg4MCB9LA0KKwl7IDB4NTEsIDB4MDAgfSwNCisJeyAweDUyLCAweDIy IH0sDQorCXsgMHg1MywgMHg1ZSB9LA0KKwl7IDB4NTQsIDB4ODAgfSwNCisJeyAweDU4LCAw eDllIH0sDQorDQorCXsgMHg0MSwgMHgwOCB9LA0KKwl7IDB4M2YsIDB4MDAgfSwNCisJeyAw eDc1LCAweDA1IH0sDQorCXsgMHg3NiwgMHhlMSB9LA0KKwl7IDB4NGMsIDB4MDAgfSwNCisJ eyAweDc3LCAweDAxIH0sDQorCXsgMHgzZCwgMHhjMiB9LA0KKwl7IDB4NGIsIDB4MDkgfSwN CisJeyAweGM5LCAweDYwIH0sDQorCXsgMHg0MSwgMHgzOCB9LA0KKwl7IDB4NTYsIDB4NDAg fSwNCisNCisJeyAweDM0LCAweDExIH0sDQorCXsgMHgzYiwgMHgwMiB9LA0KKwl7IDB4YTQs IDB4ODggfSwNCisJeyAweDk2LCAweDAwIH0sDQorCXsgMHg5NywgMHgzMCB9LA0KKwl7IDB4 OTgsIDB4MjAgfSwNCisJeyAweDk5LCAweDMwIH0sDQorCXsgMHg5YSwgMHg4NCB9LA0KKwl7 IDB4OWIsIDB4MjkgfSwNCisJeyAweDljLCAweDAzIH0sDQorCXsgMHg5ZCwgMHg0YyB9LA0K Kwl7IDB4OWUsIDB4M2YgfSwNCisJeyAweDc4LCAweDA0IH0sCit9OworCisvKiBZQ2JDciwg UVZHQQ0KKyAqIDE1ZnBzIEAgMjRNSHogaW5wdXQgY2xvY2sKKyAqLwordTggaW5pdF9hcnJh eV9xdmdhW11bMl0gPSB7DQorCXsgMHgxMSwgMHgwMyB9LA0KKwl7IDB4M2EsIDB4MDQgfSwN CisJeyAweDEyLCAweDAwIH0sDQorCXsgMHgzMiwgMHg4MCB9LA0KKwl7IDB4MTcsIDB4MTYg fSwNCisJeyAweDE4LCAweDA0IH0sDQorCXsgMHgxOSwgMHgwMiB9LA0KKwl7IDB4MWEsIDB4 N2EgfSwNCisJeyAweDAzLCAweDBhIH0sDQorCXsgMHgwYywgMHgwNCB9LA0KKwl7IDB4M2Us IDB4MTkgfSwNCisJeyAweDcwLCAweDNhIH0sDQorCXsgMHg3MSwgMHgzNSB9LA0KKwl7IDB4 NzIsIDB4MTEgfSwNCisJeyAweDczLCAweGYxIH0sDQorCXsgMHhhMiwgMHgwMiB9LA0KKw0K Kwl7IDB4N2EsIDB4MjAgfSwNCisJeyAweDdiLCAweDEwIH0sDQorCXsgMHg3YywgMHgxZSB9 LA0KKwl7IDB4N2QsIDB4MzUgfSwNCisJeyAweDdlLCAweDVhIH0sDQorCXsgMHg3ZiwgMHg2 OSB9LA0KKwl7IDB4ODAsIDB4NzYgfSwNCisJeyAweDgxLCAweDgwIH0sDQorCXsgMHg4Miwg MHg4OCB9LA0KKwl7IDB4ODMsIDB4OGYgfSwNCisJeyAweDg0LCAweDk2IH0sDQorCXsgMHg4 NSwgMHhhMyB9LA0KKwl7IDB4ODYsIDB4YWYgfSwNCisJeyAweDg3LCAweGM0IH0sDQorCXsg MHg4OCwgMHhkNyB9LA0KKwl7IDB4ODksIDB4ZTggfSwNCisNCisJeyAweDEzLCAweGUwIH0s DQorCXsgMHgwMCwgMHgwMCB9LA0KKwl7IDB4MTAsIDB4MDAgfSwNCisJeyAweDBkLCAweDQw IH0sDQorCXsgMHgxNCwgMHgxOCB9LA0KKwl7IDB4YTUsIDB4MDUgfSwNCisJeyAweGFiLCAw eDA3IH0sDQorCXsgMHgyNCwgMHg5NSB9LA0KKwl7IDB4MjUsIDB4MzMgfSwNCisJeyAweDI2 LCAweGUzIH0sDQorCXsgMHg5ZiwgMHg3OCB9LA0KKwl7IDB4YTAsIDB4NjggfSwNCisJeyAw eGExLCAweDAzIH0sDQorCXsgMHhhNiwgMHhkOCB9LA0KKwl7IDB4YTcsIDB4ZDggfSwNCisJ eyAweGE4LCAweGYwIH0sDQorCXsgMHhhOSwgMHg5MCB9LA0KKwl7IDB4YWEsIDB4OTQgfSwN CisJeyAweDEzLCAweGU1IH0sDQorDQorCXsgMHgwZSwgMHg2MSB9LA0KKwl7IDB4MGYsIDB4 NGIgfSwNCisJeyAweDE2LCAweDAyIH0sDQorCXsgMHgxZSwgMHgwNyB9LA0KKwl7IDB4MjEs IDB4MDIgfSwNCisJeyAweDIyLCAweDkxIH0sDQorCXsgMHgyOSwgMHgwNyB9LA0KKwl7IDB4 MzMsIDB4MGIgfSwNCisJeyAweDM1LCAweDBiIH0sDQorCXsgMHgzNywgMHgxZCB9LA0KKwl7 IDB4MzgsIDB4NzEgfSwNCisJeyAweDM5LCAweDJhIH0sDQorCXsgMHgzYywgMHg3OCB9LA0K Kwl7IDB4NGQsIDB4NDAgfSwNCisJeyAweDRlLCAweDIwIH0sDQorCXsgMHg2OSwgMHgwMCB9 LA0KKwl7IDB4NmIsIDB4NGEgfSwNCisJeyAweDc0LCAweDEwIH0sDQorCXsgMHg4ZCwgMHg0 ZiB9LA0KKwl7IDB4OGUsIDB4MDAgfSwNCisJeyAweDhmLCAweDAwIH0sDQorCXsgMHg5MCwg MHgwMCB9LA0KKwl7IDB4OTEsIDB4MDAgfSwNCisJeyAweDk2LCAweDAwIH0sDQorCXsgMHg5 YSwgMHg4MCB9LA0KKwl7IDB4YjAsIDB4ODQgfSwNCisJeyAweGIxLCAweDBjIH0sDQorCXsg MHhiMiwgMHgwZSB9LA0KKwl7IDB4YjMsIDB4ODIgfSwNCisJeyAweGI4LCAweDBhIH0sDQor DQorCXsgMHg0MywgMHgwYSB9LA0KKwl7IDB4NDQsIDB4ZjAgfSwNCisJeyAweDQ1LCAweDM0 IH0sDQorCXsgMHg0NiwgMHg1OCB9LA0KKwl7IDB4NDcsIDB4MjggfSwNCisJeyAweDQ4LCAw eDNhIH0sDQorCXsgMHg1OSwgMHg4OCB9LA0KKwl7IDB4NWEsIDB4ODggfSwNCisJeyAweDVi LCAweDQ0IH0sDQorCXsgMHg1YywgMHg2NyB9LA0KKwl7IDB4NWQsIDB4NDkgfSwNCisJeyAw eDVlLCAweDBlIH0sDQorCXsgMHg2YywgMHgwYSB9LA0KKwl7IDB4NmQsIDB4NTUgfSwNCisJ eyAweDZlLCAweDExIH0sDQorCXsgMHg2ZiwgMHg5ZiB9LCAvKjllKi8NCisJeyAweDZhLCAw eDQwIH0sDQorCXsgMHgwMSwgMHg0MCB9LA0KKwl7IDB4MDIsIDB4NDAgfSwNCisJeyAweDEz LCAweGU3IH0sDQorDQorCXsgMHg0ZiwgMHg4MCB9LA0KKwl7IDB4NTAsIDB4ODAgfSwNCisJ eyAweDUxLCAweDAwIH0sDQorCXsgMHg1MiwgMHgyMiB9LA0KKwl7IDB4NTMsIDB4NWUgfSwN CisJeyAweDU0LCAweDgwIH0sDQorCXsgMHg1OCwgMHg5ZSB9LA0KKw0KKwl7IDB4NDEsIDB4 MDggfSwNCisJeyAweDNmLCAweDAwIH0sDQorCXsgMHg3NSwgMHgwNSB9LA0KKwl7IDB4NzYs IDB4ZTEgfSwNCisJeyAweDRjLCAweDAwIH0sDQorCXsgMHg3NywgMHgwMSB9LA0KKwl7IDB4 M2QsIDB4YzAgfSwNCisJeyAweDRiLCAweDA5IH0sDQorCXsgMHhjOSwgMHg2MCB9LA0KKwl7 IDB4NDEsIDB4MzggfSwNCisJeyAweDU2LCAweDQwIH0sDQorDQorCXsgMHgzNCwgMHgxMSB9 LA0KKwl7IDB4M2IsIDB4MDIgfSwNCisJeyAweGE0LCAweDg4IH0sDQorCXsgMHg5NiwgMHgw MCB9LA0KKwl7IDB4OTcsIDB4MzAgfSwNCisJeyAweDk4LCAweDIwIH0sDQorCXsgMHg5OSwg MHgzMCB9LA0KKwl7IDB4OWEsIDB4ODQgfSwNCisJeyAweDliLCAweDI5IH0sDQorCXsgMHg5 YywgMHgwMyB9LA0KKwl7IDB4OWQsIDB4NGMgfSwNCisJeyAweDllLCAweDNmIH0sDQorCXsg MHg3OCwgMHgwNCB9LA0KKw0KKwl7IDB4NzksIDB4MDEgfSwNCisJeyAweGM4LCAweGYwIH0s DQorCXsgMHg3OSwgMHgwZiB9LA0KKwl7IDB4YzgsIDB4MDAgfSwNCisJeyAweDc5LCAweDEw IH0sDQorCXsgMHhjOCwgMHg3ZSB9LA0KKwl7IDB4NzksIDB4MGEgfSwNCisJeyAweGM4LCAw eDgwIH0sDQorCXsgMHg3OSwgMHgwYiB9LA0KKwl7IDB4YzgsIDB4MDEgfSwNCisJeyAweDc5 LCAweDBjIH0sDQorCXsgMHhjOCwgMHgwZiB9LA0KKwl7IDB4NzksIDB4MGQgfSwNCisJeyAw eGM4LCAweDIwIH0sDQorCXsgMHg3OSwgMHgwOSB9LA0KKwl7IDB4YzgsIDB4ODAgfSwNCisJ eyAweDc5LCAweDAyIH0sDQorCXsgMHhjOCwgMHhjMCB9LA0KKwl7IDB4NzksIDB4MDMgfSwN CisJeyAweGM4LCAweDQwIH0sDQorCXsgMHg3OSwgMHgwNSB9LA0KKwl7IDB4YzgsIDB4MzAg fSwNCisJeyAweDc5LCAweDI2IH0sCit9OworCisvKiBOb3QgdGVzdGVkICovCit1OCBpbml0 X2FycmF5X3FxdmdhW11bMl0gPSB7CisJeyAweDExLCAweDAzfSwJLyogQ0xLUkMgKi8KKwl7 IDB4M2EsIDB4MDQgfSwgLyogVFNMQiAqLworCXsgMHgxMiwgMHgwMCB9LCAvKiBDT003ICov CisJeyAweDE3LCAweDE2IH0sIC8qIEhTVEFSVCAqLworCXsgMHgxOCwgMHgwNCB9LCAvKiBI U1RPUCAqLworCXsgMHgzMiwgMHhBNCB9LCAvKiBIUkVGICovCisJeyAweDE5LCAweDAyIH0s IC8qIFZTVFJUICovCisJeyAweDFhLCAweDdhIH0sIC8qIFZTVE9QICovCisJeyAweDAzLCAw eDBhIH0sIC8qIFZSRUYgKi8KKwl7IDB4MGMsIDB4MDQgfSwgLyogQ09NMyAqLworCXsgMHgz ZSwgMHgxQSB9LCAvKiBDT00xNCAqLworCXsgMHg3MCwgMHgzYSB9LCAvKiBTQ0FMSU5HX1hT QyAqLworCXsgMHg3MSwgMHgzNSB9LCAvKiBTQ0FMSU5HX1lTQyAqLworCXsgMHg3MiwgMHgy MiB9LCAvKiBTQ0FMSU5HX0RDV0NUUiAqLworCXsgMHg3MywgMHhmMiB9LCAvKiBTQ0FMSU5H X1BDTEtfRElWICovCisJeyAweGEyLCAweDAyIH0sIC8qIFNDQUxJTkdfUENMS19ERUxBWSAq LworCS8qIEdhbW1hICovCisJeyAweDdhLCAweDIwIH0sCisJeyAweDdiLCAweDFjIH0sCisJ eyAweDdjLCAweDI4IH0sCisJeyAweDdkLCAweDNjIH0sCisJeyAweDdlLCAweDVhIH0sCisJ eyAweDdmLCAweDY4IH0sCisJeyAweDgwLCAweDc2IH0sCisJeyAweDgxLCAweDgwIH0sCisJ eyAweDgyLCAweDg4IH0sCisJeyAweDgzLCAweDhmIH0sCisJeyAweDg0LCAweDk2IH0sCisJ eyAweDg1LCAweGEzIH0sCisJeyAweDg2LCAweGFmIH0sCisJeyAweDg3LCAweGM0IH0sCisJ eyAweDg4LCAweGQ3IH0sCisJeyAweDg5LCAweGU4IH0sCisJLyogR2FpbiwgZXhwb3N1cmUs IGJhbmRpbmcsIEFHQy9BRUMgKi8KKwl7IDB4MTMsIDB4ZTAgfSwKKwl7IDB4MDAsIDB4MDAg fSwKKwl7IDB4MTAsIDB4MDAgfSwKKwl7IDB4MGQsIDB4NDAgfSwKKwl7IDB4MTQsIDB4MTgg fSwKKwl7IDB4YTUsIDB4MDUgfSwKKwl7IDB4YWIsIDB4MDcgfSwKKwl7IDB4MjQsIDB4OTUg fSwKKwl7IDB4MjUsIDB4MzMgfSwKKwl7IDB4MjYsIDB4ZTMgfSwKKwl7IDB4OWYsIDB4Nzgg fSwKKwl7IDB4YTAsIDB4NjggfSwKKwl7IDB4YTEsIDB4MDMgfSwKKwl7IDB4YTYsIDB4ZDgg fSwKKwl7IDB4YTcsIDB4ZDggfSwKKwl7IDB4YTgsIDB4ZjAgfSwKKwl7IDB4YTksIDB4OTAg fSwKKwl7IDB4YWEsIDB4OTQgfSwKKwl7IDB4MTMsIDB4ZTUgfSwKKwkvKiBHYWluLCBBREMs IFBMTCwgZXRjLi4uICovCisJeyAweDBlLCAweDYxIH0sCisJeyAweDBmLCAweDRiIH0sCisJ eyAweDE2LCAweDAyIH0sCisJeyAweDFFLCAweDA3IH0sCisJeyAweDIxLCAweDAyIH0sCisJ eyAweDIyLCAweDkxIH0sCisJeyAweDI5LCAweDA3IH0sCisJeyAweDMzLCAweDBCIH0sCisJ eyAweDM1LCAweDBCIH0sCisJeyAweDM3LCAweDFEIH0sCisJeyAweDM4LCAweDcxIH0sCisJ eyAweDM5LCAweDJhIH0sCisJeyAweDNjLCAweDc4IH0sCisJeyAweDRkLCAweDQwIH0sCisJ eyAweDRlLCAweDIwIH0sCisJeyAweDY5LCAweDAwIH0sCisJeyAweDc0LCAweDEwIH0sCisJ eyAweDhkLCAweDRmIH0sCisJeyAweDhlLCAweDAwIH0sCisJeyAweDhmLCAweDAwIH0sCisJ eyAweDkwLCAweDAwIH0sCisJeyAweDkxLCAweDAwIH0sCisJeyAweDk2LCAweDAwIH0sCisJ eyAweDlhLCAweDgwIH0sCisJeyAweGIwLCAweDg0IH0sCisJeyAweGIxLCAweDBjIH0sCisJ eyAweGIyLCAweDBlIH0sCisJeyAweGIzLCAweDgyIH0sCisJeyAweGI4LCAweDBhIH0sCisJ LyogUmVzZXJ2ZWQsIEFXQiwgQmx1ZS1SZWQgQ2hhbm5lbCBnYWluICovCisJeyAweDQzLCAw eDBhIH0sCisJeyAweDQ0LCAweGYwIH0sCisJeyAweDQ1LCAweDM0IH0sCisJeyAweDQ2LCAw eDU4IH0sCisJeyAweDQ3LCAweDI4IH0sCisJeyAweDQ4LCAweDNhIH0sCisJeyAweDU5LCAw eDg4IH0sCisJeyAweDVhLCAweDg4IH0sCisJeyAweDViLCAweDQ0IH0sCisJeyAweDVjLCAw eDY3IH0sCisJeyAweDVkLCAweDQ5IH0sCisJeyAweDVlLCAweDBlIH0sCisJeyAweDZjLCAw eDBhIH0sCisJeyAweDZkLCAweDU1IH0sCisJeyAweDZlLCAweDExIH0sCisJeyAweDZmLCAw eDlmIH0sCisJeyAweDZhLCAweDQwIH0sCisJeyAweDAxLCAweDQwIH0sCisJeyAweDAyLCAw eDQwIH0sCisJeyAweDEzLCAweGU3IH0sCisJLyogTWF0cml4IGNvZWZmaWNpZW50ICovCisJ eyAweDRmLCAweDgwIH0sCisJeyAweDUwLCAweDgwIH0sCisJeyAweDUxLCAweDAwIH0sCisJ eyAweDUyLCAweDIyIH0sCisJeyAweDUzLCAweDVlIH0sCisJeyAweDU0LCAweDgwIH0sCisJ eyAweDU4LCAweDllIH0sCisJLyogRWRnZSwgcGl4ZWwgY29ycmVjdGlvbiwgZGUtbm9pc2Us IENPTTEzLCBVViwgQ29udHJhc3QgKi8KKwl7IDB4NDEsIDB4MDggfSwKKwl7IDB4M2YsIDB4 MDAgfSwKKwl7IDB4NzUsIDB4MDUgfSwKKwl7IDB4NzYsIDB4ZTEgfSwKKwl7IDB4NGMsIDB4 MDAgfSwKKwl7IDB4NzcsIDB4MDEgfSwKKwl7IDB4M2QsIDB4YzEgfSwKKwl7IDB4NGIsIDB4 MDkgfSwKKwl7IDB4YzksIDB4NjAgfSwKKwl7IDB4NDEsIDB4MzggfSwKKwl7IDB4NTYsIDB4 NDAgfSwKKwkvKiBFeHBvc3VyZSB0aW1pbmcsIGJhbmRpbmcgZmlsdGVyICovCisJeyAweDM0 LCAweDExIH0sCisJeyAweDNiLCAweDAyIH0sCisJeyAweGE0LCAweDg4IH0sCisJeyAweDk2 LCAweDAwIH0sCisJeyAweDk3LCAweDMwIH0sCisJeyAweDk4LCAweDIwIH0sCisJeyAweDk5 LCAweDMwIH0sCisJeyAweDlhLCAweDg0IH0sCisJeyAweDliLCAweDI5IH0sCisJeyAweDlj LCAweDAzIH0sCisJeyAweDlkLCAweDRjIH0sCisJeyAweDllLCAweDNmIH0sCisJeyAweDc4 LCAweDA0IH0sCisJLyogPz8/ICovCisJeyAweDc5LCAweDAxIH0sCisJeyAweGM4LCAweGYw IH0sCisJeyAweDc5LCAweDBmIH0sCisJeyAweGM4LCAweDIwIH0sCisJeyAweDc5LCAweDEw IH0sCisJeyAweGM4LCAweDdlIH0sCisJeyAweDc5LCAweDBiIH0sCisJeyAweGM4LCAweDAx IH0sCisJeyAweDc5LCAweDBjIH0sCisJeyAweGM4LCAweDA3IH0sCisJeyAweDc5LCAweDBk IH0sCisJeyAweGM4LCAweDIwIH0sCisJeyAweDc5LCAweDA5IH0sCisJeyAweGM4LCAweDgw IH0sCisJeyAweDc5LCAweDAyIH0sCisJeyAweGM4LCAweGMwIH0sCisJeyAweDc5LCAweDAz IH0sCisJeyAweGM4LCAweDQwIH0sCisJeyAweDc5LCAweDA1IH0sCisJeyAweGM4LCAweDMw IH0sCisJeyAweDc5LCAweDI2IH0sCisJLyogTGVucyBjb3JyZWN0aW9uICovCisJeyAweDY0 LCAweDUwIH0sCisJeyAweDY1LCAweDUwIH0sCisJeyAweDY2LCAweDAxIH0sCisJeyAweDk0 LCAweDUwIH0sCisJeyAweDk1LCAweDUwIH0sCit9OworCisvKiBOb3QgdGVzdGVkICovCit1 OCBpbml0X2FycmF5X2NpZltdWzJdID0geworCXsgMHgxMSwgMHgwM30sCS8qIENMS1JDICov CisJeyAweDNhLCAweDA0IH0sIC8qIFRTTEIgKi8KKwl7IDB4MTIsIDB4MDAgfSwgLyogQ09N NyAqLworCXsgMHgxNywgMHgxNSB9LCAvKiBIU1RBUlQgKi8KKwl7IDB4MTgsIDB4MGIgfSwg LyogSFNUT1AgKi8KKwl7IDB4MzIsIDB4YjYgfSwgLyogSFJFRiAqLworCXsgMHgxOSwgMHgw MyB9LCAvKiBWU1RSVCAqLworCXsgMHgxYSwgMHg3YiB9LCAvKiBWU1RPUCAqLworCXsgMHgw MywgMHgwMiB9LCAvKiBWUkVGICovCisJeyAweDBjLCAweDA4IH0sIC8qIENPTTMgKi8KKwl7 IDB4M2UsIDB4MTEgfSwgLyogQ09NMTQgKi8KKwl7IDB4NzAsIDB4M2EgfSwgLyogU0NBTElO R19YU0MgKi8KKwl7IDB4NzEsIDB4MzUgfSwgLyogU0NBTElOR19ZU0MgKi8KKwl7IDB4NzIs IDB4MTEgfSwgLyogU0NBTElOR19EQ1dDVFIgKi8KKwl7IDB4NzMsIDB4ZjEgfSwgLyogU0NB TElOR19QQ0xLX0RJViAqLworCXsgMHhhMiwgMHgwMiB9LCAvKiBTQ0FMSU5HX1BDTEtfREVM QVkgKi8KKwkvKiBHYW1tYSAqLworCXsgMHg3YSwgMHgyMCB9LAorCXsgMHg3YiwgMHgxMCB9 LAorCXsgMHg3YywgMHgxZSB9LAorCXsgMHg3ZCwgMHgzNSB9LAorCXsgMHg3ZSwgMHg1YSB9 LAorCXsgMHg3ZiwgMHg2OSB9LAorCXsgMHg4MCwgMHg3NiB9LAorCXsgMHg4MSwgMHg4MCB9 LAorCXsgMHg4MiwgMHg4OCB9LAorCXsgMHg4MywgMHg4ZiB9LAorCXsgMHg4NCwgMHg5NiB9 LAorCXsgMHg4NSwgMHhhMyB9LAorCXsgMHg4NiwgMHhhZiB9LAorCXsgMHg4NywgMHhjNCB9 LAorCXsgMHg4OCwgMHhkNyB9LAorCXsgMHg4OSwgMHhlOCB9LAorCS8qIEdhaW4sIGV4cG9z dXJlLCBiYW5kaW5nLCBBR0MvQUVDICovCisJeyAweDEzLCAweGUwIH0sCisJeyAweDAwLCAw eDAwIH0sCisJeyAweDEwLCAweDAwIH0sCisJeyAweDBkLCAweDQwIH0sCisJeyAweDE0LCAw eDE4IH0sCisJeyAweGE1LCAweDA1IH0sCisJeyAweGFiLCAweDA3IH0sCisJeyAweDI0LCAw eDk1IH0sCisJeyAweDI1LCAweDMzIH0sCisJeyAweDI2LCAweGUzIH0sCisJeyAweDlmLCAw eDc4IH0sCisJeyAweGEwLCAweDY4IH0sCisJeyAweGExLCAweDAzIH0sCisJeyAweGE2LCAw eGQ4IH0sCisJeyAweGE3LCAweGQ4IH0sCisJeyAweGE4LCAweGYwIH0sCisJeyAweGE5LCAw eDkwIH0sCisJeyAweGFhLCAweDk0IH0sCisJeyAweDEzLCAweGU1IH0sCisJLyogR2Fpbiwg QURDLCBQTEwsIGV0Yy4uLiAqLworCXsgMHgwZSwgMHg2MSB9LAorCXsgMHgwZiwgMHg0YiB9 LAorCXsgMHgxNiwgMHgwMiB9LAorCXsgMHgxRSwgMHgwNyB9LAorCXsgMHgyMSwgMHgwMiB9 LAorCXsgMHgyMiwgMHg5MSB9LAorCXsgMHgyOSwgMHgwNyB9LAorCXsgMHgzMywgMHgwQiB9 LAorCXsgMHgzNSwgMHgwQiB9LAorCXsgMHgzNywgMHgxRCB9LAorCXsgMHgzOCwgMHg3MSB9 LAorCXsgMHgzOSwgMHgyYSB9LAorCXsgMHgzYywgMHg3OCB9LAorCXsgMHg0ZCwgMHg0MCB9 LAorCXsgMHg0ZSwgMHgyMCB9LAorCXsgMHg2OSwgMHgwMCB9LAorCXsgMHg3NCwgMHgxMCB9 LAorCXsgMHg4ZCwgMHg0ZiB9LAorCXsgMHg4ZSwgMHgwMCB9LAorCXsgMHg4ZiwgMHgwMCB9 LAorCXsgMHg5MCwgMHgwMCB9LAorCXsgMHg5MSwgMHgwMCB9LAorCXsgMHg5NiwgMHgwMCB9 LAorCXsgMHg5YSwgMHg4MCB9LAorCXsgMHhiMCwgMHg4NCB9LAorCXsgMHhiMSwgMHgwYyB9 LAorCXsgMHhiMiwgMHgwZSB9LAorCXsgMHhiMywgMHg4MiB9LAorCXsgMHhiOCwgMHgwYSB9 LAorCS8qIFJlc2VydmVkLCBBV0IsIEJsdWUtUmVkIENoYW5uZWwgZ2FpbiAqLworCXsgMHg0 MywgMHgwYSB9LAorCXsgMHg0NCwgMHhmMCB9LAorCXsgMHg0NSwgMHgzNCB9LAorCXsgMHg0 NiwgMHg1OCB9LAorCXsgMHg0NywgMHgyOCB9LAorCXsgMHg0OCwgMHgzYSB9LAorCXsgMHg1 OSwgMHg4OCB9LAorCXsgMHg1YSwgMHg4OCB9LAorCXsgMHg1YiwgMHg0NCB9LAorCXsgMHg1 YywgMHg2NyB9LAorCXsgMHg1ZCwgMHg0OSB9LAorCXsgMHg1ZSwgMHgwZSB9LAorCXsgMHg2 YywgMHgwYSB9LAorCXsgMHg2ZCwgMHg1NSB9LAorCXsgMHg2ZSwgMHgxMSB9LAorCXsgMHg2 ZiwgMHg5ZiB9LAorCXsgMHg2YSwgMHg0MCB9LAorCXsgMHgwMSwgMHg0MCB9LAorCXsgMHgw MiwgMHg0MCB9LAorCXsgMHgxMywgMHhlNyB9LAorCS8qIE1hdHJpeCBjb2VmZmljaWVudCAq LworCXsgMHg0ZiwgMHg4MCB9LAorCXsgMHg1MCwgMHg4MCB9LAorCXsgMHg1MSwgMHgwMCB9 LAorCXsgMHg1MiwgMHgyMiB9LAorCXsgMHg1MywgMHg1ZSB9LAorCXsgMHg1NCwgMHg4MCB9 LAorCXsgMHg1OCwgMHg5ZSB9LAorCS8qIEVkZ2UsIHBpeGVsIGNvcnJlY3Rpb24sIGRlLW5v aXNlLCBDT00xMywgVVYsIENvbnRyYXN0ICovCisJeyAweDQxLCAweDA4IH0sCisJeyAweDNm LCAweDAwIH0sCisJeyAweDc1LCAweDA1IH0sCisJeyAweDc2LCAweGUxIH0sCisJeyAweDRj LCAweDAwIH0sCisJeyAweDc3LCAweDAxIH0sCisJeyAweDNkLCAweGMwIH0sCisJeyAweDRi LCAweDA5IH0sCisJeyAweGM5LCAweDYwIH0sCisJeyAweDQxLCAweDM4IH0sCisJeyAweDU2 LCAweDQwIH0sCisJLyogRXhwb3N1cmUgdGltaW5nLCBiYW5kaW5nIGZpbHRlciAqLworCXsg MHgzNCwgMHgxMSB9LAorCXsgMHgzYiwgMHgwMiB9LAorCXsgMHhhNCwgMHg4OCB9LAorCXsg MHg5NiwgMHgwMCB9LAorCXsgMHg5NywgMHgzMCB9LAorCXsgMHg5OCwgMHgyMCB9LAorCXsg MHg5OSwgMHgzMCB9LAorCXsgMHg5YSwgMHg4NCB9LAorCXsgMHg5YiwgMHgyOSB9LAorCXsg MHg5YywgMHgwMyB9LAorCXsgMHg5ZCwgMHg0YyB9LAorCXsgMHg5ZSwgMHgzZiB9LAorCXsg MHg3OCwgMHgwNCB9LAorCS8qID8/PyAqLworCXsgMHg3OSwgMHgwMSB9LAorCXsgMHhjOCwg MHhmMCB9LAorCXsgMHg3OSwgMHgwZiB9LAorCXsgMHhjOCwgMHgyMCB9LAorCXsgMHg3OSwg MHgxMCB9LAorCXsgMHhjOCwgMHg3ZSB9LAorCXsgMHg3OSwgMHgwYiB9LAorCXsgMHhjOCwg MHgwMSB9LAorCXsgMHg3OSwgMHgwYyB9LAorCXsgMHhjOCwgMHgwNyB9LAorCXsgMHg3OSwg MHgwZCB9LAorCXsgMHhjOCwgMHgyMCB9LAorCXsgMHg3OSwgMHgwOSB9LAorCXsgMHhjOCwg MHg4MCB9LAorCXsgMHg3OSwgMHgwMiB9LAorCXsgMHhjOCwgMHhjMCB9LAorCXsgMHg3OSwg MHgwMyB9LAorCXsgMHhjOCwgMHg0MCB9LAorCXsgMHg3OSwgMHgwNSB9LAorCXsgMHhjOCwg MHgzMCB9LAorCXsgMHg3OSwgMHgyNiB9LAorCS8qIExlbnMgY29ycmVjdGlvbiAqLworCXsg MHg2NCwgMHg1MCB9LAorCXsgMHg2NSwgMHg1MCB9LAorCXsgMHg2NiwgMHgwMSB9LAorCXsg MHg5NCwgMHg1MCB9LAorCXsgMHg5NSwgMHg1MCB9LAorfTsKKworLyogTm90IHRlc3RlZCAq LwordTggaW5pdF9hcnJheV9xY2lmW11bMl0gPSB7CisJeyAweDExLCAweDAzIH0sCS8qIENM S1JDICovCisJeyAweDNhLCAweDA0IH0sIC8qIFRTTEIgKi8KKwl7IDB4MTIsIDB4MDAgfSwg LyogQ09NNyAqLworCXsgMHgxNywgMHgzOSB9LCAvKiBIU1RBUlQgKi8KKwl7IDB4MTgsIDB4 MDMgfSwgLyogSFNUT1AgKi8KKwl7IDB4MzIsIDB4ODAgfSwgLyogSFJFRiAqLworCXsgMHgx OSwgMHgwMyB9LCAvKiBWU1RSVCAqLworCXsgMHgxYSwgMHg3YiB9LCAvKiBWU1RPUCAqLwor CXsgMHgwMywgMHgwMiB9LCAvKiBWUkVGICovCisJeyAweDBjLCAweDBjIH0sIC8qIENPTTMg Ki8KKwl7IDB4M2UsIDB4MTEgfSwgLyogQ09NMTQgKi8KKwl7IDB4NzAsIDB4M2EgfSwgLyog U0NBTElOR19YU0MgKi8KKwl7IDB4NzEsIDB4MzUgfSwgLyogU0NBTElOR19ZU0MgKi8KKwl7 IDB4NzIsIDB4MTEgfSwgLyogU0NBTElOR19EQ1dDVFIgKi8KKwl7IDB4NzMsIDB4ZjEgfSwg LyogU0NBTElOR19QQ0xLX0RJViAqLworCXsgMHhhMiwgMHg1MiB9LCAvKiBTQ0FMSU5HX1BD TEtfREVMQVkgKi8KKwkvKiBHYW1tYSAqLworCXsgMHg3YSwgMHgyMCB9LAorCXsgMHg3Yiwg MHgxMCB9LAorCXsgMHg3YywgMHgxZSB9LAorCXsgMHg3ZCwgMHgzNSB9LAorCXsgMHg3ZSwg MHg1YSB9LAorCXsgMHg3ZiwgMHg2OSB9LAorCXsgMHg4MCwgMHg3NiB9LAorCXsgMHg4MSwg MHg4MCB9LAorCXsgMHg4MiwgMHg4OCB9LAorCXsgMHg4MywgMHg4ZiB9LAorCXsgMHg4NCwg MHg5NiB9LAorCXsgMHg4NSwgMHhhMyB9LAorCXsgMHg4NiwgMHhhZiB9LAorCXsgMHg4Nywg MHhjNCB9LAorCXsgMHg4OCwgMHhkNyB9LAorCXsgMHg4OSwgMHhlOCB9LAorCS8qIEdhaW4s IGV4cG9zdXJlLCBiYW5kaW5nLCBBR0MvQUVDICovCisJeyAweDEzLCAweGUwIH0sCisJeyAw eDAwLCAweDAwIH0sCisJeyAweDEwLCAweDAwIH0sCisJeyAweDBkLCAweDQwIH0sCisJeyAw eDE0LCAweDE4IH0sCisJeyAweGE1LCAweDA1IH0sCisJeyAweGFiLCAweDA3IH0sCisJeyAw eDI0LCAweDk1IH0sCisJeyAweDI1LCAweDMzIH0sCisJeyAweDI2LCAweGUzIH0sCisJeyAw eDlmLCAweDc4IH0sCisJeyAweGEwLCAweDY4IH0sCisJeyAweGExLCAweDAzIH0sCisJeyAw eGE2LCAweGQ4IH0sCisJeyAweGE3LCAweGQ4IH0sCisJeyAweGE4LCAweGYwIH0sCisJeyAw eGE5LCAweDkwIH0sCisJeyAweGFhLCAweDk0IH0sCisJeyAweDEzLCAweGU1IH0sCisJLyog R2FpbiwgQURDLCBQTEwsIGV0Yy4uLiAqLworCXsgMHgwZSwgMHg2MSB9LAorCXsgMHgwZiwg MHg0YiB9LAorCXsgMHgxNiwgMHgwMiB9LAorCXsgMHgxRSwgMHgwNyB9LAorCXsgMHgyMSwg MHgwMiB9LAorCXsgMHgyMiwgMHg5MSB9LAorCXsgMHgyOSwgMHgwNyB9LAorCXsgMHgzMywg MHgwQiB9LAorCXsgMHgzNSwgMHgwQiB9LAorCXsgMHgzNywgMHgxRCB9LAorCXsgMHgzOCwg MHg3MSB9LAorCXsgMHgzOSwgMHgyYSB9LAorCXsgMHgzYywgMHg3OCB9LAorCXsgMHg0ZCwg MHg0MCB9LAorCXsgMHg0ZSwgMHgyMCB9LAorCXsgMHg2OSwgMHgwMCB9LAorCXsgMHg3NCwg MHgxMCB9LAorCXsgMHg4ZCwgMHg0ZiB9LAorCXsgMHg4ZSwgMHgwMCB9LAorCXsgMHg4Ziwg MHgwMCB9LAorCXsgMHg5MCwgMHgwMCB9LAorCXsgMHg5MSwgMHgwMCB9LAorCXsgMHg5Niwg MHgwMCB9LAorCXsgMHg5YSwgMHg4MCB9LAorCXsgMHhiMCwgMHg4NCB9LAorCXsgMHhiMSwg MHgwYyB9LAorCXsgMHhiMiwgMHgwZSB9LAorCXsgMHhiMywgMHg4MiB9LAorCXsgMHhiOCwg MHgwYSB9LAorCS8qIFJlc2VydmVkLCBBV0IsIEJsdWUtUmVkIENoYW5uZWwgZ2FpbiAqLwor CXsgMHg0MywgMHgwYSB9LAorCXsgMHg0NCwgMHhmMCB9LAorCXsgMHg0NSwgMHgzNCB9LAor CXsgMHg0NiwgMHg1OCB9LAorCXsgMHg0NywgMHgyOCB9LAorCXsgMHg0OCwgMHgzYSB9LAor CXsgMHg1OSwgMHg4OCB9LAorCXsgMHg1YSwgMHg4OCB9LAorCXsgMHg1YiwgMHg0NCB9LAor CXsgMHg1YywgMHg2NyB9LAorCXsgMHg1ZCwgMHg0OSB9LAorCXsgMHg1ZSwgMHgwZSB9LAor CXsgMHg2YywgMHgwYSB9LAorCXsgMHg2ZCwgMHg1NSB9LAorCXsgMHg2ZSwgMHgxMSB9LAor CXsgMHg2ZiwgMHg5ZiB9LAorCXsgMHg2YSwgMHg0MCB9LAorCXsgMHgwMSwgMHg0MCB9LAor CXsgMHgwMiwgMHg0MCB9LAorCXsgMHgxMywgMHhlNyB9LAorCS8qIE1hdHJpeCBjb2VmZmlj aWVudCAqLworCXsgMHg0ZiwgMHg4MCB9LAorCXsgMHg1MCwgMHg4MCB9LAorCXsgMHg1MSwg MHgwMCB9LAorCXsgMHg1MiwgMHgyMiB9LAorCXsgMHg1MywgMHg1ZSB9LAorCXsgMHg1NCwg MHg4MCB9LAorCXsgMHg1OCwgMHg5ZSB9LAorCS8qIEVkZ2UsIHBpeGVsIGNvcnJlY3Rpb24s IGRlLW5vaXNlLCBDT00xMywgVVYsIENvbnRyYXN0ICovCisJeyAweDQxLCAweDA4IH0sCisJ eyAweDNmLCAweDAwIH0sCisJeyAweDc1LCAweDA1IH0sCisJeyAweDc2LCAweGUxIH0sCisJ eyAweDRjLCAweDAwIH0sCisJeyAweDc3LCAweDAxIH0sCisJeyAweDNkLCAweGMxIH0sCisJ eyAweDRiLCAweDA5IH0sCisJeyAweGM5LCAweDYwIH0sCisJeyAweDQxLCAweDM4IH0sCisJ eyAweDU2LCAweDQwIH0sCisJLyogRXhwb3N1cmUgdGltaW5nLCBiYW5kaW5nIGZpbHRlciAq LworCXsgMHgzNCwgMHgxMSB9LAorCXsgMHgzYiwgMHgwMiB9LAorCXsgMHhhNCwgMHg4OCB9 LAorCXsgMHg5NiwgMHgwMCB9LAorCXsgMHg5NywgMHgzMCB9LAorCXsgMHg5OCwgMHgyMCB9 LAorCXsgMHg5OSwgMHgzMCB9LAorCXsgMHg5YSwgMHg4NCB9LAorCXsgMHg5YiwgMHgyOSB9 LAorCXsgMHg5YywgMHgwMyB9LAorCXsgMHg5ZCwgMHg0YyB9LAorCXsgMHg5ZSwgMHgzZiB9 LAorCXsgMHg3OCwgMHgwNCB9LAorCS8qID8/PyAqLworCXsgMHg3OSwgMHgwMSB9LAorCXsg MHhjOCwgMHhmMCB9LAorCXsgMHg3OSwgMHgwZiB9LAorCXsgMHhjOCwgMHgyMCB9LAorCXsg MHg3OSwgMHgxMCB9LAorCXsgMHhjOCwgMHg3ZSB9LAorCXsgMHg3OSwgMHgwYiB9LAorCXsg MHhjOCwgMHgwMSB9LAorCXsgMHg3OSwgMHgwYyB9LAorCXsgMHhjOCwgMHgwNyB9LAorCXsg MHg3OSwgMHgwZCB9LAorCXsgMHhjOCwgMHgyMCB9LAorCXsgMHg3OSwgMHgwOSB9LAorCXsg MHhjOCwgMHg4MCB9LAorCXsgMHg3OSwgMHgwMiB9LAorCXsgMHhjOCwgMHhjMCB9LAorCXsg MHg3OSwgMHgwMyB9LAorCXsgMHhjOCwgMHg0MCB9LAorCXsgMHg3OSwgMHgwNSB9LAorCXsg MHhjOCwgMHgzMCB9LAorCXsgMHg3OSwgMHgyNiB9LAorCS8qIExlbnMgY29ycmVjdGlvbiAq LworCXsgMHg2NCwgMHg1MCB9LAorCXsgMHg2NSwgMHg1MCB9LAorCXsgMHg2NiwgMHgwMSB9 LAorCXsgMHg5NCwgMHg1MCB9LAorCXsgMHg5NSwgMHg1MCB9LAorfTsKKworLyogQ2FtZXJh IHNlbnNvciBkZXZpY2UgZnVuY3Rpb25zICovCitzdGF0aWMgaW50IG92NzY3MF92aWRlb19w cm9iZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwlzdHJ1Y3Qgb3Y3Njcw ICpvdjc2NzAgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NjcwLCBpY2QpOworCXU4 IGRhdGE7CisJaW50IHg7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNf Xyk7CisKKwlpZiAoIWljZC0+ZGV2LnBhcmVudCB8fAorCQl0b19zb2NfY2FtZXJhX2hvc3Qo aWNkLT5kZXYucGFyZW50KS0+bnIgIT0gaWNkLT5pZmFjZSkKKwkJCXJldHVybiAtRU5PREVW OworCisJLyogUmVhZCBvdXQgQ2hpcCBJZCBhbmQgdmVyc2lvbiAqLworCWRhdGEgPSByZWdf cmVhZChvdjc2NzAtPmNsaWVudCwgT1Y3NjcwX01JREgpOworCWRldl9kYmcoJmljZC0+ZGV2 LCAiQ2hpcCBJZEg9MHglWFxuIiwgZGF0YSk7CisJaWYgKGRhdGEgIT0gMHg3RikKKwkJcmV0 dXJuIC1FTk9ERVY7CisJZGF0YSA9IHJlZ19yZWFkKG92NzY3MC0+Y2xpZW50LCBPVjc2NzBf TUlETCk7CisJZGV2X2RiZygmaWNkLT5kZXYsICJDaGlwIElkTD0weCVYXG4iLCBkYXRhKTsK KwlpZiAoZGF0YSAhPSAweEEyKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlkYXRhID0gcmVnX3Jl YWQob3Y3NjcwLT5jbGllbnQsIE9WNzY3MF9QSUQpOworCWRldl9kYmcoJmljZC0+ZGV2LCAi Q2hpcCBQSUQ9MHglWFxuIiwgZGF0YSk7CisJaWYgKGRhdGEgIT0gMHg3NikKKwkJcmV0dXJu IC1FTk9ERVY7CisJZGF0YSA9IHJlZ19yZWFkKG92NzY3MC0+Y2xpZW50LCBPVjc2NzBfVkVS KTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIkNoaXAgVkVSPTB4JVhcbiIsIGRhdGEpOworCWlm IChkYXRhICE9IDB4NzMpCisJCXJldHVybiAtRU5PREVWOworCisJLyogTm93IHdlIGFscmVh ZHkga25vdyB0aGF0IE9WNzY3MCBjaGlwIGlzIHRoZXJlICovCisJZGV2X2RiZygmaWNkLT5k ZXYsICJPbW5pVmlzaW9uIGNhbWVyYSBPVjc2NzAgZGV0ZWN0ZWRcbiIpOworCisJbG9jYWxf aXJxX2Rpc2FibGUoKTsKKwkvKiBTZXR1cCByZWdpc3RlcnMgKi8KKwlmb3IgKHggPSAwOyB4 IDwgQVJSQVlfU0laRShpbml0X2FycmF5X3ZnYSk7IHgrKykKKwkJcmVnX3dyaXRlKG92NzY3 MC0+Y2xpZW50LCBpbml0X2FycmF5X3ZnYVt4XVswXSwKKwkJCWluaXRfYXJyYXlfdmdhW3hd WzFdKTsKKwlkYXRhID0gcmVnX3JlYWQob3Y3NjcwLT5jbGllbnQsIDB4MTEpOworCWRldl9k YmcoJmljZC0+ZGV2LCAiUmVnIDB4MTEgaXMgMHglMDJYXG4iLCBkYXRhKTsKKwlsb2NhbF9p cnFfZW5hYmxlKCk7CisKKwkvKiBDaGlwIGluZm8gc2V0dXAgKi8KKwlvdjc2NzAtPm1vZGVs ID0gVjRMMl9JREVOVF9PVjc2NzA7CisJaWNkLT5mb3JtYXRzID0gb3Y3NjcwX2Zvcm1hdHM7 CisJaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUob3Y3NjcwX2Zvcm1hdHMpOworCisJ LyogSWYgY2hpcCBpcyBkZXRlY3RlZCwgc3RhcnQgdmlkZW8gKi8KKwlyZXR1cm4gc29jX2Nh bWVyYV92aWRlb19zdGFydChpY2QpOworfQorCitzdGF0aWMgdm9pZCBvdjc2NzBfdmlkZW9f cmVtb3ZlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBvdjc2 NzAgKm92NzY3MCA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc2NzAsIGljZCk7CisJ ZGV2X2RiZygmaWNkLT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCXNvY19jYW1lcmFfdmlk ZW9fc3RvcCgmb3Y3NjcwLT5pY2QpOworfQorCitzdGF0aWMgaW50IG92NzY3MF9pbml0KHN0 cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBvdjc2NzAgKm92NzY3 MCA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc2NzAsIGljZCk7CisKKwlkZXZfZGJn KCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBSZXNldCBjaGlwICovCisJ bXNsZWVwKDIpOworCXJlZ193cml0ZShvdjc2NzAtPmNsaWVudCwgT1Y3NjcwX0NPTTcsIDB4 ODApOworCW1zbGVlcCgyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzY3 MF9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCWRldl9kYmco JmljZC0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBvdjc2NzBfc3RhcnRfY2FwdHVyZShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmlj ZCkKK3sKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3N0b3BfY2FwdHVyZShzdHJ1Y3Qgc29jX2Nh bWVyYV9kZXZpY2UgKmljZCkKK3sKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1 bmNfXyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3NldF9idXNfcGFy YW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJCQkJdW5zaWduZWQgbG9u ZyBmbGFncykKK3sKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG92NzY3MF9xdWVyeV9idXNf cGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJZGV2X2RiZygmaWNk LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJLyogUmV0dXJuIE9WNzY3MCBzZW5zb3Ig YnVzIGNhcGFiaWxpdGllcyAqLworCXJldHVybiAJU09DQU1fTUFTVEVSIHwKKwkJU09DQU1f UENMS19TQU1QTEVfUklTSU5HIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAorCQlT T0NBTV9WU1lOQ19BQ1RJVkVfSElHSAl8CisJCVNPQ0FNX0RBVEFXSURUSF84OworfQorCitz dGF0aWMgaW50IG92NzY3MF9zZXRfZm10X2NhcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2Ug KmljZCwgX191MzIgcGl4Zm10LAorCQkJCQkJCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7 CisJc3RydWN0IG92NzY3MCAqb3Y3NjcwID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92 NzY3MCwgaWNkKTsKKwlpbnQgeDsKKwl1OCBkYXRhOworCisJLyogUGl4ZWwgZm9ybWF0IHNl dHVwICovCisJc3dpdGNoIChwaXhmbXQpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgkJ LyogWVVWIDQ6MjoyICovCisJCWRldl9kYmcoJmljZC0+ZGV2LAorCQkJIiVzOiBzZXQgZm9y bWF0IFY0TDJfUElYX0ZNVF9ZVVlWXG4iLCBfX2Z1bmNfXyk7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCWdvdG8gZXhpdDE7CisJfQorCisKKwkvKiBSZXNvbHV0aW9uIHNldHVwICovCisJ ZGV2X2RiZygmaWNkLT5kZXYsICIlczogYXNrIHJlc29sdXRpb24gVz0lZCwgSD0lZFxuIiwg X19mdW5jX18sCisJCXJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCWRldl9kYmcoJmlj ZC0+ZGV2LCAiJXM6IGN1cnJlbnQgcmVzb2x1dGlvbiBpcyBXPSVkLCBIPSVkXG4iLCBfX2Z1 bmNfXywKKwkJaWNkLT53aWR0aCwgaWNkLT5oZWlnaHQpOworCisJaWYgKChyZWN0LT53aWR0 aCAhPSBpY2QtPndpZHRoKSAmJiAocmVjdC0+aGVpZ2h0ICE9IGljZC0+aGVpZ2h0KSkgewor CisJCS8qIFZHQSAqLworCQlpZiAoKHJlY3QtPndpZHRoID09IDY0MCkgJiYgKHJlY3QtPmhl aWdodCA9PSA0ODApKSB7CisJCQlkZXZfZGJnKCZpY2QtPmRldiwKKwkJCQkiJXM6IGNoYW5n ZSByZXNvbHV0aW9uIHRvIFc9JWQsIEg9JWRcbiIsCisJCQkJCV9fZnVuY19fLCByZWN0LT53 aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQlyZWdf d3JpdGUob3Y3NjcwLT5jbGllbnQsIE9WNzY3MF9DT003LCAweDgwKTsKKwkJCW1zbGVlcCgy KTsKKwkJCWZvciAoeCA9IDA7IHggPCBBUlJBWV9TSVpFKGluaXRfYXJyYXlfdmdhKTsgeCsr KQorCQkJCXJlZ193cml0ZShvdjc2NzAtPmNsaWVudCwgaW5pdF9hcnJheV92Z2FbeF1bMF0s CisJCQkJCWluaXRfYXJyYXlfdmdhW3hdWzFdKTsKKwkJCWRhdGEgPSByZWdfcmVhZChvdjc2 NzAtPmNsaWVudCwgMHgxMSk7CisJCQlkZXZfZGJnKCZpY2QtPmRldiwgIlJlZyAweDExIGlz IDB4JVhcbiIsIGRhdGEpOworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQl9CisJCS8qIFFW R0EgKi8KKwkJZWxzZSBpZiAoKHJlY3QtPndpZHRoID09IDMyMCkgJiYgKHJlY3QtPmhlaWdo dCA9PSAyNDApKSB7CisJCQlkZXZfZGJnKCZpY2QtPmRldiwKKwkJCQkiJXM6IGNoYW5nZSBy ZXNvbHV0aW9uIHRvIFc9JWQsIEg9JWRcbiIsCisJCQkJCV9fZnVuY19fLCByZWN0LT53aWR0 aCwgcmVjdC0+aGVpZ2h0KTsKKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJCQlyZWdfd3Jp dGUob3Y3NjcwLT5jbGllbnQsIE9WNzY3MF9DT003LCAweDgwKTsKKwkJCW1zbGVlcCgyKTsK KwkJCWZvciAoeCA9IDA7IHggPCBBUlJBWV9TSVpFKGluaXRfYXJyYXlfcXZnYSk7IHgrKykK KwkJCQlyZWdfd3JpdGUob3Y3NjcwLT5jbGllbnQsIGluaXRfYXJyYXlfcXZnYVt4XVswXSwK KwkJCQkJaW5pdF9hcnJheV9xdmdhW3hdWzFdKTsKKwkJCWRhdGEgPSByZWdfcmVhZChvdjc2 NzAtPmNsaWVudCwgMHgxMSk7CisJCQlkZXZfZGJnKCZpY2QtPmRldiwgIlJlZyAweDExIGlz IDB4JVhcbiIsIGRhdGEpOworCQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQl9CisJCS8qIFFR VkdBICovCisJCWVsc2UgaWYgKChyZWN0LT53aWR0aCA9PSAxNjApICYmIChyZWN0LT5oZWln aHQgPT0gMTIwKSkgeworCQkJZGV2X2RiZygmaWNkLT5kZXYsCisJCQkJIiVzOiBjaGFuZ2Ug cmVzb2x1dGlvbiB0byBXPSVkLCBIPSVkXG4iLAorCQkJCQlfX2Z1bmNfXywgcmVjdC0+d2lk dGgsIHJlY3QtPmhlaWdodCk7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJcmVnX3dy aXRlKG92NzY3MC0+Y2xpZW50LCBPVjc2NzBfQ09NNywgMHg4MCk7CisJCQltc2xlZXAoMik7 CisJCQlmb3IgKHggPSAwOyB4IDwgQVJSQVlfU0laRShpbml0X2FycmF5X3FxdmdhKTsgeCsr KQorCQkJCXJlZ193cml0ZShvdjc2NzAtPmNsaWVudCwKKwkJCQkJaW5pdF9hcnJheV9xcXZn YVt4XVswXSwKKwkJCQkJCWluaXRfYXJyYXlfcXF2Z2FbeF1bMV0pOworCQkJZGF0YSA9IHJl Z19yZWFkKG92NzY3MC0+Y2xpZW50LCAweDExKTsKKwkJCWRldl9kYmcoJmljZC0+ZGV2LCAi UmVnIDB4MTEgaXMgMHglWFxuIiwgZGF0YSk7CisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJ CX0KKwkJLyogQ0lGICovCisJCWVsc2UgaWYgKChyZWN0LT53aWR0aCA9PSAzNTIpICYmIChy ZWN0LT5oZWlnaHQgPT0gMjg4KSkgeworCQkJZGV2X2RiZygmaWNkLT5kZXYsCisJCQkJIiVz OiBjaGFuZ2UgcmVzb2x1dGlvbiB0byBXPSVkLCBIPSVkXG4iLAorCQkJCQlfX2Z1bmNfXywg cmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwor CQkJcmVnX3dyaXRlKG92NzY3MC0+Y2xpZW50LCBPVjc2NzBfQ09NNywgMHg4MCk7CisJCQlt c2xlZXAoMik7CisJCQlmb3IgKHggPSAwOyB4IDwgQVJSQVlfU0laRShpbml0X2FycmF5X2Np Zik7IHgrKykKKwkJCQlyZWdfd3JpdGUob3Y3NjcwLT5jbGllbnQsIGluaXRfYXJyYXlfY2lm W3hdWzBdLAorCQkJCQlpbml0X2FycmF5X2NpZlt4XVsxXSk7CisJCQlkYXRhID0gcmVnX3Jl YWQob3Y3NjcwLT5jbGllbnQsIDB4MTEpOworCQkJZGV2X2RiZygmaWNkLT5kZXYsICJSZWcg MHgxMSBpcyAweCVYXG4iLCBkYXRhKTsKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJfQor CQkvKiBRQ0lGICovCisJCWVsc2UgaWYgKChyZWN0LT53aWR0aCA9PSAxNzYpICYmIChyZWN0 LT5oZWlnaHQgPT0gMTQ0KSkgeworCQkJZGV2X2RiZygmaWNkLT5kZXYsCisJCQkJIiVzOiBj aGFuZ2UgcmVzb2x1dGlvbiB0byBXPSVkLCBIPSVkXG4iLAorCQkJCQlfX2Z1bmNfXywgcmVj dC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCQkJ cmVnX3dyaXRlKG92NzY3MC0+Y2xpZW50LCBPVjc2NzBfQ09NNywgMHg4MCk7CisJCQltc2xl ZXAoMik7CisJCQlmb3IgKHggPSAwOyB4IDwgQVJSQVlfU0laRShpbml0X2FycmF5X3FjaWYp OyB4KyspCisJCQkJcmVnX3dyaXRlKG92NzY3MC0+Y2xpZW50LCBpbml0X2FycmF5X3FjaWZb eF1bMF0sCisJCQkJCWluaXRfYXJyYXlfcWNpZlt4XVsxXSk7CisJCQlkYXRhID0gcmVnX3Jl YWQob3Y3NjcwLT5jbGllbnQsIDB4MTEpOworCQkJZGV2X2RiZygmaWNkLT5kZXYsICJSZWcg MHgxMSBpcyAweCVYXG4iLCBkYXRhKTsKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJfSBl bHNlCisJCQlnb3RvIGV4aXQxOworCX0KKwlyZXR1cm4gMDsKK2V4aXQxOgorCXJldHVybiAt RUlOVkFMOworfQorCitzdGF0aWMgaW50IG92NzY3MF90cnlfZm10X2NhcChzdHJ1Y3Qgc29j X2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7 CisJLyogVkdBICovCisJaWYgKChmLT5mbXQucGl4LndpZHRoID09IDY0MCkgJiYgKGYtPmZt dC5waXguaGVpZ2h0ID09IDQ4MCkpCisJCWdvdG8gZXhpdDE7CisJLyogUVZHQSAqLworCWVs c2UgaWYgKChmLT5mbXQucGl4LndpZHRoID09IDMyMCkgJiYgKGYtPmZtdC5waXguaGVpZ2h0 ID09IDI0MCkpCisJCWdvdG8gZXhpdDE7CisJLyogUVFWR0EgKi8KKwllbHNlIGlmICgoZi0+ Zm10LnBpeC53aWR0aCA9PSAxNjApICYmIChmLT5mbXQucGl4LmhlaWdodCA9PSAxMjApKQor CQlnb3RvIGV4aXQxOworCS8qIENJRiAqLworCWVsc2UgaWYgKChmLT5mbXQucGl4LndpZHRo ID09IDM1MikgJiYgKGYtPmZtdC5waXguaGVpZ2h0ID09IDI4OCkpCisJCWdvdG8gZXhpdDE7 CisJLyogUUNJRiAqLworCWVsc2UgaWYgKChmLT5mbXQucGl4LndpZHRoID09IDE3NikgJiYg KGYtPmZtdC5waXguaGVpZ2h0ID09IDE0NCkpCisJCWdvdG8gZXhpdDE7CisJZWxzZQorCQln b3RvIGV4aXQwOworCitleGl0MToKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzOiBSZXNvbHV0 aW9uIFc9JWQsIEg9JWQgc3VwcG9ydGVkXG4iLAorCQlfX2Z1bmNfXywgZi0+Zm10LnBpeC53 aWR0aCwgZi0+Zm10LnBpeC5oZWlnaHQpOworCXJldHVybiAwOworZXhpdDA6CisJZGV2X2Ri ZygmaWNkLT5kZXYsICIlczogUmVzb2x1dGlvbiBXPSVkLCBIPSVkIE5PVCBzdXBwb3J0ZWQh XG4iLAorCQlfX2Z1bmNfXywgZi0+Zm10LnBpeC53aWR0aCwgZi0+Zm10LnBpeC5oZWlnaHQp OworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IG92NzY3MF9nZXRfY2hpcF9p ZChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2Ri Z19jaGlwX2lkZW50ICppZCkKK3sKKwlzdHJ1Y3Qgb3Y3NjcwICpvdjc2NzAgPSBjb250YWlu ZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NjcwLCBpY2QpOworCisJZGV2X2RiZygmaWNkLT5kZXYs ICIlc1xuIiwgX19mdW5jX18pOworCWlmIChpZC0+bWF0Y2gudHlwZSAhPSBWNEwyX0NISVBf TUFUQ0hfSTJDX0FERFIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlkLT5tYXRjaC5h ZGRyICE9IG92NzY3MC0+Y2xpZW50LT5hZGRyKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlk LT5pZGVudAk9IG92NzY3MC0+bW9kZWw7CisJaWQtPnJldmlzaW9uCT0gMDsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBvdjc2NzBfY29u dHJvbHNbXSA9IHsKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9CUklHSFRORVNTLAorCQkudHlw ZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZQkJPSAiQnJpZ2h0bmVzcyIs CisJCS5taW5pbXVtCT0gLTEyNywKKwkJLm1heGltdW0JPSAxMjcsCisJCS5zdGVwCQk9IDEs CisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwkJLmZsYWdzCQk9IFY0TDJfQ1RSTF9GTEFHX1NM SURFUiwKKwl9LCB7CisJCS5pZAkJPSBWNEwyX0NJRF9DT05UUkFTVCwKKwkJLnR5cGUJCT0g VjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUJCT0gIkNvbnRyYXN0IiwKKwkJLm1p bmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEyNywKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1 bHRfdmFsdWUJPSAweDQwLAorCQkuZmxhZ3MJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAor CX0sIHsKKwkJLmlkCQk9IFY0TDJfQ0lEX1ZGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxf VFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiViBGbGlwIiwKKwkJLm1pbmltdW0JPSAwLAor CQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwK Kwl9LCB7CisJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJM X1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkggRmxpcCIsCisJCS5taW5pbXVtCT0gMCwK KwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAs CisJfSwKK307CisKK3N0YXRpYyBpbnQgb3Y3NjcwX2dldF9jb250cm9sKHN0cnVjdCBzb2Nf Y2FtZXJhX2RldmljZSAqLAorCQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqKTsKK3N0YXRp YyBpbnQgb3Y3NjcwX3NldF9jb250cm9sKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLAor CQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqKTsKKworc3RhdGljIHN0cnVjdCBzb2NfY2Ft ZXJhX29wcyBvdjc2NzBfb3BzID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLnBy b2JlCQkJPSBvdjc2NzBfdmlkZW9fcHJvYmUsCisJLnJlbW92ZQkJCT0gb3Y3NjcwX3ZpZGVv X3JlbW92ZSwKKwkuaW5pdAkJCT0gb3Y3NjcwX2luaXQsCisJLnJlbGVhc2UJCT0gb3Y3Njcw X3JlbGVhc2UsCisJLnN0YXJ0X2NhcHR1cmUJCT0gb3Y3NjcwX3N0YXJ0X2NhcHR1cmUsCisJ LnN0b3BfY2FwdHVyZQkJPSBvdjc2NzBfc3RvcF9jYXB0dXJlLAorCS5zZXRfZm10CQk9IG92 NzY3MF9zZXRfZm10X2NhcCwKKwkudHJ5X2ZtdAkJPSBvdjc2NzBfdHJ5X2ZtdF9jYXAsCisJ LnNldF9idXNfcGFyYW0JCT0gb3Y3NjcwX3NldF9idXNfcGFyYW0sCisJLnF1ZXJ5X2J1c19w YXJhbQk9IG92NzY3MF9xdWVyeV9idXNfcGFyYW0sCisJLmNvbnRyb2xzCQk9IG92NzY3MF9j b250cm9scywKKwkubnVtX2NvbnRyb2xzCQk9IEFSUkFZX1NJWkUob3Y3NjcwX2NvbnRyb2xz KSwKKwkuZ2V0X2NvbnRyb2wJCT0gb3Y3NjcwX2dldF9jb250cm9sLAorCS5zZXRfY29udHJv bAkJPSBvdjc2NzBfc2V0X2NvbnRyb2wsCisJLmdldF9jaGlwX2lkCQk9IG92NzY3MF9nZXRf Y2hpcF9pZCwKK307CisKK3N0YXRpYyBpbnQgb3Y3NjcwX2dldF9jb250cm9sKHN0cnVjdCBz b2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3Ry bCkKK3sKKwlzdHJ1Y3Qgb3Y3NjcwICpvdjc2NzAgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1 Y3Qgb3Y3NjcwLCBpY2QpOworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlc1xuIiwgX19mdW5j X18pOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVT UzoKKwkJY3RybC0+dmFsdWUgPSByZWdfcmVhZChvdjc2NzAtPmNsaWVudCwgT1Y3NjcwX0JS SUdIVCk7CisJCWlmIChjdHJsLT52YWx1ZSAmIDB4ODApCisJCQljdHJsLT52YWx1ZSA9IC0o Y3RybC0+dmFsdWUgJiB+MHg4MCk7CisJCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgR2V0IGNv bnRyb2wgW1Y0TDJfQ0lEX0JSSUdIVE5FU1NdPSVkXG4iLAorCQkJX19mdW5jX18sIGN0cmwt PnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+ dmFsdWUgPSByZWdfcmVhZChvdjc2NzAtPmNsaWVudCwgT1Y3NjcwX0NPTlRSQVMpOworCQlk ZXZfZGJnKCZpY2QtPmRldiwgIiVzIEdldCBjb250cm9sIFtWNEwyX0NJRF9DT05UUkFTVF09 JWRcbiIsCisJCQlfX2Z1bmNfXywgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0 TDJfQ0lEX1ZGTElQOgorCQljdHJsLT52YWx1ZSA9IChyZWdfcmVhZChvdjc2NzAtPmNsaWVu dCwKKwkJCU9WNzY3MF9NVkZQKSA+PiA0KSAmIDB4MDE7CisJCWRldl9kYmcoJmljZC0+ZGV2 LCAiJXMgR2V0IGNvbnRyb2wgW1Y0TDJfQ0lEX1ZGTElQXT0lZFxuIiwKKwkJCV9fZnVuY19f LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWN0 cmwtPnZhbHVlID0gKHJlZ19yZWFkKG92NzY3MC0+Y2xpZW50LAorCQkJT1Y3NjcwX01WRlAp ID4+IDUpICYgMHgwMTsKKwkJZGV2X2RiZygmaWNkLT5kZXYsICIlcyBHZXQgY29udHJvbCBb VjRMMl9DSURfSEZMSVBdPSVkXG4iLAorCQkJX19mdW5jX18sIGN0cmwtPnZhbHVlKTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IG92NzY3MF9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9k ZXZpY2UgKmljZCwKKwkJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3Ry dWN0IG92NzY3MCAqb3Y3NjcwID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzY3MCwg aWNkKTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsOworCWludCBjdHJs X2J5dGU7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlx Y3RybCA9IHNvY19jYW1lcmFfZmluZF9xY3RybCgmb3Y3NjcwX29wcywgY3RybC0+aWQpOwor CWlmICghcWN0cmwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGN0cmwtPnZhbHVlID4g cWN0cmwtPm1heGltdW0gfHwgY3RybC0+dmFsdWUgPCBxY3RybC0+bWluaW11bSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9C UklHSFRORVNTOgorCQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIFNldCBjb250cm9sIFtWNEwy X0NJRF9CUklHSFRORVNTXT0lZFxuIiwKKwkJCV9fZnVuY19fLCBjdHJsLT52YWx1ZSk7CisJ CWlmIChjdHJsLT52YWx1ZSA8IDApCisJCQlyZWdfd3JpdGUob3Y3NjcwLT5jbGllbnQsIE9W NzY3MF9CUklHSFQsCisJCQkJYWJzKGN0cmwtPnZhbHVlKSB8IDB4ODApOworCQllbHNlCisJ CQlyZWdfd3JpdGUob3Y3NjcwLT5jbGllbnQsIE9WNzY3MF9CUklHSFQsIGN0cmwtPnZhbHVl KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJZGV2X2RiZygmaWNk LT5kZXYsICIlcyBTZXQgY29udHJvbCBbVjRMMl9DSURfQ09OVFJBU1RdPSVkXG4iLAorCQkJ X19mdW5jX18sIGN0cmwtPnZhbHVlKTsKKwkJcmVnX3dyaXRlKG92NzY3MC0+Y2xpZW50LCBP Vjc2NzBfQ09OVFJBUywgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lE X1ZGTElQOgorCQlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIFNldCBjb250cm9sIFtWNEwyX0NJ RF9WRkxJUF09JWRcbiIsCisJCQlfX2Z1bmNfXywgY3RybC0+dmFsdWUpOworCQljdHJsX2J5 dGUgPSByZWdfcmVhZChvdjc2NzAtPmNsaWVudCwgT1Y3NjcwX01WRlApOworCQljdHJsX2J5 dGUgJj0gfigxPDw0KTsKKwkJY3RybF9ieXRlIHw9IGN0cmwtPnZhbHVlIDw8IDQ7CisJCXJl Z193cml0ZShvdjc2NzAtPmNsaWVudCwgT1Y3NjcwX01WRlAsIGN0cmxfYnl0ZSk7CisJCWJy ZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMg U2V0IGNvbnRyb2wgW1Y0TDJfQ0lEX0hGTElQXT0lZFxuIiwKKwkJCV9fZnVuY19fLCBjdHJs LT52YWx1ZSk7CisJCWN0cmxfYnl0ZSA9IHJlZ19yZWFkKG92NzY3MC0+Y2xpZW50LCBPVjc2 NzBfTVZGUCk7CisJCWN0cmxfYnl0ZSAmPSB+KDE8PDUpOworCQljdHJsX2J5dGUgfD0gY3Ry bC0+dmFsdWUgPDwgNTsKKwkJcmVnX3dyaXRlKG92NzY3MC0+Y2xpZW50LCBPVjc2NzBfTVZG UCwgY3RybF9ieXRlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzY3MF9wcm9iZShzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQg KmRpZCkKK3sKKwlzdHJ1Y3Qgb3Y3NjcwICpvdjc2NzA7CisJc3RydWN0IGkyY19hZGFwdGVy ICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1 Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpp Y2wgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlkZXZfZGJn KCZjbGllbnQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBJMkMgYWRhcHRlciBw cm9iZSAqLworCWlmICghaWNsKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiT1Y3Njcw IGRyaXZlciBuZWVkcyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJ fQorCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19J MkMpKSB7CisJCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsCisJCQkiSTJDLUFkYXB0ZXIgZG9l c24ndCBzdXBwb3J0IEkyQ19GVU5DX0kyQ1xuIik7CisJCXJldHVybiAtRUlPOworCX0KKwor CW92NzY3MCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdjc2NzApLCBHRlBfS0VSTkVMKTsK KwlpZiAoIW92NzY3MCkKKwkJcmV0dXJuIC1FTk9NRU07CisJb3Y3NjcwLT5jbGllbnQgPSBj bGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgb3Y3NjcwKTsKKworCS8qIFNl dHVwIGNhbWVyYSBjYXBhYmlsaXRpZXMgaW4gZGV2aWNlIHN0cnVjdHVyZSBmb3IgbGF0ZXIg dXNlICovCisJaWNkID0gJm92NzY3MC0+aWNkOworCWljZC0+b3BzCT0gJm92NzY3MF9vcHM7 CisJaWNkLT5jb250cm9sCT0gJmNsaWVudC0+ZGV2OworCWljZC0+d2lkdGgJPSA2NDA7CisJ aWNkLT5oZWlnaHQJPSA0ODA7CisJaWNkLT54X21pbgk9IDA7CisJaWNkLT55X21pbgk9IDA7 CisJaWNkLT54X2N1cnJlbnQJPSAwOworCWljZC0+eV9jdXJyZW50CT0gMDsKKwlpY2QtPndp ZHRoX21pbgk9IDQwOworCWljZC0+d2lkdGhfbWF4CT0gNjQwOworCWljZC0+aGVpZ2h0X21p bgk9IDMwOworCWljZC0+aGVpZ2h0X21heAk9IDQ4MDsKKwlpY2QtPnlfc2tpcF90b3AJPSAw OworCWljZC0+aWZhY2UJPSBpY2wtPmJ1c19pZDsKKworCS8qIFJlZ2lzdGVyIGNhbWVyYSBk ZXZpY2UgKi8KKwlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOworCWlm IChyZXQpCisJCWdvdG8gZWlzZHI7CisJcmV0dXJuIDA7CitlaXNkcjoKKwlrZnJlZShvdjc2 NzApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3JlbW92ZShzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBvdjc2NzAgKm92NzY3MCA9IGky Y19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIl c1xuIiwgX19mdW5jX18pOworCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJm92NzY3 MC0+aWNkKTsKKwlrZnJlZShvdjc2NzApOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgb3Y3NjcwX2lkW10gPSB7CisJeyAib3Y3eHh4Iiwg MCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBvdjc2NzBfaWQpOwor CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgb3Y3NjcwX2kyY19kcml2ZXIgPSB7CisJLmRy aXZlciA9CisJCQl7CisJCQkJLm5hbWUgPSAib3Y3NjcwIiwKKwkJCX0sCisJLnByb2JlCQk9 IG92NzY3MF9wcm9iZSwKKwkucmVtb3ZlCQk9IG92NzY3MF9yZW1vdmUsCisJLmlkX3RhYmxl CT0gb3Y3NjcwX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgb3Y3NjcwX21vZF9pbml0 KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZvdjc2NzBfaTJjX2RyaXZlcik7 Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvdjc2NzBfbW9kX2V4aXQodm9pZCkKK3sKKwlp MmNfZGVsX2RyaXZlcigmb3Y3NjcwX2kyY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChv djc2NzBfbW9kX2luaXQpOworbW9kdWxlX2V4aXQob3Y3NjcwX21vZF9leGl0KTsKKworTU9E VUxFX0RFU0NSSVBUSU9OKCJPbW5pVmlzaW9uIE9WNzY3MCBDYW1lcmEgZHJpdmVyIik7CitN T0RVTEVfQVVUSE9SKCJEYXJpdXMgQXVndWxpcyA8ZGFyaXVzLmF1Z3VsaXNAdGVsdG9uaWth Lmx0PiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo= --------------060907030207010804010007--