From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v6 02/12] drm/mediatek: Add DRM Driver for Mediatek SoC MT8173. Date: Wed, 18 Nov 2015 18:34:10 +0100 Message-ID: <1447868060-11620-3-git-send-email-p.zabel@pengutronix.de> References: <1447868060-11620-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1447868060-11620-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , devicetree@vger.kernel.org, Paul Bolle , YT Shen , Jitao Shi , Jie Qiu , Pawel Moll , Ian Campbell , Cawa Cheng , Rob Herring , linux-mediatek@lists.infradead.org, Kumar Gala , Matthias Brugger , kernel@pengutronix.de List-Id: devicetree@vger.kernel.org RnJvbTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBhbiBpbml0 aWFsIERSTSBkcml2ZXIgZm9yIHRoZSBNZWRpYXRlayBNVDgxNzMgRElTUApzdWJzeXN0ZW0uIEl0 IGN1cnJlbnRseSBzdXBwb3J0cyB0d28gZml4ZWQgb3V0cHV0IHN0cmVhbXMgZnJvbSB0aGUKT1ZM MC9PVkwxIHNvdXJjZXMgdG8gdGhlIERTSTAvRFBJMCBzaW5rcywgcmVzcGVjdGl2ZWx5LgoKU2ln bmVkLW9mZi1ieTogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KU2lnbmVkLW9mZi1ieTogWVQg U2hlbiA8eXQuc2hlbkBtZWRpYXRlay5jb20+ClNpZ25lZC1vZmYtYnk6IFBoaWxpcHAgWmFiZWwg PHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Ci0tLQpDaGFuZ2VzIHNpbmNlIHY1OgotIENvbWJpbmVk IG10a19kcm1fY3J0YyBhbmQgbXRrX2NydGNfZGRwX2NvbnRleHQsIGFkZGVkIG10a19kaXNwX292 bAogIHN0cnVjdHVyZSB0byBjb250YWluIG92bCBkZHAgY29tcG9uZW50Ci0gUmV3b3JrZSBjb21w b25lbnQgY2FsbGJhY2tzIChyZW1vdmVkIGNvbXBfIHByZWZpeCBmcm9tCiAgbXRrX2RkcF9jb21w X2Z1bmNzLCBtb3ZlIGlkIGludG8gbXRrX2RkcF9jb21wIGFkZGVkIGlubGluZQogIGZ1bmN0aW9u cyB0byB3cmFwIGNhbGxiYWNrcykKLSBVc2Ugbm9uLXN5bmMgcG1fcnVudGltZV9wdXQgdmFyaWFu dAotIFdhcm4gYW5kIHVzZSBSR0I4ODggYXMgZmFsbGJhY2sgZm9ybWF0IGluIGNhc2Ugb2YgZHJp dmVyIGJ1ZwotIFJlbW92ZWQgdW51c2VkIHBpcGUgcGFyYW1ldGVyIGZyb20gbXRrX2RkcF9hZGRf Y29tcF90b19wYXRoCi0gUmVuYW1lZCBtdGtfZHJtX3ByaXZhdGUtPnBpcGUgLT5udW1fcGlwZXMK LSBVcGRhdGVkIG10ayBzcGVjaWZpYyBjcnRjIGFuZCBwbGFuZSBhdG9taWMgc3RhdGUgaGFuZGxp bmcKLSBNb3ZlZCBtdGtfZHJtX2NydGNfcGxhbmVfY29uZmlnIHRvIHBsYW5lIGxvY2FsIG10a19w bGFuZV9jb25maWcKLSBMZXQgbGF5ZXJfY29uZmlnIHRha2UgYSBzdHJ1Y3QgbXRrX3BsYW5lX3N0 YXRlCi0gVXNlIHdyaXRlbF9yZWxheGVkIGluIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aAotIFJl bW92ZWQgc29tZSB1bnVzZWQgcGFyYW1ldGVycywgZnVuY3Rpb25zLCBhbmQgbG9jYWwgdmFyaWFi bGVzCi0gUmVtb3ZlZCBjdXN0b20gY3J0YyBlbmFibGUgZmxhZwotIFJlbW92ZWQgdW5uZWNlc3Nh cnkgY29tcC0+ZnVuY3MgTlVMTCBjaGVja3MKLSBSZWdpc3RlciBhbmQgdW5yZWdpc3RlciBzdWJk cml2ZXJzIGluIGEgbG9vcAotIE1vdmVkIExBUkIgaGFuZGxpbmcgb3V0IG9mIGRybSBkcml2ZXIg Y29kZSBpbnRvIGNydGMgY29kZSwKICByZXF1ZXN0IExBUkIgZHVyaW5nIGNvbXBvbmVudCBpbml0 aWFsaXphdGlvbgotIFVwZGF0ZWQgZGlzcGxheSBkYXRhIHBhdGggLyBtdXRleCBjb2RlCi0gTW92 ZWQgaW5pdGlhbGl6YXRpb24gb2YgZHJpdmVybGVzcyBkZHAgY29tcG9uZW50cyBpbnRvIHRoZSBk cm0gZHJpdmVyCi0gQ29tbWVudGVkIGNydGNfZGlzYWJsZQotIFJlbW92ZWQgc3VwcG9ydCBmb3Ig bXVsdGlwbGFuYXIgZnJhbWVidWZmZXJzCi0gQ29uZmlndXJlIHdpZHRoL2hlaWdodCBvZiB0aGUg Y29sb3IgZW5naW5lIGV2ZW4gaWYgaXQgaXMgYnlwYXNzZWQKLSBBZGRlZCBzdGF0aWMga2V5d29y ZCB0byB1bmV4cG9ydGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwotIFVubGluayBkaXNwbGF5 IGRhdGEgcGF0aCBpbiBod19maW5pCi0tLQogZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAg ICAgICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnICAgICAg ICAgICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAg ICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMgICAgIHwg NTk2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2NydGMuaCAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2RkcC5jICAgICAgfCAzNjIgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2RkcC5oICAgICAgfCAgNDEgKysKIGRyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgfCA0MzEgKysrKysrKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmggfCAxNTIgKysrKysrKwog ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2LmMgICAgICB8IDU1NyArKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZHJ2 LmggICAgICB8ICA1NSArKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMg ICAgICAgfCAxMzkgKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZmIu aCAgICAgICB8ICAyOSArKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmMg ICAgICB8IDE4NyArKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dl bS5oICAgICAgfCAgNTQgKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFu ZS5jICAgIHwgMjM1ICsrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9wbGFuZS5oICAgIHwgIDYxICsrKwogMTggZmlsZXMgY2hhbmdlZCwgMjk2OSBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRj LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9k ZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2RkcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1fZGRwX2NvbXAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfZHJtX2RkcF9jb21wLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZmIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2dlbS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fcGxhbmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmgKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGM0YmY5 YTEuLjhmZGIwYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yNjYsMyArMjY2LDUgQEAgc291cmNlICJkcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14 L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3ZjNC9LY29uZmlnIgorCitzb3Vy Y2UgImRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDFlOWZm NGMuLjYwN2E0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTcxLDYgKzcxLDcgQEAgb2JqLSQoQ09ORklHX0RS TV9NU00pICs9IG1zbS8KIG9iai0kKENPTkZJR19EUk1fVEVHUkEpICs9IHRlZ3JhLwogb2JqLSQo Q09ORklHX0RSTV9TVEkpICs9IHN0aS8KIG9iai0kKENPTkZJR19EUk1fSU1YKSArPSBpbXgvCitv YmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRpYXRlay8KIG9iai15CQkJKz0gaTJjLwog b2JqLXkJCQkrPSBwYW5lbC8KIG9iai15CQkJKz0gYnJpZGdlLwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2Nv bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzQzY2YxCi0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcKQEAgLTAsMCArMSwx NiBAQAorY29uZmlnIERSTV9NRURJQVRFSworCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBmb3IgTWVk aWF0ZWsgU29DcyIKKwlkZXBlbmRzIG9uIERSTQorCWRlcGVuZHMgb24gQVJDSF9NRURJQVRFSyB8 fCAoQVJNICYmIENPTVBJTEVfVEVTVCkKKwlzZWxlY3QgTVRLX1NNSQorCXNlbGVjdCBEUk1fUEFO RUwKKwlzZWxlY3QgRFJNX01JUElfRFNJCisJc2VsZWN0IERSTV9QQU5FTF9TSU1QTEUKKwlzZWxl Y3QgRFJNX0tNU19IRUxQRVIKKwlzZWxlY3QgSU9NTVVfRE1BCisJaGVscAorCSAgQ2hvb3NlIHRo aXMgb3B0aW9uIGlmIHlvdSBoYXZlIGEgTWVkaWF0ZWsgU29Dcy4KKwkgIFRoZSBtb2R1bGUgd2ls bCBiZSBjYWxsZWQgbWVkaWF0ZWstZHJtCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyBrZXJuZWwg bW9kZSBzZXR0aW5nIGFuZAorCSAgYnVmZmVyIG1hbmFnZW1lbnQgdG8gdXNlcnNwYWNlLgorCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uYmE2ZDNmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N YWtlZmlsZQpAQCAtMCwwICsxLDEwIEBACittZWRpYXRlay1kcm0teSA6PSBtdGtfZHJtX2Rydi5v IFwKKwkJICBtdGtfZHJtX2NydGMubyBcCisJCSAgbXRrX2RybV9kZHAubyBcCisJCSAgbXRrX2Ry bV9kZHBfY29tcC5vIFwKKwkJICBtdGtfZHJtX2ZiLm8gXAorCQkgIG10a19kcm1fZ2VtLm8gXAor CQkgIG10a19kcm1fcGxhbmUubworCitvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRp YXRlay1kcm0ubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Ry bV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9jcnRjLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4YzhmMwotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuYwpAQCAtMCwwICsxLDU5NiBA QAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgor I2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXJ2 YXRpb24uaD4KKyNpbmNsdWRlIDxzb2MvbWVkaWF0ZWsvc21pLmg+CisKKyNpbmNsdWRlICJtdGtf ZHJtX2Rydi5oIgorI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1f ZGRwLmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1f Z2VtLmgiCisjaW5jbHVkZSAibXRrX2RybV9wbGFuZS5oIgorCitzdHJ1Y3QgbXRrX2NydGNfZGRw X2NvbnRleHQ7CisKKy8qCisgKiBNZWRpYVRlayBzcGVjaWZpYyBjcnRjIHN0cnVjdHVyZS4KKyAq CisgKiBAYmFzZTogY3J0YyBvYmplY3QuCisgKiBAcGlwZTogYSBjcnRjIGluZGV4IGNyZWF0ZWQg YXQgbG9hZCgpIHdpdGggYSBuZXcgY3J0YyBvYmplY3QgY3JlYXRpb24KKyAqCWFuZCB0aGUgY3J0 YyBvYmplY3Qgd291bGQgYmUgc2V0IHRvIHByaXZhdGUtPmNydGMgYXJyYXkKKyAqCXRvIGdldCBh IGNydGMgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwaXBlIGZyb20gcHJpdmF0ZS0+Y3J0 YworICoJYXJyYXkgd2hlbiBpcnEgaW50ZXJydXB0IG9jY3VycmVkLiB0aGUgcmVhc29uIG9mIHVz aW5nIHRoaXMgcGlwZSBpcyB0aGF0CisgKglkcm0gZnJhbWV3b3JrIGRvZXNuJ3Qgc3VwcG9ydCBt dWx0aXBsZSBpcnEgeWV0LgorICoJd2UgY2FuIHJlZmVyIHRvIHRoZSBjcnRjIHRvIGN1cnJlbnQg aGFyZHdhcmUgaW50ZXJydXB0IG9jY3VycmVkIHRocm91Z2gKKyAqCXRoaXMgcGlwZSB2YWx1ZS4K KyAqLworc3RydWN0IG10a19kcm1fY3J0YyB7CisJc3RydWN0IGRybV9jcnRjCQkJYmFzZTsKKwl1 bnNpZ25lZCBpbnQJCQlwaXBlOworCisJYm9vbAkJCQlkb19mbHVzaDsKKworCXN0cnVjdCBtdGtf ZHJtX3BsYW5lCQlwbGFuZXNbT1ZMX0xBWUVSX05SXTsKKworCXZvaWQgX19pb21lbQkJCSpjb25m aWdfcmVnczsKKwlzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXgJCSptdXRleDsKKwl1MzIJCQkJZGRwX2Nv bXBfbnI7CisJc3RydWN0IG10a19kZHBfY29tcAkJKipkZHBfY29tcDsKK307CisKK3N0cnVjdCBt dGtfZGlzcF9vdmwgeworCXN0cnVjdCBtdGtfZGRwX2NvbXAJCWRkcF9jb21wOworCXN0cnVjdCBt dGtfZHJtX2NydGMJCSpjcnRjOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2RybV9j cnRjICp0b19tdGtfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihjLCBzdHJ1Y3QgbXRrX2RybV9jcnRjLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgbXRr X2RybV9jcnRjX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMp Cit7CisJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJm10a19jcnRjLT5iYXNlOworCXN0cnVjdCBt dGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisK Kwlkcm1fc2VuZF92YmxhbmtfZXZlbnQoY3J0Yy0+ZGV2LCBzdGF0ZS0+ZXZlbnQtPnBpcGUsIHN0 YXRlLT5ldmVudCk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKKwlzdGF0ZS0+ZXZlbnQg PSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJt X2NydGMgKmNydGMpCit7CisJZHJtX2NydGNfY2xlYW51cChjcnRjKTsKK30KKworc3RhdGljIHN0 cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZTsKKworCXN0 YXRlID0ga3phbGxvYyhzaXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkK KwkJcmV0dXJuIE5VTEw7CisKKwlfX2RybV9hdG9taWNfaGVscGVyX2NydGNfZHVwbGljYXRlX3N0 YXRlKGNydGMsICZzdGF0ZS0+YmFzZSk7CisKKwlXQVJOX09OKHN0YXRlLT5iYXNlLmNydGMgIT0g Y3J0Yyk7CisJc3RhdGUtPmJhc2UuY3J0YyA9IGNydGM7CisKKwlyZXR1cm4gJnN0YXRlLT5iYXNl OworfQorCitzdGF0aWMgYm9vbCBtdGtfZHJtX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCisJCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwkvKiBkcm0gZnJhbWV3b3Jr IGRvZXNuJ3QgY2hlY2sgTlVMTCAqLworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBt dGtfZHJtX2NydGNfbW9kZV9zZXRfbm9mYihzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3Ry dWN0IG10a19jcnRjX3N0YXRlICpzdGF0ZSA9IHRvX210a19jcnRjX3N0YXRlKGNydGMtPnN0YXRl KTsKKworCXN0YXRlLT5wZW5kaW5nX3dpZHRoID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwlzdGF0 ZS0+cGVuZGluZ19oZWlnaHQgPSBjcnRjLT5tb2RlLnZkaXNwbGF5OworCXN0YXRlLT5wZW5kaW5n X3ZyZWZyZXNoID0gY3J0Yy0+bW9kZS52cmVmcmVzaDsKKwlzdGF0ZS0+cGVuZGluZ19jb25maWcg PSB0cnVlOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0 ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2Ny dGMgPSB0b19tdGtfY3J0Yyhwcml2LT5jcnRjW3BpcGVdKTsKKwlzdHJ1Y3QgbXRrX2RkcF9jb21w ICpvdmwgPSBtdGtfY3J0Yy0+ZGRwX2NvbXBbMF07CisKKwltdGtfZGRwX2NvbXBfZW5hYmxlX3Zi bGFuayhvdmwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2RybV9jcnRjX2Rpc2FibGVf dmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQoreworCXN0 cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOworCXN0cnVjdCBt dGtfZHJtX2NydGMgKm10a19jcnRjID0gdG9fbXRrX2NydGMocHJpdi0+Y3J0Y1twaXBlXSk7CisJ c3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9jb21wWzBdOworCisJbXRr X2RkcF9jb21wX2Rpc2FibGVfdmJsYW5rKG92bCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRj X2RkcF9wb3dlcl9vbihzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sKKwlpbnQgcmV0 OworCWludCBpOworCisJRFJNX0lORk8oIm10a19jcnRjX2RkcF9wb3dlcl9vblxuIik7CisJZm9y IChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKSB7CisJCXJldCA9IGNsa19l bmFibGUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCQlpZiAocmV0KQorCQkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrICVkOiAlZFxuIiwgaSwgcmV0KTsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9wb3dlcl9vZmYoc3RydWN0IG10a19kcm1fY3J0YyAq bXRrX2NydGMpCit7CisJaW50IGk7CisKKwlEUk1fSU5GTygibXRrX2NydGNfZGRwX3Bvd2VyX29m ZlxuIik7CisJZm9yIChpID0gMDsgaSA8IG10a19jcnRjLT5kZHBfY29tcF9ucjsgaSsrKQorCQlj bGtfZGlzYWJsZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmNsayk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19jcnRjX2RkcF9od19pbml0KHN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRjKQorewor CXN0cnVjdCBkcm1fY3J0YyAqY3J0YyA9ICZtdGtfY3J0Yy0+YmFzZTsKKwl1bnNpZ25lZCBpbnQg d2lkdGgsIGhlaWdodCwgdnJlZnJlc2g7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWlmIChjcnRj LT5zdGF0ZSkgeworCQl3aWR0aCA9IGNydGMtPnN0YXRlLT5hZGp1c3RlZF9tb2RlLmhkaXNwbGF5 OworCQloZWlnaHQgPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52ZGlzcGxheTsKKwkJdnJl ZnJlc2ggPSBjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS52cmVmcmVzaDsKKwl9IGVsc2Ugewor CQlXQVJOX09OKHRydWUpOworCQl3aWR0aCA9IDE5MjA7CisJCWhlaWdodCA9IDEwODA7CisJCXZy ZWZyZXNoID0gNjA7CisJfQorCisJRFJNX0lORk8oIm10a19jcnRjX2RkcF9od19pbml0XG4iKTsK KworCS8qIGRpc3BfbXRjbW9zICovCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhjcnRjLT5k ZXYtPmRldik7CisJaWYgKHJldCA8IDApCisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGVuYWJsZSBw b3dlciBkb21haW46ICVkXG4iLCByZXQpOworCisJbXRrX2Rpc3BfbXV0ZXhfcHJlcGFyZShtdGtf Y3J0Yy0+bXV0ZXgpOworCW10a19jcnRjX2RkcF9wb3dlcl9vbihtdGtfY3J0Yyk7CisKKwlEUk1f SU5GTygibWVkaWF0ZWtfZGRwX2RkcF9wYXRoX3NldHVwXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwg bXRrX2NydGMtPmRkcF9jb21wX25yIC0gMTsgaSsrKSB7CisJCW10a19kZHBfYWRkX2NvbXBfdG9f cGF0aChtdGtfY3J0Yy0+Y29uZmlnX3JlZ3MsCisJCQkJCSBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t PmlkLAorCQkJCQkgbXRrX2NydGMtPmRkcF9jb21wW2kgKyAxXS0+aWQpOworCQltdGtfZGlzcF9t dXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsCisJCQkJCW10a19jcnRjLT5kZHBfY29tcFtp XS0+aWQpOworCX0KKwltdGtfZGlzcF9tdXRleF9hZGRfY29tcChtdGtfY3J0Yy0+bXV0ZXgsIG10 a19jcnRjLT5kZHBfY29tcFtpXS0+aWQpOworCW10a19kaXNwX211dGV4X2VuYWJsZShtdGtfY3J0 Yy0+bXV0ZXgpOworCisJRFJNX0lORk8oImRkcF9kaXNwX3BhdGhfcG93ZXJfb24gJWR4JWRcbiIs IHdpZHRoLCBoZWlnaHQpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBfbnI7 IGkrKykgeworCQlzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wID0gbXRrX2NydGMtPmRkcF9jb21w W2ldOworCisJCW10a19kZHBfY29tcF9jb25maWcoY29tcCwgd2lkdGgsIGhlaWdodCwgdnJlZnJl c2gpOworCQltdGtfZGRwX2NvbXBfcG93ZXJfb24oY29tcCk7CisJfQorfQorCitzdGF0aWMgdm9p ZCBtdGtfY3J0Y19kZHBfaHdfZmluaShzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YykKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gbXRrX2NydGMtPmJhc2UuZGV2OworCWludCBpOwor CisJRFJNX0lORk8oIm10a19jcnRjX2RkcF9od19maW5pXG4iKTsKKwltdGtfY3J0Y19kZHBfcG93 ZXJfb2ZmKG10a19jcnRjKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRkcF9jb21wX25y OyBpKyspCisJCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJ CQkJICAgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfZGlzYWJs ZShtdGtfY3J0Yy0+bXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ZGRwX2NvbXBf bnIgLSAxOyBpKyspIHsKKwkJbXRrX2RkcF9yZW1vdmVfY29tcF9mcm9tX3BhdGgobXRrX2NydGMt PmNvbmZpZ19yZWdzLAorCQkJCQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0tPmlkLAorCQkJ CQkgICAgICBtdGtfY3J0Yy0+ZGRwX2NvbXBbaSArIDFdLT5pZCk7CisJCW10a19kaXNwX211dGV4 X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRleCwKKwkJCQkJICAgbXRrX2NydGMtPmRkcF9jb21w W2ldLT5pZCk7CisJfQorCW10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKG10a19jcnRjLT5tdXRl eCwgbXRrX2NydGMtPmRkcF9jb21wW2ldLT5pZCk7CisJbXRrX2Rpc3BfbXV0ZXhfdW5wcmVwYXJl KG10a19jcnRjLT5tdXRleCk7CisJbXRrX2NydGMtPm11dGV4ID0gTlVMTDsKKworCS8qIGRpc3Bf bXRjbW9zICovCisJcG1fcnVudGltZV9wdXQoZHJtLT5kZXYpOworfQorCitzdGF0aWMgdm9pZCBt dGtfZHJtX2NydGNfZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgbXRr X2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMpOworCXN0cnVjdCBtdGtfZGRw X2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKwlpbnQgcmV0OworCisJRFJNX0lO Rk8oIm10a19kcm1fY3J0Y19lbmFibGUgJWRcbiIsIGNydGMtPmJhc2UuaWQpOworCisJcmV0ID0g bXRrX3NtaV9sYXJiX2dldChvdmwtPmxhcmJfZGV2KTsKKwlpZiAocmV0KQorCQlEUk1fRVJST1Io IkZhaWxlZCB0byBnZXQgbGFyYjogJWRcbiIsIHJldCk7CisKKwltdGtfY3J0Y19kZHBfaHdfaW5p dChtdGtfY3J0Yyk7CisKKwlkcm1fY3J0Y192Ymxhbmtfb24oY3J0Yyk7CisJV0FSTl9PTihkcm1f Y3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2Ny dGNfZGlzYWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IG10a19kcm1fY3J0 YyAqbXRrX2NydGMgPSB0b19tdGtfY3J0YyhjcnRjKTsKKwlzdHJ1Y3QgbXRrX2NydGNfc3RhdGUg KnN0YXRlID0gdG9fbXRrX2NydGNfc3RhdGUoY3J0Yy0+c3RhdGUpOworCXN0cnVjdCBtdGtfZGRw X2NvbXAgKm92bCA9IG10a19jcnRjLT5kZHBfY29tcFswXTsKKworCURSTV9JTkZPKCJtdGtfZHJt X2NydGNfZGlzYWJsZSAlZFxuIiwgY3J0Yy0+YmFzZS5pZCk7CisKKwkvKgorCSAqIEJlZm9yZSBt dGtfZHJtX2NydGNfZGlzYWJsZSBpcyBjYWxsZWQgYnkgZGlzYWJsZV9vdXRwdXRzIGZyb20KKwkg KiBkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcywgdGhlIHNhbWUgZnVu Y3Rpb24gYWxyZWFkeQorCSAqIGNhbGxlZCBtdGtfZHNpL2RwaV9lbmNvZGVyX2Rpc2FibGUsIHdo aWNoIGN1cnJlbnRseSBkaXNhYmxlcyB0aGUKKwkgKiBwaXhlbCBjbG9jaywgYW5kIGNhdXNlZCB0 aGUgcGlwZWxpbmUgdG8gaGFsdCBpbW1lZGlhdGVseS4KKwkgKiBUaGVyZSB3aWxsIGJlIG5vIG1v cmUgT1ZMIGZyYW1lIGNvbXBsZXRpb24gKHZibGFuaykgaW50ZXJydXB0LgorCSAqCisJICogSWRl YWxseSwgdGhlIGRpc2FibGluZyBvZiB0aGUgcGl4ZWwgY2xvY2sgc2hvdWxkIGJlIHBvc3Rwb25l ZAorCSAqIHVudGlsIHZibGFuaywgdGhpcyBmdW5jdGlvbiB3b3VsZCBqdXN0IHNldCBhbGwgcGVu ZGluZyBwbGFuZQorCSAqIHN0YXRlIHRvIGRpc2FibGVkIGFuZCB3YWl0IGZvciB0aGUgbmV4dCB2 YmxhbmsgaGVyZS4KKwkgKi8KKwltdGtfY3J0Y19kZHBfaHdfZmluaShtdGtfY3J0Yyk7CisKKwlt dGtfc21pX2xhcmJfcHV0KG92bC0+bGFyYl9kZXYpOworCisJLyogVGhpcyB3aWxsIGJlIGNhbGxl ZCBmcm9tIHRoZSB2YmxhbmsgaW50ZXJydXB0IGluIHRoZSBmdXR1cmUgKi8KKwltdGtfY3J0Yy0+ ZG9fZmx1c2ggPSBmYWxzZTsKKwlpZiAoc3RhdGUtPmV2ZW50KQorCQltdGtfZHJtX2NydGNfZmlu aXNoX3BhZ2VfZmxpcChtdGtfY3J0Yyk7CisJZHJtX2NydGNfdmJsYW5rX3B1dChjcnRjKTsKKwlk cm1fY3J0Y192Ymxhbmtfb2ZmKGNydGMpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2NydGNf YXRvbWljX2JlZ2luKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCQkgICAgICBzdHJ1Y3QgZHJt X2NydGNfc3RhdGUgKm9sZF9jcnRjX3N0YXRlKQoreworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAq c3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0ZShjcnRjLT5zdGF0ZSk7CisKKwlpZiAoc3RhdGUtPmJh c2UuZXZlbnQpIHsKKwkJc3RhdGUtPmJhc2UuZXZlbnQtPnBpcGUgPSBkcm1fY3J0Y19pbmRleChj cnRjKTsKKwkJV0FSTl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCQlzdGF0 ZS0+ZXZlbnQgPSBzdGF0ZS0+YmFzZS5ldmVudDsKKwkJc3RhdGUtPmJhc2UuZXZlbnQgPSBOVUxM OworCX0KK30KKwordm9pZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0YyA9IHRvX210a19jcnRjKGNydGMp OworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlFUl9OUjsgaSsr KSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFuZXNbaV0uYmFz ZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJcGxhbmVfc3Rh dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwkJaWYgKHBsYW5lX3N0YXRl LT5wZW5kaW5nX2RpcnR5KSB7CisJCQlwbGFuZV9zdGF0ZS0+cGVuZGluZ19jb25maWcgPSB0cnVl OworCQkJcGxhbmVfc3RhdGUtPnBlbmRpbmdfZGlydHkgPSBmYWxzZTsKKwkJfQorCX0KK30KKwor c3RhdGljIHZvaWQgbXRrX2RybV9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCisJCQkJICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sK KwltdGtfZHJtX2NydGNfY29tbWl0KGNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jcnRjX2Z1bmNzIG10a19jcnRjX2Z1bmNzID0geworCS5zZXRfY29uZmlnCQk9IGRybV9hdG9t aWNfaGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBkcm1fYXRvbWljX2hlbHBlcl9w YWdlX2ZsaXAsCisJLmRlc3Ryb3kJCT0gbXRrX2RybV9jcnRjX2Rlc3Ryb3ksCisJLnJlc2V0CQkJ PSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl CT0gbXRrX2RybV9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJ PSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBtdGtfY3J0Y19oZWxwZXJfZnVuY3MgPSB7 CisJLm1vZGVfZml4dXAJPSBtdGtfZHJtX2NydGNfbW9kZV9maXh1cCwKKwkubW9kZV9zZXRfbm9m Ygk9IG10a19kcm1fY3J0Y19tb2RlX3NldF9ub2ZiLAorCS5lbmFibGUJCT0gbXRrX2RybV9jcnRj X2VuYWJsZSwKKwkuZGlzYWJsZQk9IG10a19kcm1fY3J0Y19kaXNhYmxlLAorCS5hdG9taWNfYmVn aW4JPSBtdGtfZHJtX2NydGNfYXRvbWljX2JlZ2luLAorCS5hdG9taWNfZmx1c2gJPSBtdGtfZHJt X2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKworc3RhdGljIGludCBtdGtfZHJtX2NydGNfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLAorCQlzdHJ1Y3QgbXRrX2RybV9jcnRjICptdGtfY3J0Yywg c3RydWN0IGRybV9wbGFuZSAqcHJpbWFyeSwKKwkJc3RydWN0IGRybV9wbGFuZSAqY3Vyc29yLCBp bnQgcGlwZSkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2ID0gZHJtLT5kZXZfcHJp dmF0ZTsKKwlpbnQgcmV0OworCisJcHJpdi0+Y3J0Y1twaXBlXSA9ICZtdGtfY3J0Yy0+YmFzZTsK KworCXJldCA9IGRybV9jcnRjX2luaXRfd2l0aF9wbGFuZXMoZHJtLCAmbXRrX2NydGMtPmJhc2Us IHByaW1hcnksIGN1cnNvciwKKwkJCSZtdGtfY3J0Y19mdW5jcyk7CisJaWYgKHJldCkKKwkJZ290 byBlcnJfY2xlYW51cF9jcnRjOworCisJZHJtX2NydGNfaGVscGVyX2FkZCgmbXRrX2NydGMtPmJh c2UsICZtdGtfY3J0Y19oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGVhbnVw X2NydGM6CisJZHJtX2NydGNfY2xlYW51cCgmbXRrX2NydGMtPmJhc2UpOworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19jcnRjX2RkcF9pcnEoc3RydWN0IG10a19kcm1fY3J0YyAq bXRrX2NydGMpCit7CisJc3RydWN0IG10a19kZHBfY29tcCAqb3ZsID0gbXRrX2NydGMtPmRkcF9j b21wWzBdOworCXN0cnVjdCBtdGtfY3J0Y19zdGF0ZSAqc3RhdGUgPSB0b19tdGtfY3J0Y19zdGF0 ZShtdGtfY3J0Yy0+YmFzZS5zdGF0ZSk7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIFRP RE86IGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIHJlZ2lzdGVycyBoZXJlLCB3ZSBzaG91bGQgcHJl cGFyZQorCSAqIHdvcmtpbmcgcmVnaXN0ZXJzIGluIGF0b21pY19jb21taXQgYW5kIGxldCB0aGUg aGFyZHdhcmUgY29tbWFuZAorCSAqIHF1ZXVlIHVwZGF0ZSBtb2R1bGUgcmVnaXN0ZXJzIG9uIHZi bGFuay4KKwkgKi8KKwlpZiAoc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCW10a19kZHBfY29t cF9jb25maWcob3ZsLCBzdGF0ZS0+cGVuZGluZ193aWR0aCwKKwkJCQkgICAgc3RhdGUtPnBlbmRp bmdfaGVpZ2h0LAorCQkJCSAgICBzdGF0ZS0+cGVuZGluZ192cmVmcmVzaCk7CisKKwkJc3RhdGUt PnBlbmRpbmdfY29uZmlnID0gZmFsc2U7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE9WTF9MQVlF Ul9OUjsgaSsrKSB7CisJCXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lID0gJm10a19jcnRjLT5wbGFu ZXNbaV0uYmFzZTsKKwkJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CisKKwkJ cGxhbmVfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKworCQlpZiAo cGxhbmVfc3RhdGUtPnBlbmRpbmdfY29uZmlnKSB7CisJCQlpZiAoIXBsYW5lX3N0YXRlLT5wZW5k aW5nX2VuYWJsZSkKKwkJCQltdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKG92bCwgaSk7CisKKwkJCW10 a19kZHBfY29tcF9sYXllcl9jb25maWcob3ZsLCBpLCBwbGFuZV9zdGF0ZSk7CisKKwkJCWlmIChw bGFuZV9zdGF0ZS0+cGVuZGluZ19lbmFibGUpCisJCQkJbXRrX2RkcF9jb21wX2xheWVyX29uKG92 bCwgaSk7CisKKwkJCXBsYW5lX3N0YXRlLT5wZW5kaW5nX2NvbmZpZyA9IGZhbHNlOworCQl9CisJ fQorCisJZHJtX2hhbmRsZV92YmxhbmsobXRrX2NydGMtPmJhc2UuZGV2LCBtdGtfY3J0Yy0+cGlw ZSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtfZGlzcF9vdmxfaXJxX2hhbmRsZXIoaW50 IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBtdGtfZGlzcF9vdmwgKnByaXYgPSBkZXZf aWQ7CisJc3RydWN0IG10a19kcm1fY3J0YyAqbXRrX2NydGMgPSBwcml2LT5jcnRjOworCXN0cnVj dCBtdGtfZGRwX2NvbXAgKm92bCA9ICZwcml2LT5kZHBfY29tcDsKKworCW10a19kZHBfY29tcF9j bGVhcl92Ymxhbmsob3ZsKTsKKworCWlmIChtdGtfY3J0Yy0+cGlwZSA+PSAwICYmIG10a19jcnRj LT5iYXNlLmRldikKKwkJbXRrX2NydGNfZGRwX2lycShtdGtfY3J0Yyk7CisKKwlyZXR1cm4gSVJR X0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX2JpbmQoc3RydWN0IGRldmlj ZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCXZvaWQgKmRhdGEpCit7CisJc3RydWN0 IG10a19kaXNwX292bCAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpkcm1fcHJp diA9IGRybV9kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19jcnRj OworCWludCBwaXBlID0gZHJtX3ByaXYtPm51bV9waXBlczsKKwllbnVtIG10a19kZHBfY29tcF9p ZCBjb21wX2lkOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwllbnVtIGRybV9wbGFuZV90 eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHpwb3M7CisJaW50IHJldDsKKwlpbnQgaTsKKworCXJl dCA9IG10a19kZHBfY29tcF9yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2NvbXApOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvbXBvbmVu dCAlczogJWRcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwltdGtfY3J0YyA9IGRldm1fa3phbGxvYyhkcm1fZGV2LT5kZXYsIHNpemVv ZigqbXRrX2NydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19jcnRjKQorCQlyZXR1cm4gLUVO T01FTTsKKworCW10a19jcnRjLT5jb25maWdfcmVncyA9IGRybV9wcml2LT5jb25maWdfcmVnczsK KwltdGtfY3J0Yy0+ZGRwX2NvbXBfbnIgPSBkcm1fcHJpdi0+cGF0aF9sZW5bcGlwZV07CisJbXRr X2NydGMtPmRkcF9jb21wID0gZGV2bV9rbWFsbG9jX2FycmF5KGRldiwgbXRrX2NydGMtPmRkcF9j b21wX25yLAorCQkJCQkJc2l6ZW9mKCptdGtfY3J0Yy0+ZGRwX2NvbXApLAorCQkJCQkJR0ZQX0tF Uk5FTCk7CisKKwltdGtfY3J0Yy0+bXV0ZXggPSBtdGtfZGlzcF9tdXRleF9nZXQoZHJtX3ByaXYt Pm11dGV4X2RldiwgcGlwZSk7CisJaWYgKElTX0VSUihtdGtfY3J0Yy0+bXV0ZXgpKSB7CisJCXJl dCA9IFBUUl9FUlIobXRrX2NydGMtPm11dGV4KTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g Z2V0IG11dGV4OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljb21wX2lkID0g ZHJtX3ByaXYtPnBhdGhbcGlwZV1bMF07CisKKwlmb3IgKGkgPSAwOyBpIDwgbXRrX2NydGMtPmRk cF9jb21wX25yOyBpKyspIHsKKwkJc3RydWN0IG10a19kZHBfY29tcCAqY29tcDsKKworCQljb21w X2lkID0gZHJtX3ByaXYtPnBhdGhbcGlwZV1baV07CisJCWNvbXAgPSBkcm1fcHJpdi0+ZGRwX2Nv bXBbY29tcF9pZF07CisJCWlmICghY29tcCkgeworCQkJZGV2X2VycihkZXYsICJDb21wb25lbnQg JXMgbm90IGluaXRpYWxpemVkXG4iLAorCQkJCWRybV9wcml2LT5jb21wX25vZGVbY29tcF9pZF0t PmZ1bGxfbmFtZSk7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byB1bnByZXBhcmU7CisJCX0K KworCQlyZXQgPSBjbGtfcHJlcGFyZShjb21wLT5jbGspOworCQlpZiAocmV0KSB7CisJCQlkZXZf ZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIHByZXBhcmUgY2xvY2sgZm9yIGNvbXBvbmVudCAlczog JWRcbiIsCisJCQkJZHJtX3ByaXYtPmNvbXBfbm9kZVtjb21wX2lkXS0+ZnVsbF9uYW1lLCByZXQp OworCQkJZ290byB1bnByZXBhcmU7CisJCX0KKworCQltdGtfY3J0Yy0+ZGRwX2NvbXBbaV0gPSBj b21wOworCX0KKworCWZvciAoenBvcyA9IDA7IHpwb3MgPCBPVkxfTEFZRVJfTlI7IHpwb3MrKykg eworCQl0eXBlID0gKHpwb3MgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDoKKwkJCQko enBvcyA9PSAxKSA/IERSTV9QTEFORV9UWVBFX0NVUlNPUiA6CisJCQkJCQlEUk1fUExBTkVfVFlQ RV9PVkVSTEFZOworCQlyZXQgPSBtdGtfcGxhbmVfaW5pdChkcm1fZGV2LCAmbXRrX2NydGMtPnBs YW5lc1t6cG9zXSwKKwkJCQkgICAgIEJJVChwaXBlKSwgdHlwZSwgenBvcyk7CisJCWlmIChyZXQp CisJCQlnb3RvIHVucHJlcGFyZTsKKwl9CisKKwlyZXQgPSBtdGtfZHJtX2NydGNfaW5pdChkcm1f ZGV2LCBtdGtfY3J0YywgJm10a19jcnRjLT5wbGFuZXNbMF0uYmFzZSwKKwkJCQkmbXRrX2NydGMt PnBsYW5lc1sxXS5iYXNlLCBwaXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byB1bnByZXBhcmU7 CisKKwlwcml2LT5jcnRjID0gbXRrX2NydGM7CisJZHJtX3ByaXYtPm51bV9waXBlcysrOworCisJ cmV0dXJuIDA7CisKK3VucHJlcGFyZToKKwl3aGlsZSAoLS1pID49IDApCisJCWNsa191bnByZXBh cmUobXRrX2NydGMtPmRkcF9jb21wW2ldLT5jbGspOworCW9mX25vZGVfcHV0KG5vZGUpOworCisJ cmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXRrX2Rpc3Bfb3ZsX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKKwkJdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkYXRhOworCXN0cnVjdCBtdGtfZHJtX2NydGMgKm10a19j cnRjID0gcHJpdi0+Y3J0YzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtdGtfY3J0Yy0+ ZGRwX2NvbXBfbnI7IGkrKykKKwkJY2xrX3VucHJlcGFyZShtdGtfY3J0Yy0+ZGRwX2NvbXBbaV0t PmNsayk7CisKKwltdGtfZGRwX2NvbXBfdW5yZWdpc3Rlcihkcm1fZGV2LCAmcHJpdi0+ZGRwX2Nv bXApOworCW10a19kaXNwX211dGV4X3B1dChtdGtfY3J0Yy0+bXV0ZXgpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMgPSB7 CisJLmJpbmQJPSBtdGtfZGlzcF9vdmxfYmluZCwKKwkudW5iaW5kID0gbXRrX2Rpc3Bfb3ZsX3Vu YmluZCwKK307CisKK3N0YXRpYyBpbnQgbXRrX2Rpc3Bfb3ZsX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlz dHJ1Y3QgbXRrX2Rpc3Bfb3ZsICpwcml2OworCWludCBjb21wX2lkOworCWludCBpcnE7CisJaW50 IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaXJxID0gcGxhdGZvcm1f Z2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIGlycTsKKworCXJldCA9 IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIG10a19kaXNwX292bF9pcnFfaGFuZGxlciwKKwkJ CSAgICAgICBJUlFGX1RSSUdHRVJfTk9ORSwgZGV2X25hbWUoZGV2KSwgcHJpdik7CisJaWYgKHJl dCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4i LCBpcnEsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY29tcF9pZCA9IG10a19kZHBfY29t cF9nZXRfaWQoZGV2LT5vZl9ub2RlLCBNVEtfRElTUF9PVkwpOworCWlmIChjb21wX2lkIDwgMCkg eworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpZGVudGlmeSBieSBhbGlhczogJWRcbiIsIGNv bXBfaWQpOworCQlyZXR1cm4gY29tcF9pZDsKKwl9CisKKwlyZXQgPSBtdGtfZGRwX2NvbXBfaW5p dChkZXYsIGRldi0+b2Zfbm9kZSwgJnByaXYtPmRkcF9jb21wLCBjb21wX2lkKTsKKwlpZiAocmV0 KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgY29tcG9uZW50OiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2 LCBwcml2KTsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBv bmVudF9vcHMpOworCWlmIChyZXQpCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFkZCBjb21w b25lbnQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtf ZGlzcF9vdmxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29tcG9u ZW50X2RlbCgmcGRldi0+ZGV2LCAmbXRrX2Rpc3Bfb3ZsX2NvbXBvbmVudF9vcHMpOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kaXNwX292 bF9kcml2ZXJfZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My1kaXNwLW92bCIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRrX2Rp c3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2Rp c3Bfb3ZsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbXRrX2Rpc3Bfb3ZsX3Byb2JlLAorCS5yZW1v dmUJCT0gbXRrX2Rpc3Bfb3ZsX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWVk aWF0ZWstZGlzcC1vdmwiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3Rh YmxlID0gbXRrX2Rpc3Bfb3ZsX2RyaXZlcl9kdF9tYXRjaCwKKwl9LAorfTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2NydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi41YmMxMDQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fY3J0Yy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fQ1JUQ19ICisjZGVmaW5lIE1US19EUk1f Q1JUQ19ICisKKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlICJtdGtfZHJtX3Bs YW5lLmgiCisKKyNkZWZpbmUgT1ZMX0xBWUVSX05SCTQKKworc3RydWN0IG10a19jcnRjX3N0YXRl IHsKKwlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUJCWJhc2U7CisJc3RydWN0IGRybV9wZW5kaW5nX3Zi bGFua19ldmVudAkqZXZlbnQ7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCXVuc2lnbmVk IGludAkJCXBlbmRpbmdfd2lkdGg7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19oZWlnaHQ7CisJ dW5zaWduZWQgaW50CQkJcGVuZGluZ192cmVmcmVzaDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IG10a19jcnRjX3N0YXRlICp0b19tdGtfY3J0Y19zdGF0ZShzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKnMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzLCBzdHJ1Y3QgbXRrX2NydGNfc3RhdGUs IGJhc2UpOworfQorCitpbnQgbXRrX2RybV9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9k ZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9pZCBtdGtfZHJtX2NydGNfZGlzYWJs ZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgdW5zaWduZWQgaW50IHBpcGUpOwordm9p ZCBtdGtfZHJtX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CisKKyNlbmRpZiAv KiBNVEtfRFJNX0NSVENfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZGRwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2MwNjJjCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmMKQEAgLTAsMCArMSwz NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgvcmVnbWFwLmg+CisKKyNpbmNsdWRlICJtdGtfZHJtX2RkcC5oIgorI2luY2x1ZGUg Im10a19kcm1fZGRwX2NvbXAuaCIKKworI2RlZmluZSBESVNQX1JFR19DT05GSUdfRElTUF9PVkww X01PVVRfRU4JMHgwNDAKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfT1ZMMV9NT1VUX0VO CTB4MDQ0CisjZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX09EX01PVVRfRU4JCTB4MDQ4Cisj ZGVmaW5lIERJU1BfUkVHX0NPTkZJR19ESVNQX0dBTU1BX01PVVRfRU4JMHgwNGMKKyNkZWZpbmUg RElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOCTB4MDUwCisjZGVmaW5lIERJU1BfUkVH X0NPTkZJR19ESVNQX0NPTE9SMF9TRUxfSU4JMHgwODQKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklH X0RJU1BfQ09MT1IxX1NFTF9JTgkweDA4OAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfRFBJX1NF TF9JTgkJMHgwYWMKKyNkZWZpbmUgRElTUF9SRUdfQ09ORklHX0RJU1BfUkRNQTFfTU9VVF9FTgkw eDBjOAorI2RlZmluZSBESVNQX1JFR19DT05GSUdfTU1TWVNfQ0dfQ09OMAkJMHgxMDAKKworI2Rl ZmluZSBESVNQX1JFR19NVVRFWF9FTihuKQkoMHgyMCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJ U1BfUkVHX01VVEVYX1JTVChuKQkoMHgyOCArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVH X01VVEVYX01PRChuKQkoMHgyYyArIDB4MjAgKiAobikpCisjZGVmaW5lIERJU1BfUkVHX01VVEVY X1NPRihuKQkoMHgzMCArIDB4MjAgKiAobikpCisKKyNkZWZpbmUgTVVURVhfTU9EX0RJU1BfT1ZM MAkJQklUKDExKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9PVkwxCQlCSVQoMTIpCisjZGVmaW5l IE1VVEVYX01PRF9ESVNQX1JETUEwCQlCSVQoMTMpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JE TUExCQlCSVQoMTQpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1JETUEyCQlCSVQoMTUpCisjZGVm aW5lIE1VVEVYX01PRF9ESVNQX1dETUEwCQlCSVQoMTYpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQ X1dETUExCQlCSVQoMTcpCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0NPTE9SMAkJQklUKDE4KQor I2RlZmluZSBNVVRFWF9NT0RfRElTUF9DT0xPUjEJCUJJVCgxOSkKKyNkZWZpbmUgTVVURVhfTU9E X0RJU1BfQUFMCQlCSVQoMjApCisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX0dBTU1BCQlCSVQoMjEp CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX1VGT0UJCUJJVCgyMikKKyNkZWZpbmUgTVVURVhfTU9E X0RJU1BfUFdNMAkJQklUKDIzKQorI2RlZmluZSBNVVRFWF9NT0RfRElTUF9QV00xCQlCSVQoMjQp CisjZGVmaW5lIE1VVEVYX01PRF9ESVNQX09ECQlCSVQoMjUpCisKKyNkZWZpbmUgTVVURVhfU09G X1NJTkdMRV9NT0RFCQkwCisjZGVmaW5lIE1VVEVYX1NPRl9EU0kwCQkJMQorI2RlZmluZSBNVVRF WF9TT0ZfRFNJMQkJCTIKKyNkZWZpbmUgTVVURVhfU09GX0RQSTAJCQkzCisKKyNkZWZpbmUgT1ZM MF9NT1VUX0VOX0NPTE9SMAkJMHgxCisjZGVmaW5lIE9EX01PVVRfRU5fUkRNQTAJCTB4MQorI2Rl ZmluZSBVRk9FX01PVVRfRU5fRFNJMAkJMHgxCisjZGVmaW5lIENPTE9SMF9TRUxfSU5fT1ZMMAkJ MHgxCisjZGVmaW5lIE9WTDFfTU9VVF9FTl9DT0xPUjEJCTB4MQorI2RlZmluZSBHQU1NQV9NT1VU X0VOX1JETUExCQkweDEKKyNkZWZpbmUgUkRNQTFfTU9VVF9EUEkwCQkJMHgyCisjZGVmaW5lIERQ STBfU0VMX0lOX1JETUExCQkweDEKKyNkZWZpbmUgQ09MT1IxX1NFTF9JTl9PVkwxCQkweDEKKwor c3RydWN0IG10a19kaXNwX211dGV4IHsKKwlpbnQgaWQ7CisJYm9vbCBjbGFpbWVkOworfTsKKwor c3RydWN0IG10a19kZHAgeworCXN0cnVjdCBkZXZpY2UJCQkqZGV2OworCXN0cnVjdCBjbGsJCQkq Y2xrOworCXZvaWQgX19pb21lbQkJCSpyZWdzOworCXN0cnVjdCBtdGtfZGlzcF9tdXRleAkJbXV0 ZXhbMTBdOworfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtdXRleF9tb2RbRERQX0NP TVBPTkVOVF9JRF9NQVhdID0geworCVtERFBfQ09NUE9ORU5UX0FBTF0gPSBNVVRFWF9NT0RfRElT UF9BQUwsCisJW0REUF9DT01QT05FTlRfQ09MT1IwXSA9IE1VVEVYX01PRF9ESVNQX0NPTE9SMCwK KwlbRERQX0NPTVBPTkVOVF9DT0xPUjFdID0gTVVURVhfTU9EX0RJU1BfQ09MT1IxLAorCVtERFBf Q09NUE9ORU5UX0dBTU1BXSA9IE1VVEVYX01PRF9ESVNQX0dBTU1BLAorCVtERFBfQ09NUE9ORU5U X09EXSA9IE1VVEVYX01PRF9ESVNQX09ELAorCVtERFBfQ09NUE9ORU5UX09WTDBdID0gTVVURVhf TU9EX0RJU1BfT1ZMMCwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXSA9IE1VVEVYX01PRF9ESVNQX09W TDEsCisJW0REUF9DT01QT05FTlRfUFdNMF0gPSBNVVRFWF9NT0RfRElTUF9QV00wLAorCVtERFBf Q09NUE9ORU5UX1BXTTFdID0gTVVURVhfTU9EX0RJU1BfUFdNMSwKKwlbRERQX0NPTVBPTkVOVF9S RE1BMF0gPSBNVVRFWF9NT0RfRElTUF9SRE1BMCwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0gPSBN VVRFWF9NT0RfRElTUF9SRE1BMSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMl0gPSBNVVRFWF9NT0Rf RElTUF9SRE1BMiwKKwlbRERQX0NPTVBPTkVOVF9VRk9FXSA9IE1VVEVYX01PRF9ESVNQX1VGT0Us CisJW0REUF9DT01QT05FTlRfV0RNQTBdID0gTVVURVhfTU9EX0RJU1BfV0RNQTAsCisJW0REUF9D T01QT05FTlRfV0RNQTFdID0gTVVURVhfTU9EX0RJU1BfV0RNQTEsCit9OworCitzdGF0aWMgdW5z aWduZWQgaW50IG10a19kZHBfbW91dF9lbihlbnVtIG10a19kZHBfY29tcF9pZCBjdXIsCisJCQkJ ICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgIHVuc2lnbmVkIGludCAqYWRk cikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwlpZiAoY3VyID09IEREUF9DT01QT05FTlRf T1ZMMCAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfQ09MT1IwKSB7CisJCSphZGRyID0gRElTUF9S RUdfQ09ORklHX0RJU1BfT1ZMMF9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDBfTU9VVF9FTl9DT0xP UjA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9PRCAmJiBuZXh0ID09IEREUF9D T01QT05FTlRfUkRNQTApIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9PRF9NT1VU X0VOOworCQl2YWx1ZSA9IE9EX01PVVRfRU5fUkRNQTA7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQ X0NPTVBPTkVOVF9VRk9FICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9EU0kwKSB7CisJCSphZGRy ID0gRElTUF9SRUdfQ09ORklHX0RJU1BfVUZPRV9NT1VUX0VOOworCQl2YWx1ZSA9IFVGT0VfTU9V VF9FTl9EU0kwOworCX0gZWxzZSBpZiAoY3VyID09IEREUF9DT01QT05FTlRfT1ZMMSAmJiBuZXh0 ID09IEREUF9DT01QT05FTlRfQ09MT1IxKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklHX0RJ U1BfT1ZMMV9NT1VUX0VOOworCQl2YWx1ZSA9IE9WTDFfTU9VVF9FTl9DT0xPUjE7CisJfSBlbHNl IGlmIChjdXIgPT0gRERQX0NPTVBPTkVOVF9HQU1NQSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRf UkRNQTEpIHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9HQU1NQV9NT1VUX0VOOwor CQl2YWx1ZSA9IEdBTU1BX01PVVRfRU5fUkRNQTE7CisJfSBlbHNlIGlmIChjdXIgPT0gRERQX0NP TVBPTkVOVF9SRE1BMSAmJiBuZXh0ID09IEREUF9DT01QT05FTlRfRFBJMCkgeworCQkqYWRkciA9 IERJU1BfUkVHX0NPTkZJR19ESVNQX1JETUExX01PVVRfRU47CisJCXZhbHVlID0gUkRNQTFfTU9V VF9EUEkwOworCX0gZWxzZSB7CisJCXZhbHVlID0gMDsKKwl9CisKKwlyZXR1cm4gdmFsdWU7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXRrX2RkcF9zZWxfaW4oZW51bSBtdGtfZGRwX2NvbXBf aWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5leHQsCisJCQkJICAgdW5zaWdu ZWQgaW50ICphZGRyKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCWlmIChjdXIgPT0gRERQ X0NPTVBPTkVOVF9PVkwwICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjApIHsKKwkJKmFk ZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjBfU0VMX0lOOworCQl2YWx1ZSA9IENPTE9S MF9TRUxfSU5fT1ZMMDsKKwl9IGVsc2UgaWYgKGN1ciA9PSBERFBfQ09NUE9ORU5UX1JETUExICYm IG5leHQgPT0gRERQX0NPTVBPTkVOVF9EUEkwKSB7CisJCSphZGRyID0gRElTUF9SRUdfQ09ORklH X0RQSV9TRUxfSU47CisJCXZhbHVlID0gRFBJMF9TRUxfSU5fUkRNQTE7CisJfSBlbHNlIGlmIChj dXIgPT0gRERQX0NPTVBPTkVOVF9PVkwxICYmIG5leHQgPT0gRERQX0NPTVBPTkVOVF9DT0xPUjEp IHsKKwkJKmFkZHIgPSBESVNQX1JFR19DT05GSUdfRElTUF9DT0xPUjFfU0VMX0lOOworCQl2YWx1 ZSA9IENPTE9SMV9TRUxfSU5fT1ZMMTsKKwl9IGVsc2UgeworCQl2YWx1ZSA9IDA7CisJfQorCisJ cmV0dXJuIHZhbHVlOworfQorCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2b2lkIF9f aW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAor CQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRk ciwgdmFsdWUsIHJlZzsKKworCXZhbHVlID0gbXRrX2RkcF9tb3V0X2VuKGN1ciwgbmV4dCwgJmFk ZHIpOworCWlmICh2YWx1ZSkgeworCQlyZWcgPSByZWFkbF9yZWxheGVkKGNvbmZpZ19yZWdzICsg YWRkcikgfCB2YWx1ZTsKKwkJd3JpdGVsX3JlbGF4ZWQocmVnLCBjb25maWdfcmVncyArIGFkZHIp OworCX0KKworCXZhbHVlID0gbXRrX2RkcF9zZWxfaW4oY3VyLCBuZXh0LCAmYWRkcik7CisJaWYg KHZhbHVlKSB7CisJCXJlZyA9IHJlYWRsX3JlbGF4ZWQoY29uZmlnX3JlZ3MgKyBhZGRyKSB8IHZh bHVlOworCQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQor Cit2b2lkIG10a19kZHBfcmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmln X3JlZ3MsCisJCQkJICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRr X2RkcF9jb21wX2lkIG5leHQpCit7CisJdW5zaWduZWQgaW50IGFkZHIsIHZhbHVlLCByZWc7CisK Kwl2YWx1ZSA9IG10a19kZHBfbW91dF9lbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUp IHsKKwkJcmVnID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOwor CQl3cml0ZWxfcmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorCisJdmFsdWUg PSBtdGtfZGRwX3NlbF9pbihjdXIsIG5leHQsICZhZGRyKTsKKwlpZiAodmFsdWUpIHsKKwkJcmVn ID0gcmVhZGxfcmVsYXhlZChjb25maWdfcmVncyArIGFkZHIpICYgfnZhbHVlOworCQl3cml0ZWxf cmVsYXhlZChyZWcsIGNvbmZpZ19yZWdzICsgYWRkcik7CisJfQorfQorCitzdHJ1Y3QgbXRrX2Rp c3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVk IGludCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7 CisJaW50IHJldDsKKworCWlmIChpZCA+PSAxMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7 CisJaWYgKGRkcC0+bXV0ZXhbaWRdLmNsYWltZWQpCisJCXJldHVybiBFUlJfUFRSKC1FQlVTWSk7 CisKKwlkZHAtPm11dGV4W2lkXS5jbGFpbWVkID0gdHJ1ZTsKKworCXJldCA9IGNsa19wcmVwYXJl X2VuYWJsZShkZHAtPmNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBlbmFibGUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0K KworCXJldHVybiAmZGRwLT5tdXRleFtpZF07Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfcHV0 KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4 LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKwor CW11dGV4LT5jbGFpbWVkID0gZmFsc2U7Cit9CisKK2ludCBtdGtfZGlzcF9tdXRleF9wcmVwYXJl KHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9 IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4 LT5pZF0pOworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoZGRwLT5jbGspOworfQorCit2b2lk IG10a19kaXNwX211dGV4X3VucHJlcGFyZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KQor eworCXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtf ZGRwLAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUo ZGRwLT5jbGspOworfQorCit2b2lkIG10a19kaXNwX211dGV4X2FkZF9jb21wKHN0cnVjdCBtdGtf ZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkgICAgIGVudW0gbXRrX2RkcF9jb21wX2lkIGlkKQorewor CXN0cnVjdCBtdGtfZGRwICpkZHAgPSBjb250YWluZXJfb2YobXV0ZXgsIHN0cnVjdCBtdGtfZGRw LAorCQkJCQkgICBtdXRleFttdXRleC0+aWRdKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJV0FS Tl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXN3aXRjaCAoaWQpIHsK KwljYXNlIEREUF9DT01QT05FTlRfRFNJMDoKKwkJcmVnID0gTVVURVhfU09GX0RTSTA7CisJCWJy ZWFrOworCWNhc2UgRERQX0NPTVBPTkVOVF9EU0kxOgorCQlyZWcgPSBNVVRFWF9TT0ZfRFNJMDsK KwkJYnJlYWs7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXJlZyA9IE1VVEVYX1NPRl9E UEkwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZWcgPSByZWFkbF9yZWxheGVkKGRkcC0+cmVn cyArIERJU1BfUkVHX01VVEVYX01PRChtdXRleC0+aWQpKTsKKwkJcmVnIHw9IG11dGV4X21vZFtp ZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywgZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9E KG11dGV4LT5pZCkpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVsX3JlbGF4ZWQocmVnLCBkZHAt PnJlZ3MgKyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7Cit9CisKK3ZvaWQgbXRrX2Rp c3BfbXV0ZXhfcmVtb3ZlX2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCQll bnVtIG10a19kZHBfY29tcF9pZCBpZCkKK3sKKwlzdHJ1Y3QgbXRrX2RkcCAqZGRwID0gY29udGFp bmVyX29mKG11dGV4LCBzdHJ1Y3QgbXRrX2RkcCwKKwkJCQkJICAgbXV0ZXhbbXV0ZXgtPmlkXSk7 CisJdW5zaWduZWQgaW50IHJlZzsKKworCVdBUk5fT04oJmRkcC0+bXV0ZXhbbXV0ZXgtPmlkXSAh PSBtdXRleCk7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBERFBfQ09NUE9ORU5UX0RTSTA6CisJ Y2FzZSBERFBfQ09NUE9ORU5UX0RTSTE6CisJY2FzZSBERFBfQ09NUE9ORU5UX0RQSTA6CisJCXdy aXRlbF9yZWxheGVkKE1VVEVYX1NPRl9TSU5HTEVfTU9ERSwKKwkJCSAgICAgICBkZHAtPnJlZ3Mg KyBESVNQX1JFR19NVVRFWF9TT0YobXV0ZXgtPmlkKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ CXJlZyA9IHJlYWRsX3JlbGF4ZWQoZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4 LT5pZCkpOworCQlyZWcgJj0gfm11dGV4X21vZFtpZF07CisJCXdyaXRlbF9yZWxheGVkKHJlZywg ZGRwLT5yZWdzICsgRElTUF9SRUdfTVVURVhfTU9EKG11dGV4LT5pZCkpOworCQlicmVhazsKKwl9 Cit9CisKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfZW5hYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAq bXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAgKmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3Ry dWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRw LT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4KTsKKworCXdyaXRlbCgxLCBkZHAtPnJlZ3MgKyBE SVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQpKTsKK30KKwordm9pZCBtdGtfZGlzcF9tdXRleF9k aXNhYmxlKHN0cnVjdCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgpCit7CisJc3RydWN0IG10a19kZHAg KmRkcCA9IGNvbnRhaW5lcl9vZihtdXRleCwgc3RydWN0IG10a19kZHAsCisJCQkJCSAgIG11dGV4 W211dGV4LT5pZF0pOworCisJV0FSTl9PTigmZGRwLT5tdXRleFttdXRleC0+aWRdICE9IG11dGV4 KTsKKworCXdyaXRlbCgwLCBkZHAtPnJlZ3MgKyBESVNQX1JFR19NVVRFWF9FTihtdXRleC0+aWQp KTsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbXRr X2RkcCAqZGRwOworCXN0cnVjdCByZXNvdXJjZSAqcmVnczsKKwlpbnQgaTsKKworCWRkcCA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqZGRwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZHApCisJ CXJldHVybiAtRU5PTUVNOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCWRkcC0+bXV0 ZXhbaV0uaWQgPSBpOworCisJZGRwLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlp ZiAoSVNfRVJSKGRkcC0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgY2xv Y2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkZHAtPmNsayk7CisJfQorCisJcmVncyA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZGRwLT5yZWdzID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7CisJaWYgKElTX0VSUihkZHAtPnJlZ3Mp KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIG1hcCBtdXRleCByZWdpc3RlcnNcbiIpOwor CQlyZXR1cm4gUFRSX0VSUihkZHAtPnJlZ3MpOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRh KHBkZXYsIGRkcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZGRwX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkZHBfZHJpdmVyX2R0X21hdGNoW10gPSB7CisJ eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1tdXRleCIgfSwKKwl7fSwKK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkZHBfZHJpdmVyX2R0X21hdGNoKTsKKworc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RkcF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IG10 a19kZHBfcHJvYmUsCisJLnJlbW92ZQkJPSBtdGtfZGRwX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsK KwkJLm5hbWUJPSAibWVkaWF0ZWstZGRwIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5v Zl9tYXRjaF90YWJsZSA9IGRkcF9kcml2ZXJfZHRfbWF0Y2gsCisJfSwKK307CisKK21vZHVsZV9w bGF0Zm9ybV9kcml2ZXIobXRrX2RkcF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmMxMTc1Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwLmgK QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpZm5kZWYgTVRLX0RSTV9ERFBfSAorI2RlZmluZSBNVEtfRFJNX0REUF9ICisKKyNpbmNsdWRl ICJtdGtfZHJtX2RkcF9jb21wLmgiCisKK3N0cnVjdCByZWdtYXA7CitzdHJ1Y3QgZGV2aWNlOwor c3RydWN0IG10a19kaXNwX211dGV4OworCit2b2lkIG10a19kZHBfYWRkX2NvbXBfdG9fcGF0aCh2 b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQg Y3VyLAorCQkJICAgICAgZW51bSBtdGtfZGRwX2NvbXBfaWQgbmV4dCk7Cit2b2lkIG10a19kZHBf cmVtb3ZlX2NvbXBfZnJvbV9wYXRoKHZvaWQgX19pb21lbSAqY29uZmlnX3JlZ3MsCisJCQkJICAg ZW51bSBtdGtfZGRwX2NvbXBfaWQgY3VyLAorCQkJCSAgIGVudW0gbXRrX2RkcF9jb21wX2lkIG5l eHQpOworCitzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm10a19kaXNwX211dGV4X2dldChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBpZCk7CitpbnQgbXRrX2Rpc3BfbXV0ZXhfcHJlcGFy ZShzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4KTsKK3ZvaWQgbXRrX2Rpc3BfbXV0ZXhfYWRk X2NvbXAoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRleCwKKwkJCSAgICAgZW51bSBtdGtfZGRw X2NvbXBfaWQgaWQpOwordm9pZCBtdGtfZGlzcF9tdXRleF9lbmFibGUoc3RydWN0IG10a19kaXNw X211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X2Rpc2FibGUoc3RydWN0IG10a19k aXNwX211dGV4ICptdXRleCk7Cit2b2lkIG10a19kaXNwX211dGV4X3JlbW92ZV9jb21wKHN0cnVj dCBtdGtfZGlzcF9tdXRleCAqbXV0ZXgsCisJCQkJZW51bSBtdGtfZGRwX2NvbXBfaWQgaWQpOwor dm9pZCBtdGtfZGlzcF9tdXRleF91bnByZXBhcmUoc3RydWN0IG10a19kaXNwX211dGV4ICptdXRl eCk7Cit2b2lkIG10a19kaXNwX211dGV4X3B1dChzdHJ1Y3QgbXRrX2Rpc3BfbXV0ZXggKm11dGV4 KTsKKworI2VuZGlmIC8qIE1US19EUk1fRERQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9tZWRpYXRlay9tdGtfZHJtX2RkcF9jb21wLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2RybV9kZHBfY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmRlMDIzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9kZHBfY29tcC5jCkBAIC0wLDAgKzEsNDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE1IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcnM6CisgKglZVCBTaGVuIDx5dC5zaGVuQG1lZGlh dGVrLmNvbT4KKyAqCUNLIEh1IDxjay5odUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9j bGsuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3Mu aD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y bS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5l LmgiCisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5lIERJU1BfUkVHX09W TF9JTlRFTgkJCTB4MDAwNAorI2RlZmluZSBPVkxfRk1FX0NQTF9JTlQJCQkJCUJJVCgxKQorI2Rl ZmluZSBESVNQX1JFR19PVkxfSU5UU1RBCQkJMHgwMDA4CisjZGVmaW5lIERJU1BfUkVHX09WTF9F TgkJCQkweDAwMGMKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JTVAkJCTB4MDAxNAorI2RlZmluZSBE SVNQX1JFR19PVkxfUk9JX1NJWkUJCQkweDAwMjAKKyNkZWZpbmUgRElTUF9SRUdfT1ZMX1JPSV9C R0NMUgkJCTB4MDAyOAorI2RlZmluZSBESVNQX1JFR19PVkxfU1JDX0NPTgkJCTB4MDAyYworI2Rl ZmluZSBESVNQX1JFR19PVkxfQ09OKG4pCQkJKDB4MDAzMCArIDB4MjAgKiBuKQorI2RlZmluZSBE SVNQX1JFR19PVkxfU1JDX1NJWkUobikJCSgweDAwMzggKyAweDIwICogbikKKyNkZWZpbmUgRElT UF9SRUdfT1ZMX09GRlNFVChuKQkJCSgweDAwM2MgKyAweDIwICogbikKKyNkZWZpbmUgRElTUF9S RUdfT1ZMX1BJVENIKG4pCQkJKDB4MDA0NCArIDB4MjAgKiBuKQorI2RlZmluZSBESVNQX1JFR19P VkxfUkRNQV9DVFJMKG4pCQkoMHgwMGMwICsgMHgyMCAqIG4pCisjZGVmaW5lIERJU1BfUkVHX09W TF9SRE1BX0dNQyhuKQkJKDB4MDBjOCArIDB4MjAgKiBuKQorI2RlZmluZSBESVNQX1JFR19PVkxf QUREUihuKQkJCSgweDBmNDAgKyAweDIwICogbikKKworI2RlZmluZSBESVNQX1JFR19SRE1BX0lO VF9FTkFCTEUJCTB4MDAwMAorI2RlZmluZSBESVNQX1JFR19SRE1BX0lOVF9TVEFUVVMJCTB4MDAw NAorI2RlZmluZSBESVNQX1JFR19SRE1BX0dMT0JBTF9DT04JCTB4MDAxMAorI2RlZmluZSBESVNQ X1JFR19SRE1BX1NJWkVfQ09OXzAJCTB4MDAxNAorI2RlZmluZSBESVNQX1JFR19SRE1BX1NJWkVf Q09OXzEJCTB4MDAxOAorI2RlZmluZSBESVNQX1JFR19SRE1BX0ZJRk9fQ09OCQkJMHgwMDQwCisj ZGVmaW5lIFJETUFfRklGT19VTkRFUkZMT1dfRU4JCQkJQklUKDMxKQorI2RlZmluZSBSRE1BX0ZJ Rk9fUFNFVURPX1NJWkUoYnl0ZXMpCQkJKCgoYnl0ZXMpIC8gMTYpIDw8IDE2KQorI2RlZmluZSBS RE1BX09VVFBVVF9WQUxJRF9GSUZPX1RIUkVTSE9MRChieXRlcykJCSgoYnl0ZXMpIC8gMTYpCisK KyNkZWZpbmUgRElTUF9PRF9FTgkJCQkweDAwMDAKKyNkZWZpbmUgRElTUF9PRF9JTlRFTgkJCQkw eDAwMDgKKyNkZWZpbmUgRElTUF9PRF9JTlRTVEEJCQkJMHgwMDBjCisjZGVmaW5lIERJU1BfT0Rf Q0ZHCQkJCTB4MDAyMAorI2RlZmluZSBESVNQX09EX1NJWkUJCQkJMHgwMDMwCisKKyNkZWZpbmUg RElTUF9SRUdfVUZPX1NUQVJUCQkJMHgwMDAwCisKKyNkZWZpbmUgRElTUF9DT0xPUl9DRkdfTUFJ TgkJCTB4MDQwMAorI2RlZmluZSBESVNQX0NPTE9SX1NUQVJUCQkJMHgwYzAwCisjZGVmaW5lIERJ U1BfQ09MT1JfV0lEVEgJCQkweDBjNTAKKyNkZWZpbmUgRElTUF9DT0xPUl9IRUlHSFQJCQkweDBj NTQKKworZW51bSBPVkxfSU5QVVRfRk9STUFUIHsKKwlPVkxfSU5GTVRfUkdCNTY1ID0gMCwKKwlP VkxfSU5GTVRfUkdCODg4ID0gMSwKKwlPVkxfSU5GTVRfUkdCQTg4ODggPSAyLAorCU9WTF9JTkZN VF9BUkdCODg4OCA9IDMsCit9OworCisjZGVmaW5lCU9WTF9SRE1BX01FTV9HTUMJMHg0MDQwMjAy MAorI2RlZmluZQlPVkxfQUVOCQkJQklUKDgpCisjZGVmaW5lCU9WTF9BTFBIQQkJMHhmZgorCisj ZGVmaW5lCU9EX1JFTEFZX01PREUJCUJJVCgwKQorCisjZGVmaW5lCVVGT19CWVBBU1MJCUJJVCgy KQorCisjZGVmaW5lCUNPTE9SX0JZUEFTU19BTEwJQklUKDcpCisjZGVmaW5lCUNPTE9SX1NFUV9T RUwJCUJJVCgxMykKKworc3RhdGljIHZvaWQgbXRrX2NvbG9yX2NvbmZpZyh2b2lkIF9faW9tZW0g KmNvbG9yX2Jhc2UsIHVuc2lnbmVkIGludCB3LAorCQl1bnNpZ25lZCBpbnQgaCwgdW5zaWduZWQg aW50IHZyZWZyZXNoKQoreworCXdyaXRlbCh3LCBjb2xvcl9iYXNlICsgRElTUF9DT0xPUl9XSURU SCk7CisJd3JpdGVsKGgsIGNvbG9yX2Jhc2UgKyBESVNQX0NPTE9SX0hFSUdIVCk7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19jb2xvcl9zdGFydCh2b2lkIF9faW9tZW0gKmNvbG9yX2Jhc2UpCit7CisJ d3JpdGVsKENPTE9SX0JZUEFTU19BTEwgfCBDT0xPUl9TRVFfU0VMLAorCQljb2xvcl9iYXNlICsg RElTUF9DT0xPUl9DRkdfTUFJTik7CisJd3JpdGVsKDB4MSwgY29sb3JfYmFzZSArIERJU1BfQ09M T1JfU1RBUlQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfb2RfY29uZmlnKHZvaWQgX19pb21lbSAq b2RfYmFzZSwgdW5zaWduZWQgaW50IHcsIHVuc2lnbmVkIGludCBoLAorCQl1bnNpZ25lZCBpbnQg dnJlZnJlc2gpCit7CisJd3JpdGVsKHcgPDwgMTYgfCBoLCBvZF9iYXNlICsgRElTUF9PRF9TSVpF KTsKK30KKworc3RhdGljIHZvaWQgbXRrX29kX3N0YXJ0KHZvaWQgX19pb21lbSAqb2RfYmFzZSkK K3sKKwl3cml0ZWwoT0RfUkVMQVlfTU9ERSwgb2RfYmFzZSArIERJU1BfT0RfQ0ZHKTsKKwl3cml0 ZWwoMSwgb2RfYmFzZSArIERJU1BfT0RfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfb3ZsX2Vu YWJsZV92Ymxhbmsodm9pZCBfX2lvbWVtICpkaXNwX2Jhc2UpCit7CisJd3JpdGVsKE9WTF9GTUVf Q1BMX0lOVCwgZGlzcF9iYXNlICsgRElTUF9SRUdfT1ZMX0lOVEVOKTsKK30KKworc3RhdGljIHZv aWQgbXRrX292bF9kaXNhYmxlX3ZibGFuayh2b2lkIF9faW9tZW0gKmRpc3BfYmFzZSkKK3sKKwl3 cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5URU4pOworfQorCitzdGF0aWMg dm9pZCBtdGtfb3ZsX2NsZWFyX3ZibGFuayh2b2lkIF9faW9tZW0gKmRpc3BfYmFzZSkKK3sKKwl3 cml0ZWwoMHgwLCBkaXNwX2Jhc2UgKyBESVNQX1JFR19PVkxfSU5UU1RBKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX292bF9zdGFydCh2b2lkIF9faW9tZW0gKm92bF9iYXNlKQoreworCXdyaXRlbCgw eDEsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292 bF9jb25maWcodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwKKwkJdW5zaWduZWQgaW50IHcsIHVuc2ln bmVkIGludCBoLCB1bnNpZ25lZCBpbnQgdnJlZnJlc2gpCit7CisJaWYgKHcgIT0gMCAmJiBoICE9 IDApCisJCXdyaXRlbChoIDw8IDE2IHwgdywgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfUk9JX1NJ WkUpOworCXdyaXRlbCgweDAsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JPSV9CR0NMUik7CisK Kwl3cml0ZWwoMHgxLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9SU1QpOworCXdyaXRlbCgweDAs IG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JTVCk7Cit9CisKK3N0YXRpYyBib29sIGhhc19yYl9z d2FwcGVkKHVuc2lnbmVkIGludCBmbXQpCit7CisJc3dpdGNoIChmbXQpIHsKKwljYXNlIERSTV9G T1JNQVRfQkdSODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1I1NjU6CisJY2FzZSBEUk1fRk9STUFU X0FCR1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRf QkdSQTg4ODg6CisJY2FzZSBEUk1fRk9STUFUX0JHUlg4ODg4OgorCQlyZXR1cm4gdHJ1ZTsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG92 bF9mbXRfY29udmVydCh1bnNpZ25lZCBpbnQgZm10KQoreworCXN3aXRjaCAoZm10KSB7CisJY2Fz ZSBEUk1fRk9STUFUX1JHQjg4ODoKKwljYXNlIERSTV9GT1JNQVRfQkdSODg4OgorCQlyZXR1cm4g T1ZMX0lORk1UX1JHQjg4ODsKKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1OgorCWNhc2UgRFJNX0ZP Uk1BVF9CR1I1NjU6CisJCXJldHVybiBPVkxfSU5GTVRfUkdCNTY1OworCWNhc2UgRFJNX0ZPUk1B VF9SR0JYODg4ODoKKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6CisJY2FzZSBEUk1fRk9STUFU X0JHUlg4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKKwkJcmV0dXJuIE9WTF9JTkZN VF9BUkdCODg4ODsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFU X0FSR0I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9YQkdSODg4ODoKKwljYXNlIERSTV9GT1JNQVRf QUJHUjg4ODg6CisJCXJldHVybiBPVkxfSU5GTVRfUkdCQTg4ODg7CisJZGVmYXVsdDoKKwkJRFJN X0VSUk9SKCJ1bnN1cHBvcnRlZCBmb3JtYXRbJTA4eF1cbiIsIGZtdCk7CisJCXJldHVybiBPVkxf SU5GTVRfUkdCODg4OworCX0KK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9vbih2b2lk IF9faW9tZW0gKm92bF9iYXNlLCB1bnNpZ25lZCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGludCBy ZWc7CisKKwl3cml0ZWwoMHgxLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9SRE1BX0NUUkwoaWR4 KSk7CisJd3JpdGVsKE9WTF9SRE1BX01FTV9HTUMsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1JE TUFfR01DKGlkeCkpOworCisJcmVnID0gcmVhZGwob3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JD X0NPTik7CisJcmVnID0gcmVnIHwgKDEgPDwgaWR4KTsKKwl3cml0ZWwocmVnLCBvdmxfYmFzZSAr IERJU1BfUkVHX09WTF9TUkNfQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX292bF9sYXllcl9v ZmYodm9pZCBfX2lvbWVtICpvdmxfYmFzZSwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwl1bnNpZ25l ZCBpbnQgcmVnOworCisJcmVnID0gcmVhZGwob3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfU1JDX0NP Tik7CisJcmVnID0gcmVnICYgfigxIDw8IGlkeCk7CisJd3JpdGVsKHJlZywgb3ZsX2Jhc2UgKyBE SVNQX1JFR19PVkxfU1JDX0NPTik7CisKKwl3cml0ZWwoMHgwLCBvdmxfYmFzZSArIERJU1BfUkVH X09WTF9SRE1BX0NUUkwoaWR4KSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19vdmxfbGF5ZXJfY29u ZmlnKHZvaWQgX19pb21lbSAqb3ZsX2Jhc2UsIHVuc2lnbmVkIGludCBpZHgsCisJCXN0cnVjdCBt dGtfcGxhbmVfc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGludCBhZGRyID0gc3RhdGUtPnBl bmRpbmdfYWRkcjsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBzdGF0ZS0+cGVuZGluZ19waXRjaCAm IDB4ZmZmZjsKKwl1bnNpZ25lZCBpbnQgZm10ID0gc3RhdGUtPnBlbmRpbmdfZm9ybWF0OworCXVu c2lnbmVkIGludCBvZmZzZXQgPSAoc3RhdGUtPnBlbmRpbmdfeSA8PCAxNikgfCBzdGF0ZS0+cGVu ZGluZ194OworCXVuc2lnbmVkIGludCBzcmNfc2l6ZSA9IChzdGF0ZS0+cGVuZGluZ19oZWlnaHQg PDwgMTYpIHwKKwkJCQlzdGF0ZS0+cGVuZGluZ193aWR0aDsKKwl1bnNpZ25lZCBpbnQgY29uOwor CisJY29uID0gaGFzX3JiX3N3YXBwZWQoZm10KSA8PCAyNCB8IG92bF9mbXRfY29udmVydChmbXQp IDw8IDEyOworCWlmIChpZHggIT0gMCkKKwkJY29uIHw9IE9WTF9BRU4gfCBPVkxfQUxQSEE7CisK Kwl3cml0ZWwoY29uLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9DT04oaWR4KSk7CisJd3JpdGVs KHBpdGNoLCBvdmxfYmFzZSArIERJU1BfUkVHX09WTF9QSVRDSChpZHgpKTsKKwl3cml0ZWwoc3Jj X3NpemUsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX1NSQ19TSVpFKGlkeCkpOworCXdyaXRlbChv ZmZzZXQsIG92bF9iYXNlICsgRElTUF9SRUdfT1ZMX09GRlNFVChpZHgpKTsKKwl3cml0ZWwoYWRk ciwgb3ZsX2Jhc2UgKyBESVNQX1JFR19PVkxfQUREUihpZHgpKTsKK30KKworc3RhdGljIHZvaWQg bXRrX3JkbWFfc3RhcnQodm9pZCBfX2lvbWVtICpyZG1hX2Jhc2UpCit7CisJdW5zaWduZWQgaW50 IHJlZzsKKworCXdyaXRlbCgweDQsIHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfSU5UX0VOQUJM RSk7CisJcmVnID0gcmVhZGwocmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9HTE9CQUxfQ09OKTsK KwlyZWcgfD0gMTsKKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX0dMT0JB TF9DT04pOworfQorCitzdGF0aWMgdm9pZCBtdGtfcmRtYV9jb25maWcodm9pZCBfX2lvbWVtICpy ZG1hX2Jhc2UsCisJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGlu dCB2cmVmcmVzaCkKK3sKKwl1bnNpZ25lZCBpbnQgdGhyZXNob2xkOworCXVuc2lnbmVkIGludCBy ZWc7CisKKwlyZWcgPSByZWFkbChyZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1BX1NJWkVfQ09OXzAp OworCXJlZyA9IChyZWcgJiB+KDB4ZmZmKSkgfCAod2lkdGggJiAweGZmZik7CisJd3JpdGVsKHJl ZywgcmRtYV9iYXNlICsgRElTUF9SRUdfUkRNQV9TSVpFX0NPTl8wKTsKKworCXJlZyA9IHJlYWRs KHJkbWFfYmFzZSArIERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisJcmVnID0gKHJlZyAmIH4o MHhmZmZmZikpIHwgKGhlaWdodCAmIDB4ZmZmZmYpOworCXdyaXRlbChyZWcsIHJkbWFfYmFzZSAr IERJU1BfUkVHX1JETUFfU0laRV9DT05fMSk7CisKKwkvKgorCSAqIEVuYWJsZSBGSUZPIHVuZGVy ZmxvdyBzaW5jZSBEU0kgYW5kIERQSSBjYW4ndCBiZSBibG9ja2VkLgorCSAqIEtlZXAgdGhlIEZJ Rk8gcHNldWRvIHNpemUgcmVzZXQgZGVmYXVsdCBvZiA4IEtpQi4gU2V0IHRoZQorCSAqIG91dHB1 dCB0aHJlc2hvbGQgdG8gNiBtaWNyb3NlY29uZHMgd2l0aCA3LzYgb3ZlcmhlYWQgdG8KKwkgKiBh Y2NvdW50IGZvciBibGFua2luZywgYW5kIHdpdGggYSBwaXhlbCBkZXB0aCBvZiA0IGJ5dGVzOgor CSAqLworCXRocmVzaG9sZCA9IHdpZHRoICogaGVpZ2h0ICogdnJlZnJlc2ggKiA0ICogNyAvIDEw MDAwMDA7CisJcmVnID0gUkRNQV9GSUZPX1VOREVSRkxPV19FTiB8CisJICAgICAgUkRNQV9GSUZP X1BTRVVET19TSVpFKFNaXzhLKSB8CisJICAgICAgUkRNQV9PVVRQVVRfVkFMSURfRklGT19USFJF U0hPTEQodGhyZXNob2xkKTsKKwl3cml0ZWwocmVnLCByZG1hX2Jhc2UgKyBESVNQX1JFR19SRE1B X0ZJRk9fQ09OKTsKK30KKworc3RhdGljIHZvaWQgbXRrX3Vmb2Vfc3RhcnQodm9pZCBfX2lvbWVt ICp1Zm9lX2Jhc2UpCit7CisJd3JpdGVsKFVGT19CWVBBU1MsIHVmb2VfYmFzZSArIERJU1BfUkVH X1VGT19TVEFSVCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNz IGRkcF9ub3AgPSB7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5j cyBkZHBfY29sb3IgPSB7CisJLmNvbmZpZyA9IG10a19jb2xvcl9jb25maWcsCisJLnBvd2VyX29u ID0gbXRrX2NvbG9yX3N0YXJ0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRwX2Nv bXBfZnVuY3MgZGRwX29kID0geworCS5jb25maWcgPSBtdGtfb2RfY29uZmlnLAorCS5wb3dlcl9v biA9IG10a19vZF9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21w X2Z1bmNzIGRkcF9vdmwgPSB7CisJLmNvbmZpZyA9IG10a19vdmxfY29uZmlnLAorCS5wb3dlcl9v biA9IG10a19vdmxfc3RhcnQsCisJLmVuYWJsZV92YmxhbmsgPSBtdGtfb3ZsX2VuYWJsZV92Ymxh bmssCisJLmRpc2FibGVfdmJsYW5rID0gbXRrX292bF9kaXNhYmxlX3ZibGFuaywKKwkuY2xlYXJf dmJsYW5rID0gbXRrX292bF9jbGVhcl92YmxhbmssCisJLmxheWVyX29uID0gbXRrX292bF9sYXll cl9vbiwKKwkubGF5ZXJfb2ZmID0gbXRrX292bF9sYXllcl9vZmYsCisJLmxheWVyX2NvbmZpZyA9 IG10a19vdmxfbGF5ZXJfY29uZmlnLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtdGtfZGRw X2NvbXBfZnVuY3MgZGRwX3JkbWEgPSB7CisJLmNvbmZpZyA9IG10a19yZG1hX2NvbmZpZywKKwku cG93ZXJfb24gPSBtdGtfcmRtYV9zdGFydCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRr X2RkcF9jb21wX2Z1bmNzIGRkcF91Zm9lID0geworCS5wb3dlcl9vbiA9IG10a191Zm9lX3N0YXJ0 LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtdGtfZGRwX2NvbXBfc3RlbVtNVEtf RERQX0NPTVBfVFlQRV9NQVhdID0geworCVtNVEtfRElTUF9PVkxdID0gIm92bCIsCisJW01US19E SVNQX1JETUFdID0gInJkbWEiLAorCVtNVEtfRElTUF9XRE1BXSA9ICJ3ZG1hIiwKKwlbTVRLX0RJ U1BfQ09MT1JdID0gImNvbG9yIiwKKwlbTVRLX0RJU1BfQUFMXSA9ICJhYWwiLAorCVtNVEtfRElT UF9HQU1NQV0gPSAiZ2FtbWEiLAorCVtNVEtfRElTUF9VRk9FXSA9ICJ1Zm9lIiwKKwlbTVRLX0RT SV0gPSAiZHNpIiwKKwlbTVRLX0RQSV0gPSAiZHBpIiwKKwlbTVRLX0RJU1BfUFdNXSA9ICJwd20i LAorCVtNVEtfRElTUF9NVVRFWF0gPSAibXV0ZXgiLAorCVtNVEtfRElTUF9PRF0gPSAib2QiLAor fTsKKworc3RydWN0IG10a19kZHBfY29tcF9tYXRjaCB7CisJZW51bSBtdGtfZGRwX2NvbXBfdHlw ZSB0eXBlOworCWludCBhbGlhc19pZDsKKwljb25zdCBzdHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNz ICpmdW5jczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRrX2RkcF9jb21wX21hdGNoIG10a19kZHBf bWF0Y2hlc1tERFBfQ09NUE9ORU5UX0lEX01BWF0gPSB7CisJW0REUF9DT01QT05FTlRfQUFMXQk9 IHsgTVRLX0RJU1BfQUFMLAkwLCAmZGRwX25vcCB9LAorCVtERFBfQ09NUE9ORU5UX0NPTE9SMF0J PSB7IE1US19ESVNQX0NPTE9SLAkwLCAmZGRwX2NvbG9yIH0sCisJW0REUF9DT01QT05FTlRfQ09M T1IxXQk9IHsgTVRLX0RJU1BfQ09MT1IsCTEsICZkZHBfY29sb3IgfSwKKwlbRERQX0NPTVBPTkVO VF9EUEkwXQk9IHsgTVRLX0RQSSwJCTAsICZkZHBfbm9wIH0sCisJW0REUF9DT01QT05FTlRfRFNJ MF0JPSB7IE1US19EU0ksCQkwLCAmZGRwX25vcCB9LAorCVtERFBfQ09NUE9ORU5UX0RTSTFdCT0g eyBNVEtfRFNJLAkJMSwgJmRkcF9ub3AgfSwKKwlbRERQX0NPTVBPTkVOVF9HQU1NQV0JPSB7IE1U S19ESVNQX0dBTU1BLAkwLCAmZGRwX25vcCB9LAorCVtERFBfQ09NUE9ORU5UX09EXQk9IHsgTVRL X0RJU1BfT0QsCTAsICZkZHBfbm9wIH0sCisJW0REUF9DT01QT05FTlRfT1ZMMF0JPSB7IE1US19E SVNQX09WTCwJMCwgJmRkcF9vdmwgfSwKKwlbRERQX0NPTVBPTkVOVF9PVkwxXQk9IHsgTVRLX0RJ U1BfT1ZMLAkxLCAmZGRwX292bCB9LAorCVtERFBfQ09NUE9ORU5UX1BXTTBdCT0geyBNVEtfRElT UF9QV00sCTAsICZkZHBfbm9wIH0sCisJW0REUF9DT01QT05FTlRfUkRNQTBdCT0geyBNVEtfRElT UF9SRE1BLAkwLCAmZGRwX3JkbWEgfSwKKwlbRERQX0NPTVBPTkVOVF9SRE1BMV0JPSB7IE1US19E SVNQX1JETUEsCTEsICZkZHBfcmRtYSB9LAorCVtERFBfQ09NUE9ORU5UX1JETUEyXQk9IHsgTVRL X0RJU1BfUkRNQSwJMiwgJmRkcF9yZG1hIH0sCisJW0REUF9DT01QT05FTlRfVUZPRV0JPSB7IE1U S19ESVNQX1VGT0UsCTAsICZkZHBfdWZvZSB9LAorCVtERFBfQ09NUE9ORU5UX1dETUEwXQk9IHsg TVRLX0RJU1BfV0RNQSwJMCwgJmRkcF9ub3AgfSwKKwlbRERQX0NPTVBPTkVOVF9XRE1BMV0JPSB7 IE1US19ESVNQX1dETUEsCTEsICZkZHBfbm9wIH0sCit9OworCitpbnQgbXRrX2RkcF9jb21wX2dl dF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQllbnVtIG10a19kZHBfY29tcF90eXBl IGNvbXBfdHlwZSkKK3sKKwlpbnQgaWQgPSBvZl9hbGlhc19nZXRfaWQobm9kZSwgbXRrX2RkcF9j b21wX3N0ZW1bY29tcF90eXBlXSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShtdGtfZGRwX21hdGNoZXMpOyBpKyspIHsKKwkJaWYgKGNvbXBfdHlwZSA9PSBtdGtfZGRw X21hdGNoZXNbaV0udHlwZSAmJgorCQkgICAgKGlkIDwgMCB8fCBpZCA9PSBtdGtfZGRwX21hdGNo ZXNbaV0uYWxpYXNfaWQpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9 CisKK2ludCBtdGtfZGRwX2NvbXBfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSwKKwkJICAgICAgc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwgZW51bSBt dGtfZGRwX2NvbXBfaWQgY29tcF9pZCkKK3sKKwllbnVtIG10a19kZHBfY29tcF90eXBlIHR5cGU7 CisJc3RydWN0IGRldmljZV9ub2RlICpsYXJiX25vZGU7CisJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqbGFyYl9wZGV2OworCisJaWYgKGNvbXBfaWQgPCAwIHx8IGNvbXBfaWQgPj0gRERQX0NPTVBP TkVOVF9JRF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJY29tcC0+aWQgPSBjb21wX2lkOwor CWNvbXAtPmZ1bmNzID0gbXRrX2RkcF9tYXRjaGVzW2NvbXBfaWRdLmZ1bmNzOworCisJaWYgKGNv bXBfaWQgPT0gRERQX0NPTVBPTkVOVF9EUEkwIHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBP TkVOVF9EU0kwIHx8CisJICAgIGNvbXBfaWQgPT0gRERQX0NPTVBPTkVOVF9QV00wKSB7CisJCWNv bXAtPnJlZ3MgPSBOVUxMOworCQljb21wLT5jbGsgPSBOVUxMOworCQljb21wLT5pcnEgPSAwOwor CQlyZXR1cm4gMDsKKwl9CisKKwljb21wLT5yZWdzID0gb2ZfaW9tYXAobm9kZSwgMCk7CisJY29t cC0+aXJxID0gb2ZfaXJxX2dldChub2RlLCAwKTsKKwljb21wLT5jbGsgPSBvZl9jbGtfZ2V0KG5v ZGUsIDApOworCWlmIChJU19FUlIoY29tcC0+Y2xrKSkKKwkJY29tcC0+Y2xrID0gTlVMTDsKKwor CXR5cGUgPSBtdGtfZGRwX21hdGNoZXNbY29tcF9pZF0udHlwZTsKKworCS8qIE9ubHkgRE1BIGNh cGFibGUgY29tcG9uZW50cyBuZWVkIHRoZSBMQVJCIHByb3BlcnR5ICovCisJY29tcC0+bGFyYl9k ZXYgPSBOVUxMOworCWlmICh0eXBlICE9IE1US19ESVNQX09WTCAmJgorCSAgICB0eXBlICE9IE1U S19ESVNQX1JETUEgJiYKKwkgICAgdHlwZSAhPSBNVEtfRElTUF9XRE1BKQorCQlyZXR1cm4gMDsK KworCWxhcmJfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgIm1lZGlhdGVrLGxhcmIiLCAw KTsKKwlpZiAoIWxhcmJfbm9kZSkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJNaXNzaW5nIG1lZGlh ZGVrLGxhcmIgcGhhbmRsZSBpbiAlcyBub2RlXG4iLAorCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGFyYl9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9k ZShsYXJiX25vZGUpOworCWlmICghbGFyYl9wZGV2KSB7CisJCWRldl93YXJuKGRldiwgIldhaXRp bmcgZm9yIGxhcmIgZGV2aWNlICVzXG4iLAorCQkJIGxhcmJfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJ cmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJY29tcC0+bGFyYl9kZXYgPSAmbGFyYl9wZGV2 LT5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworaW50IG10a19kZHBfY29tcF9yZWdpc3RlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCXN0cnVj dCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUgPSBkcm0tPmRldl9wcml2YXRlOworCisJaWYgKHBy aXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXZhdGUt PmRkcF9jb21wW2NvbXAtPmlkXSA9IGNvbXA7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2Rk cF9jb21wX3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IG10a19kZHBf Y29tcCAqY29tcCkKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5k ZXZfcHJpdmF0ZTsKKworCXByaXZhdGUtPmRkcF9jb21wW2NvbXAtPmlkXSA9IE5VTEw7Cit9CmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kZHBfY29tcC5oIGIv ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZjM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZGRwX2NvbXAuaApAQCAtMCwwICsxLDE1MiBAQAor LyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgTVRLX0RSTV9E RFBfQ09NUF9ICisjZGVmaW5lIE1US19EUk1fRERQX0NPTVBfSAorCisjaW5jbHVkZSA8bGludXgv aW8uaD4KKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBkZXZpY2Vfbm9kZTsKK3N0cnVjdCBkcm1f ZGV2aWNlOworc3RydWN0IG10a19wbGFuZV9zdGF0ZTsKKworZW51bSBtdGtfZGRwX2NvbXBfdHlw ZSB7CisJTVRLX0RJU1BfT1ZMLAorCU1US19ESVNQX1JETUEsCisJTVRLX0RJU1BfV0RNQSwKKwlN VEtfRElTUF9DT0xPUiwKKwlNVEtfRElTUF9BQUwsCisJTVRLX0RJU1BfR0FNTUEsCisJTVRLX0RJ U1BfVUZPRSwKKwlNVEtfRFNJLAorCU1US19EUEksCisJTVRLX0RJU1BfUFdNLAorCU1US19ESVNQ X01VVEVYLAorCU1US19ESVNQX09ELAorCU1US19ERFBfQ09NUF9UWVBFX01BWCwKK307CisKK2Vu dW0gbXRrX2RkcF9jb21wX2lkIHsKKwlERFBfQ09NUE9ORU5UX0FBTCwKKwlERFBfQ09NUE9ORU5U X0NPTE9SMCwKKwlERFBfQ09NUE9ORU5UX0NPTE9SMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCisJ RERQX0NPTVBPTkVOVF9EU0kwLAorCUREUF9DT01QT05FTlRfRFNJMSwKKwlERFBfQ09NUE9ORU5U X0dBTU1BLAorCUREUF9DT01QT05FTlRfT0QsCisJRERQX0NPTVBPTkVOVF9PVkwwLAorCUREUF9D T01QT05FTlRfT1ZMMSwKKwlERFBfQ09NUE9ORU5UX1BXTTAsCisJRERQX0NPTVBPTkVOVF9QV00x LAorCUREUF9DT01QT05FTlRfUkRNQTAsCisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09N UE9ORU5UX1JETUEyLAorCUREUF9DT01QT05FTlRfVUZPRSwKKwlERFBfQ09NUE9ORU5UX1dETUEw LAorCUREUF9DT01QT05FTlRfV0RNQTEsCisJRERQX0NPTVBPTkVOVF9JRF9NQVgsCit9OworCitz dHJ1Y3QgbXRrX2RkcF9jb21wX2Z1bmNzIHsKKwl2b2lkICgqY29uZmlnKSh2b2lkIF9faW9tZW0g KmJhc2UsIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCwKKwkJICAgICAgIHVuc2lnbmVk IGludCB2cmVmcmVzaCk7CisJdm9pZCAoKnBvd2VyX29uKSh2b2lkIF9faW9tZW0gKmJhc2UpOwor CXZvaWQgKCpwb3dlcl9vZmYpKHZvaWQgX19pb21lbSAqYmFzZSk7CisJdm9pZCAoKmVuYWJsZV92 YmxhbmspKHZvaWQgX19pb21lbSAqYmFzZSk7CisJdm9pZCAoKmRpc2FibGVfdmJsYW5rKSh2b2lk IF9faW9tZW0gKmJhc2UpOworCXZvaWQgKCpjbGVhcl92YmxhbmspKHZvaWQgX19pb21lbSAqYmFz ZSk7CisJdm9pZCAoKmxheWVyX29uKSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCBp ZHgpOworCXZvaWQgKCpsYXllcl9vZmYpKHZvaWQgX19pb21lbSAqYmFzZSwgdW5zaWduZWQgaW50 IGlkeCk7CisJdm9pZCAoKmxheWVyX2NvbmZpZykodm9pZCBfX2lvbWVtICpiYXNlLCB1bnNpZ25l ZCBpbnQgaWR4LAorCQkJICAgICBzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZSk7Cit9Owor CitzdHJ1Y3QgbXRrX2RkcF9jb21wIHsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVt ICpyZWdzOworCWludCBpcnE7CisJc3RydWN0IGRldmljZSAqbGFyYl9kZXY7CisJZW51bSBtdGtf ZGRwX2NvbXBfaWQgaWQ7CisJY29uc3Qgc3RydWN0IG10a19kZHBfY29tcF9mdW5jcyAqZnVuY3M7 Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2NvbmZpZyhzdHJ1Y3QgbXRr X2RkcF9jb21wICpjb21wLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50 IGgsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB2cmVmcmVzaCkKK3sKKwlpZiAoY29tcC0+ZnVu Y3MtPmNvbmZpZykKKwkJY29tcC0+ZnVuY3MtPmNvbmZpZyhjb21wLT5yZWdzLCB3LCBoLCB2cmVm cmVzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfcG93ZXJfb24oc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MtPnBvd2VyX29uKQor CQljb21wLT5mdW5jcy0+cG93ZXJfb24oY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBtdGtfZGRwX2NvbXBfcG93ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApCit7 CisJaWYgKGNvbXAtPmZ1bmNzLT5wb3dlcl9vZmYpCisJCWNvbXAtPmZ1bmNzLT5wb3dlcl9vZmYo Y29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZW5hYmxl X3ZibGFuayhzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wKQoreworCWlmIChjb21wLT5mdW5jcy0+ ZW5hYmxlX3ZibGFuaykKKwkJY29tcC0+ZnVuY3MtPmVuYWJsZV92YmxhbmsoY29tcC0+cmVncyk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfZGlzYWJsZV92Ymxhbmsoc3Ry dWN0IG10a19kZHBfY29tcCAqY29tcCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MtPmRpc2FibGVfdmJs YW5rKQorCQljb21wLT5mdW5jcy0+ZGlzYWJsZV92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfZGRwX2NvbXBfY2xlYXJfdmJsYW5rKHN0cnVjdCBtdGtfZGRw X2NvbXAgKmNvbXApCit7CisJaWYgKGNvbXAtPmZ1bmNzLT5jbGVhcl92YmxhbmspCisJCWNvbXAt PmZ1bmNzLT5jbGVhcl92YmxhbmsoY29tcC0+cmVncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb24oc3RydWN0IG10a19kZHBfY29tcCAqY29tcCwKKwkJCQkJ IHVuc2lnbmVkIGludCBpZHgpCit7CisJaWYgKGNvbXAtPmZ1bmNzLT5sYXllcl9vbikKKwkJY29t cC0+ZnVuY3MtPmxheWVyX29uKGNvbXAtPnJlZ3MsIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg dm9pZCBtdGtfZGRwX2NvbXBfbGF5ZXJfb2ZmKHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXAsCisJ CQkJCSAgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoY29tcC0+ZnVuY3MtPmxheWVyX29mZikK KwkJY29tcC0+ZnVuY3MtPmxheWVyX29mZihjb21wLT5yZWdzLCBpZHgpOworfQorCitzdGF0aWMg aW5saW5lIHZvaWQgbXRrX2RkcF9jb21wX2xheWVyX2NvbmZpZyhzdHJ1Y3QgbXRrX2RkcF9jb21w ICpjb21wLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBpZHgsCisJCQkJCSAgICAgc3RydWN0IG10 a19wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKGNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcp CisJCWNvbXAtPmZ1bmNzLT5sYXllcl9jb25maWcoY29tcC0+cmVncywgaWR4LCBzdGF0ZSk7Cit9 CisKK2ludCBtdGtfZGRwX2NvbXBfZ2V0X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJ CWVudW0gbXRrX2RkcF9jb21wX3R5cGUgY29tcF90eXBlKTsKK2ludCBtdGtfZGRwX2NvbXBfaW5p dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY29tcF9ub2RlLAorCQkg ICAgICBzdHJ1Y3QgbXRrX2RkcF9jb21wICpjb21wLCBlbnVtIG10a19kZHBfY29tcF9pZCBjb21w X2lkKTsKK2ludCBtdGtfZGRwX2NvbXBfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwg c3RydWN0IG10a19kZHBfY29tcCAqY29tcCk7Cit2b2lkIG10a19kZHBfY29tcF91bnJlZ2lzdGVy KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHN0cnVjdCBtdGtfZGRwX2NvbXAgKmNvbXApOworCisj ZW5kaWYgLyogTVRLX0RSTV9ERFBfQ09NUF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf ZHJtX2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYzBjZmMKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuYwpA QCAtMCwwICsxLDU1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IFlUIFNIRU4gPHl0LnNoZW5AbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2dlbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1 ZGUgPGxpbnV4L2RtYS1pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KKyNp bmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUu aD4KKworI2luY2x1ZGUgIm10a19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgIm10a19kcm1fZGRwLmgi CisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorI2luY2x1ZGUgIm10a19kcm1fZHJ2Lmgi CisjaW5jbHVkZSAibXRrX2RybV9mYi5oIgorI2luY2x1ZGUgIm10a19kcm1fZ2VtLmgiCisKKyNk ZWZpbmUgRFJJVkVSX05BTUUgIm1lZGlhdGVrIgorI2RlZmluZSBEUklWRVJfREVTQyAiTWVkaWF0 ZWsgU29DIERSTSIKKyNkZWZpbmUgRFJJVkVSX0RBVEUgIjIwMTUwNTEzIgorI2RlZmluZSBEUklW RVJfTUFKT1IgMQorI2RlZmluZSBEUklWRVJfTUlOT1IgMAorCitzdGF0aWMgdm9pZCBtdGtfYXRv bWljX3NjaGVkdWxlKHN0cnVjdCBtdGtfZHJtX3ByaXZhdGUgKnByaXZhdGUsCisJCQkJc3RydWN0 IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQoreworCXByaXZhdGUtPmNvbW1pdC5zdGF0ZSA9IHN0 YXRlOworCXNjaGVkdWxlX3dvcmsoJnByaXZhdGUtPmNvbW1pdC53b3JrKTsKK30KKworc3RhdGlj IHZvaWQgbXRrX2F0b21pY19jb21wbGV0ZShzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRl LAorCQkJCXN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtID0gcHJpdmF0ZS0+ZHJtOworCisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21v ZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3Bs YW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7CisJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVz ZXRfZW5hYmxlcyhkcm0sIHN0YXRlKTsKKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zvcl92Ymxh bmtzKGRybSwgc3RhdGUpOworCWRybV9hdG9taWNfaGVscGVyX2NsZWFudXBfcGxhbmVzKGRybSwg c3RhdGUpOworCWRybV9hdG9taWNfc3RhdGVfZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19hdG9taWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSAqcHJpdmF0ZSA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IG10 a19kcm1fcHJpdmF0ZSwgY29tbWl0LndvcmspOworCisJbXRrX2F0b21pY19jb21wbGV0ZShwcml2 YXRlLCBwcml2YXRlLT5jb21taXQuc3RhdGUpOworfQorCitzdGF0aWMgaW50IG10a19hdG9taWNf Y29tbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCisJCQkgICAgIHN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgYm9vbCBhc3luYykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9w cml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OworCisJcmV0ID0g ZHJtX2F0b21pY19oZWxwZXJfcHJlcGFyZV9wbGFuZXMoZHJtLCBzdGF0ZSk7CisJaWYgKHJldCkK KwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJnByaXZhdGUtPmNvbW1pdC5sb2NrKTsKKwlm bHVzaF93b3JrKCZwcml2YXRlLT5jb21taXQud29yayk7CisKKwlkcm1fYXRvbWljX2hlbHBlcl9z d2FwX3N0YXRlKGRybSwgc3RhdGUpOworCisJaWYgKGFzeW5jKQorCQltdGtfYXRvbWljX3NjaGVk dWxlKHByaXZhdGUsIHN0YXRlKTsKKwllbHNlCisJCW10a19hdG9taWNfY29tcGxldGUocHJpdmF0 ZSwgc3RhdGUpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2YXRlLT5jb21taXQubG9jayk7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3Mg bXRrX2RybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3JlYXRlID0gbXRrX2RybV9tb2Rl X2ZiX2NyZWF0ZSwKKwkuYXRvbWljX2NoZWNrID0gZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCisJ LmF0b21pY19jb21taXQgPSBtdGtfYXRvbWljX2NvbW1pdCwKK307CisKK3N0YXRpYyBjb25zdCBl bnVtIG10a19kZHBfY29tcF9pZCBtdGtfZGRwX21haW5bXSA9IHsKKwlERFBfQ09NUE9ORU5UX09W TDAsCisJRERQX0NPTVBPTkVOVF9DT0xPUjAsCisJRERQX0NPTVBPTkVOVF9BQUwsCisJRERQX0NP TVBPTkVOVF9PRCwKKwlERFBfQ09NUE9ORU5UX1JETUEwLAorCUREUF9DT01QT05FTlRfVUZPRSwK KwlERFBfQ09NUE9ORU5UX0RTSTAsCisJRERQX0NPTVBPTkVOVF9QV00wLAorfTsKKworc3RhdGlj IGNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkIG10a19kZHBfZXh0W10gPSB7CisJRERQX0NPTVBP TkVOVF9PVkwxLAorCUREUF9DT01QT05FTlRfQ09MT1IxLAorCUREUF9DT01QT05FTlRfR0FNTUEs CisJRERQX0NPTVBPTkVOVF9SRE1BMSwKKwlERFBfQ09NUE9ORU5UX0RQSTAsCit9OworCitzdGF0 aWMgaW50IG10a19kcm1fa21zX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1 Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZHJtLT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCByZXQ7CisKKwlwZGV2ID0gb2ZfZmluZF9kZXZp Y2VfYnlfbm9kZShwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlpZiAoIXBkZXYpIHsKKwkJZGV2X2Vy cihkcm0tPmRldiwgIldhaXRpbmcgZm9yIGRpc3AtbXV0ZXggZGV2aWNlICVzXG4iLAorCQkJcHJp dmF0ZS0+bXV0ZXhfbm9kZS0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0 ZXhfbm9kZSk7CisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwlwcml2YXRlLT5tdXRleF9k ZXYgPSAmcGRldi0+ZGV2OworCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+ bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQ7CisJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0 ID0gNjQ7CisKKwkvKgorCSAqIHNldCBtYXggd2lkdGggYW5kIGhlaWdodCBhcyBkZWZhdWx0IHZh bHVlKDQwOTZ4NDA5NikuCisJICogdGhpcyB2YWx1ZSB3b3VsZCBiZSB1c2VkIHRvIGNoZWNrIGZy YW1lYnVmZmVyIHNpemUgbGltaXRhdGlvbgorCSAqIGF0IGRybV9tb2RlX2FkZGZiKCkuCisJICov CisJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSA0MDk2OworCWRybS0+bW9kZV9jb25maWcu bWF4X2hlaWdodCA9IDQwOTY7CisJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZtdGtfZHJtX21v ZGVfY29uZmlnX2Z1bmNzOworCisJLyoKKwkgKiBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gZml4 ZWQgZGF0YSBzdHJlYW1zLAorCSAqIE9WTDAgLT4gQ09MT1IwIC0+IEFBTCAtPiBPRCAtPiBSRE1B MCAtPiBVRk9FIC0+IERTSTAKKwkgKiBhbmQgT1ZMMSAtPiBDT0xPUjEgLT4gR0FNTUEgLT4gUkRN QTEgLT4gRFBJMC4KKwkgKi8KKwlwcml2YXRlLT5wYXRoX2xlblswXSA9IEFSUkFZX1NJWkUobXRr X2RkcF9tYWluKTsKKwlwcml2YXRlLT5wYXRoWzBdID0gbXRrX2RkcF9tYWluOworCXByaXZhdGUt PnBhdGhfbGVuWzFdID0gQVJSQVlfU0laRShtdGtfZGRwX2V4dCk7CisJcHJpdmF0ZS0+cGF0aFsx XSA9IG10a19kZHBfZXh0OworCisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRybS0+ZGV2LCBk cm0pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2NvbmZpZ19jbGVhbnVwOworCisJLyoKKwkgKiBX ZSBkb24ndCB1c2UgdGhlIGRybV9pcnFfaW5zdGFsbCgpIGhlbHBlcnMgcHJvdmlkZWQgYnkgdGhl IERSTQorCSAqIGNvcmUsIHNvIHdlIG5lZWQgdG8gc2V0IHRoaXMgbWFudWFsbHkgaW4gb3JkZXIg dG8gYWxsb3cgdGhlCisJICogRFJNX0lPQ1RMX1dBSVRfVkJMQU5LIHRvIG9wZXJhdGUgY29ycmVj dGx5LgorCSAqLworCWRybS0+aXJxX2VuYWJsZWQgPSB0cnVlOworCXJldCA9IGRybV92Ymxhbmtf aW5pdChkcm0sIE1BWF9DUlRDKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfY29tcG9uZW50 X3VuYmluZDsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOworCWRybV9tb2RlX2Nv bmZpZ19yZXNldChkcm0pOworCisJcmV0dXJuIDA7CisKK2Vycl9jb21wb25lbnRfdW5iaW5kOgor CWNvbXBvbmVudF91bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworZXJyX2NvbmZpZ19jbGVhbnVw OgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7CisKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgdm9pZCBtdGtfZHJtX2ttc19kZWluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sK Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKKworCWRybV92YmxhbmtfY2xlYW51cChk cm0pOworCWNvbXBvbmVudF91bmJpbmRfYWxsKGRybS0+ZGV2LCBkcm0pOworCWRybV9tb2RlX2Nv bmZpZ19jbGVhbnVwKGRybSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV91bmxvYWQoc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKK3sKKwltdGtfZHJtX2ttc19kZWluaXQoZHJtKTsKKwlkcm0tPmRl dl9wcml2YXRlID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0 IHZtX29wZXJhdGlvbnNfc3RydWN0IG10a19kcm1fZ2VtX3ZtX29wcyA9IHsKKwkub3BlbiA9IGRy bV9nZW1fdm1fb3BlbiwKKwkuY2xvc2UgPSBkcm1fZ2VtX3ZtX2Nsb3NlLAorfTsKKworc3RhdGlj IGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbXRrX2RybV9mb3BzID0geworCS5vd25lciA9 IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX29wZW4sCisJLnJlbGVhc2UgPSBkcm1fcmVsZWFz ZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBkcm1faW9jdGwsCisJLm1tYXAgPSBtdGtfZHJtX2dlbV9t bWFwLAorCS5wb2xsID0gZHJtX3BvbGwsCisJLnJlYWQgPSBkcm1fcmVhZCwKKyNpZmRlZiBDT05G SUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCisjZW5kaWYKK307 CisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBtdGtfZHJtX2RyaXZlciA9IHsKKwkuZHJpdmVy X2ZlYXR1cmVzID0gRFJJVkVSX01PREVTRVQgfCBEUklWRVJfR0VNIHwgRFJJVkVSX0FUT01JQywK KwkudW5sb2FkID0gbXRrX2RybV91bmxvYWQsCisJLnNldF9idXNpZCA9IGRybV9wbGF0Zm9ybV9z ZXRfYnVzaWQsCisKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19jb3VudCwKKwku ZW5hYmxlX3ZibGFuayA9IG10a19kcm1fY3J0Y19lbmFibGVfdmJsYW5rLAorCS5kaXNhYmxlX3Zi bGFuayA9IG10a19kcm1fY3J0Y19kaXNhYmxlX3ZibGFuaywKKworCS5nZW1fZnJlZV9vYmplY3Qg PSBtdGtfZHJtX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcyA9ICZtdGtfZHJtX2dlbV92 bV9vcHMsCisJLmR1bWJfY3JlYXRlID0gbXRrX2RybV9nZW1fZHVtYl9jcmVhdGUsCisJLmR1bWJf bWFwX29mZnNldCA9IG10a19kcm1fZ2VtX2R1bWJfbWFwX29mZnNldCwKKwkuZHVtYl9kZXN0cm95 ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCisKKwkuZm9wcyA9ICZtdGtfZHJtX2ZvcHMsCisKKwku bmFtZSA9IERSSVZFUl9OQU1FLAorCS5kZXNjID0gRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBEUklW RVJfREFURSwKKwkubWFqb3IgPSBEUklWRVJfTUFKT1IsCisJLm1pbm9yID0gRFJJVkVSX01JTk9S LAorfTsKKworc3RhdGljIGludCBjb21wYXJlX29mKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSkKK3sKKwlyZXR1cm4gZGV2LT5vZl9ub2RlID09IGRhdGE7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RybV9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2 YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRybTsKKwlpbnQgcmV0OworCisJZHJtID0gZHJtX2Rldl9hbGxvYygmbXRrX2RybV9kcml2ZXIs IGRldik7CisJaWYgKCFkcm0pCisJCXJldHVybiAtRU5PTUVNOworCisJZHJtX2Rldl9zZXRfdW5p cXVlKGRybSwgZGV2X25hbWUoZGV2KSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwg MCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlkcm0tPmRldl9wcml2YXRl ID0gcHJpdmF0ZTsKKwlwcml2YXRlLT5kcm0gPSBkcm07CisKKwlyZXQgPSBtdGtfZHJtX2ttc19p bml0KGRybSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyX3VucmVnaXN0ZXI7CisKKwlyZXR1 cm4gMDsKKworZXJyX3VucmVnaXN0ZXI6CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRybSk7CitlcnJf ZnJlZToKKwlkcm1fZGV2X3VucmVmKGRybSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZv aWQgbXRrX2RybV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfZHJt X3ByaXZhdGUgKnByaXZhdGUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRybV9wdXRfZGV2 KHByaXZhdGUtPmRybSk7CisJcHJpdmF0ZS0+ZHJtID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBtdGtfZHJtX29wcyA9IHsKKwkuYmluZAkJPSBt dGtfZHJtX2JpbmQsCisJLnVuYmluZAkJPSBtdGtfZHJtX3VuYmluZCwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19kZHBfY29tcF9kdF9pZHNbXSA9IHsKKwl7IC5j b21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNwLW92bCIsICAgLmRhdGEgPSAodm9pZCAq KU1US19ESVNQX09WTCB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3At cmRtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfUkRNQSB9LAorCXsgLmNvbXBhdGlibGUg PSAibWVkaWF0ZWssbXQ4MTczLWRpc3Atd2RtYSIsICAuZGF0YSA9ICh2b2lkICopTVRLX0RJU1Bf V0RNQSB9LAorCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWRpc3AtY29sb3IiLCAu ZGF0YSA9ICh2b2lkICopTVRLX0RJU1BfQ09MT1IgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ODE3My1kaXNwLWFhbCIsICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX0FBTH0sCisJ eyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1nYW1tYSIsIC5kYXRhID0gKHZv aWQgKilNVEtfRElTUF9HQU1NQSwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3 My1kaXNwLXVmb2UiLCAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX1VGT0UgfSwKKwl7IC5jb21w YXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kc2kiLCAgICAgICAgLmRhdGEgPSAodm9pZCAqKU1U S19EU0kgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kcGkiLCAgICAgICAg LmRhdGEgPSAodm9pZCAqKU1US19EUEkgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10 ODE3My1kaXNwLW11dGV4IiwgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX01VVEVYIH0sCisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtZGlzcC1wd20iLCAgIC5kYXRhID0gKHZvaWQg KilNVEtfRElTUF9QV00gfSwKKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1kaXNw LW9kIiwgICAgLmRhdGEgPSAodm9pZCAqKU1US19ESVNQX09EIH0sCisJeyB9Cit9OworCitzdGF0 aWMgaW50IG10a19kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfZHJtX3ByaXZhdGUg KnByaXZhdGU7CisJc3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGRldmljZV9ub2RlICpu b2RlOworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlpbnQgcmV0Owor CWludCBpOworCisJcHJpdmF0ZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdmF0ZSks IEdGUF9LRVJORUwpOworCWlmICghcHJpdmF0ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRl eF9pbml0KCZwcml2YXRlLT5jb21taXQubG9jayk7CisJSU5JVF9XT1JLKCZwcml2YXRlLT5jb21t aXQud29yaywgbXRrX2F0b21pY193b3JrKTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJpdmF0ZS0+Y29uZmlnX3JlZ3MgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIocHJpdmF0ZS0+Y29uZmln X3JlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIocHJpdmF0ZS0+Y29uZmlnX3JlZ3MpOworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1tc3lzLWNvbmZpZyByZXNvdXJjZTogJWRcbiIs CisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEl0ZXJhdGUgb3ZlciBzaWJsaW5n IERJU1AgZnVuY3Rpb24gYmxvY2tzICovCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm9m X25vZGUtPnBhcmVudCwgbm9kZSkgeworCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9p ZDsKKwkJZW51bSBtdGtfZGRwX2NvbXBfdHlwZSBjb21wX3R5cGU7CisJCWludCBjb21wX2lkOwor CisJCW9mX2lkID0gb2ZfbWF0Y2hfbm9kZShtdGtfZGRwX2NvbXBfZHRfaWRzLCBub2RlKTsKKwkJ aWYgKCFvZl9pZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJs ZShub2RlKSkgeworCQkJZGV2X2RiZyhkZXYsICJTa2lwcGluZyBkaXNhYmxlZCBjb21wb25lbnQg JXNcbiIsCisJCQkJbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY29t cF90eXBlID0gKGVudW0gbXRrX2RkcF9jb21wX3R5cGUpb2ZfaWQtPmRhdGE7CisKKwkJaWYgKGNv bXBfdHlwZSA9PSBNVEtfRElTUF9NVVRFWCkgeworCQkJcHJpdmF0ZS0+bXV0ZXhfbm9kZSA9IG9m X25vZGVfZ2V0KG5vZGUpOworCQkJY29udGludWU7CisJCX0KKworCQljb21wX2lkID0gbXRrX2Rk cF9jb21wX2dldF9pZChub2RlLCBjb21wX3R5cGUpOworCQlpZiAoY29tcF9pZCA8IDApIHsKKwkJ CWRldl93YXJuKGRldiwgIlNraXBwaW5nIHVua25vd24gY29tcG9uZW50ICVzXG4iLAorCQkJCSBu b2RlLT5mdWxsX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDdXJyZW50 bHkgb25seSB0aGUgT1ZMLCBEU0ksIGFuZCBEUEkgYmxvY2tzIGhhdmUgc2VwYXJhdGUKKwkJICog Y29tcG9uZW50IHBsYXRmb3JtIGRyaXZlcnMuCisJCSAqLworCQlpZiAoY29tcF90eXBlID09IE1U S19ESVNQX09WTCB8fAorCQkgICAgY29tcF90eXBlID09IE1US19EU0kgfHwKKwkJICAgIGNvbXBf dHlwZSA9PSBNVEtfRFBJKSB7CisJCQlkZXZfaW5mbyhkZXYsICJBZGRpbmcgY29tcG9uZW50IG1h dGNoIGZvciAlc1xuIiwKKwkJCQkgbm9kZS0+ZnVsbF9uYW1lKTsKKwkJCWNvbXBvbmVudF9tYXRj aF9hZGQoZGV2LCAmbWF0Y2gsIGNvbXBhcmVfb2YsIG5vZGUpOworCQl9CisKKwkJcHJpdmF0ZS0+ Y29tcF9ub2RlW2NvbXBfaWRdID0gb2Zfbm9kZV9nZXQobm9kZSk7CisKKwkJLyoKKwkJICogQ3Vy cmVudGx5IG9ubHkgdGhlIE9WTCBkcml2ZXIgaW5pdGlhbGl6ZXMgaXRzIG93biBERFAKKwkJICog Y29tcG9uZW50IHN0cnVjdHVyZS4gVGhlIG90aGVycyBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4KKwkJ ICovCisJCWlmIChjb21wX3R5cGUgIT0gTVRLX0RJU1BfT1ZMKSB7CisJCQlzdHJ1Y3QgbXRrX2Rk cF9jb21wICpjb21wOworCisJCQljb21wID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb21w KSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWNvbXApIHsKKwkJCQlyZXQgPSAtRU5PTUVNOworCQkJ CWdvdG8gZXJyOworCQkJfQorCisJCQlyZXQgPSBtdGtfZGRwX2NvbXBfaW5pdChkZXYsIG5vZGUs IGNvbXAsIGNvbXBfaWQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKworCQkJcHJpdmF0 ZS0+ZGRwX2NvbXBbY29tcF9pZF0gPSBjb21wOworCQl9CisJfQorCisJaWYgKCFwcml2YXRlLT5t dXRleF9ub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgZGlzcC1tdXRleCBu b2RlXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJcG1fcnVudGlt ZV9lbmFibGUoZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXZhdGUpOwor CisJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXYsICZtdGtfZHJtX29w cywgbWF0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CisKK2VycjoK KwlvZl9ub2RlX3B1dChwcml2YXRlLT5tdXRleF9ub2RlKTsKKwlmb3IgKGkgPSAwOyBpIDwgRERQ X0NPTVBPTkVOVF9JRF9NQVg7IGkrKykKKwkJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+Y29tcF9ub2Rl W2ldKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19kcm1fcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19kcm1fcHJpdmF0ZSAqcHJp dmF0ZSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJY29tcG9uZW50 X21hc3Rlcl9kZWwoJnBkZXYtPmRldiwgJm10a19kcm1fb3BzKTsKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoJnBkZXYtPmRldik7CisJb2Zfbm9kZV9wdXQocHJpdmF0ZS0+bXV0ZXhfbm9kZSk7CisJZm9y IChpID0gMDsgaSA8IEREUF9DT01QT05FTlRfSURfTUFYOyBpKyspCisJCW9mX25vZGVfcHV0KHBy aXZhdGUtPmNvbXBfbm9kZVtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19Q TV9TTEVFUAorc3RhdGljIGludCBtdGtfZHJtX3N5c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubjsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShkcm0p OworCisJZHJtX21vZGVzZXRfbG9ja19hbGwoZHJtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNv bm4sICZkcm0tPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJCWludCBvbGRf ZHBtcyA9IGNvbm4tPmRwbXM7CisKKwkJaWYgKGNvbm4tPmZ1bmNzLT5kcG1zKQorCQkJY29ubi0+ ZnVuY3MtPmRwbXMoY29ubiwgRFJNX01PREVfRFBNU19PRkYpOworCisJCS8qIFNldCB0aGUgb2xk IG1vZGUgYmFjayB0byB0aGUgY29ubmVjdG9yIGZvciByZXN1bWUgKi8KKwkJY29ubi0+ZHBtcyA9 IG9sZF9kcG1zOworCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7CisKKwlEUk1fSU5G TygibXRrX2RybV9zeXNfc3VzcGVuZFxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2RybV9zeXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbXRrX2Ry bV9wcml2YXRlICpwcml2YXRlID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9k ZXZpY2UgKmRybSA9IHByaXZhdGUtPmRybTsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubjsK KworCWRybV9tb2Rlc2V0X2xvY2tfYWxsKGRybSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25u LCAmZHJtLT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpbnQgZGVzaXJl ZF9tb2RlID0gY29ubi0+ZHBtczsKKworCQkvKgorCQkgKiBhdCBzdXNwZW5kIHRpbWUsIHdlIHNh dmUgZHBtcyB0byBjb25uZWN0b3ItPmRwbXMsCisJCSAqIHJlc3RvcmUgdGhlIG9sZF9kcG1zLCBh bmQgYXQgY3VycmVudCB0aW1lLCB0aGUgY29ubmVjdG9yCisJCSAqIGRwbXMgc3RhdHVzIG11c3Qg YmUgRFJNX01PREVfRFBNU19PRkYuCisJCSAqLworCQljb25uLT5kcG1zID0gRFJNX01PREVfRFBN U19PRkY7CisKKwkJLyoKKwkJICogSWYgdGhlIGNvbm5lY3RvciBoYXMgYmVlbiBkaXNjb25uZWN0 ZWQgZHVyaW5nIHN1c3BlbmQsCisJCSAqIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgZW5jb2RlciBh bmQgbGVhdmUgaXQgb2ZmLiBXZSdsbCBub3RpZnkKKwkJICogdXNlcnNwYWNlIGF0IHRoZSBlbmQu CisJCSAqLworCQlpZiAoY29ubi0+ZnVuY3MtPmRwbXMpCisJCQljb25uLT5mdW5jcy0+ZHBtcyhj b25uLCBkZXNpcmVkX21vZGUpOworCX0KKwlkcm1fbW9kZXNldF91bmxvY2tfYWxsKGRybSk7CisK Kwlkcm1fa21zX2hlbHBlcl9wb2xsX2VuYWJsZShkcm0pOworCisJRFJNX0lORk8oIm10a19kcm1f c3lzX3Jlc3VtZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09Q UyhtdGtfZHJtX3BtX29wcywgbXRrX2RybV9zeXNfc3VzcGVuZCwKKwkJCSBtdGtfZHJtX3N5c19y ZXN1bWUpOworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19k cm1fb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtbW1zeXMi LCB9LAorCXsgfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2RybV9w bGF0Zm9ybV9kcml2ZXIgPSB7CisJLnByb2JlCT0gbXRrX2RybV9wcm9iZSwKKwkucmVtb3ZlCT0g bXRrX2RybV9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAibWVkaWF0ZWstZHJtIiwK KwkJLm9mX21hdGNoX3RhYmxlID0gbXRrX2RybV9vZl9pZHMsCisjaWZkZWYgQ09ORklHX1BNX1NM RUVQCisJCS5wbSAgICAgPSAmbXRrX2RybV9wbV9vcHMsCisjZW5kaWYKKwl9LAorfTsKKworc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKiBjb25zdCBtdGtfZHJtX2RyaXZlcnNbXSA9IHsK KwkmbXRrX2RybV9wbGF0Zm9ybV9kcml2ZXIsCisJJm10a19kaXNwX292bF9kcml2ZXIsCit9Owor CitzdGF0aWMgaW50IF9faW5pdCBtdGtfZHJtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXRrX2RybV9kcml2ZXJzKTsgaSsr KSB7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfZHJtX2RyaXZlcnNbaV0p OworCQlpZiAocmV0IDwgMCkgeworCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgZHJp dmVyOiAlZFxuIiwKKwkJCSAgICAgICBtdGtfZHJtX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCBy ZXQpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXdoaWxl ICgtLWkgPj0gMCkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2RybV9kcml2ZXJz W2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfZHJtX2V4 aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2RybV9kcml2 ZXJzKSAtIDE7IGkgPj0gMDsgaS0tKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtf ZHJtX2RyaXZlcnNbaV0pOworfQorCittb2R1bGVfaW5pdChtdGtfZHJtX2luaXQpOworbW9kdWxl X2V4aXQobXRrX2RybV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiWVQgU0hFTiA8eXQuc2hlbkBt ZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhdGVrIFNvQyBEUk0gZHJp dmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDBmODQK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9kcnYu aApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IE1lZGlhVGVrIElu Yy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K KworI2lmbmRlZiBNVEtfRFJNX0RSVl9ICisjZGVmaW5lIE1US19EUk1fRFJWX0gKKworI2luY2x1 ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSAibXRrX2RybV9kZHBfY29tcC5oIgorCisjZGVmaW5l IE1BWF9DUlRDCTIKKyNkZWZpbmUgTUFYX0NPTk5FQ1RPUgkyCisKK3N0cnVjdCBkZXZpY2U7Citz dHJ1Y3QgZGV2aWNlX25vZGU7CitzdHJ1Y3QgZHJtX2NydGM7CitzdHJ1Y3QgZHJtX2RldmljZTsK K3N0cnVjdCBkcm1fZmJfaGVscGVyOworc3RydWN0IGRybV9wcm9wZXJ0eTsKK3N0cnVjdCByZWdt YXA7CisKK3N0cnVjdCBtdGtfZHJtX3ByaXZhdGUgeworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07 CisKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGNbTUFYX0NSVENdOworCXN0cnVjdCBkcm1fcHJvcGVy dHkgKnBsYW5lX3pwb3NfcHJvcGVydHk7CisJdW5zaWduZWQgaW50IG51bV9waXBlczsKKworCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbXV0ZXhfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICptdXRleF9kZXY7 CisJdm9pZCBfX2lvbWVtICpjb25maWdfcmVnczsKKwl1bnNpZ25lZCBpbnQgcGF0aF9sZW5bTUFY X0NSVENdOworCWNvbnN0IGVudW0gbXRrX2RkcF9jb21wX2lkICpwYXRoW01BWF9DUlRDXTsKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKmNvbXBfbm9kZVtERFBfQ09NUE9ORU5UX0lEX01BWF07CisJc3Ry dWN0IG10a19kZHBfY29tcCAqZGRwX2NvbXBbRERQX0NPTVBPTkVOVF9JRF9NQVhdOworCisJc3Ry dWN0IHsKKwkJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOworCQlzdHJ1Y3Qgd29ya19z dHJ1Y3Qgd29yazsKKwkJc3RydWN0IG11dGV4IGxvY2s7CisJfSBjb21taXQ7Cit9OworCitleHRl cm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfZGlzcF9vdmxfZHJpdmVyOworCisjZW5kaWYg LyogTVRLX0RSTV9EUlZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlZGY2NQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmMKQEAgLTAsMCArMSwxMzkg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9mYl9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbS5oPgorCisjaW5jbHVkZSAi bXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRrX2Ry bV9nZW0uaCIKKworLyoKKyAqIG10ayBzcGVjaWZpYyBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUuCisg KgorICogQGZiOiBkcm0gZnJhbWVidWZmZXIgb2JqZWN0LgorICogQGdlbV9vYmo6IGFycmF5IG9m IGdlbSBvYmplY3RzLgorICovCitzdHJ1Y3QgbXRrX2RybV9mYiB7CisJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlcgliYXNlOworCS8qIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IGEgc2luZ2xlIHBsYW5l ICovCisJc3RydWN0IGRybV9nZW1fb2JqZWN0CSpnZW1fb2JqOworfTsKKworI2RlZmluZSB0b19t dGtfZmIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBtdGtfZHJtX2ZiLCBiYXNlKQorCitzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm10a19mYl9nZXRfZ2VtX29iaihzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyICpmYiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxhbmUpCit7CisJc3RydWN0IG10a19kcm1f ZmIgKm10a19mYiA9IHRvX210a19mYihmYik7CisKKwlpZiAocGxhbmUgPiAwKQorCQlyZXR1cm4g TlVMTDsKKworCXJldHVybiBtdGtfZmItPmdlbV9vYmo7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2Ry bV9mYl9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkgICAgdW5zaWduZWQgaW50ICpoYW5kbGUp Cit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYiA9IHRvX210a19mYihmYik7CisKKwlyZXR1 cm4gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgbXRrX2ZiLT5nZW1fb2JqLCBoYW5k bGUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfZHJtX2ZiX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYiA9IHRvX210a19mYihm Yik7CisKKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7CisKKwlkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZV91bmxvY2tlZChtdGtfZmItPmdlbV9vYmopOworCisJa2ZyZWUobXRrX2ZiKTsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJhbWVidWZmZXJfZnVuY3MgbXRrX2RybV9m Yl9mdW5jcyA9IHsKKwkuY3JlYXRlX2hhbmRsZSA9IG10a19kcm1fZmJfY3JlYXRlX2hhbmRsZSwK KwkuZGVzdHJveSA9IG10a19kcm1fZmJfZGVzdHJveSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRr X2RybV9mYiAqbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYs CisJCQkJCQkgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kMiAqbW9kZSwKKwkJCQkJCSAgIHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtdGtfZHJtX2ZiICptdGtfZmI7CisJ aW50IHJldDsKKworCWlmIChkcm1fZm9ybWF0X251bV9wbGFuZXMobW9kZS0+cGl4ZWxfZm9ybWF0 KSAhPSAxKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCW10a19mYiA9IGt6YWxsb2Mo c2l6ZW9mKCptdGtfZmIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW10a19mYikKKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7CisKKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJm10a19m Yi0+YmFzZSwgbW9kZSk7CisKKwltdGtfZmItPmdlbV9vYmogPSBvYmo7CisKKwlyZXQgPSBkcm1f ZnJhbWVidWZmZXJfaW5pdChkZXYsICZtdGtfZmItPmJhc2UsICZtdGtfZHJtX2ZiX2Z1bmNzKTsK KwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZm ZXJcbiIpOworCQlrZnJlZShtdGtfZmIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKwor CXJldHVybiBtdGtfZmI7Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19kcm1fbW9k ZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBk cm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQyICpjbWQp Cit7CisJc3RydWN0IG10a19kcm1fZmIgKm10a19mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3Qg KmdlbTsKKwl1bnNpZ25lZCBpbnQgd2lkdGggPSBjbWQtPndpZHRoOworCXVuc2lnbmVkIGludCBo ZWlnaHQgPSBjbWQtPmhlaWdodDsKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgYnBwOworCWludCByZXQ7 CisKKwlpZiAoZHJtX2Zvcm1hdF9udW1fcGxhbmVzKGNtZC0+cGl4ZWxfZm9ybWF0KSAhPSAxKQor CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1 cChkZXYsIGZpbGUsIGNtZC0+aGFuZGxlc1swXSk7CisJaWYgKCFnZW0pCisJCXJldHVybiBFUlJf UFRSKC1FTk9FTlQpOworCisJYnBwID0gZHJtX2Zvcm1hdF9wbGFuZV9jcHAoY21kLT5waXhlbF9m b3JtYXQsIDApOworCXNpemUgPSAoaGVpZ2h0IC0gMSkgKiBjbWQtPnBpdGNoZXNbMF0gKyB3aWR0 aCAqIGJwcDsKKwlzaXplICs9IGNtZC0+b2Zmc2V0c1swXTsKKworCWlmIChnZW0tPnNpemUgPCBz aXplKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5yZWZlcmVuY2U7CisJfQorCisJbXRr X2ZiID0gbXRrX2RybV9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgY21kLCBnZW0pOworCWlmIChJU19F UlIobXRrX2ZiKSkgeworCQlyZXQgPSBQVFJfRVJSKG10a19mYik7CisJCWdvdG8gdW5yZWZlcmVu Y2U7CisJfQorCisJcmV0dXJuICZtdGtfZmItPmJhc2U7CisKK3VucmVmZXJlbmNlOgorCWRybV9n ZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CisJcmV0dXJuIEVSUl9QVFIocmV0 KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX2ZiLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjljZTczMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIE1US19EUk1fRkJfSAorI2RlZmlu ZSBNVEtfRFJNX0ZCX0gKKworI2RlZmluZSBNQVhfRkJfT0JKCTMKKworc3RydWN0IGRybV9nZW1f b2JqZWN0ICptdGtfZmJfZ2V0X2dlbV9vYmooc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsCisJ CQkJCSAgdW5zaWduZWQgaW50IHBsYW5lKTsKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm10a19k cm1fbW9kZV9mYl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fbW9kZV9mYl9jbWQy ICpjbWQpOworCit2b2lkIG10a19kcm1fbW9kZV9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOworaW50IG10a19mYmRldl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cit2b2lkIG10a19mYmRldl9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwor CisjZW5kaWYgLyogTVRLX0RSTV9GQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YmM2MzEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9nZW0uYwpAQCAt MCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp bmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKyNpbmNsdWRl ICJtdGtfZHJtX2dlbS5oIgorCitzdGF0aWMgc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2Ry bV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJdW5zaWduZWQgbG9uZyBz aXplKQoreworCXN0cnVjdCBtdGtfZHJtX2dlbV9vYmogKm10a19nZW1fb2JqOworCWludCByZXQ7 CisKKwlzaXplID0gcm91bmRfdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW10a19nZW1fb2JqID0g a3phbGxvYyhzaXplb2YoKm10a19nZW1fb2JqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtdGtfZ2Vt X29iaikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXQgPSBkcm1fZ2VtX29iamVj dF9pbml0KGRldiwgJm10a19nZW1fb2JqLT5iYXNlLCBzaXplKTsKKwlpZiAocmV0IDwgMCkgewor CQlEUk1fRVJST1IoImZhaWxlZCB0byBpbml0aWFsaXplIGdlbSBvYmplY3RcbiIpOworCQlrZnJl ZShtdGtfZ2VtX29iaik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG10 a19nZW1fb2JqOworfQorCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICptdGtfZHJtX2dlbV9jcmVh dGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLCBi b29sIGFsbG9jX2ttYXApCit7CisJc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2dlbTsKKwlz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJbXRrX2dlbSA9IG10a19k cm1fZ2VtX2luaXQoZGV2LCBzaXplKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4g RVJSX0NBU1QobXRrX2dlbSk7CisKKwlvYmogPSAmbXRrX2dlbS0+YmFzZTsKKworCWluaXRfZG1h X2F0dHJzKCZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWRtYV9zZXRfYXR0cihETUFfQVRUUl9XUklU RV9DT01CSU5FLCAmbXRrX2dlbS0+ZG1hX2F0dHJzKTsKKworCWlmICghYWxsb2Nfa21hcCkKKwkJ ZG1hX3NldF9hdHRyKERNQV9BVFRSX05PX0tFUk5FTF9NQVBQSU5HLCAmbXRrX2dlbS0+ZG1hX2F0 dHJzKTsKKworCW10a19nZW0tPmNvb2tpZSA9IGRtYV9hbGxvY19hdHRycyhkZXYtPmRldiwgb2Jq LT5zaXplLAorCQkJCShkbWFfYWRkcl90ICopJm10a19nZW0tPmRtYV9hZGRyLCBHRlBfS0VSTkVM LAorCQkJCSZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCWlmICghbXRrX2dlbS0+Y29va2llKSB7CisJ CURSTV9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlICV6eCBieXRlIGRtYSBidWZmZXIiLCBvYmot PnNpemUpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9nZW1fZnJlZTsKKwl9CisKKwlp ZiAoYWxsb2Nfa21hcCkKKwkJbXRrX2dlbS0+a3ZhZGRyID0gbXRrX2dlbS0+Y29va2llOworCisJ RFJNX0lORk8oImNvb2tpZSA9ICVwIGRtYV9hZGRyID0gJWxseFxuIiwKKwkJCW10a19nZW0tPmNv b2tpZSwgbXRrX2dlbS0+ZG1hX2FkZHIpOworCisJcmV0dXJuIG10a19nZW07CisKK2Vycl9nZW1f ZnJlZToKKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisJa2ZyZWUobXRrX2dlbSk7CisJ cmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKwordm9pZCBtdGtfZHJtX2dlbV9mcmVlX29iamVjdChz dHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICpt dGtfZ2VtID0gdG9fbXRrX2dlbV9vYmoob2JqKTsKKworCWRtYV9mcmVlX2F0dHJzKG9iai0+ZGV2 LT5kZXYsIG9iai0+c2l6ZSwgbXRrX2dlbS0+Y29va2llLAorCQkgICAgICAgbXRrX2dlbS0+ZG1h X2FkZHIsICZtdGtfZ2VtLT5kbWFfYXR0cnMpOworCisJLyogcmVsZWFzZSBmaWxlIHBvaW50ZXIg dG8gZ2VtIG9iamVjdC4gKi8KKwlkcm1fZ2VtX29iamVjdF9yZWxlYXNlKG9iaik7CisKKwlrZnJl ZShtdGtfZ2VtKTsKK30KKworaW50IG10a19kcm1fZ2VtX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1f ZmlsZSAqZmlsZV9wcml2LCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBk cm1fbW9kZV9jcmVhdGVfZHVtYiAqYXJncykKK3sKKwlzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqICpt dGtfZ2VtOworCWludCByZXQ7CisKKwlhcmdzLT5waXRjaCA9IGFyZ3MtPndpZHRoICogRElWX1JP VU5EX1VQKGFyZ3MtPmJwcCwgOCk7CisJYXJncy0+c2l6ZSA9IGFyZ3MtPnBpdGNoICogYXJncy0+ aGVpZ2h0OworCisJbXRrX2dlbSA9IG10a19kcm1fZ2VtX2NyZWF0ZShkZXYsIGFyZ3MtPnNpemUs IGZhbHNlKTsKKwlpZiAoSVNfRVJSKG10a19nZW0pKQorCQlyZXR1cm4gUFRSX0VSUihtdGtfZ2Vt KTsKKworCS8qCisJICogYWxsb2NhdGUgYSBpZCBvZiBpZHIgdGFibGUgd2hlcmUgdGhlIG9iaiBp cyByZWdpc3RlcmVkCisJICogYW5kIGhhbmRsZSBoYXMgdGhlIGlkIHdoYXQgdXNlciBjYW4gc2Vl LgorCSAqLworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3ByaXYsICZtdGtfZ2Vt LT5iYXNlLCAmYXJncy0+aGFuZGxlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9oYW5kbGVfY3Jl YXRlOworCisJLyogZHJvcCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBp dCBub3cuICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoJm10a19nZW0t PmJhc2UpOworCisJcmV0dXJuIDA7CisKK2Vycl9oYW5kbGVfY3JlYXRlOgorCW10a19kcm1fZ2Vt X2ZyZWVfb2JqZWN0KCZtdGtfZ2VtLT5iYXNlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXRr X2RybV9nZW1fZHVtYl9tYXBfb2Zmc2V0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJ CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhhbmRsZSwKKwkJCQl1aW50NjRfdCAq b2Zmc2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCByZXQ7CisKKwlv YmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGhhbmRsZSk7CisJaWYg KCFvYmopIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gbG9va3VwIGdlbSBvYmplY3QuXG4iKTsK KwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gZHJtX2dlbV9jcmVhdGVfbW1hcF9vZmZz ZXQob2JqKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCSpvZmZzZXQgPSBkcm1fdm1hX25v ZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1hX25vZGUpOworCURSTV9ERUJVR19LTVMoIm9mZnNldCA9 IDB4JWxseFxuIiwgKm9mZnNldCk7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5j ZV91bmxvY2tlZChvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2RybV9n ZW1fb2JqZWN0X21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEpCisKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtdGtfZHJtX2dl bV9vYmogKm10a19nZW0gPSB0b19tdGtfZ2VtX29iaihvYmopOworCXN0cnVjdCBkcm1fZGV2aWNl ICpkcm0gPSBvYmotPmRldjsKKworCS8qCisJICogZG1hX2FsbG9jX2F0dHJzKCkgYWxsb2NhdGVk IGEgc3RydWN0IHBhZ2UgdGFibGUgZm9yIHJrX29iaiwgc28gY2xlYXIKKwkgKiBWTV9QRk5NQVAg ZmxhZyB0aGF0IHdhcyBzZXQgYnkgZHJtX2dlbV9tbWFwX29iaigpL2RybV9nZW1fbW1hcCgpLgor CSAqLworCXZtYS0+dm1fZmxhZ3MgJj0gflZNX1BGTk1BUDsKKwl2bWEtPnZtX3Bnb2ZmID0gMDsK KworCXJldCA9IGRtYV9tbWFwX2F0dHJzKGRybS0+ZGV2LCB2bWEsIG10a19nZW0tPmNvb2tpZSwg bXRrX2dlbS0+ZG1hX2FkZHIsCisJCQkgICAgIG9iai0+c2l6ZSwgJm10a19nZW0tPmRtYV9hdHRy cyk7CisJaWYgKHJldCkKKwkJZHJtX2dlbV92bV9jbG9zZSh2bWEpOworCisJcmV0dXJuIHJldDsK K30KKworaW50IG10a19kcm1fZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCWludCBy ZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJb2JqID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gbXRrX2Ry bV9nZW1fb2JqZWN0X21tYXAob2JqLCB2bWEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2RybV9nZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQ5NWM5Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19kcm1fZ2VtLmgK QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBNZWRpYVRlayBJbmMu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisK KyNpZm5kZWYgX01US19EUk1fR0VNX0hfCisjZGVmaW5lIF9NVEtfRFJNX0dFTV9IXworCisjaW5j bHVkZSA8ZHJtL2RybV9nZW0uaD4KKworLyoKKyAqIG10ayBkcm0gYnVmZmVyIHN0cnVjdHVyZS4K KyAqCisgKiBAYmFzZTogYSBnZW0gb2JqZWN0LgorICoJLSBhIG5ldyBoYW5kbGUgdG8gdGhpcyBn ZW0gb2JqZWN0IHdvdWxkIGJlIGNyZWF0ZWQKKyAqCWJ5IGRybV9nZW1faGFuZGxlX2NyZWF0ZSgp LgorICogQGNvb2tpZTogdGhlIHJldHVybiB2YWx1ZSBvZiBkbWFfYWxsb2NfYXR0cnMoKSwga2Vl cCBpdCBmb3IgZG1hX2ZyZWVfYXR0cnMoKQorICogQGt2YWRkcjoga2VybmVsIHZpcnR1YWwgYWRk cmVzcyBvZiBnZW0gYnVmZmVyLgorICogQGRtYV9hZGRyOiBkbWEgYWRkcmVzcyBvZiBnZW0gYnVm ZmVyLgorICogQGRtYV9hdHRyczogZG1hIGF0dHJpYnV0ZXMgb2YgZ2VtIGJ1ZmZlci4KKyAqCisg KiBQLlMuIHRoaXMgb2JqZWN0IHdvdWxkIGJlIHRyYW5zZmVycmVkIHRvIHVzZXIgYXMga21zX2Jv LmhhbmRsZSBzbworICoJdXNlciBjYW4gYWNjZXNzIHRoZSBidWZmZXIgdGhyb3VnaCBrbXNfYm8u aGFuZGxlLgorICovCitzdHJ1Y3QgbXRrX2RybV9nZW1fb2JqIHsKKwlzdHJ1Y3QgZHJtX2dlbV9v YmplY3QJYmFzZTsKKwl2b2lkCQkJKmNvb2tpZTsKKwl2b2lkCQkJKmt2YWRkcjsKKwlkbWFfYWRk cl90CQlkbWFfYWRkcjsKKwlzdHJ1Y3QgZG1hX2F0dHJzCWRtYV9hdHRyczsKK307CisKKyNkZWZp bmUgdG9fbXRrX2dlbV9vYmooeCkJY29udGFpbmVyX29mKHgsIHN0cnVjdCBtdGtfZHJtX2dlbV9v YmosIGJhc2UpCisKK3ZvaWQgbXRrX2RybV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpnZW0pOworc3RydWN0IG10a19kcm1fZ2VtX29iaiAqbXRrX2RybV9nZW1fY3JlYXRl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYm9vbCBhbGxv Y19rbWFwKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdiwKKwkJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iICphcmdzKTsKK2ludCBtdGtfZHJtX2dlbV9kdW1iX21hcF9vZmZzZXQoc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYsCisJCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IGhh bmRsZSwgdWludDY0X3QgKm9mZnNldCk7CitpbnQgbXRrX2RybV9nZW1fbW1hcChzdHJ1Y3QgZmls ZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IG10a19kcm1fZ2VtX21t YXBfYnVmKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5l LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhZmZlZQotLS0gL2Rldi9u dWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJtX3BsYW5lLmMKQEAgLTAs MCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgTWVkaWFUZWsgSW5jLgorICog QXV0aG9yOiBDSyBIdSA8Y2suaHVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cisg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZl cnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hl bHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+CisjaW5jbHVkZSA8bGlu dXgvZG1hLWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2VydmF0aW9uLmg+CisKKyNpbmNsdWRl ICJtdGtfZHJtX2NydGMuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCisjaW5jbHVk ZSAibXRrX2RybV9kcnYuaCIKKyNpbmNsdWRlICJtdGtfZHJtX2ZiLmgiCisjaW5jbHVkZSAibXRr X2RybV9nZW0uaCIKKyNpbmNsdWRlICJtdGtfZHJtX3BsYW5lLmgiCisKK3N0YXRpYyBjb25zdCB1 aW50MzJfdCBmb3JtYXRzW10gPSB7CisJRFJNX0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFU X0FSR0I4ODg4LAorCURSTV9GT1JNQVRfUkdCNTY1LAorfTsKKworc3RhdGljIHZvaWQgbXRrX3Bs YW5lX2NvbmZpZyhzdHJ1Y3QgbXRrX2RybV9wbGFuZSAqbXRrX3BsYW5lLCBib29sIGVuYWJsZSwK KwkJCSAgICAgZG1hX2FkZHJfdCBhZGRyLCBzdHJ1Y3QgZHJtX3JlY3QgKmRlc3QpCit7CisJc3Ry dWN0IGRybV9wbGFuZSAqcGxhbmUgPSAmbXRrX3BsYW5lLT5iYXNlOworCXN0cnVjdCBtdGtfcGxh bmVfc3RhdGUgKnN0YXRlID0gdG9fbXRrX3BsYW5lX3N0YXRlKHBsYW5lLT5zdGF0ZSk7CisJdW5z aWduZWQgaW50IHBpdGNoLCBmb3JtYXQ7CisJaW50IHgsIHk7CisKKwlpZiAoV0FSTl9PTighcGxh bmUtPnN0YXRlIHx8IChlbmFibGUgJiYgIXBsYW5lLT5zdGF0ZS0+ZmIpKSkKKwkJcmV0dXJuOwor CisJaWYgKHBsYW5lLT5zdGF0ZS0+ZmIpIHsKKwkJcGl0Y2ggPSBwbGFuZS0+c3RhdGUtPmZiLT5w aXRjaGVzWzBdOworCQlmb3JtYXQgPSBwbGFuZS0+c3RhdGUtPmZiLT5waXhlbF9mb3JtYXQ7CisJ fSBlbHNlIHsKKwkJcGl0Y2ggPSAwOworCQlmb3JtYXQgPSBEUk1fRk9STUFUX1JHQkE4ODg4Owor CX0KKworCXggPSBwbGFuZS0+c3RhdGUtPmNydGNfeDsKKwl5ID0gcGxhbmUtPnN0YXRlLT5jcnRj X3k7CisKKwlpZiAoeCA8IDApIHsKKwkJYWRkciAtPSB4ICogNDsKKwkJeCA9IDA7CisJfQorCisJ aWYgKHkgPCAwKSB7CisJCWFkZHIgLT0geSAqIHBpdGNoOworCQl5ID0gMDsKKwl9CisKKwlzdGF0 ZS0+cGVuZGluZ19lbmFibGUgPSBlbmFibGU7CisJc3RhdGUtPnBlbmRpbmdfcGl0Y2ggPSBwaXRj aDsKKwlzdGF0ZS0+cGVuZGluZ19mb3JtYXQgPSBmb3JtYXQ7CisJc3RhdGUtPnBlbmRpbmdfYWRk ciA9IGFkZHI7CisJc3RhdGUtPnBlbmRpbmdfeCA9IHg7CisJc3RhdGUtPnBlbmRpbmdfeSA9IHk7 CisJc3RhdGUtPnBlbmRpbmdfd2lkdGggPSBkZXN0LT54MiAtIGRlc3QtPngxOworCXN0YXRlLT5w ZW5kaW5nX2hlaWdodCA9IGRlc3QtPnkyIC0gZGVzdC0+eTE7CisJc3RhdGUtPnBlbmRpbmdfZGly dHkgPSB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqbXRrX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKK3sKKwlzdHJ1Y3QgbXRr X3BsYW5lX3N0YXRlICpvbGRfc3RhdGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRl KTsKKwlzdHJ1Y3QgbXRrX3BsYW5lX3N0YXRlICpzdGF0ZTsKKworCXN0YXRlID0ga3phbGxvYyhz aXplb2YoKnN0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0ZSkKKwkJcmV0dXJuIE5VTEw7 CisKKwlfX2RybV9hdG9taWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShwbGFuZSwgJnN0 YXRlLT5iYXNlKTsKKworCVdBUk5fT04oc3RhdGUtPmJhc2UucGxhbmUgIT0gcGxhbmUpOworCisJ c3RhdGUtPnBlbmRpbmdfY29uZmlnID0gb2xkX3N0YXRlLT5wZW5kaW5nX2NvbmZpZzsKKwlzdGF0 ZS0+cGVuZGluZ19lbmFibGUgPSBvbGRfc3RhdGUtPnBlbmRpbmdfZW5hYmxlOworCXN0YXRlLT5w ZW5kaW5nX2FkZHIgPSBvbGRfc3RhdGUtPnBlbmRpbmdfYWRkcjsKKwlzdGF0ZS0+cGVuZGluZ19w aXRjaCA9IG9sZF9zdGF0ZS0+cGVuZGluZ19waXRjaDsKKwlzdGF0ZS0+cGVuZGluZ19mb3JtYXQg PSBvbGRfc3RhdGUtPnBlbmRpbmdfZm9ybWF0OworCXN0YXRlLT5wZW5kaW5nX3ggPSBvbGRfc3Rh dGUtPnBlbmRpbmdfeDsKKwlzdGF0ZS0+cGVuZGluZ195ID0gb2xkX3N0YXRlLT5wZW5kaW5nX3k7 CisJc3RhdGUtPnBlbmRpbmdfd2lkdGggPSBvbGRfc3RhdGUtPnBlbmRpbmdfd2lkdGg7CisJc3Rh dGUtPnBlbmRpbmdfaGVpZ2h0ID0gb2xkX3N0YXRlLT5wZW5kaW5nX2hlaWdodDsKKwlzdGF0ZS0+ cGVuZGluZ19kaXJ0eSA9IG9sZF9zdGF0ZS0+cGVuZGluZ19kaXJ0eTsKKworCXJldHVybiAmc3Rh dGUtPmJhc2U7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG10a19w bGFuZV9mdW5jcyA9IHsKKwkudXBkYXRlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfdXBkYXRl X3BsYW5lLAorCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFu ZSwKKwkuZGVzdHJveSA9IGRybV9wbGFuZV9jbGVhbnVwLAorCS5yZXNldCA9IGRybV9hdG9taWNf aGVscGVyX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gbXRrX3BsYW5l X2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9wbGFuZV9kZXN0cm95X3N0YXRlLAorfTsKKworc3RhdGljIGludCBtdGtfcGxhbmVfYXRv bWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBzdGF0ZS0+ ZmI7CisJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOworCWJvb2wgdmlzaWJsZTsK KwlpbnQgcmV0OworCXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+Y3J0 Y194LAorCQkueTEgPSBzdGF0ZS0+Y3J0Y195LAorCQkueDIgPSBzdGF0ZS0+Y3J0Y194ICsgc3Rh dGUtPmNydGNfdywKKwkJLnkyID0gc3RhdGUtPmNydGNfeSArIHN0YXRlLT5jcnRjX2gsCisJfTsK KwlzdHJ1Y3QgZHJtX3JlY3Qgc3JjID0geworCQkvKiAxNi4xNiBmaXhlZCBwb2ludCAqLworCQku eDEgPSBzdGF0ZS0+c3JjX3gsCisJCS55MSA9IHN0YXRlLT5zcmNfeSwKKwkJLngyID0gc3RhdGUt PnNyY194ICsgc3RhdGUtPnNyY193LAorCQkueTIgPSBzdGF0ZS0+c3JjX3kgKyBzdGF0ZS0+c3Jj X2gsCisJfTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlmICghZmIpCisJ CXJldHVybiAwOworCisJaWYgKCFtdGtfZmJfZ2V0X2dlbV9vYmooZmIsIDApKSB7CisJCURSTV9E RUJVR19LTVMoImJ1ZmZlciBpcyBudWxsXG4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJ aWYgKCFzdGF0ZS0+Y3J0YykKKwkJcmV0dXJuIDA7CisKKwljcnRjX3N0YXRlID0gZHJtX2F0b21p Y19nZXRfY3J0Y19zdGF0ZShzdGF0ZS0+c3RhdGUsIHN0YXRlLT5jcnRjKTsKKwlpZiAoSVNfRVJS KGNydGNfc3RhdGUpKQorCQlyZXR1cm4gUFRSX0VSUihjcnRjX3N0YXRlKTsKKworCWNsaXAueDIg PSBjcnRjX3N0YXRlLT5tb2RlLmhkaXNwbGF5OworCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5tb2Rl LnZkaXNwbGF5OworCisJcmV0ID0gZHJtX3BsYW5lX2hlbHBlcl9jaGVja191cGRhdGUocGxhbmUs IHN0YXRlLT5jcnRjLCBmYiwKKwkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKKwkJCQkJICAg IERSTV9QTEFORV9IRUxQRVJfTk9fU0NBTElORywKKwkJCQkJICAgIERSTV9QTEFORV9IRUxQRVJf Tk9fU0NBTElORywKKwkJCQkJICAgIHRydWUsIHRydWUsICZ2aXNpYmxlKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG10a19wbGFuZV9h dG9taWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCit7CisJc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqc3Rh dGUgPSB0b19tdGtfcGxhbmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKKwlzdHJ1Y3QgZHJtX2NydGMg KmNydGMgPSBzdGF0ZS0+YmFzZS5jcnRjOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwor CXN0cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOwor CXN0cnVjdCBkcm1fcmVjdCBkZXN0ID0geworCQkueDEgPSBzdGF0ZS0+YmFzZS5jcnRjX3gsCisJ CS55MSA9IHN0YXRlLT5iYXNlLmNydGNfeSwKKwkJLngyID0gc3RhdGUtPmJhc2UuY3J0Y194ICsg c3RhdGUtPmJhc2UuY3J0Y193LAorCQkueTIgPSBzdGF0ZS0+YmFzZS5jcnRjX3kgKyBzdGF0ZS0+ YmFzZS5jcnRjX2gsCisJfTsKKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcCA9IHsgMCwgfTsKKworCWlm ICghY3J0YykKKwkJcmV0dXJuOworCisJY2xpcC54MiA9IHN0YXRlLT5iYXNlLmNydGMtPnN0YXRl LT5tb2RlLmhkaXNwbGF5OworCWNsaXAueTIgPSBzdGF0ZS0+YmFzZS5jcnRjLT5zdGF0ZS0+bW9k ZS52ZGlzcGxheTsKKwlkcm1fcmVjdF9pbnRlcnNlY3QoJmRlc3QsICZjbGlwKTsKKworCWdlbSA9 IG10a19mYl9nZXRfZ2VtX29iaihzdGF0ZS0+YmFzZS5mYiwgMCk7CisJbXRrX3BsYW5lLT5mbGlw X29iaiA9IHRvX210a19nZW1fb2JqKGdlbSk7CisJbXRrX3BsYW5lLT5jcnRjID0gY3J0YzsKKwor CWlmIChtdGtfcGxhbmUtPmZsaXBfb2JqKQorCQltdGtfcGxhbmVfY29uZmlnKG10a19wbGFuZSwg dHJ1ZSwgbXRrX3BsYW5lLT5mbGlwX29iai0+ZG1hX2FkZHIsCisJCQkJICZkZXN0KTsKK30KKwor c3RhdGljIHZvaWQgbXRrX3BsYW5lX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBs YW5lLAorCQkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQoreworCXN0 cnVjdCBtdGtfZHJtX3BsYW5lICptdGtfcGxhbmUgPSB0b19tdGtfcGxhbmUocGxhbmUpOworCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YyA9IG9sZF9zdGF0ZS0+Y3J0YzsKKwlzdHJ1Y3QgZHJtX3JlY3Qg ZGVzdCA9IHsgMCwgfTsKKworCWlmICghY3J0YykKKwkJcmV0dXJuOworCisJbXRrX3BsYW5lX2Nv bmZpZyhtdGtfcGxhbmUsIGZhbHNlLCAwLCAmZGVzdCk7CisKKwltdGtfZHJtX2NydGNfY29tbWl0 KGNydGMpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mg bXRrX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2NoZWNrID0gbXRrX3BsYW5lX2F0 b21pY19jaGVjaywKKwkuYXRvbWljX3VwZGF0ZSA9IG10a19wbGFuZV9hdG9taWNfdXBkYXRlLAor CS5hdG9taWNfZGlzYWJsZSA9IG10a19wbGFuZV9hdG9taWNfZGlzYWJsZSwKK307CisKK2ludCBt dGtfcGxhbmVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgbXRrX2RybV9wbGFu ZSAqbXRrX3BsYW5lLAorCQkgICB1bnNpZ25lZCBsb25nIHBvc3NpYmxlX2NydGNzLCBlbnVtIGRy bV9wbGFuZV90eXBlIHR5cGUsCisJCSAgIHVuc2lnbmVkIGludCB6cG9zKQoreworCWludCBlcnI7 CisKKwllcnIgPSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZGV2LCAmbXRrX3BsYW5lLT5iYXNl LCBwb3NzaWJsZV9jcnRjcywKKwkJCSZtdGtfcGxhbmVfZnVuY3MsIGZvcm1hdHMsIEFSUkFZX1NJ WkUoZm9ybWF0cyksIHR5cGUpOworCisJaWYgKGVycikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0 byBpbml0aWFsaXplIHBsYW5lXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkcm1fcGxhbmVf aGVscGVyX2FkZCgmbXRrX3BsYW5lLT5iYXNlLCAmbXRrX3BsYW5lX2hlbHBlcl9mdW5jcyk7CisJ bXRrX3BsYW5lLT5pZHggPSB6cG9zOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL21l ZGlhdGVrL210a19kcm1fcGxhbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5hNzAyYmRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19kcm1fcGxhbmUuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1 IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogQ0sgSHUgPGNrLmh1QG1lZGlhdGVrLmNvbT4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lm bmRlZiBfTVRLX0RSTV9QTEFORV9IXworI2RlZmluZSBfTVRLX0RSTV9QTEFORV9IXworCisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+CisKK3N0cnVjdCBtdGtfZHJtX2dlbV9vYmo7CisKK3N0cnVj dCBtdGtfZHJtX3BsYW5lIHsKKwlzdHJ1Y3QgZHJtX3BsYW5lCQliYXNlOworCXN0cnVjdCBkcm1f Y3J0YwkJCSpjcnRjOworCXVuc2lnbmVkIGludAkJCWlkeDsKKworCXN0cnVjdCBtdGtfZHJtX2dl bV9vYmoJCSpmbGlwX29iajsKK307CisKK3N0cnVjdCBtdGtfcGxhbmVfc3RhdGUgeworCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUJCWJhc2U7CisKKwlib29sCQkJCXBlbmRpbmdfY29uZmlnOworCWJv b2wJCQkJcGVuZGluZ19lbmFibGU7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19hZGRyOworCXVu c2lnbmVkIGludAkJCXBlbmRpbmdfcGl0Y2g7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ19mb3Jt YXQ7CisJdW5zaWduZWQgaW50CQkJcGVuZGluZ194OworCXVuc2lnbmVkIGludAkJCXBlbmRpbmdf eTsKKwl1bnNpZ25lZCBpbnQJCQlwZW5kaW5nX3dpZHRoOworCXVuc2lnbmVkIGludAkJCXBlbmRp bmdfaGVpZ2h0OworCWJvb2wJCQkJcGVuZGluZ19kaXJ0eTsKK307CisKK3N0YXRpYyBpbmxpbmUg c3RydWN0IG10a19kcm1fcGxhbmUgKnRvX210a19wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgbXRrX2RybV9wbGFuZSwg YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19wbGFuZV9zdGF0ZSAqCit0b19t dGtfcGxhbmVfc3RhdGUoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJu IGNvbnRhaW5lcl9vZihzdGF0ZSwgc3RydWN0IG10a19wbGFuZV9zdGF0ZSwgYmFzZSk7Cit9CisK K3ZvaWQgbXRrX3BsYW5lX2ZpbmlzaF9wYWdlX2ZsaXAoc3RydWN0IG10a19kcm1fcGxhbmUgKm10 a19wbGFuZSk7CitpbnQgbXRrX3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IG10a19kcm1fcGxhbmUgKm10a19wbGFuZSwKKwkJICAgdW5zaWduZWQgbG9uZyBwb3NzaWJs ZV9jcnRjcywgZW51bSBkcm1fcGxhbmVfdHlwZSB0eXBlLAorCQkgICB1bnNpZ25lZCBpbnQgenBv cyk7CisKKyNlbmRpZgotLSAKMi42LjIKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vZHJpLWRldmVsCg==