From mboxrd@z Thu Jan 1 00:00:00 1970 From: Changlong Xie Subject: [PATCH v11 14/27] secondary vm suspend/resume/checkpoint code Date: Fri, 4 Mar 2016 16:41:18 +0800 Message-ID: <1457080891-26054-15-git-send-email-xiecl.fnst@cn.fujitsu.com> References: <1457080891-26054-1-git-send-email-xiecl.fnst@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457080891-26054-1-git-send-email-xiecl.fnst@cn.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen devel , Konrad Rzeszutek Wilk , Andrew Cooper , Ian Campbell , Ian Jackson , Wei Liu Cc: Lars Kurth , Changlong Xie , Wen Congyang , Gui Jianfeng , Jiang Yunhong , Dong Eddie , Anthony Perard , Shriram Rajagopalan , Yang Hongyang List-Id: xen-devel@lists.xenproject.org RnJvbTogV2VuIENvbmd5YW5nIDx3ZW5jeUBjbi5mdWppdHN1LmNvbT4KClNlY29uZGFyeSB2bSBp cyBydW5uaW5nIGluIGNvbG8gbW9kZS4gU28gd2Ugd2lsbCBkbwp0aGUgZm9sbG93aW5nIHRoaW5n cyBhZ2FpbiBhbmQgYWdhaW46CjEuIFJlc3VtZSBzZWNvbmRhcnkgdm0KICAgYS4gU2VuZCBDSEVD S1BPSU5UX1NWTV9SRUFEWSB0byBtYXN0ZXIuCiAgIGIuIElmIGl0IGlzIG5vdCB0aGUgZmlyc3Qg cmVzdW1lLCBjYWxsIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfcHJlcmVzdW1lKCkuCiAgIGMu IElmIGl0IGlzIHRoZSBmaXJzdCByZXN1bWUocmVzdW1lIHJpZ2h0IGFmdGVyIGxpdmUgbWlncmF0 aW9uKSwKICAgICAgLSBjYWxsIGxpYnhsX194Y19kb21haW5fcmVzdG9yZV9kb25lKCkgdG8gYnVp bGQgdGhlIHNlY29uZGFyeSB2bS4KICAgICAgLSBlbmFibGUgc2Vjb25kYXJ5IHZtJ3MgbG9nZGly dHkuCiAgICAgIC0gY2FsbCBsaWJ4bF9fZG9tYWluX3Jlc3VtZSgpIHRvIHJlc3VtZSBzZWNvbmRh cnkgdm0uCiAgICAgIC0gY2FsbCBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3NldHVwKCkgdG8g c2V0dXAgY2hlY2twb2ludCBkZXZpY2VzLgogICBkLiBTZW5kIENIRUNLUE9JTlRfU1ZNX1JFU1VN RUQgdG8gbWFzdGVyLgoyLiBXYWl0IGEgbmV3IGNoZWNrcG9pbnQKICAgYS4gQ2FsbCBsaWJ4bF9f Y2hlY2twb2ludF9kZXZpY2VzX2NvbW1pdCgpLgogICBiLiBSZWFkIENIRUNLUE9JTlRfTkVXIGZy b20gbWFzdGVyLgozLiBTdXNwZW5kIHNlY29uZGFyeSB2bQogICBhLiBTdXNwZW5kIHNlY29uZGFy eSB2bS4KICAgYi4gQ2FsbCBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3Bvc3RzdXNwZW5kKCku CiAgIGMuIFNlbmQgQ0hFQ0tQT0lOVF9TVk1fU1VTUEVOREVEIHRvIG1hc3Rlci4KNC4gQ2hlY2tw b2ludAogICBhLiBSZWFkIGVtdWxhdG9yIHhlbnN0b3JlIGRhdGEgYW5kIGVtdWxhdG9yIGNvbnRl eHQKICAgYi4gUkVDX1RZUEVfQ0hFQ0tQT0lOVF9FTkQKClNpZ25lZC1vZmYtYnk6IFdlbiBDb25n eWFuZyA8d2VuY3lAY24uZnVqaXRzdS5jb20+ClNpZ25lZC1vZmYtYnk6IFlhbmcgSG9uZ3lhbmcg PGhvbmd5YW5nLnlhbmdAZWFzeXN0YWNrLmNuPgpTaWduZWQtb2ZmLWJ5OiBDaGFuZ2xvbmcgWGll IDx4aWVjbC5mbnN0QGNuLmZ1aml0c3UuY29tPgotLS0KIHRvb2xzL2xpYnhjL3hjX3NyX2NvbW1v bi5oICAgICAgIHwgICAgMiArCiB0b29scy9saWJ4Yy94Y19zcl9zYXZlLmMgICAgICAgICB8ICAg IDMgKy0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgICAgIHwgICAgMSArCiB0b29scy9s aWJ4bC9saWJ4bF9jb2xvLmggICAgICAgICB8ICAgNTUgKysKIHRvb2xzL2xpYnhsL2xpYnhsX2Nv bG9fcmVzdG9yZS5jIHwgMTAyNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgICAgICAgfCAgIDM2ICsrCiB0b29scy9saWJ4 bC9saWJ4bF9pbnRlcm5hbC5oICAgICB8ICAgMTEgKy0KIHRvb2xzL2xpYnhsL2xpYnhsX3NhdmVf Y2FsbG91dC5jIHwgICAgNiArLQogdG9vbHMvbGlieGwvbGlieGxfc3RyZWFtX3JlYWQuYyAgfCAg IDEyICsKIHRvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbCAgICAgIHwgICAgMSArCiAxMCBmaWxl cyBjaGFuZ2VkLCAxMTQzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k ZSAxMDA2NDQgdG9vbHMvbGlieGwvbGlieGxfY29sby5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9v bHMvbGlieGwvbGlieGxfY29sb19yZXN0b3JlLmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy94 Y19zcl9jb21tb24uaCBiL3Rvb2xzL2xpYnhjL3hjX3NyX2NvbW1vbi5oCmluZGV4IDVkOWY0OTcu LjJiZmVkNjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX3NyX2NvbW1vbi5oCisrKyBiL3Rv b2xzL2xpYnhjL3hjX3NyX2NvbW1vbi5oCkBAIC0xODQsMTAgKzE4NCwxMiBAQCBzdHJ1Y3QgeGNf c3JfY29udGV4dAogICAgICAqIG1pZ3JhdGlvbiBzdHJlYW0KICAgICAgKiAwOiBQbGFpbiBWTQog ICAgICAqIDE6IFJlbXVzCisgICAgICogMjogQ09MTwogICAgICAqLwogICAgIGVudW0gewogICAg ICAgICBNSUdfU1RSRUFNX05PTkUsIC8qIHBsYWluIHN0cmVhbSAqLwogICAgICAgICBNSUdfU1RS RUFNX1JFTVVTLAorICAgICAgICBNSUdfU1RSRUFNX0NPTE8sCiAgICAgfSBtaWdyYXRpb25fc3Ry ZWFtOwogCiAgICAgdW5pb24gLyogQ29tbW9uIHNhdmUgb3IgcmVzdG9yZSBkYXRhLiAqLwpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfc3Jfc2F2ZS5jIGIvdG9vbHMvbGlieGMveGNfc3Jfc2F2 ZS5jCmluZGV4IGZlMjEwY2MuLjczOTMzNTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX3Ny X3NhdmUuYworKysgYi90b29scy9saWJ4Yy94Y19zcl9zYXZlLmMKQEAgLTg0Niw3ICs4NDYsOCBA QCBpbnQgeGNfZG9tYWluX3NhdmUoeGNfaW50ZXJmYWNlICp4Y2gsIGludCBpb19mZCwgdWludDMy X3QgZG9tLAogCiAgICAgLyogSWYgYWx0ZXJpbmcgbWlncmF0aW9uX3N0cmVhbSB1cGRhdGUgdGhp cyBhc3NlcnQgdG9vLiAqLwogICAgIGFzc2VydChjaGVja3BvaW50ZWRfc3RyZWFtID09IE1JR19T VFJFQU1fTk9ORSB8fAotICAgICAgICAgICBjaGVja3BvaW50ZWRfc3RyZWFtID09IE1JR19TVFJF QU1fUkVNVVMpOworICAgICAgICAgICBjaGVja3BvaW50ZWRfc3RyZWFtID09IE1JR19TVFJFQU1f UkVNVVMgfHwKKyAgICAgICAgICAgY2hlY2twb2ludGVkX3N0cmVhbSA9PSBNSUdfU1RSRUFNX0NP TE8pOwogCiAgICAgLyoKICAgICAgKiBUT0RPOiBGaW5kIHNvbWUgdGltZSB0byBiZXR0ZXIgdHdl YWsgdGhlIGxpdmUgbWlncmF0aW9uIGFsZ29yaXRobS4KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhs L01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggNzg5YTEyZS4uZDg2MTJlYiAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGwvTWFrZWZp bGUKQEAgLTY1LDYgKzY1LDcgQEAgTElCWExfT0JKUy15ICs9IGxpYnhsX25vX2NvbnZlcnRfY2Fs bG91dC5vCiBlbmRpZgogCiBMSUJYTF9PQkpTLXkgKz0gbGlieGxfcmVtdXMubyBsaWJ4bF9jaGVj a3BvaW50X2RldmljZS5vIGxpYnhsX3JlbXVzX2Rpc2tfZHJiZC5vCitMSUJYTF9PQkpTLXkgKz0g bGlieGxfY29sb19yZXN0b3JlLm8KIAogTElCWExfT0JKUy0kKENPTkZJR19YODYpICs9IGxpYnhs X2NwdWlkLm8gbGlieGxfeDg2Lm8gbGlieGxfcHNyLm8KIExJQlhMX09CSlMtJChDT05GSUdfQVJN KSArPSBsaWJ4bF9ub2NwdWlkLm8gbGlieGxfYXJtLm8gbGlieGxfbGliZmR0X2NvbXBhdC5vCmRp ZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9jb2xvLmggYi90b29scy9saWJ4bC9saWJ4bF9j b2xvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiOThjYwotLS0gL2Rl di9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NvbG8uaApAQCAtMCwwICsxLDU1IEBACisv KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEZVSklUU1UgTElNSVRFRAorICogQXV0aG9yOiBXZW4g Q29uZ3lhbmcgPHdlbmN5QGNuLmZ1aml0c3UuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNp b24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRl c2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKi8KKworI2lmbmRlZiBMSUJYTF9DT0xPX0gKKyNkZWZpbmUgTElCWExfQ09MT19ICisKK3N0 cnVjdCBsaWJ4bF9fYW87CitzdHJ1Y3QgbGlieGxfX2VnYzsKKworZW51bSB7CisgICAgTElCWExf Q09MT19TRVRVUEVELAorICAgIExJQlhMX0NPTE9fU1VTUEVOREVELAorICAgIExJQlhMX0NPTE9f UkVTVU1FRCwKK307CisKK3R5cGVkZWYgc3RydWN0IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRl IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlOwordHlwZWRlZiB2b2lkIGxpYnhsX19kb21haW5f Y3JlYXRlX2NiKHN0cnVjdCBsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMsIHVpbnQzMl90IGRvbWlkKTsKKwor dHlwZWRlZiBzdHJ1Y3QgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSBsaWJ4bF9fY29sb19yZXN0 b3JlX3N0YXRlOwordHlwZWRlZiB2b2lkIGxpYnhsX19jb2xvX2NhbGxiYWNrKHN0cnVjdCBsaWJ4 bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2Nv bG9fcmVzdG9yZV9zdGF0ZSAqY3JzLCBpbnQgcmMpOworCitzdHJ1Y3QgbGlieGxfX2NvbG9fcmVz dG9yZV9zdGF0ZSB7CisgICAgLyogbXVzdCBzZXQgYnkgY2FsbGVyIG9mIGxpYnhsX19jb2xvXyhz ZXR1cHx0ZWFyZG93bikgKi8KKyAgICBzdHJ1Y3QgbGlieGxfX2FvICphbzsKKyAgICB1aW50MzJf dCBkb21pZDsKKyAgICBpbnQgc2VuZF9iYWNrX2ZkOworICAgIGludCByZWN2X2ZkOworICAgIGlu dCBodm07CisgICAgbGlieGxfX2NvbG9fY2FsbGJhY2sgKmNhbGxiYWNrOworCisgICAgLyogcHJp dmF0ZSwgY29sbyByZXN0b3JlIGNoZWNrcG9pbnQgc3RhdGUgKi8KKyAgICBsaWJ4bF9fZG9tYWlu X2NyZWF0ZV9jYiAqc2F2ZWRfY2I7CisgICAgdm9pZCAqY3JjczsKK307CisKK2V4dGVybiB2b2lk IGxpYnhsX19jb2xvX3Jlc3RvcmVfc2V0dXAoc3RydWN0IGxpYnhsX19lZ2MgKmVnYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0 ZSAqY3JzKTsKK2V4dGVybiB2b2lkIGxpYnhsX19jb2xvX3Jlc3RvcmVfdGVhcmRvd24oc3RydWN0 IGxpYnhsX19lZ2MgKmVnYywgdm9pZCAqZGNzX3ZvaWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCByZXQsIGludCByZXR2YWwsIGludCBlcnJub3ZhbCk7Cisj ZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NvbG9fcmVzdG9yZS5jIGIvdG9v bHMvbGlieGwvbGlieGxfY29sb19yZXN0b3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uODI5Njg3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2Nv bG9fcmVzdG9yZS5jCkBAIC0wLDAgKzEsMTAyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx NiBGVUpJVFNVIExJTUlURUQKKyAqIEF1dGhvcjogV2VuIENvbmd5YW5nIDx3ZW5jeUBjbi5mdWpp dHN1LmNvbT4KKyAqICAgICAgICAgWWFuZyBIb25neWFuZyA8aG9uZ3lhbmcueWFuZ0BlYXN5c3Rh Y2suY24+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3Bl Y2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAibGlieGxf b3NkZXBzLmgiIC8qIG11c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGhlYWRlcnMgKi8KKworI2lu Y2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGlieGxfc3Jfc3RyZWFtX2Zvcm1h dC5oIgorCit0eXBlZGVmIHN0cnVjdCBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3Rh dGUgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlOworc3RydWN0IGxpYnhsX19j b2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSB7CisgICAgbGlieGxfX2RvbWFpbl9zdXNwZW5k X3N0YXRlIGRzcHM7CisgICAgbGlieGxfX2xvZ2RpcnR5X3N3aXRjaCBsZHM7CisgICAgbGlieGxf X2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzOworICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfc3RhdGUg c3dzOworICAgIGludCBzdGF0dXM7CisgICAgYm9vbCBwcmVyZXN1bWU7CisgICAgLyogdXNlZCBm b3IgdGVhcmRvd24gKi8KKyAgICBpbnQgdGVhcmRvd25fZGV2aWNlczsKKyAgICBpbnQgc2F2ZWRf cmM7CisgICAgY2hhciAqc3RhdGVfZmlsZTsKKworICAgIHZvaWQgKCpjYWxsYmFjaykobGlieGxf X2VnYyAqLAorICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3Bv aW50X3N0YXRlICosCisgICAgICAgICAgICAgICAgICAgICBpbnQpOworfTsKKworc3RhdGljIGNv bnN0IGxpYnhsX19jaGVja3BvaW50X2RldmljZV9pbnN0YW5jZV9vcHMgKmNvbG9fcmVzdG9yZV9v cHNbXSA9IHsKKyAgICBOVUxMLAorfTsKKworLyogPT09PT09PT09PT09PT09PT09PT09IGNvbG86 IGNvbW1vbiBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09PT09ICovCitzdGF0aWMgdm9pZCBj b2xvX2VuYWJsZV9sb2dkaXJ0eShsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMsIGxpYnhs X19lZ2MgKmVnYykKK3sKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09O VEFJTkVSX09GKGNycywgKmRjcywgY3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNr cG9pbnRfc3RhdGUgKmNyY3MgPSBjcnMtPmNyY3M7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlh c2VzICovCisgICAgY29uc3QgdWludDMyX3QgZG9taWQgPSBjcnMtPmRvbWlkOworICAgIGxpYnhs X19sb2dkaXJ0eV9zd2l0Y2ggKmNvbnN0IGxkcyA9ICZjcmNzLT5sZHM7CisKKyAgICBFR0NfR0M7 CisKKyAgICAvKiB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggcGFnZXMgYXJlIGRpcnR5IHRvIHJlc3Rv cmUgdGhlIGd1ZXN0ICovCisgICAgaWYgKHhjX3NoYWRvd19jb250cm9sKENUWC0+eGNoLCBkb21p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX0RPTUNUTF9TSEFET1dfT1BfRU5BQkxF X0xPR0RJUlRZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCBOVUxMLCAwLCBO VUxMKSA8IDApIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiY2Fubm90IGVuYWJsZSBzZWNvbmRhcnkg dm0ncyBsb2dkaXJ0eSIpOworICAgICAgICBsZHMtPmNhbGxiYWNrKGVnYywgbGRzLCBFUlJPUl9G QUlMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjcnMtPmh2bSkgeworICAg ICAgICBsaWJ4bF9fZG9tYWluX2NvbW1vbl9zd2l0Y2hfcWVtdV9sb2dkaXJ0eShlZ2MsIGRvbWlk LCAxLCBsZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGRzLT5jYWxsYmFjayhl Z2MsIGxkcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fZGlzYWJsZV9sb2dkaXJ0eShsaWJ4 bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfX2VnYyAqZWdjKQoreworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRl ICpkY3MgPSBDT05UQUlORVJfT0YoY3JzLCAqZGNzLCBjcnMpOworICAgIGxpYnhsX19jb2xvX3Jl c3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IGNycy0+Y3JjczsKKworICAgIC8qIENvbnZl bmllbmNlIGFsaWFzZXMgKi8KKyAgICBjb25zdCB1aW50MzJfdCBkb21pZCA9IGNycy0+ZG9taWQ7 CisgICAgbGlieGxfX2xvZ2RpcnR5X3N3aXRjaCAqY29uc3QgbGRzID0gJmNyY3MtPmxkczsKKwor ICAgIEVHQ19HQzsKKworICAgIC8qIHdlIG5lZWQgdG8ga25vdyB3aGljaCBwYWdlcyBhcmUgZGly dHkgdG8gcmVzdG9yZSB0aGUgZ3Vlc3QgKi8KKyAgICBpZiAoeGNfc2hhZG93X2NvbnRyb2woQ1RY LT54Y2gsIGRvbWlkLCBYRU5fRE9NQ1RMX1NIQURPV19PUF9PRkYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIDAsIE5VTEwsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgTE9HKFdBUk4s ICJjYW5ub3QgZGlzYWJsZSBzZWNvbmRhcnkgdm0ncyBsb2dkaXJ0eSIpOworCisgICAgaWYgKGNy cy0+aHZtKSB7CisgICAgICAgIGxpYnhsX19kb21haW5fY29tbW9uX3N3aXRjaF9xZW11X2xvZ2Rp cnR5KGVnYywgZG9taWQsIDAsIGxkcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBs ZHMtPmNhbGxiYWNrKGVnYywgbGRzLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29sb19yZXN1bWVf dm0obGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2Nv bG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHJlc3RvcmVfZGV2aWNlX21vZGVsKQoreworICAgIGxpYnhsX19kb21haW5fY3Jl YXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3JzLCAqZGNzLCBjcnMpOworICAg IGludCByYzsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBsaWJ4bF9fY29s b19yZXN0b3JlX3N0YXRlICpjb25zdCBjcnMgPSBjcmNzLT5jcnM7CisKKyAgICBFR0NfR0M7CisK KyAgICBpZiAoIWNycy0+c2F2ZWRfY2IpIHsKKyAgICAgICAgLyogVE9ETzogc3luYyBtbXUgZm9y IGh2bT8gKi8KKyAgICAgICAgaWYgKHJlc3RvcmVfZGV2aWNlX21vZGVsKSB7CisgICAgICAgICAg ICByYyA9IGxpYnhsX19xbXBfcmVzdG9yZShnYywgY3JzLT5kb21pZCwgY3Jjcy0+c3RhdGVfZmls ZSk7CisgICAgICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJj YW5ub3QgcmVzdG9yZSBkZXZpY2UgbW9kZWwgZm9yIHNlY29uZGFyeSB2bSIpOworICAgICAgICAg ICAgICAgIGNyY3MtPmNhbGxiYWNrKGVnYywgY3JjcywgcmMpOworICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByYyA9IGxpYnhsX19kb21h aW5fcmVzdW1lKGdjLCBjcnMtPmRvbWlkLCAwKTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAg ICAgTE9HKEVSUk9SLCAiY2Fubm90IHJlc3VtZSBzZWNvbmRhcnkgdm0iKTsKKworICAgICAgICBj cmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIHJjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor ICAgIC8qCisgICAgICogVE9ETzogZ2V0IHN0b3JlIGdmbiBhbmQgY29uc29sZSBnZm4KKyAgICAg KiAgV2Ugc2hvdWxkIGNhbGwgdGhlIGNhbGxiYWNrIHJlc3RvcmVfcmVzdWx0cyBpbgorICAgICAq ICB4Y19kb21haW5fcmVzdG9yZSgpIGJlZm9yZSByZXN1bWluZyB0aGUgZ3Vlc3QuCisgICAgICov CisgICAgbGlieGxfX3hjX2RvbWFpbl9yZXN0b3JlX2RvbmUoZWdjLCBkY3MsIDAsIDAsIDApOwor CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgaW50IGluaXRfZGV2aWNlX3N1YmtpbmQobGlieGxf X2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzKQoreworICAgIC8qIGluaXQgZGV2aWNlIHN1 YmtpbmQtc3BlY2lmaWMgc3RhdGUgaW4gdGhlIGxpYnhsIGN0eCAqLworICAgIGludCByYzsKKyAg ICBTVEFURV9BT19HQyhjZHMtPmFvKTsKKworICAgIHJjID0gMDsKKyAgICByZXR1cm4gcmM7Cit9 CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfZGV2aWNlX3N1YmtpbmQobGlieGxfX2NoZWNrcG9pbnRf ZGV2aWNlc19zdGF0ZSAqY2RzKQoreworICAgIC8qIGNsZWFudXAgZGV2aWNlIHN1YmtpbmQtc3Bl Y2lmaWMgc3RhdGUgaW4gdGhlIGxpYnhsIGN0eCAqLworICAgIFNUQVRFX0FPX0dDKGNkcy0+YW8p OworfQorCisKKy8qID09PT09PT09PT09PT09PT0gY29sbzogc2V0dXAgcmVzdG9yZSBlbnZpcm9u bWVudCA9PT09PT09PT09PT09PT09ICovCitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19kb21haW5f Y3JlYXRlX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjLCB1aW50MzJfdCBkb21pZCk7CisK K3N0YXRpYyBpbnQgaW5pdF9kc3BzKGxpYnhsX19kb21haW5fc3VzcGVuZF9zdGF0ZSAqZHNwcykK K3sKKyAgICBpbnQgcmMgPSBFUlJPUl9GQUlMOworICAgIGxpYnhsX2RvbWFpbl90eXBlIHR5cGU7 CisKKyAgICBTVEFURV9BT19HQyhkc3BzLT5hbyk7CisKKyAgICBsaWJ4bF9feHN3YWl0X2luaXQo JmRzcHMtPnB2Y29udHJvbCk7CisgICAgbGlieGxfX2V2X2V2dGNobl9pbml0KCZkc3BzLT5ndWVz dF9ldnRjaG4pOworICAgIGxpYnhsX19ldl94c3dhdGNoX2luaXQoJmRzcHMtPmd1ZXN0X3dhdGNo KTsKKyAgICBsaWJ4bF9fZXZfdGltZV9pbml0KCZkc3BzLT5ndWVzdF90aW1lb3V0KTsKKworICAg IHR5cGUgPSBsaWJ4bF9fZG9tYWluX3R5cGUoZ2MsIGRzcHMtPmRvbWlkKTsKKyAgICBpZiAodHlw ZSA9PSBMSUJYTF9ET01BSU5fVFlQRV9JTlZBTElEKQorICAgICAgICBnb3RvIG91dDsKKworICAg IGRzcHMtPnR5cGUgPSB0eXBlOworCisgICAgZHNwcy0+Z3Vlc3RfZXZ0Y2huLnBvcnQgPSAtMTsK KyAgICBkc3BzLT5ndWVzdF9ldnRjaG5fbG9ja2ZkID0gLTE7CisgICAgZHNwcy0+Z3Vlc3RfcmVz cG9uZGVkID0gMDsKKyAgICBkc3BzLT5kbV9zYXZlZmlsZSA9IGxpYnhsX19kZXZpY2VfbW9kZWxf c2F2ZWZpbGUoZ2MsIGRzcHMtPmRvbWlkKTsKKworICAgIC8qIFNlY29uZGFyeSB2bSBpcyBub3Qg Y3JlYXRlZCwgc28gd2UgY2Fubm90IGdldCBldnRjaG4gcG9ydCAqLworCisgICAgcmMgPSAwOwor CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogY2hlY2twb2ludCBjYWxsYmFja3Mg YXJlIGNhbGxlZCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgorICogMS4gcmVzdW1lCisgKiAyLiB3 YWl0IGNoZWNrcG9pbnQKKyAqIDMuIHN1c3BlbmQKKyAqIDQuIGNoZWNrcG9pbnQKKyAqLworc3Rh dGljIHZvaWQgbGlieGxfX2NvbG9fcmVzdG9yZV9kb21haW5fcmVzdW1lX2NhbGxiYWNrKHZvaWQg KmRhdGEpOworc3RhdGljIHZvaWQgbGlieGxfX2NvbG9fcmVzdG9yZV9kb21haW5fd2FpdF9jaGVj a3BvaW50X2NhbGxiYWNrKHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgbGlieGxfX2NvbG9fcmVz dG9yZV9kb21haW5fc3VzcGVuZF9jYWxsYmFjayh2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIGxp YnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX2NoZWNrcG9pbnRfY2FsbGJhY2sodm9pZCAqZGF0YSk7 CisKK3ZvaWQgbGlieGxfX2NvbG9fcmVzdG9yZV9zZXR1cChsaWJ4bF9fZWdjICplZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3Jz KQoreworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0Yo Y3JzLCAqZGNzLCBjcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0 ZSAqY3JjczsKKyAgICBpbnQgcmMgPSBFUlJPUl9GQUlMOworCisgICAgLyogQ29udmVuaWVuY2Ug YWxpYXNlcyAqLworICAgIGxpYnhsX19zcm1fcmVzdG9yZV9hdXRvZ2VuX2NhbGxiYWNrcyAqY29u c3QgY2FsbGJhY2tzID0KKyAgICAgICAgJmRjcy0+c3JzLnNocy5jYWxsYmFja3MucmVzdG9yZS5h OworICAgIGNvbnN0IGludCBkb21pZCA9IGNycy0+ZG9taWQ7CisKKyAgICBTVEFURV9BT19HQyhj cnMtPmFvKTsKKworICAgIEdDTkVXKGNyY3MpOworICAgIGNycy0+Y3JjcyA9IGNyY3M7CisgICAg Y3Jjcy0+Y3JzID0gY3JzOworCisgICAgLyogc2V0dXAgZHNwcyAqLworICAgIGNyY3MtPmRzcHMu YW8gPSBhbzsKKyAgICBjcmNzLT5kc3BzLmRvbWlkID0gZG9taWQ7CisgICAgaWYgKGluaXRfZHNw cygmY3Jjcy0+ZHNwcykpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgY2FsbGJhY2tzLT5wb3N0 Y29weSA9IGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX3Jlc3VtZV9jYWxsYmFjazsKKyAgICBj YWxsYmFja3MtPndhaXRfY2hlY2twb2ludCA9IGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX3dh aXRfY2hlY2twb2ludF9jYWxsYmFjazsKKyAgICBjYWxsYmFja3MtPnN1c3BlbmQgPSBsaWJ4bF9f Y29sb19yZXN0b3JlX2RvbWFpbl9zdXNwZW5kX2NhbGxiYWNrOworICAgIGNhbGxiYWNrcy0+Y2hl Y2twb2ludCA9IGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX2NoZWNrcG9pbnRfY2FsbGJhY2s7 CisKKyAgICAvKgorICAgICAqIFNlY29uZGFyeSB2bSBpcyBydW5uaW5nIGluIGNvbG8gbW9kZSwg c28gd2UgbmVlZCB0byBjYWxsCisgICAgICogbGlieGxfX3hjX2RvbWFpbl9yZXN0b3JlX2RvbmUo KSB0byBjcmVhdGUgc2Vjb25kYXJ5IHZtLgorICAgICAqIEJ1dCB3ZSB3aWxsIGV4aXQgaW4gZG9t YWluX2NyZWF0ZV9jYigpLiBTbyByZXBsYWNlIHRoZQorICAgICAqIGNhbGxiYWNrIGhlcmUuCisg ICAgICovCisgICAgY3JzLT5zYXZlZF9jYiA9IGRjcy0+Y2FsbGJhY2s7CisgICAgZGNzLT5jYWxs YmFjayA9IGxpYnhsX19jb2xvX2RvbWFpbl9jcmVhdGVfY2I7CisgICAgY3Jjcy0+c3RhdGVfZmls ZSA9IEdDU1BSSU5URihMSUJYTF9ERVZJQ0VfTU9ERUxfUkVTVE9SRV9GSUxFIi4lZCIsIGRvbWlk KTsKKyAgICBjcmNzLT5zdGF0dXMgPSBMSUJYTF9DT0xPX1NFVFVQRUQ7CisKKyAgICBsaWJ4bF9f bG9nZGlydHlfaW5pdCgmY3Jjcy0+bGRzKTsKKyAgICBjcmNzLT5sZHMuYW8gPSBhbzsKKworICAg IGNyY3MtPnN3cy5mZCA9IGNycy0+c2VuZF9iYWNrX2ZkOworICAgIGNyY3MtPnN3cy5hbyA9IGFv OworICAgIGNyY3MtPnN3cy5iYWNrX2NoYW5uZWwgPSB0cnVlOworCisgICAgZGNzLT5jZHMuY29u Y3JldGVfZGF0YSA9IGNyczsKKworICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfc3RhcnQoZWdjLCAm Y3Jjcy0+c3dzKTsKKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGNycy0+Y2FsbGJhY2soZWdj LCBjcnMsIHJjKTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX2Rv bWFpbl9jcmVhdGVfY2IobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMsIHVpbnQzMl90IGRvbWlk KQoreworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IGRj cy0+Y3JzLmNyY3M7CisKKyAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIHJjKTsKK30KKwor LyogPT09PT09PT09PT09PT09PSBjb2xvOiB0ZWFyZG93biByZXN0b3JlIGVudmlyb25tZW50ID09 PT09PT09PT09PT09PT0gKi8KK3N0YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV90ZWFyZG93bl9kZXZp Y2VzX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNf c3RhdGUgKmNkcywgaW50IHJjKTsKK3N0YXRpYyB2b2lkIGRvX2ZhaWxvdmVyKGxpYnhsX19lZ2Mg KmVnYywgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzKTsKK3N0YXRpYyB2b2lkIGRvX2Zh aWxvdmVyX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUqIGNyY3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCByYyk7CitzdGF0aWMgdm9pZCBjb2xvX2Rpc2FibGVfbG9n ZGlydHlfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpsZHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpOworc3RhdGljIHZvaWQgbGlieGxfX2NvbG9f cmVzdG9yZV90ZWFyZG93bl9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpj cnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJj KTsKKwordm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX3RlYXJkb3duKGxpYnhsX19lZ2MgKmVnYywg dm9pZCAqZGNzX3ZvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJl dCwgaW50IHJldHZhbCwgaW50IGVycm5vdmFsKQoreworICAgIGxpYnhsX19kb21haW5fY3JlYXRl X3N0YXRlICpkY3MgPSBkY3Nfdm9pZDsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9p bnRfc3RhdGUgKmNyY3MgPSBkY3MtPmNycy5jcmNzOworICAgIGludCByYyA9IDE7CisKKyAgICAv KiBjb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAq Y29uc3QgY3JzID0gJmRjcy0+Y3JzOworICAgIEVHQ19HQzsKKworICAgIGlmIChyZXQgPT0gMCAm JiByZXR2YWwgPT0gMCkKKyAgICAgICAgcmMgPSAwOworCisgICAgTE9HKElORk8sICIlcyIsIHJj ID8gImNvbG8gZmFpbHMiIDogImZhaWxvdmVyIik7CisKKyAgICBsaWJ4bF9fc3RyZWFtX3dyaXRl X2Fib3J0KGVnYywgJmNyY3MtPnN3cywgMSk7CisgICAgaWYgKGNycy0+c2F2ZWRfY2IpIHsKKyAg ICAgICAgLyogY3Jjcy0+c3RhdHVzIGlzIExJQlhMX0NPTE9fU0VUVVBFRCAqLworICAgICAgICBk Y3MtPnNycy5jb21wbGV0aW9uX2NhbGxiYWNrID0gTlVMTDsKKyAgICB9CisgICAgbGlieGxfX3hj X2RvbWFpbl9yZXN0b3JlX2RvbmUoZWdjLCBkY3MsIHJldCwgcmV0dmFsLCBlcnJub3ZhbCk7CisK KyAgICBjcmNzLT5zYXZlZF9yYyA9IHJjOworICAgIGlmICghY3Jjcy0+dGVhcmRvd25fZGV2aWNl cykgeworICAgICAgICBjb2xvX3Jlc3RvcmVfdGVhcmRvd25fZGV2aWNlc19kb25lKGVnYywgJmRj cy0+Y2RzLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRjcy0+Y2RzLmNhbGxi YWNrID0gY29sb19yZXN0b3JlX3RlYXJkb3duX2RldmljZXNfZG9uZTsKKyAgICBsaWJ4bF9fY2hl Y2twb2ludF9kZXZpY2VzX3RlYXJkb3duKGVnYywgJmRjcy0+Y2RzKTsKK30KKworc3RhdGljIHZv aWQgY29sb19yZXN0b3JlX3RlYXJkb3duX2RldmljZXNfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisg ICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzLCBpbnQgcmMpCit7CisgICAg bGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzID0gY2RzLT5jb25jcmV0ZV9kYXRhOworICAg IGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IGNycy0+Y3JjczsK KyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNycywg KmRjcywgY3JzKTsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykKKyAgICAgICAgTE9HKEVS Uk9SLCAiQ09MTzogZmFpbGVkIHRvIHRlYXJkb3duIGRldmljZSBmb3IgZ3Vlc3Qgd2l0aCBkb21p ZCAldSwiCisgICAgICAgICAgICAiIHJjICVkIiwgY2RzLT5kb21pZCwgcmMpOworCisgICAgaWYg KGNyY3MtPnRlYXJkb3duX2RldmljZXMpCisgICAgICAgIGNsZWFudXBfZGV2aWNlX3N1YmtpbmQo Y2RzKTsKKworICAgIHJjID0gY3Jjcy0+c2F2ZWRfcmM7CisgICAgaWYgKCFyYykgeworICAgICAg ICBjcmNzLT5jYWxsYmFjayA9IGRvX2ZhaWxvdmVyX2RvbmU7CisgICAgICAgIGRvX2ZhaWxvdmVy KGVnYywgY3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpYnhsX19jb2xvX3Jl c3RvcmVfdGVhcmRvd25fZG9uZShlZ2MsIGNycywgcmMpOworfQorCitzdGF0aWMgdm9pZCBkb19m YWlsb3ZlcihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycykK K3sKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBjcnMt PmNyY3M7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgY29uc3QgaW50IHN0 YXR1cyA9IGNyY3MtPnN0YXR1czsKKyAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpjb25zdCBs ZHMgPSAmY3Jjcy0+bGRzOworCisgICAgRUdDX0dDOworCisgICAgc3dpdGNoKHN0YXR1cykgewor ICAgIGNhc2UgTElCWExfQ09MT19TRVRVUEVEOgorICAgICAgICAvKgorICAgICAgICAgKiBXZSB3 aWxsIGNvbWUgaGVyZSBvbmx5IHdoZW4gcmVhZGluZyBlbXVsYXRvciB4ZW5zdG9yZSBkYXRhIG9y CisgICAgICAgICAqIGVtdWxhdG9yIGNvbnRleHQgZmFpbHMsIGFuZCBsaWJ4bF9feGNfZG9tYWlu X3Jlc3RvcmVfZG9uZSgpCisgICAgICAgICAqIGlzIG5vdCBjYWxsZWQuIEluIHRoaXMgY2FzZSwg dGhlIG1pZ3JhdGlvbiBpcyBub3QgZmluaXNoZWQsCisgICAgICAgICAqIHNvIHdlIGNhbm5vdCBk byBmYWlsb3Zlci4KKyAgICAgICAgICovCisgICAgICAgIExPRyhFUlJPUiwgIm1pZ3JhdGlvbiBm YWlscyIpOworICAgICAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIEVSUk9SX0ZBSUwpOwor ICAgICAgICByZXR1cm47CisgICAgY2FzZSBMSUJYTF9DT0xPX1NVU1BFTkRFRDoKKyAgICBjYXNl IExJQlhMX0NPTE9fUkVTVU1FRDoKKyAgICAgICAgLyogZGlzYWJsZSBsb2dkaXJ0eSBmaXJzdCAq LworICAgICAgICBsZHMtPmNhbGxiYWNrID0gY29sb19kaXNhYmxlX2xvZ2RpcnR5X2RvbmU7Cisg ICAgICAgIGNvbG9fZGlzYWJsZV9sb2dkaXJ0eShjcnMsIGVnYyk7CisgICAgICAgIHJldHVybjsK KyAgICBkZWZhdWx0OgorICAgICAgICBMT0coRVJST1IsICJpbnZhbGlkIHN0YXR1czogJWQiLCBz dGF0dXMpOworICAgICAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIEVSUk9SX0ZBSUwpOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgZG9fZmFpbG92ZXJfZG9uZShsaWJ4bF9fZWdjICplZ2Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2tw b2ludF9zdGF0ZSogY3JjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQor eworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jj cy0+Y3JzLCAqZGNzLCBjcnMpOworCisgICAgLyogQ29udmVuaWVuY2UgYWxpYXNlcyAqLworICAg IGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNvbnN0IGNycyA9IGNyY3MtPmNyczsKKworICAg IEVHQ19HQzsKKworICAgIGlmIChyYykKKyAgICAgICAgTE9HKEVSUk9SLCAiY2Fubm90IGRvIGZh aWxvdmVyIik7CisKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3RlYXJkb3duX2RvbmUoZWdjLCBj cnMsIHJjKTsKK30KKworc3RhdGljIHZvaWQgY29sb19kaXNhYmxlX2xvZ2RpcnR5X2RvbmUobGli eGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfX2xvZ2RpcnR5X3N3aXRjaCAqbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9z dGF0ZSAqY3JjcyA9IENPTlRBSU5FUl9PRihsZHMsICpjcmNzLCBsZHMpOworCisgICAgRUdDX0dD OworCisgICAgaWYgKHJjKQorICAgICAgICBMT0coV0FSTiwgImNhbm5vdCBkaXNhYmxlIGxvZ2Rp cnR5Iik7CisKKyAgICBpZiAoY3Jjcy0+c3RhdHVzID09IExJQlhMX0NPTE9fU1VTUEVOREVEKSB7 CisgICAgICAgIC8qCisgICAgICAgICAqIGZhaWxvdmVyIHdoZW4gcmVhZGluZyBzdGF0ZSBmcm9t IG1hc3Rlciwgc28gbm8gbmVlZCB0bworICAgICAgICAgKiBjYWxsIGxpYnhsX19xbXBfcmVzdG9y ZSgpLgorICAgICAgICAgKi8KKyAgICAgICAgY29sb19yZXN1bWVfdm0oZWdjLCBjcmNzLCAwKTsK KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIElmIHdlIGNhbm5vdCBkaXNhYmxlIGxv Z2RpcnR5LCB3ZSBzdGlsbCBjYW4gZG8gZmFpbG92ZXIgKi8KKyAgICBjcmNzLT5jYWxsYmFjayhl Z2MsIGNyY3MsIDApOworfQorCitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX3RlYXJk b3duX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgbGli eGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcnMsICpkY3MsIGNy cyk7CisgICAgRUdDX0dDOworCisgICAgLyogY29udmVuaWVuY2UgYWxpYXNlcyAqLworICAgIGNv bnN0IGludCBkb21pZCA9IGNycy0+ZG9taWQ7CisgICAgY29uc3QgbGlieGxfY3R4ICpjb25zdCBj dHggPSBsaWJ4bF9fZ2Nfb3duZXIoZ2MpOworICAgIHhjX2ludGVyZmFjZSAqY29uc3QgeGNoID0g Y3R4LT54Y2g7CisKKyAgICBpZiAoIXJjKQorICAgICAgICAvKiBmYWlsb3Zlciwgbm8gbmVlZCB0 byBkZXN0cm95IHRoZSBzZWNvbmRhcnkgdm0gKi8KKyAgICAgICAgZ290byBvdXQ7CisKKyAgICB4 Y19kb21haW5fZGVzdHJveSh4Y2gsIGRvbWlkKTsKKworb3V0OgorICAgIGlmIChjcnMtPnNhdmVk X2NiKSB7CisgICAgICAgIGRjcy0+Y2FsbGJhY2sgPSBjcnMtPnNhdmVkX2NiOworICAgICAgICBj cnMtPnNhdmVkX2NiID0gTlVMTDsKKyAgICB9CisKKyAgICBkY3MtPmNhbGxiYWNrKGVnYywgZGNz LCByYywgY3JzLT5kb21pZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fY29tbW9uX3dyaXRlX3N0 cmVhbV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfc3RhdGUgKnN0cmVhbSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYyk7CitzdGF0aWMgdm9pZCBj b2xvX2NvbW1vbl9yZWFkX3N0cmVhbV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlICpz dHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYyk7 CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT0gY29sbzogY2hlY2twb2ludCA9PT09PT09PT09 PT09PT09PT09PT09PSAqLworLyoKKyAqIERvIHRoZSBmb2xsb3dpbmcgdGhpbmdzIHdoZW4gcmVz dW1pbmcgc2Vjb25kYXJ5IHZtOgorICogIDEuIHJlYWQgZW11bGF0b3IgeGVuc3RvcmUgZGF0YQor ICogIDIuIHJlYWQgZW11bGF0b3IgY29udGV4dAorICogIDMuIFJFQ19UWVBFX0NIRUNLUE9JTlRf RU5ECisgKi8KK3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX2NoZWNrcG9p bnRfY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKyAgICBsaWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUg KnNocyA9IGRhdGE7CisgICAgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlICpzcnMgPSBDT05UQUlO RVJfT0Yoc2hzLCAqc3JzLCBzaHMpOworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpk Y3MgPSBDT05UQUlORVJfT0Yoc3JzLCAqZGNzLCBzcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3Rv cmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IGRjcy0+Y3JzLmNyY3M7CisKKyAgICBjcmNzLT5j YWxsYmFjayA9IE5VTEw7CisgICAgZGNzLT5zcnMuY2hlY2twb2ludF9jYWxsYmFjayA9IGNvbG9f Y29tbW9uX3JlYWRfc3RyZWFtX2RvbmU7CisgICAgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXJ0X2No ZWNrcG9pbnQoc2hzLT5lZ2MsICZkY3MtPnNycyk7Cit9CisKKworLyogPT09PT09PT09PT09PT09 PT09PT09IGNvbG86IHJlc3VtZSBzZWNvbmRhcnkgdm0gPT09PT09PT09PT09PT09PT09PT09ICov CisvKgorICogRG8gdGhlIGZvbGxvd2luZyB0aGluZ3Mgd2hlbiByZXN1bWluZyBzZWNvbmRhcnkg dm0gdGhlIGZpcnN0IHRpbWU6CisgKiAgMS4gcmVzdW1lIHNlY29uZGFyeSB2bQorICogIDIuIGVu YWJsZSBsb2cgZGlydHkKKyAqICAzLiBzZXR1cCBjaGVja3BvaW50IGRldmljZXMKKyAqICA0LiB3 cml0ZSBDSEVDS1BPSU5UX1NWTV9SRUFEWQorICogIDUuIHVucGF1c2Ugc2Vjb25kYXJ5IHZtCisg KiAgNi4gd3JpdGUgQ0hFQ0tQT0lOVF9TVk1fUkVTVU1FRAorICoKKyAqIERvIHRoZSBmb2xsb3dp bmcgdGhpbmdzIHdoZW4gcmVzdW1pbmcgc2Vjb25kYXJ5IHZtOgorICogIDEuIHdyaXRlIENIRUNL UE9JTlRfU1ZNX1JFQURZCisgKiAgMi4gcmVzdW1lIHNlY29uZGFyeSB2bQorICogIDMuIHdyaXRl IENIRUNLUE9JTlRfU1ZNX1JFU1VNRUQKKyAqLworc3RhdGljIHZvaWQgY29sb19zZW5kX3N2bV9y ZWFkeShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3Jjcyk7CitzdGF0aWMgdm9pZCBj b2xvX3NlbmRfc3ZtX3JlYWR5X2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0 ZSAqY3JjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpOwor c3RhdGljIHZvaWQgY29sb19yZXN0b3JlX3ByZXJlc3VtZV9jYihsaWJ4bF9fZWdjICplZ2MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jaGVja3BvaW50X2Rl dmljZXNfc3RhdGUgKmNkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHJjKTsKK3N0YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV9yZXN1bWVfdm0obGlieGxfX2VnYyAq ZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0 b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MpOworc3RhdGljIHZvaWQgY29sb19yZXN1bWVfdm1f ZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHJjKTsKK3N0YXRpYyB2b2lkIGNvbG9fd3JpdGVfc3ZtX3Jl c3VtZWQobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MpOworc3RhdGljIHZv aWQgY29sb19lbmFibGVfbG9nZGlydHlfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19sb2dkaXJ0eV9zd2l0Y2ggKmxkcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHZhbCk7CitzdGF0 aWMgdm9pZCBjb2xvX3JlZW5hYmxlX2xvZ2RpcnR5KGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2xvZ2RpcnR5X3N3aXRjaCAqbGRzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpOworc3RhdGljIHZvaWQg Y29sb19yZWVuYWJsZV9sb2dkaXJ0eV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpsZHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKTsKK3N0YXRp YyB2b2lkIGNvbG9fc2V0dXBfY2hlY2twb2ludF9kZXZpY2VzKGxpYnhsX19lZ2MgKmVnYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3Rv cmVfc3RhdGUgKmNycyk7CitzdGF0aWMgdm9pZCBjb2xvX3Jlc3RvcmVfc2V0dXBfY2RzX2RvbmUo bGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfc3RhdGUgKmNkcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpOworc3RhdGljIHZvaWQgY29sb191bnBhdXNl X3N2bShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3Jjcyk7CisKK3N0YXRpYyB2b2lkIGxp YnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX3Jlc3VtZV9jYWxsYmFjayh2b2lkICpkYXRhKQorewor ICAgIGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqc2hzID0gZGF0YTsKKyAgICBsaWJ4bF9fc3Ry ZWFtX3JlYWRfc3RhdGUgKnNycyA9IENPTlRBSU5FUl9PRihzaHMsICpzcnMsIHNocyk7CisgICAg bGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihzcnMsICpkY3Ms IHNycyk7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzID0g ZGNzLT5jcnMuY3JjczsKKworICAgIGlmIChjcmNzLT50ZWFyZG93bl9kZXZpY2VzKQorICAgICAg ICBjb2xvX3NlbmRfc3ZtX3JlYWR5KHNocy0+ZWdjLCBjcmNzKTsKKyAgICBlbHNlCisgICAgICAg IGNvbG9fcmVzdG9yZV9yZXN1bWVfdm0oc2hzLT5lZ2MsIGNyY3MpOworfQorCitzdGF0aWMgdm9p ZCBjb2xvX3NlbmRfc3ZtX3JlYWR5KGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3Mp Cit7CisgICAgbGlieGxfc3JfY2hlY2twb2ludF9zdGF0ZSBzcmNzID0geyAuaWQgPSBDSEVDS1BP SU5UX1NWTV9SRUFEWSB9OworCisgICAgY3Jjcy0+Y2FsbGJhY2sgPSBjb2xvX3NlbmRfc3ZtX3Jl YWR5X2RvbmU7CisgICAgY3Jjcy0+c3dzLmNoZWNrcG9pbnRfY2FsbGJhY2sgPSBjb2xvX2NvbW1v bl93cml0ZV9zdHJlYW1fZG9uZTsKKyAgICBsaWJ4bF9fc3RyZWFtX3dyaXRlX2NoZWNrcG9pbnRf c3RhdGUoZWdjLCAmY3Jjcy0+c3dzLCAmc3Jjcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fc2Vu ZF9zdm1fcmVhZHlfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBs aWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNyY3MtPmNycywg KmRjcywgY3JzKTsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBsaWJ4bF9f Y2hlY2twb2ludF9kZXZpY2VzX3N0YXRlICpjZHMgPSAmZGNzLT5jZHM7CisKKyAgICBpZiAoIWNy Y3MtPnByZXJlc3VtZSkgeworICAgICAgICBjcmNzLT5wcmVyZXN1bWUgPSB0cnVlOworICAgICAg ICBjb2xvX3VucGF1c2Vfc3ZtKGVnYywgY3Jjcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK KyAgICBjZHMtPmNhbGxiYWNrID0gY29sb19yZXN0b3JlX3ByZXJlc3VtZV9jYjsKKyAgICBsaWJ4 bF9fY2hlY2twb2ludF9kZXZpY2VzX3ByZXJlc3VtZShlZ2MsIGNkcyk7Cit9CisKK3N0YXRpYyB2 b2lkIGNvbG9fcmVzdG9yZV9wcmVyZXN1bWVfY2IobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3N0 YXRlICpjZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykK K3sKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMgPSBjZHMtPmNvbmNyZXRlX2Rh dGE7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihj cnMsICpkY3MsIGNycyk7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRl ICpjcmNzID0gY3JzLT5jcmNzOworCisgICAgLyogQ29udmVuaWVuY2UgYWxpYXNlcyAqLworICAg IGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqY29uc3Qgc2hzID0gJmRjcy0+c3JzLnNoczsKKwor ICAgIEVHQ19HQzsKKworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1IsICJwcmVyZXN1 bWUgZmFpbHMiKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgY29sb19yZXN0b3Jl X3Jlc3VtZV92bShlZ2MsIGNyY3MpOworCisgICAgcmV0dXJuOworCitvdXQ6CisgICAgbGlieGxf X3hjX2RvbWFpbl9zYXZlcmVzdG9yZV9hc3luY19jYWxsYmFja19kb25lKGVnYywgc2hzLCAwKTsK K30KKworc3RhdGljIHZvaWQgY29sb19yZXN0b3JlX3Jlc3VtZV92bShsaWJ4bF9fZWdjICplZ2Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVf Y2hlY2twb2ludF9zdGF0ZSAqY3JjcykKK3sKKworICAgIGNyY3MtPmNhbGxiYWNrID0gY29sb19y ZXN1bWVfdm1fZG9uZTsKKyAgICBjb2xvX3Jlc3VtZV92bShlZ2MsIGNyY3MsIDEpOworfQorCitz dGF0aWMgdm9pZCBjb2xvX3Jlc3VtZV92bV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0 YXRlICpjcmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7Cisg ICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcmNzLT5j cnMsICpkY3MsIGNycyk7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGli eGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY29uc3QgY3JzID0gY3Jjcy0+Y3JzOworICAgIGxpYnhs X19sb2dkaXJ0eV9zd2l0Y2ggKmNvbnN0IGxkcyA9ICZjcmNzLT5sZHM7CisgICAgbGlieGxfX3Nh dmVfaGVscGVyX3N0YXRlICpjb25zdCBzaHMgPSAmZGNzLT5zcnMuc2hzOworCisgICAgRUdDX0dD OworCisgICAgaWYgKHJjKSB7CisgICAgICAgIExPRyhFUlJPUiwgImNhbm5vdCByZXN1bWUgc2Vj b25kYXJ5IHZtIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGNyY3MtPnN0YXR1 cyA9IExJQlhMX0NPTE9fUkVTVU1FRDsKKworICAgIC8qIGF2b2lkIGNhbGxpbmcgc3RyZWFtLT5j b21wbGV0aW9uX2NhbGxiYWNrKCkgbW9yZSB0aGFuIG9uY2UgKi8KKyAgICBpZiAoY3JzLT5zYXZl ZF9jYikgeworICAgICAgICBkY3MtPmNhbGxiYWNrID0gY3JzLT5zYXZlZF9jYjsKKyAgICAgICAg Y3JzLT5zYXZlZF9jYiA9IE5VTEw7CisKKyAgICAgICAgZGNzLT5zcnMuY29tcGxldGlvbl9jYWxs YmFjayA9IE5VTEw7CisKKyAgICAgICAgbGRzLT5jYWxsYmFjayA9IGNvbG9fZW5hYmxlX2xvZ2Rp cnR5X2RvbmU7CisgICAgICAgIGNvbG9fZW5hYmxlX2xvZ2RpcnR5KGNycywgZWdjKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbG9fd3JpdGVfc3ZtX3Jlc3VtZWQoZWdjLCBjcmNz KTsKKyAgICByZXR1cm47CisKK291dDoKKyAgICBsaWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3Jl X2FzeW5jX2NhbGxiYWNrX2RvbmUoZWdjLCBzaHMsIDApOworfQorCitzdGF0aWMgdm9pZCBjb2xv X3dyaXRlX3N2bV9yZXN1bWVkKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNz KQoreworICAgIGxpYnhsX3NyX2NoZWNrcG9pbnRfc3RhdGUgc3JjcyA9IHsgLmlkID0gQ0hFQ0tQ T0lOVF9TVk1fUkVTVU1FRCB9OworCisgICAgY3Jjcy0+Y2FsbGJhY2sgPSBOVUxMOworICAgIGNy Y3MtPnN3cy5jaGVja3BvaW50X2NhbGxiYWNrID0gY29sb19jb21tb25fd3JpdGVfc3RyZWFtX2Rv bmU7CisgICAgbGlieGxfX3N0cmVhbV93cml0ZV9jaGVja3BvaW50X3N0YXRlKGVnYywgJmNyY3Mt PnN3cywgJnNyY3MpOworfQorCitzdGF0aWMgdm9pZCBjb2xvX2VuYWJsZV9sb2dkaXJ0eV9kb25l KGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2xvZ2RpcnR5X3N3aXRjaCAqbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgcmMpCit7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50 X3N0YXRlICpjcmNzID0gQ09OVEFJTkVSX09GKGxkcywgKmNyY3MsIGxkcyk7CisKKyAgICAvKiBD b252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY29u c3QgY3JzID0gY3Jjcy0+Y3JzOworCisgICAgRUdDX0dDOworCisgICAgaWYgKHJjKSB7CisgICAg ICAgIC8qCisgICAgICAgICAqIGxvZy1kaXJ0eSBhbHJlYWR5IGVuYWJsZWQ/IFRoZXJlJ3Mgbm8g dGVzdCBvcCwKKyAgICAgICAgICogc28gYXR0ZW1wdCB0byBkaXNhYmxlIHRoZW4gcmVlbmFibGUg aXQKKyAgICAgICAgICovCisgICAgICAgIGxkcy0+Y2FsbGJhY2sgPSBjb2xvX3JlZW5hYmxlX2xv Z2RpcnR5OworICAgICAgICBjb2xvX2Rpc2FibGVfbG9nZGlydHkoY3JzLCBlZ2MpOworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgY29sb19zZXR1cF9jaGVja3BvaW50X2RldmljZXMoZWdj LCBjcnMpOworfQorCitzdGF0aWMgdm9pZCBjb2xvX3JlZW5hYmxlX2xvZ2RpcnR5KGxpYnhsX19l Z2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2xvZ2Rp cnR5X3N3aXRjaCAqbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg cmMpCit7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzID0g Q09OVEFJTkVSX09GKGxkcywgKmNyY3MsIGxkcyk7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVf c3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcmNzLT5jcnMsICpkY3MsIGNycyk7CisKKyAgICAv KiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAq Y29uc3QgY3JzID0gY3Jjcy0+Y3JzOworICAgIGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqY29u c3Qgc2hzID0gJmRjcy0+c3JzLnNoczsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykgewor ICAgICAgICBMT0coRVJST1IsICJjYW5ub3QgZW5hYmxlIGxvZ2RpcnR5Iik7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIGxkcy0+Y2FsbGJhY2sgPSBjb2xvX3JlZW5hYmxlX2xvZ2Rp cnR5X2RvbmU7CisgICAgY29sb19lbmFibGVfbG9nZGlydHkoY3JzLCBlZ2MpOworCisgICAgcmV0 dXJuOworCitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFpbl9zYXZlcmVzdG9yZV9hc3luY19jYWxs YmFja19kb25lKGVnYywgc2hzLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29sb19yZWVuYWJsZV9s b2dkaXJ0eV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpsZHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19jb2xvX3Jl c3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IENPTlRBSU5FUl9PRihsZHMsICpjcmNzLCBs ZHMpOworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0Yo Y3Jjcy0+Y3JzLCAqZGNzLCBjcnMpOworCisgICAgLyogQ29udmVuaWVuY2UgYWxpYXNlcyAqLwor ICAgIGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqY29uc3Qgc2hzID0gJmRjcy0+c3JzLnNoczsK KworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1IsICJjYW5u b3QgZW5hYmxlIGxvZ2RpcnR5Iik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGNv bG9fc2V0dXBfY2hlY2twb2ludF9kZXZpY2VzKGVnYywgY3Jjcy0+Y3JzKTsKKworICAgIHJldHVy bjsKKworb3V0OgorICAgIGxpYnhsX194Y19kb21haW5fc2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJh Y2tfZG9uZShlZ2MsIHNocywgMCk7Cit9CisKKy8qCisgKiBXZSBjYW5ub3Qgc2V0dXAgY2hlY2tw b2ludCBkZXZpY2VzIGluIGxpYnhsX19jb2xvX3Jlc3RvcmVfc2V0dXAoKSwKKyAqIGJlY2F1c2Ug dGhlIGd1ZXN0IGlzIG5vdCByZWFkeS4KKyAqLworc3RhdGljIHZvaWQgY29sb19zZXR1cF9jaGVj a3BvaW50X2RldmljZXMobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzKQoreworICAg IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3JzLCAqZGNz LCBjcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9 IGNycy0+Y3JjczsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBsaWJ4bF9f Y2hlY2twb2ludF9kZXZpY2VzX3N0YXRlICpjZHMgPSAmZGNzLT5jZHM7CisgICAgbGlieGxfX3Nh dmVfaGVscGVyX3N0YXRlICpjb25zdCBzaHMgPSAmZGNzLT5zcnMuc2hzOworCisgICAgU1RBVEVf QU9fR0MoY3JzLT5hbyk7CisKKyAgICAvKiBUT0RPOiBkaXNrL25pYyBzdXBwb3J0ICovCisgICAg Y2RzLT5kZXZpY2Vfa2luZF9mbGFncyA9IDA7CisgICAgY2RzLT5jYWxsYmFjayA9IGNvbG9fcmVz dG9yZV9zZXR1cF9jZHNfZG9uZTsKKyAgICBjZHMtPmFvID0gYW87CisgICAgY2RzLT5kb21pZCA9 IGNycy0+ZG9taWQ7CisgICAgY2RzLT5vcHMgPSBjb2xvX3Jlc3RvcmVfb3BzOworCisgICAgaWYg KGluaXRfZGV2aWNlX3N1YmtpbmQoY2RzKSkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBjcmNz LT50ZWFyZG93bl9kZXZpY2VzID0gMTsKKworICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNf c2V0dXAoZWdjLCBjZHMpOworICAgIHJldHVybjsKKworb3V0OgorICAgIGxpYnhsX194Y19kb21h aW5fc2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJhY2tfZG9uZShlZ2MsIHNocywgMCk7Cit9CisKK3N0 YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV9zZXR1cF9jZHNfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NoZWNrcG9pbnRf ZGV2aWNlc19zdGF0ZSAqY2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCByYykKK3sKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMgPSBjZHMt PmNvbmNyZXRlX2RhdGE7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENP TlRBSU5FUl9PRihjcnMsICpkY3MsIGNycyk7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVj a3BvaW50X3N0YXRlICpjcmNzID0gY3JzLT5jcmNzOworCisgICAgLyogQ29udmVuaWVuY2UgYWxp YXNlcyAqLworICAgIGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqY29uc3Qgc2hzID0gJmRjcy0+ c3JzLnNoczsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJS T1IsICJDT0xPOiBmYWlsZWQgdG8gc2V0dXAgZGV2aWNlIGZvciBndWVzdCB3aXRoIGRvbWlkICV1 IiwKKyAgICAgICAgICAgIGNkcy0+ZG9taWQpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisK KyAgICBjb2xvX3NlbmRfc3ZtX3JlYWR5KGVnYywgY3Jjcyk7CisKKyAgICByZXR1cm47CisKK291 dDoKKyAgICBsaWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNrX2RvbmUo ZWdjLCBzaHMsIDApOworfQorCitzdGF0aWMgdm9pZCBjb2xvX3VucGF1c2Vfc3ZtKGxpYnhsX19l Z2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9y ZV9jaGVja3BvaW50X3N0YXRlICpjcmNzKQoreworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0 YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3JzLCAqZGNzLCBjcnMpOworICAgIGludCBy YzsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBjb25zdCB1aW50MzJfdCBk b21pZCA9IGNyY3MtPmNycy0+ZG9taWQ7CisgICAgbGlieGxfX3NhdmVfaGVscGVyX3N0YXRlICpj b25zdCBzaHMgPSAmZGNzLT5zcnMuc2hzOworCisgICAgRUdDX0dDOworCisgICAgLyogV2UgaGF2 ZSBlbmFibGVkIHNlY29uZGFyeSB2bSdzIGxvZ2RpcnR5LCBzbyB3ZSBjYW4gdW5wYXVzZSBpdCBu b3cgKi8KKyAgICByYyA9IGxpYnhsX2RvbWFpbl91bnBhdXNlKENUWCwgZG9taWQpOworICAgIGlm IChyYykgeworICAgICAgICBMT0coRVJST1IsICJjYW5ub3QgdW5wYXVzZSBzZWNvbmRhcnkgdm0i KTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgY29sb193cml0ZV9zdm1fcmVzdW1l ZChlZ2MsIGNyY3MpOworCisgICAgcmV0dXJuOworCitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFp bl9zYXZlcmVzdG9yZV9hc3luY19jYWxsYmFja19kb25lKGVnYywgc2hzLCAwKTsKK30KKworCisv KiA9PT09PT09PT09PT09PT09PT09PT0gY29sbzogd2FpdCBuZXcgY2hlY2twb2ludCA9PT09PT09 PT09PT09PT09PT09PT0gKi8KK3N0YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV9jb21taXRfY2IobGli eGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f Y2hlY2twb2ludF9kZXZpY2VzX3N0YXRlICpjZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCByYyk7CitzdGF0aWMgdm9pZCBjb2xvX3N0cmVhbV9yZWFkX2RvbmUobGli eGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19j b2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgcmVhbF9zaXplKTsKKworc3RhdGljIHZvaWQgbGlieGxfX2NvbG9f cmVzdG9yZV9kb21haW5fd2FpdF9jaGVja3BvaW50X2NhbGxiYWNrKHZvaWQgKmRhdGEpCit7Cisg ICAgbGlieGxfX3NhdmVfaGVscGVyX3N0YXRlICpzaHMgPSBkYXRhOworICAgIGxpYnhsX19zdHJl YW1fcmVhZF9zdGF0ZSAqc3JzID0gQ09OVEFJTkVSX09GKHNocywgKnNycywgc2hzKTsKKyAgICBs aWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKHNycywgKmRjcywg c3JzKTsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBsaWJ4bF9fY2hlY2tw b2ludF9kZXZpY2VzX3N0YXRlICpjZHMgPSAmZGNzLT5jZHM7CisKKyAgICBjZHMtPmNhbGxiYWNr ID0gY29sb19yZXN0b3JlX2NvbW1pdF9jYjsKKyAgICBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2Vz X2NvbW1pdChzaHMtPmVnYywgY2RzKTsKK30KKworc3RhdGljIHZvaWQgY29sb19yZXN0b3JlX2Nv bW1pdF9jYihsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfc3RhdGUgKmNkcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVf c3RhdGUgKmNycyA9IGNkcy0+Y29uY3JldGVfZGF0YTsKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0 ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNycywgKmRjcywgY3JzKTsKKyAgICBsaWJ4bF9f Y29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBjcnMtPmNyY3M7CisKKyAgICBF R0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiY29tbWl0IGZhaWxz Iik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGNyY3MtPmNhbGxiYWNrID0gY29s b19zdHJlYW1fcmVhZF9kb25lOworICAgIGRjcy0+c3JzLmNoZWNrcG9pbnRfY2FsbGJhY2sgPSBj b2xvX2NvbW1vbl9yZWFkX3N0cmVhbV9kb25lOworICAgIGxpYnhsX19zdHJlYW1fcmVhZF9jaGVj a3BvaW50X3N0YXRlKGVnYywgJmRjcy0+c3JzKTsKKworICAgIHJldHVybjsKKworb3V0OgorICAg IGxpYnhsX194Y19kb21haW5fc2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJhY2tfZG9uZShlZ2MsICZk Y3MtPnNycy5zaHMsIDApOworfQorCitzdGF0aWMgdm9pZCBjb2xvX3N0cmVhbV9yZWFkX2RvbmUo bGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaWQpCit7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3Rh dGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcmNzLT5jcnMsICpkY3MsIGNycyk7CisgICAgaW50IG9r ID0gMDsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChpZCAhPSBDSEVDS1BPSU5UX05FVykgewor ICAgICAgICBMT0coRVJST1IsICJpbnZhbGlkIHNlY3Rpb246ICVkIiwgaWQpOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisKKyAgICBvayA9IDE7CisKK291dDoKKyAgICBsaWJ4bF9feGNfZG9t YWluX3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNrX2RvbmUoZWdjLCAmZGNzLT5zcnMuc2hzLCBv ayk7Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09IGNvbG86IHN1c3BlbmQgc2Vjb25k YXJ5IHZtID09PT09PT09PT09PT09PT09PT09PSAqLworLyoKKyAqIERvIHRoZSBmb2xsb3dpbmcg dGhpbmdzIHdoZW4gcmVzdW1pbmcgc2Vjb25kYXJ5IHZtOgorICogIDEuIHN1c3BlbmQgc2Vjb25k YXJ5IHZtCisgKiAgMi4gc2VuZCBDSEVDS1BPSU5UX1NWTV9TVVNQRU5ERUQKKyAqLworc3RhdGlj IHZvaWQgY29sb19zdXNwZW5kX3ZtX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RvbWFpbl9zdXNwZW5kX3N0YXRlICpkc3BzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9rKTsKK3N0YXRpYyB2b2lkIGNv bG9fcmVzdG9yZV9wb3N0c3VzcGVuZF9jYihsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0 ZSAqY2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYyk7 CisKK3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX3N1c3BlbmRfY2FsbGJh Y2sodm9pZCAqZGF0YSkKK3sKKyAgICBsaWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUgKnNocyA9IGRh dGE7CisgICAgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlICpzcnMgPSBDT05UQUlORVJfT0Yoc2hz LCAqc3JzLCBzaHMpOworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05U QUlORVJfT0Yoc3JzLCAqZGNzLCBzcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2tw b2ludF9zdGF0ZSAqY3JjcyA9IGRjcy0+Y3JzLmNyY3M7CisKKyAgICBTVEFURV9BT19HQyhkY3Mt PmFvKTsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBsaWJ4bF9fZG9tYWlu X3N1c3BlbmRfc3RhdGUgKmNvbnN0IGRzcHMgPSAmY3Jjcy0+ZHNwczsKKworICAgIC8qIHN1c3Bl bmQgc2Vjb25kYXJ5IHZtICovCisgICAgZHNwcy0+Y2FsbGJhY2tfY29tbW9uX2RvbmUgPSBjb2xv X3N1c3BlbmRfdm1fZG9uZTsKKworICAgIGxpYnhsX19kb21haW5fc3VzcGVuZChzaHMtPmVnYywg ZHNwcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fc3VzcGVuZF92bV9kb25lKGxpYnhsX19lZ2Mg KmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kb21haW5fc3Vz cGVuZF9zdGF0ZSAqZHNwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBy YykKK3sKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBD T05UQUlORVJfT0YoZHNwcywgKmNyY3MsIGRzcHMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVf c3RhdGUgKmNycyA9IGNyY3MtPmNyczsKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAq ZGNzID0gQ09OVEFJTkVSX09GKGNycywgKmRjcywgY3JzKTsKKworICAgIC8qIENvbnZlbmllbmNl IGFsaWFzZXMgKi8KKyAgICBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3N0YXRlICpjZHMgPSAm ZGNzLT5jZHM7CisKKyAgICBFR0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVS Uk9SLCAiY2Fubm90IHN1c3BlbmQgc2Vjb25kYXJ5IHZtIik7CisgICAgICAgIGdvdG8gb3V0Owor ICAgIH0KKworICAgIGNyY3MtPnN0YXR1cyA9IExJQlhMX0NPTE9fU1VTUEVOREVEOworCisgICAg Y2RzLT5jYWxsYmFjayA9IGNvbG9fcmVzdG9yZV9wb3N0c3VzcGVuZF9jYjsKKyAgICBsaWJ4bF9f Y2hlY2twb2ludF9kZXZpY2VzX3Bvc3RzdXNwZW5kKGVnYywgY2RzKTsKKworICAgIHJldHVybjsK Kworb3V0OgorICAgIGxpYnhsX194Y19kb21haW5fc2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJhY2tf ZG9uZShlZ2MsICZkY3MtPnNycy5zaHMsICFyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fcmVz dG9yZV9wb3N0c3VzcGVuZF9jYihsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2Rz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAg ICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMgPSBjZHMtPmNvbmNyZXRlX2RhdGE7Cisg ICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcnMsICpk Y3MsIGNycyk7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNz ID0gY3JzLT5jcmNzOworICAgIGxpYnhsX3NyX2NoZWNrcG9pbnRfc3RhdGUgc3JjcyA9IHsgLmlk ID0gQ0hFQ0tQT0lOVF9TVk1fU1VTUEVOREVEIH07CisKKyAgICBFR0NfR0M7CisKKyAgICBpZiAo cmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAicG9zdHN1c3BlbmQgZmFpbHMiKTsKKyAgICAgICAg Z290byBvdXQ7CisgICAgfQorCisgICAgY3Jjcy0+Y2FsbGJhY2sgPSBOVUxMOworICAgIGNyY3Mt PnN3cy5jaGVja3BvaW50X2NhbGxiYWNrID0gY29sb19jb21tb25fd3JpdGVfc3RyZWFtX2RvbmU7 CisgICAgbGlieGxfX3N0cmVhbV93cml0ZV9jaGVja3BvaW50X3N0YXRlKGVnYywgJmNyY3MtPnN3 cywgJnNyY3MpOworCisgICAgcmV0dXJuOworCitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFpbl9z YXZlcmVzdG9yZV9hc3luY19jYWxsYmFja19kb25lKGVnYywgJmRjcy0+c3JzLnNocywgIXJjKTsK K30KKworCisvKiA9PT09PT09PT09PT09PT09PT09PT0gY29sbzogY29tbW9uIGNhbGxiYWNrID09 PT09PT09PT09PT09PT09PT09PSAqLworc3RhdGljIHZvaWQgY29sb19jb21tb25fd3JpdGVfc3Ry ZWFtX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX3N0cmVhbV93cml0ZV9zdGF0ZSAqc3RyZWFtLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19j b2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9CisgICAgICAgIENPTlRBSU5FUl9P RihzdHJlYW0sICpjcmNzLCBzd3MpOworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpk Y3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3JzLCAqZGNzLCBjcnMpOworICAgIGludCBvazsKKwor ICAgIEVHQ19HQzsKKworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgLyogVE9ETzogaXQgbWF5 IGJlIGEgaW50ZXJuYWwgZXJyb3IsIGJ1dCB3ZSBkb24ndCBrbm93ICovCisgICAgICAgIExPRyhF UlJPUiwgInNlbmRpbmcgZGF0YSBmYWlscyIpOworICAgICAgICBvayA9IDI7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIGlmICghY3Jjcy0+Y2FsbGJhY2spIHsKKyAgICAgICAgLyog RXZlcnl0aGlucyBpcyBPSyAqLworICAgICAgICBvayA9IDE7CisgICAgICAgIGdvdG8gb3V0Owor ICAgIH0KKworICAgIGNyY3MtPmNhbGxiYWNrKGVnYywgY3JjcywgMCk7CisKKyAgICByZXR1cm47 CisKK291dDoKKyAgICBsaWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNr X2RvbmUoZWdjLCAmZGNzLT5zcnMuc2hzLCBvayk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fY29t bW9uX3JlYWRfc3RyZWFtX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fc3RyZWFtX3JlYWRfc3RhdGUgKnN0cmVhbSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAg IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0Yoc3RyZWFtLCAq ZGNzLCBzcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3Jj cyA9IGRjcy0+Y3JzLmNyY3M7CisgICAgaW50IG9rOworCisgICAgRUdDX0dDOworCisgICAgaWYg KHJjIDwgMCkgeworICAgICAgICAvKiBUT0RPOiBpdCBtYXkgYmUgYSBpbnRlcm5hbCBlcnJvciwg YnV0IHdlIGRvbid0IGtub3cgKi8KKyAgICAgICAgTE9HKEVSUk9SLCAicmVhZGluZyBkYXRhIGZh aWxzIik7CisgICAgICAgIG9rID0gMjsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAg aWYgKCFjcmNzLT5jYWxsYmFjaykgeworICAgICAgICAvKiBFdmVyeXRoaW5zIGlzIE9LICovCisg ICAgICAgIG9rID0gMTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogcmMgY29u dGFpbnMgdGhlIGlkICovCisgICAgY3Jjcy0+Y2FsbGJhY2soZWdjLCBjcmNzLCByYyk7CisKKyAg ICByZXR1cm47CisKK291dDoKKyAgICBsaWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3JlX2FzeW5j X2NhbGxiYWNrX2RvbmUoZWdjLCAmZGNzLT5zcnMuc2hzLCBvayk7Cit9CmRpZmYgLS1naXQgYS90 b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCmlu ZGV4IGZjNzQ2ZmIuLjczMDFhYzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0 ZS5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCkBAIC05ODEsNiArOTgxLDIzIEBA IHN0YXRpYyB2b2lkIGRvbWNyZWF0ZV9jb25zb2xlX2F2YWlsYWJsZShsaWJ4bF9fZWdjICplZ2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNzLT5hb3BfY29uc29s ZV9ob3cuZm9yX2V2ZW50KSk7CiB9CiAKK3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX3Jlc3RvcmVf c2V0dXBfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBsaWJ4bF9f ZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNycywgKmRjcywgY3JzKTsK KworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1IsICJjb2xv IHJlc3RvcmUgc2V0dXAgZmFpbHM6ICVkIiwgcmMpOworICAgICAgICBkb21jcmVhdGVfc3RyZWFt X2RvbmUoZWdjLCAmZGNzLT5zcnMsIHJjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg IGxpYnhsX19zdHJlYW1fcmVhZF9zdGFydChlZ2MsICZkY3MtPnNycyk7Cit9CisKIHN0YXRpYyB2 b2lkIGRvbWNyZWF0ZV9ib290bG9hZGVyX2RvbmUobGlieGxfX2VnYyAqZWdjLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYm9vdGxvYWRlcl9zdGF0ZSAqYmws CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKQEAgLTk5NCw2 ICsxMDExLDggQEAgc3RhdGljIHZvaWQgZG9tY3JlYXRlX2Jvb3Rsb2FkZXJfZG9uZShsaWJ4bF9f ZWdjICplZ2MsCiAgICAgY29uc3QgaW50IHJlc3RvcmVfZmQgPSBkY3MtPnJlc3RvcmVfZmQ7CiAg ICAgbGlieGxfX2RvbWFpbl9idWlsZF9zdGF0ZSAqY29uc3Qgc3RhdGUgPSAmZGNzLT5idWlsZF9z dGF0ZTsKICAgICBjb25zdCBpbnQgY2hlY2twb2ludGVkX3N0cmVhbSA9IGRjcy0+cmVzdG9yZV9w YXJhbXMuY2hlY2twb2ludGVkX3N0cmVhbTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRl ICpjb25zdCBjcnMgPSAmZGNzLT5jcnM7CisgICAgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmNv bnN0IGluZm8gPSAmZF9jb25maWctPmJfaW5mbzsKIAogICAgIGlmIChyYykgewogICAgICAgICBk b21jcmVhdGVfcmVidWlsZF9kb25lKGVnYywgZGNzLCByYyk7CkBAIC0xMDIyLDYgKzEwNDEsMTMg QEAgc3RhdGljIHZvaWQgZG9tY3JlYXRlX2Jvb3Rsb2FkZXJfZG9uZShsaWJ4bF9fZWdjICplZ2Ms CiAKICAgICAvKiBSZXN0b3JlICovCiAKKyAgICAvKiBDT0xPIG9ubHkgc3VwcG9ydHMgSFZNIG5v dyAqLworICAgIGlmIChpbmZvLT50eXBlICE9IExJQlhMX0RPTUFJTl9UWVBFX0hWTSAmJgorICAg ICAgICBjaGVja3BvaW50ZWRfc3RyZWFtID09IExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fQ09M TykgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0K KwogICAgIHJjID0gbGlieGxfX2J1aWxkX3ByZShnYywgZG9taWQsIGRfY29uZmlnLCBzdGF0ZSk7 CiAgICAgaWYgKHJjKQogICAgICAgICBnb3RvIG91dDsKQEAgLTEwMzUsNiArMTA2MSwxNiBAQCBz dGF0aWMgdm9pZCBkb21jcmVhdGVfYm9vdGxvYWRlcl9kb25lKGxpYnhsX19lZ2MgKmVnYywKIAog ICAgIGlmIChyZXN0b3JlX2ZkID49IDApIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50ZWRf c3RyZWFtKSB7CisgICAgICAgIGNhc2UgTElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9DT0xPOgor ICAgICAgICAgICAgLyogY29sbyByZXN0b3JlIHNldHVwICovCisgICAgICAgICAgICBjcnMtPmFv ID0gYW87CisgICAgICAgICAgICBjcnMtPmRvbWlkID0gZG9taWQ7CisgICAgICAgICAgICBjcnMt PnNlbmRfYmFja19mZCA9IGRjcy0+c2VuZF9iYWNrX2ZkOworICAgICAgICAgICAgY3JzLT5yZWN2 X2ZkID0gcmVzdG9yZV9mZDsKKyAgICAgICAgICAgIGNycy0+aHZtID0gKGluZm8tPnR5cGUgPT0g TElCWExfRE9NQUlOX1RZUEVfSFZNKTsKKyAgICAgICAgICAgIGNycy0+Y2FsbGJhY2sgPSBsaWJ4 bF9fY29sb19yZXN0b3JlX3NldHVwX2RvbmU7CisgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0 b3JlX3NldHVwKGVnYywgY3JzKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExJ QlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fUkVNVVM6CiAgICAgICAgICAgICBsaWJ4bF9fcmVtdXNf cmVzdG9yZV9zZXR1cChlZ2MsIGRjcyk7CiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8K ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggYi90b29scy9saWJ4bC9s aWJ4bF9pbnRlcm5hbC5oCmluZGV4IDYzMDdiNzEuLjQ4YjQ4NTggMTAwNjQ0Ci0tLSBhL3Rvb2xz L2xpYnhsL2xpYnhsX2ludGVybmFsLmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwu aApAQCAtODcsNiArODcsOCBAQAogI2luY2x1ZGUgIl9saWJ4bF90eXBlc19pbnRlcm5hbC5oIgog I2luY2x1ZGUgIl9saWJ4bF90eXBlc19pbnRlcm5hbF9qc29uLmgiCiAKKyNpbmNsdWRlICJsaWJ4 bF9jb2xvLmgiCisKICNkZWZpbmUgTElCWExfSU5JVF9USU1FT1VUIDEwCiAjZGVmaW5lIExJQlhM X0RFU1RST1lfVElNRU9VVCAxMAogI2RlZmluZSBMSUJYTF9IT1RQTFVHX1RJTUVPVVQgNDAKQEAg LTMzOTYsMTIgKzMzOTgsNiBAQCBfaGlkZGVuIGludCBsaWJ4bF9fZGVzdHJveV9xZGlza19iYWNr ZW5kKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkKTsKIAogLyotLS0tLSBEb21haW4gY3Jl YXRpb24gLS0tLS0qLwogCi10eXBlZGVmIHN0cnVjdCBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0 ZSBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZTsKLQotdHlwZWRlZiB2b2lkIGxpYnhsX19kb21h aW5fY3JlYXRlX2NiKGxpYnhsX19lZ2MgKmVnYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSosCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHJjLCB1aW50MzJfdCBkb21pZCk7Ci0KIC8qIFN0YXRl IGZvciBtYW5pcHVsYXRpbmcgYSBsaWJ4bCBtaWdyYXRpb24gdjIgc3RyZWFtICovCiB0eXBlZGVm IHN0cnVjdCBsaWJ4bF9fc3RyZWFtX3JlYWRfc3RhdGUgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRl OwogCkBAIC0zNDY4LDcgKzM0NjQsNiBAQCBsaWJ4bF9fc3RyZWFtX3JlYWRfaW51c2UoY29uc3Qg bGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlICpzdHJlYW0pCiAgICAgcmV0dXJuIHN0cmVhbS0+cnVu bmluZzsKIH0KIAotCiBzdHJ1Y3QgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgewogICAgIC8q IGZpbGxlZCBpbiBieSB1c2VyICovCiAgICAgbGlieGxfX2FvICphbzsKQEAgLTM0ODQsNiArMzQ3 OSw4IEBAIHN0cnVjdCBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSB7CiAgICAgLyogcHJpdmF0 ZSB0byBkb21haW5fY3JlYXRlICovCiAgICAgaW50IGd1ZXN0X2RvbWlkOwogICAgIGxpYnhsX19k b21haW5fYnVpbGRfc3RhdGUgYnVpbGRfc3RhdGU7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9z dGF0ZSBjcnM7CisgICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSBjZHM7CiAgICAg bGlieGxfX2Jvb3Rsb2FkZXJfc3RhdGUgYmw7CiAgICAgbGlieGxfX3N0dWJfZG1fc3Bhd25fc3Rh dGUgZG1zczsKICAgICAgICAgLyogSWYgd2UncmUgbm90IGRvaW5nIHN0dWJkb20sIHdlIHVzZSBv bmx5IGRtc3MuZG0sCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9zYXZlX2NhbGxvdXQu YyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NhdmVfY2FsbG91dC5jCmluZGV4IDBkNjk0OWEuLmQxZDQ3 NGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3NhdmVfY2FsbG91dC5jCisrKyBiL3Rv b2xzL2xpYnhsL2xpYnhsX3NhdmVfY2FsbG91dC5jCkBAIC02OCw3ICs2OCwxMSBAQCB2b2lkIGxp YnhsX194Y19kb21haW5fcmVzdG9yZShsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19kb21haW5fY3Jl YXRlX3N0YXRlICpkY3MsCiAgICAgc2hzLT5hbyA9IGFvOwogICAgIHNocy0+ZG9taWQgPSBkb21p ZDsKICAgICBzaHMtPnJlY3ZfY2FsbGJhY2sgPSBsaWJ4bF9fc3JtX2NhbGxvdXRfcmVjZWl2ZWRf cmVzdG9yZTsKLSAgICBzaHMtPmNvbXBsZXRpb25fY2FsbGJhY2sgPSBsaWJ4bF9feGNfZG9tYWlu X3Jlc3RvcmVfZG9uZTsKKyAgICBpZiAoZGNzLT5yZXN0b3JlX3BhcmFtcy5jaGVja3BvaW50ZWRf c3RyZWFtID09CisgICAgICAgIExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fQ09MTykKKyAgICAg ICAgc2hzLT5jb21wbGV0aW9uX2NhbGxiYWNrID0gbGlieGxfX2NvbG9fcmVzdG9yZV90ZWFyZG93 bjsKKyAgICBlbHNlCisgICAgICAgIHNocy0+Y29tcGxldGlvbl9jYWxsYmFjayA9IGxpYnhsX194 Y19kb21haW5fcmVzdG9yZV9kb25lOwogICAgIHNocy0+Y2FsbGVyX3N0YXRlID0gZGNzOwogICAg IHNocy0+bmVlZF9yZXN1bHRzID0gMTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxf c3RyZWFtX3JlYWQuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3N0cmVhbV9yZWFkLmMKaW5kZXggMzAy YWU1My4uOTY1OTA1MSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfc3RyZWFtX3JlYWQu YworKysgYi90b29scy9saWJ4bC9saWJ4bF9zdHJlYW1fcmVhZC5jCkBAIC04NTAsNiArODUwLDE4 IEBAIHZvaWQgbGlieGxfX3hjX2RvbWFpbl9yZXN0b3JlX2RvbmUobGlieGxfX2VnYyAqZWdjLCB2 b2lkICpkY3Nfdm9pZCwKICAgICAgKi8KICAgICBpZiAobGlieGxfX3N0cmVhbV9yZWFkX2ludXNl KHN0cmVhbSkpIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50ZWRfc3RyZWFtKSB7CisgICAg ICAgIGNhc2UgTElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9DT0xPOgorICAgICAgICAgICAgaWYg KHN0cmVhbS0+Y29tcGxldGlvbl9jYWxsYmFjaykgeworICAgICAgICAgICAgICAgIC8qCisgICAg ICAgICAgICAgICAgICogcmVzdG9yZSwganVzdCBidWlsZCB0aGUgc2Vjb25kYXJ5IHZtLCBkb24n dCBjbG9zZQorICAgICAgICAgICAgICAgICAqIHRoZSBzdHJlYW0KKyAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICBzdHJlYW0tPmNvbXBsZXRpb25fY2FsbGJhY2soZWdjLCBzdHJl YW0sIDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBmYWlsb3Zl ciwganVzdCBjbG9zZSB0aGUgc3RyZWFtICovCisgICAgICAgICAgICAgICAgc3RyZWFtX2NvbXBs ZXRlKGVnYywgc3RyZWFtLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICBjYXNlIExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fUkVNVVM6CiAgICAgICAgICAg ICAvKgogICAgICAgICAgICAgICogRmFpbG92ZXIgZnJvbSBwcmltYXJ5LiBEb21haW4gc3RhdGUg aXMgY3VycmVudGx5IGF0IGEKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlk bCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAppbmRleCA2MzJjMDA5Li4zM2Y0YTkwIDEw MDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKKysrIGIvdG9vbHMvbGlieGwv bGlieGxfdHlwZXMuaWRsCkBAIC0yMzIsNiArMjMyLDcgQEAgbGlieGxfaGR0eXBlID0gRW51bWVy YXRpb24oImhkdHlwZSIsIFsKIGxpYnhsX2NoZWNrcG9pbnRlZF9zdHJlYW0gPSBFbnVtZXJhdGlv bigiY2hlY2twb2ludGVkX3N0cmVhbSIsIFsKICAgICAoMCwgIk5PTkUiKSwKICAgICAoMSwgIlJF TVVTIiksCisgICAgKDIsICJDT0xPIiksCiAgICAgXSkKIAogIwotLSAKMS45LjMKCgoKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWls aW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==