Return-Path: Message-ID: <664d43d60812151514m6c225403i528453fcb6f08430@mail.gmail.com> Date: Tue, 16 Dec 2008 01:14:43 +0200 From: event To: linux-bluetooth@vger.kernel.org Subject: [PATCH] Gateway profile In-Reply-To: <664d43d60812151512y6631ebf2j9665e1473193077d@mail.gmail.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_61468_25846534.1229382883401" References: <664d43d60812151512y6631ebf2j9665e1473193077d@mail.gmail.com> Sender: linux-bluetooth-owner@vger.kernel.org List-ID: ------=_Part_61468_25846534.1229382883401 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi all, I've implemented gateway profile. I've tested basic things, like place/cancel/answer call. Others are in development. Some could not be tested as my carrier doesn't provide corresponding services (like 3-way call, etc.) so any help welcome. Vale, Leonid Movshovich ------=_Part_61468_25846534.1229382883401 Content-Type: application/octet-stream; name=gateway.patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_forqq9a60 Content-Disposition: attachment; filename=gateway.patch SW5kZXg6IGF1ZGlvL2F1ZGlvLWFwaS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3Qv Ymx1ZXovdXRpbHMvYXVkaW8vYXVkaW8tYXBpLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z MApkaWZmIC13IC11IC1yMS4zMCBhdWRpby1hcGkudHh0Ci0tLSBhdWRpby9hdWRpby1hcGkudHh0 CTI5IE1heSAyMDA4IDEwOjQxOjQ0IC0wMDAwCTEuMzAKKysrIGF1ZGlvL2F1ZGlvLWFwaS50eHQJ MTUgRGVjIDIwMDggMjM6MDQ6NDEgLTAwMDAKQEAgLTEsNiArMSw3IEBACiBCbHVldG9vdGggYXVk aW8gc2VydmljZSBBUEkgZGVzY3JpcHRpb24KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgogCitDb3B5cmlnaHQgKEMpIDIwMDggIExlb25pZCBNb3ZzaG92aWNoIDxldmVu dC5yaWdhQGdtYWlsLmNvbT4KIENvcHlyaWdodCAoQykgMjAwNC0yMDA3ICBNYXJjZWwgSG9sdG1h bm4gPG1hcmNlbEBob2x0bWFubi5vcmc+CiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyAgSm9oYW4g SGVkYmVyZyA8am9oYW4uaGVkYmVyZ0Bub2tpYS5jb20+CiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAw NiAgQnJhZCBNaWRnbGV5IDxibWlkZ2xleUB4bWlzc2lvbi5jb20+CkBAIC0yMzMsMTMgKzIzNCwx MDIgQEAKIG9yZy5ibHVlei5hdWRpby5HYXRld2F5IGludGVyZmFjZQogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CiAKLVtub3QgeWV0IGltcGxlbWVudGVkXQotCiBUaGlzIGludGVy ZmFjZSBpcyBhdmFpbGFibGUgZm9yIHJlbW90ZSBkZXZpY2VzIHdoaWNoIGNhbiBmdW5jdGlvbiBp biB0aGUgQXVkaW8KIEdhdGV3YXkgcm9sZSBvZiB0aGUgSFNQIGFuZC9vciBIRlAgcHJvZmlsZXMu CiAKIE9iamVjdCBwYXRoKHMpCS9vcmcvYmx1ZXovYXVkaW8vZGV2aWNlKgogCitNZXRob2RzCQkK KyAgICB2b2lkIENvbm5lY3QoKQorCUNvbm5lY3QgdG8gdGhlIEFHIHNlcnZpY2Ugb24gdGhlIHJl bW90ZSBkZXZpY2UuCisKKyAgICB2b2lkIERpc2Nvbm5lY3QoKQorICAgIGJvb2xlYW4gSXNDb25u ZWN0ZWQoKQorCisgICAgdm9pZCBBbnN3ZXJDYWxsKCkKKyAgICAgICAgIEl0IGhhcyB0byBjYWxs ZWQgb25seSBhZnRlciBSaW5nIHNpZ25hbCByZWNlaXZlZC4KKyAgICAKKyAgICB2b2lkIENhbmNl bEN1cnJlbnRDYWxsKCkKKyAgICAgICAgIENhbmNlbCBjYWxsIHdoaWNoIGlzIHJ1bm5pbmcgbm93 LiBUaGlzIG9uZSBkb2VzIG5vdGhpbmcgd2l0aCBhbnkgMy13YXkKKyAgICAgICAgIHNpdHVhdGlv biBpbmNsLiBSYUguIEp1c3QgcGxhaW4gb2xkIFBESC4KKyAgICAgICAgIAorICAgIHZvaWQgQ2Fs bChzdHJpbmcgbnVtYmVyKQorICAgICAgICAgRGlhbCBhIG51bWJlciAnbnVtYmVyJy4gTm8gbnVt YmVyIHByb2Nlc3NpbmcgaXMgZG9uZSB0aHVzIGlmIEFHIHdvdWxkIAorICAgICAgICAgcmVqZWN0 IHRvIGRpYWwgaXQgZG9uJ3QgYmxhbWUgbWUgOikKKyAgICAKKyAgICBzdHJpbmcgR2V0T3BlcmF0 b3JOYW1lKCkKKyAgICAKKyAgICB2b2lkIFZvaWNlUmVjb2duaXRpb25BY3RpdmF0ZSgpCisgICAg CWluIGRldmVsb3BtZW50CisgICAgdm9pZCBWb2ljZVJlY29nbml0aW9uRGVhY3RpdmF0ZSgpCisg ICAgICAgCWluIGRldmVsb3BtZW50CisKKyAgICBzdHJpbmcgR2V0TnVtYmVyRm9yTGFzdFZvaWNl VGFnKCkKKyAgICAgICAgIEFzayBBRyB0byBwcm92aWRlIGEgcGhvbmUgbnVtYmVyLiBJdCBsb29r cyBsaWtlIEFHIHNoZWxsIGluIHR1cm4gCisgICAgICAgICBhc2sgdXNlciB0byBjaG9vc2Ugb25l LiBJZGVhIGJlaGluZCB0aGlzIGlzIFZSIG9uIHRoZSBIRiBzaWRlLgorCisgICAgdm9pZCBTZW5k RFRNRihzdHJpbmcgZGlnaXRzKQorICAgICAgICAgV2lsbCBzZW5kIGVhY2ggZGlnaXQgaW4gdGhl ICdkaWdpdHMnIHNlcXVlbnRpYWxseS4gV291bGQgc2VuZCAKKyAgICAgICAgIG5vdGhpbmcgaWYg dGhlcmUgaXMgbm9uLWR0bWYgZGlnaXQuCisKKyAgICB2b2lkIFNlbmRNaWNyb3Bob25lR2Fpbih1 aW50OCBnYWluKQorICAgIHZvaWQgU2VuZFNwZWFrZXJHYWluKHVpbnQ4IGdhaW4pCisgICAgICAg ICBGZWVsIHRoZW0gdXNlbGVzcyBidXQgcmVhbGx5IGVhc3kgdG8gaW1wbGVtZW50IDopCisgICAg CisgICAgc3RyaW5nW10gR2V0U3Vic2NyaWJlck51bWJlcnMoKQorICAgICAgICAgR2V0IGFsbCB0 aGUgbnVtYmVycyBvZiBBRworCisgICAgdm9pZCBTZW5kQXVkaW9EYXRhKHVpbnQ4W10gZGF0YSkK KyAgICAgICAgIFdvdWxkIG9ubHkgYmUgZWZmZWN0aXZlIHdoZW4gY2FsbCBvciBWUiBpcyBydW5u aW5nCisgICAgICAgICAoaS5lLiBTQ08gbGluayBha2EgQXVkaW8gQ29ubmVjdGlvbiBleGlzdHMp LiBEYXRhIHNob3VsZCBiZSAKKyAgICAgICAgIHBsYWluIDE2IGJpdCBMRSBQQ00gKGUuZy4gZGly ZWN0bHkgZnJvbSBBTFNBKQorCitTaWduYWxzCisgICAgdm9pZCBDb25uZWN0ZWQodWludDMyIGFn X2ZlYXR1cmVzKSAKKyAgICAgICAgIENvbm5lY3Rpb24gc3VjY2Vzc2Z1bGx5IGVzdGVibGlzaGVk LiAnYWdfZmVhdHVyZXMnIGFyZQorICAgICAgICAgT1JlZCBmZWF0dXJlczoKKyAgICAgICAgICAg ICAgMHgwMDEgVGhyZWUtd2F5IGNhbGxpbmcKKyAgICAgICAgICAgICAgMHgwMDIgRWNobyBjYW5j ZWxsaW5nIGFuZC9vciBub2ljZSByZWR1Y3Rpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgMHgw MDQgVm9pY2UgcmVjb2duaXRpb24gZnVuY3Rpb24KKyAgICAgICAgICAgICAgMHgwMDggSW4tYmFu ZCByaW5nIHRvbmUgY2FwYWJpbGl0eQorICAgICAgICAgICAgICAweDAxMCBBdHRhY2ggYSBudW1i ZXIgdG8gYSB2b2ljZSB0YWcKKyAgICAgICAgICAgICAgMHgwMjAgQWJpbGl0eSB0byByZWplY3Qg YSBjYWxsCisgICAgICAgICAgICAgIDB4MDQwIEVuaGFuY2VkIGNhbGwgc3RhdHVzCisgICAgICAg ICAgICAgIDB4MDgwIEVuaGFuY2VkIGNhbGwgY29udHJvbAorICAgICAgICAgICAgICAweDEwMCBF eHRlbmRlZCBFcnJvciBSZXN1bHQgQ29kZXMKKworICAgIHZvaWQgRGlzY29ubmVjdGVkKCkKKwor ICAgIHZvaWQgUmluZyhzdHJpbmcgbnVtYmVyKQorICAgICAgICAgU29tZW9uZSdzIGNhbGxpbmcg ZnJvbSAnbnVtYmVyJy4gCisgICAgICAgICBDYWxsZXIgbnVtYmVyIGlzIHByb3ZpZGVkIGFzIHJl Y2VpdmVkIGZyb20gQUcuCisKKyAgICB2b2lkIFN0YXR1c1VwZGF0ZShzdHJpbmcgaW5kaWNhdG9y X25hbWUsIHVpbnQzMiBpbmRpY2F0b3JfdmFsdWUpCisgICAgICAgICBJbmRpY2F0b3IgJ2luZGlj YXRvcl9uYW1lJyBjaGFuZ2VkIGl0cyB2YWx1ZSB0byAnaW5kaWNhdG9yX3ZhbHVlJy4gCisgICAg ICAgICBTeXN0ZW0gKGNhbGwsIGNhbGxzZXR1cCwgZXRjLikgc3RhdHVzZXMgYXJlIG5vdCBzaWdu YWxsZWQuCisKKyAgICB2b2lkIENhbGxDYW5jZWxsZWQoKQorICAgICAgICAgQ2FsbCBmYWlsZWQg dG8gc2V0IHVwLiBJdCBtZWFucyB0aGF0IHdlIHRyaWVkIHRvIGNhbGwgc29tZW9uZSAKKyAgICAg ICAgIG9yIHNvbWVvbmUgdHJpZWQgdG8gY2FsbCB1cyBidXQgY2FsbCB3YXMgbm90IGFjY2VwdGVk LgorCisgICAgdm9pZCBDYWxsU3RhcnQoKQorICAgICAgICAgQ2FsbCBzZXQgdXAgc3VjY2Vzc2Z1 bGx5LgorCisgICAgdm9pZCBDYWxsRW5kKCkKKyAgICAgICAgIENhbGwgd2FzIHN0YXJ0ZWQgYW5k IG5vdyBlbmRlZC4gSW4gY29udHJhc3Qgd2l0aCBDYWxsQ2FuY2VsbGVkIAorICAgICAgICAgd2hl cmUgY2FsbCBkaWRuJ3Qgc3RhcnRlZAorCisgICAgdm9pZCBWb2ljZVJlY29nbml0aW9uQWN0aXZl KCkKKyAgICB2b2lkIFZvaWNlUmVjb2duaXRpb25JbmFjdGl2ZSgpCisgICAgCWluIGRldmVsb3Bt ZW50CisKKyAgICB2b2lkIE1pY3JvcGhvbmVHYWluKHVpbnQ4IGdhaW4pIAorICAgIHZvaWQgU3Bl YWtlckdhaW4odWludDggZ2FpbikKKyAgICAgICAgIEFHIHNlbnQgdXMgbmV3IGdhaW4uCisKKyAg ICB2b2lkIEF1ZGlvRGF0YSh1aW50OFtdIGRhdGEpIAorICAgICAgICAgQXJyYXkgb2YgYXVkaW8g ZGF0YSBmcm9tIEFHLiBJdCBpcyBwbGFpbiAxNiBiaXQgUENNIHJlYWR5IGZvciBBTFNBLgorICAg ICAgICAgCiAKIG9yZy5ibHVlei5hdWRpby5TaW5rIGludGVyZmFjZQogPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09CkluZGV4OiBhdWRpby9kZXZpY2UuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3Zzcm9vdC9ibHVlei91dGlscy9hdWRpby9kZXZpY2UuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xOApkaWZmIC13IC11IC1yMS4xOCBkZXZpY2UuaAotLS0gYXVkaW8vZGV2aWNlLmgJMjkg TWF5IDIwMDggMDg6MDU6MTYgLTAwMDAJMS4xOAorKysgYXVkaW8vZGV2aWNlLmgJMTUgRGVjIDIw MDggMjM6MDQ6NDEgLTAwMDAKQEAgLTIyLDYgKzIyLDExIEBACiAgKgogICovCiAKKyNpZm5kZWYg X19ERVZJQ0VfSF9fCisjZGVmaW5lIF9fREVWSUNFX0hfXworCisjaW5jbHVkZSA8Ymx1ZXRvb3Ro L2JsdWV0b290aC5oPgorCiAjZGVmaW5lIEFVRElPX0RFVklDRV9JTlRFUkZBQ0UJIm9yZy5ibHVl ei5hdWRpby5EZXZpY2UiCiAKICNkZWZpbmUgR0VORVJJQ19BVURJT19VVUlECSIwMDAwMTIwMy0w MDAwLTEwMDAtODAwMC0wMDgwNUY5QjM0RkIiCkBAIC04MSwzICs4Niw1IEBACiB1aW50OF90IGRl dmljZV9nZXRfc3RhdGUoc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2KTsKIAogZ2Jvb2xlYW4gZGV2 aWNlX2lzX2Nvbm5lY3RlZChzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlu dGVyZmFjZSk7CisKKyNlbmRpZiAvKl9fREVWSUNFX0hfXyovCkluZGV4OiBhdWRpby9nYXRld2F5 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmx1ZXovdXRpbHMvYXVkaW8vZ2F0ZXdh eS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXcgLXUgLXIxLjEyIGdhdGV3YXku YwotLS0gYXVkaW8vZ2F0ZXdheS5jCTIgRmViIDIwMDggMDM6Mzc6MDUgLTAwMDAJMS4xMgorKysg YXVkaW8vZ2F0ZXdheS5jCTE1IERlYyAyMDA4IDIzOjA0OjQ2IC0wMDAwCkBAIC00LDYgKzQsNyBA QAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyAgTm9raWEgQ29ycG9yYXRpb24KICAq ICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1h bm4ub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwOCAgTGVvbmlkIE1vdnNob3ZpY2ggPGV2ZW50 LnJpZ2FAZ21haWwub3JnPgogICoKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI3LDggKzI4LDk0 NSBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCisjaW5jbHVkZSA8ZmNu dGwuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8ZGJ1cy9kYnVzLmg+CisjaW5jbHVk ZSA8Z2RidXMuaD4KKworI2luY2x1ZGUgPGJsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRl IDxibHVldG9vdGgvaGNpLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL2hjaV9saWIuaD4KKyNpbmNs dWRlIDxibHVldG9vdGgvc2NvLmg+CisjaW5jbHVkZSA8Ymx1ZXRvb3RoL3JmY29tbS5oPgorI2lu Y2x1ZGUgPGJsdWV0b290aC9zZHAuaD4KKyNpbmNsdWRlIDxibHVldG9vdGgvc2RwX2xpYi5oPgog CiAjaW5jbHVkZSAiZ2F0ZXdheS5oIgorI2luY2x1ZGUgImVycm9yLmgiCisjaW5jbHVkZSAiZ2xp Yi1oZWxwZXIuaCIKKyNpbmNsdWRlICJsb2dnaW5nLmgiCisKKyNkZWZpbmUgU0NPX0JVRl9TSVpF IDEwMjQKKyNkZWZpbmUgUkZDT01NX0JVRl9TSVpFIDI1NgorI2RlZmluZSBBR19JTkRJQ0FUT1Jf REVTQ1JfU0laRSAyMCAvKiBub3QtbW9yZS10aGVuLTE2IGRlZmluZWQgYnkgR1NNICsgMSBmb3Ig TlVMTCArIHBhZGRpbmcgKi8KKyNkZWZpbmUgQUdfQ0FMTEVSX05VTV9TSVpFIDY0IC8qIHNpemUg b2YgbnVtYmVyICsgdHlwZSAqLworCisvKiBjb21tYW5kcyAqLworI2RlZmluZSBBR19GRUFUVVJF UyAiQVQrQlJTRj0yNlxyIiAvLyA9IDB4N0YgPSBBbGwgZmVhdHVyZXMgc3VwcG9ydGVkCisjZGVm aW5lIEFHX0lORElDQVRPUlNfU1VQUCAiQVQrQ0lORD0/XHIiCisjZGVmaW5lIEFHX0lORElDQVRP UlNfVkFMICJBVCtDSU5EP1xyIgorI2RlZmluZSBBR19JTkRJQ0FUT1JTX0VOQUJMRSAiQVQrQ01F Uj0zLDAsMCwxXHIiCisjZGVmaW5lIEFHX0hPTERfTVBUWV9TVVBQICJBVCtDSExEPT9cciIKKyNk ZWZpbmUgQUdfQ0FMTEVSX0lERU5UX0VOQUJMRSAiQVQrQ0xJUD0xXHIiCisjZGVmaW5lIEFHX0NB UlJJRVJfRk9STUFUICJBVCtDT1BTPTMsMFxyIgorI2RlZmluZSBBR19FWFRFTkRFRF9SRVNVTFRf Q09ERSAiQVQrQ01FRT0xXHIiCisKKyNkZWZpbmUgQUdfRkVBVFVSRV8zV0FZIDB4MQorI2RlZmlu ZSBBR19GRUFUVVJFX0VYVEVOREVEX1JFU19DT0RFIDB4MTAwCisvKiBIb2xkIGFuZCBtdWx0aXBh cnkgQUcgZmVhdHVyZXMuIENvbW1lbnRzIGJlbG93IGFyZSBjb3BpZWQgZnJvbSBoYW5kcy1mcmVl IHNwZWMgZm9yIHJlZmVyZW5jZSAqLworI2RlZmluZSBBR19DSExEXzAgMHgwMSAvKiBSZWxlYXNl cyBhbGwgaGVsZCBjYWxscyBvciBzZXRzIFVzZXIgRGV0ZXJtaW5lZCBVc2VyIEJ1c3kgKFVEVUIp IGZvciBhIHdhaXRpbmcgY2FsbCAqLworI2RlZmluZSBBR19DSExEXzEgMHgwMiAvKiBSZWxlYXNl cyBhbGwgYWN0aXZlIGNhbGxzIChpZiBhbnkgZXhpc3QpIGFuZCBhY2NlcHRzIHRoZSBvdGhlciAo aGVsZCBvciB3YWl0aW5nKSBjYWxsICovCisjZGVmaW5lIEFHX0NITERfMXggMHgwNCAvKiBSZWxl YXNlcyBzcGVjaWZpZWQgYWN0aXZlIGNhbGwgb25seSA8eD4gKi8KKyNkZWZpbmUgQUdfQ0hMRF8y IDB4MDggLyogUGxhY2VzIGFsbCBhY3RpdmUgY2FsbHMgKGlmIGFueSBleGlzdCkgb24gaG9sZCBh bmQgYWNjZXB0cyB0aGUgb3RoZXIgKGhlbGQgb3Igd2FpdGluZykgY2FsbCAqLworI2RlZmluZSBB R19DSExEXzJ4IDB4MTAgLyogUmVxdWVzdCBwcml2YXRlIGNvbnN1bHRhdGlvbiBtb2RlIHdpdGgg c3BlY2lmaWVkIGNhbGwgPHg+IChQbGFjZSBhbGwgY2FsbHMgb24gaG9sZCBFWENFUFQgdGhlIGNh bGwgPHg+KSAqLworI2RlZmluZSBBR19DSExEXzMgMHgyMCAvKiBBZGRzIGEgaGVsZCBjYWxsIHRv IHRoZSBjb252ZXJzYXRpb24gKi8KKyNkZWZpbmUgQUdfQ0hMRF80IDB4NDAgLyogQ29ubmVjdHMg dGhlIHR3byBjYWxscyBhbmQgZGlzY29ubmVjdHMgdGhlIHN1YnNjcmliZXIgZnJvbSBib3RoIGNh bGxzIChFeHBsaWNpdCBDYWxsIFRyYW5zZmVyKS4gCisgICAgICAgICAgICAgICAgICAgICAgICAg IFN1cHBvcnQgZm9yIHRoaXMgdmFsdWUgYW5kIGl0cyBhc3NvY2lhdGVkIGZ1bmN0aW9uYWxpdHkg aXMgb3B0aW9uYWwgZm9yIHRoZSBIRi4gKi8KKyNkZWZpbmUgT0tfUkVTUE9OU0UgIlxyXG5PS1xy XG4iCisjZGVmaW5lIEVSUk9SX1JFU1BPTlNFICJcclxuRVJST1JcclxuIgorCisKK3N0cnVjdCBp bmRpY2F0b3IgeworCWdjaGFyIGRlc2NyW0FHX0lORElDQVRPUl9ERVNDUl9TSVpFXTsgCisJZ2lu dCB2YWx1ZTsKK307CisKK3N0cnVjdCBnYXRld2F5IHsKKwlHSU9DaGFubmVsKiByZmNvbW07CisJ Z3VpbnQgcmZjb21tX3dhdGNoX2lkOworCUdJT0NoYW5uZWwqIHNjbzsKKwlHSU9DaGFubmVsKiBz Y29fc2VydmVyOworCURCdXNNZXNzYWdlKiBjb25uZWN0X21lc3NhZ2U7CisJZ3VpbnQgYWdfZmVh dHVyZXM7CisJZ3VpbnQgaG9sZF9tdWx0aXBhcnR5X2ZlYXR1cmVzOworCUdTTGlzdCogaW5kaWVz OworCWdib29sZWFuIGlzX2RpYWxpbmc7Cit9OworCisKK3N0YXRpYyBnYm9vbGVhbiByZmNvbW1f YWdfZGF0YV9jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwgc3RydWN0IGF1 ZGlvX2RldmljZSAqZGV2aWNlKTsKKworc3RhdGljIHZvaWQgcmZjb21tX3N0YXJ0X3dhdGNoKHN0 cnVjdCBhdWRpb19kZXZpY2UqIGRldikgCit7CisJc3RydWN0IGdhdGV3YXkqIGd3ID0gZGV2LT5n YXRld2F5OworCWd3LT5yZmNvbW1fd2F0Y2hfaWQgPSBnX2lvX2FkZF93YXRjaChndy0+cmZjb21t LCBHX0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hVUHwgR19JT19OVkFMCisJCQkJCSAgICAgLCAo R0lPRnVuYykgcmZjb21tX2FnX2RhdGFfY2IsIGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHJmY29t bV9zdG9wX3dhdGNoKHN0cnVjdCBhdWRpb19kZXZpY2UqIGRldikgCit7CisJc3RydWN0IGdhdGV3 YXkqIGd3ID0gZGV2LT5nYXRld2F5OworCWdfc291cmNlX3JlbW92ZShndy0+cmZjb21tX3dhdGNo X2lkKTsKK30KKworc3RhdGljIGdib29sZWFuIGlvX2NoYW5uZWxfd3JpdGVfYWxsKEdJT0NoYW5u ZWwqIGlvLCBnY2hhciogZGF0YSwgZ3NpemUgY291bnQpIAoreworCWdzaXplIHdyaXR0ZW4gPSAw OworCUdJT1N0YXR1cyBzdGF0dXM7CisJd2hpbGUgKDAgPCBjb3VudCkgeworCQlzdGF0dXMgPSAg Z19pb19jaGFubmVsX3dyaXRlX2NoYXJzKGlvLCBkYXRhLCBjb3VudCwgJndyaXR0ZW4sIE5VTEwp OworCQlpZiAoR19JT19TVEFUVVNfTk9STUFMICE9IHN0YXR1cykgeworCQkJcmV0dXJuIEZBTFNF OworCQl9CisJCWRhdGEgKz0gd3JpdHRlbjsKKwkJY291bnQgLT0gd3JpdHRlbjsKKwl9CisJcmV0 dXJuIFRSVUU7Cit9CisKKy8qIGl0J3Mgd29ydGggdG8gbWVudGlvbiB0aGF0IGRhdGEgYW5kIHJl c3BvbnNlIGNvdWxkIGJlIHRoZSBzYW1lIHBvaW50ZXJzICovCitzdGF0aWMgZ2Jvb2xlYW4gcmZj b21tX3NlbmRfYW5kX3JlYWQoc3RydWN0IGdhdGV3YXkqIGd3LCBnY2hhciogZGF0YSwgZ2NoYXIq IHJlc3BvbnNlLCBnc2l6ZSBjb3VudCkgCit7CisJR0lPQ2hhbm5lbCogcmZjb21tID0gZ3ctPnJm Y29tbTsKKworCWlmICghaW9fY2hhbm5lbF93cml0ZV9hbGwocmZjb21tLCBkYXRhLCBjb3VudCkp IHsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWdzaXplIHJlYWQgPSAwOworCWdib29sZWFuIGdv dF9vayA9IEZBTFNFOworCWdib29sZWFuIGdvdF9lcnJvciA9IEZBTFNFOworCWdjaGFyKiByZXNw X2J1ZiA9IHJlc3BvbnNlOworCWdzaXplIHRvcmVhZCA9IFJGQ09NTV9CVUZfU0laRSAtIDE7CisJ R0lPU3RhdHVzIHN0YXR1czsKKwl3aGlsZSAoISAoZ290X29rIHx8IGdvdF9lcnJvcikpIHsKKwkJ c3RhdHVzID0gZ19pb19jaGFubmVsX3JlYWRfY2hhcnMocmZjb21tLCByZXNwX2J1ZiwgdG9yZWFk LCAmcmVhZCwgTlVMTCk7CisJCWlmIChHX0lPX1NUQVRVU19OT1JNQUwgPT0gc3RhdHVzKSB7CisJ CQlyZXNwX2J1ZltyZWFkXSA9ICdcMCc7CisJCX0gZWxzZSB7CisJCQlkZWJ1ZygicmZjb21tX3Nl bmRfYW5kX3JlYWQoKTogJW0iKTsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCQlnb3Rfb2sgPSBO VUxMICE9IHN0cnN0cihyZXNwX2J1ZiwgT0tfUkVTUE9OU0UpOworCQlnb3RfZXJyb3IgPSBOVUxM ICE9IHN0cnN0cihyZXNwX2J1ZiwgRVJST1JfUkVTUE9OU0UpOworCQlyZXNwX2J1ZiArPSByZWFk OworCQl0b3JlYWQgLT0gcmVhZDsKKwl9CisJZGVidWcoIiEhISBEYXRhIGlzICclcyciLCByZXNw b25zZSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIGdldCA8ZGVzY3I+IGZyb20gdGhlIG5hbWVz OiAoPGRlc2NyPiwgKDx2YWx1ZXM+KSksICg8ZGVzY3I+LCAoPHZhbHVlcz4pKSAuLi4gKi8KK0dT TGlzdCogcGFyc2VfaW5kaWNhdG9yX25hbWVzKGdjaGFyKiBuYW1lcywgR1NMaXN0KiBpbmRpZXMp IAoreworCWdjaGFyKiBjdXJyZW50ID0gbmFtZXMgLSAxOworCUdTTGlzdCogcmVzdWx0ID0gaW5k aWVzOworCWdjaGFyKiBuZXh0OworCXdoaWxlIChOVUxMICE9IGN1cnJlbnQpIHsKKwkJY3VycmVu dCArPSAyOworCQluZXh0ID0gc3Ryc3RyKGN1cnJlbnQsICIsKCIpOworCQlzdHJ1Y3QgaW5kaWNh dG9yKiBpbmQgPSAoc3RydWN0IGluZGljYXRvciopIGdfc2xpY2VfbmV3KHN0cnVjdCBpbmRpY2F0 b3IpOyAKKwkJc3RybmNweShpbmQtPmRlc2NyLCBjdXJyZW50LCAyMCk7CisJCWluZC0+ZGVzY3Jb KGdpbnQpbmV4dCAtIChnaW50KWN1cnJlbnRdID0gJ1wwJzsKKwkJZGVidWcoImZvdW5kIGluZGlj YXRvciAnJXMnIiwgaW5kLT5kZXNjcik7CisJCXJlc3VsdCA9IGdfc2xpc3RfYXBwZW5kKHJlc3Vs dCwgKGdwb2ludGVyKWluZCk7CisJCWRlYnVnKCJwYXJzZV9pbmRpY2F0b3JfbmFtZXMoKTogYXBw ZW5kIHN1Y2Nlc3MiKTsKKwkJY3VycmVudCA9IHN0cnN0cihuZXh0ICsgMSwgIiwoIik7CisJCWRl YnVnKCJwYXJzZV9pbmRpY2F0b3JfbmFtZXMoKTogc3Ryc3RyKCkgc3VjY2VzcyIpOworCX0KKwlk ZWJ1ZygicGFyc2VfaW5kaWNhdG9yX25hbWVzKCk6IHN1Y2Nlc3MiKTsKKwlyZXR1cm4gcmVzdWx0 OworfQorCisvKiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KK0dTTGlzdCog cGFyc2VfaW5kaWNhdG9yX3ZhbHVlcyhnY2hhciogdmFsdWVzLCBHU0xpc3QqIGluZGllcykgCit7 CisJZ2ludCB2YWw7CisJZ2NoYXIqIGN1cnJlbnQgPSB2YWx1ZXMgLSAxOworCUdTTGlzdCogcnVu bmVyID0gaW5kaWVzOworCXdoaWxlIChOVUxMICE9IGN1cnJlbnQpIHsKKwkJY3VycmVudCArPSAx OworCQlzc2NhbmYoY3VycmVudCwgIiVkIiwgJnZhbCk7CisJCWN1cnJlbnQgPSBzdHJjaHIoY3Vy cmVudCwgJywnKTsKKwkJc3RydWN0IGluZGljYXRvciogaW5kID0gKHN0cnVjdCBpbmRpY2F0b3Iq KSBnX3NsaXN0X250aF9kYXRhKHJ1bm5lciwgMCk7CisJCWluZC0+dmFsdWUgPSB2YWw7CisJCXJ1 bm5lciA9IGdfc2xpc3RfbmV4dChydW5uZXIpOworCX0KKwlyZXR1cm4gaW5kaWVzOworfQorCisv KiBnZXQgdmFsdWVzIGZyb20gPHZhbDA+LDx2YWwxPiwuLi4gKi8KK3N0YXRpYyBndWludCBnZXRf aG9sZF9tcHR5X2ZlYXR1cmVzKGdjaGFyKiBmZWF0dXJlcykgCit7CisJZ3VpbnQgcmVzdWx0ID0g MDsKKwlpZiAoTlVMTCAhPSBzdHJzdHIoZmVhdHVyZXMsICIwIikpIHsKKwkJcmVzdWx0IHw9IEFH X0NITERfMDsKKwl9CisJaWYgKE5VTEwgIT0gc3Ryc3RyKGZlYXR1cmVzLCAiMSIpKSB7CisJCXJl c3VsdCB8PSBBR19DSExEXzE7CisJfQorCWlmIChOVUxMICE9IHN0cnN0cihmZWF0dXJlcywgIjF4 IikpIHsKKwkJcmVzdWx0IHw9IEFHX0NITERfMXg7CisJfQorCWlmIChOVUxMICE9IHN0cnN0cihm ZWF0dXJlcywgIjIiKSkgeworCQlyZXN1bHQgfD0gQUdfQ0hMRF8yOworCX0KKwlpZiAoTlVMTCAh PSBzdHJzdHIoZmVhdHVyZXMsICIyeCIpKSB7CisJCXJlc3VsdCB8PSBBR19DSExEXzJ4OworCX0K KwlpZiAoTlVMTCAhPSBzdHJzdHIoZmVhdHVyZXMsICIzIikpIHsKKwkJcmVzdWx0IHw9IEFHX0NI TERfMzsKKwl9CisJaWYgKE5VTEwgIT0gc3Ryc3RyKGZlYXR1cmVzLCAiNCIpKSB7CisJCXJlc3Vs dCB8PSBBR19DSExEXzQ7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVh biBlc3RhYmxpc2hfc2VydmljZV9sZXZlbF9jb25uKHN0cnVjdCBnYXRld2F5KiBndykgCit7CisJ Z2NoYXIgYnVmW1JGQ09NTV9CVUZfU0laRV07CisJZ2ludCByZWFkOworCWdib29sZWFuIHJlczsK KwlyZXMgPSByZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfRkVBVFVSRVMsIGJ1Ziwgc2l6ZW9m KEFHX0ZFQVRVUkVTKSAtIDEpOworCWlmICghIHJlcyAKKwkgICAgfHwgMSAhPSBzc2NhbmYoYnVm LCAiXHJcbitCUlNGOiVkIiwgJmd3LT5hZ19mZWF0dXJlcykpIHsKKwkJcmV0dXJuIEZBTFNFOwor CX0KKwlkZWJ1ZygiZmVhdHVyZXMgYXJlIDB4JVgiLCBndy0+YWdfZmVhdHVyZXMpOworCXJlcyA9 IHJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBBR19JTkRJQ0FUT1JTX1NVUFAsIGJ1Ziwgc2l6ZW9m KEFHX0lORElDQVRPUlNfU1VQUCkgLSAxKTsKKwlpZiAoISByZXMgfHwgIXN0cnN0cihidWYsICIr Q0lORDoiKSkgeworCQlyZXR1cm4gRkFMU0U7CisJfQorCWRlYnVnKCJHb3QgaW5kaWNhdG9ycyAn JXMnIiwgYnVmKTsKKwlndy0+aW5kaWVzID0gcGFyc2VfaW5kaWNhdG9yX25hbWVzKHN0cmNocihi dWYsICcoJyksIE5VTEwpOworCisJcmVzID0gcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0lO RElDQVRPUlNfVkFMLCBidWYsIHNpemVvZihBR19JTkRJQ0FUT1JTX1ZBTCkgLSAxKTsKKwlpZiAo ISByZXMgfHwgIXN0cnN0cihidWYsICIrQ0lORDoiKSkgeworCQlyZXR1cm4gRkFMU0U7CisJfQor CWRlYnVnKCJHb3QgdmFsdWVzIGZvciB0aGVtICclcyciLCBidWYpOworCWd3LT5pbmRpZXMgPSBw YXJzZV9pbmRpY2F0b3JfdmFsdWVzKHN0cmNocihidWYsICc6JykgKyAxLCBndy0+aW5kaWVzKTsK KyAgICAKKwlyZXMgPSByZmNvbW1fc2VuZF9hbmRfcmVhZChndywgQUdfSU5ESUNBVE9SU19FTkFC TEUsIGJ1Ziwgc2l6ZW9mKEFHX0lORElDQVRPUlNfRU5BQkxFKSAtIDEpOworCWlmICghIHJlcyB8 fCAhc3Ryc3RyKGJ1ZiwgIk9LIikpIHsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlpZiAoMCAhPSBn dy0+YWdfZmVhdHVyZXMgJiBBR19GRUFUVVJFXzNXQVkpIHsKKwkJcmVzID0gcmZjb21tX3NlbmRf YW5kX3JlYWQoZ3csIEFHX0hPTERfTVBUWV9TVVBQLCBidWYsIHNpemVvZihBR19IT0xEX01QVFlf U1VQUCkgLSAxKTsKKwkJaWYgKCEgcmVzIHx8ICFzdHJzdHIoYnVmLCAiK0NITEQ6IikpIHsKKwkJ CWdfc2xpY2VfZnJlZTEoUkZDT01NX0JVRl9TSVpFLCBidWYpOworCQkJcmV0dXJuIEZBTFNFOwor CQl9CisJCWd3LT5ob2xkX211bHRpcGFydHlfZmVhdHVyZXMgPSBnZXRfaG9sZF9tcHR5X2ZlYXR1 cmVzKHN0cmNocihidWYsICcoJykpOworCX0gZWxzZSB7CisJCWd3LT5ob2xkX211bHRpcGFydHlf ZmVhdHVyZXMgPSAwOworCX0KKwlkZWJ1ZygiQ0hMRCBpcyAweCVYIiwgZ3ctPmhvbGRfbXVsdGlw YXJ0eV9mZWF0dXJlcyk7CisJZGVidWcoIlNlcnZpY2UgbGF5ZXIgY29ubmVjdGlvbiBzdWNjZXNz ZnVsbHkgZXN0YWJsaXNoZWQhIik7CisJcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0NBTExF Ul9JREVOVF9FTkFCTEUsIGJ1Ziwgc2l6ZW9mKEFHX0NBTExFUl9JREVOVF9FTkFCTEUpIC0gMSk7 CisJZGVidWcoIkNhbGxlciBpZGVudGlmaWNhdGlvbiBlbmFibGVkIik7CisJcmZjb21tX3NlbmRf YW5kX3JlYWQoZ3csIEFHX0NBUlJJRVJfRk9STUFULCBidWYsIHNpemVvZihBR19DQVJSSUVSX0ZP Uk1BVCkgLSAxKTsKKwlkZWJ1ZygiQ2FycmllciBmb3JtYXQgc2V0Iik7CisJaWYgKDAgIT0gZ3ct PmFnX2ZlYXR1cmVzICYgQUdfRkVBVFVSRV9FWFRFTkRFRF9SRVNfQ09ERSkgeworCQlyZmNvbW1f c2VuZF9hbmRfcmVhZChndywgQUdfRVhURU5ERURfUkVTVUxUX0NPREUsIGJ1Ziwgc2l6ZW9mKEFH X0VYVEVOREVEX1JFU1VMVF9DT0RFKSAtIDEpOworCQlkZWJ1ZygiRXh0ZW5kZWQgcmVzdWx0IGNv ZGUgZW5hYmxlZCIpOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vz c19pbmRfY2hhbmdlKHN0cnVjdCBhdWRpb19kZXZpY2UqIGRldiwgZ2NoYXIqIG5hbWUsIGdpbnQg dmFsdWUpIAoreworCXN0cnVjdCBnYXRld2F5KiBndyA9IGRldi0+Z2F0ZXdheTsKKwlpZiAoMCA9 PSBzdHJjbXAobmFtZSwgImNhbGwiKSkgeworCQlpZiAoMCA8IHZhbHVlKSB7CisJCQlnX2RidXNf ZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsIEFVRElPX0dBVEVXQVlfSU5URVJGQUNF LCAiQ2FsbFN0YXJ0IiwgREJVU19UWVBFX0lOVkFMSUQpOworCQkJZ3ctPmlzX2RpYWxpbmcgPSBG QUxTRTsKKwkJfSBlbHNlIHsKKwkJCWdfZGJ1c19lbWl0X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+ cGF0aCwgQVVESU9fR0FURVdBWV9JTlRFUkZBQ0UsICJDYWxsRW5kIiwgREJVU19UWVBFX0lOVkFM SUQpOworCQl9CisJfSBlbHNlIGlmICgwID09IHN0cmNtcChuYW1lLCAiY2FsbHN0YXR1cyIpIAor CQkgICAmJiBndy0+aXNfZGlhbGluZykgeworCQlpZiAoMCA9PSB2YWx1ZSkgeworCQkJZ19kYnVz X2VtaXRfc2lnbmFsKGRldi0+Y29ubiwgZGV2LT5wYXRoLCBBVURJT19HQVRFV0FZX0lOVEVSRkFD RSwgIkNhbGxDYW5jZWxsZWQiLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisJCQlndy0+aXNfZGlhbGlu ZyA9IEZBTFNFOworCQl9IGVsc2UgeworCQkJZ3ctPmlzX2RpYWxpbmcgPSBUUlVFOworCQl9CisJ fSBlbHNlIGlmKDAgPT0gc3RyY21wKG5hbWUsICJjYWxsaGVsZCIpKSB7CisJCS8qIEZJWE1FOiBU aGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgb24gYXNzdW1wdGlvbnMgb25seS4gSGFzIHRvIGJl IHRlc3RlZCBmb3IgaW50ZXJvcGVyYWJpbGl0eQorCQkgICBJIGFzc3VtZSB0aGF0IGNhbGxoZWxk PTIgd291bGQgYmUgc2VudCB3aGVuIGRpYWwgZnJvbSBIRiBmYWlsZWQgaW4gY2FzZSBvZiAzLXdh eSBjYWxsIAorCQkgICBVbmZvcnR1bmF0ZWx5IHRoaXMgcGF0aCBpcyBub3QgY292ZXJlZCBieSB0 aGUgSEYgc3BlYyBzbyB0aGUgY29kZSBoYXMgdG8gYmUgdGVzdGVkIGZvciBpbnRlcm9wCisJCSov CisJCWlmICgyID09IHZhbHVlKSB7IC8qICcyJyBtZWFuczogYWxsIGNhbGxzIGhlbGQsIG5vIGFj dGl2ZSBjYWxscyAqLworCQkJaWYgKGd3LT5pc19kaWFsaW5nKSB7CisJCQkJZ19kYnVzX2VtaXRf c2lnbmFsKGRldi0+Y29ubiwgZGV2LT5wYXRoLCBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwgIkNh bGxDYW5jZWxsZWQiLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisJCQkJZ3ctPmlzX2RpYWxpbmcgPT0g RkFMU0U7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5j b25uLCBkZXYtPnBhdGgsIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFLCAiU3RhdHVzVXBkYXRlIgor CQkJCSAgICwgREJVU19UWVBFX1NUUklORywgbmFtZSwgREJVU19UWVBFX0lOVDMyLCB2YWx1ZSwg REJVU19UWVBFX0lOVkFMSUQpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19yaW5nKHN0 cnVjdCBhdWRpb19kZXZpY2UqIGRldmljZSwgR0lPQ2hhbm5lbCogY2hhbiwgZ2NoYXIqIGJ1Zikg Cit7CisJZ2NoYXIgbnVtYmVyW0FHX0NBTExFUl9OVU1fU0laRV07CisJZ2NoYXIqIHNlcDsKKwln aW50IHJlYWQ7CisgICAgCisJcmZjb21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKKwlnX2lvX2NoYW5u ZWxfcmVhZF9jaGFycyhjaGFuLCBidWYsIFJGQ09NTV9CVUZfU0laRSAtIDEsICZyZWFkLCBOVUxM KTsKKwlpZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJcbitDTElQOiVzXHJcbiIsIG51bWJlcikpIHsK KwkJc2VwID0gc3RyY2hyKG51bWJlciwgJywnKTsKKwkJc2VwWzBdID0gJ1wwJzsKKwkJLyogRklY TUU6IHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gZWFjaCBSSU5HK0NMSVAuIFRoYXQncyBiYWQg Ki8KKwkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+Y29ubiwgZGV2aWNlLT5wYXRoLCBBVURJ T19HQVRFV0FZX0lOVEVSRkFDRSwgIlJpbmciCisJCQkJICAgLCBEQlVTX1RZUEVfU1RSSU5HLCBu dW1iZXIsIERCVVNfVFlQRV9JTlZBTElEKTsKKwl9IGVsc2UgeworCQlkZWJ1ZygicmZjb21tX2Fn X2RhdGFfY2IoKTogJyVzJyBpbiBwbGFjZSBvZiArQ0xJUCBhZnRlciBSSU5HIiwgYnVmKTsKKwl9 CisJcmZjb21tX3N0YXJ0X3dhdGNoKGRldmljZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiByZmNv bW1fYWdfZGF0YV9jYihHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZCwgc3RydWN0 IGF1ZGlvX2RldmljZSAqZGV2aWNlKQoreworCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOwor CXN0cnVjdCBnYXRld2F5KiBndzsKKwlnaW50IHJlYWQ7CisJZ2NoYXIgaW5kaWNhdG9yW0FHX0lO RElDQVRPUl9ERVNDUl9TSVpFICsgNF07IC8qIHNvbWUgc3BhY2UgZm9yIHZhbHVlICovCisJZ2lu dCB2YWx1ZTsKKwlnaW50IHJlc3VsdDsKKwlnY2hhciogc2VwOworICAgIAorCWlmIChjb25kICYg R19JT19OVkFMKQorCQlyZXR1cm4gRkFMU0U7CisgICAgCisJZ3cgPSBkZXZpY2UtPmdhdGV3YXk7 CisgICAgCisJaWYgKGNvbmQgJiAoR19JT19FUlIgfCBHX0lPX0hVUCkpCisJCXJldHVybiBGQUxT RTsKKyAgICAKKyAgICAKKwlpZiAoR19JT19FUlJPUl9OT05FICE9IGdfaW9fY2hhbm5lbF9yZWFk X2NoYXJzKGNoYW4sIGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAmcmVhZCwgTlVMTCkpCisJCXJldHVy biBUUlVFOworCisJYnVmW3JlYWRdID0gJ1wwJzsKKwlkZWJ1ZygiISEhIENhbGxiYWNrIHJlY2Vp dmVkOiAlcyIsIGJ1Zik7CisJaWYgKDEgPT0gc3NjYW5mKGJ1ZiwgIlxyXG4rQ0lFVjolc1xyXG4i LCBpbmRpY2F0b3IpKSB7CisJCXNlcCA9IHN0cmNocihpbmRpY2F0b3IsICcsJyk7CisJCXNlcFsw XSA9ICdcMCc7CisJCXNlcCArPSAxOworCQl2YWx1ZSA9IGF0b2koc2VwKTsKKwkJcHJvY2Vzc19p bmRfY2hhbmdlKGRldmljZSwgaW5kaWNhdG9yLCB2YWx1ZSk7CisJfSBlbHNlIGlmIChOVUxMICE9 IHN0cnN0cihidWYsICJSSU5HIikpeworCQlwcm9jZXNzX3JpbmcoZGV2aWNlLCBjaGFuLCBidWYp OworCX0gZWxzZSBpZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJcbitCVlJBOiVkXHJcbiIsIHZhbHVl KSl7CisJCWlmICgwID09IHZhbHVlKSB7CisJCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2aWNlLT5j b25uLCBkZXZpY2UtPnBhdGgsIEFVRElPX0dBVEVXQVlfSU5URVJGQUNFCisJCQkJCSAgICwgIlZv aWNlUmVjb2duaXRpb25BY3RpdmUiLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisJCX0gZWxzZSB7CisJ CQlnX2RidXNfZW1pdF9zaWduYWwoZGV2aWNlLT5jb25uLCBkZXZpY2UtPnBhdGgsIEFVRElPX0dB VEVXQVlfSU5URVJGQUNFCisJCQkJCSAgICwgIlZvaWNlUmVjb2duaXRpb25JbmFjdGl2ZSIsIERC VVNfVFlQRV9JTlZBTElEKTsKKwkJfQorCX0gZWxzZSBpZiAoMSA9PSBzc2NhbmYoYnVmLCAiXHJc bitWR1M6JWRcclxuIiwgdmFsdWUpKXsKKwkJZ19kYnVzX2VtaXRfc2lnbmFsKGRldmljZS0+Y29u biwgZGV2aWNlLT5wYXRoLCBBVURJT19HQVRFV0FZX0lOVEVSRkFDRQorCQkJCSAgICwgIlNwZWFr ZXJHYWluIiwgREJVU19UWVBFX0lOVDMyLCB2YWx1ZSwgREJVU19UWVBFX0lOVkFMSUQpOworICAg ICAgICAKKwl9IGVsc2UgaWYgKDEgPT0gc3NjYW5mKGJ1ZiwgIlxyXG4rVkdNOiVkXHJcbiIsIHZh bHVlKSl7CisJCWdfZGJ1c19lbWl0X3NpZ25hbChkZXZpY2UtPmNvbm4sIGRldmljZS0+cGF0aCwg QVVESU9fR0FURVdBWV9JTlRFUkZBQ0UKKwkJCQkgICAsICJNaWNHYWluIiwgREJVU19UWVBFX0lO VDMyLCB2YWx1ZSwgREJVU19UWVBFX0lOVkFMSUQpOworCX0gZWxzZSB7CisJCWRlYnVnKCJyZmNv bW1fYWdfZGF0YV9jYigpOiByZWFkIHdyb25nIGRhdGEgJyVzJyIsIGJ1Zik7CisJfQorCXJldHVy biBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gc2NvX2lvX2NiKEdJT0NoYW5uZWwgKmNoYW4s IEdJT0NvbmRpdGlvbiBjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYpIAoreworCWdjaGFyIGJ1ZltTQ09fQlVGX1NJWkVdOworCWdpbnQgcmVh ZDsKKwlzdHJ1Y3QgZ2F0ZXdheSogZ3cgPSBkZXYtPmdhdGV3YXk7CisKKwlpZiAoY29uZCAmIEdf SU9fTlZBTCkKKwkJcmV0dXJuIEZBTFNFOworICAgIAorCWlmIChjb25kICYgKEdfSU9fRVJSIHwg R19JT19IVVApKSB7CisJCUdJT0NoYW5uZWwqIGNoYW4gPSBndy0+c2NvOworCQlkZWJ1ZygiU0NP IGNvbm5lY3Rpb24gZmluaXNoZWQiKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKGNoYW4pOworCQln X2lvX2NoYW5uZWxfY2xvc2UoY2hhbik7CisJCWd3LT5zY28gPSBOVUxMOworCQlyZXR1cm4gRkFM U0U7CisJfQorICAgIAorCS8qIE1heSBiZSBoZXJlIHNvbWUgbW9yZSBkYXRhIGhhdmUgdG8gYmUg cmVhZC4gRGVwZW5kcyBvbiByZXN1bHQgcGVyZm9ybWFuY2UuIAorCSAgIEZvciBOb2tpYSBFNTEg dm9sdW1lIGlzIDQ4IGJ5dGVzIHBlciBjYWxsKi8KKwlpZiAoR19JT19FUlJPUl9OT05FID09IGdf aW9fY2hhbm5lbF9yZWFkKGNoYW4sIGJ1Ziwgc2l6ZW9mKGJ1ZikgLCAmcmVhZCkpIHsKKy8vICAg IGlmIChHX0lPX0VSUk9SX05PTkUgPT0gZ19pb19jaGFubmVsX3JlYWRfY2hhcnMoY2hhbiwgYnVm LCBzaXplb2YoYnVmKSAsICZyZWFkLCBOVUxMKSkgeworCQlnY2hhciogcF9idWYgPSBidWY7CisJ CWdfZGJ1c19lbWl0X3NpZ25hbChkZXYtPmNvbm4sIGRldi0+cGF0aCwgQVVESU9fR0FURVdBWV9J TlRFUkZBQ0UsICJBdWRpb0RhdGEiCisJCQkJICAgLCBEQlVTX1RZUEVfQVJSQVksIERCVVNfVFlQ RV9CWVRFLCAmcF9idWYsIHJlYWQsIERCVVNfVFlQRV9JTlZBTElEKTsKKwl9CisJcmV0dXJuIFRS VUU7Cit9CisKKworc3RhdGljIHZvaWQgc2NvX2Nvbm5lY3RfY2IoR0lPQ2hhbm5lbCAqY2hhbiwg aW50IGVyciwgY29uc3QgYmRhZGRyX3QgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGJkYWRkcl90ICpkc3QsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlzdHJ1Y3QgYXVk aW9fZGV2aWNlICpkZXYgPSAoc3RydWN0IGF1ZGlvX2RldmljZSopIHVzZXJfZGF0YTsKKwlzdHJ1 Y3QgZ2F0ZXdheSogZ3cgPSBkZXYtPmdhdGV3YXk7CisKKwlpZiAoMCA+IGVycikgeworCQllcnJv cigic2NvX2Nvbm5lY3RfY2IoKTogJXMgKCVkKSIsIHN0cmVycm9yKC1lcnIpLCAtZXJyKTsKKwkJ Lyogbm90IHN1cmUsIGJ1dCBmcm9tIG90aGVyIHBvaW50IG9mIHZpZXcsIAorCQkgICB3aGF0IGlz IHRoZSByZWFzb24gdG8gaGF2ZSBoZWFkc2V0IHdoaWNoIGNhbm5vdCBwbGF5IGF1ZGlvPyAqLwor CQlnYXRld2F5X2Nsb3NlKGd3KTsgCisJCXJldHVybjsKKwl9CisKKwlkZWJ1ZygiU0NPIHNvY2tl dCBvcGVuZWQgZm9yIGdhdGV3YXkgJXMiLCBkZXYtPnBhdGgpOworCWd3LT5zY28gPSBjaGFuOwor CWZjbnRsKGdfaW9fY2hhbm5lbF91bml4X2dldF9mZChjaGFuKSwgRl9TRVRGTCwgMCk7IC8qIHdo eSBpcyB0aGlzIGhlcmU/ICovCisJZ19pb19hZGRfd2F0Y2goZ3ctPnNjbywgR19JT19FUlIgfCBH X0lPX0hVUCB8IEdfSU9fTlZBTCB8IEdfSU9fSU4sCisJCSAgICAgICAoR0lPRnVuYykgc2NvX2lv X2NiLCBkZXYpOworfQorCisKK3N0YXRpYyB2b2lkIHJmY29tbV9jb25uZWN0X2NiKEdJT0NoYW5u ZWwgKmNoYW4sIGludCBlcnIsIGNvbnN0IGJkYWRkcl90ICpzcmMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBiZGFkZHJfdCAqZHN0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7 CisJc3RydWN0IGF1ZGlvX2RldmljZSogZGV2ID0gdXNlcl9kYXRhOworCXN0cnVjdCBnYXRld2F5 KiBndyA9IGRldi0+Z2F0ZXdheTsKKwlEQnVzTWVzc2FnZSogY29ubl9tZXMgPSBndy0+Y29ubmVj dF9tZXNzYWdlOworCWdjaGFyIGd3X2FkZHJbMThdOworICAgIAorCWlmIChlcnIgPCAwKSB7CisJ CWVycm9yKCJjb25uZWN0KCk6ICVzICglZCkiLCBzdHJlcnJvcigtZXJyKSwgLWVycik7CisJCXJl dHVybjsKKwl9CisgICAgCisJYmEyc3RyKCZkZXYtPmRzdCwgZ3dfYWRkcik7CisJLyogQmxvY2tp bmcgbW9kZSBzaG91bGQgYmUgZGVmYXVsdCwgYnV0IGp1c3QgaW4gY2FzZTogKi8KKwlHSU9GbGFn cyBmbGFncyA9IGdfaW9fY2hhbm5lbF9nZXRfZmxhZ3MoY2hhbik7IAorCWZsYWdzICY9IH5HX0lP X0ZMQUdfTk9OQkxPQ0s7IAorCWZsYWdzICY9IEdfSU9fRkxBR19NQVNLOworCWdfaW9fY2hhbm5l bF9zZXRfZmxhZ3MoY2hhbiwgZmxhZ3MsIE5VTEwpOyAKKwlnX2lvX2NoYW5uZWxfc2V0X2VuY29k aW5nKGNoYW4sIE5VTEwsIE5VTEwpOworCWdfaW9fY2hhbm5lbF9zZXRfYnVmZmVyZWQoY2hhbiwg RkFMU0UpOworCWd3LT5yZmNvbW0gPSBjaGFuOworCWlmIChlc3RhYmxpc2hfc2VydmljZV9sZXZl bF9jb25uKGRldi0+Z2F0ZXdheSkpeworCQlHSU9DaGFubmVsKiBzY29fc2VydmVyID0gYnRfc2Nv X2xpc3RlbigmZGV2LT5zcmMsIHNjb19jb25uZWN0X2NiLCBkZXYpOworCQlpZiAoTlVMTCAhPSBz Y29fc2VydmVyKSB7CisJCQlkZWJ1ZygiJXM6IENvbm5lY3RlZCB0byAlcyIsIGRldi0+cGF0aCwg Z3dfYWRkcik7CisJCQlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2KTsKKwkJCWd3LT5zY29fc2VydmVy ID0gc2NvX3NlcnZlcjsKKwkJCURCdXNNZXNzYWdlKiByZXBseSA9IGRidXNfbWVzc2FnZV9uZXdf bWV0aG9kX3JldHVybihjb25uX21lcyk7IAorCQkJZGJ1c19jb25uZWN0aW9uX3NlbmQoZGV2LT5j b25uLCByZXBseSwgTlVMTCk7CisJCQlkYnVzX21lc3NhZ2VfdW5yZWYocmVwbHkpOyAKKwkJCWRi dXNfbWVzc2FnZV91bnJlZihjb25uX21lcyk7IAorCQkJZ3ctPmNvbm5lY3RfbWVzc2FnZSA9IE5V TEw7IAorCisJCQlnX2RidXNfZW1pdF9zaWduYWwoZGV2LT5jb25uLCBkZXYtPnBhdGgsIEFVRElP X0dBVEVXQVlfSU5URVJGQUNFLCAiQ29ubmVjdGVkIgorCQkJCQkgICAsIERCVVNfVFlQRV9VSU5U MzIsICZndy0+YWdfZmVhdHVyZXMsIERCVVNfVFlQRV9JTlZBTElEKTsKKwkJCXJldHVybjsKKwkJ fSBlbHNlIHsKKwkJCWRlYnVnKCIlczogRmFpbGVkIHRvIHNldHVwIFNDTyBzZXJ2ZXIgc29ja2V0 IiwgZGV2LT5wYXRoKTsKKwkJfQorCX0gZWxzZSB7CisJCWRlYnVnKCIlczogRmFpbGVkIHRvIGVz dGFibGlzaCBzZXJ2aWNlIGxheWVyIGNvbm5lY3Rpb24gdG8gJXMiLCBkZXYtPnBhdGgsIGd3X2Fk ZHIpOworCX0KKwlnYXRld2F5X2Nsb3NlKGd3KTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3JlY29y ZF9jYihzZHBfbGlzdF90ICpyZWNzLCBpbnQgZXJyLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJ c3RydWN0IGF1ZGlvX2RldmljZSAqZGV2ID0gdXNlcl9kYXRhOworCURCdXNNZXNzYWdlKiBjb25u X21lcyA9IGRldi0+Z2F0ZXdheS0+Y29ubmVjdF9tZXNzYWdlOworCWludCBjaCA9IC0xOworCXNk cF9saXN0X3QgKnByb3RvcywgKmNsYXNzZXMgPSBOVUxMOworCXNkcF9yZWNvcmRfdCAqcmVjb3Jk ID0gTlVMTDsKKwl1dWlkX3QgdXVpZDsKKworCWlmIChlcnIgPCAwKSB7CisJCWVycm9yKCJVbmFi bGUgdG8gZ2V0IHNlcnZpY2UgcmVjb3JkOiAlcyAoJWQpIiwgc3RyZXJyb3IoLWVyciksIC1lcnIp OworCX0gZWxzZSBpZiAoTlVMTCA9PSByZWNzIHx8IE5VTEwgPT0gcmVjcy0+ZGF0YSkgeworCQll cnJvcigiTm8gcmVjb3JkcyBmb3VuZCIpOworCX0gZWxzZSBpZiAoc2RwX2dldF9zZXJ2aWNlX2Ns YXNzZXMocmVjcy0+ZGF0YSwgJmNsYXNzZXMpIDwgMCkgeworCQllcnJvcigiVW5hYmxlIHRvIGdl dCBzZXJ2aWNlIGNsYXNzZXMgZnJvbSByZWNvcmQiKTsKKwl9IGVsc2UgeworCQltZW1jcHkoJnV1 aWQsIGNsYXNzZXMtPmRhdGEsIHNpemVvZih1dWlkKSk7CisgICAgICAgICAgICAKKwkJaWYgKDAg PT0gc2RwX3V1aWQxMjhfdG9fdXVpZCgmdXVpZCkgfHwgdXVpZC50eXBlICE9IFNEUF9VVUlEMTYp IHsKKwkJCWVycm9yKCJOb3QgYSAxNiBiaXQgVVVJRCIpOworCQl9IGVsc2UgaWYgKHV1aWQudmFs dWUudXVpZDE2ICE9IEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRCkgeworCQkJZXJyb3IoIlNlcnZp Y2UgcmVjb3JkIGRpZG4ndCBjb250YWluIHRoZSBIRlAgVVVJRCIpOworCQl9IGVsc2UgaWYgKDAg PT0gc2RwX2dldF9hY2Nlc3NfcHJvdG9zKHJlY3MtPmRhdGEsICZwcm90b3MpKSB7CisJCQljaCA9 IHNkcF9nZXRfcHJvdG9fcG9ydChwcm90b3MsIFJGQ09NTV9VVUlEKTsKKwkJCXNkcF9saXN0X2Zv cmVhY2gocHJvdG9zLCAoc2RwX2xpc3RfZnVuY190KSBzZHBfbGlzdF9mcmVlLAorCQkJCQkgTlVM TCk7CisJCQlzZHBfbGlzdF9mcmVlKHByb3RvcywgTlVMTCk7CisJCQlpZiAoY2ggPT0gLTEpIHsK KwkJCQllcnJvcigiVW5hYmxlIHRvIGV4dHJhY3QgUkZDT01NIGNoYW5uZWwgZnJvbSBzZXJ2aWNl IHJlY29yZCIpOworCQkJfWVsc2UgeyAKKwkJCQlkZWJ1ZygiQ29ubmVjdGluZyBvbiBjaGFubmVs ICVkIiwgY2gpOworCQkJCWlmIChidF9yZmNvbW1fY29ubmVjdCgmZGV2LT5zcmMsICZkZXYtPmRz dCwgY2gsCisJCQkJCQkgICAgICByZmNvbW1fY29ubmVjdF9jYiwgZGV2KSA8IDApeworCQkJCQll cnJvcigiVW5hYmxlIHRvIGNvbm5lY3Q6ICVzICglcykiLCBzdHJlcnJvcigtZXJyKSwgLWVycik7 CisJCQkJCWVycm9yX2Nvbm5lY3Rpb25fYXR0ZW1wdF9mYWlsZWQoZGV2LT5jb25uLCBjb25uX21l cywgLWVycik7IAorCQkJCQlnYXRld2F5X2Nsb3NlKGRldi0+Z2F0ZXdheSk7CisJCQkJfSAKKwkJ CQlzZHBfbGlzdF9mcmVlKGNsYXNzZXMsIGZyZWUpOworCQkJCXNkcF9yZWNvcmRfZnJlZShyZWNz LT5kYXRhKTsKKwkJCQlyZXR1cm47IAorCQkJfSAgICAgICAgICAgICAgICAKKwkJfQorCX0KKwlz ZHBfbGlzdF9mcmVlKGNsYXNzZXMsIGZyZWUpOworCXNkcF9yZWNvcmRfZnJlZShyZWNzLT5kYXRh KTsKKwllcnJvcl9ub3Rfc3VwcG9ydGVkKGRldi0+Y29ubiwgY29ubl9tZXMpOworCWRidXNfbWVz c2FnZV91bnJlZihjb25uX21lcyk7CisJZGV2LT5nYXRld2F5LT5jb25uZWN0X21lc3NhZ2UgPSBO VUxMOyAKK30KKworc3RhdGljIGludCBnZXRfcmVjb3JkcyhzdHJ1Y3QgYXVkaW9fZGV2aWNlICpk ZXZpY2UpCit7CisJdXVpZF90IHV1aWQ7CisKKwlzZHBfdXVpZDE2X2NyZWF0ZSgmdXVpZCwgSEFO RFNGUkVFX0FHV19TVkNMQVNTX0lEKTsKKwlyZXR1cm4gYnRfc2VhcmNoX3NlcnZpY2UoJmRldmlj ZS0+c3JjLCAmZGV2aWNlLT5kc3QsICZ1dWlkLAorCQkJCSBnZXRfcmVjb3JkX2NiLCBkZXZpY2Us IE5VTEwpOworfQorCisKK3N0YXRpYyBEQnVzTWVzc2FnZSogYWdfY29ubmVjdChEQnVzQ29ubmVj dGlvbiogY29ubiwgREJ1c01lc3NhZ2UqIG1zZywgdm9pZCogZGF0YSkgCit7CisJc3RydWN0IGF1 ZGlvX2RldmljZSogYXVfZGV2ID0gKHN0cnVjdCBhdWRpb19kZXZpY2UqKSBkYXRhOworCXN0cnVj dCBnYXRld2F5KiBndyA9IGF1X2Rldi0+Z2F0ZXdheTsKKworCWlmIChOVUxMICE9IGd3LT5yZmNv bW0pIHsKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UK KwkJCQkJICAgIi5BbHJlYWR5Q29ubmVjdGVkIiwKKwkJCQkJICAgIkFscmVhZHkgQ29ubmVjdGVk Iik7CisJfSAKKyAgICAKKwlndy0+Y29ubmVjdF9tZXNzYWdlID0gZGJ1c19tZXNzYWdlX3JlZiht c2cpOyAKKwlpZiAoZ2V0X3JlY29yZHMoYXVfZGV2KSA8IDApeworCQlkYnVzX21lc3NhZ2VfdW5y ZWYoZ3ctPmNvbm5lY3RfbWVzc2FnZSk7CisJCXJldHVybiBnX2RidXNfY3JlYXRlX2Vycm9yKG1z ZywgRVJST1JfSU5URVJGQUNFCisJCQkJCSAgICIuQ29ubmVjdEF0dGVtcHRGYWlsZWQiLAorCQkJ CQkgICAiQ29ubmVjdCBBdHRlbXB0IEZhaWxlZCIpOworCX0KKwlkZWJ1ZygiISEhIENvbm5lY3Rp b24gZXN0YWJsaXNoZWQiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIERCdXNNZXNzYWdl KiBhZ19kaXNjb25uZWN0KERCdXNDb25uZWN0aW9uKiBjb25uLCBEQnVzTWVzc2FnZSogbXNnLCB2 b2lkKiBkYXRhKSAKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOworCXN0 cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlEQnVzTWVzc2FnZSogcmVwbHkg PSBOVUxMOworCWNoYXIgZ3dfYWRkclsxOF07CisKKwlyZXBseSA9IGRidXNfbWVzc2FnZV9uZXdf bWV0aG9kX3JldHVybihtc2cpOworCWlmICghcmVwbHkpCisJCXJldHVybiBOVUxMOworCisJaWYg KE5VTEwgPT0gZ3ctPnJmY29tbSkKKwkJcmV0dXJuIGdfZGJ1c19jcmVhdGVfZXJyb3IobXNnLCBF UlJPUl9JTlRFUkZBQ0UKKwkJCQkJICAgIi5Ob3RDb25uZWN0ZWQiLAorCQkJCQkgICAiRGV2aWNl IG5vdCBDb25uZWN0ZWQiKTsKKworCWdhdGV3YXlfY2xvc2UoZ3cpOworCWJhMnN0cigmZGV2aWNl LT5kc3QsIGd3X2FkZHIpOworCWRlYnVnKCJEaXNjb25uZWN0ZWQgZnJvbSAlcywgJXMiLCBnd19h ZGRyLCBkZXZpY2UtPnBhdGgpOworCisJcmV0dXJuIHJlcGx5OworCit9CisKK3N0YXRpYyBEQnVz TWVzc2FnZSogYWdfaXNfY29ubmVjdGVkKERCdXNDb25uZWN0aW9uKiBjb25uLCBEQnVzTWVzc2Fn ZSogbXNnLCB2b2lkKiBkYXRhKSAKK3sKKwlnYm9vbGVhbiByZXMgPSBnYXRld2F5X2lzX2Nvbm5l Y3RlZCgoc3RydWN0IGF1ZGlvX2RldmljZSopZGF0YSk7CisJREJ1c01lc3NhZ2UqIHJlcGx5ID0g ZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CisJaWYgKE5VTEwgIT0gcmVwbHkp IHsKKwkJZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBEQlVTX1RZUEVfQk9PTEVBTiwg JnJlcywKKwkJCQkJIERCVVNfVFlQRV9JTlZBTElEKTsKKwl9CisJcmV0dXJuIHJlcGx5OworfQor CitzdGF0aWMgREJ1c01lc3NhZ2UqIHByb2Nlc3NfYWdfcmVwb25zZShEQnVzTWVzc2FnZSogbXNn LCBnY2hhciogcmVzcG9uc2UpIAoreworCURCdXNNZXNzYWdlKiByZXBseTsKKwlpZiAoTlVMTCAh PSBzdHJzdHIocmVzcG9uc2UsIE9LX1JFU1BPTlNFKSkgeworCQlyZXBseSA9IGRidXNfbWVzc2Fn ZV9uZXdfbWV0aG9kX3JldHVybihtc2cpOworCX0gZWxzZSB7CisJCS8qIEZJWE1FOiBzb21lIGNv ZGUgc2hvdWxkIGJlIGhlcmUgdG8gcHJvY2Vzc2VzIGVycm9ycyBpbiBiZXR0ZXIgZmFzaW9uICov CisJCWRlYnVnKCJBRyByZXNwb25kZWQgd2l0aCAnJXMnIHRvICVzIG1ldGhvZCBjYWxsIiwgcmVz cG9uc2UsIGRidXNfbWVzc2FnZV9nZXRfbWVtYmVyKG1zZykpOworCQlyZXBseSA9IGRidXNfbWVz c2FnZV9uZXdfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UiLk9wZXJhdGlvbkZhaWxlZCIsICJP cGVyYXRpb24gZmFpbGVkLiBTZWUgbG9nIGZvciBkZXRhaWxzIik7CisJfQorCXJldHVybiByZXBs eTsKK30KKworc3RhdGljIERCdXNNZXNzYWdlKiBwcm9jZXNzX3NpbXBsZShEQnVzTWVzc2FnZSog bXNnLCBzdHJ1Y3QgYXVkaW9fZGV2aWNlKiBkZXYsIGdjaGFyKiBkYXRhKSAKK3sKKwlzdHJ1Y3Qg Z2F0ZXdheSAqZ3cgPSBkZXYtPmdhdGV3YXk7CisJZ2NoYXIgYnVmW1JGQ09NTV9CVUZfU0laRV07 CisKKwlyZmNvbW1fc3RvcF93YXRjaChkZXYpOworCXJmY29tbV9zZW5kX2FuZF9yZWFkKGd3LCBk YXRhLCBidWYsIHN0cmxlbihkYXRhKSk7CisJcmZjb21tX3N0YXJ0X3dhdGNoKGRldik7CisJcmV0 dXJuIHByb2Nlc3NfYWdfcmVwb25zZShtc2csIGJ1Zik7Cit9CisKKyNkZWZpbmUgQUdfQU5TV0VS ICJBVEFcciIKKworc3RhdGljIERCdXNNZXNzYWdlKiBhZ19hbnN3ZXIoREJ1c0Nvbm5lY3Rpb24q IGNvbm4sIERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCXJldHVybiBwcm9jZXNz X3NpbXBsZShtc2csIChzdHJ1Y3QgYXVkaW9fZGV2aWNlKikgZGF0YSwgQUdfQU5TV0VSKTsKK30K KworI2RlZmluZSBBR19DQU5DRUxfQ1VSICJBVCtDSFVQXHIiCisKK3N0YXRpYyBEQnVzTWVzc2Fn ZSogYWdfY2FuY2VsX2N1cihEQnVzQ29ubmVjdGlvbiogY29ubiwgREJ1c01lc3NhZ2UqIG1zZywg dm9pZCogZGF0YSkgCit7CisJcmV0dXJuIHByb2Nlc3Nfc2ltcGxlKG1zZywgKHN0cnVjdCBhdWRp b19kZXZpY2UqKSBkYXRhLCBBR19DQU5DRUxfQ1VSKTsKK30KKworI2RlZmluZSBBTExPV0VEX05V TUJFUl9TWU1CT0xTICIxMjM0NTY3ODkwKiMrQUJDIiAvKiBhY2NvcmRpbmcgdG8gR1NNIHNwZWMg Ki8KKyNkZWZpbmUgQUdfUExBQ0VfQ0FMTCAiQVREJXNcciIKKy8qIGRpYWxpbmcgZnJvbSBtZW1v cnkgaXMgbm90IHN1cHBvcnRlZCBhcyBoZWFkc2V0IHNwZWMgZG9lc24ndCBkZWZpbmUgYSB3YXkK KyAgIHRvIHJldHJlaXZlIHBob25lIG1lbW9yeSBlbnRyaWVzLgorKi8KK3N0YXRpYyBEQnVzTWVz c2FnZSogYWdfY2FsbChEQnVzQ29ubmVjdGlvbiogY29ubiwgREJ1c01lc3NhZ2UqIG1zZywgdm9p ZCogZGF0YSkgCit7CisJc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2aWNlID0gZGF0YTsKKwlzdHJ1 Y3QgZ2F0ZXdheSAqZ3cgPSBkZXZpY2UtPmdhdGV3YXk7CisJZ2NoYXIgYnVmW1JGQ09NTV9CVUZf U0laRV07CisJZ2NoYXIqIG51bWJlcjsKKwlnaW50IGF0ZF9sZW47CisgICAgCisJZGJ1c19tZXNz YWdlX2dldF9hcmdzKG1zZywgTlVMTCwgREJVU19UWVBFX1NUUklORywgJm51bWJlciwJREJVU19U WVBFX0lOVkFMSUQpOworCWlmIChzdHJsZW4obnVtYmVyKSAhPSBzdHJzcG4obnVtYmVyLCBBTExP V0VEX05VTUJFUl9TWU1CT0xTKSkgeworCQlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvciht c2csIEVSUk9SX0lOVEVSRkFDRSIuQmFkTnVtYmVyIgorCQkJCQkgICAgICAsICJOdW1iZXIgY29u dGFpbnMgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90IGFsbG93ZWQiKTsKKwl9CisJYXRkX2xlbiA9 IHNwcmludGYoYnVmLCBBR19QTEFDRV9DQUxMLCBudW1iZXIpOworCXJmY29tbV9zdG9wX3dhdGNo KGRldmljZSk7CisJcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIGJ1ZiwgYnVmLCBhdGRfbGVuKTsK KwlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2aWNlKTsKKwlyZXR1cm4gcHJvY2Vzc19hZ19yZXBvbnNl KG1zZywgYnVmKTsKK30KKworI2RlZmluZSBBR19HRVRfQ0FSUklFUiAiQVQrQ09QUz9cciIKKwor c3RhdGljIERCdXNNZXNzYWdlKiBhZ19nZXRfb3BlcmF0b3IoREJ1c0Nvbm5lY3Rpb24qIGNvbm4s IERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCXN0cnVjdCBhdWRpb19kZXZpY2Uq IGRldiA9IChzdHJ1Y3QgYXVkaW9fZGV2aWNlKikgZGF0YTsKKwlzdHJ1Y3QgZ2F0ZXdheSogZ3cg PSBkZXYtPmdhdGV3YXk7CisJZ2NoYXIgYnVmW1JGQ09NTV9CVUZfU0laRV07CisJR0lPQ2hhbm5l bCogcmZjb21tID0gZ3ctPnJmY29tbTsKKwlnc2l6ZSByZWFkOworCWdjaGFyKiByZXN1bHQ7CisJ REJ1c01lc3NhZ2UqIHJlcGx5OworCUdJT1N0YXR1cyBzdGF0dXM7CisKKwlyZmNvbW1fc3RvcF93 YXRjaChkZXYpOworCWlvX2NoYW5uZWxfd3JpdGVfYWxsKHJmY29tbSwgQUdfR0VUX0NBUlJJRVIs IHN0cmxlbihBR19HRVRfQ0FSUklFUikpOworICAgIAorCXN0YXR1cyA9IGdfaW9fY2hhbm5lbF9y ZWFkX2NoYXJzKHJmY29tbSwgYnVmLCBSRkNPTU1fQlVGX1NJWkUgLSAxLCAmcmVhZCwgTlVMTCk7 CisJcmZjb21tX3N0YXJ0X3dhdGNoKGRldik7CisJaWYgKEdfSU9fU1RBVFVTX05PUk1BTCA9PSBz dGF0dXMpIHsKKwkJYnVmW3JlYWRdID0gJ1wwJzsKKwkJaWYgKE5VTEwgIT0gc3Ryc3RyKGJ1Ziwg IitDT1BTIikpIHsKKwkJCXJlc3VsdCA9IHN0cnJjaHIoYnVmLCAnLCcpICsgMTsKKwkJCXJlcGx5 ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CisJCQlkYnVzX21lc3NhZ2Vf YXBwZW5kX2FyZ3MocmVwbHksIERCVVNfVFlQRV9TVFJJTkcsICZyZXN1bHQsIERCVVNfVFlQRV9J TlZBTElEKTsKKwkJfSBlbHNlIHsKKwkJCWRlYnVnKCJhZ19nZXRfb3BlcmF0b3IoKTogJytDT1BT JyBleHBlY3RlZCBidXQgJyVzJyByZWNlaXZlZCIsIGJ1Zik7CisJCQlyZXBseSA9IGRidXNfbWVz c2FnZV9uZXdfZXJyb3IobXNnLCBFUlJPUl9JTlRFUkZBQ0UiLkZhaWxlZCIsICJVbmV4cGVjdGVk IHJlc3BvbnNlIGZyb20gQUciKTsKKwkJfQorCX0gZWxzZSB7CisJCWRlYnVnKCJhZ19nZXRfb3Bl cmF0b3IoKTogJW0iKTsKKwkJcmVwbHkgPSBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywgRVJS T1JfSU5URVJGQUNFIi5Db25uZWN0aW9uRmFpbGVkIiwgIkZhaWxlZCB0byByZWNlaXZlIHJlc3Bv bnNlIGZyb20gQUciKTsKKwl9CisJcmV0dXJuIHJlcGx5OworfQorCisjZGVmaW5lIEFHX1ZSX0FD VElWQVRFICJBVCtCVlJBPTFcciIKK3N0YXRpYyBEQnVzTWVzc2FnZSogYWdfdnJfYWN0aXZhdGUo REJ1c0Nvbm5lY3Rpb24qIGNvbm4sIERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAorewor CXJldHVybiBwcm9jZXNzX3NpbXBsZShtc2csIChzdHJ1Y3QgYXVkaW9fZGV2aWNlKilkYXRhLCBB R19WUl9BQ1RJVkFURSk7Cit9CisKKyNkZWZpbmUgQUdfVlJfREVBQ1RJVkFURSAiQVQrQlZSQT0w XHIiCitzdGF0aWMgREJ1c01lc3NhZ2UqIGFnX3ZyX2RlYWN0aXZhdGUoREJ1c0Nvbm5lY3Rpb24q IGNvbm4sIERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCXJldHVybiBwcm9jZXNz X3NpbXBsZShtc2csIChzdHJ1Y3QgYXVkaW9fZGV2aWNlKilkYXRhLCBBR19WUl9ERUFDVElWQVRF KTsKK30KKworI2RlZmluZSBBR19SRVFVRVNUX05VTUJFUiAiQVQrQklOUD0xXHIiCitzdGF0aWMg REJ1c01lc3NhZ2UqIGFnX2dldF9udW1iZXJfZm9yX3ZvaWNlKERCdXNDb25uZWN0aW9uKiBjb25u LCBEQnVzTWVzc2FnZSogbXNnLCB2b2lkKiBkYXRhKSAKK3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNl ICpkZXZpY2UgPSBkYXRhOworCXN0cnVjdCBnYXRld2F5ICpndyA9IGRldmljZS0+Z2F0ZXdheTsK KwlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKKwlnY2hhciBudW1iZXJbQUdfQ0FMTEVSX05V TV9TSVpFXTsKKyAgICAKKwlyZmNvbW1fc3RvcF93YXRjaChkZXZpY2UpOworCXJmY29tbV9zZW5k X2FuZF9yZWFkKGd3LCBBR19SRVFVRVNUX05VTUJFUiwgYnVmLCBzdHJsZW4oQUdfUkVRVUVTVF9O VU1CRVIpKTsKKwlyZmNvbW1fc3RhcnRfd2F0Y2goZGV2aWNlKTsKKwlpZiAoMSA9PSBzc2NhbmYo YnVmLCAiXHJcbitCSU5QOiVzXHJcbiIsIG51bWJlcikpIHsKKwkJREJ1c01lc3NhZ2UqIHJlcGx5 ID0gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0dXJuKG1zZyk7CisJCWRidXNfbWVzc2FnZV9h cHBlbmRfYXJncyhyZXBseSwgREJVU19UWVBFX1NUUklORywgbnVtYmVyLCBEQlVTX1RZUEVfSU5W QUxJRCk7CisJCXJldHVybiByZXBseTsKKwl9IGVsc2UgeworCQlkZWJ1ZygiYWdfZ2V0X251bWJl cl9mb3Jfdm9pY2UoKTogQUcgcmV0dXJuZWQgJyVzJyBpbiBwbGFjZSBvZiBudW1iZXIiLCBidWYp OworCQlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRSIu RmFpbGVkIiwgIkFHIGRpZG4ndCByZXR1cm4gYSBudW1iZXIiKTsKKwl9Cit9CisKKyNkZWZpbmUg QUdfU0VORF9EVE1GICJBVCtWVFM6JWNcciIKK3N0YXRpYyBEQnVzTWVzc2FnZSogYWdfc2VuZF9k dG1mKERCdXNDb25uZWN0aW9uKiBjb25uLCBEQnVzTWVzc2FnZSogbXNnLCB2b2lkKiBkYXRhKSAK K3sKKwlzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UgPSBkYXRhOworCXN0cnVjdCBnYXRld2F5 ICpndyA9IGRldmljZS0+Z2F0ZXdheTsKKwlnY2hhciBidWZbUkZDT01NX0JVRl9TSVpFXTsKKwln Y2hhciogbnVtYmVyOworCWdpbnQgY29tX2xlbjsKKyAgICAKKwlkYnVzX21lc3NhZ2VfZ2V0X2Fy Z3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfU1RSSU5HLCAmbnVtYmVyLAlEQlVTX1RZUEVfSU5WQUxJ RCk7CisJaWYgKHN0cmxlbihudW1iZXIpICE9IHN0cnNwbihudW1iZXIsIEFMTE9XRURfTlVNQkVS X1NZTUJPTFMpKSB7CisJCXJldHVybiBkYnVzX21lc3NhZ2VfbmV3X2Vycm9yKG1zZywgRVJST1Jf SU5URVJGQUNFIi5CYWROdW1iZXIiCisJCQkJCSAgICAgICwgIk51bWJlciBjb250YWlucyBjaGFy YWN0ZXJzIHdoaWNoIGFyZSBub3QgYWxsb3dlZCIpOworCX0KKwlnYm9vbGVhbiBnb3Rfb2sgPSBU UlVFOworCWdpbnQgbnVtX2xlbiA9IHN0cmxlbihudW1iZXIpOworCWdpbnQgaSA9IDA7CisJcmZj b21tX3N0b3Bfd2F0Y2goZGV2aWNlKTsKKwl3aGlsZSAoaSA8IG51bV9sZW4gJiYgZ290X29rKSB7 CisJCWNvbV9sZW4gPSBzcHJpbnRmKGJ1ZiwgQUdfU0VORF9EVE1GLCBudW1iZXJbaV0pOworCQly ZmNvbW1fc2VuZF9hbmRfcmVhZChndywgYnVmLCBidWYsIGNvbV9sZW4pOworCQlnb3Rfb2sgPSBO VUxMICE9IHN0cnN0cihidWYsIE9LX1JFU1BPTlNFKTsKKwkJaSArPSAxOworCX0KKwlyZmNvbW1f c3RhcnRfd2F0Y2goZGV2aWNlKTsKKwlyZXR1cm4gcHJvY2Vzc19hZ19yZXBvbnNlKG1zZywgYnVm KTsKKyAgICAKK30KKworI2RlZmluZSBBR19TRVRfTUlDX0dBSU4gIkFUK1ZHTTolZFxyIgorc3Rh dGljIERCdXNNZXNzYWdlKiBhZ19zZW5kX21pY19nYWluKERCdXNDb25uZWN0aW9uKiBjb25uLCBE QnVzTWVzc2FnZSogbXNnLCB2b2lkKiBkYXRhKSAKK3sKKwlnaW50IHZhbHVlOworCWdjaGFyIGJ1 ZltSRkNPTU1fQlVGX1NJWkVdOworCWRidXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERC VVNfVFlQRV9JTlQzMiwgJnZhbHVlLCBEQlVTX1RZUEVfSU5WQUxJRCk7CisJc3ByaW50ZihidWYs IEFHX1NFVF9NSUNfR0FJTiwgdmFsdWUpOworCXJldHVybiBwcm9jZXNzX3NpbXBsZShtc2csIChz dHJ1Y3QgYXVkaW9fZGV2aWNlKilkYXRhLCBidWYpOworfQorCisKKyNkZWZpbmUgQUdfU0VUX1NQ RUFLRVJfR0FJTiAiQVQrVkdTOiVkXHIiCitzdGF0aWMgREJ1c01lc3NhZ2UqIGFnX3NlbmRfc3Bl YWtlcl9nYWluKERCdXNDb25uZWN0aW9uKiBjb25uLCBEQnVzTWVzc2FnZSogbXNnLCB2b2lkKiBk YXRhKSAKK3sKKwlnaW50IHZhbHVlOworCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJWkVdOworCWRi dXNfbWVzc2FnZV9nZXRfYXJncyhtc2csIE5VTEwsIERCVVNfVFlQRV9JTlQzMiwgJnZhbHVlLCBE QlVTX1RZUEVfSU5WQUxJRCk7CisJc3ByaW50ZihidWYsIEFHX1NFVF9TUEVBS0VSX0dBSU4sIHZh bHVlKTsKKwlyZXR1cm4gcHJvY2Vzc19zaW1wbGUobXNnLCAoc3RydWN0IGF1ZGlvX2RldmljZSop ZGF0YSwgYnVmKTsKK30KKworI2RlZmluZSBBR19HRVRfU1VCU0NSSUJFUl9OVU1TICJBVCtDTlVN XHIiCisjZGVmaW5lIENOVU1fTEVOIDUgLyogbGVuZ3RoIG9mICIrQ05VTSIgc3RyaW5nICovCisj ZGVmaW5lIE1BWF9OVU1CRVJfQ05UIDE2CitzdGF0aWMgREJ1c01lc3NhZ2UqIGFnX2dldF9zdWJz Y3JpYmVyX251bXMoREJ1c0Nvbm5lY3Rpb24qIGNvbm4sIERCdXNNZXNzYWdlKiBtc2csIHZvaWQq IGRhdGEpIAoreworCXN0cnVjdCBhdWRpb19kZXZpY2UgKmRldmljZSA9IGRhdGE7CisJc3RydWN0 IGdhdGV3YXkgKmd3ID0gZGV2aWNlLT5nYXRld2F5OworCWdjaGFyIGJ1ZltSRkNPTU1fQlVGX1NJ WkVdOworCWdjaGFyKiBjdXJfY251bTsKKwlnY2hhciBudW1iZXJzW01BWF9OVU1CRVJfQ05UXVtB R19DQUxMRVJfTlVNX1NJWkVdOworCWludCBudW1iZXJfY250ID0gMDsKKworCXJmY29tbV9zdG9w X3dhdGNoKGRldmljZSk7CisJcmZjb21tX3NlbmRfYW5kX3JlYWQoZ3csIEFHX0dFVF9TVUJTQ1JJ QkVSX05VTVMsIGJ1Ziwgc3RybGVuKEFHX0dFVF9TVUJTQ1JJQkVSX05VTVMpKTsKKwlyZmNvbW1f c3RhcnRfd2F0Y2goZGV2aWNlKTsKKwljdXJfY251bSA9IHN0cnN0cihidWYsICIrQ05VTSIpOwor CXdoaWxlIChOVUxMICE9IGN1cl9jbnVtICYmIG51bWJlcl9jbnQgPCBNQVhfTlVNQkVSX0NOVCkg eworCQlzc2NhbmYoY3VyX2NudW0sICIrQ05VTTolcywiLCBudW1iZXJzW251bWJlcl9jbnRdKTsK KwkJbnVtYmVyX2NudCArPSAxOworCQljdXJfY251bSA9IHN0cnN0cihjdXJfY251bSArIENOVU1f TEVOLCAiK0NOVU0iKTsKKwl9CisJREJ1c01lc3NhZ2UqIHJlcGx5ID0gZGJ1c19tZXNzYWdlX25l d19tZXRob2RfcmV0dXJuKG1zZyk7CisJZGJ1c19tZXNzYWdlX2FwcGVuZF9hcmdzKHJlcGx5LCBE QlVTX1RZUEVfQVJSQVksIERCVVNfVFlQRV9TVFJJTkcsICZudW1iZXJzLCBudW1iZXJfY250LCBE QlVTX1RZUEVfSU5WQUxJRCk7CisJcmV0dXJuIHJlcGx5OworfQorCitzdGF0aWMgREJ1c01lc3Nh Z2UqIGFnX3NlbmRfYXVkaW9fZGF0YShEQnVzQ29ubmVjdGlvbiogY29ubiwgREJ1c01lc3NhZ2Uq IG1zZywgdm9pZCogZGF0YSkgCit7CisJZ2NoYXIqIGF1ZGlvX2RhdGE7CisJZ2ludCBkYXRhX2J5 dGVfY250OworCXN0cnVjdCBhdWRpb19kZXZpY2UqIGRldiA9IChzdHJ1Y3QgYXVkaW9fZGV2aWNl KikgZGF0YTsKKwlzdHJ1Y3QgZ2F0ZXdheSogZ3cgPSBkZXYtPmdhdGV3YXk7CisKKwlkYnVzX21l c3NhZ2VfZ2V0X2FyZ3MobXNnLCBOVUxMLCBEQlVTX1RZUEVfQVJSQVksIERCVVNfVFlQRV9CWVRF CisJCQkgICAgICAsICZhdWRpb19kYXRhLCAmZGF0YV9ieXRlX2NudCwgREJVU19UWVBFX0lOVkFM SUQpOworICAgIAorCWlmIChpb19jaGFubmVsX3dyaXRlX2FsbChndy0+c2NvLCBhdWRpb19kYXRh LCBkYXRhX2J5dGVfY250KSkgeworCQlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19tZXRob2RfcmV0 dXJuKG1zZyk7CisJfSBlbHNlIHsKKwkJZGVidWcoImFnX3NlbmRfYXVkaW9fZGF0YSgpOiAlbSIp OworCQlyZXR1cm4gZGJ1c19tZXNzYWdlX25ld19lcnJvcihtc2csIEVSUk9SX0lOVEVSRkFDRSIu V3JpdGVGYWlsZWQiLCAiU0NPIGRhdGEgc2VuZCBmYWlsZWQiKTsKKwl9Cit9CisKK3N0YXRpYyBE QnVzTWVzc2FnZSogYWdfaG9sZF9hbGxfYnV0X3RoaXMoREJ1c0Nvbm5lY3Rpb24qIGNvbm4sIERC dXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCit9CisKK3N0YXRpYyBEQnVzTWVzc2Fn ZSogYWdfY2FuY2VsX2FsbChEQnVzQ29ubmVjdGlvbiogY29ubiwgREJ1c01lc3NhZ2UqIG1zZywg dm9pZCogZGF0YSkgCit7CisKK30KKworc3RhdGljIERCdXNNZXNzYWdlKiBhZ19jYW5jZWxfc3Bl YyhEQnVzQ29ubmVjdGlvbiogY29ubiwgREJ1c01lc3NhZ2UqIG1zZywgdm9pZCogZGF0YSkgCit7 CisKK30KKworc3RhdGljIERCdXNNZXNzYWdlKiBhZ19yYWhfcHV0X29uX2hvbGQoREJ1c0Nvbm5l Y3Rpb24qIGNvbm4sIERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCit9CisKK3N0 YXRpYyBEQnVzTWVzc2FnZSogYWdfcmFoX2Fuc3dlcl9oZWxkX2NhbGwoREJ1c0Nvbm5lY3Rpb24q IGNvbm4sIERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCit9CisKK3N0YXRpYyBE QnVzTWVzc2FnZSogYWdfcmFoX2NhbmNlbF9oZWxkX2NhbGwoREJ1c0Nvbm5lY3Rpb24qIGNvbm4s IERCdXNNZXNzYWdlKiBtc2csIHZvaWQqIGRhdGEpIAoreworCit9CisKK3N0YXRpYyBHREJ1c01l dGhvZFRhYmxlIGdhdGV3YXlfbWV0aG9kc1tdID0geworCXsiQ29ubmVjdCIsICIiLCAiIiwgYWdf Y29ubmVjdCwgR19EQlVTX01FVEhPRF9GTEFHX0FTWU5DfQorCSwgeyJEaXNjb25uZWN0IiwgIiIs ICIiLCBhZ19kaXNjb25uZWN0fQorCSwgeyJJc0Nvbm5lY3RlZCIsICIiLCAiYiIsIGFnX2lzX2Nv bm5lY3RlZH0KKwksIHsiQW5zd2VyQ2FsbCIsICIiLCAiIiwgYWdfYW5zd2VyfQorCSwgeyJDYW5j ZWxDdXJyZW50Q2FsbCIsICIiLCAiIiwgYWdfY2FuY2VsX2N1cn0KKwksIHsiQ2FsbCIsICJzIiwg IiIsIGFnX2NhbGx9CisJLCB7IkdldE9wZXJhdG9yTmFtZSIsICIiLCAicyIsIGFnX2dldF9vcGVy YXRvcn0KKwksIHsiVm9pY2VSZWNvZ25pdGlvbkFjdHZhdGUiLCAiIiwgIiIsIGFnX3ZyX2FjdGl2 YXRlfQorCSwgeyJWb2ljZVJlY29nbml0aW9uRGVhY3R2YXRlIiwgIiIsICIiLCBhZ192cl9kZWFj dGl2YXRlfQorCSwgeyJHZXROdW1iZXJGb3JMYXN0Vm9pY2VUYWciLCAiIiwgInMiLCBhZ19nZXRf bnVtYmVyX2Zvcl92b2ljZX0KKwksIHsiU2VuZERUTUYiLCAicyIsICIiLCBhZ19zZW5kX2R0bWZ9 CisJLCB7IlNlbmRNaWNyb3Bob25lR2FpbiIsICJ5IiwgIiIsIGFnX3NlbmRfbWljX2dhaW59CisJ LCB7IlNlbmRTcGVha2VyR2FpbiIsICJ5IiwgIiIsIGFnX3NlbmRfc3BlYWtlcl9nYWlufQorCSwg eyJHZXRTdWJzY3JpYmVyTnVtYmVycyIsICIiLCAiYXMiLCBhZ19nZXRfc3Vic2NyaWJlcl9udW1z fQorCisJLCB7IlJBSFB1dE9uSG9sZCIsICIiLCAiIiwgYWdfcmFoX3B1dF9vbl9ob2xkfQorCSwg eyJSQUhBbnN3ZXJIZWxkQ2FsbCIsICIiLCAiIiwgYWdfcmFoX2Fuc3dlcl9oZWxkX2NhbGx9CisJ LCB7IlJBSENhbmNlbEhlbGRDYWxsIiwgIiIsICIiLCBhZ19yYWhfY2FuY2VsX2hlbGRfY2FsbH0K KworCSwgeyJDYW5jZWxDYWxsRnJvbU51bWJlciIsICJzIiwgIiIsIGFnX2NhbmNlbF9zcGVjfQor CSwgeyJDYW5jZWxBbGxDYWxscyIsICIiLCAiIiwgYWdfY2FuY2VsX2FsbH0KKwksIHsiSG9sZEFs bEJ1dFRoaXMiLCAicyIsICIiLCBhZ19ob2xkX2FsbF9idXRfdGhpc30KKworCSwgeyJTZW5kQXVk aW9EYXRhIiwgImF5IiwgIiIsIGFnX3NlbmRfYXVkaW9fZGF0YX0KKwksIHtOVUxMLCBOVUxMLCBO VUxMLCBOVUxMIH0KK307CisKK3N0YXRpYyBHREJ1c1NpZ25hbFRhYmxlIGdhdGV3YXlfc2lnbmFs c1tdID0geworCXsiQ29ubmVjdGVkIiwgInUifQorCSwgeyJEaXNjb25uZWN0ZWQiLCAiIn0KKwks IHsiUmluZyIsICJzIn0KKwksIHsiU3RhdHVzVXBkYXRlIiwgInNpIn0KKwksIHsiQ2FsbENhbmNl bGxlZCIsICIifQorCSwgeyJDYWxsU3RhcnQiLCAiIn0KKwksIHsiQ2FsbEVuZCIsICIifQorCSwg eyJWb2ljZVJlY29nbml0aW9uQWN0aXZlIiwgIiJ9CisJLCB7IlZvaWNlUmVjb2duaXRpb25JbmFj dGl2ZSIsICIifQorCSwgeyJNaWNyb3Bob25lR2FpbiIsICJ5In0KKwksIHsiU3BlYWtlckdhaW4i LCAieSJ9CisJLCB7IlJBSENhbGxPbkhvbGQiLCAiIn0KKwksIHsiTm9DYWxsc0hlbGQiLCAiIn0K KwksIHsiSG9sZENhbGxzIiwgIiJ9CisJLCB7IkFsbENhbGxzSGVsZCIsICIifQorCSwgeyJBdWRp b0RhdGEiLCAiYXkifQorCSwge05VTEwsIE5VTEwgfQorfTsKKworZ2Jvb2xlYW4gZ2F0ZXdheV9p c19jb25uZWN0ZWQoc3RydWN0IGF1ZGlvX2RldmljZSogZGV2KQoreworCXJldHVybiAoTlVMTCA9 PSBkZXYpIHx8IChOVUxMID09IGRldi0+Z2F0ZXdheSkgfHwgKE5VTEwgPT0gZGV2LT5nYXRld2F5 LT5yZmNvbW0pOyAgIAorfQorCitzdHJ1Y3QgZ2F0ZXdheSogZ2F0ZXdheV9pbml0KHN0cnVjdCBh dWRpb19kZXZpY2UqIGRldikKK3sKKwlkZWJ1ZygiISEhIEluaXRpYWxpemluZyBnYXRld2F5Iik7 CisJaWYgKCFnX2RidXNfcmVnaXN0ZXJfaW50ZXJmYWNlKGRldi0+Y29ubiwgZGV2LT5wYXRoLAor CQkJCSAgICAgICBBVURJT19HQVRFV0FZX0lOVEVSRkFDRSwKKwkJCQkgICAgICAgZ2F0ZXdheV9t ZXRob2RzLCBnYXRld2F5X3NpZ25hbHMsIE5VTEwsCisJCQkJICAgICAgIGRldiwgTlVMTCkpIHsK KwkJcmV0dXJuIE5VTEw7CisJfQorCXN0cnVjdCBnYXRld2F5KiBndyA9IGdfbmV3MChzdHJ1Y3Qg Z2F0ZXdheSwgMSk7CisJZ3ctPmluZGllcyA9IE5VTEw7CisJZ3ctPmlzX2RpYWxpbmcgPSBGQUxT RTsKKwlkZWJ1ZygiISEhIEdXIGluaXQgc3VjY2VzcyIpOworCXJldHVybiBndzsKK30KKworCitp bnQgZ2F0ZXdheV9jb25uZWN0X3JmY29tbShzdHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXYsIEdJT0No YW5uZWwgKmlvKQoreworCWlmICghaW8pCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5nYXRl d2F5LT5yZmNvbW0gPSBpbzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbmRpY2F0 b3Jfc2xpY2VfZnJlZShncG9pbnRlciBtZW0pIAoreworCWdfc2xpY2VfZnJlZShzdHJ1Y3QgaW5k aWNhdG9yLCBtZW0pOworfQorCitpbnQgZ2F0ZXdheV9jbG9zZShzdHJ1Y3QgZ2F0ZXdheSogZ3cp Cit7CisJR0lPQ2hhbm5lbCAqcmZjb21tID0gZ3ctPnJmY29tbTsKKwlHSU9DaGFubmVsICpzY28g PSBndy0+c2NvOworCUdJT0NoYW5uZWwgKnNjb19zZXJ2ZXIgPSBndy0+c2NvX3NlcnZlcjsKKwln X3NsaXN0X2ZvcmVhY2goZ3ctPmluZGllcywgKEdGdW5jKWluZGljYXRvcl9zbGljZV9mcmVlLCBO VUxMKTsKKwlnX3NsaXN0X2ZyZWUoZ3ctPmluZGllcyk7CisJaWYgKHJmY29tbSkgeworCQlnX2lv X2NoYW5uZWxfY2xvc2UocmZjb21tKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKHJmY29tbSk7CisJ CWd3LT5yZmNvbW0gPSBOVUxMOworCX0KKyAgCisJaWYgKHNjbykgeworCQlnX2lvX2NoYW5uZWxf Y2xvc2Uoc2NvKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKHNjbyk7CisJCWd3LT5zY28gPSBOVUxM OworCX0KKworCWlmIChzY29fc2VydmVyKSB7CisJCWdfaW9fY2hhbm5lbF9jbG9zZShzY29fc2Vy dmVyKTsKKwkJZ19pb19jaGFubmVsX3VucmVmKHNjb19zZXJ2ZXIpOworCQlndy0+c2NvX3NlcnZl ciA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCkluZGV4OiBhdWRpby9nYXRld2F5LmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmx1ZXovdXRpbHMvYXVkaW8vZ2F0ZXdheS5oLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdyAtdSAtcjEuOSBnYXRld2F5LmgKLS0tIGF1 ZGlvL2dhdGV3YXkuaAkyMSBBcHIgMjAwOCAxMjo0OToxNiAtMDAwMAkxLjkKKysrIGF1ZGlvL2dh dGV3YXkuaAkxNSBEZWMgMjAwOCAyMzowNDo0NiAtMDAwMApAQCAtMjEsMTQgKzIxLDE5IEBACiAg KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BICAwMjExMC0xMzAxICBVU0EKICAqCiAgKi8KKyNpZm5kZWYgX19HQVRFV0FZX0hfXworI2Rl ZmluZSBfX0dBVEVXQVlfSF9fCiAKKyNpbmNsdWRlICJkZXZpY2UuaCIKICNkZWZpbmUgQVVESU9f R0FURVdBWV9JTlRFUkZBQ0UgIm9yZy5ibHVlei5hdWRpby5HYXRld2F5IgogCiAjZGVmaW5lIERF RkFVTFRfSFNQX0hTX0NIQU5ORUwgNgogI2RlZmluZSBERUZBVUxUX0hGUF9IU19DSEFOTkVMIDcK IAotaW50IGdhdGV3YXlfaW5pdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgZ2Jvb2xlYW4gZGlzYWJs ZV9oZnAsIGdib29sZWFuIHNjb19oY2kpOworc3RydWN0IGdhdGV3YXkqIGdhdGV3YXlfaW5pdChz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2UpOwogCi12b2lkIGdhdGV3YXlfZXhpdCh2b2lkKTsK K2dib29sZWFuIGdhdGV3YXlfaXNfY29ubmVjdGVkKHN0cnVjdCBhdWRpb19kZXZpY2UqIGRldik7 CiAKLWdib29sZWFuIGdhdGV3YXlfaXNfZW5hYmxlZCh1aW50MTZfdCBzdmMpOworaW50IGdhdGV3 YXlfY29ubmVjdF9yZmNvbW0oc3RydWN0IGF1ZGlvX2RldmljZSAqZGV2LCBHSU9DaGFubmVsICpj aGFuKTsKKworI2VuZGlmIC8qX19HQVRFV0FZX0hfXyovCkluZGV4OiBhdWRpby9tYW5hZ2VyLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvYmx1ZXovdXRpbHMvYXVkaW8vbWFuYWdlci5j LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExNQpkaWZmIC13IC11IC1yMS4xMTUgbWFuYWdlci5j Ci0tLSBhdWRpby9tYW5hZ2VyLmMJMTcgSnVuIDIwMDggMTk6Mzc6MzYgLTAwMDAJMS4xMTUKKysr IGF1ZGlvL21hbmFnZXIuYwkxNSBEZWMgMjAwOCAyMzowNDo1MiAtMDAwMApAQCAtMTA1LDEyICsx MDUsMTIgQEAKIHN0YXRpYyB1aW50MzJfdCBoc3BfYWdfcmVjb3JkX2lkID0gMDsKIHN0YXRpYyB1 aW50MzJfdCBoZnBfYWdfcmVjb3JkX2lkID0gMDsKIAotc3RhdGljIHVpbnQzMl90IGhzcF9oc19y ZWNvcmRfaWQgPSAwOworc3RhdGljIHVpbnQzMl90IGhmcF9oc19yZWNvcmRfaWQgPSAwOwogCiBz dGF0aWMgR0lPQ2hhbm5lbCAqaHNwX2FnX3NlcnZlciA9IE5VTEw7CiBzdGF0aWMgR0lPQ2hhbm5l bCAqaGZwX2FnX3NlcnZlciA9IE5VTEw7CiAKLXN0YXRpYyBHSU9DaGFubmVsICpoc3BfaHNfc2Vy dmVyID0gTlVMTDsKK3N0YXRpYyBHSU9DaGFubmVsICpoZnBfaHNfc2VydmVyID0gTlVMTDsKIAog c3RhdGljIHN0cnVjdCBlbmFibGVkX2ludGVyZmFjZXMgZW5hYmxlZCA9IHsKIAkuaGVhZHNldAk9 IFRSVUUsCkBAIC0yMzEsMTMgKzIzMSwxMyBAQAogCQlyZXQgPSAoaHNwX2FnX3NlcnZlciAhPSBO VUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBIRUFEU0VUX0FHV19TVkNMQVNTX0lEOgotCQlyZXQgPSAo aHNwX2hzX3NlcnZlciAhPSBOVUxMKTsKKwkJcmV0ID0gRkFMU0U7CiAJCWJyZWFrOwogCWNhc2Ug SEFORFNGUkVFX1NWQ0xBU1NfSUQ6CiAJCXJldCA9IChoZnBfYWdfc2VydmVyICE9IE5VTEwpOwog CQlicmVhazsKIAljYXNlIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRDoKLQkJcmV0ID0gRkFMU0U7 CisJCXJldCA9IChoZnBfaHNfc2VydmVyICE9IE5VTEwpOwogCQlicmVhazsKIAljYXNlIEFVRElP X1NJTktfU1ZDTEFTU19JRDoKIAkJcmV0dXJuIGVuYWJsZWQuc2luazsKQEAgLTI4NCw2ICsyODQs OSBAQAogCQlicmVhazsKIAljYXNlIEhBTkRTRlJFRV9BR1dfU1ZDTEFTU19JRDoKIAkJZGVidWco IkZvdW5kIEhhbmRzZnJlZSBBRyByZWNvcmQiKTsKKwkJaWYgKGRldmljZS0+Z2F0ZXdheSA9PSBO VUxMKSB7CisJCQlkZXZpY2UtPmdhdGV3YXkgPSBnYXRld2F5X2luaXQoZGV2aWNlKTsKKwkJfQog CQlicmVhazsKIAljYXNlIEFVRElPX1NJTktfU1ZDTEFTU19JRDoKIAkJZGVidWcoIkZvdW5kIEF1 ZGlvIFNpbmsiKTsKQEAgLTUwMCw2ICs1MDMsMTUgQEAKIAkJCXJldHVybiBOVUxMOwogCiAJCWhl YWRzZXQgPSBUUlVFOworCX0gZWxzZSBpZiAoIXN0cmNtcCh1dWlkLCBIRlBfSFNfVVVJRCkpIHsK KwkJaWYgKGRldmljZS0+Z2F0ZXdheSkgeworCQkJcmV0dXJuIGRldmljZTsKKwkJfQorCisJCWRl dmljZS0+Z2F0ZXdheSA9IGdhdGV3YXlfaW5pdChkZXZpY2UpOworCQlpZiAoTlVMTCA9PSBkZXZp Y2UtPmdhdGV3YXkpIHsKKwkJCXJldHVybiBOVUxMOworCQl9CiAJfSBlbHNlIGlmICghc3RyY21w KHV1aWQsIEEyRFBfU09VUkNFX1VVSUQpKSB7CiAJCWlmIChkZXZpY2UtPnNpbmspCiAJCQlyZXR1 cm4gZGV2aWNlOwpAQCAtNTE2LDkgKzUyOCw5IEBACiAKIAkJaWYgKCFkZXZpY2UtPmNvbnRyb2wp CiAJCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyZXR1cm4gTlVMTDsKLQor CX0KIAlwYXRoID0gZGV2aWNlLT5wYXRoOwogCiAJaWYgKGNyZWF0ZWQpIHsKQEAgLTg4Niw2ICs4 OTgsOCBAQAogCiAJaWYgKGVuYWJsZWQuaGVhZHNldCAmJiBzdHJzdHIodmFsdWUsICJoZWFkc2V0 IikpCiAJCWRldmljZS0+aGVhZHNldCA9IGhlYWRzZXRfaW5pdChkZXZpY2UsIE5VTEwsIDApOwor CWlmIChlbmFibGVkLmdhdGV3YXkgJiYgc3Ryc3RyKHZhbHVlLCAiZ2F0ZXdheSIpKQorCQlkZXZp Y2UtPmdhdGV3YXkgPSBnYXRld2F5X2luaXQoZGV2aWNlKTsKIAlpZiAoZW5hYmxlZC5zaW5rICYm IHN0cnN0cih2YWx1ZSwgInNpbmsiKSkKIAkJZGV2aWNlLT5zaW5rID0gc2lua19pbml0KGRldmlj ZSk7CiAJaWYgKGVuYWJsZWQuY29udHJvbCAmJiBzdHJzdHIodmFsdWUsICJjb250cm9sIikpCkBA IC0xMDI5LDcgKzEwNDMsNyBAQAogCXJldHVybiByZWNvcmQ7CiB9CiAKLXN0YXRpYyBzZHBfcmVj b3JkX3QgKmhzcF9oc19yZWNvcmQodWludDhfdCBjaCkKK3N0YXRpYyBzZHBfcmVjb3JkX3QgKmhm cF9oc19yZWNvcmQodWludDhfdCBjaCkKIHsKIAlzZHBfbGlzdF90ICpzdmNsYXNzX2lkLCAqcGZz ZXEsICphcHNlcSwgKnJvb3Q7CiAJdXVpZF90IHJvb3RfdXVpZCwgc3ZjbGFzc191dWlkLCBnYV9z dmNsYXNzX3V1aWQ7CkBAIC0xMDQ3LDEzICsxMDYxLDEzIEBACiAJcm9vdCA9IHNkcF9saXN0X2Fw cGVuZCgwLCAmcm9vdF91dWlkKTsKIAlzZHBfc2V0X2Jyb3dzZV9ncm91cHMocmVjb3JkLCByb290 KTsKIAotCXNkcF91dWlkMTZfY3JlYXRlKCZzdmNsYXNzX3V1aWQsIEhFQURTRVRfU1ZDTEFTU19J RCk7CisJc2RwX3V1aWQxNl9jcmVhdGUoJnN2Y2xhc3NfdXVpZCwgSEFORFNGUkVFX1NWQ0xBU1Nf SUQpOwogCXN2Y2xhc3NfaWQgPSBzZHBfbGlzdF9hcHBlbmQoMCwgJnN2Y2xhc3NfdXVpZCk7CiAJ c2RwX3V1aWQxNl9jcmVhdGUoJmdhX3N2Y2xhc3NfdXVpZCwgR0VORVJJQ19BVURJT19TVkNMQVNT X0lEKTsKIAlzdmNsYXNzX2lkID0gc2RwX2xpc3RfYXBwZW5kKHN2Y2xhc3NfaWQsICZnYV9zdmNs YXNzX3V1aWQpOwogCXNkcF9zZXRfc2VydmljZV9jbGFzc2VzKHJlY29yZCwgc3ZjbGFzc19pZCk7 CiAKLQlzZHBfdXVpZDE2X2NyZWF0ZSgmcHJvZmlsZS51dWlkLCBIRUFEU0VUX1BST0ZJTEVfSUQp OworCXNkcF91dWlkMTZfY3JlYXRlKCZwcm9maWxlLnV1aWQsIEhBTkRTRlJFRV9TVkNMQVNTX0lE KTsKIAlwcm9maWxlLnZlcnNpb24gPSAweDAxMDA7CiAJcGZzZXEgPSBzZHBfbGlzdF9hcHBlbmQo MCwgJnByb2ZpbGUpOwogCXNkcF9zZXRfcHJvZmlsZV9kZXNjcyhyZWNvcmQsIHBmc2VxKTsKQEAg LTExNTAsNyArMTE2NCw3IEBACiAJcmV0dXJuIHJlY29yZDsKIH0KIAotc3RhdGljIHZvaWQgYXV0 aF9jYihEQnVzRXJyb3IgKmRlcnIsIHZvaWQgKnVzZXJfZGF0YSkKK3N0YXRpYyB2b2lkIGhlYWRz ZXRfYXV0aF9jYihEQnVzRXJyb3IgKmRlcnIsIHZvaWQgKnVzZXJfZGF0YSkKIHsKIAlzdHJ1Y3Qg YXVkaW9fZGV2aWNlICpkZXZpY2UgPSB1c2VyX2RhdGE7CiAJY29uc3QgY2hhciAqdXVpZDsKQEAg LTEyMTcsNyArMTIzMSw3IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQllcnIgPSBzZXJ2aWNlX3Jl cV9hdXRoKCZkZXZpY2UtPnNyYywgJmRldmljZS0+ZHN0LCB1dWlkLCBhdXRoX2NiLAorCWVyciA9 IHNlcnZpY2VfcmVxX2F1dGgoJmRldmljZS0+c3JjLCAmZGV2aWNlLT5kc3QsIHV1aWQsIGhlYWRz ZXRfYXV0aF9jYiwKIAkJCQlkZXZpY2UpOwogCWlmIChlcnIgPCAwKSB7CiAJCWRlYnVnKCJBdXRo b3JpemF0aW9uIGRlbmllZDogJXMiLCBzdHJlcnJvcigtZXJyKSk7CkBAIC0xMjM1LDEwICsxMjQ5 LDU3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBoc19pb19jYihHSU9DaGFubmVsICpj aGFuLCBpbnQgZXJyLCBjb25zdCBiZGFkZHJfdCAqc3JjLAorc3RhdGljIHZvaWQgZ2F0ZXdheV9h dXRoX2NiKERCdXNFcnJvciAqZGVyciwgdm9pZCAqdXNlcl9kYXRhKQoreworCXN0cnVjdCBhdWRp b19kZXZpY2UgKmRldmljZSA9IHVzZXJfZGF0YTsKKworCWlmIChkZXJyICYmIGRidXNfZXJyb3Jf aXNfc2V0KGRlcnIpKSB7CisJCWVycm9yKCJBY2Nlc3MgZGVuaWVkOiAlcyIsIGRlcnItPm1lc3Nh Z2UpOworCQlpZiAoZGJ1c19lcnJvcl9oYXNfbmFtZShkZXJyLCBEQlVTX0VSUk9SX05PX1JFUExZ KSkgeworCQkJZGVidWcoIkNhbmNlbGluZyBhdXRob3JpemF0aW9uIHJlcXVlc3QiKTsKKwkJCXNl cnZpY2VfY2FuY2VsX2F1dGgoJmRldmljZS0+c3JjLCAmZGV2aWNlLT5kc3QpOworCQl9CisJfSBl bHNlIHsKKwkJY2hhciBoc19hZGRyZXNzWzE4XTsKKworCQloZWFkc2V0X3NldF9hdXRob3JpemVk KGRldmljZSk7CisKKwkJYmEyc3RyKCZkZXZpY2UtPmRzdCwgaHNfYWRkcmVzcyk7CisKKwkJZGVi dWcoIkFjY2VwdGVkIGhlYWRzZXQgY29ubmVjdGlvbiBmcm9tICVzIGZvciAlcyIsIGhzX2FkZHJl c3MsIGRldmljZS0+cGF0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoZl9pb19jYihHSU9DaGFu bmVsICpjaGFuLCBpbnQgZXJyLCBjb25zdCBiZGFkZHJfdCAqc3JjLAogCQljb25zdCBiZGFkZHJf dCAqZHN0LCB2b2lkICpkYXRhKQogewotCS8qU3R1YiovCisJY29uc3QgY2hhciAqdXVpZDsKKwlz dHJ1Y3QgYXVkaW9fZGV2aWNlICpkZXZpY2U7CisJZ2Jvb2xlYW4gaGZwX2FjdGl2ZTsKKworCWlm IChlcnIgPCAwKSB7CisJCWVycm9yKCJhY2NlcHQ6ICVzICglZCkiLCBzdHJlcnJvcigtZXJyKSwg LWVycik7CisJCXJldHVybjsKKwl9CisKKwl1dWlkID0gSEZQX0hTX1VVSUQ7CisKKwlkZXZpY2Ug PSBtYW5hZ2VyX2RldmljZV9jb25uZWN0ZWQoZHN0LCB1dWlkKTsKKwlpZiAoIWRldmljZSkgewor CQlkZWJ1ZygiRGV2aWNlIGNyZWF0aW9uIGZhaWxlZCIpOworCX0gZWxzZSBpZiAoZ2F0ZXdheV9p c19jb25uZWN0ZWQoZGV2aWNlKSkgeworCQlkZWJ1ZygiUmVmdXNpbmcgbmV3IGNvbm5lY3Rpb24g c2luY2Ugb25lIGFscmVhZHkgZXhpc3RzIik7CisJfSBlbHNlIGlmIChzZXJ2aWNlX3JlcV9hdXRo KCZkZXZpY2UtPnNyYywgCisJCQkJICAgICZkZXZpY2UtPmRzdCwgdXVpZCwgZ2F0ZXdheV9hdXRo X2NiLCBkZXZpY2UpIDwgMCkgeworCQlkZWJ1ZygiQXV0aG9yaXphdGlvbiBkZW5pZWQ6ICVzIiwg c3RyZXJyb3IoLWVycikpOworCX0gZWxzZSBpZiAoZ2F0ZXdheV9jb25uZWN0X3JmY29tbShkZXZp Y2UsIGNoYW4pIDwgMCl7CisJCWVycm9yKCJBbGxvY2F0aW5nIG5ldyBHSU9DaGFubmVsIGZhaWxl ZCEiKTsKKwl9IGVsc2UgeworCQlyZXR1cm47CisJfQorCisJZ19pb19jaGFubmVsX2Nsb3NlKGNo YW4pOworCWdfaW9fY2hhbm5lbF91bnJlZihjaGFuKTsKIAlyZXR1cm47CiB9CiAKQEAgLTEzMzIs MjIgKzEzOTMsMTkgQEAKIAogc3RhdGljIGludCBnYXRld2F5X3NlcnZlcl9pbml0KERCdXNDb25u ZWN0aW9uICpjb25uLCBHS2V5RmlsZSAqY29uZmlnKQogewotCXVpbnQ4X3QgY2hhbiA9IERFRkFV TFRfSFNQX0hTX0NIQU5ORUw7CisJdWludDhfdCBjaGFuID0gREVGQVVMVF9IRlBfSFNfQ0hBTk5F TDsKIAlzZHBfcmVjb3JkX3QgKnJlY29yZDsKIAlnYm9vbGVhbiBtYXN0ZXIgPSBUUlVFOwogCUdF cnJvciAqZXJyID0gTlVMTDsKIAl1aW50MzJfdCBmbGFnczsKIAotCWlmICghZW5hYmxlZC5nYXRl d2F5KQotCQlyZXR1cm4gMDsKLQogCWlmIChjb25maWcpIHsKIAkJZ2Jvb2xlYW4gdG1wOwogCiAJ CXRtcCA9IGdfa2V5X2ZpbGVfZ2V0X2Jvb2xlYW4oY29uZmlnLCAiR2VuZXJhbCIsICJNYXN0ZXIi LAogCQkJCQkJJmVycik7CiAJCWlmIChlcnIpIHsKLQkJCWRlYnVnKCJhdWRpby5jb25mOiAlcyIs IGVyci0+bWVzc2FnZSk7CisJCQlkZWJ1ZygiR2F0ZXdheTogYXVkaW8uY29uZjogJXMiLCBlcnIt Pm1lc3NhZ2UpOwogCQkJZ19lcnJvcl9mcmVlKGVycik7CiAJCQllcnIgPSBOVUxMOwogCQl9IGVs c2UKQEAgLTEzNTgsMTMgKzE0MTYsMTMgQEAKIAogCWlmIChtYXN0ZXIpCiAJCWZsYWdzIHw9IFJG Q09NTV9MTV9NQVNURVI7Ci0KLQloc3BfaHNfc2VydmVyID0gYnRfcmZjb21tX2xpc3RlbihCREFE RFJfQU5ZLCBjaGFuLCBmbGFncywgaHNfaW9fY2IsCisJZGVidWcoIiEhISBTdGFydCBsaXN0ZW4g Zm9yIHJmY29tbSIpOworCWhmcF9oc19zZXJ2ZXIgPSBidF9yZmNvbW1fbGlzdGVuKEJEQUREUl9B TlksIGNoYW4sIGZsYWdzLCBoZl9pb19jYiwKIAkJCQlOVUxMKTsKLQlpZiAoIWhzcF9oc19zZXJ2 ZXIpCisJaWYgKCFoZnBfaHNfc2VydmVyKQogCQlyZXR1cm4gLTE7CiAKLQlyZWNvcmQgPSBoc3Bf aHNfcmVjb3JkKGNoYW4pOworCXJlY29yZCA9IGhmcF9oc19yZWNvcmQoY2hhbik7CiAJaWYgKCFy ZWNvcmQpIHsKIAkJZXJyb3IoIlVuYWJsZSB0byBhbGxvY2F0ZSBuZXcgc2VydmljZSByZWNvcmQi KTsKIAkJcmV0dXJuIC0xOwpAQCAtMTM3MywxMiArMTQzMSwxMiBAQAogCWlmIChhZGRfcmVjb3Jk X3RvX3NlcnZlcihCREFERFJfQU5ZLCByZWNvcmQpIDwgMCkgewogCQllcnJvcigiVW5hYmxlIHRv IHJlZ2lzdGVyIEhTUCBIUyBzZXJ2aWNlIHJlY29yZCIpOwogCQlzZHBfcmVjb3JkX2ZyZWUocmVj b3JkKTsKLQkJZ19pb19jaGFubmVsX3VucmVmKGhzcF9oc19zZXJ2ZXIpOwotCQloc3BfaHNfc2Vy dmVyID0gTlVMTDsKKwkJZ19pb19jaGFubmVsX3VucmVmKGhmcF9oc19zZXJ2ZXIpOworCQloZnBf aHNfc2VydmVyID0gTlVMTDsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWhzcF9oc19yZWNvcmRfaWQg PSByZWNvcmQtPmhhbmRsZTsKKwloZnBfaHNfcmVjb3JkX2lkID0gcmVjb3JkLT5oYW5kbGU7CiAK IAlyZXR1cm4gMDsKIH0KQEAgLTEzOTUsMTQgKzE0NTMsMTQgQEAKIAkJaHNwX2FnX3NlcnZlciA9 IE5VTEw7CiAJfQogCi0JaWYgKGhzcF9oc19yZWNvcmRfaWQpIHsKLQkJcmVtb3ZlX3JlY29yZF9m cm9tX3NlcnZlcihoc3BfaHNfcmVjb3JkX2lkKTsKLQkJaHNwX2hzX3JlY29yZF9pZCA9IDA7CisJ aWYgKGhmcF9oc19yZWNvcmRfaWQpIHsKKwkJcmVtb3ZlX3JlY29yZF9mcm9tX3NlcnZlcihoZnBf aHNfcmVjb3JkX2lkKTsKKwkJaGZwX2hzX3JlY29yZF9pZCA9IDA7CiAJfQogCi0JaWYgKGhzcF9o c19zZXJ2ZXIpIHsKLQkJZ19pb19jaGFubmVsX3VucmVmKGhzcF9oc19zZXJ2ZXIpOwotCQloc3Bf aHNfc2VydmVyID0gTlVMTDsKKwlpZiAoaGZwX2hzX3NlcnZlcikgeworCQlnX2lvX2NoYW5uZWxf dW5yZWYoaGZwX2hzX3NlcnZlcik7CisJCWhmcF9oc19zZXJ2ZXIgPSBOVUxMOwogCX0KIAogCWlm IChoZnBfYWdfcmVjb3JkX2lkKSB7CkBAIC0xNDIzLDggKzE0ODEsOSBAQAogCiAJY29ubmVjdGlv biA9IGRidXNfY29ubmVjdGlvbl9yZWYoY29ubik7CiAKLQlpZiAoIWNvbmZpZykKKwlpZiAoIWNv bmZpZykgewogCQlnb3RvIHByb2NlZWQ7CisJfQogCiAJbGlzdCA9IGdfa2V5X2ZpbGVfZ2V0X3N0 cmluZ19saXN0KGNvbmZpZywgIkdlbmVyYWwiLCAiRW5hYmxlIiwKIAkJCQkJCU5VTEwsIE5VTEwp OwpAQCAtMTQ2Myw3ICsxNTIyLDYgQEAKIAkJaWYgKGhlYWRzZXRfc2VydmVyX2luaXQoY29ubiwg Y29uZmlnKSA8IDApCiAJCQlnb3RvIGZhaWxlZDsKIAl9Ci0KIAlpZiAoZW5hYmxlZC5nYXRld2F5 KSB7CiAJCWlmIChnYXRld2F5X3NlcnZlcl9pbml0KGNvbm4sIGNvbmZpZykgPCAwKQogCQkJZ290 byBmYWlsZWQ7CkluZGV4OiBjb21tb24vZ2xpYi1oZWxwZXIuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3Zzcm9vdC9ibHVlei91dGlscy9jb21tb24vZ2xpYi1oZWxwZXIuYyx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4zOQpkaWZmIC13IC11IC1yMS4zOSBnbGliLWhlbHBlci5jCi0tLSBjb21tb24v Z2xpYi1oZWxwZXIuYwkzMCBKdW4gMjAwOCAxNDowNTozOCAtMDAwMAkxLjM5CisrKyBjb21tb24v Z2xpYi1oZWxwZXIuYwkxNSBEZWMgMjAwOCAyMzowNDo1NyAtMDAwMApAQCAtNDEsNiArNDEsNyBA QAogI2luY2x1ZGUgPGdsaWIuaD4KIAogI2luY2x1ZGUgImdsaWItaGVscGVyLmgiCisjaW5jbHVk ZSAibG9nZ2luZy5oIgogCiB0eXBlZGVmIGludCAoKnJlc29sdmVyX3QpIChpbnQgZmQsIGNoYXIg KnNyYywgY2hhciAqZHN0KTsKIHR5cGVkZWYgQnRJT0Vycm9yICgqY29ubmVjdF90KSAoQnRJTyAq aW8sIEJ0SU9GdW5jIGZ1bmMpOwpAQCAtNzI3LDM4ICs3MjgsNjggQEAKIAlyZXR1cm4gMDsKIH0K IAotc3RhdGljIEJ0SU9FcnJvciBzY29fY29ubmVjdChCdElPICppbywgQnRJT0Z1bmMgZnVuYykK LXsKLQlzdHJ1Y3QgaW9fY29udGV4dCAqaW9fY3R4dCA9IGlvLT5pb19jdHh0Oworc3RhdGljIEJ0 SU9FcnJvciBzY29fYmluZChzdHJ1Y3QgaW9fY29udGV4dCAqaW9fY3R4dCwgY29uc3QgY2hhciAq YWRkcmVzcykgewogCXN0cnVjdCBzb2NrYWRkcl9zY28gYWRkcjsKLQlpbnQgc2ssIGVycjsKLQot CWlvX2N0eHQtPmZ1bmMgPSBmdW5jOwotCi0Jc2sgPSBzb2NrZXQoUEZfQkxVRVRPT1RILCBTT0NL X1NFUVBBQ0tFVCwgQlRQUk9UT19TQ08pOwotCWlmIChzayA8IDApCi0JCXJldHVybiAtZXJybm87 CisJQnRJT0Vycm9yIGVycjsKKyAgICAgICAgaW50IHNjb19mZDsKIAotCW1lbXNldCgmYWRkciwg MCwgc2l6ZW9mKGFkZHIpKTsKKwlzY29fZmQgPSBzb2NrZXQoUEZfQkxVRVRPT1RILCBTT0NLX1NF UVBBQ0tFVCwgQlRQUk9UT19TQ08pOworCWlmIChzY29fZmQgPCAwKSB7CisgICAgICAgICAgICAg ICAgcmV0dXJuIEJUX0lPX0ZBSUxFRDsKKyAgICAgICAgfQorICAgICAgICBkZWJ1Zygic2NvX2Jp bmQoKTogc29ja2V0ICVkIGNyZWF0ZWQiLCBzY29fZmQpOwogCWFkZHIuc2NvX2ZhbWlseSA9IEFG X0JMVUVUT09USDsKLQlzdHIyYmEoaW8tPnNyYywgJmFkZHIuc2NvX2JkYWRkcik7CisJc3RyMmJh KGFkZHJlc3MsICZhZGRyLnNjb19iZGFkZHIpOwogCi0JZXJyID0gYmluZChzaywgKHN0cnVjdCBz b2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKwllcnIgPSBiaW5kKHNjb19mZCwgKHN0 cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAlpZiAoZXJyIDwgMCkgewot CQljbG9zZShzayk7CisgICAgICAgICAgICAgICAgY2xvc2Uoc2NvX2ZkKTsKIAkJcmV0dXJuIEJU X0lPX0ZBSUxFRDsKIAl9CisgICAgICAgIGRlYnVnKCJzY29fYmluZCgpOiBzb2NrZXQgJWQgYmlu ZCIsIHNjb19mZCk7CisgICAgICAgIGlvX2N0eHQtPmZkID0gc2NvX2ZkOworCXJldHVybiBCVF9J T19TVUNDRVNTOworfQorCitzdGF0aWMgQnRJT0Vycm9yIHNjb19saXN0ZW4oQnRJTyAqaW8sIEJ0 SU9GdW5jIGZ1bmMpIHsKKwlzdHJ1Y3QgaW9fY29udGV4dCAqaW9fY3R4dCA9IGlvLT5pb19jdHh0 OworCUJ0SU9FcnJvciBlcnI7CisKKwlpb19jdHh0LT5mdW5jID0gZnVuYzsKKwllcnIgPSBzY29f YmluZChpb19jdHh0LCBpby0+c3JjKTsKKwlpZiAoZXJyICE9IEJUX0lPX1NVQ0NFU1MpIHsKKyAg ICAgICAgICAgICAgICBkZWJ1Zygic2NvX2xpc3RlbigpOiAlbSIpOworICAgICAgICAgICAgICAg IHJldHVybiBlcnI7CisgICAgICAgIH0KIAotCWlvX2N0eHQtPmZkID0gc2s7CisJZXJyID0gdHJh bnNwb3J0X2xpc3Rlbihpbyk7CisgICAgICAgIGRlYnVnKCJzY29fbGlzdGVuKCk6ICVzIiwgc3Ry ZXJyb3IoLWVycikpOworCWlmIChlcnIgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoaW9f Y3R4dC0+ZmQpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisJfQorCXJldHVybiBCVF9J T19TVUNDRVNTOworfQorCitzdGF0aWMgQnRJT0Vycm9yIHNjb19jb25uZWN0KEJ0SU8gKmlvLCBC dElPRnVuYyBmdW5jKQoreworCXN0cnVjdCBpb19jb250ZXh0ICppb19jdHh0ID0gaW8tPmlvX2N0 eHQ7CisJc3RydWN0IHNvY2thZGRyX3NjbyBhZGRyOworCWludCBzaywgZXJyOworCisJaW9fY3R4 dC0+ZnVuYyA9IGZ1bmM7CisKKwllcnIgPSBzY29fYmluZChpb19jdHh0LCBpby0+c3JjKTsKKwlp ZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAotCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFk ZHIpKTsKIAlhZGRyLnNjb19mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJc3RyMmJhKGlvLT5kc3Qs ICZhZGRyLnNjb19iZGFkZHIpOwogCiAJZXJyID0gdHJhbnNwb3J0X2Nvbm5lY3QoaW8sIChzdHJ1 Y3Qgc29ja2FkZHIgKikgJmFkZHIsCiAJCQkJc2l6ZW9mKGFkZHIpKTsKIAlpZiAoZXJyIDwgMCkg ewotCQljbG9zZShzayk7CisJCWNsb3NlKGlvX2N0eHQtPmZkKTsKIAkJcmV0dXJuIEJUX0lPX0ZB SUxFRDsKIAl9CiAKQEAgLTEwMjAsNiArMTA1MSwyNSBAQAogCiB9CiAKK0dJT0NoYW5uZWwqIGJ0 X3Njb19saXN0ZW4oY29uc3QgYmRhZGRyX3QgKnNyYywgYnRfaW9fY2FsbGJhY2tfdCBjYiwgdm9p ZCAqdXNlcl9kYXRhKQoreworCUJ0SU8gKmlvOworCUJ0SU9FcnJvciBlcnI7CisgICAgICAgIAor CWlvID0gYnRfaW9fY3JlYXRlKEJUX0lPX1NDTywgdXNlcl9kYXRhLCBOVUxMKTsKKwlpZiAoIWlv KQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCWJhMnN0cihzcmMsIGlvLT5zcmMpOwor CWlvLT5pb19jdHh0LT5jYiA9IGNiOworCWVyciA9IGJ0X2lvX2xpc3RlbihpbywgTlVMTCwgTlVM TCk7CisJaWYgKGVyciAhPSBCVF9JT19TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgYnRfaW9f dW5yZWYoaW8pOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCX0KKyAgICAgICAgZGVi dWcoIlJldHVybmluZyAlcCIsIGlvLT5pb19jdHh0LT5pbyk7CisJcmV0dXJuIGlvLT5pb19jdHh0 LT5pbzsKK30KKwogaW50IGJ0X3JmY29tbV9jb25uZWN0KGNvbnN0IGJkYWRkcl90ICpzcmMsIGNv bnN0IGJkYWRkcl90ICpkc3QsCiAJCQl1aW50OF90IGNoYW5uZWwsIGJ0X2lvX2NhbGxiYWNrX3Qg Y2IsIHZvaWQgKnVzZXJfZGF0YSkKIHsKQEAgLTExNDQsNiArMTE5NCw3IEBACiAJCWVyciA9IGNy ZWF0ZV9pb19jb250ZXh0KCZpby0+aW9fY3R4dCwgTlVMTCwgTlVMTCwKIAkJCQlzY29fcmVzb2x2 ZXIsIHVzZXJfZGF0YSk7CiAJCWlvLT5jb25uZWN0ID0gc2NvX2Nvbm5lY3Q7CisJCWlvLT5saXN0 ZW4gPSBzY29fbGlzdGVuOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gTlVMTDsKSW5k ZXg6IGNvbW1vbi9nbGliLWhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnNyb290L2Js dWV6L3V0aWxzL2NvbW1vbi9nbGliLWhlbHBlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIx CmRpZmYgLXcgLXUgLXIxLjIxIGdsaWItaGVscGVyLmgKLS0tIGNvbW1vbi9nbGliLWhlbHBlci5o CTMwIEp1biAyMDA4IDE0OjA1OjM4IC0wMDAwCTEuMjEKKysrIGNvbW1vbi9nbGliLWhlbHBlci5o CTE1IERlYyAyMDA4IDIzOjA0OjU4IC0wMDAwCkBAIC01Nyw2ICs1Nyw3IEBACiBpbnQgYnRfc2Nv X2Nvbm5lY3QoY29uc3QgYmRhZGRyX3QgKnNyYywgY29uc3QgYmRhZGRyX3QgKmRzdCwKIAkJCWJ0 X2lvX2NhbGxiYWNrX3QgY2IsIHZvaWQgKnVzZXJfZGF0YSk7CiAKK0dJT0NoYW5uZWwqIGJ0X3Nj b19saXN0ZW4oY29uc3QgYmRhZGRyX3QgKnNyYywgYnRfaW9fY2FsbGJhY2tfdCBjYiwgdm9pZCAq dXNlcl9kYXRhKTsKIC8qIEV4cGVyaWVtZW50YWwgYnRfaW8gQVBJICovCiAKIHR5cGVkZWYgc3Ry dWN0IGJ0X2lvIEJ0SU87Cg== ------=_Part_61468_25846534.1229382883401--