From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: [PATCH v2 2/3] drm/arm: Add support for Mali Display Processors Date: Mon, 25 Apr 2016 15:19:23 +0100 Message-ID: <1461593964-27722-3-git-send-email-Liviu.Dudau@arm.com> References: <1461593964-27722-1-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1461593964-27722-1-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring , Pawel Moll , Mark Rutland , devicetree@vger.kernel.org, David Airlie , DRI devel , LKML , Daniel Vetter , Brian Starkey , David Brown List-Id: devicetree@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZmFtaWx5IG9mIERpc3BsYXkgUHJvY2Vzc29ycyBmcm9t IEFSTSBMdGQuClRoaXMgY29tbWl0IGFkZHMgYmFzaWMgc3VwcG9ydCBmb3IgTWFsaSBEUDUwMCwg RFA1NTAgYW5kIERQNjUwCnBhcnRzLCB3aXRoIG9ubHkgdGhlIGRpc3BsYXkgZW5naW5lIGJlaW5n IHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LgoKQ2M6IERhdmlkIEJyb3duIDxEYXZpZC5Ccm93bkBh cm0uY29tPgpDYzogQnJpYW4gU3RhcmtleSA8QnJpYW4uU3RhcmtleUBhcm0uY29tPgoKU2lnbmVk LW9mZi1ieTogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Ci0tLQogZHJpdmVycy9n cHUvZHJtL2FybS9LY29uZmlnICAgICAgICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL2FybS9N YWtlZmlsZSAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5j ICAgfCAyNTkgKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYyAg ICB8IDUzOCArKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9kcnYuaCAgICB8ICA1NCArKysKIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMg ICAgIHwgNzc0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfaHcuaCAgICAgfCAxODkgKysrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9wbGFuZXMuYyB8IDMzNyArKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vYXJtL21hbGlkcF9yZWdzLmggICB8IDE3MiArKysrKysrKwogOSBmaWxlcyBjaGFuZ2Vk LCAyMzQxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YXJtL21hbGlkcF9jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFs aWRwX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBf aHcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vS2NvbmZpZwppbmRleCBlYWVkNDU0Li4xYjI5MDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYXJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9LY29uZmlnCkBAIC0y NSwzICsyNSwxOSBAQCBjb25maWcgRFJNX0hETENEX1NIT1dfVU5ERVJSVU4KIAkgIEVuYWJsZSB0 aGlzIG9wdGlvbiB0byBzaG93IGluIHJlZCBjb2xvdXIgdGhlIHBpeGVscyB0aGF0IHRoZQogCSAg SERMQ0QgZGV2aWNlIGRpZCBub3QgZmV0Y2ggZnJvbSBmcmFtZWJ1ZmZlciBkdWUgdG8gdW5kZXJy dW4KIAkgIGNvbmRpdGlvbnMuCisKK2NvbmZpZyBEUk1fTUFMSV9ESVNQTEFZCisJdHJpc3RhdGUg IkFSTSBNYWxpIERpc3BsYXkgUHJvY2Vzc29yIgorCWRlcGVuZHMgb24gRFJNICYmIE9GICYmIChB Uk0gfHwgQVJNNjQpCisJZGVwZW5kcyBvbiBDT01NT05fQ0xLCisJc2VsZWN0IERSTV9BUk0KKwlz ZWxlY3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0 IERSTV9HRU1fQ01BX0hFTFBFUgorCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUworCWhlbHAKKwkg IENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBjb21waWxlIHRoZSBBUk0gTWFsaSBE aXNwbGF5CisJICBQcm9jZXNzb3IgZHJpdmVyLiBJdCBzdXBwb3J0cyB0aGUgRFA1MDAsIERQNTUw IGFuZCBEUDY1MCB2YXJpYW50cworCSAgb2YgdGhlIGhhcmR3YXJlLgorCisJICBJZiBjb21waWxl ZCBhcyBhIG1vZHVsZSBpdCB3aWxsIGJlIGNhbGxlZCBtYWxpLWRwLgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUK aW5kZXggODlkY2I3Yi4uYmI4YjE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FybS9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlCkBAIC0xLDIgKzEsNCBA QAogaGRsY2QteSA6PSBoZGxjZF9kcnYubyBoZGxjZF9jcnRjLm8KIG9iai0kKENPTkZJR19EUk1f SERMQ0QpCSs9IGhkbGNkLm8KK21hbGktZHAteSA6PSBtYWxpZHBfZHJ2Lm8gbWFsaWRwX2h3Lm8g bWFsaWRwX3BsYW5lcy5vIG1hbGlkcF9jcnRjLm8KK29iai0kKENPTkZJR19EUk1fTUFMSV9ESVNQ TEFZKQkrPSBtYWxpLWRwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRw X2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2NydGMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjg5M2QwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5jCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogKEMp IENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0 aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5 IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKKyAqIG9mIHN1Y2gg R05VIGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgZHJpdmVyIChj cnRjIG9wZXJhdGlvbnMpCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+CisK KyNpbmNsdWRlICJtYWxpZHBfZHJ2LmgiCisjaW5jbHVkZSAibWFsaWRwX2h3LmgiCisKK3N0YXRp YyBib29sIG1hbGlkcF9jcnRjX21vZGVfZml4dXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJ CSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICpt YWxpZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7CisJc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisKKwkvKgorCSAqIGNoZWNrIHRoYXQgdGhlIGhh cmR3YXJlIGNhbiBkcml2ZSB0aGUgcmVxdWlyZWQgY2xvY2sgcmF0ZSwKKwkgKiBidXQgc2tpcCB0 aGUgY2hlY2sgaWYgdGhlIGNsb2NrIGlzIG1lYW50IHRvIGJlIGRpc2FibGVkIChyZXFfcmF0ZSA9 IDApCisJICovCisJbG9uZyByYXRlLCByZXFfcmF0ZSA9IG1vZGUtPmNydGNfY2xvY2sgKiAxMDAw OworCisJaWYgKHJlcV9yYXRlKSB7CisJCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShod2Rldi0+bWNs aywgcmVxX3JhdGUpOworCQlpZiAocmF0ZSA8IHJlcV9yYXRlKSB7CisJCQlEUk1fREVCVUdfRFJJ VkVSKCJtY2xrIGNsb2NrIHVuYWJsZSB0byByZWFjaCAlZCBrSHpcbiIsCisJCQkJCSBtb2RlLT5j cnRjX2Nsb2NrKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXJhdGUgPSBjbGtfcm91bmRf cmF0ZShod2Rldi0+cHhsY2xrLCByZXFfcmF0ZSk7CisJCWlmIChyYXRlICE9IHJlcV9yYXRlKSB7 CisJCQlEUk1fREVCVUdfRFJJVkVSKCJweGxjbGsgZG9lc24ndCBzdXBwb3J0ICVsZCBIelxuIiwK KwkJCQkJIHJlcV9yYXRlKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXJldHVybiB0 cnVlOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlkcF9k ZXZpY2UoY3J0Yyk7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5k ZXY7CisJc3RydWN0IHZpZGVvbW9kZSB2bTsKKworCWRybV9kaXNwbGF5X21vZGVfdG9fdmlkZW9t b2RlKCZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZSwgJnZtKTsKKworCWNsa19wcmVwYXJlX2Vu YWJsZShod2Rldi0+cHhsY2xrKTsKKworCS8qIG1jbGsgbmVlZHMgdG8gYmUgc2V0IHRvIHRoZSBz YW1lIG9yIGhpZ2hlciByYXRlIHRoYW4gcHhsY2xrICovCisJY2xrX3NldF9yYXRlKGh3ZGV2LT5t Y2xrLCBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5jcnRjX2Nsb2NrICogMTAwMCk7CisJY2xr X3NldF9yYXRlKGh3ZGV2LT5weGxjbGssIGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmNydGNf Y2xvY2sgKiAxMDAwKTsKKworCWh3ZGV2LT5tb2Rlc2V0KGh3ZGV2LCAmdm0pOworCWh3ZGV2LT5s ZWF2ZV9jb25maWdfbW9kZShod2Rldik7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2Rp c2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxp ZHAgPSBjcnRjX3RvX21hbGlkcF9kZXZpY2UoY3J0Yyk7CisJc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisKKwkvKgorCSAqIGF2b2lkIGRpc2FibGluZyBhbHJl YWR5IGRpc2FibGVkIGNsb2NrcyBhbmQgaGFyZHdhcmUKKwkgKiAoYXMgaXMgdGhlIGNhc2UgYXQg ZGV2aWNlIHByb2JlIHRpbWUpCisJICovCisJaWYgKGNydGMtPnN0YXRlLT5hY3RpdmUpIHsKKwkJ aHdkZXYtPmVudGVyX2NvbmZpZ19tb2RlKGh3ZGV2KTsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGh3ZGV2LT5weGxjbGspOworCX0KK30KKworc3RhdGljIGludCBtYWxpZHBfY3J0Y19hdG9taWNf Y2hlY2soc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjcnRjX3RvX21hbGlk cF9kZXZpY2UoY3J0Yyk7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRw LT5kZXY7CisJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7CisJc3RydWN0IGRybV9wbGFuZV9zdGF0 ZSAqcHN0YXRlOworCXUzMiByb3RfbWVtX2ZyZWUsIHJvdF9tZW1fdXNhYmxlOworCWludCByb3Rh dGVkX3BsYW5lcyA9IDA7CisKKwkvKgorCSAqIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb3Rh dGlvbiBtZW1vcnkgYXZhaWxhYmxlIGZvciBwbGFuZXMKKwkgKiB0aGF0IG5lZWQgOTDCsCBhbmQg MjcwwrAgcm90YXRpb24uIEVhY2ggcGxhbmUgaGFzIHNldCBpdHMgcmVxdWlyZWQKKwkgKiBtZW1v cnkgc2l6ZSBpbiB0aGUgLT5wbGFuZV9jaGVjaygpIGNhbGxiYWNrLCBoZXJlIHdlIG9ubHkgbWFr ZQorCSAqIHN1cmUgdGhhdCB0aGUgc3VtcyBhcmUgbGVzcyB0aGF0IHRoZSB0b3RhbCB1c2FibGUg bWVtb3J5LgorCSAqCisJICogVGhlIHJvdGF0aW9uIG1lbW9yeSBhbGxvY2F0aW9uIGFsZ29yaXRo bSAoZm9yIGVhY2ggcGxhbmUpOgorCSAqICBhLiBJZiBubyBtb3JlIHJvdGF0ZWQgcGxhbmVzIGV4 aXN0LCBhbGwgcmVtYWluaW5nIHJvdGF0ZQorCSAqICAgICBtZW1vcnkgaW4gdGhlIGJhbmsgaXMg YXZhaWxhYmxlIGZvciB1c2UgYnkgdGhlIHBsYW5lLgorCSAqICBiLiBJZiBvdGhlciByb3RhdGVk IHBsYW5lcyBleGlzdCwgYW5kIHBsYW5lJ3MgbGF5ZXIgSUQgaXMKKwkgKiAgICAgREVfVklERU8x LCBpdCBjYW4gdXNlIGFsbCB0aGUgbWVtb3J5IGZyb20gZmlyc3QgYmFuayBpZgorCSAqICAgICBz ZWNvbmRhcnkgcm90YXRpb24gbWVtb3J5IGJhbmsgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgaXQg Y2FuCisJICogICAgIHVzZSB1cCB0byBoYWxmIHRoZSBiYW5rJ3MgbWVtb3J5LgorCSAqICBjLiBJ ZiBvdGhlciByb3RhdGVkIHBsYW5lcyBleGlzdCwgYW5kIHBsYW5lJ3MgbGF5ZXIgSUQgaXMgbm90 CisJICogICAgIERFX1ZJREVPMSwgaXQgY2FuIHVzZSBoYWxmIG9mIHRoZSBhdmFpbGFibGUgbWVt b3J5CisJICoKKwkgKiBOb3RlOiB0aGlzIGFsZ29yaXRobSBhc3N1bWVzIHRoYXQgdGhlIG9yZGVy IGluIHdoaWNoIHRoZSBwbGFuZXMgYXJlCisJICogY2hlY2tlZCBhbHdheXMgaGFzIERFX1ZJREVP MSBwbGFuZSBmaXJzdCBpbiB0aGUgbGlzdCBpZiBpdCBpcworCSAqIHJvdGF0ZWQuIEJlY2F1c2Ug dGhhdCBpcyBob3cgd2UgY3JlYXRlIHRoZSBwbGFuZXMgaW4gdGhlIGZpcnN0CisJICogcGxhY2Us IHVuZGVyIGN1cnJlbnQgRFJNIHZlcnNpb24gdGhpbmdzIHdvcmssIGJ1dCBpZiBldmVyIHRoZSBv cmRlcgorCSAqIGluIHdoaWNoIGRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZSgp IGl0ZXJhdGVzIG92ZXIgcGxhbmVzCisJICogY2hhbmdlcywgd2UgbmVlZCB0byBwcmUtc29ydCB0 aGUgcGxhbmVzIGJlZm9yZSB2YWxpZGF0aW9uLgorCSAqLworCisJLyogZmlyc3QgY291bnQgdGhl IG51bWJlciBvZiByb3RhdGVkIHBsYW5lcyAqLworCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3Jf ZWFjaF9wbGFuZShwbGFuZSwgc3RhdGUpIHsKKwkJcHN0YXRlID0gZHJtX2F0b21pY19nZXRfcGxh bmVfc3RhdGUoc3RhdGUtPnN0YXRlLCBwbGFuZSk7CisJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYg TUFMSURQX1JPVEFURURfTUFTSykKKwkJCXJvdGF0ZWRfcGxhbmVzKys7CisJfQorCisJcm90X21l bV9mcmVlID0gaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXTsKKwkvKgorCSAqIGlmIHdlIGhhdmUg bW9yZSB0aGFuIDEgcGxhbmUgdXNpbmcgcm90YXRpb24gbWVtb3J5LCB1c2UgdGhlIHNlY29uZAor CSAqIGJsb2NrIG9mIHJvdGF0aW9uIG1lbW9yeSBhcyB3ZWxsCisJICovCisJaWYgKHJvdGF0ZWRf cGxhbmVzID4gMSkKKwkJcm90X21lbV9mcmVlICs9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV07 CisKKwkvKiBub3cgdmFsaWRhdGUgdGhlIHJvdGF0aW9uIG1lbW9yeSByZXF1aXJlbWVudHMgKi8K Kwlkcm1fYXRvbWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUocGxhbmUsIHN0YXRlKSB7CisJ CXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKKworCQlw c3RhdGUgPSBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZShzdGF0ZS0+c3RhdGUsIHBsYW5lKTsK KwkJaWYgKHBzdGF0ZS0+cm90YXRpb24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKSB7CisJCQkvKiBw cm9jZXNzIGN1cnJlbnQgcGxhbmUgKi8KKwkJCXJvdGF0ZWRfcGxhbmVzLS07CisKKwkJCWlmICgh cm90YXRlZF9wbGFuZXMpIHsKKwkJCQkvKiBubyBtb3JlIHJvdGF0ZWQgcGxhbmVzLCB3ZSBjYW4g dXNlIHdoYXQncyBsZWZ0ICovCisJCQkJcm90X21lbV91c2FibGUgPSByb3RfbWVtX2ZyZWU7CisJ CQl9IGVsc2UgeworCQkJCWlmICgobXAtPmxheWVyLT5pZCAhPSBERV9WSURFTzEpIHx8CisJCQkJ ICAgIChod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID09IDApKQorCQkJCQlyb3RfbWVtX3VzYWJs ZSA9IHJvdF9tZW1fZnJlZSAvIDI7CisJCQkJZWxzZQorCQkJCQlyb3RfbWVtX3VzYWJsZSA9IGh3 ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF07CisJCQl9CisKKwkJCXJvdF9tZW1fZnJlZSAtPSByb3Rf bWVtX3VzYWJsZTsKKworCQkJaWYgKG1wLT5yb3RtZW1fc2l6ZSA+IHJvdF9tZW1fdXNhYmxlKQor CQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2 b2lkIG1hbGlkcF9jcnRjX2F0b21pY19iZWdpbihzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJ ICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgbWFsaWRw X2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOworCisJaWYgKGNydGMt PnN0YXRlLT5ldmVudCkgeworCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVu dCA9IGNydGMtPnN0YXRlLT5ldmVudDsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQljcnRj LT5zdGF0ZS0+ZXZlbnQgPSBOVUxMOworCQlldmVudC0+cGlwZSA9IGRybV9jcnRjX2luZGV4KGNy dGMpOworCisJCVdBUk5fT04oZHJtX2NydGNfdmJsYW5rX2dldChjcnRjKSAhPSAwKTsKKworCQlz cGluX2xvY2tfaXJxc2F2ZSgmY3J0Yy0+ZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CisJCWxpc3Rf YWRkX3RhaWwoJmV2ZW50LT5iYXNlLmxpbmssICZtYWxpZHAtPmV2ZW50X2xpc3QpOworCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl9Cit9 CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlz dHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwor CXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBjcnRjLT5kZXY7CisJaW50IHJldCA9IG1hbGlkcF9z ZXRfYW5kX3dhaXRfY29uZmlnX3ZhbGlkKGRybSk7CisKKwlpZiAoIXJldCkgeworCQl1bnNpZ25l ZCBsb25nIGZsYWdzOworCQlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICplOworCisJ CXNwaW5fbG9ja19pcnFzYXZlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwkJZSA9IGxpc3Rf Zmlyc3RfZW50cnlfb3JfbnVsbCgmbWFsaWRwLT5ldmVudF9saXN0LCB0eXBlb2YoKmUpLAorCQkJ CQkgICAgIGJhc2UubGluayk7CisJCWlmIChlKSB7CisJCQlsaXN0X2RlbCgmZS0+YmFzZS5saW5r KTsKKwkJCWRybV9jcnRjX3NlbmRfdmJsYW5rX2V2ZW50KCZtYWxpZHAtPmNydGMsIGUpOworCQkJ ZHJtX2NydGNfdmJsYW5rX3B1dCgmbWFsaWRwLT5jcnRjKTsKKwkJfQorCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkcm0tPmV2ZW50X2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgeworCQlEUk1fREVC VUdfRFJJVkVSKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgdXBkYXRlZCBjb25maWd1cmF0aW9uXG4i KTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIG1h bGlkcF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkubW9kZV9maXh1cCA9IG1hbGlkcF9jcnRjX21v ZGVfZml4dXAsCisJLmVuYWJsZSA9IG1hbGlkcF9jcnRjX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1h bGlkcF9jcnRjX2Rpc2FibGUsCisJLmF0b21pY19jaGVjayA9IG1hbGlkcF9jcnRjX2F0b21pY19j aGVjaywKKwkuYXRvbWljX2JlZ2luID0gbWFsaWRwX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9t aWNfZmx1c2ggPSBtYWxpZHBfY3J0Y19hdG9taWNfZmx1c2gsCit9OworCitzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9jcnRjX2Z1bmNzIG1hbGlkcF9jcnRjX2Z1bmNzID0geworCS5kZXN0cm95ID0g ZHJtX2NydGNfY2xlYW51cCwKKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9j b25maWcsCisJLnBhZ2VfZmxpcCA9IGRybV9hdG9taWNfaGVscGVyX3BhZ2VfZmxpcCwKKwkucmVz ZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlLAorfTsK KworaW50IG1hbGlkcF9jcnRjX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1 Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX3Bs YW5lICpwcmltYXJ5ID0gTlVMTCwgKnBsYW5lOworCWludCByZXQ7CisKKwlkcm1fZm9yX2VhY2hf cGxhbmUocGxhbmUsIGRybSkgeworCQlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVf UFJJTUFSWSkgeworCQkJcHJpbWFyeSA9IHBsYW5lOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlp ZiAoIXByaW1hcnkpIHsKKwkJRFJNX0VSUk9SKCJubyBwcmltYXJ5IHBsYW5lIGZvdW5kXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2NydGNfaW5pdF93aXRoX3BsYW5l cyhkcm0sICZtYWxpZHAtPmNydGMsIHByaW1hcnksIE5VTEwsCisJCQkJCSZtYWxpZHBfY3J0Y19m dW5jcywgTlVMTCk7CisKKwlpZiAocmV0KSB7CisJCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShk cm0pOworCQlyZXR1cm4gcmV0OworCX0KKworCWRybV9jcnRjX2hlbHBlcl9hZGQoJm1hbGlkcC0+ Y3J0YywgJm1hbGlkcF9jcnRjX2hlbHBlcl9mdW5jcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZmZi ODEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYwpA QCAtMCwwICsxLDUzOCBAQAorLyoKKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1 QGFybS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHBy b3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zCisgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgorICoKKyAqIEFSTSBNYWxp IERQNTAwL0RQNTUwL0RQNjUwIEtNUy9EUk0gZHJpdmVyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBv bmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29m X2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+CisKKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVk ZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9n ZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fb2YuaD4KKworI2luY2x1ZGUgIm1h bGlkcF9kcnYuaCIKKyNpbmNsdWRlICJtYWxpZHBfcmVncy5oIgorI2luY2x1ZGUgIm1hbGlkcF9o dy5oIgorCisjZGVmaW5lIE1BTElEUF9DT05GX1ZBTElEX1RJTUVPVVQJMjUwCisKKy8qCisgKiBz ZXQgdGhlICJjb25maWcgdmFsaWQiIGJpdCBhbmQgd2FpdCB1bnRpbCB0aGUgaGFyZHdhcmUKKyAq IGFjdHMgb24gaXQKKyAqLworaW50IG1hbGlkcF9zZXRfYW5kX3dhaXRfY29uZmlnX3ZhbGlkKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRy bS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRw LT5kZXY7CisJaW50IHJldDsKKworCWh3ZGV2LT5zZXRfY29uZmlnX3ZhbGlkKGh3ZGV2KTsKKwkv KiBkb24ndCB3YWl0IGZvciBjb25maWdfdmFsaWQgZmxhZyBpZiB3ZSBhcmUgaW4gY29uZmlnIG1v ZGUgKi8KKwlpZiAoaHdkZXYtPmluX2NvbmZpZ19tb2RlKGh3ZGV2KSkKKwkJcmV0dXJuIDA7CisK KwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChtYWxpZHAtPndxLAorCQkJ YXRvbWljX3JlYWQoJm1hbGlkcC0+Y29uZmlnX3ZhbGlkKSA9PSAxLAorCQkJbXNlY3NfdG9famlm ZmllcyhNQUxJRFBfQ09ORl9WQUxJRF9USU1FT1VUKSk7CisKKwlyZXR1cm4gKHJldCA+IDApID8g MCA6IC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9vdXRwdXRfcG9sbF9jaGFu Z2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlk cCA9IGRybS0+ZGV2X3ByaXZhdGU7CisKKwlpZiAobWFsaWRwLT5mYmRldikKKwkJZHJtX2ZiZGV2 X2NtYV9ob3RwbHVnX2V2ZW50KG1hbGlkcC0+ZmJkZXYpOworfQorCitzdGF0aWMgdm9pZCBtYWxp ZHBfYXRvbWljX2NvbXBsZXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkJICAgc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwkvKiBUb0RvOiB3YWl0X2Zvcl9mZW5j ZXMoZHJtLCBvbGRfc3RhdGUpOyAqLworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVz ZXRfZGlzYWJsZXMoZHJtLCBvbGRfc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9w bGFuZXMoZHJtLCBvbGRfc3RhdGUsIGZhbHNlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRf bW9kZXNldF9lbmFibGVzKGRybSwgb2xkX3N0YXRlKTsKKworCWRybV9hdG9taWNfaGVscGVyX3dh aXRfZm9yX3ZibGFua3MoZHJtLCBvbGRfc3RhdGUpOworCisJZHJtX2F0b21pY19oZWxwZXJfY2xl YW51cF9wbGFuZXMoZHJtLCBvbGRfc3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShvbGRf c3RhdGUpOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfYXRvbWljX3dvcmsoc3RydWN0IHdvcmtf c3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBjb250YWluZXJf b2Yod29yaywgc3RydWN0IG1hbGlkcF9kcm0sCisJCQkJCQkgY29tbWl0LndvcmspOworCisJbWFs aWRwX2F0b21pY19jb21wbGV0ZShtYWxpZHAtPmNvbW1pdC5zdGF0ZS0+ZGV2LAorCQkJICAgICAg IG1hbGlkcC0+Y29tbWl0LnN0YXRlKTsKK30KKworc3RhdGljIGludCBtYWxpZHBfYXRvbWljX2Nv bW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZSwKKwkJCQlib29sIGFzeW5jKQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAg PSBkcm0tPmRldl9wcml2YXRlOworCWludCBlcnI7CisKKwllcnIgPSBkcm1fYXRvbWljX2hlbHBl cl9wcmVwYXJlX3BsYW5lcyhkcm0sIHN0YXRlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwor CisJaWYgKGFzeW5jICYmICFsaXN0X2VtcHR5KCZtYWxpZHAtPmNvbW1pdC53b3JrLmVudHJ5KSkg eworCQkvKiBwZW5kaW5nIGNvbW1pdHMgZm91bmQsIGJhaWwgb3V0ICovCisJCXJldHVybiAtRUJV U1k7CisJfQorCisJbXV0ZXhfbG9jaygmbWFsaWRwLT5jb21taXQubG9jayk7CisJZmx1c2hfd29y aygmbWFsaWRwLT5jb21taXQud29yayk7CisKKwkvKgorCSAqIFRoZSBwb2ludCBvZiBubyByZXR1 cm4gYXdhaXRzIGhlcmUuIEFmdGVyIHRoaXMgd2UgY29tbWl0CisJICogb24gc29mdHdhcmUgc2lk ZSB0byBoYW5kbGUgdGhlIG5ldyBzdGF0ZQorCSAqLworCWRybV9hdG9taWNfaGVscGVyX3N3YXBf c3RhdGUoZHJtLCBzdGF0ZSk7CisKKwltYWxpZHAtPmNvbW1pdC5zdGF0ZSA9IHN0YXRlOworCisJ aWYgKGFzeW5jKQorCQlzY2hlZHVsZV93b3JrKCZtYWxpZHAtPmNvbW1pdC53b3JrKTsKKwllbHNl CisJCW1hbGlkcF9hdG9taWNfY29tcGxldGUoZHJtLCBzdGF0ZSk7CisKKwltdXRleF91bmxvY2so Jm1hbGlkcC0+Y29tbWl0LmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyBtYWxpZHBfbW9kZV9jb25maWdfZnVuY3MgPSB7CisJ LmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRlLAorCS5vdXRwdXRfcG9sbF9jaGFuZ2VkID0g bWFsaWRwX291dHB1dF9wb2xsX2NoYW5nZWQsCisJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNf aGVscGVyX2NoZWNrLAorCS5hdG9taWNfY29tbWl0ID0gbWFsaWRwX2F0b21pY19jb21taXQsCit9 OworCitzdGF0aWMgaW50IG1hbGlkcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sIHVuc2lnbmVkIGludCBjcnRjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBt YWxpZHBfZGlzYWJsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50 IHBpcGUpCit7Cit9CisKK3N0YXRpYyBpbnQgbWFsaWRwX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRybSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRl dl9wcml2YXRlOworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2 OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+bW9kZV9jb25maWcubWlu X3dpZHRoID0gaHdkZXYtPm1pbl9saW5lX3NpemU7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVp Z2h0ID0gaHdkZXYtPm1pbl9saW5lX3NpemU7CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgg PSBod2Rldi0+bWF4X2xpbmVfc2l6ZTsKKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBo d2Rldi0+bWF4X2xpbmVfc2l6ZTsKKwlkcm0tPm1vZGVfY29uZmlnLmZ1bmNzID0gJm1hbGlkcF9t b2RlX2NvbmZpZ19mdW5jczsKKworCXJldCA9IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChkcm0pOwor CWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpc2UgcGxhbmVz XG4iKTsKKwkJZ290byBwbGFuZV9pbml0X2ZhaWw7CisJfQorCisJcmV0ID0gbWFsaWRwX2NydGNf aW5pdChkcm0pOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGlz ZSBDUlRDXG4iKTsKKwkJZ290byBjcnRjX2luaXRfZmFpbDsKKwl9CisKKwlyZXR1cm4gMDsKKwor Y3J0Y19pbml0X2ZhaWw6CisJbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRybSk7CitwbGFuZV9p bml0X2ZhaWw6CisJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgbWFsaWRwX2lycV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJaW50IGlycV9kZSwgaXJxX3NlLCByZXQgPSAwOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwkvKiBmZXRjaCB0aGUg aW50ZXJydXB0cyBmcm9tIERUICovCisJaXJxX2RlID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUo cGRldiwgIkRFIik7CisJaWYgKGlycV9kZSA8IDApIHsKKwkJRFJNX0VSUk9SKCJubyAnREUnIElS USBzcGVjaWZpZWQhXG4iKTsKKwkJcmV0dXJuIGlycV9kZTsKKwl9CisJaXJxX3NlID0gcGxhdGZv cm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlNFIik7CisJaWYgKGlycV9zZSA8IDApIHsKKwkJRFJN X0VSUk9SKCJubyAnU0UnIElSUSBzcGVjaWZpZWQhXG4iKTsKKwkJcmV0dXJuIGlycV9zZTsKKwl9 CisKKwlyZXQgPSBtYWxpZHBfZGVfaXJxX2luaXQoZHJtLCBpcnFfZGUpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlyZXQgPSBtYWxpZHBfc2VfaXJxX2luaXQoZHJtLCBpcnFfc2UpOwor CWlmIChyZXQpIHsKKwkJbWFsaWRwX2RlX2lycV9jbGVhbnVwKGRybSk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hbGlkcF9sYXN0Y2xvc2Uoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJt LT5kZXZfcHJpdmF0ZTsKKworCWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKG1hbGlkcC0+ZmJk ZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewor CS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2UgPSBk cm1fcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisjaWZkZWYgQ09ORklH X0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLnBv bGwgPSBkcm1fcG9sbCwKKwkucmVhZCA9IGRybV9yZWFkLAorCS5sbHNlZWsgPSBub29wX2xsc2Vl aywKKwkubW1hcCA9IGRybV9nZW1fY21hX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9k cml2ZXIgbWFsaWRwX2RyaXZlciA9IHsKKwkuZHJpdmVyX2ZlYXR1cmVzID0gRFJJVkVSX0dFTSB8 IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0FUT01JQyB8CisJCQkgICBEUklWRVJfUFJJTUUsCisJ Lmxhc3RjbG9zZSA9IG1hbGlkcF9sYXN0Y2xvc2UsCisJLmdldF92YmxhbmtfY291bnRlciA9IGRy bV92Ymxhbmtfbm9faHdfY291bnRlciwKKwkuZW5hYmxlX3ZibGFuayA9IG1hbGlkcF9lbmFibGVf dmJsYW5rLAorCS5kaXNhYmxlX3ZibGFuayA9IG1hbGlkcF9kaXNhYmxlX3ZibGFuaywKKwkuZ2Vt X2ZyZWVfb2JqZWN0ID0gZHJtX2dlbV9jbWFfZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMgPSAm ZHJtX2dlbV9jbWFfdm1fb3BzLAorCS5kdW1iX2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJfY3Jl YXRlLAorCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsCisJ LmR1bWJfZGVzdHJveSA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAorCS5wcmltZV9oYW5kbGVfdG9f ZmQgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKKwkucHJpbWVfZmRfdG9faGFuZGxlID0g ZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQgPSBkcm1fZ2Vt X3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0 LAorCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3Rh YmxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1w b3J0X3NnX3RhYmxlLAorCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAs CisJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCisJLmdlbV9w cmltZV9tbWFwID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwKKwkuZm9wcyA9ICZmb3BzLAorCS5u YW1lID0gIm1hbGktZHAiLAorCS5kZXNjID0gIkFSTSBNYWxpIERpc3BsYXkgUHJvY2Vzc29yIGRy aXZlciIsCisJLmRhdGUgPSAiMjAxNjAxMDYiLAorCS5tYWpvciA9IDEsCisJLm1pbm9yID0gMCwK K307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICBtYWxpZHBfZHJtX29mX21h dGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS1kcDUwMCIsCisJCS5kYXRh ID0gJm1hbGlkcF9kZXZpY2VbTUFMSURQXzUwMF0KKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAi YXJtLG1hbGktZHA1NTAiLAorCQkuZGF0YSA9ICZtYWxpZHBfZGV2aWNlW01BTElEUF81NTBdCisJ fSwKKwl7CisJCS5jb21wYXRpYmxlID0gImFybSxtYWxpLWRwNjUwIiwKKwkJLmRhdGEgPSAmbWFs aWRwX2RldmljZVtNQUxJRFBfNjUwXQorCX0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJM RShvZiwgbWFsaWRwX2RybV9vZl9tYXRjaCk7CisKKyNkZWZpbmUgTUFYX09VVFBVVF9DSEFOTkVM UwkzCisKK3N0YXRpYyBpbnQgbWFsaWRwX2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07CisJc3RydWN0IG1h bGlkcF9kcm0gKm1hbGlkcDsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXY7CisJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCS8q IG51bWJlciBvZiBsaW5lcyBmb3IgdGhlIFIsIEcgYW5kIEIgb3V0cHV0ICovCisJdTggb3V0cHV0 X3dpZHRoW01BWF9PVVRQVVRfQ0hBTk5FTFNdOworCWludCByZXQgPSAwLCBpOworCXUzMiB2ZXJz aW9uLCBvdXRfZGVwdGggPSAwOworCisJbWFsaWRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCptYWxpZHApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hbGlkcCkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlod2RldiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaHdkZXYpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIWh3ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogY29weSB0aGUg YXNzb2NpYXRlZCBkYXRhIGZyb20gbWFsaWRwX2RybV9vZl9tYXRjaCB0byBhdm9pZAorCSAqIGhh dmluZyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBPRiBub2RlIGFmdGVyIGJpbmRpbmcKKwkg Ki8KKwltZW1jcHkoaHdkZXYsIG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpLCBzaXplb2Yo Kmh3ZGV2KSk7CisJbWFsaWRwLT5kZXYgPSBod2RldjsKKworCUlOSVRfTElTVF9IRUFEKCZtYWxp ZHAtPmV2ZW50X2xpc3QpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElP UkVTT1VSQ0VfTUVNLCAwKTsKKwlod2Rldi0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIHJlcyk7CisJaWYgKElTX0VSUihod2Rldi0+cmVncykpIHsKKwkJRFJNX0VSUk9SKCJGYWls ZWQgdG8gbWFwIGNvbnRyb2wgcmVnaXN0ZXJzIGFyZWFcbiIpOworCQlyZXR1cm4gUFRSX0VSUiho d2Rldi0+cmVncyk7CisJfQorCisJaHdkZXYtPnBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGNs ayIpOworCWlmIChJU19FUlIoaHdkZXYtPnBjbGspKQorCQlyZXR1cm4gUFRSX0VSUihod2Rldi0+ cGNsayk7CisKKwlod2Rldi0+YWNsayA9IGRldm1fY2xrX2dldChkZXYsICJhY2xrIik7CisJaWYg KElTX0VSUihod2Rldi0+YWNsaykpCisJCXJldHVybiBQVFJfRVJSKGh3ZGV2LT5hY2xrKTsKKwor CWh3ZGV2LT5tY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgIm1jbGsiKTsKKwlpZiAoSVNfRVJSKGh3 ZGV2LT5tY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPm1jbGspOworCisJaHdkZXYtPnB4 bGNsayA9IGRldm1fY2xrX2dldChkZXYsICJweGxjbGsiKTsKKwlpZiAoSVNfRVJSKGh3ZGV2LT5w eGxjbGspKQorCQlyZXR1cm4gUFRSX0VSUihod2Rldi0+cHhsY2xrKTsKKworCS8qIEdldCB0aGUg b3B0aW9uYWwgZnJhbWVidWZmZXIgbWVtb3J5IHJlc291cmNlICovCisJcmV0ID0gb2ZfcmVzZXJ2 ZWRfbWVtX2RldmljZV9pbml0KGRldik7CisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RFVikKKwkJ cmV0dXJuIHJldDsKKworCWRybSA9IGRybV9kZXZfYWxsb2MoJm1hbGlkcF9kcml2ZXIsIGRldik7 CisJaWYgKCFkcm0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBhbGxvY19mYWlsOworCX0K KworCS8qIEVuYWJsZSBBUEIgY2xvY2sgaW4gb3JkZXIgdG8gZ2V0IGFjY2VzcyB0byB0aGUgcmVn aXN0ZXJzICovCisJY2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5wY2xrKTsKKwkvKgorCSAqIEVu YWJsZSBBWEkgY2xvY2sgYW5kIG1haW4gY2xvY2sgc28gdGhhdCBwcmVmZXRjaCBjYW4gc3RhcnQg b25jZQorCSAqIHRoZSByZWdpc3RlcnMgYXJlIHNldAorCSAqLworCWNsa19wcmVwYXJlX2VuYWJs ZShod2Rldi0+YWNsayk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5tY2xrKTsKKworCXJl dCA9IGh3ZGV2LT5xdWVyeV9odyhod2Rldik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIklu dmFsaWQgSFcgY29uZmlndXJhdGlvblxuIik7CisJCWdvdG8gcXVlcnlfaHdfZmFpbDsKKwl9CisK Kwl2ZXJzaW9uID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1B TElEUF9ERV9DT1JFX0lEKTsKKwlEUk1fSU5GTygiZm91bmQgQVJNIE1hbGktRFAlM3ggdmVyc2lv biByJWRwJWRcbiIsIHZlcnNpb24gPj4gMTYsCisJCSAodmVyc2lvbiA+PiAxMikgJiAweGYsICh2 ZXJzaW9uID4+IDgpICYgMHhmKTsKKworCS8qIHNldCB0aGUgbnVtYmVyIG9mIGxpbmVzIHVzZWQg Zm9yIG91dHB1dCBvZiBSR0IgZGF0YSAqLworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdThfYXJy YXkoZGV2LT5vZl9ub2RlLAorCQkJCQkiYXJtLG1hbGlkcC1vdXRwdXQtcG9ydC1saW5lcyIsCisJ CQkJCW91dHB1dF93aWR0aCwgTUFYX09VVFBVVF9DSEFOTkVMUyk7CisJaWYgKHJldCkKKwkJZ290 byBxdWVyeV9od19mYWlsOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9PVVRQVVRfQ0hBTk5FTFM7 IGkrKykKKwkJb3V0X2RlcHRoID0gKG91dF9kZXB0aCA8PCA4KSB8IChvdXRwdXRfd2lkdGhbaV0g JiAweGYpOworCW1hbGlkcF9od193cml0ZShod2Rldiwgb3V0X2RlcHRoLCBod2Rldi0+bWFwLm91 dF9kZXB0aF9iYXNlKTsKKworCWRybS0+ZGV2X3ByaXZhdGUgPSBtYWxpZHA7CisJZGV2X3NldF9k cnZkYXRhKGRldiwgZHJtKTsKKwlhdG9taWNfc2V0KCZtYWxpZHAtPmNvbmZpZ192YWxpZCwgMCk7 CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbWFsaWRwLT53cSk7CisKKwltdXRleF9pbml0KCZtYWxp ZHAtPmNvbW1pdC5sb2NrKTsKKwlJTklUX1dPUksoJm1hbGlkcC0+Y29tbWl0LndvcmssIG1hbGlk cF9hdG9taWNfd29yayk7CisKKwlyZXQgPSBtYWxpZHBfaW5pdChkcm0pOworCWlmIChyZXQgPCAw KQorCQlnb3RvIGluaXRfZmFpbDsKKworCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsK KwlpZiAocmV0KQorCQlnb3RvIHJlZ2lzdGVyX2ZhaWw7CisKKwkvKiBTZXQgdGhlIENSVEMncyBw b3J0IHNvIHRoYXQgdGhlIGVuY29kZXIgY29tcG9uZW50IGNhbiBmaW5kIGl0ICovCisJbWFsaWRw LT5jcnRjLnBvcnQgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5V TEwpOworCisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZHJtKTsKKwlvZl9ub2RlX3B1 dChtYWxpZHAtPmNydGMucG9ydCk7CisKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiRmFpbGVk IHRvIGJpbmQgYWxsIGNvbXBvbmVudHNcbiIpOworCQlnb3RvIGJpbmRfZmFpbDsKKwl9CisKKwly ZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjKTsKKwlp ZiAocmV0IDwgMCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXNlIHZibGFua1xu Iik7CisJCWdvdG8gdmJsYW5rX2ZhaWw7CisJfQorCWRybS0+dmJsYW5rX2Rpc2FibGVfYWxsb3dl ZCA9IHRydWU7CisKKwlyZXQgPSBtYWxpZHBfaXJxX2luaXQocGRldik7CisJaWYgKHJldCA8IDAp CisJCWdvdG8gaXJxX2luaXRfZmFpbDsKKworCWRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwor CisJZHJtX2hlbHBlcl9kaXNhYmxlX3VudXNlZF9mdW5jdGlvbnMoZHJtKTsKKwltYWxpZHAtPmZi ZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0KGRybSwgMzIsIGRybS0+bW9kZV9jb25maWcubnVtX2Ny dGMsCisJCQkJCSAgIGRybS0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7CisKKwlpZiAoSVNf RVJSKG1hbGlkcC0+ZmJkZXYpKSB7CisJCXJldCA9IFBUUl9FUlIobWFsaWRwLT5mYmRldik7CisJ CW1hbGlkcC0+ZmJkZXYgPSBOVUxMOworCQlnb3RvIGZiZGV2X2ZhaWw7CisJfQorCisJZHJtX2tt c19oZWxwZXJfcG9sbF9pbml0KGRybSk7CisJcmV0dXJuIDA7CisKK2ZiZGV2X2ZhaWw6CisJbWFs aWRwX3NlX2lycV9jbGVhbnVwKGRybSk7CisJbWFsaWRwX2RlX2lycV9jbGVhbnVwKGRybSk7Citp cnFfaW5pdF9mYWlsOgorCWRybV92YmxhbmtfY2xlYW51cChkcm0pOwordmJsYW5rX2ZhaWw6CisJ Y29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOworYmluZF9mYWlsOgorCWRybV9kZXZfdW5y ZWdpc3Rlcihkcm0pOworcmVnaXN0ZXJfZmFpbDoKKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3ko ZHJtKTsKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0pOworaW5pdF9mYWlsOgorCWRybS0+ ZGV2X3ByaXZhdGUgPSBOVUxMOworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworcXVlcnlf aHdfZmFpbDoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPm1jbGspOworCWNsa19kaXNh YmxlX3VucHJlcGFyZShod2Rldi0+YWNsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2 LT5wY2xrKTsKKwlkcm1fZGV2X3VucmVmKGRybSk7CithbGxvY19mYWlsOgorCW9mX3Jlc2VydmVk X21lbV9kZXZpY2VfcmVsZWFzZShkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgbWFsaWRwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxp ZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9 IG1hbGlkcC0+ZGV2OworCisJaWYgKG1hbGlkcC0+ZmJkZXYpIHsKKwkJZHJtX2ZiZGV2X2NtYV9m aW5pKG1hbGlkcC0+ZmJkZXYpOworCQltYWxpZHAtPmZiZGV2ID0gTlVMTDsKKwl9CisJZHJtX2tt c19oZWxwZXJfcG9sbF9maW5pKGRybSk7CisJbWFsaWRwX3NlX2lycV9jbGVhbnVwKGRybSk7CisJ bWFsaWRwX2RlX2lycV9jbGVhbnVwKGRybSk7CisJZHJtX3ZibGFua19jbGVhbnVwKGRybSk7CisJ Y29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBkcm0pOworCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0p OworCW1hbGlkcF9kZV9wbGFuZXNfZGVzdHJveShkcm0pOworCWRybV9tb2RlX2NvbmZpZ19jbGVh bnVwKGRybSk7CisJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7CisJZGV2X3NldF9kcnZkYXRhKGRl diwgTlVMTCk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5tY2xrKTsKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rl di0+cGNsayk7CisJZHJtX2Rldl91bnJlZihkcm0pOworCW9mX3Jlc2VydmVkX21lbV9kZXZpY2Vf cmVsZWFzZShkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJf b3BzIG1hbGlkcF9tYXN0ZXJfb3BzID0geworCS5iaW5kID0gbWFsaWRwX2JpbmQsCisJLnVuYmlu ZCA9IG1hbGlkcF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IG1hbGlkcF9jb21wYXJlX2Rldihz dHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpu cCA9IGRhdGE7CisKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IG5wOworfQorCitzdGF0aWMgaW50 IG1hbGlkcF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydCwgKmVwOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2gg Km1hdGNoID0gTlVMTDsKKworCWlmICghcGRldi0+ZGV2Lm9mX25vZGUpCisJCXJldHVybiAtRU5P REVWOworCisJLyogdGhlcmUgaXMgb25seSBvbmUgb3V0cHV0IHBvcnQgaW5zaWRlIGVhY2ggZGV2 aWNlLCBmaW5kIGl0ICovCisJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChwZGV2LT5k ZXYub2Zfbm9kZSwgTlVMTCk7CisJaWYgKCFlcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAo IW9mX2RldmljZV9pc19hdmFpbGFibGUoZXApKSB7CisJCW9mX25vZGVfcHV0KGVwKTsKKwkJcmV0 dXJuIC1FTk9ERVY7CisJfQorCisJLyogYWRkIHRoZSByZW1vdGUgZW5jb2RlciBwb3J0IGFzIGNv bXBvbmVudCAqLworCXBvcnQgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVwKTsK KwlvZl9ub2RlX3B1dChlcCk7CisJaWYgKCFwb3J0IHx8ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxl KHBvcnQpKSB7CisJCW9mX25vZGVfcHV0KHBvcnQpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisK Kwljb21wb25lbnRfbWF0Y2hfYWRkKCZwZGV2LT5kZXYsICZtYXRjaCwgbWFsaWRwX2NvbXBhcmVf ZGV2LCBwb3J0KTsKKwlyZXR1cm4gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaCgmcGRl di0+ZGV2LCAmbWFsaWRwX21hc3Rlcl9vcHMsCisJCQkJCSAgICAgICBtYXRjaCk7Cit9CisKK3N0 YXRpYyBpbnQgbWFsaWRwX3BsYXRmb3JtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCWNvbXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYsICZtYWxpZHBfbWFzdGVy X29wcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1h bGlkcF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1hbGlkcF9wbGF0Zm9ybV9wcm9i ZSwKKwkucmVtb3ZlCQk9IG1hbGlkcF9wbGF0Zm9ybV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJ Lm5hbWUgPSAibWFsaS1kcCIsCisJCS5vZl9tYXRjaF90YWJsZQk9IG1hbGlkcF9kcm1fb2ZfbWF0 Y2gsCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFsaWRwX3BsYXRmb3JtX2Ry aXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkxpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29t PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBUk0gTWFsaSBEUCBEUk0gZHJpdmVyIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZmQzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogKEMp IENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0 aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5 IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKKyAqIG9mIHN1Y2gg R05VIGxpY2VuY2UuCisgKgorICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgS01TL0RSTSBk cml2ZXIgc3RydWN0dXJlcworICovCisKKyNpZm5kZWYgX19NQUxJRFBfRFJWX0hfXworI2RlZmlu ZSBfX01BTElEUF9EUlZfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUg PGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKKworc3RydWN0IG1hbGlkcF9k cm0geworCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9mYmRldl9j bWEgKmZiZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgZXZlbnRfbGlzdDsKKwlzdHJ1Y3QgZHJtX2Ny dGMgY3J0YzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgZHJt X2F0b21pY19zdGF0ZSAqc3RhdGU7CisJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQlzdHJ1 Y3QgbXV0ZXggbG9jazsKKwl9IGNvbW1pdDsKKwlhdG9taWNfdCBjb25maWdfdmFsaWQ7Cit9Owor CisjZGVmaW5lIGNydGNfdG9fbWFsaWRwX2RldmljZSh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0 IG1hbGlkcF9kcm0sIGNydGMpCisKK3N0cnVjdCBtYWxpZHBfcGxhbmUgeworCXN0cnVjdCBkcm1f cGxhbmUgYmFzZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXY7CisJY29uc3Qgc3Ry dWN0IG1hbGlkcF9sYXllciAqbGF5ZXI7CisJLyogc2l6ZSBvZiB0aGUgcmVxdWlyZWQgcm90YXRp b24gbWVtb3J5IHdoZW4gcGxhbmUgaXMgcm90YXRlZCAqLworCXUzMiByb3RtZW1fc2l6ZTsKK307 CisKKyNkZWZpbmUgdG9fbWFsaWRwX3BsYW5lKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbWFs aWRwX3BsYW5lLCBiYXNlKQorCitpbnQgbWFsaWRwX3NldF9hbmRfd2FpdF9jb25maWdfdmFsaWQo c3RydWN0IGRybV9kZXZpY2UgKmRybSk7CitpbnQgbWFsaWRwX2RlX3BsYW5lc19pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkcm0pOwordm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3RydWN0 IGRybV9kZXZpY2UgKmRybSk7CitpbnQgbWFsaWRwX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtKTsKKworLyogb2Z0ZW4gdXNlZCBjb21iaW5hdGlvbiBvZiByb3RhdGlvbmFsIGJpdHMg Ki8KKyNkZWZpbmUgTUFMSURQX1JPVEFURURfTUFTSwkoQklUKERSTV9ST1RBVEVfOTApIHwgQklU KERSTV9ST1RBVEVfMjcwKSkKKworI2VuZGlmICAvKiBfX01BTElEUF9EUlZfSF9fICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jIGIvZHJpdmVycy9ncHUvZHJt L2FybS9tYWxpZHBfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjUx OWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYwpA QCAtMCwwICsxLDc3NCBAQAorLyoKKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1 QGFybS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHBy b3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zCisgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgorICoKKyAqIEFSTSBNYWxp IERQNTAwL0RQNTUwL0RQNjUwIGhhcmR3YXJlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gVGhpcyBp cyB3aGVyZQorICogdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB2YXJpb3VzIHZlcnNpb25zIG9mIHRo ZSBoYXJkd2FyZSBpcyBiZWluZyBkZWFsdCB3aXRoCisgKiBpbiBhbiBhdHRlbXB0IHRvIHByb3Zp ZGUgdG8gdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBjb2RlIGEgdW5pZmllZCB2aWV3CisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorI2luY2x1ZGUgPHZp ZGVvL2Rpc3BsYXlfdGltaW5nLmg+CisKKyNpbmNsdWRlICJtYWxpZHBfZHJ2LmgiCisjaW5jbHVk ZSAibWFsaWRwX2h3LmgiCisjaW5jbHVkZSAibWFsaWRwX3JlZ3MuaCIKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0IG1hbGlkcDUwMF9kZV9mb3JtYXRzW10gPSB7CisJ LyogICAgbGF5ZXJzIHN1cHBvcnRpbmcgdGhlIGZvcm1hdCwgICAgIGludGVybmFsIGlkLCAgICAg IGZvdXJjYyAqLworCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAg MCwgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCB9LAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1Mx IHwgREVfR1JBUEhJQ1MyLCAgMSwgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCB9LAorCXsgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgMiwgRFJNX0ZPUk1BVF9BUkdCODg4 OCB9LAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgMywgRFJN X0ZPUk1BVF9BQkdSODg4OCB9LAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JB UEhJQ1MyLCAgNCwgRFJNX0ZPUk1BVF9YUkdCODg4OCB9LAorCXsgREVfVklERU8xIHwgREVfR1JB UEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNSwgRFJNX0ZPUk1BVF9YQkdSODg4OCB9LAorCXsgREVf VklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgNiwgRFJNX0ZPUk1BVF9SR0I4 ODggfSwKKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDcsIERS TV9GT1JNQVRfQkdSODg4IH0sCisJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQ SElDUzIsICA4LCBEUk1fRk9STUFUX1JHQkE1NTUxIH0sCisJeyBERV9WSURFTzEgfCBERV9HUkFQ SElDUzEgfCBERV9HUkFQSElDUzIsICA5LCBEUk1fRk9STUFUX0FCR1IxNTU1IH0sCisJeyBERV9W SURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsIDEwLCBEUk1fRk9STUFUX1JHQjU2 NSB9LAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAxMSwgRFJN X0ZPUk1BVF9CR1I1NjUgfSwKKwl7IERFX1ZJREVPMSwgMTIsIERSTV9GT1JNQVRfVVlWWSB9LAor CXsgREVfVklERU8xLCAxMywgRFJNX0ZPUk1BVF9ZVVlWIH0sCisJeyBERV9WSURFTzEsIDE0LCBE Uk1fRk9STUFUX05WMTIgfSwKKwl7IERFX1ZJREVPMSwgMTUsIERSTV9GT1JNQVRfWVVWNDIwIH0s Cit9OworCisjZGVmaW5lIE1BTElEUF9JRChfX2dyb3VwLCBfX2Zvcm1hdCkgXAorCSgoKChfX2dy b3VwKSAmIDB4NykgPDwgMykgfCAoKF9fZm9ybWF0KSAmIDB4NykpCisKKyNkZWZpbmUgTUFMSURQ X0NPTU1PTl9GT1JNQVRTIFwKKwkvKiAgICBsYXllcnMgc3VwcG9ydGluZyB0aGUgZm9ybWF0LCAg ICAgIGludGVybmFsIGlkLCAgICAgIGZvdXJjYyAqLyBcCisJeyBERV9WSURFTzEgfCBERV9HUkFQ SElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAwKSwgRFJNX0ZPUk1BVF9BUkdCMjEwMTAx MCB9LCBcCisJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9J RCgwLCAxKSwgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMCB9LCBcCisJeyBERV9WSURFTzEgfCBERV9H UkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAyKSwgRFJNX0ZPUk1BVF9SR0JBMTAx MDEwMiB9LCBcCisJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElE UF9JRCgwLCAzKSwgRFJNX0ZPUk1BVF9CR1JBMTAxMDEwMiB9LCBcCisJeyBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDApLCBEUk1f Rk9STUFUX0FSR0I4ODg4IH0sIFwKKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJ REVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMSwgMSksIERSTV9GT1JNQVRfQUJHUjg4ODggfSwg XAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1B TElEUF9JRCgxLCAyKSwgRFJNX0ZPUk1BVF9SR0JBODg4OCB9LCBcCisJeyBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDMpLCBEUk1f Rk9STUFUX0JHUkE4ODg4IH0sIFwKKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJ REVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMiwgMCksIERSTV9GT1JNQVRfWFJHQjg4ODggfSwg XAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yIHwgREVfU01BUlQsIE1B TElEUF9JRCgyLCAxKSwgRFJNX0ZPUk1BVF9YQkdSODg4OCB9LCBcCisJeyBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDIsIDIpLCBEUk1f Rk9STUFUX1JHQlg4ODg4IH0sIFwKKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJ REVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQoMiwgMyksIERSTV9GT1JNQVRfQkdSWDg4ODggfSwg XAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMywg MCksIERSTV9GT1JNQVRfUkdCODg4IH0sIFwKKwl7IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8 IERFX1ZJREVPMiwgTUFMSURQX0lEKDMsIDEpLCBEUk1fRk9STUFUX0JHUjg4OCB9LCBcCisJeyBE RV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAwKSwgRFJN X0ZPUk1BVF9SR0JBNTU1MSB9LCBcCisJeyBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9W SURFTzIsIE1BTElEUF9JRCg0LCAxKSwgRFJNX0ZPUk1BVF9BQkdSMTU1NSB9LCBcCisJeyBERV9W SURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAyKSwgRFJNX0ZP Uk1BVF9SR0I1NjUgfSwJXAorCXsgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8y LCBNQUxJRFBfSUQoNCwgMyksIERSTV9GT1JNQVRfQkdSNTY1IH0sCVwKKwl7IERFX1ZJREVPMSB8 IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDIpLCBEUk1fRk9STUFUX1lVWVYgfSwgXAorCXsgREVf VklERU8xIHwgREVfVklERU8yLCBNQUxJRFBfSUQoNSwgMyksIERSTV9GT1JNQVRfVVlWWSB9LCBc CisJeyBERV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA2KSwgRFJNX0ZPUk1BVF9O VjEyIH0sIFwKKwl7IERFX1ZJREVPMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDUsIDcpLCBEUk1f Rk9STUFUX1lVVjQyMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1h dCBtYWxpZHA1NTBfZGVfZm9ybWF0c1tdID0geworCU1BTElEUF9DT01NT05fRk9STUFUUywKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1hdCBtYWxpZHA2NTBfZGVf Zm9ybWF0c1tdID0geworCU1BTElEUF9DT01NT05fRk9STUFUUywKK307CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbWFsaWRwX2xheWVyIG1hbGlkcDUwMF9sYXllcnNbXSA9IHsKKwl7IERFX1ZJREVP MSwgTUFMSURQNTAwX0RFX0xWX0JBU0UsIE1BTElEUDUwMF9ERV9MVl9QVFJfQkFTRSB9LAorCXsg REVfR1JBUEhJQ1MxLCBNQUxJRFA1MDBfREVfTEcxX0JBU0UsIE1BTElEUDUwMF9ERV9MRzFfUFRS X0JBU0UgfSwKKwl7IERFX0dSQVBISUNTMiwgTUFMSURQNTAwX0RFX0xHMl9CQVNFLCBNQUxJRFA1 MDBfREVfTEcyX1BUUl9CQVNFIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1hbGlkcF9s YXllciBtYWxpZHA1NTBfbGF5ZXJzW10gPSB7CisJeyBERV9WSURFTzEsIE1BTElEUDU1MF9ERV9M VjFfQkFTRSwgTUFMSURQNTUwX0RFX0xWMV9QVFJfQkFTRSB9LAorCXsgREVfR1JBUEhJQ1MxLCBN QUxJRFA1NTBfREVfTEdfQkFTRSwgTUFMSURQNTUwX0RFX0xHX1BUUl9CQVNFIH0sCisJeyBERV9W SURFTzIsIE1BTElEUDU1MF9ERV9MVjJfQkFTRSwgTUFMSURQNTUwX0RFX0xWMl9QVFJfQkFTRSB9 LAorCXsgREVfU01BUlQsIE1BTElEUDU1MF9ERV9MU19CQVNFLCBNQUxJRFA1NTBfREVfTFNfUFRS X0JBU0UgfSwKK307CisKKyNkZWZpbmUgTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hfU1RBUlQJ NQorCitpbnQgbWFsaWRwNTAwX3F1ZXJ5X2h3KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl dikKK3sKKwl1MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1MDBfQ09ORklH X0lEKTsKKwkvKiBiaXQgNCBvZiB0aGUgQ09ORklHX0lEIHJlZ2lzdGVyIGhvbGRzIHRoZSBsaW5l IHNpemUgbXVsdGlwbGllciAqLworCXU4IGxuX3NpemVfbXVsdCA9IGNvbmYgJiAweDEwID8gMiA6 IDE7CisKKwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9IDI7CisJaHdkZXYtPm1heF9saW5lX3NpemUg PSBTWl8ySyAqIGxuX3NpemVfbXVsdDsKKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdID0gU1pf MUsgKiA2NCAqIGxuX3NpemVfbXVsdDsKKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID0gMDsg Lyogbm8gc2Vjb25kIHJvdGF0aW9uIG1lbW9yeSBiYW5rICovCisKKwlyZXR1cm4gMDsKK30KKwor dm9pZCBtYWxpZHA1MDBfZW50ZXJfY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2Ug Kmh3ZGV2KQoreworCXUzMiBzdGF0dXMsIGNvdW50ID0gMTAwOworCisJbWFsaWRwX2h3X3NldGJp dHMoaHdkZXYsIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7 CisJd2hpbGUgKGNvdW50KSB7CisJCXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rl di0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7CisJCWlmICgoc3RhdHVzICYgTUFM SURQNTAwX0RDX0NPTkZJR19SRVEpID09IE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKQorCQkJYnJl YWs7CisJCS8qCisJCSAqIGVudGVyaW5nIGNvbmZpZyBtb2RlIGNhbiB0YWtlIGFzIGxvbmcgYXMg dGhlIHJlbmRlcmluZworCQkgKiBvZiBhIGZ1bGwgZnJhbWUsIGhlbmNlIHRoZSBsb25nIHNsZWVw IGhlcmUKKwkJICovCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDAwMCk7CisJCWNvdW50LS07CisJ fQorCVdBUk4oY291bnQgPT0gMCwgInRpbWVvdXQgd2hpbGUgZW50ZXJpbmcgY29uZmlnIG1vZGUi KTsKK30KKwordm9pZCBtYWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBzdGF0dXMsIGNvdW50ID0gMzA7CisKKwltYWxpZHBf aHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSwgTUFMSURQNTAwX0RD X0NPTlRST0wpOworCXdoaWxlIChjb3VudCkgeworCQlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZCho d2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCQlpZiAoKHN0 YXR1cyAmIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKSA9PSAwKQorCQkJYnJlYWs7CisJCXVzbGVl cF9yYW5nZSgxMDAsIDEwMDApOworCQljb3VudC0tOworCX0KKwlXQVJOKGNvdW50ID09IDAsICJ0 aW1lb3V0IHdoaWxlIGxlYXZpbmcgY29uZmlnIG1vZGUiKTsKK30KKworYm9vbCBtYWxpZHA1MDBf aW5fY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBz dGF0dXM7CisKKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19i YXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCWlmICgoc3RhdHVzICYgTUFMSURQNTAwX0RDX0NP TkZJR19SRVEpID09IE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKQorCQlyZXR1cm4gdHJ1ZTsKKwor CXJldHVybiBmYWxzZTsKK30KKwordm9pZCBtYWxpZHA1MDBfc2V0X2NvbmZpZ192YWxpZChzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCit7CisJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYs IE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDUwMF9DT05GSUdfVkFMSUQpOworfQorCit2b2lkIG1h bGlkcDUwMF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldiwgc3RydWN0IHZp ZGVvbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gMDsKKworCW1hbGlkcF9od19jbGVhcmJpdHMo aHdkZXYsIE1BTElEUDUwMF9EQ19DTEVBUl9NQVNLLCBNQUxJRFA1MDBfRENfQ09OVFJPTCk7CisJ aWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9GTEFHU19IU1lOQ19ISUdIKQorCQl2YWwgfD0gTUFM SURQNTAwX0hTWU5DUE9MOworCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNf SElHSCkKKwkJdmFsIHw9IE1BTElEUDUwMF9WU1lOQ1BPTDsKKwl2YWwgfD0gTUFMSURQX0RFX0RF RkFVTFRfUFJFRkVUQ0hfU1RBUlQ7CisJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIHZhbCwgTUFM SURQNTAwX0RDX0NPTlRST0wpOworCisJLyoKKwkgKiBNYWxpLURQNTAwIGVuY29kZXMgdGhlIGJh Y2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgorCSAqICAgIC0gcmVkICAgQCBNQUxJRFA1MDBfQkdO RF9DT0xPUlsxMjowXQorCSAqICAgIC0gZ3JlZW4gQCBNQUxJRFA1MDBfQkdORF9DT0xPUlsyNzox Nl0KKwkgKiAgICAtIGJsdWUgIEAgKE1BTElEUDUwMF9CR05EX0NPTE9SICsgNClbMTI6MF0KKwkg Ki8KKwl2YWwgPSAoKE1BTElEUF9CR05EX0NPTE9SX0cgJiAweGZmZikgPDwgMTYpIHwKKwkgICAg ICAoTUFMSURQX0JHTkRfQ09MT1JfUiAmIDB4ZmZmKTsKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYs IHZhbCwgTUFMSURQNTAwX0JHTkRfQ09MT1IpOworCW1hbGlkcF9od193cml0ZShod2RldiwgTUFM SURQX0JHTkRfQ09MT1JfQiwgTUFMSURQNTAwX0JHTkRfQ09MT1IgKyA0KTsKKworCXZhbCA9IE1B TElEUF9ERV9IX0ZST05UUE9SQ0gobW9kZS0+aGZyb250X3BvcmNoKSB8CisJCU1BTElEUF9ERV9I X0JBQ0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2 YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSF9USU1JTkdTKTsKKworCXZh bCA9IE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+dmZyb250X3BvcmNoKSB8CisJCU1B TElEUF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFja19wb3JjaCk7CisJbWFsaWRwX2h3X3dyaXRl KGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfVl9USU1JTkdT KTsKKworCXZhbCA9IE1BTElEUF9ERV9IX1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwKKwkJ TUFMSURQX0RFX1ZfU1lOQ1dJRFRIKG1vZGUtPnZzeW5jX2xlbik7CisJbWFsaWRwX2h3X3dyaXRl KGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfU1lOQ19XSURU SCk7CisKKwl2YWwgPSBNQUxJRFBfREVfSF9BQ1RJVkUobW9kZS0+aGFjdGl2ZSkgfCBNQUxJRFBf REVfVl9BQ1RJVkUobW9kZS0+dmFjdGl2ZSk7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWws IE1BTElEUDUwMF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSFZfQUNUSVZFKTsKKworCWlmICht b2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfSU5URVJMQUNFRCkKKwkJbWFsaWRwX2h3X3NldGJp dHMoaHdkZXYsIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5D KTsKKwllbHNlCisJCW1hbGlkcF9od19jbGVhcmJpdHMoaHdkZXYsIE1BTElEUF9ESVNQX0ZVTkNf SUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5DKTsKK30KKworaW50IG1hbGlkcDUwMF9yb3Rt ZW1fcmVxdWlyZWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1MTYgdywgdTE2IGgs IHUzMiBmbXQpCit7CisJdW5zaWduZWQgaW50IGRlcHRoOworCWludCBicHA7CisKKwkvKiBSR0I4 ODggb3IgQkdSODg4IGNhbid0IGJlIHJvdGF0ZWQgKi8KKwlpZiAoKGZtdCA9PSBEUk1fRk9STUFU X1JHQjg4OCkgfHwgKGZtdCA9PSBEUk1fRk9STUFUX0JHUjg4OCkpCisJCXJldHVybiAtRUlOVkFM OworCisJLyoKKwkgKiBFYWNoIGxheWVyIG5lZWRzIGVub3VnaCByb3RhdGlvbiBtZW1vcnkgdG8g Zml0IDggbGluZXMKKwkgKiB3b3J0aCBvZiBwaXhlbCBkYXRhLiBSZXF1aXJlZCBzaXplIGlzIHRo ZW46CisJICogICAgc2l6ZSA9IChyb3RhdGVkX3dpZHRoICogYnBwICogOCApIC8gODsKKwkgKi8K Kwlkcm1fZmJfZ2V0X2JwcF9kZXB0aChmbXQsICZkZXB0aCwgJmJwcCk7CisKKwlyZXR1cm4gdyAq IGJwcDsKK30KKworc3RhdGljIGludCBtYWxpZHA1NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBjb25mID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIE1B TElEUDU1MF9DT05GSUdfSUQpOworCXU4IGxuX3NpemUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNp emU7CisKKwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9IDI7CisKKwlzd2l0Y2ggKGxuX3NpemUpIHsK KwljYXNlIDA6CisJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gU1pfMks7CisJCS8qIHR3byBiYW5r cyBvZiA2NEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KKwkJcnNpemUgPSA2NDsKKwkJYnJlYWs7 CisJY2FzZSAxOgorCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IFNaXzRLOworCQkvKiB0d28gYmFu a3Mgb2YgMTI4S0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLworCQlyc2l6ZSA9IDEyODsKKwkJYnJl YWs7CisJY2FzZSAyOgorCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDEyODA7CisJCS8qIHR3byBi YW5rcyBvZiA0MEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KKwkJcnNpemUgPSA0MDsKKwkJYnJl YWs7CisJY2FzZSAzOgorCQkvKiByZXNlcnZlZCB2YWx1ZSAqLworCQlod2Rldi0+bWF4X2xpbmVf c2l6ZSA9IDA7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWh3ZGV2LT5yb3RhdGlvbl9tZW1v cnlbMF0gPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzFdID0gcnNpemUgKiBTWl8xSzsKKwlyZXR1 cm4gMDsKK30KKwordm9pZCBtYWxpZHA1NTBfZW50ZXJfY29uZmlnX21vZGUoc3RydWN0IG1hbGlk cF9od19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBzdGF0dXMsIGNvdW50ID0gMTAwOworCisJbWFs aWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRLCBNQUxJRFA1NTBf RENfQ09OVFJPTCk7CisJd2hpbGUgKGNvdW50KSB7CisJCXN0YXR1cyA9IG1hbGlkcF9od19yZWFk KGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7CisJCWlmICgo c3RhdHVzICYgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpID09IE1BTElEUDU1MF9EQ19DT05GSUdf UkVRKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIGVudGVyaW5nIGNvbmZpZyBtb2RlIGNhbiB0YWtl IGFzIGxvbmcgYXMgdGhlIHJlbmRlcmluZworCQkgKiBvZiBhIGZ1bGwgZnJhbWUsIGhlbmNlIHRo ZSBsb25nIHNsZWVwIGhlcmUKKwkJICovCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMDAwMCk7CisJ CWNvdW50LS07CisJfQorCVdBUk4oY291bnQgPT0gMCwgInRpbWVvdXQgd2hpbGUgZW50ZXJpbmcg Y29uZmlnIG1vZGUiKTsKK30KKwordm9pZCBtYWxpZHA1NTBfbGVhdmVfY29uZmlnX21vZGUoc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQoreworCXUzMiBzdGF0dXMsIGNvdW50ID0gMzA7 CisKKwltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSwg TUFMSURQNTUwX0RDX0NPTlRST0wpOworCXdoaWxlIChjb3VudCkgeworCQlzdGF0dXMgPSBtYWxp ZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMp OworCQlpZiAoKHN0YXR1cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKSA9PSAwKQorCQkJYnJl YWs7CisJCXVzbGVlcF9yYW5nZSgxMDAsIDEwMDApOworCQljb3VudC0tOworCX0KKwlXQVJOKGNv dW50ID09IDAsICJ0aW1lb3V0IHdoaWxlIGxlYXZpbmcgY29uZmlnIG1vZGUiKTsKK30KKworYm9v bCBtYWxpZHA1NTBfaW5fY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 KQoreworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdk ZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOworCWlmICgoc3RhdHVzICYgTUFM SURQNTUwX0RDX0NPTkZJR19SRVEpID09IE1BTElEUDU1MF9EQ19DT05GSUdfUkVRKQorCQlyZXR1 cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBtYWxpZHA1NTBfc2V0X2NvbmZp Z192YWxpZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCit7CisJbWFsaWRwX2h3X3Nl dGJpdHMoaHdkZXYsIE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDU1MF9DT05GSUdfVkFMSUQpOwor fQorCit2b2lkIG1hbGlkcDU1MF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgc3RydWN0IHZpZGVvbW9kZSAqbW9kZSkKK3sKKwl1MzIgdmFsID0gTUFMSURQX0RFX0RFRkFV TFRfUFJFRkVUQ0hfU1RBUlQ7CisKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQ NTUwX0RFX0NPTlRST0wpOworCS8qCisJICogTWFsaS1EUDU1MCBhbmQgTWFsaS1EUDY1MCBlbmNv ZGUgdGhlIGJhY2tncm91bmQgY29sb3IgbGlrZSB0aGlzOgorCSAqICAgLSByZWQgICBAIE1BTElE UDU1MF9ERV9CR05EX0NPTE9SWzIzOjE2XQorCSAqICAgLSBncmVlbiBAIE1BTElEUDU1MF9ERV9C R05EX0NPTE9SWzE1OjhdCisJICogICAtIGJsdWUgIEAgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1Jb NzowXQorCSAqCisJICogV2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQg NCBiaXRzIGZyb20gdGhlIGRlZmF1bHQKKwkgKiBNQUxJRFBfQkdORF9DT0xPUl94IHZhbHVlcwor CSAqLworCXZhbCA9ICgoKE1BTElEUF9CR05EX0NPTE9SX1IgPj4gNCkgJiAweGZmKSA8PCAxNikg fAorCSAgICAgICgoKE1BTElEUF9CR05EX0NPTE9SX0cgPj4gNCkgJiAweGZmKSA8PCA4KSB8CisJ ICAgICAgKChNQUxJRFBfQkdORF9DT0xPUl9CID4+IDQpICYgMHhmZik7CisJbWFsaWRwX2h3X3dy aXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SKTsKKworCXZhbCA9IE1BTElE UF9ERV9IX0ZST05UUE9SQ0gobW9kZS0+aGZyb250X3BvcmNoKSB8CisJCU1BTElEUF9ERV9IX0JB Q0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7CisJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWws IE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSF9USU1JTkdTKTsKKworCXZhbCA9 IE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+dmZyb250X3BvcmNoKSB8CisJCU1BTElE UF9ERV9WX0JBQ0tQT1JDSChtb2RlLT52YmFja19wb3JjaCk7CisJbWFsaWRwX2h3X3dyaXRlKGh3 ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfVl9USU1JTkdTKTsK KworCXZhbCA9IE1BTElEUF9ERV9IX1NZTkNXSURUSChtb2RlLT5oc3luY19sZW4pIHwKKwkJTUFM SURQX0RFX1ZfU1lOQ1dJRFRIKG1vZGUtPnZzeW5jX2xlbik7CisJaWYgKG1vZGUtPmZsYWdzICYg RElTUExBWV9GTEFHU19IU1lOQ19ISUdIKQorCQl2YWwgfD0gTUFMSURQNTUwX0hTWU5DUE9MOwor CWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNfSElHSCkKKwkJdmFsIHw9IE1B TElEUDU1MF9WU1lOQ1BPTDsKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUw X1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9TWU5DX1dJRFRIKTsKKworCXZhbCA9IE1BTElEUF9E RV9IX0FDVElWRShtb2RlLT5oYWN0aXZlKSB8IE1BTElEUF9ERV9WX0FDVElWRShtb2RlLT52YWN0 aXZlKTsKKwltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX1RJTUlOR1NfQkFT RSArIE1BTElEUF9ERV9IVl9BQ1RJVkUpOworCisJaWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9G TEFHU19JTlRFUkxBQ0VEKQorCQltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQX0RJU1Bf RlVOQ19JTEFDRUQsIE1BTElEUF9ERV9ESVNQTEFZX0ZVTkMpOworCWVsc2UKKwkJbWFsaWRwX2h3 X2NsZWFyYml0cyhod2RldiwgTUFMSURQX0RJU1BfRlVOQ19JTEFDRUQsIE1BTElEUF9ERV9ESVNQ TEFZX0ZVTkMpOworfQorCitpbnQgbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZChzdHJ1Y3QgbWFs aWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCkKK3sKKwl1MzIgYnl0 ZXNfcGVyX2NvbDsKKworCS8qIHJhdyBSR0I4ODggb3IgQkdSODg4IGNhbid0IGJlIHJvdGF0ZWQg Ki8KKwlpZiAoKGZtdCA9PSBEUk1fRk9STUFUX1JHQjg4OCkgfHwgKGZtdCA9PSBEUk1fRk9STUFU X0JHUjg4OCkpCisJCXJldHVybiAtRUlOVkFMOworCisJc3dpdGNoIChmbXQpIHsKKwkvKiA4IGxp bmVzIGF0IDQgYnl0ZXMgcGVyIHBpeGVsICovCisJY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEw OgorCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMjEwMTAxMDoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTEw MTAxMDI6CisJY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgorCWNhc2UgRFJNX0ZPUk1BVF9B UkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQUJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JH QkE4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwljYXNlIERSTV9GT1JNQVRfWFJH Qjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JY ODg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQjg4 ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSODg4OgorCS8qIDE2IGxpbmVzIGF0IDIgYnl0ZXMgcGVy IHBpeGVsICovCisJY2FzZSBEUk1fRk9STUFUX1JHQkE1NTUxOgorCWNhc2UgRFJNX0ZPUk1BVF9B QkdSMTU1NToKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I1 NjU6CisJY2FzZSBEUk1fRk9STUFUX1VZVlk6CisJY2FzZSBEUk1fRk9STUFUX1lVWVY6CisJCWJ5 dGVzX3Blcl9jb2wgPSAzMjsKKwkJYnJlYWs7CisJLyogMTYgbGluZXMgYXQgMS41IGJ5dGVzIHBl ciBwaXhlbCAqLworCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgorCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0 MjA6CisJCWJ5dGVzX3Blcl9jb2wgPSAyNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJu IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHcgKiBieXRlc19wZXJfY29sOworfQorCitzdGF0aWMg aW50IG1hbGlkcDY1MF9xdWVyeV9odyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCit7 CisJdTMyIGNvbmYgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgTUFMSURQNTUwX0NPTkZJR19JRCk7 CisJdTggbG5fc2l6ZSA9IChjb25mID4+IDQpICYgMHgzLCByc2l6ZTsKKworCWh3ZGV2LT5taW5f bGluZV9zaXplID0gNDsKKworCXN3aXRjaCAobG5fc2l6ZSkgeworCWNhc2UgMDoKKwljYXNlIDI6 CisJCS8qIHJlc2VydmVkIHZhbHVlcyAqLworCQlod2Rldi0+bWF4X2xpbmVfc2l6ZSA9IDA7CisJ CXJldHVybiAtRUlOVkFMOworCWNhc2UgMToKKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl80 SzsKKwkJLyogdHdvIGJhbmtzIG9mIDEyOEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KKwkJcnNp emUgPSAxMjg7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSAy NTYwOworCQkvKiB0d28gYmFua3Mgb2YgODBLQiBmb3Igcm90YXRpb24gbWVtb3J5ICovCisJCXJz aXplID0gODA7CisJfQorCisJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVswXSA9IGh3ZGV2LT5yb3Rh dGlvbl9tZW1vcnlbMV0gPSByc2l6ZSAqIFNaXzFLOworCXJldHVybiAwOworfQorCitjb25zdCBz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSBtYWxpZHBfZGV2aWNlW01BTElEUF9NQVhfREVWSUNFU10g PSB7CisJW01BTElEUF81MDBdID0geworCQkubWFwID0geworCQkJLnNlX2Jhc2UgPSBNQUxJRFA1 MDBfU0VfQkFTRSwKKwkJCS5kY19iYXNlID0gTUFMSURQNTAwX0RDX0JBU0UsCisJCQkuZGVfaXJx X21hcCA9IHsKKwkJCQkuaXJxX21hc2sgPSBNQUxJRFBfREVfSVJRX1VOREVSUlVOIHwKKwkJCQkJ ICAgIE1BTElEUDUwMF9ERV9JUlFfQVhJX0VSUiB8CisJCQkJCSAgICBNQUxJRFA1MDBfREVfSVJR X1ZTWU5DIHwKKwkJCQkJICAgIE1BTElEUDUwMF9ERV9JUlFfR0xPQkFMLAorCQkJCS52c3luY19p cnEgPSBNQUxJRFA1MDBfREVfSVJRX1ZTWU5DLAorCQkJfSwKKwkJCS5zZV9pcnFfbWFwID0gewor CQkJCS5pcnFfbWFzayA9IE1BTElEUDUwMF9TRV9JUlFfQ09ORl9NT0RFLAorCQkJCS52c3luY19p cnEgPSAwLAorCQkJfSwKKwkJCS5kY19pcnFfbWFwID0geworCQkJCS5pcnFfbWFzayA9IE1BTElE UDUwMF9ERV9JUlFfQ09ORl9WQUxJRCwKKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTAwX0RFX0lS UV9DT05GX1ZBTElELAorCQkJfSwKKwkJCS5sYXllcnMgPSBtYWxpZHA1MDBfbGF5ZXJzLAorCQkJ Lm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1MDBfbGF5ZXJzKSwKKwkJCS5pbnB1dF9mb3Jt YXRzID0gbWFsaWRwNTAwX2RlX2Zvcm1hdHMsCisJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlf U0laRShtYWxpZHA1MDBfZGVfZm9ybWF0cyksCisJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1 MDBfT1VUUFVUX0RFUFRILAorCQkJLmZlYXR1cmVzID0gMCwJLyogbm8gQ0xFQVJJUlEgcmVnaXN0 ZXIgKi8KKwkJfSwKKwkJLnF1ZXJ5X2h3ID0gbWFsaWRwNTAwX3F1ZXJ5X2h3LAorCQkuZW50ZXJf Y29uZmlnX21vZGUgPSBtYWxpZHA1MDBfZW50ZXJfY29uZmlnX21vZGUsCisJCS5sZWF2ZV9jb25m aWdfbW9kZSA9IG1hbGlkcDUwMF9sZWF2ZV9jb25maWdfbW9kZSwKKwkJLmluX2NvbmZpZ19tb2Rl ID0gbWFsaWRwNTAwX2luX2NvbmZpZ19tb2RlLAorCQkuc2V0X2NvbmZpZ192YWxpZCA9IG1hbGlk cDUwMF9zZXRfY29uZmlnX3ZhbGlkLAorCQkubW9kZXNldCA9IG1hbGlkcDUwMF9tb2Rlc2V0LAor CQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTAwX3JvdG1lbV9yZXF1aXJlZCwKKwl9LAorCVtN QUxJRFBfNTUwXSA9IHsKKwkJLm1hcCA9IHsKKwkJCS5zZV9iYXNlID0gTUFMSURQNTUwX1NFX0JB U0UsCisJCQkuZGNfYmFzZSA9IE1BTElEUDU1MF9EQ19CQVNFLAorCQkJLmRlX2lycV9tYXAgPSB7 CisJCQkJLmlycV9tYXNrID0gTUFMSURQX0RFX0lSUV9VTkRFUlJVTiB8CisJCQkJCSAgICBNQUxJ RFA1NTBfREVfSVJRX1ZTWU5DLAorCQkJCS52c3luY19pcnEgPSBNQUxJRFA1NTBfREVfSVJRX1ZT WU5DLAorCQkJfSwKKwkJCS5zZV9pcnFfbWFwID0geworCQkJCS5pcnFfbWFzayA9IE1BTElEUDU1 MF9TRV9JUlFfRU9XIHwKKwkJCQkJICAgIE1BTElEUDU1MF9TRV9JUlFfQVhJX0VSUiwKKwkJCX0s CisJCQkuZGNfaXJxX21hcCA9IHsKKwkJCQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfRENfSVJRX0NP TkZfVkFMSUQsCisJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwK KwkJCX0sCisJCQkubGF5ZXJzID0gbWFsaWRwNTUwX2xheWVycywKKwkJCS5uX2xheWVycyA9IEFS UkFZX1NJWkUobWFsaWRwNTUwX2xheWVycyksCisJCQkuaW5wdXRfZm9ybWF0cyA9IG1hbGlkcDU1 MF9kZV9mb3JtYXRzLAorCQkJLm5faW5wdXRfZm9ybWF0cyA9IEFSUkFZX1NJWkUobWFsaWRwNTUw X2RlX2Zvcm1hdHMpLAorCQkJLm91dF9kZXB0aF9iYXNlID0gTUFMSURQNTUwX0RFX09VVFBVVF9E RVBUSCwKKwkJCS5mZWF0dXJlcyA9IE1BTElEUF9SRUdNQVBfSEFTX0NMRUFSSVJRLAorCQl9LAor CQkucXVlcnlfaHcgPSBtYWxpZHA1NTBfcXVlcnlfaHcsCisJCS5lbnRlcl9jb25maWdfbW9kZSA9 IG1hbGlkcDU1MF9lbnRlcl9jb25maWdfbW9kZSwKKwkJLmxlYXZlX2NvbmZpZ19tb2RlID0gbWFs aWRwNTUwX2xlYXZlX2NvbmZpZ19tb2RlLAorCQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1NTBf aW5fY29uZmlnX21vZGUsCisJCS5zZXRfY29uZmlnX3ZhbGlkID0gbWFsaWRwNTUwX3NldF9jb25m aWdfdmFsaWQsCisJCS5tb2Rlc2V0ID0gbWFsaWRwNTUwX21vZGVzZXQsCisJCS5yb3RtZW1fcmVx dWlyZWQgPSBtYWxpZHA1NTBfcm90bWVtX3JlcXVpcmVkLAorCX0sCisJW01BTElEUF82NTBdID0g eworCQkubWFwID0geworCQkJLnNlX2Jhc2UgPSBNQUxJRFA1NTBfU0VfQkFTRSwKKwkJCS5kY19i YXNlID0gTUFMSURQNTUwX0RDX0JBU0UsCisJCQkuZGVfaXJxX21hcCA9IHsKKwkJCQkuaXJxX21h c2sgPSBNQUxJRFBfREVfSVJRX1VOREVSUlVOIHwKKwkJCQkJICAgIE1BTElEUDY1MF9ERV9JUlFf RFJJRlQgfAorCQkJCQkgICAgTUFMSURQNTUwX0RFX0lSUV9WU1lOQywKKwkJCQkudnN5bmNfaXJx ID0gTUFMSURQNTUwX0RFX0lSUV9WU1lOQywKKwkJCX0sCisJCQkuc2VfaXJxX21hcCA9IHsKKwkJ CQkuaXJxX21hc2sgPSBNQUxJRFA1NTBfU0VfSVJRX0VPVyB8CisJCQkJCSAgICBNQUxJRFA1NTBf U0VfSVJRX0FYSV9FUlIsCisJCQl9LAorCQkJLmRjX2lycV9tYXAgPSB7CisJCQkJLmlycV9tYXNr ID0gTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZBTElELAorCQkJCS52c3luY19pcnEgPSBNQUxJRFA1 NTBfRENfSVJRX0NPTkZfVkFMSUQsCisJCQl9LAorCQkJLmxheWVycyA9IG1hbGlkcDU1MF9sYXll cnMsCisJCQkubl9sYXllcnMgPSBBUlJBWV9TSVpFKG1hbGlkcDU1MF9sYXllcnMpLAorCQkJLmlu cHV0X2Zvcm1hdHMgPSBtYWxpZHA2NTBfZGVfZm9ybWF0cywKKwkJCS5uX2lucHV0X2Zvcm1hdHMg PSBBUlJBWV9TSVpFKG1hbGlkcDY1MF9kZV9mb3JtYXRzKSwKKwkJCS5vdXRfZGVwdGhfYmFzZSA9 IE1BTElEUDU1MF9ERV9PVVRQVVRfREVQVEgsCisJCQkuZmVhdHVyZXMgPSBNQUxJRFBfUkVHTUFQ X0hBU19DTEVBUklSUSwKKwkJfSwKKwkJLnF1ZXJ5X2h3ID0gbWFsaWRwNjUwX3F1ZXJ5X2h3LAor CQkuZW50ZXJfY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfZW50ZXJfY29uZmlnX21vZGUsCisJCS5s ZWF2ZV9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9sZWF2ZV9jb25maWdfbW9kZSwKKwkJLmluX2Nv bmZpZ19tb2RlID0gbWFsaWRwNTUwX2luX2NvbmZpZ19tb2RlLAorCQkuc2V0X2NvbmZpZ192YWxp ZCA9IG1hbGlkcDU1MF9zZXRfY29uZmlnX3ZhbGlkLAorCQkubW9kZXNldCA9IG1hbGlkcDU1MF9t b2Rlc2V0LAorCQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZCwK Kwl9LAorfTsKKwordTggbWFsaWRwX2h3X2dldF9mb3JtYXRfaWQoY29uc3Qgc3RydWN0IG1hbGlk cF9od19yZWdtYXAgKm1hcCwKKwkJCSAgIHU4IGxheWVyX2lkLCB1MzIgZm9ybWF0KQoreworCXVu c2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG1hcC0+bl9pbnB1dF9mb3JtYXRzOyBp KyspIHsKKwkJaWYgKCgobWFwLT5pbnB1dF9mb3JtYXRzW2ldLmxheWVyICYgbGF5ZXJfaWQpID09 IGxheWVyX2lkKSAmJgorCQkgICAgKG1hcC0+aW5wdXRfZm9ybWF0c1tpXS5mb3JtYXQgPT0gZm9y bWF0KSkKKwkJCXJldHVybiBtYXAtPmlucHV0X2Zvcm1hdHNbaV0uaWQ7CisJfQorCisJcmV0dXJu ICh1OCktMTsKK30KKworCit1MzIgbWFsaWRwX2h3X3JlYWQoc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2LCB1MzIgcmVnKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGh3ZGV2LT5yZWdzICsg cmVnKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgbWFsaWRwX2h3X3dyaXRlKHN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIHZhbHVlLCB1MzIgcmVnKQoreworCXdyaXRlbCh2 YWx1ZSwgaHdkZXYtPnJlZ3MgKyByZWcpOworfQorCit2b2lkIG1hbGlkcF9od19zZXRiaXRzKHN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIG1hc2ssIHUzMiByZWcpCit7CisJdTMy IGRhdGEgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgcmVnKTsKKworCWRhdGEgfD0gbWFzazsKKwlt YWxpZHBfaHdfd3JpdGUoaHdkZXYsIGRhdGEsIHJlZyk7Cit9CisKK3ZvaWQgbWFsaWRwX2h3X2Ns ZWFyYml0cyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiBtYXNrLCB1MzIgcmVn KQoreworCXUzMiBkYXRhID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIHJlZyk7CisKKwlkYXRhICY9 IH5tYXNrOworCW1hbGlkcF9od193cml0ZShod2RldiwgZGF0YSwgcmVnKTsKK30KKwordm9pZCBt YWxpZHBfaHdfY2xlYXJfaXJxKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxv Y2ssIHUzMiBpcnEpCit7CisJdTMyIGJhc2UgPSAwOworCisJc3dpdGNoIChibG9jaykgeworCWNh c2UgTUFMSURQX0RFX0JMT0NLOgorCQliYXNlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBNQUxJRFBf U0VfQkxPQ0s6CisJCWJhc2UgPSBod2Rldi0+bWFwLnNlX2Jhc2U7CisJCWJyZWFrOworCWNhc2Ug TUFMSURQX0RDX0JMT0NLOgorCQliYXNlID0gaHdkZXYtPm1hcC5kY19iYXNlOworCQlicmVhazsK Kwl9CisKKwlpZiAoaHdkZXYtPm1hcC5mZWF0dXJlcyAmIE1BTElEUF9SRUdNQVBfSEFTX0NMRUFS SVJRKQorCQltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIGlycSwgYmFzZSArIE1BTElEUF9SRUdfQ0xF QVJJUlEpOworCWVsc2UKKwkJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJ RFBfUkVHX1NUQVRVUyk7Cit9CisKK3ZvaWQgbWFsaWRwX2h3X2Rpc2FibGVfaXJxKHN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpCit7CisJdTMyIGJhc2Ug PSAwOworCisJc3dpdGNoIChibG9jaykgeworCWNhc2UgTUFMSURQX0RFX0JMT0NLOgorCQliYXNl ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBNQUxJRFBfU0VfQkxPQ0s6CisJCWJhc2UgPSBod2Rldi0+ bWFwLnNlX2Jhc2U7CisJCWJyZWFrOworCWNhc2UgTUFMSURQX0RDX0JMT0NLOgorCQliYXNlID0g aHdkZXYtPm1hcC5kY19iYXNlOworCQlicmVhazsKKwl9CisKKwltYWxpZHBfaHdfY2xlYXJiaXRz KGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX01BU0tJUlEpOworfQorCit2b2lkIG1hbGlk cF9od19lbmFibGVfaXJxKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTggYmxvY2ss IHUzMiBpcnEpCit7CisJdTMyIGJhc2UgPSAwOworCisJc3dpdGNoIChibG9jaykgeworCWNhc2Ug TUFMSURQX0RFX0JMT0NLOgorCQliYXNlID0gMDsKKwkJYnJlYWs7CisJY2FzZSBNQUxJRFBfU0Vf QkxPQ0s6CisJCWJhc2UgPSBod2Rldi0+bWFwLnNlX2Jhc2U7CisJCWJyZWFrOworCWNhc2UgTUFM SURQX0RDX0JMT0NLOgorCQliYXNlID0gaHdkZXYtPm1hcC5kY19iYXNlOworCQlicmVhazsKKwl9 CisKKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgaXJxLCBiYXNlICsgTUFMSURQX1JFR19NQVNL SVJRKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG1hbGlkcF9kZV9pcnEoaW50IGlycSwgdm9p ZCAqYXJnKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBhcmc7CisJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2OworCWNvbnN0IHN0cnVjdCBtYWxpZHBfaXJxX21hcCAqZGU7CisJdTMyIHN0YXR1 cywgbWFzaywgZGNfc3RhdHVzOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCisJaWYg KCFkcm0tPmRldl9wcml2YXRlKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlod2RldiA9IG1h bGlkcC0+ZGV2OworCWRlID0gJmh3ZGV2LT5tYXAuZGVfaXJxX21hcDsKKworCS8qIGZpcnN0IGhh bmRsZSB0aGUgY29uZmlnIHZhbGlkIElSUSAqLworCWRjX3N0YXR1cyA9IG1hbGlkcF9od19yZWFk KGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7CisJaWYgKGRj X3N0YXR1cyAmIGh3ZGV2LT5tYXAuZGNfaXJxX21hcC52c3luY19pcnEpIHsKKwkJLyogd2UgaGF2 ZSBhIHBhZ2UgZmxpcCBldmVudCAqLworCQlhdG9taWNfc2V0KCZtYWxpZHAtPmNvbmZpZ192YWxp ZCwgMSk7CisJCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywgZGNf c3RhdHVzKTsKKwkJcmV0ID0gSVJRX1dBS0VfVEhSRUFEOworCX0KKworCXN0YXR1cyA9IG1hbGlk cF9od19yZWFkKGh3ZGV2LCBNQUxJRFBfUkVHX1NUQVRVUyk7CisJaWYgKCEoc3RhdHVzICYgZGUt PmlycV9tYXNrKSkKKwkJcmV0dXJuIHJldDsKKworCW1hc2sgPSBtYWxpZHBfaHdfcmVhZChod2Rl diwgTUFMSURQX1JFR19NQVNLSVJRKTsKKwlzdGF0dXMgJj0gbWFzazsKKwlpZiAoc3RhdHVzICYg ZGUtPnZzeW5jX2lycSkKKwkJZHJtX2NydGNfaGFuZGxlX3ZibGFuaygmbWFsaWRwLT5jcnRjKTsK KworCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywgc3RhdHVzKTsK KworCXJldHVybiAocmV0ID09IElSUV9OT05FKSA/IElSUV9IQU5ETEVEIDogcmV0OworfQorCitz dGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX2RlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2 b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKKwlzdHJ1Y3QgbWFs aWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKworCXdha2VfdXAoJm1hbGlkcC0+ d3EpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgbWFsaWRwX2RlX2lycV9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGludCBpcnEpCit7CisJc3RydWN0IG1hbGlkcF9kcm0g Km1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3 ZGV2ID0gbWFsaWRwLT5kZXY7CisJaW50IHJldDsKKworCS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFy ZSBkaXNhYmxlZCAqLworCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX0RDX0JM T0NLLCAweGZmZmZmZmZmKTsKKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfRENf QkxPQ0ssIDB4ZmZmZmZmZmYpOworCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQ X0RFX0JMT0NLLCAweGZmZmZmZmZmKTsKKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJ RFBfREVfQkxPQ0ssIDB4ZmZmZmZmZmYpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVk X2lycShkcm0tPmRldiwgaXJxLCBtYWxpZHBfZGVfaXJxLAorCQkJCQltYWxpZHBfZGVfaXJxX3Ro cmVhZF9oYW5kbGVyLAorCQkJCQlJUlFGX1NIQVJFRCwgIm1hbGlkcC1kZSIsIGRybSk7CisJaWYg KHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFsbCBERSBJUlEgaGFuZGxl clxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZmlyc3QgZW5hYmxlIHRoZSBEQyBibG9j ayBJUlFzICovCisJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9EQ19CTE9DSywK KwkJCSAgICAgaHdkZXYtPm1hcC5kY19pcnFfbWFwLmlycV9tYXNrKTsKKworCS8qIG5vdyBlbmFi bGUgdGhlIERFIGJsb2NrIElSUXMgKi8KKwltYWxpZHBfaHdfZW5hYmxlX2lycShod2RldiwgTUFM SURQX0RFX0JMT0NLLAorCQkJICAgICBod2Rldi0+bWFwLmRlX2lycV9tYXAuaXJxX21hc2spOwor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbWFsaWRwX2RlX2lycV9jbGVhbnVwKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3By aXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7CisK KwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywKKwkJCSAgICAg IGh3ZGV2LT5tYXAuZGVfaXJxX21hcC5pcnFfbWFzayk7CisJbWFsaWRwX2h3X2Rpc2FibGVfaXJx KGh3ZGV2LCBNQUxJRFBfRENfQkxPQ0ssCisJCQkgICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAu aXJxX21hc2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycShpbnQgaXJx LCB2b2lkICphcmcpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGFyZzsKKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKKwl1MzIgc3RhdHVzLCBtYXNrOworCisJc3Rh dHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFzZSArIE1BTElEUF9S RUdfU1RBVFVTKTsKKwlpZiAoIShzdGF0dXMgJiBod2Rldi0+bWFwLnNlX2lycV9tYXAuaXJxX21h c2spKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwltYXNrID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYs IGh3ZGV2LT5tYXAuc2VfYmFzZSArIE1BTElEUF9SRUdfTUFTS0lSUSk7CisJc3RhdHVzID0gbWFs aWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuc2VfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVT KTsKKwlzdGF0dXMgJj0gbWFzazsKKwkvKiBUb0RvOiBzdGF0dXMgZGVjb2RpbmcgYW5kIGZpcmlu ZyB1cCBvZiBWU1lOQyBhbmQgcGFnZSBmbGlwIGV2ZW50cyAqLworCisJbWFsaWRwX2h3X2NsZWFy X2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCBzdGF0dXMpOworCS8qIHJldHVybiBJUlFfV0FL RV9USFJFQUQ7ICovCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJu X3QgbWFsaWRwX3NlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCit7CisJ cmV0dXJuIElSUV9IQU5ETEVEOworfQorCitpbnQgbWFsaWRwX3NlX2lycV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIGludCBpcnEpCit7CisJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9 IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFs aWRwLT5kZXY7CisJaW50IHJldDsKKworCS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxl ZCAqLworCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCAweGZm ZmZmZmZmKTsKKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssIDB4 ZmZmZmZmZmYpOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0tPmRldiwg aXJxLCBtYWxpZHBfc2VfaXJxLAorCQkJCQltYWxpZHBfc2VfaXJxX3RocmVhZF9oYW5kbGVyLAor CQkJCQlJUlFGX1NIQVJFRCwgIm1hbGlkcC1zZSIsIGRybSk7CisJaWYgKHJldCA8IDApIHsKKwkJ RFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5zdGFsbCBTRSBJUlEgaGFuZGxlclxuIik7CisJCXJldHVy biByZXQ7CisJfQorCisJbWFsaWRwX2h3X2VuYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9D SywKKwkJCSAgICAgaHdkZXYtPm1hcC5zZV9pcnFfbWFwLmlycV9tYXNrKTsKKworCXJldHVybiAw OworfQorCit2b2lkIG1hbGlkcF9zZV9pcnFfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KQoreworCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2OworCisJbWFsaWRwX2h3 X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfU0VfQkxPQ0ssCisJCQkgICAgICBod2Rldi0+bWFw LnNlX2lycV9tYXAuaXJxX21hc2spOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Fy bS9tYWxpZHBfaHcuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFiMWZlNwotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKgor ICogKEMpIENPUFlSSUdIVCAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVk IHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu ZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8g dGhlIHRlcm1zCisgKiBvZiBzdWNoIEdOVSBsaWNlbmNlLgorICoKKyAqIEFSTSBNYWxpIERQIGhh cmR3YXJlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIF9fTUFMSURQX0hX X0hfXworI2RlZmluZSBfX01BTElEUF9IV19IX18KKworI2luY2x1ZGUgPGRybS9kcm1fZm91cmNj Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKK3N0cnVjdCB2aWRlb21vZGU7CitzdHJ1 Y3QgY2xrOworCisvKiBNYWxpIERQIElQIGJsb2NrcyAqLworZW51bSB7CisJTUFMSURQX0RFX0JM T0NLID0gMCwKKwlNQUxJRFBfU0VfQkxPQ0ssCisJTUFMSURQX0RDX0JMT0NLCit9OworCisvKiBN YWxpIERQIGxheWVyIElEcyAqLworZW51bSB7CisJREVfVklERU8xID0gQklUKDApLAorCURFX0dS QVBISUNTMSA9IEJJVCgxKSwKKwlERV9HUkFQSElDUzIgPSBCSVQoMiksIC8qIHVzZWQgb25seSBp biBEUDUwMCAqLworCURFX1ZJREVPMiA9IEJJVCgzKSwKKwlERV9TTUFSVCA9IEJJVCg0KSwKK307 CisKK3N0cnVjdCBtYWxpZHBfaW5wdXRfZm9ybWF0IHsKKwl1OCBsYXllcjsJCS8qIGJpdG1hc2sg b2YgbGF5ZXJzIHN1cHBvcnRpbmcgaXQgKi8KKwl1OCBpZDsJCQkvKiB1c2VkIGludGVybmFsbHkg Ki8KKwl1MzIgZm9ybWF0OwkJLyogRFJNIGZvdXJjYyAqLworfTsKKworLyoKKyAqIGhpZGUgdGhl IGRpZmZlcmVuY2VzIGJldHdlZW4gcmVnaXN0ZXIgbWFwcworICogYnkgdXNpbmcgYSBjb21tb24g c3RydWN0dXJlIHRvIGhvbGQgdGhlCisgKiBiYXNlIHJlZ2lzdGVyIG9mZnNldHMKKyAqLworCitz dHJ1Y3QgbWFsaWRwX2lycV9tYXAgeworCXUzMiBpcnFfbWFzazsJCS8qIG1hc2sgb2YgSVJRcyB0 aGF0IGNhbiBiZSBlbmFibGVkIGluIHRoZSBibG9jayAqLworCXUzMiB2c3luY19pcnE7CQkvKiBJ UlEgYml0IHVzZWQgZm9yIHNpZ25hbGluZyBkdXJpbmcgVlNZTkMgKi8KK307CisKK3N0cnVjdCBt YWxpZHBfbGF5ZXIgeworCXU4IGlkOwkJCS8qIGxheWVyIElEICovCisJdTE2IGJhc2U7CQkvKiBh ZGRyZXNzIG9mZnNldCBmb3IgdGhlIHJlZ2lzdGVyIGJhbmsgKi8KKwl1MTYgcHRyOwkJLyogYWRk cmVzcyBvZmZzZXQgZm9yIHRoZSBwb2ludGVyIHJlZ2lzdGVyICovCit9OworCisvKiByZWdtYXAg ZmVhdHVyZXMgKi8KKyNkZWZpbmUgTUFMSURQX1JFR01BUF9IQVNfQ0xFQVJJUlEJKDEgPDwgMCkK Kworc3RydWN0IG1hbGlkcF9od19yZWdtYXAgeworCS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBE RSByZWdpc3RlciBiYW5rICovCisJLyogaXMgYWx3YXlzIDB4MDAwMCAqLworCS8qIGFkZHJlc3Mg b2Zmc2V0IG9mIHRoZSBTRSByZWdpc3RlcnMgYmFuayAqLworCWNvbnN0IHUxNiBzZV9iYXNlOwor CS8qIGFkZHJlc3Mgb2Zmc2V0IG9mIHRoZSBEQyByZWdpc3RlcnMgYmFuayAqLworCWNvbnN0IHUx NiBkY19iYXNlOworCisJY29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwIGRlX2lycV9tYXA7CisJ Y29uc3Qgc3RydWN0IG1hbGlkcF9pcnFfbWFwIHNlX2lycV9tYXA7CisJY29uc3Qgc3RydWN0IG1h bGlkcF9pcnFfbWFwIGRjX2lycV9tYXA7CisKKwkvKiBsaXN0IG9mIHN1cHBvcnRlZCBsYXllcnMg Ki8KKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2xheWVyICpsYXllcnM7CisJY29uc3QgdTggbl9sYXll cnM7CisKKwkvKiBsaXN0IG9mIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXRzIGZvciBlYWNoIGxheWVy ICovCisJY29uc3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgKmlucHV0X2Zvcm1hdHM7CisJ Y29uc3QgdTggbl9pbnB1dF9mb3JtYXRzOworCisJLyogYWRkcmVzcyBvZmZzZXQgZm9yIHRoZSBv dXRwdXQgZGVwdGggcmVnaXN0ZXIgKi8KKwljb25zdCB1MTYgb3V0X2RlcHRoX2Jhc2U7CisKKwkv KiBiaXRtYXAgd2l0aCByZWdpc3RlciBtYXAgZmVhdHVyZXMgKi8KKwljb25zdCB1OCBmZWF0dXJl czsKK307CisKK3N0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIHsKKwljb25zdCBzdHJ1Y3QgbWFsaWRw X2h3X3JlZ21hcCBtYXA7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyogQVBCIGNsb2NrICov CisJc3RydWN0IGNsayAqcGNsazsKKwkvKiBBWEkgY2xvY2sgKi8KKwlzdHJ1Y3QgY2xrICphY2xr OworCS8qIG1haW4gY2xvY2sgZm9yIGRpc3BsYXkgY29yZSAqLworCXN0cnVjdCBjbGsgKm1jbGs7 CisJLyogcGl4ZWwgY2xvY2sgZm9yIGRpc3BsYXkgY29yZSAqLworCXN0cnVjdCBjbGsgKnB4bGNs azsKKworCS8qCisJICogVmFsaWRhdGUgdGhlIGRyaXZlciBpbnN0YW5jZSBhZ2FpbnN0IHRoZSBo YXJkd2FyZSBiaXRzCisJICovCisJaW50ICgqcXVlcnlfaHcpKHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2Rldik7CisKKwkvKgorCSAqIFNldCB0aGUgaGFyZHdhcmUgaW50byBjb25maWcgbW9k ZSwgcmVhZHkgdG8gYWNjZXB0IG1vZGUgY2hhbmdlcworCSAqLworCXZvaWQgKCplbnRlcl9jb25m aWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKKworCS8qCisJICogVGVs bCBoYXJkd2FyZSB0byBleGl0IGNvbmZpZ3VyYXRpb24gbW9kZQorCSAqLworCXZvaWQgKCpsZWF2 ZV9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKKworCS8qCisJ ICogUXVlcnkgaWYgaGFyZHdhcmUgaXMgaW4gY29uZmlndXJhdGlvbiBtb2RlCisJICovCisJYm9v bCAoKmluX2NvbmZpZ19tb2RlKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpOworCisJ LyoKKwkgKiBTZXQgY29uZmlndXJhdGlvbiB2YWxpZCBmbGFnIGZvciBoYXJkd2FyZSBwYXJhbWV0 ZXJzIHRoYXQgY2FuCisJICogYmUgY2hhbmdlZCBvdXRzaWRlIHRoZSBjb25maWd1cmF0aW9uIG1v ZGUuIEhhcmR3YXJlIHdpbGwgdXNlCisJICogdGhlIG5ldyBzZXR0aW5ncyB3aGVuIGNvbmZpZyB2 YWxpZCBpcyBzZXQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKKwkgKiBjdXJyZW50IGJ1ZmZlciBzY2Fu b3V0CisJICovCisJdm9pZCAoKnNldF9jb25maWdfdmFsaWQpKHN0cnVjdCBtYWxpZHBfaHdfZGV2 aWNlICpod2Rldik7CisKKwkvKgorCSAqIFNldCBhIG5ldyBtb2RlIGluIGhhcmR3YXJlLiBSZXF1 aXJlcyB0aGUgaGFyZHdhcmUgdG8gYmUgaW4KKwkgKiBjb25maWd1cmF0aW9uIG1vZGUgYmVmb3Jl IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorCSAqLworCXZvaWQgKCptb2Rlc2V0KShzdHJ1Y3Qg bWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm0pOworCisJLyoKKwkg KiBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHJvdGF0aW9uIG1lbW9yeSBnaXZlbiB0aGUgYWN0aXZl IGFyZWEKKwkgKiBhbmQgdGhlIGJ1ZmZlciBmb3JtYXQuCisJICovCisJaW50ICgqcm90bWVtX3Jl cXVpcmVkKShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMy IGZtdCk7CisKKwl1OCBmZWF0dXJlczsKKworCXU4IG1pbl9saW5lX3NpemU7CisJdTE2IG1heF9s aW5lX3NpemU7CisKKwkvKiBzaXplIG9mIG1lbW9yeSB1c2VkIGZvciByb3RhdGluZyBsYXllcnMs IHVwIHRvIHR3byBiYW5rcyBhdmFpbGFibGUgKi8KKwl1MzIgcm90YXRpb25fbWVtb3J5WzJdOwor fTsKKworLyogU3VwcG9ydGVkIHZhcmlhbnRzIG9mIHRoZSBoYXJkd2FyZSAqLworZW51bSB7CisJ TUFMSURQXzUwMCA9IDAsCisJTUFMSURQXzU1MCwKKwlNQUxJRFBfNjUwLAorCS8qIGtlZXAgdGhl IG5leHQgZW50cnkgbGFzdCAqLworCU1BTElEUF9NQVhfREVWSUNFUworfTsKKworZXh0ZXJuIGNv bnN0IHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIG1hbGlkcF9kZXZpY2VbTUFMSURQX01BWF9ERVZJ Q0VTXTsKKwordTMyIG1hbGlkcF9od19yZWFkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgdTMyIHJlZyk7Cit2b2lkIG1hbGlkcF9od193cml0ZShzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYsIHUzMiB2YWx1ZSwgdTMyIHJlZyk7Cit2b2lkIG1hbGlkcF9od19zZXRiaXRzKHN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIG1hc2ssIHUzMiByZWcpOwordm9pZCBt YWxpZHBfaHdfY2xlYXJiaXRzKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwgdTMyIG1h c2ssIHUzMiByZWcpOwordm9pZCBtYWxpZHBfaHdfY2xlYXJfaXJxKHN0cnVjdCBtYWxpZHBfaHdf ZGV2aWNlICpod2RldiwgdTggYmxvY2ssIHUzMiBpcnEpOwordm9pZCBtYWxpZHBfaHdfZGlzYWJs ZV9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LCB1OCBibG9jaywgdTMyIGlycSk7 Cit2b2lkIG1hbGlkcF9od19lbmFibGVfaXJxKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rl diwgdTggYmxvY2ssIHUzMiBpcnEpOworCitpbnQgbWFsaWRwX2RlX2lycV9pbml0KHN0cnVjdCBk cm1fZGV2aWNlICpkcm0sIGludCBpcnEpOworaW50IG1hbGlkcF9zZV9pcnFfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZHJtLCBpbnQgaXJxKTsKK3ZvaWQgbWFsaWRwX2RlX2lycV9jbGVhbnVwKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pOwordm9pZCBtYWxpZHBfc2VfaXJxX2NsZWFudXAoc3RydWN0 IGRybV9kZXZpY2UgKmRybSk7CisKK3U4IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKGNvbnN0IHN0 cnVjdCBtYWxpZHBfaHdfcmVnbWFwICptYXAsCisJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1h dCk7CisKKy8qCisgKiBiYWNrZ3JvdW5kIGNvbG9yIGNvbXBvbmVudHMgYXJlIGRlZmluZWQgYXMg MTJiaXRzIHZhbHVlcywKKyAqIHRoZXkgd2lsbCBiZSBzaGlmdGVkIHJpZ2h0IHdoZW4gc3RvcmVk IG9uIGhhcmR3YXJlIHRoYXQKKyAqIHN1cHBvcnRzIG9ubHkgOGJpdHMgcGVyIGNoYW5uZWwKKyAq LworI2RlZmluZSBNQUxJRFBfQkdORF9DT0xPUl9SCQkweDAwMAorI2RlZmluZSBNQUxJRFBfQkdO RF9DT0xPUl9HCQkweDAwMAorI2RlZmluZSBNQUxJRFBfQkdORF9DT0xPUl9CCQkweDAwMAorCisj ZW5kaWYgIC8qIF9fTUFMSURQX0hXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2FybS9tYWxpZHBfcGxhbmVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9wbGFuZXMu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjVhYTBlCi0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMKQEAgLTAsMCArMSwz MzcgQEAKKy8qCisgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMg cmVzZXJ2ZWQuCisgKiBBdXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5 b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug dmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoZSB0 ZXJtcworICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KKyAqCisgKiBBUk0gTWFsaSBEUCBwbGFuZSBt YW5pcHVsYXRpb24gcm91dGluZXMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mYl9jbWFf aGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisKKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKKyNpbmNs dWRlICJtYWxpZHBfZHJ2LmgiCisKKy8qIExheWVyIHNwZWNpZmljIHJlZ2lzdGVyIG9mZnNldHMg Ki8KKyNkZWZpbmUgTUFMSURQX0xBWUVSX0ZPUk1BVAkJMHgwMDAKKyNkZWZpbmUgTUFMSURQX0xB WUVSX0NPTlRST0wJCTB4MDA0CisjZGVmaW5lICAgTEFZRVJfRU5BQkxFCQkJKDEgPDwgMCkKKyNk ZWZpbmUgICBMQVlFUl9ST1RfT0ZGU0VUCQk4CisjZGVmaW5lICAgTEFZRVJfSF9GTElQCQkJKDEg PDwgMTApCisjZGVmaW5lICAgTEFZRVJfVl9GTElQCQkJKDEgPDwgMTEpCisjZGVmaW5lICAgTEFZ RVJfUk9UX01BU0sJCSgweGYgPDwgOCkKKyNkZWZpbmUgTUFMSURQX0xBWUVSX1NJWkUJCTB4MDBj CisjZGVmaW5lICAgTEFZRVJfSF9WQUwoeCkJCSgoKHgpICYgMHgxZmZmKSA8PCAwKQorI2RlZmlu ZSAgIExBWUVSX1ZfVkFMKHgpCQkoKCh4KSAmIDB4MWZmZikgPDwgMTYpCisjZGVmaW5lIE1BTElE UF9MQVlFUl9DT01QX1NJWkUJCTB4MDEwCisjZGVmaW5lIE1BTElEUF9MQVlFUl9PRkZTRVQJCTB4 MDE0CisjZGVmaW5lIE1BTElEUF9MQVlFUl9TVFJJREUJCTB4MDE4CisKK3N0YXRpYyB2b2lkIG1h bGlkcF9kZV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQoreworCXN0cnVj dCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKKworCWlmIChtcC0+ YmFzZS5mYikKKwkJZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKG1wLT5iYXNlLmZiKTsKKwor CWRybV9wbGFuZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7CisJZHJtX3BsYW5lX2NsZWFudXAocGxh bmUpOworCWRldm1fa2ZyZWUocGxhbmUtPmRldi0+ZGV2LCBtcCk7Cit9CisKK3N0YXRpYyBpbnQg bWFsaWRwX2RlX2F0b21pY191cGRhdGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJ CQkJCSBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJCSBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVy ICpmYiwKKwkJCQkJIGludCBjcnRjX3gsIGludCBjcnRjX3ksCisJCQkJCSB1bnNpZ25lZCBpbnQg Y3J0Y193LAorCQkJCQkgdW5zaWduZWQgaW50IGNydGNfaCwKKwkJCQkJIHVpbnQzMl90IHNyY194 LCB1aW50MzJfdCBzcmNfeSwKKwkJCQkJIHVpbnQzMl90IHNyY193LCB1aW50MzJfdCBzcmNfaCkK K3sKKwlyZXR1cm4gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRlX3BsYW5lKHBsYW5lLCBjcnRjLCBm YiwgY3J0Y194LCBjcnRjX3ksCisJCQkJCSAgICAgIGNydGNfdywgY3J0Y19oLCBzcmNfeCwgc3Jj X3ksCisJCQkJCSAgICAgIHNyY193LCBzcmNfaCk7Cit9CisKK3N0YXRpYyBpbnQgbWFsaWRwX2Rl X3BsYW5lX2F0b21pY19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJ CSAgICAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwKKwkJCQkJICAgICAgIHN0cnVj dCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJCQkgICAgICAgdWludDY0X3QgdmFsKQorewor CXJldHVybiBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHkocGxhbmUsIHByb3Bl cnR5LCB2YWwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9mdW5jcyBtYWxp ZHBfZGVfcGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZSA9IG1hbGlkcF9kZV9hdG9taWNf dXBkYXRlX3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJs ZV9wbGFuZSwKKwkuZGVzdHJveSA9IG1hbGlkcF9kZV9wbGFuZV9kZXN0cm95LAorCS5yZXNldCA9 IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS5zZXRfcHJvcGVydHkgPSBkcm1fYXRv bWljX2hlbHBlcl9wbGFuZV9zZXRfcHJvcGVydHksCisJLmF0b21pY19zZXRfcHJvcGVydHkgPSBt YWxpZHBfZGVfcGxhbmVfYXRvbWljX3NldF9wcm9wZXJ0eSwKKwkuYXRvbWljX2R1cGxpY2F0ZV9z dGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAor fTsKKworc3RhdGljIGludCBtYWxpZHBfZGVfcGxhbmVfY2hlY2soc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCisJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBt YWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsKKwl1MzIgc3JjX3csIHNy Y19oOworCisJaWYgKCFzdGF0ZS0+Y3J0YyB8fCAhc3RhdGUtPmZiKQorCQlyZXR1cm4gMDsKKwor CXNyY193ID0gc3RhdGUtPnNyY193ID4+IDE2OworCXNyY19oID0gc3RhdGUtPnNyY19oID4+IDE2 OworCisJaWYgKChzdGF0ZS0+Y3J0Y193ID4gbXAtPmh3ZGV2LT5tYXhfbGluZV9zaXplKSB8fAor CSAgICAoc3RhdGUtPmNydGNfaCA+IG1wLT5od2Rldi0+bWF4X2xpbmVfc2l6ZSkgfHwKKwkgICAg KHN0YXRlLT5jcnRjX3cgPCBtcC0+aHdkZXYtPm1pbl9saW5lX3NpemUpIHx8CisJICAgIChzdGF0 ZS0+Y3J0Y19oIDwgbXAtPmh3ZGV2LT5taW5fbGluZV9zaXplKSB8fAorCSAgICAoc3RhdGUtPmNy dGNfdyAhPSBzcmNfdykgfHwgKHN0YXRlLT5jcnRjX2ggIT0gc3JjX2gpKQorCQlyZXR1cm4gLUVJ TlZBTDsKKworCS8qIHBhY2tlZCBSR0I4ODggLyBCR1I4ODggY2FuJ3QgYmUgcm90YXRlZCBvciBm bGlwcGVkICovCisJaWYgKHN0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8wKSAmJgor CSAgICAoc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODggfHwKKwkg ICAgIHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfQkdSODg4KSkKKwkJcmV0 dXJuIC1FSU5WQUw7CisKKwltcC0+cm90bWVtX3NpemUgPSAwOworCWlmIChzdGF0ZS0+cm90YXRp b24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKSB7CisJCWludCB2YWw7CisKKwkJdmFsID0gbXAtPmh3 ZGV2LT5yb3RtZW1fcmVxdWlyZWQobXAtPmh3ZGV2LCBzdGF0ZS0+Y3J0Y19oLAorCQkJCQkJIHN0 YXRlLT5jcnRjX3csCisJCQkJCQkgc3RhdGUtPmZiLT5waXhlbF9mb3JtYXQpOworCQlpZiAodmFs IDwgMCkKKwkJCXJldHVybiB2YWw7CisKKwkJbXAtPnJvdG1lbV9zaXplID0gdmFsOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxhbmVfdXBkYXRlKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9z dGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9jbWFfb2JqZWN0ICpvYmo7CisJc3RydWN0IG1hbGlk cF9wbGFuZSAqbXA7CisJY29uc3Qgc3RydWN0IG1hbGlkcF9od19yZWdtYXAgKm1hcDsKKwl1OCBm b3JtYXRfaWQ7CisJdTE2IHB0cjsKKwl1MzIgZm9ybWF0LCBzcmNfdywgc3JjX2gsIGRlc3Rfdywg ZGVzdF9oLCB2YWwgPSAwOworCWludCBudW1fcGxhbmVzLCBpOworCisJbXAgPSB0b19tYWxpZHBf cGxhbmUocGxhbmUpOworCisjaWZkZWYgTUFMSURQX0VOQUJMRV9CR05EX0NPTE9SX0FTX1BSSU1B UllfUExBTkUKKwkvKiBza2lwIHRoZSBwcmltYXJ5IHBsYW5lLCBpdCBpcyB1c2luZyB0aGUgYmFj a2dyb3VuZCBjb2xvciAqLworCWlmICghbXAtPmxheWVyIHx8ICFtcC0+bGF5ZXItPmlkKQorCQly ZXR1cm47CisjZW5kaWYKKworCW1hcCA9ICZtcC0+aHdkZXYtPm1hcDsKKwlmb3JtYXQgPSBwbGFu ZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJZm9ybWF0X2lkID0gbWFsaWRwX2h3X2dldF9m b3JtYXRfaWQobWFwLCBtcC0+bGF5ZXItPmlkLCBmb3JtYXQpOworCWlmIChmb3JtYXRfaWQgPT0g KHU4KS0xKQorCQlyZXR1cm47CisKKwludW1fcGxhbmVzID0gZHJtX2Zvcm1hdF9udW1fcGxhbmVz KGZvcm1hdCk7CisKKwkvKiBjb252ZXJ0IHNyYyB2YWx1ZXMgZnJvbSBRMTYgZml4ZWQgcG9pbnQg dG8gaW50ZWdlciAqLworCXNyY193ID0gcGxhbmUtPnN0YXRlLT5zcmNfdyA+PiAxNjsKKwlzcmNf aCA9IHBsYW5lLT5zdGF0ZS0+c3JjX2ggPj4gMTY7CisJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRp b24gJiBNQUxJRFBfUk9UQVRFRF9NQVNLKSB7CisJCWRlc3RfdyA9IHBsYW5lLT5zdGF0ZS0+Y3J0 Y19oOworCQlkZXN0X2ggPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKKwl9IGVsc2UgeworCQlkZXN0 X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNfdzsKKwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRj X2g7CisJfQorCisJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2RldiwgZm9ybWF0X2lkLCBtcC0+bGF5 ZXItPmJhc2UpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wbGFuZXM7IGkrKykgeworCQkvKiBj YWxjdWxhdGUgdGhlIG9mZnNldCBmb3IgdGhlIGxheWVyJ3MgcGxhbmUgcmVnaXN0ZXJzICovCisJ CXB0ciA9IG1wLT5sYXllci0+cHRyICsgKGkgPDwgNCk7CisKKwkJb2JqID0gZHJtX2ZiX2NtYV9n ZXRfZ2VtX29iaihwbGFuZS0+c3RhdGUtPmZiLCBpKTsKKwkJbWFsaWRwX2h3X3dyaXRlKG1wLT5o d2RldiwgbG93ZXJfMzJfYml0cyhvYmotPnBhZGRyKSwgcHRyKTsKKwkJbWFsaWRwX2h3X3dyaXRl KG1wLT5od2RldiwgdXBwZXJfMzJfYml0cyhvYmotPnBhZGRyKSwgcHRyICsgNCk7CisJCW1hbGlk cF9od193cml0ZShtcC0+aHdkZXYsIHBsYW5lLT5zdGF0ZS0+ZmItPnBpdGNoZXNbaV0sCisJCQkJ bXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX1NUUklERSk7CisJfQorCisJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgTEFZRVJfSF9WQUwoc3JjX3cpIHwgTEFZRVJfVl9WQUwoc3JjX2gp LAorCQkJbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX1NJWkUpOworCisJbWFsaWRwX2h3 X3dyaXRlKG1wLT5od2RldiwgTEFZRVJfSF9WQUwoZGVzdF93KSB8IExBWUVSX1ZfVkFMKGRlc3Rf aCksCisJCQltcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFKTsKKworCW1h bGlkcF9od193cml0ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKHBsYW5lLT5zdGF0ZS0+Y3J0Y194 KSB8CisJCQlMQVlFUl9WX1ZBTChwbGFuZS0+c3RhdGUtPmNydGNfeSksCisJCQltcC0+bGF5ZXIt PmJhc2UgKyBNQUxJRFBfTEFZRVJfT0ZGU0VUKTsKKworCS8qIGZpcnN0IGNsZWFyIHRoZSByb3Rh dGlvbiBiaXRzIGluIHRoZSByZWdpc3RlciAqLworCW1hbGlkcF9od19jbGVhcmJpdHMobXAtPmh3 ZGV2LCBMQVlFUl9ST1RfTUFTSywKKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZ RVJfQ09OVFJPTCk7CisKKwkvKiBzZXR1cCB0aGUgcm90YXRpb24gYW5kIGF4aXMgZmxpcCBiaXRz ICovCisJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spCisJCXZh bCA9IGlsb2cyKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spIDw8IExB WUVSX1JPVF9PRkZTRVQ7CisJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBCSVQoRFJNX1JF RkxFQ1RfWCkpCisJCXZhbCB8PSBMQVlFUl9WX0ZMSVA7CisJaWYgKHBsYW5lLT5zdGF0ZS0+cm90 YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWSkpCisJCXZhbCB8PSBMQVlFUl9IX0ZMSVA7CisKKwkv KiBzZXQgdGhlICdlbmFibGUgbGF5ZXInIGJpdCAqLworCXZhbCB8PSBMQVlFUl9FTkFCTEU7CisK KwltYWxpZHBfaHdfc2V0Yml0cyhtcC0+aHdkZXYsIHZhbCwKKwkJCSAgbXAtPmxheWVyLT5iYXNl ICsgTUFMSURQX0xBWUVSX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBtYWxpZHBfZGVfcGxh bmVfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKKwkJCQkgICAgc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG1hbGlkcF9wbGFuZSAqbXAgPSB0b19tYWxp ZHBfcGxhbmUocGxhbmUpOworCisJbWFsaWRwX2h3X2NsZWFyYml0cyhtcC0+aHdkZXYsIExBWUVS X0VOQUJMRSwKKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZRVJfQ09OVFJPTCk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBtYWxpZHBf ZGVfcGxhbmVfaGVscGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sgPSBtYWxpZHBfZGVfcGxh bmVfY2hlY2ssCisJLmF0b21pY191cGRhdGUgPSBtYWxpZHBfZGVfcGxhbmVfdXBkYXRlLAorCS5h dG9taWNfZGlzYWJsZSA9IG1hbGlkcF9kZV9wbGFuZV9kaXNhYmxlLAorfTsKKworI2lmZGVmIE1B TElEUF9FTkFCTEVfQkdORF9DT0xPUl9BU19QUklNQVJZX1BMQU5FCitzdGF0aWMgY29uc3QgdWlu dDMyX3Qgc2FmZV9tb2Rlc2V0X2Zvcm1hdHNbXSA9IHsKKwlEUk1fRk9STUFUX1hSR0I4ODg4LAor CURSTV9GT1JNQVRfQVJHQjg4ODgsCit9OworCitzdGF0aWMgaW50IG1hbGlkcF9kZV9jcmVhdGVf cHJpbWFyeV9wbGFuZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQoreworCXN0cnVjdCBtYWxpZHBf ZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBtYWxpZHBfcGxhbmUgKnBs YW5lOworCWludCByZXQ7CisKKwlwbGFuZSA9IGRldm1fa3phbGxvYyhkcm0tPmRldiwgc2l6ZW9m KCpwbGFuZSksIEdGUF9LRVJORUwpOworCWlmICghcGxhbmUpCisJCXJldHVybiAtRU5PTUVNOwor CisJcmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRybSwgJnBsYW5lLT5iYXNlLCAwLAor CQkJCSAgICAgICAmbWFsaWRwX2RlX3BsYW5lX2Z1bmNzLAorCQkJCSAgICAgICBzYWZlX21vZGVz ZXRfZm9ybWF0cywKKwkJCQkgICAgICAgQVJSQVlfU0laRShzYWZlX21vZGVzZXRfZm9ybWF0cyks CisJCQkJICAgICAgIERSTV9QTEFORV9UWVBFX1BSSU1BUlksIE5VTEwpOworCWlmIChyZXQpCisJ CXJldHVybiByZXQ7CisKKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsICZtYWxp ZHBfZGVfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwlwbGFuZS0+aHdkZXYgPSBtYWxpZHAtPmRldjsK KworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBtYWxpZHBfZGVfcGxhbmVzX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJt LT5kZXZfcHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCAqbWFwID0gJm1h bGlkcC0+ZGV2LT5tYXA7CisJc3RydWN0IG1hbGlkcF9wbGFuZSAqcGxhbmUgPSBOVUxMOworCWVu dW0gZHJtX3BsYW5lX3R5cGUgcGxhbmVfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGNydGNzID0gMSA8 PCBkcm0tPm1vZGVfY29uZmlnLm51bV9jcnRjOworCXUzMiAqZm9ybWF0czsKKwlpbnQgcmV0LCBp LCBqLCBuOworCisjaWZkZWYgTUFMSURQX0VOQUJMRV9CR05EX0NPTE9SX0FTX1BSSU1BUllfUExB TkUKKwlyZXQgPSBtYWxpZHBfZGVfY3JlYXRlX3ByaW1hcnlfcGxhbmUoZHJtKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCXBsYW5lX3R5cGUgPSBEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwor I2VuZGlmCisKKwlmb3JtYXRzID0ga2NhbGxvYyhtYXAtPm5faW5wdXRfZm9ybWF0cywgc2l6ZW9m KCpmb3JtYXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFmb3JtYXRzKSB7CisJCXJldCA9IC1FTk9N RU07CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWFwLT5uX2xheWVy czsgaSsrKSB7CisJCXU4IGlkID0gbWFwLT5sYXllcnNbaV0uaWQ7CisKKwkJcGxhbmUgPSBkZXZt X2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFw bGFuZSkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCisJCS8q IGJ1aWxkIHRoZSBsaXN0IG9mIERSTSBzdXBwb3J0ZWQgZm9ybWF0cyBiYXNlZCBvbiB0aGUgbWFw ICovCisJCWZvciAobiA9IDAsIGogPSAwOyAgaiA8IG1hcC0+bl9pbnB1dF9mb3JtYXRzOyBqKysp IHsKKwkJCWlmICgobWFwLT5pbnB1dF9mb3JtYXRzW2pdLmxheWVyICYgaWQpID09IGlkKQorCQkJ CWZvcm1hdHNbbisrXSA9IG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5mb3JtYXQ7CisJCX0KKworI2lm bmRlZiBNQUxJRFBfRU5BQkxFX0JHTkRfQ09MT1JfQVNfUFJJTUFSWV9QTEFORQorCQlwbGFuZV90 eXBlID0gKGkgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQkJRFJNX1BMQU5F X1RZUEVfT1ZFUkxBWTsKKyNlbmRpZgorCQlyZXQgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQo ZHJtLCAmcGxhbmUtPmJhc2UsIGNydGNzLAorCQkJCQkgICAgICAgJm1hbGlkcF9kZV9wbGFuZV9m dW5jcywgZm9ybWF0cywKKwkJCQkJICAgICAgIG4sIHBsYW5lX3R5cGUsIE5VTEwpOworCQlpZiAo cmV0IDwgMCkKKwkJCWdvdG8gY2xlYW51cDsKKworCQlpZiAoIWRybS0+bW9kZV9jb25maWcucm90 YXRpb25fcHJvcGVydHkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBCSVQoRFJNX1JPVEFU RV8wKSB8CisJCQkJCSAgICAgIEJJVChEUk1fUk9UQVRFXzkwKSB8CisJCQkJCSAgICAgIEJJVChE Uk1fUk9UQVRFXzE4MCkgfAorCQkJCQkgICAgICBCSVQoRFJNX1JPVEFURV8yNzApIHwKKwkJCQkJ ICAgICAgQklUKERSTV9SRUZMRUNUX1gpIHwKKwkJCQkJICAgICAgQklUKERSTV9SRUZMRUNUX1kp OworCQkJZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSA9CisJCQkJZHJtX21vZGVf Y3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRybSwgZmxhZ3MpOworCQl9CisJCS8qIFNNQVJUIGxh eWVyIGNhbid0IGJlIHJvdGF0ZWQgKi8KKwkJaWYgKGRybS0+bW9kZV9jb25maWcucm90YXRpb25f cHJvcGVydHkgJiYgKGlkICE9IERFX1NNQVJUKSkKKwkJCWRybV9vYmplY3RfYXR0YWNoX3Byb3Bl cnR5KCZwbGFuZS0+YmFzZS5iYXNlLAorCQkJCQkJICAgZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlv bl9wcm9wZXJ0eSwKKwkJCQkJCSAgIEJJVChEUk1fUk9UQVRFXzApKTsKKworCQlkcm1fcGxhbmVf aGVscGVyX2FkZCgmcGxhbmUtPmJhc2UsCisJCQkJICAgICAmbWFsaWRwX2RlX3BsYW5lX2hlbHBl cl9mdW5jcyk7CisJCXBsYW5lLT5od2RldiA9IG1hbGlkcC0+ZGV2OworCQlwbGFuZS0+bGF5ZXIg PSAmbWFwLT5sYXllcnNbaV07CisJfQorCisJa2ZyZWUoZm9ybWF0cyk7CisKKwlyZXR1cm4gMDsK KworY2xlYW51cDoKKwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKKwlrZnJlZShmb3Jt YXRzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95 KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0IGRybV9wbGFuZSAqcCwgKnB0Owor CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHB0LCAmZHJtLT5tb2RlX2NvbmZpZy5wbGFu ZV9saXN0LCBoZWFkKSB7CisJCWRybV9wbGFuZV9jbGVhbnVwKHApOworCX0KK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9h cm0vbWFsaWRwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Zl Y2IzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5o CkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogKEMpIENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVk LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVk YXVAYXJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMg cHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUK KyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3Vi amVjdCB0byB0aGUgdGVybXMKKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCisgKgorICogQVJNIE1h bGkgRFA1MDAvRFA1NTAvRFA2NTAgcmVnaXN0ZXJzIGRlZmluaXRpb24uCisgKi8KKworI2lmbmRl ZiBfX01BTElEUF9SRUdTX0hfXworI2RlZmluZSBfX01BTElEUF9SRUdTX0hfXworCisvKgorICog YWJicmV2aWF0aW9ucyB1c2VkOgorICogICAgLSBEQyAtIGRpc3BsYXkgY29yZSAoZ2VuZXJhbCBz ZXR0aW5ncykKKyAqICAgIC0gREUgLSBkaXNwbGF5IGVuZ2luZQorICogICAgLSBTRSAtIHNjYWxp bmcgZW5naW5lCisgKi8KKworLyogaW50ZXJydXB0IGJpdCBtYXNrcyAqLworI2RlZmluZSBNQUxJ RFBfREVfSVJRX1VOREVSUlVOCQkJKDEgPDwgMCkKKworI2RlZmluZSBNQUxJRFA1MDBfREVfSVJR X0FYSV9FUlIJCSgxIDw8IDQpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfVlNZTkMJCQkoMSA8 PCA1KQorI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1BST0dfTElORQkJKDEgPDwgNikKKyNkZWZp bmUgTUFMSURQNTAwX0RFX0lSUV9TQVRVUkFUSU9OCQkoMSA8PCA3KQorI2RlZmluZSBNQUxJRFA1 MDBfREVfSVJRX0NPTkZfVkFMSUQJCSgxIDw8IDgpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFf Q09ORl9NT0RFCQkoMSA8PCAxMSkKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9DT05GX0FDVElW RQkJKDEgPDwgMTcpCisjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAx OCkKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9URVNUTU9ERV9BQ1RJVkUJKDEgPDwgMTkpCisj ZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfRk9SQ0VfQkxOS19BQ1RJVkUJKDEgPDwgMjQpCisjZGVm aW5lIE1BTElEUDUwMF9ERV9JUlFfQVhJX0JVU1kJCSgxIDw8IDI4KQorI2RlZmluZSBNQUxJRFA1 MDBfREVfSVJRX0dMT0JBTAkJCSgxIDw8IDMxKQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0NP TkZfTU9ERQkJKDEgPDwgMCkKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9DT05GX1ZBTElECQko MSA8PCA0KQorI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0lOSVRfQlVTWQkJKDEgPDwgNSkKKyNk ZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9BWElfRVJST1IJCSgxIDw8IDgpCisjZGVmaW5lIE1BTElE UDUwMF9TRV9JUlFfT1ZFUlJVTgkJKDEgPDwgOSkKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9Q Uk9HX0xJTkUxCQkoMSA8PCAxMikKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QUk9HX0xJTkUy CQkoMSA8PCAxMykKKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9DT05GX0FDVElWRQkJKDEgPDwg MTcpCisjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAxOCkKKyNkZWZp bmUgTUFMSURQNTAwX1NFX0lSUV9BWElfQlVTWQkJKDEgPDwgMjgpCisjZGVmaW5lIE1BTElEUDUw MF9TRV9JUlFfR0xPQkFMCQkJKDEgPDwgMzEpCisKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9T QVRVUkFUSU9OCQkoMSA8PCA4KQorI2RlZmluZSBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DCQkJKDEg PDwgMTIpCisjZGVmaW5lIE1BTElEUDU1MF9ERV9JUlFfUFJPR19MSU5FCQkoMSA8PCAxMykKKyNk ZWZpbmUgTUFMSURQNTUwX0RFX0lSUV9BWElfRVJSCQkoMSA8PCAxNikKKyNkZWZpbmUgTUFMSURQ NTUwX1NFX0lSUV9FT1cJCQkoMSA8PCAwKQorI2RlZmluZSBNQUxJRFA1NTBfU0VfSVJRX0FYSV9F UlIJCSgxIDw8IDE2KQorI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFMSUQJCSgxIDw8 IDApCisjZGVmaW5lIE1BTElEUDU1MF9EQ19JUlFfQ09ORl9NT0RFCQkoMSA8PCA0KQorI2RlZmlu ZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfQUNUSVZFCQkoMSA8PCAxNikKKyNkZWZpbmUgTUFMSURQ NTUwX0RDX0lSUV9ERQkJCSgxIDw8IDIwKQorI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX1NFCQkJ KDEgPDwgMjQpCisKKyNkZWZpbmUgTUFMSURQNjUwX0RFX0lSUV9EUklGVAkJCSgxIDw8IDQpCisK Ky8qIGJpdCBtYXNrcyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBwcm9kdWN0cyAqLworI2RlZmlu ZSAgIE1BTElEUF9DRkdfVkFMSUQJCSgxIDw8IDApCisjZGVmaW5lICAgTUFMSURQX0RJU1BfRlVO Q19JTEFDRUQJKDEgPDwgOCkKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgSVJRIG1hbmFnZW1l bnQgKi8KKyNkZWZpbmUgTUFMSURQX1JFR19TVEFUVVMJCTB4MDAwMDAKKyNkZWZpbmUgTUFMSURQ X1JFR19TRVRJUlEJCTB4MDAwMDQKKyNkZWZpbmUgTUFMSURQX1JFR19NQVNLSVJRCQkweDAwMDA4 CisjZGVmaW5lIE1BTElEUF9SRUdfQ0xFQVJJUlEJCTB4MDAwMGMKKworLyogcmVnaXN0ZXIgb2Zm c2V0cyAqLworI2RlZmluZSBNQUxJRFBfREVfQ09SRV9JRAkJMHgwMDAxOAorI2RlZmluZSBNQUxJ RFBfREVfRElTUExBWV9GVU5DCQkweDAwMDIwCisKKy8qIHRoZXNlIG9mZnNldHMgYXJlIHJlbGF0 aXZlIHRvIE1BTElEUDV4MF9USU1JTkdTX0JBU0UgKi8KKyNkZWZpbmUgTUFMSURQX0RFX0hfVElN SU5HUwkJMHgwCisjZGVmaW5lIE1BTElEUF9ERV9WX1RJTUlOR1MJCTB4NAorI2RlZmluZSBNQUxJ RFBfREVfU1lOQ19XSURUSAkJMHg4CisjZGVmaW5lIE1BTElEUF9ERV9IVl9BQ1RJVkUJCTB4Ywor CisvKiBtYWNyb3MgdG8gc2V0IHZhbHVlcyBpbnRvIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQUxJ RFBfREVfSF9GUk9OVFBPUkNIKHgpCSgoKHgpICYgMHhmZmYpIDw8IDApCisjZGVmaW5lIE1BTElE UF9ERV9IX0JBQ0tQT1JDSCh4KQkoKCh4KSAmIDB4M2ZmKSA8PCAxNikKKyNkZWZpbmUgTUFMSURQ NTAwX0RFX1ZfRlJPTlRQT1JDSCh4KQkoKCh4KSAmIDB4ZmYpIDw8IDApCisjZGVmaW5lIE1BTElE UDU1MF9ERV9WX0ZST05UUE9SQ0goeCkJKCgoeCkgJiAweGZmZikgPDwgMCkKKyNkZWZpbmUgTUFM SURQX0RFX1ZfQkFDS1BPUkNIKHgpCSgoKHgpICYgMHhmZikgPDwgMTYpCisjZGVmaW5lIE1BTElE UF9ERV9IX1NZTkNXSURUSCh4KQkoKCh4KSAmIDB4M2ZmKSA8PCAwKQorI2RlZmluZSBNQUxJRFBf REVfVl9TWU5DV0lEVEgoeCkJKCgoeCkgJiAweGZmKSA8PCAxNikKKyNkZWZpbmUgTUFMSURQX0RF X0hfQUNUSVZFKHgpCQkoKCh4KSAmIDB4MWZmZikgPDwgMCkKKyNkZWZpbmUgTUFMSURQX0RFX1Zf QUNUSVZFKHgpCQkoKCh4KSAmIDB4MWZmZikgPDwgMTYpCisKKy8qIHJlZ2lzdGVyIG9mZnNldHMg YW5kIGJpdHMgc3BlY2lmaWMgdG8gRFA1MDAgKi8KKyNkZWZpbmUgTUFMSURQNTAwX0RDX0JBU0UJ CTB4MDAwMDAKKyNkZWZpbmUgTUFMSURQNTAwX0RDX0NPTlRST0wJCTB4MDAwMGMKKyNkZWZpbmUg ICBNQUxJRFA1MDBfRENfQ09ORklHX1JFUQkoMSA8PCAxNykKKyNkZWZpbmUgICBNQUxJRFA1MDBf SFNZTkNQT0wJCSgxIDw8IDIwKQorI2RlZmluZSAgIE1BTElEUDUwMF9WU1lOQ1BPTAkJKDEgPDwg MjEpCisjZGVmaW5lICAgTUFMSURQNTAwX0RDX0NMRUFSX01BU0sJMHgzMDBmZmYKKyNkZWZpbmUg TUFMSURQNTAwX0RFX0xJTkVfQ09VTlRFUgkweDAwMDEwCisjZGVmaW5lIE1BTElEUDUwMF9ERV9B WElfQ09OVFJPTAkweDAwMDE0CisjZGVmaW5lIE1BTElEUDUwMF9ERV9TRUNVUkVfQ1RSTAkweDAw MDFjCisjZGVmaW5lIE1BTElEUDUwMF9ERV9DSFJPTUFfS0VZCQkweDAwMDI0CisjZGVmaW5lIE1B TElEUDUwMF9USU1JTkdTX0JBU0UJCTB4MDAwMjgKKworI2RlZmluZSBNQUxJRFA1MDBfQ09ORklH XzNECQkweDAwMDM4CisjZGVmaW5lIE1BTElEUDUwMF9CR05EX0NPTE9SCQkweDAwMDNjCisjZGVm aW5lIE1BTElEUDUwMF9PVVRQVVRfREVQVEgJCTB4MDAwNDQKKyNkZWZpbmUgTUFMSURQNTAwX1lV Vl9SR0JfQ09FRgkJMHgwMDA0OAorI2RlZmluZSBNQUxJRFA1MDBfQ09MT1JfQURKX0NPRUYJMHgw MDA3OAorI2RlZmluZSBNQUxJRFA1MDBfQ09FRl9UQUJMRV9BRERSCTB4MDAwYTgKKyNkZWZpbmUg TUFMSURQNTAwX0NPRUZfVEFCTEVfREFUQQkweDAwMGFjCisjZGVmaW5lIE1BTElEUDUwMF9ERV9M Vl9CQVNFCQkweDAwMTAwCisjZGVmaW5lIE1BTElEUDUwMF9ERV9MVl9QVFJfQkFTRQkweDAwMTI0 CisjZGVmaW5lIE1BTElEUDUwMF9ERV9MRzFfQkFTRQkJMHgwMDIwMAorI2RlZmluZSBNQUxJRFA1 MDBfREVfTEcxX1BUUl9CQVNFCTB4MDAyMWMKKyNkZWZpbmUgTUFMSURQNTAwX0RFX0xHMl9CQVNF CQkweDAwMzAwCisjZGVmaW5lIE1BTElEUDUwMF9ERV9MRzJfUFRSX0JBU0UJMHgwMDMxYworI2Rl ZmluZSBNQUxJRFA1MDBfU0VfQkFTRQkJMHgwMGMwMAorI2RlZmluZSBNQUxJRFA1MDBfU0VfUFRS X0JBU0UJCTB4MDBlMGMKKyNkZWZpbmUgTUFMSURQNTAwX0RDX0lSUV9CQVNFCQkweDAwZjAwCisj ZGVmaW5lIE1BTElEUDUwMF9DT05GSUdfVkFMSUQJCTB4MDBmMDAKKyNkZWZpbmUgTUFMSURQNTAw X0NPTkZJR19JRAkJMHgwMGZkNAorCisvKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXRzIHNwZWNp ZmljIHRvIERQNTUwL0RQNjUwICovCisjZGVmaW5lIE1BTElEUDU1MF9ERV9DT05UUk9MCQkweDAw MDEwCisjZGVmaW5lIE1BTElEUDU1MF9ERV9MSU5FX0NPVU5URVIJMHgwMDAxNAorI2RlZmluZSBN QUxJRFA1NTBfREVfQVhJX0NPTlRST0wJMHgwMDAxOAorI2RlZmluZSBNQUxJRFA1NTBfREVfUU9T CQkweDAwMDFjCisjZGVmaW5lIE1BTElEUDU1MF9USU1JTkdTX0JBU0UJCTB4MDAwMzAKKyNkZWZp bmUgTUFMSURQNTUwX0hTWU5DUE9MCQkoMSA8PCAxMikKKyNkZWZpbmUgTUFMSURQNTUwX1ZTWU5D UE9MCQkoMSA8PCAyOCkKKworI2RlZmluZSBNQUxJRFA1NTBfREVfRElTUF9TSURFQkFORAkweDAw MDQwCisjZGVmaW5lIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SCQkweDAwMDQ0CisjZGVmaW5lIE1B TElEUDU1MF9ERV9PVVRQVVRfREVQVEgJMHgwMDA0YworI2RlZmluZSBNQUxJRFA1NTBfREVfQ09M T1JfQ09FRgkJMHgwMDA1MAorI2RlZmluZSBNQUxJRFA1NTBfREVfQ09FRl9UQUJMRV9BRERSCTB4 MDAwODAKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0NPRUZfVEFCTEVfREFUQQkweDAwMDg0CisjZGVm aW5lIE1BTElEUDU1MF9ERV9MVjFfQkFTRQkJMHgwMDEwMAorI2RlZmluZSBNQUxJRFA1NTBfREVf TFYxX1BUUl9CQVNFCTB4MDAxMjQKKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xWMl9CQVNFCQkweDAw MjAwCisjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjJfUFRSX0JBU0UJMHgwMDIyNAorI2RlZmluZSBN QUxJRFA1NTBfREVfTEdfQkFTRQkJMHgwMDMwMAorI2RlZmluZSBNQUxJRFA1NTBfREVfTEdfUFRS X0JBU0UJMHgwMDMxYworI2RlZmluZSBNQUxJRFA1NTBfREVfTFNfQkFTRQkJMHgwMDQwMAorI2Rl ZmluZSBNQUxJRFA1NTBfREVfTFNfUFRSX0JBU0UJMHgwMDQyYworI2RlZmluZSBNQUxJRFA1NTBf REVfUEVSRl9CQVNFCQkweDAwNTAwCisjZGVmaW5lIE1BTElEUDU1MF9TRV9CQVNFCQkweDA4MDAw CisjZGVmaW5lIE1BTElEUDU1MF9EQ19CQVNFCQkweDBjMDAwCisjZGVmaW5lIE1BTElEUDU1MF9E Q19DT05UUk9MCQkweDBjMDEwCisjZGVmaW5lICAgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEJKDEg PDwgMTYpCisjZGVmaW5lIE1BTElEUDU1MF9DT05GSUdfVkFMSUQJCTB4MGMwMTQKKyNkZWZpbmUg TUFMSURQNTUwX0NPTkZJR19JRAkJMHgwZmZkNAorCisvKgorICogU3RhcnRpbmcgd2l0aCBEUDU1 MCB0aGUgcmVnaXN0ZXIgbWFwIGJsb2NrcyBoYXMgYmVlbiBzdGFuZGFyZGlzZWQgdG8gdGhlCisg KiBmb2xsb3dpbmcgbGF5b3V0OgorICoKKyAqICAgT2Zmc2V0ICAgICAgICAgICAgQmxvY2sgcmVn aXN0ZXJzCisgKiAgMHgwMDAwMCAgICAgICAgICAgIERpc3BsYXkgRW5naW5lCisgKiAgMHgwODAw MCAgICAgICAgICAgIFNjYWxpbmcgRW5naW5lCisgKiAgMHgwYzAwMCAgICAgICAgICAgIERpc3Bs YXkgQ29yZQorICogIDB4MTAwMDAgICAgICAgICAgICBTZWN1cmUgY29udHJvbAorICoKKyAqIFRo ZSBvbGQgRFA1MDAgSVAgbWl4ZXMgc29tZSBEQyB3aXRoIHRoZSBERSByZWdpc3RlcnMsIGhlbmNl IHRoZSBuZWVkCisgKiBmb3IgYSBtYXBwaW5nIHN0cnVjdHVyZS4KKyAqLworCisjZW5kaWYgLyog X19NQUxJRFBfUkVHU19IX18gKi8KLS0gCjIuOC4wCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWwK