From mboxrd@z Thu Jan 1 00:00:00 1970 From: shawn Subject: Re: [PATCH 5/5] drm/udl: initial UDL driver (v4) Date: Thu, 08 Mar 2012 22:59:21 -0800 Message-ID: <1331276361.1447.5.camel@ubuntu-SD> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-iy0-f177.google.com (mail-iy0-f177.google.com [209.85.210.177]) by gabe.freedesktop.org (Postfix) with ESMTP id 2F6BB9EAF2 for ; Thu, 8 Mar 2012 22:59:27 -0800 (PST) Received: by iaky10 with SMTP id y10so2233495iak.36 for ; Thu, 08 Mar 2012 22:59:26 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: airlied@gmail.com Cc: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org IzEgaXQgd2FzIGhlbGwgdG8gdHJ5IHRvIGFwcGx5IHRoZXNlIHBhdGNoZXMgZnJvbSB0aGUgZnJl ZWRlc2t0b3Aub3JnCm1haWxpbmcgbGlzdCBhcmNoaXZlCiggaHR0cDovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9hcmNoaXZlcy9kcmktZGV2ZWwvMjAxMi1GZWJydWFyeS8wMTkyODMuaHRtbCApCiMy IGFmdGVyIGxhcmdlbHkgZmFsbG93aW5nIHRoZSBkaXJlY3Rpb25zIGhlcmUKaHR0cHM6Ly93aWtp LnVidW50dS5jb20vS2VybmVsVGVhbS9HaXRLZXJuZWxCdWlsZCBhbmQgYXBwbHkgb24gdG9wIG9m CkxpbnVzJyBIRUFEIDlmODA1MGM0IChtYXJjaCA4KSBJIHJhbiBpbnRvIHRoaXMgZXJyb3Igd2hp bGUgY29tcGlsaW5nIAoKZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfbW9kZXNldC5jOiBJbiBmdW5j dGlvbiDigJh1ZGxfbW9kZXNldF9pbml04oCZOgpkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rl c2V0LmM6Mzk1OjE4OiBlcnJvcjog4oCYc3RydWN0CmRybV9tb2RlX2NvbmZpZ+KAmSBoYXMgbm8g bWVtYmVyIG5hbWVkIOKAmHByZWZlcl9zaGFkb3figJkKZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxf bW9kZXNldC5jOjM5NjoxODogZXJyb3I6IOKAmHN0cnVjdApkcm1fbW9kZV9jb25maWfigJkgaGFz IG5vIG1lbWJlciBuYW1lZCDigJhwcmVmZXJyZWRfZGVwdGjigJkKbWFrZVs1XTogKioqIFtkcml2 ZXJzL2dwdS9kcm0vdWRsL3VkbF9tb2Rlc2V0Lm9dIEVycm9yIDEKbWFrZVs0XTogKioqIFtkcml2 ZXJzL2dwdS9kcm0vdWRsXSBFcnJvciAyCm1ha2VbM106ICoqKiBbZHJpdmVycy9ncHUvZHJtXSBF cnJvciAyCm1ha2VbMl06ICoqKiBbZHJpdmVycy9ncHVdIEVycm9yIDIKbWFrZVsxXTogKioqIFtk cml2ZXJzXSBFcnJvciAyCgpiZWNhdXNlIHRoaXMgY291bGQgYmUgYSBwcm9ibGVtIHdpdGggY29w eWluZyB0aGUgcGF0Y2hlcyBmcm9tIHRoZQptYWlsaW5nIGxpc3QgYXJjaGl2ZSBJJ2xsIGluY2x1 ZGUgdGhlIGRpZmZzdGF0IGFuZCBmdWxsIHRleHQgdGhhdCBpCmNvcGllZCB0byBnaXQgYXBwbHkg LSwgYW5kIHRoZW4gY3RybC1ECiMjIyMjIyMjIyMjIyMjIyMjIwogZHJpdmVycy9ncHUvZHJtL0tj b25maWcgICAgICAgICAgICAgfCAgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAg ICAgICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyAgICAgICAgICB8ICAg MTEgKwogZHJpdmVycy9ncHUvZHJtL2RybV9mb3BzLmMgICAgICAgICAgfCAgICAyICsKIGRyaXZl cnMvZ3B1L2RybS9kcm1fc3R1Yi5jICAgICAgICAgIHwgICAyMiArKwogZHJpdmVycy9ncHUvZHJt L2RybV9zeXNmcy5jICAgICAgICAgfCAgICA3ICstCiBkcml2ZXJzL2dwdS9kcm0vZHJtX3VzYi5j ICAgICAgICAgICB8ICAgMzIgKysKIGRyaXZlcnMvZ3B1L2RybS91ZGwvS2NvbmZpZyAgICAgICAg IHwgICAxMCArCiBkcml2ZXJzL2dwdS9kcm0vdWRsL01ha2VmaWxlICAgICAgICB8ICAgIDYgKwog ZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfY29ubmVjdG9yLmMgfCAgMTQxICsrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYuYyAgICAgICB8ICAgOTkgKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vdWRsL3VkbF9kcnYuaCAgICAgICB8ICAxNDEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2Ry bS91ZGwvdWRsX2VuY29kZXIuYyAgIHwgICA4MCArKysrKwogZHJpdmVycy9ncHUvZHJtL3VkbC91 ZGxfZmIuYyAgICAgICAgfCAgNjE5CisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9nZW0uYyAgICAgICB8ICAyMjcgKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfbWFpbi5jICAgICAgfCAgMzM4ICsrKysrKysrKysr KysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21vZGVzZXQuYyAgIHwgIDQxNCArKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfdHJhbnNmZXIuYyAg fCAgMjUzICsrKysrKysrKysrKysrCiBpbmNsdWRlL2RybS9kcm1QLmggICAgICAgICAgICAgICAg ICB8ICAgIDIgKwogaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAgICAgICAgICAgfCAgICAyICsK IDIwIGZpbGVzIGNoYW5nZWQsIDI0MDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKCiMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkZyb206IERhdmUgQWlybGllIDxhaXJsaWVkIGF0 IHJlZGhhdC5jb20+CgpUaGlzIGFkZHMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoZSBidXNpZCBj YWxsYmFjayBzbyB1c2Vyc3BhY2UgY2FuCmRpc3Rpbmd1aXNoCnVzYiBkZXZpY2VzIGJldHRlci4K ClNpZ25lZC1vZmYtYnk6IERhdmUgQWlybGllIDxhaXJsaWVkIGF0IHJlZGhhdC5jb20+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2RybV91c2IuYyB8ICAgMzIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKIDEgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3VzYi5jIGIvZHJpdmVycy9ncHUv ZHJtL2RybV91c2IuYwppbmRleCA0NDUwMDNmLi5jYTc3YWE2IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vZHJtX3VzYi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdXNiLmMKQEAgLTg1 LDcgKzg1LDM5IEBAIHN0YXRpYyBjb25zdCBjaGFyICpkcm1fdXNiX2dldF9uYW1lKHN0cnVjdCBk cm1fZGV2aWNlCipkZXYpCiBzdGF0aWMgaW50IGRybV91c2Jfc2V0X2J1c2lkKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlcikKIHsKKwlz dHJ1Y3QgdXNiX2RyaXZlciAqdWRyaXZlciA9IGRldi0+ZHJpdmVyLT5rZHJpdmVyLnVzYjsKKwlp bnQgbGVuLCByZXQ7CisKKwltYXN0ZXItPnVuaXF1ZV9sZW4gPSA0MDsKKwltYXN0ZXItPnVuaXF1 ZV9zaXplID0gbWFzdGVyLT51bmlxdWVfbGVuOworCW1hc3Rlci0+dW5pcXVlID0ga21hbGxvYyht YXN0ZXItPnVuaXF1ZV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAobWFzdGVyLT51bmlxdWUgPT0g TlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZW4gPSBzbnByaW50ZihtYXN0ZXItPnVuaXF1 ZSwgbWFzdGVyLT51bmlxdWVfbGVuLAorCQkgICAgICAgInVzYjolcyIsIGRldl9uYW1lKCZkZXYt PnVzYmRldi0+ZGV2KSk7CisKKwlpZiAobGVuID49IG1hc3Rlci0+dW5pcXVlX2xlbikgeworCQlE Uk1fRVJST1IoImJ1ZmZlciBvdmVyZmxvdyIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVy cjsKKwl9IGVsc2UKKwkJbWFzdGVyLT51bmlxdWVfbGVuID0gbGVuOworCisJZGV2LT5kZXZuYW1l ID0ga21hbGxvYyhzdHJsZW4odWRyaXZlci0+bmFtZSkgKworCQkJICAgICAgIG1hc3Rlci0+dW5p cXVlX2xlbiArIDIsIEdGUF9LRVJORUwpOworCisJaWYgKGRldi0+ZGV2bmFtZSA9PSBOVUxMKSB7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXNwcmludGYoZGV2LT5kZXZu YW1lLCAiJXNAJXMiLCB1ZHJpdmVyLT5uYW1lLAorCQltYXN0ZXItPnVuaXF1ZSk7CisKIAlyZXR1 cm4gMDsKK2VycjoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgc3RydWN0IGRybV9idXMgZHJt X3VzYl9idXMgPSB7Ci0tIAoxLjcuNgpGcm9tOiBEYXZlIEFpcmxpZSA8YWlybGllZCBhdCByZWRo YXQuY29tPgoKYSBzdGVwIHRvd2FyZHMgY29ycmVjdCBob3QgdW5wbHVnIGZvciBVU0IgZGV2aWNl cywgd2UgbmVlZCB0bwpyZW1vdmUgdGhlIHVzZXJzcGFjZSBmYWNpbmcgYml0cyBhdCB0aGUgdW5w bHVnIHRpbWUgZm9yIGNvcnJlY3QKdWRldiBvcGVyYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBEYXZl IEFpcmxpZSA8YWlybGllZCBhdCByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1f c3lzZnMuYyB8ICAgIDcgKysrKysrLQogMSBmaWxlcyBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCmluZGV4IDYyYzM2NzUuLjVhN2JkNTEgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2dwdS9k cm0vZHJtX3N5c2ZzLmMKQEAgLTQ1NCw2ICs0NTQsOCBAQCB2b2lkIGRybV9zeXNmc19jb25uZWN0 b3JfcmVtb3ZlKHN0cnVjdCBkcm1fY29ubmVjdG9yCipjb25uZWN0b3IpCiB7CiAJaW50IGk7CiAK KwlpZiAoIWNvbm5lY3Rvci0+a2Rldi5wYXJlbnQpCisJCXJldHVybjsKIAlEUk1fREVCVUcoInJl bW92aW5nIFwiJXNcIiBmcm9tIHN5c2ZzXG4iLAogCQkgIGRybV9nZXRfY29ubmVjdG9yX25hbWUo Y29ubmVjdG9yKSk7CiAKQEAgLTQ2MSw2ICs0NjMsNyBAQCB2b2lkIGRybV9zeXNmc19jb25uZWN0 b3JfcmVtb3ZlKHN0cnVjdCBkcm1fY29ubmVjdG9yCipjb25uZWN0b3IpCiAJCWRldmljZV9yZW1v dmVfZmlsZSgmY29ubmVjdG9yLT5rZGV2LCAmY29ubmVjdG9yX2F0dHJzW2ldKTsKIAlzeXNmc19y ZW1vdmVfYmluX2ZpbGUoJmNvbm5lY3Rvci0+a2Rldi5rb2JqLCAmZWRpZF9hdHRyKTsKIAlkZXZp Y2VfdW5yZWdpc3RlcigmY29ubmVjdG9yLT5rZGV2KTsKKwljb25uZWN0b3ItPmtkZXYucGFyZW50 ID0gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUpOwog CkBAIC01MzMsNyArNTM2LDkgQEAgZXJyX291dDoKICAqLwogdm9pZCBkcm1fc3lzZnNfZGV2aWNl X3JlbW92ZShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKIHsKLQlkZXZpY2VfdW5yZWdpc3Rlcigm bWlub3ItPmtkZXYpOworCWlmIChtaW5vci0+a2Rldi5wYXJlbnQpCisJCWRldmljZV91bnJlZ2lz dGVyKCZtaW5vci0+a2Rldik7CisJbWlub3ItPmtkZXYucGFyZW50ID0gTlVMTDsKIH0KIAogCi0t ICAgICAgCjEuNy42CkZyb206IERhdmUgQWlybGllIDxhaXJsaWVkIGF0IHJlZGhhdC5jb20+CgpJ biBvcmRlciB0byBnZXQgY29ycmVjdCBvcmRlcmluZyBhdCBob3QtdW5wbHVnIGZvciB1c2Vyc3Bh Y2UsCndlIG5lZWQgdG8gdGVhciBkb3duIGFsbCB0aGUgc3lzZnMgYml0cyBhdCB0aGUgY29ycmVj dCB0aW1lLgoKVGhpcyBhZGRzIGEgaGVscGVyIHRvIGFsbG93IGRyaXZlcnMgdG8gcmVtb3ZlIHRo ZSBzeXNmcyBub2Rlcwpmb3IgYWxsIGNvbm5lY3RvcnMuCgpTaWduZWQtb2ZmLWJ5OiBEYXZlIEFp cmxpZSA8YWlybGllZCBhdCByZWRoYXQuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9kcm1fY3J0 Yy5jIHwgICAxMSArKysrKysrKysrKwogaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAgfCAgICAy ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2NydGMuYwppbmRleCAyYzI3YTJlLi5lNmEyYTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwpAQCAtNTIz LDYgKzUyMywxNyBAQCB2b2lkIGRybV9jb25uZWN0b3JfY2xlYW51cChzdHJ1Y3QgZHJtX2Nvbm5l Y3RvcgoqY29ubmVjdG9yKQogfQogRVhQT1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX2NsZWFudXAp OwogCit2b2lkIGRybV9jb25uZWN0b3JfdW5wbHVnX2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwkvKiB0YWtpbmcgdGhl IG1vZGUgY29uZmlnIG11dGV4IGVuZHMgdXAgaW4gYSBjbGFzaCB3aXRoIHN5c2ZzICovCisJbGlz dF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9s aXN0LCBoZWFkKQorCQlkcm1fc3lzZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOworCit9 CitFWFBPUlRfU1lNQk9MKGRybV9jb25uZWN0b3JfdW5wbHVnX2FsbCk7CisKIHZvaWQgZHJtX2Vu Y29kZXJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkgICAgICBzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyAq ZnVuY3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0v ZHJtX2NydGMuaAppbmRleCA3ODMzMjJiLi45MjdlMzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2Ry bS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTgyNSw2ICs4MjUs OCBAQCBleHRlcm4gdm9pZCBkcm1fY29ubmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UKKmRl diwKIAkJCSAgICBpbnQgY29ubmVjdG9yX3R5cGUpOwogCiBleHRlcm4gdm9pZCBkcm1fY29ubmVj dG9yX2NsZWFudXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CisvKiBoZWxwZXIg dG8gdW5wbHVnIGFsbCBjb25uZWN0b3JzIGZyb20gc3lzZnMgZm9yIGRldmljZSAqLworZXh0ZXJu IHZvaWQgZHJtX2Nvbm5lY3Rvcl91bnBsdWdfYWxsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwog CiBleHRlcm4gdm9pZCBkcm1fZW5jb2Rlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ CQkgICAgIHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKLS0gCjEuNy42CkZyb206IERhdmUg QWlybGllIDxhaXJsaWVkIGF0IHJlZGhhdC5jb20+CgpUd28gcGFydHMgdG8gdGhpcywgb25lIGlz IHNpbXBsZSB1bnBsdWcgZnJvbSBzeXNmcyBmb3IgdGhlIGRldmljZSBub2RlLgoKVGhlIHNlY29u ZCBhZGRzIGFuIHVucGx1Z2dlZCBzdGF0ZSwgaWYgd2UgaGF2ZSBkZXZpY2Ugb3BlbnMsIHdlCmp1 c3Qgc2V0IHRoZSB1bnBsdWdnZWQgc3RhdGUgYW5kIHJldHVybiwgaWYgd2UgaGF2ZSBubyBkZXZp Y2UKb3BlbnMgd2UgZHJvcCB0aGUgZHJtIGRldmljZS4KCklmIGFmdGVyIGEgbGFzdGNsb3NlIHdl IGRpc2NvdmVyIHdlIGFyZSB1bnBsdWdnZWQgd2UgdGhlbgpkcm9wIHRoZSBkcm0gZGV2aWNlLgoK U2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFpcmxpZWQgYXQgcmVkaGF0LmNvbT4KLS0tCiBk cml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyB8ICAgIDIgKysKIGRyaXZlcnMvZ3B1L2RybS9kcm1f c3R1Yi5jIHwgICAyMiArKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2RybS9kcm1QLmgg ICAgICAgICB8ICAgIDIgKysKIDMgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IDYyNjNiMDEuLjE1NGNmYWMgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f Zm9wcy5jCkBAIC01NzksNiArNTc5LDggQEAgaW50IGRybV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlCipmaWxwKQogCQkJcmV0Y29kZSA9IC1FQlVTWTsKIAkJfSBlbHNl CiAJCQlyZXRjb2RlID0gZHJtX2xhc3RjbG9zZShkZXYpOworCQlpZiAoZGV2LT51bnBsdWdnZWQp CisJCQlkcm1fcHV0X2RldihkZXYpOwogCX0KIAltdXRleF91bmxvY2soJmRybV9nbG9iYWxfbXV0 ZXgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N0dWIuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fc3R1Yi5jCmluZGV4IDZkN2IwODMuLmIwNGM5MmQgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5j CkBAIC00MjksNiArNDI5LDExIEBAIGludCBkcm1fcHV0X21pbm9yKHN0cnVjdCBkcm1fbWlub3Ig KiptaW5vcl9wKQogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBkcm1fdW5wbHVnX21pbm9y KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9zeXNmc19kZXZpY2VfcmVtb3ZlKG1p bm9yKTsKK30KKwogLyoqCiAgKiBDYWxsZWQgdmlhIGRybV9leGl0KCkgYXQgbW9kdWxlIHVubG9h ZCB0aW1lIG9yIHdoZW4gcGNpIGRldmljZSBpcwogICogdW5wbHVnZ2VkLgpAQCAtNDkyLDMgKzQ5 NywyMCBAQCB2b2lkIGRybV9wdXRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJa2ZyZWUo ZGV2KTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX3B1dF9kZXYpOworCit2b2lkIGRybV91bnBsdWdf ZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJLyogZm9yIGEgVVNCIGRldmljZSAqLwor CWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlkcm1f dW5wbHVnX21pbm9yKGRldi0+Y29udHJvbCk7CisJZHJtX3VucGx1Z19taW5vcihkZXYtPnByaW1h cnkpOworCisJZGV2LT51bnBsdWdnZWQgPSB0cnVlOworCisJbXV0ZXhfbG9jaygmZHJtX2dsb2Jh bF9tdXRleCk7CisJaWYgKGRldi0+b3Blbl9jb3VudCA9PSAwKSB7CisJCWRybV9wdXRfZGV2KGRl dik7CisJfQorCW11dGV4X3VubG9jaygmZHJtX2dsb2JhbF9tdXRleCk7Cit9CitFWFBPUlRfU1lN Qk9MKGRybV91bnBsdWdfZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2lu Y2x1ZGUvZHJtL2RybVAuaAppbmRleCA5MmYwOTgxLi44YzExNzk3IDEwMDY0NAotLS0gYS9pbmNs dWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC0xMTcwLDYgKzExNzAs NyBAQCBzdHJ1Y3QgZHJtX2RldmljZSB7CiAJc3RydWN0IGlkciBvYmplY3RfbmFtZV9pZHI7CiAJ LypAfSAqLwogCWludCBzd2l0Y2hfcG93ZXJfc3RhdGU7CisJYm9vbCB1bnBsdWdnZWQ7IC8qIGRl dmljZSBoYXMgYmVlbiB1bnBsdWdnZWQgb3IgZ29uZSBhd2F5ICovCiB9OwogCiAjZGVmaW5lIERS TV9TV0lUQ0hfUE9XRVJfT04gMApAQCAtMTQ2NCw2ICsxNDY1LDcgQEAgZXh0ZXJuIHZvaWQgZHJt X21hc3Rlcl9wdXQoc3RydWN0IGRybV9tYXN0ZXIKKiptYXN0ZXIpOwogCiBleHRlcm4gdm9pZCBk cm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZHJtX3B1dF9t aW5vcihzdHJ1Y3QgZHJtX21pbm9yICoqbWlub3IpOworZXh0ZXJuIHZvaWQgZHJtX3VucGx1Z19k ZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdW5zaWduZWQgaW50IGRybV9kZWJ1 ZzsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBkcm1fdmJsYW5rX29mZmRlbGF5OwotLSAKMS43LjYK CkZyb206IERhdmUgQWlybGllIDxhaXJsaWVkIGF0IHJlZGhhdC5jb20+CgpUaGlzIGlzIGFuIGlu aXRpYWwgZHJtL2ttcyBkcml2ZXIgZm9yIHRoZSBkaXNwbGF5bGluayBkZXZpY2VzLgoKU3VwcG9y dHMgZmJfZGVmaW8sCnN1cHBvcnRzIEtNUyBkdW1iIGludGVyZmFjZQpzdXBwb3J0cyAyNGJwcCB2 aWEgY29udmVyc2lvbiB0byAxNmJwcCwgaHcgY2FuIGRvIHRoaXMgYmV0dGVyLgpzdXBwb3J0cyBo b3QgdW5wbHVnIHVzaW5nIG5ldyBkcm0gY29yZSBmZWF0dXJlcy4KCk9uIGFuIHVucGx1ZywgaXQg ZGlzYWJsZXMgY29ubmVjdG9yIHBvbGxpbmcsIHVucGx1Z3MgY29ubmVjdG9ycwpmcm9tIHN5c2Zz LCB1bnBsdWdzIGZiZGV2IGxheWVyICh1c2luZyBLYXkncyBBUEkpLCBkcm9wcyBhbGwgdGhlClVT QiBkZXZpY2UgVVJCcywgYW5kIGNhbGwgdGhlIGRybSBjb3JlIHRvIHVucGx1ZyB0aGUgZGV2aWNl LgoKVGhpcyBkcml2ZXIgaXMgYmFzZWQgaW4gbGFyZ2UgcGFydHMgb24gdWRsZmIuYyBzbyBJJ3Zl IGxpY2Vuc2VkCml0IHVuZGVyIEdQTHYyLgoKU2lnbmVkLW9mZi1ieTogRGF2ZSBBaXJsaWUgPGFp cmxpZWQgYXQgcmVkaGF0LmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAg ICAgICB8ICAgIDEgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAgfCAgICAx ICsKIGRyaXZlcnMvZ3B1L2RybS91ZGwvS2NvbmZpZyAgICAgICAgIHwgICAxMCArCiBkcml2ZXJz L2dwdS9kcm0vdWRsL01ha2VmaWxlICAgICAgICB8ICAgIDYgKwogZHJpdmVycy9ncHUvZHJtL3Vk bC91ZGxfY29ubmVjdG9yLmMgfCAgMTQxICsrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdWRsL3Vk bF9kcnYuYyAgICAgICB8ICAgOTkgKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYu aCAgICAgICB8ICAxNDEgKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2VuY29kZXIu YyAgIHwgICA4MCArKysrKwogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZmIuYyAgICAgICAgfCAg NjE5CisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0v dWRsL3VkbF9nZW0uYyAgICAgICB8ICAyMjcgKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJt L3VkbC91ZGxfbWFpbi5jICAgICAgfCAgMzM4ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMv Z3B1L2RybS91ZGwvdWRsX21vZGVzZXQuYyAgIHwgIDQxNCArKysrKysrKysrKysrKysrKysrKysr KwogZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfdHJhbnNmZXIuYyAgfCAgMjUzICsrKysrKysrKysr KysrCiAxMyBmaWxlcyBjaGFuZ2VkLCAyMzMwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3VkbC9LY29uZmlnCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3VkbC9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2Nvbm5lY3Rvci5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS91ZGwvdWRsX2VuY29kZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2Ry bS91ZGwvdWRsX2ZiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vdWRsL3Vk bF9nZW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21haW4u YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21vZGVzZXQuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX3RyYW5zZmVyLmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29u ZmlnCmluZGV4IDI0MTg0MjkuLmVkMmY2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9L Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0xNjUsMyArMTY1LDQgQEAg c291cmNlICJkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVy cy9ncHUvZHJtL2dtYTUwMC9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS91ZGwv S2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZQppbmRleCAwY2RlMWI4Li43ZjIwMjk3IDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0z Nyw0ICszNyw1IEBAIG9iai0kKENPTkZJR19EUk1fVklBKQkrPXZpYS8KIG9iai0kKENPTkZJR19E Uk1fTk9VVkVBVSkgKz1ub3V2ZWF1Lwogb2JqLSQoQ09ORklHX0RSTV9FWFlOT1MpICs9ZXh5bm9z Lwogb2JqLSQoQ09ORklHX0RSTV9HTUE1MDApICs9IGdtYTUwMC8KK29iai0kKENPTkZJR19EUk1f VURMKSArPSB1ZGwvCiBvYmoteQkJCSs9IGkyYy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS91ZGwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvS2NvbmZpZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDY0MmMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3VkbC9LY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKK2NvbmZpZyBEUk1fVURMCisJ dHJpc3RhdGUgIkRpc3BsYXlMaW5rIgorCWRlcGVuZHMgb24gRFJNICYmIFVTQgorCXNlbGVjdCBG Ql9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisJc2VsZWN0IEZCX1NZU19J TUFHRUJMSVQKKwlzZWxlY3QgRFJNX0tNU19IRUxQRVIKKwloZWxwCisJICBUaGlzIGlzIGEgS01T IGRyaXZlciBmb3IgdGhlIFVTQiBkaXNwbGF5bGluayB2aWRlbyBhZGFwdGVycy4KKyAgICAgICAg ICBTYXkgTS9ZIHRvIGFkZCBzdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIHZpYSBkcm0va21zCmlu dGVyZmFjZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRsL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL3VkbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4wNWM3NDgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC9NYWtl ZmlsZQpAQCAtMCwwICsxLDYgQEAKKworY2NmbGFncy15IDo9IC1JaW5jbHVkZS9kcm0KKwordWRs LXkgOj0gdWRsX2Rydi5vIHVkbF9tb2Rlc2V0Lm8gdWRsX2Nvbm5lY3Rvci5vIHVkbF9lbmNvZGVy Lm8KdWRsX21haW4ubyB1ZGxfZmIubyB1ZGxfdHJhbnNmZXIubyB1ZGxfZ2VtLm8KKworb2JqLSQo Q09ORklHX0RSTV9VREwpIDo9IHVkbC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9jb25uZWN0b3IuYwpiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX2Nvbm5lY3Rvci5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MmQ0NjAKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9jb25uZWN0b3IuYwpAQCAtMCwwICsxLDE0MSBA QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0CisgKiBiYXNlZCBpbiBwYXJ0cyBv biB1ZGxmYi5jOgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVy dG8gYXQgdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1 bWFyLmxrbWwgYXQgZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9t cHNvbiA8YmVybmllIGF0IHBsdWdhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVj dCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsClB1YmxpYwor ICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5 IG9mIHRoaXMKYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAi ZHJtUC5oIgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtX2VkaWQuaCIKKyNp bmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJ1ZGxfZHJ2LmgiCisKKy8qIGR1 bW15IGNvbm5lY3RvciB0byBqdXN0IGdldCBFRElELAorICAgYWxsIFVETCBhcHBlYXIgdG8gaGF2 ZSBhIERWSS1EICovCisKK3N0YXRpYyB1OCAqdWRsX2dldF9lZGlkKHN0cnVjdCB1ZGxfZGV2aWNl ICp1ZGwpCit7CisJdTggKmJsb2NrOworCWNoYXIgcmJ1ZlszXTsKKwlpbnQgcmV0LCBpOworCisJ YmxvY2sgPSBrbWFsbG9jKEVESURfTEVOR1RILCBHRlBfS0VSTkVMKTsKKwlpZiAoYmxvY2sgPT0g TlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgRURJRF9MRU5HVEg7IGkr KykgeworCQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRsLT5kZGV2LT51c2JkZXYsCisJCQkJICAg ICAgdXNiX3JjdmN0cmxwaXBlKHVkbC0+ZGRldi0+dXNiZGV2LCAwKSwgKDB4MDIpLAorCQkJCSAg ICAgICgweDgwIHwgKDB4MDIgPDwgNSkpLCBpIDw8IDgsIDB4QTEsIHJidWYsIDIsCisJCQkJICAg ICAgSFopOworCQlpZiAocmV0IDwgMSkgeworCQkJRFJNX0VSUk9SKCJSZWFkIEVESUQgYnl0ZSAl ZCBmYWlsZWQgZXJyICV4XG4iLCBpLCByZXQpOworCQkJaS0tOworCQkJZ290byBlcnJvcjsKKwkJ fQorCQlibG9ja1tpXSA9IHJidWZbMV07CisJfQorCisJcmV0dXJuIGJsb2NrOworCitlcnJvcjoK KwlrZnJlZShibG9jayk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdWRsX2dldF9t b2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCB1ZGxfZGV2 aWNlICp1ZGwgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGVkaWQgKmVk aWQ7CisJaW50IHJldDsKKworCWVkaWQgPSAoc3RydWN0IGVkaWQgKil1ZGxfZ2V0X2VkaWQodWRs KTsKKworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gKGNoYXIgKillZGlkOwor CisJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRp ZCk7CisJcmV0ID0gZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3RvciwgZWRpZCk7CisJY29ubmVj dG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOworCWtmcmVlKGVkaWQpOworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdWRsX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm5lY3RvciwKKwkJCSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCit1ZGxfZGV0 ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGJvb2wgZm9yY2UpCit7CisJaWYg KGNvbm5lY3Rvci0+ZGV2LT51bnBsdWdnZWQpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rp c2Nvbm5lY3RlZDsKKwlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7Cit9CisKK3N0 cnVjdCBkcm1fZW5jb2RlciAqdWRsX2Jlc3Rfc2luZ2xlX2VuY29kZXIoc3RydWN0IGRybV9jb25u ZWN0b3IKKmNvbm5lY3RvcikKK3sKKwlpbnQgZW5jX2lkID0gY29ubmVjdG9yLT5lbmNvZGVyX2lk c1swXTsKKwlzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmo7CisJc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyOworCisJb2JqID0gZHJtX21vZGVfb2JqZWN0X2ZpbmQoY29ubmVjdG9yLT5kZXYs IGVuY19pZCwKRFJNX01PREVfT0JKRUNUX0VOQ09ERVIpOworCWlmICghb2JqKQorCQlyZXR1cm4g TlVMTDsKKwllbmNvZGVyID0gb2JqX3RvX2VuY29kZXIob2JqKTsKKwlyZXR1cm4gZW5jb2RlcjsK K30KKworaW50IHVkbF9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IsIHN0cnVjdApkcm1fcHJvcGVydHkgKnByb3BlcnR5LAorCQkJICAgICAgIHVp bnQ2NF90IHZhbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdWRsX2Nvbm5lY3Rv cl9kZXN0cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJZHJtX3N5c2Zz X2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29u bmVjdG9yKTsKKwlrZnJlZShjb25uZWN0b3IpOworfQorCitzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MgdWRsX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9 IHVkbF9nZXRfbW9kZXMsCisJLm1vZGVfdmFsaWQgPSB1ZGxfbW9kZV92YWxpZCwKKwkuYmVzdF9l bmNvZGVyID0gdWRsX2Jlc3Rfc2luZ2xlX2VuY29kZXIsCit9OworCitzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9mdW5jcyB1ZGxfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2hlbHBlcl9j b25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gdWRsX2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRy bV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJveSA9IHVkbF9j b25uZWN0b3JfZGVzdHJveSwKKwkuc2V0X3Byb3BlcnR5ID0gdWRsX2Nvbm5lY3Rvcl9zZXRfcHJv cGVydHksCit9OworCitpbnQgdWRsX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsIHN0cnVjdCBkcm1fZW5jb2RlcgoqZW5jb2RlcikKK3sKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yOworCisJY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRybV9j b25uZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbm5lY3RvcikKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ1ZGxfY29ubmVjdG9y X2Z1bmNzLApEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSk7CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKGNvbm5lY3RvciwgJnVkbF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCWRybV9zeXNm c19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7CisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9l bmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CisKKwlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9w ZXJ0eShjb25uZWN0b3IsCisJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5kaXJ0eV9pbmZvX3By b3BlcnR5LAorCQkJCSAgICAgIDEpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmMKYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9kcnYuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWIyNmQwCi0tLSAvZGV2L251bGwK KysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmMKQEAgLTAsMCArMSw5OSBAQAorLyoK KyAqIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0CisgKgorICogVGhpcyBmaWxlIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbApQdWJsaWMK KyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9y eSBvZiB0aGlzCmFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgImRybV91c2IuaCIKKyNpbmNsdWRlICJkcm1fY3J0 Y19oZWxwZXIuaCIKKyNpbmNsdWRlICJ1ZGxfZHJ2LmgiCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2Ry aXZlciBkcml2ZXI7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0g eworCXsuaWRWZW5kb3IgPSAweDE3ZTksIC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFU Q0hfVkVORE9SLH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxl KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IHVkbF91c2JfcHJvYmUo c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2Rl dmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGRybV9nZXRfdXNiX2RldihpbnRlcmZhY2UsIGlkLCAm ZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgdWRsX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2Jf aW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVzYl9n ZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKworCWRybV9rbXNfaGVscGVyX3BvbGxfZGlzYWJsZShk ZXYpOworCWRybV9jb25uZWN0b3JfdW5wbHVnX2FsbChkZXYpOworCXVkbF9mYmRldl91bnBsdWco ZGV2KTsKKwl1ZGxfZHJvcF91c2IoZGV2KTsKKwlkcm1fdW5wbHVnX2RldihkZXYpOworfQorCitz dGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHVkbF9nZW1fdm1fb3BzID0geworCS5m YXVsdCA9IHVkbF9nZW1fZmF1bHQsCisJLm9wZW4gPSBkcm1fZ2VtX3ZtX29wZW4sCisJLmNsb3Nl ID0gZHJtX2dlbV92bV9jbG9zZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVy YXRpb25zIHVkbF9kcml2ZXJfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3Bl biA9IGRybV9vcGVuLAorCS5tbWFwID0gZHJtX2dlbV9tbWFwLAorCS5wb2xsID0gZHJtX3BvbGws CisJLnJlYWQgPSBkcm1fcmVhZCwKKwkudW5sb2NrZWRfaW9jdGwJPSBkcm1faW9jdGwsCisJLnJl bGVhc2UgPSBkcm1fcmVsZWFzZSwKKwkuZmFzeW5jID0gZHJtX2Zhc3luYywKKwkubGxzZWVrID0g bm9vcF9sbHNlZWssCit9OworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyID0gewor CS5kcml2ZXJfZmVhdHVyZXMgPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0sCisJLmxvYWQg PSB1ZGxfZHJpdmVyX2xvYWQsCisJLnVubG9hZCA9IHVkbF9kcml2ZXJfdW5sb2FkLAorCisJLyog Z2VtIGhvb2tzICovCisJLmdlbV9pbml0X29iamVjdCA9IHVkbF9nZW1faW5pdF9vYmplY3QsCisJ LmdlbV9mcmVlX29iamVjdCA9IHVkbF9nZW1fZnJlZV9vYmplY3QsCisJLmdlbV92bV9vcHMgPSAm dWRsX2dlbV92bV9vcHMsCisKKwkuZHVtYl9jcmVhdGUgPSB1ZGxfZHVtYl9jcmVhdGUsCisJLmR1 bWJfbWFwX29mZnNldCA9IHVkbF9nZW1fbW1hcCwKKwkuZHVtYl9kZXN0cm95ID0gdWRsX2R1bWJf ZGVzdHJveSwKKwkuZm9wcyA9ICZ1ZGxfZHJpdmVyX2ZvcHMsCisJLm5hbWUgPSBEUklWRVJfTkFN RSwKKwkuZGVzYyA9IERSSVZFUl9ERVNDLAorCS5kYXRlID0gRFJJVkVSX0RBVEUsCisJLm1ham9y ID0gRFJJVkVSX01BSk9SLAorCS5taW5vciA9IERSSVZFUl9NSU5PUiwKKwkucGF0Y2hsZXZlbCA9 IERSSVZFUl9QQVRDSExFVkVMLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHVkbF9k cml2ZXIgPSB7CisJLm5hbWUgPSAidWRsIiwKKwkucHJvYmUgPSB1ZGxfdXNiX3Byb2JlLAorCS5k aXNjb25uZWN0ID0gdWRsX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGlkX3RhYmxlLAor fTsKKworc3RhdGljIGludCBfX2luaXQgdWRsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJtX3Vz Yl9pbml0KCZkcml2ZXIsICZ1ZGxfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHVk bF9leGl0KHZvaWQpCit7CisJZHJtX3VzYl9leGl0KCZkcml2ZXIsICZ1ZGxfZHJpdmVyKTsKK30K KworbW9kdWxlX2luaXQodWRsX2luaXQpOworbW9kdWxlX2V4aXQodWRsX2V4aXQpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmgKYi9kcml2ZXJzL2dwdS9kcm0vdWRs L3VkbF9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjEyOTU0Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZHJ2LmgKQEAgLTAsMCAr MSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdAorICoKKyAqIGJhc2Vk IGluIHBhcnRzIG9uIHVkbGZiLmM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUm9iZXJ0byBEZSBJ b3JpcyA8cm9iZXJ0byBhdCB1bmJpdC5pdD4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKYXlhIEt1 bWFyIDxqYXlha3VtYXIubGttbCBhdCBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg QmVybmllIFRob21wc29uIDxiZXJuaWUgYXQgcGx1Z2FibGUuY29tPgorICoKKyAqIFRoaXMgZmls ZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVy YWwKUHVibGljCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFp biBkaXJlY3Rvcnkgb2YgdGhpcwphcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisK KyNpZm5kZWYgVURMX0RSVl9ICisjZGVmaW5lIFVETF9EUlZfSAorCisjaW5jbHVkZSA8bGludXgv dXNiLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJ1ZGwiCisjZGVmaW5lIERSSVZFUl9ERVND CQkiRGlzcGxheUxpbmsiCisjZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAxMjAyMjAiCisKKyNkZWZp bmUgRFJJVkVSX01BSk9SCQkwCisjZGVmaW5lIERSSVZFUl9NSU5PUgkJMAorI2RlZmluZSBEUklW RVJfUEFUQ0hMRVZFTAkxCisKK3N0cnVjdCB1ZGxfZGV2aWNlOworCitzdHJ1Y3QgdXJiX25vZGUg eworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJc3RydWN0IHVkbF9kZXZpY2UgKmRldjsKKwlz dHJ1Y3QgZGVsYXllZF93b3JrIHJlbGVhc2VfdXJiX3dvcms7CisJc3RydWN0IHVyYiAqdXJiOwor fTsKKworc3RydWN0IHVyYl9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3Bpbmxv Y2tfdCBsb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgbGltaXRfc2VtOworCWludCBhdmFpbGFibGU7 CisJaW50IGNvdW50OworCXNpemVfdCBzaXplOworfTsKKworc3RydWN0IHVkbF9mYmRldjsKKwor c3RydWN0IHVkbF9kZXZpY2UgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2Rl dmljZSAqZGRldjsKKworCWludCBza3VfcGl4ZWxfbGltaXQ7CisKKwlzdHJ1Y3QgdXJiX2xpc3Qg dXJiczsKKwlhdG9taWNfdCBsb3N0X3BpeGVsczsgLyogMSA9IGEgcmVuZGVyIG9wIGZhaWxlZC4g TmVlZCBzY3JlZW4gcmVmcmVzaAoqLworCisJc3RydWN0IHVkbF9mYmRldiAqZmJkZXY7CisJY2hh ciBtb2RlX2J1ZlsxMDI0XTsKKwl1aW50MzJfdCBtb2RlX2J1Zl9sZW47CisJYXRvbWljX3QgYnl0 ZXNfcmVuZGVyZWQ7IC8qIHJhdyBwaXhlbC1ieXRlcyBkcml2ZXIgYXNrZWQgdG8gcmVuZGVyICov CisJYXRvbWljX3QgYnl0ZXNfaWRlbnRpY2FsOyAvKiBzYXZlZCBlZmZvcnQgd2l0aCBiYWNrYnVm ZmVyIGNvbXBhcmlzb24KKi8KKwlhdG9taWNfdCBieXRlc19zZW50OyAvKiB0byB1c2IsIGFmdGVy IGNvbXByZXNzaW9uIGluY2x1ZGluZyBvdmVyaGVhZAoqLworCWF0b21pY190IGNwdV9rY3ljbGVz X3VzZWQ7IC8qIHRyYW5zcGlyZWQgZHVyaW5nIHBpeGVsIHByb2Nlc3NpbmcgKi8KK307CisKK3N0 cnVjdCB1ZGxfZ2VtX29iamVjdCB7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0IGJhc2U7CisJc3Ry dWN0IHBhZ2UgKipwYWdlczsKKwl2b2lkICp2bWFwcGluZzsKK307CisKKyNkZWZpbmUgdG9fdWRs X2JvKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdWRsX2dlbV9vYmplY3QsIGJhc2UpCisKK3N0 cnVjdCB1ZGxfZnJhbWVidWZmZXIgeworCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgYmFzZTsKKwlz dHJ1Y3QgdWRsX2dlbV9vYmplY3QgKm9iajsKKwlib29sIGFjdGl2ZV8xNjsgLyogYWN0aXZlIG9u IHRoZSAxNi1iaXQgY2hhbm5lbCAqLworfTsKKworI2RlZmluZSB0b191ZGxfZmIoeCkgY29udGFp bmVyX29mKHgsIHN0cnVjdCB1ZGxfZnJhbWVidWZmZXIsIGJhc2UpCisKKy8qIG1vZGVzZXQgKi8K K2ludCB1ZGxfbW9kZXNldF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwordm9pZCB1ZGxf bW9kZXNldF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworaW50IHVkbF9jb25uZWN0 b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2VuY29kZXIKKmVuY29k ZXIpOworCitzdHJ1Y3QgZHJtX2VuY29kZXIgKnVkbF9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9k ZXZpY2UgKmRldik7CisKK3N0cnVjdCB1cmIgKnVkbF9nZXRfdXJiKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOworCitpbnQgdWRsX3N1Ym1pdF91cmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3Ry dWN0IHVyYiAqdXJiLCBzaXplX3QKbGVuKTsKK3ZvaWQgdWRsX3VyYl9jb21wbGV0aW9uKHN0cnVj dCB1cmIgKnVyYik7CisKK2ludCB1ZGxfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRl diwgdW5zaWduZWQgbG9uZyBmbGFncyk7CitpbnQgdWRsX2RyaXZlcl91bmxvYWQoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7CisKK2ludCB1ZGxfZmJkZXZfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKK3ZvaWQgdWRsX2ZiZGV2X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cit2 b2lkIHVkbF9mYmRldl91bnBsdWcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitzdHJ1Y3QgZHJt X2ZyYW1lYnVmZmVyICoKK3VkbF9mYl91c2VyX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LAorCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUsCisJCSAgICAgIHN0cnVjdCBkcm1f bW9kZV9mYl9jbWQyICptb2RlX2NtZCk7CisKK2ludCB1ZGxfcmVuZGVyX2hsaW5lKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsIGludCBicHAsIHN0cnVjdCB1cmIKKip1cmJfcHRyLAorCQkgICAgIGNv bnN0IGNoYXIgKmZyb250LCBjaGFyICoqdXJiX2J1Zl9wdHIsCisJCSAgICAgdTMyIGJ5dGVfb2Zm c2V0LCB1MzIgYnl0ZV93aWR0aCwKKwkJICAgICBpbnQgKmlkZW50X3B0ciwgaW50ICpzZW50X3B0 cik7CisKK2ludCB1ZGxfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCisJ CSAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iICphcmdzKTsKK2ludCB1ZGxfZ2VtX21tYXAoc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90 ICpvZmZzZXQpOworaW50IHVkbF9kdW1iX2Rlc3Ryb3koc3RydWN0IGRybV9maWxlICpmaWxlX3By aXYsIHN0cnVjdCBkcm1fZGV2aWNlCipkZXYsCisJCSAgICAgdWludDMyX3QgaGFuZGxlKTsKKwor aW50IHVkbF9nZW1faW5pdF9vYmplY3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwordm9p ZCB1ZGxfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtX29iaik7Citz dHJ1Y3QgdWRsX2dlbV9vYmplY3QgKnVkbF9nZW1fYWxsb2Nfb2JqZWN0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCisJCQkJCSAgICBzaXplX3Qgc2l6ZSk7CisKK2ludCB1ZGxfZ2VtX3ZtYXAoc3Ry dWN0IHVkbF9nZW1fb2JqZWN0ICpvYmopOwordm9pZCB1ZGxfZ2VtX3Z1bm1hcChzdHJ1Y3QgdWRs X2dlbV9vYmplY3QgKm9iaik7CitpbnQgdWRsX2dlbV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpOworCitpbnQgdWRsX2hhbmRsZV9kYW1hZ2Uo c3RydWN0IHVkbF9mcmFtZWJ1ZmZlciAqZmIsIGludCB4LCBpbnQgeSwKKwkJICAgICAgaW50IHdp ZHRoLCBpbnQgaGVpZ2h0KTsKKworaW50IHVkbF9kcm9wX3VzYihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKKworI2RlZmluZSBDTURfV1JJVEVfUkFXOCAgICJceEFGXHg2MCIgLyoqPCA4IGJpdCBy YXcgd3JpdGUgY29tbWFuZC4gKi8KKyNkZWZpbmUgQ01EX1dSSVRFX1JMOCAgICAiXHhBRlx4NjEi IC8qKjwgOCBiaXQgcnVuIGxlbmd0aCBjb21tYW5kLiAqLworI2RlZmluZSBDTURfV1JJVEVfQ09Q WTggICJceEFGXHg2MiIgLyoqPCA4IGJpdCBjb3B5IGNvbW1hbmQuICovCisjZGVmaW5lIENNRF9X UklURV9STFg4ICAgIlx4QUZceDYzIiAvKio8IDggYml0IGV4dGVuZGVkIHJ1biBsZW5ndGgKY29t bWFuZC4gKi8KKworI2RlZmluZSBDTURfV1JJVEVfUkFXMTYgICJceEFGXHg2OCIgLyoqPCAxNiBi aXQgcmF3IHdyaXRlIGNvbW1hbmQuICovCisjZGVmaW5lIENNRF9XUklURV9STDE2ICAgIlx4QUZc eDY5IiAvKio8IDE2IGJpdCBydW4gbGVuZ3RoIGNvbW1hbmQuICovCisjZGVmaW5lIENNRF9XUklU RV9DT1BZMTYgIlx4QUZceDZBIiAvKio8IDE2IGJpdCBjb3B5IGNvbW1hbmQuICovCisjZGVmaW5l IENNRF9XUklURV9STFgxNiAgIlx4QUZceDZCIiAvKio8IDE2IGJpdCBleHRlbmRlZCBydW4gbGVu Z3RoCmNvbW1hbmQuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Vk bC91ZGxfZW5jb2Rlci5jCmIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZW5jb2Rlci5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZTc1ZjAKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9lbmNvZGVyLmMKQEAgLTAsMCArMSw4MCBAQAorLyoK KyAqIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0CisgKiBiYXNlZCBpbiBwYXJ0cyBvbiB1ZGxm Yi5jOgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG8gYXQg dW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxr bWwgYXQgZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8 YmVybmllIGF0IHBsdWdhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsClB1YmxpYworICogTGlj ZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRo aXMKYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5o IgorI2luY2x1ZGUgImRybV9jcnRjLmgiCisjaW5jbHVkZSAiZHJtX2NydGNfaGVscGVyLmgiCisj aW5jbHVkZSAidWRsX2Rydi5oIgorCisvKiBkdW1teSBlbmNvZGVyICovCit2b2lkIHVkbF9lbmNf ZGVzdHJveShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7CisJZHJtX2VuY29kZXJfY2xl YW51cChlbmNvZGVyKTsKKwlrZnJlZShlbmNvZGVyKTsKK30KKworc3RhdGljIHZvaWQgdWRsX2Vu Y29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCit7Cit9CisKK3N0YXRp YyBib29sIHVkbF9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJCSAg IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJICAgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKmFkanVzdGVkX21vZGUpCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk IHVkbF9lbmNvZGVyX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworfQor CitzdGF0aWMgdm9pZCB1ZGxfZW5jb2Rlcl9jb21taXQoc3RydWN0IGRybV9lbmNvZGVyICplbmNv ZGVyKQoreworfQorCitzdGF0aWMgdm9pZCB1ZGxfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIsCisJCQkJIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAor CQkJCSBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKK30KKworc3Rh dGljIHZvaWQKK3VkbF9lbmNvZGVyX2RwbXMoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBp bnQgbW9kZSkKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgdWRsX2hlbHBlcl9mdW5jcyA9IHsKKwkuZHBtcyA9IHVkbF9lbmNvZGVyX2RwbXMsCisJ Lm1vZGVfZml4dXAgPSB1ZGxfbW9kZV9maXh1cCwKKwkucHJlcGFyZSA9IHVkbF9lbmNvZGVyX3By ZXBhcmUsCisJLm1vZGVfc2V0ID0gdWRsX2VuY29kZXJfbW9kZV9zZXQsCisJLmNvbW1pdCA9IHVk bF9lbmNvZGVyX2NvbW1pdCwKKwkuZGlzYWJsZSA9IHVkbF9lbmNvZGVyX2Rpc2FibGUsCit9Owor CitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHVkbF9lbmNfZnVuY3MgPSB7 CisJLmRlc3Ryb3kgPSB1ZGxfZW5jX2Rlc3Ryb3ksCit9OworCitzdHJ1Y3QgZHJtX2VuY29kZXIg KnVkbF9lbmNvZGVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXI7CisKKwllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRy bV9lbmNvZGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbmNvZGVyKQorCQlyZXR1cm4gTlVMTDsK KworCWRybV9lbmNvZGVyX2luaXQoZGV2LCBlbmNvZGVyLCAmdWRsX2VuY19mdW5jcywgRFJNX01P REVfRU5DT0RFUl9UTURTKTsKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZ1ZGxf aGVscGVyX2Z1bmNzKTsKKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyA9IDE7CisJcmV0dXJuIGVu Y29kZXI7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9mYi5jIGIvZHJp dmVycy9ncHUvZHJtL3VkbC91ZGxfZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi42MmU4ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxf ZmIuYwpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBSZWQgSGF0 CisgKgorICogYmFzZWQgaW4gcGFydHMgb24gdWRsZmIuYzoKKyAqIENvcHlyaWdodCAoQykgMjAw OSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvIGF0IHVuYml0Lml0PgorICogQ29weXJpZ2h0IChD KSAyMDA5IEpheWEgS3VtYXIgPGpheWFrdW1hci5sa21sIGF0IGdtYWlsLmNvbT4KKyAqIENvcHly aWdodCAoQykgMjAwOSBCZXJuaWUgVGhvbXBzb24gPGJlcm5pZSBhdCBwbHVnYWJsZS5jb20+Cisg KgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m IHRoZSBHTlUgR2VuZXJhbApQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZ SU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCmFyY2hpdmUgZm9yCisgKiBtb3JlIGRl dGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNs dWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hl bHBlci5oIgorI2luY2x1ZGUgInVkbF9kcnYuaCIKKworI2luY2x1ZGUgImRybV9mYl9oZWxwZXIu aCIKKworI2RlZmluZSBETF9ERUZJT19XUklURV9ERUxBWSAgICA1IC8qIGZiX2RlZmVycmVkX2lv LmRlbGF5IGluIGppZmZpZXMgKi8KKworc3RhdGljIGludCBmYl9kZWZpbyA9IDE7ICAvKiBPcHRp b25hbGx5IGVuYWJsZSBleHBlcmltZW50YWwgZmJfZGVmaW8KbW1hcCBzdXBwb3J0ICovCitzdGF0 aWMgaW50IGZiX2JwcCA9IDE2OworCittb2R1bGVfcGFyYW0oZmJfYnBwLCBpbnQsIFNfSVdVU1Ig fCBTX0lSVVNSIHwgU19JV0dSUCB8IFNfSVJHUlApOworbW9kdWxlX3BhcmFtKGZiX2RlZmlvLCBp bnQsIFNfSVdVU1IgfCBTX0lSVVNSIHwgU19JV0dSUCB8IFNfSVJHUlApOworCitzdHJ1Y3QgdWRs X2ZiZGV2IHsKKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBoZWxwZXI7CisJc3RydWN0IHVkbF9mcmFt ZWJ1ZmZlciB1ZmI7CisJc3RydWN0IGxpc3RfaGVhZCBmYmRldl9saXN0OworCWludCBmYl9jb3Vu dDsKK307CisKKyNkZWZpbmUgRExfQUxJR05fVVAoeCwgYSkgQUxJR04oeCwgYSkKKyNkZWZpbmUg RExfQUxJR05fRE9XTih4LCBhKSBBTElHTih4LShhLTEpLCBhKQorCisvKiogUmVhZCB0aGUgcmVk IGNvbXBvbmVudCAoMC4uMjU1KSBvZiBhIDMyIGJwcCBjb2xvdXIuICovCisjZGVmaW5lIERMT19S R0JfR0VUUkVEKGNvbCkgKHVpbnQ4X3QpKChjb2wpICYgMHhGRikKKworLyoqIFJlYWQgdGhlIGdy ZWVuIGNvbXBvbmVudCAoMC4uMjU1KSBvZiBhIDMyIGJwcCBjb2xvdXIuICovCisjZGVmaW5lIERM T19SR0JfR0VUR1JOKGNvbCkgKHVpbnQ4X3QpKCgoY29sKSA+PiA4KSAmIDB4RkYpCisKKy8qKiBS ZWFkIHRoZSBibHVlIGNvbXBvbmVudCAoMC4uMjU1KSBvZiBhIDMyIGJwcCBjb2xvdXIuICovCisj ZGVmaW5lIERMT19SR0JfR0VUQkxVKGNvbCkgKHVpbnQ4X3QpKCgoY29sKSA+PiAxNikgJiAweEZG KQorCisvKiogUmV0dXJuIHJlZC9ncmVlbiBjb21wb25lbnQgb2YgYSAxNiBicHAgY29sb3VyIG51 bWJlci4gKi8KKyNkZWZpbmUgRExPX1JHMTYocmVkLCBncm4pICh1aW50OF90KSgoKChyZWQpICYg MHhGOCkgfCAoKGdybikgPj4gNSkpICYKMHhGRikKKworLyoqIFJldHVybiBncmVlbi9ibHVlIGNv bXBvbmVudCBvZiBhIDE2IGJwcCBjb2xvdXIgbnVtYmVyLiAqLworI2RlZmluZSBETE9fR0IxNihn cm4sIGJsdSkgKHVpbnQ4X3QpKCgoKChncm4pICYgMHgxQykgPDwgMykgfCAoKGJsdSkgPj4KMykp ICYgMHhGRikKKworLyoqIFJldHVybiA4IGJwcCBjb2xvdXIgbnVtYmVyIGZyb20gcmVkLCBncmVl biBhbmQgYmx1ZSBjb21wb25lbnRzLiAqLworI2RlZmluZSBETE9fUkdCOChyZWQsIGdybiwgYmx1 KSAoKCgocmVkKSA8PCA1KSB8ICgoKGdybikgJiAzKSA8PCAzKSB8CigoYmx1KSAmIDcpKSAmIDB4 RkYpCisKKyNpZiAwCitzdGF0aWMgdWludDhfdCByZ2I4KHVpbnQzMl90IGNvbCkKK3sKKwl1aW50 OF90IHJlZCA9IERMT19SR0JfR0VUUkVEKGNvbCk7CisJdWludDhfdCBncm4gPSBETE9fUkdCX0dF VEdSTihjb2wpOworCXVpbnQ4X3QgYmx1ID0gRExPX1JHQl9HRVRCTFUoY29sKTsKKworCXJldHVy biBETE9fUkdCOChyZWQsIGdybiwgYmx1KTsKK30KKworc3RhdGljIHVpbnQxNl90IHJnYjE2KHVp bnQzMl90IGNvbCkKK3sKKwl1aW50OF90IHJlZCA9IERMT19SR0JfR0VUUkVEKGNvbCk7CisJdWlu dDhfdCBncm4gPSBETE9fUkdCX0dFVEdSTihjb2wpOworCXVpbnQ4X3QgYmx1ID0gRExPX1JHQl9H RVRCTFUoY29sKTsKKworCXJldHVybiAoRExPX1JHMTYocmVkLCBncm4pIDw8IDgpICsgRExPX0dC MTYoZ3JuLCBibHUpOworfQorI2VuZGlmCisKKy8qCisgKiBOT1RFOiBmYl9kZWZpby5jIGlzIGhv bGRpbmcgaW5mby0+ZmJkZWZpby5tdXRleAorICogICBUb3VjaGluZyBBTlkgZnJhbWVidWZmZXIg bWVtb3J5IHRoYXQgdHJpZ2dlcnMgYSBwYWdlIGZhdWx0CisgKiAgIGluIGZiX2RlZmlvIHdpbGwg Y2F1c2UgYSBkZWFkbG9jaywgd2hlbiBpdCBhbHNvIHRyaWVzIHRvCisgKiAgIGdyYWIgdGhlIHNh bWUgbXV0ZXguCisgKi8KK3N0YXRpYyB2b2lkIHVkbGZiX2RweV9kZWZlcnJlZF9pbyhzdHJ1Y3Qg ZmJfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQoreworCXN0 cnVjdCBwYWdlICpjdXI7CisJc3RydWN0IGZiX2RlZmVycmVkX2lvICpmYmRlZmlvID0gaW5mby0+ ZmJkZWZpbzsKKwlzdHJ1Y3QgdWRsX2ZiZGV2ICp1ZmJkZXYgPSBpbmZvLT5wYXI7CisJc3RydWN0 IGRybV9kZXZpY2UgKmRldiA9IHVmYmRldi0+dWZiLmJhc2UuZGV2OworCXN0cnVjdCB1ZGxfZGV2 aWNlICp1ZGwgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCB1cmIgKnVyYjsKKwljaGFyICpj bWQ7CisJY3ljbGVzX3Qgc3RhcnRfY3ljbGVzLCBlbmRfY3ljbGVzOworCWludCBieXRlc19zZW50 ID0gMDsKKwlpbnQgYnl0ZXNfaWRlbnRpY2FsID0gMDsKKwlpbnQgYnl0ZXNfcmVuZGVyZWQgPSAw OworCisJaWYgKCFmYl9kZWZpbykKKwkJcmV0dXJuOworCisJc3RhcnRfY3ljbGVzID0gZ2V0X2N5 Y2xlcygpOworCisJdXJiID0gdWRsX2dldF91cmIoZGV2KTsKKwlpZiAoIXVyYikKKwkJcmV0dXJu OworCisJY21kID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkvKiB3YWxrIHRoZSB3cml0dGVu IHBhZ2UgbGlzdCBhbmQgcmVuZGVyIGVhY2ggdG8gZGV2aWNlICovCisJbGlzdF9mb3JfZWFjaF9l bnRyeShjdXIsICZmYmRlZmlvLT5wYWdlbGlzdCwgbHJ1KSB7CisKKwkJaWYgKHVkbF9yZW5kZXJf aGxpbmUoZGV2LCAodWZiZGV2LT51ZmIuYmFzZS5iaXRzX3Blcl9waXhlbCAvIDgpLAorCQkJCSAg JnVyYiwgKGNoYXIgKikgaW5mby0+Zml4LnNtZW1fc3RhcnQsCisJCQkJICAmY21kLCBjdXItPmlu ZGV4IDw8IFBBR0VfU0hJRlQsCisJCQkJICBQQUdFX1NJWkUsICZieXRlc19pZGVudGljYWwsICZi eXRlc19zZW50KSkKKwkJCWdvdG8gZXJyb3I7CisJCWJ5dGVzX3JlbmRlcmVkICs9IFBBR0VfU0la RTsKKwl9CisKKwlpZiAoY21kID4gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJ LyogU2VuZCBwYXJ0aWFsIGJ1ZmZlciByZW1haW5pbmcgYmVmb3JlIGV4aXRpbmcgKi8KKwkJaW50 IGxlbiA9IGNtZCAtIChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQl1ZGxfc3VibWl0 X3VyYihkZXYsIHVyYiwgbGVuKTsKKwkJYnl0ZXNfc2VudCArPSBsZW47CisJfSBlbHNlCisJCXVk bF91cmJfY29tcGxldGlvbih1cmIpOworCitlcnJvcjoKKwlhdG9taWNfYWRkKGJ5dGVzX3NlbnQs ICZ1ZGwtPmJ5dGVzX3NlbnQpOworCWF0b21pY19hZGQoYnl0ZXNfaWRlbnRpY2FsLCAmdWRsLT5i eXRlc19pZGVudGljYWwpOworCWF0b21pY19hZGQoYnl0ZXNfcmVuZGVyZWQsICZ1ZGwtPmJ5dGVz X3JlbmRlcmVkKTsKKwllbmRfY3ljbGVzID0gZ2V0X2N5Y2xlcygpOworCWF0b21pY19hZGQoKCh1 bnNpZ25lZCBpbnQpICgoZW5kX2N5Y2xlcyAtIHN0YXJ0X2N5Y2xlcykKKwkJICAgID4+IDEwKSks IC8qIEtjeWNsZXMgKi8KKwkJICAgJnVkbC0+Y3B1X2tjeWNsZXNfdXNlZCk7Cit9CisKK2ludCB1 ZGxfaGFuZGxlX2RhbWFnZShzdHJ1Y3QgdWRsX2ZyYW1lYnVmZmVyICpmYiwgaW50IHgsIGludCB5 LAorCQkgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisJc3RydWN0IGRybV9kZXZpY2Ug KmRldiA9IGZiLT5iYXNlLmRldjsKKwlzdHJ1Y3QgdWRsX2RldmljZSAqdWRsID0gZGV2LT5kZXZf cHJpdmF0ZTsKKwlpbnQgaSwgcmV0OworCWNoYXIgKmNtZDsKKwljeWNsZXNfdCBzdGFydF9jeWNs ZXMsIGVuZF9jeWNsZXM7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCBieXRlc19pZGVudGlj YWwgPSAwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgYWxpZ25lZF94OworCWludCBicHAgPSAo ZmItPmJhc2UuYml0c19wZXJfcGl4ZWwgLyA4KTsKKworCWlmICghZmItPmFjdGl2ZV8xNikKKwkJ cmV0dXJuIDA7CisKKwlpZiAoIWZiLT5vYmotPnZtYXBwaW5nKQorCQl1ZGxfZ2VtX3ZtYXAoZmIt Pm9iaik7CisKKwlzdGFydF9jeWNsZXMgPSBnZXRfY3ljbGVzKCk7CisKKwlhbGlnbmVkX3ggPSBE TF9BTElHTl9ET1dOKHgsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJd2lkdGggPSBETF9BTElH Tl9VUCh3aWR0aCArICh4LWFsaWduZWRfeCksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJeCA9 IGFsaWduZWRfeDsKKworCWlmICgod2lkdGggPD0gMCkgfHwKKwkgICAgKHggKyB3aWR0aCA+IGZi LT5iYXNlLndpZHRoKSB8fAorCSAgICAoeSArIGhlaWdodCA+IGZiLT5iYXNlLmhlaWdodCkpCisJ CXJldHVybiAtRUlOVkFMOworCisJdXJiID0gdWRsX2dldF91cmIoZGV2KTsKKwlpZiAoIXVyYikK KwkJcmV0dXJuIDA7CisJY21kID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlmb3IgKGkgPSB5 OyBpIDwgeSArIGhlaWdodCA7IGkrKykgeworCQljb25zdCBpbnQgbGluZV9vZmZzZXQgPSBmYi0+ YmFzZS5waXRjaGVzWzBdICogaTsKKwkJY29uc3QgaW50IGJ5dGVfb2Zmc2V0ID0gbGluZV9vZmZz ZXQgKyAoeCAqIGJwcCk7CisKKwkJaWYgKHVkbF9yZW5kZXJfaGxpbmUoZGV2LCBicHAsICZ1cmIs CisJCQkJICAgICAoY2hhciAqKSBmYi0+b2JqLT52bWFwcGluZywKKwkJCQkgICAgICZjbWQsIGJ5 dGVfb2Zmc2V0LCB3aWR0aCAqIGJwcCwKKwkJCQkgICAgICZieXRlc19pZGVudGljYWwsICZieXRl c19zZW50KSkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKGNtZCA+IChjaGFyICopIHVyYi0+ dHJhbnNmZXJfYnVmZmVyKSB7CisJCS8qIFNlbmQgcGFydGlhbCBidWZmZXIgcmVtYWluaW5nIGJl Zm9yZSBleGl0aW5nICovCisJCWludCBsZW4gPSBjbWQgLSAoY2hhciAqKSB1cmItPnRyYW5zZmVy X2J1ZmZlcjsKKwkJcmV0ID0gdWRsX3N1Ym1pdF91cmIoZGV2LCB1cmIsIGxlbik7CisJCWJ5dGVz X3NlbnQgKz0gbGVuOworCX0gZWxzZQorCQl1ZGxfdXJiX2NvbXBsZXRpb24odXJiKTsKKworZXJy b3I6CisJYXRvbWljX2FkZChieXRlc19zZW50LCAmdWRsLT5ieXRlc19zZW50KTsKKwlhdG9taWNf YWRkKGJ5dGVzX2lkZW50aWNhbCwgJnVkbC0+Ynl0ZXNfaWRlbnRpY2FsKTsKKwlhdG9taWNfYWRk KHdpZHRoKmhlaWdodCpicHAsICZ1ZGwtPmJ5dGVzX3JlbmRlcmVkKTsKKwllbmRfY3ljbGVzID0g Z2V0X2N5Y2xlcygpOworCWF0b21pY19hZGQoKCh1bnNpZ25lZCBpbnQpICgoZW5kX2N5Y2xlcyAt IHN0YXJ0X2N5Y2xlcykKKwkJICAgID4+IDEwKSksIC8qIEtjeWNsZXMgKi8KKwkJICAgJnVkbC0+ Y3B1X2tjeWNsZXNfdXNlZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZGxfZmJf bW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0Cip2bWEpCit7 CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHZtYS0+dm1fc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBz aXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0 ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgcGFnZSwgcG9z OworCisJaWYgKG9mZnNldCArIHNpemUgPiBpbmZvLT5maXguc21lbV9sZW4pCisJCXJldHVybiAt RUlOVkFMOworCisJcG9zID0gKHVuc2lnbmVkIGxvbmcpaW5mby0+Zml4LnNtZW1fc3RhcnQgKyBv ZmZzZXQ7CisKKwlwcl9ub3RpY2UoIm1tYXAoKSBmcmFtZWJ1ZmZlciBhZGRyOiVsdSBzaXplOiVs dVxuIiwKKwkJICBwb3MsIHNpemUpOworCisJd2hpbGUgKHNpemUgPiAwKSB7CisJCXBhZ2UgPSB2 bWFsbG9jX3RvX3Bmbigodm9pZCAqKXBvcyk7CisJCWlmIChyZW1hcF9wZm5fcmFuZ2Uodm1hLCBz dGFydCwgcGFnZSwgUEFHRV9TSVpFLCBQQUdFX1NIQVJFRCkpCisJCQlyZXR1cm4gLUVBR0FJTjsK KworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJCXBvcyArPSBQQUdFX1NJWkU7CisJCWlmIChzaXpl ID4gUEFHRV9TSVpFKQorCQkJc2l6ZSAtPSBQQUdFX1NJWkU7CisJCWVsc2UKKwkJCXNpemUgPSAw OworCX0KKworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CS8qIGF2b2lkIHRvIHN3YXAg b3V0IHRoaXMgVk1BICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVkbF9mYl9maWxs cmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0CmZiX2ZpbGxyZWN0ICpyZWN0 KQoreworCXN0cnVjdCB1ZGxfZmJkZXYgKnVmYmRldiA9IGluZm8tPnBhcjsKKworCXN5c19maWxs cmVjdChpbmZvLCByZWN0KTsKKworCXVkbF9oYW5kbGVfZGFtYWdlKCZ1ZmJkZXYtPnVmYiwgcmVj dC0+ZHgsIHJlY3QtPmR5LCByZWN0LT53aWR0aCwKKwkJCSAgcmVjdC0+aGVpZ2h0KTsKK30KKwor c3RhdGljIHZvaWQgdWRsX2ZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBz dHJ1Y3QKZmJfY29weWFyZWEgKnJlZ2lvbikKK3sKKwlzdHJ1Y3QgdWRsX2ZiZGV2ICp1ZmJkZXYg PSBpbmZvLT5wYXI7CisKKwlzeXNfY29weWFyZWEoaW5mbywgcmVnaW9uKTsKKworCXVkbF9oYW5k bGVfZGFtYWdlKCZ1ZmJkZXYtPnVmYiwgcmVnaW9uLT5keCwgcmVnaW9uLT5keSwgcmVnaW9uLT53 aWR0aCwKKwkJCSAgcmVnaW9uLT5oZWlnaHQpOworfQorCitzdGF0aWMgdm9pZCB1ZGxfZmJfaW1h Z2VibGl0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QKZmJfaW1hZ2UgKmltYWdl KQoreworCXN0cnVjdCB1ZGxfZmJkZXYgKnVmYmRldiA9IGluZm8tPnBhcjsKKworCXN5c19pbWFn ZWJsaXQoaW5mbywgaW1hZ2UpOworCisJdWRsX2hhbmRsZV9kYW1hZ2UoJnVmYmRldi0+dWZiLCBp bWFnZS0+ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLAorCQkJICBpbWFnZS0+aGVpZ2h0KTsK K30KKworLyoKKyAqIEl0J3MgY29tbW9uIGZvciBzZXZlcmFsIGNsaWVudHMgdG8gaGF2ZSBmcmFt ZWJ1ZmZlciBvcGVuCnNpbXVsdGFuZW91c2x5LgorICogZS5nLiBib3RoIGZiY29uIGFuZCBYLiBN YWtlcyB0aGluZ3MgaW50ZXJlc3RpbmcuCisgKiBBc3N1bWVzIGNhbGxlciBpcyBob2xkaW5nIGlu Zm8tPmxvY2sgKGZvciBvcGVuIGFuZCByZWxlYXNlIGF0IGxlYXN0KQorICovCitzdGF0aWMgaW50 IHVkbF9mYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3Qg dWRsX2ZiZGV2ICp1ZmJkZXYgPSBpbmZvLT5wYXI7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9 IHVmYmRldi0+dWZiLmJhc2UuZGV2OworCXN0cnVjdCB1ZGxfZGV2aWNlICp1ZGwgPSBkZXYtPmRl dl9wcml2YXRlOworCisJLyoKKwkgKiBmYmNvbiBhZ2dyZXNzaXZlbHkgY29ubmVjdHMgdG8gZmly c3QgZnJhbWVidWZmZXIgaXQgZmluZHMsCisJICogcHJldmVudGluZyBvdGhlciBjbGllbnRzIChY KSBmcm9tIHdvcmtpbmcgcHJvcGVybHkuIFVzdWFsbHkKKwkgKiBub3Qgd2hhdCB0aGUgdXNlciB3 YW50cy4gRmFpbCBieSBkZWZhdWx0IHdpdGggb3B0aW9uIHRvIGVuYWJsZS4KKwkgKi8KKwkvLwlp ZiAoKHVzZXIgPT0gMCkgJiAoIWNvbnNvbGUpKQorCS8vCQlyZXR1cm4gLUVCVVNZOworCisJLyog SWYgdGhlIFVTQiBkZXZpY2UgaXMgZ29uZSwgd2UgZG9uJ3QgYWNjZXB0IG5ldyBvcGVucyAqLwor CWlmICh1ZGwtPmRkZXYtPnVucGx1Z2dlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1ZmJkZXYt PmZiX2NvdW50Kys7CisKKwlpZiAoZmJfZGVmaW8gJiYgKGluZm8tPmZiZGVmaW8gPT0gTlVMTCkp IHsKKwkJLyogZW5hYmxlIGRlZmlvIGF0IGxhc3QgbW9tZW50IGlmIG5vdCBkaXNhYmxlZCBieSBj bGllbnQgKi8KKworCQlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW87CisKKwkJZmJkZWZp byA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmYl9kZWZlcnJlZF9pbyksIEdGUF9LRVJORUwpOwor CisJCWlmIChmYmRlZmlvKSB7CisJCQlmYmRlZmlvLT5kZWxheSA9IERMX0RFRklPX1dSSVRFX0RF TEFZOworCQkJZmJkZWZpby0+ZGVmZXJyZWRfaW8gPSB1ZGxmYl9kcHlfZGVmZXJyZWRfaW87CisJ CX0KKworCQlpbmZvLT5mYmRlZmlvID0gZmJkZWZpbzsKKwkJZmJfZGVmZXJyZWRfaW9faW5pdChp bmZvKTsKKwl9CisKKwlwcl9ub3RpY2UoIm9wZW4gL2Rldi9mYiVkIHVzZXI9JWQgZmJfaW5mbz0l cCBjb3VudD0lZFxuIiwKKwkJICBpbmZvLT5ub2RlLCB1c2VyLCBpbmZvLCB1ZmJkZXYtPmZiX2Nv dW50KTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBBc3N1bWVzIGNhbGxlciBpcyBob2xk aW5nIGluZm8tPmxvY2sgbXV0ZXggKGZvciBvcGVuIGFuZCByZWxlYXNlIGF0CmxlYXN0KQorICov CitzdGF0aWMgaW50IHVkbF9mYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNl cikKK3sKKwlzdHJ1Y3QgdWRsX2ZiZGV2ICp1ZmJkZXYgPSBpbmZvLT5wYXI7CisKKwl1ZmJkZXYt PmZiX2NvdW50LS07CisKKwlpZiAoKHVmYmRldi0+ZmJfY291bnQgPT0gMCkgJiYgKGluZm8tPmZi ZGVmaW8pKSB7CisJCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoaW5mbyk7CisJCWtmcmVlKGluZm8t PmZiZGVmaW8pOworCQlpbmZvLT5mYmRlZmlvID0gTlVMTDsKKwkJaW5mby0+ZmJvcHMtPmZiX21t YXAgPSB1ZGxfZmJfbW1hcDsKKwl9CisKKwlwcl93YXJuKCJyZWxlYXNlZCAvZGV2L2ZiJWQgdXNl cj0lZCBjb3VudD0lZFxuIiwKKwkJaW5mby0+bm9kZSwgdXNlciwgdWZiZGV2LT5mYl9jb3VudCk7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgdWRsZmJfb3BzID0gewor CS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIgPSBkcm1fZmJfaGVscGVyX2No ZWNrX3ZhciwKKwkuZmJfc2V0X3BhciA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKKwkuZmJfZmls bHJlY3QgPSB1ZGxfZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gdWRsX2ZiX2NvcHlhcmVh LAorCS5mYl9pbWFnZWJsaXQgPSB1ZGxfZmJfaW1hZ2VibGl0LAorCS5mYl9wYW5fZGlzcGxheSA9 IGRybV9mYl9oZWxwZXJfcGFuX2Rpc3BsYXksCisJLmZiX2JsYW5rID0gZHJtX2ZiX2hlbHBlcl9i bGFuaywKKwkuZmJfc2V0Y21hcCA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKKwkuZmJfZGVidWdf ZW50ZXIgPSBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyLAorCS5mYl9kZWJ1Z19sZWF2ZSA9IGRy bV9mYl9oZWxwZXJfZGVidWdfbGVhdmUsCisJLmZiX21tYXAgPSB1ZGxfZmJfbW1hcCwKKwkuZmJf b3BlbiA9IHVkbF9mYl9vcGVuLAorCS5mYl9yZWxlYXNlID0gdWRsX2ZiX3JlbGVhc2UsCit9Owor Cit2b2lkIHVkbF9jcnRjX2ZiX2dhbW1hX3NldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiBy ZWQsIHUxNiBncmVlbiwKKwkJCSAgIHUxNiBibHVlLCBpbnQgcmVnbm8pCit7Cit9CisKK3ZvaWQg dWRsX2NydGNfZmJfZ2FtbWFfZ2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgdTE2ICpyZWQsIHUx NiAqZ3JlZW4sCisJCQkgICAgIHUxNiAqYmx1ZSwgaW50IHJlZ25vKQoreworCSpyZWQgPSAwOwor CSpncmVlbiA9IDA7CisJKmJsdWUgPSAwOworfQorCitzdGF0aWMgaW50IHVkbF91c2VyX2ZyYW1l YnVmZmVyX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSAgICAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSwKKwkJCQkgICAgICB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY29s b3IsCisJCQkJICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJCSAgICAgIHVu c2lnbmVkIG51bV9jbGlwcykKK3sKKwlzdHJ1Y3QgdWRsX2ZyYW1lYnVmZmVyICp1ZmIgPSB0b191 ZGxfZmIoZmIpOworCWludCBpOworCisJaWYgKCF1ZmItPmFjdGl2ZV8xNikKKwkJcmV0dXJuIDA7 CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NsaXBzOyBpKyspIHsKKwkJdWRsX2hhbmRsZV9kYW1h Z2UodWZiLCBjbGlwc1tpXS54MSwgY2xpcHNbaV0ueTEsCisJCQkJICBjbGlwc1tpXS54MiAtIGNs aXBzW2ldLngxLAorCQkJCSAgY2xpcHNbaV0ueTIgLSBjbGlwc1tpXS55MSk7CisJfQorCXJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCB1ZGxfdXNlcl9mcmFtZWJ1ZmZlcl9kZXN0cm95KHN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCB1ZGxfZnJhbWVidWZmZXIgKnVmYiA9 IHRvX3VkbF9mYihmYik7CisKKwlpZiAodWZiLT5vYmopCisJCWRybV9nZW1fb2JqZWN0X3VucmVm ZXJlbmNlX3VubG9ja2VkKCZ1ZmItPm9iai0+YmFzZSk7CisKKwlkcm1fZnJhbWVidWZmZXJfY2xl YW51cChmYik7CisJa2ZyZWUodWZiKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZnJh bWVidWZmZXJfZnVuY3MgdWRsZmJfZnVuY3MgPSB7CisJLmRlc3Ryb3kgPSB1ZGxfdXNlcl9mcmFt ZWJ1ZmZlcl9kZXN0cm95LAorCS5kaXJ0eSA9IHVkbF91c2VyX2ZyYW1lYnVmZmVyX2RpcnR5LAor CS5jcmVhdGVfaGFuZGxlID0gTlVMTCwKK307CisKKworc3RhdGljIGludAordWRsX2ZyYW1lYnVm ZmVyX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgdWRsX2ZyYW1l YnVmZmVyICp1ZmIsCisJCSAgICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kLAor CQkgICAgIHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqKQoreworCWludCByZXQ7CisKKwl1ZmIt Pm9iaiA9IG9iajsKKwlyZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsICZ1ZmItPmJhc2Us ICZ1ZGxmYl9mdW5jcyk7CisJZHJtX2hlbHBlcl9tb2RlX2ZpbGxfZmJfc3RydWN0KCZ1ZmItPmJh c2UsIG1vZGVfY21kKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgdWRsZmJfY3Jl YXRlKHN0cnVjdCB1ZGxfZmJkZXYgKnVmYmRldiwKKwkJCXN0cnVjdCBkcm1fZmJfaGVscGVyX3N1 cmZhY2Vfc2l6ZSAqc2l6ZXMpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVmYmRldi0+ aGVscGVyLmRldjsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZp Y2UgPSAmZGV2LT51c2JkZXYtPmRldjsKKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYjsKKwlz dHJ1Y3QgZHJtX21vZGVfZmJfY21kMiBtb2RlX2NtZDsKKwlzdHJ1Y3QgdWRsX2dlbV9vYmplY3Qg Km9iajsKKwl1aW50MzJfdCBzaXplOworCWludCByZXQgPSAwOworCisJaWYgKHNpemVzLT5zdXJm YWNlX2JwcCA9PSAyNCkKKwkJc2l6ZXMtPnN1cmZhY2VfYnBwID0gMzI7CisKKwltb2RlX2NtZC53 aWR0aCA9IHNpemVzLT5zdXJmYWNlX3dpZHRoOworCW1vZGVfY21kLmhlaWdodCA9IHNpemVzLT5z dXJmYWNlX2hlaWdodDsKKwltb2RlX2NtZC5waXRjaGVzWzBdID0gbW9kZV9jbWQud2lkdGggKiAo KHNpemVzLT5zdXJmYWNlX2JwcCArIDcpIC8gOCk7CisKKwltb2RlX2NtZC5waXhlbF9mb3JtYXQg PSBkcm1fbW9kZV9sZWdhY3lfZmJfZm9ybWF0KHNpemVzLT5zdXJmYWNlX2JwcCwKKwkJCQkJCQkg IHNpemVzLT5zdXJmYWNlX2RlcHRoKTsKKworCXNpemUgPSBtb2RlX2NtZC5waXRjaGVzWzBdICog bW9kZV9jbWQuaGVpZ2h0OworCXNpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOworCisJb2Jq ID0gdWRsX2dlbV9hbGxvY19vYmplY3QoZGV2LCBzaXplKTsKKwlpZiAoIW9iaikKKwkJZ290byBv dXQ7CisKKwlyZXQgPSB1ZGxfZ2VtX3ZtYXAob2JqKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJP UigiZmFpbGVkIHRvIHZtYXAgZmJcbiIpOworCQlnb3RvIG91dF9nZnJlZTsKKwl9CisKKwlpbmZv ID0gZnJhbWVidWZmZXJfYWxsb2MoMCwgZGV2aWNlKTsKKwlpZiAoIWluZm8pIHsKKwkJcmV0ID0g LUVOT01FTTsKKwkJZ290byBvdXRfZ2ZyZWU7CisJfQorCWluZm8tPnBhciA9IHVmYmRldjsKKwor CXJldCA9IHVkbF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgJnVmYmRldi0+dWZiLCAmbW9kZV9jbWQs IG9iaik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZ2ZyZWU7CisKKwlmYiA9ICZ1ZmJkZXYtPnVm Yi5iYXNlOworCisJdWZiZGV2LT5oZWxwZXIuZmIgPSBmYjsKKwl1ZmJkZXYtPmhlbHBlci5mYmRl diA9IGluZm87CisKKwlzdHJjcHkoaW5mby0+Zml4LmlkLCAidWRsZHJtZmIiKTsKKworCWluZm8t PnNjcmVlbl9iYXNlID0gdWZiZGV2LT51ZmIub2JqLT52bWFwcGluZzsKKwlpbmZvLT5maXguc21l bV9sZW4gPSBzaXplOworCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdWZi ZGV2LT51ZmIub2JqLT52bWFwcGluZzsKKworCWluZm8tPmZsYWdzID0gRkJJTkZPX0RFRkFVTFQg fCBGQklORk9fQ0FOX0ZPUkNFX09VVFBVVDsKKwlpbmZvLT5mYm9wcyA9ICZ1ZGxmYl9vcHM7CisJ ZHJtX2ZiX2hlbHBlcl9maWxsX2ZpeChpbmZvLCBmYi0+cGl0Y2hlc1swXSwgZmItPmRlcHRoKTsK Kwlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGluZm8sICZ1ZmJkZXYtPmhlbHBlciwgc2l6ZXMtPmZi X3dpZHRoLApzaXplcy0+ZmJfaGVpZ2h0KTsKKworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmluZm8t PmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91 dF9nZnJlZTsKKwl9CisKKworCURSTV9ERUJVR19LTVMoImFsbG9jYXRlZCAlZHglZCB2bWFsICVw XG4iLAorCQkgICAgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsCisJCSAgICAgIHVmYmRldi0+dWZi Lm9iai0+dm1hcHBpbmcpOworCisJcmV0dXJuIHJldDsKK291dF9nZnJlZToKKwlkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZSgmdWZiZGV2LT51ZmIub2JqLT5iYXNlKTsKK291dDoKKwlyZXR1cm4g cmV0OworfQorCitzdGF0aWMgaW50IHVkbF9mYl9maW5kX29yX2NyZWF0ZV9zaW5nbGUoc3RydWN0 IGRybV9mYl9oZWxwZXIgKmhlbHBlciwKKwkJCQkJc3RydWN0IGRybV9mYl9oZWxwZXJfc3VyZmFj ZV9zaXplICpzaXplcykKK3sKKwlzdHJ1Y3QgdWRsX2ZiZGV2ICp1ZmJkZXYgPSAoc3RydWN0IHVk bF9mYmRldiAqKWhlbHBlcjsKKwlpbnQgbmV3X2ZiID0gMDsKKwlpbnQgcmV0OworCisJaWYgKCFo ZWxwZXItPmZiKSB7CisJCXJldCA9IHVkbGZiX2NyZWF0ZSh1ZmJkZXYsIHNpemVzKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJbmV3X2ZiID0gMTsKKwl9CisJcmV0dXJuIG5ld19m YjsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNzIHVkbF9mYl9oZWxwZXJf ZnVuY3MgPSB7CisJLmdhbW1hX3NldCA9IHVkbF9jcnRjX2ZiX2dhbW1hX3NldCwKKwkuZ2FtbWFf Z2V0ID0gdWRsX2NydGNfZmJfZ2FtbWFfZ2V0LAorCS5mYl9wcm9iZSA9IHVkbF9mYl9maW5kX29y X2NyZWF0ZV9zaW5nbGUsCit9OworCitzdGF0aWMgdm9pZCB1ZGxfZmJkZXZfZGVzdHJveShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IHVkbF9mYmRldiAqdWZiZGV2KQor eworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCWlmICh1ZmJkZXYtPmhlbHBlci5mYmRldikgewor CQlpbmZvID0gdWZiZGV2LT5oZWxwZXIuZmJkZXY7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIo aW5mbyk7CisJCWlmIChpbmZvLT5jbWFwLmxlbikKKwkJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+ Y21hcCk7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisJfQorCWRybV9mYl9oZWxwZXJf ZmluaSgmdWZiZGV2LT5oZWxwZXIpOworCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKCZ1ZmJkZXYt PnVmYi5iYXNlKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmdWZiZGV2 LT51ZmIub2JqLT5iYXNlKTsKK30KKworaW50IHVkbF9mYmRldl9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCit7CisJc3RydWN0IHVkbF9kZXZpY2UgKnVkbCA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJaW50IGJwcF9zZWwgPSBmYl9icHA7CisJc3RydWN0IHVkbF9mYmRldiAqdWZiZGV2OworCWlu dCByZXQ7CisKKwl1ZmJkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWRsX2ZiZGV2KSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCF1ZmJkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJdWRsLT5mYmRl diA9IHVmYmRldjsKKwl1ZmJkZXYtPmhlbHBlci5mdW5jcyA9ICZ1ZGxfZmJfaGVscGVyX2Z1bmNz OworCisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0KGRldiwgJnVmYmRldi0+aGVscGVyLAorCQkJ CSAxLCAxKTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHVmYmRldik7CisJCXJldHVybiByZXQ7CisK Kwl9CisKKwlkcm1fZmJfaGVscGVyX3NpbmdsZV9hZGRfYWxsX2Nvbm5lY3RvcnMoJnVmYmRldi0+ aGVscGVyKTsKKwlkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKCZ1ZmJkZXYtPmhlbHBlciwg YnBwX3NlbCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdWRsX2ZiZGV2X2NsZWFudXAoc3RydWN0 IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdWRsX2RldmljZSAqdWRsID0gZGV2LT5kZXZf cHJpdmF0ZTsKKwlpZiAoIXVkbC0+ZmJkZXYpCisJCXJldHVybjsKKworCXVkbF9mYmRldl9kZXN0 cm95KGRldiwgdWRsLT5mYmRldik7CisJa2ZyZWUodWRsLT5mYmRldik7CisJdWRsLT5mYmRldiA9 IE5VTEw7Cit9CisKK3ZvaWQgdWRsX2ZiZGV2X3VucGx1ZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCB1ZGxfZGV2aWNlICp1ZGwgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVj dCB1ZGxfZmJkZXYgKnVmYmRldjsKKwlpZiAoIXVkbC0+ZmJkZXYpCisJCXJldHVybjsKKworCXVm YmRldiA9IHVkbC0+ZmJkZXY7CisJaWYgKHVmYmRldi0+aGVscGVyLmZiZGV2KSB7CisJCXN0cnVj dCBmYl9pbmZvICppbmZvOworCQlpbmZvID0gdWZiZGV2LT5oZWxwZXIuZmJkZXY7CisJCXVubGlu a19mcmFtZWJ1ZmZlcihpbmZvKTsKKwl9Cit9CisKK3N0cnVjdCBkcm1fZnJhbWVidWZmZXIgKgor dWRsX2ZiX3VzZXJfZmJfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgIHN0cnVj dCBkcm1fZmlsZSAqZmlsZSwKKwkJICAgc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21k KQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqOworCXN0cnVjdCB1ZGxfZnJhbWVidWZm ZXIgKnVmYjsKKwlpbnQgcmV0OworCisJb2JqID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwg ZmlsZSwgbW9kZV9jbWQtPmhhbmRsZXNbMF0pOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT0VOVCk7CisKKwl1ZmIgPSBremFsbG9jKHNpemVvZigqdWZiKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKHVmYiA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwor CXJldCA9IHVkbF9mcmFtZWJ1ZmZlcl9pbml0KGRldiwgdWZiLCBtb2RlX2NtZCwgdG9fdWRsX2Jv KG9iaikpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUodWZiKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7CisJfQorCXJldHVybiAmdWZiLT5iYXNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3VkbC91ZGxfZ2VtLmMKYi9kcml2ZXJzL2dwdS9kcm0vdWRsL3VkbF9nZW0uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI2NDJkCi0tLSAvZGV2L251bGwKKysr IGIvZHJpdmVycy9ncHUvZHJtL3VkbC91ZGxfZ2VtLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisg KiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0 IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljCisg KiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkg b2YgdGhpcwphcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJk cm1QLmgiCisjaW5jbHVkZSAidWRsX2Rydi5oIgorI2luY2x1ZGUgPGxpbnV4L3NobWVtX2ZzLmg+ CisKK3N0cnVjdCB1ZGxfZ2VtX29iamVjdCAqdWRsX2dlbV9hbGxvY19vYmplY3Qoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB1ZGxfZ2Vt X29iamVjdCAqb2JqOworCisJb2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwp OworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZHJtX2dlbV9vYmpl Y3RfaW5pdChkZXYsICZvYmotPmJhc2UsIHNpemUpICE9IDApIHsKKwkJa2ZyZWUob2JqKTsKKwkJ cmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIG9iajsKK30KKworc3RhdGljIGludAordWRsX2dl bV9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlLAorCSAgICAgICBzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAorCSAgICAgICB1aW50NjRfdCBzaXplLAorCSAgICAgICB1aW50MzJfdCAqaGFuZGxl X3ApCit7CisJc3RydWN0IHVkbF9nZW1fb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKwl1MzIgaGFu ZGxlOworCisJc2l6ZSA9IHJvdW5kdXAoc2l6ZSwgUEFHRV9TSVpFKTsKKworCW9iaiA9IHVkbF9n ZW1fYWxsb2Nfb2JqZWN0KGRldiwgc2l6ZSk7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm4g LUVOT01FTTsKKworCXJldCA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxlLCAmb2JqLT5iYXNl LCAmaGFuZGxlKTsKKwlpZiAocmV0KSB7CisJCWRybV9nZW1fb2JqZWN0X3JlbGVhc2UoJm9iai0+ YmFzZSk7CisJCWtmcmVlKG9iaik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX2dlbV9vYmpl Y3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJKmhhbmRsZV9wID0gaGFuZGxlOworCXJldHVy biAwOworfQorCitpbnQgdWRsX2R1bWJfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwKKwkJ ICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRl X2R1bWIgKmFyZ3MpCit7CisJYXJncy0+cGl0Y2ggPSBhcmdzLT53aWR0aCAqICgoYXJncy0+YnBw ICsgMSkgLyA4KTsKKwlhcmdzLT5zaXplID0gYXJncy0+cGl0Y2ggKiBhcmdzLT5oZWlnaHQ7CisJ cmV0dXJuIHVkbF9nZW1fY3JlYXRlKGZpbGUsIGRldiwKKwkJCSAgICAgIGFyZ3MtPnNpemUsICZh cmdzLT5oYW5kbGUpOworfQorCitpbnQgdWRsX2R1bWJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGUsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCSAgICAgdWludDMyX3QgaGFuZGxlKQor eworCXJldHVybiBkcm1fZ2VtX2hhbmRsZV9kZWxldGUoZmlsZSwgaGFuZGxlKTsKK30KKworaW50 IHVkbF9nZW1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVs dCAqdm1mKQoreworCXN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqID0gdG9fdWRsX2JvKHZtYS0+ dm1fcHJpdmF0ZV9kYXRhKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgcGFn ZV9vZmZzZXQ7CisJaW50IHJldCA9IDA7CisKKwlwYWdlX29mZnNldCA9ICgodW5zaWduZWQgbG9u Zyl2bWYtPnZpcnR1YWxfYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQpID4+CisJCVBBR0VfU0hJRlQ7 CisKKwlpZiAoIW9iai0+cGFnZXMpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlwYWdl ID0gb2JqLT5wYWdlc1twYWdlX29mZnNldF07CisJcmV0ID0gdm1faW5zZXJ0X3BhZ2Uodm1hLCAo dW5zaWduZWQgbG9uZyl2bWYtPnZpcnR1YWxfYWRkcmVzcywgcGFnZSk7CisJc3dpdGNoIChyZXQp IHsKKwljYXNlIC1FQUdBSU46CisJCXNldF9uZWVkX3Jlc2NoZWQoKTsKKwljYXNlIDA6CisJY2Fz ZSAtRVJFU1RBUlRTWVM6CisJCXJldHVybiBWTV9GQVVMVF9OT1BBR0U7CisJY2FzZSAtRU5PTUVN OgorCQlyZXR1cm4gVk1fRkFVTFRfT09NOworCWRlZmF1bHQ6CisJCXJldHVybiBWTV9GQVVMVF9T SUdCVVM7CisJfQorfQorCitpbnQgdWRsX2dlbV9pbml0X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKm9iaikKK3sKKwlCVUcoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVk bF9nZW1fZ2V0X3BhZ2VzKHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqLCBnZnBfdCBnZnBtYXNr KQoreworCWludCBwYWdlX2NvdW50LCBpOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBp bm9kZSAqaW5vZGU7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CisKKwlpZiAob2Jq LT5wYWdlcykKKwkJcmV0dXJuIDA7CisKKwlwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgLyBQ QUdFX1NJWkU7CisJQlVHX09OKG9iai0+cGFnZXMgIT0gTlVMTCk7CisJb2JqLT5wYWdlcyA9IGRy bV9tYWxsb2NfYWIocGFnZV9jb3VudCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKwlpZiAob2Jq LT5wYWdlcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlub2RlID0gb2JqLT5iYXNl LmZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJbWFwcGluZyA9IGlub2RlLT5pX21hcHBp bmc7CisJZ2ZwbWFzayB8PSBtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpOworCisJZm9yIChpID0g MDsgaSA8IHBhZ2VfY291bnQ7IGkrKykgeworCQlwYWdlID0gc2htZW1fcmVhZF9tYXBwaW5nX3Bh Z2VfZ2ZwKG1hcHBpbmcsIGksIGdmcG1hc2spOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJZ290 byBlcnJfcGFnZXM7CisJCW9iai0+cGFnZXNbaV0gPSBwYWdlOworCX0KKworCXJldHVybiAwOwor ZXJyX3BhZ2VzOgorCXdoaWxlIChpLS0pCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmotPnBhZ2Vz W2ldKTsKKwlkcm1fZnJlZV9sYXJnZShvYmotPnBhZ2VzKTsKKwlvYmotPnBhZ2VzID0gTlVMTDsK KwlyZXR1cm4gUFRSX0VSUihwYWdlKTsKK30KKworc3RhdGljIHZvaWQgdWRsX2dlbV9wdXRfcGFn ZXMoc3RydWN0IHVkbF9nZW1fb2JqZWN0ICpvYmopCit7CisJaW50IHBhZ2VfY291bnQgPSBvYmot PmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYWdl X2NvdW50OyBpKyspCisJCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmotPnBhZ2VzW2ldKTsKKworCWRy bV9mcmVlX2xhcmdlKG9iai0+cGFnZXMpOworCW9iai0+cGFnZXMgPSBOVUxMOworfQorCitpbnQg dWRsX2dlbV92bWFwKHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAqb2JqKQoreworCWludCBwYWdlX2Nv dW50ID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7CisJaW50IHJldDsKKworCXJldCA9IHVk bF9nZW1fZ2V0X3BhZ2VzKG9iaiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCW9iai0+dm1hcHBpbmcgPSB2bWFwKG9iai0+cGFnZXMsIHBhZ2VfY291bnQsIDAsIFBB R0VfS0VSTkVMKTsKKwlpZiAoIW9iai0+dm1hcHBpbmcpCisJCXJldHVybiAtRU5PTUVNOworCXJl dHVybiAwOworfQorCit2b2lkIHVkbF9nZW1fdnVubWFwKHN0cnVjdCB1ZGxfZ2VtX29iamVjdCAq b2JqKQoreworCWlmIChvYmotPnZtYXBwaW5nKQorCQl2dW5tYXAob2JqLT52bWFwcGluZyk7CisK Kwl1ZGxfZ2VtX3B1dF9wYWdlcyhvYmopOworfQorCit2b2lkIHVkbF9nZW1fZnJlZV9vYmplY3Qo c3RydWN0IGRybV9nZW1fb2JqZWN0ICpnZW1fb2JqKQoreworCXN0cnVjdCB1ZGxfZ2VtX29iamVj dCAqb2JqID0gdG9fdWRsX2JvKGdlbV9vYmopOworCisJaWYgKG9iai0+dm1hcHBpbmcpCisJCXVk bF9nZW1fdnVubWFwKG9iaik7CisKKwlpZiAob2JqLT5wYWdlcykKKwkJdWRsX2dlbV9wdXRfcGFn ZXMob2JqKTsKKworCWlmIChnZW1fb2JqLT5tYXBfbGlzdC5tYXApCisJCWRybV9nZW1fZnJlZV9t bWFwX29mZnNldChnZW1fb2JqKTsKK30KKworLyogdGhlIGR1bWIgaW50ZXJmYWNlIGRvZXNuJ3Qg d29yayB3aXRoIHRoZSBHRU0gc3RyYWlnaHQgTU1BUAorICAgaW50ZXJmYWNlLCBpdCBleHBlY3Rz IHRvIGRvIE1NQVAgb24gdGhlIGRybSBmZCwgbGlrZSBub3JtYWwgKi8KK2ludCB1ZGxfZ2VtX21t YXAoc3RydWN0IGRybV9maWxlICpmaWxlLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkgdWlu dDMyX3QgaGFuZGxlLCB1aW50NjRfdCAqb2Zmc2V0KQoreworCXN0cnVjdCB1ZGxfZ2VtX29iamVj dCAqZ29iajsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlpbnQgcmV0ID0gMDsKKwor CW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlvYmogPSBkcm1fZ2VtX29iamVjdF9s b29rdXAoZGV2LCBmaWxlLCBoYW5kbGUpOworCWlmIChvYmogPT0gTlVMTCkgeworCQlyZXQgPSAt RU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisJZ29iaiA9IHRvX3VkbF9ibyhvYmopOworCisJ cmV0ID0gdWRsX2dlbV9nZXRfcGFnZXMoZ29iaiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkKKwkJ cmV0dXJuIHJldDsKKwlpZiAoIWdvYmotPmJhc2UubWFwX2xpc3QubWFwKSB7CisJCXJldCA9IGRy bV9nZW1fY3JlYXRlX21tYXBfb2Zmc2V0KG9iaik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsK Kwl9CisKKwkqb2Zmc2V0ID0gKHU2NClnb2JqLT5iYXNlLm1hcF9saXN0Lmhhc2gua2V5IDw8IFBB R0VfU0hJRlQ7CisKK291dDoKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZ29iai0+YmFz ZSk7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJu IHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21haW4uYwpiL2Ry aXZlcnMvZ3B1L2RybS91ZGwvdWRsX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5hOGQ1ZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3VkbC91 ZGxfbWFpbi5jCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFJl ZCBIYXQKKyAqCisgKiBiYXNlZCBpbiBwYXJ0cyBvbiB1ZGxmYi5jOgorICogQ29weXJpZ2h0IChD KSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG8gYXQgdW5iaXQuaXQ+CisgKiBDb3B5cmln aHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWwgYXQgZ21haWwuY29tPgorICog Q29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllIGF0IHBsdWdhYmxlLmNv bT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsClB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxl IENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKYXJjaGl2ZSBmb3IKKyAqIG1v cmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJ1ZGxfZHJ2Lmgi CisKKy8qIC1CVUxLX1NJWkUgYXMgcGVyIHVzYi1za2VsZXRvbi4gQ2FuIHdlIGdldCBmdWxsIHBh Z2UgYW5kIGF2b2lkCm92ZXJoZWFkPyAqLworI2RlZmluZSBCVUxLX1NJWkUgNTEyCisKKyNkZWZp bmUgTUFYX1RSQU5TRkVSIChQQUdFX1NJWkUqMTYgLSBCVUxLX1NJWkUpCisjZGVmaW5lIFdSSVRF U19JTl9GTElHSFQgKDQpCisjZGVmaW5lIE1BWF9WRU5ET1JfREVTQ1JJUFRPUl9TSVpFIDI1Ngor CisjZGVmaW5lIEdFVF9VUkJfVElNRU9VVAlIWgorI2RlZmluZSBGUkVFX1VSQl9USU1FT1VUIChI WioyKQorCitzdGF0aWMgaW50IHVkbF9wYXJzZV92ZW5kb3JfZGVzY3JpcHRvcihzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2KQorewor CXN0cnVjdCB1ZGxfZGV2aWNlICp1ZGwgPSBkZXYtPmRldl9wcml2YXRlOworCWNoYXIgKmRlc2M7 CisJY2hhciAqYnVmOworCWNoYXIgKmRlc2NfZW5kOworCisJdTggdG90YWxfbGVuID0gMDsKKwor CWJ1ZiA9IGt6YWxsb2MoTUFYX1ZFTkRPUl9ERVNDUklQVE9SX1NJWkUsIEdGUF9LRVJORUwpOwor CWlmICghYnVmKQorCQlyZXR1cm4gZmFsc2U7CisJZGVzYyA9IGJ1ZjsKKworCXRvdGFsX2xlbiA9 IHVzYl9nZXRfZGVzY3JpcHRvcih1c2JkZXYsIDB4NWYsIC8qIHZlbmRvciBzcGVjaWZpYyAqLwor CQkJCSAgICAwLCBkZXNjLCBNQVhfVkVORE9SX0RFU0NSSVBUT1JfU0laRSk7CisJaWYgKHRvdGFs X2xlbiA+IDUpIHsKKwkJRFJNX0lORk8oInZlbmRvciBkZXNjcmlwdG9yIGxlbmd0aDoleCBkYXRh OiUwMnggJTAyeCAlMDJ4ICUwMngiIFwKKwkJCSIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAy eCAlMDJ4XG4iLAorCQkJdG90YWxfbGVuLCBkZXNjWzBdLAorCQkJZGVzY1sxXSwgZGVzY1syXSwg ZGVzY1szXSwgZGVzY1s0XSwgZGVzY1s1XSwgZGVzY1s2XSwKKwkJCWRlc2NbN10sIGRlc2NbOF0s IGRlc2NbOV0sIGRlc2NbMTBdKTsKKworCQlpZiAoKGRlc2NbMF0gIT0gdG90YWxfbGVuKSB8fCAv KiBkZXNjcmlwdG9yIGxlbmd0aCAqLworCQkgICAgKGRlc2NbMV0gIT0gMHg1ZikgfHwgICAvKiB2 ZW5kb3IgZGVzY3JpcHRvciB0eXBlICovCisJCSAgICAoZGVzY1syXSAhPSAweDAxKSB8fCAgIC8q IHZlcnNpb24gKDIgYnl0ZXMpICovCisJCSAgICAoZGVzY1szXSAhPSAweDAwKSB8fAorCQkgICAg KGRlc2NbNF0gIT0gdG90YWxfbGVuIC0gMikpIC8qIGxlbmd0aCBhZnRlciB0eXBlICovCisJCQln b3RvIHVucmVjb2duaXplZDsKKworCQlkZXNjX2VuZCA9IGRlc2MgKyB0b3RhbF9sZW47CisJCWRl c2MgKz0gNTsgLyogdGhlIGZpeGVkIGhlYWRlciB3ZSd2ZSBhbHJlYWR5IHBhcnNlZCAqLworCisJ CXdoaWxlIChkZXNjIDwgZGVzY19lbmQpIHsKKwkJCXU4IGxlbmd0aDsKKwkJCXUxNiBrZXk7CisK KwkJCWtleSA9ICooKHUxNiAqKSBkZXNjKTsKKwkJCWRlc2MgKz0gc2l6ZW9mKHUxNik7CisJCQls ZW5ndGggPSAqZGVzYzsKKwkJCWRlc2MrKzsKKworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNhc2Ug MHgwMjAwOiB7IC8qIG1heF9hcmVhICovCisJCQkJdTMyIG1heF9hcmVhOworCQkJCW1heF9hcmVh ID0gbGUzMl90b19jcHUoKigodTMyICopZGVzYykpOworCQkJCURSTV9ERUJVRygiREwgY2hpcCBs aW1pdGVkIHRvICVkIHBpeGVsIG1vZGVzXG4iLAorCQkJCQltYXhfYXJlYSk7CisJCQkJdWRsLT5z a3VfcGl4ZWxfbGltaXQgPSBtYXhfYXJlYTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6 CisJCQkJYnJlYWs7CisJCQl9CisJCQlkZXNjICs9IGxlbmd0aDsKKwkJfQorCX0KKworCWdvdG8g c3VjY2VzczsKKwordW5yZWNvZ25pemVkOgorCS8qIGFsbG93IHVkbGZiIHRvIGxvYWQgZm9yIG5v dyBldmVuIGlmIGZpcm13YXJlIHVucmVjb2duaXplZCAqLworCURSTV9FUlJPUigiVW5yZWNvZ25p emVkIHZlbmRvciBmaXJtd2FyZSBkZXNjcmlwdG9yXG4iKTsKKworc3VjY2VzczoKKwlrZnJlZShi dWYpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB1ZGxfcmVsZWFzZV91cmJfd29y ayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHVyYl9ub2RlICp1bm9kZSA9 IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXJiX25vZGUsCisJCQkJCSAgICAgIHJlbGVhc2Vf dXJiX3dvcmsud29yayk7CisKKwl1cCgmdW5vZGUtPmRldi0+dXJicy5saW1pdF9zZW0pOworfQor Cit2b2lkIHVkbF91cmJfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHVy Yl9ub2RlICp1bm9kZSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgdWRsX2RldmljZSAqdWRsID0g dW5vZGUtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogc3luYy9hc3luYyB1bmxp bmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJaWYgKCEo dXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVT RVQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCQlEUk1fRVJST1Io IiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQkJX19m dW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJCWF0b21pY19zZXQoJnVkbC0+bG9zdF9waXhlbHMsIDEp OworCQl9CisJfQorCisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdWRsLT51cmJzLnNp emU7IC8qIHJlc2V0IHRvIGFjdHVhbCAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVkbC0+dXJi cy5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmdW5vZGUtPmVudHJ5LCAmdWRsLT51cmJz Lmxpc3QpOworCXVkbC0+dXJicy5hdmFpbGFibGUrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ1ZGwtPnVyYnMubG9jaywgZmxhZ3MpOworCisjaWYgMAorCS8qCisJICogV2hlbiB1c2luZyBm Yl9kZWZpbywgd2UgZGVhZGxvY2sgaWYgdXAoKSBpcyBjYWxsZWQKKwkgKiB3aGlsZSBhbm90aGVy IGlzIHdhaXRpbmcuIFNvIHF1ZXVlIHRvIGFub3RoZXIgcHJvY2Vzcy4KKwkgKi8KKwlpZiAoZmJf ZGVmaW8pCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdW5vZGUtPnJlbGVhc2VfdXJiX3dvcmss IDApOworCWVsc2UKKyNlbmRpZgorCQl1cCgmdWRsLT51cmJzLmxpbWl0X3NlbSk7Cit9CisKK3N0 YXRpYyB2b2lkIHVkbF9mcmVlX3VyYl9saXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJ c3RydWN0IHVkbF9kZXZpY2UgKnVkbCA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGNvdW50ID0g dWRsLT51cmJzLmNvdW50OworCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IHVyYl9u b2RlICp1bm9kZTsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25n IGZsYWdzOworCisJRFJNX0RFQlVHKCJXYWl0aW5nIGZvciBjb21wbGV0ZXMgYW5kIGZyZWVpbmcg YWxsIHJlbmRlciB1cmJzXG4iKTsKKworCS8qIGtlZXAgd2FpdGluZyBhbmQgZnJlZWluZywgdW50 aWwgd2UndmUgZ290ICdlbSBhbGwgKi8KKwl3aGlsZSAoY291bnQtLSkgeworCisJCS8qIEdldHRp bmcgaW50ZXJydXB0ZWQgbWVhbnMgYSBsZWFrLCBidXQgb2sgYXQgc2h1dGRvd24qLworCQlyZXQg PSBkb3duX2ludGVycnVwdGlibGUoJnVkbC0+dXJicy5saW1pdF9zZW0pOworCQlpZiAocmV0KQor CQkJYnJlYWs7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnVkbC0+dXJicy5sb2NrLCBmbGFncyk7 CisKKwkJbm9kZSA9IHVkbC0+dXJicy5saXN0Lm5leHQ7IC8qIGhhdmUgcmVzZXJ2ZWQgb25lIHdp dGggc2VtICovCisJCWxpc3RfZGVsX2luaXQobm9kZSk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmdWRsLT51cmJzLmxvY2ssIGZsYWdzKTsKKworCQl1bm9kZSA9IGxpc3RfZW50cnkobm9k ZSwgc3RydWN0IHVyYl9ub2RlLCBlbnRyeSk7CisJCXVyYiA9IHVub2RlLT51cmI7CisKKwkJLyog RnJlZSBlYWNoIHNlcGFyYXRlbHkgYWxsb2NhdGVkIHBpZWNlICovCisJCXVzYl9mcmVlX2NvaGVy ZW50KHVyYi0+ZGV2LCB1ZGwtPnVyYnMuc2l6ZSwKKwkJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVy LCB1cmItPnRyYW5zZmVyX2RtYSk7CisJCXVzYl9mcmVlX3VyYih1cmIpOworCQlrZnJlZShub2Rl KTsKKwl9CisJdWRsLT51cmJzLmNvdW50ID0gMDsKK30KKworc3RhdGljIGludCB1ZGxfYWxsb2Nf dXJiX2xpc3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvdW50LCBzaXplX3QKc2l6ZSkK K3sKKwlzdHJ1Y3QgdWRsX2RldmljZSAqdWRsID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaSA9 IDA7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB1cmJfbm9kZSAqdW5vZGU7CisJY2hhciAq YnVmOworCisJc3Bpbl9sb2NrX2luaXQoJnVkbC0+dXJicy5sb2NrKTsKKworCXVkbC0+dXJicy5z aXplID0gc2l6ZTsKKwlJTklUX0xJU1RfSEVBRCgmdWRsLT51cmJzLmxpc3QpOworCisJd2hpbGUg KGkgPCBjb3VudCkgeworCQl1bm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1cmJfbm9kZSks IEdGUF9LRVJORUwpOworCQlpZiAoIXVub2RlKQorCQkJYnJlYWs7CisJCXVub2RlLT5kZXYgPSB1 ZGw7CisKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnVub2RlLT5yZWxlYXNlX3VyYl93b3JrLAorCQkJ ICB1ZGxfcmVsZWFzZV91cmJfd29yayk7CisKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBf S0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWtmcmVlKHVub2RlKTsKKwkJCWJyZWFrOworCQl9 CisJCXVub2RlLT51cmIgPSB1cmI7CisKKwkJYnVmID0gdXNiX2FsbG9jX2NvaGVyZW50KHVkbC0+ ZGRldi0+dXNiZGV2LCBNQVhfVFJBTlNGRVIsIEdGUF9LRVJORUwsCisJCQkJCSAmdXJiLT50cmFu c2Zlcl9kbWEpOworCQlpZiAoIWJ1ZikgeworCQkJa2ZyZWUodW5vZGUpOworCQkJdXNiX2ZyZWVf dXJiKHVyYik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xl bmd0aCBzZXQgdG8gYWN0dWFsIGJlZm9yZSBzdWJtaXQgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIo dXJiLCB1ZGwtPmRkZXYtPnVzYmRldiwKdXNiX3NuZGJ1bGtwaXBlKHVkbC0+ZGRldi0+dXNiZGV2 LCAxKSwKKwkJCWJ1Ziwgc2l6ZSwgdWRsX3VyYl9jb21wbGV0aW9uLCB1bm9kZSk7CisJCXVyYi0+ dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkJbGlzdF9hZGRf dGFpbCgmdW5vZGUtPmVudHJ5LCAmdWRsLT51cmJzLmxpc3QpOworCisJCWkrKzsKKwl9CisKKwlz ZW1hX2luaXQoJnVkbC0+dXJicy5saW1pdF9zZW0sIGkpOworCXVkbC0+dXJicy5jb3VudCA9IGk7 CisJdWRsLT51cmJzLmF2YWlsYWJsZSA9IGk7CisKKwlEUk1fREVCVUcoImFsbG9jYXRlZCAlZCAl ZCBieXRlIHVyYnNcbiIsIGksIChpbnQpIHNpemUpOworCisJcmV0dXJuIGk7Cit9CisKK3N0cnVj dCB1cmIgKnVkbF9nZXRfdXJiKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHVk bF9kZXZpY2UgKnVkbCA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldCA9IDA7CisJc3RydWN0 IGxpc3RfaGVhZCAqZW50cnk7CisJc3RydWN0IHVyYl9ub2RlICp1bm9kZTsKKwlzdHJ1Y3QgdXJi ICp1cmIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBXYWl0IGZvciBhbiBp bi1mbGlnaHQgYnVmZmVyIHRvIGNvbXBsZXRlIGFuZCBnZXQgcmUtcXVldWVkICovCisJcmV0ID0g ZG93bl90aW1lb3V0KCZ1ZGwtPnVyYnMubGltaXRfc2VtLCBHRVRfVVJCX1RJTUVPVVQpOworCWlm IChyZXQpIHsKKwkJYXRvbWljX3NldCgmdWRsLT5sb3N0X3BpeGVscywgMSk7CisJCURSTV9JTkZP KCJ3YWl0IGZvciB1cmIgaW50ZXJydXB0ZWQ6ICV4IGF2YWlsYWJsZTogJWRcbiIsCisJCSAgICAg ICByZXQsIHVkbC0+dXJicy5hdmFpbGFibGUpOworCQlnb3RvIGVycm9yOworCX0KKworCXNwaW5f bG9ja19pcnFzYXZlKCZ1ZGwtPnVyYnMubG9jaywgZmxhZ3MpOworCisJQlVHX09OKGxpc3RfZW1w dHkoJnVkbC0+dXJicy5saXN0KSk7IC8qIHJlc2VydmVkIG9uZSB3aXRoIGxpbWl0X3NlbSAqLwor CWVudHJ5ID0gdWRsLT51cmJzLmxpc3QubmV4dDsKKwlsaXN0X2RlbF9pbml0KGVudHJ5KTsKKwl1 ZGwtPnVyYnMuYXZhaWxhYmxlLS07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1ZGwtPnVy YnMubG9jaywgZmxhZ3MpOworCisJdW5vZGUgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgdXJi X25vZGUsIGVudHJ5KTsKKwl1cmIgPSB1bm9kZS0+dXJiOworCitlcnJvcjoKKwlyZXR1cm4gdXJi OworfQorCitpbnQgdWRsX3N1Ym1pdF91cmIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0 IHVyYiAqdXJiLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB1ZGxfZGV2aWNlICp1ZGwgPSBkZXYt PmRldl9wcml2YXRlOworCWludCByZXQ7CisKKwlCVUdfT04obGVuID4gdWRsLT51cmJzLnNpemUp OworCisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gbGVuOyAvKiBzZXQgdG8gYWN0dWFs IHBheWxvYWQgbGVuICovCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsK KwlpZiAocmV0KSB7CisJCXVkbF91cmJfY29tcGxldGlvbih1cmIpOyAvKiBiZWNhdXNlIG5vIG9u ZSBlbHNlIHdpbGwgKi8KKwkJYXRvbWljX3NldCgmdWRsLT5sb3N0X3BpeGVscywgMSk7CisJCURS TV9FUlJPUigidXNiX3N1Ym1pdF91cmIgZXJyb3IgJXhcbiIsIHJldCk7CisJfQorCXJldHVybiBy ZXQ7Cit9CisKK2ludCB1ZGxfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgdWRsX2RldmljZSAqdWRsOworCWludCByZXQ7 CisKKwlEUk1fREVCVUcoIlxuIik7CisJdWRsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVkbF9k ZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVkbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1 ZGwtPmRkZXYgPSBkZXY7CisJZGV2LT5kZXZfcHJpdmF0ZSA9IHVkbDsKKworCWlmICghdWRsX3Bh cnNlX3ZlbmRvcl9kZXNjcmlwdG9yKGRldiwgZGV2LT51c2JkZXYpKSB7CisJCURSTV9FUlJPUigi ZmlybXdhcmUgbm90IHJlY29nbml6ZWQuIEFzc3VtZSBpbmNvbXBhdGlibGUgZGV2aWNlXG4iKTsK KwkJZ290byBlcnI7CisJfQorCisJaWYgKCF1ZGxfYWxsb2NfdXJiX2xpc3QoZGV2LCBXUklURVNf SU5fRkxJR0hULCBNQVhfVFJBTlNGRVIpKSB7CisJCXJldCA9IC1FTk9NRU07CisJCURSTV9FUlJP UigidWRsX2FsbG9jX3VyYl9saXN0IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCURS TV9ERUJVRygiXG4iKTsKKwlyZXQgPSB1ZGxfbW9kZXNldF9pbml0KGRldik7CisKKwlyZXQgPSB1 ZGxfZmJkZXZfaW5pdChkZXYpOworCXJldHVybiAwOworZXJyOgorCWtmcmVlKHVkbCk7CisJRFJN X0VSUk9SKCIlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdWRsX2Ryb3BfdXNi KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJdWRsX2ZyZWVfdXJiX2xpc3QoZGV2KTsKKwly ZXR1cm4gMDsKK30KKworaW50IHVkbF9kcml2ZXJfdW5sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCit7CisJc3RydWN0IHVkbF9kZXZpY2UgKnVkbCA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlp ZiAodWRsLT51cmJzLmNvdW50KQorCQl1ZGxfZnJlZV91cmJfbGlzdChkZXYpOworCisJdWRsX2Zi ZGV2X2NsZWFudXAoZGV2KTsKKwl1ZGxfbW9kZXNldF9jbGVhbnVwKGRldik7CisJa2ZyZWUodWRs KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21v ZGVzZXQuYwpiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX21vZGVzZXQuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmFmOWJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3VkbC91ZGxfbW9kZXNldC5jCkBAIC0wLDAgKzEsNDE0IEBACisvKgorICogQ29w eXJpZ2h0IChDKSAyMDEyIFJlZCBIYXQKKyAqCisgKiBiYXNlZCBpbiBwYXJ0cyBvbiB1ZGxmYi5j OgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG8gYXQgdW5i aXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWwg YXQgZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVy bmllIGF0IHBsdWdhYmxlLmNvbT4KKworICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbApQdWJsaWMKKyAqIExpY2Vuc2Ug djIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCmFy Y2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNp bmNsdWRlICJkcm1fY3J0Yy5oIgorI2luY2x1ZGUgImRybV9jcnRjX2hlbHBlci5oIgorI2luY2x1 ZGUgInVkbF9kcnYuaCIKKworLyoKKyAqIEFsbCBEaXNwbGF5TGluayBidWxrIG9wZXJhdGlvbnMg c3RhcnQgd2l0aCAweEFGLCBmb2xsb3dlZCBieQpzcGVjaWZpYyBjb2RlCisgKiBBbGwgb3BlcmF0 aW9ucyBhcmUgd3JpdHRlbiB0byBidWZmZXJzIHdoaWNoIHRoZW4gbGF0ZXIgZ2V0IHNlbnQgdG8K ZGV2aWNlCisgKi8KK3N0YXRpYyBjaGFyICp1ZGxfc2V0X3JlZ2lzdGVyKGNoYXIgKmJ1ZiwgdTgg cmVnLCB1OCB2YWwpCit7CisJKmJ1ZisrID0gMHhBRjsKKwkqYnVmKysgPSAweDIwOworCSpidWYr KyA9IHJlZzsKKwkqYnVmKysgPSB2YWw7CisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIGNoYXIg KnVkbF92aWRyZWdfbG9jayhjaGFyICpidWYpCit7CisJcmV0dXJuIHVkbF9zZXRfcmVnaXN0ZXIo YnVmLCAweEZGLCAweDAwKTsKK30KKworc3RhdGljIGNoYXIgKnVkbF92aWRyZWdfdW5sb2NrKGNo YXIgKmJ1ZikKK3sKKwlyZXR1cm4gdWRsX3NldF9yZWdpc3RlcihidWYsIDB4RkYsIDB4RkYpOwor fQorCisvKgorICogT24vT2ZmIGZvciBkcml2aW5nIHRoZSBEaXNwbGF5TGluayBmcmFtZWJ1ZmZl ciB0byB0aGUgZGlzcGxheQorICogIDB4MDAgSCBhbmQgViBzeW5jIG9uCisgKiAgMHgwMSBIIGFu ZCBWIHN5bmMgb2ZmIChzY3JlZW4gYmxhbmsgYnV0IHBvd2VyZWQpCisgKiAgMHgwNyBEUE1TIHBv d2VyZG93biAocmVxdWlyZXMgbW9kZXNldCB0byBjb21lIGJhY2spCisgKi8KK3N0YXRpYyBjaGFy ICp1ZGxfZW5hYmxlX2h2c3luYyhjaGFyICpidWYsIGJvb2wgZW5hYmxlKQoreworCWlmIChlbmFi bGUpCisJCXJldHVybiB1ZGxfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHgxRiwgMHgwMCk7CisJZWxzZQor CQlyZXR1cm4gdWRsX3NldF9yZWdpc3RlcihidWYsIDB4MUYsIDB4MDcpOworfQorCitzdGF0aWMg Y2hhciAqdWRsX3NldF9jb2xvcl9kZXB0aChjaGFyICpidWYsIHU4IHNlbGVjdGlvbikKK3sKKwly ZXR1cm4gdWRsX3NldF9yZWdpc3RlcihidWYsIDB4MDAsIHNlbGVjdGlvbik7Cit9CisKK3N0YXRp YyBjaGFyICp1ZGxfc2V0X2Jhc2UxNmJwcChjaGFyICp3cnB0ciwgdTMyIGJhc2UpCit7CisJLyog dGhlIGJhc2UgcG9pbnRlciBpcyAxNiBiaXRzIHdpZGUsIDB4MjAgaXMgaGkgYnl0ZS4gKi8KKwl3 cnB0ciA9IHVkbF9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjAsIGJhc2UgPj4gMTYpOworCXdycHRy ID0gdWRsX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMSwgYmFzZSA+PiA4KTsKKwlyZXR1cm4gdWRs X3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMiwgYmFzZSk7Cit9CisKKy8qCisgKiBEaXNwbGF5TGlu ayBIVyBoYXMgc2VwYXJhdGUgMTZicHAgYW5kIDhicHAgZnJhbWVidWZmZXJzLgorICogSW4gMjRi cHAgbW9kZXMsIHRoZSBsb3cgMzIzIFJHQiBiaXRzIGdvIGluIHRoZSA4YnBwIGZyYW1lYnVmZmVy CisgKi8KK3N0YXRpYyBjaGFyICp1ZGxfc2V0X2Jhc2U4YnBwKGNoYXIgKndycHRyLCB1MzIgYmFz ZSkKK3sKKwl3cnB0ciA9IHVkbF9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjYsIGJhc2UgPj4gMTYp OworCXdycHRyID0gdWRsX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyNywgYmFzZSA+PiA4KTsKKwly ZXR1cm4gdWRsX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyOCwgYmFzZSk7Cit9CisKK3N0YXRpYyBj aGFyICp1ZGxfc2V0X3JlZ2lzdGVyXzE2KGNoYXIgKndycHRyLCB1OCByZWcsIHUxNiB2YWx1ZSkK K3sKKwl3cnB0ciA9IHVkbF9zZXRfcmVnaXN0ZXIod3JwdHIsIHJlZywgdmFsdWUgPj4gOCk7CisJ cmV0dXJuIHVkbF9zZXRfcmVnaXN0ZXIod3JwdHIsIHJlZysxLCB2YWx1ZSk7Cit9CisKKy8qCisg KiBUaGlzIGlzIGtpbmQgb2Ygd2VpcmQgYmVjYXVzZSB0aGUgY29udHJvbGxlciB0YWtlcyBzb21l CisgKiByZWdpc3RlciB2YWx1ZXMgaW4gYSBkaWZmZXJlbnQgYnl0ZSBvcmRlciB0aGFuIG90aGVy IHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGNoYXIgKnVkbF9zZXRfcmVnaXN0ZXJfMTZiZShjaGFy ICp3cnB0ciwgdTggcmVnLCB1MTYgdmFsdWUpCit7CisJd3JwdHIgPSB1ZGxfc2V0X3JlZ2lzdGVy KHdycHRyLCByZWcsIHZhbHVlKTsKKwlyZXR1cm4gdWRsX3NldF9yZWdpc3Rlcih3cnB0ciwgcmVn KzEsIHZhbHVlID4+IDgpOworfQorCisvKgorICogTEZTUiBpcyBsaW5lYXIgZmVlZGJhY2sgc2hp ZnQgcmVnaXN0ZXIuIFRoZSByZWFzb24gd2UgaGF2ZSB0aGlzIGlzCisgKiBiZWNhdXNlIHRoZSBk aXNwbGF5IGNvbnRyb2xsZXIgbmVlZHMgdG8gbWluaW1pemUgdGhlIGNsb2NrIGRlcHRoIG9mCisg KiB2YXJpb3VzIGNvdW50ZXJzIHVzZWQgaW4gdGhlIGRpc3BsYXkgcGF0aC4gU28gdGhpcyBjb2Rl IHJldmVyc2VzIHRoZQorICogcHJvdmlkZWQgdmFsdWUgaW50byB0aGUgbGZzcjE2IHZhbHVlIGJ5 IGNvdW50aW5nIGJhY2t3YXJkcyB0byBnZXQKKyAqIHRoZSB2YWx1ZSB0aGF0IG5lZWRzIHRvIGJl IHNldCBpbiB0aGUgaGFyZHdhcmUgY29tcGFyYXRvciB0byBnZXQgdGhlCisgKiBzYW1lIGFjdHVh bCBjb3VudC4gVGhpcyBtYWtlcyBzZW5zZSBvbmNlIHlvdSByZWFkIGFib3ZlIGEgY291cGxlIG9m CisgKiB0aW1lcyBhbmQgdGhpbmsgYWJvdXQgaXQgZnJvbSBhIGhhcmR3YXJlIHBlcnNwZWN0aXZl LgorICovCitzdGF0aWMgdTE2IHVkbF9sZnNyMTYodTE2IGFjdHVhbF9jb3VudCkKK3sKKwl1MzIg bHYgPSAweEZGRkY7IC8qIFRoaXMgaXMgdGhlIGxmc3IgdmFsdWUgdGhhdCB0aGUgaHcgc3RhcnRz IHdpdGggKi8KKworCXdoaWxlIChhY3R1YWxfY291bnQtLSkgeworCQlsdiA9CSAoKGx2IDw8IDEp IHwKKwkJCSgoKGx2ID4+IDE1KSBeIChsdiA+PiA0KSBeIChsdiA+PiAyKSBeIChsdiA+PiAxKSkg JiAxKSkKKwkJCSYgMHhGRkZGOworCX0KKworCXJldHVybiAodTE2KSBsdjsKK30KKworLyoKKyAq IFRoaXMgZG9lcyBMRlNSIGNvbnZlcnNpb24gb24gdGhlIHZhbHVlIHRoYXQgaXMgdG8gYmUgd3Jp dHRlbi4KKyAqIFNlZSBMRlNSIGV4cGxhbmF0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbC4KKyAq Lworc3RhdGljIGNoYXIgKnVkbF9zZXRfcmVnaXN0ZXJfbGZzcjE2KGNoYXIgKndycHRyLCB1OCBy ZWcsIHUxNiB2YWx1ZSkKK3sKKwlyZXR1cm4gdWRsX3NldF9yZWdpc3Rlcl8xNih3cnB0ciwgcmVn LCB1ZGxfbGZzcjE2KHZhbHVlKSk7Cit9CisKKy8qCisgKiBUaGlzIHRha2VzIGEgc3RhbmRhcmQg ZmJkZXYgc2NyZWVuaW5mbyBzdHJ1Y3QgYW5kIGFsbCBvZiBpdHMgbW9uaXRvcgptb2RlCisgKiBk ZXRhaWxzIGFuZCBjb252ZXJ0cyB0aGVtIGludG8gdGhlIERpc3BsYXlMaW5rIGVxdWl2YWxlbnQg cmVnaXN0ZXIKY29tbWFuZHMuCisgIEVSUih2cmVnKGRldiwgICAgICAgICAgICAgICAweDAwLCAo Y29sb3JfZGVwdGggPT0gMTYpID8gMCA6IDEpKTsKKyAgRVJSKHZyZWdfbGZzcjE2KGRldiwgICAg ICAgIDB4MDEsIHhEaXNwbGF5U3RhcnQpKTsKKyAgRVJSKHZyZWdfbGZzcjE2KGRldiwgICAgICAg IDB4MDMsIHhEaXNwbGF5RW5kKSk7CisgIEVSUih2cmVnX2xmc3IxNihkZXYsICAgICAgICAweDA1 LCB5RGlzcGxheVN0YXJ0KSk7CisgIEVSUih2cmVnX2xmc3IxNihkZXYsICAgICAgICAweDA3LCB5 RGlzcGxheUVuZCkpOworICBFUlIodnJlZ19sZnNyMTYoZGV2LCAgICAgICAgMHgwOSwgeEVuZENv dW50KSk7CisgIEVSUih2cmVnX2xmc3IxNihkZXYsICAgICAgICAweDBCLCBoU3luY1N0YXJ0KSk7 CisgIEVSUih2cmVnX2xmc3IxNihkZXYsICAgICAgICAweDBELCBoU3luY0VuZCkpOworICBFUlIo dnJlZ19iaWdfZW5kaWFuKGRldiwgICAgMHgwRiwgaFBpeGVscykpOworICBFUlIodnJlZ19sZnNy MTYoZGV2LCAgICAgICAgMHgxMSwgeUVuZENvdW50KSk7CisgIEVSUih2cmVnX2xmc3IxNihkZXYs ICAgICAgICAweDEzLCB2U3luY1N0YXJ0KSk7CisgIEVSUih2cmVnX2xmc3IxNihkZXYsICAgICAg ICAweDE1LCB2U3luY0VuZCkpOworICBFUlIodnJlZ19iaWdfZW5kaWFuKGRldiwgICAgMHgxNywg dlBpeGVscykpOworICBFUlIodnJlZ19saXR0bGVfZW5kaWFuKGRldiwgMHgxQiwgcGl4ZWxDbG9j azVLSHopKTsKKworICBFUlIodnJlZyhkZXYsICAgICAgICAgICAgICAgMHgxRiwgMCkpOworCisg IEVSUih2YnVmKGRldiwgV1JJVEVfVklEUkVHX1VOTE9DSywgRFNJWkVPRihXUklURV9WSURSRUdf VU5MT0NLKSkpOworICovCitzdGF0aWMgY2hhciAqdWRsX3NldF92aWRfY21kcyhjaGFyICp3cnB0 ciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUKKm1vZGUpCit7CisJdTE2IHhkcywgeWRzOworCXUx NiB4ZGUsIHlkZTsKKwl1MTYgeWVjOworCisJLyogeCBkaXNwbGF5IHN0YXJ0ICovCisJeGRzID0g bW9kZS0+Y3J0Y19odG90YWwgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0OworCXdycHRyID0gdWRs X3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDEsIHhkcyk7CisJLyogeCBkaXNwbGF5IGVu ZCAqLworCXhkZSA9IHhkcyArIG1vZGUtPmNydGNfaGRpc3BsYXk7CisJd3JwdHIgPSB1ZGxfc2V0 X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwMywgeGRlKTsKKworCS8qIHkgZGlzcGxheSBzdGFy dCAqLworCXlkcyA9IG1vZGUtPmNydGNfdnRvdGFsIC0gbW9kZS0+Y3J0Y192c3luY19zdGFydDsK Kwl3cnB0ciA9IHVkbF9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDA1LCB5ZHMpOworCS8q IHkgZGlzcGxheSBlbmQgKi8KKwl5ZGUgPSB5ZHMgKyBtb2RlLT5jcnRjX3ZkaXNwbGF5OworCXdy cHRyID0gdWRsX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDcsIHlkZSk7CisKKwkvKiB4 IGVuZCBjb3VudCBpcyBhY3RpdmUgKyBibGFua2luZyAtIDEgKi8KKwl3cnB0ciA9IHVkbF9zZXRf cmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDA5LAorCQkJCQltb2RlLT5jcnRjX2h0b3RhbCAtIDEp OworCisJLyogbGliZGxvIGhhcmRjb2RlcyBoc3luYyBzdGFydCB0byAxICovCisJd3JwdHIgPSB1 ZGxfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwQiwgMSk7CisKKwkvKiBoc3luYyBlbmQg aXMgd2lkdGggb2Ygc3luYyBwdWxzZSArIDEgKi8KKwl3cnB0ciA9IHVkbF9zZXRfcmVnaXN0ZXJf bGZzcjE2KHdycHRyLCAweDBELAorCQkJCQltb2RlLT5jcnRjX2hzeW5jX2VuZCAtIG1vZGUtPmNy dGNfaHN5bmNfc3RhcnQgKyAxKTsKKworCS8qIGhwaXhlbHMgaXMgYWN0aXZlIHBpeGVscyAqLwor CXdycHRyID0gdWRsX3NldF9yZWdpc3Rlcl8xNih3cnB0ciwgMHgwRiwgbW9kZS0+aGRpc3BsYXkp OworCisJLyogeWVuZGNvdW50IGlzIHZlcnRpY2FsIGFjdGl2ZSArIHZlcnRpY2FsIGJsYW5raW5n ICovCisJeWVjID0gbW9kZS0+Y3J0Y192dG90YWw7CisJd3JwdHIgPSB1ZGxfc2V0X3JlZ2lzdGVy X2xmc3IxNih3cnB0ciwgMHgxMSwgeWVjKTsKKworCS8qIGxpYmRsbyBoYXJkY29kZXMgdnN5bmMg c3RhcnQgdG8gMCAqLworCXdycHRyID0gdWRsX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4 MTMsIDApOworCisJLyogdnN5bmMgZW5kIGlzIHdpZHRoIG9mIHZzeW5jIHB1bHNlICovCisJd3Jw dHIgPSB1ZGxfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgxNSwgbW9kZS0+Y3J0Y192c3lu Y19lbmQgLQptb2RlLT5jcnRjX3ZzeW5jX3N0YXJ0KTsKKworCS8qIHZwaXhlbHMgaXMgYWN0aXZl IHBpeGVscyAqLworCXdycHRyID0gdWRsX3NldF9yZWdpc3Rlcl8xNih3cnB0ciwgMHgxNywgbW9k ZS0+Y3J0Y192ZGlzcGxheSk7CisKKwl3cnB0ciA9IHVkbF9zZXRfcmVnaXN0ZXJfMTZiZSh3cnB0 ciwgMHgxQiwKKwkJCQkgICAgICBtb2RlLT5jbG9jayAvIDUpOworCisJcmV0dXJuIHdycHRyOwor fQorCitzdGF0aWMgaW50IHVkbF9jcnRjX3dyaXRlX21vZGVfdG9faHcoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0 IHVkbF9kZXZpY2UgKnVkbCA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHVyYiAqdXJiOwor CWNoYXIgKmJ1ZjsKKwlpbnQgcmV0dmFsOworCisJdXJiID0gdWRsX2dldF91cmIoZGV2KTsKKwlp ZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlidWYgPSAoY2hhciAqKXVyYi0+dHJhbnNm ZXJfYnVmZmVyOworCisJbWVtY3B5KGJ1ZiwgdWRsLT5tb2RlX2J1ZiwgdWRsLT5tb2RlX2J1Zl9s ZW4pOworCXJldHZhbCA9IHVkbF9zdWJtaXRfdXJiKGRldiwgdXJiLCB1ZGwtPm1vZGVfYnVmX2xl bik7CisJRFJNX0lORk8oIndyaXRlIG1vZGUgaW5mbyAlZFxuIiwgdWRsLT5tb2RlX2J1Zl9sZW4p OworCXJldHVybiByZXR2YWw7Cit9CisKKworc3RhdGljIHZvaWQgdWRsX2NydGNfZHBtcyhzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsIGludCBtb2RlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjcnRjLT5kZXY7CisJc3RydWN0IHVkbF9kZXZpY2UgKnVkbCA9IGRldi0+ZGV2X3ByaXZhdGU7 CisJaW50IHJldHZhbDsKKworCWlmIChtb2RlID09IERSTV9NT0RFX0RQTVNfT0ZGKSB7CisJCWNo YXIgKmJ1ZjsKKwkJc3RydWN0IHVyYiAqdXJiOworCQl1cmIgPSB1ZGxfZ2V0X3VyYihkZXYpOwor CQlpZiAoIXVyYikKKwkJCXJldHVybjsKKworCQlidWYgPSAoY2hhciAqKXVyYi0+dHJhbnNmZXJf YnVmZmVyOworCQlidWYgPSB1ZGxfdmlkcmVnX2xvY2soYnVmKTsKKwkJYnVmID0gdWRsX2VuYWJs ZV9odnN5bmMoYnVmLCBmYWxzZSk7CisJCWJ1ZiA9IHVkbF92aWRyZWdfdW5sb2NrKGJ1Zik7CisK KwkJcmV0dmFsID0gdWRsX3N1Ym1pdF91cmIoZGV2LCB1cmIsIGJ1ZiAtIChjaGFyICopCisJCQkJ CXVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwl9IGVsc2UgeworCQlpZiAodWRsLT5tb2RlX2J1Zl9s ZW4gPT0gMCkgeworCQkJRFJNX0VSUk9SKCJUcnlpbmcgdG8gZW5hYmxlIERQTVMgd2l0aCBubyBt b2RlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCQl1ZGxfY3J0Y193cml0ZV9tb2RlX3RvX2h3KGNy dGMpOworCX0KKworfQorCitzdGF0aWMgYm9vbCB1ZGxfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKKwkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJ CSAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCisKK3sKKwlyZXR1cm4g dHJ1ZTsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQKK3VkbF9waXBlX3NldF9iYXNlX2F0b21pYyhz dHJ1Y3QgZHJtX2NydGMgKmNydGMsIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIKKmZiLAorCQkJICAg aW50IHgsIGludCB5LCBlbnVtIG1vZGVfc2V0X2F0b21pYyBzdGF0ZSkKK3sKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludAordWRsX3BpcGVfc2V0X2Jhc2Uoc3RydWN0IGRybV9jcnRjICpjcnRj LCBpbnQgeCwgaW50IHksCisJCSAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCit7 CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB1ZGxfY3J0Y19tb2RlX3NldChz dHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUsCisJCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUs CisJCQkgICAgICAgaW50IHgsIGludCB5LAorCQkJICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKm9sZF9mYikKKworeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJ c3RydWN0IHVkbF9mcmFtZWJ1ZmZlciAqdWZiID0gdG9fdWRsX2ZiKGNydGMtPmZiKTsKKwlzdHJ1 Y3QgdWRsX2RldmljZSAqdWRsID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwljaGFyICpidWY7CisJY2hh ciAqd3JwdHI7CisJaW50IGNvbG9yX2RlcHRoID0gMDsKKworCWJ1ZiA9IChjaGFyICopdWRsLT5t b2RlX2J1ZjsKKworCS8qIGZvciBub3cgd2UganVzdCBjbGlwIDI0IC0+IDE2IC0gaWYgd2UgZml4 IHRoYXQgZml4IHRoaXMgKi8KKwkvKmlmICAoY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsICE9IDE2 KQorCSAgY29sb3JfZGVwdGggPSAxOyAqLworCisJLyogVGhpcyBmaXJzdCBzZWN0aW9uIGhhcyB0 byBkbyB3aXRoIHNldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyBvbiB0aGUKKwkqIGNvbnRyb2xsZXIg KiBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXkuIFRoZXJlIGFyZSAyIGJhc2UKKwkqIHBvaW50 ZXJzLCBjdXJyZW50bHksIHdlIG9ubHkgKiB1c2UgdGhlIDE2IGJwcCBzZWdtZW50LgorCSovCisJ d3JwdHIgPSB1ZGxfdmlkcmVnX2xvY2soYnVmKTsKKwl3cnB0ciA9IHVkbF9zZXRfY29sb3JfZGVw dGgod3JwdHIsIGNvbG9yX2RlcHRoKTsKKwkvKiBzZXQgYmFzZSBmb3IgMTZicHAgc2VnbWVudCB0 byAwICovCisJd3JwdHIgPSB1ZGxfc2V0X2Jhc2UxNmJwcCh3cnB0ciwgMCk7CisJLyogc2V0IGJh c2UgZm9yIDhicHAgc2VnbWVudCB0byBlbmQgb2YgZmIgKi8KKwl3cnB0ciA9IHVkbF9zZXRfYmFz ZThicHAod3JwdHIsIDIgKiBtb2RlLT52ZGlzcGxheSAqCm1vZGUtPmhkaXNwbGF5KTsgLy8weDM1 ZTAwMCk7CisKKwl3cnB0ciA9IHVkbF9zZXRfdmlkX2NtZHMod3JwdHIsIGFkanVzdGVkX21vZGUp OworCXdycHRyID0gdWRsX2VuYWJsZV9odnN5bmMod3JwdHIsIHRydWUpOworCXdycHRyID0gdWRs X3ZpZHJlZ191bmxvY2sod3JwdHIpOworCisJdWZiLT5hY3RpdmVfMTYgPSB0cnVlOworCWlmIChv bGRfZmIpIHsKKwkJc3RydWN0IHVkbF9mcmFtZWJ1ZmZlciAqdW9sZF9mYiA9IHRvX3VkbF9mYihv bGRfZmIpOworCQl1b2xkX2ZiLT5hY3RpdmVfMTYgPSBmYWxzZTsKKwl9CisJdWRsLT5tb2RlX2J1 Zl9sZW4gPSB3cnB0ciAtIGJ1ZjsKKworCS8qIGRhbWFnZSBhbGwgb2YgaXQgKi8KKwl1ZGxfaGFu ZGxlX2RhbWFnZSh1ZmIsIDAsIDAsIHVmYi0+YmFzZS53aWR0aCwgdWZiLT5iYXNlLmhlaWdodCk7 CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgdWRsX2NydGNfZGlzYWJsZShzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMpCit7CisKKworfQorCitzdGF0aWMgdm9pZCB1ZGxfY3J0Y19kZXN0cm95 KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlkcm1fY3J0Y19jbGVhbnVwKGNydGMpOworCWtm cmVlKGNydGMpOworfQorCitzdGF0aWMgdm9pZCB1ZGxfbG9hZF9sdXQoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworfQorCitzdGF0aWMgdm9pZCB1ZGxfY3J0Y19wcmVwYXJlKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YykKK3sKK30KKworc3RhdGljIHZvaWQgdWRsX2NydGNfY29tbWl0KHN0cnVjdCBk cm1fY3J0YyAqY3J0YykKK3sKKwl1ZGxfY3J0Y19kcG1zKGNydGMsIERSTV9NT0RFX0RQTVNfT04p OworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyB1ZGxfaGVscGVyX2Z1 bmNzID0geworCS5kcG1zID0gdWRsX2NydGNfZHBtcywKKwkubW9kZV9maXh1cCA9IHVkbF9jcnRj X21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gdWRsX2NydGNfbW9kZV9zZXQsCisJLnByZXBhcmUg PSB1ZGxfY3J0Y19wcmVwYXJlLAorCS5jb21taXQgPSB1ZGxfY3J0Y19jb21taXQsCisJLmRpc2Fi bGUgPSB1ZGxfY3J0Y19kaXNhYmxlLAorCS5sb2FkX2x1dCA9IHVkbF9sb2FkX2x1dCwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgdWRsX2NydGNfZnVuY3MgPSB7CisJ LnNldF9jb25maWcgPSBkcm1fY3J0Y19oZWxwZXJfc2V0X2NvbmZpZywKKwkuZGVzdHJveSA9IHVk bF9jcnRjX2Rlc3Ryb3ksCit9OworCitpbnQgdWRsX2NydGNfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQoreworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKKworCWNydGMgPSBremFsbG9jKHNp emVvZihzdHJ1Y3QgZHJtX2NydGMpICsgc2l6ZW9mKHN0cnVjdCBkcm1fY29ubmVjdG9yCiopLCBH RlBfS0VSTkVMKTsKKwlpZiAoY3J0YyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRy bV9jcnRjX2luaXQoZGV2LCBjcnRjLCAmdWRsX2NydGNfZnVuY3MpOworCWRybV9jcnRjX2hlbHBl cl9hZGQoY3J0YywgJnVkbF9oZWxwZXJfZnVuY3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIHVkbF9tb2RlX2Z1bmNzID0gewor CS5mYl9jcmVhdGUgPSB1ZGxfZmJfdXNlcl9mYl9jcmVhdGUsCisJLm91dHB1dF9wb2xsX2NoYW5n ZWQgPSBOVUxMLAorfTsKKworaW50IHVkbF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2Ug KmRldikKK3sKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CisJZHJtX21vZGVfY29uZmln X2luaXQoZGV2KTsKKworCWRldi0+bW9kZV9jb25maWcubWluX3dpZHRoID0gNjQwOworCWRldi0+ bW9kZV9jb25maWcubWluX2hlaWdodCA9IDQ4MDsKKworCWRldi0+bW9kZV9jb25maWcubWF4X3dp ZHRoID0gMjA0ODsKKwlkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSAyMDQ4OworCisJZGV2 LT5tb2RlX2NvbmZpZy5wcmVmZXJfc2hhZG93ID0gMDsKKwlkZXYtPm1vZGVfY29uZmlnLnByZWZl cnJlZF9kZXB0aCA9IDI0OworCisJZGV2LT5tb2RlX2NvbmZpZy5mdW5jcyA9ICh2b2lkICopJnVk bF9tb2RlX2Z1bmNzOworCisJZHJtX21vZGVfY3JlYXRlX2RpcnR5X2luZm9fcHJvcGVydHkoZGV2 KTsKKworCXVkbF9jcnRjX2luaXQoZGV2KTsKKworCWVuY29kZXIgPSB1ZGxfZW5jb2Rlcl9pbml0 KGRldik7CisKKwl1ZGxfY29ubmVjdG9yX2luaXQoZGV2LCBlbmNvZGVyKTsKKworCXJldHVybiAw OworfQorCit2b2lkIHVkbF9tb2Rlc2V0X2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikK K3sKKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3VkbC91ZGxfdHJhbnNmZXIuYwpiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX3Ry YW5zZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkzMjBlMgotLS0g L2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS91ZGwvdWRsX3RyYW5zZmVyLmMKQEAgLTAs MCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVkIEhhdAorICogYmFzZWQg aW4gcGFydHMgb24gdWRsZmIuYzoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSb2JlcnRvIERlIElv cmlzIDxyb2JlcnRvIGF0IHVuYml0Lml0PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpheWEgS3Vt YXIgPGpheWFrdW1hci5sa21sIGF0IGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBC ZXJuaWUgVGhvbXBzb24gPGJlcm5pZSBhdCBwbHVnYWJsZS5jb20+CisgKgorICogVGhpcyBmaWxl IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJh bApQdWJsaWMKKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWlu IGRpcmVjdG9yeSBvZiB0aGlzCmFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNs dWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisKKyNpbmNsdWRl ICJkcm1QLmgiCisjaW5jbHVkZSAidWRsX2Rydi5oIgorCisjZGVmaW5lIE1BWF9DTURfUElYRUxT CQkyNTUKKworI2RlZmluZSBSTFhfSEVBREVSX0JZVEVTCTcKKyNkZWZpbmUgTUlOX1JMWF9QSVhf QllURVMgICAgICAgNAorI2RlZmluZSBNSU5fUkxYX0NNRF9CWVRFUwkoUkxYX0hFQURFUl9CWVRF UyArIE1JTl9STFhfUElYX0JZVEVTKQorCisjZGVmaW5lIFJMRV9IRUFERVJfQllURVMJNgorI2Rl ZmluZSBNSU5fUkxFX1BJWF9CWVRFUwkzCisjZGVmaW5lIE1JTl9STEVfQ01EX0JZVEVTCShSTEVf SEVBREVSX0JZVEVTICsgTUlOX1JMRV9QSVhfQllURVMpCisKKyNkZWZpbmUgUkFXX0hFQURFUl9C WVRFUwk2CisjZGVmaW5lIE1JTl9SQVdfUElYX0JZVEVTCTIKKyNkZWZpbmUgTUlOX1JBV19DTURf QllURVMJKFJBV19IRUFERVJfQllURVMgKyBNSU5fUkFXX1BJWF9CWVRFUykKKworLyoKKyAqIFRy aW1zIGlkZW50aWNhbCBkYXRhIGZyb20gZnJvbnQgYW5kIGJhY2sgb2YgbGluZQorICogU2V0cyBu ZXcgZnJvbnQgYnVmZmVyIGFkZHJlc3MgYW5kIHdpZHRoCisgKiBBbmQgcmV0dXJucyBieXRlIGNv dW50IG9mIGlkZW50aWNhbCBwaXhlbHMKKyAqIEFzc3VtZXMgQ1BVIG5hdHVyYWwgYWxpZ25tZW50 ICh1bnNpZ25lZCBsb25nKQorICogZm9yIGJhY2sgYW5kIGZyb250IGJ1ZmZlciBwdHJzIGFuZCB3 aWR0aAorICovCisjaWYgMAorc3RhdGljIGludCB1ZGxfdHJpbV9obGluZShjb25zdCB1OCAqYmJh Y2ssIGNvbnN0IHU4ICoqYmZyb250LCBpbnQKKndpZHRoX2J5dGVzKQoreworCWludCBqLCBrOwor CWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJhY2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKSBiYmFj azsKKwljb25zdCB1bnNpZ25lZCBsb25nICpmcm9udCA9IChjb25zdCB1bnNpZ25lZCBsb25nICop ICpiZnJvbnQ7CisJY29uc3QgaW50IHdpZHRoID0gKndpZHRoX2J5dGVzIC8gc2l6ZW9mKHVuc2ln bmVkIGxvbmcpOworCWludCBpZGVudGljYWwgPSB3aWR0aDsKKwlpbnQgc3RhcnQgPSB3aWR0aDsK KwlpbnQgZW5kID0gd2lkdGg7CisKKwlwcmVmZXRjaCgodm9pZCAqKSBmcm9udCk7CisJcHJlZmV0 Y2goKHZvaWQgKikgYmFjayk7CisKKwlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworCQlp ZiAoYmFja1tqXSAhPSBmcm9udFtqXSkgeworCQkJc3RhcnQgPSBqOworCQkJYnJlYWs7CisJCX0K Kwl9CisKKwlmb3IgKGsgPSB3aWR0aCAtIDE7IGsgPiBqOyBrLS0pIHsKKwkJaWYgKGJhY2tba10g IT0gZnJvbnRba10pIHsKKwkJCWVuZCA9IGsrMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWRl bnRpY2FsID0gc3RhcnQgKyAod2lkdGggLSBlbmQpOworCSpiZnJvbnQgPSAodTggKikgJmZyb250 W3N0YXJ0XTsKKwkqd2lkdGhfYnl0ZXMgPSAoZW5kIC0gc3RhcnQpICogc2l6ZW9mKHVuc2lnbmVk IGxvbmcpOworCisJcmV0dXJuIGlkZW50aWNhbCAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKK30K KyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHUxNiBwaXhlbDMyX3RvX2JlMTZwKGNvbnN0IHVpbnQ4 X3QgKnBpeGVsKQoreworCXVpbnQzMl90IHBpeCA9ICoodWludDMyX3QgKilwaXhlbDsKKwl1MTYg cmV0dmFsOworCisJcmV0dmFsID0gICgoKHBpeCA+PiAzKSAmIDB4MDAxZikgfAorCQkgICAoKHBp eCA+PiA1KSAmIDB4MDdlMCkgfAorCQkgICAoKHBpeCA+PiA4KSAmIDB4ZjgwMCkpOworCXJldHVy biByZXR2YWw7Cit9CisKKy8qCisgKiBSZW5kZXIgYSBjb21tYW5kIHN0cmVhbSBmb3IgYW4gZW5j b2RlZCBob3Jpem9udGFsIGxpbmUgc2VnbWVudCBvZgpwaXhlbHMuCisgKgorICogQSBjb21tYW5k IGJ1ZmZlciBob2xkcyBzZXZlcmFsIGNvbW1hbmRzLgorICogSXQgYWx3YXlzIGJlZ2lucyB3aXRo IGEgZnJlc2ggY29tbWFuZCBoZWFkZXIKKyAqICh0aGUgcHJvdG9jb2wgZG9lc24ndCByZXF1aXJl IHRoaXMsIGJ1dCB3ZSBlbmZvcmNlIGl0IHRvIGFsbG93CisgKiBtdWx0aXBsZSBidWZmZXJzIHRv IGJlIHBvdGVudGlhbGx5IGVuY29kZWQgYW5kIHNlbnQgaW4gcGFyYWxsZWwpLgorICogQSBzaW5n bGUgY29tbWFuZCBlbmNvZGVzIG9uZSBjb250aWd1b3VzIGhvcml6b250YWwgbGluZSBvZiBwaXhl bHMKKyAqCisgKiBUaGUgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBjbGllbnQgdG8gZG8gYWxsIGFs bG9jYXRpb24sIHNvIHRoYXQKKyAqIHJlbmRlcmluZyBjYW4gYmUgZG9uZSBkaXJlY3RseSB0byBv dXRwdXQgYnVmZmVycyAoZS5nLiBVU0IgVVJCcykuCisgKiBUaGUgZnVuY3Rpb24gZmlsbHMgdGhl IHN1cHBsaWVkIGNvbW1hbmQgYnVmZmVyLCBwcm92aWRpbmcKaW5mb3JtYXRpb24KKyAqIG9uIHdo ZXJlIGl0IGxlZnQgb2ZmLCBzbyB0aGUgY2xpZW50IG1heSBjYWxsIGluIGFnYWluIHdpdGgKYWRk aXRpb25hbAorICogYnVmZmVycyBpZiB0aGUgbGluZSB3aWxsIHRha2Ugc2V2ZXJhbCBidWZmZXJz IHRvIGNvbXBsZXRlLgorICoKKyAqIEEgc2luZ2xlIGNvbW1hbmQgY2FuIHRyYW5zbWl0IGEgbWF4 aW11bSBvZiAyNTYgcGl4ZWxzLAorICogcmVnYXJkbGVzcyBvZiB0aGUgY29tcHJlc3Npb24gcmF0 aW8gKHByb3RvY29sIGRlc2lnbiBsaW1pdCkuCisgKiBUbyB0aGUgaGFyZHdhcmUsIDAgZm9yIGEg c2l6ZSBieXRlIG1lYW5zIDI1NgorICoKKyAqIFJhdGhlciB0aGFuIDI1NiBwaXhlbCBjb21tYW5k cyB3aGljaCBhcmUgZWl0aGVyIHJsIG9yIHJhdyBlbmNvZGVkLAorICogdGhlIHJseCBjb21tYW5k IHNpbXBseSBhc3N1bWVzIGFsdGVybmF0aW5nIHJhdyBhbmQgcmwgc3BhbnMgd2l0aGluCm9uZSBj bWQuCisgKiBUaGlzIGhhcyBhIHNsaWdodGx5IGxhcmdlciBoZWFkZXIgb3ZlcmhlYWQsIGJ1dCBw cm9kdWNlcyBtb3JlIGV2ZW4KcmVzdWx0cy4KKyAqIEl0IGFsc28gcHJvY2Vzc2VzIGFsbCBkYXRh IChyZWFkIGFuZCB3cml0ZSkgaW4gYSBzaW5nbGUgcGFzcy4KKyAqIFBlcmZvcm1hbmNlIGJlbmNo bWFya3Mgb2YgY29tbW9uIGNhc2VzIHNob3cgaXQgaGF2aW5nIGp1c3Qgc2xpZ2h0bHkKYmV0dGVy CisgKiBjb21wcmVzc2lvbiB0aGFuIDI1NiBwaXhlbCByYXcgb3IgcmxlIGNvbW1hbmRzLCB3aXRo IHNpbWlsYXIgQ1BVCmNvbnN1bXBpb24uCisgKiBCdXQgZm9yIHZlcnkgcmwgZnJpZW5kbHkgZGF0 YSwgd2lsbCBjb21wcmVzcyBub3QgcXVpdGUgYXMgd2VsbC4KKyAqLworc3RhdGljIHZvaWQgdWRs X2NvbXByZXNzX2hsaW5lMTYoCisJY29uc3QgdTggKipwaXhlbF9zdGFydF9wdHIsCisJY29uc3Qg dTggKmNvbnN0IHBpeGVsX2VuZCwKKwl1aW50MzJfdCAqZGV2aWNlX2FkZHJlc3NfcHRyLAorCXVp bnQ4X3QgKipjb21tYW5kX2J1ZmZlcl9wdHIsCisJY29uc3QgdWludDhfdCAqY29uc3QgY21kX2J1 ZmZlcl9lbmQsIGludCBicHApCit7CisJY29uc3QgdTggKnBpeGVsID0gKnBpeGVsX3N0YXJ0X3B0 cjsKKwl1aW50MzJfdCBkZXZfYWRkciAgPSAqZGV2aWNlX2FkZHJlc3NfcHRyOworCXVpbnQ4X3Qg KmNtZCA9ICpjb21tYW5kX2J1ZmZlcl9wdHI7CisKKwl3aGlsZSAoKHBpeGVsX2VuZCA+IHBpeGVs KSAmJgorCSAgICAgICAoY21kX2J1ZmZlcl9lbmQgLSBNSU5fUkxYX0NNRF9CWVRFUyA+IGNtZCkp IHsKKwkJdWludDhfdCAqcmF3X3BpeGVsc19jb3VudF9ieXRlID0gMDsKKwkJdWludDhfdCAqY21k X3BpeGVsc19jb3VudF9ieXRlID0gMDsKKwkJY29uc3QgdTggKnJhd19waXhlbF9zdGFydCA9IDA7 CisJCWNvbnN0IHU4ICpjbWRfcGl4ZWxfc3RhcnQsICpjbWRfcGl4ZWxfZW5kID0gMDsKKworCQlw cmVmZXRjaHcoKHZvaWQgKikgY21kKTsgLyogcHVsbCBpbiBvbmUgY2FjaGUgbGluZSBhdCBsZWFz dCAqLworCisJCSpjbWQrKyA9IDB4YWY7CisJCSpjbWQrKyA9IDB4NmI7CisJCSpjbWQrKyA9ICh1 aW50OF90KSAoKGRldl9hZGRyID4+IDE2KSAmIDB4RkYpOworCQkqY21kKysgPSAodWludDhfdCkg KChkZXZfYWRkciA+PiA4KSAmIDB4RkYpOworCQkqY21kKysgPSAodWludDhfdCkgKChkZXZfYWRk cikgJiAweEZGKTsKKworCQljbWRfcGl4ZWxzX2NvdW50X2J5dGUgPSBjbWQrKzsgLyogIHdlJ2xs IGtub3cgdGhpcyBsYXRlciAqLworCQljbWRfcGl4ZWxfc3RhcnQgPSBwaXhlbDsKKworCQlyYXdf cGl4ZWxzX2NvdW50X2J5dGUgPSBjbWQrKzsgLyogIHdlJ2xsIGtub3cgdGhpcyBsYXRlciAqLwor CQlyYXdfcGl4ZWxfc3RhcnQgPSBwaXhlbDsKKworCQljbWRfcGl4ZWxfZW5kID0gcGl4ZWwgKyAo bWluKE1BWF9DTURfUElYRUxTICsgMSwKKwkJCW1pbigoaW50KShwaXhlbF9lbmQgLSBwaXhlbCkg LyBicHAsCisJCQkgICAgKGludCkoY21kX2J1ZmZlcl9lbmQgLSBjbWQpIC8gMikpKSAqIGJwcDsK KworCQlwcmVmZXRjaF9yYW5nZSgodm9pZCAqKSBwaXhlbCwgKGNtZF9waXhlbF9lbmQgLSBwaXhl bCkgKiBicHApOworCisJCXdoaWxlIChwaXhlbCA8IGNtZF9waXhlbF9lbmQpIHsKKwkJCWNvbnN0 IHU4ICogY29uc3QgcmVwZWF0aW5nX3BpeGVsID0gcGl4ZWw7CisKKwkJCWlmIChicHAgPT0gMikK KwkJCQkqKHVpbnQxNl90ICopY21kID0gY3B1X3RvX2JlMTZwKCh1aW50MTZfdCAqKXBpeGVsKTsK KwkJCWVsc2UgaWYgKGJwcCA9PSA0KQorCQkJCSoodWludDE2X3QgKiljbWQgPSBjcHVfdG9fYmUx NihwaXhlbDMyX3RvX2JlMTZwKHBpeGVsKSk7CisKKwkJCWNtZCArPSAyOworCQkJcGl4ZWwgKz0g YnBwOworCisJCQlpZiAodW5saWtlbHkoKHBpeGVsIDwgY21kX3BpeGVsX2VuZCkgJiYKKwkJCQkg ICAgICghbWVtY21wKHBpeGVsLCByZXBlYXRpbmdfcGl4ZWwsIGJwcCkpKSkgeworCQkJCS8qIGdv IGJhY2sgYW5kIGZpbGwgaW4gcmF3IHBpeGVsIGNvdW50ICovCisJCQkJKnJhd19waXhlbHNfY291 bnRfYnl0ZSA9ICgoKHJlcGVhdGluZ19waXhlbCAtCisJCQkJCQlyYXdfcGl4ZWxfc3RhcnQpIC8g YnBwKSArIDEpICYgMHhGRjsKKworCQkJCXdoaWxlICgocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKQor CQkJCSAgICAgICAmJiAoIW1lbWNtcChwaXhlbCwgcmVwZWF0aW5nX3BpeGVsLCBicHApKSkgewor CQkJCQlwaXhlbCArPSBicHA7CisJCQkJfQorCisJCQkJLyogaW1tZWRpYXRlbHkgYWZ0ZXIgcmF3 IGRhdGEgaXMgcmVwZWF0IGJ5dGUgKi8KKwkJCQkqY21kKysgPSAoKChwaXhlbCAtIHJlcGVhdGlu Z19waXhlbCkgLyBicHApIC0gMSkgJiAweEZGOworCisJCQkJLyogVGhlbiBzdGFydCBhbm90aGVy IHJhdyBwaXhlbCBzcGFuICovCisJCQkJcmF3X3BpeGVsX3N0YXJ0ID0gcGl4ZWw7CisJCQkJcmF3 X3BpeGVsc19jb3VudF9ieXRlID0gY21kKys7CisJCQl9CisJCX0KKworCQlpZiAocGl4ZWwgPiBy YXdfcGl4ZWxfc3RhcnQpIHsKKwkJCS8qIGZpbmFsaXplIGxhc3QgUkFXIHNwYW4gKi8KKwkJCSpy YXdfcGl4ZWxzX2NvdW50X2J5dGUgPSAoKHBpeGVsLXJhd19waXhlbF9zdGFydCkgLyBicHApICYg MHhGRjsKKwkJfQorCisJCSpjbWRfcGl4ZWxzX2NvdW50X2J5dGUgPSAoKHBpeGVsIC0gY21kX3Bp eGVsX3N0YXJ0KSAvIGJwcCkgJiAweEZGOworCQlkZXZfYWRkciArPSAoKHBpeGVsIC0gY21kX3Bp eGVsX3N0YXJ0KSAvIGJwcCkgKiAyOworCX0KKworCWlmIChjbWRfYnVmZmVyX2VuZCA8PSBNSU5f UkxYX0NNRF9CWVRFUyArIGNtZCkgeworCQkvKiBGaWxsIGxlZnRvdmVyIGJ5dGVzIHdpdGggbm8t b3BzICovCisJCWlmIChjbWRfYnVmZmVyX2VuZCA+IGNtZCkKKwkJCW1lbXNldChjbWQsIDB4QUYs IGNtZF9idWZmZXJfZW5kIC0gY21kKTsKKwkJY21kID0gKHVpbnQ4X3QgKikgY21kX2J1ZmZlcl9l bmQ7CisJfQorCisJKmNvbW1hbmRfYnVmZmVyX3B0ciA9IGNtZDsKKwkqcGl4ZWxfc3RhcnRfcHRy ID0gcGl4ZWw7IAorCSpkZXZpY2VfYWRkcmVzc19wdHIgPSBkZXZfYWRkcjsKKworCXJldHVybjsK K30KKworLyoKKyAqIFRoZXJlIGFyZSAzIGNvcGllcyBvZiBldmVyeSBwaXhlbDogVGhlIGZyb250 IGJ1ZmZlciB0aGF0IHRoZSBmYmRldgorICogY2xpZW50IHJlbmRlcnMgdG8sIHRoZSBhY3R1YWwg ZnJhbWVidWZmZXIgYWNyb3NzIHRoZSBVU0IgYnVzIGluCmhhcmR3YXJlCisgKiAodGhhdCB3ZSBj YW4gb25seSB3cml0ZSB0bywgc2xvd2x5LCBhbmQgY2FuIG5ldmVyIHJlYWQpLCBhbmQKKG9wdGlv bmFsbHkpCisgKiBvdXIgc2hhZG93IGNvcHkgdGhhdCB0cmFja3Mgd2hhdCdzIGJlZW4gc2VudCB0 byB0aGF0IGhhcmR3YXJlCmJ1ZmZlci4KKyAqLworaW50IHVkbF9yZW5kZXJfaGxpbmUoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwgaW50IGJwcCwgc3RydWN0IHVyYgoqKnVyYl9wdHIsCisJCSAgICAg Y29uc3QgY2hhciAqZnJvbnQsIGNoYXIgKip1cmJfYnVmX3B0ciwKKwkJICAgICB1MzIgYnl0ZV9v ZmZzZXQsIHUzMiBieXRlX3dpZHRoLAorCQkgICAgIGludCAqaWRlbnRfcHRyLCBpbnQgKnNlbnRf cHRyKQoreworCWNvbnN0IHU4ICpsaW5lX3N0YXJ0LCAqbGluZV9lbmQsICpuZXh0X3BpeGVsOwor CXUzMiBiYXNlMTYgPSAwICsgKGJ5dGVfb2Zmc2V0IC8gYnBwKSAqIDI7CisJc3RydWN0IHVyYiAq dXJiID0gKnVyYl9wdHI7CisJdTggKmNtZCA9ICp1cmJfYnVmX3B0cjsKKwl1OCAqY21kX2VuZCA9 ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlciArCnVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0 aDsKKworCWxpbmVfc3RhcnQgPSAodTggKikgKGZyb250ICsgYnl0ZV9vZmZzZXQpOworCW5leHRf cGl4ZWwgPSBsaW5lX3N0YXJ0OworCWxpbmVfZW5kID0gbmV4dF9waXhlbCArIGJ5dGVfd2lkdGg7 CisKKwl3aGlsZSAobmV4dF9waXhlbCA8IGxpbmVfZW5kKSB7CisKKwkJdWRsX2NvbXByZXNzX2hs aW5lMTYoJm5leHRfcGl4ZWwsCisJCQkgICAgIGxpbmVfZW5kLCAmYmFzZTE2LAorCQkJICAgICAo dTggKiopICZjbWQsICh1OCAqKSBjbWRfZW5kLCBicHApOworCisJCWlmIChjbWQgPj0gY21kX2Vu ZCkgeworCQkJaW50IGxlbiA9IGNtZCAtICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJ CWlmICh1ZGxfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKSkKKwkJCQlyZXR1cm4gMTsgLyogbG9z dCBwaXhlbHMgaXMgc2V0ICovCisJCQkqc2VudF9wdHIgKz0gbGVuOworCQkJdXJiID0gdWRsX2dl dF91cmIoZGV2KTsKKwkJCWlmICghdXJiKQorCQkJCXJldHVybiAxOyAvKiBsb3N0X3BpeGVscyBp cyBzZXQgKi8KKwkJCSp1cmJfcHRyID0gdXJiOworCQkJY21kID0gdXJiLT50cmFuc2Zlcl9idWZm ZXI7CisJCQljbWRfZW5kID0gJmNtZFt1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhdOworCQl9 CisJfQorCisJKnVyYl9idWZfcHRyID0gY21kOworCisJcmV0dXJuIDA7Cit9CisKLS0gCjEuNy42 CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=