From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH 2/2] drm/lima: driver for ARM Mali4xx GPUs Date: Wed, 6 Feb 2019 21:14:57 +0800 Message-ID: <20190206131457.1072-3-yuq825@gmail.com> References: <20190206131457.1072-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190206131457.1072-1-yuq825@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, lima@lists.freedesktop.org Cc: Marek Vasut , Simon Shields , Andreas Baierl , Maxime Ripard , Neil Armstrong , Vasily Khoruzhick , David Airlie , Qiang Yu , Sean Paul , Erico Nunes List-Id: dri-devel@lists.freedesktop.org RnJvbTogTGltYSBQcm9qZWN0IERldmVsb3BlcnMgPGxpbWFAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn PgoKU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBCYWllcmwgPGljaGdlaEBpbWtyZWlzcnVtLmRlPgpT aWduZWQtb2ZmLWJ5OiBFcmljbyBOdW5lcyA8bnVuZXMuZXJpY29AZ21haWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPgpTaWduZWQtb2ZmLWJ5OiBN YXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KU2lnbmVkLW9mZi1ieTogTmVpbCBBcm1zdHJvbmcg PG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBRaWFuZyBZdSA8eXVxODI1 QGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogU2ltb24gU2hpZWxkcyA8c2ltb25AbGluZWFnZW9z Lm9yZz4KU2lnbmVkLW9mZi1ieTogVmFzaWx5IEtob3J1emhpY2sgPGFuYXJzb3VsQGdtYWlsLmNv bT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAyICsKIGRy aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2xpbWEvS2NvbmZpZyAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9N YWtlZmlsZSAgICAgICAgIHwgIDIyICsrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0 LmMgICAgIHwgIDQ2ICsrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5oICAgICB8 ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5jICAgICAgIHwgMTI0ICsrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmggICAgICAgfCAgMzMgKysKIGRyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmMgICAgfCAzODQgKysrKysrKysrKysrKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmggICAgfCAxMTYgKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuYyAgICAgIHwgIDU2ICsrKwogZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9kbGJ1LmggICAgICB8ICAxOCArCiBkcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2Rydi5jICAgICAgIHwgNDU5ICsrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuaCAgICAgICB8ICA1OSArKysrCiBkcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2dlbS5jICAgICAgIHwgNDg1ICsrKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmggICAgICAgfCAgMjUgKysKIGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmMgfCAxNDQgKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmggfCAgMTggKwogZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9ncC5jICAgICAgICB8IDI4MCArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ3AuaCAgICAgICAgfCAgMTYgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9s Ml9jYWNoZS5jICB8ICA3OSArKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9sMl9jYWNo ZS5oICB8ICAxNCArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5jICAgICAgIHwgMTM1 ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmggICAgICAgfCAgMTYgKwog ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuYyAgICB8IDEwMyArKysrKysKIGRyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmggICAgfCAgNzIgKysrKwogZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9wbXUuYyAgICAgICB8ICA2MSArKysrCiBkcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX3BtdS5oICAgICAgIHwgIDEyICsKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAu YyAgICAgICAgfCA0MTkgKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9wcC5oICAgICAgICB8ICAxOSArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3Jl Z3MuaCAgICAgIHwgMjk4ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfc2NoZWQuYyAgICAgfCA0ODYgKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaCAgICAgfCAxMDggKysrKysrCiBkcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX3R0bS5jICAgICAgIHwgMzE5ICsrKysrKysrKysrKysrKysrCiBkcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3R0bS5oICAgICAgIHwgIDI0ICsrCiBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX3ZtLmMgICAgICAgIHwgMzU0ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfdm0uaCAgICAgICAgfCAgNTkgKysrKwogaW5jbHVkZS91YXBpL2Ry bS9saW1hX2RybS5oICAgICAgICAgICB8IDE5MyArKysrKysrKysrCiAzOCBmaWxlcyBjaGFuZ2Vk LCA1MDgzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v bGltYS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvTWFr ZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0 LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9jdHguaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX2dlbV9wcmltZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9nZW1fcHJpbWUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfZ3AuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf Z3AuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2Fj aGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2Fj aGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfcmVncy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9zY2hlZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9zY2hlZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV90dG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf dHRtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VhcGkvZHJtL2xpbWFfZHJtLmgKCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IDQz ODVmMDBlMWQwNS4uZGZlZmNiMzkzODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2Nv bmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwpAQCAtMzMzLDYgKzMzMyw4IEBAIHNv dXJjZSAiZHJpdmVycy9ncHUvZHJtL3R2ZTIwMC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS94ZW4vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vbGltYS9LY29u ZmlnIgorCiAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAogCiBtZW51Y29uZmlnIERSTV9MRUdB Q1kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2Ry bS9NYWtlZmlsZQppbmRleCBjZThkMWQzODQzMTkuLjhkMDI0YjcyOTkwMiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpA QCAtMTA5LDMgKzEwOSw0IEBAIG9iai0kKENPTkZJR19EUk1fVElOWURSTSkgKz0gdGlueWRybS8K IG9iai0kKENPTkZJR19EUk1fUEwxMTEpICs9IHBsMTExLwogb2JqLSQoQ09ORklHX0RSTV9UVkUy MDApICs9IHR2ZTIwMC8KIG9iai0kKENPTkZJR19EUk1fWEVOKSArPSB4ZW4vCitvYmotJChDT05G SUdfRFJNX0xJTUEpICArPSBsaW1hLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv S2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44OWQ2M2NjYThhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vbGltYS9LY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKKyMgU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisjIENvcHlyaWdodCAyMDE3LTIwMTggUWlh bmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+CisKK2NvbmZpZyBEUk1fTElNQQorICAgICAgIHRyaXN0 YXRlICJMSU1BIChEUk0gc3VwcG9ydCBmb3IgQVJNIE1hbGkgNDAwLzQ1MCBHUFUpIgorICAgICAg IGRlcGVuZHMgb24gRFJNCisgICAgICAgc2VsZWN0IERSTV9TQ0hFRAorICAgICAgIHNlbGVjdCBE Uk1fVFRNCisgICAgICAgaGVscAorICAgICAgICAgRFJNIGRyaXZlciBmb3IgQVJNIE1hbGkgNDAw LzQ1MCBHUFVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vbGltYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjhiYjk3NDEwZDk2MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL01ha2VmaWxlCkBAIC0wLDAgKzEsMjIgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisjIENvcHlyaWdodCAyMDE3LTIwMTggUWlhbmcgWXUgPHl1 cTgyNUBnbWFpbC5jb20+CisKK2xpbWEteSA6PSBcCisJbGltYV9kcnYubyBcCisJbGltYV9kZXZp Y2UubyBcCisJbGltYV9wbXUubyBcCisJbGltYV9sMl9jYWNoZS5vIFwKKwlsaW1hX21tdS5vIFwK KwlsaW1hX2dwLm8gXAorCWxpbWFfcHAubyBcCisJbGltYV9nZW0ubyBcCisJbGltYV92bS5vIFwK KwlsaW1hX3NjaGVkLm8gXAorCWxpbWFfY3R4Lm8gXAorCWxpbWFfZ2VtX3ByaW1lLm8gXAorCWxp bWFfZGxidS5vIFwKKwlsaW1hX2JjYXN0Lm8gXAorCWxpbWFfdHRtLm8gXAorCWxpbWFfb2JqZWN0 Lm8KKworb2JqLSQoQ09ORklHX0RSTV9MSU1BKSArPSBsaW1hLm8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf YmNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYzNzU0ZjY0 NjVlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3Qu YwpAQCAtMCwwICsxLDQ2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBP UiBNSVQKKy8qIENvcHlyaWdodCAyMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLwor CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2lu Y2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9iY2FzdC5oIgorI2luY2x1ZGUg ImxpbWFfcmVncy5oIgorCisjZGVmaW5lIGJjYXN0X3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRh dGEsIGlwLT5pb21lbSArIExJTUFfQkNBU1RfIyNyZWcpCisjZGVmaW5lIGJjYXN0X3JlYWQocmVn KSByZWFkbChpcC0+aW9tZW0gKyBMSU1BX0JDQVNUXyMjcmVnKQorCit2b2lkIGxpbWFfYmNhc3Rf ZW5hYmxlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2LCBpbnQgbnVtX3BwKQoreworCXN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJc3RydWN0 IGxpbWFfaXAgKmlwID0gZGV2LT5pcCArIGxpbWFfaXBfYmNhc3Q7CisJaW50IGksIG1hc2sgPSBi Y2FzdF9yZWFkKEJST0FEQ0FTVF9NQVNLKSAmIDB4ZmZmZjAwMDA7CisKKwlmb3IgKGkgPSAwOyBp IDwgbnVtX3BwOyBpKyspIHsKKwkJc3RydWN0IGxpbWFfaXAgKnBwID0gcGlwZS0+cHJvY2Vzc29y W2ldOworCQltYXNrIHw9IDEgPDwgKHBwLT5pZCAtIGxpbWFfaXBfcHAwKTsKKwl9CisKKwliY2Fz dF93cml0ZShCUk9BRENBU1RfTUFTSywgbWFzayk7Cit9CisKK2ludCBsaW1hX2JjYXN0X2luaXQo c3RydWN0IGxpbWFfaXAgKmlwKQoreworCWludCBpLCBtYXNrID0gMDsKKworCWZvciAoaSA9IGxp bWFfaXBfcHAwOyBpIDw9IGxpbWFfaXBfcHA3OyBpKyspIHsKKwkJaWYgKGlwLT5kZXYtPmlwW2ld LnByZXNlbnQpCisJCQltYXNrIHw9IDEgPDwgKGkgLSBsaW1hX2lwX3BwMCk7CisJfQorCisJYmNh c3Rfd3JpdGUoQlJPQURDQVNUX01BU0ssIG1hc2sgPDwgMTYpOworCWJjYXN0X3dyaXRlKElOVEVS UlVQVF9NQVNLLCBtYXNrKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX2JjYXN0X2Zpbmko c3RydWN0IGxpbWFfaXAgKmlwKQoreworCQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2JjYXN0LmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNDVlM2U4MDk4NjAKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmgKQEAgLTAs MCArMSwxNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICov CisvKiBDb3B5cmlnaHQgMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lm bmRlZiBfX0xJTUFfQkNBU1RfSF9fCisjZGVmaW5lIF9fTElNQV9CQ0FTVF9IX18KKworc3RydWN0 IGxpbWFfaXA7CisKK2ludCBsaW1hX2JjYXN0X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKTsKK3Zv aWQgbGltYV9iY2FzdF9maW5pKHN0cnVjdCBsaW1hX2lwICppcCk7CisKK3ZvaWQgbGltYV9iY2Fz dF9lbmFibGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIGludCBudW1fcHApOworCisjZW5kaWYK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmMgYi9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX2N0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uNzI0YWM0MDUxZjdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9jdHguYwpAQCAtMCwwICsxLDEyNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdt YWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImxpbWFf ZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9jdHguaCIKKworaW50IGxpbWFfY3R4X2NyZWF0ZShz dHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgc3RydWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgKmlk KQoreworCXN0cnVjdCBsaW1hX2N0eCAqY3R4OworCWludCBpLCBlcnI7CisKKwljdHggPSBremFs bG9jKHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5P TUVNOworCWN0eC0+ZGV2ID0gZGV2OworCWtyZWZfaW5pdCgmY3R4LT5yZWZjbnQpOworCisJZm9y IChpID0gMDsgaSA8IGxpbWFfcGlwZV9udW07IGkrKykgeworCQllcnIgPSBsaW1hX3NjaGVkX2Nv bnRleHRfaW5pdChkZXYtPnBpcGUgKyBpLCBjdHgtPmNvbnRleHQgKyBpLCAmY3R4LT5ndWlsdHkp OworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0MDsKKwl9CisKKwlpZHJfcHJlbG9hZChHRlBf S0VSTkVMKTsKKwlzcGluX2xvY2soJm1nci0+bG9jayk7CisJZXJyID0gaWRyX2FsbG9jKCZtZ3It PmhhbmRsZXMsIGN0eCwgMSwgMCwgR0ZQX0FUT01JQyk7CisJc3Bpbl91bmxvY2soJm1nci0+bG9j ayk7CisJaWRyX3ByZWxvYWRfZW5kKCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX291dDA7 CisKKwkqaWQgPSBlcnI7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQwOgorCWZvciAoaS0tOyBpID49 IDA7IGktLSkKKwkJbGltYV9zY2hlZF9jb250ZXh0X2ZpbmkoZGV2LT5waXBlICsgaSwgY3R4LT5j b250ZXh0ICsgaSk7CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9p ZCBsaW1hX2N0eF9kb19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGxpbWFf Y3R4ICpjdHggPSBjb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgbGltYV9jdHgsIHJlZmNudCk7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGltYV9waXBlX251bTsgaSsrKQorCQlsaW1hX3Nj aGVkX2NvbnRleHRfZmluaShjdHgtPmRldi0+cGlwZSArIGksIGN0eC0+Y29udGV4dCArIGkpOwor CWtmcmVlKGN0eCk7Cit9CisKK2ludCBsaW1hX2N0eF9mcmVlKHN0cnVjdCBsaW1hX2N0eF9tZ3Ig Km1nciwgdTMyIGlkKQoreworCXN0cnVjdCBsaW1hX2N0eCAqY3R4OworCisJc3Bpbl9sb2NrKCZt Z3ItPmxvY2spOworCWN0eCA9IGlkcl9yZW1vdmUoJm1nci0+aGFuZGxlcywgaWQpOworCXNwaW5f dW5sb2NrKCZtZ3ItPmxvY2spOworCisJaWYgKGN0eCkgeworCQlrcmVmX3B1dCgmY3R4LT5yZWZj bnQsIGxpbWFfY3R4X2RvX3JlbGVhc2UpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5W QUw7Cit9CisKK3N0cnVjdCBsaW1hX2N0eCAqbGltYV9jdHhfZ2V0KHN0cnVjdCBsaW1hX2N0eF9t Z3IgKm1nciwgdTMyIGlkKQoreworCXN0cnVjdCBsaW1hX2N0eCAqY3R4OworCisJc3Bpbl9sb2Nr KCZtZ3ItPmxvY2spOworCWN0eCA9IGlkcl9maW5kKCZtZ3ItPmhhbmRsZXMsIGlkKTsKKwlpZiAo Y3R4KQorCQlrcmVmX2dldCgmY3R4LT5yZWZjbnQpOworCXNwaW5fdW5sb2NrKCZtZ3ItPmxvY2sp OworCXJldHVybiBjdHg7Cit9CisKK3ZvaWQgbGltYV9jdHhfcHV0KHN0cnVjdCBsaW1hX2N0eCAq Y3R4KQoreworCWtyZWZfcHV0KCZjdHgtPnJlZmNudCwgbGltYV9jdHhfZG9fcmVsZWFzZSk7Cit9 CisKK3ZvaWQgbGltYV9jdHhfbWdyX2luaXQoc3RydWN0IGxpbWFfY3R4X21nciAqbWdyKQorewor CXNwaW5fbG9ja19pbml0KCZtZ3ItPmxvY2spOworCWlkcl9pbml0KCZtZ3ItPmhhbmRsZXMpOwor fQorCit2b2lkIGxpbWFfY3R4X21ncl9maW5pKHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1ncikKK3sK KwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsKKwlzdHJ1Y3QgaWRyICppZHA7CisJdWludDMyX3QgaWQ7 CisKKwlpZHAgPSAmbWdyLT5oYW5kbGVzOworCisJaWRyX2Zvcl9lYWNoX2VudHJ5KGlkcCwgY3R4 LCBpZCkgeworCSAgICAgICAga3JlZl9wdXQoJmN0eC0+cmVmY250LCBsaW1hX2N0eF9kb19yZWxl YXNlKTsKKwl9CisKKwlpZHJfZGVzdHJveSgmbWdyLT5oYW5kbGVzKTsKK30KKworc3RydWN0IGRt YV9mZW5jZSAqbGltYV9jdHhfZ2V0X25hdGl2ZV9mZW5jZShzdHJ1Y3QgbGltYV9jdHhfbWdyICpt Z3IsCisJCQkJCSAgICB1MzIgY3R4LCB1MzIgcGlwZSwgdTMyIHNlcSkKK3sKKwlzdHJ1Y3QgbGlt YV9jdHggKmM7CisJc3RydWN0IGRtYV9mZW5jZSAqcmV0OworCisJaWYgKHBpcGUgPj0gbGltYV9w aXBlX251bSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljID0gbGltYV9jdHhfZ2V0 KG1nciwgY3R4KTsKKwlpZiAoIWMpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJcmV0 ID0gbGltYV9zY2hlZF9jb250ZXh0X2dldF9mZW5jZShjLT5jb250ZXh0ICsgcGlwZSwgc2VxKTsK KworCWxpbWFfY3R4X3B1dChjKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9jdHguaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4 LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44MGU1NWUxNjYxOWYK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5oCkBAIC0w LDAgKzEsMzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAq LworLyogQ29weXJpZ2h0IDIwMTggUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNp Zm5kZWYgX19MSU1BX0NUWF9IX18KKyNkZWZpbmUgX19MSU1BX0NUWF9IX18KKworI2luY2x1ZGUg PGxpbnV4L2lkci5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKworc3RydWN0IGxpbWFf Y3R4IHsKKwlzdHJ1Y3Qga3JlZiByZWZjbnQ7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXY7CisJ c3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCBjb250ZXh0W2xpbWFfcGlwZV9udW1dOworCWF0b21p Y190IGd1aWx0eTsKK307CisKK3N0cnVjdCBsaW1hX2N0eF9tZ3IgeworCXNwaW5sb2NrX3QgbG9j azsKKwlzdHJ1Y3QgaWRyIGhhbmRsZXM7Cit9OworCitpbnQgbGltYV9jdHhfY3JlYXRlKHN0cnVj dCBsaW1hX2RldmljZSAqZGV2LCBzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IsIHUzMiAqaWQpOwor aW50IGxpbWFfY3R4X2ZyZWUoc3RydWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgaWQpOworc3Ry dWN0IGxpbWFfY3R4ICpsaW1hX2N0eF9nZXQoc3RydWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIg aWQpOwordm9pZCBsaW1hX2N0eF9wdXQoc3RydWN0IGxpbWFfY3R4ICpjdHgpOwordm9pZCBsaW1h X2N0eF9tZ3JfaW5pdChzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IpOwordm9pZCBsaW1hX2N0eF9t Z3JfZmluaShzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IpOworCitzdHJ1Y3QgZG1hX2ZlbmNlICps aW1hX2N0eF9nZXRfbmF0aXZlX2ZlbmNlKHN0cnVjdCBsaW1hX2N0eF9tZ3IgKm1nciwKKwkJCQkJ ICAgIHUzMiBjdHgsIHUzMiBwaXBlLCB1MzIgc2VxKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9kZXZpY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmI4 OGM4NGQ3OTZmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf ZGV2aWNlLmMKQEAgLTAsMCArMSwzODQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTctMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdt YWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2lu Y2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8 bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K KworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9ncC5oIgorI2luY2x1 ZGUgImxpbWFfcHAuaCIKKyNpbmNsdWRlICJsaW1hX21tdS5oIgorI2luY2x1ZGUgImxpbWFfcG11 LmgiCisjaW5jbHVkZSAibGltYV9sMl9jYWNoZS5oIgorI2luY2x1ZGUgImxpbWFfZGxidS5oIgor I2luY2x1ZGUgImxpbWFfYmNhc3QuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisKK3N0cnVjdCBs aW1hX2lwX2Rlc2MgeworCWNoYXIgKm5hbWU7CisJY2hhciAqaXJxX25hbWU7CisJYm9vbCBtdXN0 X2hhdmVbbGltYV9ncHVfbnVtXTsKKwlpbnQgb2Zmc2V0W2xpbWFfZ3B1X251bV07CisKKwlpbnQg KCppbml0KShzdHJ1Y3QgbGltYV9pcCAqKTsKKwl2b2lkICgqZmluaSkoc3RydWN0IGxpbWFfaXAg Kik7Cit9OworCisjZGVmaW5lIExJTUFfSVBfREVTQyhpcG5hbWUsIG1zdDAsIG1zdDEsIG9mZjAs IG9mZjEsIGZ1bmMsIGlycSkgXAorCVtsaW1hX2lwXyMjaXBuYW1lXSA9IHsgXAorCQkubmFtZSA9 ICNpcG5hbWUsIFwKKwkJLmlycV9uYW1lID0gaXJxLCBcCisJCS5tdXN0X2hhdmUgPSB7IFwKKwkJ CVtsaW1hX2dwdV9tYWxpNDAwXSA9IG1zdDAsIFwKKwkJCVtsaW1hX2dwdV9tYWxpNDUwXSA9IG1z dDEsIFwKKwkJfSwgXAorCQkub2Zmc2V0ID0geyBcCisJCQlbbGltYV9ncHVfbWFsaTQwMF0gPSBv ZmYwLCBcCisJCQlbbGltYV9ncHVfbWFsaTQ1MF0gPSBvZmYxLCBcCisJCX0sIFwKKwkJLmluaXQg PSBsaW1hXyMjZnVuYyMjX2luaXQsIFwKKwkJLmZpbmkgPSBsaW1hXyMjZnVuYyMjX2ZpbmksIFwK Kwl9CisKK3N0YXRpYyBzdHJ1Y3QgbGltYV9pcF9kZXNjIGxpbWFfaXBfZGVzY1tsaW1hX2lwX251 bV0gPSB7CisJTElNQV9JUF9ERVNDKHBtdSwgICAgICAgICBmYWxzZSwgZmFsc2UsIDB4MDIwMDAs IDB4MDIwMDAsIHBtdSwgICAgICAicG11IiksCisJTElNQV9JUF9ERVNDKGwyX2NhY2hlMCwgICB0 cnVlLCAgdHJ1ZSwgIDB4MDEwMDAsIDB4MTAwMDAsIGwyX2NhY2hlLCBOVUxMKSwKKwlMSU1BX0lQ X0RFU0MobDJfY2FjaGUxLCAgIGZhbHNlLCB0cnVlLCAgLTEsICAgICAgMHgwMTAwMCwgbDJfY2Fj aGUsIE5VTEwpLAorCUxJTUFfSVBfREVTQyhsMl9jYWNoZTIsICAgZmFsc2UsIGZhbHNlLCAtMSwg ICAgICAweDExMDAwLCBsMl9jYWNoZSwgTlVMTCksCisJTElNQV9JUF9ERVNDKGdwLCAgICAgICAg ICB0cnVlLCAgdHJ1ZSwgIDB4MDAwMDAsIDB4MDAwMDAsIGdwLCAgICAgICAiZ3AiKSwKKwlMSU1B X0lQX0RFU0MocHAwLCAgICAgICAgIHRydWUsICB0cnVlLCAgMHgwODAwMCwgMHgwODAwMCwgcHAs ICAgICAgICJwcDAiKSwKKwlMSU1BX0lQX0RFU0MocHAxLCAgICAgICAgIGZhbHNlLCBmYWxzZSwg MHgwQTAwMCwgMHgwQTAwMCwgcHAsICAgICAgICJwcDEiKSwKKwlMSU1BX0lQX0RFU0MocHAyLCAg ICAgICAgIGZhbHNlLCBmYWxzZSwgMHgwQzAwMCwgMHgwQzAwMCwgcHAsICAgICAgICJwcDIiKSwK KwlMSU1BX0lQX0RFU0MocHAzLCAgICAgICAgIGZhbHNlLCBmYWxzZSwgMHgwRTAwMCwgMHgwRTAw MCwgcHAsICAgICAgICJwcDMiKSwKKwlMSU1BX0lQX0RFU0MocHA0LCAgICAgICAgIGZhbHNlLCBm YWxzZSwgLTEsICAgICAgMHgyODAwMCwgcHAsICAgICAgICJwcDQiKSwKKwlMSU1BX0lQX0RFU0Mo cHA1LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAgMHgyQTAwMCwgcHAsICAgICAgICJw cDUiKSwKKwlMSU1BX0lQX0RFU0MocHA2LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAg MHgyQzAwMCwgcHAsICAgICAgICJwcDYiKSwKKwlMSU1BX0lQX0RFU0MocHA3LCAgICAgICAgIGZh bHNlLCBmYWxzZSwgLTEsICAgICAgMHgyRTAwMCwgcHAsICAgICAgICJwcDciKSwKKwlMSU1BX0lQ X0RFU0MoZ3BtbXUsICAgICAgIHRydWUsICB0cnVlLCAgMHgwMzAwMCwgMHgwMzAwMCwgbW11LCAg ICAgICJncG1tdSIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTAsICAgICAgdHJ1ZSwgIHRydWUsICAw eDA0MDAwLCAweDA0MDAwLCBtbXUsICAgICAgInBwbW11MCIpLAorCUxJTUFfSVBfREVTQyhwcG1t dTEsICAgICAgZmFsc2UsIGZhbHNlLCAweDA1MDAwLCAweDA1MDAwLCBtbXUsICAgICAgInBwbW11 MSIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTIsICAgICAgZmFsc2UsIGZhbHNlLCAweDA2MDAwLCAw eDA2MDAwLCBtbXUsICAgICAgInBwbW11MiIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTMsICAgICAg ZmFsc2UsIGZhbHNlLCAweDA3MDAwLCAweDA3MDAwLCBtbXUsICAgICAgInBwbW11MyIpLAorCUxJ TUFfSVBfREVTQyhwcG1tdTQsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFDMDAwLCBt bXUsICAgICAgInBwbW11NCIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTUsICAgICAgZmFsc2UsIGZh bHNlLCAtMSwgICAgICAweDFEMDAwLCBtbXUsICAgICAgInBwbW11NSIpLAorCUxJTUFfSVBfREVT QyhwcG1tdTYsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFFMDAwLCBtbXUsICAgICAg InBwbW11NiIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTcsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwg ICAgICAweDFGMDAwLCBtbXUsICAgICAgInBwbW11NyIpLAorCUxJTUFfSVBfREVTQyhkbGJ1LCAg ICAgICAgZmFsc2UsIHRydWUsICAtMSwgICAgICAweDE0MDAwLCBkbGJ1LCAgICAgTlVMTCksCisJ TElNQV9JUF9ERVNDKGJjYXN0LCAgICAgICBmYWxzZSwgdHJ1ZSwgIC0xLCAgICAgIDB4MTMwMDAs IGJjYXN0LCAgICBOVUxMKSwKKwlMSU1BX0lQX0RFU0MocHBfYmNhc3QsICAgIGZhbHNlLCB0cnVl LCAgLTEsICAgICAgMHgxNjAwMCwgcHBfYmNhc3QsICJwcCIpLAorCUxJTUFfSVBfREVTQyhwcG1t dV9iY2FzdCwgZmFsc2UsIHRydWUsICAtMSwgICAgICAweDE1MDAwLCBtbXUsICAgICAgTlVMTCks Cit9OworCitjb25zdCBjaGFyICpsaW1hX2lwX25hbWUoc3RydWN0IGxpbWFfaXAgKmlwKQorewor CXJldHVybiBsaW1hX2lwX2Rlc2NbaXAtPmlkXS5uYW1lOworfQorCitzdGF0aWMgaW50IGxpbWFf Y2xrX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwl1bnNpZ25l ZCBsb25nIGJ1c19yYXRlLCBncHVfcmF0ZTsKKworCWRldi0+Y2xrX2J1cyA9IGRldm1fY2xrX2dl dChkZXYtPmRldiwgImJ1cyIpOworCWlmIChJU19FUlIoZGV2LT5jbGtfYnVzKSkgeworCQlkZXZf ZXJyKGRldi0+ZGV2LCAiZ2V0IGJ1cyBjbGsgZmFpbGVkICVsZFxuIiwgUFRSX0VSUihkZXYtPmNs a19idXMpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGV2LT5jbGtfYnVzKTsKKwl9CisKKwlkZXYtPmNs a19ncHUgPSBkZXZtX2Nsa19nZXQoZGV2LT5kZXYsICJjb3JlIik7CisJaWYgKElTX0VSUihkZXYt PmNsa19ncHUpKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJnZXQgY29yZSBjbGsgZmFpbGVkICVs ZFxuIiwgUFRSX0VSUihkZXYtPmNsa19ncHUpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGV2LT5jbGtf Z3B1KTsKKwl9CisKKwlidXNfcmF0ZSA9IGNsa19nZXRfcmF0ZShkZXYtPmNsa19idXMpOworCWRl dl9pbmZvKGRldi0+ZGV2LCAiYnVzIHJhdGUgPSAlbHVcbiIsIGJ1c19yYXRlKTsKKworCWdwdV9y YXRlID0gY2xrX2dldF9yYXRlKGRldi0+Y2xrX2dwdSk7CisJZGV2X2luZm8oZGV2LT5kZXYsICJt b2QgcmF0ZSA9ICVsdSIsIGdwdV9yYXRlKTsKKworCWlmICgoZXJyID0gY2xrX3ByZXBhcmVfZW5h YmxlKGRldi0+Y2xrX2J1cykpKQorCQlyZXR1cm4gZXJyOworCWlmICgoZXJyID0gY2xrX3ByZXBh cmVfZW5hYmxlKGRldi0+Y2xrX2dwdSkpKQorCQlnb3RvIGVycm9yX291dDA7CisKKwlkZXYtPnJl c2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChkZXYtPmRldiwgTlVMTCk7CisJ aWYgKElTX0VSUihkZXYtPnJlc2V0KSkgeworCQllcnIgPSBQVFJfRVJSKGRldi0+cmVzZXQpOwor CQlnb3RvIGVycm9yX291dDE7CisJfSBlbHNlIGlmIChkZXYtPnJlc2V0ICE9IE5VTEwpIHsKKwkJ aWYgKChlcnIgPSByZXNldF9jb250cm9sX2RlYXNzZXJ0KGRldi0+cmVzZXQpKSkKKwkJCWdvdG8g ZXJyb3Jfb3V0MTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3Jfb3V0MToKKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoZGV2LT5jbGtfZ3B1KTsKK2Vycm9yX291dDA6CisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRldi0+Y2xrX2J1cyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbGlt YV9jbGtfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5yZXNldCAh PSBOVUxMKQorCQlyZXNldF9jb250cm9sX2Fzc2VydChkZXYtPnJlc2V0KTsKKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoZGV2LT5jbGtfZ3B1KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LT5j bGtfYnVzKTsKK30KKworc3RhdGljIGludCBsaW1hX3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBsaW1h X2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisJZGV2LT5yZWd1bGF0b3IgPSBkZXZtX3JlZ3Vs YXRvcl9nZXRfb3B0aW9uYWwoZGV2LT5kZXYsICJtYWxpIik7CisJaWYgKElTX0VSUihkZXYtPnJl Z3VsYXRvcikpIHsKKwkJcmV0ID0gUFRSX0VSUihkZXYtPnJlZ3VsYXRvcik7CisJCWRldi0+cmVn dWxhdG9yID0gTlVMTDsKKwkJaWYgKHJldCA9PSAtRU5PREVWKQorCQkJcmV0dXJuIDA7CisJCWRl dl9lcnIoZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlZ3VsYXRvcjogJWxkXG4iLCBQVFJfRVJS KGRldi0+cmVndWxhdG9yKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVndWxhdG9y X2VuYWJsZShkZXYtPnJlZ3VsYXRvcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYt PmRldiwgImZhaWxlZCB0byBlbmFibGUgcmVndWxhdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9yZWd1bGF0b3Jf ZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5yZWd1bGF0b3IpCisJ CXJlZ3VsYXRvcl9kaXNhYmxlKGRldi0+cmVndWxhdG9yKTsKK30KKworc3RhdGljIGludCBsaW1h X2luaXRfaXAoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3Qg bGltYV9pcF9kZXNjICpkZXNjID0gbGltYV9pcF9kZXNjICsgaW5kZXg7CisJc3RydWN0IGxpbWFf aXAgKmlwID0gZGV2LT5pcCArIGluZGV4OworCWludCBvZmZzZXQgPSBkZXNjLT5vZmZzZXRbZGV2 LT5pZF07CisJYm9vbCBtdXN0ID0gZGVzYy0+bXVzdF9oYXZlW2Rldi0+aWRdOworCWludCBlcnI7 CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpcC0+ZGV2ID0gZGV2OworCWlw LT5pZCA9IGluZGV4OworCWlwLT5pb21lbSA9IGRldi0+aW9tZW0gKyBvZmZzZXQ7CisJaWYgKGRl c2MtPmlycV9uYW1lKSB7CisJCWVyciA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKGRldi0+cGRl diwgZGVzYy0+aXJxX25hbWUpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0OworCQlpcC0+ aXJxID0gZXJyOworCX0KKworCWVyciA9IGRlc2MtPmluaXQoaXApOworCWlmICghZXJyKSB7CisJ CWlwLT5wcmVzZW50ID0gdHJ1ZTsKKwkJcmV0dXJuIDA7CisJfQorCitvdXQ6CisJcmV0dXJuIG11 c3QgPyBlcnIgOiAwOworfQorCitzdGF0aWMgdm9pZCBsaW1hX2ZpbmlfaXAoc3RydWN0IGxpbWFf ZGV2aWNlICpsZGV2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGxpbWFfaXBfZGVzYyAqZGVzYyA9 IGxpbWFfaXBfZGVzYyArIGluZGV4OworCXN0cnVjdCBsaW1hX2lwICppcCA9IGxkZXYtPmlwICsg aW5kZXg7CisKKwlpZiAoaXAtPnByZXNlbnQpCisJCWRlc2MtPmZpbmkoaXApOworfQorCitzdGF0 aWMgaW50IGxpbWFfaW5pdF9ncF9waXBlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfZ3A7CisJ aW50IGVycjsKKworCWlmICgoZXJyID0gbGltYV9zY2hlZF9waXBlX2luaXQocGlwZSwgImdwIikp KQorCQlyZXR1cm4gZXJyOworCisJcGlwZS0+bDJfY2FjaGVbcGlwZS0+bnVtX2wyX2NhY2hlKytd ID0gZGV2LT5pcCArIGxpbWFfaXBfbDJfY2FjaGUwOworCXBpcGUtPm1tdVtwaXBlLT5udW1fbW11 KytdID0gZGV2LT5pcCArIGxpbWFfaXBfZ3BtbXU7CisJcGlwZS0+cHJvY2Vzc29yW3BpcGUtPm51 bV9wcm9jZXNzb3IrK10gPSBkZXYtPmlwICsgbGltYV9pcF9ncDsKKworCWlmICgoZXJyID0gbGlt YV9ncF9waXBlX2luaXQoZGV2KSkpIHsKKwkJbGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7CisJ CXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZmlu aV9ncF9waXBlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3NjaGVk X3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfZ3A7CisKKwlsaW1hX2dwX3BpcGVf ZmluaShkZXYpOworCWxpbWFfc2NoZWRfcGlwZV9maW5pKHBpcGUpOworfQorCitzdGF0aWMgaW50 IGxpbWFfaW5pdF9wcF9waXBlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJaW50IGVy ciwgaTsKKworCWlmICgoZXJyID0gbGltYV9zY2hlZF9waXBlX2luaXQocGlwZSwgInBwIikpKQor CQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8IExJTUFfU0NIRURfUElQRV9NQVhfUFJP Q0VTU09SOyBpKyspIHsKKwkJc3RydWN0IGxpbWFfaXAgKnBwID0gZGV2LT5pcCArIGxpbWFfaXBf cHAwICsgaTsKKwkJc3RydWN0IGxpbWFfaXAgKnBwbW11ID0gZGV2LT5pcCArIGxpbWFfaXBfcHBt bXUwICsgaTsKKwkJc3RydWN0IGxpbWFfaXAgKmwyX2NhY2hlOworCisJCWlmIChkZXYtPmlkID09 IGxpbWFfZ3B1X21hbGk0MDApCisJCQlsMl9jYWNoZSA9IGRldi0+aXAgKyBsaW1hX2lwX2wyX2Nh Y2hlMDsKKwkJZWxzZQorCQkJbDJfY2FjaGUgPSBkZXYtPmlwICsgbGltYV9pcF9sMl9jYWNoZTEg KyAoaSA+PiAyKTsKKworCQlpZiAocHAtPnByZXNlbnQgJiYgcHBtbXUtPnByZXNlbnQgJiYgbDJf Y2FjaGUtPnByZXNlbnQpIHsKKwkJCXBpcGUtPm1tdVtwaXBlLT5udW1fbW11KytdID0gcHBtbXU7 CisJCQlwaXBlLT5wcm9jZXNzb3JbcGlwZS0+bnVtX3Byb2Nlc3NvcisrXSA9IHBwOworCQkJaWYg KCFwaXBlLT5sMl9jYWNoZVtpID4+IDJdKQorCQkJCXBpcGUtPmwyX2NhY2hlW3BpcGUtPm51bV9s Ml9jYWNoZSsrXSA9IGwyX2NhY2hlOworCQl9CisJfQorCisJaWYgKGRldi0+aXBbbGltYV9pcF9i Y2FzdF0ucHJlc2VudCkgeworCQlwaXBlLT5iY2FzdF9wcm9jZXNzb3IgPSBkZXYtPmlwICsgbGlt YV9pcF9wcF9iY2FzdDsKKwkJcGlwZS0+YmNhc3RfbW11ID0gZGV2LT5pcCArIGxpbWFfaXBfcHBt bXVfYmNhc3Q7CisJfQorCisJaWYgKChlcnIgPSBsaW1hX3BwX3BpcGVfaW5pdChkZXYpKSkgewor CQlsaW1hX3NjaGVkX3BpcGVfZmluaShwaXBlKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9maW5pX3BwX3BpcGUoc3RydWN0IGxpbWFfZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSAr IGxpbWFfcGlwZV9wcDsKKworCWxpbWFfcHBfcGlwZV9maW5pKGRldik7CisJbGltYV9zY2hlZF9w aXBlX2ZpbmkocGlwZSk7Cit9CisKK2ludCBsaW1hX2RldmljZV9pbml0KHN0cnVjdCBsaW1hX2Rl dmljZSAqbGRldikKK3sKKwlpbnQgZXJyLCBpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJ ZG1hX3NldF9jb2hlcmVudF9tYXNrKGxkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKKwll cnIgPSBsaW1hX2Nsa19pbml0KGxkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihsZGV2LT5k ZXYsICJjbGsgaW5pdCBmYWlsICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWlm ICgoZXJyID0gbGltYV9yZWd1bGF0b3JfaW5pdChsZGV2KSkpIHsKKwkJZGV2X2VycihsZGV2LT5k ZXYsICJyZWd1bGF0b3IgaW5pdCBmYWlsICVkXG4iLCBlcnIpOworCQlnb3RvIGVycl9vdXQwOwor CX0KKworCWVyciA9IGxpbWFfdHRtX2luaXQobGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJf b3V0MTsKKworCWxkZXYtPmVtcHR5X3ZtID0gbGltYV92bV9jcmVhdGUobGRldik7CisJaWYgKCFs ZGV2LT5lbXB0eV92bSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQyOworCX0K KworCWxkZXYtPnZhX3N0YXJ0ID0gMDsKKwlpZiAobGRldi0+aWQgPT0gbGltYV9ncHVfbWFsaTQ1 MCkgeworCQlsZGV2LT52YV9lbmQgPSBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQ7CisJCWxkZXYtPmRs YnVfY3B1ID0gZG1hX2FsbG9jX3djKAorCQkJbGRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwKKwkJ CSZsZGV2LT5kbGJ1X2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbGRldi0+ZGxidV9jcHUpIHsK KwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQzOworCQl9CisJfQorCWVsc2UKKwkJ bGRldi0+dmFfZW5kID0gTElNQV9WQV9SRVNFUlZFX0VORDsKKworCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShsZGV2LT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbGRldi0+aW9tZW0g PSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UobGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIobGRl di0+aW9tZW0pKSB7CisJCWRldl9lcnIobGRldi0+ZGV2LCAiZmFpbCB0byBpb3JlbWFwIGlvbWVt XG4iKTsKKwkgICAgICAgIGVyciA9IFBUUl9FUlIobGRldi0+aW9tZW0pOworCQlnb3RvIGVycl9v dXQ0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsaW1hX2lwX251bTsgaSsrKSB7CisJCWVyciA9 IGxpbWFfaW5pdF9pcChsZGV2LCBpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDU7CisJ fQorCisJZXJyID0gbGltYV9pbml0X2dwX3BpcGUobGRldik7CisJaWYgKGVycikKKwkJZ290byBl cnJfb3V0NTsKKworCWVyciA9IGxpbWFfaW5pdF9wcF9waXBlKGxkZXYpOworCWlmIChlcnIpCisJ CWdvdG8gZXJyX291dDY7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDY6CisJbGltYV9maW5pX2dw X3BpcGUobGRldik7CitlcnJfb3V0NToKKwl3aGlsZSAoLS1pID49IDApCisJCWxpbWFfZmluaV9p cChsZGV2LCBpKTsKK2Vycl9vdXQ0OgorCWlmIChsZGV2LT5kbGJ1X2NwdSkKKwkJZG1hX2ZyZWVf d2MobGRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwKKwkJCSAgICBsZGV2LT5kbGJ1X2NwdSwgbGRl di0+ZGxidV9kbWEpOworZXJyX291dDM6CisJbGltYV92bV9wdXQobGRldi0+ZW1wdHlfdm0pOwor ZXJyX291dDI6CisJbGltYV90dG1fZmluaShsZGV2KTsKK2Vycl9vdXQxOgorCWxpbWFfcmVndWxh dG9yX2ZpbmkobGRldik7CitlcnJfb3V0MDoKKwlsaW1hX2Nsa19maW5pKGxkZXYpOworCXJldHVy biBlcnI7Cit9CisKK3ZvaWQgbGltYV9kZXZpY2VfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmxk ZXYpCit7CisJaW50IGk7CisKKwlsaW1hX2ZpbmlfcHBfcGlwZShsZGV2KTsKKwlsaW1hX2Zpbmlf Z3BfcGlwZShsZGV2KTsKKworCWZvciAoaSA9IGxpbWFfaXBfbnVtIC0gMTsgaSA+PSAwOyBpLS0p CisJCWxpbWFfZmluaV9pcChsZGV2LCBpKTsKKworCWlmIChsZGV2LT5kbGJ1X2NwdSkKKwkJZG1h X2ZyZWVfd2MobGRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwKKwkJCSAgICBsZGV2LT5kbGJ1X2Nw dSwgbGRldi0+ZGxidV9kbWEpOworCisJbGltYV92bV9wdXQobGRldi0+ZW1wdHlfdm0pOworCisJ bGltYV90dG1fZmluaShsZGV2KTsKKworCWxpbWFfcmVndWxhdG9yX2ZpbmkobGRldik7CisKKwls aW1hX2Nsa19maW5pKGxkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9kZXZpY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43ODgyMjY0OTA1MjQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5oCkBAIC0wLDAgKzEs MTE2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8q IENvcHlyaWdodCAyMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVm IF9fTElNQV9ERVZJQ0VfSF9fCisjZGVmaW5lIF9fTElNQV9ERVZJQ0VfSF9fCisKKyNpbmNsdWRl IDxkcm0vZHJtX2RldmljZS5oPgorCisjaW5jbHVkZSAibGltYV9zY2hlZC5oIgorI2luY2x1ZGUg ImxpbWFfdHRtLmgiCisKK2VudW0gbGltYV9ncHVfaWQgeworCWxpbWFfZ3B1X21hbGk0MDAgPSAw LAorCWxpbWFfZ3B1X21hbGk0NTAsCisJbGltYV9ncHVfbnVtLAorfTsKKworZW51bSBsaW1hX2lw X2lkIHsKKwlsaW1hX2lwX3BtdSwKKwlsaW1hX2lwX2dwbW11LAorCWxpbWFfaXBfcHBtbXUwLAor CWxpbWFfaXBfcHBtbXUxLAorCWxpbWFfaXBfcHBtbXUyLAorCWxpbWFfaXBfcHBtbXUzLAorCWxp bWFfaXBfcHBtbXU0LAorCWxpbWFfaXBfcHBtbXU1LAorCWxpbWFfaXBfcHBtbXU2LAorCWxpbWFf aXBfcHBtbXU3LAorCWxpbWFfaXBfZ3AsCisJbGltYV9pcF9wcDAsCisJbGltYV9pcF9wcDEsCisJ bGltYV9pcF9wcDIsCisJbGltYV9pcF9wcDMsCisJbGltYV9pcF9wcDQsCisJbGltYV9pcF9wcDUs CisJbGltYV9pcF9wcDYsCisJbGltYV9pcF9wcDcsCisJbGltYV9pcF9sMl9jYWNoZTAsCisJbGlt YV9pcF9sMl9jYWNoZTEsCisJbGltYV9pcF9sMl9jYWNoZTIsCisJbGltYV9pcF9kbGJ1LAorCWxp bWFfaXBfYmNhc3QsCisJbGltYV9pcF9wcF9iY2FzdCwKKwlsaW1hX2lwX3BwbW11X2JjYXN0LAor CWxpbWFfaXBfbnVtLAorfTsKKworc3RydWN0IGxpbWFfZGV2aWNlOworCitzdHJ1Y3QgbGltYV9p cCB7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXY7CisJZW51bSBsaW1hX2lwX2lkIGlkOworCWJv b2wgcHJlc2VudDsKKworCXZvaWQgX19pb21lbSAqaW9tZW07CisJaW50IGlycTsKKworCXVuaW9u IHsKKwkJLyogZ3AvcHAgKi8KKwkJYm9vbCBhc3luY19yZXNldDsKKwkJLyogbDIgY2FjaGUgKi8K KwkJc3BpbmxvY2tfdCBsb2NrOworCX0gZGF0YTsKK307CisKK2VudW0gbGltYV9waXBlX2lkIHsK KwlsaW1hX3BpcGVfZ3AsCisJbGltYV9waXBlX3BwLAorCWxpbWFfcGlwZV9udW0sCit9OworCitz dHJ1Y3QgbGltYV9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJZW51bSBsaW1h X2dwdV9pZCBpZDsKKwlpbnQgbnVtX3BwOworCisJdm9pZCBfX2lvbWVtICppb21lbTsKKwlzdHJ1 Y3QgY2xrICpjbGtfYnVzOworCXN0cnVjdCBjbGsgKmNsa19ncHU7CisJc3RydWN0IHJlc2V0X2Nv bnRyb2wgKnJlc2V0OworCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKKworCXN0cnVjdCBs aW1hX2lwIGlwW2xpbWFfaXBfbnVtXTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlIHBpcGVbbGlt YV9waXBlX251bV07CisKKwlzdHJ1Y3QgbGltYV9tbWFuIG1tYW47CisKKwlzdHJ1Y3QgbGltYV92 bSAqZW1wdHlfdm07CisJdWludDY0X3QgdmFfc3RhcnQ7CisJdWludDY0X3QgdmFfZW5kOworCisJ dTMyICpkbGJ1X2NwdTsKKwlkbWFfYWRkcl90IGRsYnVfZG1hOworfTsKKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbGltYV9kZXZpY2UgKgordG9fbGltYV9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKK3sKKwlyZXR1cm4gZGV2LT5kZXZfcHJpdmF0ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgbGltYV9kZXZpY2UgKgordHRtX3RvX2xpbWFfZGV2KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpk ZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBsaW1hX2RldmljZSwgbW1h bi5iZGV2KTsKK30KKworaW50IGxpbWFfZGV2aWNlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICps ZGV2KTsKK3ZvaWQgbGltYV9kZXZpY2VfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYpOwor Citjb25zdCBjaGFyICpsaW1hX2lwX25hbWUoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuYyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfZGxidS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNjY5N2Q0ZGRkODg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9kbGJ1LmMKQEAgLTAsMCArMSw1NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOCBRaWFuZyBZdSA8eXVxODI1 QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgv ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFfZGxi dS5oIgorI2luY2x1ZGUgImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1hX3JlZ3MuaCIKKworI2Rl ZmluZSBkbGJ1X3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIExJTUFf RExCVV8jI3JlZykKKyNkZWZpbmUgZGxidV9yZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsgTElN QV9ETEJVXyMjcmVnKQorCit2b2lkIGxpbWFfZGxidV9lbmFibGUoc3RydWN0IGxpbWFfZGV2aWNl ICpkZXYsIGludCBudW1fcHApCit7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSA9IGRl di0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBkZXYtPmlwICsg bGltYV9pcF9kbGJ1OworCWludCBpLCBtYXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1f cHA7IGkrKykgeworCQlzdHJ1Y3QgbGltYV9pcCAqcHAgPSBwaXBlLT5wcm9jZXNzb3JbaV07CisJ CW1hc2sgfD0gMSA8PCAocHAtPmlkIC0gbGltYV9pcF9wcDApOworCX0KKworCWRsYnVfd3JpdGUo UFBfRU5BQkxFX01BU0ssIG1hc2spOworfQorCit2b2lkIGxpbWFfZGxidV9kaXNhYmxlKHN0cnVj dCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX2lwICppcCA9IGRldi0+aXAgKyBs aW1hX2lwX2RsYnU7CisJZGxidV93cml0ZShQUF9FTkFCTEVfTUFTSywgMCk7Cit9CisKK3ZvaWQg bGltYV9kbGJ1X3NldF9yZWcoc3RydWN0IGxpbWFfaXAgKmlwLCB1MzIgKnJlZykKK3sKKwlkbGJ1 X3dyaXRlKFRMTElTVF9WQkFTRUFERFIsIHJlZ1swXSk7CisJZGxidV93cml0ZShGQl9ESU0sIHJl Z1sxXSk7CisJZGxidV93cml0ZShUTExJU1RfQ09ORiwgcmVnWzJdKTsKKwlkbGJ1X3dyaXRlKFNU QVJUX1RJTEVfUE9TLCByZWdbM10pOworfQorCitpbnQgbGltYV9kbGJ1X2luaXQoc3RydWN0IGxp bWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKworCWRs YnVfd3JpdGUoTUFTVEVSX1RMTElTVF9QSFlTX0FERFIsIGRldi0+ZGxidV9kbWEgfCAxKTsKKwlk bGJ1X3dyaXRlKE1BU1RFUl9UTExJU1RfVkFERFIsIExJTUFfVkFfUkVTRVJWRV9ETEJVKTsKKwor CXJldHVybiAwOworfQorCit2b2lkIGxpbWFfZGxidV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkK K3sKKwkKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5oIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi42MGNiYTM4N2NmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2RsYnUuaApAQCAtMCwwICsxLDE4IEBACisvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE4IFFpYW5n IFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9ETEJVX0hfXworI2Rl ZmluZSBfX0xJTUFfRExCVV9IX18KKworc3RydWN0IGxpbWFfaXA7CitzdHJ1Y3QgbGltYV9kZXZp Y2U7CisKK3ZvaWQgbGltYV9kbGJ1X2VuYWJsZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgaW50 IG51bV9wcCk7Cit2b2lkIGxpbWFfZGxidV9kaXNhYmxlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2 KTsKKwordm9pZCBsaW1hX2RsYnVfc2V0X3JlZyhzdHJ1Y3QgbGltYV9pcCAqaXAsIHUzMiAqcmVn KTsKKworaW50IGxpbWFfZGxidV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFf ZGxidV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf ZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xMzIwNzFiOWJl OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Rydi5jCkBA IC0wLDAgKzEsNDU5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBN SVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTggUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICov CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y bS5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+ CisjaW5jbHVkZSA8ZHJtL2xpbWFfZHJtLmg+CisKKyNpbmNsdWRlICJsaW1hX2Rydi5oIgorI2lu Y2x1ZGUgImxpbWFfZ2VtLmgiCisjaW5jbHVkZSAibGltYV9nZW1fcHJpbWUuaCIKKyNpbmNsdWRl ICJsaW1hX3ZtLmgiCisKK2ludCBsaW1hX3NjaGVkX3RpbWVvdXRfbXMgPSAwOworaW50IGxpbWFf c2NoZWRfbWF4X3Rhc2tzID0gMzI7CitpbnQgbGltYV9tYXhfbWVtID0gLTE7CisKK01PRFVMRV9Q QVJNX0RFU0Moc2NoZWRfdGltZW91dF9tcywgInRhc2sgcnVuIHRpbWVvdXQgaW4gbXMgKDAgPSBu byB0aW1lb3V0IChkZWZhdWx0KSkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChzY2hlZF90aW1lb3V0 X21zLCBsaW1hX3NjaGVkX3RpbWVvdXRfbXMsIGludCwgMDQ0NCk7CisKK01PRFVMRV9QQVJNX0RF U0Moc2NoZWRfbWF4X3Rhc2tzLCAibWF4IHF1ZXVlZCB0YXNrIG51bSBpbiBhIGNvbnRleHQgKGRl ZmF1bHQgMzIpIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoc2NoZWRfbWF4X3Rhc2tzLCBsaW1hX3Nj aGVkX21heF90YXNrcywgaW50LCAwNDQ0KTsKKworTU9EVUxFX1BBUk1fREVTQyhtYXhfbWVtLCAi TWF4IG1lbW9yeSBzaXplIGluIE1CIGNhbiBiZSB1c2VkICg8MCA9IGF1dG8pIik7Cittb2R1bGVf cGFyYW1fbmFtZWQobWF4X21lbSwgbGltYV9tYXhfbWVtLCBpbnQsIDA0NDQpOworCitzdGF0aWMg aW50IGxpbWFfaW9jdGxfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9saW1hX2luZm8gKmluZm8gPSBk YXRhOworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldiA9IHRvX2xpbWFfZGV2KGRldik7CisKKwlz d2l0Y2ggKGxkZXYtPmlkKSB7CisJY2FzZSBsaW1hX2dwdV9tYWxpNDAwOgorCQlpbmZvLT5ncHVf aWQgPSBMSU1BX0lORk9fR1BVX01BTEk0MDA7CisJCWJyZWFrOworCWNhc2UgbGltYV9ncHVfbWFs aTQ1MDoKKwkJaW5mby0+Z3B1X2lkID0gTElNQV9JTkZPX0dQVV9NQUxJNDUwOworCQlicmVhazsK KwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaW5mby0+bnVtX3BwID0gbGRldi0+ cGlwZVtsaW1hX3BpcGVfcHBdLm51bV9wcm9jZXNzb3I7CisJaW5mby0+dmFfc3RhcnQgPSBsZGV2 LT52YV9zdGFydDsKKwlpbmZvLT52YV9lbmQgPSBsZGV2LT52YV9lbmQ7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9nZW1fY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xp bWFfZ2VtX2NyZWF0ZSAqYXJncyA9IGRhdGE7CisKKwlpZiAoYXJncy0+ZmxhZ3MpCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKGFyZ3MtPnNpemUgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK KwlyZXR1cm4gbGltYV9nZW1fY3JlYXRlX2hhbmRsZShkZXYsIGZpbGUsIGFyZ3MtPnNpemUsIGFy Z3MtPmZsYWdzLCAmYXJncy0+aGFuZGxlKTsKK30KKworc3RhdGljIGludCBsaW1hX2lvY3RsX2dl bV9pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX2luZm8gKmFyZ3MgPSBkYXRhOworCisJ cmV0dXJuIGxpbWFfZ2VtX21tYXBfb2Zmc2V0KGZpbGUsIGFyZ3MtPmhhbmRsZSwgJmFyZ3MtPm9m ZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9nZW1fdmEoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBk cm1fbGltYV9nZW1fdmEgKmFyZ3MgPSBkYXRhOworCisJc3dpdGNoIChhcmdzLT5vcCkgeworCWNh c2UgTElNQV9WQV9PUF9NQVA6CisJCXJldHVybiBsaW1hX2dlbV92YV9tYXAoZmlsZSwgYXJncy0+ aGFuZGxlLCBhcmdzLT5mbGFncywgYXJncy0+dmEpOworCWNhc2UgTElNQV9WQV9PUF9VTk1BUDoK KwkJcmV0dXJuIGxpbWFfZ2VtX3ZhX3VubWFwKGZpbGUsIGFyZ3MtPmhhbmRsZSwgYXJncy0+dmEp OworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBsaW1h X2lvY3RsX2dlbV9zdWJtaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3Ry dWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2luICph cmdzID0gZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYp OworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJc3Ry dWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm8gKmJvczsKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1 ZmZlciAqdmJzOworCXVuaW9uIGRybV9saW1hX2dlbV9zdWJtaXRfZGVwICpkZXBzID0gTlVMTDsK KwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlOworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sg KnRhc2s7CisJc3RydWN0IGxpbWFfY3R4ICpjdHg7CisJc3RydWN0IGxpbWFfc3VibWl0IHN1Ym1p dCA9IHswfTsKKwlpbnQgZXJyID0gMCwgc2l6ZTsKKworCWlmIChhcmdzLT5waXBlID49IGxpbWFf cGlwZV9udW0gfHwgYXJncy0+bnJfYm9zID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYg KGFyZ3MtPmZsYWdzICYgfihMSU1BX1NVQk1JVF9GTEFHX0VYUExJQ0lUX0ZFTkNFIHwKKwkJCSAg ICBMSU1BX1NVQk1JVF9GTEFHX1NZTkNfRkRfT1VUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlw aXBlID0gbGRldi0+cGlwZSArIGFyZ3MtPnBpcGU7CisJaWYgKGFyZ3MtPmZyYW1lX3NpemUgIT0g cGlwZS0+ZnJhbWVfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaXplID0gYXJncy0+bnJf Ym9zICogKHNpemVvZigqc3VibWl0LmJvcykgKyBzaXplb2YoKnN1Ym1pdC52YnMpKSArCisJCWFy Z3MtPm5yX2RlcHMgKiBzaXplb2YoKnN1Ym1pdC5kZXBzKTsKKwlib3MgPSBremFsbG9jKHNpemUs IEdGUF9LRVJORUwpOworCWlmICghYm9zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNpemUgPSBh cmdzLT5ucl9ib3MgKiBzaXplb2YoKnN1Ym1pdC5ib3MpOworCWlmIChjb3B5X2Zyb21fdXNlcihi b3MsIHU2NF90b191c2VyX3B0cihhcmdzLT5ib3MpLCBzaXplKSkgeworCQllcnIgPSAtRUZBVUxU OworCQlnb3RvIG91dDA7CisJfQorCisJdmJzID0gKHZvaWQgKilib3MgKyBzaXplOworCisJaWYg KGFyZ3MtPm5yX2RlcHMpIHsKKwkJZGVwcyA9ICh2b2lkICopdmJzICsgYXJncy0+bnJfYm9zICog c2l6ZW9mKCpzdWJtaXQudmJzKTsKKwkJc2l6ZSA9IGFyZ3MtPm5yX2RlcHMgKiBzaXplb2YoKnN1 Ym1pdC5kZXBzKTsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKGRlcHMsIHU2NF90b191c2VyX3B0cihh cmdzLT5kZXBzKSwgc2l6ZSkpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDA7CisJ CX0KKwl9CisKKwl0YXNrID0ga21lbV9jYWNoZV96YWxsb2MocGlwZS0+dGFza19zbGFiLCBHRlBf S0VSTkVMKTsKKwlpZiAoIXRhc2spIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQwOwor CX0KKworCXRhc2stPmZyYW1lID0gdGFzayArIDE7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRhc2st PmZyYW1lLCB1NjRfdG9fdXNlcl9wdHIoYXJncy0+ZnJhbWUpLCBhcmdzLT5mcmFtZV9zaXplKSkg eworCQllcnIgPSAtRUZBVUxUOworCQlnb3RvIG91dDE7CisJfQorCisJZXJyID0gcGlwZS0+dGFz a192YWxpZGF0ZShwaXBlLCB0YXNrKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDE7CisKKwljdHgg PSBsaW1hX2N0eF9nZXQoJnByaXYtPmN0eF9tZ3IsIGFyZ3MtPmN0eCk7CisJaWYgKCFjdHgpIHsK KwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBvdXQxOworCX0KKworCXN1Ym1pdC5waXBlID0gYXJn cy0+cGlwZTsKKwlzdWJtaXQuYm9zID0gYm9zOworCXN1Ym1pdC52YnMgPSB2YnM7CisJc3VibWl0 Lm5yX2JvcyA9IGFyZ3MtPm5yX2JvczsKKwlzdWJtaXQudGFzayA9IHRhc2s7CisJc3VibWl0LmN0 eCA9IGN0eDsKKwlzdWJtaXQuZGVwcyA9IGRlcHM7CisJc3VibWl0Lm5yX2RlcHMgPSBhcmdzLT5u cl9kZXBzOworCXN1Ym1pdC5mbGFncyA9IGFyZ3MtPmZsYWdzOworCisJZXJyID0gbGltYV9nZW1f c3VibWl0KGZpbGUsICZzdWJtaXQpOworCWlmICghZXJyKSB7CisJCXN0cnVjdCBkcm1fbGltYV9n ZW1fc3VibWl0X291dCAqb3V0ID0gZGF0YTsKKwkJb3V0LT5mZW5jZSA9IHN1Ym1pdC5mZW5jZTsK KwkJb3V0LT5kb25lID0gc3VibWl0LmRvbmU7CisJCW91dC0+c3luY19mZCA9IHN1Ym1pdC5zeW5j X2ZkOworCX0KKworCWxpbWFfY3R4X3B1dChjdHgpOworb3V0MToKKwlpZiAoZXJyKQorCQlrbWVt X2NhY2hlX2ZyZWUocGlwZS0+dGFza19zbGFiLCB0YXNrKTsKK291dDA6CisJa2ZyZWUoYm9zKTsK KwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpbWFfd2FpdF9mZW5jZShzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZSwgdTY0IHRpbWVvdXRfbnMpCit7CisJc2lnbmVkIGxvbmcgcmV0OworCisJ aWYgKCF0aW1lb3V0X25zKQorCQlyZXQgPSBkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2UpID8g MCA6IC1FQlVTWTsKKwllbHNlIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbGltYV90aW1l b3V0X3RvX2ppZmZpZXModGltZW91dF9ucyk7CisKKwkJLyogbXVzdCB1c2UgbG9uZyBmb3IgcmVz dWx0IGNoZWNrIGJlY2F1c2UgaW4gNjRiaXQgYXJjaCBpbnQKKwkJICogd2lsbCBvdmVyZmxvdyBp ZiB0aW1lb3V0IGlzIHRvbyBsYXJnZSBhbmQgZ2V0IDwwIHJlc3VsdAorCQkgKi8KKwkJcmV0ID0g ZG1hX2ZlbmNlX3dhaXRfdGltZW91dChmZW5jZSwgdHJ1ZSwgdGltZW91dCk7CisJCWlmIChyZXQg PT0gMCkKKwkJCXJldCA9IHRpbWVvdXQgPyAtRVRJTUVET1VUIDogLUVCVVNZOworCQllbHNlIGlm IChyZXQgPiAwKQorCQkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IGxpbWFfaW9jdGxfd2FpdF9mZW5jZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9saW1hX3dhaXRfZmVu Y2UgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0gZmlsZS0+ZHJp dmVyX3ByaXY7CisJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2U7CisJaW50IGVyciA9IDA7CisKKwlm ZW5jZSA9IGxpbWFfY3R4X2dldF9uYXRpdmVfZmVuY2UoJnByaXYtPmN0eF9tZ3IsIGFyZ3MtPmN0 eCwKKwkJCQkJICBhcmdzLT5waXBlLCBhcmdzLT5zZXEpOworCWlmIChJU19FUlIoZmVuY2UpKQor CQlyZXR1cm4gUFRSX0VSUihmZW5jZSk7CisKKwlpZiAoZmVuY2UpIHsKKwkJZXJyID0gbGltYV93 YWl0X2ZlbmNlKGZlbmNlLCBhcmdzLT50aW1lb3V0X25zKTsKKwkJYXJncy0+ZXJyb3IgPSBmZW5j ZS0+ZXJyb3I7CisJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOworCX0KKwllbHNlCisJCWFyZ3MtPmVy cm9yID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9nZW1f d2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUpCit7CisJc3RydWN0IGRybV9saW1hX2dlbV93YWl0ICphcmdzID0gZGF0YTsKKworCWlm ICghKGFyZ3MtPm9wICYgKExJTUFfR0VNX1dBSVRfUkVBRHxMSU1BX0dFTV9XQUlUX1dSSVRFKSkp CisJICAgIHJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGxpbWFfZ2VtX3dhaXQoZmlsZSwgYXJn cy0+aGFuZGxlLCBhcmdzLT5vcCwgYXJncy0+dGltZW91dF9ucyk7Cit9CisKK3N0YXRpYyBpbnQg bGltYV9pb2N0bF9jdHgoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0 IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fbGltYV9jdHggKmFyZ3MgPSBkYXRhOwor CXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJc3RydWN0 IGxpbWFfZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYoZGV2KTsKKworCWlmIChhcmdzLT5vcCA9 PSBMSU1BX0NUWF9PUF9DUkVBVEUpCisJCXJldHVybiBsaW1hX2N0eF9jcmVhdGUobGRldiwgJnBy aXYtPmN0eF9tZ3IsICZhcmdzLT5pZCk7CisJZWxzZSBpZiAoYXJncy0+b3AgPT0gTElNQV9DVFhf T1BfRlJFRSkKKwkJcmV0dXJuIGxpbWFfY3R4X2ZyZWUoJnByaXYtPmN0eF9tZ3IsIGFyZ3MtPmlk KTsKKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfZ2VtX21v ZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUpCit7CisJc3RydWN0IGRybV9saW1hX2dlbV9tb2QgKmFyZ3MgPSBkYXRhOworCisJaWYgKGFy Z3MtPm9wID09IExJTUFfR0VNX01PRF9PUF9HRVQpCisJCXJldHVybiBsaW1hX2dlbV9nZXRfbW9k aWZpZXIoZmlsZSwgYXJncy0+aGFuZGxlLCAmYXJncy0+bW9kaWZpZXIpOworCWVsc2UgaWYgKGFy Z3MtPm9wID09IExJTUFfR0VNX01PRF9PUF9TRVQpCisJCXJldHVybiBsaW1hX2dlbV9zZXRfbW9k aWZpZXIoZmlsZSwgYXJncy0+aGFuZGxlLCBhcmdzLT5tb2RpZmllcik7CisKKwlyZXR1cm4gLUVJ TlZBTDsKK30KKworc3RhdGljIGludCBsaW1hX2RybV9kcml2ZXJfb3BlbihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qg bGltYV9kcm1fcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1h X2RldihkZXYpOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7 CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPnZtID0gbGltYV92bV9j cmVhdGUobGRldik7CisJaWYgKCFwcml2LT52bSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3Rv IGVycl9vdXQwOworCX0KKworICAgICAgICBsaW1hX2N0eF9tZ3JfaW5pdCgmcHJpdi0+Y3R4X21n cik7CisKKwlmaWxlLT5kcml2ZXJfcHJpdiA9IHByaXY7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQw OgorCWtmcmVlKHByaXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZHJt X2RyaXZlcl9wb3N0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxl ICpmaWxlKQoreworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3By aXY7CisKKwlsaW1hX2N0eF9tZ3JfZmluaSgmcHJpdi0+Y3R4X21ncik7CisJbGltYV92bV9wdXQo cHJpdi0+dm0pOworCWtmcmVlKHByaXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9p b2N0bF9kZXNjIGxpbWFfZHJtX2RyaXZlcl9pb2N0bHNbXSA9IHsKKwlEUk1fSU9DVExfREVGX0RS VihMSU1BX0lORk8sIGxpbWFfaW9jdGxfaW5mbywgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyks CisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fQ1JFQVRFLCBsaW1hX2lvY3RsX2dlbV9jcmVh dGUsIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFf R0VNX0lORk8sIGxpbWFfaW9jdGxfZ2VtX2luZm8sIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cp LAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfR0VNX1ZBLCBsaW1hX2lvY3RsX2dlbV92YSwgRFJN X0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fU1VC TUlULCBsaW1hX2lvY3RsX2dlbV9zdWJtaXQsIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAor CURSTV9JT0NUTF9ERUZfRFJWKExJTUFfV0FJVF9GRU5DRSwgbGltYV9pb2N0bF93YWl0X2ZlbmNl LCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dF TV9XQUlULCBsaW1hX2lvY3RsX2dlbV93YWl0LCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwK KwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0NUWCwgbGltYV9pb2N0bF9jdHgsIERSTV9BVVRIfERS TV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfR0VNX01PRCwgbGltYV9p b2N0bF9nZW1fbW9kLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKK307CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxpbWFfZHJtX2RyaXZlcl9mb3BzID0geworCS5v d25lciAgICAgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgICAgID0g ZHJtX29wZW4sCisJLnJlbGVhc2UgICAgICAgICAgICA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tl ZF9pb2N0bCAgICAgPSBkcm1faW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRf aW9jdGwgICAgICAgPSBkcm1fY29tcGF0X2lvY3RsLAorI2VuZGlmCisJLm1tYXAgICAgICAgICAg ICAgICA9IGxpbWFfZ2VtX21tYXAsCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbGlt YV9kcm1fZHJpdmVyID0geworCS5kcml2ZXJfZmVhdHVyZXMgICAgPSBEUklWRVJfUkVOREVSIHwg RFJJVkVSX0dFTSB8IERSSVZFUl9QUklNRSwKKwkub3BlbiAgICAgICAgICAgICAgID0gbGltYV9k cm1fZHJpdmVyX29wZW4sCisJLnBvc3RjbG9zZSAgICAgICAgICA9IGxpbWFfZHJtX2RyaXZlcl9w b3N0Y2xvc2UsCisJLmlvY3RscyAgICAgICAgICAgICA9IGxpbWFfZHJtX2RyaXZlcl9pb2N0bHMs CisJLm51bV9pb2N0bHMgICAgICAgICA9IEFSUkFZX1NJWkUobGltYV9kcm1fZHJpdmVyX2lvY3Rs cyksCisJLmZvcHMgICAgICAgICAgICAgICA9ICZsaW1hX2RybV9kcml2ZXJfZm9wcywKKwkuZ2Vt X2ZyZWVfb2JqZWN0X3VubG9ja2VkID0gbGltYV9nZW1fZnJlZV9vYmplY3QsCisJLmdlbV9vcGVu X29iamVjdCAgICA9IGxpbWFfZ2VtX29iamVjdF9vcGVuLAorCS5nZW1fY2xvc2Vfb2JqZWN0ICAg PSBsaW1hX2dlbV9vYmplY3RfY2xvc2UsCisJLm5hbWUgICAgICAgICAgICAgICA9ICJsaW1hIiwK KwkuZGVzYyAgICAgICAgICAgICAgID0gImxpbWEgRFJNIiwKKwkuZGF0ZSAgICAgICAgICAgICAg ID0gIjIwMTcwMzI1IiwKKwkubWFqb3IgICAgICAgICAgICAgID0gMSwKKwkubWlub3IgICAgICAg ICAgICAgID0gMCwKKwkucGF0Y2hsZXZlbCAgICAgICAgID0gMCwKKworCS5wcmltZV9mZF90b19o YW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwKKwkuZ2VtX3ByaW1lX2ltcG9ydCAg ID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCisJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBs aW1hX2dlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCisJLnByaW1lX2hhbmRsZV90b19mZCA9IGRy bV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAorCS5nZW1fcHJpbWVfZXhwb3J0ICAgPSBkcm1fZ2Vt X3ByaW1lX2V4cG9ydCwKKwkuZ2VtX3ByaW1lX3Jlc19vYmogID0gbGltYV9nZW1fcHJpbWVfcmVz X29iaiwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IGxpbWFfZ2VtX3ByaW1lX2dldF9zZ190 YWJsZSwKKwkuZ2VtX3ByaW1lX3ZtYXAgPSBsaW1hX2dlbV9wcmltZV92bWFwLAorCS5nZW1fcHJp bWVfdnVubWFwID0gbGltYV9nZW1fcHJpbWVfdnVubWFwLAorCS5nZW1fcHJpbWVfbW1hcCA9IGxp bWFfZ2VtX3ByaW1lX21tYXAsCit9OworCitzdGF0aWMgaW50IGxpbWFfcGRldl9wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldjsK KwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldjsKKwlpbnQgZXJyOworCisJbGRldiA9IGRldm1fa3ph bGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmxkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxkZXYp CisJCXJldHVybiAtRU5PTUVNOworCisJbGRldi0+cGRldiA9IHBkZXY7CisJbGRldi0+ZGV2ID0g JnBkZXYtPmRldjsKKwlsZGV2LT5pZCA9IChlbnVtIGxpbWFfZ3B1X2lkKW9mX2RldmljZV9nZXRf bWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxk ZXYpOworCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIERSTSBkZXZpY2UuICovCisJ ZGRldiA9IGRybV9kZXZfYWxsb2MoJmxpbWFfZHJtX2RyaXZlciwgJnBkZXYtPmRldik7CisJaWYg KElTX0VSUihkZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7CisKKwlkZGV2LT5kZXZfcHJp dmF0ZSA9IGxkZXY7CisJbGRldi0+ZGRldiA9IGRkZXY7CisKKwllcnIgPSBsaW1hX2RldmljZV9p bml0KGxkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmF0YWwgZXJy b3IgZHVyaW5nIEdQVSBpbml0XG4iKTsKKwkJZ290byBlcnJfb3V0MDsKKwl9CisKKwkvKgorCSAq IFJlZ2lzdGVyIHRoZSBEUk0gZGV2aWNlIHdpdGggdGhlIGNvcmUgYW5kIHRoZSBjb25uZWN0b3Jz IHdpdGgKKwkgKiBzeXNmcy4KKwkgKi8KKwllcnIgPSBkcm1fZGV2X3JlZ2lzdGVyKGRkZXYsIDAp OworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXQxOworCisJcmV0dXJuIDA7CisKK2Vycl9v dXQxOgorCWxpbWFfZGV2aWNlX2ZpbmkobGRldik7CitlcnJfb3V0MDoKKwlkcm1fZGV2X3B1dChk ZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxpbWFfcGRldl9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYg PSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9 IGxkZXYtPmRkZXY7CisKKwlkcm1fZGV2X3VucmVnaXN0ZXIoZGRldik7CisJbGltYV9kZXZpY2Vf ZmluaShsZGV2KTsKKwlkcm1fZGV2X3B1dChkZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxl ID0gImFybSxtYWxpLTQwMCIsIC5kYXRhID0gKHZvaWQgKilsaW1hX2dwdV9tYWxpNDAwIH0sCisJ eyAuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS00NTAiLCAuZGF0YSA9ICh2b2lkICopbGltYV9ncHVf bWFsaTQ1MCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHRfbWF0Y2gpOwor CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsaW1hX3BsYXRmb3JtX2RyaXZlciA9IHsK KwkucHJvYmUgICAgICA9IGxpbWFfcGRldl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGxpbWFfcGRl dl9yZW1vdmUsCisJLmRyaXZlciAgICAgPSB7CisJCS5uYW1lICAgPSAibGltYSIsCisJCS5vZl9t YXRjaF90YWJsZSA9IGR0X21hdGNoLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBsaW1hX2NoZWNr X21vZHVsZV9wYXJhbSh2b2lkKQoreworCWlmIChsaW1hX3NjaGVkX21heF90YXNrcyA8IDQpCisJ CWxpbWFfc2NoZWRfbWF4X3Rhc2tzID0gNDsKKwllbHNlCisJCWxpbWFfc2NoZWRfbWF4X3Rhc2tz ID0gcm91bmR1cF9wb3dfb2ZfdHdvKGxpbWFfc2NoZWRfbWF4X3Rhc2tzKTsKKworCWlmIChsaW1h X21heF9tZW0gPCAzMikKKwkJbGltYV9tYXhfbWVtID0gLTE7Cit9CisKK3N0YXRpYyBpbnQgX19p bml0IGxpbWFfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlsaW1hX2NoZWNrX21vZHVsZV9w YXJhbSgpOworCXJldCA9IGxpbWFfc2NoZWRfc2xhYl9pbml0KCk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbGltYV9wbGF0Zm9y bV9kcml2ZXIpOworCWlmIChyZXQpCisJCWxpbWFfc2NoZWRfc2xhYl9maW5pKCk7CisKKwlyZXR1 cm4gcmV0OworfQorbW9kdWxlX2luaXQobGltYV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0 IGxpbWFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsaW1hX3Bs YXRmb3JtX2RyaXZlcik7CisJbGltYV9zY2hlZF9zbGFiX2ZpbmkoKTsKK30KK21vZHVsZV9leGl0 KGxpbWFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkxpbWEgUHJvamVjdCBEZXZlbG9wZXJzIik7 CitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbWEgRFJNIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuaCBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi40NTViZjQ0YWUyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2Rydi5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTctMjAxOCBR aWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfRFJWX0hfXwor I2RlZmluZSBfX0xJTUFfRFJWX0hfXworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRl IDxkcm0vdHRtL3R0bV9leGVjYnVmX3V0aWwuaD4KKworI2luY2x1ZGUgImxpbWFfY3R4LmgiCisK K2V4dGVybiBpbnQgbGltYV9zY2hlZF90aW1lb3V0X21zOworZXh0ZXJuIGludCBsaW1hX3NjaGVk X21heF90YXNrczsKK2V4dGVybiBpbnQgbGltYV9tYXhfbWVtOworCitzdHJ1Y3QgbGltYV92bTsK K3N0cnVjdCBsaW1hX2JvOworc3RydWN0IGxpbWFfc2NoZWRfdGFzazsKKworc3RydWN0IGRybV9s aW1hX2dlbV9zdWJtaXRfYm87CisKKyNkZWZpbmUgRFJNX0ZJTEVfUEFHRV9PRkZTRVQgKDB4MTAw MDAwMDAwVUxMID4+IFBBR0VfU0hJRlQpCisKK3N0cnVjdCBsaW1hX2RybV9wcml2IHsKKwlzdHJ1 Y3QgbGltYV92bSAqdm07CisJc3RydWN0IGxpbWFfY3R4X21nciBjdHhfbWdyOworfTsKKworc3Ry dWN0IGxpbWFfc3VibWl0IHsKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsKKwlpbnQgcGlwZTsKKwl1 MzIgZmxhZ3M7CisKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1Ym1pdF9ibyAqYm9zOworCXN0cnVj dCB0dG1fdmFsaWRhdGVfYnVmZmVyICp2YnM7CisJdTMyIG5yX2JvczsKKworCXN0cnVjdCB0dG1f dmFsaWRhdGVfYnVmZmVyIHZtX3BkX3ZiOworCXN0cnVjdCB3d19hY3F1aXJlX2N0eCB0aWNrZXQ7 CisJc3RydWN0IGxpc3RfaGVhZCBkdXBsaWNhdGVzOworCXN0cnVjdCBsaXN0X2hlYWQgdmFsaWRh dGVkOworCisJdW5pb24gZHJtX2xpbWFfZ2VtX3N1Ym1pdF9kZXAgKmRlcHM7CisJdTMyIG5yX2Rl cHM7CisKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrOworCisJdWludDMyX3QgZmVuY2U7 CisJdWludDMyX3QgZG9uZTsKKwlpbnQgc3luY19mZDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3Ry dWN0IGxpbWFfZHJtX3ByaXYgKgordG9fbGltYV9kcm1fcHJpdihzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUpCit7CisJcmV0dXJuIGZpbGUtPmRyaXZlcl9wcml2OworfQorCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2dlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjVl NzY4ZDhkZDhhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9n ZW0uYwpAQCAtMCwwICsxLDQ4NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwu Y29tPiAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFw cGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeW5j X2ZpbGUuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgorCisjaW5jbHVkZSAibGltYV9k cnYuaCIKKyNpbmNsdWRlICJsaW1hX2dlbS5oIgorI2luY2x1ZGUgImxpbWFfZ2VtX3ByaW1lLmgi CisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfb2JqZWN0LmgiCisKK2ludCBs aW1hX2dlbV9jcmVhdGVfaGFuZGxlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSwKKwkJCSAgIHUzMiBzaXplLCB1MzIgZmxhZ3MsIHUzMiAqaGFuZGxlKQorewor CWludCBlcnI7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRl diA9IHRvX2xpbWFfZGV2KGRldik7CisKKwlibyA9IGxpbWFfYm9fY3JlYXRlKGxkZXYsIHNpemUs IGZsYWdzLCB0dG1fYm9fdHlwZV9kZXZpY2UsIE5VTEwsIE5VTEwpOworCWlmIChJU19FUlIoYm8p KQorCQlyZXR1cm4gUFRSX0VSUihibyk7CisKKwllcnIgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUo ZmlsZSwgJmJvLT5nZW0sIGhhbmRsZSk7CisKKwkvKiBkcm9wIHJlZmVyZW5jZSBmcm9tIGFsbG9j YXRlIC0gaGFuZGxlIGhvbGRzIGl0IG5vdyAqLworCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tl ZCgmYm8tPmdlbSk7CisKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGxpbWFfZ2VtX2ZyZWVfb2Jq ZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBsaW1hX2JvICpibyA9 IHRvX2xpbWFfYm8ob2JqKTsKKworCWlmICghbGlzdF9lbXB0eSgmYm8tPnZhKSkKKwkJZGV2X2Vy cihvYmotPmRldi0+ZGV2LCAibGltYSBnZW0gZnJlZSBibyBzdGlsbCBoYXMgdmFcbiIpOworCisJ bGltYV9ib191bnJlZihibyk7Cit9CisKK2ludCBsaW1hX2dlbV9vYmplY3Rfb3BlbihzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKm9iaiwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBs aW1hX2JvICpibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJp diA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7CisJc3RydWN0IGxpbWFfdm0gKnZtID0gcHJpdi0+ dm07CisJaW50IGVycjsKKworCWVyciA9IGxpbWFfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7CisJaWYg KGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGxpbWFfdm1fYm9fYWRkKHZtLCBibyk7CisK KwlsaW1hX2JvX3VucmVzZXJ2ZShibyk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX2dl bV9vYmplY3RfY2xvc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCBkcm1fZmls ZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19saW1hX2JvKG9iaik7CisJc3Ry dWN0IGxpbWFfZGV2aWNlICpkZXYgPSB0b19saW1hX2RldihvYmotPmRldik7CisJc3RydWN0IGxp bWFfZHJtX3ByaXYgKnByaXYgPSB0b19saW1hX2RybV9wcml2KGZpbGUpOworCXN0cnVjdCBsaW1h X3ZtICp2bSA9IHByaXYtPnZtOworCisJTElTVF9IRUFEKGxpc3QpOworCXN0cnVjdCB0dG1fdmFs aWRhdGVfYnVmZmVyIHR2X2JvLCB0dl9wZDsKKwlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggdGlja2V0 OworCWludCByOworCisJdHZfYm8uYm8gPSAmYm8tPnRibzsKKwl0dl9iby5udW1fc2hhcmVkID0g MTsKKwlsaXN0X2FkZCgmdHZfYm8uaGVhZCwgJmxpc3QpOworCisJdHZfcGQuYm8gPSAmdm0tPnBk LT50Ym87CisJdHZfcGQubnVtX3NoYXJlZCA9IDE7CisJbGlzdF9hZGQoJnR2X3BkLmhlYWQsICZs aXN0KTsKKworCXIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZsaXN0LCBmYWxz ZSwgTlVMTCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImxlZWtpbmcgYm8gdmEg YmVjYXVzZSB3ZSAiCisJCQkiZmFpbCB0byByZXNlcnZlIGJvICglZClcbiIsIHIpOworCQlyZXR1 cm47CisJfQorCisJbGltYV92bV9ib19kZWwodm0sIGJvKTsKKworCXR0bV9ldV9iYWNrb2ZmX3Jl c2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsKK30KKworaW50IGxpbWFfZ2VtX21tYXBfb2Zmc2V0 KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwgdTY0ICpvZmZzZXQpCit7CisJc3Ry dWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCisJb2JqID0g ZHJtX2dlbV9vYmplY3RfbG9va3VwKGZpbGUsIGhhbmRsZSk7CisJaWYgKCFvYmopCisJCXJldHVy biAtRU5PRU5UOworCisJYm8gPSB0b19saW1hX2JvKG9iaik7CisJKm9mZnNldCA9IGRybV92bWFf bm9kZV9vZmZzZXRfYWRkcigmYm8tPnRiby52bWFfbm9kZSk7CisKKwlkcm1fZ2VtX29iamVjdF9w dXRfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFfZ2VtX21tYXAoc3Ry dWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2OworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2OworCisJaWYgKHVu bGlrZWx5KHZtYS0+dm1fcGdvZmYgPCBEUk1fRklMRV9QQUdFX09GRlNFVCkpCisJCXJldHVybiAt RUlOVkFMOworCisJZmlsZV9wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCWRldiA9IGZpbGVf cHJpdi0+bWlub3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWlmICghbGltYV9nZW1fcHJpbWVfZG1hX2J1Zl9tbWFwKGZpbHAsIHZt YSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHR0bV9ib19tbWFwKGZpbHAsIHZtYSwgJmRldi0+ bW1hbi5iZGV2KTsKK30KKworaW50IGxpbWFfZ2VtX3ZhX21hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUsIHUzMiBoYW5kbGUsIHUzMiBmbGFncywgdTMyIHZhKQoreworCXN0cnVjdCBsaW1hX2RybV9w cml2ICpwcml2ID0gdG9fbGltYV9kcm1fcHJpdihmaWxlKTsKKwlzdHJ1Y3QgbGltYV92bSAqdm0g PSBwcml2LT52bTsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgbGltYV9i byAqYm87CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXY7CisJaW50IGVycjsKKworCUxJU1RfSEVB RChsaXN0KTsKKwlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciB0dl9ibywgdHZfcGQ7CisJc3Ry dWN0IHd3X2FjcXVpcmVfY3R4IHRpY2tldDsKKworCWlmICghUEFHRV9BTElHTkVEKHZhKSkKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgaGFu ZGxlKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlibyA9IHRvX2xpbWFfYm8o b2JqKTsKKwlkZXYgPSB0b19saW1hX2RldihvYmotPmRldik7CisKKwkvKiBjYXJlZnVsbHkgaGFu ZGxlIG92ZXJmbG93IHdoZW4gY2FsY3VsYXRlIHJhbmdlICovCisJaWYgKHZhIDwgZGV2LT52YV9z dGFydCB8fCBkZXYtPnZhX2VuZCAtIG9iai0+c2l6ZSA8IHZhKSB7CisJCWVyciA9IC1FSU5WQUw7 CisJCWdvdG8gb3V0OworCX0KKworCXR2X2JvLmJvID0gJmJvLT50Ym87CisJdHZfYm8ubnVtX3No YXJlZCA9IDE7CisJbGlzdF9hZGQoJnR2X2JvLmhlYWQsICZsaXN0KTsKKworCXR2X3BkLmJvID0g JnZtLT5wZC0+dGJvOworCXR2X3BkLm51bV9zaGFyZWQgPSAxOworCWxpc3RfYWRkKCZ0dl9wZC5o ZWFkLCAmbGlzdCk7CisKKwllcnIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZ0aWNrZXQsICZs aXN0LCBmYWxzZSwgTlVMTCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBsaW1h X3ZtX2JvX21hcCh2bSwgYm8sIHZhKTsKKworCXR0bV9ldV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0 aWNrZXQsICZsaXN0KTsKK291dDoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsK KwlyZXR1cm4gZXJyOworfQorCitpbnQgbGltYV9nZW1fdmFfdW5tYXAoc3RydWN0IGRybV9maWxl ICpmaWxlLCB1MzIgaGFuZGxlLCB1MzIgdmEpCit7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnBy aXYgPSB0b19saW1hX2RybV9wcml2KGZpbGUpOworCXN0cnVjdCBsaW1hX3ZtICp2bSA9IHByaXYt PnZtOworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBsaW1hX2JvICpibzsK KwlpbnQgZXJyOworCisJTElTVF9IRUFEKGxpc3QpOworCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVm ZmVyIHR2X2JvLCB0dl9wZDsKKwlzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggdGlja2V0OworCisJaWYg KCFQQUdFX0FMSUdORUQodmEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9iaiA9IGRybV9nZW1f b2JqZWN0X2xvb2t1cChmaWxlLCBoYW5kbGUpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOT0VO VDsKKworCWJvID0gdG9fbGltYV9ibyhvYmopOworCisJdHZfYm8uYm8gPSAmYm8tPnRibzsKKwl0 dl9iby5udW1fc2hhcmVkID0gMTsKKwlsaXN0X2FkZCgmdHZfYm8uaGVhZCwgJmxpc3QpOworCisJ dHZfcGQuYm8gPSAmdm0tPnBkLT50Ym87CisJdHZfcGQubnVtX3NoYXJlZCA9IDE7CisJbGlzdF9h ZGQoJnR2X3BkLmhlYWQsICZsaXN0KTsKKworCWVyciA9IHR0bV9ldV9yZXNlcnZlX2J1ZmZlcnMo JnRpY2tldCwgJmxpc3QsIGZhbHNlLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwor CWVyciA9IGxpbWFfdm1fYm9fdW5tYXAodm0sIGJvLCB2YSk7CisKKwl0dG1fZXVfYmFja29mZl9y ZXNlcnZhdGlvbigmdGlja2V0LCAmbGlzdCk7CitvdXQ6CisJZHJtX2dlbV9vYmplY3RfcHV0X3Vu bG9ja2VkKG9iaik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBsaW1hX2dlbV9zeW5j X2JvKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBsaW1hX2JvICpibywKKwkJ CSAgICBib29sIHdyaXRlLCBib29sIGV4cGxpY2l0KQoreworCWludCBlcnIgPSAwOworCisJaWYg KCF3cml0ZSkgeworCQllcnIgPSByZXNlcnZhdGlvbl9vYmplY3RfcmVzZXJ2ZV9zaGFyZWQoYm8t PnRiby5yZXN2LCAxKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogZXhw bGljaXQgc3luYyB1c2UgdXNlciBwYXNzZWQgZGVwIGZlbmNlICovCisJaWYgKGV4cGxpY2l0KQor CQlyZXR1cm4gMDsKKworCS8qIGltcGxpY2l0IHN5bmMgdXNlIGJvIGZlbmNlIGluIHJlc3Ygb2Jq ICovCisJaWYgKHdyaXRlKSB7CisJCXVuc2lnbmVkIG5yX2ZlbmNlczsKKwkJc3RydWN0IGRtYV9m ZW5jZSAqKmZlbmNlczsKKwkJaW50IGk7CisKKwkJZXJyID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dl dF9mZW5jZXNfcmN1KAorCQkJYm8tPnRiby5yZXN2LCBOVUxMLCAmbnJfZmVuY2VzLCAmZmVuY2Vz KTsKKwkJaWYgKGVyciB8fCAhbnJfZmVuY2VzKQorCQkJcmV0dXJuIGVycjsKKworCQlmb3IgKGkg PSAwOyBpIDwgbnJfZmVuY2VzOyBpKyspIHsKKwkJCWVyciA9IGxpbWFfc2NoZWRfdGFza19hZGRf ZGVwKHRhc2ssIGZlbmNlc1tpXSk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJ LyogZm9yIGVycm9yIGNhc2UgZnJlZSByZW1haW5pbmcgZmVuY2VzICovCisJCWZvciAoIDsgaSA8 IG5yX2ZlbmNlczsgaSsrKQorCQkJZG1hX2ZlbmNlX3B1dChmZW5jZXNbaV0pOworCisJCWtmcmVl KGZlbmNlcyk7CisJfQorCWVsc2UgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKwkJZmVu Y2UgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0X2V4Y2xfcmN1KGJvLT50Ym8ucmVzdik7CisJCWlm IChmZW5jZSkgeworCQkJZXJyID0gbGltYV9zY2hlZF90YXNrX2FkZF9kZXAodGFzaywgZmVuY2Up OworCQkJaWYgKGVycikKKwkJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJfQorCX0KKworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9nZW1fYWRkX2RlcHMoc3RydWN0IGxpbWFf Y3R4X21nciAqbWdyLCBzdHJ1Y3QgbGltYV9zdWJtaXQgKnN1Ym1pdCkKK3sKKwlpbnQgaSwgZXJy ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJtaXQtPm5yX2RlcHM7IGkrKykgeworCQl1bmlv biBkcm1fbGltYV9nZW1fc3VibWl0X2RlcCAqZGVwID0gc3VibWl0LT5kZXBzICsgaTsKKwkJc3Ry dWN0IGRtYV9mZW5jZSAqZmVuY2U7CisKKwkJaWYgKGRlcC0+dHlwZSA9PSBMSU1BX1NVQk1JVF9E RVBfRkVOQ0UpIHsKKwkJCWZlbmNlID0gbGltYV9jdHhfZ2V0X25hdGl2ZV9mZW5jZSgKKwkJCQlt Z3IsIGRlcC0+ZmVuY2UuY3R4LCBkZXAtPmZlbmNlLnBpcGUsCisJCQkJZGVwLT5mZW5jZS5zZXEp OworCQkJaWYgKElTX0VSUihmZW5jZSkpIHsKKwkJCQllcnIgPSBQVFJfRVJSKGZlbmNlKTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChkZXAtPnR5cGUgPT0gTElNQV9TVUJNSVRf REVQX1NZTkNfRkQpIHsKKwkJCWZlbmNlID0gc3luY19maWxlX2dldF9mZW5jZShkZXAtPnN5bmNf ZmQuZmQpOworCQkJaWYgKCFmZW5jZSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7 CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0K KworCQlpZiAoZmVuY2UpIHsKKwkJCWVyciA9IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN1Ym1p dC0+dGFzaywgZmVuY2UpOworCQkJaWYgKGVycikgeworCQkJCWRtYV9mZW5jZV9wdXQoZmVuY2Up OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBsaW1hX2dlbV9nZXRfc3luY19mZChzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlz dHJ1Y3Qgc3luY19maWxlICpzeW5jX2ZpbGU7CisJaW50IGZkOworCisJZmQgPSBnZXRfdW51c2Vk X2ZkX2ZsYWdzKE9fQ0xPRVhFQyk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGZkOworCisJc3lu Y19maWxlID0gc3luY19maWxlX2NyZWF0ZShmZW5jZSk7CisJaWYgKCFzeW5jX2ZpbGUpIHsKKwkJ cHV0X3VudXNlZF9mZChmZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZkX2luc3RhbGwo ZmQsIHN5bmNfZmlsZS0+ZmlsZSk7CisJcmV0dXJuIGZkOworfQorCitpbnQgbGltYV9nZW1fc3Vi bWl0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgc3RydWN0IGxpbWFfc3VibWl0ICpzdWJtaXQpCit7 CisJaW50IGksIGVyciA9IDA7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSB0b19saW1h X2RybV9wcml2KGZpbGUpOworCXN0cnVjdCBsaW1hX3ZtICp2bSA9IHByaXYtPnZtOworCisJSU5J VF9MSVNUX0hFQUQoJnN1Ym1pdC0+dmFsaWRhdGVkKTsKKwlJTklUX0xJU1RfSEVBRCgmc3VibWl0 LT5kdXBsaWNhdGVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJtaXQtPm5yX2JvczsgaSsrKSB7 CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCQlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1 Ym1pdF9ibyAqYm8gPSBzdWJtaXQtPmJvcyArIGk7CisJCXN0cnVjdCB0dG1fdmFsaWRhdGVfYnVm ZmVyICp2YiA9IHN1Ym1pdC0+dmJzICsgaTsKKworCQlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29r dXAoZmlsZSwgYm8tPmhhbmRsZSk7CisJCWlmICghb2JqKSB7CisJCQllcnIgPSAtRU5PRU5UOwor CQkJZ290byBvdXQwOworCQl9CisKKwkJdmItPmJvID0gJnRvX2xpbWFfYm8ob2JqKS0+dGJvOwor CQlpZiAoYm8tPmZsYWdzICYgTElNQV9TVUJNSVRfQk9fV1JJVEUpCisJCQl2Yi0+bnVtX3NoYXJl ZCA9IDA7CisJCWVsc2UKKwkJCXZiLT5udW1fc2hhcmVkID0gMTsKKwkJbGlzdF9hZGRfdGFpbCgm dmItPmhlYWQsICZzdWJtaXQtPnZhbGlkYXRlZCk7CisJfQorCisJc3VibWl0LT52bV9wZF92Yi5i byA9ICZ2bS0+cGQtPnRibzsKKwlzdWJtaXQtPnZtX3BkX3ZiLm51bV9zaGFyZWQgPSAxOworCWxp c3RfYWRkKCZzdWJtaXQtPnZtX3BkX3ZiLmhlYWQsICZzdWJtaXQtPnZhbGlkYXRlZCk7CisKKwll cnIgPSB0dG1fZXVfcmVzZXJ2ZV9idWZmZXJzKCZzdWJtaXQtPnRpY2tldCwgJnN1Ym1pdC0+dmFs aWRhdGVkLAorCQkJCSAgICAgdHJ1ZSwgJnN1Ym1pdC0+ZHVwbGljYXRlcyk7CisJaWYgKGVycikK KwkJZ290byBvdXQwOworCisJZXJyID0gbGltYV9zY2hlZF90YXNrX2luaXQoCisJCXN1Ym1pdC0+ dGFzaywgc3VibWl0LT5jdHgtPmNvbnRleHQgKyBzdWJtaXQtPnBpcGUsIHZtKTsKKwlpZiAoZXJy KQorCQlnb3RvIG91dDE7CisKKwllcnIgPSBsaW1hX2dlbV9hZGRfZGVwcygmcHJpdi0+Y3R4X21n ciwgc3VibWl0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDI7CisKKwlmb3IgKGkgPSAwOyBpIDwg c3VibWl0LT5ucl9ib3M7IGkrKykgeworCQlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmIg PSBzdWJtaXQtPnZicyArIGk7CisJCXN0cnVjdCBsaW1hX2JvICpibyA9IHR0bV90b19saW1hX2Jv KHZiLT5ibyk7CisJCWVyciA9IGxpbWFfZ2VtX3N5bmNfYm8oCisJCQlzdWJtaXQtPnRhc2ssIGJv LCB2Yi0+bnVtX3NoYXJlZCA9PSAwLAorCQkJc3VibWl0LT5mbGFncyAmIExJTUFfU1VCTUlUX0ZM QUdfRVhQTElDSVRfRkVOQ0UpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQyOworCX0KKworCWlm IChzdWJtaXQtPmZsYWdzICYgTElNQV9TVUJNSVRfRkxBR19TWU5DX0ZEX09VVCkgeworCQlpbnQg ZmQgPSBsaW1hX2dlbV9nZXRfc3luY19mZCgKKwkJCSZzdWJtaXQtPnRhc2stPmJhc2Uuc19mZW5j ZS0+ZmluaXNoZWQpOworCQlpZiAoZmQgPCAwKSB7CisJCQllcnIgPSBmZDsKKwkJCWdvdG8gb3V0 MjsKKwkJfQorCQlzdWJtaXQtPnN5bmNfZmQgPSBmZDsKKwl9CisKKwlzdWJtaXQtPmZlbmNlID0g bGltYV9zY2hlZF9jb250ZXh0X3F1ZXVlX3Rhc2soCisJCXN1Ym1pdC0+Y3R4LT5jb250ZXh0ICsg c3VibWl0LT5waXBlLCBzdWJtaXQtPnRhc2ssCisJCSZzdWJtaXQtPmRvbmUpOworCisJdHRtX2V1 X2ZlbmNlX2J1ZmZlcl9vYmplY3RzKCZzdWJtaXQtPnRpY2tldCwgJnN1Ym1pdC0+dmFsaWRhdGVk LAorCQkJCSAgICAmc3VibWl0LT50YXNrLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkKTsKKworb3V0 MjoKKwlpZiAoZXJyKQorCQlsaW1hX3NjaGVkX3Rhc2tfZmluaShzdWJtaXQtPnRhc2spOworb3V0 MToKKyAgICAgICAgaWYgKGVycikKKwkJdHRtX2V1X2JhY2tvZmZfcmVzZXJ2YXRpb24oJnN1Ym1p dC0+dGlja2V0LCAmc3VibWl0LT52YWxpZGF0ZWQpOworb3V0MDoKKwlmb3IgKGkgPSAwOyBpIDwg c3VibWl0LT5ucl9ib3M7IGkrKykgeworCQlzdHJ1Y3QgdHRtX3ZhbGlkYXRlX2J1ZmZlciAqdmIg PSBzdWJtaXQtPnZicyArIGk7CisJCWlmICghdmItPmJvKQorCQkJYnJlYWs7CisJCWRybV9nZW1f b2JqZWN0X3B1dF91bmxvY2tlZCgmdHRtX3RvX2xpbWFfYm8odmItPmJvKS0+Z2VtKTsKKwl9CisJ cmV0dXJuIGVycjsKK30KKworaW50IGxpbWFfZ2VtX3dhaXQoc3RydWN0IGRybV9maWxlICpmaWxl LCB1MzIgaGFuZGxlLCB1MzIgb3AsIHU2NCB0aW1lb3V0X25zKQoreworCWJvb2wgd3JpdGUgPSBv cCAmIExJTUFfR0VNX1dBSVRfV1JJVEU7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJ c3RydWN0IGxpbWFfYm8gKmJvOworCXNpZ25lZCBsb25nIHJldDsKKwl1bnNpZ25lZCBsb25nIHRp bWVvdXQ7CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgaGFuZGxlKTsKKwlp ZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwor CXRpbWVvdXQgPSB0aW1lb3V0X25zID8gbGltYV90aW1lb3V0X3RvX2ppZmZpZXModGltZW91dF9u cykgOiAwOworCisJcmV0ID0gbGltYV9ib19yZXNlcnZlKGJvLCB0cnVlKTsKKwlpZiAocmV0KQor CQlnb3RvIG91dDsKKworCS8qIG11c3QgdXNlIGxvbmcgZm9yIHJlc3VsdCBjaGVjayBiZWNhdXNl IGluIDY0Yml0IGFyY2ggaW50CisJICogd2lsbCBvdmVyZmxvdyBpZiB0aW1lb3V0IGlzIHRvbyBs YXJnZSBhbmQgZ2V0IDwwIHJlc3VsdAorCSAqLworCXJldCA9IHJlc2VydmF0aW9uX29iamVjdF93 YWl0X3RpbWVvdXRfcmN1KGJvLT50Ym8ucmVzdiwgd3JpdGUsIHRydWUsIHRpbWVvdXQpOworCWlm IChyZXQgPT0gMCkKKwkJcmV0ID0gdGltZW91dCA/IC1FVElNRURPVVQgOiAtRUJVU1k7CisJZWxz ZSBpZiAocmV0ID4gMCkKKwkJcmV0ID0gMDsKKworCWxpbWFfYm9fdW5yZXNlcnZlKGJvKTsKK291 dDoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gcmV0OworfQor CitpbnQgbGltYV9nZW1fZ2V0X21vZGlmaWVyKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhh bmRsZSwgdTY0ICptb2RpZmllcikKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlz dHJ1Y3QgbGltYV9ibyAqYm87CisKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwg aGFuZGxlKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlibyA9IHRvX2xpbWFf Ym8ob2JqKTsKKwkqbW9kaWZpZXIgPSBiby0+bW9kaWZpZXI7CisKKwlkcm1fZ2VtX29iamVjdF9w dXRfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFfZ2VtX3NldF9tb2Rp ZmllcihzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHUzMiBoYW5kbGUsIHU2NCBtb2RpZmllcikKK3sK KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgbGltYV9ibyAqYm87CisKKwlv YmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgaGFuZGxlKTsKKwlpZiAoIW9iaikKKwkJ cmV0dXJuIC1FTk9FTlQ7CisKKwlibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwliby0+bW9kaWZpZXIg PSBtb2RpZmllcjsKKworCWRybV9nZW1fb2JqZWN0X3B1dF91bmxvY2tlZChvYmopOworCXJldHVy biAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uaCBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5kYTY5NjhmYWI2YmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX2dlbS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTctMjAxOCBRaWFu ZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfR0VNX0hfXworI2Rl ZmluZSBfX0xJTUFfR0VNX0hfXworCitzdHJ1Y3QgbGltYV9ibzsKK3N0cnVjdCBsaW1hX3N1Ym1p dDsKKworc3RydWN0IGxpbWFfYm8gKmxpbWFfZ2VtX2NyZWF0ZV9ibyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LCB1MzIgc2l6ZSwgdTMyIGZsYWdzKTsKK2ludCBsaW1hX2dlbV9jcmVhdGVfaGFuZGxl KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJCSAgIHUz MiBzaXplLCB1MzIgZmxhZ3MsIHUzMiAqaGFuZGxlKTsKK3ZvaWQgbGltYV9nZW1fZnJlZV9vYmpl Y3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworaW50IGxpbWFfZ2VtX29iamVjdF9vcGVu KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwordm9p ZCBsaW1hX2dlbV9vYmplY3RfY2xvc2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSk7CitpbnQgbGltYV9nZW1fbW1hcF9vZmZzZXQoc3RydWN0IGRybV9m aWxlICpmaWxlLCB1MzIgaGFuZGxlLCB1NjQgKm9mZnNldCk7CitpbnQgbGltYV9nZW1fbW1hcChz dHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworaW50IGxpbWFf Z2VtX3ZhX21hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHUzMiBoYW5kbGUsIHUzMiBmbGFncywg dTMyIHZhKTsKK2ludCBsaW1hX2dlbV92YV91bm1hcChzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHUz MiBoYW5kbGUsIHUzMiB2YSk7CitpbnQgbGltYV9nZW1fc3VibWl0KHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSwgc3RydWN0IGxpbWFfc3VibWl0ICpzdWJtaXQpOworaW50IGxpbWFfZ2VtX3dhaXQoc3Ry dWN0IGRybV9maWxlICpmaWxlLCB1MzIgaGFuZGxlLCB1MzIgb3AsIHU2NCB0aW1lb3V0X25zKTsK K2ludCBsaW1hX2dlbV9nZXRfbW9kaWZpZXIoc3RydWN0IGRybV9maWxlICpmaWxlLCB1MzIgaGFu ZGxlLCB1NjQgKm1vZGlmaWVyKTsKK2ludCBsaW1hX2dlbV9zZXRfbW9kaWZpZXIoc3RydWN0IGRy bV9maWxlICpmaWxlLCB1MzIgaGFuZGxlLCB1NjQgbW9kaWZpZXIpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmMgYi9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uYjQ4M2I4YmMyNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9nZW1fcHJpbWUuYwpAQCAtMCwwICsxLDE0NCBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOCBRaWFuZyBZ dSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kcnYuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2ZpbGUuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVk ZSAibGltYV9vYmplY3QuaCIKKyNpbmNsdWRlICJsaW1hX2dlbV9wcmltZS5oIgorCitzdHJ1Y3Qg ZHJtX2dlbV9vYmplY3QgKmxpbWFfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSgKKwlzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJc3Ry dWN0IHNnX3RhYmxlICpzZ3QpCit7CisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdiA9 IGF0dGFjaC0+ZG1hYnVmLT5yZXN2OworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRldiA9IHRvX2xp bWFfZGV2KGRldik7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCisJd3dfbXV0ZXhfbG9jaygmcmVz di0+bG9jaywgTlVMTCk7CisKKwlibyA9IGxpbWFfYm9fY3JlYXRlKGxkZXYsIGF0dGFjaC0+ZG1h YnVmLT5zaXplLCAwLAorCQkJICAgIHR0bV9ib190eXBlX3NnLCBzZ3QsIHJlc3YpOworCWlmIChJ U19FUlIoYm8pKQorCQlnb3RvIGVycl9vdXQ7CisKKwl3d19tdXRleF91bmxvY2soJnJlc3YtPmxv Y2spOworCXJldHVybiAmYm8tPmdlbTsKKworZXJyX291dDoKKwl3d19tdXRleF91bmxvY2soJnJl c3YtPmxvY2spOworCXJldHVybiAodm9pZCAqKWJvOworfQorCitzdHJ1Y3QgcmVzZXJ2YXRpb25f b2JqZWN0ICpsaW1hX2dlbV9wcmltZV9yZXNfb2JqKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq KQoreworICAgICAgICBzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19saW1hX2JvKG9iaik7CisKKwly ZXR1cm4gYm8tPnRiby5yZXN2OworfQorCitzdHJ1Y3Qgc2dfdGFibGUgKmxpbWFfZ2VtX3ByaW1l X2dldF9zZ190YWJsZShzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgbGlt YV9ibyAqYm8gPSB0b19saW1hX2JvKG9iaik7CisJaW50IG5wYWdlcyA9IGJvLT50Ym8ubnVtX3Bh Z2VzOworCisJcmV0dXJuIGRybV9wcmltZV9wYWdlc190b19zZyhiby0+dGJvLnR0bS0+cGFnZXMs IG5wYWdlcyk7Cit9CisKK2ludCBsaW1hX2dlbV9wcmltZV9kbWFfYnVmX21tYXAoc3RydWN0IGZp bGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBkcm1fZmls ZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g cHJpdi0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSBkZXYtPmRldl9w cml2YXRlOworCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2ID0gJmxkZXYtPm1tYW4uYmRldjsK KwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7CisJc3RydWN0IGRybV92bWFfb2Zm c2V0X25vZGUgKm5vZGU7CisJaW50IHJldDsKKworCWRybV92bWFfb2Zmc2V0X2xvY2tfbG9va3Vw KCZiZGV2LT52bWFfbWFuYWdlcik7CisJbm9kZSA9IGRybV92bWFfb2Zmc2V0X2V4YWN0X2xvb2t1 cF9sb2NrZWQoJmJkZXYtPnZtYV9tYW5hZ2VyLAorCQkJCQkJICB2bWEtPnZtX3Bnb2ZmLAorCQkJ CQkJICB2bWFfcGFnZXModm1hKSk7CisJaWYgKGxpa2VseShub2RlKSkgeworCQlzdHJ1Y3QgdHRt X2J1ZmZlcl9vYmplY3QgKnRibyA9CisJCQljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IHR0bV9i dWZmZXJfb2JqZWN0LCB2bWFfbm9kZSk7CisJCXN0cnVjdCBsaW1hX2JvICpibyA9IGNvbnRhaW5l cl9vZih0Ym8sIHN0cnVjdCBsaW1hX2JvLCB0Ym8pOworCQlvYmogPSAmYm8tPmdlbTsKKwkJLyoK KwkJICogV2hlbiB0aGUgb2JqZWN0IGlzIGJlaW5nIGZyZWVkLCBhZnRlciBpdCBoaXRzIDAtcmVm Y250IGl0CisJCSAqIHByb2NlZWRzIHRvIHRlYXIgZG93biB0aGUgb2JqZWN0LiBJbiB0aGUgcHJv Y2VzcyBpdCB3aWxsCisJCSAqIGF0dGVtcHQgdG8gcmVtb3ZlIHRoZSBWTUEgb2Zmc2V0IGFuZCBz byBhY3F1aXJlIHRoaXMKKwkJICogbWdyLT52bV9sb2NrLiAgVGhlcmVmb3JlIGlmIHdlIGZpbmQg YW4gb2JqZWN0IHdpdGggYSAwLXJlZmNudAorCQkgKiB0aGF0IG1hdGNoZXMgb3VyIHJhbmdlLCB3 ZSBrbm93IGl0IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nCisJCSAqIGRlc3Ryb3llZCBhbmQg d2lsbCBiZSBmcmVlZCBhcyBzb29uIGFzIHdlIHJlbGVhc2UgdGhlIGxvY2sgLQorCQkgKiBzbyB3 ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGUgMC1yZWZjbnRlZCBvYmplY3QgYW5kIHRyZWF0IGl0IGFz CisJCSAqIGludmFsaWQuCisJCSAqLworCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZvYmot PnJlZmNvdW50KSkKKwkJCW9iaiA9IE5VTEw7CisJfQorCWRybV92bWFfb2Zmc2V0X3VubG9ja19s b29rdXAoJmJkZXYtPnZtYV9tYW5hZ2VyKTsKKworCWlmICghb2JqKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCS8qIG9ubHkgZm9yIGJ1ZmZlciBpbXBvcnRlZCBmcm9tIG90aGVyIGRldmljZSAqLwor CWlmICghb2JqLT5pbXBvcnRfYXR0YWNoKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0 OworCX0KKworCXJldCA9IGRtYV9idWZfbW1hcChvYmotPmRtYV9idWYsIHZtYSwgMCk7CisKK291 dDoKKwlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQob2JqKTsKKwlyZXR1cm4gcmV0OworfQor Cit2b2lkICpsaW1hX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQor eworCXN0cnVjdCBsaW1hX2JvICpibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwlpbnQgcmV0OworCisJ cmV0ID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50Ym8ubnVtX3BhZ2VzLCAmYm8tPmRt YV9idWZfdm1hcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCXJldHVy biBiby0+ZG1hX2J1Zl92bWFwLnZpcnR1YWw7Cit9CisKK3ZvaWQgbGltYV9nZW1fcHJpbWVfdnVu bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2b2lkICp2YWRkcikKK3sKKwlzdHJ1Y3Qg bGltYV9ibyAqYm8gPSB0b19saW1hX2JvKG9iaik7CisKKwl0dG1fYm9fa3VubWFwKCZiby0+ZG1h X2J1Zl92bWFwKTsKK30KKworaW50IGxpbWFfZ2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1f b2JqZWN0ICpvYmosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBsaW1h X2JvICpibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IHR0 bV90b19saW1hX2Rldihiby0+dGJvLmJkZXYpOworCWludCByZXQ7CisKKwlpZiAoIXZtYS0+dm1f ZmlsZSB8fCAhZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIENoZWNrIGZvciB2YWxpZCBz aXplLiAqLworCWlmIChvYmotPnNpemUgPCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpCisJ CXJldHVybiAtRUlOVkFMOworCisJdm1hLT52bV9wZ29mZiArPSBkcm1fdm1hX25vZGVfb2Zmc2V0 X2FkZHIoJmJvLT50Ym8udm1hX25vZGUpID4+IFBBR0VfU0hJRlQ7CisKKwkvKiBwcmltZSBtbWFw IGRvZXMgbm90IG5lZWQgdG8gY2hlY2sgYWNjZXNzLCBzbyBhbGxvdyBoZXJlICovCisJcmV0ID0g ZHJtX3ZtYV9ub2RlX2FsbG93KCZvYmotPnZtYV9ub2RlLCB2bWEtPnZtX2ZpbGUtPnByaXZhdGVf ZGF0YSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHR0bV9ib19tbWFwKHZt YS0+dm1fZmlsZSwgdm1hLCAmZGV2LT5tbWFuLmJkZXYpOworCWRybV92bWFfbm9kZV9yZXZva2Uo Jm9iai0+dm1hX25vZGUsIHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhKTsKKworCXJldHVybiBy ZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5o IGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW1fcHJpbWUuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA1ZGRiNTliMjM3YQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmgKQEAgLTAsMCArMSwxOCBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmln aHQgMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFf R0VNX1BSSU1FX0hfXworI2RlZmluZSBfX0xJTUFfR0VNX1BSSU1FX0hfXworCitzdHJ1Y3QgZHJt X2dlbV9vYmplY3QgKmxpbWFfZ2VtX3ByaW1lX2ltcG9ydF9zZ190YWJsZSgKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCisJc3RydWN0 IHNnX3RhYmxlICpzZ3QpOworc3RydWN0IHNnX3RhYmxlICpsaW1hX2dlbV9wcmltZV9nZXRfc2df dGFibGUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RydWN0IHJlc2VydmF0aW9uX29i amVjdCAqbGltYV9nZW1fcHJpbWVfcmVzX29iaihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7 Cit2b2lkICpsaW1hX2dlbV9wcmltZV92bWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsK K3ZvaWQgbGltYV9nZW1fcHJpbWVfdnVubWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB2 b2lkICp2YWRkcik7CitpbnQgbGltYV9nZW1fcHJpbWVfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmpl Y3QgKm9iaiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCitpbnQgbGltYV9nZW1fcHJp bWVfZG1hX2J1Zl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9n cC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uNTdlYmEyMjRmNzRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5jCkBAIC0wLDAgKzEsMjgwIEBACisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTgg UWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1 cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgor I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgorCisj aW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX2dwLmgiCisjaW5jbHVkZSAi bGltYV9yZWdzLmgiCisKKyNkZWZpbmUgZ3Bfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwg aXAtPmlvbWVtICsgTElNQV9HUF8jI3JlZykKKyNkZWZpbmUgZ3BfcmVhZChyZWcpIHJlYWRsKGlw LT5pb21lbSArIExJTUFfR1BfIyNyZWcpCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBsaW1hX2dwX2ly cV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGxpbWFfaXAgKmlwID0g ZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJc3RydWN0IGxpbWFf c2NoZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9ncDsKKwl1MzIgc3RhdGUg PSBncF9yZWFkKElOVF9TVEFUKTsKKwl1MzIgc3RhdHVzID0gZ3BfcmVhZChTVEFUVVMpOworCWJv b2wgZG9uZSA9IGZhbHNlOworCisJLyogZm9yIHNoYXJlZCBpcnEgY2FzZSAqLworCWlmICghc3Rh dGUpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0ZSAmIExJTUFfR1BfSVJRX01BU0tf RVJST1IpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImdwIGVycm9yIGlycSBzdGF0ZT0leCBzdGF0 dXM9JXhcbiIsCisJCQlzdGF0ZSwgc3RhdHVzKTsKKworCQkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRz IGJlZm9yZSBoYXJkIHJlc2V0ICovCisJCWdwX3dyaXRlKElOVF9NQVNLLCAwKTsKKworCQlwaXBl LT5lcnJvciA9IHRydWU7CisJCWRvbmUgPSB0cnVlOworCX0KKwllbHNlIHsKKwkJYm9vbCB2YWxp ZCA9IHN0YXRlICYgKExJTUFfR1BfSVJRX1ZTX0VORF9DTURfTFNUIHwKKwkJCQkgICAgICBMSU1B X0dQX0lSUV9QTEJVX0VORF9DTURfTFNUKTsKKwkJYm9vbCBhY3RpdmUgPSBzdGF0dXMgJiAoTElN QV9HUF9TVEFUVVNfVlNfQUNUSVZFIHwKKwkJCQkJTElNQV9HUF9TVEFUVVNfUExCVV9BQ1RJVkUp OworCQlkb25lID0gdmFsaWQgJiYgIWFjdGl2ZTsKKwl9CisKKwlncF93cml0ZShJTlRfQ0xFQVIs IHN0YXRlKTsKKworCWlmIChkb25lKQorCQlsaW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUp OworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBsaW1hX2dwX3NvZnRf cmVzZXRfYXN5bmMoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCWlmIChpcC0+ZGF0YS5hc3luY19y ZXNldCkKKwkJcmV0dXJuOworCisJZ3Bfd3JpdGUoSU5UX01BU0ssIDApOworCWdwX3dyaXRlKElO VF9DTEVBUiwgTElNQV9HUF9JUlFfUkVTRVRfQ09NUExFVEVEKTsKKwlncF93cml0ZShDTUQsIExJ TUFfR1BfQ01EX1NPRlRfUkVTRVQpOworCWlwLT5kYXRhLmFzeW5jX3Jlc2V0ID0gdHJ1ZTsKK30K Kworc3RhdGljIGludCBsaW1hX2dwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChzdHJ1Y3QgbGltYV9p cCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCB0aW1l b3V0OworCisJaWYgKCFpcC0+ZGF0YS5hc3luY19yZXNldCkKKwkJcmV0dXJuIDA7CisKKwlmb3Ig KHRpbWVvdXQgPSAxMDAwOyB0aW1lb3V0ID4gMDsgdGltZW91dC0tKSB7CisJCWlmIChncF9yZWFk KElOVF9SQVdTVEFUKSAmIExJTUFfR1BfSVJRX1JFU0VUX0NPTVBMRVRFRCkKKwkJCWJyZWFrOwor CX0KKwlpZiAoIXRpbWVvdXQpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImdwIHNvZnQgcmVzZXQg dGltZSBvdXRcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlncF93cml0ZShJTlRf Q0xFQVIsIExJTUFfR1BfSVJRX01BU0tfQUxMKTsKKwlncF93cml0ZShJTlRfTUFTSywgTElNQV9H UF9JUlFfTUFTS19VU0VEKTsKKworCWlwLT5kYXRhLmFzeW5jX3Jlc2V0ID0gZmFsc2U7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9ncF90YXNrX3ZhbGlkYXRlKHN0cnVjdCBsaW1h X3NjaGVkX3BpcGUgKnBpcGUsCisJCQkJIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7 CisJc3RydWN0IGRybV9saW1hX2dwX2ZyYW1lICpmcmFtZSA9IHRhc2stPmZyYW1lOworCXUzMiAq ZiA9IGZyYW1lLT5mcmFtZTsKKwkodm9pZClwaXBlOworCisJaWYgKGZbTElNQV9HUF9WU0NMX1NU QVJUX0FERFIgPj4gMl0gPgorCSAgICBmW0xJTUFfR1BfVlNDTF9FTkRfQUREUiA+PiAyXSB8fAor CSAgICBmW0xJTUFfR1BfUExCVUNMX1NUQVJUX0FERFIgPj4gMl0gPgorCSAgICBmW0xJTUFfR1Bf UExCVUNMX0VORF9BRERSID4+IDJdIHx8CisJICAgIGZbTElNQV9HUF9QTEJVX0FMTE9DX1NUQVJU X0FERFIgPj4gMl0gPgorCSAgICBmW0xJTUFfR1BfUExCVV9BTExPQ19FTkRfQUREUiA+PiAyXSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZltMSU1BX0dQX1ZTQ0xfU1RBUlRfQUREUiA+PiAy XSA9PQorCSAgICBmW0xJTUFfR1BfVlNDTF9FTkRfQUREUiA+PiAyXSAmJgorCSAgICBmW0xJTUFf R1BfUExCVUNMX1NUQVJUX0FERFIgPj4gMl0gPT0KKwkgICAgZltMSU1BX0dQX1BMQlVDTF9FTkRf QUREUiA+PiAyXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IHZvaWQgbGltYV9ncF90YXNrX3J1bihzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJ ICAgICBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKQoreworCXN0cnVjdCBsaW1hX2lwICpp cCA9IHBpcGUtPnByb2Nlc3NvclswXTsKKwlzdHJ1Y3QgZHJtX2xpbWFfZ3BfZnJhbWUgKmZyYW1l ID0gdGFzay0+ZnJhbWU7CisJdTMyICpmID0gZnJhbWUtPmZyYW1lOworCXUzMiBjbWQgPSAwOwor CWludCBpOworCisJaWYgKGZbTElNQV9HUF9WU0NMX1NUQVJUX0FERFIgPj4gMl0gIT0KKwkgICAg ZltMSU1BX0dQX1ZTQ0xfRU5EX0FERFIgPj4gMl0pCisJCWNtZCB8PSBMSU1BX0dQX0NNRF9TVEFS VF9WUzsKKwlpZiAoZltMSU1BX0dQX1BMQlVDTF9TVEFSVF9BRERSID4+IDJdICE9CisJICAgIGZb TElNQV9HUF9QTEJVQ0xfRU5EX0FERFIgPj4gMl0pCisJCWNtZCB8PSBMSU1BX0dQX0NNRF9TVEFS VF9QTEJVOworCisJLyogYmVmb3JlIGFueSBodyBvcHMsIHdhaXQgbGFzdCBzdWNjZXNzIHRhc2sg YXN5bmMgc29mdCByZXNldCAqLworCWxpbWFfZ3Bfc29mdF9yZXNldF9hc3luY193YWl0KGlwKTsK KworCWZvciAoaSA9IDA7IGkgPCBMSU1BX0dQX0ZSQU1FX1JFR19OVU07IGkrKykKKwkJd3JpdGVs KGZbaV0sIGlwLT5pb21lbSArIExJTUFfR1BfVlNDTF9TVEFSVF9BRERSICsgaSAqIDQpOworCisJ Z3Bfd3JpdGUoQ01ELCBMSU1BX0dQX0NNRF9VUERBVEVfUExCVV9BTExPQyk7CisJZ3Bfd3JpdGUo Q01ELCBjbWQpOworfQorCitzdGF0aWMgaW50IGxpbWFfZ3BfaGFyZF9yZXNldChzdHJ1Y3QgbGlt YV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCB0 aW1lb3V0OworCisJZ3Bfd3JpdGUoUEVSRl9DTlRfMF9MSU1JVCwgMHhDMEZGRTAwMCk7CisJZ3Bf d3JpdGUoSU5UX01BU0ssIDApOworCWdwX3dyaXRlKENNRCwgTElNQV9HUF9DTURfUkVTRVQpOwor CWZvciAodGltZW91dCA9IDEwMDA7IHRpbWVvdXQgPiAwOyB0aW1lb3V0LS0pIHsKKwkJZ3Bfd3Jp dGUoUEVSRl9DTlRfMF9MSU1JVCwgMHhDMDFBMDAwMCk7CisJCWlmIChncF9yZWFkKFBFUkZfQ05U XzBfTElNSVQpID09IDB4QzAxQTAwMDApCisJCQlicmVhazsKKwl9CisJaWYgKCF0aW1lb3V0KSB7 CisJCWRldl9lcnIoZGV2LT5kZXYsICJncCBoYXJkIHJlc2V0IHRpbWVvdXRcbiIpOworCQlyZXR1 cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlncF93cml0ZShQRVJGX0NOVF8wX0xJTUlULCAwKTsKKwln cF93cml0ZShJTlRfQ0xFQVIsIExJTUFfR1BfSVJRX01BU0tfQUxMKTsKKwlncF93cml0ZShJTlRf TUFTSywgTElNQV9HUF9JUlFfTUFTS19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZv aWQgbGltYV9ncF90YXNrX2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwls aW1hX2dwX3NvZnRfcmVzZXRfYXN5bmMocGlwZS0+cHJvY2Vzc29yWzBdKTsKK30KKworc3RhdGlj IHZvaWQgbGltYV9ncF90YXNrX2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7 CisJc3RydWN0IGxpbWFfaXAgKmlwID0gcGlwZS0+cHJvY2Vzc29yWzBdOworCisJZGV2X2Vycihp cC0+ZGV2LT5kZXYsICJncCB0YXNrIGVycm9yIGludF9zdGF0ZT0leCBzdGF0dXM9JXhcbiIsCisJ CWdwX3JlYWQoSU5UX1NUQVQpLCBncF9yZWFkKFNUQVRVUykpOworCisJbGltYV9ncF9oYXJkX3Jl c2V0KGlwKTsKK30KKworc3RhdGljIHZvaWQgbGltYV9ncF90YXNrX21tdV9lcnJvcihzdHJ1Y3Qg bGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWxpbWFfc2NoZWRfcGlwZV90YXNrX2RvbmUocGlw ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3BfcHJpbnRfdmVyc2lvbihzdHJ1Y3QgbGltYV9p cCAqaXApCit7CisJdTMyIHZlcnNpb24sIG1ham9yLCBtaW5vcjsKKwljaGFyICpuYW1lOworCisJ dmVyc2lvbiA9IGdwX3JlYWQoVkVSU0lPTik7CisJbWFqb3IgPSAodmVyc2lvbiA+PiA4KSAmIDB4 RkY7CisJbWlub3IgPSB2ZXJzaW9uICYgMHhGRjsKKwlzd2l0Y2ggKHZlcnNpb24gPj4gMTYpIHsK KwljYXNlIDB4QTA3OgorCSAgICBuYW1lID0gIm1hbGkyMDAiOworCQlicmVhazsKKwljYXNlIDB4 QzA3OgorCQluYW1lID0gIm1hbGkzMDAiOworCQlicmVhazsKKwljYXNlIDB4QjA3OgorCQluYW1l ID0gIm1hbGk0MDAiOworCQlicmVhazsKKwljYXNlIDB4RDA3OgorCQluYW1lID0gIm1hbGk0NTAi OworCQlicmVhazsKKwlkZWZhdWx0OgorCQluYW1lID0gInVua25vdyI7CisJCWJyZWFrOworCX0K KwlkZXZfaW5mbyhpcC0+ZGV2LT5kZXYsICIlcyAtICVzIHZlcnNpb24gbWFqb3IgJWQgbWlub3Ig JWRcbiIsCisJCSBsaW1hX2lwX25hbWUoaXApLCBuYW1lLCBtYWpvciwgbWlub3IpOworfQorCitz dGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmxpbWFfZ3BfdGFza19zbGFiID0gTlVMTDsKK3N0YXRp YyBpbnQgbGltYV9ncF90YXNrX3NsYWJfcmVmY250ID0gMDsKKworaW50IGxpbWFfZ3BfaW5pdChz dHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2 OworCWludCBlcnI7CisKKwlsaW1hX2dwX3ByaW50X3ZlcnNpb24oaXApOworCisJaXAtPmRhdGEu YXN5bmNfcmVzZXQgPSBmYWxzZTsKKwlsaW1hX2dwX3NvZnRfcmVzZXRfYXN5bmMoaXApOworCWVy ciA9IGxpbWFfZ3Bfc29mdF9yZXNldF9hc3luY193YWl0KGlwKTsKKwlpZiAoZXJyKQorCQlyZXR1 cm4gZXJyOworCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYtPmRldiwgaXAtPmlycSwgbGlt YV9ncF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgbGltYV9pcF9uYW1lKGlw KSwgaXApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImdwICVzIGZhaWwgdG8g cmVxdWVzdCBpcnFcbiIsCisJCQlsaW1hX2lwX25hbWUoaXApKTsKKwkJcmV0dXJuIGVycjsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX2dwX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlw KQoreworCit9CisKK2ludCBsaW1hX2dwX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRl dikKK3sKKwlpbnQgZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJtX2xpbWFfZ3BfZnJhbWUp OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVf Z3A7CisKKwlpZiAoIWxpbWFfZ3BfdGFza19zbGFiKSB7CisJCWxpbWFfZ3BfdGFza19zbGFiID0g a21lbV9jYWNoZV9jcmVhdGVfdXNlcmNvcHkoCisJCQkibGltYV9ncF90YXNrIiwgc2l6ZW9mKHN0 cnVjdCBsaW1hX3NjaGVkX3Rhc2spICsgZnJhbWVfc2l6ZSwKKwkJCTAsIFNMQUJfSFdDQUNIRV9B TElHTiwgc2l6ZW9mKHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2spLAorCQkJZnJhbWVfc2l6ZSwgTlVM TCk7CisJCWlmICghbGltYV9ncF90YXNrX3NsYWIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJ bGltYV9ncF90YXNrX3NsYWJfcmVmY250Kys7CisKKwlwaXBlLT5mcmFtZV9zaXplID0gZnJhbWVf c2l6ZTsKKwlwaXBlLT50YXNrX3NsYWIgPSBsaW1hX2dwX3Rhc2tfc2xhYjsKKworCXBpcGUtPnRh c2tfdmFsaWRhdGUgPSBsaW1hX2dwX3Rhc2tfdmFsaWRhdGU7CisJcGlwZS0+dGFza19ydW4gPSBs aW1hX2dwX3Rhc2tfcnVuOworCXBpcGUtPnRhc2tfZmluaSA9IGxpbWFfZ3BfdGFza19maW5pOwor CXBpcGUtPnRhc2tfZXJyb3IgPSBsaW1hX2dwX3Rhc2tfZXJyb3I7CisJcGlwZS0+dGFza19tbXVf ZXJyb3IgPSBsaW1hX2dwX3Rhc2tfbW11X2Vycm9yOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQg bGltYV9ncF9waXBlX2Zpbmkoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJaWYgKCEtLWxp bWFfZ3BfdGFza19zbGFiX3JlZmNudCkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kobGltYV9ncF90 YXNrX3NsYWIpOworCQlsaW1hX2dwX3Rhc2tfc2xhYiA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9ncC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTViYzQ4 ZWM3NjAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5o CkBAIC0wLDAgKzEsMTYgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9S IE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTctMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNv bT4gKi8KKworI2lmbmRlZiBfX0xJTUFfR1BfSF9fCisjZGVmaW5lIF9fTElNQV9HUF9IX18KKwor c3RydWN0IGxpbWFfaXA7CitzdHJ1Y3QgbGltYV9kZXZpY2U7CisKK2ludCBsaW1hX2dwX2luaXQo c3RydWN0IGxpbWFfaXAgKmlwKTsKK3ZvaWQgbGltYV9ncF9maW5pKHN0cnVjdCBsaW1hX2lwICpp cCk7CisKK2ludCBsaW1hX2dwX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldik7Cit2 b2lkIGxpbWFfZ3BfcGlwZV9maW5pKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmMgYi9kcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5lN2NkZWM3MjBlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmMKQEAgLTAsMCArMSw3OSBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE4 IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisj aW5jbHVkZSAibGltYV9sMl9jYWNoZS5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisjZGVm aW5lIGwyX2NhY2hlX3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIExJ TUFfTDJfQ0FDSEVfIyNyZWcpCisjZGVmaW5lIGwyX2NhY2hlX3JlYWQocmVnKSByZWFkbChpcC0+ aW9tZW0gKyBMSU1BX0wyX0NBQ0hFXyMjcmVnKQorCitzdGF0aWMgaW50IGxpbWFfbDJfY2FjaGVf d2FpdF9pZGxlKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpbnQgdGltZW91dDsKKwlzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisKKwlmb3IgKHRpbWVvdXQgPSAxMDAwMDA7IHRp bWVvdXQgPiAwOyB0aW1lb3V0LS0pIHsKKwkgICAgaWYgKCEobDJfY2FjaGVfcmVhZChTVEFUVVMp ICYgTElNQV9MMl9DQUNIRV9TVEFUVVNfQ09NTUFORF9CVVNZKSkKKwkJYnJlYWs7CisJfQorCWlm ICghdGltZW91dCkgeworCSAgICBkZXZfZXJyKGRldi0+ZGV2LCAibDIgY2FjaGUgd2FpdCBjb21t YW5kIHRpbWVvdXRcbiIpOworCSAgICByZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisJcmV0dXJuIDA7 Cit9CisKK2ludCBsaW1hX2wyX2NhY2hlX2ZsdXNoKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlp bnQgcmV0OworCisJc3Bpbl9sb2NrKCZpcC0+ZGF0YS5sb2NrKTsKKwlsMl9jYWNoZV93cml0ZShD T01NQU5ELCBMSU1BX0wyX0NBQ0hFX0NPTU1BTkRfQ0xFQVJfQUxMKTsKKwlyZXQgPSBsaW1hX2wy X2NhY2hlX3dhaXRfaWRsZShpcCk7CisJc3Bpbl91bmxvY2soJmlwLT5kYXRhLmxvY2spOworCXJl dHVybiByZXQ7Cit9CisKK2ludCBsaW1hX2wyX2NhY2hlX2luaXQoc3RydWN0IGxpbWFfaXAgKmlw KQoreworCWludCBpLCBlcnI7CisJdTMyIHNpemU7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYg PSBpcC0+ZGV2OworCisJLyogbDJfY2FjaGUyIG9ubHkgZXhpc3RzIHdoZW4gb25lIG9mIFBQNC03 IHByZXNlbnQgKi8KKwlpZiAoaXAtPmlkID09IGxpbWFfaXBfbDJfY2FjaGUyKSB7CisJCWZvciAo aSA9IGxpbWFfaXBfcHA0OyBpIDw9IGxpbWFfaXBfcHA3OyBpKyspIHsKKwkJCWlmIChkZXYtPmlw W2ldLnByZXNlbnQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPiBsaW1hX2lwX3BwNykKKwkJ CXJldHVybiAtRU5PREVWOworCX0KKworCXNwaW5fbG9ja19pbml0KCZpcC0+ZGF0YS5sb2NrKTsK KworCXNpemUgPSBsMl9jYWNoZV9yZWFkKFNJWkUpOworCWRldl9pbmZvKGRldi0+ZGV2LCAibDIg Y2FjaGUgJXVLLCAldS13YXksICV1Ynl0ZSBjYWNoZSBsaW5lLCAldWJpdCBleHRlcm5hbCBidXNc biIsCisJCSAxIDw8ICgoKHNpemUgPj4gMTYpICYgMHhmZikgLSAxMCksCisJCSAxIDw8ICgoc2l6 ZSA+PiA4KSAmIDB4ZmYpLAorCQkgMSA8PCAoc2l6ZSAmIDB4ZmYpLAorCQkgMSA8PCAoKHNpemUg Pj4gMjQpICYgMHhmZikpOworCisJZXJyID0gbGltYV9sMl9jYWNoZV9mbHVzaChpcCk7CisJaWYg KGVycikKKwkJcmV0dXJuIGVycjsKKworCWwyX2NhY2hlX3dyaXRlKEVOQUJMRSwgTElNQV9MMl9D QUNIRV9FTkFCTEVfQUNDRVNTIHwgTElNQV9MMl9DQUNIRV9FTkFCTEVfUkVBRF9BTExPQ0FURSk7 CisJbDJfY2FjaGVfd3JpdGUoTUFYX1JFQURTLCAweDFjKTsKKworCXJldHVybiAwOworfQorCit2 b2lkIGxpbWFfbDJfY2FjaGVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisKK30KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaCBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjJmZjkxZWFmZWZiZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfbDJfY2FjaGUuaApAQCAtMCwwICsxLDE0IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTggUWlh bmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0wyX0NBQ0hFX0hf XworI2RlZmluZSBfX0xJTUFfTDJfQ0FDSEVfSF9fCisKK3N0cnVjdCBsaW1hX2lwOworCitpbnQg bGltYV9sMl9jYWNoZV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfbDJfY2Fj aGVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCitpbnQgbGltYV9sMl9jYWNoZV9mbHVzaChz dHJ1Y3QgbGltYV9pcCAqaXApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfbW11LmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjM0ZmI5MGE0Mjg1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9tbXUuYwpAQCAtMCwwICsxLDEz NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5 cmlnaHQgMjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVk ZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGlt YV9tbXUuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5jbHVkZSAibGltYV9vYmplY3QuaCIK KyNpbmNsdWRlICJsaW1hX3JlZ3MuaCIKKworI2RlZmluZSBtbXVfd3JpdGUocmVnLCBkYXRhKSB3 cml0ZWwoZGF0YSwgaXAtPmlvbWVtICsgTElNQV9NTVVfIyNyZWcpCisjZGVmaW5lIG1tdV9yZWFk KHJlZykgcmVhZGwoaXAtPmlvbWVtICsgTElNQV9NTVVfIyNyZWcpCisKKyNkZWZpbmUgbGltYV9t bXVfc2VuZF9jb21tYW5kKGNvbW1hbmQsIGNvbmRpdGlvbikJICAgICBcCisoewkJCQkJCQkgICAg IFwKKwlpbnQgX190aW1lb3V0LCBfX3JldCA9IDA7CQkJICAgICBcCisJCQkJCQkJICAgICBcCisJ bW11X3dyaXRlKENPTU1BTkQsIGNvbW1hbmQpOwkJCSAgICAgXAorCWZvciAoX190aW1lb3V0ID0g MTAwMDsgX190aW1lb3V0ID4gMDsgX190aW1lb3V0LS0pIHsgXAorCQlpZiAoY29uZGl0aW9uKQkJ CQkgICAgIFwKKwkJCWJyZWFrOwkJCQkgICAgIFwKKwl9CQkJCQkJICAgICBcCisJaWYgKCFfX3Rp bWVvdXQpCXsJCQkJICAgICBcCisJCWRldl9lcnIoZGV2LT5kZXYsICJtbXUgY29tbWFuZCAleCB0 aW1lb3V0XG4iLCBjb21tYW5kKTsgXAorCQlfX3JldCA9IC1FVElNRURPVVQ7CQkJICAgICBcCisJ fQkJCQkJCSAgICAgXAorCV9fcmV0OwkJCQkJCSAgICAgXAorfSkKKworc3RhdGljIGlycXJldHVy bl90IGxpbWFfbW11X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0 IGxpbWFfaXAgKmlwID0gZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7 CisJdTMyIHN0YXR1cyA9IG1tdV9yZWFkKElOVF9TVEFUVVMpOworCXN0cnVjdCBsaW1hX3NjaGVk X3BpcGUgKnBpcGU7CisKKwkvKiBmb3Igc2hhcmVkIGlycSBjYXNlICovCisJaWYgKCFzdGF0dXMp CisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBMSU1BX01NVV9JTlRfUEFHRV9G QVVMVCkgeworCQl1MzIgZmF1bHQgPSBtbXVfcmVhZChQQUdFX0ZBVUxUX0FERFIpOworCQlkZXZf ZXJyKGRldi0+ZGV2LCAibW11IHBhZ2UgZmF1bHQgYXQgMHgleCBmcm9tIGJ1cyBpZCAlZCBvZiB0 eXBlICVzIG9uICVzXG4iLAorCQkJZmF1bHQsIExJTUFfTU1VX1NUQVRVU19CVVNfSUQoc3RhdHVz KSwKKwkJCXN0YXR1cyAmIExJTUFfTU1VX1NUQVRVU19QQUdFX0ZBVUxUX0lTX1dSSVRFID8gIndy aXRlIiA6ICJyZWFkIiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCX0KKworCWlmIChzdGF0dXMg JiBMSU1BX01NVV9JTlRfUkVBRF9CVVNfRVJST1IpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgIm1t dSAlcyBpcnEgYnVzIGVycm9yXG4iLCBsaW1hX2lwX25hbWUoaXApKTsKKwl9CisKKwkvKiBtYXNr IGFsbCBpbnRlcnJ1cHRzIGJlZm9yZSByZXN1bWUgKi8KKwltbXVfd3JpdGUoSU5UX01BU0ssIDAp OworCW1tdV93cml0ZShJTlRfQ0xFQVIsIHN0YXR1cyk7CisKKwlwaXBlID0gZGV2LT5waXBlICsg KGlwLT5pZCA9PSBsaW1hX2lwX2dwbW11ID8gbGltYV9waXBlX2dwIDogbGltYV9waXBlX3BwKTsK KwlsaW1hX3NjaGVkX3BpcGVfbW11X2Vycm9yKHBpcGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVE OworfQorCitpbnQgbGltYV9tbXVfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0 IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7CisKKwlpZiAoaXAtPmlkID09 IGxpbWFfaXBfcHBtbXVfYmNhc3QpCisJCXJldHVybiAwOworCisJbW11X3dyaXRlKERURV9BRERS LCAweENBRkVCQUJFKTsKKwlpZiAobW11X3JlYWQoRFRFX0FERFIpICE9IDB4Q0FGRUIwMDApIHsK KwkJZGV2X2VycihkZXYtPmRldiwgIm1tdSAlcyBkdGUgd3JpdGUgdGVzdCBmYWlsXG4iLCBsaW1h X2lwX25hbWUoaXApKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZXJyID0gbGltYV9tbXVfc2Vu ZF9jb21tYW5kKExJTUFfTU1VX0NPTU1BTkRfSEFSRF9SRVNFVCwgbW11X3JlYWQoRFRFX0FERFIp ID09IDApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBkZXZtX3JlcXVlc3Rf aXJxKGRldi0+ZGV2LCBpcC0+aXJxLCBsaW1hX21tdV9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJ UlFGX1NIQVJFRCwgbGltYV9pcF9uYW1lKGlwKSwgaXApOworCWlmIChlcnIpIHsKKwkJZGV2X2Vy cihkZXYtPmRldiwgIm1tdSAlcyBmYWlsIHRvIHJlcXVlc3QgaXJxXG4iLCBsaW1hX2lwX25hbWUo aXApKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltbXVfd3JpdGUoSU5UX01BU0ssIExJTUFfTU1V X0lOVF9QQUdFX0ZBVUxUIHwgTElNQV9NTVVfSU5UX1JFQURfQlVTX0VSUk9SKTsKKwltbXVfd3Jp dGUoRFRFX0FERFIsICpsaW1hX2JvX2dldF9wYWdlcyhkZXYtPmVtcHR5X3ZtLT5wZCkpOworCXJl dHVybiBsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9FTkFCTEVfUEFHSU5H LAorCQkJCSAgICAgbW11X3JlYWQoU1RBVFVTKSAmIExJTUFfTU1VX1NUQVRVU19QQUdJTkdfRU5B QkxFRCk7Cit9CisKK3ZvaWQgbGltYV9tbXVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisK K30KKwordm9pZCBsaW1hX21tdV9zd2l0Y2hfdm0oc3RydWN0IGxpbWFfaXAgKmlwLCBzdHJ1Y3Qg bGltYV92bSAqdm0pCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCisJ bGltYV9tbXVfc2VuZF9jb21tYW5kKExJTUFfTU1VX0NPTU1BTkRfRU5BQkxFX1NUQUxMLAorCQkJ ICAgICAgbW11X3JlYWQoU1RBVFVTKSAmIExJTUFfTU1VX1NUQVRVU19TVEFMTF9BQ1RJVkUpOwor CisJaWYgKHZtKQorCQltbXVfd3JpdGUoRFRFX0FERFIsICpsaW1hX2JvX2dldF9wYWdlcyh2bS0+ cGQpKTsKKworCS8qIGZsdXNoIHRoZSBUTEIgKi8KKwltbXVfd3JpdGUoQ09NTUFORCwgTElNQV9N TVVfQ09NTUFORF9aQVBfQ0FDSEUpOworCisJbGltYV9tbXVfc2VuZF9jb21tYW5kKExJTUFfTU1V X0NPTU1BTkRfRElTQUJMRV9TVEFMTCwKKwkJCSAgICAgICEobW11X3JlYWQoU1RBVFVTKSAmIExJ TUFfTU1VX1NUQVRVU19TVEFMTF9BQ1RJVkUpKTsKK30KKwordm9pZCBsaW1hX21tdV9wYWdlX2Zh dWx0X3Jlc3VtZShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpk ZXYgPSBpcC0+ZGV2OworCXUzMiBzdGF0dXMgPSBtbXVfcmVhZChTVEFUVVMpOworCisJaWYgKHN0 YXR1cyAmIExJTUFfTU1VX1NUQVRVU19QQUdFX0ZBVUxUX0FDVElWRSkgeworCQlkZXZfaW5mbyhk ZXYtPmRldiwgIm1tdSByZXN1bWVcbiIpOworCisJCW1tdV93cml0ZShJTlRfTUFTSywgMCk7CisJ CW1tdV93cml0ZShEVEVfQUREUiwgMHhDQUZFQkFCRSk7CisJCWxpbWFfbW11X3NlbmRfY29tbWFu ZChMSU1BX01NVV9DT01NQU5EX0hBUkRfUkVTRVQsIG1tdV9yZWFkKERURV9BRERSKSA9PSAwKTsK KwkgICAgICAgIG1tdV93cml0ZShJTlRfTUFTSywgTElNQV9NTVVfSU5UX1BBR0VfRkFVTFQgfCBM SU1BX01NVV9JTlRfUkVBRF9CVVNfRVJST1IpOworCQltbXVfd3JpdGUoRFRFX0FERFIsICpsaW1h X2JvX2dldF9wYWdlcyhkZXYtPmVtcHR5X3ZtLT5wZCkpOworCQlsaW1hX21tdV9zZW5kX2NvbW1h bmQoTElNQV9NTVVfQ09NTUFORF9FTkFCTEVfUEFHSU5HLAorCQkJCSAgICAgIG1tdV9yZWFkKFNU QVRVUykgJiBMSU1BX01NVV9TVEFUVVNfUEFHSU5HX0VOQUJMRUQpOworCX0KK30KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmggYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX21tdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2Ex NzNiNjBmYzczCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9t bXUuaApAQCAtMCwwICsxLDE2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3LTIwMTggUWlhbmcgWXUgPHl1cTgyNUBnbWFp bC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX01NVV9IX18KKyNkZWZpbmUgX19MSU1BX01NVV9I X18KKworc3RydWN0IGxpbWFfaXA7CitzdHJ1Y3QgbGltYV92bTsKKworaW50IGxpbWFfbW11X2lu aXQoc3RydWN0IGxpbWFfaXAgKmlwKTsKK3ZvaWQgbGltYV9tbXVfZmluaShzdHJ1Y3QgbGltYV9p cCAqaXApOworCit2b2lkIGxpbWFfbW11X3N3aXRjaF92bShzdHJ1Y3QgbGltYV9pcCAqaXAsIHN0 cnVjdCBsaW1hX3ZtICp2bSk7Cit2b2lkIGxpbWFfbW11X3BhZ2VfZmF1bHRfcmVzdW1lKHN0cnVj dCBsaW1hX2lwICppcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zNGQ5YjRkYzJkZjYKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5jCkBAIC0wLDAg KzEsMTAzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8q IENvcHlyaWdodCAyMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVk ZSA8ZHJtL2RybV9wcmltZS5oPgorI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+CisKKyNpbmNs dWRlICJsaW1hX29iamVjdC5oIgorCitzdGF0aWMgdm9pZCBsaW1hX2JvX2luaXRfcGxhY2VtZW50 KHN0cnVjdCBsaW1hX2JvICpibykKK3sKKwlzdHJ1Y3QgdHRtX3BsYWNlbWVudCAqcGxhY2VtZW50 ID0gJmJvLT5wbGFjZW1lbnQ7CisJc3RydWN0IHR0bV9wbGFjZSAqcGxhY2UgPSAmYm8tPnBsYWNl OworCisJcGxhY2UtPmZwZm4gPSAwOworCXBsYWNlLT5scGZuID0gMDsKKwlwbGFjZS0+ZmxhZ3Mg PSBUVE1fUExfRkxBR19UVCB8IFRUTV9QTF9GTEFHX1dDOworCisJLyogcGluIGFsbCBibyBmb3Ig bm93ICovCisJcGxhY2UtPmZsYWdzIHw9IFRUTV9QTF9GTEFHX05PX0VWSUNUOworCisJcGxhY2Vt ZW50LT5udW1fcGxhY2VtZW50ID0gMTsKKwlwbGFjZW1lbnQtPnBsYWNlbWVudCA9IHBsYWNlOwor CisJcGxhY2VtZW50LT5udW1fYnVzeV9wbGFjZW1lbnQgPSAxOworCXBsYWNlbWVudC0+YnVzeV9w bGFjZW1lbnQgPSBwbGFjZTsKK30KKworc3RhdGljIHZvaWQgbGltYV9ib19kZXN0cm95KHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKQoreworCXN0cnVjdCBsaW1hX2JvICpibyA9IHR0bV90 b19saW1hX2JvKHRibyk7CisKKwlpZiAoYm8tPmdlbS5pbXBvcnRfYXR0YWNoKQorCQlkcm1fcHJp bWVfZ2VtX2Rlc3Ryb3koJmJvLT5nZW0sIGJvLT50Ym8uc2cpOworCWRybV9nZW1fb2JqZWN0X3Jl bGVhc2UoJmJvLT5nZW0pOworCWtmcmVlKGJvKTsKK30KKworc3RydWN0IGxpbWFfYm8gKmxpbWFf Ym9fY3JlYXRlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2LCB1NjQgc2l6ZSwKKwkJCSAgICAgICB1 MzIgZmxhZ3MsIGVudW0gdHRtX2JvX3R5cGUgdHlwZSwKKwkJCSAgICAgICBzdHJ1Y3Qgc2dfdGFi bGUgKnNnLAorCQkJICAgICAgIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3YpCit7CisJ c3RydWN0IGxpbWFfYm8gKmJvOworCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuOwor CXNpemVfdCBhY2Nfc2l6ZTsKKwlpbnQgZXJyOworCisJc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7 CisJbWFuID0gZGV2LT5tbWFuLmJkZXYubWFuICsgVFRNX1BMX1RUOworCWlmIChzaXplID49ICht YW4tPnNpemUgPDwgUEFHRV9TSElGVCkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJ YWNjX3NpemUgPSB0dG1fYm9fZG1hX2FjY19zaXplKCZkZXYtPm1tYW4uYmRldiwgc2l6ZSwKKwkJ CQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsaW1hX2JvKSk7CisKKwlibyA9IGt6YWxsb2Moc2l6ZW9m KCpibyksIEdGUF9LRVJORUwpOworCWlmICghYm8pCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p OworCisJZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KGRldi0+ZGRldiwgJmJvLT5nZW0sIHNp emUpOworCisJSU5JVF9MSVNUX0hFQUQoJmJvLT52YSk7CisKKwliby0+dGJvLmJkZXYgPSAmZGV2 LT5tbWFuLmJkZXY7CisKKwlsaW1hX2JvX2luaXRfcGxhY2VtZW50KGJvKTsKKworCWVyciA9IHR0 bV9ib19pbml0KCZkZXYtPm1tYW4uYmRldiwgJmJvLT50Ym8sIHNpemUsIHR5cGUsCisJCQkgICZi by0+cGxhY2VtZW50LCAwLCB0eXBlICE9IHR0bV9ib190eXBlX2tlcm5lbCwKKwkJCSAgYWNjX3Np emUsIHNnLCByZXN2LCAmbGltYV9ib19kZXN0cm95KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9v dXQ7CisKKwliby0+bW9kaWZpZXIgPSBEUk1fRk9STUFUX01PRF9JTlZBTElEOworCXJldHVybiBi bzsKKworZXJyX291dDoKKwlrZnJlZShibyk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwor ZG1hX2FkZHJfdCAqbGltYV9ib19nZXRfcGFnZXMoc3RydWN0IGxpbWFfYm8gKmJvKQoreworCXN0 cnVjdCBsaW1hX3R0bV90dCAqdHRtID0gKHZvaWQgKiliby0+dGJvLnR0bTsKKwlyZXR1cm4gdHRt LT50dG0uZG1hX2FkZHJlc3M7Cit9CisKK3ZvaWQgKmxpbWFfYm9fa21hcChzdHJ1Y3QgbGltYV9i byAqYm8pCit7CisJYm9vbCBpc19pb21lbTsKKwl2b2lkICpyZXQ7CisJaW50IGVycjsKKworCXJl dCA9IHR0bV9rbWFwX29ial92aXJ0dWFsKCZiby0+a21hcCwgJmlzX2lvbWVtKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJZXJyID0gdHRtX2JvX2ttYXAoJmJvLT50Ym8sIDAsIGJvLT50 Ym8ubnVtX3BhZ2VzLCAmYm8tPmttYXApOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVy cik7CisKKwlyZXR1cm4gdHRtX2ttYXBfb2JqX3ZpcnR1YWwoJmJvLT5rbWFwLCAmaXNfaW9tZW0p OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuaCBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi41NGZmY2M0MTZlZDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTggUWlh bmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX09CSkVDVF9IX18K KyNkZWZpbmUgX19MSU1BX09CSkVDVF9IX18KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+Cisj aW5jbHVkZSA8ZHJtL3R0bS90dG1fcGxhY2VtZW50Lmg+CisjaW5jbHVkZSA8ZHJtL3R0bS90dG1f Ym9fYXBpLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorCitzdHJ1Y3QgbGltYV9ibyB7 CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGdlbTsKKworCXN0cnVjdCB0dG1fcGxhY2UgcGxhY2U7 CisJc3RydWN0IHR0bV9wbGFjZW1lbnQgcGxhY2VtZW50OworCXN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCB0Ym87CisJc3RydWN0IHR0bV9ib19rbWFwX29iaiBrbWFwOworCXN0cnVjdCB0dG1fYm9f a21hcF9vYmogZG1hX2J1Zl92bWFwOworCisJc3RydWN0IGxpc3RfaGVhZCB2YTsKKworCXU2NCBt b2RpZmllcjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFfYm8gKgordG9fbGltYV9i byhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKG9i aiwgc3RydWN0IGxpbWFfYm8sIGdlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFf Ym8gKgordHRtX3RvX2xpbWFfYm8oc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8pCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZih0Ym8sIHN0cnVjdCBsaW1hX2JvLCB0Ym8pOworfQorCitzdGF0 aWMgaW5saW5lIGludCBsaW1hX2JvX3Jlc2VydmUoc3RydWN0IGxpbWFfYm8gKmJvLCBib29sIGlu dHIpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSB0dG1fdG9fbGltYV9kZXYoYm8tPnRi by5iZGV2KTsKKwlpbnQgcjsKKworCXIgPSB0dG1fYm9fcmVzZXJ2ZSgmYm8tPnRibywgaW50ciwg ZmFsc2UsIE5VTEwpOworCWlmICh1bmxpa2VseShyICE9IDApKSB7CisJCWlmIChyICE9IC1FUkVT VEFSVFNZUykKKwkJCWRldl9lcnIoZGV2LT5kZXYsICIlcCByZXNlcnZlIGZhaWxlZFxuIiwgYm8p OworCQlyZXR1cm4gcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBs aW1hX2JvX3VucmVzZXJ2ZShzdHJ1Y3QgbGltYV9ibyAqYm8pCit7CisJdHRtX2JvX3VucmVzZXJ2 ZSgmYm8tPnRibyk7Cit9CisKK3N0cnVjdCBsaW1hX2JvICpsaW1hX2JvX2NyZWF0ZShzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiwgdTY0IHNpemUsCisJCQkgICAgICAgdTMyIGZsYWdzLCBlbnVtIHR0 bV9ib190eXBlIHR5cGUsCisJCQkgICAgICAgc3RydWN0IHNnX3RhYmxlICpzZywKKwkJCSAgICAg ICBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2KTsKKworc3RhdGljIGlubGluZSB2b2lk IGxpbWFfYm9fdW5yZWYoc3RydWN0IGxpbWFfYm8gKmJvKQoreworCXN0cnVjdCB0dG1fYnVmZmVy X29iamVjdCAqdGJvID0gJmJvLT50Ym87CisJdHRtX2JvX3VucmVmKCZ0Ym8pOworfQorCitkbWFf YWRkcl90ICpsaW1hX2JvX2dldF9wYWdlcyhzdHJ1Y3QgbGltYV9ibyAqYm8pOwordm9pZCAqbGlt YV9ib19rbWFwKHN0cnVjdCBsaW1hX2JvICpibyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf cG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMWE4NGI5YTBh M2EKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5jCkBA IC0wLDAgKzEsNjEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1J VAorLyogQ29weXJpZ2h0IDIwMTctMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8K KworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNp bmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFfcG11LmgiCisjaW5jbHVkZSAi bGltYV9yZWdzLmgiCisKKyNkZWZpbmUgcG11X3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEs IGlwLT5pb21lbSArIExJTUFfUE1VXyMjcmVnKQorI2RlZmluZSBwbXVfcmVhZChyZWcpIHJlYWRs KGlwLT5pb21lbSArIExJTUFfUE1VXyMjcmVnKQorCitzdGF0aWMgaW50IGxpbWFfcG11X3dhaXRf Y21kKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlw LT5kZXY7CisJdTMyIHN0YXQsIHRpbWVvdXQ7CisKKwlmb3IgKHRpbWVvdXQgPSAxMDAwMDAwOyB0 aW1lb3V0ID4gMDsgdGltZW91dC0tKSB7CisJCXN0YXQgPSBwbXVfcmVhZChJTlRfUkFXU1RBVCk7 CisJCWlmIChzdGF0ICYgTElNQV9QTVVfSU5UX0NNRF9NQVNLKQorCQkJYnJlYWs7CisJfQorCisJ aWYgKCF0aW1lb3V0KSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXQgcG1kIGNt ZFxuIik7CisJCXJldHVybiAtRVRJTUVET1VUOworCX0KKworCXBtdV93cml0ZShJTlRfQ0xFQVIs IExJTUFfUE1VX0lOVF9DTURfTUFTSyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsaW1hX3BtdV9p bml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpbnQgZXJyOworCXUzMiBzdGF0OworCisJcG11 X3dyaXRlKElOVF9NQVNLLCAwKTsKKworCS8qIElmIHRoaXMgdmFsdWUgaXMgdG9vIGxvdywgd2hl biBpbiBoaWdoIEdQVSBjbGsgZnJlcSwKKwkgKiBHUFUgd2lsbCBiZSBpbiB1bnN0YWJsZSBzdGF0 ZS4gKi8KKwlwbXVfd3JpdGUoU1dfREVMQVksIDB4ZmZmZik7CisKKwkvKiBzdGF0dXMgcmVnIDE9 b2ZmIDA9b24gKi8KKwlzdGF0ID0gcG11X3JlYWQoU1RBVFVTKTsKKworCS8qIHBvd2VyIHVwIGFs bCBpcCAqLworCWlmIChzdGF0KSB7CisJCXBtdV93cml0ZShQT1dFUl9VUCwgc3RhdCk7CisJCWVy ciA9IGxpbWFfcG11X3dhaXRfY21kKGlwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJ fQorCXJldHVybiAwOworfQorCit2b2lkIGxpbWFfcG11X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlw KQoreworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5oIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjFjZjk0YTM1YmRmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfcG11LmgKQEAgLTAsMCArMSwxMiBAQAorLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE4IFFp YW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9QTVVfSF9fCisj ZGVmaW5lIF9fTElNQV9QTVVfSF9fCisKK3N0cnVjdCBsaW1hX2lwOworCitpbnQgbGltYV9wbXVf aW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBsaW1hX3BtdV9maW5pKHN0cnVjdCBsaW1h X2lwICppcCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9wcC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjY1YzQ5OWQwMDA1Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jCkBAIC0wLDAgKzEsNDE5IEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIw MTggUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGRybS9saW1hX2RybS5oPgor CisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX3BwLmgiCisjaW5jbHVk ZSAibGltYV9kbGJ1LmgiCisjaW5jbHVkZSAibGltYV9iY2FzdC5oIgorI2luY2x1ZGUgImxpbWFf dm0uaCIKKyNpbmNsdWRlICJsaW1hX3JlZ3MuaCIKKworI2RlZmluZSBwcF93cml0ZShyZWcsIGRh dGEpIHdyaXRlbChkYXRhLCBpcC0+aW9tZW0gKyBMSU1BX1BQXyMjcmVnKQorI2RlZmluZSBwcF9y ZWFkKHJlZykgcmVhZGwoaXAtPmlvbWVtICsgTElNQV9QUF8jI3JlZykKKworc3RhdGljIHZvaWQg bGltYV9wcF9oYW5kbGVfaXJxKHN0cnVjdCBsaW1hX2lwICppcCwgdTMyIHN0YXRlKQoreworCXN0 cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBl ICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX3BwOworCisJaWYgKHN0YXRlICYgTElNQV9Q UF9JUlFfTUFTS19FUlJPUikgeworCQl1MzIgc3RhdHVzID0gcHBfcmVhZChTVEFUVVMpOworCisJ CWRldl9lcnIoZGV2LT5kZXYsICJwcCBlcnJvciBpcnEgc3RhdGU9JXggc3RhdHVzPSV4XG4iLAor CQkJc3RhdGUsIHN0YXR1cyk7CisKKwkJcGlwZS0+ZXJyb3IgPSB0cnVlOworCisJCS8qIG1hc2sg YWxsIGludGVycnVwdHMgYmVmb3JlIGhhcmQgcmVzZXQgKi8KKwkJcHBfd3JpdGUoSU5UX01BU0ss IDApOworCX0KKworCXBwX3dyaXRlKElOVF9DTEVBUiwgc3RhdGUpOworfQorCitzdGF0aWMgaXJx cmV0dXJuX3QgbGltYV9wcF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0 cnVjdCBsaW1hX2lwICppcCA9IGRhdGE7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ ZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3Bp cGVfcHA7CisJdTMyIHN0YXRlID0gcHBfcmVhZChJTlRfU1RBVFVTKTsKKworCS8qIGZvciBzaGFy ZWQgaXJxIGNhc2UgKi8KKwlpZiAoIXN0YXRlKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlsaW1h X3BwX2hhbmRsZV9pcnEoaXAsIHN0YXRlKTsKKworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZw aXBlLT50YXNrKSkKKwkJbGltYV9zY2hlZF9waXBlX3Rhc2tfZG9uZShwaXBlKTsKKworCXJldHVy biBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGxpbWFfcHBfYmNhc3RfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlpcnFyZXR1cm5fdCBy ZXQgPSBJUlFfTk9ORTsKKwlzdHJ1Y3QgbGltYV9pcCAqcHBfYmNhc3QgPSBkYXRhOworCXN0cnVj dCBsaW1hX2RldmljZSAqZGV2ID0gcHBfYmNhc3QtPmRldjsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9w aXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX3BwOworCXN0cnVjdCBkcm1fbGltYV9t NDUwX3BwX2ZyYW1lICpmcmFtZSA9IHBpcGUtPmN1cnJlbnRfdGFzay0+ZnJhbWU7CisKKwlmb3Ig KGkgPSAwOyBpIDwgZnJhbWUtPm51bV9wcDsgaSsrKSB7CisJCXN0cnVjdCBsaW1hX2lwICppcCA9 IHBpcGUtPnByb2Nlc3NvcltpXTsKKwkJdTMyIHN0YXR1cywgc3RhdGU7CisKKwkJaWYgKHBpcGUt PmRvbmUgJiAoMSA8PCBpKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHN0YXR1cyByZWFkIGZpcnN0 IGluIGNhc2UgaW50IHN0YXRlIGNoYW5nZSBpbiB0aGUgbWlkZGxlCisJCSAqIHdoaWNoIG1heSBt aXNzIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKwkJc3RhdHVzID0gcHBfcmVhZChTVEFUVVMp OworCQlzdGF0ZSA9IHBwX3JlYWQoSU5UX1NUQVRVUyk7CisKKwkJaWYgKHN0YXRlKSB7CisJCQls aW1hX3BwX2hhbmRsZV9pcnEoaXAsIHN0YXRlKTsKKwkJCXJldCA9IElSUV9IQU5ETEVEOworCQl9 CisJCWVsc2UgeworCQkJaWYgKHN0YXR1cyAmIExJTUFfUFBfU1RBVFVTX1JFTkRFUklOR19BQ1RJ VkUpCisJCQkJY29udGludWU7CisJCX0KKworCQlwaXBlLT5kb25lIHw9ICgxIDw8IGkpOworCQlp ZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGlwZS0+dGFzaykpCisJCQlsaW1hX3NjaGVkX3BpcGVf dGFza19kb25lKHBpcGUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGxp bWFfcHBfc29mdF9yZXNldF9hc3luYyhzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaWYgKGlwLT5k YXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm47CisKKwlwcF93cml0ZShJTlRfTUFTSywgMCk7CisJ cHBfd3JpdGUoSU5UX1JBV1NUQVQsIExJTUFfUFBfSVJRX01BU0tfQUxMKTsKKwlwcF93cml0ZShD VFJMLCBMSU1BX1BQX0NUUkxfU09GVF9SRVNFVCk7CisJaXAtPmRhdGEuYXN5bmNfcmVzZXQgPSB0 cnVlOworfQorCitzdGF0aWMgaW50IGxpbWFfcHBfc29mdF9yZXNldF9hc3luY193YWl0X29uZShz dHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2 OworCWludCB0aW1lb3V0OworCisJZm9yICh0aW1lb3V0ID0gMTAwMDsgdGltZW91dCA+IDA7IHRp bWVvdXQtLSkgeworCQlpZiAoIShwcF9yZWFkKFNUQVRVUykgJiBMSU1BX1BQX1NUQVRVU19SRU5E RVJJTkdfQUNUSVZFKSAmJgorCQkgICAgcHBfcmVhZChJTlRfUkFXU1RBVCkgPT0gTElNQV9QUF9J UlFfUkVTRVRfQ09NUExFVEVEKQorCQkJYnJlYWs7CisJfQorCWlmICghdGltZW91dCkgeworCQlk ZXZfZXJyKGRldi0+ZGV2LCAicHAgJXMgcmVzZXQgdGltZSBvdXRcbiIsIGxpbWFfaXBfbmFtZShp cCkpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlwcF93cml0ZShJTlRfQ0xFQVIsIExJ TUFfUFBfSVJRX01BU0tfQUxMKTsKKwlwcF93cml0ZShJTlRfTUFTSywgTElNQV9QUF9JUlFfTUFT S19VU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX3BwX3NvZnRfcmVzZXRf YXN5bmNfd2FpdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50IGksIGVyciA9IDA7CisKKwlp ZiAoIWlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQlyZXR1cm4gMDsKKworCWlmIChpcC0+aWQgPT0g bGltYV9pcF9wcF9iY2FzdCkgeworCQlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7 CisJCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVf cHA7CisJCXN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1lICpmcmFtZSA9IHBpcGUtPmN1cnJl bnRfdGFzay0+ZnJhbWU7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykK KwkJCWVyciB8PSBsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdF9vbmUocGlwZS0+cHJvY2Vz c29yW2ldKTsKKwl9CisJZWxzZQorCQllcnIgPSBsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2Fp dF9vbmUoaXApOworCisJaXAtPmRhdGEuYXN5bmNfcmVzZXQgPSBmYWxzZTsKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX3dyaXRlX2ZyYW1lKHN0cnVjdCBsaW1hX2lwICpp cCwgdTMyICpmcmFtZSwgdTMyICp3YikKK3sKKwlpbnQgaSwgaiwgbiA9IDA7CisKKwlmb3IgKGkg PSAwOyBpIDwgTElNQV9QUF9GUkFNRV9SRUdfTlVNOyBpKyspCisJCXdyaXRlbChmcmFtZVtpXSwg aXAtPmlvbWVtICsgTElNQV9QUF9GUkFNRSArIGkgKiA0KTsKKworCWZvciAoaSA9IDA7IGkgPCAz OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IExJTUFfUFBfV0JfUkVHX05VTTsgaisrKQorCQkJ d3JpdGVsKHdiW24rK10sIGlwLT5pb21lbSArIExJTUFfUFBfV0IoaSkgKyBqICogNCk7CisJfQor fQorCitzdGF0aWMgaW50IGxpbWFfcHBfaGFyZF9yZXNldChzdHJ1Y3QgbGltYV9pcCAqaXApCit7 CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCB0aW1lb3V0OworCisJ cHBfd3JpdGUoUEVSRl9DTlRfMF9MSU1JVCwgMHhDMEZGRTAwMCk7CisJcHBfd3JpdGUoSU5UX01B U0ssIDApOworCXBwX3dyaXRlKENUUkwsIExJTUFfUFBfQ1RSTF9GT1JDRV9SRVNFVCk7CisJZm9y ICh0aW1lb3V0ID0gMTAwMDsgdGltZW91dCA+IDA7IHRpbWVvdXQtLSkgeworCQlwcF93cml0ZShQ RVJGX0NOVF8wX0xJTUlULCAweEMwMUEwMDAwKTsKKwkJaWYgKHBwX3JlYWQoUEVSRl9DTlRfMF9M SU1JVCkgPT0gMHhDMDFBMDAwMCkKKwkJCWJyZWFrOworCX0KKwlpZiAoIXRpbWVvdXQpIHsKKwkJ ZGV2X2VycihkZXYtPmRldiwgInBwIGhhcmQgcmVzZXQgdGltZW91dFxuIik7CisJCXJldHVybiAt RVRJTUVET1VUOworCX0KKworCXBwX3dyaXRlKFBFUkZfQ05UXzBfTElNSVQsIDApOworCXBwX3dy aXRlKElOVF9DTEVBUiwgTElNQV9QUF9JUlFfTUFTS19BTEwpOworCXBwX3dyaXRlKElOVF9NQVNL LCBMSU1BX1BQX0lSUV9NQVNLX1VTRUQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBs aW1hX3BwX3ByaW50X3ZlcnNpb24oc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXUzMiB2ZXJzaW9u LCBtYWpvciwgbWlub3I7CisJY2hhciAqbmFtZTsKKworCXZlcnNpb24gPSBwcF9yZWFkKFZFUlNJ T04pOworCW1ham9yID0gKHZlcnNpb24gPj4gOCkgJiAweEZGOworCW1pbm9yID0gdmVyc2lvbiAm IDB4RkY7CisJc3dpdGNoICh2ZXJzaW9uID4+IDE2KSB7CisJY2FzZSAweEM4MDc6CisJICAgIG5h bWUgPSAibWFsaTIwMCI7CisJCWJyZWFrOworCWNhc2UgMHhDRTA3OgorCQluYW1lID0gIm1hbGkz MDAiOworCQlicmVhazsKKwljYXNlIDB4Q0QwNzoKKwkJbmFtZSA9ICJtYWxpNDAwIjsKKwkJYnJl YWs7CisJY2FzZSAweENGMDc6CisJCW5hbWUgPSAibWFsaTQ1MCI7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCW5hbWUgPSAidW5rbm93IjsKKwkJYnJlYWs7CisJfQorCWRldl9pbmZvKGlwLT5kZXYt PmRldiwgIiVzIC0gJXMgdmVyc2lvbiBtYWpvciAlZCBtaW5vciAlZFxuIiwKKwkJIGxpbWFfaXBf bmFtZShpcCksIG5hbWUsIG1ham9yLCBtaW5vcik7Cit9CisKK2ludCBsaW1hX3BwX2luaXQoc3Ry dWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsK KwlpbnQgZXJyOworCisJbGltYV9wcF9wcmludF92ZXJzaW9uKGlwKTsKKworCWlwLT5kYXRhLmFz eW5jX3Jlc2V0ID0gZmFsc2U7CisJbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jKGlwKTsKKwllcnIg PSBsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCWVyciA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LT5kZXYsIGlwLT5pcnEsIGxpbWFf cHBfaXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9TSEFSRUQsIGxpbWFfaXBfbmFtZShpcCks IGlwKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJwcCAlcyBmYWlsIHRvIHJl cXVlc3QgaXJxXG4iLAorCQkJbGltYV9pcF9uYW1lKGlwKSk7CisJCXJldHVybiBlcnI7CisJfQor CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9wcF9maW5pKHN0cnVjdCBsaW1hX2lwICppcCkK K3sKKwkKK30KKworaW50IGxpbWFfcHBfYmNhc3RfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7 CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7CisKKwllcnIg PSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBpcC0+aXJxLCBsaW1hX3BwX2JjYXN0X2lycV9o YW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCBsaW1hX2lwX25hbWUoaXApLCBpcCk7CisJ aWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAicHAgJXMgZmFpbCB0byByZXF1ZXN0IGly cVxuIiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVy biAwOworfQorCit2b2lkIGxpbWFfcHBfYmNhc3RfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7 CisJCit9CisKK3N0YXRpYyBpbnQgbGltYV9wcF90YXNrX3ZhbGlkYXRlKHN0cnVjdCBsaW1hX3Nj aGVkX3BpcGUgKnBpcGUsCisJCQkJIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJ dTMyIG51bV9wcDsKKworCWlmIChwaXBlLT5iY2FzdF9wcm9jZXNzb3IpIHsKKwkJc3RydWN0IGRy bV9saW1hX200NTBfcHBfZnJhbWUgKmYgPSB0YXNrLT5mcmFtZTsKKwkgICAgICAgIG51bV9wcCA9 IGYtPm51bV9wcDsKKwl9CisJZWxzZSB7CisJCXN0cnVjdCBkcm1fbGltYV9tNDAwX3BwX2ZyYW1l ICpmID0gdGFzay0+ZnJhbWU7CisJCW51bV9wcCA9IGYtPm51bV9wcDsKKwl9CisKKwlpZiAobnVt X3BwID09IDAgfHwgbnVtX3BwID4gcGlwZS0+bnVtX3Byb2Nlc3NvcikKKwkJcmV0dXJuIC1FSU5W QUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9wcF90YXNrX3J1bihzdHJ1 Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJICAgICBzdHJ1Y3QgbGltYV9zY2hlZF90YXNr ICp0YXNrKQoreworCWlmIChwaXBlLT5iY2FzdF9wcm9jZXNzb3IpIHsKKwkJc3RydWN0IGRybV9s aW1hX200NTBfcHBfZnJhbWUgKmZyYW1lID0gdGFzay0+ZnJhbWU7CisJCXN0cnVjdCBsaW1hX2Rl dmljZSAqZGV2ID0gcGlwZS0+YmNhc3RfcHJvY2Vzc29yLT5kZXY7CisJCXN0cnVjdCBsaW1hX2lw ICppcCA9IHBpcGUtPmJjYXN0X3Byb2Nlc3NvcjsKKwkJaW50IGk7CisKKwkJcGlwZS0+ZG9uZSA9 IDA7CisJCWF0b21pY19zZXQoJnBpcGUtPnRhc2ssIGZyYW1lLT5udW1fcHApOworCisJCWlmIChm cmFtZS0+dXNlX2RsYnUpIHsKKwkJCWxpbWFfZGxidV9lbmFibGUoZGV2LCBmcmFtZS0+bnVtX3Bw KTsKKworCQkgICAgICAgIGZyYW1lLT5mcmFtZVtMSU1BX1BQX0ZSQU1FID4+IDJdID0gTElNQV9W QV9SRVNFUlZFX0RMQlU7CisJCQlsaW1hX2RsYnVfc2V0X3JlZyhkZXYtPmlwICsgbGltYV9pcF9k bGJ1LCBmcmFtZS0+ZGxidV9yZWdzKTsKKwkJfQorCQllbHNlCisJCQlsaW1hX2RsYnVfZGlzYWJs ZShkZXYpOworCisJCWxpbWFfYmNhc3RfZW5hYmxlKGRldiwgZnJhbWUtPm51bV9wcCk7CisKKwkJ bGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoaXApOworCisJICAgICAgICBsaW1hX3BwX3dy aXRlX2ZyYW1lKGlwLCBmcmFtZS0+ZnJhbWUsIGZyYW1lLT53Yik7CisKKwkJZm9yIChpID0gMDsg aSA8IGZyYW1lLT5udW1fcHA7IGkrKykgeworCQkJc3RydWN0IGxpbWFfaXAgKmlwID0gcGlwZS0+ cHJvY2Vzc29yW2ldOworCisJCQlwcF93cml0ZShTVEFDSywgZnJhbWUtPmZyYWdtZW50X3N0YWNr X2FkZHJlc3NbaV0pOworCQkJaWYgKCFmcmFtZS0+dXNlX2RsYnUpCisJCQkJcHBfd3JpdGUoRlJB TUUsIGZyYW1lLT5wbGJ1X2FycmF5X2FkZHJlc3NbaV0pOworCQl9CisKKwkJcHBfd3JpdGUoQ1RS TCwgTElNQV9QUF9DVFJMX1NUQVJUX1JFTkRFUklORyk7CisJfQorCWVsc2UgeworCQlzdHJ1Y3Qg ZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSAqZnJhbWUgPSB0YXNrLT5mcmFtZTsKKwkJaW50IGk7CisK KwkJYXRvbWljX3NldCgmcGlwZS0+dGFzaywgZnJhbWUtPm51bV9wcCk7CisKKwkJZm9yIChpID0g MDsgaSA8IGZyYW1lLT5udW1fcHA7IGkrKykgeworCQkJc3RydWN0IGxpbWFfaXAgKmlwID0gcGlw ZS0+cHJvY2Vzc29yW2ldOworCisJCQlmcmFtZS0+ZnJhbWVbTElNQV9QUF9GUkFNRSA+PiAyXSA9 CisJCQkJZnJhbWUtPnBsYnVfYXJyYXlfYWRkcmVzc1tpXTsKKwkJCWZyYW1lLT5mcmFtZVtMSU1B X1BQX1NUQUNLID4+IDJdID0KKwkJCQlmcmFtZS0+ZnJhZ21lbnRfc3RhY2tfYWRkcmVzc1tpXTsK KworCQkJbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoaXApOworCisJCSAgICAgICAgbGlt YV9wcF93cml0ZV9mcmFtZShpcCwgZnJhbWUtPmZyYW1lLCBmcmFtZS0+d2IpOworCisJCQlwcF93 cml0ZShDVFJMLCBMSU1BX1BQX0NUUkxfU1RBUlRfUkVOREVSSU5HKTsKKwkJfQorCX0KK30KKwor c3RhdGljIHZvaWQgbGltYV9wcF90YXNrX2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlw ZSkKK3sKKwlpZiAocGlwZS0+YmNhc3RfcHJvY2Vzc29yKQorCQlsaW1hX3BwX3NvZnRfcmVzZXRf YXN5bmMocGlwZS0+YmNhc3RfcHJvY2Vzc29yKTsKKwllbHNlIHsKKwkJaW50IGk7CisJCWZvciAo aSA9IDA7IGkgPCBwaXBlLT5udW1fcHJvY2Vzc29yOyBpKyspCisJCQlsaW1hX3BwX3NvZnRfcmVz ZXRfYXN5bmMocGlwZS0+cHJvY2Vzc29yW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFf cHBfdGFza19lcnJvcihzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCWludCBpOwor CisJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9wcm9jZXNzb3I7IGkrKykgeworCQlzdHJ1Y3Qg bGltYV9pcCAqaXAgPSBwaXBlLT5wcm9jZXNzb3JbaV07CisKKwkJZGV2X2VycihpcC0+ZGV2LT5k ZXYsICJwcCB0YXNrIGVycm9yICVkIGludF9zdGF0ZT0leCBzdGF0dXM9JXhcbiIsCisJCQlpLCBw cF9yZWFkKElOVF9TVEFUVVMpLCBwcF9yZWFkKFNUQVRVUykpOworCisJCWxpbWFfcHBfaGFyZF9y ZXNldChpcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsaW1hX3BwX3Rhc2tfbW11X2Vycm9yKHN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3Qo JnBpcGUtPnRhc2spKQorCQlsaW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworfQorCitz dGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmxpbWFfcHBfdGFza19zbGFiID0gTlVMTDsKK3N0YXRp YyBpbnQgbGltYV9wcF90YXNrX3NsYWJfcmVmY250ID0gMDsKKworaW50IGxpbWFfcHBfcGlwZV9p bml0KHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCWludCBmcmFtZV9zaXplOworCXN0cnVj dCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisKKwlp ZiAoZGV2LT5pZCA9PSBsaW1hX2dwdV9tYWxpNDAwKQorCQlmcmFtZV9zaXplID0gc2l6ZW9mKHN0 cnVjdCBkcm1fbGltYV9tNDAwX3BwX2ZyYW1lKTsKKwllbHNlCisJCWZyYW1lX3NpemUgPSBzaXpl b2Yoc3RydWN0IGRybV9saW1hX200NTBfcHBfZnJhbWUpOworCisJaWYgKCFsaW1hX3BwX3Rhc2tf c2xhYikgeworCQlsaW1hX3BwX3Rhc2tfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlX3VzZXJjb3B5 KAorCQkJImxpbWFfcHBfdGFzayIsIHNpemVvZihzdHJ1Y3QgbGltYV9zY2hlZF90YXNrKSArIGZy YW1lX3NpemUsCisJCQkwLCBTTEFCX0hXQ0FDSEVfQUxJR04sIHNpemVvZihzdHJ1Y3QgbGltYV9z Y2hlZF90YXNrKSwKKwkJCWZyYW1lX3NpemUsIE5VTEwpOworCQlpZiAoIWxpbWFfcHBfdGFza19z bGFiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCWxpbWFfcHBfdGFza19zbGFiX3JlZmNudCsr OworCisJcGlwZS0+ZnJhbWVfc2l6ZSA9IGZyYW1lX3NpemU7CisJcGlwZS0+dGFza19zbGFiID0g bGltYV9wcF90YXNrX3NsYWI7CisKKwlwaXBlLT50YXNrX3ZhbGlkYXRlID0gbGltYV9wcF90YXNr X3ZhbGlkYXRlOworCXBpcGUtPnRhc2tfcnVuID0gbGltYV9wcF90YXNrX3J1bjsKKwlwaXBlLT50 YXNrX2ZpbmkgPSBsaW1hX3BwX3Rhc2tfZmluaTsKKwlwaXBlLT50YXNrX2Vycm9yID0gbGltYV9w cF90YXNrX2Vycm9yOworCXBpcGUtPnRhc2tfbW11X2Vycm9yID0gbGltYV9wcF90YXNrX21tdV9l cnJvcjsKKworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFfcHBfcGlwZV9maW5pKHN0cnVjdCBs aW1hX2RldmljZSAqZGV2KQoreworCWlmICghLS1saW1hX3BwX3Rhc2tfc2xhYl9yZWZjbnQpIHsK KwkJa21lbV9jYWNoZV9kZXN0cm95KGxpbWFfcHBfdGFza19zbGFiKTsKKwkJbGltYV9wcF90YXNr X3NsYWIgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfcHAuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmY4M2Y4Y2I0ZDMwYQotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuaApAQCAtMCwwICsxLDE5IEBACisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE3 LTIwMTggUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX1BQ X0hfXworI2RlZmluZSBfX0xJTUFfUFBfSF9fCisKK3N0cnVjdCBsaW1hX2lwOworc3RydWN0IGxp bWFfZGV2aWNlOworCitpbnQgbGltYV9wcF9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lk IGxpbWFfcHBfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCitpbnQgbGltYV9wcF9iY2FzdF9p bml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfcHBfYmNhc3RfZmluaShzdHJ1Y3Qg bGltYV9pcCAqaXApOworCitpbnQgbGltYV9wcF9waXBlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNl ICpkZXYpOwordm9pZCBsaW1hX3BwX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldik7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9yZWdzLmgg Yi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLmQ1YWRlOGZjODkwMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfcmVncy5oCkBAIC0wLDAgKzEsMjk4IEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyogQ29weXJpZ2h0IDIwMTAtMjAxNyBBUk0g TGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDE3LTIwMTggUWlh bmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBfX0xJTUFfUkVHU19IX18K KyNkZWZpbmUgX19MSU1BX1JFR1NfSF9fCisKKy8qIFRoaXMgZmlsZSdzIHJlZ2lzdGVyIGRlZmlu aXRpb24gaXMgY29sbGVjdGVkIGZyb20gdGhlCisgKiBvZmZpY2lhbCBBUk0gTWFsaSBVdGdhcmQg R1BVIGtlcm5lbCBkcml2ZXIgc291cmNlIGNvZGUKKyAqLworCisvKiBQTVUgcmVncyAqLworI2Rl ZmluZSBMSU1BX1BNVV9QT1dFUl9VUCAgICAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTElN QV9QTVVfUE9XRVJfRE9XTiAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lICAgTElNQV9QTVVf UE9XRVJfR1AwX01BU0sgICAgICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9QTVVfUE9XRVJf TDJfTUFTSyAgICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9QTVVfUE9XRVJfUFBfTUFT SyhpKSAgICAgICAgQklUKDIgKyBpKQorCisvKgorICogT24gTWFsaTQ1MCBlYWNoIGJsb2NrIGF1 dG9tYXRpY2FsbHkgc3RhcnRzIHVwIGl0cyBjb3JyZXNwb25kaW5nIEwyCisgKiBhbmQgdGhlIFBQ cyBhcmUgbm90IGZ1bGx5IGluZGVwZW5kZW50IGNvbnRyb2xsYWJsZS4KKyAqIEluc3RlYWQgUFAw LCBQUDEtMyBhbmQgUFA0LTcgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYuCisgKi8KKyNkZWZpbmUg ICBMSU1BNDUwX1BNVV9QT1dFUl9QUDBfTUFTSyAgICAgICBCSVQoMSkKKyNkZWZpbmUgICBMSU1B NDUwX1BNVV9QT1dFUl9QUDEzX01BU0sgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BNDUwX1BN VV9QT1dFUl9QUDQ3X01BU0sgICAgICBCSVQoMykKKworI2RlZmluZSBMSU1BX1BNVV9TVEFUVVMg ICAgICAgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTElNQV9QTVVfSU5UX01BU0sgICAgICAg ICAgICAgICAgICAweDBDCisjZGVmaW5lIExJTUFfUE1VX0lOVF9SQVdTVEFUICAgICAgICAgICAg ICAgMHgxMAorI2RlZmluZSBMSU1BX1BNVV9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgIDB4MTgK KyNkZWZpbmUgICBMSU1BX1BNVV9JTlRfQ01EX01BU0sgICAgICAgICAgICBCSVQoMCkKKyNkZWZp bmUgTElNQV9QTVVfU1dfREVMQVkgICAgICAgICAgICAgICAgICAweDFDCisKKy8qIEwyIGNhY2hl IHJlZ3MgKi8KKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9TSVpFICAgICAgICAgICAgICAgICAgIDB4 MDAwNAorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX1NUQVRVUyAgICAgICAgICAgICAgICAgMHgwMDA4 CisjZGVmaW5lICAgTElNQV9MMl9DQUNIRV9TVEFUVVNfQ09NTUFORF9CVVNZICBCSVQoMCkKKyNk ZWZpbmUgICBMSU1BX0wyX0NBQ0hFX1NUQVRVU19EQVRBX0JVU1kgICAgIEJJVCgxKQorI2RlZmlu ZSBMSU1BX0wyX0NBQ0hFX0NPTU1BTkQgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lICAg TElNQV9MMl9DQUNIRV9DT01NQU5EX0NMRUFSX0FMTCAgICBCSVQoMCkKKyNkZWZpbmUgTElNQV9M Ml9DQUNIRV9DTEVBUl9QQUdFICAgICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBMSU1BX0wyX0NB Q0hFX01BWF9SRUFEUyAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIExJTUFfTDJfQ0FDSEVf RU5BQkxFICAgICAgICAgICAgICAgICAweDAwMUMKKyNkZWZpbmUgICBMSU1BX0wyX0NBQ0hFX0VO QUJMRV9BQ0NFU1MgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfTDJfQ0FDSEVfRU5BQkxF X1JFQURfQUxMT0NBVEUgQklUKDEpCisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfUEVSRkNOVF9TUkMw ICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9QRVJGQ05UX1ZBTDAgICAg ICAgICAgIDB4MDAyNAorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX1BFUkZDTlRfU1JDMSAgICAgICAg ICAgMHgwMDI4CisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfRVJGQ05UX1ZBTDEgICAgICAgICAgICAw eDAwMkMKKworLyogR1AgcmVncyAqLworI2RlZmluZSBMSU1BX0dQX1ZTQ0xfU1RBUlRfQUREUiAg ICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIExJTUFfR1BfVlNDTF9FTkRfQUREUiAgICAgICAg ICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTElNQV9HUF9QTEJVQ0xfU1RBUlRfQUREUiAgICAgICAg ICAgICAgMHgwOAorI2RlZmluZSBMSU1BX0dQX1BMQlVDTF9FTkRfQUREUiAgICAgICAgICAgICAg ICAweDBjCisjZGVmaW5lIExJTUFfR1BfUExCVV9BTExPQ19TVEFSVF9BRERSICAgICAgICAgIDB4 MTAKKyNkZWZpbmUgTElNQV9HUF9QTEJVX0FMTE9DX0VORF9BRERSICAgICAgICAgICAgMHgxNAor I2RlZmluZSBMSU1BX0dQX0NNRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVm aW5lICAgTElNQV9HUF9DTURfU1RBUlRfVlMgICAgICAgICAgICAgICAgIEJJVCgwKQorI2RlZmlu ZSAgIExJTUFfR1BfQ01EX1NUQVJUX1BMQlUgICAgICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUg ICBMSU1BX0dQX0NNRF9VUERBVEVfUExCVV9BTExPQyAgICAgICAgQklUKDQpCisjZGVmaW5lICAg TElNQV9HUF9DTURfUkVTRVQgICAgICAgICAgICAgICAgICAgIEJJVCg1KQorI2RlZmluZSAgIExJ TUFfR1BfQ01EX0ZPUkNFX0hBTkcgICAgICAgICAgICAgICBCSVQoNikKKyNkZWZpbmUgICBMSU1B X0dQX0NNRF9TVE9QX0JVUyAgICAgICAgICAgICAgICAgQklUKDkpCisjZGVmaW5lICAgTElNQV9H UF9DTURfU09GVF9SRVNFVCAgICAgICAgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgTElNQV9HUF9J TlRfUkFXU1RBVCAgICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBMSU1BX0dQX0lOVF9D TEVBUiAgICAgICAgICAgICAgICAgICAgICAweDI4CisjZGVmaW5lIExJTUFfR1BfSU5UX01BU0sg ICAgICAgICAgICAgICAgICAgICAgIDB4MkMKKyNkZWZpbmUgTElNQV9HUF9JTlRfU1RBVCAgICAg ICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSAgIExJTUFfR1BfSVJRX1ZTX0VORF9DTURf TFNUICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QTEJVX0VORF9DTURf TFNUICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfUExCVV9PVVRfT0ZfTUVN ICAgICAgICAgIEJJVCgyKQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1ZTX1NFTV9JUlEgICAgICAg ICAgICAgICBCSVQoMykKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QTEJVX1NFTV9JUlEgICAgICAg ICAgICAgQklUKDQpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfSEFORyAgICAgICAgICAgICAgICAg ICAgIEJJVCg1KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgICAg ICBCSVQoNikKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QRVJGX0NOVF8wX0xJTUlUICAgICAgICAg QklUKDcpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfUEVSRl9DTlRfMV9MSU1JVCAgICAgICAgIEJJ VCg4KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1dSSVRFX0JPVU5EX0VSUiAgICAgICAgICBCSVQo OSkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9TWU5DX0VSUk9SICAgICAgICAgICAgICAgQklUKDEw KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX0FYSV9CVVNfRVJST1IgICAgICAgICAgICBCSVQoMTEp CisjZGVmaW5lICAgTElNQV9HUF9JUlFfQVhJX0JVU19TVE9QUEVEICAgICAgICAgIEJJVCgxMikK KyNkZWZpbmUgICBMSU1BX0dQX0lSUV9WU19JTlZBTElEX0NNRCAgICAgICAgICAgQklUKDEzKQor I2RlZmluZSAgIExJTUFfR1BfSVJRX1BMQl9JTlZBTElEX0NNRCAgICAgICAgICBCSVQoMTQpCisj ZGVmaW5lICAgTElNQV9HUF9JUlFfUkVTRVRfQ09NUExFVEVEICAgICAgICAgIEJJVCgxOSkKKyNk ZWZpbmUgICBMSU1BX0dQX0lSUV9TRU1BUEhPUkVfVU5ERVJGTE9XICAgICAgQklUKDIwKQorI2Rl ZmluZSAgIExJTUFfR1BfSVJRX1NFTUFQSE9SRV9PVkVSRkxPVyAgICAgICBCSVQoMjEpCisjZGVm aW5lICAgTElNQV9HUF9JUlFfUFRSX0FSUkFZX09VVF9PRl9CT1VORFMgIEJJVCgyMikKKyNkZWZp bmUgTElNQV9HUF9XUklURV9CT1VORF9MT1cgICAgICAgICAgICAgICAgMHgzNAorI2RlZmluZSBM SU1BX0dQX1BFUkZfQ05UXzBfRU5BQkxFICAgICAgICAgICAgICAweDNDCisjZGVmaW5lIExJTUFf R1BfUEVSRl9DTlRfMV9FTkFCTEUgICAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgTElNQV9HUF9Q RVJGX0NOVF8wX1NSQyAgICAgICAgICAgICAgICAgMHg0NAorI2RlZmluZSBMSU1BX0dQX1BFUkZf Q05UXzFfU1JDICAgICAgICAgICAgICAgICAweDQ4CisjZGVmaW5lIExJTUFfR1BfUEVSRl9DTlRf MF9WQUxVRSAgICAgICAgICAgICAgIDB4NEMKKyNkZWZpbmUgTElNQV9HUF9QRVJGX0NOVF8xX1ZB TFVFICAgICAgICAgICAgICAgMHg1MAorI2RlZmluZSBMSU1BX0dQX1BFUkZfQ05UXzBfTElNSVQg ICAgICAgICAgICAgICAweDU0CisjZGVmaW5lIExJTUFfR1BfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgIDB4NjgKKyNkZWZpbmUgICBMSU1BX0dQX1NUQVRVU19WU19BQ1RJVkUgICAgICAg ICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9HUF9TVEFUVVNfQlVTX1NUT1BQRUQgICAgICAg ICAgIEJJVCgyKQorI2RlZmluZSAgIExJTUFfR1BfU1RBVFVTX1BMQlVfQUNUSVZFICAgICAgICAg ICBCSVQoMykKKyNkZWZpbmUgICBMSU1BX0dQX1NUQVRVU19CVVNfRVJST1IgICAgICAgICAgICAg QklUKDYpCisjZGVmaW5lICAgTElNQV9HUF9TVEFUVVNfV1JJVEVfQk9VTkRfRVJSICAgICAgIEJJ VCg4KQorI2RlZmluZSBMSU1BX0dQX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgICAweDZD CisjZGVmaW5lIExJTUFfR1BfVlNDTF9TVEFSVF9BRERSX1JFQUQgICAgICAgICAgIDB4ODAKKyNk ZWZpbmUgTElNQV9HUF9QTEJDTF9TVEFSVF9BRERSX1JFQUQgICAgICAgICAgMHg4NAorI2RlZmlu ZSBMSU1BX0dQX0NPTlRSX0FYSV9CVVNfRVJST1JfU1RBVCAgICAgICAweDk0CisKKyNkZWZpbmUg TElNQV9HUF9JUlFfTUFTS19BTEwJCSAgIFwKKwkoCQkJCSAgIFwKKwkgTElNQV9HUF9JUlFfVlNf RU5EX0NNRF9MU1QgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUExCVV9FTkRfQ01EX0xTVCAgICB8 IFwKKwkgTElNQV9HUF9JUlFfUExCVV9PVVRfT0ZfTUVNICAgICB8IFwKKwkgTElNQV9HUF9JUlFf VlNfU0VNX0lSUSAgICAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUExCVV9TRU1fSVJRICAgICAg ICB8IFwKKwkgTElNQV9HUF9JUlFfSEFORyAgICAgICAgICAgICAgICB8IFwKKwkgTElNQV9HUF9J UlFfRk9SQ0VfSEFORyAgICAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUEVSRl9DTlRfMF9MSU1J VCAgICB8IFwKKwkgTElNQV9HUF9JUlFfUEVSRl9DTlRfMV9MSU1JVCAgICB8IFwKKwkgTElNQV9H UF9JUlFfV1JJVEVfQk9VTkRfRVJSICAgICB8IFwKKwkgTElNQV9HUF9JUlFfU1lOQ19FUlJPUiAg ICAgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfQVhJX0JVU19FUlJPUiAgICAgICB8IFwKKwkgTElN QV9HUF9JUlFfQVhJX0JVU19TVE9QUEVEICAgICB8IFwKKwkgTElNQV9HUF9JUlFfVlNfSU5WQUxJ RF9DTUQgICAgICB8IFwKKwkgTElNQV9HUF9JUlFfUExCX0lOVkFMSURfQ01EICAgICB8IFwKKwkg TElNQV9HUF9JUlFfUkVTRVRfQ09NUExFVEVEICAgICB8IFwKKwkgTElNQV9HUF9JUlFfU0VNQVBI T1JFX1VOREVSRkxPVyB8IFwKKwkgTElNQV9HUF9JUlFfU0VNQVBIT1JFX09WRVJGTE9XICB8IFwK KwkgTElNQV9HUF9JUlFfUFRSX0FSUkFZX09VVF9PRl9CT1VORFMpCisKKyNkZWZpbmUgTElNQV9H UF9JUlFfTUFTS19FUlJPUiAgICAgICAgICAgICBcCisJKCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisJIExJTUFfR1BfSVJRX1BMQlVfT1VUX09GX01FTSAgICAgfCBcCisJIExJ TUFfR1BfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1dSSVRFX0JP VU5EX0VSUiAgICAgfCBcCisJIExJTUFfR1BfSVJRX1NZTkNfRVJST1IgICAgICAgICAgfCBcCisJ IExJTUFfR1BfSVJRX0FYSV9CVVNfRVJST1IgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1ZTX0lO VkFMSURfQ01EICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQl9JTlZBTElEX0NNRCAgICAgfCBc CisJIExJTUFfR1BfSVJRX1NFTUFQSE9SRV9VTkRFUkZMT1cgfCBcCisJIExJTUFfR1BfSVJRX1NF TUFQSE9SRV9PVkVSRkxPVyAgfCBcCisJIExJTUFfR1BfSVJRX1BUUl9BUlJBWV9PVVRfT0ZfQk9V TkRTKQorCisjZGVmaW5lIExJTUFfR1BfSVJRX01BU0tfVVNFRAkJICAgXAorCSgJCQkJICAgXAor CSBMSU1BX0dQX0lSUV9WU19FTkRfQ01EX0xTVCAgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9QTEJV X0VORF9DTURfTFNUICAgIHwgXAorCSBMSU1BX0dQX0lSUV9NQVNLX0VSUk9SKQorCisvKiBQUCBy ZWdzICovCisjZGVmaW5lIExJTUFfUFBfRlJBTUUgICAgICAgICAgICAgICAgICAgICAgICAweDAw MDAKKyNkZWZpbmUgTElNQV9QUF9SU1cJCQkgICAgIDB4MDAwNAorI2RlZmluZSBMSU1BX1BQX1NU QUNLCQkJICAgICAweDAwMzAKKyNkZWZpbmUgTElNQV9QUF9TVEFDS19TSVpFCQkgICAgIDB4MDAz NAorI2RlZmluZSBMSU1BX1BQX09SSUdJTl9PRkZTRVRfWAkgICAgICAgICAgICAgMHgwMDQwCisj ZGVmaW5lIExJTUFfUFBfV0IoaSkgCQkJICAgICAoMHgwMTAwICogKGkgKyAxKSkKKyNkZWZpbmUg ICBMSU1BX1BQX1dCX1NPVVJDRV9TRUxFQ1QgICAgICAgICAgIDB4MDAwMAorI2RlZmluZQkgIExJ TUFfUFBfV0JfU09VUkNFX0FERFIgICAgICAgICAgICAgMHgwMDA0CisKKyNkZWZpbmUgTElNQV9Q UF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMAorI2RlZmluZSBMSU1BX1BQX0NV UlJFTlRfUkVORF9MSVNUX0FERFIgICAgICAgMHgxMDA0CisjZGVmaW5lIExJTUFfUFBfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAweDEwMDgKKyNkZWZpbmUgICBMSU1BX1BQX1NUQVRVU19S RU5ERVJJTkdfQUNUSVZFICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfUFBfU1RBVFVTX0JVU19T VE9QUEVEICAgICAgICAgQklUKDQpCisjZGVmaW5lIExJTUFfUFBfQ1RSTCAgICAgICAgICAgICAg ICAgICAgICAgICAweDEwMGMKKyNkZWZpbmUgICBMSU1BX1BQX0NUUkxfU1RPUF9CVVMgICAgICAg ICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfUFBfQ1RSTF9GTFVTSF9DQUNIRVMgICAgICAg ICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9QUF9DVFJMX0ZPUkNFX1JFU0VUICAgICAgICAgICBC SVQoNSkKKyNkZWZpbmUgICBMSU1BX1BQX0NUUkxfU1RBUlRfUkVOREVSSU5HICAgICAgIEJJVCg2 KQorI2RlZmluZSAgIExJTUFfUFBfQ1RSTF9TT0ZUX1JFU0VUICAgICAgICAgICAgQklUKDcpCisj ZGVmaW5lIExJTUFfUFBfSU5UX1JBV1NUQVQgICAgICAgICAgICAgICAgICAweDEwMjAKKyNkZWZp bmUgTElNQV9QUF9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgICAgIDB4MTAyNAorI2RlZmluZSBM SU1BX1BQX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgxMDI4CisjZGVmaW5lIExJTUFf UFBfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAweDEwMmMKKyNkZWZpbmUgICBMSU1BX1BQ X0lSUV9FTkRfT0ZfRlJBTUUgICAgICAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfUFBfSVJR X0VORF9PRl9USUxFICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfSEFO RyAgICAgICAgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9GT1JDRV9I QU5HICAgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0JVU19FUlJPUiAg ICAgICAgICAgICAgQklUKDQpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfQlVTX1NUT1AgICAgICAg ICAgICAgICBCSVQoNSkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9DTlRfMF9MSU1JVCAgICAgICAg ICAgIEJJVCg2KQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0NOVF8xX0xJTUlUICAgICAgICAgICAg QklUKDcpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfV1JJVEVfQk9VTkRBUllfRVJST1IgICBCSVQo OCkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9JTlZBTElEX1BMSVNUX0NPTU1BTkQgIEJJVCg5KQor I2RlZmluZSAgIExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfVU5ERVJGTE9XICAgQklUKDEwKQorI2Rl ZmluZSAgIExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfT1ZFUkZMT1cgICAgQklUKDExKQorI2RlZmlu ZSAgIExJTUFfUFBfSVJRX1JFU0VUX0NPTVBMRVRFRCAgICAgICAgQklUKDEyKQorI2RlZmluZSBM SU1BX1BQX1dSSVRFX0JPVU5EQVJZX0xPVyAgICAgICAgICAgMHgxMDQ0CisjZGVmaW5lIExJTUFf UFBfQlVTX0VSUk9SX1NUQVRVUyAgICAgICAgICAgICAweDEwNTAKKyNkZWZpbmUgTElNQV9QUF9Q RVJGX0NOVF8wX0VOQUJMRSAgICAgICAgICAgIDB4MTA4MAorI2RlZmluZSBMSU1BX1BQX1BFUkZf Q05UXzBfU1JDICAgICAgICAgICAgICAgMHgxMDg0CisjZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRf MF9MSU1JVCAgICAgICAgICAgICAweDEwODgKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8wX1ZB TFVFICAgICAgICAgICAgIDB4MTA4YworI2RlZmluZSBMSU1BX1BQX1BFUkZfQ05UXzFfRU5BQkxF ICAgICAgICAgICAgMHgxMGEwCisjZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRfMV9TUkMgICAgICAg ICAgICAgICAweDEwYTQKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8xX0xJTUlUICAgICAgICAg ICAgIDB4MTBhOAorI2RlZmluZSBMSU1BX1BQX1BFUkZfQ05UXzFfVkFMVUUgICAgICAgICAgICAg MHgxMGFjCisjZGVmaW5lIExJTUFfUFBfUEVSRk1PTl9DT05UUiAgICAgICAgICAgICAgICAweDEw YjAKKyNkZWZpbmUgTElNQV9QUF9QRVJGTU9OX0JBU0UgICAgICAgICAgICAgICAgIDB4MTBiNAor CisjZGVmaW5lIExJTUFfUFBfSVJRX01BU0tfQUxMICAgICAgICAgICAgICAgICBcCisJKCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgTElNQV9QUF9JUlFfRU5EX09GX0ZS QU1FICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9FTkRfT0ZfVElMRSAgICAgICAgICAgfCBc CisJIExJTUFfUFBfSVJRX0hBTkcgICAgICAgICAgICAgICAgICB8IFwKKwkgTElNQV9QUF9JUlFf Rk9SQ0VfSEFORyAgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9CVVNfRVJST1IgICAgICAg ICAgICAgfCBcCisJIExJTUFfUFBfSVJRX0JVU19TVE9QICAgICAgICAgICAgICB8IFwKKwkgTElN QV9QUF9JUlFfQ05UXzBfTElNSVQgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9DTlRfMV9M SU1JVCAgICAgICAgICAgfCBcCisJIExJTUFfUFBfSVJRX1dSSVRFX0JPVU5EQVJZX0VSUk9SICB8 IFwKKwkgTElNQV9QUF9JUlFfSU5WQUxJRF9QTElTVF9DT01NQU5EIHwgXAorCSBMSU1BX1BQX0lS UV9DQUxMX1NUQUNLX1VOREVSRkxPVyAgfCBcCisJIExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfT1ZF UkZMT1cgICB8IFwKKwkgTElNQV9QUF9JUlFfUkVTRVRfQ09NUExFVEVEKQorCisjZGVmaW5lIExJ TUFfUFBfSVJRX01BU0tfRVJST1IgICAgICAgICAgICAgICBcCisJKCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKwkgTElNQV9QUF9JUlFfRk9SQ0VfSEFORyAgICAgICAgICAg IHwgXAorCSBMSU1BX1BQX0lSUV9CVVNfRVJST1IgICAgICAgICAgICAgfCBcCisJIExJTUFfUFBf SVJRX1dSSVRFX0JPVU5EQVJZX0VSUk9SICB8IFwKKwkgTElNQV9QUF9JUlFfSU5WQUxJRF9QTElT VF9DT01NQU5EIHwgXAorCSBMSU1BX1BQX0lSUV9DQUxMX1NUQUNLX1VOREVSRkxPVyAgfCBcCisJ IExJTUFfUFBfSVJRX0NBTExfU1RBQ0tfT1ZFUkZMT1cpCisKKyNkZWZpbmUgTElNQV9QUF9JUlFf TUFTS19VU0VEICAgICAgICAgICAgICAgIFwKKwkoICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorCSBMSU1BX1BQX0lSUV9FTkRfT0ZfRlJBTUUgICAgICAgICAgfCBcCisJIExJ TUFfUFBfSVJRX01BU0tfRVJST1IpCisKKy8qIE1NVSByZWdzICovCisjZGVmaW5lIExJTUFfTU1V X0RURV9BRERSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIExJTUFfTU1VX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lICAgTElNQV9NTVVfU1RB VFVTX1BBR0lOR19FTkFCTEVEICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVT X1BBR0VfRkFVTFRfQUNUSVZFICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX1NU QUxMX0FDVElWRSAgICAgICAgQklUKDIpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX0lETEUg ICAgICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX1JFUExBWV9C VUZGRVJfRU1QVFkgQklUKDQpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX1BBR0VfRkFVTFRf SVNfV1JJVEUgQklUKDUpCisjZGVmaW5lICAgTElNQV9NTVVfU1RBVFVTX0JVU19JRCh4KSAgICAg ICAgICAgKCh4ID4+IDYpICYgMHgxRikKKyNkZWZpbmUgTElNQV9NTVVfQ09NTUFORCAgICAgICAg ICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgICBMSU1BX01NVV9DT01NQU5EX0VOQUJMRV9Q QUdJTkcgICAgICAweDAwCisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9ESVNBQkxFX1BBR0lO RyAgICAgMHgwMQorI2RlZmluZSAgIExJTUFfTU1VX0NPTU1BTkRfRU5BQkxFX1NUQUxMICAgICAg IDB4MDIKKyNkZWZpbmUgICBMSU1BX01NVV9DT01NQU5EX0RJU0FCTEVfU1RBTEwgICAgICAweDAz CisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9aQVBfQ0FDSEUgICAgICAgICAgMHgwNAorI2Rl ZmluZSAgIExJTUFfTU1VX0NPTU1BTkRfUEFHRV9GQVVMVF9ET05FICAgIDB4MDUKKyNkZWZpbmUg ICBMSU1BX01NVV9DT01NQU5EX0hBUkRfUkVTRVQgICAgICAgICAweDA2CisjZGVmaW5lIExJTUFf TU1VX1BBR0VfRkFVTFRfQUREUiAgICAgICAgICAgICAgMHgwMDBDCisjZGVmaW5lIExJTUFfTU1V X1pBUF9PTkVfTElORSAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIExJTUFfTU1VX0lO VF9SQVdTVEFUICAgICAgICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIExJTUFfTU1VX0lOVF9D TEVBUiAgICAgICAgICAgICAgICAgICAgMHgwMDE4CisjZGVmaW5lIExJTUFfTU1VX0lOVF9NQVNL ICAgICAgICAgICAgICAgICAgICAgMHgwMDFDCisjZGVmaW5lICAgTElNQV9NTVVfSU5UX1BBR0Vf RkFVTFQgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lICAgTElNQV9NTVVfSU5UX1JFQURfQlVT X0VSUk9SICAgICAgICAgQklUKDEpCisjZGVmaW5lIExJTUFfTU1VX0lOVF9TVEFUVVMgICAgICAg ICAgICAgICAgICAgMHgwMDIwCisKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1BSRVNFTlQgICAgICAg ICAgQklUKDApCisjZGVmaW5lIExJTUFfVk1fRkxBR19SRUFEX1BFUk1JU1NJT04gIEJJVCgxKQor I2RlZmluZSBMSU1BX1ZNX0ZMQUdfV1JJVEVfUEVSTUlTU0lPTiBCSVQoMikKKyNkZWZpbmUgTElN QV9WTV9GTEFHX09WRVJSSURFX0NBQ0hFICAgQklUKDMpCisjZGVmaW5lIExJTUFfVk1fRkxBR19X UklURV9DQUNIRUFCTEUgIEJJVCg0KQorI2RlZmluZSBMSU1BX1ZNX0ZMQUdfV1JJVEVfQUxMT0NB VEUgICBCSVQoNSkKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1dSSVRFX0JVRkZFUkFCTEUgQklUKDYp CisjZGVmaW5lIExJTUFfVk1fRkxBR19SRUFEX0NBQ0hFQUJMRSAgIEJJVCg3KQorI2RlZmluZSBM SU1BX1ZNX0ZMQUdfUkVBRF9BTExPQ0FURSAgICBCSVQoOCkKKyNkZWZpbmUgTElNQV9WTV9GTEFH X01BU0sgICAgICAgICAgICAgMHgxRkYKKworI2RlZmluZSBMSU1BX1ZNX0ZMQUdTX0NBQ0hFICgJ CQkgXAorCQlMSU1BX1ZNX0ZMQUdfUFJFU0VOVCB8CQkgXAorCQlMSU1BX1ZNX0ZMQUdfUkVBRF9Q RVJNSVNTSU9OIHwJIFwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX1BFUk1JU1NJT04gfAkgXAorCQlM SU1BX1ZNX0ZMQUdfT1ZFUlJJREVfQ0FDSEUgfAkgXAorCQlMSU1BX1ZNX0ZMQUdfV1JJVEVfQ0FD SEVBQkxFIHwJIFwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX0JVRkZFUkFCTEUgfAkgXAorCQlMSU1B X1ZNX0ZMQUdfUkVBRF9DQUNIRUFCTEUgfAkgXAorCQlMSU1BX1ZNX0ZMQUdfUkVBRF9BTExPQ0FU RSApCisKKyNkZWZpbmUgTElNQV9WTV9GTEFHU19VTkNBQ0hFICgJCQlcCisJCUxJTUFfVk1fRkxB R19QUkVTRU5UIHwJCVwKKwkJTElNQV9WTV9GTEFHX1JFQURfUEVSTUlTU0lPTiB8CVwKKwkJTElN QV9WTV9GTEFHX1dSSVRFX1BFUk1JU1NJT04gKQorCisvKiBETEJVIHJlZ3MgKi8KKyNkZWZpbmUg TElNQV9ETEJVX01BU1RFUl9UTExJU1RfUEhZU19BRERSICAweDAwMDAKKyNkZWZpbmUJTElNQV9E TEJVX01BU1RFUl9UTExJU1RfVkFERFIgICAgICAweDAwMDQKKyNkZWZpbmUJTElNQV9ETEJVX1RM TElTVF9WQkFTRUFERFIgICAgICAgICAweDAwMDgKKyNkZWZpbmUJTElNQV9ETEJVX0ZCX0RJTSAg ICAgICAgICAgICAgICAgICAweDAwMEMKKyNkZWZpbmUJTElNQV9ETEJVX1RMTElTVF9DT05GICAg ICAgICAgICAgICAweDAwMTAKKyNkZWZpbmUJTElNQV9ETEJVX1NUQVJUX1RJTEVfUE9TICAgICAg ICAgICAweDAwMTQKKyNkZWZpbmUJTElNQV9ETEJVX1BQX0VOQUJMRV9NQVNLICAgICAgICAgICAw eDAwMTgKKworLyogQkNBU1QgcmVncyAqLworI2RlZmluZSBMSU1BX0JDQVNUX0JST0FEQ0FTVF9N QVNLICAgIDB4MAorI2RlZmluZSBMSU1BX0JDQVNUX0lOVEVSUlVQVF9NQVNLICAgIDB4NAorCisj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuYyBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjBjNmI3YzNiMGNkNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfc2NoZWQuYwpAQCAtMCwwICsxLDQ4NiBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE4IFFp YW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgva3RocmVhZC5o PgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgImxpbWFfZHJ2LmgiCisjaW5j bHVkZSAibGltYV9zY2hlZC5oIgorI2luY2x1ZGUgImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1h X21tdS5oIgorI2luY2x1ZGUgImxpbWFfbDJfY2FjaGUuaCIKKworc3RydWN0IGxpbWFfZmVuY2Ug eworCXN0cnVjdCBkbWFfZmVuY2UgYmFzZTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBl OworfTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpsaW1hX2ZlbmNlX3NsYWIgPSBOVUxM OworCitpbnQgbGltYV9zY2hlZF9zbGFiX2luaXQodm9pZCkKK3sKKwlsaW1hX2ZlbmNlX3NsYWIg PSBrbWVtX2NhY2hlX2NyZWF0ZSgKKwkJImxpbWFfZmVuY2UiLCBzaXplb2Yoc3RydWN0IGxpbWFf ZmVuY2UpLCAwLAorCQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCWlmICghbGltYV9mZW5j ZV9zbGFiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFf c2NoZWRfc2xhYl9maW5pKHZvaWQpCit7CisJaWYgKGxpbWFfZmVuY2Vfc2xhYikKKwkJa21lbV9j YWNoZV9kZXN0cm95KGxpbWFfZmVuY2Vfc2xhYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0 IGxpbWFfZmVuY2UgKnRvX2xpbWFfZmVuY2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCit7CisJ cmV0dXJuIGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IGxpbWFfZmVuY2UsIGJhc2UpOworfQor CitzdGF0aWMgY29uc3QgY2hhciAqbGltYV9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGRt YV9mZW5jZSAqZmVuY2UpCit7CisJcmV0dXJuICJsaW1hIjsKK30KKworc3RhdGljIGNvbnN0IGNo YXIgKmxpbWFfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2Up Cit7CisJc3RydWN0IGxpbWFfZmVuY2UgKmYgPSB0b19saW1hX2ZlbmNlKGZlbmNlKTsKKworCXJl dHVybiBmLT5waXBlLT5iYXNlLm5hbWU7Cit9CisKK3N0YXRpYyBib29sIGxpbWFfZmVuY2VfZW5h YmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlyZXR1cm4gdHJ1ZTsK K30KKworc3RhdGljIHZvaWQgbGltYV9mZW5jZV9yZWxlYXNlX3JjdShzdHJ1Y3QgcmN1X2hlYWQg KnJjdSkKK3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0 IGRtYV9mZW5jZSwgcmN1KTsKKwlzdHJ1Y3QgbGltYV9mZW5jZSAqZmVuY2UgPSB0b19saW1hX2Zl bmNlKGYpOworCisJa21lbV9jYWNoZV9mcmVlKGxpbWFfZmVuY2Vfc2xhYiwgZmVuY2UpOworfQor CitzdGF0aWMgdm9pZCBsaW1hX2ZlbmNlX3JlbGVhc2Uoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2Up Cit7CisJc3RydWN0IGxpbWFfZmVuY2UgKmYgPSB0b19saW1hX2ZlbmNlKGZlbmNlKTsKKworCWNh bGxfcmN1KCZmLT5iYXNlLnJjdSwgbGltYV9mZW5jZV9yZWxlYXNlX3JjdSk7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZG1hX2ZlbmNlX29wcyBsaW1hX2ZlbmNlX29wcyA9IHsKKwkuZ2V0X2Ry aXZlcl9uYW1lID0gbGltYV9mZW5jZV9nZXRfZHJpdmVyX25hbWUsCisJLmdldF90aW1lbGluZV9u YW1lID0gbGltYV9mZW5jZV9nZXRfdGltZWxpbmVfbmFtZSwKKwkuZW5hYmxlX3NpZ25hbGluZyA9 IGxpbWFfZmVuY2VfZW5hYmxlX3NpZ25hbGluZywKKwkud2FpdCA9IGRtYV9mZW5jZV9kZWZhdWx0 X3dhaXQsCisJLnJlbGVhc2UgPSBsaW1hX2ZlbmNlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3Ry dWN0IGxpbWFfZmVuY2UgKmxpbWFfZmVuY2VfY3JlYXRlKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUg KnBpcGUpCit7CisJc3RydWN0IGxpbWFfZmVuY2UgKmZlbmNlOworCisJZmVuY2UgPSBrbWVtX2Nh Y2hlX3phbGxvYyhsaW1hX2ZlbmNlX3NsYWIsIEdGUF9LRVJORUwpOworCWlmICghZmVuY2UpCisJ ICAgICAgIHJldHVybiBOVUxMOworCisJZmVuY2UtPnBpcGUgPSBwaXBlOworCWRtYV9mZW5jZV9p bml0KCZmZW5jZS0+YmFzZSwgJmxpbWFfZmVuY2Vfb3BzLCAmcGlwZS0+ZmVuY2VfbG9jaywKKwkJ ICAgICAgIHBpcGUtPmZlbmNlX2NvbnRleHQsICsrcGlwZS0+ZmVuY2Vfc2Vxbm8pOworCisJcmV0 dXJuIGZlbmNlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRv X2xpbWFfdGFzayhzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQoreworCXJldHVybiBjb250YWlu ZXJfb2Yoam9iLCBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrLCBiYXNlKTsKK30KKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICp0b19saW1hX3BpcGUoc3RydWN0IGRybV9ncHVf c2NoZWR1bGVyICpzY2hlZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNjaGVkLCBzdHJ1Y3Qg bGltYV9zY2hlZF9waXBlLCBiYXNlKTsKK30KKworaW50IGxpbWFfc2NoZWRfdGFza19pbml0KHN0 cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssCisJCQkgc3RydWN0IGxpbWFfc2NoZWRfY29udGV4 dCAqY29udGV4dCwKKwkJCSBzdHJ1Y3QgbGltYV92bSAqdm0pCit7CisJaW50IGVycjsKKworCWVy ciA9IGRybV9zY2hlZF9qb2JfaW5pdCgmdGFzay0+YmFzZSwgJmNvbnRleHQtPmJhc2UsIHZtKTsK KwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdGFzay0+dm0gPSBsaW1hX3ZtX2dldCh2bSk7 CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9zY2hlZF90YXNrX2Zpbmkoc3RydWN0IGxpbWFf c2NoZWRfdGFzayAqdGFzaykKK3sKKwlkbWFfZmVuY2VfcHV0KCZ0YXNrLT5iYXNlLnNfZmVuY2Ut PmZpbmlzaGVkKTsKK30KKworaW50IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN0cnVjdCBsaW1h X3NjaGVkX3Rhc2sgKnRhc2ssIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCWludCBpLCBu ZXdfZGVwID0gNDsKKworCS8qIHNhbWUgY29udGV4dCdzIGZlbmNlIGlzIGRlZmluaXRseSBlYXJs aWVyIHRoZW4gdGhpcyB0YXNrICovCisJaWYgKGZlbmNlLT5jb250ZXh0ID09IHRhc2stPmJhc2Uu c19mZW5jZS0+ZmluaXNoZWQuY29udGV4dCkgeworCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJ cmV0dXJuIDA7CisJfQorCisJaWYgKHRhc2stPmRlcCAmJiB0YXNrLT5udW1fZGVwID09IHRhc2st Pm1heF9kZXApCisJCW5ld19kZXAgPSB0YXNrLT5tYXhfZGVwICogMjsKKworCWlmICh0YXNrLT5t YXhfZGVwIDwgbmV3X2RlcCkgeworCQl2b2lkICpkZXAgPSBrcmVhbGxvYyh0YXNrLT5kZXAsIHNp emVvZigqdGFzay0+ZGVwKSAqIG5ld19kZXAsIEdGUF9LRVJORUwpOworCQlpZiAoIWRlcCkKKwkJ CXJldHVybiAtRU5PTUVNOworCQl0YXNrLT5tYXhfZGVwID0gbmV3X2RlcDsKKwkJdGFzay0+ZGVw ID0gZGVwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0YXNrLT5udW1fZGVwOyBpKyspIHsKKwkJ aWYgKHRhc2stPmRlcFtpXS0+Y29udGV4dCA9PSBmZW5jZS0+Y29udGV4dCAmJgorCQkgICAgZG1h X2ZlbmNlX2lzX2xhdGVyKGZlbmNlLCB0YXNrLT5kZXBbaV0pKSB7CisJCQlkbWFfZmVuY2VfcHV0 KHRhc2stPmRlcFtpXSk7CisJCQl0YXNrLT5kZXBbaV0gPSBmZW5jZTsKKwkJCXJldHVybiAwOwor CQl9CisJfQorCisJdGFzay0+ZGVwW3Rhc2stPm51bV9kZXArK10gPSBmZW5jZTsKKwlyZXR1cm4g MDsKK30KKworaW50IGxpbWFfc2NoZWRfY29udGV4dF9pbml0KHN0cnVjdCBsaW1hX3NjaGVkX3Bp cGUgKnBpcGUsCisJCQkgICAgc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwKKwkJ CSAgICBhdG9taWNfdCAqZ3VpbHR5KQoreworCXN0cnVjdCBkcm1fc2NoZWRfcnEgKnJxID0gcGlw ZS0+YmFzZS5zY2hlZF9ycSArIERSTV9TQ0hFRF9QUklPUklUWV9OT1JNQUw7CisJaW50IGVycjsK KworCWNvbnRleHQtPmZlbmNlcyA9CisJCWt6YWxsb2Moc2l6ZW9mKCpjb250ZXh0LT5mZW5jZXMp ICogbGltYV9zY2hlZF9tYXhfdGFza3MsIEdGUF9LRVJORUwpOworCWlmICghY29udGV4dC0+ZmVu Y2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJmNvbnRleHQtPmxvY2spOwor CWVyciA9IGRybV9zY2hlZF9lbnRpdHlfaW5pdCgmY29udGV4dC0+YmFzZSwgJnJxLCAxLCBndWls dHkpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoY29udGV4dC0+ZmVuY2VzKTsKKwkJY29udGV4dC0+ ZmVuY2VzID0gTlVMTDsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9p ZCBsaW1hX3NjaGVkX2NvbnRleHRfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAor CQkJICAgICBzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0KQoreworCWRybV9zY2hl ZF9lbnRpdHlfZmluaSgmY29udGV4dC0+YmFzZSk7CisKKwltdXRleF9kZXN0cm95KCZjb250ZXh0 LT5sb2NrKTsKKworCWlmIChjb250ZXh0LT5mZW5jZXMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9 IDA7IGkgPCBsaW1hX3NjaGVkX21heF90YXNrczsgaSsrKQorCQkJZG1hX2ZlbmNlX3B1dChjb250 ZXh0LT5mZW5jZXNbaV0pOworCQlrZnJlZShjb250ZXh0LT5mZW5jZXMpOworCX0KK30KKworc3Rh dGljIHVpbnQzMl90IGxpbWFfc2NoZWRfY29udGV4dF9hZGRfZmVuY2Uoc3RydWN0IGxpbWFfc2No ZWRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJICAgICBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSwK KwkJCQkJICAgICB1aW50MzJfdCAqZG9uZSkKK3sKKwl1aW50MzJfdCBzZXEsIGlkeCwgaTsKKwlz dHJ1Y3QgZG1hX2ZlbmNlICpvdGhlcjsKKworCW11dGV4X2xvY2soJmNvbnRleHQtPmxvY2spOwor CisJc2VxID0gY29udGV4dC0+c2VxdWVuY2U7CisJaWR4ID0gc2VxICYgKGxpbWFfc2NoZWRfbWF4 X3Rhc2tzIC0gMSk7CisJb3RoZXIgPSBjb250ZXh0LT5mZW5jZXNbaWR4XTsKKworCWlmIChvdGhl cikgeworCQlpbnQgZXJyID0gZG1hX2ZlbmNlX3dhaXQob3RoZXIsIGZhbHNlKTsKKwkJaWYgKGVy cikKKwkJCURSTV9FUlJPUigiRXJyb3IgJWQgd2FpdGluZyBjb250ZXh0IGZlbmNlXG4iLCBlcnIp OworCX0KKworCWNvbnRleHQtPmZlbmNlc1tpZHhdID0gZG1hX2ZlbmNlX2dldChmZW5jZSk7CisJ Y29udGV4dC0+c2VxdWVuY2UrKzsKKworCS8qIGdldCBmaW5pc2hlZCBmZW5jZSBvZmZzZXQgZnJv bSBzZXEgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbGltYV9zY2hlZF9tYXhfdGFza3M7IGkrKykgewor CQlpZHggPSAoc2VxIC0gaSkgJiAobGltYV9zY2hlZF9tYXhfdGFza3MgLSAxKTsKKwkJaWYgKCFj b250ZXh0LT5mZW5jZXNbaWR4XSB8fAorCQkgICAgZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGNvbnRl eHQtPmZlbmNlc1tpZHhdKSkKKwkJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmY29udGV4 dC0+bG9jayk7CisKKwlkbWFfZmVuY2VfcHV0KG90aGVyKTsKKworCSpkb25lID0gaTsKKwlyZXR1 cm4gc2VxOworfQorCitzdHJ1Y3QgZG1hX2ZlbmNlICpsaW1hX3NjaGVkX2NvbnRleHRfZ2V0X2Zl bmNlKAorCXN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsIHVpbnQzMl90IHNlcSkK K3sKKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKKwlpbnQgaWR4OworCXVpbnQzMl90IG1heCwg bWluOworCisJbXV0ZXhfbG9jaygmY29udGV4dC0+bG9jayk7CisKKwltYXggPSBjb250ZXh0LT5z ZXF1ZW5jZSAtIDE7CisJbWluID0gY29udGV4dC0+c2VxdWVuY2UgLSBsaW1hX3NjaGVkX21heF90 YXNrczsKKworCS8qIGhhbmRsZSBvdmVyZmxvdyBjYXNlICovCisJaWYgKChtaW4gPCBtYXggJiYg KHNlcSA8IG1pbiB8fCBzZXEgPiBtYXgpKSB8fAorCSAgICAobWluID4gbWF4ICYmIChzZXEgPCBt aW4gJiYgc2VxID4gbWF4KSkpIHsKKwkJICAgIGZlbmNlID0gTlVMTDsKKwkJICAgIGdvdG8gb3V0 OworCX0KKworCWlkeCA9IHNlcSAmIChsaW1hX3NjaGVkX21heF90YXNrcyAtIDEpOworCWZlbmNl ID0gZG1hX2ZlbmNlX2dldChjb250ZXh0LT5mZW5jZXNbaWR4XSk7CisKK291dDoKKwltdXRleF91 bmxvY2soJmNvbnRleHQtPmxvY2spOworCisJcmV0dXJuIGZlbmNlOworfQorCit1aW50MzJfdCBs aW1hX3NjaGVkX2NvbnRleHRfcXVldWVfdGFzayhzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpj b250ZXh0LAorCQkJCSAgICAgICBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLAorCQkJCSAg ICAgICB1aW50MzJfdCAqZG9uZSkKK3sKKwl1aW50MzJfdCBzZXEgPSBsaW1hX3NjaGVkX2NvbnRl eHRfYWRkX2ZlbmNlKAorCQljb250ZXh0LCAmdGFzay0+YmFzZS5zX2ZlbmNlLT5maW5pc2hlZCwg ZG9uZSk7CisJZHJtX3NjaGVkX2VudGl0eV9wdXNoX2pvYigmdGFzay0+YmFzZSwgJmNvbnRleHQt PmJhc2UpOworCXJldHVybiBzZXE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlICpsaW1h X3NjaGVkX2RlcGVuZGVuY3koc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYiwKKwkJCQkJICAgICAg IHN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICplbnRpdHkpCit7CisJc3RydWN0IGxpbWFfc2NoZWRf dGFzayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOworCWludCBpOworCisJZm9yIChpID0gMDsg aSA8IHRhc2stPm51bV9kZXA7IGkrKykgeworCQlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IHRh c2stPmRlcFtpXTsKKworCQlpZiAoIXRhc2stPmRlcFtpXSkKKwkJCWNvbnRpbnVlOworCisJCXRh c2stPmRlcFtpXSA9IE5VTEw7CisKKwkJaWYgKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2Up KQorCQkJcmV0dXJuIGZlbmNlOworCisJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOworCX0KKworCXJl dHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqbGltYV9zY2hlZF9ydW5f am9iKHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IpCit7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFz ayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBp cGUgPSB0b19saW1hX3BpcGUoam9iLT5zY2hlZCk7CisJc3RydWN0IGxpbWFfZmVuY2UgKmZlbmNl OworCXN0cnVjdCBkbWFfZmVuY2UgKnJldDsKKwlzdHJ1Y3QgbGltYV92bSAqdm0gPSBOVUxMLCAq bGFzdF92bSA9IE5VTEw7CisJaW50IGk7CisKKwkvKiBhZnRlciBHUFUgcmVzZXQgKi8KKwlpZiAo am9iLT5zX2ZlbmNlLT5maW5pc2hlZC5lcnJvciA8IDApCisJCXJldHVybiBOVUxMOworCisJZmVu Y2UgPSBsaW1hX2ZlbmNlX2NyZWF0ZShwaXBlKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gTlVM TDsKKwl0YXNrLT5mZW5jZSA9ICZmZW5jZS0+YmFzZTsKKworCS8qIGZvciBjYWxsZXIgdXNhZ2Ug b2YgdGhlIGZlbmNlLCBvdGhlcndpc2UgaXJxIGhhbmRsZXIgCisJICogbWF5IGNvbnN1bWUgdGhl IGZlbmNlIGJlZm9yZSBjYWxsZXIgdXNlIGl0ICovCisJcmV0ID0gZG1hX2ZlbmNlX2dldCh0YXNr LT5mZW5jZSk7CisKKwlwaXBlLT5jdXJyZW50X3Rhc2sgPSB0YXNrOworCisJLyogdGhpcyBpcyBu ZWVkZWQgZm9yIE1NVSB0byB3b3JrIGNvcnJlY3RseSwgb3RoZXJ3aXNlIEdQL1BQCisJICogd2ls bCBoYW5nIG9yIHBhZ2UgZmF1bHQgZm9yIHVua25vd24gcmVhc29uIGFmdGVyIHJ1bm5pbmcgZm9y CisJICogYSB3aGlsZS4KKwkgKgorCSAqIE5lZWQgdG8gaW52ZXN0aWdhdGU6CisJICogMS4gaXMg aXQgcmVsYXRlZCB0byBUTEIKKwkgKiAyLiBob3cgbXVjaCBwZXJmb3JtYW5jZSB3aWxsIGJlIGFm ZmVjdGVkIGJ5IEwyIGNhY2hlIGZsdXNoCisJICogMy4gY2FuIHdlIHJlZHVjZSB0aGUgY2FsbGlu ZyBvZiB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgYWxsCisJICogICAgR1AvUFAgdXNlIHRoZSBzYW1l IEwyIGNhY2hlIG9uIG1hbGk0MDAKKwkgKgorCSAqIFRPRE86CisJICogMS4gbW92ZSB0aGlzIHRv IHRhc2sgZmluaSB0byBzYXZlIHNvbWUgd2FpdCB0aW1lPworCSAqIDIuIHdoZW4gR1AvUFAgdXNl IGRpZmZlcmVudCBsMiBjYWNoZSwgbmVlZCBQUCB3YWl0IEdQIGwyCisJICogICAgY2FjaGUgZmx1 c2g/CisJICovCisJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9sMl9jYWNoZTsgaSsrKQorCQls aW1hX2wyX2NhY2hlX2ZsdXNoKHBpcGUtPmwyX2NhY2hlW2ldKTsKKworCWlmICh0YXNrLT52bSAh PSBwaXBlLT5jdXJyZW50X3ZtKSB7CisJCXZtID0gbGltYV92bV9nZXQodGFzay0+dm0pOworCQls YXN0X3ZtID0gcGlwZS0+Y3VycmVudF92bTsKKwkJcGlwZS0+Y3VycmVudF92bSA9IHRhc2stPnZt OworCX0KKworCWlmIChwaXBlLT5iY2FzdF9tbXUpCisJCWxpbWFfbW11X3N3aXRjaF92bShwaXBl LT5iY2FzdF9tbXUsIHZtKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9t bXU7IGkrKykKKwkJCWxpbWFfbW11X3N3aXRjaF92bShwaXBlLT5tbXVbaV0sIHZtKTsKKwl9CisK KwlpZiAobGFzdF92bSkKKwkJbGltYV92bV9wdXQobGFzdF92bSk7CisKKwlwaXBlLT5lcnJvciA9 IGZhbHNlOworCXBpcGUtPnRhc2tfcnVuKHBpcGUsIHRhc2spOworCisJcmV0dXJuIHRhc2stPmZl bmNlOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3NjaGVkX2hhbmRsZV9lcnJvcl90YXNrKHN0cnVj dCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkJCSBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0 YXNrKQoreworCWt0aHJlYWRfcGFyayhwaXBlLT5iYXNlLnRocmVhZCk7CisJZHJtX3NjaGVkX2h3 X2pvYl9yZXNldCgmcGlwZS0+YmFzZSwgJnRhc2stPmJhc2UpOworCisJcGlwZS0+dGFza19lcnJv cihwaXBlKTsKKworCWlmIChwaXBlLT5iY2FzdF9tbXUpCisJCWxpbWFfbW11X3BhZ2VfZmF1bHRf cmVzdW1lKHBpcGUtPmJjYXN0X21tdSk7CisJZWxzZSB7CisJCWludCBpOworCQlmb3IgKGkgPSAw OyBpIDwgcGlwZS0+bnVtX21tdTsgaSsrKQorCQkJbGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1bWUo cGlwZS0+bW11W2ldKTsKKwl9CisKKwlpZiAocGlwZS0+Y3VycmVudF92bSkKKwkJbGltYV92bV9w dXQocGlwZS0+Y3VycmVudF92bSk7CisKKwlwaXBlLT5jdXJyZW50X3ZtID0gTlVMTDsKKwlwaXBl LT5jdXJyZW50X3Rhc2sgPSBOVUxMOworCisJZHJtX3NjaGVkX2pvYl9yZWNvdmVyeSgmcGlwZS0+ YmFzZSk7CisJa3RocmVhZF91bnBhcmsocGlwZS0+YmFzZS50aHJlYWQpOworfQorCitzdGF0aWMg dm9pZCBsaW1hX3NjaGVkX3RpbWVkb3V0X2pvYihzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQor eworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSB0b19saW1hX3BpcGUoam9iLT5zY2hl ZCk7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOwor CisJRFJNX0VSUk9SKCJsaW1hIGpvYiB0aW1lb3V0XG4iKTsKKworCWxpbWFfc2NoZWRfaGFuZGxl X2Vycm9yX3Rhc2socGlwZSwgdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfc2NoZWRfZnJl ZV9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYikKK3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF90 YXNrICp0YXNrID0gdG9fbGltYV90YXNrKGpvYik7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAq cGlwZSA9IHRvX2xpbWFfcGlwZShqb2ItPnNjaGVkKTsKKwlpbnQgaTsKKworCWRtYV9mZW5jZV9w dXQodGFzay0+ZmVuY2UpOworCisJZm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9kZXA7IGkrKykg eworCQlpZiAodGFzay0+ZGVwW2ldKQorCQkJZG1hX2ZlbmNlX3B1dCh0YXNrLT5kZXBbaV0pOwor CX0KKworCWlmICh0YXNrLT5kZXApCisJCWtmcmVlKHRhc2stPmRlcCk7CisKKwlsaW1hX3ZtX3B1 dCh0YXNrLT52bSk7CisJa21lbV9jYWNoZV9mcmVlKHBpcGUtPnRhc2tfc2xhYiwgdGFzayk7Cit9 CisKK2NvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgbGltYV9zY2hlZF9vcHMgPSB7 CisJLmRlcGVuZGVuY3kgPSBsaW1hX3NjaGVkX2RlcGVuZGVuY3ksCisJLnJ1bl9qb2IgPSBsaW1h X3NjaGVkX3J1bl9qb2IsCisJLnRpbWVkb3V0X2pvYiA9IGxpbWFfc2NoZWRfdGltZWRvdXRfam9i LAorCS5mcmVlX2pvYiA9IGxpbWFfc2NoZWRfZnJlZV9qb2IsCit9OworCitzdGF0aWMgdm9pZCBs aW1hX3NjaGVkX2Vycm9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVj dCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGxp bWFfc2NoZWRfcGlwZSwgZXJyb3Jfd29yayk7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFz ayA9IHBpcGUtPmN1cnJlbnRfdGFzazsKKworCWxpbWFfc2NoZWRfaGFuZGxlX2Vycm9yX3Rhc2so cGlwZSwgdGFzayk7Cit9CisKK2ludCBsaW1hX3NjaGVkX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9z Y2hlZF9waXBlICpwaXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWxvbmcgdGltZW91dDsKKwor CWlmIChsaW1hX3NjaGVkX3RpbWVvdXRfbXMgPD0gMCkKKwkJdGltZW91dCA9IE1BWF9TQ0hFRFVM RV9USU1FT1VUOworCWVsc2UKKwkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMobGltYV9zY2hl ZF90aW1lb3V0X21zKTsKKworCXBpcGUtPmZlbmNlX2NvbnRleHQgPSBkbWFfZmVuY2VfY29udGV4 dF9hbGxvYygxKTsKKwlzcGluX2xvY2tfaW5pdCgmcGlwZS0+ZmVuY2VfbG9jayk7CisKKwlJTklU X1dPUksoJnBpcGUtPmVycm9yX3dvcmssIGxpbWFfc2NoZWRfZXJyb3Jfd29yayk7CisKKwlyZXR1 cm4gZHJtX3NjaGVkX2luaXQoJnBpcGUtPmJhc2UsICZsaW1hX3NjaGVkX29wcywgMSwgMCwgdGlt ZW91dCwgbmFtZSk7Cit9CisKK3ZvaWQgbGltYV9zY2hlZF9waXBlX2Zpbmkoc3RydWN0IGxpbWFf c2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlkcm1fc2NoZWRfZmluaSgmcGlwZS0+YmFzZSk7Cit9CisK K3Vuc2lnbmVkIGxvbmcgbGltYV90aW1lb3V0X3RvX2ppZmZpZXModTY0IHRpbWVvdXRfbnMpCit7 CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0X2ppZmZpZXM7CisJa3RpbWVfdCB0aW1lb3V0OworCisJ LyogY2xhbXAgdGltZW91dCBpZiBpdCdzIHRvIGxhcmdlICovCisJaWYgKCgoczY0KXRpbWVvdXRf bnMpIDwgMCkKKwkJcmV0dXJuIE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCisJdGltZW91dCA9IGt0 aW1lX3N1Yihuc190b19rdGltZSh0aW1lb3V0X25zKSwga3RpbWVfZ2V0KCkpOworCWlmIChrdGlt ZV90b19ucyh0aW1lb3V0KSA8IDApCisJCXJldHVybiAwOworCisJdGltZW91dF9qaWZmaWVzID0g bnNlY3NfdG9famlmZmllcyhrdGltZV90b19ucyh0aW1lb3V0KSk7CisJLyogIGNsYW1wIHRpbWVv dXQgdG8gYXZvaWQgdW5zaWduZWQtPiBzaWduZWQgb3ZlcmZsb3cgKi8KKwlpZiAodGltZW91dF9q aWZmaWVzID4gTUFYX1NDSEVEVUxFX1RJTUVPVVQgKQorCQlyZXR1cm4gTUFYX1NDSEVEVUxFX1RJ TUVPVVQ7CisKKwlyZXR1cm4gdGltZW91dF9qaWZmaWVzOworfQorCit2b2lkIGxpbWFfc2NoZWRf cGlwZV90YXNrX2RvbmUoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlpZiAocGlw ZS0+ZXJyb3IpCisJICAgICAgICBzY2hlZHVsZV93b3JrKCZwaXBlLT5lcnJvcl93b3JrKTsKKwll bHNlIHsKKwkJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzayA9IHBpcGUtPmN1cnJlbnRfdGFz azsKKworCQlwaXBlLT50YXNrX2ZpbmkocGlwZSk7CisJCWRtYV9mZW5jZV9zaWduYWwodGFzay0+ ZmVuY2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2No ZWQuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmUxMzkzNzY3MTI4ZgotLS0gL2Rldi9udWxsCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2NoZWQuaApAQCAtMCwwICsxLDEwOCBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQg MjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElN QV9TQ0hFRF9IX18KKyNkZWZpbmUgX19MSU1BX1NDSEVEX0hfXworCisjaW5jbHVkZSA8ZHJtL2dw dV9zY2hlZHVsZXIuaD4KKworc3RydWN0IGxpbWFfdm07CisKK3N0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgeworCXN0cnVjdCBkcm1fc2NoZWRfam9iIGJhc2U7CisKKwlzdHJ1Y3QgbGltYV92bSAqdm07 CisJdm9pZCAqZnJhbWU7CisKKwlzdHJ1Y3QgZG1hX2ZlbmNlICoqZGVwOworCWludCBudW1fZGVw OworCWludCBtYXhfZGVwOworCisJLyogcGlwZSBmZW5jZSAqLworCXN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlOworfTsKKworc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCB7CisJc3RydWN0IGRybV9z Y2hlZF9lbnRpdHkgYmFzZTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgZG1hX2ZlbmNl ICoqZmVuY2VzOworCXVpbnQzMl90IHNlcXVlbmNlOworfTsKKworI2RlZmluZSBMSU1BX1NDSEVE X1BJUEVfTUFYX01NVSAgICAgICA4CisjZGVmaW5lIExJTUFfU0NIRURfUElQRV9NQVhfTDJfQ0FD SEUgIDIKKyNkZWZpbmUgTElNQV9TQ0hFRF9QSVBFX01BWF9QUk9DRVNTT1IgOAorCitzdHJ1Y3Qg bGltYV9pcDsKKworc3RydWN0IGxpbWFfc2NoZWRfcGlwZSB7CisJc3RydWN0IGRybV9ncHVfc2No ZWR1bGVyIGJhc2U7CisKKwl1NjQgZmVuY2VfY29udGV4dDsKKwl1MzIgZmVuY2Vfc2Vxbm87CisJ c3BpbmxvY2tfdCBmZW5jZV9sb2NrOworCisJc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqY3VycmVu dF90YXNrOworCXN0cnVjdCBsaW1hX3ZtICpjdXJyZW50X3ZtOworCisJc3RydWN0IGxpbWFfaXAg Km1tdVtMSU1BX1NDSEVEX1BJUEVfTUFYX01NVV07CisJaW50IG51bV9tbXU7CisKKwlzdHJ1Y3Qg bGltYV9pcCAqbDJfY2FjaGVbTElNQV9TQ0hFRF9QSVBFX01BWF9MMl9DQUNIRV07CisJaW50IG51 bV9sMl9jYWNoZTsKKworCXN0cnVjdCBsaW1hX2lwICpwcm9jZXNzb3JbTElNQV9TQ0hFRF9QSVBF X01BWF9QUk9DRVNTT1JdOworCWludCBudW1fcHJvY2Vzc29yOworCisJc3RydWN0IGxpbWFfaXAg KmJjYXN0X3Byb2Nlc3NvcjsKKwlzdHJ1Y3QgbGltYV9pcCAqYmNhc3RfbW11OworCisJdTMyIGRv bmU7CisJYm9vbCBlcnJvcjsKKwlhdG9taWNfdCB0YXNrOworCisJaW50IGZyYW1lX3NpemU7CisJ c3RydWN0IGttZW1fY2FjaGUgKnRhc2tfc2xhYjsKKworCWludCAoKnRhc2tfdmFsaWRhdGUpKHN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2sp OworCXZvaWQgKCp0YXNrX3J1bikoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwgc3RydWN0 IGxpbWFfc2NoZWRfdGFzayAqdGFzayk7CisJdm9pZCAoKnRhc2tfZmluaSkoc3RydWN0IGxpbWFf c2NoZWRfcGlwZSAqcGlwZSk7CisJdm9pZCAoKnRhc2tfZXJyb3IpKHN0cnVjdCBsaW1hX3NjaGVk X3BpcGUgKnBpcGUpOworCXZvaWQgKCp0YXNrX21tdV9lcnJvcikoc3RydWN0IGxpbWFfc2NoZWRf cGlwZSAqcGlwZSk7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZXJyb3Jfd29yazsKK307CisKK2lu dCBsaW1hX3NjaGVkX3Rhc2tfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLAorCQkJ IHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJCQkgc3RydWN0IGxpbWFfdm0g KnZtKTsKK3ZvaWQgbGltYV9zY2hlZF90YXNrX2Zpbmkoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAq dGFzayk7CitpbnQgbGltYV9zY2hlZF90YXNrX2FkZF9kZXAoc3RydWN0IGxpbWFfc2NoZWRfdGFz ayAqdGFzaywgc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpOworCitpbnQgbGltYV9zY2hlZF9jb250 ZXh0X2luaXQoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAgICBzdHJ1Y3QgbGlt YV9zY2hlZF9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgIGF0b21pY190ICpndWlsdHkpOwordm9p ZCBsaW1hX3NjaGVkX2NvbnRleHRfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAor CQkJICAgICBzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0KTsKK3VpbnQzMl90IGxp bWFfc2NoZWRfY29udGV4dF9xdWV1ZV90YXNrKHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNv bnRleHQsCisJCQkJICAgICAgIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2ssCisJCQkJICAg ICAgIHVpbnQzMl90ICpkb25lKTsKK3N0cnVjdCBkbWFfZmVuY2UgKmxpbWFfc2NoZWRfY29udGV4 dF9nZXRfZmVuY2UoCisJc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwgdWludDMy X3Qgc2VxKTsKKworaW50IGxpbWFfc2NoZWRfcGlwZV9pbml0KHN0cnVjdCBsaW1hX3NjaGVkX3Bp cGUgKnBpcGUsIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBsaW1hX3NjaGVkX3BpcGVfZmluaShz dHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKTsKK3ZvaWQgbGltYV9zY2hlZF9waXBlX3Rhc2tf ZG9uZShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKTsKKworc3RhdGljIGlubGluZSB2b2lk IGxpbWFfc2NoZWRfcGlwZV9tbXVfZXJyb3Ioc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkK K3sKKwlwaXBlLT5lcnJvciA9IHRydWU7CisJcGlwZS0+dGFza19tbXVfZXJyb3IocGlwZSk7Cit9 CisKK2ludCBsaW1hX3NjaGVkX3NsYWJfaW5pdCh2b2lkKTsKK3ZvaWQgbGltYV9zY2hlZF9zbGFi X2Zpbmkodm9pZCk7CisKK3Vuc2lnbmVkIGxvbmcgbGltYV90aW1lb3V0X3RvX2ppZmZpZXModTY0 IHRpbWVvdXRfbnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfdHRtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3R0bS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uM2MxOTA0ZTMzZmY1Ci0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV90dG0uYwpAQCAtMCwwICsxLDMxOSBAQAor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQg MjAxOCBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L21t Lmg+CisjaW5jbHVkZSA8ZHJtL3R0bS90dG1fcGFnZV9hbGxvYy5oPgorCisjaW5jbHVkZSAibGlt YV9kcnYuaCIKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFfb2JqZWN0 LmgiCisKKworc3RydWN0IGxpbWFfdHRfbWdyIHsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWdu ZWQgbG9uZyBhdmFpbGFibGU7Cit9OworCitzdGF0aWMgaW50IGxpbWFfdHRtX2JvX21hbl9pbml0 KHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAorCQkJCXVuc2lnbmVkIGxvbmcgcF9z aXplKQoreworCXN0cnVjdCBsaW1hX3R0X21nciAqbWdyOworCisJbWdyID0ga21hbGxvYyhzaXpl b2YoKm1nciksIEdGUF9LRVJORUwpOworCWlmICghbWdyKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CXNwaW5fbG9ja19pbml0KCZtZ3ItPmxvY2spOworCW1nci0+YXZhaWxhYmxlID0gcF9zaXplOwor CW1hbi0+cHJpdiA9IG1ncjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX3R0bV9i b19tYW5fdGFrZWRvd24oc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4pCit7CisJc3Ry dWN0IGxpbWFfdHRfbWdyICptZ3IgPSBtYW4tPnByaXY7CisKKwlrZnJlZShtZ3IpOworCW1hbi0+ cHJpdiA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGltYV90dG1fYm9fbWFu X2dldF9ub2RlKHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuLAorCQkJCSAgICBzdHJ1 Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNl ICpwbGFjZSwKKwkJCQkgICAgc3RydWN0IHR0bV9tZW1fcmVnICptZW0pCit7CisJc3RydWN0IGxp bWFfdHRfbWdyICptZ3IgPSBtYW4tPnByaXY7CisKKwkvKiBkb24ndCBleGNlZWQgdGhlIG1lbSBs aW1pdCAqLworCXNwaW5fbG9jaygmbWdyLT5sb2NrKTsKKwlpZiAobWdyLT5hdmFpbGFibGUgPCBt ZW0tPm51bV9wYWdlcykgeworCQlzcGluX3VubG9jaygmbWdyLT5sb2NrKTsKKwkJcmV0dXJuIDA7 CisJfQorCW1nci0+YXZhaWxhYmxlIC09IG1lbS0+bnVtX3BhZ2VzOworCXNwaW5fdW5sb2NrKCZt Z3ItPmxvY2spOworCisJLyoganVzdCBmYWtlIGEgbm9uLW51bGwgcG9pbnRlciB0byB0ZWxsIGNh bGxlciBzdWNjZXNzICovCisJbWVtLT5tbV9ub2RlID0gKHZvaWQgKikxOworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBsaW1hX3R0bV9ib19tYW5fcHV0X25vZGUoc3RydWN0IHR0bV9tZW1f dHlwZV9tYW5hZ2VyICptYW4sCisJCQkJICAgICBzdHJ1Y3QgdHRtX21lbV9yZWcgKm1lbSkKK3sK KwlzdHJ1Y3QgbGltYV90dF9tZ3IgKm1nciA9IG1hbi0+cHJpdjsKKworCXNwaW5fbG9jaygmbWdy LT5sb2NrKTsKKwltZ3ItPmF2YWlsYWJsZSArPSBtZW0tPm51bV9wYWdlczsKKwlzcGluX3VubG9j aygmbWdyLT5sb2NrKTsKKworCW1lbS0+bW1fbm9kZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lk IGxpbWFfdHRtX2JvX21hbl9kZWJ1ZyhzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiwK KwkJCQkgIHN0cnVjdCBkcm1fcHJpbnRlciAqcHJpbnRlcikKK3sKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlcl9mdW5jIGxpbWFfYm9fbWFuYWdlcl9mdW5jID0g eworCS5pbml0ID0gbGltYV90dG1fYm9fbWFuX2luaXQsCisJLnRha2Vkb3duID0gbGltYV90dG1f Ym9fbWFuX3Rha2Vkb3duLAorCS5nZXRfbm9kZSA9IGxpbWFfdHRtX2JvX21hbl9nZXRfbm9kZSwK KwkucHV0X25vZGUgPSBsaW1hX3R0bV9ib19tYW5fcHV0X25vZGUsCisJLmRlYnVnID0gbGltYV90 dG1fYm9fbWFuX2RlYnVnCit9OworCitzdGF0aWMgaW50IGxpbWFfaW5pdF9tZW1fdHlwZShzdHJ1 Y3QgdHRtX2JvX2RldmljZSAqYmRldiwgdWludDMyX3QgdHlwZSwKKwkJCSAgICAgIHN0cnVjdCB0 dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0g dHRtX3RvX2xpbWFfZGV2KGJkZXYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBUVE1fUExf U1lTVEVNOgorCQkvKiBTeXN0ZW0gbWVtb3J5ICovCisJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQ RV9GTEFHX01BUFBBQkxFOworCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tf Q0FDSElORzsKKwkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CisJ CWJyZWFrOworCWNhc2UgVFRNX1BMX1RUOgorCQltYW4tPmZ1bmMgPSAmbGltYV9ib19tYW5hZ2Vy X2Z1bmM7CisJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFOworCQltYW4t PmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tfQ0FDSElORzsKKwkJbWFuLT5kZWZhdWx0 X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRl dl9lcnIoZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBtZW1vcnkgdHlwZSAldVxuIiwKKwkJCSh1bnNp Z25lZCBpbnQpdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBsaW1hX3R0bV9iYWNrZW5kX2JpbmQoc3RydWN0IHR0bV90dCAqdHRtLAorCQkJ CSBzdHJ1Y3QgdHRtX21lbV9yZWcgKmJvX21lbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBsaW1hX3R0bV9iYWNrZW5kX3VuYmluZChzdHJ1Y3QgdHRtX3R0ICp0dG0pCit7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfdHRtX2JhY2tlbmRfZGVzdHJveShzdHJ1Y3Qg dHRtX3R0ICp0dG0pCit7CisJc3RydWN0IGxpbWFfdHRtX3R0ICp0dCA9ICh2b2lkICopdHRtOwor CisJdHRtX2RtYV90dF9maW5pKCZ0dC0+dHRtKTsKKwlrZnJlZSh0dCk7Cit9CisKK3N0YXRpYyBz dHJ1Y3QgdHRtX2JhY2tlbmRfZnVuYyBsaW1hX3R0bV9iYWNrZW5kX2Z1bmMgPSB7CisJLmJpbmQg PSAmbGltYV90dG1fYmFja2VuZF9iaW5kLAorCS51bmJpbmQgPSAmbGltYV90dG1fYmFja2VuZF91 bmJpbmQsCisJLmRlc3Ryb3kgPSAmbGltYV90dG1fYmFja2VuZF9kZXN0cm95LAorfTsKKworc3Rh dGljIHN0cnVjdCB0dG1fdHQgKmxpbWFfdHRtX3R0X2NyZWF0ZShzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvLAorCQkJCQkgdWludDMyX3QgcGFnZV9mbGFncykKK3sKKwlzdHJ1Y3QgbGltYV90 dG1fdHQgKnR0OworCisJdHQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGltYV90dG1fdHQpLCBH RlBfS0VSTkVMKTsKKwlpZiAodHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl0dC0+dHRt LnR0bS5mdW5jID0gJmxpbWFfdHRtX2JhY2tlbmRfZnVuYzsKKworCWlmICh0dG1fc2dfdHRfaW5p dCgmdHQtPnR0bSwgYm8sIHBhZ2VfZmxhZ3MpKSB7CisJCWtmcmVlKHR0KTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJcmV0dXJuICZ0dC0+dHRtLnR0bTsKK30KKworc3RhdGljIGludCBsaW1hX3R0 bV90dF9wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0dG0sCisJCQkJc3RydWN0IHR0bV9vcGVyYXRp b25fY3R4ICpjdHgpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSB0dG1fdG9fbGltYV9k ZXYodHRtLT5iZGV2KTsKKwlzdHJ1Y3QgbGltYV90dG1fdHQgKnR0ID0gKHZvaWQgKil0dG07CisJ Ym9vbCBzbGF2ZSA9ICEhKHR0bS0+cGFnZV9mbGFncyAmIFRUTV9QQUdFX0ZMQUdfU0cpOworCisJ aWYgKHNsYXZlKSB7CisJCWRybV9wcmltZV9zZ190b19wYWdlX2FkZHJfYXJyYXlzKHR0bS0+c2cs IHR0bS0+cGFnZXMsCisJCQkJCQkgdHQtPnR0bS5kbWFfYWRkcmVzcywKKwkJCQkJCSB0dG0tPm51 bV9wYWdlcyk7CisJCXR0bS0+c3RhdGUgPSB0dF91bmJvdW5kOworCQlyZXR1cm4gMDsKKwl9CisK KwlyZXR1cm4gdHRtX3BvcHVsYXRlX2FuZF9tYXBfcGFnZXMoZGV2LT5kZXYsICZ0dC0+dHRtLCBj dHgpOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3R0bV90dF91bnBvcHVsYXRlKHN0cnVjdCB0dG1f dHQgKnR0bSkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IHR0bV90b19saW1hX2Rldih0 dG0tPmJkZXYpOworCXN0cnVjdCBsaW1hX3R0bV90dCAqdHQgPSAodm9pZCAqKXR0bTsKKwlib29s IHNsYXZlID0gISEodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxBR19TRyk7CisKKwlpZiAo c2xhdmUpCisJCXJldHVybjsKKworCXR0bV91bm1hcF9hbmRfdW5wb3B1bGF0ZV9wYWdlcyhkZXYt PmRldiwgJnR0LT50dG0pOworfQorCitzdGF0aWMgaW50IGxpbWFfaW52YWxpZGF0ZV9jYWNoZXMo c3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsCisJCQkJICB1aW50MzJfdCBmbGFncykKK3sKKwlz dHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IHR0bV90b19saW1hX2RldihiZGV2KTsKKworCWRldl9l cnIoZGV2LT5kZXYsICIlcyBub3QgaW1wbGVtZW50ZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZXZpY3RfZmxhZ3Moc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0ICp0Ym8sCisJCQkgICAgIHN0cnVjdCB0dG1fcGxhY2VtZW50ICpwbGFjZW1lbnQp Cit7CisJc3RydWN0IGxpbWFfYm8gKmJvID0gdHRtX3RvX2xpbWFfYm8odGJvKTsKKwlzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiA9IHRvX2xpbWFfZGV2KGJvLT5nZW0uZGV2KTsKKworCWRldl9lcnIo ZGV2LT5kZXYsICIlcyBub3QgaW1wbGVtZW50ZWRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0 YXRpYyBpbnQgbGltYV92ZXJpZnlfYWNjZXNzKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJv LAorCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGxpbWFfYm8gKmJvID0g dHRtX3RvX2xpbWFfYm8odGJvKTsKKworCXJldHVybiBkcm1fdm1hX25vZGVfdmVyaWZ5X2FjY2Vz cygmYm8tPmdlbS52bWFfbm9kZSwKKwkJCQkJICBmaWxwLT5wcml2YXRlX2RhdGEpOworfQorCitz dGF0aWMgaW50IGxpbWFfdHRtX2lvX21lbV9yZXNlcnZlKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpi ZGV2LAorCQkJCSAgIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQoreworCXN0cnVjdCB0dG1fbWVt X3R5cGVfbWFuYWdlciAqbWFuID0gJmJkZXYtPm1hblttZW0tPm1lbV90eXBlXTsKKworCW1lbS0+ YnVzLmFkZHIgPSBOVUxMOworCW1lbS0+YnVzLm9mZnNldCA9IDA7CisJbWVtLT5idXMuc2l6ZSA9 IG1lbS0+bnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7CisJbWVtLT5idXMuYmFzZSA9IDA7CisJbWVt LT5idXMuaXNfaW9tZW0gPSBmYWxzZTsKKworCWlmICghKG1hbi0+ZmxhZ3MgJiBUVE1fTUVNVFlQ RV9GTEFHX01BUFBBQkxFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG1lbS0+bWVt X3R5cGUpIHsKKwljYXNlIFRUTV9QTF9TWVNURU06CisJY2FzZSBUVE1fUExfVFQ6CisJCXJldHVy biAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgbGltYV90dG1faW9fbWVtX2ZyZWUoc3RydWN0IHR0bV9ib19kZXZpY2UgKmJk ZXYsCisJCQkJIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKQoreworCit9CisKK3N0YXRpYyB2b2lk IGxpbWFfYm9fbW92ZV9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8sIGJvb2wg ZXZpY3QsCisJCQkJc3RydWN0IHR0bV9tZW1fcmVnICpuZXdfbWVtKQoreworCXN0cnVjdCBsaW1h X2JvICpibyA9IHR0bV90b19saW1hX2JvKHRibyk7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYg PSB0b19saW1hX2Rldihiby0+Z2VtLmRldik7CisKKwlpZiAoZXZpY3QpCisJCWRldl9lcnIoZGV2 LT5kZXYsICIlcyBub3QgaW1wbGVtZW50ZWRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0YXRp YyB2b2lkIGxpbWFfYm9fc3dhcF9ub3RpZnkoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICp0Ym8p Cit7CisJc3RydWN0IGxpbWFfYm8gKmJvID0gdHRtX3RvX2xpbWFfYm8odGJvKTsKKwlzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiA9IHRvX2xpbWFfZGV2KGJvLT5nZW0uZGV2KTsKKworCWRldl9lcnIo ZGV2LT5kZXYsICIlcyBub3QgaW1wbGVtZW50ZWRcbiIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgdHRtX2JvX2RyaXZlciBsaW1hX2JvX2RyaXZlciA9IHsKKwkudHRtX3R0X2Ny ZWF0ZSA9IGxpbWFfdHRtX3R0X2NyZWF0ZSwKKwkudHRtX3R0X3BvcHVsYXRlID0gbGltYV90dG1f dHRfcG9wdWxhdGUsCisJLnR0bV90dF91bnBvcHVsYXRlID0gbGltYV90dG1fdHRfdW5wb3B1bGF0 ZSwKKwkuaW52YWxpZGF0ZV9jYWNoZXMgPSBsaW1hX2ludmFsaWRhdGVfY2FjaGVzLAorCS5pbml0 X21lbV90eXBlID0gbGltYV9pbml0X21lbV90eXBlLAorCS5ldmljdGlvbl92YWx1YWJsZSA9IHR0 bV9ib19ldmljdGlvbl92YWx1YWJsZSwKKwkuZXZpY3RfZmxhZ3MgPSBsaW1hX2V2aWN0X2ZsYWdz LAorCS52ZXJpZnlfYWNjZXNzID0gbGltYV92ZXJpZnlfYWNjZXNzLAorCS5pb19tZW1fcmVzZXJ2 ZSA9IGxpbWFfdHRtX2lvX21lbV9yZXNlcnZlLAorCS5pb19tZW1fZnJlZSA9IGxpbWFfdHRtX2lv X21lbV9mcmVlLAorCS5tb3ZlX25vdGlmeSA9IGxpbWFfYm9fbW92ZV9ub3RpZnksCisJLnN3YXBf bm90aWZ5ID0gbGltYV9ib19zd2FwX25vdGlmeSwKK307CisKK2ludCBsaW1hX3R0bV9pbml0KHN0 cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCWludCBlcnI7CisJdTY0IGd0dF9zaXplOworCisJ ZXJyID0gdHRtX2JvX2RldmljZV9pbml0KCZkZXYtPm1tYW4uYmRldiwKKwkJCQkgJmxpbWFfYm9f ZHJpdmVyLAorCQkJCSBkZXYtPmRkZXYtPmFub25faW5vZGUtPmlfbWFwcGluZywKKwkJCQkgRFJN X0ZJTEVfUEFHRV9PRkZTRVQsCisJCQkJIHRydWUpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycihk ZXYtPmRldiwgImZhaWxlZCBpbml0aWFsaXppbmcgYnVmZmVyIG9iamVjdCAiCisJCQkiZHJpdmVy KCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGxpbWFfbWF4X21lbSA8 IDApIHsKKwkJc3RydWN0IHN5c2luZm8gc2k7CisJCXNpX21lbWluZm8oJnNpKTsKKwkJLyogVE9E TzogYmV0dGVyIHRvIGhhdmUgbG93ZXIgMzIgbWVtIHNpemUgKi8KKwkJZ3R0X3NpemUgPSBtaW4o KCh1NjQpc2kudG90YWxyYW0gKiBzaS5tZW1fdW5pdCAqIDMvNCksCisJCQkgICAgICAgMHgxMDAw MDAwMDBVTEwpOworCX0KKwllbHNlCisJCWd0dF9zaXplID0gKHU2NClsaW1hX21heF9tZW0gPDwg MjA7CisKKwllcnIgPSB0dG1fYm9faW5pdF9tbSgmZGV2LT5tbWFuLmJkZXYsIFRUTV9QTF9UVCwg Z3R0X3NpemUgPj4gUEFHRV9TSElGVCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2 LCAiRmFpbGVkIGluaXRpYWxpemluZyBHVFQgaGVhcC5cbiIpOworCQlnb3RvIGVycl9vdXQwOwor CX0KKwlyZXR1cm4gMDsKKworZXJyX291dDA6CisJdHRtX2JvX2RldmljZV9yZWxlYXNlKCZkZXYt Pm1tYW4uYmRldik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX3R0bV9maW5pKHN0cnVj dCBsaW1hX2RldmljZSAqZGV2KQoreworCXR0bV9ib19kZXZpY2VfcmVsZWFzZSgmZGV2LT5tbWFu LmJkZXYpOworCWRldl9pbmZvKGRldi0+ZGV2LCAidHRtIGZpbmFsaXplZFxuIik7Cit9CmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3R0bS5oIGIvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV90dG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LmMyNzU5YTQzZjA2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfdHRtLmgKQEAgLTAsMCArMSwyNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxOCBRaWFuZyBZdSA8eXVxODI1QGdtYWls LmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfVFRNX0hfXworI2RlZmluZSBfX0xJTUFfVFRNX0hf XworCisjaW5jbHVkZSA8ZHJtL3R0bS90dG1fYm9fZHJpdmVyLmg+CisKK3N0cnVjdCBsaW1hX21t YW4geworCXN0cnVjdCB0dG1fYm9fZGV2aWNlIGJkZXY7CisJYm9vbCBtZW1fZ2xvYmFsX3JlZmVy ZW5jZWQ7Cit9OworCitzdHJ1Y3QgbGltYV90dG1fdHQgeworCXN0cnVjdCB0dG1fZG1hX3R0IHR0 bTsKK307CisKK3N0cnVjdCBsaW1hX2RldmljZTsKK3N0cnVjdCBsaW1hX2JvOworCitpbnQgbGlt YV90dG1faW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldik7Cit2b2lkIGxpbWFfdHRtX2Zpbmko c3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmEyNjRmM2FlODNmZQotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfdm0uYwpAQCAtMCwwICsx LDM1NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBD b3B5cmlnaHQgMjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5j bHVkZSA8bGludXgvaW50ZXJ2YWxfdHJlZV9nZW5lcmljLmg+CisKKyNpbmNsdWRlICJsaW1hX2Rl dmljZS5oIgorI2luY2x1ZGUgImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1hX29iamVjdC5oIgor I2luY2x1ZGUgImxpbWFfcmVncy5oIgorCitzdHJ1Y3QgbGltYV9ib192YV9tYXBwaW5nIHsKKwlz dHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHJiX25vZGUgcmI7CisJdWludDMyX3Qgc3Rh cnQ7CisJdWludDMyX3QgbGFzdDsKKwl1aW50MzJfdCBfX3N1YnRyZWVfbGFzdDsKK307CisKK3N0 cnVjdCBsaW1hX2JvX3ZhIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdW5zaWduZWQgcmVm X2NvdW50OworCisJc3RydWN0IGxpc3RfaGVhZCBtYXBwaW5nOworCisJc3RydWN0IGxpbWFfdm0g KnZtOworfTsKKworI2RlZmluZSBMSU1BX1ZNX1BEX1NISUZUIDIyCisjZGVmaW5lIExJTUFfVk1f UFRfU0hJRlQgMTIKKyNkZWZpbmUgTElNQV9WTV9QQl9TSElGVCAoTElNQV9WTV9QRF9TSElGVCAr IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCkKKyNkZWZpbmUgTElNQV9WTV9CVF9TSElGVCBM SU1BX1ZNX1BUX1NISUZUCisKKyNkZWZpbmUgTElNQV9WTV9QVF9NQVNLICgoMSA8PCBMSU1BX1ZN X1BEX1NISUZUKSAtIDEpCisjZGVmaW5lIExJTUFfVk1fQlRfTUFTSyAoKDEgPDwgTElNQV9WTV9Q Ql9TSElGVCkgLSAxKQorCisjZGVmaW5lIExJTUFfUERFKHZhKSAodmEgPj4gTElNQV9WTV9QRF9T SElGVCkKKyNkZWZpbmUgTElNQV9QVEUodmEpICgodmEgJiBMSU1BX1ZNX1BUX01BU0spID4+IExJ TUFfVk1fUFRfU0hJRlQpCisjZGVmaW5lIExJTUFfUEJFKHZhKSAodmEgPj4gTElNQV9WTV9QQl9T SElGVCkKKyNkZWZpbmUgTElNQV9CVEUodmEpICgodmEgJiBMSU1BX1ZNX0JUX01BU0spID4+IExJ TUFfVk1fQlRfU0hJRlQpCisKKyNkZWZpbmUgU1RBUlQobm9kZSkgKChub2RlKS0+c3RhcnQpCisj ZGVmaW5lIExBU1Qobm9kZSkgKChub2RlKS0+bGFzdCkKKworSU5URVJWQUxfVFJFRV9ERUZJTkUo c3RydWN0IGxpbWFfYm9fdmFfbWFwcGluZywgcmIsIHVpbnQzMl90LCBfX3N1YnRyZWVfbGFzdCwK KwkJICAgICBTVEFSVCwgTEFTVCwgc3RhdGljLCBsaW1hX3ZtX2l0KQorCisjdW5kZWYgU1RBUlQK KyN1bmRlZiBMQVNUCisKK3N0YXRpYyB2b2lkIGxpbWFfdm1fdW5tYXBfcGFnZV90YWJsZShzdHJ1 Y3QgbGltYV92bSAqdm0sIHUzMiBzdGFydCwgdTMyIGVuZCkKK3sKKwl1MzIgYWRkcjsKKworCWZv ciAoYWRkciA9IHN0YXJ0OyBhZGRyIDw9IGVuZDsgYWRkciArPSBMSU1BX1BBR0VfU0laRSkgewor CQl1MzIgcGJlID0gTElNQV9QQkUoYWRkcik7CisJCXUzMiBidGUgPSBMSU1BX0JURShhZGRyKTsK KwkJdTMyICpidDsKKworCQlidCA9IGxpbWFfYm9fa21hcCh2bS0+YnRzW3BiZV0pOworCQlidFti dGVdID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGltYV92bV9tYXBfcGFnZV90YWJsZShzdHJ1 Y3QgbGltYV92bSAqdm0sIGRtYV9hZGRyX3QgKmRtYSwKKwkJCQkgIHUzMiBzdGFydCwgdTMyIGVu ZCkKK3sKKwl1NjQgYWRkcjsKKwlpbnQgZXJyLCBpID0gMDsKKworCWZvciAoYWRkciA9IHN0YXJ0 OyBhZGRyIDw9IGVuZDsgYWRkciArPSBMSU1BX1BBR0VfU0laRSkgeworCQl1MzIgcGJlID0gTElN QV9QQkUoYWRkcik7CisJCXUzMiBidGUgPSBMSU1BX0JURShhZGRyKTsKKwkJdTMyICpidDsKKwor CQlpZiAodm0tPmJ0c1twYmVdKQorCQkJYnQgPSBsaW1hX2JvX2ttYXAodm0tPmJ0c1twYmVdKTsK KwkJZWxzZSB7CisJCQlzdHJ1Y3QgbGltYV9ibyAqYnRfYm87CisJCQlkbWFfYWRkcl90ICpwdHM7 CisJCQl1MzIgKnBkOworCQkJaW50IGo7CisKKwkJCWJ0X2JvID0gbGltYV9ib19jcmVhdGUoCisJ CQkJdm0tPmRldiwgTElNQV9QQUdFX1NJWkUgPDwgTElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZU LAorCQkJCTAsIHR0bV9ib190eXBlX2tlcm5lbCwKKwkJCQlOVUxMLCB2bS0+cGQtPnRiby5yZXN2 KTsKKwkJCWlmIChJU19FUlIoYnRfYm8pKSB7CisJCQkJZXJyID0gUFRSX0VSUihidF9ibyk7CisJ CQkJZ290byBlcnJfb3V0OworCQkJfQorCisJCQlidCA9IGxpbWFfYm9fa21hcChidF9ibyk7CisJ CQlpZiAoSVNfRVJSKGJ0KSkgeworCQkJCWxpbWFfYm9fdW5yZWYoYnRfYm8pOworCQkJCWVyciA9 IFBUUl9FUlIoYnQpOworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKwkJCW1lbXNldChidCwgMCwg TElNQV9QQUdFX1NJWkUgPDwgTElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZUKTsKKworCQkJdm0t PmJ0c1twYmVdID0gYnRfYm87CisJCQlwZCA9IGxpbWFfYm9fa21hcCh2bS0+cGQpOworCQkJcGQg Kz0gcGJlIDw8IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVDsKKwkJCXB0cyA9IGxpbWFfYm9f Z2V0X3BhZ2VzKGJ0X2JvKTsKKwkJCWZvciAoaiA9IDA7IGogPCBMSU1BX1ZNX05VTV9QVF9QRVJf QlQ7IGorKykKKwkJCQkqcGQrKyA9ICpwdHMrKyB8IExJTUFfVk1fRkxBR19QUkVTRU5UOworCQl9 CisKKwkJYnRbYnRlXSA9IGRtYVtpKytdIHwgTElNQV9WTV9GTEFHU19DQUNIRTsKKwl9CisKKwly ZXR1cm4gMDsKKworZXJyX291dDoKKwlpZiAoYWRkciAhPSBzdGFydCkKKwkJbGltYV92bV91bm1h cF9wYWdlX3RhYmxlKHZtLCBzdGFydCwgYWRkciAtIDEpOworCXJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBzdHJ1Y3QgbGltYV9ib192YSAqCitsaW1hX3ZtX2JvX2ZpbmQoc3RydWN0IGxpbWFfdm0g KnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pCit7CisJc3RydWN0IGxpbWFfYm9fdmEgKmJvX3ZhLCAq cmV0ID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYm9fdmEsICZiby0+dmEsIGxpc3Qp IHsKKwkJaWYgKGJvX3ZhLT52bSA9PSB2bSkgeworCQkJcmV0ID0gYm9fdmE7CisJCQlicmVhazsK KwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBsaW1hX3ZtX2JvX21hcChzdHJ1Y3Qg bGltYV92bSAqdm0sIHN0cnVjdCBsaW1hX2JvICpibywgdTMyIHN0YXJ0KQoreworCWludCBlcnI7 CisJc3RydWN0IGxpbWFfYm9fdmFfbWFwcGluZyAqaXQsICptYXBwaW5nOworCXUzMiBlbmQgPSBz dGFydCArIGJvLT5nZW0uc2l6ZSAtIDE7CisJZG1hX2FkZHJfdCAqcGFnZXNfZG1hID0gbGltYV9i b19nZXRfcGFnZXMoYm8pOworCXN0cnVjdCBsaW1hX2JvX3ZhICpib192YTsKKworCWl0ID0gbGlt YV92bV9pdF9pdGVyX2ZpcnN0KCZ2bS0+dmEsIHN0YXJ0LCBlbmQpOworCWlmIChpdCkgeworCQlk ZXZfZGJnKGJvLT5nZW0uZGV2LT5kZXYsICJsaW1hIHZtIG1hcCB2YSBvdmVybGFwICV4LSV4ICV4 LSV4XG4iLAorCQkJc3RhcnQsIGVuZCwgaXQtPnN0YXJ0LCBpdC0+bGFzdCk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCW1hcHBpbmcgPSBrbWFsbG9jKHNpemVvZigqbWFwcGluZyksIEdGUF9L RVJORUwpOworCWlmICghbWFwcGluZykKKwkJcmV0dXJuIC1FTk9NRU07CisJbWFwcGluZy0+c3Rh cnQgPSBzdGFydDsKKwltYXBwaW5nLT5sYXN0ID0gZW5kOworCisJZXJyID0gbGltYV92bV9tYXBf cGFnZV90YWJsZSh2bSwgcGFnZXNfZG1hLCBzdGFydCwgZW5kKTsKKwlpZiAoZXJyKSB7CisJCWtm cmVlKG1hcHBpbmcpOworCQlyZXR1cm4gZXJyOworCX0KKworCWxpbWFfdm1faXRfaW5zZXJ0KG1h cHBpbmcsICZ2bS0+dmEpOworCisJYm9fdmEgPSBsaW1hX3ZtX2JvX2ZpbmQodm0sIGJvKTsKKwls aXN0X2FkZF90YWlsKCZtYXBwaW5nLT5saXN0LCAmYm9fdmEtPm1hcHBpbmcpOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfdm1fdW5tYXAoc3RydWN0IGxpbWFfdm0gKnZtLAor CQkJICBzdHJ1Y3QgbGltYV9ib192YV9tYXBwaW5nICptYXBwaW5nKQoreworCWxpbWFfdm1faXRf cmVtb3ZlKG1hcHBpbmcsICZ2bS0+dmEpOworCisJbGltYV92bV91bm1hcF9wYWdlX3RhYmxlKHZt LCBtYXBwaW5nLT5zdGFydCwgbWFwcGluZy0+bGFzdCk7CisKKwlsaXN0X2RlbCgmbWFwcGluZy0+ bGlzdCk7CisJa2ZyZWUobWFwcGluZyk7Cit9CisKK2ludCBsaW1hX3ZtX2JvX3VubWFwKHN0cnVj dCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvLCB1MzIgc3RhcnQpCit7CisJc3RydWN0 IGxpbWFfYm9fdmEgKmJvX3ZhOworCXN0cnVjdCBsaW1hX2JvX3ZhX21hcHBpbmcgKm1hcHBpbmc7 CisKKwlib192YSA9IGxpbWFfdm1fYm9fZmluZCh2bSwgYm8pOworCWxpc3RfZm9yX2VhY2hfZW50 cnkobWFwcGluZywgJmJvX3ZhLT5tYXBwaW5nLCBsaXN0KSB7CisJCWlmIChtYXBwaW5nLT5zdGFy dCA9PSBzdGFydCkgeworCQkgICAgICAgIGxpbWFfdm1fdW5tYXAodm0sIG1hcHBpbmcpOworCQkJ YnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFfdm1fYm9fYWRkKHN0 cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvKQoreworCXN0cnVjdCBsaW1hX2Jv X3ZhICpib192YTsKKworCWJvX3ZhID0gbGltYV92bV9ib19maW5kKHZtLCBibyk7CisJaWYgKGJv X3ZhKSB7CisJCWJvX3ZhLT5yZWZfY291bnQrKzsKKwkJcmV0dXJuIDA7CisJfQorCisJYm9fdmEg PSBrbWFsbG9jKHNpemVvZigqYm9fdmEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJvX3ZhKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWJvX3ZhLT52bSA9IHZtOworCWJvX3ZhLT5yZWZfY291bnQgPSAx OworCUlOSVRfTElTVF9IRUFEKCZib192YS0+bWFwcGluZyk7CisJbGlzdF9hZGRfdGFpbCgmYm9f dmEtPmxpc3QsICZiby0+dmEpOworCXJldHVybiAwOworfQorCisvKiB3YWl0IG9ubHkgZmVuY2Ug b2YgcmVzdiBmcm9tIHRhc2sgdXNpbmcgdm0gKi8KK3N0YXRpYyBpbnQgbGltYV92bV93YWl0X3Jl c3Yoc3RydWN0IGxpbWFfdm0gKnZtLAorCQkJICAgICBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0 ICpyZXN2KQoreworCXVuc2lnbmVkIG5yX2ZlbmNlczsKKwlzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVu Y2VzOworCWludCBpOworCWxvbmcgZXJyOworCisJZXJyID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dl dF9mZW5jZXNfcmN1KHJlc3YsIE5VTEwsICZucl9mZW5jZXMsICZmZW5jZXMpOworCWlmIChlcnIg fHwgIW5yX2ZlbmNlcykKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDA7IGkgPCBucl9mZW5j ZXM7IGkrKykgeworCQlzdHJ1Y3QgZHJtX3NjaGVkX2ZlbmNlICpzZiA9IHRvX2RybV9zY2hlZF9m ZW5jZShmZW5jZXNbaV0pOworCQlpZiAoc2YgJiYgc2YtPm93bmVyID09IHZtKQorCQkJZXJyIHw9 IGRtYV9mZW5jZV93YWl0KGZlbmNlc1tpXSwgZmFsc2UpOworCQlkbWFfZmVuY2VfcHV0KGZlbmNl c1tpXSk7CisJfQorCisJa2ZyZWUoZmVuY2VzKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgbGlt YV92bV9ib19kZWwoc3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pCit7CisJ c3RydWN0IGxpbWFfYm9fdmEgKmJvX3ZhOworCXN0cnVjdCBsaW1hX2JvX3ZhX21hcHBpbmcgKm1h cHBpbmcsICp0bXA7CisJaW50IGVycjsKKworCWJvX3ZhID0gbGltYV92bV9ib19maW5kKHZtLCBi byk7CisJaWYgKC0tYm9fdmEtPnJlZl9jb3VudCA+IDApCisJCXJldHVybiAwOworCisJLyogd2Fp dCBibyBpZGxlIGJlZm9yZSB1bm1hcCBpdCBmcm9tIHZtIGluIGNhc2UgdXNlcgorCSAqIHNwYWNl IGFwcGxpY2F0aW9uIGlzIHRlcm1pbmF0ZWQgd2hlbiBibyBpcyBidXN5LgorCSAqLworCWVyciA9 IGxpbWFfdm1fd2FpdF9yZXN2KHZtLCBiby0+dGJvLnJlc3YpOworCWlmIChlcnIpCisJCWRldl9l cnIodm0tPmRldi0+ZGV2LCAiYm8gZGVsIGZhaWwgdG8gd2FpdCAoJWQpXG4iLCBlcnIpOworCisJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hcHBpbmcsIHRtcCwgJmJvX3ZhLT5tYXBwaW5nLCBs aXN0KSB7CisJICAgICAgICBsaW1hX3ZtX3VubWFwKHZtLCBtYXBwaW5nKTsKKwl9CisJbGlzdF9k ZWwoJmJvX3ZhLT5saXN0KTsKKwlrZnJlZShib192YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVj dCBsaW1hX3ZtICpsaW1hX3ZtX2NyZWF0ZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgbGltYV92bSAqdm07CisJdm9pZCAqcGQ7CisKKwl2bSA9IGt6YWxsb2Moc2l6ZW9mKCp2 bSksIEdGUF9LRVJORUwpOworCWlmICghdm0pCisJCXJldHVybiBOVUxMOworCisJdm0tPmRldiA9 IGRldjsKKwl2bS0+dmEgPSBSQl9ST09UX0NBQ0hFRDsKKwlrcmVmX2luaXQoJnZtLT5yZWZjb3Vu dCk7CisKKwl2bS0+cGQgPSBsaW1hX2JvX2NyZWF0ZShkZXYsIExJTUFfUEFHRV9TSVpFLCAwLAor CQkJCXR0bV9ib190eXBlX2tlcm5lbCwgTlVMTCwgTlVMTCk7CisJaWYgKElTX0VSUih2bS0+cGQp KQorCQlnb3RvIGVycl9vdXQwOworCisJcGQgPSBsaW1hX2JvX2ttYXAodm0tPnBkKTsKKwlpZiAo SVNfRVJSKHBkKSkKKwkJZ290byBlcnJfb3V0MTsKKwltZW1zZXQocGQsIDAsIExJTUFfUEFHRV9T SVpFKTsKKworCWlmIChkZXYtPmRsYnVfY3B1KSB7CisJCWludCBlcnIgPSBsaW1hX3ZtX21hcF9w YWdlX3RhYmxlKAorCQkJdm0sICZkZXYtPmRsYnVfZG1hLCBMSU1BX1ZBX1JFU0VSVkVfRExCVSwK KwkJCUxJTUFfVkFfUkVTRVJWRV9ETEJVICsgTElNQV9QQUdFX1NJWkUgLSAxKTsKKwkJaWYgKGVy cikKKwkJCWdvdG8gZXJyX291dDE7CisJfQorCisJcmV0dXJuIHZtOworCitlcnJfb3V0MToKKwls aW1hX2JvX3VucmVmKHZtLT5wZCk7CitlcnJfb3V0MDoKKwlrZnJlZSh2bSk7CisJcmV0dXJuIE5V TEw7Cit9CisKK3ZvaWQgbGltYV92bV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0 cnVjdCBsaW1hX3ZtICp2bSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbGltYV92bSwgcmVm Y291bnQpOworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gdm0tPmRldjsKKwlpbnQgaTsKKwor CWlmICghUkJfRU1QVFlfUk9PVCgmdm0tPnZhLnJiX3Jvb3QpKSB7CisJCWRldl9lcnIoZGV2LT5k ZXYsICJzdGlsbCBhY3RpdmUgYm8gaW5zaWRlIHZtXG4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBp IDwgTElNQV9WTV9OVU1fQlQ7IGkrKykgeworCQlpZiAodm0tPmJ0c1tpXSkKKwkJCWxpbWFfYm9f dW5yZWYodm0tPmJ0c1tpXSk7CisJfQorCisJaWYgKHZtLT5wZCkKKwkgICAgICAgIGxpbWFfYm9f dW5yZWYodm0tPnBkKTsKKworCWtmcmVlKHZtKTsKK30KKwordm9pZCBsaW1hX3ZtX3ByaW50KHN0 cnVjdCBsaW1hX3ZtICp2bSkKK3sKKwlpbnQgaSwgaiwgazsKKwl1MzIgKnBkLCAqcHQ7CisKKwkv KiB0byBhdm9pZCB0aGUgZGVmaW5lZCBieSBub3QgdXNlZCB3YXJuaW5nICovCisJKHZvaWQpJmxp bWFfdm1faXRfaXRlcl9uZXh0OworCisJcGQgPSBsaW1hX2JvX2ttYXAodm0tPnBkKTsKKwlmb3Ig KGkgPSAwOyBpIDwgTElNQV9WTV9OVU1fQlQ7IGkrKykgeworCQlpZiAoIXZtLT5idHNbaV0pCisJ CQljb250aW51ZTsKKworCQlwdCA9IGxpbWFfYm9fa21hcCh2bS0+YnRzW2ldKTsKKwkJZm9yIChq ID0gMDsgaiA8IExJTUFfVk1fTlVNX1BUX1BFUl9CVDsgaisrKSB7CisJCQlpbnQgaWR4ID0gKGkg PDwgTElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZUKSArIGo7CisJCQlwcmludGsoS0VSTl9JTkZP ICJsaW1hIHZtIHBkICUwM3g6JTA4eFxuIiwgaWR4LCBwZFtpZHhdKTsKKworCQkJZm9yIChrID0g MDsgayA8IExJTUFfUEFHRV9FTlRfTlVNOyBrKyspIHsKKwkJCQl1MzIgcHRlID0gKnB0Kys7CisJ CQkJaWYgKHB0ZSkKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiICBwdCAlMDN4OiUwOHhcbiIsIGss IHB0ZSk7CisJCQl9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX3ZtLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5mNjE1ZjhkZmU3MWQKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmgKQEAgLTAsMCArMSw1OSBAQAorLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQg MjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElN QV9WTV9IX18KKyNkZWZpbmUgX19MSU1BX1ZNX0hfXworCisjaW5jbHVkZSA8bGludXgvcmJ0cmVl Lmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorCisjZGVmaW5lIExJTUFfUEFHRV9TSVpFICAg IDQwOTYKKyNkZWZpbmUgTElNQV9QQUdFX01BU0sgICAgKExJTUFfUEFHRV9TSVpFIC0gMSkKKyNk ZWZpbmUgTElNQV9QQUdFX0VOVF9OVU0gKExJTUFfUEFHRV9TSVpFIC8gc2l6ZW9mKHUzMikpCisK KyNkZWZpbmUgTElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZUIDMKKyNkZWZpbmUgTElNQV9WTV9O VU1fUFRfUEVSX0JUICgxIDw8IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCkKKyNkZWZpbmUg TElNQV9WTV9OVU1fQlQgKExJTUFfUEFHRV9FTlRfTlVNID4+IExJTUFfVk1fTlVNX1BUX1BFUl9C VF9TSElGVCkKKworI2RlZmluZSBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQgIDB4RkZGMDAwMDAKKyNk ZWZpbmUgTElNQV9WQV9SRVNFUlZFX0RMQlUgICBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQKKyNkZWZp bmUgTElNQV9WQV9SRVNFUlZFX0VORCAgICAweDEwMDAwMDAwMAorCitzdHJ1Y3QgbGltYV9ibzsK K3N0cnVjdCBsaW1hX2RldmljZTsKKworc3RydWN0IGxpbWFfdm0geworCXN0cnVjdCBrcmVmIHJl ZmNvdW50OworCisJLyogdHJlZSBvZiB2aXJ0dWFsIGFkZHJlc3NlcyBtYXBwZWQgKi8KKwlzdHJ1 Y3QgcmJfcm9vdF9jYWNoZWQgdmE7CisKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldjsKKworCXN0 cnVjdCBsaW1hX2JvICpwZDsKKwlzdHJ1Y3QgbGltYV9ibyAqYnRzW0xJTUFfVk1fTlVNX0JUXTsK K307CisKK2ludCBsaW1hX3ZtX2JvX21hcChzdHJ1Y3QgbGltYV92bSAqdm0sIHN0cnVjdCBsaW1h X2JvICpibywgdTMyIHN0YXJ0KTsKK2ludCBsaW1hX3ZtX2JvX3VubWFwKHN0cnVjdCBsaW1hX3Zt ICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvLCB1MzIgc3RhcnQpOworCitpbnQgbGltYV92bV9ib19h ZGQoc3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1Y3QgbGltYV9ibyAqYm8pOworaW50IGxpbWFfdm1f Ym9fZGVsKHN0cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvKTsKKworc3RydWN0 IGxpbWFfdm0gKmxpbWFfdm1fY3JlYXRlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KTsKK3ZvaWQg bGltYV92bV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTsKKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgbGltYV92bSAqbGltYV92bV9nZXQoc3RydWN0IGxpbWFfdm0gKnZtKQoreworCWtyZWZfZ2V0 KCZ2bS0+cmVmY291bnQpOworCXJldHVybiB2bTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxp bWFfdm1fcHV0KHN0cnVjdCBsaW1hX3ZtICp2bSkKK3sKKwlrcmVmX3B1dCgmdm0tPnJlZmNvdW50 LCBsaW1hX3ZtX3JlbGVhc2UpOworfQorCit2b2lkIGxpbWFfdm1fcHJpbnQoc3RydWN0IGxpbWFf dm0gKnZtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2xpbWFfZHJt LmggYi9pbmNsdWRlL3VhcGkvZHJtL2xpbWFfZHJtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5jNDQ3NTdiNGJlMzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRl L3VhcGkvZHJtL2xpbWFfZHJtLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiAoR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSkgT1IgTUlUICovCisv KiBDb3B5cmlnaHQgMjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisj aWZuZGVmIF9fTElNQV9EUk1fSF9fCisjZGVmaW5lIF9fTElNQV9EUk1fSF9fCisKKyNpbmNsdWRl ICJkcm0uaCIKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRp ZgorCisjZGVmaW5lIExJTUFfSU5GT19HUFVfTUFMSTQwMCAweDAwCisjZGVmaW5lIExJTUFfSU5G T19HUFVfTUFMSTQ1MCAweDAxCisKK3N0cnVjdCBkcm1fbGltYV9pbmZvIHsKKwlfX3UzMiBncHVf aWQ7ICAgLyogb3V0ICovCisJX191MzIgbnVtX3BwOyAgIC8qIG91dCAqLworCV9fdTY0IHZhX3N0 YXJ0OyAvKiBvdXQgKi8KKwlfX3U2NCB2YV9lbmQ7ICAgLyogb3V0ICovCit9OworCitzdHJ1Y3Qg ZHJtX2xpbWFfZ2VtX2NyZWF0ZSB7CisJX191MzIgc2l6ZTsgICAgLyogaW4gKi8KKwlfX3UzMiBm bGFnczsgICAvKiBpbiAqLworCV9fdTMyIGhhbmRsZTsgIC8qIG91dCAqLworCV9fdTMyIHBhZDsK K307CisKK3N0cnVjdCBkcm1fbGltYV9nZW1faW5mbyB7CisJX191MzIgaGFuZGxlOyAgLyogaW4g Ki8KKwlfX3UzMiBwYWQ7CisJX191NjQgb2Zmc2V0OyAgLyogb3V0ICovCit9OworCisjZGVmaW5l IExJTUFfVkFfT1BfTUFQICAgIDEKKyNkZWZpbmUgTElNQV9WQV9PUF9VTk1BUCAgMgorCitzdHJ1 Y3QgZHJtX2xpbWFfZ2VtX3ZhIHsKKwlfX3UzMiBoYW5kbGU7ICAvKiBpbiAqLworCV9fdTMyIG9w OyAgICAgIC8qIGluICovCisJX191MzIgZmxhZ3M7ICAgLyogaW4gKi8KKwlfX3UzMiB2YTsgICAg ICAvKiBpbiAqLworfTsKKworI2RlZmluZSBMSU1BX1NVQk1JVF9CT19SRUFEICAgMHgwMQorI2Rl ZmluZSBMSU1BX1NVQk1JVF9CT19XUklURSAgMHgwMgorCitzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1 Ym1pdF9ibyB7CisJX191MzIgaGFuZGxlOyAgLyogaW4gKi8KKwlfX3UzMiBmbGFnczsgICAvKiBp biAqLworfTsKKworI2RlZmluZSBMSU1BX1NVQk1JVF9ERVBfRkVOQ0UgICAweDAwCisjZGVmaW5l IExJTUFfU1VCTUlUX0RFUF9TWU5DX0ZEIDB4MDEKKworc3RydWN0IGRybV9saW1hX2dlbV9zdWJt aXRfZGVwX2ZlbmNlIHsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGN0eDsKKwlfX3UzMiBwaXBlOwor CV9fdTMyIHNlcTsKK307CisKK3N0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2RlcF9zeW5jX2Zk IHsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGZkOworfTsKKwordW5pb24gZHJtX2xpbWFfZ2VtX3N1 Ym1pdF9kZXAgeworCV9fdTMyIHR5cGU7CisJc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfZGVw X2ZlbmNlIGZlbmNlOworCXN0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2RlcF9zeW5jX2ZkIHN5 bmNfZmQ7Cit9OworCisjZGVmaW5lIExJTUFfR1BfRlJBTUVfUkVHX05VTSA2CisKK3N0cnVjdCBk cm1fbGltYV9ncF9mcmFtZSB7CisJX191MzIgZnJhbWVbTElNQV9HUF9GUkFNRV9SRUdfTlVNXTsK K307CisKKyNkZWZpbmUgTElNQV9QUF9GUkFNRV9SRUdfTlVNIDIzCisjZGVmaW5lIExJTUFfUFBf V0JfUkVHX05VTSAxMgorCitzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSB7CisJX191MzIg ZnJhbWVbTElNQV9QUF9GUkFNRV9SRUdfTlVNXTsKKwlfX3UzMiBudW1fcHA7CisJX191MzIgd2Jb MyAqIExJTUFfUFBfV0JfUkVHX05VTV07CisJX191MzIgcGxidV9hcnJheV9hZGRyZXNzWzRdOwor CV9fdTMyIGZyYWdtZW50X3N0YWNrX2FkZHJlc3NbNF07Cit9OworCitzdHJ1Y3QgZHJtX2xpbWFf bTQ1MF9wcF9mcmFtZSB7CisJX191MzIgZnJhbWVbTElNQV9QUF9GUkFNRV9SRUdfTlVNXTsKKwlf X3UzMiBudW1fcHA7CisJX191MzIgd2JbMyAqIExJTUFfUFBfV0JfUkVHX05VTV07CisJX191MzIg dXNlX2RsYnU7CisJX191MzIgX3BhZDsKKwl1bmlvbiB7CisJCV9fdTMyIHBsYnVfYXJyYXlfYWRk cmVzc1s4XTsKKwkJX191MzIgZGxidV9yZWdzWzRdOworCX07CisJX191MzIgZnJhZ21lbnRfc3Rh Y2tfYWRkcmVzc1s4XTsKK307CisKKyNkZWZpbmUgTElNQV9QSVBFX0dQICAweDAwCisjZGVmaW5l IExJTUFfUElQRV9QUCAgMHgwMQorCisjZGVmaW5lIExJTUFfU1VCTUlUX0ZMQUdfRVhQTElDSVRf RkVOQ0UgKDEgPDwgMCkKKyNkZWZpbmUgTElNQV9TVUJNSVRfRkxBR19TWU5DX0ZEX09VVCAgICAo MSA8PCAxKQorCitzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1Ym1pdF9pbiB7CisJX191MzIgY3R4Owor CV9fdTMyIHBpcGU7CisJX191MzIgbnJfYm9zOworCV9fdTMyIGZyYW1lX3NpemU7CisJX191NjQg Ym9zOworCV9fdTY0IGZyYW1lOworCV9fdTY0IGRlcHM7CisJX191MzIgbnJfZGVwczsKKwlfX3Uz MiBmbGFnczsKK307CisKK3N0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X291dCB7CisJX191MzIg ZmVuY2U7CisJX191MzIgZG9uZTsKKwlfX3UzMiBzeW5jX2ZkOworCV9fdTMyIF9wYWQ7Cit9Owor Cit1bmlvbiBkcm1fbGltYV9nZW1fc3VibWl0IHsKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1Ym1p dF9pbiBpbjsKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1Ym1pdF9vdXQgb3V0OworfTsKKworc3Ry dWN0IGRybV9saW1hX3dhaXRfZmVuY2UgeworCV9fdTMyIGN0eDsgICAgICAgICAvKiBpbiAqLwor CV9fdTMyIHBpcGU7ICAgICAgICAvKiBpbiAqLworCV9fdTY0IHRpbWVvdXRfbnM7ICAvKiBpbiAq LworCV9fdTMyIHNlcTsgICAgICAgICAvKiBpbiAqLworCV9fdTMyIGVycm9yOyAgICAgICAvKiBv dXQgKi8KK307CisKKyNkZWZpbmUgTElNQV9HRU1fV0FJVF9SRUFEICAgMHgwMQorI2RlZmluZSBM SU1BX0dFTV9XQUlUX1dSSVRFICAweDAyCisKK3N0cnVjdCBkcm1fbGltYV9nZW1fd2FpdCB7CisJ X191MzIgaGFuZGxlOyAgICAgIC8qIGluICovCisJX191MzIgb3A7ICAgICAgICAgIC8qIGluICov CisJX191NjQgdGltZW91dF9uczsgIC8qIGluICovCit9OworCisjZGVmaW5lIExJTUFfQ1RYX09Q X0NSRUFURSAxCisjZGVmaW5lIExJTUFfQ1RYX09QX0ZSRUUgICAyCisKK3N0cnVjdCBkcm1fbGlt YV9jdHggeworCV9fdTMyIG9wOyAgICAgICAgICAvKiBpbiAqLworCV9fdTMyIGlkOyAgICAgICAg ICAvKiBpbi9vdXQgKi8KK307CisKKyNkZWZpbmUgTElNQV9HRU1fTU9EX09QX0dFVCAwCisjZGVm aW5lIExJTUFfR0VNX01PRF9PUF9TRVQgMQorCitzdHJ1Y3QgZHJtX2xpbWFfZ2VtX21vZCB7CisJ X191MzIgaGFuZGxlOyAgICAgIC8qIGluICovCisJX191MzIgb3A7ICAgICAgICAgIC8qIGluICov CisJX191NjQgbW9kaWZpZXI7ICAgIC8qIGluL291dCAqLworfTsKKworI2RlZmluZSBEUk1fTElN QV9JTkZPICAgICAgICAweDAwCisjZGVmaW5lIERSTV9MSU1BX0dFTV9DUkVBVEUgIDB4MDEKKyNk ZWZpbmUgRFJNX0xJTUFfR0VNX0lORk8gICAgMHgwMgorI2RlZmluZSBEUk1fTElNQV9HRU1fVkEg ICAgICAweDAzCisjZGVmaW5lIERSTV9MSU1BX0dFTV9TVUJNSVQgIDB4MDQKKyNkZWZpbmUgRFJN X0xJTUFfV0FJVF9GRU5DRSAgMHgwNQorI2RlZmluZSBEUk1fTElNQV9HRU1fV0FJVCAgICAweDA2 CisjZGVmaW5lIERSTV9MSU1BX0NUWCAgICAgICAgIDB4MDcKKyNkZWZpbmUgRFJNX0xJTUFfR0VN X01PRCAgICAgMHgwOAorCisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0lORk8gRFJNX0lPUihEUk1f Q09NTUFORF9CQVNFICsgRFJNX0xJTUFfSU5GTywgc3RydWN0IGRybV9saW1hX2luZm8pCisjZGVm aW5lIERSTV9JT0NUTF9MSU1BX0dFTV9DUkVBVEUgRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9MSU1BX0dFTV9DUkVBVEUsIHN0cnVjdCBkcm1fbGltYV9nZW1fY3JlYXRlKQorI2RlZmlu ZSBEUk1fSU9DVExfTElNQV9HRU1fSU5GTyBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJN X0xJTUFfR0VNX0lORk8sIHN0cnVjdCBkcm1fbGltYV9nZW1faW5mbykKKyNkZWZpbmUgRFJNX0lP Q1RMX0xJTUFfR0VNX1ZBIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0dFTV9W QSwgc3RydWN0IGRybV9saW1hX2dlbV92YSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0xJTUFfR0VNX1NV Qk1JVCBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0xJTUFfR0VNX1NVQk1JVCwgdW5p b24gZHJtX2xpbWFfZ2VtX3N1Ym1pdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX0xJTUFfV0FJVF9GRU5D RSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0xJTUFfV0FJVF9GRU5DRSwgc3RydWN0 IGRybV9saW1hX3dhaXRfZmVuY2UpCisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0dFTV9XQUlUIERS TV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0dFTV9XQUlULCBzdHJ1Y3QgZHJtX2xp bWFfZ2VtX3dhaXQpCisjZGVmaW5lIERSTV9JT0NUTF9MSU1BX0NUWCBEUk1fSU9XUihEUk1fQ09N TUFORF9CQVNFICsgRFJNX0xJTUFfQ1RYLCBzdHJ1Y3QgZHJtX2xpbWFfY3R4KQorI2RlZmluZSBE Uk1fSU9DVExfTElNQV9HRU1fTU9EIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElN QV9HRU1fTU9ELCBzdHJ1Y3QgZHJtX2xpbWFfZ2VtX21vZCkKKworI2lmIGRlZmluZWQoX19jcGx1 c3BsdXMpCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fTElNQV9EUk1fSF9fICovCi0tIAoyLjE3 LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1k ZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=