From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yao Cheng Subject: [RFC PATCH 2/3] drm/ipvr: drm driver for vxd392 Date: Mon, 13 Oct 2014 20:15:02 +0800 Message-ID: <1413202502-19026-3-git-send-email-yao.cheng@intel.com> References: <1413202502-19026-1-git-send-email-yao.cheng@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1413202502-19026-1-git-send-email-yao.cheng@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org Cc: fei.jiang@intel.com, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com List-Id: dri-devel@lists.freedesktop.org UHJvYmVzIHZ4ZDM5MiBvbiBCYXl0cmFpbCBwbGF0Zm9ybSBhbmQgY3JlYXRlCmEgbmV3IGRybSBk ZXZpY2UgZm9yIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHZpZGVvCmRlY29kaW5nLgoKU2lnbmVkLW9m Zi1ieTogWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2Ry bS9LY29uZmlnICAgICAgICAgICAgfCAgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAg ICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL0tjb25maWcgICAgICAgfCAg IDE2ICsKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL01ha2VmaWxlICAgICAgfCAgIDIxICsKIGRyaXZl cnMvZ3B1L2RybS9pcHZyL2lwdnJfYnVmZmVyLmMgfCAxMTc3ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9idWZmZXIuaCB8ICAxODQg KysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2RlYnVnLmMgIHwgIDI2MyArKysrKysr KwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5oICB8ICAgNTAgKysKIGRyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfZHJtLmggICAgfCAgMjY1ICsrKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vaXB2ci9pcHZyX2Rydi5jICAgIHwgIDc3NiArKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5oICAgIHwgIDQ2NCArKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMuYyAgIHwgIDUzMCArKysrKysrKysrKysrKysKIGRy aXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZXhlYy5oICAgfCAgIDY4ICsrCiBkcml2ZXJzL2dwdS9k cm0vaXB2ci9pcHZyX2ZlbmNlLmMgIHwgIDU1MCArKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmggIHwgICA2OCArKwogZHJpdmVycy9ncHUvZHJtL2lwdnIv aXB2cl9nZW0uYyAgICB8ICAyNDggKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9n ZW0uaCAgICB8ICAgNjYgKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfbW11LmMgICAgfCAg ODA3ICsrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX21t dS5oICAgIHwgIDEzNSArKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNlLmMgIHwg ICAxMSArCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNlLmggIHwgIDI5NiArKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9jbWQuYyAgICAgfCAxMjY5ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5o ICAgICB8ICAxMDQgKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZWMuYyAgICAgIHwgIDU4 NCArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2VjLmggICAgICB8 ICAyMDcgKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZncuYyAgICAgIHwgIDY2MCAr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZncuaCAgICAgIHwg ICA3MyArKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9pbml0LmMgICAgfCAgODI5ICsrKysr KysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfaW5pdC5oICAgIHwg ICA2MSArKwogZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX21zZy5oICAgICB8ICAzNjQgKysrKysr KysrKysKIGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9wbS5jICAgICAgfCAgMzkyICsrKysrKysr KysrCiBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uaCAgICAgIHwgICA1NSArKwogZHJpdmVy cy9ncHUvZHJtL2lwdnIvdmVkX3JlZy5oICAgICB8ICA2MDkgKysrKysrKysrKysrKysrKysKIDMz IGZpbGVzIGNoYW5nZWQsIDExMjA1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaXB2ci9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2lwdnIvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v aXB2ci9pcHZyX2J1ZmZlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9idWZmZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZy L2lwdnJfZGVidWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lw dnJfZGVidWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf ZHJtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcnYuaAogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZXhlYy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9leGVjLmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfbW11LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vaXB2ci9pcHZyX21tdS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl90cmFjZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIv aXB2cl90cmFjZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVk X2NtZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5o CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2VjLmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZWMuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2Z3LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaXB2ci92ZWRfaW5pdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2lwdnIvdmVkX2luaXQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9p cHZyL3ZlZF9tc2cuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pcHZyL3Zl ZF9wbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3BtLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcmVnLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln CmluZGV4IGUzYjRiMGYuLmFkNzU4NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29u ZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0xNjUsNiArMTY1LDggQEAgY29u ZmlnIERSTV9TQVZBR0UKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIFNhdmFn ZTNELzQvU3VwZXJTYXZhZ2UvUHJvL1R3aXN0ZXIKIAkgIGNoaXBzZXQuIElmIE0gaXMgc2VsZWN0 ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYXZhZ2UuCiAKK3NvdXJjZSAiZHJpdmVycy9n cHUvZHJtL2lwdnIvS2NvbmZpZyIKKwogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL0tj b25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC9LY29uZmlnIgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxl CmluZGV4IDkyOTJhNzYuLjhlYzRiZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtl ZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTQxLDYgKzQxLDcgQEAgb2Jq LSQoQ09ORklHX0RSTV9SQURFT04pKz0gcmFkZW9uLwogb2JqLSQoQ09ORklHX0RSTV9NR0EpCSs9 IG1nYS8KIG9iai0kKENPTkZJR19EUk1fSTgxMCkJKz0gaTgxMC8KIG9iai0kKENPTkZJR19EUk1f STkxNSkgICs9IGk5MTUvCitvYmotJChDT05GSUdfRFJNX0lQVlIpICArPSBpcHZyLwogb2JqLSQo Q09ORklHX0RSTV9NR0FHMjAwKSArPSBtZ2FnMjAwLwogb2JqLSQoQ09ORklHX0RSTV9DSVJSVVNf UUVNVSkgKz0gY2lycnVzLwogb2JqLSQoQ09ORklHX0RSTV9TSVMpICAgKz0gc2lzLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxNjU5MAotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL0tjb25maWcKQEAgLTAsMCArMSwx NiBAQAorY29uZmlnIERSTV9JUFZSCisgICAgICAgdHJpc3RhdGUgIkJheXRyYWlsIFZQOCB2aWRl byBkZWNvZGUgZHJpdmVyIgorICAgICAgIGRlcGVuZHMgb24gRFJNCisgICAgICAgZGVwZW5kcyBv biBEUk1fSTkxNQorICAgICAgIHNlbGVjdCBTSE1FTQorICAgICAgIHNlbGVjdCBUTVBGUworICAg ICAgIGRlZmF1bHQgbQorICAgICAgIGhlbHAKKyAgICAgICAgIENob29zZSB0aGlzIG9wdGlvbiBp ZiB5b3Ugd2FudCB0byBlbmFibGUgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgVlA4IGRlY29kaW5nIG9u IEJheXRyYWlsIHBsYXRmb3JtCisKK2NvbmZpZyBEUk1fSVBWUl9FQworICAgICAgIGJvb2wgIltF WFBFUklNRU5UQUxdIGVycm9yIGNvbmNlYWxtZW50IGZvciBWUDgiCisgICAgICAgZGVwZW5kcyBv biBEUk1fSVBWUgorICAgICAgIGRlZmF1bHQgeQorICAgICAgIGhlbHAKKyAgICAgICAgIENob29z ZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBlbmFibGUgaGFyZHdhcmUgZXJyb3IgY29uY2Vh bG1lbnQgZm9yIElQVlIgVlA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9NYWtl ZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmUyNWE3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaXB2ci9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisKK2NjZmxhZ3MteSA6PSAtSWluY2x1 ZGUvZHJtCisKK2lwdnIteSA6PSBcCisgICAgICAgIGlwdnJfZ2VtLm8gXAorICAgICAgICBpcHZy X2Rydi5vIFwKKyAgICAgICAgaXB2cl9idWZmZXIubyBcCisgICAgICAgIGlwdnJfZXhlYy5vIFwK KyAgICAgICAgaXB2cl9mZW5jZS5vIFwKKyAgICAgICAgaXB2cl9tbXUubyBcCisgICAgICAgIGlw dnJfZGVidWcubyBcCisgICAgICAgIGlwdnJfdHJhY2UubyBcCisgICAgICAgIHZlZF9wbS5vIFwK KyAgICAgICAgdmVkX2VjLm8gXAorICAgICAgICB2ZWRfY21kLm8gXAorICAgICAgICB2ZWRfZncu byBcCisgICAgICAgIHZlZF9pbml0Lm8KKworb2JqLSQoQ09ORklHX0RSTV9JUFZSKSArPSBpcHZy Lm8KKworQ0ZMQUdTX2lwdnJfdHJhY2UubyA6PSAtSSQoc3JjKQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2lwdnIvaXB2cl9idWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf YnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmZTU4NwotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYnVmZmVyLmMKQEAgLTAs MCArMSwxMTc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlwdnJfYnVmZmVyLmM6IElQVlIg YnVmZmVyIGNyZWF0aW9uLCBkZXN0b3J5LCBtYXAgZXRjCisgKgorICogQ29weXJpZ2h0IChjKSAy MDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMg UmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQg Y29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9u IDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1 bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3Jh bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAor ICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29t PgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworI2luY2x1ZGUgPGRybVAuaD4KKyNpbmNsdWRlICJpcHZyX2J1ZmZlci5oIgor I2luY2x1ZGUgImlwdnJfdHJhY2UuaCIKKworZXh0ZXJuIGludCBmYWtlX2JvX2RlYnVnOworCisv KiBFbnN1cmUgdGhhdCB0aGUgYXNzb2NpYXRlZCBwYWdlcyBhcmUgZ2F0aGVyZWQgZnJvbSB0aGUg YmFja2luZyBzdG9yYWdlCisgKiBhbmQgcGlubmVkIGludG8gb3VyIG9iamVjdC4gaXB2cl9nZW1f b2JqZWN0X2dldF9wYWdlcygpIG1heSBiZSBjYWxsZWQKKyAqIG11bHRpcGxlIHRpbWVzIGJlZm9y ZSB0aGV5IGFyZSByZWxlYXNlZCBieSBhIHNpbmdsZSBjYWxsIHRvCisgKiBpcHZyX2dlbV9vYmpl Y3RfcHV0X3BhZ2VzKCkgLSBvbmNlIHRoZSBwYWdlcyBhcmUgbm8gbG9uZ2VyIHJlZmVyZW5jZWQK KyAqIGVpdGhlciBhcyBhIHJlc3VsdCBvZiBtZW1vcnkgcHJlc3N1cmUgKHJlYXBpbmcgcGFnZXMg dW5kZXIgdGhlIHNocmlua2VyKQorICogb3IgYXMgdGhlIG9iamVjdCBpcyBpdHNlbGYgcmVsZWFz ZWQuCisgKi8KKy8qIGZvciBmYWtlIGRlYnVnLCB3aWxsIGFsbG9jYXRlIGJvIHdpdGggYWxsb2Nf cGFnZSwgaW5zdGVhZCBvZiB1c2luZyBzZyAgKi8KK2ludDMyX3QgaXB2cl9nZW1fb2JqZWN0X2dl dF9wYWdlcyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1f aXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IG9iai0+YmFzZS5kZXYtPmRldl9wcml2YXRlOworCWNv bnN0IHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0X29wcyAqb3BzID0gb2JqLT5vcHM7CisJaW50 MzJfdCByZXQsIHI7CisKKwlpZiAob2JqLT5zZ190YWJsZSkKKwkJcmV0dXJuIDA7CisKKwlCVUdf T04ob2JqLT5wYWdlc19waW5fY291bnQpOworCisJaWYgKGZha2VfYm9fZGVidWcpIHsKKwkJZ2Zw X3QgZ2ZwX2ZsYWdzID0gR0ZQX1VTRVIgfCBHRlBfRE1BMzIgfCBfX0dGUF9JTzsKKwkJc3RydWN0 IHBhZ2UgKnAgPSBOVUxMOworCQlvYmotPmZha2VfcGFnZXMgPQorCQkJZHJtX2NhbGxvY19sYXJn ZShvYmotPmJhc2Uuc2l6ZSAvIDQwOTYsIHNpemVvZih2b2lkKikpOworCQlJUFZSX0RFQlVHX0dF TkVSQUwoImZha2UgY2FsbCBhbGxvY19wYWdlIHRvIGFsbG9jIHBhZ2VzLlxuIik7CisJCWZvciAo ciA9IDA7IHIgPCBvYmotPmJhc2Uuc2l6ZSAvIDQwOTY7ICsrcikgeworCQkJcCA9IGFsbG9jX3Bh Z2UoZ2ZwX2ZsYWdzKTsKKwkJCWlmICghcCkgeworCQkJCUlQVlJfRVJST1IoIlVuYWJsZSB0byBh bGxvY2F0ZSBwYWdlXG4iKTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCW9iai0+ZmFr ZV9wYWdlc1tyXSA9IHA7CisJCQlzd2l0Y2ggKG9iai0+Y2FjaGVfbGV2ZWwpIHsKKwkJCWNhc2Ug SVBWUl9DQUNIRV9OT05FOgorCQkJCXJldCA9IHNldF9wYWdlc191YyhwLCAxKTsKKwkJCQlicmVh azsKKwkJCWNhc2UgSVBWUl9DQUNIRV9XQzoKKwkJCQlyZXQgPSBzZXRfbWVtb3J5X3djKAorCQkJ CQkodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIDEpOworCQkJCWJyZWFrOworCQkJY2Fz ZSBJUFZSX0NBQ0hFX1dCOgorCQkJCXJldCA9IHNldF9wYWdlc193YihwLCAxKTsKKwkJCQlicmVh azsKKwkJCWRlZmF1bHQ6CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJ CWlmIChyZXQpIHsKKwkJCQlJUFZSX0RFQlVHX1dBUk4oImZhaWxlZCB0byBzZXQgcGFnZSBjYWNo ZS5cbiIpOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJfQorCS8qIHdpbGwgY2Fs bCBpcHZyX2dlbV9vYmplY3RfZ2V0X3BhZ2VzX21tdSAqLworCXJldCA9IG9wcy0+Z2V0X3BhZ2Vz KG9iaik7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJmYWlsZWQgdG8gY2FsbCBvcHMtPmdl dF9wYWdlc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogZG8gd2UgbmVlZCBsb2NrIGhl cmU/ICovCisJbGlzdF9hZGRfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwgJmRldl9wcml2LT5pcHZy X21tLnVuYm91bmRfbGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK2ludDMyX3QgaXB2cl9nZW1fb2Jq ZWN0X3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCWNvbnN0 IHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0X29wcyAqb3BzID0gb2JqLT5vcHM7CisKKwlpZiAo b2JqLT5zZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChvYmotPnBhZ2VzX3Bp bl9jb3VudCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxpc3RfZGVsKCZvYmotPmdsb2JhbF9saXN0 KTsKKworCW9wcy0+cHV0X3BhZ2VzKG9iaik7CisJb2JqLT5zZ190YWJsZSA9IE5VTEw7CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9nZW1fb2JqZWN0X2dldF9wYWdlc19z ZyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXVpbnQzMl90IHBhZ2VfY291 bnQsIGk7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisJc3RydWN0IHNnX3RhYmxl ICpzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVjdCBzZ19wYWdlX2l0ZXIgc2df aXRlcjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IHBhZ2UgKipwYWdlX2Fy cmF5ID0gTlVMTDsKKwlpbnQgY2FycmF5ID0gMDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfcGZuID0g MDsJLyogc3VwcHJlc3MgZ2NjIHdhcm5pbmcgKi8KKwlnZnBfdCBnZnA7CisJaW50MzJfdCByZXQ7 CisKKwkvKiBBc3NlcnQgdGhhdCB0aGUgb2JqZWN0IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IEdQ VSBkb21haW4uIEFzIGl0CisJICogd2Fzbid0IGluIHRoZSBNTVUsIHRoZXJlIHNob3VsZG4ndCBi ZSBhbnkgd2F5IGl0IGNvdWxkIGhhdmUgYmVlbiBpbgorCSAqIGEgR1BVIGNhY2hlCisJICovCisJ QlVHX09OKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJUFZSX0dFTV9ET01BSU5fR1BVKTsKKwlC VUdfT04ob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIElQVlJfR0VNX0RPTUFJTl9HUFUpOworCisJ c3QgPSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3QgPT0gTlVMTCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgLyBQQUdF X1NJWkU7CisKKwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIHBhZ2VfY291bnQsIEdGUF9LRVJORUwp KSB7CisJCXNnX2ZyZWVfdGFibGUoc3QpOworCQlrZnJlZShzdCk7CisJCXJldHVybiAtRU5PTUVN OworCX0KKworCXBhZ2VfYXJyYXkgPSBrbWFsbG9jKHBhZ2VfY291bnQgKiBzaXplb2Yoc3RydWN0 IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghcGFnZV9hcnJheSkpIHsKKwkJ c2dfZnJlZV90YWJsZShzdCk7CisJCWtmcmVlKHN0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CS8qIEdldCB0aGUgbGlzdCBvZiBwYWdlcyBvdXQgb2Ygb3VyIHN0cnVjdCBmaWxlLiAgVGhleSds bCBiZSBwaW5uZWQKKwkgKiBhdCB0aGlzIHBvaW50IHVudGlsIHdlIHJlbGVhc2UgdGhlbS4KKwkg KgorCSAqIEZhaWwgc2lsZW50bHkgd2l0aG91dCBzdGFydGluZyB0aGUgc2hyaW5rZXIKKwkgKi8K KwltYXBwaW5nID0gZmlsZV9pbm9kZShvYmotPmJhc2UuZmlscCktPmlfbWFwcGluZzsKKwlnZnAg PSBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpOworCS8qIHRvZG86IG5lZWQgc2V0IGNvcnJlY3Qg Z2ZwICovCisJZ2ZwIHw9IF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT19L U1dBUEQ7CisJZ2ZwIHw9IEdGUF9ETUEzMiB8IF9fR0ZQX0lPOworCXNnID0gc3QtPnNnbDsKKwlz dC0+bmVudHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKKwkJcGFn ZSA9IHNobWVtX3JlYWRfbWFwcGluZ19wYWdlX2dmcChtYXBwaW5nLCBpLCBnZnApOworCQlpZiAo SVNfRVJSKHBhZ2UpKSB7CisJCQkvKiBkb2Vzbid0IHN1cHBvcnQgc2hyaW5rCisJCQkgKiBzaW5j ZSBpcHZyIGhhcyA0R2lCIGFkZHJlc3Mgc3BhY2UgKi8KKwkJCWdvdG8gZXJyX3BhZ2VzOworCQl9 CisJCXBhZ2VfYXJyYXlbY2FycmF5KytdID0gcGFnZTsKKworI2lmZGVmIENPTkZJR19TV0lPVExC CisJCWlmIChzd2lvdGxiX25yX3RibCgpKSB7CisJCQlzdC0+bmVudHMrKzsKKwkJCXNnX3NldF9w YWdlKHNnLCBwYWdlLCBQQUdFX1NJWkUsIDApOworCQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJCWNv bnRpbnVlOworCQl9CisjZW5kaWYKKwkJaWYgKCFpIHx8IHBhZ2VfdG9fcGZuKHBhZ2UpICE9IGxh c3RfcGZuICsgMSkgeworCQkJaWYgKGkpCisJCQkJc2cgPSBzZ19uZXh0KHNnKTsKKwkJCXN0LT5u ZW50cysrOworCQkJc2dfc2V0X3BhZ2Uoc2csIHBhZ2UsIFBBR0VfU0laRSwgMCk7CisJCX0gZWxz ZSB7CisJCQlzZy0+bGVuZ3RoICs9IFBBR0VfU0laRTsKKwkJfQorCQlsYXN0X3BmbiA9IHBhZ2Vf dG9fcGZuKHBhZ2UpOworCX0KKyNpZmRlZiBDT05GSUdfU1dJT1RMQgorCWlmICghc3dpb3RsYl9u cl90YmwoKSkKKyNlbmRpZgorCQlzZ19tYXJrX2VuZChzZyk7CisJb2JqLT5zZ190YWJsZSA9IHN0 OworCisJc3dpdGNoIChvYmotPmNhY2hlX2xldmVsKSB7CisJY2FzZSBJUFZSX0NBQ0hFX05PTkU6 CisJCXJldCA9IHNldF9wYWdlc19hcnJheV91YyhwYWdlX2FycmF5LCBjYXJyYXkpOworCQlicmVh azsKKwljYXNlIElQVlJfQ0FDSEVfV0M6CisJCXJldCA9IHNldF9wYWdlc19hcnJheV93YyhwYWdl X2FycmF5LCBjYXJyYXkpOworCQlicmVhazsKKwljYXNlIElQVlJfQ0FDSEVfV0I6CisJCXJldCA9 IHNldF9wYWdlc19hcnJheV93YihwYWdlX2FycmF5LCBjYXJyYXkpOworCQlicmVhazsKKwlkZWZh dWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJaWYgKHJldCkgeworCQlJUFZS X0RFQlVHX1dBUk4oImZhaWxlZCB0byBzZXQgcGFnZSBjYWNoZS5cbiIpOworCQlnb3RvIGVycl9w YWdlczsKKwl9CisJa2ZyZWUocGFnZV9hcnJheSk7CisJcmV0dXJuIDA7CisKK2Vycl9wYWdlczoK KwlzZ19tYXJrX2VuZChzZyk7CisJZm9yX2VhY2hfc2dfcGFnZShzdC0+c2dsLCAmc2dfaXRlciwg c3QtPm5lbnRzLCAwKQorCQlwYWdlX2NhY2hlX3JlbGVhc2Uoc2dfcGFnZV9pdGVyX3BhZ2UoJnNn X2l0ZXIpKTsKKwlzZ19mcmVlX3RhYmxlKHN0KTsKKwlrZnJlZShzdCk7CisJaWYgKHBhZ2VfYXJy YXkpCisJCWtmcmVlKHBhZ2VfYXJyYXkpOworCXJldHVybiBQVFJfRVJSKHBhZ2UpOworfQorCitz dGF0aWMgYm9vbCBjcHVfY2FjaGVfaXNfY29oZXJlbnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK KwkJCQkJZW51bSBpcHZyX2NhY2hlX2xldmVsIGxldmVsKQoreworCS8qIHRvZG86IG5lZWQgY2hl Y2sgaWYgY2FjaGUgc25vb3AgaXMgZW5hYmxlZCAqLworCWlmIChsZXZlbCA9PSBJUFZSX0NBQ0hF X1dCKQorCQlyZXR1cm4gZmFsc2U7CisJZWxzZQorCQlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBp cHZyX2dlbV9jbGZsdXNoX29iamVjdChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLCBi b29sIGZvcmNlKQoreworCS8qIElmIHdlIGRvbid0IGhhdmUgYSBwYWdlIGxpc3Qgc2V0IHVwLCB0 aGVuIHdlJ3JlIG5vdCBwaW5uZWQKKwkgKiB0byBHUFUsIGFuZCB3ZSBjYW4gaWdub3JlIHRoZSBj YWNoZSBmbHVzaCBiZWNhdXNlIGl0J2xsIGhhcHBlbgorCSAqIGFnYWluIGF0IGJpbmQgdGltZS4K KwkgKi8KKwlpZiAob2JqLT5zZ190YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkv KiBJZiB0aGUgR1BVIGlzIHNub29waW5nIHRoZSBjb250ZW50cyBvZiB0aGUgQ1BVIGNhY2hlLAor CSAqIHdlIGRvIG5vdCBuZWVkIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBDUFUgY2FjaGUgbGluZXMu ICBIb3dldmVyLAorCSAqIHRoZSBjYWNoZXMgYXJlIG9ubHkgc25vb3BlZCB3aGVuIHRoZSByZW5k ZXIgY2FjaGUgaXMKKwkgKiBmbHVzaGVkL2ludmFsaWRhdGVkLiAgQXMgd2UgYWx3YXlzIGhhdmUg dG8gZW1pdCBpbnZhbGlkYXRpb25zCisJICogYW5kIGZsdXNoZXMgd2hlbiBtb3ZpbmcgaW50byBh bmQgb3V0IG9mIHRoZSBSRU5ERVIgZG9tYWluLCBjb3JyZWN0CisJICogc25vb3BpbmcgYmVoYXZp b3VyIG9jY3VycyBuYXR1cmFsbHkgYXMgdGhlIHJlc3VsdCBvZiBvdXIgZG9tYWluCisJICogdHJh Y2tpbmcuCisJICovCisJaWYgKCFmb3JjZSAmJiBjcHVfY2FjaGVfaXNfY29oZXJlbnQob2JqLT5i YXNlLmRldiwgb2JqLT5jYWNoZV9sZXZlbCkpCisJCXJldHVybiBmYWxzZTsKKworCWRybV9jbGZs dXNoX3NnKG9iai0+c2dfdGFibGUpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogTW92 ZXMgYSBzaW5nbGUgb2JqZWN0IHRvIHRoZSBDUFUgcmVhZCwgYW5kIHBvc3NpYmx5IHdyaXRlIGRv bWFpbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgd2hlbiB0aGUgbW92ZSBpcyBjb21w bGV0ZSwgaW5jbHVkaW5nIHdhaXRpbmcgb24KKyAqIGZsdXNoZXMgdG8gb2NjdXIuCisgKi8KK2lu dDMyX3QKK2lwdnJfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2lwdnJf Z2VtX29iamVjdCAqb2JqLCBib29sIHdyaXRlKQoreworCXVpbnQzMl90IG9sZF93cml0ZV9kb21h aW4sIG9sZF9yZWFkX2RvbWFpbnM7CisJaW50MzJfdCByZXQ7CisKKwlpZiAob2JqLT5iYXNlLndy aXRlX2RvbWFpbiA9PSBJUFZSX0dFTV9ET01BSU5fQ1BVKQorCQlyZXR1cm4gMDsKKworCXJldCA9 IGlwdnJfZmVuY2Vfd2FpdChvYmotPmZlbmNlLCB0cnVlLCBmYWxzZSk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCW9sZF93cml0ZV9kb21haW4gPSBvYmotPmJhc2Uud3JpdGVfZG9tYWlu OworCW9sZF9yZWFkX2RvbWFpbnMgPSBvYmotPmJhc2UucmVhZF9kb21haW5zOworCisJLyogRmx1 c2ggdGhlIENQVSBjYWNoZSBpZiBpdCdzIHN0aWxsIGludmFsaWQuICovCisJaWYgKChvYmotPmJh c2UucmVhZF9kb21haW5zICYgSVBWUl9HRU1fRE9NQUlOX0NQVSkgPT0gMCkgeworCQlpcHZyX2dl bV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsKKworCQlvYmotPmJhc2UucmVhZF9kb21haW5z IHw9IElQVlJfR0VNX0RPTUFJTl9DUFU7CisJfQorCisJLyogSXQgc2hvdWxkIG5vdyBiZSBvdXQg b2YgYW55IG90aGVyIHdyaXRlIGRvbWFpbnMsIGFuZCB3ZSBjYW4gdXBkYXRlCisJICogdGhlIGRv bWFpbiB2YWx1ZXMgZm9yIG91ciBjaGFuZ2VzLgorCSAqLworCUJVR19PTigob2JqLT5iYXNlLndy aXRlX2RvbWFpbiAmIH5JUFZSX0dFTV9ET01BSU5fQ1BVKSAhPSAwKTsKKworCS8qIElmIHdlJ3Jl IHdyaXRpbmcgdGhyb3VnaCB0aGUgQ1BVLCB0aGVuIHRoZSBHUFUgcmVhZCBkb21haW5zIHdpbGwK KwkgKiBuZWVkIHRvIGJlIGludmFsaWRhdGVkIGF0IG5leHQgdXNlLgorCSAqLworCWlmICh3cml0 ZSkgeworCQlvYmotPmJhc2UucmVhZF9kb21haW5zID0gSVBWUl9HRU1fRE9NQUlOX0NQVTsKKwkJ b2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IElQVlJfR0VNX0RPTUFJTl9DUFU7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfZ2VtX29iamVjdF9wdXRfcGFnZXNfc2coc3Ry dWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qgc2dfcGFnZV9pdGVyIHNn X2l0ZXI7CisJaW50MzJfdCByZXQ7CisKKwlyZXQgPSBpcHZyX2dlbV9vYmplY3Rfc2V0X3RvX2Nw dV9kb21haW4ob2JqLCB0cnVlKTsKKwlpZiAocmV0KSB7CisJCS8qIEluIHRoZSBldmVudCBvZiBh IGRpc2FzdGVyLCBhYmFuZG9uIGFsbCBjYWNoZXMgYW5kCisJCSAqIGhvcGUgZm9yIHRoZSBiZXN0 LgorCQkgKi8KKwkJV0FSTl9PTihyZXQgIT0gLUVJTyk7CisJCWlwdnJfZ2VtX2NsZmx1c2hfb2Jq ZWN0KG9iaiwgdHJ1ZSk7CisJCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJUFZSX0dFTV9ET01B SU5fQ1BVOworCQlvYmotPmJhc2Uud3JpdGVfZG9tYWluID0gSVBWUl9HRU1fRE9NQUlOX0NQVTsK Kwl9CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoInN0YXJ0IHRvIGZyZWUgcGFnZXMuXG4iKTsKKwlm b3JfZWFjaF9zZ19wYWdlKG9iai0+c2dfdGFibGUtPnNnbCwKKwkJCSZzZ19pdGVyLCBvYmotPnNn X3RhYmxlLT5uZW50cywgMCkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNnX3BhZ2VfaXRlcl9w YWdlKCZzZ19pdGVyKTsKKworCQlpZiAob2JqLT5kaXJ0eSkKKwkJCXNldF9wYWdlX2RpcnR5KHBh Z2UpOworCQkvKiBuZWVkIHNldCBiYWNrIHRvIHdiIGJlZm9yZSByZWxlYXNlIHBhZ2UgKi8KKwkJ cmV0ID0gc2V0X3BhZ2VzX3diKHBhZ2UsIDEpOworCQlpZiAocmV0KQorCQkJSVBWUl9FUlJPUigi ZmFpbGVkIHRvIHNldCBwYWdlIGFzIHdiLlxuIik7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdl KTsKKwl9CisJb2JqLT5kaXJ0eSA9IDA7CisKKwlzZ19mcmVlX3RhYmxlKG9iai0+c2dfdGFibGUp OworCWtmcmVlKG9iai0+c2dfdGFibGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9p cHZyX2dlbV9vYmplY3Rfb3BzIGlwdnJfZ2VtX29iamVjdF9vcHMgPSB7CisJLmdldF9wYWdlcyA9 IGlwdnJfZ2VtX29iamVjdF9nZXRfcGFnZXNfc2csCisJLnB1dF9wYWdlcyA9IGlwdnJfZ2VtX29i amVjdF9wdXRfcGFnZXNfc2csCit9OworCisvKiBBbGwgdGhlIG5ldyBWTSBzdHVmZiAqLwordW5z aWduZWQgbG9uZyBpcHZyX2dlbV9vYmpfbW11X29mZnNldChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29i amVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IG9iai0+ YmFzZS5kZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBpcHZyX3ZtYSAqdm1hOworCisJc3RydWN0 IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0gPSAmZGV2X3ByaXYtPmFkZHJfc3BhY2U7CisKKwlCVUdf T04obGlzdF9lbXB0eSgmb2JqLT52bWFfbGlzdCkpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodm1h LCAmb2JqLT52bWFfbGlzdCwgdm1hX2xpbmspIHsKKwkJLyogdG9kbzogZm9yIHVzZXIgcHRyIG9i aiwgbmVlZCBjb25zaWRlciBvZmZzZXQgaW4gcGFnZSBpbiBmdXR1cmUgKi8KKwkJaWYgKHZtYS0+ dm0gPT0gdm0pIHsKKwkJCUlQVlJfREVCVUdfR0VORVJBTCgibm9kZSBzdGFydCBpcyAweCVseC5c biIsCisJCQkJCXZtYS0+bm9kZS5zdGFydCk7CisJCQlyZXR1cm4gdm1hLT5ub2RlLnN0YXJ0Owor CQl9CisJfQorCisJSVBWUl9FUlJPUigiZmFpbGVkIHRvIGZpbmQgdm1hIGNvcnJlc3BvbmRpbmcg dG8gdGhpcyBiby5cbiIpOworCXJldHVybiBJUFZSX0VSUl9PRkZTRVQoLUVJTlZBTCk7Cit9CisK K3ZvaWQgKmlwdnJfZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorewor CXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJ aWYgKGRldl9wcml2ID09IE5VTEwpCisJCUlQVlJfRVJST1IoImVycm9yOiBkZXZfcHJpdmUgaXMg TlVMTC5cbiIpOworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGRldl9wcml2LT5pcHZyX2JvX3Ns YWIsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKK30KKwordm9pZCBpcHZyX2dlbV9vYmplY3Rf ZnJlZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiA9IG9iai0+YmFzZS5kZXYtPmRldl9wcml2YXRlOworCWttZW1f Y2FjaGVfZnJlZShkZXZfcHJpdi0+aXB2cl9ib19zbGFiLCBvYmopOworfQorCisvKiBzb21lIGJv b2trZWVwaW5nICovCitzdGF0aWMgdm9pZAoraXB2cl9nZW1faW5mb19hZGRfb2JqKHN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgc2l6ZV90IHNpemUpCit7CisJc3Bpbl9sb2NrKCZk ZXZfcHJpdi0+aXB2cl9tbS5vYmplY3Rfc3RhdF9sb2NrKTsKKwlkZXZfcHJpdi0+aXB2cl9tbS5v YmplY3RfY291bnQrKzsKKwlkZXZfcHJpdi0+aXB2cl9tbS5vYmplY3RfbWVtb3J5ICs9IHNpemU7 CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5pcHZyX21tLm9iamVjdF9zdGF0X2xvY2spOworfQor CitzdGF0aWMgdm9pZAoraXB2cl9nZW1faW5mb19yZW1vdmVfb2JqKHN0cnVjdCBkcm1faXB2cl9w cml2YXRlICpkZXZfcHJpdiwgc2l6ZV90IHNpemUpCit7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+ aXB2cl9tbS5vYmplY3Rfc3RhdF9sb2NrKTsKKwlkZXZfcHJpdi0+aXB2cl9tbS5vYmplY3RfY291 bnQtLTsKKwlkZXZfcHJpdi0+aXB2cl9tbS5vYmplY3RfbWVtb3J5IC09IHNpemU7CisJc3Bpbl91 bmxvY2soJmRldl9wcml2LT5pcHZyX21tLm9iamVjdF9zdGF0X2xvY2spOworfQorCit2b2lkIGlw dnJfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmosCisJCQkJ Y29uc3Qgc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Rfb3BzICpvcHMpCit7CisJSU5JVF9MSVNU X0hFQUQoJm9iai0+Z2xvYmFsX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZvYmotPnZtYV9saXN0 KTsKKworCW9iai0+b3BzID0gb3BzOworCisJaXB2cl9nZW1faW5mb19hZGRfb2JqKG9iai0+YmFz ZS5kZXYtPmRldl9wcml2YXRlLCBvYmotPmJhc2Uuc2l6ZSk7Cit9CisKK3N0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICoKK2lwdnJfZ2VtX2FsbG9jX29iamVjdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqOwor CXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCWdmcF90IG1hc2s7CisKKwlvYmogPSBp cHZyX2dlbV9vYmplY3RfYWxsb2MoZGV2KTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiBO VUxMOworCW1lbXNldChvYmosIDAsIHNpemVvZigqb2JqKSk7CisKKwlpZiAoZHJtX2dlbV9vYmpl Y3RfaW5pdChkZXYsICZvYmotPmJhc2UsIHNpemUpICE9IDApIHsKKwkJaXB2cl9nZW1fb2JqZWN0 X2ZyZWUob2JqKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgm b2JqLT5ldmVudF9xdWV1ZSk7CisJYXRvbWljX3NldCgmb2JqLT5jcHVfd3JpdGVycywgMCk7CisJ LyogdG9kbzogbmVlZCBzZXQgY29ycmVjdCBtYXNrICovCisJbWFzayA9IEdGUF9ISUdIVVNFUiB8 IF9fR0ZQX1JFQ0xBSU1BQkxFOworCisJLyogaXB2ciBjYW5ub3QgcmVsb2NhdGUgb2JqZWN0cyBh Ym92ZSA0R2lCLiAqLworCW1hc2sgJj0gfl9fR0ZQX0hJR0hNRU07CisJbWFzayB8PSBfX0dGUF9E TUEzMjsKKworCW1hcHBpbmcgPSBmaWxlX2lub2RlKG9iai0+YmFzZS5maWxwKS0+aV9tYXBwaW5n OworCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIG1hc2spOworCisJaXB2cl9nZW1fb2Jq ZWN0X2luaXQob2JqLCAmaXB2cl9nZW1fb2JqZWN0X29wcyk7CisKKwlvYmotPmJhc2Uud3JpdGVf ZG9tYWluID0gSVBWUl9HRU1fRE9NQUlOX0NQVTsKKwlvYmotPmJhc2UucmVhZF9kb21haW5zID0g SVBWUl9HRU1fRE9NQUlOX0NQVTsKKworCXJldHVybiBvYmo7Cit9CisKK2ludDMyX3QgaXB2cl9n ZW1fbW11X2JpbmRfb2JqZWN0KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJ c3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gb2JqLT5iYXNlLmRldi0+ZGV2X3By aXZhdGU7CisJdWludDMyX3QgcmV0LCB0eXBlID0gMDsKKwljb25zdCB1bnNpZ25lZCBsb25nIGVu dHJ5ID0gaXB2cl9nZW1fb2JqX21tdV9vZmZzZXQob2JqKTsKKworCWlmIChJUFZSX0lTX0VSUihl bnRyeSkpIHsKKwkJcmV0dXJuIElQVlJfT0ZGU0VUX0VSUihlbnRyeSk7CisJfQorCisJSVBWUl9E RUJVR19HRU5FUkFMKCJlbnRyeSBpcyAweCVseCwgc2l6ZSBpcyAlenUsIG5lbnRzIGlzICVkLlxu IiwKKwkJCWVudHJ5LCBvYmotPmJhc2Uuc2l6ZSwgb2JqLT5zZ190YWJsZS0+bmVudHMpOworCisJ LyogdG9kbzogaXQgaXMgYmV0dGVyIGFsc28gcGFzcyBSTywgV08gaW5mbyAqLworCXR5cGUgPSAo b2JqLT5jYWNoZV9sZXZlbCA9PSBJUFZSX0NBQ0hFX1dCKSA/CisJCQkJCQlJUFZSX01NVV9DQUNI RURfTUVNT1JZIDogMDsKKworCS8qIHNob3VsZCBub3QgdXNlIGRldl9wcml2LT5wZl9wZCAqLwor CWlmIChmYWtlX2JvX2RlYnVnKSB7CisJCXJldCA9IGlwdnJfbW11X2luc2VydF9wYWdlcyhkZXZf cHJpdi0+bW11LT5kZWZhdWx0X3BkLAorCQkJb2JqLT5mYWtlX3BhZ2VzLAorCQkJZW50cnksIG9i ai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQsCisJCQkwLAorCQkJMCwgdHlwZSk7CisJfSBlbHNl IHsKKwkJdWludDMyX3QgaSA9IDA7CisJCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJCXN0cnVjdCBz Z19wYWdlX2l0ZXIgc2dfaXRlcjsKKwkJcGFnZXMgPSBkcm1fbWFsbG9jX2FiKG9iai0+YmFzZS5z aXplID4+IFBBR0VfU0hJRlQsCisJCQkJc2l6ZW9mKCpwYWdlcykpOworCQlpZiAocGFnZXMgPT0g TlVMTCkgeworCQkJSVBWUl9FUlJPUigiRmFpbGVkIHRvIGdldCBzcGFjZSBmb3IgcGFnZXNcbiIp OworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZm9yX2VhY2hfc2dfcGFnZShvYmotPnNnX3Rh YmxlLT5zZ2wsICZzZ19pdGVyLAorCQkJCW9iai0+c2dfdGFibGUtPm5lbnRzLCAwKQorCQkJcGFn ZXNbaSsrXSA9IHNnX3BhZ2VfaXRlcl9wYWdlKCZzZ19pdGVyKTsKKwkJcmV0ID0gaXB2cl9tbXVf aW5zZXJ0X3BhZ2VzKGRldl9wcml2LT5tbXUtPmRlZmF1bHRfcGQsCisJCQlwYWdlcywgZW50cnks IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQsCisJCQkwLCAwLCB0eXBlKTsKKwkJaWYgKHBh Z2VzKQorCQkJZHJtX2ZyZWVfbGFyZ2UocGFnZXMpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitp bnQzMl90IGlwdnJfZ2VtX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKKwkJCXVpbnQ2NF90IHNpemUsIHVpbnQzMl90IHRpbGluZywgdWlu dDMyX3QgY2FjaGVfbGV2ZWwsCisJCQl1aW50NjRfdCAqcnNpemVfcCwgdWludDMyX3QgKmhhbmRs ZV9wLAorCQkJdWludDY0X3QgKm9mZnNldF9wKQoreworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0ICpvYmo7CisJaW50MzJfdCByZXQ7CisJdWludDMyX3QgaGFuZGxlOworCXN0cnVjdCBkcm1f aXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJSVBWUl9ERUJVR19H RU5FUkFMKCJjcmVhdGUgYm8gc2l6ZSBpcyAlbGxkLCB0aWxpbmcgaXMgJWQsICIKKwkJCSJjYWNo ZSBsZXZlbCBpcyAlZC5cbiIsCisJCQlzaXplLCB0aWxpbmcsIGNhY2hlX2xldmVsKTsKKworCXNp emUgPSByb3VuZHVwKHNpemUsIFBBR0VfU0laRSk7CisJaWYgKHNpemUgPT0gMCkKKwkJcmV0dXJu IC1FSU5WQUw7CisJKnJzaXplX3AgPSBzaXplOworCisJLyogQWxsb2NhdGUgdGhlIG5ldyBvYmpl Y3QgKi8KKwlvYmogPSBpcHZyX2dlbV9hbGxvY19vYmplY3QoZGV2LCBzaXplKTsKKwlpZiAob2Jq ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW9iai0+ZHJ2X25hbWUgPSAiaXB2ciI7CisJ b2JqLT5mZW5jZSA9IE5VTEw7CisJb2JqLT50aWxpbmcgPSB0aWxpbmc7CisJb2JqLT5jYWNoZV9s ZXZlbCA9IGNhY2hlX2xldmVsOworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlX3By aXYsICZvYmotPmJhc2UsICZoYW5kbGUpOworCS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2Nh dGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICovCisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Vf dW5sb2NrZWQoJm9iai0+YmFzZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkqaGFuZGxl X3AgPSBoYW5kbGU7CisKKwkvKiBmb3JjZSB0byBnZXQgcGFnZXMgYXQgYWxsb2NhdGlvbiBzdGFn ZSAqLworCXJldCA9IGlwdnJfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKG9iaiwgJmRldl9wcml2LT5h ZGRyX3NwYWNlLCA0MDk2KTsKKwlpZiAocmV0KSB7CisJCWlwdnJfZ2VtX2ZyZWVfb2JqZWN0KCZv YmotPmJhc2UpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGlwdnJfZ2VtX21tdV9iaW5k X29iamVjdChvYmopOworCWlmIChyZXQpIHsKKwkJaXB2cl9nZW1fZnJlZV9vYmplY3QoJm9iai0+ YmFzZSk7CisJCXJldHVybiByZXQ7CisJfQorCSpvZmZzZXRfcCA9IGlwdnJfZ2VtX29ial9tbXVf b2Zmc2V0KG9iaik7CisJaWYgKElQVlJfSVNfRVJSKCpvZmZzZXRfcCkpCisJCXJldHVybiBJUFZS X09GRlNFVF9FUlIoKm9mZnNldF9wKTsKKworCUlQVlJfREVCVUdfR0VORVJBTCgiYm8gY3JlYXRl IGRvbmUsIGdwdSBvZmZzZXQ6IDB4JWxseC5cbiIsICpvZmZzZXRfcCk7CisKKwl0cmFjZV9pcHZy X2dlbV9jcmVhdGUob2JqLCAqb2Zmc2V0X3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICoKK2lwdnJfZ2VtX29ial9jcmVhdGVfYW5kX2JpbmQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpCit7CisJdWludDMyX3QgcmV0OworCXN0cnVj dCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRl dl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNpemUgPSByb3VuZHVwKHNpemUsIFBBR0Vf U0laRSk7CisJaWYgKHNpemUgPT0gMCkgeworCQlJUFZSX0VSUk9SKCJQYXNzZWQgc2l6ZSBpcyAw LCBub3QgY29ycmVjdC5cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBBbGxvY2F0ZSB0 aGUgbmV3IG9iamVjdCAqLworCW9iaiA9IGlwdnJfZ2VtX2FsbG9jX29iamVjdChkZXYsIHNpemUp OworCWlmIChvYmogPT0gTlVMTCkgeworCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUg aXB2ciBvYmplY3QuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0ID0gaXB2cl9nZW1f b2JqZWN0X2JpbmRfdG9fdm0ob2JqLCAmZGV2X3ByaXYtPmFkZHJfc3BhY2UsIDQwOTYpOworCWlm IChyZXQpIHsKKwkJSVBWUl9FUlJPUigiRmFpbGVkIHRvIGJpbmQgb2JqIHRvIHZtLlxuIik7CisJ CWlwdnJfZ2VtX2ZyZWVfb2JqZWN0KCZvYmotPmJhc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJ cmV0ID0gaXB2cl9nZW1fbW11X2JpbmRfb2JqZWN0KG9iaik7CisJaWYgKHJldCkgeworCQlJUFZS X0VSUk9SKCJGYWlsZWQgdG8gYmluZCBvYmogdG8gbW11LlxuIik7CisJCWlwdnJfZ2VtX2ZyZWVf b2JqZWN0KCZvYmotPmJhc2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gb2JqOwor fQorCitzdHJ1Y3QgaXB2cl92bWEgKmlwdnJfZ2VtX29ial90b192bWEoc3RydWN0IGRybV9pcHZy X2dlbV9vYmplY3QgKm9iaiwKKwkJCQkJc3RydWN0IGlwdnJfYWRkcmVzc19zcGFjZSAqdm0pCit7 CisJc3RydWN0IGlwdnJfdm1hICp2bWE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZvYmot PnZtYV9saXN0LCB2bWFfbGluaykKKwkJaWYgKHZtYS0+dm0gPT0gdm0pCisJCQlyZXR1cm4gdm1h OworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBpcHZyX3ZtYSAqaXB2cl9nZW1fdm1hX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLAorCQkJCQlzdHJ1Y3QgaXB2cl9h ZGRyZXNzX3NwYWNlICp2bSkKK3sKKwlzdHJ1Y3QgaXB2cl92bWEgKnZtYSA9IGt6YWxsb2Moc2l6 ZW9mKCp2bWEpLCBHRlBfS0VSTkVMKTsKKwlpZiAodm1hID09IE5VTEwpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJnZtYS0+dm1hX2xpbmspOworCUlOSVRf TElTVF9IRUFEKCZ2bWEtPm1tX2xpc3QpOworCXZtYS0+dm0gPSB2bTsKKwl2bWEtPm9iaiA9IG9i ajsKKworCWxpc3RfYWRkX3RhaWwoJnZtYS0+dm1hX2xpbmssICZvYmotPnZtYV9saXN0KTsKKwor CXJldHVybiB2bWE7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfZ2VtX3ZtYV9kZXN0cm95KHN0cnVj dCBpcHZyX3ZtYSAqdm1hKQoreworCVdBUk5fT04odm1hLT5ub2RlLmFsbG9jYXRlZCk7CisJbGlz dF9kZWwoJnZtYS0+dm1hX2xpbmspOworCWtmcmVlKHZtYSk7Cit9CisKK3N0cnVjdCBpcHZyX3Zt YSAqCitpcHZyX2dlbV9vYmpfbG9va3VwX29yX2NyZWF0ZV92bWEoc3RydWN0IGRybV9pcHZyX2dl bV9vYmplY3QgKm9iaiwKKwkJCQkJCXN0cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZtKQorewor CXN0cnVjdCBpcHZyX3ZtYSAqdm1hOworCisJdm1hID0gaXB2cl9nZW1fb2JqX3RvX3ZtYShvYmos IHZtKTsKKwlpZiAoIXZtYSkKKwkJdm1hID0gaXB2cl9nZW1fdm1hX2NyZWF0ZShvYmosIHZtKTsK KworCXJldHVybiB2bWE7Cit9CisKK3ZvaWQgaXB2cl9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhzdHJ1 Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCUJVR19PTihvYmotPnNnX3RhYmxlID09 IE5VTEwpOworCW9iai0+cGFnZXNfcGluX2NvdW50Kys7Cit9CisKK3ZvaWQgaXB2cl9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJQlVH X09OKG9iai0+cGFnZXNfcGluX2NvdW50ID09IDApOworCW9iai0+cGFnZXNfcGluX2NvdW50LS07 Cit9CisKK3N0YXRpYyBib29sIGlwdnJfZ2VtX3ZhbGlkX21tdV9zcGFjZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRybV9tbV9ub2RlICptbXVfc3BhY2UsCisJCQkJCQl1 aW50MzJfdCBjYWNoZV9sZXZlbCkKK3sKKwlzdHJ1Y3QgZHJtX21tX25vZGUgKm90aGVyOworCisJ aWYgKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQobW11X3NwYWNlKSkKKwkJcmV0dXJuIHRydWU7CisK KwlpZiAobGlzdF9lbXB0eSgmbW11X3NwYWNlLT5ub2RlX2xpc3QpKQorCQlyZXR1cm4gdHJ1ZTsK KworCW90aGVyID0gbGlzdF9lbnRyeShtbXVfc3BhY2UtPm5vZGVfbGlzdC5wcmV2LAorCQkJc3Ry dWN0IGRybV9tbV9ub2RlLCBub2RlX2xpc3QpOworCWlmIChvdGhlci0+YWxsb2NhdGVkICYmICFv dGhlci0+aG9sZV9mb2xsb3dzICYmCisJCQkJb3RoZXItPmNvbG9yICE9IGNhY2hlX2xldmVsKQor CQlyZXR1cm4gZmFsc2U7CisKKwlvdGhlciA9IGxpc3RfZW50cnkobW11X3NwYWNlLT5ub2RlX2xp c3QubmV4dCwKKwkJCXN0cnVjdCBkcm1fbW1fbm9kZSwgbm9kZV9saXN0KTsKKwlpZiAob3RoZXIt PmFsbG9jYXRlZCAmJiAhbW11X3NwYWNlLT5ob2xlX2ZvbGxvd3MgJiYKKwkJCQlvdGhlci0+Y29s b3IgIT0gY2FjaGVfbGV2ZWwpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQor CisvKioKKyAqIEZpbmRzIGZyZWUgc3BhY2UgaW4gdGhlIE1NVSBhcGVydHVyZSBhbmQgYmluZHMg dGhlIG9iamVjdCB0aGVyZS4KKyAqLworaW50MzJfdCBpcHZyX2dlbV9vYmplY3RfYmluZF90b192 bShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqLAorCQkJCQlzdHJ1Y3QgaXB2cl9hZGRy ZXNzX3NwYWNlICp2bSwKKwkJCQkJdWludDMyX3QgYWxpZ25tZW50KQoreworCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYgPSBvYmotPmJhc2UuZGV2OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGlwdnJfdm1hICp2bWE7CisJdW5z aWduZWQgbG9uZyBzdGFydCwgZW5kLCBzaXplOworCWludDMyX3QgcmV0OworCXN0cnVjdCBkcm1f bW0gKm1tOworCWlmIChvYmotPnRpbGluZykgeworCQltbSA9ICZ2bS0+dGlsaW5nX21tOworCQlz dGFydCA9IHZtLT50aWxpbmdfc3RhcnQ7CisJCWVuZCA9IHZtLT50aWxpbmdfc3RhcnQgKyB2bS0+ dGlsaW5nX3RvdGFsOworCX0gZWxzZSB7CisJCW1tID0gJnZtLT5saW5lYXJfbW07CisJCXN0YXJ0 ID0gdm0tPmxpbmVhcl9zdGFydDsKKwkJZW5kID0gdm0tPmxpbmVhcl9zdGFydCArIHZtLT5saW5l YXJfdG90YWw7CisJfQorCXNpemUgPSBvYmotPmJhc2Uuc2l6ZTsKKworCXJldCA9IGlwdnJfZ2Vt X29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwlpZiAocmV0KSB7CisJCUlQVlJfRVJST1IoImZhaWxl ZCB0byBjYWxsIGlwdnJfZ2VtX29iamVjdF9nZXRfcGFnZXMuXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlpcHZyX2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7CisKKwl2bWEgPSBpcHZyX2dl bV9vYmpfbG9va3VwX29yX2NyZWF0ZV92bWEob2JqLCB2bSk7CisJaWYgKElTX0VSUih2bWEpKSB7 CisJCXJldCA9IFBUUl9FUlIodm1hKTsKKwkJSVBWUl9FUlJPUigiZmFpbGVkIG9uIGlwdnJfZ2Vt X29ial9sb29rdXBfb3JfY3JlYXRlX3ZtYS5cbiIpOworCQlnb3RvIGVycl91bnBpbjsKKwl9CisK KwkvKiBGb3Igbm93IHdlIG9ubHkgZXZlciB1c2UgMSB2bWEgcGVyIG9iamVjdCAqLworCUJVR19P TighbGlzdF9pc19zaW5ndWxhcigmb2JqLT52bWFfbGlzdCkpOworCisJSVBWUl9ERUJVR19HRU5F UkFMKCJjYWxsIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljLlxuIik7CisJcmV0 ID0gZHJtX21tX2luc2VydF9ub2RlX2luX3JhbmdlX2dlbmVyaWMobW0sICZ2bWEtPm5vZGUsIHNp emUsCisJCQkJCQlhbGlnbm1lbnQsIG9iai0+Y2FjaGVfbGV2ZWwsCisJCQkJCQlzdGFydCwgZW5k LAorCQkJCQkJRFJNX01NX1NFQVJDSF9ERUZBVUxULAorCQkJCQkJRFJNX01NX0NSRUFURV9ERUZB VUxUKTsKKwlpZiAocmV0KSB7CisJCS8qCisJCSAqIGlwdnIgZG9lc24ndCBzdXBwb3J0IHNocmlu ayBzbyBmYXIgc2luY2UgaXQgaGFzIDRHaUIgYWRkciBzcGFjZQorCQkgKi8KKwkJSVBWUl9FUlJP UigiZmFpbGVkIG9uIGRybV9tbV9pbnNlcnRfbm9kZV9pbl9yYW5nZV9nZW5lcmljLlxuIik7CisJ CWdvdG8gZXJyX2ZyZWVfdm1hOworCX0KKworCWlmICh1bmxpa2VseSghaXB2cl9nZW1fdmFsaWRf bW11X3NwYWNlKGRldiwgJnZtYS0+bm9kZSwKKwkJCQkJb2JqLT5jYWNoZV9sZXZlbCkpKSB7CisJ CXJldCA9IC1FSU5WQUw7CisJCUlQVlJfRVJST1IoImZhaWxlZCBvbiBpcHZyX2dlbV92YWxpZF9t bXVfc3BhY2UuXG4iKTsKKwkJZ290byBlcnJfcmVtb3ZlX25vZGU7CisJfQorCisJbGlzdF9tb3Zl X3RhaWwoJm9iai0+Z2xvYmFsX2xpc3QsICZkZXZfcHJpdi0+aXB2cl9tbS5ib3VuZF9saXN0KTsK KwlsaXN0X2FkZF90YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bS0+aW5hY3RpdmVfbGlzdCk7CisKKwkv KiBpcHZyX2dlbV92ZXJpZnlfZ3R0IGNhbiBiZSBhZGRlZCBoZXJlIGZvciBkZWJ1ZyAqLworCXJl dHVybiAwOworCitlcnJfcmVtb3ZlX25vZGU6CisJZHJtX21tX3JlbW92ZV9ub2RlKCZ2bWEtPm5v ZGUpOworZXJyX2ZyZWVfdm1hOgorCWlwdnJfZ2VtX3ZtYV9kZXN0cm95KHZtYSk7CitlcnJfdW5w aW46CisJaXB2cl9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKG9iaik7CisJcmV0dXJuIHJldDsKK30K Kwordm9pZCAqaXB2cl9nZW1fb2JqZWN0X3ZtYXAoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Qg Km9iaikKK3sKKwlpbnQzMl90IGk7CisJdm9pZCAqYWRkciA9IE5VTEw7CisJc3RydWN0IHNnX3Bh Z2VfaXRlciBzZ19pdGVyOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisKKwlpZiAoZmFrZV9ib19k ZWJ1ZykgeworCQlhZGRyID0gdm1hcChvYmotPmZha2VfcGFnZXMsIG9iai0+YmFzZS5zaXplIC8g NDA5NiwKKwkJCVZNX01BUCwgcGdwcm90X3dyaXRlY29tYmluZShQQUdFX0tFUk5FTCkpOworCQlp ZiAoYWRkciA9PSBOVUxMKSB7CisJCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gdm1hcCBwYWdlc1xu Iik7CisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJfQorCQlyZXR1cm4gYWRkcjsKKwl9 CisKKwlwYWdlcyA9IGRybV9tYWxsb2NfYWIob2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVCwg c2l6ZW9mKCpwYWdlcykpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCUlQVlJfRVJST1IoIkZh aWxlZCB0byBnZXQgc3BhY2UgZm9yIHBhZ2VzXG4iKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJ aSA9IDA7CisJZm9yX2VhY2hfc2dfcGFnZShvYmotPnNnX3RhYmxlLT5zZ2wsICZzZ19pdGVyLAor CQkJb2JqLT5zZ190YWJsZS0+bmVudHMsIDApIHsKKwkJcGFnZXNbaV0gPSBzZ19wYWdlX2l0ZXJf cGFnZSgmc2dfaXRlcik7CisJCWkrKzsKKwl9CisKKwlhZGRyID0gdm1hcChwYWdlcywgaSwgVk1f TUFQLCBwZ3Byb3Rfd3JpdGVjb21iaW5lKFBBR0VfS0VSTkVMKSk7CisJaWYgKGFkZHIgPT0gTlVM TCkgeworCQlJUFZSX0VSUk9SKCJGYWlsZWQgdG8gdm1hcCBwYWdlc1xuIik7CisJCWdvdG8gZmlu aXNoOworCX0KKworZmluaXNoOgorCWlmIChwYWdlcykKKwkJZHJtX2ZyZWVfbGFyZ2UocGFnZXMp OworCXJldHVybiBhZGRyOworfQorCitpbnQzMl90IGlwdnJfZ2VtX29iamVjdF9maW5pc2hfZ3B1 KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50MzJfdCByZXQgPSAwOwor CisJaWYgKChvYmotPmJhc2UucmVhZF9kb21haW5zICYgSVBWUl9HRU1fRE9NQUlOX0dQVSkgPT0g MCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuc3VyZSB0aGF0IHdlIGludmFsaWRhdGUgdGhlIEdQ VSdzIGNhY2hlcyBhbmQgVExCcy4gKi8KKwlvYmotPmJhc2UucmVhZF9kb21haW5zICY9IH5JUFZS X0dFTV9ET01BSU5fR1BVOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXB2cl9nZW1fcmVs ZWFzZV9tbWFwIC0gcmVtb3ZlIHBoeXNpY2FsIHBhZ2UgbWFwcGluZ3MKKyAqIEBvYmo6IG9iaiBp biBxdWVzdGlvbgorICoKKyAqIElmIHRoZSBvYmplY3QgaGFzIGJlZW4gbW92ZWQgb3V0IG9mIHRo ZSBhcGVydHVyZSwKKyAqIHRoZW4gcGFnZXMgbWFwcGVkIGludG8gdXNlcnNwYWNlIG11c3QgYmUg cmV2b2tlZC4gUmVtb3ZpbmcgdGhlCisgKiBtYXBwaW5nIHdpbGwgdGhlbiB0cmlnZ2VyIGEgcGFn ZSBmYXVsdCBvbiB0aGUgbmV4dCB1c2VyIGFjY2VzcywgYWxsb3dpbmcKKyAqIGZpeHVwIGJ5IGlw dnJfZ2VtX2ZhdWx0KCkuCisgKi8KK3ZvaWQgaXB2cl9nZW1fcmVsZWFzZV9tbWFwKHN0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJLyogdG9kbzoKKwkgKiB3aWxsIG5vdCBjYWxs IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0LAorCSAqIGlwdnIgZG9udCcgbmVlZCB1c2UgbW1h cCBmb3IgZGV2IG1hcAorCSAqLworCWRybV92bWFfbm9kZV91bm1hcCgmb2JqLT5iYXNlLnZtYV9u b2RlLAorCQkJICAgb2JqLT5iYXNlLmRldi0+YW5vbl9pbm9kZS0+aV9tYXBwaW5nKTsKKworCS8q IHRvZG86CisJICogaXQgc2VlbXMgaXQgbmVlZCBjYXVzZSBrZXJuZWwgcGFuaWMsIGRpc2FibGUg dm1fbXVubWFwIGFzIHdvcmthcm91bmQKKwkgKi8KKwlpZiAob2JqLT5tbWFwX2Jhc2UpIHsKKwkJ SVBWUl9ERUJVR19HRU5FUkFMKCJjYWxsIHZtX211bm1hcCB0byB1bm1hcCBibywgYmFzZSBpcyAw eCVseC5cbiIsCisJCQkJb2JqLT5tbWFwX2Jhc2UpOworCQlvYmotPm1tYXBfYmFzZSA9IDA7CisJ fQorfQorCitpbnQzMl90IGlwdnJfZ2VtX29iamVjdF92bWFfdW5iaW5kKHN0cnVjdCBpcHZyX3Zt YSAqdm1hKQoreworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmogPSB2bWEtPm9iajsK Kwlkcm1faXB2cl9wcml2YXRlX3QgKmRldl9wcml2ID0gb2JqLT5iYXNlLmRldi0+ZGV2X3ByaXZh dGU7CisJdW5zaWduZWQgbG9uZyBlbnRyeTsKKwlpbnQzMl90IHJldDsKKworCWlmIChsaXN0X2Vt cHR5KCZ2bWEtPnZtYV9saW5rKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRybV9tbV9ub2RlX2Fs bG9jYXRlZCgmdm1hLT5ub2RlKSkKKwkJZ290byBkZXN0cm95OworCisJaWYgKG9iai0+cGluX2Nv dW50KQorCQlyZXR1cm4gLUVCVVNZOworCisJQlVHX09OKG9iai0+c2dfdGFibGUgPT0gTlVMTCk7 CisJZW50cnkgPSBpcHZyX2dlbV9vYmpfbW11X29mZnNldChvYmopOworCWlmIChJUFZSX0lTX0VS UihlbnRyeSkpCisJCXJldHVybiBJUFZSX09GRlNFVF9FUlIoZW50cnkpOworCisJcmV0ID0gaXB2 cl9nZW1fb2JqZWN0X2ZpbmlzaF9ncHUob2JqKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJLyogQ29udGludWUgb24gaWYgd2UgZmFpbCBkdWUgdG8gRUlPLCB0aGUgR1BVIGlzIGh1bmcg c28gd2UKKwkgKiBzaG91bGQgYmUgc2FmZSBhbmQgd2UgbmVlZCB0byBjbGVhbnVwIG9yIGVsc2Ug d2UgbWlnaHQKKwkgKiBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiB0aHJvdWdoIHVzZS1hZnRlci1m cmVlLgorCSAqLworCWlwdnJfZ2VtX3JlbGVhc2VfbW1hcChvYmopOworCisJLyogcmVtb3ZlIHRo ZSBibyBmcm9tIHRoZSBtbXUgKi8KKwlpcHZyX21tdV9yZW1vdmVfcGFnZXMoZGV2X3ByaXYtPm1t dS0+ZGVmYXVsdF9wZCwgZW50cnksCisJCQlvYmotPmJhc2Uuc2l6ZSA+PiBQQUdFX1NISUZULCAw LCAwKTsKKworCWlwdnJfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhvYmopOworCisJbGlzdF9kZWwo JnZtYS0+bW1fbGlzdCk7CisKKwlkcm1fbW1fcmVtb3ZlX25vZGUoJnZtYS0+bm9kZSk7CisKK2Rl c3Ryb3k6CisJaXB2cl9nZW1fdm1hX2Rlc3Ryb3kodm1hKTsKKworCS8qIFNpbmNlIHRoZSB1bmJv dW5kIGxpc3QgaXMgZ2xvYmFsLCBvbmx5IG1vdmUgdG8gdGhhdCBsaXN0IGlmCisJICogbm8gbW9y ZSBWTUFzIGV4aXN0LgorCSAqIE5COiBVbnRpbCB3ZSBoYXZlIHJlYWwgVk1BcyB0aGVyZSB3aWxs IG9ubHkgZXZlciBiZSBvbmUgKi8KKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZvYmotPnZtYV9saXN0 KSk7CisJaWYgKGxpc3RfZW1wdHkoJm9iai0+dm1hX2xpc3QpKQorCQlsaXN0X21vdmVfdGFpbCgm b2JqLT5nbG9iYWxfbGlzdCwKKwkJCSZkZXZfcHJpdi0+aXB2cl9tbS51bmJvdW5kX2xpc3QpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfZ2VtX29iamVjdF9mcmVlX21tYXBf b2Zmc2V0KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJZHJtX2dlbV9mcmVl X21tYXBfb2Zmc2V0KCZvYmotPmJhc2UpOworfQorCisvKioKKyAqIENhbGxlZCBhZnRlciB0aGUg bGFzdCByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBoYXMgYmVlbiBsb3N0LgorICogTXVzdCBiZSBj YWxsZWQgaG9sZGluZyBzdHJ1Y3RfIG11dGV4CisgKgorICogRnJlZXMgdGhlIG9iamVjdAorICov CitzdGF0aWMgdm9pZCBpcHZyX19nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGtyZWYgKmtyZWYpCit7 CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqID0gKHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqKWtyZWY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGdlbV9vYmotPmRldjsKKwlzdHJ1 Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqID0gdG9faXB2cl9ibyhnZW1fb2JqKTsKKwlkcm1f aXB2cl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaXB2 cl92bWEgKnZtYSwgKm5leHQ7CisJaW50MzJfdCByZXQ7CisKKwkvLyBGSVhNRTogY29uc2lkZXIg dW5sb2NrZWQgY2FzZQorCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZGV2LT5zdHJ1Y3RfbXV0 ZXgpKTsKKworCWlmIChvYmotPmZlbmNlKSB7CisJCXJldCA9IGlwdnJfZmVuY2Vfd2FpdChvYmot PmZlbmNlLCB0cnVlLCBmYWxzZSk7CisJCWlmIChyZXQpCisJCQlJUFZSX0RFQlVHX1dBUk4oIkZh aWxlZCB0byB3YWl0IGZlbmNlIHNpZ25hbGVkLlxuIik7CisJfQorCisJb2JqLT5waW5fY291bnQg PSAwOworCS8qIE5COiAwIG9yIDEgZWxlbWVudHMgKi8KKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZv YmotPnZtYV9saXN0KSAmJgorCQkhbGlzdF9pc19zaW5ndWxhcigmb2JqLT52bWFfbGlzdCkpOwor CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2bWEsIG5leHQsICZvYmotPnZtYV9saXN0LCB2bWFf bGluaykgeworCQlpbnQgcmV0ID0gaXB2cl9nZW1fb2JqZWN0X3ZtYV91bmJpbmQodm1hKTsKKwkJ aWYgKFdBUk5fT04ocmV0ID09IC1FUkVTVEFSVFNZUykpIHsKKwkJCWJvb2wgd2FzX2ludGVycnVw dGlibGU7CisKKwkJCXdhc19pbnRlcnJ1cHRpYmxlID0gZGV2X3ByaXYtPmlwdnJfbW0uaW50ZXJy dXB0aWJsZTsKKwkJCWRldl9wcml2LT5pcHZyX21tLmludGVycnVwdGlibGUgPSBmYWxzZTsKKwor CQkJV0FSTl9PTihpcHZyX2dlbV9vYmplY3Rfdm1hX3VuYmluZCh2bWEpKTsKKworCQkJZGV2X3By aXYtPmlwdnJfbW0uaW50ZXJydXB0aWJsZSA9IHdhc19pbnRlcnJ1cHRpYmxlOworCQl9CisJfQor CisJaWYgKFdBUk5fT04ob2JqLT5wYWdlc19waW5fY291bnQpKQorCQlvYmotPnBhZ2VzX3Bpbl9j b3VudCA9IDA7CisJaXB2cl9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOworCWlwdnJfZ2VtX29i amVjdF9mcmVlX21tYXBfb2Zmc2V0KG9iaik7CisKKwlCVUdfT04ob2JqLT5zZ190YWJsZSk7CisK KwlpZiAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gpCisJCWRybV9wcmltZV9nZW1fZGVzdHJveSgm b2JqLT5iYXNlLCBOVUxMKTsKKworCWlmIChvYmotPm9wcy0+cmVsZWFzZSkKKwkJb2JqLT5vcHMt PnJlbGVhc2Uob2JqKTsKKworCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJm9iai0+YmFzZSk7CisJ aXB2cl9nZW1faW5mb19yZW1vdmVfb2JqKGRldl9wcml2LCBvYmotPmJhc2Uuc2l6ZSk7CisKKwl0 cmFjZV9pcHZyX19nZW1fZnJlZV9vYmplY3Qob2JqKTsKKworCWlwdnJfZ2VtX29iamVjdF9mcmVl KG9iaik7Cit9CisKKy8qCisgKiBXaGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBhIEdFTSBvYmpl Y3QgaXMgcmVsZWFzZWQgdGhlIEdFTSBjb3JlIGNhbGxzIHRoZQorICogZHJtX2RyaXZlciAuZ2Vt X2ZyZWVfb2JqZWN0KCkgb3BlcmF0aW9uLiBUaGF0IG9wZXJhdGlvbiBpcyBtYW5kYXRvcnkgZm9y CisgKiBHRU0tZW5hYmxlZCBkcml2ZXJzIGFuZCBtdXN0IGZyZWUgdGhlIEdFTSBvYmplY3QgYW5k IGFsbCBhc3NvY2lhdGVkCisgKiByZXNvdXJjZXMuCisqLwordm9pZCBpcHZyX2dlbV9mcmVlX29i amVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbV9vYmopCit7CisJaXB2cl9fZ2VtX2ZyZWVf b2JqZWN0KChzdHJ1Y3Qga3JlZiAqKWdlbV9vYmopOworfQorCitzdGF0aWMgc3RydWN0CitpcHZy X2dlbV91c2VycHRyX29iamVjdCAqdG9fdXNlcnB0cl9vYmplY3Qoc3RydWN0IGRybV9pcHZyX2dl bV9vYmplY3QgKm9iaikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGlwdnJf Z2VtX3VzZXJwdHJfb2JqZWN0LCBnZW0pOworfQorCitzdGF0aWMgaW50MzJfdCBpcHZyX2dlbV91 c2VycHRyX2dldF9wYWdlc19zZyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKSB7CisJ c3RydWN0IGlwdnJfZ2VtX3VzZXJwdHJfb2JqZWN0ICp2bWFwID0gdG9fdXNlcnB0cl9vYmplY3Qo b2JqKTsKKwlpbnQzMl90IG51bV9wYWdlcyA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7 CisJc3RydWN0IHNnX3RhYmxlICpzdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXN0cnVj dCBwYWdlICoqcHZlYzsKKwlpbnQzMl90IG4sIHBpbm5lZCwgcmV0OworCisJaWYgKCFhY2Nlc3Nf b2sodm1hcC0+cmVhZF9vbmx5ID8gVkVSSUZZX1JFQUQgOiBWRVJJRllfV1JJVEUsCisJCSAgICAg ICAoY2hhciBfX3VzZXIgKil2bWFwLT51c2VyX3B0ciwgdm1hcC0+dXNlcl9zaXplKSkgeworCQlJ UFZSX0VSUk9SKCJhY2Nlc3Nfb2sgY2hlY2sgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUZBVUxU OworCX0KKworCS8qIElmIHVzZXJzcGFjZSBzaG91bGQgZW5naW5lZXIgdGhhdCB0aGVzZSBwYWdl cyBhcmUgcmVwbGFjZWQgaW4KKwkgKiB0aGUgdm1hIGJldHdlZW4gdXMgYmluZGluZyB0aGlzIHBh Z2UgaW50byB0aGUgR1RUIGFuZCBjb21wbGV0aW9uCisJICogb2YgcmVuZGVyaW5nLi4uIFRoZWly IGxvc3MuIElmIHRoZXkgY2hhbmdlIHRoZSBtYXBwaW5nIG9mIHRoZWlyCisJICogcGFnZXMgdGhl eSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBibyB0byBwb2ludCB0byB0aGUgbmV3IHZtYS4KKwkgKgor CSAqIEhvd2V2ZXIsIHRoYXQgc3RpbGwgbGVhdmVzIG9wZW4gdGhlIHBvc3NpYmlsaXR5IG9mIHRo ZSB2bWEKKwkgKiBiZWluZyBjb3BpZWQgdXBvbiBmb3JrLiBXaGljaCBmYWxscyB1bmRlciB0aGUg c2FtZSB1c2Vyc3BhY2UKKwkgKiBzeW5jaHJvbmlzYXRpb24gaXNzdWUgYXMgYSByZWd1bGFyIGJv LCBleGNlcHQgdGhhdCB0aGlzIHRpbWUKKwkgKiB0aGUgcHJvY2VzcyBtYXkgbm90IGJlIGV4cGVj dGluZyB0aGF0IGEgcGFydGljdWxhciBwaWVjZSBvZgorCSAqIG1lbW9yeSBpcyB0aWVkIHRvIHRo ZSBHUFUuCisJICoKKwkgKiBGb3J0dW5hdGVseSwgd2UgY2FuIGhvb2sgaW50byB0aGUgbW11X25v dGlmaWVyIGluIG9yZGVyIHRvCisJICogZGlzY2FyZCB0aGUgcGFnZSByZWZlcmVuY2VzIHByaW9y IHRvIGFueXRoaW5nIG5hc3R5IGhhcHBlbmluZworCSAqIHRvIHRoZSB2bWEgKGRpc2NhcmQgb3Ig Y2xvbmluZykgd2hpY2ggc2hvdWxkIHByZXZlbnQgdGhlIG1vcmUKKwkgKiBlZ3JlZ2lvdXMgY2Fz ZXMgZnJvbSBjYXVzaW5nIGhhcm0uCisJICovCisKKwlwdmVjID0ga21hbGxvYyhudW1fcGFnZXMg KiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCSAgICAgICBHRlBfS0VSTkVMIHwgX19HRlBfTk9X QVJOIHwgX19HRlBfTk9SRVRSWSk7CisJaWYgKHB2ZWMgPT0gTlVMTCkgeworCQlwdmVjID0gZHJt X21hbGxvY19hYihudW1fcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7CisJCWlmIChwdmVj ID09IE5VTEwpIHsKKwkJCUlQVlJfRVJST1IoInB2ZWMgYWxsb2MgZmFpbHVyZVxuIik7CisJCQly ZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXBpbm5lZCA9IF9fZ2V0X3VzZXJfcGFnZXNfZmFz dCh2bWFwLT51c2VyX3B0ciwgbnVtX3BhZ2VzLAorCQkJCSF2bWFwLT5yZWFkX29ubHksIHB2ZWMp OworCWlmIChwaW5uZWQgPCBudW1fcGFnZXMpIHsKKwkJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBj dXJyZW50LT5tbTsKKwkJcmV0ID0gMDsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQly ZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwKKwkJCQl2bWFwLT51c2VyX3B0ciArIChw aW5uZWQgPDwgUEFHRV9TSElGVCksCisJCQkJbnVtX3BhZ2VzIC0gcGlubmVkLAorCQkJCSF2bWFw LT5yZWFkX29ubHksIDAsCisJCQkJcHZlYyArIHBpbm5lZCwKKwkJCQlOVUxMKTsKKwkJdXBfcmVh ZCgmbW0tPm1tYXBfc2VtKTsKKwkJaWYgKHJldCA+IDApCisJCQlwaW5uZWQgKz0gcmV0OworCisJ CWlmIChvYmotPnNnX3RhYmxlIHx8IHBpbm5lZCA8IG51bV9wYWdlcykgeworCQkJcmV0ID0gb2Jq LT5zZ190YWJsZSA/IDAgOiAtRUZBVUxUOworCQkJSVBWUl9FUlJPUigib2JqLT5zZ190YWJsZSBp cyBOVUxMXG4iKTsKKwkJCWdvdG8gY2xlYW51cF9waW5uZWQ7CisJCX0KKwl9CisKKwlzdCA9IGtt YWxsb2Moc2l6ZW9mKCpzdCksIEdGUF9LRVJORUwpOworCWlmIChzdCA9PSBOVUxMKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gY2xlYW51cF9waW5uZWQ7CisJfQorCisJaWYgKHNnX2FsbG9j X3RhYmxlKHN0LCBudW1fcGFnZXMsIEdGUF9LRVJORUwpKSB7CisJCXJldCA9IC1FTk9NRU07CisJ CWdvdG8gY2xlYW51cF9zdDsKKwl9CisKKwlmb3JfZWFjaF9zZyhzdC0+c2dsLCBzZywgbnVtX3Bh Z2VzLCBuKQorCQlzZ19zZXRfcGFnZShzZywgcHZlY1tuXSwgUEFHRV9TSVpFLCAwKTsKKwlkcm1f ZnJlZV9sYXJnZShwdmVjKTsKKworCW9iai0+c2dfdGFibGUgPSBzdDsKKwlyZXR1cm4gMDsKKwor Y2xlYW51cF9zdDoKKwlrZnJlZShzdCk7CitjbGVhbnVwX3Bpbm5lZDoKKwlyZWxlYXNlX3BhZ2Vz KHB2ZWMsIHBpbm5lZCwgMCk7CisJZHJtX2ZyZWVfbGFyZ2UocHZlYyk7CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgaXB2cl9nZW1fdXNlcnB0cl9wdXRfcGFnZXNfc2coc3RydWN0IGRy bV9pcHZyX2dlbV9vYmplY3QgKm9iaikgeworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJaW50 MzJfdCBpOworCisJZm9yX2VhY2hfc2cob2JqLT5zZ190YWJsZS0+c2dsLCBzZywgb2JqLT5zZ190 YWJsZS0+bmVudHMsIGkpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKHNnKTsKKwor CQlpZiAob2JqLT5kaXJ0eSkKKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCisJCW1hcmtfcGFn ZV9hY2Nlc3NlZChwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCX0KKwlvYmot PmRpcnR5ID0gMDsKKworCXNnX2ZyZWVfdGFibGUob2JqLT5zZ190YWJsZSk7CisJa2ZyZWUob2Jq LT5zZ190YWJsZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVj dF9vcHMgaXB2cl9nZW1fdXNlcnB0cl9vcHMgPSB7CisJLmdldF9wYWdlcyA9IGlwdnJfZ2VtX3Vz ZXJwdHJfZ2V0X3BhZ2VzX3NnLAorCS5wdXRfcGFnZXMgPSBpcHZyX2dlbV91c2VycHRyX3B1dF9w YWdlc19zZywKK307CisKK2ludDMyX3QgaXB2cl9nZW1fdXNlcnB0cihzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCXVpbnQ2NF90IHVzZXJfcHRy LCB1aW50NjRfdCB1c2VyX3NpemUsCisJCQl1aW50MzJfdCBjYWNoZV9sZXZlbCwgdWludDMyX3Qg dGlsaW5nLCB1aW50MzJfdCAqaGFuZGxlX3AsCisJCQl1aW50NjRfdCAqb2Zmc2V0X3ApCit7CisJ c3RydWN0IGlwdnJfZ2VtX3VzZXJwdHJfb2JqZWN0ICpvYmo7CisJaW50MzJfdCByZXQgPSAwOwor CXVpbnQzMl90IGhhbmRsZSwgbnVtX3BhZ2VzOworCWxvZmZfdCBmaXJzdF9kYXRhX3BhZ2UsIGxh c3RfZGF0YV9wYWdlOworCisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2 LT5kZXZfcHJpdmF0ZTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImNyZWF0ZSB1c2VyIGJvIHVzZXJw dHIgaXMgJWxseCwgc2l6ZSBpcyAlbGxkLCAiCisJCQkiY2FjaGUgbGV2ZWwgaXMgJWQuXG4iLAor CQkJdXNlcl9wdHIsIHVzZXJfc2l6ZSwgY2FjaGVfbGV2ZWwpOworCisJZmlyc3RfZGF0YV9wYWdl ID0gdXNlcl9wdHIgLyBQQUdFX1NJWkU7CisJbGFzdF9kYXRhX3BhZ2UgPSAodXNlcl9wdHIgKyB1 c2VyX3NpemUgLSAxKSAvIFBBR0VfU0laRTsKKwludW1fcGFnZXMgPSBsYXN0X2RhdGFfcGFnZSAt IGZpcnN0X2RhdGFfcGFnZSArIDE7CisKKwkvKiBvbmx5IHN1cHBvcnQgcGFnZSBhbGlnbmVkIGJ1 ZmZlciBmb3Igbm93ICovCisJaWYgKG9mZnNldF9pbl9wYWdlKHVzZXJfcHRyKSAhPSAwIHx8ICh1 c2VyX3NpemUgJiAoUEFHRV9TSVpFIC0gMSkpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJ LyogQWxsb2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KKwlvYmogPSBpcHZyX2dlbV9vYmplY3RfYWxs b2MoZGV2KTsKKwlpZiAob2JqID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChv YmosIDAsIHNpemVvZigqb2JqKSk7CisKKwlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoZGV2 LCAmb2JqLT5nZW0uYmFzZSwKKwkJCQkJbnVtX3BhZ2VzICogUEFHRV9TSVpFKTsKKworCWlwdnJf Z2VtX29iamVjdF9pbml0KCZvYmotPmdlbSwgJmlwdnJfZ2VtX3VzZXJwdHJfb3BzKTsKKworCWlu aXRfd2FpdHF1ZXVlX2hlYWQoJm9iai0+Z2VtLmV2ZW50X3F1ZXVlKTsKKwlhdG9taWNfc2V0KCZv YmotPmdlbS5jcHVfd3JpdGVycywgMCk7CisKKwlvYmotPmdlbS5kcnZfbmFtZSA9ICJpcHZyIjsK KwlvYmotPmdlbS5mZW5jZSA9IE5VTEw7CisJb2JqLT5nZW0uY2FjaGVfbGV2ZWwgPSBjYWNoZV9s ZXZlbDsKKwlvYmotPmdlbS50aWxpbmcgPSB0aWxpbmc7CisKKwlvYmotPnVzZXJfcHRyID0gdXNl cl9wdHI7CisJb2JqLT51c2VyX3NpemUgPSB1c2VyX3NpemU7CisKKwlyZXQgPSBkcm1fZ2VtX2hh bmRsZV9jcmVhdGUoZmlsZV9wcml2LCAmb2JqLT5nZW0uYmFzZSwgJmhhbmRsZSk7CisJLyogZHJv cCByZWZlcmVuY2UgZnJvbSBhbGxvY2F0ZSAtIGhhbmRsZSBob2xkcyBpdCBub3cgKi8KKwlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5nZW0uYmFzZSk7CisJaWYgKHJl dCkgeworCQlJUFZSX0VSUk9SKCJmYWlsZWQgZHJtX2dlbV9oYW5kbGVfY3JlYXRlIGZvciBvYmog MHglbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZylvYmopOworCQlnb3RvIGVycjsKKwl9CisKKwkq aGFuZGxlX3AgPSBoYW5kbGU7CisKKwkvKiBmb3JjZSB0byBnZXQgcGFnZXMgYXQgYWxsb2NhdGlv biBzdGFnZSAqLworCXJldCA9IGlwdnJfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKCZvYmotPmdlbSwK KwkJCQkJJmRldl9wcml2LT5hZGRyX3NwYWNlLCA0MDk2KTsKKwlpZiAocmV0KSB7CisJCUlQVlJf RVJST1IoImZhaWxlZCBpcHZyX2dlbV9vYmplY3RfYmluZF90b192bSBmb3Igb2JqIDB4JWx4XG4i LAorCQkJKHVuc2lnbmVkIGxvbmcpb2JqKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gaXB2 cl9nZW1fbW11X2JpbmRfb2JqZWN0KCZvYmotPmdlbSk7CisJaWYgKHJldCkgeworCQlJUFZSX0VS Uk9SKCJmYWlsZWQgaXB2cl9nZW1fbW11X2JpbmRfb2JqZWN0IGZvciBvYmogMHglbHhcbiIsCisJ CQkodW5zaWduZWQgbG9uZylvYmopOworCQlnb3RvIGVycjsKKwl9CisKKwkqb2Zmc2V0X3AgPSBp cHZyX2dlbV9vYmpfbW11X29mZnNldCgmb2JqLT5nZW0pICsgb2Zmc2V0X2luX3BhZ2UodXNlcl9w dHIpOworCWlmIChJUFZSX0lTX0VSUigqb2Zmc2V0X3ApKSB7CisJCXJldCA9IElQVlJfT0ZGU0VU X0VSUigqb2Zmc2V0X3ApOworCQlnb3RvIGVycjsKKwl9CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwo ImJvIGNyZWF0ZSBkb25lLCBncHUgb2Zmc2V0OiAweCVsbHguXG4iLCAqb2Zmc2V0X3ApOworCitl cnI6CisJaWYgKHJldCkKKwkJaXB2cl9nZW1fb2JqZWN0X2ZyZWUoJm9iai0+Z2VtKTsKKwlyZXR1 cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9idWZmZXIu aCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uMjQ1ZmY4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pcHZyL2lwdnJfYnVmZmVyLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgorICogaXB2cl9idWZmZXIuaDogSVBWUiBidWZmZXIgaGFuZGxpbmcgaGVhZGVyIGZpbGUK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywg T1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxv bmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlh bmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRl bC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX0lQVlJfQlVGRkVS X0hfCisjZGVmaW5lIF9JUFZSX0JVRkZFUl9IXworCisjaW5jbHVkZSA8ZHJtUC5oPgorI2luY2x1 ZGUgPGRybV9nZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPgorI2luY2x1ZGUgImlw dnJfZHJ2LmgiCisjaW5jbHVkZSAiaXB2cl9kcm0uaCIKKyNpbmNsdWRlICJpcHZyX2ZlbmNlLmgi CisKK3N0cnVjdCBpcHZyX2ZlbmNlOworCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCB7CisJ c3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisKKwkvKiB1c2VkIHRvIGRpc2luZ3Vpc2ggYmV0 d2VlbiBpOTE1IGFuZCBpcHZyICovCisJY2hhciAqZHJ2X25hbWU7CisKKwljb25zdCBzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX29iamVjdF9vcHMgKm9wczsKKworCS8qKiBMaXN0IG9mIFZNQXMgYmFja2Vk IGJ5IHRoaXMgb2JqZWN0ICovCisJc3RydWN0IGxpc3RfaGVhZCB2bWFfbGlzdDsKKworCS8qIGZv ciBpcHZyIGNhc2UsIGJ1ZmZlciBpcyBib3VuZCBpbnRvIG1tdSwgd2lsbCBub3QgYmUgdW5ib3Vu ZCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX2xpc3Q7CisKKwkvKioKKwkgKiBpZiB0aGlz IGJvIGlzIGEgdGlsaW5nIGJ1ZmZlcgorCSAqIHdlIGNhbiBzdXBwb3J0IG11bHRpcGxlIG1vZGUg b2YgdGlsaW5nLCB3aGljaCBoYXMgZGlmZmVyZW50IHN0cmlkZQorCSAqIGJ1dCBvbmx5IG9uZSB0 aWxpbmcgbW9kZSBjYW4gYmUgZW5hYmxlZC4KKwkgKi8KKwlib29sIHRpbGluZzsKKworCWVudW0g aXB2cl9jYWNoZV9sZXZlbCBjYWNoZV9sZXZlbDsKKworCS8qKgorCSAqIFRoaXMgaXMgc2V0IGlm IHRoZSBvYmplY3QgaXMgb24gdGhlIGFjdGl2ZSBsaXN0cyAoaGFzIHBlbmRpbmcKKwkgKiByZW5k ZXJpbmcgYW5kIHNvIGEgbm9uLXplcm8gc2Vxbm8pLCBhbmQgaXMgbm90IHNldCBpZiBpdCBpcyBv bgorCSAqIGluYWN0aXZlIChyZWFkeSB0byBiZSB1bmJvdW5kKSBsaXN0LgorCSAqLworCXVpbnQz Ml90IGFjdGl2ZToxOworCisJLyoqCisJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBoYXMg YmVlbiB3cml0dGVuIHRvIHNpbmNlIGxhc3QgYm91bmQKKwkgKiB0byB0aGUgR1RUCisJICovCisJ dWludDMyX3QgZGlydHk6MTsKKworCXVpbnQzMl90IHBpbl9jb3VudDo1OworI2RlZmluZSBEUk1f SVBWUl9HRU1fT0JKRUNUX01BWF9QSU5fQ09VTlQgMHgxZgorCisJc3RydWN0IHNnX3RhYmxlICpz Z190YWJsZTsKKwlpbnQzMl90IHBhZ2VzX3Bpbl9jb3VudDsKKworCS8qKiBVc2VyIHNwYWNlIHBp biBjb3VudCBhbmQgZmlscCBvd25pbmcgdGhlIHBpbiAqLworCXVpbnQzMl90IHVzZXJfcGluX2Nv dW50OworCXN0cnVjdCBkcm1fZmlsZSAqcGluX2ZpbHA7CisKKwlzdHJ1Y3QgaXB2cl9mZW5jZSAq ZmVuY2U7CisJYXRvbWljX3QgcmVzZXJ2ZWQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgZXZlbnRfcXVl dWU7CisJYXRvbWljX3QgY3B1X3dyaXRlcnM7CisKKwl1bnNpZ25lZCBsb25nIG1tYXBfYmFzZTsK Kwl1aW50NjRfdCBtbWFwX3NpemU7CisKKwlzdHJ1Y3QgcGFnZSAqKmZha2VfcGFnZXM7Cit9Owor CitzdHJ1Y3QgaXB2cl9nZW1fdXNlcnB0cl9vYmplY3QgeworCXN0cnVjdCBkcm1faXB2cl9nZW1f b2JqZWN0IGdlbTsKKwl1aW50cHRyX3QgdXNlcl9wdHI7CisJc2l6ZV90IHVzZXJfc2l6ZTsKKwlp bnQzMl90IHJlYWRfb25seTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKyNpZiBkZWZpbmVkKENP TkZJR19NTVVfTk9USUZJRVIpCisJc3RydWN0IG1tdV9ub3RpZmllciBtbjsKKyNlbmRpZgorfTsK KwordW5pb24gZHJtX2lwdnJfZ2VtX29iamVjdHMgeworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0IGJhc2U7CisJc3RydWN0IGlwdnJfZ2VtX3VzZXJwdHJfb2JqZWN0IHZtYXA7Cit9OworCitz dHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdF9vcHMgeworCS8qCisJICogSW50ZXJmYWNlIGJldHdl ZW4gdGhlIEdFTSBvYmplY3QgYW5kIGl0cyBiYWNraW5nIHN0b3JhZ2UuCisJICogZ2V0X3BhZ2Vz KCkgaXMgY2FsbGVkIG9uY2UgcHJpb3IgdG8gdGhlIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBzZXQK KwkgKiBvZiBwYWdlcyBiZWZvcmUgdG8gYmluZGluZyB0aGVtIGludG8gdGhlIEdUVCwgYW5kIHB1 dF9wYWdlcygpIGlzCisJICogY2FsbGVkIGFmdGVyIHdlIG5vIGxvbmdlciBuZWVkIHRoZW0uIEFz IHdlIGV4cGVjdCB0aGVyZSB0byBiZQorCSAqIGFzc29jaWF0ZWQgY29zdCB3aXRoIG1pZ3JhdGlu ZyBwYWdlcyBiZXR3ZWVuIHRoZSBiYWNraW5nIHN0b3JhZ2UKKwkgKiBhbmQgbWFraW5nIHRoZW0g YXZhaWxhYmxlIGZvciB0aGUgR1BVIChlLmcuIGNsZmx1c2gpLCB3ZSBtYXkgaG9sZAorCSAqIG9u dG8gdGhlIHBhZ2VzIGFmdGVyIHRoZXkgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkIGJ5IHRoZSBH UFUKKwkgKiBpbiBjYXNlIHRoZXkgbWF5IGJlIHVzZWQgYWdhaW4gc2hvcnRseSAoZm9yIGV4YW1w bGUgbWlncmF0aW5nIHRoZQorCSAqIHBhZ2VzIHRvIGEgZGlmZmVyZW50IG1lbW9yeSBkb21haW4g d2l0aGluIHRoZSBHVFQpLiBwdXRfcGFnZXMoKQorCSAqIHdpbGwgdGhlcmVmb3JlIG1vc3QgbGlr ZWx5IGJlIGNhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXRzZWxmIGlzCisJICogYmVpbmcgcmVsZWFz ZWQgb3IgdW5kZXIgbWVtb3J5IHByZXNzdXJlICh3aGVyZSB3ZSBhdHRlbXB0IHRvCisJICogcmVh cCBwYWdlcyBmb3IgdGhlIHNocmlua2VyKS4KKwkgKi8KKwlpbnQgKCpnZXRfcGFnZXMpKHN0cnVj dCBkcm1faXB2cl9nZW1fb2JqZWN0ICopOworCXZvaWQgKCpwdXRfcGFnZXMpKHN0cnVjdCBkcm1f aXB2cl9nZW1fb2JqZWN0ICopOworCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZHJtX2lwdnJfZ2Vt X29iamVjdCAqKTsKKwlib29sICgqaXNfdXNlcnB0cl9vYmopKHZvaWQpOworfTsKKworLyoKKyAq IEEgVk1BIHJlcHJlc2VudHMgYSBHRU0gQk8gdGhhdCBpcyBib3VuZCBpbnRvIGFuIGFkZHJlc3Mg c3BhY2UuIFRoZXJlZm9yZSwgYQorICogVk1BJ3MgcHJlc2VuY2UgY2Fubm90IGJlIGd1YXJhbnRl ZWQgYmVmb3JlIGJpbmRpbmcsIG9yIGFmdGVyIHVuYmluZGluZyB0aGUKKyAqIG9iamVjdCBpbnRv L2Zyb20gdGhlIGFkZHJlc3Mgc3BhY2UuCisgKgorICogVG8gbWFrZSB0aGluZ3MgYXMgc2ltcGxl IGFzIHBvc3NpYmxlIChpZS4gbm8gcmVmY291bnRpbmcpLCBhIFZNQSdzIGxpZmV0aW1lCisgKiB3 aWxsIGFsd2F5cyBiZSA8PSBhbiBvYmplY3RzIGxpZmV0aW1lLiBTbyBvYmplY3QgcmVmY291bnRp bmcgc2hvdWxkIGNvdmVyIHVzLgorICovCitzdHJ1Y3QgaXB2cl92bWEgeworCXN0cnVjdCBkcm1f bW1fbm9kZSBub2RlOworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0 IGlwdnJfYWRkcmVzc19zcGFjZSAqdm07CisKKwkvKiBUaGlzIG9iamVjdCdzIHBsYWNlIG9uIHRo ZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG1tX2xpc3Q7CisK KwlzdHJ1Y3QgbGlzdF9oZWFkIHZtYV9saW5rOyAvKiBMaW5rIGluIHRoZSBvYmplY3QncyBWTUEg bGlzdCAqLworfTsKKworaW50MzJfdCBpcHZyX2dlbV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQl1aW50NjRfdCBzaXplLCB1aW50 MzJfdCB0aWxpbmcsIHVpbnQzMl90IGNhY2hlX2xldmVsLAorCQkJdWludDY0X3QgKnJzaXplX3As IHVpbnQzMl90ICpoYW5kbGVfcCwKKwkJCXVpbnQ2NF90ICpvZmZzZXRfcCk7CisKK3N0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICoKK2lwdnJfZ2VtX29ial9jcmVhdGVfYW5kX2JpbmQoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgc2l6ZV90IHNpemUpOworCitzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29i amVjdCAqCitpcHZyX2dlbV9hbGxvY19vYmplY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc2l6 ZV90IHNpemUpOworCitpbnQzMl90IGlwdnJfZ2VtX29iamVjdF9iaW5kX3RvX3ZtKHN0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICpvYmosCisJCQlzdHJ1Y3QgaXB2cl9hZGRyZXNzX3NwYWNlICp2 bSwKKwkJCXVpbnQzMl90IGFsaWdubWVudCk7CisKK3Vuc2lnbmVkIGxvbmcgaXB2cl9nZW1fb2Jq X21tdV9vZmZzZXQoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaik7CisKK2ludDMyX3Qg aXB2cl9nZW1fbW11X2JpbmRfb2JqZWN0KHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmop OworCit2b2lkICppcHZyX2dlbV9vYmplY3Rfdm1hcChzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVj dCAqb2JqKTsKKworaW50IGlwdnJfZ2VtX2luaXRfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVj dCAqb2JqKTsKKwordm9pZCBpcHZyX2dlbV9mcmVlX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaik7CisKK2Jvb2wgaXB2cl9nZW1fY2xmbHVzaF9vYmplY3Qoc3RydWN0IGRybV9pcHZy X2dlbV9vYmplY3QgKm9iaiwgYm9vbCBmb3JjZSk7CisKK2ludDMyX3QgaXB2cl9nZW1fdXNlcnB0 cihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CXVpbnQ2NF90IHVzZXJfcHRyLCB1aW50NjRfdCB1c2VyX3NpemUsCisJCQl1aW50MzJfdCBjYWNo ZV9sZXZlbCwgdWludDMyX3QgdGlsaW5nLAorCQkJdWludDMyX3QgKmhhbmRsZV9wLCB1aW50NjRf dCAqb2Zmc2V0X3ApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZy L2lwdnJfZGVidWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZGVidWcuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWNmOGRlCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5jCkBAIC0wLDAgKzEsMjYzIEBACisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIGlwdnJfZGVidWcuYzogSVBWUiBkZWJ1Z2ZzIHN1cHBvcnQgdG8g YXNzaXN0IGJ1ZyB0cmlhZ2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9y YXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAor ICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBT dCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhv cnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKKyNpbmNsdWRlIDxs aW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlICJp cHZyX2RlYnVnLmgiCisjaW5jbHVkZSAiaXB2cl9kcnYuaCIKKyNpbmNsdWRlICJ2ZWRfcmVnLmgi CisKK3VuaW9uIGlwdnJfZGVidWdmc192YXJzIGRlYnVnZnNfdmFyczsKKworc3RhdGljIGludDMy X3QgaXB2cl9kZWJ1Z19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5w cml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCXN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlz ZXFfcHJpbnRmKG0sICJpcHZyIHBsYXRmb3JtIHJldmlzb24gaWQ6IDB4JXhcbiIsCisJCWRldl9w cml2LT5wbGF0Zm9ybV9yZXZfaWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQzMl90 IGlwdnJfZGVidWdfZ2VtX29iamVjdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0 YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9k ZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ ZGV2OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJaW50MzJfdCByZXQ7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRl di0+c3RydWN0X211dGV4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2VxX3ByaW50 ZihtLCAiaXB2ciB0b3RhbCBhbGxvY2F0ZSAldSBvYmplY3RzLCAlenUgYnl0ZXNcbiIsCisJCSAg IGRldl9wcml2LT5pcHZyX21tLm9iamVjdF9jb3VudCwKKwkJICAgZGV2X3ByaXYtPmlwdnJfbW0u b2JqZWN0X21lbW9yeSk7CisKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50MzJfdCBpcHZyX2RlYnVnX2dlbV9zZXFub19pbmZv KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9k ZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pcHZyX3ByaXZhdGVfdCAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludDMyX3QgcmV0OworCisJcmV0ID0gbXV0 ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKworCXNlcV9wcmludGYobSwgImxhc3Qgc2lnbmFsZWQgc2VxIGlzICVkLCBs YXN0IGVtaXR0ZWQgc2VxIGlzICVkXG4iLAorCQlhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmZlbmNl X2Rydi5zaWduYWxlZF9zZXEpLAorCQlkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxKTsKKwor CW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBzc2l6ZV90IGlwdnJfZGVidWdfdmVkX3JlZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBj aGFyIF9fdXNlciAqdWJ1ZiwKKwkJCQkJc2l6ZV90IG1heCwgbG9mZl90ICpwcG9zKQoreworCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZHJtX2lwdnJfcHJp dmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJY2hhciBidWZbMjAwXSwgb2Zm c2V0WzIwXSwgb3BlcmF0aW9uWzEwXSwgZm9ybWF0WzIwXSwgdmFsWzIwXTsKKwlpbnQzMl90IGxl biA9IDAsIHJldCwgbm9fb2ZfdG9rZW5zOworCXVuc2lnbmVkIGxvbmcgcmVnX29mZnNldCwgcmVn X3RvX3dyaXRlOworCisJaWYgKGRlYnVnZnNfdmFycy5yZWcucmVnX2lucHV0ID09IDApCisJCXJl dHVybiBsZW47CisKKwlzbnByaW50Zihmb3JtYXQsIHNpemVvZihmb3JtYXQpLCAiJSUlenVzICUl JXp1cyAlJSV6dXMiLAorCQkJc2l6ZW9mKG9wZXJhdGlvbiksIHNpemVvZihvZmZzZXQpLCBzaXpl b2YodmFsKSk7CisKKwlub19vZl90b2tlbnMgPSBzc2NhbmYoZGVidWdmc192YXJzLnJlZy5yZWdf dmFycywKKwkJCQkJZm9ybWF0LCBvcGVyYXRpb24sIG9mZnNldCwgdmFsKTsKKworCWlmIChub19v Zl90b2tlbnMgPCAzKQorCQlyZXR1cm4gbGVuOworCisJbGVuID0gc2l6ZW9mKGRlYnVnZnNfdmFy cy5yZWcucmVnX3ZhcnMpOworCisJaWYgKHN0cmNtcChvcGVyYXRpb24sIElQVlJfUkVBRF9UT0tF TikgPT0gMCkgeworCQlyZXQgPSBrc3RydG91bChvZmZzZXQsIDE2LCAmcmVnX29mZnNldCk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlsZW4gPSBzY25wcmludGYoYnVmLCBz aXplb2YoYnVmKSwgIjB4JXg6IDB4JXhcbiIsCisJCQkodWludDMyX3QpcmVnX29mZnNldCwKKwkJ CVZFRF9SRUdfUkVBRDMyKCh1aW50MzJfdClyZWdfb2Zmc2V0KSk7CisJfSBlbHNlIGlmIChzdHJj bXAob3BlcmF0aW9uLCBJUFZSX1dSSVRFX1RPS0VOKSA9PSAwKSB7CisJCXJldCA9IGtzdHJ0b3Vs KG9mZnNldCwgMTYsICZyZWdfb2Zmc2V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUlOVkFM OworCisJCXJldCA9IGtzdHJ0b3VsKHZhbCwgMTYsICZyZWdfdG9fd3JpdGUpOworCQlpZiAocmV0 KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJVkVEX1JFR19XUklURTMyKHJlZ19vZmZzZXQsIHJl Z190b193cml0ZSk7CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCQkJCSIw eCV4OiAweCV4XG4iLAorCQkJCSh1aW50MzJfdClyZWdfb2Zmc2V0LAorCQkJCSh1aW50MzJfdClW RURfUkVHX1JFQUQzMihyZWdfb2Zmc2V0KSk7CisJfSBlbHNlIHsKKwkJbGVuID0gc2NucHJpbnRm KGJ1Ziwgc2l6ZW9mKGJ1ZiksICJPcGVyYXRpb24gTm90IFN1cHBvcnRlZFxuIik7CisJfQorCisJ ZGVidWdmc192YXJzLnJlZy5yZWdfaW5wdXQgPSAwOworCisJc2ltcGxlX3JlYWRfZnJvbV9idWZm ZXIodWJ1ZiwgbWF4LCBwcG9zLCBidWYsIGxlbik7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0 aWMgc3NpemVfdAoraXB2cl9kZWJ1Z192ZWRfcmVnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLGNv bnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJc2l6ZV90IGNudCwgbG9mZl90ICpwcG9zKQorewor CS8qIHJlc2V0IHRoZSBzdHJpbmcgKi8KKwltZW1zZXQoZGVidWdmc192YXJzLnJlZy5yZWdfdmFy cywgMCwgSVBWUl9NQVhfQlVGRkVSX1NUUl9MRU4pOworCisJaWYgKGNudCA+IDApIHsKKwkJaWYg KGNudCA+IHNpemVvZihkZWJ1Z2ZzX3ZhcnMucmVnLnJlZ192YXJzKSAtIDEpCisJCQlyZXR1cm4g LUVJTlZBTDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoZGVidWdmc192YXJzLnJlZy5yZWdfdmFy cywgdWJ1ZiwgY250KSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCWRlYnVnZnNfdmFycy5yZWcu cmVnX3ZhcnNbY250XSA9IDA7CisKKwkJLyogRW5hYmxlIFJlYWQgKi8KKwkJZGVidWdmc192YXJz LnJlZy5yZWdfaW5wdXQgPSAxOworCX0KKworCXJldHVybiBjbnQ7Cit9CisKKy8qIEFzIHRoZSBk cm1fZGVidWdmc19pbml0KCkgcm91dGluZXMgYXJlIGNhbGxlZCBiZWZvcmUgZGV2LT5kZXZfcHJp dmF0ZSBpcworICogYWxsb2NhdGVkIHdlIG5lZWQgdG8gaG9vayBpbnRvIHRoZSBtaW5vciBmb3Ig cmVsZWFzZS4gKi8KK3N0YXRpYyBpbnQzMl90IGlwdnJfYWRkX2Zha2VfaW5mb19ub2RlKHN0cnVj dCBkcm1fbWlub3IgKm1pbm9yLAorCQkJCQlzdHJ1Y3QgZGVudHJ5ICplbnQsIGNvbnN0IHZvaWQg KmtleSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZTsKKworCW5vZGUgPSBrbWFsbG9j KHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksIEdGUF9LRVJORUwpOworCWlmIChub2RlID09 IE5VTEwpIHsKKwkJZGVidWdmc19yZW1vdmUoZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJbm9kZS0+bWlub3IgPSBtaW5vcjsKKwlub2RlLT5kZW50ID0gZW50OworCW5vZGUtPmluZm9f ZW50ID0gKHZvaWQgKikga2V5OworCisJbXV0ZXhfbG9jaygmbWlub3ItPmRlYnVnZnNfbG9jayk7 CisJbGlzdF9hZGQoJm5vZGUtPmxpc3QsICZtaW5vci0+ZGVidWdmc19saXN0KTsKKwltdXRleF91 bmxvY2soJm1pbm9yLT5kZWJ1Z2ZzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQzMl90IGlwdnJfZGVidWdmc19jcmVhdGUoc3RydWN0IGRlbnRyeSAqcm9vdCwKKwkJCSAgICAg ICBzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAor CQkJICAgICAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHMpCit7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJc3RydWN0IGRlbnRyeSAqZW50OworCisJ ZW50ID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLAorCQkJCSAgU19JUlVHTyB8IFNfSVdVU1Is CisJCQkJICByb290LCBkZXYsCisJCQkJICBmb3BzKTsKKwlpZiAoSVNfRVJSKGVudCkpCisJCXJl dHVybiBQVFJfRVJSKGVudCk7CisKKwlyZXR1cm4gaXB2cl9hZGRfZmFrZV9pbmZvX25vZGUobWlu b3IsIGVudCwgZm9wcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25z IGlwdnJfdmVkX3JlZ19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0g c2ltcGxlX29wZW4sCisJLnJlYWQgPSBpcHZyX2RlYnVnX3ZlZF9yZWdfcmVhZCwKKwkud3JpdGUg PSBpcHZyX2RlYnVnX3ZlZF9yZWdfd3JpdGUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAor fTsKKworc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IGlwdnJfZGVidWdmc19saXN0W10gPSB7 CisJeyJpcHZyX2NhcGFiaWxpdGllcyIsIGlwdnJfZGVidWdfaW5mbywgMH0sCisJeyJpcHZyX2dl bV9vYmplY3RzIiwgaXB2cl9kZWJ1Z19nZW1fb2JqZWN0X2luZm8sIDB9LAorCXsiaXB2cl9nZW1f c2Vxbm8iLCBpcHZyX2RlYnVnX2dlbV9zZXFub19pbmZvLCAwfSwKKworfTsKKyNkZWZpbmUgSVBW Ul9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRShpcHZyX2RlYnVnZnNfbGlzdCkKKworc3RhdGlj IHN0cnVjdCBpcHZyX2RlYnVnZnNfZmlsZXMgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKK30gaXB2cl9kZWJ1Z2ZzX2ZpbGVzW10gPSB7 CisJeyJpcHZyX3ZlZF9yZWdfYXBpIiwgJmlwdnJfdmVkX3JlZ19mb3BzfSwKK307CisKK2ludDMy X3QgaXB2cl9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJaW50MzJf dCByZXQsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcHZyX2RlYnVnZnNfZmls ZXMpOyBpKyspIHsKKwkJcmV0ID0gaXB2cl9kZWJ1Z2ZzX2NyZWF0ZShtaW5vci0+ZGVidWdmc19y b290LCBtaW5vciwKKwkJCQkgICBpcHZyX2RlYnVnZnNfZmlsZXNbaV0ubmFtZSwKKwkJCQkgICBp cHZyX2RlYnVnZnNfZmlsZXNbaV0uZm9wcyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0Owor CX0KKworCXJldHVybiBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoaXB2cl9kZWJ1Z2ZzX2xpc3Qs CisJCQkJIElQVlJfREVCVUdGU19FTlRSSUVTLAorCQkJCSBtaW5vci0+ZGVidWdmc19yb290LCBt aW5vcik7Cit9CisKK3ZvaWQgaXB2cl9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAq bWlub3IpCit7CisJaW50MzJfdCBpOworCisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKGlwdnJf ZGVidWdmc19saXN0LAorCQkJICBJUFZSX0RFQlVHRlNfRU5UUklFUywgbWlub3IpOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXB2cl9kZWJ1Z2ZzX2ZpbGVzKTsgaSsrKSB7CisJCXN0 cnVjdCBkcm1faW5mb19saXN0ICppbmZvX2xpc3QgPQorCQkJKHN0cnVjdCBkcm1faW5mb19saXN0 ICopaXB2cl9kZWJ1Z2ZzX2ZpbGVzW2ldLmZvcHM7CisKKwkJZHJtX2RlYnVnZnNfcmVtb3ZlX2Zp bGVzKGluZm9fbGlzdCwgMSwgbWlub3IpOworCX0KK30KKworI2VuZGlmIC8qIENPTkZJR19ERUJV R19GUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5oIGIv ZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjNjYmViNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aXB2ci9pcHZyX2RlYnVnLmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KiBpcHZyX2RlYnVnLmg6IElQVlIgZGVidWdmcyBzdXBwb3J0IGhlYWRlciBmaWxlCisgKgorICog Q29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EK KyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVy IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBp dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgK KyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWku amlhbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9J UFZSX0RFQlVHX0hfCisjZGVmaW5lIF9JUFZSX0RFQlVHX0hfCisKKyNpbmNsdWRlICJkcm1QLmgi CisKKy8qIE9wZXJhdGlvbnMgc3VwcG9ydGVkICovCisjZGVmaW5lIElQVlJfTUFYX0JVRkZFUl9T VFJfTEVOCQkyMDAKKworI2RlZmluZSBJUFZSX1JFQURfVE9LRU4JCQkiUkVBRCIKKyNkZWZpbmUg SVBWUl9XUklURV9UT0tFTgkJIldSSVRFIgorCisvKiBEZWJ1Z0ZTIFZhcmlhYmxlIGRlY2xhcmF0 aW9uICovCitzdHJ1Y3QgaXB2cl9kZWJ1Z2ZzX3JlZ192YXJzIHsKKwljaGFyIHJlZ192YXJzW0lQ VlJfTUFYX0JVRkZFUl9TVFJfTEVOXTsKKwl1aW50MzJfdCByZWdfaW5wdXQ7Cit9OworCit1bmlv biBpcHZyX2RlYnVnZnNfdmFycyB7CisJc3RydWN0IGlwdnJfZGVidWdmc19yZWdfdmFycyByZWc7 Cit9OworCitpbnQzMl90IGlwdnJfZGVidWdmc19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9y KTsKK3ZvaWQgaXB2cl9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpOwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJtLmggYi9k cml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2RybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjE4MjVkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2 ci9pcHZyX2RybS5oCkBAIC0wLDAgKzEsMjY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlw dnJfZHJtLmg6IElQVlIgaGVhZGVyIGZpbGUgZXhwb3J0ZWQgdG8gdXNlciBzcGFjZQorICoKKyAq IENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNB CisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRo CisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVp LmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4K KyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyogdGhpcyBmaWxlIG9ubHkgZGVmaW5lIHN0 cnVjdHMgYW5kIG1hY3JvIHdoaWNoIG5lZWQgZXhwb3J0IHRvIHVzZXIgc3BhY2UgKi8KKyNpZm5k ZWYgX0lQVlJfRFJNX0hfCisjZGVmaW5lIF9JUFZSX0RSTV9IXworCisjaW5jbHVkZSA8ZHJtL2Ry bS5oPgorc3RydWN0IGRybV9pcHZyX2NvbnRleHRfY3JlYXRlIHsKKwkvKiBwYXNzZWQgY3R4X2lu Zm8sIGluY2x1ZGluZyBjb2RlYywgcHJvZmlsZSBpbmZvICovCisJdWludDMyX3QgY3R4X3R5cGU7 CisJLyogcmV0dXJuZWQgYmFjayBjdHhfaWQgKi8KKwl1aW50MzJfdCBjdHhfaWQ7CisJLyoKKwkg KiBmb2xsb3dpbmcgdGlsaW5nIHN0cmlkZXMgZm9yIFZFRCBhcmUgc3VwcG9ydGVkOgorCSAqIHN0 cmlkZSAwOiA1MTIgZm9yIHNjaGVtZSAwLCAxMDI0IGZvciBzY2hlbWUgMQorCSAqIHN0cmlkZSAx OiAxMDI0IGZvciBzY2hlbWUgMCwgMjA0OCBmb3Igc2NoZW1lIDEKKwkgKiBzdHJpZGUgMjogMjA0 OCBmb3Igc2NoZW1lIDAsIDQwOTYgZm9yIHNjaGVtZSAxCisJICogc3RyaWRlIDM6IDQwOTYgZm9y IHNjaGVtZSAwCisJICovCisJdWludDMyX3QgdGlsaW5nX3N0cmlkZTsKKwkvKgorCSAqIHNjaGVt ZSAwOiB0aWxlIGlzIDI1NngxNiwgd2hpbGUgbWluaW1hbCB0aWxlIHN0cmlkZSBpcyA1MTIKKwkg KiBzY2hlbWUgMTogdGlsZSBpcyA1MTJ4OCwgd2hpbGUgbWluaW1hbCB0aWxlIHN0cmlkZSBpcyAx MDI0CisJICovCisJdWludDMyX3QgdGlsaW5nX3NjaGVtZTsKK307CisKK3N0cnVjdCBkcm1faXB2 cl9jb250ZXh0X2Rlc3Ryb3kgeworCXVpbnQzMl90IGN0eF9pZDsKKwl1aW50MzJfdCBwYWQ2NDsK K307CisKK2VudW0gZHJtX2lwdnJfbWlzY19rZXkgeworCUlQVlJfREVWSUNFX0lORk8sCisJSVBW Ul9VUERBVEVfVElMSU5HLAorCUlQVlJfU0VUX0RJU1BMQVlJTkdfRlJBTUUsCisJSVBWUl9HRVRf RElTUExBWUlOR19GUkFNRSwKKwlJUFZSX1FVRVJZX0VOVFJZCit9OworCisvKgorICogZGlmZmVy ZW50IGNvbnRleHQgbWF5YmUgaGFzIGRpZmZlcmVudCB0aWxpbmcgc3RyaWRlLAorICogdGhlbiB0 aWxpbmcgaW5mbyBuZWVkIGJlIGJvdW5kIHdpdGggY3R4CisgKi8KK3N0cnVjdCBkcm1faXB2cl91 cGRhdGVfdGlsaW5nIHsKKwl1aW50MzJfdCBjdHhfaWQ7CisJdWludDMyX3QgdGlsaW5nX3N0cmlk ZTsKKwl1aW50MzJfdCB0aWxpbmdfc2NoZW1lOworCXVpbnQzMl90IHBhZDY0OworfTsKKworLyog SW9jdGwgdG8gc2V0L2dldCBtaXNjIHBhcmFtczoKKyAqLworc3RydWN0IGRybV9pcHZyX21pc2Mg eworCXVpbnQ2NF90IGtleTsKKwl1aW50NjRfdCBhcmc7CQkvKiBhcmd1bWVudCBwb2ludGVyICov CisJdWludDY0X3QgdmFsdWU7CS8qIGZlZWQgYmFjayBwb2ludGVyICovCit9OworCitzdHJ1Y3Qg aXB2cl92YWxpZGF0ZV9hcmcgeworCS8qIHBvaW50IHRvIG5leHQgaXB2cl92YWxpZGF0ZV9hcmcg Ki8KKwl1aW50NjRfdCBuZXh0OworCXVpbnQ2NF90IHByZXN1bWVkX2dwdV9vZmZzZXQ7CisJLyog VXNlcidzIGhhbmRsZSBmb3IgYSBidWZmZXIgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMy X3QgcGFkNjQ7CisJLyogZmVuY2luZyAqLworCXVpbnQzMl90IHNraXBfZmVuY2U7CisJaW50MzJf dCBmZW5jZV9mZDsKK307CisKKyNkZWZpbmUgTUFYX1NMSUNFU19QRVJfUElDVFVSRSA3Mgorc3Ry dWN0IGRybV9pcHZyX21iX3JlZ2lvbiB7CisJdWludDMyX3Qgc3RhcnQ7CisJdWludDMyX3QgZW5k OworfTsKKworc3RydWN0IGRybV9pcHZyX2RlY29kZV9zdGF0dXMgeworCXVpbnQzMl90IG51bV9y ZWdpb247CisJc3RydWN0IGRybV9pcHZyX21iX3JlZ2lvbiBtYl9yZWdpb25zW01BWF9TTElDRVNf UEVSX1BJQ1RVUkVdOworfTsKKworc3RydWN0IGRybV9pcHZyX2dlbV9leGVjYnVmZmVyIHsKKwkv KgorCSAqIExpc3Qgb2YgaXB2cl92YWxpZGF0ZV9hcmcgc3RydWN0cworCSAqLworCXVpbnQ2NF90 IGJ1ZmZlcl9saXN0OworCXVpbnQzMl90IGJ1ZmZlcl9jb3VudDsKKworCS8qIGZyb20gdXNlciBz cGFjZSBwb2ludCwgdGhpcyBpcyBtc2cgYnVmZmVyIGFjdHVhbGx5ICovCisJdWludDMyX3QgY21k YnVmX2hhbmRsZTsKKwl1aW50MzJfdCBjbWRidWZfc2l6ZTsKKworCXVpbnQzMl90IGN0eF9pZDsK K307CisKK2VudW0gaXB2cl9jYWNoZV9sZXZlbCB7CisJSVBWUl9DQUNIRV9OT05FID0gMCwJLyog dW5jYWNoZWFibGUgKi8KKwlJUFZSX0NBQ0hFX1dCLAkJLyogd3JpdGUgYmFjayBjYWNoZWFibGUg Ki8KKwlJUFZSX0NBQ0hFX1dDLAkJLyogd3JpdGUgY29tYmluZSwgdW5jYWNoZWFibGUgKi8KKwlJ UFZSX0NBQ0hFX01BWCwKK307CisKK3N0cnVjdCBkcm1faXB2cl9nZW1fY3JlYXRlIHsKKwkvKgor CSAqIFJlcXVlc3RlZCBzaXplIGZvciB0aGUgb2JqZWN0LgorCSAqIFRoZSAocGFnZS1hbGlnbmVk KSBhbGxvY2F0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdCB3aWxsIGJlIHJldHVybmVkLgorCSAqLwor CXVpbnQ2NF90IHNpemU7CisJdWludDY0X3Qgcm91bmRlZF9zaXplOworCXVpbnQ2NF90IGdwdV9v ZmZzZXQ7CisJLyoKKwkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCisJICogT2Jq ZWN0IGhhbmRsZXMgYXJlIG5vbnplcm8uCisJICovCisJdWludDMyX3QgaGFuZGxlOworCXVpbnQz Ml90IHRpbGluZzsKKwl1aW50MzJfdCBjYWNoZV9sZXZlbDsKKwl1aW50MzJfdCBwYWQ2NDsKK307 CisKK3N0cnVjdCBkcm1faXB2cl9nZW1fYnVzeSB7CisJLyogSGFuZGxlIG9mIHRoZSBidWZmZXIg dG8gY2hlY2sgZm9yIGJ1c3kgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisKKwkvKgorCSAqIFJldHVy biBidXN5IHN0YXR1cyAoMSBpZiBidXN5LCAwIGlmIGlkbGUpLgorCSAqIFRoZSBoaWdoIHdvcmQg aXMgdXNlZCB0byBpbmRpY2F0ZSBvbiB3aGljaCByaW5ncyB0aGUgb2JqZWN0CisJICogY3VycmVu dGx5IHJlc2lkZXM6CisJICogIDE2OjMxIC0gYnVzeSAociBvciByL3cpIHJpbmdzICgxNiByZW5k ZXIsIDE3IGJzZCwgMTggYmx0LCBldGMpCisJICovCisJdWludDMyX3QgYnVzeTsKK307CisKK3N0 cnVjdCBkcm1faXB2cl9nZW1fbW1hcCB7CisJLyogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5n IG1hcHBlZC4gKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgcGFkNjQ7CisJLyoqIE9m ZnNldCBpbiB0aGUgb2JqZWN0IHRvIG1hcC4gKi8KKwl1aW50NjRfdCBvZmZzZXQ7CisJLyoKKwkg KiBMZW5ndGggb2YgZGF0YSB0byBtYXAuCisJICogVGhlIHZhbHVlIHdpbGwgYmUgcGFnZS1hbGln bmVkLgorCSAqLworCXVpbnQ2NF90IHNpemU7CisJLyoKKwkgKiBSZXR1cm5lZCBwb2ludGVyIHRo ZSBkYXRhIHdhcyBtYXBwZWQgYXQuCisJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3Ig MzIvNjQgY29tcGF0aWJpbGl0eS4KKwkgKi8KKwl1aW50NjRfdCBhZGRyX3B0cjsKK307CisKKy8q CisgKiBBQ0NFU1MgbW9kZSBmbGFncyBmb3IgU1lOQ0NQVS4KKyAqCisgKiBJUFZSX1NZTkNDUFVf TU9ERV9SRUFEIHdpbGwgZ3VhcmFudGVlIHRoYXQgdGhlIEdQVSBpcyBub3QKKyAqIHdyaXRpbmcg dG8gdGhlIGJ1ZmZlci4KKyAqCisgKiBJUFZSX1NZTkNDUFVfTU9ERV9XUklURSB3aWxsIGd1YXJh bnRlZSB0aGF0IHRoZSBHUFUgaXMgbm90CisgKiBhY2Nlc3NpbmcgdGhlIGJ1ZmZlci4KKyAqCisg KiBJUFZSX1NZTkNDUFVfTU9ERV9OT19CTE9DSyBtYWtlcyBzdXJlIHRoZSBjYWxsIGRvZXMgbm90 IHdhaXQKKyAqIGZvciBHUFUgYWNjZXNzZXMgdG8gZmluaXNoIGJ1dCByZXR1cm4gLUVCVVNZLgor ICoKKyAqIElQVlJfU1lOQ0NQVV9NT0RFX1RSWUNBQ0hFRCBUcnkgdG8gcGxhY2UgdGhlIGJ1ZmZl ciBpbiBjYWNoZWFibGUKKyAqIG1lbW9yeSB3aGlsZSBzeW5jaHJvbml6ZWQgZm9yIENQVS4KKyAq CisgKi8KKworI2RlZmluZSBJUFZSX1NZTkNDUFVfTU9ERV9SRUFEICAgICAgKDEgPDwgMCkKKyNk ZWZpbmUgSVBWUl9TWU5DQ1BVX01PREVfV1JJVEUgICAgICgxIDw8IDEpCisjZGVmaW5lIElQVlJf U1lOQ0NQVV9NT0RFX05PX0JMT0NLICAoMSA8PCAyKQorI2RlZmluZSBJUFZSX1NZTkNDUFVfTU9E RV9UUllDQUNIRUQgKDEgPDwgMykKKworc3RydWN0IGRybV9pcHZyX3N5bmNfY3B1IHsKKwkvKiBI YW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KKwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgYWNj ZXNzX21vZGU7CisJZW51bSB7CisJCUlQVlJfU1lOQ0NQVV9PUF9HUkFCLAorCQlJUFZSX1NZTkND UFVfT1BfUkVMRUFTRQorCX0gb3A7CisJdWludDMyX3QgcGFkNjQ7Cit9OworCitzdHJ1Y3QgZHJt X2lwdnJfZ2VtX3dhaXQgeworCS8qIEhhbmRsZSBvZiBCTyB3ZSBzaGFsbCB3YWl0IG9uICovCisJ dWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IGZsYWdzOworfTsKKworc3RydWN0IGRybV9pcHZy X2dlbV91c2VycHRyIHsKKwl1aW50NjRfdCB1c2VyX3B0cjsKKwl1aW50NjRfdCB1c2VyX3NpemU7 CisJdWludDY0X3QgZ3B1X29mZnNldDsKKwl1aW50MzJfdCBjYWNoZV9sZXZlbDsKKyAgICB1aW50 MzJfdCB0aWxpbmc7CisJLyoKKwkgKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QuCisJ ICogT2JqZWN0IGhhbmRsZXMgYXJlIG5vbnplcm8uCisJICovCisJdWludDMyX3QgaGFuZGxlOwor fTsKKworLyoKKyAqIElQVlIgR0VNIHNwZWNpZmljIGlvY3RscworICogVGhlIGRldmljZSBzcGVj aWZpYyBpb2N0bCByYW5nZSBpcyAweDUwIHRvIDB4NWYuCisgKi8KKyNkZWZpbmUgRFJNX0lQVlJf Q09OVEVYVF9DUkVBVEUJCTB4MDAKKyNkZWZpbmUgRFJNX0lQVlJfQ09OVEVYVF9ERVNUUk9ZCTB4 MDEKKyNkZWZpbmUgRFJNX0lQVlJfTUlTQwkJCQkweDAyCisjZGVmaW5lIERSTV9JUFZSX0dFTV9F WEVDQlVGRkVSCQkweDAzCisjZGVmaW5lIERSTV9JUFZSX0dFTV9CVVNZCQkJMHgwNAorI2RlZmlu ZSBEUk1fSVBWUl9HRU1fQ1JFQVRFCQkJMHgwNQorI2RlZmluZSBEUk1fSVBWUl9HRU1fTU1BUAkJ CTB4MDYKKyNkZWZpbmUgRFJNX0lQVlJfU1lOQ19DUFUJCQkweDA3CisjZGVmaW5lIERSTV9JUFZS X0dFTV9XQUlUCQkJMHgwOAorI2RlZmluZSBEUk1fSVBWUl9HRU1fVVNFUlBUUgkJMHgwOQorCisj ZGVmaW5lIERSTV9JT0NUTF9JUFZSX0NPTlRFWFRfQ1JFQVRFCVwKKwlEUk1fSU9XUihEUk1fQ09N TUFORF9CQVNFICsgRFJNX0lQVlJfQ09OVEVYVF9DUkVBVEUsIHN0cnVjdCBkcm1faXB2cl9jb250 ZXh0X2NyZWF0ZSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfQ09OVEVYVF9ERVNUUk9ZCVwKKwlE Uk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSVBWUl9DT05URVhUX0RFU1RST1ksIHN0cnVj dCBkcm1faXB2cl9jb250ZXh0X2Rlc3Ryb3kpCisjZGVmaW5lIERSTV9JT0NUTF9JUFZSX01JU0MJ CVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfTUlTQywgc3RydWN0IGRy bV9pcHZyX21pc2MpCisjZGVmaW5lIERSTV9JT0NUTF9JUFZSX0dFTV9FWEVDQlVGRkVSCVwKKwlE Uk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfR0VNX0VYRUNCVUZGRVIsIHN0cnVj dCBkcm1faXB2cl9nZW1fZXhlY2J1ZmZlcikKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX0JV U1kJCVwKKwlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfR0VNX0JVU1ksIHN0 cnVjdCBkcm1faXB2cl9nZW1fYnVzeSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX0NSRUFU RQlcCisJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JUFZSX0dFTV9DUkVBVEUsIHN0 cnVjdCBkcm1faXB2cl9nZW1fY3JlYXRlKQorI2RlZmluZSBEUk1fSU9DVExfSVBWUl9HRU1fTU1B UAkJXAorCURSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSVBWUl9HRU1fTU1BUCwgc3Ry dWN0IGRybV9pcHZyX2dlbV9tbWFwKQorI2RlZmluZSBEUk1fSU9DVExfSVBWUl9TWU5DX0NQVQlc CisJRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfU1lOQ19DUFUsIHN0cnVjdCBk cm1faXB2cl9zeW5jX2NwdSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX1dBSVQJCVwKKwlE Uk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0lQVlJfR0VNX1dBSVQsIHN0cnVjdCBkcm1f aXB2cl9nZW1fd2FpdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0lQVlJfR0VNX1VTRVJQVFIJXAorCURS TV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSVBWUl9HRU1fVVNFUlBUUiwgc3RydWN0IGRy bV9pcHZyX2dlbV91c2VycHRyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhN2NjYmYKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2Rydi5jCkBAIC0wLDAgKzEsNzc2IEBACisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIGlwdnJfZHJ2LmM6IElQVlIgZHJpdmVyIGNvbW1vbiBmaWxlIGZv ciBpbml0aWFsaXphdGlvbi9kZS1pbml0aWFsaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykg MjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRz IFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAq IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dy YW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwK KyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNv bT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4 L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDx1YXBpL2RybS9kcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9w bV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJpcHZyX2Ry di5oIgorI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVkZSAiaXB2cl9tbXUuaCIKKyNpbmNs dWRlICJpcHZyX2V4ZWMuaCIKKyNpbmNsdWRlICJpcHZyX2J1ZmZlci5oIgorI2luY2x1ZGUgImlw dnJfZGVidWcuaCIKKyNpbmNsdWRlICJ2ZWRfaW5pdC5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgor I2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRfY21kLmgiCisjaW5jbHVkZSAiaXB2 cl90cmFjZS5oIgorCitpbnQzMl90IGRybV9pcHZyX2NwdXJlbGF4ID0gMDsKK2ludDMyX3QgZHJt X2lwdnJfdWRlbGF5ZGl2aWRlciA9IDE7CitpbnQzMl90IGRybV9pcHZyX3RyYXBfcGFnZWZhdWx0 cyA9IDA7CitpbnQzMl90IGRybV9pcHZyX3RpbGluZyA9IDE7CitpbnQzMl90IGRybV9pcHZyX2Rl YnVnID0gMHg4MDsKK2Jvb2wgZmFrZV9ib19kZWJ1ZyA9IGZhbHNlOworaW50MzJfdCBkcm1faXB2 cl9mcmVxID0gSVBfRlJFUV8yNjZfNjc7CisKK21vZHVsZV9wYXJhbV9uYW1lZCh0cmFwX3BhZ2Vm YXVsdHMsIGRybV9pcHZyX3RyYXBfcGFnZWZhdWx0cywgaW50LCAwNjAwKTsKK21vZHVsZV9wYXJh bV9uYW1lZChkZWJ1ZywgZHJtX2lwdnJfZGVidWcsIGludCwgMDYwMCk7Cittb2R1bGVfcGFyYW1f bmFtZWQoZnJlcSwgZHJtX2lwdnJfZnJlcSwgaW50LCAwNjAwKTsKKworTU9EVUxFX1BBUk1fREVT QyhkZWJ1ZywKKwkJImNvbnRyb2wgZGVidWcgaW5mbyBvdXRwdXQiCisJCSJkZWZhdWx0OiAwIgor CQkiMDpJUFZSX0RfR0VORVJBTCwgMTpJUFZSX0RfSU5JVCwgMjpJUFZSX0RfSVJRLCAzOklQVlJf RF9FTlRSWSIKKwkJIjQ6SVBWUl9EX1BNLCA1OklQVlJfRF9SRUcsIDY6SVBWUl9EX1ZFRCwgNzpJ UFZSX0RfV0FSTiIpOworTU9EVUxFX1BBUk1fREVTQyhmcmVxLAorCQkiY29udHJvbCBWRUQgZnJl cXVlbmN5IgorCQkiZGVmYXVsdDogMHgwYiAoMjY2LjY3IE1IeikiCisJCSIweDFmOiAxMDAuMDAg TUh6IgorCQkiMHgxZDogMTA2LjY3IE1IeiIKKwkJIjB4MTc6IDEzMy4zMCBNSHoiCisJCSIweDEz OiAxNjAuMDAgTUh6IgorCQkiMHgxMTogMTc3Ljc4IE1IeiIKKwkJIjB4MGY6IDIwMC4wMCBNSHoi CisJCSIweDBlOiAyMTMuMzMgTUh6IgorCQkiMHgwYjogMjY2LjY3IE1IeiIKKwkJIjB4MDk6IDMy MC4wMCBNSHoiKTsKKwordWludDMyX3QgUkVHSVNURVJfUkVBRChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1aW50MzJfdCByZWcpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlyZXR1cm4gaW9yZWFkMzIoZGV2X3ByaXYtPnZlZF9yZWdf YmFzZSArIGRldl9wcml2LT52ZWRfcmVnX29mZnNldCArIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQz Ml90CitpcHZyX2NvbnRleHRfY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJ CQkJCSAgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0 cnVjdCBkcm1faXB2cl9jb250ZXh0X2NyZWF0ZSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9p cHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgaXB2cl9j b250ZXh0ICppcHZyX2N0eCAgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWlu dDMyX3QgY3R4X2lkLCByZXQgPSAwOworCisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJcbiIpOwor CS8qIGFkZCB2aWRlbyBkZWNvZGUgY29udGV4dCAqLworCWlwdnJfY3R4ID0ga3phbGxvYyhzaXpl b2Yoc3RydWN0IGlwdnJfY29udGV4dCksIEdGUF9LRVJORUwpOworCWlmIChpcHZyX2N0eCAgPT0g TlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljdHhfaWQgPSBpZHJfYWxsb2MoJmRldl9wcml2 LT5pcHZyX2N0eF9pZHIsIGlwdnJfY3R4ICwKKwkJCSAgIElQVlJfTUlOX0NPTlRFWFRfSUQsIElQ VlJfTUFYX0NPTlRFWFRfSUQsCisJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoY3R4X2lkIDwgMCkK KwkJcmV0dXJuIC1FTk9NRU07CisJaXB2cl9jdHgtPmN0eF9pZCA9IGN0eF9pZDsKKworCUlOSVRf TElTVF9IRUFEKCZpcHZyX2N0eC0+aGVhZCk7CisJaXB2cl9jdHgtPmN0eF90eXBlID0gYXJncy0+ Y3R4X3R5cGU7CisJaXB2cl9jdHgtPmlwdnJfZnByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2 OworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jaywgaXJxX2ZsYWdz KTsKKwlsaXN0X2FkZCgmaXB2cl9jdHggLT5oZWFkLCAmZGV2X3ByaXYtPmlwdnJfY3R4X2xpc3Qp OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcHZyX2N0eF9sb2NrLCBpcnFf ZmxhZ3MpOworCWFyZ3MtPmN0eF9pZCA9IGN0eF9pZDsKKwlJUFZSX0RFQlVHX0lOSVQoImFkZCBj dHggcHJvZmlsZSAlZCwgZW50cnkgJWQsIGN0eF9pZCBpcyAlZCwgIgorCQkJInByb3RlY3RlZCBp cyAlZC5cbiIsCisJCQkoaXB2cl9jdHgtPmN0eF90eXBlID4+IDgpICYgMHhmZiwKKwkJCWlwdnJf Y3R4LT5jdHhfdHlwZSAmIDB4ZmYsIGN0eF9pZCwKKwkJCWlwdnJfY3R4LT5jdHhfdHlwZSAmIFZB X1JUX0ZPUk1BVF9QUk9URUNURUQpOworCS8qCisJICogdG9kbzogb25seSBvbmUgdGlsaW5nIHJl Z2lvbiBpcyBzdXBwb3J0ZWQgbm93LAorCSAqIG1heWJlIHdlIG5lZWQgY3JlYXRlIGFkZGl0aW9u YWwgdGlsaW5nIHJlZ2lvbiBmb3Igcm90YXRpb24gY2FzZSwKKwkgKiB3aGljaCBoYXMgZGlmZmVy ZW50IHRpbGluZyBzdHJpZGUKKwkgKi8KKwlpZiAoKGFyZ3MtPnRpbGluZ19zY2hlbWUgPT0gMCAm JiBhcmdzLT50aWxpbmdfc3RyaWRlIDw9IDMpIHx8CisJCShhcmdzLT50aWxpbmdfc2NoZW1lID09 IDEgJiYgYXJncy0+dGlsaW5nX3N0cmlkZSA8PSAyKSkgeworCQlpcHZyX2N0eC0+dGlsaW5nX3Nj aGVtZSA9IGFyZ3MtPnRpbGluZ19zY2hlbWU7CisJCWlwdnJfY3R4LT50aWxpbmdfc3RyaWRlID0g YXJncy0+dGlsaW5nX3N0cmlkZTsKKwl9IGVsc2UgeworCQlJUFZSX0RFQlVHX1dBUk4oInVuc3Vw cG9ydGVkIHRpbGluZyBzY2hlbWUgJWQgYW5kIHN0aWRlICVkLlxuIiwKKwkJCWFyZ3MtPnRpbGlu Z19zY2hlbWUsIGFyZ3MtPnRpbGluZ19zdHJpZGUpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90CitpcHZyX2NvbnRleHRfZGVzdHJveV9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX2NvbnRleHRfZGVz dHJveSAqYXJncyA9IGRhdGE7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2lwdnJfZmlsZV9wcml2YXRlICpmcHJpdiA9 IGZpbGVfcHJpdi0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9 IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKwlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eCAg PSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCisJSVBWUl9ERUJVR19FTlRSWSgi ZW50ZXJcbiIpOworCWlwdnJfY3R4ID0gKHN0cnVjdCBpcHZyX2NvbnRleHQgKikKKwkJCWlkcl9m aW5kKCZkZXZfcHJpdi0+aXB2cl9jdHhfaWRyLCBhcmdzLT5jdHhfaWQpOworCWlmICghaXB2cl9j dHggIHx8IChpcHZyX2N0eC0+aXB2cl9mcHJpdiAhPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2KSkg eworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJSVBWUl9ERUJVR19QTSgiVmlkZW86cmVtb3ZlIGNv bnRleHQgcHJvZmlsZSAlZCwgZW50cnlwb2ludCAlZFxuIiwKKwkJKGlwdnJfY3R4LT5jdHhfdHlw ZSA+PiA4KSAmIDB4ZmYsCisJCShpcHZyX2N0eC0+Y3R4X3R5cGUgJiAweGZmKSk7CisJbXV0ZXhf bG9jaygmdmVkX3ByaXYtPnZlZF9tdXRleCk7CisJaWYgKHZlZF9wcml2LT5pcHZyX2N0eCA9PSBp cHZyX2N0eCApCisJCXZlZF9wcml2LT5pcHZyX2N0eCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ2 ZWRfcHJpdi0+dmVkX211dGV4KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXB2 cl9jdHhfbG9jaywgaXJxX2ZsYWdzKTsKKwlsaXN0X2RlbCgmaXB2cl9jdHgtPmhlYWQpOworCWZw cml2LT5jdHhfaWQgPSBJUFZSX0NPTlRFWFRfSU5WQUxJRF9JRDsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jaywgaXJxX2ZsYWdzKTsKKworCWlkcl9yZW1v dmUoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIsIGlwdnJfY3R4LT5jdHhfaWQpOworCisJa2ZyZWUo aXB2cl9jdHgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50MzJfdAoraXB2cl9taXNjX2lv Y3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCisJCQkJc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0g ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2lwdnJfbWlzYyAqYXJncyA9IGRhdGE7CisJ aW50MzJfdCByZXQgPSAwOworCXVpbnQ2NF90IHZhbHVlOworCisJSVBWUl9ERUJVR19FTlRSWSgi ZW50ZXJcbiIpOworCWlmICghZGV2X3ByaXYpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJjYWxsZWQg d2l0aCBubyBpbml0aWFsaXphdGlvbi5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3dp dGNoIChhcmdzLT5rZXkpIHsKKwljYXNlIElQVlJfREVWSUNFX0lORk86IHsKKwkJLyogdG9kbzog cmVtb3ZlIGhhcmQtY29kaW5nICovCisJCXVpbnQzMl90IGRldmljZV9pbmZvID0gMHhmMzEgPDwg MTY7CisJCXJldCA9IGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikoKHVuc2lnbmVkIGxvbmcp YXJncy0+dmFsdWUpLAorCQkJJmRldmljZV9pbmZvLCBzaXplb2YoZGV2aWNlX2luZm8pKTsKKwkJ YnJlYWs7CisJfQorCWNhc2UgSVBWUl9VUERBVEVfVElMSU5HOiB7CisJCXN0cnVjdCBkcm1faXB2 cl91cGRhdGVfdGlsaW5nIHRpbGluZzsKKwkJc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgg ID0gTlVMTDsKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJnRpbGluZywKKwkJCQkodm9pZCBfX3Vz ZXIgKikoKHVuc2lnbmVkIGxvbmcpYXJncy0+YXJnKSwKKwkJCQlzaXplb2YodGlsaW5nKSk7CisJ CWlmIChyZXQpCisJCQlicmVhazsKKworCQlpcHZyX2N0eCAgPSAoc3RydWN0IGlwdnJfY29udGV4 dCAqKQorCQkJaWRyX2ZpbmQoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIsIHRpbGluZy5jdHhfaWQp OworCQlpZiAoIWlwdnJfY3R4IHx8CisJCQkoaXB2cl9jdHgtPmlwdnJfZnByaXYgIT0gZmlsZV9w cml2LT5kcml2ZXJfcHJpdikpIHsKKwkJCUlQVlJfREVCVUdfV0FSTigiZmFpbCB0byBmaW5kIGN0 eCAlZCIsIHRpbGluZy5jdHhfaWQpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJSVBWUl9E RUJVR19HRU5FUkFMKCJWaWRlbzogdXBkYXRlIHZpZGVvIHRpbGluZyBmb3IgY3R4ICVkLCAiCisJ CQkib2xkIHRpbGluZyBzY2hlbWUgaXMgJWQsIG9sZCB0aWxpbmcgc3RyaWRlIGlzICVkLCAiCisJ CQkibmV3IHRpbGluZyBzY2hlbWUgaXMgJWQsIG5ldyB0aWxpbmcgc3RyaWRlIGlzICVkLlxuIiwK KwkJCXRpbGluZy5jdHhfaWQsCisJCQlpcHZyX2N0eCAtPnRpbGluZ19zY2hlbWUsIGlwdnJfY3R4 IC0+dGlsaW5nX3N0cmlkZSwKKwkJCXRpbGluZy50aWxpbmdfc2NoZW1lLCB0aWxpbmcudGlsaW5n X3N0cmlkZSk7CisJCWlmICgodGlsaW5nLnRpbGluZ19zY2hlbWUgPT0gMCAmJiB0aWxpbmcudGls aW5nX3N0cmlkZSA8PSAzKSB8fAorCQkodGlsaW5nLnRpbGluZ19zY2hlbWUgPT0gMSAmJiB0aWxp bmcudGlsaW5nX3N0cmlkZSA8PSAyKSkgeworCQkJaXB2cl9jdHggLT50aWxpbmdfc2NoZW1lID0g dGlsaW5nLnRpbGluZ19zY2hlbWU7CisJCQlpcHZyX2N0eCAtPnRpbGluZ19zdHJpZGUgPSB0aWxp bmcudGlsaW5nX3N0cmlkZTsKKwkJfSBlbHNlIHsKKwkJCUlQVlJfRVJST1IoInVuc3VwcG9ydGVk IHRpbGUgc2NoZW1lOiAlZCwgc3RpZGU6ICVkLlxuIiwKKwkJCQl0aWxpbmcudGlsaW5nX3NjaGVt ZSwgdGlsaW5nLnRpbGluZ19zdHJpZGUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJfQorCQlicmVh azsKKwl9CisJZGVmYXVsdDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWx1ZSwKKwkJCQkodm9p ZCBfX3VzZXIgKikoKHVuc2lnbmVkIGxvbmcpYXJncy0+dmFsdWUpLAorCQkJCXNpemVvZih2YWx1 ZSkpKSB7CisJCQlJUFZSX0RFQlVHX1dBUk4oImNvcHlfZnJvbV91c2VyIGZhaWxlZFxuIik7CisJ CQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAq KSgodW5zaWduZWQgbG9uZylhcmdzLT52YWx1ZSksCisJCQkJJnZhbHVlLCBzaXplb2YodmFsdWUp KSkgeworCQkJSVBWUl9ERUJVR19XQVJOKCJjb3B5X3RvX3VzZXIgZmFpbGVkXG4iKTsKKwkJCXJl dHVybiAtRUZBVUxUOworCQl9CisJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGRybV9pb2N0bF9kZXNjIGlwdnJfZ2VtX2lvY3Rs c1tdID0geworCURSTV9JT0NUTF9ERUZfRFJWKElQVlJfQ09OVEVYVF9DUkVBVEUsCisJCQlpcHZy X2NvbnRleHRfY3JlYXRlX2lvY3RsLCBEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUZfRFJW KElQVlJfQ09OVEVYVF9ERVNUUk9ZLAorCQkJaXB2cl9jb250ZXh0X2Rlc3Ryb3lfaW9jdGwsIERS TV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9NSVNDLAorCQkJaXB2cl9taXNj X2lvY3RsLCBEUk1fQVVUSCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9HRU1fRVhFQ0JVRkZF UiwKKwkJCWlwdnJfZ2VtX2V4ZWNidWZmZXIsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJN X0lPQ1RMX0RFRl9EUlYoSVBWUl9HRU1fQlVTWSwKKwkJCWlwdnJfZ2VtX2J1c3lfaW9jdGwsIERS TV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRl9EUlYoSVBWUl9HRU1fQ1JFQVRF LAorCQkJaXB2cl9nZW1fY3JlYXRlX2lvY3RsLCBEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9E RUZfRFJWKElQVlJfR0VNX01NQVAsCisJCQlpcHZyX2dlbV9tbWFwX2lvY3RsLCBEUk1fVU5MT0NL RUQpLAorCURSTV9JT0NUTF9ERUZfRFJWKElQVlJfU1lOQ19DUFUsCisJCQlpcHZyX3N5bmNfY3B1 X2lvY3RsLCBEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUZfRFJWKElQVlJfR0VNX1dBSVQs CisJCQlpcHZyX2dlbV93YWl0X2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9J T0NUTF9ERUZfRFJWKElQVlJfR0VNX1VTRVJQVFIsCisJCQlpcHZyX2dlbV91c2VycHRyX2lvY3Rs LCBEUk1fVU5MT0NLRUQpLAorfTsKKworc3RhdGljIHZvaWQgaXB2cl9nZW1faW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9 IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkZXZfcHJpdi0+aXB2cl9ib19zbGFiID0ga21lbV9jYWNo ZV9jcmVhdGUoImlwdnJfZ2VtX29iamVjdCIsCisJCQkJICBzaXplb2YodW5pb24gZHJtX2lwdnJf Z2VtX29iamVjdHMpLCAwLAorCQkJCSAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKworCUlO SVRfTElTVF9IRUFEKCZkZXZfcHJpdi0+aXB2cl9tbS51bmJvdW5kX2xpc3QpOworCUlOSVRfTElT VF9IRUFEKCZkZXZfcHJpdi0+aXB2cl9tbS5ib3VuZF9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgm ZGV2X3ByaXYtPmlwdnJfbW0ub2JqZWN0X3N0YXRfbG9jayk7CisKKwlkZXZfcHJpdi0+aXB2cl9t bS5pbnRlcnJ1cHRpYmxlID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgaXB2cl9nZW1fc2V0dXBf bW11KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGlu ZWFyX3N0YXJ0LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxpbmVhcl9lbmQsCisJCQkJICAg ICAgIHVuc2lnbmVkIGxvbmcgdGlsaW5nX3N0YXJ0LAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25n IHRpbGluZ19lbmQpCit7CisJLyogTGV0IEdFTSBNYW5hZ2UgYWxsIG9mIHRoZSBhcGVydHVyZS4K KwkgKgorCSAqIEhvd2V2ZXIsIGxlYXZlIG9uZSBwYWdlIGF0IHRoZSBlbmQgc3RpbGwgYm91bmQg dG8gdGhlIHNjcmF0Y2ggcGFnZS4KKwkgKiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGxhY2VzIHdo ZXJlIGhhcmR3YXJlIGFwcGFyZW50bHkgcHJlZmV0Y2hlcworCSAqIHBhc3QgdGhlIGVuZCBvZiB0 aGUgb2JqZWN0LCBhbmQgd2UndmUgc2VlbiBtdWx0aXBsZSBoYW5ncyB3aXRoIHRoZQorCSAqIEdQ VSBoZWFkIHBvaW50ZXIgc3R1Y2sgaW4gYSBiYXRjaGJ1ZmZlciBib3VuZCBhdCBsYXN0IHBhZ2Ug b2YgdGhlCisJICogYXBlcnR1cmUuICBPbmUgcGFnZSBzaG91bGQgYmUgZW5vdWdoIHRvIGtlZXAg YW55IHByZWZldGNoaW5nIGluc2lkZQorCSAqIG9mIHRoZSBhcGVydHVyZS4KKwkgKi8KKwlzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVj dCBpcHZyX2FkZHJlc3Nfc3BhY2UgKmFkZHJfc3BhY2UgPSAmZGV2X3ByaXYtPmFkZHJfc3BhY2U7 CisKKwkvKiB0b2RvOiBhZGQgc2FuaXR5IGNoZWNrICovCisJYWRkcl9zcGFjZS0+ZGV2ID0gZGV2 X3ByaXYtPmRldjsKKwlJTklUX0xJU1RfSEVBRCgmYWRkcl9zcGFjZS0+YWN0aXZlX2xpc3QpOwor CUlOSVRfTElTVF9IRUFEKCZhZGRyX3NwYWNlLT5pbmFjdGl2ZV9saXN0KTsKKworCS8qIFN1YnRy YWN0IHRoZSBndWFyZCBwYWdlIC4uLiAqLworCWRybV9tbV9pbml0KCZhZGRyX3NwYWNlLT5saW5l YXJfbW0sIGxpbmVhcl9zdGFydCwKKwkJICAgIGxpbmVhcl9lbmQgLSBsaW5lYXJfc3RhcnQgLSBQ QUdFX1NJWkUpOworCWRldl9wcml2LT5hZGRyX3NwYWNlLmxpbmVhcl9zdGFydCA9IGxpbmVhcl9z dGFydDsKKwlkZXZfcHJpdi0+YWRkcl9zcGFjZS5saW5lYXJfdG90YWwgPSBsaW5lYXJfZW5kIC0g bGluZWFyX3N0YXJ0OworCisJZHJtX21tX2luaXQoJmFkZHJfc3BhY2UtPnRpbGluZ19tbSwgdGls aW5nX3N0YXJ0LAorCQkgICAgdGlsaW5nX2VuZCAtIHRpbGluZ19zdGFydCAtIFBBR0VfU0laRSk7 CisJZGV2X3ByaXYtPmFkZHJfc3BhY2UudGlsaW5nX3N0YXJ0ID0gdGlsaW5nX3N0YXJ0OworCWRl dl9wcml2LT5hZGRyX3NwYWNlLnRpbGluZ190b3RhbCA9IHRpbGluZ19lbmQgLSB0aWxpbmdfc3Rh cnQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfZG9fdGFrZWRvd24oc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwkvKiB0b2RvOiBuZWVkIGNoZWNrIGlmIG5lZWQgY2xlYW4gdXAgbW0gaGVyZSAq LworCWlwdnJfdmVkX3VuaW5pdChkZXYpOworfQorCitzdGF0aWMgaW50MzJfdCBpcHZyX2RybV91 bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJQlVHX09OKCFkZXYtPnBsYXRmb3Jt ZGV2KTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJmRldl9wcml2LT52ZWRfcG93ZXJfdXNhZ2UpKTsK KworCUlQVlJfREVCVUdfRU5UUlkoImVudGVyZWQuIik7CisJaWYgKGRldl9wcml2KSB7CisJCVdB Uk5fT04ocG1fcnVudGltZV9nZXRfc3luYygmZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KSA8IDApOwor CisJCWlmIChkZXZfcHJpdi0+aXB2cl9ib19zbGFiKQorCQkJa21lbV9jYWNoZV9kZXN0cm95KGRl dl9wcml2LT5pcHZyX2JvX3NsYWIpOworCQlpcHZyX2ZlbmNlX2RyaXZlcl9maW5pKGRldl9wcml2 KTsKKworCQlpcHZyX2RvX3Rha2Vkb3duKGRldik7CisKKwkJV0FSTl9PTihwbV9ydW50aW1lX3B1 dF9zeW5jX3N1c3BlbmQoJmRldi0+cGxhdGZvcm1kZXYtPmRldikgPCAwKTsKKworCQlpZiAoZGV2 X3ByaXYtPnZhbGlkYXRlX2N0eC5idWZmZXJzKQorCQkJdmZyZWUoZGV2X3ByaXYtPnZhbGlkYXRl X2N0eC5idWZmZXJzKTsKKworCQlpZiAoZGV2X3ByaXYtPnBmX3BkKSB7CisJCQlpcHZyX21tdV9m cmVlX3BhZ2VkaXIoZGV2X3ByaXYtPnBmX3BkKTsKKwkJCWRldl9wcml2LT5wZl9wZCA9IE5VTEw7 CisJCX0KKwkJaWYgKGRldl9wcml2LT5tbXUpIHsKKwkJCWlwdnJfbW11X2RyaXZlcl90YWtlZG93 bihkZXZfcHJpdi0+bW11KTsKKwkJCWRldl9wcml2LT5tbXUgPSBOVUxMOworCQl9CisKKwkJaWYg KGRldl9wcml2LT52ZWRfcmVnX2Jhc2UpIHsKKwkJCWlvdW5tYXAoZGV2X3ByaXYtPnZlZF9yZWdf YmFzZSAtIGRldl9wcml2LT52ZWRfcmVnX29mZnNldCk7CisJCQlkZXZfcHJpdi0+dmVkX3JlZ19i YXNlID0gTlVMTDsKKwkJCWRldl9wcml2LT52ZWRfcmVnX29mZnNldCA9IDA7CisJCX0KKworCQls aXN0X2RlbCgmZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmhlYWQpOworCQlpZHJfcmVtb3ZlKCZkZXZf cHJpdi0+aXB2cl9jdHhfaWRyLCBkZXZfcHJpdi0+ZGVmYXVsdF9jdHguY3R4X2lkKTsKKwkJa2Zy ZWUoZGV2X3ByaXYpOworCisJfQorCisJcG1fcnVudGltZV9kaXNhYmxlKCZkZXYtPnBsYXRmb3Jt ZGV2LT5kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQzMl90IGlwdnJfZHJtX2xv YWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXY7CisJaW50MzJfdCBjdHhfaWQsIHJldCA9IDA7 CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl c19tbWlvLCAqcmVzX3JlZzsKKwl2b2lkIF9faW9tZW0qIG1taW9fYWRkcjsKKworCWRldl9wcml2 ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldl9wcml2 ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5kZXZfcHJpdmF0ZSA9IGRldl9w cml2OworCWRldl9wcml2LT5kZXYgPSBkZXY7CisKKwlCVUdfT04oIWRldi0+cGxhdGZvcm1kZXYp OworCXBsYXRkZXYgPSBkZXYtPnBsYXRmb3JtZGV2OworCisJbXV0ZXhfaW5pdCgmZGV2X3ByaXYt PmNtZGJ1Zl9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldl9wcml2LT52YWxpZGF0ZV9jdHgu dmFsaWRhdGVfbGlzdCk7CisKKwlkZXZfcHJpdi0+cGNpX3Jvb3QgPSBwY2lfZ2V0X2J1c19hbmRf c2xvdCgwLCBQQ0lfREVWRk4oMCwgMCkpOworCWlmICghZGV2X3ByaXYtPnBjaV9yb290KSB7CisJ CWtmcmVlKGRldl9wcml2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2LT5pcnEgPSBw bGF0Zm9ybV9nZXRfaXJxKHBsYXRkZXYsIDApOworCWlmIChkZXYtPmlycSA8IDApIHsKKwkJcmV0 ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyOworCX0KKworCXJlc19tbWlvID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlKHBsYXRkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXNfcmVnID0gcGxh dGZvcm1fZ2V0X3Jlc291cmNlKHBsYXRkZXYsIElPUkVTT1VSQ0VfUkVHLCAwKTsKKwlpZiAoIXJl c19tbWlvIHx8ICFyZXNfcmVnKSB7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBvdXRfZXJyOwor CX0KKworCW1taW9fYWRkciA9IGlvcmVtYXBfd2MocmVzX21taW8tPnN0YXJ0LAorCQkJCQlyZXNf bW1pby0+ZW5kIC0gcmVzX21taW8tPnN0YXJ0KTsKKwlpZiAoSVNfRVJSKG1taW9fYWRkcikpIHsK KwkJcmV0ID0gLUVBQ0NFUzsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWRldl9wcml2LT52ZWRf cmVnX2Jhc2UgPSBtbWlvX2FkZHIgKyByZXNfcmVnLT5zdGFydDsKKwlkZXZfcHJpdi0+dmVkX3Jl Z19vZmZzZXQgPSByZXNfcmVnLT5zdGFydDsKKwlJUFZSX0RFQlVHX1ZFRCgidmVkX3JlZ19iYXNl IGlzICVwLCByYW5nZSBpcyAweCVsbHggLSAweCVsbHguXG4iLAorCQlkZXZfcHJpdi0+dmVkX3Jl Z19iYXNlLAorCQlyZXNfcmVnLT5zdGFydCwgcmVzX3JlZy0+ZW5kKTsKKworCXBsYXRmb3JtX3Nl dF9kcnZkYXRhKGRldi0+cGxhdGZvcm1kZXYsIGRldik7CisJcG1fcnVudGltZV9lbmFibGUoJmRl di0+cGxhdGZvcm1kZXYtPmRldik7CisKKwlpZiAocG1fcnVudGltZV9nZXRfc3luYygmZGV2LT5w bGF0Zm9ybWRldi0+ZGV2KSA8IDApIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dF9lcnI7 CisJfQorCisJSVBWUl9ERUJVR19JTklUKCJNU1ZEWF9DT1JFX1JFVl9PRkZTRVQgYnkgcmVhZGwg aXMgMHgleC5cbiIsCisJCXJlYWRsKGRldl9wcml2LT52ZWRfcmVnX2Jhc2UgKyAweDY0MCkpOwor CUlQVlJfREVCVUdfSU5JVCgiTVNWRFhfQ09SRV9SRVZfT0ZGU0VUIGJ5IFZFRF9SRUdfUkVBRDMy IGlzIDB4JXguXG4iLAorCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT1JFX1JFVl9PRkZTRVQpKTsK KworCS8qIG1tdSBpbml0ICovCisJZGV2X3ByaXYtPm1tdSA9IGlwdnJfbW11X2RyaXZlcl9pbml0 KCh2b2lkICopMCwKKwkJZHJtX2lwdnJfdHJhcF9wYWdlZmF1bHRzLAorCQkwLCBkZXZfcHJpdik7 CisJaWYgKCFkZXZfcHJpdi0+bW11KSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXRfZXJy OworCX0KKworCWRldl9wcml2LT5wZl9wZCA9IGlwdnJfbW11X2FsbG9jX3BkKGRldl9wcml2LT5t bXUsIDEsIDApOworCWlmICghZGV2X3ByaXYtPnBmX3BkKSB7CisJCXJldCA9IC1FTk9NRU07CisJ CWdvdG8gb3V0X2VycjsKKwl9CisKKwlpcHZyX21tdV9zZXRfcGRfY29udGV4dChpcHZyX21tdV9n ZXRfZGVmYXVsdF9wZChkZXZfcHJpdi0+bW11KSwgMCk7CisJaXB2cl9tbXVfc2V0X3BkX2NvbnRl eHQoZGV2X3ByaXYtPnBmX3BkLCAxKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBzZXF1ZW5jZSBu dW1iZXJzIGZvciB0aGUgZGlmZmVyZW50IGNvbW1hbmQKKwkgKiBzdWJtaXNzaW9uIG1lY2hhbmlz bXMuCisJICovCisJZGV2X3ByaXYtPmxhc3Rfc2VxID0gMTsKKworCWlwdnJfZ2VtX2luaXQoZGV2 KTsKKworCWlwdnJfZ2VtX3NldHVwX21tdShkZXYsCisJCUlQVlJfTUVNX01NVV9MSU5FQVJfU1RB UlQsCisJCUlQVlJfTUVNX01NVV9MSU5FQVJfRU5ELAorCQlJUFZSX01FTV9NTVVfVElMSU5HX1NU QVJULAorCQlJUFZSX01FTV9NTVVfVElMSU5HX0VORCk7CisKKwlpcHZyX3ZlZF9pbml0KGRldik7 CisKKwlXQVJOX09OKHBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZCgmZGV2LT5wbGF0Zm9ybWRl di0+ZGV2KSA8IDApOworCisJZGV2X3ByaXYtPnZlZF9wcml2YXRlLT52ZWRfbmVlZHNfcmVzZXQg PSAxOworCW11dGV4X2luaXQoJmRldl9wcml2LT52ZWRfcG1fbXV0ZXgpOworCWF0b21pY19zZXQo JmRldl9wcml2LT52ZWRfcG93ZXJfdXNhZ2UsIDApOworCisJaXB2cl9mZW5jZV9kcml2ZXJfaW5p dChkZXZfcHJpdik7CisKKwlkZXZfcHJpdi0+dmFsaWRhdGVfY3R4LmJ1ZmZlcnMgPQorCQl2bWFs bG9jKElQVlJfTlVNX1ZBTElEQVRFX0JVRkZFUlMgKgorCQkJc2l6ZW9mKHN0cnVjdCBpcHZyX3Zh bGlkYXRlX2J1ZmZlcikpOworCWlmICghZGV2X3ByaXYtPnZhbGlkYXRlX2N0eC5idWZmZXJzKSB7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwkvKiBpcHZyIGNvbnRl eHQgaW5pdGlhbGl6YXRpb24gKi8KKwlJTklUX0xJU1RfSEVBRCgmZGV2X3ByaXYtPmlwdnJfY3R4 X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jayk7CisJaWRy X2luaXQoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIpOworCS8qIGRlZmF1bHQgaXB2ciBjb250ZXh0 IGlzIHVzZWQgZm9yIHNjYWxpbmcsIHJvdGF0aW9uIGNhc2UgKi8KKwljdHhfaWQgPSBpZHJfYWxs b2MoJmRldl9wcml2LT5pcHZyX2N0eF9pZHIsICZkZXZfcHJpdi0+ZGVmYXVsdF9jdHgsCisJCQkg ICBJUFZSX01JTl9DT05URVhUX0lELCBJUFZSX01BWF9DT05URVhUX0lELAorCQkJICAgR0ZQX0tF Uk5FTCk7CisJaWYgKGN0eF9pZCA8IDApIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJCWdvdG8gb3V0 X2VycjsKKwl9CisJZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmN0eF9pZCA9IGN0eF9pZDsKKwlJTklU X0xJU1RfSEVBRCgmZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmhlYWQpOworCWRldl9wcml2LT5kZWZh dWx0X2N0eC5jdHhfdHlwZSA9IDA7CisJZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmlwdnJfZnByaXYg PSBOVUxMOworCisJLyogZG9uJ3QgbmVlZCBwcm90ZWN0IHdpdGggc3BpbmxvY2sgZHVyaW5nIG1v ZHVsZSBsb2FkIHN0YWdlICovCisJbGlzdF9hZGQoJmRldl9wcml2LT5kZWZhdWx0X2N0eC5oZWFk LCAmZGV2X3ByaXYtPmlwdnJfY3R4X2xpc3QpOworCWRldl9wcml2LT5kZWZhdWx0X2N0eC50aWxp bmdfc2NoZW1lID0gMDsKKwlkZXZfcHJpdi0+ZGVmYXVsdF9jdHgudGlsaW5nX3N0cmlkZSA9IDA7 CisKKwlyZXR1cm4gMDsKK291dF9lcnI6CisJaXB2cl9kcm1fdW5sb2FkKGRldik7CisJcmV0dXJu IHJldDsKKworfQorCisvKgorICogVGhlIC5vcGVuKCkgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0 aW1lIHRoZSBkZXZpY2UgaXMgb3BlbmVkIGJ5IGFuCisgKiBhcHBsaWNhdGlvbi4gRHJpdmVycyBj YW4gYWxsb2NhdGUgcGVyLWZpbGUgcHJpdmF0ZSBkYXRhIGluIHRoaXMgbWV0aG9kIGFuZAorICog c3RvcmUgdGhlbSBpbiB0aGUgc3RydWN0IGRybV9maWxlOjpkcml2ZXJfcHJpdiBmaWVsZC4gTm90 ZSB0aGF0IHRoZSAub3BlbigpCisgKiBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSAuZmlyc3RvcGVu KCkuCisgKi8KK3N0YXRpYyBpbnQzMl90CitpcHZyX2RybV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9m aWxlX3ByaXZhdGUgKmlwdnJfZnA7CisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJcbiIpOworCisJ aXB2cl9mcCA9IGt6YWxsb2Moc2l6ZW9mKCppcHZyX2ZwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVu bGlrZWx5KGlwdnJfZnAgPT0gTlVMTCkpCisJCXJldHVybiAtRU5PTUVNOworCisJZmlsZV9wcml2 LT5kcml2ZXJfcHJpdiA9IGlwdnJfZnA7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBj bG9zZSBvcGVyYXRpb24gaXMgc3BsaXQgaW50byAucHJlY2xvc2UoKSBhbmQgLnBvc3RjbG9zZSgp IG1ldGhvZHMuCisgKiBEcml2ZXJzIG11c3Qgc3RvcCBhbmQgY2xlYW51cCBhbGwgcGVyLWZpbGUg b3BlcmF0aW9ucyBpbiB0aGUgLnByZWNsb3NlKCkKKyAqIG1ldGhvZC4gRm9yIGluc3RhbmNlIHBl bmRpbmcgdmVydGljYWwgYmxhbmtpbmcgYW5kIHBhZ2UgZmxpcCBldmVudHMgbXVzdCBiZQorICog Y2FuY2VsbGVkLiBObyBwZXItZmlsZSBvcGVyYXRpb24gaXMgYWxsb3dlZCBvbiB0aGUgZmlsZSBo YW5kbGUgYWZ0ZXIKKyAqIHJldHVybmluZyBmcm9tIHRoZSAucHJlY2xvc2UoKSBtZXRob2QuCisg Ki8KK3N0YXRpYyB2b2lkCitpcHZyX2RybV9wcmVjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwkvKiBpZiB1c2VyIGRpZG4ndCBkZXN0 b3J5IGN0eCBleHBsaWNpdGx5LCByZW1vdmUgY3R4IGhlcmUgKi8KKwlzdHJ1Y3QgZHJtX2lwdnJf cHJpdmF0ZSAqZGV2X3ByaXY7CisJc3RydWN0IGRybV9pcHZyX2ZpbGVfcHJpdmF0ZSAqaXB2cl9m cHJpdjsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2OworCXN0cnVjdCBpcHZyX2NvbnRl eHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlJUFZS X0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwor CWlwdnJfZnByaXYgPSBmaWxlX3ByaXYtPmRyaXZlcl9wcml2OworCXZlZF9wcml2ID0gZGV2X3By aXYtPnZlZF9wcml2YXRlOworCisJaWYgKGlwdnJfZnByaXYtPmN0eF9pZCA9PSBJUFZSX0NPTlRF WFRfSU5WQUxJRF9JRCkKKwkJcmV0dXJuOworCWlwdnJfY3R4ID0gKHN0cnVjdCBpcHZyX2NvbnRl eHQgKikKKwkJCWlkcl9maW5kKCZkZXZfcHJpdi0+aXB2cl9jdHhfaWRyLCBpcHZyX2Zwcml2LT5j dHhfaWQpOworCWlmICghaXB2cl9jdHggIHx8IChpcHZyX2N0eC0+aXB2cl9mcHJpdiAhPSBpcHZy X2Zwcml2KSkgeworCQlJUFZSX0RFQlVHX0dFTkVSQUwoImN0eCBmb3IgaWQgJWQgaGFzIGFscmVh ZHkgZGVzdHJveWVkXG4iLAorCQkJCWlwdnJfZnByaXYtPmN0eF9pZCk7CisJCXJldHVybjsKKwl9 CisJSVBWUl9ERUJVR19QTSgiVmlkZW86cmVtb3ZlIGNvbnRleHQgcHJvZmlsZSAlZCwgZW50cnlw b2ludCAlZFxuIiwKKwkJKGlwdnJfY3R4LT5jdHhfdHlwZSA+PiA4KSAmIDB4ZmYsCisJCShpcHZy X2N0eC0+Y3R4X3R5cGUgJiAweGZmKSk7CisJbXV0ZXhfbG9jaygmdmVkX3ByaXYtPnZlZF9tdXRl eCk7CisJaWYgKHZlZF9wcml2LT5pcHZyX2N0eCA9PSBpcHZyX2N0eCApCisJCXZlZF9wcml2LT5p cHZyX2N0eCA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZ2ZWRfcHJpdi0+dmVkX211dGV4KTsKKwor CXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXB2cl9jdHhfbG9jaywgaXJxX2ZsYWdzKTsK KwlsaXN0X2RlbCgmaXB2cl9jdHgtPmhlYWQpOworCWlwdnJfZnByaXYtPmN0eF9pZCA9IElQVlJf Q09OVEVYVF9JTlZBTElEX0lEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5p cHZyX2N0eF9sb2NrLCBpcnFfZmxhZ3MpOworCisJaWRyX3JlbW92ZSgmZGV2X3ByaXYtPmlwdnJf Y3R4X2lkciwgaXB2cl9jdHgtPmN0eF9pZCk7CisKKwlrZnJlZShpcHZyX2N0eCApOworfQorCisv KgorICogRmluYWxseSB0aGUgLnBvc3RjbG9zZSgpIG1ldGhvZCBpcyBjYWxsZWQgYXMgdGhlIGxh c3Qgc3RlcCBvZiB0aGUgY2xvc2UKKyAqIG9wZXJhdGlvbiwgcmlnaHQgYmVmb3JlIGNhbGxpbmcg dGhlIC5sYXN0Y2xvc2UoKSBtZXRob2QgaWYgbm8gb3RoZXIgb3BlbgorICogZmlsZSBoYW5kbGUg ZXhpc3RzIGZvciB0aGUgZGV2aWNlLiBEcml2ZXJzIHRoYXQgaGF2ZSBhbGxvY2F0ZWQgcGVyLWZp bGUKKyAqIHByaXZhdGUgZGF0YSBpbiB0aGUgLm9wZW4oKSBtZXRob2Qgc2hvdWxkIGZyZWUgaXQg aGVyZS4KKyAqLworc3RhdGljIHZvaWQKK2lwdnJfZHJtX3Bvc3RjbG9zZShzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2lw dnJfZmlsZV9wcml2YXRlICppcHZyX2Zwcml2ID0gZmlsZV9wcml2LT5kcml2ZXJfcHJpdjsKKwlJ UFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJa2ZyZWUoaXB2cl9mcHJpdik7Cit9CisKK3N0 YXRpYyBpcnFyZXR1cm5fdCBpcHZyX2lycV9oYW5kbGVyKGludDMyX3QgaXJxLCB2b2lkICphcmcp Cit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKSBhcmc7 CisJV0FSTl9PTih2ZWRfaXJxX2hhbmRsZXIoZGV2KSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcHZyX2ZvcHMgPSB7CisJ Lm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wZW4gPSBkcm1fb3BlbiwKKwkucmVsZWFzZSA9IGRy bV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKKyNpZmRlZiBDT05GSUdf Q09NUEFUCisJLmNvbXBhdF9pb2N0bCA9IGRybV9pb2N0bCwKKyNlbmRpZgorCS8qIG5vIG5lZWQg dG8gZGVmaW5lIG1tYXAuIFVzZXIgc3BhY2UgbWFwcyBibyB3aXRoIERSTV9JUFZSX0dFTV9NTUFQ ICovCit9OworCitzdGF0aWMgaW50MzJfdCBpcHZyX2RybV9mcmVlemUoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKK3sKKwlpbnQzMl90IHJldDsKKwlpbnQzMl90IHBvd2VyX3VzYWdlOworCXN0cnVj dCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlJUFZS X0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJcG93ZXJfdXNhZ2UgPSBhdG9taWNfcmVhZCgmZGV2 X3ByaXYtPnZlZF9wb3dlcl91c2FnZSk7CisJQlVHX09OKHBvd2VyX3VzYWdlIDwgMCk7CisJaWYg KHBvd2VyX3VzYWdlID4gMCkgeworCQlJUFZSX0RFQlVHX1BNKCJWRUQgcG93ZXIgdXNhZ2UgaXMg JWQsIHNraXAgZnJlZXppbmdcbiIsIHBvd2VyX3VzYWdlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJ cmV0ID0gdmVkX2NoZWNrX2lkbGUoZGV2KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfREVCVUdfUE0o IlZFRCBjaGVjayBpZGxlIGZhaWw6ICVkLCBza2lwIGZyZWV6aW5nXG4iLCByZXQpOworCQlyZXR1 cm4gMDsKKwl9CisKKwlpZiAoZGV2LT5pcnFfZW5hYmxlZCkgeworCQlyZXQgPSBkcm1faXJxX3Vu aW5zdGFsbChkZXYpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJSVBWUl9FUlJPUigiRXJy b3IgdW5pbnN0YWxsaW5nIElSUSBoYW5kbGVyOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiAtRUZB VUxUOworCQl9CisJCUlQVlJfREVCVUdfUE0oIlN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZCBJUlFc biIpOworCX0KKwllbHNlCisJCUlQVlJfREVCVUdfUE0oImlycV9lbmFibGVkIGlzICVkXG4iLCBk ZXYtPmlycV9lbmFibGVkKTsKKworCWlmIChpc192ZWRfb24oZGV2KSkgeworCQlpZiAoIXZlZF9w b3dlcl9vZmYoZGV2KSkgeworCQkJSVBWUl9FUlJPUigiRmFpbGVkIHRvIHBvd2VyIG9mZiBWRURc biIpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJSVBWUl9ERUJVR19QTSgiU3VjY2Vzc2Z1 bGx5IHBvd2VyZWQgb2ZmXG4iKTsKKwl9IGVsc2UgeworCQlJUFZSX0RFQlVHX1BNKCJTa2lwZWQg cG93ZXItb2ZmIHNpbmNlIGFscmVhZHkgcG93ZXJlZCBvZmZcbiIpOworCX0KKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50MzJfdCBpcHZyX2RybV90aGF3KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCit7CisJaW50IHJldDsKKwlJUFZSX0RFQlVHX0VOVFJZKCJlbnRlclxuIik7CisJaWYgKCFp c192ZWRfb24oZGV2KSkgeworCQlpZiAoIXZlZF9wb3dlcl9vbihkZXYpKSB7CisJCQlJUFZSX0VS Uk9SKCJGYWlsZWQgdG8gcG93ZXIgb24gVkVEXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9 CisJCUlQVlJfREVCVUdfUE0oIlN1Y2Nlc3NmdWxseSBwb3dlcmVkIG9uXG4iKTsKKwl9IGVsc2Ug eworCQlJUFZSX0RFQlVHX1BNKCJTa2lwZWQgcG93ZXItb24gc2luY2UgYWxyZWFkeSBwb3dlcmVk IG9uXG4iKTsKKwl9CisKKwlpZiAoIWRldi0+aXJxX2VuYWJsZWQpIHsKKwkJcmV0ID0gZHJtX2ly cV9pbnN0YWxsKGRldiwgZGV2LT5pcnEpOworCQlpZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJF cnJvciBpbnN0YWxsaW5nIElSUSBoYW5kbGVyOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiAtRUZB VUxUOworCQl9CisJCUlQVlJfREVCVUdfUE0oIlN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQgSVJRXG4i KTsKKwl9CisJZWxzZQorCQlJUFZSX0RFQlVHX1BNKCJpcnFfZW5hYmxlZCBpcyAlZFxuIiwgZGV2 LT5pcnFfZW5hYmxlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl9w bV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwbGF0Zm9ybWRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBkcm1fZGV2 aWNlICpkcm1fZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGxhdGZvcm1kZXYpOworCUlQVlJf REVCVUdfUE0oIlBNIHN1c3BlbmQgY2FsbGVkXG4iKTsKKwlCVUdfT04oIWRybV9kZXYpOworCXJl dHVybiBpcHZyX2RybV9mcmVlemUoZHJtX2Rldik7Cit9CitzdGF0aWMgaW50MzJfdCBpcHZyX3Bt X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGxhdGZvcm1kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtX2RldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRmb3JtZGV2KTsKKwlJUFZSX0RF QlVHX1BNKCJQTSByZXN1bWUgY2FsbGVkXG4iKTsKKwlCVUdfT04oIWRybV9kZXYpOworCXJldHVy biBpcHZyX2RybV90aGF3KGRybV9kZXYpOworfQorCisvKgorICogZHVtcCBHRU0gQVBJIGlzIG1h aW5seSBmb3IgZHVtYiBidWZmZXJzIHN1aXRhYmxlIGZvciBzY2Fub3V0LAorICogaXQgaXMgbm90 IG5lZWRlZCBmb3IgaXB2ciBkcml2ZXIuCisgKiBnZW1fdm1fb3BzIGlzIHVzZWQgZm9yIG1tYXAg Y2FzZSwgYWxzbyBub3QgbmVlZGVkIGZvciBpcHZyCisgKiB0b2RvOiBwcmltZSBzdXBwb3J0IGNh biBiZSBlbmFibGVkIGxhdGVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBpcHZyX2Ry bV9kcml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9IQVZFX0lSUSB8IERSSVZF Ul9HRU0sCisJLmxvYWQgPSBpcHZyX2RybV9sb2FkLAorCS51bmxvYWQgPSBpcHZyX2RybV91bmxv YWQsCisJLm9wZW4gPSBpcHZyX2RybV9vcGVuLAorCS5wcmVjbG9zZSA9IGlwdnJfZHJtX3ByZWNs b3NlLAorCS5wb3N0Y2xvc2UgPSBpcHZyX2RybV9wb3N0Y2xvc2UsCisJLmlycV9oYW5kbGVyID0g aXB2cl9pcnFfaGFuZGxlciwKKwkuc2V0X2J1c2lkID0gZHJtX3BsYXRmb3JtX3NldF9idXNpZCwK KwkuZ2VtX2ZyZWVfb2JqZWN0ID0gaXB2cl9nZW1fZnJlZV9vYmplY3QsCisjaWZkZWYgQ09ORklH X0RFQlVHX0ZTCisJLmRlYnVnZnNfaW5pdCA9IGlwdnJfZGVidWdmc19pbml0LAorCS5kZWJ1Z2Zz X2NsZWFudXAgPSBpcHZyX2RlYnVnZnNfY2xlYW51cCwKKyNlbmRpZgorCS5pb2N0bHMgPSBpcHZy X2dlbV9pb2N0bHMsCisJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKGlwdnJfZ2VtX2lvY3Rscyks CisJLmZvcHMgPSAmaXB2cl9mb3BzLAorCS5uYW1lID0gSVBWUl9EUklWRVJfTkFNRSwKKwkuZGVz YyA9IElQVlJfRFJJVkVSX0RFU0MsCisJLmRhdGUgPSBJUFZSX0RSSVZFUl9EQVRFLAorCS5tYWpv ciA9IElQVlJfRFJJVkVSX01BSk9SLAorCS5taW5vciA9IElQVlJfRFJJVkVSX01JTk9SLAorCS5w YXRjaGxldmVsID0gSVBWUl9EUklWRVJfUEFUQ0hMRVZFTCwKK307CisKK3N0YXRpYyBpbnQzMl90 IGlwdnJfcGxhdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCit7CisJcmV0 dXJuIGRybV9wbGF0Zm9ybV9pbml0KCZpcHZyX2RybV9kcml2ZXIsIGRldmljZSk7Cit9CisKK3N0 YXRpYyBpbnQzMl90IGlwdnJfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2 aWNlKQoreworCWRybV9wdXRfZGV2KHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpOworCXJl dHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgaXB2cl9wbV9vcHMgPSB7CisJ LnN1c3BlbmQgPSBpcHZyX3BtX3N1c3BlbmQsCisJLnJlc3VtZSA9IGlwdnJfcG1fcmVzdW1lLAor CS5mcmVlemUgPSBpcHZyX3BtX3N1c3BlbmQsCisJLnRoYXcgPSBpcHZyX3BtX3Jlc3VtZSwKKwku cG93ZXJvZmYgPSBpcHZyX3BtX3N1c3BlbmQsCisJLnJlc3RvcmUgPSBpcHZyX3BtX3Jlc3VtZSwK KyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCS5ydW50aW1lX3N1c3BlbmQgPSBpcHZyX3BtX3N1 c3BlbmQsCisJLnJ1bnRpbWVfcmVzdW1lID0gaXB2cl9wbV9yZXN1bWUsCisjZW5kaWYKK307CisK K3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlwdnJfcGxhdF9kcml2ZXIgPSB7CisJLmRy aXZlciA9IHsKKwkJLm5hbWUgPSAiaXB2ci12ZWQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwK KyNpZmRlZiBDT05GSUdfUE0KKwkJLnBtID0gJmlwdnJfcG1fb3BzLAorI2VuZGlmCisJfSwKKwku cHJvYmUgPSBpcHZyX3BsYXRfcHJvYmUsCisJLnJlbW92ZSA9IGlwdnJfcGxhdF9yZW1vdmUsCit9 OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGlwdnJfcGxhdF9kcml2ZXIpOworTU9EVUxFX0xJ Q0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMjgwMzA3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pcHZyL2lwdnJfZHJ2LmgKQEAgLTAsMCArMSw0NjQgQEAKKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgor ICogaXB2cl9kcnYuaDogSVBWUiBkcml2ZXIgY29tbW9uIGhlYWRlciBmaWxlCisgKgorICogQ29w eXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAq IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRo ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Us CisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAq IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlh bmdAaW50ZWwuY29tPgorICogICAgWWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoK KyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVBWUl9EUlZfSF8KKyNkZWZpbmUgX0lQ VlJfRFJWX0hfCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImlwdnJfZHJtLmgiCisjaW5j bHVkZSAiaXB2cl9tbXUuaCIKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8 bGludXgvaW8tbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxp bnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1 ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1 ZGUgPGxpbnV4L3BtX3Fvcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgorCisj ZGVmaW5lIElQVlJfRFJJVkVSX0FVVEhPUgkJIkludGVsLCBJbmMuIgorI2RlZmluZSBJUFZSX0RS SVZFUl9OQU1FCQkiaXB2ciIKKyNkZWZpbmUgSVBWUl9EUklWRVJfREVTQwkJIlZ4ZDM5MiBWUDgg ZHJpdmVyIGZvciBCYXl0cmFpbCIKKyNkZWZpbmUgSVBWUl9EUklWRVJfREFURQkJIjIwMTQwNjA5 IgorI2RlZmluZSBJUFZSX0RSSVZFUl9NQUpPUgkJMAorI2RlZmluZSBJUFZSX0RSSVZFUl9NSU5P UgkJMQorI2RlZmluZSBJUFZSX0RSSVZFUl9QQVRDSExFVkVMCTAKKworLyogR2VuZXJhbCBjdXN0 b21pemF0aW9uOgorICovCisKKyNkZWZpbmUgSVBWUl9NTVVfQ0FDSEVEX01FTU9SWQkgIDB4MDAw MQkvKiBCaW5kIHRvIE1NVSBvbmx5ICovCisjZGVmaW5lIElQVlJfTU1VX1JPX01FTU9SWQkgIAkg IDB4MDAwMgkvKiBNTVUgUk8gbWVtb3J5ICovCisjZGVmaW5lIElQVlJfTU1VX1dPX01FTU9SWQkg ICAgICAweDAwMDQJLyogTU1VIFdPIG1lbW9yeSAqLworCisvKgorICpQVEUncyBhbmQgUERFJ3MK KyAqLworCisjZGVmaW5lIElQVlJfUERFX01BU0sJCTB4MDAzRkZGRkYKKyNkZWZpbmUgSVBWUl9Q REVfU0hJRlQJCTIyCisjZGVmaW5lIElQVlJfUFRFX1NISUZUCQkxMgorCisjZGVmaW5lIElQVlJf UFRFX1ZBTElECQkweDAwMDEJLyogUFRFIC8gUERFIHZhbGlkICovCisjZGVmaW5lIElQVlJfUFRF X1dPCQkJMHgwMDAyCS8qIFdyaXRlIG9ubHkgKi8KKyNkZWZpbmUgSVBWUl9QVEVfUk8JCQkweDAw MDQJLyogUmVhZCBvbmx5ICovCisjZGVmaW5lIElQVlJfUFRFX0NBQ0hFRAkJMHgwMDA4CS8qIENQ VSBjYWNoZSBjb2hlcmVudCAqLworCisvKgorICogbGluZWFyIE1NVSBzaXplIGlzIDUxMk0gOiAw IC0gNTEyTQorICogdGlsaW5nIE1NVSBzaXplIGlzIDUxMk0gOiA1MTJNIC0gMTAyNE0KKyAqLwor I2RlZmluZSBJUFZSX01FTV9NTVVfTElORUFSX1NUQVJUCTB4MDAwMDAwMDAKKyNkZWZpbmUgSVBW Ul9NRU1fTU1VX0xJTkVBUl9FTkQJCTB4MjAwMDAwMDAKKyNkZWZpbmUgSVBWUl9NRU1fTU1VX1RJ TElOR19TVEFSVAkweDIwMDAwMDAwCisjZGVmaW5lIElQVlJfTUVNX01NVV9USUxJTkdfRU5ECQkw eDQwMDAwMDAwCisKKyNkZWZpbmUgSVBWUl9HRU1fRE9NQUlOX0NQVQkJMHgwMDAwMDAwMQorI2Rl ZmluZSBJUFZSX0dFTV9ET01BSU5fR1BVCQkweDAwMDAwMDAyCisKKy8qIHZpZGVvIGNvbnRleHQg Ki8KKyNkZWZpbmUgVkFfUlRfRk9STUFUX1BST1RFQ1RFRAkweDgwMDAwMDAwCisKKyNkZWZpbmUg SVBWUl9DT05URVhUX0lOVkFMSURfSUQgMAorI2RlZmluZSBJUFZSX01JTl9DT05URVhUX0lEIDEK KyNkZWZpbmUgSVBWUl9NQVhfQ09OVEVYVF9JRCAweGZmCisKKy8qIHZpZGVvIGVycm9yIHN0YXR1 cyByZXBvcnQgKi8KKyNkZWZpbmUgTUFYX1NMSUNFU19QRVJfUElDVFVSRSA3MgorI2RlZmluZSBN QVhfREVDT0RFX0JVRkZFUlMgKDI0KQorI2RlZmluZSBWRURfTUFYX0VDX0lOU1RBTkNFICg0KQor CisvKgorICpEZWJ1ZyBwcmludCBiaXRzIHNldHRpbmcKKyAqLworI2RlZmluZSBJUFZSX0RfR0VO RVJBTAkoMSA8PCAwKQorI2RlZmluZSBJUFZSX0RfSU5JVAkoMSA8PCAxKQorI2RlZmluZSBJUFZS X0RfSVJRCSgxIDw8IDIpCisjZGVmaW5lIElQVlJfRF9FTlRSWQkoMSA8PCAzKQorI2RlZmluZSBJ UFZSX0RfUE0JKDEgPDwgNCkKKyNkZWZpbmUgSVBWUl9EX1JFRwkoMSA8PCA1KQorI2RlZmluZSBJ UFZSX0RfVkVECSgxIDw8IDYpCisjZGVmaW5lIElQVlJfRF9XQVJOCSgxIDw8IDcpCisKKyNkZWZp bmUgSVBWUl9ERUJVR19HRU5FUkFMKF9mbXQsIF9hcmcuLi4pIFwKKwlJUFZSX0RFQlVHKElQVlJf RF9HRU5FUkFMLCBfZm10LCAjI19hcmcpCisjZGVmaW5lIElQVlJfREVCVUdfSU5JVChfZm10LCBf YXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfSU5JVCwgX2ZtdCwgIyNfYXJnKQorI2RlZmlu ZSBJUFZSX0RFQlVHX0lSUShfZm10LCBfYXJnLi4uKSBcCisJSVBWUl9ERUJVRyhJUFZSX0RfSVJR LCBfZm10LCAjI19hcmcpCisjZGVmaW5lIElQVlJfREVCVUdfRU5UUlkoX2ZtdCwgX2FyZy4uLikg XAorCUlQVlJfREVCVUcoSVBWUl9EX0VOVFJZLCBfZm10LCAjI19hcmcpCisjZGVmaW5lIElQVlJf REVCVUdfUE0oX2ZtdCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUcoSVBWUl9EX1BNLCBfZm10LCAj I19hcmcpCisjZGVmaW5lIElQVlJfREVCVUdfUkVHKF9mbXQsIF9hcmcuLi4pIFwKKwlJUFZSX0RF QlVHKElQVlJfRF9SRUcsIF9mbXQsICMjX2FyZykKKyNkZWZpbmUgSVBWUl9ERUJVR19WRUQoX2Zt dCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUcoSVBWUl9EX1ZFRCwgX2ZtdCwgIyNfYXJnKQorI2Rl ZmluZSBJUFZSX0RFQlVHX1dBUk4oX2ZtdCwgX2FyZy4uLikgXAorCUlQVlJfREVCVUcoSVBWUl9E X1dBUk4sIF9mbXQsICMjX2FyZykKKworI2RlZmluZSBJUFZSX0RFQlVHKF9mbGFnLCBfZm10LCBf YXJnLi4uKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAodW5saWtlbHkoKF9mbGFnKSAmIGRy bV9pcHZyX2RlYnVnKSkJCVwKKwkJCXByaW50ayhLRVJOX0lORk8JCQkJXAorCQkJICAgICAgICJb aXB2cjoweCUwMng6JXNdICIgX2ZtdCAsIF9mbGFnLAlcCisJCQkgICAgICAgX19mdW5jX18gLCAj I19hcmcpOwkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIElQVlJfRVJST1IoX2ZtdCwgX2Fy Zy4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCQlwcmludGsoS0VSTl9FUlIJCQkJCVwKKwkJ CSAgICAgICAiW2lwdnI6RVJST1I6JXNdICIgX2ZtdCAsCQlcCisJCQkgICAgICAgX19mdW5jX18g LCAjI19hcmcpOwkJCVwKKwl9IHdoaWxlICgwKQorCisvKgorICogc2V0IGNwdV9yZWxheCA9IDEg aW4gc3lzZnMgdG8gdXNlIGNwdV9yZWxheCBpbnN0ZWFkIG9mIHVkZWxheSBieXN5IGxvb3AKKyAq IHNldCB1ZGVsYXlfZGl2aWRlciB0byByZWR1Y2UgdGhlIHVkZWxheSB2YWx1ZXMsZS5nLj0gMTAs IHJlZHVjZSAxMCB0aW1lcworICovCisjZGVmaW5lIElQVlJfVURFTEFZKHVzZWMpCQkJCQlcCitk byB7CQkJCQkJCQlcCisJaWYgKGRybV9pcHZyX2NwdXJlbGF4ID09IDApCQkJCVwKKwkJRFJNX1VE RUxBWSh1c2VjIC8gZHJtX2lwdnJfdWRlbGF5ZGl2aWRlcik7CVwKKwllbHNlCQkJCQkJCVwKKwkJ Y3B1X3JlbGF4KCk7CQkJCQlcCit9IHdoaWxlICgwKQorCit0eXBlZGVmIHN0cnVjdCBpcHZyX3Zh bGlkYXRlX2J1ZmZlciBpcHZyX3ZhbGlkYXRlX2J1ZmZlcl90OworCit1aW50MzJfdCBSRUdJU1RF Ul9SRUFEKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHJlZyk7CisjZGVmaW5lIFJF R19SRUFEKHJlZykJICAgICAgIFJFR0lTVEVSX1JFQUQoZGV2LCAocmVnKSkKKworI2RlZmluZSB0 b19pcHZyX2JvKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCwg YmFzZSkKKworZXh0ZXJuIGludCBkcm1faXB2cl9kZWJ1ZzsKK2V4dGVybiBpbnQgZHJtX2lwdnJf dWRlbGF5ZGl2aWRlcjsKK2V4dGVybiBpbnQgZHJtX2lwdnJfY3B1cmVsYXg7CisvKioKKyAqc3Ry dWN0IGlwdnJfdmFsaWRhdGVfY29udGV4dAorICoKKyAqQGJ1ZmZlcnM6CSBhcnJheSBvZiBwcmUt YWxsb2NhdGVkIHZhbGlkYXRlIGJ1ZmZlcnMuCisgKkB1c2VkX2J1ZmZlcnM6IG51bWJlciBvZiBi dWZmZXJzIGluIEBidWZmZXJzIGFycmF5IGN1cnJlbnRseSBpbiB1c2UuCisgKkB2YWxpZGF0ZV9i dWZmZXI6IGJ1ZmZlcnMgdmFsaWRhdGVkIGZyb20gdXNlci1zcGFjZS4KKyAqQGtlcm5fdmFsaWRh dGVfYnVmZmVycyA6IGJ1ZmZlcnMgdmFsaWRhdGVkIGZyb20ga2VybmVsLXNwYWNlLgorICpAZmVu Y2VfZmxhZ3MgOiBGZW5jZSBmbGFncyB0byBiZSB1c2VkIGZvciBmZW5jZSBjcmVhdGlvbi4KKyAq CisgKlRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZHVyaW5nIGV4ZWNidWYgdmFsaWRhdGlvbi4KKyAq Lworc3RydWN0IGlwdnJfdmFsaWRhdGVfY29udGV4dCB7CisJaXB2cl92YWxpZGF0ZV9idWZmZXJf dCAqYnVmZmVyczsKKwl1aW50MzJfdCB1c2VkX2J1ZmZlcnM7CisJc3RydWN0IGxpc3RfaGVhZCB2 YWxpZGF0ZV9saXN0OworfTsKKworc3RydWN0IGlwdnJfbW11X2RyaXZlcjsKK3N0cnVjdCBpcHZy X21tdV9wZDsKKworLyoKKyAqIG1heSBiZSBub3QgbmVlZGVkLCBCT3MgYXJlIGFsd2F5cyBib3Vu ZCBpbnRvIG1tdSwKKyAqIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGJvdW5kX2xpc3QgYW5kIHVu Ym91bmRfbGlzdAorICovCitzdHJ1Y3QgaXB2cl9nZW1fbW0geworCS8qKiBMaXN0IG9mIGFsbCBv YmplY3RzIGluIG1tdSBzcGFjZS4gVXNlZCB0byByZXN0b3JlIG1tdQorCSAqIG1hcHBpbmdzIG9u IHJlc3VtZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgYm91bmRfbGlzdDsKKwkvKioKKwkgKiBMaXN0 IG9mIG9iamVjdHMgd2hpY2ggYXJlIG5vdCBib3VuZCB0byB0aGUgbW11ICh0aHVzCisJICogYXJl IGlkbGUgYW5kIG5vdCB1c2VkIGJ5IHRoZSBHUFUpIGJ1dCBzdGlsbCBoYXZlCisJICogKHByZXN1 bWFibHkgdW5jYWNoZWQpIHBhZ2VzIHN0aWxsIGF0dGFjaGVkLgorCSAqLworCXN0cnVjdCBsaXN0 X2hlYWQgdW5ib3VuZF9saXN0OworCisJLyoqCisJICogQXJlIHdlIGluIGEgbm9uLWludGVycnVw dGlibGUgc2VjdGlvbiBvZiBjb2RlIGxpa2UKKwkgKiBtb2Rlc2V0dGluZz8KKwkgKi8KKwlib29s IGludGVycnVwdGlibGU7CisKKwkvKiBhY2NvdW50aW5nLCB1c2VmdWwgZm9yIHVzZXJsYW5kIGRl YnVnZ2luZyAqLworCXNwaW5sb2NrX3Qgb2JqZWN0X3N0YXRfbG9jazsKKwlzaXplX3Qgb2JqZWN0 X21lbW9yeTsKKwl1aW50MzJfdCBvYmplY3RfY291bnQ7Cit9OworCitzdHJ1Y3QgaXB2cl9hZGRy ZXNzX3NwYWNlIHsKKwlzdHJ1Y3QgZHJtX21tIGxpbmVhcl9tbTsKKwlzdHJ1Y3QgZHJtX21tIHRp bGluZ19tbTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OworCXVuc2lnbmVkIGxvbmcgbGluZWFy X3N0YXJ0OworCXNpemVfdCBsaW5lYXJfdG90YWw7CisJdW5zaWduZWQgbG9uZyB0aWxpbmdfc3Rh cnQ7CisJc2l6ZV90IHRpbGluZ190b3RhbDsKKworCS8qIG5lZWQgaXQgZHVyaW5nIGNsZWFyX3Jh bmdlICovCisJc3RydWN0IHsKKwkJZG1hX2FkZHJfdCBhZGRyOworCQlzdHJ1Y3QgcGFnZSAqcGFn ZTsKKwl9IHNjcmF0Y2g7CisKKwkvKioKKwkgKiBMaXN0IG9mIG9iamVjdHMgY3VycmVudGx5IGlu dm9sdmVkIGluIHJlbmRlcmluZy4KKwkgKgorCSAqIEluY2x1ZGVzIGJ1ZmZlcnMgaGF2aW5nIHRo ZSBjb250ZW50cyBvZiB0aGVpciBHUFUgY2FjaGVzCisJICogZmx1c2hlZCwgbm90IG5lY2Vzc2Fy aWx5IHByaW1pdGl2ZXMuICBsYXN0X3JlbmRlcmluZ19zZXFubworCSAqIHJlcHJlc2VudHMgd2hl biB0aGUgcmVuZGVyaW5nIGludm9sdmVkIHdpbGwgYmUgY29tcGxldGVkLgorCSAqCisJICogQSBy ZWZlcmVuY2UgaXMgaGVsZCBvbiB0aGUgYnVmZmVyIHdoaWxlIG9uIHRoaXMgbGlzdC4KKwkgKi8K KwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9saXN0OworCisJLyoqCisJICogTFJVIGxpc3Qgb2Yg b2JqZWN0cyB3aGljaCBhcmUgbm90IGluIHRoZSByaW5nYnVmZmVyIGFuZAorCSAqIGFyZSByZWFk eSB0byB1bmJpbmQsIGJ1dCBhcmUgc3RpbGwgaW4gdGhlIEdUVC4KKwkgKgorCSAqIGxhc3RfcmVu ZGVyaW5nX3NlcW5vIGlzIDAgd2hpbGUgYW4gb2JqZWN0IGlzIGluIHRoaXMgbGlzdC4KKwkgKgor CSAqIEEgcmVmZXJlbmNlIGlzIG5vdCBoZWxkIG9uIHRoZSBidWZmZXIgd2hpbGUgb24gdGhpcyBs aXN0LAorCSAqIGFzIG1lcmVseSBiZWluZyBHVFQtYm91bmQgc2hvdWxkbid0IHByZXZlbnQgaXRz IGJlaW5nCisJICogZnJlZWQsIGFuZCB3ZSdsbCBwdWxsIGl0IG9mZiB0aGUgbGlzdCBpbiB0aGUg ZnJlZSBwYXRoLgorCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgaW5hY3RpdmVfbGlzdDsKKworCS8q IHRvZG86IGl0IHNob3VsZCBiZSBuZWVkZWQgdG8gYXZvaWQgc2VjdXJpdHkgcHJvYmxlbSwKKwkg KiB3aGVuIGRlc3Ryb3kgYm8sIG5lZWQgc2V0IHNjcmF0Y2ggcGFnZSB0aGUgYm8gbW11IGVudHJ5 CisJICovCisJdm9pZCAoKmNsZWFyX3JhbmdlKShzdHJ1Y3QgaXB2cl9hZGRyZXNzX3NwYWNlICp2 bSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgZmlyc3RfZW50cnksCisJCQkgICAgdW5zaWduZWQgaW50 IG51bV9lbnRyaWVzKTsKKwkvKiB0b2RvOiBkaXJlY3RseSBjYWxsIG1tdSBmdW5jdGlvbiwgdGhl IGZ1bmMgcHRyIGlzIG5vdCBuZWVkZWQgKi8KKwl2b2lkICgqaW5zZXJ0X2VudHJpZXMpKHN0cnVj dCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZtLAorCQkJICAgICAgIHN0cnVjdCBzZ190YWJsZSAqc3Qs CisJCQkgICAgICAgdW5zaWduZWQgaW50IGZpcnN0X2VudHJ5LAorCQkJICAgICAgIGludCBjYWNo ZV9sZXZlbCk7CisJdm9pZCAoKmNsZWFudXApKHN0cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZt KTsKK307CisKK3N0cnVjdCBpcHZyX2ZlbmNlX2RyaXZlciB7CisJdWludDE2X3QJc3luY19zZXE7 CisJYXRvbWljX3QJc2lnbmFsZWRfc2VxOworCXVuc2lnbmVkIGxvbmcJbGFzdF9hY3Rpdml0eTsK Kwlib29sCQlpbml0aWFsaXplZDsKKwlzcGlubG9ja190CWZlbmNlX2xvY2s7Cit9OworCitzdHJ1 Y3QgaXB2cl9jb250ZXh0IHsKKwkvKiB1c2VkIHRvIGxpbmsgaW50byBpcHZyX2N0eF9saXN0ICov CisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOworCXVpbnQzMl90IGN0eF9pZDsKKwkvKiB1c2VkIHRv IGRvdWJsZSBjaGVjayBjdHggd2hlbiBmaW5kIHdpdGggaWRyLCBtYXkgYmUgcmVtb3ZlZCAqLwor CXN0cnVjdCBkcm1faXB2cl9maWxlX3ByaXZhdGUgKmlwdnJfZnByaXY7IC8qIERSTSBkZXZpY2Ug ZmlsZSBwb2ludGVyICovCisJdWludDMyX3QgY3R4X3R5cGU7IC8qIHByb2ZpbGUgPDwgOCB8IGVu dHJ5cG9pbnQgKi8KKworCXVpbnQxNl90IGN1cl9zZXE7CisKKwkvKiBmb3IgSU1HIERESywgb25s eSB1c2UgdGlsaW5nIGZvciAyayBhbmQgNGsgYnVmZmVyIHN0cmlkZSAqLworCS8qCisJICogZm9s bG93aW5nIHRpbGluZyBzdHJpZGVzIGZvciBWRUQgYXJlIHN1cHBvcnRlZDoKKwkgKiBzdHJpZGUg MDogNTEyIGZvciBzY2hlbWUgMCwgMTAyNCBmb3Igc2NoZW1lIDEKKwkgKiBzdHJpZGUgMTogMTAy NCBmb3Igc2NoZW1lIDAsIDIwNDggZm9yIHNjaGVtZSAxCisJICogc3RyaWRlIDI6IDIwNDggZm9y IHNjaGVtZSAwLCA0MDk2IGZvciBzY2hlbWUgMQorCSAqIHN0cmlkZSAzOiA0MDk2IGZvciBzY2hl bWUgMAorCSAqLworCXVpbnQ4X3QgdGlsaW5nX3N0cmlkZTsKKwkvKgorCSAqIHNjaGVtZSAwOiB0 aWxlIGlzIDI1NngxNiwgd2hpbGUgbWluaW1hbCB0aWxlIHN0cmlkZSBpcyA1MTIKKwkgKiBzY2hl bWUgMTogdGlsZSBpcyA1MTJ4OCwgd2hpbGUgbWluaW1hbCB0aWxlIHN0cmlkZSBpcyAxMDI0CisJ ICovCisJdWludDhfdCB0aWxpbmdfc2NoZW1lOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2lw dnJfcHJpdmF0ZSB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGNpX2RldiAq cGNpX3Jvb3Q7CisJLyogcGNpIHJldmlzaW9uIGlkIGZvciBCMDpEMjpGMCAqLworCXVpbnQ4X3Qg cGxhdGZvcm1fcmV2X2lkOworCisJdWludDMyX3QgZGV2aWNlX2lkOworCisJLyogSU1HIHZpZGVv IGNvbnRleHQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGlwdnJfY3R4X2xpc3Q7CisJc3BpbmxvY2tf dCBpcHZyX2N0eF9sb2NrOworCXN0cnVjdCBpZHIgaXB2cl9jdHhfaWRyOworCXN0cnVjdCBpcHZy X2NvbnRleHQgZGVmYXVsdF9jdHg7CisKKwkvKiBQTSByZWxhdGVkICovCisJc3RydWN0IG11dGV4 IHZlZF9wbV9tdXRleDsKKwlhdG9taWNfdCB2ZWRfcG93ZXJfdXNhZ2U7CisKKwkvKiBleGVjIHJl bGF0ZWQgKi8KKwlzdHJ1Y3QgbXV0ZXggY21kYnVmX211dGV4OworCXN0cnVjdCBpcHZyX3ZhbGlk YXRlX2NvbnRleHQgdmFsaWRhdGVfY3R4OworCisJLyogSU1HIE1NVSBzcGVjaWZpYyAqLworCXN0 cnVjdCBpcHZyX21tdV9kcml2ZXIgKm1tdTsKKwlzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBmX3BkOwor CWF0b21pY190IGlwdnJfbW11X2ludmFsZGM7CisKKwkvKiBHRU0gbW0gcmVsYXRlZCAqLworCXN0 cnVjdCBpcHZyX2dlbV9tbSBpcHZyX21tOworCXN0cnVjdCBrbWVtX2NhY2hlICppcHZyX2JvX3Ns YWI7CisJc3RydWN0IGlwdnJfYWRkcmVzc19zcGFjZSBhZGRyX3NwYWNlOworCisJLyogZmVuY2Ug cmVsYXRlZCAqLworCXVpbnQzMl90IGxhc3Rfc2VxOworCXdhaXRfcXVldWVfaGVhZF90IGZlbmNl X3F1ZXVlOworCXN0cnVjdCBpcHZyX2ZlbmNlX2RyaXZlciBmZW5jZV9kcnY7CisKKwkvKgorCSAq IFZFRCBzcGVjaWZpYworCSAqLworCXVpbnQ4X3QgX19pb21lbSogdmVkX3JlZ19iYXNlOworCXVu c2lnbmVkIGxvbmcgdmVkX3JlZ19vZmZzZXQ7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJp dmF0ZTsKK31kcm1faXB2cl9wcml2YXRlX3Q7CisKK3N0cnVjdCB2ZWRfbWJfcmVnaW9uIHsKKwl1 aW50MzJfdCBzdGFydDsKKwl1aW50MzJfdCBlbmQ7Cit9OworCitzdHJ1Y3QgdmVkX2RlY29kZV9z dGF0dXMgeworCXVpbnQzMl90IG51bV9yZWdpb247CisJc3RydWN0IHZlZF9tYl9yZWdpb24gbWJf cmVnaW9uc1tNQVhfU0xJQ0VTX1BFUl9QSUNUVVJFXTsKK307CisKK3N0cnVjdCB2ZWRfZnJhbWVf aW5mbyB7CisJdWludDMyX3QgaGFuZGxlOworCXVpbnQzMl90IHN1cmZhY2VfaWQ7CisJdWludDE2 X3QgZmVuY2U7CisJdWludDMyX3QgYnVmZmVyX3N0cmlkZTsKKwl1aW50MzJfdCBidWZmZXJfc2l6 ZTsKKwl1aW50MzJfdCBwaWN0dXJlX3dpZHRoX21iOworCXVpbnQzMl90IGZ3X3N0YXR1czsKKwl1 aW50MzJfdCBzaXplX21iOworCXN0cnVjdCB2ZWRfZGVjb2RlX3N0YXR1cyBkZWNvZGVfc3RhdHVz OworfTsKKworc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3Q7CisKKy8qIFZFRCBwcml2YXRlIHN0 cnVjdHVyZSAqLworc3RydWN0IHZlZF9wcml2YXRlIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 OworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdjsKKworCS8qIHVzZWQgdG8gcmVj b3JkIHNlcSBnb3QgZnJvbSBpcnEgZnctdG8taG9zdCBtc2cgKi8KKwl1aW50MTZfdCB2ZWRfY3Vy X3NlcTsKKworCS8qCisJICogVkVEIFJlbmRlYyBNZW1vcnkKKwkgKi8KKwlzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqY2NiMDsKKwl1aW50MzJfdCBiYXNlX2FkZHIwOworCXN0cnVjdCBkcm1f aXB2cl9nZW1fb2JqZWN0ICpjY2IxOworCXVpbnQzMl90IGJhc2VfYWRkcjE7CisJYm9vbCByZW5k ZWNfaW5pdGlhbGl6ZWQ7CisKKwkvKiBWRUQgZmlybXdhcmUgcmVsYXRlZCAqLworCXN0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICAqZndfYm87CisJdWludDMyX3QgZndfb2Zmc2V0OworCXVpbnQz Ml90IG10eF9tZW1fc2l6ZTsKKwlib29sIGZ3X2xvYWRlZF90b19ibzsKKwlib29sIHZlZF9md19s b2FkZWQ7CisJdm9pZCAqdmVkX2Z3X3B0cjsKKwlpbnQgdmVkX2Z3X3NpemU7CisJdWludDMyX3Qg ZndfYjBfdXBsb2FkZWQ7CisJLyoKKwkqIHRoZXJlIGFyZSB0d28gd2F5cyB0byBsb2FkIGZ3Ogor CSogMSwgbG9hZCBmdyBkaXJlY3RseSBieSBrZXJuZWwgZHJpdmVyLCBieXQgdXNlIHRoaXMgd2F5 CisJKiAyLCBsb2FkIGJ5IHB1bml0LCB3aGljaCBoYXMgc2VjdXJpdHkgYmVuZWZpdHMKKwkqLwor CWJvb2wgZndfbG9hZGVkX2J5X3B1bml0OworCisJLyoKKwkgKiB2ZWQgY29tbWFuZCBxdWV1ZQor CSAqLworCXNwaW5sb2NrX3QgdmVkX2xvY2s7CisJc3RydWN0IG11dGV4IHZlZF9tdXRleDsKKwlz dHJ1Y3QgbGlzdF9oZWFkIHZlZF9xdWV1ZTsKKwkvKiBidXN5IG1lYW5zIGNtZCBzdWJtaXR0ZWQg dG8gZncsIHdoaWxlIGlycSBoYXNuJ3QgYmVlbiByZWNlaWV2ZWQgKi8KKwlib29sIHZlZF9idXN5 OworCS8qIFZFRCBzdGF0dXMgcmVhZCBmcm9tIHJlZ2lzdGVyIDB4MjBEMCAqLworCXVpbnQzMl90 IHZlZF9od19idXN5OworCisJdWludDMyX3QgdmVkX2Rhc2hfYWNjZXNzX2N0cmw7CisJdWludDMy X3QgZGVjb2RpbmdfZXJyOworCisJc3RydWN0IHZlZF9mcmFtZV9pbmZvIGZyYW1lX2luZm9bTUFY X0RFQ09ERV9CVUZGRVJTXTsKKwlzdHJ1Y3QgdmVkX2RlY29kZV9zdGF0dXMgZGVjb2RlX3N0YXR1 czsKKwl1aW50MzJfdCBob3N0X2JlX29wcF9lbmFibGVkOworCisJLyogZXJyb3IgY29uY2VhbG1l bnQgcmVsYXRlZCAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBlY193b3JrOworCXN0cnVjdCBkcm1f ZmlsZSAqdGZpbGU7IC8qIHByb3RlY3RlZCBieSBjbWRidWZfbXV0ZXggKi8KKwlzdHJ1Y3QgdmVk X2VjX2NvbnRleHQgKnZlZF9lY19jdHhbVkVEX01BWF9FQ19JTlNUQU5DRV07CisJc3RydWN0IHZl ZF9lY19jb250ZXh0ICpjdXJfbXN2ZHhfZWNfY3R4OworCXVpbnQzMl90IGRlYmxvY2tfY21kX29m ZnNldDsKKwlpbnQgbnVtX2NtZDsKKwl1aW50MzJfdCB2ZWNfZWNfbWVtX2RhdGFbNV07CisJdWlu dDMyX3QgdmVjX2VjX21lbV9zYXZlZDsKKworCS8qIHBtIHJlbGF0ZWQgKi8KKwlpbnQgdmVkX25l ZWRzX3Jlc2V0OworCXVuc2lnbmVkIGludCB2ZWRfcG1zdGF0ZTsKKwlzdHJ1Y3Qga2VybmZzX25v ZGUgKnN5c2ZzX3Btc3RhdGU7CisJdWludDMyX3QgcG1fZ2F0aW5nX2NvdW50OworCS8qIHBtIHN1 c3BlbmQgd3EsIHVzZSB3cSBmb3IgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAqLworCXN0cnVjdCBk ZWxheWVkX3dvcmsgdmVkX3N1c3BlbmRfd3E7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHZlZF9z dXNwZW5kX3RxOworCisJLyogcHJvdGVjdGVkIGJ5IHZlZF9tdXRleCAqLworCS8qIGN1cnJlbnQg dmVkIGRlY29kZSBjb250ZXh0ICovCisJc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHg7CisK KwlzdHJ1Y3QgcGFnZSAqbW11X3JlY292ZXJfcGFnZTsKK307CisKK3N0cnVjdCBkcm1faXB2cl9m aWxlX3ByaXZhdGUgeworCXVpbnQzMl90IGN0eF9pZDsKK307CisKKy8qIHB1YmxpYyBpcHZyIGdl bSBmdW5jdGlvbnMgZm9yIGJvL3BhZ2Ugb3BlcmF0aW9uICovCit2b2lkIGlwdnJfZ2VtX29iamVj dF9waW5fcGFnZXMoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaik7Cit2b2lkIGlwdnJf Z2VtX29iamVjdF91bnBpbl9wYWdlcyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKTsK K3ZvaWQgKmlwdnJfZ2VtX29iamVjdF9hbGxvYyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK3Zv aWQgaXB2cl9nZW1fb2JqZWN0X2ZyZWUoc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaik7 CitpbnQzMl90IGlwdnJfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9pcHZyX2dlbV9v YmplY3QgKm9iaik7CitpbnQzMl90IGlwdnJfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRy bV9pcHZyX2dlbV9vYmplY3QgKm9iaik7CisKK2ludDMyX3QgaXB2cl9zeW5jX2NwdV9ncmFiKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9i aik7CitpbnQzMl90IGlwdnJfc3luY19jcHVfcmVsZWFzZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopOworCisvKiBQUklNRSBjYWxs YmFja3MgKi8KK3N0cnVjdCBzZ190YWJsZSAqaXB2cl9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3ZvaWQgKmlwdnJfZ2VtX3ByaW1lX3ZtYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpcHZyX2dlbV9wcmltZV92dW5tYXAoc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHZvaWQgKnZhZGRyKTsKK3N0cnVjdCBkcm1fZ2VtX29i amVjdCAqaXB2cl9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCXNpemVfdCBzaXplLCBzdHJ1Y3Qgc2dfdGFibGUgKnNnKTsKK2ludCBpcHZyX2dlbV9w cmltZV9waW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9pZCBpcHZyX2dlbV9wcmlt ZV91bnBpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9leGVjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2 ci9pcHZyX2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjlkNjM4 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9leGVjLmMKQEAg LTAsMCArMSw1MzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9leGVjLmM6IElQVlIg Y29tbWFuZCBidWZmZXIgZXhlY3V0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVs IENvcnBvcmF0aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQu CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1 Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJ VEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJh bmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisg KiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICogICAg WWFvIENoZW5nIDx5YW8uY2hlbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KworI2luY2x1ZGUgImlwdnJfZXhlYy5oIgorI2luY2x1ZGUgImlwdnJfZ2VtLmgiCisjaW5jbHVk ZSAiaXB2cl9tbXUuaCIKKyNpbmNsdWRlICJpcHZyX2J1ZmZlci5oIgorI2luY2x1ZGUgImlwdnJf ZmVuY2UuaCIKKyNpbmNsdWRlICJpcHZyX3RyYWNlLmgiCisjaW5jbHVkZSAidmVkX2Z3LmgiCisj aW5jbHVkZSAidmVkX21zZy5oIgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRf ZWMuaCIKKyNpbmNsdWRlICJ2ZWRfaW5pdC5oIgorI2luY2x1ZGUgInZlZF9wbS5oIgorI2luY2x1 ZGUgInZlZF9jbWQuaCIKKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKK3N0YXRpYyBpbmxpbmUg Ym9vbCBpcHZyX2JvX2lzX3Jlc2VydmVkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmop Cit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZvYmotPnJlc2VydmVkKTsKK30KKworc3RhdGljIGlu dDMyX3QKK2lwdnJfYm9fd2FpdF91bnJlc2VydmVkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0 ICpvYmosIGJvb2wgaW50ZXJydXB0aWJsZSkKK3sKKwlpZiAoaW50ZXJydXB0aWJsZSkgeworCQly ZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG9iai0+ZXZlbnRfcXVldWUsCisJCQkJCSAg ICAgICAhaXB2cl9ib19pc19yZXNlcnZlZChvYmopKTsKKwl9IGVsc2UgeworCQl3YWl0X2V2ZW50 KG9iai0+ZXZlbnRfcXVldWUsICFpcHZyX2JvX2lzX3Jlc2VydmVkKG9iaikpOworCQlyZXR1cm4g MDsKKwl9Cit9CisKKy8qKgorICogaXB2cl9ib19yZXNlcnZlIC0gcmVzZXJ2ZSB0aGUgZ2l2ZW4g Ym8KKyAqCisgKiBAb2JqOiAgICAgVGhlIGJ1ZmZlciBvYmplY3QgdG8gcmVzZXJ2ZS4KKyAqIEBp bnRlcnJ1cHRpYmxlOiAgICAgd2hldGhlciB0aGUgd2FpdGluZyBpcyBpbnRlcnJ1cHRpYmxlIG9y IG5vdC4KKyAqIEBub193YWl0OiAgICBmbGFnIHRvIGluZGljYXRlIHJldHVybmluZyBpbW1lZGlh dGVseQorICoKKyAqIFJldHVybnM6CisgKiAtRUJVU1k6IGlmIGJvIGlzIGJ1c3kgYW5kIEBub193 YWl0IGlzIHRydWUuCisgKiAtRVJFU1RBUlRTWVMgaWYgd2FpdGluZyB3YXMgaW50ZXJydXB0ZWQg YnkgYSBzaWduYWwuCisgKiAwIGlmIHJlc2VydmluZyBzdWNjZWVkZWQuCisgKi8KK2ludDMyX3Qg aXB2cl9ib19yZXNlcnZlKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmosCisJCQlib29s IGludGVycnVwdGlibGUsIGJvb2wgbm9fd2FpdCkKK3sKKwlpbnQzMl90IHJldDsKKworCXdoaWxl ICh1bmxpa2VseShhdG9taWNfeGNoZygmb2JqLT5yZXNlcnZlZCwgMSkgIT0gMCkpIHsKKwkJaWYg KG5vX3dhaXQpCisJCQlyZXR1cm4gLUVCVVNZOworCQlJUFZSX0RFQlVHX0dFTkVSQUwoIndhaXQg Ym8gdW5yZXNlcnZlZCwgYWRkIHRvIHdhaXQgcXVldWUuXG4iKTsKKwkJcmV0ID0gaXB2cl9ib193 YWl0X3VucmVzZXJ2ZWQob2JqLCBpbnRlcnJ1cHRpYmxlKTsKKwkJaWYgKHVubGlrZWx5KHJldCkp CisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlwdnJfYm9f dW5yZXNlcnZlIC0gdW5yZXNlcnZlIHRoZSBnaXZlbiBibworICoKKyAqIEBvYmo6ICAgICBUaGUg YnVmZmVyIG9iamVjdCB0byByZXNlcnZlLgorICoKKyAqIE5vIHJldHVybiB2YWx1ZS4KKyAqLwor dm9pZCBpcHZyX2JvX3VucmVzZXJ2ZShzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQor eworCWF0b21pY19zZXQoJm9iai0+cmVzZXJ2ZWQsIDApOworCXdha2VfdXBfYWxsKCZvYmotPmV2 ZW50X3F1ZXVlKTsKK30KKworc3RhdGljIHZvaWQgaXB2cl9iYWNrb2ZmX3Jlc2VydmF0aW9uKHN0 cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVmZmVyICpl bnRyeTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKKwkJc3Ry dWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iaiA9IGVudHJ5LT5pcHZyX2dlbV9ibzsKKwkJaWYg KCFhdG9taWNfcmVhZCgmb2JqLT5yZXNlcnZlZCkpCisJCQljb250aW51ZTsKKwkJYXRvbWljX3Nl dCgmb2JqLT5yZXNlcnZlZCwgMCk7CisJCXdha2VfdXBfYWxsKCZvYmotPmV2ZW50X3F1ZXVlKTsK Kwl9Cit9CisKKy8qCisgKiBpcHZyX3Jlc2VydmVfYnVmZmVycyAtIFJlc2VydmUgYnVmZmVycyBm b3IgdmFsaWRhdGlvbi4KKyAqCisgKiBAbGlzdDogICAgIHBvaW50cyB0byBhIGJvIGxpc3QgdG8g YmUgYmFja29mZmVkCisgKgorICogSWYgYSBidWZmZXIgaW4gdGhlIGxpc3QgaXMgbWFya2VkIGZv ciBDUFUgYWNjZXNzLCB3ZSBiYWNrIG9mZiBhbmQKKyAqIHdhaXQgZm9yIHRoYXQgYnVmZmVyIHRv IGJlY29tZSBmcmVlIGZvciBHUFUgYWNjZXNzLgorICoKKyAqIElmIGEgYnVmZmVyIGlzIHJlc2Vy dmVkIGZvciBhbm90aGVyIHZhbGlkYXRpb24sIHRoZSB2YWxpZGF0b3Igd2l0aAorICogdGhlIGhp Z2hlc3QgdmFsaWRhdGlvbiBzZXF1ZW5jZSBiYWNrcyBvZmYgYW5kIHdhaXRzIGZvciB0aGF0IGJ1 ZmZlcgorICogdG8gYmVjb21lIHVucmVzZXJ2ZWQuIFRoaXMgcHJldmVudHMgZGVhZGxvY2tzIHdo ZW4gdmFsaWRhdGluZyBtdWx0aXBsZQorICogYnVmZmVycyBpbiBkaWZmZXJlbnQgb3JkZXJzLgor ICoKKyAqIFJldHVybnM6CisgKiAtRUJVU1k6IGlmIGJvIGlzIGJ1c3kgYW5kIEBub193YWl0IGlz IHRydWUuCisgKiAtRVJFU1RBUlRTWVMgaWYgd2FpdGluZyB3YXMgaW50ZXJydXB0ZWQgYnkgYSBz aWduYWwuCisgKiAwIGlmIHJlc2VydmluZyBzdWNjZWVkZWQuCisgKi8KK2ludDMyX3QgaXB2cl9y ZXNlcnZlX2J1ZmZlcnMoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgaXB2cl92 YWxpZGF0ZV9idWZmZXIgKmVudHJ5OworCWludDMyX3QgcmV0OworCisJaWYgKGxpc3RfZW1wdHko bGlzdCkpCisJCXJldHVybiAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwg aGVhZCkgeworCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqYm8gPSBlbnRyeS0+aXB2cl9n ZW1fYm87CisKKwkJcmV0ID0gaXB2cl9ib19yZXNlcnZlKGJvLCB0cnVlLCB0cnVlKTsKKwkJc3dp dGNoIChyZXQpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisJCWNhc2UgLUVCVVNZOgorCQkJcmV0 ID0gaXB2cl9ib19yZXNlcnZlKGJvLCB0cnVlLCBmYWxzZSk7CisJCQlpZiAoIXJldCkKKwkJCQli cmVhazsKKwkJCWVsc2UKKwkJCQlnb3RvIGVycjsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXJyOwor CQl9CisKKwkJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZiby0+Y3B1X3dyaXRlcnMpID4gMCkp IHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJcmV0dXJuIDA7 CitlcnI6CisJaXB2cl9iYWNrb2ZmX3Jlc2VydmF0aW9uKGxpc3QpOworCXJldHVybiByZXQ7Cit9 CisKKy8qKgorICogaXB2cl9zZXRfdGlsZSAtIGdsb2JhbCBzZXR0aW5nIG9mIHRpbGluZyBpbmZv CisgKgorICogQGRldjogICAgIHRoZSBpcHZyIGRybSBkZXZpY2UKKyAqIEB0aWxpbmdfc2NoZW1l OiAgICAgc2VlIGlwdnJfZHJtLmggZm9yIGRldGFpbHMKKyAqIEB0aWxpbmdfc3RyaWRlOiAgICAg c2VlIGlwdnJfZHJtLmggZm9yIGRldGFpbHMKKyAqCisgKiB2eGQzOTIgaGFyZHdhcmUgc3VwcG9y dHMgb25seSBvbmUgdGlsZSByZWdpb24gc28gdGhpcyBjb25maWd1cmF0aW9uCisgKiBpcyBnbG9i YWwuCisgKi8KK3ZvaWQgaXB2cl9zZXRfdGlsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQl1 aW50OF90IHRpbGluZ19zY2hlbWUsIHVpbnQ4X3QgdGlsaW5nX3N0cmlkZSkKK3sKKwlzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90 IGNtZDsKKwl1aW50MzJfdCBzdGFydCA9IElQVlJfTUVNX01NVV9USUxJTkdfU1RBUlQ7CisJdWlu dDMyX3QgZW5kID0gSVBWUl9NRU1fTU1VX1RJTElOR19FTkQ7CisKKwkvKiBFbmFibGUgbWVtb3J5 IHRpbGluZyAqLworCWNtZCA9ICgoc3RhcnQgPj4gMjApICsgKCgoZW5kID4+IDIwKSAtIDEpIDw8 IDEyKSArCisJCQkJKCgweDggfCB0aWxpbmdfc3RyaWRlKSA8PCAyNCkpOworCUlQVlJfREVCVUdf R0VORVJBTCgiVkVEOiBNTVUgVGlsaW5nIHJlZ2lzdGVyMCAlMDh4LlxuIiwgY21kKTsKKwlJUFZS X0RFQlVHX0dFTkVSQUwoIlJlZ2lvbiAweCUwOHgtMHglMDh4LlxuIiwgc3RhcnQsIGVuZCk7CisJ VkVEX1JFR19XUklURTMyKGNtZCwgTVNWRFhfTU1VX1RJTEVfQkFTRTBfT0ZGU0VUKTsKKworCS8q IHdlIG5lZWQgc2V0IHRpbGUgZm9ybWF0IGFzIDUxMng4IG9uIEJheXRyYWlsLCB3aGljaCBpcyBz aGNlbWUgMSAqLworCVZFRF9SRUdfV1JJVEUzMih0aWxpbmdfc2NoZW1lIDw8IDMsIE1TVkRYX01N VV9DT05UUk9MMl9PRkZTRVQpOworfQorCisvKioKKyAqIGlwdnJfZmluZF9jdHhfd2l0aF9mZW5j ZSAtIGxvb2t1cCB0aGUgY29udGV4dCB3aXRoIGdpdmVuIGZlbmNlIHNlcW5vCisgKgorICogQGRl dl9wcml2OiAgICAgdGhlIGlwdnIgZHJtIGRldmljZQorICogQGZlbmNlOiAgICAgZmVuY2Ugc2Vx bm8gZ2VuZXJhdGVkIGJ5IHRoZSBjb250ZXh0CisgKgorICogUmV0dXJuczoKKyAqIGNvbnRleHQg cG9pbnRlciBpZiBmb3VuZC4KKyAqIE5VTEwgaWYgbm90IGZvdW5kLgorICovCitzdHJ1Y3QgaXB2 cl9jb250ZXh0KgoraXB2cl9maW5kX2N0eF93aXRoX2ZlbmNlKHN0cnVjdCBkcm1faXB2cl9wcml2 YXRlICpkZXZfcHJpdiwgdWludDE2X3QgZmVuY2UpCit7CisJc3RydWN0IGlwdnJfY29udGV4dCAq cG9zID0gTlVMTCwgKm4gPSBOVUxMOworCisJaWYgKHVubGlrZWx5KGRldl9wcml2ID09IE5VTEwp KSB7CisJCXJldHVybiBOVUxMOworCX0KKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPmlwdnJfY3R4 X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZkZXZfcHJpdi0+aXB2 cl9jdHhfbGlzdCwgaGVhZCkgeworCQlpZiAocG9zLT5jdXJfc2VxID09IGZlbmNlKSB7CisJCQlz cGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfY3R4X2xvY2spOworCQkJcmV0dXJuIHBvczsKKwkJ fQorCX0KKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmlwdnJfY3R4X2xvY2spOworCisJcmV0dXJu IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfdW5yZWZlcmVuY2VfYnVmZmVycyhzdHJ1Y3Qg aXB2cl92YWxpZGF0ZV9jb250ZXh0ICpjb250ZXh0KQoreworCXN0cnVjdCBpcHZyX3ZhbGlkYXRl X2J1ZmZlciAqZW50cnksICpuZXh0OworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7 CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZjb250ZXh0LT52YWxpZGF0ZV9saXN0OworCisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCBsaXN0LCBoZWFkKSB7CisJCW9i aiA9IGVudHJ5LT5pcHZyX2dlbV9ibzsKKwkJbGlzdF9kZWwoJmVudHJ5LT5oZWFkKTsKKwkJZHJt X2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCWNvbnRleHQtPnVzZWRfYnVm ZmVycy0tOworCX0KK30KKworc3RhdGljIGludCBpcHZyX3VwZGF0ZV9idWZmZXJzKHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCQlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9jb250ZXh0ICpj b250ZXh0LAorCQkJCQl1aW50NjRfdCBidWZmZXJfbGlzdCwKKwkJCQkJaW50MzJfdCBjb3VudCkK K3sKKwlzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9idWZmZXIgKmVudHJ5OworCXN0cnVjdCBpcHZyX3Zh bGlkYXRlX2FyZyAqdmFsX2FyZyA9CisJCShzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9hcmcgX191c2Vy ICopKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcl9saXN0OworCisJaWYgKGxpc3RfZW1wdHkoJmNvbnRl eHQtPnZhbGlkYXRlX2xpc3QpKQorCQlyZXR1cm4gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnko ZW50cnksICZjb250ZXh0LT52YWxpZGF0ZV9saXN0LCBoZWFkKSB7CisJCWlmICghdmFsX2FyZykg eworCQkJSVBWUl9ERUJVR19XQVJOKCJ1bmV4cGVjdGVkIGVuZCBvZiB2YWxfYXJnIGxpc3QhISFc biIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHVubGlrZWx5KGNvcHlfdG9fdXNl cih2YWxfYXJnLCAmZW50cnktPnZhbF9yZXEsCisJCQkJCSAgICBzaXplb2YoZW50cnktPnZhbF9y ZXEpKSkpIHsKKwkJCUlQVlJfRVJST1IoImNvcHlfdG9fdXNlciBmYXVsdC5cbiIpOworCQkJcmV0 dXJuIC1FRkFVTFQ7CisJCX0KKwkJdmFsX2FyZyA9IChzdHJ1Y3QgaXB2cl92YWxpZGF0ZV9hcmcg X191c2VyICopCisJCQkJCSh1bnNpZ25lZCBsb25nKWVudHJ5LT52YWxfcmVxLm5leHQ7CisJfQor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlwdnJfcmVmZXJlbmNlX2J1ZmZlcnMoc3RydWN0 IGRybV9maWxlICpmaWxlX3ByaXYsCisJCQkJCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2NvbnRleHQg KmNvbnRleHQsCisJCQkJCXVpbnQ2NF90IGJ1ZmZlcl9saXN0LAorCQkJCQlpbnQzMl90IGNvdW50 KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmaWxlX3ByaXYtPm1pbm9yLT5kZXY7CisJ c3RydWN0IGlwdnJfdmFsaWRhdGVfYXJnICp2YWxfYXJnID0KKwkJKHN0cnVjdCBpcHZyX3ZhbGlk YXRlX2FyZyBfX3VzZXIgKikodW5zaWduZWQgbG9uZykgYnVmZmVyX2xpc3Q7CisJc3RydWN0IGlw dnJfdmFsaWRhdGVfYnVmZmVyICppdGVtOworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpv Ymo7CisJaW50MzJfdCByZXQgPSAwOworCisJd2hpbGUgKGxpa2VseSh2YWxfYXJnICE9IDApICYm IChjb250ZXh0LT51c2VkX2J1ZmZlcnMgPD0gY291bnQpKSB7CisJCWlmICh1bmxpa2VseShjb250 ZXh0LT51c2VkX2J1ZmZlcnMgPj0KKwkJCSAgICAgSVBWUl9OVU1fVkFMSURBVEVfQlVGRkVSUykp IHsKKwkJCUlQVlJfRVJST1IoIlRvbyBtYW55IGJ1ZmZlcnMgIgorCQkJCSAgIm9uIHZhbGlkYXRl IGxpc3QuXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJ aXRlbSA9ICZjb250ZXh0LT5idWZmZXJzW2NvbnRleHQtPnVzZWRfYnVmZmVyc107CisJCWlmICh1 bmxpa2VseShjb3B5X2Zyb21fdXNlcigmaXRlbS0+dmFsX3JlcSwgdmFsX2FyZywKKwkJCQkJICAg IHNpemVvZihpdGVtLT52YWxfcmVxKSkgIT0gMCkpIHsKKwkJCUlQVlJfRVJST1IoImNvcHlfZnJv bV91c2VyIGZhdWx0LlxuIik7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXRfZXJyOwor CQl9CisJCUlOSVRfTElTVF9IRUFEKCZpdGVtLT5oZWFkKTsKKwkJb2JqID0gdG9faXB2cl9ibyhk cm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsCisJCQkJCQlpdGVtLT52YWxfcmVx LmhhbmRsZSkpOworCQlpZiAoJm9iai0+YmFzZSA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PRU5U OworCQkJZ290byBvdXRfZXJyOworCQl9CisJCWl0ZW0tPmlwdnJfZ2VtX2JvID0gb2JqOworCisJ CWxpc3RfYWRkX3RhaWwoJml0ZW0tPmhlYWQsICZjb250ZXh0LT52YWxpZGF0ZV9saXN0KTsKKwkJ Y29udGV4dC0+dXNlZF9idWZmZXJzKys7CisKKwkJdmFsX2FyZyA9IChzdHJ1Y3QgaXB2cl92YWxp ZGF0ZV9hcmcgX191c2VyICopCisJCQkJCSh1bnNpZ25lZCBsb25nKWl0ZW0tPnZhbF9yZXEubmV4 dDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwlpcHZyX3VucmVmZXJlbmNlX2J1ZmZl cnMoY29udGV4dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QgaXB2cl92YWxp ZGF0ZV9idWZmZXJfbGlzdChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJCQkJc3RydWN0 IGlwdnJfdmFsaWRhdGVfY29udGV4dCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaXB2cl92YWxpZGF0 ZV9idWZmZXIgKmVudHJ5OworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmo7CisJc3Ry dWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZjb250ZXh0LT52YWxpZGF0ZV9saXN0OworCWludDMyX3Qg cmV0ID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QsIGhlYWQpIHsKKwkJ b2JqID0gZW50cnktPmlwdnJfZ2VtX2JvOworCQkvKioKKwkJICogbmVlZCB2YWxpZGF0ZSBibyBs b2NhdGUgaW4gdGhlIG1tdSBzcGFjZQorCQkgKiBjaGVjayBpZiBwcmVzdW1lZCBvZmZzZXQgaXMg Y29ycmVjdAorCQkgKiB3aXRoIHZlZF9jaGVja19wcmVzdW1lZCwgaWYgcHJlc3VtZSBpcyBub3Qg Y29ycmVjdCwKKwkJICogY2FsbCBmaXh1cCByZWxvY3Mgd2l0aCB2ZWRfZml4dXBfcmVsb2NzLgor CQkgKiBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBzaHJpbmsvZXZpY3Qs CisJCSAqIHNvIG5lZWRuJ3QgdmFsaWRhdGUgbW11IG9mZnNldC4KKwkJICogbmVlZCBiZSBpbXBs ZW1lbnRlZCBpbiB0aGUgZnV0dXJlIGlmIHNocmluay9ldmljdAorCQkgKiBpcyBzdXBwb3J0ZWQu CisJCSAqLworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXB2cl9nZW1fZG9fZXhl Y2J1ZmZlciAtIGxvb2t1cCB0aGUgY29udGV4dCB3aXRoIGdpdmVuIGZlbmNlIHNlcW5vCisgKgor ICogQGRldjogICAgIHRoZSBpcHZyIGRybSBkZXZpY2UKKyAqIEBmaWxlX3ByaXY6ICAgICAgdGhl IGlwdnIgZHJtIGZpbGUgcG9pbnRlcgorICogQGFyZ3M6ICAgICAgaW5wdXQgYXJndW1lbnQgcGFz c2VkIGZyb20gdXNlcmxhbmQKKyAqIEB2bTogICAgICBpcHZyIGFkZHJlc3Mgc3BhY2UgZm9yIGFs bCB0aGUgYm8gdG8gYmluZCB0bworICoKKyAqIFJldHVybnM6CisgKiAtRU5PRU5UIGlmIGNvbnRl eHQgbm90IGZvdW5kLCBvciBjbWRidWYgYm8gbm90IGZvdW5kCisgKiAtRUlOVkFMIGlmIHJlZmVy ZW5jaW5nIGJ1ZmZlciBmYWlscywgb3IgZXhlY3V0aW5nIGNtZGJ1ZiBmYWlscworICogLUVJTlRS IGlmIGZhaWxzIHRvIGxvY2sgbXV0ZXgKKyAqIC1FQlVTWSBpZiBmYWlscyB0byBnZXQgcG93ZXIg d2VsbCwgb3IgZXhlY3V0aW9uIGZhaWxzCisgKiAtRVJFU1RBUlRTWVMgaWYgcmVzZXJ2YXRpbmcg YnVmZmVyIGZhaWxzCisgKiAtRU5PTUVNIGlmIGV4ZWN1dGlvbiBmYWlscworICogLUVGQVVMVCBp ZiBleGVjdXRpb24gZmFpbHMKKyAqIDAgaWYgc3VjY2Vzc2Z1bAorICovCitzdGF0aWMgaW50MzJf dCBpcHZyX2dlbV9kb19leGVjYnVmZmVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCXN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAorCQkJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX2V4ZWNi dWZmZXIgKmFyZ3MsCisJCQkJCXN0cnVjdCBpcHZyX2FkZHJlc3Nfc3BhY2UgKnZtKQoreworCWRy bV9pcHZyX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBp cHZyX3ZhbGlkYXRlX2NvbnRleHQgKmNvbnRleHQgPSAmZGV2X3ByaXYtPnZhbGlkYXRlX2N0eDsK KwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOwor CXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpjbWRfYnVmZmVyOworCXN0cnVjdCBpcHZyX2Nv bnRleHQgKmlwdnJfY3R4ICA9IE5VTEw7CisJaW50MzJfdCByZXQsIGN0eF9pZDsKKworCS8qIGlm IG5vdCBwYXNzIDAsIHVzZSBkZWZhdWx0IGNvbnRleHQgaW5zdGVhZCAqLworCWlmIChhcmdzLT5j dHhfaWQgPT0gMCkKKwkJY3R4X2lkID0gZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmN0eF9pZDsKKwll bHNlCisJCWN0eF9pZCA9IGFyZ3MtPmN0eF9pZDsKKworCUlQVlJfREVCVUdfR0VORVJBTCgidHJ5 IHRvIGZpbmQgY3R4IGFjY29yZGluZyBjdHhfaWQgJWQuXG4iLCBjdHhfaWQpOworCWlwdnJfY3R4 ID0gKHN0cnVjdCBpcHZyX2NvbnRleHQgKikKKwkJCWlkcl9maW5kKCZkZXZfcHJpdi0+aXB2cl9j dHhfaWRyLCBjdHhfaWQpOworCWlmICghaXB2cl9jdHgpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJ2 aWRlbyBjdHggaXMgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCUlQ VlJfREVCVUdfR0VORVJBTCgicmVmZXJlbmNlIGFsbCBidWZmZXJzIHBhc3NlZCB0aHJvdWdoIGJ1 ZmZlcl9saXN0LlxuIik7CisJcmV0ID0gaXB2cl9yZWZlcmVuY2VfYnVmZmVycyhmaWxlX3ByaXYs IGNvbnRleHQsCisJCQkJYXJncy0+YnVmZmVyX2xpc3QsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJ aWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQlJUFZSX0RFQlVHX1dBUk4oInJlZmVyZW5jZSBi dWZmZXIgZmFpbGVkLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCUlQVlJfREVCVUdf R0VORVJBTCgicmVzZXJ2ZSBhbGwgYnVmZmVycyB0byBtYWtlIHRoZW0gbm90IGFjY2Vzc2VkICIK KwkJCSJieSBvdGhlciB0aHJlYWRzLlxuIik7CisJcmV0ID0gaXB2cl9yZXNlcnZlX2J1ZmZlcnMo JmNvbnRleHQtPnZhbGlkYXRlX2xpc3QpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJ SVBWUl9ERUJVR19XQVJOKCJyZXNlcnZlIGJ1ZmZlcnMgZmFpbGVkLlxuIik7CisJCS8qIC1FQlVT WSBvciAtRVJFU1RBUlRTWVMgKi8KKwkJZ290byBvdXRfdW5yZWZfYnVmOworCX0KKworCUlQVlJf REVCVUdfR0VORVJBTCgidmFsaWRhdGUgYnVmZmVyIGxpc3QsIG1haW5seSBjaGVjayAiCisJCQki dGhlIGJvIGdwdSBvZmZzZXQuXG4iKTsKKwlyZXQgPSBpcHZyX3ZhbGlkYXRlX2J1ZmZlcl9saXN0 KGZpbGVfcHJpdiwgY29udGV4dCk7CisJaWYgKHJldCkgeworCQlJUFZSX0RFQlVHX1dBUk4oInZh bGlkYXRlIGJ1ZmZlcnMgZmFpbGVkLlxuIik7CisJCWdvdG8gb3V0X2JhY2tvZmZfcmVzZXJ2Owor CX0KKworCWNtZF9idWZmZXIgPSB0b19pcHZyX2JvKGlkcl9maW5kKCZmaWxlX3ByaXYtPm9iamVj dF9pZHIsCisJCQkJCWFyZ3MtPmNtZGJ1Zl9oYW5kbGUpKTsKKwlpZiAoIWNtZF9idWZmZXIpIHsK KwkJSVBWUl9ERUJVR19XQVJOKCJJbnZhbGlkIGNtZCBvYmplY3QgaGFuZGxlIDB4JXguXG4iLAor CQkJYXJncy0+Y21kYnVmX2hhbmRsZSk7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0X2Jh Y2tvZmZfcmVzZXJ2OworCX0KKworCS8qCisJICogaGVyZSBWRUQgaXMgc3VwcG9ydGVkIGN1cnJl bnRseQorCSAqIHdoZW4gc3VwcG9ydCBWRUMgYW5kIFZTUCwgbmVlZCBpbXBsZW1lbnQgYSBnZW5l cmFsIHdheSB0bworCSAqIGNhbGwgc3ViLWVuZ2luZSBmdW5jdGlvbnMKKwkgKi8KKwlhdG9taWNf aW5jKCZkZXZfcHJpdi0+dmVkX3Bvd2VyX3VzYWdlKTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImdl dCBWRUQgcG93ZXIgd2l0aCB1c2FnZT0lZC5cbiIsCisJCWF0b21pY19yZWFkKCZkZXYtPnBsYXRm b3JtZGV2LT5kZXYucG93ZXIudXNhZ2VfY291bnQpKTsKKwlyZXQgPSBwbV9ydW50aW1lX2dldF9z eW5jKCZkZXYtPnBsYXRmb3JtZGV2LT5kZXYpOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewor CQlJUFZSX0VSUk9SKCJFcnJvciBnZXQgVkVEIHBvd2VyOiAlZFxuIiwgcmV0KTsKKwkJcmV0ID0g LUVCVVNZOworCQlnb3RvIG91dF9iYWNrb2ZmX3Jlc2VydjsKKwl9CisKKwlyZXQgPSBtdXRleF9s b2NrX2ludGVycnVwdGlibGUoJnZlZF9wcml2LT52ZWRfbXV0ZXgpOworCWlmICh1bmxpa2VseShy ZXQpKSB7CisJCUlQVlJfRVJST1IoIkVycm9yIGdldCBWRUQgbXV0ZXg6ICVkXG4iLCByZXQpOwor CQkvKiAtRUlOVFIgKi8KKwkJZ290byBvdXRfcG93ZXJfcHV0OworCX0KKworCUlQVlJfREVCVUdf R0VORVJBTCgicGFyc2UgY21kIGJ1ZmZlciBhbmQgc2VuZCB0byBWRUQuXG4iKTsKKwlyZXQgPSB2 ZWRfY21kYnVmX3ZpZGVvKGZpbGVfcHJpdiwgY21kX2J1ZmZlciwKKwkJCWFyZ3MtPmNtZGJ1Zl9z aXplLCBpcHZyX2N0eCApOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUlQVlJfREVCVUdfV0FS TigidmVkX2NtZGJ1Zl92aWRlbyByZXR1cm5zICVkLlxuIiwgcmV0KTsKKwkJLyogLUVJTlZBTCwg LUVOT01FTSwgLUVGQVVMVCwgLUVCVVNZICovCisJCWdvdG8gb3V0X3Bvd2VyX3B1dDsKKwl9CisK KwltdXRleF91bmxvY2soJnZlZF9wcml2LT52ZWRfbXV0ZXgpOworCisJLyoqCisJICogdXBkYXRl IG1tdV9vZmZzZXRzIGFuZCBmZW5jZSBmZHMgdG8gdXNlcgorCSAqLworCXJldCA9IGlwdnJfdXBk YXRlX2J1ZmZlcnMoZmlsZV9wcml2LCBjb250ZXh0LAorCQkJCWFyZ3MtPmJ1ZmZlcl9saXN0LCBh cmdzLT5idWZmZXJfY291bnQpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUlQVlJfREVCVUdf V0FSTigiaXB2cl91cGRhdGVfYnVmZmVycyByZXR1cm5zIGVycm9yICVkLlxuIiwgcmV0KTsKKwkJ cmV0ID0gMDsKKwl9CisKK291dF9wb3dlcl9wdXQ6CisJaWYgKHJldCkgeworCQlyZXQgPSBwbV9y dW50aW1lX3B1dCgmZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsKKwkJaWYgKHVubGlrZWx5KHJldCA8 IDApKQorCQkJSVBWUl9FUlJPUigiRXJyb3IgcHV0IFZFRCBwb3dlcjogJWRcbiIsIHJldCk7CisJ CUlQVlJfREVCVUdfR0VORVJBTCgiVkVEIHBvd2VyIHB1dC4gdXNhZ2UgYmVjYW1lICVkLlxuIiwK KwkJCWF0b21pY19yZWFkKCZkZXYtPnBsYXRmb3JtZGV2LT5kZXYucG93ZXIudXNhZ2VfY291bnQp KTsKKwl9CisKK291dF9iYWNrb2ZmX3Jlc2VydjoKKwlJUFZSX0RFQlVHX0dFTkVSQUwoInVucmVz ZXJ2ZSBidWZmZXIgbGlzdC5cbiIpOworCWlwdnJfYmFja29mZl9yZXNlcnZhdGlvbigmY29udGV4 dC0+dmFsaWRhdGVfbGlzdCk7CisKK291dF91bnJlZl9idWY6CisJSVBWUl9ERUJVR19HRU5FUkFM KCJ1bnJlZiBidWZzIHdoaWNoIGFyZSByZWZlcmVkIGR1cmluZyBibyBsb29rdXAuXG4iKTsKKwlp cHZyX3VucmVmZXJlbmNlX2J1ZmZlcnMoY29udGV4dCk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KioKKyAqIGlwdnJfZ2VtX2RvX2V4ZWNidWZmZXIgLSBsb29rdXAgdGhlIGNvbnRleHQgd2l0aCBn aXZlbiBmZW5jZSBzZXFubworICoKKyAqIGlvY3RsIGVudHJ5IGZvciBEUk1fSVBWUl9HRU1fRVhF Q0JVRkZFUgorICoKKyAqIFJldHVybnM6CisgKiAtRU5PRU5UIGlmIGNvbnRleHQgbm90IGZvdW5k LCBvciBjbWRidWYgYm8gbm90IGZvdW5kCisgKiAtRUlOVkFMIGlmIHJlZmVyZW5jaW5nIGJ1ZmZl ciBmYWlscywgb3IgZXhlY3V0aW5nIGNtZGJ1ZiBmYWlscworICogLUVJTlRSIGlmIGZhaWxzIHRv IGxvY2sgbXV0ZXgKKyAqIC1FQlVTWSBpZiBmYWlscyB0byBnZXQgcG93ZXIgd2VsbCwgb3IgZXhl Y3V0aW9uIGZhaWxzCisgKiAtRVJFU1RBUlRTWVMgaWYgcmVzZXJ2YXRpbmcgYnVmZmVyIGZhaWxz CisgKiAtRU5PTUVNIGlmIGV4ZWN1dGlvbiBmYWlscworICogLUVGQVVMVCBpZiBleGVjdXRpb24g ZmFpbHMKKyAqIDAgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQzMl90IGlwdnJfZ2VtX2V4ZWNidWZm ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBk ZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faXB2cl9nZW1fZXhlY2J1ZmZlciAqYXJncyA9 IGRhdGE7CisJaW50MzJfdCByZXQ7CisJc3RydWN0IGlwdnJfdmFsaWRhdGVfY29udGV4dCAqY29u dGV4dCA9ICZkZXZfcHJpdi0+dmFsaWRhdGVfY3R4OworCisJaWYgKCFjb250ZXh0IHx8ICFjb250 ZXh0LT5idWZmZXJzKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCXJldHVybiByZXQ7CisJfQorCisJ Y29udGV4dC0+dXNlZF9idWZmZXJzID0gMDsKKworCWlmIChhcmdzLT5idWZmZXJfY291bnQgPCAx IHx8CisJCWFyZ3MtPmJ1ZmZlcl9jb3VudCA+CisJCQkoVUlOVF9NQVggLyBzaXplb2Yoc3RydWN0 IGlwdnJfdmFsaWRhdGVfYnVmZmVyKSkpIHsKKwkJSVBWUl9FUlJPUigidmFsaWRhdGUgJWQgYnVm ZmVycy5cbiIsIGFyZ3MtPmJ1ZmZlcl9jb3VudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXRyYWNlX2lwdnJfZ2VtX2V4ZWNfaW9jdGwoYXJncyk7CisJcmV0ID0gaXB2cl9nZW1fZG9fZXhl Y2J1ZmZlcihkZXYsIGZpbGVfcHJpdiwgYXJncywKKwkJCQkgICAgJmRldl9wcml2LT5hZGRyX3Nw YWNlKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIv aXB2cl9leGVjLmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2V4ZWMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODQwNWRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2lwdnIvaXB2cl9leGVjLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiBpcHZyX2V4ZWMuaDogSVBWUiBoZWFkZXIgZmlsZSBmb3IgY29tbWFuZCBi dWZmZXIgZXhlY3V0aW9uCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0 aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAq IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNI QU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3Qg LSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBBdXRob3Jz OgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICoKKyAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworI2lmbmRlZiBfSVBWUl9FWEVDX0hfCisjZGVmaW5lIF9JUFZSX0VYRUNfSF8K KworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisjaW5jbHVkZSAiaXB2cl9kcm0uaCIKKyNpbmNsdWRl ICJpcHZyX2dlbS5oIgorI2luY2x1ZGUgImlwdnJfZmVuY2UuaCIKKworc3RydWN0IGRybV9pcHZy X3ByaXZhdGU7CisKKyNkZWZpbmUgSVBWUl9OVU1fVkFMSURBVEVfQlVGRkVSUyAyMDQ4CisKKyNk ZWZpbmUgSVBWUl9NQVhfUkVMT0NfUEFHRVMgMTAyNAorCisvKiBzdGF0dXMgb2YgdGhlIGNvbW1h bmQgc2VudCB0byB0aGUgaXB2ciBkZXZpY2UgKi8KK2VudW0gaXB2cl9jbWRfc3RhdHVzIHsKKwlJ UFZSX0NNRF9TVUNDRVNTLAorCUlQVlJfQ01EX0ZBSUxFRCwKKwlJUFZSX0NNRF9MT0NLVVAsCisJ SVBWUl9DTURfU0tJUAorfTsKKworc3RydWN0IGlwdnJfdmFsaWRhdGVfYnVmZmVyIHsKKwlzdHJ1 Y3QgaXB2cl92YWxpZGF0ZV9hcmcgdmFsX3JlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CisJ c3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmlwdnJfZ2VtX2JvOworCXN0cnVjdCBpcHZyX2Zl bmNlICpvbGRfZmVuY2U7Cit9OworCitpbnQgaXB2cl9ib19yZXNlcnZlKHN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICpvYmosCisJCSAgICAgYm9vbCBpbnRlcnJ1cHRpYmxlLCBib29sIG5vX3dh aXQpOworCit2b2lkIGlwdnJfYm9fdW5yZXNlcnZlKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0 ICpvYmopOworCitzdHJ1Y3QgaXB2cl9jb250ZXh0KgoraXB2cl9maW5kX2N0eF93aXRoX2ZlbmNl KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgdWludDE2X3QgZmVuY2UpOworCit2 b2lkIGlwdnJfc2V0X3RpbGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJdWludDhfdCB0aWxp bmdfc2NoZW1lLCB1aW50OF90IHRpbGluZ19zdHJpZGUpOworCitpbnQgaXB2cl9jbWRidWZfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9mZW5jZS5jIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9mZW5jZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOGUwZDQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmMKQEAgLTAsMCArMSw1NTAgQEAKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgorICogaXB2cl9mZW5jZS5jOiBJUFZSIGZlbmNlIGhhbmRsaW5nIHRv IHRyYWNrIGNvbW1hbmQgZXhlY3R1aW9uIHN0YXR1cworICoKKyAqIENvcHlyaWdodCAoYykgMjAx NCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJl c2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNv bmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAy LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAq IDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0Eu CisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4K KyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiovCisKKyNpbmNsdWRlICJpcHZyX2ZlbmNlLmgiCisjaW5jbHVkZSAidmVkX3JlZy5oIgor I2luY2x1ZGUgInZlZF9mdy5oIgorI2luY2x1ZGUgInZlZF9jbWQuaCIKKyNpbmNsdWRlICJpcHZy X2V4ZWMuaCIKKyNpbmNsdWRlICJpcHZyX2J1ZmZlci5oIgorI2luY2x1ZGUgImlwdnJfdHJhY2Uu aCIKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+ CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxp bnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Fu b25faW5vZGVzLmg+CisKK3N0YXRpYyBpbnQzMl90IGlwdnJfdXNyZmVuY2VfcmVsZWFzZShzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdWludDMyX3QgaXB2 cl91c3JmZW5jZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KTsKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwdnJfdXNyZmVuY2VfZm9wcyA9IHsK KwkucmVsZWFzZSA9IGlwdnJfdXNyZmVuY2VfcmVsZWFzZSwKKwkucG9sbCA9IGlwdnJfdXNyZmVu Y2VfcG9sbCwKK307CisKKy8qKgorICogaXB2cl9mZW5jZV9jcmVhdGUgLSBjcmVhdGUgYW5kIGlu aXQgYSBmZW5jZQorICoKKyAqIEBkZXZfcHJpdjogZHJtX2lwdnJfcHJpdmF0ZSBwb2ludGVyCisg KiBAZmVuY2U6IGlwdnIgZmVuY2Ugb2JqZWN0CisgKiBAZmVuY2VfZmQ6IGZpbGUgZGVzY3JpcHRv ciBmb3IgZXhwb3J0aW5nIGZlbmNlCisgKgorICogQ3JlYXRlIGEgZmVuY2UsIGFjdHVhbGx5IHRo ZSBmZW5jZSBpcyB3cml0dGVuIHRvIGlwdnIgdGhyb3VnaCBtc2cuCisgKiBleHBvcnRpbmcgYSBu ZXcgZmlsZSBkZXNjcmlwdG9yIHRvIHVzZXJzcGFjZS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNz LCAtRU5PTUVNIG9uIGZhaWx1cmUuCisgKi8KK2ludDMyX3QKK2lwdnJfZmVuY2VfY3JlYXRlKHN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwKKyAgICAgICAgICAgICAgICAgIHN0cnVj dCBpcHZyX2ZlbmNlICoqZmVuY2UsCisgICAgICAgICAgICAgICAgICBpbnQgKmZlbmNlX2ZkKQor eworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCXVpbnQxNl90IG9sZF9zZXE7CisJaW50IGZk OworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXY7CisJQlVHX09OKCFmZW5jZV9mZCB8fCAq ZmVuY2VfZmQgPj0gMCk7CisJZmQgPSBnZXRfdW51c2VkX2ZkKCk7CisJdmVkX3ByaXYgPSBkZXZf cHJpdi0+dmVkX3ByaXZhdGU7CisKKwlpZiAoZmQgPCAwKSB7CisJCUlQVlJfRVJST1IoIkFMQVJN ISEhIG5vIHVudXNlZCBGRCBmb3VuZCFcbiIpOworCQlyZXR1cm4gZmQ7CisJfQorCisJKmZlbmNl ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwdnJfZmVuY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAo KCpmZW5jZSkgPT0gTlVMTCkgeworCQlwdXRfdW51c2VkX2ZkKGZkKTsKKwkJcmV0dXJuIC1FTk9N RU07CisJfQorCSgqZmVuY2UpLT5maWxlID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJpcHZyX3VzcmZl bmNlIiwgJmlwdnJfdXNyZmVuY2VfZm9wcywKKwkJCQkJICpmZW5jZSwgMCk7CisJaWYgKElTX0VS UigoKmZlbmNlKS0+ZmlsZSkpIHsKKwkJa2ZyZWUoKmZlbmNlKTsKKwkJcHV0X3VudXNlZF9mZChm ZCk7CisJCUlQVlJfRVJST1IoIkFMQVJNISEhIGFub25faW5vZGVfZ2V0ZmlsZSBjYWxsIGZhaWxl ZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWtyZWZfaW5pdCgmKCgqZmVuY2UpLT5r cmVmKSk7CisJKCpmZW5jZSktPmRldl9wcml2ID0gZGV2X3ByaXY7CisKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2X3ByaXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBpcnFfZmxhZ3MpOworCS8qIGNt ZHMgaW4gb25lIGJhdGNoIHVzZSBkaWZmZXJlbnQgZmVuY2UgdmFsdWUgKi8KKwlvbGRfc2VxID0g ZGV2X3ByaXYtPmZlbmNlX2Rydi5zeW5jX3NlcTsKKwlkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNf c2VxID0gZGV2X3ByaXYtPmxhc3Rfc2VxKys7CisJZGV2X3ByaXYtPmZlbmNlX2Rydi5zeW5jX3Nl cSA8PD0gNDsKKwlkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxICs9IHZlZF9wcml2LT5udW1f Y21kOworCSgqZmVuY2UpLT5zZXEgPSBkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxOworCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrLCBp cnFfZmxhZ3MpOworCisJZmRfaW5zdGFsbChmZCwgKCpmZW5jZSktPmZpbGUpOworCWtyZWZfZ2V0 KCYoKmZlbmNlKS0+a3JlZik7CisJSVBWUl9ERUJVR19HRU5FUkFMKCJmZW5jZSBpcyBjcmVhdGVk IGFuZCBpdHMgc2VxIGlzICV1ICgweCUwNHgpLCBmZCBpcyAlZC5cbiIsCisJCSgqZmVuY2UpLT5z ZXEsICgqZmVuY2UpLT5zZXEsIGZkKTsKKwkqZmVuY2VfZmQgPSBmZDsKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiBpcHZyX2ZlbmNlX2Rlc3Ryb3kgLSBkZXN0cm95IGEgZmVuY2UKKyAqCisgKiBA a3JlZjogZmVuY2Uga3JlZgorICoKKyAqIEZyZWVzIHRoZSBmZW5jZSBvYmplY3QgKGFsbCBhc2lj cykuCisgKi8KK3N0YXRpYyB2b2lkIGlwdnJfZmVuY2VfZGVzdHJveShzdHJ1Y3Qga3JlZiAqa3Jl ZikKK3sKKwlzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2U7CisKKwlmZW5jZSA9IGNvbnRhaW5lcl9v ZihrcmVmLCBzdHJ1Y3QgaXB2cl9mZW5jZSwga3JlZik7CisJa2ZyZWUoZmVuY2UpOworfQorCisv KioKKyAqIGlwdnJfZmVuY2VfcHJvY2VzcyAtIHByb2Nlc3MgYSBmZW5jZQorICoKKyAqIEBkZXZf cHJpdjogZHJtX2lwdnJfcHJpdmF0ZSBwb2ludGVyCisgKiBAc2VxOiBpbmRpY2F0ZSB0aGUgZmVu Y2Ugc2VxIGhhcyBiZWVuIHNpZ25hbGVkCisgKiBAZXJyOiBpbmRpY2F0ZSBpZiBlcnIgaGFwcGVu ZWQsIGZvciBmdXR1cmUgdXNlCisgKgorICogQ2hlY2tzIHRoZSBjdXJyZW50IGZlbmNlIHZhbHVl IGFuZCB3YWtlcyB0aGUgZmVuY2UgcXVldWUKKyAqIGlmIHRoZSBzZXF1ZW5jZSBudW1iZXIgaGFz IGluY3JlYXNlZCAoYWxsIGFzaWNzKS4KKyAqLwordm9pZCBpcHZyX2ZlbmNlX3Byb2Nlc3Moc3Ry dWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJdWludDE2X3Qgc2VxLCB1aW50OF90 IGVycikKK3sKKwlpbnQgc2lnbmFsZWRfc2VxX2ludDsKKwl1aW50MTZfdCBzaWduYWxlZF9zZXE7 CisJdWludDE2X3QgbGFzdF9lbWl0dGVkOworCisJc2lnbmFsZWRfc2VxX2ludCA9IGF0b21pY19y ZWFkKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSk7CisJc2lnbmFsZWRfc2VxID0g KHVpbnQxNl90KXNpZ25hbGVkX3NlcV9pbnQ7CisJbGFzdF9lbWl0dGVkID0gZGV2X3ByaXYtPmZl bmNlX2Rydi5zeW5jX3NlcTsKKworCWlmIChpcHZyX3NlcV9hZnRlcihzZXEsIGxhc3RfZW1pdHRl ZCkpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJzZXEgZXJyb3IsIHNlcSBpcyAldSwgc2lnbmFsZWRf c2VxIGlzICV1LCAiCisJCQkJImxhc3RfZW1pdHRlZCBpcyAldS5cbiIsCisJCQkJc2VxLCBzaWdu YWxlZF9zZXEsIGxhc3RfZW1pdHRlZCk7CisJCXJldHVybjsKKwl9CisJaWYgKGlwdnJfc2VxX2Fm dGVyKHNlcSwgc2lnbmFsZWRfc2VxKSkgeworCQlhdG9taWNfeGNoZygmZGV2X3ByaXYtPmZlbmNl X2Rydi5zaWduYWxlZF9zZXEsIHNlcSk7CisJCWRldl9wcml2LT5mZW5jZV9kcnYubGFzdF9hY3Rp dml0eSA9IGppZmZpZXM7CisJCUlQVlJfREVCVUdfR0VORVJBTCgibGFzdCBlbWl0dGVkIHNlcSAl dSBpcyB1cGRhdGVkLlxuIiwgc2VxKTsKKwkJd2FrZV91cF9hbGwoJmRldl9wcml2LT5mZW5jZV9x dWV1ZSk7CisJfQorfQorCisvKioKKyAqIGlwdnJfZmVuY2Vfc2lnbmFsZWQgLSBjaGVjayBpZiBh IGZlbmNlIHNlcXVldWNlIG51bWJlciBoYXMgc2lnbmFsZWQKKyAqCisgKiBAZGV2X3ByaXY6IGlw dnIgZGV2aWNlIHBvaW50ZXIKKyAqIEBzZXE6IHNlcXVlbmNlIG51bWJlcgorICoKKyAqIENoZWNr IGlmIHRoZSBsYXN0IHNpbmdsZWQgZmVuY2Ugc2VxdW5jZSBudW1iZXIgaXMgPj0gdGhlIHJlcXVl c3RlZAorICogc2VxdWVuY2UgbnVtYmVyIChhbGwgYXNpY3MpLgorICogUmV0dXJucyB0cnVlIGlm IHRoZSBmZW5jZSBoYXMgc2lnbmFsZWQgKGN1cnJlbnQgZmVuY2UgdmFsdWUKKyAqIGlzID49IHJl cXVlc3RlZCB2YWx1ZSkgb3IgZmFsc2UgaWYgaXQgaGFzIG5vdCAoY3VycmVudCBmZW5jZQorICog dmFsdWUgaXMgPCB0aGUgcmVxdWVzdGVkIHZhbHVlLgorICovCitzdGF0aWMgYm9vbCBpcHZyX2Zl bmNlX3NpZ25hbGVkKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwgdWludDE2X3Qg c2VxKQoreworCXVpbnQxNl90IGN1cnJfc2VxLCBzaWduYWxlZF9zZXE7CisJdW5zaWduZWQgbG9u ZyBpcnFfZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVu Y2VfbG9jaywgaXJxX2ZsYWdzKTsKKwljdXJyX3NlcSA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZS0+ dmVkX2N1cl9zZXE7CisJc2lnbmFsZWRfc2VxID0gYXRvbWljX3JlYWQoJmRldl9wcml2LT5mZW5j ZV9kcnYuc2lnbmFsZWRfc2VxKTsKKworCWlmIChpcHZyX3NlcV9hZnRlcihzZXEsIHNpZ25hbGVk X3NlcSkpIHsKKwkJLyogcG9sbCBuZXcgbGFzdCBzZXF1ZW5jZSBhdCBsZWFzdCBvbmNlICovCisJ CWlwdnJfZmVuY2VfcHJvY2VzcyhkZXZfcHJpdiwgY3Vycl9zZXEsIElQVlJfQ01EX1NVQ0NFU1Mp OworCQlzaWduYWxlZF9zZXEgPSBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmZlbmNlX2Rydi5zaWdu YWxlZF9zZXEpOworCQlpZiAoaXB2cl9zZXFfYWZ0ZXIoc2VxLCBzaWduYWxlZF9zZXEpKSB7CisJ CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ss CisJCQkJCQlpcnFfZmxhZ3MpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5mZW5jZV9kcnYuZmVuY2VfbG9jaywgaXJxX2ZsYWdz KTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX2xvY2t1cCAtIGlwdnIg bG9ja3VwIGlzIGRldGVjdGVkCisgKgorICogQGRldl9wcml2OiBpcHZyIGRldmljZSBwb2ludGVy CisgKiBAZmVuY2U6IGxvY2t1cCBkZXRlY3RlZCB3aGVuIHdhaXQgdGhlIHNwZWNpZmljIGZlbmNl CisgKgorICogRHVyaW5nIHRoZSBjYWxsaW5nIG9mIGlwdnJfZmVuY2Vfd2FpdCwgaWYgd2FpdCB0 byB0aW1lb3V0LAorICogaW5kaWNhdGUgbG9ja3VwIGhhcHBlbmVkLCBuZWVkIGZsdXNoIGNtZCBx dWV1ZSBhbmQgcmVzZXQgdmVkCisgKiBJZiBpcHZyX2ZlbmNlX3dhaXRfZW1wdHlfbG9ja2VkIGVu Y291bnRlciBsb2NrdXAsIGZlbmNlIGlzIE5VTEwKKyAqLworCitzdGF0aWMgdm9pZAoraXB2cl9m ZW5jZV9sb2NrdXAoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgaXB2 cl9mZW5jZSAqZmVuY2UpCit7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWRldl9wcml2LT5kZXY7CisJc3Ry dWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKworCUlQ VlJfREVCVUdfV0FSTigidGltZW91dCBkZXRlY3RlZCwgZmx1c2ggcXVldWVkIGNtZCwgbWF5YmUg bG9ja3VwLlxuIik7CisJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9DT01NU19GV19TVEFUVVMgcmVn IGlzIDB4JXguXG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfRldfU1RBVFVTKSk7 CisKKwlpZiAoZmVuY2UpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5mZW5jZV9k cnYuZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsKKwkJaXB2cl9mZW5jZV9wcm9jZXNzKGRldl9wcml2 LCBmZW5jZS0+c2VxLCBJUFZSX0NNRF9MT0NLVVApOworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFncyk7CisJfQorCXZlZF9m bHVzaF9jbWRfcXVldWUoZGV2KTsKKworCWlmICh2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0 KQorCQl2ZWRfcHJpdi0+dmVkX25lZWRzX3Jlc2V0IHw9IE1TVkRYX1JFU0VUX05FRURTX1JFVVBM T0FEX0ZXIHwKKwkJCU1TVkRYX1JFU0VUX05FRURTX0lOSVRfRlc7CisJZWxzZQorCQl2ZWRfcHJp di0+dmVkX25lZWRzX3Jlc2V0ID0gMTsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX3dhaXRfc2Vx IC0gd2FpdCBmb3IgYSBzcGVjaWZpYyBzZXF1ZW5jZSBudW1iZXIKKyAqCisgKiBAZGV2X3ByaXY6 IGlwdnIgZGV2aWNlIHBvaW50ZXIKKyAqIEB0YXJnZXRfc2VxOiBzZXF1ZW5jZSBudW1iZXIgd2Ug d2FudCB0byB3YWl0IGZvcgorICogQGludHI6IHVzZSBpbnRlcnJ1cHRhYmxlIHNsZWVwCisgKgor ICogV2FpdCBmb3IgdGhlIHJlcXVlc3RlZCBzZXF1ZW5jZSBudW1iZXIgdG8gYmUgd3JpdHRlbi4K KyAqIEBpbnRyIHNlbGVjdHMgd2hldGhlciB0byB1c2UgaW50ZXJydXB0YWJsZSAodHJ1ZSkgb3Ig bm9uLWludGVycnVwdGFibGUKKyAqIChmYWxzZSkgc2xlZXAgd2hlbiB3YWl0aW5nIGZvciB0aGUg c2VxdWVuY2UgbnVtYmVyLgorICogUmV0dXJucyAwIGlmIHRoZSBzZXF1ZW5jZSBudW1iZXIgaGFz IHBhc3NlZCwgZXJyb3IgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAqIC1FREVBRExLIGlzIHJldHVy bmVkIHdoZW4gYSBHUFUgbG9ja3VwIGhhcyBiZWVuIGRldGVjdGVkLgorICovCitzdGF0aWMgaW50 MzJfdCBpcHZyX2ZlbmNlX3dhaXRfc2VxKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp diwKKwkJCQkJdWludDE2X3QgdGFyZ2V0X3NlcSwgYm9vbCBpbnRyKQoreworCXN0cnVjdCBpcHZy X2ZlbmNlX2RyaXZlcgkqZmVuY2VfZHJ2ID0gJmRldl9wcml2LT5mZW5jZV9kcnY7CisJdW5zaWdu ZWQgbG9uZyB0aW1lb3V0LCBsYXN0X2FjdGl2aXR5OworCXVpbnQxNl90IHNpZ25hbGVkX3NlcTsK KwlpbnQzMl90IHJldDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwlib29sIHNpZ25hbGVk OworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGly cV9mbGFncyk7CisKKwl3aGlsZSAoaXB2cl9zZXFfYWZ0ZXIodGFyZ2V0X3NlcSwKKwkJCSh1aW50 MTZfdClhdG9taWNfcmVhZCgmZmVuY2VfZHJ2LT5zaWduYWxlZF9zZXEpKSkgeworCQkvKiBzZWVt cyB0aGUgZmVuY2VfZHJ2LT5sYXN0X2FjdGl2aXR5IGlzIHVzZWxlc3M/ICovCisJCXRpbWVvdXQg PSBJUFZSX0ZFTkNFX0pJRkZJRVNfVElNRU9VVDsKKwkJc2lnbmFsZWRfc2VxID0gYXRvbWljX3Jl YWQoJmZlbmNlX2Rydi0+c2lnbmFsZWRfc2VxKTsKKwkJLyogc2F2ZSBsYXN0IGFjdGl2aXR5IHZh bHVlZSwgdXNlZCB0byBjaGVjayBmb3IgR1BVIGxvY2t1cHMgKi8KKwkJbGFzdF9hY3Rpdml0eSA9 IGZlbmNlX2Rydi0+bGFzdF9hY3Rpdml0eTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFncyk7CisJCWlmIChpbnRyKSB7 CisJCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCQlkZXZfcHJp di0+ZmVuY2VfcXVldWUsCisJCQkJKHNpZ25hbGVkID0gaXB2cl9mZW5jZV9zaWduYWxlZChkZXZf cHJpdiwgdGFyZ2V0X3NlcSkpLAorCQkJCXRpbWVvdXQpOworCQl9IGVsc2UgeworCQkJcmV0ID0g d2FpdF9ldmVudF90aW1lb3V0KAorCQkJCWRldl9wcml2LT5mZW5jZV9xdWV1ZSwKKwkJCQkoc2ln bmFsZWQgPSBpcHZyX2ZlbmNlX3NpZ25hbGVkKGRldl9wcml2LCB0YXJnZXRfc2VxKSksCisJCQkJ dGltZW91dCk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5mZW5jZV9kcnYu ZmVuY2VfbG9jaywgaXJxX2ZsYWdzKTsKKworCQlpZiAodW5saWtlbHkoIXNpZ25hbGVkKSkgewor CQkJLyogd2Ugd2VyZSBpbnRlcnJ1cHRlZCBmb3Igc29tZSByZWFzb24gYW5kIGZlbmNlCisJCQkg KiBpc24ndCBzaWduYWxlZCB5ZXQsIHJlc3VtZSB3YWl0aW5nIHVudGlsIHRpbWVvdXQgICovCisJ CQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJCQkvKiBzaG91bGQgcmV0dXJuIC1FUkVTVEFS VFNZUywKKwkJCQkgKiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAqLworCQkJCWNvbnRpbnVlOwor CQkJfQorCisJCQkvKiBjaGVjayBpZiBzZXF1ZW5jZSB2YWx1ZSBoYXMgY2hhbmdlZCBzaW5jZQor CQkJICogbGFzdF9hY3Rpdml0eSAqLworCQkJaWYgKHNpZ25hbGVkX3NlcSAhPQorCQkJCWF0b21p Y19yZWFkKCZmZW5jZV9kcnYtPnNpZ25hbGVkX3NlcSkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0K KworCQkJaWYgKGxhc3RfYWN0aXZpdHkgIT0gZmVuY2VfZHJ2LT5sYXN0X2FjdGl2aXR5KSB7CisJ CQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIGxvY2t1cCBoYXBwZW4sIGl0IGlzIGJldHRlciBo YXZlIHNvbWUgcmVnIHRvIGNoZWNrICovCisJCQlJUFZSX0RFQlVHX1dBUk4oIkdQVSBsb2NrdXAg KHdhaXRpbmcgZm9yIDB4JTB4IGxhc3QgIgorCQkJCQkic2lnbmFsZWQgZmVuY2UgaWQgMHgleCku XG4iLAorCQkJCQl0YXJnZXRfc2VxLCBzaWduYWxlZF9zZXEpOworCisJCQkvKiBjaGFuZ2UgbGFz dCBhY3Rpdml0eSBzbyBub2JvZHkgZWxzZQorCQkJICogdGhpbmsgdGhlcmUgaXMgYSBsb2NrdXAg Ki8KKwkJCWZlbmNlX2Rydi0+bGFzdF9hY3Rpdml0eSA9IGppZmZpZXM7CisJCQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssCisJCQkJCWlycV9m bGFncyk7CisJCQlyZXR1cm4gLUVERUFETEs7CisKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LmZlbmNlX2xvY2ssIGlycV9mbGFncyk7CisJcmV0 dXJuIDA7Cit9CisKKy8qKgorICogaXB2cl9mZW5jZV93YWl0IC0gd2FpdCBmb3IgYSBmZW5jZSB0 byBzaWduYWwKKyAqCisgKiBAZmVuY2U6IGlwdnIgZmVuY2Ugb2JqZWN0CisgKiBAaW50cjogdXNl IGludGVycnVwdGFibGUgc2xlZXAKKyAqIEBub193YWl0OiBub3Qgc2lnbmFsZWQsIGlmIG5lZWQg YWRkIGludG8gd2FpdCBxdWV1ZQorICoKKyAqIFdhaXQgZm9yIHRoZSByZXF1ZXN0ZWQgZmVuY2Ug dG8gc2lnbmFsIChhbGwgYXNpY3MpLgorICogQGludHIgc2VsZWN0cyB3aGV0aGVyIHRvIHVzZSBp bnRlcnJ1cHRhYmxlICh0cnVlKSBvciBub24taW50ZXJydXB0YWJsZQorICogKGZhbHNlKSBzbGVl cCB3aGVuIHdhaXRpbmcgZm9yIHRoZSBmZW5jZS4KKyAqIFJldHVybnMgMCBpZiB0aGUgZmVuY2Ug aGFzIHBhc3NlZCwgZXJyb3IgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAqLworaW50MzJfdCBpcHZy X2ZlbmNlX3dhaXQoc3RydWN0IGlwdnJfZmVuY2UgKmZlbmNlLCBib29sIGludHIsIGJvb2wgbm9f d2FpdCkKK3sKKwlpbnQzMl90IHJldDsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3By aXY7CisKKwlpZiAoZmVuY2UgPT0gTlVMTCB8fCBmZW5jZS0+c2VxID09IElQVlJfRkVOQ0VfU0lH TkFMRURfU0VRKSB7CisJCUlQVlJfREVCVUdfR0VORVJBTCgiZmVuY2UgaXMgTlVMTCBvciBoYXMg YmVlbiBzaW5nYWxlZC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisJZGV2X3ByaXYgPSBmZW5jZS0+ ZGV2X3ByaXY7CisKKwlJUFZSX0RFQlVHX0dFTkVSQUwoIndhaXQgZmVuY2Ugc2VxICV1LCBsYXN0 IHNpZ25hbGVkIHNlcSBpcyAlZCwgIgorCQkJImxhc3QgZW1pdHRlZCBzZXEgaXMgJXUuXG4iLCBm ZW5jZS0+c2VxLAorCQkJYXRvbWljX3JlYWQoJmRldl9wcml2LT5mZW5jZV9kcnYuc2lnbmFsZWRf c2VxKSwKKwkJCWRldl9wcml2LT5mZW5jZV9kcnYuc3luY19zZXEpOworCXRyYWNlX2lwdnJfZmVu Y2Vfd2FpdChmZW5jZSwKKwkJCWF0b21pY19yZWFkKCZkZXZfcHJpdi0+ZmVuY2VfZHJ2LnNpZ25h bGVkX3NlcSksCisJCQlkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxKTsKKworCWlmIChpcHZy X2ZlbmNlX3NpZ25hbGVkKGRldl9wcml2LCBmZW5jZS0+c2VxKSkgeworCQlJUFZSX0RFQlVHX0dF TkVSQUwoImZlbmNlIGhhcyBiZWVuIHNpZ25hbGVkLlxuIik7CisJCS8qCisJCSAqIGNvbXBhcmUg d2l0aCB0dG1fYm9fd2FpdCwgZG9uJ3QgbmVlZCBjcmVhdGUgYSB0bXBfb2JqCisJCSAqIGl0IGlz IGJldHRlciB3ZSBhbHNvIHNldCBiby0+ZmVuY2UgPSBOVUxMCisJCSAqLworCQlmZW5jZS0+c2Vx ID0gSVBWUl9GRU5DRV9TSUdOQUxFRF9TRVE7CisJCWlwdnJfZmVuY2VfdW5yZWYoJmZlbmNlKTsK KwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG5vX3dhaXQpCisJCXJldHVybiAtRUJVU1k7CisKKwly ZXQgPSBpcHZyX2ZlbmNlX3dhaXRfc2VxKGRldl9wcml2LCBmZW5jZS0+c2VxLCBpbnRyKTsKKwlp ZiAocmV0KSB7CisJCWlmIChyZXQgPT0gLUVERUFETEspCisJCQlpcHZyX2ZlbmNlX2xvY2t1cChk ZXZfcHJpdiwgZmVuY2UpOworCQlyZXR1cm4gcmV0OworCX0KKwlmZW5jZS0+c2VxID0gSVBWUl9G RU5DRV9TSUdOQUxFRF9TRVE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcHZyX2ZlbmNl X2RyaXZlcl9pbml0IC0gaW5pdCB0aGUgZmVuY2UgZHJpdmVyCisgKgorICogQGRldl9wcml2OiBp cHZyIGRldmljZSBwb2ludGVyCisgKgorICogSW5pdCB0aGUgZmVuY2UgZHJpdmVyLCB3aWxsIG5v dCBmYWlsCisgKi8KK3ZvaWQgaXB2cl9mZW5jZV9kcml2ZXJfaW5pdChzdHJ1Y3QgZHJtX2lwdnJf cHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5mZW5jZV9k cnYuZmVuY2VfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2X3ByaXYtPmZlbmNlX3F1 ZXVlKTsKKwlkZXZfcHJpdi0+ZmVuY2VfZHJ2LnN5bmNfc2VxID0gMDsKKwlhdG9taWNfc2V0KCZk ZXZfcHJpdi0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSwgMCk7CisJZGV2X3ByaXYtPmZlbmNlX2Ry di5sYXN0X2FjdGl2aXR5ID0gamlmZmllczsKKwlkZXZfcHJpdi0+ZmVuY2VfZHJ2LmluaXRpYWxp emVkID0gZmFsc2U7Cit9CisKKy8qKgorICogaXB2cl9mZW5jZV93YWl0X2VtcHR5X2xvY2tlZCAt IHdhaXQgZm9yIGFsbCBmZW5jZXMgdG8gc2lnbmFsCisgKgorICogQGRldl9wcml2OiBpcHZyIGRl dmljZSBwb2ludGVyCisgKgorICogV2FpdCBmb3IgYWxsIGZlbmNlcyB0byBiZSBzaWduYWxsZWQu CisgKi8KK3ZvaWQgaXB2cl9mZW5jZV93YWl0X2VtcHR5X2xvY2tlZChzdHJ1Y3QgZHJtX2lwdnJf cHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdWludDE2X3Qgc2VxOworCisJc2VxID0gZGV2X3ByaXYt PmZlbmNlX2Rydi5zeW5jX3NlcTsKKworCXdoaWxlKDEpIHsKKwkJaW50MzJfdCByZXQ7CisJCXJl dCA9IGlwdnJfZmVuY2Vfd2FpdF9zZXEoZGV2X3ByaXYsIHNlcSwgZmFsc2UpOworCQlpZiAocmV0 ID09IDApIHsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChyZXQgPT0gLUVERUFETEspIHsKKwkJ CWlwdnJfZmVuY2VfbG9ja3VwKGRldl9wcml2LCBOVUxMKTsKKwkJCUlQVlJfREVCVUdfV0FSTigi TG9ja3VwIGZvdW5kIHdhaXRpbmcgZm9yIHNlcSAlZC5cbiIsCisJCQkJCXNlcSk7CisJCQlyZXR1 cm47CisJCX0gZWxzZSB7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KKworLyoqCisgKiBpcHZy X2ZlbmNlX2RyaXZlcl9maW5pIC0gdGVhciBkb3duIHRoZSBmZW5jZSBkcml2ZXIKKyAqIGZvciBh bGwgcG9zc2libGUgcmluZ3MuCisgKgorICogQGRldl9wcml2OiBpcHZyIGRldmljZSBwb2ludGVy CisgKgorICogVGVhciBkb3duIHRoZSBmZW5jZSBkcml2ZXIgZm9yIGFsbCBwb3NzaWJsZSByaW5n cyAoYWxsIGFzaWNzKS4KKyAqLwordm9pZCBpcHZyX2ZlbmNlX2RyaXZlcl9maW5pKHN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlpZiAoIWRldl9wcml2LT5mZW5jZV9kcnYu aW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlpcHZyX2ZlbmNlX3dhaXRfZW1wdHlfbG9ja2VkKGRl dl9wcml2KTsKKwl3YWtlX3VwX2FsbCgmZGV2X3ByaXYtPmZlbmNlX3F1ZXVlKTsKKwlkZXZfcHJp di0+ZmVuY2VfZHJ2LmluaXRpYWxpemVkID0gZmFsc2U7Cit9CisKKy8qKgorICogaXB2cl9mZW5j ZV9yZWYgLSB0YWtlIGEgcmVmIG9uIGEgZmVuY2UKKyAqCisgKiBAZmVuY2U6IGZlbmNlIG9iamVj dAorICoKKyAqIFRha2UgYSByZWZlcmVuY2Ugb24gYSBmZW5jZSAoYWxsIGFzaWNzKS4KKyAqIFJl dHVybnMgdGhlIGZlbmNlLgorICovCitzdHJ1Y3QgaXB2cl9mZW5jZSAqaXB2cl9mZW5jZV9yZWYo c3RydWN0IGlwdnJfZmVuY2UgKmZlbmNlKQoreworCWtyZWZfZ2V0KCZmZW5jZS0+a3JlZik7CisJ cmV0dXJuIGZlbmNlOworfQorCisvKioKKyAqIGlwdnJfZmVuY2VfdW5yZWYgLSByZW1vdmUgYSBy ZWYgb24gYSBmZW5jZQorICoKKyAqIEBmZW5jZTogaXB2ciBmZW5jZSBvYmplY3QKKyAqCisgKiBS ZW1vdmUgYSByZWZlcmVuY2Ugb24gYSBmZW5jZSwgaWYgcmVmID09IDAsIGRlc3RvcnkgdGhlIGZl bmNlLgorICovCit2b2lkIGlwdnJfZmVuY2VfdW5yZWYoc3RydWN0IGlwdnJfZmVuY2UgKipmZW5j ZSkKK3sKKwlzdHJ1Y3QgaXB2cl9mZW5jZSAqdG1wID0gKmZlbmNlOworCisJKmZlbmNlID0gTlVM TDsKKwlpZiAodG1wKSB7CisJCWtyZWZfcHV0KCZ0bXAtPmtyZWYsICZpcHZyX2ZlbmNlX2Rlc3Ry b3kpOworCX0KK30KKworLyoqCisgKiBpcHZyX2ZlbmNlX2J1ZmZlcl9vYmplY3RzIC0gYmluZCBm ZW5jZSB0byBidWZmZXIgbGlzdAorICoKKyAqIEBsaXN0OiB2YWxpZGF0aW9uIGJ1ZmZlciBsaXN0 CisgKiBAZmVuY2U6IGlwdnIgZmVuY2Ugb2JqZWN0CisgKgorICogYmluZCBhIGZlbmNlIHRvIGFs bCBvYmogaW4gdGhlIHZhbGlkYXRpb24gbGlzdAorICovCit2b2lkCitpcHZyX2ZlbmNlX2J1ZmZl cl9vYmplY3RzKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5j ZSwgaW50IGZlbmNlX2ZkKQoreworCXN0cnVjdCBpcHZyX3ZhbGlkYXRlX2J1ZmZlciAqZW50cnk7 CisJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKworCWlmIChsaXN0X2VtcHR5KGxp c3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBsaXN0LCBoZWFk KSB7CisJCW9iaiA9IGVudHJ5LT5pcHZyX2dlbV9ibzsKKwkJLyoqCisJCSAqIGRvIG5vdCB1cGRh dGUgZmVuY2UgaWYgdmFsX2FyZ3Mgc3BlY2lmaWVzIHNvCisJCSAqLworCQlpZiAoIWVudHJ5LT52 YWxfcmVxLnNraXBfZmVuY2UpIHsKKwkJCWVudHJ5LT5vbGRfZmVuY2UgPSBvYmotPmZlbmNlOwor CQkJb2JqLT5mZW5jZSA9IGlwdnJfZmVuY2VfcmVmKGZlbmNlKTsKKwkJCWVudHJ5LT52YWxfcmVx LmZlbmNlX2ZkID0gZmVuY2VfZmQ7CisJCX0KKwkJZWxzZSB7CisJCQlJUFZSX0RFQlVHX0dFTkVS QUwoIm9iaiAweCVseCBtYXJrZWQgYXMgbm9uLWZlbmNlXG4iLAorCQkJCWlwdnJfZ2VtX29ial9t bXVfb2Zmc2V0KG9iaikpOworCQl9CisJCWlwdnJfYm9fdW5yZXNlcnZlKG9iaik7CisJfQorCisJ bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgaGVhZCkgeworCQlpZiAoIWVudHJ5LT52 YWxfcmVxLnNraXBfZmVuY2UgJiYgZW50cnktPm9sZF9mZW5jZSkKKwkJCWlwdnJfZmVuY2VfdW5y ZWYoJmVudHJ5LT5vbGRfZmVuY2UpOworCX0KK30KKworc3RhdGljIGludDMyX3QgaXB2cl91c3Jm ZW5jZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorewor CXN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBOVUxMOworCWludCByZXQ7CisJQlVHX09OKCFm ZW5jZSk7CisJZGV2X3ByaXYgPSBmZW5jZS0+ZGV2X3ByaXY7CisJcmV0ID0ga3JlZl9wdXQoJmZl bmNlLT5rcmVmLCAmaXB2cl9mZW5jZV9kZXN0cm95KTsKKwlJUFZSX0RFQlVHX0dFTkVSQUwoImZl bmNlIGZvciBzZXEgJXUgaXMgcmVsZWFzZWQgYnkgdXNyIHNwYWNlXG4iLCBmZW5jZS0+c2VxKTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdWludDMyX3QgaXB2cl91c3JmZW5jZV9wb2xsKHN0 cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBpcHZyX2ZlbmNl ICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBOVUxMOworCUJVR19PTighZmVuY2UpOworCWRldl9wcml2ID0gZmVuY2UtPmRl dl9wcml2OworCWlmIChpcHZyX2ZlbmNlX3NpZ25hbGVkKGRldl9wcml2LCBmZW5jZS0+c2VxKSkg eworCQlJUFZSX0RFQlVHX0dFTkVSQUwoInNlcSAldSBpcyBhbHJlYWR5IHNpZ25hbGxlZCwgcmV0 dXJuIFBPTExJTiBpbW1lZGlhdGVseVxuIiwgZmVuY2UtPnNlcSk7CisJCXJldHVybiBQT0xMSU47 CisJfQorCUlQVlJfREVCVUdfR0VORVJBTCgic2VxICV1IGlzIG5vdCBzaWduYWxsZWQsIHdhaXQg Zm9yIGZlbmNlX3F1ZXVlIGF0ICVsdVxuIiwgZmVuY2UtPnNlcSwgamlmZmllcyk7CisJcG9sbF93 YWl0KGZpbGUsICZkZXZfcHJpdi0+ZmVuY2VfcXVldWUsIHdhaXQpOworCisJLyoKKwkgKiBNYWtl IHN1cmUgdGhhdCByZWFkcyB0byBmZW5jZS0+c3RhdHVzIGFyZSBvcmRlcmVkIHdpdGggdGhlCisJ ICogd2FpdCBxdWV1ZSBldmVudCB0cmlnZ2VyaW5nCisJICovCisJLyogc21wX3JtYigpOyAqLwor CUlQVlJfREVCVUdfR0VORVJBTCgic2VxICV1LCBmZW5jZV9xdWV1ZSBhd2FrZW4gdXAgYXQgJWx1 XG4iLCBmZW5jZS0+c2VxLCBqaWZmaWVzKTsKKworCWlmIChpcHZyX2ZlbmNlX3NpZ25hbGVkKGRl dl9wcml2LCBmZW5jZS0+c2VxKSkgeworCQlJUFZSX0RFQlVHX0dFTkVSQUwoInNlcSAldSBpcyBz aWduYWxsZWQgYWZ0ZXIgd2FpdGluZ1xuIiwgZmVuY2UtPnNlcSk7CisJCXJldHVybiBQT0xMSU47 CisJfQorCWVsc2UgeworCQlJUFZSX0RFQlVHX0dFTkVSQUwoInNlcSAldSBpcyBzdGlsbCBOT1Qg c2lnbmFsbGVkIGFmdGVyIHdhaXRpbmdcbiIsIGZlbmNlLT5zZXEpOworCQlyZXR1cm4gMDsKKwl9 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmggYi9kcml2 ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2ZlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNTQ4NDZkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L2lwdnJfZmVuY2UuaApAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlw dnJfZmVuY2UuaDogSVBWUiBoZWFkZXIgZmlsZSBmb3IgZmVuY2UgaGFuZGxpbmcKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQor ICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIg dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0 IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAor ICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5q aWFuZ0BpbnRlbC5jb20+CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+Cisg KgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUFZSX0ZFTkNFX0hfCisjZGVmaW5l IF9JUFZSX0ZFTkNFX0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorCisvKiBzZXFfYWZ0ZXIo YSxiKSByZXR1cm5zIHRydWUgaWYgdGhlIHNlcSBhIGlzIGFmdGVyIHNlcSBiLiovCisjZGVmaW5l IGlwdnJfc2VxX2FmdGVyKGEsYikgICAgIFwKKyAgICAodHlwZWNoZWNrKHVpbnQxNl90LCBhKSAm JiBcCisgICAgIHR5cGVjaGVjayh1aW50MTZfdCwgYikgJiYgXAorICAgICAoKGludDE2X3QpKGEg LSBiKSA+IDApKQorCisjZGVmaW5lIElQVlJfRkVOQ0VfSklGRklFU19USU1FT1VUCQkoSFogLyAy KQorLyogZmVuY2Ugc2VxIGFyZSBzZXQgdG8gdGhpcyBudW1iZXIgd2hlbiBzaWduYWxlZCAqLwor I2RlZmluZSBJUFZSX0ZFTkNFX1NJR05BTEVEX1NFUQkJMExMCisKK3N0cnVjdCBpcHZyX2ZlbmNl IHsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZQkJKmRldl9wcml2OworCXN0cnVjdCBrcmVmCQkJ a3JlZjsKKwkvKiBwcm90ZWN0ZWQgYnkgZGV2X3ByaXYtPmZlbmNlX2Rydi5mZW5jZV9sb2NrICov CisJdWludDE2X3QJCQlzZXE7CisJLyogZmllbGRzIGZvciB1c3JmZW5jZSAqLworCXN0cnVjdCBm aWxlCQkJKmZpbGU7CisJY2hhcgkJCQluYW1lWzMyXTsKK307CisKK2ludDMyX3QgaXB2cl9mZW5j ZV93YWl0KHN0cnVjdCBpcHZyX2ZlbmNlICpmZW5jZSwgYm9vbCBpbnRyLCBib29sIG5vX3dhaXQp OworCit2b2lkIGlwdnJfZmVuY2VfcHJvY2VzcyhzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYsCisJCQkgdWludDE2X3Qgc2VxLCB1aW50OF90IGVycik7CisKK3ZvaWQgaXB2cl9mZW5j ZV9kcml2ZXJfaW5pdChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpOworCit2b2lk IGlwdnJfZmVuY2VfZHJpdmVyX2Zpbmkoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 KTsKKworaW50MzJfdCBpcHZyX2ZlbmNlX2NyZWF0ZShzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYsCisJCQlzdHJ1Y3QgaXB2cl9mZW5jZSAqKmZlbmNlLCBpbnQgKmZlbmNlX2ZkKTsK Kwordm9pZAoraXB2cl9mZW5jZV9idWZmZXJfb2JqZWN0cyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0 LCBzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UsIGludCBmZW5jZV9mZCk7CisKK3ZvaWQgaXB2cl9m ZW5jZV91bnJlZihzdHJ1Y3QgaXB2cl9mZW5jZSAqKmZlbmNlKTsKKworI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2lw dnIvaXB2cl9nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODhlMzY5 Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uYwpAQCAt MCwwICsxLDI0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX2dlbS5jOiBJUFZSIGhv b2sgZmlsZSBmb3IgZ2VtIGlvY3RscworICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBD b3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5r bGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICog QXV0aG9yczoKKyAqICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlh byBDaGVuZyA8eWFvLmNoZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK KyNpbmNsdWRlICJpcHZyX2dlbS5oIgorI2luY2x1ZGUgImlwdnJfYnVmZmVyLmgiCisjaW5jbHVk ZSAiaXB2cl9mZW5jZS5oIgorI2luY2x1ZGUgImlwdnJfZXhlYy5oIgorI2luY2x1ZGUgImlwdnJf dHJhY2UuaCIKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5o PgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNp bmNsdWRlIDxkcm1fZ2VtLmg+CisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbW0gb2JqZWN0IGFuZCBy ZXR1cm5zIGEgaGFuZGxlIHRvIGl0LgorICovCitpbnQzMl90IGlwdnJfZ2VtX2NyZWF0ZV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAorCQkJCXN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faXB2cl9nZW1fY3JlYXRlICphcmdzID0gZGF0 YTsKKwlpZiAoYXJncy0+Y2FjaGVfbGV2ZWwgPj0gSVBWUl9DQUNIRV9NQVgpCisJCXJldHVybiAt RUlOVkFMOworCXJldHVybiBpcHZyX2dlbV9jcmVhdGUoZmlsZV9wcml2LCBkZXYsIGFyZ3MtPnNp emUsIGFyZ3MtPnRpbGluZywKKwkJCSAgICAgIGFyZ3MtPmNhY2hlX2xldmVsLCAmYXJncy0+cm91 bmRlZF9zaXplLAorCQkJICAgICAgJmFyZ3MtPmhhbmRsZSwgJmFyZ3MtPmdwdV9vZmZzZXQpOwor fQorCitpbnQzMl90IGlwdnJfZ2VtX2J1c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg dm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3Qg ZHJtX2lwdnJfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBkcm1faXB2cl9nZW1fb2Jq ZWN0ICpvYmo7CisJaW50MzJfdCByZXQgPSAwOworCisJb2JqID0gdG9faXB2cl9ibyhkcm1fZ2Vt X29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIGFyZ3MtPmhhbmRsZSkpOworCWlmICghb2Jq IHx8ICZvYmotPmJhc2UgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJSVBWUl9E RUJVR19HRU5FUkFMKCJDaGVja2luZyBibyAlcCAoZmVuY2UgJXAgc2VxICV1KSBidXN5IHN0YXR1 c1xuIiwKKyAgICAgICAgb2JqLCBvYmotPmZlbmNlLCAoKG9iai0+ZmVuY2UpPyBvYmotPmZlbmNl LT5zZXE6IDApKTsKKworCXJldCA9IGlwdnJfYm9fcmVzZXJ2ZShvYmosIHRydWUsIGZhbHNlKTsK KwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dDsKKwlyZXQgPSBpcHZyX2ZlbmNl X3dhaXQob2JqLT5mZW5jZSwgdHJ1ZSwgdHJ1ZSk7CisJaXB2cl9ib191bnJlc2VydmUob2JqKTsK KworICAgIGFyZ3MtPmJ1c3kgPSByZXQ/IDE6IDA7CitvdXQ6CisJZHJtX2dlbV9vYmplY3RfdW5y ZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJcmV0dXJuIHJldDsKK30KKworaW50MzJfdCBpcHZyX2dl bV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX2dlbV9tbWFwICph cmdzID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07 CisJdWludDE2X3Qgc2lnbmFsZWRfc2VxLCBzZXE7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUg KmRldl9wcml2ID0gKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlKilkZXYtPmRldl9wcml2YXRlOwor CWludDMyX3QgcmV0ID0gMDsKKwlJUFZSX0RFQlVHX0VOVFJZKCJtbWFwIGlzIGNhbGxlZCBvbiBo YW5kbGUgJXUgb2Zmc2V0IDB4JWxseCBzaXplICVsbHUuXG4iLAorICAgICAgICBhcmdzLT5oYW5k bGUsIGFyZ3MtPm9mZnNldCwgYXJncy0+c2l6ZSk7CisKKwlvYmogPSB0b19pcHZyX2JvKGRybV9n ZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKSk7CisJaWYgKCFv YmopIHsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYg KHVubGlrZWx5KG9iai0+ZmVuY2UpKSB7CisJCXNpZ25hbGVkX3NlcSA9IGF0b21pY19yZWFkKCZk ZXZfcHJpdi0+ZmVuY2VfZHJ2LnNpZ25hbGVkX3NlcSk7CisJCXNlcSA9IG9iai0+ZmVuY2UtPnNl cTsKKwkJaWYgKGlwdnJfc2VxX2FmdGVyKHNlcSwgc2lnbmFsZWRfc2VxKSkKKwkJCUlQVlJfREVC VUdfV0FSTigibW1hcGluZyBhbiBvYmogJWx4IHdoaWNoIGlzIGN1cnJlbnRseSBmZW5jZWQhISFc biIsCisJCQkJaXB2cl9nZW1fb2JqX21tdV9vZmZzZXQob2JqKSk7CisJfQorCisJLyogcHJpbWUg b2JqZWN0cyBoYXZlIG5vIGJhY2tpbmcgZmlscCB0byBHRU0gbW1hcAorCSAqIHBhZ2VzIGZyb20u CisJICovCisJaWYgKHVubGlrZWx5KCFvYmotPmJhc2UuZmlscCkpIHsKKwkJSVBWUl9FUlJPUigi aGFzIG5vIGJhY2tpbmcgZmxpcC5cbiIpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91 bmxvY2tlZCgmb2JqLT5iYXNlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbmVlZCBh c3N1bWUgbW1hcCBzaXplIGlzIHNhbWUgYXMgYm8gc2l6ZSAqLworCWlmIChvYmotPm1tYXBfYmFz ZSA9PSAwKSB7CisJCW9iai0+bW1hcF9zaXplID0gYXJncy0+c2l6ZTsKKwkJb2JqLT5tbWFwX2Jh c2UgPSB2bV9tbWFwKG9iai0+YmFzZS5maWxwLCAwLCBhcmdzLT5zaXplLAorCQkJICAgICAgIFBS T1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisJCQkgICAgICAgYXJncy0+b2Zmc2V0 KTsKKwl9CisKKwlpZiAoSVNfRVJSKCh2b2lkICopb2JqLT5tbWFwX2Jhc2UpKSB7CisJCUlQVlJf RVJST1IoImFkZHIgaXMgbm90IGNvcnJlY3Q6ICVkLlxuIiwgKGludClvYmotPm1tYXBfYmFzZSk7 CisJCXJldCA9IG9iai0+bW1hcF9iYXNlOworCQlnb3RvIGVycjsKKwl9CisKKwl2bWEgPSBmaW5k X3ZtYShtbSwgb2JqLT5tbWFwX2Jhc2UpOworCWlmICghdm1hIHx8IHZtYS0+dm1fc3RhcnQgPiBv YmotPm1tYXBfYmFzZSB8fAorCSAgICBvYmotPm1tYXBfYmFzZSArIG9iai0+bW1hcF9zaXplID4g dm1hLT52bV9lbmQpIHsKKwkJSVBWUl9FUlJPUigiZmFpbGVkIHRvIGZpbmQgdGhlIHZtYS5cbiIp OworCQlyZXQgPSAtRUZBVUxUOworCX0KKworCWlmIChvYmotPmNhY2hlX2xldmVsID09IElQVlJf Q0FDSEVfTk9ORSkgeworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1h LT52bV9wYWdlX3Byb3QpOworCX0gZWxzZSBpZiAob2JqLT5jYWNoZV9sZXZlbCA9PSBJUFZSX0NB Q0hFX1dDKSB7CisJCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEt PnZtX3BhZ2VfcHJvdCk7CisJfQorCWFyZ3MtPmFkZHJfcHRyID0gb2JqLT5tbWFwX2Jhc2U7CisJ SVBWUl9ERUJVR19HRU5FUkFMKCJtbWFwIGdvdCAlcC5cbiIsICh2b2lkKilhcmdzLT5hZGRyX3B0 cik7CisJdHJhY2VfaXB2cl9nZW1fbW1hcChvYmosIG9iai0+bW1hcF9iYXNlKTsKK2VycjoKKwlk cm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKKwlyZXR1cm4g cmV0OworfQorCitpbnQzMl90IGlwdnJfc3luY19jcHVfZ3JhYihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50MzJfdCBy ZXQgPSAwOworCXJldCA9IGlwdnJfYm9fcmVzZXJ2ZShvYmosIHRydWUsIGZhbHNlKTsKKwlpZiAo dW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dDsKKwlyZXQgPSBpcHZyX2ZlbmNlX3dhaXQo b2JqLT5mZW5jZSwgdHJ1ZSwgZmFsc2UpOworCWlmIChsaWtlbHkocmV0ID09IDApKQorCQlhdG9t aWNfaW5jKCZvYmotPmNwdV93cml0ZXJzKTsKKwllbHNlCisJCUlQVlJfREVCVUdfV0FSTigiRmFp bGVkIHRvIGNhbGwgaXB2cl9mZW5jZV93YWl0LlxuIik7CisJaXB2cl9ib191bnJlc2VydmUob2Jq KTsKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwlyZXR1 cm4gcmV0OworfQoraW50MzJfdCBpcHZyX3N5bmNfY3B1X3JlbGVhc2Uoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwKKwkJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKQoreworCWlwdnJf Z2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwgZmFsc2UpOworCWF0b21pY19kZWMoJm9iai0+Y3B1X3dy aXRlcnMpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCXJldHVy biAwOworfQoraW50MzJfdCBpcHZyX3N5bmNfY3B1X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3Ry dWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgZHJtX2lwdnJfc3luY19jcHUg KmFyZ3MgPSBkYXRhOworCisJSVBWUl9ERUJVR19FTlRSWSgiZW50ZXJcbiIpOworCW9iaiA9IHRv X2lwdnJfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCBhcmdzLT5oYW5k bGUpKTsKKwlpZiAoJm9iai0+YmFzZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN3 aXRjaCAoYXJncy0+b3ApIHsKKwljYXNlIElQVlJfU1lOQ0NQVV9PUF9HUkFCOgorCQlyZXR1cm4g aXB2cl9zeW5jX2NwdV9ncmFiKGRldiwgb2JqKTsKKwljYXNlIElQVlJfU1lOQ0NQVV9PUF9SRUxF QVNFOgorCQlyZXR1cm4gaXB2cl9zeW5jX2NwdV9yZWxlYXNlKGRldiwgb2JqKTsKKwlkZWZhdWx0 OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qKgorICogaXB2cl9nZW1fd2FpdF9pb2N0 bCAtIGltcGxlbWVudHMgRFJNX0lPQ1RMX0lQVlJfR0VNX1dBSVQKKyAqIEBEUk1fSU9DVExfQVJH Uzogc3RhbmRhcmQgaW9jdGwgYXJndW1lbnRzCisgKgorICogUmV0dXJucyAwIGlmIHN1Y2Nlc3Nm dWwsIGVsc2UgYW4gZXJyb3IgaXMgcmV0dXJuZWQgd2l0aCB0aGUgcmVtYWluaW5nIHRpbWUgaW4K KyAqIHRoZSB0aW1lb3V0IHBhcmFtZXRlci4KKyAqICAtRVRJTUU6IG9iamVjdCBpcyBzdGlsbCBi dXN5IGFmdGVyIHRpbWVvdXQKKyAqICAtRVJFU1RBUlRTWVM6IHNpZ25hbCBpbnRlcnJ1cHRlZCB0 aGUgd2FpdAorICogIC1FTk9ORU5UOiBvYmplY3QgZG9lc24ndCBleGlzdAorICogQWxzbyBwb3Nz aWJsZSwgYnV0IHJhcmU6CisgKiAgLUVBR0FJTjogR1BVIHdlZGdlZAorICogIC1FTk9NRU06IGRh bW4KKyAqICAtRU5PREVWOiBJbnRlcm5hbCBJUlEgZmFpbAorICogIC1FPzogVGhlIGFkZCByZXF1 ZXN0IGZhaWxlZAorICoKKyAqIFRoZSB3YWl0IGlvY3RsIHdpdGggYSB0aW1lb3V0IG9mIDAgcmVp bXBsZW1lbnRzIHRoZSBidXN5IGlvY3RsLiBXaXRoIGFueQorICogbm9uLXplcm8gdGltZW91dCBw YXJhbWV0ZXIgdGhlIHdhaXQgaW9jdGwgd2lsbCB3YWl0IGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9m CisgKiBuYW5vc2Vjb25kcyBvbiBhbiBvYmplY3QgYmVjb21pbmcgdW5idXN5LiBTaW5jZSB0aGUg d2FpdCBpdHNlbGYgZG9lcyBzbworICogd2l0aG91dCBob2xkaW5nIHN0cnVjdF9tdXRleCB0aGUg b2JqZWN0IG1heSBiZWNvbWUgcmUtYnVzaWVkIGJlZm9yZSB0aGlzCisgKiBmdW5jdGlvbiBjb21w bGV0ZXMuIEEgc2ltaWxhciBidXQgc2hvcnRlciAqIHJhY2UgY29uZGl0aW9uIGV4aXN0cyBpbiB0 aGUgYnVzeQorICogaW9jdGwKKyAqLworaW50MzJfdCBpcHZyX2dlbV93YWl0X2lvY3RsKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYpCit7CisJc3RydWN0IGRybV9pcHZyX2dlbV93YWl0ICphcmdzID0gZGF0YTsKKwlzdHJ1 Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqOworCWludDMyX3QgcmV0ID0gMDsKKworCUlQVlJf REVCVUdfRU5UUlkoIndhaXQgJWQgYnVmZmVyIHRvIGZpbmlzaCBleGVjdXRpb24uXG4iLCBhcmdz LT5oYW5kbGUpOworCW9iaiA9IHRvX2lwdnJfYm8oZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwg ZmlsZV9wcml2LCBhcmdzLT5oYW5kbGUpKTsKKwlpZiAoJm9iai0+YmFzZSA9PSBOVUxMKSB7CisJ CXJldHVybiAtRU5PRU5UOworCX0KKworCXJldCA9IGlwdnJfYm9fcmVzZXJ2ZShvYmosIHRydWUs IGZhbHNlKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dDsKKworCXRyYWNl X2lwdnJfZ2VtX3dhaXRfaW9jdGwob2JqKTsKKwlyZXQgPSBpcHZyX2ZlbmNlX3dhaXQob2JqLT5m ZW5jZSwgdHJ1ZSwgZmFsc2UpOworCisJaXB2cl9ib191bnJlc2VydmUob2JqKTsKKworb3V0Ogor CWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZvYmotPmJhc2UpOworCXJldHVybiByZXQ7Cit9 CisKK2ludDMyX3QgaXB2cl9nZW1fdXNlcnB0cl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVj dCBkcm1faXB2cl9nZW1fdXNlcnB0ciAqYXJncyA9IGRhdGE7CisJcmV0dXJuIGlwdnJfZ2VtX3Vz ZXJwdHIoZmlsZV9wcml2LCBkZXYsIGFyZ3MtPnVzZXJfcHRyLAorCQkJCWFyZ3MtPnVzZXJfc2l6 ZSwgYXJncy0+Y2FjaGVfbGV2ZWwsIGFyZ3MtPnRpbGluZywKKwkJCQkmYXJncy0+aGFuZGxlLCAm YXJncy0+Z3B1X29mZnNldCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9p cHZyX2dlbS5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTdiNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2lwdnIvaXB2cl9nZW0uaApAQCAtMCwwICsxLDY2IEBACisvKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioKKyAqIGlwdnJfZ2VtLmg6IElQVlIgaGVhZGVyIGZpbGUgZm9yIEdFTSBpb2N0bHMKKyAq CisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1Is IFVTQQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICog dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcg d2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcg PGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVm IF9JUFZSX0dFTV9IXworI2RlZmluZSBfSVBWUl9HRU1fSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2 LmgiCisKKy8qIGlwdnJfZ2VtLmMgKi8KK2ludDMyX3QgaXB2cl9nZW1fZXhlY2J1ZmZlcihzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmls ZV9wcml2KTsKKworaW50MzJfdCBpcHZyX2dlbV9waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CisKK2lu dDMyX3QgaXB2cl9nZW1fdW5waW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQl2 b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CisKK2ludDMyX3QgaXB2cl9n ZW1fYnVzeV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0 cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKKworaW50MzJfdCBpcHZyX2dlbV9jcmVhdGVfaW9j dGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2Zp bGUgKmZpbGVfcHJpdik7CisKK2ludDMyX3QgaXB2cl9nZW1fcHJlYWRfaW9jdGwoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dik7CisKK2ludDMyX3QgaXB2cl9nZW1fcHdyaXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworaW50MzJf dCBpcHZyX2dlbV9tbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworCitpbnQzMl90IGlwdnJfZ2VtX3Nl dF9kb21haW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQl2b2lkICpkYXRhLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CisKK2ludDMyX3QgaXB2cl9zeW5jX2NwdV9pb2N0 bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZV9wcml2KTsKKworaW50MzJfdCBpcHZyX2dlbV93YWl0X2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCisJCQkJdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp OworCitpbnQzMl90IGlwdnJfZ2VtX3VzZXJwdHJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKKwkJCQl2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CisKKyNlbmRp ZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9tbXUuYyBiL2RyaXZlcnMv Z3B1L2RybS9pcHZyL2lwdnJfbW11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uNGQ2ZjUzNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJf bW11LmMKQEAgLTAsMCArMSw4MDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXB2cl9tbXUu YzogSVBWUiBNTVUgaGFuZGxpbmcgdG8gc3VwcG9ydCBWRUQsIFZFQywgVlNQIGJ1ZmZlciBhY2Nl c3MKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9y bywgT1IsIFVTQQorICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGlt aXRlZCwgVUsKKyAqIENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwg Q2VkYXIgUGFyaywgVGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAq ICAgIEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKyNpbmNsdWRlICJpcHZyX21tdS5oIgorCisvKgorICogQ29kZSBmb3IgdGhlIFZFRCBN TVUsIG1heWJlIGFsc28gZW5hYmxlZCBmb3IgVkVDL1ZTUAorICovCisKKy8qCisgKiBjbGZsdXNo IG9uIG9uZSBwcm9jZXNzb3Igb25seToKKyAqIGNsZmx1c2ggc2hvdWxkIGFwcGFyZW50bHkgZmx1 c2ggdGhlIGNhY2hlIGxpbmUgb24gYWxsIHByb2Nlc3NvcnMgaW4gYW4KKyAqIFNNUCBzeXN0ZW0u CisgKi8KKworLyoKKyAqIGttYXAgYXRvbWljOgorICogVXNhZ2Ugb2YgdGhlIHNsb3RzIG11c3Qg YmUgY29tcGxldGVseSBlbmNhcHN1bGF0ZWQgd2l0aGluIGEgc3BpbmxvY2ssIGFuZAorICogbm8g b3RoZXIgZnVuY3Rpb25zIHRoYXQgbWF5IGJlIHVzaW5nIHRoZSBsb2NrcyBmb3Igb3RoZXIgcHVy cG9zZWQgbWF5IGJlCisgKiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGxvY2tlZCByZWdpb24uCisg KiBTaW5jZSB0aGUgc2xvdHMgYXJlIHBlciBwcm9jZXNzb3IsIHRoaXMgd2lsbCBndWFyYW50ZWUg dGhhdCB3ZSBhcmUgdGhlIG9ubHkKKyAqIHVzZXIuCisgKi8KKworc3RhdGljIGlubGluZSB1aW50 MzJfdCBpcHZyX21tdV9wdF9pbmRleCh1aW50MzJfdCBvZmZzZXQpCit7CisJcmV0dXJuIChvZmZz ZXQgPj4gSVBWUl9QVEVfU0hJRlQpICYgMHgzRkY7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMy X3QgaXB2cl9tbXVfcGRfaW5kZXgodWludDMyX3Qgb2Zmc2V0KQoreworCXJldHVybiBvZmZzZXQg Pj4gSVBWUl9QREVfU0hJRlQ7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCitzdGF0aWMg aW5saW5lIHZvaWQgaXB2cl9jbGZsdXNoKHZvaWQgKmFkZHIpCit7CisJX19hc21fXyBfX3ZvbGF0 aWxlX18oImNsZmx1c2ggKCUwKVxuIiA6IDogInIiKGFkZHIpIDogIm1lbW9yeSIpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQKK2lwdnJfbW11X2NsZmx1c2goc3RydWN0IGlwdnJfbW11X2RyaXZl ciAqZHJpdmVyLCB2b2lkICphZGRyKQoreworCWlmICghZHJpdmVyLT5oYXNfY2xmbHVzaCkKKwkJ cmV0dXJuOworCisJbWIoKTsKKwlpcHZyX2NsZmx1c2goYWRkcik7CisJbWIoKTsKK30KKworc3Rh dGljIHZvaWQKK2lwdnJfbW11X3BhZ2VfY2xmbHVzaChzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpk cml2ZXIsIHN0cnVjdCBwYWdlKiBwYWdlKQoreworCXVpbnQzMl90IGNsZmx1c2hfYWRkID0gZHJp dmVyLT5jbGZsdXNoX2FkZCA+PiBQQUdFX1NISUZUOworCXVpbnQzMl90IGNsZmx1c2hfY291bnQg PSBQQUdFX1NJWkUgLyBjbGZsdXNoX2FkZDsKKwlpbnQgaTsKKwl1aW50OF90ICpjbGY7CisKKwlj bGYgPSBrbWFwX2F0b21pYyhwYWdlKTsKKworCW1iKCk7CisJZm9yIChpID0gMDsgaSA8IGNsZmx1 c2hfY291bnQ7ICsraSkgeworCQlpcHZyX2NsZmx1c2goY2xmKTsKKwkJY2xmICs9IGNsZmx1c2hf YWRkOworCX0KKwltYigpOworCisJa3VubWFwX2F0b21pYyhjbGYpOworfQorCitzdGF0aWMgdm9p ZCBpcHZyX21tdV9wYWdlc19jbGZsdXNoKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciwK KwkJCQlzdHJ1Y3QgcGFnZSAqcGFnZVtdLCB1bnNpZ25lZCBsb25nIG51bV9wYWdlcykKK3sKKwlp bnQgaTsKKworCWlmICghZHJpdmVyLT5oYXNfY2xmbHVzaCkKKwkJcmV0dXJuIDsKKworCWZvciAo aSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJaXB2cl9tbXVfcGFnZV9jbGZsdXNoKGRyaXZl ciwgKnBhZ2UrKyk7Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2lwdnJfbW11X2Ns Zmx1c2goc3RydWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyLCB2b2lkICphZGRyKQoreworCTsK K30KKworc3RhdGljIHZvaWQgaXB2cl9tbXVfcGFnZXNfY2xmbHVzaChzdHJ1Y3QgaXB2cl9tbXVf ZHJpdmVyICpkcml2ZXIsCisJCQkJc3RydWN0IHBhZ2UgKnBhZ2VbXSwgdW5zaWduZWQgbG9uZyBu dW1fcGFnZXMpCit7CisJcHJpbnRrKCJEdW15IGlwdnJfbW11X3BhZ2VzX2NsZmx1c2hcbiIpOwor fQorCisjZW5kaWYKKworc3RhdGljIHZvaWQKK2lwdnJfbW11X2ZsdXNoX3BkX2xvY2tlZChzdHJ1 Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2ZXIsIGludDMyX3QgZm9yY2UpCit7CisJaWYgKGF0b21p Y19yZWFkKCZkcml2ZXItPm5lZWRzX3RsYmZsdXNoKSB8fCBmb3JjZSkgeworCQlpZiAoIWRyaXZl ci0+ZGV2X3ByaXYpCisJCQlnb3RvIG91dDsKKworCQlhdG9taWNfc2V0KAorCQkJJmRyaXZlci0+ ZGV2X3ByaXYtPmlwdnJfbW11X2ludmFsZGMsCisJCQkxKTsKKworCX0KK291dDoKKwlhdG9taWNf c2V0KCZkcml2ZXItPm5lZWRzX3RsYmZsdXNoLCAwKTsKK30KKwordm9pZCBpcHZyX21tdV9mbHVz aChzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2ZXIsIGludDMyX3QgcmNfcHJvdCkKK3sKKwlp ZiAocmNfcHJvdCkKKwkJZG93bl93cml0ZSgmZHJpdmVyLT5zZW0pOworCisJaWYgKCFkcml2ZXIt PmRldl9wcml2KQorCQlnb3RvIG91dDsKKworCWF0b21pY19zZXQoJmRyaXZlci0+ZGV2X3ByaXYt PmlwdnJfbW11X2ludmFsZGMsIDEpOworCitvdXQ6CisJaWYgKHJjX3Byb3QpCisJCXVwX3dyaXRl KCZkcml2ZXItPnNlbSk7Cit9CisKK3ZvaWQgaXB2cl9tbXVfc2V0X3BkX2NvbnRleHQoc3RydWN0 IGlwdnJfbW11X3BkICpwZCwgaW50MzJfdCBod19jb250ZXh0KQoreworCS8qdHRtX3R0X2NhY2hl X2ZsdXNoKCZwZC0+cCwgMSk7Ki8KKwlpcHZyX21tdV9wYWdlc19jbGZsdXNoKHBkLT5kcml2ZXIs ICZwZC0+cCwgMSk7CisJZG93bl93cml0ZSgmcGQtPmRyaXZlci0+c2VtKTsKKwl3bWIoKTsKKwlp cHZyX21tdV9mbHVzaF9wZF9sb2NrZWQocGQtPmRyaXZlciwgMSk7CisJcGQtPmh3X2NvbnRleHQg PSBod19jb250ZXh0OworCXVwX3dyaXRlKCZwZC0+ZHJpdmVyLT5zZW0pOworCit9CisKK3N0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZworaXB2cl9wZF9hZGRyX2VuZCh1bnNpZ25lZCBsb25nIGFk ZHIsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCisJYWRkciA9IChhZGRyICsgSVBWUl9QREVfTUFT SyArIDEpICYgfklQVlJfUERFX01BU0s7CisJcmV0dXJuIChhZGRyIDwgZW5kKSA/IGFkZHIgOiBl bmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaXB2cl9tbXVfbWFza19wdGUodWludDMy X3QgcGZuLCBpbnQzMl90IHR5cGUpCit7CisJdWludDMyX3QgbWFzayA9IElQVlJfUFRFX1ZBTElE OworCisJaWYgKHR5cGUgJiBJUFZSX01NVV9DQUNIRURfTUVNT1JZKQorCQltYXNrIHw9IElQVlJf UFRFX0NBQ0hFRDsKKwlpZiAodHlwZSAmIElQVlJfTU1VX1JPX01FTU9SWSkKKwkJbWFzayB8PSBJ UFZSX1BURV9STzsKKwlpZiAodHlwZSAmIElQVlJfTU1VX1dPX01FTU9SWSkKKwkJbWFzayB8PSBJ UFZSX1BURV9XTzsKKworCXJldHVybiAocGZuIDw8IFBBR0VfU0hJRlQpIHwgbWFzazsKK30KKwor c3RydWN0IGlwdnJfbW11X3BkICppcHZyX21tdV9hbGxvY19wZChzdHJ1Y3QgaXB2cl9tbXVfZHJp dmVyICpkcml2ZXIsCisJCQkJaW50MzJfdCB0cmFwX3BhZ2VmYXVsdHMsIGludDMyX3QgaW52YWxp ZF90eXBlKQoreworCXN0cnVjdCBpcHZyX21tdV9wZCAqcGQgPSBrbWFsbG9jKHNpemVvZigqcGQp LCBHRlBfS0VSTkVMKTsKKwl1aW50MzJfdCAqdjsKKwlpbnQzMl90IGk7CisKKwlpZiAoIXBkKQor CQlyZXR1cm4gTlVMTDsKKworCXBkLT5wID0gYWxsb2NfcGFnZShHRlBfRE1BMzIpOworCWlmICgh cGQtPnApCisJCWdvdG8gb3V0X2VycjE7CisJcGQtPmR1bW15X3B0ID0gYWxsb2NfcGFnZShHRlBf RE1BMzIpOworCWlmICghcGQtPmR1bW15X3B0KQorCQlnb3RvIG91dF9lcnIyOworCXBkLT5kdW1t eV9wYWdlID0gYWxsb2NfcGFnZShHRlBfRE1BMzIpOworCWlmICghcGQtPmR1bW15X3BhZ2UpCisJ CWdvdG8gb3V0X2VycjM7CisKKwlpZiAoIXRyYXBfcGFnZWZhdWx0cykgeworCQlwZC0+aW52YWxp ZF9wZGUgPQorCQkJaXB2cl9tbXVfbWFza19wdGUocGFnZV90b19wZm4ocGQtPmR1bW15X3B0KSwK KwkJCQkJIGludmFsaWRfdHlwZSk7CisJCXBkLT5pbnZhbGlkX3B0ZSA9CisJCQlpcHZyX21tdV9t YXNrX3B0ZShwYWdlX3RvX3BmbihwZC0+ZHVtbXlfcGFnZSksCisJCQkJCSBpbnZhbGlkX3R5cGUp OworCX0gZWxzZSB7CisJCXBkLT5pbnZhbGlkX3BkZSA9IDA7CisJCXBkLT5pbnZhbGlkX3B0ZSA9 IDA7CisJfQorCisJdiA9IGttYXAocGQtPmR1bW15X3B0KTsKKwlpZiAoIXYpCisJCWdvdG8gb3V0 X2VycjQ7CisJZm9yIChpID0gMDsgaSA8IChQQUdFX1NJWkUgLyBzaXplb2YodWludDMyX3QpKTsg KytpKQorCQl2W2ldID0gcGQtPmludmFsaWRfcHRlOworCisJa3VubWFwKHBkLT5kdW1teV9wdCk7 CisKKwl2ID0ga21hcChwZC0+cCk7CisJaWYgKCF2KQorCQlnb3RvIG91dF9lcnI0OworCWZvciAo aSA9IDA7IGkgPCAoUEFHRV9TSVpFIC8gc2l6ZW9mKHVpbnQzMl90KSk7ICsraSkKKwkJdltpXSA9 IHBkLT5pbnZhbGlkX3BkZTsKKworCWt1bm1hcChwZC0+cCk7CisKKwl2ID0ga21hcChwZC0+ZHVt bXlfcGFnZSk7CisJaWYgKCF2KQorCQlnb3RvIG91dF9lcnI0OworCWNsZWFyX3BhZ2Uodik7CisJ a3VubWFwKHBkLT5kdW1teV9wYWdlKTsKKworCXBkLT50YWJsZXMgPSB2bWFsbG9jX3VzZXIoc2l6 ZW9mKHN0cnVjdCBpcHZyX21tdV9wdCAqKSAqIDEwMjQpOworCWlmICghcGQtPnRhYmxlcykKKwkJ Z290byBvdXRfZXJyNDsKKworCXBkLT5od19jb250ZXh0ID0gLTE7CisJcGQtPnBkX21hc2sgPSBJ UFZSX1BURV9WQUxJRDsKKwlwZC0+ZHJpdmVyID0gZHJpdmVyOworCisJcmV0dXJuIHBkOworCitv dXRfZXJyNDoKKwlfX2ZyZWVfcGFnZShwZC0+ZHVtbXlfcGFnZSk7CitvdXRfZXJyMzoKKwlfX2Zy ZWVfcGFnZShwZC0+ZHVtbXlfcHQpOworb3V0X2VycjI6CisJX19mcmVlX3BhZ2UocGQtPnApOwor b3V0X2VycjE6CisJa2ZyZWUocGQpOworCXJldHVybiBOVUxMOworfQorCit2b2lkIGlwdnJfbW11 X2ZyZWVfcHQoc3RydWN0IGlwdnJfbW11X3B0ICpwdCkKK3sKKwlfX2ZyZWVfcGFnZShwdC0+cCk7 CisJa2ZyZWUocHQpOworfQorCit2b2lkIGlwdnJfbW11X2ZyZWVfcGFnZWRpcihzdHJ1Y3QgaXB2 cl9tbXVfcGQgKnBkKQoreworCXN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlciA9IHBkLT5k cml2ZXI7CisJc3RydWN0IGlwdnJfbW11X3B0ICpwdDsKKwlpbnQzMl90IGk7CisKKwlkb3duX3dy aXRlKCZkcml2ZXItPnNlbSk7CisJaWYgKHBkLT5od19jb250ZXh0ICE9IC0xKQorCQlpcHZyX21t dV9mbHVzaF9wZF9sb2NrZWQoZHJpdmVyLCAxKTsKKworCS8qIFNob3VsZCB0YWtlIHRoZSBzcGlu bG9jayBoZXJlLCBidXQgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGF0CisJICAgc2luY2Ugd2UgaGF2 ZSB0aGUgc2VtYXBob3JlIGluIHdyaXRlIG1vZGUuICovCisKKwlmb3IgKGkgPSAwOyBpIDwgMTAy NDsgKytpKSB7CisJCXB0ID0gcGQtPnRhYmxlc1tpXTsKKwkJaWYgKHB0KQorCQkJaXB2cl9tbXVf ZnJlZV9wdChwdCk7CisJfQorCisJdmZyZWUocGQtPnRhYmxlcyk7CisJX19mcmVlX3BhZ2UocGQt PmR1bW15X3BhZ2UpOworCV9fZnJlZV9wYWdlKHBkLT5kdW1teV9wdCk7CisJX19mcmVlX3BhZ2Uo cGQtPnApOworCWtmcmVlKHBkKTsKKwl1cF93cml0ZSgmZHJpdmVyLT5zZW0pOworfQorCitzdGF0 aWMgc3RydWN0IGlwdnJfbW11X3B0ICppcHZyX21tdV9hbGxvY19wdChzdHJ1Y3QgaXB2cl9tbXVf cGQgKnBkKQoreworCXN0cnVjdCBpcHZyX21tdV9wdCAqcHQgPSBrbWFsbG9jKHNpemVvZigqcHQp LCBHRlBfS0VSTkVMKTsKKwl2b2lkICp2OworCXVpbnQzMl90IGNsZmx1c2hfYWRkID0gcGQtPmRy aXZlci0+Y2xmbHVzaF9hZGQgPj4gUEFHRV9TSElGVDsKKwl1aW50MzJfdCBjbGZsdXNoX2NvdW50 ID0gUEFHRV9TSVpFIC8gY2xmbHVzaF9hZGQ7CisJc3BpbmxvY2tfdCAqbG9jayA9ICZwZC0+ZHJp dmVyLT5sb2NrOworCXVpbnQ4X3QgKmNsZjsKKwl1aW50MzJfdCAqcHRlczsKKwlpbnQzMl90IGk7 CisKKwlpZiAoIXB0KQorCQlyZXR1cm4gTlVMTDsKKworCXB0LT5wID0gYWxsb2NfcGFnZShHRlBf RE1BMzIpOworCWlmICghcHQtPnApIHsKKwkJa2ZyZWUocHQpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlzcGluX2xvY2sobG9jayk7CisKKwl2ID0ga21hcF9hdG9taWMocHQtPnApOworCisJY2xm ID0gKHVpbnQ4X3QgKikgdjsKKwlwdGVzID0gKHVpbnQzMl90ICopIHY7CisJZm9yIChpID0gMDsg aSA8IChQQUdFX1NJWkUgLyBzaXplb2YodWludDMyX3QpKTsgKytpKQorCQkqcHRlcysrID0gcGQt PmludmFsaWRfcHRlOworCisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisJaWYgKHBkLT5kcml2 ZXItPmhhc19jbGZsdXNoICYmIHBkLT5od19jb250ZXh0ICE9IC0xKSB7CisJCW1iKCk7CisJCWZv ciAoaSA9IDA7IGkgPCBjbGZsdXNoX2NvdW50OyArK2kpIHsKKwkJCWlwdnJfY2xmbHVzaChjbGYp OworCQkJY2xmICs9IGNsZmx1c2hfYWRkOworCQl9CisJCW1iKCk7CisJfQorI2VuZGlmCisJa3Vu bWFwX2F0b21pYyh2KTsKKworCXNwaW5fdW5sb2NrKGxvY2spOworCisJcHQtPmNvdW50ID0gMDsK KwlwdC0+cGQgPSBwZDsKKwlwdC0+aW5kZXggPSAwOworCisJcmV0dXJuIHB0OworfQorCitzdHJ1 Y3QgaXB2cl9tbXVfcHQgKgoraXB2cl9tbXVfcHRfYWxsb2NfbWFwX2xvY2soc3RydWN0IGlwdnJf bW11X3BkICpwZCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVpbnQzMl90IGluZGV4ID0gaXB2 cl9tbXVfcGRfaW5kZXgoYWRkcik7CisJc3RydWN0IGlwdnJfbW11X3B0ICpwdDsKKwl1aW50MzJf dCAqdjsKKwlzcGlubG9ja190ICpsb2NrID0gJnBkLT5kcml2ZXItPmxvY2s7CisKKwlzcGluX2xv Y2sobG9jayk7CisJcHQgPSBwZC0+dGFibGVzW2luZGV4XTsKKwl3aGlsZSAoIXB0KSB7CisJCXNw aW5fdW5sb2NrKGxvY2spOworCQlwdCA9IGlwdnJfbW11X2FsbG9jX3B0KHBkKTsKKwkJaWYgKCFw dCkKKwkJCXJldHVybiBOVUxMOworCQlzcGluX2xvY2sobG9jayk7CisKKwkJaWYgKHBkLT50YWJs ZXNbaW5kZXhdKSB7CisJCQlzcGluX3VubG9jayhsb2NrKTsKKwkJCWlwdnJfbW11X2ZyZWVfcHQo cHQpOworCQkJc3Bpbl9sb2NrKGxvY2spOworCQkJcHQgPSBwZC0+dGFibGVzW2luZGV4XTsKKwkJ CWNvbnRpbnVlOworCQl9CisKKwkJdiA9IGttYXBfYXRvbWljKHBkLT5wKTsKKworCQlwZC0+dGFi bGVzW2luZGV4XSA9IHB0OworCQl2W2luZGV4XSA9IChwYWdlX3RvX3BmbihwdC0+cCkgPDwgMTIp IHwKKwkJCXBkLT5wZF9tYXNrOworCisKKwkJcHQtPmluZGV4ID0gaW5kZXg7CisKKwkJa3VubWFw X2F0b21pYygodm9pZCAqKSB2KTsKKworCQlpZiAocGQtPmh3X2NvbnRleHQgIT0gLTEpIHsKKwkJ CWlwdnJfbW11X2NsZmx1c2gocGQtPmRyaXZlciwgKHZvaWQgKikgJnZbaW5kZXhdKTsKKwkJCWF0 b21pY19zZXQoJnBkLT5kcml2ZXItPm5lZWRzX3RsYmZsdXNoLCAxKTsKKwkJfQorCX0KKworCXB0 LT52ID0ga21hcF9hdG9taWMocHQtPnApOworCisJcmV0dXJuIHB0OworfQorCitzdGF0aWMgc3Ry dWN0IGlwdnJfbW11X3B0ICoKK2lwdnJfbW11X3B0X21hcF9sb2NrKHN0cnVjdCBpcHZyX21tdV9w ZCAqcGQsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl1aW50MzJfdCBpbmRleCA9IGlwdnJfbW11 X3BkX2luZGV4KGFkZHIpOworCXN0cnVjdCBpcHZyX21tdV9wdCAqcHQ7CisJc3BpbmxvY2tfdCAq bG9jayA9ICZwZC0+ZHJpdmVyLT5sb2NrOworCisJc3Bpbl9sb2NrKGxvY2spOworCXB0ID0gcGQt PnRhYmxlc1tpbmRleF07CisJaWYgKCFwdCkgeworCQlzcGluX3VubG9jayhsb2NrKTsKKwkJcmV0 dXJuIE5VTEw7CisJfQorCisJcHQtPnYgPSBrbWFwX2F0b21pYyhwdC0+cCk7CisKKwlyZXR1cm4g cHQ7Cit9CisKK3N0YXRpYyB2b2lkIGlwdnJfbW11X3B0X3VubWFwX3VubG9jayhzdHJ1Y3QgaXB2 cl9tbXVfcHQgKnB0KQoreworCXN0cnVjdCBpcHZyX21tdV9wZCAqcGQgPSBwdC0+cGQ7CisJdWlu dDMyX3QgKnY7CisKKwlrdW5tYXBfYXRvbWljKHB0LT52KTsKKworCWlmIChwdC0+Y291bnQgPT0g MCkgeworCQl2ID0ga21hcF9hdG9taWMocGQtPnApOworCisJCXZbcHQtPmluZGV4XSA9IHBkLT5p bnZhbGlkX3BkZTsKKwkJcGQtPnRhYmxlc1twdC0+aW5kZXhdID0gTlVMTDsKKworCQlpZiAocGQt Pmh3X2NvbnRleHQgIT0gLTEpIHsKKwkJCWlwdnJfbW11X2NsZmx1c2gocGQtPmRyaXZlciwKKwkJ CQkJKHZvaWQgKikgJnZbcHQtPmluZGV4XSk7CisJCQlhdG9taWNfc2V0KCZwZC0+ZHJpdmVyLT5u ZWVkc190bGJmbHVzaCwgMSk7CisJCX0KKworCQlrdW5tYXBfYXRvbWljKHB0LT52KTsKKworCQlz cGluX3VubG9jaygmcGQtPmRyaXZlci0+bG9jayk7CisJCWlwdnJfbW11X2ZyZWVfcHQocHQpOwor CQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrKCZwZC0+ZHJpdmVyLT5sb2NrKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkCitpcHZyX21tdV9zZXRfcHRlKHN0cnVjdCBpcHZyX21tdV9wdCAqcHQs IHVuc2lnbmVkIGxvbmcgYWRkciwgdWludDMyX3QgcHRlKQoreworCXB0LT52W2lwdnJfbW11X3B0 X2luZGV4KGFkZHIpXSA9IHB0ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitpcHZyX21tdV9p bnZhbGlkYXRlX3B0ZShzdHJ1Y3QgaXB2cl9tbXVfcHQgKnB0LCB1bnNpZ25lZCBsb25nIGFkZHIp Cit7CisJcHQtPnZbaXB2cl9tbXVfcHRfaW5kZXgoYWRkcildID0gcHQtPnBkLT5pbnZhbGlkX3B0 ZTsKK30KKworc3RydWN0IGlwdnJfbW11X3BkICppcHZyX21tdV9nZXRfZGVmYXVsdF9wZChzdHJ1 Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2ZXIpCit7CisJc3RydWN0IGlwdnJfbW11X3BkICpwZDsK KworCS8qIGRvd25fcmVhZCgmZHJpdmVyLT5zZW0pOyAqLworCXBkID0gZHJpdmVyLT5kZWZhdWx0 X3BkOworCS8qIHVwX3JlYWQoJmRyaXZlci0+c2VtKTsgKi8KKworCXJldHVybiBwZDsKK30KKwor LyogUmV0dXJucyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgUEQgc2hhcmVkIGJ5IHNneC9t c3ZkeCAqLwordWludDMyX3QgaXB2cl9nZXRfZGVmYXVsdF9wZF9hZGRyKHN0cnVjdCBpcHZyX21t dV9kcml2ZXIgKmRyaXZlcikKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkOworCisJcGQgPSBp cHZyX21tdV9nZXRfZGVmYXVsdF9wZChkcml2ZXIpOworCXJldHVybiBwYWdlX3RvX3BmbihwZC0+ cCkgPDwgUEFHRV9TSElGVDsKK30KKwordm9pZCBpcHZyX21tdV9kcml2ZXJfdGFrZWRvd24oc3Ry dWN0IGlwdnJfbW11X2RyaXZlciAqZHJpdmVyKQoreworCWlwdnJfbW11X2ZyZWVfcGFnZWRpcihk cml2ZXItPmRlZmF1bHRfcGQpOworCWtmcmVlKGRyaXZlcik7Cit9CisKK3N0cnVjdCBpcHZyX21t dV9kcml2ZXIgKgoraXB2cl9tbXVfZHJpdmVyX2luaXQodWludDhfdCBfX2lvbWVtICogcmVnaXN0 ZXJzLCBpbnQzMl90IHRyYXBfcGFnZWZhdWx0cywKKwkJaW50MzJfdCBpbnZhbGlkX3R5cGUsIHN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwlzdHJ1Y3QgaXB2cl9tbXVfZHJp dmVyICpkcml2ZXI7CisKKwlkcml2ZXIgPSBrbWFsbG9jKHNpemVvZigqZHJpdmVyKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFkcml2ZXIpCisJCXJldHVybiBOVUxMOworCisJZHJpdmVyLT5kZXZfcHJp diA9IGRldl9wcml2OworCisJZHJpdmVyLT5kZWZhdWx0X3BkID0KKwkJaXB2cl9tbXVfYWxsb2Nf cGQoZHJpdmVyLCB0cmFwX3BhZ2VmYXVsdHMsIGludmFsaWRfdHlwZSk7CisJaWYgKCFkcml2ZXIt PmRlZmF1bHRfcGQpCisJCWdvdG8gb3V0X2VycjE7CisKKwlzcGluX2xvY2tfaW5pdCgmZHJpdmVy LT5sb2NrKTsKKwlpbml0X3J3c2VtKCZkcml2ZXItPnNlbSk7CisJZG93bl93cml0ZSgmZHJpdmVy LT5zZW0pOworCWRyaXZlci0+cmVnaXN0ZXJfbWFwID0gcmVnaXN0ZXJzOworCWF0b21pY19zZXQo JmRyaXZlci0+bmVlZHNfdGxiZmx1c2gsIDEpOworCisJZHJpdmVyLT5oYXNfY2xmbHVzaCA9IDA7 CisKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpCisJaWYgKGNwdV9oYXNfY2xmbHVzaCkgeworCQl1 aW50MzJfdCB0Zm1zLCBtaXNjLCBjYXAwLCBjYXA0LCBjbGZsdXNoX3NpemU7CisKKwkJLyoKKwkJ ICogY2xmbHVzaCBzaXplIGlzIGRldGVybWluZWQgYXQga2VybmVsIHNldHVwIGZvciB4ODZfNjQK KwkJICogIGJ1dCBub3QgZm9yIGkzODYuIFdlIGhhdmUgdG8gZG8gaXQgaGVyZS4KKwkJICovCisK KwkJY3B1aWQoMHgwMDAwMDAwMSwgJnRmbXMsICZtaXNjLCAmY2FwMCwgJmNhcDQpOworCQljbGZs dXNoX3NpemUgPSAoKG1pc2MgPj4gOCkgJiAweGZmKSAqIDg7CisJCWRyaXZlci0+aGFzX2NsZmx1 c2ggPSAxOworCQlkcml2ZXItPmNsZmx1c2hfYWRkID0KKwkJCVBBR0VfU0laRSAqIGNsZmx1c2hf c2l6ZSAvIHNpemVvZih1aW50MzJfdCk7CisJCWRyaXZlci0+Y2xmbHVzaF9tYXNrID0gZHJpdmVy LT5jbGZsdXNoX2FkZCAtIDE7CisJCWRyaXZlci0+Y2xmbHVzaF9tYXNrID0gfmRyaXZlci0+Y2xm bHVzaF9tYXNrOworCX0KKyNlbmRpZgorCisJdXBfd3JpdGUoJmRyaXZlci0+c2VtKTsKKwlyZXR1 cm4gZHJpdmVyOworCitvdXRfZXJyMToKKwlrZnJlZShkcml2ZXIpOworCXJldHVybiBOVUxMOwor fQorCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KQorc3RhdGljIHZvaWQgaXB2cl9tbXVfZmx1c2hf cHRlcyhzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3Ms CisJCQkJCXVpbnQzMl90IG51bV9wYWdlcywKKwkJCQkJdWludDMyX3QgZGVzaXJlZF90aWxlX3N0 cmlkZSwKKwkJCQkJdWludDMyX3QgaHdfdGlsZV9zdHJpZGUpCit7CisJc3RydWN0IGlwdnJfbW11 X3B0ICpwdDsKKwl1aW50MzJfdCByb3dzID0gMTsKKwl1aW50MzJfdCBpOworCXVuc2lnbmVkIGxv bmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5z aWduZWQgbG9uZyBhZGQ7CisJdW5zaWduZWQgbG9uZyByb3dfYWRkOworCXVuc2lnbmVkIGxvbmcg Y2xmbHVzaF9hZGQgPSBwZC0+ZHJpdmVyLT5jbGZsdXNoX2FkZDsKKwl1bnNpZ25lZCBsb25nIGNs Zmx1c2hfbWFzayA9IHBkLT5kcml2ZXItPmNsZmx1c2hfbWFzazsKKwlJUFZSX0RFQlVHX0dFTkVS QUwoImNhbGwgeDg2IGlwdnJfbW11X2ZsdXNoX3B0ZXMsIGFkZHJlc3MgaXMgMHglbHgsICIKKwkJ CSJudW0gcGFnZXMgaXMgJWQuXG4iLCBhZGRyZXNzLCBudW1fcGFnZXMpOworCWlmICghcGQtPmRy aXZlci0+aGFzX2NsZmx1c2gpIHsKKwkJSVBWUl9ERUJVR19HRU5FUkFMKCJjYWxsIGlwdnJfbW11 X3BhZ2VzX2NsZmx1c2guXG4iKTsKKwkJaXB2cl9tbXVfcGFnZXNfY2xmbHVzaChwZC0+ZHJpdmVy LCAmcGQtPnAsIG51bV9wYWdlcyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaHdfdGlsZV9zdHJp ZGUpCisJCXJvd3MgPSBudW1fcGFnZXMgLyBkZXNpcmVkX3RpbGVfc3RyaWRlOworCWVsc2UKKwkJ ZGVzaXJlZF90aWxlX3N0cmlkZSA9IG51bV9wYWdlczsKKworCWFkZCA9IGRlc2lyZWRfdGlsZV9z dHJpZGUgPDwgUEFHRV9TSElGVDsKKwlyb3dfYWRkID0gaHdfdGlsZV9zdHJpZGUgPDwgUEFHRV9T SElGVDsKKwltYigpOworCWZvciAoaSA9IDA7IGkgPCByb3dzOyArK2kpIHsKKwkJYWRkciA9IGFk ZHJlc3M7CisJCWVuZCA9IGFkZHIgKyBhZGQ7CisKKwkJZG8geworCQkJbmV4dCA9IGlwdnJfcGRf YWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJCXB0ID0gaXB2cl9tbXVfcHRfbWFwX2xvY2socGQsIGFk ZHIpOworCQkJaWYgKCFwdCkKKwkJCQljb250aW51ZTsKKwkJCWRvIHsKKwkJCQlpcHZyX2NsZmx1 c2goJnB0LT52CisJCQkJCSAgICBbaXB2cl9tbXVfcHRfaW5kZXgoYWRkcildKTsKKwkJCX0gd2hp bGUgKGFkZHIgKz0KKwkJCQkJIGNsZmx1c2hfYWRkLAorCQkJCSAoYWRkciAmIGNsZmx1c2hfbWFz aykgPCBuZXh0KTsKKworCQkJaXB2cl9tbXVfcHRfdW5tYXBfdW5sb2NrKHB0KTsKKwkJfSB3aGls ZSAoYWRkciA9IG5leHQsIG5leHQgIT0gZW5kKTsKKwkJYWRkcmVzcyArPSByb3dfYWRkOworCX0K KwltYigpOworfQorI2Vsc2UKKworc3RhdGljIHZvaWQgaXB2cl9tbXVfZmx1c2hfcHRlcyhzdHJ1 Y3QgaXB2cl9tbXVfcGQgKnBkLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJCXVp bnQzMl90IG51bV9wYWdlcywKKwkJCQkJdWludDMyX3QgZGVzaXJlZF90aWxlX3N0cmlkZSwKKwkJ CQkJdWludDMyX3QgaHdfdGlsZV9zdHJpZGUpCit7CisJSVBWUl9ERUJVR19HRU5FUkFMKCJjYWxs IG5vbi14ODYgaXB2cl9tbXVfZmx1c2hfcHRlcy5cbiIpOworfQorI2VuZGlmCisKK3ZvaWQgaXB2 cl9tbXVfcmVtb3ZlX3Bmbl9zZXF1ZW5jZShzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkLAorCQkJCQkJ dW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJCQkJdWludDMyX3QgbnVtX3BhZ2VzKQoreworCXN0 cnVjdCBpcHZyX21tdV9wdCAqcHQ7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxv bmcgZW5kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZfYWRkcmVzcyA9 IGFkZHJlc3M7CisKKwlkb3duX3JlYWQoJnBkLT5kcml2ZXItPnNlbSk7CisKKwlhZGRyID0gYWRk cmVzczsKKwllbmQgPSBhZGRyICsgKG51bV9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKworCWRvIHsK KwkJbmV4dCA9IGlwdnJfcGRfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJcHQgPSBpcHZyX21tdV9w dF9hbGxvY19tYXBfbG9jayhwZCwgYWRkcik7CisJCWlmICghcHQpCisJCQlnb3RvIG91dDsKKwkJ ZG8geworCQkJaXB2cl9tbXVfaW52YWxpZGF0ZV9wdGUocHQsIGFkZHIpOworCQkJLS1wdC0+Y291 bnQ7CisJCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyIDwgbmV4dCk7CisJCWlwdnJf bW11X3B0X3VubWFwX3VubG9jayhwdCk7CisKKwl9IHdoaWxlIChhZGRyID0gbmV4dCwgbmV4dCAh PSBlbmQpOworCitvdXQ6CisJaWYgKHBkLT5od19jb250ZXh0ICE9IC0xKQorCQlpcHZyX21tdV9m bHVzaF9wdGVzKHBkLCBmX2FkZHJlc3MsIG51bV9wYWdlcywgMSwgMSk7CisKKwl1cF9yZWFkKCZw ZC0+ZHJpdmVyLT5zZW0pOworCisJaWYgKHBkLT5od19jb250ZXh0ICE9IC0xKQorCQlpcHZyX21t dV9mbHVzaChwZC0+ZHJpdmVyLCAwKTsKKworCXJldHVybjsKK30KKwordm9pZCBpcHZyX21tdV9y ZW1vdmVfcGFnZXMoc3RydWN0IGlwdnJfbW11X3BkICpwZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNz LAorCQkJdWludDMyX3QgbnVtX3BhZ2VzLCB1aW50MzJfdCBkZXNpcmVkX3RpbGVfc3RyaWRlLAor CQkJdWludDMyX3QgaHdfdGlsZV9zdHJpZGUpCit7CisJc3RydWN0IGlwdnJfbW11X3B0ICpwdDsK Kwl1aW50MzJfdCByb3dzID0gMTsKKwl1aW50MzJfdCBpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsK Kwl1bnNpZ25lZCBsb25nIGVuZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisJdW5zaWduZWQgbG9u ZyBhZGQ7CisJdW5zaWduZWQgbG9uZyByb3dfYWRkOworCXVuc2lnbmVkIGxvbmcgZl9hZGRyZXNz ID0gYWRkcmVzczsKKworCWlmIChod190aWxlX3N0cmlkZSkKKwkJcm93cyA9IG51bV9wYWdlcyAv IGRlc2lyZWRfdGlsZV9zdHJpZGU7CisJZWxzZQorCQlkZXNpcmVkX3RpbGVfc3RyaWRlID0gbnVt X3BhZ2VzOworCisJYWRkID0gZGVzaXJlZF90aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCXJv d19hZGQgPSBod190aWxlX3N0cmlkZSA8PCBQQUdFX1NISUZUOworCisJLyogZG93bl9yZWFkKCZw ZC0+ZHJpdmVyLT5zZW0pOyAqLworCisJLyogTWFrZSBzdXJlIHdlIG9ubHkgbmVlZCB0byBmbHVz aCB0aGlzIHByb2Nlc3NvcidzIGNhY2hlICovCisKKwlmb3IgKGkgPSAwOyBpIDwgcm93czsgKytp KSB7CisKKwkJYWRkciA9IGFkZHJlc3M7CisJCWVuZCA9IGFkZHIgKyBhZGQ7CisKKwkJZG8gewor CQkJbmV4dCA9IGlwdnJfcGRfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJCXB0ID0gaXB2cl9tbXVf cHRfbWFwX2xvY2socGQsIGFkZHIpOworCQkJaWYgKCFwdCkKKwkJCQljb250aW51ZTsKKwkJCWRv IHsKKwkJCQlpcHZyX21tdV9pbnZhbGlkYXRlX3B0ZShwdCwgYWRkcik7CisJCQkJLS1wdC0+Y291 bnQ7CisKKwkJCX0gd2hpbGUgKGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyIDwgbmV4dCk7CisJCQlp cHZyX21tdV9wdF91bm1hcF91bmxvY2socHQpOworCisJCX0gd2hpbGUgKGFkZHIgPSBuZXh0LCBu ZXh0ICE9IGVuZCk7CisJCWFkZHJlc3MgKz0gcm93X2FkZDsKKwl9CisJaWYgKHBkLT5od19jb250 ZXh0ICE9IC0xKQorCQlpcHZyX21tdV9mbHVzaF9wdGVzKHBkLCBmX2FkZHJlc3MsIG51bV9wYWdl cywKKwkJCQkgICBkZXNpcmVkX3RpbGVfc3RyaWRlLCBod190aWxlX3N0cmlkZSk7CisKKwkvKiB1 cF9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOyAqLworCisJaWYgKHBkLT5od19jb250ZXh0ICE9IC0x KQorCQlpcHZyX21tdV9mbHVzaChwZC0+ZHJpdmVyLCAwKTsKK30KKworaW50MzJfdCBpcHZyX21t dV9pbnNlcnRfcGZuX3NlcXVlbmNlKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsCisJCQkJCQl1aW50 MzJfdCBzdGFydF9wZm4sCisJCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJCQl1aW50 MzJfdCBudW1fcGFnZXMsCisJCQkJCQlpbnQzMl90IHR5cGUpCit7CisJc3RydWN0IGlwdnJfbW11 X3B0ICpwdDsKKwl1aW50MzJfdCBwdGU7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVk IGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZfYWRkcmVz cyA9IGFkZHJlc3M7CisJaW50MzJfdCByZXQgPSAwOworCisJZG93bl9yZWFkKCZwZC0+ZHJpdmVy LT5zZW0pOworCisJYWRkciA9IGFkZHJlc3M7CisJZW5kID0gYWRkciArIChudW1fcGFnZXMgPDwg UEFHRV9TSElGVCk7CisKKwlkbyB7CisJCW5leHQgPSBpcHZyX3BkX2FkZHJfZW5kKGFkZHIsIGVu ZCk7CisJCXB0ID0gaXB2cl9tbXVfcHRfYWxsb2NfbWFwX2xvY2socGQsIGFkZHIpOworCQlpZiAo IXB0KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJZG8geworCQkJ cHRlID0gaXB2cl9tbXVfbWFza19wdGUoc3RhcnRfcGZuKyssIHR5cGUpOworCisJCQlpcHZyX21t dV9zZXRfcHRlKHB0LCBhZGRyLCBwdGUpOworCQkJcHQtPmNvdW50Kys7CisJCX0gd2hpbGUgKGFk ZHIgKz0gUEFHRV9TSVpFLCBhZGRyIDwgbmV4dCk7CisJCWlwdnJfbW11X3B0X3VubWFwX3VubG9j ayhwdCk7CisKKwl9IHdoaWxlIChhZGRyID0gbmV4dCwgbmV4dCAhPSBlbmQpOworCitvdXQ6CisJ aWYgKHBkLT5od19jb250ZXh0ICE9IC0xKQorCQlpcHZyX21tdV9mbHVzaF9wdGVzKHBkLCBmX2Fk ZHJlc3MsIG51bV9wYWdlcywgMSwgMSk7CisKKwl1cF9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOwor CisJaWYgKHBkLT5od19jb250ZXh0ICE9IC0xKQorCQlpcHZyX21tdV9mbHVzaChwZC0+ZHJpdmVy LCAxKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgaXB2cl9tbXVfaW5zZXJ0X3BhZ2Vz KHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkJdW5zaWdu ZWQgbG9uZyBhZGRyZXNzLCB1aW50MzJfdCBudW1fcGFnZXMsCisJCQkJdWludDMyX3QgZGVzaXJl ZF90aWxlX3N0cmlkZSwKKwkJCQl1aW50MzJfdCBod190aWxlX3N0cmlkZSwgaW50MzJfdCB0eXBl KQoreworCXN0cnVjdCBpcHZyX21tdV9wdCAqcHQ7CisJdWludDMyX3Qgcm93cyA9IDE7CisJdWlu dDMyX3QgaTsKKwl1aW50MzJfdCBwdGU7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVk IGxvbmcgZW5kOworCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl1bnNpZ25lZCBsb25nIGFkZDsKKwl1 bnNpZ25lZCBsb25nIHJvd19hZGQ7CisJdW5zaWduZWQgbG9uZyBmX2FkZHJlc3MgPSBhZGRyZXNz OworCWludDMyX3QgcmV0ID0gMDsKKworCWlmIChod190aWxlX3N0cmlkZSkgeworCQlpZiAobnVt X3BhZ2VzICUgZGVzaXJlZF90aWxlX3N0cmlkZSAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJ CXJvd3MgPSBudW1fcGFnZXMgLyBkZXNpcmVkX3RpbGVfc3RyaWRlOworCX0gZWxzZSB7CisJCWRl c2lyZWRfdGlsZV9zdHJpZGUgPSBudW1fcGFnZXM7CisJfQorCisJYWRkID0gZGVzaXJlZF90aWxl X3N0cmlkZSA8PCBQQUdFX1NISUZUOworCXJvd19hZGQgPSBod190aWxlX3N0cmlkZSA8PCBQQUdF X1NISUZUOworCisJZG93bl9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOworCisJZm9yIChpID0gMDsg aSA8IHJvd3M7ICsraSkgeworCisJCWFkZHIgPSBhZGRyZXNzOworCQllbmQgPSBhZGRyICsgYWRk OworCisJCWRvIHsKKwkJCW5leHQgPSBpcHZyX3BkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCQlw dCA9IGlwdnJfbW11X3B0X2FsbG9jX21hcF9sb2NrKHBkLCBhZGRyKTsKKwkJCWlmICghcHQpIHsK KwkJCQlyZXQgPSAtRU5PTUVNOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJZG8geworCQkJCXB0 ZSA9IGlwdnJfbW11X21hc2tfcHRlKAorCQkJCQlwYWdlX3RvX3BmbigqcGFnZXMrKyksCisJCQkJ CXR5cGUpOworCQkJCWlwdnJfbW11X3NldF9wdGUocHQsIGFkZHIsIHB0ZSk7CisJCQkJcHQtPmNv dW50Kys7CisJCQl9IHdoaWxlIChhZGRyICs9IFBBR0VfU0laRSwgYWRkciA8IG5leHQpOworCQkJ aXB2cl9tbXVfcHRfdW5tYXBfdW5sb2NrKHB0KTsKKworCQl9IHdoaWxlIChhZGRyID0gbmV4dCwg bmV4dCAhPSBlbmQpOworCisJCWFkZHJlc3MgKz0gcm93X2FkZDsKKwl9CitvdXQ6CisJaWYgKHBk LT5od19jb250ZXh0ICE9IC0xKQorCQlpcHZyX21tdV9mbHVzaF9wdGVzKHBkLCBmX2FkZHJlc3Ms IG51bV9wYWdlcywKKwkJCQkgICBkZXNpcmVkX3RpbGVfc3RyaWRlLCBod190aWxlX3N0cmlkZSk7 CisKKwl1cF9yZWFkKCZwZC0+ZHJpdmVyLT5zZW0pOworCisJaWYgKHBkLT5od19jb250ZXh0ICE9 IC0xKQorCQlpcHZyX21tdV9mbHVzaChwZC0+ZHJpdmVyLCAxKTsKKworCXJldHVybiByZXQ7Cit9 CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX21tdS5oIGIvZHJpdmVycy9n cHUvZHJtL2lwdnIvaXB2cl9tbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45YmE0YjY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl9t bXUuaApAQCAtMCwwICsxLDEzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX21tdS5o OiBJUFZSIGhlYWRlciBmaWxlIGZvciBWRUQvVkVDL1ZTUCBNTVUgaGFuZGxpbmcKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQor ICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAq IENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywg VGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFu ZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5u ZXQ+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JUFZSX01NVV9IXworI2Rl ZmluZSBfSVBWUl9NTVVfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKK3N0YXRpYyBpbmxp bmUgYm9vbCBfX211c3RfY2hlY2sgSVBWUl9JU19FUlIoX19mb3JjZSBjb25zdCB1bnNpZ25lZCBs b25nIG9mZnNldCkKK3sKKwlyZXR1cm4gdW5saWtlbHkoKG9mZnNldCkgPj0gKHVuc2lnbmVkIGxv bmcpLU1BWF9FUlJOTyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBfX211c3RfY2hlY2sg SVBWUl9PRkZTRVRfRVJSKF9fZm9yY2UgY29uc3QgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJ cmV0dXJuIChpbnQzMl90KW9mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n IF9fbXVzdF9jaGVjayBJUFZSX0VSUl9PRkZTRVQoX19mb3JjZSBjb25zdCBpbnQzMl90IGVycikK K3sKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpZXJyOworfQorCitzdHJ1Y3QgaXB2cl9tbXVfcGQ7 CisKK3N0cnVjdCBpcHZyX21tdV9wdCB7CisJc3RydWN0IGlwdnJfbW11X3BkICpwZDsKKwl1aW50 MzJfdCBpbmRleDsKKwl1aW50MzJfdCBjb3VudDsKKwlzdHJ1Y3QgcGFnZSAqcDsKKwl1aW50MzJf dCAqdjsKK307CisKK3N0cnVjdCBpcHZyX21tdV9kcml2ZXIgeworCS8qIHByb3RlY3RzIGRyaXZl ci0gYW5kIHBkIHN0cnVjdHVyZXMuIEFsd2F5cyB0YWtlIGluIHJlYWQgbW9kZQorCSAqIGJlZm9y ZSB0YWtpbmcgdGhlIHBhZ2UgdGFibGUgc3BpbmxvY2suCisJICovCisJc3RydWN0IHJ3X3NlbWFw aG9yZSBzZW07CisKKwkvKiBwcm90ZWN0cyBwYWdlIHRhYmxlcywgZGlyZWN0b3J5IHRhYmxlcyBh bmQgcHQgdGFibGVzLgorCSAqIGFuZCBwdCBzdHJ1Y3R1cmVzLgorCSAqLworCXNwaW5sb2NrX3Qg bG9jazsKKworCWF0b21pY190IG5lZWRzX3RsYmZsdXNoOworCisJdWludDhfdCBfX2lvbWVtICpy ZWdpc3Rlcl9tYXA7CisJc3RydWN0IGlwdnJfbW11X3BkICpkZWZhdWx0X3BkOworCisJaW50MzJf dCBoYXNfY2xmbHVzaDsKKwlpbnQzMl90IGNsZmx1c2hfYWRkOworCXVuc2lnbmVkIGxvbmcgY2xm bHVzaF9tYXNrOworCisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworfTsKKwor c3RydWN0IGlwdnJfbW11X3BkIHsKKwlzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2ZXI7CisJ aW50MzJfdCBod19jb250ZXh0OworCXN0cnVjdCBpcHZyX21tdV9wdCAqKnRhYmxlczsKKwlzdHJ1 Y3QgcGFnZSAqcDsKKwlzdHJ1Y3QgcGFnZSAqZHVtbXlfcHQ7CisJc3RydWN0IHBhZ2UgKmR1bW15 X3BhZ2U7CisJdWludDMyX3QgcGRfbWFzazsKKwl1aW50MzJfdCBpbnZhbGlkX3BkZTsKKwl1aW50 MzJfdCBpbnZhbGlkX3B0ZTsKK307CisKK3N0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmlwdnJfbW11 X2RyaXZlcl9pbml0KHVpbnQ4X3QgX19pb21lbSAqcmVnaXN0ZXJzLAorCQkJCQlpbnQzMl90IHRy YXBfcGFnZWZhdWx0cywKKwkJCQkJaW50MzJfdCBpbnZhbGlkX3R5cGUsCisJCQkJCXN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdik7CisKK3ZvaWQgaXB2cl9tbXVfZHJpdmVyX3Rha2Vk b3duKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcik7CisKK3N0cnVjdCBpcHZyX21tdV9w ZCAqCitpcHZyX21tdV9nZXRfZGVmYXVsdF9wZChzdHJ1Y3QgaXB2cl9tbXVfZHJpdmVyICpkcml2 ZXIpOworCitzdHJ1Y3QgaXB2cl9tbXVfcGQgKmlwdnJfbW11X2FsbG9jX3BkKHN0cnVjdCBpcHZy X21tdV9kcml2ZXIgKmRyaXZlciwKKwkJCQkJaW50MzJfdCB0cmFwX3BhZ2VmYXVsdHMsCisJCQkJ CWludDMyX3QgaW52YWxpZF90eXBlKTsKKwordm9pZCBpcHZyX21tdV9mcmVlX3BhZ2VkaXIoc3Ry dWN0IGlwdnJfbW11X3BkICpwZCk7CisKK3ZvaWQgaXB2cl9tbXVfZmx1c2goc3RydWN0IGlwdnJf bW11X2RyaXZlciAqZHJpdmVyLCBpbnQgcmNfcHJvdCk7CisKK3ZvaWQgaXB2cl9tbXVfcmVtb3Zl X3Bmbl9zZXF1ZW5jZShzdHJ1Y3QgaXB2cl9tbXVfcGQgKnBkLAorCQkJCQkJdW5zaWduZWQgbG9u ZyBhZGRyZXNzLAorCQkJCQkJdWludDMyX3QgbnVtX3BhZ2VzKTsKKworaW50MzJfdCBpcHZyX21t dV9pbnNlcnRfcGZuX3NlcXVlbmNlKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsCisJCQkJCQl1aW50 MzJfdCBzdGFydF9wZm4sCisJCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkJCQl1aW50 MzJfdCBudW1fcGFnZXMsCisJCQkJCQlpbnQzMl90IHR5cGUpOworCit2b2lkIGlwdnJfbW11X3Nl dF9wZF9jb250ZXh0KHN0cnVjdCBpcHZyX21tdV9wZCAqcGQsIGludDMyX3QgaHdfY29udGV4dCk7 CisKK2ludDMyX3QgaXB2cl9tbXVfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBpcHZyX21tdV9wZCAqcGQs IHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1aW50MzJf dCBudW1fcGFnZXMsCisJCQkJdWludDMyX3QgZGVzaXJlZF90aWxlX3N0cmlkZSwKKwkJCQl1aW50 MzJfdCBod190aWxlX3N0cmlkZSwgaW50MzJfdCB0eXBlKTsKKwordm9pZCBpcHZyX21tdV9yZW1v dmVfcGFnZXMoc3RydWN0IGlwdnJfbW11X3BkICpwZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHJl c3MsIHVpbnQzMl90IG51bV9wYWdlcywKKwkJCQl1aW50MzJfdCBkZXNpcmVkX3RpbGVfc3RyaWRl LAorCQkJCXVpbnQzMl90IGh3X3RpbGVfc3RyaWRlKTsKKwordWludDMyX3QgaXB2cl9nZXRfZGVm YXVsdF9wZF9hZGRyKHN0cnVjdCBpcHZyX21tdV9kcml2ZXIgKmRyaXZlcik7CisKKyNlbmRpZgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvaXB2cl90cmFjZS5jIGIvZHJpdmVycy9n cHUvZHJtL2lwdnIvaXB2cl90cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjkxYzBiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZy X3RyYWNlLmMKQEAgLTAsMCArMSwxMSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IEludGVs IENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5n QGludGVsLmNvbT4+CisgKi8KKworI2lmbmRlZiBfX0NIRUNLRVJfXworI2RlZmluZSBDUkVBVEVf VFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAiaXB2cl90cmFjZS5oIgorI2VuZGlmCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaXB2ci9pcHZyX3RyYWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2 ci9pcHZyX3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyMDlk ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL2lwdnJfdHJhY2UuaApA QCAtMCwwICsxLDI5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpcHZyX3RyYWNlLmg6IElQ VlIgaGVhZGVyIGZpbGUgZm9yIHRyYWNlIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw MTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24g MiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisg KiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB LgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+ CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisjaWYgIWRlZmluZWQoX0lQVlJfVFJBQ0VfSF8pIHx8IGRlZmluZWQoVFJBQ0Vf SEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9JUFZSX1RSQUNFX0hfCisKKyNpbmNsdWRlIDxs aW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxp bnV4L3RyYWNlcG9pbnQuaD4KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAiaXB2 cl9idWZmZXIuaCIKKyNpbmNsdWRlICJpcHZyX2ZlbmNlLmgiCisjaW5jbHVkZSAidmVkX21zZy5o IgorCisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBpcHZyCisjZGVm aW5lIFRSQUNFX1NZU1RFTV9TVFJJTkcgX19zdHJpbmdpZnkoVFJBQ0VfU1lTVEVNKQorI2RlZmlu ZSBUUkFDRV9JTkNMVURFX0ZJTEUgaXB2cl90cmFjZQorCisvKiBvYmplY3QgdHJhY2tpbmcgKi8K KworVFJBQ0VfRVZFTlQoaXB2cl9nZW1fY3JlYXRlLAorCVRQX1BST1RPKHN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICpvYmosIHVpbnQ2NF90IGdwdV9vZmZzZXQpLAorCVRQX0FSR1Mob2JqLCBn cHVfb2Zmc2V0KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBkcm1faXB2 cl9nZW1fb2JqZWN0ICosIG9iaikKKwkJX19maWVsZCh1aW50MzJfdCwgc2l6ZSkKKwkJX19maWVs ZChib29sLCB0aWxpbmcpCisJCV9fZmllbGQodWludDMyX3QsIGNhY2hlX2xldmVsKQorCQlfX2Zp ZWxkKHVpbnQ2NF90LCBncHVfb2Zmc2V0KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50 cnktPm9iaiA9IG9iajsKKwkJX19lbnRyeS0+c2l6ZSA9IG9iai0+YmFzZS5zaXplOworCQlfX2Vu dHJ5LT50aWxpbmcgPSBvYmotPnRpbGluZzsKKwkJX19lbnRyeS0+Y2FjaGVfbGV2ZWwgPSBvYmot PmNhY2hlX2xldmVsOworCQlfX2VudHJ5LT5ncHVfb2Zmc2V0ID0gZ3B1X29mZnNldDsKKwkpLAor CVRQX3ByaW50aygib2JqPTB4JXAsIHNpemU9JXUsIHRpbGluZz0ldSwgY2FjaGU9JXUsIGdwdV9v ZmZzZXQ9MHglbGx4IiwKKwkJX19lbnRyeS0+b2JqLCBfX2VudHJ5LT5zaXplLCBfX2VudHJ5LT50 aWxpbmcsCisJCV9fZW50cnktPmNhY2hlX2xldmVsLCBfX2VudHJ5LT5ncHVfb2Zmc2V0KQorKTsK KworVFJBQ0VfRVZFTlQoaXB2cl9fZ2VtX2ZyZWVfb2JqZWN0LAorCVRQX1BST1RPKHN0cnVjdCBk cm1faXB2cl9nZW1fb2JqZWN0ICpvYmopLAorCVRQX0FSR1Mob2JqKSwKKwlUUF9TVFJVQ1RfX2Vu dHJ5KAorCQlfX2ZpZWxkKHN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICosIG9iaikKKwkpLAor CVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5vYmogPSBvYmo7CisJKSwKKwlUUF9wcmludGso Im9iaj0weCVwIiwgX19lbnRyeS0+b2JqKQorKTsKKworVFJBQ0VfRVZFTlQoaXB2cl9nZW1fd2Fp dF9pb2N0bCwKKwlUUF9QUk9UTyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqb2JqKSwKKwlU UF9BUkdTKG9iaiksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgZHJtX2lw dnJfZ2VtX29iamVjdCAqLCBvYmopCisJCV9fZmllbGQoc3RydWN0IGlwdnJfZmVuY2UgKiwgZmVu Y2UpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+b2JqID0gb2JqOworCQlfX2Vu dHJ5LT5mZW5jZSA9IG9iai0+ZmVuY2U7CisJKSwKKwlUUF9wcmludGsoIm9iaj0lcCwgZmVuY2U9 JXAgIiwgX19lbnRyeS0+b2JqLCBfX2VudHJ5LT5mZW5jZSkKKyk7CisKK1RSQUNFX0VWRU5UKGlw dnJfZmVuY2Vfd2FpdCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UsCisJCXVp bnQzMl90IHNpZ25hbGVkX3NlcSwKKwkJdWludDE2X3Qgc3luY19zZXEpLAorCVRQX0FSR1MoZmVu Y2UsIHNpZ25hbGVkX3NlcSwgc3luY19zZXEpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmll bGQoc3RydWN0IGlwdnJfZmVuY2UgKiwgZmVuY2UpCisJCV9fZmllbGQodWludDE2X3QsIGZlbmNl X3NlcSkKKwkJX19maWVsZCh1aW50MzJfdCwgc2lnbmFsZWRfc2VxKQorCQlfX2ZpZWxkKHVpbnQx Nl90LCBzeW5jX3NlcSkKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5mZW5jZSA9 IGZlbmNlOworCQlfX2VudHJ5LT5mZW5jZV9zZXEgPSBmZW5jZS0+c2VxOworCQlfX2VudHJ5LT5z aWduYWxlZF9zZXEgPSBzaWduYWxlZF9zZXE7CisJCV9fZW50cnktPnN5bmNfc2VxID0gc3luY19z ZXE7CisJKSwKKwlUUF9wcmludGsoImZlbmNlPSVwLCBmZW5jZV9zZXE9JWQsIHNpZ25hbGVkX3Nl cT0lZCwgc3luY19zZXE9JWQiLAorCQlfX2VudHJ5LT5mZW5jZSwgX19lbnRyeS0+ZmVuY2Vfc2Vx LAorCQlfX2VudHJ5LT5zaWduYWxlZF9zZXEsIF9fZW50cnktPnN5bmNfc2VxKQorKTsKKworVFJB Q0VfRVZFTlQoaXB2cl9nZW1fbW1hcCwKKwlUUF9QUk9UTyhzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29i amVjdCAqb2JqLCB1bnNpZ25lZCBsb25nIG1tYXBfYmFzZSksCisJVFBfQVJHUyhvYmosIG1tYXBf YmFzZSksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChzdHJ1Y3QgZHJtX2lwdnJfZ2Vt X29iamVjdCAqLCBvYmopCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbW1hcF9iYXNlKQorCSks CisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm9iaiA9IG9iajsKKwkJX19lbnRyeS0+bW1h cF9iYXNlID0gbW1hcF9iYXNlOworCSksCisJVFBfcHJpbnRrKCJvYmo9JXAsIG1tYXBfYmFzZT0w eCVseCIsIF9fZW50cnktPm9iaiwgX19lbnRyeS0+bW1hcF9iYXNlKQorKTsKKworCitUUkFDRV9F VkVOVChpcHZyX2dlbV9leGVjX2lvY3RsLAorCVRQX1BST1RPKHN0cnVjdCBkcm1faXB2cl9nZW1f ZXhlY2J1ZmZlciAqZXhlYyksCisJVFBfQVJHUyhleGVjKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAor CQlfX2ZpZWxkKHVpbnQ2NF90LCBidWZmZXJfbGlzdCkKKwkJX19maWVsZCh1aW50MzJfdCwgYnVm ZmVyX2NvdW50KQorCQlfX2ZpZWxkKHVpbnQzMl90LCBjbWRidWZfaGFuZGxlKQorCQlfX2ZpZWxk KHVpbnQzMl90LCBjbWRidWZfc2l6ZSkKKwkJX19maWVsZCh1aW50MzJfdCwgY3R4X2lkKQorCSks CisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmJ1ZmZlcl9saXN0ID0gZXhlYy0+YnVmZmVy X2xpc3Q7CisJCV9fZW50cnktPmJ1ZmZlcl9jb3VudCA9IGV4ZWMtPmJ1ZmZlcl9jb3VudDsKKwkJ X19lbnRyeS0+Y21kYnVmX2hhbmRsZSA9IGV4ZWMtPmNtZGJ1Zl9oYW5kbGU7CisJCV9fZW50cnkt PmNtZGJ1Zl9zaXplID0gZXhlYy0+Y21kYnVmX3NpemU7CisJCV9fZW50cnktPmN0eF9pZCA9IGV4 ZWMtPmN0eF9pZDsKKwkpLAorCVRQX3ByaW50aygiYnVmZmVyX2xpc3Q9MHglbGx4LCBidWZmZXJf Y291bnQ9MHglZCwgIgorCQkiY21kYnVmX2hhbmRsZT0weCV4LCBjbWRidWZfc2l6ZT0ldSwgY3R4 X2lkPSVkIiwKKwkJX19lbnRyeS0+YnVmZmVyX2xpc3QsIF9fZW50cnktPmJ1ZmZlcl9jb3VudCwK KwkJX19lbnRyeS0+Y21kYnVmX2hhbmRsZSwgX19lbnRyeS0+Y21kYnVmX3NpemUsCisJCV9fZW50 cnktPmN0eF9pZCkKKyk7CisKK1RSQUNFX0VWRU5UKHZlZF9jbWRfc2VuZCwKKwlUUF9QUk9UTyh1 aW50MzJfdCBjbWRfaWQsIHVpbnQzMl90IHNlcSksCisJVFBfQVJHUyhjbWRfaWQsIHNlcSksCisJ VFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1aW50MzJfdCwgY21kX2lkKQorCQlfX2ZpZWxk KHVpbnQzMl90LCBzZXEpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y21kX2lk ID0gY21kX2lkOworCQlfX2VudHJ5LT5zZXEgPSBzZXE7CisJKSwKKwlUUF9wcmludGsoImNtZF9p ZD0weCUwOHgsIHNlcT0weCUwOHgiLAorCQlfX2VudHJ5LT5jbWRfaWQsIF9fZW50cnktPnNlcSkK Kyk7CisKK1RSQUNFX0VWRU5UKHZlZF9wb3dlcl9vbiwKKwlUUF9QUk9UTyhpbnQgZnJlcSksCisJ VFBfQVJHUyhmcmVxKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKGludCwgZnJlcSkK KwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5mcmVxID0gZnJlcTsKKwkpLAorCVRQ X3ByaW50aygiZnJlcXVlbmN5ICVkIE1IeiIsIF9fZW50cnktPmZyZXEpCispOworCitUUkFDRV9F VkVOVCh2ZWRfcG93ZXJfb2ZmLAorCVRQX1BST1RPKGludCBmcmVxKSwKKwlUUF9BUkdTKGZyZXEp LAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoaW50LCBmcmVxKQorCSksCisJVFBfZmFz dF9hc3NpZ24oCisJCV9fZW50cnktPmZyZXEgPSBmcmVxOworCSksCisJVFBfcHJpbnRrKCJmcmVx dWVuY3kgJWQgTUh6IiwgX19lbnRyeS0+ZnJlcSkKKyk7CisKK1RSQUNFX0VWRU5UKHZlZF9pcnFf Y29tcGxldGVkLAorCVRQX1BST1RPKHN0cnVjdCBmd19jb21wbGV0ZWRfbXNnICpjb21wbGV0ZWRf bXNnKSwKKwlUUF9BUkdTKGNvbXBsZXRlZF9tc2cpLAorCVRQX1NUUlVDVF9fZW50cnkoCisJCV9f ZmllbGQodWludDE2X3QsIHNlcW5vKQorCQlfX2ZpZWxkKHVpbnQzMl90LCBmbGFncykKKwkJX19m aWVsZCh1aW50MzJfdCwgdmRlYmNyKQorCQlfX2ZpZWxkKHVpbnQxNl90LCBzdGFydF9tYikKKwkJ X19maWVsZCh1aW50MTZfdCwgbGFzdF9tYikKKwkpLAorCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Vu dHJ5LT5zZXFubyA9IGNvbXBsZXRlZF9tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKwkJX19l bnRyeS0+ZmxhZ3MgPSBjb21wbGV0ZWRfbXNnLT5mbGFnczsKKwkJX19lbnRyeS0+dmRlYmNyID0g Y29tcGxldGVkX21zZy0+dmRlYmNyOworCQlfX2VudHJ5LT5zdGFydF9tYiA9IGNvbXBsZXRlZF9t c2ctPm1iLmJpdHMuc3RhcnRfbWI7CisJCV9fZW50cnktPmxhc3RfbWIgPSBjb21wbGV0ZWRfbXNn LT5tYi5iaXRzLmxhc3RfbWI7CisJKSwKKwlUUF9wcmludGsoInNlcT0weCUwNHgsIGZsYWdzPTB4 JTA4eCwgdmRlYmNyPTB4JTA4eCwgbWI9WyV1LCAldV0iLAorCQlfX2VudHJ5LT5zZXFubywKKwkJ X19lbnRyeS0+ZmxhZ3MsCisJCV9fZW50cnktPnZkZWJjciwKKwkJX19lbnRyeS0+c3RhcnRfbWIs CisJCV9fZW50cnktPmxhc3RfbWIpCispOworCitUUkFDRV9FVkVOVCh2ZWRfaXJxX3BhbmljLAor CVRQX1BST1RPKHN0cnVjdCBmd19wYW5pY19tc2cgKnBhbmljX21zZywgdWludDMyX3QgZXJyX3Ry aWcsCisJCXVpbnQzMl90IGlycV9zdGF0dXMsIHVpbnQzMl90IG1tdV9zdGF0dXMsIHVpbnQzMl90 IGRtYWNfc3RhdHVzKSwKKwlUUF9BUkdTKHBhbmljX21zZywgZXJyX3RyaWcsIGlycV9zdGF0dXMs IG1tdV9zdGF0dXMsIGRtYWNfc3RhdHVzKSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxk KHVpbnQxNl90LCBzZXFubykKKwkJX19maWVsZCh1aW50MzJfdCwgZmVfc3RhdHVzKQorCQlfX2Zp ZWxkKHVpbnQzMl90LCBiZV9zdGF0dXMpCisJCV9fZmllbGQodWludDE2X3QsIHJzdmQpCisJCV9f ZmllbGQodWludDE2X3QsIGxhc3RfbWIpCisJCV9fZmllbGQodWludDMyX3QsIGVycl90cmlnKQor CQlfX2ZpZWxkKHVpbnQzMl90LCBpcnFfc3RhdHVzKQorCQlfX2ZpZWxkKHVpbnQzMl90LCBtbXVf c3RhdHVzKQorCQlfX2ZpZWxkKHVpbnQzMl90LCBkbWFjX3N0YXR1cykKKworCSksCisJVFBfZmFz dF9hc3NpZ24oCisJCV9fZW50cnktPnNlcW5vID0gcGFuaWNfbXNnLT5oZWFkZXIuYml0cy5tc2df ZmVuY2U7CisJCV9fZW50cnktPmZlX3N0YXR1cyA9IHBhbmljX21zZy0+ZmVfc3RhdHVzOworCQlf X2VudHJ5LT5iZV9zdGF0dXMgPSBwYW5pY19tc2ctPmJlX3N0YXR1czsKKwkJX19lbnRyeS0+cnN2 ZCA9IHBhbmljX21zZy0+bWIuYml0cy5yZXNlcnZlZDI7CisJCV9fZW50cnktPmxhc3RfbWIgPSBw YW5pY19tc2ctPm1iLmJpdHMubGFzdF9tYjsKKwkJX19lbnRyeS0+ZXJyX3RyaWcgPSBlcnJfdHJp ZzsKKwkJX19lbnRyeS0+aXJxX3N0YXR1cyA9IGlycV9zdGF0dXM7CisJCV9fZW50cnktPm1tdV9z dGF0dXMgPSBtbXVfc3RhdHVzOworCQlfX2VudHJ5LT5kbWFjX3N0YXR1cyA9IGRtYWNfc3RhdHVz OworCSksCisJVFBfcHJpbnRrKCJzZXE9MHglMDR4LCBzdGF0dXM9W2ZlIDB4JTA4eCBiZSAweCUw OHhdLCByc3ZkPTB4JTA0eCwgIgorCQkibGFzdF9tYj0ldSwgZXJyX3RyaWc9MHglMDh4LCBpcnFf c3RhdHVzPTB4JTA4eCwgIgorCQkibW11X3N0YXR1cz0weCUwOHgsIGRtYWNfc3RhdHVzPTB4JTA4 eCIsCisJCV9fZW50cnktPnNlcW5vLAorCQlfX2VudHJ5LT5mZV9zdGF0dXMsCisJCV9fZW50cnkt PmJlX3N0YXR1cywKKwkJX19lbnRyeS0+cnN2ZCwKKwkJX19lbnRyeS0+bGFzdF9tYiwKKwkJX19l bnRyeS0+ZXJyX3RyaWcsCisJCV9fZW50cnktPmlycV9zdGF0dXMsCisJCV9fZW50cnktPm1tdV9z dGF0dXMsCisJCV9fZW50cnktPmRtYWNfc3RhdHVzKQorKTsKKworVFJBQ0VfRVZFTlQodmVkX2ly cV9jb250aWd1aXR5LAorCVRQX1BST1RPKHN0cnVjdCBmd19jb250aWd1aXR5X21zZyAqbXNnKSwK KwlUUF9BUkdTKG1zZyksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1aW50MTZfdCwg c2Vxbm8pCisJCV9fZmllbGQodWludDE2X3QsIGJlZ2luX21iKQorCQlfX2ZpZWxkKHVpbnQxNl90 LCBlbmRfbWIpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+c2Vxbm8gPSBtc2ct PmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKwkJX19lbnRyeS0+YmVnaW5fbWIgPSBtc2ctPm1iLmJp dHMuYmVnaW5fbWJfbnVtOworCQlfX2VudHJ5LT5lbmRfbWIgPSBtc2ctPm1iLmJpdHMuZW5kX21i X251bTsKKwkpLAorCVRQX3ByaW50aygic2VxPTB4JTA0eCwgbWI9WyV1LCAldV0iLAorCQlfX2Vu dHJ5LT5zZXFubywKKwkJX19lbnRyeS0+YmVnaW5fbWIsCisJCV9fZW50cnktPmVuZF9tYikKKyk7 CisKK1RSQUNFX0VWRU5UKHZlZF9pcnFfZGVibG9ja19yZXF1aXJlZCwKKwlUUF9QUk9UTyhzdHJ1 Y3QgZndfZGVibG9ja19yZXF1aXJlZF9tc2cgKm1zZyksCisJVFBfQVJHUyhtc2cpLAorCVRQX1NU UlVDVF9fZW50cnkoCisJCV9fZmllbGQodWludDE2X3QsIHNlcW5vKQorCSksCisJVFBfZmFzdF9h c3NpZ24oCisJCV9fZW50cnktPnNlcW5vID0gbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2U7CisJ KSwKKwlUUF9wcmludGsoInNlcT0weCUwNHgiLAorCQlfX2VudHJ5LT5zZXFubykKKyk7CisKKyNl bmRpZiAvKiBfSVBWUl9UUkFDRV9IXyAqLworCisgLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lk ZSBwcm90ZWN0aW9uICovCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjZGVmaW5lIFRSQUNF X0lOQ0xVREVfUEFUSCAuCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfY21kLmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2 ci92ZWRfY21kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFlNDZlNQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9jbWQuYwpAQCAtMCww ICsxLDEyNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVkX2NtZC5jOiBWRUQgY29tbWFu ZCBoYW5kbGluZyBiZXR3ZWVuIGhvc3QgZHJpdmVyIGFuZCBWRUQgZmlybXdhcmUKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQor ICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAq IENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywg VGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFu ZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNoZW5nQGludGVs LmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpcHZyX2dlbS5oIgor I2luY2x1ZGUgImlwdnJfbW11LmgiCisjaW5jbHVkZSAiaXB2cl9idWZmZXIuaCIKKyNpbmNsdWRl ICJpcHZyX3RyYWNlLmgiCisjaW5jbHVkZSAiaXB2cl9mZW5jZS5oIgorI2luY2x1ZGUgInZlZF9j bWQuaCIKKyNpbmNsdWRlICJ2ZWRfZncuaCIKKyNpbmNsdWRlICJ2ZWRfbXNnLmgiCisjaW5jbHVk ZSAidmVkX3JlZy5oIgorI2luY2x1ZGUgInZlZF9lYy5oIgorI2luY2x1ZGUgInZlZF9pbml0Lmgi CisjaW5jbHVkZSAidmVkX3BtLmgiCisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisj aW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaWZuZGVm IGxpc3RfZmlyc3RfZW50cnkKKyNkZWZpbmUgbGlzdF9maXJzdF9lbnRyeShwdHIsIHR5cGUsIG1l bWJlcikgXAorCWxpc3RfZW50cnkoKHB0ciktPm5leHQsIHR5cGUsIG1lbWJlcikKKyNlbmRpZgor CitpbnQzMl90IHZlZF9tdHhfc2VuZChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYs IGNvbnN0IHZvaWQgKm1zZykKK3sKKwlzdGF0aWMgc3RydWN0IGZ3X3BhZGRpbmdfbXNnIHBhZF9t c2c7CisJY29uc3QgdWludDMyX3QgKnBfbXNnID0gKHVpbnQzMl90ICopbXNnOworCXVpbnQzMl90 IG1zZ19udW0sIHdvcmRzX2ZyZWUsIHJpZHgsIHdpZHgsIGJ1Zl9zaXplLCBidWZfb2Zmc2V0Owor CWludDMyX3QgcmV0ID0gMDsKKwlpbnQgaTsKKwl1bmlvbiBtc2dfaGVhZGVyICpoZWFkZXI7CisJ aGVhZGVyID0gKHVuaW9uIG1zZ19oZWFkZXIgKiltc2c7CisKKwlJUFZSX0RFQlVHX0VOVFJZKCJl bnRlci5cbiIpOworCisJLyogd2UgbmVlZCBjbG9ja3MgZW5hYmxlZCBiZWZvcmUgd2UgdG91Y2gg VkVDIGxvY2FsIHJhbSwKKwkgKiBidXQgZncgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIGNsb2NrIGFm dGVyIGZ3IGlzIGxvYWRlZAorCSAqLworCisJbXNnX251bSA9IChoZWFkZXItPmJpdHMubXNnX3Np emUgKyAzKSAvIDQ7CisKKwkvKiBkZWJ1ZyBjb2RlIGZvciBtc2cgZHVtcCAqLworCUlQVlJfREVC VUdfVkVEKCJNU1ZEWDogdmVkX210eF9zZW5kIGlzICVkRFdcbiIsIG1zZ19udW0pOworCisJZm9y IChpID0gMDsgaSA8IG1zZ19udW07IGkrKykKKwkJSVBWUl9ERUJVR19WRUQoIiAgIDB4JTA4eFxu IiwgcF9tc2dbaV0pOworCisJYnVmX3NpemUgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19U T19NVFhfQlVGX1NJWkUpICYKKwkJICAgKCgxIDw8IDE2KSAtIDEpOworCisJaWYgKG1zZ19udW0g PiBidWZfc2l6ZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlJUFZSX0VSUk9SKCJWRUQ6IG1lc3Nh Z2UgZXhjZWVkIG1heGltdW0sIHJldDolZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJ cmlkeCA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX01UWF9SRF9JTkRFWCk7CisJd2lk eCA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX01UWF9XUlRfSU5ERVgpOworCisKKwli dWZfc2l6ZSA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1RPX01UWF9CVUZfU0laRSkgJgor CQkgICAoKDEgPDwgMTYpIC0gMSk7CisJLyoweDIwMDAgaXMgVkVDIExvY2FsIFJhbSBvZmZzZXQq LworCWJ1Zl9vZmZzZXQgPQorCQkoVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09NTVNfVE9fTVRYX0JV Rl9TSVpFKSA+PiAxNikgKyAweDIwMDA7CisKKwkvKiBtZXNzYWdlIHdvdWxkIHdyYXAsIG5lZWQg dG8gc2VuZCBhIHBhZCBtZXNzYWdlICovCisJaWYgKHdpZHggKyBtc2dfbnVtID4gYnVmX3NpemUp IHsKKwkJLyogU2hvdWxkbid0IGhhcHBlbiBmb3IgYSBQQUQgbWVzc2FnZSBpdHNlbGYgKi8KKwkJ aWYgKGhlYWRlci0+Yml0cy5tc2dfdHlwZSA9PSBNVFhfTVNHSURfUEFERElORykKKwkJCUlQVlJf REVCVUdfV0FSTigiVkVEOiBzaG91bGQgbm90IHdyYXAgcGFkIG1zZywgIgorCQkJCSJidWZfc2l6 ZSBpcyAlZCwgd2lkeCBpcyAlZCwgbXNnX251bSBpcyAlZC5cbiIsCisJCQkJYnVmX3NpemUsIHdp ZHgsIG1zZ19udW0pOworCisJCS8qIGlmIHRoZSByZWFkIHBvaW50ZXIgaXMgYXQgemVybyB0aGVu IHdlIG11c3Qgd2FpdCBmb3IgaXQgdG8KKwkJICogY2hhbmdlIG90aGVyd2lzZSB0aGUgd3JpdGUg cG9pbnRlciB3aWxsIGVxdWFsIHRoZSByZWFkCisJCSAqIHBvaW50ZXIsd2hpY2ggc2hvdWxkIG9u bHkgaGFwcGVuIHdoZW4gdGhlIGJ1ZmZlciBpcyBlbXB0eQorCQkgKgorCQkgKiBUaGlzIHdpbGwg b25seSBoYXBwZW5zIGlmIHdlIHRyeSB0byBvdmVyZmlsbCB0aGUgcXVldWUsCisJCSAqIHF1ZXVl IG1hbmFnZW1lbnQgc2hvdWxkIG1ha2UKKwkJICogc3VyZSB0aGlzIG5ldmVyIGhhcHBlbnMgaW4g dGhlIGZpcnN0IHBsYWNlLgorCQkgKi8KKwkJaWYgKDAgPT0gcmlkeCkgeworCQkJcmV0ID0gLUVJ TlZBTDsKKwkJCUlQVlJfRVJST1IoIk1TVkRYOiBSSW5kZXg9MCwgcmV0OiVkXG4iLCByZXQpOwor CQkJZ290byBvdXQ7CisJCX0KKworCQkvKiBTZW5kIGEgcGFkIG1lc3NhZ2UgKi8KKwkJcGFkX21z Zy5oZWFkZXIuYml0cy5tc2dfc2l6ZSA9IChidWZfc2l6ZSAtIHdpZHgpIDw8IDI7CisJCXBhZF9t c2cuaGVhZGVyLmJpdHMubXNnX3R5cGUgPSBNVFhfTVNHSURfUEFERElORzsKKwkJdmVkX210eF9z ZW5kKGRldl9wcml2LCAodm9pZCAqKSZwYWRfbXNnKTsKKwkJd2lkeCA9IFZFRF9SRUdfUkVBRDMy KE1TVkRYX0NPTU1TX1RPX01UWF9XUlRfSU5ERVgpOworCX0KKworCWlmICh3aWR4ID49IHJpZHgp CisJCXdvcmRzX2ZyZWUgPSBidWZfc2l6ZSAtICh3aWR4IC0gcmlkeCkgLSAxOworCWVsc2UKKwkJ d29yZHNfZnJlZSA9IHJpZHggLSB3aWR4IC0gMTsKKworCWlmIChtc2dfbnVtID4gd29yZHNfZnJl ZSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlJUFZSX0VSUk9SKCJNU1ZEWDogbXNnX251bSA+IHdv cmRzX2ZyZWUsIHJldDolZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXdoaWxlIChtc2df bnVtID4gMCkgeworCQlWRURfUkVHX1dSSVRFMzIoKnBfbXNnKyssIGJ1Zl9vZmZzZXQgKyAod2lk eCA8PCAyKSk7CisJCW1zZ19udW0tLTsKKwkJd2lkeCsrOworCQlpZiAoYnVmX3NpemUgPT0gd2lk eCkKKwkJCXdpZHggPSAwOworCX0KKworCVZFRF9SRUdfV1JJVEUzMih3aWR4LCBNU1ZEWF9DT01N U19UT19NVFhfV1JUX0lOREVYKTsKKworCS8qIE1ha2Ugc3VyZSBjbG9ja3MgYXJlIGVuYWJsZWQg YmVmb3JlIHdlIGtpY2sKKwkgKiBidXQgZncgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIGNsb2NrIGFm dGVyIGZ3IGlzIGxvYWRlZAorCSAqLworCisJLyogc2lnbmFsIGFuIGludGVycnVwdCB0byBsZXQg dGhlIG10eCBrbm93IHRoZXJlIGlzIGEgbmV3IG1lc3NhZ2UgKi8KKwlWRURfUkVHX1dSSVRFMzIo MSwgTVRYX0tJQ0tfSU5QVVRfT0ZGU0VUKTsKKworCS8qIFJlYWQgTVNWRFggUmVnaXN0ZXIgc2V2 ZXJhbCB0aW1lcyBpbiBjYXNlIElkbGUgc2lnbmFsIGFzc2VydCAqLworCVZFRF9SRUdfUkVBRDMy KE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUKTsKKwlWRURfUkVHX1JFQUQzMihNU1ZEWF9J TlRFUlJVUFRfU1RBVFVTX09GRlNFVCk7CisJVkVEX1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBU X1NUQVRVU19PRkZTRVQpOworCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNf T0ZGU0VUKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IHZlZF9j bWRfc2VuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpjbWQsCisJCQl1aW50MzJfdCBj bWRfc2l6ZSwgc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgpCit7CisJaW50MzJfdCByZXQg PSAwOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZh dGU7CisJdW5pb24gbXNnX2hlYWRlciAqaGVhZGVyOworCXVpbnQzMl90IGN1cl9zZXEgPSAweGZm ZmZmZmZmOworCisJd2hpbGUgKGNtZF9zaXplID4gMCkgeworCQl1aW50MzJfdCBjdXJfY21kX3Np emUsIGN1cl9jbWRfaWQ7CisJCWhlYWRlciA9ICh1bmlvbiBtc2dfaGVhZGVyICopY21kOworCQlj dXJfY21kX3NpemUgPSBoZWFkZXItPmJpdHMubXNnX3NpemU7CisJCWN1cl9jbWRfaWQgPSBoZWFk ZXItPmJpdHMubXNnX3R5cGU7CisKKwkJY3VyX3NlcSA9ICgoc3RydWN0IGZ3X21zZ19oZWFkZXIg KiljbWQpLT5oZWFkZXIuYml0cy5tc2dfZmVuY2U7CisKKwkJaWYgKGN1cl9zZXEgIT0gMHhmZmZm ZmZmZikgeworCQkJaXB2cl9jdHgtPmN1cl9zZXEgPSBjdXJfc2VxOworCQl9CisKKwkJaWYgKGN1 cl9jbWRfc2l6ZSA+IGNtZF9zaXplKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJSVBWUl9FUlJP UigiVkVEOiBjbWRfc2l6ZSAldSBjdXJfY21kX3NpemUgJXUuXG4iLAorCQkJCSAgY21kX3NpemUs IGN1cl9jbWRfc2l6ZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIFNlbmQgdGhlIG1lc3Nh Z2UgdG8gaC93ICovCisJCXRyYWNlX3ZlZF9jbWRfc2VuZChjdXJfY21kX2lkLCBjdXJfc2VxKTsK KwkJcmV0ID0gdmVkX210eF9zZW5kKGRldl9wcml2LCBjbWQpOworCQlpZiAocmV0KSB7CisJCQlJ UFZSX0RFQlVHX1dBUk4oIlZFRDogcmV0OiVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0K KwkJY21kICs9IGN1cl9jbWRfc2l6ZTsKKwkJY21kX3NpemUgLT0gY3VyX2NtZF9zaXplOworCQlp ZiAoY3VyX2NtZF9pZCA9PSBNVFhfTVNHSURfSE9TVF9CRV9PUFAgfHwKKwkJCWN1cl9jbWRfaWQg PT0gTVRYX01TR0lEX0RFQkxPQ0sgfHwKKwkJCWN1cl9jbWRfaWQgPT0gTVRYX01TR0lEX0lOVFJB X09PTEQpIHsKKwkJCWNtZCArPSAoc2l6ZW9mKHN0cnVjdCBmd19kZWJsb2NrX21zZykgLSBjdXJf Y21kX3NpemUpOworCQkJY21kX3NpemUgLT0KKwkJCQkoc2l6ZW9mKHN0cnVjdCBmd19kZWJsb2Nr X21zZykgLSBjdXJfY21kX3NpemUpOworCQl9CisJfQorb3V0OgorCUlQVlJfREVCVUdfVkVEKCJW RUQ6IHJldDolZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQzMl90IHZlZF9jbWRf ZGVxdWV1ZV9zZW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdmVkX2NtZF9x dWV1ZSAqdmVkX2NtZCA9IE5VTEw7CisJaW50MzJfdCByZXQgPSAwOworCXN0cnVjdCB2ZWRfcHJp dmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBp cnFfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFf ZmxhZ3MpOworCWlmIChsaXN0X2VtcHR5KCZ2ZWRfcHJpdi0+dmVkX3F1ZXVlKSkgeworCQlJUFZS X0RFQlVHX1ZFRCgiVkVEOiB2ZWQgY21kIHF1ZXVlIGVtcHR5LlxuIik7CisJCXZlZF9wcml2LT52 ZWRfYnVzeSA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9j aywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmVkX2NtZCA9IGxpc3Rf Zmlyc3RfZW50cnkoJnZlZF9wcml2LT52ZWRfcXVldWUsCisJCQkJICAgICBzdHJ1Y3QgdmVkX2Nt ZF9xdWV1ZSwgaGVhZCk7CisJbGlzdF9kZWwoJnZlZF9jbWQtPmhlYWQpOworCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKKworCUlQVlJfREVC VUdfVkVEKCJWRUQ6IGNtZCBxdWV1ZSBzZXEgaXMgJTA4eC5cbiIsIHZlZF9jbWQtPmNtZF9zZXEp OworCisJaWYgKGRybV9pcHZyX3RpbGluZykKKwkJaXB2cl9zZXRfdGlsZShkZXYsIHZlZF9jbWQt PnRpbGluZ19zY2hlbWUsCisJCQkJICAgdmVkX2NtZC0+dGlsaW5nX3N0cmlkZSk7CisKKyNpZmRl ZiBDT05GSUdfRFJNX0lQVlJfRUMKKwkvKiBTZXBlcmF0ZSB1cGRhdGUgZnJhbWUgYW5kIGJhY2t1 cCBjbWRzIGJlY2F1c2UgaWYgYSBiYXRjaCBvZiBjbWRzCisJICogZG9lc24ndCBoYXZlICogaG9z dF9iZV9vcHAgbWVzc2FnZSwgbm8gbmVlZCB0byB1cGRhdGUgZnJhbWUgaW5mbworCSAqIGJ1dCBz dGlsbCBuZWVkIHRvIGJhY2t1cCBjbWRzLgorCSAqIFRoaXMgY2FzZSBjYW4gaGFwcGVuIGlmIGFu IGJhdGNoIG9mIGNtZHMgaXMgbm90IHRoZSBlbnRpcmUgZnJhbWUKKwkqLworCWlmICh2ZWRfY21k LT5ob3N0X2JlX29wcF9lbmFibGVkKQorCQl2ZWRfdXBkYXRlX2ZyYW1lX2luZm8odmVkX3ByaXYs IHZlZF9jbWQtPnRmaWxlLAorCQkJdmVkX2NtZC0+Y21kICsgdmVkX2NtZC0+ZGVibG9ja19jbWRf b2Zmc2V0KTsKKworCXZlZF9iYWNrdXBfY21kKHZlZF9wcml2LCB2ZWRfY21kLT50ZmlsZSwKKwkJ CXZlZF9jbWQtPmNtZCwKKwkJCXZlZF9jbWQtPmNtZF9zaXplLAorCQkJdmVkX2NtZC0+ZGVibG9j a19jbWRfb2Zmc2V0KTsKKyNlbmRpZgorCXJldCA9IHZlZF9jbWRfc2VuZChkZXYsIHZlZF9jbWQt PmNtZCwKKwkJCSAgIHZlZF9jbWQtPmNtZF9zaXplLCB2ZWRfY21kLT5pcHZyX2N0eCk7CisJaWYg KHJldCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IHZlZF9jbWRfc2VuZCBmYWlsZWQuXG4iKTsKKwkJ cmV0ID0gLUVJTlZBTDsKKwl9CisKKwlrZnJlZSh2ZWRfY21kLT5jbWQpOworCWtmcmVlKHZlZF9j bWQpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCB2ZWRfZmx1c2hfY21kX3F1ZXVlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdmVkX2NtZF9xdWV1ZSAqdmVkX2NtZDsKKwlz dHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCAqbmV4dDsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9w cml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwor CXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJLyog Rmx1c2ggdGhlIFZFRCBjbWQgcXVldWUgYW5kIHNpZ25hbCBhbGwgZmVuY2VzIGluIHRoZSBxdWV1 ZSAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0LCBuZXh0LCAmdmVkX3ByaXYtPnZlZF9xdWV1 ZSkgeworCQl2ZWRfY21kID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgdmVkX2NtZF9xdWV1ZSwg aGVhZCk7CisJCWxpc3RfZGVsKGxpc3QpOworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBmbHVzaGlu ZyBzZXF1ZW5jZToweCUwOHguXG4iLAorCQkJCSAgdmVkX2NtZC0+Y21kX3NlcSk7CisJCXZlZF9w cml2LT52ZWRfY3VyX3NlcSA9IHZlZF9jbWQtPmNtZF9zZXE7CisKKwkJaXB2cl9mZW5jZV9wcm9j ZXNzKGRldl9wcml2LCB2ZWRfY21kLT5jbWRfc2VxLCBJUFZSX0NNRF9TS0lQKTsKKworCQlrZnJl ZSh2ZWRfY21kLT5jbWQpOworCQlrZnJlZSh2ZWRfY21kKTsKKwl9CisJdmVkX3ByaXYtPnZlZF9i dXN5ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGly cV9mbGFncyk7Cit9CisKKy8qCisgKiBSZXR1cm5zOgorICogLUVJTlZBTCBpZiBpbnZhbGlkIGFy Z3VtZW50IGZvdW5kCisgKiAtRUZBVUxUIGlmIG1hcHBpbmcgY29tbWFuZCBidWZmZXIgZmFpbHMK KyAqIC1FTk9NRU0gaWYgbWVtb3J5IG5vdCBlbm91Z2ggZm9yIGNvcHlpbmcgY29tbWFuZAorICog MCBpZiBzdWNjZXNzZnVsLgorICovCitzdGF0aWMgaW50MzJfdAordmVkX21hcF9jb21tYW5kKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmNt ZF9idWZmZXIsCisJCQkJdWludDMyX3QgY21kX3NpemUsIHZvaWQgKip2ZWRfY21kLAorCQkJCXVp bnQxNl90IHNlcXVlbmNlLCBpbnQzMl90IGNvcHlfY21kLAorCQkJCXN0cnVjdCBpcHZyX2NvbnRl eHQgKmlwdnJfY3R4KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2 LT52ZWRfcHJpdmF0ZTsKKwlpbnQzMl90IHJldCA9IDA7CisJdWludDMyX3QgY21kX3NpemVfcmVt YWluOworCXZvaWQgKmNtZCwgKmNtZF9jb3B5LCAqY21kX3N0YXJ0OworCXVuaW9uIG1zZ19oZWFk ZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgaXB2cl9mZW5jZSAqZmVuY2UgPSBOVUxMOworCWludCBmZW5j ZV9mZCA9IC0xOworCisJLyogY29tbWFuZCBidWZmZXJzIG1heSBub3QgZXhjZWVkIHBhZ2UgYm91 bmRhcnkgKi8KKwlpZiAoY21kX3NpemUgPiBQQUdFX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOwor CisJY21kX3N0YXJ0ID0ga21hcChzZ19wYWdlKGNtZF9idWZmZXItPnNnX3RhYmxlLT5zZ2wpKTsK KwlpZiAoIWNtZF9zdGFydCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IGttYXAgZmFpbGVkLlxuIik7 CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWNtZCA9IGNtZF9zdGFydDsKKwljbWRfc2l6ZV9y ZW1haW4gPSBjbWRfc2l6ZTsKKworCXZlZF9wcml2LT5ob3N0X2JlX29wcF9lbmFibGVkID0gMDsK Kwl2ZWRfcHJpdi0+ZGVibG9ja19jbWRfb2Zmc2V0ID0gVkVEX0lOVkFMSURfT0ZGU0VUOworCisJ d2hpbGUgKGNtZF9zaXplX3JlbWFpbiA+IDApIHsKKwkJdWludDMyX3QgY3VyX2NtZF9zaXplLCBj dXJfY21kX2lkLCBtbXVfcHRkLCBtc3ZkeF9tbXVfaW52YWxpZDsKKwkJaWYgKGNtZF9zaXplX3Jl bWFpbiA8IE1UWF9HRU5NU0dfSEVBREVSX1NJWkUpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQln b3RvIG91dDsKKwkJfQorCQloZWFkZXIgPSAodW5pb24gbXNnX2hlYWRlciAqKWNtZDsKKwkJY3Vy X2NtZF9zaXplID0gaGVhZGVyLT5iaXRzLm1zZ19zaXplOworCQljdXJfY21kX2lkID0gaGVhZGVy LT5iaXRzLm1zZ190eXBlOworCQltbXVfcHRkID0gMDsKKwkJbXN2ZHhfbW11X2ludmFsaWQgPSAw OworCisJCUlQVlJfREVCVUdfVkVEKCJjbWQgc3RhcnQgYXQgJWx4IGN1cl9jbWRfc2l6ZSA9ICVk IgorCQkJICAgICAgICIgY3VyX2NtZF9pZCA9ICUwMnggZmVuY2UgPSAlMDh4XG4iLAorCQkJICAg ICAgICh1bnNpZ25lZCBsb25nKWNtZCwgY3VyX2NtZF9zaXplLAorCQkJICAgICAgIGN1cl9jbWRf aWQsIHNlcXVlbmNlKTsKKwkJaWYgKChjdXJfY21kX3NpemUgJSBzaXplb2YodWludDMyX3QpKQor CQkgICAgfHwgKGN1cl9jbWRfc2l6ZSA+IGNtZF9zaXplX3JlbWFpbikpIHsKKwkJCXJldCA9IC1F SU5WQUw7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGNtZCBzaXplIGVyciwgcmV0OiVkLlxuIiwgcmV0 KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJc3dpdGNoIChjdXJfY21kX2lkKSB7CisJCWNhc2Ug TVRYX01TR0lEX0RFQ09ERV9GRTogeworCQkJc3RydWN0IGZ3X2RlY29kZV9tc2cgKmRlY29kZV9t c2c7CisJCQlpZiAoc2l6ZW9mKHN0cnVjdCBmd19kZWNvZGVfbXNnKSA+IGNtZF9zaXplX3JlbWFp bikgeworCQkJCS8qIE1zZyBzaXplIGlzIG5vdCBjb3JyZWN0ICovCisJCQkJcmV0ID0gLUVJTlZB TDsKKwkJCQlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6IHdyb25nIG1zZyBzaXplLlxuIik7CisJCQkJ Z290byBvdXQ7CisJCQl9CisJCQlkZWNvZGVfbXNnID0gKHN0cnVjdCBmd19kZWNvZGVfbXNnICop Y21kOworCQkJZGVjb2RlX21zZy0+aGVhZGVyLmJpdHMubXNnX2ZlbmNlID0gc2VxdWVuY2U7CisK KwkJCW1tdV9wdGQgPSBpcHZyX2dldF9kZWZhdWx0X3BkX2FkZHIoZGV2X3ByaXYtPm1tdSk7CisJ CQltc3ZkeF9tbXVfaW52YWxpZCA9CisJCQkJYXRvbWljX2NtcHhjaGcoJmRldl9wcml2LT5pcHZy X21tdV9pbnZhbGRjLAorCQkJCQkgICAgICAgMSwgMCk7CisJCQlpZiAobXN2ZHhfbW11X2ludmFs aWQgPT0gMSkgeworCQkJCWRlY29kZV9tc2ctPmZsYWdfc2l6ZS5iaXRzLmZsYWdzIHw9CisJCQkJ CQlGV19JTlZBTElEQVRFX01NVTsKKwkJCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBTZXQgTU1VIGlu dmFsaWRhdGVcbiIpOworCQkJfQorCQkJLyoKKwkJCWlmIChtc3ZkeF9tbXVfaW52YWxpZCA9PSAx KQorCQkJCWlwdnJfbW11X3BndGFibGVfZHVtcChkZXYpOworCQkJKi8KKwkJCS8qIGlmIGN0eF9p ZCBpcyBub3QgcGFzc2VkLCB1c2UgZGVmYXVsdCBpZCAqLworCQkJaWYgKGRlY29kZV9tc2ctPm1t dV9jb250ZXh0LmJpdHMuY29udGV4dCA9PSAwKQorCQkJCWRlY29kZV9tc2ctPm1tdV9jb250ZXh0 LmJpdHMuY29udGV4dCA9CisJCQkJCWRldl9wcml2LT5kZWZhdWx0X2N0eC5jdHhfaWQ7CisKKwkJ CWRlY29kZV9tc2ctPm1tdV9jb250ZXh0LmJpdHMubW11X3B0ZCA9IG1tdV9wdGQgPj4gODsKKwkJ CUlQVlJfREVCVUdfVkVEKCJWRUQ6IE1TR0lEX0RFQ09ERV9GRToiCisJCQkJCSIgLSBmZW5jZTog JTA4eCIKKwkJCQkJIiAtIGZsYWdzOiAlMDh4IC0gYnVmZmVyX3NpemU6ICUwOHgiCisJCQkJCSIg LSBjcnRsX2FsbG9jX2FkZHI6ICUwOHgiCisJCQkJCSIgLSBjb250ZXh0OiAlMDh4IC0gbW11X3B0 ZDogJTA4eCIKKwkJCQkJIiAtIG9wZXJhdGluZ19tb2RlOiAlMDh4LlxuIiwKKwkJCQkJZGVjb2Rl X21zZy0+aGVhZGVyLmJpdHMubXNnX2ZlbmNlLAorCQkJCQlkZWNvZGVfbXNnLT5mbGFnX3NpemUu Yml0cy5mbGFncywKKwkJCQkJZGVjb2RlX21zZy0+ZmxhZ19zaXplLmJpdHMuYnVmZmVyX3NpemUs CisJCQkJCWRlY29kZV9tc2ctPmNydGxfYWxsb2NfYWRkciwKKwkJCQkJZGVjb2RlX21zZy0+bW11 X2NvbnRleHQuYml0cy5jb250ZXh0LAorCQkJCQlkZWNvZGVfbXNnLT5tbXVfY29udGV4dC5iaXRz Lm1tdV9wdGQsCisJCQkJCWRlY29kZV9tc2ctPm9wZXJhdGluZ19tb2RlKTsKKwkJCWJyZWFrOwor CQl9CisKKwkJY2FzZSBNVFhfTVNHSURfSE9TVF9CRV9PUFBfTUZMRDoKKwkJCXZlZF9wcml2LT5o b3N0X2JlX29wcF9lbmFibGVkID0gMTsKKwkJCXZlZF9wcml2LT5kZWJsb2NrX2NtZF9vZmZzZXQg PQorCQkJCQljbWRfc2l6ZSAtIGNtZF9zaXplX3JlbWFpbjsKKwkJY2FzZSBNVFhfTVNHSURfSU5U UkFfT09MRF9NRkxEOgorCQljYXNlIE1UWF9NU0dJRF9ERUJMT0NLX01GTEQ6IHsKKwkJCXN0cnVj dCBmd19kZWJsb2NrX21zZyAqZGVibG9ja19tc2c7CisJCQlpZiAoc2l6ZW9mKHN0cnVjdCBmd19k ZWJsb2NrX21zZykgPiBjbWRfc2l6ZV9yZW1haW4pIHsKKwkJCQkvKiBNc2cgc2l6ZSBpcyBub3Qg Y29ycmVjdCAqLworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJSVBWUl9ERUJVR19WRUQoIk1TVkRY OiB3cm9uZyBtc2cgc2l6ZS5cbiIpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJZGVibG9ja19t c2cgPSAoc3RydWN0IGZ3X2RlYmxvY2tfbXNnICopY21kOworCQkJbW11X3B0ZCA9IGlwdnJfZ2V0 X2RlZmF1bHRfcGRfYWRkcihkZXZfcHJpdi0+bW11KTsKKwkJCW1zdmR4X21tdV9pbnZhbGlkID0K KwkJCQlhdG9taWNfY21weGNoZygmZGV2X3ByaXYtPmlwdnJfbW11X2ludmFsZGMsCisJCQkJCQkx LCAwKTsKKwkJCWlmIChtc3ZkeF9tbXVfaW52YWxpZCA9PSAxKSB7CisJCQkJZGVibG9ja19tc2ct PmZsYWdfdHlwZS5iaXRzLmZsYWdzIHw9CisJCQkJCQkJRldfSU5WQUxJREFURV9NTVU7CisJCQkJ SVBWUl9ERUJVR19WRUQoIlZFRDogU2V0IE1NVSBpbnZhbGlkYXRlXG4iKTsKKwkJCX0KKworCQkJ LyogcGF0Y2ggdG8gcmlnaHQgY21kIHR5cGUgKi8KKwkJCWRlYmxvY2tfbXNnLT5oZWFkZXIuYml0 cy5tc2dfdHlwZSA9CisJCQkJCWN1cl9jbWRfaWQgLQorCQkJCQlNVFhfTVNHSURfREVCTE9DS19N RkxEICsKKwkJCQkJTVRYX01TR0lEX0RFQkxPQ0s7CisKKwkJCWRlYmxvY2tfbXNnLT5oZWFkZXIu Yml0cy5tc2dfZmVuY2UgPSBzZXF1ZW5jZSAmIDB4ZmZmZjsKKwkJCWRlYmxvY2tfbXNnLT5tbXVf Y29udGV4dC5iaXRzLm1tdV9wdGQgPSAobW11X3B0ZCA+PiA4KTsKKwkJCS8qIGlmIGN0eF9pZCBp cyBub3QgcGFzc2VkLCB1c2UgZGVmYXVsdCBpZCAqLworCQkJaWYgKGRlYmxvY2tfbXNnLT5tbXVf Y29udGV4dC5iaXRzLmNvbnRleHQgPT0gMCkKKwkJCQlkZWJsb2NrX21zZy0+bW11X2NvbnRleHQu Yml0cy5jb250ZXh0ID0KKwkJCQkJZGV2X3ByaXYtPmRlZmF1bHRfY3R4LmN0eF9pZDsKKwkJCUlQ VlJfREVCVUdfVkVEKCJWRUQ6IE1TR0lEX0RFQkxPQ0s6IgorCQkJCSIgLSBmZW5jZTogJTA4eCIK KwkJCQkiIC0gZmxhZ3M6ICUwOHggLSBzbGljZV9maWVsZF90eXBlOiAlMDh4IgorCQkJCSIgLSBv cGVyYXRpbmdfbW9kZTogJTA4eCIKKwkJCQkiIC0gY29udGV4dDogJTA4eCAtIG1tdV9wdGQ6ICUw OHgiCisJCQkJIiAtIGZyYW1lX2hlaWdodF9tYjogJTA4eCAtIHBpY193aWR0aF9tYjogJTA4eCIK KwkJCQkiIC0gYWRkcmVzc19hMDogJTA4eCAtIGFkZHJlc3NfYTE6ICUwOHgiCisJCQkJIiAtIG1i X3BhcmFtX2FkZHJlc3M6ICUwOHgiCisJCQkJIiAtIGV4dF9zdHJpZGVfYTogJTA4eCIKKwkJCQki IC0gYWRkcmVzc19iMDogJTA4eCAtIGFkZHJlc3NfYjE6ICUwOHgiCisJCQkJIiAtIGFsdF9vdXRw dXRfZmxhZ3NfYjogJTA4eC5cbiIsCisJCQkJZGVibG9ja19tc2ctPmhlYWRlci5iaXRzLm1zZ19m ZW5jZSwKKwkJCQlkZWJsb2NrX21zZy0+ZmxhZ190eXBlLmJpdHMuZmxhZ3MsCisJCQkJZGVibG9j a19tc2ctPmZsYWdfdHlwZS5iaXRzLnNsaWNlX2ZpZWxkX3R5cGUsCisJCQkJZGVibG9ja19tc2ct Pm9wZXJhdGluZ19tb2RlLAorCQkJCWRlYmxvY2tfbXNnLT5tbXVfY29udGV4dC5iaXRzLmNvbnRl eHQsCisJCQkJZGVibG9ja19tc2ctPm1tdV9jb250ZXh0LmJpdHMubW11X3B0ZCwKKwkJCQlkZWJs b2NrX21zZy0+cGljX3NpemUuYml0cy5mcmFtZV9oZWlnaHRfbWIsCisJCQkJZGVibG9ja19tc2ct PnBpY19zaXplLmJpdHMucGljX3dpZHRoX21iLAorCQkJCWRlYmxvY2tfbXNnLT5hZGRyZXNzX2Ew LAorCQkJCWRlYmxvY2tfbXNnLT5hZGRyZXNzX2ExLAorCQkJCWRlYmxvY2tfbXNnLT5tYl9wYXJh bV9hZGRyZXNzLAorCQkJCWRlYmxvY2tfbXNnLT5leHRfc3RyaWRlX2EsCisJCQkJZGVibG9ja19t c2ctPmFkZHJlc3NfYjAsCisJCQkJZGVibG9ja19tc2ctPmFkZHJlc3NfYjEsCisJCQkJZGVibG9j a19tc2ctPmFsdF9vdXRwdXRfZmxhZ3NfYik7CisJCQljbWQgKz0gKHNpemVvZihzdHJ1Y3QgZndf ZGVibG9ja19tc2cpIC0gY3VyX2NtZF9zaXplKTsKKwkJCWNtZF9zaXplX3JlbWFpbiAtPSAoc2l6 ZW9mKHN0cnVjdCBmd19kZWJsb2NrX21zZykgLQorCQkJCQkJY3VyX2NtZF9zaXplKTsKKwkJCWJy ZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQkvKiBNc2cgbm90IHN1cHBvcnRlZCAqLworCQkJcmV0 ID0gLUVJTlZBTDsKKwkJCUlQVlJfREVCVUdfV0FSTigiVkVEOiBtc2cgbm90IHN1cHBvcnRlZC5c biIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQljbWQgKz0gY3VyX2NtZF9zaXplOworCQljbWRf c2l6ZV9yZW1haW4gLT0gY3VyX2NtZF9zaXplOworCQlpZiAoKChzZXF1ZW5jZSsrKSAmIDB4Zikg PT0gMHhmKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJSVBWUl9ERUJVR19XQVJOKCJWRUQ6IHRv byBtYW55IGNtZHMsIGFib3J0LlxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXZlZF9w cml2LT5udW1fY21kID0gKCgtLXNlcXVlbmNlKSAmIDB4Zik7CisKKwlpcHZyX2ZlbmNlX2NyZWF0 ZShkZXZfcHJpdiwgJmZlbmNlLCAmZmVuY2VfZmQpOworCisJaXB2cl9mZW5jZV9idWZmZXJfb2Jq ZWN0cygmZGV2X3ByaXYtPnZhbGlkYXRlX2N0eC52YWxpZGF0ZV9saXN0LAorCQkJCWZlbmNlLCBm ZW5jZV9mZCk7CisKKwlpZiAoY29weV9jbWQpIHsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogY29w eWluZyBjb21tYW5kLlxuIik7CisKKwkJY21kX2NvcHkgPSBremFsbG9jKGNtZF9zaXplLCBHRlBf S0VSTkVMKTsKKwkJaWYgKGNtZF9jb3B5ID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJ CQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWwgdG8gY2FsbGMsIHJldD06JWRcbiIsIHJldCk7CisJCQln b3RvIG91dDsKKwkJfQorCQltZW1jcHkoY21kX2NvcHksIGNtZF9zdGFydCwgY21kX3NpemUpOwor CQkqdmVkX2NtZCA9IGNtZF9jb3B5OworCX0gZWxzZSB7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6 IGRpZCBOT1QgY29weSBjb21tYW5kLlxuIik7CisJCWlmIChkcm1faXB2cl90aWxpbmcpCisJCQlp cHZyX3NldF90aWxlKGRldiwgdmVkX3ByaXYtPmlwdnJfY3R4LT50aWxpbmdfc2NoZW1lLAorCQkJ CQl2ZWRfcHJpdi0+aXB2cl9jdHgtPnRpbGluZ19zdHJpZGUpOworCisjaWZkZWYgQ09ORklHX0RS TV9JUFZSX0VDCisJCWlmICh2ZWRfcHJpdi0+aG9zdF9iZV9vcHBfZW5hYmxlZCkgeworCQkJdmVk X3VwZGF0ZV9mcmFtZV9pbmZvKHZlZF9wcml2LAorCQkJCXZlZF9wcml2LT50ZmlsZSwKKwkJCQlj bWRfc3RhcnQgKyB2ZWRfcHJpdi0+ZGVibG9ja19jbWRfb2Zmc2V0KTsKKwkJfQorCQl2ZWRfYmFj a3VwX2NtZCh2ZWRfcHJpdiwgdmVkX3ByaXYtPnRmaWxlLAorCQkJCWNtZF9zdGFydCwKKwkJCQlj bWRfc2l6ZSwKKwkJCQl2ZWRfcHJpdi0+ZGVibG9ja19jbWRfb2Zmc2V0KTsKKyNlbmRpZgorCQly ZXQgPSB2ZWRfY21kX3NlbmQoZGV2LCBjbWRfc3RhcnQsIGNtZF9zaXplLCBpcHZyX2N0eCk7CisJ CWlmIChyZXQpIHsKKwkJCUlQVlJfRVJST1IoIlZFRDogdmVkX2NtZF9zZW5kIGZhaWxlZFxuIik7 CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfQorCitvdXQ6CisJa3VubWFwKHNnX3BhZ2UoY21k X2J1ZmZlci0+c2dfdGFibGUtPnNnbCkpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJl dHVybnM6CisgKiAtRUlOVkFMCisgKiAtRUZBVUxUCisgKiAtRU5PTUVNCisgKiAwCisgKi8KK3N0 YXRpYyBpbnQzMl90Cit2ZWRfc3VibWl0X2NtZGJ1Zl9jb3B5KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCisJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmNtZF9idWZmZXIsCisJCQkJdWlu dDMyX3QgY21kX3NpemUsCisJCQkJc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgsCisJCQkJ dWludDMyX3QgZmVuY2VfZmxhZykKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3By aXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBk ZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJc3RydWN0IHZlZF9jbWRfcXVldWUgKnZlZF9jbWQ7CisJ dWludDE2X3Qgc2VxdWVuY2UgPSAgKGRldl9wcml2LT5sYXN0X3NlcSA8PCA0KTsKKwl1bnNpZ25l ZCBsb25nIGlycV9mbGFnczsKKwl2b2lkICpjbWQgPSBOVUxMOworCWludDMyX3QgcmV0OworCisJ LyogcXVldWUgdGhlIGNvbW1hbmQgdG8gYmUgc2VudCB3aGVuIHRoZSBoL3cgaXMgcmVhZHkgKi8K KwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBxdWV1ZWluZyBzZXF1ZW5jZTolMDh4LlxuIiwKKwkJCSAg c2VxdWVuY2UpOworCXZlZF9jbWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmVkX2NtZF9xdWV1 ZSksCisJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHZlZF9jbWQgPT0gTlVMTCkgeworCQlJUFZS X0VSUk9SKCJNU1ZEWFFVRTogT3V0IG9mIG1lbW9yeS4uLlxuIik7CisJCXJldHVybiAtRU5PTUVN OworCX0KKworCXJldCA9IHZlZF9tYXBfY29tbWFuZChkZXYsIGNtZF9idWZmZXIsIGNtZF9zaXpl LAorCQkJCSZjbWQsIHNlcXVlbmNlLCAxLCBpcHZyX2N0eCk7CisJaWYgKHJldCkgeworCQlJUFZS X0VSUk9SKCJWRUQ6IEZhaWxlZCB0byBleHRyYWN0IGNtZFxuIik7CisJCWtmcmVlKHZlZF9jbWQp OworCQkvKiAtRUlOVkFMIG9yIC1FRkFVTFQgb3IgLUVOT01FTSAqLworCQlyZXR1cm4gcmV0Owor CX0KKwl2ZWRfY21kLT5jbWQgPSBjbWQ7CisJdmVkX2NtZC0+Y21kX3NpemUgPSBjbWRfc2l6ZTsK Kwl2ZWRfY21kLT5jbWRfc2VxID0gc2VxdWVuY2U7CisKKwl2ZWRfY21kLT50aWxpbmdfc2NoZW1l ID0gdmVkX3ByaXYtPmlwdnJfY3R4LT50aWxpbmdfc2NoZW1lOworCXZlZF9jbWQtPnRpbGluZ19z dHJpZGUgPSB2ZWRfcHJpdi0+aXB2cl9jdHgtPnRpbGluZ19zdHJpZGU7CisJdmVkX2NtZC0+ZGVi bG9ja19jbWRfb2Zmc2V0ID0KKwkJdmVkX3ByaXYtPmRlYmxvY2tfY21kX29mZnNldDsKKwl2ZWRf Y21kLT5ob3N0X2JlX29wcF9lbmFibGVkID0KKwkJdmVkX3ByaXYtPmhvc3RfYmVfb3BwX2VuYWJs ZWQ7CisJdmVkX2NtZC0+dGZpbGUgPQorCQl2ZWRfcHJpdi0+dGZpbGU7CisJdmVkX2NtZC0+aXB2 cl9jdHggPSBpcHZyX2N0eDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2Nr LCBpcnFfZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnZlZF9jbWQtPmhlYWQsICZ2ZWRfcHJpdi0+ dmVkX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ss IGlycV9mbGFncyk7CisJaWYgKCF2ZWRfcHJpdi0+dmVkX2J1c3kpIHsKKwkJdmVkX3ByaXYtPnZl ZF9idXN5ID0gMTsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogTmVlZCBpbW1lZGlhdGUgZGVxdWV1 ZS5cbiIpOworCQl2ZWRfY21kX2RlcXVldWVfc2VuZChkZXYpOworCX0KKworCXJldHVybiByZXQ7 Cit9CisKK2ludDMyX3QKK3ZlZF9zdWJtaXRfdmlkZW9fY21kYnVmKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCisJCQkJc3RydWN0IGRybV9pcHZyX2dlbV9vYmplY3QgKmNtZF9idWZmZXIsCisJCQkJ dWludDMyX3QgY21kX3NpemUsCisJCQkJc3RydWN0IGlwdnJfY29udGV4dCAqaXB2cl9jdHgsCisJ CQkJdWludDMyX3QgZmVuY2VfZmxhZykKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQxNl90IHNlcXVlbmNlID0gIChkZXZfcHJp di0+bGFzdF9zZXEgPDwgNCkgJiAweGZmZmY7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJ aW50MzJfdCByZXQgPSAwOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJp di0+dmVkX3ByaXZhdGU7CisjaWZkZWYgQ09ORklHX0RSTV9JUFZSX0VDCisJaW50IG9mZnNldCA9 IDA7CisjZW5kaWYKKworCWlmIChzZXF1ZW5jZSA9PSBJUFZSX0ZFTkNFX1NJR05BTEVEX1NFUSkg eworCQlzZXF1ZW5jZSA9ICAoKytkZXZfcHJpdi0+bGFzdF9zZXEgPDwgNCkgJiAweGZmZmY7CisJ fQorCisJaWYgKCF2ZWRfcHJpdi0+ZndfYjBfdXBsb2FkZWQpeworCQkvKiBub3QgbmVlZGVkIGZv ciBiYXl0cmFpbCAqLworCX0KKworCWlmICghaXB2cl9jdHgpIHsKKwkJSVBWUl9FUlJPUigiVkVE OiBudWxsIGN0eFxuIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXNwaW5fbG9ja19pcnFz YXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisKKwl2ZWRfcHJpdi0+aXB2cl9j dHggPSBpcHZyX2N0eDsKKworCUlQVlJfREVCVUdfVkVEKCJzZXF1ZW5jZSBpcyAweCV4LCBuZWVk c19yZXNldCBpcyAweCV4LlxuIiwKKwkJCXNlcXVlbmNlLCB2ZWRfcHJpdi0+dmVkX25lZWRzX3Jl c2V0KTsKKworCWlmICh2ZWRfcHJpdi0+dmVkX2J1c3kpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCQlyZXQgPSB2ZWRfc3VibWl0 X2NtZGJ1Zl9jb3B5KGRldiwgY21kX2J1ZmZlciwKKwkJCSAgICBjbWRfc2l6ZSwgaXB2cl9jdHgs IGZlbmNlX2ZsYWcpOworCisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHZlZF9wcml2LT52ZWRf bmVlZHNfcmVzZXQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYtPnZlZF9s b2NrLCBpcnFfZmxhZ3MpOworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiB3aWxsIHJlc2V0IG1zdmR4 LlxuIik7CisKKwkJaWYgKCF2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KSB7CisJCQlpZiAo dmVkX2NvcmVfcmVzZXQoZGV2X3ByaXYpKSB7CisJCQkJcmV0ID0gLUVCVVNZOworCQkJCUlQVlJf RVJST1IoIlZFRDogUmVzZXQgZmFpbGVkLlxuIik7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJ fQorCisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQgPSAwOworCQl2ZWRfcHJpdi0+dmVkX2J1 c3kgPSAwOworCisJCWlmICh2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KXsKKwkJCXJldCA9 IHZlZF9wb3N0X2luaXQoZGV2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJ CQkJSVBWUl9ERUJVR19XQVJOKCJWRUQ6IHZlZF9wb3N0X2luaXQgZmFpbC5cbiIpOworCQkJCXJl dHVybiByZXQ7CisJCQl9CisJCX0KKwkJZWxzZXsKKwkJCWlmIChpcHZyX3ZlZF9pbml0KGRldikp IHsKKwkJCQlyZXQgPSAtRUJVU1k7CisJCQkJSVBWUl9ERUJVR19XQVJOKCJWRUQ6IGlwdnJfdmVk X2luaXQgZmFpbC5cbiIpOworCQkJCXJldHVybiByZXQ7CisJCQl9CisJCX0KKworI2lmZGVmIENP TkZJR19EUk1fSVBWUl9FQworCQkvKiByZXN0b3JlIHRoZSBzdGF0ZSB3aGVuIHBvd2VyIHVwIGR1 cmluZyBFQyAqLworCQlpZiAodmVkX3ByaXYtPnZlY19lY19tZW1fc2F2ZWQpIHsKKwkJCWZvciAo b2Zmc2V0ID0gMDsgb2Zmc2V0IDwgNDsgKytvZmZzZXQpCisJCQkJVkVEX1JFR19XUklURTMyKAor CQkJCQl2ZWRfcHJpdi0+dmVjX2VjX21lbV9kYXRhW29mZnNldF0sCisJCQkJCTB4MmNiMCArIG9m ZnNldCAqIDQpOworCisJCQlWRURfUkVHX1dSSVRFMzIodmVkX3ByaXYtPnZlY19lY19tZW1fZGF0 YVs0XSwKKwkJCQkJMHgyY2M0KTsKKwkJCXZlZF9wcml2LT52ZWNfZWNfbWVtX3NhdmVkID0gMDsK KwkJfQorI2VuZGlmCisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnZlZF9wcml2LT52ZWRfbG9jaywg aXJxX2ZsYWdzKTsKKwl9CisKKwlpZiAodmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCAmJiAh dmVkX3ByaXYtPnJlbmRlY19pbml0aWFsaXplZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6 IHNldHVwIG1zdmR4LlxuIik7CisJCXJldCA9IHZlZF9wb3N0X2Jvb3RfaW5pdChkZXYpOworCQlp ZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGZhaWwgdG8gc2V0dXAgbXN2ZHguXG4iKTsK KwkJCS8qIEZJWE1FOiBmaW5kIGEgcHJvcGVyIHJldHVybiB2YWx1ZSAqLworCQkJcmV0dXJuIC1F RkFVTFQ7CisJCX0KKwkJdmVkX3ByaXYtPnJlbmRlY19pbml0aWFsaXplZCA9IDE7CisKKwkJSVBW Ul9ERUJVR19WRUQoIlZFRDogc2V0dXAgbXN2ZHggc3VjY2Vzc2Z1bGx5LlxuIik7CisJCXNwaW5f bG9ja19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJfQorCisJaWYg KCF2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0ICYmICF2ZWRfcHJpdi0+dmVkX2Z3X2xvYWRl ZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9m bGFncyk7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IHJlbG9hZCBGVyB0byBNVFhcbiIpOworCQly ZXQgPSB2ZWRfc2V0dXBfZncoZGV2KTsKKwkJaWYgKHJldCkgeworCQkJSVBWUl9FUlJPUigiVkVE OiBmYWlsIHRvIGxvYWQgRldcbiIpOworCQkJLyogRklYTUU6IGZpbmQgYSBwcm9wZXIgcmV0dXJu IHZhbHVlICovCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQl2ZWRfcHJpdi0+dmVkX2Z3X2xv YWRlZCA9IDE7CisKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDogbG9hZCBmaXJtd2FyZSBzdWNjZXNz ZnVsbHlcbiIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFf ZmxhZ3MpOworCX0KKworCXZlZF9wcml2LT52ZWRfYnVzeSA9IDE7CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCUlQVlJfREVCVUdfVkVE KCJWRUQ6IGNvbW1pdCBjb21tYW5kIHRvIEhXLHNlcT0weCUwOHhcbiIsCisJCQkgIHNlcXVlbmNl KTsKKwlyZXQgPSB2ZWRfbWFwX2NvbW1hbmQoZGV2LCBjbWRfYnVmZmVyLCBjbWRfc2l6ZSwKKwkJ CQlOVUxMLCBzZXF1ZW5jZSwgMCwgaXB2cl9jdHgpOworCWlmIChyZXQpCisJCUlQVlJfRVJST1Io IlZFRDogRmFpbGVkIHRvIGV4dHJhY3QgY21kLlxuIik7CisKKwlyZXR1cm4gcmV0OworfQorCisv KiBSZXR1cm5zOgorICogLUVJTlZBTAorICogLUVOT01FTQorICogLUVGQVVMVAorICogLUVCVVNZ CisgKi8KK2ludDMyX3QgdmVkX2NtZGJ1Zl92aWRlbyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwKKwkJCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpjbWRfYnVmZmVyLAorCQkJCQkJ dWludDMyX3QgY21kYnVmX3NpemUsCisJCQkJCQlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0 eCkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZmlsZV9wcml2LT5taW5vci0+ZGV2Owor CWludDMyX3QgcmV0OworCisJLyoKKwkgKiBDaGVjayB0aGlzLiBEb2Vzbid0IHNlZW0gcmlnaHQu IEhhdmUgZmVuY2luZyBkb25lIEFGVEVSIGNvbW1hbmQKKwkgKiBzdWJtaXNzaW9uIGFuZCBtYWtl IHN1cmUgZHJtX3ZlZF9pZGxlIGlkbGVzIHRoZSBWRUQgY29tcGxldGVseS4KKwkgKi8KKwlyZXQg PSB2ZWRfc3VibWl0X3ZpZGVvX2NtZGJ1ZihkZXYsIGNtZF9idWZmZXIsIGNtZGJ1Zl9zaXplLCBp cHZyX2N0eCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgaW50MzJfdCB2ZWRfaGFuZGxlX3BhbmljX21zZyhzdHJ1Y3QgdmVkX3ByaXZhdGUg KnZlZF9wcml2LAorCQkJCQlzdHJ1Y3QgZndfcGFuaWNfbXNnICpwYW5pY19tc2cpCit7CisJLyog Rm9yIFZYRDM4NSBmaXJtd2FyZSwgZmVuY2UgdmFsdWUgaXMgbm90IHZhbGlkYXRlIGhlcmUgKi8K Kwl1aW50MzJfdCBpLCBkaWZmID0gMDsKKwl1aW50MTZfdCBmZW5jZTsKKwl1aW50MzJfdCBlcnJf dHJpZywgaXJxX3N0cywgbW11X3N0cywgZG1hY19zdHM7CisJc3RydWN0IHZlZF9mcmFtZV9pbmZv ICpmYWlsZWRfZnJhbWUgPSBOVUxMOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp diA9IHZlZF9wcml2LT5kZXZfcHJpdjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3By aXYtPmRldjsKKwlJUFZSX0RFQlVHX1dBUk4oIk1TVkRYOiBNU0dJRF9DTURfSFdfUEFOSUM6Igor CQkgICJGYXVsdCBkZXRlY3RlZCIKKwkJICAiIC0gRmVuY2U6ICUwOHgiCisJCSAgIiAtIGZlX3N0 YXR1cyBtYjogJTA4eCIKKwkJICAiIC0gYmVfc3RhdHVzIG1iOiAlMDh4IgorCQkgICIgLSByZXNl cnZlZDI6ICUwOHgiCisJCSAgIiAtIGxhc3QgbWI6ICUwOHgiCisJCSAgIiAtIHJlc2V0dGluZyBh bmQgaWdub3JpbmcgZXJyb3JcbiIsCisJCSAgcGFuaWNfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVu Y2UsCisJCSAgcGFuaWNfbXNnLT5mZV9zdGF0dXMsCisJCSAgcGFuaWNfbXNnLT5iZV9zdGF0dXMs CisJCSAgcGFuaWNfbXNnLT5tYi5iaXRzLnJlc2VydmVkMiwKKwkJICBwYW5pY19tc2ctPm1iLmJp dHMubGFzdF9tYik7CisJLyoKKwkgKiBJZiBiaXQgOCBvZiBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVT IGlzIHNldCB0aGUgZmF1bHQKKwkgKiB3YXMgY2F1c2VkIGluIHRoZSBETUFDLiBJbiB0aGlzIGNh c2UgeW91IHNob3VsZAorCSAqIGNoZWNrIGJpdHMgMjA6MjIgb2YgTVNWRFhfSU5URVJSVVBUX1NU QVRVUy4KKwkgKiBJZiBiaXQgMjAgaXMgc2V0IHRoZXJlIHdhcyBhIHByb2JsZW0gRE1BaW5nIHRo ZSBidWZmZXIKKwkgKiBiYWNrIHRvIGhvc3QuIElmIGJpdCAyMiBpcyBzZXQgeW91J2xsIG5lZWQg dG8gZ2V0IHRoZQorCSAqIHZhbHVlIG9mIE1TVkRYX0RNQUNfU1RSRUFNX1NUQVRVUyAoMHg2NDgp LgorCSAqIElmIGJpdCAxIGlzIHNldCB0aGVuIHRoZXJlIHdhcyBhbiBpc3N1ZSBETUFpbmcKKwkg KiB0aGUgYml0c3RyZWFtIG9yIHRlcm1pbmF0aW9uIGNvZGUgZm9yIHBhcnNpbmcuCisJICovCisJ ZXJyX3RyaWcgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19FUlJPUl9UUklHKTsKKwlpcnFf c3RzID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19PRkZTRVQpOworCW1t dV9zdHMgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9NTVVfU1RBVFVTX09GRlNFVCk7CisJZG1hY19z dHMgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9ETUFDX1NUUkVBTV9TVEFUVVNfT0ZGU0VUKTsKKwlJ UFZSX0RFQlVHX1ZFRCgiTVNWRFg6IE1TVkRYX0NPTU1TX0VSUk9SX1RSSUcgaXMgMHgleCwiCisJ CSJNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTIGlzIDB4JXgsIgorCQkiTVNWRFhfTU1VX1NUQVRVUyBp cyAweCV4LCIKKwkJIk1TVkRYX0RNQUNfU1RSRUFNX1NUQVRVUyBpcyAweCV4LlxuIiwKKwkJZXJy X3RyaWcsIGlycV9zdHMsIG1tdV9zdHMsIGRtYWNfc3RzKTsKKworCXRyYWNlX3ZlZF9pcnFfcGFu aWMocGFuaWNfbXNnLCBlcnJfdHJpZywgaXJxX3N0cywgbW11X3N0cywgZG1hY19zdHMpOworCisJ ZmVuY2UgPSBwYW5pY19tc2ctPmhlYWRlci5iaXRzLm1zZ19mZW5jZTsKKworCWlmICh2ZWRfcHJp di0+ZndfbG9hZGVkX2J5X3B1bml0KQorCQl2ZWRfcHJpdi0+dmVkX25lZWRzX3Jlc2V0IHw9IE1T VkRYX1JFU0VUX05FRURTX1JFVVBMT0FEX0ZXIHwKKwkJCQkJTVNWRFhfUkVTRVRfTkVFRFNfSU5J VF9GVzsKKwllbHNlCisJCXZlZF9wcml2LT52ZWRfbmVlZHNfcmVzZXQgPSAxOworCisJZGlmZiA9 IHZlZF9wcml2LT52ZWRfY3VyX3NlcSAtIGRldl9wcml2LT5sYXN0X3NlcTsKKwlpZiAoZGlmZiA+ IDB4MEZGRkZGRkYpCisJCXZlZF9wcml2LT52ZWRfY3VyX3NlcSsrOworCisJSVBWUl9ERUJVR19X QVJOKCJWRUQ6IEZlbmNlIElEIG1pc3NpbmcsIGFzc3VtaW5nICUwOHhcbiIsCisJCQl2ZWRfcHJp di0+dmVkX2N1cl9zZXEpOworCisJaXB2cl9mZW5jZV9wcm9jZXNzKGRldl9wcml2LCB2ZWRfcHJp di0+dmVkX2N1cl9zZXEsIElQVlJfQ01EX0ZBSUxFRCk7CisKKwkvKiBGbHVzaCB0aGUgY29tbWFu ZCBxdWV1ZSAqLworCXZlZF9mbHVzaF9jbWRfcXVldWUoZGV2KTsKKwlpZiAodmVkX3ByaXYtPmhv c3RfYmVfb3BwX2VuYWJsZWQpIHsKKwkJLyogZ2V0IHRoZSBmcmFtZV9pbmZvIHN0cnVjdCBmb3Ig ZWMgZnJhbWUgKi8KKwkJZm9yIChpID0gMDsgaSA8IE1BWF9ERUNPREVfQlVGRkVSUzsgaSsrKSB7 CisJCQkvKiBieSBkZWZhdWx0IGZlbmNlIGlzIDAsIHNvIHRoZXJlIGlzIHByb2JsZW0gaGVyZSAq LworCQkJaWYgKHZlZF9wcml2LT5mcmFtZV9pbmZvW2ldLmZlbmNlID09IGZlbmNlKSB7CisJCQkJ ZmFpbGVkX2ZyYW1lID0gJnZlZF9wcml2LT5mcmFtZV9pbmZvW2ldOworCQkJCWJyZWFrOworCQkJ fQorCQl9CisJCWlmICghZmFpbGVkX2ZyYW1lKSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IGRpZG4n dCBmaW5kIGZyYW1lX2luZm8gd2hpY2ggbWF0Y2hlZCAiCisJCQkJInRoZSBmZW5jZSAlZCBpbiBw YW5pYyBtZXNzYWdlXG4iLCBmZW5jZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWZh aWxlZF9mcmFtZS0+Zndfc3RhdHVzID0gMTsgLyogc2V0IEVSUk9SIGZsYWcgKi8KKwl9CisJdmVk X3ByaXYtPmRlY29kaW5nX2VyciA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQzMl90 Cit2ZWRfaGFuZGxlX2NvbXBsZXRlZF9tc2coc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwK KwkJCQlzdHJ1Y3QgZndfY29tcGxldGVkX21zZyAqY29tcGxldGVkX21zZykKK3sKKwlzdHJ1Y3Qg ZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CisJdWludDE2X3QgZmVuY2UsIGZsYWdz OworCXN0cnVjdCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4OworCisJSVBWUl9ERUJVR19WRUQoIlZF RDogTVNHSURfQ01EX0NPTVBMRVRFRDoiCisJCSIgLSBGZW5jZTogJTA4eCAtIGZsYWdzOiAlMDh4 IC0gdmRlYmNyOiAlMDh4IgorCQkiIC0gZmlyc3RfbWIgOiAlZCAtIGxhc3RfbWI6ICVkXG4iLAor CQljb21wbGV0ZWRfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2UsCisJCWNvbXBsZXRlZF9tc2ct PmZsYWdzLCBjb21wbGV0ZWRfbXNnLT52ZGViY3IsCisJCWNvbXBsZXRlZF9tc2ctPm1iLmJpdHMu c3RhcnRfbWIsCisJCWNvbXBsZXRlZF9tc2ctPm1iLmJpdHMubGFzdF9tYik7CisKKwl0cmFjZV92 ZWRfaXJxX2NvbXBsZXRlZChjb21wbGV0ZWRfbXNnKTsKKworCWZsYWdzID0gY29tcGxldGVkX21z Zy0+ZmxhZ3M7CisJZmVuY2UgPSBjb21wbGV0ZWRfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2U7 CisKKwl2ZWRfcHJpdi0+dmVkX2N1cl9zZXEgPSBmZW5jZTsKKworI2lmIDAKKwlpZiAoSVNfTVJG TEQoZGV2KSkKKwkJdmVkX2Z3X2Vycm9yX2RldGVjdGVkKGRldiwgZmVuY2UsIGZsYWdzKTsKKyNl bmRpZgorCisJaXB2cl9mZW5jZV9wcm9jZXNzKGRldl9wcml2LCBmZW5jZSwgSVBWUl9DTURfU1VD Q0VTUyk7CisKKwlpcHZyX2N0eCA9IGlwdnJfZmluZF9jdHhfd2l0aF9mZW5jZShkZXZfcHJpdiwg ZmVuY2UpOworCWlmICh1bmxpa2VseShpcHZyX2N0eCA9PSBOVUxMKSkgeworCQlJUFZSX0RFQlVH X0dFTkVSQUwoImFibm9ybWFsIGNvbXBsZXRlIG1zZy5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsK Kwl9CisKKwlpZiAoZmxhZ3MgJiBGV19WQV9SRU5ERVJfSE9TVF9JTlQpIHsKKwkJLyogTm93IHNl bmQgdGhlIG5leHQgY29tbWFuZCBmcm9tIHRoZSBtc3ZkeCBjbWQgcXVldWUgKi8KKwkJdmVkX2Nt ZF9kZXF1ZXVlX3NlbmQoZGV2KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQzMl90 Cit2ZWRfaGFuZGxlX2NvbnRpZ3VpdHlfbXNnKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYs CisJCQkJc3RydWN0IGZ3X2NvbnRpZ3VpdHlfbXNnICpjb250aWd1aXR5X21zZykKK3sKKwlzdHJ1 Y3QgdmVkX2RlY29kZV9zdGF0dXMgKmZhdWx0X3JlZ2lvbiA9IE5VTEw7CisJc3RydWN0IHZlZF9l Y19jb250ZXh0ICp2ZWRfZWNfY3R4ID0gTlVMTDsKKwl1aW50MzJfdCByZWdfaWR4LCBpLCBmZW5j ZSwgc3RhcnQsIGVuZDsKKwlpbnQzMl90IGZvdW5kID0gMDsKKwlzdHJ1Y3QgdmVkX2RlY29kZV9z dGF0dXMgKmN1cl9kZWNfc3RhdHVzOworCisJSVBWUl9ERUJVR19WRUQoIlZFRDogTVNHSURfQ09O VElHVUlUWV9XQVJOSU5HOiIpOworCUlQVlJfREVCVUdfVkVEKCItIEZlbmNlOiAlMDh4IC0gZW5k X21iOiAlMDh4IC0gYmVnaW5fbWI6ICUwOHhcbiIsCisJCQljb250aWd1aXR5X21zZy0+aGVhZGVy LmJpdHMubXNnX2ZlbmNlLAorCQkJY29udGlndWl0eV9tc2ctPm1iLmJpdHMuZW5kX21iX251bSwK KwkJCWNvbnRpZ3VpdHlfbXNnLT5tYi5iaXRzLmJlZ2luX21iX251bSk7CisKKwl0cmFjZV92ZWRf aXJxX2NvbnRpZ3VpdHkoY29udGlndWl0eV9tc2cpOworCS8qIGdldCBlcnJvIGluZm8gKi8KKwlm ZW5jZSA9IGNvbnRpZ3VpdHlfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2U7CisJc3RhcnQgPSBj b250aWd1aXR5X21zZy0+bWIuYml0cy5iZWdpbl9tYl9udW07CisJZW5kID0gY29udGlndWl0eV9t c2ctPm1iLmJpdHMuZW5kX21iX251bTsKKworCS8qZ2V0IHRoZSBmcmFtZV9pbmZvIHN0cnVjdCBm b3IgZXJyb3IgY29uY2VhbG1lbnQgZnJhbWUqLworCWZvciAoaSA9IDA7IGkgPCBWRURfTUFYX0VD X0lOU1RBTkNFOyBpKyspCisJCWlmICh2ZWRfcHJpdi0+dmVkX2VjX2N0eFtpXS0+ZmVuY2UgPT0g KGZlbmNlICYgKH4weGYpKSkgeworCQkJdmVkX2VjX2N0eCA9IHZlZF9wcml2LT52ZWRfZWNfY3R4 W2ldOworCQkJZm91bmQrKzsKKwkJfQorCS8qIHZlZF9tdHhfbWVzc2FnZV9kdW1wKGRldik7ICov CisJaWYgKCF2ZWRfZWNfY3R4IHx8ICEodmVkX2VjX2N0eC0+dGZpbGUpIHx8IGZvdW5kID4gMSkg eworCQlJUFZSX0RFQlVHX1ZFRCgibm8gbWF0Y2hlZCBjdHg6IGZlbmNlIDB4JXgsICIKKwkJCSJm b3VuZCAlZCwgY3R4IDB4JTA4bHhcbiIsCisJCQlmZW5jZSwgZm91bmQsICh1bnNpZ25lZCBsb25n KXZlZF9lY19jdHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodmVkX2VjX2N0eC0+ Y3VyX2ZyYW1lX2luZm8pCisJCWN1cl9kZWNfc3RhdHVzID0gJnZlZF9lY19jdHgtPmN1cl9mcmFt ZV9pbmZvLT5kZWNvZGVfc3RhdHVzOworCisJZmF1bHRfcmVnaW9uID0gJnZlZF9lY19jdHgtPmRl Y29kZV9zdGF0dXM7CisJaWYgKHN0YXJ0ID4gZW5kKQorCQlzdGFydCA9IGVuZDsKKwlpZiAoc3Rh cnQgPCBWRURfRUNfUk9MTEJBQ0spCisJCXN0YXJ0ID0gMDsKKwllbHNlCisJCXN0YXJ0IC09IFZF RF9FQ19ST0xMQkFDSzsKKworCWlmIChmYXVsdF9yZWdpb24tPm51bV9yZWdpb24pIHsKKwkJcmVn X2lkeCA9IGZhdWx0X3JlZ2lvbi0+bnVtX3JlZ2lvbiAtIDE7CisJCWlmICgoc3RhcnQgPD0gZmF1 bHRfcmVnaW9uLT5tYl9yZWdpb25zW3JlZ19pZHhdLmVuZCkgJiYKKwkJICAgIChlbmQgPiBmYXVs dF9yZWdpb24tPm1iX3JlZ2lvbnNbcmVnX2lkeF0uZW5kKSkgeworCQkJZmF1bHRfcmVnaW9uLT5t Yl9yZWdpb25zW3JlZ19pZHhdLmVuZCA9IGVuZDsKKwkJCWlmICh2ZWRfZWNfY3R4LT5jdXJfZnJh bWVfaW5mbykgeworCQkJCWN1cl9kZWNfc3RhdHVzLT5tYl9yZWdpb25zW3JlZ19pZHhdLmVuZCA9 IGVuZDsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXJlZ19pZHggPSBmYXVsdF9yZWdpb24tPm51 bV9yZWdpb24rKzsKKwkJCWlmICh1bmxpa2VseShyZWdfaWR4ID49IE1BWF9TTElDRVNfUEVSX1BJ Q1RVUkUpKSB7CisJCQkJSVBWUl9ERUJVR19WRUQoInRvbyBtYW55IGZhdWx0IHJlZ2lvbnMuXG4i KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWZhdWx0X3JlZ2lvbi0+bWJfcmVnaW9u c1tyZWdfaWR4XS5zdGFydCA9IHN0YXJ0OworCQkJZmF1bHRfcmVnaW9uLT5tYl9yZWdpb25zW3Jl Z19pZHhdLmVuZCA9IGVuZDsKKwkJCWlmICh2ZWRfZWNfY3R4LT5jdXJfZnJhbWVfaW5mbykgewor CQkJCWN1cl9kZWNfc3RhdHVzLT5udW1fcmVnaW9uID0KKwkJCQkJZmF1bHRfcmVnaW9uLT5udW1f cmVnaW9uOworCQkJCWN1cl9kZWNfc3RhdHVzLT5tYl9yZWdpb25zW3JlZ19pZHhdLnN0YXJ0ID0K KwkJCQkJc3RhcnQ7CisJCQkJY3VyX2RlY19zdGF0dXMtPm1iX3JlZ2lvbnNbcmVnX2lkeF0uZW5k ID0gZW5kOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZmF1bHRfcmVnaW9uLT5udW1fcmVnaW9u Kys7CisJCWZhdWx0X3JlZ2lvbi0+bWJfcmVnaW9uc1swXS5zdGFydCA9IHN0YXJ0OworCQlmYXVs dF9yZWdpb24tPm1iX3JlZ2lvbnNbMF0uZW5kID0gZW5kOworCQlpZiAodmVkX2VjX2N0eC0+Y3Vy X2ZyYW1lX2luZm8pIHsKKwkJCWN1cl9kZWNfc3RhdHVzLT5udW1fcmVnaW9uID0gZmF1bHRfcmVn aW9uLT5udW1fcmVnaW9uOworCQkJY3VyX2RlY19zdGF0dXMtPm1iX3JlZ2lvbnNbMF0uc3RhcnQg PSBzdGFydDsKKwkJCWN1cl9kZWNfc3RhdHVzLT5tYl9yZWdpb25zWzBdLmVuZCA9IGVuZDsKKwkJ fQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludDMyX3QKK3ZlZF9oYW5kbGVfZGVibG9j a19yZXF1aXJlZF9tc2coc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwKKwkJCXN0cnVjdCBm d19kZWJsb2NrX3JlcXVpcmVkX21zZyAqZGVibG9ja19yZXF1aXJlZF9tc2cpCit7CisJdWludDMy X3QgaTsKKwlpbnQzMl90IGZvdW5kID0gMDsKKwlzdHJ1Y3QgdmVkX2VjX2NvbnRleHQgKnZlZF9l Y19jdHggPSBOVUxMOworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IHZlZF9w cml2LT5kZXZfcHJpdjsKKwl1aW50MTZfdCBmZW5jZSA9IGRlYmxvY2tfcmVxdWlyZWRfbXNnLT5o ZWFkZXIuYml0cy5tc2dfZmVuY2U7CisJSVBWUl9ERUJVR19WRUQoIlZFRDogTVRYX01TR0lEX0RF QkxPQ0tfUkVRVUlSRUQgRmVuY2U9JTA4eC5cbiIsIGZlbmNlKTsKKwlJUFZSX0RFQlVHX1ZFRCgi R2V0IGRlYmxvY2sgcmVxdWlyZWQgbXNnIGZvciBlYy5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBW RURfTUFYX0VDX0lOU1RBTkNFOyBpKyspCisJCWlmICh2ZWRfcHJpdi0+dmVkX2VjX2N0eFtpXS0+ ZmVuY2UgPT0gKGZlbmNlICYgKH4weGYpKSkgeworCQkJdmVkX2VjX2N0eCA9IHZlZF9wcml2LT52 ZWRfZWNfY3R4W2ldOworCQkJZm91bmQrKzsKKwkJfQorCisJdHJhY2VfdmVkX2lycV9kZWJsb2Nr X3JlcXVpcmVkKGRlYmxvY2tfcmVxdWlyZWRfbXNnKTsKKworCS8qIGlmIGZvdW5kID4gMSwgZmVu Y2Ugd3JhcHBpbmcgaGFwcGVucyAqLworCWlmICghdmVkX2VjX2N0eCB8fCAhKHZlZF9lY19jdHgt PnRmaWxlKSB8fCBmb3VuZCA+IDEpIHsKKwkJSVBWUl9ERUJVR19WRUQoIm5vIG1hdGNoZWQgY3R4 OiBmZW5jZSAweCV4LCAiCisJCQkiZm91bmQgJWQsIGN0eCAweCUwOGx4XG4iLAorCQkJZmVuY2Us IGZvdW5kLCAodW5zaWduZWQgbG9uZyl2ZWRfZWNfY3R4KTsKKwkJVkVEX1JFR19XUklURTMyKDAs IE1TVkRYX0NNRFNfRU5EX1NMSUNFX1BJQ1RVUkVfT0ZGU0VUKTsKKwkJVkVEX1JFR19XUklURTMy KDEsIE1TVkRYX0NNRFNfRU5EX1NMSUNFX1BJQ1RVUkVfT0ZGU0VUKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJdmVkX2VjX2N0eC0+Y3VyX2ZyYW1lX2luZm8tPmZ3X3N0YXR1cyA9IDE7CisJ dmVkX3ByaXYtPmN1cl9tc3ZkeF9lY19jdHggPSB2ZWRfZWNfY3R4OworCisJLypkbyBlcnJvciBj b25jZWFsbWVudCB3aXRoIGh3Ki8KKwlzY2hlZHVsZV93b3JrKCZ2ZWRfcHJpdi0+ZWNfd29yayk7 CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBNU1ZEWCBNVFggaW50ZXJydXB0CisgKi8KK3N0YXRp YyB2b2lkIHZlZF9tdHhfaW50ZXJydXB0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdGF0 aWMgdWludDMyX3QgYnVmWzEyOF07IC8qIG1lc3NhZ2UgYnVmZmVyICovCisJdWludDMyX3Qgcmlk eCwgd2lkeCwgYnVmX3NpemUsIGJ1Zl9vZmZzZXQ7CisJdWludDMyX3QgbnVtLCBvZnM7IC8qIG1l c3NhZ2UgbnVtIGFuZCBvZmZzZXQgKi8KKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0g ZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXVuaW9uIG1zZ19oZWFkZXIgKmhlYWRlcjsKKwlpbnQz Ml90IGNtZF9jb21wbGV0ZSA9IDA7CisJaW50IHJldDsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBH b3QgYSBWRUQgTVRYIGludGVycnVwdC5cbiIpOworCisJLyogd2UgbmVlZCBjbG9ja3MgZW5hYmxl ZCBiZWZvcmUgd2UgdG91Y2ggVkVDIGxvY2FsIHJhbSwKKwkgKiBidXQgZncgd2lsbCB0YWtlIGNh cmUgb2YgdGhlIGNsb2NrIGFmdGVyIGZ3IGlzIGxvYWRlZAorCSAqLworCitsb29wOiAvKiBqdXN0 IGZvciBjb2Rpbmcgc3R5bGUgY2hlY2sgKi8KKwlyaWR4ID0gVkVEX1JFR19SRUFEMzIoTVNWRFhf Q09NTVNfVE9fSE9TVF9SRF9JTkRFWCk7CisJd2lkeCA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NP TU1TX1RPX0hPU1RfV1JUX0lOREVYKTsKKworCS8qIEdldCBvdXQgb2YgaGVyZSBpZiBub3RoaW5n ICovCisJaWYgKHJpZHggPT0gd2lkeCkKKwkJZ290byBkb25lOworCisJYnVmX3NpemUgPSBWRURf UkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19IT1NUX0JVRl9TSVpFKSAmCisJCSgoMSA8PCAxNikg LSAxKTsKKwkvKjB4MjAwMCBpcyBWRUMgTG9jYWwgUmFtIG9mZnNldCovCisJYnVmX29mZnNldCA9 IChWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19IT1NUX0JVRl9TSVpFKSA+PiAxNikKKwkJ KyAweDIwMDA7CisKKwlvZnMgPSAwOworCWJ1ZltvZnNdID0gVkVEX1JFR19SRUFEMzIoYnVmX29m ZnNldCArIChyaWR4IDw8IDIpKTsKKwloZWFkZXIgPSAodW5pb24gbXNnX2hlYWRlciAqKWJ1ZjsK KworCS8qIHJvdW5kIHRvIG5lYXJlc3Qgd29yZCAqLworCW51bSA9IChoZWFkZXItPmJpdHMubXNn X3NpemUgKyAzKSAvIDQ7CisKKwkvKiBBU1NFUlQobnVtIDw9IHNpemVvZihidWYpIC8gc2l6ZW9m KHVpbnQzMl90KSk7ICovCisKKwlpZiAoKytyaWR4ID49IGJ1Zl9zaXplKQorCQlyaWR4ID0gMDsK KworCWZvciAob2ZzKys7IG9mcyA8IG51bTsgb2ZzKyspIHsKKwkJYnVmW29mc10gPSBWRURfUkVH X1JFQUQzMihidWZfb2Zmc2V0ICsgKHJpZHggPDwgMikpOworCisJCWlmICgrK3JpZHggPj0gYnVm X3NpemUpCisJCQlyaWR4ID0gMDsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIFJlYWQgaW5kZXggKi8K KwlWRURfUkVHX1dSSVRFMzIocmlkeCwgTVNWRFhfQ09NTVNfVE9fSE9TVF9SRF9JTkRFWCk7CisK KwlpZiAodmVkX3ByaXYtPnZlZF9uZWVkc19yZXNldCkKKwkJZ290byBsb29wOworCisJc3dpdGNo IChoZWFkZXItPmJpdHMubXNnX3R5cGUpIHsKKwljYXNlIE1UWF9NU0dJRF9IV19QQU5JQzogewor CQlzdHJ1Y3QgZndfcGFuaWNfbXNnICpwYW5pY19tc2cgPSAoc3RydWN0IGZ3X3BhbmljX21zZyAq KWJ1ZjsKKwkJY21kX2NvbXBsZXRlID0gMTsKKwkJdmVkX2hhbmRsZV9wYW5pY19tc2codmVkX3By aXYsIHBhbmljX21zZyk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljYXNlIE1UWF9NU0dJRF9DT01Q TEVURUQ6IHsKKwkJc3RydWN0IGZ3X2NvbXBsZXRlZF9tc2cgKmNvbXBsZXRlZF9tc2cgPQorCQkJ CQkoc3RydWN0IGZ3X2NvbXBsZXRlZF9tc2cgKilidWY7CisJCWNtZF9jb21wbGV0ZSA9IDE7CisJ CWlmICh2ZWRfaGFuZGxlX2NvbXBsZXRlZF9tc2codmVkX3ByaXYsIGNvbXBsZXRlZF9tc2cpKQor CQkJY21kX2NvbXBsZXRlID0gMDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBNVFhfTVNHSURfQ09O VElHVUlUWV9XQVJOSU5HOiB7CisJCXN0cnVjdCBmd19jb250aWd1aXR5X21zZyAqY29udGlndWl0 eV9tc2cgPQorCQkJCQkoc3RydWN0IGZ3X2NvbnRpZ3VpdHlfbXNnICopYnVmOworCQl2ZWRfaGFu ZGxlX2NvbnRpZ3VpdHlfbXNnKHZlZF9wcml2LCBjb250aWd1aXR5X21zZyk7CisJCWJyZWFrOwor CisJfQorCisJY2FzZSBNVFhfTVNHSURfREVCTE9DS19SRVFVSVJFRDogeworCQlzdHJ1Y3QgZndf ZGVibG9ja19yZXF1aXJlZF9tc2cgKmRlYmxvY2tfcmVxdWlyZWRfbXNnID0KKwkJCQkJKHN0cnVj dCBmd19kZWJsb2NrX3JlcXVpcmVkX21zZyAqKWJ1ZjsKKwkJdmVkX2hhbmRsZV9kZWJsb2NrX3Jl cXVpcmVkX21zZyh2ZWRfcHJpdiwgZGVibG9ja19yZXF1aXJlZF9tc2cpOworCQlicmVhazsKKwl9 CisJZGVmYXVsdDoKKwkJSVBWUl9FUlJPUigiVkVEOiB1bmtub3duIG1lc3NhZ2UgZnJvbSBNVFgs IElEOjB4JTA4eC5cbiIsCisJCQloZWFkZXItPmJpdHMubXNnX3R5cGUpOworCQlnb3RvIGRvbmU7 CisJfQorCitkb25lOgorCUlQVlJfREVCVUdfVkVEKCJWRUQgSW50ZXJydXB0OiBmaW5pc2ggcHJv Y2VzcyBhIG1lc3NhZ2UuXG4iKTsKKwlpZiAocmlkeCAhPSB3aWR4KSB7CisJCUlQVlJfREVCVUdf VkVEKCJWRUQ6IHRoZXJlIGFyZSBtb3JlIG1lc3NhZ2UgdG8gYmUgcmVhZC5cbiIpOworCQlnb3Rv IGxvb3A7CisJfQorCisJYXRvbWljX2RlYygmZGV2X3ByaXYtPnZlZF9wb3dlcl91c2FnZSk7CisJ cmV0ID0gcG1fcnVudGltZV9wdXQoJmRldi0+cGxhdGZvcm1kZXYtPmRldik7CisJaWYgKHVubGlr ZWx5KHJldCA8IDApKSB7CisJCUlQVlJfRVJST1IoIkVycm9yIHB1dCBWRUQgcG93ZXI6ICVkXG4i LCByZXQpOworCX0KKwlJUFZSX0RFQlVHX1BNKCJWRUQgcG93ZXIgcHV0LCB1c2FnZSBiZWNhbWUg JWRcbiIsCisJCWF0b21pY19yZWFkKCZkZXYtPnBsYXRmb3JtZGV2LT5kZXYucG93ZXIudXNhZ2Vf Y291bnQpKTsKKworCW1iKCk7CS8qIFRCRCBjaGVjayB0aGlzLi4uICovCit9CisKKy8qCisgKiBN U1ZEWCBpbnRlcnJ1cHQuCisgKi8KK2ludDMyX3QgdmVkX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2OworCXN0 cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXY7CisJdWludDMyX3QgbXN2ZHhfc3RhdDsKKworCWlm IChkZXYgPT0gTlVMTCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IGludmFsaWQgZGV2LlxuIik7CisJ CXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwor CXZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCW1zdmR4X3N0YXQgPSBWRURfUkVH X1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCk7CisKKwkvKiBkcml2ZXIgb25s eSBuZWVkcyB0byBoYW5kbGUgbXR4IGlycQorCSAqIEZvciBNTVUgZmF1bHQgaXJxLCB0aGVyZSdz IGFsd2F5cyBhIEhXIFBBTklDIGdlbmVyYXRlZAorCSAqIGlmIEhXL0ZXIGlzIHRvdGFsbHkgaGFu ZywgdGhlIGxvY2t1cCBmdW5jdGlvbiB3aWxsIGhhbmRsZQorCSAqIHRoZSByZXNldGluZworCSAq LworCWlmIChtc3ZkeF9zdGF0ICYgTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJR X01BU0spIHsKKwkJLypJZGVhbGx5IHdlIHNob3VsZCB3ZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIHRo aXMgKi8KKwkJSVBWUl9ERUJVR19JUlEoIlZFRDogTU1VIEZhdWx0OjB4JXhcbiIsIG1zdmR4X3N0 YXQpOworCisJCS8qIFBhdXNlIE1NVSAqLworCQlWRURfUkVHX1dSSVRFMzIoTVNWRFhfTU1VX0NP TlRST0wwX01NVV9QQVVTRV9NQVNLLAorCQkJICAgICBNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VU KTsKKwkJd21iKCk7CisKKwkJLyogQ2xlYXIgdGhpcyBpbnRlcnVwdCBiaXQgb25seSAqLworCQlW RURfUkVHX1dSSVRFMzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19NTVVfRkFVTFRfSVJRX01BU0ss CisJCQkgICAgIE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpOworCQlWRURfUkVHX1JFQUQz MihNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUKTsKKwkJcm1iKCk7CisKKwkJdmVkX3ByaXYt PnZlZF9uZWVkc19yZXNldCA9IDE7CisJfSBlbHNlIGlmIChtc3ZkeF9zdGF0ICYgTVNWRFhfSU5U RVJSVVBUX1NUQVRVU19NVFhfSVJRX01BU0spIHsKKwkJSVBWUl9ERUJVR19JUlEoIlZFRDogbXN2 ZHhfc3RhdDogMHgleChNVFgpXG4iLCBtc3ZkeF9zdGF0KTsKKworCQkvKiBDbGVhciBhbGwgaW50 ZXJ1cHQgYml0cyAqLworCQlpZiAodmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCkKKwkJCVZF RF9SRUdfV1JJVEUzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX01UWF9JUlFfTUFTSywKKwkJCQkg ICAgIE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpOworCQllbHNlCisJCQlWRURfUkVHX1dS SVRFMzIoMHhmZmZmLCBNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUKTsKKworCQlWRURfUkVH X1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUKTsKKwkJcm1iKCk7CisKKwkJdmVk X210eF9pbnRlcnJ1cHQoZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50MzJfdCB2ZWRf Y2hlY2tfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9w cml2YXRlICpkZXZfcHJpdjsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2OworCXVpbnQz Ml90IGxvb3AsIHJldDsKKworCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpZiAoIWRl dl9wcml2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9w cml2YXRlOworCWlmICghdmVkX3ByaXYpCisJCXJldHVybiAwOworCisJaWYgKHZlZF9wcml2LT5m d19sb2FkZWRfYnlfcHVuaXQgJiYgdmVkX3ByaXYtPnJlbmRlY19pbml0aWFsaXplZCA9PSAwKQor CQlyZXR1cm4gMDsKKworCWlmICghdmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCAmJiB2ZWRf cHJpdi0+dmVkX2Z3X2xvYWRlZCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICh2ZWRfcHJpdi0+ dmVkX2J1c3kpIHsKKwkJSVBWUl9ERUJVR19QTSgiVkVEOiB2ZWRfYnVzeSB3YXMgc2V0LCByZXR1 cm4gYnVzeS5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICh2ZWRfcHJpdi0+Zndf bG9hZGVkX2J5X3B1bml0KSB7CisJCWlmICghKFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX0ZX X1NUQVRVUykgJgorCQkJCQlNU1ZEWF9GV19TVEFUVVNfSFdfSURMRSkpIHsKKwkJCUlQVlJfREVC VUdfUE0oIk1TVkRYX0NPTU1TX1NJR05BVFVSRSByZWcgaXMgMHgleCxcbiIKKwkJCQkiTVNWRFhf Q09NTVNfRldfU1RBVFVTIHJlZyBpcyAweCV4LFxuIgorCQkJCSJpbmRpY2F0ZSBodyBpcyBidXN5 LlxuIiwKKwkJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19TSUdOQVRVUkUpLAorCQkJCVZF RF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX0ZXX1NUQVRVUykpOworCQkJcmV0dXJuIC1FQlVTWTsK KwkJfQorCX0KKworCS8qIG9uIHNvbWUgY29yZXMgYmVsb3cgNTA1MDIsIHRoZXJlIGlzIG9uZSBp bnN0YW5jZSB0aGF0CisJICogcmVhZCByZXF1ZXN0cyBtYXkgbm90IGdvIHRvIHplcm8gaXMgaW4g dGhlIGNhc2Ugb2YgYSBwYWdlIGZhdWx0LAorCSAqIGNoZWNrIGNvcmUgcmV2aXNpb24gYnkgcmVn IE1TVkRYX0NPUkVfUkVWLCAzODUgY29yZSBpcyAweDIwMDAxCisJICogY2hlY2sgaWYgbW11IHBh Z2UgZmF1bHQgaGFwcGVuZCBieSByZWcgTVNWRFhfSU5URVJSVVBUX1NUQVRVUywKKwkgKiBjaGVj ayB3YXMgaXQgYSBwYWdlIHRhYmxlIHJhdGhlciB0aGFuIGEgcHJvdGVjdGlvbiBmYXVsdAorCSAq IGJ5IHJlZyBNU1ZEWF9NTVVfU1RBVFVTLCBmb3Igc3VjaCBjYXNlLAorCSAqIG5lZWQgY2FsbCB2 ZWRfY29yZV9yZXNldCBhcyB0aGUgd29yayBhcm91bmQgKi8KKwlpZiAoKFZFRF9SRUdfUkVBRDMy KE1TVkRYX0NPUkVfUkVWX09GRlNFVCkgPCAweDAwMDUwNTAyKSAmJgorCQkoVkVEX1JFR19SRUFE MzIoTVNWRFhfSU5URVJSVVBUX1NUQVRVU19PRkZTRVQpCisJCQkmIE1TVkRYX0lOVEVSUlVQVF9T VEFUVVNfTU1VX0ZBVUxUX0lSUV9NQVNLKSAmJgorCQkoVkVEX1JFR19SRUFEMzIoTVNWRFhfTU1V X1NUQVRVU19PRkZTRVQpICYgMSkpIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJtbXUgcGFnZSBmYXVs dCwgcmVjb3ZlciBieSBjb3JlX3Jlc2V0LlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIGNo ZWNrIE1TVkRYX01NVV9NRU1fUkVRIHRvIGNvbmZpcm0gdGhlcmUncyBubyBtZW1vcnkgcmVxdWVz dHMgKi8KKwlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykKKwkJcmV0ID0gdmVkX3dh aXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LAorCQkJCQlNU1ZEWF9NTVVfTUVNX1JFUV9PRkZTRVQs CisJCQkJCTAsIDB4ZmYsIDEwMCwgMSk7CisJaWYgKHJldCkgeworCQlJUFZSX0RFQlVHX1dBUk4o Ik1TVkRYOiBNU1ZEWF9NTVVfTUVNX1JFUSByZWcgaXMgMHgleCxcbiIKKwkJCQkiaW5kaWNhdGUg bWVtIGJ1c3ksIHByZXZlbnQgcG93ZXIgb2ZmIHZlZCwiCisJCQkJIk1TVkRYX0NPTU1TX0ZXX1NU QVRVUyByZWcgaXMgMHgleCwiCisJCQkJIk1TVkRYX0NPTU1TX0VSUk9SX1RSSUcgcmVnIGlzIDB4 JXgsIiwKKwkJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9NTVVfTUVNX1JFUV9PRkZTRVQpLAorCQkJ CVZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX0ZXX1NUQVRVUyksCisJCQkJVkVEX1JFR19SRUFE MzIoTVNWRFhfQ09NTVNfRVJST1JfVFJJRykpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwkvKgor CQlpZiAodmVkX3ByaXYtPnZlZF9od19idXN5KSB7CisJCQlJUFZSX0RFQlVHX1BNKCJWRUQ6ICVz LCBIVyBpcyBidXN5XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJKi8K KwlyZXR1cm4gMDsKK30KKwordm9pZCB2ZWRfY2hlY2tfcmVzZXRfZncoc3RydWN0IGRybV9kZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVk X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2 ZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3MpOworCisJLyogaGFuZGxpbmcgZncgdXBs b2FkIGhlcmUgaWYgcmVxdWlyZWQgKi8KKwkvKiBwb3dlciBvZmYgZmlyc3QsIHRoZW4gaHdfYmVn aW4gd2lsbCBwb3dlciB1cC91cGxvYWQgRlcgY29ycmVjdGx5ICovCisJaWYgKHZlZF9wcml2LT52 ZWRfbmVlZHNfcmVzZXQgJiBNU1ZEWF9SRVNFVF9ORUVEU19SRVVQTE9BRF9GVykgeworCQl2ZWRf cHJpdi0+dmVkX25lZWRzX3Jlc2V0ICY9IH5NU1ZEWF9SRVNFVF9ORUVEU19SRVVQTE9BRF9GVzsK KwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVkX3ByaXYtPnZlZF9sb2NrLCBpcnFfZmxhZ3Mp OworCQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBmb3JjZSBwb3dlciBvZmYgVkVEIGR1ZSB0byBkZWNv ZGUgZXJyXG4iKTsKKwkJLypvc3BtX2FwbV9wb3dlcl9kb3duX3ZlZChkZXYsIDEpOyovCisJCXNw aW5fbG9ja19pcnFzYXZlKCZ2ZWRfcHJpdi0+dmVkX2xvY2ssIGlycV9mbGFncyk7CisJfQorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlZF9wcml2LT52ZWRfbG9jaywgaXJxX2ZsYWdzKTsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9jbWQuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pcHZyL3ZlZF9jbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m M2I1MTM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2NtZC5o CkBAIC0wLDAgKzEsMTA0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9jbWQuaDogVkVE IGhlYWRlciBmaWxlIHRvIHN1cHBvcnQgY29tbWFuZCBidWZmZXIgaGFuZGxpbmcKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQor ICogQ29weXJpZ2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAq IENvcHlyaWdodCAoYykgMjAwMyBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQ2VkYXIgUGFyaywg VGV4YXMuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cisg KiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJv c3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAgIEZlaSBKaWFu ZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5k ZWYgX1ZFRF9DTURfSF8KKyNkZWZpbmUgX1ZFRF9DTURfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2 LmgiCisjaW5jbHVkZSAiaXB2cl9kcm0uaCIKKyNpbmNsdWRlICJpcHZyX2dlbS5oIgorI2luY2x1 ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRfZWMuaCIKKyNpbmNsdWRlICJ2ZWRfcG0uaCIK KyNpbmNsdWRlICJpcHZyX2ZlbmNlLmgiCisjaW5jbHVkZSAiaXB2cl9leGVjLmgiCisKK2V4dGVy biBpbnQzMl90IGRybV9pcHZyX3RpbGluZzsKKworLyogSE9TVF9CRV9PUFAgcGFyYW1ldGVycyAq Lworc3RydWN0IEhPU1RfQkVfT1BQX1BBUkFNUyB7CisJdWludDMyX3QgaGFuZGxlOwkvKiBzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKiBvZiBSRUdJTyAqLworCXVpbnQzMl90IGJ1ZmZlcl9zdHJp ZGU7CisJdWludDMyX3QgYnVmZmVyX3NpemU7CisJdWludDMyX3QgcGljdHVyZV93aWR0aF9tYjsK Kwl1aW50MzJfdCBzaXplX21iOworfTsKKworc3RydWN0IHZlZF9jbWRfcXVldWUgeworCXN0cnVj dCBsaXN0X2hlYWQgaGVhZDsKKwl2b2lkICpjbWQ7CisJdWludDMyX3QgY21kX3NpemU7CisJdWlu dDE2X3QgY21kX3NlcTsKKwl1aW50MzJfdCBmZW5jZV9mbGFnOworCXVpbnQ4X3QgdGlsaW5nX3Nj aGVtZTsKKwl1aW50OF90IHRpbGluZ19zdHJpZGU7CisJdWludDMyX3QgaG9zdF9iZV9vcHBfZW5h YmxlZDsKKwl1aW50MzJfdCBkZWJsb2NrX2NtZF9vZmZzZXQ7CisJc3RydWN0IGRybV9maWxlICp0 ZmlsZTsKKwlzdHJ1Y3QgaXB2cl9jb250ZXh0ICppcHZyX2N0eDsKKwlpbnQzMl90IGZyYW1lX2Jv dW5kYXJ5OworfTsKKworI2RlZmluZSBWRURfUE1TVEFURV9QT1dFUlVQICAgICAgICAgICAgIDAK KyNkZWZpbmUgVkVEX1BNU1RBVEVfQ0xPQ0tHQVRFRCAgICAgICAgICAxCisjZGVmaW5lIFZFRF9Q TVNUQVRFX1BPV0VSRE9XTiAgICAgICAgICAgMgorCisjZGVmaW5lIFZFRF9ORVdfUE1TVEFURShk cm1fZGV2LCB2ZWRfcHJpdiwgbmV3X3N0YXRlKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdmVkX3By aXYtPnZlZF9wbXN0YXRlID0gbmV3X3N0YXRlOwkJCQlcCisJaWYgKG5ld19zdGF0ZSA9PSBWRURf UE1TVEFURV9QT1dFUkRPV04pCQkJCVwKKwkJdmVkX3ByaXYtPnBtX2dhdGluZ19jb3VudCsrOwkJ CQlcCisJc3lzZnNfbm90aWZ5X2RpcmVudCh2ZWRfcHJpdi0+c3lzZnNfcG1zdGF0ZSk7CQkJXAor CUlQVlJfREVCVUdfUE0oIlZFRDogJXMsIHBvd2VyIGdhdGluZyBjb3VudCAweCUwOHhcbiIsCQlc CisJCShuZXdfc3RhdGUgPT0gVkVEX1BNU1RBVEVfUE9XRVJVUCkgPyAicG93ZXJ1cCIJCVwKKwkJ OiAoKG5ld19zdGF0ZSA9PSBWRURfUE1TVEFURV9QT1dFUkRPV04pID8gInBvd2VyZG93biIJXAor CQkJOiAiY2xvY2tnYXRlZCIpLCB2ZWRfcHJpdi0+cG1fZ2F0aW5nX2NvdW50KTsJXAorfSB3aGls ZSAoMCkKKworaW50MzJfdCB2ZWRfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 CisKK2ludDMyX3QgdmVkX210eF9zZW5kKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp diwgY29uc3Qgdm9pZCAqbXNnKTsKKworaW50MzJfdCB2ZWRfY2hlY2tfaWRsZShzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KTsKKwordm9pZCB2ZWRfY2hlY2tfcmVzZXRfZncoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7CisKK3ZvaWQgdmVkX2ZsdXNoX2NtZF9xdWV1ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKKworaW50MzJfdCB2ZWRfY21kYnVmX3ZpZGVvKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9w cml2LAorCQkJCXN0cnVjdCBkcm1faXB2cl9nZW1fb2JqZWN0ICpjbWRfYnVmZmVyLAorCQkJCXVp bnQzMl90IGNtZGJ1Zl9zaXplLAorCQkJCXN0cnVjdCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4KTsK KworaW50MzJfdCB2ZWRfc3VibWl0X3ZpZGVvX2NtZGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LAorCQkJCQlzdHJ1Y3QgZHJtX2lwdnJfZ2VtX29iamVjdCAqY21kX2J1ZmZlciwKKwkJCQkJdWlu dDMyX3QgY21kX3NpemUsCisJCQkJCXN0cnVjdCBpcHZyX2NvbnRleHQgKmlwdnJfY3R4LAorCQkJ CQl1aW50MzJfdCBmZW5jZV9mbGFnKTsKKworaW50MzJfdCB2ZWRfY21kX2RlcXVldWVfc2VuZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaXB2ci92ZWRfZWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9lYy5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTUyY2MKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZWMuYwpAQCAtMCwwICsxLDU4NCBAQAorLyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCisgKiB2ZWRfZWMuYzogVkVEIGVycm9yIGNvbmNlYWxtZW50IHN1cHBvcnQg d2hlbiBkZWNvZGluZyBlcnJvciBoYXBwZW5lZAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJ bnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIElt YWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg V0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBu b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBG cmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoK KyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKiAg ICBMaSBaZW5nIDxsaS56ZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK KyNpbmNsdWRlICJ2ZWRfZWMuaCIKKyNpbmNsdWRlICJ2ZWRfY21kLmgiCisjaW5jbHVkZSAidmVk X21zZy5oIgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRfZncuaCIKKyNpbmNs dWRlICJ2ZWRfcG0uaCIKKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisKKyNkZWZpbmUg TUFYX1NJWkVfSU5fTUIJCSg0MDk2IC8gMTYpCisKK3N0YXRpYyBpbmxpbmUgaW50MzJfdAordmVk X2NtZF9wb3J0X3dyaXRlKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiwKKwkJdWlu dDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwgdWludDMyX3QgKmNtZF9zcGFjZSkKK3sKKwl1 aW50MzJfdCBtYXhfYXR0ZW1wdHMgPSAweGZmOworCXVpbnQzMl90IGF0dGVtcHRzID0gMDsKKwor CW1heF9hdHRlbXB0cyA9IDB4ZmY7CisJd2hpbGUgKCpjbWRfc3BhY2UgPT0gMCkgeworCQkqY21k X3NwYWNlID0gVkVEX1JFR19SRUFEMzIoCisJCQlNU1ZEWF9DT1JFX0NSX01TVkRYX0NPTU1BTkRf U1BBQ0VfT0ZGU0VUICsKKwkJCU1TVkRYX0NPUkVfQkFTRSk7CisJCWlmICgqY21kX3NwYWNlKQor CQkJYnJlYWs7CisJCUlQVlJfVURFTEFZKDIpOworCQlhdHRlbXB0cysrOworCQlpZiAoYXR0ZW1w dHMgPiBtYXhfYXR0ZW1wdHMpIHsKKwkJCUlQVlJfREVCVUdfV0FSTigiVkVEOiBwb2xsIGNtZCBz cGFjZSB0aW1lb3V0LlxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlWRURfUkVHX1dS SVRFMzIodmFsdWUsIG9mZnNldCArIE1TVkRYX0NNRFNfQkFTRSk7CisJKCpjbWRfc3BhY2UpLS07 CisJLyoKKwkgKklQVlJfREVCVUdfV0FSTigiVkVEOiBwb2xsIGNtZCBzcGFjZSBhdHRlbXB0cyAl ZFxuIiwgYXR0ZW1wdHMpOworCSovCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgVkVEX0NNRFBP UlRfV1JJVEUoX2Rldl9wcml2XywgX29mZnNldF8sIF9jbWRfLCBfY21kX3NwYWNlXykJXAorCWRv IHsJCQkJCQkJCVwKKwkJcmV0ID0gdmVkX2NtZF9wb3J0X3dyaXRlKF9kZXZfcHJpdl8sCQkJXAor CQkJCSBfb2Zmc2V0XywgX2NtZF8sICZfY21kX3NwYWNlXyk7CVwKKwkJaWYgKHJldCkgewkJCQkJ CVwKKwkJCUlQVlJfREVCVUdfV0FSTigiVkVEOiB3cml0ZSBjbWQgZmFpbCwgYWJvcnRcbiIpO1wK KwkJCWdvdG8gZWNfZG9uZTsJCQkJCVwKKwkJfQkJCQkJCQlcCisJfSB3aGlsZSAoMCk7CisKKyNk ZWZpbmUgVkVEX0NNRFBPUlRfV1JJVEVfRkFTVChfZGV2X3ByaXZfLCBfb2Zmc2V0XywgX2NtZF8s IF9jbWRfc3BhY2VfKVwKKwl2ZWRfY21kX3BvcnRfd3JpdGUoX2Rldl9wcml2XywgX29mZnNldF8s IF9jbWRfLCAmX2NtZF9zcGFjZV8pOwlcCisKK3ZvaWQgdmVkX2RvX2NvbmNlYWxtZW50KHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0K KwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdmVkX3ByaXZhdGUsIGVjX3dvcmspOworCXN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IE5VTEw7CisJc3RydWN0IHZlZF9lY19j b250ZXh0ICp2ZWRfZWNfY3R4ID0gdmVkX3ByaXYtPmN1cl9tc3ZkeF9lY19jdHg7CisJc3RydWN0 IHZlZF9kZWNvZGVfc3RhdHVzICpmYXVsdF9yZWdpb24gPSBOVUxMOworCXN0cnVjdCBmd19kZWJs b2NrX21zZyAqZGVibG9ja19tc2cgPQorCQkoc3RydWN0IGZ3X2RlYmxvY2tfbXNnICopKHZlZF9l Y19jdHgtPnVuZmVuY2VkX2NtZCArCisJCQl2ZWRfZWNfY3R4LT5kZWJsb2NrX2NtZF9vZmZzZXQp OworCXVpbnQzMl90IHdpZHRoX2luX21iLCBoZWlnaHRfaW5fbWIsIGNtZDsKKwlpbnQzMl90IGNv bmNlYWxfYWJvdmVfcm93ID0gMCwgbG9vcCwgbWJfbG9vcDsKKwl1aW50MzJfdCBjbWRfc3BhY2Ug PSAwOworCWludDMyX3QgcmV0ID0gMDsKKwlpbnQzMl90IHBtX3JldCA9IDA7CisKKwlwbV9yZXQg PSBwbV9ydW50aW1lX2dldF9zeW5jKCZkZXZfcHJpdi0+ZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsK KwlpZiAodW5saWtlbHkocG1fcmV0IDwgMCkpIHsKKwkJSVBWUl9FUlJPUigiRXJyb3IgZ2V0IFZF RCBwb3dlcjogJWRcbiIsIHBtX3JldCk7CisJCXJldHVybjsKKwl9CisKKwlkZXZfcHJpdiA9IHZl ZF9wcml2LT5kZXZfcHJpdjsKKwlmYXVsdF9yZWdpb24gPSAmdmVkX2VjX2N0eC0+ZGVjb2RlX3N0 YXR1czsKKworCS8qIENvbmNlYWxtZW50IHNob3VsZCBiZSBkb25lIGluIHRpbWUsCisJICogb3Ro ZXJ3aXNlIHBhbmljIG1zZyB3aWxsIGJlIHNpZ25hbGVkIGluIG1zdmR4CisJICovCisJcHJlZW1w dF9kaXNhYmxlKCk7CisKKwlpZiAodmVkX2VjX2N0eC0+ZGVibG9ja19jbWRfb2Zmc2V0ID09IFZF RF9JTlZBTElEX09GRlNFVCkgeworCQlJUFZSX0RFQlVHX1dBUk4oIlZFRDogaW52YWxpZCBtc2cg b2Zmc2V0LCBhYm9ydCBjb25jZWFsLlxuIik7CisJCWdvdG8gZWNfZG9uZTsKKwl9CisKKwlpZiAo ZmF1bHRfcmVnaW9uLT5udW1fcmVnaW9uID09IDApIHsKKwkJSVBWUl9ERUJVR19WRUQoIlZFRDog bm8gZmF1bHQgcmVnaW9uLlxuIik7CisJCWdvdG8gZWNfZG9uZTsKKwl9CisKKwl3aWR0aF9pbl9t YiA9IGRlYmxvY2tfbXNnLT5waWNfc2l6ZS5iaXRzLnBpY193aWR0aF9tYjsKKwloZWlnaHRfaW5f bWIgPSBkZWJsb2NrX21zZy0+cGljX3NpemUuYml0cy5mcmFtZV9oZWlnaHRfbWI7CisKKwl7CisJ CWludDMyX3QgaTsKKwkJZm9yIChpID0gMDsgaSA8IGZhdWx0X3JlZ2lvbi0+bnVtX3JlZ2lvbjsg aSsrKQorCQkJSVBWUl9ERUJVR19WRUQoIltyZWdpb24gJWRdIGlzICVkIHRvICVkXG4iLAorCQkJ CQkgaSwKKwkJCQkJIGZhdWx0X3JlZ2lvbi0+bWJfcmVnaW9uc1tpXS5zdGFydCwKKwkJCQkJIGZh dWx0X3JlZ2lvbi0+bWJfcmVnaW9uc1tpXS5lbmQpOworCQlJUFZSX0RFQlVHX1ZFRCgiTVNWRFg6 IE1TR0lEX0RFQkxPQ0s6IgorCQkJIiAtIGZlbmNlOiAlMDh4IgorCQkJIiAtIGZsYWdzOiAlMDh4 IC0gc2xpY2VfZmllbGRfdHlwZTogJTA4eCIKKwkJCSIgLSBvcGVyYXRpbmdfbW9kZTogJTA4eCIK KwkJCSIgLSBjb250ZXh0OiAlMDh4IC0gbW11X3B0ZDogJTA4eCIKKwkJCSIgLSBmcmFtZV9oZWln aHRfbWI6ICUwOHggLSBwaWNfd2lkdGhfbWI6ICUwOHgiCisJCQkiIC0gYWRkcmVzc19hMDogJTA4 eCAtIGFkZHJlc3NfYTE6ICUwOHgiCisJCQkiIC0gbWJfcGFyYW1fYWRkcmVzczogJTA4eCIKKwkJ CSIgLSBleHRfc3RyaWRlX2E6ICUwOHgiCisJCQkiIC0gYWRkcmVzc19iMDogJTA4eCAtIGFkZHJl c3NfYjE6ICUwOHgiCisJCQkiIC0gYWx0X291dHB1dF9mbGFnc19iOiAlMDh4LlxuIiwKKwkJCWRl YmxvY2tfbXNnLT5oZWFkZXIuYml0cy5tc2dfZmVuY2UsCisJCQlkZWJsb2NrX21zZy0+ZmxhZ190 eXBlLmJpdHMuZmxhZ3MsCisJCQlkZWJsb2NrX21zZy0+ZmxhZ190eXBlLmJpdHMuc2xpY2VfZmll bGRfdHlwZSwKKwkJCWRlYmxvY2tfbXNnLT5vcGVyYXRpbmdfbW9kZSwKKwkJCWRlYmxvY2tfbXNn LT5tbXVfY29udGV4dC5iaXRzLmNvbnRleHQsCisJCQlkZWJsb2NrX21zZy0+bW11X2NvbnRleHQu Yml0cy5tbXVfcHRkLAorCQkJZGVibG9ja19tc2ctPnBpY19zaXplLmJpdHMuZnJhbWVfaGVpZ2h0 X21iLAorCQkJZGVibG9ja19tc2ctPnBpY19zaXplLmJpdHMucGljX3dpZHRoX21iLAorCQkJZGVi bG9ja19tc2ctPmFkZHJlc3NfYTAsCisJCQlkZWJsb2NrX21zZy0+YWRkcmVzc19hMSwKKwkJCWRl YmxvY2tfbXNnLT5tYl9wYXJhbV9hZGRyZXNzLAorCQkJZGVibG9ja19tc2ctPmV4dF9zdHJpZGVf YSwKKwkJCWRlYmxvY2tfbXNnLT5hZGRyZXNzX2IwLAorCQkJZGVibG9ja19tc2ctPmFkZHJlc3Nf YjEsCisJCQlkZWJsb2NrX21zZy0+YWx0X291dHB1dF9mbGFnc19iKTsKKwkJSVBWUl9ERUJVR19W RUQoImRlYmxvY2sgYWRkcl9jMCBpcwkweCUwOHhcbiIsCisJCQkJCWRlYmxvY2tfbXNnLT5hZGRy ZXNzX2MwKTsKKwkJSVBWUl9ERUJVR19WRUQoImRlYmxvY2sgYWRkcl9jMSBpcwkweCUwOHhcbiIs CisJCQkJCWRlYmxvY2tfbXNnLT5hZGRyZXNzX2MxKTsKKwl9CisKKwlpZiAodW5saWtlbHkoIXdp ZHRoX2luX21iIHx8ICFoZWlnaHRfaW5fbWIgfHwKKwkJd2lkdGhfaW5fbWIgPiBNQVhfU0laRV9J Tl9NQiB8fAorCQloZWlnaHRfaW5fbWIgPiBNQVhfU0laRV9JTl9NQikpIHsKKwkJSVBWUl9ERUJV R19WRUQoIndyb25nIHBpYyBzaXplXG4iKTsKKwkJZ290byBlY19kb25lOworCX0KKworCWNtZCA9 IDA7CisJUkVHSU9fV1JJVEVfRklFTERfTElURShjbWQsIE1TVkRYX0NNRFMsCisJCQkgICAgICAg RElTUExBWV9QSUNUVVJFX1NJWkVfRElTUExBWV9QSUNUVVJFX0hFSUdIVCwKKwkJCSAgICAgICAo aGVpZ2h0X2luX21iICogMTYpIC0gMSk7CisJUkVHSU9fV1JJVEVfRklFTERfTElURShjbWQsIE1T VkRYX0NNRFMsCisJCQkgICAgICAgRElTUExBWV9QSUNUVVJFX1NJWkVfRElTUExBWV9QSUNUVVJF X1dJRFRILAorCQkJICAgICAgICh3aWR0aF9pbl9tYiAqIDE2KSAtIDEpOworCVZFRF9DTURQT1JU X1dSSVRFKGRldl9wcml2LAorCQkJCSBNU1ZEWF9DTURTX0RJU1BMQVlfUElDVFVSRV9TSVpFX09G RlNFVCwKKwkJCQkgY21kLCBjbWRfc3BhY2UpOworCisJY21kID0gMDsKKwlSRUdJT19XUklURV9G SUVMRF9MSVRFKGNtZCwgTVNWRFhfQ01EUywKKwkJCSAgICAgICBDT0RFRF9QSUNUVVJFX1NJWkVf Q09ERURfUElDVFVSRV9IRUlHSFQsCisJCQkgICAgICAgKGhlaWdodF9pbl9tYiAqIDE2KSAtIDEp OworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLCBNU1ZEWF9DTURTLAorCQkJICAgICAgIENP REVEX1BJQ1RVUkVfU0laRV9DT0RFRF9QSUNUVVJFX1dJRFRILAorCQkJICAgICAgICh3aWR0aF9p bl9tYiAqIDE2KSAtIDEpOworCVZFRF9DTURQT1JUX1dSSVRFKGRldl9wcml2LAorCQkJCSBNU1ZE WF9DTURTX0NPREVEX1BJQ1RVUkVfU0laRV9PRkZTRVQsCisJCQkJIGNtZCwgY21kX3NwYWNlKTsK KworCWNtZCA9IGRlYmxvY2tfbXNnLT5vcGVyYXRpbmdfbW9kZTsKKwlSRUdJT19XUklURV9GSUVM RChjbWQsIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREUsCisJCQkgIENIUk9NQV9GT1JNQVQsIDEp OworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERSwKKwkJ CSAgQVNZTkNfTU9ERSwgMSk7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9DTURTX09Q RVJBVElOR19NT0RFLAorCQkJICBDT0RFQ19NT0RFLCAzKTsKKwlSRUdJT19XUklURV9GSUVMRChj bWQsIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREUsCisJCQkgIENPREVDX1BST0ZJTEUsIDEpOwor CVZFRF9DTURQT1JUX1dSSVRFKGRldl9wcml2LCBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX09G RlNFVCwKKwkJCSAgY21kLCBjbWRfc3BhY2UpOworCisJLyogZGVzdCBmcmFtZSBhZGRyZXNzICov CisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCU1TVkRYX0NNRFNfTFVNQV9SRUNPTlNU UlVDVEVEX1BJQ1RVUkVfQkFTRV9BRERSRVNTRVNfT0ZGU0VULAorCQkJCSBkZWJsb2NrX21zZy0+ YWRkcmVzc19hMCwKKwkJCQkgY21kX3NwYWNlKTsKKworCVZFRF9DTURQT1JUX1dSSVRFKGRldl9w cml2LAorCQlNU1ZEWF9DTURTX0NIUk9NQV9SRUNPTlNUUlVDVEVEX1BJQ1RVUkVfQkFTRV9BRERS RVNTRVNfT0ZGU0VULAorCQkJCSBkZWJsb2NrX21zZy0+YWRkcmVzc19hMSwKKwkJCQkgY21kX3Nw YWNlKTsKKworCS8qIGNvbmNlYWwgZnJhbWUgYWRkcmVzcyAqLworCVZFRF9DTURQT1JUX1dSSVRF KGRldl9wcml2LAorCQlNU1ZEWF9DTURTX1JFRkVSRU5DRV9QSUNUVVJFX0JBU0VfQUREUkVTU0VT X09GRlNFVCwKKwkJCQkgZGVibG9ja19tc2ctPmFkZHJlc3NfYjAsCisJCQkJIGNtZF9zcGFjZSk7 CisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCU1TVkRYX0NNRFNfUkVGRVJFTkNFX1BJ Q1RVUkVfQkFTRV9BRERSRVNTRVNfT0ZGU0VUICsgNCwKKwkJCQkgZGVibG9ja19tc2ctPmFkZHJl c3NfYjEsCisJCQkJIGNtZF9zcGFjZSk7CisJY21kID0gMDsKKwlSRUdJT19XUklURV9GSUVMRChj bWQsIE1TVkRYX0NNRFNfU0xJQ0VfUEFSQU1TLCBTTElDRV9GSUVMRF9UWVBFLCAyKTsKKwlSRUdJ T19XUklURV9GSUVMRChjbWQsIE1TVkRYX0NNRFNfU0xJQ0VfUEFSQU1TLCBTTElDRV9DT0RFX1RZ UEUsIDEpOworCisJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCQkJIE1TVkRYX0NNRFNf U0xJQ0VfUEFSQU1TX09GRlNFVCwKKwkJCQkgY21kLCBjbWRfc3BhY2UpOworCisJY21kID0gZGVi bG9ja19tc2ctPmFsdF9vdXRwdXRfZmxhZ3NfYjsKKwlpZiAoKGNtZCAmIDMpICE9IDApIHsKKwkJ SVBWUl9ERUJVR19WRUQoIk1TVkRYOiBjb25jZWFsIHRvIHJvdGF0ZSBzdXJmYWNlXG4iKTsKKwl9 IGVsc2UgeworCQlWRURfQ01EUE9SVF9XUklURShkZXZfcHJpdiwKKwkJCU1TVkRYX0NNRFNfQUxU RVJOQVRJVkVfT1VUUFVUX1BJQ1RVUkVfUk9UQVRJT05fT0ZGU0VULAorCQkJCQkgY21kLCBjbWRf c3BhY2UpOworCisJCVZFRF9DTURQT1JUX1dSSVRFKGRldl9wcml2LAorCQkJTVNWRFhfQ01EU19W QzFfTFVNQV9SQU5HRV9NQVBQSU5HX0JBU0VfQUREUkVTU19PRkZTRVQsCisJCQkJIDAsIGNtZF9z cGFjZSk7CisKKwkJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCQlNU1ZEWF9DTURTX1ZD MV9DSFJPTUFfUkFOR0VfTUFQUElOR19CQVNFX0FERFJFU1NfT0ZGU0VULAorCQkJCSAwLCBjbWRf c3BhY2UpOworCisJCVZFRF9DTURQT1JUX1dSSVRFKGRldl9wcml2LAorCQkJTVNWRFhfQ01EU19W QzFfUkFOR0VfTUFQUElOR19GTEFHU19PRkZTRVQsCisJCQkJIDAsIGNtZF9zcGFjZSk7CisJfQor CisJY21kID0gZGVibG9ja19tc2ctPmV4dF9zdHJpZGVfYTsKKwlWRURfQ01EUE9SVF9XUklURShk ZXZfcHJpdiwKKwkJCSAgTVNWRFhfQ01EU19FWFRFTkRFRF9ST1dfU1RSSURFX09GRlNFVCwKKwkJ CSAgY21kLCBjbWRfc3BhY2UpOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IGZhdWx0X3JlZ2lv bi0+bnVtX3JlZ2lvbjsgbG9vcCsrKSB7CisKKwkJdWludDMyX3Qgc3RhcnQgPSBmYXVsdF9yZWdp b24tPm1iX3JlZ2lvbnNbbG9vcF0uc3RhcnQ7CisJCXVpbnQzMl90IGVuZCA9IGZhdWx0X3JlZ2lv bi0+bWJfcmVnaW9uc1tsb29wXS5lbmQ7CisJCXVpbnQzMl90IHgsIHk7CisKKwkJSVBWUl9ERUJV R19WRUQoIk1TVkRYOiByZWdpb24oJWQpIGlzICVkfiVkXG4iLAorCQkJbG9vcCwgc3RhcnQsIGVu ZCk7CisKKwkJaWYgKGNvbmNlYWxfYWJvdmVfcm93KQorCQkJc3RhcnQgLT0gd2lkdGhfaW5fbWI7 CisJCWlmIChlbmQgPiAod2lkdGhfaW5fbWIgKiBoZWlnaHRfaW5fbWIgLSAxKSkKKwkJCWVuZCA9 ICh3aWR0aF9pbl9tYiAqIGhlaWdodF9pbl9tYiAtIDEpOworCQlpZiAoc3RhcnQgPiBlbmQpCisJ CQlzdGFydCA9IDA7CisKKwkJSVBWUl9ERUJVR19WRUQoIk1TVkRYOiBtb2RpZnkgcmVnaW9uKCVk KSBpcyAlZH4lZFxuIiwKKwkJCWxvb3AsIHN0YXJ0LCBlbmQpOworCisJCXggPSBzdGFydCAlIHdp ZHRoX2luX21iOworCQl5ID0gc3RhcnQgLyB3aWR0aF9pbl9tYjsKKworCQlmb3IgKG1iX2xvb3Ag PSBzdGFydDsgbWJfbG9vcCA8PSBlbmQ7IG1iX2xvb3ArKywgeCsrKSB7CisJCQlpZiAoeCA+PSB3 aWR0aF9pbl9tYikgeworCQkJCXggPSAwOworCQkJCXkrKzsKKwkJCX0KKworCQkJLyogSVBWUl9E RUJVR19WRUQoIk1TVkRYOiBjb25jbGVhbWVudCAoJWQsJWQpXG4iLAorCQkJCXgsIHkpOyAqLwor CQkJaWYgKCh4ID09IDApICYmIChtYl9sb29wICE9IHN0YXJ0KSkKKwkJCQlWRURfQ01EUE9SVF9X UklURV9GQVNUKGRldl9wcml2LAorCQkJCQlNU1ZEWF9DTURTX0VORF9TTElDRV9QSUNUVVJFX09G RlNFVCwKKwkJCQkJMCwgY21kX3NwYWNlKTsKKwkJCWNtZCA9IDA7CisJCQlSRUdJT19XUklURV9G SUVMRF9MSVRFKGNtZCwKKwkJCQkJICAgICAgIE1TVkRYX0NNRFNfTUFDUk9CTE9DS19OVU1CRVIs CisJCQkJCSAgICAgICBNQl9DT0RFX1RZUEUsIDEpOworCQkJUkVHSU9fV1JJVEVfRklFTERfTElU RShjbWQsCisJCQkJCSAgICAgICBNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSLAorCQkJCQkg ICAgICAgTUJfTk9fWCwgeCk7CisJCQlSRUdJT19XUklURV9GSUVMRF9MSVRFKGNtZCwKKwkJCQkJ ICAgICAgIE1TVkRYX0NNRFNfTUFDUk9CTE9DS19OVU1CRVIsCisJCQkJCSAgICAgICBNQl9OT19Z LCB5KTsKKwkJCVZFRF9DTURQT1JUX1dSSVRFX0ZBU1QoZGV2X3ByaXYsCisJCQkJTVNWRFhfQ01E U19NQUNST0JMT0NLX05VTUJFUl9PRkZTRVQsCisJCQkJY21kLCBjbWRfc3BhY2UpOworCQkJVkVE X0NNRFBPUlRfV1JJVEVfRkFTVChkZXZfcHJpdiwKKwkJCQlNU1ZEWF9DTURTX01BQ1JPQkxPQ0tf UkVTSURVQUxfRk9STUFUX09GRlNFVCwKKwkJCQkwLCBjbWRfc3BhY2UpOworCQkJY21kID0gMDsK KwkJCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLAorCQkJCQlNU1ZEWF9DTURTX0lOVEVSX0JM T0NLX1BSRURJQ1RJT04sCisJCQkJCSAgICAgICBSRUZfSU5ERVhfQV9WQUxJRCwgMSk7CisJCQlS RUdJT19XUklURV9GSUVMRF9MSVRFKGNtZCwKKwkJCQkJTVNWRFhfQ01EU19JTlRFUl9CTE9DS19Q UkVESUNUSU9OLAorCQkJCQkgICAgICAgSU5URVJfUFJFRF9CTE9DS19TSVpFLCAwKTsKKwkJCVJF R0lPX1dSSVRFX0ZJRUxEX0xJVEUoY21kLAorCQkJCQlNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BS RURJQ1RJT04sCisJCQkJCSAgICAgICBSRUZfSU5ERVhfQSwgMCk7CisJCQlSRUdJT19XUklURV9G SUVMRF9MSVRFKGNtZCwKKwkJCQlNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT04sCisJ CQkJUkVGX0lOREVYX0IsIDApOworCQkJVkVEX0NNRFBPUlRfV1JJVEVfRkFTVChkZXZfcHJpdiwK KwkJCQlNU1ZEWF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT05fT0ZGU0VULAorCQkJCWNtZCwg Y21kX3NwYWNlKTsKKwkJCVZFRF9DTURQT1JUX1dSSVRFX0ZBU1QoZGV2X3ByaXYsCisJCQkJTVNW RFhfQ01EU19NT1RJT05fVkVDVE9SX09GRlNFVCwKKwkJCQkwLCBjbWRfc3BhY2UpOworCQl9CisK KwkJVkVEX0NNRFBPUlRfV1JJVEUoZGV2X3ByaXYsCisJCQkJTVNWRFhfQ01EU19FTkRfU0xJQ0Vf UElDVFVSRV9PRkZTRVQsCisJCQkJMCwgY21kX3NwYWNlKTsKKwl9CisKK2VjX2RvbmU6CisJLyog dHJ5IHRvIHVuYmxvY2sgcmVuZGVjICovCisJcmV0ID0gVkVEX0NNRFBPUlRfV1JJVEVfRkFTVChk ZXZfcHJpdiwKKwkJCQlNU1ZEWF9DTURTX0VORF9TTElDRV9QSUNUVVJFX09GRlNFVCwKKwkJCQkx LCBjbWRfc3BhY2UpOworCisJZmF1bHRfcmVnaW9uLT5udW1fcmVnaW9uID0gMDsKKworCXByZWVt cHRfZW5hYmxlKCk7CisKKwlwbV9yZXQgPSBwbV9ydW50aW1lX3B1dCgmZGV2X3ByaXYtPmRldi0+ cGxhdGZvcm1kZXYtPmRldik7CisJaWYgKHVubGlrZWx5KHBtX3JldCA8IDApKQorCQlJUFZSX0VS Uk9SKCJFcnJvciBwdXQgVkVEIHBvd2VyOiAlZFxuIiwgcG1fcmV0KTsKKworCUlQVlJfREVCVUdf VkVEKCJWRUQ6IEVDIGRvbmUsIHVubG9jayBtc3ZkeCByZXQgJWQuXG4iLCByZXQpOworCisJcmV0 dXJuOworfQorCitzdHJ1Y3QgdmVkX2VjX2NvbnRleHQgKnZlZF9maW5kX2VjX2N0eChzdHJ1Y3Qg dmVkX3ByaXZhdGUgKnZlZF9wcml2LAorCQkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKnRmaWxlLCB2b2lk ICpjbWQpCit7CisJaW50MzJfdCBpLCBmcmVlX2lkeDsKKwlzdHJ1Y3QgdmVkX2VjX2NvbnRleHQg KmVjX2N0eCA9IE5VTEw7CisJc3RydWN0IGZ3X2RlYmxvY2tfbXNnICpkZWJsb2NrX21zZyA9IChz dHJ1Y3QgZndfZGVibG9ja19tc2cgKiljbWQ7CisKKwlmcmVlX2lkeCA9IC0xOworCWZvciAoaSA9 IDA7IGkgPCBWRURfTUFYX0VDX0lOU1RBTkNFOyBpKyspIHsKKwkJaWYgKHZlZF9wcml2LT52ZWRf ZWNfY3R4W2ldLT50ZmlsZSA9PSB0ZmlsZSkKKwkJCWJyZWFrOworCQllbHNlIGlmIChmcmVlX2lk eCA8IDAgJiYKKwkJCSB2ZWRfcHJpdi0+dmVkX2VjX2N0eFtpXS0+dGZpbGUgPT0gTlVMTCkKKwkJ CWZyZWVfaWR4ID0gaTsKKwl9CisKKwlpZiAoaSA8IFZFRF9NQVhfRUNfSU5TVEFOQ0UpCisJCWVj X2N0eCA9IHZlZF9wcml2LT52ZWRfZWNfY3R4W2ldOworCWVsc2UgaWYgKGZyZWVfaWR4ID49IDAg JiYgY21kKSB7CisJCUlQVlJfREVCVUdfVkVEKCJhY3F1aXJlIGVjIGN0eCBpZHggJWQgZm9yIHRm aWxlIDB4JTA4bHguXG4iLAorCQkJCWZyZWVfaWR4LCAodW5zaWduZWQgbG9uZyl0ZmlsZSk7CisJ CWVjX2N0eCA9IHZlZF9wcml2LT52ZWRfZWNfY3R4W2ZyZWVfaWR4XTsKKwkJbWVtc2V0KGVjX2N0 eCwgMCwgc2l6ZW9mKCplY19jdHgpKTsKKwkJZWNfY3R4LT50ZmlsZSA9IHRmaWxlOworCQllY19j dHgtPmNvbnRleHRfaWQgPSBkZWJsb2NrX21zZy0+bW11X2NvbnRleHQuYml0cy5jb250ZXh0Owor CX0gZWxzZSB7CisJCUlQVlJfREVCVUdfVkVEKCJBdmFpbGFibGUgZWMgY3R4IGlzIG5vdCBmb3Vu ZC5cbiIpOworCX0KKworCXJldHVybiBlY19jdHg7Cit9CisKK3ZvaWQgdmVkX3VwZGF0ZV9mcmFt ZV9pbmZvKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsCisJCQkJc3RydWN0IGRybV9maWxl ICp0ZmlsZSwJdm9pZCAqY21kKQoreworCisJaW50MzJfdCBpLCBmcmVlX2lkeDsKKwlzdHJ1Y3Qg dmVkX2ZyYW1lX2luZm8gKmZyYW1lX2luZm87CisJc3RydWN0IGZ3X2RlYmxvY2tfbXNnICpkZWJs b2NrX21zZyA9IChzdHJ1Y3QgZndfZGVibG9ja19tc2cgKiljbWQ7CisJdWludDMyX3QgYnVmZmVy X2hhbmRsZSA9IGRlYmxvY2tfbXNnLT5tYl9wYXJhbV9hZGRyZXNzOworCisJc3RydWN0IHZlZF9l Y19jb250ZXh0ICplY19jdHg7CisKKwlJUFZSX0RFQlVHX1ZFRCgKKwkJInVwZGF0ZSBmcmFtZSBp bmZvIChoYW5kbGUgMHglMDh4KSBmb3IgZXJyb3IgY29uY2VhbG1lbnRcbiIsCisJCWJ1ZmZlcl9o YW5kbGUpOworCisJZWNfY3R4ID0gdmVkX2ZpbmRfZWNfY3R4KHZlZF9wcml2LCB0ZmlsZSwgY21k KTsKKworCWlmICghZWNfY3R4KQorCQlyZXR1cm47CisKKwlmcmVlX2lkeCA9IC0xOworCWZvciAo aSA9IDA7IGkgPCBNQVhfREVDT0RFX0JVRkZFUlM7IGkrKykgeworCQlpZiAoYnVmZmVyX2hhbmRs ZSA9PSBlY19jdHgtPmZyYW1lX2luZm9baV0uaGFuZGxlKQorCQkJYnJlYWs7CisJCWlmIChmcmVl X2lkeCA8IDAgJiYgZWNfY3R4LT5mcmFtZV9pbmZvW2ldLmhhbmRsZSA9PSAwKQorCQkJZnJlZV9p ZHggPSBpOworCX0KKworCWlmIChpIDwgTUFYX0RFQ09ERV9CVUZGRVJTKQorCQlmcmFtZV9pbmZv ID0gJmVjX2N0eC0+ZnJhbWVfaW5mb1tpXTsKKwllbHNlIGlmIChmcmVlX2lkeCA+PSAwKSB7CisJ CUlQVlJfREVCVUdfVkVEKCJhY3F1aXJlIGZyYW1lX2luZm8gc29sdCBpZHggJWRcbiIsIGZyZWVf aWR4KTsKKwkJZnJhbWVfaW5mbyA9ICZlY19jdHgtPmZyYW1lX2luZm9bZnJlZV9pZHhdOworCX0g ZWxzZSB7CisJCUlQVlJfREVCVUdfVkVEKCIlZCBzb2x0cyBvY2N1cGllZCwgYWJvcnQgdXBkYXRl IGZyYW1lX2luZm9cbiIsCisJCQkJTUFYX0RFQ09ERV9CVUZGRVJTKTsKKwkJcmV0dXJuOworCX0K KworCWZyYW1lX2luZm8tPmZ3X3N0YXR1cyA9IDA7CisJZnJhbWVfaW5mby0+aGFuZGxlID0gYnVm ZmVyX2hhbmRsZTsKKwlmcmFtZV9pbmZvLT5mZW5jZSA9IChkZWJsb2NrX21zZy0+aGVhZGVyLmJp dHMubXNnX2ZlbmNlICYgKH4weGYpKTsKKwlmcmFtZV9pbmZvLT5kZWNvZGVfc3RhdHVzLm51bV9y ZWdpb24gPSAwOworCWVjX2N0eC0+Y3VyX2ZyYW1lX2luZm8gPSBmcmFtZV9pbmZvOworfQorCit2 b2lkIHZlZF9iYWNrdXBfY21kKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsIHN0cnVjdCBk cm1fZmlsZSAqdGZpbGUsCisJCQl2b2lkICpjbWQsIHVpbnQzMl90IGNtZF9zaXplLAorCQkJdWlu dDMyX3QgZGVibG9ja19jbWRfb2Zmc2V0KQoreworCXN0cnVjdCBmd19kZWJsb2NrX21zZyAqZGVi bG9ja19tc2cgPSBOVUxMOworCisJc3RydWN0IHZlZF9lY19jb250ZXh0ICplY19jdHg7CisJdW5p b24gbXNnX2hlYWRlciAqaGVhZGVyOworCisJSVBWUl9ERUJVR19WRUQoImJhY2t1cCBjbWQgZm9y IHZlZCBlcnJvciBjb25jZWFsbWVudFxuIik7CisKKwllY19jdHggPSB2ZWRfZmluZF9lY19jdHgo dmVkX3ByaXYsIHRmaWxlLCBOVUxMKTsKKworCWlmICghZWNfY3R4KSB7CisJCUlQVlJfREVCVUdf VkVEKCJ0aGlzIGlzIG5vdCBhIGVjIGN0eCwgYWJvcnQgYmFja3VwIGNtZFxuIik7CisJCXJldHVy bjsKKwl9CisKKwlpZiAoZGVibG9ja19jbWRfb2Zmc2V0ICE9IFZFRF9JTlZBTElEX09GRlNFVCkK KwkJZGVibG9ja19tc2cgPSAoc3RydWN0IGZ3X2RlYmxvY2tfbXNnICopCisJCQkJKGNtZCArIGRl YmxvY2tfY21kX29mZnNldCk7CisKKwlpZiAoZGVibG9ja19tc2cgJiYKKwkgICAgZWNfY3R4LT5j b250ZXh0X2lkICE9IGRlYmxvY2tfbXNnLT5tbXVfY29udGV4dC5iaXRzLmNvbnRleHQpIHsKKwkJ SVBWUl9ERUJVR19WRUQoImJhY2t1cCBjbWQgYnV0IGZpbmQgbWlzLW1hdGNoIGNvbnRleHQgaWRc biIpOworCQlyZXR1cm47CisJfQorCisJZWNfY3R4LT5jbWRfc2l6ZSA9IGNtZF9zaXplOworCWVj X2N0eC0+ZGVibG9ja19jbWRfb2Zmc2V0ID0gZGVibG9ja19jbWRfb2Zmc2V0OworCW1lbWNweShl Y19jdHgtPnVuZmVuY2VkX2NtZCwgY21kLCBjbWRfc2l6ZSk7CisJZWNfY3R4LT5mZW5jZSA9IFZF RF9JTlZBTElEX0ZFTkNFOworCWhlYWRlciA9ICh1bmlvbiBtc2dfaGVhZGVyICopZWNfY3R4LT51 bmZlbmNlZF9jbWQ7CisJaWYgKGNtZF9zaXplKQorCQllY19jdHgtPmZlbmNlID0gaGVhZGVyLT5i aXRzLm1zZ19mZW5jZTsKKwllY19jdHgtPmZlbmNlICY9ICh+MHhmKTsKKwlJUFZSX0RFQlVHX1ZF RCgiYmFja3VwIGNtZCBmb3IgdmVkOiBmZW5jZSAweCUwOHgsIGNtZF9zaXplICVkXG4iLAorCQll Y19jdHgtPmZlbmNlLCBjbWRfc2l6ZSk7Cit9CisKK3ZvaWQgdmVkX210eF9tZXNzYWdlX2R1bXAo c3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludDMyX3QgaSwgYnVmX3NpemUsIGJ1Zl9vZmZz ZXQ7CisJYnVmX3NpemUgPQorCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19IT1NUX0JV Rl9TSVpFKSAmICgoMSA8PCAxNikgLSAxKTsKKwlidWZfb2Zmc2V0ID0KKwkJKFZFRF9SRUdfUkVB RDMyKE1TVkRYX0NPTU1TX1RPX0hPU1RfQlVGX1NJWkUpID4+IDE2KSArIDB4MjAwMDsKKworCUlQ VlJfREVCVUdfVkVEKCJEdW1wIHRvIEhPU1QgbWVzc2FnZSBidWZmZXIgKG9mZnNldDpzaXplKSUw NHg6JTA0eFxuIiwKKwkJCWJ1Zl9vZmZzZXQsIGJ1Zl9zaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwg YnVmX3NpemU7IGkgKz0gNCkgeworCQl1aW50MzJfdCByZWcxLCByZWcyLCByZWczLCByZWc0Owor CQlyZWcxID0gVkVEX1JFR19SRUFEMzIoYnVmX29mZnNldCArIGkgKiA0KTsKKwkJcmVnMiA9IFZF RF9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyBpICogNCArIDQpOworCQlyZWczID0gVkVEX1JFR19S RUFEMzIoYnVmX29mZnNldCArIGkgKiA0ICsgOCk7CisJCXJlZzQgPSBWRURfUkVHX1JFQUQzMihi dWZfb2Zmc2V0ICsgaSAqIDQgKyAxMik7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IDB4JTA0eDog MHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAorCQkJCShidWZfb2Zmc2V0ICsgaSAqIDQp LCByZWcxLCByZWcyLCByZWczLCByZWc0KTsKKwl9CisKKwlidWZfc2l6ZSA9IFZFRF9SRUdfUkVB RDMyKE1TVkRYX0NPTU1TX1RPX01UWF9CVUZfU0laRSkgJiAoKDEgPDwgMTYpIC0gMSk7CisJYnVm X29mZnNldCA9IChWRURfUkVHX1JFQUQzMihNU1ZEWF9DT01NU19UT19NVFhfQlVGX1NJWkUpID4+ IDE2KSArIDB4MjAwMDsKKworCUlQVlJfREVCVUdfVkVEKCJEdW1wIHRvIE1UWCBtZXNzYWdlIGJ1 ZmZlciAob2Zmc2V0OnNpemUpJTA0eDolMDR4XG4iLAorCQkJYnVmX29mZnNldCwgYnVmX3NpemUp OworCWZvciAoaSA9IDA7IGkgPCBidWZfc2l6ZTsgaSArPSA0KSB7CisJCXVpbnQzMl90IHJlZzEs IHJlZzIsIHJlZzMsIHJlZzQ7CisJCXJlZzEgPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsg aSAqIDQpOworCQlyZWcyID0gVkVEX1JFR19SRUFEMzIoYnVmX29mZnNldCArIGkgKiA0ICsgNCk7 CisJCXJlZzMgPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgaSAqIDQgKyA4KTsKKwkJcmVn NCA9IFZFRF9SRUdfUkVBRDMyKGJ1Zl9vZmZzZXQgKyBpICogNCArIDEyKTsKKwkJSVBWUl9ERUJV R19WRUQoIlZFRDogMHglMDR4OiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkJ KGJ1Zl9vZmZzZXQgKyBpICogNCksIHJlZzEsIHJlZzIsIHJlZzMsIHJlZzQpOworCX0KKworCWJ1 Zl9zaXplID0gMTI7CisJYnVmX29mZnNldCA9IDB4RkQwICsgMHgyMDAwOworCisJSVBWUl9ERUJV R19WRUQoIlZFRDogQ29tbSBoZWFkZXIgKG9mZnNldDpzaXplKSUwNHg6JTA0eFxuIiwKKwkJCWJ1 Zl9vZmZzZXQsIGJ1Zl9zaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnVmX3NpemU7IGkgKz0gNCkg eworCQl1aW50MzJfdCByZWcxLCByZWcyLCByZWczLCByZWc0OworCQlyZWcxID0gVkVEX1JFR19S RUFEMzIoYnVmX29mZnNldCArIGkgKiA0KTsKKwkJcmVnMiA9IFZFRF9SRUdfUkVBRDMyKGJ1Zl9v ZmZzZXQgKyBpICogNCArIDQpOworCQlyZWczID0gVkVEX1JFR19SRUFEMzIoYnVmX29mZnNldCAr IGkgKiA0ICsgOCk7CisJCXJlZzQgPSBWRURfUkVHX1JFQUQzMihidWZfb2Zmc2V0ICsgaSAqIDQg KyAxMik7CisJCUlQVlJfREVCVUdfVkVEKCJWRUQ6IDB4JTA0eDogMHglMDh4IDB4JTA4eCAweCUw OHggMHglMDh4XG4iLAorCQkJCShidWZfb2Zmc2V0ICsgaSAqIDQpLCByZWcxLCByZWcyLCByZWcz LCByZWc0KTsKKwl9CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBFcnJvciBzdGF0dXMgMHgyY2M0 OiAweCUwOHhcbiIsCisJCQlWRURfUkVHX1JFQUQzMigweDJjYzQpKTsKK30KKwordm9pZCB2ZWRf ZndfZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQl1aW50MzJfdCBm ZW5jZSwgdWludDMyX3QgZmxhZ3MpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9w cml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0g ZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXN0cnVjdCB2ZWRfZWNfY29udGV4dCAqdmVkX2VjX2N0 eCA9IE5VTEw7CisJc3RydWN0IHZlZF9mcmFtZV9pbmZvICpmcmFtZV9pbmZvID0gTlVMTDsKKwlp bnQzMl90IGksIGZvdW5kID0gMDsKKworCWlmICghKGZsYWdzICYgRldfREVWQV9FUlJPUl9ERVRF Q1RFRCkpCisJCXJldHVybjsKKworCS8qZ2V0IHRoZSBmcmFtZV9pbmZvIHN0cnVjdCBmb3IgZXJy b3IgY29uY2VhbG1lbnQgZnJhbWUqLworCWZvciAoaSA9IDA7IGkgPCBWRURfTUFYX0VDX0lOU1RB TkNFOyBpKyspCisJCWlmICh2ZWRfcHJpdi0+dmVkX2VjX2N0eFtpXS0+ZmVuY2UgPT0KKwkJCQkJ CShmZW5jZSAmICh+MHhmKSkpIHsKKwkJCXZlZF9lY19jdHggPSB2ZWRfcHJpdi0+dmVkX2VjX2N0 eFtpXTsKKwkJCWZvdW5kKys7CisJCX0KKwkvKiB2ZWRfbXR4X21lc3NhZ2VfZHVtcChkZXYpOyAq LworCWlmICghdmVkX2VjX2N0eCB8fCAhKHZlZF9lY19jdHgtPnRmaWxlKSB8fCBmb3VuZCA+IDEp IHsKKwkJSVBWUl9ERUJVR19WRUQoCisJCSJubyBtYXRjaGVkIGN0eDogZmVuY2UgMHgleCwgZm91 bmQgJWQsIGN0eCAweCUwOGx4XG4iLAorCQkJZmVuY2UsIGZvdW5kLCAodW5zaWduZWQgbG9uZyl2 ZWRfZWNfY3R4KTsKKwkJcmV0dXJuOworCX0KKworCWlmICh2ZWRfZWNfY3R4LT5jdXJfZnJhbWVf aW5mbyAmJgorCQl2ZWRfZWNfY3R4LT5jdXJfZnJhbWVfaW5mby0+ZmVuY2UgPT0gKGZlbmNlICYg KH4weGYpKSkgeworCQlmcmFtZV9pbmZvID0gdmVkX2VjX2N0eC0+Y3VyX2ZyYW1lX2luZm87CisJ fSBlbHNlIHsKKwkJaWYgKHZlZF9lY19jdHgtPmN1cl9mcmFtZV9pbmZvKQorCQkJSVBWUl9ERUJV R19WRUQoCisJCQkiY3VyX2ZyYW1lX2luZm8gZmVuY2UoJXgpIGRvZXNuJ3QgbWF0Y2ggZmVuY2Ug KCV4KS5cbiIsCisJCQkJdmVkX2VjX2N0eC0+Y3VyX2ZyYW1lX2luZm8tPmZlbmNlLCBmZW5jZSk7 CisJCWVsc2UKKwkJCUlQVlJfREVCVUdfVkVEKAorCQkJIlRoZSBwb2ludGVyIHZlZF9lY19jdHgt PmN1cl9mcmFtZV9pbmZvIGlzIG51bGxcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZyYW1l X2luZm8tPmRlY29kZV9zdGF0dXMubnVtX3JlZ2lvbikgeworCQlJUFZSX0RFQlVHX1ZFRCgiRXJy b3IgYWxyZWFkeSByZWNvcmQsIG5vIG5lZWQgcmVjb3JkIGFnYWluXG4iKTsKKwkJcmV0dXJuOwor CX0KKworCUlQVlJfREVCVUdfVkVEKCJyZWNvcmQgZXJyb3IgYXMgZmlyc3QgZmF1bHQgcmVnaW9u LlxuIik7CisJZnJhbWVfaW5mby0+ZGVjb2RlX3N0YXR1cy5udW1fcmVnaW9uKys7CisJZnJhbWVf aW5mby0+ZGVjb2RlX3N0YXR1cy5tYl9yZWdpb25zWzBdLnN0YXJ0ID0gMDsKKwlmcmFtZV9pbmZv LT5kZWNvZGVfc3RhdHVzLm1iX3JlZ2lvbnNbMF0uZW5kID0gMDsKKworCS8qCisJZm9yIChpID0g MDsgaSA8IE1BWF9ERUNPREVfQlVGRkVSUzsgaSsrKSB7CisJCWlmICh2ZWRfZWNfY3R4LT5mcmFt ZV9pbmZvW2ldLmZlbmNlID09IChmZW5jZSAmICh+MHhmKSkpIHsKKwkJCWJyZWFrOworCQl9CisK Kwl9CisJKi8KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9lYy5oIGIv ZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2VjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uYzVmOWZlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9lYy5oCkBAIC0wLDAgKzEsMjA3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9l Yy5oOiBWRUQgZXJyb3IgY29uY2VhbG1lbnQgaGVhZGVyIGZpbGUKKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQ29weXJp Z2h0IChjKSBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTGltaXRlZCwgVUsKKyAqIEFsbCBSaWdo dHMgUmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJz aW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVz ZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor ICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu LAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQS4KKyAqCisgKiBBdXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwu Y29tPgorICogICAgTGkgWmVuZyA8bGkuemVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCisjaWZuZGVmIF9WRURfRUNfSF8KKyNkZWZpbmUgX1ZFRF9FQ19IXworCisjaW5j bHVkZSAiaXB2cl9kcnYuaCIKKworI2RlZmluZSBWRURfSU5WQUxJRF9GRU5DRSAoMHhmZmZmKQor I2RlZmluZSBWRURfSU5WQUxJRF9PRkZTRVQgKDB4ZmZmZmZmZmYpCisjZGVmaW5lIFZFRF9FQ19S T0xMQkFDSyAoOSkKKworc3RydWN0IHZlZF9lY19jb250ZXh0IHsKKwlzdHJ1Y3QgZHJtX2ZpbGUg KnRmaWxlOyAvKiBwcm90ZWN0ZWQgYnkgY21kYnVmX211dGV4ICovCisJdWludDMyX3QgY29udGV4 dF9pZDsKKwlzdHJ1Y3QgdmVkX2ZyYW1lX2luZm8gZnJhbWVfaW5mb1tNQVhfREVDT0RFX0JVRkZF UlNdOworCXN0cnVjdCB2ZWRfZnJhbWVfaW5mbyAqY3VyX2ZyYW1lX2luZm87CisJaW50MzJfdCBm cmFtZV9pZHg7CisKKwkvKiAxMiByZW5kZXIgbXNnICsgMSBkZWJsb2NrIG1zZworCSAqIDEyICog MjAgKyAxICogNDggPSAyODg7CisJKi8KKwl1aW50OF90IHVuZmVuY2VkX2NtZFszMDBdOworCXVp bnQzMl90IGNtZF9zaXplOworCXVpbnQzMl90IGRlYmxvY2tfY21kX29mZnNldDsKKwl1aW50MTZf dCBmZW5jZTsKKwlzdHJ1Y3QgdmVkX2RlY29kZV9zdGF0dXMgZGVjb2RlX3N0YXR1czsKK307CisK KyNkZWZpbmUgX1BTQl9NU1ZEWF9FQ19IXworCisjZGVmaW5lIE1TVkRYX0NNRFNfQkFTRSAweDEw MDAKKyNkZWZpbmUgTVNWRFhfQ01EU19ESVNQTEFZX1BJQ1RVUkVfU0laRV9PRkZTRVQgKDB4MDAw MCkKKworLyogTVNWRFhfQ01EUywgRElTUExBWV9QSUNUVVJFX1NJWkUsIERJU1BMQVlfUElDVFVS RV9IRUlHSFQgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19ESVNQTEFZX1BJQ1RVUkVfU0laRV9ESVNQ TEFZX1BJQ1RVUkVfSEVJR0hUX01BU0sgXAorCSgweDAwRkZGMDAwKQorI2RlZmluZSBNU1ZEWF9D TURTX0RJU1BMQVlfUElDVFVSRV9TSVpFX0RJU1BMQVlfUElDVFVSRV9IRUlHSFRfU0hJRlQgKDEy KQorCisvKiBNU1ZEWF9DTURTLCBESVNQTEFZX1BJQ1RVUkVfU0laRSwgRElTUExBWV9QSUNUVVJF X1dJRFRIICovCisjZGVmaW5lIE1TVkRYX0NNRFNfRElTUExBWV9QSUNUVVJFX1NJWkVfRElTUExB WV9QSUNUVVJFX1dJRFRIX01BU0sgKDB4MDAwMDBGRkYpCisjZGVmaW5lIE1TVkRYX0NNRFNfRElT UExBWV9QSUNUVVJFX1NJWkVfRElTUExBWV9QSUNUVVJFX1dJRFRIX1NISUZUICgwKQorCisjZGVm aW5lIE1TVkRYX0NNRFNfQ09ERURfUElDVFVSRV9TSVpFX09GRlNFVCAoMHgwMDA0KQorCisvKiBN U1ZEWF9DTURTLCBDT0RFRF9QSUNUVVJFX1NJWkUsIENPREVEX1BJQ1RVUkVfSEVJR0hUICovCisj ZGVmaW5lIE1TVkRYX0NNRFNfQ09ERURfUElDVFVSRV9TSVpFX0NPREVEX1BJQ1RVUkVfSEVJR0hU X01BU0sgKDB4MDBGRkYwMDApCisjZGVmaW5lIE1TVkRYX0NNRFNfQ09ERURfUElDVFVSRV9TSVpF X0NPREVEX1BJQ1RVUkVfSEVJR0hUX1NISUZUICgxMikKKworLyogTVNWRFhfQ01EUywgQ09ERURf UElDVFVSRV9TSVpFLCBDT0RFRF9QSUNUVVJFX1dJRFRIICovCisjZGVmaW5lIE1TVkRYX0NNRFNf Q09ERURfUElDVFVSRV9TSVpFX0NPREVEX1BJQ1RVUkVfV0lEVEhfTUFTSyAoMHgwMDAwMEZGRikK KyNkZWZpbmUgTVNWRFhfQ01EU19DT0RFRF9QSUNUVVJFX1NJWkVfQ09ERURfUElDVFVSRV9XSURU SF9TSElGVCAoMCkKKworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX09GRlNFVCAo MHgwMDA4KQorCisvKiBNU1ZEWF9DTURTLCBPUEVSQVRJTkdfTU9ERSwgUlBSX0VOQUJMRSAqLwor I2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX1JQUl9FTkFCTEVfTUFTSyAoMHgyMDAw MDAwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERV9SUFJfRU5BQkxFX1NISUZU ICgyOSkKKworLyogTVNWRFhfQ01EUywgT1BFUkFUSU5HX01PREUsIFVTRV9FWFRfUk9XX1NUUklE RSAqLworI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX1VTRV9FWFRfUk9XX1NUUklE RV9NQVNLICgweDEwMDAwMDAwKQorI2RlZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX1VT RV9FWFRfUk9XX1NUUklERV9TSElGVCAoMjgpCisKKy8qIE1TVkRYX0NNRFMsIE9QRVJBVElOR19N T0RFLCBDSFJPTUFfSU5URVJMRUFWRUQgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdf TU9ERV9DSFJPTUFfSU5URVJMRUFWRURfTUFTSyAoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVNWRFhf Q01EU19PUEVSQVRJTkdfTU9ERV9DSFJPTUFfSU5URVJMRUFWRURfU0hJRlQgKDI3KQorLyogTVNW RFhfQ01EUywgT1BFUkFUSU5HX01PREUsIFJPV19TVFJJREUgKi8KKyNkZWZpbmUgTVNWRFhfQ01E U19PUEVSQVRJTkdfTU9ERV9ST1dfU1RSSURFX01BU0sgKDB4MDcwMDAwMDApCisjZGVmaW5lIE1T VkRYX0NNRFNfT1BFUkFUSU5HX01PREVfUk9XX1NUUklERV9TSElGVCAoMjQpCisKKy8qIE1TVkRY X0NNRFMsIE9QRVJBVElOR19NT0RFLCBDT0RFQ19QUk9GSUxFICovCisjZGVmaW5lIE1TVkRYX0NN RFNfT1BFUkFUSU5HX01PREVfQ09ERUNfUFJPRklMRV9NQVNLICgweDAwMzAwMDAwKQorI2RlZmlu ZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX0NPREVDX1BST0ZJTEVfU0hJRlQgKDIwKQorCisv KiBNU1ZEWF9DTURTLCBPUEVSQVRJTkdfTU9ERSwgQ09ERUNfTU9ERSAqLworI2RlZmluZSBNU1ZE WF9DTURTX09QRVJBVElOR19NT0RFX0NPREVDX01PREVfTUFTSyAoMHgwMDBGMDAwMCkKKyNkZWZp bmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERV9DT0RFQ19NT0RFX1NISUZUICgxNikKKworLyog TVNWRFhfQ01EUywgT1BFUkFUSU5HX01PREUsIEFTWU5DX01PREUgKi8KKyNkZWZpbmUgTVNWRFhf Q01EU19PUEVSQVRJTkdfTU9ERV9BU1lOQ19NT0RFX01BU0sgKDB4MDAwMDYwMDApCisjZGVmaW5l IE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfQVNZTkNfTU9ERV9TSElGVCAoMTMpCisKKy8qIE1T VkRYX0NNRFMsIE9QRVJBVElOR19NT0RFLCBDSFJPTUFfRk9STUFUICovCisjZGVmaW5lIE1TVkRY X0NNRFNfT1BFUkFUSU5HX01PREVfQ0hST01BX0ZPUk1BVF9NQVNLICgweDAwMDAxMDAwKQorI2Rl ZmluZSBNU1ZEWF9DTURTX09QRVJBVElOR19NT0RFX0NIUk9NQV9GT1JNQVRfU0hJRlQgKDEyKQor CisvKiBNU1ZEWF9DTURTLCBPUEVSQVRJTkdfTU9ERSwgSU5URVJMQUNFRCAqLworI2RlZmluZSBN U1ZEWF9DTURTX09QRVJBVElOR19NT0RFX0lOVEVSTEFDRURfTUFTSyAoMHgwMDAwMDgwMCkKKyNk ZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERV9JTlRFUkxBQ0VEX1NISUZUICgxMSkKKwor LyogTVNWRFhfQ01EUywgT1BFUkFUSU5HX01PREUsIE9WRVJMQVAgKi8KKyNkZWZpbmUgTVNWRFhf Q01EU19PUEVSQVRJTkdfTU9ERV9PVkVSTEFQX01BU0sgKDB4MDAwMDA0MDApCisjZGVmaW5lIE1T VkRYX0NNRFNfT1BFUkFUSU5HX01PREVfT1ZFUkxBUF9TSElGVCAoMTApCisKKy8qIE1TVkRYX0NN RFMsIE9QRVJBVElOR19NT0RFLCBQSUNfQ09ORE9WRVIgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19P UEVSQVRJTkdfTU9ERV9QSUNfQ09ORE9WRVJfTUFTSyAoMHgwMDAwMDMwMCkKKyNkZWZpbmUgTVNW RFhfQ01EU19PUEVSQVRJTkdfTU9ERV9QSUNfQ09ORE9WRVJfU0hJRlQgKDgpCisvKiBNU1ZEWF9D TURTLCBPUEVSQVRJTkdfTU9ERSwgREVCTE9DS19TVFJFTkdUSCAqLworI2RlZmluZSBNU1ZEWF9D TURTX09QRVJBVElOR19NT0RFX0RFQkxPQ0tfU1RSRU5HVEhfTUFTSyAoMHgwMDAwMDBFMCkKKyNk ZWZpbmUgTVNWRFhfQ01EU19PUEVSQVRJTkdfTU9ERV9ERUJMT0NLX1NUUkVOR1RIX1NISUZUICg1 KQorCisvKiBNU1ZEWF9DTURTLCBPUEVSQVRJTkdfTU9ERSwgUElDX1FVQU5UICovCisjZGVmaW5l IE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfUElDX1FVQU5UX01BU0sgKDB4MDAwMDAwMUYpCisj ZGVmaW5lIE1TVkRYX0NNRFNfT1BFUkFUSU5HX01PREVfUElDX1FVQU5UX1NISUZUICgwKQorCisj ZGVmaW5lIE1TVkRYX0NNRFNfTFVNQV9SRUNPTlNUUlVDVEVEX1BJQ1RVUkVfQkFTRV9BRERSRVNT RVNfT0ZGU0VUICgweDAwMEMpCisjZGVmaW5lIE1TVkRYX0NNRFNfQ0hST01BX1JFQ09OU1RSVUNU RURfUElDVFVSRV9CQVNFX0FERFJFU1NFU19PRkZTRVQgKDB4MDAxMCkKKworI2RlZmluZSBNU1ZE WF9DTURTX1JFRkVSRU5DRV9QSUNUVVJFX0JBU0VfQUREUkVTU0VTX09GRlNFVCAoMHgwMTAwKQor CisjZGVmaW5lIE1TVkRYX0NNRFNfU0xJQ0VfUEFSQU1TX09GRlNFVCAoMHgwNDAwKQorCisvKiBN U1ZEWF9DTURTLCBTTElDRV9QQVJBTVMsIFNMSUNFX0ZJRUxEX1RZUEUgKi8KKyNkZWZpbmUgTVNW RFhfQ01EU19TTElDRV9QQVJBTVNfU0xJQ0VfRklFTERfVFlQRV9NQVNLICgweDAwMDAwMDBDKQor I2RlZmluZSBNU1ZEWF9DTURTX1NMSUNFX1BBUkFNU19TTElDRV9GSUVMRF9UWVBFX1NISUZUICgy KQorCisKKy8qIE1TVkRYX0NNRFMsIFNMSUNFX1BBUkFNUywgU0xJQ0VfQ09ERV9UWVBFICovCisj ZGVmaW5lIE1TVkRYX0NNRFNfU0xJQ0VfUEFSQU1TX1NMSUNFX0NPREVfVFlQRV9NQVNLICgweDAw MDAwMDAzKQorI2RlZmluZSBNU1ZEWF9DTURTX1NMSUNFX1BBUkFNU19TTElDRV9DT0RFX1RZUEVf U0hJRlQgKDApCisKKyNkZWZpbmUgTVNWRFhfQ01EU19BTFRFUk5BVElWRV9PVVRQVVRfUElDVFVS RV9ST1RBVElPTl9PRkZTRVQgKDB4MDAzQykKKworI2RlZmluZSBNU1ZEWF9DTURTX1ZDMV9MVU1B X1JBTkdFX01BUFBJTkdfQkFTRV9BRERSRVNTX09GRlNFVCAoMHgwMDI4KQorI2RlZmluZSBNU1ZE WF9DTURTX1ZDMV9DSFJPTUFfUkFOR0VfTUFQUElOR19CQVNFX0FERFJFU1NfT0ZGU0VUICgweDAw MkMpCisjZGVmaW5lIE1TVkRYX0NNRFNfVkMxX1JBTkdFX01BUFBJTkdfRkxBR1NfT0ZGU0VUICgw eDAwMzApCisKKyNkZWZpbmUgTVNWRFhfQ01EU19FWFRFTkRFRF9ST1dfU1RSSURFX09GRlNFVCAo MHgwMDQwKQorCisjZGVmaW5lIE1TVkRYX0NNRFNfTUFDUk9CTE9DS19OVU1CRVJfT0ZGU0VUICgw eDA0MDgpCisKKy8qIE1TVkRYX0NNRFMsIE1BQ1JPQkxPQ0tfTlVNQkVSLCBNQl9DT0RFX1RZUEUg Ki8KKyNkZWZpbmUgTVNWRFhfQ01EU19NQUNST0JMT0NLX05VTUJFUl9NQl9DT0RFX1RZUEVfTUFT SyAoMHgwMDAzMDAwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19NQUNST0JMT0NLX05VTUJFUl9NQl9D T0RFX1RZUEVfU0hJRlQgKDE2KQorCisvKiBNU1ZEWF9DTURTLCBNQUNST0JMT0NLX05VTUJFUiwg TUJfTk9fWSAqLworI2RlZmluZSBNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSX01CX05PX1lf TUFTSyAoMHgwMDAwRkYwMCkKKyNkZWZpbmUgTVNWRFhfQ01EU19NQUNST0JMT0NLX05VTUJFUl9N Ql9OT19ZX1NISUZUICg4KQorCisvKiBNU1ZEWF9DTURTLCBNQUNST0JMT0NLX05VTUJFUiwgTUJf Tk9fWCAqLworI2RlZmluZSBNU1ZEWF9DTURTX01BQ1JPQkxPQ0tfTlVNQkVSX01CX05PX1hfTUFT SyAoMHgwMDAwMDBGRikKKyNkZWZpbmUgTVNWRFhfQ01EU19NQUNST0JMT0NLX05VTUJFUl9NQl9O T19YX1NISUZUICgwKQorCisjZGVmaW5lIE1TVkRYX0NNRFNfTUFDUk9CTE9DS19SRVNJRFVBTF9G T1JNQVRfT0ZGU0VUICgweDA0MTgpCisKKyNkZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9CTE9DS19Q UkVESUNUSU9OX09GRlNFVCAoMHgwNDMwKQorCisvKiBNU1ZEWF9DTURTLCBJTlRFUl9CTE9DS19Q UkVESUNUSU9OLCBSRUZfSU5ERVhfQV9WQUxJRCAqLworI2RlZmluZSBNU1ZEWF9DTURTX0lOVEVS X0JMT0NLX1BSRURJQ1RJT05fUkVGX0lOREVYX0FfVkFMSURfTUFTSyAoMHgwMDAwMDAyMCkKKyNk ZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9CTE9DS19QUkVESUNUSU9OX1JFRl9JTkRFWF9BX1ZBTElE X1NISUZUICg1KQorCisvKiBNU1ZEWF9DTURTLCBJTlRFUl9CTE9DS19QUkVESUNUSU9OLCBJTlRF Ul9QUkVEX0JMT0NLX1NJWkUgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9CTE9DS19QUkVE SUNUSU9OX0lOVEVSX1BSRURfQkxPQ0tfU0laRV9NQVNLICgweDcwMDAwKQorI2RlZmluZSBNU1ZE WF9DTURTX0lOVEVSX0JMT0NLX1BSRURJQ1RJT05fSU5URVJfUFJFRF9CTE9DS19TSVpFX1NISUZU ICgxNikKKworLyogTVNWRFhfQ01EUywgSU5URVJfQkxPQ0tfUFJFRElDVElPTiwgUkVGX0lOREVY X0EgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9CTE9DS19QUkVESUNUSU9OX1JFRl9JTkRF WF9BX01BU0sgKDB4MDAwMDAwMEYpCisjZGVmaW5lIE1TVkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJF RElDVElPTl9SRUZfSU5ERVhfQV9TSElGVCAoMCkKKworLyogTVNWRFhfQ01EUywgSU5URVJfQkxP Q0tfUFJFRElDVElPTiwgUkVGX0lOREVYX0IgKi8KKyNkZWZpbmUgTVNWRFhfQ01EU19JTlRFUl9C TE9DS19QUkVESUNUSU9OX1JFRl9JTkRFWF9CX01BU0sgKDB4MDAwMDBGMDApCisjZGVmaW5lIE1T VkRYX0NNRFNfSU5URVJfQkxPQ0tfUFJFRElDVElPTl9SRUZfSU5ERVhfQl9TSElGVCAoOCkKKwor I2RlZmluZSBNU1ZEWF9DTURTX01PVElPTl9WRUNUT1JfT0ZGU0VUICgweDA1MDApCisKKyNkZWZp bmUgTVNWRFhfQ09SRV9DUl9NU1ZEWF9DT01NQU5EX1NQQUNFX09GRlNFVCAoMHgwMDI4KQorCisj ZGVmaW5lIE1TVkRYX0NPUkVfQkFTRQkoMHg2MDApCisKK3ZvaWQgdmVkX3VwZGF0ZV9mcmFtZV9p bmZvKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYsCisJCQkJc3RydWN0IGRybV9maWxlICp0 ZmlsZSwJdm9pZCAqY21kKTsKKwordm9pZCB2ZWRfYmFja3VwX2NtZChzdHJ1Y3QgdmVkX3ByaXZh dGUgKnZlZF9wcml2LAorCQkJc3RydWN0IGRybV9maWxlICp0ZmlsZSwJdm9pZCAqY21kLAorCQkJ dWludDMyX3QgY21kX3NpemUsIHVpbnQzMl90IGRlYmxvY2tfY21kX29mZnNldCk7CisKK3ZvaWQg dmVkX210eF9tZXNzYWdlX2R1bXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKK3ZvaWQgdmVk X2RvX2NvbmNlYWxtZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKK3ZvaWQgdmVkX2Z3 X2Vycm9yX2RldGVjdGVkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJdWludDMyX3QgZmVu Y2UsIHVpbnQzMl90IGZsYWdzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaXB2ci92ZWRfZncuYyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZmJhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfZncuYwpAQCAtMCwwICsxLDY2MCBAQAorLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgKiB2ZWRfZncuYzogVkVEIGluaXRpYWxpemF0aW9uIGFuZCBtdHgtZmlybXdh cmUgdXBsb2FkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0aW9uLCBI aWxsc2Jvcm8sIE9SLCBVU0EKKyAqIENvcHlyaWdodCAoYykgSW1hZ2luYXRpb24gVGVjaG5vbG9n aWVzIExpbWl0ZWQsIFVLCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVHVuZ3N0ZW4gR3JhcGhpY3Ms IEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAor ICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVS Q0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBT dCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhv cnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCisjaW5jbHVkZSAidmVkX2Z3LmgiCisjaW5jbHVkZSAiaXB2cl9nZW0uaCIK KyNpbmNsdWRlICJ2ZWRfY21kLmgiCisjaW5jbHVkZSAidmVkX3JlZy5oIgorI2luY2x1ZGUgInZl ZF9pbml0LmgiCisjaW5jbHVkZSAiaXB2cl9idWZmZXIuaCIKKyNpbmNsdWRlICJpcHZyX21tdS5o IgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2gu aD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2RlZmluZSBVUExPQURfRldfQllfRE1B IDEKKyNkZWZpbmUgU1RBQ0tHVUFSRFdPUkQJCQkweDEwMTAxMDEwCisjZGVmaW5lIE1TVkRYX01U WF9EQVRBX0xPQ0FUSU9OCQkweDgyODgwMDAwCisjZGVmaW5lIFVOSU5JVElMSVNFX01FTQkJCTB4 Y2RjZGNkY2QKKyNkZWZpbmUgRklSTVdBUkVfTkFNRSAibXN2ZHhfZndfbWZsZF9ERTIuMC5iaW4i CisKKy8qIFZFRCBGVyBoZWFkZXIgKi8KK3N0cnVjdCB2ZWRfZncgeworCXVpbnQzMl90IHZlcjsK Kwl1aW50MzJfdCB0ZXh0X3NpemU7CisJdWludDMyX3QgZGF0YV9zaXplOworCXVpbnQzMl90IGRh dGFfbG9jYXRpb247Cit9OworCisjaWYgVVBMT0FEX0ZXX0JZX0RNQQorCitzdGF0aWMgdm9pZCB2 ZWRfZ2V0X210eF9jb250cm9sX2Zyb21fZGFzaChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2 X3ByaXYpCit7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRf cHJpdmF0ZTsKKwlpbnQzMl90IGNvdW50ID0gMDsKKwl1aW50MzJfdCByZWdfdmFsID0gMDsKKwor CVJFR0lPX1dSSVRFX0ZJRUxEKHJlZ192YWwsIE1TVkRYX01UWF9ERUJVRywgTVRYX0RCR19JU19T TEFWRSwgMSk7CisJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgTVNWRFhfTVRYX0RFQlVHLCBN VFhfREJHX0dQSU9fSU4sIDB4MDIpOworCVZFRF9SRUdfV1JJVEUzMihyZWdfdmFsLCBNU1ZEWF9N VFhfREVCVUdfT0ZGU0VUKTsKKworCWRvIHsKKwkJcmVnX3ZhbCA9IFZFRF9SRUdfUkVBRDMyKE1T VkRYX01UWF9ERUJVR19PRkZTRVQpOworCQljb3VudCsrOworCX0gd2hpbGUgKCgocmVnX3ZhbCAm IDB4MTgpICE9IDApICYmIGNvdW50IDwgNTAwMDApOworCisJaWYgKGNvdW50ID49IDUwMDAwKQor CQlJUFZSX0RFQlVHX1ZFRCgiVkVEOiB0aW1lb3V0IGluIGdldF9tdHhfY29udHJvbF9mcm9tX2Rh c2guXG4iKTsKKworCS8qIFNhdmUgdGhlIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVyLi4uKi8KKwl2 ZWRfcHJpdi0+dmVkX2Rhc2hfYWNjZXNzX2N0cmwgPSBWRURfUkVHX1JFQUQzMihNVFhfUkFNX0FD Q0VTU19DT05UUk9MX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkCit2ZWRfcmVsZWFzZV9tdHhf Y29udHJvbF9mcm9tX2Rhc2goc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KQorewor CXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisK KwkvKiByZXN0b3JlIGFjY2VzcyBjb250cm9sICovCisJVkVEX1JFR19XUklURTMyKHZlZF9wcml2 LT52ZWRfZGFzaF9hY2Nlc3NfY3RybCwgTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9PRkZTRVQpOwor CS8qIHJlbGVhc2UgYnVzICovCisJVkVEX1JFR19XUklURTMyKDB4NCwgTVNWRFhfTVRYX0RFQlVH X09GRlNFVCk7Cit9CisKKy8qIGZvciBmdXR1cmUgZGVidWcgaW5mbyBvZiBtc3ZkeCByZWxhdGVk IHJlZ2lzdGVycyAqLworc3RhdGljIHZvaWQKK3ZlZF9zZXR1cF9md19kdW1wKHN0cnVjdCBkcm1f aXB2cl9wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgZG1hX2NoYW5uZWwpCit7CisJSVBWUl9E RUJVR19SRUcoImR1bXAgcmVnaXN0ZXJzIGR1cmluZyBmdyB1cGxvYWQgZm9yIGRlYnVnOlxuIik7 CisJLyogZm9yIERNQUMgUkVHSVNURVIgKi8KKwlJUFZSX0RFQlVHX1JFRygiTVRYX1NZU0NfQ0RN QUEgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1UWF9TWVNDX0NETUFBX09GRlNFVCkp OworCUlQVlJfREVCVUdfUkVHKCJNVFhfU1lTQ19DRE1BQyB2YWx1ZSBpcyAweCV4XG4iLAorCQkJ VkVEX1JFR19SRUFEMzIoTVRYX1NZU0NfQ0RNQUNfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUco IkRNQUNfU0VUVVAgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKERNQUNfRE1B Q19TRVRVUF9PRkZTRVQgKyBkbWFfY2hhbm5lbCkpOworCUlQVlJfREVCVUdfUkVHKCJETUFDX0RN QUNfQ09VTlQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKERNQUNfRE1BQ19D T1VOVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCkpOworCUlQVlJfREVCVUdfUkVHKCJETUFDX0RNQUNf UEVSSVBIX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoRE1BQ19E TUFDX1BFUklQSF9PRkZTRVQgKyBkbWFfY2hhbm5lbCkpOworCUlQVlJfREVCVUdfUkVHKCJETUFD X0RNQUNfUEVSSVBIRVJBTF9BRERSIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQz MihETUFDX0RNQUNfUEVSSVBIRVJBTF9BRERSX09GRlNFVCArCisJCQkJICAgICAgIGRtYV9jaGFu bmVsKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX0NPTlRST0wgdmFsdWUgaXMgMHgleFxuIiwK KwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTlRST0xfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19S RUcoIkRNQUNfRE1BQ19JUlFfU1RBVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFE MzIoRE1BQ19ETUFDX0lSUV9TVEFUX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9N TVVfQ09OVFJPTDAgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX01N VV9DT05UUk9MMF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiRE1BQ19ETUFDX0NPVU5UIDIy MjIgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKERNQUNfRE1BQ19DT1VOVF9P RkZTRVQgKyBkbWFfY2hhbm5lbCkpOworCisJLyogZm9yIE1UWCBSRUdJU1RFUiAqLworCUlQVlJf REVCVUdfUkVHKCJNVFhfRU5BQkxFX09GRlNFVCBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFE MzIoTVRYX0VOQUJMRV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX0tJQ0tfSU5QVVRf T0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNVFhfS0lDS19JTlBV VF9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVRYX1JFR19SRUFEX1dSSVRFX1JFUVVFU1Rf T0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCVZFRF9SRUdfUkVBRDMyKE1UWF9SRUdJU1RFUl9S RUFEX1dSSVRFX1JFUVVFU1RfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9SQU1fQUND RVNTX0NPTlRST0xfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihN VFhfUkFNX0FDQ0VTU19DT05UUk9MX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNVFhfUkFN X0FDQ0VTU19TVEFUVVNfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQz MihNVFhfUkFNX0FDQ0VTU19TVEFUVVNfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9T WVNDX1RJTUVSRElWX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIo TVRYX1NZU0NfVElNRVJESVZfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9TWVNDX0NE TUFDX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVRYX1NZU0Nf Q0RNQUNfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9TWVNDX0NETUFBX09GRlNFVCB2 YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVRYX1NZU0NfQ0RNQUFfT0ZGU0VU KSk7CisJSVBWUl9ERUJVR19SRUcoIk1UWF9TWVNDX0NETUFTMF9PRkZTRVQgdmFsdWUgaXMgMHgl eFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1UWF9TWVNDX0NETUFTMF9PRkZTRVQpKTsKKwlJUFZS X0RFQlVHX1JFRygiTVRYX1NZU0NfQ0RNQVRfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlW RURfUkVHX1JFQUQzMihNVFhfU1lTQ19DRE1BVF9PRkZTRVQpKTsKKworCS8qIGZvciBNU1ZEWCBD T1JFIFJFR0lTVEVSICovCisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX0NPTlRST0xfT0ZGU0VUIGlz IDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DT05UUk9MX09GRlNFVCkpOworCUlQ VlJfREVCVUdfUkVHKCJNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUIHZhbHVlIGlzIDB4JXhc biIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUKSk7CisJ SVBWUl9ERUJVR19SRUcoIk1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfT0ZGU0VUIHZhbHVlIGlzIDB4 JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCkp OworCUlQVlJfREVCVUdfUkVHKCJNTVNWRFhfSE9TVF9JTlRFUlJVUFRfRU5BQkxFX09GRlNFVCB2 YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfSE9TVF9JTlRFUlJVUFRf RU5BQkxFX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9P RkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX01BTl9DTEtf RU5BQkxFX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9DT1JFX0lEX09GRlNFVCB2 YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09SRV9JRF9PRkZTRVQp KTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfTU1VX1NUQVRVU19PRkZTRVQgdmFsdWUgaXMgMHgl eFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX01NVV9TVEFUVVNfT0ZGU0VUKSk7CisJSVBW Ul9ERUJVR19SRUcoIkZFX01TVkRYX1dEVF9DT05UUk9MX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4i LAorCQkJVkVEX1JFR19SRUFEMzIoRkVfTVNWRFhfV0RUX0NPTlRST0xfT0ZGU0VUKSk7CisJSVBW Ul9ERUJVR19SRUcoIkZFX01TVkRYX1dEVElNRVJfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJ CQlWRURfUkVHX1JFQUQzMihGRV9NU1ZEWF9XRFRJTUVSX09GRlNFVCkpOworCUlQVlJfREVCVUdf UkVHKCJCRV9NU1ZEWF9XRFRfQ09OVFJPTF9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZF RF9SRUdfUkVBRDMyKEJFX01TVkRYX1dEVF9DT05UUk9MX09GRlNFVCkpOworCUlQVlJfREVCVUdf UkVHKCJCRV9NU1ZEWF9XRFRJTUVSX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JF R19SRUFEMzIoQkVfTVNWRFhfV0RUSU1FUl9PRkZTRVQpKTsKKworCS8qIGZvciBNU1ZEWCBSRU5E RUMgUkVHSVNURVIgKi8KKwlJUFZSX0RFQlVHX1JFRygiVkVDX1NISUZUUkVHX0NPTlRST0xfT0ZG U0VUIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihWRUNfU0hJRlRSRUdfQ09OVFJPTF9P RkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNWRFhfUkVOREVDX0NPTlRST0wwX09GRlNFVCB2 YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfUkVOREVDX0NPTlRST0ww X09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkVfT0ZG U0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVHX1JFQUQzMihNU1ZEWF9SRU5ERUNfQlVG RkVSX1NJWkVfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX1JFTkRFQ19CQVNFX0FE RFIwX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfUkVO REVDX0JBU0VfQUREUjBfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUcoIk1NU1ZEWF9SRU5ERUNf QkFTRV9BRERSMV9PRkZTRVQgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9SRUdfUkVBRDMyKE1T VkRYX1JFTkRFQ19CQVNFX0FERFIxX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJNU1ZEWF9S RU5ERUNfUkVBRF9EQVRBX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19SRUFE MzIoTVNWRFhfUkVOREVDX1JFQURfREFUQV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVHX1JFRygiTVNW RFhfUkVOREVDX0NPTlRFWFQwX09GRlNFVCB2YWx1ZSBpcyAweCV4XG4iLAorCQkJVkVEX1JFR19S RUFEMzIoTVNWRFhfUkVOREVDX0NPTlRFWFQwX09GRlNFVCkpOworCUlQVlJfREVCVUdfUkVHKCJN U1ZEWF9SRU5ERUNfQ09OVEVYVDFfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJCQlWRURfUkVH X1JFQUQzMihNU1ZEWF9SRU5ERUNfQ09OVEVYVDFfT0ZGU0VUKSk7CisJSVBWUl9ERUJVR19SRUco Ik1TVkRYX0NNRFNfRU5EX1NMSUNFX1BJQ1RVUkVfT0ZGU0VUIHZhbHVlIGlzIDB4JXhcbiIsCisJ CQlWRURfUkVHX1JFQUQzMihNU1ZEWF9DTURTX0VORF9TTElDRV9QSUNUVVJFX09GRlNFVCkpOwor CisJSVBWUl9ERUJVR19SRUcoIk1TVkRYX01NVV9NRU1fUkVRIHZhbHVlIGlzIDB4JXhcbiIsCisJ CQlWRURfUkVHX1JFQUQzMihNU1ZEWF9NTVVfTUVNX1JFUV9PRkZTRVQpKTsKKwlJUFZSX0RFQlVH X1JFRygiTVNWRFhfU1lTX01FTU9SWV9ERUJVRzIgdmFsdWUgaXMgMHgleFxuIiwKKwkJCVZFRF9S RUdfUkVBRDMyKDB4NmZjKSk7Cit9CisKK3N0YXRpYyB2b2lkIHZlZF91cGxvYWRfZncoc3RydWN0 IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2LAorCQkJCXVpbnQzMl90IGFkZHJlc3MsIGNvbnN0 IHVpbnQzMl90IHdvcmRzKQoreworCXVpbnQzMl90IHJlZ192YWwgPSAwOworCXVpbnQzMl90IGNt ZDsKKwl1aW50MzJfdCB1Q291bnRSZWcsIG9mZnNldCwgbW11X3B0ZDsKKwl1aW50MzJfdCBzaXpl ID0gd29yZHMgKiA0OyAvKiBieXRlIGNvdW50ICovCisJdWludDMyX3QgZG1hX2NoYW5uZWwgPSAw OyAvKiBTZXR1cCBhIFNpbXBsZSBETUEgZm9yIENoMCAqLworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAq dmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisKKwlJUFZSX0RFQlVHX1ZFRCgiVkVE OiBVcGxvYWQgZmlybXdhcmUgYnkgRE1BLlxuIik7CisJdmVkX2dldF9tdHhfY29udHJvbF9mcm9t X2Rhc2goZGV2X3ByaXYpOworCisJLyoKKwkgKiBkbWEgdHJhbnNmZXJzIHRvL2Zyb20gdGhlIG10 eCBoYXZlIHRvIGJlIDMyLWJpdCBhbGlnbmVkIGFuZAorCSAqIGluIG11bHRpcGxlcyBvZiAzMiBi aXRzCisJICovCisJVkVEX1JFR19XUklURTMyKGFkZHJlc3MsIE1UWF9TWVNDX0NETUFBX09GRlNF VCk7CisKKwkvKiBidXJzdCBzaXplIGluIG11bHRpcGxlcyBvZiA2NCBiaXRzIChhbGxvd2VkIHZh bHVlcyBhcmUgMiBvciA0KSAqLworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUocmVnX3ZhbCwgTVRY X1NZU0NfQ0RNQUMsIEJVUlNUU0laRSwgNCk7CisJLyogZmFsc2UgbWVhbnMgd3JpdGUgdG8gbXR4 IG1lbSwgdHJ1ZSBtZWFucyByZWFkIGZyb20gbXR4IG1lbSAqLworCVJFR0lPX1dSSVRFX0ZJRUxE X0xJVEUocmVnX3ZhbCwgTVRYX1NZU0NfQ0RNQUMsIFJOVywgMCk7CisJLyogYmVnaW4gdHJhbnNm ZXIgKi8KKwlSRUdJT19XUklURV9GSUVMRF9MSVRFKHJlZ192YWwsIE1UWF9TWVNDX0NETUFDLCBF TkFCTEUsCTEpOworCS8qIHNwZWNpZmllcyB0cmFuc2ZlciBzaXplIG9mIHRoZSBETUEgb3BlcmF0 aW9uIGJ5IDMyLWJpdCB3b3JkcyAqLworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUocmVnX3ZhbCwg TVRYX1NZU0NfQ0RNQUMsIExFTkdUSCwJd29yZHMpOworCVZFRF9SRUdfV1JJVEUzMihyZWdfdmFs LCBNVFhfU1lTQ19DRE1BQ19PRkZTRVQpOworCisJLyogdG9nZ2xlIGNoYW5uZWwgMCB1c2FnZSBi ZXR3ZWVuIG10eCBhbmQgb3RoZXIgbXN2ZHggcGVyaXBoZXJhbHMgKi8KKwl7CisJCXJlZ192YWwg PSBWRURfUkVHX1JFQUQzMihNU1ZEWF9DT05UUk9MX09GRlNFVCk7CisJCVJFR0lPX1dSSVRFX0ZJ RUxEKHJlZ192YWwsIE1TVkRYX0NPTlRST0wsIERNQUNfQ0gwX1NFTEVDVCwgIDApOworCQlWRURf UkVHX1dSSVRFMzIocmVnX3ZhbCwgTVNWRFhfQ09OVFJPTF9PRkZTRVQpOworCX0KKworCS8qIENs ZWFyIHRoZSBETUFDIFN0YXRzICovCisJVkVEX1JFR19XUklURTMyKDAgLCBETUFDX0RNQUNfSVJR X1NUQVRfT0ZGU0VUICsgZG1hX2NoYW5uZWwpOworCisJb2Zmc2V0ID0gdmVkX3ByaXYtPmZ3X29m ZnNldDsKKwlJUFZSX0RFQlVHX1ZFRCgiZncgZ3B1IG9mZnNldCBpcyAweCV4LlxuIiwgb2Zmc2V0 KTsKKworCS8qIHVzZSBiYW5rIDAgKi8KKwljbWQgPSAwOworCVZFRF9SRUdfV1JJVEUzMihjbWQs IE1TVkRYX01NVV9CQU5LX0lOREVYX09GRlNFVCk7CisKKwkvKiBXcml0ZSBQVEQgdG8gbW11IGJh c2UgMCovCisJbW11X3B0ZCA9IGlwdnJfZ2V0X2RlZmF1bHRfcGRfYWRkcihkZXZfcHJpdi0+bW11 KTsKKwlWRURfUkVHX1dSSVRFMzIobW11X3B0ZCwgTVNWRFhfTU1VX0RJUl9MSVNUX0JBU0VfT0ZG U0VUICsgMCk7CisJSVBWUl9ERUJVR19WRUQoIm1tdV9wdGQgaXMgJWQuXG4iLCBtbXVfcHRkKTsK KworCS8qIEludmFsaWRhdGUgKi8KKwlyZWdfdmFsID0gVkVEX1JFR19SRUFEMzIoTVNWRFhfTU1V X0NPTlRST0wwX09GRlNFVCk7CisJcmVnX3ZhbCAmPSB+MHhmOworCVJFR0lPX1dSSVRFX0ZJRUxE KHJlZ192YWwsIE1TVkRYX01NVV9DT05UUk9MMCwgTU1VX0lOVkFMREMsIDEpOworCVZFRF9SRUdf V1JJVEUzMihyZWdfdmFsLCBNU1ZEWF9NTVVfQ09OVFJPTDBfT0ZGU0VUKTsKKworCVZFRF9SRUdf V1JJVEUzMihvZmZzZXQsIERNQUNfRE1BQ19TRVRVUF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7CisK KwkvKiBPbmx5IHVzZSBhIHNpbmdsZSBkbWEgLSBhc3NlcnQgdGhhdCB0aGlzIGlzIHZhbGlkICov CisJaWYgKChzaXplIC8gNCkgPj0gKDEgPDwgMTUpKSB7CisJCUlQVlJfRVJST1IoIkRNQSBzaXpl IGJleW9uZCBsaW1pdCwgYWJvcnQgZmlybXdhcmUgdXBsb2FkLlxuIik7CisJCXJldHVybjsKKwl9 CisKKwl1Q291bnRSZWcgPSBQU0JfRE1BQ19WQUxVRV9DT1VOVChQU0JfRE1BQ19CU1dBUF9OT19T V0FQLCAwLAorCQkJCQkgUFNCX0RNQUNfRElSX01FTV9UT19QRVJJUEgsIDAsCisJCQkJCSAoc2l6 ZSAvIDQpKTsKKwkvKiBTZXQgdGhlIG51bWJlciBvZiBieXRlcyB0byBkbWEqLworCVZFRF9SRUdf V1JJVEUzMih1Q291bnRSZWcsIERNQUNfRE1BQ19DT1VOVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7 CisKKwljbWQgPSBQU0JfRE1BQ19WQUxVRV9QRVJJUEhfUEFSQU0oUFNCX0RNQUNfQUNDX0RFTF8w LAorCQkJCQkgIFBTQl9ETUFDX0lOQ1JfT0ZGLAorCQkJCQkgIFBTQl9ETUFDX0JVUlNUXzIpOwor CVZFRF9SRUdfV1JJVEUzMihjbWQsIERNQUNfRE1BQ19QRVJJUEhfT0ZGU0VUICsgZG1hX2NoYW5u ZWwpOworCisJLyogU2V0IGRlc3RpbmF0aW9uIHBvcnQgZm9yIGRtYSAqLworCWNtZCA9IDA7CisJ UkVHSU9fV1JJVEVfRklFTEQoY21kLCBETUFDX0RNQUNfUEVSSVBIRVJBTF9BRERSLCBBRERSLAor CQkJICBNVFhfU1lTQ19DRE1BVF9PRkZTRVQpOworCVZFRF9SRUdfV1JJVEUzMihjbWQsIERNQUNf RE1BQ19QRVJJUEhFUkFMX0FERFJfT0ZGU0VUICsgZG1hX2NoYW5uZWwpOworCisKKwkvKiBGaW5h bGx5LCByZXdyaXRlIHRoZSBjb3VudCByZWdpc3RlciB3aXRoIHRoZSBlbmFibGUgYml0IHNldCAq LworCVZFRF9SRUdfV1JJVEUzMih1Q291bnRSZWcgfCBETUFDX0RNQUNfQ09VTlRfRU5fTUFTSywK KwkJCURNQUNfRE1BQ19DT1VOVF9PRkZTRVQgKyBkbWFfY2hhbm5lbCk7CisKKwkvKiBXYWl0IGZv ciBhbGwgdG8gYmUgZG9uZSAqLworCWlmICh2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYs CisJCQkJICBETUFDX0RNQUNfSVJRX1NUQVRfT0ZGU0VUICsgZG1hX2NoYW5uZWwsCisJCQkJICBE TUFDX0RNQUNfSVJRX1NUQVRfVFJBTlNGRVJfRklOX01BU0ssCisJCQkJICBETUFDX0RNQUNfSVJR X1NUQVRfVFJBTlNGRVJfRklOX01BU0ssCisJCQkJICAyMDAwMDAwLCA1KSkgeworCQl2ZWRfc2V0 dXBfZndfZHVtcChkZXZfcHJpdiwgZG1hX2NoYW5uZWwpOworCQl2ZWRfcmVsZWFzZV9tdHhfY29u dHJvbF9mcm9tX2Rhc2goZGV2X3ByaXYpOworCQlyZXR1cm47CisJfQorCisJLyogQXNzZXJ0IHRo YXQgdGhlIE1UWCBETUEgcG9ydCBpcyBhbGwgZG9uZSBhc3dlbGwgKi8KKwlpZiAodmVkX3dhaXRf Zm9yX3JlZ2lzdGVyKGRldl9wcml2LAorCQkJTVRYX1NZU0NfQ0RNQVMwX09GRlNFVCwKKwkJCTEs IDEsIDIwMDAwMDAsIDUpKSB7CisJCXZlZF9yZWxlYXNlX210eF9jb250cm9sX2Zyb21fZGFzaChk ZXZfcHJpdik7CisJCXJldHVybjsKKwl9CisKKwl2ZWRfcmVsZWFzZV9tdHhfY29udHJvbF9mcm9t X2Rhc2goZGV2X3ByaXYpOworCisJSVBWUl9ERUJVR19WRUQoIlZFRDogVXBsb2FkIGRvbmVcbiIp OworfQorCisjZWxzZQorCitzdGF0aWMgdm9pZCB2ZWRfdXBsb2FkX2Z3KHN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQljb25zdCB1aW50MzJfdCBkYXRhX21lbSwKKwkJCQl1 aW50MzJfdCByYW1fYmFua19zaXplLCB1aW50MzJfdCBhZGRyZXNzLAorCQkJCWNvbnN0IHVpbnQz Ml90IHdvcmRzLAorCQkJCWNvbnN0IHVpbnQzMl90ICogY29uc3QgZGF0YSkKK3sKKwl1aW50MzJf dCBsb29wLCBjdHJsLCByYW1faWQsIGFkZHIsIGN1cl9iYW5rID0gKHVpbnQzMl90KSB+MDsKKwl1 aW50MzJfdCBhY2Nlc3NfY3RybDsKKworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFVwbG9hZCBmaXJt d2FyZSBieSByZWdpc3RlciBpbnRlcmZhY2UuXG4iKTsKKwkvKiBTYXZlIHRoZSBhY2Nlc3MgY29u dHJvbCByZWdpc3Rlci4uLiAqLworCWFjY2Vzc19jdHJsID0gVkVEX1JFR19SRUFEMzIoTVRYX1JB TV9BQ0NFU1NfQ09OVFJPTF9PRkZTRVQpOworCisJLyogV2FpdCBmb3IgTUNNU1RBVCB0byBiZWNv bWUgYmUgaWRsZSAxICovCisJdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LCBNVFhfUkFN X0FDQ0VTU19TVEFUVVNfT0ZGU0VULAorCQkJICAgICAgMSwJLyogUmVxdWlyZWQgVmFsdWUgKi8K KwkJCSAgICAgIDB4ZmZmZmZmZmYsIC8qIEVuYWJsZXMgKi8KKwkJCSAgICAgIDIwMDAwMDAsIDUp OworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IHdvcmRzOyBsb29wKyspIHsKKwkJcmFtX2lkID0g ZGF0YV9tZW0gKyAoYWRkcmVzcyAvIHJhbV9iYW5rX3NpemUpOworCQlpZiAocmFtX2lkICE9IGN1 cl9iYW5rKSB7CisJCQlhZGRyID0gYWRkcmVzcyA+PiAyOworCQkJY3RybCA9IDA7CisJCQlSRUdJ T19XUklURV9GSUVMRF9MSVRFKGN0cmwsCisJCQkJCSAgICAgICBNVFhfUkFNX0FDQ0VTU19DT05U Uk9MLAorCQkJCQkgICAgICAgTVRYX01DTUlELCByYW1faWQpOworCQkJUkVHSU9fV1JJVEVfRklF TERfTElURShjdHJsLAorCQkJCQkgICAgICAgTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTCwKKwkJCQkJ ICAgICAgIE1UWF9NQ01fQUREUiwgYWRkcik7CisJCQlSRUdJT19XUklURV9GSUVMRF9MSVRFKGN0 cmwsCisJCQkJCSAgICAgICBNVFhfUkFNX0FDQ0VTU19DT05UUk9MLAorCQkJCQkgICAgICAgTVRY X01DTUFJLCAxKTsKKwkJCVZFRF9SRUdfV1JJVEUzMihjdHJsLCBNVFhfUkFNX0FDQ0VTU19DT05U Uk9MX09GRlNFVCk7CisJCQljdXJfYmFuayA9IHJhbV9pZDsKKwkJfQorCQlhZGRyZXNzICs9IDQ7 CisKKwkJVkVEX1JFR19XUklURTMyKGRhdGFbbG9vcF0sCisJCQkJTVRYX1JBTV9BQ0NFU1NfREFU QV9UUkFOU0ZFUl9PRkZTRVQpOworCisJCS8qIFdhaXQgZm9yIE1DTVNUQVQgdG8gYmVjb21lIGJl IGlkbGUgMSAqLworCQl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIE1UWF9SQU1fQUND RVNTX1NUQVRVU19PRkZTRVQsCisJCQkJICAgICAgMSwJLyogUmVxdWlyZWQgVmFsdWUgKi8KKwkJ CQkgICAgICAweGZmZmZmZmZmLCAvKiBFbmFibGVzICovCisJCQkJICAgICAgMjAwMDAwMCwgNSk7 CisJfQorCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFVwbG9hZCBkb25lXG4iKTsKKworCS8qIFJlc3Rv cmUgdGhlIGFjY2VzcyBjb250cm9sIHJlZ2lzdGVyLi4uICovCisJVkVEX1JFR19XUklURTMyKGFj Y2Vzc19jdHJsLCBNU1ZEWF9NVFhfUkFNX0FDQ0VTU19DT05UUk9MKTsKK30KKworI2VuZGlmCisK K3N0YXRpYyBpbnQzMl90IHZlZF9nZXRfZndfYm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJ CQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipyYXcsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0 IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQzMl90 IHJjLCBmd19zaXplOworCXZvaWQgKnB0ciA9IE5VTEw7CisJc3RydWN0IHZlZF9wcml2YXRlICp2 ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKwl2b2lkICpmd19ib19hZGRyID0gTlVM TDsKKwl1aW50MzJfdCAqbGFzdF93b3JkOworCXN0cnVjdCB2ZWRfZncgKmZ3OworCisJcmMgPSBy ZXF1ZXN0X2Zpcm13YXJlKHJhdywgbmFtZSwgJmRldi0+cGxhdGZvcm1kZXYtPmRldik7CisJaWYg KCpyYXcgPT0gTlVMTCB8fCByYyA8IDApIHsKKwkJSVBWUl9FUlJPUigiVkVEOiAlcyByZXF1ZXN0 X2Zpcm13YXJlIGZhaWxlZDogUmVhc29uICVkLlxuIiwKKwkJCSAgbmFtZSwgcmMpOworCQlyZXR1 cm4gMTsKKwl9CisKKwlpZiAoKCpyYXcpLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCB2ZWRfZncpKSB7 CisJCUlQVlJfRVJST1IoIlZFRDogJXMgaXMgaXMgbm90IGNvcnJlY3Qgc2l6ZSglemQpLlxuIiwK KwkJCSAgbmFtZSwgKCpyYXcpLT5zaXplKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHRyID0gKHZv aWQgKikoKCpyYXcpKS0+ZGF0YTsKKwlpZiAoIXB0cikgeworCQlJUFZSX0VSUk9SKCJWRUQ6IEZh aWxlZCB0byBsb2FkICVzLlxuIiwgbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCS8qIGFub3Ro ZXIgc2FuaXR5IGNoZWNrLi4uICovCisJZndfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmVkX2Z3KSAr CisJCSAgc2l6ZW9mKHVpbnQzMl90KSAqICgoc3RydWN0IHZlZF9mdyAqKSBwdHIpLT50ZXh0X3Np emUgKworCQkgIHNpemVvZih1aW50MzJfdCkgKiAoKHN0cnVjdCB2ZWRfZncgKikgcHRyKS0+ZGF0 YV9zaXplOworCWlmICgoKnJhdyktPnNpemUgPCBmd19zaXplKSB7CisJCUlQVlJfRVJST1IoIlZF RDogJXMgaXMgaXMgbm90IGNvcnJlY3Qgc2l6ZSglemQpLlxuIiwKKwkJCSAgbmFtZSwgKCpyYXcp LT5zaXplKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZndfYm9fYWRkciA9IGlwdnJfZ2VtX29iamVj dF92bWFwKHZlZF9wcml2LT5md19ibyk7CisJaWYgKElTX0VSUihmd19ib19hZGRyKSkgeworCQlJ UFZSX0VSUk9SKCJWRUQ6IGttYXAgZmFpbGVkIGZvciBmdyBidWZmZXIuXG4iKTsKKwkJcmV0dXJu IDE7CisJfQorCisJZncgPSAoc3RydWN0IHZlZF9mdyAqKXB0cjsKKwltZW1zZXQoZndfYm9fYWRk ciwgVU5JTklUSUxJU0VfTUVNLCB2ZWRfcHJpdi0+bXR4X21lbV9zaXplKTsKKwltZW1jcHkoZndf Ym9fYWRkciwgcHRyICsgc2l6ZW9mKHN0cnVjdCB2ZWRfZncpLAorCSAgICAgICBzaXplb2YodWlu dDMyX3QpICogZnctPnRleHRfc2l6ZSk7CisJbWVtY3B5KGZ3X2JvX2FkZHIgKyAoZnctPmRhdGFf bG9jYXRpb24gLSBNU1ZEWF9NVFhfREFUQV9MT0NBVElPTiksCisJICAgICAgICh2b2lkICopcHRy ICsgc2l6ZW9mKHN0cnVjdCB2ZWRfZncpICsgc2l6ZW9mKHVpbnQzMl90KSAqIGZ3LT50ZXh0X3Np emUsCisJICAgICAgIHNpemVvZih1aW50MzJfdCkgKiBmdy0+ZGF0YV9zaXplKTsKKwlsYXN0X3dv cmQgPSAodWludDMyX3QgKikoZndfYm9fYWRkciArIHZlZF9wcml2LT5tdHhfbWVtX3NpemUgLSA0 KTsKKwkvKgorCSAqIFdyaXRlIGEga25vdyB2YWx1ZSB0byBsYXN0IHdvcmQgaW4gbXR4IG1lbW9y eQorCSAqIFVzZWZ1bGwgZm9yIGRldGVjdGlvbiBvZiBzdGFjayBvdmVycnVuCisJICovCisJKmxh c3Rfd29yZCA9IFNUQUNLR1VBUkRXT1JEOworCisJdnVubWFwKGZ3X2JvX2FkZHIpOworCUlQVlJf REVCVUdfVkVEKCJWRUQ6IHJlbGVhc2luZyBmaXJtd2FyZSByZXNvdWNlcy5cbiIpOworCUlQVlJf REVCVUdfVkVEKCJWRUQ6IExvYWQgZmlybXdhcmUgaW50byBCTyBzdWNjZXNzZnVsbHkuXG4iKTsK KwlyZWxlYXNlX2Zpcm13YXJlKCpyYXcpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHVpbnQz Ml90ICoKK3ZlZF9nZXRfZncoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGZp cm13YXJlICoqcmF3LCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpk ZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50MzJfdCByYywgZndfc2l6ZTsKKwl2b2lk ICpwdHIgPSBOVUxMOworCXN0cnVjdCB2ZWRfZncgKmZ3OworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAq dmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisKKwlyYyA9IHJlcXVlc3RfZmlybXdh cmUocmF3LCBuYW1lLCAmZGV2LT5wbGF0Zm9ybWRldi0+ZGV2KTsKKwlpZiAoKnJhdyA9PSBOVUxM IHx8IHJjIDwgMCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6ICVzIHJlcXVlc3RfZmlybXdhcmUgZmFp bGVkOiBSZWFzb24gJWRcbiIsCisJCQkgIG5hbWUsIHJjKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJaWYgKCgqcmF3KS0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgdmVkX2Z3KSkgeworCQlJUFZSX0VS Uk9SKCJWRUQ6ICVzIGlzIGlzIG5vdCBjb3JyZWN0IHNpemUoJXpkKVxuIiwKKwkJCSAgbmFtZSwg KCpyYXcpLT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZSgqcmF3KTsKKwkJcmV0dXJuIE5VTEw7 CisJfQorCisJcHRyID0gKGludCAqKSgoKnJhdykpLT5kYXRhOworCWlmICghcHRyKSB7CisJCUlQ VlJfRVJST1IoIlZFRDogRmFpbGVkIHRvIGxvYWQgJXMuXG4iLCBuYW1lKTsKKwkJcmVsZWFzZV9m aXJtd2FyZSgqcmF3KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWZ3ID0gKHN0cnVjdCB2ZWRfZncg KilwdHI7CisKKwkvKiBhbm90aGVyIHNhbml0eSBjaGVjay4uLiAqLworCWZ3X3NpemUgPSBzaXpl b2YoZncpICsKKwkJICBzaXplb2YodWludDMyX3QpICogZnctPnRleHRfc2l6ZSArCisJCSAgc2l6 ZW9mKHVpbnQzMl90KSAqIGZ3LT5kYXRhX3NpemU7CisJaWYgKCgqcmF3KS0+c2l6ZSA8IGZ3X3Np emUpIHsKKwkJSVBWUl9FUlJPUigiVkVEOiAlcyBpcyBpcyBub3QgY29ycmVjdCBzaXplKCV6ZCku XG4iLAorCQkJICAgbmFtZSwgKCpyYXcpLT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZSgqcmF3 KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJdmVkX3ByaXYtPnZlZF9md19wdHIgPSBremFsbG9j KGZ3X3NpemUsIEdGUF9LRVJORUwpOworCWlmICh2ZWRfcHJpdi0+dmVkX2Z3X3B0ciA9PSBOVUxM KQorCQlJUFZSX0VSUk9SKCJWRUQ6IGFsbG9jYXRlIEZXIGJ1ZmZlciBmYWlsZWQuXG4iKTsKKwll bHNlIHsKKwkJbWVtY3B5KHZlZF9wcml2LT52ZWRfZndfcHRyLCBwdHIsIGZ3X3NpemUpOworCQl2 ZWRfcHJpdi0+dmVkX2Z3X3NpemUgPSBmd19zaXplOworCX0KKworCUlQVlJfREVCVUdfVkVEKCJW RUQ6IHJlbGVhc2luZyBmaXJtd2FyZSByZXNvdWNlcy5cbiIpOworCXJlbGVhc2VfZmlybXdhcmUo KnJhdyk7CisKKwlyZXR1cm4gdmVkX3ByaXYtPnZlZF9md19wdHI7Cit9CisKK3N0YXRpYyB2b2lk Cit2ZWRfd3JpdGVfbXR4X2NvcmVfcmVnKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp diwKKwkJCSAgICAgICBjb25zdCB1aW50MzJfdCBjb3JlX3JlZywgY29uc3QgdWludDMyX3QgdmFs KQoreworCXVpbnQzMl90IHJlZyA9IDA7CisKKwkvKiBQdXQgZGF0YSBpbiBNVFhfUldfREFUQSAq LworCVZFRF9SRUdfV1JJVEUzMih2YWwsIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX0RBVEFfT0ZG U0VUKTsKKworCS8qIERSRUFEWSBpcyBzZXQgdG8gMCBhbmQgcmVxdWVzdCBhIHdyaXRlICovCisJ cmVnID0gY29yZV9yZWc7CisJUkVHSU9fV1JJVEVfRklFTERfTElURShyZWcsIE1UWF9SRUdJU1RF Ul9SRUFEX1dSSVRFX1JFUVVFU1QsCisJCQkgICAgICAgTVRYX1JOVywgMCk7CisJUkVHSU9fV1JJ VEVfRklFTERfTElURShyZWcsIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1QsCisJCQkg ICAgICAgTVRYX0RSRUFEWSwgMCk7CisJVkVEX1JFR19XUklURTMyKHJlZywgTVRYX1JFR0lTVEVS X1JFQURfV1JJVEVfUkVRVUVTVF9PRkZTRVQpOworCisJdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKGRl dl9wcml2LAorCQkJICAgICAgTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfUkVRVUVTVF9PRkZTRVQs CisJCQkgICAgICBNVFhfUkVHSVNURVJfUkVBRF9XUklURV9SRVFVRVNUX01UWF9EUkVBRFlfTUFT SywKKwkJCSAgICAgIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfTVRYX0RSRUFEWV9N QVNLLAorCQkJICAgICAgMjAwMDAwMCwgNSk7Cit9CisKK2ludDMyX3QgdmVkX2FsbG9jX2Z3X2Jv KHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdikKK3sKKwl1aW50MzJfdCBjb3JlX3Jl djsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRl OworCisJY29yZV9yZXYgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9DT1JFX1JFVl9PRkZTRVQpOwor CisJaWYgKChjb3JlX3JldiAmIDB4ZmZmZmZmKSA8IDB4MDIwMDAwKQorCQl2ZWRfcHJpdi0+bXR4 X21lbV9zaXplID0gMTYgKiAxMDI0OworCWVsc2UKKwkJdmVkX3ByaXYtPm10eF9tZW1fc2l6ZSA9 IDU2ICogMTAyNDsKKworCUlQVlJfREVCVUdfSU5JVCgiVkVEOiBNVFggbWVtIHNpemUgaXMgMHgl MDh4IGJ5dGVzLCIKKwkJCSJhbGxvY2F0ZSBmaXJtd2FyZSBCTyBzaXplIDB4JTA4eC5cbiIsCisJ CQl2ZWRfcHJpdi0+bXR4X21lbV9zaXplLAorCQkJdmVkX3ByaXYtPm10eF9tZW1fc2l6ZSArIDQw OTYpOworCisJLyogQWxsb2NhdGUgdGhlIG5ldyBvYmplY3QgKi8KKwl2ZWRfcHJpdi0+ZndfYm8g PSBpcHZyX2dlbV9vYmpfY3JlYXRlX2FuZF9iaW5kKGRldl9wcml2LT5kZXYsCisJCQkJCQl2ZWRf cHJpdi0+bXR4X21lbV9zaXplICsgNDA5Nik7CisJaWYgKHZlZF9wcml2LT5md19ibyA9PSBOVUxM KSB7CisJCUlQVlJfRVJST1IoIlZFRDogZmFpbGVkIHRvIGFsbG9jYXRlIGZ3IGJ1ZmZlci5cbiIp OworCQl2ZWRfcHJpdi0+ZndfYm8gPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdmVk X3ByaXYtPmZ3X29mZnNldCA9IGlwdnJfZ2VtX29ial9tbXVfb2Zmc2V0KHZlZF9wcml2LT5md19i byk7CisJaWYgKElQVlJfSVNfRVJSKHZlZF9wcml2LT5md19vZmZzZXQpKSB7CisJCXZlZF9wcml2 LT5md19ibyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQor CitpbnQzMl90IHZlZF9zZXR1cF9mdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVj dCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMy X3QgcmFtX2Jhbmtfc2l6ZTsKKwlzdHJ1Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3By aXYtPnZlZF9wcml2YXRlOworCWludDMyX3QgcmV0ID0gMDsKKwlzdHJ1Y3QgdmVkX2Z3ICpmdzsK Kwl1aW50MzJfdCAqZndfcHRyID0gTlVMTDsKKwl1aW50MzJfdCAqdGV4dF9wdHIgPSBOVUxMOwor CXVpbnQzMl90ICpkYXRhX3B0ciA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpyYXcg PSBOVUxMOworCisJLyogdG9kbyA6IEFzc2VydCB0aGUgY2xvY2sgaXMgb24gLSBpZiBub3QgdHVy biBpdCBvbiB0byB1cGxvYWQgY29kZSAqLworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IHZlZF9zZXR1 cF9mdy5cbiIpOworCisJdmVkX3NldF9jbG9ja3MoZGV2X3ByaXYtPmRldiwgY2xrX2VuYWJsZV9h bGwpOworCisJLyogUmVzZXQgTVRYICovCisJVkVEX1JFR19XUklURTMyKE1UWF9TT0ZUX1JFU0VU X01UWF9SRVNFVF9NQVNLLAorCQkJTVRYX1NPRlRfUkVTRVRfT0ZGU0VUKTsKKworCVZFRF9SRUdf V1JJVEUzMihGSVJNV0FSRUlELCBNU1ZEWF9DT01NU19GSVJNV0FSRV9JRCk7CisKKwlWRURfUkVH X1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfRVJST1JfVFJJRyk7CisJVkVEX1JFR19XUklURTMyKDE5 OSwgTVRYX1NZU0NfVElNRVJESVZfT0ZGU0VUKTsgLyogTVRYX1NZU0NfVElNRVJESVYgKi8KKwlW RURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfRVhUX0ZXX0VSUk9SX1NUQVRFKTsgLyogRVhUX0ZXX0VS Uk9SX1NUQVRFICovCisJVkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX01TR19DT1VOVEVS KTsKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfU0lHTkFUVVJFKTsKKwlWRURfUkVH X1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfVE9fSE9TVF9SRF9JTkRFWCk7CisJVkVEX1JFR19XUklU RTMyKDAsIE1TVkRYX0NPTU1TX1RPX0hPU1RfV1JUX0lOREVYKTsKKwlWRURfUkVHX1dSSVRFMzIo MCwgTVNWRFhfQ09NTVNfVE9fTVRYX1JEX0lOREVYKTsKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNW RFhfQ09NTVNfVE9fTVRYX1dSVF9JTkRFWCk7CisJVkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0NP TU1TX0ZXX1NUQVRVUyk7CisJVkVEX1JFR19XUklURTMyKERTSUFCTEVfSURMRV9HUElPX1NJRyB8 CisJCQlEU0lBQkxFX0F1dG9fQ0xPQ0tfR0FUSU5HIHwKKwkJCVJFVFVSTl9WREVCX0RBVEFfSU5f Q09NUExFVElPTiB8CisJCQlOT1RfRU5BQkxFX09OX0hPU1RfQ09OQ0VBTE1FTlQsCisJCQlNU1ZE WF9DT01NU19PRkZTRVRfRkxBR1MpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19T SUdOQVRVUkUpOworCisJLyogcmVhZCByZWdpc3RlciBiYW5rIHNpemUgKi8KKwl7CisJCXVpbnQz Ml90IGJhbmtfc2l6ZSwgcmVnOworCQlyZWcgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9NVFhfUkFN X0JBTktfT0ZGU0VUKTsKKwkJYmFua19zaXplID0KKwkJCVJFR0lPX1JFQURfRklFTEQocmVnLCBN U1ZEWF9NVFhfUkFNX0JBTkssCisJCQkJCSBNVFhfUkFNX0JBTktfU0laRSk7CisJCXJhbV9iYW5r X3NpemUgPSAodWludDMyX3QpKDEgPDwgKGJhbmtfc2l6ZSArIDIpKTsKKwl9CisKKwlJUFZSX0RF QlVHX1ZFRCgiVkVEOiBSQU0gYmFuayBzaXplID0gJWQgYnl0ZXNcbiIsIHJhbV9iYW5rX3NpemUp OworCisJLyogaWYgRlcgYWxyZWFkeSBsb2FkZWQgZnJvbSBzdG9yYWdlICovCisJaWYgKHZlZF9w cml2LT52ZWRfZndfcHRyKSB7CisJCWZ3X3B0ciA9IHZlZF9wcml2LT52ZWRfZndfcHRyOworCX0g ZWxzZSB7CisJCWZ3X3B0ciA9IHZlZF9nZXRfZncoZGV2LCAmcmF3LCBGSVJNV0FSRV9OQU1FKTsK KwkJSVBWUl9ERUJVR19WRUQoIlZFRDpsb2FkIG1zdmR4X2Z3X21mbGRfREUyLjAuYmluIGJ5IHVk ZXZkXG4iKTsKKwl9CisJaWYgKCFmd19wdHIpIHsKKwkJSVBWUl9FUlJPUigiVkVEOmxvYWQgdmVk X2Z3LmJpbiBmYWlsZWQsaXMgdWRldmQgcnVubmluZz9cbiIpOworCQlyZXQgPSAxOworCQlnb3Rv IG91dDsKKwl9CisKKwlpZiAoIXZlZF9wcml2LT5md19sb2FkZWRfdG9fYm8pIHsgLyogTG9hZCBm aXJtd2FyZSBpbnRvIEJPICovCisJCUlQVlJfREVCVUdfVkVEKCJNU1ZEWDpsb2FkIHZlZF9mdy5i aW4gYnkgdWRldmQgaW50byBCT1xuIik7CisJCXJldCA9IHZlZF9nZXRfZndfYm8oZGV2LCAmcmF3 LCBGSVJNV0FSRV9OQU1FKTsKKwkJaWYgKHJldCkgeworCQkJSVBWUl9FUlJPUigiVkVEOiBmYWls ZWQgdG8gY2FsbCB2ZWRfZ2V0X2Z3X2JvLlxuIik7CisJCQlyZXQgPSAxOworCQkJZ290byBvdXQ7 CisJCX0KKwkJdmVkX3ByaXYtPmZ3X2xvYWRlZF90b19ibyA9IDE7CisJfQorCisJZncgPSAoc3Ry dWN0IHZlZF9mdyAqKSBmd19wdHI7CisKKwkvKiBuZWVkIGNoZWNrIGZ3LT52ZXI/ICovCisJdGV4 dF9wdHIgPSAodWludDMyX3QgKikoKHVpbnQ4X3QgKikgZndfcHRyICsgc2l6ZW9mKHN0cnVjdCB2 ZWRfZncpKTsKKwlkYXRhX3B0ciA9IHRleHRfcHRyICsgZnctPnRleHRfc2l6ZTsKKworCS8qIG1h eWJlIHdlIGNhbiBqdWRnZSBmdyB2ZXJzaW9uIGFjY29yZGluZyB0byBmdyB0ZXh0IHNpemUgKi8K KworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IFJldHJpZXZlZCBwb2ludGVycyBmb3IgZmlybXdhcmVc biIpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IHRleHRfc2l6ZTogJWRcbiIsIGZ3LT50ZXh0X3Np emUpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IGRhdGFfc2l6ZTogJWRcbiIsIGZ3LT5kYXRhX3Np emUpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6IGRhdGFfbG9jYXRpb246IDB4JXhcbiIsIGZ3LT5k YXRhX2xvY2F0aW9uKTsKKwlJUFZSX0RFQlVHX1ZFRCgiVkVEOiBGaXJzdCA0IGJ5dGVzIG9mIHRl eHQ6IDB4JXhcbiIsICp0ZXh0X3B0cik7CisJSVBWUl9ERUJVR19WRUQoIlZFRDogRmlyc3QgNCBi eXRlcyBvZiBkYXRhOiAweCV4XG4iLCAqZGF0YV9wdHIpOworCUlQVlJfREVCVUdfVkVEKCJWRUQ6 IFVwbG9hZGluZyBmaXJtd2FyZVxuIik7CisKKyNpZiBVUExPQURfRldfQllfRE1BCisJdmVkX3Vw bG9hZF9mdyhkZXZfcHJpdiwgMCwgdmVkX3ByaXYtPm10eF9tZW1fc2l6ZSAvIDQpOworI2Vsc2UK Kwl2ZWRfdXBsb2FkX2Z3KGRldl9wcml2LCBNVFhfQ09SRV9DT0RFX01FTSwgcmFtX2Jhbmtfc2l6 ZSwKKwkJICAgICAgUENfU1RBUlRfQUREUkVTUyAtIE1UWF9DT0RFX0JBU0UsIGZ3LT50ZXh0X3Np emUsCisJCSAgICAgIHRleHRfcHRyKTsKKwl2ZWRfdXBsb2FkX2Z3KGRldl9wcml2LCBNVFhfQ09S RV9EQVRBX01FTSwgcmFtX2Jhbmtfc2l6ZSwKKwkJICAgICAgZnctPmRhdGFfbG9jYXRpb24gLSBN VFhfREFUQV9CQVNFLCBmdy0+ZGF0YV9zaXplLAorCQkgICAgICBkYXRhX3B0cik7CisjZW5kaWYK KworCS8qCS0tIFNldCBzdGFydGluZyBQQyBhZGRyZXNzCSovCisJdmVkX3dyaXRlX210eF9jb3Jl X3JlZyhkZXZfcHJpdiwgTVRYX1BDLCBQQ19TVEFSVF9BRERSRVNTKTsKKworCS8qCS0tIFR1cm4g b24gdGhlIHRocmVhZAkqLworCVZFRF9SRUdfV1JJVEUzMihNVFhfRU5BQkxFX01UWF9FTkFCTEVf TUFTSywgTVRYX0VOQUJMRV9PRkZTRVQpOworCisJLyogV2FpdCBmb3IgdGhlIHNpZ25hdHVyZSB2 YWx1ZSB0byBiZSB3cml0dGVuIGJhY2sgKi8KKwlyZXQgPSB2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIo ZGV2X3ByaXYsIE1TVkRYX0NPTU1TX1NJR05BVFVSRSwKKwkJCQkgICAgTVNWRFhfQ09NTVNfU0lH TkFUVVJFX1ZBTFVFLAorCQkJCSAgICAweGZmZmZmZmZmLCAvKiBFbmFibGVkIGJpdHMgKi8KKwkJ CQkgICAgMjAwMDAwMCwgNSk7CisJaWYgKHJldCkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IGZpcm13 YXJlIGZhaWxzIHRvIGluaXRpYWxpemUuXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJSVBWUl9E RUJVR19WRUQoIlZFRDogTVRYIEluaXRpYWwgaW5kaWNhdGlvbnMgT0suXG4iKTsKKwlJUFZSX0RF QlVHX1ZFRCgiVkVEOiBNU1ZEWF9DT01NU19BUkVBX0FERFIgPSAlMDh4LlxuIiwKKwkJICAgICAg IE1TVkRYX0NPTU1TX0FSRUFfQUREUik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIv dmVkX2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyZGE1NgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9mdy5oCkBAIC0wLDAgKzEs NzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVkX2Z3Lmg6IFZFRCBmaXJtd2FyZSBzdXBw b3J0IGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IEludGVsIENvcnBvcmF0 aW9uLCBIaWxsc2Jvcm8sIE9SLCBVU0EKKyAqIENvcHlyaWdodCAoYykgSW1hZ2luYXRpb24gVGVj aG5vbG9naWVzIExpbWl0ZWQsIFVLCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVHVuZ3N0ZW4gR3Jh cGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4K KyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lU SE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFu a2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAq IEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLworCisKKyNpZm5kZWYgX1ZFRF9GV19IXworI2RlZmluZSBfVkVEX0ZX X0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorCisjZGVmaW5lIEZJUk1XQVJFSUQJCTB4MDE0 ZDQyYWIKKworLyogIE5vbi1PcHRpbWFsIEludmFsaWRhdGlvbiBpcyBub3QgZGVmYXVsdCAqLwor I2RlZmluZSBNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHU19NTVVfTk9OT1BUX0lOVgkyCisKKyNkZWZp bmUgRldfVkFfUkVOREVSX0hPU1RfSU5UCQkweDAwMDA0MDAwCisjZGVmaW5lIE1TVkRYX0RFVklD RV9OT0RFX0ZMQUdTX01NVV9IV19JTlZBTElEQVRJT04JMHgwMDAwMDAyMAorI2RlZmluZSBGV19E RVZBX0VSUk9SX0RFVEVDVEVEIDB4MDgwMDAwMDAKKworLyogVGhlcmUgaXMgbm8gd29yayBjdXJy ZW50bHkgdW5kZXJ3YXkgb24gdGhlIGhhcmR3YXJlICovCisjZGVmaW5lIE1TVkRYX0ZXX1NUQVRV U19IV19JRExFCTB4MDAwMDAwMDEKKyNkZWZpbmUgTVNWRFhfREVWSUNFX05PREVfRkxBR19CUk4y MzE1NF9CTE9DS19PTl9GRQkweDAwMDAwMjAwCisjZGVmaW5lIE1TVkRYX0RFVklDRV9OT0RFX0ZM QUdTX0RFRkFVTFRfRDAJCQkJXAorCShNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHU19NTVVfTk9OT1BU X0lOViB8CQkJXAorCQlNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHU19NTVVfSFdfSU5WQUxJREFUSU9O IHwJCVwKKwkJTVNWRFhfREVWSUNFX05PREVfRkxBR19CUk4yMzE1NF9CTE9DS19PTl9GRSkKKwor I2RlZmluZSBNU1ZEWF9ERVZJQ0VfTk9ERV9GTEFHU19ERUZBVUxUX0QxCQkJCVwKKwkoTVNWRFhf REVWSUNFX05PREVfRkxBR1NfTU1VX0hXX0lOVkFMSURBVElPTiB8CQkJXAorCQlNU1ZEWF9ERVZJ Q0VfTk9ERV9GTEFHX0JSTjIzMTU0X0JMT0NLX09OX0ZFKQorCisjZGVmaW5lIE1UWF9DT0RFX0JB U0UJCSgweDgwOTAwMDAwKQorI2RlZmluZSBNVFhfREFUQV9CQVNFCQkoMHg4Mjg4MDAwMCkKKyNk ZWZpbmUgUENfU1RBUlRfQUREUkVTUwkoMHg4MDkwMDAwMCkKKworI2RlZmluZSBNVFhfQ09SRV9D T0RFX01FTQkoMHgxMCkKKyNkZWZpbmUgTVRYX0NPUkVfREFUQV9NRU0JKDB4MTgpCisKKyNkZWZp bmUgUkVOREVDX0FfU0laRQkoNCAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBSRU5ERUNfQl9TSVpF CSgxMDI0ICogMTAyNCkKKworI2RlZmluZSBURVJNSU5BVElPTl9TSVpFCTQ4CisKKyNkZWZpbmUg TVNWRFhfUkVTRVRfTkVFRFNfUkVVUExPQURfRlcJCSgweDIpCisjZGVmaW5lIE1TVkRYX1JFU0VU X05FRURTX0lOSVRfRlcJCSgweDEpCisKK2ludDMyX3QgdmVkX2FsbG9jX2Z3X2JvKHN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdik7CisKK2ludDMyX3QgdmVkX3NldHVwX2Z3KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pcHZyL3ZlZF9pbml0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfaW5pdC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODJkZmQKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfaW5pdC5jCkBAIC0wLDAgKzEsODI5IEBACisvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioKKyAqIHZlZF9pbml0LmM6IFZFRCBpbml0aWFsaXphdGlvbiBhbmQgZGVp bml0aWFsaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlv biwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdpbmF0aW9uIFRlY2hu b2xvZ2llcyBMaW1pdGVkLCBVSworICogQ29weXJpZ2h0IChjKSAyMDAzIFR1bmdzdGVuIEdyYXBo aWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhP VVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmts aW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBB dXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICogICAgTGkg WmVuZyA8bGkuemVuZ0BpbnRlbC5jb20+CisgKiAgICBCaW5nbGluIENoZW4gPGJpbmdsaW4uY2hl bkBpbnRlbC5jb20+CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJpcHZyX2dlbS5o IgorI2luY2x1ZGUgImlwdnJfYnVmZmVyLmgiCisjaW5jbHVkZSAidmVkX2luaXQuaCIKKyNpbmNs dWRlICJ2ZWRfY21kLmgiCisjaW5jbHVkZSAidmVkX21zZy5oIgorI2luY2x1ZGUgInZlZF9yZWcu aCIKKyNpbmNsdWRlICJ2ZWRfZWMuaCIKKyNpbmNsdWRlICJ2ZWRfcG0uaCIKKyNpbmNsdWRlICJ2 ZWRfZncuaCIKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCitzdGF0aWMgc3NpemVfdAor dmVkX3Btc3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmli dXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYg PSBOVUxMOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBOVUxMOworCWludDMyX3Qg cmV0ID0gLUVJTlZBTDsKKworCWlmIChkcm1fZGV2ID09IE5VTEwpCisJCXJldHVybiAwOworCisJ ZGV2X3ByaXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0ZTsKKwl2ZWRfcHJpdiA9IGRldl9wcml2LT52 ZWRfcHJpdmF0ZTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodmVkX3Bt c3RhdGUsIDA0NDQsIHZlZF9wbXN0YXRlX3Nob3csIE5VTEwpOworCit2b2lkIHZlZF9jbGVhcl9p cnEoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXVpbnQzMl90IG10eF9pbnQgPSAwOworCisJ LyogQ2xlYXIgTVRYIGludGVycnVwdCAqLworCVJFR0lPX1dSSVRFX0ZJRUxEX0xJVEUobXR4X2lu dCwgTVNWRFhfSU5URVJSVVBUX1NUQVRVUywgTVRYX0lSUSwgMSk7CisJVkVEX1JFR19XUklURTMy KG10eF9pbnQsIE1TVkRYX0lOVEVSUlVQVF9DTEVBUl9PRkZTRVQpOworfQorCisvKiBmb2xsb3dp bmcgdHdvIGZ1bmN0aW9ucyBhbHNvIHdvcmtzIGZvciBDTFYgYW5kIE1GTEQgKi8KKy8qIElQVlJf SU5UX0VOQUJMRV9SIGlzIHNldCBpbiBpcHZyX2lycV8odW4paW5zdGFsbF9pc2xhbmRzICovCit2 b2lkIHZlZF9kaXNhYmxlX2lycShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBk cm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJLyp1aW50MzJf dCBpZXIgPSBkZXZfcHJpdi0+dmRjX2lycV9tYXNrICYgKH5fUFNCX0lSUV9NU1ZEWF9GTEFHKTsg Ki8KKworCXVpbnQzMl90IGVuYWJsZXMgPSAwOworCisJUkVHSU9fV1JJVEVfRklFTERfTElURShl bmFibGVzLCBNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTLCBNVFhfSVJRLCAwKTsKKwlWRURfUkVHX1dS SVRFMzIoZW5hYmxlcywgTVNWRFhfSE9TVF9JTlRFUlJVUFRfRU5BQkxFX09GRlNFVCk7CisKKwkv KiB3cml0ZSBpbiBzeXNpcnEuYyAqLworCS8qIFBTQl9XVkRDMzIoaWVyLCBQU0JfSU5UX0VOQUJM RV9SKTsgL1wqIGVzc2VudGlhbCAqXC8gKi8KK30KKwordm9pZCB2ZWRfZW5hYmxlX2lycShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJp diA9IGRldi0+ZGV2X3ByaXZhdGU7CisJLyogdWludDMyX3QgaWVyID0gZGV2X3ByaXYtPnZkY19p cnFfbWFzayB8IF9QU0JfSVJRX01TVkRYX0ZMQUc7ICovCisJdWludDMyX3QgZW5hYmxlcyA9IDA7 CisKKwkvKiBPbmx5IGVuYWJsZSB0aGUgbWFzdGVyIGNvcmUgSVJRKi8KKwlSRUdJT19XUklURV9G SUVMRF9MSVRFKGVuYWJsZXMsIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVMsIE1UWF9JUlEsCisJCQkg ICAgICAgMSk7CisJVkVEX1JFR19XUklURTMyKGVuYWJsZXMsIE1TVkRYX0hPU1RfSU5URVJSVVBU X0VOQUJMRV9PRkZTRVQpOworCisJLyogd3JpdGUgaW4gc3lzaXJxLmMgKi8KKwkvKiBQU0JfV1ZE QzMyKGllciwgUFNCX0lOVF9FTkFCTEVfUik7IC9cKiBlc3NlbnRpYWwgKlwvICovCit9CisKKy8q CisgKiB0aGUgb3JpZ2luYWwgMTAwMCBvZiB1ZGVsYXkgaXMgZGVyaXZlIGZyb20gcmVmZXJlbmNl IGRyaXZlcgorICogRnJvbSBMaXUsIEhhaXlhbmcsIGNoYW5nZWQgdGhlIG9yaWdpbmlhbCB1ZGVs YXkgdmFsdWUgZnJvbSAxMDAwIHRvIDUKKyAqIGNhbiBzYXZlIDMlIEMwIHJlc2lkZW5jZQorICov CitpbnQzMl90Cit2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUg KmRldl9wcml2LAorCQkJICAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUsIHVpbnQz Ml90IGVuYWJsZSwKKwkJCSAgICB1aW50MzJfdCBwb2xsX2NudCwgdWludDMyX3QgdGltZW91dCkK K3sKKwl1aW50MzJfdCByZWdfdmFsdWUgPSAwOworCXdoaWxlIChwb2xsX2NudCkgeworCQlyZWdf dmFsdWUgPSBWRURfUkVHX1JFQUQzMihvZmZzZXQpOworCQlpZiAodmFsdWUgPT0gKHJlZ192YWx1 ZSAmIGVuYWJsZSkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBXYWl0IGEgYml0ICovCisJCUlQVlJf VURFTEFZKHRpbWVvdXQpOworCQlwb2xsX2NudC0tOworCX0KKwlJUFZSX0RFQlVHX1JFRygiTVNW RFg6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgcmVnaXN0ZXIgJTA4eDoiCisJCSAgICAgICAi IGV4cGVjdGluZyAlMDh4IChtYXNrICUwOHgpLCBnb3QgJTA4eFxuIiwKKwkJICAgICAgIG9mZnNl dCwgdmFsdWUsIGVuYWJsZSwgcmVnX3ZhbHVlKTsKKworCXJldHVybiAtRUZBVUxUOworfQorCit2 b2lkCit2ZWRfc2V0X2Nsb2NrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJfdCBjbG9j a19zdGF0ZSkKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCXVpbnQzMl90IG9sZF9jbG9ja19zdGF0ZSA9IDA7CisJLyogSVBWUl9ERUJV R19WRUQoIlNldENsb2NrcyB0byAleC5cbiIsIGNsb2NrX3N0YXRlKTsgKi8KKwlvbGRfY2xvY2tf c3RhdGUgPSBWRURfUkVHX1JFQUQzMihNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQpOworCWlm IChvbGRfY2xvY2tfc3RhdGUgPT0gY2xvY2tfc3RhdGUpCisJCXJldHVybjsKKworCWlmIChjbG9j a19zdGF0ZSA9PSAwKSB7CisJCS8qIFR1cm4gb2ZmIGNsb2NrcyBwcm9jZWR1cmUgKi8KKwkJaWYg KG9sZF9jbG9ja19zdGF0ZSkgeworCQkJLyogVHVybiBvZmYgYWxsIHRoZSBjbG9ja3MgZXhjZXB0 IGNvcmUgKi8KKwkJCVZFRF9SRUdfV1JJVEUzMigKKwkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9D T1JFX01BTl9DTEtfRU5BQkxFX01BU0ssCisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfT0ZGU0VU KTsKKworCQkJLyogTWFrZSBzdXJlIGFsbCB0aGUgY2xvY2tzIGFyZSBvZmYgZXhjZXB0IGNvcmUg Ki8KKwkJCXZlZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZfcHJpdiwKKwkJCQlNU1ZEWF9NQU5fQ0xL X0VOQUJMRV9PRkZTRVQsCisJCQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VO QUJMRV9NQVNLLAorCQkJCTB4ZmZmZmZmZmYsIDIwMDAwMDAsIDUpOworCisJCQkvKiBUdXJuIG9m ZiBjb3JlIGNsb2NrICovCisJCQlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfTUFOX0NMS19FTkFC TEVfT0ZGU0VUKTsKKwkJfQorCX0gZWxzZSB7CisJCXVpbnQzMl90IGNsb2Nrc19lbiA9IGNsb2Nr X3N0YXRlOworCisJCS8qTWFrZSBzdXJlIHRoYXQgY29yZSBjbG9jayBpcyBub3QgYWNjaWRlbnRh bGx5IHR1cm5lZCBvZmYgKi8KKwkJY2xvY2tzX2VuIHw9IE1TVkRYX01BTl9DTEtfRU5BQkxFX0NP UkVfTUFOX0NMS19FTkFCTEVfTUFTSzsKKworCQkvKiBJZiBhbGwgY2xvY2tzIHdlcmUgZGlzYWJs ZSBkbyB0aGUgYnJpbmcgdXAgcHJvY2VkdXJlICovCisJCWlmIChvbGRfY2xvY2tfc3RhdGUgPT0g MCkgeworCQkJLyogdHVybiBvbiBjb3JlIGNsb2NrICovCisJCQlWRURfUkVHX1dSSVRFMzIoCisJ CQkJTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9NQU5fQ0xLX0VOQUJMRV9NQVNLLAorCQkJCU1T VkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCk7CisKKwkJCS8qIE1ha2Ugc3VyZSBjb3JlIGNsb2Nr IGlzIG9uICovCisJCQl2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsCisJCQkJTVNWRFhf TUFOX0NMS19FTkFCTEVfT0ZGU0VULAorCQkJCU1TVkRYX01BTl9DTEtfRU5BQkxFX0NPUkVfTUFO X0NMS19FTkFCTEVfTUFTSywKKwkJCQkweGZmZmZmZmZmLCAyMDAwMDAwLCA1KTsKKworCQkJLyog dHVybiBvbiB0aGUgb3RoZXIgY2xvY2tzIGFzIHdlbGwgKi8KKwkJCVZFRF9SRUdfV1JJVEUzMihj bG9ja3NfZW4sIE1TVkRYX01BTl9DTEtfRU5BQkxFX09GRlNFVCk7CisKKwkJCS8qIE1ha2Ugc3Vy ZSB0aGF0IGFsbCB0aGV5IGFyZSBvbiAqLworCQkJdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9w cml2LAorCQkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQsCisJCQkJCWNsb2Nrc19lbiwg MHhmZmZmZmZmZiwgMjAwMDAwMCwgNSk7CisJCX0gZWxzZSB7CisJCQlWRURfUkVHX1dSSVRFMzIo Y2xvY2tzX2VuLCBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQpOworCisJCQkvKiBNYWtlIHN1 cmUgdGhhdCB0aGV5IGFyZSBvbiAqLworCQkJdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2 LAorCQkJCQlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9PRkZTRVQsCisJCQkJCWNsb2Nrc19lbiwgMHhm ZmZmZmZmZiwgMjAwMDAwMCwgNSk7CisJCX0KKwl9Cit9CisKK2ludDMyX3QgdmVkX2NvcmVfcmVz ZXQoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2KQoreworCWludDMyX3QgcmV0ID0g MDsKKwlpbnQzMl90IGxvb3A7CisJdWludDMyX3QgY21kOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAq dmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJLyogRW5hYmxlIENsb2NrcyAqLwor CUlQVlJfREVCVUdfR0VORVJBTCgiRW5hYmxpbmcgY2xvY2tzLlxuIik7CisJdmVkX3NldF9jbG9j a3MoZGV2X3ByaXYtPmRldiwgY2xrX2VuYWJsZV9hbGwpOworCisJLyogQWx3YXlzIHBhdXNlIHRo ZSBNTVUgYXMgdGhlIGNvcmUgbWF5IGJlIHN0aWxsIGFjdGl2ZQorCSAqIHdoZW4gcmVzZXR0aW5n LiAgSXQgaXMgdmVyeSBiYWQgdG8gaGF2ZSBtZW1vcnkKKwkgKiBhY3Rpdml0eSBhdCB0aGUgc2Ft ZSB0aW1lIGFzIGEgcmVzZXQgLSBWZXJ5IFZlcnkgYmFkCisJICovCisJVkVEX1JFR19XUklURTMy KDIsIE1TVkRYX01NVV9DT05UUk9MMF9PRkZTRVQpOworCisJLyogQlJOMjYxMDYsIEJSTjIzOTQ0 LCBCUk4zMzY3MSAqLworCS8qIFRoaXMgaXMgbmVjY2Vzc2FyeSBmb3IgYWxsIGNvcmVzIHVwIHRv IFRvdXJtYWxpbmUgKi8KKwlpZiAoKFZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPUkVfUkVWX09GRlNF VCkgPCAweDAwMDUwNTAyKSAmJgorCQkoVkVEX1JFR19SRUFEMzIoTVNWRFhfSU5URVJSVVBUX1NU QVRVU19PRkZTRVQpCisJCQkmIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfTU1VX0ZBVUxUX0lSUV9N QVNLKSAmJgorCQkoVkVEX1JFR19SRUFEMzIoTVNWRFhfTU1VX1NUQVRVU19PRkZTRVQpICYgMSkp IHsKKwkJdWludDMyX3QgKnBwdGQ7CisJCXVpbnQzMl90IGxvb3A7CisJCXVpbnQzMl90IHB0ZF9h ZGRyOworCisJCS8qIGRvIHdvcmsgYXJvdW5kICovCisJCXB0ZF9hZGRyID0gcGFnZV90b19wZm4o dmVkX3ByaXYtPm1tdV9yZWNvdmVyX3BhZ2UpCisJCQkJCTw8IFBBR0VfU0hJRlQ7CisJCXBwdGQg PSBrbWFwKHZlZF9wcml2LT5tbXVfcmVjb3Zlcl9wYWdlKTsKKwkJaWYgKCFwcHRkKSB7CisJCQlJ UFZSX0VSUk9SKCJmYWlsZWQgdG8ga21hcCBtbXUgcmVjb3ZlciBwYWdlLlxuIik7CisJCQlyZXR1 cm4gLTE7CisJCX0KKwkJZm9yIChsb29wID0gMDsgbG9vcCA8IDEwMjQ7IGxvb3ArKykKKwkJCXBw dGRbbG9vcF0gPSBwdGRfYWRkciB8IDB4MDAwMDAwMDM7CisJCVZFRF9SRUdfV1JJVEUzMihwdGRf YWRkciwgTVNWRFhfTU1VX0RJUl9MSVNUX0JBU0VfT0ZGU0VUICsgIDApOworCQlWRURfUkVHX1dS SVRFMzIocHRkX2FkZHIsIE1TVkRYX01NVV9ESVJfTElTVF9CQVNFX09GRlNFVCArICA0KTsKKwkJ VkVEX1JFR19XUklURTMyKHB0ZF9hZGRyLCBNU1ZEWF9NTVVfRElSX0xJU1RfQkFTRV9PRkZTRVQg KyAgOCk7CisJCVZFRF9SRUdfV1JJVEUzMihwdGRfYWRkciwgTVNWRFhfTU1VX0RJUl9MSVNUX0JB U0VfT0ZGU0VUICsgMTIpOworCisJCVZFRF9SRUdfV1JJVEUzMig2LCBNU1ZEWF9NTVVfQ09OVFJP TDBfT0ZGU0VUKTsKKwkJVkVEX1JFR19XUklURTMyKE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfTU1V X0ZBVUxUX0lSUV9NQVNLLAorCQkJCQlNU1ZEWF9JTlRFUlJVUFRfU1RBVFVTX09GRlNFVCk7CisJ CWt1bm1hcCh2ZWRfcHJpdi0+bW11X3JlY292ZXJfcGFnZSk7CisJfQorCisJLyogbWFrZSBzdXJl ICpBTEwqIG91dHN0YW5kaW5nIHJlYWRzIGhhdmUgZ29uZSBhd2F5ICovCisJZm9yIChsb29wID0g MDsgbG9vcCA8IDEwOyBsb29wKyspCisJCXJldCA9IHZlZF93YWl0X2Zvcl9yZWdpc3RlcihkZXZf cHJpdiwgTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VULAorCQkJCQkgICAgMCwgMHhmZiwgMTAwLCAx KTsKKwlpZiAocmV0KSB7CisJCUlQVlJfREVCVUdfV0FSTigiTVNWRFhfTU1VX01FTV9SRVEgaXMg JWQsXG4iCisJCQkiaW5kaWNhdGUgb3V0c3RhbmRpbmcgcmVhZCByZXF1ZXN0IDAuXG4iLAorCQkJ VkVEX1JFR19SRUFEMzIoTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VUKSk7CisJCXJldCA9IC0xOwor CQlyZXR1cm4gcmV0OworCX0KKwkvKiBkaXNjb25uZWN0IFJFTkRFQyBkZWNvZGVycyBmcm9tIG1l bW9yeSAqLworCWNtZCA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX1JFTkRFQ19DT05UUk9MMV9PRkZT RVQpOworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wxLCBSRU5E RUNfREVDX0RJU0FCTEUsIDEpOworCVZFRF9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JFTkRFQ19D T05UUk9MMV9PRkZTRVQpOworCisJLyogSXNzdWUgc29mdHdhcmUgcmVzZXQgZm9yIGFsbCBidXQg Y29yZSAqLworCVZFRF9SRUdfV1JJVEUzMigodW5zaWduZWQgaW50KX5NU1ZEWF9DT05UUk9MX01T VkRYX1NPRlRfUkVTRVRfTUFTSywKKwkJCU1TVkRYX0NPTlRST0xfT0ZGU0VUKTsKKwlWRURfUkVH X1JFQUQzMihNU1ZEWF9DT05UUk9MX09GRlNFVCk7CisJLyogYml0IGZvcm1hdCBpcyBzZXQgYXMg bGl0dGxlIGVuZGlhbiAqLworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT05UUk9MX09GRlNF VCk7CisJLyogbWFrZSBzdXJlIHJlYWQgcmVxdWVzdHMgYXJlIHplcm8gKi8KKwlyZXQgPSB2ZWRf d2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIE1TVkRYX01NVV9NRU1fUkVRX09GRlNFVCwKKwkJ CQkgICAgMCwgMHhmZiwgMTAwLCAxMDApOworCWlmICghcmV0KSB7CisJCS8qIElzc3VlIHNvZnR3 YXJlIHJlc2V0ICovCisJCVZFRF9SRUdfV1JJVEUzMihNU1ZEWF9DT05UUk9MX01TVkRYX1NPRlRf UkVTRVRfTUFTSywKKwkJCQlNU1ZEWF9DT05UUk9MX09GRlNFVCk7CisKKwkJcmV0ID0gdmVkX3dh aXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LCBNU1ZEWF9DT05UUk9MX09GRlNFVCwgMCwKKwkJCQkJ TVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0ssCisJCQkJCTIwMDAwMDAsIDUpOwor CQlpZiAoIXJldCkgeworCQkJLyogQ2xlYXIgaW50ZXJydXB0IGVuYWJsZWQgZmxhZyAqLworCQkJ VkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0hPU1RfSU5URVJSVVBUX0VOQUJMRV9PRkZTRVQpOwor CisJCQkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgZmxhZ3MgKi8KKwkJCVZFRF9SRUdf V1JJVEUzMigweEZGRkZGRkZGLCBNU1ZEWF9JTlRFUlJVUFRfQ0xFQVJfT0ZGU0VUKTsKKwkJfSBl bHNlIHsKKwkJCUlQVlJfREVCVUdfV0FSTigiTVNWRFhfQ09OVFJPTF9PRkZTRVQgaXMgJWQsXG4i CisJCQkJImluZGljYXRlIHNvZnR3YXJlIHJlc2V0IGZhaWxlZC5cbiIsCisJCQkJVkVEX1JFR19S RUFEMzIoTVNWRFhfQ09OVFJPTF9PRkZTRVQpKTsKKwkJfQorCX0gZWxzZSB7CisJCUlQVlJfREVC VUdfV0FSTigiTVNWRFhfTU1VX01FTV9SRVEgaXMgJWQsXG4iCisJCQkiaW5kaWNhdGUgb3V0c3Rh bmRpbmcgcmVhZCByZXF1ZXN0IDEuXG4iLAorCQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfTU1VX01F TV9SRVFfT0ZGU0VUKSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXNldCBjaGlw IGFuZCBkaXNhYmxlIGludGVycnVwdHMuCisgKiBSZXR1cm4gMCBzdWNjZXNzLCAxIGZhaWx1cmUK KyAqIHVzZSB2ZWRfY29yZV9yZXNldCBpbnN0ZWFkIG9mIHZlZF9yZXNldAorICovCitpbnQzMl90 IHZlZF9yZXNldChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50MzJf dCByZXQgPSAwOworCisJLyogSXNzdWUgc29mdHdhcmUgcmVzZXQgKi8KKwkvKiBWRURfUkVHX1dS SVRFMzIobXN2ZHhfc3dfcmVzZXRfYWxsLCBNU1ZEWF9DT05UUk9MKTsgKi8KKwlWRURfUkVHX1dS SVRFMzIoTVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0ssCisJCQlNU1ZEWF9DT05U Uk9MX09GRlNFVCk7CisKKwlyZXQgPSB2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIE1T VkRYX0NPTlRST0xfT0ZGU0VULCAwLAorCQkJTVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VU X01BU0ssIDIwMDAwMDAsIDUpOworCWlmICghcmV0KSB7CisJCS8qIENsZWFyIGludGVycnVwdCBl bmFibGVkIGZsYWcgKi8KKwkJVkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0hPU1RfSU5URVJSVVBU X0VOQUJMRV9PRkZTRVQpOworCisJCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBmbGFn cyAqLworCQlWRURfUkVHX1dSSVRFMzIoMHhGRkZGRkZGRiwgTVNWRFhfSU5URVJSVVBUX0NMRUFS X09GRlNFVCk7CisJfSBlbHNlIHsKKwkJSVBWUl9ERUJVR19XQVJOKCJNU1ZEWF9DT05UUk9MX09G RlNFVCBpcyAlZCxcbiIKKwkJCSJpbmRpY2F0ZSBzb2Z0d2FyZSByZXNldCBmYWlsZWQuXG4iLAor CQkJVkVEX1JFR19SRUFEMzIoTVNWRFhfQ09OVFJPTF9PRkZTRVQpKTsKKwl9CisKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50MzJfdCB2ZWRfYWxsb2NfY2NiX2Zvcl9yZW5kZWMoc3RydWN0 IHZlZF9wcml2YXRlICp2ZWRfcHJpdiwKKwkJCQkJCQkJCQlpbnQzMl90IGNjYjBfc2l6ZSwKKwkJ CQkJCQkJCQlpbnQzMl90IGNjYjFfc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g dmVkX3ByaXYtPmRldl9wcml2LT5kZXY7CisJc2l6ZV90IHNpemU7CisJdWludDhfdCAqY2NiMF9h ZGRyID0gTlVMTDsKKwl1aW50OF90ICpjY2IxX2FkZHIgPSBOVUxMOworCisJSVBWUl9ERUJVR19J TklUKCJWRUQ6IHNldHRpbmcgdXAgUkVOREVDLCBhbGxvY2F0ZSBDQ0IgMC8xXG4iKTsKKworCS8q aGFuZGxpbmcgZm9yIGNjYjAqLworCWlmICh2ZWRfcHJpdi0+Y2NiMCA9PSBOVUxMKSB7CisJCXNp emUgPSByb3VuZHVwKGNjYjBfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJaWYgKHNpemUgPT0gMCkKKwkJ CXJldHVybiAtRUlOVkFMOworCisJCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJCXZl ZF9wcml2LT5jY2IwID0gaXB2cl9nZW1fb2JqX2NyZWF0ZV9hbmRfYmluZChkZXYsIHNpemUpOwor CQlpZiAodmVkX3ByaXYtPmNjYjAgPT0gTlVMTCkgeworCQkJSVBWUl9FUlJPUigiVkVEOiBmYWls ZWQgdG8gYWxsb2NhdGUgY2NiMCBidWZmZXIuXG4iKTsKKwkJCXZlZF9wcml2LT5jY2IwID0gTlVM TDsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdmVkX3ByaXYtPmJhc2VfYWRkcjAgPSBp cHZyX2dlbV9vYmpfbW11X29mZnNldCh2ZWRfcHJpdi0+Y2NiMCk7CisKKwkJY2NiMF9hZGRyID0g aXB2cl9nZW1fb2JqZWN0X3ZtYXAodmVkX3ByaXYtPmNjYjApOworCQlpZiAoSVNfRVJSKGNjYjBf YWRkcikpIHsKKwkJCUlQVlJfRVJST1IoIlZFRDoga21hcCBmYWlsZWQgZm9yIGNjYjAgYnVmZmVy LlxuIik7CisJCQlyZXR1cm4gUFRSX0VSUihjY2IwX2FkZHIpOworCQl9CisKKwkJbWVtc2V0KGNj YjBfYWRkciwgMCwgc2l6ZSk7CisJCXZ1bm1hcChjY2IwX2FkZHIpOworCX0KKworCS8qaGFuZGxp bmcgZm9yIGNjYjEqLworCWlmICh2ZWRfcHJpdi0+Y2NiMSA9PSBOVUxMKSB7CisJCXNpemUgPSBy b3VuZHVwKGNjYjFfc2l6ZSwgUEFHRV9TSVpFKTsKKwkJaWYgKHNpemUgPT0gMCkKKwkJCXJldHVy biAtRUlOVkFMOworCisJCS8qIEFsbG9jYXRlIHRoZSBuZXcgb2JqZWN0ICovCisJCXZlZF9wcml2 LT5jY2IxID0gaXB2cl9nZW1fb2JqX2NyZWF0ZV9hbmRfYmluZChkZXYsIHNpemUpOworCQlpZiAo dmVkX3ByaXYtPmNjYjEgPT0gTlVMTCkgeworCQkJSVBWUl9FUlJPUigiVkVEOiBmYWlsZWQgdG8g YWxsb2NhdGUgY2NiMSBidWZmZXIuXG4iKTsKKwkJCXZlZF9wcml2LT5jY2IxID0gTlVMTDsKKwkJ CXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJdmVkX3ByaXYtPmJhc2VfYWRkcjEgPSBpcHZyX2dl bV9vYmpfbW11X29mZnNldCh2ZWRfcHJpdi0+Y2NiMSk7CisKKwkJY2NiMV9hZGRyID0gaXB2cl9n ZW1fb2JqZWN0X3ZtYXAodmVkX3ByaXYtPmNjYjEpOworCQlpZiAoSVNfRVJSKGNjYjFfYWRkcikp IHsKKwkJCUlQVlJfRVJST1IoIlZFRDoga21hcCBmYWlsZWQgZm9yIGNjYjEgYnVmZmVyLlxuIik7 CisJCQlyZXR1cm4gUFRSX0VSUihjY2IxX2FkZHIpOworCQl9CisKKwkJbWVtc2V0KGNjYjFfYWRk ciwgMCwgc2l6ZSk7CisJCXZ1bm1hcChjY2IxX2FkZHIpOworCX0KKworCUlQVlJfREVCVUdfSU5J VCgiVkVEOiBSRU5ERUMgQTogJTA4eCBSRU5ERUMgQjogJTA4eFxuIiwKKwkJCXZlZF9wcml2LT5i YXNlX2FkZHIwLCB2ZWRfcHJpdi0+YmFzZV9hZGRyMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQgdmVkX2ZyZWVfY2NiKHN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYpCit7CisJ aWYgKHZlZF9wcml2LT5jY2IwKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9j a2VkKCZ2ZWRfcHJpdi0+Y2NiMC0+YmFzZSk7CisJCXZlZF9wcml2LT5jY2IwID0gTlVMTDsKKwl9 CisJaWYgKHZlZF9wcml2LT5jY2IxKSB7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3Vu bG9ja2VkKCZ2ZWRfcHJpdi0+Y2NiMS0+YmFzZSk7CisJCXZlZF9wcml2LT5jY2IxID0gTlVMTDsK Kwl9Cit9CisKK3N0YXRpYyB2b2lkIHZlZF9yZW5kZWNfaW5pdF9ieV9yZWcoc3RydWN0IGRybV9k ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYt PmRldl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+ dmVkX3ByaXZhdGU7CisJdWludDMyX3QgY21kOworCisJVkVEX1JFR19XUklURTMyKHZlZF9wcml2 LT5iYXNlX2FkZHIwLCBNU1ZEWF9SRU5ERUNfQkFTRV9BRERSMF9PRkZTRVQpOworCVZFRF9SRUdf V1JJVEUzMih2ZWRfcHJpdi0+YmFzZV9hZGRyMSwgTVNWRFhfUkVOREVDX0JBU0VfQUREUjFfT0ZG U0VUKTsKKworCWNtZCA9IDA7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9SRU5ERUNf QlVGRkVSX1NJWkUsCisJCQlSRU5ERUNfQlVGRkVSX1NJWkUwLCBSRU5ERUNfQV9TSVpFIC8gNDA5 Nik7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkUsCisJ CQlSRU5ERUNfQlVGRkVSX1NJWkUxLCBSRU5ERUNfQl9TSVpFIC8gNDA5Nik7CisJVkVEX1JFR19X UklURTMyKGNtZCwgTVNWRFhfUkVOREVDX0JVRkZFUl9TSVpFX09GRlNFVCk7CisKKwljbWQgPSAw OworCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wxLAorCQkJUkVO REVDX0RFQ09ERV9TVEFSVF9TSVpFLCAwKTsKKwlSRUdJT19XUklURV9GSUVMRChjbWQsIE1TVkRY X1JFTkRFQ19DT05UUk9MMSwKKwkJCVJFTkRFQ19CVVJTVF9TSVpFX1csIDEpOworCVJFR0lPX1dS SVRFX0ZJRUxEKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wxLAorCQkJUkVOREVDX0JVUlNUX1NJ WkVfUiwgMSk7CisJUkVHSU9fV1JJVEVfRklFTEQoY21kLCBNU1ZEWF9SRU5ERUNfQ09OVFJPTDEs CisJCQlSRU5ERUNfRVhURVJOQUxfTUVNT1JZLCAxKTsKKwlWRURfUkVHX1dSSVRFMzIoY21kLCBN U1ZEWF9SRU5ERUNfQ09OVFJPTDFfT0ZGU0VUKTsKKworCWNtZCA9IDB4MDAxMDEwMTA7CisJVkVE X1JFR19XUklURTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRFWFQwX09GRlNFVCk7CisJVkVEX1JF R19XUklURTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRFWFQxX09GRlNFVCk7CisJVkVEX1JFR19X UklURTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRFWFQyX09GRlNFVCk7CisJVkVEX1JFR19XUklU RTMyKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRFWFQzX09GRlNFVCk7CisJVkVEX1JFR19XUklURTMy KGNtZCwgTVNWRFhfUkVOREVDX0NPTlRFWFQ0X09GRlNFVCk7CisJVkVEX1JFR19XUklURTMyKGNt ZCwgTVNWRFhfUkVOREVDX0NPTlRFWFQ1X09GRlNFVCk7CisKKwljbWQgPSAwOworCVJFR0lPX1dS SVRFX0ZJRUxEKGNtZCwgTVNWRFhfUkVOREVDX0NPTlRST0wwLCBSRU5ERUNfSU5JVElBTElTRSwK KwkJCTEpOworCVZFRF9SRUdfV1JJVEUzMihjbWQsIE1TVkRYX1JFTkRFQ19DT05UUk9MMF9PRkZT RVQpOworfQorCitpbnQzMl90IHZlZF9yZW5kZWNfaW5pdF9ieV9tc2coc3RydWN0IGRybV9kZXZp Y2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl dl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVk X3ByaXZhdGU7CisKKwkvKiBhdCB0aGlzIHN0YWdlLCBGVyBpcyB1cGxhb2RlZCBzdWNjZXNzZnVs bHksCisJICogY2FuIHNlbmQgUkVOREVDIGluaXQgbWVzc2FnZSAqLworCXN0cnVjdCBmd19pbml0 X21zZyBpbml0X21zZzsKKwlpbml0X21zZy5oZWFkZXIuYml0cy5tc2dfc2l6ZSA9IHNpemVvZihz dHJ1Y3QgZndfaW5pdF9tc2cpOworCWluaXRfbXNnLmhlYWRlci5iaXRzLm1zZ190eXBlID0gTVRY X01TR0lEX0lOSVQ7CisJaW5pdF9tc2cucmVuZGVjX2FkZHIwID0gdmVkX3ByaXYtPmJhc2VfYWRk cjA7CisJaW5pdF9tc2cucmVuZGVjX2FkZHIxID0gdmVkX3ByaXYtPmJhc2VfYWRkcjE7CisJaW5p dF9tc2cucmVuZGVjX3NpemUuYml0cy5yZW5kZWNfc2l6ZTAgPSBSRU5ERUNfQV9TSVpFIC8gKDQg KiAxMDI0KTsKKwlpbml0X21zZy5yZW5kZWNfc2l6ZS5iaXRzLnJlbmRlY19zaXplMSA9IFJFTkRF Q19CX1NJWkUgLyAoNCAqIDEwMjQpOworCXJldHVybiB2ZWRfbXR4X3NlbmQoZGV2X3ByaXYsICh2 b2lkICopJmluaXRfbXNnKTsKK30KKworI2lmZGVmIENPTkZJR19EUk1fSVBWUl9FQworc3RhdGlj IHZvaWQgdmVkX2luaXRfZWMoc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJpdikKK3sKKwlzdHJ1 Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSB2ZWRfcHJpdi0+ZGV2X3ByaXY7CisKKwkv KiB3ZSBzaG91bGQgcmVzdG9yZSB0aGUgc3RhdGUsIGlmIHdlIHBvd2VyIGRvd24vdXAgZHVyaW5n IEVDICovCisJVkVEX1JFR19XUklURTMyKDAsIDB4MjAwMCArIDB4Y2M0KTsgLyogRVhUX0ZXX0VS Uk9SX1NUQVRFICovCisJVkVEX1JFR19XUklURTMyKDAsIDB4MjAwMCArIDB4Y2IwKTsgLyogRVhU X0ZXX0xBU1RfTUJTICovCisJVkVEX1JFR19XUklURTMyKDAsIDB4MjAwMCArIDB4Y2I0KTsgLyog RVhUX0ZXX0xBU1RfTUJTICovCisJVkVEX1JFR19XUklURTMyKDAsIDB4MjAwMCArIDB4Y2I4KTsg LyogRVhUX0ZXX0xBU1RfTUJTICovCisJVkVEX1JFR19XUklURTMyKDAsIDB4MjAwMCArIDB4Y2Jj KTsgLyogRVhUX0ZXX0xBU1RfTUJTICovCisKKwl2ZWRfcHJpdi0+dmVjX2VjX21lbV9zYXZlZCA9 IDE7CisKKwl2ZWRfcHJpdi0+dmVkX2VjX2N0eFswXSA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVj dCB2ZWRfZWNfY29udGV4dCkgKgorCQkJCVZFRF9NQVhfRUNfSU5TVEFOQ0UsCisJCQkJR0ZQX0tF Uk5FTCk7CisJaWYgKHZlZF9wcml2LT52ZWRfZWNfY3R4WzBdID09IE5VTEwpIHsKKwkJSVBWUl9F UlJPUigiVkVEOiBmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZWMgY3R4LlxuIik7CisJfSBl bHNlIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDE7IGkgPCBWRURfTUFYX0VDX0lOU1RBTkNFOyBp KyspCisJCQl2ZWRfcHJpdi0+dmVkX2VjX2N0eFtpXSA9CisJCQkJdmVkX3ByaXYtPnZlZF9lY19j dHhbMF0gKyBpOworCQlmb3IgKGkgPSAwOyBpIDwgVkVEX01BWF9FQ19JTlNUQU5DRTsgaSsrKQor CQkJdmVkX3ByaXYtPnZlZF9lY19jdHhbaV0tPmZlbmNlID0KKwkJCQkJVkVEX0lOVkFMSURfRkVO Q0U7CisJfQorCUlOSVRfV09SSygmKHZlZF9wcml2LT5lY193b3JrKSwgdmVkX2RvX2NvbmNlYWxt ZW50KTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RhdGljIGludDMyX3QgdmVkX3N0YXJ0dXBf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRl ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRf cHJpdjsKKworCXZlZF9wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZlZF9wcml2YXRlKSwg R0ZQX0tFUk5FTCk7CisJaWYgKHZlZF9wcml2ID09IE5VTEwpIHsKKwkJSVBWUl9FUlJPUigiVkVE OiBhbGxvYyB2ZWRfcHJpdmF0ZSBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQor CisJZGV2X3ByaXYtPnZlZF9wcml2YXRlID0gdmVkX3ByaXY7CisJbWVtc2V0KHZlZF9wcml2LCAw LCBzaXplb2Yoc3RydWN0IHZlZF9wcml2YXRlKSk7CisJdmVkX3ByaXYtPmRldl9wcml2ID0gZGV2 X3ByaXY7CisJdmVkX3ByaXYtPmRldiA9IGRldjsKKwl2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1 bml0ID0gMDsKKworCXZlZF9wcml2LT5wbV9nYXRpbmdfY291bnQgPSAwOworCisJLyogZ2V0IGRl dmljZSAtLT4gZHJtX2RldmljZSAtLT4gZHJtX2lwdnJfcHJpdmF0ZSAtLT4gdmVkX3ByaXYKKwkg KiBmb3IgdmVkX3Btc3RhdGVfc2hvdzogdmVkX3BtcG9saWN5CisJICogaWYgbm90IHBjaV9zZXRf ZHJ2ZGF0YSwgY2FuJ3QgZ2V0IGRybV9kZXZpY2UgZnJvbSBkZXZpY2UKKwkgKi8KKwkvKiBwY2lf c2V0X2RydmRhdGEoZGV2LT5wZGV2LCBkZXYpOyAqLworCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUo JmRldi0+cGxhdGZvcm1kZXYtPmRldiwKKwkJCSAgICAgICAmZGV2X2F0dHJfdmVkX3Btc3RhdGUp KQorCQlJUFZSX0VSUk9SKCJWRUQ6IGNvdWxkIG5vdCBjcmVhdGUgc3lzZnMgZmlsZVxuIik7CisK Kwl2ZWRfcHJpdi0+c3lzZnNfcG1zdGF0ZSA9IHN5c2ZzX2dldF9kaXJlbnQoCisJCQkJCQlkZXYt PnBsYXRmb3JtZGV2LT5kZXYua29iai5zZCwKKwkJCQkJCSJ2ZWRfcG1zdGF0ZSIpOworCisjaWZk ZWYgQ09ORklHX0RSTV9JUFZSX0VDCisJdmVkX2luaXRfZWModmVkX3ByaXYpOworI2VuZGlmCisK KwkvKiBJbml0aWFsaXplIGNvbWFuZCB2ZWQgcXVldWVpbmcgKi8KKwlJTklUX0xJU1RfSEVBRCgm dmVkX3ByaXYtPnZlZF9xdWV1ZSk7CisJbXV0ZXhfaW5pdCgmdmVkX3ByaXYtPnZlZF9tdXRleCk7 CisJc3Bpbl9sb2NrX2luaXQoJnZlZF9wcml2LT52ZWRfbG9jayk7CisJdmVkX3ByaXYtPm1tdV9y ZWNvdmVyX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9ETUEzMik7CisJaWYgKCF2ZWRfcHJpdi0+bW11 X3JlY292ZXJfcGFnZSkKKwkJZ290byBlcnJfZXhpdDsKKworCXJldHVybiAwOworCitlcnJfZXhp dDoKKwlJUFZSX0VSUk9SKCJWRUQ6IGluaXQgb25lIHRpbWUgZmFpbGVkLlxuIik7CisJa2ZyZWUo ZGV2X3ByaXYtPnZlZF9wcml2YXRlKTsKKworCXJldHVybiAxOworfQorCisvKiBUaGlzIHZhbHVl IGlzIGhhcmRjb2RlZCBpbiBGVyAqLworI2RlZmluZSBXRFRfQ0xPQ0tfRElWSURFUiAxMjgKK2lu dDMyX3QgdmVkX3Bvc3RfYm9vdF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3Ry dWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1 Y3QgdmVkX3ByaXZhdGUgKnZlZF9wcml2ID0gZGV2X3ByaXYtPnZlZF9wcml2YXRlOworCXVpbnQz Ml90IGRldmljZV9ub2RlX2ZsYWdzID0KKwkJCURTSUFCTEVfSURMRV9HUElPX1NJRyB8IERTSUFC TEVfQXV0b19DTE9DS19HQVRJTkcgfAorCQkJUkVUVVJOX1ZERUJfREFUQV9JTl9DT01QTEVUSU9O IHwKKwkJCU5PVF9FTkFCTEVfT05fSE9TVF9DT05DRUFMTUVOVDsKKworCS8qIERESyBzZXQgZmVf d2R0X2Nsa3MgYXMgMHg4MjAgYW5kIGJlX3dkdF9jbGtzIGFzIDB4ODIwMCAqLworCXVpbnQzMl90 IGZlX3dkdF9jbGtzID0gMHgzMzQgKiBXRFRfQ0xPQ0tfRElWSURFUjsKKwl1aW50MzJfdCBiZV93 ZHRfY2xrcyA9IDB4MjAwOCAqIFdEVF9DTE9DS19ESVZJREVSOworCisJVkVEX1JFR19XUklURTMy KEZJUk1XQVJFSUQsIE1TVkRYX0NPTU1TX0ZJUk1XQVJFX0lEKTsKKwlWRURfUkVHX1dSSVRFMzIo ZGV2aWNlX25vZGVfZmxhZ3MsIE1TVkRYX0NPTU1TX09GRlNFVF9GTEFHUyk7CisKKwkvKiByZWFk IHJlZ2lzdGVyIGJhbmsgc2l6ZSAqLworCXsKKwkJdWludDMyX3QgcmFtX2Jhbmtfc2l6ZTsKKwkJ dWludDMyX3QgYmFua19zaXplLCByZWc7CisJCXJlZyA9IFZFRF9SRUdfUkVBRDMyKE1TVkRYX01U WF9SQU1fQkFOS19PRkZTRVQpOworCQliYW5rX3NpemUgPQorCQkJUkVHSU9fUkVBRF9GSUVMRChy ZWcsIE1TVkRYX01UWF9SQU1fQkFOSywKKwkJCQkJIE1UWF9SQU1fQkFOS19TSVpFKTsKKwkJcmFt X2Jhbmtfc2l6ZSA9ICh1aW50MzJfdCkoMSA8PCAoYmFua19zaXplICsgMikpOworCQlJUFZSX0RF QlVHX0lOSVQoIlZFRDogUkFNIGJhbmsgc2l6ZSA9ICVkIGJ5dGVzXG4iLAorCQkJCXJhbV9iYW5r X3NpemUpOworCX0KKwkvKiBob3N0IGVuZCAqLworCisJLyogRERLIHNldHVwIHRpbGluZyByZWdp b24gaGVyZSAqLworCS8qIERESyBzZXQgTU1VX0NPTlRST0wyIHJlZ2lzdGVyICovCisKKwkvKiBz ZXQgd2F0Y2hkb2cgdGltZXIgaGVyZSAqLworCWlmICghdmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9w dW5pdCkgeworCQlpbnQgcmVnX3ZhbCA9IDA7CisJCVJFR0lPX1dSSVRFX0ZJRUxEKHJlZ192YWws IEZFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJCSAgRkVfV0RUX0NOVF9DVFJMLCAweDMpOworCQlS RUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBGRV9NU1ZEWF9XRFRfQ09OVFJPTCwKKwkJCQkgIEZF X1dEVF9FTkFCTEUsIDApOworCQlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBGRV9NU1ZEWF9X RFRfQ09OVFJPTCwKKwkJCQkgIEZFX1dEVF9BQ1RJT04wLCAxKTsKKwkJUkVHSU9fV1JJVEVfRklF TEQocmVnX3ZhbCwgRkVfTVNWRFhfV0RUX0NPTlRST0wsCisJCQkJICBGRV9XRFRfQ0xFQVJfU0VM RUNULCAxKTsKKwkJUkVHSU9fV1JJVEVfRklFTEQocmVnX3ZhbCwgRkVfTVNWRFhfV0RUX0NPTlRS T0wsCisJCQkJICBGRV9XRFRfQ0xLRElWX1NFTEVDVCwgNyk7CisJCVZFRF9SRUdfV1JJVEUzMihm ZV93ZHRfY2xrcyAvIFdEVF9DTE9DS19ESVZJREVSLAorCQkJCUZFX01TVkRYX1dEVF9DT01QQVJF TUFUQ0hfT0ZGU0VUKTsKKwkJVkVEX1JFR19XUklURTMyKHJlZ192YWwsIEZFX01TVkRYX1dEVF9D T05UUk9MX09GRlNFVCk7CisKKwkJcmVnX3ZhbCA9IDA7CisJCS8qIERESyBzZXQgQkVfV0RUX0NO VF9DVFJMIGFzIDB4NSBhbmQgQkVfV0RUX0NMRUFSX1NFTEVDVCBhcyAweDEgKi8KKwkJUkVHSU9f V1JJVEVfRklFTEQocmVnX3ZhbCwgQkVfTVNWRFhfV0RUX0NPTlRST0wsCisJCQkJICBCRV9XRFRf Q05UX0NUUkwsIDB4Nyk7CisJCVJFR0lPX1dSSVRFX0ZJRUxEKHJlZ192YWwsIEJFX01TVkRYX1dE VF9DT05UUk9MLAorCQkJCSAgQkVfV0RUX0VOQUJMRSwgMCk7CisJCVJFR0lPX1dSSVRFX0ZJRUxE KHJlZ192YWwsIEJFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJCSAgQkVfV0RUX0FDVElPTjAsIDEp OworCQlSRUdJT19XUklURV9GSUVMRChyZWdfdmFsLCBCRV9NU1ZEWF9XRFRfQ09OVFJPTCwKKwkJ CQkgIEJFX1dEVF9DTEVBUl9TRUxFQ1QsIDB4ZCk7CisJCVJFR0lPX1dSSVRFX0ZJRUxEKHJlZ192 YWwsIEJFX01TVkRYX1dEVF9DT05UUk9MLAorCQkJCSAgQkVfV0RUX0NMS0RJVl9TRUxFQ1QsIDcp OworCisJCVZFRF9SRUdfV1JJVEUzMihiZV93ZHRfY2xrcyAvIFdEVF9DTE9DS19ESVZJREVSLAor CQkJCUJFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKwkJVkVEX1JFR19XUklURTMy KHJlZ192YWwsIEJFX01TVkRYX1dEVF9DT05UUk9MX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJLyog Zm9yIHRoZSBvdGhlciB0d28sIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBwdW5pdCBzZXQgKi8KKwkJ VkVEX1JFR19XUklURTMyKGZlX3dkdF9jbGtzIC8gV0RUX0NMT0NLX0RJVklERVIsCisJCQkJRkVf TVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQpOworCQlWRURfUkVHX1dSSVRFMzIoYmVfd2R0 X2Nsa3MgLyBXRFRfQ0xPQ0tfRElWSURFUiwKKwkJCQlCRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENI X09GRlNFVCk7CisJfQorCisJcmV0dXJuIHZlZF9yZW5kZWNfaW5pdF9ieV9tc2coZGV2KTsKK30K Kworc3RhdGljIHZvaWQgdmVkX3Bvc3RfcG93ZXJ1cF9jb3JlX3Jlc2V0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5k ZXZfcHJpdmF0ZTsKKwl2ZWRfc2V0X2Nsb2NrcyhkZXZfcHJpdi0+ZGV2LCBjbGtfZW5hYmxlX2Fs bCk7CisKKwkvKiB2ZWRfY2xlYXJfaXJxIG9ubHkgY2xlYXIgQ1JfTVRYX0lSUSBpbnQsCisJICog d2hpbGUgRERLIHNldCAweEZGRkZGRkZGICovCisJdmVkX2NsZWFyX2lycShkZXYpOworCXZlZF9l bmFibGVfaXJxKGRldik7Cit9CisKK3N0YXRpYyBpbnQzMl90IHZlZF9tdHhfaW5pdChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBpbnQzMl90IGVycm9yX3Jlc2V0KQoreworCXN0cnVjdCBkcm1faXB2 cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgY2xrX2Rp dmlkZXIgPSAyMDA7CisJaW50MzJfdCByZXQ7CisJc3RydWN0IHZlZF9wcml2YXRlICp2ZWRfcHJp diA9IGRldl9wcml2LT52ZWRfcHJpdmF0ZTsKKworCS8qIFRoZXNlIHNob3VsZCBub3QgYmUgcmVw cm9ncmFtZXMgYWZ0ZXIgYSBlcnJvciByZXNldCAqLworCWlmICghZXJyb3JfcmVzZXQpIHsKKwkJ VkVEX1JFR19XUklURTMyKDAsIE1TVkRYX0NPTU1TX01TR19DT1VOVEVSKTsKKwkJVkVEX1JFR19X UklURTMyKDAsIE1TVkRYX0VYVF9GV19FUlJPUl9TVEFURSk7CisJfQorCisJVkVEX1JFR19XUklU RTMyKDAsIE1TVkRYX0NPTU1TX0VSUk9SX1RSSUcpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZE WF9DT01NU19UT19IT1NUX1JEX0lOREVYKTsKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09N TVNfVE9fSE9TVF9XUlRfSU5ERVgpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19U T19NVFhfUkRfSU5ERVgpOworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19UT19NVFhf V1JUX0lOREVYKTsKKwlWRURfUkVHX1dSSVRFMzIoMCwgTVNWRFhfQ09NTVNfRklSTVdBUkVfSUQp OworCS8qCisJICogSU1HIERESyBzZXQgYXM6IGd1aTMyRGV2aWNlTm9kZUZsYWdzICYgMHg0MDAw LAorCSAqIHdoaWxlIGl0IGlzIG5vdCBzZXQgaW4gZncgc3BlYworCSAqIFRoZSBiaXQgbmVlZGUg dG8gYmUgc2V0IHByZWJvb3QgaXMgdGhlIHBlcmZvcm1jZSBkYXRhIGJpdCBzaW5jZSB0aGlzCisJ ICogY29udHJvbHMgY2F1c2VkIHRoZSBmaXJtd2FyZSB0byByZWJhbGFuY2UgdGhlIG1lc3NhZ2Ug cXVldWVzLgorCSAqLworCVZFRF9SRUdfV1JJVEUzMigwLCBNU1ZEWF9DT01NU19PRkZTRVRfRkxB R1MpOworCisJLyogRERLOiBjaGVjayBkZXZpY2Vfbm9kZV9mbGFncyB3aXRoIDB4NDAwIHRvIHwg KDE8PDE2KSwKKwkgKiB3aGlsZSBpdCBpcyBub3Qgc2V0IGluIGZ3IHNwZWMgKi8KKwlWRURfUkVH X1dSSVRFMzIoY2xrX2RpdmlkZXIgLSAxLCBNVFhfU1lTQ19USU1FUkRJVl9PRkZTRVQpOworCisJ LyogRERLOiBMTERNQSB1cGxvYWQgZncsIHdoaWNoIGlzIG5vdyBkb25lIGJ5IGd1bml0ICovCisK KwkvKiBEREs6IHJlZGVmaW5lIHRvSG9zdCBhbmQgdG9NVFggbXNnIGJ1ZmZlciwgc2VlbXMgbm90 IG5lZWRlZCAqLworCisJLyogV2FpdCBmb3IgdGhlIHNpZ25hdHVyZSB2YWx1ZSB0byBiZSB3cml0 dGVuIGJhY2sgKi8KKwlyZXQgPSB2ZWRfd2FpdF9mb3JfcmVnaXN0ZXIoZGV2X3ByaXYsIE1TVkRY X0NPTU1TX1NJR05BVFVSRSwKKwkJCQkgICAgTVNWRFhfQ09NTVNfU0lHTkFUVVJFX1ZBTFVFLAor CQkJCSAgICAweGZmZmZmZmZmLAorCQkJCSAgICAxMDAwLCAxMDAwKTsKKwlpZiAocmV0KSB7CisJ CUlQVlJfREVCVUdfV0FSTigiV0FSTjogR3VuaXQgdXBsb2FkIGZ3IGZhaWx1cmUsXG4iCisJCQkJ Ik1TVkRYX0NPTU1TX1NJR05BVFVSRSByZWcgaXMgMHgleCwiCisJCQkJIk1TVkRYX0NPTU1TX0ZX X1NUQVRVUyByZWcgaXMgMHgleCwiCisJCQkJIk1UWF9FTkFCTEUgcmVnIGlzIDB4JXguXG4iLAor CQkJCVZFRF9SRUdfUkVBRDMyKE1TVkRYX0NPTU1TX1NJR05BVFVSRSksCisJCQkJVkVEX1JFR19S RUFEMzIoTVNWRFhfQ09NTVNfRldfU1RBVFVTKSwKKwkJCQlWRURfUkVHX1JFQUQzMihNVFhfRU5B QkxFX09GRlNFVCkpOworCQl2ZWRfcHJpdi0+dmVkX25lZWRzX3Jlc2V0IHw9CisJCQkJTVNWRFhf UkVTRVRfTkVFRFNfUkVVUExPQURfRlcgfAorCQkJCU1TVkRYX1JFU0VUX05FRURTX0lOSVRfRlc7 CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludDMyX3QgdmVkX3Bvc3RfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRl di0+ZGV2X3ByaXZhdGU7CisJdWludDMyX3QgY21kOworCWludCByZXQ7CisJc3RydWN0IHZlZF9w cml2YXRlICp2ZWRfcHJpdjsKKworCWlmICghZGV2X3ByaXYgfHwgIWRldl9wcml2LT52ZWRfcHJp dmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ZWRfcHJpdiA9IGRldl9wcml2LT52ZWRfcHJp dmF0ZTsKKworCXZlZF9wcml2LT52ZWRfYnVzeSA9IDA7CisJdmVkX3ByaXYtPnZlZF9od19idXN5 ID0gMTsKKworCWlmICh2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KSB7CisJCS8qIERESzog Q29uZmlndXJlIE1TVkRYIE1lbW9yeSBTdGFsbGluZyBpd3RoIHRoZSBtaW4sIG1heCBhbmQgcmF0 aW8gb2YgYWNjZXNzICovCisJCXZlZF9wb3N0X3Bvd2VydXBfY29yZV9yZXNldChkZXYpOworCX0K KworCWlmICghdmVkX3ByaXYtPmZ3X2xvYWRlZF9ieV9wdW5pdCkgeworCQkvKiBFbmFibGUgTU1V IGJ5IHJlbW92aW5nIGFsbCBieXBhc3MgYml0cyAqLworCQlWRURfUkVHX1dSSVRFMzIoMCwgTVNW RFhfTU1VX0NPTlRST0wwX09GRlNFVCk7CisJfSBlbHNlIHsKKwkJdmVkX3ByaXYtPnJlbmRlY19p bml0aWFsaXplZCA9IDA7CisJCXJldCA9IHZlZF9tdHhfaW5pdChkZXYsIHZlZF9wcml2LT5kZWNv ZGluZ19lcnIpOworCQlpZiAocmV0KSB7CisJCQlJUFZSX0VSUk9SKCJWRUQ6IHZlZF9tdHhfaW5p dCBmYWlsZWQuXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoIXZlZF9wcml2 LT5md19sb2FkZWRfYnlfcHVuaXQpIHsKKwkJdmVkX3JlbmRlY19pbml0X2J5X3JlZyhkZXYpOwor CQlpZiAoIXZlZF9wcml2LT5md19ibykgeworCQkJcmV0ID0gdmVkX2FsbG9jX2Z3X2JvKGRldl9w cml2KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlJUFZSX0VSUk9SKCJWRUQ6IHZlZF9hbGxvY19md19i byBmYWlsZWQuXG4iKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJCS8qIG1vdmUgZncg bG9hZGluZyB0byB0aGUgcGxhY2UgcmVjZWl2aW5nIGZpcnN0IGNtZCBidWZmZXIgKi8KKwkJdmVk X3ByaXYtPnZlZF9md19sb2FkZWQgPSAwOyAvKiBuZWVkIHRvIGxvYWQgZmlyd2FyZSAqLworCQkv KiBpdCBzaG91bGQgYmUgc2V0IGF0IHB1bml0IHBvc3QgYm9vdCBpbml0IHBoYXNlICovCisJCVZF RF9SRUdfV1JJVEUzMig4MjAsIEZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsKKwkJ VkVEX1JFR19XUklURTMyKDgyMDAsIEJFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfT0ZGU0VUKTsK KworCQlWRURfUkVHX1dSSVRFMzIoODIwLCBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX09GRlNF VCk7CisJCVZFRF9SRUdfV1JJVEUzMig4MjAwLCBCRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX09G RlNFVCk7CisKKwkJdmVkX2NsZWFyX2lycShkZXYpOworCQl2ZWRfZW5hYmxlX2lycShkZXYpOwor CisJCWNtZCA9IDA7CisJCWNtZCA9IFZFRF9SRUdfUkVBRDMyKFZFQ19TSElGVFJFR19DT05UUk9M X09GRlNFVCk7CisJCVJFR0lPX1dSSVRFX0ZJRUxEKGNtZCwgVkVDX1NISUZUUkVHX0NPTlRST0ws CisJCSAgU1JfTUFTVEVSX1NFTEVDVCwgMSk7ICAvKiBIb3N0ICovCisJCVZFRF9SRUdfV1JJVEUz MihjbWQsIFZFQ19TSElGVFJFR19DT05UUk9MX09GRlNFVCk7CisJfQorCisJcmV0dXJuIDA7Cit9 CisKK2ludDMyX3QgaXB2cl92ZWRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0 cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50 MzJfdCByZXQ7CisKKwlpZiAoIWRldl9wcml2LT52ZWRfcHJpdmF0ZSkgeworCQlyZXQgPSB2ZWRf c3RhcnR1cF9pbml0KGRldik7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlJUFZSX0VSUk9S KCJWRUQ6IHZlZF9zdGFydHVwX2luaXQgZmFpbGVkLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9 CisJfQorCisJaWYgKHVubGlrZWx5KGRldl9wcml2LT52ZWRfcHJpdmF0ZSA9PSBOVUxMKSkKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB2ZWRfYWxsb2NfY2NiX2Zvcl9yZW5kZWMoZGV2X3By aXYtPnZlZF9wcml2YXRlLAorCQkJUkVOREVDX0FfU0laRSwgUkVOREVDX0JfU0laRSk7CisJaWYg KHVubGlrZWx5KHJldCkpIHsKKwkJSVBWUl9FUlJPUigiVkVEOiBtc3ZkeF9hbGxvY19jY2JfZm9y X3JlbmRlYyBmYWlsZWQuXG4iKTsKKwkJdmVkX2ZyZWVfY2NiKGRldl9wcml2LT52ZWRfcHJpdmF0 ZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gdmVkX3Bvc3RfaW5pdChkZXYpOworCWlm ICh1bmxpa2VseShyZXQpKSB7CisJCUlQVlJfRVJST1IoIlZFRDogdmVkX3Bvc3RfaW5pdCBmYWls ZWQuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50MzJfdCBp cHZyX3ZlZF91bmluaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lw dnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJp dmF0ZSAqdmVkX3ByaXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisKKwkvKiBWRURfUkVHX1dS SVRFMzIgKGNsa19lbmFibGVfbWluaW1hbCwgTVNWRFhfTUFOX0NMS19FTkFCTEUpOyAqLworCUlQ VlJfREVCVUdfSU5JVCgiVkVEOiBzZXQgdGhlIFZFRCBjbG9jayB0byAwLlxuIik7CisJdmVkX3Nl dF9jbG9ja3MoZGV2X3ByaXYtPmRldiwgMCk7CisKKwlpZiAoTlVMTCA9PSB2ZWRfcHJpdikgewor CQlJUFZSX0VSUk9SKCJWRUQ6IGlwdnJfdmVkX3VuaW5pdDogdmVkX3ByaXYgaXMgTlVMTCFcbiIp OworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHZlZF9wcml2LT5jY2IwIHx8IHZlZF9wcml2LT5j Y2IxKQorCQl2ZWRfZnJlZV9jY2IodmVkX3ByaXYpOworCisJaWYgKHZlZF9wcml2LT5md19ibykg eworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmdmVkX3ByaXYtPmZ3X2Jv LT5iYXNlKTsKKwkJdmVkX3ByaXYtPmZ3X2JvID0gTlVMTDsKKwl9CisKKwlpZiAoIXZlZF9wcml2 LT5md19sb2FkZWRfYnlfcHVuaXQpIHsKKwkJaWYgKHZlZF9wcml2LT52ZWRfZndfcHRyKQorCQkJ a2ZyZWUodmVkX3ByaXYtPnZlZF9md19wdHIpOworCX0KKworCWtmcmVlKHZlZF9wcml2LT52ZWRf ZWNfY3R4WzBdKTsKKworCWlmICh2ZWRfcHJpdi0+bW11X3JlY292ZXJfcGFnZSkKKwkJX19mcmVl X3BhZ2UodmVkX3ByaXYtPm1tdV9yZWNvdmVyX3BhZ2UpOworCisJaWYgKHZlZF9wcml2KSB7CisJ CS8qIHBjaV9zZXRfZHJ2ZGF0YShkZXYtPnBkZXYsIE5VTEwpOyAqLworCQlkZXZpY2VfcmVtb3Zl X2ZpbGUoJmRldi0+cGxhdGZvcm1kZXYtPmRldiwKKwkJCQkgICAmZGV2X2F0dHJfdmVkX3Btc3Rh dGUpOworCQlzeXNmc19wdXQodmVkX3ByaXYtPnN5c2ZzX3Btc3RhdGUpOworCQl2ZWRfcHJpdi0+ c3lzZnNfcG1zdGF0ZSA9IE5VTEw7CisJCWtmcmVlKHZlZF9wcml2KTsKKwkJZGV2X3ByaXYtPnZl ZF9wcml2YXRlID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pcHZyL3ZlZF9pbml0LmggYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfaW5p dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTdmMDI1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX2luaXQuaApAQCAtMCwwICsxLDYx IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKKyAqIHZlZF9pbml0Lmg6IFZFRCBpbml0aWFsaXphdGlv biBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlv biwgSGlsbHNib3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdpbmF0aW9uIFRlY2hu b2xvZ2llcyBMaW1pdGVkLCBVSworICogQ29weXJpZ2h0IChjKSAyMDAzIFR1bmdzdGVuIEdyYXBo aWNzLCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhP VVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmts aW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKiBB dXRob3JzOgorICogICAgRmVpIEppYW5nIDxmZWkuamlhbmdAaW50ZWwuY29tPgorICoKKyAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworCisjaWZuZGVmIF9WRURfSU5JVF9IXworI2RlZmluZSBfVkVEX0lO SVRfSF8KKworI2luY2x1ZGUgImlwdnJfZHJ2LmgiCisKK3ZvaWQgdmVkX2NsZWFyX2lycShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKKwordm9pZCB2ZWRfZGlzYWJsZV9pcnEoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7CisKK3ZvaWQgdmVkX2VuYWJsZV9pcnEoc3RydWN0IGRybV9kZXZpY2UgKmRl dik7CisKK2ludDMyX3QgdmVkX3dhaXRfZm9yX3JlZ2lzdGVyKHN0cnVjdCBkcm1faXB2cl9wcml2 YXRlICpkZXZfcHJpdiwKKwkJCSAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUsIHVp bnQzMl90IGVuYWJsZSwKKwkJCSAgIHVpbnQzMl90IHBvbGxfY250LCB1aW50MzJfdCB0aW1lb3V0 KTsKKwordm9pZCB2ZWRfc2V0X2Nsb2NrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50MzJf dCBjbG9ja19zdGF0ZSk7CisKK2ludDMyX3QgdmVkX2NvcmVfcmVzZXQoc3RydWN0IGRybV9pcHZy X3ByaXZhdGUgKmRldl9wcml2KTsKKworLyogdG9kbzogdmVkX3Jlc2V0IGlzIHVzZWQgZm9yIHRo ZSBjYXNlIG9mIGZ3IGxvYWRpbmcgYnkgZHJpdmVyCisgKiBMYXRlciB3ZSBjYW4gdGVzdCBpZiBp dCBjYW4gYmUgcmVtb3ZlZC4gKi8KK2ludDMyX3QgdmVkX3Jlc2V0KHN0cnVjdCBkcm1faXB2cl9w cml2YXRlICpkZXZfcHJpdik7CisKK2ludDMyX3QgdmVkX3JlbmRlY19pbml0X2J5X21zZyhzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KTsKKworaW50MzJfdCB2ZWRfcG9zdF9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpOworCitpbnQzMl90IHZlZF9wb3N0X2Jvb3RfaW5pdChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKKworaW50MzJfdCBpcHZyX3ZlZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOworCitpbnQzMl90IGlwdnJfdmVkX3VuaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsK KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfbXNnLmggYi9k cml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uMWZmYmE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pcHZy L3ZlZF9tc2cuaApAQCAtMCwwICsxLDM2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiB2ZWRf bXNnLmg6IFZFRCBtZXNzYWdlIGRlZmluaXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQg SW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQ29weXJpZ2h0IChjKSAy MDAzIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMaW1pdGVkLCBVSworICogQWxsIFJpZ2h0cyBS ZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBj b25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24g MiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICog VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFt OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisg KiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB LgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+ CisgKiAgICBMaSBaZW5nIDxsaS56ZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCisKKyNpZm5kZWYgX1ZFRF9NU0dfSF8KKyNkZWZpbmUgX1ZFRF9NU0dfSF8KKworLyogU3Rh cnQgb2YgcGFyc2VyIHNwZWNpZmljIEhvc3QtPk1UWCBtZXNzYWdlcy4gKi8KKyNkZWZpbmUJRldS S19NU0dJRF9TVEFSVF9QU1JfSE9TVE1UWF9NU0cJKDB4ODApCisKKy8qIFN0YXJ0IG9mIHBhcnNl ciBzcGVjaWZpYyBNVFgtPkhvc3QgbWVzc2FnZXMuICovCisjZGVmaW5lCUZXUktfTVNHSURfU1RB UlRfUFNSX01UWEhPU1RfTVNHCSgweEMwKQorCisvKiBIb3N0IGRlZmluZWQgbXNnLCBqdXN0IGZv ciBob3N0IHVzZSwgTVRYIG5vdCByZWNnbml6ZSAqLworI2RlZmluZQlGV1JLX01TR0lEX0hPU1Rf RU1VTEFURUQJCSgweDQwKQorCisvKiBUaGlzIHR5cGUgZGVmaW5lcyB0aGUgZnJhbWV3b3JrIHNw ZWNpZmllZCBtZXNzYWdlIGlkcyAqLworZW51bSB7CisJLyogISBTZW50IGJ5IHRoZSBWQSBkcml2 ZXIgb24gdGhlIGhvc3QgdG8gdGhlIG10eCBmaXJtd2FyZS4KKwkgKi8KKwlNVFhfTVNHSURfUEFE RElORyA9IDAsCisJTVRYX01TR0lEX0lOSVQgPSBGV1JLX01TR0lEX1NUQVJUX1BTUl9IT1NUTVRY X01TRywKKwlNVFhfTVNHSURfREVDT0RFX0ZFLAorCU1UWF9NU0dJRF9ERUJMT0NLLAorCU1UWF9N U0dJRF9JTlRSQV9PT0xELAorCU1UWF9NU0dJRF9ERUNPREVfQkUsCisJTVRYX01TR0lEX0hPU1Rf QkVfT1BQLAorCisJLyohIFNlbnQgYnkgdGhlIG10eCBmaXJtd2FyZSB0byBpdHNlbGYuCisJICov CisJTVRYX01TR0lEX1JFTkRFUl9NQ19JTlRFUlJVUFQsCisKKwkvKiB1c2VkIHRvIGRpdGluZ3Vp c2ggbXJzdCBhbmQgbWZsZCAqLworCU1UWF9NU0dJRF9ERUJMT0NLX01GTEQgPSBGV1JLX01TR0lE X0hPU1RfRU1VTEFURUQsCisJTVRYX01TR0lEX0lOVFJBX09PTERfTUZMRCwKKwlNVFhfTVNHSURf REVDT0RFX0JFX01GTEQsCisJTVRYX01TR0lEX0hPU1RfQkVfT1BQX01GTEQsCisKKwkvKiEgU2Vu dCBieSB0aGUgRFhWQSBmaXJtd2FyZSBvbiB0aGUgTVRYIHRvIHRoZSBob3N0LgorCSAqLworCU1U WF9NU0dJRF9DT01QTEVURUQgPSBGV1JLX01TR0lEX1NUQVJUX1BTUl9NVFhIT1NUX01TRywKKwlN VFhfTVNHSURfQ09NUExFVEVEX0JBVENILAorCU1UWF9NU0dJRF9ERUJMT0NLX1JFUVVJUkVELAor CU1UWF9NU0dJRF9URVNUX1JFU1BPTkNFLAorCU1UWF9NU0dJRF9BQ0ssCisJTVRYX01TR0lEX0ZB SUxFRCwKKwlNVFhfTVNHSURfQ09OVElHVUlUWV9XQVJOSU5HLAorCU1UWF9NU0dJRF9IV19QQU5J QywKK307CisKKyNkZWZpbmUgTVRYX0dFTk1TR19TSVpFX1RZUEUJCXVpbnQ4X3QKKyNkZWZpbmUg TVRYX0dFTk1TR19TSVpFX01BU0sJCSgweEZGKQorI2RlZmluZSBNVFhfR0VOTVNHX1NJWkVfU0hJ RlQJCSgwKQorI2RlZmluZSBNVFhfR0VOTVNHX1NJWkVfT0ZGU0VUCQkoMHgwMDAwKQorCisjZGVm aW5lIE1UWF9HRU5NU0dfSURfVFlQRQkJdWludDhfdAorI2RlZmluZSBNVFhfR0VOTVNHX0lEX01B U0sJCSgweEZGKQorI2RlZmluZSBNVFhfR0VOTVNHX0lEX1NISUZUCQkoMCkKKyNkZWZpbmUgTVRY X0dFTk1TR19JRF9PRkZTRVQJCSgweDAwMDEpCisKKyNkZWZpbmUgTVRYX0dFTk1TR19IRUFERVJf U0laRQkJMgorCisjZGVmaW5lIE1UWF9HRU5NU0dfRkVOQ0VfVFlQRQkJdWludDE2X3QKKyNkZWZp bmUgTVRYX0dFTk1TR19GRU5DRV9NQVNLCQkoMHhGRkZGKQorI2RlZmluZSBNVFhfR0VOTVNHX0ZF TkNFX09GRlNFVAkJKDB4MDAwMikKKyNkZWZpbmUgTVRYX0dFTk1TR19GRU5DRV9TSElGVAkJKDAp CisKKyNkZWZpbmUgRldfSU5WQUxJREFURV9NTVUJCSgweDAwMTApCisKK3VuaW9uIG1zZ19oZWFk ZXIgeworCXN0cnVjdCB7CisJCXVpbnQzMl90IG1zZ19zaXplOjg7CisJCXVpbnQzMl90IG1zZ190 eXBlOjg7CisJCXVpbnQzMl90IG1zZ19mZW5jZToxNjsKKwl9IGJpdHM7CisJdWludDMyX3QgdmFs dWU7Cit9OworCitzdHJ1Y3QgZndfaW5pdF9tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJ CXVpbnQzMl90IG1zZ19zaXplOjg7CisJCQl1aW50MzJfdCBtc2dfdHlwZTo4OworCQkJdWludDMy X3QgcmVzZXJ2ZWQ6MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBoZWFkZXI7 CisJdWludDMyX3QgcmVuZGVjX2FkZHIwOworCXVpbnQzMl90IHJlbmRlY19hZGRyMTsKKwl1bmlv biB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCByZW5kZWNfc2l6ZTA6MTY7CisJCQl1aW50MzJf dCByZW5kZWNfc2l6ZTE6MTY7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSByZW5k ZWNfc2l6ZTsKK307CisKK3N0cnVjdCBmd19kZWNvZGVfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVj dCB7CisJCQl1aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5cGU6ODsKKwkJ CXVpbnQzMl90IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9 IGhlYWRlcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBmbGFnczoxNjsKKwkJ CXVpbnQzMl90IGJ1ZmZlcl9zaXplOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOwor CX0gZmxhZ19zaXplOworCXVpbnQzMl90IGNydGxfYWxsb2NfYWRkcjsKKwl1bmlvbiB7CisJCXN0 cnVjdCB7CisJCQl1aW50MzJfdCBjb250ZXh0Ojg7CisJCQl1aW50MzJfdCBtbXVfcHRkOjI0Owor CQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0gbW11X2NvbnRleHQ7CisJdWludDMyX3Qg b3BlcmF0aW5nX21vZGU7Cit9OworCitzdHJ1Y3QgZndfZGVibG9ja19tc2cgeworCXVuaW9uIHsK KwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IG1zZ19zaXplOjg7CisJCQl1aW50MzJfdCBtc2dfdHlw ZTo4OworCQkJdWludDMyX3QgbXNnX2ZlbmNlOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZh bHVlOworCX0gaGVhZGVyOworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGZsYWdz OjE2OworCQkJdWludDMyX3Qgc2xpY2VfZmllbGRfdHlwZToyOworCQkJdWludDMyX3QgcmVzZXJ2 ZWQ6MTQ7CisJCX0gYml0czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBmbGFnX3R5cGU7CisJdWlu dDMyX3Qgb3BlcmF0aW5nX21vZGU7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3Qg Y29udGV4dDo4OworCQkJdWludDMyX3QgbW11X3B0ZDoyNDsKKwkJfSBiaXRzOworCQl1aW50MzJf dCB2YWx1ZTsKKwl9IG1tdV9jb250ZXh0OworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQz Ml90IGZyYW1lX2hlaWdodF9tYjoxNjsKKwkJCXVpbnQzMl90IHBpY193aWR0aF9tYjoxNjsKKwkJ fSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IHBpY19zaXplOworCXVpbnQzMl90IGFkZHJl c3NfYTA7CisJdWludDMyX3QgYWRkcmVzc19hMTsKKwl1aW50MzJfdCBtYl9wYXJhbV9hZGRyZXNz OworCXVpbnQzMl90IGV4dF9zdHJpZGVfYTsKKwl1aW50MzJfdCBhZGRyZXNzX2IwOworCXVpbnQz Ml90IGFkZHJlc3NfYjE7CisJdWludDMyX3QgYWx0X291dHB1dF9mbGFnc19iOworCS8qIGFkZGl0 aW9uYWwgbXNnIG91dHNpZGUgb2YgSU1HIG1zZyAqLworCXVpbnQzMl90IGFkZHJlc3NfYzA7CisJ dWludDMyX3QgYWRkcmVzc19jMTsKK307CisKKyNkZWZpbmUgTVRYX1BBRE1TR19TSVpFIDIKK3N0 cnVjdCBmd19wYWRkaW5nX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3Qg bXNnX3NpemU6ODsKKwkJCXVpbnQzMl90IG1zZ190eXBlOjg7CisJCX0gYml0czsKKwkJdWludDE2 X3QgdmFsdWU7CisJfSBoZWFkZXI7Cit9OworCitzdHJ1Y3QgZndfbXNnX2hlYWRlciB7CisJdW5p b24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbXNnX3NpemU6ODsKKwkJCXVpbnQzMl90IG1z Z190eXBlOjg7CisJCQl1aW50MzJfdCBtc2dfZmVuY2U6MTY7CisJCX0gYml0czsKKwkJdWludDMy X3QgdmFsdWU7CisJfSBoZWFkZXI7Cit9OworCitzdHJ1Y3QgZndfY29tcGxldGVkX21zZyB7CisJ dW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbXNnX3NpemU6ODsKKwkJCXVpbnQzMl90 IG1zZ190eXBlOjg7CisJCQl1aW50MzJfdCBtc2dfZmVuY2U6MTY7CisJCX0gYml0czsKKwkJdWlu dDMyX3QgdmFsdWU7CisJfSBoZWFkZXI7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMy X3Qgc3RhcnRfbWI6MTY7CisJCQl1aW50MzJfdCBsYXN0X21iOjE2OworCQl9IGJpdHM7CisJCXVp bnQzMl90IHZhbHVlOworCX0gbWI7CisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgdmRlYmNy OworfTsKKworc3RydWN0IGZ3X2RlYmxvY2tfcmVxdWlyZWRfbXNnIHsKKwl1bmlvbiB7CisJCXN0 cnVjdCB7CisJCQl1aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5cGU6ODsK KwkJCXVpbnQzMl90IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsK Kwl9IGhlYWRlcjsKK307CisKK3N0cnVjdCBmd19wYW5pY19tc2cgeworCXVuaW9uIHsKKwkJc3Ry dWN0IHsKKwkJCXVpbnQzMl90IG1zZ19zaXplOjg7CisJCQl1aW50MzJfdCBtc2dfdHlwZTo4Owor CQkJdWludDMyX3QgbXNnX2ZlbmNlOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOwor CX0gaGVhZGVyOworCXVpbnQzMl90IGZlX3N0YXR1czsKKwl1aW50MzJfdCBiZV9zdGF0dXM7CisJ dW5pb24geworCQlzdHJ1Y3QgeworCQkJdWludDMyX3QgbGFzdF9tYjoxNjsKKwkJCXVpbnQzMl90 IHJlc2VydmVkMjoxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IG1iOworfTsK Kworc3RydWN0IGZ3X2NvbnRpZ3VpdHlfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1 aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5cGU6ODsKKwkJCXVpbnQzMl90 IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IGhlYWRlcjsK Kwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBlbmRfbWJfbnVtOjE2OworCQkJdWlu dDMyX3QgYmVnaW5fbWJfbnVtOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVlOworCX0g bWI7Cit9OworCitzdHJ1Y3QgZndfc2xpY2VfaGVhZGVyX2V4dHJhY3RfbXNnIHsKKwl1bmlvbiB7 CisJCXN0cnVjdCB7CisJCQl1aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5 cGU6ODsKKwkJCXVpbnQzMl90IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2 YWx1ZTsKKwl9IGhlYWRlcjsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQzMl90IGZs YWdzOjE2OworCQkJdWludDMyX3QgcmVzOjE2OworCQl9IGJpdHM7CisJCXVpbnQzMl90IHZhbHVl OworCX0gZmxhZ3M7CisKKwl1aW50MzJfdCBzcmM7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJ CQl1aW50MzJfdCBjb250ZXh0Ojg7CisJCQl1aW50MzJfdCBtbXVfcHRkOjI0OworCQl9IGJpdHM7 CisJCXVpbnQzMl90IHZhbHVlOworCX0gbW11X2NvbnRleHQ7CisKKwl1aW50MzJfdCBkc3Q7CisJ dWludDMyX3Qgc3JjX3NpemU7CisJdWludDMyX3QgZHN0X3NpemU7CisKKwl1bmlvbiB7CisJCXN0 cnVjdCB7CisJCQl1aW50MzJfdCBleHBlY3RlZF9wcHNfaWQ6ODsKKwkJCXVpbnQzMl90IG5hbHVf aGVhZGVyX3VuaXRfdHlwZTo1OworCQkJdWludDMyX3QgbmFsdV9oZWFkZXJfcmVmX2lkYzoyOwor CQkJdWludDMyX3QgbmFsdV9oZWFkZXJfcmVzZXJ2ZWQ6MTsKKwkJCXVpbnQzMl90IGNvbnRpbnVl X3BhcnNlX2ZsYWc6MTsKKwkJCXVpbnQzMl90IGZyYW1lX21ic19vbmx5X2ZsYWc6MTsKKwkJCXVp bnQzMl90IHBpY19vcmRlcl9wcmVzZW50X2ZsYWc6MTsKKwkJCXVpbnQzMl90IGRlbHRhX3BpY19v cmRlcl9hbHdheXNfemVyb19mbGFnOjE7CisJCQl1aW50MzJfdCByZWR1bmRhbnRfcGljX2NudF9w cmVzZW50X2ZsYWc6MTsKKwkJCXVpbnQzMl90IHdlaWdodGVkX3ByZWRfZmxhZzoxOworCQkJdWlu dDMyX3QgZW50cm9weV9jb2RpbmdfbW9kZV9mbGFnOjE7CisJCQl1aW50MzJfdCBkZWJsb2NraW5n X2ZpbHRlcl9jb250cm9sX3ByZXNlbnRfZmxhZzoxOworCQkJdWludDMyX3Qgd2VpZ2h0ZWRfYmlw cmVkX2lkYzoyOworCQkJdWludDMyX3QgcmVzaWR1YWxfY29sb3VyX3RyYW5zZm9ybV9mbGFnOjE7 CisJCQl1aW50MzJfdCBjaHJvbWFfZm9ybWF0X2lkYzoyOworCQkJdWludDMyX3QgaWRyX2ZsYWc6 MTsKKwkJCXVpbnQzMl90IHBpY19vcmRlcl9jbnRfdHlwZToyOworCQl9IGJpdHM7CisJCXVpbnQz Ml90IHZhbHVlOworCX0gZmxhZ19iaXRmaWVsZDsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJ CXVpbnQ4X3QgbnVtX3NsaWNlX2dyb3Vwc19taW51czE6MzsKKwkJCXVpbnQ4X3QgbnVtX3JlZl9p ZGNfbDFfYWN0aXZlX21pbnVzMTo1OworCQkJdWludDhfdCBzbGljZV9ncm91cF9tYXBfdHlwZToz OworCQkJdWludDhfdCBudW1fcmVmX2lkY19sMF9hY3RpdmVfbWludXMxOjU7CisJCQl1aW50OF90 IGxvZzJfc2xpY2VfZ3JvdXBfY2hhbmdlX2N5Y2xlOjQ7CisJCQl1aW50OF90IHNsaWNlX2hlYWRl cl9iaXRfb2Zmc2V0OjQ7CisJCQl1aW50OF90IGxvZzJfbWF4X2ZyYW1lX251bV9taW51czQ6NDsK KwkJCXVpbnQ4X3QgbG9nc19tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0OjQ7CisJCX0gYml0 czsKKwkJdWludDMyX3QgdmFsdWU7CisJfSBwaWNfcGFyYW0wOworfTsKKworc3RydWN0IGZ3X3Ns aWNlX2hlYWRlcl9leHRyYWN0X2RvbmVfbXNnIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1 aW50MzJfdCBtc2dfc2l6ZTo4OworCQkJdWludDMyX3QgbXNnX3R5cGU6ODsKKwkJCXVpbnQzMl90 IG1zZ19mZW5jZToxNjsKKwkJfSBiaXRzOworCQl1aW50MzJfdCB2YWx1ZTsKKwl9IGhlYWRlcjsK K307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3BtLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45YWVlNjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2lw dnIvdmVkX3BtLmMKQEAgLTAsMCArMSwzOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogdmVk X3BtLmM6IFZFRCBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMp IDIwMTQgSW50ZWwgQ29ycG9yYXRpb24sIEhpbGxzYm9ybywgT1IsIFVTQQorICogQWxsIFJpZ2h0 cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNp b24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisg KiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s CisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkgSmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5j b20+CisgKiAgICBZYW8gQ2hlbmcgPHlhby5jaGVuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCisKKyNpbmNsdWRlICJ2ZWRfcG0uaCIKKyNpbmNsdWRlICJ2ZWRfaW5pdC5o IgorI2luY2x1ZGUgInZlZF9yZWcuaCIKKyNpbmNsdWRlICJ2ZWRfY21kLmgiCisjaW5jbHVkZSAi dmVkX2Z3LmgiCisjaW5jbHVkZSAiaXB2cl90cmFjZS5oIgorCisjaWZkZWYgQ09ORklHX0lOVEVM X1NPQ19QTUMKKyNpbmNsdWRlIDxsaW51eC9pbnRlbF9taWRfcG0uaD4KKyNlbmRpZgorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworZXh0 ZXJuIGludDMyX3QgZHJtX2lwdnJfZnJlcTsKKworI2lmZGVmIENPTkZJR19JTlRFTF9TT0NfUE1D CitleHRlcm4gaW50IHBtY19uY19zZXRfcG93ZXJfc3RhdGUoaW50IGlzbGFuZHMsIGludCBzdGF0 ZV90eXBlLCBpbnQgcmVnKTsKK2V4dGVybiBpbnQgcG1jX25jX2dldF9wb3dlcl9zdGF0ZShpbnQg aXNsYW5kcywgaW50IHJlZyk7CisjZW5kaWYKKworI2RlZmluZSBQQ0lfUk9PVF9NU0dCVVNfQ1RS TF9SRUcJMHhEMAorI2RlZmluZSBQQ0lfUk9PVF9NU0dCVVNfREFUQV9SRUcJMHhENAorI2RlZmlu ZSBQQ0lfUk9PVF9NU0dCVVNfQ1RSTF9FWFRfUkVHCTB4RDgKKyNkZWZpbmUgUENJX1JPT1RfTVNH QlVTX1JFQUQJCTB4MTAKKyNkZWZpbmUgUENJX1JPT1RfTVNHQlVTX1dSSVRFCQkweDExCisjZGVm aW5lIFBDSV9ST09UX01TR0JVU19EV09SRF9FTkFCTEUJMHhmMAorCisvKiBWRUQgcG93ZXIgc3Rh dGUgc2V0L2dldCAqLworI2RlZmluZSBQVU5JVF9QT1JUCQkJMHgwNAorI2RlZmluZSBWRURTU1BN MCAJCQkweDMyCisjZGVmaW5lIFZFRFNTUE0xIAkJCTB4MzMKKyNkZWZpbmUgVkVEU1NDCQkJCTB4 MQorCisvKiBWRUQgZnJlcXVlbmN5IHNldC9nZXQgKi8KKyNkZWZpbmUgSVBfRlJFUV9WQUxJRCAg ICAgMHg4MCAgICAgLyogRnJlcSBpcyB2YWxpZCBiaXQgKi8KKworI2RlZmluZSBJUF9GUkVRX1NJ WkUgICAgICAgICA1ICAgICAvKiBudW1iZXIgb2YgYml0cyBpbiBmcmVxIGZpZWxkcyAqLworI2Rl ZmluZSBJUF9GUkVRX01BU0sgICAgICAweDFmICAgICAvKiBCaXQgbWFzayBmb3IgZnJlcSBmaWVs ZCAqLworCisvKiAgUG9zaXRpb25zIG9mIHZhcmlvdXMgZnJlcXVlbmN5IGZpZWxkcyAqLworI2Rl ZmluZSBJUF9GUkVRX1BPUyAgICAgICAgICAwICAgICAvKiBGcmVxIGNvbnRyb2wgWzQ6MF0gKi8K KyNkZWZpbmUgSVBfRlJFUV9HVUFSX1BPUyAgICAgOCAgICAgLyogRnJlcSBndWFyICAgWzEyOjhd ICovCisjZGVmaW5lIElQX0ZSRVFfU1RBVF9QT1MgICAgMjQgICAgIC8qIEZyZXEgc3RhdHVzIFsy ODoyNF0gKi8KKworI2RlZmluZSBJUF9GUkVRX1JFU1VNRV9TRVQgMHg2NAorCisjZGVmaW5lIElQ VlJfVkVEX0NMT0NLR0FUSU5HX09GRlNFVAkgIDB4MjA2NAorCitlbnVtIEFQTV9WRURfU1RBVFVT IHsKKwlWRURfQVBNX1NUU19EMCA9IDAsCisJVkVEX0FQTV9TVFNfRDEsCisJVkVEX0FQTV9TVFNf RDIsCisJVkVEX0FQTV9TVFNfRDMKK307CisKK3N0YXRpYyBpbnQzMl90IHZlZF9zYXZlX2NvbnRl eHQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB2ZWRfcHJpdmF0ZSAqdmVkX3By aXYgPSBkZXZfcHJpdi0+dmVkX3ByaXZhdGU7CisJaW50MzJfdCBvZmZzZXQ7CisJaW50IHJldDsK KworCWlmICh2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KQorCQl2ZWRfcHJpdi0+dmVkX25l ZWRzX3Jlc2V0ID0gTVNWRFhfUkVTRVRfTkVFRFNfSU5JVF9GVzsKKwllbHNlCisJCXZlZF9wcml2 LT52ZWRfbmVlZHNfcmVzZXQgPSAxOworCisjaWZkZWYgQ09ORklHX0RSTV9JUFZSX0VDCisJLyog d2Ugc2hvdWxkIHJlc3RvcmUgdGhlIHN0YXRlLCBpZiB3ZSBwb3dlciBkb3duL3VwIGR1cmluZyBF QyAqLworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgNDsgKytvZmZzZXQpCisJCXZlZF9wcml2 LT52ZWNfZWNfbWVtX2RhdGFbb2Zmc2V0XSA9CisJCQlWRURfUkVHX1JFQUQzMigweDJjYjAgKyBv ZmZzZXQgKiA0KTsKKworCXZlZF9wcml2LT52ZWNfZWNfbWVtX2RhdGFbNF0gPSBWRURfUkVHX1JF QUQzMigweDJjYzQpOworCisJdmVkX3ByaXYtPnZlY19lY19tZW1fc2F2ZWQgPSAxOworCUlQVlJf REVCVUdfVkVEKCJlYyBsYXN0IG1iICVkICVkICVkICVkXG4iLAorCQkJdmVkX3ByaXYtPnZlY19l Y19tZW1fZGF0YVswXSwKKwkJCXZlZF9wcml2LT52ZWNfZWNfbWVtX2RhdGFbMV0sCisJCQl2ZWRf cHJpdi0+dmVjX2VjX21lbV9kYXRhWzJdLAorCQkJdmVkX3ByaXYtPnZlY19lY19tZW1fZGF0YVsz XSk7CisJSVBWUl9ERUJVR19WRUQoImVjIGVycm9yIHN0YXRlICVkXG4iLCB2ZWRfcHJpdi0+dmVj X2VjX21lbV9kYXRhWzRdKTsKKyNlbmRpZgorCisJLyogUmVzZXQgTVRYICovCisJVkVEX1JFR19X UklURTMyKE1UWF9TT0ZUX1JFU0VUX01UWFJFU0VULCBNVFhfU09GVF9SRVNFVF9PRkZTRVQpOwor CisJLyogd2h5IG5lZWQgcmVzZXQgbXN2ZHggYmVmb3JlIHBvd2VyIG9mZiBpdCwgbmVlZCBjaGVj ayBJTUcgKi8KKwlyZXQgPSB2ZWRfY29yZV9yZXNldChkZXZfcHJpdik7CisJaWYgKHVubGlrZWx5 KHJldCkpCisJCUlQVlJfREVCVUdfV0FSTigiZmFpbGVkIHRvIGNhbGwgdmVkX2NvcmVfcmVzZXQ6 ICVkXG4iLCByZXQpOworCisJLyogSW5pdGlhbGl6ZSBWRUMgTG9jYWwgUkFNICovCisJZm9yIChv ZmZzZXQgPSAwOyBvZmZzZXQgPCBWRUNfTE9DQUxfTUVNX0JZVEVfU0laRSAvIDQ7ICsrb2Zmc2V0 KQorCQlWRURfUkVHX1dSSVRFMzIoMCwgVkVDX0xPQ0FMX01FTV9PRkZTRVQgKyBvZmZzZXQgKiA0 KTsKKworCWlmICh2ZWRfcHJpdi0+ZndfbG9hZGVkX2J5X3B1bml0KSB7CisJCVZFRF9SRUdfV1JJ VEUzMigwLCBNVFhfRU5BQkxFX09GRlNFVCk7CisJCXZlZF9zZXRfY2xvY2tzKGRldl9wcml2LT5k ZXYsIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIF9faXB2cl9tc2didXNf cmVhZDMyKHN0cnVjdCBwY2lfZGV2ICpwY2lfcm9vdCwgdTggcG9ydCwgdTMyIGFkZHIpCit7Cisg ICAgdWludDMyX3QgZGF0YTsKKyAgICB1aW50MzJfdCBjbWQ7CisgICAgdWludDMyX3QgY21kZXh0 OworCisgICAgY21kID0gKFBDSV9ST09UX01TR0JVU19SRUFEIDw8IDI0KSB8IChwb3J0IDw8IDE2 KSB8CisgICAgICAgICgoYWRkciAmIDB4ZmYpIDw8IDgpIHwgUENJX1JPT1RfTVNHQlVTX0RXT1JE X0VOQUJMRTsKKyAgICBjbWRleHQgPSBhZGRyICYgMHhmZmZmZmYwMDsKKworICAgIGlmIChjbWRl eHQpIHsKKyAgICAgICAgLyogVGhpcyByZXNldHMgdG8gMCBhdXRvbWF0aWNhbGx5LCBubyBuZWVk IHRvIHdyaXRlIDAgKi8KKyAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwg UENJX1JPT1RfTVNHQlVTX0NUUkxfRVhUX1JFRywKKyAgICAgICAgICAgICAgICAgICAgY21kZXh0 KTsKKyAgICB9CisKKyAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9yb290LCBQQ0lfUk9P VF9NU0dCVVNfQ1RSTF9SRUcsIGNtZCk7CisgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9y b290LCBQQ0lfUk9PVF9NU0dCVVNfREFUQV9SRUcsICZkYXRhKTsKKworICAgIHJldHVybiBkYXRh OworfQorCitzdGF0aWMgdm9pZCBfX2lwdnJfbXNnYnVzX3dyaXRlMzIoc3RydWN0IHBjaV9kZXYg KnBjaV9yb290LCB1OCBwb3J0LCB1MzIgYWRkciwgdTMyIGRhdGEpCit7CisgICAgdWludDMyX3Qg Y21kOworICAgIHVpbnQzMl90IGNtZGV4dDsKKworICAgIGNtZCA9IChQQ0lfUk9PVF9NU0dCVVNf V1JJVEUgPDwgMjQpIHwgKHBvcnQgPDwgMTYpIHwKKyAgICAgICAgKChhZGRyICYgMHhGRikgPDwg OCkgfCBQQ0lfUk9PVF9NU0dCVVNfRFdPUkRfRU5BQkxFOworICAgIGNtZGV4dCA9IGFkZHIgJiAw eGZmZmZmZjAwOworCisgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgUENJX1JP T1RfTVNHQlVTX0RBVEFfUkVHLCBkYXRhKTsKKworICAgIGlmIChjbWRleHQpIHsKKyAgICAgICAg LyogVGhpcyByZXNldHMgdG8gMCBhdXRvbWF0aWNhbGx5LCBubyBuZWVkIHRvIHdyaXRlIDAgKi8K KyAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgUENJX1JPT1RfTVNHQlVT X0NUUkxfRVhUX1JFRywKKyAgICAgICAgICAgIGNtZGV4dCk7CisgICAgfQorCisgICAgcGNpX3dy aXRlX2NvbmZpZ19kd29yZChwY2lfcm9vdCwgUENJX1JPT1RfTVNHQlVTX0NUUkxfUkVHLCBjbWQp OworfQorCitzdGF0aWMgaW50IF9faXB2cl9wbV9jbWRfZnJlcV93YWl0KHN0cnVjdCBwY2lfZGV2 ICpwY2lfcm9vdCwgdTMyIHJlZ19mcmVxLCB1MzIgKmZyZXFfY29kZV9ybHpkKQoreworCWludDMy X3QgdGNvdW50OworCXVpbnQzMl90IGZyZXFfdmFsOworCisJZm9yICh0Y291bnQgPSAwOyA7IHRj b3VudCsrKSB7CisJCWZyZXFfdmFsID0gX19pcHZyX21zZ2J1c19yZWFkMzIocGNpX3Jvb3QsIFBV TklUX1BPUlQsIHJlZ19mcmVxKTsKKwkJaWYgKChmcmVxX3ZhbCAmIElQX0ZSRVFfVkFMSUQpID09 IDApCisJCQlicmVhazsKKwkJaWYgKHRjb3VudCA+IDUwMCkgeworCQkJSVBWUl9FUlJPUigiUC1V bml0IGZyZXEgcmVxdWVzdCB3YWl0IHRpbWVvdXQgJXgiLAorCQkJCWZyZXFfdmFsKTsKKwkJCXJl dHVybiAtRUJVU1k7CisJCX0KKwkJdWRlbGF5KDEpOworCX0KKworCWlmIChmcmVxX2NvZGVfcmx6 ZCkgeworCQkqZnJlcV9jb2RlX3JsemQgPSAoKGZyZXFfdmFsID4+IElQX0ZSRVFfU1RBVF9QT1Mp ICYKKwkJCUlQX0ZSRVFfTUFTSyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQz Ml90IF9faXB2cl9wbV9jbWRfZnJlcV9nZXQoc3RydWN0IHBjaV9kZXYgKnBjaV9yb290LCB1MzIg cmVnX2ZyZXEpCit7CisJdWludDMyX3QgZnJlcV92YWw7CisJaW50MzJfdCBmcmVxX2NvZGU9MDsK KworCV9faXB2cl9wbV9jbWRfZnJlcV93YWl0KHBjaV9yb290LCByZWdfZnJlcSwgTlVMTCk7CisK KwlmcmVxX3ZhbCA9IF9faXB2cl9tc2didXNfcmVhZDMyKHBjaV9yb290LCBQVU5JVF9QT1JULCBy ZWdfZnJlcSk7CisJZnJlcV9jb2RlID0oaW50KSgoZnJlcV92YWw+PklQX0ZSRVFfU1RBVF9QT1Mp ICYgfklQX0ZSRVFfVkFMSUQpOworCXJldHVybiBmcmVxX2NvZGU7Cit9CisKK3N0YXRpYyBpbnQz Ml90IF9faXB2cl9wbV9jbWRfZnJlcV9zZXQoc3RydWN0IHBjaV9kZXYgKnBjaV9yb290LCB1MzIg cmVnX2ZyZXEsIHUzMiBmcmVxX2NvZGUsIHUzMiAqcF9mcmVxX2NvZGVfcmx6ZCkKK3sKKwl1aW50 MzJfdCBmcmVxX3ZhbDsKKwl1aW50MzJfdCBmcmVxX2NvZGVfcmVhbGl6ZWQ7CisJaW50MzJfdCBy dmE7CisKKwlydmEgPSBfX2lwdnJfcG1fY21kX2ZyZXFfd2FpdChwY2lfcm9vdCwgcmVnX2ZyZXEs IE5VTEwpOworCWlmIChydmEgPCAwKSB7CisJCUlQVlJfRVJST1IoInBtX2NtZF9mcmVxX3dhaXQg MSBmYWlsZWQ6ICVkXG4iLCBydmEpOworCQlyZXR1cm4gcnZhOworCX0KKworCWZyZXFfdmFsID0g SVBfRlJFUV9WQUxJRCB8IGZyZXFfY29kZTsKKwlfX2lwdnJfbXNnYnVzX3dyaXRlMzIocGNpX3Jv b3QsIFBVTklUX1BPUlQsIHJlZ19mcmVxLCBmcmVxX3ZhbCk7CisKKwlydmEgPSBfX2lwdnJfcG1f Y21kX2ZyZXFfd2FpdChwY2lfcm9vdCwgcmVnX2ZyZXEsICZmcmVxX2NvZGVfcmVhbGl6ZWQpOwor CWlmIChydmEgPCAwKSB7CisJCUlQVlJfRVJST1IoInBtX2NtZF9mcmVxX3dhaXQgMiBmYWlsZWQ6 ICVkXG4iLCBydmEpOworCQlyZXR1cm4gcnZhOworCX0KKworCWlmIChwX2ZyZXFfY29kZV9ybHpk KQorCQkqcF9mcmVxX2NvZGVfcmx6ZCA9IGZyZXFfY29kZV9yZWFsaXplZDsKKworCXJldHVybiBy dmE7Cit9CisKK3N0YXRpYyBpbnQzMl90IHZlZF9zZXRfZnJlcShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB1MzIgZnJlcV9jb2RlKQoreworCXVpbnQzMl90IGZyZXFfY29kZV9ybHpkID0gMDsKKwlp bnQzMl90IHJldDsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSAoc3RydWN0 IGRybV9pcHZyX3ByaXZhdGUqKWRldi0+ZGV2X3ByaXZhdGU7CisKKwlyZXQgPSBfX2lwdnJfcG1f Y21kX2ZyZXFfc2V0KGRldl9wcml2LT5wY2lfcm9vdCwgVkVEU1NQTTEsIGZyZXFfY29kZSwgJmZy ZXFfY29kZV9ybHpkKTsKKwlpZiAocmV0IDwgMCkgeworCQlJUFZSX0VSUk9SKCJmYWlsZWQgdG8g c2V0IGZyZXFlbmN5LCBjdXJyZW50IGlzICV4XG4iLAorCQkJZnJlcV9jb2RlX3JsemQpOworCX0K KworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90IHZlZF9nZXRfZnJlcShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faXB2cl9wcml2YXRlICpkZXZfcHJpdiA9 IChzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSopZGV2LT5kZXZfcHJpdmF0ZTsKKwlyZXR1cm4gX19p cHZyX3BtX2NtZF9mcmVxX2dldChkZXZfcHJpdi0+cGNpX3Jvb3QsIFZFRFNTUE0xKTsKK30KKwor I2lmZGVmIENPTkZJR19JTlRFTF9TT0NfUE1DCitib29sIHZlZF9wb3dlcl9vbihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQoreworCWludDMyX3QgdmVkX2ZyZXE7CisJaW50MzJfdCByZXQ7CisJSVBW Ul9ERUJVR19QTSgiVkVEOiBwb3dlciBvbiBtc3ZkeCB1c2luZyBBVE9NX1BNQy5cbiIpOworCisJ cmV0ID0gcG1jX25jX3NldF9wb3dlcl9zdGF0ZShWRURTU0MsIDAsIFZFRFNTUE0wKTsKKwlpZiAo dW5saWtlbHkocmV0KSkgeworCQlJUFZSX0VSUk9SKCJWRUQ6IHBtdV9uY19zZXRfcG93ZXJfc3Rh dGUgT04gZmFpbCFcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJdmVkX2ZyZXEgPSB2ZWRf Z2V0X2ZyZXEoZGV2KTsKKworCUlQVlJfREVCVUdfUE0oIlZFRCBmcmVxZW5jeTogY29kZSAlZCAo JWRNSHopXG4iLCB2ZWRfZnJlcSwgR0VUX1ZFRF9GUkVRVUVOQ1kodmVkX2ZyZXEpKTsKKworCXRy YWNlX3ZlZF9wb3dlcl9vbihHRVRfVkVEX0ZSRVFVRU5DWSh2ZWRfZnJlcSkpOworCXJldHVybiB0 cnVlOworfQorYm9vbCB2ZWRfcG93ZXJfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJ aW50MzJfdCB2ZWRfZnJlcTsKKwlpbnQzMl90IHJldDsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0 ZSAqZGV2X3ByaXYgPSAoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUqKWRldi0+ZGV2X3ByaXZhdGU7 CisJSVBWUl9ERUJVR19QTSgiVkVEOiBwb3dlciBvZmYgbXN2ZHggdXNpbmcgQVRPTV9QTUMuXG4i KTsKKworCWlmIChkZXZfcHJpdi0+dmVkX3ByaXZhdGUpIHsKKwkJcmV0ID0gdmVkX3NhdmVfY29u dGV4dChkZXYpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJSVBWUl9FUlJPUigiRmFpbGVk IHRvIHNhdmUgVkVEIGNvbnRleHQsIHN0b3AgcG93ZXJpbmcgb2ZmXG4iKTsKKwkJCXJldHVybiBm YWxzZTsKKwkJfQorCX0KKworCXZlZF9mcmVxID0gdmVkX2dldF9mcmVxKGRldik7CisJSVBWUl9E RUJVR19QTSgiVkVEIGZyZXFlbmN5OiBjb2RlICVkICglZE1IeilcbiIsIHZlZF9mcmVxLCBHRVRf VkVEX0ZSRVFVRU5DWSh2ZWRfZnJlcSkpOworCisJcmV0ID0gcG1jX25jX3NldF9wb3dlcl9zdGF0 ZShWRURTU0MsIDEsIFZFRFNTUE0wKTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlJUFZSX0VS Uk9SKCJWRUQ6IHBtdV9uY19zZXRfcG93ZXJfc3RhdGUgRE9XTiBmYWlsIVxuIik7CisJCXJldHVy biBmYWxzZTsKKwl9CisKKwl0cmFjZV92ZWRfcG93ZXJfb2ZmKEdFVF9WRURfRlJFUVVFTkNZKHZl ZF9mcmVxKSk7CisJcmV0dXJuIHRydWU7Cit9CisjZWxzZQorYm9vbCB2ZWRfcG93ZXJfb24oc3Ry dWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlpbnQzMl90IHZlZF9mcmVxX2JlZm9yZSwgdmVkX2Zy ZXFfYWZ0ZXI7CisJdWludDMyX3QgcHdyX3N0czsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAq ZGV2X3ByaXYgPSAoc3RydWN0IGRybV9pcHZyX3ByaXZhdGUqKWRldi0+ZGV2X3ByaXZhdGU7CisJ SVBWUl9ERUJVR19QTSgiVkVEOiBwb3dlciBvbiBtc3ZkeC5cbiIpOworCisJLyogRklYTUU6IGFk ZCB0aW1lb3V0IGNoZWNrICovCisJZG8geworCQlfX2lwdnJfbXNnYnVzX3dyaXRlMzIoZGV2X3By aXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCwgVkVEX0FQTV9TVFNfRDApOworCQl1 ZGVsYXkoMTApOworCQlwd3Jfc3RzID0gX19pcHZyX21zZ2J1c19yZWFkMzIoZGV2X3ByaXYtPnBj aV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCk7CisJfSB3aGlsZSAocHdyX3N0cyAhPSAweDAp OworCisJZG8geworCQlfX2lwdnJfbXNnYnVzX3dyaXRlMzIoZGV2X3ByaXYtPnBjaV9yb290LCBQ VU5JVF9QT1JULCBWRURTU1BNMCwgVkVEX0FQTV9TVFNfRDMpOworCQl1ZGVsYXkoMTApOworCQlw d3Jfc3RzID0gX19pcHZyX21zZ2J1c19yZWFkMzIoZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9Q T1JULCBWRURTU1BNMCk7CisJfSB3aGlsZSAocHdyX3N0cyAhPSAweDAzMDAwMDAzKTsKKworCWRv IHsKKwkJX19pcHZyX21zZ2J1c193cml0ZTMyKGRldl9wcml2LT5wY2lfcm9vdCwgUFVOSVRfUE9S VCwgVkVEU1NQTTAsIFZFRF9BUE1fU1RTX0QwKTsKKwkJdWRlbGF5KDEwKTsKKwkJcHdyX3N0cyA9 IF9faXB2cl9tc2didXNfcmVhZDMyKGRldl9wcml2LT5wY2lfcm9vdCwgUFVOSVRfUE9SVCwgVkVE U1NQTTApOworCX0gd2hpbGUgKHB3cl9zdHMgIT0gMHgwKTsKKworCXZlZF9mcmVxX2JlZm9yZSA9 IHZlZF9nZXRfZnJlcShkZXYpOworCisJaWYgKHZlZF9zZXRfZnJlcShkZXYsIGRybV9pcHZyX2Zy ZXEpKSB7CisJCUlQVlJfRVJST1IoIkZhaWxlZCB0byBzZXQgVkVEIGZyZXF1ZW5jeVxuIik7CisJ fQorCisJdmVkX2ZyZXFfYWZ0ZXIgPSB2ZWRfZ2V0X2ZyZXEoZGV2KTsKKwlJUFZSX0RFQlVHX1BN KCJWRUQgZnJlcWVuY3k6ICVkTUh6ID0+ICVkTUh6XG4iLAorCQlHRVRfVkVEX0ZSRVFVRU5DWSh2 ZWRfZnJlcV9iZWZvcmUpLCBHRVRfVkVEX0ZSRVFVRU5DWSh2ZWRfZnJlcV9hZnRlcikpOworCisJ dHJhY2VfdmVkX3Bvd2VyX29uKEdFVF9WRURfRlJFUVVFTkNZKHZlZF9mcmVxX2FmdGVyKSk7CisJ cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgdmVkX3Bvd2VyX29mZihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQoreworCXVpbnQzMl90IHB3cl9zdHM7CisJaW50MzJfdCB2ZWRfZnJlcTsKKwlpbnQzMl90 IHJldDsKKwlzdHJ1Y3QgZHJtX2lwdnJfcHJpdmF0ZSAqZGV2X3ByaXYgPSAoc3RydWN0IGRybV9p cHZyX3ByaXZhdGUqKWRldi0+ZGV2X3ByaXZhdGU7CisJSVBWUl9ERUJVR19QTSgiVkVEOiBwb3dl ciBvZmYgbXN2ZHguXG4iKTsKKworCWlmIChkZXZfcHJpdi0+dmVkX3ByaXZhdGUpIHsKKwkJcmV0 ID0gdmVkX3NhdmVfY29udGV4dChkZXYpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJSVBW Ul9FUlJPUigiRmFpbGVkIHRvIHNhdmUgVkVEIGNvbnRleHQ6ICVkLCBzdG9wIHBvd2VyaW5nIG9m ZlxuIiwgcmV0KTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCXZlZF9mcmVxID0gdmVk X2dldF9mcmVxKGRldik7CisJSVBWUl9ERUJVR19QTSgiVkVEIGZyZXFlbmN5OiBjb2RlICVkICgl ZE1IeilcbiIsIHZlZF9mcmVxLCBHRVRfVkVEX0ZSRVFVRU5DWSh2ZWRfZnJlcSkpOworCisJLyog RklYTUU6IGFkZCB0aW1lb3V0IGNoZWNrICovCisJZG8geworCQlfX2lwdnJfbXNnYnVzX3dyaXRl MzIoZGV2X3ByaXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCwgVkVEX0FQTV9TVFNf RDMpOworCQl1ZGVsYXkoMTApOworCQlwd3Jfc3RzID0gX19pcHZyX21zZ2J1c19yZWFkMzIoZGV2 X3ByaXYtPnBjaV9yb290LCBQVU5JVF9QT1JULCBWRURTU1BNMCk7CisJfSB3aGlsZSAocHdyX3N0 cyAhPSAweDAzMDAwMDAzKTsKKworCXRyYWNlX3ZlZF9wb3dlcl9vZmYoR0VUX1ZFRF9GUkVRVUVO Q1kodmVkX2ZyZXEpKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2VuZGlmCisvKioKKyAqIGlzX2lz bGFuZF9vbgorICoKKyAqIERlc2NyaXB0aW9uOiBjaGVja3MgdG8gc2VlIGlmIHRoZSBpc2xhbmQg aXMgdXAKKyAqIHJldHVybnMgdHJ1ZSBpZiBod19pc2xhbmQgaXMgT04KKyAqIHJldHVybnMgZmFs c2UgaWYgaHdfaXNsYW5kIGlzIE9GRgorICovCitib29sIGlzX3ZlZF9vbihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KQoreworCXVpbnQzMl90IHB3cl9zdHM7CisJc3RydWN0IGRybV9pcHZyX3ByaXZh dGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXB3cl9zdHMgPSBfX2lwdnJfbXNn YnVzX3JlYWQzMihkZXZfcHJpdi0+cGNpX3Jvb3QsIFBVTklUX1BPUlQsIFZFRFNTUE0wKTsKKwor CXJldHVybiAocHdyX3N0cyA9PSBWRURfQVBNX1NUU19EMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uaCBiL2RyaXZlcnMvZ3B1L2RybS9pcHZyL3ZlZF9wbS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMDBmOGIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcG0uaApAQCAtMCwwICsxLDU1IEBACisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAqIHZlZF9wbS5oOiBWRUQgcG93ZXIgbWFuYWdlbWVudCBoZWFk ZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGls bHNib3JvLCBPUiwgVVNBCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJ VFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICogQXV0aG9yczoKKyAqICAg IEZlaSBKaWFuZyA8ZmVpLmppYW5nQGludGVsLmNvbT4KKyAqICAgIFlhbyBDaGVuZyA8eWFvLmNo ZW5nQGludGVsLmNvbT4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX1ZFRF9Q TV9IXworI2RlZmluZSBfVkVEX1BNX0hfCisKKyNpbmNsdWRlICJpcHZyX2Rydi5oIgorCisjZGVm aW5lIElQX0ZSRVFfMTAwXzAwIDB4MWYgICAgICAgIC8qIDBiMTExMTEgMTAwLjAwICovCisjZGVm aW5lIElQX0ZSRVFfMTA2XzY3IDB4MWQgICAgICAgIC8qIDBiMTExMDEgMTA2LjY3ICovCisjZGVm aW5lIElQX0ZSRVFfMTMzXzMwIDB4MTcgICAgICAgIC8qIDBiMTAxMTEgMTMzLjMwICovCisjZGVm aW5lIElQX0ZSRVFfMTYwXzAwIDB4MTMgICAgICAgIC8qIDBiMTAwMTEgMTYwLjAwICovCisjZGVm aW5lIElQX0ZSRVFfMTc3Xzc4IDB4MTEgICAgICAgIC8qIDBiMTAwMDEgMTc3Ljc4ICovCisjZGVm aW5lIElQX0ZSRVFfMjAwXzAwIDB4MGYgICAgICAgIC8qIDBiMDExMTEgMjAwLjAwICovCisjZGVm aW5lIElQX0ZSRVFfMjEzXzMzIDB4MGUgICAgICAgIC8qIDBiMDExMTAgMjEzLjMzICovCisjZGVm aW5lIElQX0ZSRVFfMjY2XzY3IDB4MGIgICAgICAgIC8qIDBiMDEwMTEgMjY2LjY3ICovCisjZGVm aW5lIElQX0ZSRVFfMzIwXzAwIDB4MDkgICAgICAgIC8qIDBiMDEwMDEgMzIwLjAwICovCisjZGVm aW5lIElQX0ZSRVFfMzU1XzU2IDB4MDggICAgICAgIC8qIDBiMDEwMDAgMzU1LjU2ICovCisjZGVm aW5lIElQX0ZSRVFfNDAwXzAwIDB4MDcgICAgICAgIC8qIDBiMDAxMTEgNDAwLjAwICovCisjZGVm aW5lIElQX0ZSRVFfNDU3XzE0IDB4MDYgICAgICAgIC8qIDBiMDAxMTAgNDU3LjE0ICovCisjZGVm aW5lIElQX0ZSRVFfNTMzXzMzIDB4MDUgICAgICAgIC8qIDBiMDAxMDEgNTMzLjMzICovCisjZGVm aW5lIElQX0ZSRVFfNjQwXzAwIDB4MDQgICAgICAgIC8qIDBiMDAxMDAgNjQwLjAwICovCisjZGVm aW5lIElQX0ZSRVFfODAwXzAwIDB4MDMgICAgICAgIC8qIDBiMDAwMTEgODAwLjAwICovCisKKyNk ZWZpbmUgR0VUX1ZFRF9GUkVRVUVOQ1koZnJlcV9jb2RlKQkoKDE2MDAgKiAyKS8oKGZyZXFfY29k ZSkgKyAxKSkKKworYm9vbCBpc192ZWRfb24oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKK2Jv b2wgdmVkX3Bvd2VyX29uKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworCitib29sIHZlZF9wb3dl cl9vZmYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2lwdnIvdmVkX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2lwdnIvdmVkX3Jl Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTVmMmEKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaXB2ci92ZWRfcmVnLmgKQEAgLTAsMCArMSw2MDkg QEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorICogdmVkX3JlZy5oOiBWRUQgcmVnaXN0ZXIgZGVmaW5p dGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiwgSGlsbHNi b3JvLCBPUiwgVVNBCisgKiBDb3B5cmlnaHQgKGMpIEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBM aW1pdGVkLCBVSworICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9y CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBGZWkg SmlhbmcgPGZlaS5qaWFuZ0BpbnRlbC5jb20+CisgKgorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisj aWZuZGVmIF9WRURfUkVHX0hfCisjZGVmaW5lIF9WRURfUkVHX0hfCisKKyNpbmNsdWRlICJpcHZy X2Rydi5oIgorCisjaWYgKGRlZmluZWQgTUZMRF9NU1ZEWF9GQUJSSUNfREVCVUcpICYmIE1GTERf TVNWRFhfRkFCUklDX0RFQlVHCisjZGVmaW5lIFZFRF9SRUdfV1JJVEUzMihfdmFsLCBfb2ZmcykJ CQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKGlwdnJfZ2V0X3Bvd2VyX3N0YXRlKE9TUE1fVklE RU9fREVDX0lTTEFORCkgPT0gMCkJCVwKKwkJcGFuaWMoIm1zdmR4IHJlZyAweCV4IHdyaXRlIGZh aWxlZC5cbiIsCQkJXAorCQkJCSh1bnNpZ25lZCBpbnQpKF9vZmZzKSk7CQkJXAorCWVsc2UJCQkJ CQkJCVwKKwkJaW93cml0ZTMyKF92YWwsIGRldl9wcml2LT52ZWRfcmVnX2Jhc2UgKyAoX29mZnMp KTsJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgVkVEX1JFR19SRUFE MzIodWludDMyX3QgX29mZnMpCit7CisJc3RydWN0IGRybV9pcHZyX3ByaXZhdGUgKmRldl9wcml2 ID0KKwkJKHN0cnVjdCBkcm1faXB2cl9wcml2YXRlICopZ3BEcm1EZXZpY2UtPmRldl9wcml2YXRl OworCWlmIChpcHZyX2dldF9wb3dlcl9zdGF0ZShPU1BNX1ZJREVPX0RFQ19JU0xBTkQpID09IDAp IHsKKwkJcGFuaWMoIm1zdmR4IHJlZyAweCV4IHJlYWQgZmFpbGVkLlxuIiwgKHVuc2lnbmVkIGlu dCkoX29mZnMpKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGlvcmVhZDMyKGRl dl9wcml2LT52ZWRfcmVnX2Jhc2UgKyAoX29mZnMpKTsKKwl9Cit9CisKKyNlbGlmIChkZWZpbmVk IE1TVkRYX1JFR19EVU1QKSAmJiBNU1ZEWF9SRUdfRFVNUAorCisjZGVmaW5lIFZFRF9SRUdfV1JJ VEUzMihfdmFsLCBfb2ZmcykgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKwlwcmludGsoS0VSTl9JTkZPIk1TVkRYOiB3cml0ZSAlMDh4IHRv IHJlZyAweCUwOHhcbiIsIFwKKwkJCSh1bnNpZ25lZCBpbnQpKF92YWwpLCAgICAgICBcCisJCQko dW5zaWduZWQgaW50KShfb2ZmcykpOyAgICAgXAorCWlvd3JpdGUzMihfdmFsLCBkZXZfcHJpdi0+ dmVkX3JlZ19iYXNlICsgKF9vZmZzKSk7ICAgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGlu ZSB1aW50MzJfdCBWRURfUkVHX1JFQUQzMih1aW50MzJfdCBfb2ZmcykKK3sKKwl1aW50MzJfdCB2 YWwgPSBpb3JlYWQzMihkZXZfcHJpdi0+dmVkX3JlZ19iYXNlICsgKF9vZmZzKSk7CisJcHJpbnRr KEtFUk5fSU5GTyJNU1ZEWDogcmVhZCByZWcgMHglMDh4LCBnZXQgJTA4eFxuIiwKKwkJCSh1bnNp Z25lZCBpbnQpKF9vZmZzKSwgdmFsKTsKKwlyZXR1cm4gdmFsOworfQorCisjZWxzZQorCisjZGVm aW5lIFZFRF9SRUdfV1JJVEUzMihfdmFsLCBfb2ZmcykgXAorCWlvd3JpdGUzMihfdmFsLCBkZXZf cHJpdi0+dmVkX3JlZ19iYXNlICsgKF9vZmZzKSkKKyNkZWZpbmUgVkVEX1JFR19SRUFEMzIoX29m ZnMpIFwKKwlpb3JlYWQzMihkZXZfcHJpdi0+dmVkX3JlZ19iYXNlICsgKF9vZmZzKSkKKworI2Vu ZGlmCisKKyNkZWZpbmUgUkVHSVNURVIoX19ncm91cF9fLCBfX3JlZ19fKSAoX19ncm91cF9fIyNf IyNfX3JlZ19fIyNfT0ZGU0VUKQorCisjZGVmaW5lIE1UWF9JTlRFUk5BTF9SRUcoUl9TUEVDSUZJ RVIgLCBVX1NQRUNJRklFUikJXAorCSgoKFJfU1BFQ0lGSUVSKTw8NCkgfCAoVV9TUEVDSUZJRVIp KQorI2RlZmluZSBNVFhfUEMJCU1UWF9JTlRFUk5BTF9SRUcoMCwgNSkKKworI2RlZmluZSBNRU1J T19SRUFEX0ZJRUxEKHZwTWVtLCBmaWVsZCkJCQkJCQlcCisJKCh1aW50MzJfdCkoKCgqKChmaWVs ZCMjX1RZUEUqKSgoKHVpbnQzMl90KXZwTWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpIFwKKwkJCSYg ZmllbGQjI19NQVNLKSA+PiBmaWVsZCMjX1NISUZUKSkJCQlcCisKKyNkZWZpbmUgTUVNSU9fV1JJ VEVfRklFTEQodnBNZW0sIGZpZWxkLCB2YWx1ZSkJCQkJCVwKK2RvIHsgCQkJCQkJCQkJCVwKKwko KCooKGZpZWxkIyNfVFlQRSopKCgodWludDMyX3QpdnBNZW0pICsgZmllbGQjI19PRkZTRVQpKSkg PQlcCisJCSgoKigoZmllbGQjI19UWVBFKikoKCh1aW50MzJfdCl2cE1lbSkgKyBmaWVsZCMjX09G RlNFVCkpKQlcCisJCQkmIChmaWVsZCMjX1RZUEUpfmZpZWxkIyNfTUFTSykgfAkJCVwKKwkoZmll bGQjI19UWVBFKSgoKHVpbnQzMl90KSh2YWx1ZSkgPDwgZmllbGQjI19TSElGVCkgJiBmaWVsZCMj X01BU0spKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBNRU1JT19XUklURV9GSUVMRF9MSVRF KHZwTWVtLCBmaWVsZCwgdmFsdWUpCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCSAoKigoZmllbGQj I19UWVBFKikoKCh1aW50MzJfdCl2cE1lbSkgKyBmaWVsZCMjX09GRlNFVCkpKSA9CQlcCisJKCgq KChmaWVsZCMjX1RZUEUqKSgoKHVpbnQzMl90KXZwTWVtKSArIGZpZWxkIyNfT0ZGU0VUKSkpIHwJ CVwKKwkJKGZpZWxkIyNfVFlQRSkoKCh1aW50MzJfdCkodmFsdWUpIDw8IGZpZWxkIyNfU0hJRlQp KSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVHSU9fUkVBRF9GSUVMRChyZWdfdmFsLCBy ZWcsIGZpZWxkKQkJCQkJXAorCSgocmVnX3ZhbCAmIHJlZyMjXyMjZmllbGQjI19NQVNLKSA+PiBy ZWcjI18jI2ZpZWxkIyNfU0hJRlQpCisKKyNkZWZpbmUgUkVHSU9fV1JJVEVfRklFTEQocmVnX3Zh bCwgcmVnLCBmaWVsZCwgdmFsdWUpCQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCShyZWdfdmFsKSA9 CQkJCQkJCQlcCisJKChyZWdfdmFsKSAmIH4ocmVnIyNfIyNmaWVsZCMjX01BU0spKSB8CQkJCVwK KwkoKCh2YWx1ZSkgPDwgKHJlZyMjXyMjZmllbGQjI19TSElGVCkpICYgKHJlZyMjXyMjZmllbGQj I19NQVNLKSk7CVwKK30gd2hpbGUgKDApCisKKworI2RlZmluZSBSRUdJT19XUklURV9GSUVMRF9M SVRFKHJlZ192YWwsIHJlZywgZmllbGQsIHZhbHVlKQkJCVwKK2RvIHsJCQkJCQkJCQkJXAorCShy ZWdfdmFsKSA9ICgocmVnX3ZhbCkgfCAoKHZhbHVlKSA8PCAocmVnIyNfIyNmaWVsZCMjX1NISUZU KSkpOwlcCit9IHdoaWxlICgwKQorCisvKioqKioqIE1TVkRYLlRlY2huaWNhbCBSZWZlcmVuY2Ug TWFudWFsLjIuMC4yLjQuRXh0ZXJuYWwgVlhEMzh4ICoqKioqKioqKioqKioqCitPZmZzZXQgYWRk cmVzcyAJCQlOYW1lIAkJCUlkZW50aWZpZXIKKzB4MDAwMCAtIDB4MDNGRiAoMTAyNEIpCQlNVFgg UmVnaXN0ZXIJCVJFR19NU1ZEWF9NVFgKKzB4MDQwMCAtIDB4MDQ3RiAoMTI4QikJCVZETUMgUmVn aXN0ZXIJCVJFR19NU1ZEWCBfVkRNQworMHgwNDgwIC0gMHgwNEZGICgxMjhCKQkJVkRFQiBSZWdp c3RlcgkJUkVHX01TVkRYIF9WREVCCisweDA1MDAgLSAweDA1RkYgKDI1NkIpCQlETUFDIFJlZ2lz dGVyCQlSRUdfTVNWRFggX0RNQUMKKzB4MDYwMCAtIDB4MDZGRiAoMjU2QikJCU1TVkRYIENvcmUg UmVnaXN0ZXIJUkVHX01TVkRYIF9TWVMKKzB4MDcwMCAtIDB4MDdGRiAoMjU2QikJCVZFQyBpUSBN YXRyaXggUkFNIAlSRUdfTVNWRFhfVkVDX0lRUkFNCisweDA4MDAgLSAweDBGRkYgKDIwNDhCKQkJ VkVDIFJlZ2lzdGVycwkJUkVHX01TVkRYIF9WRUMKKzB4MTAwMCAtIDB4MUZGRiAoNGtCKQkJQ29t bWFuZCBSZWdpc3RlcglSRUdfTVNWRFggX0NNRAorMHgyMDAwIC0gMHgyRkZGICg0a0IpCQlWRUMg TG9jYWwgUkFNCQlSRUdfTVNWRFggX1ZFQ19SQU0KKzB4MzAwMCAtIDB4NEZGRiAoOGtCKQkJVkVD IFZMQyBUYWJsZQkJUkFNIFJFR19NU1ZEWCBfVkVDX1ZMQworMHg1MDAwIC0gMHg1RkZGICg0a0Ip CQlBWEkgUmVnaXN0ZXIJCVJFR19NU1ZEWCBfQVhJCisqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK Ky8qKioqKioqKioqKioqKiogTVRYIHJlZ2lzdGVycyBzdGFydDogMHgwMDAwIC0gMHgwM0ZGICgx MDI0QikgKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTVRYX0VOQUJMRV9PRkZTRVQJCQkJKDB4 MDAwMCkKKyNkZWZpbmUgTVRYX0VOQUJMRV9NVFhfRU5BQkxFX01BU0sJCQkJKDB4MDAwMDAwMDEp CisjZGVmaW5lIE1UWF9FTkFCTEVfTVRYX0VOQUJMRV9TSElGVAkJCQkoMCkKKworI2RlZmluZSBN VFhfS0lDS19JTlBVVF9PRkZTRVQJCQkJKDB4MDA4MCkKKworI2RlZmluZSBNVFhfUkVHSVNURVJf UkVBRF9XUklURV9SRVFVRVNUX09GRlNFVAkJKDB4MDBGQykKKyNkZWZpbmUgTVRYX1JFR0lTVEVS X1JFQURfV1JJVEVfUkVRVUVTVF9NVFhfRFJFQURZX01BU0sJKDB4ODAwMDAwMDApCisjZGVmaW5l IE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfTVRYX0RSRUFEWV9TSElGVAkoMzEpCisj ZGVmaW5lIE1UWF9SRUdJU1RFUl9SRUFEX1dSSVRFX1JFUVVFU1RfTVRYX1JOV19NQVNLCQkoMHgw MDAxMDAwMCkKKyNkZWZpbmUgTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfUkVRVUVTVF9NVFhfUk5X X1NISUZUCQkoMTYpCisKKyNkZWZpbmUgTVRYX1JFR0lTVEVSX1JFQURfV1JJVEVfREFUQV9PRkZT RVQJCSgweDAwRjgpCisKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfREFUQV9UUkFOU0ZFUl9PRkZT RVQJCSgweDAxMDQpCisKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9PRkZTRVQJCQko MHgwMTA4KQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01UWF9NQ01JRF9NQVNLCQkJ KDB4MEZGMDAwMDApCisjZGVmaW5lIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfTVRYX01DTUlEX1NI SUZUCQkJKDIwKQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01UWF9NQ01fQUREUl9N QVNLCQkoMHgwMDBGRkZGQykKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfQ09OVFJPTF9NVFhfTUNN X0FERFJfU0hJRlQJCSgyKQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01UWF9NQ01B SV9NQVNLCQkJKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfTVRY X01DTUFJX1NISUZUCQkJKDEpCisjZGVmaW5lIE1UWF9SQU1fQUNDRVNTX0NPTlRST0xfTVRYX01D TVJfTUFTSwkJCSgweDAwMDAwMDAxKQorI2RlZmluZSBNVFhfUkFNX0FDQ0VTU19DT05UUk9MX01U WF9NQ01SX1NISUZUCQkJKDApCisKKyNkZWZpbmUgTVRYX1JBTV9BQ0NFU1NfU1RBVFVTX09GRlNF VAkJCSgweDAxMEMpCisKKyNkZWZpbmUgTVRYX1NPRlRfUkVTRVRfT0ZGU0VUCQkJCSgweDAyMDAp CisjZGVmaW5lIE1UWF9TT0ZUX1JFU0VUX01UWF9SRVNFVF9NQVNLCQkJCSgweDAwMDAwMDAxKQor I2RlZmluZSBNVFhfU09GVF9SRVNFVF9NVFhfUkVTRVRfU0hJRlQJCQkJKDApCisjZGVmaW5lCU1U WF9TT0ZUX1JFU0VUX01UWFJFU0VUCQkJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIE1UWF9TWVND X1RJTUVSRElWX09GRlNFVAkJCSgweDAyMDgpCisKKyNkZWZpbmUgTVRYX1NZU0NfQ0RNQUNfT0ZG U0VUCQkJCSgweDAzNDApCisjZGVmaW5lIE1UWF9TWVNDX0NETUFDX0JVUlNUU0laRV9NQVNLCQkJ CSgweDA3MDAwMDAwKQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19CVVJTVFNJWkVfU0hJRlQJCQkJ KDI0KQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19STldfTUFTSwkJCQkoMHgwMDAyMDAwMCkKKyNk ZWZpbmUgTVRYX1NZU0NfQ0RNQUNfUk5XX1NISUZUCQkJCSgxNykKKyNkZWZpbmUgTVRYX1NZU0Nf Q0RNQUNfRU5BQkxFX01BU0sJCQkJKDB4MDAwMTAwMDApCisjZGVmaW5lIE1UWF9TWVNDX0NETUFD X0VOQUJMRV9TSElGVAkJCQkoMTYpCisjZGVmaW5lIE1UWF9TWVNDX0NETUFDX0xFTkdUSF9NQVNL CQkJCSgweDAwMDBGRkZGKQorI2RlZmluZSBNVFhfU1lTQ19DRE1BQ19MRU5HVEhfU0hJRlQJCQkJ KDApCisKKyNkZWZpbmUgTVRYX1NZU0NfQ0RNQUFfT0ZGU0VUCQkJCSgweDAzNDQpCisKKyNkZWZp bmUgTVRYX1NZU0NfQ0RNQVMwX09GRlNFVCAgICAgIAkJCSgweDAzNDgpCisKKyNkZWZpbmUgTVRY X1NZU0NfQ0RNQVRfT0ZGU0VUCQkJCSgweDAzNTApCisvKioqKioqKioqKioqKioqKioqKioqKioq KiogTVRYIHJlZ2lzdGVycyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioq KioqKioqKioqKioqIERNQUMgUmVnaXN0ZXJzOiAweDA1MDAgLSAweDA1RkYgKDI1NkIpICoqKioq KioqKioqKioqKi8KKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX0VOX01BU0sgICAgICAgICAJCSgw eDAwMDEwMDAwKQorI2RlZmluZSBETUFDX0RNQUNfSVJRX1NUQVRfVFJBTlNGRVJfRklOX01BU0sg ICAgICAgICAgICAoMHgwMDAyMDAwMCkKKworI2RlZmluZSBETUFDX0RNQUNfU0VUVVBfT0ZGU0VU CQkJCSgweDA1MDApCisKKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX09GRlNFVAkJCQkoMHgwNTA0 KQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRfQlNXQVBfTFNCTUFTSyAgICAgICAgICAgCQkoMHgw MDAwMDAwMSkKKyNkZWZpbmUgRE1BQ19ETUFDX0NPVU5UX0JTV0FQX1NISUZUICAgICAgICAgICAg CQkoMzApCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9QV19MU0JNQVNLCQkJCSgweDAwMDAwMDAz KQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRfUFdfU0hJRlQgICAgICAgICAgICAgICAgCQkoMjcp CisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9ESVJfTFNCTUFTSwkJCQkoMHgwMDAwMDAwMSkKKyNk ZWZpbmUgRE1BQ19ETUFDX0NPVU5UX0RJUl9TSElGVAkJCQkoMjYpCisjZGVmaW5lIERNQUNfRE1B Q19DT1VOVF9QSV9MU0JNQVNLCQkJCSgweDAwMDAwMDAzKQorI2RlZmluZSBETUFDX0RNQUNfQ09V TlRfUElfU0hJRlQJCQkJKDI0KQorI2RlZmluZSBETUFDX0RNQUNfQ09VTlRfQ05UX0xTQk1BU0sJ CQkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9DTlRfU0hJRlQJCQkJKDAp CisjZGVmaW5lIERNQUNfRE1BQ19DT1VOVF9FTl9NQVNLCQkJCSgweDAwMDEwMDAwKQorI2RlZmlu ZSBETUFDX0RNQUNfQ09VTlRfRU5fU0hJRlQJCQkJKDE2KQorCisjZGVmaW5lIERNQUNfRE1BQ19Q RVJJUEhfT0ZGU0VUCQkJCSgweDA1MDgpCisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhfQUNDX0RF TF9MU0JNQVNLCQkJKDB4MDAwMDAwMDcpCisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhfQUNDX0RF TF9TSElGVAkJCQkoMjkpCisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhfSU5DUl9MU0JNQVNLCQkJ CSgweDAwMDAwMDAxKQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIX0lOQ1JfU0hJRlQJCQkJKDI3 KQorI2RlZmluZSBETUFDX0RNQUNfUEVSSVBIX0JVUlNUX0xTQk1BU0sJCQkJKDB4MDAwMDAwMDcp CisjZGVmaW5lIERNQUNfRE1BQ19QRVJJUEhfQlVSU1RfU0hJRlQJCQkJKDI0KQorCisjZGVmaW5l IERNQUNfRE1BQ19JUlFfU1RBVF9PRkZTRVQJCQkoMHgwNTBDKQorI2RlZmluZSBETUFDX0RNQUNf SVJRX1NUQVRfVFJBTlNGRVJfRklOX01BU0sJCQkoMHgwMDAyMDAwMCkKKworI2RlZmluZSBETUFD X0RNQUNfUEVSSVBIRVJBTF9BRERSX09GRlNFVAkJKDB4MDUxNCkKKyNkZWZpbmUgRE1BQ19ETUFD X1BFUklQSEVSQUxfQUREUl9BRERSX01BU0sJCQkoMHgwMDdGRkZGRikKKyNkZWZpbmUgRE1BQ19E TUFDX1BFUklQSEVSQUxfQUREUl9BRERSX0xTQk1BU0sJCQkoMHgwMDdGRkZGRikKKyNkZWZpbmUg RE1BQ19ETUFDX1BFUklQSEVSQUxfQUREUl9BRERSX1NISUZUCQkJKDApCisKKy8qIERNQUMgY29u dHJvbCAqLworI2RlZmluZSBQU0JfRE1BQ19WQUxVRV9DT1VOVChCU1dBUCwgUFcsIERJUiwgUEVS SVBIX0lOQ1IsIENPVU5UKSAJXAorCQkoKCgoQlNXQVApICYgRE1BQ19ETUFDX0NPVU5UX0JTV0FQ X0xTQk1BU0spIDw8CVwKKwkJCURNQUNfRE1BQ19DT1VOVF9CU1dBUF9TSElGVCkgfCAJCVwKKwkJ KCgoUFcpICYgRE1BQ19ETUFDX0NPVU5UX1BXX0xTQk1BU0spIDw8CQlcCisJCQlETUFDX0RNQUNf Q09VTlRfUFdfU0hJRlQpIHwgCQkJXAorCQkoKChESVIpICYgRE1BQ19ETUFDX0NPVU5UX0RJUl9M U0JNQVNLKSA8PAkJXAorCQkJRE1BQ19ETUFDX0NPVU5UX0RJUl9TSElGVCkgfAkJCVwKKwkJKCgo UEVSSVBIX0lOQ1IpICYgRE1BQ19ETUFDX0NPVU5UX1BJX0xTQk1BU0spIDw8CVwKKwkJCURNQUNf RE1BQ19DT1VOVF9QSV9TSElGVCkgfAkJCVwKKwkJKCgoQ09VTlQpICYgRE1BQ19ETUFDX0NPVU5U X0NOVF9MU0JNQVNLKSA8PAkJXAorCQkJRE1BQ19ETUFDX0NPVU5UX0NOVF9TSElGVCkpCisKKyNk ZWZpbmUgUFNCX0RNQUNfVkFMVUVfUEVSSVBIX1BBUkFNKEFDQ19ERUwsIElOQ1IsIEJVUlNUKQkJ XAorCQkoKCgoQUNDX0RFTCkgJiBETUFDX0RNQUNfUEVSSVBIX0FDQ19ERUxfTFNCTUFTSykgPDwJ XAorCQkJRE1BQ19ETUFDX1BFUklQSF9BQ0NfREVMX1NISUZUKSB8IAkJXAorCQkoKChJTkNSKSAm IERNQUNfRE1BQ19QRVJJUEhfSU5DUl9MU0JNQVNLKSA8PAkJXAorCQkJRE1BQ19ETUFDX1BFUklQ SF9JTkNSX1NISUZUKSB8IAkJXAorCQkoKChCVVJTVCkgJiBETUFDX0RNQUNfUEVSSVBIX0JVUlNU X0xTQk1BU0spIDw8CQlcCisJCQlETUFDX0RNQUNfUEVSSVBIX0JVUlNUX1NISUZUKSkKKwordHlw ZWRlZiBlbnVtIHsKKwkvKiAhPCBObyBieXRlIHN3YXBwaW5nIHdpbGwgYmUgcGVyZm9ybWVkLiAq LworCVBTQl9ETUFDX0JTV0FQX05PX1NXQVAgPSAweDAsCisJLyogITwgQnl0ZSBvcmRlciB3aWxs IGJlIHJldmVyc2VkLiAqLworCVBTQl9ETUFDX0JTV0FQX1JFVkVSU0UgPSAweDEsCit9IERNQUNf ZUJTd2FwOworCit0eXBlZGVmIGVudW0geworCS8qICE8IERhdGEgZnJvbSBtZW1vcnkgdG8gcGVy aXBoZXJhbC4gKi8KKwlQU0JfRE1BQ19ESVJfTUVNX1RPX1BFUklQSCA9IDB4MCwKKwkvKiAhPCBE YXRhIGZyb20gcGVyaXBoZXJhbCB0byBtZW1vcnkuICovCisJUFNCX0RNQUNfRElSX1BFUklQSF9U T19NRU0gPSAweDEsCit9IERNQUNfZURpcjsKKwordHlwZWRlZiBlbnVtIHsKKwlQU0JfRE1BQ19B Q0NfREVMXzAJPSAweDAsCS8qICE8IEFjY2VzcyBkZWxheSB6ZXJvIGNsb2NrIGN5Y2xlcyAqLwor CVBTQl9ETUFDX0FDQ19ERUxfMjU2ICAgID0gMHgxLAkvKiAhPCBBY2Nlc3MgZGVsYXkgMjU2IGNs b2NrIGN5Y2xlcyAqLworCVBTQl9ETUFDX0FDQ19ERUxfNTEyICAgID0gMHgyLAkvKiAhPCBBY2Nl c3MgZGVsYXkgNTEyIGNsb2NrIGN5Y2xlcyAqLworCVBTQl9ETUFDX0FDQ19ERUxfNzY4ICAgID0g MHgzLAkvKiAhPCBBY2Nlc3MgZGVsYXkgNzY4IGNsb2NrIGN5Y2xlcyAqLworCVBTQl9ETUFDX0FD Q19ERUxfMTAyNCAgID0gMHg0LAkvKiAhPCBBY2Nlc3MgZGVsYXkgMTAyNCBjbG9jayBjeWNsZXMg Ki8KKwlQU0JfRE1BQ19BQ0NfREVMXzEyODAgICA9IDB4NSwJLyogITwgQWNjZXNzIGRlbGF5IDEy ODAgY2xvY2sgY3ljbGVzICovCisJUFNCX0RNQUNfQUNDX0RFTF8xNTM2ICAgPSAweDYsCS8qICE8 IEFjY2VzcyBkZWxheSAxNTM2IGNsb2NrIGN5Y2xlcyAqLworCVBTQl9ETUFDX0FDQ19ERUxfMTc5 MiAgID0gMHg3LAkvKiAhPCBBY2Nlc3MgZGVsYXkgMTc5MiBjbG9jayBjeWNsZXMgKi8KK30gRE1B Q19lQWNjRGVsOworCit0eXBlZGVmIGVudW0geworCVBTQl9ETUFDX0lOQ1JfT0ZGCT0gMCwJLyog ITwgU3RhdGljIHBlcmlwaGVyYWwgYWRkcmVzcy4gKi8KKwlQU0JfRE1BQ19JTkNSX09OCT0gMSwJ LyogITwgSW5jcmVtZW50aW5nIHBlcmlwaGVyYWwgYWRkcmVzcy4gKi8KK30gRE1BQ19lSW5jcjsK KwordHlwZWRlZiBlbnVtIHsKKwlQU0JfRE1BQ19CVVJTVF8wCT0gMHgwLAkvKiAhPCBidXJzdCBz aXplIG9mIDAgKi8KKwlQU0JfRE1BQ19CVVJTVF8xICAgICAgICA9IDB4MSwJLyogITwgYnVyc3Qg c2l6ZSBvZiAxICovCisJUFNCX0RNQUNfQlVSU1RfMiAgICAgICAgPSAweDIsCS8qICE8IGJ1cnN0 IHNpemUgb2YgMiAqLworCVBTQl9ETUFDX0JVUlNUXzMgICAgICAgID0gMHgzLAkvKiAhPCBidXJz dCBzaXplIG9mIDMgKi8KKwlQU0JfRE1BQ19CVVJTVF80ICAgICAgICA9IDB4NCwJLyogITwgYnVy c3Qgc2l6ZSBvZiA0ICovCisJUFNCX0RNQUNfQlVSU1RfNSAgICAgICAgPSAweDUsCS8qICE8IGJ1 cnN0IHNpemUgb2YgNSAqLworCVBTQl9ETUFDX0JVUlNUXzYgICAgICAgID0gMHg2LAkvKiAhPCBi dXJzdCBzaXplIG9mIDYgKi8KKwlQU0JfRE1BQ19CVVJTVF83ICAgICAgICA9IDB4NywJLyogITwg YnVyc3Qgc2l6ZSBvZiA3ICovCit9IERNQUNfZUJ1cnN0OworLyoqKioqKioqKioqKioqKioqKioq KioqKioqIERNQUMgUmVnaXN0ZXJzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwor LyoqKioqKioqKioqKioqKiogTVNWRFggQ29yZSBSZWdpc3RlcnM6IDB4MDYwMCAtIDB4MDZGRiAo MjU2QikgKioqKioqKioqKioqKioqLworI2RlZmluZSBNU1ZEWF9DT05UUk9MX09GRlNFVAkJCQkJ KDB4MDYwMCkKKyNkZWZpbmUgTVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX01BU0sJCQko MHgwMDAwMDEwMCkKKyNkZWZpbmUgTVNWRFhfQ09OVFJPTF9NU1ZEWF9TT0ZUX1JFU0VUX1NISUZU CQkJKDgpCisjZGVmaW5lIE1TVkRYX0NPTlRST0xfRE1BQ19DSDBfU0VMRUNUX01BU0sJCQkoMHgw MDAwMTAwMCkKKyNkZWZpbmUgTVNWRFhfQ09OVFJPTF9ETUFDX0NIMF9TRUxFQ1RfU0hJRlQJCQko MTIpCisjZGVmaW5lIE1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLCQkJKDB4MDAw MDAxMDApCisjZGVmaW5lIE1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9TSElGVAkJCSg4 KQorI2RlZmluZSBNU1ZEWF9DT05UUk9MX01TVkRYX0ZFX1NPRlRfUkVTRVRfTUFTSwkJCSgweDAw MDEwMDAwKQorI2RlZmluZSBNU1ZEWF9DT05UUk9MX01TVkRYX0JFX1NPRlRfUkVTRVRfTUFTSwkJ CSgweDAwMTAwMDAwKQorI2RlZmluZSBNU1ZEWF9DT05UUk9MX01TVkRYX1ZFQ19NRU1JRl9TT0ZU X1JFU0VUX01BU0sJCSgweDAxMDAwMDAwKQorI2RlZmluZSBNU1ZEWF9DT05UUk9MX01TVkRYX1ZF Q19SRU5ERUNfREVDX1NPRlRfUkVTRVRfTUFTSyAJKDB4MTAwMDAwMDApCisjZGVmaW5lIG1zdmR4 X3N3X3Jlc2V0X2FsbCBcCisJKE1TVkRYX0NPTlRST0xfTVNWRFhfU09GVF9SRVNFVF9NQVNLIHwJ ICAJCVwKKwlNU1ZEWF9DT05UUk9MX01TVkRYX0ZFX1NPRlRfUkVTRVRfTUFTSyB8CQlcCisJTVNW RFhfQ09OVFJPTF9NU1ZEWF9CRV9TT0ZUX1JFU0VUX01BU0sJfAkJXAorCU1TVkRYX0NPTlRST0xf TVNWRFhfVkVDX01FTUlGX1NPRlRfUkVTRVRfTUFTSyB8CVwKKwlNU1ZEWF9DT05UUk9MX01TVkRY X1ZFQ19SRU5ERUNfREVDX1NPRlRfUkVTRVRfTUFTSykKKworI2RlZmluZSBNU1ZEWF9JTlRFUlJV UFRfQ0xFQVJfT0ZGU0VUCQkJKDB4MDYwQykKKworI2RlZmluZSBNU1ZEWF9JTlRFUlJVUFRfU1RB VFVTX09GRlNFVAkJCSgweDA2MDgpCisjZGVmaW5lIE1TVkRYX0lOVEVSUlVQVF9TVEFUVVNfTU1V X0ZBVUxUX0lSUV9NQVNLCQkoMHgwMDAwMEYwMCkKKyNkZWZpbmUgTVNWRFhfSU5URVJSVVBUX1NU QVRVU19NTVVfRkFVTFRfSVJRX1NISUZUCQkoOCkKKyNkZWZpbmUgTVNWRFhfSU5URVJSVVBUX1NU QVRVU19NVFhfSVJRX01BU0sJCQkoMHgwMDAwNDAwMCkKKyNkZWZpbmUgTVNWRFhfSU5URVJSVVBU X1NUQVRVU19NVFhfSVJRX1NISUZUCQkJKDE0KQorCisjZGVmaW5lIE1TVkRYX0hPU1RfSU5URVJS VVBUX0VOQUJMRV9PRkZTRVQJCSgweDA2MTApCisKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFC TEVfT0ZGU0VUCQkJKDB4MDYyMCkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9N QU5fQ0xLX0VOQUJMRV9NQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19F TkFCTEVfVkRFQl9QUk9DRVNTX01BTl9DTEtfRU5BQkxFX01BU0sgCSgweDAwMDAwMDAyKQorI2Rl ZmluZSBNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WREVCX0FDQ0VTU19NQU5fQ0xLX0VOQUJMRV9NQVNL IAkoMHgwMDAwMDAwNCkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRNQ19NQU5fQ0xL X0VOQUJMRV9NQVNLIAkJKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxF X1ZFQ19FTlRERUNfTUFOX0NMS19FTkFCTEVfTUFTSyAJKDB4MDAwMDAwMTApCisjZGVmaW5lIE1T VkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19JVFJBTlNfTUFOX0NMS19FTkFCTEVfTUFTSyAJKDB4MDAw MDAwMjApCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxFX01UWF9NQU5fQ0xLX0VOQUJMRV9N QVNLCQkoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9QUk9D RVNTX0FVVE9fQ0xLX0VOQUJMRV9NQVNLICgweDAwMDIwMDAwKQorI2RlZmluZSBNU1ZEWF9NQU5f Q0xLX0VOQUJMRV9WREVCX0FDQ0VTU19BVVRPX0NMS19FTkFCTEVfTUFTSwkoMHgwMDA0MDAwMCkK KyNkZWZpbmUgTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRNQ19BVVRPX0NMS19FTkFCTEVfTUFTSyAJ KDB4MDAwODAwMDApCisjZGVmaW5lIE1TVkRYX01BTl9DTEtfRU5BQkxFX1ZFQ19FTlRERUNfQVVU T19DTEtfRU5BQkxFX01BU0sgCSgweDAwMTAwMDAwKQorI2RlZmluZSBNU1ZEWF9NQU5fQ0xLX0VO QUJMRV9WRUNfSVRSQU5TX0FVVE9fQ0xLX0VOQUJMRV9NQVNLIAkoMHgwMDIwMDAwMCkKKworI2Rl ZmluZSBjbGtfZW5hYmxlX2FsbAlcCisJKE1TVkRYX01BTl9DTEtfRU5BQkxFX0NPUkVfTUFOX0NM S19FTkFCTEVfTUFTSwkJCXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZERUJfUFJPQ0VTU19N QU5fQ0xLX0VOQUJMRV9NQVNLIAkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9BQ0NF U1NfTUFOX0NMS19FTkFCTEVfTUFTSyAJCXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZETUNf TUFOX0NMS19FTkFCTEVfTUFTSwkgCQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNfRU5U REVDX01BTl9DTEtfRU5BQkxFX01BU0sgCQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRUNf SVRSQU5TX01BTl9DTEtfRU5BQkxFX01BU0sgCQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9N VFhfTUFOX0NMS19FTkFCTEVfTUFTSykKKworI2RlZmluZSBjbGtfZW5hYmxlX21pbmltYWwgXAor CShNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9DT1JFX01BTl9DTEtfRU5BQkxFX01BU0sgfCBcCisJTVNW RFhfTUFOX0NMS19FTkFCTEVfTVRYX01BTl9DTEtfRU5BQkxFX01BU0spCisKKyNkZWZpbmUgY2xr X2VuYWJsZV9hdXRvCVwKKwkoTVNWRFhfTUFOX0NMS19FTkFCTEVfVkRFQl9QUk9DRVNTX0FVVE9f Q0xLX0VOQUJMRV9NQVNLCXwgXAorCU1TVkRYX01BTl9DTEtfRU5BQkxFX1ZERUJfQUNDRVNTX0FV VE9fQ0xLX0VOQUJMRV9NQVNLCQl8IFwKKwlNU1ZEWF9NQU5fQ0xLX0VOQUJMRV9WRE1DX0FVVE9f Q0xLX0VOQUJMRV9NQVNLCQkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkVDX0VOVERFQ19B VVRPX0NMS19FTkFCTEVfTUFTSwkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfVkVDX0lUUkFO U19BVVRPX0NMS19FTkFCTEVfTUFTSwkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfQ09SRV9N QU5fQ0xLX0VOQUJMRV9NQVNLCQkJfCBcCisJTVNWRFhfTUFOX0NMS19FTkFCTEVfTVRYX01BTl9D TEtfRU5BQkxFX01BU0spCisKKyNkZWZpbmUgTVNWRFhfQ09SRV9JRF9PRkZTRVQJCQkJKDB4MDYz MCkKKyNkZWZpbmUgTVNWRFhfQ09SRV9SRVZfT0ZGU0VUCQkJCSgweDA2NDApCisKKyNkZWZpbmUg TVNWRFhfRE1BQ19TVFJFQU1fU1RBVFVTX09GRlNFVAkJCSgweDA2NDgpCisKKyNkZWZpbmUgTVNW RFhfTU1VX0NPTlRST0wwX09GRlNFVAkJCSgweDA2ODApCisjZGVmaW5lIE1TVkRYX01NVV9DT05U Uk9MMF9NTVVfUEFVU0VfTUFTSwkJCSgweDAwMDAwMDAyKQorI2RlZmluZSBNU1ZEWF9NTVVfQ09O VFJPTDBfTU1VX1BBVVNFX1NISUZUCQkJKDEpCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMF9N TVVfSU5WQUxEQ19NQVNLICAgICAgICAgIAkJKDB4MDAwMDAwMDgpCisjZGVmaW5lIE1TVkRYX01N VV9DT05UUk9MMF9NTVVfSU5WQUxEQ19TSElGVCAgICAgICAgIAkJKDMpCisKKyNkZWZpbmUgTVNW RFhfTU1VX0JBTktfSU5ERVhfT0ZGU0VUCQkJKDB4MDY4OCkKKworI2RlZmluZSBNU1ZEWF9NTVVf U1RBVFVTX09GRlNFVAkJCQkoMHgwNjhDKQorCisjZGVmaW5lIE1TVkRYX01NVV9DT05UUk9MMl9P RkZTRVQJCQkoMHgwNjkwKQorCisjZGVmaW5lIE1TVkRYX01NVV9ESVJfTElTVF9CQVNFX09GRlNF VAkJCSgweDA2OTQpCisKKyNkZWZpbmUgTVNWRFhfTU1VX01FTV9SRVFfT0ZGU0VUCQkJKDB4MDZE MCkKKworI2RlZmluZSBNU1ZEWF9NTVVfVElMRV9CQVNFMF9PRkZTRVQJCQkoMHgwNkQ0KQorCisj ZGVmaW5lIE1TVkRYX01NVV9USUxFX0JBU0UxX09GRlNFVAkJCSgweDA2RDgpCisKKyNkZWZpbmUg TVNWRFhfTVRYX1JBTV9CQU5LX09GRlNFVAkJCSgweDA2RjApCisjZGVmaW5lIE1TVkRYX01UWF9S QU1fQkFOS19NVFhfUkFNX0JBTktfU0laRV9NQVNLCQkoMHgwMDBGMDAwMCkKKyNkZWZpbmUgTVNW RFhfTVRYX1JBTV9CQU5LX01UWF9SQU1fQkFOS19TSVpFX1NISUZUCQkoMTYpCisKKyNkZWZpbmUg TVNWRFhfTVRYX0RFQlVHX09GRlNFVAkJCQlNU1ZEWF9NVFhfUkFNX0JBTktfT0ZGU0VUCisjZGVm aW5lIE1TVkRYX01UWF9ERUJVR19NVFhfREJHX0lTX1NMQVZFX01BU0sJCQkoMHgwMDAwMDAwNCkK KyNkZWZpbmUgTVNWRFhfTVRYX0RFQlVHX01UWF9EQkdfSVNfU0xBVkVfTFNCTUFTSwkJKDB4MDAw MDAwMDEpCisjZGVmaW5lIE1TVkRYX01UWF9ERUJVR19NVFhfREJHX0lTX1NMQVZFX1NISUZUCQkJ KDIpCisjZGVmaW5lIE1TVkRYX01UWF9ERUJVR19NVFhfREJHX0dQSU9fSU5fTUFTSwkJCSgweDAw MDAwMDAzKQorI2RlZmluZSBNU1ZEWF9NVFhfREVCVUdfTVRYX0RCR19HUElPX0lOX0xTQk1BU0sJ CSgweDAwMDAwMDAzKQorI2RlZmluZSBNU1ZEWF9NVFhfREVCVUdfTVRYX0RCR19HUElPX0lOX1NI SUZUCQkJKDApCisKKy8qd2F0Y2ggZG9nIGZvciBGRSBhbmQgQkUqLworI2RlZmluZSBGRV9NU1ZE WF9XRFRfQ09OVFJPTF9PRkZTRVQJCQkoMHgwNjY0KQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNW RFhfV0RUX0NPTlRST0wsIEZFX1dEVF9DTlRfQ1RSTCAqLworI2RlZmluZSBGRV9NU1ZEWF9XRFRf Q09OVFJPTF9GRV9XRFRfQ05UX0NUUkxfTUFTSwkJKDB4MDAwNjAwMDApCisjZGVmaW5lIEZFX01T VkRYX1dEVF9DT05UUk9MX0ZFX1dEVF9DTlRfQ1RSTF9MU0JNQVNLCQkoMHgwMDAwMDAwMykKKyNk ZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NOVF9DVFJMX1NISUZUCQkoMTcpCisv KiBNU1ZEWF9DT1JFLCBDUl9GRV9NU1ZEWF9XRFRfQ09OVFJPTCwgRkVfV0RUX0VOQUJMRSAqLwor I2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfRU5BQkxFX01BU0sJCSgweDAwMDEw MDAwKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfRU5BQkxFX0xTQk1BU0sJ CSgweDAwMDAwMDAxKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9GRV9XRFRfRU5BQkxF X1NISUZUCQkoMTYpCisvKiBNU1ZEWF9DT1JFLCBDUl9GRV9NU1ZEWF9XRFRfQ09OVFJPTCwgRkVf V0RUX0FDVElPTjEgKi8KKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0FDVElP TjFfTUFTSwkJKDB4MDAwMDMwMDApCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT05UUk9MX0ZFX1dE VF9BQ1RJT04xX0xTQk1BU0sJCSgweDAwMDAwMDAzKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09O VFJPTF9GRV9XRFRfQUNUSU9OMV9TSElGVAkJKDEyKQorLyogTVNWRFhfQ09SRSwgQ1JfRkVfTVNW RFhfV0RUX0NPTlRST0wsIEZFX1dEVF9BQ1RJT04wICovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9D T05UUk9MX0ZFX1dEVF9BQ1RJT04wX01BU0sJCSgweDAwMDAwMTAwKQorI2RlZmluZSBGRV9NU1ZE WF9XRFRfQ09OVFJPTF9GRV9XRFRfQUNUSU9OMF9MU0JNQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZp bmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0FDVElPTjBfU0hJRlQJCSg4KQorLyogTVNW RFhfQ09SRSwgQ1JfRkVfTVNWRFhfV0RUX0NPTlRST0wsIEZFX1dEVF9DTEVBUl9TRUxFQ1QgKi8K KyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NMRUFSX1NFTEVDVF9NQVNLCQko MHgwMDAwMDAzMCkKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NMRUFSX1NF TEVDVF9MU0JNQVNLCSgweDAwMDAwMDAzKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09OVFJPTF9G RV9XRFRfQ0xFQVJfU0VMRUNUX1NISUZUCQkoNCkKKy8qIE1TVkRYX0NPUkUsIENSX0ZFX01TVkRY X1dEVF9DT05UUk9MLCBGRV9XRFRfQ0xLRElWX1NFTEVDVCAqLworI2RlZmluZSBGRV9NU1ZEWF9X RFRfQ09OVFJPTF9GRV9XRFRfQ0xLRElWX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDAwNykKKyNkZWZp bmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NMS0RJVl9TRUxFQ1RfTFNCTUFTSwkoMHgw MDAwMDAwNykKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTlRST0xfRkVfV0RUX0NMS0RJVl9TRUxF Q1RfU0hJRlQJKDApCisKKyNkZWZpbmUgRkVfTVNWRFhfV0RUSU1FUl9PRkZTRVQJCQkJKDB4MDY2 OCkKKy8qIE1TVkRYX0NPUkUsIENSX0ZFX01TVkRYX1dEVElNRVIsIEZFX1dEVF9DT1VOVEVSICov CisjZGVmaW5lIEZFX01TVkRYX1dEVElNRVJfRkVfV0RUX0NPVU5URVJfTUFTSwkJCSgweDAwMDBG RkZGKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRJTUVSX0ZFX1dEVF9DT1VOVEVSX0xTQk1BU0sJCSgw eDAwMDBGRkZGKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRJTUVSX0ZFX1dEVF9DT1VOVEVSX1NISUZU CQkJKDApCisKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQJCSgweDA2 NmMpCisvKiBNU1ZEWF9DT1JFLCBDUl9GRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENILCBGRV9XRFRf Q00xICovCisjZGVmaW5lIEZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfRkVfV0RUX0NNMV9NQVNL CQkoMHhGRkZGMDAwMCkKKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9GRV9XRFRf Q00xX0xTQk1BU0sJCSgweDAwMDBGRkZGKQorI2RlZmluZSBGRV9NU1ZEWF9XRFRfQ09NUEFSRU1B VENIX0ZFX1dEVF9DTTFfU0hJRlQJCSgxNikKKy8qIE1TVkRYX0NPUkUsIENSX0ZFX01TVkRYX1dE VF9DT01QQVJFTUFUQ0gsIEZFX1dEVF9DTTAgKi8KKyNkZWZpbmUgRkVfTVNWRFhfV0RUX0NPTVBB UkVNQVRDSF9GRV9XRFRfQ00wX01BU0sJCSgweDAwMDBGRkZGKQorI2RlZmluZSBGRV9NU1ZEWF9X RFRfQ09NUEFSRU1BVENIX0ZFX1dEVF9DTTBfTFNCTUFTSwkJKDB4MDAwMEZGRkYpCisjZGVmaW5l IEZFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfRkVfV0RUX0NNMF9TSElGVAkJKDApCisKKyNkZWZp bmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfT0ZGU0VUCQkJKDB4MDY3MCkKKy8qIE1TVkRYX0NPUkUs IENSX0JFX01TVkRYX1dEVF9DT05UUk9MLCBCRV9XRFRfQ05UX0NUUkwgKi8KKyNkZWZpbmUgQkVf TVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0NOVF9DVFJMX01BU0sJCSgweDAwMUUwMDAwKQorI2Rl ZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfQ05UX0NUUkxfTFNCTUFTSwkJKDB4MDAw MDAwMEYpCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT05UUk9MX0JFX1dEVF9DTlRfQ1RSTF9TSElG VAkJKDE3KQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhfV0RUX0NPTlRST0wsIEJFX1dEVF9F TkFCTEUgKi8KKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0VOQUJMRV9NQVNL CQkoMHgwMDAxMDAwMCkKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0VOQUJM RV9MU0JNQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVf V0RUX0VOQUJMRV9TSElGVAkJKDE2KQorLyogTVNWRFhfQ09SRSwgQ1JfQkVfTVNWRFhfV0RUX0NP TlRST0wsIEJFX1dEVF9BQ1RJT04wICovCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT05UUk9MX0JF X1dEVF9BQ1RJT04wX01BU0sJCSgweDAwMDAwMTAwKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09O VFJPTF9CRV9XRFRfQUNUSU9OMF9MU0JNQVNLCQkoMHgwMDAwMDAwMSkKKyNkZWZpbmUgQkVfTVNW RFhfV0RUX0NPTlRST0xfQkVfV0RUX0FDVElPTjBfU0hJRlQJCSg4KQorLyogTVNWRFhfQ09SRSwg Q1JfQkVfTVNWRFhfV0RUX0NPTlRST0wsIEJFX1dEVF9DTEVBUl9TRUxFQ1QgKi8KKyNkZWZpbmUg QkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0NMRUFSX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDBG MCkKKyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0NMRUFSX1NFTEVDVF9MU0JN QVNLCSgweDAwMDAwMDBGKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJPTF9CRV9XRFRfQ0xF QVJfU0VMRUNUX1NISUZUCQkoNCkKKy8qIE1TVkRYX0NPUkUsIENSX0JFX01TVkRYX1dEVF9DT05U Uk9MLCBCRV9XRFRfQ0xLRElWX1NFTEVDVCAqLworI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09OVFJP TF9CRV9XRFRfQ0xLRElWX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDAwNykKKyNkZWZpbmUgQkVfTVNW RFhfV0RUX0NPTlRST0xfQkVfV0RUX0NMS0RJVl9TRUxFQ1RfTFNCTUFTSwkoMHgwMDAwMDAwNykK KyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTlRST0xfQkVfV0RUX0NMS0RJVl9TRUxFQ1RfU0hJRlQJ KDApCisKKyNkZWZpbmUgQkVfTVNWRFhfV0RUSU1FUl9PRkZTRVQJCQkJKDB4MDY3NCkKKy8qIE1T VkRYX0NPUkUsIENSX0JFX01TVkRYX1dEVElNRVIsIEJFX1dEVF9DT1VOVEVSICovCisjZGVmaW5l IEJFX01TVkRYX1dEVElNRVJfQkVfV0RUX0NPVU5URVJfTUFTSwkJCSgweDAwMDBGRkZGKQorI2Rl ZmluZSBCRV9NU1ZEWF9XRFRJTUVSX0JFX1dEVF9DT1VOVEVSX0xTQk1BU0sJCSgweDAwMDBGRkZG KQorI2RlZmluZSBCRV9NU1ZEWF9XRFRJTUVSX0JFX1dEVF9DT1VOVEVSX1NISUZUCQkJKDApCisK KyNkZWZpbmUgQkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9PRkZTRVQJCSgweDY3OCkKKy8qIE1T VkRYX0NPUkUsIENSX0JFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0gsIEJFX1dEVF9DTTAgKi8KKyNk ZWZpbmUgQkVfTVNWRFhfV0RUX0NPTVBBUkVNQVRDSF9CRV9XRFRfQ00wX01BU0sJCSgweDAwMDBG RkZGKQorI2RlZmluZSBCRV9NU1ZEWF9XRFRfQ09NUEFSRU1BVENIX0JFX1dEVF9DTTBfTFNCTUFT SwkJKDB4MDAwMEZGRkYpCisjZGVmaW5lIEJFX01TVkRYX1dEVF9DT01QQVJFTUFUQ0hfQkVfV0RU X0NNMF9TSElGVAkJKDApCisKKy8qd2F0Y2ggZG9nIGVuZCovCisvKioqKioqKioqKioqKioqKioq KioqKioqKiogTVNWRFggQ29yZSBSZWdpc3RlcnMgZW5kICoqKioqKioqKioqKioqKioqKioqKioq KiovCisKKy8qKioqKioqKioqKioqKioqKioqIFZFQyBSZWdpc3RlcnM6IDB4MDgwMCAtIDB4MEZG RiAoMjA0OEIpICoqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgVkVDX1NISUZUUkVHX0NPTlRS T0xfT0ZGU0VUCQkJKDB4MDgxOCkKKyNkZWZpbmUgVkVDX1NISUZUUkVHX0NPTlRST0xfU1JfTUFT VEVSX1NFTEVDVF9NQVNLCQkoMHgwMDAwMDMwMCkKKyNkZWZpbmUgVkVDX1NISUZUUkVHX0NPTlRS T0xfU1JfTUFTVEVSX1NFTEVDVF9TSElGVAkJKDgpCisvKioqKioqKioqKioqKioqKioqKioqKioq KiogVkVDIFJlZ2lzdGVycyBlbmQgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKiBSRU5ERUMgUmVnaXN0ZXJzICoqKioqKioqKioqKioqKioq KioqKioqKioqLworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDBfT0ZGU0VUCQkJKDB4MDg2 OCkKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wwX1JFTkRFQ19JTklUSUFMSVNFX01BU0sJ CSgweDAwMDAwMDAxKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDBfUkVOREVDX0lOSVRJ QUxJU0VfU0hJRlQJCSgwKQorCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9MMV9PRkZTRVQJ CQkoMHgwODZDKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0RFQ09ERV9T VEFSVF9TSVpFX01BU0sJKDB4MDAwMDAwRkYpCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19DT05UUk9M MV9SRU5ERUNfREVDT0RFX1NUQVJUX1NJWkVfU0hJRlQJKDApCisjZGVmaW5lIE1TVkRYX1JFTkRF Q19DT05UUk9MMV9SRU5ERUNfQlVSU1RfU0laRV9XX01BU0sJCSgweDAwMEMwMDAwKQorI2RlZmlu ZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0JVUlNUX1NJWkVfV19TSElGVAkJKDE4KQor I2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0JVUlNUX1NJWkVfUl9NQVNLCQko MHgwMDAzMDAwMCkKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19CVVJTVF9T SVpFX1JfU0hJRlQJCSgxNikKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NPTlRST0wxX1JFTkRFQ19F WFRFUk5BTF9NRU1PUllfTUFTSwkoMHgwMTAwMDAwMCkKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0NP TlRST0wxX1JFTkRFQ19FWFRFUk5BTF9NRU1PUllfU0hJRlQJKDI0KQorI2RlZmluZSBNU1ZEWF9S RU5ERUNfQ09OVFJPTDFfUkVOREVDX0RFQ19ESVNBQkxFX01BU0sJCSgweDA4MDAwMDAwKQorI2Rl ZmluZSBNU1ZEWF9SRU5ERUNfQ09OVFJPTDFfUkVOREVDX0RFQ19ESVNBQkxFX1NISUZUCQkoMjcp CisKKyNkZWZpbmUgTVNWRFhfUkVOREVDX0JVRkZFUl9TSVpFX09GRlNFVAkJCSgweDA4NzApCisj ZGVmaW5lIE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9SRU5ERUNfQlVGRkVSX1NJWkUwX01BU0sJ KDB4MDAwMEZGRkYpCisjZGVmaW5lIE1TVkRYX1JFTkRFQ19CVUZGRVJfU0laRV9SRU5ERUNfQlVG RkVSX1NJWkUwX1NISUZUCSgwKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNfQlVGRkVSX1NJWkVfUkVO REVDX0JVRkZFUl9TSVpFMV9NQVNLCSgweEZGRkYwMDAwKQorI2RlZmluZSBNU1ZEWF9SRU5ERUNf QlVGRkVSX1NJWkVfUkVOREVDX0JVRkZFUl9TSVpFMV9TSElGVAkoMTYpCisKKyNkZWZpbmUgTVNW RFhfUkVOREVDX0JBU0VfQUREUjBfT0ZGU0VUCQkJKDB4MDg3NCkKKworI2RlZmluZSBNU1ZEWF9S RU5ERUNfQkFTRV9BRERSMV9PRkZTRVQJCQkoMHgwODc4KQorCisjZGVmaW5lIE1TVkRYX1JFTkRF Q19SRUFEX0RBVEFfT0ZGU0VUCQkJKDB4MDg5OCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09O VEVYVDBfT0ZGU0VUCQkJKDB4MDk1MCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDFf T0ZGU0VUCQkJKDB4MDk1NCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDJfT0ZGU0VU CQkJKDB4MDk1OCkKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDNfT0ZGU0VUCQkJKDB4 MDk1QykKKworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDRfT0ZGU0VUCQkJKDB4MDk2MCkK KworI2RlZmluZSBNU1ZEWF9SRU5ERUNfQ09OVEVYVDVfT0ZGU0VUCQkJKDB4MDk2NCkKKy8qKioq KioqKioqKioqKioqKioqKioqKioqKiogUkVOREVDIHJlZ2lzdGVycyBlbmQgKioqKioqKioqKioq KioqKioqKioqKioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqIENNRCBSZWdpc3Rlcjog MHgxMDAwIC0gMHgxRkZGICg0a0IpICoqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNU1ZE WF9DTURTX0VORF9TTElDRV9QSUNUVVJFX09GRlNFVAkJKDB4MTQwNCkKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogQ01EIFJlZ2lzdGVyIGVuZCAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworLyoqKioqKioqKioqKioqKioqKioqIFZFQyBMb2NhbCBSQU06IDB4MjAwMCAt IDB4MkZGRiAoNGtCKSAqKioqKioqKioqKioqKioqKioqLworLyogdmVjIGxvY2FsIE1FTSBzYXZl L3Jlc3RvcmUgKi8KKyNkZWZpbmUgVkVDX0xPQ0FMX01FTV9CWVRFX1NJWkUgKDQgKiAxMDI0KQor I2RlZmluZSBWRUNfTE9DQUxfTUVNX09GRlNFVCAweDIwMDAKKworI2RlZmluZSBNU1ZEWF9FWFRf RldfRVJST1JfU1RBVEUgCQkoMHgyQ0M0KQorLyogRGVjb2RlIG9wZXJhdGlvbnMgaW4gcHJvZ3Jl c3Mgb3Igbm90IGNvbXBsZXRlICovCisjZGVmaW5lIE1TVkRYX0ZXX1NUQVRVU19JTl9QUk9HUkVT UwkJCTB4MDAwMDAwMDAKKy8qIHRoZXJlJ3Mgbm8gd29yayB1bmRlcndheSBvbiB0aGUgaGFyZHdh cmUsIGlkbGUsIGNhbiBiZSBwb3dlcmVkIGRvd24gKi8KKyNkZWZpbmUgTVNWRFhfRldfU1RBVFVT X0hXX0lETEUJCQkJMHgwMDAwMDAwMQorLyogUGFuaWMsIHdhaXRpbmcgdG8gYmUgcmVsb2FkZWQg Ki8KKyNkZWZpbmUgTVNWRFhfRldfU1RBVFVTX0hXX1BBTklDCQkJMHgwMDAwMDAwMworCisvKgor ICogVGhpcyBkZWZpbmVzIHRoZSBNU1ZEWCBjb21tdW5pY2F0aW9uIGJ1ZmZlcgorICovCisjZGVm aW5lIE1TVkRYX0NPTU1TX1NJR05BVFVSRV9WQUxVRQkoMHhBNUE1QTVBNSkJLyohPCBTaWduYXR1 cmUgdmFsdWUgKi8KKy8qITwgSG9zdCBidWZmZXIgc2l6ZSAoaW4gMzItYml0IHdvcmRzKSAqLwor I2RlZmluZSBOVU1fV09SRFNfSE9TVF9CVUYJCSgxMDApCisvKiE8IE1UWCBidWZmZXIgc2l6ZSAo aW4gMzItYml0IHdvcmRzKSAqLworI2RlZmluZSBOVU1fV09SRFNfTVRYX0JVRgkJKDEwMCkKKwor I2RlZmluZSBNU1ZEWF9DT01NU19BUkVBX0FERFIJCQkoMHgwMmZlMCkKKyNkZWZpbmUgTVNWRFhf Q09NTVNfQ09SRV9XVEQJCQkoTVNWRFhfQ09NTVNfQVJFQV9BRERSIC0gMHgwOCkKKyNkZWZpbmUg TVNWRFhfQ09NTVNfRVJST1JfVFJJRwkJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgLSAweDA4KQor I2RlZmluZSBNU1ZEWF9DT01NU19GSVJNV0FSRV9JRAkJCShNU1ZEWF9DT01NU19BUkVBX0FERFIg LSAweDBDKQorI2RlZmluZSBNU1ZEWF9DT01NU19PRkZTRVRfRkxBR1MJCShNU1ZEWF9DT01NU19B UkVBX0FERFIgKyAweDE4KQorI2RlZmluZQlNU1ZEWF9DT01NU19NU0dfQ09VTlRFUgkJCShNU1ZE WF9DT01NU19BUkVBX0FERFIgLSAweDA0KQorI2RlZmluZSBNU1ZEWF9DT01NU19GV19TVEFUVVMJ CQkoTVNWRFhfQ09NTVNfQVJFQV9BRERSIC0gMHgxMCkKKyNkZWZpbmUJTVNWRFhfQ09NTVNfU0lH TkFUVVJFCQkJKE1TVkRYX0NPTU1TX0FSRUFfQUREUiArIDB4MDApCisjZGVmaW5lCU1TVkRYX0NP TU1TX1RPX0hPU1RfQlVGX1NJWkUJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDA0KQorI2Rl ZmluZSBNU1ZEWF9DT01NU19UT19IT1NUX1JEX0lOREVYCQkoTVNWRFhfQ09NTVNfQVJFQV9BRERS ICsgMHgwOCkKKyNkZWZpbmUgTVNWRFhfQ09NTVNfVE9fSE9TVF9XUlRfSU5ERVgJCShNU1ZEWF9D T01NU19BUkVBX0FERFIgKyAweDBDKQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19NVFhfQlVGX1NJ WkUJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDEwKQorI2RlZmluZSBNU1ZEWF9DT01NU19U T19NVFhfUkRfSU5ERVgJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAweDE0KQorI2RlZmluZSBN U1ZEWF9DT01NU19UT19NVFhfQ0JfUkRfSU5ERVgJCShNU1ZEWF9DT01NU19BUkVBX0FERFIgKyAw eDE4KQorI2RlZmluZSBNU1ZEWF9DT01NU19UT19NVFhfV1JUX0lOREVYCQkoTVNWRFhfQ09NTVNf QVJFQV9BRERSICsgMHgxQykKKyNkZWZpbmUgTVNWRFhfQ09NTVNfVE9fSE9TVF9CVUYJCQkoTVNW RFhfQ09NTVNfQVJFQV9BRERSICsgMHgyMCkKKyNkZWZpbmUgTVNWRFhfQ09NTVNfVE9fTVRYX0JV RglcCisJCQkoTVNWRFhfQ09NTVNfVE9fSE9TVF9CVUYgKyAoTlVNX1dPUkRTX0hPU1RfQlVGIDw8 IDIpKQorCisvKgorICogRlcgRkxBR3M6IGl0IHNoYWxsIGJlIHdyaXR0ZW4gYnkgdGhlIGhvc3Qg cHJpb3IgdG8gc3RhcnRpbmcgdGhlIEZpcm13YXJlLgorICovCisvKiBEaXNhYmxlIEZpcm13YXJl IGJhc2VkIFdhdGNoIGRvZyB0aW1lcnMuICovCisjZGVmaW5lIERTSUFCTEVfRldfV0RUCQkJCTB4 MDAwOAorCS8qIEFib3J0IEltbWVkaWF0ZWx5IG9uIGVycm9ycyAqLworI2RlZmluZSBBQk9SVF9P Tl9FUlJPUlNfSU1NRURJQVRFCQkweDAwMTAKKwkvKiBBYm9ydHMgZmF1bHRlZCBzbGljZXMgYXMg c29vbiBhcyBwb3NzaWJsZS4gQWxsb3dzIG5vbiBmYXVsdGVkIHNsaWNlcworCSAqIHRvIHJlYWNo IGJhY2tlbmQgYnV0IGZhdWx0ZWQgc2xpY2Ugd2lsbCBub3QgYmUgYWxsb3dlZCB0byBzdGFydC4g Ki8KKyNkZWZpbmUgQUJPUlRfRkFVTFRFRF9TTElDRV9JTU1FRElBVEUJCTB4MDAyMAorCS8qIEZs dXNoIGZhdWx0ZWQgc2xpY2VzIC0gRGVidWcgb3B0aW9uICovCisjZGVmaW5lIEZMVVNIX0ZBVUxU RURfU0xJQ0VTCQkJMHgwMDgwCisJLyogRG9uJ3QgaW50ZXJydXB0IGhvc3Qgd2hlbiB0byBob3N0 IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuCisJICogU3RhbGwgdW50aWwgc3BhY2UgaXMgZnJlZWQgdXAg YnkgaG9zdCBvbiBpdCdzIG93bi4gKi8KKyNkZWZpbmUgTk9UX0lOVEVSUlVQVF9XSEVOX0hPU1Rf SVNfRlVMTAkJMHgwMjAwCisJLyogQ29udGlndWl0eSB3YXJuaW5nIG1zZyB3aWxsIGJlIHNlbmQg dG8gaG9zdCBmb3Igc3RyZWFtIHdpdGgKKyAgICAgICAgICogRldfRVJST1JfREVURUNUSU9OX0FO RF9SRUNPVkVSWSBmbGFnIHNldCBpZiBub24tY29udGlndW91cworCSAqIG1hY3JvYmxvY2tzIGFy ZSBkZXRlY3RlZC4gKi8KKyNkZWZpbmUgTk9UX0VOQUJMRV9PTl9IT1NUX0NPTkNFQUxNRU5UCQkw eDA0MDAKKwkvKiBSZXR1cm4gVkRFQiBTaWduYXR1cmUgVmFsdWUgaW4gQ29tcGxldGlvbiBtZXNz YWdlLgorCSAqIFRoaXMgcmVxdWlyZXMgYSBWREVCIGRhdGEgZmx1c2ggZXZlcnkgc2xpY2UgZm9y IGNvbnN0YW50IHJlc3VsdHMuKi8KKyNkZWZpbmUgUkVUVVJOX1ZERUJfREFUQV9JTl9DT01QTEVU SU9OCQkweDA4MDAKKwkvKiBEaXNhYmxlIEF1dG8gQ2xvY2sgR2F0aW5nLiAqLworI2RlZmluZSBE U0lBQkxFX0F1dG9fQ0xPQ0tfR0FUSU5HCQkweDEwMDAKKwkvKiBEaXNhYmxlIElkbGUgR1BJTyBz aWduYWwuICovCisjZGVmaW5lIERTSUFCTEVfSURMRV9HUElPX1NJRwkJCTB4MjAwMAorCS8qIEVu YWJsZSBTZXR1cCwgRkUgYW5kIEJFIFRpbWUgc3RhbXBzIGluIGNvbXBsZXRpb24gbWVzc2FnZS4K KwkgKiBVc2VkIGJ5IElNRyBvbmx5IGZvciBmaXJtd2FyZSBwcm9maWxpbmcuICovCisjZGVmaW5l IEVOQUJMRV9USU1FU1RBTVBTX0lOX0NPTVBMRVRFX01TRwkweDQwMDAKKwkvKiBEaXNhYmxlIG9m Zi1ob3N0IDJuZCBwYXNzIERlYmxvY2tpbmcgaW4gRmlybXdhcmUuICAqLworI2RlZmluZSBEU0lB QkxFX09GRkhPU1RfU0VDT05EX0RFQkxPQ0sJCTB4MjAwMDAKKwkvKiBTdW0gYWRkcmVzcyBzaWdu YXR1cmUgdG8gZGF0YSBzaWduYXR1cmUKKwkgKiB3aGVuIHJldHVybmluZyBWREVCIHNpZ25hdHVy ZSB2YWx1ZXMuICovCisjZGVmaW5lIFNVTV9BRERfU0lHX1RPX0RBVEFfU0lHTkFUVVJFCQkweDgw MDAwCisKKy8qCisjZGVmaW5lIE1TVkRYX0NPTU1TX0FSRUFfRU5ECVwKKyAgKE1TVkRYX0NPTU1T X1RPX01UWF9CVUYgKyAoTlVNX1dPUkRTX0hPU1RfQlVGIDw8IDIpKQorKi8KKyNkZWZpbmUgTVNW RFhfQ09NTVNfQVJFQV9FTkQgMHgwMzAwMAorCisjaWYgKE1TVkRYX0NPTU1TX0FSRUFfRU5EICE9 IDB4MDMwMDApCisjZXJyb3IKKyNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq IFZFQyBMb2NhbCBSQU0gZW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZW5k aWYKLS0gCjEuOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=