From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yakir Yang Subject: [PATCH v12.1 01/17] drm: bridge: analogix/dp: split exynos dp driver to bridge directory Date: Tue, 19 Jan 2016 17:58:37 +0800 Message-ID: <1453197517-13085-1-git-send-email-ykk@rock-chips.com> References: <1450873538-18304-1-git-send-email-ykk@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1450873538-18304-1-git-send-email-ykk@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Inki Dae , Kyungmin Park , Jingoo Han , Thierry Reding , Krzysztof Kozlowski , Rob Herring , Heiko Stuebner , Mark Yao Cc: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Russell King , Ian Campbell , linux-rockchip@lists.infradead.org, emil.l.velikov@gmail.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Kishon Vijay Abraham I , javier@osg.samsung.com, Andy Yan , Gustavo Padovan , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org U3BsaXQgdGhlIGRwIGNvcmUgZHJpdmVyIGZyb20gZXh5bm9zIGRpcmVjdG9yeSB0byBicmlkZ2Ug ZGlyZWN0b3J5LAphbmQgcmVuYW1lIHRoZSBjb3JlIGRyaXZlciB0byBhbmFsb2dpeF9kcF8qLCBy ZW5hbWUgdGhlIHBsYXRmb3JtCmNvZGUgdG8gZXh5bm9zX2RwLgoKQmVzaWRlIHRoZSBuZXcgYW5h bG9naXhfZHAgZHJpdmVyIHdvdWxkIGV4cG9ydCBzaXggaG9va3MuCiJhbmFsb2dpeF9kcF9iaW5k KCkiIGFuZCAiYW5hbG9naXhfZHBfdW5iaW5kKCkiCiJhbmFsb2dpeF9kcF9zdXNwbmVkKCkiIGFu ZCAiYW5hbG9naXhfZHBfcmVzdW1lKCkiCiJhbmFsb2dpeF9kcF9kZXRlY3QoKSIgYW5kICJhbmFs b2dpeF9kcF9nZXRfbW9kZXMoKSIKClRoZSBiaW5kL3VuYmluZCBzeW1ib2xzIGlzIHVzZWQgZm9y IGFuYWxvZ2l4IHBsYXRmb3JtIGRyaXZlciB0byBjb25uZWN0CndpdGggYW5hbG9naXhfZHAgY29y ZSBkcml2ZXIuIEFuZCB0aGUgZGV0ZWN0L2dldF9tb2RlcyBpcyB1c2VkIGZvciBhbmFsb2dpeApw bGF0Zm9ybSBkcml2ZXIgdG8gaW5pdCB0aGUgY29ubmVjdG9yLgoKVGhleSByZWFzb24gd2h5IGNv bm5lY3RvciBuZWVkIHJlZ2lzdGVyIGluIGhlbHBlciBkcml2ZXIgaXMgcm9ja2NoaXAgZHJtCmhh dmVuJ3QgaW1wbGVtZW50IHRoZSBhdG9taWMgQVBJLCBidXQgRXh5bm9zIGRybSBoYXZlIGltcGxl bWVudCBpdCwgc28KdGhlcmUgd291bGQgbmVlZCB0d28gZGlmZmVyZW50IGNvbm5lY3RvciBoZWxw ZXIgZnVuY3Rpb25zLCB0aGF0J3Mgd2h5IHdlCmxlYXZlIHRoZSBjb25uZWN0b3IgcmVnaXN0ZXIg aW4gaGVscGVyIGRyaXZlci4KClNpZ25lZC1vZmYtYnk6IFlha2lyIFlhbmcgPHlra0Byb2NrLWNo aXBzLmNvbT4KLS0tClRoZXJlIGlzIG5vIG5ldyBjaGFuZ2VzIGluIHYxMi4xLCBidXQganVzdCBy ZWJhc2UgdGhlIHdob2xlIHBhdGNoZXMgb24KdG9wIG9mIERhdmUncyBkcm0tbmV4dCBicmFuY2gg WzBdIChIZWlrbykKCkNoYW5nZXMgaW4gdjEyLjE6IE5vbmUKQ2hhbmdlcyBpbiB2MTI6Ci0gTW92 ZSB0aGUgY29ubmVjdG9yIGluaXQgdG8gYW5hbG9naXhfZHAgZHJpdmVyLCBhbmQgdXNpbmcgQVRP TUlDIGhlbHBlcihIZWlrbykKCkNoYW5nZXMgaW4gdjExOgotIFVzZXMgdGFicyB0byBmaXggdGhl IGluZGVudGF0aW9uIGlzc3VlcyBpbiBhbmFsb2dpeF9kcF9jb3JlLmggKEhlaWtvKQoKQ2hhbmdl cyBpbiB2MTA6IE5vbmUKQ2hhbmdlcyBpbiB2OTogTm9uZQpDaGFuZ2VzIGluIHY4OiBOb25lCkNo YW5nZXMgaW4gdjc6IE5vbmUKQ2hhbmdlcyBpbiB2NjoKLSBGaXggdGhlIEtjb25maWcgcmVjdXJz aXZlIGRlcGVuZGVuY3kgKEphdmllcikKCkNoYW5nZXMgaW4gdjU6Ci0gQ29ycmVjdCB0aGUgY2hl Y2sgY29uZGl0aW9uIG9mIGdwaW9faXNfdmFsaWQgd2hlbiBkcml2ZXIgdHJ5IHRvIGdldAogIHRo ZSAiaHBkLWdwaW9zIiBEVCBwcm9wZXJ5LiAoSGVpa28pCi0gTW92ZSB0aGUgcGxhdGZvcm0gYXR0 YWNoIGNhbGxiYWNrIGluIHRoZSBmcm9udCBvZiBjb3JlIGRyaXZlciBicmlkZ2UKICBhdHRjaCBm dW5jdGlvbi4gQ2F1c2Ugb25jZSBwbGF0Zm9ybSBmYWlsZWQgYXQgYXR0YWNoLCBjb3JlIGRyaXZl ciBzaG91bGQKICBzdGlsbCBmYWlsZWQsIHNvIG5vIG5lZWQgdG8gaW5pdCBjb25uZWN0b3IgYmVm b3JlIHBsYXRmb3JtIGF0dGFjaGVkIChLcnp5c3p0b2YpCi0gS2VlcCBjb2RlIHN0eWxlIG5vIGNo YW5nZXMgd2l0aCB0aGUgcHJldmlvdXMgZXh5bm9zX2RwX2NvZGUuYyBpbiB0aGlzCiAgcGF0Y2gs IGFuZCB1cGRhdGUgY29tbWl0IG1lc3NhZ2UgYWJvdXQgdGhlIG5ldyBleHBvcnQgc3ltYm9sIChL cnp5c3p0b2YpCi0gR2F0aGVyIHRoZSBkZXZpY2UgdHlwZSBwYXRjaCAodjQgMTEvMTYpIGludG8g dGhpcyBvbmUuIChLcnp5c3p0b2YpCi0gbGVhdmUgb3V0IHRoZSBjb25uZWN0b3IgcmVnaXN0cmF0 aW9uIHRvIGFuYWxvZ2l4IHBsYXRmb3JtIGRyaXZlci4gKFRoaWVycnkpCgpDaGFuZ2VzIGluIHY0 OgotIFVwZGF0ZSAiYW5hbG9naXgsaHBkLWdwaW9zIiB0byAiaHBkLWdwaW9zIiBEVCBwcm9wZXJ5 LiAoUm9iKQotIFJlbmFtZSAiYW5hbG9naXhfZHAtZXh5bm9zLmMiIGZpbGUgbmFtZSB0byAiZXh5 bm9zX2RwLmMiIChKaW5nb28pCi0gQ3JlYXRlIGEgc2VwYXJhdGUgZm9sZGVyIGZvciBhbmFsb2dp eCBjb2RlIGluIGJyaWRnZS8gKEFyY2hpdCkKCkNoYW5nZXMgaW4gdjM6Ci0gTW92ZSBleHlub3Mn cyB2aWRlb190aW1pbmcgY29kZSB0byBhbmFsb2dpeF9kcC1leHlub3MgcGxhdGZvcm0gZHJpdmVy LAogIGFkZCBnZXRfbW9kZXMgbWV0aG9kIHRvIHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEu IChUaGllcnJ5KQotIFJlbmFtZSBzb21lICJzYW1zdW5nKiIgZHRzIHByb3BlcnkgdG8gImFuYWxv Z2l4KiIuIChIZWlrbykKCkNoYW5nZXMgaW4gdjI6Ci0gUmVtb3ZlIG5ldyBjb3B5cmlnaHQgKEpp bmdvbykKLSBGaXggY29tcGlsZWQgZmFpbGVkIGR1ZSB0byBhbmFsb2dpeF9kcF9kZXZpY2UgbWlz c3BlbGwKCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgICAgICAgICAgICAgICAg ICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgICAgICAgICAgICAg ICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyAg ICAgICAgICAgIHwgICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L01ha2Vm aWxlICAgICAgICAgICB8ICAgIDEgKwogLi4uL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuY30g ICAgICAgICAgICAgICAgICAgfCAgODE2ICsrKysrLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9i cmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfY29yZS5oIHwgIDI3NyArKysrKwogZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9yZWcuYyAgfCAxMjYzICsrKysrKysr KysrKysrKysrKysrCiAuLi4vYW5hbG9naXgvYW5hbG9naXhfZHBfcmVnLmh9ICAgICAgICAgICAg ICAgICAgICB8ICAyNTggKystLQogZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnICAgICAg ICAgICAgICAgICAgICAgfCAgICAzICstCiBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5 bm9zX2RwLmMgICAgICAgICAgICAgICAgIHwgIDMyOCArKysrKwogZHJpdmVycy9ncHUvZHJtL2V4 eW5vcy9leHlub3NfZHBfY29yZS5oICAgICAgICAgICAgfCAgMjgyIC0tLS0tCiBkcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcF9yZWcuYyAgICAgICAgICAgICB8IDEyNjMgLS0tLS0tLS0t LS0tLS0tLS0tLS0KIGluY2x1ZGUvZHJtL2JyaWRnZS9hbmFsb2dpeF9kcC5oICAgICAgICAgICAg ICAgICAgIHwgICA0MCArCiAxNCBmaWxlcyBjaGFuZ2VkLCAyMzczIGluc2VydGlvbnMoKyksIDIx NjYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9hbmFsb2dpeC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9hbmFsb2dpeC9NYWtlZmlsZQogcmVuYW1lIGRyaXZlcnMvZ3B1L2RybS97ZXh5bm9zL2V4 eW5vc19kcF9jb3JlLmMgPT4gYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuY30gKDUy JSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2Fu YWxvZ2l4X2RwX2NvcmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9icmlk Z2UvYW5hbG9naXgvYW5hbG9naXhfZHBfcmVnLmMKIHJlbmFtZSBkcml2ZXJzL2dwdS9kcm0ve2V4 eW5vcy9leHlub3NfZHBfcmVnLmggPT4gYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX3JlZy5o fSAoNjQlKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19k cF9jb3JlLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcF9yZWcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2JyaWRnZS9hbmFsb2dp eF9kcC5oCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCmluZGV4IDI3ZTIwMjIuLmVmZDk0ZTAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcKQEAgLTQwLDQgKzQwLDYgQEAgY29uZmlnIERSTV9QQVJBREVfUFM4 NjIyCiAJLS0taGVscC0tLQogCSAgUGFyYWRlIGVEUC1MVkRTIGJyaWRnZSBjaGlwIGRyaXZlci4K IAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L0tjb25maWciCisKIGVu ZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCmluZGV4IGYxM2MzM2QuLmZmODIxZjQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9NYWtlZmlsZQpAQCAtNCwzICs0LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9EV19I RE1JKSArPSBkdy1oZG1pLm8KIG9iai0kKENPTkZJR19EUk1fRFdfSERNSV9BSEJfQVVESU8pICs9 IGR3LWhkbWktYWhiLWF1ZGlvLm8KIG9iai0kKENPTkZJR19EUk1fTlhQX1BUTjM0NjApICs9IG54 cC1wdG4zNDYwLm8KIG9iai0kKENPTkZJR19EUk1fUEFSQURFX1BTODYyMikgKz0gcGFyYWRlLXBz ODYyMi5vCitvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0RQKSArPSBhbmFsb2dpeC8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYW5hbG9naXgvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi44MGYyODZmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9hbmFsb2dpeC9LY29uZmlnCkBAIC0wLDAgKzEsMyBAQAorY29uZmlnIERSTV9BTkFMT0dJ WF9EUAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBEUk0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvYW5hbG9naXgvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2Fu YWxvZ2l4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDdi ODYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L01h a2VmaWxlCkBAIC0wLDAgKzEgQEAKK29iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9IGFu YWxvZ2l4X2RwX2NvcmUubyBhbmFsb2dpeF9kcF9yZWcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2V4eW5vcy9leHlub3NfZHBfY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9h bmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmMKc2ltaWxhcml0eSBpbmRleCA1MiUKcmVuYW1lIGZy b20gZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHBfY29yZS5jCnJlbmFtZSB0byBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuYwppbmRleCBiNzlj MzE2Li4zOTJjMjk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19k cF9jb3JlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9k cF9jb3JlLmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qCi0gKiBTYW1zdW5nIFNvQyBEUCAoRGlzcGxh eSBQb3J0KSBpbnRlcmZhY2UgZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1z dW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICogQXV0aG9yOiBKaW5nb28gSGFuIDxqZzEuaGFu QHNhbXN1bmcuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAq IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KKyogQW5h bG9naXggRFAgKERpc3BsYXkgUG9ydCkgY29yZSBpbnRlcmZhY2UgZHJpdmVyLgorKgorKiBDb3B5 cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyogQXV0aG9yOiBK aW5nb28gSGFuIDxqZzEuaGFuQHNhbXN1bmcuY29tPgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorKiB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUKKyogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAy IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgpAQCAtMTgsNjUgKzE4LDUxIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJy dXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+ Ci0jaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAj aW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgot I2luY2x1ZGUgPHZpZGVvL29mX2Rpc3BsYXlfdGltaW5nLmg+Ci0jaW5jbHVkZSA8dmlkZW8vb2Zf dmlkZW9tb2RlLmg+CiAKICNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1f YXRvbWljX2hlbHBlci5oPgogI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgogI2luY2x1ZGUgPGRy bS9kcm1fY3J0Y19oZWxwZXIuaD4KLSNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4K ICNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CiAKLSNpbmNsdWRlICJleHlub3NfZHBfY29yZS5o IgotI2luY2x1ZGUgImV4eW5vc19kcm1fY3J0Yy5oIgorI2luY2x1ZGUgPGRybS9icmlkZ2UvYW5h bG9naXhfZHAuaD4KIAotI2RlZmluZSBjdHhfZnJvbV9jb25uZWN0b3IoYykJY29udGFpbmVyX29m KGMsIHN0cnVjdCBleHlub3NfZHBfZGV2aWNlLCBcCi0JCQkJCWNvbm5lY3RvcikKKyNpbmNsdWRl ICJhbmFsb2dpeF9kcF9jb3JlLmgiCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGV4eW5vc19kcm1f Y3J0YyAqZHBfdG9fY3J0YyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCi17Ci0JcmV0dXJu IHRvX2V4eW5vc19jcnRjKGRwLT5lbmNvZGVyLmNydGMpOwotfQotCi1zdGF0aWMgaW5saW5lIHN0 cnVjdCBleHlub3NfZHBfZGV2aWNlICplbmNvZGVyX3RvX2RwKAotCQkJCQkJc3RydWN0IGRybV9l bmNvZGVyICplKQotewotCXJldHVybiBjb250YWluZXJfb2YoZSwgc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UsIGVuY29kZXIpOwotfQorI2RlZmluZSB0b19kcChubSkJY29udGFpbmVyX29mKG5tLCBz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlLCBubSkKIAogc3RydWN0IGJyaWRnZV9pbml0IHsKIAlz dHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKIH07 CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9pbml0X2RwKHN0cnVjdCBleHlub3NfZHBfZGV2aWNl ICpkcCkKK3N0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2luaXRfZHAoc3RydWN0IGFuYWxvZ2l4X2Rw X2RldmljZSAqZHApCiB7Ci0JZXh5bm9zX2RwX3Jlc2V0KGRwKTsKKwlhbmFsb2dpeF9kcF9yZXNl dChkcCk7CiAKLQlleHlub3NfZHBfc3dyZXNldChkcCk7CisJYW5hbG9naXhfZHBfc3dyZXNldChk cCk7CiAKLQlleHlub3NfZHBfaW5pdF9hbmFsb2dfcGFyYW0oZHApOwotCWV4eW5vc19kcF9pbml0 X2ludGVycnVwdChkcCk7CisJYW5hbG9naXhfZHBfaW5pdF9hbmFsb2dfcGFyYW0oZHApOworCWFu YWxvZ2l4X2RwX2luaXRfaW50ZXJydXB0KGRwKTsKIAogCS8qIFNXIGRlZmluZWQgZnVuY3Rpb24g Tm9ybWFsIG9wZXJhdGlvbiAqLwotCWV4eW5vc19kcF9lbmFibGVfc3dfZnVuY3Rpb24oZHApOwor CWFuYWxvZ2l4X2RwX2VuYWJsZV9zd19mdW5jdGlvbihkcCk7CiAKLQlleHlub3NfZHBfY29uZmln X2ludGVycnVwdChkcCk7Ci0JZXh5bm9zX2RwX2luaXRfYW5hbG9nX2Z1bmMoZHApOworCWFuYWxv Z2l4X2RwX2NvbmZpZ19pbnRlcnJ1cHQoZHApOworCWFuYWxvZ2l4X2RwX2luaXRfYW5hbG9nX2Z1 bmMoZHApOwogCi0JZXh5bm9zX2RwX2luaXRfaHBkKGRwKTsKLQlleHlub3NfZHBfaW5pdF9hdXgo ZHApOworCWFuYWxvZ2l4X2RwX2luaXRfaHBkKGRwKTsKKwlhbmFsb2dpeF9kcF9pbml0X2F1eChk cCk7CiB9CiAKLXN0YXRpYyBpbnQgZXh5bm9zX2RwX2RldGVjdF9ocGQoc3RydWN0IGV4eW5vc19k cF9kZXZpY2UgKmRwKQorc3RhdGljIGludCBhbmFsb2dpeF9kcF9kZXRlY3RfaHBkKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogewogCWludCB0aW1lb3V0X2xvb3AgPSAwOwogCi0Jd2hp bGUgKGV4eW5vc19kcF9nZXRfcGx1Z19pbl9zdGF0dXMoZHApICE9IDApIHsKKwl3aGlsZSAoYW5h bG9naXhfZHBfZ2V0X3BsdWdfaW5fc3RhdHVzKGRwKSAhPSAwKSB7CiAJCXRpbWVvdXRfbG9vcCsr OwogCQlpZiAoRFBfVElNRU9VVF9MT09QX0NPVU5UIDwgdGltZW91dF9sb29wKSB7CiAJCQlkZXZf ZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gZ2V0IGhwZCBwbHVnIHN0YXR1c1xuIik7CkBAIC04OCw3 ICs3NCw3IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX2RldGVjdF9ocGQoc3RydWN0IGV4eW5vc19k cF9kZXZpY2UgKmRwKQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBleHlu b3NfZHBfY2FsY19lZGlkX2NoZWNrX3N1bSh1bnNpZ25lZCBjaGFyICplZGlkX2RhdGEpCitzdGF0 aWMgdW5zaWduZWQgY2hhciBhbmFsb2dpeF9kcF9jYWxjX2VkaWRfY2hlY2tfc3VtKHVuc2lnbmVk IGNoYXIgKmVkaWRfZGF0YSkKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCBjaGFyIHN1bSA9IDA7CkBA IC05OSw3ICs4NSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGV4eW5vc19kcF9jYWxjX2VkaWRf Y2hlY2tfc3VtKHVuc2lnbmVkIGNoYXIgKmVkaWRfZGF0YSkKIAlyZXR1cm4gc3VtOwogfQogCi1z dGF0aWMgaW50IGV4eW5vc19kcF9yZWFkX2VkaWQoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRw KQorc3RhdGljIGludCBhbmFsb2dpeF9kcF9yZWFkX2VkaWQoc3RydWN0IGFuYWxvZ2l4X2RwX2Rl dmljZSAqZHApCiB7CiAJdW5zaWduZWQgY2hhciBlZGlkW0VESURfQkxPQ0tfTEVOR1RIICogMl07 CiAJdW5zaWduZWQgaW50IGV4dGVuZF9ibG9jayA9IDA7CkBAIC0xMTQsNyArMTAwLDcgQEAgc3Rh dGljIGludCBleHlub3NfZHBfcmVhZF9lZGlkKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkK IAkgKi8KIAogCS8qIFJlYWQgRXh0ZW5zaW9uIEZsYWcsIE51bWJlciBvZiAxMjgtYnl0ZSBFRElE IGV4dGVuc2lvbiBibG9ja3MgKi8KLQlyZXR2YWwgPSBleHlub3NfZHBfcmVhZF9ieXRlX2Zyb21f aTJjKGRwLCBJMkNfRURJRF9ERVZJQ0VfQUREUiwKKwlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFk X2J5dGVfZnJvbV9pMmMoZHAsIEkyQ19FRElEX0RFVklDRV9BRERSLAogCQkJCUVESURfRVhURU5T SU9OX0ZMQUcsCiAJCQkJJmV4dGVuZF9ibG9jayk7CiAJaWYgKHJldHZhbCkKQEAgLTEyNCw3ICsx MTAsNyBAQCBzdGF0aWMgaW50IGV4eW5vc19kcF9yZWFkX2VkaWQoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwKQogCQlkZXZfZGJnKGRwLT5kZXYsICJFRElEIGRhdGEgaW5jbHVkZXMgYSBzaW5n bGUgZXh0ZW5zaW9uIVxuIik7CiAKIAkJLyogUmVhZCBFRElEIGRhdGEgKi8KLQkJcmV0dmFsID0g ZXh5bm9zX2RwX3JlYWRfYnl0ZXNfZnJvbV9pMmMoZHAsIEkyQ19FRElEX0RFVklDRV9BRERSLAor CQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21faTJjKGRwLCBJMkNfRURJRF9E RVZJQ0VfQUREUiwKIAkJCQkJCUVESURfSEVBREVSX1BBVFRFUk4sCiAJCQkJCQlFRElEX0JMT0NL X0xFTkdUSCwKIAkJCQkJCSZlZGlkW0VESURfSEVBREVSX1BBVFRFUk5dKTsKQEAgLTEzMiwxNCAr MTE4LDE0IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX3JlYWRfZWRpZChzdHJ1Y3QgZXh5bm9zX2Rw X2RldmljZSAqZHApCiAJCQlkZXZfZXJyKGRwLT5kZXYsICJFRElEIFJlYWQgZmFpbGVkIVxuIik7 CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlzdW0gPSBleHlub3NfZHBfY2FsY19lZGlkX2NoZWNr X3N1bShlZGlkKTsKKwkJc3VtID0gYW5hbG9naXhfZHBfY2FsY19lZGlkX2NoZWNrX3N1bShlZGlk KTsKIAkJaWYgKHN1bSAhPSAwKSB7CiAJCQlkZXZfZXJyKGRwLT5kZXYsICJFRElEIGJhZCBjaGVj a3N1bSFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAogCQkvKiBSZWFkIGFkZGl0aW9uYWwg RURJRCBkYXRhICovCi0JCXJldHZhbCA9IGV4eW5vc19kcF9yZWFkX2J5dGVzX2Zyb21faTJjKGRw LAorCQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21faTJjKGRwLAogCQkJCUky Q19FRElEX0RFVklDRV9BRERSLAogCQkJCUVESURfQkxPQ0tfTEVOR1RILAogCQkJCUVESURfQkxP Q0tfTEVOR1RILApAQCAtMTQ4LDE5ICsxMzQsMTkgQEAgc3RhdGljIGludCBleHlub3NfZHBfcmVh ZF9lZGlkKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKIAkJCWRldl9lcnIoZHAtPmRldiwg IkVESUQgUmVhZCBmYWlsZWQhXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCXN1bSA9IGV4 eW5vc19kcF9jYWxjX2VkaWRfY2hlY2tfc3VtKCZlZGlkW0VESURfQkxPQ0tfTEVOR1RIXSk7CisJ CXN1bSA9IGFuYWxvZ2l4X2RwX2NhbGNfZWRpZF9jaGVja19zdW0oJmVkaWRbRURJRF9CTE9DS19M RU5HVEhdKTsKIAkJaWYgKHN1bSAhPSAwKSB7CiAJCQlkZXZfZXJyKGRwLT5kZXYsICJFRElEIGJh ZCBjaGVja3N1bSFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCQlleHlub3NfZHBfcmVh ZF9ieXRlX2Zyb21fZHBjZChkcCwgRFBfVEVTVF9SRVFVRVNULAorCQlhbmFsb2dpeF9kcF9yZWFk X2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9URVNUX1JFUVVFU1QsCiAJCQkJCSZ0ZXN0X3ZlY3Rvcik7 CiAJCWlmICh0ZXN0X3ZlY3RvciAmIERQX1RFU1RfTElOS19FRElEX1JFQUQpIHsKLQkJCWV4eW5v c19kcF93cml0ZV9ieXRlX3RvX2RwY2QoZHAsCisJCQlhbmFsb2dpeF9kcF93cml0ZV9ieXRlX3Rv X2RwY2QoZHAsCiAJCQkJRFBfVEVTVF9FRElEX0NIRUNLU1VNLAogCQkJCWVkaWRbRURJRF9CTE9D S19MRU5HVEggKyBFRElEX0NIRUNLU1VNXSk7Ci0JCQlleHlub3NfZHBfd3JpdGVfYnl0ZV90b19k cGNkKGRwLAorCQkJYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRwLAogCQkJCURQX1RF U1RfUkVTUE9OU0UsCiAJCQkJRFBfVEVTVF9FRElEX0NIRUNLU1VNX1dSSVRFKTsKIAkJfQpAQCAt MTY4LDcgKzE1NCw3IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX3JlYWRfZWRpZChzdHJ1Y3QgZXh5 bm9zX2RwX2RldmljZSAqZHApCiAJCWRldl9pbmZvKGRwLT5kZXYsICJFRElEIGRhdGEgZG9lcyBu b3QgaW5jbHVkZSBhbnkgZXh0ZW5zaW9ucy5cbiIpOwogCiAJCS8qIFJlYWQgRURJRCBkYXRhICov Ci0JCXJldHZhbCA9IGV4eW5vc19kcF9yZWFkX2J5dGVzX2Zyb21faTJjKGRwLAorCQlyZXR2YWwg PSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21faTJjKGRwLAogCQkJCUkyQ19FRElEX0RFVklD RV9BRERSLAogCQkJCUVESURfSEVBREVSX1BBVFRFUk4sCiAJCQkJRURJRF9CTE9DS19MRU5HVEgs CkBAIC0xNzcsMjAgKzE2MywyMCBAQCBzdGF0aWMgaW50IGV4eW5vc19kcF9yZWFkX2VkaWQoc3Ry dWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQogCQkJZGV2X2VycihkcC0+ZGV2LCAiRURJRCBSZWFk IGZhaWxlZCFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQkJc3VtID0gZXh5bm9zX2RwX2Nh bGNfZWRpZF9jaGVja19zdW0oZWRpZCk7CisJCXN1bSA9IGFuYWxvZ2l4X2RwX2NhbGNfZWRpZF9j aGVja19zdW0oZWRpZCk7CiAJCWlmIChzdW0gIT0gMCkgewogCQkJZGV2X2VycihkcC0+ZGV2LCAi RURJRCBiYWQgY2hlY2tzdW0hXG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKLQkJZXh5bm9z X2RwX3JlYWRfYnl0ZV9mcm9tX2RwY2QoZHAsCisJCWFuYWxvZ2l4X2RwX3JlYWRfYnl0ZV9mcm9t X2RwY2QoZHAsCiAJCQlEUF9URVNUX1JFUVVFU1QsCiAJCQkmdGVzdF92ZWN0b3IpOwogCQlpZiAo dGVzdF92ZWN0b3IgJiBEUF9URVNUX0xJTktfRURJRF9SRUFEKSB7Ci0JCQlleHlub3NfZHBfd3Jp dGVfYnl0ZV90b19kcGNkKGRwLAorCQkJYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRw LAogCQkJCURQX1RFU1RfRURJRF9DSEVDS1NVTSwKIAkJCQllZGlkW0VESURfQ0hFQ0tTVU1dKTsK LQkJCWV4eW5vc19kcF93cml0ZV9ieXRlX3RvX2RwY2QoZHAsCisJCQlhbmFsb2dpeF9kcF93cml0 ZV9ieXRlX3RvX2RwY2QoZHAsCiAJCQkJRFBfVEVTVF9SRVNQT05TRSwKIAkJCQlEUF9URVNUX0VE SURfQ0hFQ0tTVU1fV1JJVEUpOwogCQl9CkBAIC0yMDAsMjEgKzE4NiwyMSBAQCBzdGF0aWMgaW50 IGV4eW5vc19kcF9yZWFkX2VkaWQoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQogCXJldHVy biAwOwogfQogCi1zdGF0aWMgaW50IGV4eW5vc19kcF9oYW5kbGVfZWRpZChzdHJ1Y3QgZXh5bm9z X2RwX2RldmljZSAqZHApCitzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2hhbmRsZV9lZGlkKHN0cnVj dCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogewogCXU4IGJ1ZlsxMl07CiAJaW50IGk7CiAJaW50 IHJldHZhbDsKIAogCS8qIFJlYWQgRFBDRCBEUF9EUENEX1JFVn5SRUNFSVZFX1BPUlQxX0NBUF8x ICovCi0JcmV0dmFsID0gZXh5bm9zX2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGRwLCBEUF9EUENE X1JFViwKKwlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChkcCwgRFBf RFBDRF9SRVYsCiAJCQkJMTIsIGJ1Zik7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsK IAogCS8qIFJlYWQgRURJRCAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJcmV0dmFs ID0gZXh5bm9zX2RwX3JlYWRfZWRpZChkcCk7CisJCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3JlYWRf ZWRpZChkcCk7CiAJCWlmICghcmV0dmFsKQogCQkJYnJlYWs7CiAJfQpAQCAtMjIyLDczICsyMDgs NzMgQEAgc3RhdGljIGludCBleHlub3NfZHBfaGFuZGxlX2VkaWQoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwKQogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9l bmFibGVfcnhfdG9fZW5oYW5jZWRfbW9kZShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCitz dGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9lbmFibGVfcnhfdG9fZW5oYW5jZWRfbW9kZShzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCwKIAkJCQkJCWJvb2wgZW5hYmxlKQogewogCXU4IGRhdGE7 CiAKLQlleHlub3NfZHBfcmVhZF9ieXRlX2Zyb21fZHBjZChkcCwgRFBfTEFORV9DT1VOVF9TRVQs ICZkYXRhKTsKKwlhbmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9MQU5FX0NP VU5UX1NFVCwgJmRhdGEpOwogCiAJaWYgKGVuYWJsZSkKLQkJZXh5bm9zX2RwX3dyaXRlX2J5dGVf dG9fZHBjZChkcCwgRFBfTEFORV9DT1VOVF9TRVQsCisJCWFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVf dG9fZHBjZChkcCwgRFBfTEFORV9DT1VOVF9TRVQsCiAJCQlEUF9MQU5FX0NPVU5UX0VOSEFOQ0VE X0ZSQU1FX0VOIHwKIAkJCURQQ0RfTEFORV9DT1VOVF9TRVQoZGF0YSkpOwogCWVsc2UKLQkJZXh5 bm9zX2RwX3dyaXRlX2J5dGVfdG9fZHBjZChkcCwgRFBfTEFORV9DT1VOVF9TRVQsCisJCWFuYWxv Z2l4X2RwX3dyaXRlX2J5dGVfdG9fZHBjZChkcCwgRFBfTEFORV9DT1VOVF9TRVQsCiAJCQlEUENE X0xBTkVfQ09VTlRfU0VUKGRhdGEpKTsKIH0KIAotc3RhdGljIGludCBleHlub3NfZHBfaXNfZW5o YW5jZWRfbW9kZV9hdmFpbGFibGUoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQorc3RhdGlj IGludCBhbmFsb2dpeF9kcF9pc19lbmhhbmNlZF9tb2RlX2F2YWlsYWJsZShzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCkKIHsKIAl1OCBkYXRhOwogCWludCByZXR2YWw7CiAKLQlleHlub3Nf ZHBfcmVhZF9ieXRlX2Zyb21fZHBjZChkcCwgRFBfTUFYX0xBTkVfQ09VTlQsICZkYXRhKTsKKwlh bmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9NQVhfTEFORV9DT1VOVCwgJmRh dGEpOwogCXJldHZhbCA9IERQQ0RfRU5IQU5DRURfRlJBTUVfQ0FQKGRhdGEpOwogCiAJcmV0dXJu IHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQgZXh5bm9zX2RwX3NldF9lbmhhbmNlZF9tb2RlKHN0 cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKK3N0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX3NldF9l bmhhbmNlZF9tb2RlKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogewogCXU4IGRhdGE7 CiAKLQlkYXRhID0gZXh5bm9zX2RwX2lzX2VuaGFuY2VkX21vZGVfYXZhaWxhYmxlKGRwKTsKLQll eHlub3NfZHBfZW5hYmxlX3J4X3RvX2VuaGFuY2VkX21vZGUoZHAsIGRhdGEpOwotCWV4eW5vc19k cF9lbmFibGVfZW5oYW5jZWRfbW9kZShkcCwgZGF0YSk7CisJZGF0YSA9IGFuYWxvZ2l4X2RwX2lz X2VuaGFuY2VkX21vZGVfYXZhaWxhYmxlKGRwKTsKKwlhbmFsb2dpeF9kcF9lbmFibGVfcnhfdG9f ZW5oYW5jZWRfbW9kZShkcCwgZGF0YSk7CisJYW5hbG9naXhfZHBfZW5hYmxlX2VuaGFuY2VkX21v ZGUoZHAsIGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfZHBfdHJhaW5pbmdfcGF0dGVy bl9kaXMoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQorc3RhdGljIHZvaWQgYW5hbG9naXhf ZHBfdHJhaW5pbmdfcGF0dGVybl9kaXMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCiB7 Ci0JZXh5bm9zX2RwX3NldF90cmFpbmluZ19wYXR0ZXJuKGRwLCBEUF9OT05FKTsKKwlhbmFsb2dp eF9kcF9zZXRfdHJhaW5pbmdfcGF0dGVybihkcCwgRFBfTk9ORSk7CiAKLQlleHlub3NfZHBfd3Jp dGVfYnl0ZV90b19kcGNkKGRwLAorCWFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVfdG9fZHBjZChkcCwK IAkJRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCiAJCURQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJM RSk7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9zZXRfbGFuZV9sYW5lX3ByZV9lbXBoYXNp cyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCitzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9z ZXRfbGFuZV9sYW5lX3ByZV9lbXBoYXNpcyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwK IAkJCQkJaW50IHByZV9lbXBoYXNpcywgaW50IGxhbmUpCiB7CiAJc3dpdGNoIChsYW5lKSB7CiAJ Y2FzZSAwOgotCQlleHlub3NfZHBfc2V0X2xhbmUwX3ByZV9lbXBoYXNpcyhkcCwgcHJlX2VtcGhh c2lzKTsKKwkJYW5hbG9naXhfZHBfc2V0X2xhbmUwX3ByZV9lbXBoYXNpcyhkcCwgcHJlX2VtcGhh c2lzKTsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlleHlub3NfZHBfc2V0X2xhbmUxX3ByZV9lbXBo YXNpcyhkcCwgcHJlX2VtcGhhc2lzKTsKKwkJYW5hbG9naXhfZHBfc2V0X2xhbmUxX3ByZV9lbXBo YXNpcyhkcCwgcHJlX2VtcGhhc2lzKTsKIAkJYnJlYWs7CiAKIAljYXNlIDI6Ci0JCWV4eW5vc19k cF9zZXRfbGFuZTJfcHJlX2VtcGhhc2lzKGRwLCBwcmVfZW1waGFzaXMpOworCQlhbmFsb2dpeF9k cF9zZXRfbGFuZTJfcHJlX2VtcGhhc2lzKGRwLCBwcmVfZW1waGFzaXMpOwogCQlicmVhazsKIAog CWNhc2UgMzoKLQkJZXh5bm9zX2RwX3NldF9sYW5lM19wcmVfZW1waGFzaXMoZHAsIHByZV9lbXBo YXNpcyk7CisJCWFuYWxvZ2l4X2RwX3NldF9sYW5lM19wcmVfZW1waGFzaXMoZHAsIHByZV9lbXBo YXNpcyk7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBleHlub3NfZHBfbGlua19zdGFy dChzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCitzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2xp bmtfc3RhcnQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCiB7CiAJdTggYnVmWzRdOwog CWludCBsYW5lLCBsYW5lX2NvdW50LCBwbGxfdHJpZXMsIHJldHZhbDsKQEAgLTMwMiwyNSArMjg4 LDI1IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX2xpbmtfc3RhcnQoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwKQogCQlkcC0+bGlua190cmFpbi5jcl9sb29wW2xhbmVdID0gMDsKIAogCS8qIFNl dCBsaW5rIHJhdGUgYW5kIGNvdW50IGFzIHlvdSB3YW50IHRvIGVzdGFibGlzaCovCi0JZXh5bm9z X2RwX3NldF9saW5rX2JhbmR3aWR0aChkcCwgZHAtPmxpbmtfdHJhaW4ubGlua19yYXRlKTsKLQll eHlub3NfZHBfc2V0X2xhbmVfY291bnQoZHAsIGRwLT5saW5rX3RyYWluLmxhbmVfY291bnQpOwor CWFuYWxvZ2l4X2RwX3NldF9saW5rX2JhbmR3aWR0aChkcCwgZHAtPmxpbmtfdHJhaW4ubGlua19y YXRlKTsKKwlhbmFsb2dpeF9kcF9zZXRfbGFuZV9jb3VudChkcCwgZHAtPmxpbmtfdHJhaW4ubGFu ZV9jb3VudCk7CiAKIAkvKiBTZXR1cCBSWCBjb25maWd1cmF0aW9uICovCiAJYnVmWzBdID0gZHAt PmxpbmtfdHJhaW4ubGlua19yYXRlOwogCWJ1ZlsxXSA9IGRwLT5saW5rX3RyYWluLmxhbmVfY291 bnQ7Ci0JcmV0dmFsID0gZXh5bm9zX2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoZHAsIERQX0xJTktf QldfU0VULAorCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoZHAsIERQ X0xJTktfQldfU0VULAogCQkJCTIsIGJ1Zik7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZh bDsKIAogCS8qIFNldCBUWCBwcmUtZW1waGFzaXMgdG8gbWluaW11bSAqLwogCWZvciAobGFuZSA9 IDA7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspCi0JCWV4eW5vc19kcF9zZXRfbGFuZV9sYW5l X3ByZV9lbXBoYXNpcyhkcCwKKwkJYW5hbG9naXhfZHBfc2V0X2xhbmVfbGFuZV9wcmVfZW1waGFz aXMoZHAsCiAJCQlQUkVfRU1QSEFTSVNfTEVWRUxfMCwgbGFuZSk7CiAKIAkvKiBXYWl0IGZvciBQ TEwgbG9jayAqLwogCXBsbF90cmllcyA9IDA7Ci0Jd2hpbGUgKGV4eW5vc19kcF9nZXRfcGxsX2xv Y2tfc3RhdHVzKGRwKSA9PSBQTExfVU5MT0NLRUQpIHsKKwl3aGlsZSAoYW5hbG9naXhfZHBfZ2V0 X3BsbF9sb2NrX3N0YXR1cyhkcCkgPT0gUExMX1VOTE9DS0VEKSB7CiAJCWlmIChwbGxfdHJpZXMg PT0gRFBfVElNRU9VVF9MT09QX0NPVU5UKSB7CiAJCQlkZXZfZXJyKGRwLT5kZXYsICJXYWl0IGZv ciBQTEwgbG9jayB0aW1lZCBvdXRcbiIpOwogCQkJcmV0dXJuIC1FVElNRURPVVQ7CkBAIC0zMzEs MTAgKzMxNywxMCBAQCBzdGF0aWMgaW50IGV4eW5vc19kcF9saW5rX3N0YXJ0KHN0cnVjdCBleHlu b3NfZHBfZGV2aWNlICpkcCkKIAl9CiAKIAkvKiBTZXQgdHJhaW5pbmcgcGF0dGVybiAxICovCi0J ZXh5bm9zX2RwX3NldF90cmFpbmluZ19wYXR0ZXJuKGRwLCBUUkFJTklOR19QVE4xKTsKKwlhbmFs b2dpeF9kcF9zZXRfdHJhaW5pbmdfcGF0dGVybihkcCwgVFJBSU5JTkdfUFROMSk7CiAKIAkvKiBT ZXQgUlggdHJhaW5pbmcgcGF0dGVybiAqLwotCXJldHZhbCA9IGV4eW5vc19kcF93cml0ZV9ieXRl X3RvX2RwY2QoZHAsCisJcmV0dmFsID0gYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90b19kcGNkKGRw LAogCQkJRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCiAJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElT QUJMRSB8IERQX1RSQUlOSU5HX1BBVFRFUk5fMSk7CiAJaWYgKHJldHZhbCkKQEAgLTM0NCwxMyAr MzMwLDEzIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX2xpbmtfc3RhcnQoc3RydWN0IGV4eW5vc19k cF9kZXZpY2UgKmRwKQogCQlidWZbbGFuZV0gPSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8wIHwK IAkJCSAgICBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzA7CiAKLQlyZXR2YWwgPSBleHlu b3NfZHBfd3JpdGVfYnl0ZXNfdG9fZHBjZChkcCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULAorCXJl dHZhbCA9IGFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoZHAsIERQX1RSQUlOSU5HX0xB TkUwX1NFVCwKIAkJCWxhbmVfY291bnQsIGJ1Zik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1z dGF0aWMgdW5zaWduZWQgY2hhciBleHlub3NfZHBfZ2V0X2xhbmVfc3RhdHVzKHU4IGxpbmtfc3Rh dHVzWzJdLCBpbnQgbGFuZSkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGFuYWxvZ2l4X2RwX2dldF9s YW5lX3N0YXR1cyh1OCBsaW5rX3N0YXR1c1syXSwgaW50IGxhbmUpCiB7CiAJaW50IHNoaWZ0ID0g KGxhbmUgJiAxKSAqIDQ7CiAJdTggbGlua192YWx1ZSA9IGxpbmtfc3RhdHVzW2xhbmU+PjFdOwpA QCAtMzU4LDIwICszNDQsMjAgQEAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXh5bm9zX2RwX2dldF9s YW5lX3N0YXR1cyh1OCBsaW5rX3N0YXR1c1syXSwgaW50IGxhbmUpCiAJcmV0dXJuIChsaW5rX3Zh bHVlID4+IHNoaWZ0KSAmIDB4ZjsKIH0KIAotc3RhdGljIGludCBleHlub3NfZHBfY2xvY2tfcmVj b3Zlcnlfb2sodTggbGlua19zdGF0dXNbMl0sIGludCBsYW5lX2NvdW50KQorc3RhdGljIGludCBh bmFsb2dpeF9kcF9jbG9ja19yZWNvdmVyeV9vayh1OCBsaW5rX3N0YXR1c1syXSwgaW50IGxhbmVf Y291bnQpCiB7CiAJaW50IGxhbmU7CiAJdTggbGFuZV9zdGF0dXM7CiAKIAlmb3IgKGxhbmUgPSAw OyBsYW5lIDwgbGFuZV9jb3VudDsgbGFuZSsrKSB7Ci0JCWxhbmVfc3RhdHVzID0gZXh5bm9zX2Rw X2dldF9sYW5lX3N0YXR1cyhsaW5rX3N0YXR1cywgbGFuZSk7CisJCWxhbmVfc3RhdHVzID0gYW5h bG9naXhfZHBfZ2V0X2xhbmVfc3RhdHVzKGxpbmtfc3RhdHVzLCBsYW5lKTsKIAkJaWYgKChsYW5l X3N0YXR1cyAmIERQX0xBTkVfQ1JfRE9ORSkgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0K IAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBleHlub3NfZHBfY2hhbm5lbF9lcV9vayh1OCBs aW5rX3N0YXR1c1syXSwgdTggbGlua19hbGlnbiwKK3N0YXRpYyBpbnQgYW5hbG9naXhfZHBfY2hh bm5lbF9lcV9vayh1OCBsaW5rX3N0YXR1c1syXSwgdTggbGlua19hbGlnbiwKIAkJCQlpbnQgbGFu ZV9jb3VudCkKIHsKIAlpbnQgbGFuZTsKQEAgLTM4MSw3ICszNjcsNyBAQCBzdGF0aWMgaW50IGV4 eW5vc19kcF9jaGFubmVsX2VxX29rKHU4IGxpbmtfc3RhdHVzWzJdLCB1OCBsaW5rX2FsaWduLAog CQlyZXR1cm4gLUVJTlZBTDsKIAogCWZvciAobGFuZSA9IDA7IGxhbmUgPCBsYW5lX2NvdW50OyBs YW5lKyspIHsKLQkJbGFuZV9zdGF0dXMgPSBleHlub3NfZHBfZ2V0X2xhbmVfc3RhdHVzKGxpbmtf c3RhdHVzLCBsYW5lKTsKKwkJbGFuZV9zdGF0dXMgPSBhbmFsb2dpeF9kcF9nZXRfbGFuZV9zdGF0 dXMobGlua19zdGF0dXMsIGxhbmUpOwogCQlsYW5lX3N0YXR1cyAmPSBEUF9DSEFOTkVMX0VRX0JJ VFM7CiAJCWlmIChsYW5lX3N0YXR1cyAhPSBEUF9DSEFOTkVMX0VRX0JJVFMpCiAJCQlyZXR1cm4g LUVJTlZBTDsKQEAgLTM5MCw3ICszNzYsNyBAQCBzdGF0aWMgaW50IGV4eW5vc19kcF9jaGFubmVs X2VxX29rKHU4IGxpbmtfc3RhdHVzWzJdLCB1OCBsaW5rX2FsaWduLAogCXJldHVybiAwOwogfQog Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBleHlub3NfZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRh Z2UodTggYWRqdXN0X3JlcXVlc3RbMl0sCitzdGF0aWMgdW5zaWduZWQgY2hhciBhbmFsb2dpeF9k cF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZSh1OCBhZGp1c3RfcmVxdWVzdFsyXSwKIAkJCQkJ CQlpbnQgbGFuZSkKIHsKIAlpbnQgc2hpZnQgPSAobGFuZSAmIDEpICogNDsKQEAgLTM5OSw3ICsz ODUsNyBAQCBzdGF0aWMgdW5zaWduZWQgY2hhciBleHlub3NfZHBfZ2V0X2FkanVzdF9yZXF1ZXN0 X3ZvbHRhZ2UodTggYWRqdXN0X3JlcXVlc3RbMl0sCiAJcmV0dXJuIChsaW5rX3ZhbHVlID4+IHNo aWZ0KSAmIDB4MzsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgZXh5bm9zX2RwX2dldF9hZGp1 c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMoCitzdGF0aWMgdW5zaWduZWQgY2hhciBhbmFsb2dpeF9k cF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKAogCQkJCQl1OCBhZGp1c3RfcmVxdWVz dFsyXSwKIAkJCQkJaW50IGxhbmUpCiB7CkBAIC00MDksNDUgKzM5NSw0NSBAQCBzdGF0aWMgdW5z aWduZWQgY2hhciBleHlub3NfZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcygKIAly ZXR1cm4gKChsaW5rX3ZhbHVlID4+IHNoaWZ0KSAmIDB4YykgPj4gMjsKIH0KIAotc3RhdGljIHZv aWQgZXh5bm9zX2RwX3NldF9sYW5lX2xpbmtfdHJhaW5pbmcoc3RydWN0IGV4eW5vc19kcF9kZXZp Y2UgKmRwLAorc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfc2V0X2xhbmVfbGlua190cmFpbmluZyhz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKIAkJCQkJdTggdHJhaW5pbmdfbGFuZV9zZXQs IGludCBsYW5lKQogewogCXN3aXRjaCAobGFuZSkgewogCWNhc2UgMDoKLQkJZXh5bm9zX2RwX3Nl dF9sYW5lMF9saW5rX3RyYWluaW5nKGRwLCB0cmFpbmluZ19sYW5lX3NldCk7CisJCWFuYWxvZ2l4 X2RwX3NldF9sYW5lMF9saW5rX3RyYWluaW5nKGRwLCB0cmFpbmluZ19sYW5lX3NldCk7CiAJCWJy ZWFrOwogCWNhc2UgMToKLQkJZXh5bm9zX2RwX3NldF9sYW5lMV9saW5rX3RyYWluaW5nKGRwLCB0 cmFpbmluZ19sYW5lX3NldCk7CisJCWFuYWxvZ2l4X2RwX3NldF9sYW5lMV9saW5rX3RyYWluaW5n KGRwLCB0cmFpbmluZ19sYW5lX3NldCk7CiAJCWJyZWFrOwogCiAJY2FzZSAyOgotCQlleHlub3Nf ZHBfc2V0X2xhbmUyX2xpbmtfdHJhaW5pbmcoZHAsIHRyYWluaW5nX2xhbmVfc2V0KTsKKwkJYW5h bG9naXhfZHBfc2V0X2xhbmUyX2xpbmtfdHJhaW5pbmcoZHAsIHRyYWluaW5nX2xhbmVfc2V0KTsK IAkJYnJlYWs7CiAKIAljYXNlIDM6Ci0JCWV4eW5vc19kcF9zZXRfbGFuZTNfbGlua190cmFpbmlu ZyhkcCwgdHJhaW5pbmdfbGFuZV9zZXQpOworCQlhbmFsb2dpeF9kcF9zZXRfbGFuZTNfbGlua190 cmFpbmluZyhkcCwgdHJhaW5pbmdfbGFuZV9zZXQpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRp YyB1bnNpZ25lZCBpbnQgZXh5bm9zX2RwX2dldF9sYW5lX2xpbmtfdHJhaW5pbmcoCi0JCQkJc3Ry dWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAorc3RhdGljIHVuc2lnbmVkIGludCBhbmFsb2dpeF9k cF9nZXRfbGFuZV9saW5rX3RyYWluaW5nKAorCQkJCXN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ug KmRwLAogCQkJCWludCBsYW5lKQogewogCXUzMiByZWc7CiAKIAlzd2l0Y2ggKGxhbmUpIHsKIAlj YXNlIDA6Ci0JCXJlZyA9IGV4eW5vc19kcF9nZXRfbGFuZTBfbGlua190cmFpbmluZyhkcCk7CisJ CXJlZyA9IGFuYWxvZ2l4X2RwX2dldF9sYW5lMF9saW5rX3RyYWluaW5nKGRwKTsKIAkJYnJlYWs7 CiAJY2FzZSAxOgotCQlyZWcgPSBleHlub3NfZHBfZ2V0X2xhbmUxX2xpbmtfdHJhaW5pbmcoZHAp OworCQlyZWcgPSBhbmFsb2dpeF9kcF9nZXRfbGFuZTFfbGlua190cmFpbmluZyhkcCk7CiAJCWJy ZWFrOwogCWNhc2UgMjoKLQkJcmVnID0gZXh5bm9zX2RwX2dldF9sYW5lMl9saW5rX3RyYWluaW5n KGRwKTsKKwkJcmVnID0gYW5hbG9naXhfZHBfZ2V0X2xhbmUyX2xpbmtfdHJhaW5pbmcoZHApOwog CQlicmVhazsKIAljYXNlIDM6Ci0JCXJlZyA9IGV4eW5vc19kcF9nZXRfbGFuZTNfbGlua190cmFp bmluZyhkcCk7CisJCXJlZyA9IGFuYWxvZ2l4X2RwX2dldF9sYW5lM19saW5rX3RyYWluaW5nKGRw KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKQEAgLTQ1NywxNSArNDQzLDE1 IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXh5bm9zX2RwX2dldF9sYW5lX2xpbmtfdHJhaW5pbmco CiAJcmV0dXJuIHJlZzsKIH0KIAotc3RhdGljIHZvaWQgZXh5bm9zX2RwX3JlZHVjZV9saW5rX3Jh dGUoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQorc3RhdGljIHZvaWQgYW5hbG9naXhfZHBf cmVkdWNlX2xpbmtfcmF0ZShzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKIHsKLQlleHlu b3NfZHBfdHJhaW5pbmdfcGF0dGVybl9kaXMoZHApOwotCWV4eW5vc19kcF9zZXRfZW5oYW5jZWRf bW9kZShkcCk7CisJYW5hbG9naXhfZHBfdHJhaW5pbmdfcGF0dGVybl9kaXMoZHApOworCWFuYWxv Z2l4X2RwX3NldF9lbmhhbmNlZF9tb2RlKGRwKTsKIAogCWRwLT5saW5rX3RyYWluLmx0X3N0YXRl ID0gRkFJTEVEOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfZHBfZ2V0X2FkanVzdF90cmFpbmlu Z19sYW5lKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKK3N0YXRpYyB2b2lkIGFuYWxvZ2l4 X2RwX2dldF9hZGp1c3RfdHJhaW5pbmdfbGFuZShzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpk cCwKIAkJCQkJdTggYWRqdXN0X3JlcXVlc3RbMl0pCiB7CiAJaW50IGxhbmUsIGxhbmVfY291bnQ7 CkBAIC00NzMsOSArNDU5LDkgQEAgc3RhdGljIHZvaWQgZXh5bm9zX2RwX2dldF9hZGp1c3RfdHJh aW5pbmdfbGFuZShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCiAKIAlsYW5lX2NvdW50ID0g ZHAtPmxpbmtfdHJhaW4ubGFuZV9jb3VudDsKIAlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgbGFuZV9j b3VudDsgbGFuZSsrKSB7Ci0JCXZvbHRhZ2Vfc3dpbmcgPSBleHlub3NfZHBfZ2V0X2FkanVzdF9y ZXF1ZXN0X3ZvbHRhZ2UoCisJCXZvbHRhZ2Vfc3dpbmcgPSBhbmFsb2dpeF9kcF9nZXRfYWRqdXN0 X3JlcXVlc3Rfdm9sdGFnZSgKIAkJCQkJCWFkanVzdF9yZXF1ZXN0LCBsYW5lKTsKLQkJcHJlX2Vt cGhhc2lzID0gZXh5bm9zX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMoCisJCXBy ZV9lbXBoYXNpcyA9IGFuYWxvZ2l4X2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMo CiAJCQkJCQlhZGp1c3RfcmVxdWVzdCwgbGFuZSk7CiAJCXRyYWluaW5nX2xhbmUgPSBEUENEX1ZP TFRBR0VfU1dJTkdfU0VUKHZvbHRhZ2Vfc3dpbmcpIHwKIAkJCQlEUENEX1BSRV9FTVBIQVNJU19T RVQocHJlX2VtcGhhc2lzKTsKQEAgLTQ4OSw3ICs0NzUsNyBAQCBzdGF0aWMgdm9pZCBleHlub3Nf ZHBfZ2V0X2FkanVzdF90cmFpbmluZ19sYW5lKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwK IAl9CiB9CiAKLXN0YXRpYyBpbnQgZXh5bm9zX2RwX3Byb2Nlc3NfY2xvY2tfcmVjb3Zlcnkoc3Ry dWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQorc3RhdGljIGludCBhbmFsb2dpeF9kcF9wcm9jZXNz X2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogewogCWludCBs YW5lLCBsYW5lX2NvdW50LCByZXR2YWw7CiAJdTggdm9sdGFnZV9zd2luZywgcHJlX2VtcGhhc2lz LCB0cmFpbmluZ19sYW5lOwpAQCAtNDk5LDIxICs0ODUsMjEgQEAgc3RhdGljIGludCBleHlub3Nf ZHBfcHJvY2Vzc19jbG9ja19yZWNvdmVyeShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCiAK IAlsYW5lX2NvdW50ID0gZHAtPmxpbmtfdHJhaW4ubGFuZV9jb3VudDsKIAotCXJldHZhbCA9ICBl eHlub3NfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2QoZHAsCisJcmV0dmFsID0gIGFuYWxvZ2l4X2Rw X3JlYWRfYnl0ZXNfZnJvbV9kcGNkKGRwLAogCQkJRFBfTEFORTBfMV9TVEFUVVMsIDIsIGxpbmtf c3RhdHVzKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dmFsID0gIGV4 eW5vc19kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChkcCwKKwlyZXR2YWwgPSAgYW5hbG9naXhfZHBf cmVhZF9ieXRlc19mcm9tX2RwY2QoZHAsCiAJCQlEUF9BREpVU1RfUkVRVUVTVF9MQU5FMF8xLCAy LCBhZGp1c3RfcmVxdWVzdCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCWlm IChleHlub3NfZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGxhbmVfY291bnQpID09 IDApIHsKKwlpZiAoYW5hbG9naXhfZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0dXMsIGxh bmVfY291bnQpID09IDApIHsKIAkJLyogc2V0IHRyYWluaW5nIHBhdHRlcm4gMiBmb3IgRVEgKi8K LQkJZXh5bm9zX2RwX3NldF90cmFpbmluZ19wYXR0ZXJuKGRwLCBUUkFJTklOR19QVE4yKTsKKwkJ YW5hbG9naXhfZHBfc2V0X3RyYWluaW5nX3BhdHRlcm4oZHAsIFRSQUlOSU5HX1BUTjIpOwogCi0J CXJldHZhbCA9IGV4eW5vc19kcF93cml0ZV9ieXRlX3RvX2RwY2QoZHAsCisJCXJldHZhbCA9IGFu YWxvZ2l4X2RwX3dyaXRlX2J5dGVfdG9fZHBjZChkcCwKIAkJCQlEUF9UUkFJTklOR19QQVRURVJO X1NFVCwKIAkJCQlEUF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSB8CiAJCQkJRFBfVFJBSU5JTkdf UEFUVEVSTl8yKTsKQEAgLTUyNCwxMSArNTEwLDExIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX3By b2Nlc3NfY2xvY2tfcmVjb3Zlcnkoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQogCQlkcC0+ bGlua190cmFpbi5sdF9zdGF0ZSA9IEVRVUFMSVpFUl9UUkFJTklORzsKIAl9IGVsc2UgewogCQlm b3IgKGxhbmUgPSAwOyBsYW5lIDwgbGFuZV9jb3VudDsgbGFuZSsrKSB7Ci0JCQl0cmFpbmluZ19s YW5lID0gZXh5bm9zX2RwX2dldF9sYW5lX2xpbmtfdHJhaW5pbmcoCisJCQl0cmFpbmluZ19sYW5l ID0gYW5hbG9naXhfZHBfZ2V0X2xhbmVfbGlua190cmFpbmluZygKIAkJCQkJCQlkcCwgbGFuZSk7 Ci0JCQl2b2x0YWdlX3N3aW5nID0gZXh5bm9zX2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0YWdl KAorCQkJdm9sdGFnZV9zd2luZyA9IGFuYWxvZ2l4X2RwX2dldF9hZGp1c3RfcmVxdWVzdF92b2x0 YWdlKAogCQkJCQkJCWFkanVzdF9yZXF1ZXN0LCBsYW5lKTsKLQkJCXByZV9lbXBoYXNpcyA9IGV4 eW5vc19kcF9nZXRfYWRqdXN0X3JlcXVlc3RfcHJlX2VtcGhhc2lzKAorCQkJcHJlX2VtcGhhc2lz ID0gYW5hbG9naXhfZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ByZV9lbXBoYXNpcygKIAkJCQkJCQlh ZGp1c3RfcmVxdWVzdCwgbGFuZSk7CiAKIAkJCWlmIChEUENEX1ZPTFRBR0VfU1dJTkdfR0VUKHRy YWluaW5nX2xhbmUpID09CkBAIC01NDMsMTkgKzUyOSwxOSBAQCBzdGF0aWMgaW50IGV4eW5vc19k cF9wcm9jZXNzX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKIAkJ CQlkZXZfZXJyKGRwLT5kZXYsICJDUiBNYXggcmVhY2hlZCAoJWQsJWQsJWQpXG4iLAogCQkJCQlk cC0+bGlua190cmFpbi5jcl9sb29wW2xhbmVdLAogCQkJCQl2b2x0YWdlX3N3aW5nLCBwcmVfZW1w aGFzaXMpOwotCQkJCWV4eW5vc19kcF9yZWR1Y2VfbGlua19yYXRlKGRwKTsKKwkJCQlhbmFsb2dp eF9kcF9yZWR1Y2VfbGlua19yYXRlKGRwKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJfQog CX0KIAotCWV4eW5vc19kcF9nZXRfYWRqdXN0X3RyYWluaW5nX2xhbmUoZHAsIGFkanVzdF9yZXF1 ZXN0KTsKKwlhbmFsb2dpeF9kcF9nZXRfYWRqdXN0X3RyYWluaW5nX2xhbmUoZHAsIGFkanVzdF9y ZXF1ZXN0KTsKIAogCWZvciAobGFuZSA9IDA7IGxhbmUgPCBsYW5lX2NvdW50OyBsYW5lKyspCi0J CWV4eW5vc19kcF9zZXRfbGFuZV9saW5rX3RyYWluaW5nKGRwLAorCQlhbmFsb2dpeF9kcF9zZXRf bGFuZV9saW5rX3RyYWluaW5nKGRwLAogCQkJZHAtPmxpbmtfdHJhaW4udHJhaW5pbmdfbGFuZVts YW5lXSwgbGFuZSk7CiAKLQlyZXR2YWwgPSBleHlub3NfZHBfd3JpdGVfYnl0ZXNfdG9fZHBjZChk cCwKKwlyZXR2YWwgPSBhbmFsb2dpeF9kcF93cml0ZV9ieXRlc190b19kcGNkKGRwLAogCQkJRFBf VFJBSU5JTkdfTEFORTBfU0VULCBsYW5lX2NvdW50LAogCQkJZHAtPmxpbmtfdHJhaW4udHJhaW5p bmdfbGFuZSk7CiAJaWYgKHJldHZhbCkKQEAgLTU2NCw3ICs1NTAsNyBAQCBzdGF0aWMgaW50IGV4 eW5vc19kcF9wcm9jZXNzX2Nsb2NrX3JlY292ZXJ5KHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpk cCkKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGV4eW5vc19kcF9wcm9jZXNzX2Vx dWFsaXplcl90cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCitzdGF0aWMgaW50 IGFuYWxvZ2l4X2RwX3Byb2Nlc3NfZXF1YWxpemVyX3RyYWluaW5nKHN0cnVjdCBhbmFsb2dpeF9k cF9kZXZpY2UgKmRwKQogewogCWludCBsYW5lLCBsYW5lX2NvdW50LCByZXR2YWw7CiAJdTMyIHJl ZzsKQEAgLTU3NCw0NiArNTYwLDQ2IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2RwX3Byb2Nlc3NfZXF1 YWxpemVyX3RyYWluaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKIAogCWxhbmVfY291 bnQgPSBkcC0+bGlua190cmFpbi5sYW5lX2NvdW50OwogCi0JcmV0dmFsID0gZXh5bm9zX2RwX3Jl YWRfYnl0ZXNfZnJvbV9kcGNkKGRwLAorCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3JlYWRfYnl0ZXNf ZnJvbV9kcGNkKGRwLAogCQkJRFBfTEFORTBfMV9TVEFUVVMsIDIsIGxpbmtfc3RhdHVzKTsKIAlp ZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JaWYgKGV4eW5vc19kcF9jbG9ja19yZWNv dmVyeV9vayhsaW5rX3N0YXR1cywgbGFuZV9jb3VudCkpIHsKLQkJZXh5bm9zX2RwX3JlZHVjZV9s aW5rX3JhdGUoZHApOworCWlmIChhbmFsb2dpeF9kcF9jbG9ja19yZWNvdmVyeV9vayhsaW5rX3N0 YXR1cywgbGFuZV9jb3VudCkpIHsKKwkJYW5hbG9naXhfZHBfcmVkdWNlX2xpbmtfcmF0ZShkcCk7 CiAJCXJldHVybiAtRUlPOwogCX0KIAotCXJldHZhbCA9IGV4eW5vc19kcF9yZWFkX2J5dGVzX2Zy b21fZHBjZChkcCwKKwlyZXR2YWwgPSBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChk cCwKIAkJCURQX0FESlVTVF9SRVFVRVNUX0xBTkUwXzEsIDIsIGFkanVzdF9yZXF1ZXN0KTsKIAlp ZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dmFsID0gZXh5bm9zX2RwX3JlYWRf Ynl0ZV9mcm9tX2RwY2QoZHAsCisJcmV0dmFsID0gYW5hbG9naXhfZHBfcmVhZF9ieXRlX2Zyb21f ZHBjZChkcCwKIAkJCURQX0xBTkVfQUxJR05fU1RBVFVTX1VQREFURUQsICZsaW5rX2FsaWduKTsK IAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JZXh5bm9zX2RwX2dldF9hZGp1c3Rf dHJhaW5pbmdfbGFuZShkcCwgYWRqdXN0X3JlcXVlc3QpOworCWFuYWxvZ2l4X2RwX2dldF9hZGp1 c3RfdHJhaW5pbmdfbGFuZShkcCwgYWRqdXN0X3JlcXVlc3QpOwogCi0JaWYgKCFleHlub3NfZHBf Y2hhbm5lbF9lcV9vayhsaW5rX3N0YXR1cywgbGlua19hbGlnbiwgbGFuZV9jb3VudCkpIHsKKwlp ZiAoIWFuYWxvZ2l4X2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGxpbmtfYWxpZ24sIGxh bmVfY291bnQpKSB7CiAJCS8qIHRyYWluZyBwYXR0ZXJuIFNldCB0byBOb3JtYWwgKi8KLQkJZXh5 bm9zX2RwX3RyYWluaW5nX3BhdHRlcm5fZGlzKGRwKTsKKwkJYW5hbG9naXhfZHBfdHJhaW5pbmdf cGF0dGVybl9kaXMoZHApOwogCiAJCWRldl9pbmZvKGRwLT5kZXYsICJMaW5rIFRyYWluaW5nIHN1 Y2Nlc3MhXG4iKTsKIAotCQlleHlub3NfZHBfZ2V0X2xpbmtfYmFuZHdpZHRoKGRwLCAmcmVnKTsK KwkJYW5hbG9naXhfZHBfZ2V0X2xpbmtfYmFuZHdpZHRoKGRwLCAmcmVnKTsKIAkJZHAtPmxpbmtf dHJhaW4ubGlua19yYXRlID0gcmVnOwogCQlkZXZfZGJnKGRwLT5kZXYsICJmaW5hbCBiYW5kd2lk dGggPSAlLjJ4XG4iLAogCQkJZHAtPmxpbmtfdHJhaW4ubGlua19yYXRlKTsKIAotCQlleHlub3Nf ZHBfZ2V0X2xhbmVfY291bnQoZHAsICZyZWcpOworCQlhbmFsb2dpeF9kcF9nZXRfbGFuZV9jb3Vu dChkcCwgJnJlZyk7CiAJCWRwLT5saW5rX3RyYWluLmxhbmVfY291bnQgPSByZWc7CiAJCWRldl9k YmcoZHAtPmRldiwgImZpbmFsIGxhbmUgY291bnQgPSAlLjJ4XG4iLAogCQkJZHAtPmxpbmtfdHJh aW4ubGFuZV9jb3VudCk7CiAKIAkJLyogc2V0IGVuaGFuY2VkIG1vZGUgaWYgYXZhaWxhYmxlICov Ci0JCWV4eW5vc19kcF9zZXRfZW5oYW5jZWRfbW9kZShkcCk7CisJCWFuYWxvZ2l4X2RwX3NldF9l bmhhbmNlZF9tb2RlKGRwKTsKIAkJZHAtPmxpbmtfdHJhaW4ubHRfc3RhdGUgPSBGSU5JU0hFRDsK IAogCQlyZXR1cm4gMDsKQEAgLTYyNCwyMSArNjEwLDIxIEBAIHN0YXRpYyBpbnQgZXh5bm9zX2Rw X3Byb2Nlc3NfZXF1YWxpemVyX3RyYWluaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkK IAogCWlmIChkcC0+bGlua190cmFpbi5lcV9sb29wID4gTUFYX0VRX0xPT1ApIHsKIAkJZGV2X2Vy cihkcC0+ZGV2LCAiRVEgTWF4IGxvb3BcbiIpOwotCQlleHlub3NfZHBfcmVkdWNlX2xpbmtfcmF0 ZShkcCk7CisJCWFuYWxvZ2l4X2RwX3JlZHVjZV9saW5rX3JhdGUoZHApOwogCQlyZXR1cm4gLUVJ TzsKIAl9CiAKIAlmb3IgKGxhbmUgPSAwOyBsYW5lIDwgbGFuZV9jb3VudDsgbGFuZSsrKQotCQll eHlub3NfZHBfc2V0X2xhbmVfbGlua190cmFpbmluZyhkcCwKKwkJYW5hbG9naXhfZHBfc2V0X2xh bmVfbGlua190cmFpbmluZyhkcCwKIAkJCWRwLT5saW5rX3RyYWluLnRyYWluaW5nX2xhbmVbbGFu ZV0sIGxhbmUpOwogCi0JcmV0dmFsID0gZXh5bm9zX2RwX3dyaXRlX2J5dGVzX3RvX2RwY2QoZHAs IERQX1RSQUlOSU5HX0xBTkUwX1NFVCwKKwlyZXR2YWwgPSBhbmFsb2dpeF9kcF93cml0ZV9ieXRl c190b19kcGNkKGRwLCBEUF9UUkFJTklOR19MQU5FMF9TRVQsCiAJCQlsYW5lX2NvdW50LCBkcC0+ bGlua190cmFpbi50cmFpbmluZ19sYW5lKTsKIAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRp YyB2b2lkIGV4eW5vc19kcF9nZXRfbWF4X3J4X2JhbmR3aWR0aChzdHJ1Y3QgZXh5bm9zX2RwX2Rl dmljZSAqZHAsCitzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9nZXRfbWF4X3J4X2JhbmR3aWR0aChz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKIAkJCQkJdTggKmJhbmR3aWR0aCkKIHsKIAl1 OCBkYXRhOwpAQCAtNjQ3LDExICs2MzMsMTEgQEAgc3RhdGljIHZvaWQgZXh5bm9zX2RwX2dldF9t YXhfcnhfYmFuZHdpZHRoKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKIAkgKiBGb3IgRFAg cmV2LjEuMSwgTWF4aW11bSBsaW5rIHJhdGUgb2YgTWFpbiBMaW5rIGxhbmVzCiAJICogMHgwNiA9 IDEuNjIgR2JwcywgMHgwYSA9IDIuNyBHYnBzCiAJICovCi0JZXh5bm9zX2RwX3JlYWRfYnl0ZV9m cm9tX2RwY2QoZHAsIERQX01BWF9MSU5LX1JBVEUsICZkYXRhKTsKKwlhbmFsb2dpeF9kcF9yZWFk X2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9NQVhfTElOS19SQVRFLCAmZGF0YSk7CiAJKmJhbmR3aWR0 aCA9IGRhdGE7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9nZXRfbWF4X3J4X2xhbmVfY291 bnQoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAorc3RhdGljIHZvaWQgYW5hbG9naXhfZHBf Z2V0X21heF9yeF9sYW5lX2NvdW50KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAogCQkJ CQl1OCAqbGFuZV9jb3VudCkKIHsKIAl1OCBkYXRhOwpAQCAtNjYwLDExICs2NDYsMTEgQEAgc3Rh dGljIHZvaWQgZXh5bm9zX2RwX2dldF9tYXhfcnhfbGFuZV9jb3VudChzdHJ1Y3QgZXh5bm9zX2Rw X2RldmljZSAqZHAsCiAJICogRm9yIERQIHJldi4xLjEsIE1heGltdW0gbnVtYmVyIG9mIE1haW4g TGluayBsYW5lcwogCSAqIDB4MDEgPSAxIGxhbmUsIDB4MDIgPSAyIGxhbmVzLCAweDA0ID0gNCBs YW5lcwogCSAqLwotCWV4eW5vc19kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKGRwLCBEUF9NQVhfTEFO RV9DT1VOVCwgJmRhdGEpOworCWFuYWxvZ2l4X2RwX3JlYWRfYnl0ZV9mcm9tX2RwY2QoZHAsIERQ X01BWF9MQU5FX0NPVU5ULCAmZGF0YSk7CiAJKmxhbmVfY291bnQgPSBEUENEX01BWF9MQU5FX0NP VU5UKGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfZHBfaW5pdF90cmFpbmluZyhzdHJ1 Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCitzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9pbml0X3Ry YWluaW5nKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAogCQkJZW51bSBsaW5rX2xhbmVf Y291bnRfdHlwZSBtYXhfbGFuZSwKIAkJCWVudW0gbGlua19yYXRlX3R5cGUgbWF4X3JhdGUpCiB7 CkBAIC02NzIsMTEgKzY1OCwxMSBAQCBzdGF0aWMgdm9pZCBleHlub3NfZHBfaW5pdF90cmFpbmlu ZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCiAJICogTUFDUk9fUlNUIG11c3QgYmUgYXBw bGllZCBhZnRlciB0aGUgUExMX0xPQ0sgdG8gYXZvaWQKIAkgKiB0aGUgRFAgaW50ZXIgcGFpciBz a2V3IGlzc3VlIGZvciBhdCBsZWFzdCAxMCB1cwogCSAqLwotCWV4eW5vc19kcF9yZXNldF9tYWNy byhkcCk7CisJYW5hbG9naXhfZHBfcmVzZXRfbWFjcm8oZHApOwogCiAJLyogSW5pdGlhbGl6ZSBi eSByZWFkaW5nIFJYJ3MgRFBDRCAqLwotCWV4eW5vc19kcF9nZXRfbWF4X3J4X2JhbmR3aWR0aChk cCwgJmRwLT5saW5rX3RyYWluLmxpbmtfcmF0ZSk7Ci0JZXh5bm9zX2RwX2dldF9tYXhfcnhfbGFu ZV9jb3VudChkcCwgJmRwLT5saW5rX3RyYWluLmxhbmVfY291bnQpOworCWFuYWxvZ2l4X2RwX2dl dF9tYXhfcnhfYmFuZHdpZHRoKGRwLCAmZHAtPmxpbmtfdHJhaW4ubGlua19yYXRlKTsKKwlhbmFs b2dpeF9kcF9nZXRfbWF4X3J4X2xhbmVfY291bnQoZHAsICZkcC0+bGlua190cmFpbi5sYW5lX2Nv dW50KTsKIAogCWlmICgoZHAtPmxpbmtfdHJhaW4ubGlua19yYXRlICE9IExJTktfUkFURV8xXzYy R0JQUykgJiYKIAkgICAoZHAtPmxpbmtfdHJhaW4ubGlua19yYXRlICE9IExJTktfUkFURV8yXzcw R0JQUykpIHsKQEAgLTY5OCwxMCArNjg0LDEwIEBAIHN0YXRpYyB2b2lkIGV4eW5vc19kcF9pbml0 X3RyYWluaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKIAkJZHAtPmxpbmtfdHJhaW4u bGlua19yYXRlID0gbWF4X3JhdGU7CiAKIAkvKiBBbGwgRFAgYW5hbG9nIG1vZHVsZSBwb3dlciB1 cCAqLwotCWV4eW5vc19kcF9zZXRfYW5hbG9nX3Bvd2VyX2Rvd24oZHAsIFBPV0VSX0FMTCwgMCk7 CisJYW5hbG9naXhfZHBfc2V0X2FuYWxvZ19wb3dlcl9kb3duKGRwLCBQT1dFUl9BTEwsIDApOwog fQogCi1zdGF0aWMgaW50IGV4eW5vc19kcF9zd19saW5rX3RyYWluaW5nKHN0cnVjdCBleHlub3Nf ZHBfZGV2aWNlICpkcCkKK3N0YXRpYyBpbnQgYW5hbG9naXhfZHBfc3dfbGlua190cmFpbmluZyhz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKIHsKIAlpbnQgcmV0dmFsID0gMCwgdHJhaW5p bmdfZmluaXNoZWQgPSAwOwogCkBAIC03MTEsMTcgKzY5NywxNyBAQCBzdGF0aWMgaW50IGV4eW5v c19kcF9zd19saW5rX3RyYWluaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKIAl3aGls ZSAoIXJldHZhbCAmJiAhdHJhaW5pbmdfZmluaXNoZWQpIHsKIAkJc3dpdGNoIChkcC0+bGlua190 cmFpbi5sdF9zdGF0ZSkgewogCQljYXNlIFNUQVJUOgotCQkJcmV0dmFsID0gZXh5bm9zX2RwX2xp bmtfc3RhcnQoZHApOworCQkJcmV0dmFsID0gYW5hbG9naXhfZHBfbGlua19zdGFydChkcCk7CiAJ CQlpZiAocmV0dmFsKQogCQkJCWRldl9lcnIoZHAtPmRldiwgIkxUIGxpbmsgc3RhcnQgZmFpbGVk IVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBDTE9DS19SRUNPVkVSWToKLQkJCXJldHZhbCA9IGV4 eW5vc19kcF9wcm9jZXNzX2Nsb2NrX3JlY292ZXJ5KGRwKTsKKwkJCXJldHZhbCA9IGFuYWxvZ2l4 X2RwX3Byb2Nlc3NfY2xvY2tfcmVjb3ZlcnkoZHApOwogCQkJaWYgKHJldHZhbCkKIAkJCQlkZXZf ZXJyKGRwLT5kZXYsICJMVCBDUiBmYWlsZWQhXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIEVRVUFM SVpFUl9UUkFJTklORzoKLQkJCXJldHZhbCA9IGV4eW5vc19kcF9wcm9jZXNzX2VxdWFsaXplcl90 cmFpbmluZyhkcCk7CisJCQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9wcm9jZXNzX2VxdWFsaXplcl90 cmFpbmluZyhkcCk7CiAJCQlpZiAocmV0dmFsKQogCQkJCWRldl9lcnIoZHAtPmRldiwgIkxUIEVR IGZhaWxlZCFcbiIpOwogCQkJYnJlYWs7CkBAIC03MzgsNyArNzI0LDcgQEAgc3RhdGljIGludCBl eHlub3NfZHBfc3dfbGlua190cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCiAJ cmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBleHlub3NfZHBfc2V0X2xpbmtfdHJhaW4o c3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAorc3RhdGljIGludCBhbmFsb2dpeF9kcF9zZXRf bGlua190cmFpbihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKIAkJCQl1MzIgY291bnQs CiAJCQkJdTMyIGJ3dHlwZSkKIHsKQEAgLTc0Niw4ICs3MzIsOCBAQCBzdGF0aWMgaW50IGV4eW5v c19kcF9zZXRfbGlua190cmFpbihzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCiAJaW50IHJl dHZhbDsKIAogCWZvciAoaSA9IDA7IGkgPCBEUF9USU1FT1VUX0xPT1BfQ09VTlQ7IGkrKykgewot CQlleHlub3NfZHBfaW5pdF90cmFpbmluZyhkcCwgY291bnQsIGJ3dHlwZSk7Ci0JCXJldHZhbCA9 IGV4eW5vc19kcF9zd19saW5rX3RyYWluaW5nKGRwKTsKKwkJYW5hbG9naXhfZHBfaW5pdF90cmFp bmluZyhkcCwgY291bnQsIGJ3dHlwZSk7CisJCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3N3X2xpbmtf dHJhaW5pbmcoZHApOwogCQlpZiAocmV0dmFsID09IDApCiAJCQlicmVhazsKIApAQCAtNzU3LDI0 ICs3NDMsMjQgQEAgc3RhdGljIGludCBleHlub3NfZHBfc2V0X2xpbmtfdHJhaW4oc3RydWN0IGV4 eW5vc19kcF9kZXZpY2UgKmRwLAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgZXh5 bm9zX2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCitzdGF0aWMg aW50IGFuYWxvZ2l4X2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpk cCkKIHsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgdGltZW91dF9sb29wID0gMDsKIAlpbnQgZG9u ZV9jb3VudCA9IDA7CiAKLQlleHlub3NfZHBfY29uZmlnX3ZpZGVvX3NsYXZlX21vZGUoZHApOwor CWFuYWxvZ2l4X2RwX2NvbmZpZ192aWRlb19zbGF2ZV9tb2RlKGRwKTsKIAotCWV4eW5vc19kcF9z ZXRfdmlkZW9fY29sb3JfZm9ybWF0KGRwKTsKKwlhbmFsb2dpeF9kcF9zZXRfdmlkZW9fY29sb3Jf Zm9ybWF0KGRwKTsKIAotCWlmIChleHlub3NfZHBfZ2V0X3BsbF9sb2NrX3N0YXR1cyhkcCkgPT0g UExMX1VOTE9DS0VEKSB7CisJaWYgKGFuYWxvZ2l4X2RwX2dldF9wbGxfbG9ja19zdGF0dXMoZHAp ID09IFBMTF9VTkxPQ0tFRCkgewogCQlkZXZfZXJyKGRwLT5kZXYsICJQTEwgaXMgbm90IGxvY2tl ZCB5ZXQuXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJZm9yICg7OykgewogCQl0aW1l b3V0X2xvb3ArKzsKLQkJaWYgKGV4eW5vc19kcF9pc19zbGF2ZV92aWRlb19zdHJlYW1fY2xvY2tf b24oZHApID09IDApCisJCWlmIChhbmFsb2dpeF9kcF9pc19zbGF2ZV92aWRlb19zdHJlYW1fY2xv Y2tfb24oZHApID09IDApCiAJCQlicmVhazsKIAkJaWYgKERQX1RJTUVPVVRfTE9PUF9DT1VOVCA8 IHRpbWVvdXRfbG9vcCkgewogCQkJZGV2X2VycihkcC0+ZGV2LCAiVGltZW91dCBvZiB2aWRlbyBz dHJlYW1jbGsgb2tcbiIpOwpAQCAtNzg1LDIyICs3NzEsMjIgQEAgc3RhdGljIGludCBleHlub3Nf ZHBfY29uZmlnX3ZpZGVvKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKIAl9CiAKIAkvKiBT ZXQgdG8gdXNlIHRoZSByZWdpc3RlciBjYWxjdWxhdGVkIE0vTiB2aWRlbyAqLwotCWV4eW5vc19k cF9zZXRfdmlkZW9fY3JfbW4oZHAsIENBTENVTEFURURfTSwgMCwgMCk7CisJYW5hbG9naXhfZHBf c2V0X3ZpZGVvX2NyX21uKGRwLCBDQUxDVUxBVEVEX00sIDAsIDApOwogCiAJLyogRm9yIHZpZGVv IGJpc3QsIFZpZGVvIHRpbWluZyBtdXN0IGJlIGdlbmVyYXRlZCBieSByZWdpc3RlciAqLwotCWV4 eW5vc19kcF9zZXRfdmlkZW9fdGltaW5nX21vZGUoZHAsIFZJREVPX1RJTUlOR19GUk9NX0NBUFRV UkUpOworCWFuYWxvZ2l4X2RwX3NldF92aWRlb190aW1pbmdfbW9kZShkcCwgVklERU9fVElNSU5H X0ZST01fQ0FQVFVSRSk7CiAKIAkvKiBEaXNhYmxlIHZpZGVvIG11dGUgKi8KLQlleHlub3NfZHBf ZW5hYmxlX3ZpZGVvX211dGUoZHAsIDApOworCWFuYWxvZ2l4X2RwX2VuYWJsZV92aWRlb19tdXRl KGRwLCAwKTsKIAogCS8qIENvbmZpZ3VyZSB2aWRlbyBzbGF2ZSBtb2RlICovCi0JZXh5bm9zX2Rw X2VuYWJsZV92aWRlb19tYXN0ZXIoZHAsIDApOworCWFuYWxvZ2l4X2RwX2VuYWJsZV92aWRlb19t YXN0ZXIoZHAsIDApOwogCiAJdGltZW91dF9sb29wID0gMDsKIAogCWZvciAoOzspIHsKIAkJdGlt ZW91dF9sb29wKys7Ci0JCWlmIChleHlub3NfZHBfaXNfdmlkZW9fc3RyZWFtX29uKGRwKSA9PSAw KSB7CisJCWlmIChhbmFsb2dpeF9kcF9pc192aWRlb19zdHJlYW1fb24oZHApID09IDApIHsKIAkJ CWRvbmVfY291bnQrKzsKIAkJCWlmIChkb25lX2NvdW50ID4gMTApCiAJCQkJYnJlYWs7CkBAIC04 MjEsNDcgKzgwNyw0NyBAQCBzdGF0aWMgaW50IGV4eW5vc19kcF9jb25maWdfdmlkZW8oc3RydWN0 IGV4eW5vc19kcF9kZXZpY2UgKmRwKQogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lk IGV4eW5vc19kcF9lbmFibGVfc2NyYW1ibGUoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLCBi b29sIGVuYWJsZSkKK3N0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV9zY3JhbWJsZShzdHJ1 Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCiB7CiAJdTggZGF0YTsKIAog CWlmIChlbmFibGUpIHsKLQkJZXh5bm9zX2RwX2VuYWJsZV9zY3JhbWJsaW5nKGRwKTsKKwkJYW5h bG9naXhfZHBfZW5hYmxlX3NjcmFtYmxpbmcoZHApOwogCi0JCWV4eW5vc19kcF9yZWFkX2J5dGVf ZnJvbV9kcGNkKGRwLAorCQlhbmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKGRwLAogCQkJ RFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCiAJCQkmZGF0YSk7Ci0JCWV4eW5vc19kcF93cml0ZV9i eXRlX3RvX2RwY2QoZHAsCisJCWFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVfdG9fZHBjZChkcCwKIAkJ CURQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAogCQkJKHU4KShkYXRhICYgfkRQX0xJTktfU0NSQU1C TElOR19ESVNBQkxFKSk7CiAJfSBlbHNlIHsKLQkJZXh5bm9zX2RwX2Rpc2FibGVfc2NyYW1ibGlu ZyhkcCk7CisJCWFuYWxvZ2l4X2RwX2Rpc2FibGVfc2NyYW1ibGluZyhkcCk7CiAKLQkJZXh5bm9z X2RwX3JlYWRfYnl0ZV9mcm9tX2RwY2QoZHAsCisJCWFuYWxvZ2l4X2RwX3JlYWRfYnl0ZV9mcm9t X2RwY2QoZHAsCiAJCQlEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKIAkJCSZkYXRhKTsKLQkJZXh5 bm9zX2RwX3dyaXRlX2J5dGVfdG9fZHBjZChkcCwKKwkJYW5hbG9naXhfZHBfd3JpdGVfYnl0ZV90 b19kcGNkKGRwLAogCQkJRFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsCiAJCQkodTgpKGRhdGEgfCBE UF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSkpOwogCX0KIH0KIAotc3RhdGljIGlycXJldHVybl90 IGV4eW5vc19kcF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCitzdGF0aWMgaXJxcmV0 dXJuX3QgYW5hbG9naXhfZHBfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQogewotCXN0 cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCA9IGFyZzsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2 aWNlICpkcCA9IGFyZzsKIAogCWVudW0gZHBfaXJxX3R5cGUgaXJxX3R5cGU7CiAKLQlpcnFfdHlw ZSA9IGV4eW5vc19kcF9nZXRfaXJxX3R5cGUoZHApOworCWlycV90eXBlID0gYW5hbG9naXhfZHBf Z2V0X2lycV90eXBlKGRwKTsKIAlzd2l0Y2ggKGlycV90eXBlKSB7CiAJY2FzZSBEUF9JUlFfVFlQ RV9IUF9DQUJMRV9JTjoKIAkJZGV2X2RiZyhkcC0+ZGV2LCAiUmVjZWl2ZWQgaXJxIC0gY2FibGUg aW5cbiIpOwogCQlzY2hlZHVsZV93b3JrKCZkcC0+aG90cGx1Z193b3JrKTsKLQkJZXh5bm9zX2Rw X2NsZWFyX2hvdHBsdWdfaW50ZXJydXB0cyhkcCk7CisJCWFuYWxvZ2l4X2RwX2NsZWFyX2hvdHBs dWdfaW50ZXJydXB0cyhkcCk7CiAJCWJyZWFrOwogCWNhc2UgRFBfSVJRX1RZUEVfSFBfQ0FCTEVf T1VUOgogCQlkZXZfZGJnKGRwLT5kZXYsICJSZWNlaXZlZCBpcnEgLSBjYWJsZSBvdXRcbiIpOwot CQlleHlub3NfZHBfY2xlYXJfaG90cGx1Z19pbnRlcnJ1cHRzKGRwKTsKKwkJYW5hbG9naXhfZHBf Y2xlYXJfaG90cGx1Z19pbnRlcnJ1cHRzKGRwKTsKIAkJYnJlYWs7CiAJY2FzZSBEUF9JUlFfVFlQ RV9IUF9DSEFOR0U6CiAJCS8qCkBAIC04NzAsNyArODU2LDcgQEAgc3RhdGljIGlycXJldHVybl90 IGV4eW5vc19kcF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCiAJCSAqIG9ubHkgaGFu ZGxlIGNhYmxlIGNoYW5nZXMuCiAJCSAqLwogCQlkZXZfZGJnKGRwLT5kZXYsICJSZWNlaXZlZCBp cnEgLSBob3RwbHVnIGNoYW5nZTsgaWdub3JpbmcuXG4iKTsKLQkJZXh5bm9zX2RwX2NsZWFyX2hv dHBsdWdfaW50ZXJydXB0cyhkcCk7CisJCWFuYWxvZ2l4X2RwX2NsZWFyX2hvdHBsdWdfaW50ZXJy dXB0cyhkcCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoZHAtPmRldiwgIlJlY2Vp dmVkIGlycSAtIHVua25vd24gdHlwZSFcbiIpOwpAQCAtODc5LDIxOCArODY1LDIwMyBAQCBzdGF0 aWMgaXJxcmV0dXJuX3QgZXh5bm9zX2RwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykK IAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9ob3RwbHVn KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGFuYWxvZ2l4X2RwX2hvdHBs dWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBleHlub3NfZHBfZGV2aWNl ICpkcDsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcDsKIAotCWRwID0gY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCBleHlub3NfZHBfZGV2aWNlLCBob3RwbHVnX3dvcmspOworCWRwID0g Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UsIGhvdHBsdWdfd29y ayk7CiAKIAlpZiAoZHAtPmRybV9kZXYpCiAJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkcC0+ ZHJtX2Rldik7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9jb21taXQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyKQorc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfY29tbWl0KHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwKQogewotCXN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCA9 IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CiAJaW50IHJldDsKIAogCS8qIEtlZXAgdGhlIHBhbmVs IGRpc2FibGVkIHdoaWxlIHdlIGNvbmZpZ3VyZSB2aWRlbyAqLwotCWlmIChkcC0+cGFuZWwpIHsK LQkJaWYgKGRybV9wYW5lbF9kaXNhYmxlKGRwLT5wYW5lbCkpCisJaWYgKGRwLT5wbGF0X2RhdGEt PnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfZGlzYWJsZShkcC0+cGxhdF9kYXRhLT5wYW5lbCkp CiAJCQlEUk1fRVJST1IoImZhaWxlZCB0byBkaXNhYmxlIHRoZSBwYW5lbFxuIik7CiAJfQogCi0J cmV0ID0gZXh5bm9zX2RwX2RldGVjdF9ocGQoZHApOworCXJldCA9IGFuYWxvZ2l4X2RwX2RldGVj dF9ocGQoZHApOwogCWlmIChyZXQpIHsKIAkJLyogQ2FibGUgaGFzIGJlZW4gZGlzY29ubmVjdGVk LCB3ZSdyZSBkb25lICovCiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBleHlub3NfZHBfaGFuZGxl X2VkaWQoZHApOworCXJldCA9IGFuYWxvZ2l4X2RwX2hhbmRsZV9lZGlkKGRwKTsKIAlpZiAocmV0 KSB7CiAJCWRldl9lcnIoZHAtPmRldiwgInVuYWJsZSB0byBoYW5kbGUgZWRpZFxuIik7CiAJCXJl dHVybjsKIAl9CiAKLQlyZXQgPSBleHlub3NfZHBfc2V0X2xpbmtfdHJhaW4oZHAsIGRwLT52aWRl b19pbmZvLT5sYW5lX2NvdW50LAorCXJldCA9IGFuYWxvZ2l4X2RwX3NldF9saW5rX3RyYWluKGRw LCBkcC0+dmlkZW9faW5mby0+bGFuZV9jb3VudCwKIAkJCQkJZHAtPnZpZGVvX2luZm8tPmxpbmtf cmF0ZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRwLT5kZXYsICJ1bmFibGUgdG8gZG8gbGlu ayB0cmFpblxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlleHlub3NfZHBfZW5hYmxlX3NjcmFtYmxl KGRwLCAxKTsKLQlleHlub3NfZHBfZW5hYmxlX3J4X3RvX2VuaGFuY2VkX21vZGUoZHAsIDEpOwot CWV4eW5vc19kcF9lbmFibGVfZW5oYW5jZWRfbW9kZShkcCwgMSk7CisJYW5hbG9naXhfZHBfZW5h YmxlX3NjcmFtYmxlKGRwLCAxKTsKKwlhbmFsb2dpeF9kcF9lbmFibGVfcnhfdG9fZW5oYW5jZWRf bW9kZShkcCwgMSk7CisJYW5hbG9naXhfZHBfZW5hYmxlX2VuaGFuY2VkX21vZGUoZHAsIDEpOwog Ci0JZXh5bm9zX2RwX3NldF9sYW5lX2NvdW50KGRwLCBkcC0+dmlkZW9faW5mby0+bGFuZV9jb3Vu dCk7Ci0JZXh5bm9zX2RwX3NldF9saW5rX2JhbmR3aWR0aChkcCwgZHAtPnZpZGVvX2luZm8tPmxp bmtfcmF0ZSk7CisJYW5hbG9naXhfZHBfc2V0X2xhbmVfY291bnQoZHAsIGRwLT52aWRlb19pbmZv LT5sYW5lX2NvdW50KTsKKwlhbmFsb2dpeF9kcF9zZXRfbGlua19iYW5kd2lkdGgoZHAsIGRwLT52 aWRlb19pbmZvLT5saW5rX3JhdGUpOwogCi0JZXh5bm9zX2RwX2luaXRfdmlkZW8oZHApOwotCXJl dCA9IGV4eW5vc19kcF9jb25maWdfdmlkZW8oZHApOworCWFuYWxvZ2l4X2RwX2luaXRfdmlkZW8o ZHApOworCXJldCA9IGFuYWxvZ2l4X2RwX2NvbmZpZ192aWRlbyhkcCk7CiAJaWYgKHJldCkKIAkJ ZGV2X2VycihkcC0+ZGV2LCAidW5hYmxlIHRvIGNvbmZpZyB2aWRlb1xuIik7CiAKIAkvKiBTYWZl IHRvIGVuYWJsZSB0aGUgcGFuZWwgbm93ICovCi0JaWYgKGRwLT5wYW5lbCkgewotCQlpZiAoZHJt X3BhbmVsX2VuYWJsZShkcC0+cGFuZWwpKQorCWlmIChkcC0+cGxhdF9kYXRhLT5wYW5lbCkgewor CQlpZiAoZHJtX3BhbmVsX2VuYWJsZShkcC0+cGxhdF9kYXRhLT5wYW5lbCkpCiAJCQlEUk1fRVJS T1IoImZhaWxlZCB0byBlbmFibGUgdGhlIHBhbmVsXG4iKTsKIAl9CiAKIAkvKiBFbmFibGUgdmlk ZW8gKi8KLQlleHlub3NfZHBfc3RhcnRfdmlkZW8oZHApOworCWFuYWxvZ2l4X2RwX3N0YXJ0X3Zp ZGVvKGRwKTsKIH0KIAotc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgZXh5bm9zX2Rw X2RldGVjdCgKLQkJCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNl KQoraW50IGFuYWxvZ2l4X2RwX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQogewotCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKLX0KKwlzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IHRvX2RwKGNvbm5lY3Rvcik7CisJaW50IG51bV9tb2Rl cyA9IDA7CiAKLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQotewotCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj b25uZWN0b3IpOwotCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwotfQorCWlmIChk cC0+cGxhdF9kYXRhLT5wYW5lbCkKKwkJbnVtX21vZGVzICs9IGRybV9wYW5lbF9nZXRfbW9kZXMo ZHAtPnBsYXRfZGF0YS0+cGFuZWwpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0 b3JfZnVuY3MgZXh5bm9zX2RwX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKLQkuZHBtcyA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAotCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9i ZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAotCS5kZXRlY3QgPSBleHlub3NfZHBfZGV0ZWN0LAot CS5kZXN0cm95ID0gZXh5bm9zX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAotCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKLQkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCi0JLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUs Ci19OwotCi1zdGF0aWMgaW50IGV4eW5vc19kcF9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvcikKLXsKLQlzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAgPSBjdHhfZnJv bV9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsK LQotCWlmIChkcC0+cGFuZWwpCi0JCXJldHVybiBkcm1fcGFuZWxfZ2V0X21vZGVzKGRwLT5wYW5l bCk7Ci0KLQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKLQlpZiAoIW1v ZGUpIHsKLQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRpc3BsYXkgbW9kZS5c biIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmlkZW9tb2Rl KCZkcC0+cHJpdi52bSwgbW9kZSk7Ci0JbW9kZS0+d2lkdGhfbW0gPSBkcC0+cHJpdi53aWR0aF9t bTsKLQltb2RlLT5oZWlnaHRfbW0gPSBkcC0+cHJpdi5oZWlnaHRfbW07Ci0JY29ubmVjdG9yLT5k aXNwbGF5X2luZm8ud2lkdGhfbW0gPSBtb2RlLT53aWR0aF9tbTsKLQljb25uZWN0b3ItPmRpc3Bs YXlfaW5mby5oZWlnaHRfbW0gPSBtb2RlLT5oZWlnaHRfbW07Ci0KLQltb2RlLT50eXBlID0gRFJN X01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKLQlkcm1fbW9kZV9z ZXRfbmFtZShtb2RlKTsKLQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJ aWYgKGRwLT5wbGF0X2RhdGEtPmdldF9tb2RlcykKKwkJbnVtX21vZGVzICs9IGRwLT5wbGF0X2Rh dGEtPmdldF9tb2RlcyhkcC0+cGxhdF9kYXRhKTsKIAotCXJldHVybiAxOworCXJldHVybiBudW1f bW9kZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKmV4eW5vc19kcF9iZXN0X2Vu Y29kZXIoCi0JCQlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQorc3RhdGljIHN0cnVj dCBkcm1fZW5jb2RlciAqCithbmFsb2dpeF9kcF9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAgPSBjdHhf ZnJvbV9jb25uZWN0b3IoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpk cCA9IHRvX2RwKGNvbm5lY3Rvcik7CiAKLQlyZXR1cm4gJmRwLT5lbmNvZGVyOworCXJldHVybiBk cC0+ZW5jb2RlcjsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBl cl9mdW5jcyBleHlub3NfZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKLQkuZ2V0X21vZGVz ID0gZXh5bm9zX2RwX2dldF9tb2RlcywKLQkuYmVzdF9lbmNvZGVyID0gZXh5bm9zX2RwX2Jlc3Rf ZW5jb2RlciwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3Mg YW5hbG9naXhfZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzID0gYW5h bG9naXhfZHBfZ2V0X21vZGVzLAorCS5iZXN0X2VuY29kZXIgPSBhbmFsb2dpeF9kcF9iZXN0X2Vu Y29kZXIsCiB9OwogCi0vKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnJpZGdlcyBhdHRhY2hlZCAq Lwotc3RhdGljIGludCBleHlub3NfZHJtX2F0dGFjaF9sY2RfYnJpZGdlKHN0cnVjdCBleHlub3Nf ZHBfZGV2aWNlICpkcCwKLQkJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cworYW5hbG9naXhfZHBfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCiB7Ci0JaW50IHJldDsKLQotCWVuY29kZXItPmJyaWRn ZS0+bmV4dCA9IGRwLT5wdG5fYnJpZGdlOwotCWRwLT5wdG5fYnJpZGdlLT5lbmNvZGVyID0gZW5j b2RlcjsKLQlyZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLT5kZXYsIGRwLT5wdG5fYnJp ZGdlKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2Ug dG8gZHJtXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNf Y29ubmVjdGVkOworfQogCi0JcmV0dXJuIDA7CitzdGF0aWMgdm9pZCBhbmFsb2dpeF9kcF9jb25u ZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9j b25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cChj b25uZWN0b3IpOwogfQogCi1zdGF0aWMgaW50IGV4eW5vc19kcF9icmlkZ2VfYXR0YWNoKHN0cnVj dCBkcm1fYnJpZGdlICpicmlkZ2UpCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jf ZnVuY3MgYW5hbG9naXhfZHBfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21p Y19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2Jl X3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRldGVjdCA9IGFuYWxvZ2l4X2RwX2RldGVjdCwK KwkuZGVzdHJveSA9IGFuYWxvZ2l4X2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5yZXNldCA9IGRy bV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21p Y19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3Rh dGUsCit9OworCitzdGF0aWMgaW50IGFuYWxvZ2l4X2RwX2JyaWRnZV9hdHRhY2goc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSkKIHsKLQlzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAgPSBicmlk Z2UtPmRyaXZlcl9wcml2YXRlOwotCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ ZW5jb2RlcjsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IGJyaWRnZS0+ZHJpdmVy X3ByaXZhdGU7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gZHAtPmVuY29kZXI7CiAJ c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZkcC0+Y29ubmVjdG9yOwogCWludCBy ZXQ7CiAKLQkvKiBQcmUtZW1wdCBEUCBjb25uZWN0b3IgY3JlYXRpb24gaWYgdGhlcmUncyBhIGJy aWRnZSAqLwotCWlmIChkcC0+cHRuX2JyaWRnZSkgewotCQlyZXQgPSBleHlub3NfZHJtX2F0dGFj aF9sY2RfYnJpZGdlKGRwLCBlbmNvZGVyKTsKLQkJaWYgKCFyZXQpCi0JCQlyZXR1cm4gMDsKKwlp ZiAoIWJyaWRnZS0+ZW5jb2RlcikgeworCQlEUk1fRVJST1IoIlBhcmVudCBlbmNvZGVyIG9iamVj dCBub3QgZm91bmQiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJY29ubmVjdG9yLT5wb2xs ZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwogCiAJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0 KGRwLT5kcm1fZGV2LCBjb25uZWN0b3IsCi0JCQkmZXh5bm9zX2RwX2Nvbm5lY3Rvcl9mdW5jcywg RFJNX01PREVfQ09OTkVDVE9SX2VEUCk7CisJCQkJICZhbmFsb2dpeF9kcF9jb25uZWN0b3JfZnVu Y3MsCisJCQkJIERSTV9NT0RFX0NPTk5FQ1RPUl9lRFApOwogCWlmIChyZXQpIHsKIAkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIpOwogCQlyZXR1 cm4gcmV0OwogCX0KIAotCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsICZleHlu b3NfZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7Ci0JZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihj b25uZWN0b3IpOworCWRybV9jb25uZWN0b3JfaGVscGVyX2FkZChjb25uZWN0b3IsCisJCQkJICZh bmFsb2dpeF9kcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKIAlkcm1fbW9kZV9jb25uZWN0b3Jf YXR0YWNoX2VuY29kZXIoY29ubmVjdG9yLCBlbmNvZGVyKTsKIAotCWlmIChkcC0+cGFuZWwpCi0J CXJldCA9IGRybV9wYW5lbF9hdHRhY2goZHAtPnBhbmVsLCAmZHAtPmNvbm5lY3Rvcik7CisJLyoK KwkgKiBOT1RFOiB0aGUgY29ubmVjdG9yIHJlZ2lzdHJhdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiBh bmFsb2dpeAorCSAqIHBsYXRmb3JtIGRyaXZlciwgdGhhdCB0byBzYXkgY29ubmVjdG9yIHdvdWxk IGJlIGV4aXN0IGFmdGVyCisJICogcGxhdF9kYXRhLT5hdHRjaCByZXR1cm4sIHRoYXQncyB3aHkg d2UgcmVjb3JkIHRoZSBjb25uZWN0b3IKKwkgKiBwb2ludCBhZnRlciBwbGF0IGF0dGFjaGVkLgor CSAqLworCSBpZiAoZHAtPnBsYXRfZGF0YS0+YXR0YWNoKSB7CisJCSByZXQgPSBkcC0+cGxhdF9k YXRhLT5hdHRhY2goZHAtPnBsYXRfZGF0YSwgYnJpZGdlLCBjb25uZWN0b3IpOworCQkgaWYgKHJl dCkgeworCQkJIERSTV9FUlJPUigiRmFpbGVkIGF0IHBsYXRmb3JtIGF0dGNoIGZ1bmNcbiIpOwor CQkJIHJldHVybiByZXQ7CisJCSB9CisJfQogCi0JcmV0dXJuIHJldDsKKwlpZiAoZHAtPnBsYXRf ZGF0YS0+cGFuZWwpIHsKKwkJcmV0ID0gZHJtX3BhbmVsX2F0dGFjaChkcC0+cGxhdF9kYXRhLT5w YW5lbCwgJmRwLT5jb25uZWN0b3IpOworCQlpZiAocmV0KSB7CisJCQlEUk1fRVJST1IoIkZhaWxl ZCB0byBhdHRhY2ggcGFuZWxcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVy biAwOwogfQogCi1zdGF0aWMgdm9pZCBleHlub3NfZHBfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQorc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJpZGdlX2VuYWJsZShz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQogewotCXN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpk cCA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Ci0Jc3RydWN0IGV4eW5vc19kcm1fY3J0YyAqY3J0 YyA9IGRwX3RvX2NydGMoZHApOworCXN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwID0gYnJp ZGdlLT5kcml2ZXJfcHJpdmF0ZTsKIAogCWlmIChkcC0+ZHBtc19tb2RlID09IERSTV9NT0RFX0RQ TVNfT04pCiAJCXJldHVybjsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZHAtPmRldik7CiAKLQlp ZiAoZHAtPnBhbmVsKSB7Ci0JCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkcC0+cGFuZWwpKSB7CisJ aWYgKGRwLT5wbGF0X2RhdGEtPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfcHJlcGFyZShkcC0+ cGxhdF9kYXRhLT5wYW5lbCkpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIHRoZSBw YW5lbFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQlpZiAoY3J0Yy0+b3BzLT5jbG9ja19l bmFibGUpCi0JCWNydGMtPm9wcy0+Y2xvY2tfZW5hYmxlKGRwX3RvX2NydGMoZHApLCB0cnVlKTsK KwlpZiAoZHAtPnBsYXRfZGF0YS0+cG93ZXJfb24pCisJCWRwLT5wbGF0X2RhdGEtPnBvd2VyX29u KGRwLT5wbGF0X2RhdGEpOwogCiAJcGh5X3Bvd2VyX29uKGRwLT5waHkpOwotCWV4eW5vc19kcF9p bml0X2RwKGRwKTsKKwlhbmFsb2dpeF9kcF9pbml0X2RwKGRwKTsKIAllbmFibGVfaXJxKGRwLT5p cnEpOwotCWV4eW5vc19kcF9jb21taXQoJmRwLT5lbmNvZGVyKTsKKwlhbmFsb2dpeF9kcF9jb21t aXQoZHApOwogCiAJZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNfT047CiB9CiAKLXN0YXRp YyB2b2lkIGV4eW5vc19kcF9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQorc3RhdGljIHZvaWQgYW5hbG9naXhfZHBfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKIHsKLQlzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAgPSBicmlkZ2UtPmRy aXZlcl9wcml2YXRlOwotCXN0cnVjdCBleHlub3NfZHJtX2NydGMgKmNydGMgPSBkcF90b19jcnRj KGRwKTsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IGJyaWRnZS0+ZHJpdmVyX3By aXZhdGU7CiAKIAlpZiAoZHAtPmRwbXNfbW9kZSAhPSBEUk1fTU9ERV9EUE1TX09OKQogCQlyZXR1 cm47CiAKLQlpZiAoZHAtPnBhbmVsKSB7Ci0JCWlmIChkcm1fcGFuZWxfZGlzYWJsZShkcC0+cGFu ZWwpKSB7CisJaWYgKGRwLT5wbGF0X2RhdGEtPnBhbmVsKSB7CisJCWlmIChkcm1fcGFuZWxfZGlz YWJsZShkcC0+cGxhdF9kYXRhLT5wYW5lbCkpIHsKIAkJCURSTV9FUlJPUigiZmFpbGVkIHRvIGRp c2FibGUgdGhlIHBhbmVsXG4iKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMTEwMCwxMSArMTA3MSwx MSBAQCBzdGF0aWMgdm9pZCBleHlub3NfZHBfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKIAlmbHVzaF93b3JrKCZkcC0+aG90cGx1Z193b3JrKTsKIAlwaHlfcG93ZXJf b2ZmKGRwLT5waHkpOwogCi0JaWYgKGNydGMtPm9wcy0+Y2xvY2tfZW5hYmxlKQotCQljcnRjLT5v cHMtPmNsb2NrX2VuYWJsZShkcF90b19jcnRjKGRwKSwgZmFsc2UpOworCWlmIChkcC0+cGxhdF9k YXRhLT5wb3dlcl9vZmYpCisJCWRwLT5wbGF0X2RhdGEtPnBvd2VyX29mZihkcC0+cGxhdF9kYXRh KTsKIAotCWlmIChkcC0+cGFuZWwpIHsKLQkJaWYgKGRybV9wYW5lbF91bnByZXBhcmUoZHAtPnBh bmVsKSkKKwlpZiAoZHAtPnBsYXRfZGF0YS0+cGFuZWwpIHsKKwkJaWYgKGRybV9wYW5lbF91bnBy ZXBhcmUoZHAtPnBsYXRfZGF0YS0+cGFuZWwpKQogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gdHVy bm9mZiB0aGUgcGFuZWxcbiIpOwogCX0KIApAQCAtMTExMywyMyArMTA4NCwyMiBAQCBzdGF0aWMg dm9pZCBleHlub3NfZHBfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkK IAlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CiB9CiAKLXN0YXRpYyB2b2lkIGV4 eW5vc19kcF9icmlkZ2Vfbm9wKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCitzdGF0aWMgdm9p ZCBhbmFsb2dpeF9kcF9icmlkZ2Vfbm9wKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCiB7CiAJ LyogZG8gbm90aGluZyAqLwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVu Y3MgZXh5bm9zX2RwX2JyaWRnZV9mdW5jcyA9IHsKLQkuZW5hYmxlID0gZXh5bm9zX2RwX2JyaWRn ZV9lbmFibGUsCi0JLmRpc2FibGUgPSBleHlub3NfZHBfYnJpZGdlX2Rpc2FibGUsCi0JLnByZV9l bmFibGUgPSBleHlub3NfZHBfYnJpZGdlX25vcCwKLQkucG9zdF9kaXNhYmxlID0gZXh5bm9zX2Rw X2JyaWRnZV9ub3AsCi0JLmF0dGFjaCA9IGV4eW5vc19kcF9icmlkZ2VfYXR0YWNoLAorc3RhdGlj IGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIGFuYWxvZ2l4X2RwX2JyaWRnZV9mdW5jcyA9 IHsKKwkuZW5hYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGFu YWxvZ2l4X2RwX2JyaWRnZV9kaXNhYmxlLAorCS5wcmVfZW5hYmxlID0gYW5hbG9naXhfZHBfYnJp ZGdlX25vcCwKKwkucG9zdF9kaXNhYmxlID0gYW5hbG9naXhfZHBfYnJpZGdlX25vcCwKKwkuYXR0 YWNoID0gYW5hbG9naXhfZHBfYnJpZGdlX2F0dGFjaCwKIH07CiAKLXN0YXRpYyBpbnQgZXh5bm9z X2RwX2NyZWF0ZV9jb25uZWN0b3Ioc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQorc3RhdGlj IGludCBhbmFsb2dpeF9kcF9jcmVhdGVfYnJpZGdlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2 LAorCQkJCSAgICAgc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCiB7Ci0Jc3RydWN0IGV4 eW5vc19kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90b19kcChlbmNvZGVyKTsKLQlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtX2RldiA9IGRwLT5kcm1fZGV2OwogCXN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2U7CiAJaW50IHJldDsKIApAQCAtMTE0MSwxMCArMTExMSwxMCBAQCBzdGF0aWMgaW50IGV4eW5v c19kcF9jcmVhdGVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAogCWRw LT5icmlkZ2UgPSBicmlkZ2U7CiAKLQllbmNvZGVyLT5icmlkZ2UgPSBicmlkZ2U7CisJZHAtPmVu Y29kZXItPmJyaWRnZSA9IGJyaWRnZTsKIAlicmlkZ2UtPmRyaXZlcl9wcml2YXRlID0gZHA7Ci0J YnJpZGdlLT5lbmNvZGVyID0gZW5jb2RlcjsKLQlicmlkZ2UtPmZ1bmNzID0gJmV4eW5vc19kcF9i cmlkZ2VfZnVuY3M7CisJYnJpZGdlLT5lbmNvZGVyID0gZHAtPmVuY29kZXI7CisJYnJpZGdlLT5m dW5jcyA9ICZhbmFsb2dpeF9kcF9icmlkZ2VfZnVuY3M7CiAKIAlyZXQgPSBkcm1fYnJpZGdlX2F0 dGFjaChkcm1fZGV2LCBicmlkZ2UpOwogCWlmIChyZXQpIHsKQEAgLTExNTUsMzkgKzExMjUsNyBA QCBzdGF0aWMgaW50IGV4eW5vc19kcF9jcmVhdGVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZW5jb2Rl ciAqZW5jb2RlcikKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGJvb2wgZXh5bm9zX2RwX21vZGVf Zml4dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAotCQkJCSBjb25zdCBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwKLQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz dGVkX21vZGUpCi17Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9t b2RlX3NldChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCi0JCQkgICAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUsCi0JCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg KmFkanVzdGVkX21vZGUpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIGV4eW5vc19kcF9lbmFibGUoc3Ry dWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQotewotfQotCi1zdGF0aWMgdm9pZCBleHlub3NfZHBf ZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCi17Ci19Ci0KLXN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIGV4eW5vc19kcF9lbmNvZGVyX2hlbHBl cl9mdW5jcyA9IHsKLQkubW9kZV9maXh1cCA9IGV4eW5vc19kcF9tb2RlX2ZpeHVwLAotCS5tb2Rl X3NldCA9IGV4eW5vc19kcF9tb2RlX3NldCwKLQkuZW5hYmxlID0gZXh5bm9zX2RwX2VuYWJsZSwK LQkuZGlzYWJsZSA9IGV4eW5vc19kcF9kaXNhYmxlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fZW5jb2Rlcl9mdW5jcyBleHlub3NfZHBfZW5jb2Rlcl9mdW5jcyA9IHsKLQkuZGVzdHJv eSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCi19OwotCi1zdGF0aWMgc3RydWN0IHZpZGVvX2luZm8g KmV4eW5vc19kcF9kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgc3Ry dWN0IHZpZGVvX2luZm8gKmFuYWxvZ2l4X2RwX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBkZXZpY2Ug KmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwX25vZGUgPSBkZXYtPm9mX25vZGU7CiAJ c3RydWN0IHZpZGVvX2luZm8gKmRwX3ZpZGVvX2NvbmZpZzsKQEAgLTEyNDUsMzMgKzExODMsMzcg QEAgc3RhdGljIHN0cnVjdCB2aWRlb19pbmZvICpleHlub3NfZHBfZHRfcGFyc2VfcGRhdGEoc3Ry dWN0IGRldmljZSAqZGV2KQogCXJldHVybiBkcF92aWRlb19jb25maWc7CiB9CiAKLXN0YXRpYyBp bnQgZXh5bm9zX2RwX2R0X3BhcnNlX3BhbmVsKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkK K2ludCBhbmFsb2dpeF9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRybV9kZXZp Y2UgKmRybV9kZXYsCisJCSAgICAgc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRfZGF0YSAqcGxhdF9k YXRhKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZp Y2UoZGV2KTsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcDsKKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgaXJxX2ZsYWdzOwogCWludCByZXQ7CiAKLQlyZXQgPSBv Zl9nZXRfdmlkZW9tb2RlKGRwLT5kZXYtPm9mX25vZGUsICZkcC0+cHJpdi52bSwKLQkJCU9GX1VT RV9OQVRJVkVfTU9ERSk7Ci0JaWYgKHJldCkgewotCQlEUk1fRVJST1IoImZhaWxlZDogb2ZfZ2V0 X3ZpZGVvbW9kZSgpIDogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7CisJaWYgKCFwbGF0X2Rh dGEpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkZWQgaW5wdXQgcGxhdF9kYXRhXG4iKTsKKwkJ cmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiAwOwotfQogCi1zdGF0aWMgaW50IGV4eW5vc19k cF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpk YXRhKQotewotCXN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2Uo ZGV2KTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7Ci0Jc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyID0gJmRwLT5lbmNvZGVyOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwot CXVuc2lnbmVkIGludCBpcnFfZmxhZ3M7Ci0JaW50IHBpcGUsIHJldCA9IDA7CisJZHAgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSksIEdGUF9LRVJO RUwpOworCWlmICghZHApCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRl diwgZHApOwogCiAJZHAtPmRldiA9ICZwZGV2LT5kZXY7CiAJZHAtPmRwbXNfbW9kZSA9IERSTV9N T0RFX0RQTVNfT0ZGOwogCi0JZHAtPnZpZGVvX2luZm8gPSBleHlub3NfZHBfZHRfcGFyc2VfcGRh dGEoJnBkZXYtPmRldik7CisJLyoKKwkgKiBwbGF0Zm9ybSBkcCBkcml2ZXIgbmVlZCBjb250YWlu b3Jfb2YgdGhlIHBsYXRfZGF0YSB0byBnZXQKKwkgKiB0aGUgZHJpdmVyIHByaXZhdGUgZGF0YSwg c28gd2UgbmVlZCB0byBzdG9yZSB0aGUgcG9pbnQgb2YKKwkgKiBwbGF0X2RhdGEsIG5vdCB0aGUg Y29udGV4dCBvZiBwbGF0X2RhdGEuCisJICovCisJZHAtPnBsYXRfZGF0YSA9IHBsYXRfZGF0YTsK KworCWRwLT52aWRlb19pbmZvID0gYW5hbG9naXhfZHBfZHRfcGFyc2VfcGRhdGEoJnBkZXYtPmRl dik7CiAJaWYgKElTX0VSUihkcC0+dmlkZW9faW5mbykpCiAJCXJldHVybiBQVFJfRVJSKGRwLT52 aWRlb19pbmZvKTsKIApAQCAtMTI5MSwxMiArMTIzMyw2IEBAIHN0YXRpYyBpbnQgZXh5bm9zX2Rw X2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsIHZvaWQgKmRh dGEpCiAJCX0KIAl9CiAKLQlpZiAoIWRwLT5wYW5lbCAmJiAhZHAtPnB0bl9icmlkZ2UpIHsKLQkJ cmV0ID0gZXh5bm9zX2RwX2R0X3BhcnNlX3BhbmVsKGRwKTsKLQkJaWYgKHJldCkKLQkJCXJldHVy biByZXQ7Ci0JfQotCiAJZHAtPmNsb2NrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJkcCIp OwogCWlmIChJU19FUlIoZHAtPmNsb2NrKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWls ZWQgdG8gZ2V0IGNsb2NrXG4iKTsKQEAgLTEzMTEsNyArMTI0NywxMCBAQCBzdGF0aWMgaW50IGV4 eW5vc19kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2 b2lkICpkYXRhKQogCWlmIChJU19FUlIoZHAtPnJlZ19iYXNlKSkKIAkJcmV0dXJuIFBUUl9FUlIo ZHAtPnJlZ19iYXNlKTsKIAotCWRwLT5ocGRfZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKGRldi0+ b2Zfbm9kZSwgInNhbXN1bmcsaHBkLWdwaW8iLCAwKTsKKwlkcC0+aHBkX2dwaW8gPSBvZl9nZXRf bmFtZWRfZ3BpbyhkZXYtPm9mX25vZGUsICJocGQtZ3Bpb3MiLCAwKTsKKwlpZiAoIWdwaW9faXNf dmFsaWQoZHAtPmhwZF9ncGlvKSkKKwkJZHAtPmhwZF9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8o ZGV2LT5vZl9ub2RlLAorCQkJCQkJICJzYW1zdW5nLGhwZC1ncGlvIiwgMCk7CiAKIAlpZiAoZ3Bp b19pc192YWxpZChkcC0+aHBkX2dwaW8pKSB7CiAJCS8qCkBAIC0xMzQwLDE0MyArMTI3OSw2MCBA QCBzdGF0aWMgaW50IGV4eW5vc19kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRl dmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKQogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlJTklU X1dPUksoJmRwLT5ob3RwbHVnX3dvcmssIGV4eW5vc19kcF9ob3RwbHVnKTsKKwlJTklUX1dPUkso JmRwLT5ob3RwbHVnX3dvcmssIGFuYWxvZ2l4X2RwX2hvdHBsdWcpOwogCi0JcmV0ID0gZGV2bV9y ZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBkcC0+aXJxLCBleHlub3NfZHBfaXJxX2hhbmRsZXIsCi0J CQlpcnFfZmxhZ3MsICJleHlub3MtZHAiLCBkcCk7CisJcG1fcnVudGltZV9lbmFibGUoZGV2KTsK KworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgZHAtPmlycSwgYW5hbG9naXhf ZHBfaXJxX2hhbmRsZXIsCisJCQlpcnFfZmxhZ3MsICJhbmFsb2dpeC1kcCIsIGRwKTsKIAlpZiAo cmV0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IGlycVxuIik7 Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX2Rpc2FibGVfcG1fcnVudGltZTsKIAl9CiAJZGlz YWJsZV9pcnEoZHAtPmlycSk7CiAKIAlkcC0+ZHJtX2RldiA9IGRybV9kZXY7CisJZHAtPmVuY29k ZXIgPSBkcC0+cGxhdF9kYXRhLT5lbmNvZGVyOwogCi0JcGlwZSA9IGV4eW5vc19kcm1fY3J0Y19n ZXRfcGlwZV9mcm9tX3R5cGUoZHJtX2RldiwKLQkJCQkJCSAgRVhZTk9TX0RJU1BMQVlfVFlQRV9M Q0QpOwotCWlmIChwaXBlIDwgMCkKLQkJcmV0dXJuIHBpcGU7Ci0KLQllbmNvZGVyLT5wb3NzaWJs ZV9jcnRjcyA9IDEgPDwgcGlwZTsKLQotCURSTV9ERUJVR19LTVMoInBvc3NpYmxlX2NydGNzID0g MHgleFxuIiwgZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MpOwotCi0JZHJtX2VuY29kZXJfaW5pdChk cm1fZGV2LCBlbmNvZGVyLCAmZXh5bm9zX2RwX2VuY29kZXJfZnVuY3MsCi0JCQkgRFJNX01PREVf RU5DT0RFUl9UTURTLCBOVUxMKTsKLQotCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQoZW5jb2Rlciwg JmV4eW5vc19kcF9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7Ci0KLQlyZXQgPSBleHlub3NfZHBfY3Jl YXRlX2Nvbm5lY3RvcihlbmNvZGVyKTsKKwlyZXQgPSBhbmFsb2dpeF9kcF9jcmVhdGVfYnJpZGdl KGRybV9kZXYsIGRwKTsKIAlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0 ZSBjb25uZWN0b3IgcmV0ID0gJWRcbiIsIHJldCk7Ci0JCWRybV9lbmNvZGVyX2NsZWFudXAoZW5j b2Rlcik7Ci0JCXJldHVybiByZXQ7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBicmlk Z2UgKCVkKVxuIiwgcmV0KTsKKwkJZHJtX2VuY29kZXJfY2xlYW51cChkcC0+ZW5jb2Rlcik7CisJ CWdvdG8gZXJyX2Rpc2FibGVfcG1fcnVudGltZTsKIAl9CiAKIAlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHZvaWQgZXh5bm9zX2RwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZp Y2UgKm1hc3RlciwKLQkJCQl2b2lkICpkYXRhKQotewotCXN0cnVjdCBleHlub3NfZHBfZGV2aWNl ICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JZXh5bm9zX2RwX2Rpc2FibGUoJmRwLT5l bmNvZGVyKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGV4eW5vc19k cF9vcHMgPSB7Ci0JLmJpbmQJPSBleHlub3NfZHBfYmluZCwKLQkudW5iaW5kCT0gZXh5bm9zX2Rw X3VuYmluZCwKLX07Ci0KLXN0YXRpYyBpbnQgZXh5bm9zX2RwX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKLQlz dHJ1Y3QgZGV2aWNlX25vZGUgKnBhbmVsX25vZGUgPSBOVUxMLCAqYnJpZGdlX25vZGUsICplbmRw b2ludCA9IE5VTEw7Ci0Jc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwOwotCWludCByZXQ7Ci0K LQlkcCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UpLAotCQkJCUdGUF9LRVJORUwpOwotCWlmICghZHApCi0JCXJldHVybiAtRU5PTUVNOwot Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHApOwotCi0JLyogVGhpcyBpcyBmb3IgdGhl IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCi0JcGFuZWxfbm9kZSA9IG9mX3BhcnNlX3BoYW5k bGUoZGV2LT5vZl9ub2RlLCAicGFuZWwiLCAwKTsKLQlpZiAocGFuZWxfbm9kZSkgewotCQlkcC0+ cGFuZWwgPSBvZl9kcm1fZmluZF9wYW5lbChwYW5lbF9ub2RlKTsKLQkJb2Zfbm9kZV9wdXQocGFu ZWxfbm9kZSk7Ci0JCWlmICghZHAtPnBhbmVsKQotCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0J fSBlbHNlIHsKLQkJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9m X25vZGUsIE5VTEwpOwotCQlpZiAoZW5kcG9pbnQpIHsKLQkJCXBhbmVsX25vZGUgPSBvZl9ncmFw aF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsKLQkJCWlmIChwYW5lbF9ub2RlKSB7 Ci0JCQkJZHAtPnBhbmVsID0gb2ZfZHJtX2ZpbmRfcGFuZWwocGFuZWxfbm9kZSk7Ci0JCQkJb2Zf bm9kZV9wdXQocGFuZWxfbm9kZSk7Ci0JCQkJaWYgKCFkcC0+cGFuZWwpCi0JCQkJCXJldHVybiAt RVBST0JFX0RFRkVSOwotCQkJfSBlbHNlIHsKLQkJCQlEUk1fRVJST1IoIm5vIHBvcnQgbm9kZSBm b3IgcGFuZWwgZGV2aWNlLlxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9 Ci0KLQlpZiAoZW5kcG9pbnQpCi0JCWdvdG8gb3V0OwotCi0JZW5kcG9pbnQgPSBvZl9ncmFwaF9n ZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOwotCWlmIChlbmRwb2ludCkgewot CQlicmlkZ2Vfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZW5kcG9pbnQp OwotCQlpZiAoYnJpZGdlX25vZGUpIHsKLQkJCWRwLT5wdG5fYnJpZGdlID0gb2ZfZHJtX2ZpbmRf YnJpZGdlKGJyaWRnZV9ub2RlKTsKLQkJCW9mX25vZGVfcHV0KGJyaWRnZV9ub2RlKTsKLQkJCWlm ICghZHAtPnB0bl9icmlkZ2UpCi0JCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0JCX0gZWxzZQot CQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0JfQotCi1vdXQ6Ci0JcG1fcnVudGltZV9lbmFibGUo ZGV2KTsKLQotCXJldCA9IGNvbXBvbmVudF9hZGQoJnBkZXYtPmRldiwgJmV4eW5vc19kcF9vcHMp OwotCWlmIChyZXQpCi0JCWdvdG8gZXJyX2Rpc2FibGVfcG1fcnVudGltZTsKLQotCXJldHVybiBy ZXQ7CiAKIGVycl9kaXNhYmxlX3BtX3J1bnRpbWU6CiAJcG1fcnVudGltZV9kaXNhYmxlKGRldik7 CiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoYW5hbG9naXhfZHBfYmluZCk7 CiAKLXN0YXRpYyBpbnQgZXh5bm9zX2RwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQordm9pZCBhbmFsb2dpeF9kcF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qg ZGV2aWNlICptYXN0ZXIsCisJCQl2b2lkICpkYXRhKQogewotCXBtX3J1bnRpbWVfZGlzYWJsZSgm cGRldi0+ZGV2KTsKLQljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYsICZleHlub3NfZHBfb3BzKTsK KwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwog Ci0JcmV0dXJuIDA7CisJYW5hbG9naXhfZHBfYnJpZGdlX2Rpc2FibGUoZHAtPmJyaWRnZSk7CisJ cG1fcnVudGltZV9kaXNhYmxlKGRldik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChhbmFsb2dpeF9k cF91bmJpbmQpOwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGV4eW5vc19kcF9zdXNw ZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBhbmFsb2dpeF9kcF9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwLT5jbG9jayk7Ci0KIAlyZXR1 cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFuYWxvZ2l4X2RwX3N1c3BlbmQpOwogCi1zdGF0 aWMgaW50IGV4eW5vc19kcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGFuYWxvZ2l4 X2RwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGV4eW5vc19kcF9kZXZp Y2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0OwogCiAJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGRwLT5jbG9jayk7CkBAIC0xNDg3LDI5ICsxMzQzLDkgQEAgc3RhdGljIGlu dCBleHlub3NfZHBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAogCXJldHVybiAwOwogfQor RVhQT1JUX1NZTUJPTF9HUEwoYW5hbG9naXhfZHBfcmVzdW1lKTsKICNlbmRpZgogCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGRldl9wbV9vcHMgZXh5bm9zX2RwX3BtX29wcyA9IHsKLQlTRVRfUlVOVElN RV9QTV9PUFMoZXh5bm9zX2RwX3N1c3BlbmQsIGV4eW5vc19kcF9yZXN1bWUsIE5VTEwpCi19Owot Ci1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3NfZHBfbWF0Y2hbXSA9IHsK LQl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNS1kcCIgfSwKLQl7fSwKLX07Ci1NT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBleHlub3NfZHBfbWF0Y2gpOwotCi1zdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGRwX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gZXh5bm9zX2RwX3Byb2JlLAotCS5yZW1v dmUJCT0gZXh5bm9zX2RwX3JlbW92ZSwKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiZXh5bm9z LWRwIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCS5wbQk9ICZleHlub3NfZHBfcG1fb3Bz LAotCQkub2ZfbWF0Y2hfdGFibGUgPSBleHlub3NfZHBfbWF0Y2gsCi0JfSwKLX07Ci0KIE1PRFVM RV9BVVRIT1IoIkppbmdvbyBIYW4gPGpnMS5oYW5Ac2Ftc3VuZy5jb20+Iik7Ci1NT0RVTEVfREVT Q1JJUFRJT04oIlNhbXN1bmcgU29DIERQIERyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJB bmFsb2dpeCBEUCBDb3JlIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3Jl LmggYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX2NvcmUuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDcyNGVjCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9jb3JlLmgK QEAgLTAsMCArMSwyNzcgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgQW5hbG9naXggRFAgKERp c3BsYXkgUG9ydCkgY29yZSBpbnRlcmZhY2UgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykg MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBKaW5nb28gSGFu IDxqZzEuaGFuQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg Ki8KKworI2lmbmRlZiBfQU5BTE9HSVhfRFBfQ09SRV9ICisjZGVmaW5lIF9BTkFMT0dJWF9EUF9D T1JFX0gKKworI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZHBf aGVscGVyLmg+CisKKyNkZWZpbmUgRFBfVElNRU9VVF9MT09QX0NPVU5UCQkxMDAKKyNkZWZpbmUg TUFYX0NSX0xPT1AJCQk1CisjZGVmaW5lIE1BWF9FUV9MT09QCQkJNQorCitlbnVtIGxpbmtfcmF0 ZV90eXBlIHsKKwlMSU5LX1JBVEVfMV82MkdCUFMgPSAweDA2LAorCUxJTktfUkFURV8yXzcwR0JQ UyA9IDB4MGEKK307CisKK2VudW0gbGlua19sYW5lX2NvdW50X3R5cGUgeworCUxBTkVfQ09VTlQx ID0gMSwKKwlMQU5FX0NPVU5UMiA9IDIsCisJTEFORV9DT1VOVDQgPSA0Cit9OworCitlbnVtIGxp bmtfdHJhaW5pbmdfc3RhdGUgeworCVNUQVJULAorCUNMT0NLX1JFQ09WRVJZLAorCUVRVUFMSVpF Ul9UUkFJTklORywKKwlGSU5JU0hFRCwKKwlGQUlMRUQKK307CisKK2VudW0gdm9sdGFnZV9zd2lu Z19sZXZlbCB7CisJVk9MVEFHRV9MRVZFTF8wLAorCVZPTFRBR0VfTEVWRUxfMSwKKwlWT0xUQUdF X0xFVkVMXzIsCisJVk9MVEFHRV9MRVZFTF8zLAorfTsKKworZW51bSBwcmVfZW1waGFzaXNfbGV2 ZWwgeworCVBSRV9FTVBIQVNJU19MRVZFTF8wLAorCVBSRV9FTVBIQVNJU19MRVZFTF8xLAorCVBS RV9FTVBIQVNJU19MRVZFTF8yLAorCVBSRV9FTVBIQVNJU19MRVZFTF8zLAorfTsKKworZW51bSBw YXR0ZXJuX3NldCB7CisJUFJCUzcsCisJRDEwXzIsCisJVFJBSU5JTkdfUFROMSwKKwlUUkFJTklO R19QVE4yLAorCURQX05PTkUKK307CisKK2VudW0gY29sb3Jfc3BhY2UgeworCUNPTE9SX1JHQiwK KwlDT0xPUl9ZQ0JDUjQyMiwKKwlDT0xPUl9ZQ0JDUjQ0NAorfTsKKworZW51bSBjb2xvcl9kZXB0 aCB7CisJQ09MT1JfNiwKKwlDT0xPUl84LAorCUNPTE9SXzEwLAorCUNPTE9SXzEyCit9OworCitl bnVtIGNvbG9yX2NvZWZmaWNpZW50IHsKKwlDT0xPUl9ZQ0JDUjYwMSwKKwlDT0xPUl9ZQ0JDUjcw OQorfTsKKworZW51bSBkeW5hbWljX3JhbmdlIHsKKwlWRVNBLAorCUNFQQorfTsKKworZW51bSBw bGxfc3RhdHVzIHsKKwlQTExfVU5MT0NLRUQsCisJUExMX0xPQ0tFRAorfTsKKworZW51bSBjbG9j a19yZWNvdmVyeV9tX3ZhbHVlX3R5cGUgeworCUNBTENVTEFURURfTSwKKwlSRUdJU1RFUl9NCit9 OworCitlbnVtIHZpZGVvX3RpbWluZ19yZWNvZ25pdGlvbl90eXBlIHsKKwlWSURFT19USU1JTkdf RlJPTV9DQVBUVVJFLAorCVZJREVPX1RJTUlOR19GUk9NX1JFR0lTVEVSCit9OworCitlbnVtIGFu YWxvZ19wb3dlcl9ibG9jayB7CisJQVVYX0JMT0NLLAorCUNIMF9CTE9DSywKKwlDSDFfQkxPQ0ss CisJQ0gyX0JMT0NLLAorCUNIM19CTE9DSywKKwlBTkFMT0dfVE9UQUwsCisJUE9XRVJfQUxMCit9 OworCitlbnVtIGRwX2lycV90eXBlIHsKKwlEUF9JUlFfVFlQRV9IUF9DQUJMRV9JTiwKKwlEUF9J UlFfVFlQRV9IUF9DQUJMRV9PVVQsCisJRFBfSVJRX1RZUEVfSFBfQ0hBTkdFLAorCURQX0lSUV9U WVBFX1VOS05PV04sCit9OworCitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJY2hhciAqbmFtZTsKKwor CWJvb2wgaF9zeW5jX3BvbGFyaXR5OworCWJvb2wgdl9zeW5jX3BvbGFyaXR5OworCWJvb2wgaW50 ZXJsYWNlZDsKKworCWVudW0gY29sb3Jfc3BhY2UgY29sb3Jfc3BhY2U7CisJZW51bSBkeW5hbWlj X3JhbmdlIGR5bmFtaWNfcmFuZ2U7CisJZW51bSBjb2xvcl9jb2VmZmljaWVudCB5Y2Jjcl9jb2Vm ZjsKKwllbnVtIGNvbG9yX2RlcHRoIGNvbG9yX2RlcHRoOworCisJZW51bSBsaW5rX3JhdGVfdHlw ZSBsaW5rX3JhdGU7CisJZW51bSBsaW5rX2xhbmVfY291bnRfdHlwZSBsYW5lX2NvdW50OworfTsK Kworc3RydWN0IGxpbmtfdHJhaW4geworCWludCBlcV9sb29wOworCWludCBjcl9sb29wWzRdOwor CisJdTggbGlua19yYXRlOworCXU4IGxhbmVfY291bnQ7CisJdTggdHJhaW5pbmdfbGFuZVs0XTsK KworCWVudW0gbGlua190cmFpbmluZ19zdGF0ZSBsdF9zdGF0ZTsKK307CisKK3N0cnVjdCBhbmFs b2dpeF9kcF9kZXZpY2UgeworCXN0cnVjdCBkcm1fZW5jb2RlcgkqZW5jb2RlcjsKKwlzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcgljb25uZWN0b3I7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3Qg ZHJtX2RldmljZQkqZHJtX2RldjsKKwlzdHJ1Y3QgZHJtX2JyaWRnZQkqYnJpZGdlOworCXN0cnVj dCBjbGsJCSpjbG9jazsKKwl1bnNpZ25lZCBpbnQJCWlycTsKKwl2b2lkIF9faW9tZW0JCSpyZWdf YmFzZTsKKworCXN0cnVjdCB2aWRlb19pbmZvCSp2aWRlb19pbmZvOworCXN0cnVjdCBsaW5rX3Ry YWluCWxpbmtfdHJhaW47CisJc3RydWN0IHdvcmtfc3RydWN0CWhvdHBsdWdfd29yazsKKwlzdHJ1 Y3QgcGh5CQkqcGh5OworCWludAkJCWRwbXNfbW9kZTsKKwlpbnQJCQlocGRfZ3BpbzsKKworCXN0 cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YTsKK307CisKKy8qIGFuYWxvZ2l4 X2RwX3JlZy5jICovCit2b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV92aWRlb19tdXRlKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7Cit2b2lkIGFuYWxvZ2l4X2RwX3N0 b3BfdmlkZW8oc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9k cF9sYW5lX3N3YXAoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsK K3ZvaWQgYW5hbG9naXhfZHBfaW5pdF9hbmFsb2dfcGFyYW0oc3RydWN0IGFuYWxvZ2l4X2RwX2Rl dmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9kcF9pbml0X2ludGVycnVwdChzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCk7Cit2b2lkIGFuYWxvZ2l4X2RwX3Jlc2V0KHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwKTsKK3ZvaWQgYW5hbG9naXhfZHBfc3dyZXNldChzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCk7Cit2b2lkIGFuYWxvZ2l4X2RwX2NvbmZpZ19pbnRlcnJ1cHQoc3Ry dWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOworZW51bSBwbGxfc3RhdHVzIGFuYWxvZ2l4X2Rw X2dldF9wbGxfbG9ja19zdGF0dXMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordm9p ZCBhbmFsb2dpeF9kcF9zZXRfcGxsX3Bvd2VyX2Rvd24oc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHAsIGJvb2wgZW5hYmxlKTsKK3ZvaWQgYW5hbG9naXhfZHBfc2V0X2FuYWxvZ19wb3dlcl9k b3duKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCSAgICAgICBlbnVtIGFuYWxv Z19wb3dlcl9ibG9jayBibG9jaywKKwkJCQkgICAgICAgYm9vbCBlbmFibGUpOwordm9pZCBhbmFs b2dpeF9kcF9pbml0X2FuYWxvZ19mdW5jKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsK K3ZvaWQgYW5hbG9naXhfZHBfaW5pdF9ocGQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAp OworZW51bSBkcF9pcnFfdHlwZSBhbmFsb2dpeF9kcF9nZXRfaXJxX3R5cGUoc3RydWN0IGFuYWxv Z2l4X2RwX2RldmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9kcF9jbGVhcl9ob3RwbHVnX2ludGVy cnVwdHMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9kcF9y ZXNldF9hdXgoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9k cF9pbml0X2F1eChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7CitpbnQgYW5hbG9naXhf ZHBfZ2V0X3BsdWdfaW5fc3RhdHVzKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKK3Zv aWQgYW5hbG9naXhfZHBfZW5hYmxlX3N3X2Z1bmN0aW9uKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZp Y2UgKmRwKTsKK2ludCBhbmFsb2dpeF9kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oc3RydWN0IGFu YWxvZ2l4X2RwX2RldmljZSAqZHApOworaW50IGFuYWxvZ2l4X2RwX3dyaXRlX2J5dGVfdG9fZHBj ZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnX2Fk ZHIsCisJCQkJdW5zaWduZWQgY2hhciBkYXRhKTsKK2ludCBhbmFsb2dpeF9kcF9yZWFkX2J5dGVf ZnJvbV9kcGNkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCXVuc2lnbmVkIGlu dCByZWdfYWRkciwKKwkJCQl1bnNpZ25lZCBjaGFyICpkYXRhKTsKK2ludCBhbmFsb2dpeF9kcF93 cml0ZV9ieXRlc190b19kcGNkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCXVu c2lnbmVkIGludCByZWdfYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJdW5zaWdu ZWQgY2hhciBkYXRhW10pOworaW50IGFuYWxvZ2l4X2RwX3JlYWRfYnl0ZXNfZnJvbV9kcGNkKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCXVuc2lnbmVkIGludCByZWdfYWRkciwK KwkJCQl1bnNpZ25lZCBpbnQgY291bnQsCisJCQkJdW5zaWduZWQgY2hhciBkYXRhW10pOworaW50 IGFuYWxvZ2l4X2RwX3NlbGVjdF9pMmNfZGV2aWNlKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ug KmRwLAorCQkJCXVuc2lnbmVkIGludCBkZXZpY2VfYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVn X2FkZHIpOworaW50IGFuYWxvZ2l4X2RwX3JlYWRfYnl0ZV9mcm9tX2kyYyhzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCwKKwkJCQl1bnNpZ25lZCBpbnQgZGV2aWNlX2FkZHIsCisJCQkJdW5z aWduZWQgaW50IHJlZ19hZGRyLAorCQkJCXVuc2lnbmVkIGludCAqZGF0YSk7CitpbnQgYW5hbG9n aXhfZHBfcmVhZF9ieXRlc19mcm9tX2kyYyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwK KwkJCQl1bnNpZ25lZCBpbnQgZGV2aWNlX2FkZHIsCisJCQkJdW5zaWduZWQgaW50IHJlZ19hZGRy LAorCQkJCXVuc2lnbmVkIGludCBjb3VudCwKKwkJCQl1bnNpZ25lZCBjaGFyIGVkaWRbXSk7Cit2 b2lkIGFuYWxvZ2l4X2RwX3NldF9saW5rX2JhbmR3aWR0aChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2 aWNlICpkcCwgdTMyIGJ3dHlwZSk7Cit2b2lkIGFuYWxvZ2l4X2RwX2dldF9saW5rX2JhbmR3aWR0 aChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgdTMyICpid3R5cGUpOwordm9pZCBhbmFs b2dpeF9kcF9zZXRfbGFuZV9jb3VudChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgdTMy IGNvdW50KTsKK3ZvaWQgYW5hbG9naXhfZHBfZ2V0X2xhbmVfY291bnQoc3RydWN0IGFuYWxvZ2l4 X2RwX2RldmljZSAqZHAsIHUzMiAqY291bnQpOwordm9pZCBhbmFsb2dpeF9kcF9lbmFibGVfZW5o YW5jZWRfbW9kZShzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpOwor dm9pZCBhbmFsb2dpeF9kcF9zZXRfdHJhaW5pbmdfcGF0dGVybihzdHJ1Y3QgYW5hbG9naXhfZHBf ZGV2aWNlICpkcCwKKwkJCQllbnVtIHBhdHRlcm5fc2V0IHBhdHRlcm4pOwordm9pZCBhbmFsb2dp eF9kcF9zZXRfbGFuZTBfcHJlX2VtcGhhc2lzKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRw LCB1MzIgbGV2ZWwpOwordm9pZCBhbmFsb2dpeF9kcF9zZXRfbGFuZTFfcHJlX2VtcGhhc2lzKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1MzIgbGV2ZWwpOwordm9pZCBhbmFsb2dpeF9k cF9zZXRfbGFuZTJfcHJlX2VtcGhhc2lzKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1 MzIgbGV2ZWwpOwordm9pZCBhbmFsb2dpeF9kcF9zZXRfbGFuZTNfcHJlX2VtcGhhc2lzKHN0cnVj dCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1MzIgbGV2ZWwpOwordm9pZCBhbmFsb2dpeF9kcF9z ZXRfbGFuZTBfbGlua190cmFpbmluZyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJ CQl1MzIgdHJhaW5pbmdfbGFuZSk7Cit2b2lkIGFuYWxvZ2l4X2RwX3NldF9sYW5lMV9saW5rX3Ry YWluaW5nKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCXUzMiB0cmFpbmluZ19s YW5lKTsKK3ZvaWQgYW5hbG9naXhfZHBfc2V0X2xhbmUyX2xpbmtfdHJhaW5pbmcoc3RydWN0IGFu YWxvZ2l4X2RwX2RldmljZSAqZHAsCisJCQkJdTMyIHRyYWluaW5nX2xhbmUpOwordm9pZCBhbmFs b2dpeF9kcF9zZXRfbGFuZTNfbGlua190cmFpbmluZyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNl ICpkcCwKKwkJCQl1MzIgdHJhaW5pbmdfbGFuZSk7Cit1MzIgYW5hbG9naXhfZHBfZ2V0X2xhbmUw X2xpbmtfdHJhaW5pbmcoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordTMyIGFuYWxv Z2l4X2RwX2dldF9sYW5lMV9saW5rX3RyYWluaW5nKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ug KmRwKTsKK3UzMiBhbmFsb2dpeF9kcF9nZXRfbGFuZTJfbGlua190cmFpbmluZyhzdHJ1Y3QgYW5h bG9naXhfZHBfZGV2aWNlICpkcCk7Cit1MzIgYW5hbG9naXhfZHBfZ2V0X2xhbmUzX2xpbmtfdHJh aW5pbmcoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9kcF9y ZXNldF9tYWNybyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7Cit2b2lkIGFuYWxvZ2l4 X2RwX2luaXRfdmlkZW8oc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOworCit2b2lkIGFu YWxvZ2l4X2RwX3NldF92aWRlb19jb2xvcl9mb3JtYXQoc3RydWN0IGFuYWxvZ2l4X2RwX2Rldmlj ZSAqZHApOworaW50IGFuYWxvZ2l4X2RwX2lzX3NsYXZlX3ZpZGVvX3N0cmVhbV9jbG9ja19vbihz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCk7Cit2b2lkIGFuYWxvZ2l4X2RwX3NldF92aWRl b19jcl9tbihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJCWVudW0gY2xvY2tfcmVj b3ZlcnlfbV92YWx1ZV90eXBlIHR5cGUsCisJCQl1MzIgbV92YWx1ZSwKKwkJCXUzMiBuX3ZhbHVl KTsKK3ZvaWQgYW5hbG9naXhfZHBfc2V0X3ZpZGVvX3RpbWluZ19tb2RlKHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwLCB1MzIgdHlwZSk7Cit2b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV92aWRl b19tYXN0ZXIoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKTsKK3Zv aWQgYW5hbG9naXhfZHBfc3RhcnRfdmlkZW8oc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAp OworaW50IGFuYWxvZ2l4X2RwX2lzX3ZpZGVvX3N0cmVhbV9vbihzdHJ1Y3QgYW5hbG9naXhfZHBf ZGV2aWNlICpkcCk7Cit2b2lkIGFuYWxvZ2l4X2RwX2NvbmZpZ192aWRlb19zbGF2ZV9tb2RlKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKTsKK3ZvaWQgYW5hbG9naXhfZHBfZW5hYmxlX3Nj cmFtYmxpbmcoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOwordm9pZCBhbmFsb2dpeF9k cF9kaXNhYmxlX3NjcmFtYmxpbmcoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApOworCisv KiBJMkMgRURJRCBDaGlwIElELCBTbGF2ZSBBZGRyZXNzICovCisjZGVmaW5lIEkyQ19FRElEX0RF VklDRV9BRERSCQkJMHg1MAorI2RlZmluZSBJMkNfRV9FRElEX0RFVklDRV9BRERSCQkJMHgzMAor CisjZGVmaW5lIEVESURfQkxPQ0tfTEVOR1RICQkJMHg4MAorI2RlZmluZSBFRElEX0hFQURFUl9Q QVRURVJOCQkJMHgwMAorI2RlZmluZSBFRElEX0VYVEVOU0lPTl9GTEFHCQkJMHg3ZQorI2RlZmlu ZSBFRElEX0NIRUNLU1VNCQkJCTB4N2YKKworLyogRFBfTUFYX0xBTkVfQ09VTlQgKi8KKyNkZWZp bmUgRFBDRF9FTkhBTkNFRF9GUkFNRV9DQVAoeCkJCSgoKHgpID4+IDcpICYgMHgxKQorI2RlZmlu ZSBEUENEX01BWF9MQU5FX0NPVU5UKHgpCQkJKCh4KSAmIDB4MWYpCisKKy8qIERQX0xBTkVfQ09V TlRfU0VUICovCisjZGVmaW5lIERQQ0RfTEFORV9DT1VOVF9TRVQoeCkJCQkoKHgpICYgMHgxZikK KworLyogRFBfVFJBSU5JTkdfTEFORTBfU0VUICovCisjZGVmaW5lIERQQ0RfUFJFX0VNUEhBU0lT X1NFVCh4KQkJKCgoeCkgJiAweDMpIDw8IDMpCisjZGVmaW5lIERQQ0RfUFJFX0VNUEhBU0lTX0dF VCh4KQkJKCgoeCkgPj4gMykgJiAweDMpCisjZGVmaW5lIERQQ0RfVk9MVEFHRV9TV0lOR19TRVQo eCkJCSgoKHgpICYgMHgzKSA8PCAwKQorI2RlZmluZSBEUENEX1ZPTFRBR0VfU1dJTkdfR0VUKHgp CQkoKCh4KSA+PiAwKSAmIDB4MykKKworI2VuZGlmIC8qIF9BTkFMT0dJWF9EUF9DT1JFX0ggKi8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBf cmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX3JlZy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MmNjNjYKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2FuYWxvZ2l4L2FuYWxvZ2l4X2RwX3JlZy5j CkBAIC0wLDAgKzEsMTI2MyBAQAorLyoKKyAqIEFuYWxvZ2l4IERQIChEaXNwbGF5IHBvcnQpIGNv cmUgcmVnaXN0ZXIgaW50ZXJmYWNlIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg U2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEF1dGhvcjogSmluZ29vIEhhbiA8amcx LmhhbkBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl CisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisK KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSAi YW5hbG9naXhfZHBfY29yZS5oIgorI2luY2x1ZGUgImFuYWxvZ2l4X2RwX3JlZy5oIgorCisjZGVm aW5lIENPTU1PTl9JTlRfTUFTS18xCTAKKyNkZWZpbmUgQ09NTU9OX0lOVF9NQVNLXzIJMAorI2Rl ZmluZSBDT01NT05fSU5UX01BU0tfMwkwCisjZGVmaW5lIENPTU1PTl9JTlRfTUFTS180CShIT1RQ TFVHX0NIRyB8IEhQRF9MT1NUIHwgUExVRykKKyNkZWZpbmUgSU5UX1NUQV9NQVNLCQlJTlRfSFBE CisKK3ZvaWQgYW5hbG9naXhfZHBfZW5hYmxlX3ZpZGVvX211dGUoc3RydWN0IGFuYWxvZ2l4X2Rw X2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKQoreworCXUzMiByZWc7CisKKwlpZiAoZW5hYmxlKSB7 CisJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1ZJREVPX0NUTF8xKTsK KwkJcmVnIHw9IEhEQ1BfVklERU9fTVVURTsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfVklERU9fQ1RMXzEpOworCX0gZWxzZSB7CisJCXJlZyA9IHJlYWRsKGRwLT5y ZWdfYmFzZSArIEFOQUxPR0lYX0RQX1ZJREVPX0NUTF8xKTsKKwkJcmVnICY9IH5IRENQX1ZJREVP X01VVEU7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1ZJREVPX0NU TF8xKTsKKwl9Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfc3RvcF92aWRlbyhzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoZHAtPnJlZ19i YXNlICsgQU5BTE9HSVhfRFBfVklERU9fQ1RMXzEpOworCXJlZyAmPSB+VklERU9fRU47CisJd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklERU9fQ1RMXzEpOworfQorCit2 b2lkIGFuYWxvZ2l4X2RwX2xhbmVfc3dhcChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwg Ym9vbCBlbmFibGUpCit7CisJdTMyIHJlZzsKKworCWlmIChlbmFibGUpCisJCXJlZyA9IExBTkUz X01BUF9MT0dJQ19MQU5FXzAgfCBMQU5FMl9NQVBfTE9HSUNfTEFORV8xIHwKKwkJCUxBTkUxX01B UF9MT0dJQ19MQU5FXzIgfCBMQU5FMF9NQVBfTE9HSUNfTEFORV8zOworCWVsc2UKKwkJcmVnID0g TEFORTNfTUFQX0xPR0lDX0xBTkVfMyB8IExBTkUyX01BUF9MT0dJQ19MQU5FXzIgfAorCQkJTEFO RTFfTUFQX0xPR0lDX0xBTkVfMSB8IExBTkUwX01BUF9MT0dJQ19MQU5FXzA7CisKKwl3cml0ZWwo cmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9MQU5FX01BUCk7Cit9CisKK3ZvaWQgYW5h bG9naXhfZHBfaW5pdF9hbmFsb2dfcGFyYW0oc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAp Cit7CisJdTMyIHJlZzsKKworCXJlZyA9IFRYX1RFUk1JTkFMX0NUUkxfNTBfT0hNOworCXdyaXRl bChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FOQUxPR19DVExfMSk7CisKKwlyZWcg PSBTRUxfMjRNIHwgVFhfRFZERF9CSVRfMV8wNjI1VjsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBBTkFMT0dJWF9EUF9BTkFMT0dfQ1RMXzIpOworCisJcmVnID0gRFJJVkVfRFZERF9CSVRf MV8wNjI1ViB8IFZDT19CSVRfNjAwX01JQ1JPOworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSAr IEFOQUxPR0lYX0RQX0FOQUxPR19DVExfMyk7CisKKwlyZWcgPSBQRF9SSU5HX09TQyB8IEFVWF9U RVJNSU5BTF9DVFJMXzUwX09ITSB8CisJCVRYX0NVUjFfMlggfCBUWF9DVVJfMTZfTUE7CisJd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfUExMX0ZJTFRFUl9DVExfMSk7CisK KwlyZWcgPSBDSDNfQU1QXzQwMF9NViB8IENIMl9BTVBfNDAwX01WIHwKKwkJQ0gxX0FNUF80MDBf TVYgfCBDSDBfQU1QXzQwMF9NVjsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJ WF9EUF9UWF9BTVBfVFVOSU5HX0NUTCk7Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfaW5pdF9pbnRl cnJ1cHQoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJLyogU2V0IGludGVycnVw dCBwaW4gYXNzZXJ0aW9uIHBvbGFyaXR5IGFzIGhpZ2ggKi8KKwl3cml0ZWwoSU5UX1BPTDEgfCBJ TlRfUE9MMCwgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfSU5UX0NUTCk7CisKKwkvKiBDbGVh ciBwZW5kaW5nIHJlZ2lzZXJzICovCisJd3JpdGVsKDB4ZmYsIGRwLT5yZWdfYmFzZSArIEFOQUxP R0lYX0RQX0NPTU1PTl9JTlRfU1RBXzEpOworCXdyaXRlbCgweDRmLCBkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9DT01NT05fSU5UX1NUQV8yKTsKKwl3cml0ZWwoMHhlMCwgZHAtPnJlZ19iYXNl ICsgQU5BTE9HSVhfRFBfQ09NTU9OX0lOVF9TVEFfMyk7CisJd3JpdGVsKDB4ZTcsIGRwLT5yZWdf YmFzZSArIEFOQUxPR0lYX0RQX0NPTU1PTl9JTlRfU1RBXzQpOworCXdyaXRlbCgweDYzLCBkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9JTlRfU1RBKTsKKworCS8qIDA6bWFzaywxOiB1bm1hc2sg Ki8KKwl3cml0ZWwoMHgwMCwgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQ09NTU9OX0lOVF9N QVNLXzEpOworCXdyaXRlbCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9DT01NT05f SU5UX01BU0tfMik7CisJd3JpdGVsKDB4MDAsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0NP TU1PTl9JTlRfTUFTS18zKTsKKwl3cml0ZWwoMHgwMCwgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhf RFBfQ09NTU9OX0lOVF9NQVNLXzQpOworCXdyaXRlbCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBBTkFM T0dJWF9EUF9JTlRfU1RBX01BU0spOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3Jlc2V0KHN0cnVj dCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisKKwlhbmFsb2dpeF9kcF9z dG9wX3ZpZGVvKGRwKTsKKwlhbmFsb2dpeF9kcF9lbmFibGVfdmlkZW9fbXV0ZShkcCwgMCk7CisK KwlyZWcgPSBNQVNURVJfVklEX0ZVTkNfRU5fTiB8IFNMQVZFX1ZJRF9GVU5DX0VOX04gfAorCQlB VURfRklGT19GVU5DX0VOX04gfCBBVURfRlVOQ19FTl9OIHwKKwkJSERDUF9GVU5DX0VOX04gfCBT V19GVU5DX0VOX047CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfRlVO Q19FTl8xKTsKKworCXJlZyA9IFNTQ19GVU5DX0VOX04gfCBBVVhfRlVOQ19FTl9OIHwKKwkJU0VS REVTX0ZJRk9fRlVOQ19FTl9OIHwKKwkJTFNfQ0xLX0RPTUFJTl9GVU5DX0VOX047CisJd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfRlVOQ19FTl8yKTsKKworCXVzbGVlcF9y YW5nZSgyMCwgMzApOworCisJYW5hbG9naXhfZHBfbGFuZV9zd2FwKGRwLCAwKTsKKworCXdyaXRl bCgweDAsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfMSk7CisJd3JpdGVsKDB4 NDAsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfMik7CisJd3JpdGVsKDB4MCwg ZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8zKTsKKwl3cml0ZWwoMHgwLCBkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TWVNfQ1RMXzQpOworCisJd3JpdGVsKDB4MCwgZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfUEtUX1NFTkRfQ1RMKTsKKwl3cml0ZWwoMHgwLCBkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9IRENQX0NUTCk7CisKKwl3cml0ZWwoMHg1ZSwgZHAtPnJlZ19i YXNlICsgQU5BTE9HSVhfRFBfSFBEX0RFR0xJVENIX0wpOworCXdyaXRlbCgweDFhLCBkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9IUERfREVHTElUQ0hfSCk7CisKKwl3cml0ZWwoMHgxMCwgZHAt PnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTElOS19ERUJVR19DVEwpOworCisJd3JpdGVsKDB4MCwg ZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfUEhZX1RFU1QpOworCisJd3JpdGVsKDB4MCwgZHAt PnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklERU9fRklGT19USFJEKTsKKwl3cml0ZWwoMHgyMCwg ZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVESU9fTUFSR0lOKTsKKworCXdyaXRlbCgweDQs IGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX01fVklEX0dFTl9GSUxURVJfVEgpOworCXdyaXRl bCgweDIsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX01fQVVEX0dFTl9GSUxURVJfVEgpOwor CisJd3JpdGVsKDB4MDAwMDAxMDEsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NPQ19HRU5F UkFMX0NUTCk7Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfc3dyZXNldChzdHJ1Y3QgYW5hbG9naXhf ZHBfZGV2aWNlICpkcCkKK3sKKwl3cml0ZWwoUkVTRVRfRFBfVFgsIGRwLT5yZWdfYmFzZSArIEFO QUxPR0lYX0RQX1RYX1NXX1JFU0VUKTsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9jb25maWdfaW50 ZXJydXB0KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisKKwkv KiAwOiBtYXNrLCAxOiB1bm1hc2sgKi8KKwlyZWcgPSBDT01NT05fSU5UX01BU0tfMTsKKwl3cml0 ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9DT01NT05fSU5UX01BU0tfMSk7CisK KwlyZWcgPSBDT01NT05fSU5UX01BU0tfMjsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9DT01NT05fSU5UX01BU0tfMik7CisKKwlyZWcgPSBDT01NT05fSU5UX01BU0tf MzsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9DT01NT05fSU5UX01B U0tfMyk7CisKKwlyZWcgPSBDT01NT05fSU5UX01BU0tfNDsKKwl3cml0ZWwocmVnLCBkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9DT01NT05fSU5UX01BU0tfNCk7CisKKwlyZWcgPSBJTlRfU1RB X01BU0s7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfSU5UX1NUQV9N QVNLKTsKK30KKworZW51bSBwbGxfc3RhdHVzIGFuYWxvZ2l4X2RwX2dldF9wbGxfbG9ja19zdGF0 dXMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsKKworCXJlZyA9 IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0RFQlVHX0NUTCk7CisJaWYgKHJlZyAm IFBMTF9MT0NLKQorCQlyZXR1cm4gUExMX0xPQ0tFRDsKKwllbHNlCisJCXJldHVybiBQTExfVU5M T0NLRUQ7Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfc2V0X3BsbF9wb3dlcl9kb3duKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSkKK3sKKwl1MzIgcmVnOworCisJaWYg KGVuYWJsZSkgeworCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9QTExf Q1RMKTsKKwkJcmVnIHw9IERQX1BMTF9QRDsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfUExMX0NUTCk7CisJfSBlbHNlIHsKKwkJcmVnID0gcmVhZGwoZHAtPnJlZ19i YXNlICsgQU5BTE9HSVhfRFBfUExMX0NUTCk7CisJCXJlZyAmPSB+RFBfUExMX1BEOworCQl3cml0 ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9QTExfQ1RMKTsKKwl9Cit9CisKK3Zv aWQgYW5hbG9naXhfZHBfc2V0X2FuYWxvZ19wb3dlcl9kb3duKHN0cnVjdCBhbmFsb2dpeF9kcF9k ZXZpY2UgKmRwLAorCQkJCWVudW0gYW5hbG9nX3Bvd2VyX2Jsb2NrIGJsb2NrLAorCQkJCWJvb2wg ZW5hYmxlKQoreworCXUzMiByZWc7CisKKwlzd2l0Y2ggKGJsb2NrKSB7CisJY2FzZSBBVVhfQkxP Q0s6CisJCWlmIChlbmFibGUpIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxP R0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgfD0gQVVYX1BEOworCQkJd3JpdGVsKHJlZywgZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfUEhZX1BEKTsKKwkJfSBlbHNlIHsKKwkJCXJlZyA9IHJlYWRs KGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgJj0gfkFVWF9QRDsK KwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCX0K KwkJYnJlYWs7CisJY2FzZSBDSDBfQkxPQ0s6CisJCWlmIChlbmFibGUpIHsKKwkJCXJlZyA9IHJl YWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgfD0gQ0gwX1BE OworCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfUEhZX1BEKTsKKwkJ fSBlbHNlIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9Q RCk7CisJCQlyZWcgJj0gfkNIMF9QRDsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFO QUxPR0lYX0RQX1BIWV9QRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSDFfQkxPQ0s6CisJCWlm IChlbmFibGUpIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BI WV9QRCk7CisJCQlyZWcgfD0gQ0gxX1BEOworCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfUEhZX1BEKTsKKwkJfSBlbHNlIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdf YmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgJj0gfkNIMV9QRDsKKwkJCXdyaXRl bChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCX0KKwkJYnJlYWs7 CisJY2FzZSBDSDJfQkxPQ0s6CisJCWlmIChlbmFibGUpIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5y ZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgfD0gQ0gyX1BEOworCQkJd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfUEhZX1BEKTsKKwkJfSBlbHNlIHsK KwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQly ZWcgJj0gfkNIMl9QRDsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X1BIWV9QRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSDNfQkxPQ0s6CisJCWlmIChlbmFibGUp IHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJ CQlyZWcgfD0gQ0gzX1BEOworCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhf RFBfUEhZX1BEKTsKKwkJfSBlbHNlIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFO QUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgJj0gfkNIM19QRDsKKwkJCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBB TkFMT0dfVE9UQUw6CisJCWlmIChlbmFibGUpIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcgfD0gRFBfUEhZX1BEOworCQkJd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfUEhZX1BEKTsKKwkJfSBlbHNlIHsKKwkJ CXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9QRCk7CisJCQlyZWcg Jj0gfkRQX1BIWV9QRDsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X1BIWV9QRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9BTEw6CisJCWlmIChlbmFibGUp IHsKKwkJCXJlZyA9IERQX1BIWV9QRCB8IEFVWF9QRCB8IENIM19QRCB8IENIMl9QRCB8CisJCQkJ Q0gxX1BEIHwgQ0gwX1BEOworCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhf RFBfUEhZX1BEKTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9QSFlfUEQpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwor CX0KK30KKwordm9pZCBhbmFsb2dpeF9kcF9pbml0X2FuYWxvZ19mdW5jKHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisJaW50IHRpbWVvdXRfbG9vcCA9IDA7CisK KwlhbmFsb2dpeF9kcF9zZXRfYW5hbG9nX3Bvd2VyX2Rvd24oZHAsIFBPV0VSX0FMTCwgMCk7CisK KwlyZWcgPSBQTExfTE9DS19DSEc7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9H SVhfRFBfQ09NTU9OX0lOVF9TVEFfMSk7CisKKwlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9ERUJVR19DVEwpOworCXJlZyAmPSB+KEZfUExMX0xPQ0sgfCBQTExfTE9DS19D VFJMKTsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9ERUJVR19DVEwp OworCisJLyogUG93ZXIgdXAgUExMICovCisJaWYgKGFuYWxvZ2l4X2RwX2dldF9wbGxfbG9ja19z dGF0dXMoZHApID09IFBMTF9VTkxPQ0tFRCkgeworCQlhbmFsb2dpeF9kcF9zZXRfcGxsX3Bvd2Vy X2Rvd24oZHAsIDApOworCisJCXdoaWxlIChhbmFsb2dpeF9kcF9nZXRfcGxsX2xvY2tfc3RhdHVz KGRwKSA9PSBQTExfVU5MT0NLRUQpIHsKKwkJCXRpbWVvdXRfbG9vcCsrOworCQkJaWYgKERQX1RJ TUVPVVRfTE9PUF9DT1VOVCA8IHRpbWVvdXRfbG9vcCkgeworCQkJCWRldl9lcnIoZHAtPmRldiwg ImZhaWxlZCB0byBnZXQgcGxsIGxvY2sgc3RhdHVzXG4iKTsKKwkJCQlyZXR1cm47CisJCQl9CisJ CQl1c2xlZXBfcmFuZ2UoMTAsIDIwKTsKKwkJfQorCX0KKworCS8qIEVuYWJsZSBTZXJkZXMgRklG TyBmdW5jdGlvbiBhbmQgTGluayBzeW1ib2wgY2xvY2sgZG9tYWluIG1vZHVsZSAqLworCXJlZyA9 IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0ZVTkNfRU5fMik7CisJcmVnICY9IH4o U0VSREVTX0ZJRk9fRlVOQ19FTl9OIHwgTFNfQ0xLX0RPTUFJTl9GVU5DX0VOX04KKwkJfCBBVVhf RlVOQ19FTl9OKTsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9GVU5D X0VOXzIpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX2NsZWFyX2hvdHBsdWdfaW50ZXJydXB0cyhz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOworCisJaWYgKGdwaW9f aXNfdmFsaWQoZHAtPmhwZF9ncGlvKSkKKwkJcmV0dXJuOworCisJcmVnID0gSE9UUExVR19DSEcg fCBIUERfTE9TVCB8IFBMVUc7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhf RFBfQ09NTU9OX0lOVF9TVEFfNCk7CisKKwlyZWcgPSBJTlRfSFBEOworCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0lOVF9TVEEpOworfQorCit2b2lkIGFuYWxvZ2l4X2Rw X2luaXRfaHBkKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisK KwlpZiAoZ3Bpb19pc192YWxpZChkcC0+aHBkX2dwaW8pKQorCQlyZXR1cm47CisKKwlhbmFsb2dp eF9kcF9jbGVhcl9ob3RwbHVnX2ludGVycnVwdHMoZHApOworCisJcmVnID0gcmVhZGwoZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8zKTsKKwlyZWcgJj0gfihGX0hQRCB8IEhQRF9D VFJMKTsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TWVNfQ1RMXzMp OworfQorCitlbnVtIGRwX2lycV90eXBlIGFuYWxvZ2l4X2RwX2dldF9pcnFfdHlwZShzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOworCisJaWYgKGdwaW9faXNfdmFs aWQoZHAtPmhwZF9ncGlvKSkgeworCQlyZWcgPSBncGlvX2dldF92YWx1ZShkcC0+aHBkX2dwaW8p OworCQlpZiAocmVnKQorCQkJcmV0dXJuIERQX0lSUV9UWVBFX0hQX0NBQkxFX0lOOworCQllbHNl CisJCQlyZXR1cm4gRFBfSVJRX1RZUEVfSFBfQ0FCTEVfT1VUOworCX0gZWxzZSB7CisJCS8qIFBh cnNlIGhvdHBsdWcgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLworCQlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9DT01NT05fSU5UX1NUQV80KTsKKworCQlpZiAocmVn ICYgUExVRykKKwkJCXJldHVybiBEUF9JUlFfVFlQRV9IUF9DQUJMRV9JTjsKKworCQlpZiAocmVn ICYgSFBEX0xPU1QpCisJCQlyZXR1cm4gRFBfSVJRX1RZUEVfSFBfQ0FCTEVfT1VUOworCisJCWlm IChyZWcgJiBIT1RQTFVHX0NIRykKKwkJCXJldHVybiBEUF9JUlFfVFlQRV9IUF9DSEFOR0U7CisK KwkJcmV0dXJuIERQX0lSUV9UWVBFX1VOS05PV047CisJfQorfQorCit2b2lkIGFuYWxvZ2l4X2Rw X3Jlc2V0X2F1eChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOwor CisJLyogRGlzYWJsZSBBVVggY2hhbm5lbCBtb2R1bGUgKi8KKwlyZWcgPSByZWFkbChkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9GVU5DX0VOXzIpOworCXJlZyB8PSBBVVhfRlVOQ19FTl9OOwor CXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0ZVTkNfRU5fMik7Cit9CisK K3ZvaWQgYW5hbG9naXhfZHBfaW5pdF9hdXgoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAp Cit7CisJdTMyIHJlZzsKKworCS8qIENsZWFyIGluZXJydXB0cyByZWxhdGVkIHRvIEFVWCBjaGFu bmVsICovCisJcmVnID0gUlBMWV9SRUNFSVYgfCBBVVhfRVJSOworCXdyaXRlbChyZWcsIGRwLT5y ZWdfYmFzZSArIEFOQUxPR0lYX0RQX0lOVF9TVEEpOworCisJYW5hbG9naXhfZHBfcmVzZXRfYXV4 KGRwKTsKKworCS8qIERpc2FibGUgQVVYIHRyYW5zYWN0aW9uIEgvVyByZXRyeSAqLworCXJlZyA9 IEFVWF9CSVRfUEVSSU9EX0VYUEVDVEVEX0RFTEFZKDMpIHwgQVVYX0hXX1JFVFJZX0NPVU5UX1NF TCgwKXwKKwkJQVVYX0hXX1JFVFJZX0lOVEVSVkFMXzYwMF9NSUNST1NFQ09ORFM7CisJd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0hXX1JFVFJZX0NUTCk7CisKKwkv KiBSZWNlaXZlIEFVWCBDaGFubmVsIERFRkVSIGNvbW1hbmRzIGVxdWFsIHRvIERFRkZFUl9DT1VO VCo2NCAqLworCXJlZyA9IERFRkVSX0NUUkxfRU4gfCBERUZFUl9DT1VOVCgxKTsKKwl3cml0ZWwo cmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hfREVGRVJfQ1RMKTsKKworCS8q IEVuYWJsZSBBVVggY2hhbm5lbCBtb2R1bGUgKi8KKwlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2Ug KyBBTkFMT0dJWF9EUF9GVU5DX0VOXzIpOworCXJlZyAmPSB+QVVYX0ZVTkNfRU5fTjsKKwl3cml0 ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9GVU5DX0VOXzIpOworfQorCitpbnQg YW5hbG9naXhfZHBfZ2V0X3BsdWdfaW5fc3RhdHVzKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2Ug KmRwKQoreworCXUzMiByZWc7CisKKwlpZiAoZ3Bpb19pc192YWxpZChkcC0+aHBkX2dwaW8pKSB7 CisJCWlmIChncGlvX2dldF92YWx1ZShkcC0+aHBkX2dwaW8pKQorCQkJcmV0dXJuIDA7CisJfSBl bHNlIHsKKwkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8z KTsKKwkJaWYgKHJlZyAmIEhQRF9TVEFUVVMpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4g LUVJTlZBTDsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9lbmFibGVfc3dfZnVuY3Rpb24oc3RydWN0 IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKGRw LT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0ZVTkNfRU5fMSk7CisJcmVnICY9IH5TV19GVU5DX0VO X047CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfRlVOQ19FTl8xKTsK K30KKworaW50IGFuYWxvZ2l4X2RwX3N0YXJ0X2F1eF90cmFuc2FjdGlvbihzdHJ1Y3QgYW5hbG9n aXhfZHBfZGV2aWNlICpkcCkKK3sKKwlpbnQgcmVnOworCWludCByZXR2YWwgPSAwOworCWludCB0 aW1lb3V0X2xvb3AgPSAwOworCisJLyogRW5hYmxlIEFVWCBDSCBvcGVyYXRpb24gKi8KKwlyZWcg PSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hfQ1RMXzIpOworCXJlZyB8 PSBBVVhfRU47CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0NI X0NUTF8yKTsKKworCS8qIElzIEFVWCBDSCBjb21tYW5kIHJlcGx5IHJlY2VpdmVkPyAqLworCXJl ZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0lOVF9TVEEpOworCXdoaWxlICgh KHJlZyAmIFJQTFlfUkVDRUlWKSkgeworCQl0aW1lb3V0X2xvb3ArKzsKKwkJaWYgKERQX1RJTUVP VVRfTE9PUF9DT1VOVCA8IHRpbWVvdXRfbG9vcCkgeworCQkJZGV2X2VycihkcC0+ZGV2LCAiQVVY IENIIGNvbW1hbmQgcmVwbHkgZmFpbGVkIVxuIik7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJ fQorCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9JTlRfU1RBKTsKKwkJ dXNsZWVwX3JhbmdlKDEwLCAxMSk7CisJfQorCisJLyogQ2xlYXIgaW50ZXJydXB0IHNvdXJjZSBm b3IgQVVYIENIIGNvbW1hbmQgcmVwbHkgKi8KKwl3cml0ZWwoUlBMWV9SRUNFSVYsIGRwLT5yZWdf YmFzZSArIEFOQUxPR0lYX0RQX0lOVF9TVEEpOworCisJLyogQ2xlYXIgaW50ZXJydXB0IHNvdXJj ZSBmb3IgQVVYIENIIGFjY2VzcyBlcnJvciAqLworCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSAr IEFOQUxPR0lYX0RQX0lOVF9TVEEpOworCWlmIChyZWcgJiBBVVhfRVJSKSB7CisJCXdyaXRlbChB VVhfRVJSLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9JTlRfU1RBKTsKKwkJcmV0dXJuIC1F UkVNT1RFSU87CisJfQorCisJLyogQ2hlY2sgQVVYIENIIGVycm9yIGFjY2VzcyBzdGF0dXMgKi8K KwlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQ0hfU1RBKTsKKwlp ZiAoKHJlZyAmIEFVWF9TVEFUVVNfTUFTSykgIT0gMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJB VVggQ0ggZXJyb3IgaGFwcGVuczogJWRcblxuIiwKKwkJCXJlZyAmIEFVWF9TVEFUVVNfTUFTSyk7 CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBh bmFsb2dpeF9kcF93cml0ZV9ieXRlX3RvX2RwY2Qoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAq ZHAsCisJCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAorCQkJCXVuc2lnbmVkIGNoYXIgZGF0YSkK K3sKKwl1MzIgcmVnOworCWludCBpOworCWludCByZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwg MzsgaSsrKSB7CisJCS8qIENsZWFyIEFVWCBDSCBkYXRhIGJ1ZmZlciAqLworCQlyZWcgPSBCVUZf Q0xSOworCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZGRVJfREFU QV9DVEwpOworCisJCS8qIFNlbGVjdCBEUENEIGRldmljZSBhZGRyZXNzICovCisJCXJlZyA9IEFV WF9BRERSXzdfMChyZWdfYWRkcik7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxP R0lYX0RQX0FVWF9BRERSXzdfMCk7CisJCXJlZyA9IEFVWF9BRERSXzE1XzgocmVnX2FkZHIpOwor CQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xNV84KTsK KwkJcmVnID0gQVVYX0FERFJfMTlfMTYocmVnX2FkZHIpOworCQl3cml0ZWwocmVnLCBkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl8xOV8xNik7CisKKwkJLyogV3JpdGUgZGF0YSBi dWZmZXIgKi8KKwkJcmVnID0gKHVuc2lnbmVkIGludClkYXRhOworCQl3cml0ZWwocmVnLCBkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZfREFUQV8wKTsKKworCQkvKgorCQkgKiBTZXQgRGlz cGxheVBvcnQgdHJhbnNhY3Rpb24gYW5kIHdyaXRlIDEgYnl0ZQorCQkgKiBJZiBiaXQgMyBpcyAx LCBEaXNwbGF5UG9ydCB0cmFuc2FjdGlvbi4KKwkJICogSWYgQml0IDMgaXMgMCwgSTJDIHRyYW5z YWN0aW9uLgorCQkgKi8KKwkJcmVnID0gQVVYX1RYX0NPTU1fRFBfVFJBTlNBQ1RJT04gfCBBVVhf VFhfQ09NTV9XUklURTsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBf QVVYX0NIX0NUTF8xKTsKKworCQkvKiBTdGFydCBBVVggdHJhbnNhY3Rpb24gKi8KKwkJcmV0dmFs ID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKKwkJaWYgKHJldHZhbCA9 PSAwKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCWRldl9kYmcoZHAtPmRldiwgIiVzOiBBdXggVHJh bnNhY3Rpb24gZmFpbCFcbiIsCisJCQkJX19mdW5jX18pOworCX0KKworCXJldHVybiByZXR2YWw7 Cit9CisKK2ludCBhbmFsb2dpeF9kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwLAorCQkJCXVuc2lnbmVkIGludCByZWdfYWRkciwKKwkJCQl1bnNpZ25l ZCBjaGFyICpkYXRhKQoreworCXUzMiByZWc7CisJaW50IGk7CisJaW50IHJldHZhbDsKKworCWZv ciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJLyogQ2xlYXIgQVVYIENIIGRhdGEgYnVmZmVyICov CisJCXJlZyA9IEJVRl9DTFI7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lY X0RQX0JVRkZFUl9EQVRBX0NUTCk7CisKKwkJLyogU2VsZWN0IERQQ0QgZGV2aWNlIGFkZHJlc3Mg Ki8KKwkJcmVnID0gQVVYX0FERFJfN18wKHJlZ19hZGRyKTsKKwkJd3JpdGVsKHJlZywgZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0FERFJfN18wKTsKKwkJcmVnID0gQVVYX0FERFJfMTVf OChyZWdfYWRkcik7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FV WF9BRERSXzE1XzgpOworCQlyZWcgPSBBVVhfQUREUl8xOV8xNihyZWdfYWRkcik7CisJCXdyaXRl bChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERSXzE5XzE2KTsKKworCQkv KgorCQkgKiBTZXQgRGlzcGxheVBvcnQgdHJhbnNhY3Rpb24gYW5kIHJlYWQgMSBieXRlCisJCSAq IElmIGJpdCAzIGlzIDEsIERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uLgorCQkgKiBJZiBCaXQgMyBp cyAwLCBJMkMgdHJhbnNhY3Rpb24uCisJCSAqLworCQlyZWcgPSBBVVhfVFhfQ09NTV9EUF9UUkFO U0FDVElPTiB8IEFVWF9UWF9DT01NX1JFQUQ7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSAr IEFOQUxPR0lYX0RQX0FVWF9DSF9DVExfMSk7CisKKwkJLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9u ICovCisJCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3N0YXJ0X2F1eF90cmFuc2FjdGlvbihkcCk7CisJ CWlmIChyZXR2YWwgPT0gMCkKKwkJCWJyZWFrOworCQllbHNlCisJCQlkZXZfZGJnKGRwLT5kZXYs ICIlczogQXV4IFRyYW5zYWN0aW9uIGZhaWwhXG4iLAorCQkJCV9fZnVuY19fKTsKKwl9CisKKwkv KiBSZWFkIGRhdGEgYnVmZmVyICovCisJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9H SVhfRFBfQlVGX0RBVEFfMCk7CisJKmRhdGEgPSAodW5zaWduZWQgY2hhcikocmVnICYgMHhmZik7 CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgYW5hbG9naXhfZHBfd3JpdGVfYnl0ZXNfdG9f ZHBjZChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJCQl1bnNpZ25lZCBpbnQgcmVn X2FkZHIsCisJCQkJdW5zaWduZWQgaW50IGNvdW50LAorCQkJCXVuc2lnbmVkIGNoYXIgZGF0YVtd KQoreworCXUzMiByZWc7CisJdW5zaWduZWQgaW50IHN0YXJ0X29mZnNldDsKKwl1bnNpZ25lZCBp bnQgY3VyX2RhdGFfY291bnQ7CisJdW5zaWduZWQgaW50IGN1cl9kYXRhX2lkeDsKKwlpbnQgaTsK KwlpbnQgcmV0dmFsID0gMDsKKworCS8qIENsZWFyIEFVWCBDSCBkYXRhIGJ1ZmZlciAqLworCXJl ZyA9IEJVRl9DTFI7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQlVG RkVSX0RBVEFfQ1RMKTsKKworCXN0YXJ0X29mZnNldCA9IDA7CisJd2hpbGUgKHN0YXJ0X29mZnNl dCA8IGNvdW50KSB7CisJCS8qIEJ1ZmZlciBzaXplIG9mIEFVWCBDSCBpcyAxNiAqIDRieXRlcyAq LworCQlpZiAoKGNvdW50IC0gc3RhcnRfb2Zmc2V0KSA+IDE2KQorCQkJY3VyX2RhdGFfY291bnQg PSAxNjsKKwkJZWxzZQorCQkJY3VyX2RhdGFfY291bnQgPSBjb3VudCAtIHN0YXJ0X29mZnNldDsK KworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkvKiBTZWxlY3QgRFBDRCBkZXZpY2Ug YWRkcmVzcyAqLworCQkJcmVnID0gQVVYX0FERFJfN18wKHJlZ19hZGRyICsgc3RhcnRfb2Zmc2V0 KTsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERSXzdf MCk7CisJCQlyZWcgPSBBVVhfQUREUl8xNV84KHJlZ19hZGRyICsgc3RhcnRfb2Zmc2V0KTsKKwkJ CXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERSXzE1XzgpOwor CQkJcmVnID0gQVVYX0FERFJfMTlfMTYocmVnX2FkZHIgKyBzdGFydF9vZmZzZXQpOworCQkJd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0FERFJfMTlfMTYpOworCisJ CQlmb3IgKGN1cl9kYXRhX2lkeCA9IDA7IGN1cl9kYXRhX2lkeCA8IGN1cl9kYXRhX2NvdW50Owor CQkJICAgICBjdXJfZGF0YV9pZHgrKykgeworCQkJCXJlZyA9IGRhdGFbc3RhcnRfb2Zmc2V0ICsg Y3VyX2RhdGFfaWR4XTsKKwkJCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9E UF9CVUZfREFUQV8wCisJCQkJCQkJICArIDQgKiBjdXJfZGF0YV9pZHgpOworCQkJfQorCisJCQkv KgorCQkJICogU2V0IERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uIGFuZCB3cml0ZQorCQkJICogSWYg Yml0IDMgaXMgMSwgRGlzcGxheVBvcnQgdHJhbnNhY3Rpb24uCisJCQkgKiBJZiBCaXQgMyBpcyAw LCBJMkMgdHJhbnNhY3Rpb24uCisJCQkgKi8KKwkJCXJlZyA9IEFVWF9MRU5HVEgoY3VyX2RhdGFf Y291bnQpIHwKKwkJCQlBVVhfVFhfQ09NTV9EUF9UUkFOU0FDVElPTiB8IEFVWF9UWF9DT01NX1dS SVRFOworCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0NIX0NU TF8xKTsKKworCQkJLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9uICovCisJCQlyZXR2YWwgPSBhbmFs b2dpeF9kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOworCQkJaWYgKHJldHZhbCA9PSAwKQor CQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWRldl9kYmcoZHAtPmRldiwgIiVzOiBBdXggVHJhbnNh Y3Rpb24gZmFpbCFcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJfQorCisJCXN0YXJ0X29mZnNldCAr PSBjdXJfZGF0YV9jb3VudDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgYW5hbG9n aXhfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2Qoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAs CisJCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAorCQkJCXVuc2lnbmVkIGludCBjb3VudCwKKwkJ CQl1bnNpZ25lZCBjaGFyIGRhdGFbXSkKK3sKKwl1MzIgcmVnOworCXVuc2lnbmVkIGludCBzdGFy dF9vZmZzZXQ7CisJdW5zaWduZWQgaW50IGN1cl9kYXRhX2NvdW50OworCXVuc2lnbmVkIGludCBj dXJfZGF0YV9pZHg7CisJaW50IGk7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBDbGVhciBBVVgg Q0ggZGF0YSBidWZmZXIgKi8KKwlyZWcgPSBCVUZfQ0xSOworCXdyaXRlbChyZWcsIGRwLT5yZWdf YmFzZSArIEFOQUxPR0lYX0RQX0JVRkZFUl9EQVRBX0NUTCk7CisKKwlzdGFydF9vZmZzZXQgPSAw OworCXdoaWxlIChzdGFydF9vZmZzZXQgPCBjb3VudCkgeworCQkvKiBCdWZmZXIgc2l6ZSBvZiBB VVggQ0ggaXMgMTYgKiA0Ynl0ZXMgKi8KKwkJaWYgKChjb3VudCAtIHN0YXJ0X29mZnNldCkgPiAx NikKKwkJCWN1cl9kYXRhX2NvdW50ID0gMTY7CisJCWVsc2UKKwkJCWN1cl9kYXRhX2NvdW50ID0g Y291bnQgLSBzdGFydF9vZmZzZXQ7CisKKwkJLyogQVVYIENIIFJlcXVlc3QgVHJhbnNhY3Rpb24g cHJvY2VzcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkvKiBTZWxlY3QgRFBD RCBkZXZpY2UgYWRkcmVzcyAqLworCQkJcmVnID0gQVVYX0FERFJfN18wKHJlZ19hZGRyICsgc3Rh cnRfb2Zmc2V0KTsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FV WF9BRERSXzdfMCk7CisJCQlyZWcgPSBBVVhfQUREUl8xNV84KHJlZ19hZGRyICsgc3RhcnRfb2Zm c2V0KTsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERS XzE1XzgpOworCQkJcmVnID0gQVVYX0FERFJfMTlfMTYocmVnX2FkZHIgKyBzdGFydF9vZmZzZXQp OworCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQVVYX0FERFJfMTlf MTYpOworCisJCQkvKgorCQkJICogU2V0IERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uIGFuZCByZWFk CisJCQkgKiBJZiBiaXQgMyBpcyAxLCBEaXNwbGF5UG9ydCB0cmFuc2FjdGlvbi4KKwkJCSAqIElm IEJpdCAzIGlzIDAsIEkyQyB0cmFuc2FjdGlvbi4KKwkJCSAqLworCQkJcmVnID0gQVVYX0xFTkdU SChjdXJfZGF0YV9jb3VudCkgfAorCQkJCUFVWF9UWF9DT01NX0RQX1RSQU5TQUNUSU9OIHwgQVVY X1RYX0NPTU1fUkVBRDsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X0FVWF9DSF9DVExfMSk7CisKKwkJCS8qIFN0YXJ0IEFVWCB0cmFuc2FjdGlvbiAqLworCQkJcmV0 dmFsID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKKwkJCWlmIChyZXR2 YWwgPT0gMCkKKwkJCQlicmVhazsKKwkJCWVsc2UKKwkJCQlkZXZfZGJnKGRwLT5kZXYsICIlczog QXV4IFRyYW5zYWN0aW9uIGZhaWwhXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCX0KKworCQlmb3Ig KGN1cl9kYXRhX2lkeCA9IDA7IGN1cl9kYXRhX2lkeCA8IGN1cl9kYXRhX2NvdW50OworCQkgICAg Y3VyX2RhdGFfaWR4KyspIHsKKwkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lY X0RQX0JVRl9EQVRBXzAKKwkJCQkJCSArIDQgKiBjdXJfZGF0YV9pZHgpOworCQkJZGF0YVtzdGFy dF9vZmZzZXQgKyBjdXJfZGF0YV9pZHhdID0KKwkJCQkodW5zaWduZWQgY2hhcilyZWc7CisJCX0K KworCQlzdGFydF9vZmZzZXQgKz0gY3VyX2RhdGFfY291bnQ7CisJfQorCisJcmV0dXJuIHJldHZh bDsKK30KKworaW50IGFuYWxvZ2l4X2RwX3NlbGVjdF9pMmNfZGV2aWNlKHN0cnVjdCBhbmFsb2dp eF9kcF9kZXZpY2UgKmRwLAorCQkJCXVuc2lnbmVkIGludCBkZXZpY2VfYWRkciwKKwkJCQl1bnNp Z25lZCBpbnQgcmVnX2FkZHIpCit7CisJdTMyIHJlZzsKKwlpbnQgcmV0dmFsOworCisJLyogU2V0 IEVESUQgZGV2aWNlIGFkZHJlc3MgKi8KKwlyZWcgPSBkZXZpY2VfYWRkcjsKKwl3cml0ZWwocmVn LCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9BVVhfQUREUl83XzApOworCXdyaXRlbCgweDAs IGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERSXzE1XzgpOworCXdyaXRlbCgweDAs IGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9BRERSXzE5XzE2KTsKKworCS8qIFNldCBv ZmZzZXQgZnJvbSBiYXNlIGFkZHJlc3Mgb2YgRURJRCBkZXZpY2UgKi8KKwl3cml0ZWwocmVnX2Fk ZHIsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0JVRl9EQVRBXzApOworCisJLyoKKwkgKiBT ZXQgSTJDIHRyYW5zYWN0aW9uIGFuZCB3cml0ZSBhZGRyZXNzCisJICogSWYgYml0IDMgaXMgMSwg RGlzcGxheVBvcnQgdHJhbnNhY3Rpb24uCisJICogSWYgQml0IDMgaXMgMCwgSTJDIHRyYW5zYWN0 aW9uLgorCSAqLworCXJlZyA9IEFVWF9UWF9DT01NX0kyQ19UUkFOU0FDVElPTiB8IEFVWF9UWF9D T01NX01PVCB8CisJCUFVWF9UWF9DT01NX1dSSVRFOworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFz ZSArIEFOQUxPR0lYX0RQX0FVWF9DSF9DVExfMSk7CisKKwkvKiBTdGFydCBBVVggdHJhbnNhY3Rp b24gKi8KKwlyZXR2YWwgPSBhbmFsb2dpeF9kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOwor CWlmIChyZXR2YWwgIT0gMCkKKwkJZGV2X2RiZyhkcC0+ZGV2LCAiJXM6IEF1eCBUcmFuc2FjdGlv biBmYWlsIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGFuYWxv Z2l4X2RwX3JlYWRfYnl0ZV9mcm9tX2kyYyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwK KwkJCQl1bnNpZ25lZCBpbnQgZGV2aWNlX2FkZHIsCisJCQkJdW5zaWduZWQgaW50IHJlZ19hZGRy LAorCQkJCXVuc2lnbmVkIGludCAqZGF0YSkKK3sKKwl1MzIgcmVnOworCWludCBpOworCWludCBy ZXR2YWw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCS8qIENsZWFyIEFVWCBDSCBk YXRhIGJ1ZmZlciAqLworCQlyZWcgPSBCVUZfQ0xSOworCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBBTkFMT0dJWF9EUF9CVUZGRVJfREFUQV9DVEwpOworCisJCS8qIFNlbGVjdCBFRElEIGRl dmljZSAqLworCQlyZXR2YWwgPSBhbmFsb2dpeF9kcF9zZWxlY3RfaTJjX2RldmljZShkcCwgZGV2 aWNlX2FkZHIsIHJlZ19hZGRyKTsKKwkJaWYgKHJldHZhbCAhPSAwKQorCQkJY29udGludWU7CisK KwkJLyoKKwkJICogU2V0IEkyQyB0cmFuc2FjdGlvbiBhbmQgcmVhZCBkYXRhCisJCSAqIElmIGJp dCAzIGlzIDEsIERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uLgorCQkgKiBJZiBCaXQgMyBpcyAwLCBJ MkMgdHJhbnNhY3Rpb24uCisJCSAqLworCQlyZWcgPSBBVVhfVFhfQ09NTV9JMkNfVFJBTlNBQ1RJ T04gfAorCQkJQVVYX1RYX0NPTU1fUkVBRDsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfQVVYX0NIX0NUTF8xKTsKKworCQkvKiBTdGFydCBBVVggdHJhbnNhY3Rpb24g Ki8KKwkJcmV0dmFsID0gYW5hbG9naXhfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKKwkJ aWYgKHJldHZhbCA9PSAwKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCWRldl9kYmcoZHAtPmRldiwg IiVzOiBBdXggVHJhbnNhY3Rpb24gZmFpbCFcbiIsCisJCQkJX19mdW5jX18pOworCX0KKworCS8q IFJlYWQgZGF0YSAqLworCWlmIChyZXR2YWwgPT0gMCkKKwkJKmRhdGEgPSByZWFkbChkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9CVUZfREFUQV8wKTsKKworCXJldHVybiByZXR2YWw7Cit9CisK K2ludCBhbmFsb2dpeF9kcF9yZWFkX2J5dGVzX2Zyb21faTJjKHN0cnVjdCBhbmFsb2dpeF9kcF9k ZXZpY2UgKmRwLAorCQkJCXVuc2lnbmVkIGludCBkZXZpY2VfYWRkciwKKwkJCQl1bnNpZ25lZCBp bnQgcmVnX2FkZHIsCisJCQkJdW5zaWduZWQgaW50IGNvdW50LAorCQkJCXVuc2lnbmVkIGNoYXIg ZWRpZFtdKQoreworCXUzMiByZWc7CisJdW5zaWduZWQgaW50IGksIGo7CisJdW5zaWduZWQgaW50 IGN1cl9kYXRhX2lkeDsKKwl1bnNpZ25lZCBpbnQgZGVmZXIgPSAwOworCWludCByZXR2YWwgPSAw OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpICs9IDE2KSB7CisJCWZvciAoaiA9IDA7IGog PCAzOyBqKyspIHsKKwkJCS8qIENsZWFyIEFVWCBDSCBkYXRhIGJ1ZmZlciAqLworCQkJcmVnID0g QlVGX0NMUjsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0JVRkZF Ul9EQVRBX0NUTCk7CisKKwkJCS8qIFNldCBub3JtYWwgQVVYIENIIGNvbW1hbmQgKi8KKwkJCXJl ZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0FVWF9DSF9DVExfMik7CisJCQly ZWcgJj0gfkFERFJfT05MWTsKKwkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lY X0RQX0FVWF9DSF9DVExfMik7CisKKwkJCS8qCisJCQkgKiBJZiBSeCBzZW5kcyBkZWZlciwgVHgg c2VuZHMgb25seSByZWFkcworCQkJICogcmVxdWVzdCB3aXRob3V0IHNlbmRpbmcgYWRkcmVzcwor CQkJICovCisJCQlpZiAoIWRlZmVyKQorCQkJCXJldHZhbCA9IGFuYWxvZ2l4X2RwX3NlbGVjdF9p MmNfZGV2aWNlKGRwLAorCQkJCQkJZGV2aWNlX2FkZHIsIHJlZ19hZGRyICsgaSk7CisJCQllbHNl CisJCQkJZGVmZXIgPSAwOworCisJCQlpZiAocmV0dmFsID09IDApIHsKKwkJCQkvKgorCQkJCSAq IFNldCBJMkMgdHJhbnNhY3Rpb24gYW5kIHdyaXRlIGRhdGEKKwkJCQkgKiBJZiBiaXQgMyBpcyAx LCBEaXNwbGF5UG9ydCB0cmFuc2FjdGlvbi4KKwkJCQkgKiBJZiBCaXQgMyBpcyAwLCBJMkMgdHJh bnNhY3Rpb24uCisJCQkJICovCisJCQkJcmVnID0gQVVYX0xFTkdUSCgxNikgfAorCQkJCQlBVVhf VFhfQ09NTV9JMkNfVFJBTlNBQ1RJT04gfAorCQkJCQlBVVhfVFhfQ09NTV9SRUFEOworCQkJCXdy aXRlbChyZWcsIGRwLT5yZWdfYmFzZSArCisJCQkJCUFOQUxPR0lYX0RQX0FVWF9DSF9DVExfMSk7 CisKKwkJCQkvKiBTdGFydCBBVVggdHJhbnNhY3Rpb24gKi8KKwkJCQlyZXR2YWwgPSBhbmFsb2dp eF9kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOworCQkJCWlmIChyZXR2YWwgPT0gMCkKKwkJ CQkJYnJlYWs7CisJCQkJZWxzZQorCQkJCQlkZXZfZGJnKGRwLT5kZXYsCisJCQkJCQkiJXM6IEF1 eCBUcmFuc2FjdGlvbiBmYWlsIVxuIiwKKwkJCQkJCV9fZnVuY19fKTsKKwkJCX0KKwkJCS8qIENo ZWNrIGlmIFJ4IHNlbmRzIGRlZmVyICovCisJCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9BVVhfUlhfQ09NTSk7CisJCQlpZiAocmVnID09IEFVWF9SWF9DT01NX0FVWF9E RUZFUiB8fAorCQkJCXJlZyA9PSBBVVhfUlhfQ09NTV9JMkNfREVGRVIpIHsKKwkJCQlkZXZfZXJy KGRwLT5kZXYsICJEZWZlcjogJWRcblxuIiwgcmVnKTsKKwkJCQlkZWZlciA9IDE7CisJCQl9CisJ CX0KKworCQlmb3IgKGN1cl9kYXRhX2lkeCA9IDA7IGN1cl9kYXRhX2lkeCA8IDE2OyBjdXJfZGF0 YV9pZHgrKykgeworCQkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfQlVG X0RBVEFfMAorCQkJCQkJICsgNCAqIGN1cl9kYXRhX2lkeCk7CisJCQllZGlkW2kgKyBjdXJfZGF0 YV9pZHhdID0gKHVuc2lnbmVkIGNoYXIpcmVnOworCQl9CisJfQorCisJcmV0dXJuIHJldHZhbDsK K30KKwordm9pZCBhbmFsb2dpeF9kcF9zZXRfbGlua19iYW5kd2lkdGgoc3RydWN0IGFuYWxvZ2l4 X2RwX2RldmljZSAqZHAsIHUzMiBid3R5cGUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IGJ3dHlw ZTsKKwlpZiAoKGJ3dHlwZSA9PSBMSU5LX1JBVEVfMl83MEdCUFMpIHx8IChid3R5cGUgPT0gTElO S19SQVRFXzFfNjJHQlBTKSkKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhf RFBfTElOS19CV19TRVQpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX2dldF9saW5rX2JhbmR3aWR0 aChzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgdTMyICpid3R5cGUpCit7CisJdTMyIHJl ZzsKKworCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0xJTktfQldfU0VU KTsKKwkqYnd0eXBlID0gcmVnOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF9sYW5lX2NvdW50 KHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1MzIgY291bnQpCit7CisJdTMyIHJlZzsK KworCXJlZyA9IGNvdW50OworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X0xBTkVfQ09VTlRfU0VUKTsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9nZXRfbGFuZV9jb3VudChz dHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgdTMyICpjb3VudCkKK3sKKwl1MzIgcmVnOwor CisJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTEFORV9DT1VOVF9TRVQp OworCSpjb3VudCA9IHJlZzsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9lbmFibGVfZW5oYW5jZWRf bW9kZShzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpCit7CisJdTMy IHJlZzsKKworCWlmIChlbmFibGUpIHsKKwkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5B TE9HSVhfRFBfU1lTX0NUTF80KTsKKwkJcmVnIHw9IEVOSEFOQ0VEOworCQl3cml0ZWwocmVnLCBk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TWVNfQ1RMXzQpOworCX0gZWxzZSB7CisJCXJlZyA9 IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfNCk7CisJCXJlZyAmPSB+ RU5IQU5DRUQ7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19D VExfNCk7CisJfQorfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF90cmFpbmluZ19wYXR0ZXJuKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCWVudW0gcGF0dGVybl9zZXQgcGF0dGVy bikKK3sKKwl1MzIgcmVnOworCisJc3dpdGNoIChwYXR0ZXJuKSB7CisJY2FzZSBQUkJTNzoKKwkJ cmVnID0gU0NSQU1CTElOR19FTkFCTEUgfCBMSU5LX1FVQUxfUEFUVEVSTl9TRVRfUFJCUzc7CisJ CXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1RSQUlOSU5HX1BUTl9TRVQp OworCQlicmVhazsKKwljYXNlIEQxMF8yOgorCQlyZWcgPSBTQ1JBTUJMSU5HX0VOQUJMRSB8IExJ TktfUVVBTF9QQVRURVJOX1NFVF9EMTBfMjsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfVFJBSU5JTkdfUFROX1NFVCk7CisJCWJyZWFrOworCWNhc2UgVFJBSU5JTkdf UFROMToKKwkJcmVnID0gU0NSQU1CTElOR19ESVNBQkxFIHwgU1dfVFJBSU5JTkdfUEFUVEVSTl9T RVRfUFROMTsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVFJBSU5J TkdfUFROX1NFVCk7CisJCWJyZWFrOworCWNhc2UgVFJBSU5JTkdfUFROMjoKKwkJcmVnID0gU0NS QU1CTElOR19ESVNBQkxFIHwgU1dfVFJBSU5JTkdfUEFUVEVSTl9TRVRfUFROMjsKKwkJd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVFJBSU5JTkdfUFROX1NFVCk7CisJCWJy ZWFrOworCWNhc2UgRFBfTk9ORToKKwkJcmVnID0gU0NSQU1CTElOR19FTkFCTEUgfAorCQkJTElO S19RVUFMX1BBVFRFUk5fU0VUX0RJU0FCTEUgfAorCQkJU1dfVFJBSU5JTkdfUEFUVEVSTl9TRVRf Tk9STUFMOworCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9UUkFJTklO R19QVE5fU0VUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lk IGFuYWxvZ2l4X2RwX3NldF9sYW5lMF9wcmVfZW1waGFzaXMoc3RydWN0IGFuYWxvZ2l4X2RwX2Rl dmljZSAqZHAsIHUzMiBsZXZlbCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoZHAtPnJl Z19iYXNlICsgQU5BTE9HSVhfRFBfTE4wX0xJTktfVFJBSU5JTkdfQ1RMKTsKKwlyZWcgJj0gflBS RV9FTVBIQVNJU19TRVRfTUFTSzsKKwlyZWcgfD0gbGV2ZWwgPDwgUFJFX0VNUEhBU0lTX1NFVF9T SElGVDsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9MTjBfTElOS19U UkFJTklOR19DVEwpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF9sYW5lMV9wcmVfZW1waGFz aXMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsIHUzMiBsZXZlbCkKK3sKKwl1MzIgcmVn OworCisJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTE4xX0xJTktfVFJB SU5JTkdfQ1RMKTsKKwlyZWcgJj0gflBSRV9FTVBIQVNJU19TRVRfTUFTSzsKKwlyZWcgfD0gbGV2 ZWwgPDwgUFJFX0VNUEhBU0lTX1NFVF9TSElGVDsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBBTkFMT0dJWF9EUF9MTjFfTElOS19UUkFJTklOR19DVEwpOworfQorCit2b2lkIGFuYWxvZ2l4 X2RwX3NldF9sYW5lMl9wcmVfZW1waGFzaXMoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAs IHUzMiBsZXZlbCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfTE4yX0xJTktfVFJBSU5JTkdfQ1RMKTsKKwlyZWcgJj0gflBSRV9FTVBIQVNJ U19TRVRfTUFTSzsKKwlyZWcgfD0gbGV2ZWwgPDwgUFJFX0VNUEhBU0lTX1NFVF9TSElGVDsKKwl3 cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9MTjJfTElOS19UUkFJTklOR19D VEwpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF9sYW5lM19wcmVfZW1waGFzaXMoc3RydWN0 IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsIHUzMiBsZXZlbCkKK3sKKwl1MzIgcmVnOworCisJcmVn ID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTE4zX0xJTktfVFJBSU5JTkdfQ1RM KTsKKwlyZWcgJj0gflBSRV9FTVBIQVNJU19TRVRfTUFTSzsKKwlyZWcgfD0gbGV2ZWwgPDwgUFJF X0VNUEhBU0lTX1NFVF9TSElGVDsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJ WF9EUF9MTjNfTElOS19UUkFJTklOR19DVEwpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF9s YW5lMF9saW5rX3RyYWluaW5nKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCQl1 MzIgdHJhaW5pbmdfbGFuZSkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gdHJhaW5pbmdfbGFuZTsK Kwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9MTjBfTElOS19UUkFJTklO R19DVEwpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF9sYW5lMV9saW5rX3RyYWluaW5nKHN0 cnVjdCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwLAorCQkJCQl1MzIgdHJhaW5pbmdfbGFuZSkKK3sK Kwl1MzIgcmVnOworCisJcmVnID0gdHJhaW5pbmdfbGFuZTsKKwl3cml0ZWwocmVnLCBkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9MTjFfTElOS19UUkFJTklOR19DVEwpOworfQorCit2b2lkIGFu YWxvZ2l4X2RwX3NldF9sYW5lMl9saW5rX3RyYWluaW5nKHN0cnVjdCBhbmFsb2dpeF9kcF9kZXZp Y2UgKmRwLAorCQkJCQkgdTMyIHRyYWluaW5nX2xhbmUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9 IHRyYWluaW5nX2xhbmU7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBf TE4yX0xJTktfVFJBSU5JTkdfQ1RMKTsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9zZXRfbGFuZTNf bGlua190cmFpbmluZyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJCQkJdTMyIHRy YWluaW5nX2xhbmUpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHRyYWluaW5nX2xhbmU7CisJd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTE4zX0xJTktfVFJBSU5JTkdfQ1RM KTsKK30KKwordTMyIGFuYWxvZ2l4X2RwX2dldF9sYW5lMF9saW5rX3RyYWluaW5nKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9MTjBfTElOS19UUkFJTklOR19DVEwpOworCXJldHVybiBy ZWc7Cit9CisKK3UzMiBhbmFsb2dpeF9kcF9nZXRfbGFuZTFfbGlua190cmFpbmluZyhzdHJ1Y3Qg YW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoZHAt PnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTE4xX0xJTktfVFJBSU5JTkdfQ1RMKTsKKwlyZXR1cm4g cmVnOworfQorCit1MzIgYW5hbG9naXhfZHBfZ2V0X2xhbmUyX2xpbmtfdHJhaW5pbmcoc3RydWN0 IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKGRw LT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX0xOMl9MSU5LX1RSQUlOSU5HX0NUTCk7CisJcmV0dXJu IHJlZzsKK30KKwordTMyIGFuYWxvZ2l4X2RwX2dldF9sYW5lM19saW5rX3RyYWluaW5nKHN0cnVj dCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9MTjNfTElOS19UUkFJTklOR19DVEwpOworCXJldHVy biByZWc7Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfcmVzZXRfbWFjcm8oc3RydWN0IGFuYWxvZ2l4 X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsKKworCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEFOQUxPR0lYX0RQX1BIWV9URVNUKTsKKwlyZWcgfD0gTUFDUk9fUlNUOworCXdyaXRlbChy ZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1BIWV9URVNUKTsKKworCS8qIDEwIHVzIGlz IHRoZSBtaW5pbXVtIHJlc2V0IHRpbWUuICovCisJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisKKwly ZWcgJj0gfk1BQ1JPX1JTVDsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9E UF9QSFlfVEVTVCk7Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfaW5pdF92aWRlbyhzdHJ1Y3QgYW5h bG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gVlNZTkNfREVUIHwg VklEX0ZPUk1BVF9DSEcgfCBWSURfQ0xLX0NIRzsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBBTkFMT0dJWF9EUF9DT01NT05fSU5UX1NUQV8xKTsKKworCXJlZyA9IDB4MDsKKwl3cml0ZWwo cmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TWVNfQ1RMXzEpOworCisJcmVnID0gQ0hB X0NSSSg0KSB8IENIQV9DVFJMOworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lY X0RQX1NZU19DVExfMik7CisKKwlyZWcgPSAweDA7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNl ICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8zKTsKKworCXJlZyA9IFZJRF9IUkVTX1RIKDIpIHwgVklE X1ZSRVNfVEgoMCk7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklE RU9fQ1RMXzgpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF92aWRlb19jb2xvcl9mb3JtYXQo c3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsKKworCS8qIENvbmZp Z3VyZSB0aGUgaW5wdXQgY29sb3IgZGVwdGgsIGNvbG9yIHNwYWNlLCBkeW5hbWljIHJhbmdlICov CisJcmVnID0gKGRwLT52aWRlb19pbmZvLT5keW5hbWljX3JhbmdlIDw8IElOX0RfUkFOR0VfU0hJ RlQpIHwKKwkJKGRwLT52aWRlb19pbmZvLT5jb2xvcl9kZXB0aCA8PCBJTl9CUENfU0hJRlQpIHwK KwkJKGRwLT52aWRlb19pbmZvLT5jb2xvcl9zcGFjZSA8PCBJTl9DT0xPUl9GX1NISUZUKTsKKwl3 cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9WSURFT19DVExfMik7CisKKwkv KiBTZXQgSW5wdXQgQ29sb3IgWUNiQ3IgQ29lZmZpY2llbnRzIHRvIElUVTYwMSBvciBJVFU3MDkg Ki8KKwlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9WSURFT19DVExfMyk7 CisJcmVnICY9IH5JTl9ZQ19DT0VGRklfTUFTSzsKKwlpZiAoZHAtPnZpZGVvX2luZm8tPnljYmNy X2NvZWZmKQorCQlyZWcgfD0gSU5fWUNfQ09FRkZJX0lUVTcwOTsKKwllbHNlCisJCXJlZyB8PSBJ Tl9ZQ19DT0VGRklfSVRVNjAxOworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lY X0RQX1ZJREVPX0NUTF8zKTsKK30KKworaW50IGFuYWxvZ2l4X2RwX2lzX3NsYXZlX3ZpZGVvX3N0 cmVhbV9jbG9ja19vbihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVn OworCisJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8xKTsK Kwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TWVNfQ1RMXzEpOworCisJ cmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8xKTsKKworCWlm ICghKHJlZyAmIERFVF9TVEEpKSB7CisJCWRldl9kYmcoZHAtPmRldiwgIklucHV0IHN0cmVhbSBj bG9jayBub3QgZGV0ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVnID0g cmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8yKTsKKwl3cml0ZWwocmVn LCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TWVNfQ1RMXzIpOworCisJcmVnID0gcmVhZGwo ZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8yKTsKKwlkZXZfZGJnKGRwLT5kZXYs ICJ3YWl0IFNZU19DVExfMi5cbiIpOworCisJaWYgKHJlZyAmIENIQV9TVEEpIHsKKwkJZGV2X2Ri ZyhkcC0+ZGV2LCAiSW5wdXQgc3RyZWFtIGNsayBpcyBjaGFuZ2luZ1xuIik7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX3NldF92aWRl b19jcl9tbihzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCwKKwkJZW51bSBjbG9ja19yZWNv dmVyeV9tX3ZhbHVlX3R5cGUgdHlwZSwKKwkJdTMyIG1fdmFsdWUsCisJCXUzMiBuX3ZhbHVlKQor eworCXUzMiByZWc7CisKKwlpZiAodHlwZSA9PSBSRUdJU1RFUl9NKSB7CisJCXJlZyA9IHJlYWRs KGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfNCk7CisJCXJlZyB8PSBGSVhfTV9W SUQ7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfNCk7 CisJCXJlZyA9IG1fdmFsdWUgJiAweGZmOworCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBB TkFMT0dJWF9EUF9NX1ZJRF8wKTsKKwkJcmVnID0gKG1fdmFsdWUgPj4gOCkgJiAweGZmOworCQl3 cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9NX1ZJRF8xKTsKKwkJcmVnID0g KG1fdmFsdWUgPj4gMTYpICYgMHhmZjsKKwkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5B TE9HSVhfRFBfTV9WSURfMik7CisKKwkJcmVnID0gbl92YWx1ZSAmIDB4ZmY7CisJCXdyaXRlbChy ZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX05fVklEXzApOworCQlyZWcgPSAobl92YWx1 ZSA+PiA4KSAmIDB4ZmY7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQ X05fVklEXzEpOworCQlyZWcgPSAobl92YWx1ZSA+PiAxNikgJiAweGZmOworCQl3cml0ZWwocmVn LCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9OX1ZJRF8yKTsKKwl9IGVsc2UgIHsKKwkJcmVn ID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF80KTsKKwkJcmVnICY9 IH5GSVhfTV9WSUQ7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZ U19DVExfNCk7CisKKwkJd3JpdGVsKDB4MDAsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX05f VklEXzApOworCQl3cml0ZWwoMHg4MCwgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfTl9WSURf MSk7CisJCXdyaXRlbCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9OX1ZJRF8yKTsK Kwl9Cit9CisKK3ZvaWQgYW5hbG9naXhfZHBfc2V0X3ZpZGVvX3RpbWluZ19tb2RlKHN0cnVjdCBh bmFsb2dpeF9kcF9kZXZpY2UgKmRwLCB1MzIgdHlwZSkKK3sKKwl1MzIgcmVnOworCisJaWYgKHR5 cGUgPT0gVklERU9fVElNSU5HX0ZST01fQ0FQVFVSRSkgeworCQlyZWcgPSByZWFkbChkcC0+cmVn X2Jhc2UgKyBBTkFMT0dJWF9EUF9WSURFT19DVExfMTApOworCQlyZWcgJj0gfkZPUk1BVF9TRUw7 CisJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1ZJREVPX0NUTF8xMCk7 CisJfSBlbHNlIHsKKwkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklE RU9fQ1RMXzEwKTsKKwkJcmVnIHw9IEZPUk1BVF9TRUw7CisJCXdyaXRlbChyZWcsIGRwLT5yZWdf YmFzZSArIEFOQUxPR0lYX0RQX1ZJREVPX0NUTF8xMCk7CisJfQorfQorCit2b2lkIGFuYWxvZ2l4 X2RwX2VuYWJsZV92aWRlb19tYXN0ZXIoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHAsIGJv b2wgZW5hYmxlKQoreworCXUzMiByZWc7CisKKwlpZiAoZW5hYmxlKSB7CisJCXJlZyA9IHJlYWRs KGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NPQ19HRU5FUkFMX0NUTCk7CisJCXJlZyAmPSB+ VklERU9fTU9ERV9NQVNLOworCQlyZWcgfD0gVklERU9fTUFTVEVSX01PREVfRU4gfCBWSURFT19N T0RFX01BU1RFUl9NT0RFOworCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9E UF9TT0NfR0VORVJBTF9DVEwpOworCX0gZWxzZSB7CisJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEFOQUxPR0lYX0RQX1NPQ19HRU5FUkFMX0NUTCk7CisJCXJlZyAmPSB+VklERU9fTU9ERV9N QVNLOworCQlyZWcgfD0gVklERU9fTU9ERV9TTEFWRV9NT0RFOworCQl3cml0ZWwocmVnLCBkcC0+ cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TT0NfR0VORVJBTF9DVEwpOworCX0KK30KKwordm9pZCBh bmFsb2dpeF9kcF9zdGFydF92aWRlbyhzdHJ1Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sK Kwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklE RU9fQ1RMXzEpOworCXJlZyB8PSBWSURFT19FTjsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBBTkFMT0dJWF9EUF9WSURFT19DVExfMSk7Cit9CisKK2ludCBhbmFsb2dpeF9kcF9pc192aWRl b19zdHJlYW1fb24oc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsK KworCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfMyk7CisJ d3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfU1lTX0NUTF8zKTsKKworCXJl ZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1NZU19DVExfMyk7CisJaWYgKCEo cmVnICYgU1RSTV9WQUxJRCkpIHsKKwkJZGV2X2RiZyhkcC0+ZGV2LCAiSW5wdXQgdmlkZW8gc3Ry ZWFtIGlzIG5vdCBkZXRlY3RlZC5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9jb25maWdfdmlkZW9fc2xhdmVfbW9kZShzdHJ1 Y3QgYW5hbG9naXhfZHBfZGV2aWNlICpkcCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gcmVhZGwo ZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfRlVOQ19FTl8xKTsKKwlyZWcgJj0gfihNQVNURVJf VklEX0ZVTkNfRU5fTnxTTEFWRV9WSURfRlVOQ19FTl9OKTsKKwlyZWcgfD0gTUFTVEVSX1ZJRF9G VU5DX0VOX047CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfRlVOQ19F Tl8xKTsKKworCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1ZJREVPX0NU TF8xMCk7CisJcmVnICY9IH5JTlRFUkFDRV9TQ0FOX0NGRzsKKwlyZWcgfD0gKGRwLT52aWRlb19p bmZvLT5pbnRlcmxhY2VkIDw8IDIpOworCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEFOQUxP R0lYX0RQX1ZJREVPX0NUTF8xMCk7CisKKwlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBBTkFM T0dJWF9EUF9WSURFT19DVExfMTApOworCXJlZyAmPSB+VlNZTkNfUE9MQVJJVFlfQ0ZHOworCXJl ZyB8PSAoZHAtPnZpZGVvX2luZm8tPnZfc3luY19wb2xhcml0eSA8PCAxKTsKKwl3cml0ZWwocmVn LCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9WSURFT19DVExfMTApOworCisJcmVnID0gcmVh ZGwoZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklERU9fQ1RMXzEwKTsKKwlyZWcgJj0gfkhT WU5DX1BPTEFSSVRZX0NGRzsKKwlyZWcgfD0gKGRwLT52aWRlb19pbmZvLT5oX3N5bmNfcG9sYXJp dHkgPDwgMCk7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgQU5BTE9HSVhfRFBfVklERU9f Q1RMXzEwKTsKKworCXJlZyA9IEFVRElPX01PREVfU1BESUZfTU9ERSB8IFZJREVPX01PREVfU0xB VkVfTU9ERTsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9TT0NfR0VO RVJBTF9DVEwpOworfQorCit2b2lkIGFuYWxvZ2l4X2RwX2VuYWJsZV9zY3JhbWJsaW5nKHN0cnVj dCBhbmFsb2dpeF9kcF9kZXZpY2UgKmRwKQoreworCXUzMiByZWc7CisKKwlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9EUF9UUkFJTklOR19QVE5fU0VUKTsKKwlyZWcgJj0gflND UkFNQkxJTkdfRElTQUJMRTsKKwl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBBTkFMT0dJWF9E UF9UUkFJTklOR19QVE5fU0VUKTsKK30KKwordm9pZCBhbmFsb2dpeF9kcF9kaXNhYmxlX3NjcmFt Ymxpbmcoc3RydWN0IGFuYWxvZ2l4X2RwX2RldmljZSAqZHApCit7CisJdTMyIHJlZzsKKworCXJl ZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEFOQUxPR0lYX0RQX1RSQUlOSU5HX1BUTl9TRVQpOwor CXJlZyB8PSBTQ1JBTUJMSU5HX0RJU0FCTEU7CisJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg QU5BTE9HSVhfRFBfVFJBSU5JTkdfUFROX1NFVCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL2V4eW5vc19kcF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvYW5h bG9naXgvYW5hbG9naXhfZHBfcmVnLmgKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20g ZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHBfcmVnLmgKcmVuYW1lIHRvIGRyaXZlcnMv Z3B1L2RybS9icmlkZ2UvYW5hbG9naXgvYW5hbG9naXhfZHBfcmVnLmgKaW5kZXggMmU5YmQwZS4u NzM4ZGI0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHBfcmVn LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9hbmFsb2dpeC9hbmFsb2dpeF9kcF9yZWcu aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBSZWdpc3RlciBkZWZpbml0aW9uIGZpbGUgZm9yIFNh bXN1bmcgRFAgZHJpdmVyCisgKiBSZWdpc3RlciBkZWZpbml0aW9uIGZpbGUgZm9yIEFuYWxvZ2l4 IERQIGNvcmUgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry b25pY3MgQ28uLCBMdGQuCiAgKiBBdXRob3I6IEppbmdvbyBIYW4gPGpnMS5oYW5Ac2Ftc3VuZy5j b20+CkBAIC05LDk2ICs5LDk2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbi4KICAqLwogCi0jaWZuZGVmIF9FWFlOT1NfRFBfUkVHX0gKLSNkZWZpbmUgX0VY WU5PU19EUF9SRUdfSAotCi0jZGVmaW5lIEVYWU5PU19EUF9UWF9TV19SRVNFVAkJCTB4MTQKLSNk ZWZpbmUgRVhZTk9TX0RQX0ZVTkNfRU5fMQkJCTB4MTgKLSNkZWZpbmUgRVhZTk9TX0RQX0ZVTkNf RU5fMgkJCTB4MUMKLSNkZWZpbmUgRVhZTk9TX0RQX1ZJREVPX0NUTF8xCQkJMHgyMAotI2RlZmlu ZSBFWFlOT1NfRFBfVklERU9fQ1RMXzIJCQkweDI0Ci0jZGVmaW5lIEVYWU5PU19EUF9WSURFT19D VExfMwkJCTB4MjgKLQotI2RlZmluZSBFWFlOT1NfRFBfVklERU9fQ1RMXzgJCQkweDNDCi0jZGVm aW5lIEVYWU5PU19EUF9WSURFT19DVExfMTAJCQkweDQ0Ci0KLSNkZWZpbmUgRVhZTk9TX0RQX0xB TkVfTUFQCQkJMHgzNUMKLQotI2RlZmluZSBFWFlOT1NfRFBfQU5BTE9HX0NUTF8xCQkJMHgzNzAK LSNkZWZpbmUgRVhZTk9TX0RQX0FOQUxPR19DVExfMgkJCTB4Mzc0Ci0jZGVmaW5lIEVYWU5PU19E UF9BTkFMT0dfQ1RMXzMJCQkweDM3OAotI2RlZmluZSBFWFlOT1NfRFBfUExMX0ZJTFRFUl9DVExf MQkJMHgzN0MKLSNkZWZpbmUgRVhZTk9TX0RQX1RYX0FNUF9UVU5JTkdfQ1RMCQkweDM4MAotCi0j ZGVmaW5lIEVYWU5PU19EUF9BVVhfSFdfUkVUUllfQ1RMCQkweDM5MAotCi0jZGVmaW5lIEVYWU5P U19EUF9DT01NT05fSU5UX1NUQV8xCQkweDNDNAotI2RlZmluZSBFWFlOT1NfRFBfQ09NTU9OX0lO VF9TVEFfMgkJMHgzQzgKLSNkZWZpbmUgRVhZTk9TX0RQX0NPTU1PTl9JTlRfU1RBXzMJCTB4M0ND Ci0jZGVmaW5lIEVYWU5PU19EUF9DT01NT05fSU5UX1NUQV80CQkweDNEMAotI2RlZmluZSBFWFlO T1NfRFBfSU5UX1NUQQkJCTB4M0RDCi0jZGVmaW5lIEVYWU5PU19EUF9DT01NT05fSU5UX01BU0tf MQkJMHgzRTAKLSNkZWZpbmUgRVhZTk9TX0RQX0NPTU1PTl9JTlRfTUFTS18yCQkweDNFNAotI2Rl ZmluZSBFWFlOT1NfRFBfQ09NTU9OX0lOVF9NQVNLXzMJCTB4M0U4Ci0jZGVmaW5lIEVYWU5PU19E UF9DT01NT05fSU5UX01BU0tfNAkJMHgzRUMKLSNkZWZpbmUgRVhZTk9TX0RQX0lOVF9TVEFfTUFT SwkJCTB4M0Y4Ci0jZGVmaW5lIEVYWU5PU19EUF9JTlRfQ1RMCQkJMHgzRkMKLQotI2RlZmluZSBF WFlOT1NfRFBfU1lTX0NUTF8xCQkJMHg2MDAKLSNkZWZpbmUgRVhZTk9TX0RQX1NZU19DVExfMgkJ CTB4NjA0Ci0jZGVmaW5lIEVYWU5PU19EUF9TWVNfQ1RMXzMJCQkweDYwOAotI2RlZmluZSBFWFlO T1NfRFBfU1lTX0NUTF80CQkJMHg2MEMKLQotI2RlZmluZSBFWFlOT1NfRFBfUEtUX1NFTkRfQ1RM CQkJMHg2NDAKLSNkZWZpbmUgRVhZTk9TX0RQX0hEQ1BfQ1RMCQkJMHg2NDgKLQotI2RlZmluZSBF WFlOT1NfRFBfTElOS19CV19TRVQJCQkweDY4MAotI2RlZmluZSBFWFlOT1NfRFBfTEFORV9DT1VO VF9TRVQJCTB4Njg0Ci0jZGVmaW5lIEVYWU5PU19EUF9UUkFJTklOR19QVE5fU0VUCQkweDY4OAot I2RlZmluZSBFWFlOT1NfRFBfTE4wX0xJTktfVFJBSU5JTkdfQ1RMCQkweDY4QwotI2RlZmluZSBF WFlOT1NfRFBfTE4xX0xJTktfVFJBSU5JTkdfQ1RMCQkweDY5MAotI2RlZmluZSBFWFlOT1NfRFBf TE4yX0xJTktfVFJBSU5JTkdfQ1RMCQkweDY5NAotI2RlZmluZSBFWFlOT1NfRFBfTE4zX0xJTktf VFJBSU5JTkdfQ1RMCQkweDY5OAotCi0jZGVmaW5lIEVYWU5PU19EUF9ERUJVR19DVEwJCQkweDZD MAotI2RlZmluZSBFWFlOT1NfRFBfSFBEX0RFR0xJVENIX0wJCTB4NkM0Ci0jZGVmaW5lIEVYWU5P U19EUF9IUERfREVHTElUQ0hfSAkJMHg2QzgKLSNkZWZpbmUgRVhZTk9TX0RQX0xJTktfREVCVUdf Q1RMCQkweDZFMAotCi0jZGVmaW5lIEVYWU5PU19EUF9NX1ZJRF8wCQkJMHg3MDAKLSNkZWZpbmUg RVhZTk9TX0RQX01fVklEXzEJCQkweDcwNAotI2RlZmluZSBFWFlOT1NfRFBfTV9WSURfMgkJCTB4 NzA4Ci0jZGVmaW5lIEVYWU5PU19EUF9OX1ZJRF8wCQkJMHg3MEMKLSNkZWZpbmUgRVhZTk9TX0RQ X05fVklEXzEJCQkweDcxMAotI2RlZmluZSBFWFlOT1NfRFBfTl9WSURfMgkJCTB4NzE0Ci0KLSNk ZWZpbmUgRVhZTk9TX0RQX1BMTF9DVEwJCQkweDcxQwotI2RlZmluZSBFWFlOT1NfRFBfUEhZX1BE CQkJMHg3MjAKLSNkZWZpbmUgRVhZTk9TX0RQX1BIWV9URVNUCQkJMHg3MjQKLQotI2RlZmluZSBF WFlOT1NfRFBfVklERU9fRklGT19USFJECQkweDczMAotI2RlZmluZSBFWFlOT1NfRFBfQVVESU9f TUFSR0lOCQkJMHg3M0MKLQotI2RlZmluZSBFWFlOT1NfRFBfTV9WSURfR0VOX0ZJTFRFUl9USAkJ MHg3NjQKLSNkZWZpbmUgRVhZTk9TX0RQX01fQVVEX0dFTl9GSUxURVJfVEgJCTB4Nzc4Ci0jZGVm aW5lIEVYWU5PU19EUF9BVVhfQ0hfU1RBCQkJMHg3ODAKLSNkZWZpbmUgRVhZTk9TX0RQX0FVWF9D SF9ERUZFUl9DVEwJCTB4Nzg4Ci0jZGVmaW5lIEVYWU5PU19EUF9BVVhfUlhfQ09NTQkJCTB4NzhD Ci0jZGVmaW5lIEVYWU5PU19EUF9CVUZGRVJfREFUQV9DVEwJCTB4NzkwCi0jZGVmaW5lIEVYWU5P U19EUF9BVVhfQ0hfQ1RMXzEJCQkweDc5NAotI2RlZmluZSBFWFlOT1NfRFBfQVVYX0FERFJfN18w CQkJMHg3OTgKLSNkZWZpbmUgRVhZTk9TX0RQX0FVWF9BRERSXzE1XzgJCQkweDc5QwotI2RlZmlu ZSBFWFlOT1NfRFBfQVVYX0FERFJfMTlfMTYJCTB4N0EwCi0jZGVmaW5lIEVYWU5PU19EUF9BVVhf Q0hfQ1RMXzIJCQkweDdBNAotCi0jZGVmaW5lIEVYWU5PU19EUF9CVUZfREFUQV8wCQkJMHg3QzAK LQotI2RlZmluZSBFWFlOT1NfRFBfU09DX0dFTkVSQUxfQ1RMCQkweDgwMAotCi0vKiBFWFlOT1Nf RFBfVFhfU1dfUkVTRVQgKi8KKyNpZm5kZWYgX0FOQUxPR0lYX0RQX1JFR19ICisjZGVmaW5lIF9B TkFMT0dJWF9EUF9SRUdfSAorCisjZGVmaW5lIEFOQUxPR0lYX0RQX1RYX1NXX1JFU0VUCQkJMHgx NAorI2RlZmluZSBBTkFMT0dJWF9EUF9GVU5DX0VOXzEJCQkweDE4CisjZGVmaW5lIEFOQUxPR0lY X0RQX0ZVTkNfRU5fMgkJCTB4MUMKKyNkZWZpbmUgQU5BTE9HSVhfRFBfVklERU9fQ1RMXzEJCQkw eDIwCisjZGVmaW5lIEFOQUxPR0lYX0RQX1ZJREVPX0NUTF8yCQkJMHgyNAorI2RlZmluZSBBTkFM T0dJWF9EUF9WSURFT19DVExfMwkJCTB4MjgKKworI2RlZmluZSBBTkFMT0dJWF9EUF9WSURFT19D VExfOAkJCTB4M0MKKyNkZWZpbmUgQU5BTE9HSVhfRFBfVklERU9fQ1RMXzEwCQkweDQ0CisKKyNk ZWZpbmUgQU5BTE9HSVhfRFBfTEFORV9NQVAJCQkweDM1QworCisjZGVmaW5lIEFOQUxPR0lYX0RQ X0FOQUxPR19DVExfMQkJMHgzNzAKKyNkZWZpbmUgQU5BTE9HSVhfRFBfQU5BTE9HX0NUTF8yCQkw eDM3NAorI2RlZmluZSBBTkFMT0dJWF9EUF9BTkFMT0dfQ1RMXzMJCTB4Mzc4CisjZGVmaW5lIEFO QUxPR0lYX0RQX1BMTF9GSUxURVJfQ1RMXzEJCTB4MzdDCisjZGVmaW5lIEFOQUxPR0lYX0RQX1RY X0FNUF9UVU5JTkdfQ1RMCQkweDM4MAorCisjZGVmaW5lIEFOQUxPR0lYX0RQX0FVWF9IV19SRVRS WV9DVEwJCTB4MzkwCisKKyNkZWZpbmUgQU5BTE9HSVhfRFBfQ09NTU9OX0lOVF9TVEFfMQkJMHgz QzQKKyNkZWZpbmUgQU5BTE9HSVhfRFBfQ09NTU9OX0lOVF9TVEFfMgkJMHgzQzgKKyNkZWZpbmUg QU5BTE9HSVhfRFBfQ09NTU9OX0lOVF9TVEFfMwkJMHgzQ0MKKyNkZWZpbmUgQU5BTE9HSVhfRFBf Q09NTU9OX0lOVF9TVEFfNAkJMHgzRDAKKyNkZWZpbmUgQU5BTE9HSVhfRFBfSU5UX1NUQQkJCTB4 M0RDCisjZGVmaW5lIEFOQUxPR0lYX0RQX0NPTU1PTl9JTlRfTUFTS18xCQkweDNFMAorI2RlZmlu ZSBBTkFMT0dJWF9EUF9DT01NT05fSU5UX01BU0tfMgkJMHgzRTQKKyNkZWZpbmUgQU5BTE9HSVhf RFBfQ09NTU9OX0lOVF9NQVNLXzMJCTB4M0U4CisjZGVmaW5lIEFOQUxPR0lYX0RQX0NPTU1PTl9J TlRfTUFTS180CQkweDNFQworI2RlZmluZSBBTkFMT0dJWF9EUF9JTlRfU1RBX01BU0sJCTB4M0Y4 CisjZGVmaW5lIEFOQUxPR0lYX0RQX0lOVF9DVEwJCQkweDNGQworCisjZGVmaW5lIEFOQUxPR0lY X0RQX1NZU19DVExfMQkJCTB4NjAwCisjZGVmaW5lIEFOQUxPR0lYX0RQX1NZU19DVExfMgkJCTB4 NjA0CisjZGVmaW5lIEFOQUxPR0lYX0RQX1NZU19DVExfMwkJCTB4NjA4CisjZGVmaW5lIEFOQUxP R0lYX0RQX1NZU19DVExfNAkJCTB4NjBDCisKKyNkZWZpbmUgQU5BTE9HSVhfRFBfUEtUX1NFTkRf Q1RMCQkweDY0MAorI2RlZmluZSBBTkFMT0dJWF9EUF9IRENQX0NUTAkJCTB4NjQ4CisKKyNkZWZp bmUgQU5BTE9HSVhfRFBfTElOS19CV19TRVQJCQkweDY4MAorI2RlZmluZSBBTkFMT0dJWF9EUF9M QU5FX0NPVU5UX1NFVAkJMHg2ODQKKyNkZWZpbmUgQU5BTE9HSVhfRFBfVFJBSU5JTkdfUFROX1NF VAkJMHg2ODgKKyNkZWZpbmUgQU5BTE9HSVhfRFBfTE4wX0xJTktfVFJBSU5JTkdfQ1RMCTB4NjhD CisjZGVmaW5lIEFOQUxPR0lYX0RQX0xOMV9MSU5LX1RSQUlOSU5HX0NUTAkweDY5MAorI2RlZmlu ZSBBTkFMT0dJWF9EUF9MTjJfTElOS19UUkFJTklOR19DVEwJMHg2OTQKKyNkZWZpbmUgQU5BTE9H SVhfRFBfTE4zX0xJTktfVFJBSU5JTkdfQ1RMCTB4Njk4CisKKyNkZWZpbmUgQU5BTE9HSVhfRFBf REVCVUdfQ1RMCQkJMHg2QzAKKyNkZWZpbmUgQU5BTE9HSVhfRFBfSFBEX0RFR0xJVENIX0wJCTB4 NkM0CisjZGVmaW5lIEFOQUxPR0lYX0RQX0hQRF9ERUdMSVRDSF9ICQkweDZDOAorI2RlZmluZSBB TkFMT0dJWF9EUF9MSU5LX0RFQlVHX0NUTAkJMHg2RTAKKworI2RlZmluZSBBTkFMT0dJWF9EUF9N X1ZJRF8wCQkJMHg3MDAKKyNkZWZpbmUgQU5BTE9HSVhfRFBfTV9WSURfMQkJCTB4NzA0CisjZGVm aW5lIEFOQUxPR0lYX0RQX01fVklEXzIJCQkweDcwOAorI2RlZmluZSBBTkFMT0dJWF9EUF9OX1ZJ RF8wCQkJMHg3MEMKKyNkZWZpbmUgQU5BTE9HSVhfRFBfTl9WSURfMQkJCTB4NzEwCisjZGVmaW5l IEFOQUxPR0lYX0RQX05fVklEXzIJCQkweDcxNAorCisjZGVmaW5lIEFOQUxPR0lYX0RQX1BMTF9D VEwJCQkweDcxQworI2RlZmluZSBBTkFMT0dJWF9EUF9QSFlfUEQJCQkweDcyMAorI2RlZmluZSBB TkFMT0dJWF9EUF9QSFlfVEVTVAkJCTB4NzI0CisKKyNkZWZpbmUgQU5BTE9HSVhfRFBfVklERU9f RklGT19USFJECQkweDczMAorI2RlZmluZSBBTkFMT0dJWF9EUF9BVURJT19NQVJHSU4JCTB4NzND CisKKyNkZWZpbmUgQU5BTE9HSVhfRFBfTV9WSURfR0VOX0ZJTFRFUl9USAkJMHg3NjQKKyNkZWZp bmUgQU5BTE9HSVhfRFBfTV9BVURfR0VOX0ZJTFRFUl9USAkJMHg3NzgKKyNkZWZpbmUgQU5BTE9H SVhfRFBfQVVYX0NIX1NUQQkJCTB4NzgwCisjZGVmaW5lIEFOQUxPR0lYX0RQX0FVWF9DSF9ERUZF Ul9DVEwJCTB4Nzg4CisjZGVmaW5lIEFOQUxPR0lYX0RQX0FVWF9SWF9DT01NCQkJMHg3OEMKKyNk ZWZpbmUgQU5BTE9HSVhfRFBfQlVGRkVSX0RBVEFfQ1RMCQkweDc5MAorI2RlZmluZSBBTkFMT0dJ WF9EUF9BVVhfQ0hfQ1RMXzEJCTB4Nzk0CisjZGVmaW5lIEFOQUxPR0lYX0RQX0FVWF9BRERSXzdf MAkJMHg3OTgKKyNkZWZpbmUgQU5BTE9HSVhfRFBfQVVYX0FERFJfMTVfOAkJMHg3OUMKKyNkZWZp bmUgQU5BTE9HSVhfRFBfQVVYX0FERFJfMTlfMTYJCTB4N0EwCisjZGVmaW5lIEFOQUxPR0lYX0RQ X0FVWF9DSF9DVExfMgkJMHg3QTQKKworI2RlZmluZSBBTkFMT0dJWF9EUF9CVUZfREFUQV8wCQkJ MHg3QzAKKworI2RlZmluZSBBTkFMT0dJWF9EUF9TT0NfR0VORVJBTF9DVEwJCTB4ODAwCisKKy8q IEFOQUxPR0lYX0RQX1RYX1NXX1JFU0VUICovCiAjZGVmaW5lIFJFU0VUX0RQX1RYCQkJCSgweDEg PDwgMCkKIAotLyogRVhZTk9TX0RQX0ZVTkNfRU5fMSAqLworLyogQU5BTE9HSVhfRFBfRlVOQ19F Tl8xICovCiAjZGVmaW5lIE1BU1RFUl9WSURfRlVOQ19FTl9OCQkJKDB4MSA8PCA3KQogI2RlZmlu ZSBTTEFWRV9WSURfRlVOQ19FTl9OCQkJKDB4MSA8PCA1KQogI2RlZmluZSBBVURfRklGT19GVU5D X0VOX04JCQkoMHgxIDw8IDQpCkBAIC0xMDcsMTcgKzEwNywxNyBAQAogI2RlZmluZSBDUkNfRlVO Q19FTl9OCQkJCSgweDEgPDwgMSkKICNkZWZpbmUgU1dfRlVOQ19FTl9OCQkJCSgweDEgPDwgMCkK IAotLyogRVhZTk9TX0RQX0ZVTkNfRU5fMiAqLworLyogQU5BTE9HSVhfRFBfRlVOQ19FTl8yICov CiAjZGVmaW5lIFNTQ19GVU5DX0VOX04JCQkJKDB4MSA8PCA3KQogI2RlZmluZSBBVVhfRlVOQ19F Tl9OCQkJCSgweDEgPDwgMikKICNkZWZpbmUgU0VSREVTX0ZJRk9fRlVOQ19FTl9OCQkJKDB4MSA8 PCAxKQogI2RlZmluZSBMU19DTEtfRE9NQUlOX0ZVTkNfRU5fTgkJCSgweDEgPDwgMCkKIAotLyog RVhZTk9TX0RQX1ZJREVPX0NUTF8xICovCisvKiBBTkFMT0dJWF9EUF9WSURFT19DVExfMSAqLwog I2RlZmluZSBWSURFT19FTgkJCQkoMHgxIDw8IDcpCiAjZGVmaW5lIEhEQ1BfVklERU9fTVVURQkJ CQkoMHgxIDw8IDYpCiAKLS8qIEVYWU5PU19EUF9WSURFT19DVExfMSAqLworLyogQU5BTE9HSVhf RFBfVklERU9fQ1RMXzEgKi8KICNkZWZpbmUgSU5fRF9SQU5HRV9NQVNLCQkJCSgweDEgPDwgNykK ICNkZWZpbmUgSU5fRF9SQU5HRV9TSElGVAkJCSg3KQogI2RlZmluZSBJTl9EX1JBTkdFX0NFQQkJ CQkoMHgxIDw8IDcpCkBAIC0xMzQsNyArMTM0LDcgQEAKICNkZWZpbmUgSU5fQ09MT1JfRl9ZQ0JD UjQyMgkJCSgweDEgPDwgMCkKICNkZWZpbmUgSU5fQ09MT1JfRl9SR0IJCQkJKDB4MCA8PCAwKQog Ci0vKiBFWFlOT1NfRFBfVklERU9fQ1RMXzMgKi8KKy8qIEFOQUxPR0lYX0RQX1ZJREVPX0NUTF8z ICovCiAjZGVmaW5lIElOX1lDX0NPRUZGSV9NQVNLCQkJKDB4MSA8PCA3KQogI2RlZmluZSBJTl9Z Q19DT0VGRklfU0hJRlQJCQkoNykKICNkZWZpbmUgSU5fWUNfQ09FRkZJX0lUVTcwOQkJCSgweDEg PDwgNykKQEAgLTE0NCwxNyArMTQ0LDE3IEBACiAjZGVmaW5lIFZJRF9DSEtfVVBEQVRFX1RZUEVf MQkJCSgweDEgPDwgNCkKICNkZWZpbmUgVklEX0NIS19VUERBVEVfVFlQRV8wCQkJKDB4MCA8PCA0 KQogCi0vKiBFWFlOT1NfRFBfVklERU9fQ1RMXzggKi8KKy8qIEFOQUxPR0lYX0RQX1ZJREVPX0NU TF84ICovCiAjZGVmaW5lIFZJRF9IUkVTX1RIKHgpCQkJCSgoKHgpICYgMHhmKSA8PCA0KQogI2Rl ZmluZSBWSURfVlJFU19USCh4KQkJCQkoKCh4KSAmIDB4ZikgPDwgMCkKIAotLyogRVhZTk9TX0RQ X1ZJREVPX0NUTF8xMCAqLworLyogQU5BTE9HSVhfRFBfVklERU9fQ1RMXzEwICovCiAjZGVmaW5l IEZPUk1BVF9TRUwJCQkJKDB4MSA8PCA0KQogI2RlZmluZSBJTlRFUkFDRV9TQ0FOX0NGRwkJCSgw eDEgPDwgMikKICNkZWZpbmUgVlNZTkNfUE9MQVJJVFlfQ0ZHCQkJKDB4MSA8PCAxKQogI2RlZmlu ZSBIU1lOQ19QT0xBUklUWV9DRkcJCQkoMHgxIDw8IDApCiAKLS8qIEVYWU5PU19EUF9MQU5FX01B UCAqLworLyogQU5BTE9HSVhfRFBfTEFORV9NQVAgKi8KICNkZWZpbmUgTEFORTNfTUFQX0xPR0lD X0xBTkVfMAkJCSgweDAgPDwgNikKICNkZWZpbmUgTEFORTNfTUFQX0xPR0lDX0xBTkVfMQkJCSgw eDEgPDwgNikKICNkZWZpbmUgTEFORTNfTUFQX0xPR0lDX0xBTkVfMgkJCSgweDIgPDwgNikKQEAg LTE3MiwzMCArMTcyLDMwIEBACiAjZGVmaW5lIExBTkUwX01BUF9MT0dJQ19MQU5FXzIJCQkoMHgy IDw8IDApCiAjZGVmaW5lIExBTkUwX01BUF9MT0dJQ19MQU5FXzMJCQkoMHgzIDw8IDApCiAKLS8q IEVYWU5PU19EUF9BTkFMT0dfQ1RMXzEgKi8KKy8qIEFOQUxPR0lYX0RQX0FOQUxPR19DVExfMSAq LwogI2RlZmluZSBUWF9URVJNSU5BTF9DVFJMXzUwX09ITQkJCSgweDEgPDwgNCkKIAotLyogRVhZ Tk9TX0RQX0FOQUxPR19DVExfMiAqLworLyogQU5BTE9HSVhfRFBfQU5BTE9HX0NUTF8yICovCiAj ZGVmaW5lIFNFTF8yNE0JCQkJCSgweDEgPDwgMykKICNkZWZpbmUgVFhfRFZERF9CSVRfMV8wNjI1 VgkJCSgweDQgPDwgMCkKIAotLyogRVhZTk9TX0RQX0FOQUxPR19DVExfMyAqLworLyogQU5BTE9H SVhfRFBfQU5BTE9HX0NUTF8zICovCiAjZGVmaW5lIERSSVZFX0RWRERfQklUXzFfMDYyNVYJCQko MHg0IDw8IDUpCiAjZGVmaW5lIFZDT19CSVRfNjAwX01JQ1JPCQkJKDB4NSA8PCAwKQogCi0vKiBF WFlOT1NfRFBfUExMX0ZJTFRFUl9DVExfMSAqLworLyogQU5BTE9HSVhfRFBfUExMX0ZJTFRFUl9D VExfMSAqLwogI2RlZmluZSBQRF9SSU5HX09TQwkJCQkoMHgxIDw8IDYpCiAjZGVmaW5lIEFVWF9U RVJNSU5BTF9DVFJMXzUwX09ITQkJKDB4MiA8PCA0KQogI2RlZmluZSBUWF9DVVIxXzJYCQkJCSgw eDEgPDwgMikKICNkZWZpbmUgVFhfQ1VSXzE2X01BCQkJCSgweDMgPDwgMCkKIAotLyogRVhZTk9T X0RQX1RYX0FNUF9UVU5JTkdfQ1RMICovCisvKiBBTkFMT0dJWF9EUF9UWF9BTVBfVFVOSU5HX0NU TCAqLwogI2RlZmluZSBDSDNfQU1QXzQwMF9NVgkJCQkoMHgwIDw8IDI0KQogI2RlZmluZSBDSDJf QU1QXzQwMF9NVgkJCQkoMHgwIDw8IDE2KQogI2RlZmluZSBDSDFfQU1QXzQwMF9NVgkJCQkoMHgw IDw8IDgpCiAjZGVmaW5lIENIMF9BTVBfNDAwX01WCQkJCSgweDAgPDwgMCkKIAotLyogRVhZTk9T X0RQX0FVWF9IV19SRVRSWV9DVEwgKi8KKy8qIEFOQUxPR0lYX0RQX0FVWF9IV19SRVRSWV9DVEwg Ki8KICNkZWZpbmUgQVVYX0JJVF9QRVJJT0RfRVhQRUNURURfREVMQVkoeCkJKCgoeCkgJiAweDcp IDw8IDgpCiAjZGVmaW5lIEFVWF9IV19SRVRSWV9JTlRFUlZBTF9NQVNLCQkoMHgzIDw8IDMpCiAj ZGVmaW5lIEFVWF9IV19SRVRSWV9JTlRFUlZBTF82MDBfTUlDUk9TRUNPTkRTCSgweDAgPDwgMykK QEAgLTIwNCw3ICsyMDQsNyBAQAogI2RlZmluZSBBVVhfSFdfUkVUUllfSU5URVJWQUxfMTgwMF9N SUNST1NFQ09ORFMJKDB4MyA8PCAzKQogI2RlZmluZSBBVVhfSFdfUkVUUllfQ09VTlRfU0VMKHgp CQkoKCh4KSAmIDB4NykgPDwgMCkKIAotLyogRVhZTk9TX0RQX0NPTU1PTl9JTlRfU1RBXzEgKi8K Ky8qIEFOQUxPR0lYX0RQX0NPTU1PTl9JTlRfU1RBXzEgKi8KICNkZWZpbmUgVlNZTkNfREVUCQkJ CSgweDEgPDwgNykKICNkZWZpbmUgUExMX0xPQ0tfQ0hHCQkJCSgweDEgPDwgNikKICNkZWZpbmUg U1BESUZfRVJSCQkJCSgweDEgPDwgNSkKQEAgLTIxNCwxOSArMjE0LDE5IEBACiAjZGVmaW5lIFZJ RF9DTEtfQ0hHCQkJCSgweDEgPDwgMSkKICNkZWZpbmUgU1dfSU5UCQkJCQkoMHgxIDw8IDApCiAK LS8qIEVYWU5PU19EUF9DT01NT05fSU5UX1NUQV8yICovCisvKiBBTkFMT0dJWF9EUF9DT01NT05f SU5UX1NUQV8yICovCiAjZGVmaW5lIEVOQ19FTl9DSEcJCQkJKDB4MSA8PCA2KQogI2RlZmluZSBI V19CS1NWX1JEWQkJCQkoMHgxIDw8IDMpCiAjZGVmaW5lIEhXX1NIQV9ET05FCQkJCSgweDEgPDwg MikKICNkZWZpbmUgSFdfQVVUSF9TVEFURV9DSEcJCQkoMHgxIDw8IDEpCiAjZGVmaW5lIEhXX0FV VEhfRE9ORQkJCQkoMHgxIDw8IDApCiAKLS8qIEVYWU5PU19EUF9DT01NT05fSU5UX1NUQV8zICov CisvKiBBTkFMT0dJWF9EUF9DT01NT05fSU5UX1NUQV8zICovCiAjZGVmaW5lIEFGSUZPX1VOREVS CQkJCSgweDEgPDwgNykKICNkZWZpbmUgQUZJRk9fT1ZFUgkJCQkoMHgxIDw8IDYpCiAjZGVmaW5l IFIwX0NIS19GTEFHCQkJCSgweDEgPDwgNSkKIAotLyogRVhZTk9TX0RQX0NPTU1PTl9JTlRfU1RB XzQgKi8KKy8qIEFOQUxPR0lYX0RQX0NPTU1PTl9JTlRfU1RBXzQgKi8KICNkZWZpbmUgUFNSX0FD VElWRQkJCQkoMHgxIDw8IDcpCiAjZGVmaW5lIFBTUl9JTkFDVElWRQkJCQkoMHgxIDw8IDYpCiAj ZGVmaW5lIFNQRElGX0JJX1BIQVNFX0VSUgkJCSgweDEgPDwgNSkKQEAgLTIzNCwyOSArMjM0LDI5 IEBACiAjZGVmaW5lIEhQRF9MT1NUCQkJCSgweDEgPDwgMSkKICNkZWZpbmUgUExVRwkJCQkJKDB4 MSA8PCAwKQogCi0vKiBFWFlOT1NfRFBfSU5UX1NUQSAqLworLyogQU5BTE9HSVhfRFBfSU5UX1NU QSAqLwogI2RlZmluZSBJTlRfSFBECQkJCQkoMHgxIDw8IDYpCiAjZGVmaW5lIEhXX1RSQUlOSU5H X0ZJTklTSAkJCSgweDEgPDwgNSkKICNkZWZpbmUgUlBMWV9SRUNFSVYJCQkJKDB4MSA8PCAxKQog I2RlZmluZSBBVVhfRVJSCQkJCQkoMHgxIDw8IDApCiAKLS8qIEVYWU5PU19EUF9JTlRfQ1RMICov CisvKiBBTkFMT0dJWF9EUF9JTlRfQ1RMICovCiAjZGVmaW5lIFNPRlRfSU5UX0NUUkwJCQkJKDB4 MSA8PCAyKQogI2RlZmluZSBJTlRfUE9MMQkJCQkoMHgxIDw8IDEpCiAjZGVmaW5lIElOVF9QT0ww CQkJCSgweDEgPDwgMCkKIAotLyogRVhZTk9TX0RQX1NZU19DVExfMSAqLworLyogQU5BTE9HSVhf RFBfU1lTX0NUTF8xICovCiAjZGVmaW5lIERFVF9TVEEJCQkJCSgweDEgPDwgMikKICNkZWZpbmUg Rk9SQ0VfREVUCQkJCSgweDEgPDwgMSkKICNkZWZpbmUgREVUX0NUUkwJCQkJKDB4MSA8PCAwKQog Ci0vKiBFWFlOT1NfRFBfU1lTX0NUTF8yICovCisvKiBBTkFMT0dJWF9EUF9TWVNfQ1RMXzIgKi8K ICNkZWZpbmUgQ0hBX0NSSSh4KQkJCQkoKCh4KSAmIDB4ZikgPDwgNCkKICNkZWZpbmUgQ0hBX1NU QQkJCQkJKDB4MSA8PCAyKQogI2RlZmluZSBGT1JDRV9DSEEJCQkJKDB4MSA8PCAxKQogI2RlZmlu ZSBDSEFfQ1RSTAkJCQkoMHgxIDw8IDApCiAKLS8qIEVYWU5PU19EUF9TWVNfQ1RMXzMgKi8KKy8q IEFOQUxPR0lYX0RQX1NZU19DVExfMyAqLwogI2RlZmluZSBIUERfU1RBVFVTCQkJCSgweDEgPDwg NikKICNkZWZpbmUgRl9IUEQJCQkJCSgweDEgPDwgNSkKICNkZWZpbmUgSFBEX0NUUkwJCQkJKDB4 MSA8PCA0KQpAQCAtMjY1LDEzICsyNjUsMTMgQEAKICNkZWZpbmUgRl9WQUxJRAkJCQkJKDB4MSA8 PCAxKQogI2RlZmluZSBWQUxJRF9DVFJMCQkJCSgweDEgPDwgMCkKIAotLyogRVhZTk9TX0RQX1NZ U19DVExfNCAqLworLyogQU5BTE9HSVhfRFBfU1lTX0NUTF80ICovCiAjZGVmaW5lIEZJWF9NX0FV RAkJCQkoMHgxIDw8IDQpCiAjZGVmaW5lIEVOSEFOQ0VECQkJCSgweDEgPDwgMykKICNkZWZpbmUg RklYX01fVklECQkJCSgweDEgPDwgMikKICNkZWZpbmUgTV9WSURfVVBEQVRFX0NUUkwJCQkoMHgz IDw8IDApCiAKLS8qIEVYWU5PU19EUF9UUkFJTklOR19QVE5fU0VUICovCisvKiBBTkFMT0dJWF9E UF9UUkFJTklOR19QVE5fU0VUICovCiAjZGVmaW5lIFNDUkFNQkxFUl9UWVBFCQkJCSgweDEgPDwg OSkKICNkZWZpbmUgSFdfTElOS19UUkFJTklOR19QQVRURVJOCQkoMHgxIDw8IDgpCiAjZGVmaW5l IFNDUkFNQkxJTkdfRElTQUJMRQkJCSgweDEgPDwgNSkKQEAgLTI4NSwyNCArMjg1LDI0IEBACiAj ZGVmaW5lIFNXX1RSQUlOSU5HX1BBVFRFUk5fU0VUX1BUTjEJCSgweDEgPDwgMCkKICNkZWZpbmUg U1dfVFJBSU5JTkdfUEFUVEVSTl9TRVRfTk9STUFMCQkoMHgwIDw8IDApCiAKLS8qIEVYWU5PU19E UF9MTjBfTElOS19UUkFJTklOR19DVEwgKi8KKy8qIEFOQUxPR0lYX0RQX0xOMF9MSU5LX1RSQUlO SU5HX0NUTCAqLwogI2RlZmluZSBQUkVfRU1QSEFTSVNfU0VUX01BU0sJCQkoMHgzIDw8IDMpCiAj ZGVmaW5lIFBSRV9FTVBIQVNJU19TRVRfU0hJRlQJCQkoMykKIAotLyogRVhZTk9TX0RQX0RFQlVH X0NUTCAqLworLyogQU5BTE9HSVhfRFBfREVCVUdfQ1RMICovCiAjZGVmaW5lIFBMTF9MT0NLCQkJ CSgweDEgPDwgNCkKICNkZWZpbmUgRl9QTExfTE9DSwkJCQkoMHgxIDw8IDMpCiAjZGVmaW5lIFBM TF9MT0NLX0NUUkwJCQkJKDB4MSA8PCAyKQogI2RlZmluZSBQTl9JTlYJCQkJCSgweDEgPDwgMCkK IAotLyogRVhZTk9TX0RQX1BMTF9DVEwgKi8KKy8qIEFOQUxPR0lYX0RQX1BMTF9DVEwgKi8KICNk ZWZpbmUgRFBfUExMX1BECQkJCSgweDEgPDwgNykKICNkZWZpbmUgRFBfUExMX1JFU0VUCQkJCSgw eDEgPDwgNikKICNkZWZpbmUgRFBfUExMX0xPT1BfQklUX0RFRkFVTFQJCQkoMHgxIDw8IDQpCiAj ZGVmaW5lIERQX1BMTF9SRUZfQklUXzFfMTI1MFYJCQkoMHg1IDw8IDApCiAjZGVmaW5lIERQX1BM TF9SRUZfQklUXzFfMjUwMFYJCQkoMHg3IDw8IDApCiAKLS8qIEVYWU5PU19EUF9QSFlfUEQgKi8K Ky8qIEFOQUxPR0lYX0RQX1BIWV9QRCAqLwogI2RlZmluZSBEUF9QSFlfUEQJCQkJKDB4MSA8PCA1 KQogI2RlZmluZSBBVVhfUEQJCQkJCSgweDEgPDwgNCkKICNkZWZpbmUgQ0gzX1BECQkJCQkoMHgx IDw8IDMpCkBAIC0zMTAsMjggKzMxMCwyOCBAQAogI2RlZmluZSBDSDFfUEQJCQkJCSgweDEgPDwg MSkKICNkZWZpbmUgQ0gwX1BECQkJCQkoMHgxIDw8IDApCiAKLS8qIEVYWU5PU19EUF9QSFlfVEVT VCAqLworLyogQU5BTE9HSVhfRFBfUEhZX1RFU1QgKi8KICNkZWZpbmUgTUFDUk9fUlNUCQkJCSgw eDEgPDwgNSkKICNkZWZpbmUgQ0gxX1RFU1QJCQkJKDB4MSA8PCAxKQogI2RlZmluZSBDSDBfVEVT VAkJCQkoMHgxIDw8IDApCiAKLS8qIEVYWU5PU19EUF9BVVhfQ0hfU1RBICovCisvKiBBTkFMT0dJ WF9EUF9BVVhfQ0hfU1RBICovCiAjZGVmaW5lIEFVWF9CVVNZCQkJCSgweDEgPDwgNCkKICNkZWZp bmUgQVVYX1NUQVRVU19NQVNLCQkJCSgweGYgPDwgMCkKIAotLyogRVhZTk9TX0RQX0FVWF9DSF9E RUZFUl9DVEwgKi8KKy8qIEFOQUxPR0lYX0RQX0FVWF9DSF9ERUZFUl9DVEwgKi8KICNkZWZpbmUg REVGRVJfQ1RSTF9FTgkJCQkoMHgxIDw8IDcpCiAjZGVmaW5lIERFRkVSX0NPVU5UKHgpCQkJCSgo KHgpICYgMHg3ZikgPDwgMCkKIAotLyogRVhZTk9TX0RQX0FVWF9SWF9DT01NICovCisvKiBBTkFM T0dJWF9EUF9BVVhfUlhfQ09NTSAqLwogI2RlZmluZSBBVVhfUlhfQ09NTV9JMkNfREVGRVIJCQko MHgyIDw8IDIpCiAjZGVmaW5lIEFVWF9SWF9DT01NX0FVWF9ERUZFUgkJCSgweDIgPDwgMCkKIAot LyogRVhZTk9TX0RQX0JVRkZFUl9EQVRBX0NUTCAqLworLyogQU5BTE9HSVhfRFBfQlVGRkVSX0RB VEFfQ1RMICovCiAjZGVmaW5lIEJVRl9DTFIJCQkJCSgweDEgPDwgNykKICNkZWZpbmUgQlVGX0RB VEFfQ09VTlQoeCkJCQkoKCh4KSAmIDB4MWYpIDw8IDApCiAKLS8qIEVYWU5PU19EUF9BVVhfQ0hf Q1RMXzEgKi8KKy8qIEFOQUxPR0lYX0RQX0FVWF9DSF9DVExfMSAqLwogI2RlZmluZSBBVVhfTEVO R1RIKHgpCQkJCSgoKHggLSAxKSAmIDB4ZikgPDwgNCkKICNkZWZpbmUgQVVYX1RYX0NPTU1fTUFT SwkJCSgweGYgPDwgMCkKICNkZWZpbmUgQVVYX1RYX0NPTU1fRFBfVFJBTlNBQ1RJT04JCSgweDEg PDwgMykKQEAgLTM0MCwyMCArMzQwLDIwIEBACiAjZGVmaW5lIEFVWF9UWF9DT01NX1dSSVRFCQkJ KDB4MCA8PCAwKQogI2RlZmluZSBBVVhfVFhfQ09NTV9SRUFECQkJKDB4MSA8PCAwKQogCi0vKiBF WFlOT1NfRFBfQVVYX0FERFJfN18wICovCisvKiBBTkFMT0dJWF9EUF9BVVhfQUREUl83XzAgKi8K ICNkZWZpbmUgQVVYX0FERFJfN18wKHgpCQkJCSgoKHgpID4+IDApICYgMHhmZikKIAotLyogRVhZ Tk9TX0RQX0FVWF9BRERSXzE1XzggKi8KKy8qIEFOQUxPR0lYX0RQX0FVWF9BRERSXzE1XzggKi8K ICNkZWZpbmUgQVVYX0FERFJfMTVfOCh4KQkJCSgoKHgpID4+IDgpICYgMHhmZikKIAotLyogRVhZ Tk9TX0RQX0FVWF9BRERSXzE5XzE2ICovCisvKiBBTkFMT0dJWF9EUF9BVVhfQUREUl8xOV8xNiAq LwogI2RlZmluZSBBVVhfQUREUl8xOV8xNih4KQkJCSgoKHgpID4+IDE2KSAmIDB4MGYpCiAKLS8q IEVYWU5PU19EUF9BVVhfQ0hfQ1RMXzIgKi8KKy8qIEFOQUxPR0lYX0RQX0FVWF9DSF9DVExfMiAq LwogI2RlZmluZSBBRERSX09OTFkJCQkJKDB4MSA8PCAxKQogI2RlZmluZSBBVVhfRU4JCQkJCSgw eDEgPDwgMCkKIAotLyogRVhZTk9TX0RQX1NPQ19HRU5FUkFMX0NUTCAqLworLyogQU5BTE9HSVhf RFBfU09DX0dFTkVSQUxfQ1RMICovCiAjZGVmaW5lIEFVRElPX01PREVfU1BESUZfTU9ERQkJCSgw eDEgPDwgOCkKICNkZWZpbmUgQVVESU9fTU9ERV9NQVNURVJfTU9ERQkJCSgweDAgPDwgOCkKICNk ZWZpbmUgTUFTVEVSX1ZJREVPX0lOVEVSTEFDRV9FTgkJKDB4MSA8PCA0KQpAQCAtMzYzLDQgKzM2 Myw0IEBACiAjZGVmaW5lIFZJREVPX01PREVfU0xBVkVfTU9ERQkJCSgweDEgPDwgMCkKICNkZWZp bmUgVklERU9fTU9ERV9NQVNURVJfTU9ERQkJCSgweDAgPDwgMCkKIAotI2VuZGlmIC8qIF9FWFlO T1NfRFBfUkVHX0ggKi8KKyNlbmRpZiAvKiBfQU5BTE9HSVhfRFBfUkVHX0ggKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9leHlu b3MvS2NvbmZpZwppbmRleCA4M2VmY2E5Li5iM2U5MGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vZXh5bm9zL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmln CkBAIC03MSw4ICs3MSw5IEBAIGNvbmZpZyBEUk1fRVhZTk9TX0RTSQogCSAgVGhpcyBlbmFibGVz IHN1cHBvcnQgZm9yIEV4eW5vcyBNSVBJLURTSSBkZXZpY2UuCiAKIGNvbmZpZyBEUk1fRVhZTk9T X0RQCi0JYm9vbCAiRGlzcGxheSBQb3J0IgorCWJvb2wgIkVYWU5PUyBzcGVjaWZpYyBleHRlbnNp b25zIGZvciBBbmFsb2dpeCBEUCBkcml2ZXIiCiAJZGVwZW5kcyBvbiBEUk1fRVhZTk9TX0ZJTUQg fHwgRFJNX0VYWU5PUzdfREVDT04KKwlzZWxlY3QgRFJNX0FOQUxPR0lYX0RQCiAJZGVmYXVsdCBE Uk1fRVhZTk9TCiAJc2VsZWN0IERSTV9QQU5FTAogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9leHlub3MvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL01ha2VmaWxl CmluZGV4IDY0OTY1MzIuLjUzMzE1MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlu b3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9NYWtlZmlsZQpAQCAtMTMs NyArMTMsNyBAQCBleHlub3Nkcm0tJChDT05GSUdfRFJNX0VYWU5PUzU0MzNfREVDT04pCSs9IGV4 eW5vczU0MzNfZHJtX2RlY29uLm8KIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TN19ERUNP TikJKz0gZXh5bm9zN19kcm1fZGVjb24ubwogZXh5bm9zZHJtLSQoQ09ORklHX0RSTV9FWFlOT1Nf RFBJKQkrPSBleHlub3NfZHJtX2RwaS5vCiBleHlub3Nkcm0tJChDT05GSUdfRFJNX0VYWU5PU19E U0kpCSs9IGV4eW5vc19kcm1fZHNpLm8KLWV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9TX0RQ KQkrPSBleHlub3NfZHBfY29yZS5vIGV4eW5vc19kcF9yZWcubworZXh5bm9zZHJtLSQoQ09ORklH X0RSTV9FWFlOT1NfRFApCSs9IGV4eW5vc19kcC5vCiBleHlub3Nkcm0tJChDT05GSUdfRFJNX0VY WU5PU19NSVhFUikJKz0gZXh5bm9zX21peGVyLm8KIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZ Tk9TX0hETUkpCSs9IGV4eW5vc19oZG1pLm8KIGV4eW5vc2RybS0kKENPTkZJR19EUk1fRVhZTk9T X1ZJREkpCSs9IGV4eW5vc19kcm1fdmlkaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHAuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJkNjEwCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHAuYwpAQCAtMCwwICsxLDMyOCBA QAorLyoKKyAqIFNhbXN1bmcgU29DIERQIChEaXNwbGF5IFBvcnQpIGludGVyZmFjZSBkcml2ZXIu CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQu CisgKiBBdXRob3I6IEppbmdvbyBIYW4gPGpnMS5oYW5Ac2Ftc3VuZy5jb20+CisgKgorICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+ CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cisj aW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDx2aWRlby9vZl9kaXNwbGF5X3Rp bWluZy5oPgorI2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSA8ZHJt L2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Ny dGNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjaW5jbHVkZSA8ZHJt L2JyaWRnZS9hbmFsb2dpeF9kcC5oPgorI2luY2x1ZGUgPGRybS9leHlub3NfZHJtLmg+CisKKyNp bmNsdWRlICJleHlub3NfZHJtX2NydGMuaCIKKworI2RlZmluZSB0b19kcChubSkJY29udGFpbmVy X29mKG5tLCBzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSwgbm0pCisKK3N0cnVjdCBleHlub3NfZHBf ZGV2aWNlIHsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgICAgICAgICBlbmNvZGVyOworCXN0cnVjdCBk cm1fY29ubmVjdG9yICAgICAgIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSAgICAgICAg ICAqcHRuX2JyaWRnZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAgICAgICAgICAqZHJtX2RldjsKKwlz dHJ1Y3QgZGV2aWNlICAgICAgICAgICAgICAqZGV2OworCisJc3RydWN0IGV4eW5vc19kcm1fcGFu ZWxfaW5mbyBwcml2OworCXN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgcGxhdF9kYXRhOwor fTsKKworaW50IGV4eW5vc19kcF9jcnRjX2Nsb2NrX2VuYWJsZShzdHJ1Y3QgYW5hbG9naXhfZHBf cGxhdF9kYXRhICpwbGF0X2RhdGEsCisJCQkJYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGV4eW5v c19kcF9kZXZpY2UgKmRwID0gdG9fZHAocGxhdF9kYXRhKTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXIgPSAmZHAtPmVuY29kZXI7CisJc3RydWN0IGV4eW5vc19kcm1fY3J0YyAqY3J0YzsK KworCWlmICghZW5jb2RlcikKKwkJcmV0dXJuIC0xOworCisJY3J0YyA9IHRvX2V4eW5vc19jcnRj KGVuY29kZXItPmNydGMpOworCWlmIChjcnRjICYmIGNydGMtPm9wcyAmJiBjcnRjLT5vcHMtPmNs b2NrX2VuYWJsZSkKKwkJY3J0Yy0+b3BzLT5jbG9ja19lbmFibGUoY3J0YywgZW5hYmxlKTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4eW5vc19kcF9wb3dlcm9uKHN0cnVjdCBhbmFs b2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YSkKK3sKKwlyZXR1cm4gZXh5bm9zX2RwX2NydGNf Y2xvY2tfZW5hYmxlKHBsYXRfZGF0YSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX2Rw X3Bvd2Vyb2ZmKHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YSkKK3sKKwly ZXR1cm4gZXh5bm9zX2RwX2NydGNfY2xvY2tfZW5hYmxlKHBsYXRfZGF0YSwgZmFsc2UpOworfQor CitzdGF0aWMgaW50IGV4eW5vc19kcF9nZXRfbW9kZXMoc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRf ZGF0YSAqcGxhdF9kYXRhKQoreworCXN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCA9IHRvX2Rw KHBsYXRfZGF0YSk7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZkcC0+Y29u bmVjdG9yOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCWludCBudW1fbW9kZXMg PSAwOworCisJaWYgKGRwLT5wbGF0X2RhdGEucGFuZWwpCisJCXJldHVybiBudW1fbW9kZXM7CisK Kwltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKKwlpZiAoIW1vZGUpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY3JlYXRlIGEgbmV3IGRpc3BsYXkgbW9kZS5cbiIpOwor CQlyZXR1cm4gbnVtX21vZGVzOworCX0KKworCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21v ZGUoJmRwLT5wcml2LnZtLCBtb2RlKTsKKwltb2RlLT53aWR0aF9tbSA9IGRwLT5wcml2LndpZHRo X21tOworCW1vZGUtPmhlaWdodF9tbSA9IGRwLT5wcml2LmhlaWdodF9tbTsKKwljb25uZWN0b3It PmRpc3BsYXlfaW5mby53aWR0aF9tbSA9IG1vZGUtPndpZHRoX21tOworCWNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9tbTsKKworCW1vZGUtPnR5cGUgPSBE Uk1fTU9ERV9UWVBFX0RSSVZFUiB8IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOworCWRybV9tb2Rl X3NldF9uYW1lKG1vZGUpOworCWRybV9tb2RlX3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsK KworCXJldHVybiBudW1fbW9kZXMgKyAxOworfQorCitzdGF0aWMgaW50IGV4eW5vc19kcF9icmlk Z2VfYXR0YWNoKHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YSwKKwkJCQkg ICBzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSAgIHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwID0gdG9fZHAocGxh dF9kYXRhKTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHAtPmVuY29kZXI7CisJ aW50IHJldDsKKworCWRybV9jb25uZWN0b3JfcmVnaXN0ZXIoY29ubmVjdG9yKTsKKworCS8qIFBy ZS1lbXB0IERQIGNvbm5lY3RvciBjcmVhdGlvbiBpZiB0aGVyZSdzIGEgYnJpZGdlICovCisJaWYg KGRwLT5wdG5fYnJpZGdlKSB7CisJCWJyaWRnZS0+bmV4dCA9IGRwLT5wdG5fYnJpZGdlOworCQlk cC0+cHRuX2JyaWRnZS0+ZW5jb2RlciA9IGVuY29kZXI7CisJCXJldCA9IGRybV9icmlkZ2VfYXR0 YWNoKGVuY29kZXItPmRldiwgZHAtPnB0bl9icmlkZ2UpOworCQlpZiAocmV0KSB7CisJCQlEUk1f RVJST1IoIkZhaWxlZCB0byBhdHRhY2ggYnJpZGdlIHRvIGRybVxuIik7CisJCQlicmlkZ2UtPm5l eHQgPSBOVUxMOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitz dGF0aWMgYm9vbCBleHlub3NfZHBfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29k ZXIsCisJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30K Kworc3RhdGljIHZvaWQgZXh5bm9zX2RwX21vZGVfc2V0KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5j b2RlciwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCSAgICAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKK30KKworc3RhdGlj IHZvaWQgZXh5bm9zX2RwX25vcChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJLyog ZG8gbm90aGluZyAqLworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBl cl9mdW5jcyBleHlub3NfZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7CisJLm1vZGVfZml4dXAg PSBleHlub3NfZHBfbW9kZV9maXh1cCwKKwkubW9kZV9zZXQgPSBleHlub3NfZHBfbW9kZV9zZXQs CisJLmVuYWJsZSA9IGV4eW5vc19kcF9ub3AsCisJLmRpc2FibGUgPSBleHlub3NfZHBfbm9wLAor fTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyBleHlub3NfZHBfZW5j b2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveSA9IGRybV9lbmNvZGVyX2NsZWFudXAsCit9OworCitz dGF0aWMgaW50IGV4eW5vc19kcF9kdF9wYXJzZV9wYW5lbChzdHJ1Y3QgZXh5bm9zX2RwX2Rldmlj ZSAqZHApCit7CisJaW50IHJldDsKKworCXJldCA9IG9mX2dldF92aWRlb21vZGUoZHAtPmRldi0+ b2Zfbm9kZSwgJmRwLT5wcml2LnZtLAorCQkJICAgICAgIE9GX1VTRV9OQVRJVkVfTU9ERSk7CisJ aWYgKHJldCkgeworCQlEUk1fRVJST1IoImZhaWxlZDogb2ZfZ2V0X3ZpZGVvbW9kZSgpIDogJWRc biIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGV4eW5vc19kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVy LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciA9ICZkcC0+ZW5jb2Rl cjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRhdGE7CisJaW50IHBpcGUsIHJldDsK KworCS8qCisJICogSnVzdCBsaWtlIHRoZSBwcm9iZSBmdW5jdGlvbiBzYWlkLCB3ZSBkb24ndCBu ZWVkIHRoZQorCSAqIGRldmljZSBkcnZyYXRlIGFueW1vcmUsIHdlIHNob3VsZCBsZWF2ZSB0aGUg Y2hhcmdlIHRvCisJICogYW5hbG9naXggZHAgZHJpdmVyLCBzZXQgdGhlIGRldmljZSBkcnZkYXRh IHRvIE5VTEwuCisJICovCisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwlkcC0+ZGV2 ID0gZGV2OworCWRwLT5kcm1fZGV2ID0gZHJtX2RldjsKKworCWRwLT5wbGF0X2RhdGEuZGV2X3R5 cGUgPSBFWFlOT1NfRFA7CisJZHAtPnBsYXRfZGF0YS5wb3dlcl9vbiA9IGV4eW5vc19kcF9wb3dl cm9uOworCWRwLT5wbGF0X2RhdGEucG93ZXJfb2ZmID0gZXh5bm9zX2RwX3Bvd2Vyb2ZmOworCWRw LT5wbGF0X2RhdGEuYXR0YWNoID0gZXh5bm9zX2RwX2JyaWRnZV9hdHRhY2g7CisJZHAtPnBsYXRf ZGF0YS5nZXRfbW9kZXMgPSBleHlub3NfZHBfZ2V0X21vZGVzOworCisJaWYgKCFkcC0+cGxhdF9k YXRhLnBhbmVsICYmICFkcC0+cHRuX2JyaWRnZSkgeworCQlyZXQgPSBleHlub3NfZHBfZHRfcGFy c2VfcGFuZWwoZHApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlwaXBlID0g ZXh5bm9zX2RybV9jcnRjX2dldF9waXBlX2Zyb21fdHlwZShkcm1fZGV2LAorCQkJCQkJICBFWFlO T1NfRElTUExBWV9UWVBFX0xDRCk7CisJaWYgKHBpcGUgPCAwKQorCQlyZXR1cm4gcGlwZTsKKwor CWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMSA8PCBwaXBlOworCisJRFJNX0RFQlVHX0tNUygi cG9zc2libGVfY3J0Y3MgPSAweCV4XG4iLCBlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyk7CisKKwlk cm1fZW5jb2Rlcl9pbml0KGRybV9kZXYsIGVuY29kZXIsICZleHlub3NfZHBfZW5jb2Rlcl9mdW5j cywKKwkJCSBEUk1fTU9ERV9FTkNPREVSX1RNRFMsIE5VTEwpOworCisJZHJtX2VuY29kZXJfaGVs cGVyX2FkZChlbmNvZGVyLCAmZXh5bm9zX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWRw LT5wbGF0X2RhdGEuZW5jb2RlciA9IGVuY29kZXI7CisKKwlyZXR1cm4gYW5hbG9naXhfZHBfYmlu ZChkZXYsIGRwLT5kcm1fZGV2LCAmZHAtPnBsYXRfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4 eW5vc19kcF91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIs CisJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIGFuYWxvZ2l4X2RwX3VuYmluZChkZXYs IG1hc3RlciwgZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBl eHlub3NfZHBfb3BzID0geworCS5iaW5kCT0gZXh5bm9zX2RwX2JpbmQsCisJLnVuYmluZAk9IGV4 eW5vc19kcF91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGV4eW5vc19kcF9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpwYW5lbF9ub2RlID0gTlVMTCwgKmJyaWRnZV9ub2Rl LCAqZW5kcG9pbnQgPSBOVUxMOworCXN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcDsKKworCWRw ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZXh5bm9zX2RwX2Rldmlj ZSksCisJCQkgIEdGUF9LRVJORUwpOworCWlmICghZHApCisJCXJldHVybiAtRU5PTUVNOworCisJ LyoKKwkgKiBXZSBqdXN0IHVzZSB0aGUgZHJ2ZGF0YSB1bnRpbCBkcml2ZXIgcnVuIGludG8gY29t cG9uZW50CisJICogYWRkIGZ1bmN0aW9uLCBhbmQgdGhlbiB3ZSB3b3VsZCBzZXQgZHJ2ZGF0YSB0 byBudWxsLCBzbworCSAqIHRoYXQgYW5hbG9naXggZHAgZHJpdmVyIHdvdWxkIHRha2UgY2hhcmdl IG9mIHRoZSBkcnZkYXRhLgorCSAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRwKTsK KworCXBhbmVsX25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgInBhbmVsIiwg MCk7CisJaWYgKHBhbmVsX25vZGUpIHsKKwkJZHAtPnBsYXRfZGF0YS5wYW5lbCA9IG9mX2RybV9m aW5kX3BhbmVsKHBhbmVsX25vZGUpOworCQlvZl9ub2RlX3B1dChwYW5lbF9ub2RlKTsKKwkJaWYg KCFkcC0+cGxhdF9kYXRhLnBhbmVsKQorCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfSBlbHNl IHsKKwkJZW5kcG9pbnQgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUs IE5VTEwpOworCQlpZiAoZW5kcG9pbnQpIHsKKwkJCXBhbmVsX25vZGUgPSBvZl9ncmFwaF9nZXRf cmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsKKwkJCWlmIChwYW5lbF9ub2RlKSB7CisJCQkJ ZHAtPnBsYXRfZGF0YS5wYW5lbCA9IG9mX2RybV9maW5kX3BhbmVsKHBhbmVsX25vZGUpOworCQkJ CW9mX25vZGVfcHV0KHBhbmVsX25vZGUpOworCQkJCWlmICghZHAtPnBsYXRfZGF0YS5wYW5lbCkK KwkJCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCQl9IGVsc2UgeworCQkJCURSTV9FUlJPUigi bm8gcG9ydCBub2RlIGZvciBwYW5lbCBkZXZpY2UuXG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsK KwkJCX0KKwkJfQorCX0KKworCWlmIChlbmRwb2ludCkKKwkJZ290byBvdXQ7CisKKwllbmRwb2lu dCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGRldi0+b2Zfbm9kZSwgTlVMTCk7CisJaWYg KGVuZHBvaW50KSB7CisJCWJyaWRnZV9ub2RlID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9wb3J0X3Bh cmVudChlbmRwb2ludCk7CisJCWlmIChicmlkZ2Vfbm9kZSkgeworCQkJZHAtPnB0bl9icmlkZ2Ug PSBvZl9kcm1fZmluZF9icmlkZ2UoYnJpZGdlX25vZGUpOworCQkJb2Zfbm9kZV9wdXQoYnJpZGdl X25vZGUpOworCQkJaWYgKCFkcC0+cHRuX2JyaWRnZSkKKwkJCQlyZXR1cm4gLUVQUk9CRV9ERUZF UjsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKK291dDoKKwlyZXR1 cm4gY29tcG9uZW50X2FkZCgmcGRldi0+ZGV2LCAmZXh5bm9zX2RwX29wcyk7Cit9CisKK3N0YXRp YyBpbnQgZXh5bm9zX2RwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorewor CWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJmV4eW5vc19kcF9vcHMpOworCisJcmV0dXJuIDA7 Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZXh5bm9zX2RwX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBhbmFsb2dpeF9kcF9zdXNwZW5kKGRldik7Cit9 CisKK3N0YXRpYyBpbnQgZXh5bm9zX2RwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJ cmV0dXJuIGFuYWxvZ2l4X2RwX3Jlc3VtZShkZXYpOworfQorI2VuZGlmCisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZGV2X3BtX29wcyBleHlub3NfZHBfcG1fb3BzID0geworCVNFVF9SVU5USU1FX1BN X09QUyhleHlub3NfZHBfc3VzcGVuZCwgZXh5bm9zX2RwX3Jlc3VtZSwgTlVMTCkKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5vc19kcF9tYXRjaFtdID0geworCXsg LmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1LWRwIiB9LAorCXt9LAorfTsKK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIGV4eW5vc19kcF9tYXRjaCk7CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgZHBfZHJpdmVyID0geworCS5wcm9iZQkJPSBleHlub3NfZHBfcHJvYmUsCisJLnJlbW92ZQkJ PSBleHlub3NfZHBfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJleHlub3MtZHAi LAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLnBtCT0gJmV4eW5vc19kcF9wbV9vcHMsCisJ CS5vZl9tYXRjaF90YWJsZSA9IGV4eW5vc19kcF9tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FV VEhPUigiSmluZ29vIEhhbiA8amcxLmhhbkBzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiU2Ftc3VuZyBTcGVjaWZpYyBBbmFsb2dpeC1EUCBEcml2ZXIgRXh0ZW5zaW9uIik7CitN T0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5 bm9zL2V4eW5vc19kcF9jb3JlLmggYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcF9j b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2ZWVjNGIuLjAwMDAwMDAKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHBfY29yZS5oCisrKyAvZGV2L251bGwK QEAgLTEsMjgyICswLDAgQEAKLS8qCi0gKiBIZWFkZXIgZmlsZSBmb3IgU2Ftc3VuZyBEUCAoRGlz cGxheSBQb3J0KSBpbnRlcmZhY2UgZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBT YW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgotICogQXV0aG9yOiBKaW5nb28gSGFuIDxqZzEu aGFuQHNhbXN1bmcuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUK LSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQot I2lmbmRlZiBfRVhZTk9TX0RQX0NPUkVfSAotI2RlZmluZSBfRVhZTk9TX0RQX0NPUkVfSAotCi0j aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Ci0jaW5jbHVkZSA8ZHJtL2RybV9kcF9oZWxwZXIuaD4K LSNpbmNsdWRlIDxkcm0vZXh5bm9zX2RybS5oPgotCi0jaW5jbHVkZSAiZXh5bm9zX2RybV9kcnYu aCIKLQotI2RlZmluZSBEUF9USU1FT1VUX0xPT1BfQ09VTlQgMTAwCi0jZGVmaW5lIE1BWF9DUl9M T09QIDUKLSNkZWZpbmUgTUFYX0VRX0xPT1AgNQotCi1lbnVtIGxpbmtfcmF0ZV90eXBlIHsKLQlM SU5LX1JBVEVfMV82MkdCUFMgPSAweDA2LAotCUxJTktfUkFURV8yXzcwR0JQUyA9IDB4MGEKLX07 Ci0KLWVudW0gbGlua19sYW5lX2NvdW50X3R5cGUgewotCUxBTkVfQ09VTlQxID0gMSwKLQlMQU5F X0NPVU5UMiA9IDIsCi0JTEFORV9DT1VOVDQgPSA0Ci19OwotCi1lbnVtIGxpbmtfdHJhaW5pbmdf c3RhdGUgewotCVNUQVJULAotCUNMT0NLX1JFQ09WRVJZLAotCUVRVUFMSVpFUl9UUkFJTklORywK LQlGSU5JU0hFRCwKLQlGQUlMRUQKLX07Ci0KLWVudW0gdm9sdGFnZV9zd2luZ19sZXZlbCB7Ci0J Vk9MVEFHRV9MRVZFTF8wLAotCVZPTFRBR0VfTEVWRUxfMSwKLQlWT0xUQUdFX0xFVkVMXzIsCi0J Vk9MVEFHRV9MRVZFTF8zLAotfTsKLQotZW51bSBwcmVfZW1waGFzaXNfbGV2ZWwgewotCVBSRV9F TVBIQVNJU19MRVZFTF8wLAotCVBSRV9FTVBIQVNJU19MRVZFTF8xLAotCVBSRV9FTVBIQVNJU19M RVZFTF8yLAotCVBSRV9FTVBIQVNJU19MRVZFTF8zLAotfTsKLQotZW51bSBwYXR0ZXJuX3NldCB7 Ci0JUFJCUzcsCi0JRDEwXzIsCi0JVFJBSU5JTkdfUFROMSwKLQlUUkFJTklOR19QVE4yLAotCURQ X05PTkUKLX07Ci0KLWVudW0gY29sb3Jfc3BhY2UgewotCUNPTE9SX1JHQiwKLQlDT0xPUl9ZQ0JD UjQyMiwKLQlDT0xPUl9ZQ0JDUjQ0NAotfTsKLQotZW51bSBjb2xvcl9kZXB0aCB7Ci0JQ09MT1Jf NiwKLQlDT0xPUl84LAotCUNPTE9SXzEwLAotCUNPTE9SXzEyCi19OwotCi1lbnVtIGNvbG9yX2Nv ZWZmaWNpZW50IHsKLQlDT0xPUl9ZQ0JDUjYwMSwKLQlDT0xPUl9ZQ0JDUjcwOQotfTsKLQotZW51 bSBkeW5hbWljX3JhbmdlIHsKLQlWRVNBLAotCUNFQQotfTsKLQotZW51bSBwbGxfc3RhdHVzIHsK LQlQTExfVU5MT0NLRUQsCi0JUExMX0xPQ0tFRAotfTsKLQotZW51bSBjbG9ja19yZWNvdmVyeV9t X3ZhbHVlX3R5cGUgewotCUNBTENVTEFURURfTSwKLQlSRUdJU1RFUl9NCi19OwotCi1lbnVtIHZp ZGVvX3RpbWluZ19yZWNvZ25pdGlvbl90eXBlIHsKLQlWSURFT19USU1JTkdfRlJPTV9DQVBUVVJF LAotCVZJREVPX1RJTUlOR19GUk9NX1JFR0lTVEVSCi19OwotCi1lbnVtIGFuYWxvZ19wb3dlcl9i bG9jayB7Ci0JQVVYX0JMT0NLLAotCUNIMF9CTE9DSywKLQlDSDFfQkxPQ0ssCi0JQ0gyX0JMT0NL LAotCUNIM19CTE9DSywKLQlBTkFMT0dfVE9UQUwsCi0JUE9XRVJfQUxMCi19OwotCi1lbnVtIGRw X2lycV90eXBlIHsKLQlEUF9JUlFfVFlQRV9IUF9DQUJMRV9JTiwKLQlEUF9JUlFfVFlQRV9IUF9D QUJMRV9PVVQsCi0JRFBfSVJRX1RZUEVfSFBfQ0hBTkdFLAotCURQX0lSUV9UWVBFX1VOS05PV04s Ci19OwotCi1zdHJ1Y3QgdmlkZW9faW5mbyB7Ci0JY2hhciAqbmFtZTsKLQotCWJvb2wgaF9zeW5j X3BvbGFyaXR5OwotCWJvb2wgdl9zeW5jX3BvbGFyaXR5OwotCWJvb2wgaW50ZXJsYWNlZDsKLQot CWVudW0gY29sb3Jfc3BhY2UgY29sb3Jfc3BhY2U7Ci0JZW51bSBkeW5hbWljX3JhbmdlIGR5bmFt aWNfcmFuZ2U7Ci0JZW51bSBjb2xvcl9jb2VmZmljaWVudCB5Y2Jjcl9jb2VmZjsKLQllbnVtIGNv bG9yX2RlcHRoIGNvbG9yX2RlcHRoOwotCi0JZW51bSBsaW5rX3JhdGVfdHlwZSBsaW5rX3JhdGU7 Ci0JZW51bSBsaW5rX2xhbmVfY291bnRfdHlwZSBsYW5lX2NvdW50OwotfTsKLQotc3RydWN0IGxp bmtfdHJhaW4gewotCWludCBlcV9sb29wOwotCWludCBjcl9sb29wWzRdOwotCi0JdTggbGlua19y YXRlOwotCXU4IGxhbmVfY291bnQ7Ci0JdTggdHJhaW5pbmdfbGFuZVs0XTsKLQotCWVudW0gbGlu a190cmFpbmluZ19zdGF0ZSBsdF9zdGF0ZTsKLX07Ci0KLXN0cnVjdCBleHlub3NfZHBfZGV2aWNl IHsKLQlzdHJ1Y3QgZHJtX2VuY29kZXIJZW5jb2RlcjsKLQlzdHJ1Y3QgZGV2aWNlCQkqZGV2Owot CXN0cnVjdCBkcm1fZGV2aWNlCSpkcm1fZGV2OwotCXN0cnVjdCBkcm1fY29ubmVjdG9yCWNvbm5l Y3RvcjsKLQlzdHJ1Y3QgZHJtX3BhbmVsCSpwYW5lbDsKLQlzdHJ1Y3QgZHJtX2JyaWRnZQkqYnJp ZGdlOwotCXN0cnVjdCBkcm1fYnJpZGdlCSpwdG5fYnJpZGdlOwotCXN0cnVjdCBjbGsJCSpjbG9j azsKLQl1bnNpZ25lZCBpbnQJCWlycTsKLQl2b2lkIF9faW9tZW0JCSpyZWdfYmFzZTsKLQotCXN0 cnVjdCB2aWRlb19pbmZvCSp2aWRlb19pbmZvOwotCXN0cnVjdCBsaW5rX3RyYWluCWxpbmtfdHJh aW47Ci0Jc3RydWN0IHdvcmtfc3RydWN0CWhvdHBsdWdfd29yazsKLQlzdHJ1Y3QgcGh5CQkqcGh5 OwotCWludAkJCWRwbXNfbW9kZTsKLQlpbnQJCQlocGRfZ3BpbzsKLQotCXN0cnVjdCBleHlub3Nf ZHJtX3BhbmVsX2luZm8gcHJpdjsKLX07Ci0KLS8qIGV4eW5vc19kcF9yZWcuYyAqLwotdm9pZCBl eHlub3NfZHBfZW5hYmxlX3ZpZGVvX211dGUoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLCBi b29sIGVuYWJsZSk7Ci12b2lkIGV4eW5vc19kcF9zdG9wX3ZpZGVvKHN0cnVjdCBleHlub3NfZHBf ZGV2aWNlICpkcCk7Ci12b2lkIGV4eW5vc19kcF9sYW5lX3N3YXAoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwLCBib29sIGVuYWJsZSk7Ci12b2lkIGV4eW5vc19kcF9pbml0X2FuYWxvZ19wYXJh bShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApOwotdm9pZCBleHlub3NfZHBfaW5pdF9pbnRl cnJ1cHQoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLXZvaWQgZXh5bm9zX2RwX3Jlc2V0 KHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCk7Ci12b2lkIGV4eW5vc19kcF9zd3Jlc2V0KHN0 cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCk7Ci12b2lkIGV4eW5vc19kcF9jb25maWdfaW50ZXJy dXB0KHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCk7Ci1lbnVtIHBsbF9zdGF0dXMgZXh5bm9z X2RwX2dldF9wbGxfbG9ja19zdGF0dXMoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLXZv aWQgZXh5bm9zX2RwX3NldF9wbGxfcG93ZXJfZG93bihzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAq ZHAsIGJvb2wgZW5hYmxlKTsKLXZvaWQgZXh5bm9zX2RwX3NldF9hbmFsb2dfcG93ZXJfZG93bihz dHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0JCQkJZW51bSBhbmFsb2dfcG93ZXJfYmxvY2sg YmxvY2ssCi0JCQkJYm9vbCBlbmFibGUpOwotdm9pZCBleHlub3NfZHBfaW5pdF9hbmFsb2dfZnVu YyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApOwotdm9pZCBleHlub3NfZHBfaW5pdF9ocGQo c3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLWVudW0gZHBfaXJxX3R5cGUgZXh5bm9zX2Rw X2dldF9pcnFfdHlwZShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApOwotdm9pZCBleHlub3Nf ZHBfY2xlYXJfaG90cGx1Z19pbnRlcnJ1cHRzKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCk7 Ci12b2lkIGV4eW5vc19kcF9yZXNldF9hdXgoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsK LXZvaWQgZXh5bm9zX2RwX2luaXRfYXV4KHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCk7Ci1p bnQgZXh5bm9zX2RwX2dldF9wbHVnX2luX3N0YXR1cyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAq ZHApOwotdm9pZCBleHlub3NfZHBfZW5hYmxlX3N3X2Z1bmN0aW9uKHN0cnVjdCBleHlub3NfZHBf ZGV2aWNlICpkcCk7Ci1pbnQgZXh5bm9zX2RwX3N0YXJ0X2F1eF90cmFuc2FjdGlvbihzdHJ1Y3Qg ZXh5bm9zX2RwX2RldmljZSAqZHApOwotaW50IGV4eW5vc19kcF93cml0ZV9ieXRlX3RvX2RwY2Qo c3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAotCQkJCXVuc2lnbmVkIGludCByZWdfYWRkciwK LQkJCQl1bnNpZ25lZCBjaGFyIGRhdGEpOwotaW50IGV4eW5vc19kcF9yZWFkX2J5dGVfZnJvbV9k cGNkKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKLQkJCQl1bnNpZ25lZCBpbnQgcmVnX2Fk ZHIsCi0JCQkJdW5zaWduZWQgY2hhciAqZGF0YSk7Ci1pbnQgZXh5bm9zX2RwX3dyaXRlX2J5dGVz X3RvX2RwY2Qoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAotCQkJCXVuc2lnbmVkIGludCBy ZWdfYWRkciwKLQkJCQl1bnNpZ25lZCBpbnQgY291bnQsCi0JCQkJdW5zaWduZWQgY2hhciBkYXRh W10pOwotaW50IGV4eW5vc19kcF9yZWFkX2J5dGVzX2Zyb21fZHBjZChzdHJ1Y3QgZXh5bm9zX2Rw X2RldmljZSAqZHAsCi0JCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJCXVuc2lnbmVkIGlu dCBjb3VudCwKLQkJCQl1bnNpZ25lZCBjaGFyIGRhdGFbXSk7Ci1pbnQgZXh5bm9zX2RwX3NlbGVj dF9pMmNfZGV2aWNlKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKLQkJCQl1bnNpZ25lZCBp bnQgZGV2aWNlX2FkZHIsCi0JCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyKTsKLWludCBleHlub3Nf ZHBfcmVhZF9ieXRlX2Zyb21faTJjKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKLQkJCQl1 bnNpZ25lZCBpbnQgZGV2aWNlX2FkZHIsCi0JCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJ CXVuc2lnbmVkIGludCAqZGF0YSk7Ci1pbnQgZXh5bm9zX2RwX3JlYWRfYnl0ZXNfZnJvbV9pMmMo c3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAotCQkJCXVuc2lnbmVkIGludCBkZXZpY2VfYWRk ciwKLQkJCQl1bnNpZ25lZCBpbnQgcmVnX2FkZHIsCi0JCQkJdW5zaWduZWQgaW50IGNvdW50LAot CQkJCXVuc2lnbmVkIGNoYXIgZWRpZFtdKTsKLXZvaWQgZXh5bm9zX2RwX3NldF9saW5rX2JhbmR3 aWR0aChzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsIHUzMiBid3R5cGUpOwotdm9pZCBleHlu b3NfZHBfZ2V0X2xpbmtfYmFuZHdpZHRoKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwgdTMy ICpid3R5cGUpOwotdm9pZCBleHlub3NfZHBfc2V0X2xhbmVfY291bnQoc3RydWN0IGV4eW5vc19k cF9kZXZpY2UgKmRwLCB1MzIgY291bnQpOwotdm9pZCBleHlub3NfZHBfZ2V0X2xhbmVfY291bnQo c3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLCB1MzIgKmNvdW50KTsKLXZvaWQgZXh5bm9zX2Rw X2VuYWJsZV9lbmhhbmNlZF9tb2RlKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwgYm9vbCBl bmFibGUpOwotdm9pZCBleHlub3NfZHBfc2V0X3RyYWluaW5nX3BhdHRlcm4oc3RydWN0IGV4eW5v c19kcF9kZXZpY2UgKmRwLAotCQkJCSBlbnVtIHBhdHRlcm5fc2V0IHBhdHRlcm4pOwotdm9pZCBl eHlub3NfZHBfc2V0X2xhbmUwX3ByZV9lbXBoYXNpcyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAq ZHAsIHUzMiBsZXZlbCk7Ci12b2lkIGV4eW5vc19kcF9zZXRfbGFuZTFfcHJlX2VtcGhhc2lzKHN0 cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwgdTMyIGxldmVsKTsKLXZvaWQgZXh5bm9zX2RwX3Nl dF9sYW5lMl9wcmVfZW1waGFzaXMoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLCB1MzIgbGV2 ZWwpOwotdm9pZCBleHlub3NfZHBfc2V0X2xhbmUzX3ByZV9lbXBoYXNpcyhzdHJ1Y3QgZXh5bm9z X2RwX2RldmljZSAqZHAsIHUzMiBsZXZlbCk7Ci12b2lkIGV4eW5vc19kcF9zZXRfbGFuZTBfbGlu a190cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0JCQkJdTMyIHRyYWluaW5n X2xhbmUpOwotdm9pZCBleHlub3NfZHBfc2V0X2xhbmUxX2xpbmtfdHJhaW5pbmcoc3RydWN0IGV4 eW5vc19kcF9kZXZpY2UgKmRwLAotCQkJCXUzMiB0cmFpbmluZ19sYW5lKTsKLXZvaWQgZXh5bm9z X2RwX3NldF9sYW5lMl9saW5rX3RyYWluaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwK LQkJCQl1MzIgdHJhaW5pbmdfbGFuZSk7Ci12b2lkIGV4eW5vc19kcF9zZXRfbGFuZTNfbGlua190 cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0JCQkJdTMyIHRyYWluaW5nX2xh bmUpOwotdTMyIGV4eW5vc19kcF9nZXRfbGFuZTBfbGlua190cmFpbmluZyhzdHJ1Y3QgZXh5bm9z X2RwX2RldmljZSAqZHApOwotdTMyIGV4eW5vc19kcF9nZXRfbGFuZTFfbGlua190cmFpbmluZyhz dHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApOwotdTMyIGV4eW5vc19kcF9nZXRfbGFuZTJfbGlu a190cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApOwotdTMyIGV4eW5vc19kcF9n ZXRfbGFuZTNfbGlua190cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApOwotdm9p ZCBleHlub3NfZHBfcmVzZXRfbWFjcm8oc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLXZv aWQgZXh5bm9zX2RwX2luaXRfdmlkZW8oc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLQot dm9pZCBleHlub3NfZHBfc2V0X3ZpZGVvX2NvbG9yX2Zvcm1hdChzdHJ1Y3QgZXh5bm9zX2RwX2Rl dmljZSAqZHApOwotaW50IGV4eW5vc19kcF9pc19zbGF2ZV92aWRlb19zdHJlYW1fY2xvY2tfb24o c3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLXZvaWQgZXh5bm9zX2RwX3NldF92aWRlb19j cl9tbihzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0JCQllbnVtIGNsb2NrX3JlY292ZXJ5 X21fdmFsdWVfdHlwZSB0eXBlLAotCQkJdTMyIG1fdmFsdWUsCi0JCQl1MzIgbl92YWx1ZSk7Ci12 b2lkIGV4eW5vc19kcF9zZXRfdmlkZW9fdGltaW5nX21vZGUoc3RydWN0IGV4eW5vc19kcF9kZXZp Y2UgKmRwLCB1MzIgdHlwZSk7Ci12b2lkIGV4eW5vc19kcF9lbmFibGVfdmlkZW9fbWFzdGVyKHN0 cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwgYm9vbCBlbmFibGUpOwotdm9pZCBleHlub3NfZHBf c3RhcnRfdmlkZW8oc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKTsKLWludCBleHlub3NfZHBf aXNfdmlkZW9fc3RyZWFtX29uKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCk7Ci12b2lkIGV4 eW5vc19kcF9jb25maWdfdmlkZW9fc2xhdmVfbW9kZShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAq ZHApOwotdm9pZCBleHlub3NfZHBfZW5hYmxlX3NjcmFtYmxpbmcoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwKTsKLXZvaWQgZXh5bm9zX2RwX2Rpc2FibGVfc2NyYW1ibGluZyhzdHJ1Y3QgZXh5 bm9zX2RwX2RldmljZSAqZHApOwotCi0vKiBJMkMgRURJRCBDaGlwIElELCBTbGF2ZSBBZGRyZXNz ICovCi0jZGVmaW5lIEkyQ19FRElEX0RFVklDRV9BRERSCQkJMHg1MAotI2RlZmluZSBJMkNfRV9F RElEX0RFVklDRV9BRERSCQkJMHgzMAotCi0jZGVmaW5lIEVESURfQkxPQ0tfTEVOR1RICQkJMHg4 MAotI2RlZmluZSBFRElEX0hFQURFUl9QQVRURVJOCQkJMHgwMAotI2RlZmluZSBFRElEX0VYVEVO U0lPTl9GTEFHCQkJMHg3ZQotI2RlZmluZSBFRElEX0NIRUNLU1VNCQkJCTB4N2YKLQotLyogRFBf TUFYX0xBTkVfQ09VTlQgKi8KLSNkZWZpbmUgRFBDRF9FTkhBTkNFRF9GUkFNRV9DQVAoeCkJCSgo KHgpID4+IDcpICYgMHgxKQotI2RlZmluZSBEUENEX01BWF9MQU5FX0NPVU5UKHgpCQkJKCh4KSAm IDB4MWYpCi0KLS8qIERQX0xBTkVfQ09VTlRfU0VUICovCi0jZGVmaW5lIERQQ0RfTEFORV9DT1VO VF9TRVQoeCkJCQkoKHgpICYgMHgxZikKLQotLyogRFBfVFJBSU5JTkdfTEFORTBfU0VUICovCi0j ZGVmaW5lIERQQ0RfUFJFX0VNUEhBU0lTX1NFVCh4KQkJKCgoeCkgJiAweDMpIDw8IDMpCi0jZGVm aW5lIERQQ0RfUFJFX0VNUEhBU0lTX0dFVCh4KQkJKCgoeCkgPj4gMykgJiAweDMpCi0jZGVmaW5l IERQQ0RfVk9MVEFHRV9TV0lOR19TRVQoeCkJCSgoKHgpICYgMHgzKSA8PCAwKQotI2RlZmluZSBE UENEX1ZPTFRBR0VfU1dJTkdfR0VUKHgpCQkoKCh4KSA+PiAwKSAmIDB4MykKLQotI2VuZGlmIC8q IF9FWFlOT1NfRFBfQ09SRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9z L2V4eW5vc19kcF9yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RwX3JlZy5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMWY4N2EyLi4wMDAwMDAwCi0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RwX3JlZy5jCisrKyAvZGV2L251bGwKQEAgLTEs MTI2MyArMCwwIEBACi0vKgotICogU2Ftc3VuZyBEUCAoRGlzcGxheSBwb3J0KSByZWdpc3RlciBp bnRlcmZhY2UgZHJpdmVyLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0 cm9uaWNzIENvLiwgTHRkLgotICogQXV0aG9yOiBKaW5nb28gSGFuIDxqZzEuaGFuQHNhbXN1bmcu Y29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlICJleHlub3NfZHBfY29y ZS5oIgotI2luY2x1ZGUgImV4eW5vc19kcF9yZWcuaCIKLQotI2RlZmluZSBDT01NT05fSU5UX01B U0tfMQkwCi0jZGVmaW5lIENPTU1PTl9JTlRfTUFTS18yCTAKLSNkZWZpbmUgQ09NTU9OX0lOVF9N QVNLXzMJMAotI2RlZmluZSBDT01NT05fSU5UX01BU0tfNAkoSE9UUExVR19DSEcgfCBIUERfTE9T VCB8IFBMVUcpCi0jZGVmaW5lIElOVF9TVEFfTUFTSwkJSU5UX0hQRAotCi12b2lkIGV4eW5vc19k cF9lbmFibGVfdmlkZW9fbXV0ZShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsIGJvb2wgZW5h YmxlKQotewotCXUzMiByZWc7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCXJlZyA9IHJlYWRsKGRwLT5y ZWdfYmFzZSArIEVYWU5PU19EUF9WSURFT19DVExfMSk7Ci0JCXJlZyB8PSBIRENQX1ZJREVPX01V VEU7Ci0JCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9WSURFT19DVExfMSk7 Ci0JfSBlbHNlIHsKLQkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1ZJREVP X0NUTF8xKTsKLQkJcmVnICY9IH5IRENQX1ZJREVPX01VVEU7Ci0JCXdyaXRlbChyZWcsIGRwLT5y ZWdfYmFzZSArIEVYWU5PU19EUF9WSURFT19DVExfMSk7Ci0JfQotfQotCi12b2lkIGV4eW5vc19k cF9zdG9wX3ZpZGVvKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQl1MzIgcmVnOwot Ci0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1ZJREVPX0NUTF8xKTsKLQly ZWcgJj0gflZJREVPX0VOOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9W SURFT19DVExfMSk7Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX2xhbmVfc3dhcChzdHJ1Y3QgZXh5bm9z X2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKQotewotCXUzMiByZWc7Ci0KLQlpZiAoZW5hYmxl KQotCQlyZWcgPSBMQU5FM19NQVBfTE9HSUNfTEFORV8wIHwgTEFORTJfTUFQX0xPR0lDX0xBTkVf MSB8Ci0JCQlMQU5FMV9NQVBfTE9HSUNfTEFORV8yIHwgTEFORTBfTUFQX0xPR0lDX0xBTkVfMzsK LQllbHNlCi0JCXJlZyA9IExBTkUzX01BUF9MT0dJQ19MQU5FXzMgfCBMQU5FMl9NQVBfTE9HSUNf TEFORV8yIHwKLQkJCUxBTkUxX01BUF9MT0dJQ19MQU5FXzEgfCBMQU5FMF9NQVBfTE9HSUNfTEFO RV8wOwotCi0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0xBTkVfTUFQKTsK LX0KLQotdm9pZCBleHlub3NfZHBfaW5pdF9hbmFsb2dfcGFyYW0oc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBUWF9URVJNSU5BTF9DVFJMXzUwX09I TTsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQU5BTE9HX0NUTF8xKTsK LQotCXJlZyA9IFNFTF8yNE0gfCBUWF9EVkREX0JJVF8xXzA2MjVWOwotCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9BTkFMT0dfQ1RMXzIpOwotCi0JcmVnID0gRFJJVkVfRFZE RF9CSVRfMV8wNjI1ViB8IFZDT19CSVRfNjAwX01JQ1JPOwotCXdyaXRlbChyZWcsIGRwLT5yZWdf YmFzZSArIEVYWU5PU19EUF9BTkFMT0dfQ1RMXzMpOwotCi0JcmVnID0gUERfUklOR19PU0MgfCBB VVhfVEVSTUlOQUxfQ1RSTF81MF9PSE0gfAotCQlUWF9DVVIxXzJYIHwgVFhfQ1VSXzE2X01BOwot CXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QTExfRklMVEVSX0NUTF8xKTsK LQotCXJlZyA9IENIM19BTVBfNDAwX01WIHwgQ0gyX0FNUF80MDBfTVYgfAotCQlDSDFfQU1QXzQw MF9NViB8IENIMF9BTVBfNDAwX01WOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5P U19EUF9UWF9BTVBfVFVOSU5HX0NUTCk7Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX2luaXRfaW50ZXJy dXB0KHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQkvKiBTZXQgaW50ZXJydXB0IHBp biBhc3NlcnRpb24gcG9sYXJpdHkgYXMgaGlnaCAqLwotCXdyaXRlbChJTlRfUE9MMSB8IElOVF9Q T0wwLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfSU5UX0NUTCk7Ci0KLQkvKiBDbGVhciBwZW5k aW5nIHJlZ2lzZXJzICovCi0Jd3JpdGVsKDB4ZmYsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9D T01NT05fSU5UX1NUQV8xKTsKLQl3cml0ZWwoMHg0ZiwgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X0NPTU1PTl9JTlRfU1RBXzIpOwotCXdyaXRlbCgweGUwLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1Nf RFBfQ09NTU9OX0lOVF9TVEFfMyk7Ci0Jd3JpdGVsKDB4ZTcsIGRwLT5yZWdfYmFzZSArIEVYWU5P U19EUF9DT01NT05fSU5UX1NUQV80KTsKLQl3cml0ZWwoMHg2MywgZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX0lOVF9TVEEpOwotCi0JLyogMDptYXNrLDE6IHVubWFzayAqLwotCXdyaXRlbCgweDAw LCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lOVF9NQVNLXzEpOwotCXdyaXRlbCgw eDAwLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lOVF9NQVNLXzIpOwotCXdyaXRl bCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lOVF9NQVNLXzMpOwotCXdy aXRlbCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lOVF9NQVNLXzQpOwot CXdyaXRlbCgweDAwLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfSU5UX1NUQV9NQVNLKTsKLX0K LQotdm9pZCBleHlub3NfZHBfcmVzZXQoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQotewot CXUzMiByZWc7Ci0KLQlleHlub3NfZHBfc3RvcF92aWRlbyhkcCk7Ci0JZXh5bm9zX2RwX2VuYWJs ZV92aWRlb19tdXRlKGRwLCAwKTsKLQotCXJlZyA9IE1BU1RFUl9WSURfRlVOQ19FTl9OIHwgU0xB VkVfVklEX0ZVTkNfRU5fTiB8Ci0JCUFVRF9GSUZPX0ZVTkNfRU5fTiB8IEFVRF9GVU5DX0VOX04g fAotCQlIRENQX0ZVTkNfRU5fTiB8IFNXX0ZVTkNfRU5fTjsKLQl3cml0ZWwocmVnLCBkcC0+cmVn X2Jhc2UgKyBFWFlOT1NfRFBfRlVOQ19FTl8xKTsKLQotCXJlZyA9IFNTQ19GVU5DX0VOX04gfCBB VVhfRlVOQ19FTl9OIHwKLQkJU0VSREVTX0ZJRk9fRlVOQ19FTl9OIHwKLQkJTFNfQ0xLX0RPTUFJ Tl9GVU5DX0VOX047Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0ZVTkNf RU5fMik7Ci0KLQl1c2xlZXBfcmFuZ2UoMjAsIDMwKTsKLQotCWV4eW5vc19kcF9sYW5lX3N3YXAo ZHAsIDApOwotCi0Jd3JpdGVsKDB4MCwgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExf MSk7Ci0Jd3JpdGVsKDB4NDAsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzIpOwot CXdyaXRlbCgweDAsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzMpOwotCXdyaXRl bCgweDAsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzQpOwotCi0Jd3JpdGVsKDB4 MCwgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1BLVF9TRU5EX0NUTCk7Ci0Jd3JpdGVsKDB4MCwg ZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0hEQ1BfQ1RMKTsKLQotCXdyaXRlbCgweDVlLCBkcC0+ cmVnX2Jhc2UgKyBFWFlOT1NfRFBfSFBEX0RFR0xJVENIX0wpOwotCXdyaXRlbCgweDFhLCBkcC0+ cmVnX2Jhc2UgKyBFWFlOT1NfRFBfSFBEX0RFR0xJVENIX0gpOwotCi0Jd3JpdGVsKDB4MTAsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9MSU5LX0RFQlVHX0NUTCk7Ci0KLQl3cml0ZWwoMHgwLCBk cC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1RFU1QpOwotCi0Jd3JpdGVsKDB4MCwgZHAtPnJl Z19iYXNlICsgRVhZTk9TX0RQX1ZJREVPX0ZJRk9fVEhSRCk7Ci0Jd3JpdGVsKDB4MjAsIGRwLT5y ZWdfYmFzZSArIEVYWU5PU19EUF9BVURJT19NQVJHSU4pOwotCi0Jd3JpdGVsKDB4NCwgZHAtPnJl Z19iYXNlICsgRVhZTk9TX0RQX01fVklEX0dFTl9GSUxURVJfVEgpOwotCXdyaXRlbCgweDIsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9NX0FVRF9HRU5fRklMVEVSX1RIKTsKLQotCXdyaXRlbCgw eDAwMDAwMTAxLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfU09DX0dFTkVSQUxfQ1RMKTsKLX0K LQotdm9pZCBleHlub3NfZHBfc3dyZXNldChzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCi17 Ci0Jd3JpdGVsKFJFU0VUX0RQX1RYLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfVFhfU1dfUkVT RVQpOwotfQotCi12b2lkIGV4eW5vc19kcF9jb25maWdfaW50ZXJydXB0KHN0cnVjdCBleHlub3Nf ZHBfZGV2aWNlICpkcCkKLXsKLQl1MzIgcmVnOwotCi0JLyogMDogbWFzaywgMTogdW5tYXNrICov Ci0JcmVnID0gQ09NTU9OX0lOVF9NQVNLXzE7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg RVhZTk9TX0RQX0NPTU1PTl9JTlRfTUFTS18xKTsKLQotCXJlZyA9IENPTU1PTl9JTlRfTUFTS18y OwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9DT01NT05fSU5UX01BU0tf Mik7Ci0KLQlyZWcgPSBDT01NT05fSU5UX01BU0tfMzsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lOVF9NQVNLXzMpOwotCi0JcmVnID0gQ09NTU9OX0lOVF9N QVNLXzQ7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0NPTU1PTl9JTlRf TUFTS180KTsKLQotCXJlZyA9IElOVF9TVEFfTUFTSzsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBFWFlOT1NfRFBfSU5UX1NUQV9NQVNLKTsKLX0KLQotZW51bSBwbGxfc3RhdHVzIGV4eW5v c19kcF9nZXRfcGxsX2xvY2tfc3RhdHVzKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsK LQl1MzIgcmVnOwotCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0RFQlVH X0NUTCk7Ci0JaWYgKHJlZyAmIFBMTF9MT0NLKQotCQlyZXR1cm4gUExMX0xPQ0tFRDsKLQllbHNl Ci0JCXJldHVybiBQTExfVU5MT0NLRUQ7Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX3NldF9wbGxfcG93 ZXJfZG93bihzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsIGJvb2wgZW5hYmxlKQotewotCXUz MiByZWc7Ci0KLQlpZiAoZW5hYmxlKSB7Ci0JCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVY WU5PU19EUF9QTExfQ1RMKTsKLQkJcmVnIHw9IERQX1BMTF9QRDsKLQkJd3JpdGVsKHJlZywgZHAt PnJlZ19iYXNlICsgRVhZTk9TX0RQX1BMTF9DVEwpOwotCX0gZWxzZSB7Ci0JCXJlZyA9IHJlYWRs KGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QTExfQ1RMKTsKLQkJcmVnICY9IH5EUF9QTExfUEQ7 Ci0JCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QTExfQ1RMKTsKLQl9Ci19 Ci0KLXZvaWQgZXh5bm9zX2RwX3NldF9hbmFsb2dfcG93ZXJfZG93bihzdHJ1Y3QgZXh5bm9zX2Rw X2RldmljZSAqZHAsCi0JCQkJZW51bSBhbmFsb2dfcG93ZXJfYmxvY2sgYmxvY2ssCi0JCQkJYm9v bCBlbmFibGUpCi17Ci0JdTMyIHJlZzsKLQotCXN3aXRjaCAoYmxvY2spIHsKLQljYXNlIEFVWF9C TE9DSzoKLQkJaWYgKGVuYWJsZSkgewotCQkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX1BIWV9QRCk7Ci0JCQlyZWcgfD0gQVVYX1BEOwotCQkJd3JpdGVsKHJlZywgZHAtPnJl Z19iYXNlICsgRVhZTk9TX0RQX1BIWV9QRCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJCXJlZyAmPSB+QVVYX1BEOwotCQkJ d3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1BIWV9QRCk7Ci0JCX0KLQkJYnJl YWs7Ci0JY2FzZSBDSDBfQkxPQ0s6Ci0JCWlmIChlbmFibGUpIHsKLQkJCXJlZyA9IHJlYWRsKGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9QSFlfUEQpOwotCQkJcmVnIHw9IENIMF9QRDsKLQkJCXdy aXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QSFlfUEQpOwotCQl9IGVsc2Ugewot CQkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1BIWV9QRCk7Ci0JCQlyZWcg Jj0gfkNIMF9QRDsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QSFlf UEQpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgQ0gxX0JMT0NLOgotCQlpZiAoZW5hYmxlKSB7Ci0J CQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJCXJlZyB8 PSBDSDFfUEQ7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1BE KTsKLQkJfSBlbHNlIHsKLQkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9Q SFlfUEQpOwotCQkJcmVnICY9IH5DSDFfUEQ7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIENIMl9CTE9DSzoKLQkJ aWYgKGVuYWJsZSkgewotCQkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1BI WV9QRCk7Ci0JCQlyZWcgfD0gQ0gyX1BEOwotCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg RVhZTk9TX0RQX1BIWV9QRCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jh c2UgKyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJCXJlZyAmPSB+Q0gyX1BEOwotCQkJd3JpdGVsKHJl ZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1BIWV9QRCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2Fz ZSBDSDNfQkxPQ0s6Ci0JCWlmIChlbmFibGUpIHsKLQkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEVYWU5PU19EUF9QSFlfUEQpOwotCQkJcmVnIHw9IENIM19QRDsKLQkJCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QSFlfUEQpOwotCQl9IGVsc2UgewotCQkJcmVnID0g cmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1BIWV9QRCk7Ci0JCQlyZWcgJj0gfkNIM19Q RDsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QSFlfUEQpOwotCQl9 Ci0JCWJyZWFrOwotCWNhc2UgQU5BTE9HX1RPVEFMOgotCQlpZiAoZW5hYmxlKSB7Ci0JCQlyZWcg PSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJCXJlZyB8PSBEUF9Q SFlfUEQ7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1BEKTsK LQkJfSBlbHNlIHsKLQkJCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9QSFlf UEQpOwotCQkJcmVnICY9IH5EUF9QSFlfUEQ7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFBPV0VSX0FMTDoKLQkJ aWYgKGVuYWJsZSkgewotCQkJcmVnID0gRFBfUEhZX1BEIHwgQVVYX1BEIHwgQ0gzX1BEIHwgQ0gy X1BEIHwKLQkJCQlDSDFfUEQgfCBDSDBfUEQ7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJfSBlbHNlIHsKLQkJCXdyaXRlbCgweDAwLCBkcC0+cmVn X2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1BEKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQli cmVhazsKLQl9Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX2luaXRfYW5hbG9nX2Z1bmMoc3RydWN0IGV4 eW5vc19kcF9kZXZpY2UgKmRwKQotewotCXUzMiByZWc7Ci0JaW50IHRpbWVvdXRfbG9vcCA9IDA7 Ci0KLQlleHlub3NfZHBfc2V0X2FuYWxvZ19wb3dlcl9kb3duKGRwLCBQT1dFUl9BTEwsIDApOwot Ci0JcmVnID0gUExMX0xPQ0tfQ0hHOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5P U19EUF9DT01NT05fSU5UX1NUQV8xKTsKLQotCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVY WU5PU19EUF9ERUJVR19DVEwpOwotCXJlZyAmPSB+KEZfUExMX0xPQ0sgfCBQTExfTE9DS19DVFJM KTsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfREVCVUdfQ1RMKTsKLQot CS8qIFBvd2VyIHVwIFBMTCAqLwotCWlmIChleHlub3NfZHBfZ2V0X3BsbF9sb2NrX3N0YXR1cyhk cCkgPT0gUExMX1VOTE9DS0VEKSB7Ci0JCWV4eW5vc19kcF9zZXRfcGxsX3Bvd2VyX2Rvd24oZHAs IDApOwotCi0JCXdoaWxlIChleHlub3NfZHBfZ2V0X3BsbF9sb2NrX3N0YXR1cyhkcCkgPT0gUExM X1VOTE9DS0VEKSB7Ci0JCQl0aW1lb3V0X2xvb3ArKzsKLQkJCWlmIChEUF9USU1FT1VUX0xPT1Bf Q09VTlQgPCB0aW1lb3V0X2xvb3ApIHsKLQkJCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8g Z2V0IHBsbCBsb2NrIHN0YXR1c1xuIik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJdXNsZWVwX3Jh bmdlKDEwLCAyMCk7Ci0JCX0KLQl9Ci0KLQkvKiBFbmFibGUgU2VyZGVzIEZJRk8gZnVuY3Rpb24g YW5kIExpbmsgc3ltYm9sIGNsb2NrIGRvbWFpbiBtb2R1bGUgKi8KLQlyZWcgPSByZWFkbChkcC0+ cmVnX2Jhc2UgKyBFWFlOT1NfRFBfRlVOQ19FTl8yKTsKLQlyZWcgJj0gfihTRVJERVNfRklGT19G VU5DX0VOX04gfCBMU19DTEtfRE9NQUlOX0ZVTkNfRU5fTgotCQl8IEFVWF9GVU5DX0VOX04pOwot CXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9GVU5DX0VOXzIpOwotfQotCi12 b2lkIGV4eW5vc19kcF9jbGVhcl9ob3RwbHVnX2ludGVycnVwdHMoc3RydWN0IGV4eW5vc19kcF9k ZXZpY2UgKmRwKQotewotCXUzMiByZWc7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkcC0+aHBkX2dw aW8pKQotCQlyZXR1cm47Ci0KLQlyZWcgPSBIT1RQTFVHX0NIRyB8IEhQRF9MT1NUIHwgUExVRzsK LQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lOVF9TVEFfNCk7 Ci0KLQlyZWcgPSBJTlRfSFBEOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19E UF9JTlRfU1RBKTsKLX0KLQotdm9pZCBleHlub3NfZHBfaW5pdF9ocGQoc3RydWN0IGV4eW5vc19k cF9kZXZpY2UgKmRwKQotewotCXUzMiByZWc7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkcC0+aHBk X2dwaW8pKQotCQlyZXR1cm47Ci0KLQlleHlub3NfZHBfY2xlYXJfaG90cGx1Z19pbnRlcnJ1cHRz KGRwKTsKLQotCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzMp OwotCXJlZyAmPSB+KEZfSFBEIHwgSFBEX0NUUkwpOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFz ZSArIEVYWU5PU19EUF9TWVNfQ1RMXzMpOwotfQotCi1lbnVtIGRwX2lycV90eXBlIGV4eW5vc19k cF9nZXRfaXJxX3R5cGUoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQotewotCXUzMiByZWc7 Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkcC0+aHBkX2dwaW8pKSB7Ci0JCXJlZyA9IGdwaW9fZ2V0 X3ZhbHVlKGRwLT5ocGRfZ3Bpbyk7Ci0JCWlmIChyZWcpCi0JCQlyZXR1cm4gRFBfSVJRX1RZUEVf SFBfQ0FCTEVfSU47Ci0JCWVsc2UKLQkJCXJldHVybiBEUF9JUlFfVFlQRV9IUF9DQUJMRV9PVVQ7 Ci0JfSBlbHNlIHsKLQkJLyogUGFyc2UgaG90cGx1ZyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVy ICovCi0JCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9DT01NT05fSU5UX1NU QV80KTsKLQotCQlpZiAocmVnICYgUExVRykKLQkJCXJldHVybiBEUF9JUlFfVFlQRV9IUF9DQUJM RV9JTjsKLQotCQlpZiAocmVnICYgSFBEX0xPU1QpCi0JCQlyZXR1cm4gRFBfSVJRX1RZUEVfSFBf Q0FCTEVfT1VUOwotCi0JCWlmIChyZWcgJiBIT1RQTFVHX0NIRykKLQkJCXJldHVybiBEUF9JUlFf VFlQRV9IUF9DSEFOR0U7Ci0KLQkJcmV0dXJuIERQX0lSUV9UWVBFX1VOS05PV047Ci0JfQotfQot Ci12b2lkIGV4eW5vc19kcF9yZXNldF9hdXgoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQot ewotCXUzMiByZWc7Ci0KLQkvKiBEaXNhYmxlIEFVWCBjaGFubmVsIG1vZHVsZSAqLwotCXJlZyA9 IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9GVU5DX0VOXzIpOwotCXJlZyB8PSBBVVhf RlVOQ19FTl9OOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9GVU5DX0VO XzIpOwotfQotCi12b2lkIGV4eW5vc19kcF9pbml0X2F1eChzdHJ1Y3QgZXh5bm9zX2RwX2Rldmlj ZSAqZHApCi17Ci0JdTMyIHJlZzsKLQotCS8qIENsZWFyIGluZXJydXB0cyByZWxhdGVkIHRvIEFV WCBjaGFubmVsICovCi0JcmVnID0gUlBMWV9SRUNFSVYgfCBBVVhfRVJSOwotCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9JTlRfU1RBKTsKLQotCWV4eW5vc19kcF9yZXNldF9h dXgoZHApOwotCi0JLyogRGlzYWJsZSBBVVggdHJhbnNhY3Rpb24gSC9XIHJldHJ5ICovCi0JcmVn ID0gQVVYX0JJVF9QRVJJT0RfRVhQRUNURURfREVMQVkoMykgfCBBVVhfSFdfUkVUUllfQ09VTlRf U0VMKDApfAotCQlBVVhfSFdfUkVUUllfSU5URVJWQUxfNjAwX01JQ1JPU0VDT05EUzsKLQl3cml0 ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQVVYX0hXX1JFVFJZX0NUTCk7Ci0KLQkv KiBSZWNlaXZlIEFVWCBDaGFubmVsIERFRkVSIGNvbW1hbmRzIGVxdWFsIHRvIERFRkZFUl9DT1VO VCo2NCAqLwotCXJlZyA9IERFRkVSX0NUUkxfRU4gfCBERUZFUl9DT1VOVCgxKTsKLQl3cml0ZWwo cmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQVVYX0NIX0RFRkVSX0NUTCk7Ci0KLQkvKiBF bmFibGUgQVVYIGNoYW5uZWwgbW9kdWxlICovCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsg RVhZTk9TX0RQX0ZVTkNfRU5fMik7Ci0JcmVnICY9IH5BVVhfRlVOQ19FTl9OOwotCXdyaXRlbChy ZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9GVU5DX0VOXzIpOwotfQotCi1pbnQgZXh5bm9z X2RwX2dldF9wbHVnX2luX3N0YXR1cyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCi17Ci0J dTMyIHJlZzsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGRwLT5ocGRfZ3BpbykpIHsKLQkJaWYgKGdw aW9fZ2V0X3ZhbHVlKGRwLT5ocGRfZ3BpbykpCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQly ZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfU1lTX0NUTF8zKTsKLQkJaWYgKHJl ZyAmIEhQRF9TVEFUVVMpCi0JCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0K LQotdm9pZCBleHlub3NfZHBfZW5hYmxlX3N3X2Z1bmN0aW9uKHN0cnVjdCBleHlub3NfZHBfZGV2 aWNlICpkcCkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX0ZVTkNfRU5fMSk7Ci0JcmVnICY9IH5TV19GVU5DX0VOX047Ci0Jd3JpdGVsKHJlZywg ZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0ZVTkNfRU5fMSk7Ci19Ci0KLWludCBleHlub3NfZHBf c3RhcnRfYXV4X3RyYW5zYWN0aW9uKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQlp bnQgcmVnOwotCWludCByZXR2YWwgPSAwOwotCWludCB0aW1lb3V0X2xvb3AgPSAwOwotCi0JLyog RW5hYmxlIEFVWCBDSCBvcGVyYXRpb24gKi8KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBF WFlOT1NfRFBfQVVYX0NIX0NUTF8yKTsKLQlyZWcgfD0gQVVYX0VOOwotCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9BVVhfQ0hfQ1RMXzIpOwotCi0JLyogSXMgQVVYIENIIGNv bW1hbmQgcmVwbHkgcmVjZWl2ZWQ/ICovCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX0lOVF9TVEEpOwotCXdoaWxlICghKHJlZyAmIFJQTFlfUkVDRUlWKSkgewotCQl0aW1l b3V0X2xvb3ArKzsKLQkJaWYgKERQX1RJTUVPVVRfTE9PUF9DT1VOVCA8IHRpbWVvdXRfbG9vcCkg ewotCQkJZGV2X2VycihkcC0+ZGV2LCAiQVVYIENIIGNvbW1hbmQgcmVwbHkgZmFpbGVkIVxuIik7 Ci0JCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQkJfQotCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2Ug KyBFWFlOT1NfRFBfSU5UX1NUQSk7Ci0JCXVzbGVlcF9yYW5nZSgxMCwgMTEpOwotCX0KLQotCS8q IENsZWFyIGludGVycnVwdCBzb3VyY2UgZm9yIEFVWCBDSCBjb21tYW5kIHJlcGx5ICovCi0Jd3Jp dGVsKFJQTFlfUkVDRUlWLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfSU5UX1NUQSk7Ci0KLQkv KiBDbGVhciBpbnRlcnJ1cHQgc291cmNlIGZvciBBVVggQ0ggYWNjZXNzIGVycm9yICovCi0JcmVn ID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0lOVF9TVEEpOwotCWlmIChyZWcgJiBB VVhfRVJSKSB7Ci0JCXdyaXRlbChBVVhfRVJSLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfSU5U X1NUQSk7Ci0JCXJldHVybiAtRVJFTU9URUlPOwotCX0KLQotCS8qIENoZWNrIEFVWCBDSCBlcnJv ciBhY2Nlc3Mgc3RhdHVzICovCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X0FVWF9DSF9TVEEpOwotCWlmICgocmVnICYgQVVYX1NUQVRVU19NQVNLKSAhPSAwKSB7Ci0JCWRl dl9lcnIoZHAtPmRldiwgIkFVWCBDSCBlcnJvciBoYXBwZW5zOiAlZFxuXG4iLAotCQkJcmVnICYg QVVYX1NUQVRVU19NQVNLKTsKLQkJcmV0dXJuIC1FUkVNT1RFSU87Ci0JfQotCi0JcmV0dXJuIHJl dHZhbDsKLX0KLQotaW50IGV4eW5vc19kcF93cml0ZV9ieXRlX3RvX2RwY2Qoc3RydWN0IGV4eW5v c19kcF9kZXZpY2UgKmRwLAotCQkJCXVuc2lnbmVkIGludCByZWdfYWRkciwKLQkJCQl1bnNpZ25l ZCBjaGFyIGRhdGEpCi17Ci0JdTMyIHJlZzsKLQlpbnQgaTsKLQlpbnQgcmV0dmFsOwotCi0JZm9y IChpID0gMDsgaSA8IDM7IGkrKykgewotCQkvKiBDbGVhciBBVVggQ0ggZGF0YSBidWZmZXIgKi8K LQkJcmVnID0gQlVGX0NMUjsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X0JVRkZFUl9EQVRBX0NUTCk7Ci0KLQkJLyogU2VsZWN0IERQQ0QgZGV2aWNlIGFkZHJlc3MgKi8K LQkJcmVnID0gQVVYX0FERFJfN18wKHJlZ19hZGRyKTsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19i YXNlICsgRVhZTk9TX0RQX0FVWF9BRERSXzdfMCk7Ci0JCXJlZyA9IEFVWF9BRERSXzE1XzgocmVn X2FkZHIpOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQVVYX0FERFJf MTVfOCk7Ci0JCXJlZyA9IEFVWF9BRERSXzE5XzE2KHJlZ19hZGRyKTsKLQkJd3JpdGVsKHJlZywg ZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0FVWF9BRERSXzE5XzE2KTsKLQotCQkvKiBXcml0ZSBk YXRhIGJ1ZmZlciAqLwotCQlyZWcgPSAodW5zaWduZWQgaW50KWRhdGE7Ci0JCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9CVUZfREFUQV8wKTsKLQotCQkvKgotCQkgKiBTZXQg RGlzcGxheVBvcnQgdHJhbnNhY3Rpb24gYW5kIHdyaXRlIDEgYnl0ZQotCQkgKiBJZiBiaXQgMyBp cyAxLCBEaXNwbGF5UG9ydCB0cmFuc2FjdGlvbi4KLQkJICogSWYgQml0IDMgaXMgMCwgSTJDIHRy YW5zYWN0aW9uLgotCQkgKi8KLQkJcmVnID0gQVVYX1RYX0NPTU1fRFBfVFJBTlNBQ1RJT04gfCBB VVhfVFhfQ09NTV9XUklURTsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X0FVWF9DSF9DVExfMSk7Ci0KLQkJLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9uICovCi0JCXJldHZh bCA9IGV4eW5vc19kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOwotCQlpZiAocmV0dmFsID09 IDApCi0JCQlicmVhazsKLQkJZWxzZQotCQkJZGV2X2RiZyhkcC0+ZGV2LCAiJXM6IEF1eCBUcmFu c2FjdGlvbiBmYWlsIVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsK LX0KLQotaW50IGV4eW5vc19kcF9yZWFkX2J5dGVfZnJvbV9kcGNkKHN0cnVjdCBleHlub3NfZHBf ZGV2aWNlICpkcCwKLQkJCQl1bnNpZ25lZCBpbnQgcmVnX2FkZHIsCi0JCQkJdW5zaWduZWQgY2hh ciAqZGF0YSkKLXsKLQl1MzIgcmVnOwotCWludCBpOwotCWludCByZXR2YWw7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKSB7Ci0JCS8qIENsZWFyIEFVWCBDSCBkYXRhIGJ1ZmZlciAqLwotCQly ZWcgPSBCVUZfQ0xSOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQlVG RkVSX0RBVEFfQ1RMKTsKLQotCQkvKiBTZWxlY3QgRFBDRCBkZXZpY2UgYWRkcmVzcyAqLwotCQly ZWcgPSBBVVhfQUREUl83XzAocmVnX2FkZHIpOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2Ug KyBFWFlOT1NfRFBfQVVYX0FERFJfN18wKTsKLQkJcmVnID0gQVVYX0FERFJfMTVfOChyZWdfYWRk cik7Ci0JCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9BVVhfQUREUl8xNV84 KTsKLQkJcmVnID0gQVVYX0FERFJfMTlfMTYocmVnX2FkZHIpOwotCQl3cml0ZWwocmVnLCBkcC0+ cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQVVYX0FERFJfMTlfMTYpOwotCi0JCS8qCi0JCSAqIFNldCBE aXNwbGF5UG9ydCB0cmFuc2FjdGlvbiBhbmQgcmVhZCAxIGJ5dGUKLQkJICogSWYgYml0IDMgaXMg MSwgRGlzcGxheVBvcnQgdHJhbnNhY3Rpb24uCi0JCSAqIElmIEJpdCAzIGlzIDAsIEkyQyB0cmFu c2FjdGlvbi4KLQkJICovCi0JCXJlZyA9IEFVWF9UWF9DT01NX0RQX1RSQU5TQUNUSU9OIHwgQVVY X1RYX0NPTU1fUkVBRDsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0FV WF9DSF9DVExfMSk7Ci0KLQkJLyogU3RhcnQgQVVYIHRyYW5zYWN0aW9uICovCi0JCXJldHZhbCA9 IGV4eW5vc19kcF9zdGFydF9hdXhfdHJhbnNhY3Rpb24oZHApOwotCQlpZiAocmV0dmFsID09IDAp Ci0JCQlicmVhazsKLQkJZWxzZQotCQkJZGV2X2RiZyhkcC0+ZGV2LCAiJXM6IEF1eCBUcmFuc2Fj dGlvbiBmYWlsIVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JfQotCi0JLyogUmVhZCBkYXRhIGJ1ZmZl ciAqLwotCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9CVUZfREFUQV8wKTsK LQkqZGF0YSA9ICh1bnNpZ25lZCBjaGFyKShyZWcgJiAweGZmKTsKLQotCXJldHVybiByZXR2YWw7 Ci19Ci0KLWludCBleHlub3NfZHBfd3JpdGVfYnl0ZXNfdG9fZHBjZChzdHJ1Y3QgZXh5bm9zX2Rw X2RldmljZSAqZHAsCi0JCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJCXVuc2lnbmVkIGlu dCBjb3VudCwKLQkJCQl1bnNpZ25lZCBjaGFyIGRhdGFbXSkKLXsKLQl1MzIgcmVnOwotCXVuc2ln bmVkIGludCBzdGFydF9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGN1cl9kYXRhX2NvdW50OwotCXVu c2lnbmVkIGludCBjdXJfZGF0YV9pZHg7Ci0JaW50IGk7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQkv KiBDbGVhciBBVVggQ0ggZGF0YSBidWZmZXIgKi8KLQlyZWcgPSBCVUZfQ0xSOwotCXdyaXRlbChy ZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9CVUZGRVJfREFUQV9DVEwpOwotCi0Jc3RhcnRf b2Zmc2V0ID0gMDsKLQl3aGlsZSAoc3RhcnRfb2Zmc2V0IDwgY291bnQpIHsKLQkJLyogQnVmZmVy IHNpemUgb2YgQVVYIENIIGlzIDE2ICogNGJ5dGVzICovCi0JCWlmICgoY291bnQgLSBzdGFydF9v ZmZzZXQpID4gMTYpCi0JCQljdXJfZGF0YV9jb3VudCA9IDE2OwotCQllbHNlCi0JCQljdXJfZGF0 YV9jb3VudCA9IGNvdW50IC0gc3RhcnRfb2Zmc2V0OwotCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBp KyspIHsKLQkJCS8qIFNlbGVjdCBEUENEIGRldmljZSBhZGRyZXNzICovCi0JCQlyZWcgPSBBVVhf QUREUl83XzAocmVnX2FkZHIgKyBzdGFydF9vZmZzZXQpOwotCQkJd3JpdGVsKHJlZywgZHAtPnJl Z19iYXNlICsgRVhZTk9TX0RQX0FVWF9BRERSXzdfMCk7Ci0JCQlyZWcgPSBBVVhfQUREUl8xNV84 KHJlZ19hZGRyICsgc3RhcnRfb2Zmc2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSAr IEVYWU5PU19EUF9BVVhfQUREUl8xNV84KTsKLQkJCXJlZyA9IEFVWF9BRERSXzE5XzE2KHJlZ19h ZGRyICsgc3RhcnRfb2Zmc2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5P U19EUF9BVVhfQUREUl8xOV8xNik7Ci0KLQkJCWZvciAoY3VyX2RhdGFfaWR4ID0gMDsgY3VyX2Rh dGFfaWR4IDwgY3VyX2RhdGFfY291bnQ7Ci0JCQkgICAgIGN1cl9kYXRhX2lkeCsrKSB7Ci0JCQkJ cmVnID0gZGF0YVtzdGFydF9vZmZzZXQgKyBjdXJfZGF0YV9pZHhdOwotCQkJCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9CVUZfREFUQV8wCi0JCQkJCQkJICArIDQgKiBjdXJf ZGF0YV9pZHgpOwotCQkJfQotCi0JCQkvKgotCQkJICogU2V0IERpc3BsYXlQb3J0IHRyYW5zYWN0 aW9uIGFuZCB3cml0ZQotCQkJICogSWYgYml0IDMgaXMgMSwgRGlzcGxheVBvcnQgdHJhbnNhY3Rp b24uCi0JCQkgKiBJZiBCaXQgMyBpcyAwLCBJMkMgdHJhbnNhY3Rpb24uCi0JCQkgKi8KLQkJCXJl ZyA9IEFVWF9MRU5HVEgoY3VyX2RhdGFfY291bnQpIHwKLQkJCQlBVVhfVFhfQ09NTV9EUF9UUkFO U0FDVElPTiB8IEFVWF9UWF9DT01NX1dSSVRFOwotCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNl ICsgRVhZTk9TX0RQX0FVWF9DSF9DVExfMSk7Ci0KLQkJCS8qIFN0YXJ0IEFVWCB0cmFuc2FjdGlv biAqLwotCQkJcmV0dmFsID0gZXh5bm9zX2RwX3N0YXJ0X2F1eF90cmFuc2FjdGlvbihkcCk7Ci0J CQlpZiAocmV0dmFsID09IDApCi0JCQkJYnJlYWs7Ci0JCQllbHNlCi0JCQkJZGV2X2RiZyhkcC0+ ZGV2LCAiJXM6IEF1eCBUcmFuc2FjdGlvbiBmYWlsIVxuIiwKLQkJCQkJX19mdW5jX18pOwotCQl9 Ci0KLQkJc3RhcnRfb2Zmc2V0ICs9IGN1cl9kYXRhX2NvdW50OwotCX0KLQotCXJldHVybiByZXR2 YWw7Ci19Ci0KLWludCBleHlub3NfZHBfcmVhZF9ieXRlc19mcm9tX2RwY2Qoc3RydWN0IGV4eW5v c19kcF9kZXZpY2UgKmRwLAotCQkJCXVuc2lnbmVkIGludCByZWdfYWRkciwKLQkJCQl1bnNpZ25l ZCBpbnQgY291bnQsCi0JCQkJdW5zaWduZWQgY2hhciBkYXRhW10pCi17Ci0JdTMyIHJlZzsKLQl1 bnNpZ25lZCBpbnQgc3RhcnRfb2Zmc2V0OwotCXVuc2lnbmVkIGludCBjdXJfZGF0YV9jb3VudDsK LQl1bnNpZ25lZCBpbnQgY3VyX2RhdGFfaWR4OwotCWludCBpOwotCWludCByZXR2YWwgPSAwOwot Ci0JLyogQ2xlYXIgQVVYIENIIGRhdGEgYnVmZmVyICovCi0JcmVnID0gQlVGX0NMUjsKLQl3cml0 ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQlVGRkVSX0RBVEFfQ1RMKTsKLQotCXN0 YXJ0X29mZnNldCA9IDA7Ci0Jd2hpbGUgKHN0YXJ0X29mZnNldCA8IGNvdW50KSB7Ci0JCS8qIEJ1 ZmZlciBzaXplIG9mIEFVWCBDSCBpcyAxNiAqIDRieXRlcyAqLwotCQlpZiAoKGNvdW50IC0gc3Rh cnRfb2Zmc2V0KSA+IDE2KQotCQkJY3VyX2RhdGFfY291bnQgPSAxNjsKLQkJZWxzZQotCQkJY3Vy X2RhdGFfY291bnQgPSBjb3VudCAtIHN0YXJ0X29mZnNldDsKLQotCQkvKiBBVVggQ0ggUmVxdWVz dCBUcmFuc2FjdGlvbiBwcm9jZXNzICovCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJ CS8qIFNlbGVjdCBEUENEIGRldmljZSBhZGRyZXNzICovCi0JCQlyZWcgPSBBVVhfQUREUl83XzAo cmVnX2FkZHIgKyBzdGFydF9vZmZzZXQpOwotCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg RVhZTk9TX0RQX0FVWF9BRERSXzdfMCk7Ci0JCQlyZWcgPSBBVVhfQUREUl8xNV84KHJlZ19hZGRy ICsgc3RhcnRfb2Zmc2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19E UF9BVVhfQUREUl8xNV84KTsKLQkJCXJlZyA9IEFVWF9BRERSXzE5XzE2KHJlZ19hZGRyICsgc3Rh cnRfb2Zmc2V0KTsKLQkJCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9BVVhf QUREUl8xOV8xNik7Ci0KLQkJCS8qCi0JCQkgKiBTZXQgRGlzcGxheVBvcnQgdHJhbnNhY3Rpb24g YW5kIHJlYWQKLQkJCSAqIElmIGJpdCAzIGlzIDEsIERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uLgot CQkJICogSWYgQml0IDMgaXMgMCwgSTJDIHRyYW5zYWN0aW9uLgotCQkJICovCi0JCQlyZWcgPSBB VVhfTEVOR1RIKGN1cl9kYXRhX2NvdW50KSB8Ci0JCQkJQVVYX1RYX0NPTU1fRFBfVFJBTlNBQ1RJ T04gfCBBVVhfVFhfQ09NTV9SRUFEOwotCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX0FVWF9DSF9DVExfMSk7Ci0KLQkJCS8qIFN0YXJ0IEFVWCB0cmFuc2FjdGlvbiAqLwot CQkJcmV0dmFsID0gZXh5bm9zX2RwX3N0YXJ0X2F1eF90cmFuc2FjdGlvbihkcCk7Ci0JCQlpZiAo cmV0dmFsID09IDApCi0JCQkJYnJlYWs7Ci0JCQllbHNlCi0JCQkJZGV2X2RiZyhkcC0+ZGV2LCAi JXM6IEF1eCBUcmFuc2FjdGlvbiBmYWlsIVxuIiwKLQkJCQkJX19mdW5jX18pOwotCQl9Ci0KLQkJ Zm9yIChjdXJfZGF0YV9pZHggPSAwOyBjdXJfZGF0YV9pZHggPCBjdXJfZGF0YV9jb3VudDsKLQkJ ICAgIGN1cl9kYXRhX2lkeCsrKSB7Ci0JCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlO T1NfRFBfQlVGX0RBVEFfMAotCQkJCQkJICsgNCAqIGN1cl9kYXRhX2lkeCk7Ci0JCQlkYXRhW3N0 YXJ0X29mZnNldCArIGN1cl9kYXRhX2lkeF0gPQotCQkJCSh1bnNpZ25lZCBjaGFyKXJlZzsKLQkJ fQotCi0JCXN0YXJ0X29mZnNldCArPSBjdXJfZGF0YV9jb3VudDsKLQl9Ci0KLQlyZXR1cm4gcmV0 dmFsOwotfQotCi1pbnQgZXh5bm9zX2RwX3NlbGVjdF9pMmNfZGV2aWNlKHN0cnVjdCBleHlub3Nf ZHBfZGV2aWNlICpkcCwKLQkJCQl1bnNpZ25lZCBpbnQgZGV2aWNlX2FkZHIsCi0JCQkJdW5zaWdu ZWQgaW50IHJlZ19hZGRyKQotewotCXUzMiByZWc7Ci0JaW50IHJldHZhbDsKLQotCS8qIFNldCBF RElEIGRldmljZSBhZGRyZXNzICovCi0JcmVnID0gZGV2aWNlX2FkZHI7Ci0Jd3JpdGVsKHJlZywg ZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0FVWF9BRERSXzdfMCk7Ci0Jd3JpdGVsKDB4MCwgZHAt PnJlZ19iYXNlICsgRVhZTk9TX0RQX0FVWF9BRERSXzE1XzgpOwotCXdyaXRlbCgweDAsIGRwLT5y ZWdfYmFzZSArIEVYWU5PU19EUF9BVVhfQUREUl8xOV8xNik7Ci0KLQkvKiBTZXQgb2Zmc2V0IGZy b20gYmFzZSBhZGRyZXNzIG9mIEVESUQgZGV2aWNlICovCi0Jd3JpdGVsKHJlZ19hZGRyLCBkcC0+ cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQlVGX0RBVEFfMCk7Ci0KLQkvKgotCSAqIFNldCBJMkMgdHJh bnNhY3Rpb24gYW5kIHdyaXRlIGFkZHJlc3MKLQkgKiBJZiBiaXQgMyBpcyAxLCBEaXNwbGF5UG9y dCB0cmFuc2FjdGlvbi4KLQkgKiBJZiBCaXQgMyBpcyAwLCBJMkMgdHJhbnNhY3Rpb24uCi0JICov Ci0JcmVnID0gQVVYX1RYX0NPTU1fSTJDX1RSQU5TQUNUSU9OIHwgQVVYX1RYX0NPTU1fTU9UIHwK LQkJQVVYX1RYX0NPTU1fV1JJVEU7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9T X0RQX0FVWF9DSF9DVExfMSk7Ci0KLQkvKiBTdGFydCBBVVggdHJhbnNhY3Rpb24gKi8KLQlyZXR2 YWwgPSBleHlub3NfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKLQlpZiAocmV0dmFsICE9 IDApCi0JCWRldl9kYmcoZHAtPmRldiwgIiVzOiBBdXggVHJhbnNhY3Rpb24gZmFpbCFcbiIsIF9f ZnVuY19fKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBleHlub3NfZHBfcmVhZF9ieXRl X2Zyb21faTJjKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKLQkJCQl1bnNpZ25lZCBpbnQg ZGV2aWNlX2FkZHIsCi0JCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJCXVuc2lnbmVkIGlu dCAqZGF0YSkKLXsKLQl1MzIgcmVnOwotCWludCBpOwotCWludCByZXR2YWw7Ci0KLQlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKSB7Ci0JCS8qIENsZWFyIEFVWCBDSCBkYXRhIGJ1ZmZlciAqLwotCQly ZWcgPSBCVUZfQ0xSOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQlVG RkVSX0RBVEFfQ1RMKTsKLQotCQkvKiBTZWxlY3QgRURJRCBkZXZpY2UgKi8KLQkJcmV0dmFsID0g ZXh5bm9zX2RwX3NlbGVjdF9pMmNfZGV2aWNlKGRwLCBkZXZpY2VfYWRkciwgcmVnX2FkZHIpOwot CQlpZiAocmV0dmFsICE9IDApCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBTZXQgSTJDIHRy YW5zYWN0aW9uIGFuZCByZWFkIGRhdGEKLQkJICogSWYgYml0IDMgaXMgMSwgRGlzcGxheVBvcnQg dHJhbnNhY3Rpb24uCi0JCSAqIElmIEJpdCAzIGlzIDAsIEkyQyB0cmFuc2FjdGlvbi4KLQkJICov Ci0JCXJlZyA9IEFVWF9UWF9DT01NX0kyQ19UUkFOU0FDVElPTiB8Ci0JCQlBVVhfVFhfQ09NTV9S RUFEOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQVVYX0NIX0NUTF8x KTsKLQotCQkvKiBTdGFydCBBVVggdHJhbnNhY3Rpb24gKi8KLQkJcmV0dmFsID0gZXh5bm9zX2Rw X3N0YXJ0X2F1eF90cmFuc2FjdGlvbihkcCk7Ci0JCWlmIChyZXR2YWwgPT0gMCkKLQkJCWJyZWFr OwotCQllbHNlCi0JCQlkZXZfZGJnKGRwLT5kZXYsICIlczogQXV4IFRyYW5zYWN0aW9uIGZhaWwh XG4iLAotCQkJCV9fZnVuY19fKTsKLQl9Ci0KLQkvKiBSZWFkIGRhdGEgKi8KLQlpZiAocmV0dmFs ID09IDApCi0JCSpkYXRhID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0JVRl9EQVRB XzApOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotaW50IGV4eW5vc19kcF9yZWFkX2J5dGVzX2Zy b21faTJjKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwKLQkJCQl1bnNpZ25lZCBpbnQgZGV2 aWNlX2FkZHIsCi0JCQkJdW5zaWduZWQgaW50IHJlZ19hZGRyLAotCQkJCXVuc2lnbmVkIGludCBj b3VudCwKLQkJCQl1bnNpZ25lZCBjaGFyIGVkaWRbXSkKLXsKLQl1MzIgcmVnOwotCXVuc2lnbmVk IGludCBpLCBqOwotCXVuc2lnbmVkIGludCBjdXJfZGF0YV9pZHg7Ci0JdW5zaWduZWQgaW50IGRl ZmVyID0gMDsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSAr PSAxNikgewotCQlmb3IgKGogPSAwOyBqIDwgMzsgaisrKSB7Ci0JCQkvKiBDbGVhciBBVVggQ0gg ZGF0YSBidWZmZXIgKi8KLQkJCXJlZyA9IEJVRl9DTFI7Ci0JCQl3cml0ZWwocmVnLCBkcC0+cmVn X2Jhc2UgKyBFWFlOT1NfRFBfQlVGRkVSX0RBVEFfQ1RMKTsKLQotCQkJLyogU2V0IG5vcm1hbCBB VVggQ0ggY29tbWFuZCAqLwotCQkJcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X0FVWF9DSF9DVExfMik7Ci0JCQlyZWcgJj0gfkFERFJfT05MWTsKLQkJCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9BVVhfQ0hfQ1RMXzIpOwotCi0JCQkvKgotCQkJICogSWYg Unggc2VuZHMgZGVmZXIsIFR4IHNlbmRzIG9ubHkgcmVhZHMKLQkJCSAqIHJlcXVlc3Qgd2l0aG91 dCBzZW5kaW5nIGFkZHJlc3MKLQkJCSAqLwotCQkJaWYgKCFkZWZlcikKLQkJCQlyZXR2YWwgPSBl eHlub3NfZHBfc2VsZWN0X2kyY19kZXZpY2UoZHAsCi0JCQkJCQlkZXZpY2VfYWRkciwgcmVnX2Fk ZHIgKyBpKTsKLQkJCWVsc2UKLQkJCQlkZWZlciA9IDA7Ci0KLQkJCWlmIChyZXR2YWwgPT0gMCkg ewotCQkJCS8qCi0JCQkJICogU2V0IEkyQyB0cmFuc2FjdGlvbiBhbmQgd3JpdGUgZGF0YQotCQkJ CSAqIElmIGJpdCAzIGlzIDEsIERpc3BsYXlQb3J0IHRyYW5zYWN0aW9uLgotCQkJCSAqIElmIEJp dCAzIGlzIDAsIEkyQyB0cmFuc2FjdGlvbi4KLQkJCQkgKi8KLQkJCQlyZWcgPSBBVVhfTEVOR1RI KDE2KSB8Ci0JCQkJCUFVWF9UWF9DT01NX0kyQ19UUkFOU0FDVElPTiB8Ci0JCQkJCUFVWF9UWF9D T01NX1JFQUQ7Ci0JCQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsKLQkJCQkJRVhZTk9TX0RQ X0FVWF9DSF9DVExfMSk7Ci0KLQkJCQkvKiBTdGFydCBBVVggdHJhbnNhY3Rpb24gKi8KLQkJCQly ZXR2YWwgPSBleHlub3NfZHBfc3RhcnRfYXV4X3RyYW5zYWN0aW9uKGRwKTsKLQkJCQlpZiAocmV0 dmFsID09IDApCi0JCQkJCWJyZWFrOwotCQkJCWVsc2UKLQkJCQkJZGV2X2RiZyhkcC0+ZGV2LAot CQkJCQkJIiVzOiBBdXggVHJhbnNhY3Rpb24gZmFpbCFcbiIsCi0JCQkJCQlfX2Z1bmNfXyk7Ci0J CQl9Ci0JCQkvKiBDaGVjayBpZiBSeCBzZW5kcyBkZWZlciAqLwotCQkJcmVnID0gcmVhZGwoZHAt PnJlZ19iYXNlICsgRVhZTk9TX0RQX0FVWF9SWF9DT01NKTsKLQkJCWlmIChyZWcgPT0gQVVYX1JY X0NPTU1fQVVYX0RFRkVSIHx8Ci0JCQkJcmVnID09IEFVWF9SWF9DT01NX0kyQ19ERUZFUikgewot CQkJCWRldl9lcnIoZHAtPmRldiwgIkRlZmVyOiAlZFxuXG4iLCByZWcpOwotCQkJCWRlZmVyID0g MTsKLQkJCX0KLQkJfQotCi0JCWZvciAoY3VyX2RhdGFfaWR4ID0gMDsgY3VyX2RhdGFfaWR4IDwg MTY7IGN1cl9kYXRhX2lkeCsrKSB7Ci0JCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlO T1NfRFBfQlVGX0RBVEFfMAotCQkJCQkJICsgNCAqIGN1cl9kYXRhX2lkeCk7Ci0JCQllZGlkW2kg KyBjdXJfZGF0YV9pZHhdID0gKHVuc2lnbmVkIGNoYXIpcmVnOwotCQl9Ci0JfQotCi0JcmV0dXJu IHJldHZhbDsKLX0KLQotdm9pZCBleHlub3NfZHBfc2V0X2xpbmtfYmFuZHdpZHRoKHN0cnVjdCBl eHlub3NfZHBfZGV2aWNlICpkcCwgdTMyIGJ3dHlwZSkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0g Ynd0eXBlOwotCWlmICgoYnd0eXBlID09IExJTktfUkFURV8yXzcwR0JQUykgfHwgKGJ3dHlwZSA9 PSBMSU5LX1JBVEVfMV82MkdCUFMpKQotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlO T1NfRFBfTElOS19CV19TRVQpOwotfQotCi12b2lkIGV4eW5vc19kcF9nZXRfbGlua19iYW5kd2lk dGgoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLCB1MzIgKmJ3dHlwZSkKLXsKLQl1MzIgcmVn OwotCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0xJTktfQldfU0VUKTsK LQkqYnd0eXBlID0gcmVnOwotfQotCi12b2lkIGV4eW5vc19kcF9zZXRfbGFuZV9jb3VudChzdHJ1 Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsIHUzMiBjb3VudCkKLXsKLQl1MzIgcmVnOwotCi0JcmVn ID0gY291bnQ7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0xBTkVfQ09V TlRfU0VUKTsKLX0KLQotdm9pZCBleHlub3NfZHBfZ2V0X2xhbmVfY291bnQoc3RydWN0IGV4eW5v c19kcF9kZXZpY2UgKmRwLCB1MzIgKmNvdW50KQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSByZWFk bChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfTEFORV9DT1VOVF9TRVQpOwotCSpjb3VudCA9IHJl ZzsKLX0KLQotdm9pZCBleHlub3NfZHBfZW5hYmxlX2VuaGFuY2VkX21vZGUoc3RydWN0IGV4eW5v c19kcF9kZXZpY2UgKmRwLCBib29sIGVuYWJsZSkKLXsKLQl1MzIgcmVnOwotCi0JaWYgKGVuYWJs ZSkgewotCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfU1lTX0NUTF80KTsK LQkJcmVnIHw9IEVOSEFOQ0VEOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1Nf RFBfU1lTX0NUTF80KTsKLQl9IGVsc2UgewotCQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBF WFlOT1NfRFBfU1lTX0NUTF80KTsKLQkJcmVnICY9IH5FTkhBTkNFRDsKLQkJd3JpdGVsKHJlZywg ZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfNCk7Ci0JfQotfQotCi12b2lkIGV4eW5v c19kcF9zZXRfdHJhaW5pbmdfcGF0dGVybihzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0J CQkJIGVudW0gcGF0dGVybl9zZXQgcGF0dGVybikKLXsKLQl1MzIgcmVnOwotCi0Jc3dpdGNoIChw YXR0ZXJuKSB7Ci0JY2FzZSBQUkJTNzoKLQkJcmVnID0gU0NSQU1CTElOR19FTkFCTEUgfCBMSU5L X1FVQUxfUEFUVEVSTl9TRVRfUFJCUzc7Ci0JCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVY WU5PU19EUF9UUkFJTklOR19QVE5fU0VUKTsKLQkJYnJlYWs7Ci0JY2FzZSBEMTBfMjoKLQkJcmVn ID0gU0NSQU1CTElOR19FTkFCTEUgfCBMSU5LX1FVQUxfUEFUVEVSTl9TRVRfRDEwXzI7Ci0JCXdy aXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9UUkFJTklOR19QVE5fU0VUKTsKLQkJ YnJlYWs7Ci0JY2FzZSBUUkFJTklOR19QVE4xOgotCQlyZWcgPSBTQ1JBTUJMSU5HX0RJU0FCTEUg fCBTV19UUkFJTklOR19QQVRURVJOX1NFVF9QVE4xOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBFWFlOT1NfRFBfVFJBSU5JTkdfUFROX1NFVCk7Ci0JCWJyZWFrOwotCWNhc2UgVFJBSU5J TkdfUFROMjoKLQkJcmVnID0gU0NSQU1CTElOR19ESVNBQkxFIHwgU1dfVFJBSU5JTkdfUEFUVEVS Tl9TRVRfUFROMjsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1RSQUlO SU5HX1BUTl9TRVQpOwotCQlicmVhazsKLQljYXNlIERQX05PTkU6Ci0JCXJlZyA9IFNDUkFNQkxJ TkdfRU5BQkxFIHwKLQkJCUxJTktfUVVBTF9QQVRURVJOX1NFVF9ESVNBQkxFIHwKLQkJCVNXX1RS QUlOSU5HX1BBVFRFUk5fU0VUX05PUk1BTDsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsg RVhZTk9TX0RQX1RSQUlOSU5HX1BUTl9TRVQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVh azsKLQl9Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX3NldF9sYW5lMF9wcmVfZW1waGFzaXMoc3RydWN0 IGV4eW5vc19kcF9kZXZpY2UgKmRwLCB1MzIgbGV2ZWwpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9 IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjBfTElOS19UUkFJTklOR19DVEwpOwot CXJlZyAmPSB+UFJFX0VNUEhBU0lTX1NFVF9NQVNLOwotCXJlZyB8PSBsZXZlbCA8PCBQUkVfRU1Q SEFTSVNfU0VUX1NISUZUOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9M TjBfTElOS19UUkFJTklOR19DVEwpOwotfQotCi12b2lkIGV4eW5vc19kcF9zZXRfbGFuZTFfcHJl X2VtcGhhc2lzKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCwgdTMyIGxldmVsKQotewotCXUz MiByZWc7Ci0KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfTE4xX0xJTktf VFJBSU5JTkdfQ1RMKTsKLQlyZWcgJj0gflBSRV9FTVBIQVNJU19TRVRfTUFTSzsKLQlyZWcgfD0g bGV2ZWwgPDwgUFJFX0VNUEhBU0lTX1NFVF9TSElGVDsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBFWFlOT1NfRFBfTE4xX0xJTktfVFJBSU5JTkdfQ1RMKTsKLX0KLQotdm9pZCBleHlub3Nf ZHBfc2V0X2xhbmUyX3ByZV9lbXBoYXNpcyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsIHUz MiBsZXZlbCkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX0xOMl9MSU5LX1RSQUlOSU5HX0NUTCk7Ci0JcmVnICY9IH5QUkVfRU1QSEFTSVNfU0VU X01BU0s7Ci0JcmVnIHw9IGxldmVsIDw8IFBSRV9FTVBIQVNJU19TRVRfU0hJRlQ7Ci0Jd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0xOMl9MSU5LX1RSQUlOSU5HX0NUTCk7Ci19 Ci0KLXZvaWQgZXh5bm9zX2RwX3NldF9sYW5lM19wcmVfZW1waGFzaXMoc3RydWN0IGV4eW5vc19k cF9kZXZpY2UgKmRwLCB1MzIgbGV2ZWwpCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IHJlYWRsKGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjNfTElOS19UUkFJTklOR19DVEwpOwotCXJlZyAmPSB+ UFJFX0VNUEhBU0lTX1NFVF9NQVNLOwotCXJlZyB8PSBsZXZlbCA8PCBQUkVfRU1QSEFTSVNfU0VU X1NISUZUOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjNfTElOS19U UkFJTklOR19DVEwpOwotfQotCi12b2lkIGV4eW5vc19kcF9zZXRfbGFuZTBfbGlua190cmFpbmlu ZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0JCQkJCXUzMiB0cmFpbmluZ19sYW5lKQot ewotCXUzMiByZWc7Ci0KLQlyZWcgPSB0cmFpbmluZ19sYW5lOwotCXdyaXRlbChyZWcsIGRwLT5y ZWdfYmFzZSArIEVYWU5PU19EUF9MTjBfTElOS19UUkFJTklOR19DVEwpOwotfQotCi12b2lkIGV4 eW5vc19kcF9zZXRfbGFuZTFfbGlua190cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAq ZHAsCi0JCQkJCXUzMiB0cmFpbmluZ19sYW5lKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSB0cmFp bmluZ19sYW5lOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjFfTElO S19UUkFJTklOR19DVEwpOwotfQotCi12b2lkIGV4eW5vc19kcF9zZXRfbGFuZTJfbGlua190cmFp bmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsCi0JCQkJCXUzMiB0cmFpbmluZ19sYW5l KQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSB0cmFpbmluZ19sYW5lOwotCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjJfTElOS19UUkFJTklOR19DVEwpOwotfQotCi12b2lk IGV4eW5vc19kcF9zZXRfbGFuZTNfbGlua190cmFpbmluZyhzdHJ1Y3QgZXh5bm9zX2RwX2Rldmlj ZSAqZHAsCi0JCQkJCXUzMiB0cmFpbmluZ19sYW5lKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSB0 cmFpbmluZ19sYW5lOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjNf TElOS19UUkFJTklOR19DVEwpOwotfQotCi11MzIgZXh5bm9zX2RwX2dldF9sYW5lMF9saW5rX3Ry YWluaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQl1MzIgcmVnOwotCi0JcmVn ID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0xOMF9MSU5LX1RSQUlOSU5HX0NUTCk7 Ci0JcmV0dXJuIHJlZzsKLX0KLQotdTMyIGV4eW5vc19kcF9nZXRfbGFuZTFfbGlua190cmFpbmlu ZyhzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IHJl YWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9MTjFfTElOS19UUkFJTklOR19DVEwpOwotCXJl dHVybiByZWc7Ci19Ci0KLXUzMiBleHlub3NfZHBfZ2V0X2xhbmUyX2xpbmtfdHJhaW5pbmcoc3Ry dWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfTE4yX0xJTktfVFJBSU5JTkdfQ1RMKTsKLQlyZXR1cm4g cmVnOwotfQotCi11MzIgZXh5bm9zX2RwX2dldF9sYW5lM19saW5rX3RyYWluaW5nKHN0cnVjdCBl eHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gcmVhZGwoZHAtPnJl Z19iYXNlICsgRVhZTk9TX0RQX0xOM19MSU5LX1RSQUlOSU5HX0NUTCk7Ci0JcmV0dXJuIHJlZzsK LX0KLQotdm9pZCBleHlub3NfZHBfcmVzZXRfbWFjcm8oc3RydWN0IGV4eW5vc19kcF9kZXZpY2Ug KmRwKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1Nf RFBfUEhZX1RFU1QpOwotCXJlZyB8PSBNQUNST19SU1Q7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19i YXNlICsgRVhZTk9TX0RQX1BIWV9URVNUKTsKLQotCS8qIDEwIHVzIGlzIHRoZSBtaW5pbXVtIHJl c2V0IHRpbWUuICovCi0JdXNsZWVwX3JhbmdlKDEwLCAyMCk7Ci0KLQlyZWcgJj0gfk1BQ1JPX1JT VDsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfUEhZX1RFU1QpOwotfQot Ci12b2lkIGV4eW5vc19kcF9pbml0X3ZpZGVvKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkK LXsKLQl1MzIgcmVnOwotCi0JcmVnID0gVlNZTkNfREVUIHwgVklEX0ZPUk1BVF9DSEcgfCBWSURf Q0xLX0NIRzsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfQ09NTU9OX0lO VF9TVEFfMSk7Ci0KLQlyZWcgPSAweDA7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZ Tk9TX0RQX1NZU19DVExfMSk7Ci0KLQlyZWcgPSBDSEFfQ1JJKDQpIHwgQ0hBX0NUUkw7Ci0Jd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfMik7Ci0KLQlyZWcgPSAw eDA7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfMyk7Ci0K LQlyZWcgPSBWSURfSFJFU19USCgyKSB8IFZJRF9WUkVTX1RIKDApOwotCXdyaXRlbChyZWcsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9WSURFT19DVExfOCk7Ci19Ci0KLXZvaWQgZXh5bm9zX2Rw X3NldF92aWRlb19jb2xvcl9mb3JtYXQoc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQotewot CXUzMiByZWc7Ci0KLQkvKiBDb25maWd1cmUgdGhlIGlucHV0IGNvbG9yIGRlcHRoLCBjb2xvciBz cGFjZSwgZHluYW1pYyByYW5nZSAqLwotCXJlZyA9IChkcC0+dmlkZW9faW5mby0+ZHluYW1pY19y YW5nZSA8PCBJTl9EX1JBTkdFX1NISUZUKSB8Ci0JCShkcC0+dmlkZW9faW5mby0+Y29sb3JfZGVw dGggPDwgSU5fQlBDX1NISUZUKSB8Ci0JCShkcC0+dmlkZW9faW5mby0+Y29sb3Jfc3BhY2UgPDwg SU5fQ09MT1JfRl9TSElGVCk7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X1ZJREVPX0NUTF8yKTsKLQotCS8qIFNldCBJbnB1dCBDb2xvciBZQ2JDciBDb2VmZmljaWVudHMg dG8gSVRVNjAxIG9yIElUVTcwOSAqLwotCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5P U19EUF9WSURFT19DVExfMyk7Ci0JcmVnICY9IH5JTl9ZQ19DT0VGRklfTUFTSzsKLQlpZiAoZHAt PnZpZGVvX2luZm8tPnljYmNyX2NvZWZmKQotCQlyZWcgfD0gSU5fWUNfQ09FRkZJX0lUVTcwOTsK LQllbHNlCi0JCXJlZyB8PSBJTl9ZQ19DT0VGRklfSVRVNjAxOwotCXdyaXRlbChyZWcsIGRwLT5y ZWdfYmFzZSArIEVYWU5PU19EUF9WSURFT19DVExfMyk7Ci19Ci0KLWludCBleHlub3NfZHBfaXNf c2xhdmVfdmlkZW9fc3RyZWFtX2Nsb2NrX29uKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkK LXsKLQl1MzIgcmVnOwotCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZ U19DVExfMSk7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExf MSk7Ci0KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfU1lTX0NUTF8xKTsK LQotCWlmICghKHJlZyAmIERFVF9TVEEpKSB7Ci0JCWRldl9kYmcoZHAtPmRldiwgIklucHV0IHN0 cmVhbSBjbG9jayBub3QgZGV0ZWN0ZWQuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J cmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfMik7Ci0Jd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfMik7Ci0KLQlyZWcgPSByZWFk bChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfU1lTX0NUTF8yKTsKLQlkZXZfZGJnKGRwLT5kZXYs ICJ3YWl0IFNZU19DVExfMi5cbiIpOwotCi0JaWYgKHJlZyAmIENIQV9TVEEpIHsKLQkJZGV2X2Ri ZyhkcC0+ZGV2LCAiSW5wdXQgc3RyZWFtIGNsayBpcyBjaGFuZ2luZ1xuIik7Ci0JCXJldHVybiAt RUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGV4eW5vc19kcF9zZXRfdmlkZW9f Y3JfbW4oc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwLAotCQllbnVtIGNsb2NrX3JlY292ZXJ5 X21fdmFsdWVfdHlwZSB0eXBlLAotCQl1MzIgbV92YWx1ZSwKLQkJdTMyIG5fdmFsdWUpCi17Ci0J dTMyIHJlZzsKLQotCWlmICh0eXBlID09IFJFR0lTVEVSX00pIHsKLQkJcmVnID0gcmVhZGwoZHAt PnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfNCk7Ci0JCXJlZyB8PSBGSVhfTV9WSUQ7Ci0J CXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzQpOwotCQlyZWcg PSBtX3ZhbHVlICYgMHhmZjsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQ X01fVklEXzApOwotCQlyZWcgPSAobV92YWx1ZSA+PiA4KSAmIDB4ZmY7Ci0JCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9NX1ZJRF8xKTsKLQkJcmVnID0gKG1fdmFsdWUgPj4g MTYpICYgMHhmZjsKLQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX01fVklE XzIpOwotCi0JCXJlZyA9IG5fdmFsdWUgJiAweGZmOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jh c2UgKyBFWFlOT1NfRFBfTl9WSURfMCk7Ci0JCXJlZyA9IChuX3ZhbHVlID4+IDgpICYgMHhmZjsK LQkJd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX05fVklEXzEpOwotCQlyZWcg PSAobl92YWx1ZSA+PiAxNikgJiAweGZmOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBF WFlOT1NfRFBfTl9WSURfMik7Ci0JfSBlbHNlICB7Ci0JCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEVYWU5PU19EUF9TWVNfQ1RMXzQpOwotCQlyZWcgJj0gfkZJWF9NX1ZJRDsKLQkJd3JpdGVs KHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfNCk7Ci0KLQkJd3JpdGVsKDB4 MDAsIGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9OX1ZJRF8wKTsKLQkJd3JpdGVsKDB4ODAsIGRw LT5yZWdfYmFzZSArIEVYWU5PU19EUF9OX1ZJRF8xKTsKLQkJd3JpdGVsKDB4MDAsIGRwLT5yZWdf YmFzZSArIEVYWU5PU19EUF9OX1ZJRF8yKTsKLQl9Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX3NldF92 aWRlb190aW1pbmdfbW9kZShzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHAsIHUzMiB0eXBlKQot ewotCXUzMiByZWc7Ci0KLQlpZiAodHlwZSA9PSBWSURFT19USU1JTkdfRlJPTV9DQVBUVVJFKSB7 Ci0JCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9WSURFT19DVExfMTApOwot CQlyZWcgJj0gfkZPUk1BVF9TRUw7Ci0JCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFzZSArIEVYWU5P U19EUF9WSURFT19DVExfMTApOwotCX0gZWxzZSB7Ci0JCXJlZyA9IHJlYWRsKGRwLT5yZWdfYmFz ZSArIEVYWU5PU19EUF9WSURFT19DVExfMTApOwotCQlyZWcgfD0gRk9STUFUX1NFTDsKLQkJd3Jp dGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1ZJREVPX0NUTF8xMCk7Ci0JfQotfQot Ci12b2lkIGV4eW5vc19kcF9lbmFibGVfdmlkZW9fbWFzdGVyKHN0cnVjdCBleHlub3NfZHBfZGV2 aWNlICpkcCwgYm9vbCBlbmFibGUpCi17Ci0JdTMyIHJlZzsKLQotCWlmIChlbmFibGUpIHsKLQkJ cmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1NPQ19HRU5FUkFMX0NUTCk7Ci0J CXJlZyAmPSB+VklERU9fTU9ERV9NQVNLOwotCQlyZWcgfD0gVklERU9fTUFTVEVSX01PREVfRU4g fCBWSURFT19NT0RFX01BU1RFUl9NT0RFOwotCQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBF WFlOT1NfRFBfU09DX0dFTkVSQUxfQ1RMKTsKLQl9IGVsc2UgewotCQlyZWcgPSByZWFkbChkcC0+ cmVnX2Jhc2UgKyBFWFlOT1NfRFBfU09DX0dFTkVSQUxfQ1RMKTsKLQkJcmVnICY9IH5WSURFT19N T0RFX01BU0s7Ci0JCXJlZyB8PSBWSURFT19NT0RFX1NMQVZFX01PREU7Ci0JCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TT0NfR0VORVJBTF9DVEwpOwotCX0KLX0KLQotdm9p ZCBleHlub3NfZHBfc3RhcnRfdmlkZW8oc3RydWN0IGV4eW5vc19kcF9kZXZpY2UgKmRwKQotewot CXUzMiByZWc7Ci0KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfVklERU9f Q1RMXzEpOwotCXJlZyB8PSBWSURFT19FTjsKLQl3cml0ZWwocmVnLCBkcC0+cmVnX2Jhc2UgKyBF WFlOT1NfRFBfVklERU9fQ1RMXzEpOwotfQotCi1pbnQgZXh5bm9zX2RwX2lzX3ZpZGVvX3N0cmVh bV9vbihzdHJ1Y3QgZXh5bm9zX2RwX2RldmljZSAqZHApCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9 IHJlYWRsKGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzMpOwotCXdyaXRlbChyZWcs IGRwLT5yZWdfYmFzZSArIEVYWU5PU19EUF9TWVNfQ1RMXzMpOwotCi0JcmVnID0gcmVhZGwoZHAt PnJlZ19iYXNlICsgRVhZTk9TX0RQX1NZU19DVExfMyk7Ci0JaWYgKCEocmVnICYgU1RSTV9WQUxJ RCkpIHsKLQkJZGV2X2RiZyhkcC0+ZGV2LCAiSW5wdXQgdmlkZW8gc3RyZWFtIGlzIG5vdCBkZXRl Y3RlZC5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9p ZCBleHlub3NfZHBfY29uZmlnX3ZpZGVvX3NsYXZlX21vZGUoc3RydWN0IGV4eW5vc19kcF9kZXZp Y2UgKmRwKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlO T1NfRFBfRlVOQ19FTl8xKTsKLQlyZWcgJj0gfihNQVNURVJfVklEX0ZVTkNfRU5fTnxTTEFWRV9W SURfRlVOQ19FTl9OKTsKLQlyZWcgfD0gTUFTVEVSX1ZJRF9GVU5DX0VOX047Ci0Jd3JpdGVsKHJl ZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX0ZVTkNfRU5fMSk7Ci0KLQlyZWcgPSByZWFkbChk cC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfVklERU9fQ1RMXzEwKTsKLQlyZWcgJj0gfklOVEVSQUNF X1NDQU5fQ0ZHOwotCXJlZyB8PSAoZHAtPnZpZGVvX2luZm8tPmludGVybGFjZWQgPDwgMik7Ci0J d3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1ZJREVPX0NUTF8xMCk7Ci0KLQly ZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfVklERU9fQ1RMXzEwKTsKLQlyZWcg Jj0gflZTWU5DX1BPTEFSSVRZX0NGRzsKLQlyZWcgfD0gKGRwLT52aWRlb19pbmZvLT52X3N5bmNf cG9sYXJpdHkgPDwgMSk7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1ZJ REVPX0NUTF8xMCk7Ci0KLQlyZWcgPSByZWFkbChkcC0+cmVnX2Jhc2UgKyBFWFlOT1NfRFBfVklE RU9fQ1RMXzEwKTsKLQlyZWcgJj0gfkhTWU5DX1BPTEFSSVRZX0NGRzsKLQlyZWcgfD0gKGRwLT52 aWRlb19pbmZvLT5oX3N5bmNfcG9sYXJpdHkgPDwgMCk7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19i YXNlICsgRVhZTk9TX0RQX1ZJREVPX0NUTF8xMCk7Ci0KLQlyZWcgPSBBVURJT19NT0RFX1NQRElG X01PREUgfCBWSURFT19NT0RFX1NMQVZFX01PREU7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19iYXNl ICsgRVhZTk9TX0RQX1NPQ19HRU5FUkFMX0NUTCk7Ci19Ci0KLXZvaWQgZXh5bm9zX2RwX2VuYWJs ZV9zY3JhbWJsaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQl1MzIgcmVnOwot Ci0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1RSQUlOSU5HX1BUTl9TRVQp OwotCXJlZyAmPSB+U0NSQU1CTElOR19ESVNBQkxFOwotCXdyaXRlbChyZWcsIGRwLT5yZWdfYmFz ZSArIEVYWU5PU19EUF9UUkFJTklOR19QVE5fU0VUKTsKLX0KLQotdm9pZCBleHlub3NfZHBfZGlz YWJsZV9zY3JhbWJsaW5nKHN0cnVjdCBleHlub3NfZHBfZGV2aWNlICpkcCkKLXsKLQl1MzIgcmVn OwotCi0JcmVnID0gcmVhZGwoZHAtPnJlZ19iYXNlICsgRVhZTk9TX0RQX1RSQUlOSU5HX1BUTl9T RVQpOwotCXJlZyB8PSBTQ1JBTUJMSU5HX0RJU0FCTEU7Ci0Jd3JpdGVsKHJlZywgZHAtPnJlZ19i YXNlICsgRVhZTk9TX0RQX1RSQUlOSU5HX1BUTl9TRVQpOwotfQpkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmggYi9pbmNsdWRlL2RybS9icmlkZ2UvYW5hbG9naXhf ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTE4OGRiCi0tLSAvZGV2 L251bGwKKysrIGIvaW5jbHVkZS9kcm0vYnJpZGdlL2FuYWxvZ2l4X2RwLmgKQEAgLTAsMCArMSw0 MCBAQAorLyoKKyAqIEFuYWxvZ2l4IERQIChEaXNwbGF5IFBvcnQpIENvcmUgaW50ZXJmYWNlIGRy aXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28u LCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfQU5B TE9HSVhfRFBfSF8KKyNkZWZpbmUgX0FOQUxPR0lYX0RQX0hfCisKKyNpbmNsdWRlIDxkcm0vZHJt X2NydGMuaD4KKworZW51bSBhbmFsb2dpeF9kcF9kZXZ0eXBlIHsKKwlFWFlOT1NfRFAsCit9Owor CitzdHJ1Y3QgYW5hbG9naXhfZHBfcGxhdF9kYXRhIHsKKwllbnVtIGFuYWxvZ2l4X2RwX2RldnR5 cGUgZGV2X3R5cGU7CisJc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7CisJc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlpbnQg KCpwb3dlcl9vbikoc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRfZGF0YSAqKTsKKwlpbnQgKCpwb3dl cl9vZmYpKHN0cnVjdCBhbmFsb2dpeF9kcF9wbGF0X2RhdGEgKik7CisJaW50ICgqYXR0YWNoKShz dHJ1Y3QgYW5hbG9naXhfZHBfcGxhdF9kYXRhICosIHN0cnVjdCBkcm1fYnJpZGdlICosCisJCSAg ICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICopOworCWludCAoKmdldF9tb2Rlcykoc3RydWN0IGFu YWxvZ2l4X2RwX3BsYXRfZGF0YSAqKTsKK307CisKK2ludCBhbmFsb2dpeF9kcF9yZXN1bWUoc3Ry dWN0IGRldmljZSAqZGV2KTsKK2ludCBhbmFsb2dpeF9kcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2Ug KmRldik7CisKK2ludCBhbmFsb2dpeF9kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRybV9kZXZpY2UgKmRybV9kZXYsCisJCSAgICAgc3RydWN0IGFuYWxvZ2l4X2RwX3BsYXRfZGF0 YSAqcGxhdF9kYXRhKTsKK3ZvaWQgYW5hbG9naXhfZHBfdW5iaW5kKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRldmljZSAqbWFzdGVyLCB2b2lkICpkYXRhKTsKKworI2VuZGlmIC8qIF9BTkFM T0dJWF9EUF9IXyAqLwotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=