From mboxrd@z Thu Jan 1 00:00:00 1970 From: Qiang Yu Subject: [PATCH v8] drm/lima: driver for ARM Mali4xx GPUs Date: Sat, 9 Mar 2019 20:20:12 +0800 Message-ID: <20190309122012.14113-1-yuq825@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Marek Vasut , lima@lists.freedesktop.org, Maxime Ripard , =?UTF-8?q?Christian=20K=C3=B6nig?= , Neil Armstrong , Sam Ravnborg , David Airlie , Qiang Yu , Simon Shields , Vasily Khoruzhick , Sean Paul , Andreas Baierl , Erico Nunes List-Id: dri-devel@lists.freedesktop.org LSBNYWxpIDR4eCBHUFVzIGhhdmUgdHdvIGtpbmRzIG9mIHByb2Nlc3NvcnMgR1AgYW5kIFBQLiBH UCBpcyBmb3IKICBPcGVuR0wgdmVydGV4IHNoYWRlciBwcm9jZXNzaW5nIGFuZCBQUCBpcyBmb3Ig ZnJhZ21lbnQgc2hhZGVyCiAgcHJvY2Vzc2luZy4gRWFjaCBwcm9jZXNzb3IgaGFzIGl0cyBvd24g TU1VIHNvIHByY2Vzc29ycyB3b3JrIGluCiAgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgotIFRoZXJl J3Mgb25seSBvbmUgR1AgYnV0IG11bHRpcGxlIFBQIChtYXggNCBmb3IgbWFsaSA0MDAgYW5kIDgK ICBmb3IgbWFsaSA0NTApIGluIHRoZSBzYW1lIG1hbGkgNHh4IEdQVS4gQWxsIFBQcyBhcmUgZ3Jv dXBlZAogIHRvZ2F0aGVyIHRvIGhhbmRsZSBhIHNpbmdsZSBmcmFnbWVudCBzaGFkZXIgdGFzayBk aXZpZGVkIGJ5CiAgRkIgb3V0cHV0IHRpbGVkIHBpeGVscy4gTWFsaSA0MDAgdXNlciBzcGFjZSBk cml2ZXIgaXMKICByZXNwb25zaWJsZSBmb3IgYXNzaWduIHRhcmdldCB0aWxlZCBwaXhlbHMgdG8g ZWFjaCBQUCwgYnV0IG1hbGkKICA0NTAgaGFzIGEgSFcgbW9kdWxlIGNhbGxlZCBETEJVIHRvIGR5 bmFtaWNhbGx5IGJhbGFuY2UgZWFjaAogIFBQJ3MgbG9hZC4KLSBVc2VyIHNwYWNlIGRyaXZlciBh bGxvY2F0ZSBidWZmZXIgb2JqZWN0IGFuZCBtYXAgaW50byBHUFUKICB2aXJ0dWFsIGFkZHJlc3Mg c3BhY2UsIHVwbG9hZCBjb21tYW5kIHN0cmVhbSBhbmQgZHJhdyBkYXRhIHdpdGgKICBDUFUgbW1h cCBvZiB0aGUgYnVmZmVyIG9iamVjdCwgdGhlbiBzdWJtaXQgdGFzayB0byBHUC9QUCB3aXRoCiAg YSByZWdpc3RlciBmcmFtZSBpbmRpY2F0aW5nIHdoZXJlIGlzIHRoZSBjb21tYW5kIHN0cmVhbSBh bmQgbWlzYwogIHNldHRpbmdzLgotIFRoZXJlJ3Mgbm8gY29tbWFuZCBzdHJlYW0gdmFsaWRhdGlv bi9yZWxvY2F0aW9uIGR1ZSB0byBlYWNoIHVzZXIKICBwcm9jZXNzIGhhcyBpdHMgb3duIEdQVSB2 aXJ0dWFsIGFkZHJlc3Mgc3BhY2UuIEdQL1BQJ3MgTU1VIHN3aXRjaAogIHZpcnR1YWwgYWRkcmVz cyBzcGFjZSBiZWZvcmUgcnVubmluZyB0d28gdGFza3MgZnJvbSBkaWZmZXJlbnQKICB1c2VyIHBy b2Nlc3MuIEVycm9yIG9yIGV2aWwgdXNlciBzcGFjZSBjb2RlIGp1c3QgZ2V0IE1NVSBmYXVsdAog IG9yIEdQL1BQIGVycm9yIElSUSwgdGhlbiB0aGUgSFcvU1cgd2lsbCBiZSByZWNvdmVyZWQuCi0g VXNlIEdFTStzaG1lbSBmb3IgTU0uIEN1cnJlbnRseSBqdXN0IGFsbG9jIGFuZCBwaW4gbWVtb3J5 IHdoZW4KICBnZW0gb2JqZWN0IGNyZWF0aW9uLiBHUFUgdm0gbWFwIG9mIHRoZSBidWZmZXIgaXMg YWxzbyBkb25lIGluCiAgdGhlIGFsbG9jIHN0YWdlIGluIGtlcm5lbCBzcGFjZS4gV2UgbWF5IGRl bGF5IHRoZSBtZW1vcnkKICBhbGxvY2F0aW9uIGFuZCByZWFsIEdQVSB2bSBtYXAgdG8gY29tbWFu ZCBzdWJtaXNzaW9uIHN0YWdlIGluIHRoZQogIGZ1cnR1cmUgYXMgaW1wcm92ZW1lbnQuCi0gVXNl IGRybV9zY2hlZCBmb3IgR1BVIHRhc2sgc2NoZWR1bGUuIEVhY2ggT3BlbkdMIGNvbnRleHQgc2hv dWxkCiAgaGF2ZSBhIGxpbWEgY29udGV4dCBvYmplY3QgaW4gdGhlIGtlcm5lbCB0byBkaXN0aW5n dWlzaCB0YXNrcwogIGZyb20gZGlmZmVyZW50IHVzZXIuIGRybV9zY2hlZCBnZXRzIHRhc2sgZnJv bSBlYWNoIGxpbWEgY29udGV4dAogIGluIGEgZmFpciB3YXkuCgptZXNhIGRyaXZlciBjYW4gYmUg Zm91bmQgaGVyZSBiZWZvcmUgdXBzdHJlYW1lZDoKaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Au b3JnL2xpbWEvbWVzYQoKdjg6Ci0gYWRkIGNvbW1lbnRzIGZvciBpbl9zeW5jCi0gZml4IGN0eCBm cmVlIG1pc3MgbXV0ZXggdW5sb2NrCgp2NzoKLSByZW1vdmUgbGltYV9mZW5jZV9vcHMgd2l0aCBk ZWZhdWx0IHZhbHVlCi0gbW92ZSBmZW5jZSBzbGFiIGNyZWF0ZSB0byBkZXZpY2UgcHJvYmUKLSBj aGVjayBwYWQgaW9jdGwgYXJncyB0byBiZSB6ZXJvCi0gYWRkIGNvbW1lbnRzIGZvciB1c2VyL2tl cm5lbCBpbnRlcmZhY2UKCnY2OgotIGZpeCBjb21tZW50cyBieSBjaGVja3BhdGNoLnBsCgp2NToK LSBleHBvcnQgZ3AvcHAgdmVyc2lvbiB0byB1c2Vyc3BhY2UKLSByZWJhc2Ugb24gZHJtLW1pc2Mt bmV4dAoKdjQ6Ci0gdXNlIGdldCBwYXJhbSBpbnRlcmZhY2UgdG8gZ2V0IGluZm8KLSBzZXBhcmF0 ZSBjb250ZXh0IGNyZWF0ZS9mcmVlIGlvY3RsCi0gcmVtb3ZlIHVudXNlZCBtYXggc2NoZWQgdGFz ayBwYXJhbQotIHVwZGF0ZSBjb3B5cmlnaHQgdGltZQotIHVzZSB4YXJyYXkgaW5zdGVhZCBvZiBp ZHIKLSBzdG9wIHVzaW5nIGRybVAuaAoKdjM6Ci0gZml4IGNvbW1lbnRzIGZyb20ga2J1aWxkIHJv Ym90Ci0gcmVzdHJpY3Qgc3VwcG9ydGVkIGFyY2ggdG8gdGVzdGVkIG9uZXMKCnYyOgotIGZpeCBz eXNjYWxsIGFyZ3VtZW50IGNoZWNrCi0gZml4IGpvYiBmaW5pc2ggZmVuY2UgbGVhayBzaW5jZSBr ZXJuZWwgNS4wCi0gdXNlIGRybSBzeW5jb2JqIHRvIHJlcGxhY2UgbmF0aXZlIGZlbmNlCi0gbW92 ZSBidWZmZXIgb2JqZWN0IEdQVSB2YSBtYXAgaW50byBrZXJuZWwKLSByZXNlcnZlIHN5c2NhbGwg YXJndW1lbnQgc3BhY2UgZm9yIGZ1dHVyZSBpbmZvCi0gcmVtb3ZlIGtlcm5lbCBnZW0gbW9kaWZp ZXIKLSBzd2l0Y2ggVFRNIGJhY2sgdG8gR0VNK3NobWVtIE1NCi0gdXNlIHRpbWUgYmFzZWQgaW8g cG9sbAotIHVzZSB3aG9sZSByZWdpc3RlciBuYW1lCi0gYWRvcHQgZ2VtIHJlc2VydmF0aW9uIG9i aiBpbnRlZ3JhdGlvbgotIHVzZSBkcm1fdGltZW91dF9hYnNfdG9famlmZmllcwoKQ2M6IEVyaWMg QW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+CkNjOiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3Jn PgpDYzogQ2hyaXN0aWFuIEvDtm5pZyA8Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBnbWFpbC5jb20+ CkNjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+CkNjOiBBbGV4IERldWNoZXIgPGFs ZXhkZXVjaGVyQGdtYWlsLmNvbT4KQ2M6IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4K Q2M6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KQ2M6IERhdmUgQWlybGllIDxhaXJs aWVkQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogQW5kcmVhcyBCYWllcmwgPGljaGdlaEBpbWty ZWlzcnVtLmRlPgpTaWduZWQtb2ZmLWJ5OiBFcmljbyBOdW5lcyA8bnVuZXMuZXJpY29AZ21haWwu Y29tPgpTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTdHVlYm5lciA8aGVpa29Ac250ZWNoLmRlPgpTaWdu ZWQtb2ZmLWJ5OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KU2lnbmVkLW9mZi1ieTogTmVp bCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgpTaWduZWQtb2ZmLWJ5OiBTaW1v biBTaGllbGRzIDxzaW1vbkBsaW5lYWdlb3Mub3JnPgpTaWduZWQtb2ZmLWJ5OiBWYXNpbHkgS2hv cnV6aGljayA8YW5hcnNvdWxAZ21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBRaWFuZyBZdSA8eXVx ODI1QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEVyaWMgQW5ob2x0IDxlcmljQGFuaG9sdC5uZXQ+ ClJldmlld2VkLWJ5OiBSb2IgSGVycmluZyA8cm9iaEBrZXJybmVsLm9yZz4KLS0tCiBkcml2ZXJz L2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZSAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvS2NvbmZp ZyAgICAgICAgICB8ICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9NYWtlZmlsZSAgICAgICAg IHwgIDIxICsrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmMgICAgIHwgIDQ3ICsr KwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5oICAgICB8ICAxNCArCiBkcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX2N0eC5jICAgICAgIHwgIDk4ICsrKysrKwogZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9jdHguaCAgICAgICB8ICAzMCArKwogZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9kZXZpY2UuYyAgICB8IDM4NSArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9n cHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuaCAgICB8IDEzMSArKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9kbGJ1LmMgICAgICB8ICA1OCArKysrCiBkcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2RsYnUuaCAgICAgIHwgIDE4ICsrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2Ry di5jICAgICAgIHwgMzc2ICsrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2Rydi5oICAgICAgIHwgIDQ1ICsrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9nZW0uYyAgICAgICB8IDM4MSArKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9nZW0uaCAgICAgICB8ICAyNSArKwogZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9nZW1fcHJpbWUuYyB8ICA0NyArKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2Vt X3ByaW1lLmggfCAgMTMgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5jICAgICAgICB8 IDI4MyArKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5oICAg ICAgICB8ICAxNiArCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmMgIHwgIDgw ICsrKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmggIHwgIDE0ICsKIGRy aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMgICAgICAgfCAxNDIgKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oICAgICAgIHwgIDE2ICsKIGRyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfb2JqZWN0LmMgICAgfCAxMjIgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfb2JqZWN0LmggICAgfCAgMzYgKysrCiBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X3BtdS5jICAgICAgIHwgIDYwICsrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcG11Lmgg ICAgICAgfCAgMTIgKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wcC5jICAgICAgICB8IDQy NyArKysrKysrKysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9w cC5oICAgICAgICB8ICAxOSArKwogZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9yZWdzLmggICAg ICB8IDI5OCArKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfc2No ZWQuYyAgICAgfCA0MDQgKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX3NjaGVkLmggICAgIHwgMTA0ICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfdm0uYyAgICAgICAgfCAyODIgKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfdm0uaCAgICAgICAgfCAgNjIgKysrKwogaW5jbHVkZS91YXBpL2RybS9saW1h X2RybS5oICAgICAgICAgICB8IDE2OSArKysrKysrKysrCiAzNiBmaWxlcyBjaGFuZ2VkLCA0MjQ4 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9L Y29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvTWFrZWZpbGUK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2JjYXN0LmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9jdHguaAogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGV2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2Rydi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfZ2VtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dl bV9wcmltZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9n ZW1fcHJpbWUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf Z3AuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ3AuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfcHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfcHAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9s aW1hL2xpbWFfcmVncy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9zY2hlZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9zY2hlZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV92 bS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV92bS5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2RybS9saW1hX2RybS5oCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwppbmRl eCBiZDk0M2E3MTc1NmMuLjE3MTZlNDIwYmFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTMyOSw2ICszMjksOCBA QCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS90dmUyMDAvS2NvbmZpZyIKIAogc291cmNlICJkcml2 ZXJzL2dwdS9kcm0veGVuL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2xpbWEv S2NvbmZpZyIKKwogIyBLZWVwIGxlZ2FjeSBkcml2ZXJzIGxhc3QKIAogbWVudWNvbmZpZyBEUk1f TEVHQUNZCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKaW5kZXggMWFjNTVjNjVlYWMwLi4xZjlkMDA3NmY5OWEgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKQEAgLTEwOSwzICsxMDksNCBAQCBvYmotJChDT05GSUdfRFJNX1RJTllEUk0pICs9IHRpbnlk cm0vCiBvYmotJChDT05GSUdfRFJNX1BMMTExKSArPSBwbDExMS8KIG9iai0kKENPTkZJR19EUk1f VFZFMjAwKSArPSB0dmUyMDAvCiBvYmotJChDT05GSUdfRFJNX1hFTikgKz0geGVuLworb2JqLSQo Q09ORklHX0RSTV9MSU1BKSAgKz0gbGltYS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9s aW1hL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjExMzE0NDQ4MDkzCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvS2NvbmZpZwpAQCAtMCwwICsxLDEwIEBACisjIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorIyBDb3B5cmlnaHQgMjAxNy0yMDE5 IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPgorCitjb25maWcgRFJNX0xJTUEKKyAgICAgICB0 cmlzdGF0ZSAiTElNQSAoRFJNIHN1cHBvcnQgZm9yIEFSTSBNYWxpIDQwMC80NTAgR1BVKSIKKyAg ICAgICBkZXBlbmRzIG9uIERSTQorICAgICAgIGRlcGVuZHMgb24gQVJNIHx8IEFSTTY0IHx8IENP TVBJTEVfVEVTVAorICAgICAgIHNlbGVjdCBEUk1fU0NIRUQKKyAgICAgICBoZWxwCisgICAgICAg ICBEUk0gZHJpdmVyIGZvciBBUk0gTWFsaSA0MDAvNDUwIEdQVXMuCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbGltYS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL01ha2VmaWxl Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzhjYzcwMjgxYmE1Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvTWFrZWZpbGUKQEAgLTAsMCAr MSwyMSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKyMgQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4KKworbGltYS15IDo9 IFwKKwlsaW1hX2Rydi5vIFwKKwlsaW1hX2RldmljZS5vIFwKKwlsaW1hX3BtdS5vIFwKKwlsaW1h X2wyX2NhY2hlLm8gXAorCWxpbWFfbW11Lm8gXAorCWxpbWFfZ3AubyBcCisJbGltYV9wcC5vIFwK KwlsaW1hX2dlbS5vIFwKKwlsaW1hX3ZtLm8gXAorCWxpbWFfc2NoZWQubyBcCisJbGltYV9jdHgu byBcCisJbGltYV9nZW1fcHJpbWUubyBcCisJbGltYV9kbGJ1Lm8gXAorCWxpbWFfYmNhc3QubyBc CisJbGltYV9vYmplY3QubworCitvYmotJChDT05GSUdfRFJNX0xJTUEpICs9IGxpbWEubwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9iY2FzdC5jIGIvZHJpdmVycy9ncHUv ZHJtL2xpbWEvbGltYV9iY2FzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMjg4Mzk4MDI3YmZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9iY2FzdC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVx ODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1ZGUgImxpbWFf YmNhc3QuaCIKKyNpbmNsdWRlICJsaW1hX3JlZ3MuaCIKKworI2RlZmluZSBiY2FzdF93cml0ZShy ZWcsIGRhdGEpIHdyaXRlbChkYXRhLCBpcC0+aW9tZW0gKyByZWcpCisjZGVmaW5lIGJjYXN0X3Jl YWQocmVnKSByZWFkbChpcC0+aW9tZW0gKyByZWcpCisKK3ZvaWQgbGltYV9iY2FzdF9lbmFibGUo c3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIGludCBudW1fcHApCit7CisJc3RydWN0IGxpbWFfc2No ZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9wcDsKKwlzdHJ1Y3QgbGltYV9p cCAqaXAgPSBkZXYtPmlwICsgbGltYV9pcF9iY2FzdDsKKwlpbnQgaSwgbWFzayA9IGJjYXN0X3Jl YWQoTElNQV9CQ0FTVF9CUk9BRENBU1RfTUFTSykgJiAweGZmZmYwMDAwOworCisJZm9yIChpID0g MDsgaSA8IG51bV9wcDsgaSsrKSB7CisJCXN0cnVjdCBsaW1hX2lwICpwcCA9IHBpcGUtPnByb2Nl c3NvcltpXTsKKworCQltYXNrIHw9IDEgPDwgKHBwLT5pZCAtIGxpbWFfaXBfcHAwKTsKKwl9CisK KwliY2FzdF93cml0ZShMSU1BX0JDQVNUX0JST0FEQ0FTVF9NQVNLLCBtYXNrKTsKK30KKworaW50 IGxpbWFfYmNhc3RfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaW50IGksIG1hc2sgPSAw OworCisJZm9yIChpID0gbGltYV9pcF9wcDA7IGkgPD0gbGltYV9pcF9wcDc7IGkrKykgeworCQlp ZiAoaXAtPmRldi0+aXBbaV0ucHJlc2VudCkKKwkJCW1hc2sgfD0gMSA8PCAoaSAtIGxpbWFfaXBf cHAwKTsKKwl9CisKKwliY2FzdF93cml0ZShMSU1BX0JDQVNUX0JST0FEQ0FTVF9NQVNLLCBtYXNr IDw8IDE2KTsKKwliY2FzdF93cml0ZShMSU1BX0JDQVNUX0lOVEVSUlVQVF9NQVNLLCBtYXNrKTsK KwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX2JjYXN0X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlw KQoreworCit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3Qu aCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmM0N2U1ODU2M2QwYQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfYmNhc3QuaApAQCAtMCwwICsxLDE0IEBACisvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE4 LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0JD QVNUX0hfXworI2RlZmluZSBfX0xJTUFfQkNBU1RfSF9fCisKK3N0cnVjdCBsaW1hX2lwOworCitp bnQgbGltYV9iY2FzdF9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxpbWFfYmNhc3Rf ZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApOworCit2b2lkIGxpbWFfYmNhc3RfZW5hYmxlKHN0cnVj dCBsaW1hX2RldmljZSAqZGV2LCBpbnQgbnVtX3BwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9jdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM4ZDEyZjdj Njg5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfY3R4LmMK QEAgLTAsMCArMSw5OCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1Ig TUlUCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAq LworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIK KyNpbmNsdWRlICJsaW1hX2N0eC5oIgorCitpbnQgbGltYV9jdHhfY3JlYXRlKHN0cnVjdCBsaW1h X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IsIHUzMiAqaWQpCit7CisJc3Ry dWN0IGxpbWFfY3R4ICpjdHg7CisJaW50IGksIGVycjsKKworCWN0eCA9IGt6YWxsb2Moc2l6ZW9m KCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY3R4 LT5kZXYgPSBkZXY7CisJa3JlZl9pbml0KCZjdHgtPnJlZmNudCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbGltYV9waXBlX251bTsgaSsrKSB7CisJCWVyciA9IGxpbWFfc2NoZWRfY29udGV4dF9pbml0 KGRldi0+cGlwZSArIGksIGN0eC0+Y29udGV4dCArIGksICZjdHgtPmd1aWx0eSk7CisJCWlmIChl cnIpCisJCQlnb3RvIGVycl9vdXQwOworCX0KKworCWVyciA9IHhhX2FsbG9jKCZtZ3ItPmhhbmRs ZXMsIGlkLCBVSU5UX01BWCwgY3R4LCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290 byBlcnJfb3V0MDsKKworCXJldHVybiAwOworCitlcnJfb3V0MDoKKwlmb3IgKGktLTsgaSA+PSAw OyBpLS0pCisJCWxpbWFfc2NoZWRfY29udGV4dF9maW5pKGRldi0+cGlwZSArIGksIGN0eC0+Y29u dGV4dCArIGkpOworCWtmcmVlKGN0eCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQg bGltYV9jdHhfZG9fcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCBsaW1hX2N0 eCAqY3R4ID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGxpbWFfY3R4LCByZWZjbnQpOworCWlu dCBpOworCisJZm9yIChpID0gMDsgaSA8IGxpbWFfcGlwZV9udW07IGkrKykKKwkJbGltYV9zY2hl ZF9jb250ZXh0X2ZpbmkoY3R4LT5kZXYtPnBpcGUgKyBpLCBjdHgtPmNvbnRleHQgKyBpKTsKKwlr ZnJlZShjdHgpOworfQorCitpbnQgbGltYV9jdHhfZnJlZShzdHJ1Y3QgbGltYV9jdHhfbWdyICpt Z3IsIHUzMiBpZCkKK3sKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsKKwlpbnQgcmV0ID0gMDsKKwor CW11dGV4X2xvY2soJm1nci0+bG9jayk7CisJY3R4ID0geGFfZXJhc2UoJm1nci0+aGFuZGxlcywg aWQpOworCWlmIChjdHgpCisJCWtyZWZfcHV0KCZjdHgtPnJlZmNudCwgbGltYV9jdHhfZG9fcmVs ZWFzZSk7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCW11dGV4X3VubG9jaygmbWdyLT5sb2Nr KTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgbGltYV9jdHggKmxpbWFfY3R4X2dldChzdHJ1 Y3QgbGltYV9jdHhfbWdyICptZ3IsIHUzMiBpZCkKK3sKKwlzdHJ1Y3QgbGltYV9jdHggKmN0eDsK KworCW11dGV4X2xvY2soJm1nci0+bG9jayk7CisJY3R4ID0geGFfbG9hZCgmbWdyLT5oYW5kbGVz LCBpZCk7CisJaWYgKGN0eCkKKwkJa3JlZl9nZXQoJmN0eC0+cmVmY250KTsKKwltdXRleF91bmxv Y2soJm1nci0+bG9jayk7CisJcmV0dXJuIGN0eDsKK30KKwordm9pZCBsaW1hX2N0eF9wdXQoc3Ry dWN0IGxpbWFfY3R4ICpjdHgpCit7CisJa3JlZl9wdXQoJmN0eC0+cmVmY250LCBsaW1hX2N0eF9k b19yZWxlYXNlKTsKK30KKwordm9pZCBsaW1hX2N0eF9tZ3JfaW5pdChzdHJ1Y3QgbGltYV9jdHhf bWdyICptZ3IpCit7CisJbXV0ZXhfaW5pdCgmbWdyLT5sb2NrKTsKKwl4YV9pbml0X2ZsYWdzKCZt Z3ItPmhhbmRsZXMsIFhBX0ZMQUdTX0FMTE9DKTsKK30KKwordm9pZCBsaW1hX2N0eF9tZ3JfZmlu aShzdHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IpCit7CisJc3RydWN0IGxpbWFfY3R4ICpjdHg7CisJ dW5zaWduZWQgbG9uZyBpZDsKKworCXhhX2Zvcl9lYWNoKCZtZ3ItPmhhbmRsZXMsIGlkLCBjdHgp IHsKKwkJa3JlZl9wdXQoJmN0eC0+cmVmY250LCBsaW1hX2N0eF9kb19yZWxlYXNlKTsKKwl9CisK Kwl4YV9kZXN0cm95KCZtZ3ItPmhhbmRsZXMpOworCW11dGV4X2Rlc3Ryb3koJm1nci0+bG9jayk7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2N0eC5oIGIvZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9jdHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLjYxNTRlNWM5YmZlNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9saW1hL2xpbWFfY3R4LmgKQEAgLTAsMCArMSwzMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1 IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9DVFhfSF9fCisjZGVmaW5l IF9fTElNQV9DVFhfSF9fCisKKyNpbmNsdWRlIDxsaW51eC94YXJyYXkuaD4KKworI2luY2x1ZGUg ImxpbWFfZGV2aWNlLmgiCisKK3N0cnVjdCBsaW1hX2N0eCB7CisJc3RydWN0IGtyZWYgcmVmY250 OworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQg Y29udGV4dFtsaW1hX3BpcGVfbnVtXTsKKwlhdG9taWNfdCBndWlsdHk7Cit9OworCitzdHJ1Y3Qg bGltYV9jdHhfbWdyIHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgeGFycmF5IGhhbmRs ZXM7Cit9OworCitpbnQgbGltYV9jdHhfY3JlYXRlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2LCBz dHJ1Y3QgbGltYV9jdHhfbWdyICptZ3IsIHUzMiAqaWQpOworaW50IGxpbWFfY3R4X2ZyZWUoc3Ry dWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgaWQpOworc3RydWN0IGxpbWFfY3R4ICpsaW1hX2N0 eF9nZXQoc3RydWN0IGxpbWFfY3R4X21nciAqbWdyLCB1MzIgaWQpOwordm9pZCBsaW1hX2N0eF9w dXQoc3RydWN0IGxpbWFfY3R4ICpjdHgpOwordm9pZCBsaW1hX2N0eF9tZ3JfaW5pdChzdHJ1Y3Qg bGltYV9jdHhfbWdyICptZ3IpOwordm9pZCBsaW1hX2N0eF9tZ3JfZmluaShzdHJ1Y3QgbGltYV9j dHhfbWdyICptZ3IpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1h L2xpbWFfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTcwZDBlOTNmOWE5Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuYwpAQCAtMCwwICsx LDM4NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBD b3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5j bHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5o PgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSAibGltYV9k ZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX2dwLmgiCisjaW5jbHVkZSAibGltYV9wcC5oIgorI2lu Y2x1ZGUgImxpbWFfbW11LmgiCisjaW5jbHVkZSAibGltYV9wbXUuaCIKKyNpbmNsdWRlICJsaW1h X2wyX2NhY2hlLmgiCisjaW5jbHVkZSAibGltYV9kbGJ1LmgiCisjaW5jbHVkZSAibGltYV9iY2Fz dC5oIgorI2luY2x1ZGUgImxpbWFfdm0uaCIKKworc3RydWN0IGxpbWFfaXBfZGVzYyB7CisJY2hh ciAqbmFtZTsKKwljaGFyICppcnFfbmFtZTsKKwlib29sIG11c3RfaGF2ZVtsaW1hX2dwdV9udW1d OworCWludCBvZmZzZXRbbGltYV9ncHVfbnVtXTsKKworCWludCAoKmluaXQpKHN0cnVjdCBsaW1h X2lwICppcCk7CisJdm9pZCAoKmZpbmkpKHN0cnVjdCBsaW1hX2lwICppcCk7Cit9OworCisjZGVm aW5lIExJTUFfSVBfREVTQyhpcG5hbWUsIG1zdDAsIG1zdDEsIG9mZjAsIG9mZjEsIGZ1bmMsIGly cSkgXAorCVtsaW1hX2lwXyMjaXBuYW1lXSA9IHsgXAorCQkubmFtZSA9ICNpcG5hbWUsIFwKKwkJ LmlycV9uYW1lID0gaXJxLCBcCisJCS5tdXN0X2hhdmUgPSB7IFwKKwkJCVtsaW1hX2dwdV9tYWxp NDAwXSA9IG1zdDAsIFwKKwkJCVtsaW1hX2dwdV9tYWxpNDUwXSA9IG1zdDEsIFwKKwkJfSwgXAor CQkub2Zmc2V0ID0geyBcCisJCQlbbGltYV9ncHVfbWFsaTQwMF0gPSBvZmYwLCBcCisJCQlbbGlt YV9ncHVfbWFsaTQ1MF0gPSBvZmYxLCBcCisJCX0sIFwKKwkJLmluaXQgPSBsaW1hXyMjZnVuYyMj X2luaXQsIFwKKwkJLmZpbmkgPSBsaW1hXyMjZnVuYyMjX2ZpbmksIFwKKwl9CisKK3N0YXRpYyBz dHJ1Y3QgbGltYV9pcF9kZXNjIGxpbWFfaXBfZGVzY1tsaW1hX2lwX251bV0gPSB7CisJTElNQV9J UF9ERVNDKHBtdSwgICAgICAgICBmYWxzZSwgZmFsc2UsIDB4MDIwMDAsIDB4MDIwMDAsIHBtdSwg ICAgICAicG11IiksCisJTElNQV9JUF9ERVNDKGwyX2NhY2hlMCwgICB0cnVlLCAgdHJ1ZSwgIDB4 MDEwMDAsIDB4MTAwMDAsIGwyX2NhY2hlLCBOVUxMKSwKKwlMSU1BX0lQX0RFU0MobDJfY2FjaGUx LCAgIGZhbHNlLCB0cnVlLCAgLTEsICAgICAgMHgwMTAwMCwgbDJfY2FjaGUsIE5VTEwpLAorCUxJ TUFfSVBfREVTQyhsMl9jYWNoZTIsICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDExMDAwLCBs Ml9jYWNoZSwgTlVMTCksCisJTElNQV9JUF9ERVNDKGdwLCAgICAgICAgICB0cnVlLCAgdHJ1ZSwg IDB4MDAwMDAsIDB4MDAwMDAsIGdwLCAgICAgICAiZ3AiKSwKKwlMSU1BX0lQX0RFU0MocHAwLCAg ICAgICAgIHRydWUsICB0cnVlLCAgMHgwODAwMCwgMHgwODAwMCwgcHAsICAgICAgICJwcDAiKSwK KwlMSU1BX0lQX0RFU0MocHAxLCAgICAgICAgIGZhbHNlLCBmYWxzZSwgMHgwQTAwMCwgMHgwQTAw MCwgcHAsICAgICAgICJwcDEiKSwKKwlMSU1BX0lQX0RFU0MocHAyLCAgICAgICAgIGZhbHNlLCBm YWxzZSwgMHgwQzAwMCwgMHgwQzAwMCwgcHAsICAgICAgICJwcDIiKSwKKwlMSU1BX0lQX0RFU0Mo cHAzLCAgICAgICAgIGZhbHNlLCBmYWxzZSwgMHgwRTAwMCwgMHgwRTAwMCwgcHAsICAgICAgICJw cDMiKSwKKwlMSU1BX0lQX0RFU0MocHA0LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAg MHgyODAwMCwgcHAsICAgICAgICJwcDQiKSwKKwlMSU1BX0lQX0RFU0MocHA1LCAgICAgICAgIGZh bHNlLCBmYWxzZSwgLTEsICAgICAgMHgyQTAwMCwgcHAsICAgICAgICJwcDUiKSwKKwlMSU1BX0lQ X0RFU0MocHA2LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEsICAgICAgMHgyQzAwMCwgcHAsICAg ICAgICJwcDYiKSwKKwlMSU1BX0lQX0RFU0MocHA3LCAgICAgICAgIGZhbHNlLCBmYWxzZSwgLTEs ICAgICAgMHgyRTAwMCwgcHAsICAgICAgICJwcDciKSwKKwlMSU1BX0lQX0RFU0MoZ3BtbXUsICAg ICAgIHRydWUsICB0cnVlLCAgMHgwMzAwMCwgMHgwMzAwMCwgbW11LCAgICAgICJncG1tdSIpLAor CUxJTUFfSVBfREVTQyhwcG1tdTAsICAgICAgdHJ1ZSwgIHRydWUsICAweDA0MDAwLCAweDA0MDAw LCBtbXUsICAgICAgInBwbW11MCIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTEsICAgICAgZmFsc2Us IGZhbHNlLCAweDA1MDAwLCAweDA1MDAwLCBtbXUsICAgICAgInBwbW11MSIpLAorCUxJTUFfSVBf REVTQyhwcG1tdTIsICAgICAgZmFsc2UsIGZhbHNlLCAweDA2MDAwLCAweDA2MDAwLCBtbXUsICAg ICAgInBwbW11MiIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTMsICAgICAgZmFsc2UsIGZhbHNlLCAw eDA3MDAwLCAweDA3MDAwLCBtbXUsICAgICAgInBwbW11MyIpLAorCUxJTUFfSVBfREVTQyhwcG1t dTQsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFDMDAwLCBtbXUsICAgICAgInBwbW11 NCIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTUsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAw eDFEMDAwLCBtbXUsICAgICAgInBwbW11NSIpLAorCUxJTUFfSVBfREVTQyhwcG1tdTYsICAgICAg ZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFFMDAwLCBtbXUsICAgICAgInBwbW11NiIpLAorCUxJ TUFfSVBfREVTQyhwcG1tdTcsICAgICAgZmFsc2UsIGZhbHNlLCAtMSwgICAgICAweDFGMDAwLCBt bXUsICAgICAgInBwbW11NyIpLAorCUxJTUFfSVBfREVTQyhkbGJ1LCAgICAgICAgZmFsc2UsIHRy dWUsICAtMSwgICAgICAweDE0MDAwLCBkbGJ1LCAgICAgTlVMTCksCisJTElNQV9JUF9ERVNDKGJj YXN0LCAgICAgICBmYWxzZSwgdHJ1ZSwgIC0xLCAgICAgIDB4MTMwMDAsIGJjYXN0LCAgICBOVUxM KSwKKwlMSU1BX0lQX0RFU0MocHBfYmNhc3QsICAgIGZhbHNlLCB0cnVlLCAgLTEsICAgICAgMHgx NjAwMCwgcHBfYmNhc3QsICJwcCIpLAorCUxJTUFfSVBfREVTQyhwcG1tdV9iY2FzdCwgZmFsc2Us IHRydWUsICAtMSwgICAgICAweDE1MDAwLCBtbXUsICAgICAgTlVMTCksCit9OworCitjb25zdCBj aGFyICpsaW1hX2lwX25hbWUoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXJldHVybiBsaW1hX2lw X2Rlc2NbaXAtPmlkXS5uYW1lOworfQorCitzdGF0aWMgaW50IGxpbWFfY2xrX2luaXQoc3RydWN0 IGxpbWFfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGJ1c19yYXRl LCBncHVfcmF0ZTsKKworCWRldi0+Y2xrX2J1cyA9IGRldm1fY2xrX2dldChkZXYtPmRldiwgImJ1 cyIpOworCWlmIChJU19FUlIoZGV2LT5jbGtfYnVzKSkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAi Z2V0IGJ1cyBjbGsgZmFpbGVkICVsZFxuIiwgUFRSX0VSUihkZXYtPmNsa19idXMpKTsKKwkJcmV0 dXJuIFBUUl9FUlIoZGV2LT5jbGtfYnVzKTsKKwl9CisKKwlkZXYtPmNsa19ncHUgPSBkZXZtX2Ns a19nZXQoZGV2LT5kZXYsICJjb3JlIik7CisJaWYgKElTX0VSUihkZXYtPmNsa19ncHUpKSB7CisJ CWRldl9lcnIoZGV2LT5kZXYsICJnZXQgY29yZSBjbGsgZmFpbGVkICVsZFxuIiwgUFRSX0VSUihk ZXYtPmNsa19ncHUpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGV2LT5jbGtfZ3B1KTsKKwl9CisKKwli dXNfcmF0ZSA9IGNsa19nZXRfcmF0ZShkZXYtPmNsa19idXMpOworCWRldl9pbmZvKGRldi0+ZGV2 LCAiYnVzIHJhdGUgPSAlbHVcbiIsIGJ1c19yYXRlKTsKKworCWdwdV9yYXRlID0gY2xrX2dldF9y YXRlKGRldi0+Y2xrX2dwdSk7CisJZGV2X2luZm8oZGV2LT5kZXYsICJtb2QgcmF0ZSA9ICVsdSIs IGdwdV9yYXRlKTsKKworCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsa19idXMpOwor CWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoZGV2 LT5jbGtfZ3B1KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yX291dDA7CisKKwlkZXYtPnJlc2V0 ID0gZGV2bV9yZXNldF9jb250cm9sX2dldF9vcHRpb25hbChkZXYtPmRldiwgTlVMTCk7CisJaWYg KElTX0VSUihkZXYtPnJlc2V0KSkgeworCQllcnIgPSBQVFJfRVJSKGRldi0+cmVzZXQpOworCQln b3RvIGVycm9yX291dDE7CisJfSBlbHNlIGlmIChkZXYtPnJlc2V0ICE9IE5VTEwpIHsKKwkJZXJy ID0gcmVzZXRfY29udHJvbF9kZWFzc2VydChkZXYtPnJlc2V0KTsKKwkJaWYgKGVycikKKwkJCWdv dG8gZXJyb3Jfb3V0MTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3Jfb3V0MToKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoZGV2LT5jbGtfZ3B1KTsKK2Vycm9yX291dDA6CisJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGRldi0+Y2xrX2J1cyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQg bGltYV9jbGtfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5yZXNl dCAhPSBOVUxMKQorCQlyZXNldF9jb250cm9sX2Fzc2VydChkZXYtPnJlc2V0KTsKKwljbGtfZGlz YWJsZV91bnByZXBhcmUoZGV2LT5jbGtfZ3B1KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2 LT5jbGtfYnVzKTsKK30KKworc3RhdGljIGludCBsaW1hX3JlZ3VsYXRvcl9pbml0KHN0cnVjdCBs aW1hX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlkZXYtPnJlZ3VsYXRvciA9IGRldm1f cmVndWxhdG9yX2dldF9vcHRpb25hbChkZXYtPmRldiwgIm1hbGkiKTsKKwlpZiAoSVNfRVJSKGRl di0+cmVndWxhdG9yKSkgeworCQlyZXQgPSBQVFJfRVJSKGRldi0+cmVndWxhdG9yKTsKKwkJZGV2 LT5yZWd1bGF0b3IgPSBOVUxMOworCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQlyZXR1cm4gMDsK KwkJZGV2X2VycihkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yOiAlZFxuIiwgcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGRldi0+cmVn dWxhdG9yKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRv IGVuYWJsZSByZWd1bGF0b3I6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3JlZ3VsYXRvcl9maW5pKHN0cnVjdCBsaW1h X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnJlZ3VsYXRvcikKKwkJcmVndWxhdG9yX2Rpc2Fi bGUoZGV2LT5yZWd1bGF0b3IpOworfQorCitzdGF0aWMgaW50IGxpbWFfaW5pdF9pcChzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiwgaW50IGluZGV4KQoreworCXN0cnVjdCBsaW1hX2lwX2Rlc2MgKmRl c2MgPSBsaW1hX2lwX2Rlc2MgKyBpbmRleDsKKwlzdHJ1Y3QgbGltYV9pcCAqaXAgPSBkZXYtPmlw ICsgaW5kZXg7CisJaW50IG9mZnNldCA9IGRlc2MtPm9mZnNldFtkZXYtPmlkXTsKKwlib29sIG11 c3QgPSBkZXNjLT5tdXN0X2hhdmVbZGV2LT5pZF07CisJaW50IGVycjsKKworCWlmIChvZmZzZXQg PCAwKQorCQlyZXR1cm4gMDsKKworCWlwLT5kZXYgPSBkZXY7CisJaXAtPmlkID0gaW5kZXg7CisJ aXAtPmlvbWVtID0gZGV2LT5pb21lbSArIG9mZnNldDsKKwlpZiAoZGVzYy0+aXJxX25hbWUpIHsK KwkJZXJyID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoZGV2LT5wZGV2LCBkZXNjLT5pcnFfbmFt ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXQ7CisJCWlwLT5pcnEgPSBlcnI7CisJfQor CisJZXJyID0gZGVzYy0+aW5pdChpcCk7CisJaWYgKCFlcnIpIHsKKwkJaXAtPnByZXNlbnQgPSB0 cnVlOworCQlyZXR1cm4gMDsKKwl9CisKK291dDoKKwlyZXR1cm4gbXVzdCA/IGVyciA6IDA7Cit9 CisKK3N0YXRpYyB2b2lkIGxpbWFfZmluaV9pcChzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYsIGlu dCBpbmRleCkKK3sKKwlzdHJ1Y3QgbGltYV9pcF9kZXNjICpkZXNjID0gbGltYV9pcF9kZXNjICsg aW5kZXg7CisJc3RydWN0IGxpbWFfaXAgKmlwID0gbGRldi0+aXAgKyBpbmRleDsKKworCWlmIChp cC0+cHJlc2VudCkKKwkJZGVzYy0+ZmluaShpcCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pbml0 X2dwX3BpcGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfc2NoZWRf cGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9ncDsKKwlpbnQgZXJyOworCisJZXJy ID0gbGltYV9zY2hlZF9waXBlX2luaXQocGlwZSwgImdwIik7CisJaWYgKGVycikKKwkJcmV0dXJu IGVycjsKKworCXBpcGUtPmwyX2NhY2hlW3BpcGUtPm51bV9sMl9jYWNoZSsrXSA9IGRldi0+aXAg KyBsaW1hX2lwX2wyX2NhY2hlMDsKKwlwaXBlLT5tbXVbcGlwZS0+bnVtX21tdSsrXSA9IGRldi0+ aXAgKyBsaW1hX2lwX2dwbW11OworCXBpcGUtPnByb2Nlc3NvcltwaXBlLT5udW1fcHJvY2Vzc29y KytdID0gZGV2LT5pcCArIGxpbWFfaXBfZ3A7CisKKwllcnIgPSBsaW1hX2dwX3BpcGVfaW5pdChk ZXYpOworCWlmIChlcnIpIHsKKwkJbGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7CisJCXJldHVy biBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZmluaV9ncF9w aXBlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUg KnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfZ3A7CisKKwlsaW1hX2dwX3BpcGVfZmluaShk ZXYpOworCWxpbWFfc2NoZWRfcGlwZV9maW5pKHBpcGUpOworfQorCitzdGF0aWMgaW50IGxpbWFf aW5pdF9wcF9waXBlKHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3Nj aGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJaW50IGVyciwgaTsK KworCWVyciA9IGxpbWFfc2NoZWRfcGlwZV9pbml0KHBpcGUsICJwcCIpOworCWlmIChlcnIpCisJ CXJldHVybiBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElNQV9TQ0hFRF9QSVBFX01BWF9QUk9D RVNTT1I7IGkrKykgeworCQlzdHJ1Y3QgbGltYV9pcCAqcHAgPSBkZXYtPmlwICsgbGltYV9pcF9w cDAgKyBpOworCQlzdHJ1Y3QgbGltYV9pcCAqcHBtbXUgPSBkZXYtPmlwICsgbGltYV9pcF9wcG1t dTAgKyBpOworCQlzdHJ1Y3QgbGltYV9pcCAqbDJfY2FjaGU7CisKKwkJaWYgKGRldi0+aWQgPT0g bGltYV9ncHVfbWFsaTQwMCkKKwkJCWwyX2NhY2hlID0gZGV2LT5pcCArIGxpbWFfaXBfbDJfY2Fj aGUwOworCQllbHNlCisJCQlsMl9jYWNoZSA9IGRldi0+aXAgKyBsaW1hX2lwX2wyX2NhY2hlMSAr IChpID4+IDIpOworCisJCWlmIChwcC0+cHJlc2VudCAmJiBwcG1tdS0+cHJlc2VudCAmJiBsMl9j YWNoZS0+cHJlc2VudCkgeworCQkJcGlwZS0+bW11W3BpcGUtPm51bV9tbXUrK10gPSBwcG1tdTsK KwkJCXBpcGUtPnByb2Nlc3NvcltwaXBlLT5udW1fcHJvY2Vzc29yKytdID0gcHA7CisJCQlpZiAo IXBpcGUtPmwyX2NhY2hlW2kgPj4gMl0pCisJCQkJcGlwZS0+bDJfY2FjaGVbcGlwZS0+bnVtX2wy X2NhY2hlKytdID0gbDJfY2FjaGU7CisJCX0KKwl9CisKKwlpZiAoZGV2LT5pcFtsaW1hX2lwX2Jj YXN0XS5wcmVzZW50KSB7CisJCXBpcGUtPmJjYXN0X3Byb2Nlc3NvciA9IGRldi0+aXAgKyBsaW1h X2lwX3BwX2JjYXN0OworCQlwaXBlLT5iY2FzdF9tbXUgPSBkZXYtPmlwICsgbGltYV9pcF9wcG1t dV9iY2FzdDsKKwl9CisKKwllcnIgPSBsaW1hX3BwX3BpcGVfaW5pdChkZXYpOworCWlmIChlcnIp IHsKKwkJbGltYV9zY2hlZF9waXBlX2ZpbmkocGlwZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZmluaV9wcF9waXBlKHN0cnVjdCBsaW1h X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBp cGUgKyBsaW1hX3BpcGVfcHA7CisKKwlsaW1hX3BwX3BpcGVfZmluaShkZXYpOworCWxpbWFfc2No ZWRfcGlwZV9maW5pKHBpcGUpOworfQorCitpbnQgbGltYV9kZXZpY2VfaW5pdChzdHJ1Y3QgbGlt YV9kZXZpY2UgKmxkZXYpCit7CisJaW50IGVyciwgaTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsK KworCWRtYV9zZXRfY29oZXJlbnRfbWFzayhsZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwor CisJZXJyID0gbGltYV9jbGtfaW5pdChsZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIobGRl di0+ZGV2LCAiY2xrIGluaXQgZmFpbCAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisK KwllcnIgPSBsaW1hX3JlZ3VsYXRvcl9pbml0KGxkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vy cihsZGV2LT5kZXYsICJyZWd1bGF0b3IgaW5pdCBmYWlsICVkXG4iLCBlcnIpOworCQlnb3RvIGVy cl9vdXQwOworCX0KKworCWxkZXYtPmVtcHR5X3ZtID0gbGltYV92bV9jcmVhdGUobGRldik7CisJ aWYgKCFsZGV2LT5lbXB0eV92bSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQx OworCX0KKworCWxkZXYtPnZhX3N0YXJ0ID0gMDsKKwlpZiAobGRldi0+aWQgPT0gbGltYV9ncHVf bWFsaTQ1MCkgeworCQlsZGV2LT52YV9lbmQgPSBMSU1BX1ZBX1JFU0VSVkVfU1RBUlQ7CisJCWxk ZXYtPmRsYnVfY3B1ID0gZG1hX2FsbG9jX3djKAorCQkJbGRldi0+ZGV2LCBMSU1BX1BBR0VfU0la RSwKKwkJCSZsZGV2LT5kbGJ1X2RtYSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbGRldi0+ZGxidV9j cHUpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXQyOworCQl9CisJfSBlbHNl CisJCWxkZXYtPnZhX2VuZCA9IExJTUFfVkFfUkVTRVJWRV9FTkQ7CisKKwlyZXMgPSBwbGF0Zm9y bV9nZXRfcmVzb3VyY2UobGRldi0+cGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWxkZXYtPmlv bWVtID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGxkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJS KGxkZXYtPmlvbWVtKSkgeworCQlkZXZfZXJyKGxkZXYtPmRldiwgImZhaWwgdG8gaW9yZW1hcCBp b21lbVxuIik7CisJCWVyciA9IFBUUl9FUlIobGRldi0+aW9tZW0pOworCQlnb3RvIGVycl9vdXQz OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsaW1hX2lwX251bTsgaSsrKSB7CisJCWVyciA9IGxp bWFfaW5pdF9pcChsZGV2LCBpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDQ7CisJfQor CisJZXJyID0gbGltYV9pbml0X2dwX3BpcGUobGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJf b3V0NDsKKworCWVyciA9IGxpbWFfaW5pdF9wcF9waXBlKGxkZXYpOworCWlmIChlcnIpCisJCWdv dG8gZXJyX291dDU7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDU6CisJbGltYV9maW5pX2dwX3Bp cGUobGRldik7CitlcnJfb3V0NDoKKwl3aGlsZSAoLS1pID49IDApCisJCWxpbWFfZmluaV9pcChs ZGV2LCBpKTsKK2Vycl9vdXQzOgorCWlmIChsZGV2LT5kbGJ1X2NwdSkKKwkJZG1hX2ZyZWVfd2Mo bGRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwKKwkJCSAgICBsZGV2LT5kbGJ1X2NwdSwgbGRldi0+ ZGxidV9kbWEpOworZXJyX291dDI6CisJbGltYV92bV9wdXQobGRldi0+ZW1wdHlfdm0pOworZXJy X291dDE6CisJbGltYV9yZWd1bGF0b3JfZmluaShsZGV2KTsKK2Vycl9vdXQwOgorCWxpbWFfY2xr X2ZpbmkobGRldik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX2RldmljZV9maW5pKHN0 cnVjdCBsaW1hX2RldmljZSAqbGRldikKK3sKKwlpbnQgaTsKKworCWxpbWFfZmluaV9wcF9waXBl KGxkZXYpOworCWxpbWFfZmluaV9ncF9waXBlKGxkZXYpOworCisJZm9yIChpID0gbGltYV9pcF9u dW0gLSAxOyBpID49IDA7IGktLSkKKwkJbGltYV9maW5pX2lwKGxkZXYsIGkpOworCisJaWYgKGxk ZXYtPmRsYnVfY3B1KQorCQlkbWFfZnJlZV93YyhsZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFLAor CQkJICAgIGxkZXYtPmRsYnVfY3B1LCBsZGV2LT5kbGJ1X2RtYSk7CisKKwlsaW1hX3ZtX3B1dChs ZGV2LT5lbXB0eV92bSk7CisKKwlsaW1hX3JlZ3VsYXRvcl9maW5pKGxkZXYpOworCisJbGltYV9j bGtfZmluaShsZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf ZGV2aWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RldmljZS5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMzExNThkODYyNzFjCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kZXZpY2UuaApAQCAtMCwwICsxLDEzMSBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5 cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVm IF9fTElNQV9ERVZJQ0VfSF9fCisjZGVmaW5lIF9fTElNQV9ERVZJQ0VfSF9fCisKKyNpbmNsdWRl IDxkcm0vZHJtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRl ICJsaW1hX3NjaGVkLmgiCisKK2VudW0gbGltYV9ncHVfaWQgeworCWxpbWFfZ3B1X21hbGk0MDAg PSAwLAorCWxpbWFfZ3B1X21hbGk0NTAsCisJbGltYV9ncHVfbnVtLAorfTsKKworZW51bSBsaW1h X2lwX2lkIHsKKwlsaW1hX2lwX3BtdSwKKwlsaW1hX2lwX2dwbW11LAorCWxpbWFfaXBfcHBtbXUw LAorCWxpbWFfaXBfcHBtbXUxLAorCWxpbWFfaXBfcHBtbXUyLAorCWxpbWFfaXBfcHBtbXUzLAor CWxpbWFfaXBfcHBtbXU0LAorCWxpbWFfaXBfcHBtbXU1LAorCWxpbWFfaXBfcHBtbXU2LAorCWxp bWFfaXBfcHBtbXU3LAorCWxpbWFfaXBfZ3AsCisJbGltYV9pcF9wcDAsCisJbGltYV9pcF9wcDEs CisJbGltYV9pcF9wcDIsCisJbGltYV9pcF9wcDMsCisJbGltYV9pcF9wcDQsCisJbGltYV9pcF9w cDUsCisJbGltYV9pcF9wcDYsCisJbGltYV9pcF9wcDcsCisJbGltYV9pcF9sMl9jYWNoZTAsCisJ bGltYV9pcF9sMl9jYWNoZTEsCisJbGltYV9pcF9sMl9jYWNoZTIsCisJbGltYV9pcF9kbGJ1LAor CWxpbWFfaXBfYmNhc3QsCisJbGltYV9pcF9wcF9iY2FzdCwKKwlsaW1hX2lwX3BwbW11X2JjYXN0 LAorCWxpbWFfaXBfbnVtLAorfTsKKworc3RydWN0IGxpbWFfZGV2aWNlOworCitzdHJ1Y3QgbGlt YV9pcCB7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXY7CisJZW51bSBsaW1hX2lwX2lkIGlkOwor CWJvb2wgcHJlc2VudDsKKworCXZvaWQgX19pb21lbSAqaW9tZW07CisJaW50IGlycTsKKworCXVu aW9uIHsKKwkJLyogZ3AvcHAgKi8KKwkJYm9vbCBhc3luY19yZXNldDsKKwkJLyogbDIgY2FjaGUg Ki8KKwkJc3BpbmxvY2tfdCBsb2NrOworCX0gZGF0YTsKK307CisKK2VudW0gbGltYV9waXBlX2lk IHsKKwlsaW1hX3BpcGVfZ3AsCisJbGltYV9waXBlX3BwLAorCWxpbWFfcGlwZV9udW0sCit9Owor CitzdHJ1Y3QgbGltYV9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJt X2RldmljZSAqZGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCisJZW51bSBs aW1hX2dwdV9pZCBpZDsKKwl1MzIgZ3BfdmVyc2lvbjsKKwl1MzIgcHBfdmVyc2lvbjsKKwlpbnQg bnVtX3BwOworCisJdm9pZCBfX2lvbWVtICppb21lbTsKKwlzdHJ1Y3QgY2xrICpjbGtfYnVzOwor CXN0cnVjdCBjbGsgKmNsa19ncHU7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJlc2V0OworCXN0 cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKKworCXN0cnVjdCBsaW1hX2lwIGlwW2xpbWFfaXBf bnVtXTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlIHBpcGVbbGltYV9waXBlX251bV07CisKKwlz dHJ1Y3QgbGltYV92bSAqZW1wdHlfdm07CisJdWludDY0X3QgdmFfc3RhcnQ7CisJdWludDY0X3Qg dmFfZW5kOworCisJdTMyICpkbGJ1X2NwdTsKKwlkbWFfYWRkcl90IGRsYnVfZG1hOworfTsKKwor c3RhdGljIGlubGluZSBzdHJ1Y3QgbGltYV9kZXZpY2UgKgordG9fbGltYV9kZXYoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZGV2LT5kZXZfcHJpdmF0ZTsKK30KKworaW50IGxp bWFfZGV2aWNlX2luaXQoc3RydWN0IGxpbWFfZGV2aWNlICpsZGV2KTsKK3ZvaWQgbGltYV9kZXZp Y2VfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYpOworCitjb25zdCBjaGFyICpsaW1hX2lw X25hbWUoc3RydWN0IGxpbWFfaXAgKmlwKTsKKwordHlwZWRlZiBpbnQgKCpsaW1hX3BvbGxfZnVu Y190KShzdHJ1Y3QgbGltYV9pcCAqKTsKKworc3RhdGljIGlubGluZSBpbnQgbGltYV9wb2xsX3Rp bWVvdXQoc3RydWN0IGxpbWFfaXAgKmlwLCBsaW1hX3BvbGxfZnVuY190IGZ1bmMsCisJCQkJICAg IGludCBzbGVlcF91cywgaW50IHRpbWVvdXRfdXMpCit7CisJa3RpbWVfdCB0aW1lb3V0ID0ga3Rp bWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsKKworCW1pZ2h0X3NsZWVwX2lmKHNs ZWVwX3VzKTsKKwl3aGlsZSAoMSkgeworCQlpZiAoZnVuYyhpcCkpCisJCQlyZXR1cm4gMDsKKwor CQlpZiAodGltZW91dF91cyAmJiBrdGltZV9jb21wYXJlKGt0aW1lX2dldCgpLCB0aW1lb3V0KSA+ IDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCQlpZiAoc2xlZXBfdXMpCisJCQl1c2xlZXBf cmFuZ2UoKHNsZWVwX3VzID4+IDIpICsgMSwgc2xlZXBfdXMpOworCX0KKwlyZXR1cm4gMDsKK30K KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2RsYnUuYyBi L2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uODM5OWNlZmZiOTRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmMKQEAgLTAsMCArMSw1OCBAQAorLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCisvKiBDb3B5cmlnaHQgMjAxOC0yMDE5IFFp YW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp bmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5j bHVkZSAibGltYV9kbGJ1LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFf cmVncy5oIgorCisjZGVmaW5lIGRsYnVfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwgaXAt PmlvbWVtICsgcmVnKQorI2RlZmluZSBkbGJ1X3JlYWQocmVnKSByZWFkbChpcC0+aW9tZW0gKyBy ZWcpCisKK3ZvaWQgbGltYV9kbGJ1X2VuYWJsZShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiwgaW50 IG51bV9wcCkKK3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsg bGltYV9waXBlX3BwOworCXN0cnVjdCBsaW1hX2lwICppcCA9IGRldi0+aXAgKyBsaW1hX2lwX2Rs YnU7CisJaW50IGksIG1hc2sgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wcDsgaSsrKSB7 CisJCXN0cnVjdCBsaW1hX2lwICpwcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsKKworCQltYXNrIHw9 IDEgPDwgKHBwLT5pZCAtIGxpbWFfaXBfcHAwKTsKKwl9CisKKwlkbGJ1X3dyaXRlKExJTUFfRExC VV9QUF9FTkFCTEVfTUFTSywgbWFzayk7Cit9CisKK3ZvaWQgbGltYV9kbGJ1X2Rpc2FibGUoc3Ry dWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfaXAgKmlwID0gZGV2LT5pcCAr IGxpbWFfaXBfZGxidTsKKworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1BQX0VOQUJMRV9NQVNLLCAw KTsKK30KKwordm9pZCBsaW1hX2RsYnVfc2V0X3JlZyhzdHJ1Y3QgbGltYV9pcCAqaXAsIHUzMiAq cmVnKQoreworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1RMTElTVF9WQkFTRUFERFIsIHJlZ1swXSk7 CisJZGxidV93cml0ZShMSU1BX0RMQlVfRkJfRElNLCByZWdbMV0pOworCWRsYnVfd3JpdGUoTElN QV9ETEJVX1RMTElTVF9DT05GLCByZWdbMl0pOworCWRsYnVfd3JpdGUoTElNQV9ETEJVX1NUQVJU X1RJTEVfUE9TLCByZWdbM10pOworfQorCitpbnQgbGltYV9kbGJ1X2luaXQoc3RydWN0IGxpbWFf aXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKworCWRsYnVf d3JpdGUoTElNQV9ETEJVX01BU1RFUl9UTExJU1RfUEhZU19BRERSLCBkZXYtPmRsYnVfZG1hIHwg MSk7CisJZGxidV93cml0ZShMSU1BX0RMQlVfTUFTVEVSX1RMTElTVF9WQUREUiwgTElNQV9WQV9S RVNFUlZFX0RMQlUpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9kbGJ1X2Zpbmkoc3Ry dWN0IGxpbWFfaXAgKmlwKQoreworCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2RsYnUuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZGxidS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTZmODc3OTg0NDY2Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kbGJ1LmgKQEAgLTAsMCArMSwxOCBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5 cmlnaHQgMjAxOC0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVm IF9fTElNQV9ETEJVX0hfXworI2RlZmluZSBfX0xJTUFfRExCVV9IX18KKworc3RydWN0IGxpbWFf aXA7CitzdHJ1Y3QgbGltYV9kZXZpY2U7CisKK3ZvaWQgbGltYV9kbGJ1X2VuYWJsZShzdHJ1Y3Qg bGltYV9kZXZpY2UgKmRldiwgaW50IG51bV9wcCk7Cit2b2lkIGxpbWFfZGxidV9kaXNhYmxlKHN0 cnVjdCBsaW1hX2RldmljZSAqZGV2KTsKKwordm9pZCBsaW1hX2RsYnVfc2V0X3JlZyhzdHJ1Y3Qg bGltYV9pcCAqaXAsIHUzMiAqcmVnKTsKKworaW50IGxpbWFfZGxidV9pbml0KHN0cnVjdCBsaW1h X2lwICppcCk7Cit2b2lkIGxpbWFfZGxidV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCk7CisKKyNl bmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuYyBiL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5mOWEyODFhNjIwODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2Rydi5jCkBAIC0wLDAgKzEsMzc2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUg PHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNs dWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNp bmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9pb2N0bC5oPgorI2luY2x1 ZGUgPGRybS9kcm1fZHJ2Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcmltZS5oPgorI2luY2x1ZGUg PGRybS9saW1hX2RybS5oPgorCisjaW5jbHVkZSAibGltYV9kcnYuaCIKKyNpbmNsdWRlICJsaW1h X2dlbS5oIgorI2luY2x1ZGUgImxpbWFfZ2VtX3ByaW1lLmgiCisjaW5jbHVkZSAibGltYV92bS5o IgorCitpbnQgbGltYV9zY2hlZF90aW1lb3V0X21zOworCitNT0RVTEVfUEFSTV9ERVNDKHNjaGVk X3RpbWVvdXRfbXMsICJ0YXNrIHJ1biB0aW1lb3V0IGluIG1zICgwID0gbm8gdGltZW91dCAoZGVm YXVsdCkpIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoc2NoZWRfdGltZW91dF9tcywgbGltYV9zY2hl ZF90aW1lb3V0X21zLCBpbnQsIDA0NDQpOworCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfZ2V0X3Bh cmFtKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAq ZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2V0X3BhcmFtICphcmdzID0gZGF0YTsKKwlzdHJ1 Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYpOworCisJaWYgKGFyZ3MtPnBh ZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGFyZ3MtPnBhcmFtKSB7CisJY2FzZSBE Uk1fTElNQV9QQVJBTV9HUFVfSUQ6CisJCXN3aXRjaCAobGRldi0+aWQpIHsKKwkJY2FzZSBsaW1h X2dwdV9tYWxpNDAwOgorCQkJYXJncy0+dmFsdWUgPSBEUk1fTElNQV9QQVJBTV9HUFVfSURfTUFM STQwMDsKKwkJCWJyZWFrOworCQljYXNlIGxpbWFfZ3B1X21hbGk0NTA6CisJCQlhcmdzLT52YWx1 ZSA9IERSTV9MSU1BX1BBUkFNX0dQVV9JRF9NQUxJNDUwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6 CisJCQlhcmdzLT52YWx1ZSA9IERSTV9MSU1BX1BBUkFNX0dQVV9JRF9VTktOT1dOOworCQkJYnJl YWs7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIERSTV9MSU1BX1BBUkFNX05VTV9QUDoKKwkJYXJn cy0+dmFsdWUgPSBsZGV2LT5waXBlW2xpbWFfcGlwZV9wcF0ubnVtX3Byb2Nlc3NvcjsKKwkJYnJl YWs7CisKKwljYXNlIERSTV9MSU1BX1BBUkFNX0dQX1ZFUlNJT046CisJCWFyZ3MtPnZhbHVlID0g bGRldi0+Z3BfdmVyc2lvbjsKKwkJYnJlYWs7CisKKwljYXNlIERSTV9MSU1BX1BBUkFNX1BQX1ZF UlNJT046CisJCWFyZ3MtPnZhbHVlID0gbGRldi0+cHBfdmVyc2lvbjsKKwkJYnJlYWs7CisKKwlk ZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBsaW1hX2lvY3RsX2dlbV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXN0cnVjdCBkcm1fbGltYV9nZW1fY3Jl YXRlICphcmdzID0gZGF0YTsKKworCWlmIChhcmdzLT5wYWQpCisJCXJldHVybiAtRUlOVkFMOwor CisJaWYgKGFyZ3MtPmZsYWdzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmdzLT5zaXpl ID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGxpbWFfZ2VtX2NyZWF0ZV9oYW5k bGUoZGV2LCBmaWxlLCBhcmdzLT5zaXplLCBhcmdzLT5mbGFncywgJmFyZ3MtPmhhbmRsZSk7Cit9 CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9nZW1faW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9saW1h X2dlbV9pbmZvICphcmdzID0gZGF0YTsKKworCXJldHVybiBsaW1hX2dlbV9nZXRfaW5mbyhmaWxl LCBhcmdzLT5oYW5kbGUsICZhcmdzLT52YSwgJmFyZ3MtPm9mZnNldCk7Cit9CisKK3N0YXRpYyBp bnQgbGltYV9pb2N0bF9nZW1fc3VibWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ2VtX3N1Ym1p dCAqYXJncyA9IGRhdGE7CisJc3RydWN0IGxpbWFfZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYo ZGV2KTsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owor CXN0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2JvICpib3M7CisJc3RydWN0IGxpbWFfc2NoZWRf cGlwZSAqcGlwZTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrOworCXN0cnVjdCBsaW1h X2N0eCAqY3R4OworCXN0cnVjdCBsaW1hX3N1Ym1pdCBzdWJtaXQgPSB7MH07CisJc2l6ZV90IHNp emU7CisJaW50IGVyciA9IDA7CisKKwlpZiAoYXJncy0+cGlwZSA+PSBsaW1hX3BpcGVfbnVtIHx8 IGFyZ3MtPm5yX2JvcyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmdzLT5mbGFn cyAmIH4oTElNQV9TVUJNSVRfRkxBR19FWFBMSUNJVF9GRU5DRSkpCisJCXJldHVybiAtRUlOVkFM OworCisJcGlwZSA9IGxkZXYtPnBpcGUgKyBhcmdzLT5waXBlOworCWlmIChhcmdzLT5mcmFtZV9z aXplICE9IHBpcGUtPmZyYW1lX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJYm9zID0ga3Zj YWxsb2MoYXJncy0+bnJfYm9zLCBzaXplb2YoKnN1Ym1pdC5ib3MpICsgc2l6ZW9mKCpzdWJtaXQu bGJvcyksIEdGUF9LRVJORUwpOworCWlmICghYm9zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNp emUgPSBhcmdzLT5ucl9ib3MgKiBzaXplb2YoKnN1Ym1pdC5ib3MpOworCWlmIChjb3B5X2Zyb21f dXNlcihib3MsIHU2NF90b191c2VyX3B0cihhcmdzLT5ib3MpLCBzaXplKSkgeworCQllcnIgPSAt RUZBVUxUOworCQlnb3RvIG91dDA7CisJfQorCisJdGFzayA9IGttZW1fY2FjaGVfemFsbG9jKHBp cGUtPnRhc2tfc2xhYiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YXNrKSB7CisJCWVyciA9IC1FTk9N RU07CisJCWdvdG8gb3V0MDsKKwl9CisKKwl0YXNrLT5mcmFtZSA9IHRhc2sgKyAxOworCWlmIChj b3B5X2Zyb21fdXNlcih0YXNrLT5mcmFtZSwgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmZyYW1lKSwg YXJncy0+ZnJhbWVfc2l6ZSkpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBvdXQxOworCX0K KworCWVyciA9IHBpcGUtPnRhc2tfdmFsaWRhdGUocGlwZSwgdGFzayk7CisJaWYgKGVycikKKwkJ Z290byBvdXQxOworCisJY3R4ID0gbGltYV9jdHhfZ2V0KCZwcml2LT5jdHhfbWdyLCBhcmdzLT5j dHgpOworCWlmICghY3R4KSB7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0MTsKKwl9CisK KwlzdWJtaXQucGlwZSA9IGFyZ3MtPnBpcGU7CisJc3VibWl0LmJvcyA9IGJvczsKKwlzdWJtaXQu bGJvcyA9ICh2b2lkICopYm9zICsgc2l6ZTsKKwlzdWJtaXQubnJfYm9zID0gYXJncy0+bnJfYm9z OworCXN1Ym1pdC50YXNrID0gdGFzazsKKwlzdWJtaXQuY3R4ID0gY3R4OworCXN1Ym1pdC5mbGFn cyA9IGFyZ3MtPmZsYWdzOworCXN1Ym1pdC5pbl9zeW5jWzBdID0gYXJncy0+aW5fc3luY1swXTsK KwlzdWJtaXQuaW5fc3luY1sxXSA9IGFyZ3MtPmluX3N5bmNbMV07CisJc3VibWl0Lm91dF9zeW5j ID0gYXJncy0+b3V0X3N5bmM7CisKKwllcnIgPSBsaW1hX2dlbV9zdWJtaXQoZmlsZSwgJnN1Ym1p dCk7CisKKwlsaW1hX2N0eF9wdXQoY3R4KTsKK291dDE6CisJaWYgKGVycikKKwkJa21lbV9jYWNo ZV9mcmVlKHBpcGUtPnRhc2tfc2xhYiwgdGFzayk7CitvdXQwOgorCWt2ZnJlZShib3MpOworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9nZW1fd2FpdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3Ry dWN0IGRybV9saW1hX2dlbV93YWl0ICphcmdzID0gZGF0YTsKKworCWlmIChhcmdzLT5vcCAmIH4o TElNQV9HRU1fV0FJVF9SRUFEfExJTUFfR0VNX1dBSVRfV1JJVEUpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXJldHVybiBsaW1hX2dlbV93YWl0KGZpbGUsIGFyZ3MtPmhhbmRsZSwgYXJncy0+b3As IGFyZ3MtPnRpbWVvdXRfbnMpOworfQorCitzdGF0aWMgaW50IGxpbWFfaW9jdGxfY3R4X2NyZWF0 ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUpCit7CisJc3RydWN0IGRybV9saW1hX2N0eF9jcmVhdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVj dCBsaW1hX2RybV9wcml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisJc3RydWN0IGxpbWFf ZGV2aWNlICpsZGV2ID0gdG9fbGltYV9kZXYoZGV2KTsKKworCWlmIChhcmdzLT5fcGFkKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBsaW1hX2N0eF9jcmVhdGUobGRldiwgJnByaXYtPmN0 eF9tZ3IsICZhcmdzLT5pZCk7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9pb2N0bF9jdHhfZnJlZShz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUp Cit7CisJc3RydWN0IGRybV9saW1hX2N0eF9jcmVhdGUgKmFyZ3MgPSBkYXRhOworCXN0cnVjdCBs aW1hX2RybV9wcml2ICpwcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7CisKKwlpZiAoYXJncy0+X3Bh ZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbGltYV9jdHhfZnJlZSgmcHJpdi0+Y3R4 X21nciwgYXJncy0+aWQpOworfQorCitzdGF0aWMgaW50IGxpbWFfZHJtX2RyaXZlcl9vcGVuKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlpbnQgZXJy OworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpwcml2OworCXN0cnVjdCBsaW1hX2RldmljZSAqbGRl diA9IHRvX2xpbWFfZGV2KGRldik7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2YoKnByaXYpLCBH RlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+dm0g PSBsaW1hX3ZtX2NyZWF0ZShsZGV2KTsKKwlpZiAoIXByaXYtPnZtKSB7CisJCWVyciA9IC1FTk9N RU07CisJCWdvdG8gZXJyX291dDA7CisJfQorCisJbGltYV9jdHhfbWdyX2luaXQoJnByaXYtPmN0 eF9tZ3IpOworCisJZmlsZS0+ZHJpdmVyX3ByaXYgPSBwcml2OworCXJldHVybiAwOworCitlcnJf b3V0MDoKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBsaW1h X2RybV9kcml2ZXJfcG9zdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1f ZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IGZpbGUtPmRyaXZl cl9wcml2OworCisJbGltYV9jdHhfbWdyX2ZpbmkoJnByaXYtPmN0eF9tZ3IpOworCWxpbWFfdm1f cHV0KHByaXYtPnZtKTsKKwlrZnJlZShwcml2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1faW9jdGxfZGVzYyBsaW1hX2RybV9kcml2ZXJfaW9jdGxzW10gPSB7CisJRFJNX0lPQ1RMX0RF Rl9EUlYoTElNQV9HRVRfUEFSQU0sIGxpbWFfaW9jdGxfZ2V0X3BhcmFtLCBEUk1fQVVUSHxEUk1f UkVOREVSX0FMTE9XKSwKKwlEUk1fSU9DVExfREVGX0RSVihMSU1BX0dFTV9DUkVBVEUsIGxpbWFf aW9jdGxfZ2VtX2NyZWF0ZSwgRFJNX0FVVEh8RFJNX1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RM X0RFRl9EUlYoTElNQV9HRU1fSU5GTywgbGltYV9pb2N0bF9nZW1faW5mbywgRFJNX0FVVEh8RFJN X1JFTkRFUl9BTExPVyksCisJRFJNX0lPQ1RMX0RFRl9EUlYoTElNQV9HRU1fU1VCTUlULCBsaW1h X2lvY3RsX2dlbV9zdWJtaXQsIERSTV9BVVRIfERSTV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NU TF9ERUZfRFJWKExJTUFfR0VNX1dBSVQsIGxpbWFfaW9jdGxfZ2VtX3dhaXQsIERSTV9BVVRIfERS TV9SRU5ERVJfQUxMT1cpLAorCURSTV9JT0NUTF9ERUZfRFJWKExJTUFfQ1RYX0NSRUFURSwgbGlt YV9pb2N0bF9jdHhfY3JlYXRlLCBEUk1fQVVUSHxEUk1fUkVOREVSX0FMTE9XKSwKKwlEUk1fSU9D VExfREVGX0RSVihMSU1BX0NUWF9GUkVFLCBsaW1hX2lvY3RsX2N0eF9mcmVlLCBEUk1fQVVUSHxE Uk1fUkVOREVSX0FMTE9XKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIGxpbWFfZHJtX2RyaXZlcl9mb3BzID0geworCS5vd25lciAgICAgICAgICAgICAgPSBUSElT X01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgICAgID0gZHJtX29wZW4sCisJLnJlbGVhc2UgICAg ICAgICAgICA9IGRybV9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCAgICAgPSBkcm1faW9jdGws CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgICAgICAgPSBkcm1fY29tcGF0 X2lvY3RsLAorI2VuZGlmCisJLm1tYXAgICAgICAgICAgICAgICA9IGxpbWFfZ2VtX21tYXAsCit9 OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgbGltYV9kcm1fZHJpdmVyID0geworCS5kcml2 ZXJfZmVhdHVyZXMgICAgPSBEUklWRVJfUkVOREVSIHwgRFJJVkVSX0dFTSB8IERSSVZFUl9QUklN RSB8IERSSVZFUl9TWU5DT0JKLAorCS5vcGVuICAgICAgICAgICAgICAgPSBsaW1hX2RybV9kcml2 ZXJfb3BlbiwKKwkucG9zdGNsb3NlICAgICAgICAgID0gbGltYV9kcm1fZHJpdmVyX3Bvc3RjbG9z ZSwKKwkuaW9jdGxzICAgICAgICAgICAgID0gbGltYV9kcm1fZHJpdmVyX2lvY3RscywKKwkubnVt X2lvY3RscyAgICAgICAgID0gQVJSQVlfU0laRShsaW1hX2RybV9kcml2ZXJfaW9jdGxzKSwKKwku Zm9wcyAgICAgICAgICAgICAgID0gJmxpbWFfZHJtX2RyaXZlcl9mb3BzLAorCS5nZW1fZnJlZV9v YmplY3RfdW5sb2NrZWQgPSBsaW1hX2dlbV9mcmVlX29iamVjdCwKKwkuZ2VtX29wZW5fb2JqZWN0 ICAgID0gbGltYV9nZW1fb2JqZWN0X29wZW4sCisJLmdlbV9jbG9zZV9vYmplY3QgICA9IGxpbWFf Z2VtX29iamVjdF9jbG9zZSwKKwkuZ2VtX3ZtX29wcyAgICAgICAgID0gJmxpbWFfZ2VtX3ZtX29w cywKKwkubmFtZSAgICAgICAgICAgICAgID0gImxpbWEiLAorCS5kZXNjICAgICAgICAgICAgICAg PSAibGltYSBEUk0iLAorCS5kYXRlICAgICAgICAgICAgICAgPSAiMjAxOTAyMTciLAorCS5tYWpv ciAgICAgICAgICAgICAgPSAxLAorCS5taW5vciAgICAgICAgICAgICAgPSAwLAorCS5wYXRjaGxl dmVsICAgICAgICAgPSAwLAorCisJLnByaW1lX2ZkX3RvX2hhbmRsZSA9IGRybV9nZW1fcHJpbWVf ZmRfdG9faGFuZGxlLAorCS5nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlID0gbGltYV9nZW1fcHJp bWVfaW1wb3J0X3NnX3RhYmxlLAorCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1l X2hhbmRsZV90b19mZCwKKwkuZ2VtX3ByaW1lX2dldF9zZ190YWJsZSA9IGxpbWFfZ2VtX3ByaW1l X2dldF9zZ190YWJsZSwKKwkuZ2VtX3ByaW1lX21tYXAgPSBsaW1hX2dlbV9wcmltZV9tbWFwLAor fTsKKworc3RhdGljIGludCBsaW1hX3BkZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXY7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRkZXY7CisJaW50IGVycjsKKworCWVyciA9IGxpbWFfc2NoZWRfc2xhYl9pbml0KCk7CisJaWYg KGVycikKKwkJcmV0dXJuIGVycjsKKworCWxkZXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg c2l6ZW9mKCpsZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZGV2KSB7CisJCWVyciA9IC1FTk9N RU07CisJCWdvdG8gZXJyX291dDA7CisJfQorCisJbGRldi0+cGRldiA9IHBkZXY7CisJbGRldi0+ ZGV2ID0gJnBkZXYtPmRldjsKKwlsZGV2LT5pZCA9IChlbnVtIGxpbWFfZ3B1X2lkKW9mX2Rldmlj ZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGxkZXYpOworCisJLyogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlIERSTSBkZXZpY2Uu ICovCisJZGRldiA9IGRybV9kZXZfYWxsb2MoJmxpbWFfZHJtX2RyaXZlciwgJnBkZXYtPmRldik7 CisJaWYgKElTX0VSUihkZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGRldik7CisKKwlkZGV2LT5k ZXZfcHJpdmF0ZSA9IGxkZXY7CisJbGRldi0+ZGRldiA9IGRkZXY7CisKKwllcnIgPSBsaW1hX2Rl dmljZV9pbml0KGxkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmF0 YWwgZXJyb3IgZHVyaW5nIEdQVSBpbml0XG4iKTsKKwkJZ290byBlcnJfb3V0MTsKKwl9CisKKwkv KgorCSAqIFJlZ2lzdGVyIHRoZSBEUk0gZGV2aWNlIHdpdGggdGhlIGNvcmUgYW5kIHRoZSBjb25u ZWN0b3JzIHdpdGgKKwkgKiBzeXNmcy4KKwkgKi8KKwllcnIgPSBkcm1fZGV2X3JlZ2lzdGVyKGRk ZXYsIDApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXQyOworCisJcmV0dXJuIDA7CisK K2Vycl9vdXQyOgorCWxpbWFfZGV2aWNlX2ZpbmkobGRldik7CitlcnJfb3V0MToKKwlkcm1fZGV2 X3B1dChkZGV2KTsKK2Vycl9vdXQwOgorCWxpbWFfc2NoZWRfc2xhYl9maW5pKCk7CisJcmV0dXJu IGVycjsKK30KKworc3RhdGljIGludCBsaW1hX3BkZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpsZGV2ID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSBsZGV2LT5kZGV2Owor CisJZHJtX2Rldl91bnJlZ2lzdGVyKGRkZXYpOworCWxpbWFfZGV2aWNlX2ZpbmkobGRldik7CisJ ZHJtX2Rldl9wdXQoZGRldik7CisJbGltYV9zY2hlZF9zbGFiX2ZpbmkoKTsKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHRfbWF0Y2hbXSA9IHsKKwl7 IC5jb21wYXRpYmxlID0gImFybSxtYWxpLTQwMCIsIC5kYXRhID0gKHZvaWQgKilsaW1hX2dwdV9t YWxpNDAwIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS00NTAiLCAuZGF0YSA9ICh2b2lk ICopbGltYV9ncHVfbWFsaTQ1MCB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg ZHRfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsaW1hX3BsYXRmb3Jt X2RyaXZlciA9IHsKKwkucHJvYmUgICAgICA9IGxpbWFfcGRldl9wcm9iZSwKKwkucmVtb3ZlICAg ICA9IGxpbWFfcGRldl9yZW1vdmUsCisJLmRyaXZlciAgICAgPSB7CisJCS5uYW1lICAgPSAibGlt YSIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGR0X21hdGNoLAorCX0sCit9OworCitzdGF0aWMgaW50 IF9faW5pdCBsaW1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lz dGVyKCZsaW1hX3BsYXRmb3JtX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChsaW1hX2luaXQpOwor CitzdGF0aWMgdm9pZCBfX2V4aXQgbGltYV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVy X3VucmVnaXN0ZXIoJmxpbWFfcGxhdGZvcm1fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGxpbWFf ZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkxpbWEgUHJvamVjdCBEZXZlbG9wZXJzIik7CitNT0RV TEVfREVTQ1JJUFRJT04oIkxpbWEgRFJNIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9kcnYuaCBiL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi42OWM3MzQ0NzE1YzkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX2Rydi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZ dSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJTUFfRFJWX0hfXworI2RlZmlu ZSBfX0xJTUFfRFJWX0hfXworCisjaW5jbHVkZSA8ZHJtL2RybV9maWxlLmg+CisKKyNpbmNsdWRl ICJsaW1hX2N0eC5oIgorCitleHRlcm4gaW50IGxpbWFfc2NoZWRfdGltZW91dF9tczsKKworc3Ry dWN0IGxpbWFfdm07CitzdHJ1Y3QgbGltYV9ibzsKK3N0cnVjdCBsaW1hX3NjaGVkX3Rhc2s7CisK K3N0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2JvOworCitzdHJ1Y3QgbGltYV9kcm1fcHJpdiB7 CisJc3RydWN0IGxpbWFfdm0gKnZtOworCXN0cnVjdCBsaW1hX2N0eF9tZ3IgY3R4X21ncjsKK307 CisKK3N0cnVjdCBsaW1hX3N1Ym1pdCB7CisJc3RydWN0IGxpbWFfY3R4ICpjdHg7CisJaW50IHBp cGU7CisJdTMyIGZsYWdzOworCisJc3RydWN0IGRybV9saW1hX2dlbV9zdWJtaXRfYm8gKmJvczsK KwlzdHJ1Y3QgbGltYV9ibyAqKmxib3M7CisJdTMyIG5yX2JvczsKKworCXUzMiBpbl9zeW5jWzJd OworCXUzMiBvdXRfc3luYzsKKworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2s7Cit9Owor CitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX2RybV9wcml2ICoKK3RvX2xpbWFfZHJtX3ByaXYo c3RydWN0IGRybV9maWxlICpmaWxlKQoreworCXJldHVybiBmaWxlLT5kcml2ZXJfcHJpdjsKK30K KworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5jIGIv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjJkM2NmOTZmNmM1OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfZ2VtLmMKQEAgLTAsMCArMSwzODEgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFu ZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxpbnV4L3N5bmNfZmlsZS5o PgorI2luY2x1ZGUgPGxpbnV4L3Bmbl90Lmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX3N5bmNvYmouaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3V0aWxzLmg+ CisKKyNpbmNsdWRlIDxkcm0vbGltYV9kcm0uaD4KKworI2luY2x1ZGUgImxpbWFfZHJ2LmgiCisj aW5jbHVkZSAibGltYV9nZW0uaCIKKyNpbmNsdWRlICJsaW1hX2dlbV9wcmltZS5oIgorI2luY2x1 ZGUgImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1hX29iamVjdC5oIgorCitpbnQgbGltYV9nZW1f Y3JlYXRlX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGUsCisJCQkgICB1MzIgc2l6ZSwgdTMyIGZsYWdzLCB1MzIgKmhhbmRsZSkKK3sKKwlpbnQgZXJy OworCXN0cnVjdCBsaW1hX2JvICpibzsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19s aW1hX2RldihkZXYpOworCisJYm8gPSBsaW1hX2JvX2NyZWF0ZShsZGV2LCBzaXplLCBmbGFncywg TlVMTCwgTlVMTCk7CisJaWYgKElTX0VSUihibykpCisJCXJldHVybiBQVFJfRVJSKGJvKTsKKwor CWVyciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmYm8tPmdlbSwgaGFuZGxlKTsKKwor CS8qIGRyb3AgcmVmZXJlbmNlIGZyb20gYWxsb2NhdGUgLSBoYW5kbGUgaG9sZHMgaXQgbm93ICov CisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKCZiby0+Z2VtKTsKKworCXJldHVybiBlcnI7 Cit9CisKK3ZvaWQgbGltYV9nZW1fZnJlZV9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpv YmopCit7CisJc3RydWN0IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCisJaWYgKCFs aXN0X2VtcHR5KCZiby0+dmEpKQorCQlkZXZfZXJyKG9iai0+ZGV2LT5kZXYsICJsaW1hIGdlbSBm cmVlIGJvIHN0aWxsIGhhcyB2YVxuIik7CisKKwlsaW1hX2JvX2Rlc3Ryb3koYm8pOworfQorCitp bnQgbGltYV9nZW1fb2JqZWN0X29wZW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgbGltYV9ibyAqYm8gPSB0b19saW1hX2JvKG9i aik7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYgPSB0b19saW1hX2RybV9wcml2KGZpbGUp OworCXN0cnVjdCBsaW1hX3ZtICp2bSA9IHByaXYtPnZtOworCisJcmV0dXJuIGxpbWFfdm1fYm9f YWRkKHZtLCBibywgdHJ1ZSk7Cit9CisKK3ZvaWQgbGltYV9nZW1fb2JqZWN0X2Nsb3NlKHN0cnVj dCBkcm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCit7CisJc3RydWN0 IGxpbWFfYm8gKmJvID0gdG9fbGltYV9ibyhvYmopOworCXN0cnVjdCBsaW1hX2RybV9wcml2ICpw cml2ID0gdG9fbGltYV9kcm1fcHJpdihmaWxlKTsKKwlzdHJ1Y3QgbGltYV92bSAqdm0gPSBwcml2 LT52bTsKKworCWxpbWFfdm1fYm9fZGVsKHZtLCBibyk7Cit9CisKK2ludCBsaW1hX2dlbV9nZXRf aW5mbyhzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHUzMiBoYW5kbGUsIHUzMiAqdmEsIHU2NCAqb2Zm c2V0KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCBsaW1hX2JvICpi bzsKKwlzdHJ1Y3QgbGltYV9kcm1fcHJpdiAqcHJpdiA9IHRvX2xpbWFfZHJtX3ByaXYoZmlsZSk7 CisJc3RydWN0IGxpbWFfdm0gKnZtID0gcHJpdi0+dm07CisJaW50IGVycjsKKworCW9iaiA9IGRy bV9nZW1fb2JqZWN0X2xvb2t1cChmaWxlLCBoYW5kbGUpOworCWlmICghb2JqKQorCQlyZXR1cm4g LUVOT0VOVDsKKworCWJvID0gdG9fbGltYV9ibyhvYmopOworCisJKnZhID0gbGltYV92bV9nZXRf dmEodm0sIGJvKTsKKworCWVyciA9IGRybV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7CisJ aWYgKCFlcnIpCisJCSpvZmZzZXQgPSBkcm1fdm1hX25vZGVfb2Zmc2V0X2FkZHIoJm9iai0+dm1h X25vZGUpOworCisJZHJtX2dlbV9vYmplY3RfcHV0X3VubG9ja2VkKG9iaik7CisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIHZtX2ZhdWx0X3QgbGltYV9nZW1fZmF1bHQoc3RydWN0IHZtX2ZhdWx0 ICp2bWYpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtPnZtYTsKKwlzdHJ1 Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBs aW1hX2JvICpibyA9IHRvX2xpbWFfYm8ob2JqKTsKKwlwZm5fdCBwZm47CisJcGdvZmZfdCBwZ29m ZjsKKworCS8qIFdlIGRvbid0IHVzZSB2bWYtPnBnb2ZmIHNpbmNlIHRoYXQgaGFzIHRoZSBmYWtl IG9mZnNldDogKi8KKwlwZ29mZiA9ICh2bWYtPmFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQ QUdFX1NISUZUOworCXBmbiA9IF9fcGZuX3RvX3Bmbl90KHBhZ2VfdG9fcGZuKGJvLT5wYWdlc1tw Z29mZl0pLCBQRk5fREVWKTsKKworCXJldHVybiB2bWZfaW5zZXJ0X21peGVkKHZtYSwgdm1mLT5h ZGRyZXNzLCBwZm4pOworfQorCitjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbGlt YV9nZW1fdm1fb3BzID0geworCS5mYXVsdCA9IGxpbWFfZ2VtX2ZhdWx0LAorCS5vcGVuID0gZHJt X2dlbV92bV9vcGVuLAorCS5jbG9zZSA9IGRybV9nZW1fdm1fY2xvc2UsCit9OworCit2b2lkIGxp bWFfc2V0X3ZtYV9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlwZ3Byb3Rf dCBwcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsKKworCXZtYS0+dm1fZmxh Z3MgfD0gVk1fTUlYRURNQVA7CisJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOTUFQOworCXZtYS0+ dm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZShwcm90KTsKK30KKworaW50IGxpbWFf Z2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQor eworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXAoZmlscCwgdm1hKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJbGltYV9zZXRfdm1hX2ZsYWdzKHZtYSk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbGltYV9nZW1fc3luY19ibyhzdHJ1Y3QgbGltYV9zY2hlZF90YXNr ICp0YXNrLCBzdHJ1Y3QgbGltYV9ibyAqYm8sCisJCQkgICAgYm9vbCB3cml0ZSwgYm9vbCBleHBs aWNpdCkKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghd3JpdGUpIHsKKwkJZXJyID0gcmVzZXJ2 YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hhcmVkKGJvLT5nZW0ucmVzdiwgMSk7CisJCWlmIChlcnIp CisJCQlyZXR1cm4gZXJyOworCX0KKworCS8qIGV4cGxpY2l0IHN5bmMgdXNlIHVzZXIgcGFzc2Vk IGRlcCBmZW5jZSAqLworCWlmIChleHBsaWNpdCkKKwkJcmV0dXJuIDA7CisKKwkvKiBpbXBsaWNp dCBzeW5jIHVzZSBibyBmZW5jZSBpbiByZXN2IG9iaiAqLworCWlmICh3cml0ZSkgeworCQl1bnNp Z25lZCBucl9mZW5jZXM7CisJCXN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZXM7CisJCWludCBpOwor CisJCWVyciA9IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZmVuY2VzX3JjdSgKKwkJCWJvLT5nZW0u cmVzdiwgTlVMTCwgJm5yX2ZlbmNlcywgJmZlbmNlcyk7CisJCWlmIChlcnIgfHwgIW5yX2ZlbmNl cykKKwkJCXJldHVybiBlcnI7CisKKwkJZm9yIChpID0gMDsgaSA8IG5yX2ZlbmNlczsgaSsrKSB7 CisJCQllcnIgPSBsaW1hX3NjaGVkX3Rhc2tfYWRkX2RlcCh0YXNrLCBmZW5jZXNbaV0pOworCQkJ aWYgKGVycikKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIGZvciBlcnJvciBjYXNlIGZyZWUgcmVt YWluaW5nIGZlbmNlcyAqLworCQlmb3IgKCA7IGkgPCBucl9mZW5jZXM7IGkrKykKKwkJCWRtYV9m ZW5jZV9wdXQoZmVuY2VzW2ldKTsKKworCQlrZnJlZShmZW5jZXMpOworCX0gZWxzZSB7CisJCXN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlOworCisJCWZlbmNlID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dl dF9leGNsX3JjdShiby0+Z2VtLnJlc3YpOworCQlpZiAoZmVuY2UpIHsKKwkJCWVyciA9IGxpbWFf c2NoZWRfdGFza19hZGRfZGVwKHRhc2ssIGZlbmNlKTsKKwkJCWlmIChlcnIpCisJCQkJZG1hX2Zl bmNlX3B1dChmZW5jZSk7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50 IGxpbWFfZ2VtX2xvY2tfYm9zKHN0cnVjdCBsaW1hX2JvICoqYm9zLCB1MzIgbnJfYm9zLAorCQkJ ICAgICBzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggKmN0eCkKK3sKKwlpbnQgaSwgcmV0ID0gMCwgY29u dGVuZGVkLCBzbG93X2xvY2tlZCA9IC0xOworCisJd3dfYWNxdWlyZV9pbml0KGN0eCwgJnJlc2Vy dmF0aW9uX3d3X2NsYXNzKTsKKworcmV0cnk6CisJZm9yIChpID0gMDsgaSA8IG5yX2JvczsgaSsr KSB7CisJCWlmIChpID09IHNsb3dfbG9ja2VkKSB7CisJCQlzbG93X2xvY2tlZCA9IC0xOworCQkJ Y29udGludWU7CisJCX0KKworCQlyZXQgPSB3d19tdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmJv c1tpXS0+Z2VtLnJlc3YtPmxvY2ssIGN0eCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQljb250ZW5k ZWQgPSBpOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwl3d19hY3F1aXJlX2RvbmUoY3R4KTsK KwlyZXR1cm4gMDsKKworZXJyOgorCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJd3dfbXV0ZXhf dW5sb2NrKCZib3NbaV0tPmdlbS5yZXN2LT5sb2NrKTsKKworCWlmIChzbG93X2xvY2tlZCA+PSAw KQorCQl3d19tdXRleF91bmxvY2soJmJvc1tzbG93X2xvY2tlZF0tPmdlbS5yZXN2LT5sb2NrKTsK KworCWlmIChyZXQgPT0gLUVERUFETEspIHsKKwkJLyogd2UgbG9zdCBvdXQgaW4gYSBzZXFubyBy YWNlLCBsb2NrIGFuZCByZXRyeS4uICovCisJCXJldCA9IHd3X211dGV4X2xvY2tfc2xvd19pbnRl cnJ1cHRpYmxlKAorCQkJJmJvc1tjb250ZW5kZWRdLT5nZW0ucmVzdi0+bG9jaywgY3R4KTsKKwkJ aWYgKCFyZXQpIHsKKwkJCXNsb3dfbG9ja2VkID0gY29udGVuZGVkOworCQkJZ290byByZXRyeTsK KwkJfQorCX0KKwl3d19hY3F1aXJlX2ZpbmkoY3R4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIGxpbWFfZ2VtX3VubG9ja19ib3Moc3RydWN0IGxpbWFfYm8gKipib3MsIHUzMiBu cl9ib3MsCisJCQkJc3RydWN0IHd3X2FjcXVpcmVfY3R4ICpjdHgpCit7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbnJfYm9zOyBpKyspCisJCXd3X211dGV4X3VubG9jaygmYm9zW2ldLT5n ZW0ucmVzdi0+bG9jayk7CisJd3dfYWNxdWlyZV9maW5pKGN0eCk7Cit9CisKK3N0YXRpYyBpbnQg bGltYV9nZW1fYWRkX2RlcHMoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgbGltYV9zdWJt aXQgKnN1Ym1pdCkKK3sKKwlpbnQgaSwgZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoc3VibWl0LT5pbl9zeW5jKTsgaSsrKSB7CisJCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0g TlVMTDsKKworCQlpZiAoIXN1Ym1pdC0+aW5fc3luY1tpXSkKKwkJCWNvbnRpbnVlOworCisJCWVy ciA9IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoZmlsZSwgc3VibWl0LT5pbl9zeW5jW2ldLAorCQkJ CQkgICAgIDAsIDAsICZmZW5jZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVy ciA9IGxpbWFfc2NoZWRfdGFza19hZGRfZGVwKHN1Ym1pdC0+dGFzaywgZmVuY2UpOworCQlpZiAo ZXJyKSB7CisJCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9 CisKKwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFfZ2VtX3N1Ym1pdChzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUsIHN0cnVjdCBsaW1hX3N1Ym1pdCAqc3VibWl0KQoreworCWludCBpLCBlcnIgPSAwOwor CXN0cnVjdCB3d19hY3F1aXJlX2N0eCBjdHg7CisJc3RydWN0IGxpbWFfZHJtX3ByaXYgKnByaXYg PSB0b19saW1hX2RybV9wcml2KGZpbGUpOworCXN0cnVjdCBsaW1hX3ZtICp2bSA9IHByaXYtPnZt OworCXN0cnVjdCBkcm1fc3luY29iaiAqb3V0X3N5bmMgPSBOVUxMOworCXN0cnVjdCBkbWFfZmVu Y2UgKmZlbmNlOworCXN0cnVjdCBsaW1hX2JvICoqYm9zID0gc3VibWl0LT5sYm9zOworCisJaWYg KHN1Ym1pdC0+b3V0X3N5bmMpIHsKKwkJb3V0X3N5bmMgPSBkcm1fc3luY29ial9maW5kKGZpbGUs IHN1Ym1pdC0+b3V0X3N5bmMpOworCQlpZiAoIW91dF9zeW5jKQorCQkJcmV0dXJuIC1FTk9FTlQ7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IHN1Ym1pdC0+bnJfYm9zOyBpKyspIHsKKwkJc3RydWN0 IGRybV9nZW1fb2JqZWN0ICpvYmo7CisJCXN0cnVjdCBsaW1hX2JvICpibzsKKworCQlvYmogPSBk cm1fZ2VtX29iamVjdF9sb29rdXAoZmlsZSwgc3VibWl0LT5ib3NbaV0uaGFuZGxlKTsKKwkJaWYg KCFvYmopIHsKKwkJCWVyciA9IC1FTk9FTlQ7CisJCQlnb3RvIGVycl9vdXQwOworCQl9CisKKwkJ Ym8gPSB0b19saW1hX2JvKG9iaik7CisKKwkJLyogaW5jcmVhc2UgcmVmY250IG9mIGdwdSB2YSBt YXAgdG8gcHJldmVudCB1bm1hcHBlZCB3aGVuIGV4ZWN1dGluZywKKwkJICogd2lsbCBiZSBkZWNy ZWFzZWQgd2hlbiB0YXNrIGRvbmUKKwkJICovCisJCWVyciA9IGxpbWFfdm1fYm9fYWRkKHZtLCBi bywgZmFsc2UpOworCQlpZiAoZXJyKSB7CisJCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQo b2JqKTsKKwkJCWdvdG8gZXJyX291dDA7CisJCX0KKworCQlib3NbaV0gPSBibzsKKwl9CisKKwll cnIgPSBsaW1hX2dlbV9sb2NrX2Jvcyhib3MsIHN1Ym1pdC0+bnJfYm9zLCAmY3R4KTsKKwlpZiAo ZXJyKQorCQlnb3RvIGVycl9vdXQwOworCisJZXJyID0gbGltYV9zY2hlZF90YXNrX2luaXQoCisJ CXN1Ym1pdC0+dGFzaywgc3VibWl0LT5jdHgtPmNvbnRleHQgKyBzdWJtaXQtPnBpcGUsCisJCWJv cywgc3VibWl0LT5ucl9ib3MsIHZtKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQxOworCisJ ZXJyID0gbGltYV9nZW1fYWRkX2RlcHMoZmlsZSwgc3VibWl0KTsKKwlpZiAoZXJyKQorCQlnb3Rv IGVycl9vdXQyOworCisJZm9yIChpID0gMDsgaSA8IHN1Ym1pdC0+bnJfYm9zOyBpKyspIHsKKwkJ ZXJyID0gbGltYV9nZW1fc3luY19ibygKKwkJCXN1Ym1pdC0+dGFzaywgYm9zW2ldLAorCQkJc3Vi bWl0LT5ib3NbaV0uZmxhZ3MgJiBMSU1BX1NVQk1JVF9CT19XUklURSwKKwkJCXN1Ym1pdC0+Zmxh Z3MgJiBMSU1BX1NVQk1JVF9GTEFHX0VYUExJQ0lUX0ZFTkNFKTsKKwkJaWYgKGVycikKKwkJCWdv dG8gZXJyX291dDI7CisJfQorCisJZmVuY2UgPSBsaW1hX3NjaGVkX2NvbnRleHRfcXVldWVfdGFz aygKKwkJc3VibWl0LT5jdHgtPmNvbnRleHQgKyBzdWJtaXQtPnBpcGUsIHN1Ym1pdC0+dGFzayk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgc3VibWl0LT5ucl9ib3M7IGkrKykgeworCQlpZiAoc3VibWl0 LT5ib3NbaV0uZmxhZ3MgJiBMSU1BX1NVQk1JVF9CT19XUklURSkKKwkJCXJlc2VydmF0aW9uX29i amVjdF9hZGRfZXhjbF9mZW5jZShib3NbaV0tPmdlbS5yZXN2LCBmZW5jZSk7CisJCWVsc2UKKwkJ CXJlc2VydmF0aW9uX29iamVjdF9hZGRfc2hhcmVkX2ZlbmNlKGJvc1tpXS0+Z2VtLnJlc3YsIGZl bmNlKTsKKwl9CisKKwlsaW1hX2dlbV91bmxvY2tfYm9zKGJvcywgc3VibWl0LT5ucl9ib3MsICZj dHgpOworCisJZm9yIChpID0gMDsgaSA8IHN1Ym1pdC0+bnJfYm9zOyBpKyspCisJCWRybV9nZW1f b2JqZWN0X3B1dF91bmxvY2tlZCgmYm9zW2ldLT5nZW0pOworCisJaWYgKG91dF9zeW5jKSB7CisJ CWRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uob3V0X3N5bmMsIGZlbmNlKTsKKwkJZHJtX3N5bmNv YmpfcHV0KG91dF9zeW5jKTsKKwl9CisKKwlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKworCXJldHVy biAwOworCitlcnJfb3V0MjoKKwlsaW1hX3NjaGVkX3Rhc2tfZmluaShzdWJtaXQtPnRhc2spOwor ZXJyX291dDE6CisJbGltYV9nZW1fdW5sb2NrX2Jvcyhib3MsIHN1Ym1pdC0+bnJfYm9zLCAmY3R4 KTsKK2Vycl9vdXQwOgorCWZvciAoaSA9IDA7IGkgPCBzdWJtaXQtPm5yX2JvczsgaSsrKSB7CisJ CWlmICghYm9zW2ldKQorCQkJYnJlYWs7CisJCWxpbWFfdm1fYm9fZGVsKHZtLCBib3NbaV0pOwor CQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJmJvc1tpXS0+Z2VtKTsKKwl9CisJaWYgKG91 dF9zeW5jKQorCQlkcm1fc3luY29ial9wdXQob3V0X3N5bmMpOworCXJldHVybiBlcnI7Cit9CisK K2ludCBsaW1hX2dlbV93YWl0KHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwgdTMy IG9wLCBzNjQgdGltZW91dF9ucykKK3sKKwlib29sIHdyaXRlID0gb3AgJiBMSU1BX0dFTV9XQUlU X1dSSVRFOworCWxvbmcgcmV0LCB0aW1lb3V0OworCisJaWYgKCFvcCkKKwkJcmV0dXJuIDA7CisK Kwl0aW1lb3V0ID0gZHJtX3RpbWVvdXRfYWJzX3RvX2ppZmZpZXModGltZW91dF9ucyk7CisKKwly ZXQgPSBkcm1fZ2VtX3Jlc2VydmF0aW9uX29iamVjdF93YWl0KGZpbGUsIGhhbmRsZSwgd3JpdGUs IHRpbWVvdXQpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0ID0gdGltZW91dCA/IC1FVElNRURPVVQg OiAtRUJVU1k7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9nZW0uaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41NTYxMTFhMDExMzUKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbS5oCkBAIC0wLDAgKzEsMjUg QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29w eXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRl ZiBfX0xJTUFfR0VNX0hfXworI2RlZmluZSBfX0xJTUFfR0VNX0hfXworCitzdHJ1Y3QgbGltYV9i bzsKK3N0cnVjdCBsaW1hX3N1Ym1pdDsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRp b25zX3N0cnVjdCBsaW1hX2dlbV92bV9vcHM7CisKK3N0cnVjdCBsaW1hX2JvICpsaW1hX2dlbV9j cmVhdGVfYm8oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIHNpemUsIHUzMiBmbGFncyk7Citp bnQgbGltYV9nZW1fY3JlYXRlX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGUsCisJCQkgICB1MzIgc2l6ZSwgdTMyIGZsYWdzLCB1MzIgKmhhbmRsZSk7 Cit2b2lkIGxpbWFfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsK K2ludCBsaW1hX2dlbV9vYmplY3Rfb3BlbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgc3Ry dWN0IGRybV9maWxlICpmaWxlKTsKK3ZvaWQgbGltYV9nZW1fb2JqZWN0X2Nsb3NlKHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqb2JqLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOworaW50IGxpbWFfZ2Vt X2dldF9pbmZvKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwgdTMyIGhhbmRsZSwgdTMyICp2YSwgdTY0 ICpvZmZzZXQpOworaW50IGxpbWFfZ2VtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2ludCBsaW1hX2dlbV9zdWJtaXQoc3RydWN0IGRybV9maWxl ICpmaWxlLCBzdHJ1Y3QgbGltYV9zdWJtaXQgKnN1Ym1pdCk7CitpbnQgbGltYV9nZW1fd2FpdChz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsIHUzMiBoYW5kbGUsIHUzMiBvcCwgczY0IHRpbWVvdXRfbnMp OworCit2b2lkIGxpbWFfc2V0X3ZtYV9mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7 CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9nZW1fcHJp bWUuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45YzZkOWYxZGJhNTUKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dlbV9wcmltZS5jCkBAIC0wLDAgKzEsNDcg QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJp Z2h0IDIwMTgtMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW1lLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9kcnYuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4KKworI2luY2x1ZGUgImxp bWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9vYmplY3QuaCIKKyNpbmNsdWRlICJsaW1hX2dl bS5oIgorI2luY2x1ZGUgImxpbWFfZ2VtX3ByaW1lLmgiCisKK3N0cnVjdCBkcm1fZ2VtX29iamVj dCAqbGltYV9nZW1fcHJpbWVfaW1wb3J0X3NnX3RhYmxlKAorCXN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKKwlzdHJ1Y3Qgc2dfdGFibGUg KnNndCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmxkZXYgPSB0b19saW1hX2RldihkZXYpOwor CXN0cnVjdCBsaW1hX2JvICpibzsKKworCWJvID0gbGltYV9ib19jcmVhdGUobGRldiwgYXR0YWNo LT5kbWFidWYtPnNpemUsIDAsIHNndCwKKwkJCSAgICBhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7CisJ aWYgKElTX0VSUihibykpCisJCXJldHVybiBFUlJfQ0FTVChibyk7CisKKwlyZXR1cm4gJmJvLT5n ZW07Cit9CisKK3N0cnVjdCBzZ190YWJsZSAqbGltYV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0 cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBsaW1hX2JvICpibyA9IHRvX2xp bWFfYm8ob2JqKTsKKwlpbnQgbnBhZ2VzID0gb2JqLT5zaXplID4+IFBBR0VfU0hJRlQ7CisKKwly ZXR1cm4gZHJtX3ByaW1lX3BhZ2VzX3RvX3NnKGJvLT5wYWdlcywgbnBhZ2VzKTsKK30KKworaW50 IGxpbWFfZ2VtX3ByaW1lX21tYXAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkcm1fZ2VtX21tYXBf b2JqKG9iaiwgb2JqLT5zaXplLCB2bWEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwls aW1hX3NldF92bWFfZmxhZ3Modm1hKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfZ2VtX3ByaW1lLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX2dlbV9wcmltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4u MzRiNGQzNWMyMWUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGlt YV9nZW1fcHJpbWUuaApAQCAtMCwwICsxLDEzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcgWXUgPHl1 cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX0dFTV9QUklNRV9IX18KKyNkZWZp bmUgX19MSU1BX0dFTV9QUklNRV9IX18KKworc3RydWN0IGRybV9nZW1fb2JqZWN0ICpsaW1hX2dl bV9wcmltZV9pbXBvcnRfc2dfdGFibGUoCisJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoLAorCXN0cnVjdCBzZ190YWJsZSAqc2d0KTsKK3N0 cnVjdCBzZ190YWJsZSAqbGltYV9nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlKHN0cnVjdCBkcm1fZ2Vt X29iamVjdCAqb2JqKTsKK2ludCBsaW1hX2dlbV9wcmltZV9tbWFwKHN0cnVjdCBkcm1fZ2VtX29i amVjdCAqb2JqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9ncC5jIGIvZHJpdmVycy9ncHUvZHJtL2xp bWEvbGltYV9ncC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2Nm NDlmYWVkZWJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9n cC5jCkBAIC0wLDAgKzEsMjgzIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5j b20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9p b3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+CisKKyNpbmNsdWRlIDxkcm0vbGltYV9kcm0uaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNl LmgiCisjaW5jbHVkZSAibGltYV9ncC5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisjZGVm aW5lIGdwX3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIHJlZykKKyNk ZWZpbmUgZ3BfcmVhZChyZWcpIHJlYWRsKGlwLT5pb21lbSArIHJlZykKKworc3RhdGljIGlycXJl dHVybl90IGxpbWFfZ3BfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1 Y3QgbGltYV9pcCAqaXAgPSBkYXRhOworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRl djsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBl X2dwOworCXUzMiBzdGF0ZSA9IGdwX3JlYWQoTElNQV9HUF9JTlRfU1RBVCk7CisJdTMyIHN0YXR1 cyA9IGdwX3JlYWQoTElNQV9HUF9TVEFUVVMpOworCWJvb2wgZG9uZSA9IGZhbHNlOworCisJLyog Zm9yIHNoYXJlZCBpcnEgY2FzZSAqLworCWlmICghc3RhdGUpCisJCXJldHVybiBJUlFfTk9ORTsK KworCWlmIChzdGF0ZSAmIExJTUFfR1BfSVJRX01BU0tfRVJST1IpIHsKKwkJZGV2X2VycihkZXYt PmRldiwgImdwIGVycm9yIGlycSBzdGF0ZT0leCBzdGF0dXM9JXhcbiIsCisJCQlzdGF0ZSwgc3Rh dHVzKTsKKworCQkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGJlZm9yZSBoYXJkIHJlc2V0ICovCisJ CWdwX3dyaXRlKExJTUFfR1BfSU5UX01BU0ssIDApOworCisJCXBpcGUtPmVycm9yID0gdHJ1ZTsK KwkJZG9uZSA9IHRydWU7CisJfSBlbHNlIHsKKwkJYm9vbCB2YWxpZCA9IHN0YXRlICYgKExJTUFf R1BfSVJRX1ZTX0VORF9DTURfTFNUIHwKKwkJCQkgICAgICBMSU1BX0dQX0lSUV9QTEJVX0VORF9D TURfTFNUKTsKKwkJYm9vbCBhY3RpdmUgPSBzdGF0dXMgJiAoTElNQV9HUF9TVEFUVVNfVlNfQUNU SVZFIHwKKwkJCQkJTElNQV9HUF9TVEFUVVNfUExCVV9BQ1RJVkUpOworCQlkb25lID0gdmFsaWQg JiYgIWFjdGl2ZTsKKwl9CisKKwlncF93cml0ZShMSU1BX0dQX0lOVF9DTEVBUiwgc3RhdGUpOwor CisJaWYgKGRvbmUpCisJCWxpbWFfc2NoZWRfcGlwZV90YXNrX2RvbmUocGlwZSk7CisKKwlyZXR1 cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3Bfc29mdF9yZXNldF9hc3lu YyhzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJaWYgKGlwLT5kYXRhLmFzeW5jX3Jlc2V0KQorCQly ZXR1cm47CisKKwlncF93cml0ZShMSU1BX0dQX0lOVF9NQVNLLCAwKTsKKwlncF93cml0ZShMSU1B X0dQX0lOVF9DTEVBUiwgTElNQV9HUF9JUlFfUkVTRVRfQ09NUExFVEVEKTsKKwlncF93cml0ZShM SU1BX0dQX0NNRCwgTElNQV9HUF9DTURfU09GVF9SRVNFVCk7CisJaXAtPmRhdGEuYXN5bmNfcmVz ZXQgPSB0cnVlOworfQorCitzdGF0aWMgaW50IGxpbWFfZ3Bfc29mdF9yZXNldF9hc3luY193YWl0 KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5k ZXY7CisJaW50IGVycjsKKwl1MzIgdjsKKworCWlmICghaXAtPmRhdGEuYXN5bmNfcmVzZXQpCisJ CXJldHVybiAwOworCisJZXJyID0gcmVhZGxfcG9sbF90aW1lb3V0KGlwLT5pb21lbSArIExJTUFf R1BfSU5UX1JBV1NUQVQsIHYsCisJCQkJIHYgJiBMSU1BX0dQX0lSUV9SRVNFVF9DT01QTEVURUQs CisJCQkJIDAsIDEwMCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZ3Agc29m dCByZXNldCB0aW1lIG91dFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZ3Bfd3JpdGUoTElN QV9HUF9JTlRfQ0xFQVIsIExJTUFfR1BfSVJRX01BU0tfQUxMKTsKKwlncF93cml0ZShMSU1BX0dQ X0lOVF9NQVNLLCBMSU1BX0dQX0lSUV9NQVNLX1VTRUQpOworCisJaXAtPmRhdGEuYXN5bmNfcmVz ZXQgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaW1hX2dwX3Rhc2tfdmFs aWRhdGUoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCQkgc3RydWN0IGxpbWFfc2No ZWRfdGFzayAqdGFzaykKK3sKKwlzdHJ1Y3QgZHJtX2xpbWFfZ3BfZnJhbWUgKmZyYW1lID0gdGFz ay0+ZnJhbWU7CisJdTMyICpmID0gZnJhbWUtPmZyYW1lOworCSh2b2lkKXBpcGU7CisKKwlpZiAo ZltMSU1BX0dQX1ZTQ0xfU1RBUlRfQUREUiA+PiAyXSA+CisJICAgIGZbTElNQV9HUF9WU0NMX0VO RF9BRERSID4+IDJdIHx8CisJICAgIGZbTElNQV9HUF9QTEJVQ0xfU1RBUlRfQUREUiA+PiAyXSA+ CisJICAgIGZbTElNQV9HUF9QTEJVQ0xfRU5EX0FERFIgPj4gMl0gfHwKKwkgICAgZltMSU1BX0dQ X1BMQlVfQUxMT0NfU1RBUlRfQUREUiA+PiAyXSA+CisJICAgIGZbTElNQV9HUF9QTEJVX0FMTE9D X0VORF9BRERSID4+IDJdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmW0xJTUFfR1BfVlND TF9TVEFSVF9BRERSID4+IDJdID09CisJICAgIGZbTElNQV9HUF9WU0NMX0VORF9BRERSID4+IDJd ICYmCisJICAgIGZbTElNQV9HUF9QTEJVQ0xfU1RBUlRfQUREUiA+PiAyXSA9PQorCSAgICBmW0xJ TUFfR1BfUExCVUNMX0VORF9BRERSID4+IDJdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBsaW1hX2dwX3Rhc2tfcnVuKHN0cnVjdCBsaW1hX3NjaGVk X3BpcGUgKnBpcGUsCisJCQkgICAgIHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJ c3RydWN0IGxpbWFfaXAgKmlwID0gcGlwZS0+cHJvY2Vzc29yWzBdOworCXN0cnVjdCBkcm1fbGlt YV9ncF9mcmFtZSAqZnJhbWUgPSB0YXNrLT5mcmFtZTsKKwl1MzIgKmYgPSBmcmFtZS0+ZnJhbWU7 CisJdTMyIGNtZCA9IDA7CisJaW50IGk7CisKKwlpZiAoZltMSU1BX0dQX1ZTQ0xfU1RBUlRfQURE UiA+PiAyXSAhPQorCSAgICBmW0xJTUFfR1BfVlNDTF9FTkRfQUREUiA+PiAyXSkKKwkJY21kIHw9 IExJTUFfR1BfQ01EX1NUQVJUX1ZTOworCWlmIChmW0xJTUFfR1BfUExCVUNMX1NUQVJUX0FERFIg Pj4gMl0gIT0KKwkgICAgZltMSU1BX0dQX1BMQlVDTF9FTkRfQUREUiA+PiAyXSkKKwkJY21kIHw9 IExJTUFfR1BfQ01EX1NUQVJUX1BMQlU7CisKKwkvKiBiZWZvcmUgYW55IGh3IG9wcywgd2FpdCBs YXN0IHN1Y2Nlc3MgdGFzayBhc3luYyBzb2Z0IHJlc2V0ICovCisJbGltYV9ncF9zb2Z0X3Jlc2V0 X2FzeW5jX3dhaXQoaXApOworCisJZm9yIChpID0gMDsgaSA8IExJTUFfR1BfRlJBTUVfUkVHX05V TTsgaSsrKQorCQl3cml0ZWwoZltpXSwgaXAtPmlvbWVtICsgTElNQV9HUF9WU0NMX1NUQVJUX0FE RFIgKyBpICogNCk7CisKKwlncF93cml0ZShMSU1BX0dQX0NNRCwgTElNQV9HUF9DTURfVVBEQVRF X1BMQlVfQUxMT0MpOworCWdwX3dyaXRlKExJTUFfR1BfQ01ELCBjbWQpOworfQorCitzdGF0aWMg aW50IGxpbWFfZ3BfaGFyZF9yZXNldF9wb2xsKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlncF93 cml0ZShMSU1BX0dQX1BFUkZfQ05UXzBfTElNSVQsIDB4QzAxQTAwMDApOworCXJldHVybiBncF9y ZWFkKExJTUFfR1BfUEVSRl9DTlRfMF9MSU1JVCkgPT0gMHhDMDFBMDAwMDsKK30KKworc3RhdGlj IGludCBsaW1hX2dwX2hhcmRfcmVzZXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBs aW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQgcmV0OworCisJZ3Bfd3JpdGUoTElNQV9H UF9QRVJGX0NOVF8wX0xJTUlULCAweEMwRkZFMDAwKTsKKwlncF93cml0ZShMSU1BX0dQX0lOVF9N QVNLLCAwKTsKKwlncF93cml0ZShMSU1BX0dQX0NNRCwgTElNQV9HUF9DTURfUkVTRVQpOworCXJl dCA9IGxpbWFfcG9sbF90aW1lb3V0KGlwLCBsaW1hX2dwX2hhcmRfcmVzZXRfcG9sbCwgMTAsIDEw MCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZ3AgaGFyZCByZXNldCB0aW1l b3V0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlncF93cml0ZShMSU1BX0dQX1BFUkZfQ05U XzBfTElNSVQsIDApOworCWdwX3dyaXRlKExJTUFfR1BfSU5UX0NMRUFSLCBMSU1BX0dQX0lSUV9N QVNLX0FMTCk7CisJZ3Bfd3JpdGUoTElNQV9HUF9JTlRfTUFTSywgTElNQV9HUF9JUlFfTUFTS19V U0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9ncF90YXNrX2Zpbmkoc3Ry dWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlsaW1hX2dwX3NvZnRfcmVzZXRfYXN5bmMo cGlwZS0+cHJvY2Vzc29yWzBdKTsKK30KKworc3RhdGljIHZvaWQgbGltYV9ncF90YXNrX2Vycm9y KHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpCit7CisJc3RydWN0IGxpbWFfaXAgKmlwID0g cGlwZS0+cHJvY2Vzc29yWzBdOworCisJZGV2X2VycihpcC0+ZGV2LT5kZXYsICJncCB0YXNrIGVy cm9yIGludF9zdGF0ZT0leCBzdGF0dXM9JXhcbiIsCisJCWdwX3JlYWQoTElNQV9HUF9JTlRfU1RB VCksIGdwX3JlYWQoTElNQV9HUF9TVEFUVVMpKTsKKworCWxpbWFfZ3BfaGFyZF9yZXNldChpcCk7 Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfZ3BfdGFza19tbXVfZXJyb3Ioc3RydWN0IGxpbWFfc2No ZWRfcGlwZSAqcGlwZSkKK3sKKwlsaW1hX3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworfQor CitzdGF0aWMgdm9pZCBsaW1hX2dwX3ByaW50X3ZlcnNpb24oc3RydWN0IGxpbWFfaXAgKmlwKQor eworCXUzMiB2ZXJzaW9uLCBtYWpvciwgbWlub3I7CisJY2hhciAqbmFtZTsKKworCXZlcnNpb24g PSBncF9yZWFkKExJTUFfR1BfVkVSU0lPTik7CisJbWFqb3IgPSAodmVyc2lvbiA+PiA4KSAmIDB4 RkY7CisJbWlub3IgPSB2ZXJzaW9uICYgMHhGRjsKKwlzd2l0Y2ggKHZlcnNpb24gPj4gMTYpIHsK KwljYXNlIDB4QTA3OgorCSAgICBuYW1lID0gIm1hbGkyMDAiOworCQlicmVhazsKKwljYXNlIDB4 QzA3OgorCQluYW1lID0gIm1hbGkzMDAiOworCQlicmVhazsKKwljYXNlIDB4QjA3OgorCQluYW1l ID0gIm1hbGk0MDAiOworCQlicmVhazsKKwljYXNlIDB4RDA3OgorCQluYW1lID0gIm1hbGk0NTAi OworCQlicmVhazsKKwlkZWZhdWx0OgorCQluYW1lID0gInVua25vd24iOworCQlicmVhazsKKwl9 CisJZGV2X2luZm8oaXAtPmRldi0+ZGV2LCAiJXMgLSAlcyB2ZXJzaW9uIG1ham9yICVkIG1pbm9y ICVkXG4iLAorCQkgbGltYV9pcF9uYW1lKGlwKSwgbmFtZSwgbWFqb3IsIG1pbm9yKTsKK30KKwor c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpsaW1hX2dwX3Rhc2tfc2xhYjsKK3N0YXRpYyBpbnQg bGltYV9ncF90YXNrX3NsYWJfcmVmY250OworCitpbnQgbGltYV9ncF9pbml0KHN0cnVjdCBsaW1h X2lwICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJaW50IGVy cjsKKworCWxpbWFfZ3BfcHJpbnRfdmVyc2lvbihpcCk7CisKKwlpcC0+ZGF0YS5hc3luY19yZXNl dCA9IGZhbHNlOworCWxpbWFfZ3Bfc29mdF9yZXNldF9hc3luYyhpcCk7CisJZXJyID0gbGltYV9n cF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoaXApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisK KwllcnIgPSBkZXZtX3JlcXVlc3RfaXJxKGRldi0+ZGV2LCBpcC0+aXJxLCBsaW1hX2dwX2lycV9o YW5kbGVyLAorCQkJICAgICAgIElSUUZfU0hBUkVELCBsaW1hX2lwX25hbWUoaXApLCBpcCk7CisJ aWYgKGVycikgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAiZ3AgJXMgZmFpbCB0byByZXF1ZXN0IGly cVxuIiwKKwkJCWxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gZXJyOworCX0KKworCWRldi0+ Z3BfdmVyc2lvbiA9IGdwX3JlYWQoTElNQV9HUF9WRVJTSU9OKTsKKworCXJldHVybiAwOworfQor Cit2b2lkIGxpbWFfZ3BfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisKK30KKworaW50IGxp bWFfZ3BfcGlwZV9pbml0KHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KQoreworCWludCBmcmFtZV9z aXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fbGltYV9ncF9mcmFtZSk7CisJc3RydWN0IGxpbWFfc2No ZWRfcGlwZSAqcGlwZSA9IGRldi0+cGlwZSArIGxpbWFfcGlwZV9ncDsKKworCWlmICghbGltYV9n cF90YXNrX3NsYWIpIHsKKwkJbGltYV9ncF90YXNrX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZV91 c2VyY29weSgKKwkJCSJsaW1hX2dwX3Rhc2siLCBzaXplb2Yoc3RydWN0IGxpbWFfc2NoZWRfdGFz aykgKyBmcmFtZV9zaXplLAorCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBzaXplb2Yoc3RydWN0 IGxpbWFfc2NoZWRfdGFzayksCisJCQlmcmFtZV9zaXplLCBOVUxMKTsKKwkJaWYgKCFsaW1hX2dw X3Rhc2tfc2xhYikKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlsaW1hX2dwX3Rhc2tfc2xhYl9y ZWZjbnQrKzsKKworCXBpcGUtPmZyYW1lX3NpemUgPSBmcmFtZV9zaXplOworCXBpcGUtPnRhc2tf c2xhYiA9IGxpbWFfZ3BfdGFza19zbGFiOworCisJcGlwZS0+dGFza192YWxpZGF0ZSA9IGxpbWFf Z3BfdGFza192YWxpZGF0ZTsKKwlwaXBlLT50YXNrX3J1biA9IGxpbWFfZ3BfdGFza19ydW47CisJ cGlwZS0+dGFza19maW5pID0gbGltYV9ncF90YXNrX2Zpbmk7CisJcGlwZS0+dGFza19lcnJvciA9 IGxpbWFfZ3BfdGFza19lcnJvcjsKKwlwaXBlLT50YXNrX21tdV9lcnJvciA9IGxpbWFfZ3BfdGFz a19tbXVfZXJyb3I7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX2dwX3BpcGVfZmluaShz dHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIS0tbGltYV9ncF90YXNrX3NsYWJfcmVm Y250KSB7CisJCWttZW1fY2FjaGVfZGVzdHJveShsaW1hX2dwX3Rhc2tfc2xhYik7CisJCWxpbWFf Z3BfdGFza19zbGFiID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2dwLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41MTZlNWMxYmFiYmIKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2dwLmgKQEAgLTAsMCArMSwxNiBAQAor LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmln aHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9f TElNQV9HUF9IX18KKyNkZWZpbmUgX19MSU1BX0dQX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKK3N0 cnVjdCBsaW1hX2RldmljZTsKKworaW50IGxpbWFfZ3BfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXAp Owordm9pZCBsaW1hX2dwX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworaW50IGxpbWFfZ3Bf cGlwZV9pbml0KHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KTsKK3ZvaWQgbGltYV9ncF9waXBlX2Zp bmkoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9saW1hL2xpbWFfbDJfY2FjaGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xp bWFfbDJfY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjY4 NzNhN2FmNWE1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFf bDJfY2FjaGUuYwpAQCAtMCwwICsxLDgwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBn bWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisjaW5jbHVkZSAibGltYV9s Ml9jYWNoZS5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisjZGVmaW5lIGwyX2NhY2hlX3dy aXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIHJlZykKKyNkZWZpbmUgbDJf Y2FjaGVfcmVhZChyZWcpIHJlYWRsKGlwLT5pb21lbSArIHJlZykKKworc3RhdGljIGludCBsaW1h X2wyX2NhY2hlX3dhaXRfaWRsZShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFf ZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7CisJdTMyIHY7CisKKwllcnIgPSByZWFk bF9wb2xsX3RpbWVvdXQoaXAtPmlvbWVtICsgTElNQV9MMl9DQUNIRV9TVEFUVVMsIHYsCisJCQkJ ICEodiAmIExJTUFfTDJfQ0FDSEVfU1RBVFVTX0NPTU1BTkRfQlVTWSksCisJCQkJIDAsIDEwMDAp OworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImwyIGNhY2hlIHdhaXQgY29tbWFu ZCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBs aW1hX2wyX2NhY2hlX2ZsdXNoKHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlpbnQgcmV0OworCisJ c3Bpbl9sb2NrKCZpcC0+ZGF0YS5sb2NrKTsKKwlsMl9jYWNoZV93cml0ZShMSU1BX0wyX0NBQ0hF X0NPTU1BTkQsIExJTUFfTDJfQ0FDSEVfQ09NTUFORF9DTEVBUl9BTEwpOworCXJldCA9IGxpbWFf bDJfY2FjaGVfd2FpdF9pZGxlKGlwKTsKKwlzcGluX3VubG9jaygmaXAtPmRhdGEubG9jayk7CisJ cmV0dXJuIHJldDsKK30KKworaW50IGxpbWFfbDJfY2FjaGVfaW5pdChzdHJ1Y3QgbGltYV9pcCAq aXApCit7CisJaW50IGksIGVycjsKKwl1MzIgc2l6ZTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRl diA9IGlwLT5kZXY7CisKKwkvKiBsMl9jYWNoZTIgb25seSBleGlzdHMgd2hlbiBvbmUgb2YgUFA0 LTcgcHJlc2VudCAqLworCWlmIChpcC0+aWQgPT0gbGltYV9pcF9sMl9jYWNoZTIpIHsKKwkJZm9y IChpID0gbGltYV9pcF9wcDQ7IGkgPD0gbGltYV9pcF9wcDc7IGkrKykgeworCQkJaWYgKGRldi0+ aXBbaV0ucHJlc2VudCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoaSA+IGxpbWFfaXBfcHA3KQor CQkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmlwLT5kYXRhLmxvY2sp OworCisJc2l6ZSA9IGwyX2NhY2hlX3JlYWQoTElNQV9MMl9DQUNIRV9TSVpFKTsKKwlkZXZfaW5m byhkZXYtPmRldiwgImwyIGNhY2hlICV1SywgJXUtd2F5LCAldWJ5dGUgY2FjaGUgbGluZSwgJXVi aXQgZXh0ZXJuYWwgYnVzXG4iLAorCQkgMSA8PCAoKChzaXplID4+IDE2KSAmIDB4ZmYpIC0gMTAp LAorCQkgMSA8PCAoKHNpemUgPj4gOCkgJiAweGZmKSwKKwkJIDEgPDwgKHNpemUgJiAweGZmKSwK KwkJIDEgPDwgKChzaXplID4+IDI0KSAmIDB4ZmYpKTsKKworCWVyciA9IGxpbWFfbDJfY2FjaGVf Zmx1c2goaXApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlsMl9jYWNoZV93cml0ZShM SU1BX0wyX0NBQ0hFX0VOQUJMRSwKKwkJICAgICAgIExJTUFfTDJfQ0FDSEVfRU5BQkxFX0FDQ0VT U3xMSU1BX0wyX0NBQ0hFX0VOQUJMRV9SRUFEX0FMTE9DQVRFKTsKKwlsMl9jYWNoZV93cml0ZShM SU1BX0wyX0NBQ0hFX01BWF9SRUFEUywgMHgxYyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBs aW1hX2wyX2NhY2hlX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX2wyX2NhY2hlLmggYi9kcml2ZXJzL2dwdS9kcm0v bGltYS9saW1hX2wyX2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jNjNmYjY3NmZmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX2wyX2NhY2hlLmgKQEAgLTAsMCArMSwxNCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1 IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVmIF9fTElNQV9MMl9DQUNIRV9IX18KKyNk ZWZpbmUgX19MSU1BX0wyX0NBQ0hFX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKKworaW50IGxpbWFf bDJfY2FjaGVfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBsaW1hX2wyX2NhY2hlX2Zp bmkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworaW50IGxpbWFfbDJfY2FjaGVfZmx1c2goc3RydWN0 IGxpbWFfaXAgKmlwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGlt YS9saW1hX21tdS5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9tbXUuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjhlMTY1MWQ2YTYxZgotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmMKQEAgLTAsMCArMSwxNDIgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0 IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGxp bnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxp bnV4L2RldmljZS5oPgorCisjaW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1h X21tdS5oIgorI2luY2x1ZGUgImxpbWFfdm0uaCIKKyNpbmNsdWRlICJsaW1hX29iamVjdC5oIgor I2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisjZGVmaW5lIG1tdV93cml0ZShyZWcsIGRhdGEpIHdy aXRlbChkYXRhLCBpcC0+aW9tZW0gKyByZWcpCisjZGVmaW5lIG1tdV9yZWFkKHJlZykgcmVhZGwo aXAtPmlvbWVtICsgcmVnKQorCisjZGVmaW5lIGxpbWFfbW11X3NlbmRfY29tbWFuZChjbWQsIGFk ZHIsIHZhbCwgY29uZCkJICAgICBcCisoewkJCQkJCQkgICAgIFwKKwlpbnQgX19yZXQ7CQkJCQkg ICAgIFwKKwkJCQkJCQkgICAgIFwKKwltbXVfd3JpdGUoTElNQV9NTVVfQ09NTUFORCwgY21kKTsJ CSAgICAgXAorCV9fcmV0ID0gcmVhZGxfcG9sbF90aW1lb3V0KGlwLT5pb21lbSArIChhZGRyKSwg dmFsLCAgXAorCQkJCSAgY29uZCwgMCwgMTAwKTsJICAgICBcCisJaWYgKF9fcmV0KQkJCQkJICAg ICBcCisJCWRldl9lcnIoZGV2LT5kZXYsCQkJICAgICBcCisJCQkibW11IGNvbW1hbmQgJXggdGlt ZW91dFxuIiwgY21kKTsgICAgXAorCV9fcmV0OwkJCQkJCSAgICAgXAorfSkKKworc3RhdGljIGly cXJldHVybl90IGxpbWFfbW11X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJ c3RydWN0IGxpbWFfaXAgKmlwID0gZGF0YTsKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlw LT5kZXY7CisJdTMyIHN0YXR1cyA9IG1tdV9yZWFkKExJTUFfTU1VX0lOVF9TVEFUVVMpOworCXN0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGU7CisKKwkvKiBmb3Igc2hhcmVkIGlycSBjYXNlICov CisJaWYgKCFzdGF0dXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBMSU1B X01NVV9JTlRfUEFHRV9GQVVMVCkgeworCQl1MzIgZmF1bHQgPSBtbXVfcmVhZChMSU1BX01NVV9Q QUdFX0ZBVUxUX0FERFIpOworCisJCWRldl9lcnIoZGV2LT5kZXYsICJtbXUgcGFnZSBmYXVsdCBh dCAweCV4IGZyb20gYnVzIGlkICVkIG9mIHR5cGUgJXMgb24gJXNcbiIsCisJCQlmYXVsdCwgTElN QV9NTVVfU1RBVFVTX0JVU19JRChzdGF0dXMpLAorCQkJc3RhdHVzICYgTElNQV9NTVVfU1RBVFVT X1BBR0VfRkFVTFRfSVNfV1JJVEUgPyAid3JpdGUiIDogInJlYWQiLAorCQkJbGltYV9pcF9uYW1l KGlwKSk7CisJfQorCisJaWYgKHN0YXR1cyAmIExJTUFfTU1VX0lOVF9SRUFEX0JVU19FUlJPUikK KwkJZGV2X2VycihkZXYtPmRldiwgIm1tdSAlcyBpcnEgYnVzIGVycm9yXG4iLCBsaW1hX2lwX25h bWUoaXApKTsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYmVmb3JlIHJlc3VtZSAqLworCW1t dV93cml0ZShMSU1BX01NVV9JTlRfTUFTSywgMCk7CisJbW11X3dyaXRlKExJTUFfTU1VX0lOVF9D TEVBUiwgc3RhdHVzKTsKKworCXBpcGUgPSBkZXYtPnBpcGUgKyAoaXAtPmlkID09IGxpbWFfaXBf Z3BtbXUgPyBsaW1hX3BpcGVfZ3AgOiBsaW1hX3BpcGVfcHApOworCWxpbWFfc2NoZWRfcGlwZV9t bXVfZXJyb3IocGlwZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBsaW1hX21t dV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCkKK3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9 IGlwLT5kZXY7CisJaW50IGVycjsKKwl1MzIgdjsKKworCWlmIChpcC0+aWQgPT0gbGltYV9pcF9w cG1tdV9iY2FzdCkKKwkJcmV0dXJuIDA7CisKKwltbXVfd3JpdGUoTElNQV9NTVVfRFRFX0FERFIs IDB4Q0FGRUJBQkUpOworCWlmIChtbXVfcmVhZChMSU1BX01NVV9EVEVfQUREUikgIT0gMHhDQUZF QjAwMCkgeworCQlkZXZfZXJyKGRldi0+ZGV2LCAibW11ICVzIGR0ZSB3cml0ZSB0ZXN0IGZhaWxc biIsIGxpbWFfaXBfbmFtZShpcCkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltbXVfd3JpdGUo TElNQV9NTVVfQ09NTUFORCwgTElNQV9NTVVfQ09NTUFORF9IQVJEX1JFU0VUKTsKKwllcnIgPSBs aW1hX21tdV9zZW5kX2NvbW1hbmQoTElNQV9NTVVfQ09NTUFORF9IQVJEX1JFU0VULAorCQkJCSAg ICBMSU1BX01NVV9EVEVfQUREUiwgdiwgdiA9PSAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJy OworCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYtPmRldiwgaXAtPmlycSwgbGltYV9tbXVf aXJxX2hhbmRsZXIsCisJCQkgICAgICAgSVJRRl9TSEFSRUQsIGxpbWFfaXBfbmFtZShpcCksIGlw KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LT5kZXYsICJtbXUgJXMgZmFpbCB0byByZXF1 ZXN0IGlycVxuIiwgbGltYV9pcF9uYW1lKGlwKSk7CisJCXJldHVybiBlcnI7CisJfQorCisJbW11 X3dyaXRlKExJTUFfTU1VX0lOVF9NQVNLLCBMSU1BX01NVV9JTlRfUEFHRV9GQVVMVCB8IExJTUFf TU1VX0lOVF9SRUFEX0JVU19FUlJPUik7CisJbW11X3dyaXRlKExJTUFfTU1VX0RURV9BRERSLCBk ZXYtPmVtcHR5X3ZtLT5wZC5kbWEpOworCXJldHVybiBsaW1hX21tdV9zZW5kX2NvbW1hbmQoTElN QV9NTVVfQ09NTUFORF9FTkFCTEVfUEFHSU5HLAorCQkJCSAgICAgTElNQV9NTVVfU1RBVFVTLCB2 LAorCQkJCSAgICAgdiAmIExJTUFfTU1VX1NUQVRVU19QQUdJTkdfRU5BQkxFRCk7Cit9CisKK3Zv aWQgbGltYV9tbXVfZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisKK30KKwordm9pZCBsaW1h X21tdV9zd2l0Y2hfdm0oc3RydWN0IGxpbWFfaXAgKmlwLCBzdHJ1Y3QgbGltYV92bSAqdm0pCit7 CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCXUzMiB2OworCisJbGltYV9t bXVfc2VuZF9jb21tYW5kKExJTUFfTU1VX0NPTU1BTkRfRU5BQkxFX1NUQUxMLAorCQkJICAgICAg TElNQV9NTVVfU1RBVFVTLCB2LAorCQkJICAgICAgdiAmIExJTUFfTU1VX1NUQVRVU19TVEFMTF9B Q1RJVkUpOworCisJaWYgKHZtKQorCQltbXVfd3JpdGUoTElNQV9NTVVfRFRFX0FERFIsIHZtLT5w ZC5kbWEpOworCisJLyogZmx1c2ggdGhlIFRMQiAqLworCW1tdV93cml0ZShMSU1BX01NVV9DT01N QU5ELCBMSU1BX01NVV9DT01NQU5EX1pBUF9DQUNIRSk7CisKKwlsaW1hX21tdV9zZW5kX2NvbW1h bmQoTElNQV9NTVVfQ09NTUFORF9ESVNBQkxFX1NUQUxMLAorCQkJICAgICAgTElNQV9NTVVfU1RB VFVTLCB2LAorCQkJICAgICAgISh2ICYgTElNQV9NTVVfU1RBVFVTX1NUQUxMX0FDVElWRSkpOwor fQorCit2b2lkIGxpbWFfbW11X3BhZ2VfZmF1bHRfcmVzdW1lKHN0cnVjdCBsaW1hX2lwICppcCkK K3sKKwlzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldiA9IGlwLT5kZXY7CisJdTMyIHN0YXR1cyA9IG1t dV9yZWFkKExJTUFfTU1VX1NUQVRVUyk7CisJdTMyIHY7CisKKwlpZiAoc3RhdHVzICYgTElNQV9N TVVfU1RBVFVTX1BBR0VfRkFVTFRfQUNUSVZFKSB7CisJCWRldl9pbmZvKGRldi0+ZGV2LCAibW11 IHJlc3VtZVxuIik7CisKKwkJbW11X3dyaXRlKExJTUFfTU1VX0lOVF9NQVNLLCAwKTsKKwkJbW11 X3dyaXRlKExJTUFfTU1VX0RURV9BRERSLCAweENBRkVCQUJFKTsKKwkJbGltYV9tbXVfc2VuZF9j b21tYW5kKExJTUFfTU1VX0NPTU1BTkRfSEFSRF9SRVNFVCwKKwkJCQkgICAgICBMSU1BX01NVV9E VEVfQUREUiwgdiwgdiA9PSAwKTsKKwkJbW11X3dyaXRlKExJTUFfTU1VX0lOVF9NQVNLLCBMSU1B X01NVV9JTlRfUEFHRV9GQVVMVCB8IExJTUFfTU1VX0lOVF9SRUFEX0JVU19FUlJPUik7CisJCW1t dV93cml0ZShMSU1BX01NVV9EVEVfQUREUiwgZGV2LT5lbXB0eV92bS0+cGQuZG1hKTsKKwkJbGlt YV9tbXVfc2VuZF9jb21tYW5kKExJTUFfTU1VX0NPTU1BTkRfRU5BQkxFX1BBR0lORywKKwkJCQkg ICAgICBMSU1BX01NVV9TVEFUVVMsIHYsCisJCQkJICAgICAgdiAmIExJTUFfTU1VX1NUQVRVU19Q QUdJTkdfRU5BQkxFRCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9tbXUuaCBiL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfbW11LmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44Yzc4MzE5YmNjOGUKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX21tdS5oCkBAIC0wLDAgKzEsMTYgQEAKKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAqLworLyogQ29weXJpZ2h0 IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lmbmRlZiBfX0xJ TUFfTU1VX0hfXworI2RlZmluZSBfX0xJTUFfTU1VX0hfXworCitzdHJ1Y3QgbGltYV9pcDsKK3N0 cnVjdCBsaW1hX3ZtOworCitpbnQgbGltYV9tbXVfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwor dm9pZCBsaW1hX21tdV9maW5pKHN0cnVjdCBsaW1hX2lwICppcCk7CisKK3ZvaWQgbGltYV9tbXVf c3dpdGNoX3ZtKHN0cnVjdCBsaW1hX2lwICppcCwgc3RydWN0IGxpbWFfdm0gKnZtKTsKK3ZvaWQg bGltYV9tbXVfcGFnZV9mYXVsdF9yZXN1bWUoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworI2VuZGlm CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX29iamVjdC5jIGIvZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjVjNDFmODU5YTcyZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfb2JqZWN0LmMKQEAgLTAsMCArMSwxMjIgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyogQ29weXJpZ2h0IDIwMTgtMjAxOSBRaWFu ZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2luY2x1ZGUgPGRybS9kcm1fcHJpbWUuaD4K KyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcu aD4KKworI2luY2x1ZGUgImxpbWFfb2JqZWN0LmgiCisKK3ZvaWQgbGltYV9ib19kZXN0cm95KHN0 cnVjdCBsaW1hX2JvICpibykKK3sKKwlpZiAoYm8tPnNndCkgeworCQlrZnJlZShiby0+cGFnZXMp OworCQlkcm1fcHJpbWVfZ2VtX2Rlc3Ryb3koJmJvLT5nZW0sIGJvLT5zZ3QpOworCX0gZWxzZSB7 CisJCWlmIChiby0+cGFnZXNfZG1hX2FkZHIpIHsKKwkJCWludCBpLCBucGFnZXMgPSBiby0+Z2Vt LnNpemUgPj4gUEFHRV9TSElGVDsKKworCQkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7 CisJCQkJaWYgKGJvLT5wYWdlc19kbWFfYWRkcltpXSkKKwkJCQkJZG1hX3VubWFwX3BhZ2UoYm8t PmdlbS5kZXYtPmRldiwKKwkJCQkJCSAgICAgICBiby0+cGFnZXNfZG1hX2FkZHJbaV0sCisJCQkJ CQkgICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CisJCQl9CisJCX0KKworCQlp ZiAoYm8tPnBhZ2VzKQorCQkJZHJtX2dlbV9wdXRfcGFnZXMoJmJvLT5nZW0sIGJvLT5wYWdlcywg dHJ1ZSwgdHJ1ZSk7CisJfQorCisJa2ZyZWUoYm8tPnBhZ2VzX2RtYV9hZGRyKTsKKwlkcm1fZ2Vt X29iamVjdF9yZWxlYXNlKCZiby0+Z2VtKTsKKwlrZnJlZShibyk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgbGltYV9ibyAqbGltYV9ib19jcmVhdGVfc3RydWN0KHN0cnVjdCBsaW1hX2RldmljZSAqZGV2 LCB1MzIgc2l6ZSwgdTMyIGZsYWdzLAorCQkJCQkgICAgIHN0cnVjdCByZXNlcnZhdGlvbl9vYmpl Y3QgKnJlc3YpCit7CisJc3RydWN0IGxpbWFfYm8gKmJvOworCWludCBlcnI7CisKKwlzaXplID0g UEFHRV9BTElHTihzaXplKTsKKworCWJvID0ga3phbGxvYyhzaXplb2YoKmJvKSwgR0ZQX0tFUk5F TCk7CisJaWYgKCFibykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwltdXRleF9pbml0 KCZiby0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmJvLT52YSk7CisJYm8tPmdlbS5yZXN2ID0g cmVzdjsKKworCWVyciA9IGRybV9nZW1fb2JqZWN0X2luaXQoZGV2LT5kZGV2LCAmYm8tPmdlbSwg c2l6ZSk7CisJaWYgKGVycikgeworCQlrZnJlZShibyk7CisJCXJldHVybiBFUlJfUFRSKGVycik7 CisJfQorCisJcmV0dXJuIGJvOworfQorCitzdHJ1Y3QgbGltYV9ibyAqbGltYV9ib19jcmVhdGUo c3RydWN0IGxpbWFfZGV2aWNlICpkZXYsIHUzMiBzaXplLAorCQkJICAgICAgIHUzMiBmbGFncywg c3RydWN0IHNnX3RhYmxlICpzZ3QsCisJCQkgICAgICAgc3RydWN0IHJlc2VydmF0aW9uX29iamVj dCAqcmVzdikKK3sKKwlpbnQgaSwgZXJyOworCXNpemVfdCBucGFnZXM7CisJc3RydWN0IGxpbWFf Ym8gKmJvLCAqcmV0OworCisJYm8gPSBsaW1hX2JvX2NyZWF0ZV9zdHJ1Y3QoZGV2LCBzaXplLCBm bGFncywgcmVzdik7CisJaWYgKElTX0VSUihibykpCisJCXJldHVybiBibzsKKworCW5wYWdlcyA9 IGJvLT5nZW0uc2l6ZSA+PiBQQUdFX1NISUZUOworCisJYm8tPnBhZ2VzX2RtYV9hZGRyID0ga2Nh bGxvYyhucGFnZXMsIHNpemVvZihkbWFfYWRkcl90KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiby0+ cGFnZXNfZG1hX2FkZHIpIHsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBlcnJf b3V0OworCX0KKworCWlmIChzZ3QpIHsKKwkJYm8tPnNndCA9IHNndDsKKworCQliby0+cGFnZXMg PSBrY2FsbG9jKG5wYWdlcywgc2l6ZW9mKCpiby0+cGFnZXMpLCBHRlBfS0VSTkVMKTsKKwkJaWYg KCFiby0+cGFnZXMpIHsKKwkJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQlnb3RvIGVycl9v dXQ7CisJCX0KKworCQllcnIgPSBkcm1fcHJpbWVfc2dfdG9fcGFnZV9hZGRyX2FycmF5cygKKwkJ CXNndCwgYm8tPnBhZ2VzLCBiby0+cGFnZXNfZG1hX2FkZHIsIG5wYWdlcyk7CisJCWlmIChlcnIp IHsKKwkJCXJldCA9IEVSUl9QVFIoZXJyKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCX0gZWxz ZSB7CisJCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGJvLT5nZW0uZmlscC0+Zl9tYXBwaW5nLCBHRlBf RE1BMzIpOworCQliby0+cGFnZXMgPSBkcm1fZ2VtX2dldF9wYWdlcygmYm8tPmdlbSk7CisJCWlm IChJU19FUlIoYm8tPnBhZ2VzKSkgeworCQkJcmV0ID0gRVJSX0NBU1QoYm8tPnBhZ2VzKTsKKwkJ CWJvLT5wYWdlcyA9IE5VTEw7CisJCQlnb3RvIGVycl9vdXQ7CisJCX0KKworCQlmb3IgKGkgPSAw OyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJCWRtYV9hZGRyX3QgYWRkciA9IGRtYV9tYXBfcGFnZShk ZXYtPmRldiwgYm8tPnBhZ2VzW2ldLCAwLAorCQkJCQkJICAgICAgIFBBR0VfU0laRSwgRE1BX0JJ RElSRUNUSU9OQUwpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGRldi0+ZGV2LCBhZGRyKSkg eworCQkJCXJldCA9IEVSUl9QVFIoLUVGQVVMVCk7CisJCQkJZ290byBlcnJfb3V0OworCQkJfQor CQkJYm8tPnBhZ2VzX2RtYV9hZGRyW2ldID0gYWRkcjsKKwkJfQorCisJfQorCisJcmV0dXJuIGJv OworCitlcnJfb3V0OgorCWxpbWFfYm9fZGVzdHJveShibyk7CisJcmV0dXJuIHJldDsKK30KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfb2JqZWN0LmggYi9kcml2ZXJzL2dw dS9kcm0vbGltYS9saW1hX29iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNjczODcyNGFmYjdiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2xpbWEvbGltYV9vYmplY3QuaApAQCAtMCwwICsxLDM2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8qIENvcHlyaWdodCAyMDE4LTIwMTkgUWlhbmcg WXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpZm5kZWYgX19MSU1BX09CSkVDVF9IX18KKyNk ZWZpbmUgX19MSU1BX09CSkVDVF9IX18KKworI2luY2x1ZGUgPGRybS9kcm1fZ2VtLmg+CisKKyNp bmNsdWRlICJsaW1hX2RldmljZS5oIgorCitzdHJ1Y3QgbGltYV9ibyB7CisJc3RydWN0IGRybV9n ZW1fb2JqZWN0IGdlbTsKKworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJZG1hX2FkZHJfdCAqcGFn ZXNfZG1hX2FkZHI7CisJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CisJdm9pZCAqdmFkZHI7CisKKwlz dHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZhOworfTsKKworc3RhdGljIGlu bGluZSBzdHJ1Y3QgbGltYV9ibyAqCit0b19saW1hX2JvKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAq b2JqKQoreworCXJldHVybiBjb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgbGltYV9ibywgZ2VtKTsK K30KKworc3RydWN0IGxpbWFfYm8gKmxpbWFfYm9fY3JlYXRlKHN0cnVjdCBsaW1hX2RldmljZSAq ZGV2LCB1MzIgc2l6ZSwKKwkJCSAgICAgICB1MzIgZmxhZ3MsIHN0cnVjdCBzZ190YWJsZSAqc2d0 LAorCQkJICAgICAgIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlc3YpOwordm9pZCBsaW1h X2JvX2Rlc3Ryb3koc3RydWN0IGxpbWFfYm8gKmJvKTsKK3ZvaWQgKmxpbWFfYm9fdm1hcChzdHJ1 Y3QgbGltYV9ibyAqYm8pOwordm9pZCBsaW1hX2JvX3Z1bm1hcChzdHJ1Y3QgbGltYV9ibyAqYm8p OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9saW1hL2xpbWFfcG11LmMg Yi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMC4uNTcxZjZkNjYxNTgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuYwpAQCAtMCwwICsxLDYwIEBACisvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlh bmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4K KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgImxpbWFfZGV2aWNlLmgiCisj aW5jbHVkZSAibGltYV9wbXUuaCIKKyNpbmNsdWRlICJsaW1hX3JlZ3MuaCIKKworI2RlZmluZSBw bXVfd3JpdGUocmVnLCBkYXRhKSB3cml0ZWwoZGF0YSwgaXAtPmlvbWVtICsgcmVnKQorI2RlZmlu ZSBwbXVfcmVhZChyZWcpIHJlYWRsKGlwLT5pb21lbSArIHJlZykKKworc3RhdGljIGludCBsaW1h X3BtdV93YWl0X2NtZChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNl ICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7CisJdTMyIHY7CisKKwllcnIgPSByZWFkbF9wb2xs X3RpbWVvdXQoaXAtPmlvbWVtICsgTElNQV9QTVVfSU5UX1JBV1NUQVQsCisJCQkJIHYsIHYgJiBM SU1BX1BNVV9JTlRfQ01EX01BU0ssCisJCQkJIDEwMCwgMTAwMDAwKTsKKwlpZiAoZXJyKSB7CisJ CWRldl9lcnIoZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXQgcG1kIGNtZFxuIik7CisJCXJldHVybiBl cnI7CisJfQorCisJcG11X3dyaXRlKExJTUFfUE1VX0lOVF9DTEVBUiwgTElNQV9QTVVfSU5UX0NN RF9NQVNLKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGxpbWFfcG11X2luaXQoc3RydWN0IGxpbWFf aXAgKmlwKQoreworCWludCBlcnI7CisJdTMyIHN0YXQ7CisKKwlwbXVfd3JpdGUoTElNQV9QTVVf SU5UX01BU0ssIDApOworCisJLyogSWYgdGhpcyB2YWx1ZSBpcyB0b28gbG93LCB3aGVuIGluIGhp Z2ggR1BVIGNsayBmcmVxLAorCSAqIEdQVSB3aWxsIGJlIGluIHVuc3RhYmxlIHN0YXRlLgorCSAq LworCXBtdV93cml0ZShMSU1BX1BNVV9TV19ERUxBWSwgMHhmZmZmKTsKKworCS8qIHN0YXR1cyBy ZWcgMT1vZmYgMD1vbiAqLworCXN0YXQgPSBwbXVfcmVhZChMSU1BX1BNVV9TVEFUVVMpOworCisJ LyogcG93ZXIgdXAgYWxsIGlwICovCisJaWYgKHN0YXQpIHsKKwkJcG11X3dyaXRlKExJTUFfUE1V X1BPV0VSX1VQLCBzdGF0KTsKKwkJZXJyID0gbGltYV9wbXVfd2FpdF9jbWQoaXApOworCQlpZiAo ZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbGltYV9wbXVf ZmluaShzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9saW1hL2xpbWFfcG11LmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BtdS5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTJhMTg3NzVlYjA3Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9wbXUuaApAQCAtMCwwICsx LDEyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBPUiBNSVQgKi8KKy8q IENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFpbC5jb20+ICovCisKKyNp Zm5kZWYgX19MSU1BX1BNVV9IX18KKyNkZWZpbmUgX19MSU1BX1BNVV9IX18KKworc3RydWN0IGxp bWFfaXA7CisKK2ludCBsaW1hX3BtdV9pbml0KHN0cnVjdCBsaW1hX2lwICppcCk7Cit2b2lkIGxp bWFfcG11X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1h X3BwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kMjk3MjFlMTc3 YmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmMKQEAg LTAsMCArMSw0MjcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1J VAorLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8K KworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cisj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5j bHVkZSA8ZHJtL2xpbWFfZHJtLmg+CisKKyNpbmNsdWRlICJsaW1hX2RldmljZS5oIgorI2luY2x1 ZGUgImxpbWFfcHAuaCIKKyNpbmNsdWRlICJsaW1hX2RsYnUuaCIKKyNpbmNsdWRlICJsaW1hX2Jj YXN0LmgiCisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfcmVncy5oIgorCisj ZGVmaW5lIHBwX3dyaXRlKHJlZywgZGF0YSkgd3JpdGVsKGRhdGEsIGlwLT5pb21lbSArIHJlZykK KyNkZWZpbmUgcHBfcmVhZChyZWcpIHJlYWRsKGlwLT5pb21lbSArIHJlZykKKworc3RhdGljIHZv aWQgbGltYV9wcF9oYW5kbGVfaXJxKHN0cnVjdCBsaW1hX2lwICppcCwgdTMyIHN0YXRlKQorewor CXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9w aXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX3BwOworCisJaWYgKHN0YXRlICYgTElN QV9QUF9JUlFfTUFTS19FUlJPUikgeworCQl1MzIgc3RhdHVzID0gcHBfcmVhZChMSU1BX1BQX1NU QVRVUyk7CisKKwkJZGV2X2VycihkZXYtPmRldiwgInBwIGVycm9yIGlycSBzdGF0ZT0leCBzdGF0 dXM9JXhcbiIsCisJCQlzdGF0ZSwgc3RhdHVzKTsKKworCQlwaXBlLT5lcnJvciA9IHRydWU7CisK KwkJLyogbWFzayBhbGwgaW50ZXJydXB0cyBiZWZvcmUgaGFyZCByZXNldCAqLworCQlwcF93cml0 ZShMSU1BX1BQX0lOVF9NQVNLLCAwKTsKKwl9CisKKwlwcF93cml0ZShMSU1BX1BQX0lOVF9DTEVB Uiwgc3RhdGUpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbGltYV9wcF9pcnFfaGFuZGxlcihp bnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBsaW1hX2lwICppcCA9IGRhdGE7CisJc3Ry dWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUg KnBpcGUgPSBkZXYtPnBpcGUgKyBsaW1hX3BpcGVfcHA7CisJdTMyIHN0YXRlID0gcHBfcmVhZChM SU1BX1BQX0lOVF9TVEFUVVMpOworCisJLyogZm9yIHNoYXJlZCBpcnEgY2FzZSAqLworCWlmICgh c3RhdGUpCisJCXJldHVybiBJUlFfTk9ORTsKKworCWxpbWFfcHBfaGFuZGxlX2lycShpcCwgc3Rh dGUpOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBpcGUtPnRhc2spKQorCQlsaW1hX3Nj aGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitz dGF0aWMgaXJxcmV0dXJuX3QgbGltYV9wcF9iY2FzdF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkYXRhKQoreworCWludCBpOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCXN0cnVj dCBsaW1hX2lwICpwcF9iY2FzdCA9IGRhdGE7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBw cF9iY2FzdC0+ZGV2OworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPSBkZXYtPnBpcGUg KyBsaW1hX3BpcGVfcHA7CisJc3RydWN0IGRybV9saW1hX200NTBfcHBfZnJhbWUgKmZyYW1lID0g cGlwZS0+Y3VycmVudF90YXNrLT5mcmFtZTsKKworCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+bnVt X3BwOyBpKyspIHsKKwkJc3RydWN0IGxpbWFfaXAgKmlwID0gcGlwZS0+cHJvY2Vzc29yW2ldOwor CQl1MzIgc3RhdHVzLCBzdGF0ZTsKKworCQlpZiAocGlwZS0+ZG9uZSAmICgxIDw8IGkpKQorCQkJ Y29udGludWU7CisKKwkJLyogc3RhdHVzIHJlYWQgZmlyc3QgaW4gY2FzZSBpbnQgc3RhdGUgY2hh bmdlIGluIHRoZSBtaWRkbGUKKwkJICogd2hpY2ggbWF5IG1pc3MgdGhlIGludGVycnVwdCBoYW5k bGluZworCQkgKi8KKwkJc3RhdHVzID0gcHBfcmVhZChMSU1BX1BQX1NUQVRVUyk7CisJCXN0YXRl ID0gcHBfcmVhZChMSU1BX1BQX0lOVF9TVEFUVVMpOworCisJCWlmIChzdGF0ZSkgeworCQkJbGlt YV9wcF9oYW5kbGVfaXJxKGlwLCBzdGF0ZSk7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKKwkJfSBl bHNlIHsKKwkJCWlmIChzdGF0dXMgJiBMSU1BX1BQX1NUQVRVU19SRU5ERVJJTkdfQUNUSVZFKQor CQkJCWNvbnRpbnVlOworCQl9CisKKwkJcGlwZS0+ZG9uZSB8PSAoMSA8PCBpKTsKKwkJaWYgKGF0 b21pY19kZWNfYW5kX3Rlc3QoJnBpcGUtPnRhc2spKQorCQkJbGltYV9zY2hlZF9waXBlX3Rhc2tf ZG9uZShwaXBlKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBsaW1hX3Bw X3NvZnRfcmVzZXRfYXN5bmMoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCWlmIChpcC0+ZGF0YS5h c3luY19yZXNldCkKKwkJcmV0dXJuOworCisJcHBfd3JpdGUoTElNQV9QUF9JTlRfTUFTSywgMCk7 CisJcHBfd3JpdGUoTElNQV9QUF9JTlRfUkFXU1RBVCwgTElNQV9QUF9JUlFfTUFTS19BTEwpOwor CXBwX3dyaXRlKExJTUFfUFBfQ1RSTCwgTElNQV9QUF9DVFJMX1NPRlRfUkVTRVQpOworCWlwLT5k YXRhLmFzeW5jX3Jlc2V0ID0gdHJ1ZTsKK30KKworc3RhdGljIGludCBsaW1hX3BwX3NvZnRfcmVz ZXRfcG9sbChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJcmV0dXJuICEocHBfcmVhZChMSU1BX1BQ X1NUQVRVUykgJiBMSU1BX1BQX1NUQVRVU19SRU5ERVJJTkdfQUNUSVZFKSAmJgorCQlwcF9yZWFk KExJTUFfUFBfSU5UX1JBV1NUQVQpID09IExJTUFfUFBfSVJRX1JFU0VUX0NPTVBMRVRFRDsKK30K Kworc3RhdGljIGludCBsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdF9vbmUoc3RydWN0IGxp bWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQg cmV0OworCisJcmV0ID0gbGltYV9wb2xsX3RpbWVvdXQoaXAsIGxpbWFfcHBfc29mdF9yZXNldF9w b2xsLCAwLCAxMDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgInBwICVzIHJl c2V0IHRpbWUgb3V0XG4iLCBsaW1hX2lwX25hbWUoaXApKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlwcF93cml0ZShMSU1BX1BQX0lOVF9DTEVBUiwgTElNQV9QUF9JUlFfTUFTS19BTEwpOworCXBw X3dyaXRlKExJTUFfUFBfSU5UX01BU0ssIExJTUFfUFBfSVJRX01BU0tfVVNFRCk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbGltYV9wcF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXQoc3RydWN0 IGxpbWFfaXAgKmlwKQoreworCWludCBpLCBlcnIgPSAwOworCisJaWYgKCFpcC0+ZGF0YS5hc3lu Y19yZXNldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXAtPmlkID09IGxpbWFfaXBfcHBfYmNhc3Qp IHsKKwkJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCQlzdHJ1Y3QgbGltYV9z Y2hlZF9waXBlICpwaXBlID0gZGV2LT5waXBlICsgbGltYV9waXBlX3BwOworCQlzdHJ1Y3QgZHJt X2xpbWFfbTQ1MF9wcF9mcmFtZSAqZnJhbWUgPSBwaXBlLT5jdXJyZW50X3Rhc2stPmZyYW1lOwor CisJCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+bnVtX3BwOyBpKyspCisJCQllcnIgfD0gbGltYV9w cF9zb2Z0X3Jlc2V0X2FzeW5jX3dhaXRfb25lKHBpcGUtPnByb2Nlc3NvcltpXSk7CisJfSBlbHNl CisJCWVyciA9IGxpbWFfcHBfc29mdF9yZXNldF9hc3luY193YWl0X29uZShpcCk7CisKKwlpcC0+ ZGF0YS5hc3luY19yZXNldCA9IGZhbHNlOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lk IGxpbWFfcHBfd3JpdGVfZnJhbWUoc3RydWN0IGxpbWFfaXAgKmlwLCB1MzIgKmZyYW1lLCB1MzIg KndiKQoreworCWludCBpLCBqLCBuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBMSU1BX1BQX0ZS QU1FX1JFR19OVU07IGkrKykKKwkJd3JpdGVsKGZyYW1lW2ldLCBpcC0+aW9tZW0gKyBMSU1BX1BQ X0ZSQU1FICsgaSAqIDQpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlmb3IgKGog PSAwOyBqIDwgTElNQV9QUF9XQl9SRUdfTlVNOyBqKyspCisJCQl3cml0ZWwod2JbbisrXSwgaXAt PmlvbWVtICsgTElNQV9QUF9XQihpKSArIGogKiA0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGlt YV9wcF9oYXJkX3Jlc2V0X3BvbGwoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXBwX3dyaXRlKExJ TUFfUFBfUEVSRl9DTlRfMF9MSU1JVCwgMHhDMDFBMDAwMCk7CisJcmV0dXJuIHBwX3JlYWQoTElN QV9QUF9QRVJGX0NOVF8wX0xJTUlUKSA9PSAweEMwMUEwMDAwOworfQorCitzdGF0aWMgaW50IGxp bWFfcHBfaGFyZF9yZXNldChzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2 aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCByZXQ7CisKKwlwcF93cml0ZShMSU1BX1BQX1BFUkZf Q05UXzBfTElNSVQsIDB4QzBGRkUwMDApOworCXBwX3dyaXRlKExJTUFfUFBfSU5UX01BU0ssIDAp OworCXBwX3dyaXRlKExJTUFfUFBfQ1RSTCwgTElNQV9QUF9DVFJMX0ZPUkNFX1JFU0VUKTsKKwly ZXQgPSBsaW1hX3BvbGxfdGltZW91dChpcCwgbGltYV9wcF9oYXJkX3Jlc2V0X3BvbGwsIDEwLCAx MDApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgInBwIGhhcmQgcmVzZXQgdGlt ZW91dFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcHBfd3JpdGUoTElNQV9QUF9QRVJGX0NO VF8wX0xJTUlULCAwKTsKKwlwcF93cml0ZShMSU1BX1BQX0lOVF9DTEVBUiwgTElNQV9QUF9JUlFf TUFTS19BTEwpOworCXBwX3dyaXRlKExJTUFfUFBfSU5UX01BU0ssIExJTUFfUFBfSVJRX01BU0tf VVNFRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxpbWFfcHBfcHJpbnRfdmVyc2lv bihzdHJ1Y3QgbGltYV9pcCAqaXApCit7CisJdTMyIHZlcnNpb24sIG1ham9yLCBtaW5vcjsKKwlj aGFyICpuYW1lOworCisJdmVyc2lvbiA9IHBwX3JlYWQoTElNQV9QUF9WRVJTSU9OKTsKKwltYWpv ciA9ICh2ZXJzaW9uID4+IDgpICYgMHhGRjsKKwltaW5vciA9IHZlcnNpb24gJiAweEZGOworCXN3 aXRjaCAodmVyc2lvbiA+PiAxNikgeworCWNhc2UgMHhDODA3OgorCSAgICBuYW1lID0gIm1hbGky MDAiOworCQlicmVhazsKKwljYXNlIDB4Q0UwNzoKKwkJbmFtZSA9ICJtYWxpMzAwIjsKKwkJYnJl YWs7CisJY2FzZSAweENEMDc6CisJCW5hbWUgPSAibWFsaTQwMCI7CisJCWJyZWFrOworCWNhc2Ug MHhDRjA3OgorCQluYW1lID0gIm1hbGk0NTAiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQluYW1l ID0gInVua25vd24iOworCQlicmVhazsKKwl9CisJZGV2X2luZm8oaXAtPmRldi0+ZGV2LCAiJXMg LSAlcyB2ZXJzaW9uIG1ham9yICVkIG1pbm9yICVkXG4iLAorCQkgbGltYV9pcF9uYW1lKGlwKSwg bmFtZSwgbWFqb3IsIG1pbm9yKTsKK30KKworaW50IGxpbWFfcHBfaW5pdChzdHJ1Y3QgbGltYV9p cCAqaXApCit7CisJc3RydWN0IGxpbWFfZGV2aWNlICpkZXYgPSBpcC0+ZGV2OworCWludCBlcnI7 CisKKwlsaW1hX3BwX3ByaW50X3ZlcnNpb24oaXApOworCisJaXAtPmRhdGEuYXN5bmNfcmVzZXQg PSBmYWxzZTsKKwlsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmMoaXApOworCWVyciA9IGxpbWFfcHBf c29mdF9yZXNldF9hc3luY193YWl0KGlwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJ ZXJyID0gZGV2bV9yZXF1ZXN0X2lycShkZXYtPmRldiwgaXAtPmlycSwgbGltYV9wcF9pcnFfaGFu ZGxlciwKKwkJCSAgICAgICBJUlFGX1NIQVJFRCwgbGltYV9pcF9uYW1lKGlwKSwgaXApOworCWlm IChlcnIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgInBwICVzIGZhaWwgdG8gcmVxdWVzdCBpcnFc biIsCisJCQlsaW1hX2lwX25hbWUoaXApKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlkZXYtPnBw X3ZlcnNpb24gPSBwcF9yZWFkKExJTUFfUFBfVkVSU0lPTik7CisKKwlyZXR1cm4gMDsKK30KKwor dm9pZCBsaW1hX3BwX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCit9CisKK2ludCBsaW1h X3BwX2JjYXN0X2luaXQoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCXN0cnVjdCBsaW1hX2Rldmlj ZSAqZGV2ID0gaXAtPmRldjsKKwlpbnQgZXJyOworCisJZXJyID0gZGV2bV9yZXF1ZXN0X2lycShk ZXYtPmRldiwgaXAtPmlycSwgbGltYV9wcF9iY2FzdF9pcnFfaGFuZGxlciwKKwkJCSAgICAgICBJ UlFGX1NIQVJFRCwgbGltYV9pcF9uYW1lKGlwKSwgaXApOworCWlmIChlcnIpIHsKKwkJZGV2X2Vy cihkZXYtPmRldiwgInBwICVzIGZhaWwgdG8gcmVxdWVzdCBpcnFcbiIsCisJCQlsaW1hX2lwX25h bWUoaXApKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1h X3BwX2JjYXN0X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKQoreworCit9CisKK3N0YXRpYyBpbnQg bGltYV9wcF90YXNrX3ZhbGlkYXRlKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkJ IHN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2spCit7CisJdTMyIG51bV9wcDsKKworCWlmIChw aXBlLT5iY2FzdF9wcm9jZXNzb3IpIHsKKwkJc3RydWN0IGRybV9saW1hX200NTBfcHBfZnJhbWUg KmYgPSB0YXNrLT5mcmFtZTsKKworCQludW1fcHAgPSBmLT5udW1fcHA7CisKKwkJaWYgKGYtPl9w YWQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgZHJtX2xpbWFfbTQw MF9wcF9mcmFtZSAqZiA9IHRhc2stPmZyYW1lOworCisJCW51bV9wcCA9IGYtPm51bV9wcDsKKwl9 CisKKwlpZiAobnVtX3BwID09IDAgfHwgbnVtX3BwID4gcGlwZS0+bnVtX3Byb2Nlc3NvcikKKwkJ cmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGltYV9wcF90 YXNrX3J1bihzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJICAgICBzdHJ1Y3QgbGlt YV9zY2hlZF90YXNrICp0YXNrKQoreworCWlmIChwaXBlLT5iY2FzdF9wcm9jZXNzb3IpIHsKKwkJ c3RydWN0IGRybV9saW1hX200NTBfcHBfZnJhbWUgKmZyYW1lID0gdGFzay0+ZnJhbWU7CisJCXN0 cnVjdCBsaW1hX2RldmljZSAqZGV2ID0gcGlwZS0+YmNhc3RfcHJvY2Vzc29yLT5kZXY7CisJCXN0 cnVjdCBsaW1hX2lwICppcCA9IHBpcGUtPmJjYXN0X3Byb2Nlc3NvcjsKKwkJaW50IGk7CisKKwkJ cGlwZS0+ZG9uZSA9IDA7CisJCWF0b21pY19zZXQoJnBpcGUtPnRhc2ssIGZyYW1lLT5udW1fcHAp OworCisJCWlmIChmcmFtZS0+dXNlX2RsYnUpIHsKKwkJCWxpbWFfZGxidV9lbmFibGUoZGV2LCBm cmFtZS0+bnVtX3BwKTsKKworCQkJZnJhbWUtPmZyYW1lW0xJTUFfUFBfRlJBTUUgPj4gMl0gPSBM SU1BX1ZBX1JFU0VSVkVfRExCVTsKKwkJCWxpbWFfZGxidV9zZXRfcmVnKGRldi0+aXAgKyBsaW1h X2lwX2RsYnUsIGZyYW1lLT5kbGJ1X3JlZ3MpOworCQl9IGVsc2UKKwkJCWxpbWFfZGxidV9kaXNh YmxlKGRldik7CisKKwkJbGltYV9iY2FzdF9lbmFibGUoZGV2LCBmcmFtZS0+bnVtX3BwKTsKKwor CQlsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7CisKKwkJbGltYV9wcF93cml0ZV9m cmFtZShpcCwgZnJhbWUtPmZyYW1lLCBmcmFtZS0+d2IpOworCisJCWZvciAoaSA9IDA7IGkgPCBm cmFtZS0+bnVtX3BwOyBpKyspIHsKKwkJCXN0cnVjdCBsaW1hX2lwICppcCA9IHBpcGUtPnByb2Nl c3NvcltpXTsKKworCQkJcHBfd3JpdGUoTElNQV9QUF9TVEFDSywgZnJhbWUtPmZyYWdtZW50X3N0 YWNrX2FkZHJlc3NbaV0pOworCQkJaWYgKCFmcmFtZS0+dXNlX2RsYnUpCisJCQkJcHBfd3JpdGUo TElNQV9QUF9GUkFNRSwgZnJhbWUtPnBsYnVfYXJyYXlfYWRkcmVzc1tpXSk7CisJCX0KKworCQlw cF93cml0ZShMSU1BX1BQX0NUUkwsIExJTUFfUFBfQ1RSTF9TVEFSVF9SRU5ERVJJTkcpOworCX0g ZWxzZSB7CisJCXN0cnVjdCBkcm1fbGltYV9tNDAwX3BwX2ZyYW1lICpmcmFtZSA9IHRhc2stPmZy YW1lOworCQlpbnQgaTsKKworCQlhdG9taWNfc2V0KCZwaXBlLT50YXNrLCBmcmFtZS0+bnVtX3Bw KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPm51bV9wcDsgaSsrKSB7CisJCQlzdHJ1Y3Qg bGltYV9pcCAqaXAgPSBwaXBlLT5wcm9jZXNzb3JbaV07CisKKwkJCWZyYW1lLT5mcmFtZVtMSU1B X1BQX0ZSQU1FID4+IDJdID0KKwkJCQlmcmFtZS0+cGxidV9hcnJheV9hZGRyZXNzW2ldOworCQkJ ZnJhbWUtPmZyYW1lW0xJTUFfUFBfU1RBQ0sgPj4gMl0gPQorCQkJCWZyYW1lLT5mcmFnbWVudF9z dGFja19hZGRyZXNzW2ldOworCisJCQlsaW1hX3BwX3NvZnRfcmVzZXRfYXN5bmNfd2FpdChpcCk7 CisKKwkJCWxpbWFfcHBfd3JpdGVfZnJhbWUoaXAsIGZyYW1lLT5mcmFtZSwgZnJhbWUtPndiKTsK KworCQkJcHBfd3JpdGUoTElNQV9QUF9DVFJMLCBMSU1BX1BQX0NUUkxfU1RBUlRfUkVOREVSSU5H KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbGltYV9wcF90YXNrX2Zpbmkoc3RydWN0IGxp bWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlpZiAocGlwZS0+YmNhc3RfcHJvY2Vzc29yKQorCQls aW1hX3BwX3NvZnRfcmVzZXRfYXN5bmMocGlwZS0+YmNhc3RfcHJvY2Vzc29yKTsKKwllbHNlIHsK KwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9wcm9jZXNzb3I7IGkrKykK KwkJCWxpbWFfcHBfc29mdF9yZXNldF9hc3luYyhwaXBlLT5wcm9jZXNzb3JbaV0pOworCX0KK30K Kworc3RhdGljIHZvaWQgbGltYV9wcF90YXNrX2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUg KnBpcGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGlwZS0+bnVtX3Byb2Nlc3Nv cjsgaSsrKSB7CisJCXN0cnVjdCBsaW1hX2lwICppcCA9IHBpcGUtPnByb2Nlc3NvcltpXTsKKwor CQlkZXZfZXJyKGlwLT5kZXYtPmRldiwgInBwIHRhc2sgZXJyb3IgJWQgaW50X3N0YXRlPSV4IHN0 YXR1cz0leFxuIiwKKwkJCWksIHBwX3JlYWQoTElNQV9QUF9JTlRfU1RBVFVTKSwgcHBfcmVhZChM SU1BX1BQX1NUQVRVUykpOworCisJCWxpbWFfcHBfaGFyZF9yZXNldChpcCk7CisJfQorfQorCitz dGF0aWMgdm9pZCBsaW1hX3BwX3Rhc2tfbW11X2Vycm9yKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUg KnBpcGUpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBpcGUtPnRhc2spKQorCQlsaW1h X3NjaGVkX3BpcGVfdGFza19kb25lKHBpcGUpOworfQorCitzdGF0aWMgc3RydWN0IGttZW1fY2Fj aGUgKmxpbWFfcHBfdGFza19zbGFiOworc3RhdGljIGludCBsaW1hX3BwX3Rhc2tfc2xhYl9yZWZj bnQ7CisKK2ludCBsaW1hX3BwX3BpcGVfaW5pdChzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sK KwlpbnQgZnJhbWVfc2l6ZTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gZGV2LT5w aXBlICsgbGltYV9waXBlX3BwOworCisJaWYgKGRldi0+aWQgPT0gbGltYV9ncHVfbWFsaTQwMCkK KwkJZnJhbWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZHJtX2xpbWFfbTQwMF9wcF9mcmFtZSk7CisJ ZWxzZQorCQlmcmFtZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1fbGltYV9tNDUwX3BwX2ZyYW1l KTsKKworCWlmICghbGltYV9wcF90YXNrX3NsYWIpIHsKKwkJbGltYV9wcF90YXNrX3NsYWIgPSBr bWVtX2NhY2hlX2NyZWF0ZV91c2VyY29weSgKKwkJCSJsaW1hX3BwX3Rhc2siLCBzaXplb2Yoc3Ry dWN0IGxpbWFfc2NoZWRfdGFzaykgKyBmcmFtZV9zaXplLAorCQkJMCwgU0xBQl9IV0NBQ0hFX0FM SUdOLCBzaXplb2Yoc3RydWN0IGxpbWFfc2NoZWRfdGFzayksCisJCQlmcmFtZV9zaXplLCBOVUxM KTsKKwkJaWYgKCFsaW1hX3BwX3Rhc2tfc2xhYikKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwls aW1hX3BwX3Rhc2tfc2xhYl9yZWZjbnQrKzsKKworCXBpcGUtPmZyYW1lX3NpemUgPSBmcmFtZV9z aXplOworCXBpcGUtPnRhc2tfc2xhYiA9IGxpbWFfcHBfdGFza19zbGFiOworCisJcGlwZS0+dGFz a192YWxpZGF0ZSA9IGxpbWFfcHBfdGFza192YWxpZGF0ZTsKKwlwaXBlLT50YXNrX3J1biA9IGxp bWFfcHBfdGFza19ydW47CisJcGlwZS0+dGFza19maW5pID0gbGltYV9wcF90YXNrX2Zpbmk7CisJ cGlwZS0+dGFza19lcnJvciA9IGxpbWFfcHBfdGFza19lcnJvcjsKKwlwaXBlLT50YXNrX21tdV9l cnJvciA9IGxpbWFfcHBfdGFza19tbXVfZXJyb3I7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBs aW1hX3BwX3BpcGVfZmluaShzdHJ1Y3QgbGltYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIS0tbGlt YV9wcF90YXNrX3NsYWJfcmVmY250KSB7CisJCWttZW1fY2FjaGVfZGVzdHJveShsaW1hX3BwX3Rh c2tfc2xhYik7CisJCWxpbWFfcHBfdGFza19zbGFiID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9s aW1hX3BwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iZjYwYzc3 YjI2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3BwLmgK QEAgLTAsMCArMSwxOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1Ig TUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29t PiAqLworCisjaWZuZGVmIF9fTElNQV9QUF9IX18KKyNkZWZpbmUgX19MSU1BX1BQX0hfXworCitz dHJ1Y3QgbGltYV9pcDsKK3N0cnVjdCBsaW1hX2RldmljZTsKKworaW50IGxpbWFfcHBfaW5pdChz dHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBsaW1hX3BwX2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlw KTsKKworaW50IGxpbWFfcHBfYmNhc3RfaW5pdChzdHJ1Y3QgbGltYV9pcCAqaXApOwordm9pZCBs aW1hX3BwX2JjYXN0X2Zpbmkoc3RydWN0IGxpbWFfaXAgKmlwKTsKKworaW50IGxpbWFfcHBfcGlw ZV9pbml0KHN0cnVjdCBsaW1hX2RldmljZSAqZGV2KTsKK3ZvaWQgbGltYV9wcF9waXBlX2Zpbmko c3RydWN0IGxpbWFfZGV2aWNlICpkZXYpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9saW1hL2xpbWFfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9yZWdz LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hY2U4ZWNlZmJlOTAK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3JlZ3MuaApAQCAt MCwwICsxLDI5OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8q IENvcHlyaWdodCAyMDEwLTIwMTcgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KiBDb3B5cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPgorICovCisK KyNpZm5kZWYgX19MSU1BX1JFR1NfSF9fCisjZGVmaW5lIF9fTElNQV9SRUdTX0hfXworCisvKiBU aGlzIGZpbGUncyByZWdpc3RlciBkZWZpbml0aW9uIGlzIGNvbGxlY3RlZCBmcm9tIHRoZQorICog b2ZmaWNpYWwgQVJNIE1hbGkgVXRnYXJkIEdQVSBrZXJuZWwgZHJpdmVyIHNvdXJjZSBjb2RlCisg Ki8KKworLyogUE1VIHJlZ3MgKi8KKyNkZWZpbmUgTElNQV9QTVVfUE9XRVJfVVAgICAgICAgICAg ICAgICAgICAweDAwCisjZGVmaW5lIExJTUFfUE1VX1BPV0VSX0RPV04gICAgICAgICAgICAgICAg MHgwNAorI2RlZmluZSAgIExJTUFfUE1VX1BPV0VSX0dQMF9NQVNLICAgICAgICAgIEJJVCgwKQor I2RlZmluZSAgIExJTUFfUE1VX1BPV0VSX0wyX01BU0sgICAgICAgICAgIEJJVCgxKQorI2RlZmlu ZSAgIExJTUFfUE1VX1BPV0VSX1BQX01BU0soaSkgICAgICAgIEJJVCgyICsgaSkKKworLyoKKyAq IE9uIE1hbGk0NTAgZWFjaCBibG9jayBhdXRvbWF0aWNhbGx5IHN0YXJ0cyB1cCBpdHMgY29ycmVz cG9uZGluZyBMMgorICogYW5kIHRoZSBQUHMgYXJlIG5vdCBmdWxseSBpbmRlcGVuZGVudCBjb250 cm9sbGFibGUuCisgKiBJbnN0ZWFkIFBQMCwgUFAxLTMgYW5kIFBQNC03IGNhbiBiZSB0dXJuZWQg b24gb3Igb2ZmLgorICovCisjZGVmaW5lICAgTElNQTQ1MF9QTVVfUE9XRVJfUFAwX01BU0sgICAg ICAgQklUKDEpCisjZGVmaW5lICAgTElNQTQ1MF9QTVVfUE9XRVJfUFAxM19NQVNLICAgICAgQklU KDIpCisjZGVmaW5lICAgTElNQTQ1MF9QTVVfUE9XRVJfUFA0N19NQVNLICAgICAgQklUKDMpCisK KyNkZWZpbmUgTElNQV9QTVVfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5l IExJTUFfUE1VX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwQworI2RlZmluZSBMSU1BX1BN VV9JTlRfUkFXU1RBVCAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgTElNQV9QTVVfSU5UX0NM RUFSICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lICAgTElNQV9QTVVfSU5UX0NNRF9NQVNL ICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIExJTUFfUE1VX1NXX0RFTEFZICAgICAgICAgICAg ICAgICAgMHgxQworCisvKiBMMiBjYWNoZSByZWdzICovCisjZGVmaW5lIExJTUFfTDJfQ0FDSEVf U0laRSAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9TVEFU VVMgICAgICAgICAgICAgICAgIDB4MDAwOAorI2RlZmluZSAgIExJTUFfTDJfQ0FDSEVfU1RBVFVT X0NPTU1BTkRfQlVTWSAgQklUKDApCisjZGVmaW5lICAgTElNQV9MMl9DQUNIRV9TVEFUVVNfREFU QV9CVVNZICAgICBCSVQoMSkKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9DT01NQU5EICAgICAgICAg ICAgICAgIDB4MDAxMAorI2RlZmluZSAgIExJTUFfTDJfQ0FDSEVfQ09NTUFORF9DTEVBUl9BTEwg ICAgQklUKDApCisjZGVmaW5lIExJTUFfTDJfQ0FDSEVfQ0xFQVJfUEFHRSAgICAgICAgICAgICAw eDAwMTQKKyNkZWZpbmUgTElNQV9MMl9DQUNIRV9NQVhfUkVBRFMgICAgICAgICAgICAgIDB4MDAx OAorI2RlZmluZSBMSU1BX0wyX0NBQ0hFX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDFDCisj ZGVmaW5lICAgTElNQV9MMl9DQUNIRV9FTkFCTEVfQUNDRVNTICAgICAgICBCSVQoMCkKKyNkZWZp bmUgICBMSU1BX0wyX0NBQ0hFX0VOQUJMRV9SRUFEX0FMTE9DQVRFIEJJVCgxKQorI2RlZmluZSBM SU1BX0wyX0NBQ0hFX1BFUkZDTlRfU1JDMCAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIExJTUFf TDJfQ0FDSEVfUEVSRkNOVF9WQUwwICAgICAgICAgICAweDAwMjQKKyNkZWZpbmUgTElNQV9MMl9D QUNIRV9QRVJGQ05UX1NSQzEgICAgICAgICAgIDB4MDAyOAorI2RlZmluZSBMSU1BX0wyX0NBQ0hF X0VSRkNOVF9WQUwxICAgICAgICAgICAgMHgwMDJDCisKKy8qIEdQIHJlZ3MgKi8KKyNkZWZpbmUg TElNQV9HUF9WU0NMX1NUQVJUX0FERFIgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBMSU1B X0dQX1ZTQ0xfRU5EX0FERFIgICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIExJTUFfR1Bf UExCVUNMX1NUQVJUX0FERFIgICAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTElNQV9HUF9QTEJV Q0xfRU5EX0FERFIgICAgICAgICAgICAgICAgMHgwYworI2RlZmluZSBMSU1BX0dQX1BMQlVfQUxM T0NfU1RBUlRfQUREUiAgICAgICAgICAweDEwCisjZGVmaW5lIExJTUFfR1BfUExCVV9BTExPQ19F TkRfQUREUiAgICAgICAgICAgIDB4MTQKKyNkZWZpbmUgTElNQV9HUF9DTUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSAgIExJTUFfR1BfQ01EX1NUQVJUX1ZTICAgICAg ICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX0dQX0NNRF9TVEFSVF9QTEJVICAgICAg ICAgICAgICAgQklUKDEpCisjZGVmaW5lICAgTElNQV9HUF9DTURfVVBEQVRFX1BMQlVfQUxMT0Mg ICAgICAgIEJJVCg0KQorI2RlZmluZSAgIExJTUFfR1BfQ01EX1JFU0VUICAgICAgICAgICAgICAg ICAgICBCSVQoNSkKKyNkZWZpbmUgICBMSU1BX0dQX0NNRF9GT1JDRV9IQU5HICAgICAgICAgICAg ICAgQklUKDYpCisjZGVmaW5lICAgTElNQV9HUF9DTURfU1RPUF9CVVMgICAgICAgICAgICAgICAg IEJJVCg5KQorI2RlZmluZSAgIExJTUFfR1BfQ01EX1NPRlRfUkVTRVQgICAgICAgICAgICAgICBC SVQoMTApCisjZGVmaW5lIExJTUFfR1BfSU5UX1JBV1NUQVQgICAgICAgICAgICAgICAgICAgIDB4 MjQKKyNkZWZpbmUgTElNQV9HUF9JTlRfQ0xFQVIgICAgICAgICAgICAgICAgICAgICAgMHgyOAor I2RlZmluZSBMSU1BX0dQX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAweDJDCisjZGVm aW5lIExJTUFfR1BfSU5UX1NUQVQgICAgICAgICAgICAgICAgICAgICAgIDB4MzAKKyNkZWZpbmUg ICBMSU1BX0dQX0lSUV9WU19FTkRfQ01EX0xTVCAgICAgICAgICAgQklUKDApCisjZGVmaW5lICAg TElNQV9HUF9JUlFfUExCVV9FTkRfQ01EX0xTVCAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgIExJ TUFfR1BfSVJRX1BMQlVfT1VUX09GX01FTSAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1B X0dQX0lSUV9WU19TRU1fSVJRICAgICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9H UF9JUlFfUExCVV9TRU1fSVJRICAgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSAgIExJTUFfR1Bf SVJRX0hBTkcgICAgICAgICAgICAgICAgICAgICBCSVQoNSkKKyNkZWZpbmUgICBMSU1BX0dQX0lS UV9GT1JDRV9IQU5HICAgICAgICAgICAgICAgQklUKDYpCisjZGVmaW5lICAgTElNQV9HUF9JUlFf UEVSRl9DTlRfMF9MSU1JVCAgICAgICAgIEJJVCg3KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1BF UkZfQ05UXzFfTElNSVQgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9XUklU RV9CT1VORF9FUlIgICAgICAgICAgQklUKDkpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfU1lOQ19F UlJPUiAgICAgICAgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9BWElfQlVT X0VSUk9SICAgICAgICAgICAgQklUKDExKQorI2RlZmluZSAgIExJTUFfR1BfSVJRX0FYSV9CVVNf U1RPUFBFRCAgICAgICAgICBCSVQoMTIpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfVlNfSU5WQUxJ RF9DTUQgICAgICAgICAgIEJJVCgxMykKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9QTEJfSU5WQUxJ RF9DTUQgICAgICAgICAgQklUKDE0KQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1JFU0VUX0NPTVBM RVRFRCAgICAgICAgICBCSVQoMTkpCisjZGVmaW5lICAgTElNQV9HUF9JUlFfU0VNQVBIT1JFX1VO REVSRkxPVyAgICAgIEJJVCgyMCkKKyNkZWZpbmUgICBMSU1BX0dQX0lSUV9TRU1BUEhPUkVfT1ZF UkZMT1cgICAgICAgQklUKDIxKQorI2RlZmluZSAgIExJTUFfR1BfSVJRX1BUUl9BUlJBWV9PVVRf T0ZfQk9VTkRTICBCSVQoMjIpCisjZGVmaW5lIExJTUFfR1BfV1JJVEVfQk9VTkRfTE9XICAgICAg ICAgICAgICAgIDB4MzQKKyNkZWZpbmUgTElNQV9HUF9QRVJGX0NOVF8wX0VOQUJMRSAgICAgICAg ICAgICAgMHgzQworI2RlZmluZSBMSU1BX0dQX1BFUkZfQ05UXzFfRU5BQkxFICAgICAgICAgICAg ICAweDQwCisjZGVmaW5lIExJTUFfR1BfUEVSRl9DTlRfMF9TUkMgICAgICAgICAgICAgICAgIDB4 NDQKKyNkZWZpbmUgTElNQV9HUF9QRVJGX0NOVF8xX1NSQyAgICAgICAgICAgICAgICAgMHg0OAor I2RlZmluZSBMSU1BX0dQX1BFUkZfQ05UXzBfVkFMVUUgICAgICAgICAgICAgICAweDRDCisjZGVm aW5lIExJTUFfR1BfUEVSRl9DTlRfMV9WQUxVRSAgICAgICAgICAgICAgIDB4NTAKKyNkZWZpbmUg TElNQV9HUF9QRVJGX0NOVF8wX0xJTUlUICAgICAgICAgICAgICAgMHg1NAorI2RlZmluZSBMSU1B X0dQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAweDY4CisjZGVmaW5lICAgTElNQV9H UF9TVEFUVVNfVlNfQUNUSVZFICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSAgIExJTUFfR1Bf U1RBVFVTX0JVU19TVE9QUEVEICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgICBMSU1BX0dQX1NU QVRVU19QTEJVX0FDVElWRSAgICAgICAgICAgQklUKDMpCisjZGVmaW5lICAgTElNQV9HUF9TVEFU VVNfQlVTX0VSUk9SICAgICAgICAgICAgIEJJVCg2KQorI2RlZmluZSAgIExJTUFfR1BfU1RBVFVT X1dSSVRFX0JPVU5EX0VSUiAgICAgICBCSVQoOCkKKyNkZWZpbmUgTElNQV9HUF9WRVJTSU9OICAg ICAgICAgICAgICAgICAgICAgICAgMHg2QworI2RlZmluZSBMSU1BX0dQX1ZTQ0xfU1RBUlRfQURE Ul9SRUFEICAgICAgICAgICAweDgwCisjZGVmaW5lIExJTUFfR1BfUExCQ0xfU1RBUlRfQUREUl9S RUFEICAgICAgICAgIDB4ODQKKyNkZWZpbmUgTElNQV9HUF9DT05UUl9BWElfQlVTX0VSUk9SX1NU QVQgICAgICAgMHg5NAorCisjZGVmaW5lIExJTUFfR1BfSVJRX01BU0tfQUxMCQkgICBcCisJKAkJ CQkgICBcCisJIExJTUFfR1BfSVJRX1ZTX0VORF9DTURfTFNUICAgICAgfCBcCisJIExJTUFfR1Bf SVJRX1BMQlVfRU5EX0NNRF9MU1QgICAgfCBcCisJIExJTUFfR1BfSVJRX1BMQlVfT1VUX09GX01F TSAgICAgfCBcCisJIExJTUFfR1BfSVJRX1ZTX1NFTV9JUlEgICAgICAgICAgfCBcCisJIExJTUFf R1BfSVJRX1BMQlVfU0VNX0lSUSAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX0hBTkcgICAgICAg ICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgfCBcCisJIExJ TUFfR1BfSVJRX1BFUkZfQ05UXzBfTElNSVQgICAgfCBcCisJIExJTUFfR1BfSVJRX1BFUkZfQ05U XzFfTElNSVQgICAgfCBcCisJIExJTUFfR1BfSVJRX1dSSVRFX0JPVU5EX0VSUiAgICAgfCBcCisJ IExJTUFfR1BfSVJRX1NZTkNfRVJST1IgICAgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX0FYSV9C VVNfRVJST1IgICAgICAgfCBcCisJIExJTUFfR1BfSVJRX0FYSV9CVVNfU1RPUFBFRCAgICAgfCBc CisJIExJTUFfR1BfSVJRX1ZTX0lOVkFMSURfQ01EICAgICAgfCBcCisJIExJTUFfR1BfSVJRX1BM Ql9JTlZBTElEX0NNRCAgICAgfCBcCisJIExJTUFfR1BfSVJRX1JFU0VUX0NPTVBMRVRFRCAgICAg fCBcCisJIExJTUFfR1BfSVJRX1NFTUFQSE9SRV9VTkRFUkZMT1cgfCBcCisJIExJTUFfR1BfSVJR X1NFTUFQSE9SRV9PVkVSRkxPVyAgfCBcCisJIExJTUFfR1BfSVJRX1BUUl9BUlJBWV9PVVRfT0Zf Qk9VTkRTKQorCisjZGVmaW5lIExJTUFfR1BfSVJRX01BU0tfRVJST1IgICAgICAgICAgICAgXAor CSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSBMSU1BX0dQX0lSUV9QTEJV X09VVF9PRl9NRU0gICAgIHwgXAorCSBMSU1BX0dQX0lSUV9GT1JDRV9IQU5HICAgICAgICAgIHwg XAorCSBMSU1BX0dQX0lSUV9XUklURV9CT1VORF9FUlIgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9T WU5DX0VSUk9SICAgICAgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9BWElfQlVTX0VSUk9SICAgICAg IHwgXAorCSBMSU1BX0dQX0lSUV9WU19JTlZBTElEX0NNRCAgICAgIHwgXAorCSBMSU1BX0dQX0lS UV9QTEJfSU5WQUxJRF9DTUQgICAgIHwgXAorCSBMSU1BX0dQX0lSUV9TRU1BUEhPUkVfVU5ERVJG TE9XIHwgXAorCSBMSU1BX0dQX0lSUV9TRU1BUEhPUkVfT1ZFUkZMT1cgIHwgXAorCSBMSU1BX0dQ X0lSUV9QVFJfQVJSQVlfT1VUX09GX0JPVU5EUykKKworI2RlZmluZSBMSU1BX0dQX0lSUV9NQVNL X1VTRUQJCSAgIFwKKwkoCQkJCSAgIFwKKwkgTElNQV9HUF9JUlFfVlNfRU5EX0NNRF9MU1QgICAg ICB8IFwKKwkgTElNQV9HUF9JUlFfUExCVV9FTkRfQ01EX0xTVCAgICB8IFwKKwkgTElNQV9HUF9J UlFfTUFTS19FUlJPUikKKworLyogUFAgcmVncyAqLworI2RlZmluZSBMSU1BX1BQX0ZSQU1FICAg ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIExJTUFfUFBfUlNXCQkJICAgICAw eDAwMDQKKyNkZWZpbmUgTElNQV9QUF9TVEFDSwkJCSAgICAgMHgwMDMwCisjZGVmaW5lIExJTUFf UFBfU1RBQ0tfU0laRQkJICAgICAweDAwMzQKKyNkZWZpbmUgTElNQV9QUF9PUklHSU5fT0ZGU0VU X1gJICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBMSU1BX1BQX1dCKGkpICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDEwMCAqIChpICsgMSkpCisjZGVmaW5lICAgTElNQV9QUF9XQl9TT1VS Q0VfU0VMRUNUICAgICAgICAgICAweDAwMDAKKyNkZWZpbmUJICBMSU1BX1BQX1dCX1NPVVJDRV9B RERSICAgICAgICAgICAgIDB4MDAwNAorCisjZGVmaW5lIExJTUFfUFBfVkVSU0lPTiAgICAgICAg ICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgTElNQV9QUF9DVVJSRU5UX1JFTkRfTElTVF9B RERSICAgICAgIDB4MTAwNAorI2RlZmluZSBMSU1BX1BQX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgMHgxMDA4CisjZGVmaW5lICAgTElNQV9QUF9TVEFUVVNfUkVOREVSSU5HX0FDVElWRSAg ICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX1BQX1NUQVRVU19CVVNfU1RPUFBFRCAgICAgICAgIEJJ VCg0KQorI2RlZmluZSBMSU1BX1BQX0NUUkwgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDBj CisjZGVmaW5lICAgTElNQV9QUF9DVFJMX1NUT1BfQlVTICAgICAgICAgICAgICBCSVQoMCkKKyNk ZWZpbmUgICBMSU1BX1BQX0NUUkxfRkxVU0hfQ0FDSEVTICAgICAgICAgIEJJVCgzKQorI2RlZmlu ZSAgIExJTUFfUFBfQ1RSTF9GT1JDRV9SRVNFVCAgICAgICAgICAgQklUKDUpCisjZGVmaW5lICAg TElNQV9QUF9DVFJMX1NUQVJUX1JFTkRFUklORyAgICAgICBCSVQoNikKKyNkZWZpbmUgICBMSU1B X1BQX0NUUkxfU09GVF9SRVNFVCAgICAgICAgICAgIEJJVCg3KQorI2RlZmluZSBMSU1BX1BQX0lO VF9SQVdTVEFUICAgICAgICAgICAgICAgICAgMHgxMDIwCisjZGVmaW5lIExJTUFfUFBfSU5UX0NM RUFSICAgICAgICAgICAgICAgICAgICAweDEwMjQKKyNkZWZpbmUgTElNQV9QUF9JTlRfTUFTSyAg ICAgICAgICAgICAgICAgICAgIDB4MTAyOAorI2RlZmluZSBMSU1BX1BQX0lOVF9TVEFUVVMgICAg ICAgICAgICAgICAgICAgMHgxMDJjCisjZGVmaW5lICAgTElNQV9QUF9JUlFfRU5EX09GX0ZSQU1F ICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9FTkRfT0ZfVElMRSAgICAg ICAgICAgIEJJVCgxKQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0hBTkcgICAgICAgICAgICAgICAg ICAgQklUKDIpCisjZGVmaW5lICAgTElNQV9QUF9JUlFfRk9SQ0VfSEFORyAgICAgICAgICAgICBC SVQoMykKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9CVVNfRVJST1IgICAgICAgICAgICAgIEJJVCg0 KQorI2RlZmluZSAgIExJTUFfUFBfSVJRX0JVU19TVE9QICAgICAgICAgICAgICAgQklUKDUpCisj ZGVmaW5lICAgTElNQV9QUF9JUlFfQ05UXzBfTElNSVQgICAgICAgICAgICBCSVQoNikKKyNkZWZp bmUgICBMSU1BX1BQX0lSUV9DTlRfMV9MSU1JVCAgICAgICAgICAgIEJJVCg3KQorI2RlZmluZSAg IExJTUFfUFBfSVJRX1dSSVRFX0JPVU5EQVJZX0VSUk9SICAgQklUKDgpCisjZGVmaW5lICAgTElN QV9QUF9JUlFfSU5WQUxJRF9QTElTVF9DT01NQU5EICBCSVQoOSkKKyNkZWZpbmUgICBMSU1BX1BQ X0lSUV9DQUxMX1NUQUNLX1VOREVSRkxPVyAgIEJJVCgxMCkKKyNkZWZpbmUgICBMSU1BX1BQX0lS UV9DQUxMX1NUQUNLX09WRVJGTE9XICAgIEJJVCgxMSkKKyNkZWZpbmUgICBMSU1BX1BQX0lSUV9S RVNFVF9DT01QTEVURUQgICAgICAgIEJJVCgxMikKKyNkZWZpbmUgTElNQV9QUF9XUklURV9CT1VO REFSWV9MT1cgICAgICAgICAgIDB4MTA0NAorI2RlZmluZSBMSU1BX1BQX0JVU19FUlJPUl9TVEFU VVMgICAgICAgICAgICAgMHgxMDUwCisjZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRfMF9FTkFCTEUg ICAgICAgICAgICAweDEwODAKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8wX1NSQyAgICAgICAg ICAgICAgIDB4MTA4NAorI2RlZmluZSBMSU1BX1BQX1BFUkZfQ05UXzBfTElNSVQgICAgICAgICAg ICAgMHgxMDg4CisjZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRfMF9WQUxVRSAgICAgICAgICAgICAw eDEwOGMKKyNkZWZpbmUgTElNQV9QUF9QRVJGX0NOVF8xX0VOQUJMRSAgICAgICAgICAgIDB4MTBh MAorI2RlZmluZSBMSU1BX1BQX1BFUkZfQ05UXzFfU1JDICAgICAgICAgICAgICAgMHgxMGE0Cisj ZGVmaW5lIExJTUFfUFBfUEVSRl9DTlRfMV9MSU1JVCAgICAgICAgICAgICAweDEwYTgKKyNkZWZp bmUgTElNQV9QUF9QRVJGX0NOVF8xX1ZBTFVFICAgICAgICAgICAgIDB4MTBhYworI2RlZmluZSBM SU1BX1BQX1BFUkZNT05fQ09OVFIgICAgICAgICAgICAgICAgMHgxMGIwCisjZGVmaW5lIExJTUFf UFBfUEVSRk1PTl9CQVNFICAgICAgICAgICAgICAgICAweDEwYjQKKworI2RlZmluZSBMSU1BX1BQ X0lSUV9NQVNLX0FMTCAgICAgICAgICAgICAgICAgXAorCSggICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisJIExJTUFfUFBfSVJRX0VORF9PRl9GUkFNRSAgICAgICAgICB8IFwK KwkgTElNQV9QUF9JUlFfRU5EX09GX1RJTEUgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9I QU5HICAgICAgICAgICAgICAgICAgfCBcCisJIExJTUFfUFBfSVJRX0ZPUkNFX0hBTkcgICAgICAg ICAgICB8IFwKKwkgTElNQV9QUF9JUlFfQlVTX0VSUk9SICAgICAgICAgICAgIHwgXAorCSBMSU1B X1BQX0lSUV9CVVNfU1RPUCAgICAgICAgICAgICAgfCBcCisJIExJTUFfUFBfSVJRX0NOVF8wX0xJ TUlUICAgICAgICAgICB8IFwKKwkgTElNQV9QUF9JUlFfQ05UXzFfTElNSVQgICAgICAgICAgIHwg XAorCSBMSU1BX1BQX0lSUV9XUklURV9CT1VOREFSWV9FUlJPUiAgfCBcCisJIExJTUFfUFBfSVJR X0lOVkFMSURfUExJU1RfQ09NTUFORCB8IFwKKwkgTElNQV9QUF9JUlFfQ0FMTF9TVEFDS19VTkRF UkZMT1cgIHwgXAorCSBMSU1BX1BQX0lSUV9DQUxMX1NUQUNLX09WRVJGTE9XICAgfCBcCisJIExJ TUFfUFBfSVJRX1JFU0VUX0NPTVBMRVRFRCkKKworI2RlZmluZSBMSU1BX1BQX0lSUV9NQVNLX0VS Uk9SICAgICAgICAgICAgICAgXAorCSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisJIExJTUFfUFBfSVJRX0ZPUkNFX0hBTkcgICAgICAgICAgICB8IFwKKwkgTElNQV9QUF9J UlFfQlVTX0VSUk9SICAgICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9XUklURV9CT1VOREFS WV9FUlJPUiAgfCBcCisJIExJTUFfUFBfSVJRX0lOVkFMSURfUExJU1RfQ09NTUFORCB8IFwKKwkg TElNQV9QUF9JUlFfQ0FMTF9TVEFDS19VTkRFUkZMT1cgIHwgXAorCSBMSU1BX1BQX0lSUV9DQUxM X1NUQUNLX09WRVJGTE9XKQorCisjZGVmaW5lIExJTUFfUFBfSVJRX01BU0tfVVNFRCAgICAgICAg ICAgICAgICBcCisJKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgTElN QV9QUF9JUlFfRU5EX09GX0ZSQU1FICAgICAgICAgIHwgXAorCSBMSU1BX1BQX0lSUV9NQVNLX0VS Uk9SKQorCisvKiBNTVUgcmVncyAqLworI2RlZmluZSBMSU1BX01NVV9EVEVfQUREUiAgICAgICAg ICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBMSU1BX01NVV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgIDB4MDAwNAorI2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19QQUdJTkdfRU5BQkxF RCAgICAgIEJJVCgwKQorI2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19QQUdFX0ZBVUxUX0FDVElW RSAgIEJJVCgxKQorI2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19TVEFMTF9BQ1RJVkUgICAgICAg IEJJVCgyKQorI2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19JRExFICAgICAgICAgICAgICAgIEJJ VCgzKQorI2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19SRVBMQVlfQlVGRkVSX0VNUFRZIEJJVCg0 KQorI2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19QQUdFX0ZBVUxUX0lTX1dSSVRFIEJJVCg1KQor I2RlZmluZSAgIExJTUFfTU1VX1NUQVRVU19CVVNfSUQoeCkgICAgICAgICAgICgoeCA+PiA2KSAm IDB4MUYpCisjZGVmaW5lIExJTUFfTU1VX0NPTU1BTkQgICAgICAgICAgICAgICAgICAgICAgMHgw MDA4CisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFORF9FTkFCTEVfUEFHSU5HICAgICAgMHgwMAor I2RlZmluZSAgIExJTUFfTU1VX0NPTU1BTkRfRElTQUJMRV9QQUdJTkcgICAgIDB4MDEKKyNkZWZp bmUgICBMSU1BX01NVV9DT01NQU5EX0VOQUJMRV9TVEFMTCAgICAgICAweDAyCisjZGVmaW5lICAg TElNQV9NTVVfQ09NTUFORF9ESVNBQkxFX1NUQUxMICAgICAgMHgwMworI2RlZmluZSAgIExJTUFf TU1VX0NPTU1BTkRfWkFQX0NBQ0hFICAgICAgICAgIDB4MDQKKyNkZWZpbmUgICBMSU1BX01NVV9D T01NQU5EX1BBR0VfRkFVTFRfRE9ORSAgICAweDA1CisjZGVmaW5lICAgTElNQV9NTVVfQ09NTUFO RF9IQVJEX1JFU0VUICAgICAgICAgMHgwNgorI2RlZmluZSBMSU1BX01NVV9QQUdFX0ZBVUxUX0FE RFIgICAgICAgICAgICAgIDB4MDAwQworI2RlZmluZSBMSU1BX01NVV9aQVBfT05FX0xJTkUgICAg ICAgICAgICAgICAgIDB4MDAxMAorI2RlZmluZSBMSU1BX01NVV9JTlRfUkFXU1RBVCAgICAgICAg ICAgICAgICAgIDB4MDAxNAorI2RlZmluZSBMSU1BX01NVV9JTlRfQ0xFQVIgICAgICAgICAgICAg ICAgICAgIDB4MDAxOAorI2RlZmluZSBMSU1BX01NVV9JTlRfTUFTSyAgICAgICAgICAgICAgICAg ICAgIDB4MDAxQworI2RlZmluZSAgIExJTUFfTU1VX0lOVF9QQUdFX0ZBVUxUICAgICAgICAgICAg IEJJVCgwKQorI2RlZmluZSAgIExJTUFfTU1VX0lOVF9SRUFEX0JVU19FUlJPUiAgICAgICAgIEJJ VCgxKQorI2RlZmluZSBMSU1BX01NVV9JTlRfU1RBVFVTICAgICAgICAgICAgICAgICAgIDB4MDAy MAorCisjZGVmaW5lIExJTUFfVk1fRkxBR19QUkVTRU5UICAgICAgICAgIEJJVCgwKQorI2RlZmlu ZSBMSU1BX1ZNX0ZMQUdfUkVBRF9QRVJNSVNTSU9OICBCSVQoMSkKKyNkZWZpbmUgTElNQV9WTV9G TEFHX1dSSVRFX1BFUk1JU1NJT04gQklUKDIpCisjZGVmaW5lIExJTUFfVk1fRkxBR19PVkVSUklE RV9DQUNIRSAgIEJJVCgzKQorI2RlZmluZSBMSU1BX1ZNX0ZMQUdfV1JJVEVfQ0FDSEVBQkxFICBC SVQoNCkKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1dSSVRFX0FMTE9DQVRFICAgQklUKDUpCisjZGVm aW5lIExJTUFfVk1fRkxBR19XUklURV9CVUZGRVJBQkxFIEJJVCg2KQorI2RlZmluZSBMSU1BX1ZN X0ZMQUdfUkVBRF9DQUNIRUFCTEUgICBCSVQoNykKKyNkZWZpbmUgTElNQV9WTV9GTEFHX1JFQURf QUxMT0NBVEUgICAgQklUKDgpCisjZGVmaW5lIExJTUFfVk1fRkxBR19NQVNLICAgICAgICAgICAg IDB4MUZGCisKKyNkZWZpbmUgTElNQV9WTV9GTEFHU19DQUNIRSAoCQkJIFwKKwkJTElNQV9WTV9G TEFHX1BSRVNFTlQgfAkJIFwKKwkJTElNQV9WTV9GTEFHX1JFQURfUEVSTUlTU0lPTiB8CSBcCisJ CUxJTUFfVk1fRkxBR19XUklURV9QRVJNSVNTSU9OIHwJIFwKKwkJTElNQV9WTV9GTEFHX09WRVJS SURFX0NBQ0hFIHwJIFwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX0NBQ0hFQUJMRSB8CSBcCisJCUxJ TUFfVk1fRkxBR19XUklURV9CVUZGRVJBQkxFIHwJIFwKKwkJTElNQV9WTV9GTEFHX1JFQURfQ0FD SEVBQkxFIHwJIFwKKwkJTElNQV9WTV9GTEFHX1JFQURfQUxMT0NBVEUpCisKKyNkZWZpbmUgTElN QV9WTV9GTEFHU19VTkNBQ0hFICgJCQlcCisJCUxJTUFfVk1fRkxBR19QUkVTRU5UIHwJCVwKKwkJ TElNQV9WTV9GTEFHX1JFQURfUEVSTUlTU0lPTiB8CVwKKwkJTElNQV9WTV9GTEFHX1dSSVRFX1BF Uk1JU1NJT04pCisKKy8qIERMQlUgcmVncyAqLworI2RlZmluZSBMSU1BX0RMQlVfTUFTVEVSX1RM TElTVF9QSFlTX0FERFIgIDB4MDAwMAorI2RlZmluZQlMSU1BX0RMQlVfTUFTVEVSX1RMTElTVF9W QUREUiAgICAgIDB4MDAwNAorI2RlZmluZQlMSU1BX0RMQlVfVExMSVNUX1ZCQVNFQUREUiAgICAg ICAgIDB4MDAwOAorI2RlZmluZQlMSU1BX0RMQlVfRkJfRElNICAgICAgICAgICAgICAgICAgIDB4 MDAwQworI2RlZmluZQlMSU1BX0RMQlVfVExMSVNUX0NPTkYgICAgICAgICAgICAgIDB4MDAxMAor I2RlZmluZQlMSU1BX0RMQlVfU1RBUlRfVElMRV9QT1MgICAgICAgICAgIDB4MDAxNAorI2RlZmlu ZQlMSU1BX0RMQlVfUFBfRU5BQkxFX01BU0sgICAgICAgICAgIDB4MDAxOAorCisvKiBCQ0FTVCBy ZWdzICovCisjZGVmaW5lIExJTUFfQkNBU1RfQlJPQURDQVNUX01BU0sgICAgMHgwCisjZGVmaW5l IExJTUFfQkNBU1RfSU5URVJSVVBUX01BU0sgICAgMHg0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9zY2hlZC5jIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEv bGltYV9zY2hlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTdi ZDljMWRlYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2xpbWEvbGltYV9z Y2hlZC5jCkBAIC0wLDAgKzEsNDA0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCBPUiBNSVQKKy8qIENvcHlyaWdodCAyMDE3LTIwMTkgUWlhbmcgWXUgPHl1cTgyNUBnbWFp bC5jb20+ICovCisKKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CisjaW5jbHVkZSA8bGludXgv c2xhYi5oPgorCisjaW5jbHVkZSAibGltYV9kcnYuaCIKKyNpbmNsdWRlICJsaW1hX3NjaGVkLmgi CisjaW5jbHVkZSAibGltYV92bS5oIgorI2luY2x1ZGUgImxpbWFfbW11LmgiCisjaW5jbHVkZSAi bGltYV9sMl9jYWNoZS5oIgorI2luY2x1ZGUgImxpbWFfb2JqZWN0LmgiCisKK3N0cnVjdCBsaW1h X2ZlbmNlIHsKKwlzdHJ1Y3QgZG1hX2ZlbmNlIGJhc2U7CisJc3RydWN0IGxpbWFfc2NoZWRfcGlw ZSAqcGlwZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbGltYV9mZW5jZV9zbGFi Oworc3RhdGljIGludCBsaW1hX2ZlbmNlX3NsYWJfcmVmY250OworCitpbnQgbGltYV9zY2hlZF9z bGFiX2luaXQodm9pZCkKK3sKKwlpZiAoIWxpbWFfZmVuY2Vfc2xhYikgeworCQlsaW1hX2ZlbmNl X3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgKKwkJCSJsaW1hX2ZlbmNlIiwgc2l6ZW9mKHN0cnVj dCBsaW1hX2ZlbmNlKSwgMCwKKwkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJCWlmICgh bGltYV9mZW5jZV9zbGFiKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbGltYV9mZW5jZV9z bGFiX3JlZmNudCsrOworCXJldHVybiAwOworfQorCit2b2lkIGxpbWFfc2NoZWRfc2xhYl9maW5p KHZvaWQpCit7CisJaWYgKCEtLWxpbWFfZmVuY2Vfc2xhYl9yZWZjbnQpIHsKKwkJa21lbV9jYWNo ZV9kZXN0cm95KGxpbWFfZmVuY2Vfc2xhYik7CisJCWxpbWFfZmVuY2Vfc2xhYiA9IE5VTEw7CisJ fQorfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsaW1hX2ZlbmNlICp0b19saW1hX2ZlbmNlKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiBjb250YWluZXJfb2YoZmVuY2UsIHN0 cnVjdCBsaW1hX2ZlbmNlLCBiYXNlKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmxpbWFfZmVu Y2VfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXJldHVybiAi bGltYSI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpsaW1hX2ZlbmNlX2dldF90aW1lbGluZV9u YW1lKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQoreworCXN0cnVjdCBsaW1hX2ZlbmNlICpmID0g dG9fbGltYV9mZW5jZShmZW5jZSk7CisKKwlyZXR1cm4gZi0+cGlwZS0+YmFzZS5uYW1lOworfQor CitzdGF0aWMgdm9pZCBsaW1hX2ZlbmNlX3JlbGVhc2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqcmN1 KQoreworCXN0cnVjdCBkbWFfZmVuY2UgKmYgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3QgZG1h X2ZlbmNlLCByY3UpOworCXN0cnVjdCBsaW1hX2ZlbmNlICpmZW5jZSA9IHRvX2xpbWFfZmVuY2Uo Zik7CisKKwlrbWVtX2NhY2hlX2ZyZWUobGltYV9mZW5jZV9zbGFiLCBmZW5jZSk7Cit9CisKK3N0 YXRpYyB2b2lkIGxpbWFfZmVuY2VfcmVsZWFzZShzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sK KwlzdHJ1Y3QgbGltYV9mZW5jZSAqZiA9IHRvX2xpbWFfZmVuY2UoZmVuY2UpOworCisJY2FsbF9y Y3UoJmYtPmJhc2UucmN1LCBsaW1hX2ZlbmNlX3JlbGVhc2VfcmN1KTsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzIGxpbWFfZmVuY2Vfb3BzID0geworCS5nZXRfZHJpdmVy X25hbWUgPSBsaW1hX2ZlbmNlX2dldF9kcml2ZXJfbmFtZSwKKwkuZ2V0X3RpbWVsaW5lX25hbWUg PSBsaW1hX2ZlbmNlX2dldF90aW1lbGluZV9uYW1lLAorCS5yZWxlYXNlID0gbGltYV9mZW5jZV9y ZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBsaW1hX2ZlbmNlICpsaW1hX2ZlbmNlX2NyZWF0 ZShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKQoreworCXN0cnVjdCBsaW1hX2ZlbmNlICpm ZW5jZTsKKworCWZlbmNlID0ga21lbV9jYWNoZV96YWxsb2MobGltYV9mZW5jZV9zbGFiLCBHRlBf S0VSTkVMKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gTlVMTDsKKworCWZlbmNlLT5waXBlID0g cGlwZTsKKwlkbWFfZmVuY2VfaW5pdCgmZmVuY2UtPmJhc2UsICZsaW1hX2ZlbmNlX29wcywgJnBp cGUtPmZlbmNlX2xvY2ssCisJCSAgICAgICBwaXBlLT5mZW5jZV9jb250ZXh0LCArK3BpcGUtPmZl bmNlX3NlcW5vKTsKKworCXJldHVybiBmZW5jZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg bGltYV9zY2hlZF90YXNrICp0b19saW1hX3Rhc2soc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYikK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGpvYiwgc3RydWN0IGxpbWFfc2NoZWRfdGFzaywgYmFz ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqdG9fbGltYV9w aXBlKHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQpCit7CisJcmV0dXJuIGNvbnRhaW5l cl9vZihzY2hlZCwgc3RydWN0IGxpbWFfc2NoZWRfcGlwZSwgYmFzZSk7Cit9CisKK2ludCBsaW1h X3NjaGVkX3Rhc2tfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLAorCQkJIHN0cnVj dCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJCQkgc3RydWN0IGxpbWFfYm8gKipib3Ms IGludCBudW1fYm9zLAorCQkJIHN0cnVjdCBsaW1hX3ZtICp2bSkKK3sKKwlpbnQgZXJyLCBpOwor CisJdGFzay0+Ym9zID0ga21lbWR1cChib3MsIHNpemVvZigqYm9zKSAqIG51bV9ib3MsIEdGUF9L RVJORUwpOworCWlmICghdGFzay0+Ym9zKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9 IDA7IGkgPCBudW1fYm9zOyBpKyspCisJCWRybV9nZW1fb2JqZWN0X2dldCgmYm9zW2ldLT5nZW0p OworCisJZXJyID0gZHJtX3NjaGVkX2pvYl9pbml0KCZ0YXNrLT5iYXNlLCAmY29udGV4dC0+YmFz ZSwgdm0pOworCWlmIChlcnIpIHsKKwkJa2ZyZWUodGFzay0+Ym9zKTsKKwkJcmV0dXJuIGVycjsK Kwl9CisKKwl0YXNrLT5udW1fYm9zID0gbnVtX2JvczsKKwl0YXNrLT52bSA9IGxpbWFfdm1fZ2V0 KHZtKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsaW1hX3NjaGVkX3Rhc2tfZmluaShzdHJ1Y3Qg bGltYV9zY2hlZF90YXNrICp0YXNrKQoreworCWludCBpOworCisJZHJtX3NjaGVkX2pvYl9jbGVh bnVwKCZ0YXNrLT5iYXNlKTsKKworCWZvciAoaSA9IDA7IGkgPCB0YXNrLT5udW1fZGVwOyBpKysp CisJCWRtYV9mZW5jZV9wdXQodGFzay0+ZGVwW2ldKTsKKworCWtmcmVlKHRhc2stPmRlcCk7CisK KwlpZiAodGFzay0+Ym9zKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0YXNrLT5udW1fYm9zOyBpKysp CisJCQlkcm1fZ2VtX29iamVjdF9wdXRfdW5sb2NrZWQoJnRhc2stPmJvc1tpXS0+Z2VtKTsKKwkJ a2ZyZWUodGFzay0+Ym9zKTsKKwl9CisKKwlsaW1hX3ZtX3B1dCh0YXNrLT52bSk7Cit9CisKK2lu dCBsaW1hX3NjaGVkX3Rhc2tfYWRkX2RlcChzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLCBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKK3sKKwlpbnQgaSwgbmV3X2RlcCA9IDQ7CisKKwkvKiBz YW1lIGNvbnRleHQncyBmZW5jZSBpcyBkZWZpbml0bHkgZWFybGllciB0aGVuIHRoaXMgdGFzayAq LworCWlmIChmZW5jZS0+Y29udGV4dCA9PSB0YXNrLT5iYXNlLnNfZmVuY2UtPmZpbmlzaGVkLmNv bnRleHQpIHsKKwkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7CisJCXJldHVybiAwOworCX0KKworCWlm ICh0YXNrLT5kZXAgJiYgdGFzay0+bnVtX2RlcCA9PSB0YXNrLT5tYXhfZGVwKQorCQluZXdfZGVw ID0gdGFzay0+bWF4X2RlcCAqIDI7CisKKwlpZiAodGFzay0+bWF4X2RlcCA8IG5ld19kZXApIHsK KwkJdm9pZCAqZGVwID0ga3JlYWxsb2ModGFzay0+ZGVwLCBzaXplb2YoKnRhc2stPmRlcCkgKiBu ZXdfZGVwLCBHRlBfS0VSTkVMKTsKKworCQlpZiAoIWRlcCkKKwkJCXJldHVybiAtRU5PTUVNOwor CisJCXRhc2stPm1heF9kZXAgPSBuZXdfZGVwOworCQl0YXNrLT5kZXAgPSBkZXA7CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IHRhc2stPm51bV9kZXA7IGkrKykgeworCQlpZiAodGFzay0+ZGVwW2ld LT5jb250ZXh0ID09IGZlbmNlLT5jb250ZXh0ICYmCisJCSAgICBkbWFfZmVuY2VfaXNfbGF0ZXIo ZmVuY2UsIHRhc2stPmRlcFtpXSkpIHsKKwkJCWRtYV9mZW5jZV9wdXQodGFzay0+ZGVwW2ldKTsK KwkJCXRhc2stPmRlcFtpXSA9IGZlbmNlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwl0YXNr LT5kZXBbdGFzay0+bnVtX2RlcCsrXSA9IGZlbmNlOworCXJldHVybiAwOworfQorCitpbnQgbGlt YV9zY2hlZF9jb250ZXh0X2luaXQoc3RydWN0IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwKKwkJCSAg ICBzdHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0LAorCQkJICAgIGF0b21pY190ICpn dWlsdHkpCit7CisJc3RydWN0IGRybV9zY2hlZF9ycSAqcnEgPSBwaXBlLT5iYXNlLnNjaGVkX3Jx ICsgRFJNX1NDSEVEX1BSSU9SSVRZX05PUk1BTDsKKworCXJldHVybiBkcm1fc2NoZWRfZW50aXR5 X2luaXQoJmNvbnRleHQtPmJhc2UsICZycSwgMSwgZ3VpbHR5KTsKK30KKwordm9pZCBsaW1hX3Nj aGVkX2NvbnRleHRfZmluaShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlLAorCQkJICAgICBz dHJ1Y3QgbGltYV9zY2hlZF9jb250ZXh0ICpjb250ZXh0KQoreworCWRybV9zY2hlZF9lbnRpdHlf ZmluaSgmY29udGV4dC0+YmFzZSk7Cit9CisKK3N0cnVjdCBkbWFfZmVuY2UgKmxpbWFfc2NoZWRf Y29udGV4dF9xdWV1ZV90YXNrKHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJ CQkJCQlzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKQoreworCXN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlID0gZG1hX2ZlbmNlX2dldCgmdGFzay0+YmFzZS5zX2ZlbmNlLT5maW5pc2hlZCk7CisK Kwlkcm1fc2NoZWRfZW50aXR5X3B1c2hfam9iKCZ0YXNrLT5iYXNlLCAmY29udGV4dC0+YmFzZSk7 CisJcmV0dXJuIGZlbmNlOworfQorCitzdGF0aWMgc3RydWN0IGRtYV9mZW5jZSAqbGltYV9zY2hl ZF9kZXBlbmRlbmN5KHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IsCisJCQkJCSAgICAgICBzdHJ1 Y3QgZHJtX3NjaGVkX2VudGl0eSAqZW50aXR5KQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sg KnRhc2sgPSB0b19saW1hX3Rhc2soam9iKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCB0 YXNrLT5udW1fZGVwOyBpKyspIHsKKwkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UgPSB0YXNrLT5k ZXBbaV07CisKKwkJaWYgKCF0YXNrLT5kZXBbaV0pCisJCQljb250aW51ZTsKKworCQl0YXNrLT5k ZXBbaV0gPSBOVUxMOworCisJCWlmICghZG1hX2ZlbmNlX2lzX3NpZ25hbGVkKGZlbmNlKSkKKwkJ CXJldHVybiBmZW5jZTsKKworCQlkbWFfZmVuY2VfcHV0KGZlbmNlKTsKKwl9CisKKwlyZXR1cm4g TlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBkbWFfZmVuY2UgKmxpbWFfc2NoZWRfcnVuX2pvYihz dHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKQoreworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRh c2sgPSB0b19saW1hX3Rhc2soam9iKTsKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0g dG9fbGltYV9waXBlKGpvYi0+c2NoZWQpOworCXN0cnVjdCBsaW1hX2ZlbmNlICpmZW5jZTsKKwlz dHJ1Y3QgZG1hX2ZlbmNlICpyZXQ7CisJc3RydWN0IGxpbWFfdm0gKnZtID0gTlVMTCwgKmxhc3Rf dm0gPSBOVUxMOworCWludCBpOworCisJLyogYWZ0ZXIgR1BVIHJlc2V0ICovCisJaWYgKGpvYi0+ c19mZW5jZS0+ZmluaXNoZWQuZXJyb3IgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCWZlbmNlID0g bGltYV9mZW5jZV9jcmVhdGUocGlwZSk7CisJaWYgKCFmZW5jZSkKKwkJcmV0dXJuIE5VTEw7CisJ dGFzay0+ZmVuY2UgPSAmZmVuY2UtPmJhc2U7CisKKwkvKiBmb3IgY2FsbGVyIHVzYWdlIG9mIHRo ZSBmZW5jZSwgb3RoZXJ3aXNlIGlycSBoYW5kbGVyCisJICogbWF5IGNvbnN1bWUgdGhlIGZlbmNl IGJlZm9yZSBjYWxsZXIgdXNlIGl0CisJICovCisJcmV0ID0gZG1hX2ZlbmNlX2dldCh0YXNrLT5m ZW5jZSk7CisKKwlwaXBlLT5jdXJyZW50X3Rhc2sgPSB0YXNrOworCisJLyogdGhpcyBpcyBuZWVk ZWQgZm9yIE1NVSB0byB3b3JrIGNvcnJlY3RseSwgb3RoZXJ3aXNlIEdQL1BQCisJICogd2lsbCBo YW5nIG9yIHBhZ2UgZmF1bHQgZm9yIHVua25vd24gcmVhc29uIGFmdGVyIHJ1bm5pbmcgZm9yCisJ ICogYSB3aGlsZS4KKwkgKgorCSAqIE5lZWQgdG8gaW52ZXN0aWdhdGU6CisJICogMS4gaXMgaXQg cmVsYXRlZCB0byBUTEIKKwkgKiAyLiBob3cgbXVjaCBwZXJmb3JtYW5jZSB3aWxsIGJlIGFmZmVj dGVkIGJ5IEwyIGNhY2hlIGZsdXNoCisJICogMy4gY2FuIHdlIHJlZHVjZSB0aGUgY2FsbGluZyBv ZiB0aGlzIGZ1bmN0aW9uIGJlY2F1c2UgYWxsCisJICogICAgR1AvUFAgdXNlIHRoZSBzYW1lIEwy IGNhY2hlIG9uIG1hbGk0MDAKKwkgKgorCSAqIFRPRE86CisJICogMS4gbW92ZSB0aGlzIHRvIHRh c2sgZmluaSB0byBzYXZlIHNvbWUgd2FpdCB0aW1lPworCSAqIDIuIHdoZW4gR1AvUFAgdXNlIGRp ZmZlcmVudCBsMiBjYWNoZSwgbmVlZCBQUCB3YWl0IEdQIGwyCisJICogICAgY2FjaGUgZmx1c2g/ CisJICovCisJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9sMl9jYWNoZTsgaSsrKQorCQlsaW1h X2wyX2NhY2hlX2ZsdXNoKHBpcGUtPmwyX2NhY2hlW2ldKTsKKworCWlmICh0YXNrLT52bSAhPSBw aXBlLT5jdXJyZW50X3ZtKSB7CisJCXZtID0gbGltYV92bV9nZXQodGFzay0+dm0pOworCQlsYXN0 X3ZtID0gcGlwZS0+Y3VycmVudF92bTsKKwkJcGlwZS0+Y3VycmVudF92bSA9IHRhc2stPnZtOwor CX0KKworCWlmIChwaXBlLT5iY2FzdF9tbXUpCisJCWxpbWFfbW11X3N3aXRjaF92bShwaXBlLT5i Y2FzdF9tbXUsIHZtKTsKKwllbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9tbXU7 IGkrKykKKwkJCWxpbWFfbW11X3N3aXRjaF92bShwaXBlLT5tbXVbaV0sIHZtKTsKKwl9CisKKwlp ZiAobGFzdF92bSkKKwkJbGltYV92bV9wdXQobGFzdF92bSk7CisKKwlwaXBlLT5lcnJvciA9IGZh bHNlOworCXBpcGUtPnRhc2tfcnVuKHBpcGUsIHRhc2spOworCisJcmV0dXJuIHRhc2stPmZlbmNl OworfQorCitzdGF0aWMgdm9pZCBsaW1hX3NjaGVkX2hhbmRsZV9lcnJvcl90YXNrKHN0cnVjdCBs aW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkJCSBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNr KQoreworCWRybV9zY2hlZF9zdG9wKCZwaXBlLT5iYXNlKTsKKworCWlmICh0YXNrKQorCQlkcm1f c2NoZWRfaW5jcmVhc2Vfa2FybWEoJnRhc2stPmJhc2UpOworCisJcGlwZS0+dGFza19lcnJvcihw aXBlKTsKKworCWlmIChwaXBlLT5iY2FzdF9tbXUpCisJCWxpbWFfbW11X3BhZ2VfZmF1bHRfcmVz dW1lKHBpcGUtPmJjYXN0X21tdSk7CisJZWxzZSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7 IGkgPCBwaXBlLT5udW1fbW11OyBpKyspCisJCQlsaW1hX21tdV9wYWdlX2ZhdWx0X3Jlc3VtZShw aXBlLT5tbXVbaV0pOworCX0KKworCWlmIChwaXBlLT5jdXJyZW50X3ZtKQorCQlsaW1hX3ZtX3B1 dChwaXBlLT5jdXJyZW50X3ZtKTsKKworCXBpcGUtPmN1cnJlbnRfdm0gPSBOVUxMOworCXBpcGUt PmN1cnJlbnRfdGFzayA9IE5VTEw7CisKKwlkcm1fc2NoZWRfcmVzdWJtaXRfam9icygmcGlwZS0+ YmFzZSk7CisJZHJtX3NjaGVkX3N0YXJ0KCZwaXBlLT5iYXNlLCB0cnVlKTsKK30KKworc3RhdGlj IHZvaWQgbGltYV9zY2hlZF90aW1lZG91dF9qb2Ioc3RydWN0IGRybV9zY2hlZF9qb2IgKmpvYikK K3sKKwlzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlID0gdG9fbGltYV9waXBlKGpvYi0+c2No ZWQpOworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2sgPSB0b19saW1hX3Rhc2soam9iKTsK KworCURSTV9FUlJPUigibGltYSBqb2IgdGltZW91dFxuIik7CisKKwlsaW1hX3NjaGVkX2hhbmRs ZV9lcnJvcl90YXNrKHBpcGUsIHRhc2spOworfQorCitzdGF0aWMgdm9pZCBsaW1hX3NjaGVkX2Zy ZWVfam9iKHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IpCit7CisJc3RydWN0IGxpbWFfc2NoZWRf dGFzayAqdGFzayA9IHRvX2xpbWFfdGFzayhqb2IpOworCXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUg KnBpcGUgPSB0b19saW1hX3BpcGUoam9iLT5zY2hlZCk7CisJc3RydWN0IGxpbWFfdm0gKnZtID0g dGFzay0+dm07CisJc3RydWN0IGxpbWFfYm8gKipib3MgPSB0YXNrLT5ib3M7CisJaW50IGk7CisK KwlkbWFfZmVuY2VfcHV0KHRhc2stPmZlbmNlKTsKKworCWZvciAoaSA9IDA7IGkgPCB0YXNrLT5u dW1fYm9zOyBpKyspCisJCWxpbWFfdm1fYm9fZGVsKHZtLCBib3NbaV0pOworCisJbGltYV9zY2hl ZF90YXNrX2ZpbmkodGFzayk7CisJa21lbV9jYWNoZV9mcmVlKHBpcGUtPnRhc2tfc2xhYiwgdGFz ayk7Cit9CisKK2NvbnN0IHN0cnVjdCBkcm1fc2NoZWRfYmFja2VuZF9vcHMgbGltYV9zY2hlZF9v cHMgPSB7CisJLmRlcGVuZGVuY3kgPSBsaW1hX3NjaGVkX2RlcGVuZGVuY3ksCisJLnJ1bl9qb2Ig PSBsaW1hX3NjaGVkX3J1bl9qb2IsCisJLnRpbWVkb3V0X2pvYiA9IGxpbWFfc2NoZWRfdGltZWRv dXRfam9iLAorCS5mcmVlX2pvYiA9IGxpbWFfc2NoZWRfZnJlZV9qb2IsCit9OworCitzdGF0aWMg dm9pZCBsaW1hX3NjaGVkX2Vycm9yX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorewor CXN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUgPQorCQljb250YWluZXJfb2Yod29yaywgc3Ry dWN0IGxpbWFfc2NoZWRfcGlwZSwgZXJyb3Jfd29yayk7CisJc3RydWN0IGxpbWFfc2NoZWRfdGFz ayAqdGFzayA9IHBpcGUtPmN1cnJlbnRfdGFzazsKKworCWxpbWFfc2NoZWRfaGFuZGxlX2Vycm9y X3Rhc2socGlwZSwgdGFzayk7Cit9CisKK2ludCBsaW1hX3NjaGVkX3BpcGVfaW5pdChzdHJ1Y3Qg bGltYV9zY2hlZF9waXBlICpwaXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWxvbmcgdGltZW91 dDsKKworCWlmIChsaW1hX3NjaGVkX3RpbWVvdXRfbXMgPD0gMCkKKwkJdGltZW91dCA9IE1BWF9T Q0hFRFVMRV9USU1FT1VUOworCWVsc2UKKwkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMobGlt YV9zY2hlZF90aW1lb3V0X21zKTsKKworCXBpcGUtPmZlbmNlX2NvbnRleHQgPSBkbWFfZmVuY2Vf Y29udGV4dF9hbGxvYygxKTsKKwlzcGluX2xvY2tfaW5pdCgmcGlwZS0+ZmVuY2VfbG9jayk7CisK KwlJTklUX1dPUksoJnBpcGUtPmVycm9yX3dvcmssIGxpbWFfc2NoZWRfZXJyb3Jfd29yayk7CisK KwlyZXR1cm4gZHJtX3NjaGVkX2luaXQoJnBpcGUtPmJhc2UsICZsaW1hX3NjaGVkX29wcywgMSwg MCwgdGltZW91dCwgbmFtZSk7Cit9CisKK3ZvaWQgbGltYV9zY2hlZF9waXBlX2Zpbmkoc3RydWN0 IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSkKK3sKKwlkcm1fc2NoZWRfZmluaSgmcGlwZS0+YmFzZSk7 Cit9CisKK3ZvaWQgbGltYV9zY2hlZF9waXBlX3Rhc2tfZG9uZShzdHJ1Y3QgbGltYV9zY2hlZF9w aXBlICpwaXBlKQoreworCWlmIChwaXBlLT5lcnJvcikKKwkJc2NoZWR1bGVfd29yaygmcGlwZS0+ ZXJyb3Jfd29yayk7CisJZWxzZSB7CisJCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKnRhc2sgPSBw aXBlLT5jdXJyZW50X3Rhc2s7CisKKwkJcGlwZS0+dGFza19maW5pKHBpcGUpOworCQlkbWFfZmVu Y2Vfc2lnbmFsKHRhc2stPmZlbmNlKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX3NjaGVkLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iMDE3Y2ZhN2UzMjcKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3NjaGVkLmgKQEAgLTAs MCArMSwxMDQgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVCAq LworLyogQ29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8K KworI2lmbmRlZiBfX0xJTUFfU0NIRURfSF9fCisjZGVmaW5lIF9fTElNQV9TQ0hFRF9IX18KKwor I2luY2x1ZGUgPGRybS9ncHVfc2NoZWR1bGVyLmg+CisKK3N0cnVjdCBsaW1hX3ZtOworCitzdHJ1 Y3QgbGltYV9zY2hlZF90YXNrIHsKKwlzdHJ1Y3QgZHJtX3NjaGVkX2pvYiBiYXNlOworCisJc3Ry dWN0IGxpbWFfdm0gKnZtOworCXZvaWQgKmZyYW1lOworCisJc3RydWN0IGRtYV9mZW5jZSAqKmRl cDsKKwlpbnQgbnVtX2RlcDsKKwlpbnQgbWF4X2RlcDsKKworCXN0cnVjdCBsaW1hX2JvICoqYm9z OworCWludCBudW1fYm9zOworCisJLyogcGlwZSBmZW5jZSAqLworCXN0cnVjdCBkbWFfZmVuY2Ug KmZlbmNlOworfTsKKworc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCB7CisJc3RydWN0IGRybV9z Y2hlZF9lbnRpdHkgYmFzZTsKK307CisKKyNkZWZpbmUgTElNQV9TQ0hFRF9QSVBFX01BWF9NTVUg ICAgICAgOAorI2RlZmluZSBMSU1BX1NDSEVEX1BJUEVfTUFYX0wyX0NBQ0hFICAyCisjZGVmaW5l IExJTUFfU0NIRURfUElQRV9NQVhfUFJPQ0VTU09SIDgKKworc3RydWN0IGxpbWFfaXA7CisKK3N0 cnVjdCBsaW1hX3NjaGVkX3BpcGUgeworCXN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciBiYXNlOwor CisJdTY0IGZlbmNlX2NvbnRleHQ7CisJdTMyIGZlbmNlX3NlcW5vOworCXNwaW5sb2NrX3QgZmVu Y2VfbG9jazsKKworCXN0cnVjdCBsaW1hX3NjaGVkX3Rhc2sgKmN1cnJlbnRfdGFzazsKKwlzdHJ1 Y3QgbGltYV92bSAqY3VycmVudF92bTsKKworCXN0cnVjdCBsaW1hX2lwICptbXVbTElNQV9TQ0hF RF9QSVBFX01BWF9NTVVdOworCWludCBudW1fbW11OworCisJc3RydWN0IGxpbWFfaXAgKmwyX2Nh Y2hlW0xJTUFfU0NIRURfUElQRV9NQVhfTDJfQ0FDSEVdOworCWludCBudW1fbDJfY2FjaGU7CisK KwlzdHJ1Y3QgbGltYV9pcCAqcHJvY2Vzc29yW0xJTUFfU0NIRURfUElQRV9NQVhfUFJPQ0VTU09S XTsKKwlpbnQgbnVtX3Byb2Nlc3NvcjsKKworCXN0cnVjdCBsaW1hX2lwICpiY2FzdF9wcm9jZXNz b3I7CisJc3RydWN0IGxpbWFfaXAgKmJjYXN0X21tdTsKKworCXUzMiBkb25lOworCWJvb2wgZXJy b3I7CisJYXRvbWljX3QgdGFzazsKKworCWludCBmcmFtZV9zaXplOworCXN0cnVjdCBrbWVtX2Nh Y2hlICp0YXNrX3NsYWI7CisKKwlpbnQgKCp0YXNrX3ZhbGlkYXRlKShzdHJ1Y3QgbGltYV9zY2hl ZF9waXBlICpwaXBlLCBzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKTsKKwl2b2lkICgqdGFz a19ydW4pKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsIHN0cnVjdCBsaW1hX3NjaGVkX3Rh c2sgKnRhc2spOworCXZvaWQgKCp0YXNrX2ZpbmkpKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBp cGUpOworCXZvaWQgKCp0YXNrX2Vycm9yKShzdHJ1Y3QgbGltYV9zY2hlZF9waXBlICpwaXBlKTsK Kwl2b2lkICgqdGFza19tbXVfZXJyb3IpKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpOwor CisJc3RydWN0IHdvcmtfc3RydWN0IGVycm9yX3dvcms7Cit9OworCitpbnQgbGltYV9zY2hlZF90 YXNrX2luaXQoc3RydWN0IGxpbWFfc2NoZWRfdGFzayAqdGFzaywKKwkJCSBzdHJ1Y3QgbGltYV9z Y2hlZF9jb250ZXh0ICpjb250ZXh0LAorCQkJIHN0cnVjdCBsaW1hX2JvICoqYm9zLCBpbnQgbnVt X2JvcywKKwkJCSBzdHJ1Y3QgbGltYV92bSAqdm0pOwordm9pZCBsaW1hX3NjaGVkX3Rhc2tfZmlu aShzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrKTsKK2ludCBsaW1hX3NjaGVkX3Rhc2tfYWRk X2RlcChzdHJ1Y3QgbGltYV9zY2hlZF90YXNrICp0YXNrLCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5j ZSk7CisKK2ludCBsaW1hX3NjaGVkX2NvbnRleHRfaW5pdChzdHJ1Y3QgbGltYV9zY2hlZF9waXBl ICpwaXBlLAorCQkJICAgIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRleHQgKmNvbnRleHQsCisJCQkg ICAgYXRvbWljX3QgKmd1aWx0eSk7Cit2b2lkIGxpbWFfc2NoZWRfY29udGV4dF9maW5pKHN0cnVj dCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUsCisJCQkgICAgIHN0cnVjdCBsaW1hX3NjaGVkX2NvbnRl eHQgKmNvbnRleHQpOworc3RydWN0IGRtYV9mZW5jZSAqbGltYV9zY2hlZF9jb250ZXh0X3F1ZXVl X3Rhc2soc3RydWN0IGxpbWFfc2NoZWRfY29udGV4dCAqY29udGV4dCwKKwkJCQkJCXN0cnVjdCBs aW1hX3NjaGVkX3Rhc2sgKnRhc2spOworCitpbnQgbGltYV9zY2hlZF9waXBlX2luaXQoc3RydWN0 IGxpbWFfc2NoZWRfcGlwZSAqcGlwZSwgY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIGxpbWFfc2No ZWRfcGlwZV9maW5pKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpOwordm9pZCBsaW1hX3Nj aGVkX3BpcGVfdGFza19kb25lKHN0cnVjdCBsaW1hX3NjaGVkX3BpcGUgKnBpcGUpOworCitzdGF0 aWMgaW5saW5lIHZvaWQgbGltYV9zY2hlZF9waXBlX21tdV9lcnJvcihzdHJ1Y3QgbGltYV9zY2hl ZF9waXBlICpwaXBlKQoreworCXBpcGUtPmVycm9yID0gdHJ1ZTsKKwlwaXBlLT50YXNrX21tdV9l cnJvcihwaXBlKTsKK30KKworaW50IGxpbWFfc2NoZWRfc2xhYl9pbml0KHZvaWQpOwordm9pZCBs aW1hX3NjaGVkX3NsYWJfZmluaSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbGltYS9saW1hX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xOWU4OGNhMTY1MjcKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmMKQEAgLTAsMCAr MSwyODIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wIE9SIE1JVAorLyog Q29weXJpZ2h0IDIwMTctMjAxOSBRaWFuZyBZdSA8eXVxODI1QGdtYWlsLmNvbT4gKi8KKworI2lu Y2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisj aW5jbHVkZSAibGltYV9kZXZpY2UuaCIKKyNpbmNsdWRlICJsaW1hX3ZtLmgiCisjaW5jbHVkZSAi bGltYV9vYmplY3QuaCIKKyNpbmNsdWRlICJsaW1hX3JlZ3MuaCIKKworc3RydWN0IGxpbWFfYm9f dmEgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBpbnQgcmVmX2NvdW50Owor CisJc3RydWN0IGRybV9tbV9ub2RlIG5vZGU7CisKKwlzdHJ1Y3QgbGltYV92bSAqdm07Cit9Owor CisjZGVmaW5lIExJTUFfVk1fUERfU0hJRlQgMjIKKyNkZWZpbmUgTElNQV9WTV9QVF9TSElGVCAx MgorI2RlZmluZSBMSU1BX1ZNX1BCX1NISUZUIChMSU1BX1ZNX1BEX1NISUZUICsgTElNQV9WTV9O VU1fUFRfUEVSX0JUX1NISUZUKQorI2RlZmluZSBMSU1BX1ZNX0JUX1NISUZUIExJTUFfVk1fUFRf U0hJRlQKKworI2RlZmluZSBMSU1BX1ZNX1BUX01BU0sgKCgxIDw8IExJTUFfVk1fUERfU0hJRlQp IC0gMSkKKyNkZWZpbmUgTElNQV9WTV9CVF9NQVNLICgoMSA8PCBMSU1BX1ZNX1BCX1NISUZUKSAt IDEpCisKKyNkZWZpbmUgTElNQV9QREUodmEpICh2YSA+PiBMSU1BX1ZNX1BEX1NISUZUKQorI2Rl ZmluZSBMSU1BX1BURSh2YSkgKCh2YSAmIExJTUFfVk1fUFRfTUFTSykgPj4gTElNQV9WTV9QVF9T SElGVCkKKyNkZWZpbmUgTElNQV9QQkUodmEpICh2YSA+PiBMSU1BX1ZNX1BCX1NISUZUKQorI2Rl ZmluZSBMSU1BX0JURSh2YSkgKCh2YSAmIExJTUFfVk1fQlRfTUFTSykgPj4gTElNQV9WTV9CVF9T SElGVCkKKworCitzdGF0aWMgdm9pZCBsaW1hX3ZtX3VubWFwX3BhZ2VfdGFibGUoc3RydWN0IGxp bWFfdm0gKnZtLCB1MzIgc3RhcnQsIHUzMiBlbmQpCit7CisJdTMyIGFkZHI7CisKKwlmb3IgKGFk ZHIgPSBzdGFydDsgYWRkciA8PSBlbmQ7IGFkZHIgKz0gTElNQV9QQUdFX1NJWkUpIHsKKwkJdTMy IHBiZSA9IExJTUFfUEJFKGFkZHIpOworCQl1MzIgYnRlID0gTElNQV9CVEUoYWRkcik7CisKKwkJ dm0tPmJ0c1twYmVdLmNwdVtidGVdID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbGltYV92bV9t YXBfcGFnZV90YWJsZShzdHJ1Y3QgbGltYV92bSAqdm0sIGRtYV9hZGRyX3QgKmRtYSwKKwkJCQkg IHUzMiBzdGFydCwgdTMyIGVuZCkKK3sKKwl1NjQgYWRkcjsKKwlpbnQgaSA9IDA7CisKKwlmb3Ig KGFkZHIgPSBzdGFydDsgYWRkciA8PSBlbmQ7IGFkZHIgKz0gTElNQV9QQUdFX1NJWkUpIHsKKwkJ dTMyIHBiZSA9IExJTUFfUEJFKGFkZHIpOworCQl1MzIgYnRlID0gTElNQV9CVEUoYWRkcik7CisK KwkJaWYgKCF2bS0+YnRzW3BiZV0uY3B1KSB7CisJCQlkbWFfYWRkcl90IHB0czsKKwkJCXUzMiAq cGQ7CisJCQlpbnQgajsKKworCQkJdm0tPmJ0c1twYmVdLmNwdSA9IGRtYV9hbGxvY193YygKKwkJ CQl2bS0+ZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFIDw8IExJTUFfVk1fTlVNX1BUX1BFUl9CVF9T SElGVCwKKwkJCQkmdm0tPmJ0c1twYmVdLmRtYSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwor CQkJaWYgKCF2bS0+YnRzW3BiZV0uY3B1KSB7CisJCQkJaWYgKGFkZHIgIT0gc3RhcnQpCisJCQkJ CWxpbWFfdm1fdW5tYXBfcGFnZV90YWJsZSh2bSwgc3RhcnQsIGFkZHIgLSAxKTsKKwkJCQlyZXR1 cm4gLUVOT01FTTsKKwkJCX0KKworCQkJcHRzID0gdm0tPmJ0c1twYmVdLmRtYTsKKwkJCXBkID0g dm0tPnBkLmNwdSArIChwYmUgPDwgTElNQV9WTV9OVU1fUFRfUEVSX0JUX1NISUZUKTsKKwkJCWZv ciAoaiA9IDA7IGogPCBMSU1BX1ZNX05VTV9QVF9QRVJfQlQ7IGorKykgeworCQkJCXBkW2pdID0g cHRzIHwgTElNQV9WTV9GTEFHX1BSRVNFTlQ7CisJCQkJcHRzICs9IExJTUFfUEFHRV9TSVpFOwor CQkJfQorCQl9CisKKwkJdm0tPmJ0c1twYmVdLmNwdVtidGVdID0gZG1hW2krK10gfCBMSU1BX1ZN X0ZMQUdTX0NBQ0hFOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxpbWFf Ym9fdmEgKgorbGltYV92bV9ib19maW5kKHN0cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFf Ym8gKmJvKQoreworCXN0cnVjdCBsaW1hX2JvX3ZhICpib192YSwgKnJldCA9IE5VTEw7CisKKwls aXN0X2Zvcl9lYWNoX2VudHJ5KGJvX3ZhLCAmYm8tPnZhLCBsaXN0KSB7CisJCWlmIChib192YS0+ dm0gPT0gdm0pIHsKKwkJCXJldCA9IGJvX3ZhOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1 cm4gcmV0OworfQorCitpbnQgbGltYV92bV9ib19hZGQoc3RydWN0IGxpbWFfdm0gKnZtLCBzdHJ1 Y3QgbGltYV9ibyAqYm8sIGJvb2wgY3JlYXRlKQoreworCXN0cnVjdCBsaW1hX2JvX3ZhICpib192 YTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmYm8tPmxvY2spOworCisJYm9fdmEgPSBsaW1h X3ZtX2JvX2ZpbmQodm0sIGJvKTsKKwlpZiAoYm9fdmEpIHsKKwkJYm9fdmEtPnJlZl9jb3VudCsr OworCQltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogc2hv dWxkIG5vdCBjcmVhdGUgbmV3IGJvX3ZhIGlmIG5vdCBhc2tlZCBieSBjYWxsZXIgKi8KKwlpZiAo IWNyZWF0ZSkgeworCQltdXRleF91bmxvY2soJmJvLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9FTlQ7 CisJfQorCisJYm9fdmEgPSBremFsbG9jKHNpemVvZigqYm9fdmEpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIWJvX3ZhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDA7CisJfQorCisJ Ym9fdmEtPnZtID0gdm07CisJYm9fdmEtPnJlZl9jb3VudCA9IDE7CisKKwltdXRleF9sb2NrKCZ2 bS0+bG9jayk7CisKKwllcnIgPSBkcm1fbW1faW5zZXJ0X25vZGUoJnZtLT5tbSwgJmJvX3ZhLT5u b2RlLCBiby0+Z2VtLnNpemUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDE7CisKKwllcnIg PSBsaW1hX3ZtX21hcF9wYWdlX3RhYmxlKHZtLCBiby0+cGFnZXNfZG1hX2FkZHIsIGJvX3ZhLT5u b2RlLnN0YXJ0LAorCQkJCSAgICAgYm9fdmEtPm5vZGUuc3RhcnQgKyBib192YS0+bm9kZS5zaXpl IC0gMSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0MjsKKworCW11dGV4X3VubG9jaygmdm0t PmxvY2spOworCisJbGlzdF9hZGRfdGFpbCgmYm9fdmEtPmxpc3QsICZiby0+dmEpOworCisJbXV0 ZXhfdW5sb2NrKCZiby0+bG9jayk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQyOgorCWRybV9tbV9y ZW1vdmVfbm9kZSgmYm9fdmEtPm5vZGUpOworZXJyX291dDE6CisJbXV0ZXhfdW5sb2NrKCZ2bS0+ bG9jayk7CisJa2ZyZWUoYm9fdmEpOworZXJyX291dDA6CisJbXV0ZXhfdW5sb2NrKCZiby0+bG9j ayk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBsaW1hX3ZtX2JvX2RlbChzdHJ1Y3QgbGltYV92 bSAqdm0sIHN0cnVjdCBsaW1hX2JvICpibykKK3sKKwlzdHJ1Y3QgbGltYV9ib192YSAqYm9fdmE7 CisKKwltdXRleF9sb2NrKCZiby0+bG9jayk7CisKKwlib192YSA9IGxpbWFfdm1fYm9fZmluZCh2 bSwgYm8pOworCWlmICgtLWJvX3ZhLT5yZWZfY291bnQgPiAwKSB7CisJCW11dGV4X3VubG9jaygm Ym8tPmxvY2spOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmdm0tPmxvY2spOworCisJ bGltYV92bV91bm1hcF9wYWdlX3RhYmxlKHZtLCBib192YS0+bm9kZS5zdGFydCwKKwkJCQkgYm9f dmEtPm5vZGUuc3RhcnQgKyBib192YS0+bm9kZS5zaXplIC0gMSk7CisKKwlkcm1fbW1fcmVtb3Zl X25vZGUoJmJvX3ZhLT5ub2RlKTsKKworCW11dGV4X3VubG9jaygmdm0tPmxvY2spOworCisJbGlz dF9kZWwoJmJvX3ZhLT5saXN0KTsKKworCW11dGV4X3VubG9jaygmYm8tPmxvY2spOworCisJa2Zy ZWUoYm9fdmEpOworfQorCit1MzIgbGltYV92bV9nZXRfdmEoc3RydWN0IGxpbWFfdm0gKnZtLCBz dHJ1Y3QgbGltYV9ibyAqYm8pCit7CisJc3RydWN0IGxpbWFfYm9fdmEgKmJvX3ZhOworCXUzMiBy ZXQ7CisKKwltdXRleF9sb2NrKCZiby0+bG9jayk7CisKKwlib192YSA9IGxpbWFfdm1fYm9fZmlu ZCh2bSwgYm8pOworCXJldCA9IGJvX3ZhLT5ub2RlLnN0YXJ0OworCisJbXV0ZXhfdW5sb2NrKCZi by0+bG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgbGltYV92bSAqbGltYV92bV9j cmVhdGUoc3RydWN0IGxpbWFfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxpbWFfdm0gKnZtOwor CisJdm0gPSBremFsbG9jKHNpemVvZigqdm0pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZtKQorCQly ZXR1cm4gTlVMTDsKKworCXZtLT5kZXYgPSBkZXY7CisJbXV0ZXhfaW5pdCgmdm0tPmxvY2spOwor CWtyZWZfaW5pdCgmdm0tPnJlZmNvdW50KTsKKworCXZtLT5wZC5jcHUgPSBkbWFfYWxsb2Nfd2Mo ZGV2LT5kZXYsIExJTUFfUEFHRV9TSVpFLCAmdm0tPnBkLmRtYSwKKwkJCQkgIEdGUF9LRVJORUwg fCBfX0dGUF9aRVJPKTsKKwlpZiAoIXZtLT5wZC5jcHUpCisJCWdvdG8gZXJyX291dDA7CisKKwlp ZiAoZGV2LT5kbGJ1X2NwdSkgeworCQlpbnQgZXJyID0gbGltYV92bV9tYXBfcGFnZV90YWJsZSgK KwkJCXZtLCAmZGV2LT5kbGJ1X2RtYSwgTElNQV9WQV9SRVNFUlZFX0RMQlUsCisJCQlMSU1BX1ZB X1JFU0VSVkVfRExCVSArIExJTUFfUEFHRV9TSVpFIC0gMSk7CisJCWlmIChlcnIpCisJCQlnb3Rv IGVycl9vdXQxOworCX0KKworCWRybV9tbV9pbml0KCZ2bS0+bW0sIGRldi0+dmFfc3RhcnQsIGRl di0+dmFfZW5kIC0gZGV2LT52YV9zdGFydCk7CisKKwlyZXR1cm4gdm07CisKK2Vycl9vdXQxOgor CWRtYV9mcmVlX3djKGRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSwgdm0tPnBkLmNwdSwgdm0tPnBk LmRtYSk7CitlcnJfb3V0MDoKKwlrZnJlZSh2bSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQg bGltYV92bV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBsaW1hX3ZtICp2 bSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgbGltYV92bSwgcmVmY291bnQpOworCWludCBp OworCisJZHJtX21tX3Rha2Vkb3duKCZ2bS0+bW0pOworCisJZm9yIChpID0gMDsgaSA8IExJTUFf Vk1fTlVNX0JUOyBpKyspIHsKKwkJaWYgKHZtLT5idHNbaV0uY3B1KQorCQkJZG1hX2ZyZWVfd2Mo dm0tPmRldi0+ZGV2LCBMSU1BX1BBR0VfU0laRSA8PCBMSU1BX1ZNX05VTV9QVF9QRVJfQlRfU0hJ RlQsCisJCQkJICAgIHZtLT5idHNbaV0uY3B1LCB2bS0+YnRzW2ldLmRtYSk7CisJfQorCisJaWYg KHZtLT5wZC5jcHUpCisJCWRtYV9mcmVlX3djKHZtLT5kZXYtPmRldiwgTElNQV9QQUdFX1NJWkUs IHZtLT5wZC5jcHUsIHZtLT5wZC5kbWEpOworCisJa2ZyZWUodm0pOworfQorCit2b2lkIGxpbWFf dm1fcHJpbnQoc3RydWN0IGxpbWFfdm0gKnZtKQoreworCWludCBpLCBqLCBrOworCXUzMiAqcGQs ICpwdDsKKworCWlmICghdm0tPnBkLmNwdSkKKwkJcmV0dXJuOworCisJcGQgPSB2bS0+cGQuY3B1 OworCWZvciAoaSA9IDA7IGkgPCBMSU1BX1ZNX05VTV9CVDsgaSsrKSB7CisJCWlmICghdm0tPmJ0 c1tpXS5jcHUpCisJCQljb250aW51ZTsKKworCQlwdCA9IHZtLT5idHNbaV0uY3B1OworCQlmb3Ig KGogPSAwOyBqIDwgTElNQV9WTV9OVU1fUFRfUEVSX0JUOyBqKyspIHsKKwkJCWludCBpZHggPSAo aSA8PCBMSU1BX1ZNX05VTV9QVF9QRVJfQlRfU0hJRlQpICsgajsKKworCQkJcHJpbnRrKEtFUk5f SU5GTyAibGltYSB2bSBwZCAlMDN4OiUwOHhcbiIsIGlkeCwgcGRbaWR4XSk7CisKKwkJCWZvciAo ayA9IDA7IGsgPCBMSU1BX1BBR0VfRU5UX05VTTsgaysrKSB7CisJCQkJdTMyIHB0ZSA9ICpwdCsr OworCisJCQkJaWYgKHB0ZSkKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiICBwdCAlMDN4OiUwOHhc biIsIGssIHB0ZSk7CisJCQl9CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbGltYS9saW1hX3ZtLmggYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jYWVlMmY4YTI5YjQKLS0tIC9kZXYv bnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbGltYS9saW1hX3ZtLmgKQEAgLTAsMCArMSw2MiBA QAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCisvKiBDb3B5 cmlnaHQgMjAxNy0yMDE5IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwuY29tPiAqLworCisjaWZuZGVm IF9fTElNQV9WTV9IX18KKyNkZWZpbmUgX19MSU1BX1ZNX0hfXworCisjaW5jbHVkZSA8ZHJtL2Ry bV9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKworI2RlZmluZSBMSU1BX1BBR0VfU0la RSAgICA0MDk2CisjZGVmaW5lIExJTUFfUEFHRV9NQVNLICAgIChMSU1BX1BBR0VfU0laRSAtIDEp CisjZGVmaW5lIExJTUFfUEFHRV9FTlRfTlVNIChMSU1BX1BBR0VfU0laRSAvIHNpemVvZih1MzIp KQorCisjZGVmaW5lIExJTUFfVk1fTlVNX1BUX1BFUl9CVF9TSElGVCAzCisjZGVmaW5lIExJTUFf Vk1fTlVNX1BUX1BFUl9CVCAoMSA8PCBMSU1BX1ZNX05VTV9QVF9QRVJfQlRfU0hJRlQpCisjZGVm aW5lIExJTUFfVk1fTlVNX0JUIChMSU1BX1BBR0VfRU5UX05VTSA+PiBMSU1BX1ZNX05VTV9QVF9Q RVJfQlRfU0hJRlQpCisKKyNkZWZpbmUgTElNQV9WQV9SRVNFUlZFX1NUQVJUICAweEZGRjAwMDAw CisjZGVmaW5lIExJTUFfVkFfUkVTRVJWRV9ETEJVICAgTElNQV9WQV9SRVNFUlZFX1NUQVJUCisj ZGVmaW5lIExJTUFfVkFfUkVTRVJWRV9FTkQgICAgMHgxMDAwMDAwMDAKKworc3RydWN0IGxpbWFf ZGV2aWNlOworCitzdHJ1Y3QgbGltYV92bV9wYWdlIHsKKwl1MzIgKmNwdTsKKwlkbWFfYWRkcl90 IGRtYTsKK307CisKK3N0cnVjdCBsaW1hX3ZtIHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1 Y3Qga3JlZiByZWZjb3VudDsKKworCXN0cnVjdCBkcm1fbW0gbW07CisKKwlzdHJ1Y3QgbGltYV9k ZXZpY2UgKmRldjsKKworCXN0cnVjdCBsaW1hX3ZtX3BhZ2UgcGQ7CisJc3RydWN0IGxpbWFfdm1f cGFnZSBidHNbTElNQV9WTV9OVU1fQlRdOworfTsKKworaW50IGxpbWFfdm1fYm9fYWRkKHN0cnVj dCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvLCBib29sIGNyZWF0ZSk7Cit2b2lkIGxp bWFfdm1fYm9fZGVsKHN0cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJvKTsKKwor dTMyIGxpbWFfdm1fZ2V0X3ZhKHN0cnVjdCBsaW1hX3ZtICp2bSwgc3RydWN0IGxpbWFfYm8gKmJv KTsKKworc3RydWN0IGxpbWFfdm0gKmxpbWFfdm1fY3JlYXRlKHN0cnVjdCBsaW1hX2RldmljZSAq ZGV2KTsKK3ZvaWQgbGltYV92bV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKTsKKworc3RhdGlj IGlubGluZSBzdHJ1Y3QgbGltYV92bSAqbGltYV92bV9nZXQoc3RydWN0IGxpbWFfdm0gKnZtKQor eworCWtyZWZfZ2V0KCZ2bS0+cmVmY291bnQpOworCXJldHVybiB2bTsKK30KKworc3RhdGljIGlu bGluZSB2b2lkIGxpbWFfdm1fcHV0KHN0cnVjdCBsaW1hX3ZtICp2bSkKK3sKKwlrcmVmX3B1dCgm dm0tPnJlZmNvdW50LCBsaW1hX3ZtX3JlbGVhc2UpOworfQorCit2b2lkIGxpbWFfdm1fcHJpbnQo c3RydWN0IGxpbWFfdm0gKnZtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkv ZHJtL2xpbWFfZHJtLmggYi9pbmNsdWRlL3VhcGkvZHJtL2xpbWFfZHJtLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NWEwMGZiODY3ZTYKLS0tIC9kZXYvbnVsbAor KysgYi9pbmNsdWRlL3VhcGkvZHJtL2xpbWFfZHJtLmgKQEAgLTAsMCArMSwxNjkgQEAKKy8qIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSkg T1IgTUlUICovCisvKiBDb3B5cmlnaHQgMjAxNy0yMDE4IFFpYW5nIFl1IDx5dXE4MjVAZ21haWwu Y29tPiAqLworCisjaWZuZGVmIF9fTElNQV9EUk1fSF9fCisjZGVmaW5lIF9fTElNQV9EUk1fSF9f CisKKyNpbmNsdWRlICJkcm0uaCIKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4g IkMiIHsKKyNlbmRpZgorCitlbnVtIGRybV9saW1hX3BhcmFtX2dwdV9pZCB7CisJRFJNX0xJTUFf UEFSQU1fR1BVX0lEX1VOS05PV04sCisJRFJNX0xJTUFfUEFSQU1fR1BVX0lEX01BTEk0MDAsCisJ RFJNX0xJTUFfUEFSQU1fR1BVX0lEX01BTEk0NTAsCit9OworCitlbnVtIGRybV9saW1hX3BhcmFt IHsKKwlEUk1fTElNQV9QQVJBTV9HUFVfSUQsCisJRFJNX0xJTUFfUEFSQU1fTlVNX1BQLAorCURS TV9MSU1BX1BBUkFNX0dQX1ZFUlNJT04sCisJRFJNX0xJTUFfUEFSQU1fUFBfVkVSU0lPTiwKK307 CisKKy8qKgorICogZ2V0IHZhcmlvdXMgaW5mb3JtYXRpb24gb2YgdGhlIEdQVQorICovCitzdHJ1 Y3QgZHJtX2xpbWFfZ2V0X3BhcmFtIHsKKwlfX3UzMiBwYXJhbTsgLyogaW4sIHZhbHVlIGluIGVu dW0gZHJtX2xpbWFfcGFyYW0gKi8KKwlfX3UzMiBwYWQ7ICAgLyogcGFkLCBtdXN0IGJlIHplcm8g Ki8KKwlfX3U2NCB2YWx1ZTsgLyogb3V0LCBwYXJhbWV0ZXIgdmFsdWUgKi8KK307CisKKy8qKgor ICogY3JlYXRlIGEgYnVmZmVyIGZvciB1c2VkIGJ5IEdQVQorICovCitzdHJ1Y3QgZHJtX2xpbWFf Z2VtX2NyZWF0ZSB7CisJX191MzIgc2l6ZTsgICAgLyogaW4sIGJ1ZmZlciBzaXplICovCisJX191 MzIgZmxhZ3M7ICAgLyogaW4sIGN1cnJlbnRseSBubyBmbGFncywgbXVzdCBiZSB6ZXJvICovCisJ X191MzIgaGFuZGxlOyAgLyogb3V0LCBHRU0gYnVmZmVyIGhhbmRsZSAqLworCV9fdTMyIHBhZDsg ICAgIC8qIHBhZCwgbXVzdCBiZSB6ZXJvICovCit9OworCisvKioKKyAqIGdldCBpbmZvcm1hdGlv biBvZiBhIGJ1ZmZlcgorICovCitzdHJ1Y3QgZHJtX2xpbWFfZ2VtX2luZm8geworCV9fdTMyIGhh bmRsZTsgIC8qIGluLCBHRU0gYnVmZmVyIGhhbmRsZSAqLworCV9fdTMyIHZhOyAgICAgIC8qIG91 dCwgdmlydHVhbCBhZGRyZXNzIG1hcHBlZCBpbnRvIEdQVSBNTVUgKi8KKwlfX3U2NCBvZmZzZXQ7 ICAvKiBvdXQsIHVzZWQgdG8gbW1hcCB0aGlzIGJ1ZmZlciB0byBDUFUgKi8KK307CisKKyNkZWZp bmUgTElNQV9TVUJNSVRfQk9fUkVBRCAgIDB4MDEKKyNkZWZpbmUgTElNQV9TVUJNSVRfQk9fV1JJ VEUgIDB4MDIKKworLyogYnVmZmVyIGluZm9ybWF0aW9uIHVzZWQgYnkgb25lIHRhc2sgKi8KK3N0 cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0X2JvIHsKKwlfX3UzMiBoYW5kbGU7ICAvKiBpbiwgR0VN IGJ1ZmZlciBoYW5kbGUgKi8KKwlfX3UzMiBmbGFnczsgICAvKiBpbiwgYnVmZmVyIHJlYWQvd3Jp dGUgYnkgR1BVICovCit9OworCisjZGVmaW5lIExJTUFfR1BfRlJBTUVfUkVHX05VTSA2CisKKy8q IGZyYW1lIHVzZWQgdG8gc2V0dXAgR1AgZm9yIGVhY2ggdGFzayAqLworc3RydWN0IGRybV9saW1h X2dwX2ZyYW1lIHsKKwlfX3UzMiBmcmFtZVtMSU1BX0dQX0ZSQU1FX1JFR19OVU1dOworfTsKKwor I2RlZmluZSBMSU1BX1BQX0ZSQU1FX1JFR19OVU0gMjMKKyNkZWZpbmUgTElNQV9QUF9XQl9SRUdf TlVNIDEyCisKKy8qIGZyYW1lIHVzZWQgdG8gc2V0dXAgbWFsaTQwMCBHUFUgUFAgZm9yIGVhY2gg dGFzayAqLworc3RydWN0IGRybV9saW1hX200MDBfcHBfZnJhbWUgeworCV9fdTMyIGZyYW1lW0xJ TUFfUFBfRlJBTUVfUkVHX05VTV07CisJX191MzIgbnVtX3BwOworCV9fdTMyIHdiWzMgKiBMSU1B X1BQX1dCX1JFR19OVU1dOworCV9fdTMyIHBsYnVfYXJyYXlfYWRkcmVzc1s0XTsKKwlfX3UzMiBm cmFnbWVudF9zdGFja19hZGRyZXNzWzRdOworfTsKKworLyogZnJhbWUgdXNlZCB0byBzZXR1cCBt YWxpNDUwIEdQVSBQUCBmb3IgZWFjaCB0YXNrICovCitzdHJ1Y3QgZHJtX2xpbWFfbTQ1MF9wcF9m cmFtZSB7CisJX191MzIgZnJhbWVbTElNQV9QUF9GUkFNRV9SRUdfTlVNXTsKKwlfX3UzMiBudW1f cHA7CisJX191MzIgd2JbMyAqIExJTUFfUFBfV0JfUkVHX05VTV07CisJX191MzIgdXNlX2RsYnU7 CisJX191MzIgX3BhZDsKKwl1bmlvbiB7CisJCV9fdTMyIHBsYnVfYXJyYXlfYWRkcmVzc1s4XTsK KwkJX191MzIgZGxidV9yZWdzWzRdOworCX07CisJX191MzIgZnJhZ21lbnRfc3RhY2tfYWRkcmVz c1s4XTsKK307CisKKyNkZWZpbmUgTElNQV9QSVBFX0dQICAweDAwCisjZGVmaW5lIExJTUFfUElQ RV9QUCAgMHgwMQorCisjZGVmaW5lIExJTUFfU1VCTUlUX0ZMQUdfRVhQTElDSVRfRkVOQ0UgKDEg PDwgMCkKKworLyoqCisgKiBzdWJtaXQgYSB0YXNrIHRvIEdQVQorICoKKyAqIFVzZXIgY2FuIGFs d2F5cyBtZXJnZSBtdWx0aSBzeW5jX2ZpbGUgYW5kIGRybV9zeW5jb2JqCisgKiBpbnRvIG9uZSBk cm1fc3luY29iaiBhcyBpbl9zeW5jWzBdLCBidXQgd2UgcmVzZXJ2ZQorICogaW5fc3luY1sxXSBm b3IgYW5vdGhlciB0YXNrJ3Mgb3V0X3N5bmMgdG8gYXZvaWQgdGhlCisgKiBleHBvcnQvaW1wb3J0 L21lcmdlIHBhc3Mgd2hlbiBleHBsaWNpdCBzeW5jLgorICovCitzdHJ1Y3QgZHJtX2xpbWFfZ2Vt X3N1Ym1pdCB7CisJX191MzIgY3R4OyAgICAgICAgIC8qIGluLCBjb250ZXh0IGhhbmRsZSB0YXNr IGlzIHN1Ym1pdHRlZCB0byAqLworCV9fdTMyIHBpcGU7ICAgICAgICAvKiBpbiwgd2hpY2ggcGlw ZSB0byB1c2UsIEdQL1BQICovCisJX191MzIgbnJfYm9zOyAgICAgIC8qIGluLCBhcnJheSBsZW5n dGggb2YgYm9zIGZpZWxkICovCisJX191MzIgZnJhbWVfc2l6ZTsgIC8qIGluLCBzaXplIG9mIGZy YW1lIGZpZWxkICovCisJX191NjQgYm9zOyAgICAgICAgIC8qIGluLCBhcnJheSBvZiBkcm1fbGlt YV9nZW1fc3VibWl0X2JvICovCisJX191NjQgZnJhbWU7ICAgICAgIC8qIGluLCBHUC9QUCBmcmFt ZSAqLworCV9fdTMyIGZsYWdzOyAgICAgICAvKiBpbiwgc3VibWl0IGZsYWdzICovCisJX191MzIg b3V0X3N5bmM7ICAgIC8qIGluLCBkcm1fc3luY29iaiBoYW5kbGUgdXNlZCB0byB3YWl0IHRhc2sg ZmluaXNoIGFmdGVyIHN1Ym1pc3Npb24gKi8KKwlfX3UzMiBpbl9zeW5jWzJdOyAgLyogaW4sIGRy bV9zeW5jb2JqIGhhbmRsZSB1c2VkIHRvIHdhaXQgYmVmb3JlIHN0YXJ0IHRoaXMgdGFzayAqLwor fTsKKworI2RlZmluZSBMSU1BX0dFTV9XQUlUX1JFQUQgICAweDAxCisjZGVmaW5lIExJTUFfR0VN X1dBSVRfV1JJVEUgIDB4MDIKKworLyoqCisgKiB3YWl0IHBlbmRpbmcgR1BVIHRhc2sgZmluaXNo IG9mIGEgYnVmZmVyCisgKi8KK3N0cnVjdCBkcm1fbGltYV9nZW1fd2FpdCB7CisJX191MzIgaGFu ZGxlOyAgICAgIC8qIGluLCBHRU0gYnVmZmVyIGhhbmRsZSAqLworCV9fdTMyIG9wOyAgICAgICAg ICAvKiBpbiwgQ1BVIHdhbnQgdG8gcmVhZC93cml0ZSB0aGlzIGJ1ZmZlciAqLworCV9fczY0IHRp bWVvdXRfbnM7ICAvKiBpbiwgd2FpdCB0aW1lb3V0IGluIGFic3VsdXRlIHRpbWUgKi8KK307CisK Ky8qKgorICogY3JlYXRlIGEgY29udGV4dAorICovCitzdHJ1Y3QgZHJtX2xpbWFfY3R4X2NyZWF0 ZSB7CisJX191MzIgaWQ7ICAgICAgICAgIC8qIG91dCwgY29udGV4dCBoYW5kbGUgKi8KKwlfX3Uz MiBfcGFkOyAgICAgICAgLyogcGFkLCBtdXN0IGJlIHplcm8gKi8KK307CisKKy8qKgorICogZnJl ZSBhIGNvbnRleHQKKyAqLworc3RydWN0IGRybV9saW1hX2N0eF9mcmVlIHsKKwlfX3UzMiBpZDsg ICAgICAgICAgLyogaW4sIGNvbnRleHQgaGFuZGxlICovCisJX191MzIgX3BhZDsgICAgICAgIC8q IHBhZCwgbXVzdCBiZSB6ZXJvICovCit9OworCisjZGVmaW5lIERSTV9MSU1BX0dFVF9QQVJBTSAg IDB4MDAKKyNkZWZpbmUgRFJNX0xJTUFfR0VNX0NSRUFURSAgMHgwMQorI2RlZmluZSBEUk1fTElN QV9HRU1fSU5GTyAgICAweDAyCisjZGVmaW5lIERSTV9MSU1BX0dFTV9TVUJNSVQgIDB4MDMKKyNk ZWZpbmUgRFJNX0xJTUFfR0VNX1dBSVQgICAgMHgwNAorI2RlZmluZSBEUk1fTElNQV9DVFhfQ1JF QVRFICAweDA1CisjZGVmaW5lIERSTV9MSU1BX0NUWF9GUkVFICAgIDB4MDYKKworI2RlZmluZSBE Uk1fSU9DVExfTElNQV9HRVRfUEFSQU0gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9M SU1BX0dFVF9QQVJBTSwgc3RydWN0IGRybV9saW1hX2dldF9wYXJhbSkKKyNkZWZpbmUgRFJNX0lP Q1RMX0xJTUFfR0VNX0NSRUFURSBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0xJTUFf R0VNX0NSRUFURSwgc3RydWN0IGRybV9saW1hX2dlbV9jcmVhdGUpCisjZGVmaW5lIERSTV9JT0NU TF9MSU1BX0dFTV9JTkZPIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElNQV9HRU1f SU5GTywgc3RydWN0IGRybV9saW1hX2dlbV9pbmZvKQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9H RU1fU1VCTUlUIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0dFTV9TVUJNSVQs IHN0cnVjdCBkcm1fbGltYV9nZW1fc3VibWl0KQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9HRU1f V0FJVCBEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElNQV9HRU1fV0FJVCwgc3RydWN0 IGRybV9saW1hX2dlbV93YWl0KQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9DVFhfQ1JFQVRFIERS TV9JT1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9MSU1BX0NUWF9DUkVBVEUsIHN0cnVjdCBkcm1f bGltYV9jdHhfY3JlYXRlKQorI2RlZmluZSBEUk1fSU9DVExfTElNQV9DVFhfRlJFRSBEUk1fSU9X KERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTElNQV9DVFhfRlJFRSwgc3RydWN0IGRybV9saW1hX2N0 eF9mcmVlKQorCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorCisjZW5kaWYg LyogX19MSU1BX0RSTV9IX18gKi8KLS0gCjIuMTcuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vZHJpLWRldmVs