From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Laufer Date: Tue, 28 Mar 2000 00:11:17 +0000 Subject: [Patch] sb_card.c, take 2 MIME-Version: 1 Content-Type: multipart/mixed; boundary="1199987260-764216604-954202277=:1588" Message-Id: List-Id: To: linux-sound@vger.kernel.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --1199987260-764216604-954202277=:1588 Content-Type: TEXT/PLAIN; charset=US-ASCII Hello again, Ok, I've taken Alex's points into consideration and come up with the following (against 2.3.99pre3): 1) Same code cleanup as before, minus dev->active changes (See my previous patch and ensuing discussion for details). 2) ISAPnP detection now finds and activates all known cards with only one load of the driver. The second part is interesting for people like Alex and I who have multiple soundblaster pnp cards in one system. We no longer have to load multiple copies of the soundblaster driver for them to work. It was amazing to compile ISAPnP and the soundblaster driver into the kernel (non-modular) and have it auto-detect all of them. Please send me your feedback. And I don't have any CMI, Diamond, or ALS cards to test this with either. So if you have one please test :) If this gets in (or a variant) I'll update the docs... As always, thank you for your time, Paul Laufer (who can't believe he just sent in a 24k patch) --1199987260-764216604-954202277=:1588 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="sb_card.99pre3.patch" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="sb_card.99pre3.patch" LS0tIGxpbnV4LWRldmVsLXZpcmdpbi9kcml2ZXJzL3NvdW5kL3NiX2NhcmQu YwlTYXQgTWFyIDI1IDE1OjUyOjM0IDIwMDANCisrKyBsaW51eC9kcml2ZXJz L3NvdW5kL3NiX2NhcmQuYwlNb24gTWFyIDI3IDE1OjM4OjQzIDIwMDANCkBA IC0zMSw3ICszMSwxMCBAQA0KICAqDQogICogMTMtMDMtMjAwMCBBZGRlZCBz b21lIG1vcmUgY2FyZHMsIHRoYW5rcyB0byBUb3JzdGVuIFdlcm5lci4NCiAg KiAgUmVtb3ZlZCBqb3lzdGljayBhbmQgd2F2ZXRhYmxlIGNvZGUsIHRoZXJl IGFyZSBiZXR0ZXIgcGxhY2VzIGZvciB0aGVtLg0KLSAqICBDb2RlIGNsZWFu dXAgcGx1cyBzb21lIGZpeGVzLiANCisgKiAgQ29kZSBjbGVhbnVwIHBsdXMg c29tZSBmaXhlcy4NCisgKg0KKyAqIDI3LTAzLTIwMDAgQmlnIGNvZGUgY2xl YW51cCBhbmQgcmVvcmdhbml6YXRpb24uIElTQVBuUCBtdWx0aXBsZQ0KKyAq ICBjYXJkIGRldGVjdGlvbi4gUGF1bCBMYXVmZXIgPHBlbGF1ZmVyQGNzdXBv bW9uYS5lZHU+DQogICoNCiAgKi8NCiANCkBAIC00Nyw3ICs1MCwxNCBAQA0K ICNpbmNsdWRlICJzYl9taXhlci5oIg0KICNpbmNsdWRlICJzYi5oIg0KIA0K LXN0YXRpYyBpbnQgc2JtcHUgPSAwOw0KKyNpZiBkZWZpbmVkIENPTkZJR19J U0FQTlAgfHwgZGVmaW5lZCBDT05GSUdfSVNBUE5QX01PRFVMRQ0KKyNkZWZp bmUgU0JfQ0FSRFNfTUFYIDQNCisjZWxzZQ0KKyNkZWZpbmUgU0JfQ0FSRFNf TUFYIDENCisjZW5kaWYNCisNCitzdGF0aWMgaW50IHNibXB1W1NCX0NBUkRT X01BWF0gPSB7MH07DQorc3RhdGljIGludCBzYl9jYXJkc19udW0gPSAwOw0K IA0KIGV4dGVybiB2b2lkICpzbXdfZnJlZTsNCiANCkBAIC01NSw3ICs2NSw2 IEBADQogew0KIAlpZighc2JfZHNwX2luaXQoaHdfY29uZmlnKSkNCiAJCWh3 X2NvbmZpZy0+c2xvdHNbMF0gPSAtMTsNCi0JU09VTkRfTE9DSzsNCiB9DQog DQogc3RhdGljIGludCBfX2luaXQgcHJvYmVfc2Ioc3RydWN0IGFkZHJlc3Nf aW5mbyAqaHdfY29uZmlnKQ0KQEAgLTEyNiwzMCArMTM1LDIyIEBADQogCQl9 DQogCX0NCiAjZW5kaWYNCi0NCi0JLyogVGhpcyBpcyB1c2VsZXNzIHNpbmNl IGlzIGRvbmUgYnkgc2JfZHNwX2RldGVjdCAtIGF6dW1tbyAqLw0KLQkNCi0J aWYgKGNoZWNrX3JlZ2lvbihod19jb25maWctPmlvX2Jhc2UsIDE2KSkNCi0J ew0KLQkJcHJpbnRrKEtFUk5fRVJSICJzYl9jYXJkOiBJL08gcG9ydCAweCV4 IGlzIGFscmVhZHkgaW4gdXNlXG5cbiIsIGh3X2NvbmZpZy0+aW9fYmFzZSk7 DQotCQlyZXR1cm4gMDsNCi0JfQ0KIAlyZXR1cm4gc2JfZHNwX2RldGVjdCho d19jb25maWcsIDAsIDApOw0KIH0NCiANCi1zdGF0aWMgdm9pZCBfX2V4aXQg dW5sb2FkX3NiKHN0cnVjdCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZykNCitz dGF0aWMgdm9pZCBfX2V4aXQgdW5sb2FkX3NiKHN0cnVjdCBhZGRyZXNzX2lu Zm8gKmh3X2NvbmZpZywgaW50IGNhcmQpDQogew0KIAlpZihod19jb25maWct PnNsb3RzWzBdIT0tMSkNCi0JCXNiX2RzcF91bmxvYWQoaHdfY29uZmlnLCBz Ym1wdSk7DQorCQlzYl9kc3BfdW5sb2FkKGh3X2NvbmZpZywgc2JtcHVbY2Fy ZF0pOw0KIH0NCiANCiBleHRlcm4gaW50IGVzc3R5cGU7CS8qIEVTUyBjaGlw IHR5cGUgKi8NCiANCi1zdGF0aWMgc3RydWN0IGFkZHJlc3NfaW5mbyBjZmc7 DQotc3RhdGljIHN0cnVjdCBhZGRyZXNzX2luZm8gY2ZnX21wdTsNCitzdGF0 aWMgc3RydWN0IGFkZHJlc3NfaW5mbyBjZmdbU0JfQ0FSRFNfTUFYXTsNCitz dGF0aWMgc3RydWN0IGFkZHJlc3NfaW5mbyBjZmdfbXB1W1NCX0NBUkRTX01B WF07DQogDQotc3RydWN0IHBjaV9kZXYgCSpzYl9kZXYgCT0gTlVMTCwgDQot CQkqbXB1X2Rldgk9IE5VTEw7DQorc3RydWN0IHBjaV9kZXYgCSpzYl9kZXZb U0JfQ0FSRFNfTUFYXSAJPSB7TlVMTH0sDQorCQkqbXB1X2RldltTQl9DQVJE U19NQVhdCT0ge05VTEx9Ow0KIC8qDQogICogICAgTm90ZSBETUEyIG9mIC0x IGhhcyB0aGUgcmlnaHQgbWVhbmluZyBpbiB0aGUgU0IxNiBkcml2ZXIgYXMg d2VsbA0KICAqICAgIGFzIGhlcmUuIEl0IHdpbGwgY2F1c2UgZWl0aGVyIGFu IGVycm9yIGlmIGl0IGlzIG5lZWRlZCBvciBhIGZhbGxiYWNrDQpAQCAtMTY3 LDkgKzE2OCwxMiBAQA0KICNpZiBkZWZpbmVkIENPTkZJR19JU0FQTlAgfHwg ZGVmaW5lZCBDT05GSUdfSVNBUE5QX01PRFVMRQ0KIHN0YXRpYyBpbnQgaXNh cG5wCT0gMTsNCiBzdGF0aWMgaW50IGlzYXBucGp1bXAJPSAwOw0KLXN0YXRp YyBpbnQgYWN0aXZhdGVkCT0gMTsNCitzdGF0aWMgaW50IG11bHRpcGxlCT0g MTsNCitzdGF0aWMgaW50IHJldmVyc2UJPSAwOw0KK3N0YXRpYyBpbnQgYWN0 aXZhdGVkW1NCX0NBUkRTX01BWF0gICAgPSB7MH07DQogI2Vsc2UNCiBzdGF0 aWMgaW50IGlzYXBucAk9IDA7DQorc3RhdGljIGludCBtdWx0aXBsZQk9IDA7 DQogI2VuZGlmDQogDQogTU9EVUxFX0RFU0NSSVBUSU9OKCJTb3VuZGJsYXN0 ZXIgZHJpdmVyIik7DQpAQCAtMTg3LDggKzE5MSwxMiBAQA0KICNpZiBkZWZp bmVkIENPTkZJR19JU0FQTlAgfHwgZGVmaW5lZCBDT05GSUdfSVNBUE5QX01P RFVMRQ0KIE1PRFVMRV9QQVJNKGlzYXBucCwJImkiKTsNCiBNT0RVTEVfUEFS TShpc2FwbnBqdW1wLAkiaSIpOw0KK01PRFVMRV9QQVJNKG11bHRpcGxlLAki aSIpOw0KK01PRFVMRV9QQVJNKHJldmVyc2UsCSJpIik7DQogTU9EVUxFX1BB Uk1fREVTQyhpc2FwbnAsCSJXaGVuIHNldCB0byAwLCBQbHVnICYgUGxheSBz dXBwb3J0IHdpbGwgYmUgZGlzYWJsZWQiKTsNCiBNT0RVTEVfUEFSTV9ERVND KGlzYXBucGp1bXAsCSJKdW1wcyB0byBhIHNwZWNpZmljIHNsb3QgaW4gdGhl IGRyaXZlcidzIFBuUCB0YWJsZS4gVXNlIHRoZSBzb3VyY2UsIEx1a2UuIik7 DQorTU9EVUxFX1BBUk1fREVTQyhtdWx0aXBsZSwJIldoZW4gc2V0IHRvIDAs IHdpbGwgbm90IHNlYXJjaCBmb3IgbXVsdGlwbGUgY2FyZHMiKTsNCitNT0RV TEVfUEFSTV9ERVNDKHJldmVyc2UsCSJXaGVuIHNldCB0byAxLCB3aWxsIHJl dmVyc2UgSVNBUG5QIHNlYXJjaCBvcmRlciIpOw0KICNlbmRpZg0KIA0KIE1P RFVMRV9QQVJNX0RFU0MoaW8sCQkiU291bmRibGFzdGVyIGkvbyBiYXNlIGFk ZHJlc3MgKDB4MjIwLDB4MjQwLDB4MjYwLDB4MjgwKSIpOw0KQEAgLTIwMywy MyArMjExLDE1NSBAQA0KIA0KICNpZiBkZWZpbmVkIENPTkZJR19JU0FQTlAg fHwgZGVmaW5lZCBDT05GSUdfSVNBUE5QX01PRFVMRQ0KIA0KKy8qIFBsZWFz ZSBhZGQgbmV3IGVudHJpZXMgYXQgdGhlIGVuZCBvZiB0aGUgdGFibGUgKi8N CitzdGF0aWMgc3RydWN0IHtjaGFyICpuYW1lOyB1bnNpZ25lZCBzaG9ydCBj YXJkX3ZlbmRvciwgY2FyZF9kZXZpY2UsIGF1ZGlvX3ZlbmRvciwgYXVkaW9f ZnVuY3Rpb24sIG1wdV92ZW5kb3IsIG1wdV9mdW5jdGlvbjt9DQorc2JfaXNh cG5wX2xpc3RbXSBfX2luaXRkYXRhID0gew0KKwl7IlNvdW5kIEJsYXN0ZXIg MTYiLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf REVWSUNFKDB4MDAyNCksDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wn KSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAzMSksDQorCQkwLDAgfSwNCisJeyJT b3VuZCBCbGFzdGVyIDE2IiwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcs J0wnKSwgSVNBUE5QX0RFVklDRSgweDAwMjYpLCANCisJCUlTQVBOUF9WRU5E T1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDMxKSwNCisJ CTAsMH0sDQorCXsiU291bmQgQmxhc3RlciAxNiIsIA0KKwkJSVNBUE5QX1ZF TkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDI3KSwgDQor CQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9O KDB4MDAzMSksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgMTYiLCAN CisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfREVWSUNF KDB4MDAyOSksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElT QVBOUF9GVU5DVElPTigweDAwMzEpLA0KKwkJMCwwfSwNCisJeyJTb3VuZCBC bGFzdGVyIDE2IiwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwg SVNBUE5QX0RFVklDRSgweDAwMmIpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0Mn LCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDMxKSwNCisJCTAsMH0s DQorCXsiU291bmQgQmxhc3RlciBWaWJyYTE2UyIsIA0KKwkJSVNBUE5QX1ZF TkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDUxKSwgDQor CQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9O KDB4MDAwMSksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgVmlicmEx NkMiLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf REVWSUNFKDB4MDA3MCksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdM JyksIElTQVBOUF9GVU5DVElPTigweDAwMDEpLA0KKwkJMCwwfSwNCisJeyJT b3VuZCBCbGFzdGVyIFZpYnJhMTZDTCIsIA0KKwkJSVNBUE5QX1ZFTkRPUign QycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDgwKSwgDQorCQlJU0FQ TlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDA0 MSksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgVmlicmExNlgiLCAN CisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfREVWSUNF KDB4MDBGMCksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElT QVBOUF9GVU5DVElPTigweDAwNDMpLA0KKwkJMCwwfSwNCisJeyJTb3VuZCBC bGFzdGVyIEFXRSAzMiIsIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdM JyksIElTQVBOUF9ERVZJQ0UoMHgwMDM5KSwgDQorCQlJU0FQTlBfVkVORE9S KCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAzMSksDQorCQkw LDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdFIDMyIiwNCisJCUlTQVBOUF9W RU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfREVWSUNFKDB4MDA0MiksIA0K KwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElP TigweDAwMzEpLA0KKwkJMCwwfSwNCisJeyJTb3VuZCBCbGFzdGVyIEFXRSAz MiIsDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RF VklDRSgweDAwNDMpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcp LCBJU0FQTlBfRlVOQ1RJT04oMHgwMDMxKSwNCisJCTAsMH0sDQorCXsiU291 bmQgQmxhc3RlciBBV0UgMzIiLA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1Qn LCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDQ0KSwNCisJCUlTQVBOUF9WRU5E T1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDMxKSwNCisJ CTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBBV0UgMzIiLA0KKwkJSVNBUE5Q X1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDQ4KSwg DQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNU SU9OKDB4MDAzMSksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdF IDMyIiwNCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf REVWSUNFKDB4MDA1NCksIA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdM JyksIElTQVBOUF9GVU5DVElPTigweDAwMzEpLA0KKwkJMCwwfSwNCisJeyJT b3VuZCBCbGFzdGVyIEFXRSAzMiIsDQorCQlJU0FQTlBfVkVORE9SKCdDJywn VCcsJ0wnKSwgSVNBUE5QX0RFVklDRSgweDAwOUMpLCANCisJCUlTQVBOUF9W RU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDQxKSwN CisJCTAsMH0sDQorCXsiU291bmQgQmxhc3RlciBBV0UgNjQiLA0KKwkJSVNB UE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9ERVZJQ0UoMHgwMDlE KSwgDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZV TkNUSU9OKDB4MDA0MiksDQorCQkwLDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIg QVdFIDY0IEdvbGQiLA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyks IElTQVBOUF9ERVZJQ0UoMHgwMDlFKSwgDQorCQlJU0FQTlBfVkVORE9SKCdD JywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDA0NCksDQorCQkwLDB9 LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdFIDY0IiwNCisJCUlTQVBOUF9WRU5E T1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfREVWSUNFKDB4MDBDMSksIA0KKwkJ SVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigw eDAwNDIpLA0KKwkJMCwwfSwNCisJeyJTb3VuZCBCbGFzdGVyIEFXRSA2NCIs DQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RFVklD RSgweDAwQzMpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJ U0FQTlBfRlVOQ1RJT04oMHgwMDQ1KSwNCisJCTAsMH0sDQorCXsiU291bmQg Qmxhc3RlciBBV0UgNjQiLA0KKwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdM JyksIElTQVBOUF9ERVZJQ0UoMHgwMEM1KSwgDQorCQlJU0FQTlBfVkVORE9S KCdDJywnVCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDA0NSksDQorCQkw LDB9LA0KKwl7IlNvdW5kIEJsYXN0ZXIgQVdFIDY0IiwNCisJCUlTQVBOUF9W RU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfREVWSUNFKDB4MDBDNyksIA0K KwkJSVNBUE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElP TigweDAwNDUpLA0KKwkJMCwwfSwNCisJeyJTb3VuZCBCbGFzdGVyIEFXRSA2 NCIsDQorCQlJU0FQTlBfVkVORE9SKCdDJywnVCcsJ0wnKSwgSVNBUE5QX0RF VklDRSgweDAwRTQpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcp LCBJU0FQTlBfRlVOQ1RJT04oMHgwMDQ1KSwNCisJCTAsMH0sDQorCXsiRVNT IDE4NjgiLA0KKwkJSVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyksIElTQVBO UF9ERVZJQ0UoMHgxODY4KSwgDQorCQlJU0FQTlBfVkVORE9SKCdFJywnUycs J1MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MTg2OCksDQorCQkwLDB9LA0KKwl7 IkVTUyAxODY4IiwNCisJCUlTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJ U0FQTlBfREVWSUNFKDB4MTg2OCksIA0KKwkJSVNBUE5QX1ZFTkRPUignRScs J1MnLCdTJyksIElTQVBOUF9GVU5DVElPTigweDg2MTEpLA0KKwkJMCwwfSwN CisJeyJFU1MgMTg2OSBQblAgQXVkaW9Ecml2ZSIsIA0KKwkJSVNBUE5QX1ZF TkRPUignRScsJ1MnLCdTJyksIElTQVBOUF9ERVZJQ0UoMHgwMDAzKSwgDQor CQlJU0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0ZVTkNUSU9O KDB4MTg2OSksDQorCQkwLDB9LA0KKwl7IkVTUyAxODY5IiwNCisJCUlTQVBO UF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJU0FQTlBfREVWSUNFKDB4MTg2OSks IA0KKwkJSVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyksIElTQVBOUF9GVU5D VElPTigweDE4NjkpLA0KKwkJMCwwfSwNCisJeyJFU1MgMTg3OCIsDQorCQlJ U0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0RFVklDRSgweDE4 NzgpLCANCisJCUlTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJU0FQTlBf RlVOQ1RJT04oMHgxODc4KSwNCisJCTAsMH0sDQorCXsiRVNTIDE4NzkiLA0K KwkJSVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyksIElTQVBOUF9ERVZJQ0Uo MHgxODc5KSwgDQorCQlJU0FQTlBfVkVORE9SKCdFJywnUycsJ1MnKSwgSVNB UE5QX0ZVTkNUSU9OKDB4MTg3OSksDQorCQkwLDB9LA0KKwl7IkNNSSA4MzMw IFNvdW5kUFJPIiwNCisJCUlTQVBOUF9WRU5ET1IoJ0MnLCdNJywnSScpLCBJ U0FQTlBfREVWSUNFKDB4MDAwMSksIA0KKwkJSVNBUE5QX1ZFTkRPUignQCcs J1gnLCdAJyksIElTQVBOUF9GVU5DVElPTigweDAwMDEpLA0KKwkJSVNBUE5Q X1ZFTkRPUignQCcsJ0gnLCdAJyksIElTQVBOUF9GVU5DVElPTigweDAwMDEp fSwNCisJeyJEaWFtb25kIERUMDE5N0giLA0KKwkJSVNBUE5QX1ZFTkRPUign UicsJ1cnLCdCJyksIElTQVBOUF9ERVZJQ0UoMHgxNjg4KSwgDQorCQlJU0FQ TlBfVkVORE9SKCdAJywnQCcsJ0AnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAw MSksDQorCQlJU0FQTlBfVkVORE9SKCdAJywnWCcsJ0AnKSwgSVNBUE5QX0ZV TkNUSU9OKDB4MDAwMSl9LA0KKwl7IkFMUyAxMDAiLA0KKwkgICAgICAgCUlT QVBOUF9WRU5ET1IoJ0EnLCdMJywnUycpLCBJU0FQTlBfREVWSUNFKDB4MDAw MSksIA0KKwkJSVNBUE5QX1ZFTkRPUignQCcsJ0AnLCdAJyksIElTQVBOUF9G VU5DVElPTigweDAwMDEpLA0KKwkJSVNBUE5QX1ZFTkRPUignQCcsJ1gnLCdA JyksIElTQVBOUF9GVU5DVElPTigweDAwMDEpfSwNCisJezB9DQorfTsNCisN CiAvKiBUaGF0J3MgdXNlZnVsLiAqLw0KIA0KICNkZWZpbmUgc2hvd19iYXNl KGRldm5hbWUsIHJlc25hbWUsIHJlc3B0cikgcHJpbnRrKEtFUk5fSU5GTyAi c2I6ICVzICVzIGJhc2UgbG9jYXRlZCBhdCAlI2x4XG4iLCBkZXZuYW1lLCBy ZXNuYW1lLCAocmVzcHRyKS0+c3RhcnQpDQogDQotc3RhdGljIHN0cnVjdCBw Y2lfZGV2ICphY3RpdmF0ZV9kZXYoY2hhciAqZGV2bmFtZSwgY2hhciAqcmVz bmFtZSwgc3RydWN0IHBjaV9kZXYgKmRldikNCitzdGF0aWMgc3RydWN0IHBj aV9kZXYgKmFjdGl2YXRlX2RldihjaGFyICpkZXZuYW1lLCBjaGFyICpyZXNu YW1lLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FyZCkNCiB7DQogCWlu dCBlcnI7DQogDQogCS8qIERldmljZSBhbHJlYWR5IGFjdGl2ZT8gTGV0J3Mg dXNlIGl0ICovDQotDQotCWlmKGRldi0+YWN0aXZlKQ0KLQl7DQotCQlhY3Rp dmF0ZWQgPSAwOw0KKwlpZihkZXYtPmFjdGl2ZSkgew0KKwkJYWN0aXZhdGVk W2NhcmRdID0gMTsNCiAJCXJldHVybihkZXYpOw0KIAl9DQotCWlmKChlcnIg PSBkZXYtPmFjdGl2YXRlKGRldikpIDwgMCkNCi0Jew0KKwkNCisJaWYoKGVy ciA9IGRldi0+YWN0aXZhdGUoZGV2KSkgPCAwKSB7DQogCQlwcmludGsoS0VS Tl9FUlIgInNiOiAlcyAlcyBjb25maWcgZmFpbGVkIChvdXQgb2YgcmVzb3Vy Y2VzPylbJWRdXG4iLCBkZXZuYW1lLCByZXNuYW1lLCBlcnIpOw0KIA0KIAkJ ZGV2LT5kZWFjdGl2YXRlKGRldik7DQpAQCAtMjI5LDMyMCArMzY5LDEwMiBA QA0KIAlyZXR1cm4oZGV2KTsNCiB9DQogDQotLyogQ2FyZCdzIHNwZWNpZmlj IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucw0KLSAqLw0KLQ0KLXN0YXRpYyBz dHJ1Y3QgcGNpX2RldiAqc2JfaW5pdF9nZW5lcmljKHN0cnVjdCBwY2lfYnVz ICpidXMsIHN0cnVjdCBwY2lfZGV2ICpjYXJkLCBzdHJ1Y3QgYWRkcmVzc19p bmZvICpod19jb25maWcsIHN0cnVjdCBhZGRyZXNzX2luZm8gKm1wdV9jb25m aWcpDQorc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpzYl9pbml0KHN0cnVjdCBw Y2lfYnVzICpidXMsIHN0cnVjdCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywg c3RydWN0IGFkZHJlc3NfaW5mbyAqbXB1X2NvbmZpZywgaW50IHNsb3QsIGlu dCBjYXJkKQ0KIHsNCi0JaWYoKHNiX2RldiA9IGlzYXBucF9maW5kX2Rldihi dXMsIGNhcmQtPnZlbmRvciwgY2FyZC0+ZGV2aWNlLCBOVUxMKSkpDQotCXsN Ci0JCXNiX2Rldi0+cHJlcGFyZShzYl9kZXYpOw0KKwkvKiBDb25maWd1cmUg QXVkaW8gZGV2aWNlICovDQogDQotCQlpZigoc2JfZGV2ID0gYWN0aXZhdGVf ZGV2KCJTb3VuZGJsYXN0ZXIiLCAic2IiLCBzYl9kZXYpKSkNCi0JCXsNCi0J CQlod19jb25maWctPmlvX2Jhc2UgCT0gc2JfZGV2LT5yZXNvdXJjZVswXS5z dGFydDsNCi0JCQlod19jb25maWctPmlycSAJCT0gc2JfZGV2LT5pcnFfcmVz b3VyY2VbMF0uc3RhcnQ7DQotCQkJaHdfY29uZmlnLT5kbWEgCQk9IHNiX2Rl di0+ZG1hX3Jlc291cmNlWzBdLnN0YXJ0Ow0KLQkJCWh3X2NvbmZpZy0+ZG1h MiAJPSBzYl9kZXYtPmRtYV9yZXNvdXJjZVsxXS5zdGFydDsNCi0JCQltcHVf Y29uZmlnLT5pb19iYXNlCT0gc2JfZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsN Ci0JCX0NCi0JfQ0KLQlyZXR1cm4oc2JfZGV2KTsNCi19DQotDQotc3RhdGlj IHN0cnVjdCBwY2lfZGV2ICpzYl9pbml0X2VzcyhzdHJ1Y3QgcGNpX2J1cyAq YnVzLCBzdHJ1Y3QgcGNpX2RldiAqY2FyZCwgc3RydWN0IGFkZHJlc3NfaW5m byAqaHdfY29uZmlnLCBzdHJ1Y3QgYWRkcmVzc19pbmZvICptcHVfY29uZmln KQ0KLXsNCi0JaWYoKHNiX2RldiA9IGlzYXBucF9maW5kX2RldihidXMsIGNh cmQtPnZlbmRvciwgY2FyZC0+ZGV2aWNlLCBOVUxMKSkpDQorCWlmKChzYl9k ZXZbY2FyZF0gPSBpc2FwbnBfZmluZF9kZXYoYnVzLCBzYl9pc2FwbnBfbGlz dFtzbG90XS5hdWRpb192ZW5kb3IsIHNiX2lzYXBucF9saXN0W3Nsb3RdLmF1 ZGlvX2Z1bmN0aW9uLCBOVUxMKSkpDQogCXsNCi0JCXNiX2Rldi0+cHJlcGFy ZShzYl9kZXYpOw0KLQ0KLQkJaWYoKHNiX2RldiA9IGFjdGl2YXRlX2Rldigi RVNTIiwgInNiIiwgc2JfZGV2KSkpDQotCQl7DQotCQkJaHdfY29uZmlnLT5p b19iYXNlIAk9IHNiX2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQ7DQotCQkJaHdf Y29uZmlnLT5pcnEgCQk9IHNiX2Rldi0+aXJxX3Jlc291cmNlWzBdLnN0YXJ0 Ow0KLQkJCWh3X2NvbmZpZy0+ZG1hIAkJPSBzYl9kZXYtPmRtYV9yZXNvdXJj ZVswXS5zdGFydDsNCi0JCQlod19jb25maWctPmRtYTIJCT0gc2JfZGV2LT5k bWFfcmVzb3VyY2VbMV0uc3RhcnQ7DQotCQkJbXB1X2NvbmZpZy0+aW9fYmFz ZQk9IHNiX2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQ7DQotCQl9DQotCX0NCi0J cmV0dXJuKHNiX2Rldik7DQotfQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2Rl diAqc2JfaW5pdF9jbWkoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IHBj aV9kZXYgKmNhcmQsIHN0cnVjdCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywg c3RydWN0IGFkZHJlc3NfaW5mbyAqbXB1X2NvbmZpZykNCi17DQotCS8qIA0K LQkgKiAgVGhlIENNSTgzMzAvQzNEIGlzIGEgdmVyeSAnc3R1cGlkJyBjaGlw Li4uIHdoZXJlIGRpZCB0aGV5IGdldCBhbCB0aG9zZSBAQEAgPw0KLQkgKiAg SXQncyBJU0FQblAgc2VjdGlvbiBpcyBiYWRseSBkZXNpZ25lZCBhbmQgaGFz IG1hbnkgZmxhd3MsIGknbGwgZG8gbXkgYmVzdA0KLQkgKiAgdG8gd29ya2Fy b3VuZCB0aGVtLiBJIHN0cm9uZ2x5IHN1Z2dlc3QgeW91IHRvIGJ1eSBhIHJl YWwgc291bmRjYXJkLg0KLQkgKiAgVGhlIENNSTgzMzAgb24gbXkgbW90aGVy Ym9hcmQgaGFzIGFsc28gdGhlIGJhZCBoYWJpdCB0byBhY3RpdmF0ZSANCi0J ICogIHRoZSByZWFyIGNoYW5uZWwgb2YgbXkgYW1wbGlmaWVyIGluc3RlYWQg b2YgdGhlIGZyb250IG9uZS4NCi0JICovDQotDQotCS8qICBAWEAwMDAxOlNv dW5kYmxhc3Rlci4NCi0JICovDQorCQlzYl9kZXZbY2FyZF0tPnByZXBhcmUo c2JfZGV2W2NhcmRdKTsNCiANCi0JaWYoKHNiX2RldiA9IGlzYXBucF9maW5k X2RldihidXMsDQotCQlJU0FQTlBfVkVORE9SKCdAJywnWCcsJ0AnKSwgSVNB UE5QX0ZVTkNUSU9OKDB4MDAwMSksIE5VTEwpKSkNCi0Jew0KLQkJc2JfZGV2 LT5wcmVwYXJlKHNiX2Rldik7DQotCQkNCi0JCWlmKChzYl9kZXYgPSBhY3Rp dmF0ZV9kZXYoIkNNSTgzMzAiLCAic2IiLCBzYl9kZXYpKSkNCisJCWlmKChz Yl9kZXZbY2FyZF0gPSBhY3RpdmF0ZV9kZXYoc2JfaXNhcG5wX2xpc3Rbc2xv dF0ubmFtZSwgInNiIiwgc2JfZGV2W2NhcmRdLCBjYXJkKSkpDQogCQl7DQot CQkJaHdfY29uZmlnLT5pb19iYXNlIAk9IHNiX2Rldi0+cmVzb3VyY2VbMF0u c3RhcnQ7DQotCQkJaHdfY29uZmlnLT5pcnEgCQk9IHNiX2Rldi0+aXJxX3Jl c291cmNlWzBdLnN0YXJ0Ow0KLQkJCWh3X2NvbmZpZy0+ZG1hIAkJPSBzYl9k ZXYtPmRtYV9yZXNvdXJjZVswXS5zdGFydDsNCi0JCQlod19jb25maWctPmRt YTIgCT0gc2JfZGV2LT5kbWFfcmVzb3VyY2VbMV0uc3RhcnQ7DQotDQotCQkJ c2hvd19iYXNlKCJDTUk4MzMwIiwgInNiIiwgJnNiX2Rldi0+cmVzb3VyY2Vb MF0pOw0KLQkJfQ0KKwkJCWh3X2NvbmZpZy0+aW9fYmFzZSAJPSBzYl9kZXZb Y2FyZF0tPnJlc291cmNlWzBdLnN0YXJ0Ow0KKwkJCWh3X2NvbmZpZy0+aXJx IAkJPSBzYl9kZXZbY2FyZF0tPmlycV9yZXNvdXJjZVswXS5zdGFydDsNCisJ CQlod19jb25maWctPmRtYSAJCT0gc2JfZGV2W2NhcmRdLT5kbWFfcmVzb3Vy Y2VbMF0uc3RhcnQ7DQorCQkJaHdfY29uZmlnLT5kbWEyIAk9IHNiX2Rldltj YXJkXS0+ZG1hX3Jlc291cmNlWzFdLnN0YXJ0Ow0KKwkJfSBlbHNlDQorCQkJ cmV0dXJuKE5VTEwpOw0KKwl9IGVsc2UNCisJCXJldHVybihOVUxMKTsNCiAN Ci0JCWlmKCFzYl9kZXYpIHJldHVybihOVUxMKTsNCisJLyogQ2FyZHMgd2l0 aCBNUFUgcGFydCBvZiBBdWRpbyBkZXZpY2UgKi8NCisJDQorCWlmKCFzYl9p c2FwbnBfbGlzdFtzbG90XS5tcHVfdmVuZG9yKSB7DQorCQltcHVfY29uZmln LT5pb19iYXNlCT0gc2JfZGV2W2NhcmRdLT5yZXNvdXJjZVsxXS5zdGFydDsN CisJCXJldHVybihzYl9kZXZbY2FyZF0pOw0KIAl9DQotCWVsc2UNCi0JCXBy aW50ayhLRVJOX0VSUiAic2I6IENNSTgzMzAgcGFuaWM6IHNiIGJhc2Ugbm90 IGZvdW5kXG4iKTsNCiANCi0JLyogIEBIQDAwMDE6bXB1DQotCSAqLw0KKwkv KiBDYXJkcyB3aXRoIHNlcGFyYXRlIE1QVSBkZXZpY2UgKi8NCiANCi0JaWYo KG1wdV9kZXYgPSBpc2FwbnBfZmluZF9kZXYoYnVzLA0KLQkJSVNBUE5QX1ZF TkRPUignQCcsJ0gnLCdAJyksIElTQVBOUF9GVU5DVElPTigweDAwMDEpLCBO VUxMKSkpDQorCWlmKChtcHVfZGV2W2NhcmRdID0gaXNhcG5wX2ZpbmRfZGV2 KGJ1cywgc2JfaXNhcG5wX2xpc3Rbc2xvdF0ubXB1X3ZlbmRvciwgc2JfaXNh cG5wX2xpc3Rbc2xvdF0ubXB1X2Z1bmN0aW9uLCBOVUxMKSkpDQogCXsNCi0J CW1wdV9kZXYtPnByZXBhcmUobXB1X2Rldik7DQotDQotCQkvKiAgVGhpcyBk aXNhYmxlcyB0aGUgaW50ZXJydXB0IG9uIHRoaXMgcmVzb3VyY2UuIERvIHdl IG5lZWQgaXQgPw0KLQkJICovDQotDQotCQltcHVfZGV2LT5pcnFfcmVzb3Vy Y2VbMF0uZmxhZ3MgPSAwOw0KKwkJbXB1X2RldltjYXJkXS0+cHJlcGFyZSht cHVfZGV2W2NhcmRdKTsNCiANCi0JCWlmKChtcHVfZGV2ID0gYWN0aXZhdGVf ZGV2KCJDTUk4MzMwIiwgIm1wdSIsIG1wdV9kZXYpKSkNCi0JCXsNCi0JCQlz aG93X2Jhc2UoIkNNSTgzMzAiLCAibXB1IiwgJm1wdV9kZXYtPnJlc291cmNl WzBdKTsNCi0JCQltcHVfY29uZmlnLT5pb19iYXNlID0gbXB1X2Rldi0+cmVz b3VyY2VbMF0uc3RhcnQ7DQotCQl9DQorCQlpZigobXB1X2RldltjYXJkXSA9 IGFjdGl2YXRlX2RldihzYl9pc2FwbnBfbGlzdFtzbG90XS5uYW1lLCAibXB1 IiwgbXB1X2RldltjYXJkXSwgY2FyZCkpKQ0KKwkJCW1wdV9jb25maWctPmlv X2Jhc2UgPSBtcHVfZGV2W2NhcmRdLT5yZXNvdXJjZVswXS5zdGFydDsNCiAJ fQ0KIAllbHNlDQotCQlwcmludGsoS0VSTl9FUlIgInNiOiBDTUk4MzMwIHBh bmljOiBtcHUgbm90IGZvdW5kXG4iKTsNCi0NCi0JcHJpbnRrKEtFUk5fSU5G TyAic2I6IENNSTgzMzAgbWFpbCByZXBvcnRzIHRvIEFsZXNzYW5kcm8gWnVt bW8gPGF6dW1tb0BpdGEuZmxhc2huZXQuaXQ+XG4iKTsNCi0NCi0JcmV0dXJu KHNiX2Rldik7DQorCQlwcmludGsoS0VSTl9FUlIgInNiOiAlcyBwYW5pYzog bXB1IG5vdCBmb3VuZFxuIiwgc2JfaXNhcG5wX2xpc3Rbc2xvdF0ubmFtZSk7 DQorCQ0KKwlyZXR1cm4oc2JfZGV2W2NhcmRdKTsNCiB9DQogDQotc3RhdGlj IHN0cnVjdCBwY2lfZGV2ICpzYl9pbml0X2RpYW1vbmQoc3RydWN0IHBjaV9i dXMgKmJ1cywgc3RydWN0IHBjaV9kZXYgKmNhcmQsIHN0cnVjdCBhZGRyZXNz X2luZm8gKmh3X2NvbmZpZywgc3RydWN0IGFkZHJlc3NfaW5mbyAqbXB1X2Nv bmZpZykNCitzdGF0aWMgaW50IF9faW5pdCBzYl9pc2FwbnBfaW5pdChzdHJ1 Y3QgYWRkcmVzc19pbmZvICpod19jb25maWcsIHN0cnVjdCBhZGRyZXNzX2lu Zm8gKm1wdV9jb25maWcsIHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBzbG90 LCBpbnQgY2FyZCkNCiB7DQotCS8qIA0KLQkgKiBEaWFtb25kcyBEVDAxOTdI DQotCSAqIHZlcnkgc2ltaWxhciB0byB0aGUgQ01JODMzMCBhYm92ZQ0KLQkg Ki8NCi0NCi0JLyogIEBAQDAwMDE6U291bmRibGFzdGVyLg0KLQkgKi8NCi0N Ci0JaWYoKHNiX2RldiA9IGlzYXBucF9maW5kX2RldihidXMsDQotCQkJCUlT QVBOUF9WRU5ET1IoJ0AnLCdAJywnQCcpLCBJU0FQTlBfRlVOQ1RJT04oMHgw MDAxKSwgTlVMTCkpKQ0KLQl7DQotCQlzYl9kZXYtPnByZXBhcmUoc2JfZGV2 KTsNCi0JCQ0KLQkJaWYoKHNiX2RldiA9IGFjdGl2YXRlX2RldigiRFQwMTk3 SCIsICJzYiIsIHNiX2RldikpKQ0KLQkJew0KLQkJCWh3X2NvbmZpZy0+aW9f YmFzZSAJPSBzYl9kZXYtPnJlc291cmNlWzBdLnN0YXJ0Ow0KLQkJCWh3X2Nv bmZpZy0+aXJxIAkJPSBzYl9kZXYtPmlycV9yZXNvdXJjZVswXS5zdGFydDsN Ci0JCQlod19jb25maWctPmRtYSAJCT0gc2JfZGV2LT5kbWFfcmVzb3VyY2Vb MF0uc3RhcnQ7DQotCQkJaHdfY29uZmlnLT5kbWEyIAk9IC0xOw0KLQ0KLQkJ CXNob3dfYmFzZSgiRFQwMTk3SCIsICJzYiIsICZzYl9kZXYtPnJlc291cmNl WzBdKTsNCi0JCX0NCi0NCi0JCWlmKCFzYl9kZXYpIHJldHVybihOVUxMKTsN Ci0JfQ0KLQllbHNlDQotCQlwcmludGsoS0VSTl9FUlIgInNiOiBEVDAxOTdI IHBhbmljOiBzYiBiYXNlIG5vdCBmb3VuZFxuIik7DQotDQotCS8qICBAWEAw MDAxOm1wdQ0KLQkgKi8NCi0NCi0JaWYoKG1wdV9kZXYgPSBpc2FwbnBfZmlu ZF9kZXYoYnVzLA0KLQkJCQlJU0FQTlBfVkVORE9SKCdAJywnWCcsJ0AnKSwg SVNBUE5QX0ZVTkNUSU9OKDB4MDAwMSksIE5VTEwpKSkNCi0Jew0KLQkJbXB1 X2Rldi0+cHJlcGFyZShtcHVfZGV2KTsNCi0NCi0JCWlmKChtcHVfZGV2ID0g YWN0aXZhdGVfZGV2KCJEVDAxOTdIIiwgIm1wdSIsIG1wdV9kZXYpKSkNCi0J CXsNCi0JCQlzaG93X2Jhc2UoIkRUMDE5N0giLCAibXB1IiwgJm1wdV9kZXYt PnJlc291cmNlWzBdKTsNCi0JCQltcHVfY29uZmlnLT5pb19iYXNlID0gbXB1 X2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQ7DQotCQl9DQotCX0NCi0JZWxzZQ0K LQkJcHJpbnRrKEtFUk5fRVJSICJzYjogRFQwMTk3SCBwYW5pYzogbXB1IG5v dCBmb3VuZFxuIik7DQotDQotCXByaW50ayhLRVJOX0lORk8gInNiOiBEVDAx OTdIIG1haWwgcmVwb3J0cyB0byBUb3JzdGVuIFdlcm5lciA8dHdlcm5lckBp bnRlcmNvbW0uZGU+XG4iKTsNCi0NCi0JcmV0dXJuKHNiX2Rldik7DQotfQ0K KwljaGFyICpidXNuYW1lID0gYnVzLT5uYW1lWzBdID8gYnVzLT5uYW1lIDog c2JfaXNhcG5wX2xpc3Rbc2xvdF0ubmFtZTsNCiANCi1zdGF0aWMgc3RydWN0 IHBjaV9kZXYgKnNiX2luaXRfYWxzKHN0cnVjdCBwY2lfYnVzICpidXMsIHN0 cnVjdCBwY2lfZGV2ICpjYXJkLCBzdHJ1Y3QgYWRkcmVzc19pbmZvICpod19j b25maWcsIHN0cnVjdCBhZGRyZXNzX2luZm8gKm1wdV9jb25maWcpDQotew0K LQkvKiANCi0JICogQUxTMTAwDQotCSAqIHZlcnkgc2ltaWxhciB0byBib3Ro IG9uZXMgYWJvdmUgYWJvdmUNCi0JICovDQorCXByaW50ayhLRVJOX0lORk8g InNiOiAlcyBkZXRlY3RlZFxuIiwgYnVzbmFtZSk7IA0KIA0KLQkvKiAgQEBA MDAwMTpTb3VuZGJsYXN0ZXIuDQotCSAqLw0KKwkvKiBJbml0aWFsaXplIHRo aXMgYmFieS4gKi8NCiANCi0JaWYoKHNiX2RldiA9IGlzYXBucF9maW5kX2Rl dihidXMsDQotCQkJCUlTQVBOUF9WRU5ET1IoJ0AnLCdAJywnQCcpLCBJU0FQ TlBfRlVOQ1RJT04oMHgwMDAxKSwgTlVMTCkpKQ0KLQl7DQotCQlzYl9kZXYt PnByZXBhcmUoc2JfZGV2KTsNCisJaWYoc2JfaW5pdChidXMsIGh3X2NvbmZp ZywgbXB1X2NvbmZpZywgc2xvdCwgY2FyZCkpIHsNCisJCS8qIFdlIGdvdCBp dC4gKi8NCiAJCQ0KLQkJaWYoKHNiX2RldiA9IGFjdGl2YXRlX2RldigiQUxT MTAwIiwgInNiIiwgc2JfZGV2KSkpDQotCQl7DQotCQkJaHdfY29uZmlnLT5p b19iYXNlIAk9IHNiX2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQ7DQotCQkJaHdf Y29uZmlnLT5pcnEgCQk9IHNiX2Rldi0+aXJxX3Jlc291cmNlWzBdLnN0YXJ0 Ow0KLQkJCWh3X2NvbmZpZy0+ZG1hIAkJPSBzYl9kZXYtPmRtYV9yZXNvdXJj ZVsxXS5zdGFydDsNCi0JCQlod19jb25maWctPmRtYTIgCT0gc2JfZGV2LT5k bWFfcmVzb3VyY2VbMF0uc3RhcnQ7DQotDQotCQkJc2hvd19iYXNlKCJBTFMx MDAiLCAic2IiLCAmc2JfZGV2LT5yZXNvdXJjZVswXSk7DQotCQl9DQotDQot CQlpZighc2JfZGV2KSByZXR1cm4oTlVMTCk7DQotCX0NCi0JZWxzZQ0KLQkJ cHJpbnRrKEtFUk5fRVJSICJzYjogQUxTMTAwIHBhbmljOiBzYiBiYXNlIG5v dCBmb3VuZFxuIik7DQotDQotCS8qICBAWEAwMDAxOm1wdQ0KLQkgKi8NCi0N Ci0JaWYoKG1wdV9kZXYgPSBpc2FwbnBfZmluZF9kZXYoYnVzLA0KLQkJCQlJ U0FQTlBfVkVORE9SKCdAJywnWCcsJ0AnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4 MDAwMSksIE5VTEwpKSkNCi0Jew0KLQkJbXB1X2Rldi0+cHJlcGFyZShtcHVf ZGV2KTsNCi0NCi0JCWlmKChtcHVfZGV2ID0gYWN0aXZhdGVfZGV2KCJBTFMx MDAiLCAibXB1IiwgbXB1X2RldikpKQ0KLQkJew0KLQkJCXNob3dfYmFzZSgi QUxTMTAwIiwgIm1wdSIsICZtcHVfZGV2LT5yZXNvdXJjZVswXSk7DQotCQkJ bXB1X2NvbmZpZy0+aW9fYmFzZSA9IG1wdV9kZXYtPnJlc291cmNlWzBdLnN0 YXJ0Ow0KLQkJfQ0KLQl9DQotCWVsc2UNCi0JCXByaW50ayhLRVJOX0VSUiAi c2I6IEFMUzEwMCBwYW5pYzogbXB1IG5vdCBmb3VuZFxuIik7DQotDQotCXBy aW50ayhLRVJOX0lORk8gInNiOiBBTFMxMDAgbWFpbCByZXBvcnRzIHRvIFRv cnN0ZW4gV2VybmVyIDx0d2VybmVyQGludGVyY29tbS5kZT5cbiIpOw0KLQ0K LQlyZXR1cm4oc2JfZGV2KTsNCi19DQotDQotI2RlZmluZSBTQkZfREVWCTB4 MDEgLyogUGxlYXNlIG5vdGljZSB0aGF0IGNhcmRzIHdpdGhvdXQgdGhpcyBm bGFnIGFyZSBvbiB0aGUgdG9wIGluIHRoZSBsaXN0ICovDQotDQotDQotc3Rh dGljIHN0cnVjdCB7IHVuc2lnbmVkIHNob3J0IHZlbmRvciwgZnVuY3Rpb24s IGZsYWdzOyBzdHJ1Y3QgcGNpX2RldiAqICgqaW5pdGZ1bmMpKHN0cnVjdCBw Y2lfYnVzICosIHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBhZGRyZXNzX2lu Zm8gKiwgc3RydWN0IGFkZHJlc3NfaW5mbyAqKTsgY2hhciAqbmFtZTsgfQ0K LXNiX2lzYXBucF9saXN0W10gX19pbml0ZGF0YSA9IHsNCi0Je0lTQVBOUF9W RU5ET1IoJ0MnLCdNJywnSScpLCBJU0FQTlBfRlVOQ1RJT04oMHgwMDAxKSwg MCwJJnNiX2luaXRfY21pLAkJIkNNSSA4MzMwIFNvdW5kUFJPIiB9LA0KLQl7 SVNBUE5QX1ZFTkRPUignUicsJ1cnLCdCJyksIElTQVBOUF9GVU5DVElPTigw eDE2ODgpLCAwLAkmc2JfaW5pdF9kaWFtb25kLAkiRGlhbW9uZCBEVDAxOTdI IiB9LA0KLQl7SVNBUE5QX1ZFTkRPUignQScsJ0wnLCdTJyksIElTQVBOUF9G VU5DVElPTigweDAwMDEpLCAwLAkmc2JfaW5pdF9hbHMsCQkiQUxTIDEwMCIg fSwNCi0Je0lTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBfRlVO Q1RJT04oMHgwMDAxKSwgU0JGX0RFViwJJnNiX2luaXRfZ2VuZXJpYywJIlNv dW5kIEJsYXN0ZXIgMTYiIH0sDQotCXtJU0FQTlBfVkVORE9SKCdDJywnVCcs J0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDAzMSksIFNCRl9ERVYsCSZzYl9p bml0X2dlbmVyaWMsCSJTb3VuZCBCbGFzdGVyIDE2IiB9LA0KLQl7SVNBUE5Q X1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAwNDEp LCBTQkZfREVWLAkmc2JfaW5pdF9nZW5lcmljLAkiU291bmQgQmxhc3RlciAx NiIgfSwNCi0Je0lTQVBOUF9WRU5ET1IoJ0MnLCdUJywnTCcpLCBJU0FQTlBf RlVOQ1RJT04oMHgwMDQyKSwgU0JGX0RFViwJJnNiX2luaXRfZ2VuZXJpYywJ IlNvdW5kIEJsYXN0ZXIgMTYiIH0sDQotCXtJU0FQTlBfVkVORE9SKCdDJywn VCcsJ0wnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MDA0MyksIFNCRl9ERVYsCSZz Yl9pbml0X2dlbmVyaWMsCSJTb3VuZCBCbGFzdGVyIDE2IiB9LA0KLQl7SVNB UE5QX1ZFTkRPUignQycsJ1QnLCdMJyksIElTQVBOUF9GVU5DVElPTigweDAw NDUpLCBTQkZfREVWLAkmc2JfaW5pdF9nZW5lcmljLAkiU291bmQgQmxhc3Rl ciAxNiIgfSwNCi0Je0lTQVBOUF9WRU5ET1IoJ0UnLCdTJywnUycpLCBJU0FQ TlBfRlVOQ1RJT04oMHgwOTY4KSwgU0JGX0RFViwJJnNiX2luaXRfZXNzLAkJ IkVTUyAxNjg4IiB9LA0KLQl7SVNBUE5QX1ZFTkRPUignRScsJ1MnLCdTJyks IElTQVBOUF9GVU5DVElPTigweDE4NjgpLCBTQkZfREVWLAkmc2JfaW5pdF9l c3MsCQkiRVNTIDE4NjgiIH0sDQotCXtJU0FQTlBfVkVORE9SKCdFJywnUycs J1MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4ODYxMSksIFNCRl9ERVYsCSZzYl9p bml0X2VzcywJCSJFU1MgMTg2OCIgfSwNCi0Je0lTQVBOUF9WRU5ET1IoJ0Un LCdTJywnUycpLCBJU0FQTlBfRlVOQ1RJT04oMHgxODY5KSwgU0JGX0RFViwJ JnNiX2luaXRfZXNzLAkJIkVTUyAxODY5IiB9LA0KLQl7SVNBUE5QX1ZFTkRP UignRScsJ1MnLCdTJyksIElTQVBOUF9GVU5DVElPTigweDE4NzgpLCBTQkZf REVWLAkmc2JfaW5pdF9lc3MsCQkiRVNTIDE4NzgiIH0sDQotCXtJU0FQTlBf VkVORE9SKCdFJywnUycsJ1MnKSwgSVNBUE5QX0ZVTkNUSU9OKDB4MTg3OSks IFNCRl9ERVYsCSZzYl9pbml0X2VzcywJCSJFU1MgMTg3OSIgfSwNCi0JezB9 DQotfTsNCi0NCi1zdGF0aWMgaW50IF9faW5pdCBzYl9pc2FwbnBfaW5pdChz dHJ1Y3QgYWRkcmVzc19pbmZvICpod19jb25maWcsIHN0cnVjdCBhZGRyZXNz X2luZm8gKm1wdV9jb25maWcsIHN0cnVjdCBwY2lfYnVzICpidXMsIHN0cnVj dCBwY2lfZGV2ICpjYXJkLCBpbnQgc2xvdCkNCi17DQotCXN0cnVjdCBwY2lf ZGV2ICppZGV2ID0gTlVMTDsNCi0NCi0JLyogWW91IG1pc3NlZCB0aGUgaW5p dCBmdW5jPyBUaGF0J3MgYmFkLiAqLw0KLQlpZihzYl9pc2FwbnBfbGlzdFtz bG90XS5pbml0ZnVuYykNCi0Jew0KLQkJY2hhciAqYnVzbmFtZSA9IGJ1cy0+ bmFtZVswXSA/IGJ1cy0+bmFtZSA6IHNiX2lzYXBucF9saXN0W3Nsb3RdLm5h bWU7DQotDQotCQlwcmludGsoS0VSTl9JTkZPICJzYjogJXMgZGV0ZWN0ZWRc biIsIGJ1c25hbWUpOyANCi0NCi0JCS8qIEluaXRpYWxpemUgdGhpcyBiYWJ5 LiAqLw0KLQ0KLQkJaWYoKGlkZXYgPSBzYl9pc2FwbnBfbGlzdFtzbG90XS5p bml0ZnVuYyhidXMsIGNhcmQsIGh3X2NvbmZpZywgbXB1X2NvbmZpZykpKQ0K LQkJew0KLQkJCS8qIFdlIGdvdCBpdC4gKi8NCi0NCi0JCQlwcmludGsoS0VS Tl9OT1RJQ0UgInNiOiBJU0FQblAgcmVwb3J0cyAnJXMnIGF0IGkvbyAlI3gs IGlycSAlZCwgZG1hICVkLCAlZFxuIiwNCi0JCQkgICAgICAgYnVzbmFtZSwN Ci0JCQkgICAgICAgaHdfY29uZmlnLT5pb19iYXNlLCBod19jb25maWctPmly cSwgaHdfY29uZmlnLT5kbWEsDQotCQkJICAgICAgIGh3X2NvbmZpZy0+ZG1h Mik7DQotCQkJcmV0dXJuIDE7DQotCQl9DQotCQllbHNlDQotCQkJcHJpbnRr KEtFUk5fSU5GTyAic2I6IEZhaWxlZCB0byBpbml0aWFsaXplICVzXG4iLCBi dXNuYW1lKTsNCisJCXByaW50ayhLRVJOX05PVElDRSAic2I6IElTQVBuUCBy ZXBvcnRzICclcycgYXQgaS9vICUjeCwgaXJxICVkLCBkbWEgJWQsICVkXG4i LA0KKwkJICAgICAgIGJ1c25hbWUsDQorCQkgICAgICAgaHdfY29uZmlnLT5p b19iYXNlLCBod19jb25maWctPmlycSwgaHdfY29uZmlnLT5kbWEsDQorCQkg ICAgICAgaHdfY29uZmlnLT5kbWEyKTsNCisJCXJldHVybiAxOw0KIAl9DQog CWVsc2UNCi0JCXByaW50ayhLRVJOX0VSUiAic2I6IEJhZCBlbnRyeSBpbiBz Yl9jYXJkLmMgUG5QIHRhYmxlXG4iKTsNCisJCXByaW50ayhLRVJOX0lORk8g InNiOiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSAlc1xuIiwgYnVzbmFtZSk7DQog DQogCXJldHVybiAwOw0KIH0NCiANCi0vKiBBY3R1YWxseSB0aGlzIHJvdXRp bmUgd2lsbCBkZXRlY3QgYW5kIGNvbmZpZ3VyZSBvbmx5IHRoZSBmaXJzdCBj YXJkIHdpdGggc3VjY2Vzc2Z1bA0KLSAgIGluaXRpYWxpemF0aW9uLiBpc2Fw bnBqdW1wIGNvdWxkIGJlIHVzZWQgdG8ganVtcCB0byBhIHNwZWNpZmljIGVu dHJ5Lg0KLSAgIFBsZWFzZSBhbHdheXMgYWRkIGVudHJpZXMgYXQgdGhlIGVu ZCBvZiB0aGUgYXJyYXkuDQotICAgU2hvdWxkIHRoaXMgYmUgZml4ZWQ/IC0g YXp1bW1vDQotKi8NCi0NCi1pbnQgX19pbml0IHNiX2lzYXBucF9wcm9iZShz dHJ1Y3QgYWRkcmVzc19pbmZvICpod19jb25maWcsIHN0cnVjdCBhZGRyZXNz X2luZm8gKm1wdV9jb25maWcpIA0KK2ludCBfX2luaXQgc2JfaXNhcG5wX3By b2JlKHN0cnVjdCBhZGRyZXNzX2luZm8gKmh3X2NvbmZpZywgc3RydWN0IGFk ZHJlc3NfaW5mbyAqbXB1X2NvbmZpZywgaW50IGNhcmQpIA0KIHsNCisJc3Rh dGljIGludCBmaXJzdCA9IDE7DQogCWludCBpOw0KIA0KIAkvKiBDb3VudCBl bnRyaWVzIGluIHNiX2lzYXBucF9saXN0ICovDQotCWZvciAoaSA9IDA7IHNi X2lzYXBucF9saXN0W2ldLnZlbmRvciAhPSAwOyBpKyspOw0KKwlmb3IgKGkg PSAwOyBzYl9pc2FwbnBfbGlzdFtpXS5jYXJkX3ZlbmRvciAhPSAwOyBpKysp Ow0KKwlpLS07DQogDQogCS8qIENoZWNrIGFuZCBhZGp1c3QgaXNhcG5wanVt cCAqLw0KLQlpZiggaXNhcG5wanVtcCA8IDAgfHwgaXNhcG5wanVtcCA+ICgg aSAtIDEgKSApDQotCXsNCi0JCXByaW50ayhLRVJOX0VSUiAic2I6IFZhbGlk IHJhbmdlIGZvciBpc2FwbnBqdW1wIGlzIDAtJWQuIEFkanVzdGVkIHRvIDAu XG4iLCBpLTEpOw0KLQkJaXNhcG5wanVtcCA9IDA7DQorCWlmKCBpc2FwbnBq dW1wIDwgMCB8fCBpc2FwbnBqdW1wID4gaSkgew0KKwkJaXNhcG5wanVtcCA9 IHJldmVyc2UgPyBpIDogMDsNCisJCXByaW50ayhLRVJOX0VSUiAic2I6IFZh bGlkIHJhbmdlIGZvciBpc2FwbnBqdW1wIGlzIDAtJWQuIEFkanVzdGVkIHRv ICVkLlxuIiwgaSwgaXNhcG5wanVtcCk7DQogCX0NCi0JDQotCWZvciAoaSA9 IGlzYXBucGp1bXA7IHNiX2lzYXBucF9saXN0W2ldLnZlbmRvciAhPSAwOyBp KyspIHsNCiANCi0JCWlmKCEoc2JfaXNhcG5wX2xpc3RbaV0uZmxhZ3MgJiBT QkZfREVWKSkNCi0JCXsNCi0JCQlzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gTlVM TDsNCi0JCQkJDQotCQkJd2hpbGUgKChidXMgPSBpc2FwbnBfZmluZF9jYXJk KA0KLQkJCQkJc2JfaXNhcG5wX2xpc3RbaV0udmVuZG9yLA0KLQkJCQkJc2Jf aXNhcG5wX2xpc3RbaV0uZnVuY3Rpb24sDQotCQkJCQlidXMpKSkgew0KKwlp ZighZmlyc3QgfHwgIXJldmVyc2UpDQorCQlpID0gaXNhcG5wanVtcDsNCisJ Zmlyc3QgPSAwOw0KKwl3aGlsZShzYl9pc2FwbnBfbGlzdFtpXS5jYXJkX3Zl bmRvciAhPSAwKSB7DQorCQlzdGF0aWMgc3RydWN0IHBjaV9idXMgKmJ1cyA9 IE5VTEw7DQorDQorCQl3aGlsZSAoKGJ1cyA9IGlzYXBucF9maW5kX2NhcmQo DQorCQkJCXNiX2lzYXBucF9saXN0W2ldLmNhcmRfdmVuZG9yLA0KKwkJCQlz Yl9pc2FwbnBfbGlzdFtpXS5jYXJkX2RldmljZSwNCisJCQkJYnVzKSkpIHsN CiAJDQotCQkJCWlmKHNiX2lzYXBucF9pbml0KGh3X2NvbmZpZywgbXB1X2Nv bmZpZywgYnVzLCBOVUxMLCBpKSkNCi0JCQkJCXJldHVybiAwOw0KLQkJCX0N Ci0JCX0NCi0JfQ0KLQ0KLQkvKiAgTm8gY2FyZHMgZm91bmQuIEknbGwgdHJ5 IG5vdyB0byBzZWFyY2ggaW5zaWRlIGV2ZXJ5IGNhcmQgZm9yIGEgbG9naWNh bCBkZXZpY2UNCi0JICogIHRoYXQgbWF0Y2hlcyBhbnkgZW50cnkgbWFya2Vk IHdpdGggU0JGX0RFViBpbiB0aGUgdGFibGUuDQotCSAqLw0KLQ0KLQlmb3Ig KGkgPSBpc2FwbnBqdW1wOyBzYl9pc2FwbnBfbGlzdFtpXS52ZW5kb3IgIT0g MDsgaSsrKSB7DQotDQotCQlpZihzYl9pc2FwbnBfbGlzdFtpXS5mbGFncyAm IFNCRl9ERVYpDQotCQl7DQotCQkJc3RydWN0IHBjaV9kZXYgKmNhcmQgPSBO VUxMOw0KLQ0KLQkJCXdoaWxlICgoY2FyZCA9IGlzYXBucF9maW5kX2RldihO VUxMLA0KLQkJCQkJc2JfaXNhcG5wX2xpc3RbaV0udmVuZG9yLA0KLQkJCQkJ c2JfaXNhcG5wX2xpc3RbaV0uZnVuY3Rpb24sDQotCQkJCQljYXJkKSkpIHsN Ci0NCi0JCQkJaWYoc2JfaXNhcG5wX2luaXQoaHdfY29uZmlnLCBtcHVfY29u ZmlnLCBjYXJkLT5idXMsIGNhcmQsIGkpKQ0KLQkJCQkJcmV0dXJuIDA7DQor CQkJaWYoc2JfaXNhcG5wX2luaXQoaHdfY29uZmlnLCBtcHVfY29uZmlnLCBi dXMsIGksIGNhcmQpKSB7DQorCQkJCWlzYXBucGp1bXAgPSBpOyAvKiBzdGFy dCBuZXh0IHNlYXJjaCBmcm9tIGhlcmUgKi8NCisJCQkJcmV0dXJuIDA7DQog CQkJfQ0KIAkJfQ0KKwkJaSArPSByZXZlcnNlID8gLTEgOiAxOwkJDQogCX0N CiANCiAJcmV0dXJuIC1FTk9ERVY7DQpAQCAtNTUxLDYyICs0NzMsNzcgQEAN CiANCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3NiKHZvaWQpDQogew0KLQlw cmludGsoS0VSTl9JTkZPICJTb3VuZGJsYXN0ZXIgYXVkaW8gZHJpdmVyIENv cHlyaWdodCAoQykgYnkgSGFubnUgU2F2b2xhaW5lbiAxOTkzLTE5OTZcbiIp Ow0KKwlpbnQgY2FyZCwgbWF4ID0gbXVsdGlwbGUgPyBTQl9DQVJEU19NQVgg OiAxOw0KIA0KLQkvKiBQbGVhc2UgcmVtZW1iZXIgdGhhdCBldmVuIHdpdGgg Q09ORklHX0lTQVBOUCBkZWZpbmVkIG9uZSBzaG91bGQgc3RpbGwgYmUNCi0J CWFibGUgdG8gZGlzYWJsZSBQTlAgc3VwcG9ydCBmb3IgdGhpcyBzaW5nbGUg ZHJpdmVyIQ0KLQkqLw0KLQ0KLSNpZiBkZWZpbmVkIENPTkZJR19JU0FQTlAg fHwgZGVmaW5lZCBDT05GSUdfSVNBUE5QX01PRFVMRQkJCQ0KLQlpZihpc2Fw bnAgJiYgKHNiX2lzYXBucF9wcm9iZSgmY2ZnLCAmY2ZnX21wdSkgPCAwKSAp IHsNCi0JCXByaW50ayhLRVJOX05PVElDRSAic2JfY2FyZDogTm8gSVNBUG5Q IGNhcmRzIGZvdW5kLCB0cnlpbmcgc3RhbmRhcmQgb25lcy4uLlxuIik7DQot CQlpc2FwbnAgPSAwOw0KLQl9DQorCXByaW50ayhLRVJOX0lORk8gIlNvdW5k Ymxhc3RlciBhdWRpbyBkcml2ZXIgQ29weXJpZ2h0IChDKSBieSBIYW5udSBT YXZvbGFpbmVuIDE5OTMtMTk5NlxuIik7DQorCQ0KKwlmb3IoY2FyZCA9IDA7 IGNhcmQgPCBtYXg7IGNhcmQrKywgc2JfY2FyZHNfbnVtKyspIHsNCisjaWYg ZGVmaW5lZCBDT05GSUdfSVNBUE5QIHx8IGRlZmluZWQgQ09ORklHX0lTQVBO UF9NT0RVTEUNCisJCS8qIFBsZWFzZSByZW1lbWJlciB0aGF0IGV2ZW4gd2l0 aCBDT05GSUdfSVNBUE5QIGRlZmluZWQgb25lIHNob3VsZCBzdGlsbCBiZQ0K KwkJICAgYWJsZSB0byBkaXNhYmxlIFBOUCBzdXBwb3J0IGZvciB0aGlzIHNp bmdsZSBkcml2ZXIhICovDQorCQlpZihpc2FwbnAgJiYgKHNiX2lzYXBucF9w cm9iZSgmY2ZnW2NhcmRdLCAmY2ZnX21wdVtjYXJkXSwgY2FyZCkgPCAwKSAp IHsNCisJCQlpZihzYl9jYXJkc19udW0gPT0gMCkgew0KKwkJCQlwcmludGso S0VSTl9OT1RJQ0UgInNiX2NhcmQ6IE5vIElTQVBuUCBjYXJkcyBmb3VuZCwg dHJ5aW5nIHN0YW5kYXJkIG9uZXMuLi5cbiIpOw0KKwkJCQlpc2FwbnAgPSAw Ow0KKwkJCX0gZWxzZQ0KKwkJCQlicmVhazsNCisJCX0NCiAjZW5kaWYNCiAN Ci0JaWYoIGlzYXBucCA9PSAwICkgew0KLQkJY2ZnLmlvX2Jhc2UJPSBpbzsN Ci0JCWNmZy5pcnEJCT0gaXJxOw0KLQkJY2ZnLmRtYQkJPSBkbWE7DQotCQlj ZmcuZG1hMgk9IGRtYTE2Ow0KLQl9DQorCQlpZiggaXNhcG5wID09IDAgJiYg c2JfY2FyZHNfbnVtID09IDApIHsNCisJCQljZmdbY2FyZF0uaW9fYmFzZQk9 IGlvOw0KKwkJCWNmZ1tjYXJkXS5pcnEJCT0gaXJxOw0KKwkJCWNmZ1tjYXJk XS5kbWEJCT0gZG1hOw0KKwkJCWNmZ1tjYXJkXS5kbWEyCT0gZG1hMTY7DQor CQl9DQogDQotCWNmZy5jYXJkX3N1YnR5cGUgPSB0eXBlOw0KKwkJY2ZnW2Nh cmRdLmNhcmRfc3VidHlwZSA9IHR5cGU7DQogDQotCWlmICghcHJvYmVfc2Io JmNmZykpDQotCQlyZXR1cm4gLUVOT0RFVjsNCi0JYXR0YWNoX3NiX2NhcmQo JmNmZyk7DQorCQlpZiAoIXByb2JlX3NiKCZjZmdbY2FyZF0pKQ0KKwkJCXJl dHVybiAtRU5PREVWOw0KKwkJYXR0YWNoX3NiX2NhcmQoJmNmZ1tjYXJkXSk7 DQogDQotCWlmKGNmZy5zbG90c1swXT09LTEpDQotCQlyZXR1cm4gLUVOT0RF VjsNCisJCWlmKGNmZ1tjYXJkXS5zbG90c1swXT09LTEpDQorCQkJcmV0dXJu IC1FTk9ERVY7DQogCQkNCi0JaWYgKGlzYXBucCA9PSAwKSANCi0JCWNmZ19t cHUuaW9fYmFzZSA9IG1wdV9pbzsNCi0JaWYgKHByb2JlX3NibXB1KCZjZmdf bXB1KSkNCi0JCXNibXB1ID0gMTsNCi0JaWYgKHNibXB1KQ0KLQkJYXR0YWNo X3NibXB1KCZjZmdfbXB1KTsNCisJCWlmIChpc2FwbnAgPT0gMCkgDQorCQkJ Y2ZnX21wdVtjYXJkXS5pb19iYXNlID0gbXB1X2lvOw0KKwkJaWYgKHByb2Jl X3NibXB1KCZjZmdfbXB1W2NhcmRdKSkNCisJCQlzYm1wdVtjYXJkXSA9IDE7 DQorCQlpZiAoc2JtcHVbY2FyZF0pDQorCQkJYXR0YWNoX3NibXB1KCZjZmdf bXB1W2NhcmRdKTsNCisJfQ0KKw0KKwlTT1VORF9MT0NLOw0KKw0KKwlpZihp c2FwbnApDQorCQlwcmludGsoS0VSTl9OT1RJQ0UgInNiX2NhcmQ6ICVkIFNv dW5kYmxhc3RlciBQblAgY2FyZChzKSBmb3VuZC5cbiIsIHNiX2NhcmRzX251 bSk7DQorDQogCXJldHVybiAwOw0KIH0NCiANCiBzdGF0aWMgdm9pZCBfX2V4 aXQgY2xlYW51cF9zYih2b2lkKQ0KIHsNCisJaW50IGk7DQorCQ0KIAlpZiAo c213X2ZyZWUpIHsNCiAJCXZmcmVlKHNtd19mcmVlKTsNCiAJCXNtd19mcmVl ID0gTlVMTDsNCiAJfQ0KLQl1bmxvYWRfc2IoJmNmZyk7DQotCWlmIChzYm1w dSkNCi0JCXVubG9hZF9zYm1wdSgmY2ZnX21wdSk7DQotCVNPVU5EX0xPQ0tf RU5EOw0KIA0KLSNpZiBkZWZpbmVkIENPTkZJR19JU0FQTlAgfHwgZGVmaW5l ZCBDT05GSUdfSVNBUE5QX01PRFVMRQkJCQ0KLQlpZihhY3RpdmF0ZWQpDQot CXsNCi0JCWlmKHNiX2RldikgCXNiX2Rldi0+ZGVhY3RpdmF0ZShzYl9kZXYp Ow0KLQkJaWYobXB1X2RldikgCW1wdV9kZXYtPmRlYWN0aXZhdGUobXB1X2Rl dik7DQotCX0NCisJZm9yKGkgPSAwOyBpIDwgc2JfY2FyZHNfbnVtOyBpKysp IHsNCisJCXVubG9hZF9zYigmY2ZnW2ldLCBpKTsNCisJCWlmIChzYm1wdVtp XSkNCisJCQl1bmxvYWRfc2JtcHUoJmNmZ19tcHVbaV0pOw0KKw0KKyNpZiBk ZWZpbmVkIENPTkZJR19JU0FQTlAgfHwgZGVmaW5lZCBDT05GSUdfSVNBUE5Q X01PRFVMRQ0KKwkJaWYoIWFjdGl2YXRlZFtpXSkgew0KKwkJCWlmKHNiX2Rl dltpXSkgCXNiX2RldltpXS0+ZGVhY3RpdmF0ZShzYl9kZXZbaV0pOw0KKwkJ CWlmKG1wdV9kZXZbaV0pIAltcHVfZGV2W2ldLT5kZWFjdGl2YXRlKG1wdV9k ZXZbaV0pOw0KKwkJfQ0KICNlbmRpZg0KKwl9DQorCVNPVU5EX0xPQ0tfRU5E OwkNCiB9DQogDQogbW9kdWxlX2luaXQoaW5pdF9zYik7DQo= --1199987260-764216604-954202277=:1588--