From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alan Cox Subject: [PATCH 09/12] gma500: Add Poulsbo support Date: Thu, 03 Nov 2011 18:22:15 +0000 Message-ID: <20111103182215.29503.84681.stgit@bob.linux.org.uk> References: <20111103182046.29503.60288.stgit@bob.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from lxorguk.ukuu.org.uk (lxorguk.ukuu.org.uk [81.2.110.251]) by gabe.freedesktop.org (Postfix) with ESMTP id 4A5169EB74 for ; Thu, 3 Nov 2011 11:11:21 -0700 (PDT) In-Reply-To: <20111103182046.29503.60288.stgit@bob.linux.org.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: airlied@linux.ie, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogQWxhbiBDb3ggPGFsYW5AbGludXguaW50ZWwuY29tPgoKVGhpcyBwcm92aWRlcyB0aGUg c3BlY2lmaWMgY29kZSBmb3IgUG91bHNibywgc29tZSBvZiB3aGljaCBpcyBhbHNvIHVzZWQgZm9y CnRoZSBsYXRlciBjaGlwc2V0cy4gV2Ugc3VwcG9ydCB0aGUgR1RULCB0aGUgMkQgZW5naW5lIChm b3IgY29uc29sZSksIGFuZAp0aGUgZGlzcGxheSBzZXR1cC9tYW5hZ2VtZW50LiBXZSBkbyBub3Qg c3VwcG9ydCAzRCBvciB0aGUgdmlkZW8gb3ZlcmxheXMuCgpJbiB0aGVvcnkgZW5vdWdoIHB1Ymxp YyBpbmZvIGlzIGF2YWlsYWJsZSB0byBkbyB0aGUgdmlkZW8gb3ZlcmxheSB3b3JrCmJ1dCB0aGF0 IHJlcHJlc2VudHMgYSBsYXJnZSB0YXNrLgoKRnJhbWVidWZmZXIgWCB3aWxsIHJ1biBuaWNlbHkg d2l0aCB0aGlzIGJ1dCBkbyAqTk9UKiB1c2UgdGhlIFZFU0EgWApzZXJ2ZXIgYXQgdGhlIHNhbWUg dGltZSBhcyBLTVMuIFdpdGggYSBEZWxsIG1pbmkgMTAgdGhpbmdzIGxpa2UgWGZjZTQgYXJlCm5p Y2UgYW5kIHVzYWJsZSBldmVuIHdoZW4gY29tcG9zaXRpbmcgYXMgdGhlIENQVSBoYXMgYSBnb29k IHBhdGggdG8gdGhlCm1lbW9yeS4KClNpZ25lZC1vZmYtYnk6IEFsYW4gQ294IDxhbGFuQGxpbnV4 LmludGVsLmNvbT4KLS0tCgogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZGV2aWNlLmMgICAg ICAgICAgfCAgMzUzICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZ2Z4Lm1vZC5j ICAgICAgICAgfCAgIDUxICsKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2Rpc3Bs YXkuYyAgIHwgMTQzMSArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9wc2JfaW50ZWxfZGlzcGxheS5oICAgfCAgIDI4ICsKIGRyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2ludGVsX2Rydi5oICAgICAgIHwgIDIyOCArKysrCiBkcml2ZXJzL2dwdS9kcm0v Z21hNTAwL3BzYl9pbnRlbF9sdmRzLmMgICAgICB8ICA4NDkgKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9tb2Rlcy5jICAgICB8ICAgNzcgKwogZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfcmVnLmggICAgICAgfCAxMjM1ICsrKysrKysrKysr KysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYyAgICAg IHwgMTI5MyArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9w c2JfaW50ZWxfc2R2b19yZWdzLmggfCAgMzM4ICsrKysrKwogZHJpdmVycy9ncHUvZHJtL2dtYTUw MC9wc2JfbGlkLmMgICAgICAgICAgICAgfCAgIDkwICsrCiAxMSBmaWxlcyBjaGFuZ2VkLCA1OTcz IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9wc2JfZGV2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vZ21hNTAwL3BzYl9nZngubW9kLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kaXNwbGF5LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kaXNwbGF5LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kcnYuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2x2ZHMuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX21vZGVzLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9yZWcuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX3Nkdm8uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX3Nkdm9f cmVncy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfbGlk LmMKCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZGV2aWNlLmMgYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi40NjU5MTMyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2dtYTUwMC9wc2JfZGV2aWNlLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor ICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu LAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9iYWNrbGln aHQuaD4KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm0uaD4KKyNpbmNs dWRlICJwc2JfZHJtLmgiCisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1ZGUgInBzYl9yZWcu aCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAiaW50ZWxfYmlvcy5oIgor CisKK3N0YXRpYyBpbnQgcHNiX291dHB1dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7 CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CXBzYl9pbnRlbF9sdmRzX2luaXQoZGV2LCAmZGV2X3ByaXYtPm1vZGVfZGV2KTsKKwlwc2JfaW50 ZWxfc2R2b19pbml0KGRldiwgU0RWT0IpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklH X0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKworLyoKKyAqCVBvdWxzYm8gQmFja2xpZ2h0IEludGVy ZmFjZXMKKyAqLworCisjZGVmaW5lIEJMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUiAxMDAJLyogMTAw MDAwMDAgKi8KKyNkZWZpbmUgQkxDX1BXTV9GUkVRX0NBTENfQ09OU1RBTlQgMzIKKyNkZWZpbmUg TUh6IDEwMDAwMDAKKworI2RlZmluZSBQU0JfQkxDX1BXTV9QUkVDSVNJT05fRkFDVE9SICAgIDEw CisjZGVmaW5lIFBTQl9CTENfTUFYX1BXTV9SRUdfRlJFUSAgICAgICAgMHhGRkZFCisjZGVmaW5l IFBTQl9CTENfTUlOX1BXTV9SRUdfRlJFUSAgICAgICAgMHgyCisKKyNkZWZpbmUgUFNCX0JBQ0tM SUdIVF9QV01fUE9MQVJJVFlfQklUX0NMRUFSICgweEZGRkUpCisjZGVmaW5lIFBTQl9CQUNLTElH SFRfUFdNX0NUTF9TSElGVAkoMTYpCisKK3N0YXRpYyBpbnQgcHNiX2JyaWdodG5lc3M7CitzdGF0 aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKnBzYl9iYWNrbGlnaHRfZGV2aWNlOworCitzdGF0 aWMgaW50IHBzYl9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCit7 CisJLyogcmV0dXJuIGxvY2FsbHkgY2FjaGVkIHZhciBpbnN0ZWFkIG9mIEhXIHJlYWQgKGR1ZSB0 byBEUFNUIGV0Yy4pICovCisJLyogRklYTUU6IGlkZWFsbHkgcmV0dXJuIGFjdHVhbCB2YWx1ZSBp biBjYXNlIGZpcm13YXJlIGZpZGRsZWQgd2l0aAorCSAgIGl0ICovCisJcmV0dXJuIHBzYl9icmln aHRuZXNzOworfQorCisKK3N0YXRpYyBpbnQgcHNiX2JhY2tsaWdodF9zZXR1cChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGNvcmVfY2xvY2s7CisJLyogdTMyIGJsX21h eF9mcmVxOyAqLworCS8qIHVuc2lnbmVkIGxvbmcgdmFsdWU7ICovCisJdTE2IGJsX21heF9mcmVx OworCXVpbnQzMl90IHZhbHVlOworCXVpbnQzMl90IGJsY19wd21fcHJlY2lzaW9uX2ZhY3RvcjsK KworCS8qIGdldCBibF9tYXhfZnJlcSBhbmQgcG9sIGZyb20gZGV2X3ByaXYqLworCWlmICghZGV2 X3ByaXYtPmx2ZHNfYmwpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkhhcyBubyB2YWxpZCBMVkRT IGJhY2tsaWdodCBpbmZvXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCWJsX21heF9mcmVx ID0gZGV2X3ByaXYtPmx2ZHNfYmwtPmZyZXE7CisJYmxjX3B3bV9wcmVjaXNpb25fZmFjdG9yID0g UFNCX0JMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUjsKKworCWNvcmVfY2xvY2sgPSBkZXZfcHJpdi0+ Y29yZV9mcmVxOworCisJdmFsdWUgPSAoY29yZV9jbG9jayAqIE1IeikgLyBCTENfUFdNX0ZSRVFf Q0FMQ19DT05TVEFOVDsKKwl2YWx1ZSAqPSBibGNfcHdtX3ByZWNpc2lvbl9mYWN0b3I7CisJdmFs dWUgLz0gYmxfbWF4X2ZyZXE7CisJdmFsdWUgLz0gYmxjX3B3bV9wcmVjaXNpb25fZmFjdG9yOwor CisJaWYgKHZhbHVlID4gKHVuc2lnbmVkIGxvbmcgbG9uZylQU0JfQkxDX01BWF9QV01fUkVHX0ZS RVEgfHwKKwkJIHZhbHVlIDwgKHVuc2lnbmVkIGxvbmcgbG9uZylQU0JfQkxDX01JTl9QV01fUkVH X0ZSRVEpCisJCQkJcmV0dXJuIC1FUkFOR0U7CisJZWxzZSB7CisJCXZhbHVlICY9IFBTQl9CQUNL TElHSFRfUFdNX1BPTEFSSVRZX0JJVF9DTEVBUjsKKwkJUkVHX1dSSVRFKEJMQ19QV01fQ1RMLAor CQkJKHZhbHVlIDw8IFBTQl9CQUNLTElHSFRfUFdNX0NUTF9TSElGVCkgfCAodmFsdWUpKTsKKwl9 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHNiX3NldF9icmlnaHRuZXNzKHN0cnVjdCBi YWNrbGlnaHRfZGV2aWNlICpiZCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmxfZ2V0 X2RhdGEocHNiX2JhY2tsaWdodF9kZXZpY2UpOworCWludCBsZXZlbCA9IGJkLT5wcm9wcy5icmln aHRuZXNzOworCisJLyogUGVyY2VudGFnZSAxLTEwMCUgYmVpbmcgdmFsaWQgKi8KKwlpZiAobGV2 ZWwgPCAxKQorCQlsZXZlbCA9IDE7CisKKwlwc2JfaW50ZWxfbHZkc19zZXRfYnJpZ2h0bmVzcyhk ZXYsIGxldmVsKTsKKwlwc2JfYnJpZ2h0bmVzcyA9IGxldmVsOworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgcHNiX29wcyA9IHsKKwkuZ2V0X2JyaWdo dG5lc3MgPSBwc2JfZ2V0X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgID0gcHNiX3NldF9i cmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCBwc2JfYmFja2xpZ2h0X2luaXQoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKKwlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMg cHJvcHM7CisKKwltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9w ZXJ0aWVzKSk7CisJcHJvcHMubWF4X2JyaWdodG5lc3MgPSAxMDA7CisJcHJvcHMudHlwZSA9IEJB Q0tMSUdIVF9QTEFURk9STTsKKworCXBzYl9iYWNrbGlnaHRfZGV2aWNlID0gYmFja2xpZ2h0X2Rl dmljZV9yZWdpc3RlcigicHNiLWJsIiwKKwkJCQkJTlVMTCwgKHZvaWQgKilkZXYsICZwc2Jfb3Bz LCAmcHJvcHMpOworCWlmIChJU19FUlIocHNiX2JhY2tsaWdodF9kZXZpY2UpKQorCQlyZXR1cm4g UFRSX0VSUihwc2JfYmFja2xpZ2h0X2RldmljZSk7CisKKwlyZXQgPSBwc2JfYmFja2xpZ2h0X3Nl dHVwKGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVy KHBzYl9iYWNrbGlnaHRfZGV2aWNlKTsKKwkJcHNiX2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwor CQlyZXR1cm4gcmV0OworCX0KKwlwc2JfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVz cyA9IDEwMDsKKwlwc2JfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSAx MDA7CisJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMocHNiX2JhY2tsaWdodF9kZXZpY2UpOworCWRl dl9wcml2LT5iYWNrbGlnaHRfZGV2aWNlID0gcHNiX2JhY2tsaWdodF9kZXZpY2U7CisJcmV0dXJu IDA7Cit9CisKKyNlbmRpZgorCisvKgorICoJUHJvdmlkZSB0aGUgUG91bHNibyBzcGVjaWZpYyBj aGlwIGxvZ2ljIGFuZCBsb3cgbGV2ZWwgbWV0aG9kcworICoJZm9yIHBvd2VyIG1hbmFnZW1lbnQK KyAqLworCitzdGF0aWMgdm9pZCBwc2JfaW5pdF9wbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KworCXUzMiBnYXRpbmcgPSBQU0JfUlNHWDMyKFBTQl9DUl9DTEtHQVRFQ1RMKTsKKwlnYXRpbmcg Jj0gfjM7CS8qIERpc2FibGUgMkQgY2xvY2sgZ2F0aW5nICovCisJZ2F0aW5nIHw9IDE7CisJUFNC X1dTR1gzMihnYXRpbmcsIFBTQl9DUl9DTEtHQVRFQ1RMKTsKKwlQU0JfUlNHWDMyKFBTQl9DUl9D TEtHQVRFQ1RMKTsKK30KKworLyoqCisgKglwc2Jfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycwktCXNh dmUgcmVnaXN0ZXJzIGxvc3Qgb24gc3VzcGVuZAorICoJQGRldjogb3VyIERSTSBkZXZpY2UKKyAq CisgKglTYXZlIHRoZSBzdGF0ZSB3ZSBuZWVkIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVzdG9y ZSB0aGUgaW50ZXJmYWNlCisgKgl1cG9uIHJlc3VtZSBmcm9tIHN1c3BlbmQKKyAqLworc3RhdGlj IGludCBwc2Jfc2F2ZV9kaXNwbGF5X3JlZ2lzdGVycyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQor eworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsK KwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cjsKKworCS8qIERpc3BsYXkgYXJiaXRyYXRpb24gY29udHJvbCArIHdhdGVybWFya3MgKi8KKwlk ZXZfcHJpdi0+c2F2ZURTUEFSQiA9IFBTQl9SVkRDMzIoRFNQQVJCKTsKKwlkZXZfcHJpdi0+c2F2 ZURTUEZXMSA9IFBTQl9SVkRDMzIoRFNQRlcxKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEZXMiA9IFBT Ql9SVkRDMzIoRFNQRlcyKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEZXMyA9IFBTQl9SVkRDMzIoRFNQ RlczKTsKKwlkZXZfcHJpdi0+c2F2ZURTUEZXNCA9IFBTQl9SVkRDMzIoRFNQRlc0KTsKKwlkZXZf cHJpdi0+c2F2ZURTUEZXNSA9IFBTQl9SVkRDMzIoRFNQRlc1KTsKKwlkZXZfcHJpdi0+c2F2ZURT UEZXNiA9IFBTQl9SVkRDMzIoRFNQRlc2KTsKKwlkZXZfcHJpdi0+c2F2ZUNISUNLRU5CSVQgPSBQ U0JfUlZEQzMyKERTUENISUNLRU5CSVQpOworCisJLyogU2F2ZSBjcnRjIGFuZCBvdXRwdXQgc3Rh dGUgKi8KKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlsaXN0X2Zvcl9l YWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgeworCQlp ZiAoZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKSkKKwkJCWNydGMtPmZ1bmNzLT5zYXZlKGNy dGMpOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAmZGV2LT5tb2RlX2Nv bmZpZy5jb25uZWN0b3JfbGlzdCwgaGVhZCkKKwkJY29ubmVjdG9yLT5mdW5jcy0+c2F2ZShjb25u ZWN0b3IpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlyZXR1 cm4gMDsKK30KKworLyoqCisgKglwc2JfcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycwktCXJlc3Rv cmUgbG9zdCByZWdpc3RlciBzdGF0ZQorICoJQGRldjogb3VyIERSTSBkZXZpY2UKKyAqCisgKglS ZXN0b3JlIHJlZ2lzdGVyIHN0YXRlIHRoYXQgd2FzIGxvc3QgZHVyaW5nIHN1c3BlbmQgYW5kIHJl c3VtZS4KKyAqLworc3RhdGljIGludCBwc2JfcmVzdG9yZV9kaXNwbGF5X3JlZ2lzdGVycyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcHBfc3RhdDsKKworCS8qIERpc3BsYXkgYXJi aXRyYXRpb24gKyB3YXRlcm1hcmtzICovCisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEFS QiwgRFNQQVJCKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZlRFNQRlcxLCBEU1BGVzEpOwor CVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BGVzIsIERTUEZXMik7CisJUFNCX1dWREMzMihk ZXZfcHJpdi0+c2F2ZURTUEZXMywgRFNQRlczKTsKKwlQU0JfV1ZEQzMyKGRldl9wcml2LT5zYXZl RFNQRlc0LCBEU1BGVzQpOworCVBTQl9XVkRDMzIoZGV2X3ByaXYtPnNhdmVEU1BGVzUsIERTUEZX NSk7CisJUFNCX1dWREMzMihkZXZfcHJpdi0+c2F2ZURTUEZXNiwgRFNQRlc2KTsKKwlQU0JfV1ZE QzMyKGRldl9wcml2LT5zYXZlQ0hJQ0tFTkJJVCwgRFNQQ0hJQ0tFTkJJVCk7CisKKwkvKm1ha2Ug c3VyZSBWR0EgcGxhbmUgaXMgb2ZmLiBpdCBpbml0aWFsaXplcyB0byBvbiBhZnRlciByZXNldCEq LworCVBTQl9XVkRDMzIoMHg4MDAwMDAwMCwgVkdBQ05UUkwpOworCisJbXV0ZXhfbG9jaygmZGV2 LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5t b2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpCisJCWlmIChkcm1faGVscGVyX2NydGNfaW5fdXNl KGNydGMpKQorCQkJY3J0Yy0+ZnVuY3MtPnJlc3RvcmUoY3J0Yyk7CisKKwlsaXN0X2Zvcl9lYWNo X2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQp CisJCWNvbm5lY3Rvci0+ZnVuY3MtPnJlc3RvcmUoY29ubmVjdG9yKTsKKworCW11dGV4X3VubG9j aygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisKKwlpZiAoZGV2X3ByaXYtPmlMVkRTX2VuYWJs ZSkgeworCQkvKnNodXRkb3duIHRoZSBwYW5lbCovCisJCVBTQl9XVkRDMzIoMCwgUFBfQ09OVFJP TCk7CisJCWRvIHsKKwkJCXBwX3N0YXQgPSBQU0JfUlZEQzMyKFBQX1NUQVRVUyk7CisJCX0gd2hp bGUgKHBwX3N0YXQgJiAweDgwMDAwMDAwKTsKKworCQkvKiBUdXJuIG9mZiB0aGUgcGxhbmUgKi8K KwkJUFNCX1dWREMzMigweDU4MDAwMDAwLCBEU1BBQ05UUik7CisJCVBTQl9XVkRDMzIoMCwgRFNQ QVNVUkYpOy8qdHJpZ2dlciB0aGUgcGxhbmUgZGlzYWJsZSovCisJCS8qIFdhaXQgfjQgdGlja3Mg Ki8KKwkJbXNsZWVwKDQpOworCQkvKiBUdXJuIG9mZiBwaXBlICovCisJCVBTQl9XVkRDMzIoMHgw LCBQSVBFQUNPTkYpOworCQkvKiBXYWl0IH44IHRpY2tzICovCisJCW1zbGVlcCg4KTsKKworCQkv KiBUdXJuIG9mZiBQTExzICovCisJCVBTQl9XVkRDMzIoMCwgTVJTVF9EUExMX0EpOworCX0gZWxz ZSB7CisJCVBTQl9XVkRDMzIoRFBJX1NIVVRfRE9XTiwgRFBJX0NPTlRST0xfUkVHKTsKKwkJUFNC X1dWREMzMigweDAsIFBJUEVBQ09ORik7CisJCVBTQl9XVkRDMzIoMHgyZmFmMDAwMCwgQkxDX1BX TV9DVEwpOworCQl3aGlsZSAoUkVHX1JFQUQoMHg3MDAwOCkgJiAweDQwMDAwMDAwKQorCQkJY3B1 X3JlbGF4KCk7CisJCXdoaWxlICgoUFNCX1JWREMzMihHRU5fRklGT19TVEFUX1JFRykgJiBEUElf RklGT19FTVBUWSkKKwkJCSE9IERQSV9GSUZPX0VNUFRZKQorCQkJY3B1X3JlbGF4KCk7CisJCVBT Ql9XVkRDMzIoMCwgREVWSUNFX1JFQURZX1JFRyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHBzYl9wb3dlcl9kb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgcHNiX3Bvd2VyX3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Cit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9nZXRfY29yZV9mcmVxKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJdWludDMyX3QgY2xvY2s7CisJc3RydWN0IHBjaV9kZXYg KnBjaV9yb290ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoMCwgMCk7CisJc3RydWN0IGRybV9wc2Jf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLypwY2lfd3JpdGVfY29u ZmlnX2R3b3JkKHBjaV9yb290LCAweEQ0LCAweDAwQzMyMDA0KTsqLworCS8qcGNpX3dyaXRlX2Nv bmZpZ19kd29yZChwY2lfcm9vdCwgMHhEMCwgMHhFMDAzMzAwMCk7Ki8KKworCXBjaV93cml0ZV9j b25maWdfZHdvcmQocGNpX3Jvb3QsIDB4RDAsIDB4RDAwNTAzMDApOworCXBjaV9yZWFkX2NvbmZp Z19kd29yZChwY2lfcm9vdCwgMHhENCwgJmNsb2NrKTsKKwlwY2lfZGV2X3B1dChwY2lfcm9vdCk7 CisKKwlzd2l0Y2ggKGNsb2NrICYgMHgwNykgeworCWNhc2UgMDoKKwkJZGV2X3ByaXYtPmNvcmVf ZnJlcSA9IDEwMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkZXZfcHJpdi0+Y29yZV9mcmVxID0g MTMzOworCQlicmVhazsKKwljYXNlIDI6CisJCWRldl9wcml2LT5jb3JlX2ZyZXEgPSAxNTA7CisJ CWJyZWFrOworCWNhc2UgMzoKKwkJZGV2X3ByaXYtPmNvcmVfZnJlcSA9IDE3ODsKKwkJYnJlYWs7 CisJY2FzZSA0OgorCQlkZXZfcHJpdi0+Y29yZV9mcmVxID0gMjAwOworCQlicmVhazsKKwljYXNl IDU6CisJY2FzZSA2OgorCWNhc2UgNzoKKwkJZGV2X3ByaXYtPmNvcmVfZnJlcSA9IDI2NjsKKwlk ZWZhdWx0OgorCQlkZXZfcHJpdi0+Y29yZV9mcmVxID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQg cHNiX2NoaXBfc2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlwc2JfZ2V0X2NvcmVf ZnJlcShkZXYpOworCWdtYV9pbnRlbF9vcHJlZ2lvbl9pbml0KGRldik7CisJcHNiX2ludGVsX2lu aXRfYmlvcyhkZXYpOworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgcHNiX29wcyBwc2Jf Y2hpcF9vcHMgPSB7CisJLm5hbWUgPSAiUG91bHNibyIsCisJLmFjY2VsXzJkID0gMSwKKwkucGlw ZXMgPSAyLAorCS5jcnRjcyA9IDIsCisJLnNneF9vZmZzZXQgPSBQU0JfU0dYX09GRlNFVCwKKwku Y2hpcF9zZXR1cCA9IHBzYl9jaGlwX3NldHVwLAorCisJLmNydGNfaGVscGVyID0gJnBzYl9pbnRl bF9oZWxwZXJfZnVuY3MsCisJLmNydGNfZnVuY3MgPSAmcHNiX2ludGVsX2NydGNfZnVuY3MsCisK Kwkub3V0cHV0X2luaXQgPSBwc2Jfb3V0cHV0X2luaXQsCisKKyNpZmRlZiBDT05GSUdfQkFDS0xJ R0hUX0NMQVNTX0RFVklDRQorCS5iYWNrbGlnaHRfaW5pdCA9IHBzYl9iYWNrbGlnaHRfaW5pdCwK KyNlbmRpZgorCisJLmluaXRfcG0gPSBwc2JfaW5pdF9wbSwKKwkuc2F2ZV9yZWdzID0gcHNiX3Nh dmVfZGlzcGxheV9yZWdpc3RlcnMsCisJLnJlc3RvcmVfcmVncyA9IHBzYl9yZXN0b3JlX2Rpc3Bs YXlfcmVnaXN0ZXJzLAorCS5wb3dlcl9kb3duID0gcHNiX3Bvd2VyX2Rvd24sCisJLnBvd2VyX3Vw ID0gcHNiX3Bvd2VyX3VwLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUw MC9wc2JfZ2Z4Lm1vZC5jIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfZ2Z4Lm1vZC5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMGJmZGYKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9nZngubW9kLmMKQEAgLTAsMCArMSw1MSBA QAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Zlcm1hZ2ljLmg+ CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworTU9EVUxFX0lORk8odmVybWFnaWMsIFZF Uk1BR0lDX1NUUklORyk7CisKK3N0cnVjdCBtb2R1bGUgX190aGlzX21vZHVsZQorX19hdHRyaWJ1 dGVfXygoc2VjdGlvbigiLmdudS5saW5rb25jZS50aGlzX21vZHVsZSIpKSkgPSB7CisgLm5hbWUg PSBLQlVJTERfTU9ETkFNRSwKKyAuaW5pdCA9IGluaXRfbW9kdWxlLAorI2lmZGVmIENPTkZJR19N T0RVTEVfVU5MT0FECisgLmV4aXQgPSBjbGVhbnVwX21vZHVsZSwKKyNlbmRpZgorIC5hcmNoID0g TU9EVUxFX0FSQ0hfSU5JVCwKK307CisKK01PRFVMRV9JTkZPKHN0YWdpbmcsICJZIik7CisKK3N0 YXRpYyBjb25zdCBjaGFyIF9fbW9kdWxlX2RlcGVuZHNbXQorX191c2VkCitfX2F0dHJpYnV0ZV9f KChzZWN0aW9uKCIubW9kaW5mbyIpKSkgPQorImRlcGVuZHM9ZHJtLGRybV9rbXNfaGVscGVyLHZp ZGVvLGkyYy1hbGdvLWJpdCI7CisKK01PRFVMRV9BTElBUygicGNpOnYwMDAwODA4NmQwMDAwODEw OHN2KnNkKmJjKnNjKmkqIik7CitNT0RVTEVfQUxJQVMoInBjaTp2MDAwMDgwODZkMDAwMDgxMDlz dipzZCpiYypzYyppKiIpOworTU9EVUxFX0FMSUFTKCJwY2k6djAwMDA4MDg2ZDAwMDA0MTAwc3Yq c2QqYmMqc2MqaSoiKTsKK01PRFVMRV9BTElBUygicGNpOnYwMDAwODA4NmQwMDAwNDEwMXN2KnNk KmJjKnNjKmkqIik7CitNT0RVTEVfQUxJQVMoInBjaTp2MDAwMDgwODZkMDAwMDQxMDJzdipzZCpi YypzYyppKiIpOworTU9EVUxFX0FMSUFTKCJwY2k6djAwMDA4MDg2ZDAwMDA0MTAzc3Yqc2QqYmMq c2MqaSoiKTsKK01PRFVMRV9BTElBUygicGNpOnYwMDAwODA4NmQwMDAwNDEwNHN2KnNkKmJjKnNj KmkqIik7CitNT0RVTEVfQUxJQVMoInBjaTp2MDAwMDgwODZkMDAwMDQxMDVzdipzZCpiYypzYypp KiIpOworTU9EVUxFX0FMSUFTKCJwY2k6djAwMDA4MDg2ZDAwMDA0MTA2c3Yqc2QqYmMqc2MqaSoi KTsKK01PRFVMRV9BTElBUygicGNpOnYwMDAwODA4NmQwMDAwNDEwN3N2KnNkKmJjKnNjKmkqIik7 CitNT0RVTEVfQUxJQVMoInBjaTp2MDAwMDgwODZkMDAwMDAxMzBzdipzZCpiYypzYyppKiIpOwor TU9EVUxFX0FMSUFTKCJwY2k6djAwMDA4MDg2ZDAwMDAwMTMxc3Yqc2QqYmMqc2MqaSoiKTsKK01P RFVMRV9BTElBUygicGNpOnYwMDAwODA4NmQwMDAwMDEzMnN2KnNkKmJjKnNjKmkqIik7CitNT0RV TEVfQUxJQVMoInBjaTp2MDAwMDgwODZkMDAwMDAxMzNzdipzZCpiYypzYyppKiIpOworTU9EVUxF X0FMSUFTKCJwY2k6djAwMDA4MDg2ZDAwMDAwMTM0c3Yqc2QqYmMqc2MqaSoiKTsKK01PRFVMRV9B TElBUygicGNpOnYwMDAwODA4NmQwMDAwMDEzNXN2KnNkKmJjKnNjKmkqIik7CitNT0RVTEVfQUxJ QVMoInBjaTp2MDAwMDgwODZkMDAwMDAxMzZzdipzZCpiYypzYyppKiIpOworTU9EVUxFX0FMSUFT KCJwY2k6djAwMDA4MDg2ZDAwMDAwMTM3c3Yqc2QqYmMqc2MqaSoiKTsKK01PRFVMRV9BTElBUygi cGNpOnYwMDAwODA4NmQwMDAwMEJFMHN2KnNkKmJjKnNjKmkqIik7CitNT0RVTEVfQUxJQVMoInBj aTp2MDAwMDgwODZkMDAwMDBCRTFzdipzZCpiYypzYyppKiIpOworTU9EVUxFX0FMSUFTKCJwY2k6 djAwMDA4MDg2ZDAwMDAwQkUyc3Yqc2QqYmMqc2MqaSoiKTsKK01PRFVMRV9BTElBUygicGNpOnYw MDAwODA4NmQwMDAwMEJFM3N2KnNkKmJjKnNjKmkqIik7CitNT0RVTEVfQUxJQVMoInBjaTp2MDAw MDgwODZkMDAwMDBCRTRzdipzZCpiYypzYyppKiIpOworTU9EVUxFX0FMSUFTKCJwY2k6djAwMDA4 MDg2ZDAwMDAwQkU1c3Yqc2QqYmMqc2MqaSoiKTsKK01PRFVMRV9BTElBUygicGNpOnYwMDAwODA4 NmQwMDAwMEJFNnN2KnNkKmJjKnNjKmkqIik7CitNT0RVTEVfQUxJQVMoInBjaTp2MDAwMDgwODZk MDAwMDBCRTdzdipzZCpiYypzYyppKiIpOworCitNT0RVTEVfSU5GTyhzcmN2ZXJzaW9uLCAiNTFC MzMzNEYzNDJGNUVFQUM5M0FGMjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9nbWE1 MDAvcHNiX2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVs X2Rpc3BsYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjY1MDc2Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfZGlzcGxh eS5jCkBAIC0wLDAgKzEsMTQzMSBAQAorLyoKKyAqIENvcHlyaWdodCDDgsKpIDIwMDYtMjAxMSBJ bnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICog dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlz IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg SW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqCUVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5u ZXQ+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1 bnRpbWUuaD4KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAiZnJhbWVidWZmZXIu aCIKKyNpbmNsdWRlICJwc2JfZHJ2LmgiCisjaW5jbHVkZSAicHNiX2ludGVsX2Rydi5oIgorI2lu Y2x1ZGUgInBzYl9pbnRlbF9yZWcuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfZGlzcGxheS5oIgor I2luY2x1ZGUgInBvd2VyLmgiCisKK3N0cnVjdCBwc2JfaW50ZWxfY2xvY2tfdCB7CisJLyogZ2l2 ZW4gdmFsdWVzICovCisJaW50IG47CisJaW50IG0xLCBtMjsKKwlpbnQgcDEsIHAyOworCS8qIGRl cml2ZWQgdmFsdWVzICovCisJaW50IGRvdDsKKwlpbnQgdmNvOworCWludCBtOworCWludCBwOwor fTsKKworc3RydWN0IHBzYl9pbnRlbF9yYW5nZV90IHsKKwlpbnQgbWluLCBtYXg7Cit9OworCitz dHJ1Y3QgcHNiX2ludGVsX3AyX3QgeworCWludCBkb3RfbGltaXQ7CisJaW50IHAyX3Nsb3csIHAy X2Zhc3Q7Cit9OworCisjZGVmaW5lIElOVEVMX1AyX05VTQkJICAgICAgMgorCitzdHJ1Y3QgcHNi X2ludGVsX2xpbWl0X3QgeworCXN0cnVjdCBwc2JfaW50ZWxfcmFuZ2VfdCBkb3QsIHZjbywgbiwg bSwgbTEsIG0yLCBwLCBwMTsKKwlzdHJ1Y3QgcHNiX2ludGVsX3AyX3QgcDI7Cit9OworCisjZGVm aW5lIEk4WFhfRE9UX01JTgkJICAyNTAwMAorI2RlZmluZSBJOFhYX0RPVF9NQVgJCSAzNTAwMDAK KyNkZWZpbmUgSThYWF9WQ09fTUlOCQkgOTMwMDAwCisjZGVmaW5lIEk4WFhfVkNPX01BWAkJMTQw MDAwMAorI2RlZmluZSBJOFhYX05fTUlOCQkgICAgICAzCisjZGVmaW5lIEk4WFhfTl9NQVgJCSAg ICAgMTYKKyNkZWZpbmUgSThYWF9NX01JTgkJICAgICA5NgorI2RlZmluZSBJOFhYX01fTUFYCQkg ICAgMTQwCisjZGVmaW5lIEk4WFhfTTFfTUlOCQkgICAgIDE4CisjZGVmaW5lIEk4WFhfTTFfTUFY CQkgICAgIDI2CisjZGVmaW5lIEk4WFhfTTJfTUlOCQkgICAgICA2CisjZGVmaW5lIEk4WFhfTTJf TUFYCQkgICAgIDE2CisjZGVmaW5lIEk4WFhfUF9NSU4JCSAgICAgIDQKKyNkZWZpbmUgSThYWF9Q X01BWAkJICAgIDEyOAorI2RlZmluZSBJOFhYX1AxX01JTgkJICAgICAgMgorI2RlZmluZSBJOFhY X1AxX01BWAkJICAgICAzMworI2RlZmluZSBJOFhYX1AxX0xWRFNfTUlOCSAgICAgIDEKKyNkZWZp bmUgSThYWF9QMV9MVkRTX01BWAkgICAgICA2CisjZGVmaW5lIEk4WFhfUDJfU0xPVwkJICAgICAg NAorI2RlZmluZSBJOFhYX1AyX0ZBU1QJCSAgICAgIDIKKyNkZWZpbmUgSThYWF9QMl9MVkRTX1NM T1cJICAgICAgMTQKKyNkZWZpbmUgSThYWF9QMl9MVkRTX0ZBU1QJICAgICAgMTQJLyogTm8gZmFz dCBvcHRpb24gKi8KKyNkZWZpbmUgSThYWF9QMl9TTE9XX0xJTUlUCSAxNjUwMDAKKworI2RlZmlu ZSBJOVhYX0RPVF9NSU4JCSAgMjAwMDAKKyNkZWZpbmUgSTlYWF9ET1RfTUFYCQkgNDAwMDAwCisj ZGVmaW5lIEk5WFhfVkNPX01JTgkJMTQwMDAwMAorI2RlZmluZSBJOVhYX1ZDT19NQVgJCTI4MDAw MDAKKyNkZWZpbmUgSTlYWF9OX01JTgkJICAgICAgMworI2RlZmluZSBJOVhYX05fTUFYCQkgICAg ICA4CisjZGVmaW5lIEk5WFhfTV9NSU4JCSAgICAgNzAKKyNkZWZpbmUgSTlYWF9NX01BWAkJICAg IDEyMAorI2RlZmluZSBJOVhYX00xX01JTgkJICAgICAxMAorI2RlZmluZSBJOVhYX00xX01BWAkJ ICAgICAyMAorI2RlZmluZSBJOVhYX00yX01JTgkJICAgICAgNQorI2RlZmluZSBJOVhYX00yX01B WAkJICAgICAgOQorI2RlZmluZSBJOVhYX1BfU0RWT19EQUNfTUlOCSAgICAgIDUKKyNkZWZpbmUg STlYWF9QX1NEVk9fREFDX01BWAkgICAgIDgwCisjZGVmaW5lIEk5WFhfUF9MVkRTX01JTgkJICAg ICAgNworI2RlZmluZSBJOVhYX1BfTFZEU19NQVgJCSAgICAgOTgKKyNkZWZpbmUgSTlYWF9QMV9N SU4JCSAgICAgIDEKKyNkZWZpbmUgSTlYWF9QMV9NQVgJCSAgICAgIDgKKyNkZWZpbmUgSTlYWF9Q Ml9TRFZPX0RBQ19TTE9XCQkgICAgIDEwCisjZGVmaW5lIEk5WFhfUDJfU0RWT19EQUNfRkFTVAkJ ICAgICAgNQorI2RlZmluZSBJOVhYX1AyX1NEVk9fREFDX1NMT1dfTElNSVQJIDIwMDAwMAorI2Rl ZmluZSBJOVhYX1AyX0xWRFNfU0xPVwkJICAgICAxNAorI2RlZmluZSBJOVhYX1AyX0xWRFNfRkFT VAkJICAgICAgNworI2RlZmluZSBJOVhYX1AyX0xWRFNfU0xPV19MSU1JVAkJIDExMjAwMAorCisj ZGVmaW5lIElOVEVMX0xJTUlUX0k4WFhfRFZPX0RBQyAgICAwCisjZGVmaW5lIElOVEVMX0xJTUlU X0k4WFhfTFZEUwkgICAgMQorI2RlZmluZSBJTlRFTF9MSU1JVF9JOVhYX1NEVk9fREFDICAgMgor I2RlZmluZSBJTlRFTF9MSU1JVF9JOVhYX0xWRFMJICAgIDMKKworc3RhdGljIGNvbnN0IHN0cnVj dCBwc2JfaW50ZWxfbGltaXRfdCBwc2JfaW50ZWxfbGltaXRzW10gPSB7CisJewkJCS8qIElOVEVM X0xJTUlUX0k4WFhfRFZPX0RBQyAqLworCSAuZG90ID0gey5taW4gPSBJOFhYX0RPVF9NSU4sIC5t YXggPSBJOFhYX0RPVF9NQVh9LAorCSAudmNvID0gey5taW4gPSBJOFhYX1ZDT19NSU4sIC5tYXgg PSBJOFhYX1ZDT19NQVh9LAorCSAubiA9IHsubWluID0gSThYWF9OX01JTiwgLm1heCA9IEk4WFhf Tl9NQVh9LAorCSAubSA9IHsubWluID0gSThYWF9NX01JTiwgLm1heCA9IEk4WFhfTV9NQVh9LAor CSAubTEgPSB7Lm1pbiA9IEk4WFhfTTFfTUlOLCAubWF4ID0gSThYWF9NMV9NQVh9LAorCSAubTIg PSB7Lm1pbiA9IEk4WFhfTTJfTUlOLCAubWF4ID0gSThYWF9NMl9NQVh9LAorCSAucCA9IHsubWlu ID0gSThYWF9QX01JTiwgLm1heCA9IEk4WFhfUF9NQVh9LAorCSAucDEgPSB7Lm1pbiA9IEk4WFhf UDFfTUlOLCAubWF4ID0gSThYWF9QMV9NQVh9LAorCSAucDIgPSB7LmRvdF9saW1pdCA9IEk4WFhf UDJfU0xPV19MSU1JVCwKKwkJLnAyX3Nsb3cgPSBJOFhYX1AyX1NMT1csIC5wMl9mYXN0ID0gSThY WF9QMl9GQVNUfSwKKwkgfSwKKwl7CQkJLyogSU5URUxfTElNSVRfSThYWF9MVkRTICovCisJIC5k b3QgPSB7Lm1pbiA9IEk4WFhfRE9UX01JTiwgLm1heCA9IEk4WFhfRE9UX01BWH0sCisJIC52Y28g PSB7Lm1pbiA9IEk4WFhfVkNPX01JTiwgLm1heCA9IEk4WFhfVkNPX01BWH0sCisJIC5uID0gey5t aW4gPSBJOFhYX05fTUlOLCAubWF4ID0gSThYWF9OX01BWH0sCisJIC5tID0gey5taW4gPSBJOFhY X01fTUlOLCAubWF4ID0gSThYWF9NX01BWH0sCisJIC5tMSA9IHsubWluID0gSThYWF9NMV9NSU4s IC5tYXggPSBJOFhYX00xX01BWH0sCisJIC5tMiA9IHsubWluID0gSThYWF9NMl9NSU4sIC5tYXgg PSBJOFhYX00yX01BWH0sCisJIC5wID0gey5taW4gPSBJOFhYX1BfTUlOLCAubWF4ID0gSThYWF9Q X01BWH0sCisJIC5wMSA9IHsubWluID0gSThYWF9QMV9MVkRTX01JTiwgLm1heCA9IEk4WFhfUDFf TFZEU19NQVh9LAorCSAucDIgPSB7LmRvdF9saW1pdCA9IEk4WFhfUDJfU0xPV19MSU1JVCwKKwkJ LnAyX3Nsb3cgPSBJOFhYX1AyX0xWRFNfU0xPVywgLnAyX2Zhc3QgPSBJOFhYX1AyX0xWRFNfRkFT VH0sCisJIH0sCisJewkJCS8qIElOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUMgKi8KKwkgLmRvdCA9 IHsubWluID0gSTlYWF9ET1RfTUlOLCAubWF4ID0gSTlYWF9ET1RfTUFYfSwKKwkgLnZjbyA9IHsu bWluID0gSTlYWF9WQ09fTUlOLCAubWF4ID0gSTlYWF9WQ09fTUFYfSwKKwkgLm4gPSB7Lm1pbiA9 IEk5WFhfTl9NSU4sIC5tYXggPSBJOVhYX05fTUFYfSwKKwkgLm0gPSB7Lm1pbiA9IEk5WFhfTV9N SU4sIC5tYXggPSBJOVhYX01fTUFYfSwKKwkgLm0xID0gey5taW4gPSBJOVhYX00xX01JTiwgLm1h eCA9IEk5WFhfTTFfTUFYfSwKKwkgLm0yID0gey5taW4gPSBJOVhYX00yX01JTiwgLm1heCA9IEk5 WFhfTTJfTUFYfSwKKwkgLnAgPSB7Lm1pbiA9IEk5WFhfUF9TRFZPX0RBQ19NSU4sIC5tYXggPSBJ OVhYX1BfU0RWT19EQUNfTUFYfSwKKwkgLnAxID0gey5taW4gPSBJOVhYX1AxX01JTiwgLm1heCA9 IEk5WFhfUDFfTUFYfSwKKwkgLnAyID0gey5kb3RfbGltaXQgPSBJOVhYX1AyX1NEVk9fREFDX1NM T1dfTElNSVQsCisJCS5wMl9zbG93ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XLCAucDJfZmFzdCA9 CisJCUk5WFhfUDJfU0RWT19EQUNfRkFTVH0sCisJIH0sCisJewkJCS8qIElOVEVMX0xJTUlUX0k5 WFhfTFZEUyAqLworCSAuZG90ID0gey5taW4gPSBJOVhYX0RPVF9NSU4sIC5tYXggPSBJOVhYX0RP VF9NQVh9LAorCSAudmNvID0gey5taW4gPSBJOVhYX1ZDT19NSU4sIC5tYXggPSBJOVhYX1ZDT19N QVh9LAorCSAubiA9IHsubWluID0gSTlYWF9OX01JTiwgLm1heCA9IEk5WFhfTl9NQVh9LAorCSAu bSA9IHsubWluID0gSTlYWF9NX01JTiwgLm1heCA9IEk5WFhfTV9NQVh9LAorCSAubTEgPSB7Lm1p biA9IEk5WFhfTTFfTUlOLCAubWF4ID0gSTlYWF9NMV9NQVh9LAorCSAubTIgPSB7Lm1pbiA9IEk5 WFhfTTJfTUlOLCAubWF4ID0gSTlYWF9NMl9NQVh9LAorCSAucCA9IHsubWluID0gSTlYWF9QX0xW RFNfTUlOLCAubWF4ID0gSTlYWF9QX0xWRFNfTUFYfSwKKwkgLnAxID0gey5taW4gPSBJOVhYX1Ax X01JTiwgLm1heCA9IEk5WFhfUDFfTUFYfSwKKwkgLyogVGhlIHNpbmdsZS1jaGFubmVsIHJhbmdl IGlzIDI1LTExMk1oeiwgYW5kIGR1YWwtY2hhbm5lbAorCSAgKiBpcyA4MC0yMjRNaHouICBQcmVm ZXIgc2luZ2xlIGNoYW5uZWwgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKwkgICovCisJIC5wMiA9IHsu ZG90X2xpbWl0ID0gSTlYWF9QMl9MVkRTX1NMT1dfTElNSVQsCisJCS5wMl9zbG93ID0gSTlYWF9Q Ml9MVkRTX1NMT1csIC5wMl9mYXN0ID0gSTlYWF9QMl9MVkRTX0ZBU1R9LAorCSB9LAorfTsKKwor c3RhdGljIGNvbnN0IHN0cnVjdCBwc2JfaW50ZWxfbGltaXRfdCAqcHNiX2ludGVsX2xpbWl0KHN0 cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwljb25zdCBzdHJ1Y3QgcHNiX2ludGVsX2xpbWl0X3Qg KmxpbWl0OworCisJaWYgKHBzYl9pbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBV VF9MVkRTKSkKKwkJbGltaXQgPSAmcHNiX2ludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOVhYX0xW RFNdOworCWVsc2UKKwkJbGltaXQgPSAmcHNiX2ludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOVhY X1NEVk9fREFDXTsKKwlyZXR1cm4gbGltaXQ7Cit9CisKKy8qKiBEZXJpdmUgdGhlIHBpeGVsIGNs b2NrIGZvciB0aGUgZ2l2ZW4gcmVmY2xrIGFuZCBkaXZpc29ycyBmb3IgOHh4IGNoaXBzLiAqLwor CitzdGF0aWMgdm9pZCBpOHh4X2Nsb2NrKGludCByZWZjbGssIHN0cnVjdCBwc2JfaW50ZWxfY2xv Y2tfdCAqY2xvY2spCit7CisJY2xvY2stPm0gPSA1ICogKGNsb2NrLT5tMSArIDIpICsgKGNsb2Nr LT5tMiArIDIpOworCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOworCWNsb2NrLT52 Y28gPSByZWZjbGsgKiBjbG9jay0+bSAvIChjbG9jay0+biArIDIpOworCWNsb2NrLT5kb3QgPSBj bG9jay0+dmNvIC8gY2xvY2stPnA7Cit9CisKKy8qKiBEZXJpdmUgdGhlIHBpeGVsIGNsb2NrIGZv ciB0aGUgZ2l2ZW4gcmVmY2xrIGFuZCBkaXZpc29ycyBmb3IgOXh4IGNoaXBzLiAqLworCitzdGF0 aWMgdm9pZCBpOXh4X2Nsb2NrKGludCByZWZjbGssIHN0cnVjdCBwc2JfaW50ZWxfY2xvY2tfdCAq Y2xvY2spCit7CisJY2xvY2stPm0gPSA1ICogKGNsb2NrLT5tMSArIDIpICsgKGNsb2NrLT5tMiAr IDIpOworCWNsb2NrLT5wID0gY2xvY2stPnAxICogY2xvY2stPnAyOworCWNsb2NrLT52Y28gPSBy ZWZjbGsgKiBjbG9jay0+bSAvIChjbG9jay0+biArIDIpOworCWNsb2NrLT5kb3QgPSBjbG9jay0+ dmNvIC8gY2xvY2stPnA7Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9jbG9jayhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQgcmVmY2xrLAorCQkJc3RydWN0IHBzYl9pbnRlbF9jbG9ja190 ICpjbG9jaykKK3sKKwlyZXR1cm4gaTl4eF9jbG9jayhyZWZjbGssIGNsb2NrKTsKK30KKworLyoq CisgKiBSZXR1cm5zIHdoZXRoZXIgYW55IG91dHB1dCBvbiB0aGUgc3BlY2lmaWVkIHBpcGUgaXMg b2YgdGhlIHNwZWNpZmllZCB0eXBlCisgKi8KK2Jvb2wgcHNiX2ludGVsX3BpcGVfaGFzX3R5cGUo c3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0g JmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmxfZW50cnk7CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGxfZW50cnksICZtb2RlX2NvbmZpZy0+Y29ubmVjdG9yX2xpc3Qs IGhlYWQpIHsKKwkJaWYgKGxfZW50cnktPmVuY29kZXIgJiYgbF9lbnRyeS0+ZW5jb2Rlci0+Y3J0 YyA9PSBjcnRjKSB7CisJCQlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1 dCA9CisJCQkgICAgdG9fcHNiX2ludGVsX291dHB1dChsX2VudHJ5KTsKKwkJCWlmIChwc2JfaW50 ZWxfb3V0cHV0LT50eXBlID09IHR5cGUpCisJCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisJcmV0 dXJuIGZhbHNlOworfQorCisjZGVmaW5lIElOVEVMUGxsSW52YWxpZChzKSAgIHsgLyogRXJyb3JG IChzKSAqLzsgcmV0dXJuIGZhbHNlOyB9CisvKioKKyAqIFJldHVybnMgd2hldGhlciB0aGUgZ2l2 ZW4gc2V0IG9mIGRpdmlzb3JzIGFyZSB2YWxpZCBmb3IgYSBnaXZlbiByZWZjbGsgd2l0aAorICog dGhlIGdpdmVuIGNvbm5lY3RvcnMuCisgKi8KKworc3RhdGljIGJvb2wgcHNiX2ludGVsX1BMTF9p c192YWxpZChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgICAgc3RydWN0IHBzYl9pbnRl bF9jbG9ja190ICpjbG9jaykKK3sKKwljb25zdCBzdHJ1Y3QgcHNiX2ludGVsX2xpbWl0X3QgKmxp bWl0ID0gcHNiX2ludGVsX2xpbWl0KGNydGMpOworCisJaWYgKGNsb2NrLT5wMSA8IGxpbWl0LT5w MS5taW4gfHwgbGltaXQtPnAxLm1heCA8IGNsb2NrLT5wMSkKKwkJSU5URUxQbGxJbnZhbGlkKCJw MSBvdXQgb2YgcmFuZ2VcbiIpOworCWlmIChjbG9jay0+cCA8IGxpbWl0LT5wLm1pbiB8fCBsaW1p dC0+cC5tYXggPCBjbG9jay0+cCkKKwkJSU5URUxQbGxJbnZhbGlkKCJwIG91dCBvZiByYW5nZVxu Iik7CisJaWYgKGNsb2NrLT5tMiA8IGxpbWl0LT5tMi5taW4gfHwgbGltaXQtPm0yLm1heCA8IGNs b2NrLT5tMikKKwkJSU5URUxQbGxJbnZhbGlkKCJtMiBvdXQgb2YgcmFuZ2VcbiIpOworCWlmIChj bG9jay0+bTEgPCBsaW1pdC0+bTEubWluIHx8IGxpbWl0LT5tMS5tYXggPCBjbG9jay0+bTEpCisJ CUlOVEVMUGxsSW52YWxpZCgibTEgb3V0IG9mIHJhbmdlXG4iKTsKKwlpZiAoY2xvY2stPm0xIDw9 IGNsb2NrLT5tMikKKwkJSU5URUxQbGxJbnZhbGlkKCJtMSA8PSBtMlxuIik7CisJaWYgKGNsb2Nr LT5tIDwgbGltaXQtPm0ubWluIHx8IGxpbWl0LT5tLm1heCA8IGNsb2NrLT5tKQorCQlJTlRFTFBs bEludmFsaWQoIm0gb3V0IG9mIHJhbmdlXG4iKTsKKwlpZiAoY2xvY2stPm4gPCBsaW1pdC0+bi5t aW4gfHwgbGltaXQtPm4ubWF4IDwgY2xvY2stPm4pCisJCUlOVEVMUGxsSW52YWxpZCgibiBvdXQg b2YgcmFuZ2VcbiIpOworCWlmIChjbG9jay0+dmNvIDwgbGltaXQtPnZjby5taW4gfHwgbGltaXQt PnZjby5tYXggPCBjbG9jay0+dmNvKQorCQlJTlRFTFBsbEludmFsaWQoInZjbyBvdXQgb2YgcmFu Z2VcbiIpOworCS8qIFhYWDogV2UgbWF5IG5lZWQgdG8gYmUgY2hlY2tpbmcgIkRvdCBjbG9jayIK KwkgKiBkZXBlbmRpbmcgb24gdGhlIG11bHRpcGxpZXIsIGNvbm5lY3RvciwgZXRjLiwKKwkgKiBy YXRoZXIgdGhhbiBqdXN0IGEgc2luZ2xlIHJhbmdlLgorCSAqLworCWlmIChjbG9jay0+ZG90IDwg bGltaXQtPmRvdC5taW4gfHwgbGltaXQtPmRvdC5tYXggPCBjbG9jay0+ZG90KQorCQlJTlRFTFBs bEludmFsaWQoImRvdCBvdXQgb2YgcmFuZ2VcbiIpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8q KgorICogUmV0dXJucyBhIHNldCBvZiBkaXZpc29ycyBmb3IgdGhlIGRlc2lyZWQgdGFyZ2V0IGNs b2NrIHdpdGggdGhlIGdpdmVuCisgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZh bHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgorICogcmVmbGNrICogKDUgKiAobTEg KyAyKSArIChtMiArIDIpKSAvIChuICsgMikgLyBwMSAvIHAyLgorICovCitzdGF0aWMgYm9vbCBw c2JfaW50ZWxfZmluZF9iZXN0X1BMTChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB0YXJnZXQs CisJCQkJaW50IHJlZmNsaywKKwkJCQlzdHJ1Y3QgcHNiX2ludGVsX2Nsb2NrX3QgKmJlc3RfY2xv Y2spCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcHNi X2ludGVsX2Nsb2NrX3QgY2xvY2s7CisJY29uc3Qgc3RydWN0IHBzYl9pbnRlbF9saW1pdF90ICps aW1pdCA9IHBzYl9pbnRlbF9saW1pdChjcnRjKTsKKwlpbnQgZXJyID0gdGFyZ2V0OworCisJaWYg KHBzYl9pbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSAmJgorCSAg ICAoUkVHX1JFQUQoTFZEUykgJiBMVkRTX1BPUlRfRU4pICE9IDApIHsKKwkJLyoKKwkJICogRm9y IExWRFMsIGlmIHRoZSBwYW5lbCBpcyBvbiwganVzdCByZWx5IG9uIGl0cyBjdXJyZW50CisJCSAq IHNldHRpbmdzIGZvciBkdWFsLWNoYW5uZWwuICBXZSBoYXZlbid0IGZpZ3VyZWQgb3V0IGhvdyB0 bworCQkgKiByZWxpYWJseSBzZXQgdXAgZGlmZmVyZW50IHNpbmdsZS9kdWFsIGNoYW5uZWwgc3Rh dGUsIGlmIHdlCisJCSAqIGV2ZW4gY2FuLgorCQkgKi8KKwkJaWYgKChSRUdfUkVBRChMVkRTKSAm IExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQorCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKQorCQkJ Y2xvY2sucDIgPSBsaW1pdC0+cDIucDJfZmFzdDsKKwkJZWxzZQorCQkJY2xvY2sucDIgPSBsaW1p dC0+cDIucDJfc2xvdzsKKwl9IGVsc2UgeworCQlpZiAodGFyZ2V0IDwgbGltaXQtPnAyLmRvdF9s aW1pdCkKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7CisJCWVsc2UKKwkJCWNsb2Nr LnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7CisJfQorCisJbWVtc2V0KGJlc3RfY2xvY2ssIDAsIHNp emVvZigqYmVzdF9jbG9jaykpOworCisJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5taW47IGNs b2NrLm0xIDw9IGxpbWl0LT5tMS5tYXg7CisJICAgICBjbG9jay5tMSsrKSB7CisJCWZvciAoY2xv Y2subTIgPSBsaW1pdC0+bTIubWluOworCQkgICAgIGNsb2NrLm0yIDwgY2xvY2subTEgJiYgY2xv Y2subTIgPD0gbGltaXQtPm0yLm1heDsKKwkJICAgICBjbG9jay5tMisrKSB7CisJCQlmb3IgKGNs b2NrLm4gPSBsaW1pdC0+bi5taW47CisJCQkgICAgIGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OyBj bG9jay5uKyspIHsKKwkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsKKwkJCQkgICAg IGNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7CisJCQkJICAgICBjbG9jay5wMSsrKSB7CisJCQkJ CWludCB0aGlzX2VycjsKKworCQkJCQlwc2JfaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9j ayk7CisKKwkJCQkJaWYgKCFwc2JfaW50ZWxfUExMX2lzX3ZhbGlkCisJCQkJCSAgICAoY3J0Yywg JmNsb2NrKSkKKwkJCQkJCWNvbnRpbnVlOworCisJCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRv dCAtIHRhcmdldCk7CisJCQkJCWlmICh0aGlzX2VyciA8IGVycikgeworCQkJCQkJKmJlc3RfY2xv Y2sgPSBjbG9jazsKKwkJCQkJCWVyciA9IHRoaXNfZXJyOworCQkJCQl9CisJCQkJfQorCQkJfQor CQl9CisJfQorCisJcmV0dXJuIGVyciAhPSB0YXJnZXQ7Cit9CisKK3ZvaWQgcHNiX2ludGVsX3dh aXRfZm9yX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCS8qIFdhaXQgZm9yIDIw bXMsIGkuZS4gb25lIGN5Y2xlIGF0IDUwaHouICovCisJbWRlbGF5KDIwKTsKK30KKworaW50IHBz Yl9pbnRlbF9waXBlX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCSAgICBpbnQg eCwgaW50IHksIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKK3sKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCS8qIHN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJp dmF0ZSAqbWFzdGVyX3ByaXY7ICovCisJc3RydWN0IHBzYl9pbnRlbF9jcnRjICpwc2JfaW50ZWxf Y3J0YyA9IHRvX3BzYl9pbnRlbF9jcnRjKGNydGMpOworCXN0cnVjdCBwc2JfZnJhbWVidWZmZXIg KnBzYmZiID0gdG9fcHNiX2ZiKGNydGMtPmZiKTsKKwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRj LT5waXBlOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIG9mZnNldDsKKwlpbnQgZHNwYmFzZSA9IChw aXBlID09IDAgPyBEU1BBQkFTRSA6IERTUEJCQVNFKTsKKwlpbnQgZHNwc3VyZiA9IChwaXBlID09 IDAgPyBEU1BBU1VSRiA6IERTUEJTVVJGKTsKKwlpbnQgZHNwc3RyaWRlID0gKHBpcGUgPT0gMCkg PyBEU1BBU1RSSURFIDogRFNQQlNUUklERTsKKwlpbnQgZHNwY250cl9yZWcgPSAocGlwZSA9PSAw KSA/IERTUEFDTlRSIDogRFNQQkNOVFI7CisJdTMyIGRzcGNudHI7CisJaW50IHJldCA9IDA7CisK KwlpZiAoIWdtYV9wb3dlcl9iZWdpbihkZXYsIHRydWUpKQorCQlyZXR1cm4gMDsKKworCS8qIG5v IGZiIGJvdW5kICovCisJaWYgKCFjcnRjLT5mYikgeworCQlkZXZfZGJnKGRldi0+ZGV2LCAiTm8g RkIgYm91bmRcbiIpOworCQlnb3RvIHBzYl9pbnRlbF9waXBlX2NsZWFuZXI7CisJfQorCisJLyog V2UgYXJlIGRpc3BsYXlpbmcgdGhpcyBidWZmZXIsIG1ha2Ugc3VyZSBpdCBpcyBhY3R1YWxseSBs b2FkZWQKKwkgICBpbnRvIHRoZSBHVFQgKi8KKwlyZXQgPSBwc2JfZ3R0X3Bpbihwc2JmYi0+Z3R0 KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBwc2JfaW50ZWxfcGlwZV9zZXRfYmFzZV9leGl0Owor CXN0YXJ0ID0gcHNiZmItPmd0dC0+b2Zmc2V0OworCisJb2Zmc2V0ID0geSAqIGNydGMtPmZiLT5w aXRjaCArIHggKiAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CisKKwlSRUdfV1JJVEUo ZHNwc3RyaWRlLCBjcnRjLT5mYi0+cGl0Y2gpOworCisJZHNwY250ciA9IFJFR19SRUFEKGRzcGNu dHJfcmVnKTsKKwlkc3BjbnRyICY9IH5ESVNQUExBTkVfUElYRk9STUFUX01BU0s7CisKKwlzd2l0 Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZHNwY250ciB8PSBE SVNQUExBTkVfOEJQUDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJaWYgKGNydGMtPmZiLT5kZXB0 aCA9PSAxNSkKKwkJCWRzcGNudHIgfD0gRElTUFBMQU5FXzE1XzE2QlBQOworCQllbHNlCisJCQlk c3BjbnRyIHw9IERJU1BQTEFORV8xNkJQUDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMy OgorCQlkc3BjbnRyIHw9IERJU1BQTEFORV8zMkJQUF9OT19BTFBIQTsKKwkJYnJlYWs7CisJZGVm YXVsdDoKKwkJZGV2X2VycihkZXYtPmRldiwgIlVua25vd24gY29sb3IgZGVwdGhcbiIpOworCQly ZXQgPSAtRUlOVkFMOworCQlwc2JfZ3R0X3VucGluKHBzYmZiLT5ndHQpOworCQlnb3RvIHBzYl9p bnRlbF9waXBlX3NldF9iYXNlX2V4aXQ7CisJfQorCVJFR19XUklURShkc3BjbnRyX3JlZywgZHNw Y250cik7CisKKworCWlmICgwIC8qIEZJWE1FQUMgLSBjaGVjayB3aGF0IFBTQiBuZWVkcyAqLykg eworCQlSRUdfV1JJVEUoZHNwYmFzZSwgb2Zmc2V0KTsKKwkJUkVHX1JFQUQoZHNwYmFzZSk7CisJ CVJFR19XUklURShkc3BzdXJmLCBzdGFydCk7CisJCVJFR19SRUFEKGRzcHN1cmYpOworCX0gZWxz ZSB7CisJCVJFR19XUklURShkc3BiYXNlLCBzdGFydCArIG9mZnNldCk7CisJCVJFR19SRUFEKGRz cGJhc2UpOworCX0KKworcHNiX2ludGVsX3BpcGVfY2xlYW5lcjoKKwkvKiBJZiB0aGVyZSB3YXMg YSBwcmV2aW91cyBkaXNwbGF5IHdlIGNhbiBub3cgdW5waW4gaXQgKi8KKwlpZiAob2xkX2ZiKQor CQlwc2JfZ3R0X3VucGluKHRvX3BzYl9mYihvbGRfZmIpLT5ndHQpOworCitwc2JfaW50ZWxfcGlw ZV9zZXRfYmFzZV9leGl0OgorCWdtYV9wb3dlcl9lbmQoZGV2KTsKKwlyZXR1cm4gcmV0OworfQor CisvKioKKyAqIFNldHMgdGhlIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSBvZiB0aGUgcGlwZSBhbmQg cGxhbmUuCisgKgorICogVGhpcyBjb2RlIHNob3VsZCBwcm9iYWJseSBncm93IHN1cHBvcnQgZm9y IHR1cm5pbmcgdGhlIGN1cnNvciBvZmYgYW5kIGJhY2sKKyAqIG9uIGFwcHJvcHJpYXRlbHkgYXQg dGhlIHNhbWUgdGltZSBhcyB3ZSdyZSB0dXJuaW5nIHRoZSBwaXBlIG9mZi9vbi4KKyAqLworc3Rh dGljIHZvaWQgcHNiX2ludGVsX2NydGNfZHBtcyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCBt b2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJLyogc3RydWN0 IGRybV9pOTE1X21hc3Rlcl9wcml2YXRlICptYXN0ZXJfcHJpdjsgKi8KKwkvKiBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOyAqLworCXN0cnVjdCBw c2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsK KwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRjLT5waXBlOworCWludCBkcGxsX3JlZyA9IChwaXBl ID09IDApID8gRFBMTF9BIDogRFBMTF9COworCWludCBkc3BjbnRyX3JlZyA9IChwaXBlID09IDAp ID8gRFNQQUNOVFIgOiBEU1BCQ05UUjsKKwlpbnQgZHNwYmFzZV9yZWcgPSAocGlwZSA9PSAwKSA/ IERTUEFCQVNFIDogRFNQQkJBU0U7CisJaW50IHBpcGVjb25mX3JlZyA9IChwaXBlID09IDApID8g UElQRUFDT05GIDogUElQRUJDT05GOworCXUzMiB0ZW1wOworCWJvb2wgZW5hYmxlZDsKKworCS8q IFhYWDogV2hlbiBvdXIgb3V0cHV0cyBhcmUgYWxsIHVuYXdhcmUgb2YgRFBNUyBtb2RlcyBvdGhl ciB0aGFuIG9mZgorCSAqIGFuZCBvbiwgd2Ugc2hvdWxkIG1hcCB0aG9zZSBtb2RlcyB0byBEUk1f TU9ERV9EUE1TX09GRiBpbiB0aGUgQ1JUQy4KKwkgKi8KKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNl IERSTV9NT0RFX0RQTVNfT046CisJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6CisJY2FzZSBE Uk1fTU9ERV9EUE1TX1NVU1BFTkQ6CisJCS8qIEVuYWJsZSB0aGUgRFBMTCAqLworCQl0ZW1wID0g UkVHX1JFQUQoZHBsbF9yZWcpOworCQlpZiAoKHRlbXAgJiBEUExMX1ZDT19FTkFCTEUpID09IDAp IHsKKwkJCVJFR19XUklURShkcGxsX3JlZywgdGVtcCk7CisJCQlSRUdfUkVBRChkcGxsX3JlZyk7 CisJCQkvKiBXYWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGl6ZS4gKi8KKwkJCXVkZWxheSgx NTApOworCQkJUkVHX1dSSVRFKGRwbGxfcmVnLCB0ZW1wIHwgRFBMTF9WQ09fRU5BQkxFKTsKKwkJ CVJFR19SRUFEKGRwbGxfcmVnKTsKKwkJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmls aXplLiAqLworCQkJdWRlbGF5KDE1MCk7CisJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIHRlbXAgfCBE UExMX1ZDT19FTkFCTEUpOworCQkJUkVHX1JFQUQoZHBsbF9yZWcpOworCQkJLyogV2FpdCBmb3Ig dGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJCQl1ZGVsYXkoMTUwKTsKKwkJfQorCisJCS8q IEVuYWJsZSB0aGUgcGlwZSAqLworCQl0ZW1wID0gUkVHX1JFQUQocGlwZWNvbmZfcmVnKTsKKwkJ aWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgPT0gMCkKKwkJCVJFR19XUklURShwaXBlY29u Zl9yZWcsIHRlbXAgfCBQSVBFQUNPTkZfRU5BQkxFKTsKKworCQkvKiBFbmFibGUgdGhlIHBsYW5l ICovCisJCXRlbXAgPSBSRUdfUkVBRChkc3BjbnRyX3JlZyk7CisJCWlmICgodGVtcCAmIERJU1BM QVlfUExBTkVfRU5BQkxFKSA9PSAwKSB7CisJCQlSRUdfV1JJVEUoZHNwY250cl9yZWcsCisJCQkJ ICB0ZW1wIHwgRElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1c2ggdGhlIHBsYW5lIGNo YW5nZXMgKi8KKwkJCVJFR19XUklURShkc3BiYXNlX3JlZywgUkVHX1JFQUQoZHNwYmFzZV9yZWcp KTsKKwkJfQorCisJCXBzYl9pbnRlbF9jcnRjX2xvYWRfbHV0KGNydGMpOworCisJCS8qIEdpdmUg dGhlIG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGVuYWJsZQorCQkgKiBpZiBpdCdzIG9uIHRo aXMgcGlwZSAqLworCQkvKiBwc2JfaW50ZWxfY3J0Y19kcG1zX3ZpZGVvKGNydGMsIHRydWUpOyBU T0RPICovCisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCS8qIEdpdmUgdGhl IG92ZXJsYXkgc2NhbGVyIGEgY2hhbmNlIHRvIGRpc2FibGUKKwkJICogaWYgaXQncyBvbiB0aGlz IHBpcGUgKi8KKwkJLyogcHNiX2ludGVsX2NydGNfZHBtc192aWRlbyhjcnRjLCBGQUxTRSk7IFRP RE8gKi8KKworCQkvKiBEaXNhYmxlIHRoZSBWR0EgcGxhbmUgdGhhdCB3ZSBuZXZlciB1c2UgKi8K KwkJUkVHX1dSSVRFKFZHQUNOVFJMLCBWR0FfRElTUF9ESVNBQkxFKTsKKworCQkvKiBEaXNhYmxl IGRpc3BsYXkgcGxhbmUgKi8KKwkJdGVtcCA9IFJFR19SRUFEKGRzcGNudHJfcmVnKTsKKwkJaWYg KCh0ZW1wICYgRElTUExBWV9QTEFORV9FTkFCTEUpICE9IDApIHsKKwkJCVJFR19XUklURShkc3Bj bnRyX3JlZywKKwkJCQkgIHRlbXAgJiB+RElTUExBWV9QTEFORV9FTkFCTEUpOworCQkJLyogRmx1 c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KKwkJCVJFR19XUklURShkc3BiYXNlX3JlZywgUkVHX1JF QUQoZHNwYmFzZV9yZWcpKTsKKwkJCVJFR19SRUFEKGRzcGJhc2VfcmVnKTsKKwkJfQorCisJCS8q IE5leHQsIGRpc2FibGUgZGlzcGxheSBwaXBlcyAqLworCQl0ZW1wID0gUkVHX1JFQUQocGlwZWNv bmZfcmVnKTsKKwkJaWYgKCh0ZW1wICYgUElQRUFDT05GX0VOQUJMRSkgIT0gMCkgeworCQkJUkVH X1dSSVRFKHBpcGVjb25mX3JlZywgdGVtcCAmIH5QSVBFQUNPTkZfRU5BQkxFKTsKKwkJCVJFR19S RUFEKHBpcGVjb25mX3JlZyk7CisJCX0KKworCQkvKiBXYWl0IGZvciB2YmxhbmsgZm9yIHRoZSBk aXNhYmxlIHRvIHRha2UgZWZmZWN0LiAqLworCQlwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRl dik7CisKKwkJdGVtcCA9IFJFR19SRUFEKGRwbGxfcmVnKTsKKwkJaWYgKCh0ZW1wICYgRFBMTF9W Q09fRU5BQkxFKSAhPSAwKSB7CisJCQlSRUdfV1JJVEUoZHBsbF9yZWcsIHRlbXAgJiB+RFBMTF9W Q09fRU5BQkxFKTsKKwkJCVJFR19SRUFEKGRwbGxfcmVnKTsKKwkJfQorCisJCS8qIFdhaXQgZm9y IHRoZSBjbG9ja3MgdG8gdHVybiBvZmYuICovCisJCXVkZWxheSgxNTApOworCQlicmVhazsKKwl9 CisKKwllbmFibGVkID0gY3J0Yy0+ZW5hYmxlZCAmJiBtb2RlICE9IERSTV9NT0RFX0RQTVNfT0ZG OworCisJLypTZXQgRklGTyBXYXRlcm1hcmtzKi8KKwlSRUdfV1JJVEUoRFNQQVJCLCAweDNGM0Up OworfQorCitzdGF0aWMgdm9pZCBwc2JfaW50ZWxfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1fY3J0 YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0g Y3J0Yy0+aGVscGVyX3ByaXZhdGU7CisJY3J0Y19mdW5jcy0+ZHBtcyhjcnRjLCBEUk1fTU9ERV9E UE1TX09GRik7Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9jcnRjX2NvbW1pdChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyAqY3J0Y19m dW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOworCWNydGNfZnVuY3MtPmRwbXMoY3J0YywgRFJN X01PREVfRFBNU19PTik7Cit9CisKK3ZvaWQgcHNiX2ludGVsX2VuY29kZXJfcHJlcGFyZShzdHJ1 Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9m dW5jcyAqZW5jb2Rlcl9mdW5jcyA9CisJICAgIGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCS8q IGx2ZHMgaGFzIGl0cyBvd24gdmVyc2lvbiBvZiBwcmVwYXJlIHNlZSBwc2JfaW50ZWxfbHZkc19w cmVwYXJlICovCisJZW5jb2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09G Rik7Cit9CisKK3ZvaWQgcHNiX2ludGVsX2VuY29kZXJfY29tbWl0KHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNvZGVy X2Z1bmNzID0KKwkgICAgZW5jb2Rlci0+aGVscGVyX3ByaXZhdGU7CisJLyogbHZkcyBoYXMgaXRz IG93biB2ZXJzaW9uIG9mIGNvbW1pdCBzZWUgcHNiX2ludGVsX2x2ZHNfY29tbWl0ICovCisJZW5j b2Rlcl9mdW5jcy0+ZHBtcyhlbmNvZGVyLCBEUk1fTU9ERV9EUE1TX09OKTsKK30KKworc3RhdGlj IGJvb2wgcHNiX2ludGVsX2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJ CQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCisKKy8qKgor ICogUmV0dXJuIHRoZSBwaXBlIGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gdGhlIHBhbmVsIGZpdHRl ciwKKyAqIG9yIC0xIGlmIHRoZSBwYW5lbCBmaXR0ZXIgaXMgbm90IHByZXNlbnQgb3Igbm90IGlu IHVzZQorICovCitzdGF0aWMgaW50IHBzYl9pbnRlbF9wYW5lbF9maXR0ZXJfcGlwZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXUzMiBwZml0X2NvbnRyb2w7CisKKwlwZml0X2NvbnRyb2wg PSBSRUdfUkVBRChQRklUX0NPTlRST0wpOworCisJLyogU2VlIGlmIHRoZSBwYW5lbCBmaXR0ZXIg aXMgaW4gdXNlICovCisJaWYgKChwZml0X2NvbnRyb2wgJiBQRklUX0VOQUJMRSkgPT0gMCkKKwkJ cmV0dXJuIC0xOworCS8qIE11c3QgYmUgb24gUElQRSAxIGZvciBQU0IgKi8KKwlyZXR1cm4gMTsK K30KKworc3RhdGljIGludCBwc2JfaW50ZWxfY3J0Y19tb2RlX3NldChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkgICAg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUsCisJCQkgICAgICAgaW50 IHgsIGludCB5LAorCQkJICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKK3sK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxf Y3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlzdHJ1Y3Qg ZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzID0gY3J0Yy0+aGVscGVyX3ByaXZhdGU7 CisJaW50IHBpcGUgPSBwc2JfaW50ZWxfY3J0Yy0+cGlwZTsKKwlpbnQgZnBfcmVnID0gKHBpcGUg PT0gMCkgPyBGUEEwIDogRlBCMDsKKwlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExf QSA6IERQTExfQjsKKwlpbnQgZHNwY250cl9yZWcgPSAocGlwZSA9PSAwKSA/IERTUEFDTlRSIDog RFNQQkNOVFI7CisJaW50IHBpcGVjb25mX3JlZyA9IChwaXBlID09IDApID8gUElQRUFDT05GIDog UElQRUJDT05GOworCWludCBodG90X3JlZyA9IChwaXBlID09IDApID8gSFRPVEFMX0EgOiBIVE9U QUxfQjsKKwlpbnQgaGJsYW5rX3JlZyA9IChwaXBlID09IDApID8gSEJMQU5LX0EgOiBIQkxBTktf QjsKKwlpbnQgaHN5bmNfcmVnID0gKHBpcGUgPT0gMCkgPyBIU1lOQ19BIDogSFNZTkNfQjsKKwlp bnQgdnRvdF9yZWcgPSAocGlwZSA9PSAwKSA/IFZUT1RBTF9BIDogVlRPVEFMX0I7CisJaW50IHZi bGFua19yZWcgPSAocGlwZSA9PSAwKSA/IFZCTEFOS19BIDogVkJMQU5LX0I7CisJaW50IHZzeW5j X3JlZyA9IChwaXBlID09IDApID8gVlNZTkNfQSA6IFZTWU5DX0I7CisJaW50IGRzcHNpemVfcmVn ID0gKHBpcGUgPT0gMCkgPyBEU1BBU0laRSA6IERTUEJTSVpFOworCWludCBkc3Bwb3NfcmVnID0g KHBpcGUgPT0gMCkgPyBEU1BBUE9TIDogRFNQQlBPUzsKKwlpbnQgcGlwZXNyY19yZWcgPSAocGlw ZSA9PSAwKSA/IFBJUEVBU1JDIDogUElQRUJTUkM7CisJaW50IHJlZmNsazsKKwlzdHJ1Y3QgcHNi X2ludGVsX2Nsb2NrX3QgY2xvY2s7CisJdTMyIGRwbGwgPSAwLCBmcCA9IDAsIGRzcGNudHIsIHBp cGVjb25mOworCWJvb2wgb2ssIGlzX3Nkdm8gPSBmYWxzZSwgaXNfZHZvID0gZmFsc2U7CisJYm9v bCBpc19jcnQgPSBmYWxzZSwgaXNfbHZkcyA9IGZhbHNlLCBpc190diA9IGZhbHNlOworCXN0cnVj dCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CisJc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKworCS8qIE5vIHNjYW4gb3V0IG5vIHBsYXkg Ki8KKwlpZiAoY3J0Yy0+ZmIgPT0gTlVMTCkgeworCQljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNl KGNydGMsIHgsIHksIG9sZF9mYik7CisJCXJldHVybiAwOworCX0KKworCWxpc3RfZm9yX2VhY2hf ZW50cnkoY29ubmVjdG9yLCAmbW9kZV9jb25maWctPmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7CisJ CXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0KKwkJICAgIHRvX3Bz Yl9pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCQlpZiAoIWNvbm5lY3Rvci0+ZW5jb2Rlcgor CQkgICAgfHwgY29ubmVjdG9yLT5lbmNvZGVyLT5jcnRjICE9IGNydGMpCisJCQljb250aW51ZTsK KworCQlzd2l0Y2ggKHBzYl9pbnRlbF9vdXRwdXQtPnR5cGUpIHsKKwkJY2FzZSBJTlRFTF9PVVRQ VVRfTFZEUzoKKwkJCWlzX2x2ZHMgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VU UFVUX1NEVk86CisJCQlpc19zZHZvID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX09V VFBVVF9EVk86CisJCQlpc19kdm8gPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VU UFVUX1RWT1VUOgorCQkJaXNfdHYgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfT1VU UFVUX0FOQUxPRzoKKwkJCWlzX2NydCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJl ZmNsayA9IDk2MDAwOworCisJb2sgPSBwc2JfaW50ZWxfZmluZF9iZXN0X1BMTChjcnRjLCBhZGp1 c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLAorCQkJCSAmY2xvY2spOworCWlmICghb2spIHsKKwkJ ZGV2X2VycihkZXYtPmRldiwgIkNvdWxkbid0IGZpbmQgUExMIHNldHRpbmdzIGZvciBtb2RlIVxu Iik7CisJCXJldHVybiAwOworCX0KKworCWZwID0gY2xvY2subiA8PCAxNiB8IGNsb2NrLm0xIDw8 IDggfCBjbG9jay5tMjsKKworCWRwbGwgPSBEUExMX1ZHQV9NT0RFX0RJUzsKKwlpZiAoaXNfbHZk cykgeworCQlkcGxsIHw9IERQTExCX01PREVfTFZEUzsKKwkJZHBsbCB8PSBEUExMX0RWT19ISUdI X1NQRUVEOworCX0gZWxzZQorCQlkcGxsIHw9IERQTExCX01PREVfREFDX1NFUklBTDsKKwlpZiAo aXNfc2R2bykgeworCQlpbnQgc2R2b19waXhlbF9tdWx0aXBseSA9CisJCQkgICAgYWRqdXN0ZWRf bW9kZS0+Y2xvY2sgLyBtb2RlLT5jbG9jazsKKwkJZHBsbCB8PSBEUExMX0RWT19ISUdIX1NQRUVE OworCQlkcGxsIHw9CisJCSAgICAoc2R2b19waXhlbF9tdWx0aXBseSAtIDEpIDw8IFNEVk9fTVVM VElQTElFUl9TSElGVF9ISVJFUzsKKwl9CisKKwkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2 YWx1ZSAqLworCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IDE2OworCXN3aXRjaCAo Y2xvY2sucDIpIHsKKwljYXNlIDU6CisJCWRwbGwgfD0gRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NL X0RJVl81OworCQlicmVhazsKKwljYXNlIDc6CisJCWRwbGwgfD0gRFBMTEJfTFZEU19QMl9DTE9D S19ESVZfNzsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxf UDJfQ0xPQ0tfRElWXzEwOworCQlicmVhazsKKwljYXNlIDE0OgorCQlkcGxsIHw9IERQTExCX0xW RFNfUDJfQ0xPQ0tfRElWXzE0OworCQlicmVhazsKKwl9CisKKwlpZiAoaXNfdHYpIHsKKwkJLyog WFhYOiBqdXN0IG1hdGNoaW5nIEJJT1MgZm9yIG5vdyAqLworLyoJZHBsbCB8PSBQTExfUkVGX0lO UFVUX1RWQ0xLSU5CQzsgKi8KKwkJZHBsbCB8PSAzOworCX0KKwlkcGxsIHw9IFBMTF9SRUZfSU5Q VVRfRFJFRkNMSzsKKworCS8qIHNldHVwIHBpcGVjb25mICovCisJcGlwZWNvbmYgPSBSRUdfUkVB RChwaXBlY29uZl9yZWcpOworCisJLyogU2V0IHVwIHRoZSBkaXNwbGF5IHBsYW5lIHJlZ2lzdGVy ICovCisJZHNwY250ciA9IERJU1BQTEFORV9HQU1NQV9FTkFCTEU7CisKKwlpZiAocGlwZSA9PSAw KQorCQlkc3BjbnRyIHw9IERJU1BQTEFORV9TRUxfUElQRV9BOworCWVsc2UKKwkJZHNwY250ciB8 PSBESVNQUExBTkVfU0VMX1BJUEVfQjsKKworCWRzcGNudHIgfD0gRElTUExBWV9QTEFORV9FTkFC TEU7CisJcGlwZWNvbmYgfD0gUElQRUFDT05GX0VOQUJMRTsKKwlkcGxsIHw9IERQTExfVkNPX0VO QUJMRTsKKworCisJLyogRGlzYWJsZSB0aGUgcGFuZWwgZml0dGVyIGlmIGl0IHdhcyBvbiBvdXIg cGlwZSAqLworCWlmIChwc2JfaW50ZWxfcGFuZWxfZml0dGVyX3BpcGUoZGV2KSA9PSBwaXBlKQor CQlSRUdfV1JJVEUoUEZJVF9DT05UUk9MLCAwKTsKKworCWRybV9tb2RlX2RlYnVnX3ByaW50bW9k ZWxpbmUobW9kZSk7CisKKwlpZiAoZHBsbCAmIERQTExfVkNPX0VOQUJMRSkgeworCQlSRUdfV1JJ VEUoZnBfcmVnLCBmcCk7CisJCVJFR19XUklURShkcGxsX3JlZywgZHBsbCAmIH5EUExMX1ZDT19F TkFCTEUpOworCQlSRUdfUkVBRChkcGxsX3JlZyk7CisJCXVkZWxheSgxNTApOworCX0KKworCS8q IFRoZSBMVkRTIHBpbiBwYWlyIG5lZWRzIHRvIGJlIG9uIGJlZm9yZSB0aGUgRFBMTHMgYXJlIGVu YWJsZWQuCisJICogVGhpcyBpcyBhbiBleGNlcHRpb24gdG8gdGhlIGdlbmVyYWwgcnVsZSB0aGF0 IG1vZGVfc2V0IGRvZXNuJ3QgdHVybgorCSAqIHRoaW5ncyBvbi4KKwkgKi8KKwlpZiAoaXNfbHZk cykgeworCQl1MzIgbHZkcyA9IFJFR19SRUFEKExWRFMpOworCisJCWx2ZHMgJj0gfkxWRFNfUElQ RUJfU0VMRUNUOworCQlpZiAocGlwZSA9PSAxKQorCQkJbHZkcyB8PSBMVkRTX1BJUEVCX1NFTEVD VDsKKworCQlsdmRzIHw9IExWRFNfUE9SVF9FTiB8IExWRFNfQTBBMl9DTEtBX1BPV0VSX1VQOwor CQkvKiBTZXQgdGhlIEIwLUIzIGRhdGEgcGFpcnMgY29ycmVzcG9uZGluZyB0bworCQkgKiB3aGV0 aGVyIHdlJ3JlIGdvaW5nIHRvCisJCSAqIHNldCB0aGUgRFBMTHMgZm9yIGR1YWwtY2hhbm5lbCBt b2RlIG9yIG5vdC4KKwkJICovCisJCWx2ZHMgJj0gfihMVkRTX0IwQjNfUE9XRVJfVVAgfCBMVkRT X0NMS0JfUE9XRVJfVVApOworCQlpZiAoY2xvY2sucDIgPT0gNykKKwkJCWx2ZHMgfD0gTFZEU19C MEIzX1BPV0VSX1VQIHwgTFZEU19DTEtCX1BPV0VSX1VQOworCisJCS8qIEl0IHdvdWxkIGJlIG5p Y2UgdG8gc2V0IDI0IHZzIDE4LWJpdCBtb2RlIChMVkRTX0EzX1BPV0VSX1VQKQorCQkgKiBhcHBy b3ByaWF0ZWx5IGhlcmUsIGJ1dCB3ZSBuZWVkIHRvIGxvb2sgbW9yZQorCQkgKiB0aG9yb3VnaGx5 IGludG8gaG93IHBhbmVscyBiZWhhdmUgaW4gdGhlIHR3byBtb2Rlcy4KKwkJICovCisKKwkJUkVH X1dSSVRFKExWRFMsIGx2ZHMpOworCQlSRUdfUkVBRChMVkRTKTsKKwl9CisKKwlSRUdfV1JJVEUo ZnBfcmVnLCBmcCk7CisJUkVHX1dSSVRFKGRwbGxfcmVnLCBkcGxsKTsKKwlSRUdfUkVBRChkcGxs X3JlZyk7CisJLyogV2FpdCBmb3IgdGhlIGNsb2NrcyB0byBzdGFiaWxpemUuICovCisJdWRlbGF5 KDE1MCk7CisKKwkvKiB3cml0ZSBpdCBhZ2FpbiAtLSB0aGUgQklPUyBkb2VzLCBhZnRlciBhbGwg Ki8KKwlSRUdfV1JJVEUoZHBsbF9yZWcsIGRwbGwpOworCisJUkVHX1JFQUQoZHBsbF9yZWcpOwor CS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLworCXVkZWxheSgxNTApOwor CisJUkVHX1dSSVRFKGh0b3RfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIDEp IHwKKwkJICAoKGFkanVzdGVkX21vZGUtPmNydGNfaHRvdGFsIC0gMSkgPDwgMTYpKTsKKwlSRUdf V1JJVEUoaGJsYW5rX3JlZywgKGFkanVzdGVkX21vZGUtPmNydGNfaGJsYW5rX3N0YXJ0IC0gMSkg fAorCQkgICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oYmxhbmtfZW5kIC0gMSkgPDwgMTYpKTsKKwlS RUdfV1JJVEUoaHN5bmNfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIDEp IHwKKwkJICAoKGFkanVzdGVkX21vZGUtPmNydGNfaHN5bmNfZW5kIC0gMSkgPDwgMTYpKTsKKwlS RUdfV1JJVEUodnRvdF9yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gMSkgfAor CQkgICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192dG90YWwgLSAxKSA8PCAxNikpOworCVJFR19XUklU RSh2YmxhbmtfcmVnLCAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192Ymxhbmtfc3RhcnQgLSAxKSB8CisJ CSAgKChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZibGFua19lbmQgLSAxKSA8PCAxNikpOworCVJFR19X UklURSh2c3luY19yZWcsIChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0IC0gMSkgfAor CQkgICgoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192c3luY19lbmQgLSAxKSA8PCAxNikpOworCS8qIHBp cGVzcmMgYW5kIGRzcHNpemUgY29udHJvbCB0aGUgc2l6ZSB0aGF0IGlzIHNjYWxlZCBmcm9tLAor CSAqIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgdGhlIHVzZXIncyByZXF1ZXN0ZWQgc2l6ZS4KKwkg Ki8KKwlSRUdfV1JJVEUoZHNwc2l6ZV9yZWcsCisJCSAgKChtb2RlLT52ZGlzcGxheSAtIDEpIDw8 IDE2KSB8IChtb2RlLT5oZGlzcGxheSAtIDEpKTsKKwlSRUdfV1JJVEUoZHNwcG9zX3JlZywgMCk7 CisJUkVHX1dSSVRFKHBpcGVzcmNfcmVnLAorCQkgICgobW9kZS0+aGRpc3BsYXkgLSAxKSA8PCAx NikgfCAobW9kZS0+dmRpc3BsYXkgLSAxKSk7CisJUkVHX1dSSVRFKHBpcGVjb25mX3JlZywgcGlw ZWNvbmYpOworCVJFR19SRUFEKHBpcGVjb25mX3JlZyk7CisKKwlwc2JfaW50ZWxfd2FpdF9mb3Jf dmJsYW5rKGRldik7CisKKwlSRUdfV1JJVEUoZHNwY250cl9yZWcsIGRzcGNudHIpOworCisJLyog Rmx1c2ggdGhlIHBsYW5lIGNoYW5nZXMgKi8KKwljcnRjX2Z1bmNzLT5tb2RlX3NldF9iYXNlKGNy dGMsIHgsIHksIG9sZF9mYik7CisKKwlwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisK KwlyZXR1cm4gMDsKK30KKworLyoqIExvYWRzIHRoZSBwYWxldHRlL2dhbW1hIHVuaXQgZm9yIHRo ZSBDUlRDIHdpdGggdGhlIHByZXBhcmVkIHZhbHVlcyAqLwordm9pZCBwc2JfaW50ZWxfY3J0Y19s b2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRl diA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9CisJCQkJ KHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBwc2Jf aW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwlp bnQgcGFscmVnID0gUEFMRVRURV9BOworCWludCBpOworCisJLyogVGhlIGNsb2NrcyBoYXZlIHRv IGJlIG9uIHRvIGxvYWQgdGhlIHBhbGV0dGUuICovCisJaWYgKCFjcnRjLT5lbmFibGVkKQorCQly ZXR1cm47CisKKwlzd2l0Y2ggKHBzYl9pbnRlbF9jcnRjLT5waXBlKSB7CisJY2FzZSAwOgorCQli cmVhazsKKwljYXNlIDE6CisJCXBhbHJlZyA9IFBBTEVUVEVfQjsKKwkJYnJlYWs7CisJY2FzZSAy OgorCQlwYWxyZWcgPSBQQUxFVFRFX0M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIo ZGV2LT5kZXYsICJJbGxlZ2FsIFBpcGUgTnVtYmVyLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlp ZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7 IGkrKykgeworCQkJUkVHX1dSSVRFKHBhbHJlZyArIDQgKiBpLAorCQkJCSAgKChwc2JfaW50ZWxf Y3J0Yy0+bHV0X3JbaV0gKworCQkJCSAgcHNiX2ludGVsX2NydGMtPmx1dF9hZGpbaV0pIDw8IDE2 KSB8CisJCQkJICAoKHBzYl9pbnRlbF9jcnRjLT5sdXRfZ1tpXSArCisJCQkJICBwc2JfaW50ZWxf Y3J0Yy0+bHV0X2FkaltpXSkgPDwgOCkgfAorCQkJCSAgKHBzYl9pbnRlbF9jcnRjLT5sdXRfYltp XSArCisJCQkJICBwc2JfaW50ZWxfY3J0Yy0+bHV0X2FkaltpXSkpOworCQl9CisJCWdtYV9wb3dl cl9lbmQoZGV2KTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJ CWRldl9wcml2LT5zYXZlX3BhbGV0dGVfYVtpXSA9CisJCQkJICAoKHBzYl9pbnRlbF9jcnRjLT5s dXRfcltpXSArCisJCQkJICBwc2JfaW50ZWxfY3J0Yy0+bHV0X2FkaltpXSkgPDwgMTYpIHwKKwkJ CQkgICgocHNiX2ludGVsX2NydGMtPmx1dF9nW2ldICsKKwkJCQkgIHBzYl9pbnRlbF9jcnRjLT5s dXRfYWRqW2ldKSA8PCA4KSB8CisJCQkJICAocHNiX2ludGVsX2NydGMtPmx1dF9iW2ldICsKKwkJ CQkgIHBzYl9pbnRlbF9jcnRjLT5sdXRfYWRqW2ldKTsKKwkJfQorCisJfQorfQorCisvKioKKyAq IFNhdmUgSFcgc3RhdGVzIG9mIGdpdmluZyBjcnRjCisgKi8KK3N0YXRpYyB2b2lkIHBzYl9pbnRl bF9jcnRjX3NhdmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNl ICpkZXYgPSBjcnRjLT5kZXY7CisJLyogc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYg PQorCQkJKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOyAqLworCXN0 cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0Yyhj cnRjKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBwc2JfaW50 ZWxfY3J0Yy0+Y3J0Y19zdGF0ZTsKKwlpbnQgcGlwZUEgPSAocHNiX2ludGVsX2NydGMtPnBpcGUg PT0gMCk7CisJdWludDMyX3QgcGFsZXR0ZVJlZzsKKwlpbnQgaTsKKworCWlmICghY3J0Y19zdGF0 ZSkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiTm8gQ1JUQyBzdGF0ZSBmb3VuZFxuIik7CisJCXJl dHVybjsKKwl9CisKKwljcnRjX3N0YXRlLT5zYXZlRFNQQ05UUiA9IFJFR19SRUFEKHBpcGVBID8g RFNQQUNOVFIgOiBEU1BCQ05UUik7CisJY3J0Y19zdGF0ZS0+c2F2ZVBJUEVDT05GID0gUkVHX1JF QUQocGlwZUEgPyBQSVBFQUNPTkYgOiBQSVBFQkNPTkYpOworCWNydGNfc3RhdGUtPnNhdmVQSVBF U1JDID0gUkVHX1JFQUQocGlwZUEgPyBQSVBFQVNSQyA6IFBJUEVCU1JDKTsKKwljcnRjX3N0YXRl LT5zYXZlRlAwID0gUkVHX1JFQUQocGlwZUEgPyBGUEEwIDogRlBCMCk7CisJY3J0Y19zdGF0ZS0+ c2F2ZUZQMSA9IFJFR19SRUFEKHBpcGVBID8gRlBBMSA6IEZQQjEpOworCWNydGNfc3RhdGUtPnNh dmVEUExMID0gUkVHX1JFQUQocGlwZUEgPyBEUExMX0EgOiBEUExMX0IpOworCWNydGNfc3RhdGUt PnNhdmVIVE9UQUwgPSBSRUdfUkVBRChwaXBlQSA/IEhUT1RBTF9BIDogSFRPVEFMX0IpOworCWNy dGNfc3RhdGUtPnNhdmVIQkxBTksgPSBSRUdfUkVBRChwaXBlQSA/IEhCTEFOS19BIDogSEJMQU5L X0IpOworCWNydGNfc3RhdGUtPnNhdmVIU1lOQyA9IFJFR19SRUFEKHBpcGVBID8gSFNZTkNfQSA6 IEhTWU5DX0IpOworCWNydGNfc3RhdGUtPnNhdmVWVE9UQUwgPSBSRUdfUkVBRChwaXBlQSA/IFZU T1RBTF9BIDogVlRPVEFMX0IpOworCWNydGNfc3RhdGUtPnNhdmVWQkxBTksgPSBSRUdfUkVBRChw aXBlQSA/IFZCTEFOS19BIDogVkJMQU5LX0IpOworCWNydGNfc3RhdGUtPnNhdmVWU1lOQyA9IFJF R19SRUFEKHBpcGVBID8gVlNZTkNfQSA6IFZTWU5DX0IpOworCWNydGNfc3RhdGUtPnNhdmVEU1BT VFJJREUgPSBSRUdfUkVBRChwaXBlQSA/IERTUEFTVFJJREUgOiBEU1BCU1RSSURFKTsKKworCS8q Tk9URTogRFNQU0laRSBEU1BQT1Mgb25seSBmb3IgcHNiKi8KKwljcnRjX3N0YXRlLT5zYXZlRFNQ U0laRSA9IFJFR19SRUFEKHBpcGVBID8gRFNQQVNJWkUgOiBEU1BCU0laRSk7CisJY3J0Y19zdGF0 ZS0+c2F2ZURTUFBPUyA9IFJFR19SRUFEKHBpcGVBID8gRFNQQVBPUyA6IERTUEJQT1MpOworCisJ Y3J0Y19zdGF0ZS0+c2F2ZURTUEJBU0UgPSBSRUdfUkVBRChwaXBlQSA/IERTUEFCQVNFIDogRFNQ QkJBU0UpOworCisJcGFsZXR0ZVJlZyA9IHBpcGVBID8gUEFMRVRURV9BIDogUEFMRVRURV9COwor CWZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkKKwkJY3J0Y19zdGF0ZS0+c2F2ZVBhbGV0dGVbaV0g PSBSRUdfUkVBRChwYWxldHRlUmVnICsgKGkgPDwgMikpOworfQorCisvKioKKyAqIFJlc3RvcmUg SFcgc3RhdGVzIG9mIGdpdmluZyBjcnRjCisgKi8KK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9jcnRj X3Jlc3RvcmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYgPSBjcnRjLT5kZXY7CisJLyogc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqIGRldl9wcml2ID0K KwkJCQkoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7ICovCisJc3Ry dWN0IHBzYl9pbnRlbF9jcnRjICpwc2JfaW50ZWxfY3J0YyA9ICB0b19wc2JfaW50ZWxfY3J0Yyhj cnRjKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2NydGNfc3RhdGUgKmNydGNfc3RhdGUgPSBwc2JfaW50 ZWxfY3J0Yy0+Y3J0Y19zdGF0ZTsKKwkvKiBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICog Y3J0Y19mdW5jcyA9IGNydGMtPmhlbHBlcl9wcml2YXRlOyAqLworCWludCBwaXBlQSA9IChwc2Jf aW50ZWxfY3J0Yy0+cGlwZSA9PSAwKTsKKwl1aW50MzJfdCBwYWxldHRlUmVnOworCWludCBpOwor CisJaWYgKCFjcnRjX3N0YXRlKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJObyBjcnRjIHN0YXRl XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjcnRjX3N0YXRlLT5zYXZlRFBMTCAmIERQTExf VkNPX0VOQUJMRSkgeworCQlSRUdfV1JJVEUocGlwZUEgPyBEUExMX0EgOiBEUExMX0IsCisJCQlj cnRjX3N0YXRlLT5zYXZlRFBMTCAmIH5EUExMX1ZDT19FTkFCTEUpOworCQlSRUdfUkVBRChwaXBl QSA/IERQTExfQSA6IERQTExfQik7CisJCXVkZWxheSgxNTApOworCX0KKworCVJFR19XUklURShw aXBlQSA/IEZQQTAgOiBGUEIwLCBjcnRjX3N0YXRlLT5zYXZlRlAwKTsKKwlSRUdfUkVBRChwaXBl QSA/IEZQQTAgOiBGUEIwKTsKKworCVJFR19XUklURShwaXBlQSA/IEZQQTEgOiBGUEIxLCBjcnRj X3N0YXRlLT5zYXZlRlAxKTsKKwlSRUdfUkVBRChwaXBlQSA/IEZQQTEgOiBGUEIxKTsKKworCVJF R19XUklURShwaXBlQSA/IERQTExfQSA6IERQTExfQiwgY3J0Y19zdGF0ZS0+c2F2ZURQTEwpOwor CVJFR19SRUFEKHBpcGVBID8gRFBMTF9BIDogRFBMTF9CKTsKKwl1ZGVsYXkoMTUwKTsKKworCVJF R19XUklURShwaXBlQSA/IEhUT1RBTF9BIDogSFRPVEFMX0IsIGNydGNfc3RhdGUtPnNhdmVIVE9U QUwpOworCVJFR19XUklURShwaXBlQSA/IEhCTEFOS19BIDogSEJMQU5LX0IsIGNydGNfc3RhdGUt PnNhdmVIQkxBTkspOworCVJFR19XUklURShwaXBlQSA/IEhTWU5DX0EgOiBIU1lOQ19CLCBjcnRj X3N0YXRlLT5zYXZlSFNZTkMpOworCVJFR19XUklURShwaXBlQSA/IFZUT1RBTF9BIDogVlRPVEFM X0IsIGNydGNfc3RhdGUtPnNhdmVWVE9UQUwpOworCVJFR19XUklURShwaXBlQSA/IFZCTEFOS19B IDogVkJMQU5LX0IsIGNydGNfc3RhdGUtPnNhdmVWQkxBTkspOworCVJFR19XUklURShwaXBlQSA/ IFZTWU5DX0EgOiBWU1lOQ19CLCBjcnRjX3N0YXRlLT5zYXZlVlNZTkMpOworCVJFR19XUklURShw aXBlQSA/IERTUEFTVFJJREUgOiBEU1BCU1RSSURFLCBjcnRjX3N0YXRlLT5zYXZlRFNQU1RSSURF KTsKKworCVJFR19XUklURShwaXBlQSA/IERTUEFTSVpFIDogRFNQQlNJWkUsIGNydGNfc3RhdGUt PnNhdmVEU1BTSVpFKTsKKwlSRUdfV1JJVEUocGlwZUEgPyBEU1BBUE9TIDogRFNQQlBPUywgY3J0 Y19zdGF0ZS0+c2F2ZURTUFBPUyk7CisKKwlSRUdfV1JJVEUocGlwZUEgPyBQSVBFQVNSQyA6IFBJ UEVCU1JDLCBjcnRjX3N0YXRlLT5zYXZlUElQRVNSQyk7CisJUkVHX1dSSVRFKHBpcGVBID8gRFNQ QUJBU0UgOiBEU1BCQkFTRSwgY3J0Y19zdGF0ZS0+c2F2ZURTUEJBU0UpOworCVJFR19XUklURShw aXBlQSA/IFBJUEVBQ09ORiA6IFBJUEVCQ09ORiwgY3J0Y19zdGF0ZS0+c2F2ZVBJUEVDT05GKTsK KworCXBzYl9pbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKworCVJFR19XUklURShwaXBlQSA/ IERTUEFDTlRSIDogRFNQQkNOVFIsIGNydGNfc3RhdGUtPnNhdmVEU1BDTlRSKTsKKwlSRUdfV1JJ VEUocGlwZUEgPyBEU1BBQkFTRSA6IERTUEJCQVNFLCBjcnRjX3N0YXRlLT5zYXZlRFNQQkFTRSk7 CisKKwlwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKGRldik7CisKKwlwYWxldHRlUmVnID0gcGlw ZUEgPyBQQUxFVFRFX0EgOiBQQUxFVFRFX0I7CisJZm9yIChpID0gMDsgaSA8IDI1NjsgKytpKQor CQlSRUdfV1JJVEUocGFsZXR0ZVJlZyArIChpIDw8IDIpLCBjcnRjX3N0YXRlLT5zYXZlUGFsZXR0 ZVtpXSk7Cit9CisKK3N0YXRpYyBpbnQgcHNiX2ludGVsX2NydGNfY3Vyc29yX3NldChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCSB1 aW50MzJfdCBoYW5kbGUsCisJCQkJIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcHNiX2ludGVs X2NydGMgKnBzYl9pbnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBp cGUgPSBwc2JfaW50ZWxfY3J0Yy0+cGlwZTsKKwl1aW50MzJfdCBjb250cm9sID0gKHBpcGUgPT0g MCkgPyBDVVJBQ05UUiA6IENVUkJDTlRSOworCXVpbnQzMl90IGJhc2UgPSAocGlwZSA9PSAwKSA/ IENVUkFCQVNFIDogQ1VSQkJBU0U7CisJdWludDMyX3QgdGVtcDsKKwlzaXplX3QgYWRkciA9IDA7 CisJc3RydWN0IGd0dF9yYW5nZSAqZ3Q7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJ aW50IHJldDsKKworCS8qIGlmIHdlIHdhbnQgdG8gdHVybiBvZiB0aGUgY3Vyc29yIGlnbm9yZSB3 aWR0aCBhbmQgaGVpZ2h0ICovCisJaWYgKCFoYW5kbGUpIHsKKwkJLyogdHVybiBvZmYgdGhlIGN1 cnNvciAqLworCQl0ZW1wID0gQ1VSU09SX01PREVfRElTQUJMRTsKKworCQlpZiAoZ21hX3Bvd2Vy X2JlZ2luKGRldiwgZmFsc2UpKSB7CisJCQlSRUdfV1JJVEUoY29udHJvbCwgdGVtcCk7CisJCQlS RUdfV1JJVEUoYmFzZSwgMCk7CisJCQlnbWFfcG93ZXJfZW5kKGRldik7CisJCX0KKworCQkvKiBV bnBpbiB0aGUgb2xkIEdFTSBvYmplY3QgKi8KKwkJaWYgKHBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jf b2JqKSB7CisJCQlndCA9IGNvbnRhaW5lcl9vZihwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaiwK KwkJCQkJCQlzdHJ1Y3QgZ3R0X3JhbmdlLCBnZW0pOworCQkJcHNiX2d0dF91bnBpbihndCk7CisJ CQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaik7 CisJCQlwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaiA9IE5VTEw7CisJCX0KKworCQlyZXR1cm4g MDsKKwl9CisKKwkvKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IDY0eDY0IGN1cnNvcnMgKi8K KwlpZiAod2lkdGggIT0gNjQgfHwgaGVpZ2h0ICE9IDY0KSB7CisJCWRldl9kYmcoZGV2LT5kZXYs ICJ3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IDY0eDY0IGN1cnNvcnNcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3By aXYsIGhhbmRsZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKG9iai0+ c2l6ZSA8IHdpZHRoICogaGVpZ2h0ICogNCkgeworCQlkZXZfZGJnKGRldi0+ZGV2LCAiYnVmZmVy IGlzIHRvIHNtYWxsXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZ3QgPSBjb250YWlu ZXJfb2Yob2JqLCBzdHJ1Y3QgZ3R0X3JhbmdlLCBnZW0pOworCisJLyogUGluIHRoZSBtZW1vcnkg aW50byB0aGUgR1RUICovCisJcmV0ID0gcHNiX2d0dF9waW4oZ3QpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihkZXYtPmRldiwgIkNhbiBub3QgcGluIGRvd24gaGFuZGxlIDB4JXhcbiIsIGhhbmRs ZSk7CisJCXJldHVybiByZXQ7CisJfQorCisKKwlhZGRyID0gZ3QtPm9mZnNldDsJLyogT3IgcmVz b3VyY2Uuc3RhcnQgPz8/ICovCisKKwlwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX2FkZHIgPSBhZGRy OworCisJdGVtcCA9IDA7CisJLyogc2V0IHRoZSBwaXBlIGZvciB0aGUgY3Vyc29yICovCisJdGVt cCB8PSAocGlwZSA8PCAyOCk7CisJdGVtcCB8PSBDVVJTT1JfTU9ERV82NF9BUkdCX0FYIHwgTUNV UlNPUl9HQU1NQV9FTkFCTEU7CisKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7 CisJCVJFR19XUklURShjb250cm9sLCB0ZW1wKTsKKwkJUkVHX1dSSVRFKGJhc2UsIGFkZHIpOwor CQlnbWFfcG93ZXJfZW5kKGRldik7CisJfQorCisJLyogdW5waW4gdGhlIG9sZCBibyAqLworCWlm IChwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaikgeworCQlndCA9IGNvbnRhaW5lcl9vZihwc2Jf aW50ZWxfY3J0Yy0+Y3Vyc29yX29iaiwKKwkJCQkJCQlzdHJ1Y3QgZ3R0X3JhbmdlLCBnZW0pOwor CQlwc2JfZ3R0X3VucGluKGd0KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocHNiX2lu dGVsX2NydGMtPmN1cnNvcl9vYmopOworCQlwc2JfaW50ZWxfY3J0Yy0+Y3Vyc29yX29iaiA9IG9i ajsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHNiX2ludGVsX2NydGNfY3Vyc29y X21vdmUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgeCwgaW50IHkpCit7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcHNiX2ludGVsX2NydGMgKnBzYl9p bnRlbF9jcnRjID0gdG9fcHNiX2ludGVsX2NydGMoY3J0Yyk7CisJaW50IHBpcGUgPSBwc2JfaW50 ZWxfY3J0Yy0+cGlwZTsKKwl1aW50MzJfdCB0ZW1wID0gMDsKKwl1aW50MzJfdCBhZGRyOworCisK KwlpZiAoeCA8IDApIHsKKwkJdGVtcCB8PSAoQ1VSU09SX1BPU19TSUdOIDw8IENVUlNPUl9YX1NI SUZUKTsKKwkJeCA9IC14OworCX0KKwlpZiAoeSA8IDApIHsKKwkJdGVtcCB8PSAoQ1VSU09SX1BP U19TSUdOIDw8IENVUlNPUl9ZX1NISUZUKTsKKwkJeSA9IC15OworCX0KKworCXRlbXAgfD0gKCh4 ICYgQ1VSU09SX1BPU19NQVNLKSA8PCBDVVJTT1JfWF9TSElGVCk7CisJdGVtcCB8PSAoKHkgJiBD VVJTT1JfUE9TX01BU0spIDw8IENVUlNPUl9ZX1NISUZUKTsKKworCWFkZHIgPSBwc2JfaW50ZWxf Y3J0Yy0+Y3Vyc29yX2FkZHI7CisKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7 CisJCVJFR19XUklURSgocGlwZSA9PSAwKSA/IENVUkFQT1MgOiBDVVJCUE9TLCB0ZW1wKTsKKwkJ UkVHX1dSSVRFKChwaXBlID09IDApID8gQ1VSQUJBU0UgOiBDVVJCQkFTRSwgYWRkcik7CisJCWdt YV9wb3dlcl9lbmQoZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHNiX2ludGVsX2Ny dGNfZ2FtbWFfc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsCisJCQkgdTE2ICpn cmVlbiwgdTE2ICpibHVlLCB1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBzaXplKQoreworCXN0cnVj dCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRj KTsKKwlpbnQgaTsKKworCWlmIChzaXplICE9IDI1NikKKwkJcmV0dXJuOworCisJZm9yIChpID0g MDsgaSA8IDI1NjsgaSsrKSB7CisJCXBzYl9pbnRlbF9jcnRjLT5sdXRfcltpXSA9IHJlZFtpXSA+ PiA4OworCQlwc2JfaW50ZWxfY3J0Yy0+bHV0X2dbaV0gPSBncmVlbltpXSA+PiA4OworCQlwc2Jf aW50ZWxfY3J0Yy0+bHV0X2JbaV0gPSBibHVlW2ldID4+IDg7CisJfQorCisJcHNiX2ludGVsX2Ny dGNfbG9hZF9sdXQoY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQgcHNiX2NydGNfc2V0X2NvbmZpZyhz dHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2ID0gc2V0LT5jcnRjLT5kZXY7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKCFkZXZfcHJpdi0+cnBtX2VuYWJsZWQpCisJ CXJldHVybiBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZyhzZXQpOworCisJcG1fcnVudGltZV9m b3JiaWQoJmRldi0+cGRldi0+ZGV2KTsKKwlyZXQgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZp ZyhzZXQpOworCXBtX3J1bnRpbWVfYWxsb3coJmRldi0+cGRldi0+ZGV2KTsKKwlyZXR1cm4gcmV0 OworfQorCisvKiBSZXR1cm5zIHRoZSBjbG9jayBvZiB0aGUgY3VycmVudGx5IHByb2dyYW1tZWQg bW9kZSBvZiB0aGUgZ2l2ZW4gcGlwZS4gKi8KK3N0YXRpYyBpbnQgcHNiX2ludGVsX2NydGNfY2xv Y2tfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9jcnRjICpjcnRj KQoreworCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50 ZWxfY3J0YyhjcnRjKTsKKwlpbnQgcGlwZSA9IHBzYl9pbnRlbF9jcnRjLT5waXBlOworCXUzMiBk cGxsOworCXUzMiBmcDsKKwlzdHJ1Y3QgcHNiX2ludGVsX2Nsb2NrX3QgY2xvY2s7CisJYm9vbCBp c19sdmRzOworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJp dmF0ZTsKKworCWlmIChnbWFfcG93ZXJfYmVnaW4oZGV2LCBmYWxzZSkpIHsKKwkJZHBsbCA9IFJF R19SRUFEKChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9CKTsKKwkJaWYgKChkcGxsICYgRElT UExBWV9SQVRFX1NFTEVDVF9GUEExKSA9PSAwKQorCQkJZnAgPSBSRUdfUkVBRCgocGlwZSA9PSAw KSA/IEZQQTAgOiBGUEIwKTsKKwkJZWxzZQorCQkJZnAgPSBSRUdfUkVBRCgocGlwZSA9PSAwKSA/ IEZQQTEgOiBGUEIxKTsKKwkJaXNfbHZkcyA9IChwaXBlID09IDEpICYmIChSRUdfUkVBRChMVkRT KSAmIExWRFNfUE9SVF9FTik7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKKwl9IGVsc2UgeworCQlk cGxsID0gKHBpcGUgPT0gMCkgPworCQkJZGV2X3ByaXYtPnNhdmVEUExMX0EgOiBkZXZfcHJpdi0+ c2F2ZURQTExfQjsKKworCQlpZiAoKGRwbGwgJiBESVNQTEFZX1JBVEVfU0VMRUNUX0ZQQTEpID09 IDApCisJCQlmcCA9IChwaXBlID09IDApID8KKwkJCQlkZXZfcHJpdi0+c2F2ZUZQQTAgOgorCQkJ CWRldl9wcml2LT5zYXZlRlBCMDsKKwkJZWxzZQorCQkJZnAgPSAocGlwZSA9PSAwKSA/CisJCQkJ ZGV2X3ByaXYtPnNhdmVGUEExIDoKKwkJCQlkZXZfcHJpdi0+c2F2ZUZQQjE7CisKKwkJaXNfbHZk cyA9IChwaXBlID09IDEpICYmIChkZXZfcHJpdi0+c2F2ZUxWRFMgJiBMVkRTX1BPUlRfRU4pOwor CX0KKworCWNsb2NrLm0xID0gKGZwICYgRlBfTTFfRElWX01BU0spID4+IEZQX00xX0RJVl9TSElG VDsKKwljbG9jay5tMiA9IChmcCAmIEZQX00yX0RJVl9NQVNLKSA+PiBGUF9NMl9ESVZfU0hJRlQ7 CisJY2xvY2subiA9IChmcCAmIEZQX05fRElWX01BU0spID4+IEZQX05fRElWX1NISUZUOworCisJ aWYgKGlzX2x2ZHMpIHsKKwkJY2xvY2sucDEgPQorCQkgICAgZmZzKChkcGxsICYKKwkJCSBEUExM X0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTKSA+PgorCQkJRFBMTF9GUEEwMV9QMV9Q T1NUX0RJVl9TSElGVCk7CisJCWNsb2NrLnAyID0gMTQ7CisKKwkJaWYgKChkcGxsICYgUExMX1JF Rl9JTlBVVF9NQVNLKSA9PQorCQkgICAgUExMQl9SRUZfSU5QVVRfU1BSRUFEU1BFQ1RSVU1JTikg eworCQkJLyogWFhYOiBtaWdodCBub3QgYmUgNjZNSHogKi8KKwkJCWk4eHhfY2xvY2soNjYwMDAs ICZjbG9jayk7CisJCX0gZWxzZQorCQkJaTh4eF9jbG9jayg0ODAwMCwgJmNsb2NrKTsKKwl9IGVs c2UgeworCQlpZiAoZHBsbCAmIFBMTF9QMV9ESVZJREVfQllfVFdPKQorCQkJY2xvY2sucDEgPSAy OworCQllbHNlIHsKKwkJCWNsb2NrLnAxID0KKwkJCSAgICAoKGRwbGwgJgorCQkJICAgICAgRFBM TF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzApID4+CisJCQkgICAgIERQTExfRlBBMDFfUDFf UE9TVF9ESVZfU0hJRlQpICsgMjsKKwkJfQorCQlpZiAoZHBsbCAmIFBMTF9QMl9ESVZJREVfQllf NCkKKwkJCWNsb2NrLnAyID0gNDsKKwkJZWxzZQorCQkJY2xvY2sucDIgPSAyOworCisJCWk4eHhf Y2xvY2soNDgwMDAsICZjbG9jayk7CisJfQorCisJLyogWFhYOiBJdCB3b3VsZCBiZSBuaWNlIHRv IHZhbGlkYXRlIHRoZSBjbG9ja3MsIGJ1dCB3ZSBjYW4ndCByZXVzZQorCSAqIGk4MzBQbGxJc1Zh bGlkKCkgYmVjYXVzZSBpdCByZWxpZXMgb24gdGhlIHhmODZfY29uZmlnIGNvbm5lY3RvcgorCSAq IGNvbmZpZ3VyYXRpb24gYmVpbmcgYWNjdXJhdGUsIHdoaWNoIGl0IGlzbid0IG5lY2Vzc2FyaWx5 LgorCSAqLworCisJcmV0dXJuIGNsb2NrLmRvdDsKK30KKworLyoqIFJldHVybnMgdGhlIGN1cnJl bnRseSBwcm9ncmFtbWVkIG1vZGUgb2YgdGhlIGdpdmVuIHBpcGUuICovCitzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqcHNiX2ludGVsX2NydGNfbW9kZV9nZXQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHBzYl9pbnRl bF9jcnRjICpwc2JfaW50ZWxfY3J0YyA9IHRvX3BzYl9pbnRlbF9jcnRjKGNydGMpOworCWludCBw aXBlID0gcHNiX2ludGVsX2NydGMtPnBpcGU7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGU7CisJaW50IGh0b3Q7CisJaW50IGhzeW5jOworCWludCB2dG90OworCWludCB2c3luYzsKKwlz dHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlp ZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CisJCWh0b3QgPSBSRUdfUkVBRCgocGlw ZSA9PSAwKSA/IEhUT1RBTF9BIDogSFRPVEFMX0IpOworCQloc3luYyA9IFJFR19SRUFEKChwaXBl ID09IDApID8gSFNZTkNfQSA6IEhTWU5DX0IpOworCQl2dG90ID0gUkVHX1JFQUQoKHBpcGUgPT0g MCkgPyBWVE9UQUxfQSA6IFZUT1RBTF9CKTsKKwkJdnN5bmMgPSBSRUdfUkVBRCgocGlwZSA9PSAw KSA/IFZTWU5DX0EgOiBWU1lOQ19CKTsKKwkJZ21hX3Bvd2VyX2VuZChkZXYpOworCX0gZWxzZSB7 CisJCWh0b3QgPSAocGlwZSA9PSAwKSA/CisJCQlkZXZfcHJpdi0+c2F2ZUhUT1RBTF9BIDogZGV2 X3ByaXYtPnNhdmVIVE9UQUxfQjsKKwkJaHN5bmMgPSAocGlwZSA9PSAwKSA/CisJCQlkZXZfcHJp di0+c2F2ZUhTWU5DX0EgOiBkZXZfcHJpdi0+c2F2ZUhTWU5DX0I7CisJCXZ0b3QgPSAocGlwZSA9 PSAwKSA/CisJCQlkZXZfcHJpdi0+c2F2ZVZUT1RBTF9BIDogZGV2X3ByaXYtPnNhdmVWVE9UQUxf QjsKKwkJdnN5bmMgPSAocGlwZSA9PSAwKSA/CisJCQlkZXZfcHJpdi0+c2F2ZVZTWU5DX0EgOiBk ZXZfcHJpdi0+c2F2ZVZTWU5DX0I7CisJfQorCisJbW9kZSA9IGt6YWxsb2Moc2l6ZW9mKCptb2Rl KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtb2RlKQorCQlyZXR1cm4gTlVMTDsKKworCW1vZGUtPmNs b2NrID0gcHNiX2ludGVsX2NydGNfY2xvY2tfZ2V0KGRldiwgY3J0Yyk7CisJbW9kZS0+aGRpc3Bs YXkgPSAoaHRvdCAmIDB4ZmZmZikgKyAxOworCW1vZGUtPmh0b3RhbCA9ICgoaHRvdCAmIDB4ZmZm ZjAwMDApID4+IDE2KSArIDE7CisJbW9kZS0+aHN5bmNfc3RhcnQgPSAoaHN5bmMgJiAweGZmZmYp ICsgMTsKKwltb2RlLT5oc3luY19lbmQgPSAoKGhzeW5jICYgMHhmZmZmMDAwMCkgPj4gMTYpICsg MTsKKwltb2RlLT52ZGlzcGxheSA9ICh2dG90ICYgMHhmZmZmKSArIDE7CisJbW9kZS0+dnRvdGFs ID0gKCh2dG90ICYgMHhmZmZmMDAwMCkgPj4gMTYpICsgMTsKKwltb2RlLT52c3luY19zdGFydCA9 ICh2c3luYyAmIDB4ZmZmZikgKyAxOworCW1vZGUtPnZzeW5jX2VuZCA9ICgodnN5bmMgJiAweGZm ZmYwMDAwKSA+PiAxNikgKyAxOworCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisJZHJtX21v ZGVfc2V0X2NydGNpbmZvKG1vZGUsIDApOworCisJcmV0dXJuIG1vZGU7Cit9CisKK3ZvaWQgcHNi X2ludGVsX2NydGNfZGVzdHJveShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHBz Yl9pbnRlbF9jcnRjICpwc2JfaW50ZWxfY3J0YyA9IHRvX3BzYl9pbnRlbF9jcnRjKGNydGMpOwor CXN0cnVjdCBndHRfcmFuZ2UgKmd0OworCisJLyogVW5waW4gdGhlIG9sZCBHRU0gb2JqZWN0ICov CisJaWYgKHBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqKSB7CisJCWd0ID0gY29udGFpbmVyX29m KHBzYl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqLAorCQkJCQkJc3RydWN0IGd0dF9yYW5nZSwgZ2Vt KTsKKwkJcHNiX2d0dF91bnBpbihndCk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHBz Yl9pbnRlbF9jcnRjLT5jdXJzb3Jfb2JqKTsKKwkJcHNiX2ludGVsX2NydGMtPmN1cnNvcl9vYmog PSBOVUxMOworCX0KKwlrZnJlZShwc2JfaW50ZWxfY3J0Yy0+Y3J0Y19zdGF0ZSk7CisJZHJtX2Ny dGNfY2xlYW51cChjcnRjKTsKKwlrZnJlZShwc2JfaW50ZWxfY3J0Yyk7Cit9CisKK2NvbnN0IHN0 cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgcHNiX2ludGVsX2hlbHBlcl9mdW5jcyA9IHsKKwku ZHBtcyA9IHBzYl9pbnRlbF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBwc2JfaW50ZWxfY3J0 Y19tb2RlX2ZpeHVwLAorCS5tb2RlX3NldCA9IHBzYl9pbnRlbF9jcnRjX21vZGVfc2V0LAorCS5t b2RlX3NldF9iYXNlID0gcHNiX2ludGVsX3BpcGVfc2V0X2Jhc2UsCisJLnByZXBhcmUgPSBwc2Jf aW50ZWxfY3J0Y19wcmVwYXJlLAorCS5jb21taXQgPSBwc2JfaW50ZWxfY3J0Y19jb21taXQsCit9 OworCitjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgcHNiX2ludGVsX2NydGNfZnVuY3MgPSB7 CisJLnNhdmUgPSBwc2JfaW50ZWxfY3J0Y19zYXZlLAorCS5yZXN0b3JlID0gcHNiX2ludGVsX2Ny dGNfcmVzdG9yZSwKKwkuY3Vyc29yX3NldCA9IHBzYl9pbnRlbF9jcnRjX2N1cnNvcl9zZXQsCisJ LmN1cnNvcl9tb3ZlID0gcHNiX2ludGVsX2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1hX3NldCA9 IHBzYl9pbnRlbF9jcnRjX2dhbW1hX3NldCwKKwkuc2V0X2NvbmZpZyA9IHBzYl9jcnRjX3NldF9j b25maWcsCisJLmRlc3Ryb3kgPSBwc2JfaW50ZWxfY3J0Y19kZXN0cm95LAorfTsKKworLyoKKyAq IFNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBjdXJzb3IgY29udHJvbCBhbmQgYmFzZSByZWdpc3Rl cgorICogdG8gemVyby4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGgvdyBkZWZlY3Qgb24gT2Fr dHJhaWwKKyAqLworc3RhdGljIHZvaWQgcHNiX2ludGVsX2N1cnNvcl9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIGludCBwaXBlKQoreworCXUzMiBjb250cm9sWzNdID0geyBDVVJBQ05UUiwg Q1VSQkNOVFIsIENVUkNDTlRSIH07CisJdTMyIGJhc2VbM10gPSB7IENVUkFCQVNFLCBDVVJCQkFT RSwgQ1VSQ0JBU0UgfTsKKworCVJFR19XUklURShjb250cm9sW3BpcGVdLCAwKTsKKwlSRUdfV1JJ VEUoYmFzZVtwaXBlXSwgMCk7Cit9CisKK3ZvaWQgcHNiX2ludGVsX2NydGNfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQgcGlwZSwKKwkJICAgICBzdHJ1Y3QgcHNiX2ludGVsX21vZGVf ZGV2aWNlICptb2RlX2RldikKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHBzYl9pbnRlbF9jcnRjICpwc2JfaW50ZWxfY3J0 YzsKKwlpbnQgaTsKKwl1aW50MTZfdCAqcl9iYXNlLCAqZ19iYXNlLCAqYl9iYXNlOworCisJLyog V2UgYWxsb2NhdGUgYSBleHRyYSBhcnJheSBvZiBkcm1fY29ubmVjdG9yIHBvaW50ZXJzCisJICog Zm9yIGZiZGV2IGFmdGVyIHRoZSBjcnRjICovCisJcHNiX2ludGVsX2NydGMgPQorCSAgICBremFs bG9jKHNpemVvZihzdHJ1Y3QgcHNiX2ludGVsX2NydGMpICsKKwkJICAgIChJTlRFTEZCX0NPTk5f TElNSVQgKiBzaXplb2Yoc3RydWN0IGRybV9jb25uZWN0b3IgKikpLAorCQkgICAgR0ZQX0tFUk5F TCk7CisJaWYgKHBzYl9pbnRlbF9jcnRjID09IE5VTEwpCisJCXJldHVybjsKKworCXBzYl9pbnRl bF9jcnRjLT5jcnRjX3N0YXRlID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHBzYl9pbnRlbF9j cnRjX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwc2JfaW50ZWxfY3J0Yy0+Y3J0Y19zdGF0 ZSkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiQ3J0YyBzdGF0ZSBlcnJvcjogTm8gbWVtb3J5XG4i KTsKKwkJa2ZyZWUocHNiX2ludGVsX2NydGMpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHRo ZSBDUlRDIG9wZXJhdGlvbnMgZnJvbSB0aGUgY2hpcCBzcGVjaWZpYyBkYXRhICovCisJZHJtX2Ny dGNfaW5pdChkZXYsICZwc2JfaW50ZWxfY3J0Yy0+YmFzZSwgZGV2X3ByaXYtPm9wcy0+Y3J0Y19m dW5jcyk7CisKKwlkcm1fbW9kZV9jcnRjX3NldF9nYW1tYV9zaXplKCZwc2JfaW50ZWxfY3J0Yy0+ YmFzZSwgMjU2KTsKKwlwc2JfaW50ZWxfY3J0Yy0+cGlwZSA9IHBpcGU7CisJcHNiX2ludGVsX2Ny dGMtPnBsYW5lID0gcGlwZTsKKworCXJfYmFzZSA9IHBzYl9pbnRlbF9jcnRjLT5iYXNlLmdhbW1h X3N0b3JlOworCWdfYmFzZSA9IHJfYmFzZSArIDI1NjsKKwliX2Jhc2UgPSBnX2Jhc2UgKyAyNTY7 CisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXBzYl9pbnRlbF9jcnRjLT5sdXRfcltp XSA9IGk7CisJCXBzYl9pbnRlbF9jcnRjLT5sdXRfZ1tpXSA9IGk7CisJCXBzYl9pbnRlbF9jcnRj LT5sdXRfYltpXSA9IGk7CisJCXJfYmFzZVtpXSA9IGkgPDwgODsKKwkJZ19iYXNlW2ldID0gaSA8 PCA4OworCQliX2Jhc2VbaV0gPSBpIDw8IDg7CisKKwkJcHNiX2ludGVsX2NydGMtPmx1dF9hZGpb aV0gPSAwOworCX0KKworCXBzYl9pbnRlbF9jcnRjLT5tb2RlX2RldiA9IG1vZGVfZGV2OworCXBz Yl9pbnRlbF9jcnRjLT5jdXJzb3JfYWRkciA9IDA7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRkKCZw c2JfaW50ZWxfY3J0Yy0+YmFzZSwKKwkJCQkJCWRldl9wcml2LT5vcHMtPmNydGNfaGVscGVyKTsK KworCS8qIFNldHVwIHRoZSBhcnJheSBvZiBkcm1fY29ubmVjdG9yIHBvaW50ZXIgYXJyYXkgKi8K Kwlwc2JfaW50ZWxfY3J0Yy0+bW9kZV9zZXQuY3J0YyA9ICZwc2JfaW50ZWxfY3J0Yy0+YmFzZTsK KwlCVUdfT04ocGlwZSA+PSBBUlJBWV9TSVpFKGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBp bmcpIHx8CisJICAgICAgIGRldl9wcml2LT5wbGFuZV90b19jcnRjX21hcHBpbmdbcHNiX2ludGVs X2NydGMtPnBsYW5lXSAhPSBOVUxMKTsKKwlkZXZfcHJpdi0+cGxhbmVfdG9fY3J0Y19tYXBwaW5n W3BzYl9pbnRlbF9jcnRjLT5wbGFuZV0gPQorCQkJCQkJCSZwc2JfaW50ZWxfY3J0Yy0+YmFzZTsK KwlkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbcHNiX2ludGVsX2NydGMtPnBpcGVdID0K KwkJCQkJCQkmcHNiX2ludGVsX2NydGMtPmJhc2U7CisJcHNiX2ludGVsX2NydGMtPm1vZGVfc2V0 LmNvbm5lY3RvcnMgPQorCSAgICAoc3RydWN0IGRybV9jb25uZWN0b3IgKiopIChwc2JfaW50ZWxf Y3J0YyArIDEpOworCXBzYl9pbnRlbF9jcnRjLT5tb2RlX3NldC5udW1fY29ubmVjdG9ycyA9IDA7 CisJcHNiX2ludGVsX2N1cnNvcl9pbml0KGRldiwgcGlwZSk7Cit9CisKK2ludCBwc2JfaW50ZWxf Z2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEs CisJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9wc2JfcHJp dmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fcHNiX2dldF9w aXBlX2Zyb21fY3J0Y19pZF9hcmcgKnBpcGVfZnJvbV9jcnRjX2lkID0gZGF0YTsKKwlzdHJ1Y3Qg ZHJtX21vZGVfb2JqZWN0ICpkcm1tb2RlX29iajsKKwlzdHJ1Y3QgcHNiX2ludGVsX2NydGMgKmNy dGM7CisKKwlpZiAoIWRldl9wcml2KSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJjYWxsZWQgd2l0 aCBubyBpbml0aWFsaXphdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRybW1v ZGVfb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoZGV2LCBwaXBlX2Zyb21fY3J0Y19pZC0+Y3J0 Y19pZCwKKwkJCURSTV9NT0RFX09CSkVDVF9DUlRDKTsKKworCWlmICghZHJtbW9kZV9vYmopIHsK KwkJZGV2X2VycihkZXYtPmRldiwgIm5vIHN1Y2ggQ1JUQyBpZFxuIik7CisJCXJldHVybiAtRUlO VkFMOworCX0KKworCWNydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhvYmpfdG9fY3J0Yyhkcm1tb2Rl X29iaikpOworCXBpcGVfZnJvbV9jcnRjX2lkLT5waXBlID0gY3J0Yy0+cGlwZTsKKworCXJldHVy biAwOworfQorCitzdHJ1Y3QgZHJtX2NydGMgKnBzYl9pbnRlbF9nZXRfY3J0Y19mcm9tX3BpcGUo c3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUpCit7CisJc3RydWN0IGRybV9jcnRjICpj cnRjID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmRldi0+bW9kZV9jb25m aWcuY3J0Y19saXN0LCBoZWFkKSB7CisJCXN0cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVs X2NydGMgPSB0b19wc2JfaW50ZWxfY3J0YyhjcnRjKTsKKwkJaWYgKHBzYl9pbnRlbF9jcnRjLT5w aXBlID09IHBpcGUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGNydGM7Cit9CisKK2ludCBwc2Jf aW50ZWxfY29ubmVjdG9yX2Nsb25lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgdHlwZV9t YXNrKQoreworCWludCBpbmRleF9tYXNrID0gMDsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yOworCWludCBlbnRyeSA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3Rv ciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsCisJCQkgICAgaGVhZCkgeworCQlz dHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJCSAgICB0b19wc2Jf aW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJCWlmICh0eXBlX21hc2sgJiAoMSA8PCBwc2JfaW50 ZWxfb3V0cHV0LT50eXBlKSkKKwkJCWluZGV4X21hc2sgfD0gKDEgPDwgZW50cnkpOworCQllbnRy eSsrOworCX0KKwlyZXR1cm4gaW5kZXhfbWFzazsKK30KKworCit2b2lkIHBzYl9pbnRlbF9tb2Rl c2V0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fbW9kZV9jb25maWdf Y2xlYW51cChkZXYpOworfQorCisKKy8qIGN1cnJlbnQgaW50ZWwgZHJpdmVyIGRvZXNuJ3QgdGFr ZSBhZHZhbnRhZ2Ugb2YgZW5jb2RlcnMKKyAgIGFsd2F5cyBnaXZlIGJhY2sgdGhlIGVuY29kZXIg Zm9yIHRoZSBjb25uZWN0b3IKKyovCitzdHJ1Y3QgZHJtX2VuY29kZXIgKnBzYl9pbnRlbF9iZXN0 X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcHNi X2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJCQkJCXRvX3BzYl9pbnRlbF9vdXRw dXQoY29ubmVjdG9yKTsKKworCXJldHVybiAmcHNiX2ludGVsX291dHB1dC0+ZW5jOworfQorCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kaXNwbGF5LmggYi9k cml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kaXNwbGF5LmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1YjQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2Rpc3BsYXkuaApAQCAtMCwwICsxLDI4IEBACisvKiBj b3B5cmlnaHQgKGMpIDIwMDgsIEludGVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkg aXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv cgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogRXJpYyBB bmhvbHQgPGVyaWNAYW5ob2x0Lm5ldD4KKyAqLworCisjaWZuZGVmIF9JTlRFTF9ESVNQTEFZX0hf CisjZGVmaW5lIF9JTlRFTF9ESVNQTEFZX0hfCisKK2Jvb2wgcHNiX2ludGVsX3BpcGVfaGFzX3R5 cGUoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdHlwZSk7Cit2b2lkIHBzYl9pbnRlbF9jcnRj X2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLAorCQkJIHUxNiAqZ3Jl ZW4sIHUxNiAqYmx1ZSwgdWludDMyX3QgdHlwZSwgdWludDMyX3Qgc2l6ZSk7Cit2b2lkIHBzYl9p bnRlbF9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKTsKKworI2VuZGlmCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9kcnYuaCBiL2RyaXZlcnMv Z3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX2Rydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLmFjOTUzY2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21h NTAwL3BzYl9pbnRlbF9kcnYuaApAQCAtMCwwICsxLDIyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo YykgMjAwOS0yMDExLCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9fSU5URUxfRFJW X0hfXworI2RlZmluZSBfX0lOVEVMX0RSVl9IX18KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgor I2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o PgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlv Lmg+CisKKy8qCisgKiBEaXNwbGF5IHJlbGF0ZWQgc3R1ZmYKKyAqLworCisvKiBzdG9yZSBpbmZv cm1hdGlvbiBhYm91dCBhbiBJeHh4IERWTyAqLworLyogVGhlIGk4MzAtPmk4NjUgdXNlIG11bHRp cGxlIERWT3Mgd2l0aCBtdWx0aXBsZSBpMmNzICovCisvKiB0aGUgaTkxNSwgaTk0NSBoYXZlIGEg c2luZ2xlIHNEVk8gaTJjIGJ1cyAtIHdoaWNoIGlzIGRpZmZlcmVudCAqLworI2RlZmluZSBNQVhf T1VUUFVUUyA2CisvKiBtYXhpbXVtIGNvbm5lY3RvcnMgcGVyIGNydGNzIGluIHRoZSBtb2RlIHNl dCAqLworI2RlZmluZSBJTlRFTEZCX0NPTk5fTElNSVQgNAorCisjZGVmaW5lIElOVEVMX0kyQ19C VVNfRFZPIDEKKyNkZWZpbmUgSU5URUxfSTJDX0JVU19TRFZPIDIKKworLyogdGhlc2UgYXJlIG91 dHB1dHMgZnJvbSB0aGUgY2hpcCAtIGludGVncmF0ZWQgb25seQorICogZXh0ZXJuYWwgY2hpcHMg YXJlIHZpYSBEVk8gb3IgU0RWTyBvdXRwdXQgKi8KKyNkZWZpbmUgSU5URUxfT1VUUFVUX1VOVVNF RCAwCisjZGVmaW5lIElOVEVMX09VVFBVVF9BTkFMT0cgMQorI2RlZmluZSBJTlRFTF9PVVRQVVRf RFZPIDIKKyNkZWZpbmUgSU5URUxfT1VUUFVUX1NEVk8gMworI2RlZmluZSBJTlRFTF9PVVRQVVRf TFZEUyA0CisjZGVmaW5lIElOVEVMX09VVFBVVF9UVk9VVCA1CisjZGVmaW5lIElOVEVMX09VVFBV VF9IRE1JIDYKKyNkZWZpbmUgSU5URUxfT1VUUFVUX01JUEkgNworI2RlZmluZSBJTlRFTF9PVVRQ VVRfTUlQSTIgOAorCisjZGVmaW5lIElOVEVMX0RWT19DSElQX05PTkUgMAorI2RlZmluZSBJTlRF TF9EVk9fQ0hJUF9MVkRTIDEKKyNkZWZpbmUgSU5URUxfRFZPX0NISVBfVE1EUyAyCisjZGVmaW5l IElOVEVMX0RWT19DSElQX1RWT1VUIDQKKworLyoKKyAqIEhvbGQgaW5mb3JtYXRpb24gdXNlYWxs eSBwdXQgb24gdGhlIGRldmljZSBkcml2ZXIgcHJpdmF0ZXMgaGVyZSwKKyAqIHNpbmNlIGl0IG5l ZWRzIHRvIGJlIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgb2YgZGV2aWNlcyBkcml2ZXJzIHByaXZh dGVzLgorICovCitzdHJ1Y3QgcHNiX2ludGVsX21vZGVfZGV2aWNlIHsKKworCS8qCisJICogQWJz dHJhY3RlZCBtZW1vcnkgbWFuYWdlciBvcGVyYXRpb25zCisJICovCisJIHNpemVfdCgqYm9fb2Zm c2V0KSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqYm8pOworCisJLyoKKwkgKiBDdXJz b3IgKENhbiBnbyA/KQorCSAqLworCWludCBjdXJzb3JfbmVlZHNfcGh5c2ljYWw7CisKKwkvKgor CSAqIExWRFMgaW5mbworCSAqLworCWludCBiYWNrbGlnaHRfZHV0eV9jeWNsZTsJLyogcmVzdG9y ZSBiYWNrbGlnaHQgdG8gdGhpcyB2YWx1ZSAqLworCWJvb2wgcGFuZWxfd2FudHNfZGl0aGVyOwor CXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpwYW5lbF9maXhlZF9tb2RlOworCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICpwYW5lbF9maXhlZF9tb2RlMjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqdmJ0X21vZGU7CS8qIGlmIGFueSAqLworCisJdWludDMyX3Qgc2F2ZUJMQ19QV01fQ1RMOwor fTsKKworc3RydWN0IHBzYl9pbnRlbF9pMmNfY2hhbiB7CisJLyogZm9yIGdldHRpbmcgYXQgZGV2 LiBwcml2YXRlIChtbWlvIGV0Yy4pICovCisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7CisJ dTMyIHJlZzsJCS8qIEdQSU8gcmVnICovCisJc3RydWN0IGkyY19hZGFwdGVyIGFkYXB0ZXI7CisJ c3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGFsZ287CisJdTggc2xhdmVfYWRkcjsKK307CisKK3N0 cnVjdCBwc2JfaW50ZWxfb3V0cHV0IHsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciBiYXNlOworCisJ c3RydWN0IGRybV9lbmNvZGVyIGVuYzsKKwlpbnQgdHlwZTsKKworCXN0cnVjdCBwc2JfaW50ZWxf aTJjX2NoYW4gKmkyY19idXM7CS8qIGZvciBjb250cm9sIGZ1bmN0aW9ucyAqLworCXN0cnVjdCBw c2JfaW50ZWxfaTJjX2NoYW4gKmRkY19idXM7CS8qIGZvciBEREMgb25seSBzdHVmZiAqLworCWJv b2wgbG9hZF9kZXRlY3RfdGVtcDsKKwl2b2lkICpkZXZfcHJpdjsKKworCXN0cnVjdCBwc2JfaW50 ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqaGRtaV9pMmNf YWRhcHRlcjsJLyogZm9yIGNvbnRyb2wgZnVuY3Rpb25zICovCit9OworCitzdHJ1Y3QgcHNiX2lu dGVsX2NydGNfc3RhdGUgeworCXVpbnQzMl90IHNhdmVEU1BDTlRSOworCXVpbnQzMl90IHNhdmVQ SVBFQ09ORjsKKwl1aW50MzJfdCBzYXZlUElQRVNSQzsKKwl1aW50MzJfdCBzYXZlRFBMTDsKKwl1 aW50MzJfdCBzYXZlRlAwOworCXVpbnQzMl90IHNhdmVGUDE7CisJdWludDMyX3Qgc2F2ZUhUT1RB TDsKKwl1aW50MzJfdCBzYXZlSEJMQU5LOworCXVpbnQzMl90IHNhdmVIU1lOQzsKKwl1aW50MzJf dCBzYXZlVlRPVEFMOworCXVpbnQzMl90IHNhdmVWQkxBTks7CisJdWludDMyX3Qgc2F2ZVZTWU5D OworCXVpbnQzMl90IHNhdmVEU1BTVFJJREU7CisJdWludDMyX3Qgc2F2ZURTUFNJWkU7CisJdWlu dDMyX3Qgc2F2ZURTUFBPUzsKKwl1aW50MzJfdCBzYXZlRFNQQkFTRTsKKwl1aW50MzJfdCBzYXZl UGFsZXR0ZVsyNTZdOworfTsKKworc3RydWN0IHBzYl9pbnRlbF9jcnRjIHsKKwlzdHJ1Y3QgZHJt X2NydGMgYmFzZTsKKwlpbnQgcGlwZTsKKwlpbnQgcGxhbmU7CisJdWludDMyX3QgY3Vyc29yX2Fk ZHI7CisJdTggbHV0X3JbMjU2XSwgbHV0X2dbMjU2XSwgbHV0X2JbMjU2XTsKKwl1OCBsdXRfYWRq WzI1Nl07CisJc3RydWN0IHBzYl9pbnRlbF9mcmFtZWJ1ZmZlciAqZmJkZXZfZmI7CisJLyogYSBt b2RlX3NldCBmb3IgZmJkZXYgdXNlcnMgb24gdGhpcyBjcnRjICovCisJc3RydWN0IGRybV9tb2Rl X3NldCBtb2RlX3NldDsKKworCS8qIEdFTSBvYmplY3QgdGhhdCBob2xkcyBvdXIgY3Vyc29yICov CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpjdXJzb3Jfb2JqOworCisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgc2F2ZWRfbW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBzYXZlZF9hZGp1 c3RlZF9tb2RlOworCisJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXY7CisK KwkvKmNydGMgbW9kZSBzZXR0aW5nIGZsYWdzKi8KKwl1MzIgbW9kZV9mbGFnczsKKworCS8qIFNh dmVkIENydGMgSFcgc3RhdGVzICovCisJc3RydWN0IHBzYl9pbnRlbF9jcnRjX3N0YXRlICpjcnRj X3N0YXRlOworfTsKKworI2RlZmluZSB0b19wc2JfaW50ZWxfY3J0Yyh4KQlcCisJCWNvbnRhaW5l cl9vZih4LCBzdHJ1Y3QgcHNiX2ludGVsX2NydGMsIGJhc2UpCisjZGVmaW5lIHRvX3BzYl9pbnRl bF9vdXRwdXQoeCkJXAorCQljb250YWluZXJfb2YoeCwgc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQs IGJhc2UpCisjZGVmaW5lIGVuY190b19wc2JfaW50ZWxfb3V0cHV0KHgpCVwKKwkJY29udGFpbmVy X29mKHgsIHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0LCBlbmMpCisjZGVmaW5lIHRvX3BzYl9pbnRl bF9mcmFtZWJ1ZmZlcih4KQlcCisJCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgcHNiX2ludGVsX2Zy YW1lYnVmZmVyLCBiYXNlKQorCitzdHJ1Y3QgcHNiX2ludGVsX2kyY19jaGFuICpwc2JfaW50ZWxf aTJjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQljb25zdCB1MzIgcmVnLCBj b25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgcHNiX2ludGVsX2kyY19kZXN0cm95KHN0cnVjdCBwc2Jf aW50ZWxfaTJjX2NoYW4gKmNoYW4pOworaW50IHBzYl9pbnRlbF9kZGNfZ2V0X21vZGVzKHN0cnVj dCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0KTsKK2V4dGVybiBib29sIHBzYl9p bnRlbF9kZGNfcHJvYmUoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQp OworCitleHRlcm4gdm9pZCBwc2JfaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIGludCBwaXBlLAorCQkJICAgIHN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVf ZGV2KTsKK2V4dGVybiB2b2lkIHBzYl9pbnRlbF9jcnRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKK2V4dGVybiB2b2lkIHBzYl9pbnRlbF9zZHZvX2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgaW50IG91dHB1dF9kZXZpY2UpOworZXh0ZXJuIHZvaWQgcHNiX2ludGVsX2R2b19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgcHNiX2ludGVsX3R2X2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwc2JfaW50ZWxfbHZkc19pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IHBzYl9pbnRlbF9tb2RlX2Rl dmljZSAqbW9kZV9kZXYpOworZXh0ZXJuIHZvaWQgcHNiX2ludGVsX2x2ZHNfc2V0X2JyaWdodG5l c3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGxldmVsKTsKK2V4dGVybiB2b2lkIG9ha3Ry YWlsX2x2ZHNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IHBzYl9p bnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYpOworZXh0ZXJuIHZvaWQgb2FrdHJhaWxfd2FpdF9m b3JfSU5UUl9QS1RfU0VOVChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIG9h a3RyYWlsX2RzaV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgcHNi X2ludGVsX21vZGVfZGV2aWNlICptb2RlX2Rldik7CitleHRlcm4gdm9pZCBtaWRfZHNpX2luaXQo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZp Y2UgKm1vZGVfZGV2LCBpbnQgZHNpX251bSk7CisKK2V4dGVybiB2b2lkIHBzYl9pbnRlbF9jcnRj X2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitleHRlcm4gdm9pZCBwc2JfaW50ZWxf ZW5jb2Rlcl9wcmVwYXJlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2Rlcik7CitleHRlcm4gdm9p ZCBwc2JfaW50ZWxfZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKTsK KworZXh0ZXJuIHN0cnVjdCBkcm1fZW5jb2RlciAqcHNiX2ludGVsX2Jlc3RfZW5jb2RlcihzdHJ1 Y3QgZHJtX2Nvbm5lY3RvcgorCQkJCQkgICAgICAqY29ubmVjdG9yKTsKKworZXh0ZXJuIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICpwc2JfaW50ZWxfY3J0Y19tb2RlX2dldChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCQkJCQkJICAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7CitleHRlcm4gdm9p ZCBwc2JfaW50ZWxfd2FpdF9mb3JfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0 ZXJuIGludCBwc2JfaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0 ZXJuIHN0cnVjdCBkcm1fY3J0YyAqcHNiX2ludGVsX2dldF9jcnRjX2Zyb21fcGlwZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LAorCQkJCQkJIGludCBwaXBlKTsKK2V4dGVybiBzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqcHNiX2ludGVsX3Nkdm9fZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJ CQkgICAgIGludCBzZHZvQik7CitleHRlcm4gaW50IHBzYl9pbnRlbF9zZHZvX3N1cHBvcnRzX2hv dHBsdWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CitleHRlcm4gdm9pZCBwc2Jf aW50ZWxfc2R2b19zZXRfaG90cGx1ZyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAor CQkJCSAgIGludCBlbmFibGUpOworZXh0ZXJuIGludCBpbnRlbGZiX3Byb2JlKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBpbnRlbGZiX3JlbW92ZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCQkJICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYik7CitleHRlcm4gc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqcHNiX2ludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJt X2RldmljZQorCQkJCQkJCSpkZXYsIHN0cnVjdAorCQkJCQkJCWRybV9tb2RlX2ZiX2NtZAorCQkJ CQkJCSptb2RlX2NtZCwKKwkJCQkJCQl2b2lkICptbV9wcml2YXRlKTsKK2V4dGVybiBib29sIHBz Yl9pbnRlbF9sdmRzX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJ CSAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKTsKK2V4dGVybiBpbnQgcHNiX2ludGVsX2x2 ZHNfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOworZXh0ZXJuIGludCBwc2JfaW50ZWxfbHZk c19zZXRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCQkJc3Ry dWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCisJCQkJCXVpbnQ2NF90IHZhbHVlKTsKK2V4dGVy biB2b2lkIHBzYl9pbnRlbF9sdmRzX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3Rvcik7CitleHRlcm4gY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHBzYl9pbnRlbF9s dmRzX2VuY19mdW5jczsKKworCisjZW5kaWYJCQkJLyogX19JTlRFTF9EUlZfSF9fICovCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9sdmRzLmMgYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9sdmRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uYzY0MzZkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2ludGVsX2x2ZHMuYwpAQCAtMCwwICsxLDg0OSBAQAorLyoKKyAqIENvcHlyaWdo dCDCqSAyMDA2LTIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKglFcmljIEFuaG9s dCA8ZXJpY0BhbmhvbHQubmV0PgorICoJRGF2ZSBBaXJsaWUgPGFpcmxpZWRAbGludXguaWU+Cisg KglKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisKKyNpbmNsdWRlICJpbnRlbF9i aW9zLmgiCisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1ZGUgInBzYl9pbnRlbF9kcnYuaCIK KyNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVkZSAicG93ZXIuaCIKKyNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+CisKKy8qCisgKiBMVkRTIEkyQyBiYWNrbGlnaHQgY29udHJv bCBtYWNyb3MKKyAqLworI2RlZmluZSBCUklHSFRORVNTX01BWF9MRVZFTCAxMDAKKyNkZWZpbmUg QlJJR0hUTkVTU19NQVNLIDB4RkYKKyNkZWZpbmUgQkxDX0kyQ19UWVBFCTB4MDEKKyNkZWZpbmUg QkxDX1BXTV9UWVBUCTB4MDIKKworI2RlZmluZSBCTENfUE9MQVJJVFlfTk9STUFMIDAKKyNkZWZp bmUgQkxDX1BPTEFSSVRZX0lOVkVSU0UgMQorCisjZGVmaW5lIFBTQl9CTENfTUFYX1BXTV9SRUdf RlJFUSAgICAgICAoMHhGRkZFKQorI2RlZmluZSBQU0JfQkxDX01JTl9QV01fUkVHX0ZSRVEJKDB4 MikKKyNkZWZpbmUgUFNCX0JMQ19QV01fUFJFQ0lTSU9OX0ZBQ1RPUgkoMTApCisjZGVmaW5lIFBT Ql9CQUNLTElHSFRfUFdNX0NUTF9TSElGVAkoMTYpCisjZGVmaW5lIFBTQl9CQUNLTElHSFRfUFdN X1BPTEFSSVRZX0JJVF9DTEVBUiAoMHhGRkZFKQorCitzdHJ1Y3QgcHNiX2ludGVsX2x2ZHNfcHJp diB7CisJLyoKKwkgKiBTYXZlZCBMVkRPIG91dHB1dCBzdGF0ZXMKKwkgKi8KKwl1aW50MzJfdCBz YXZlUFBfT047CisJdWludDMyX3Qgc2F2ZVBQX09GRjsKKwl1aW50MzJfdCBzYXZlTFZEUzsKKwl1 aW50MzJfdCBzYXZlUFBfQ09OVFJPTDsKKwl1aW50MzJfdCBzYXZlUFBfQ1lDTEU7CisJdWludDMy X3Qgc2F2ZVBGSVRfQ09OVFJPTDsKKwl1aW50MzJfdCBzYXZlUEZJVF9QR01fUkFUSU9TOworCXVp bnQzMl90IHNhdmVCTENfUFdNX0NUTDsKK307CisKKworLyoKKyAqIFJldHVybnMgdGhlIG1heGlt dW0gbGV2ZWwgb2YgdGhlIGJhY2tsaWdodCBkdXR5IGN5Y2xlIGZpZWxkLgorICovCitzdGF0aWMg dTMyIHBzYl9pbnRlbF9sdmRzX2dldF9tYXhfYmFja2xpZ2h0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2 YXRlOworCXUzMiByZXRWYWw7CisKKwlpZiAoZ21hX3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7 CisJCXJldFZhbCA9ICgoUkVHX1JFQUQoQkxDX1BXTV9DVEwpICYKKwkJCSAgQkFDS0xJR0hUX01P RFVMQVRJT05fRlJFUV9NQVNLKSA+PgorCQkJICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX1NI SUZUKSAqIDI7CisKKwkJZ21hX3Bvd2VyX2VuZChkZXYpOworCX0gZWxzZQorCQlyZXRWYWwgPSAo KGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgJgorCQkJICBCQUNLTElHSFRfTU9EVUxBVElPTl9G UkVRX01BU0spID4+CisJCQkgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQpICogMjsK KworCXJldHVybiByZXRWYWw7Cit9CisKKy8qCisgKiBTZXQgTFZEUyBiYWNrbGlnaHQgbGV2ZWwg YnkgSTJDIGNvbW1hbmQKKyAqCisgKiBGSVhNRTogYXQgc29tZSBwb2ludCB3ZSBuZWVkIHRvIGJv dGggdHJhY2sgdGhpcyBmb3IgUE0gYW5kIGFsc28KKyAqIGRpc2FibGUgcnVudGltZSBwbSBvbiBN UlNUIGlmIHRoZSBicmlnaHRuZXNzIGlzIG5pbCAoaWUgYmxhbmtlZCkKKyAqLworc3RhdGljIGlu dCBwc2JfbHZkc19pMmNfc2V0X2JyaWdodG5lc3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CQkJdW5zaWduZWQgaW50IGxldmVsKQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldl9w cml2ID0KKwkJKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOworCisJ c3RydWN0IHBzYl9pbnRlbF9pMmNfY2hhbiAqbHZkc19pMmNfYnVzID0gZGV2X3ByaXYtPmx2ZHNf aTJjX2J1czsKKwl1OCBvdXRfYnVmWzJdOworCXVuc2lnbmVkIGludCBibGNfaTJjX2JyaWdodG5l c3M7CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyID0gbHZkc19p MmNfYnVzLT5zbGF2ZV9hZGRyLAorCQkJLmZsYWdzID0gMCwKKwkJCS5sZW4gPSAyLAorCQkJLmJ1 ZiA9IG91dF9idWYsCisJCX0KKwl9OworCisJYmxjX2kyY19icmlnaHRuZXNzID0gQlJJR0hUTkVT U19NQVNLICYgKCh1bnNpZ25lZCBpbnQpbGV2ZWwgKgorCQkJICAgICBCUklHSFRORVNTX01BU0sg LworCQkJICAgICBCUklHSFRORVNTX01BWF9MRVZFTCk7CisKKwlpZiAoZGV2X3ByaXYtPmx2ZHNf YmwtPnBvbCA9PSBCTENfUE9MQVJJVFlfSU5WRVJTRSkKKwkJYmxjX2kyY19icmlnaHRuZXNzID0g QlJJR0hUTkVTU19NQVNLIC0gYmxjX2kyY19icmlnaHRuZXNzOworCisJb3V0X2J1ZlswXSA9IGRl dl9wcml2LT5sdmRzX2JsLT5icmlnaHRuZXNzY21kOworCW91dF9idWZbMV0gPSAodTgpYmxjX2ky Y19icmlnaHRuZXNzOworCisJaWYgKGkyY190cmFuc2ZlcigmbHZkc19pMmNfYnVzLT5hZGFwdGVy LCBtc2dzLCAxKSA9PSAxKSB7CisJCWRldl9kYmcoZGV2LT5kZXYsICJJMkMgc2V0IGJyaWdodG5l c3MuKGNvbW1hbmQsIHZhbHVlKSAoJWQsICVkKVxuIiwKKwkJCWRldl9wcml2LT5sdmRzX2JsLT5i cmlnaHRuZXNzY21kLAorCQkJYmxjX2kyY19icmlnaHRuZXNzKTsKKwkJcmV0dXJuIDA7CisJfQor CisJZGV2X2VycihkZXYtPmRldiwgIkkyQyB0cmFuc2ZlciBlcnJvclxuIik7CisJcmV0dXJuIC0x OworfQorCisKK3N0YXRpYyBpbnQgcHNiX2x2ZHNfcHdtX3NldF9icmlnaHRuZXNzKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIGludCBsZXZlbCkKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpk ZXZfcHJpdiA9CisJCQkoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqKWRldi0+ZGV2X3ByaXZhdGU7 CisKKwl1MzIgbWF4X3B3bV9ibGM7CisJdTMyIGJsY19wd21fZHV0eV9jeWNsZTsKKworCW1heF9w d21fYmxjID0gcHNiX2ludGVsX2x2ZHNfZ2V0X21heF9iYWNrbGlnaHQoZGV2KTsKKworCS8qQkxD X1BXTV9DVEwgU2hvdWxkIGJlIGluaXRpYXRlZCB3aGlsZSBiYWNrbGlnaHQgZGV2aWNlIGluaXQq LworCUJVR19PTigobWF4X3B3bV9ibGMgJiBQU0JfQkxDX01BWF9QV01fUkVHX0ZSRVEpID09IDAp OworCisJYmxjX3B3bV9kdXR5X2N5Y2xlID0gbGV2ZWwgKiBtYXhfcHdtX2JsYyAvIEJSSUdIVE5F U1NfTUFYX0xFVkVMOworCisJaWYgKGRldl9wcml2LT5sdmRzX2JsLT5wb2wgPT0gQkxDX1BPTEFS SVRZX0lOVkVSU0UpCisJCWJsY19wd21fZHV0eV9jeWNsZSA9IG1heF9wd21fYmxjIC0gYmxjX3B3 bV9kdXR5X2N5Y2xlOworCisJYmxjX3B3bV9kdXR5X2N5Y2xlICY9IFBTQl9CQUNLTElHSFRfUFdN X1BPTEFSSVRZX0JJVF9DTEVBUjsKKwlSRUdfV1JJVEUoQkxDX1BXTV9DVEwsCisJCSAgKG1heF9w d21fYmxjIDw8IFBTQl9CQUNLTElHSFRfUFdNX0NUTF9TSElGVCkgfAorCQkgIChibGNfcHdtX2R1 dHlfY3ljbGUpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2V0IExWRFMgYmFja2xpZ2h0 IGxldmVsIGVpdGhlciBieSBJMkMgb3IgUFdNCisgKi8KK3ZvaWQgcHNiX2ludGVsX2x2ZHNfc2V0 X2JyaWdodG5lc3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGxldmVsKQoreworCS8qdTMy IGJsY19wd21fY3RsOyovCisJc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYgPQorCQkJ KHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOworCisJZGV2X2RiZyhk ZXYtPmRldiwgImJhY2tsaWdodCBsZXZlbCBpcyAlZFxuIiwgbGV2ZWwpOworCisJaWYgKCFkZXZf cHJpdi0+bHZkc19ibCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiTk8gTFZEUyBCYWNrbGlnaHQg SW5mb1xuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZGV2X3ByaXYtPmx2ZHNfYmwtPnR5cGUg PT0gQkxDX0kyQ19UWVBFKQorCQlwc2JfbHZkc19pMmNfc2V0X2JyaWdodG5lc3MoZGV2LCBsZXZl bCk7CisJZWxzZQorCQlwc2JfbHZkc19wd21fc2V0X2JyaWdodG5lc3MoZGV2LCBsZXZlbCk7Cit9 CisKKy8qCisgKiBTZXRzIHRoZSBiYWNrbGlnaHQgbGV2ZWwuCisgKgorICogbGV2ZWw6IGJhY2ts aWdodCBsZXZlbCwgZnJvbSAwIHRvIHBzYl9pbnRlbF9sdmRzX2dldF9tYXhfYmFja2xpZ2h0KCku CisgKi8KK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9sdmRzX3NldF9iYWNrbGlnaHQoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgaW50IGxldmVsKQoreworCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgYmxjX3B3bV9jdGw7CisKKwlpZiAoZ21h X3Bvd2VyX2JlZ2luKGRldiwgZmFsc2UpKSB7CisJCWJsY19wd21fY3RsID0KKwkJCVJFR19SRUFE KEJMQ19QV01fQ1RMKSAmIH5CQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOworCQlSRUdfV1JJVEUo QkxDX1BXTV9DVEwsCisJCQkJKGJsY19wd21fY3RsIHwKKwkJCQkobGV2ZWwgPDwgQkFDS0xJR0hU X0RVVFlfQ1lDTEVfU0hJRlQpKSk7CisJCWdtYV9wb3dlcl9lbmQoZGV2KTsKKwl9IGVsc2Ugewor CQlibGNfcHdtX2N0bCA9IGRldl9wcml2LT5zYXZlQkxDX1BXTV9DVEwgJgorCQkJCX5CQUNLTElH SFRfRFVUWV9DWUNMRV9NQVNLOworCQlkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMID0gKGJsY19w d21fY3RsIHwKKwkJCQkJKGxldmVsIDw8IEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX1NISUZUKSk7CisJ fQorfQorCisvKgorICogU2V0cyB0aGUgcG93ZXIgc3RhdGUgZm9yIHRoZSBwYW5lbC4KKyAqLwor c3RhdGljIHZvaWQgcHNiX2ludGVsX2x2ZHNfc2V0X3Bvd2VyKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkJIHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQsIGJvb2wgb24pCit7CisJ dTMyIHBwX3N0YXR1czsKKworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCisJCXJl dHVybjsKKworCWlmIChvbikgeworCQlSRUdfV1JJVEUoUFBfQ09OVFJPTCwgUkVHX1JFQUQoUFBf Q09OVFJPTCkgfAorCQkJICBQT1dFUl9UQVJHRVRfT04pOworCQlkbyB7CisJCQlwcF9zdGF0dXMg PSBSRUdfUkVBRChQUF9TVEFUVVMpOworCQl9IHdoaWxlICgocHBfc3RhdHVzICYgUFBfT04pID09 IDApOworCisJCXBzYl9pbnRlbF9sdmRzX3NldF9iYWNrbGlnaHQoZGV2LAorCQkJCQkgb3V0cHV0 LT4KKwkJCQkJIG1vZGVfZGV2LT5iYWNrbGlnaHRfZHV0eV9jeWNsZSk7CisJfSBlbHNlIHsKKwkJ cHNiX2ludGVsX2x2ZHNfc2V0X2JhY2tsaWdodChkZXYsIDApOworCisJCVJFR19XUklURShQUF9D T05UUk9MLCBSRUdfUkVBRChQUF9DT05UUk9MKSAmCisJCQkgIH5QT1dFUl9UQVJHRVRfT04pOwor CQlkbyB7CisJCQlwcF9zdGF0dXMgPSBSRUdfUkVBRChQUF9TVEFUVVMpOworCQl9IHdoaWxlIChw cF9zdGF0dXMgJiBQUF9PTik7CisJfQorCisJZ21hX3Bvd2VyX2VuZChkZXYpOworfQorCitzdGF0 aWMgdm9pZCBwc2JfaW50ZWxfbHZkc19lbmNvZGVyX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQgPSBlbmNfdG9fcHNiX2ludGVs X291dHB1dChlbmNvZGVyKTsKKworCWlmIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pCisJCXBz Yl9pbnRlbF9sdmRzX3NldF9wb3dlcihkZXYsIG91dHB1dCwgdHJ1ZSk7CisJZWxzZQorCQlwc2Jf aW50ZWxfbHZkc19zZXRfcG93ZXIoZGV2LCBvdXRwdXQsIGZhbHNlKTsKKworCS8qIFhYWDogV2Ug bmV2ZXIgcG93ZXIgZG93biB0aGUgTFZEUyBwYWlycy4gKi8KK30KKworc3RhdGljIHZvaWQgcHNi X2ludGVsX2x2ZHNfc2F2ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgZHJtX3BzYl9w cml2YXRlICpkZXZfcHJpdiA9CisJCShzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICopZGV2LT5kZXZf cHJpdmF0ZTsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJ CXRvX3BzYl9pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX2x2ZHNf cHJpdiAqbHZkc19wcml2ID0KKwkJKHN0cnVjdCBwc2JfaW50ZWxfbHZkc19wcml2ICopcHNiX2lu dGVsX291dHB1dC0+ZGV2X3ByaXY7CisKKwlsdmRzX3ByaXYtPnNhdmVQUF9PTiA9IFJFR19SRUFE KExWRFNQUF9PTik7CisJbHZkc19wcml2LT5zYXZlUFBfT0ZGID0gUkVHX1JFQUQoTFZEU1BQX09G Rik7CisJbHZkc19wcml2LT5zYXZlTFZEUyA9IFJFR19SRUFEKExWRFMpOworCWx2ZHNfcHJpdi0+ c2F2ZVBQX0NPTlRST0wgPSBSRUdfUkVBRChQUF9DT05UUk9MKTsKKwlsdmRzX3ByaXYtPnNhdmVQ UF9DWUNMRSA9IFJFR19SRUFEKFBQX0NZQ0xFKTsKKwkvKmx2ZHNfcHJpdi0+c2F2ZVBQX0RJVklT T1IgPSBSRUdfUkVBRChQUF9ESVZJU09SKTsqLworCWx2ZHNfcHJpdi0+c2F2ZUJMQ19QV01fQ1RM ID0gUkVHX1JFQUQoQkxDX1BXTV9DVEwpOworCWx2ZHNfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCA9 IFJFR19SRUFEKFBGSVRfQ09OVFJPTCk7CisJbHZkc19wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9T ID0gUkVHX1JFQUQoUEZJVF9QR01fUkFUSU9TKTsKKworCS8qVE9ETzogbW92ZSBiYWNrbGlnaHRf ZHV0eV9jeWNsZSB0byBwc2JfaW50ZWxfbHZkc19wcml2Ki8KKwlkZXZfcHJpdi0+YmFja2xpZ2h0 X2R1dHlfY3ljbGUgPSAoZGV2X3ByaXYtPnNhdmVCTENfUFdNX0NUTCAmCisJCQkJCQlCQUNLTElH SFRfRFVUWV9DWUNMRV9NQVNLKTsKKworCS8qCisJICogSWYgdGhlIGxpZ2h0IGlzIG9mZiBhdCBz ZXJ2ZXIgc3RhcnR1cCwKKwkgKiBqdXN0IG1ha2UgaXQgZnVsbCBicmlnaHRuZXNzCisJICovCisJ aWYgKGRldl9wcml2LT5iYWNrbGlnaHRfZHV0eV9jeWNsZSA9PSAwKQorCQlkZXZfcHJpdi0+YmFj a2xpZ2h0X2R1dHlfY3ljbGUgPQorCQlwc2JfaW50ZWxfbHZkc19nZXRfbWF4X2JhY2tsaWdodChk ZXYpOworCisJZGV2X2RiZyhkZXYtPmRldiwgIigweCV4LCAweCV4LCAweCV4LCAweCV4LCAweCV4 LCAweCV4KVxuIiwKKwkJCWx2ZHNfcHJpdi0+c2F2ZVBQX09OLAorCQkJbHZkc19wcml2LT5zYXZl UFBfT0ZGLAorCQkJbHZkc19wcml2LT5zYXZlTFZEUywKKwkJCWx2ZHNfcHJpdi0+c2F2ZVBQX0NP TlRST0wsCisJCQlsdmRzX3ByaXYtPnNhdmVQUF9DWUNMRSwKKwkJCWx2ZHNfcHJpdi0+c2F2ZUJM Q19QV01fQ1RMKTsKK30KKworc3RhdGljIHZvaWQgcHNiX2ludGVsX2x2ZHNfcmVzdG9yZShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjb25uZWN0b3ItPmRldjsKKwl1MzIgcHBfc3RhdHVzOworCisJLypzdHJ1Y3QgZHJtX3BzYl9w cml2YXRlICpkZXZfcHJpdiA9CisJCQkJKHN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRl dl9wcml2YXRlOyovCisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQg PQorCQkJCQl0b19wc2JfaW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IHBzYl9pbnRl bF9sdmRzX3ByaXYgKmx2ZHNfcHJpdiA9CisJCShzdHJ1Y3QgcHNiX2ludGVsX2x2ZHNfcHJpdiAq KXBzYl9pbnRlbF9vdXRwdXQtPmRldl9wcml2OworCisJZGV2X2RiZyhkZXYtPmRldiwgIigweCV4 LCAweCV4LCAweCV4LCAweCV4LCAweCV4LCAweCV4KVxuIiwKKwkJCWx2ZHNfcHJpdi0+c2F2ZVBQ X09OLAorCQkJbHZkc19wcml2LT5zYXZlUFBfT0ZGLAorCQkJbHZkc19wcml2LT5zYXZlTFZEUywK KwkJCWx2ZHNfcHJpdi0+c2F2ZVBQX0NPTlRST0wsCisJCQlsdmRzX3ByaXYtPnNhdmVQUF9DWUNM RSwKKwkJCWx2ZHNfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKKworCVJFR19XUklURShCTENfUFdN X0NUTCwgbHZkc19wcml2LT5zYXZlQkxDX1BXTV9DVEwpOworCVJFR19XUklURShQRklUX0NPTlRS T0wsIGx2ZHNfcHJpdi0+c2F2ZVBGSVRfQ09OVFJPTCk7CisJUkVHX1dSSVRFKFBGSVRfUEdNX1JB VElPUywgbHZkc19wcml2LT5zYXZlUEZJVF9QR01fUkFUSU9TKTsKKwlSRUdfV1JJVEUoTFZEU1BQ X09OLCBsdmRzX3ByaXYtPnNhdmVQUF9PTik7CisJUkVHX1dSSVRFKExWRFNQUF9PRkYsIGx2ZHNf cHJpdi0+c2F2ZVBQX09GRik7CisJLypSRUdfV1JJVEUoUFBfRElWSVNPUiwgbHZkc19wcml2LT5z YXZlUFBfRElWSVNPUik7Ki8KKwlSRUdfV1JJVEUoUFBfQ1lDTEUsIGx2ZHNfcHJpdi0+c2F2ZVBQ X0NZQ0xFKTsKKwlSRUdfV1JJVEUoUFBfQ09OVFJPTCwgbHZkc19wcml2LT5zYXZlUFBfQ09OVFJP TCk7CisJUkVHX1dSSVRFKExWRFMsIGx2ZHNfcHJpdi0+c2F2ZUxWRFMpOworCisJaWYgKGx2ZHNf cHJpdi0+c2F2ZVBQX0NPTlRST0wgJiBQT1dFUl9UQVJHRVRfT04pIHsKKwkJUkVHX1dSSVRFKFBQ X0NPTlRST0wsIFJFR19SRUFEKFBQX0NPTlRST0wpIHwKKwkJCVBPV0VSX1RBUkdFVF9PTik7CisJ CWRvIHsKKwkJCXBwX3N0YXR1cyA9IFJFR19SRUFEKFBQX1NUQVRVUyk7CisJCX0gd2hpbGUgKChw cF9zdGF0dXMgJiBQUF9PTikgPT0gMCk7CisJfSBlbHNlIHsKKwkJUkVHX1dSSVRFKFBQX0NPTlRS T0wsIFJFR19SRUFEKFBQX0NPTlRST0wpICYKKwkJCX5QT1dFUl9UQVJHRVRfT04pOworCQlkbyB7 CisJCQlwcF9zdGF0dXMgPSBSRUdfUkVBRChQUF9TVEFUVVMpOworCQl9IHdoaWxlIChwcF9zdGF0 dXMgJiBQUF9PTik7CisJfQorfQorCitpbnQgcHNiX2ludGVsX2x2ZHNfbW9kZV92YWxpZChzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9 CisJCQkJdG9fcHNiX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICpmaXhlZF9tb2RlID0KKwkgICAgcHNiX2ludGVsX291dHB1dC0+bW9kZV9kZXYtPnBh bmVsX2ZpeGVkX21vZGU7CisKKwlpZiAocHNiX2ludGVsX291dHB1dC0+dHlwZSA9PSBJTlRFTF9P VVRQVVRfTUlQSTIpCisJCWZpeGVkX21vZGUgPSBwc2JfaW50ZWxfb3V0cHV0LT5tb2RlX2Rldi0+ cGFuZWxfZml4ZWRfbW9kZTI7CisKKwkvKiBqdXN0IGluIGNhc2UgKi8KKwlpZiAobW9kZS0+Zmxh Z3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCisJCXJldHVybiBNT0RFX05PX0RCTEVTQ0FOOwor CisJLyoganVzdCBpbiBjYXNlICovCisJaWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19J TlRFUkxBQ0UpCisJCXJldHVybiBNT0RFX05PX0lOVEVSTEFDRTsKKworCWlmIChmaXhlZF9tb2Rl KSB7CisJCWlmIChtb2RlLT5oZGlzcGxheSA+IGZpeGVkX21vZGUtPmhkaXNwbGF5KQorCQkJcmV0 dXJuIE1PREVfUEFORUw7CisJCWlmIChtb2RlLT52ZGlzcGxheSA+IGZpeGVkX21vZGUtPnZkaXNw bGF5KQorCQkJcmV0dXJuIE1PREVfUEFORUw7CisJfQorCXJldHVybiBNT0RFX09LOworfQorCiti b29sIHBzYl9pbnRlbF9sdmRzX21vZGVfZml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy LAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX21vZGVf ZGV2aWNlICptb2RlX2RldiA9CisJICAgIGVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIp LT5tb2RlX2RldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0 cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPQorCQkJCXRvX3BzYl9pbnRlbF9j cnRjKGVuY29kZXItPmNydGMpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqdG1wX2VuY29kZXI7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKnBhbmVsX2ZpeGVkX21vZGUgPSBtb2RlX2Rldi0+cGFu ZWxfZml4ZWRfbW9kZTsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1 dCA9CisJCQkJCWVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIpOworCisJaWYgKHBzYl9p bnRlbF9vdXRwdXQtPnR5cGUgPT0gSU5URUxfT1VUUFVUX01JUEkyKQorCQlwYW5lbF9maXhlZF9t b2RlID0gbW9kZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUyOworCisJLyogRklYTUU6IHJldmlldyBm b3IgTWVkZmllbGQgKi8KKwkvKiBQU0IgcmVxdWlyZXMgdGhlIExWRFMgaXMgb24gcGlwZSBCLCBN UlNUIGhhcyBvbmx5IG9uZSBwaXBlIGFueXdheSAqLworCWlmICghSVNfTVJTVChkZXYpICYmIHBz Yl9pbnRlbF9jcnRjLT5waXBlID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBzdXBw b3J0IExWRFMgb24gcGlwZSBBXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoSVNfTVJT VChkZXYpICYmIHBzYl9pbnRlbF9jcnRjLT5waXBlICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJS ICJNdXN0IHVzZSBQSVBFIEFcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qIFNob3VsZCBu ZXZlciBoYXBwZW4hISAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2VuY29kZXIsICZkZXYt Pm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwKKwkJCSAgICBoZWFkKSB7CisJCWlmICh0bXBfZW5j b2RlciAhPSBlbmNvZGVyCisJCSAgICAmJiB0bXBfZW5jb2Rlci0+Y3J0YyA9PSBlbmNvZGVyLT5j cnRjKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IGVuYWJsZSBMVkRTIGFuZCBhbm90aGVy ICIKKwkJCSAgICAgICAiZW5jb2RlciBvbiB0aGUgc2FtZSBwaXBlXG4iKTsKKwkJCXJldHVybiBm YWxzZTsKKwkJfQorCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSB0aW1pbmdzIGZyb20gdGhlIEJJ T1MgZm9yIHRoZSBwYW5lbCwgcHV0IHRoZW0gaW4KKwkgKiB0byB0aGUgYWRqdXN0ZWQgbW9kZS4g IFRoZSBDUlRDIHdpbGwgYmUgc2V0IHVwIGZvciB0aGlzIG1vZGUsCisJICogd2l0aCB0aGUgcGFu ZWwgc2NhbGluZyBzZXQgdXAgdG8gc291cmNlIGZyb20gdGhlIEgvVkRpc3BsYXkKKwkgKiBvZiB0 aGUgb3JpZ2luYWwgbW9kZS4KKwkgKi8KKwlpZiAocGFuZWxfZml4ZWRfbW9kZSAhPSBOVUxMKSB7 CisJCWFkanVzdGVkX21vZGUtPmhkaXNwbGF5ID0gcGFuZWxfZml4ZWRfbW9kZS0+aGRpc3BsYXk7 CisJCWFkanVzdGVkX21vZGUtPmhzeW5jX3N0YXJ0ID0gcGFuZWxfZml4ZWRfbW9kZS0+aHN5bmNf c3RhcnQ7CisJCWFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCA9IHBhbmVsX2ZpeGVkX21vZGUtPmhz eW5jX2VuZDsKKwkJYWRqdXN0ZWRfbW9kZS0+aHRvdGFsID0gcGFuZWxfZml4ZWRfbW9kZS0+aHRv dGFsOworCQlhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9IHBhbmVsX2ZpeGVkX21vZGUtPnZkaXNw bGF5OworCQlhZGp1c3RlZF9tb2RlLT52c3luY19zdGFydCA9IHBhbmVsX2ZpeGVkX21vZGUtPnZz eW5jX3N0YXJ0OworCQlhZGp1c3RlZF9tb2RlLT52c3luY19lbmQgPSBwYW5lbF9maXhlZF9tb2Rl LT52c3luY19lbmQ7CisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCA9IHBhbmVsX2ZpeGVkX21vZGUt PnZ0b3RhbDsKKwkJYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgPSBwYW5lbF9maXhlZF9tb2RlLT5jbG9j azsKKwkJZHJtX21vZGVfc2V0X2NydGNpbmZvKGFkanVzdGVkX21vZGUsCisJCQkJICAgICAgQ1JU Q19JTlRFUkxBQ0VfSEFMVkVfVik7CisJfQorCisJLyoKKwkgKiBYWFg6IEl0IHdvdWxkIGJlIG5p Y2UgdG8gc3VwcG9ydCBsb3dlciByZWZyZXNoIHJhdGVzIG9uIHRoZQorCSAqIHBhbmVscyB0byBy ZWR1Y2UgcG93ZXIgY29uc3VtcHRpb24sIGFuZCBwZXJoYXBzIG1hdGNoIHRoZQorCSAqIHVzZXIn cyByZXF1ZXN0ZWQgcmVmcmVzaCByYXRlLgorCSAqLworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyB2b2lkIHBzYl9pbnRlbF9sdmRzX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0 IHBzYl9pbnRlbF9vdXRwdXQgKm91dHB1dCA9IGVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29k ZXIpOworCXN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2ID0gb3V0cHV0LT5t b2RlX2RldjsKKworCWlmICghZ21hX3Bvd2VyX2JlZ2luKGRldiwgdHJ1ZSkpCisJCXJldHVybjsK KworCW1vZGVfZGV2LT5zYXZlQkxDX1BXTV9DVEwgPSBSRUdfUkVBRChCTENfUFdNX0NUTCk7CisJ bW9kZV9kZXYtPmJhY2tsaWdodF9kdXR5X2N5Y2xlID0gKG1vZGVfZGV2LT5zYXZlQkxDX1BXTV9D VEwgJgorCQkJCQkgIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0spOworCisJcHNiX2ludGVsX2x2 ZHNfc2V0X3Bvd2VyKGRldiwgb3V0cHV0LCBmYWxzZSk7CisKKwlnbWFfcG93ZXJfZW5kKGRldik7 Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9sdmRzX2NvbW1pdChzdHJ1Y3QgZHJtX2VuY29k ZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsK KwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqb3V0cHV0ID0gZW5jX3RvX3BzYl9pbnRlbF9vdXRw dXQoZW5jb2Rlcik7CisJc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYgPSBv dXRwdXQtPm1vZGVfZGV2OworCisJaWYgKG1vZGVfZGV2LT5iYWNrbGlnaHRfZHV0eV9jeWNsZSA9 PSAwKQorCQltb2RlX2Rldi0+YmFja2xpZ2h0X2R1dHlfY3ljbGUgPQorCQkgICAgcHNiX2ludGVs X2x2ZHNfZ2V0X21heF9iYWNrbGlnaHQoZGV2KTsKKworCXBzYl9pbnRlbF9sdmRzX3NldF9wb3dl cihkZXYsIG91dHB1dCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9sdmRzX21v ZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9k ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OworCXN0cnVjdCBk cm1fcHNiX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgcGZpdF9j b250cm9sOworCisJLyoKKwkgKiBUaGUgTFZEUyBwaW4gcGFpciB3aWxsIGFscmVhZHkgaGF2ZSBi ZWVuIHR1cm5lZCBvbiBpbiB0aGUKKwkgKiBwc2JfaW50ZWxfY3J0Y19tb2RlX3NldCBzaW5jZSBp dCBoYXMgYSBsYXJnZSBpbXBhY3Qgb24gdGhlIERQTEwKKwkgKiBzZXR0aW5ncy4KKwkgKi8KKwor CS8qCisJICogRW5hYmxlIGF1dG9tYXRpYyBwYW5lbCBzY2FsaW5nIHNvIHRoYXQgbm9uLW5hdGl2 ZSBtb2RlcyBmaWxsIHRoZQorCSAqIHNjcmVlbi4gIFNob3VsZCBiZSBlbmFibGVkIGJlZm9yZSB0 aGUgcGlwZSBpcyBlbmFibGVkLCBhY2NvcmRpbmcgdG8KKwkgKiByZWdpc3RlciBkZXNjcmlwdGlv biBhbmQgUFJNLgorCSAqLworCWlmIChtb2RlLT5oZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT5o ZGlzcGxheSB8fAorCSAgICBtb2RlLT52ZGlzcGxheSAhPSBhZGp1c3RlZF9tb2RlLT52ZGlzcGxh eSkKKwkJcGZpdF9jb250cm9sID0gKFBGSVRfRU5BQkxFIHwgVkVSVF9BVVRPX1NDQUxFIHwKKwkJ CQlIT1JJWl9BVVRPX1NDQUxFIHwgVkVSVF9JTlRFUlBfQklMSU5FQVIgfAorCQkJCUhPUklaX0lO VEVSUF9CSUxJTkVBUik7CisJZWxzZQorCQlwZml0X2NvbnRyb2wgPSAwOworCisJaWYgKGRldl9w cml2LT5sdmRzX2RpdGhlcikKKwkJcGZpdF9jb250cm9sIHw9IFBBTkVMXzhUTzZfRElUSEVSX0VO QUJMRTsKKworCVJFR19XUklURShQRklUX0NPTlRST0wsIHBmaXRfY29udHJvbCk7Cit9CisKKy8q CisgKiBEZXRlY3QgdGhlIExWRFMgY29ubmVjdGlvbi4KKyAqCisgKiBUaGlzIGFsd2F5cyByZXR1 cm5zIENPTk5FQ1RPUl9TVEFUVVNfQ09OTkVDVEVELgorICogVGhpcyBjb25uZWN0b3Igc2hvdWxk IG9ubHkgaGF2ZQorICogYmVlbiBzZXQgdXAgaWYgdGhlIExWRFMgd2FzIGFjdHVhbGx5IGNvbm5l Y3RlZCBhbnl3YXkuCisgKi8KK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHBzYl9p bnRlbF9sdmRzX2RldGVjdChzdHJ1Y3QgZHJtX2Nvbm5lY3RvcgorCQkJCQkJICAgKmNvbm5lY3Rv ciwgYm9vbCBmb3JjZSkKK3sKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9 CisKKy8qCisgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgRERDIG1vZGVzIGlmIGF2YWlsYWJsZSwgb3Ig dGhlIEJJT1MgZml4ZWQgbW9kZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcHNiX2ludGVs X2x2ZHNfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxf b3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0KKwkJCQkJdG9fcHNiX2ludGVsX291dHB1dChjb25u ZWN0b3IpOworCXN0cnVjdCBwc2JfaW50ZWxfbW9kZV9kZXZpY2UgKm1vZGVfZGV2ID0KKwkJCQkJ cHNiX2ludGVsX291dHB1dC0+bW9kZV9kZXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIUlTX01S U1QoZGV2KSkKKwkJcmV0ID0gcHNiX2ludGVsX2RkY19nZXRfbW9kZXMocHNiX2ludGVsX291dHB1 dCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRGlkbid0IGdldCBhbiBFRElE LCBzbworCSAqIFNldCB3aWRlIHN5bmMgcmFuZ2VzIHNvIHdlIGdldCBhbGwgbW9kZXMKKwkgKiBo YW5kZWQgdG8gdmFsaWRfbW9kZSBmb3IgY2hlY2tpbmcKKwkgKi8KKwljb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5taW5fdmZyZXEgPSAwOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLm1heF92ZnJl cSA9IDIwMDsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5taW5faGZyZXEgPSAwOworCWNvbm5l Y3Rvci0+ZGlzcGxheV9pbmZvLm1heF9oZnJlcSA9IDIwMDsKKworCWlmIChtb2RlX2Rldi0+cGFu ZWxfZml4ZWRfbW9kZSAhPSBOVUxMKSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl ID0KKwkJICAgIGRybV9tb2RlX2R1cGxpY2F0ZShkZXYsIG1vZGVfZGV2LT5wYW5lbF9maXhlZF9t b2RlKTsKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCQlyZXR1cm4g MTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwc2JfaW50ZWxfbHZkc19kZXN0cm95 IC0gdW5yZWdpc3RlciBhbmQgZnJlZSBMVkRTIHN0cnVjdHVyZXMKKyAqIEBjb25uZWN0b3I6IGNv bm5lY3RvciB0byBmcmVlCisgKgorICogVW5yZWdpc3RlciB0aGUgRERDIGJ1cyBmb3IgdGhpcyBj b25uZWN0b3IgdGhlbiBmcmVlIHRoZSBkcml2ZXIgcHJpdmF0ZQorICogc3RydWN0dXJlLgorICov Cit2b2lkIHBzYl9pbnRlbF9sdmRzX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJ CQkJCXRvX3BzYl9pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCWlmIChwc2JfaW50ZWxfb3V0 cHV0LT5kZGNfYnVzKQorCQlwc2JfaW50ZWxfaTJjX2Rlc3Ryb3kocHNiX2ludGVsX291dHB1dC0+ ZGRjX2J1cyk7CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKKwlkcm1f Y29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOworfQorCitp bnQgcHNiX2ludGVsX2x2ZHNfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJCSAg ICAgICB1aW50NjRfdCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBj b25uZWN0b3ItPmVuY29kZXI7CisKKwlpZiAoIWVuY29kZXIpCisJCXJldHVybiAtMTsKKworCWlm ICghc3RyY21wKHByb3BlcnR5LT5uYW1lLCAic2NhbGluZyBtb2RlIikpIHsKKwkJc3RydWN0IHBz Yl9pbnRlbF9jcnRjICpjcnRjID0KKwkJCQkJdG9fcHNiX2ludGVsX2NydGMoZW5jb2Rlci0+Y3J0 Yyk7CisJCXVpbnQ2NF90IGN1cnZhbDsKKworCQlpZiAoIWNydGMpCisJCQlnb3RvIHNldF9wcm9w X2Vycm9yOworCisJCXN3aXRjaCAodmFsdWUpIHsKKwkJY2FzZSBEUk1fTU9ERV9TQ0FMRV9GVUxM U0NSRUVOOgorCQkJYnJlYWs7CisJCWNhc2UgRFJNX01PREVfU0NBTEVfTk9fU0NBTEU6CisJCQli cmVhazsKKwkJY2FzZSBEUk1fTU9ERV9TQ0FMRV9BU1BFQ1Q6CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCWdvdG8gc2V0X3Byb3BfZXJyb3I7CisJCX0KKworCQlpZiAoZHJtX2Nvbm5lY3Rvcl9w cm9wZXJ0eV9nZXRfdmFsdWUoY29ubmVjdG9yLAorCQkJCQkJICAgICBwcm9wZXJ0eSwKKwkJCQkJ CSAgICAgJmN1cnZhbCkpCisJCQlnb3RvIHNldF9wcm9wX2Vycm9yOworCisJCWlmIChjdXJ2YWwg PT0gdmFsdWUpCisJCQlnb3RvIHNldF9wcm9wX2RvbmU7CisKKwkJaWYgKGRybV9jb25uZWN0b3Jf cHJvcGVydHlfc2V0X3ZhbHVlKGNvbm5lY3RvciwKKwkJCQkJCQlwcm9wZXJ0eSwKKwkJCQkJCQl2 YWx1ZSkpCisJCQlnb3RvIHNldF9wcm9wX2Vycm9yOworCisJCWlmIChjcnRjLT5zYXZlZF9tb2Rl LmhkaXNwbGF5ICE9IDAgJiYKKwkJICAgIGNydGMtPnNhdmVkX21vZGUudmRpc3BsYXkgIT0gMCkg eworCQkJaWYgKCFkcm1fY3J0Y19oZWxwZXJfc2V0X21vZGUoZW5jb2Rlci0+Y3J0YywKKwkJCQkJ CSAgICAgICZjcnRjLT5zYXZlZF9tb2RlLAorCQkJCQkJICAgICAgZW5jb2Rlci0+Y3J0Yy0+eCwK KwkJCQkJCSAgICAgIGVuY29kZXItPmNydGMtPnksCisJCQkJCQkgICAgICBlbmNvZGVyLT5jcnRj LT5mYikpCisJCQkJZ290byBzZXRfcHJvcF9lcnJvcjsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNt cChwcm9wZXJ0eS0+bmFtZSwgImJhY2tsaWdodCIpKSB7CisJCWlmIChkcm1fY29ubmVjdG9yX3By b3BlcnR5X3NldF92YWx1ZShjb25uZWN0b3IsCisJCQkJCQkJcHJvcGVydHksCisJCQkJCQkJdmFs dWUpKQorCQkJZ290byBzZXRfcHJvcF9lcnJvcjsKKwkJZWxzZSB7CisjaWZkZWYgQ09ORklHX0JB Q0tMSUdIVF9DTEFTU19ERVZJQ0UKKwkJCXN0cnVjdCBkcm1fcHNiX3ByaXZhdGUgKmRldnAgPSBl bmNvZGVyLT5kZXYtPmRldl9wcml2YXRlOworCQkJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJk ID0gZGV2cC0+YmFja2xpZ2h0X2RldmljZTsKKwkJCWlmIChiZCkgeworCQkJCWJkLT5wcm9wcy5i cmlnaHRuZXNzID0gdmFsdWU7CisJCQkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoYmQpOworCQkJ fQorI2VuZGlmCisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAocHJvcGVydHktPm5hbWUsICJEUE1T IikpIHsKKwkJc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqaGZ1bmNzCisJCQkJCQk9 IGVuY29kZXItPmhlbHBlcl9wcml2YXRlOworCQloZnVuY3MtPmRwbXMoZW5jb2RlciwgdmFsdWUp OworCX0KKworc2V0X3Byb3BfZG9uZToKKwlyZXR1cm4gMDsKK3NldF9wcm9wX2Vycm9yOgorCXJl dHVybiAtMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVu Y3MgcHNiX2ludGVsX2x2ZHNfaGVscGVyX2Z1bmNzID0geworCS5kcG1zID0gcHNiX2ludGVsX2x2 ZHNfZW5jb2Rlcl9kcG1zLAorCS5tb2RlX2ZpeHVwID0gcHNiX2ludGVsX2x2ZHNfbW9kZV9maXh1 cCwKKwkucHJlcGFyZSA9IHBzYl9pbnRlbF9sdmRzX3ByZXBhcmUsCisJLm1vZGVfc2V0ID0gcHNi X2ludGVsX2x2ZHNfbW9kZV9zZXQsCisJLmNvbW1pdCA9IHBzYl9pbnRlbF9sdmRzX2NvbW1pdCwK K307CisKK2NvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCQkJCXBzYl9p bnRlbF9sdmRzX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IHBzYl9p bnRlbF9sdmRzX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IHBzYl9pbnRlbF9sdmRzX21vZGVf dmFsaWQsCisJLmJlc3RfZW5jb2RlciA9IHBzYl9pbnRlbF9iZXN0X2VuY29kZXIsCit9OworCitj b25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBwc2JfaW50ZWxfbHZkc19jb25uZWN0b3Jf ZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAorCS5zYXZlID0g cHNiX2ludGVsX2x2ZHNfc2F2ZSwKKwkucmVzdG9yZSA9IHBzYl9pbnRlbF9sdmRzX3Jlc3RvcmUs CisJLmRldGVjdCA9IHBzYl9pbnRlbF9sdmRzX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9o ZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuc2V0X3Byb3BlcnR5ID0gcHNi X2ludGVsX2x2ZHNfc2V0X3Byb3BlcnR5LAorCS5kZXN0cm95ID0gcHNiX2ludGVsX2x2ZHNfZGVz dHJveSwKK307CisKKworc3RhdGljIHZvaWQgcHNiX2ludGVsX2x2ZHNfZW5jX2Rlc3Ryb3koc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rl cik7Cit9CisKK2NvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBwc2JfaW50ZWxfbHZkc19l bmNfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSBwc2JfaW50ZWxfbHZkc19lbmNfZGVzdHJveSwKK307 CisKKworCisvKioKKyAqIHBzYl9pbnRlbF9sdmRzX2luaXQgLSBzZXR1cCBMVkRTIGNvbm5lY3Rv cnMgb24gdGhpcyBkZXZpY2UKKyAqIEBkZXY6IGRybSBkZXZpY2UKKyAqCisgKiBDcmVhdGUgdGhl IGNvbm5lY3RvciwgcmVnaXN0ZXIgdGhlIExWRFMgRERDIGJ1cywgYW5kIHRyeSB0byBmaWd1cmUg b3V0IHdoYXQKKyAqIG1vZGVzIHdlIGNhbiBkaXNwbGF5IG9uIHRoZSBMVkRTIHBhbmVsIChpZiBw cmVzZW50KS4KKyAqLwordm9pZCBwc2JfaW50ZWxfbHZkc19pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCSAgICAgc3RydWN0IHBzYl9pbnRlbF9tb2RlX2RldmljZSAqbW9kZV9kZXYpCit7 CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQ7CisJc3RydWN0IHBz Yl9pbnRlbF9sdmRzX3ByaXYgKmx2ZHNfcHJpdjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqc2NhbjsJLyogKm1vZGVzLCAqYmlvc19tb2RlOyAqLworCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YzsKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdiA9CisJCQkJKHN0cnVj dCBkcm1fcHNiX3ByaXZhdGUgKilkZXYtPmRldl9wcml2YXRlOworCXUzMiBsdmRzOworCWludCBw aXBlOworCisJcHNiX2ludGVsX291dHB1dCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwc2JfaW50 ZWxfb3V0cHV0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwc2JfaW50ZWxfb3V0cHV0KQorCQlyZXR1 cm47CisKKwlsdmRzX3ByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHNiX2ludGVsX2x2ZHNf cHJpdiksIEdGUF9LRVJORUwpOworCWlmICghbHZkc19wcml2KSB7CisJCWtmcmVlKHBzYl9pbnRl bF9vdXRwdXQpOworCQlkZXZfZXJyKGRldi0+ZGV2LCAiTFZEUyBwcml2YXRlIGFsbG9jYXRpb24g ZXJyb3JcbiIpOworCQlyZXR1cm47CisJfQorCisJcHNiX2ludGVsX291dHB1dC0+ZGV2X3ByaXYg PSBsdmRzX3ByaXY7CisKKwlwc2JfaW50ZWxfb3V0cHV0LT5tb2RlX2RldiA9IG1vZGVfZGV2Owor CWNvbm5lY3RvciA9ICZwc2JfaW50ZWxfb3V0cHV0LT5iYXNlOworCWVuY29kZXIgPSAmcHNiX2lu dGVsX291dHB1dC0+ZW5jOworCWRybV9jb25uZWN0b3JfaW5pdChkZXYsICZwc2JfaW50ZWxfb3V0 cHV0LT5iYXNlLAorCQkJICAgJnBzYl9pbnRlbF9sdmRzX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCSAg IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKTsKKworCWRybV9lbmNvZGVyX2luaXQoZGV2LCAmcHNi X2ludGVsX291dHB1dC0+ZW5jLAorCQkJICZwc2JfaW50ZWxfbHZkc19lbmNfZnVuY3MsCisJCQkg RFJNX01PREVfRU5DT0RFUl9MVkRTKTsKKworCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5j b2RlcigmcHNiX2ludGVsX291dHB1dC0+YmFzZSwKKwkJCQkJICAmcHNiX2ludGVsX291dHB1dC0+ ZW5jKTsKKwlwc2JfaW50ZWxfb3V0cHV0LT50eXBlID0gSU5URUxfT1VUUFVUX0xWRFM7CisKKwlk cm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZwc2JfaW50ZWxfbHZkc19oZWxwZXJfZnVu Y3MpOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsCisJCQkJICZwc2JfaW50 ZWxfbHZkc19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5m by5zdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwljb25uZWN0b3ItPmlu dGVybGFjZV9hbGxvd2VkID0gZmFsc2U7CisJY29ubmVjdG9yLT5kb3VibGVzY2FuX2FsbG93ZWQg PSBmYWxzZTsKKworCS8qQXR0YWNoIGNvbm5lY3RvciBwcm9wZXJ0aWVzKi8KKwlkcm1fY29ubmVj dG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZp Zy5zY2FsaW5nX21vZGVfcHJvcGVydHksCisJCQkJICAgICAgRFJNX01PREVfU0NBTEVfRlVMTFND UkVFTik7CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCSAg ICAgIGRldl9wcml2LT5iYWNrbGlnaHRfcHJvcGVydHksCisJCQkJICAgICAgQlJJR0hUTkVTU19N QVhfTEVWRUwpOworCisJLyoKKwkgKiBTZXQgdXAgSTJDIGJ1cworCSAqIEZJWE1FOiBkaXN0cm95 IGkyY19idXMgd2hlbiBleGl0CisJICovCisJcHNiX2ludGVsX291dHB1dC0+aTJjX2J1cyA9IHBz Yl9pbnRlbF9pMmNfY3JlYXRlKGRldiwKKwkJCQkJCQkgR1BJT0IsCisJCQkJCQkJICJMVkRTQkxD X0IiKTsKKwlpZiAoIXBzYl9pbnRlbF9vdXRwdXQtPmkyY19idXMpIHsKKwkJZGV2X3ByaW50ayhL RVJOX0VSUiwKKwkJCSZkZXYtPnBkZXYtPmRldiwgIkkyQyBidXMgcmVnaXN0cmF0aW9uIGZhaWxl ZC5cbiIpOworCQlnb3RvIGZhaWxlZF9ibGNfaTJjOworCX0KKwlwc2JfaW50ZWxfb3V0cHV0LT5p MmNfYnVzLT5zbGF2ZV9hZGRyID0gMHgyQzsKKwlkZXZfcHJpdi0+bHZkc19pMmNfYnVzID0gIHBz Yl9pbnRlbF9vdXRwdXQtPmkyY19idXM7CisKKwkvKgorCSAqIExWRFMgZGlzY292ZXJ5OgorCSAq IDEpIGNoZWNrIGZvciBFRElEIG9uIEREQworCSAqIDIpIGNoZWNrIGZvciBWQlQgZGF0YQorCSAq IDMpIGNoZWNrIHRvIHNlZSBpZiBMVkRTIGlzIGFscmVhZHkgb24KKwkgKiAgICBpZiBub25lIG9m IHRoZSBhYm92ZSwgbm8gcGFuZWwKKwkgKiA0KSBtYWtlIHN1cmUgbGlkIGlzIG9wZW4KKwkgKiAg ICBpZiBjbG9zZWQsIGFjdCBsaWtlIGl0J3Mgbm90IHRoZXJlIGZvciBub3cKKwkgKi8KKworCS8q IFNldCB1cCB0aGUgRERDIGJ1cy4gKi8KKwlwc2JfaW50ZWxfb3V0cHV0LT5kZGNfYnVzID0gcHNi X2ludGVsX2kyY19jcmVhdGUoZGV2LAorCQkJCQkJCSBHUElPQywKKwkJCQkJCQkgIkxWRFNERENf QyIpOworCWlmICghcHNiX2ludGVsX291dHB1dC0+ZGRjX2J1cykgeworCQlkZXZfcHJpbnRrKEtF Uk5fRVJSLCAmZGV2LT5wZGV2LT5kZXYsCisJCQkgICAiRERDIGJ1cyByZWdpc3RyYXRpb24gIiAi ZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbGVkX2RkYzsKKwl9CisKKwkvKgorCSAqIEF0dGVtcHQg dG8gZ2V0IHRoZSBmaXhlZCBwYW5lbCBtb2RlIGZyb20gRERDLiAgQXNzdW1lIHRoYXQgdGhlCisJ ICogcHJlZmVycmVkIG1vZGUgaXMgdGhlIHJpZ2h0IG9uZS4KKwkgKi8KKwlwc2JfaW50ZWxfZGRj X2dldF9tb2Rlcyhwc2JfaW50ZWxfb3V0cHV0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjYW4s ICZjb25uZWN0b3ItPnByb2JlZF9tb2RlcywgaGVhZCkgeworCQlpZiAoc2Nhbi0+dHlwZSAmIERS TV9NT0RFX1RZUEVfUFJFRkVSUkVEKSB7CisJCQltb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9kZSA9 CisJCQkgICAgZHJtX21vZGVfZHVwbGljYXRlKGRldiwgc2Nhbik7CisJCQlnb3RvIG91dDsJLyog RklYTUU6IGNoZWNrIGZvciBxdWlya3MgKi8KKwkJfQorCX0KKworCS8qIEZhaWxlZCB0byBnZXQg RURJRCwgd2hhdCBhYm91dCBWQlQ/IGRvIHdlIG5lZWQgdGhpcz8gKi8KKwlpZiAobW9kZV9kZXYt PnZidF9tb2RlKQorCQltb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9kZSA9CisJCSAgICBkcm1fbW9k ZV9kdXBsaWNhdGUoZGV2LCBtb2RlX2Rldi0+dmJ0X21vZGUpOworCisJaWYgKCFtb2RlX2Rldi0+ cGFuZWxfZml4ZWRfbW9kZSkKKwkJaWYgKGRldl9wcml2LT5sZnBfbHZkc192YnRfbW9kZSkKKwkJ CW1vZGVfZGV2LT5wYW5lbF9maXhlZF9tb2RlID0KKwkJCQlkcm1fbW9kZV9kdXBsaWNhdGUoZGV2 LAorCQkJCQlkZXZfcHJpdi0+bGZwX2x2ZHNfdmJ0X21vZGUpOworCisJLyoKKwkgKiBJZiB3ZSBk aWRuJ3QgZ2V0IEVESUQsIHRyeSBjaGVja2luZyBpZiB0aGUgcGFuZWwgaXMgYWxyZWFkeSB0dXJu ZWQKKwkgKiBvbi4JSWYgc28sIGFzc3VtZSB0aGF0IHdoYXRldmVyIGlzIGN1cnJlbnRseSBwcm9n cmFtbWVkIGlzIHRoZQorCSAqIGNvcnJlY3QgbW9kZS4KKwkgKi8KKwlsdmRzID0gUkVHX1JFQUQo TFZEUyk7CisJcGlwZSA9IChsdmRzICYgTFZEU19QSVBFQl9TRUxFQ1QpID8gMSA6IDA7CisJY3J0 YyA9IHBzYl9pbnRlbF9nZXRfY3J0Y19mcm9tX3BpcGUoZGV2LCBwaXBlKTsKKworCWlmIChjcnRj ICYmIChsdmRzICYgTFZEU19QT1JUX0VOKSkgeworCQltb2RlX2Rldi0+cGFuZWxfZml4ZWRfbW9k ZSA9CisJCSAgICBwc2JfaW50ZWxfY3J0Y19tb2RlX2dldChkZXYsIGNydGMpOworCQlpZiAobW9k ZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKKwkJCW1vZGVfZGV2LT5wYW5lbF9maXhlZF9tb2Rl LT50eXBlIHw9CisJCQkgICAgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7CisJCQlnb3RvIG91dDsJ LyogRklYTUU6IGNoZWNrIGZvciBxdWlya3MgKi8KKwkJfQorCX0KKworCS8qIElmIHdlIHN0aWxs IGRvbid0IGhhdmUgYSBtb2RlIGFmdGVyIGFsbCB0aGF0LCBnaXZlIHVwLiAqLworCWlmICghbW9k ZV9kZXYtPnBhbmVsX2ZpeGVkX21vZGUpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIkZvdW5kIG5v IG1vZGVzIG9uIHRoZSBsdmRzLCBpZ25vcmluZyB0aGUgTFZEU1xuIik7CisJCWdvdG8gZmFpbGVk X2ZpbmQ7CisJfQorCisJLyoKKwkgKiBCbGFja2xpc3QgbWFjaGluZXMgd2l0aCBCSU9TZXMgdGhh dCBsaXN0IGFuIExWRFMgcGFuZWwgd2l0aG91dAorCSAqIGFjdHVhbGx5IGhhdmluZyBvbmUuCisJ ICovCitvdXQ6CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKKwlyZXR1cm47 CisKK2ZhaWxlZF9maW5kOgorCWlmIChwc2JfaW50ZWxfb3V0cHV0LT5kZGNfYnVzKQorCQlwc2Jf aW50ZWxfaTJjX2Rlc3Ryb3kocHNiX2ludGVsX291dHB1dC0+ZGRjX2J1cyk7CitmYWlsZWRfZGRj OgorCWlmIChwc2JfaW50ZWxfb3V0cHV0LT5pMmNfYnVzKQorCQlwc2JfaW50ZWxfaTJjX2Rlc3Ry b3kocHNiX2ludGVsX291dHB1dC0+aTJjX2J1cyk7CitmYWlsZWRfYmxjX2kyYzoKKwlkcm1fZW5j b2Rlcl9jbGVhbnVwKGVuY29kZXIpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3Ip OworCWtmcmVlKGNvbm5lY3Rvcik7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9n bWE1MDAvcHNiX2ludGVsX21vZGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRl bF9tb2Rlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZTFhZmYKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9tb2Rlcy5j CkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSW50ZWwgQ29ycG9y YXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwg YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBi dXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1 MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgor ICoKKyAqIEF1dGhlcnM6IEplc3NlIEJhcm5lcyA8amVzc2UuYmFybmVzQGludGVsLmNvbT4KKyAq LworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNs dWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgInBzYl9pbnRlbF9kcnYuaCIKKworLyoqCisgKiBw c2JfaW50ZWxfZGRjX3Byb2JlCisgKgorICovCitib29sIHBzYl9pbnRlbF9kZGNfcHJvYmUoc3Ry dWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQpCit7CisJdTggb3V0X2J1Zltd ID0geyAweDAsIDB4MCB9OworCXU4IGJ1ZlsyXTsKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNn IG1zZ3NbXSA9IHsKKwkJeworCQkgLmFkZHIgPSAweDUwLAorCQkgLmZsYWdzID0gMCwKKwkJIC5s ZW4gPSAxLAorCQkgLmJ1ZiA9IG91dF9idWYsCisJCSB9LAorCQl7CisJCSAuYWRkciA9IDB4NTAs CisJCSAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJIC5sZW4gPSAxLAorCQkgLmJ1ZiA9IGJ1ZiwKKwkJ IH0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKCZwc2JfaW50ZWxfb3V0cHV0LT5kZGNfYnVz LT5hZGFwdGVyLCBtc2dzLCAyKTsKKwlpZiAocmV0ID09IDIpCisJCXJldHVybiB0cnVlOworCisJ cmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHBzYl9pbnRlbF9kZGNfZ2V0X21vZGVzIC0gZ2V0 IG1vZGVsaXN0IGZyb20gbW9uaXRvcgorICogQGNvbm5lY3RvcjogRFJNIGNvbm5lY3RvciBkZXZp Y2UgdG8gdXNlCisgKgorICogRmV0Y2ggdGhlIEVESUQgaW5mb3JtYXRpb24gZnJvbSBAY29ubmVj dG9yIHVzaW5nIHRoZSBEREMgYnVzLgorICovCitpbnQgcHNiX2ludGVsX2RkY19nZXRfbW9kZXMo c3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQpCit7CisJc3RydWN0IGVk aWQgKmVkaWQ7CisJaW50IHJldCA9IDA7CisKKwllZGlkID0KKwkgICAgZHJtX2dldF9lZGlkKCZw c2JfaW50ZWxfb3V0cHV0LT5iYXNlLAorCQkJICZwc2JfaW50ZWxfb3V0cHV0LT5kZGNfYnVzLT5h ZGFwdGVyKTsKKwlpZiAoZWRpZCkgeworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRf cHJvcGVydHkoJnBzYl9pbnRlbF9vdXRwdXQtPgorCQkJCQkJCWJhc2UsIGVkaWQpOworCQlyZXQg PSBkcm1fYWRkX2VkaWRfbW9kZXMoJnBzYl9pbnRlbF9vdXRwdXQtPmJhc2UsIGVkaWQpOworCQlr ZnJlZShlZGlkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9nbWE1MDAvcHNiX2ludGVsX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2Jf aW50ZWxfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjMTZhYQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9nbWE1MDAvcHNiX2ludGVsX3JlZy5o CkBAIC0wLDAgKzEsMTIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSW50ZWwgQ29y cG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqLworI2lmbmRlZiBfX1BTQl9JTlRFTF9SRUdfSF9fCisjZGVmaW5lIF9fUFNCX0lOVEVM X1JFR19IX18KKworI2RlZmluZSBCTENfUFdNX0NUTAkJMHg2MTI1NAorI2RlZmluZSBCTENfUFdN X0NUTDIJCTB4NjEyNTAKKyNkZWZpbmUgQkxDX1BXTV9DVExfQwkJMHg2MjI1NAorI2RlZmluZSBC TENfUFdNX0NUTDJfQwkJMHg2MjI1MAorI2RlZmluZSBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVR X1NISUZUCQkoMTcpCisvKgorICogVGhpcyBpcyB0aGUgbW9zdCBzaWduaWZpY2FudCAxNSBiaXRz IG9mIHRoZSBudW1iZXIgb2YgYmFja2xpZ2h0IGN5Y2xlcyBpbiBhCisgKiBjb21wbGV0ZSBjeWNs ZSBvZiB0aGUgbW9kdWxhdGVkIGJhY2tsaWdodCBjb250cm9sLgorICoKKyAqIFRoZSBhY3R1YWwg dmFsdWUgaXMgdGhpcyBmaWVsZCBtdWx0aXBsaWVkIGJ5IHR3by4KKyAqLworI2RlZmluZSBCQUNL TElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0sJKDB4N2ZmZiA8PCAxNykKKyNkZWZpbmUgQkxNX0xF R0FDWV9NT0RFCQkJKDEgPDwgMTYpCisvKgorICogVGhpcyBpcyB0aGUgbnVtYmVyIG9mIGN5Y2xl cyBvdXQgb2YgdGhlIGJhY2tsaWdodCBtb2R1bGF0aW9uIGN5Y2xlIGZvciB3aGljaAorICogdGhl IGJhY2tsaWdodCBpcyBvbi4KKyAqCisgKiBUaGlzIGZpZWxkIG11c3QgYmUgbm8gZ3JlYXRlciB0 aGFuIHRoZSBudW1iZXIgb2YgY3ljbGVzIGluIHRoZSBjb21wbGV0ZQorICogYmFja2xpZ2h0IG1v ZHVsYXRpb24gY3ljbGUuCisgKi8KKyNkZWZpbmUgQkFDS0xJR0hUX0RVVFlfQ1lDTEVfU0hJRlQJ KDApCisjZGVmaW5lIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0sJKDB4ZmZmZikKKworI2RlZmlu ZSBJOTE1X0dDRkdDCQkJMHhmMAorI2RlZmluZSBJOTE1X0xPV19GUkVRVUVOQ1lfRU5BQkxFCSgx IDw8IDcpCisjZGVmaW5lIEk5MTVfRElTUExBWV9DTE9DS18xOTBfMjAwX01IWgkoMCA8PCA0KQor I2RlZmluZSBJOTE1X0RJU1BMQVlfQ0xPQ0tfMzMzX01IWgkoNCA8PCA0KQorI2RlZmluZSBJOTE1 X0RJU1BMQVlfQ0xPQ0tfTUFTSwkJKDcgPDwgNCkKKworI2RlZmluZSBJODU1X0hQTExDQwkJCTB4 YzAKKyNkZWZpbmUgSTg1NV9DTE9DS19DT05UUk9MX01BU0sJCSgzIDw8IDApCisjZGVmaW5lIEk4 NTVfQ0xPQ0tfMTMzXzIwMAkJKDAgPDwgMCkKKyNkZWZpbmUgSTg1NV9DTE9DS18xMDBfMjAwCQko MSA8PCAwKQorI2RlZmluZSBJODU1X0NMT0NLXzEwMF8xMzMJCSgyIDw8IDApCisjZGVmaW5lIEk4 NTVfQ0xPQ0tfMTY2XzI1MAkJKDMgPDwgMCkKKworLyogSTgzMCBDUlRDIHJlZ2lzdGVycyAqLwor I2RlZmluZSBIVE9UQUxfQQkJMHg2MDAwMAorI2RlZmluZSBIQkxBTktfQQkJMHg2MDAwNAorI2Rl ZmluZSBIU1lOQ19BCQkJMHg2MDAwOAorI2RlZmluZSBWVE9UQUxfQQkJMHg2MDAwYworI2RlZmlu ZSBWQkxBTktfQQkJMHg2MDAxMAorI2RlZmluZSBWU1lOQ19BCQkJMHg2MDAxNAorI2RlZmluZSBQ SVBFQVNSQwkJMHg2MDAxYworI2RlZmluZSBCQ0xSUEFUX0EJCTB4NjAwMjAKKyNkZWZpbmUgVlNZ TkNTSElGVF9BCQkweDYwMDI4CisKKyNkZWZpbmUgSFRPVEFMX0IJCTB4NjEwMDAKKyNkZWZpbmUg SEJMQU5LX0IJCTB4NjEwMDQKKyNkZWZpbmUgSFNZTkNfQgkJCTB4NjEwMDgKKyNkZWZpbmUgVlRP VEFMX0IJCTB4NjEwMGMKKyNkZWZpbmUgVkJMQU5LX0IJCTB4NjEwMTAKKyNkZWZpbmUgVlNZTkNf QgkJCTB4NjEwMTQKKyNkZWZpbmUgUElQRUJTUkMJCTB4NjEwMWMKKyNkZWZpbmUgQkNMUlBBVF9C CQkweDYxMDIwCisjZGVmaW5lIFZTWU5DU0hJRlRfQgkJMHg2MTAyOAorCisjZGVmaW5lIEhUT1RB TF9DCQkweDYyMDAwCisjZGVmaW5lIEhCTEFOS19DCQkweDYyMDA0CisjZGVmaW5lIEhTWU5DX0MJ CQkweDYyMDA4CisjZGVmaW5lIFZUT1RBTF9DCQkweDYyMDBjCisjZGVmaW5lIFZCTEFOS19DCQkw eDYyMDEwCisjZGVmaW5lIFZTWU5DX0MJCQkweDYyMDE0CisjZGVmaW5lIFBJUEVDU1JDCQkweDYy MDFjCisjZGVmaW5lIEJDTFJQQVRfQwkJMHg2MjAyMAorI2RlZmluZSBWU1lOQ1NISUZUX0MJCTB4 NjIwMjgKKworI2RlZmluZSBQUF9TVEFUVVMJCTB4NjEyMDAKKyMgZGVmaW5lIFBQX09OCQkJCSgx IDw8IDMxKQorLyoKKyAqIEluZGljYXRlcyB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgdGhlIHBh bmVsIGFyZSBvbjoKKyAqCisgKiAtIFBMTCBlbmFibGVkCisgKiAtIHBpcGUgZW5hYmxlZAorICog LSBMVkRTL0RWT0IvRFZPQyBvbgorICovCisjZGVmaW5lIFBQX1JFQURZCQkJKDEgPDwgMzApCisj ZGVmaW5lIFBQX1NFUVVFTkNFX05PTkUJCSgwIDw8IDI4KQorI2RlZmluZSBQUF9TRVFVRU5DRV9P TgkJCSgxIDw8IDI4KQorI2RlZmluZSBQUF9TRVFVRU5DRV9PRkYJCQkoMiA8PCAyOCkKKyNkZWZp bmUgUFBfU0VRVUVOQ0VfTUFTSwkJMHgzMDAwMDAwMAorI2RlZmluZSBQUF9DT05UUk9MCQkweDYx MjA0CisjZGVmaW5lIFBPV0VSX1RBUkdFVF9PTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgTFZEU1BQ X09OCQkweDYxMjA4CisjZGVmaW5lIExWRFNQUF9PRkYJCTB4NjEyMGMKKyNkZWZpbmUgUFBfQ1lD TEUJCTB4NjEyMTAKKworI2RlZmluZSBQRklUX0NPTlRST0wJCTB4NjEyMzAKKyNkZWZpbmUgUEZJ VF9FTkFCTEUJCQkoMSA8PCAzMSkKKyNkZWZpbmUgUEZJVF9QSVBFX01BU0sJCQkoMyA8PCAyOSkK KyNkZWZpbmUgUEZJVF9QSVBFX1NISUZUCQkJMjkKKyNkZWZpbmUgUEZJVF9TQ0FMSU5HX01PREVf UElMTEFSQk9YCSgxIDw8IDI3KQorI2RlZmluZSBQRklUX1NDQUxJTkdfTU9ERV9MRVRURVJCT1gJ KDMgPDwgMjYpCisjZGVmaW5lIFZFUlRfSU5URVJQX0RJU0FCTEUJCSgwIDw8IDEwKQorI2RlZmlu ZSBWRVJUX0lOVEVSUF9CSUxJTkVBUgkJKDEgPDwgMTApCisjZGVmaW5lIFZFUlRfSU5URVJQX01B U0sJCSgzIDw8IDEwKQorI2RlZmluZSBWRVJUX0FVVE9fU0NBTEUJCQkoMSA8PCA5KQorI2RlZmlu ZSBIT1JJWl9JTlRFUlBfRElTQUJMRQkJKDAgPDwgNikKKyNkZWZpbmUgSE9SSVpfSU5URVJQX0JJ TElORUFSCQkoMSA8PCA2KQorI2RlZmluZSBIT1JJWl9JTlRFUlBfTUFTSwkJKDMgPDwgNikKKyNk ZWZpbmUgSE9SSVpfQVVUT19TQ0FMRQkJKDEgPDwgNSkKKyNkZWZpbmUgUEFORUxfOFRPNl9ESVRI RVJfRU5BQkxFCSgxIDw8IDMpCisKKyNkZWZpbmUgUEZJVF9QR01fUkFUSU9TCQkweDYxMjM0Cisj ZGVmaW5lIFBGSVRfVkVSVF9TQ0FMRV9NQVNLCQkJMHhmZmYwMDAwMAorI2RlZmluZSBQRklUX0hP UklaX1NDQUxFX01BU0sJCQkweDAwMDBmZmYwCisKKyNkZWZpbmUgUEZJVF9BVVRPX1JBVElPUwkw eDYxMjM4CisKKyNkZWZpbmUgRFBMTF9BCQkJMHgwNjAxNAorI2RlZmluZSBEUExMX0IJCQkweDA2 MDE4CisjZGVmaW5lIERQTExfVkNPX0VOQUJMRQkJCSgxIDw8IDMxKQorI2RlZmluZSBEUExMX0RW T19ISUdIX1NQRUVECQkoMSA8PCAzMCkKKyNkZWZpbmUgRFBMTF9TWU5DTE9DS19FTkFCTEUJCSgx IDw8IDI5KQorI2RlZmluZSBEUExMX1ZHQV9NT0RFX0RJUwkJKDEgPDwgMjgpCisjZGVmaW5lIERQ TExCX01PREVfREFDX1NFUklBTAkJKDEgPDwgMjYpCS8qIGk5MTUgKi8KKyNkZWZpbmUgRFBMTEJf TU9ERV9MVkRTCQkJKDIgPDwgMjYpCS8qIGk5MTUgKi8KKyNkZWZpbmUgRFBMTF9NT0RFX01BU0sJ CQkoMyA8PCAyNikKKyNkZWZpbmUgRFBMTF9EQUNfU0VSSUFMX1AyX0NMT0NLX0RJVl8xMAkoMCA8 PCAyNCkJLyogaTkxNSAqLworI2RlZmluZSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzUJ KDEgPDwgMjQpCS8qIGk5MTUgKi8KKyNkZWZpbmUgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfMTQJ KDAgPDwgMjQpCS8qIGk5MTUgKi8KKyNkZWZpbmUgRFBMTEJfTFZEU19QMl9DTE9DS19ESVZfNwko MSA8PCAyNCkJLyogaTkxNSAqLworI2RlZmluZSBEUExMX1AyX0NMT0NLX0RJVl9NQVNLCQkweDAz MDAwMDAwCS8qIGk5MTUgKi8KKyNkZWZpbmUgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLCTB4 MDBmZjAwMDAJLyogaTkxNSAqLworI2RlZmluZSBEUExMX0xPQ0sJCQkoMSA8PCAxNSkJLyogQ0RW ICovCisKKy8qCisgKiAgVGhlIGk4MzAgZ2VuZXJhdGlvbiwgaW4gREFDL3NlcmlhbCBtb2RlLCBk ZWZpbmVzIHAxIGFzIHR3byBwbHVzIHRoaXMKKyAqIGJpdGZpZWxkLCBvciBqdXN0IDIgaWYgUExM X1AxX0RJVklERV9CWV9UV08gaXMgc2V0LgorICovCisjIGRlZmluZSBEUExMX0ZQQTAxX1AxX1BP U1RfRElWX01BU0tfSTgzMAkweDAwMWYwMDAwCisvKgorICogVGhlIGk4MzAgZ2VuZXJhdGlvbiwg aW4gTFZEUyBtb2RlLCBkZWZpbmVzIFAxIGFzIHRoZSBiaXQgbnVtYmVyIHNldCB3aXRoaW4KKyAq IHRoaXMgZmllbGQgKG9ubHkgb25lIGJpdCBtYXkgYmUgc2V0KS4KKyAqLworI2RlZmluZSBEUExM X0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSTgzMF9MVkRTCTB4MDAzZjAwMDAKKyNkZWZpbmUgRFBM TF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVAkxNgorI2RlZmluZSBQTExfUDJfRElWSURFX0JZXzQJ CSgxIDw8IDIzKQkvKiBpODMwLCByZXF1aXJlZAorCQkJCQkJCSAqIGluIERWTyBub24tZ2FuZyAq LworIyBkZWZpbmUgUExMX1AxX0RJVklERV9CWV9UV08JCSgxIDw8IDIxKQkvKiBpODMwICovCisj ZGVmaW5lIFBMTF9SRUZfSU5QVVRfRFJFRkNMSwkJKDAgPDwgMTMpCisjZGVmaW5lIFBMTF9SRUZf SU5QVVRfVFZDTEtJTkEJCSgxIDw8IDEzKQkvKiBpODMwICovCisjZGVmaW5lIFBMTF9SRUZfSU5Q VVRfVFZDTEtJTkJDCQkoMiA8PCAxMykJLyogU0RWTworCQkJCQkJCQkgKiBUVkNMS0lOICovCisj ZGVmaW5lIFBMTEJfUkVGX0lOUFVUX1NQUkVBRFNQRUNUUlVNSU4JKDMgPDwgMTMpCisjZGVmaW5l IFBMTF9SRUZfSU5QVVRfTUFTSwkJKDMgPDwgMTMpCisjZGVmaW5lIFBMTF9MT0FEX1BVTFNFX1BI QVNFX1NISUZUCTkKKy8qCisgKiBQYXJhbGxlbCB0byBTZXJpYWwgTG9hZCBQdWxzZSBwaGFzZSBz ZWxlY3Rpb24uCisgKiBTZWxlY3RzIHRoZSBwaGFzZSBmb3IgdGhlIDEwWCBEUExMIGNsb2NrIGZv ciB0aGUgUENJZQorICogZGlnaXRhbCBkaXNwbGF5IHBvcnQuIFRoZSByYW5nZSBpcyA0IHRvIDEz OyAxMCBvciBtb3JlCisgKiBpcyBqdXN0IGEgZmxpcCBkZWxheS4gVGhlIGRlZmF1bHQgaXMgNgor ICovCisjZGVmaW5lIFBMTF9MT0FEX1BVTFNFX1BIQVNFX01BU0sJKDB4ZiA8PCBQTExfTE9BRF9Q VUxTRV9QSEFTRV9TSElGVCkKKyNkZWZpbmUgRElTUExBWV9SQVRFX1NFTEVDVF9GUEExCSgxIDw8 IDgpCisKKy8qCisgKiBTRFZPIG11bHRpcGxpZXIgZm9yIDk0NUcvR00uIE5vdCB1c2VkIG9uIDk2 NS4KKyAqCisgKiBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sKKyAqLworI2RlZmluZSBTRFZP X01VTFRJUExJRVJfTUFTSwkJMHgwMDAwMDBmZgorI2RlZmluZSBTRFZPX01VTFRJUExJRVJfU0hJ RlRfSElSRVMJNAorI2RlZmluZSBTRFZPX01VTFRJUExJRVJfU0hJRlRfVkdBCTAKKworLyoKKyAq IFBMTF9NRAorICovCisvKiBQaXBlIEEgU0RWTy9VREkgY2xvY2sgbXVsdGlwbGllci9kaXZpZGVy IHJlZ2lzdGVyIGZvciBHOTY1LiAqLworI2RlZmluZSBEUExMX0FfTUQJCTB4MDYwMWMKKy8qIFBp cGUgQiBTRFZPL1VESSBjbG9jayBtdWx0aXBsaWVyL2RpdmlkZXIgcmVnaXN0ZXIgZm9yIEc5NjUu ICovCisjZGVmaW5lIERQTExfQl9NRAkJMHgwNjAyMAorLyoKKyAqIFVESSBwaXhlbCBkaXZpZGVy LCBjb250cm9sbGluZyBob3cgbWFueSBwaXhlbHMgYXJlIHN0dWZmZWQgaW50byBhIHBhY2tldC4K KyAqCisgKiBWYWx1ZSBpcyBwaXhlbHMgbWludXMgMS4gIE11c3QgYmUgc2V0IHRvIDEgcGl4ZWwg Zm9yIFNEVk8uCisgKi8KKyNkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9NQVNLCTB4M2YwMDAw MDAKKyNkZWZpbmUgRFBMTF9NRF9VRElfRElWSURFUl9TSElGVAkyNAorLyogVURJIHBpeGVsIGRp dmlkZXIgZm9yIFZHQSwgc2FtZSBhcyBEUExMX01EX1VESV9ESVZJREVSX01BU0suICovCisjZGVm aW5lIERQTExfTURfVkdBX1VESV9ESVZJREVSX01BU0sJMHgwMDNmMDAwMAorI2RlZmluZSBEUExM X01EX1ZHQV9VRElfRElWSURFUl9TSElGVAkxNgorLyoKKyAqIFNEVk8vVURJIHBpeGVsIG11bHRp cGxpZXIuCisgKgorICogU0RWTyByZXF1aXJlcyB0aGF0IHRoZSBidXMgY2xvY2sgcmF0ZSBiZSBi ZXR3ZWVuIDEgYW5kIDIgR2h6LCBhbmQgdGhlIGJ1cworICogY2xvY2sgcmF0ZSBpcyAxMCB0aW1l cyB0aGUgRFBMTCBjbG9jay4gIEF0IGxvdyByZXNvbHV0aW9uL3JlZnJlc2ggcmF0ZQorICogbW9k ZXMsIHRoZSBidXMgcmF0ZSB3b3VsZCBiZSBiZWxvdyB0aGUgbGltaXRzLCBzbyBTRFZPIGFsbG93 cyBmb3Igc3R1ZmZpbmcKKyAqIGR1bW15IGJ5dGVzIGluIHRoZSBkYXRhc3RyZWFtIGF0IGFuIGlu Y3JlYXNlZCBjbG9jayByYXRlLCB3aXRoIGJvdGggc2lkZXMgb2YKKyAqIHRoZSBsaW5rIGtub3dp bmcgaG93IG1hbnkgYnl0ZXMgYXJlIGZpbGwuCisgKgorICogU28sIGZvciBhIG1vZGUgd2l0aCBh IGRvdGNsb2NrIG9mIDY1TWh6LCB3ZSB3b3VsZCB3YW50IHRvIGRvdWJsZSB0aGUgY2xvY2sKKyAq IHJhdGUgdG8gMTMwTWh6IHRvIGdldCBhIGJ1cyByYXRlIG9mIDEuMzBHaHouICBUaGUgRFBMTCBj bG9jayByYXRlIHdvdWxkIGJlCisgKiBzZXQgdG8gMTMwTWh6LCBhbmQgdGhlIFNEVk8gbXVsdGlw bGllciBzZXQgdG8gMnggaW4gdGhpcyByZWdpc3RlciBhbmQKKyAqIHRocm91Z2ggYW4gU0RWTyBj b21tYW5kLgorICoKKyAqIFRoaXMgcmVnaXN0ZXIgZmllbGQgaGFzIHZhbHVlcyBvZiBtdWx0aXBs aWNhdGlvbiBmYWN0b3IgbWludXMgMSwgd2l0aAorICogYSBtYXhpbXVtIG11bHRpcGxpZXIgb2Yg NSBmb3IgU0RWTy4KKyAqLworI2RlZmluZSBEUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0sJMHgw MDAwM2YwMAorI2RlZmluZSBEUExMX01EX1VESV9NVUxUSVBMSUVSX1NISUZUCTgKKy8qCisgKiBT RFZPL1VESSBwaXhlbCBtdWx0aXBsaWVyIGZvciBWR0EsIHNhbWUgYXMgRFBMTF9NRF9VRElfTVVM VElQTElFUl9NQVNLLgorICogVGhpcyBiZXN0IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSAo Mykgb3IgdGhlIENSVCB3b24ndCB3b3JrLiBObywKKyAqIEkgZG9uJ3QgZW50aXJlbHkgdW5kZXJz dGFuZCB3aGF0IHRoaXMgZG9lcy4uLgorICovCisjZGVmaW5lIERQTExfTURfVkdBX1VESV9NVUxU SVBMSUVSX01BU0sJMHgwMDAwMDAzZgorI2RlZmluZSBEUExMX01EX1ZHQV9VRElfTVVMVElQTElF Ul9TSElGVCAwCisKKyNkZWZpbmUgRFBMTF9URVNUCQkweDYwNmMKKyNkZWZpbmUgRFBMTEJfVEVT VF9TRFZPX0RJVl8xCQkoMCA8PCAyMikKKyNkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl8yCQko MSA8PCAyMikKKyNkZWZpbmUgRFBMTEJfVEVTVF9TRFZPX0RJVl80CQkoMiA8PCAyMikKKyNkZWZp bmUgRFBMTEJfVEVTVF9TRFZPX0RJVl9NQVNLCSgzIDw8IDIyKQorI2RlZmluZSBEUExMQl9URVNU X05fQllQQVNTCQkoMSA8PCAxOSkKKyNkZWZpbmUgRFBMTEJfVEVTVF9NX0JZUEFTUwkJKDEgPDwg MTgpCisjZGVmaW5lIERQTExCX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMTYpCisjZGVmaW5l IERQTExBX1RFU1RfTl9CWVBBU1MJCSgxIDw8IDMpCisjZGVmaW5lIERQTExBX1RFU1RfTV9CWVBB U1MJCSgxIDw8IDIpCisjZGVmaW5lIERQTExBX0lOUFVUX0JVRkZFUl9FTkFCTEUJKDEgPDwgMCkK KworI2RlZmluZSBBRFBBCQkJMHg2MTEwMAorI2RlZmluZSBBRFBBX0RBQ19FTkFCTEUJCQkoMSA8 PCAzMSkKKyNkZWZpbmUgQURQQV9EQUNfRElTQUJMRQkJMAorI2RlZmluZSBBRFBBX1BJUEVfU0VM RUNUX01BU0sJCSgxIDw8IDMwKQorI2RlZmluZSBBRFBBX1BJUEVfQV9TRUxFQ1QJCTAKKyNkZWZp bmUgQURQQV9QSVBFX0JfU0VMRUNUCQkoMSA8PCAzMCkKKyNkZWZpbmUgQURQQV9VU0VfVkdBX0hW UE9MQVJJVFkJCSgxIDw8IDE1KQorI2RlZmluZSBBRFBBX1NFVFNfSFZQT0xBUklUWQkJMAorI2Rl ZmluZSBBRFBBX1ZTWU5DX0NOVExfRElTQUJMRQkJKDEgPDwgMTEpCisjZGVmaW5lIEFEUEFfVlNZ TkNfQ05UTF9FTkFCTEUJCTAKKyNkZWZpbmUgQURQQV9IU1lOQ19DTlRMX0RJU0FCTEUJCSgxIDw8 IDEwKQorI2RlZmluZSBBRFBBX0hTWU5DX0NOVExfRU5BQkxFCQkwCisjZGVmaW5lIEFEUEFfVlNZ TkNfQUNUSVZFX0hJR0gJCSgxIDw8IDQpCisjZGVmaW5lIEFEUEFfVlNZTkNfQUNUSVZFX0xPVwkJ MAorI2RlZmluZSBBRFBBX0hTWU5DX0FDVElWRV9ISUdICQkoMSA8PCAzKQorI2RlZmluZSBBRFBB X0hTWU5DX0FDVElWRV9MT1cJCTAKKworI2RlZmluZSBGUEEwCQkJMHgwNjA0MAorI2RlZmluZSBG UEExCQkJMHgwNjA0NAorI2RlZmluZSBGUEIwCQkJMHgwNjA0OAorI2RlZmluZSBGUEIxCQkJMHgw NjA0YworI2RlZmluZSBGUF9OX0RJVl9NQVNLCQkJMHgwMDNmMDAwMAorI2RlZmluZSBGUF9OX0RJ Vl9TSElGVAkJCTE2CisjZGVmaW5lIEZQX00xX0RJVl9NQVNLCQkJMHgwMDAwM2YwMAorI2RlZmlu ZSBGUF9NMV9ESVZfU0hJRlQJCQk4CisjZGVmaW5lIEZQX00yX0RJVl9NQVNLCQkJMHgwMDAwMDAz ZgorI2RlZmluZSBGUF9NMl9ESVZfU0hJRlQJCQkwCisKKyNkZWZpbmUgUE9SVF9IT1RQTFVHX0VO CQkweDYxMTEwCisjZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX0VOCQkoMSA8PCAyNikKKyNkZWZp bmUgU0RWT0NfSE9UUExVR19JTlRfRU4JCSgxIDw8IDI1KQorI2RlZmluZSBUVl9IT1RQTFVHX0lO VF9FTgkJKDEgPDwgMTgpCisjZGVmaW5lIENSVF9IT1RQTFVHX0lOVF9FTgkJKDEgPDwgOSkKKyNk ZWZpbmUgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUCSgxIDw8IDMpCisvKiBDRFYuLiAqLworI2Rl ZmluZSBDUlRfSE9UUExVR19BQ1RJVkFUSU9OX1BFUklPRF82NAkoMSA8PCA4KQorI2RlZmluZSBD UlRfSE9UUExVR19EQUNfT05fVElNRV8yTQkJKDAgPDwgNykKKyNkZWZpbmUgQ1JUX0hPVFBMVUdf REFDX09OX1RJTUVfNE0JCSgxIDw8IDcpCisjZGVmaW5lIENSVF9IT1RQTFVHX1ZPTFRBR0VfQ09N UEFSRV80MAkJKDAgPDwgNSkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzUw CQkoMSA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfNjAJCSgyIDw8 IDUpCisjZGVmaW5lIENSVF9IT1RQTFVHX1ZPTFRBR0VfQ09NUEFSRV83MAkJKDMgPDwgNSkKKyNk ZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFX01BU0sJKDMgPDwgNSkKKyNkZWZpbmUg Q1JUX0hPVFBMVUdfREVURUNUX0RFTEFZXzFHCQkoMCA8PCA0KQorI2RlZmluZSBDUlRfSE9UUExV R19ERVRFQ1RfREVMQVlfMkcJCSgxIDw8IDQpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9W T0xUQUdFXzMyNU1WCSgwIDw8IDIpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9WT0xUQUdF XzQ3NU1WCSgxIDw8IDIpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9NQVNLCQkJMHgwMDAw MDBGOAorCisjZGVmaW5lIFBPUlRfSE9UUExVR19TVEFUCTB4NjExMTQKKyNkZWZpbmUgQ1JUX0hP VFBMVUdfSU5UX1NUQVRVUwkJKDEgPDwgMTEpCisjZGVmaW5lIFRWX0hPVFBMVUdfSU5UX1NUQVRV UwkJKDEgPDwgMTApCisjZGVmaW5lIENSVF9IT1RQTFVHX01PTklUT1JfTUFTSwkoMyA8PCA4KQor I2RlZmluZSBDUlRfSE9UUExVR19NT05JVE9SX0NPTE9SCSgzIDw8IDgpCisjZGVmaW5lIENSVF9I T1RQTFVHX01PTklUT1JfTU9OTwkoMiA8PCA4KQorI2RlZmluZSBDUlRfSE9UUExVR19NT05JVE9S X05PTkUJKDAgPDwgOCkKKyNkZWZpbmUgU0RWT0NfSE9UUExVR19JTlRfU1RBVFVTCSgxIDw8IDcp CisjZGVmaW5lIFNEVk9CX0hPVFBMVUdfSU5UX1NUQVRVUwkoMSA8PCA2KQorCisjZGVmaW5lIFNE Vk9CCQkJMHg2MTE0MAorI2RlZmluZSBTRFZPQwkJCTB4NjExNjAKKyNkZWZpbmUgU0RWT19FTkFC TEUJCQkoMSA8PCAzMSkKKyNkZWZpbmUgU0RWT19QSVBFX0JfU0VMRUNUCQkoMSA8PCAzMCkKKyNk ZWZpbmUgU0RWT19TVEFMTF9TRUxFQ1QJCSgxIDw8IDI5KQorI2RlZmluZSBTRFZPX0lOVEVSUlVQ VF9FTkFCTEUJCSgxIDw8IDI2KQorCisvKioKKyAqIDkxNUcvR00gU0RWTyBwaXhlbCBtdWx0aXBs aWVyLgorICoKKyAqIFByb2dyYW1tZWQgdmFsdWUgaXMgbXVsdGlwbGllciAtIDEsIHVwIHRvIDV4 LgorICoKKyAqIERQTExfTURfVURJX01VTFRJUExJRVJfTUFTSworICovCisjZGVmaW5lIFNEVk9f UE9SVF9NVUxUSVBMWV9NQVNLCQkoNyA8PCAyMykKKyNkZWZpbmUgU0RWT19QT1JUX01VTFRJUExZ X1NISUZUCTIzCisjZGVmaW5lIFNEVk9fUEhBU0VfU0VMRUNUX01BU0sJCSgxNSA8PCAxOSkKKyNk ZWZpbmUgU0RWT19QSEFTRV9TRUxFQ1RfREVGQVVMVAkoNiA8PCAxOSkKKyNkZWZpbmUgU0RWT19D TE9DS19PVVRQVVRfSU5WRVJUCSgxIDw8IDE4KQorI2RlZmluZSBTRFZPQ19HQU5HX01PREUJCQko MSA8PCAxNikKKyNkZWZpbmUgU0RWT19CT1JERVJfRU5BQkxFCQkoMSA8PCA3KQorI2RlZmluZSBT RFZPQl9QQ0lFX0NPTkNVUlJFTkNZCQkoMSA8PCAzKQorI2RlZmluZSBTRFZPX0RFVEVDVEVECQkJ KDEgPDwgMikKKy8qIEJpdHMgdG8gYmUgcHJlc2VydmVkIHdoZW4gd3JpdGluZyAqLworI2RlZmlu ZSBTRFZPQl9QUkVTRVJWRV9NQVNLCQkoKDEgPDwgMTcpIHwgKDEgPDwgMTYpIHwgKDEgPDwgMTQp KQorI2RlZmluZSBTRFZPQ19QUkVTRVJWRV9NQVNLCQkoMSA8PCAxNykKKworLyoKKyAqIFRoaXMg cmVnaXN0ZXIgY29udHJvbHMgdGhlIExWRFMgb3V0cHV0IGVuYWJsZSwgcGlwZSBzZWxlY3Rpb24s IGFuZCBkYXRhCisgKiBmb3JtYXQgc2VsZWN0aW9uLgorICoKKyAqIEFsbCBvZiB0aGUgY2xvY2sv ZGF0YSBwYWlycyBhcmUgZm9yY2UgcG93ZXJlZCBkb3duIGJ5IHBvd2VyIHNlcXVlbmNpbmcuCisg Ki8KKyNkZWZpbmUgTFZEUwkJCTB4NjExODAKKy8qCisgKiBFbmFibGVzIHRoZSBMVkRTIHBvcnQu ICBUaGlzIGJpdCBtdXN0IGJlIHNldCBiZWZvcmUgRFBMTHMgYXJlIGVuYWJsZWQsIGFzCisgKiB0 aGUgRFBMTCBzZW1hbnRpY3MgY2hhbmdlIHdoZW4gdGhlIExWRFMgaXMgYXNzaWduZWQgdG8gdGhh dCBwaXBlLgorICovCisjZGVmaW5lIExWRFNfUE9SVF9FTgkJCSgxIDw8IDMxKQorLyogU2VsZWN0 cyBwaXBlIEIgZm9yIExWRFMgZGF0YS4gIE11c3QgYmUgc2V0IG9uIHByZS05NjUuICovCisjZGVm aW5lIExWRFNfUElQRUJfU0VMRUNUCQkoMSA8PCAzMCkKKworLyogVHVybnMgb24gYm9yZGVyIGRy YXdpbmcgdG8gYWxsb3cgY2VudGVyZWQgZGlzcGxheS4gKi8KKyNkZWZpbmUgTFZEU19CT1JERVJf RU4JCQkoMSA8PCAxNSkKKworLyoKKyAqIEVuYWJsZXMgdGhlIEEwLUEyIGRhdGEgcGFpcnMgYW5k IENMS0EsIGNvbnRhaW5pbmcgMTggYml0cyBvZiBjb2xvciBkYXRhIHBlcgorICogcGl4ZWwuCisg Ki8KKyNkZWZpbmUgTFZEU19BMEEyX0NMS0FfUE9XRVJfTUFTSwkoMyA8PCA4KQorI2RlZmluZSBM VkRTX0EwQTJfQ0xLQV9QT1dFUl9ET1dOCSgwIDw8IDgpCisjZGVmaW5lIExWRFNfQTBBMl9DTEtB X1BPV0VSX1VQCQkoMyA8PCA4KQorLyoKKyAqIENvbnRyb2xzIHRoZSBBMyBkYXRhIHBhaXIsIHdo aWNoIGNvbnRhaW5zIHRoZSBhZGRpdGlvbmFsIExTQnMgZm9yIDI0IGJpdAorICogbW9kZS4gIE9u bHkgZW5hYmxlZCBpZiBMVkRTX0EwQTJfQ0xLQV9QT1dFUl9VUCBhbHNvIGluZGljYXRlcyBpdCBz aG91bGQgYmUKKyAqIG9uLgorICovCisjZGVmaW5lIExWRFNfQTNfUE9XRVJfTUFTSwkJKDMgPDwg NikKKyNkZWZpbmUgTFZEU19BM19QT1dFUl9ET1dOCQkoMCA8PCA2KQorI2RlZmluZSBMVkRTX0Ez X1BPV0VSX1VQCQkoMyA8PCA2KQorLyoKKyAqIENvbnRyb2xzIHRoZSBDTEtCIHBhaXIuICBUaGlz IHNob3VsZCBvbmx5IGJlIHNldCB3aGVuIExWRFNfQjBCM19QT1dFUl9VUAorICogaXMgc2V0Lgor ICovCisjZGVmaW5lIExWRFNfQ0xLQl9QT1dFUl9NQVNLCQkoMyA8PCA0KQorI2RlZmluZSBMVkRT X0NMS0JfUE9XRVJfRE9XTgkJKDAgPDwgNCkKKyNkZWZpbmUgTFZEU19DTEtCX1BPV0VSX1VQCQko MyA8PCA0KQorLyoKKyAqIENvbnRyb2xzIHRoZSBCMC1CMyBkYXRhIHBhaXJzLiAgVGhpcyBtdXN0 IGJlIHNldCB0byBtYXRjaCB0aGUgRFBMTCBwMgorICogc2V0dGluZyBmb3Igd2hldGhlciB3ZSBh cmUgaW4gZHVhbC1jaGFubmVsIG1vZGUuICBUaGUgQjMgcGFpciB3aWxsCisgKiBhZGRpdGlvbmFs bHkgb25seSBiZSBwb3dlcmVkIHVwIHdoZW4gTFZEU19BM19QT1dFUl9VUCBpcyBzZXQuCisgKi8K KyNkZWZpbmUgTFZEU19CMEIzX1BPV0VSX01BU0sJCSgzIDw8IDIpCisjZGVmaW5lIExWRFNfQjBC M19QT1dFUl9ET1dOCQkoMCA8PCAyKQorI2RlZmluZSBMVkRTX0IwQjNfUE9XRVJfVVAJCSgzIDw8 IDIpCisKKyNkZWZpbmUgUElQRUFDT05GCQkweDcwMDA4CisjZGVmaW5lIFBJUEVBQ09ORl9FTkFC TEUJCSgxIDw8IDMxKQorI2RlZmluZSBQSVBFQUNPTkZfRElTQUJMRQkJMAorI2RlZmluZSBQSVBF QUNPTkZfRE9VQkxFX1dJREUJCSgxIDw8IDMwKQorI2RlZmluZSBQSVBFQ09ORl9BQ1RJVkUJCQko MSA8PCAzMCkKKyNkZWZpbmUgSTk2NV9QSVBFQ09ORl9BQ1RJVkUJCSgxIDw8IDMwKQorI2RlZmlu ZSBQSVBFQ09ORl9EU0lQTExfTE9DSwkJKDEgPDwgMjkpCisjZGVmaW5lIFBJUEVBQ09ORl9TSU5H TEVfV0lERQkJMAorI2RlZmluZSBQSVBFQUNPTkZfUElQRV9VTkxPQ0tFRAkJMAorI2RlZmluZSBQ SVBFQUNPTkZfRFNSCQkJKDEgPDwgMjYpCisjZGVmaW5lIFBJUEVBQ09ORl9QSVBFX0xPQ0tFRAkJ KDEgPDwgMjUpCisjZGVmaW5lIFBJUEVBQ09ORl9QQUxFVFRFCQkwCisjZGVmaW5lIFBJUEVDT05G X0ZPUkNFX0JPUkRFUgkJKDEgPDwgMjUpCisjZGVmaW5lIFBJUEVBQ09ORl9HQU1NQQkJCSgxIDw8 IDI0KQorI2RlZmluZSBQSVBFQ09ORl9QUk9HUkVTU0lWRQkJKDAgPDwgMjEpCisjZGVmaW5lIFBJ UEVDT05GX0lOVEVSTEFDRV9XX0ZJRUxEX0lORElDQVRJT04JKDYgPDwgMjEpCisjZGVmaW5lIFBJ UEVDT05GX0lOVEVSTEFDRV9GSUVMRF8wX09OTFkJCSg3IDw8IDIxKQorI2RlZmluZSBQSVBFQ09O Rl9QTEFORV9PRkYJCSgxIDw8IDE5KQorI2RlZmluZSBQSVBFQ09ORl9DVVJTT1JfT0ZGCQkoMSA8 PCAxOCkKKworI2RlZmluZSBQSVBFQkNPTkYJCTB4NzEwMDgKKyNkZWZpbmUgUElQRUJDT05GX0VO QUJMRQkJKDEgPDwgMzEpCisjZGVmaW5lIFBJUEVCQ09ORl9ESVNBQkxFCQkwCisjZGVmaW5lIFBJ UEVCQ09ORl9ET1VCTEVfV0lERQkJKDEgPDwgMzApCisjZGVmaW5lIFBJUEVCQ09ORl9ESVNBQkxF CQkwCisjZGVmaW5lIFBJUEVCQ09ORl9HQU1NQQkJCSgxIDw8IDI0KQorI2RlZmluZSBQSVBFQkNP TkZfUEFMRVRURQkJMAorCisjZGVmaW5lIFBJUEVDQ09ORgkJMHg3MjAwOAorCisjZGVmaW5lIFBJ UEVCR0NNQVhSRUQJCTB4NzEwMTAKKyNkZWZpbmUgUElQRUJHQ01BWEdSRUVOCQkweDcxMDE0Cisj ZGVmaW5lIFBJUEVCR0NNQVhCTFVFCQkweDcxMDE4CisKKyNkZWZpbmUgUElQRUFTVEFUCQkweDcw MDI0CisjZGVmaW5lIFBJUEVCU1RBVAkJMHg3MTAyNAorI2RlZmluZSBQSVBFQ1NUQVQJCTB4NzIw MjQKKyNkZWZpbmUgUElQRV9WQkxBTktfSU5URVJSVVBUX1NUQVRVUwkJKDFVTCA8PCAxKQorI2Rl ZmluZSBQSVBFX1NUQVJUX1ZCTEFOS19JTlRFUlJVUFRfU1RBVFVTCSgxVUwgPDwgMikKKyNkZWZp bmUgUElQRV9WQkxBTktfQ0xFQVIJCQkoMSA8PCAxKQorI2RlZmluZSBQSVBFX1ZCTEFOS19TVEFU VVMJCQkoMSA8PCAxKQorI2RlZmluZSBQSVBFX1RFX1NUQVRVUwkJCQkoMVVMIDw8IDYpCisjZGVm aW5lIFBJUEVfRFBTVF9FVkVOVF9TVEFUVVMJCQkoMVVMIDw8IDcpCisjZGVmaW5lIFBJUEVfVlNZ TkNfQ0xFQVIJCQkoMVVMIDw8IDkpCisjZGVmaW5lIFBJUEVfVlNZTkNfU1RBVFVTCQkJKDFVTCA8 PCA5KQorI2RlZmluZSBQSVBFX0hETUlfQVVESU9fVU5ERVJSVU5fU1RBVFVTCQkoMVVMIDw8IDEw KQorI2RlZmluZSBQSVBFX0hETUlfQVVESU9fQlVGRkVSX0RPTkVfU1RBVFVTCSgxVUwgPDwgMTEp CisjZGVmaW5lIFBJUEVfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJCSgxVUwgPDwgMTcpCisjZGVm aW5lIFBJUEVfU1RBUlRfVkJMQU5LX0lOVEVSUlVQVF9FTkFCTEUJKDFVTCA8PCAxOCkKKyNkZWZp bmUgUElQRV9URV9FTkFCTEUJCQkJKDFVTCA8PCAyMikKKyNkZWZpbmUgUElQRV9EUFNUX0VWRU5U X0VOQUJMRQkJCSgxVUwgPDwgMjMpCisjZGVmaW5lIFBJUEVfVlNZTkNfRU5BQkwJCQkoMVVMIDw8 IDI1KQorI2RlZmluZSBQSVBFX0hETUlfQVVESU9fVU5ERVJSVU4JCSgxVUwgPDwgMjYpCisjZGVm aW5lIFBJUEVfSERNSV9BVURJT19CVUZGRVJfRE9ORQkJKDFVTCA8PCAyNykKKyNkZWZpbmUgUElQ RV9IRE1JX0FVRElPX0lOVF9NQVNLCQkoUElQRV9IRE1JX0FVRElPX1VOREVSUlVOIHwgXAorCQkJ CQkJUElQRV9IRE1JX0FVRElPX0JVRkZFUl9ET05FKQorI2RlZmluZSBQSVBFX0VWRU5UX01BU0sg KCgxIDw8IDI5KXwoMSA8PCAyOCl8KDEgPDwgMjcpfCgxIDw8IDI2KXwoMSA8PCAyNCl8KDEgPDwg MjMpfCgxIDw8IDIyKXwoMSA8PCAyMSl8KDEgPDwgMjApfCgxIDw8IDE2KSkKKyNkZWZpbmUgUElQ RV9WQkxBTktfTUFTSyAoKDEgPDwgMjUpfCgxIDw8IDI0KXwoMSA8PCAxOCl8KDEgPDwgMTcpKQor I2RlZmluZSBISVNUT0dSQU1fSU5UX0NPTlRST0wJCTB4NjEyNjgKKyNkZWZpbmUgSElTVE9HUkFN X0JJTl9EQVRBCQkwWDYxMjY0CisjZGVmaW5lIEhJU1RPR1JBTV9MT0dJQ19DT05UUk9MCQkweDYx MjYwCisjZGVmaW5lIFBXTV9DT05UUk9MX0xPR0lDCQkweDYxMjUwCisjZGVmaW5lIFBJUEVfSE9U UExVR19JTlRFUlJVUFRfU1RBVFVTCQkoMVVMIDw8IDEwKQorI2RlZmluZSBISVNUT0dSQU1fSU5U RVJSVVBUX0VOQUJMRQkJKDFVTCA8PCAzMSkKKyNkZWZpbmUgSElTVE9HUkFNX0xPR0lDX0VOQUJM RQkJCSgxVUwgPDwgMzEpCisjZGVmaW5lIFBXTV9MT0dJQ19FTkFCTEUJCQkoMVVMIDw8IDMxKQor I2RlZmluZSBQV01fUEhBU0VJTl9FTkFCTEUJCQkoMVVMIDw8IDI1KQorI2RlZmluZSBQV01fUEhB U0VJTl9JTlRfRU5BQkxFCQkJKDFVTCA8PCAyNCkKKyNkZWZpbmUgUFdNX1BIQVNFSU5fVkJfQ09V TlQJCQkweDAwMDAxZjAwCisjZGVmaW5lIFBXTV9QSEFTRUlOX0lOQwkJCQkweDAwMDAwMDFmCisj ZGVmaW5lIEhJU1RPR1JBTV9JTlRfQ1RSTF9DTEVBUgkJKDFVTCA8PCAzMCkKKyNkZWZpbmUgRFBT VF9ZVVZfTFVNQV9NT0RFCQkJMAorCitzdHJ1Y3QgZHBzdF9pZV9oaXN0b2dyYW1fY29udHJvbCB7 CisJdW5pb24geworCQl1aW50MzJfdCBkYXRhOworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgYmlu X3JlZ19pbmRleDo3OworCQkJdWludDMyX3QgcmVzZXJ2ZWQ6NDsKKwkJCXVpbnQzMl90IGJpbl9y ZWdfZnVuY19zZWxlY3Q6MTsKKwkJCXVpbnQzMl90IHN5bmNfdG9fcGhhc2VfaW46MTsKKwkJCXVp bnQzMl90IGFsdF9lbmhhbmNlbWVudF9tb2RlOjI7CisJCQl1aW50MzJfdCByZXNlcnZlZDE6MTsK KwkJCXVpbnQzMl90IHN5bmNfdG9fcGhhc2VfaW5fY291bnQ6ODsKKwkJCXVpbnQzMl90IGhpc3Rv Z3JhbV9tb2RlX3NlbGVjdDoxOworCQkJdWludDMyX3QgcmVzZXJ2ZWQyOjQ7CisJCQl1aW50MzJf dCBpZV9waXBlX2Fzc2lnbm1lbnQ6MTsKKwkJCXVpbnQzMl90IGllX21vZGVfdGFibGVfZW5hYmxl ZDoxOworCQkJdWludDMyX3QgaWVfaGlzdG9ncmFtX2VuYWJsZToxOworCQl9OworCX07Cit9Owor CitzdHJ1Y3QgZHBzdF9ndWFyZGJhbmQgeworCXVuaW9uIHsKKwkJdWludDMyX3QgZGF0YTsKKwkJ c3RydWN0IHsKKwkJCXVpbnQzMl90IGd1YXJkYmFuZDoyMjsKKwkJCXVpbnQzMl90IGd1YXJkYmFu ZF9pbnRlcnJ1cHRfZGVsYXk6ODsKKwkJCXVpbnQzMl90IGludGVycnVwdF9zdGF0dXM6MTsKKwkJ CXVpbnQzMl90IGludGVycnVwdF9lbmFibGU6MTsKKwkJfTsKKwl9OworfTsKKworI2RlZmluZSBQ SVBFQUZSQU1FSElHSAkJMHg3MDA0MAorI2RlZmluZSBQSVBFQUZSQU1FUElYRUwJCTB4NzAwNDQK KyNkZWZpbmUgUElQRUJGUkFNRUhJR0gJCTB4NzEwNDAKKyNkZWZpbmUgUElQRUJGUkFNRVBJWEVM CQkweDcxMDQ0CisjZGVmaW5lIFBJUEVDRlJBTUVISUdICQkweDcyMDQwCisjZGVmaW5lIFBJUEVD RlJBTUVQSVhFTAkJMHg3MjA0NAorI2RlZmluZSBQSVBFX0ZSQU1FX0hJR0hfTUFTSwkweDAwMDBm ZmZmCisjZGVmaW5lIFBJUEVfRlJBTUVfSElHSF9TSElGVAkwCisjZGVmaW5lIFBJUEVfRlJBTUVf TE9XX01BU0sJMHhmZjAwMDAwMAorI2RlZmluZSBQSVBFX0ZSQU1FX0xPV19TSElGVAkyNAorI2Rl ZmluZSBQSVBFX1BJWEVMX01BU0sJCTB4MDBmZmZmZmYKKyNkZWZpbmUgUElQRV9QSVhFTF9TSElG VAkwCisKKyNkZWZpbmUgRFNQQVJCCQkJMHg3MDAzMAorI2RlZmluZSBEU1BGVzEJCQkweDcwMDM0 CisjZGVmaW5lIERTUEZXMgkJCTB4NzAwMzgKKyNkZWZpbmUgRFNQRlczCQkJMHg3MDAzYworI2Rl ZmluZSBEU1BGVzQJCQkweDcwMDUwCisjZGVmaW5lIERTUEZXNQkJCTB4NzAwNTQKKyNkZWZpbmUg RFNQRlc2CQkJMHg3MDA1OAorI2RlZmluZSBEU1BDSElDS0VOQklUCQkweDcwNDAwCisjZGVmaW5l IERTUEFDTlRSCQkweDcwMTgwCisjZGVmaW5lIERTUEJDTlRSCQkweDcxMTgwCisjZGVmaW5lIERT UENDTlRSCQkweDcyMTgwCisjZGVmaW5lIERJU1BMQVlfUExBTkVfRU5BQkxFCQkJKDEgPDwgMzEp CisjZGVmaW5lIERJU1BMQVlfUExBTkVfRElTQUJMRQkJCTAKKyNkZWZpbmUgRElTUFBMQU5FX0dB TU1BX0VOQUJMRQkJCSgxIDw8IDMwKQorI2RlZmluZSBESVNQUExBTkVfR0FNTUFfRElTQUJMRQkJ CTAKKyNkZWZpbmUgRElTUFBMQU5FX1BJWEZPUk1BVF9NQVNLCQkoMHhmIDw8IDI2KQorI2RlZmlu ZSBESVNQUExBTkVfOEJQUAkJCQkoMHgyIDw8IDI2KQorI2RlZmluZSBESVNQUExBTkVfMTVfMTZC UFAJCQkoMHg0IDw8IDI2KQorI2RlZmluZSBESVNQUExBTkVfMTZCUFAJCQkJKDB4NSA8PCAyNikK KyNkZWZpbmUgRElTUFBMQU5FXzMyQlBQX05PX0FMUEhBCQkoMHg2IDw8IDI2KQorI2RlZmluZSBE SVNQUExBTkVfMzJCUFAJCQkJKDB4NyA8PCAyNikKKyNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19F TkFCTEUJCQkoMSA8PCAyNSkKKyNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19ESVNBQkxFCQkwCisj ZGVmaW5lIERJU1BQTEFORV9TRUxfUElQRV9NQVNLCQkJKDEgPDwgMjQpCisjZGVmaW5lIERJU1BQ TEFORV9TRUxfUElQRV9QT1MJCQkyNAorI2RlZmluZSBESVNQUExBTkVfU0VMX1BJUEVfQQkJCTAK KyNkZWZpbmUgRElTUFBMQU5FX1NFTF9QSVBFX0IJCQkoMSA8PCAyNCkKKyNkZWZpbmUgRElTUFBM QU5FX1NSQ19LRVlfRU5BQkxFCQkoMSA8PCAyMikKKyNkZWZpbmUgRElTUFBMQU5FX1NSQ19LRVlf RElTQUJMRQkJMAorI2RlZmluZSBESVNQUExBTkVfTElORV9ET1VCTEUJCQkoMSA8PCAyMCkKKyNk ZWZpbmUgRElTUFBMQU5FX05PX0xJTkVfRE9VQkxFCQkwCisjZGVmaW5lIERJU1BQTEFORV9TVEVS RU9fUE9MQVJJVFlfRklSU1QJCTAKKyNkZWZpbmUgRElTUFBMQU5FX1NURVJFT19QT0xBUklUWV9T RUNPTkQJKDEgPDwgMTgpCisvKiBwbGFuZSBCIG9ubHkgKi8KKyNkZWZpbmUgRElTUFBMQU5FX0FM UEhBX1RSQU5TX0VOQUJMRQkJKDEgPDwgMTUpCisjZGVmaW5lIERJU1BQTEFORV9BTFBIQV9UUkFO U19ESVNBQkxFCQkwCisjZGVmaW5lIERJU1BQTEFORV9TUFJJVEVfQUJPVkVfRElTUExBWUEJCTAK KyNkZWZpbmUgRElTUFBMQU5FX1NQUklURV9BQk9WRV9PVkVSTEFZCQkoMSkKKyNkZWZpbmUgRElT UFBMQU5FX0JPVFRPTQkJCSg0KQorCisjZGVmaW5lIERTUEFCQVNFCQkweDcwMTg0CisjZGVmaW5l IERTUEFMSU5PRkYJCTB4NzAxODQKKyNkZWZpbmUgRFNQQVNUUklERQkJMHg3MDE4OAorCisjZGVm aW5lIERTUEJCQVNFCQkweDcxMTg0CisjZGVmaW5lIERTUEJMSU5PRkYJCTBYNzExODQKKyNkZWZp bmUgRFNQQkFERFIJCURTUEJCQVNFCisjZGVmaW5lIERTUEJTVFJJREUJCTB4NzExODgKKworI2Rl ZmluZSBEU1BDQkFTRQkJMHg3MjE4NAorI2RlZmluZSBEU1BDTElOT0ZGCQkweDcyMTg0CisjZGVm aW5lIERTUENTVFJJREUJCTB4NzIxODgKKworI2RlZmluZSBEU1BBS0VZVkFMCQkweDcwMTk0Cisj ZGVmaW5lIERTUEFLRVlNQVNLCQkweDcwMTk4CisKKyNkZWZpbmUgRFNQQVBPUwkJCTB4NzAxOEMJ LyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRFNQQVNJWkUJCTB4NzAxOTAKKyNkZWZpbmUgRFNQQlBP UwkJCTB4NzExOEMKKyNkZWZpbmUgRFNQQlNJWkUJCTB4NzExOTAKKyNkZWZpbmUgRFNQQ1BPUwkJ CTB4NzIxOEMKKyNkZWZpbmUgRFNQQ1NJWkUJCTB4NzIxOTAKKworI2RlZmluZSBEU1BBU1VSRgkJ MHg3MDE5QworI2RlZmluZSBEU1BBVElMRU9GRgkJMHg3MDFBNAorCisjZGVmaW5lIERTUEJTVVJG CQkweDcxMTlDCisjZGVmaW5lIERTUEJUSUxFT0ZGCQkweDcxMUE0CisKKyNkZWZpbmUgRFNQQ1NV UkYJCTB4NzIxOUMKKyNkZWZpbmUgRFNQQ1RJTEVPRkYJCTB4NzIxQTQKKyNkZWZpbmUgRFNQQ0tF WU1BWFZBTAkJMHg3MjFBMAorI2RlZmluZSBEU1BDS0VZTUlOVkFMCQkweDcyMTk0CisjZGVmaW5l IERTUENLRVlNU0sJCTB4NzIxOTgKKworI2RlZmluZSBWR0FDTlRSTAkJMHg3MTQwMAorI2RlZmlu ZSBWR0FfRElTUF9ESVNBQkxFCQkoMSA8PCAzMSkKKyNkZWZpbmUgVkdBXzJYX01PREUJCQkoMSA8 PCAzMCkKKyNkZWZpbmUgVkdBX1BJUEVfQl9TRUxFQ1QJCSgxIDw8IDI5KQorCisvKgorICogT3Zl cmxheSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBPVl9DX09GRlNFVAkJMHgwODAwMAorI2RlZmlu ZSBPVl9PVkFERAkJMHgzMDAwMAorI2RlZmluZSBPVl9ET1ZBU1RBCQkweDMwMDA4CisjIGRlZmlu ZSBPVl9QSVBFX1NFTEVDVAkJCSgoMSA8PCA2KXwoMSA8PCA3KSkKKyMgZGVmaW5lIE9WX1BJUEVf U0VMRUNUX1BPUwkJNgorIyBkZWZpbmUgT1ZfUElQRV9BCQkJMAorIyBkZWZpbmUgT1ZfUElQRV9D CQkJMQorI2RlZmluZSBPVl9PR0FNQzUJCTB4MzAwMTAKKyNkZWZpbmUgT1ZfT0dBTUM0CQkweDMw MDE0CisjZGVmaW5lIE9WX09HQU1DMwkJMHgzMDAxOAorI2RlZmluZSBPVl9PR0FNQzIJCTB4MzAw MUMKKyNkZWZpbmUgT1ZfT0dBTUMxCQkweDMwMDIwCisjZGVmaW5lIE9WX09HQU1DMAkJMHgzMDAy NAorI2RlZmluZSBPVkNfT1ZBREQJCTB4MzgwMDAKKyNkZWZpbmUgT1ZDX0RPVkNTVEEJCTB4Mzgw MDgKKyNkZWZpbmUgT1ZDX09HQU1DNQkJMHgzODAxMAorI2RlZmluZSBPVkNfT0dBTUM0CQkweDM4 MDE0CisjZGVmaW5lIE9WQ19PR0FNQzMJCTB4MzgwMTgKKyNkZWZpbmUgT1ZDX09HQU1DMgkJMHgz ODAxQworI2RlZmluZSBPVkNfT0dBTUMxCQkweDM4MDIwCisjZGVmaW5lIE9WQ19PR0FNQzAJCTB4 MzgwMjQKKworLyoKKyAqIFNvbWUgQklPUyBzY3JhdGNoIGFyZWEgcmVnaXN0ZXJzLiAgVGhlIDg0 NSAoYW5kIDgzMD8pIHN0b3JlIHRoZSBhbW91bnQKKyAqIG9mIHZpZGVvIG1lbW9yeSBhdmFpbGFi bGUgdG8gdGhlIEJJT1MgaW4gU1dGMS4KKyAqLworI2RlZmluZSBTV0YwCQkJMHg3MTQxMAorI2Rl ZmluZSBTV0YxCQkJMHg3MTQxNAorI2RlZmluZSBTV0YyCQkJMHg3MTQxOAorI2RlZmluZSBTV0Yz CQkJMHg3MTQxYworI2RlZmluZSBTV0Y0CQkJMHg3MTQyMAorI2RlZmluZSBTV0Y1CQkJMHg3MTQy NAorI2RlZmluZSBTV0Y2CQkJMHg3MTQyOAorCisvKgorICogODU1IHNjcmF0Y2ggcmVnaXN0ZXJz LgorICovCisjZGVmaW5lIFNXRjAwCQkJMHg3MDQxMAorI2RlZmluZSBTV0YwMQkJCTB4NzA0MTQK KyNkZWZpbmUgU1dGMDIJCQkweDcwNDE4CisjZGVmaW5lIFNXRjAzCQkJMHg3MDQxYworI2RlZmlu ZSBTV0YwNAkJCTB4NzA0MjAKKyNkZWZpbmUgU1dGMDUJCQkweDcwNDI0CisjZGVmaW5lIFNXRjA2 CQkJMHg3MDQyOAorCisjZGVmaW5lIFNXRjEwCQkJU1dGMAorI2RlZmluZSBTV0YxMQkJCVNXRjEK KyNkZWZpbmUgU1dGMTIJCQlTV0YyCisjZGVmaW5lIFNXRjEzCQkJU1dGMworI2RlZmluZSBTV0Yx NAkJCVNXRjQKKyNkZWZpbmUgU1dGMTUJCQlTV0Y1CisjZGVmaW5lIFNXRjE2CQkJU1dGNgorCisj ZGVmaW5lIFNXRjMwCQkJMHg3MjQxNAorI2RlZmluZSBTV0YzMQkJCTB4NzI0MTgKKyNkZWZpbmUg U1dGMzIJCQkweDcyNDFjCisKKworLyoKKyAqIFBhbGV0dGUgcmVnaXN0ZXJzCisgKi8KKyNkZWZp bmUgUEFMRVRURV9BCQkweDBhMDAwCisjZGVmaW5lIFBBTEVUVEVfQgkJMHgwYTgwMAorI2RlZmlu ZSBQQUxFVFRFX0MJCTB4MGFjMDAKKworLyogQ3Vyc29yIEEgJiBCIHJlZ3MgKi8KKyNkZWZpbmUg Q1VSQUNOVFIJCTB4NzAwODAKKyNkZWZpbmUgQ1VSU09SX01PREVfRElTQUJMRQkJMHgwMAorI2Rl ZmluZSBDVVJTT1JfTU9ERV82NF8zMkJfQVgJCTB4MDcKKyNkZWZpbmUgQ1VSU09SX01PREVfNjRf QVJHQl9BWAkJKCgxIDw8IDUpIHwgQ1VSU09SX01PREVfNjRfMzJCX0FYKQorI2RlZmluZSBNQ1VS U09SX0dBTU1BX0VOQUJMRQkJKDEgPDwgMjYpCisjZGVmaW5lIENVUkFCQVNFCQkweDcwMDg0Cisj ZGVmaW5lIENVUkFQT1MJCQkweDcwMDg4CisjZGVmaW5lIENVUlNPUl9QT1NfTUFTSwkJCTB4MDA3 RkYKKyNkZWZpbmUgQ1VSU09SX1BPU19TSUdOCQkJMHg4MDAwCisjZGVmaW5lIENVUlNPUl9YX1NI SUZUCQkJMAorI2RlZmluZSBDVVJTT1JfWV9TSElGVAkJCTE2CisjZGVmaW5lIENVUkJDTlRSCQkw eDcwMGMwCisjZGVmaW5lIENVUkJCQVNFCQkweDcwMGM0CisjZGVmaW5lIENVUkJQT1MJCQkweDcw MGM4CisjZGVmaW5lIENVUkNDTlRSCQkweDcwMGUwCisjZGVmaW5lIENVUkNCQVNFCQkweDcwMGU0 CisjZGVmaW5lIENVUkNQT1MJCQkweDcwMGU4CisKKy8qCisgKiBJbnRlcnJ1cHQgUmVnaXN0ZXJz CisgKi8KKyNkZWZpbmUgSUVSCQkJMHgwMjBhMAorI2RlZmluZSBJSVIJCQkweDAyMGE0CisjZGVm aW5lIElNUgkJCTB4MDIwYTgKKyNkZWZpbmUgSVNSCQkJMHgwMjBhYworCisvKgorICogTU9PUkVT VE9XTiBkZWx0YSByZWdpc3RlcnMKKyAqLworI2RlZmluZSBNUlNUX0RQTExfQQkJMHgwZjAxNAor I2RlZmluZSBNREZMRF9EUExMX0IJCTB4MGYwMTgKKyNkZWZpbmUgTURGTERfSU5QVVRfUkVGX1NF TAkJKDEgPDwgMTQpCisjZGVmaW5lIE1ERkxEX1ZDT19TRUwJCQkoMSA8PCAxNikKKyNkZWZpbmUg RFBMTEFfTU9ERV9MVkRTCQkJKDIgPDwgMjYpCS8qIG1yc3QgKi8KKyNkZWZpbmUgTURGTERfUExM X0xBVENIRU4JCSgxIDw8IDI4KQorI2RlZmluZSBNREZMRF9QV1JfR0FURV9FTgkJKDEgPDwgMzAp CisjZGVmaW5lIE1ERkxEX1AxX01BU0sJCQkoMHgxRkYgPDwgMTcpCisjZGVmaW5lIE1SU1RfRlBB MAkJMHgwZjA0MAorI2RlZmluZSBNUlNUX0ZQQTEJCTB4MGYwNDQKKyNkZWZpbmUgTURGTERfRFBM TF9ESVYwCQkweDBmMDQ4CisjZGVmaW5lIE1ERkxEX0RQTExfRElWMQkJMHgwZjA0YworI2RlZmlu ZSBNUlNUX1BFUkZfTU9ERQkJMHgwMjBmNAorCisvKgorICogTUVERklFTEQgSERNSSByZWdpc3Rl cnMKKyAqLworI2RlZmluZSBIRE1JUEhZTUlTQ0NUTAkJMHg2MTEzNAorI2RlZmluZSBIRE1JX1BI WV9QT1dFUl9ET1dOCQkweDdmCisjZGVmaW5lIEhETUlCX0NPTlRST0wJCTB4NjExNDAKKyNkZWZp bmUgSERNSUJfUE9SVF9FTgkJCSgxIDw8IDMxKQorI2RlZmluZSBIRE1JQl9QSVBFX0JfU0VMRUNU CQkoMSA8PCAzMCkKKyNkZWZpbmUgSERNSUJfTlVMTF9QQUNLRVQJCSgxIDw8IDkpCisjZGVmaW5l IEhETUlCX0hEQ1BfUE9SVAkJCSgxIDw8IDUpCisKKy8qICNkZWZpbmUgTFZEUwkJCTB4NjExODAg Ki8KKyNkZWZpbmUgTVJTVF9QQU5FTF84VE82X0RJVEhFUl9FTkFCTEUJKDEgPDwgMjUpCisjZGVm aW5lIE1SU1RfUEFORUxfMjRfRE9UXzFfRk9STUFUCSgxIDw8IDI0KQorI2RlZmluZSBMVkRTX0Ez X1BPV0VSX1VQXzBfT1VUUFVUCSgxIDw8IDYpCisKKyNkZWZpbmUgTUlQSQkJCTB4NjExOTAKKyNk ZWZpbmUgTUlQSV9DCQkJMHg2MjE5MAorI2RlZmluZSBNSVBJX1BPUlRfRU4JCQkoMSA8PCAzMSkK Ky8qIFR1cm5zIG9uIGJvcmRlciBkcmF3aW5nIHRvIGFsbG93IGNlbnRlcmVkIGRpc3BsYXkuICov CisjZGVmaW5lIFNFTF9GTE9QUEVEX0hTVFgJCSgxIDw8IDIzKQorI2RlZmluZSBQQVNTX0ZST01f U1BIWV9UT19BRkUJCSgxIDw8IDE2KQorI2RlZmluZSBNSVBJX0JPUkRFUl9FTgkJCSgxIDw8IDE1 KQorI2RlZmluZSBNSVBJQV8zTEFORV9NSVBJQ18xTEFORQkJMHgxCisjZGVmaW5lIE1JUElBXzJM QU5FX01JUElDXzJMQU5FCQkweDIKKyNkZWZpbmUgVEVfVFJJR0dFUl9EU0lfUFJPVE9DT0wJCSgx IDw8IDIpCisjZGVmaW5lIFRFX1RSSUdHRVJfR1BJT19QSU4JCSgxIDw8IDMpCisjZGVmaW5lIE1J UElfVEVfQ09VTlQJCTB4NjExOTQKKworLyogI2RlZmluZSBQUF9DT05UUk9MCTB4NjEyMDQgKi8K KyNkZWZpbmUgUE9XRVJfRE9XTl9PTl9SRVNFVAkJKDEgPDwgMSkKKworLyogI2RlZmluZSBQRklU X0NPTlRST0wJMHg2MTIzMCAqLworI2RlZmluZSBQRklUX1BJUEVfU0VMRUNUCQkoMyA8PCAyOSkK KyNkZWZpbmUgUEZJVF9QSVBFX1NFTEVDVF9TSElGVAkJKDI5KQorCisvKiAjZGVmaW5lIEJMQ19Q V01fQ1RMCQkweDYxMjU0ICovCisjZGVmaW5lIE1SU1RfQkFDS0xJR0hUX01PRFVMQVRJT05fRlJF UV9TSElGVAkoMTYpCisjZGVmaW5lIE1SU1RfQkFDS0xJR0hUX01PRFVMQVRJT05fRlJFUV9NQVNL CSgweGZmZmYgPDwgMTYpCisKKy8qICNkZWZpbmUgUElQRUFDT05GIDB4NzAwMDggKi8KKyNkZWZp bmUgUElQRUFDT05GX1BJUEVfU1RBVEUJCSgxIDw8IDMwKQorLyogI2RlZmluZSBEU1BBQ05UUgkJ MHg3MDE4MCAqLworCisjZGVmaW5lIE1SU1RfRFNQQUJBU0UJCTB4NzAxOWMKKyNkZWZpbmUgTVJT VF9EU1BCQkFTRQkJMHg3MTE5YworI2RlZmluZSBNREZMRF9EU1BDQkFTRQkJMHg3MjE5YworCisv KgorICogTW9vcmVzdG93biByZWdpc3RlcnMuCisgKi8KKworLyoKKyAqCU1JUEkgSVAgcmVnaXN0 ZXJzCisgKi8KKyNkZWZpbmUgTUlQSUNfUkVHX09GRlNFVAkJMHg4MDAKKworI2RlZmluZSBERVZJ Q0VfUkVBRFlfUkVHCQkweGIwMDAKKyNkZWZpbmUgTFBfT1VUUFVUX0hPTEQJCQkJKDEgPDwgMTYp CisjZGVmaW5lIEVYSVRfVUxQU19ERVZfUkVBRFkJCQkweDMKKyNkZWZpbmUgTFBfT1VUUFVUX0hP TERfUkVMRUFTRQkJCTB4ODEwMDAwCisjIGRlZmluZSBFTlRFUklOR19VTFBTCQkJCSgyIDw8IDEp CisjIGRlZmluZSBFWElUSU5HX1VMUFMJCQkJKDEgPDwgMSkKKyMgZGVmaW5lIFVMUFNfTUFTSwkJ CQkoMyA8PCAxKQorIyBkZWZpbmUgQlVTX1BPU1NFU1NJT04JCQkJKDEgPDwgMykKKyNkZWZpbmUg SU5UUl9TVEFUX1JFRwkJCTB4YjAwNAorI2RlZmluZSBSWF9TT1RfRVJST1IJCQkJKDEgPDwgMCkK KyNkZWZpbmUgUlhfU09UX1NZTkNfRVJST1IJCQkoMSA8PCAxKQorI2RlZmluZSBSWF9FU0NBUEVf TU9ERV9FTlRSWV9FUlJPUgkJKDEgPDwgMykKKyNkZWZpbmUgUlhfTFBfVFhfU1lOQ19FUlJPUgkJ CSgxIDw8IDQpCisjZGVmaW5lIFJYX0hTX1JFQ0VJVkVfVElNRU9VVF9FUlJPUgkJKDEgPDwgNSkK KyNkZWZpbmUgUlhfRkFMU0VfQ09OVFJPTF9FUlJPUgkJCSgxIDw8IDYpCisjZGVmaW5lIFJYX0VD Q19TSU5HTEVfQklUX0VSUk9SCQkJKDEgPDwgNykKKyNkZWZpbmUgUlhfRUNDX01VTFRJX0JJVF9F UlJPUgkJCSgxIDw8IDgpCisjZGVmaW5lIFJYX0NIRUNLU1VNX0VSUk9SCQkJKDEgPDwgOSkKKyNk ZWZpbmUgUlhfRFNJX0RBVEFfVFlQRV9OT1RfUkVDT0dOSVpFRAkJKDEgPDwgMTApCisjZGVmaW5l IFJYX0RTSV9WQ19JRF9JTlZBTElECQkJKDEgPDwgMTEpCisjZGVmaW5lIFRYX0ZBTFNFX0NPTlRS T0xfRVJST1IJCQkoMSA8PCAxMikKKyNkZWZpbmUgVFhfRUNDX1NJTkdMRV9CSVRfRVJST1IJCQko MSA8PCAxMykKKyNkZWZpbmUgVFhfRUNDX01VTFRJX0JJVF9FUlJPUgkJCSgxIDw8IDE0KQorI2Rl ZmluZSBUWF9DSEVDS1NVTV9FUlJPUgkJCSgxIDw8IDE1KQorI2RlZmluZSBUWF9EU0lfREFUQV9U WVBFX05PVF9SRUNPR05JWkVECQkoMSA8PCAxNikKKyNkZWZpbmUgVFhfRFNJX1ZDX0lEX0lOVkFM SUQJCQkoMSA8PCAxNykKKyNkZWZpbmUgSElHSF9DT05URU5USU9OCQkJCSgxIDw8IDE4KQorI2Rl ZmluZSBMT1dfQ09OVEVOVElPTgkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgRFBJX0ZJRk9fVU5ERVJf UlVOCQkJKDEgPDwgMjApCisjZGVmaW5lIEhTX1RYX1RJTUVPVVQJCQkJKDEgPDwgMjEpCisjZGVm aW5lIExQX1JYX1RJTUVPVVQJCQkJKDEgPDwgMjIpCisjZGVmaW5lIFRVUk5fQVJPVU5EX0FDS19U SU1FT1VUCQkJKDEgPDwgMjMpCisjZGVmaW5lIEFDS19XSVRIX05PX0VSUk9SCQkJKDEgPDwgMjQp CisjZGVmaW5lIEhTX0dFTkVSSUNfV1JfRklGT19GVUxMCQkJKDEgPDwgMjcpCisjZGVmaW5lIExQ X0dFTkVSSUNfV1JfRklGT19GVUxMCQkJKDEgPDwgMjgpCisjZGVmaW5lIFNQTF9QS1RfU0VOVAkJ CQkoMSA8PCAzMCkKKyNkZWZpbmUgSU5UUl9FTl9SRUcJCQkweGIwMDgKKyNkZWZpbmUgRFNJX0ZV TkNfUFJHX1JFRwkJMHhiMDBjCisjZGVmaW5lIERQSV9DSEFOTkVMX05VTUJFUl9QT1MJCQkweDAz CisjZGVmaW5lIERCSV9DSEFOTkVMX05VTUJFUl9QT1MJCQkweDA1CisjZGVmaW5lIEZNVF9EUElf UE9TCQkJCTB4MDcKKyNkZWZpbmUgRk1UX0RCSV9QT1MJCQkJMHgwQQorI2RlZmluZSBEQklfREFU QV9XSURUSF9QT1MJCQkweDBECisKKy8qIERQSSBQSVhFTCBGT1JNQVRTICovCisjZGVmaW5lIFJH Ql81NjVfRk1UCQkJCTB4MDEJLyogUkdCIDU2NSBGT1JNQVQgKi8KKyNkZWZpbmUgUkdCXzY2Nl9G TVQJCQkJMHgwMgkvKiBSR0IgNjY2IEZPUk1BVCAqLworI2RlZmluZSBMUkdCXzY2Nl9GTVQJCQkJ MHgwMwkvKiBSR0IgTE9PU0VMWSBQQUNLRUQKKwkJCQkJCQkgKiA2NjYgRk9STUFUCisJCQkJCQkJ ICovCisjZGVmaW5lIFJHQl84ODhfRk1UCQkJCTB4MDQJLyogUkdCIDg4OCBGT1JNQVQgKi8KKyNk ZWZpbmUgVklSVFVBTF9DSEFOTkVMX05VTUJFUl8wCQkweDAwCS8qIFZpcnR1YWwgY2hhbm5lbCAw ICovCisjZGVmaW5lIFZJUlRVQUxfQ0hBTk5FTF9OVU1CRVJfMQkJMHgwMQkvKiBWaXJ0dWFsIGNo YW5uZWwgMSAqLworI2RlZmluZSBWSVJUVUFMX0NIQU5ORUxfTlVNQkVSXzIJCTB4MDIJLyogVmly dHVhbCBjaGFubmVsIDIgKi8KKyNkZWZpbmUgVklSVFVBTF9DSEFOTkVMX05VTUJFUl8zCQkweDAz CS8qIFZpcnR1YWwgY2hhbm5lbCAzICovCisKKyNkZWZpbmUgREJJX05PVF9TVVBQT1JURUQJCQkw eDAwCS8qIGNvbW1hbmQgbW9kZQorCQkJCQkJCSAqIGlzIG5vdCBzdXBwb3J0ZWQKKwkJCQkJCQkg Ki8KKyNkZWZpbmUgREJJX0RBVEFfV0lEVEhfMTZCSVQJCQkweDAxCS8qIDE2IGJpdCBkYXRhICov CisjZGVmaW5lIERCSV9EQVRBX1dJRFRIXzlCSVQJCQkweDAyCS8qIDkgYml0IGRhdGEgKi8KKyNk ZWZpbmUgREJJX0RBVEFfV0lEVEhfOEJJVAkJCTB4MDMJLyogOCBiaXQgZGF0YSAqLworI2RlZmlu ZSBEQklfREFUQV9XSURUSF9PUFQxCQkJMHgwNAkvKiBvcHRpb24gMSAqLworI2RlZmluZSBEQklf REFUQV9XSURUSF9PUFQyCQkJMHgwNQkvKiBvcHRpb24gMiAqLworCisjZGVmaW5lIEhTX1RYX1RJ TUVPVVRfUkVHCQkweGIwMTAKKyNkZWZpbmUgTFBfUlhfVElNRU9VVF9SRUcJCTB4YjAxNAorI2Rl ZmluZSBUVVJOX0FST1VORF9USU1FT1VUX1JFRwkJMHhiMDE4CisjZGVmaW5lIERFVklDRV9SRVNF VF9SRUcJCTB4YjAxQworI2RlZmluZSBEUElfUkVTT0xVVElPTl9SRUcJCTB4YjAyMAorI2RlZmlu ZSBSRVNfVl9QT1MJCQkJMHgxMAorI2RlZmluZSBEQklfUkVTT0xVVElPTl9SRUcJCTB4YjAyNCAv KiBSZXNlcnZlZCBmb3IgTURGTEQgKi8KKyNkZWZpbmUgSE9SSVpfU1lOQ19QQURfQ09VTlRfUkVH CTB4YjAyOAorI2RlZmluZSBIT1JJWl9CQUNLX1BPUkNIX0NPVU5UX1JFRwkweGIwMkMKKyNkZWZp bmUgSE9SSVpfRlJPTlRfUE9SQ0hfQ09VTlRfUkVHCTB4YjAzMAorI2RlZmluZSBIT1JJWl9BQ1RJ VkVfQVJFQV9DT1VOVF9SRUcJMHhiMDM0CisjZGVmaW5lIFZFUlRfU1lOQ19QQURfQ09VTlRfUkVH CQkweGIwMzgKKyNkZWZpbmUgVkVSVF9CQUNLX1BPUkNIX0NPVU5UX1JFRwkweGIwM2MKKyNkZWZp bmUgVkVSVF9GUk9OVF9QT1JDSF9DT1VOVF9SRUcJMHhiMDQwCisjZGVmaW5lIEhJR0hfTE9XX1NX SVRDSF9DT1VOVF9SRUcJMHhiMDQ0CisjZGVmaW5lIERQSV9DT05UUk9MX1JFRwkJCTB4YjA0OAor I2RlZmluZSBEUElfU0hVVF9ET1dOCQkJCSgxIDw8IDApCisjZGVmaW5lIERQSV9UVVJOX09OCQkJ CSgxIDw8IDEpCisjZGVmaW5lIERQSV9DT0xPUl9NT0RFX09OCQkJKDEgPDwgMikKKyNkZWZpbmUg RFBJX0NPTE9SX01PREVfT0ZGCQkJKDEgPDwgMykKKyNkZWZpbmUgRFBJX0JBQ0tfTElHSFRfT04J CQkoMSA8PCA0KQorI2RlZmluZSBEUElfQkFDS19MSUdIVF9PRkYJCQkoMSA8PCA1KQorI2RlZmlu ZSBEUElfTFAJCQkJCSgxIDw8IDYpCisjZGVmaW5lIERQSV9EQVRBX1JFRwkJCTB4YjA0YworI2Rl ZmluZSBEUElfQkFDS19MSUdIVF9PTl9EQVRBCQkJMHgwNworI2RlZmluZSBEUElfQkFDS19MSUdI VF9PRkZfREFUQQkJCTB4MTcKKyNkZWZpbmUgSU5JVF9DT1VOVF9SRUcJCQkweGIwNTAKKyNkZWZp bmUgTUFYX1JFVF9QQUtfUkVHCQkJMHhiMDU0CisjZGVmaW5lIFZJREVPX0ZNVF9SRUcJCQkweGIw NTgKKyNkZWZpbmUgQ09NUExFVEVfTEFTVF9QQ0tUCQkJKDEgPDwgMikKKyNkZWZpbmUgRU9UX0RJ U0FCTEVfUkVHCQkJMHhiMDVjCisjZGVmaW5lIEVOQUJMRV9DTE9DS19TVE9QUElORwkJCSgxIDw8 IDEpCisjZGVmaW5lIExQX0JZVEVDTEtfUkVHCQkJMHhiMDYwCisjZGVmaW5lIExQX0dFTl9EQVRB X1JFRwkJCTB4YjA2NAorI2RlZmluZSBIU19HRU5fREFUQV9SRUcJCQkweGIwNjgKKyNkZWZpbmUg TFBfR0VOX0NUUkxfUkVHCQkJMHhiMDZDCisjZGVmaW5lIEhTX0dFTl9DVFJMX1JFRwkJCTB4YjA3 MAorI2RlZmluZSBEQ1NfQ0hBTk5FTF9OVU1CRVJfUE9TCQkweDYKKyNkZWZpbmUgTUNTX0NPTU1B TkRTX1BPUwkJMHg4CisjZGVmaW5lIFdPUkRfQ09VTlRTX1BPUwkJCTB4OAorI2RlZmluZSBNQ1Nf UEFSQU1FVEVSX1BPUwkJCTB4MTAKKyNkZWZpbmUgR0VOX0ZJRk9fU1RBVF9SRUcJCTB4YjA3NAor I2RlZmluZSBIU19EQVRBX0ZJRk9fRlVMTAkJCSgxIDw8IDApCisjZGVmaW5lIEhTX0RBVEFfRklG T19IQUxGX0VNUFRZCQkJKDEgPDwgMSkKKyNkZWZpbmUgSFNfREFUQV9GSUZPX0VNUFRZCQkJKDEg PDwgMikKKyNkZWZpbmUgTFBfREFUQV9GSUZPX0ZVTEwJCQkoMSA8PCA4KQorI2RlZmluZSBMUF9E QVRBX0ZJRk9fSEFMRl9FTVBUWQkJCSgxIDw8IDkpCisjZGVmaW5lIExQX0RBVEFfRklGT19FTVBU WQkJCSgxIDw8IDEwKQorI2RlZmluZSBIU19DVFJMX0ZJRk9fRlVMTAkJCSgxIDw8IDE2KQorI2Rl ZmluZSBIU19DVFJMX0ZJRk9fSEFMRl9FTVBUWQkJCSgxIDw8IDE3KQorI2RlZmluZSBIU19DVFJM X0ZJRk9fRU1QVFkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgTFBfQ1RSTF9GSUZPX0ZVTEwJCQkoMSA8 PCAyNCkKKyNkZWZpbmUgTFBfQ1RSTF9GSUZPX0hBTEZfRU1QVFkJCQkoMSA8PCAyNSkKKyNkZWZp bmUgTFBfQ1RSTF9GSUZPX0VNUFRZCQkJKDEgPDwgMjYpCisjZGVmaW5lIERCSV9GSUZPX0VNUFRZ CQkJCSgxIDw8IDI3KQorI2RlZmluZSBEUElfRklGT19FTVBUWQkJCQkoMSA8PCAyOCkKKyNkZWZp bmUgSFNfTFNfREJJX0VOQUJMRV9SRUcJCTB4YjA3OAorI2RlZmluZSBUWENMS0VTQ19SRUcJCQkw eGIwN2MKKyNkZWZpbmUgRFBIWV9QQVJBTV9SRUcJCQkweGIwODAKKyNkZWZpbmUgREJJX0JXX0NU UkxfUkVHCQkJMHhiMDg0CisjZGVmaW5lIENMS19MQU5FX1NXVF9SRUcJCTB4YjA4OAorCisvKgor ICogTUlQSSBBZGFwdGVyIHJlZ2lzdGVycworICovCisjZGVmaW5lIE1JUElfQ09OVFJPTF9SRUcJ CTB4YjEwNAorI2RlZmluZSBNSVBJXzJYX0NMT0NLX0JJVFMJCQkoKDEgPDwgMCkgfCAoMSA8PCAx KSkKKyNkZWZpbmUgTUlQSV9EQVRBX0FERFJFU1NfUkVHCQkweGIxMDgKKyNkZWZpbmUgTUlQSV9E QVRBX0xFTkdUSF9SRUcJCTB4YjEwQworI2RlZmluZSBNSVBJX0NPTU1BTkRfQUREUkVTU19SRUcJ MHhiMTEwCisjZGVmaW5lIE1JUElfQ09NTUFORF9MRU5HVEhfUkVHCQkweGIxMTQKKyNkZWZpbmUg TUlQSV9SRUFEX0RBVEFfUkVUVVJOX1JFRzAJMHhiMTE4CisjZGVmaW5lIE1JUElfUkVBRF9EQVRB X1JFVFVSTl9SRUcxCTB4YjExQworI2RlZmluZSBNSVBJX1JFQURfREFUQV9SRVRVUk5fUkVHMgkw eGIxMjAKKyNkZWZpbmUgTUlQSV9SRUFEX0RBVEFfUkVUVVJOX1JFRzMJMHhiMTI0CisjZGVmaW5l IE1JUElfUkVBRF9EQVRBX1JFVFVSTl9SRUc0CTB4YjEyOAorI2RlZmluZSBNSVBJX1JFQURfREFU QV9SRVRVUk5fUkVHNQkweGIxMkMKKyNkZWZpbmUgTUlQSV9SRUFEX0RBVEFfUkVUVVJOX1JFRzYJ MHhiMTMwCisjZGVmaW5lIE1JUElfUkVBRF9EQVRBX1JFVFVSTl9SRUc3CTB4YjEzNAorI2RlZmlu ZSBNSVBJX1JFQURfREFUQV9WQUxJRF9SRUcJMHhiMTM4CisKKy8qIERCSSBDT01NQU5EUyAqLwor I2RlZmluZSBzb2Z0X3Jlc2V0CQkJMHgwMQorLyoKKyAqCVRoZSBkaXNwbGF5IG1vZHVsZSBwZXJm b3JtcyBhIHNvZnR3YXJlIHJlc2V0LgorICoJUmVnaXN0ZXJzIGFyZSB3cml0dGVuIHdpdGggdGhl aXIgU1cgUmVzZXQgZGVmYXVsdCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgZ2V0X3Bvd2VyX21vZGUJ CQkweDBhCisvKgorICoJVGhlIGRpc3BsYXkgbW9kdWxlIHJldHVybnMgdGhlIGN1cnJlbnQgcG93 ZXIgbW9kZQorICovCisjZGVmaW5lIGdldF9hZGRyZXNzX21vZGUJCTB4MGIKKy8qCisgKglUaGUg ZGlzcGxheSBtb2R1bGUgcmV0dXJucyB0aGUgY3VycmVudCBzdGF0dXMuCisgKi8KKyNkZWZpbmUg Z2V0X3BpeGVsX2Zvcm1hdAkJMHgwYworLyoKKyAqCVRoaXMgY29tbWFuZCBnZXRzIHRoZSBwaXhl bCBmb3JtYXQgZm9yIHRoZSBSR0IgaW1hZ2UgZGF0YQorICoJdXNlZCBieSB0aGUgaW50ZXJmYWNl LgorICovCisjZGVmaW5lIGdldF9kaXNwbGF5X21vZGUJCTB4MGQKKy8qCisgKglUaGUgZGlzcGxh eSBtb2R1bGUgcmV0dXJucyB0aGUgRGlzcGxheSBJbWFnZSBNb2RlIHN0YXR1cy4KKyAqLworI2Rl ZmluZSBnZXRfc2lnbmFsX21vZGUJCQkweDBlCisvKgorICoJVGhlIGRpc3BsYXkgbW9kdWxlIHJl dHVybnMgdGhlIERpc3BsYXkgU2lnbmFsIE1vZGUuCisgKi8KKyNkZWZpbmUgZ2V0X2RpYWdub3N0 aWNfcmVzdWx0CQkweDBmCisvKgorICoJVGhlIGRpc3BsYXkgbW9kdWxlIHJldHVybnMgdGhlIHNl bGYtZGlhZ25vc3RpYyByZXN1bHRzIGZvbGxvd2luZworICoJYSBTbGVlcCBPdXQgY29tbWFuZC4K KyAqLworI2RlZmluZSBlbnRlcl9zbGVlcF9tb2RlCQkweDEwCisvKgorICoJVGhpcyBjb21tYW5k IGNhdXNlcyB0aGUgZGlzcGxheSBtb2R1bGUgdG8gZW50ZXIgdGhlIFNsZWVwIG1vZGUuCisgKglJ biB0aGlzIG1vZGUsIGFsbCB1bm5lY2Vzc2FyeSBibG9ja3MgaW5zaWRlIHRoZSBkaXNwbGF5IG1v ZHVsZSBhcmUKKyAqCWRpc2FibGVkIGV4Y2VwdCBpbnRlcmZhY2UgY29tbXVuaWNhdGlvbi4gVGhp cyBpcyB0aGUgbG93ZXN0IHBvd2VyCisgKgltb2RlIHRoZSBkaXNwbGF5IG1vZHVsZSBzdXBwb3J0 cy4KKyAqLworI2RlZmluZSBleGl0X3NsZWVwX21vZGUJCQkweDExCisvKgorICoJVGhpcyBjb21t YW5kIGNhdXNlcyB0aGUgZGlzcGxheSBtb2R1bGUgdG8gZXhpdCBTbGVlcCBtb2RlLgorICoJQWxs IGJsb2NrcyBpbnNpZGUgdGhlIGRpc3BsYXkgbW9kdWxlIGFyZSBlbmFibGVkLgorICovCisjZGVm aW5lIGVudGVyX3BhcnRpYWxfbW9kZQkJMHgxMgorLyoKKyAqCVRoaXMgY29tbWFuZCBjYXVzZXMg dGhlIGRpc3BsYXkgbW9kdWxlIHRvIGVudGVyIHRoZSBQYXJ0aWFsIERpc3BsYXkKKyAqCU1vZGUu IFRoZSBQYXJ0aWFsIERpc3BsYXkgTW9kZSB3aW5kb3cgaXMgZGVzY3JpYmVkIGJ5IHRoZQorICoJ c2V0X3BhcnRpYWxfYXJlYSBjb21tYW5kLgorICovCisjZGVmaW5lIGVudGVyX25vcm1hbF9tb2Rl CQkweDEzCisvKgorICoJVGhpcyBjb21tYW5kIGNhdXNlcyB0aGUgZGlzcGxheSBtb2R1bGUgdG8g ZW50ZXIgdGhlIE5vcm1hbCBtb2RlLgorICoJTm9ybWFsIE1vZGUgaXMgZGVmaW5lZCBhcyBQYXJ0 aWFsIERpc3BsYXkgbW9kZSBhbmQgU2Nyb2xsIG1vZGUgYXJlIG9mZgorICovCisjZGVmaW5lIGV4 aXRfaW52ZXJ0X21vZGUJCTB4MjAKKy8qCisgKglUaGlzIGNvbW1hbmQgY2F1c2VzIHRoZSBkaXNw bGF5IG1vZHVsZSB0byBzdG9wIGludmVydGluZyB0aGUgaW1hZ2UKKyAqCWRhdGEgb24gdGhlIGRp c3BsYXkgZGV2aWNlLiBUaGUgZnJhbWUgbWVtb3J5IGNvbnRlbnRzIHJlbWFpbiB1bmNoYW5nZWQu CisgKglObyBzdGF0dXMgYml0cyBhcmUgY2hhbmdlZC4KKyAqLworI2RlZmluZSBlbnRlcl9pbnZl cnRfbW9kZQkJMHgyMQorLyoKKyAqCVRoaXMgY29tbWFuZCBjYXVzZXMgdGhlIGRpc3BsYXkgbW9k dWxlIHRvIGludmVydCB0aGUgaW1hZ2UgZGF0YSBvbmx5IG9uCisgKgl0aGUgZGlzcGxheSBkZXZp Y2UuIFRoZSBmcmFtZSBtZW1vcnkgY29udGVudHMgcmVtYWluIHVuY2hhbmdlZC4KKyAqCU5vIHN0 YXR1cyBiaXRzIGFyZSBjaGFuZ2VkLgorICovCisjZGVmaW5lIHNldF9nYW1tYV9jdXJ2ZQkJCTB4 MjYKKy8qCisgKglUaGlzIGNvbW1hbmQgc2VsZWN0cyB0aGUgZGVzaXJlZCBnYW1tYSBjdXJ2ZSBm b3IgdGhlIGRpc3BsYXkgZGV2aWNlLgorICoJRm91ciBmaXhlZCBnYW1tYSBjdXJ2ZXMgYXJlIGRl ZmluZWQgaW4gc2VjdGlvbiBEQ1Mgc3BlYy4KKyAqLworI2RlZmluZSBzZXRfZGlzcGxheV9vZmYJ CQkweDI4CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICpcCitUaGlzIGNvbW1hbmQgY2F1c2VzIHRoZSBk aXNwbGF5IG1vZHVsZSB0byBzdG9wIGRpc3BsYXlpbmcgdGhlIGltYWdlIGRhdGEKK29uIHRoZSBk aXNwbGF5IGRldmljZS4gVGhlIGZyYW1lIG1lbW9yeSBjb250ZW50cyByZW1haW4gdW5jaGFuZ2Vk LgorTm8gc3RhdHVzIGJpdHMgYXJlIGNoYW5nZWQuCitcKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisj ZGVmaW5lIHNldF9kaXNwbGF5X29uCQkJMHgyOQorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqXAorVGhp cyBjb21tYW5kIGNhdXNlcyB0aGUgZGlzcGxheSBtb2R1bGUgdG8gc3RhcnQgZGlzcGxheWluZyB0 aGUgaW1hZ2UgZGF0YQorb24gdGhlIGRpc3BsYXkgZGV2aWNlLiBUaGUgZnJhbWUgbWVtb3J5IGNv bnRlbnRzIHJlbWFpbiB1bmNoYW5nZWQuCitObyBzdGF0dXMgYml0cyBhcmUgY2hhbmdlZC4KK1wq ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKyNkZWZpbmUgc2V0X2NvbHVtbl9hZGRyZXNzCQkweDJhCisv KgorICoJVGhpcyBjb21tYW5kIGRlZmluZXMgdGhlIGNvbHVtbiBleHRlbnQgb2YgdGhlIGZyYW1l IG1lbW9yeSBhY2Nlc3NlZCBieQorICoJdGhlIGhvc3Rwcm9jZXNzb3Igd2l0aCB0aGUgcmVhZF9t ZW1vcnlfY29udGludWUgYW5kCisgKgl3cml0ZV9tZW1vcnlfY29udGludWUgY29tbWFuZHMuCisg KglObyBzdGF0dXMgYml0cyBhcmUgY2hhbmdlZC4KKyAqLworI2RlZmluZSBzZXRfcGFnZV9hZGRy CQkJMHgyYgorLyoKKyAqCVRoaXMgY29tbWFuZCBkZWZpbmVzIHRoZSBwYWdlIGV4dGVudCBvZiB0 aGUgZnJhbWUgbWVtb3J5IGFjY2Vzc2VkIGJ5CisgKgl0aGUgaG9zdCBwcm9jZXNzb3Igd2l0aCB0 aGUgd3JpdGVfbWVtb3J5X2NvbnRpbnVlIGFuZAorICoJcmVhZF9tZW1vcnlfY29udGludWUgY29t bWFuZC4KKyAqCU5vIHN0YXR1cyBiaXRzIGFyZSBjaGFuZ2VkLgorICovCisjZGVmaW5lIHdyaXRl X21lbV9zdGFydAkJCTB4MmMKKy8qCisgKglUaGlzIGNvbW1hbmQgdHJhbnNmZXJzIGltYWdlIGRh dGEgZnJvbSB0aGUgaG9zdCBwcm9jZXNzb3IgdG8gdGhlCisgKglkaXNwbGF5IG1vZHVsZXMgZnJh bWUgbWVtb3J5IHN0YXJ0aW5nIGF0IHRoZSBwaXhlbCBsb2NhdGlvbiBzcGVjaWZpZWQKKyAqCWJ5 IHByZWNlZGluZyBzZXRfY29sdW1uX2FkZHJlc3MgYW5kIHNldF9wYWdlX2FkZHJlc3MgY29tbWFu ZHMuCisgKi8KKyNkZWZpbmUgc2V0X3BhcnRpYWxfYXJlYQkJMHgzMAorLyoKKyAqCVRoaXMgY29t bWFuZCBkZWZpbmVzIHRoZSBQYXJ0aWFsIERpc3BsYXkgbW9kZSBzIGRpc3BsYXkgYXJlYS4KKyAq CVRoZXJlIGFyZSB0d28gcGFyYW1ldGVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb21tYW5kLCB0 aGUgZmlyc3QKKyAqCWRlZmluZXMgdGhlIFN0YXJ0IFJvdyAoU1IpIGFuZCB0aGUgc2Vjb25kIHRo ZSBFbmQgUm93IChFUikuIFNSIGFuZCBFUgorICoJcmVmZXIgdG8gdGhlIEZyYW1lIE1lbW9yeSBM aW5lIFBvaW50ZXIuCisgKi8KKyNkZWZpbmUgc2V0X3Njcm9sbF9hcmVhCQkJMHgzMworLyoKKyAq CVRoaXMgY29tbWFuZCBkZWZpbmVzIHRoZSBkaXNwbGF5IG1vZHVsZXMgVmVydGljYWwgU2Nyb2xs aW5nIEFyZWEuCisgKi8KKyNkZWZpbmUgc2V0X3RlYXJfb2ZmCQkJMHgzNAorLyoKKyAqCVRoaXMg Y29tbWFuZCB0dXJucyBvZmYgdGhlIGRpc3BsYXkgbW9kdWxlcyBUZWFyaW5nIEVmZmVjdCBvdXRw dXQKKyAqCXNpZ25hbCBvbiB0aGUgVEUgc2lnbmFsIGxpbmUuCisgKi8KKyNkZWZpbmUgc2V0X3Rl YXJfb24JCQkweDM1CisvKgorICoJVGhpcyBjb21tYW5kIHR1cm5zIG9uIHRoZSBkaXNwbGF5IG1v ZHVsZXMgVGVhcmluZyBFZmZlY3Qgb3V0cHV0IHNpZ25hbAorICoJb24gdGhlIFRFIHNpZ25hbCBs aW5lLgorICovCisjZGVmaW5lIHNldF9hZGRyZXNzX21vZGUJCTB4MzYKKy8qCisgKglUaGlzIGNv bW1hbmQgc2V0cyB0aGUgZGF0YSBvcmRlciBmb3IgdHJhbnNmZXJzIGZyb20gdGhlIGhvc3QgcHJv Y2Vzc29yCisgKgl0byBkaXNwbGF5IG1vZHVsZXMgZnJhbWUgbWVtb3J5LGJpdHMgQls3OjVdIGFu ZCBCMywgYW5kIGZyb20gdGhlCisgKglkaXNwbGF5IG1vZHVsZXMgZnJhbWUgbWVtb3J5IHRvIHRo ZSBkaXNwbGF5IGRldmljZSwgYml0cyBCWzI6MF0gYW5kIEI0LgorICovCisjZGVmaW5lIHNldF9z Y3JvbGxfc3RhcnQJCTB4MzcKKy8qCisgKglUaGlzIGNvbW1hbmQgc2V0cyB0aGUgc3RhcnQgb2Yg dGhlIHZlcnRpY2FsIHNjcm9sbGluZyBhcmVhIGluIHRoZSBmcmFtZQorICoJbWVtb3J5LiBUaGUg dmVydGljYWwgc2Nyb2xsaW5nIGFyZWEgaXMgZnVsbHkgZGVmaW5lZCB3aGVuIHRoaXMgY29tbWFu ZAorICoJaXMgdXNlZCB3aXRoIHRoZSBzZXRfc2Nyb2xsX2FyZWEgY29tbWFuZCBUaGUgc2V0X3Nj cm9sbF9zdGFydCBjb21tYW5kCisgKgloYXMgb25lIHBhcmFtZXRlciwgdGhlIFZlcnRpY2FsIFNj cm9sbCBQb2ludGVyLiBUaGUgVlNQIGRlZmluZXMgdGhlCisgKglsaW5lIGluIHRoZSBmcmFtZSBt ZW1vcnkgdGhhdCBpcyB3cml0dGVuIHRvIHRoZSBkaXNwbGF5IGRldmljZSBhcyB0aGUKKyAqCWZp cnN0IGxpbmUgb2YgdGhlIHZlcnRpY2FsIHNjcm9sbCBhcmVhLgorICovCisjZGVmaW5lIGV4aXRf aWRsZV9tb2RlCQkJMHgzOAorLyoKKyAqCVRoaXMgY29tbWFuZCBjYXVzZXMgdGhlIGRpc3BsYXkg bW9kdWxlIHRvIGV4aXQgSWRsZSBtb2RlLgorICovCisjZGVmaW5lIGVudGVyX2lkbGVfbW9kZQkJ CTB4MzkKKy8qCisgKglUaGlzIGNvbW1hbmQgY2F1c2VzIHRoZSBkaXNwbGF5IG1vZHVsZSB0byBl bnRlciBJZGxlIE1vZGUuCisgKglJbiBJZGxlIE1vZGUsIGNvbG9yIGV4cHJlc3Npb24gaXMgcmVk dWNlZC4gQ29sb3JzIGFyZSBzaG93biBvbiB0aGUKKyAqCWRpc3BsYXkgZGV2aWNlIHVzaW5nIHRo ZSBNU0Igb2YgZWFjaCBvZiB0aGUgUiwgRyBhbmQgQiBjb2xvcgorICoJY29tcG9uZW50cyBpbiB0 aGUgZnJhbWUgbWVtb3J5CisgKi8KKyNkZWZpbmUgc2V0X3BpeGVsX2Zvcm1hdAkJMHgzYQorLyoK KyAqCVRoaXMgY29tbWFuZCBzZXRzIHRoZSBwaXhlbCBmb3JtYXQgZm9yIHRoZSBSR0IgaW1hZ2Ug ZGF0YSB1c2VkIGJ5IHRoZQorICoJaW50ZXJmYWNlLgorICoJQml0cyBEWzY6NF0gIERQSSBQaXhl bCBGb3JtYXQgRGVmaW5pdGlvbgorICoJQml0cyBEWzI6MF0gIERCSSBQaXhlbCBGb3JtYXQgRGVm aW5pdGlvbgorICoJQml0cyBENyBhbmQgRDMgYXJlIG5vdCB1c2VkLgorICovCisjZGVmaW5lIERD U19QSVhFTF9GT1JNQVRfM2JwcAkJMHgxCisjZGVmaW5lIERDU19QSVhFTF9GT1JNQVRfOGJwcAkJ MHgyCisjZGVmaW5lIERDU19QSVhFTF9GT1JNQVRfMTJicHAJCTB4MworI2RlZmluZSBEQ1NfUElY RUxfRk9STUFUXzE2YnBwCQkweDUKKyNkZWZpbmUgRENTX1BJWEVMX0ZPUk1BVF8xOGJwcAkJMHg2 CisjZGVmaW5lIERDU19QSVhFTF9GT1JNQVRfMjRicHAJCTB4NworCisjZGVmaW5lIHdyaXRlX21l bV9jb250CQkJMHgzYworCisvKgorICoJVGhpcyBjb21tYW5kIHRyYW5zZmVycyBpbWFnZSBkYXRh IGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yIHRvIHRoZQorICoJZGlzcGxheSBtb2R1bGUncyBmcmFt ZSBtZW1vcnkgY29udGludWluZyBmcm9tIHRoZSBwaXhlbCBsb2NhdGlvbgorICoJZm9sbG93aW5n IHRoZSBwcmV2aW91cyB3cml0ZV9tZW1vcnlfY29udGludWUgb3Igd3JpdGVfbWVtb3J5X3N0YXJ0 CisgKgljb21tYW5kLgorICovCisjZGVmaW5lIHNldF90ZWFyX3NjYW5saW5lCQkweDQ0CisvKgor ICoJVGhpcyBjb21tYW5kIHR1cm5zIG9uIHRoZSBkaXNwbGF5IG1vZHVsZXMgVGVhcmluZyBFZmZl Y3Qgb3V0cHV0IHNpZ25hbAorICoJb24gdGhlIFRFIHNpZ25hbCBsaW5lIHdoZW4gdGhlIGRpc3Bs YXkgbW9kdWxlIHJlYWNoZXMgbGluZSBOLgorICovCisjZGVmaW5lIGdldF9zY2FubGluZQkJCTB4 NDUKKy8qCisgKglUaGUgZGlzcGxheSBtb2R1bGUgcmV0dXJucyB0aGUgY3VycmVudCBzY2FubGlu ZSwgTiwgdXNlZCB0byB1cGRhdGUgdGhlCisgKgkgZGlzcGxheSBkZXZpY2UuIFRoZSB0b3RhbCBu dW1iZXIgb2Ygc2NhbmxpbmVzIG9uIGEgZGlzcGxheSBkZXZpY2UgaXMKKyAqCWRlZmluZWQgYXMg VlNZTkMgKyBWQlAgKyBWQUNUICsgVkZQLlRoZSBmaXJzdCBzY2FubGluZSBpcyBkZWZpbmVkIGFz CisgKgl0aGUgZmlyc3QgbGluZSBvZiBWIFN5bmMgYW5kIGlzIGRlbm90ZWQgYXMgTGluZSAwLgor ICoJV2hlbiBpbiBTbGVlcCBNb2RlLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZ2V0X3NjYW5saW5l IGlzIHVuZGVmaW5lZC4KKyAqLworCisvKiBNQ1Mgb3IgR2VuZXJpYyBDT01NQU5EUyAqLworLyog TUNTL2dlbmVyaWMgZGF0YSB0eXBlICovCisjZGVmaW5lIEdFTl9TSE9SVF9XUklURV8wCTB4MDMg IC8qIGdlbmVyaWMgc2hvcnQgd3JpdGUsIG5vIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgR0VOX1NI T1JUX1dSSVRFXzEJMHgxMyAgLyogZ2VuZXJpYyBzaG9ydCB3cml0ZSwgMSBwYXJhbWV0ZXJzICov CisjZGVmaW5lIEdFTl9TSE9SVF9XUklURV8yCTB4MjMgIC8qIGdlbmVyaWMgc2hvcnQgd3JpdGUs IDIgcGFyYW1ldGVycyAqLworI2RlZmluZSBHRU5fUkVBRF8wCQkweDA0ICAvKiBnZW5lcmljIHJl YWQsIG5vIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgR0VOX1JFQURfMQkJMHgxNCAgLyogZ2VuZXJp YyByZWFkLCAxIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgR0VOX1JFQURfMgkJMHgyNCAgLyogZ2Vu ZXJpYyByZWFkLCAyIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgR0VOX0xPTkdfV1JJVEUJCTB4Mjkg IC8qIGdlbmVyaWMgbG9uZyB3cml0ZSAqLworI2RlZmluZSBNQ1NfU0hPUlRfV1JJVEVfMAkweDA1 ICAvKiBNQ1Mgc2hvcnQgd3JpdGUsIG5vIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgTUNTX1NIT1JU X1dSSVRFXzEJMHgxNSAgLyogTUNTIHNob3J0IHdyaXRlLCAxIHBhcmFtZXRlcnMgKi8KKyNkZWZp bmUgTUNTX1JFQUQJCTB4MDYgIC8qIE1DUyByZWFkLCBubyBwYXJhbWV0ZXJzICovCisjZGVmaW5l IE1DU19MT05HX1dSSVRFCQkweDM5ICAvKiBNQ1MgbG9uZyB3cml0ZSAqLworLyogTUNTL2dlbmVy aWMgY29tbWFuZHMgKi8KKy8qIFRQTyBNQ1MgKi8KKyNkZWZpbmUgd3JpdGVfZGlzcGxheV9wcm9m aWxlCQkweDUwCisjZGVmaW5lIHdyaXRlX2Rpc3BsYXlfYnJpZ2h0bmVzcwkweDUxCisjZGVmaW5l IHdyaXRlX2N0cmxfZGlzcGxheQkJMHg1MworI2RlZmluZSB3cml0ZV9jdHJsX2NhYmMJCQkweDU1 CisgICNkZWZpbmUgVUlfSU1BR0UJCTB4MDEKKyAgI2RlZmluZSBTVElMTF9JTUFHRQkJMHgwMgor ICAjZGVmaW5lIE1PVklOR19JTUFHRQkJMHgwMworI2RlZmluZSB3cml0ZV9oeXN0ZXJlc2lzCQkw eDU3CisjZGVmaW5lIHdyaXRlX2dhbW1hX3NldHRpbmcJCTB4NTgKKyNkZWZpbmUgd3JpdGVfY2Fi Y19taW5fYnJpZ2h0CQkweDVlCisjZGVmaW5lIHdyaXRlX2tiYmNfcHJvZmlsZQkJMHg2MAorLyog VE1EIE1DUyAqLworI2RlZmluZSB0bWRfd3JpdGVfZGlzcGxheV9icmlnaHRuZXNzIDB4OGMKKwor LyoKKyAqCVRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNvbnRyb2wgYW1iaWVudCBsaWdodCwgcGFu ZWwgYmFja2xpZ2h0CisgKglicmlnaHRuZXNzIGFuZCBnYW1tYSBzZXR0aW5ncy4KKyAqLworI2Rl ZmluZSBCUklHSFRfQ05UTF9CTE9DS19PTgkoMSA8PCA1KQorI2RlZmluZSBBTUJJRU5UX0xJR0hU X1NFTlNFX09OCSgxIDw8IDQpCisjZGVmaW5lIERJU1BMQVlfRElNTUlOR19PTgkoMSA8PCAzKQor I2RlZmluZSBCQUNLTElHSFRfT04JCSgxIDw8IDIpCisjZGVmaW5lIERJU1BMQVlfQlJJR0hUTkVT U19BVVRPCSgxIDw8IDEpCisjZGVmaW5lIEdBTU1BX0FVVE8JCSgxIDw8IDApCisKKy8qIERDUyBJ bnRlcmZhY2UgUGl4ZWwgRm9ybWF0cyAqLworI2RlZmluZSBEQ1NfUElYRUxfRk9STUFUXzNCUFAJ MHgxCisjZGVmaW5lIERDU19QSVhFTF9GT1JNQVRfOEJQUAkweDIKKyNkZWZpbmUgRENTX1BJWEVM X0ZPUk1BVF8xMkJQUAkweDMKKyNkZWZpbmUgRENTX1BJWEVMX0ZPUk1BVF8xNkJQUAkweDUKKyNk ZWZpbmUgRENTX1BJWEVMX0ZPUk1BVF8xOEJQUAkweDYKKyNkZWZpbmUgRENTX1BJWEVMX0ZPUk1B VF8yNEJQUAkweDcKKy8qIE9ORSBQQVJBTUVURVIgUkVBRCBEQVRBICovCisjZGVmaW5lIGFkZHJf bW9kZV9kYXRhCQkweGZjCisjZGVmaW5lIGRpYWdfcmVzX2RhdGEJCTB4MDAKKyNkZWZpbmUgZGlz cF9tb2RlX2RhdGEJCTB4MjMKKyNkZWZpbmUgcHhsX2ZtdF9kYXRhCQkweDc3CisjZGVmaW5lIHB3 cl9tb2RlX2RhdGEJCTB4NzQKKyNkZWZpbmUgc2lnX21vZGVfZGF0YQkJMHgwMAorLyogVFdPIFBB UkFNRVRFUlMgUkVBRCBEQVRBICovCisjZGVmaW5lIHNjYW5saW5lX2RhdGExCQkweGZmCisjZGVm aW5lIHNjYW5saW5lX2RhdGEyCQkweGZmCisjZGVmaW5lIE5PTl9CVVJTVF9NT0RFX1NZTkNfUFVM U0UJMHgwMQkvKiBOb24gQnVyc3QgTW9kZQorCQkJCQkJICogd2l0aCBTeW5jIFB1bHNlCisJCQkJ CQkgKi8KKyNkZWZpbmUgTk9OX0JVUlNUX01PREVfU1lOQ19FVkVOVFMJMHgwMgkvKiBOb24gQnVy c3QgTW9kZQorCQkJCQkJICogd2l0aCBTeW5jIGV2ZW50cworCQkJCQkJICovCisjZGVmaW5lIEJV UlNUX01PREUJCQkweDAzCS8qIEJ1cnN0IE1vZGUgKi8KKyNkZWZpbmUgREJJX0NPTU1BTkRfQlVG RkVSX1NJWkUJCTB4MjQwICAgLyogMHgzMiAqLyAgICAvKiAweDEyMCAqLworCQkJCQkJLyogQWxs b2NhdGUgYXQgbGVhc3QKKwkJCQkJCSAqIDB4MTAwIEJ5dGUgd2l0aCAzMgorCQkJCQkJICogYnl0 ZSBhbGlnbm1lbnQKKwkJCQkJCSAqLworI2RlZmluZSBEQklfREFUQV9CVUZGRVJfU0laRQkJMHgx MjAJLyogQWxsb2NhdGUgYXQgbGVhc3QKKwkJCQkJCSAqIDB4MTAwIEJ5dGUgd2l0aCAzMgorCQkJ CQkJICogYnl0ZSBhbGlnbm1lbnQKKwkJCQkJCSAqLworI2RlZmluZSBEQklfQ0JfVElNRV9PVVQJ CQkweEZGRkYKKworI2RlZmluZSBHRU5fRkJfVElNRV9PVVQJCQkyMDAwCisKKyNkZWZpbmUgU0tV XzgzCQkJCTB4MDEKKyNkZWZpbmUgU0tVXzEwMAkJCQkweDAyCisjZGVmaW5lIFNLVV8xMDBMCQkJ MHgwNAorI2RlZmluZSBTS1VfQllQQVNTCQkJMHgwOAorCisvKiBTb21lIGhhbmR5IG1hY3JvcyBm b3IgcGxheWluZyB3aXRoIGJpdGZpZWxkcy4gKi8KKyNkZWZpbmUgUFNCX01BU0soaGlnaCwgbG93 KSAoKCgxPDwoKGhpZ2gpLShsb3cpKzEpKS0xKTw8KGxvdykpCisjZGVmaW5lIFNFVF9GSUVMRCh2 YWx1ZSwgZmllbGQpICgoKHZhbHVlKSA8PCBmaWVsZCAjIyBfU0hJRlQpICYgZmllbGQgIyMgX01B U0spCisjZGVmaW5lIEdFVF9GSUVMRCh3b3JkLCBmaWVsZCkgKCgod29yZCkgICYgZmllbGQgIyMg X01BU0spID4+IGZpZWxkICMjIF9TSElGVCkKKworI2RlZmluZSBfUElQRShwaXBlLCBhLCBiKSAo KGEpICsgKHBpcGUpKigoYiktKGEpKSkKKworLyogUENJIGNvbmZpZyBzcGFjZSAqLworCisjZGVm aW5lIFNCX1BDS1QgICAgICAgICAweDAyMTAwIC8qIGNlZGFydmlldyAqLworIyBkZWZpbmUgU0Jf T1BDT0RFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgUFNCX01BU0soMzEsIDE2KQorIyBk ZWZpbmUgU0JfT1BDT0RFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyMgZGVmaW5l IFNCX09QQ09ERV9SRUFEICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyMgZGVmaW5lIFNCX09Q Q09ERV9XUklURSAgICAgICAgICAgICAgICAgICAgICAgIDEKKyMgZGVmaW5lIFNCX0RFU1RfTUFT SyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTQl9NQVNLKDE1LCA4KQorIyBkZWZpbmUgU0Jf REVTVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOAorIyBkZWZpbmUgU0JfREVTVF9E UExMICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OAorIyBkZWZpbmUgU0JfQllURV9FTkFC TEVfTUFTSyAgICAgICAgICAgICAgICAgICAgUFNCX01BU0soNywgNCkKKyMgZGVmaW5lIFNCX0JZ VEVfRU5BQkxFX1NISUZUICAgICAgICAgICAgICAgICAgIDQKKyMgZGVmaW5lIFNCX0JVU1kgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisKKworLyogMzItYml0IHZhbHVl IHJlYWQvd3JpdHRlbiBmcm9tIHRoZSBEUElPIHJlZy4gKi8KKyNkZWZpbmUgU0JfREFUQQkJMHgw MjEwNCAvKiBjZWRhcnZpZXcgKi8KKy8qIDMyLWJpdCBhZGRyZXNzIG9mIHRoZSBEUElPIHJlZyB0 byBiZSByZWFkL3dyaXR0ZW4uICovCisjZGVmaW5lIFNCX0FERFIJCTB4MDIxMDggLyogY2VkYXJ2 aWV3ICovCisjZGVmaW5lIERQSU9fQ0ZHCTB4MDIxMTAgLyogY2VkYXJ2aWV3ICovCisjIGRlZmlu ZSBEUElPX01PREVfU0VMRUNUXzEJCQkoMSA8PCAzKQorIyBkZWZpbmUgRFBJT19NT0RFX1NFTEVD VF8wCQkJKDEgPDwgMikKKyMgZGVmaW5lIERQSU9fU0ZSX0JZUEFTUwkJCSgxIDw8IDEpCisvKiBy ZXNldCBpcyBhY3RpdmUgbG93ICovCisjIGRlZmluZSBEUElPX0NNTl9SRVNFVF9OCQkJKDEgPDwg MCkKKworLyogQ2VkYXJ2aWV3IHNpZGViYW5kIHJlZ2lzdGVycyAqLworI2RlZmluZSBfU0JfTV9B CQkJMHg4MDA4CisjZGVmaW5lIF9TQl9NX0IJCQkweDgwMjgKKyNkZWZpbmUgU0JfTShwaXBlKSBf UElQRShwaXBlLCBfU0JfTV9BLCBfU0JfTV9CKQorIyBkZWZpbmUgU0JfTV9ESVZJREVSX01BU0sJ CQkoMHhGRiA8PCAyNCkKKyMgZGVmaW5lIFNCX01fRElWSURFUl9TSElGVAkJCTI0CisKKyNkZWZp bmUgX1NCX05fVkNPX0EJCTB4ODAxNAorI2RlZmluZSBfU0JfTl9WQ09fQgkJMHg4MDM0CisjZGVm aW5lIFNCX05fVkNPKHBpcGUpIF9QSVBFKHBpcGUsIF9TQl9OX1ZDT19BLCBfU0JfTl9WQ09fQikK KyNkZWZpbmUgU0JfTl9WQ09fU0VMX01BU0sJCQlQU0JfTUFTSygzMSwgMzApCisjZGVmaW5lIFNC X05fVkNPX1NFTF9TSElGVAkJCTMwCisjZGVmaW5lIFNCX05fRElWSURFUl9NQVNLCQkJUFNCX01B U0soMjksIDI2KQorI2RlZmluZSBTQl9OX0RJVklERVJfU0hJRlQJCQkyNgorI2RlZmluZSBTQl9O X0NCX1RVTkVfTUFTSwkJCVBTQl9NQVNLKDI1LCAyNCkKKyNkZWZpbmUgU0JfTl9DQl9UVU5FX1NI SUZUCQkJMjQKKworI2RlZmluZSBfU0JfUkVGX0EJCTB4ODAxOAorI2RlZmluZSBfU0JfUkVGX0IJ CTB4ODAzOAorI2RlZmluZSBTQl9SRUZfU0ZSKHBpcGUpCV9QSVBFKHBpcGUsIF9TQl9SRUZfQSwg X1NCX1JFRl9CKQorCisjZGVmaW5lIF9TQl9QX0EJCQkweDgwMWMKKyNkZWZpbmUgX1NCX1BfQgkJ CTB4ODAzYworI2RlZmluZSBTQl9QKHBpcGUpIF9QSVBFKHBpcGUsIF9TQl9QX0EsIF9TQl9QX0Ip CisjZGVmaW5lIFNCX1AyX0RJVklERVJfTUFTSwkJCVBTQl9NQVNLKDMxLCAzMCkKKyNkZWZpbmUg U0JfUDJfRElWSURFUl9TSElGVAkJCTMwCisjZGVmaW5lIFNCX1AyXzEwCQkJCTAgLyogSERNSSwg RFAsIERBQyAqLworI2RlZmluZSBTQl9QMl81CQkJCTEgLyogREFDICovCisjZGVmaW5lIFNCX1Ay XzE0CQkJCTIgLyogTFZEUyBzaW5nbGUgKi8KKyNkZWZpbmUgU0JfUDJfNwkJCQkzIC8qIExWRFMg ZG91YmxlICovCisjZGVmaW5lIFNCX1AxX0RJVklERVJfTUFTSwkJCVBTQl9NQVNLKDE1LCAxMikK KyNkZWZpbmUgU0JfUDFfRElWSURFUl9TSElGVAkJCTEyCisKKyNkZWZpbmUgUFNCX0xBTkUwCQkw eDEyMAorI2RlZmluZSBQU0JfTEFORTEJCTB4MjIwCisjZGVmaW5lIFBTQl9MQU5FMgkJMHgyMzIw CisjZGVmaW5lIFBTQl9MQU5FMwkJMHgyNDIwCisKKyNkZWZpbmUgTEFORV9QTExfTUFTSwkJKDB4 NyA8PCAyMCkKKyNkZWZpbmUgTEFORV9QTExfRU5BQkxFCQkoMHgzIDw8IDIwKQorCisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfc2R2by5jIGIv ZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfc2R2by5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLmE0YmFkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vZ21hNTAwL3BzYl9pbnRlbF9zZHZvLmMKQEAgLTAsMCArMSwxMjkzIEBACisvKgorICog Q29weXJpZ2h0IChjKSAyMDA2LTIwMDcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKglF cmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMu aD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorLyogI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o PiAqLworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1 ZGUgInBzYl9pbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVk ZSAicHNiX2ludGVsX3Nkdm9fcmVncy5oIgorCitzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fcHJpdiB7 CisJc3RydWN0IHBzYl9pbnRlbF9pMmNfY2hhbiAqaTJjX2J1czsKKwlpbnQgc2xhdmVhZGRyOwor CWludCBvdXRwdXRfZGV2aWNlOworCisJdTE2IGFjdGl2ZV9vdXRwdXRzOworCisJc3RydWN0IHBz Yl9pbnRlbF9zZHZvX2NhcHMgY2FwczsKKwlpbnQgcGl4ZWxfY2xvY2tfbWluLCBwaXhlbF9jbG9j a19tYXg7CisKKwlpbnQgc2F2ZV9zZHZvX211bHQ7CisJdTE2IHNhdmVfYWN0aXZlX291dHB1dHM7 CisJc3RydWN0IHBzYl9pbnRlbF9zZHZvX2R0ZCBzYXZlX2lucHV0X2R0ZF8xLCBzYXZlX2lucHV0 X2R0ZF8yOworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19kdGQgc2F2ZV9vdXRwdXRfZHRkWzE2XTsK Kwl1MzIgc2F2ZV9TRFZPWDsKKwl1OCBpbl9vdXRfbWFwWzRdOworCisJdTggYnlfaW5wdXRfd2ly aW5nOworCXUzMiBhY3RpdmVfZGV2aWNlOworfTsKKworLyoqCisgKiBXcml0ZXMgdGhlIFNEVk9C IG9yIFNEVk9DIHdpdGggdGhlIGdpdmVuIHZhbHVlLCBidXQgYWx3YXlzIHdyaXRlcyBib3RoCisg KiBTRFZPQiBhbmQgU0RWT0MgdG8gd29yayBhcm91bmQgYXBwYXJlbnQgaGFyZHdhcmUgaXNzdWVz IChhY2NvcmRpbmcgdG8KKyAqIGNvbW1lbnRzIGluIHRoZSBCSU9TKS4KKyAqLwordm9pZCBwc2Jf aW50ZWxfc2R2b193cml0ZV9zZHZveChzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVs X291dHB1dCwKKwkJCQl1MzIgdmFsKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwc2Jf aW50ZWxfb3V0cHV0LT5iYXNlLmRldjsKKwlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fcHJpdiAqc2R2 b19wcml2ID0gcHNiX2ludGVsX291dHB1dC0+ZGV2X3ByaXY7CisJdTMyIGJ2YWwgPSB2YWwsIGN2 YWwgPSB2YWw7CisJaW50IGk7CisKKwlpZiAoc2R2b19wcml2LT5vdXRwdXRfZGV2aWNlID09IFNE Vk9CKQorCQljdmFsID0gUkVHX1JFQUQoU0RWT0MpOworCWVsc2UKKwkJYnZhbCA9IFJFR19SRUFE KFNEVk9CKTsKKwkvKgorCSAqIFdyaXRlIHRoZSByZWdpc3RlcnMgdHdpY2UgZm9yIGx1Y2suIFNv bWV0aW1lcywKKwkgKiB3cml0aW5nIHRoZW0gb25seSBvbmNlIGRvZXNuJ3QgYXBwZWFyIHRvICdz dGljaycuCisJICogVGhlIEJJT1MgZG9lcyB0aGlzIHRvby4gWWF5LCBtYWdpYworCSAqLworCWZv ciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJUkVHX1dSSVRFKFNEVk9CLCBidmFsKTsKKwkJUkVH X1JFQUQoU0RWT0IpOworCQlSRUdfV1JJVEUoU0RWT0MsIGN2YWwpOworCQlSRUdfUkVBRChTRFZP Qyk7CisJfQorfQorCitzdGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19yZWFkX2J5dGUoCisJCQkJ c3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQsCisJCQkJdTggYWRkciwg dTggKmNoKQoreworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBwc2Jf aW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwl1OCBvdXRfYnVmWzJdOworCXU4IGJ1ZlsyXTsKKwlp bnQgcmV0OworCisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCSAuYWRkciA9IHNk dm9fcHJpdi0+aTJjX2J1cy0+c2xhdmVfYWRkciwKKwkJIC5mbGFncyA9IDAsCisJCSAubGVuID0g MSwKKwkJIC5idWYgPSBvdXRfYnVmLAorCQkgfSwKKwkJeworCQkgLmFkZHIgPSBzZHZvX3ByaXYt PmkyY19idXMtPnNsYXZlX2FkZHIsCisJCSAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJIC5sZW4gPSAx LAorCQkgLmJ1ZiA9IGJ1ZiwKKwkJIH0KKwl9OworCisJb3V0X2J1ZlswXSA9IGFkZHI7CisJb3V0 X2J1ZlsxXSA9IDA7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoJnNkdm9fcHJpdi0+aTJjX2J1cy0+ YWRhcHRlciwgbXNncywgMik7CisJaWYgKHJldCA9PSAyKSB7CisJCSpjaCA9IGJ1ZlswXTsKKwkJ cmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBwc2Jf aW50ZWxfc2R2b193cml0ZV9ieXRlKAorCQkJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9p bnRlbF9vdXRwdXQsCisJCQlpbnQgYWRkciwgdTggY2gpCit7CisJdTggb3V0X2J1ZlsyXTsKKwlz dHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJIC5hZGRyID0gcHNiX2ludGVsX291dHB1 dC0+aTJjX2J1cy0+c2xhdmVfYWRkciwKKwkJIC5mbGFncyA9IDAsCisJCSAubGVuID0gMiwKKwkJ IC5idWYgPSBvdXRfYnVmLAorCQkgfQorCX07CisKKwlvdXRfYnVmWzBdID0gYWRkcjsKKwlvdXRf YnVmWzFdID0gY2g7CisKKwlpZiAoaTJjX3RyYW5zZmVyKCZwc2JfaW50ZWxfb3V0cHV0LT5pMmNf YnVzLT5hZGFwdGVyLCBtc2dzLCAxKSA9PSAxKQorCQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gZmFs c2U7Cit9CisKKyNkZWZpbmUgU0RWT19DTURfTkFNRV9FTlRSWShjbWQpIHtjbWQsICNjbWR9Cisv KiogTWFwcGluZyBvZiBjb21tYW5kIG51bWJlcnMgdG8gbmFtZXMsIGZvciBkZWJ1ZyBvdXRwdXQg Ki8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX3Nkdm9fY21kX25hbWUgeworCXU4IGNtZDsKKwljaGFy ICpuYW1lOworfSBzZHZvX2NtZF9uYW1lc1tdID0geworU0RWT19DTURfTkFNRV9FTlRSWShTRFZP X0NNRF9SRVNFVCksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX0RFVklD RV9DQVBTKSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfRklSTVdBUkVf UkVWKSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfVFJBSU5FRF9JTlBV VFMpLAorCSAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9BQ1RJVkVfT1VUUFVU UyksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0FDVElWRV9PVVRQVVRT KSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfSU5fT1VUX01BUCksCisJ ICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0lOX09VVF9NQVApLAorCSAgICBT RFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9BVFRBQ0hFRF9ESVNQTEFZUyksCisJICAg IFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfR0VUX0hPVF9QTFVHX1NVUFBPUlQpLAorCSAg ICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX1NFVF9BQ1RJVkVfSE9UX1BMVUcpLAorCSAg ICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9BQ1RJVkVfSE9UX1BMVUcpLAorCSAg ICBTRFZPX0NNRF9OQU1FX0VOVFJZCisJICAgIChTRFZPX0NNRF9HRVRfSU5URVJSVVBUX0VWRU5U X1NPVVJDRSksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX1RBUkdFVF9J TlBVVCksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX1RBUkdFVF9PVVRQ VVQpLAorCSAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX0dFVF9JTlBVVF9USU1JTkdT X1BBUlQxKSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfSU5QVVRfVElN SU5HU19QQVJUMiksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0lOUFVU X1RJTUlOR1NfUEFSVDEpLAorCSAgICBTRFZPX0NNRF9OQU1FX0VOVFJZKFNEVk9fQ01EX1NFVF9J TlBVVF9USU1JTkdTX1BBUlQyKSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWShTRFZPX0NNRF9T RVRfSU5QVVRfVElNSU5HU19QQVJUMSksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkoU0RWT19D TURfU0VUX09VVFBVVF9USU1JTkdTX1BBUlQxKSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWShT RFZPX0NNRF9TRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDIpLAorCSAgICBTRFZPX0NNRF9OQU1FX0VO VFJZKFNEVk9fQ01EX0dFVF9PVVRQVVRfVElNSU5HU19QQVJUMSksCisJICAgIFNEVk9fQ01EX05B TUVfRU5UUlkoU0RWT19DTURfR0VUX09VVFBVVF9USU1JTkdTX1BBUlQyKSwKKwkgICAgU0RWT19D TURfTkFNRV9FTlRSWQorCSAgICAoU0RWT19DTURfQ1JFQVRFX1BSRUZFUlJFRF9JTlBVVF9USU1J TkcpLAorCSAgICBTRFZPX0NNRF9OQU1FX0VOVFJZCisJICAgIChTRFZPX0NNRF9HRVRfUFJFRkVS UkVEX0lOUFVUX1RJTUlOR19QQVJUMSksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkKKwkgICAg KFNEVk9fQ01EX0dFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HX1BBUlQyKSwKKwkgICAgU0RWT19D TURfTkFNRV9FTlRSWQorCSAgICAoU0RWT19DTURfR0VUX0lOUFVUX1BJWEVMX0NMT0NLX1JBTkdF KSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWQorCSAgICAoU0RWT19DTURfR0VUX09VVFBVVF9Q SVhFTF9DTE9DS19SQU5HRSksCisJICAgIFNEVk9fQ01EX05BTUVfRU5UUlkKKwkgICAgKFNEVk9f Q01EX0dFVF9TVVBQT1JURURfQ0xPQ0tfUkFURV9NVUxUUyksCisJICAgIFNEVk9fQ01EX05BTUVf RU5UUlkoU0RWT19DTURfR0VUX0NMT0NLX1JBVEVfTVVMVCksCisJICAgIFNEVk9fQ01EX05BTUVf RU5UUlkoU0RWT19DTURfU0VUX0NMT0NLX1JBVEVfTVVMVCksCisJICAgIFNEVk9fQ01EX05BTUVf RU5UUlkoU0RWT19DTURfR0VUX1NVUFBPUlRFRF9UVl9GT1JNQVRTKSwKKwkgICAgU0RWT19DTURf TkFNRV9FTlRSWShTRFZPX0NNRF9HRVRfVFZfRk9STUFUKSwKKwkgICAgU0RWT19DTURfTkFNRV9F TlRSWShTRFZPX0NNRF9TRVRfVFZfRk9STUFUKSwKKwkgICAgU0RWT19DTURfTkFNRV9FTlRSWQor CSAgICAoU0RWT19DTURfU0VUX1RWX1JFU09MVVRJT05fU1VQUE9SVCksCisJICAgIFNEVk9fQ01E X05BTUVfRU5UUlkoU0RWT19DTURfU0VUX0NPTlRST0xfQlVTX1NXSVRDSCksfTsKKworI2RlZmlu ZSBTRFZPX05BTUUoZGV2X3ByaXYpIFwKKwkJICgoZGV2X3ByaXYpLT5vdXRwdXRfZGV2aWNlID09 IFNEVk9CID8gIlNEVk9CIiA6ICJTRFZPQyIpCisjZGVmaW5lIFNEVk9fUFJJVihvdXRwdXQpICAg KChzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fcHJpdiAqKSAob3V0cHV0KS0+ZGV2X3ByaXYpCisKK3N0 YXRpYyB2b2lkIHBzYl9pbnRlbF9zZHZvX3dyaXRlX2NtZChzdHJ1Y3QgcHNiX2ludGVsX291dHB1 dCAqcHNiX2ludGVsX291dHB1dCwKKwkJCQkgICAgIHU4IGNtZCwKKwkJCQkgICAgIHZvaWQgKmFy Z3MsCisJCQkJICAgICBpbnQgYXJnc19sZW4pCit7CisJc3RydWN0IHBzYl9pbnRlbF9zZHZvX3By aXYgKnNkdm9fcHJpdiA9IHBzYl9pbnRlbF9vdXRwdXQtPmRldl9wcml2OworCWludCBpOworCisJ aWYgKDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBXOiAlMDJYICIsIFNEVk9fTkFNRShz ZHZvX3ByaXYpLCBjbWQpOworCQlmb3IgKGkgPSAwOyBpIDwgYXJnc19sZW47IGkrKykKKwkJCXBy aW50ayhLRVJOX0NPTlQgIiUwMlggIiwgKCh1OCAqKSBhcmdzKVtpXSk7CisJCWZvciAoOyBpIDwg ODsgaSsrKQorCQkJcHJpbnRrKEtFUk5fQ09OVCAiICAgIik7CisJCWZvciAoaSA9IDA7CisJCSAg ICAgaSA8CisJCSAgICAgc2l6ZW9mKHNkdm9fY21kX25hbWVzKSAvIHNpemVvZihzZHZvX2NtZF9u YW1lc1swXSk7CisJCSAgICAgaSsrKSB7CisJCQlpZiAoY21kID09IHNkdm9fY21kX25hbWVzW2ld LmNtZCkgeworCQkJCXByaW50ayhLRVJOX0NPTlQKKwkJCQkJIiglcykiLCBzZHZvX2NtZF9uYW1l c1tpXS5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PQorCQkgICAgc2l6 ZW9mKHNkdm9fY21kX25hbWVzKSAvIHNpemVvZihzZHZvX2NtZF9uYW1lc1swXSkpCisJCQlwcmlu dGsoS0VSTl9DT05UICIoJTAyWCkiLCBjbWQpOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwor CX0KKworCWZvciAoaSA9IDA7IGkgPCBhcmdzX2xlbjsgaSsrKSB7CisJCXBzYl9pbnRlbF9zZHZv X3dyaXRlX2J5dGUocHNiX2ludGVsX291dHB1dCwKKwkJCQkJU0RWT19JMkNfQVJHXzAgLSBpLAor CQkJCQkoKHU4ICopIGFyZ3MpW2ldKTsKKwl9CisKKwlwc2JfaW50ZWxfc2R2b193cml0ZV9ieXRl KHBzYl9pbnRlbF9vdXRwdXQsIFNEVk9fSTJDX09QQ09ERSwgY21kKTsKK30KKworc3RhdGljIGNv bnN0IGNoYXIgKmNvbnN0IGNtZF9zdGF0dXNfbmFtZXNbXSA9IHsKKwkiUG93ZXIgb24iLAorCSJT dWNjZXNzIiwKKwkiTm90IHN1cHBvcnRlZCIsCisJIkludmFsaWQgYXJnIiwKKwkiUGVuZGluZyIs CisJIlRhcmdldCBub3Qgc3BlY2lmaWVkIiwKKwkiU2NhbGluZyBub3Qgc3VwcG9ydGVkIgorfTsK Kworc3RhdGljIHU4IHBzYl9pbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoCisJCQkJc3RydWN0IHBz Yl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQsCisJCQkJdm9pZCAqcmVzcG9uc2UsIGlu dCByZXNwb25zZV9sZW4pCit7CisJc3RydWN0IHBzYl9pbnRlbF9zZHZvX3ByaXYgKnNkdm9fcHJp diA9IHBzYl9pbnRlbF9vdXRwdXQtPmRldl9wcml2OworCWludCBpOworCXU4IHN0YXR1czsKKwl1 OCByZXRyeSA9IDUwOworCisJd2hpbGUgKHJldHJ5LS0pIHsKKwkJLyogUmVhZCB0aGUgY29tbWFu ZCByZXNwb25zZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmVzcG9uc2VfbGVuOyBpKyspIHsKKwkJ CXBzYl9pbnRlbF9zZHZvX3JlYWRfYnl0ZShwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgIFNE Vk9fSTJDX1JFVFVSTl8wICsgaSwKKwkJCQkJICAgICAmKCh1OCAqKSByZXNwb25zZSlbaV0pOwor CQl9CisKKwkJLyogcmVhZCB0aGUgcmV0dXJuIHN0YXR1cyAqLworCQlwc2JfaW50ZWxfc2R2b19y ZWFkX2J5dGUocHNiX2ludGVsX291dHB1dCwKKwkJCQkJIFNEVk9fSTJDX0NNRF9TVEFUVVMsCisJ CQkJCSAmc3RhdHVzKTsKKworCQlpZiAoMCkgeworCQkJcHJfZGVidWcoIiVzOiBSOiAiLCBTRFZP X05BTUUoc2R2b19wcml2KSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmVzcG9uc2VfbGVuOyBpKysp CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiJTAyWCAiLCAoKHU4ICopIHJlc3BvbnNlKVtpXSk7CisJ CQlmb3IgKDsgaSA8IDg7IGkrKykKKwkJCQlwcmludGsoIiAgICIpOworCQkJaWYgKHN0YXR1cyA8 PSBTRFZPX0NNRF9TVEFUVVNfU0NBTElOR19OT1RfU1VQUCkKKwkJCQlwcmludGsoS0VSTl9DT05U ICIoJXMpIiwKKwkJCQkJIGNtZF9zdGF0dXNfbmFtZXNbc3RhdHVzXSk7CisJCQllbHNlCisJCQkJ cHJpbnRrKEtFUk5fQ09OVCAiKD8/PyAlZCkiLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fQ09O VCAiXG4iKTsKKwkJfQorCisJCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1BFTkRJTkcp CisJCQlyZXR1cm4gc3RhdHVzOworCisJCW1kZWxheSg1MCk7CisJfQorCisJcmV0dXJuIHN0YXR1 czsKK30KKworaW50IHBzYl9pbnRlbF9zZHZvX2dldF9waXhlbF9tdWx0aXBsaWVyKHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCWlmIChtb2RlLT5jbG9jayA+PSAxMDAwMDApCisJ CXJldHVybiAxOworCWVsc2UgaWYgKG1vZGUtPmNsb2NrID49IDUwMDAwKQorCQlyZXR1cm4gMjsK KwllbHNlCisJCXJldHVybiA0OworfQorCisvKioKKyAqIERvbid0IGNoZWNrIHN0YXR1cyBjb2Rl IGZyb20gdGhpcyBhcyBpdCBzd2l0Y2hlcyB0aGUgYnVzIGJhY2sgdG8gdGhlCisgKiBTRFZPIGNo aXBzIHdoaWNoIGRlZmVhdHMgdGhlIHB1cnBvc2Ugb2YgZG9pbmcgYSBidXMgc3dpdGNoIGluIHRo ZSBmaXJzdAorICogcGxhY2UuCisgKi8KK3ZvaWQgcHNiX2ludGVsX3Nkdm9fc2V0X2NvbnRyb2xf YnVzX3N3aXRjaCgKKwkJCQlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1 dCwKKwkJCQl1OCB0YXJnZXQpCit7CisJcHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRl bF9vdXRwdXQsCisJCQkJIFNEVk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gsCisJCQkJICZ0 YXJnZXQsCisJCQkJIDEpOworfQorCitzdGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19zZXRfdGFy Z2V0X2lucHV0KAorCQkJCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0 LAorCQkJCWJvb2wgdGFyZ2V0XzAsIGJvb2wgdGFyZ2V0XzEpCit7CisJc3RydWN0IHBzYl9pbnRl bF9zZHZvX3NldF90YXJnZXRfaW5wdXRfYXJncyB0YXJnZXRzID0geyAwIH07CisJdTggc3RhdHVz OworCisJaWYgKHRhcmdldF8wICYmIHRhcmdldF8xKQorCQlyZXR1cm4gU0RWT19DTURfU1RBVFVT X05PVFNVUFA7CisKKwlpZiAodGFyZ2V0XzEpCisJCXRhcmdldHMudGFyZ2V0XzEgPSAxOworCisJ cHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRlbF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9U QVJHRVRfSU5QVVQsCisJCQkgICAgICZ0YXJnZXRzLCBzaXplb2YodGFyZ2V0cykpOworCisJc3Rh dHVzID0gcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCBOVUxM LCAwKTsKKworCXJldHVybiBzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1M7Cit9CisK Ky8qKgorICogUmV0dXJuIHdoZXRoZXIgZWFjaCBpbnB1dCBpcyB0cmFpbmVkLgorICoKKyAqIFRo aXMgZnVuY3Rpb24gaXMgbWFraW5nIGFuIGFzc3VtcHRpb24gYWJvdXQgdGhlIGxheW91dCBvZiB0 aGUgcmVzcG9uc2UsCisgKiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBkb2Nz LgorICovCitzdGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19nZXRfdHJhaW5lZF9pbnB1dHMoc3Ry dWN0IHBzYl9pbnRlbF9vdXRwdXQKKwkJCQkJICAqcHNiX2ludGVsX291dHB1dCwgYm9vbCAqaW5w dXRfMSwKKwkJCQkJICBib29sICppbnB1dF8yKQoreworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19n ZXRfdHJhaW5lZF9pbnB1dHNfcmVzcG9uc2UgcmVzcG9uc2U7CisJdTggc3RhdHVzOworCisJcHNi X2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRlbF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9UUkFJ TkVEX0lOUFVUUywKKwkJCSAgICAgTlVMTCwgMCk7CisJc3RhdHVzID0KKwkgICAgcHNiX2ludGVs X3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCAmcmVzcG9uc2UsCisJCQkJICAg ICBzaXplb2YocmVzcG9uc2UpKTsKKwlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUND RVNTKQorCQlyZXR1cm4gZmFsc2U7CisKKwkqaW5wdXRfMSA9IHJlc3BvbnNlLmlucHV0MF90cmFp bmVkOworCSppbnB1dF8yID0gcmVzcG9uc2UuaW5wdXQxX3RyYWluZWQ7CisJcmV0dXJuIHRydWU7 Cit9CisKK3N0YXRpYyBib29sIHBzYl9pbnRlbF9zZHZvX2dldF9hY3RpdmVfb3V0cHV0cyhzdHJ1 Y3QgcHNiX2ludGVsX291dHB1dAorCQkJCQkgICpwc2JfaW50ZWxfb3V0cHV0LCB1MTYgKm91dHB1 dHMpCit7CisJdTggc3RhdHVzOworCisJcHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRl bF9vdXRwdXQsIFNEVk9fQ01EX0dFVF9BQ1RJVkVfT1VUUFVUUywKKwkJCSAgICAgTlVMTCwgMCk7 CisJc3RhdHVzID0KKwkgICAgcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxf b3V0cHV0LCBvdXRwdXRzLAorCQkJCSAgICAgc2l6ZW9mKCpvdXRwdXRzKSk7CisKKwlyZXR1cm4g c3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBwc2Jf aW50ZWxfc2R2b19zZXRfYWN0aXZlX291dHB1dHMoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQKKwkJ CQkJICAqcHNiX2ludGVsX291dHB1dCwgdTE2IG91dHB1dHMpCit7CisJdTggc3RhdHVzOworCisJ cHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRlbF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9B Q1RJVkVfT1VUUFVUUywKKwkJCSAgICAgJm91dHB1dHMsIHNpemVvZihvdXRwdXRzKSk7CisJc3Rh dHVzID0gcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCBOVUxM LCAwKTsKKwlyZXR1cm4gc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTOworfQorCitz dGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19zZXRfZW5jb2Rlcl9wb3dlcl9zdGF0ZShzdHJ1Y3Qg cHNiX2ludGVsX291dHB1dAorCQkJCQkgICAgICAgKnBzYl9pbnRlbF9vdXRwdXQsIGludCBtb2Rl KQoreworCXU4IHN0YXR1cywgc3RhdGUgPSBTRFZPX0VOQ09ERVJfU1RBVEVfT047CisKKwlzd2l0 Y2ggKG1vZGUpIHsKKwljYXNlIERSTV9NT0RFX0RQTVNfT046CisJCXN0YXRlID0gU0RWT19FTkNP REVSX1NUQVRFX09OOworCQlicmVhazsKKwljYXNlIERSTV9NT0RFX0RQTVNfU1RBTkRCWToKKwkJ c3RhdGUgPSBTRFZPX0VOQ09ERVJfU1RBVEVfU1RBTkRCWTsKKwkJYnJlYWs7CisJY2FzZSBEUk1f TU9ERV9EUE1TX1NVU1BFTkQ6CisJCXN0YXRlID0gU0RWT19FTkNPREVSX1NUQVRFX1NVU1BFTkQ7 CisJCWJyZWFrOworCWNhc2UgRFJNX01PREVfRFBNU19PRkY6CisJCXN0YXRlID0gU0RWT19FTkNP REVSX1NUQVRFX09GRjsKKwkJYnJlYWs7CisJfQorCisJcHNiX2ludGVsX3Nkdm9fd3JpdGVfY21k KHBzYl9pbnRlbF9vdXRwdXQsCisJCQkgICAgIFNEVk9fQ01EX1NFVF9FTkNPREVSX1BPV0VSX1NU QVRFLCAmc3RhdGUsCisJCQkgICAgIHNpemVvZihzdGF0ZSkpOworCXN0YXR1cyA9IHBzYl9pbnRl bF9zZHZvX3JlYWRfcmVzcG9uc2UocHNiX2ludGVsX291dHB1dCwgTlVMTCwgMCk7CisKKwlyZXR1 cm4gc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBw c2JfaW50ZWxfc2R2b19nZXRfaW5wdXRfcGl4ZWxfY2xvY2tfcmFuZ2Uoc3RydWN0IHBzYl9pbnRl bF9vdXRwdXQKKwkJCQkJCSAgICpwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkJICAgaW50ICpjbG9j a19taW4sCisJCQkJCQkgICBpbnQgKmNsb2NrX21heCkKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX3Nk dm9fcGl4ZWxfY2xvY2tfcmFuZ2UgY2xvY2tzOworCXU4IHN0YXR1czsKKworCXBzYl9pbnRlbF9z ZHZvX3dyaXRlX2NtZChwc2JfaW50ZWxfb3V0cHV0LAorCQkJICAgICBTRFZPX0NNRF9HRVRfSU5Q VVRfUElYRUxfQ0xPQ0tfUkFOR0UsIE5VTEwsCisJCQkgICAgIDApOworCisJc3RhdHVzID0KKwkg ICAgcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCAmY2xvY2tz LAorCQkJCSAgICAgc2l6ZW9mKGNsb2NrcykpOworCisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9T VEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQ29udmVydCB0aGUgdmFsdWVz IGZyb20gdW5pdHMgb2YgMTAga0h6IHRvIGtIei4gKi8KKwkqY2xvY2tfbWluID0gY2xvY2tzLm1p biAqIDEwOworCSpjbG9ja19tYXggPSBjbG9ja3MubWF4ICogMTA7CisKKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIGJvb2wgcHNiX2ludGVsX3Nkdm9fc2V0X3RhcmdldF9vdXRwdXQoCisJCQkJ c3RydWN0IHBzYl9pbnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQsCisJCQkJdTE2IG91dHB1 dHMpCit7CisJdTggc3RhdHVzOworCisJcHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRl bF9vdXRwdXQsIFNEVk9fQ01EX1NFVF9UQVJHRVRfT1VUUFVULAorCQkJICAgICAmb3V0cHV0cywg c2l6ZW9mKG91dHB1dHMpKTsKKworCXN0YXR1cyA9IHBzYl9pbnRlbF9zZHZvX3JlYWRfcmVzcG9u c2UocHNiX2ludGVsX291dHB1dCwgTlVMTCwgMCk7CisJcmV0dXJuIHN0YXR1cyA9PSBTRFZPX0NN RF9TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGJvb2wgcHNiX2ludGVsX3Nkdm9fZ2V0X3Rp bWluZyhzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCwKKwkJCQkgIHU4 IGNtZCwgc3RydWN0IHBzYl9pbnRlbF9zZHZvX2R0ZCAqZHRkKQoreworCXU4IHN0YXR1czsKKwor CXBzYl9pbnRlbF9zZHZvX3dyaXRlX2NtZChwc2JfaW50ZWxfb3V0cHV0LCBjbWQsIE5VTEwsIDAp OworCXN0YXR1cyA9IHBzYl9pbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UocHNiX2ludGVsX291dHB1 dCwgJmR0ZC0+cGFydDEsCisJCQkJCSAgc2l6ZW9mKGR0ZC0+cGFydDEpKTsKKwlpZiAoc3RhdHVz ICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gZmFsc2U7CisKKwlwc2JfaW50 ZWxfc2R2b193cml0ZV9jbWQocHNiX2ludGVsX291dHB1dCwgY21kICsgMSwgTlVMTCwgMCk7CisJ c3RhdHVzID0gcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCAm ZHRkLT5wYXJ0MiwKKwkJCQkJICBzaXplb2YoZHRkLT5wYXJ0MikpOworCWlmIChzdGF0dXMgIT0g U0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVl OworfQorCitzdGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19nZXRfaW5wdXRfdGltaW5nKAorCQkJ CXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0LAorCQkJCXN0cnVjdCBw c2JfaW50ZWxfc2R2b19kdGQgKmR0ZCkKK3sKKwlyZXR1cm4gcHNiX2ludGVsX3Nkdm9fZ2V0X3Rp bWluZyhwc2JfaW50ZWxfb3V0cHV0LAorCQkJCSAgICAgU0RWT19DTURfR0VUX0lOUFVUX1RJTUlO R1NfUEFSVDEsCisJCQkJICAgICBkdGQpOworfQorCitzdGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2 b19zZXRfdGltaW5nKAorCQkJCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0 cHV0LAorCQkJCXU4IGNtZCwKKwkJCQlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fZHRkICpkdGQpCit7 CisJdTggc3RhdHVzOworCisJcHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRlbF9vdXRw dXQsIGNtZCwgJmR0ZC0+cGFydDEsCisJCQkgICAgIHNpemVvZihkdGQtPnBhcnQxKSk7CisJc3Rh dHVzID0gcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCBOVUxM LCAwKTsKKwlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4g ZmFsc2U7CisKKwlwc2JfaW50ZWxfc2R2b193cml0ZV9jbWQocHNiX2ludGVsX291dHB1dCwgY21k ICsgMSwgJmR0ZC0+cGFydDIsCisJCQkgICAgIHNpemVvZihkdGQtPnBhcnQyKSk7CisJc3RhdHVz ID0gcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCBOVUxMLCAw KTsKKwlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1cm4gZmFs c2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgcHNiX2ludGVsX3Nkdm9fc2V0 X2lucHV0X3RpbWluZygKKwkJCQlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291 dHB1dCwKKwkJCQlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fZHRkICpkdGQpCit7CisJcmV0dXJuIHBz Yl9pbnRlbF9zZHZvX3NldF90aW1pbmcocHNiX2ludGVsX291dHB1dCwKKwkJCQkgICAgIFNEVk9f Q01EX1NFVF9JTlBVVF9USU1JTkdTX1BBUlQxLAorCQkJCSAgICAgZHRkKTsKK30KKworc3RhdGlj IGJvb2wgcHNiX2ludGVsX3Nkdm9fc2V0X291dHB1dF90aW1pbmcoCisJCQkJc3RydWN0IHBzYl9p bnRlbF9vdXRwdXQgKnBzYl9pbnRlbF9vdXRwdXQsCisJCQkJc3RydWN0IHBzYl9pbnRlbF9zZHZv X2R0ZCAqZHRkKQoreworCXJldHVybiBwc2JfaW50ZWxfc2R2b19zZXRfdGltaW5nKHBzYl9pbnRl bF9vdXRwdXQsCisJCQkJICAgICBTRFZPX0NNRF9TRVRfT1VUUFVUX1RJTUlOR1NfUEFSVDEsCisJ CQkJICAgICBkdGQpOworfQorCitzdGF0aWMgaW50IHBzYl9pbnRlbF9zZHZvX2dldF9jbG9ja19y YXRlX211bHQoc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQKKwkJCQkJCSpwc2JfaW50ZWxfb3V0cHV0 KQoreworCXU4IHJlc3BvbnNlLCBzdGF0dXM7CisKKwlwc2JfaW50ZWxfc2R2b193cml0ZV9jbWQo cHNiX2ludGVsX291dHB1dCwKKwkJCQkgU0RWT19DTURfR0VUX0NMT0NLX1JBVEVfTVVMVCwKKwkJ CQkgTlVMTCwKKwkJCQkgMCk7CisKKwlzdGF0dXMgPSBwc2JfaW50ZWxfc2R2b19yZWFkX3Jlc3Bv bnNlKHBzYl9pbnRlbF9vdXRwdXQsICZyZXNwb25zZSwgMSk7CisKKwlpZiAoc3RhdHVzICE9IFNE Vk9fQ01EX1NUQVRVU19TVUNDRVNTKSB7CisJCURSTV9ERUJVRygiQ291bGRuJ3QgZ2V0IFNEVk8g Y2xvY2sgcmF0ZSBtdWx0aXBsaWVyXG4iKTsKKwkJcmV0dXJuIFNEVk9fQ0xPQ0tfUkFURV9NVUxU XzFYOworCX0gZWxzZSB7CisJCURSTV9ERUJVRygiQ3VycmVudCBjbG9jayByYXRlIG11bHRpcGxp ZXI6ICVkXG4iLCByZXNwb25zZSk7CisJfQorCisJcmV0dXJuIHJlc3BvbnNlOworfQorCitzdGF0 aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19zZXRfY2xvY2tfcmF0ZV9tdWx0KHN0cnVjdCBwc2JfaW50 ZWxfb3V0cHV0CisJCQkJCQkqcHNiX2ludGVsX291dHB1dCwgdTggdmFsKQoreworCXU4IHN0YXR1 czsKKworCXBzYl9pbnRlbF9zZHZvX3dyaXRlX2NtZChwc2JfaW50ZWxfb3V0cHV0LAorCQkJCVNE Vk9fQ01EX1NFVF9DTE9DS19SQVRFX01VTFQsCisJCQkJJnZhbCwKKwkJCQkxKTsKKworCXN0YXR1 cyA9IHBzYl9pbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UocHNiX2ludGVsX291dHB1dCwgTlVMTCwg MCk7CisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJuIGZh bHNlOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHBzYl9zZHZvX3NldF9jdXJy ZW50X2lub3V0bWFwKHN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpvdXRwdXQsCisJCQkJCSAgdTMy IGluMG91dHB1dG1hc2ssCisJCQkJCSAgdTMyIGluMW91dHB1dG1hc2spCit7CisJdTggYnlBcmdz WzRdOworCXU4IHN0YXR1czsKKwlpbnQgaTsKKwlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fcHJpdiAq c2R2b19wcml2ID0gb3V0cHV0LT5kZXZfcHJpdjsKKworCS8qIE1ha2UgYWxsIGZpZWxkcyBvZiB0 aGUgIGFyZ3MvcmV0IHRvIHplcm8gKi8KKwltZW1zZXQoYnlBcmdzLCAwLCBzaXplb2YoYnlBcmdz KSk7CisKKwkvKiBGaWxsIHVwIHRoZSBhcmd1bWVudCB2YWx1ZXM7ICovCisJYnlBcmdzWzBdID0g KHU4KSAoaW4wb3V0cHV0bWFzayAmIDB4RkYpOworCWJ5QXJnc1sxXSA9ICh1OCkgKChpbjBvdXRw dXRtYXNrID4+IDgpICYgMHhGRik7CisJYnlBcmdzWzJdID0gKHU4KSAoaW4xb3V0cHV0bWFzayAm IDB4RkYpOworCWJ5QXJnc1szXSA9ICh1OCkgKChpbjFvdXRwdXRtYXNrID4+IDgpICYgMHhGRik7 CisKKworCS8qc2F2ZSBpbm91dG1hcCBhcmcgaGVyZSovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkr KykKKwkJc2R2b19wcml2LT5pbl9vdXRfbWFwW2ldID0gYnlBcmdzWzBdOworCisJcHNiX2ludGVs X3Nkdm9fd3JpdGVfY21kKG91dHB1dCwgU0RWT19DTURfU0VUX0lOX09VVF9NQVAsIGJ5QXJncywg NCk7CisJc3RhdHVzID0gcHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShvdXRwdXQsIE5VTEws IDApOworCisJaWYgKHN0YXR1cyAhPSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUykKKwkJcmV0dXJu IGZhbHNlOworCXJldHVybiB0cnVlOworfQorCisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9zZHZv X3NldF9pb21hcChzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqb3V0cHV0KQoreworCXUzMiBkd0N1 cnJlbnRTRFZPSW4wID0gMDsKKwl1MzIgZHdDdXJyZW50U0RWT0luMSA9IDA7CisJdTMyIGR3RGV2 TWFzayA9IDA7CisKKworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBv dXRwdXQtPmRldl9wcml2OworCisJLyogUGxlYXNlIERPIE5PVCBjaGFuZ2UgdGhlIGZvbGxvd2lu ZyBjb2RlLiAqLworCS8qIFNEVk9CX0lOMCBvciBTRFZPQl9JTjEgPT0+IHNkdm9faW4wICovCisJ LyogU0RWT0NfSU4wIG9yIFNEVk9DX0lOMSA9PT4gc2R2b19pbjEgKi8KKwlpZiAoc2R2b19wcml2 LT5ieV9pbnB1dF93aXJpbmcgJiAoU0RWT0JfSU4wIHwgU0RWT0NfSU4wKSkgeworCQlzd2l0Y2gg KHNkdm9fcHJpdi0+YWN0aXZlX2RldmljZSkgeworCQljYXNlIFNEVk9fREVWSUNFX0xWRFM6CisJ CQlkd0Rldk1hc2sgPSBTRFZPX09VVFBVVF9MVkRTMCB8IFNEVk9fT1VUUFVUX0xWRFMxOworCQkJ YnJlYWs7CisJCWNhc2UgU0RWT19ERVZJQ0VfVE1EUzoKKwkJCWR3RGV2TWFzayA9IFNEVk9fT1VU UFVUX1RNRFMwIHwgU0RWT19PVVRQVVRfVE1EUzE7CisJCQlicmVhazsKKwkJY2FzZSBTRFZPX0RF VklDRV9UVjoKKwkJCWR3RGV2TWFzayA9CisJCQlTRFZPX09VVFBVVF9ZUFJQQjAgfCBTRFZPX09V VFBVVF9TVklEMCB8CisJCQlTRFZPX09VVFBVVF9DVkJTMCB8IFNEVk9fT1VUUFVUX1lQUlBCMSB8 CisJCQlTRFZPX09VVFBVVF9TVklEMSB8IFNEVk9fT1VUUFVUX0NWQlMxIHwKKwkJCVNEVk9fT1VU UFVUX1NDQVJUMCB8IFNEVk9fT1VUUFVUX1NDQVJUMTsKKwkJCWJyZWFrOworCQljYXNlIFNEVk9f REVWSUNFX0NSVDoKKwkJCWR3RGV2TWFzayA9IFNEVk9fT1VUUFVUX1JHQjAgfCBTRFZPX09VVFBV VF9SR0IxOworCQkJYnJlYWs7CisJCX0KKwkJZHdDdXJyZW50U0RWT0luMCA9IChzZHZvX3ByaXYt PmFjdGl2ZV9vdXRwdXRzICYgZHdEZXZNYXNrKTsKKwl9IGVsc2UgaWYgKHNkdm9fcHJpdi0+Ynlf aW5wdXRfd2lyaW5nICYgKFNEVk9CX0lOMSB8IFNEVk9DX0lOMSkpIHsKKwkJc3dpdGNoIChzZHZv X3ByaXYtPmFjdGl2ZV9kZXZpY2UpIHsKKwkJY2FzZSBTRFZPX0RFVklDRV9MVkRTOgorCQkJZHdE ZXZNYXNrID0gU0RWT19PVVRQVVRfTFZEUzAgfCBTRFZPX09VVFBVVF9MVkRTMTsKKwkJCWJyZWFr OworCQljYXNlIFNEVk9fREVWSUNFX1RNRFM6CisJCQlkd0Rldk1hc2sgPSBTRFZPX09VVFBVVF9U TURTMCB8IFNEVk9fT1VUUFVUX1RNRFMxOworCQkJYnJlYWs7CisJCWNhc2UgU0RWT19ERVZJQ0Vf VFY6CisJCQlkd0Rldk1hc2sgPQorCQkJU0RWT19PVVRQVVRfWVBSUEIwIHwgU0RWT19PVVRQVVRf U1ZJRDAgfAorCQkJU0RWT19PVVRQVVRfQ1ZCUzAgfCBTRFZPX09VVFBVVF9ZUFJQQjEgfAorCQkJ U0RWT19PVVRQVVRfU1ZJRDEgfCBTRFZPX09VVFBVVF9DVkJTMSB8CisJCQlTRFZPX09VVFBVVF9T Q0FSVDAgfCBTRFZPX09VVFBVVF9TQ0FSVDE7CisJCQlicmVhazsKKwkJY2FzZSBTRFZPX0RFVklD RV9DUlQ6CisJCQlkd0Rldk1hc2sgPSBTRFZPX09VVFBVVF9SR0IwIHwgU0RWT19PVVRQVVRfUkdC MTsKKwkJCWJyZWFrOworCQl9CisJCWR3Q3VycmVudFNEVk9JbjEgPSAoc2R2b19wcml2LT5hY3Rp dmVfb3V0cHV0cyAmIGR3RGV2TWFzayk7CisJfQorCisJcHNiX3Nkdm9fc2V0X2N1cnJlbnRfaW5v dXRtYXAob3V0cHV0LCBkd0N1cnJlbnRTRFZPSW4wLAorCQkJCQkgIGR3Q3VycmVudFNEVk9JbjEp OworfQorCisKK3N0YXRpYyBib29sIHBzYl9pbnRlbF9zZHZvX21vZGVfZml4dXAoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs CisJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwkvKiBN YWtlIHRoZSBDUlRDIGNvZGUgZmFjdG9yIGluIHRoZSBTRFZPIHBpeGVsIG11bHRpcGxpZXIuICBU aGUgU0RWTworCSAqIGRldmljZSB3aWxsIGJlIHRvbGQgb2YgdGhlIG11bHRpcGxpZXIgZHVyaW5n IG1vZGVfc2V0LgorCSAqLworCWFkanVzdGVkX21vZGUtPmNsb2NrICo9IHBzYl9pbnRlbF9zZHZv X2dldF9waXhlbF9tdWx0aXBsaWVyKG1vZGUpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg dm9pZCBwc2JfaW50ZWxfc2R2b19tb2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIs CisJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVu Y29kZXItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGMgPSBlbmNvZGVyLT5jcnRjOworCXN0 cnVjdCBwc2JfaW50ZWxfY3J0YyAqcHNiX2ludGVsX2NydGMgPSB0b19wc2JfaW50ZWxfY3J0Yyhj cnRjKTsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJCQkJ CWVuY190b19wc2JfaW50ZWxfb3V0cHV0KGVuY29kZXIpOworCXN0cnVjdCBwc2JfaW50ZWxfc2R2 b19wcml2ICpzZHZvX3ByaXYgPSBwc2JfaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwl1MTYgd2lk dGgsIGhlaWdodDsKKwl1MTYgaF9ibGFua19sZW4sIGhfc3luY19sZW4sIHZfYmxhbmtfbGVuLCB2 X3N5bmNfbGVuOworCXUxNiBoX3N5bmNfb2Zmc2V0LCB2X3N5bmNfb2Zmc2V0OworCXUzMiBzZHZv eDsKKwlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fZHRkIG91dHB1dF9kdGQ7CisJaW50IHNkdm9fcGl4 ZWxfbXVsdGlwbHk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybjsKKworCXBzYl9pbnRlbF9zZHZv X3NldF90YXJnZXRfb3V0cHV0KHBzYl9pbnRlbF9vdXRwdXQsIDApOworCisJd2lkdGggPSBtb2Rl LT5jcnRjX2hkaXNwbGF5OworCWhlaWdodCA9IG1vZGUtPmNydGNfdmRpc3BsYXk7CisKKwkvKiBk byBzb21lIG1vZGUgdHJhbnNsYXRpb25zICovCisJaF9ibGFua19sZW4gPSBtb2RlLT5jcnRjX2hi bGFua19lbmQgLSBtb2RlLT5jcnRjX2hibGFua19zdGFydDsKKwloX3N5bmNfbGVuID0gbW9kZS0+ Y3J0Y19oc3luY19lbmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCisJdl9ibGFua19sZW4g PSBtb2RlLT5jcnRjX3ZibGFua19lbmQgLSBtb2RlLT5jcnRjX3ZibGFua19zdGFydDsKKwl2X3N5 bmNfbGVuID0gbW9kZS0+Y3J0Y192c3luY19lbmQgLSBtb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0Owor CisJaF9zeW5jX29mZnNldCA9IG1vZGUtPmNydGNfaHN5bmNfc3RhcnQgLSBtb2RlLT5jcnRjX2hi bGFua19zdGFydDsKKwl2X3N5bmNfb2Zmc2V0ID0gbW9kZS0+Y3J0Y192c3luY19zdGFydCAtIG1v ZGUtPmNydGNfdmJsYW5rX3N0YXJ0OworCisJb3V0cHV0X2R0ZC5wYXJ0MS5jbG9jayA9IG1vZGUt PmNsb2NrIC8gMTA7CisJb3V0cHV0X2R0ZC5wYXJ0MS5oX2FjdGl2ZSA9IHdpZHRoICYgMHhmZjsK KwlvdXRwdXRfZHRkLnBhcnQxLmhfYmxhbmsgPSBoX2JsYW5rX2xlbiAmIDB4ZmY7CisJb3V0cHV0 X2R0ZC5wYXJ0MS5oX2hpZ2ggPSAoKCh3aWR0aCA+PiA4KSAmIDB4ZikgPDwgNCkgfAorCSAgICAo KGhfYmxhbmtfbGVuID4+IDgpICYgMHhmKTsKKwlvdXRwdXRfZHRkLnBhcnQxLnZfYWN0aXZlID0g aGVpZ2h0ICYgMHhmZjsKKwlvdXRwdXRfZHRkLnBhcnQxLnZfYmxhbmsgPSB2X2JsYW5rX2xlbiAm IDB4ZmY7CisJb3V0cHV0X2R0ZC5wYXJ0MS52X2hpZ2ggPSAoKChoZWlnaHQgPj4gOCkgJiAweGYp IDw8IDQpIHwKKwkgICAgKCh2X2JsYW5rX2xlbiA+PiA4KSAmIDB4Zik7CisKKwlvdXRwdXRfZHRk LnBhcnQyLmhfc3luY19vZmYgPSBoX3N5bmNfb2Zmc2V0OworCW91dHB1dF9kdGQucGFydDIuaF9z eW5jX3dpZHRoID0gaF9zeW5jX2xlbiAmIDB4ZmY7CisJb3V0cHV0X2R0ZC5wYXJ0Mi52X3N5bmNf b2ZmX3dpZHRoID0gKHZfc3luY19vZmZzZXQgJiAweGYpIDw8IDQgfAorCSAgICAodl9zeW5jX2xl biAmIDB4Zik7CisJb3V0cHV0X2R0ZC5wYXJ0Mi5zeW5jX29mZl93aWR0aF9oaWdoID0KKwkgICAg KChoX3N5bmNfb2Zmc2V0ICYgMHgzMDApID4+IDIpIHwgKChoX3N5bmNfbGVuICYgMHgzMDApID4+ IDQpIHwKKwkgICAgKCh2X3N5bmNfb2Zmc2V0ICYgMHgzMCkgPj4gMikgfCAoKHZfc3luY19sZW4g JiAweDMwKSA+PiA0KTsKKworCW91dHB1dF9kdGQucGFydDIuZHRkX2ZsYWdzID0gMHgxODsKKwlp ZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX1BIU1lOQykKKwkJb3V0cHV0X2R0ZC5wYXJ0 Mi5kdGRfZmxhZ3MgfD0gMHgyOworCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZT WU5DKQorCQlvdXRwdXRfZHRkLnBhcnQyLmR0ZF9mbGFncyB8PSAweDQ7CisKKwlvdXRwdXRfZHRk LnBhcnQyLnNkdm9fZmxhZ3MgPSAwOworCW91dHB1dF9kdGQucGFydDIudl9zeW5jX29mZl9oaWdo ID0gdl9zeW5jX29mZnNldCAmIDB4YzA7CisJb3V0cHV0X2R0ZC5wYXJ0Mi5yZXNlcnZlZCA9IDA7 CisKKwkvKiBTZXQgdGhlIG91dHB1dCB0aW1pbmcgdG8gdGhlIHNjcmVlbiAqLworCXBzYl9pbnRl bF9zZHZvX3NldF90YXJnZXRfb3V0cHV0KHBzYl9pbnRlbF9vdXRwdXQsCisJCQkJICAgICBzZHZv X3ByaXYtPmFjdGl2ZV9vdXRwdXRzKTsKKworCS8qIFNldCB0aGUgaW5wdXQgdGltaW5nIHRvIHRo ZSBzY3JlZW4uIEFzc3VtZSBhbHdheXMgaW5wdXQgMC4gKi8KKwlwc2JfaW50ZWxfc2R2b19zZXRf dGFyZ2V0X2lucHV0KHBzYl9pbnRlbF9vdXRwdXQsIHRydWUsIGZhbHNlKTsKKworCXBzYl9pbnRl bF9zZHZvX3NldF9vdXRwdXRfdGltaW5nKHBzYl9pbnRlbF9vdXRwdXQsICZvdXRwdXRfZHRkKTsK KworCS8qIFdlIHdvdWxkIGxpa2UgdG8gdXNlIGk4MzBfc2R2b19jcmVhdGVfcHJlZmVycmVkX2lu cHV0X3RpbWluZygpIHRvCisJICogcHJvdmlkZSB0aGUgZGV2aWNlIHdpdGggYSB0aW1pbmcgaXQg Y2FuIHN1cHBvcnQsIGlmIGl0IHN1cHBvcnRzIHRoYXQKKwkgKiBmZWF0dXJlLiAgSG93ZXZlciwg cHJlc3VtYWJseSB3ZSB3b3VsZCBuZWVkIHRvIGFkanVzdCB0aGUgQ1JUQyB0bworCSAqIG91dHB1 dCB0aGUgcHJlZmVycmVkIHRpbWluZywgYW5kIHdlIGRvbid0IHN1cHBvcnQgdGhhdCBjdXJyZW50 bHkuCisJICovCisJcHNiX2ludGVsX3Nkdm9fc2V0X2lucHV0X3RpbWluZyhwc2JfaW50ZWxfb3V0 cHV0LCAmb3V0cHV0X2R0ZCk7CisKKwlzd2l0Y2ggKHBzYl9pbnRlbF9zZHZvX2dldF9waXhlbF9t dWx0aXBsaWVyKG1vZGUpKSB7CisJY2FzZSAxOgorCQlwc2JfaW50ZWxfc2R2b19zZXRfY2xvY2tf cmF0ZV9tdWx0KHBzYl9pbnRlbF9vdXRwdXQsCisJCQkJCSAgICAgICBTRFZPX0NMT0NLX1JBVEVf TVVMVF8xWCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHNiX2ludGVsX3Nkdm9fc2V0X2Nsb2Nr X3JhdGVfbXVsdChwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgICAgU0RWT19DTE9DS19SQVRF X01VTFRfMlgpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXBzYl9pbnRlbF9zZHZvX3NldF9jbG9j a19yYXRlX211bHQocHNiX2ludGVsX291dHB1dCwKKwkJCQkJICAgICAgIFNEVk9fQ0xPQ0tfUkFU RV9NVUxUXzRYKTsKKwkJYnJlYWs7CisJfQorCisJLyogU2V0IHRoZSBTRFZPIGNvbnRyb2wgcmVn cy4gKi8KKwlzZHZveCA9IFJFR19SRUFEKHNkdm9fcHJpdi0+b3V0cHV0X2RldmljZSk7CisJc3dp dGNoIChzZHZvX3ByaXYtPm91dHB1dF9kZXZpY2UpIHsKKwljYXNlIFNEVk9COgorCQlzZHZveCAm PSBTRFZPQl9QUkVTRVJWRV9NQVNLOworCQlicmVhazsKKwljYXNlIFNEVk9DOgorCQlzZHZveCAm PSBTRFZPQ19QUkVTRVJWRV9NQVNLOworCQlicmVhazsKKwl9CisJc2R2b3ggfD0gKDkgPDwgMTkp IHwgU0RWT19CT1JERVJfRU5BQkxFOworCWlmIChwc2JfaW50ZWxfY3J0Yy0+cGlwZSA9PSAxKQor CQlzZHZveCB8PSBTRFZPX1BJUEVfQl9TRUxFQ1Q7CisKKwlzZHZvX3BpeGVsX211bHRpcGx5ID0g cHNiX2ludGVsX3Nkdm9fZ2V0X3BpeGVsX211bHRpcGxpZXIobW9kZSk7CisKKwlwc2JfaW50ZWxf c2R2b193cml0ZV9zZHZveChwc2JfaW50ZWxfb3V0cHV0LCBzZHZveCk7CisKKwkgcHNiX2ludGVs X3Nkdm9fc2V0X2lvbWFwKHBzYl9pbnRlbF9vdXRwdXQpOworfQorCitzdGF0aWMgdm9pZCBwc2Jf aW50ZWxfc2R2b19kcG1zKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IG1vZGUpCit7 CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKKwlzdHJ1Y3QgcHNiX2lu dGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJCQkJCWVuY190b19wc2JfaW50ZWxfb3V0 cHV0KGVuY29kZXIpOworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBw c2JfaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwl1MzIgdGVtcDsKKworCWlmIChtb2RlICE9IERS TV9NT0RFX0RQTVNfT04pIHsKKwkJcHNiX2ludGVsX3Nkdm9fc2V0X2FjdGl2ZV9vdXRwdXRzKHBz Yl9pbnRlbF9vdXRwdXQsIDApOworCQlpZiAoMCkKKwkJCXBzYl9pbnRlbF9zZHZvX3NldF9lbmNv ZGVyX3Bvd2VyX3N0YXRlKAorCQkJCQkJCXBzYl9pbnRlbF9vdXRwdXQsCisJCQkJCQkJbW9kZSk7 CisKKwkJaWYgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PRkYpIHsKKwkJCXRlbXAgPSBSRUdfUkVB RChzZHZvX3ByaXYtPm91dHB1dF9kZXZpY2UpOworCQkJaWYgKCh0ZW1wICYgU0RWT19FTkFCTEUp ICE9IDApIHsKKwkJCQlwc2JfaW50ZWxfc2R2b193cml0ZV9zZHZveChwc2JfaW50ZWxfb3V0cHV0 LAorCQkJCQkJICAgICAgIHRlbXAgJgorCQkJCQkJICAgICAgIH5TRFZPX0VOQUJMRSk7CisJCQl9 CisJCX0KKwl9IGVsc2UgeworCQlib29sIGlucHV0MSwgaW5wdXQyOworCQlpbnQgaTsKKwkJdTgg c3RhdHVzOworCisJCXRlbXAgPSBSRUdfUkVBRChzZHZvX3ByaXYtPm91dHB1dF9kZXZpY2UpOwor CQlpZiAoKHRlbXAgJiBTRFZPX0VOQUJMRSkgPT0gMCkKKwkJCXBzYl9pbnRlbF9zZHZvX3dyaXRl X3Nkdm94KHBzYl9pbnRlbF9vdXRwdXQsCisJCQkJCSAgICAgICB0ZW1wIHwgU0RWT19FTkFCTEUp OworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQkJcHNiX2ludGVsX3dhaXRfZm9yX3ZibGFu ayhkZXYpOworCisJCXN0YXR1cyA9CisJCSAgICBwc2JfaW50ZWxfc2R2b19nZXRfdHJhaW5lZF9p bnB1dHMocHNiX2ludGVsX291dHB1dCwKKwkJCQkJCQkmaW5wdXQxLAorCQkJCQkJCSZpbnB1dDIp OworCisKKwkJLyogV2FybiBpZiB0aGUgZGV2aWNlIHJlcG9ydGVkIGZhaWx1cmUgdG8gc3luYy4K KwkJICogQSBsb3Qgb2YgU0RWTyBkZXZpY2VzIGZhaWwgdG8gbm90aWZ5IG9mIHN5bmMsIGJ1dCBp dCdzCisJCSAqIGEgZ2l2ZW4gaXQgdGhlIHN0YXR1cyBpcyBhIHN1Y2Nlc3MsIHdlIHN1Y2NlZWRl ZC4KKwkJICovCisJCWlmIChzdGF0dXMgPT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MgJiYgIWlu cHV0MSkgeworCQkJRFJNX0RFQlVHCisJCQkgICAgKCJGaXJzdCAlcyBvdXRwdXQgcmVwb3J0ZWQg ZmFpbHVyZSB0byBzeW5jXG4iLAorCQkJICAgICBTRFZPX05BTUUoc2R2b19wcml2KSk7CisJCX0K KworCQlpZiAoMCkKKwkJCXBzYl9pbnRlbF9zZHZvX3NldF9lbmNvZGVyX3Bvd2VyX3N0YXRlKAor CQkJCQkJCXBzYl9pbnRlbF9vdXRwdXQsCisJCQkJCQkJbW9kZSk7CisJCXBzYl9pbnRlbF9zZHZv X3NldF9hY3RpdmVfb3V0cHV0cyhwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgICBzZHZvX3By aXYtPmFjdGl2ZV9vdXRwdXRzKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwc2Jf aW50ZWxfc2R2b19zYXZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3Ry dWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBwc2JfaW50ZWxf b3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0KKwkJCQkJdG9fcHNiX2ludGVsX291dHB1dChjb25u ZWN0b3IpOworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXYgPSBwc2JfaW50 ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwkvKmludCBvOyovCisKKwlzZHZvX3ByaXYtPnNhdmVfc2R2 b19tdWx0ID0KKwkgICAgcHNiX2ludGVsX3Nkdm9fZ2V0X2Nsb2NrX3JhdGVfbXVsdChwc2JfaW50 ZWxfb3V0cHV0KTsKKwlwc2JfaW50ZWxfc2R2b19nZXRfYWN0aXZlX291dHB1dHMocHNiX2ludGVs X291dHB1dCwKKwkJCQkgICAgICAmc2R2b19wcml2LT5zYXZlX2FjdGl2ZV9vdXRwdXRzKTsKKwor CWlmIChzZHZvX3ByaXYtPmNhcHMuc2R2b19pbnB1dHNfbWFzayAmIDB4MSkgeworCQlwc2JfaW50 ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KHBzYl9pbnRlbF9vdXRwdXQsCisJCQkJCQl0cnVlLAor CQkJCQkJZmFsc2UpOworCQlwc2JfaW50ZWxfc2R2b19nZXRfaW5wdXRfdGltaW5nKHBzYl9pbnRl bF9vdXRwdXQsCisJCQkJCSAgICAmc2R2b19wcml2LT5zYXZlX2lucHV0X2R0ZF8xKTsKKwl9CisK KwlpZiAoc2R2b19wcml2LT5jYXBzLnNkdm9faW5wdXRzX21hc2sgJiAweDIpIHsKKwkJcHNiX2lu dGVsX3Nkdm9fc2V0X3RhcmdldF9pbnB1dChwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkJZmFsc2Us CisJCQkJCQl0cnVlKTsKKwkJcHNiX2ludGVsX3Nkdm9fZ2V0X2lucHV0X3RpbWluZyhwc2JfaW50 ZWxfb3V0cHV0LAorCQkJCQkgICAgJnNkdm9fcHJpdi0+c2F2ZV9pbnB1dF9kdGRfMik7CisJfQor CXNkdm9fcHJpdi0+c2F2ZV9TRFZPWCA9IFJFR19SRUFEKHNkdm9fcHJpdi0+b3V0cHV0X2Rldmlj ZSk7CisKKwkvKlRPRE86IHNhdmUgdGhlIGluX291dF9tYXAgc3RhdGUqLworfQorCitzdGF0aWMg dm9pZCBwc2JfaW50ZWxfc2R2b19yZXN0b3JlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVj dCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0KKwkJCQkJdG9fcHNiX2ludGVs X291dHB1dChjb25uZWN0b3IpOworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19wcml2ICpzZHZvX3By aXYgPSBwc2JfaW50ZWxfb3V0cHV0LT5kZXZfcHJpdjsKKwkvKmludCBvOyovCisJaW50IGk7CisJ Ym9vbCBpbnB1dDEsIGlucHV0MjsKKwl1OCBzdGF0dXM7CisKKwlwc2JfaW50ZWxfc2R2b19zZXRf YWN0aXZlX291dHB1dHMocHNiX2ludGVsX291dHB1dCwgMCk7CisKKwlpZiAoc2R2b19wcml2LT5j YXBzLnNkdm9faW5wdXRzX21hc2sgJiAweDEpIHsKKwkJcHNiX2ludGVsX3Nkdm9fc2V0X3Rhcmdl dF9pbnB1dChwc2JfaW50ZWxfb3V0cHV0LCB0cnVlLCBmYWxzZSk7CisJCXBzYl9pbnRlbF9zZHZv X3NldF9pbnB1dF90aW1pbmcocHNiX2ludGVsX291dHB1dCwKKwkJCQkJICAgICZzZHZvX3ByaXYt PnNhdmVfaW5wdXRfZHRkXzEpOworCX0KKworCWlmIChzZHZvX3ByaXYtPmNhcHMuc2R2b19pbnB1 dHNfbWFzayAmIDB4MikgeworCQlwc2JfaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KHBzYl9p bnRlbF9vdXRwdXQsIGZhbHNlLCB0cnVlKTsKKwkJcHNiX2ludGVsX3Nkdm9fc2V0X2lucHV0X3Rp bWluZyhwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgJnNkdm9fcHJpdi0+c2F2ZV9pbnB1dF9k dGRfMik7CisJfQorCisJcHNiX2ludGVsX3Nkdm9fc2V0X2Nsb2NrX3JhdGVfbXVsdChwc2JfaW50 ZWxfb3V0cHV0LAorCQkJCSAgICAgICBzZHZvX3ByaXYtPnNhdmVfc2R2b19tdWx0KTsKKworCVJF R19XUklURShzZHZvX3ByaXYtPm91dHB1dF9kZXZpY2UsIHNkdm9fcHJpdi0+c2F2ZV9TRFZPWCk7 CisKKwlpZiAoc2R2b19wcml2LT5zYXZlX1NEVk9YICYgU0RWT19FTkFCTEUpIHsKKwkJZm9yIChp ID0gMDsgaSA8IDI7IGkrKykKKwkJCXBzYl9pbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2KTsKKwkJ c3RhdHVzID0KKwkJICAgIHBzYl9pbnRlbF9zZHZvX2dldF90cmFpbmVkX2lucHV0cyhwc2JfaW50 ZWxfb3V0cHV0LAorCQkJCQkJCSZpbnB1dDEsCisJCQkJCQkJJmlucHV0Mik7CisJCWlmIChzdGF0 dXMgPT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MgJiYgIWlucHV0MSkKKwkJCURSTV9ERUJVRwor CQkJICAgICgiRmlyc3QgJXMgb3V0cHV0IHJlcG9ydGVkIGZhaWx1cmUgdG8gc3luY1xuIiwKKwkJ CSAgICAgU0RWT19OQU1FKHNkdm9fcHJpdikpOworCX0KKworCXBzYl9pbnRlbF9zZHZvX3NldF9h Y3RpdmVfb3V0cHV0cyhwc2JfaW50ZWxfb3V0cHV0LAorCQkJCSAgICAgIHNkdm9fcHJpdi0+c2F2 ZV9hY3RpdmVfb3V0cHV0cyk7CisKKwkvKlRPRE86IHJlc3RvcmUgaW5fb3V0X21hcCovCisJcHNi X2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9pbnRlbF9vdXRwdXQsCisJCQkJIFNEVk9fQ01EX1NF VF9JTl9PVVRfTUFQLAorCQkJCSBzZHZvX3ByaXYtPmluX291dF9tYXAsCisJCQkJIDQpOworCisJ cHNiX2ludGVsX3Nkdm9fcmVhZF9yZXNwb25zZShwc2JfaW50ZWxfb3V0cHV0LCBOVUxMLCAwKTsK K30KKworc3RhdGljIGludCBwc2JfaW50ZWxfc2R2b19tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQor eworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0ID0KKwkJCQl0b19w c2JfaW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisJc3RydWN0IHBzYl9pbnRlbF9zZHZvX3ByaXYg KnNkdm9fcHJpdiA9IHBzYl9pbnRlbF9vdXRwdXQtPmRldl9wcml2OworCisJaWYgKG1vZGUtPmZs YWdzICYgRFJNX01PREVfRkxBR19EQkxTQ0FOKQorCQlyZXR1cm4gTU9ERV9OT19EQkxFU0NBTjsK KworCWlmIChzZHZvX3ByaXYtPnBpeGVsX2Nsb2NrX21pbiA+IG1vZGUtPmNsb2NrKQorCQlyZXR1 cm4gTU9ERV9DTE9DS19MT1c7CisKKwlpZiAoc2R2b19wcml2LT5waXhlbF9jbG9ja19tYXggPCBt b2RlLT5jbG9jaykKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBNT0RFX09L OworfQorCitzdGF0aWMgYm9vbCBwc2JfaW50ZWxfc2R2b19nZXRfY2FwYWJpbGl0aWVzKAorCQkJ CXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0cHV0LAorCQkJCXN0cnVjdCBw c2JfaW50ZWxfc2R2b19jYXBzICpjYXBzKQoreworCXU4IHN0YXR1czsKKworCXBzYl9pbnRlbF9z ZHZvX3dyaXRlX2NtZChwc2JfaW50ZWxfb3V0cHV0LAorCQkJCSBTRFZPX0NNRF9HRVRfREVWSUNF X0NBUFMsCisJCQkJIE5VTEwsCisJCQkJIDApOworCXN0YXR1cyA9IHBzYl9pbnRlbF9zZHZvX3Jl YWRfcmVzcG9uc2UocHNiX2ludGVsX291dHB1dCwKKwkJCQkJCWNhcHMsCisJCQkJCQlzaXplb2Yo KmNhcHMpKTsKKwlpZiAoc3RhdHVzICE9IFNEVk9fQ01EX1NUQVRVU19TVUNDRVNTKQorCQlyZXR1 cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RydWN0IGRybV9jb25uZWN0b3IgKnBz Yl9pbnRlbF9zZHZvX2ZpbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHNkdm9CKQorewor CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBOVUxMOworCXN0cnVjdCBwc2JfaW50 ZWxfb3V0cHV0ICppb3V0ID0gTlVMTDsKKwlzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fcHJpdiAqc2R2 bzsKKworCS8qIGZpbmQgdGhlIHNkdm8gY29ubmVjdG9yICovCisJbGlzdF9mb3JfZWFjaF9lbnRy eShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LAorCQkJICAgIGhl YWQpIHsKKwkJaW91dCA9IHRvX3BzYl9pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCQlpZiAo aW91dC0+dHlwZSAhPSBJTlRFTF9PVVRQVVRfU0RWTykKKwkJCWNvbnRpbnVlOworCisJCXNkdm8g PSBpb3V0LT5kZXZfcHJpdjsKKworCQlpZiAoc2R2by0+b3V0cHV0X2RldmljZSA9PSBTRFZPQiAm JiBzZHZvQikKKwkJCXJldHVybiBjb25uZWN0b3I7CisKKwkJaWYgKHNkdm8tPm91dHB1dF9kZXZp Y2UgPT0gU0RWT0MgJiYgIXNkdm9CKQorCQkJcmV0dXJuIGNvbm5lY3RvcjsKKworCX0KKworCXJl dHVybiBOVUxMOworfQorCitpbnQgcHNiX2ludGVsX3Nkdm9fc3VwcG9ydHNfaG90cGx1ZyhzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXU4IHJlc3BvbnNlWzJdOworCXU4IHN0 YXR1czsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dDsKKworCWlm ICghY29ubmVjdG9yKQorCQlyZXR1cm4gMDsKKworCXBzYl9pbnRlbF9vdXRwdXQgPSB0b19wc2Jf aW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7CisKKwlwc2JfaW50ZWxfc2R2b193cml0ZV9jbWQocHNi X2ludGVsX291dHB1dCwKKwkJCQkgU0RWT19DTURfR0VUX0hPVF9QTFVHX1NVUFBPUlQsCisJCQkJ IE5VTEwsCisJCQkJIDApOworCXN0YXR1cyA9IHBzYl9pbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2Uo cHNiX2ludGVsX291dHB1dCwKKwkJCQkJCSZyZXNwb25zZSwKKwkJCQkJCTIpOworCisJaWYgKHJl c3BvbnNlWzBdICE9IDApCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcHNi X2ludGVsX3Nkdm9fc2V0X2hvdHBsdWcoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwg aW50IG9uKQoreworCXU4IHJlc3BvbnNlWzJdOworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgcHNiX2lu dGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJCQkJCXRvX3BzYl9pbnRlbF9vdXRwdXQo Y29ubmVjdG9yKTsKKworCXBzYl9pbnRlbF9zZHZvX3dyaXRlX2NtZChwc2JfaW50ZWxfb3V0cHV0 LAorCQkJCSBTRFZPX0NNRF9HRVRfQUNUSVZFX0hPVF9QTFVHLAorCQkJCSBOVUxMLAorCQkJCSAw KTsKKwlwc2JfaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKHBzYl9pbnRlbF9vdXRwdXQsICZyZXNw b25zZSwgMik7CisKKwlpZiAob24pIHsKKwkJcHNiX2ludGVsX3Nkdm9fd3JpdGVfY21kKHBzYl9p bnRlbF9vdXRwdXQsCisJCQkJICAgICBTRFZPX0NNRF9HRVRfSE9UX1BMVUdfU1VQUE9SVCwgTlVM TCwKKwkJCQkgICAgIDApOworCQlzdGF0dXMgPSBwc2JfaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNl KHBzYl9pbnRlbF9vdXRwdXQsCisJCQkJCQkgICAgICAmcmVzcG9uc2UsCisJCQkJCQkgICAgICAy KTsKKworCQlwc2JfaW50ZWxfc2R2b193cml0ZV9jbWQocHNiX2ludGVsX291dHB1dCwKKwkJCQkg ICAgIFNEVk9fQ01EX1NFVF9BQ1RJVkVfSE9UX1BMVUcsCisJCQkJICAgICAmcmVzcG9uc2UsIDIp OworCX0gZWxzZSB7CisJCXJlc3BvbnNlWzBdID0gMDsKKwkJcmVzcG9uc2VbMV0gPSAwOworCQlw c2JfaW50ZWxfc2R2b193cml0ZV9jbWQocHNiX2ludGVsX291dHB1dCwKKwkJCQkgICAgIFNEVk9f Q01EX1NFVF9BQ1RJVkVfSE9UX1BMVUcsCisJCQkJICAgICAmcmVzcG9uc2UsIDIpOworCX0KKwor CXBzYl9pbnRlbF9zZHZvX3dyaXRlX2NtZChwc2JfaW50ZWxfb3V0cHV0LAorCQkJCSBTRFZPX0NN RF9HRVRfQUNUSVZFX0hPVF9QTFVHLAorCQkJCSBOVUxMLAorCQkJCSAwKTsKKwlwc2JfaW50ZWxf c2R2b19yZWFkX3Jlc3BvbnNlKHBzYl9pbnRlbF9vdXRwdXQsICZyZXNwb25zZSwgMik7Cit9CisK K3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHBzYl9pbnRlbF9zZHZvX2RldGVjdChz dHJ1Y3QgZHJtX2Nvbm5lY3RvcgorCQkJCQkJICAgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sK Kwl1OCByZXNwb25zZVsyXTsKKwl1OCBzdGF0dXM7CisJc3RydWN0IHBzYl9pbnRlbF9vdXRwdXQg KnBzYl9pbnRlbF9vdXRwdXQgPQorCQkJCQl0b19wc2JfaW50ZWxfb3V0cHV0KGNvbm5lY3Rvcik7 CisKKwlwc2JfaW50ZWxfc2R2b193cml0ZV9jbWQocHNiX2ludGVsX291dHB1dCwKKwkJCQkgU0RW T19DTURfR0VUX0FUVEFDSEVEX0RJU1BMQVlTLAorCQkJCSBOVUxMLAorCQkJCSAwKTsKKwlzdGF0 dXMgPSBwc2JfaW50ZWxfc2R2b19yZWFkX3Jlc3BvbnNlKHBzYl9pbnRlbF9vdXRwdXQsICZyZXNw b25zZSwgMik7CisKKwlEUk1fREVCVUcoIlNEVk8gcmVzcG9uc2UgJWQgJWRcbiIsIHJlc3BvbnNl WzBdLCByZXNwb25zZVsxXSk7CisJaWYgKChyZXNwb25zZVswXSAhPSAwKSB8fCAocmVzcG9uc2Vb MV0gIT0gMCkpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwllbHNlCisJ CXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIGludCBw c2JfaW50ZWxfc2R2b19nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikK K3sKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dCA9CisJCQkJCXRv X3BzYl9pbnRlbF9vdXRwdXQoY29ubmVjdG9yKTsKKworCS8qIHNldCB0aGUgYnVzIHN3aXRjaCBh bmQgZ2V0IHRoZSBtb2RlcyAqLworCXBzYl9pbnRlbF9zZHZvX3NldF9jb250cm9sX2J1c19zd2l0 Y2gocHNiX2ludGVsX291dHB1dCwKKwkJCQkJICBTRFZPX0NPTlRST0xfQlVTX0REQzIpOworCXBz Yl9pbnRlbF9kZGNfZ2V0X21vZGVzKHBzYl9pbnRlbF9vdXRwdXQpOworCisJaWYgKGxpc3RfZW1w dHkoJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyB2b2lkIHBzYl9pbnRlbF9zZHZvX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291 dHB1dCA9CisJCQkJdG9fcHNiX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCisJaWYgKHBzYl9p bnRlbF9vdXRwdXQtPmkyY19idXMpCisJCXBzYl9pbnRlbF9pMmNfZGVzdHJveShwc2JfaW50ZWxf b3V0cHV0LT5pMmNfYnVzKTsKKwlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3Ip OworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtmcmVlKHBzYl9pbnRlbF9v dXRwdXQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5j cyBwc2JfaW50ZWxfc2R2b19oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBwc2JfaW50ZWxfc2R2 b19kcG1zLAorCS5tb2RlX2ZpeHVwID0gcHNiX2ludGVsX3Nkdm9fbW9kZV9maXh1cCwKKwkucHJl cGFyZSA9IHBzYl9pbnRlbF9lbmNvZGVyX3ByZXBhcmUsCisJLm1vZGVfc2V0ID0gcHNiX2ludGVs X3Nkdm9fbW9kZV9zZXQsCisJLmNvbW1pdCA9IHBzYl9pbnRlbF9lbmNvZGVyX2NvbW1pdCwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyBwc2JfaW50ZWxfc2R2 b19jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMgPSBkcm1faGVscGVyX2Nvbm5lY3Rvcl9kcG1z LAorCS5zYXZlID0gcHNiX2ludGVsX3Nkdm9fc2F2ZSwKKwkucmVzdG9yZSA9IHBzYl9pbnRlbF9z ZHZvX3Jlc3RvcmUsCisJLmRldGVjdCA9IHBzYl9pbnRlbF9zZHZvX2RldGVjdCwKKwkuZmlsbF9t b2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJv eSA9IHBzYl9pbnRlbF9zZHZvX2Rlc3Ryb3ksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJCQkJcHNiX2ludGVsX3Nkdm9fY29ubmVjdG9yX2hl bHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gcHNiX2ludGVsX3Nkdm9fZ2V0X21vZGVzLAor CS5tb2RlX3ZhbGlkID0gcHNiX2ludGVsX3Nkdm9fbW9kZV92YWxpZCwKKwkuYmVzdF9lbmNvZGVy ID0gcHNiX2ludGVsX2Jlc3RfZW5jb2RlciwKK307CisKK3ZvaWQgcHNiX2ludGVsX3Nkdm9fZW5j X2Rlc3Ryb3koc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCWRybV9lbmNvZGVyX2Ns ZWFudXAoZW5jb2Rlcik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVu Y3MgcHNiX2ludGVsX3Nkdm9fZW5jX2Z1bmNzID0geworCS5kZXN0cm95ID0gcHNiX2ludGVsX3Nk dm9fZW5jX2Rlc3Ryb3ksCit9OworCisKK3ZvaWQgcHNiX2ludGVsX3Nkdm9faW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQgb3V0cHV0X2RldmljZSkKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5l Y3RvciAqY29ubmVjdG9yOworCXN0cnVjdCBwc2JfaW50ZWxfb3V0cHV0ICpwc2JfaW50ZWxfb3V0 cHV0OworCXN0cnVjdCBwc2JfaW50ZWxfc2R2b19wcml2ICpzZHZvX3ByaXY7CisJc3RydWN0IHBz Yl9pbnRlbF9pMmNfY2hhbiAqaTJjYnVzID0gTlVMTDsKKwlpbnQgY29ubmVjdG9yX3R5cGU7CisJ dTggY2hbMHg0MF07CisJaW50IGk7CisJaW50IGVuY29kZXJfdHlwZSwgb3V0cHV0X2lkOworCisJ cHNiX2ludGVsX291dHB1dCA9CisJICAgIGtjYWxsb2Moc2l6ZW9mKHN0cnVjdCBwc2JfaW50ZWxf b3V0cHV0KSArCisJCSAgICBzaXplb2Yoc3RydWN0IHBzYl9pbnRlbF9zZHZvX3ByaXYpLCAxLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXBzYl9pbnRlbF9vdXRwdXQpCisJCXJldHVybjsKKworCWNvbm5l Y3RvciA9ICZwc2JfaW50ZWxfb3V0cHV0LT5iYXNlOworCisJZHJtX2Nvbm5lY3Rvcl9pbml0KGRl diwgY29ubmVjdG9yLCAmcHNiX2ludGVsX3Nkdm9fY29ubmVjdG9yX2Z1bmNzLAorCQkJICAgRFJN X01PREVfQ09OTkVDVE9SX1Vua25vd24pOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25u ZWN0b3IsCisJCQkJICZwc2JfaW50ZWxfc2R2b19jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlz ZHZvX3ByaXYgPSAoc3RydWN0IHBzYl9pbnRlbF9zZHZvX3ByaXYgKikgKHBzYl9pbnRlbF9vdXRw dXQgKyAxKTsKKwlwc2JfaW50ZWxfb3V0cHV0LT50eXBlID0gSU5URUxfT1VUUFVUX1NEVk87CisK Kwljb25uZWN0b3ItPmludGVybGFjZV9hbGxvd2VkID0gMDsKKwljb25uZWN0b3ItPmRvdWJsZXNj YW5fYWxsb3dlZCA9IDA7CisKKwkvKiBzZXR1cCB0aGUgRERDIGJ1cy4gKi8KKwlpZiAob3V0cHV0 X2RldmljZSA9PSBTRFZPQikKKwkJaTJjYnVzID0KKwkJICAgIHBzYl9pbnRlbF9pMmNfY3JlYXRl KGRldiwgR1BJT0UsICJTRFZPQ1RSTF9FIGZvciBTRFZPQiIpOworCWVsc2UKKwkJaTJjYnVzID0K KwkJICAgIHBzYl9pbnRlbF9pMmNfY3JlYXRlKGRldiwgR1BJT0UsICJTRFZPQ1RSTF9FIGZvciBT RFZPQyIpOworCisJaWYgKCFpMmNidXMpCisJCWdvdG8gZXJyX2Nvbm5lY3RvcjsKKworCXNkdm9f cHJpdi0+aTJjX2J1cyA9IGkyY2J1czsKKworCWlmIChvdXRwdXRfZGV2aWNlID09IFNEVk9CKSB7 CisJCW91dHB1dF9pZCA9IDE7CisJCXNkdm9fcHJpdi0+YnlfaW5wdXRfd2lyaW5nID0gU0RWT0Jf SU4wOworCQlzZHZvX3ByaXYtPmkyY19idXMtPnNsYXZlX2FkZHIgPSAweDM4OworCX0gZWxzZSB7 CisJCW91dHB1dF9pZCA9IDI7CisJCXNkdm9fcHJpdi0+aTJjX2J1cy0+c2xhdmVfYWRkciA9IDB4 Mzk7CisJfQorCisJc2R2b19wcml2LT5vdXRwdXRfZGV2aWNlID0gb3V0cHV0X2RldmljZTsKKwlw c2JfaW50ZWxfb3V0cHV0LT5pMmNfYnVzID0gaTJjYnVzOworCXBzYl9pbnRlbF9vdXRwdXQtPmRl dl9wcml2ID0gc2R2b19wcml2OworCisKKwkvKiBSZWFkIHRoZSByZWdzIHRvIHRlc3QgaWYgd2Ug Y2FuIHRhbGsgdG8gdGhlIGRldmljZSAqLworCWZvciAoaSA9IDA7IGkgPCAweDQwOyBpKyspIHsK KwkJaWYgKCFwc2JfaW50ZWxfc2R2b19yZWFkX2J5dGUocHNiX2ludGVsX291dHB1dCwgaSwgJmNo W2ldKSkgeworCQkJZGV2X2RiZyhkZXYtPmRldiwgIk5vIFNEVk8gZGV2aWNlIGZvdW5kIG9uIFNE Vk8lY1xuIiwKKwkJCQkgIG91dHB1dF9kZXZpY2UgPT0gU0RWT0IgPyAnQicgOiAnQycpOworCQkJ Z290byBlcnJfaTJjOworCQl9CisJfQorCisJcHNiX2ludGVsX3Nkdm9fZ2V0X2NhcGFiaWxpdGll cyhwc2JfaW50ZWxfb3V0cHV0LCAmc2R2b19wcml2LT5jYXBzKTsKKworCW1lbXNldCgmc2R2b19w cml2LT5hY3RpdmVfb3V0cHV0cywgMCwKKwkgICAgICAgc2l6ZW9mKHNkdm9fcHJpdi0+YWN0aXZl X291dHB1dHMpKTsKKworCS8qIFRPRE8sIENWQlMsIFNWSUQsIFlQUlBCICYgU0NBUlQgb3V0cHV0 cy4gKi8KKwlpZiAoc2R2b19wcml2LT5jYXBzLm91dHB1dF9mbGFncyAmIFNEVk9fT1VUUFVUX1JH QjApIHsKKwkJc2R2b19wcml2LT5hY3RpdmVfb3V0cHV0cyA9IFNEVk9fT1VUUFVUX1JHQjA7CisJ CXNkdm9fcHJpdi0+YWN0aXZlX2RldmljZSA9IFNEVk9fREVWSUNFX0NSVDsKKwkJY29ubmVjdG9y LT5kaXNwbGF5X2luZm8uc3VicGl4ZWxfb3JkZXIgPQorCQkgICAgU3ViUGl4ZWxIb3Jpem9udGFs UkdCOworCQllbmNvZGVyX3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX0RBQzsKKwkJY29ubmVjdG9y X3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOworCX0gZWxzZSBpZiAoc2R2b19wcml2LT5j YXBzLm91dHB1dF9mbGFncyAmIFNEVk9fT1VUUFVUX1JHQjEpIHsKKwkJc2R2b19wcml2LT5hY3Rp dmVfb3V0cHV0cyA9IFNEVk9fT1VUUFVUX1JHQjE7CisJCXNkdm9fcHJpdi0+YWN0aXZlX291dHB1 dHMgPSBTRFZPX0RFVklDRV9DUlQ7CisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVs X29yZGVyID0KKwkJICAgIFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKKwkJZW5jb2Rlcl90eXBlID0g RFJNX01PREVfRU5DT0RFUl9EQUM7CisJCWNvbm5lY3Rvcl90eXBlID0gRFJNX01PREVfQ09OTkVD VE9SX1ZHQTsKKwl9IGVsc2UgaWYgKHNkdm9fcHJpdi0+Y2Fwcy5vdXRwdXRfZmxhZ3MgJiBTRFZP X09VVFBVVF9UTURTMCkgeworCQlzZHZvX3ByaXYtPmFjdGl2ZV9vdXRwdXRzID0gU0RWT19PVVRQ VVRfVE1EUzA7CisJCXNkdm9fcHJpdi0+YWN0aXZlX2RldmljZSA9IFNEVk9fREVWSUNFX1RNRFM7 CisJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnN1YnBpeGVsX29yZGVyID0KKwkJICAgIFN1YlBp eGVsSG9yaXpvbnRhbFJHQjsKKwkJZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9UTURT OworCQljb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOworCX0gZWxzZSBp ZiAoc2R2b19wcml2LT5jYXBzLm91dHB1dF9mbGFncyAmIFNEVk9fT1VUUFVUX1RNRFMxKSB7CisJ CXNkdm9fcHJpdi0+YWN0aXZlX291dHB1dHMgPSBTRFZPX09VVFBVVF9UTURTMTsKKwkJc2R2b19w cml2LT5hY3RpdmVfZGV2aWNlID0gU0RWT19ERVZJQ0VfVE1EUzsKKwkJY29ubmVjdG9yLT5kaXNw bGF5X2luZm8uc3VicGl4ZWxfb3JkZXIgPQorCQkgICAgU3ViUGl4ZWxIb3Jpem9udGFsUkdCOwor CQllbmNvZGVyX3R5cGUgPSBEUk1fTU9ERV9FTkNPREVSX1RNRFM7CisJCWNvbm5lY3Rvcl90eXBl ID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBi eXRlc1syXTsKKworCQltZW1jcHkoYnl0ZXMsICZzZHZvX3ByaXYtPmNhcHMub3V0cHV0X2ZsYWdz LCAyKTsKKwkJZGV2X2RiZyhkZXYtPmRldiwgIiVzOiBObyBhY3RpdmUgUkdCIG9yIFRNRFMgb3V0 cHV0cyAoMHglMDJ4JTAyeClcbiIsCisJCSAgICAgU0RWT19OQU1FKHNkdm9fcHJpdiksIGJ5dGVz WzBdLCBieXRlc1sxXSk7CisJCWdvdG8gZXJyX2kyYzsKKwl9CisKKwlkcm1fZW5jb2Rlcl9pbml0 KGRldiwgJnBzYl9pbnRlbF9vdXRwdXQtPmVuYywgJnBzYl9pbnRlbF9zZHZvX2VuY19mdW5jcywK KwkJCSBlbmNvZGVyX3R5cGUpOworCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoJnBzYl9pbnRlbF9v dXRwdXQtPmVuYywKKwkJCSAgICAgICAmcHNiX2ludGVsX3Nkdm9faGVscGVyX2Z1bmNzKTsKKwlj b25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID0gY29ubmVjdG9yX3R5cGU7CisKKwlkcm1fbW9kZV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJnBzYl9pbnRlbF9vdXRwdXQtPmJhc2UsCisJCQkJCSAg JnBzYl9pbnRlbF9vdXRwdXQtPmVuYyk7CisJZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVj dG9yKTsKKworCS8qIFNldCB0aGUgaW5wdXQgdGltaW5nIHRvIHRoZSBzY3JlZW4uIEFzc3VtZSBh bHdheXMgaW5wdXQgMC4gKi8KKwlwc2JfaW50ZWxfc2R2b19zZXRfdGFyZ2V0X2lucHV0KHBzYl9p bnRlbF9vdXRwdXQsIHRydWUsIGZhbHNlKTsKKworCXBzYl9pbnRlbF9zZHZvX2dldF9pbnB1dF9w aXhlbF9jbG9ja19yYW5nZShwc2JfaW50ZWxfb3V0cHV0LAorCQkJCQkgICAgICAgJnNkdm9fcHJp di0+cGl4ZWxfY2xvY2tfbWluLAorCQkJCQkgICAgICAgJnNkdm9fcHJpdi0+CisJCQkJCSAgICAg ICBwaXhlbF9jbG9ja19tYXgpOworCisKKwlkZXZfZGJnKGRldi0+ZGV2LCAiJXMgZGV2aWNlIFZJ RC9ESUQ6ICUwMlg6JTAyWC4lMDJYLCAiCisJCSAgImNsb2NrIHJhbmdlICVkTUh6IC0gJWRNSHos ICIKKwkJICAiaW5wdXQgMTogJWMsIGlucHV0IDI6ICVjLCAiCisJCSAgIm91dHB1dCAxOiAlYywg b3V0cHV0IDI6ICVjXG4iLAorCQkgIFNEVk9fTkFNRShzZHZvX3ByaXYpLAorCQkgIHNkdm9fcHJp di0+Y2Fwcy52ZW5kb3JfaWQsIHNkdm9fcHJpdi0+Y2Fwcy5kZXZpY2VfaWQsCisJCSAgc2R2b19w cml2LT5jYXBzLmRldmljZV9yZXZfaWQsCisJCSAgc2R2b19wcml2LT5waXhlbF9jbG9ja19taW4g LyAxMDAwLAorCQkgIHNkdm9fcHJpdi0+cGl4ZWxfY2xvY2tfbWF4IC8gMTAwMCwKKwkJICAoc2R2 b19wcml2LT5jYXBzLnNkdm9faW5wdXRzX21hc2sgJiAweDEpID8gJ1knIDogJ04nLAorCQkgIChz ZHZvX3ByaXYtPmNhcHMuc2R2b19pbnB1dHNfbWFzayAmIDB4MikgPyAnWScgOiAnTicsCisJCSAg LyogY2hlY2sgY3VycmVudGx5IHN1cHBvcnRlZCBvdXRwdXRzICovCisJCSAgc2R2b19wcml2LT5j YXBzLm91dHB1dF9mbGFncyAmCisJCSAgKFNEVk9fT1VUUFVUX1RNRFMwIHwgU0RWT19PVVRQVVRf UkdCMCkgPyAnWScgOiAnTicsCisJCSAgc2R2b19wcml2LT5jYXBzLm91dHB1dF9mbGFncyAmCisJ CSAgKFNEVk9fT1VUUFVUX1RNRFMxIHwgU0RWT19PVVRQVVRfUkdCMSkgPyAnWScgOiAnTicpOwor CisJcHNiX2ludGVsX291dHB1dC0+ZGRjX2J1cyA9IGkyY2J1czsKKworCXJldHVybjsKKworZXJy X2kyYzoKKwlwc2JfaW50ZWxfaTJjX2Rlc3Ryb3kocHNiX2ludGVsX291dHB1dC0+aTJjX2J1cyk7 CitlcnJfY29ubmVjdG9yOgorCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOworCWtm cmVlKHBzYl9pbnRlbF9vdXRwdXQpOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9wc2JfaW50ZWxfc2R2b19yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0v Z21hNTAwL3BzYl9pbnRlbF9zZHZvX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi45Njg2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUw MC9wc2JfaW50ZWxfc2R2b19yZWdzLmgKQEAgLTAsMCArMSwzMzggQEAKKy8qCisgKiBTRFZPIGNv bW1hbmQgZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHVyZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAy MDA4LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl LAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisg KiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqCUVyaWMgQW5ob2x0IDxlcmljQGFu aG9sdC5uZXQ+CisgKi8KKworI2RlZmluZSBTRFZPX09VVFBVVF9GSVJTVCAgICgwKQorI2RlZmlu ZSBTRFZPX09VVFBVVF9UTURTMCAgICgxIDw8IDApCisjZGVmaW5lIFNEVk9fT1VUUFVUX1JHQjAg ICAgKDEgPDwgMSkKKyNkZWZpbmUgU0RWT19PVVRQVVRfQ1ZCUzAgICAoMSA8PCAyKQorI2RlZmlu ZSBTRFZPX09VVFBVVF9TVklEMCAgICgxIDw8IDMpCisjZGVmaW5lIFNEVk9fT1VUUFVUX1lQUlBC MCAgKDEgPDwgNCkKKyNkZWZpbmUgU0RWT19PVVRQVVRfU0NBUlQwICAoMSA8PCA1KQorI2RlZmlu ZSBTRFZPX09VVFBVVF9MVkRTMCAgICgxIDw8IDYpCisjZGVmaW5lIFNEVk9fT1VUUFVUX1RNRFMx ICAgKDEgPDwgOCkKKyNkZWZpbmUgU0RWT19PVVRQVVRfUkdCMSAgICAoMSA8PCA5KQorI2RlZmlu ZSBTRFZPX09VVFBVVF9DVkJTMSAgICgxIDw8IDEwKQorI2RlZmluZSBTRFZPX09VVFBVVF9TVklE MSAgICgxIDw8IDExKQorI2RlZmluZSBTRFZPX09VVFBVVF9ZUFJQQjEgICgxIDw8IDEyKQorI2Rl ZmluZSBTRFZPX09VVFBVVF9TQ0FSVDEgICgxIDw8IDEzKQorI2RlZmluZSBTRFZPX09VVFBVVF9M VkRTMSAgICgxIDw8IDE0KQorI2RlZmluZSBTRFZPX09VVFBVVF9MQVNUICAgICgxNCkKKworc3Ry dWN0IHBzYl9pbnRlbF9zZHZvX2NhcHMgeworCXU4IHZlbmRvcl9pZDsKKwl1OCBkZXZpY2VfaWQ7 CisJdTggZGV2aWNlX3Jldl9pZDsKKwl1OCBzZHZvX3ZlcnNpb25fbWFqb3I7CisJdTggc2R2b192 ZXJzaW9uX21pbm9yOworCXVuc2lnbmVkIGludCBzZHZvX2lucHV0c19tYXNrOjI7CisJdW5zaWdu ZWQgaW50IHNtb290aF9zY2FsaW5nOjE7CisJdW5zaWduZWQgaW50IHNoYXJwX3NjYWxpbmc6MTsK Kwl1bnNpZ25lZCBpbnQgdXBfc2NhbGluZzoxOworCXVuc2lnbmVkIGludCBkb3duX3NjYWxpbmc6 MTsKKwl1bnNpZ25lZCBpbnQgc3RhbGxfc3VwcG9ydDoxOworCXVuc2lnbmVkIGludCBwYWQ6MTsK Kwl1MTYgb3V0cHV0X2ZsYWdzOworfSBfX3BhY2tlZDsKKworLyoqIFRoaXMgbWF0Y2hlcyB0aGUg RURJRCBEVEQgc3RydWN0dXJlLCBtb3JlIG9yIGxlc3MgKi8KK3N0cnVjdCBwc2JfaW50ZWxfc2R2 b19kdGQgeworCXN0cnVjdCB7CisJCXUxNiBjbG9jazsJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBr SHogdW5pdHMgKi8KKwkJdTggaF9hY3RpdmU7CS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICov CisJCXU4IGhfYmxhbms7CS8qKjwgbG93ZXIgOCBiaXRzIChwaXhlbHMpICovCisJCXU4IGhfaGln aDsJLyoqPCB1cHBlciA0IGJpdHMgZWFjaCBoX2FjdGl2ZSwgaF9ibGFuayAqLworCQl1OCB2X2Fj dGl2ZTsJLyoqPCBsb3dlciA4IGJpdHMgKGxpbmVzKSAqLworCQl1OCB2X2JsYW5rOwkvKio8IGxv d2VyIDggYml0cyAobGluZXMpICovCisJCXU4IHZfaGlnaDsJLyoqPCB1cHBlciA0IGJpdHMgZWFj aCB2X2FjdGl2ZSwgdl9ibGFuayAqLworCX0gcGFydDE7CisKKwlzdHJ1Y3QgeworCQl1OCBoX3N5 bmNfb2ZmOworCQkJLyoqPCBsb3dlciA4IGJpdHMsIGZyb20gaGJsYW5rIHN0YXJ0ICovCisJCXU4 IGhfc3luY193aWR0aDsvKio8IGxvd2VyIDggYml0cyAocGl4ZWxzKSAqLworCS8qKiBsb3dlciA0 IGJpdHMgZWFjaCB2c3luYyBvZmZzZXQsIHZzeW5jIHdpZHRoICovCisJCXU4IHZfc3luY19vZmZf d2lkdGg7CisJLyoqCisJICogMiBoaWdoIGJpdHMgb2YgaHN5bmMgb2Zmc2V0LCAyIGhpZ2ggYml0 cyBvZiBoc3luYyB3aWR0aCwKKwkgKiBiaXRzIDQtNSBvZiB2c3luYyBvZmZzZXQsIGFuZCAyIGhp Z2ggYml0cyBvZiB2c3luYyB3aWR0aC4KKwkgKi8KKwkJdTggc3luY19vZmZfd2lkdGhfaGlnaDsK KwkJdTggZHRkX2ZsYWdzOworCQl1OCBzZHZvX2ZsYWdzOworCS8qKiBiaXRzIDYtNyBvZiB2c3lu YyBvZmZzZXQgYXQgYml0cyA2LTcgKi8KKwkJdTggdl9zeW5jX29mZl9oaWdoOworCQl1OCByZXNl cnZlZDsKKwl9IHBhcnQyOworfSBfX3BhY2tlZDsKKworc3RydWN0IHBzYl9pbnRlbF9zZHZvX3Bp eGVsX2Nsb2NrX3JhbmdlIHsKKwl1MTYgbWluOwkJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHog dW5pdHMgKi8KKwl1MTYgbWF4OwkJLyoqPCBwaXhlbCBjbG9jaywgaW4gMTBrSHogdW5pdHMgKi8K K30gX19wYWNrZWQ7CisKK3N0cnVjdCBwc2JfaW50ZWxfc2R2b19wcmVmZXJyZWRfaW5wdXRfdGlt aW5nX2FyZ3MgeworCXUxNiBjbG9jazsKKwl1MTYgd2lkdGg7CisJdTE2IGhlaWdodDsKK30gX19w YWNrZWQ7CisKKy8qIEkyQyByZWdpc3RlcnMgZm9yIFNEVk8gKi8KKyNkZWZpbmUgU0RWT19JMkNf QVJHXzAJCQkJMHgwNworI2RlZmluZSBTRFZPX0kyQ19BUkdfMQkJCQkweDA2CisjZGVmaW5lIFNE Vk9fSTJDX0FSR18yCQkJCTB4MDUKKyNkZWZpbmUgU0RWT19JMkNfQVJHXzMJCQkJMHgwNAorI2Rl ZmluZSBTRFZPX0kyQ19BUkdfNAkJCQkweDAzCisjZGVmaW5lIFNEVk9fSTJDX0FSR181CQkJCTB4 MDIKKyNkZWZpbmUgU0RWT19JMkNfQVJHXzYJCQkJMHgwMQorI2RlZmluZSBTRFZPX0kyQ19BUkdf NwkJCQkweDAwCisjZGVmaW5lIFNEVk9fSTJDX09QQ09ERQkJCQkweDA4CisjZGVmaW5lIFNEVk9f STJDX0NNRF9TVEFUVVMJCQkweDA5CisjZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8wCQkJMHgwYQor I2RlZmluZSBTRFZPX0kyQ19SRVRVUk5fMQkJCTB4MGIKKyNkZWZpbmUgU0RWT19JMkNfUkVUVVJO XzIJCQkweDBjCisjZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl8zCQkJMHgwZAorI2RlZmluZSBTRFZP X0kyQ19SRVRVUk5fNAkJCTB4MGUKKyNkZWZpbmUgU0RWT19JMkNfUkVUVVJOXzUJCQkweDBmCisj ZGVmaW5lIFNEVk9fSTJDX1JFVFVSTl82CQkJMHgxMAorI2RlZmluZSBTRFZPX0kyQ19SRVRVUk5f NwkJCTB4MTEKKyNkZWZpbmUgU0RWT19JMkNfVkVORE9SX0JFR0lOCQkJMHgyMAorCisvKiBTdGF0 dXMgcmVzdWx0cyAqLworI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfUE9XRVJfT04JCTB4MAorI2Rl ZmluZSBTRFZPX0NNRF9TVEFUVVNfU1VDQ0VTUwkJCTB4MQorI2RlZmluZSBTRFZPX0NNRF9TVEFU VVNfTk9UU1VQUAkJCTB4MgorI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfSU5WQUxJRF9BUkcJCTB4 MworI2RlZmluZSBTRFZPX0NNRF9TVEFUVVNfUEVORElORwkJCTB4NAorI2RlZmluZSBTRFZPX0NN RF9TVEFUVVNfVEFSR0VUX05PVF9TUEVDSUZJRUQJMHg1CisjZGVmaW5lIFNEVk9fQ01EX1NUQVRV U19TQ0FMSU5HX05PVF9TVVBQCTB4NgorCisvKiBTRFZPIGNvbW1hbmRzLCBhcmd1bWVudC9yZXN1 bHQgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgU0RWT19DTURfUkVTRVQJCQkJCTB4MDEKKworLyoq IFJldHVybnMgYSBzdHJ1Y3QgcHNiX2ludGVsX3Nkdm9fY2FwcyAqLworI2RlZmluZSBTRFZPX0NN RF9HRVRfREVWSUNFX0NBUFMJCQkweDAyCisKKyNkZWZpbmUgU0RWT19DTURfR0VUX0ZJUk1XQVJF X1JFVgkJCTB4ODYKKyMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX01JTk9SCQkJU0RWT19J MkNfUkVUVVJOXzAKKyMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX01BSk9SCQkJU0RWT19J MkNfUkVUVVJOXzEKKyMgZGVmaW5lIFNEVk9fREVWSUNFX0ZJUk1XQVJFX1BBVENICQkJU0RWT19J MkNfUkVUVVJOXzIKKworLyoqCisgKiBSZXBvcnRzIHdoaWNoIGlucHV0cyBhcmUgdHJhaW5lZCAo bWFuYWdlZCB0byBzeW5jKS4KKyAqCisgKiBEZXZpY2VzIG11c3QgaGF2ZSB0cmFpbmVkIHdpdGhp biAyIHZzeW5jcyBvZiBhIG1vZGUgY2hhbmdlLgorICovCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9U UkFJTkVEX0lOUFVUUwkJCTB4MDMKK3N0cnVjdCBwc2JfaW50ZWxfc2R2b19nZXRfdHJhaW5lZF9p bnB1dHNfcmVzcG9uc2UgeworCXVuc2lnbmVkIGludCBpbnB1dDBfdHJhaW5lZDoxOworCXVuc2ln bmVkIGludCBpbnB1dDFfdHJhaW5lZDoxOworCXVuc2lnbmVkIGludCBwYWQ6NjsKK30gX19wYWNr ZWQ7CisKKy8qKiBSZXR1cm5zIGEgc3RydWN0IHBzYl9pbnRlbF9zZHZvX291dHB1dF9mbGFncyBv ZiBhY3RpdmUgb3V0cHV0cy4gKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0FDVElWRV9PVVRQVVRT CQkJMHgwNAorCisvKioKKyAqIFNldHMgdGhlIGN1cnJlbnQgc2V0IG9mIGFjdGl2ZSBvdXRwdXRz LgorICoKKyAqIFRha2VzIGEgc3RydWN0IHBzYl9pbnRlbF9zZHZvX291dHB1dF9mbGFncy4KKyAq IE11c3QgYmUgcHJlY2VkZWQgYnkgYSBTRVRfSU5fT1VUX01BUAorICogb24gbXVsdGktb3V0cHV0 IGRldmljZXMuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfU0VUX0FDVElWRV9PVVRQVVRTCQkJMHgw NQorCisvKioKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgbWFwcGluZyBvZiBTRFZPIGlucHV0cyB0 byBvdXRwdXRzIG9uIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJucyB0d28gc3RydWN0IHBzYl9p bnRlbF9zZHZvX291dHB1dF9mbGFncyBzdHJ1Y3R1cmVzLgorICovCisjZGVmaW5lIFNEVk9fQ01E X0dFVF9JTl9PVVRfTUFQCQkJCTB4MDYKKworLyoqCisgKiBTZXRzIHRoZSBjdXJyZW50IG1hcHBp bmcgb2YgU0RWTyBpbnB1dHMgdG8gb3V0cHV0cyBvbiB0aGUgZGV2aWNlLgorICoKKyAqIFRha2Vz IHR3byBzdHJ1Y3QgaTM4MF9zZHZvX291dHB1dF9mbGFncyBzdHJ1Y3R1cmVzLgorICovCisjZGVm aW5lIFNEVk9fQ01EX1NFVF9JTl9PVVRfTUFQCQkJCTB4MDcKKworLyoqCisgKiBSZXR1cm5zIGEg c3RydWN0IHBzYl9pbnRlbF9zZHZvX291dHB1dF9mbGFncyBvZiBhdHRhY2hlZCBkaXNwbGF5cy4K KyAqLworI2RlZmluZSBTRFZPX0NNRF9HRVRfQVRUQUNIRURfRElTUExBWVMJCQkweDBiCisKKy8q KgorICogUmV0dXJucyBhIHN0cnVjdCBwc2JfaW50ZWxfc2R2b19vdXB0dXRfZmxhZ3Mgb2YgZGlz cGxheXMgc3VwcG9ydGluZyBob3QgcGx1Z2dpbmcuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VU X0hPVF9QTFVHX1NVUFBPUlQJCQkweDBjCisKKy8qKgorICogVGFrZXMgYSBzdHJ1Y3QgcHNiX2lu dGVsX3Nkdm9fb3V0cHV0X2ZsYWdzLgorICovCisjZGVmaW5lIFNEVk9fQ01EX1NFVF9BQ1RJVkVf SE9UX1BMVUcJCQkweDBkCisKKy8qKgorICogUmV0dXJucyBhIHN0cnVjdCBwc2JfaW50ZWxfc2R2 b19vdXRwdXRfZmxhZ3Mgb2YgZGlzcGxheXMgd2l0aCBob3QgcGx1ZworICogaW50ZXJydXB0cyBl bmFibGVkLgorICovCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9BQ1RJVkVfSE9UX1BMVUcJCQkweDBl CisKKyNkZWZpbmUgU0RWT19DTURfR0VUX0lOVEVSUlVQVF9FVkVOVF9TT1VSQ0UJCTB4MGYKK3N0 cnVjdCBwc2JfaW50ZWxfc2R2b19nZXRfaW50ZXJydXB0X2V2ZW50X3NvdXJjZV9yZXNwb25zZSB7 CisJdTE2IGludGVycnVwdF9zdGF0dXM7CisJdW5zaWduZWQgaW50IGFtYmllbnRfbGlnaHRfaW50 ZXJydXB0OjE7CisJdW5zaWduZWQgaW50IHBhZDo3OworfSBfX3BhY2tlZDsKKworLyoqCisgKiBT ZWxlY3RzIHdoaWNoIGlucHV0IGlzIGFmZmVjdGVkIGJ5IGZ1dHVyZSBpbnB1dCBjb21tYW5kcy4K KyAqCisgKiBDb21tYW5kcyBhZmZlY3RlZCBpbmNsdWRlIFNFVF9JTlBVVF9USU1JTkdTX1BBUlRb MTJdLAorICogR0VUX0lOUFVUX1RJTUlOR1NfUEFSVFsxMl0sIEdFVF9QUkVGRVJSRURfSU5QVVRf VElNSU5HU19QQVJUWzEyXSwKKyAqIEdFVF9JTlBVVF9QSVhFTF9DTE9DS19SQU5HRSwgYW5kIENS RUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HUy4KKyAqLworI2RlZmluZSBTRFZPX0NNRF9TRVRf VEFSR0VUX0lOUFVUCQkJMHgxMAorc3RydWN0IHBzYl9pbnRlbF9zZHZvX3NldF90YXJnZXRfaW5w dXRfYXJncyB7CisJdW5zaWduZWQgaW50IHRhcmdldF8xOjE7CisJdW5zaWduZWQgaW50IHBhZDo3 OworfSBfX3BhY2tlZDsKKworLyoqCisgKiBUYWtlcyBhIHN0cnVjdCBwc2JfaW50ZWxfc2R2b19v dXRwdXRfZmxhZ3Mgb2Ygd2hpY2ggb3V0cHV0cyBhcmUgdGFyZ2V0ZWQgYnkKKyAqIGZ1dHVyZSBv dXRwdXQgY29tbWFuZHMuCisgKgorICogQWZmZWN0ZWQgY29tbWFuZHMgaW5jbHVlIFNFVF9PVVRQ VVRfVElNSU5HU19QQVJUWzEyXSwKKyAqIEdFVF9PVVRQVVRfVElNSU5HU19QQVJUWzEyXSwgYW5k IEdFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UuCisgKi8KKyNkZWZpbmUgU0RWT19DTURfU0VU X1RBUkdFVF9PVVRQVVQJCQkweDExCisKKyNkZWZpbmUgU0RWT19DTURfR0VUX0lOUFVUX1RJTUlO R1NfUEFSVDEJCTB4MTIKKyNkZWZpbmUgU0RWT19DTURfR0VUX0lOUFVUX1RJTUlOR1NfUEFSVDIJ CTB4MTMKKyNkZWZpbmUgU0RWT19DTURfU0VUX0lOUFVUX1RJTUlOR1NfUEFSVDEJCTB4MTQKKyNk ZWZpbmUgU0RWT19DTURfU0VUX0lOUFVUX1RJTUlOR1NfUEFSVDIJCTB4MTUKKyNkZWZpbmUgU0RW T19DTURfU0VUX09VVFBVVF9USU1JTkdTX1BBUlQxCQkweDE2CisjZGVmaW5lIFNEVk9fQ01EX1NF VF9PVVRQVVRfVElNSU5HU19QQVJUMgkJMHgxNworI2RlZmluZSBTRFZPX0NNRF9HRVRfT1VUUFVU X1RJTUlOR1NfUEFSVDEJCTB4MTgKKyNkZWZpbmUgU0RWT19DTURfR0VUX09VVFBVVF9USU1JTkdT X1BBUlQyCQkweDE5CisvKiBQYXJ0IDEgKi8KKyMgZGVmaW5lIFNEVk9fRFREX0NMT0NLX0xPVwkJ CQlTRFZPX0kyQ19BUkdfMAorIyBkZWZpbmUgU0RWT19EVERfQ0xPQ0tfSElHSAkJCQlTRFZPX0ky Q19BUkdfMQorIyBkZWZpbmUgU0RWT19EVERfSF9BQ1RJVkUJCQkJU0RWT19JMkNfQVJHXzIKKyMg ZGVmaW5lIFNEVk9fRFREX0hfQkxBTksJCQkJU0RWT19JMkNfQVJHXzMKKyMgZGVmaW5lIFNEVk9f RFREX0hfSElHSAkJCQlTRFZPX0kyQ19BUkdfNAorIyBkZWZpbmUgU0RWT19EVERfVl9BQ1RJVkUJ CQkJU0RWT19JMkNfQVJHXzUKKyMgZGVmaW5lIFNEVk9fRFREX1ZfQkxBTksJCQkJU0RWT19JMkNf QVJHXzYKKyMgZGVmaW5lIFNEVk9fRFREX1ZfSElHSAkJCQlTRFZPX0kyQ19BUkdfNworLyogUGFy dCAyICovCisjIGRlZmluZSBTRFZPX0RURF9IU1lOQ19PRkYJCQkJU0RWT19JMkNfQVJHXzAKKyMg ZGVmaW5lIFNEVk9fRFREX0hTWU5DX1dJRFRICQkJCVNEVk9fSTJDX0FSR18xCisjIGRlZmluZSBT RFZPX0RURF9WU1lOQ19PRkZfV0lEVEgJCQlTRFZPX0kyQ19BUkdfMgorIyBkZWZpbmUgU0RWT19E VERfU1lOQ19PRkZfV0lEVEhfSElHSAkJCVNEVk9fSTJDX0FSR18zCisjIGRlZmluZSBTRFZPX0RU RF9EVERfRkxBR1MJCQkJU0RWT19JMkNfQVJHXzQKKyMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFH X0lOVEVSTEFDRUQJCQkJKDEgPDwgNykKKyMgZGVmaW5lIFNEVk9fRFREX0RURF9GTEFHX1NURVJF T19NQVNLCQkJCSgzIDw8IDUpCisjIGRlZmluZSBTRFZPX0RURF9EVERfRkxBR19JTlBVVF9NQVNL CQkJCSgzIDw8IDMpCisjIGRlZmluZSBTRFZPX0RURF9EVERfRkxBR19TWU5DX01BU0sJCQkJKDMg PDwgMSkKKyMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBUwkJCQlTRFZPX0kyQ19BUkdfNQorIyBk ZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NUQUxMCQkJCSgxIDw8IDcpCisjIGRlZmluZSBTRFZP X0RURF9TRFZPX0ZMQUdfQ0VOVEVSRUQJCQkJKDAgPDwgNikKKyMgZGVmaW5lIFNEVk9fRFREX1NE Vk9fRkxBR19VUFBFUl9MRUZUCQkJCSgxIDw8IDYpCisjIGRlZmluZSBTRFZPX0RURF9TRFZPX0ZM QUdfU0NBTElOR19NQVNLCQkJKDMgPDwgNCkKKyMgZGVmaW5lIFNEVk9fRFREX1NEVk9fRkxBR19T Q0FMSU5HX05PTkUJCQkoMCA8PCA0KQorIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NDQUxJ TkdfU0hBUlAJCQkoMSA8PCA0KQorIyBkZWZpbmUgU0RWT19EVERfU0RWT19GTEFHX1NDQUxJTkdf U01PT1RICQkJKDIgPDwgNCkKKyMgZGVmaW5lIFNEVk9fRFREX1ZTWU5DX09GRl9ISUdICQkJU0RW T19JMkNfQVJHXzYKKworLyoqCisgKiBHZW5lcmF0ZXMgYSBEVEQgYmFzZWQgb24gdGhlIGdpdmVu IHdpZHRoLCBoZWlnaHQsIGFuZCBmbGFncy4KKyAqCisgKiBUaGlzIHdpbGwgYmUgc3VwcG9ydGVk IGJ5IGFueSBkZXZpY2Ugc3VwcG9ydGluZyBzY2FsaW5nIG9yIGludGVybGFjZWQKKyAqIG1vZGVz LgorICovCisjZGVmaW5lIFNEVk9fQ01EX0NSRUFURV9QUkVGRVJSRURfSU5QVVRfVElNSU5HCQkw eDFhCisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfQ0xPQ0tfTE9XCQlTRFZP X0kyQ19BUkdfMAorIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0NMT0NLX0hJ R0gJCVNEVk9fSTJDX0FSR18xCisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdf V0lEVEhfTE9XCQlTRFZPX0kyQ19BUkdfMgorIyBkZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRf VElNSU5HX1dJRFRIX0hJR0gJCVNEVk9fSTJDX0FSR18zCisjIGRlZmluZSBTRFZPX1BSRUZFUlJF RF9JTlBVVF9USU1JTkdfSEVJR0hUX0xPVwkJU0RWT19JMkNfQVJHXzQKKyMgZGVmaW5lIFNEVk9f UFJFRkVSUkVEX0lOUFVUX1RJTUlOR19IRUlHSFRfSElHSAlTRFZPX0kyQ19BUkdfNQorIyBkZWZp bmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTCQlTRFZPX0kyQ19BUkdfNgorIyBk ZWZpbmUgU0RWT19QUkVGRVJSRURfSU5QVVRfVElNSU5HX0ZMQUdTX0lOVEVSTEFDRUQJCSgxIDw8 IDApCisjIGRlZmluZSBTRFZPX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfRkxBR1NfU0NBTEVECQko MSA8PCAxKQorCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9QUkVGRVJSRURfSU5QVVRfVElNSU5HX1BB UlQxCTB4MWIKKyNkZWZpbmUgU0RWT19DTURfR0VUX1BSRUZFUlJFRF9JTlBVVF9USU1JTkdfUEFS VDIJMHgxYworCisvKiogUmV0dXJucyBhIHN0cnVjdCBwc2JfaW50ZWxfc2R2b19waXhlbF9jbG9j a19yYW5nZSAqLworI2RlZmluZSBTRFZPX0NNRF9HRVRfSU5QVVRfUElYRUxfQ0xPQ0tfUkFOR0UJ CTB4MWQKKy8qKiBSZXR1cm5zIGEgc3RydWN0IHBzYl9pbnRlbF9zZHZvX3BpeGVsX2Nsb2NrX3Jh bmdlICovCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9PVVRQVVRfUElYRUxfQ0xPQ0tfUkFOR0UJCTB4 MWUKKworLyoqIFJldHVybnMgYSBieXRlIGJpdGZpZWxkIGNvbnRhaW5pbmcgU0RWT19DTE9DS19S QVRFX01VTFRfKiBmbGFncyAqLworI2RlZmluZSBTRFZPX0NNRF9HRVRfU1VQUE9SVEVEX0NMT0NL X1JBVEVfTVVMVFMJCTB4MWYKKworLyoqIFJldHVybnMgYSBieXRlIGNvbnRhaW5pbmcgYSBTRFZP X0NMT0NLX1JBVEVfTVVMVF8qIGZsYWcgKi8KKyNkZWZpbmUgU0RWT19DTURfR0VUX0NMT0NLX1JB VEVfTVVMVAkJCTB4MjAKKy8qKiBUYWtlcyBhIGJ5dGUgY29udGFpbmluZyBhIFNEVk9fQ0xPQ0tf UkFURV9NVUxUXyogZmxhZyAqLworI2RlZmluZSBTRFZPX0NNRF9TRVRfQ0xPQ0tfUkFURV9NVUxU CQkJMHgyMQorIyBkZWZpbmUgU0RWT19DTE9DS19SQVRFX01VTFRfMVgJCQkJKDEgPDwgMCkKKyMg ZGVmaW5lIFNEVk9fQ0xPQ0tfUkFURV9NVUxUXzJYCQkJCSgxIDw8IDEpCisjIGRlZmluZSBTRFZP X0NMT0NLX1JBVEVfTVVMVF80WAkJCQkoMSA8PCAzKQorCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9T VVBQT1JURURfVFZfRk9STUFUUwkJMHgyNworCisjZGVmaW5lIFNEVk9fQ01EX0dFVF9UVl9GT1JN QVQJCQkJMHgyOAorCisjZGVmaW5lIFNEVk9fQ01EX1NFVF9UVl9GT1JNQVQJCQkJMHgyOQorCisj ZGVmaW5lIFNEVk9fQ01EX0dFVF9TVVBQT1JURURfUE9XRVJfU1RBVEVTCQkweDJhCisjZGVmaW5l IFNEVk9fQ01EX0dFVF9FTkNPREVSX1BPV0VSX1NUQVRFCQkweDJiCisjZGVmaW5lIFNEVk9fQ01E X1NFVF9FTkNPREVSX1BPV0VSX1NUQVRFCQkweDJjCisjIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RB VEVfT04JCQkJCSgxIDw8IDApCisjIGRlZmluZSBTRFZPX0VOQ09ERVJfU1RBVEVfU1RBTkRCWQkJ CQkoMSA8PCAxKQorIyBkZWZpbmUgU0RWT19FTkNPREVSX1NUQVRFX1NVU1BFTkQJCQkJKDEgPDwg MikKKyMgZGVmaW5lIFNEVk9fRU5DT0RFUl9TVEFURV9PRkYJCQkJCSgxIDw8IDMpCisKKyNkZWZp bmUgU0RWT19DTURfU0VUX1RWX1JFU09MVVRJT05fU1VQUE9SVAkJMHg5MworCisjZGVmaW5lIFNE Vk9fQ01EX1NFVF9DT05UUk9MX0JVU19TV0lUQ0gJCQkweDdhCisjIGRlZmluZSBTRFZPX0NPTlRS T0xfQlVTX1BST00JCQkJMHgwCisjIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzEJCQkJMHgx CisjIGRlZmluZSBTRFZPX0NPTlRST0xfQlVTX0REQzIJCQkJMHgyCisjIGRlZmluZSBTRFZPX0NP TlRST0xfQlVTX0REQzMJCQkJMHgzCisKKy8qIFNEVk8gQnVzICYgU0RWTyBJbnB1dHMgd2lyaW5n IGRldGFpbHMqLworLyogQml0IDA6IElzIFNEVk9CIGNvbm5lY3RlZCB0byBJbjAgKDEgPSB5ZXMs IDAgPSBubyovCisvKiBCaXQgMTogSXMgU0RWT0IgY29ubmVjdGVkIHRvIEluMSAoMSA9IHllcywg MCA9IG5vKi8KKy8qIEJpdCAyOiBJcyBTRFZPQyBjb25uZWN0ZWQgdG8gSW4wICgxID0geWVzLCAw ID0gbm8qLworLyogQml0IDM6IElzIFNEVk9DIGNvbm5lY3RlZCB0byBJbjEgKDEgPSB5ZXMsIDAg PSBubyovCisjZGVmaW5lIFNEVk9CX0lOMCAweDAxCisjZGVmaW5lIFNEVk9CX0lOMSAweDAyCisj ZGVmaW5lIFNEVk9DX0lOMCAweDA0CisjZGVmaW5lIFNEVk9DX0lOMSAweDA4CisKKyNkZWZpbmUg U0RWT19ERVZJQ0VfTk9ORSAweDAwCisjZGVmaW5lICAgICAgICBTRFZPX0RFVklDRV9DUlQgMHgw MQorI2RlZmluZSAgICAgICAgU0RWT19ERVZJQ0VfVFYgMHgwMgorI2RlZmluZSAgICAgICAgU0RW T19ERVZJQ0VfTFZEUyAweDA0CisjZGVmaW5lICAgICAgICBTRFZPX0RFVklDRV9UTURTIDB4MDgK KwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9wc2JfbGlkLmMgYi9kcml2ZXJz L2dwdS9kcm0vZ21hNTAwL3BzYl9saWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5hZjMyODUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2dtYTUwMC9w c2JfbGlkLmMKQEAgLTAsMCArMSw5MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmln aHQgKGMpIDIwMDcsIEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczogVGhvbWFzIEhlbGxzdHJv bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAicHNiX2Rydi5oIgorI2luY2x1 ZGUgInBzYl9yZWcuaCIKKyNpbmNsdWRlICJwc2JfaW50ZWxfcmVnLmgiCisjaW5jbHVkZSA8bGlu dXgvc3BpbmxvY2suaD4KKworc3RhdGljIHZvaWQgcHNiX2xpZF90aW1lcl9mdW5jKHVuc2lnbmVk IGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICogZGV2X3ByaXYgPSAoc3Ry dWN0IGRybV9wc2JfcHJpdmF0ZSAqKWRhdGE7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChz dHJ1Y3QgZHJtX2RldmljZSAqKWRldl9wcml2LT5kZXY7CisJc3RydWN0IHRpbWVyX2xpc3QgKmxp ZF90aW1lciA9ICZkZXZfcHJpdi0+bGlkX3RpbWVyOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdz OworCXUzMiAqbGlkX3N0YXRlID0gZGV2X3ByaXYtPmxpZF9zdGF0ZTsKKwl1MzIgcHBfc3RhdHVz OworCisJaWYgKHJlYWRsKGxpZF9zdGF0ZSkgPT0gZGV2X3ByaXYtPmxpZF9sYXN0X3N0YXRlKQor CQlnb3RvIGxpZF90aW1lcl9zY2hlZHVsZTsKKworCWlmICgocmVhZGwobGlkX3N0YXRlKSkgJiAw eDAxKSB7CisJCS8qbGlkIHN0YXRlIGlzIG9wZW4qLworCQlSRUdfV1JJVEUoUFBfQ09OVFJPTCwg UkVHX1JFQUQoUFBfQ09OVFJPTCkgfCBQT1dFUl9UQVJHRVRfT04pOworCQlkbyB7CisJCQlwcF9z dGF0dXMgPSBSRUdfUkVBRChQUF9TVEFUVVMpOworCQl9IHdoaWxlICgocHBfc3RhdHVzICYgUFBf T04pID09IDApOworCisJCS8qRklYTUU6IHNob3VsZCBiZSBiYWNrbGlnaHQgbGV2ZWwgYmVmb3Jl Ki8KKwkJcHNiX2ludGVsX2x2ZHNfc2V0X2JyaWdodG5lc3MoZGV2LCAxMDApOworCX0gZWxzZSB7 CisJCXBzYl9pbnRlbF9sdmRzX3NldF9icmlnaHRuZXNzKGRldiwgMCk7CisKKwkJUkVHX1dSSVRF KFBQX0NPTlRST0wsIFJFR19SRUFEKFBQX0NPTlRST0wpICYgflBPV0VSX1RBUkdFVF9PTik7CisJ CWRvIHsKKwkJCXBwX3N0YXR1cyA9IFJFR19SRUFEKFBQX1NUQVRVUyk7CisJCX0gd2hpbGUgKChw cF9zdGF0dXMgJiBQUF9PTikgPT0gMCk7CisJfQorCQkvKiBwcmludGsoS0VSTl9JTkZPIiVzOiBs aWQ6IGNsb3NlZFxuIiwgX19GVU5DVElPTl9fKTsgKi8KKworCWRldl9wcml2LT5saWRfbGFzdF9z dGF0ZSA9ICByZWFkbChsaWRfc3RhdGUpOworCitsaWRfdGltZXJfc2NoZWR1bGU6CisJc3Bpbl9s b2NrX2lycXNhdmUoJmRldl9wcml2LT5saWRfbG9jaywgaXJxX2ZsYWdzKTsKKwlpZiAoIXRpbWVy X3BlbmRpbmcobGlkX3RpbWVyKSkgeworCQlsaWRfdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsg UFNCX0xJRF9ERUxBWTsKKwkJYWRkX3RpbWVyKGxpZF90aW1lcik7CisJfQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmRldl9wcml2LT5saWRfbG9jaywgaXJxX2ZsYWdzKTsKK30KKwordm9pZCBw c2JfbGlkX3RpbWVyX2luaXQoc3RydWN0IGRybV9wc2JfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJ c3RydWN0IHRpbWVyX2xpc3QgKmxpZF90aW1lciA9ICZkZXZfcHJpdi0+bGlkX3RpbWVyOworCXVu c2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5saWRf bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5saWRfbG9jaywgaXJxX2ZsYWdz KTsKKworCWluaXRfdGltZXIobGlkX3RpbWVyKTsKKworCWxpZF90aW1lci0+ZGF0YSA9ICh1bnNp Z25lZCBsb25nKWRldl9wcml2OworCWxpZF90aW1lci0+ZnVuY3Rpb24gPSBwc2JfbGlkX3RpbWVy X2Z1bmM7CisJbGlkX3RpbWVyLT5leHBpcmVzID0gamlmZmllcyArIFBTQl9MSURfREVMQVk7CisK KwlhZGRfdGltZXIobGlkX3RpbWVyKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJp di0+bGlkX2xvY2ssIGlycV9mbGFncyk7Cit9CisKK3ZvaWQgcHNiX2xpZF90aW1lcl90YWtlZG93 bihzdHJ1Y3QgZHJtX3BzYl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlkZWxfdGltZXJfc3luYygm ZGV2X3ByaXYtPmxpZF90aW1lcik7Cit9CisKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==