From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v12 06/14] drm/mediatek: Add HDMI support Date: Tue, 1 Mar 2016 16:20:22 +0100 Message-ID: <1456845630-2786-7-git-send-email-p.zabel@pengutronix.de> References: <1456845630-2786-1-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456845630-2786-1-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Mark Rutland , Stephen Boyd , Michael Turquette , Jie Qiu , Cawa Cheng , YT Shen , Yingjoe Chen , devicetree@vger.kernel.org, Jitao Shi , kernel@pengutronix.de, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Matthias Brugger , Paul Bolle , Emil Velikov , Tomasz Figa , Kumar Gala List-Id: linux-mediatek@lists.infradead.org RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1 YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0 aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29u ZmlnICAgICAgICAgICAgICAgfCAgIDcgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2Vm aWxlICAgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2Nl Yy5jICAgICAgICAgICAgIHwgMjQ1ICsrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfY2VjLmggICAgICAgICAgICAgfCAgMjUgKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1fZHJ2LmMgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2RybV9oZG1pX2Rydi5jICAgIHwgNTc5ICsrKysrKysrKysrKysrKysrKysrKysKIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jICAgICAgICAgICAgfCA0NzkgKysrKysrKysr KysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaCAgICAgICAgICAg IHwgMjIxICsrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY19k cnYuYyAgICB8IDM2MiArKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19oZG1pX2h3LmMgICAgICAgICB8IDY1MiArKysrKysrKysrKysrKysrKysrKysrKysrCiBkcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaCAgICAgICAgIHwgIDczICsrKwogZHJp dmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaCAgICAgICB8IDIyMSArKysrKysr KysKIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgfCA1MDUg KysrKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgMzM3OSBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Ry di5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1p LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWku aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9k ZGNfZHJ2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X2hkbWlfaHcuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfaGRtaV9ody5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19oZG1pX3JlZ3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCmluZGV4 IDBjNDlhOTQuLmUyZmYxNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9L Y29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9LY29uZmlnCkBAIC0xMiwzICsx MiwxMCBAQCBjb25maWcgRFJNX01FRElBVEVLCiAJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVk IG1lZGlhdGVrLWRybQogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsIG1vZGUgc2V0dGlu ZyBhbmQKIAkgIGJ1ZmZlciBtYW5hZ2VtZW50IHRvIHVzZXJzcGFjZS4KKworY29uZmlnIERSTV9N RURJQVRFS19IRE1JCisJdHJpc3RhdGUgIkRSTSBIRE1JIFN1cHBvcnQgZm9yIE1lZGlhdGVrIFNv Q3MiCisJZGVwZW5kcyBvbiBEUk1fTUVESUFURUsKKwlzZWxlY3QgR0VORVJJQ19QSFkKKwloZWxw CisJICBEUk0vS01TIEhETUkgZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvTWFrZWZpbGUKaW5kZXggNWZjZjU4ZS4uNmQ1M2JlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9N YWtlZmlsZQpAQCAtMTIsMyArMTIsMTIgQEAgbWVkaWF0ZWstZHJtLXkgOj0gbXRrX2Rpc3Bfb3Zs Lm8gXAogCQkgIG10a19kcGkubwogCiBvYmotJChDT05GSUdfRFJNX01FRElBVEVLKSArPSBtZWRp YXRlay1kcm0ubworCittZWRpYXRlay1kcm0taGRtaS1vYmpzIDo9IG10a19jZWMubyBcCisJCQkg IG10a19kcm1faGRtaV9kcnYubyBcCisJCQkgIG10a19oZG1pLm8gXAorCQkJICBtdGtfaGRtaV9k ZGNfZHJ2Lm8gXAorCQkJICBtdGtfaGRtaV9ody5vIFwKKwkJCSAgbXRrX210ODE3M19oZG1pX3Bo eS5vCisKK29iai0kKENPTkZJR19EUk1fTUVESUFURUtfSERNSSkgKz0gbWVkaWF0ZWstZHJtLWhk bWkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uY2JhMzY0NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfY2VjLmMKQEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2lu Y2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJtdGtfY2VjLmgiCisKKyNk ZWZpbmUgVFJfQ09ORklHCQkweDAwCisjZGVmaW5lIENMRUFSX0NFQ19JUlEJCQlCSVQoMTUpCisK KyNkZWZpbmUgQ0VDX0NLR0VOCQkweDA0CisjZGVmaW5lIENFQ18zMktfUEROCQkJQklUKDE5KQor I2RlZmluZSBQRE4JCQkJQklUKDE2KQorCisjZGVmaW5lIFJYX0VWRU5UCQkweDU0CisjZGVmaW5l IEhETUlfUE9SRAkJCUJJVCgyNSkKKyNkZWZpbmUgSERNSV9IVFBMRwkJCUJJVCgyNCkKKyNkZWZp bmUgSERNSV9QT1JEX0lOVF9FTgkJQklUKDkpCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX0VOCQlC SVQoOCkKKworI2RlZmluZSBSWF9HRU5fV0QJCTB4NTgKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8z MktfU1RBVFVTCUJJVCgyNikKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJLX1NUQVRVUwkJQklUKDI1 KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBVFVTCUJJVCgyNCkKKyNkZWZpbmUgSERN SV9QT1JEX0lOVF8zMktfQ0xSCQlCSVQoMTgpCisjZGVmaW5lIFJYX0lOVF8zMktfQ0xSCQkJQklU KDE3KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfQ0xSCQlCSVQoMTYpCisjZGVmaW5lIEhE TUlfUE9SRF9JTlRfMzJLX1NUQV9NQVNLCUJJVCgxMCkKKyNkZWZpbmUgUlhfUklTQ19JTlRfMzJL X1NUQV9NQVNLCUJJVCg5KQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfU1RBX01BU0sJQklU KDgpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfMzJLX0VOCQlCSVQoMikKKyNkZWZpbmUgUlhfSU5U XzMyS19FTgkJCUJJVCgxKQorI2RlZmluZSBIRE1JX0hUUExHX0lOVF8zMktfRU4JCUJJVCgwKQor CisjZGVmaW5lIE5PUk1BTF9JTlRfQ1RSTAkJMHg1QworI2RlZmluZSBIRE1JX0hUUExHX0lOVF9T VEEJCUJJVCgwKQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX1NUQQkJQklUKDEpCisjZGVmaW5lIEhE TUlfSFRQTEdfSU5UX0NMUgkJQklUKDE2KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0NMUgkJQklU KDE3KQorI2RlZmluZSBIRE1JX0ZVTExfSU5UX0NMUgkJQklUKDIwKQorCitzdHJ1Y3QgbXRrX2Nl YyB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgaXJxOwor CWJvb2wgaHBkOworCXZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpk ZXYpOworCXN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2OworfTsKKworc3RhdGljIHZvaWQgbXRrX2Nl Y19tYXNrKHN0cnVjdCBtdGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgdW5z aWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGNl Yy0+cmVncyArIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSB2YWwgJiBtYXNrOworCXdyaXRl bCh2YWwsIGNlYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2 ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBk LCBzdHJ1Y3QgZGV2aWNlICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAqaGRtaV9kZXYpCit7 CisJc3RydWN0IG10a19jZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2VjLT5o ZG1pX2RldiA9IGhkbWlfZGV2OworCWNlYy0+aHBkX2V2ZW50ID0gaHBkX2V2ZW50OworfQorCiti b29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtf Y2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwor CisJc3RhdHVzID0gcmVhZGwoY2VjLT5yZWdzICsgUlhfRVZFTlQpOworCisJcmV0dXJuIChzdGF0 dXMgJiAoSERNSV9QT1JEIHwgSERNSV9IVFBMRykpID09IChIRE1JX1BPUkQgfCBIRE1JX0hUUExH KTsKK30KKworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qg bXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gY2VjLT5pcnE7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2Nl YyAqY2VjKQoreworCW10a19jZWNfbWFzayhjZWMsIENFQ19DS0dFTiwgMCwgUEROKTsKKwltdGtf Y2VjX21hc2soY2VjLCBDRUNfQ0tHRU4sIENFQ18zMktfUEROLCBDRUNfMzJLX1BETik7CisJbXRr X2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCBIRE1JX1BPUkRfSU5UXzMyS19DTFIsCisJCSAgICAg SERNSV9QT1JEX0lOVF8zMktfQ0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIFJY X0lOVF8zMktfQ0xSLCBSWF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VO X1dELCBIRE1JX0hUUExHX0lOVF8zMktfQ0xSLAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19D TFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lOVF8zMktf Q0xSKTsKKwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIFJYX0lOVF8zMktfQ0xSKTsK KwltdGtfY2VjX21hc2soY2VjLCBSWF9HRU5fV0QsIDAsIEhETUlfSFRQTEdfSU5UXzMyS19DTFIp OworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lOVF8zMktfRU4p OworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgUlhfSU5UXzMyS19FTik7CisJbXRr X2NlY19tYXNrKGNlYywgUlhfR0VOX1dELCAwLCBIRE1JX0hUUExHX0lOVF8zMktfRU4pOworCisJ bXRrX2NlY19tYXNrKGNlYywgUlhfRVZFTlQsIEhETUlfUE9SRF9JTlRfRU4sIEhETUlfUE9SRF9J TlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0VWRU5ULCBIRE1JX0hUUExHX0lOVF9FTiwg SERNSV9IVFBMR19JTlRfRU4pOworfQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2h0cGxnX2lycV9k aXNhYmxlKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfRVZF TlQsIDAsIEhETUlfUE9SRF9JTlRfRU4pOworCW10a19jZWNfbWFzayhjZWMsIFJYX0VWRU5ULCAw LCBIRE1JX0hUUExHX0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfY2xlYXJfaHRw bGdfaXJxKHN0cnVjdCBtdGtfY2VjICpjZWMpCit7CisJbXRrX2NlY19tYXNrKGNlYywgVFJfQ09O RklHLCBDTEVBUl9DRUNfSVJRLCBDTEVBUl9DRUNfSVJRKTsKKwltdGtfY2VjX21hc2soY2VjLCBO T1JNQUxfSU5UX0NUUkwsIEhETUlfSFRQTEdfSU5UX0NMUiwKKwkJICAgICBIRE1JX0hUUExHX0lO VF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1BTF9JTlRfQ1RSTCwgSERNSV9QT1JEX0lO VF9DTFIsCisJCSAgICAgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5P Uk1BTF9JTlRfQ1RSTCwgSERNSV9GVUxMX0lOVF9DTFIsCisJCSAgICAgSERNSV9GVUxMX0lOVF9D TFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lOVF8zMktfQ0xS LAorCQkgICAgIEhETUlfUE9SRF9JTlRfMzJLX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhf R0VOX1dELCBSWF9JTlRfMzJLX0NMUiwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhj ZWMsIFJYX0dFTl9XRCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUiwKKwkJICAgICBIRE1JX0hUUExH X0lOVF8zMktfQ0xSKTsKKwl1ZGVsYXkoNSk7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lO VF9DVFJMLCAwLCBIRE1JX0hUUExHX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIE5PUk1B TF9JTlRfQ1RSTCwgMCwgSERNSV9QT1JEX0lOVF9DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFRS X0NPTkZJRywgMCwgQ0xFQVJfQ0VDX0lSUSk7CisJbXRrX2NlY19tYXNrKGNlYywgTk9STUFMX0lO VF9DVFJMLCAwLCBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRrX2NlY19tYXNrKGNlYywgUlhfR0VO X1dELCAwLCBIRE1JX1BPUkRfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dF Tl9XRCwgMCwgUlhfSU5UXzMyS19DTFIpOworCW10a19jZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwg MCwgSERNSV9IVFBMR19JTlRfMzJLX0NMUik7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtdGtf Y2VjX2h0cGxnX2lzcl90aHJlYWQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9IGFyZzsKKwlzdHJ1Y3QgbXRrX2NlYyAqY2VjID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisJYm9vbCBocGQ7CisKKwltdGtfY2VjX2NsZWFyX2h0cGxnX2lycShjZWMpOworCWhwZCA9 IG10a19jZWNfaHBkX2hpZ2goZGV2KTsKKworCWlmIChjZWMtPmhwZCAhPSBocGQpIHsKKwkJZGV2 X2luZm8oZGV2LCAiaG90cGx1ZyBldmVudCEsY3VyIGhwZCA9ICVkLCBocGQgPSAlZFxuIiwKKwkJ CSBjZWMtPmhwZCwgaHBkKTsKKwkJY2VjLT5ocGQgPSBocGQ7CisJCWlmIChjZWMtPmhwZF9ldmVu dCkKKwkJCWNlYy0+aHBkX2V2ZW50KGhwZCwgY2VjLT5oZG1pX2Rldik7CisJfQorCXJldHVybiBJ UlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBtdGtfY2VjX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlz dHJ1Y3QgbXRrX2NlYyAqY2VjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisK KwljZWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmNlYyksIEdGUF9LRVJORUwpOworCWlm ICghY2VjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYs IGNlYyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOworCWNlYy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJ aWYgKElTX0VSUihjZWMtPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoY2VjLT5yZWdzKTsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBjZWM6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCWNlYy0+Y2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYg KElTX0VSUihjZWMtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPmNsayk7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCWNlYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAo Y2VjLT5pcnEgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjZWMgaXJxOiAl ZFxuIiwgY2VjLT5pcnEpOworCQlyZXR1cm4gY2VjLT5pcnE7CisJfQorCisJcmV0ID0gZGV2bV9y ZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGNlYy0+aXJxLCBOVUxMLAorCQkJCQltdGtfY2VjX2h0 cGxnX2lzcl90aHJlYWQsCisJCQkJCUlSUUZfU0hBUkVEIHwgSVJRRl9UUklHR0VSX0xPVyB8CisJ CQkJCUlSUUZfT05FU0hPVCwgImhkbWkgaHBkIiwgZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNlYyBpcnE6ICVkXG4iLCByZXQpOworCQlyZXR1 cm4gcmV0OworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjZWMtPmNsayk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgY2VjIGNsb2NrOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdGtfY2VjX2h0cGxnX2lycV9lbmFibGUo Y2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcmVtb3ZlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10a19jZWMgKmNlYyA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX2NlY19odHBsZ19pcnFfZGlzYWJsZShjZWMp OworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZWMtPmNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19jZWNfb2ZfaWRzW10gPSB7CisJeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtY2VjIiwgfSwKKwl7fQorfTsKKworc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfY2VjX3By b2JlLAorCS5yZW1vdmUgPSBtdGtfY2VjX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9 ICJtZWRpYXRlay1jZWMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfY2VjX29mX2lkcywKKwl9 LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmggYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmZlNmU4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2NlYy5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVr LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg Ki8KKyNpZm5kZWYgX01US19DRUNfSAorI2RlZmluZSBfTVRLX0NFQ19ICisKK3N0cnVjdCBkZXZp Y2U7CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJ CSAgIHZvaWQgKCpob3RwbHVnX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KSwK KwkJCSAgIHN0cnVjdCBkZXZpY2UgKmhkbWlfZGV2KTsKK2Jvb2wgbXRrX2NlY19ocGRfaGlnaChz dHJ1Y3QgZGV2aWNlICpkZXYpOworaW50IG10a19jZWNfaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7 CisKKyNlbmRpZiAvKiBfTVRLX0NFQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfZHJt X2Rydi5jCmluZGV4IDhiYzlmNDguLmUyMTIwNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfZHJtX2Rydi5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZv cm0uaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKKyNpbmNsdWRlICJtdGtfY2Vj LmgiCiAjaW5jbHVkZSAibXRrX2RybV9jcnRjLmgiCiAjaW5jbHVkZSAibXRrX2RybV9kZHAuaCIK ICNpbmNsdWRlICJtdGtfZHJtX2RkcF9jb21wLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvbXRrX2RybV9oZG1pX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19kcm1faGRtaV9kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m ZjY2MWUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19k cm1faGRtaV9kcnYuYwpAQCAtMCwwICsxLDU3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NCBNZWRpYVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29t PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwor I2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBl ci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor I2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1 ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgor I2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1 ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgorI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgIm10a19jZWMuaCIKKyNpbmNs dWRlICJtdGtfaGRtaS5oIgorI2luY2x1ZGUgIm10a19oZG1pX2h3LmgiCisKK3N0YXRpYyBjb25z dCBjaGFyICogY29uc3QgbXRrX2hkbWlfY2xrX25hbWVzW01US19IRE1JX0NMS19DT1VOVF0gPSB7 CisJW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSA9ICJwaXhlbCIsCisJW01US19IRE1JX0NMS19I RE1JX1BMTF0gPSAicGxsIiwKKwlbTVRLX0hETUlfQ0xLX0FVRF9CQ0xLXSA9ICJiY2xrIiwKKwlb TVRLX0hETUlfQ0xLX0FVRF9TUERJRl0gPSAic3BkaWYiLAorfTsKKworc3RhdGljIGNvbnN0IGVu dW0gbXRrX2hkbWlfY2xrX2lkIG10a19oZG1pX2VuYWJsZV9jbG9ja3NbXSA9IHsKKwlNVEtfSERN SV9DTEtfQVVEX0JDTEssCisJTVRLX0hETUlfQ0xLX0FVRF9TUERJRiwKK307CisKK3N0YXRpYyBp bnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0cnVj dCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+Y2xrW2ldID0gb2ZfY2xr X2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFtZXNbaV0pOworCQlpZiAo SVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5jbGtbaV0pOwor CX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1ZGlv KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtf SERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4g MDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19B VURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2Nsa19k aXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwljbGtfZGlzYWJsZV91bnBy ZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOworCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworfQorCitzdGF0aWMg ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0KHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0cnVjdCBtdGtfaGRtaSAq aGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBtdGtfaGRtaV9ocGRf aGlnaChoZG1pKSA/CisJICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDogY29ubmVj dG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfY29ubl9kZXN0 cm95KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRt aSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCW10a19jZWNfc2V0X2hwZF9ldmVudCho ZG1pLT5jZWNfZGV2LCBOVUxMLCBOVUxMKTsKKworCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj b25uKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubik7Cit9CisKK3N0YXRpYyBpbnQgaGRt aV9jb25uX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubiwKKwkJCQkgIHN0 cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCB1aW50NjRfdCB2YWwpCit7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfY29ubl9nZXRfbW9kZXMoc3RydWN0IGRybV9jb25u ZWN0b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9j b25uKGNvbm4pOworCXN0cnVjdCBlZGlkICplZGlkOworCWludCByZXQ7CisKKwlpZiAoIWhkbWkt PmRkY19hZHB0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29u biwgaGRtaS0+ZGRjX2FkcHQpOworCWlmICghZWRpZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlo ZG1pLT5kdmlfbW9kZSA9ICFkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8oZWRpZCk7CisKKwlkcm1f bW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubiwgZWRpZCk7CisKKwlyZXQg PSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubiwgZWRpZCk7CisJZHJtX2VkaWRfdG9fZWxkKGNvbm4s IGVkaWQpOworCWtmcmVlKGVkaWQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXRr X2hkbWlfY29ubl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uLAorCQkJCSAg ICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhk bWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgInhy ZXM9JWQsIHlyZXM9JWQsIHJlZnJlc2g9JWQsIGludGw9JWQgY2xvY2s9JWRcbiIsCisJCW1vZGUt PmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSwgbW9kZS0+dnJlZnJlc2gsCisJCSEhKG1vZGUtPmZs YWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpLCBtb2RlLT5jbG9jayAqIDEwMDApOworCisJ aWYgKGhkbWktPmJyaWRnZS5uZXh0KSB7CisJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGFkanVz dGVkX21vZGU7CisKKwkJZHJtX21vZGVfY29weSgmYWRqdXN0ZWRfbW9kZSwgbW9kZSk7CisJCWlm ICghZHJtX2JyaWRnZV9tb2RlX2ZpeHVwKGhkbWktPmJyaWRnZS5uZXh0LCBtb2RlLAorCQkJCQkg ICAmYWRqdXN0ZWRfbW9kZSkpCisJCQlyZXR1cm4gTU9ERV9CQUQ7CisJfQorCisJaWYgKG1vZGUt PmNsb2NrIDwgMjcwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKKwlpZiAobW9kZS0+Y2xv Y2sgPiAyOTcwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisKKwlyZXR1cm4gZHJtX21v ZGVfdmFsaWRhdGVfc2l6ZShtb2RlLCAweDFmZmYsIDB4MWZmZik7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZHJtX2VuY29kZXIgKm10a19oZG1pX2Nvbm5fYmVzdF9lbmMoc3RydWN0IGRybV9jb25uZWN0 b3IgKmNvbm4pCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25u KGNvbm4pOworCisJcmV0dXJuIGhkbWktPmJyaWRnZS5lbmNvZGVyOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgbXRrX2hkbWlfY29ubmVjdG9yX2Z1bmNzID0g eworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2RwbXMsCisJLmRldGVjdCA9 IGhkbWlfY29ubl9kZXRlY3QsCisJLmZpbGxfbW9kZXMgPSBkcm1faGVscGVyX3Byb2JlX3Npbmds ZV9jb25uZWN0b3JfbW9kZXMsCisJLmRlc3Ryb3kgPSBoZG1pX2Nvbm5fZGVzdHJveSwKKwkuc2V0 X3Byb3BlcnR5ID0gaGRtaV9jb25uX3NldF9wcm9wZXJ0eSwKKwkucmVzZXQgPSBkcm1fYXRvbWlj X2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCisJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJv eV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kZXN0cm95X3N0YXRlLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcworCQltdGtf aGRtaV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMgPSBtdGtfaGRtaV9j b25uX2dldF9tb2RlcywKKwkubW9kZV92YWxpZCA9IG10a19oZG1pX2Nvbm5fbW9kZV92YWxpZCwK KwkuYmVzdF9lbmNvZGVyID0gbXRrX2hkbWlfY29ubl9iZXN0X2VuYywKK307CisKK3N0YXRpYyB2 b2lkIG10a19oZG1pX2hwZF9ldmVudChib29sIGhwZCwgc3RydWN0IGRldmljZSAqZGV2KQorewor CXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGhk bWkgJiYgaGRtaS0+YnJpZGdlLmVuY29kZXIgJiYgaGRtaS0+YnJpZGdlLmVuY29kZXItPmRldikK KwkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KGhkbWktPmJyaWRnZS5lbmNvZGVyLT5kZXYpOwor fQorCisvKgorICogQnJpZGdlIGNhbGxiYWNrcworICovCisKK3N0YXRpYyBpbnQgbXRrX2hkbWlf YnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisJaW50IHJldDsKKwor CXJldCA9IGRybV9jb25uZWN0b3JfaW5pdChicmlkZ2UtPmVuY29kZXItPmRldiwgJmhkbWktPmNv bm4sCisJCQkJICZtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3MsCisJCQkJIERSTV9NT0RFX0NPTk5F Q1RPUl9IRE1JQSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0 byBpbml0aWFsaXplIGNvbm5lY3RvcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CWRybV9jb25uZWN0b3JfaGVscGVyX2FkZCgmaGRtaS0+Y29ubiwgJm10a19oZG1pX2Nvbm5lY3Rv cl9oZWxwZXJfZnVuY3MpOworCisJaGRtaS0+Y29ubi5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BP TExfSFBEOworCWhkbWktPmNvbm4uaW50ZXJsYWNlX2FsbG93ZWQgPSB0cnVlOworCWhkbWktPmNv bm4uZG91Ymxlc2Nhbl9hbGxvd2VkID0gZmFsc2U7CisKKwlyZXQgPSBkcm1fY29ubmVjdG9yX3Jl Z2lzdGVyKCZoZG1pLT5jb25uKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAi RmFpbGVkIHRvIHJlZ2lzdGVyIGNvbm5lY3RvcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7 CisJfQorCisJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKCZoZG1pLT5j b25uLAorCQkJCQkJYnJpZGdlLT5lbmNvZGVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRt aS0+ZGV2LAorCQkJIkZhaWxlZCB0byBhdHRhY2ggY29ubmVjdG9yIHRvIGVuY29kZXI6ICVkXG4i LCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChicmlkZ2UtPm5leHQpIHsKKwkJYnJp ZGdlLT5uZXh0LT5lbmNvZGVyID0gYnJpZGdlLT5lbmNvZGVyOworCQlyZXQgPSBkcm1fYnJpZGdl X2F0dGFjaChicmlkZ2UtPmVuY29kZXItPmRldiwgYnJpZGdlLT5uZXh0KTsKKwkJaWYgKHJldCkg eworCQkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkJIkZhaWxlZCB0byBhdHRhY2ggZXh0ZXJuYWwg YnJpZGdlOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwltdGtfY2Vj X3NldF9ocGRfZXZlbnQoaGRtaS0+Y2VjX2RldiwgbXRrX2hkbWlfaHBkX2V2ZW50LCBoZG1pLT5k ZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIG10a19oZG1pX2JyaWRnZV9tb2Rl X2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgICAgIGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQg bXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sKKwlz dHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJ cGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5j bGtbTVRLX0hETUlfQ0xLX0hETUlfUElYRUxdKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRt aS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRt aV9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3Ry dWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10 a19oZG1pX3Bvd2VyX29mZihoZG1pKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdl X21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCisJCQkJICAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqbW9kZSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICph ZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21f YnJpZGdlKGJyaWRnZSk7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgImN1ciBpbmZvOiBuYW1lOiVz LCBoZGlzcGxheTolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+bmFtZSwgYWRqdXN0ZWRfbW9kZS0+ aGRpc3BsYXkpOworCWRldl9kYmcoaGRtaS0+ZGV2LCAiaHN5bmNfc3RhcnQ6JWQsaHN5bmNfZW5k OiVkLCBodG90YWw6JWQiLAorCQlhZGp1c3RlZF9tb2RlLT5oc3luY19zdGFydCwgYWRqdXN0ZWRf bW9kZS0+aHN5bmNfZW5kLAorCQlhZGp1c3RlZF9tb2RlLT5odG90YWwpOworCWRldl9kYmcoaGRt aS0+ZGV2LCAiaHNrZXc6JWQsIHZkaXNwbGF5OiVkXG4iLAorCQlhZGp1c3RlZF9tb2RlLT5oc2tl dywgYWRqdXN0ZWRfbW9kZS0+dmRpc3BsYXkpOworCWRldl9kYmcoaGRtaS0+ZGV2LCAidnN5bmNf c3RhcnQ6JWQsIHZzeW5jX2VuZDolZCwgdnRvdGFsOiVkIiwKKwkJYWRqdXN0ZWRfbW9kZS0+dnN5 bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPnZzeW5jX2VuZCwKKwkJYWRqdXN0ZWRfbW9kZS0+dnRv dGFsKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgInZzY2FuOiVkLCBmbGFnOiVkXG4iLAorCQlhZGp1 c3RlZF9tb2RlLT52c2NhbiwgYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MpOworCisJZHJtX21vZGVfY29w eSgmaGRtaS0+bW9kZSwgYWRqdXN0ZWRfbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p X2JyaWRnZV9wcmVfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0 IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19o ZG1pX3Bvd2VyX29uKGhkbWkpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfZW5h YmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1p ID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKworCW10a19oZG1pX291dHB1dF9zZXRf ZGlzcGxheV9tb2RlKGhkbWksICZoZG1pLT5tb2RlKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRt aS0+Y2xrW01US19IRE1JX0NMS19IRE1JX1BMTF0pOworCWNsa19wcmVwYXJlX2VuYWJsZShoZG1p LT5jbGtbTVRLX0hETUlfQ0xLX0hETUlfUElYRUxdKTsKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5 KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG10a19oZG1pX2Jy aWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbXRrX2hkbWlfYnJpZGdlX2F0dGFjaCwKKwkubW9k ZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2ZpeHVwLAorCS5kaXNhYmxlID0gbXRrX2hk bWlfYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJsZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0 X2Rpc2FibGUsCisJLm1vZGVfc2V0ID0gbXRrX2hkbWlfYnJpZGdlX21vZGVfc2V0LAorCS5wcmVf ZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFibGUsCisJLmVuYWJsZSA9IG10a19oZG1p X2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRh KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmlj ZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwg KnBvcnQsICplcCwgKnJlbW90ZSwgKmkyY19ucDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpj ZWNfcGRldjsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJc3RydWN0IHJlc291cmNlICptZW07 CisJaW50IHJldDsKKworCXJldCA9IG10a19oZG1pX2dldF9hbGxfY2xrKGhkbWksIG5wKTsKKwlp ZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBjbG9ja3M6ICVkXG4iLCBy ZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERN SSBob3RwbHVnIGRldGVjdGlvbiAqLworCWNlY19ucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2Rl KG5wLT5wYXJlbnQsIE5VTEwsCisJCQkJCSAibWVkaWF0ZWssbXQ4MTczLWNlYyIpOworCWlmICgh Y2VjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgQ0VDIG5vZGVcbiIpOwor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZWNfcGRldiA9IG9mX2ZpbmRfZGV2aWNlX2J5X25v ZGUoY2VjX25wKTsKKwlpZiAoIWNlY19wZGV2KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiV2Fp dGluZyBmb3IgQ0VDIGRldmljZSAlc1xuIiwKKwkJCWNlY19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0 dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCWhkbWktPmNlY19kZXYgPSAmY2VjX3BkZXYtPmRldjsK KworCS8qCisJICogVGhlIG1lZGlhdGVrLHN5c2Nvbi1oZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEg cGhhbmRsZSBsaW5rIHRvIHRoZQorCSAqIE1NU1lTX0NPTkZJRyBkZXZpY2UgYW5kIHRoZSByZWdp c3RlciBvZmZzZXQgb2YgdGhlIEhETUlfU1lTX0NGRworCSAqIHJlZ2lzdGVycyBpdCBjb250YWlu cy4KKwkgKi8KKwlyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAi bWVkaWF0ZWssc3lzY29uLWhkbWkiKTsKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRl eChucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIiwgMSwKKwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0 KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAo cmV0KSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFp bGVkIHRvIGdldCBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0 KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGRtaS0+c3lzX3JlZ21hcCA9IHJlZ21hcDsKKworCW1l bSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRt aS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIG1lbSk7CisJaWYgKElTX0VSUiho ZG1pLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGhkbWlfc2hl bGw6ICVsZFxuIiwKKwkJCVBUUl9FUlIoaGRtaS0+cmVncykpOworCQlyZXR1cm4gUFRSX0VSUiho ZG1pLT5yZWdzKTsKKwl9CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQobnAsIDEp OworCWlmICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBvcnQgbm9k ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxkX2J5X25h bWUocG9ydCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Np bmcgZW5kcG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1lKTsKKwkJ b2Zfbm9kZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChw b3J0KTsKKworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOwor CWlmICghcmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IvYnJpZGdl IG5vZGUgZm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVf cHV0KGVwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsKKworCWlm ICghb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3IiKSkgewor CQloZG1pLT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOworCQlpZiAo IWhkbWktPmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIGV4dGVy bmFsIGJyaWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJP QkVfREVGRVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJlbW90ZSwg ImRkYy1pMmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5mdWxsX25h bWUpOworCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zf bm9kZV9wdXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNfYWRhcHRl cl9ieV9ub2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQlyZXR1cm4g LUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2hkbWlf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkg KmhkbWk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcmV0OworCisJ aGRtaSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSksIEdGUF9LRVJORUwpOworCWlm ICghaGRtaSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5kZXYgPSBkZXY7CisKKwlyZXQg PSBtdGtfaGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImhkbWkiKTsKKwlpZiAo SVNfRVJSKGhkbWktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pLT5waHkpOworCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4g cmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkbWkpOworCisJcmV0ID0g bXRrX2hkbWlfb3V0cHV0X2luaXQoaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBpbml0aWFsaXplIGhkbWkgb3V0cHV0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwloZG1pLT5icmlkZ2UuZnVuY3MgPSAmbXRrX2hkbWlfYnJpZGdlX2Z1bmNzOworCWhkbWkt PmJyaWRnZS5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJcmV0ID0gZHJtX2JyaWRnZV9h ZGQoJmhkbWktPmJyaWRnZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBhZGQgYnJpZGdlLCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXQgPSBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1ZGlvKGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIGF1ZGlvIGNsb2NrczogJWRcbiIsIHJldCk7CisJ CWdvdG8gZXJyX2JyaWRnZV9yZW1vdmU7CisJfQorCisJZGV2X2RiZyhkZXYsICJtZWRpYXRlayBo ZG1pIHByb2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJfYnJpZGdlX3JlbW92ZToK Kwlkcm1fYnJpZGdlX3JlbW92ZSgmaGRtaS0+YnJpZGdlKTsKKwlyZXR1cm4gcmV0OworfQorCitz dGF0aWMgaW50IG10a19kcm1faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKKworCWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCXBsYXRmb3JtX2Rldmlj ZV91bnJlZ2lzdGVyKGhkbWktPmF1ZGlvX3BkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIE5VTEwpOworCW10a19oZG1pX2Nsa19kaXNhYmxlX2F1ZGlvKGhkbWkpOworCXJldHVybiAw OworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IG10a19oZG1pX3N1c3Bl bmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2hkbWlfcG93ZXJfb2ZmKGhkbWkpOworCW10a19oZG1p X2Nsa19kaXNhYmxlX2F1ZGlvKGhkbWkpOworCXBoeV9wb3dlcl9vZmYoaGRtaS0+cGh5KTsKKwlk ZXZfZGJnKGRldiwgImhkbWkgc3VzcGVuZCBzdWNjZXNzIVxuIik7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2hkbWlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsK KworCXJldCA9IG10a19oZG1pX2Nsa19lbmFibGVfYXVkaW8oaGRtaSk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGRldiwgImhkbWkgcmVzdW1lIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0Owor CX0KKworCW10a19oZG1pX3Bvd2VyX29uKGhkbWkpOworCW10a19oZG1pX291dHB1dF9zZXRfZGlz cGxheV9tb2RlKGhkbWksICZoZG1pLT5tb2RlKTsKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsK KwlkZXZfZGJnKGRldiwgImhkbWkgcmVzdW1lIHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30K KyNlbmRpZgorc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBt dGtfaGRtaV9zdXNwZW5kLCBtdGtfaGRtaV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBtdGtfZHJtX2hkbWlfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJtZWRpYXRlayxtdDgxNzMtaGRtaSIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIG10a19oZG1pX2RyaXZlciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlf cHJvYmUsCisJLnJlbW92ZSA9IG10a19kcm1faGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJ Lm5hbWUgPSAibWVkaWF0ZWstZHJtLWhkbWkiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJt X2hkbWlfb2ZfaWRzLAorCQkucG0gPSAmbXRrX2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0 aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqIGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsK KwkmbXRrX2hkbWlfcGh5X2RyaXZlciwKKwkmbXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2Nl Y19kcml2ZXIsCisJJm10a19oZG1pX2RyaXZlciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10 a19oZG1pdHhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9kcml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRm b3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDAp IHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkg ICAgICAgbXRrX2hkbWlfZHJpdmVyc1tpXS0+ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVy cjsKKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlw bGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihtdGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBp ID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVy c1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdCht dGtfaGRtaXR4X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlh dGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBlYzdiNQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCkBAIC0wLDAgKzEsNDc5 IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjog SmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lv biAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cisj aW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRl IDxsaW51eC9waHkvcGh5Lmg+CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19o ZG1pLmgiCisjaW5jbHVkZSAibXRrX2hkbWlfaHcuaCIKKworc3RhdGljIHU4IG10a19oZG1pX2F1 ZF9nZXRfY2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUp Cit7CisJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8x XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzJfMDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8xOgorCWNh c2UgSERNSV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1JX0FVRF9D SEFOX1RZUEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNlIEhETUlf QVVEX0NIQU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV80XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERNSV9BVURf Q0hBTl9UWVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6CisJ CXJldHVybiA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhETUlfQVVE X0NIQU5fVFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZf MF9DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1JX0FVRF9D SEFOX1RZUEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf Nl8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlfQVVEX0NI QU5fVFlQRV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgorCWNhc2Ug SERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18w OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlfQVVEX0NI QU5fVFlQRV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6 CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNT OgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERNSV9BVURf Q0hBTl9UWVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6 CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlfQVVEX0NI QU5fVFlQRV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUjoK KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8w X0xIX1JIX0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzE6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzdfMV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19SQzoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ UEVfN18xX0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1M6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFO X1RZUEVfN18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSDoKKwlj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzdfMV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hSOgorCWNh c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ UEVfN18xX0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJu IDI7CisJfQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgdTMyIGNsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlp bnQgcmV0OworCisJLyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZE UExMIHRvIHRoZSBjb3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xr W01US19IRE1JX0NMS19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIo aGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJ CXJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5j bGtbTVRLX0hETUlfQ0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0 ZSwgMTAwMCkgIT0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2Fybiho ZG1pLT5kZXYsICJXYW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0 ZSk7CisJZWxzZQorCQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1 IEh6XG4iLCBjbG9jaywgcmF0ZSk7CisKKwltdGtfaGRtaV9od19jb25maWdfc3lzKGhkbWkpOwor CW10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoaGRtaSk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIG10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19o ZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ bXRrX2hkbWlfaHdfcmVzZXQoaGRtaSk7CisJbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShoZG1p LCB0cnVlKTsKKwltdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayhoZG1pLCAweGZmKTsKKwltdGtf aGRtaV9od19lbmFibGVfZHZpX21vZGUoaGRtaSwgaGRtaS0+ZHZpX21vZGUpOworCW10a19oZG1p X2h3X25jdHNfYXV0b193cml0ZV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwltdGtfaGRtaV9od19t c2ljX3NldHRpbmcoaGRtaSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX2Vu YWJsZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtf aGRtaV9od19zZW5kX2F1ZF9wYWNrZXQoaGRtaSwgZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBtdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoc3RydWN0IG10a19oZG1pICpo ZG1pLCBib29sIG9uKQoreworCW10a19oZG1pX2h3X25jdHNfZW5hYmxlKGhkbWksIG9uKTsKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X2lucHV0KHN0cnVjdCBt dGtfaGRtaSAqaGRtaSkKK3sKKwl1OCBjaGFuX2NvdW50OworCisJbXRrX2hkbWlfaHdfYXVkX3Nl dF9jaGFubmVsX3N3YXAoaGRtaSwgSERNSV9BVURfU1dBUF9MRkVfQ0MpOworCW10a19oZG1pX2h3 X2F1ZF9yYXdfZGF0YV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwlpZiAoaGRtaS0+YXVkX3BhcmFt LmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGICYmCisJICAgIGhkbWktPmF1 ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9EU1QpIHsKKwkJbXRr X2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhkbWksCisJCQkJCSAgICBIRE1JX0FVRElPX1NBTVBM RV9TSVpFXzI0KTsKKwl9IGVsc2UgaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9PQor CQkJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQpIHsKKwkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNf Zm10ID0gSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQ7CisJfQorCisJbXRrX2hkbWlfaHdfYXVkX3Nl dF9pMnNfZm10KGhkbWksCisJCQkJICAgIGhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCk7CisJ bXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVtKGhkbWksIEhETUlfQVVESU9fU0FNUExFX1NJWkVf MjQpOworCisJbXRrX2hkbWlfaHdfYXVkX3NldF9oaWdoX2JpdHJhdGUoaGRtaSwgZmFsc2UpOwor CW10a19oZG1pX3BoeV9hdWRfZHN0X25vcm1hbF9kb3VibGVfZW5hYmxlKGhkbWksIGZhbHNlKTsK KwltdGtfaGRtaV9od19hdWRfZHN0X2VuYWJsZShoZG1pLCBmYWxzZSk7CisKKwlpZiAoaGRtaS0+ YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlID09IEhETUlfQVVEX0lOUFVUX1NQRElGKSB7CisJCW10 a19oZG1pX2h3X2F1ZF9kc2RfZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJaWYgKGhkbWktPmF1ZF9w YXJhbS5hdWRfY29kZWMgPT0KKwkJCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUKSB7CisJCQlt dGtfaGRtaV9waHlfYXVkX2RzdF9ub3JtYWxfZG91YmxlX2VuYWJsZShoZG1pLAorCQkJCQkJCQkg IHRydWUpOworCQkJbXRrX2hkbWlfaHdfYXVkX2RzdF9lbmFibGUoaGRtaSwgdHJ1ZSk7CisJCX0K KworCQljaGFuX2NvdW50ID0gbXRrX2hkbWlfYXVkX2dldF9jaG5sX2NvdW50CisJCQkJCQkgKEhE TUlfQVVEX0NIQU5fVFlQRV8yXzApOworCQltdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFuX251 bShoZG1pLAorCQkJCQkJIEhETUlfQVVEX0NIQU5fVFlQRV8yXzAsCisJCQkJCQkgY2hhbl9jb3Vu dCk7CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLAorCQkJCQkgICAgICAg SERNSV9BVURfSU5QVVRfU1BESUYpOworCX0gZWxzZSB7CisJCW10a19oZG1pX2h3X2F1ZF9kc2Rf ZW5hYmxlKGhkbWksIGZhbHNlKTsKKwkJY2hhbl9jb3VudCA9CisJCQltdGtfaGRtaV9hdWRfZ2V0 X2NobmxfY291bnQoCisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2NoYW5fdHlwZSk7CisJ CW10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKAorCQkJaGRtaSwKKwkJCWhkbWktPmF1 ZF9wYXJhbS5hdWRfaW5wdXRfY2hhbl90eXBlLAorCQkJY2hhbl9jb3VudCk7CisJCW10a19oZG1p X2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShoZG1pLAorCQkJCQkgICAgICAgSERNSV9BVURfSU5QVVRf STJTKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX3NldF9z cmMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpk aXNwbGF5X21vZGUpCit7CisJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIGZhbHNl KTsKKworCWlmIChoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5Q VVRfSTJTKSB7CisJCXN3aXRjaCAoaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzKSB7CisJCWNh c2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOgorCQljYXNlIEhETUlfQVVESU9f U0FNUExFX0ZSRVFVRU5DWV80NDEwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVO Q1lfNDgwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzg4MjAwOgorCQlj YXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV85NjAwMDoKKwkJCW10a19oZG1pX2h3X2F1 ZF9zcmNfb2ZmKGhkbWkpOworCQkJLyogbXRrX2hkbWlfaHdfYXVkX3NyY19lbmFibGUoaGRtaSwg ZmFsc2UpOyAqLworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKAorCQkJaGRtaSwKKwkJCWhk bWktPmF1ZF9wYXJhbS5hdWRfbWNsayk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5h YmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0K Kwl9IGVsc2UgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5pZWNfZnJhbWVfZnMpIHsKKwkJ Y2FzZSBIRE1JX0lFQ18zMks6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJ ICAgIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8zMjAwMDsKKwkJCW10a19oZG1pX2h3X2F1 ZF9zcmNfb2ZmKGhkbWkpOworCQkJbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKGhkbWksCisJCQkJ CQkgSERNSV9BVURfTUNMS18xMjhGUyk7CisJCQltdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5h YmxlKGhkbWksIGZhbHNlKTsKKwkJCWJyZWFrOworCQljYXNlIEhETUlfSUVDXzQ4SzoKKwkJCWhk bWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcyA9CisJCQkgICAgSERNSV9BVURJT19TQU1QTEVfRlJF UVVFTkNZXzQ4MDAwOworCQkJbXRrX2hkbWlfaHdfYXVkX3NyY19vZmYoaGRtaSk7CisJCQltdGtf aGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwKKwkJCQkJCSBIRE1JX0FVRF9NQ0xLXzEyOEZTKTsK KwkJCW10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUoaGRtaSwgZmFsc2UpOworCQkJYnJl YWs7CisJCWNhc2UgSERNSV9JRUNfNDRLOgorCQkJaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2Zz ID0KKwkJCSAgICBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA7CisJCQltdGtfaGRt aV9od19hdWRfc3JjX29mZihoZG1pKTsKKwkJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1p LAorCQkJCQkJIEhETUlfQVVEX01DTEtfMTI4RlMpOworCQkJbXRrX2hkbWlfaHdfYXVkX2FjbGtf aW52X2VuYWJsZShoZG1pLCBmYWxzZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFr OworCQl9CisJfQorCW10a19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhoZG1pLCBoZG1pLT5hdWRfcGFy YW0uYXVkX2hkbWlfZnMsCisJCQkJIGRpc3BsYXlfbW9kZS0+Y2xvY2spOworCisJbXRrX2hkbWlf aHdfYXVkX3NyY19yZWVuYWJsZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBt dGtfaGRtaV9hdWRfc2V0X2Nobmxfc3RhdHVzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlt dGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3RhdHVzKAorCQloZG1pLAorCSAgIGhkbWktPmF1 ZF9wYXJhbS5oZG1pX2xfY2hhbm5lbF9zdGF0ZSwKKwkgICBoZG1pLT5hdWRfcGFyYW0uaGRtaV9y X2NoYW5uZWxfc3RhdGUsCisJICAgaGRtaS0+YXVkX3BhcmFtLmF1ZF9oZG1pX2ZzKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfb3V0cHV0X2NvbmZpZyhzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3Bs YXlfbW9kZSkKK3sKKwltdGtfaGRtaV9od19hdWRfbXV0ZShoZG1pLCB0cnVlKTsKKwltdGtfaGRt aV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCBmYWxzZSk7CisKKwltdGtfaGRtaV9hdWRfc2V0X2lu cHV0KGhkbWkpOworCW10a19oZG1pX2F1ZF9zZXRfc3JjKGhkbWksIGRpc3BsYXlfbW9kZSk7CisJ bXRrX2hkbWlfYXVkX3NldF9jaG5sX3N0YXR1cyhoZG1pKTsKKworCXVzbGVlcF9yYW5nZSg1MCwg MTAwKTsKKworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCB0cnVlKTsKKwltdGtf aGRtaV9hdWRfZW5hYmxlX3BhY2tldChoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19hdWRfbXV0 ZShoZG1pLCBmYWxzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0 dXBfYXZfbXV0ZV9wYWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3 X3NlbmRfYXZfbXV0ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRt aV9zZXR1cF9hdl91bm11dGVfcGFja2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwltdGtf aGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBtdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJ CQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGhkbWlfYXZpX2lu Zm9mcmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTddOworCXNzaXplX3QgZXJyOworCisJZXJyID0g ZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsIG1vZGUpOwor CWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQg QVZJIGluZm9mcmFtZSBmcm9tIG1vZGU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9 CisKKwllcnIgPSBoZG1pX2F2aV9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9m KGJ1ZmZlcikpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVk IHRvIHBhY2sgQVZJIGluZm9mcmFtZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K KworCW10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZm ZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF9zcGRfaW5m b2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJY29uc3QgY2hhciAqdmVuZG9yLAor CQkJCQljb25zdCBjaGFyICpwcm9kdWN0KQoreworCXN0cnVjdCBoZG1pX3NwZF9pbmZvZnJhbWUg ZnJhbWU7CisJdTggYnVmZmVyWzI5XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGhkbWlfc3Bk X2luZm9mcmFtZV9pbml0KCZmcmFtZSwgdmVuZG9yLCBwcm9kdWN0KTsKKwlpZiAoZXJyIDwgMCkg eworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIFNQRCBpbmZvZnJh bWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRtaV9z cGRfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlpZiAo ZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIFNEUCBpbmZv ZnJhbWU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9od19z ZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSkKK3sKKwlzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgZnJhbWU7CisJ dTggYnVmZmVyWzE0XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGhkbWlfYXVkaW9faW5mb2Zy YW1lX2luaXQoJmZyYW1lKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwg IkZhaWxlZCB0byBzZXR1cCBhdWRpbyBpbmZvZnJhbWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJl dHVybiBlcnI7CisJfQorCisJZnJhbWUuY29kaW5nX3R5cGUgPSBIRE1JX0FVRElPX0NPRElOR19U WVBFX1NUUkVBTTsKKwlmcmFtZS5zYW1wbGVfZnJlcXVlbmN5ID0gSERNSV9BVURJT19TQU1QTEVf RlJFUVVFTkNZX1NUUkVBTTsKKwlmcmFtZS5zYW1wbGVfc2l6ZSA9IEhETUlfQVVESU9fU0FNUExF X1NJWkVfU1RSRUFNOworCWZyYW1lLmNoYW5uZWxzID0KKwkgICAgbXRrX2hkbWlfYXVkX2dldF9j aG5sX2NvdW50KAorCSAgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2NoYW5fdHlwZSk7CisK KwllcnIgPSBoZG1pX2F1ZGlvX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2Yo YnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQg dG8gcGFjayBhdWRpbyBpbmZvZnJhbWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7 CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9m KGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3NldHVwX3Zl bmRvcl9zcGVjaWZpY19pbmZvZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkJc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJc3RydWN0IGhkbWlfdmVuZG9yX2luZm9m cmFtZSBmcmFtZTsKKwl1OCBidWZmZXJbMTBdOworCXNzaXplX3QgZXJyOworCisJZXJyID0gZHJt X2hkbWlfdmVuZG9yX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUsIG1vZGUpOwor CWlmIChlcnIpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGdldCB2ZW5k b3IgaW5mb2ZyYW1lIGZyb20gbW9kZTogJXpkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0K KworCWVyciA9IGhkbWlfdmVuZG9yX2luZm9mcmFtZV9wYWNrKCZmcmFtZSwgYnVmZmVyLCBzaXpl b2YoYnVmZmVyKSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0 byBwYWNrIHZlbmRvciBpbmZvZnJhbWU6ICV6ZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7 CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1lKGhkbWksIGJ1ZmZlciwgc2l6ZW9m KGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitpbnQgbXRrX2hkbWlfaHBkX2hpZ2goc3RydWN0 IG10a19oZG1pICpoZG1pKQoreworCXJldHVybiBoZG1pLT5jZWNfZGV2ID8gbXRrX2NlY19ocGRf aGlnaChoZG1pLT5jZWNfZGV2KSA6IGZhbHNlOworfQorCitpbnQgbXRrX2hkbWlfb3V0cHV0X2lu aXQoc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXN0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtICph dWRfcGFyYW0gPSAmaGRtaS0+YXVkX3BhcmFtOworCisJaWYgKGhkbWktPmluaXQpCisJCXJldHVy biAtRUlOVkFMOworCisJaGRtaS0+Y3NwID0gSERNSV9DT0xPUlNQQUNFX1JHQjsKKwloZG1pLT5v dXRwdXQgPSB0cnVlOworCWF1ZF9wYXJhbS0+YXVkX2NvZGVjID0gSERNSV9BVURJT19DT0RJTkdf VFlQRV9QQ007CisJYXVkX3BhcmFtLT5hdWRfaGRtaV9mcyA9IEhETUlfQVVESU9fU0FNUExFX0ZS RVFVRU5DWV80ODAwMDsKKwlhdWRfcGFyYW0tPmF1ZF9zYW1wZV9zaXplID0gSERNSV9BVURJT19T QU1QTEVfU0laRV8xNjsKKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF90eXBlID0gSERNSV9BVURfSU5Q VVRfSTJTOworCWF1ZF9wYXJhbS0+YXVkX2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0kyU18yNEJJ VDsKKwlhdWRfcGFyYW0tPmF1ZF9tY2xrID0gSERNSV9BVURfTUNMS18xMjhGUzsKKwlhdWRfcGFy YW0tPmllY19mcmFtZV9mcyA9IEhETUlfSUVDXzQ4SzsKKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF9j aGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8wOworCWF1ZF9wYXJhbS0+aGRtaV9sX2No YW5uZWxfc3RhdGVbMl0gPSAyOworCWF1ZF9wYXJhbS0+aGRtaV9yX2NoYW5uZWxfc3RhdGVbMl0g PSAyOworCWhkbWktPmluaXQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXRrX2hk bWlfcG93ZXJfb24oc3RydWN0IG10a19oZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3X21ha2Vf cmVnX3dyaXRhYmxlKGhkbWksIHRydWUpOworCW10a19oZG1pX2h3XzFwNF92ZXJzaW9uX2VuYWJs ZShoZG1pLCB0cnVlKTsKK30KKwordm9pZCBtdGtfaGRtaV9wb3dlcl9vZmYoc3RydWN0IG10a19o ZG1pICpoZG1pKQoreworCW10a19oZG1pX2h3XzFwNF92ZXJzaW9uX2VuYWJsZShoZG1pLCB0cnVl KTsKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShoZG1pLCBmYWxzZSk7Cit9CisKK2lu dCBtdGtfaGRtaV9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks CisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlpbnQgcmV0Owor CisJaWYgKCFoZG1pLT5pbml0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiZG9lc24ndCBpbml0 IGhkbWkgY29udHJvbCBjb250ZXh0IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW10 a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19hdWRfbXV0ZSho ZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9zZXR1cF9hdl9tdXRlX3BhY2tldChoZG1pKTsKKwlwaHlf cG93ZXJfb2ZmKGhkbWktPnBoeSk7CisKKwlyZXQgPSBtdGtfaGRtaV92aWRlb19jaGFuZ2VfdnBs bChoZG1pLAorCQkJCQkgbW9kZS0+Y2xvY2sgKiAxMDAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9l cnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHNldCB2cGxsOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisJbXRrX2hkbWlfdmlkZW9fc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCBtb2RlKTsK KworCXBoeV9wb3dlcl9vbihoZG1pLT5waHkpOworCW10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmln KGhkbWksIG1vZGUpOworCisJbXRrX2hkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKGhkbWkpOwor CW10a19oZG1pX3NldHVwX2F2aV9pbmZvZnJhbWUoaGRtaSwgbW9kZSk7CisJbXRrX2hkbWlfc2V0 dXBfc3BkX2luZm9mcmFtZShoZG1pLCAibWVkaWF0ZWsiLCAiY2hyb21lYm9vayIpOworCWlmICht b2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJbXRrX2hkbWlfc2V0dXBfdmVu ZG9yX3NwZWNpZmljX2luZm9mcmFtZShoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX2h3X3ZpZF9i bGFjayhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdfYXVkX211dGUoaGRtaSwgZmFsc2UpOwor CW10a19oZG1pX3NldHVwX2F2X3VubXV0ZV9wYWNrZXQoaGRtaSk7CisKKwlyZXR1cm4gMDsKK30K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uOTQwMzkxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfaGRtaS5oCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAy MDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisjaWZuZGVmIF9NVEtfSERNSV9DVFJMX0gKKyNkZWZpbmUgX01US19IRE1JX0NUUkxfSAorCisj aW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1 ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKworc3RydWN0IGNsazsKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNl X25vZGU7CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3Ry dWN0IHBoeTsKK3N0cnVjdCByZWdtYXA7CisKK2VudW0gbXRrX2hkbWlfY2xrX2lkIHsKKwlNVEtf SERNSV9DTEtfSERNSV9QSVhFTCwKKwlNVEtfSERNSV9DTEtfSERNSV9QTEwsCisJTVRLX0hETUlf Q0xLX0FVRF9CQ0xLLAorCU1US19IRE1JX0NMS19BVURfU1BESUYsCisJTVRLX0hETUlfQ0xLX0NP VU5UCit9OworCitlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgeworCUhETUlfQVVEX0lOUFVUX0ky UyA9IDAsCisJSERNSV9BVURfSU5QVVRfU1BESUYsCit9OworCitlbnVtIGhkbWlfYXVkX2kyc19m bXQgeworCUhETUlfSTJTX01PREVfUkpUXzI0QklUID0gMCwKKwlIRE1JX0kyU19NT0RFX1JKVF8x NkJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0xKVF8xNkJJ VCwKKwlIRE1JX0kyU19NT0RFX0kyU18yNEJJVCwKKwlIRE1JX0kyU19NT0RFX0kyU18xNkJJVAor fTsKKworZW51bSBoZG1pX2F1ZF9tY2xrIHsKKwlIRE1JX0FVRF9NQ0xLXzEyOEZTLAorCUhETUlf QVVEX01DTEtfMTkyRlMsCisJSERNSV9BVURfTUNMS18yNTZGUywKKwlIRE1JX0FVRF9NQ0xLXzM4 NEZTLAorCUhETUlfQVVEX01DTEtfNTEyRlMsCisJSERNSV9BVURfTUNMS183NjhGUywKKwlIRE1J X0FVRF9NQ0xLXzExNTJGUywKK307CisKK2VudW0gaGRtaV9hdWRfaWVjX2ZyYW1lX3JhdGUgewor CUhETUlfSUVDXzMySyA9IDAsCisJSERNSV9JRUNfOTZLLAorCUhETUlfSUVDXzE5MkssCisJSERN SV9JRUNfNzY4SywKKwlIRE1JX0lFQ180NEssCisJSERNSV9JRUNfODhLLAorCUhETUlfSUVDXzE3 NkssCisJSERNSV9JRUNfNzA1SywKKwlIRE1JX0lFQ18xNkssCisJSERNSV9JRUNfMjJLLAorCUhE TUlfSUVDXzI0SywKKwlIRE1JX0lFQ180OEssCit9OworCitlbnVtIGhkbWlfYXVkX2NoYW5uZWxf dHlwZSB7CisJSERNSV9BVURfQ0hBTl9UWVBFXzFfMCA9IDAsCisJSERNSV9BVURfQ0hBTl9UWVBF XzFfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfMl8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV8yXzEs CisJSERNSV9BVURfQ0hBTl9UWVBFXzNfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xLAorCUhE TUlfQVVEX0NIQU5fVFlQRV80XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMSwKKwlIRE1JX0FV RF9DSEFOX1RZUEVfNV8wLAorCUhETUlfQVVEX0NIQU5fVFlQRV81XzEsCisJSERNSV9BVURfQ0hB Tl9UWVBFXzZfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xLAorCUhETUlfQVVEX0NIQU5fVFlQ RV83XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18w X0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfM18xX0xSUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVf NF8wX0NMUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzRfMV9DTFJTLAorCUhETUlfQVVEX0NIQU5f VFlQRV82XzFfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSCwKKwlIRE1JX0FVRF9DSEFO X1RZUEVfNl8xX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0hSLAorCUhETUlfQVVEX0NI QU5fVFlQRV83XzFfTEhfUkgsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU1JfUlNSLAorCUhE TUlfQVVEX0NIQU5fVFlQRV83XzFfTENfUkMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19S VywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTRF9SU0QsCisJSERNSV9BVURfQ0hBTl9UWVBF XzdfMV9MU1NfUlNTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfTEhTX1JIUywKKwlIRE1JX0FV RF9DSEFOX1RZUEVfN18xX0NTX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfT0gsCisJ SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9D SF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZ UEVfN18xX09IX0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1NfTFNSX1JTUiwK KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0gs CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8wX0NI UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83 XzBfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xDX1JDLAorCUhETUlfQVVEX0NI QU5fVFlQRV83XzBfTFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU0RfUlNELAorCUhE TUlfQVVEX0NIQU5fVFlQRV83XzBfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xI U19SSFMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZ UEVfN18wX0NTX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0hSLAorCUhETUlfQVVE X0NIQU5fVFlQRV83XzBfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DSF9DSFIsCisJ SERNSV9BVURfQ0hBTl9UWVBFXzdfMF9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9M U1NfUlNTX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzhfMF9MSF9SSF9DUywKKwlIRE1J X0FVRF9DSEFOX1RZUEVfVU5LTk9XTiA9IDB4RkYKK307CisKK2VudW0gaGRtaV9hdWRfY2hhbm5l bF9zd2FwX3R5cGUgeworCUhETUlfQVVEX1NXQVBfTFIsCisJSERNSV9BVURfU1dBUF9MRkVfQ0Ms CisJSERNSV9BVURfU1dBUF9MU1JTLAorCUhETUlfQVVEX1NXQVBfUkxTX1JSUywKKwlIRE1JX0FV RF9TV0FQX0xSX1NUQVRVUywKK307CisKK3N0cnVjdCBoZG1pX2F1ZGlvX3BhcmFtIHsKKwllbnVt IGhkbWlfYXVkaW9fY29kaW5nX3R5cGUgYXVkX2NvZGVjOworCWVudW0gaGRtaV9hdWRpb19zYW1w bGVfZnJlcXVlbmN5IGF1ZF9oZG1pX2ZzOworCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBh dWRfc2FtcGVfc2l6ZTsKKwllbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgYXVkX2lucHV0X3R5cGU7 CisJZW51bSBoZG1pX2F1ZF9pMnNfZm10IGF1ZF9pMnNfZm10OworCWVudW0gaGRtaV9hdWRfbWNs ayBhdWRfbWNsazsKKwllbnVtIGhkbWlfYXVkX2llY19mcmFtZV9yYXRlIGllY19mcmFtZV9mczsK KwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBhdWRfaW5wdXRfY2hhbl90eXBlOworCXU4IGhk bWlfbF9jaGFubmVsX3N0YXRlWzZdOworCXU4IGhkbWlfcl9jaGFubmVsX3N0YXRlWzZdOworfTsK Kworc3RydWN0IG10a19oZG1pIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlkZ2U7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgY29ubjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHBoeSAq cGh5OworCXN0cnVjdCBkZXZpY2UgKmNlY19kZXY7CisJc3RydWN0IGkyY19hZGFwdGVyICpkZGNf YWRwdDsKKwlzdHJ1Y3QgY2xrICpjbGtbTVRLX0hETUlfQ0xLX0NPVU5UXTsKKyNpZiBkZWZpbmVk KENPTkZJR19ERUJVR19GUykKKwlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzOworI2VuZGlmCisJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqYXVkaW9fcGRldjsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSBtb2RlOworCWJvb2wgZHZpX21vZGU7CisJdTMyIG1pbl9jbG9jazsKKwl1MzIgbWF4X2Nsb2Nr OworCXUzMiBtYXhfaGRpc3BsYXk7CisJdTMyIG1heF92ZGlzcGxheTsKKwl1MzIgaWJpYXM7CisJ dTMyIGliaWFzX3VwOworCXN0cnVjdCByZWdtYXAgKnN5c19yZWdtYXA7CisJdW5zaWduZWQgaW50 IHN5c19vZmZzZXQ7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWJvb2wgaW5pdDsKKwllbnVtIGhk bWlfY29sb3JzcGFjZSBjc3A7CisJYm9vbCBhdWRpb19lbmFibGU7CisJYm9vbCBvdXRwdXQ7CisJ c3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gYXVkX3BhcmFtOworfTsKKworc3RhdGljIGlubGluZSBz dHJ1Y3QgbXRrX2hkbWkgKmhkbWlfY3R4X2Zyb21fYnJpZGdlKHN0cnVjdCBkcm1fYnJpZGdlICpi KQoreworCXJldHVybiBjb250YWluZXJfb2YoYiwgc3RydWN0IG10a19oZG1pLCBicmlkZ2UpOwor fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9jb25uKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjKQoreworCXJldHVybiBjb250YWluZXJfb2YoYywgc3RydWN0 IG10a19oZG1pLCBjb25uKTsKK30KKworaW50IG10a19oZG1pX291dHB1dF9pbml0KHN0cnVjdCBt dGtfaGRtaSAqaGRtaSk7CitpbnQgbXRrX2hkbWlfaHBkX2hpZ2goc3RydWN0IG10a19oZG1pICpo ZG1pKTsKK2ludCBtdGtfaGRtaV9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShzdHJ1Y3QgbXRrX2hk bWkgKmhkbWksCisJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit2b2lk IG10a19oZG1pX3Bvd2VyX29uKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1p X3Bvd2VyX29mZihzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOworI2lmIGRlZmluZWQoQ09ORklHX0RF QlVHX0ZTKQoraW50IG10a19kcm1faGRtaV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG10a19oZG1pICpo ZG1pKTsKK3ZvaWQgbXRrX2RybV9oZG1pX2RlYnVnZnNfZXhpdChzdHJ1Y3QgbXRrX2hkbWkgKmhk bWkpOworI2Vsc2UKK2ludCBtdGtfZHJtX2hkbWlfZGVidWdmc19pbml0KHN0cnVjdCBtdGtfaGRt aSAqaGRtaSkKK3sKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGtfZHJtX2hkbWlfZGVidWdmc19l eGl0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdf RlMgKi8KKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2NlY19kcml2ZXI7Citl eHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVyOworZXh0ZXJu IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlfcGh5X2RyaXZlcjsKKyNlbmRpZiAvKiBf TVRLX0hETUlfQ1RSTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWlfZGRjX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2Rk Y19kcnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU1NDg3Ci0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY19kcnYu YwpAQCAtMCwwICsxLDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJ bmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o PgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8 bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNkZWZpbmUgU0lGMV9DTE9LCQkoMjg4KQorI2RlZmlu ZSBERENfRERDTUNUTDAJCSgweDApCisjZGVmaW5lIEREQ01fT0RSQUlOCQkJQklUKDMxKQorI2Rl ZmluZSBERENNX0NMS19ESVZfT0ZGU0VUCQkoMTYpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9NQVNL CQkoMHhmZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fQ1NfU1RBVFVTCQkJQklUKDQpCisjZGVmaW5l IEREQ01fU0NMX1NUQVRFCQkJQklUKDMpCisjZGVmaW5lIEREQ01fU0RBX1NUQVRFCQkJQklUKDIp CisjZGVmaW5lIEREQ01fU00wRU4JCQlCSVQoMSkKKyNkZWZpbmUgRERDTV9TQ0xfU1RSRUNICQkJ QklUKDApCisjZGVmaW5lIEREQ19ERENNQ1RMMQkJKDB4NCkKKyNkZWZpbmUgRERDTV9BQ0tfT0ZG U0VUCQkJKDE2KQorI2RlZmluZSBERENNX0FDS19NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5l IEREQ01fUEdMRU5fT0ZGU0VUCQkoOCkKKyNkZWZpbmUgRERDTV9QR0xFTl9NQVNLCQkJKDB4NyA8 PCA4KQorI2RlZmluZSBERENNX1NJRl9NT0RFX09GRlNFVAkJKDQpCisjZGVmaW5lIEREQ01fU0lG X01PREVfTUFTSwkJKDB4NyA8PCA0KQorI2RlZmluZSBERENNX1NUQVJUCQkJKDB4MSkKKyNkZWZp bmUgRERDTV9XUklURV9EQVRBCQkJKDB4MikKKyNkZWZpbmUgRERDTV9TVE9QCQkJKDB4MykKKyNk ZWZpbmUgRERDTV9SRUFEX0RBVEFfTk9fQUNLCQkoMHg0KQorI2RlZmluZSBERENNX1JFQURfREFU QV9BQ0sJCSgweDUpCisjZGVmaW5lIEREQ01fVFJJCQkJQklUKDApCisjZGVmaW5lIEREQ19ERENN RDAJCSgweDgpCisjZGVmaW5lIEREQ01fREFUQTMJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERD TV9EQVRBMgkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBERENNX0RBVEExCQkJKDB4ZmYgPDwgOCkK KyNkZWZpbmUgRERDTV9EQVRBMAkJCSgweGZmIDw8IDApCisjZGVmaW5lIEREQ19ERENNRDEJCSgw eGMpCisjZGVmaW5lIEREQ01fREFUQTcJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERDTV9EQVRB NgkJCSgweGZmIDw8IDE2KQorI2RlZmluZSBERENNX0RBVEE1CQkJKDB4ZmYgPDwgOCkKKyNkZWZp bmUgRERDTV9EQVRBNAkJCSgweGZmIDw8IDApCisKK3N0cnVjdCBtdGtfaGRtaV9pMmMgeworCXN0 cnVjdCBpMmNfYWRhcHRlciBhZGFwOworCXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0g KnJlZ3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2lmX3NldF9iaXQoc3RydWN0IG10a19o ZG1pX2kyYyAqaTJjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGlu dCB2YWwpCit7CisJd3JpdGVsKHJlYWRsKGkyYy0+cmVncyArIG9mZnNldCkgfCB2YWwsIGkyYy0+ cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWZfY2xyX2JpdChzdHJ1 Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5z aWduZWQgaW50IHZhbCkKK3sKKwl3cml0ZWwocmVhZGwoaTJjLT5yZWdzICsgb2Zmc2V0KSAmIH52 YWwsIGkyYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaWZfYml0 X2lzX3NldChzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJ CQkJICB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJldHVybiAocmVhZGwoaTJjLT5yZWdzICsgb2Zm c2V0KSAmIHZhbCkgPT0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2lmX3dyaXRlX21h c2soc3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCSAg dW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBzaGlmdCwKKwkJCQkgIHVuc2lnbmVkIGlu dCB2YWwpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXRtcCA9IHJlYWRsKGkyYy0+cmVncyAr IG9mZnNldCk7CisJdG1wICY9IH5tYXNrOworCXRtcCB8PSAodmFsIDw8IHNoaWZ0KSAmIG1hc2s7 CisJd3JpdGVsKHRtcCwgaTJjLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1 bnNpZ25lZCBpbnQgc2lmX3JlYWRfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMsCisJCQkJ CSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgbWFzaywKKwkJCQkJIHVuc2lnbmVk IGludCBzaGlmdCkKK3sKKwlyZXR1cm4gKHJlYWRsKGkyYy0+cmVncyArIG9mZnNldCkgJiBtYXNr KSA+PiBzaGlmdDsKK30KKworc3RhdGljIHZvaWQgZGRjbV90cmlnZ2VyX21vZGUoc3RydWN0IG10 a19oZG1pX2kyYyAqaTJjLCBpbnQgbW9kZSkKK3sKKwlpbnQgdGltZW91dCA9IDIwICogMTAwMDsK KworCXNpZl93cml0ZV9tYXNrKGkyYywgRERDX0REQ01DVEwxLCBERENNX1NJRl9NT0RFX01BU0ss CisJCSAgICAgICBERENNX1NJRl9NT0RFX09GRlNFVCwgbW9kZSk7CisJc2lmX3NldF9iaXQoaTJj LCBERENfRERDTUNUTDEsIEREQ01fVFJJKTsKKwl3aGlsZSAoc2lmX2JpdF9pc19zZXQoaTJjLCBE RENfRERDTUNUTDEsIEREQ01fVFJJKSkgeworCQl0aW1lb3V0IC09IDI7CisJCXVkZWxheSgyKTsK KwkJaWYgKHRpbWVvdXQgPD0gMCkKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBtdGtf aGRtaV9pMmNfcmVhZF9tc2coc3RydWN0IG10a19oZG1pX2kyYyAqaTJjLCBzdHJ1Y3QgaTJjX21z ZyAqbXNnKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyYy0+YWRhcC5kZXYucGFyZW50Owor CXUzMiByZW1haW5fY291bnQsIGFja19jb3VudCwgYWNrX2ZpbmFsLCByZWFkX2NvdW50LCB0ZW1w X2NvdW50OworCXUzMiBpbmRleCA9IDA7CisJdTMyIGFjazsKKwlpbnQgaTsKKworCWRkY21fdHJp Z2dlcl9tb2RlKGkyYywgRERDTV9TVEFSVCk7CisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERD TUQwLCAweGZmLCAwLCAobXNnLT5hZGRyIDw8IDEpIHwgMHgwMSk7CisJc2lmX3dyaXRlX21hc2so aTJjLCBERENfRERDTUNUTDEsIEREQ01fUEdMRU5fTUFTSywgRERDTV9QR0xFTl9PRkZTRVQsCisJ CSAgICAgICAweDAwKTsKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fV1JJVEVfREFUQSk7 CisJYWNrID0gc2lmX3JlYWRfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywg RERDTV9BQ0tfT0ZGU0VUKTsKKwlkZXZfZGJnKGRldiwgImFjayA9IDB4JXhcbiIsIGFjayk7CisJ aWYgKGFjayAhPSAweDAxKSB7CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJ cmV0dXJuIC1FTlhJTzsKKwl9CisKKwlyZW1haW5fY291bnQgPSBtc2ctPmxlbjsKKwlhY2tfY291 bnQgPSAobXNnLT5sZW4gLSAxKSAvIDg7CisJYWNrX2ZpbmFsID0gMDsKKworCXdoaWxlIChyZW1h aW5fY291bnQgPiAwKSB7CisJCWlmIChhY2tfY291bnQgPiAwKSB7CisJCQlyZWFkX2NvdW50ID0g ODsKKwkJCWFja19maW5hbCA9IDA7CisJCQlhY2tfY291bnQtLTsKKwkJfSBlbHNlIHsKKwkJCXJl YWRfY291bnQgPSByZW1haW5fY291bnQ7CisJCQlhY2tfZmluYWwgPSAxOworCQl9CisKKwkJc2lm X3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDEsIEREQ01fUEdMRU5fTUFTSywKKwkJCSAgICAg ICBERENNX1BHTEVOX09GRlNFVCwgcmVhZF9jb3VudCAtIDEpOworCQlkZGNtX3RyaWdnZXJfbW9k ZShpMmMsIChhY2tfZmluYWwgPT0gMSkgPworCQkJCSAgRERDTV9SRUFEX0RBVEFfTk9fQUNLIDoK KwkJCQkgIEREQ01fUkVBRF9EQVRBX0FDSyk7CisKKwkJYWNrID0gc2lmX3JlYWRfbWFzayhpMmMs IEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywKKwkJCQkgICAgRERDTV9BQ0tfT0ZGU0VUKTsK KwkJdGVtcF9jb3VudCA9IDA7CisJCXdoaWxlICgoKGFjayAmICgxIDw8IHRlbXBfY291bnQpKSAh PSAwKSAmJiAodGVtcF9jb3VudCA8IDgpKQorCQkJdGVtcF9jb3VudCsrOworCQlpZiAoKChhY2tf ZmluYWwgPT0gMSkgJiYgKHRlbXBfY291bnQgIT0gKHJlYWRfY291bnQgLSAxKSkpIHx8CisJCSAg ICAoKGFja19maW5hbCA9PSAwKSAmJiAodGVtcF9jb3VudCAhPSByZWFkX2NvdW50KSkpIHsKKwkJ CWRldl9lcnIoZGV2LCAiQWRkcmVzcyBOQUNLISBBQ0soMHgleClcbiIsIGFjayk7CisJCQlicmVh azsKKwkJfQorCisJCWZvciAoaSA9IHJlYWRfY291bnQ7IGkgPj0gMTsgaS0tKSB7CisJCQlpbnQg c2hpZnQ7CisJCQlpbnQgb2Zmc2V0OworCisJCQlpZiAoaSA+IDQpIHsKKwkJCQlvZmZzZXQgPSBE RENfRERDTUQxOworCQkJCXNoaWZ0ID0gKGkgLSA1KSAqIDg7CisJCQl9IGVsc2UgeworCQkJCW9m ZnNldCA9IEREQ19ERENNRDA7CisJCQkJc2hpZnQgPSAoaSAtIDEpICogODsKKwkJCX0KKworCQkJ bXNnLT5idWZbaW5kZXggKyBpIC0gMV0gPSBzaWZfcmVhZF9tYXNrKGkyYywgb2Zmc2V0LAorCQkJ CQkJCQkweGZmIDw8IHNoaWZ0LAorCQkJCQkJCQlzaGlmdCk7CisJCX0KKworCQlyZW1haW5fY291 bnQgLT0gcmVhZF9jb3VudDsKKwkJaW5kZXggKz0gcmVhZF9jb3VudDsKKwl9CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9pMmNfd3JpdGVfbXNnKHN0cnVjdCBtdGtfaGRt aV9pMmMgKmkyYywgc3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBpMmMtPmFkYXAuZGV2LnBhcmVudDsKKwl1MzIgYWNrOworCisJZGRjbV90cmlnZ2VyX21vZGUo aTJjLCBERENNX1NUQVJUKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENNRDAsIEREQ01f REFUQTAsIDAsIG1zZy0+YWRkciA8PCAxKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIEREQ19ERENN RDAsIEREQ01fREFUQTEsIDgsIG1zZy0+YnVmWzBdKTsKKwlzaWZfd3JpdGVfbWFzayhpMmMsIERE Q19ERENNQ1RMMSwgRERDTV9QR0xFTl9NQVNLLCBERENNX1BHTEVOX09GRlNFVCwKKwkJICAgICAg IDB4MSk7CisJZGRjbV90cmlnZ2VyX21vZGUoaTJjLCBERENNX1dSSVRFX0RBVEEpOworCisJYWNr ID0gc2lmX3JlYWRfbWFzayhpMmMsIEREQ19ERENNQ1RMMSwgRERDTV9BQ0tfTUFTSywgRERDTV9B Q0tfT0ZGU0VUKTsKKwlkZXZfZGJnKGRldiwgImFjayA9ICVkXG4iLCBhY2spOworCisJaWYgKGFj ayAhPSAweDAzKSB7CisJCWRldl9lcnIoZGV2LCAiaTJjIGFjayBlcnIhXG4iKTsKKwkJcmV0dXJu IC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3hm ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBzdHJ1Y3QgaTJjX21zZyAq bXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfaTJjICppMmMgPSBhZGFwdGVyLT5h bGdvX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gYWRhcHRlci0+ZGV2LnBhcmVudDsKKwlp bnQgcmV0OworCWludCBpOworCisJaWYgKCFpMmMpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlk IGFyZ3VtZW50c1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNpZl9zZXRfYml0KGky YywgRERDX0REQ01DVEwwLCBERENNX1NDTF9TVFJFQ0gpOworCXNpZl9zZXRfYml0KGkyYywgRERD X0REQ01DVEwwLCBERENNX1NNMEVOKTsKKwlzaWZfY2xyX2JpdChpMmMsIEREQ19ERENNQ1RMMCwg RERDTV9PRFJBSU4pOworCisJaWYgKHNpZl9iaXRfaXNfc2V0KGkyYywgRERDX0REQ01DVEwxLCBE RENNX1RSSSkpIHsKKwkJZGV2X2VycihkZXYsICJkZGMgbGluZSBpcyBidXN5IVxuIik7CisJCXJl dHVybiAtRUJVU1k7CisJfQorCisJc2lmX3dyaXRlX21hc2soaTJjLCBERENfRERDTUNUTDAsIERE Q01fQ0xLX0RJVl9NQVNLLAorCQkgICAgICAgRERDTV9DTEtfRElWX09GRlNFVCwgU0lGMV9DTE9L KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlzdHJ1Y3QgaTJjX21zZyAqbXNn ID0gJm1zZ3NbaV07CisKKwkJZGV2X2RiZyhkZXYsICJpMmMgbXNnLCBhZHI6MHgleCwgZmxhZ3M6 JWQsIGxlbiA6MHgleFxuIiwKKwkJCW1zZy0+YWRkciwgbXNnLT5mbGFncywgbXNnLT5sZW4pOwor CisJCWlmIChtc2ctPmZsYWdzICYgSTJDX01fUkQpCisJCQlyZXQgPSBtdGtfaGRtaV9pMmNfcmVh ZF9tc2coaTJjLCBtc2cpOworCQllbHNlCisJCQlyZXQgPSBtdGtfaGRtaV9pMmNfd3JpdGVfbXNn KGkyYywgbXNnKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHhmZXJfZW5kOworCX0KKworCWRk Y21fdHJpZ2dlcl9tb2RlKGkyYywgRERDTV9TVE9QKTsKKworCXJldHVybiBpOworCit4ZmVyX2Vu ZDoKKwlkZGNtX3RyaWdnZXJfbW9kZShpMmMsIEREQ01fU1RPUCk7CisJZGV2X2VycihkZXYsICJk ZGMgZmFpbGVkIVxuIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHUzMiBtdGtfaGRtaV9p MmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5D X0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJj X2FsZ29yaXRobSBtdGtfaGRtaV9pMmNfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlciA9IG10 a19oZG1pX2kyY194ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gbXRrX2hkbWlfaTJjX2Z1bmMsCit9 OworCitzdGF0aWMgaW50IG10a19oZG1pX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10 a19oZG1pX2kyYyAqaTJjOworCXN0cnVjdCByZXNvdXJjZSAqbWVtOworCWludCByZXQ7CisKKwlp MmMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG10a19oZG1pX2kyYyksIEdGUF9L RVJORUwpOworCWlmICghaTJjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyYy0+Y2xrID0gZGV2 bV9jbGtfZ2V0KGRldiwgImRkYy1pMmMiKTsKKwlpZiAoSVNfRVJSKGkyYy0+Y2xrKSkgeworCQlk ZXZfZXJyKGRldiwgImdldCBkZGNfY2xrIGZhaWxlZCA6ICVwICxcbiIsIGkyYy0+Y2xrKTsKKwkJ cmV0dXJuIFBUUl9FUlIoaTJjLT5jbGspOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaTJjLT5yZWdzID0gZGV2bV9pb3JlbWFw X3Jlc291cmNlKCZwZGV2LT5kZXYsIG1lbSk7CisJaWYgKElTX0VSUihpMmMtPnJlZ3MpKSB7CisJ CWRldl9lcnIoZGV2LCAiZ2V0IG1lbW9yeSBzb3VyY2UgZmFpbCFcbiIpOworCQlyZXR1cm4gUFRS X0VSUihpMmMtPnJlZ3MpOworCX0KKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpMmMtPmNs ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImVuYWJsZSBkZGMgY2xrIGZhaWxlZCFc biIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXN0cmxjcHkoaTJjLT5hZGFwLm5hbWUsICJtZWRp YXRlay1oZG1pLWkyYyIsIHNpemVvZihpMmMtPmFkYXAubmFtZSkpOworCWkyYy0+YWRhcC5vd25l ciA9IFRISVNfTU9EVUxFOworCWkyYy0+YWRhcC5hbGdvID0gJm10a19oZG1pX2kyY19hbGdvcml0 aG07CisJaTJjLT5hZGFwLnJldHJpZXMgPSAzOworCWkyYy0+YWRhcC5kZXYub2Zfbm9kZSA9IGRl di0+b2Zfbm9kZTsKKwlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOworCWkyYy0+YWRhcC5kZXYu cGFyZW50ID0gJnBkZXYtPmRldjsKKworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFw KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgYnVzIHRv IGkyYyBjb3JlXG4iKTsKKwkJZ290byBlcnJfY2xrX2Rpc2FibGU7CisJfQorCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgaTJjKTsKKworCWRldl9kYmcoZGV2LCAiaTJjLT5hZGFwOiAlcFxu IiwgJmkyYy0+YWRhcCk7CisJZGV2X2RiZyhkZXYsICJpMmMtPmNsazogJXBcbiIsIGkyYy0+Y2xr KTsKKwlkZXZfZGJnKGRldiwgInBoeXNpY2FsIGFkcjogMHglbGx4LCBlbmQ6IDB4JWxseFxuIiwg bWVtLT5zdGFydCwKKwkJbWVtLT5lbmQpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGtfZGlzYWJs ZToKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2hkbWlfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCBtdGtfaGRtaV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKKwlpMmNfZGVsX2Fk YXB0ZXIoJmkyYy0+YWRhcCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfaTJjX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9 ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1kZGMiLCB9LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRm b3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVyID0geworCS5wcm9iZSA9IG10a19oZG1pX2ky Y19wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlfaTJjX3JlbW92ZSwKKwkuZHJpdmVyID0gewor CQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLWRkYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19o ZG1pX2kyY19tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFp dUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUkgaTJj IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2hkbWlfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWM3 ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1p X2h3LmMKQEAgLTAsMCArMSw2NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFU ZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRl ICJtdGtfaGRtaV9ody5oIgorI2luY2x1ZGUgIm10a19oZG1pX3JlZ3MuaCIKKyNpbmNsdWRlICJt dGtfaGRtaS5oIgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KKyNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNp bmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworc3RhdGljIHUzMiBtdGtfaGRtaV9yZWFkKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gcmVhZGwoaGRtaS0+cmVn cyArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3dyaXRlKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBoZG1pLT5y ZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfbWFzayhzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksIHUzMiBvZmZzZXQsIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiB0bXAg PSBtdGtfaGRtaV9yZWFkKGhkbWksIG9mZnNldCkgJiB+bWFzazsKKworCXRtcCB8PSAodmFsICYg bWFzayk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgb2Zmc2V0LCB0bXApOworfQorCisjZGVmaW5l IE5DVFNfQllURVMgICAgICAgICAgMHgwNworCit2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICBib29sIGJsYWNrKQoreworCW10a19oZG1pX21h c2soaGRtaSwgVklERU9fQ0ZHXzQsIGJsYWNrID8gR0VOX1JHQiA6IE5PUk1BTF9QQVRILAorCQkg ICAgICBWSURFT19TT1VSQ0VfU0VMKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19tYWtlX3JlZ193 cml0YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCXJlZ21hcF91 cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNf Q0ZHMjAsCisJCQkgICBIRE1JX1BDTEtfRlJFRV9SVU4sIGVuYWJsZSA/IEhETUlfUENMS19GUkVF X1JVTiA6IDApOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5z eXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX09OIHwgQU5MR19PTiwgZW5h YmxlID8gKEhETUlfT04gfCBBTkxHX09OKSA6IDApOworfQorCit2b2lkIG10a19oZG1pX2h3XzFw NF92ZXJzaW9uX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQorewor CXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsg SERNSV9TWVNfQ0ZHMjAsCisJCQkgICBIRE1JMlAwX0VOLCBlbmFibGUgPyAwIDogSERNSTJQMF9F Tik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1p LCBib29sIG11dGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBtdXRl ID8gQVVESU9fWkVSTyA6IDAsIEFVRElPX1pFUk8pOworfQorCit2b2lkIG10a19oZG1pX2h3X3Jl c2V0KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+ c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERN SV9SU1QsIEhETUlfUlNUKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwg aGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzFDLAorCQkJICAgSERNSV9SU1QsIDApOwor CW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzMsIDAsIENGRzNfQ09OVFJPTF9QQUNLRVRfREVM QVkpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zm c2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBBTkxHX09OLCBBTkxHX09OKTsKK30KKwordm9p ZCBtdGtfaGRtaV9od19lbmFibGVfbm90aWNlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBl bmFibGVfbm90aWNlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIGVuYWJsZV9u b3RpY2UgPyBDRkcyX05PVElDRV9FTiA6IDAsCisJCSAgICAgIENGRzJfTk9USUNFX0VOKTsKK30K Kwordm9pZCBtdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWks IHUzMiBpbnRfbWFzaykKK3sKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSU5UX01BU0ssIGlu dF9tYXNrKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19lbmFibGVfZHZpX21vZGUoc3RydWN0IG10 a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9D RkcxLCBlbmFibGUgPyBDRkcxX0RWSSA6IDAsIENGRzFfRFZJKTsKK30KKwordm9pZCBtdGtfaGRt aV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10a19oZG1pICpoZG1pLCB1OCAqYnVmZmVyLCB1 OCBsZW4pCit7CisJdTMyIGN0cmxfcmVnID0gR1JMX0NUUkw7CisJaW50IGk7CisJdTggKmZyYW1l X2RhdGE7CisJdTggZnJhbWVfdHlwZTsKKwl1OCBmcmFtZV92ZXI7CisJdTggZnJhbWVfbGVuOwor CXU4IGNoZWNrc3VtOworCWludCBjdHJsX2ZyYW1lX2VuID0gMDsKKworCWZyYW1lX3R5cGUgPSAq YnVmZmVyOworCWJ1ZmZlciArPSAxOworCWZyYW1lX3ZlciA9ICpidWZmZXI7CisJYnVmZmVyICs9 IDE7CisJZnJhbWVfbGVuID0gKmJ1ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwljaGVja3N1bSA9ICpi dWZmZXI7CisJYnVmZmVyICs9IDE7CisJZnJhbWVfZGF0YSA9IGJ1ZmZlcjsKKworCWRldl9kYmco aGRtaS0+ZGV2LAorCQkiZnJhbWVfdHlwZToweCV4LGZyYW1lX3ZlcjoweCV4LGZyYW1lX2xlbjow eCV4LGNoZWNrc3VtOjB4JXhcbiIsCisJCWZyYW1lX3R5cGUsIGZyYW1lX3ZlciwgZnJhbWVfbGVu LCBjaGVja3N1bSk7CisKKwlzd2l0Y2ggKGZyYW1lX3R5cGUpIHsKKwljYXNlIEhETUlfSU5GT0ZS QU1FX1RZUEVfQVZJOgorCQljdHJsX2ZyYW1lX2VuID0gQ1RSTF9BVklfRU47CisJCWN0cmxfcmVn ID0gR1JMX0NUUkw7CisJCWJyZWFrOworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9TUEQ6CisJ CWN0cmxfZnJhbWVfZW4gPSBDVFJMX1NQRF9FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJ YnJlYWs7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPOgorCQljdHJsX2ZyYW1lX2Vu ID0gQ1RSTF9BVURJT19FTjsKKwkJY3RybF9yZWcgPSBHUkxfQ1RSTDsKKwkJYnJlYWs7CisJY2Fz ZSBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUjoKKwkJY3RybF9mcmFtZV9lbiA9IFZTX0VOOwor CQljdHJsX3JlZyA9IEdSTF9BQ1BfSVNSQ19DVFJMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQli cmVhazsKKwl9CisJbXRrX2hkbWlfbWFzayhoZG1pLCBjdHJsX3JlZywgMCwgY3RybF9mcmFtZV9l bik7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fVFlQRSwgZnJhbWVfdHlwZSk7 CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lORk9GUk1fVkVSLCBmcmFtZV92ZXIpOworCW10 a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JTkZPRlJNX0xORywgZnJhbWVfbGVuKTsKKworCW10a19o ZG1pX3dyaXRlKGhkbWksIEdSTF9JRk1fUE9SVCwgY2hlY2tzdW0pOworCWZvciAoaSA9IDA7IGkg PCBmcmFtZV9sZW47IGkrKykKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0lGTV9QT1JULCBm cmFtZV9kYXRhW2ldKTsKKworCW10a19oZG1pX21hc2soaGRtaSwgY3RybF9yZWcsIGN0cmxfZnJh bWVfZW4sIGN0cmxfZnJhbWVfZW4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXVkX3Bh Y2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21h c2soaGRtaSwgR1JMX1NISUZUX1IyLCBlbmFibGUgPyAwIDogQVVESU9fUEFDS0VUX09GRiwKKwkJ ICAgICAgQVVESU9fUEFDS0VUX09GRik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfY29uZmlnX3N5 cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5 c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIEhETUlf T1VUX0ZJRk9fRU4gfCBNSExfTU9ERV9PTiwgMCk7CisJbWRlbGF5KDIpOworCXJlZ21hcF91cGRh dGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZH MjAsCisJCQkgICBIRE1JX09VVF9GSUZPX0VOIHwgTUhMX01PREVfT04sIEhETUlfT1VUX0ZJRk9f RU4pOworfQorCit2b2lkIG10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoc3RydWN0IG10 a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBo ZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBERUVQX0NPTE9SX01PREVf TUFTSyB8IERFRVBfQ09MT1JfRU4sIENPTE9SXzhCSVRfTU9ERSk7Cit9CisKK3ZvaWQgbXRrX2hk bWlfaHdfc2VuZF9hdl9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwltdGtfaGRtaV9t YXNrKGhkbWksIEdSTF9DRkc0LCAwLCBDVFJMX0FWTVVURSk7CisJbWRlbGF5KDIpOworCW10a19o ZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIENUUkxfQVZNVVRFLCBDVFJMX0FWTVVURSk7Cit9CisK K3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl91bm11dGUoc3RydWN0IG10a19oZG1pICpoZG1pKQor eworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIENGRzRfQVZfVU5NVVRFX0VOLAorCQkg ICAgICBDRkc0X0FWX1VOTVVURV9FTiB8IENGRzRfQVZfVU5NVVRFX1NFVCk7CisJbWRlbGF5KDIp OworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzQsIENGRzRfQVZfVU5NVVRFX1NFVCwKKwkJ ICAgICAgQ0ZHNF9BVl9VTk1VVEVfRU4gfCBDRkc0X0FWX1VOTVVURV9TRVQpOworfQorCit2b2lk IG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbikK K3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgb24gPyAwIDogQ1RTX0NUUkxf U09GVCwKKwkJICAgICAgQ1RTX0NUUkxfU09GVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfbmN0 c19hdXRvX3dyaXRlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQor eworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NUU19DVFJMLCBlbmFibGUgPyBOQ1RTX1dSSV9B TllUSU1FIDogMCwKKwkJICAgICAgTkNUU19XUklfQU5ZVElNRSk7Cit9CisKK3ZvaWQgbXRrX2hk bWlfaHdfbXNpY19zZXR0aW5nKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCSAgICAgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NG RzQsIDAsIENGR19NSExfTU9ERSk7CisKKwlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X0lOVEVSTEFDRSAmJgorCSAgICBtb2RlLT5jbG9jayA9PSA3NDI1MCAmJgorCSAgICBtb2RlLT52 ZGlzcGxheSA9PSAxMDgwKQorCQltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DRkcyLCAwLCBNSExf REVfU0VMKTsKKwllbHNlCisJCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIE1ITF9ERV9T RUwsIE1ITF9ERV9TRUwpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9z d2FwKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5u ZWxfc3dhcF90eXBlIHN3YXApCit7CisJdTggc3dhcF9iaXQ7CisKKwlzd2l0Y2ggKHN3YXApIHsK KwljYXNlIEhETUlfQVVEX1NXQVBfTFI6CisJCXN3YXBfYml0ID0gTFJfU1dBUDsKKwkJYnJlYWs7 CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xGRV9DQzoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dBUDsK KwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xTUlM6CisJCXN3YXBfYml0ID0gTFNSU19T V0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NXQVBfUkxTX1JSUzoKKwkJc3dhcF9iaXQg PSBSTFNfUlJTX1NXQVA7CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURfU1dBUF9MUl9TVEFUVVM6 CisJCXN3YXBfYml0ID0gTFJfU1RBVFVTX1NXQVA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN3 YXBfYml0ID0gTEZFX0NDX1NXQVA7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV9tYXNrKGhkbWks IEdSTF9DSF9TV0FQLCBzd2FwX2JpdCwgMHhmZik7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVk X3Jhd19kYXRhX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQorewor CW10a19oZG1pX21hc2soaGRtaSwgR1JMX01JWF9DVFJMLCBlbmFibGUgPyBNSVhfQ1RSTF9GTEFU IDogMCwKKwkJICAgICAgTUlYX0NUUkxfRkxBVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVk X3NldF9iaXRfbnVtKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgZW51bSBoZG1pX2F1ZGlv X3NhbXBsZV9zaXplIGJpdF9udW0pCit7CisJdTMyIHZhbCA9IDA7CisKKwlpZiAoYml0X251bSA9 PSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzE2KQorCQl2YWwgPSBBT1VUXzE2QklUOworCWVsc2Ug aWYgKGJpdF9udW0gPT0gSERNSV9BVURJT19TQU1QTEVfU0laRV8yMCkKKwkJdmFsID0gQU9VVF8y MEJJVDsKKwllbHNlIGlmIChiaXRfbnVtID09IEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQpCisJ CXZhbCA9IEFPVVRfMjRCSVQ7CisKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9BT1VUX0JOVU1f U0VMLCB2YWwsIDB4MDMpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2ZtdChz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJIGVudW0gaGRtaV9hdWRfaTJzX2ZtdCBpMnNfZm10 KQoreworCXUzMiB2YWwgPSAwOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZH MCk7CisJdmFsICY9IH4weDMzOworCisJc3dpdGNoIChpMnNfZm10KSB7CisJY2FzZSBIRE1JX0ky U19NT0RFX1JKVF8yNEJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX1JUSiB8IENGRzBfSTJT X01PREVfMjRCSVQpOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfUkpUXzE2QklUOgor CQl2YWwgfD0gKENGRzBfSTJTX01PREVfUlRKIHwgQ0ZHMF9JMlNfTU9ERV8xNkJJVCk7CisJCWJy ZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNf TU9ERV9MVEogfCBDRkcwX0kyU19NT0RFXzI0QklUKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0ky U19NT0RFX0xKVF8xNkJJVDoKKwkJdmFsIHw9IChDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfSTJT X01PREVfMTZCSVQpOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfSTJTXzI0QklUOgor CQl2YWwgfD0gKENGRzBfSTJTX01PREVfSTJTIHwgQ0ZHMF9JMlNfTU9ERV8yNEJJVCk7CisJCWJy ZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMTZCSVQ6CisJCXZhbCB8PSAoQ0ZHMF9JMlNf TU9ERV9JMlMgfCBDRkcwX0kyU19NT0RFXzE2QklUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ YnJlYWs7CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkcwLCB2YWwpOworfQorCit2 b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSwgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9CTlVNX1NF TCwKKwkJICAgICAgZW5hYmxlID8gSElHSF9CSVRfUkFURV9QQUNLRVRfQUxJR04gOiAwLAorCQkg ICAgICBISUdIX0JJVF9SQVRFX1BBQ0tFVF9BTElHTik7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBH UkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBISUdIX0JJVF9SQVRFIDogMCwKKwkJICAgICAgSElHSF9C SVRfUkFURSk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfcGh5X2F1ZF9kc3Rfbm9ybWFsX2RvdWJsZV9l bmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkgICAgICAgYm9vbCBlbmFibGUpCit7 CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBlbmFibGUgPyBEU1RfTk9STUFM X0RPVUJMRSA6IDAsCisJCSAgICAgIERTVF9OT1JNQUxfRE9VQkxFKTsKK30KKwordm9pZCBtdGtf aGRtaV9od19hdWRfZHN0X2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxl KQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElPX0NGRywgZW5hYmxlID8gU0FDRF9E U1QgOiAwLCBTQUNEX0RTVCk7Cit9CisKK3ZvaWQgbXRrX2hkbWlfaHdfYXVkX2RzZF9lbmFibGUo c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9tYXNrKGhk bWksIEdSTF9BVURJT19DRkcsIGVuYWJsZSA/IFNBQ0RfU0VMIDogMCwgU0FDRF9TRUwpOworfQor Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaTJzX2NoYW5fbnVtKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUs CisJCQkJICAgICAgdTggY2hhbm5lbF9jb3VudCkKK3sKKwl1OCB2YWxfMSwgdmFsXzIsIHZhbF8z LCB2YWxfNDsKKworCWlmIChjaGFubmVsX2NvdW50ID09IDIpIHsKKwkJdmFsXzEgPSAweDA0Owor CQl2YWxfMiA9IDB4NTA7CisJfSBlbHNlIGlmIChjaGFubmVsX2NvdW50ID09IDMgfHwgY2hhbm5l bF9jb3VudCA9PSA0KSB7CisJCWlmIChjaGFubmVsX2NvdW50ID09IDQgJiYKKwkJICAgIChjaGFu bmVsX3R5cGUgPT0gSERNSV9BVURfQ0hBTl9UWVBFXzNfMF9MUlMgfHwKKwkJICAgIGNoYW5uZWxf dHlwZSA9PSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wKSkgeworCQkJdmFsXzEgPSAweDE0OworCQl9 IGVsc2UgeworCQkJdmFsXzEgPSAweDBjOworCQl9CisJCXZhbF8yID0gMHg1MDsKKwl9IGVsc2Ug aWYgKGNoYW5uZWxfY291bnQgPT0gNiB8fCBjaGFubmVsX2NvdW50ID09IDUpIHsKKwkJaWYgKGNo YW5uZWxfY291bnQgPT0gNiAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IEhETUlfQVVEX0NIQU5f VFlQRV81XzEgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8x X0NMUlMpIHsKKwkJCXZhbF8xID0gMHgzYzsKKwkJCXZhbF8yID0gMHg1MDsKKwkJfSBlbHNlIHsK KwkJCXZhbF8xID0gMHgxYzsKKwkJCXZhbF8yID0gMHg1MDsKKwkJfQorCX0gZWxzZSBpZiAoY2hh bm5lbF9jb3VudCA9PSA4IHx8IGNoYW5uZWxfY291bnQgPT0gNykgeworCQl2YWxfMSA9IDB4M2M7 CisJCXZhbF8yID0gMHg1MDsKKwl9IGVsc2UgeworCQl2YWxfMSA9IDB4MDQ7CisJCXZhbF8yID0g MHg1MDsKKwl9CisKKwl2YWxfMyA9IDB4YzY7CisJdmFsXzQgPSAweGZhOworCisJbXRrX2hkbWlf d3JpdGUoaGRtaSwgR1JMX0NIX1NXMCwgdmFsXzIpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS TF9DSF9TVzEsIHZhbF8zKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0hfU1cyLCB2YWxf NCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19VViwgdmFsXzEpOworfQorCit2b2lk IG10a19oZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJ CQkJICAgIGVudW0gaGRtaV9hdWRfaW5wdXRfdHlwZSBpbnB1dF90eXBlKQoreworCXUzMiB2YWwg PSAwOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfQ0ZHMSk7CisJaWYgKGlucHV0 X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfSTJTICYmCisJICAgICh2YWwgJiBDRkcxX1NQRElGKSA9 PSBDRkcxX1NQRElGKSB7CisJCXZhbCAmPSB+Q0ZHMV9TUERJRjsKKwl9IGVsc2UgaWYgKGlucHV0 X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYgJiYKKwkJKHZhbCAmIENGRzFfU1BESUYpID09 IDApIHsKKwkJdmFsIHw9IENGRzFfU1BESUY7CisJfQorCW10a19oZG1pX3dyaXRlKGhkbWksIEdS TF9DRkcxLCB2YWwpOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0 dXMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJf Y2hhbl9zdGF0dXMsCisJCQkJCWVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5CisJCQkJ CWF1ZF9oZG1pX2ZzKQoreworCXU4IGxfc3RhdHVzWzVdOworCXU4IHJfc3RhdHVzWzVdOworCXU4 IHZhbCA9IDA7CisKKwlsX3N0YXR1c1swXSA9IGxfY2hhbl9zdGF0dXNbMF07CisJbF9zdGF0dXNb MV0gPSBsX2NoYW5fc3RhdHVzWzFdOworCWxfc3RhdHVzWzJdID0gbF9jaGFuX3N0YXR1c1syXTsK KwlyX3N0YXR1c1swXSA9IHJfY2hhbl9zdGF0dXNbMF07CisJcl9zdGF0dXNbMV0gPSByX2NoYW5f c3RhdHVzWzFdOworCXJfc3RhdHVzWzJdID0gcl9jaGFuX3N0YXR1c1syXTsKKworCWxfc3RhdHVz WzBdICY9IH4weDAyOworCXJfc3RhdHVzWzBdICY9IH4weDAyOworCisJdmFsID0gbF9jaGFuX3N0 YXR1c1szXSAmIDB4ZjA7CisJc3dpdGNoIChhdWRfaGRtaV9mcykgeworCWNhc2UgSERNSV9BVURJ T19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOgorCQl2YWwgfD0gMHgwMzsKKwkJYnJlYWs7CisJY2Fz ZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA6CisJCWJyZWFrOworCWNhc2UgSERN SV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzg4MjAwOgorCQl2YWwgfD0gMHgwODsKKwkJYnJlYWs7 CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCXZhbCB8PSAweDBh OworCQlicmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJ dmFsIHw9IDB4MDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSAweDAyOworCQlicmVh azsKKwl9CisJbF9zdGF0dXNbM10gPSB2YWw7CisJcl9zdGF0dXNbM10gPSB2YWw7CisKKwl2YWwg PSBsX2NoYW5fc3RhdHVzWzRdOworCXZhbCB8PSAoKH4obF9zdGF0dXNbM10gJiAweDBmKSkgPDwg NCk7CisJbF9zdGF0dXNbNF0gPSB2YWw7CisJcl9zdGF0dXNbNF0gPSB2YWw7CisKKwl2YWwgPSBs X3N0YXR1c1swXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJTX0NfU1RBMCwgdmFsKTsK KwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMCwgdmFsKTsKKworCXZhbCA9IHJf c3RhdHVzWzBdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18wLCB2YWwpOwor CisJdmFsID0gbF9zdGF0dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NU QTEsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzEsIHZhbCk7CisK Kwl2YWwgPSByX3N0YXR1c1sxXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNf MSwgdmFsKTsKKworCXZhbCA9IGxfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS TF9JMlNfQ19TVEEyLCB2YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18y LCB2YWwpOworCisJdmFsID0gcl9zdGF0dXNbMl07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM X1JfU1RBVFVTXzIsIHZhbCk7CisKKwl2YWwgPSBsX3N0YXR1c1szXTsKKwltdGtfaGRtaV93cml0 ZShoZG1pLCBHUkxfSTJTX0NfU1RBMywgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf TF9TVEFUVVNfMywgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzNdOworCW10a19oZG1pX3dyaXRl KGhkbWksIEdSTF9SX1NUQVRVU18zLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbNF07CisJbXRr X2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTQsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUo aGRtaSwgR1JMX0xfU1RBVFVTXzQsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1s0XTsKKwltdGtf aGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfNCwgdmFsKTsKKworCWZvciAodmFsID0gMDsg dmFsIDwgMTk7IHZhbCsrKSB7CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU181 ICsgdmFsICogNCwgMCk7CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU181ICsg dmFsICogNCwgMCk7CisJfQorfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfcmVlbmFibGUo c3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBtdGtfaGRtaV9y ZWFkKGhkbWksIEdSTF9NSVhfQ1RSTCk7CisJaWYgKHZhbCAmIE1JWF9DVFJMX1NSQ19FTikgewor CQl2YWwgJj0gfk1JWF9DVFJMX1NSQ19FTjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01J WF9DVFJMLCB2YWwpOworCQl1c2xlZXBfcmFuZ2UoMjU1LCA1MTIpOworCQl2YWwgfD0gTUlYX0NU UkxfU1JDX0VOOworCQltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTUlYX0NUUkwsIHZhbCk7CisJ fQorfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zcmNfb2ZmKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfTUlYX0NU UkwpOworCXZhbCAmPSB+TUlYX0NUUkxfU1JDX0VOOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdS TF9NSVhfQ1RSTCwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfU0hJRlRfTDEsIDB4 MDApOworfQorCit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIGVudW0gaGRtaV9hdWRfbWNsayBtY2xrKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSBt dGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkc1KTsKKwl2YWwgJj0gQ0ZHNV9DRF9SQVRJT19NQVNL OworCisJc3dpdGNoIChtY2xrKSB7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzEyOEZTOgorCQl2YWwg fD0gQ0ZHNV9GUzEyODsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzI1NkZTOgorCQl2 YWwgfD0gQ0ZHNV9GUzI1NjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzM4NEZTOgor CQl2YWwgfD0gQ0ZHNV9GUzM4NDsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzUxMkZT OgorCQl2YWwgfD0gQ0ZHNV9GUzUxMjsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRF9NQ0xLXzc2 OEZTOgorCQl2YWwgfD0gQ0ZHNV9GUzc2ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsIHw9 IENGRzVfRlMyNTY7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZH NSwgdmFsKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfYWNsa19pbnZfZW5hYmxlKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IG10 a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzIpOworCWlmIChlbmFibGUpCisJCXZhbCB8PSAweDgw OworCWVsc2UKKwkJdmFsICY9IH4weDgwOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9DRkcy LCB2YWwpOworfQorCitzdHJ1Y3QgaGRtaV9hY3JfbiB7CisJdW5zaWduZWQgaW50IGNsb2NrOwor CXVuc2lnbmVkIGludCBuWzNdOworfTsKKworLyogUmVjb21tZW5kZWQgTiB2YWx1ZXMgZnJvbSBI RE1JIHNwZWNpZmljYXRpb24sIHRhYmxlcyA3LTEgdG8gNy0zICovCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGhkbWlfYWNyX24gaGRtaV9yZWNfbl90YWJsZVtdID0geworCS8qIENsb2NrLCBOOiAzMmtI eiA0NC4xa0h6IDQ4a0h6ICovCisJeyAgMjUxNzUsIHsgIDQ1NzYsICA3MDA3LCAgNjg2NCB9IH0s CisJeyAgNzQxNzYsIHsgMTE2NDgsIDE3ODM2LCAxMTY0OCB9IH0sCisJeyAxNDgzNTIsIHsgMTE2 NDgsICA4OTE4LCAgNTgyNCB9IH0sCisJeyAyOTY3MDMsIHsgIDU4MjQsICA0NDU5LCAgNTgyNCB9 IH0sCisJeyAyOTcwMDAsIHsgIDMwNzIsICA0NzA0LCAgNTEyMCB9IH0sCisJeyAgICAgIDAsIHsg IDQwOTYsICA2MjcyLCAgNjE0NCB9IH0sIC8qIGFsbCBvdGhlciBUTURTIGNsb2NrcyAqLworfTsK KworLyoqCisgKiBoZG1pX3JlY29tbWVuZGVkX24oKSAtIFJldHVybiBOIHZhbHVlIHJlY29tbWVu ZGVkIGJ5IEhETUkgc3BlY2lmaWNhdGlvbgorICogQGZyZXE6IGF1ZGlvIHNhbXBsZSByYXRlIGlu IEh6CisgKiBAY2xvY2s6IHJvdW5kZWQgVE1EUyBjbG9jayBpbiBrSHoKKyAqLworc3RhdGljIHVu c2lnbmVkIGludCBoZG1pX3JlY29tbWVuZGVkX24odW5zaWduZWQgaW50IGZyZXEsIHVuc2lnbmVk IGludCBjbG9jaykKK3sKKwljb25zdCBzdHJ1Y3QgaGRtaV9hY3JfbiAqcmVjb21tZW5kZWQ7CisJ dW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoZG1pX3JlY19u X3RhYmxlKSAtIDE7IGkrKykgeworCQlpZiAoY2xvY2sgPT0gaGRtaV9yZWNfbl90YWJsZVtpXS5j bG9jaykKKwkJCWJyZWFrOworCX0KKwlyZWNvbW1lbmRlZCA9IGhkbWlfcmVjX25fdGFibGUgKyBp OworCisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAzMjAwMDoKKwkJcmV0dXJuIHJlY29tbWVuZGVk LT5uWzBdOworCWNhc2UgNDQxMDA6CisJCXJldHVybiByZWNvbW1lbmRlZC0+blsxXTsKKwljYXNl IDQ4MDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl07CisJY2FzZSA4ODIwMDoKKwkJcmV0 dXJuIHJlY29tbWVuZGVkLT5uWzFdICogMjsKKwljYXNlIDk2MDAwOgorCQlyZXR1cm4gcmVjb21t ZW5kZWQtPm5bMl0gKiAyOworCWNhc2UgMTc2NDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5b MV0gKiA0OworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl0gKiA0Owor CWRlZmF1bHQ6CisJCXJldHVybiAoMTI4ICogZnJlcSkgLyAxMDAwOworCX0KK30KKworc3RhdGlj IHVuc2lnbmVkIGludCBoZG1pX21vZGVfY2xvY2tfdG9faHoodW5zaWduZWQgaW50IGNsb2NrKQor eworCXN3aXRjaCAoY2xvY2spIHsKKwljYXNlIDI1MTc1OgorCQlyZXR1cm4gMjUxNzQ4MjU7CS8q IDI1LjIvMS4wMDEgTUh6ICovCisJY2FzZSA3NDE3NjoKKwkJcmV0dXJuIDc0MTc1ODI0OwkvKiA3 NC4yNS8xLjAwMSBNSHogKi8KKwljYXNlIDE0ODM1MjoKKwkJcmV0dXJuIDE0ODM1MTY0ODsJLyog MTQ4LjUvMS4wMDEgTUh6ICovCisJY2FzZSAyOTY3MDM6CisJCXJldHVybiAyOTY3MDMyOTc7CS8q IDI5Ny8xLjAwMSBNSHogKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gY2xvY2sgKiAxMDAwOworCX0K K30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX2V4cGVjdGVkX2N0cyh1bnNpZ25lZCBpbnQg YXVkaW9fc2FtcGxlX3JhdGUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHRtZHNfY2xvY2ssIHVu c2lnbmVkIGludCBuKQoreworCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVF9VTEwoKHU2NCloZG1p X21vZGVfY2xvY2tfdG9faHoodG1kc19jbG9jaykgKiBuLAorCQkJCSAgICAgMTI4ICogYXVkaW9f c2FtcGxlX3JhdGUpOworfQorCitzdGF0aWMgdm9pZCBkb19oZG1pX2h3X2F1ZF9zZXRfbmN0cyhz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBuLAorCQkJCSAgICB1bnNpZ25lZCBp bnQgY3RzKQoreworCXVuc2lnbmVkIGNoYXIgdmFsW05DVFNfQllURVNdOworCWludCBpOworCisJ bXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOworCW10a19oZG1pX3dyaXRlKGhkbWks IEdSTF9OQ1RTLCAwKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywgMCk7CisJbWVt c2V0KHZhbCwgMCwgc2l6ZW9mKHZhbCkpOworCisJdmFsWzBdID0gKGN0cyA+PiAyNCkgJiAweGZm OworCXZhbFsxXSA9IChjdHMgPj4gMTYpICYgMHhmZjsKKwl2YWxbMl0gPSAoY3RzID4+IDgpICYg MHhmZjsKKwl2YWxbM10gPSBjdHMgJiAweGZmOworCisJdmFsWzRdID0gKG4gPj4gMTYpICYgMHhm ZjsKKwl2YWxbNV0gPSAobiA+PiA4KSAmIDB4ZmY7CisJdmFsWzZdID0gbiAmIDB4ZmY7CisKKwlm b3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQltdGtfaGRtaV93cml0ZShoZG1pLCBH UkxfTkNUUywgdmFsW2ldKTsKK30KKwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X25jdHMoc3Ry dWN0IG10a19oZG1pICpoZG1pLCB1bnNpZ25lZCBpbnQgc2FtcGxlX3JhdGUsCisJCQkgICAgICB1 bnNpZ25lZCBpbnQgY2xvY2spCit7CisJdW5zaWduZWQgaW50IG4sIGN0czsKKworCW4gPSBoZG1p X3JlY29tbWVuZGVkX24oc2FtcGxlX3JhdGUsIGNsb2NrKTsKKwljdHMgPSBoZG1pX2V4cGVjdGVk X2N0cyhzYW1wbGVfcmF0ZSwgY2xvY2ssIG4pOworCisJZGV2X2RiZyhoZG1pLT5kZXYsICIlczog c2FtcGxlX3JhdGU9JXUsIGNsb2NrPSVkLCBjdHM9JXUsIG49JXVcbiIsCisJCV9fZnVuY19fLCBz YW1wbGVfcmF0ZSwgY2xvY2ssIG4sIGN0cyk7CisKKwltdGtfaGRtaV9tYXNrKGhkbWksIERVTU1Z XzMwNCwgQVVESU9fSTJTX05DVFNfU0VMXzY0LAorCQkgICAgICBBVURJT19JMlNfTkNUU19TRUwp OworCWRvX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWksIG4sIGN0cyk7Cit9CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfaHcuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfaGRtaV9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjkwMTMyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2hkbWlfaHcuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0 IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+ CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisj aWZuZGVmIF9NVEtfSERNSV9IV19ICisjZGVmaW5lIF9NVEtfSERNSV9IV19ICisKKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KKyNpbmNsdWRlICJtdGtf aGRtaS5oIgorCit2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksIGJvb2wgYmxhY2spOwordm9pZCBtdGtfaGRtaV9od19hdWRfbXV0ZShzdHJ1Y3QgbXRrX2hk bWkgKmhkbWksIGJvb2wgbXV0ZSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfaW5mb19mcmFtZShz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHU4ICpidWZmZXIsIHU4IGxlbik7Cit2b2lkIG10a19oZG1p X2h3X3NlbmRfYXVkX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsK K2ludCBtdGtfaGRtaV9od19zZXRfY2xvY2soc3RydWN0IG10a19oZG1pICpoY3R4LCB1MzIgY2xv Y2spOwordm9pZCBtdGtfaGRtaV9od19jb25maWdfc3lzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7 Cit2b2lkIG10a19oZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoc3RydWN0IG10a19oZG1pICpo ZG1pKTsKK3ZvaWQgbXRrX2hkbWlfaHdfc2VuZF9hdl9tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSk7Cit2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfdW5tdXRlKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg Ym9vbCBvbik7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zd2FwKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwKKwkJCQkgICAgICBlbnVtIGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBl IHN3YXApOwordm9pZCBtdGtfaGRtaV9od19hdWRfcmF3X2RhdGFfZW5hYmxlKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2JpdF9u dW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCSBlbnVtIGhkbWlfYXVkaW9fc2FtcGxlX3Np emUgYml0X251bSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfaGlnaF9iaXRyYXRlKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9waHlfYXVkX2Rz dF9ub3JtYWxfZG91YmxlX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAgICAg ICBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9kc3RfZW5hYmxlKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtfaGRtaV9od19hdWRfZHNkX2Vu YWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRrX2hkbWlf aHdfYXVkX3NldF9pMnNfZm10KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgZW51bSBoZG1p X2F1ZF9pMnNfZm10IGkyc19mbXQpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2kyc19jaGFu X251bShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJICAgICAgZW51bSBoZG1pX2F1ZF9jaGFu bmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgICAgIHU4IGNoYW5uZWxfY291bnQpOwordm9p ZCBtdGtfaGRtaV9od19hdWRfc2V0X2lucHV0X3R5cGUoc3RydWN0IG10a19oZG1pICpoZG1pLAor CQkJCSAgICBlbnVtIGhkbWlfYXVkX2lucHV0X3R5cGUgaW5wdXRfdHlwZSk7Cit2b2lkIG10a19o ZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJ CQl1OCAqbF9jaGFuX3N0YXR1cywgdTggKnJfY2hhbl9zdGF1cywKKwkJCQkJZW51bSBoZG1pX2F1 ZGlvX3NhbXBsZV9mcmVxdWVuY3kKKwkJCQkJYXVkX2hkbWlfZnMpOwordm9pZCBtdGtfaGRtaV9o d19hdWRfc3JjX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3Zv aWQgbXRrX2hkbWlfaHdfYXVkX3NldF9tY2xrKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgZW51bSBo ZG1pX2F1ZF9tY2xrIG1jbGspOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX29mZihzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X2F1ZF9hY2xrX2ludl9lbmFibGUo c3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X2F1 ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBzYW1wbGVfcmF0 ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbG9jayk7Citib29sIG10a19oZG1pX2h3X2lzX2hw ZF9oaWdoKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSk7Cit2b2lkIG10a19oZG1pX2h3X21ha2VfcmVn X3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpOwordm9pZCBtdGtf aGRtaV9od19yZXNldChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBtdGtfaGRtaV9od19l bmFibGVfbm90aWNlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGVfbm90aWNlKTsK K3ZvaWQgbXRrX2hkbWlfaHdfd3JpdGVfaW50X21hc2soc3RydWN0IG10a19oZG1pICpoZG1pLCB1 MzIgaW50X21hc2spOwordm9pZCBtdGtfaGRtaV9od19lbmFibGVfZHZpX21vZGUoc3RydWN0IG10 a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10a19oZG1pX2h3X25jdHNfYXV0b193 cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSk7Cit2b2lkIG10 a19oZG1pX2h3X21zaWNfc2V0dGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkgICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7Cit2b2lkIG10a19oZG1pX2h3XzFwNF92ZXJz aW9uX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKTsKK3ZvaWQgbXRr X2hkbWlfaHdfaHRwbGdfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9pZCBt dGtfaGRtaV9od19odHBsZ19pcnFfZGlzYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpOwordm9p ZCBtdGtfaGRtaV9od19jbGVhcl9odHBsZ19pcnEoc3RydWN0IG10a19oZG1pICpoZG1pKTsKKwor I2VuZGlmIC8qIF9NVEtfSERNSV9IV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19o ZG1pX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzFkMzE4Ci0t LSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3Mu aApAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJ bmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTVRL X0hETUlfUkVHU19ICisjZGVmaW5lIF9NVEtfSERNSV9SRUdTX0gKKworI2RlZmluZSBHUkxfSU5U X01BU0sJCTB4MTgKKyNkZWZpbmUgR1JMX0lGTV9QT1JUCQkweDE4OAorI2RlZmluZSBHUkxfQ0hf U1dBUAkJMHgxOTgKKyNkZWZpbmUgTFJfU1dBUAkJCQlCSVQoMCkKKyNkZWZpbmUgTEZFX0NDX1NX QVAJCQlCSVQoMSkKKyNkZWZpbmUgTFNSU19TV0FQCQkJQklUKDIpCisjZGVmaW5lIFJMU19SUlNf U1dBUAkJCUJJVCgzKQorI2RlZmluZSBMUl9TVEFUVVNfU1dBUAkJCUJJVCg0KQorI2RlZmluZSBH UkxfSTJTX0NfU1RBMAkJMHgxNDAKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTEJCTB4MTQ0CisjZGVm aW5lIEdSTF9JMlNfQ19TVEEyCQkweDE0OAorI2RlZmluZSBHUkxfSTJTX0NfU1RBMwkJMHgxNEMK KyNkZWZpbmUgR1JMX0kyU19DX1NUQTQJCTB4MTUwCisjZGVmaW5lIEdSTF9JMlNfVVYJCTB4MTU0 CisjZGVmaW5lIEdSTF9BQ1BfSVNSQ19DVFJMCTB4MTU4CisjZGVmaW5lIFZTX0VOCQkJCUJJVCgw KQorI2RlZmluZSBBQ1BfRU4JCQkJQklUKDEpCisjZGVmaW5lIElTUkMxX0VOCQkJQklUKDIpCisj ZGVmaW5lIElTUkMyX0VOCQkJQklUKDMpCisjZGVmaW5lIEdBTVVUX0VOCQkJQklUKDQpCisjZGVm aW5lIEdSTF9DVFNfQ1RSTAkJMHgxNjAKKyNkZWZpbmUgQ1RTX0NUUkxfU09GVAkJCUJJVCgwKQor I2RlZmluZSBHUkxfSU5UCQkJMHgxNAorI2RlZmluZSBJTlRfTURJCQkJCUJJVCgwKQorI2RlZmlu ZSBJTlRfSERDUAkJCUJJVCgxKQorI2RlZmluZSBJTlRfRklGT19PCQkJQklUKDIpCisjZGVmaW5l IElOVF9GSUZPX1UJCQlCSVQoMykKKyNkZWZpbmUgSU5UX0lGTV9FUlIJCQlCSVQoNCkKKyNkZWZp bmUgSU5UX0lORl9ET05FCQkJQklUKDUpCisjZGVmaW5lIElOVF9OQ1RTX0RPTkUJCQlCSVQoNikK KyNkZWZpbmUgSU5UX0NUUkxfUEtUX0RPTkUJCUJJVCg3KQorI2RlZmluZSBHUkxfSU5UX01BU0sJ CTB4MTgKKyNkZWZpbmUgR1JMX0NUUkwJCTB4MUMKKyNkZWZpbmUgQ1RSTF9HRU5fRU4JCQlCSVQo MikKKyNkZWZpbmUgQ1RSTF9TUERfRU4JCQlCSVQoMykKKyNkZWZpbmUgQ1RSTF9NUEVHX0VOCQkJ QklUKDQpCisjZGVmaW5lIENUUkxfQVVESU9fRU4JCQlCSVQoNSkKKyNkZWZpbmUgQ1RSTF9BVklf RU4JCQlCSVQoNikKKyNkZWZpbmUgQ1RSTF9BVk1VVEUJCQlCSVQoNykKKyNkZWZpbmUJR1JMX1NU QVRVUwkJMHgyMAorI2RlZmluZSBTVEFUVVNfSFRQTEcJCQlCSVQoMCkKKyNkZWZpbmUgU1RBVFVT X1BPUkQJCQlCSVQoMSkKKyNkZWZpbmUgR1JMX0RJVk4JCTB4MTcwCisjZGVmaW5lIE5DVFNfV1JJ X0FOWVRJTUUJCUJJVCg2KQorI2RlZmluZSBHUkxfQVVESU9fQ0ZHCQkweDE3QworI2RlZmluZSBB VURJT19aRVJPCQkJQklUKDApCisjZGVmaW5lIEhJR0hfQklUX1JBVEUJCQlCSVQoMSkKKyNkZWZp bmUgU0FDRF9EU1QJCQlCSVQoMikKKyNkZWZpbmUgRFNUX05PUk1BTF9ET1VCTEUJCUJJVCgzKQor I2RlZmluZSBEU0RfSU5WCQkJCUJJVCg0KQorI2RlZmluZSBMUl9JTlYJCQkJQklUKDUpCisjZGVm aW5lIExSX01JWAkJCQlCSVQoNikKKyNkZWZpbmUgU0FDRF9TRUwJCQlCSVQoNykKKyNkZWZpbmUg R1JMX05DVFMJCTB4MTg0CisjZGVmaW5lIEdSTF9DSF9TVzAJCTB4MThDCisjZGVmaW5lIEdSTF9D SF9TVzEJCTB4MTkwCisjZGVmaW5lIEdSTF9DSF9TVzIJCTB4MTk0CisjZGVmaW5lIEdSTF9JTkZP RlJNX1ZFUgkJMHgxOUMKKyNkZWZpbmUgR1JMX0lORk9GUk1fVFlQRQkweDFBMAorI2RlZmluZSBH UkxfSU5GT0ZSTV9MTkcJCTB4MUE0CisjZGVmaW5lIEdSTF9NSVhfQ1RSTAkJMHgxQjQKKyNkZWZp bmUgTUlYX0NUUkxfU1JDX0VOCQkJQklUKDApCisjZGVmaW5lIEJZUEFTU19WT0xVTUUJCQlCSVQo MSkKKyNkZWZpbmUgTUlYX0NUUkxfRkxBVAkJCUJJVCg3KQorI2RlZmluZSBHUkxfQU9VVF9CTlVN X1NFTAkweDFDNAorI2RlZmluZSBBT1VUXzI0QklUCQkJMHgwMAorI2RlZmluZSBBT1VUXzIwQklU CQkJMHgwMgorI2RlZmluZSBBT1VUXzE2QklUCQkJMHgwMworI2RlZmluZSBISUdIX0JJVF9SQVRF X1BBQ0tFVF9BTElHTgkoMHgzIDw8IDYpCisjZGVmaW5lIEdSTF9TSElGVF9MMQkJMHgxQzAKKyNk ZWZpbmUgR1JMX1NISUZUX1IyCQkweDFCMAorI2RlZmluZSBBVURJT19QQUNLRVRfT0ZGCQlCSVQo NikKKyNkZWZpbmUgR1JMX0NGRzAJCTB4MjQKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9SVEoJCTB4 MQorI2RlZmluZSBDRkcwX0kyU19NT0RFX0xUSgkJMHgwCisjZGVmaW5lIENGRzBfSTJTX01PREVf STJTCQkweDIKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV8yNEJJVAkJMHgwMAorI2RlZmluZSBDRkcw X0kyU19NT0RFXzE2QklUCQkweDEwCisjZGVmaW5lIEdSTF9DRkcxCQkweDI4CisjZGVmaW5lIENG RzFfRURHX1NFTAkJCUJJVCgwKQorI2RlZmluZSBDRkcxX1NQRElGCQkJQklUKDEpCisjZGVmaW5l IENGRzFfRFZJCQkJQklUKDIpCisjZGVmaW5lIENGRzFfSERDUF9ERUJVRwkJCUJJVCgzKQorI2Rl ZmluZSBHUkxfQ0ZHMgkJMHgyYworI2RlZmluZSBDRkcyX05PVElDRV9FTgkJCUJJVCg2KQorI2Rl ZmluZSBNSExfREVfU0VMCQkJQklUKDMpCisjZGVmaW5lIEdSTF9DRkczCQkweDMwCisjZGVmaW5l IENGRzNfQUVTX0tFWV9JTkRFWF9NQVNLCQkweDNmCisjZGVmaW5lIENGRzNfQ09OVFJPTF9QQUNL RVRfREVMQVkJQklUKDYpCisjZGVmaW5lIENGRzNfS1NWX0xPQURfU1RBUlQJCUJJVCg3KQorI2Rl ZmluZSBHUkxfQ0ZHNAkJMHgzNAorI2RlZmluZSBDRkc0X0FFU19LRVlfTE9BRAkJQklUKDQpCisj ZGVmaW5lIENGRzRfQVZfVU5NVVRFX0VOCQlCSVQoNSkKKyNkZWZpbmUgQ0ZHNF9BVl9VTk1VVEVf U0VUCQlCSVQoNikKKyNkZWZpbmUgQ0ZHX01ITF9NT0RFCQkJQklUKDcpCisjZGVmaW5lIEdSTF9D Rkc1CQkweDM4CisjZGVmaW5lIENGRzVfQ0RfUkFUSU9fTUFTSwkweDhGCisjZGVmaW5lIENGRzVf RlMxMjgJCQkoMHgxIDw8IDQpCisjZGVmaW5lIENGRzVfRlMyNTYJCQkoMHgyIDw8IDQpCisjZGVm aW5lIENGRzVfRlMzODQJCQkoMHgzIDw8IDQpCisjZGVmaW5lIENGRzVfRlM1MTIJCQkoMHg0IDw8 IDQpCisjZGVmaW5lIENGRzVfRlM3NjgJCQkoMHg2IDw8IDQpCisjZGVmaW5lIERVTU1ZXzMwNAkJ MHgzMDQKKyNkZWZpbmUgQ0hNT19TRUwJCQkoMHgzIDw8IDIpCisjZGVmaW5lIENITTFfU0VMCQkJ KDB4MyA8PCA0KQorI2RlZmluZSBDSE0yX1NFTAkJCSgweDMgPDwgNikKKyNkZWZpbmUgQVVESU9f STJTX05DVFNfU0VMCQlCSVQoMSkKKyNkZWZpbmUgQVVESU9fSTJTX05DVFNfU0VMXzY0CQkoMSA8 PCAxKQorI2RlZmluZSBBVURJT19JMlNfTkNUU19TRUxfMTI4CQkoMCA8PCAxKQorI2RlZmluZSBO RVdfR0NQX0NUUkwJCQlCSVQoMCkKKyNkZWZpbmUgTkVXX0dDUF9DVFJMX01FUkdFCQlCSVQoMCkK KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzAJCTB4MjAwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xCQkw eDIwNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMgkJMHgyMDgKKyNkZWZpbmUgR1JMX0xfU1RBVFVT XzMJCTB4MjBjCisjZGVmaW5lIEdSTF9MX1NUQVRVU180CQkweDIxMAorI2RlZmluZSBHUkxfTF9T VEFUVVNfNQkJMHgyMTQKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzYJCTB4MjE4CisjZGVmaW5lIEdS TF9MX1NUQVRVU183CQkweDIxYworI2RlZmluZSBHUkxfTF9TVEFUVVNfOAkJMHgyMjAKKyNkZWZp bmUgR1JMX0xfU1RBVFVTXzkJCTB4MjI0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMAkJMHgyMjgK KyNkZWZpbmUgR1JMX0xfU1RBVFVTXzExCQkweDIyYworI2RlZmluZSBHUkxfTF9TVEFUVVNfMTIJ CTB4MjMwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xMwkJMHgyMzQKKyNkZWZpbmUgR1JMX0xfU1RB VFVTXzE0CQkweDIzOAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTUJCTB4MjNjCisjZGVmaW5lIEdS TF9MX1NUQVRVU18xNgkJMHgyNDAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE3CQkweDI0NAorI2Rl ZmluZSBHUkxfTF9TVEFUVVNfMTgJCTB4MjQ4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xOQkJMHgy NGMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIwCQkweDI1MAorI2RlZmluZSBHUkxfTF9TVEFUVVNf MjEJCTB4MjU0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMgkJMHgyNTgKKyNkZWZpbmUgR1JMX0xf U1RBVFVTXzIzCQkweDI1YworI2RlZmluZSBHUkxfUl9TVEFUVVNfMAkJMHgyNjAKKyNkZWZpbmUg R1JMX1JfU1RBVFVTXzEJCTB4MjY0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yCQkweDI2OAorI2Rl ZmluZSBHUkxfUl9TVEFUVVNfMwkJMHgyNmMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzQJCTB4Mjcw CisjZGVmaW5lIEdSTF9SX1NUQVRVU181CQkweDI3NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfNgkJ MHgyNzgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzcJCTB4MjdjCisjZGVmaW5lIEdSTF9SX1NUQVRV U184CQkweDI4MAorI2RlZmluZSBHUkxfUl9TVEFUVVNfOQkJMHgyODQKKyNkZWZpbmUgR1JMX1Jf U1RBVFVTXzEwCQkweDI4OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTEJCTB4MjhjCisjZGVmaW5l IEdSTF9SX1NUQVRVU18xMgkJMHgyOTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzEzCQkweDI5NAor I2RlZmluZSBHUkxfUl9TVEFUVVNfMTQJCTB4Mjk4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xNQkJ MHgyOWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE2CQkweDJhMAorI2RlZmluZSBHUkxfUl9TVEFU VVNfMTcJCTB4MmE0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xOAkJMHgyYTgKKyNkZWZpbmUgR1JM X1JfU1RBVFVTXzE5CQkweDJhYworI2RlZmluZSBHUkxfUl9TVEFUVVNfMjAJCTB4MmIwCisjZGVm aW5lIEdSTF9SX1NUQVRVU18yMQkJMHgyYjQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIyCQkweDJi OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMjMJCTB4MmJjCisjZGVmaW5lIEdSTF9BQklTVF9DVFJM MAkJMHgyRDQKKyNkZWZpbmUgR1JMX0FCSVNUX0NUUkwxCQkweDJEOAorI2RlZmluZSBBQklTVF9F TgkJCUJJVCg3KQorI2RlZmluZSBBQklTVF9EQVRBX0ZNVAkJCSgweDcgPDwgMCkKKyNkZWZpbmUg VklERU9fQ0ZHXzAJCTB4MzgwCisjZGVmaW5lIFZJREVPX0NGR18xCQkweDM4NAorI2RlZmluZSBW SURFT19DRkdfMgkJMHgzODgKKyNkZWZpbmUgVklERU9fQ0ZHXzMJCTB4MzhjCisjZGVmaW5lIFZJ REVPX0NGR180CQkweDM5MAorI2RlZmluZSBWSURFT19TT1VSQ0VfU0VMCQlCSVQoNykKKyNkZWZp bmUgTk9STUFMX1BBVEgJCQkoMSA8PCA3KQorI2RlZmluZSBHRU5fUkdCCQkJCSgwIDw8IDcpCisK KyNkZWZpbmUgSERNSV9TWVNfQ0ZHMUMJCTB4MDAwCisjZGVmaW5lIEhETUlfT04JCQkJQklUKDAp CisjZGVmaW5lIEhETUlfUlNUCQkJQklUKDEpCisjZGVmaW5lIEFOTEdfT04JCQkJQklUKDIpCisj ZGVmaW5lIENGRzEwX0RWSQkJCUJJVCgzKQorI2RlZmluZSBIRE1JX1RTVAkJCUJJVCgzKQorI2Rl ZmluZSBTWVNfS0VZTUFTSzEJCQkoMHhmZiA8PCA4KQorI2RlZmluZSBTWVNfS0VZTUFTSzIJCQko MHhmZiA8PCAxNikKKyNkZWZpbmUgQVVEX09VVFNZTkNfRU4JCQlCSVQoMjQpCisjZGVmaW5lIEFV RF9PVVRTWU5DX1BSRV9FTgkJQklUKDI1KQorI2RlZmluZSBJMkNNX09OCQkJCUJJVCgyNikKKyNk ZWZpbmUgRTJQUk9NX1RZUEVfOEJJVAkJQklUKDI3KQorI2RlZmluZSBNQ01fRTJQUk9NX09OCQkJ QklUKDI4KQorI2RlZmluZSBFWFRfRTJQUk9NX09OCQkJQklUKDI5KQorI2RlZmluZSBIVFBMR19Q SU5fU0VMX09GRgkJQklUKDMwKQorI2RlZmluZSBBRVNfRUZVU0VfRU5BQkxFCQlCSVQoMzEpCisj ZGVmaW5lIEhETUlfU1lTX0NGRzIwCQkweDAwNAorI2RlZmluZSBERUVQX0NPTE9SX01PREVfTUFT SwkJKDMgPDwgMSkKKyNkZWZpbmUgQ09MT1JfOEJJVF9NT0RFCQkJKDAgPDwgMSkKKyNkZWZpbmUg Q09MT1JfMTBCSVRfTU9ERQkJKDEgPDwgMSkKKyNkZWZpbmUgQ09MT1JfMTJCSVRfTU9ERQkJKDIg PDwgMSkKKyNkZWZpbmUgQ09MT1JfMTZCSVRfTU9ERQkJKDMgPDwgMSkKKyNkZWZpbmUgREVFUF9D T0xPUl9FTgkJCUJJVCgwKQorI2RlZmluZSBIRE1JX0FVRElPX1RFU1RfU0VMCQlCSVQoOCkKKyNk ZWZpbmUgSERNSTJQMF9FTgkJCUJJVCgxMSkKKyNkZWZpbmUgSERNSV9PVVRfRklGT19FTgkJQklU KDE2KQorI2RlZmluZSBIRE1JX09VVF9GSUZPX0NMS19JTlYJCUJJVCgxNykKKyNkZWZpbmUgTUhM X01PREVfT04JCQlCSVQoMjgpCisjZGVmaW5lIE1ITF9QUF9NT0RFCQkJQklUKDI5KQorI2RlZmlu ZSBNSExfU1lOQ19BVVRPX0VOCQlCSVQoMzApCisjZGVmaW5lIEhETUlfUENMS19GUkVFX1JVTgkJ QklUKDMxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfbXQ4MTczX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3 M19oZG1pX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOWYwN2YK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19o ZG1pX3BoeS5jCkBAIC0wLDAgKzEsNTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1l ZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Cisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNp bmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGstcHJvdmlkZXIuaD4KKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8 bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEhETUlfQ09OMAkJMHgwMAorI2RlZmlu ZSBSR19IRE1JVFhfUExMX0VOCQlCSVQoMzEpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfRkJLRElW CQkoMHg3ZiA8PCAyNCkKKyNkZWZpbmUgUExMX0ZCS0RJVl9TSElGVAkJMjQKKyNkZWZpbmUgUkdf SERNSVRYX1BMTF9GQktTRUwJCSgweDMgPDwgMjIpCisjZGVmaW5lIFBMTF9GQktTRUxfU0hJRlQJ CTIyCisjZGVmaW5lIFJHX0hETUlUWF9QTExfUFJFRElWCQkoMHgzIDw8IDIwKQorI2RlZmluZSBQ UkVESVZfU0hJRlQJCQkyMAorI2RlZmluZSBSR19IRE1JVFhfUExMX1BPU0RJVgkJKDB4MyA8PCAx OCkKKyNkZWZpbmUgUE9TRElWX1NISUZUCQkJMTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SU1Rf RExZCQkoMHgzIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX0lSCQkoMHhmIDw8IDEyKQor I2RlZmluZSBQTExfSVJfU0hJRlQJCQkxMgorI2RlZmluZSBSR19IRE1JVFhfUExMX0lDCQkoMHhm IDw8IDgpCisjZGVmaW5lIFBMTF9JQ19TSElGVAkJCTgKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9C UAkJKDB4ZiA8PCA0KQorI2RlZmluZSBQTExfQlBfU0hJRlQJCQk0CisjZGVmaW5lIFJHX0hETUlU WF9QTExfQlIJCSgweDMgPDwgMikKKyNkZWZpbmUgUExMX0JSX1NISUZUCQkJMgorI2RlZmluZSBS R19IRE1JVFhfUExMX0JDCQkoMHgzIDw8IDApCisjZGVmaW5lIFBMTF9CQ19TSElGVAkJCTAKKyNk ZWZpbmUgSERNSV9DT04xCQkweDA0CisjZGVmaW5lIFJHX0hETUlUWF9QTExfRElWRU4JCSgweDcg PDwgMjkpCisjZGVmaW5lIFBMTF9ESVZFTl9TSElGVAkJCTI5CisjZGVmaW5lIFJHX0hETUlUWF9Q TExfQVVUT0tfRU4JCUJJVCgyOCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LRgkJKDB4 MyA8PCAyNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19LUwkJKDB4MyA8PCAyNCkKKyNk ZWZpbmUgUkdfSERNSVRYX1BMTF9BVVRPS19MT0FECUJJVCgyMykKKyNkZWZpbmUgUkdfSERNSVRY X1BMTF9CQU5ECQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9SRUZfU0VMCQlC SVQoMTUpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQklBU19FTgkJQklUKDE0KQorI2RlZmluZSBS R19IRE1JVFhfUExMX0JJQVNfTFBGX0VOCUJJVCgxMykKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9U WERJVl9FTgkJQklUKDEyKQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RYRElWCQkoMHgzIDw8IDEw KQorI2RlZmluZSBQTExfVFhESVZfU0hJRlQJCQkxMAorI2RlZmluZSBSR19IRE1JVFhfUExMX0xW Uk9EX0VOCQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05WQ19FTgkJQklUKDgpCisj ZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OQ0tfRU4JCUJJVCg3KQorI2RlZmluZSBSR19IRE1JVFhf UExMX01PTlJFRl9FTgkJQklUKDYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFNUX0VOCQlCSVQo NSkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UU1RfQ0tfRU4JCUJJVCg0KQorI2RlZmluZSBSR19I RE1JVFhfUExMX1RTVF9TRUwJCSgweGYgPDwgMCkKKyNkZWZpbmUgSERNSV9DT04yCQkweDA4Cisj ZGVmaW5lIFJHU19IRE1JVFhfUExMX0FVVE9LX0JBTkQJKDB4N2YgPDwgOCkKKyNkZWZpbmUgUkdT X0hETUlUWF9QTExfQVVUT0tfRkFJTAlCSVQoMSkKKyNkZWZpbmUgUkdfSERNSVRYX0VOX1RYX0NL TERPCQlCSVQoMCkKKyNkZWZpbmUgSERNSV9DT04zCQkweDBjCisjZGVmaW5lIFJHX0hETUlUWF9T RVJfRU4JCSgweGYgPDwgMjgpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfRU4JCSgweGYgPDwgMjQp CisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSU1QX0VOCQkoMHhmIDw8IDIwKQorI2RlZmluZSBSR19I RE1JVFhfRFJWX0VOCQkoMHhmIDw8IDE2KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9FTgkJ KDB4ZiA8PCAxMikKKyNkZWZpbmUgRFJWX0lNUF9FTl9TSElGVAkJMTIKKyNkZWZpbmUgUkdfSERN SVRYX01ITENLX0ZPUkNFCQlCSVQoMTApCisjZGVmaW5lIFJHX0hETUlUWF9NSExDS19QUElYX0VO CQlCSVQoOSkKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0VOCQlCSVQoOCkKKyNkZWZpbmUgUkdf SERNSVRYX1NFUl9ESU5fU0VMCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfNVQx X0JJU1RfRU4JQklUKDMpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJfQklTVF9UT0cJCUJJVCgyKQor I2RlZmluZSBSR19IRE1JVFhfU0VSX0RJTl9UT0cJCUJJVCgxKQorI2RlZmluZSBSR19IRE1JVFhf U0VSX0NMS0RJR19JTlYJQklUKDApCisjZGVmaW5lIEhETUlfQ09ONAkJMHgxMAorI2RlZmluZSBS R19IRE1JVFhfUFJEX0lCSUFTX0NMSwkJKDB4ZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BS RF9JQklBU19EMgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMQkJ KDB4ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0lCSUFTX0QwCQkoMHhmIDw8IDApCisj ZGVmaW5lIFBSRF9JQklBU19DTEtfU0hJRlQJCTI0CisjZGVmaW5lIFBSRF9JQklBU19EMl9TSElG VAkJMTYKKyNkZWZpbmUgUFJEX0lCSUFTX0QxX1NISUZUCQk4CisjZGVmaW5lIFBSRF9JQklBU19E MF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjUJCTB4MTQKKyNkZWZpbmUgUkdfSERNSVRYX0RS Vl9JQklBU19DTEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lCSUFTX0Qy CQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMQkJKDB4M2YgPDwg OCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUg RFJWX0lCSUFTX0NMS19TSElGVAkJMjQKKyNkZWZpbmUgRFJWX0lCSUFTX0QyX1NISUZUCQkxNgor I2RlZmluZSBEUlZfSUJJQVNfRDFfU0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lCSUFTX0QwX1NISUZU CQkwCisjZGVmaW5lIEhETUlfQ09ONgkJMHgxOAorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9D TEsJCSgweDNmIDw8IDI0KQorI2RlZmluZSBSR19IRE1JVFhfRFJWX0lNUF9EMgkJKDB4M2YgPDwg MTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX0QxCQkoMHgzZiA8PCA4KQorI2RlZmluZSBS R19IRE1JVFhfRFJWX0lNUF9EMAkJKDB4M2YgPDwgMCkKKyNkZWZpbmUgRFJWX0lNUF9DTEtfU0hJ RlQJCTI0CisjZGVmaW5lIERSVl9JTVBfRDJfU0hJRlQJCTE2CisjZGVmaW5lIERSVl9JTVBfRDFf U0hJRlQJCTgKKyNkZWZpbmUgRFJWX0lNUF9EMF9TSElGVAkJMAorI2RlZmluZSBIRE1JX0NPTjcJ CTB4MWMKKyNkZWZpbmUgUkdfSERNSVRYX01ITENLX0RSVl9JQklBUwkoMHgxZiA8PCAyNykKKyNk ZWZpbmUgUkdfSERNSVRYX1NFUl9ESU4JCSgweDNmZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRY X0NITERDX1RTVAkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdfSERNSVRYX0NITENLX1RTVAkJKDB4 ZiA8PCA4KQorI2RlZmluZSBSR19IRE1JVFhfUkVTRVJWRQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUg SERNSV9DT044CQkweDIwCisjZGVmaW5lIFJHU19IRE1JVFhfMlQxX0xFVgkJKDB4ZiA8PCAxNikK KyNkZWZpbmUgUkdTX0hETUlUWF8yVDFfRURHCQkoMHhmIDw8IDEyKQorI2RlZmluZSBSR1NfSERN SVRYXzVUMV9MRVYJCSgweGYgPDwgOCkKKyNkZWZpbmUgUkdTX0hETUlUWF81VDFfRURHCQkoMHhm IDw8IDQpCisjZGVmaW5lIFJHU19IRE1JVFhfUExVR19UU1QJCUJJVCgwKQorCitzdHJ1Y3QgbXRr X2hkbWlfcGh5IHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0IGRldmljZSAqZGV2Owor CXN0cnVjdCBjbGsgKnBsbDsKKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKKwl1bnNpZ25lZCBsb25n IHBsbF9yYXRlOworCXU4IGRydl9pbXBfY2xrOworCXU4IGRydl9pbXBfZDI7CisJdTggZHJ2X2lt cF9kMTsKKwl1OCBkcnZfaW1wX2QwOworCXUzMiBpYmlhczsKKwl1MzIgaWJpYXNfdXA7Cit9Owor CitzdGF0aWMgY29uc3QgdTggUFJFRElWWzNdWzRdID0geworCXsweDAsIDB4MCwgMHgwLCAweDB9 LAkvKiAyN01oeiAqLworCXsweDEsIDB4MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEs IDB4MSwgMHgxLCAweDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IFRYRElW WzNdWzRdID0geworCXsweDMsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4 MSwgMHgxLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MCwgMHgwLCAweDB9CS8qIDE0OE1o eiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEZCS1NFTFszXVs0XSA9IHsKKwl7MHgxLCAweDEs IDB4MSwgMHgxfSwJLyogMjdNaHogKi8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfSwJLyogNzRNaHog Ki8KKwl7MHgxLCAweDAsIDB4MSwgMHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z dCB1OCBGQktESVZbM11bNF0gPSB7CisJezE5LCAyNCwgMjksIDE5fSwJLyogMjdNaHogKi8KKwl7 MTksIDI0LCAxNCwgMTl9LAkvKiA3NE1oeiAqLworCXsxOSwgMjQsIDE0LCAxOX0JLyogMTQ4TWh6 ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRElWRU5bM11bNF0gPSB7CisJezB4MiwgMHgxLCAw eDEsIDB4Mn0sCS8qIDI3TWh6ICovCisJezB4MiwgMHgyLCAweDIsIDB4Mn0sCS8qIDc0TWh6ICov CisJezB4MiwgMHgyLCAweDIsIDB4Mn0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3Qg dTggSFRQTExCUFszXVs0XSA9IHsKKwl7MHhjLCAweGMsIDB4OCwgMHhjfSwJLyogMjdNaHogKi8K Kwl7MHhjLCAweGYsIDB4ZiwgMHhjfSwJLyogNzRNaHogKi8KKwl7MHhjLCAweGYsIDB4ZiwgMHhj fQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBIVFBMTEJDWzNdWzRdID0gewor CXsweDIsIDB4MywgMHgzLCAweDJ9LAkvKiAyN01oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9 LAkvKiA3NE1oeiAqLworCXsweDIsIDB4MywgMHgzLCAweDJ9CS8qIDE0OE1oeiAqLworfTsKKwor c3RhdGljIGNvbnN0IHU4IEhUUExMQlJbM11bNF0gPSB7CisJezB4MSwgMHgxLCAweDAsIDB4MX0s CS8qIDI3TWh6ICovCisJezB4MSwgMHgyLCAweDIsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwg MHgyLCAweDIsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9w aHlfbWFzayhzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJCSAg ICAgIHUzMiB2YWwsIHUzMiBtYXNrKQoreworCXUzMiB0bXAgPSByZWFkbChoZG1pX3BoeS0+cmVn cyAgKyBvZmZzZXQpICYgfm1hc2s7CisKKwl0bXAgfD0gKHZhbCAmIG1hc2spOworCXdyaXRlbCh0 bXAsIGhkbWlfcGh5LT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qg bXRrX2hkbWlfcGh5ICp0b19tdGtfaGRtaV9waHkoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0 dXJuIGNvbnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKK30KKwor c3RhdGljIGludCBtdGtfaGRtaV9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlz dHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwlk ZXZfZGJnKGhkbWlfcGh5LT5kZXYsICJwcmVwYXJlXG4iKTsKKworCW10a19oZG1pX3BoeV9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQVVUT0tfRU4sCisJCQkgIFJHX0hE TUlUWF9QTExfQVVUT0tfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NP TjAsIFJHX0hETUlUWF9QTExfUE9TRElWLAorCQkJICBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJ bXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX01ITENL X0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhf UExMX0JJQVNfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQklBU19FTik7CisJdXNsZWVwX3Jhbmdl KDEwMCwgMTUwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19I RE1JVFhfUExMX0VOLAorCQkJICBSR19IRE1JVFhfUExMX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAw LCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlU WF9QTExfQklBU19MUEZfRU4sCisJCQkgIFJHX0hETUlUWF9QTExfQklBU19MUEZfRU4pOworCW10 a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfVFhESVZf RU4sCisJCQkgIFJHX0hETUlUWF9QTExfVFhESVZfRU4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19oZG1pX3BsbF91bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpCit7CisJ c3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOworCisJ ZGV2X2RiZyhoZG1pX3BoeS0+ZGV2LCAicHJlcGFyZVxuIik7CisKKwltdGtfaGRtaV9waHlfbWFz ayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX1RYRElWX0VOKTsKKwltdGtf aGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04xLCAwLCBSR19IRE1JVFhfUExMX0JJQVNf TFBGX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9tYXNrKGhk bWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9QTExfRU4pOworCXVzbGVlcF9yYW5nZSgx MDAsIDE1MCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgMCwgUkdf SERNSVRYX1BMTF9CSUFTX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9D T04wLCAwLCBSR19IRE1JVFhfUExMX1BPU0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w aHksIEhETUlfQ09OMSwgMCwgUkdfSERNSVRYX1BMTF9BVVRPS19FTik7CisJdXNsZWVwX3Jhbmdl KDEwMCwgMTUwKTsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9wbGxfc2V0X3JhdGUoc3RydWN0 IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBwYXJl bnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1p X3BoeShodyk7CisJdW5zaWduZWQgaW50IHByZV9kaXY7CisJdW5zaWduZWQgaW50IGRpdjsKKwor CWRldl9kYmcoaGRtaV9waHktPmRldiwgInNldCByYXRlIDogJWx1LCBwYXJlbnQ6ICVsdVxuIiwg cmF0ZSwKKwkJcGFyZW50X3JhdGUpOworCisJaWYgKHJhdGUgPD0gMjcwMDAwMDApIHsKKwkJcHJl X2RpdiA9IDA7CisJCWRpdiA9IDM7CisJfSBlbHNlIGlmIChyYXRlIDw9IDc0MjUwMDAwKSB7CisJ CXByZV9kaXYgPSAxOworCQlkaXYgPSAyOworCX0gZWxzZSB7CisJCXByZV9kaXYgPSAxOworCQlk aXYgPSAxOworCX0KKworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJ CQkgIChwcmVfZGl2IDw8IFBSRURJVl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfUFJFRElW KTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExM X1BPU0RJViwKKwkJCSAgUkdfSERNSVRYX1BMTF9QT1NESVYpOworCW10a19oZG1pX3BoeV9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkgICgweDEgPDwgUExMX0lDX1NISUZUKSB8ICgweDEg PDwgUExMX0lSX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9JQyB8IFJHX0hETUlUWF9QTExf SVIpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsCisJCQkgIChkaXYg PDwgUExMX1RYRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9UWERJVik7CisJbXRrX2hk bWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09OMCwKKwkJCSAgKDB4MSA8PCBQTExfRkJLU0VM X1NISUZUKSB8ICgxOSA8PCBQTExfRkJLRElWX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX1BMTF9G QktTRUwgfCBSR19IRE1JVFhfUExMX0ZCS0RJVik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w aHksIEhETUlfQ09OMSwKKwkJCSAgKDB4MiA8PCBQTExfRElWRU5fU0hJRlQpLAorCQkJICBSR19I RE1JVFhfUExMX0RJVkVOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04w LAorCQkJICAoMHhjIDw8IFBMTF9CUF9TSElGVCkgfCAoMHgyIDw8IFBMTF9CQ19TSElGVCkgfAor CQkJICAoMHgxIDw8IFBMTF9CUl9TSElGVCksCisJCQkgIFJHX0hETUlUWF9QTExfQlAgfCBSR19I RE1JVFhfUExMX0JDIHwKKwkJCSAgUkdfSERNSVRYX1BMTF9CUik7CisJbXRrX2hkbWlfcGh5X21h c2soaGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1BSRF9JTVBfRU4pOworCW10a19o ZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjQsCisJCQkgICgweDMgPDwgUFJEX0lCSUFT X0NMS19TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMl9TSElGVCkgfAorCQkJICAo MHgzIDw8IFBSRF9JQklBU19EMV9TSElGVCkgfAorCQkJICAoMHgzIDw8IFBSRF9JQklBU19EMF9T SElGVCksCisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfQ0xLIHwKKwkJCSAgUkdfSERNSVRYX1BS RF9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDEgfAorCQkJICBSR19IRE1J VFhfUFJEX0lCSUFTX0QwKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04z LAorCQkJICAoMHgwIDw8IERSVl9JTVBfRU5fU0hJRlQpLAorCQkJICBSR19IRE1JVFhfRFJWX0lN UF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09ONiwKKwkJCSAgKGhk bWlfcGh5LT5kcnZfaW1wX2NsayA8PCBEUlZfSU1QX0NMS19TSElGVCkgfAorCQkJICAoaGRtaV9w aHktPmRydl9pbXBfZDIgPDwgRFJWX0lNUF9EMl9TSElGVCkgfAorCQkJICAoaGRtaV9waHktPmRy dl9pbXBfZDEgPDwgRFJWX0lNUF9EMV9TSElGVCkgfAorCQkJICAoaGRtaV9waHktPmRydl9pbXBf ZDAgPDwgRFJWX0lNUF9EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9EUlZfSU1QX0NMSyB8IFJH X0hETUlUWF9EUlZfSU1QX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RSVl9JTVBfRDEgfCBSR19IRE1J VFhfRFJWX0lNUF9EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhETUlfQ09ONSwK KwkJCSAgKGhkbWlfcGh5LT5pYmlhcyA8PCBEUlZfSUJJQVNfQ0xLX1NISUZUKSB8CisJCQkgICho ZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0QyX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+ aWJpYXMgPDwgRFJWX0lCSUFTX0QxX1NISUZUKSB8CisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwg RFJWX0lCSUFTX0QwX1NISUZUKSwKKwkJCSAgUkdfSERNSVRYX0RSVl9JQklBU19DTEsgfCBSR19I RE1JVFhfRFJWX0lCSUFTX0QyIHwKKwkJCSAgUkdfSERNSVRYX0RSVl9JQklBU19EMSB8IFJHX0hE TUlUWF9EUlZfSUJJQVNfRDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBtdGtfaGRt aV9wbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAor CQkJCSAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlf cGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwloZG1pX3BoeS0+cGxsX3Jh dGUgPSByYXRlOworCWlmIChyYXRlIDw9IDc0MjUwMDAwKQorCQkqcGFyZW50X3JhdGUgPSByYXRl OworCWVsc2UKKwkJKnBhcmVudF9yYXRlID0gcmF0ZSAvIDI7CisKKwlyZXR1cm4gcmF0ZTsKK30K Kworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBj bGtfaHcgKmh3LAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQoreworCXN0 cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGh5KGh3KTsKKworCXJl dHVybiBoZG1pX3BoeS0+cGxsX3JhdGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29w cyBtdGtfaGRtaV9wbGxfb3BzID0geworCS5wcmVwYXJlID0gbXRrX2hkbWlfcGxsX3ByZXBhcmUs CisJLnVucHJlcGFyZSA9IG10a19oZG1pX3BsbF91bnByZXBhcmUsCisJLnNldF9yYXRlID0gbXRr X2hkbWlfcGxsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlID0gbXRrX2hkbWlfcGxsX3JvdW5kX3Jh dGUsCisJLnJlY2FsY19yYXRlID0gbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlLAorfTsKKworc3Rh dGljIHZvaWQgbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhk bWlfcGh5KQoreworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hE TUlUWF9TRVJfRU4sCisJCQkgIFJHX0hETUlUWF9TRVJfRU4pOworCW10a19oZG1pX3BoeV9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hETUlUWF9QUkRfRU4sCisJCQkgIFJHX0hETUlUWF9Q UkRfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hETUlU WF9EUlZfRU4sCisJCQkgIFJHX0hETUlUWF9EUlZfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1 MCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoc3RydWN0IG10 a19oZG1pX3BoeSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9waHksIEhE TUlfQ09OMywgMCwgUkdfSERNSVRYX0RSVl9FTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w aHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1BSRF9FTik7CisJbXRrX2hkbWlfcGh5X21hc2so aGRtaV9waHksIEhETUlfQ09OMywgMCwgUkdfSERNSVRYX1NFUl9FTik7Cit9CisKK3N0YXRpYyBp bnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRr X2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCWludCByZXQ7CisK KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaV9waHktPnBsbCk7CisJaWYgKHJldCA8IDAp CisJCXJldHVybiByZXQ7CisKKwltdGtfaGRtaV9waHlfZW5hYmxlX3RtZHMoaGRtaV9waHkpOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihzdHJ1 Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0 X2RydmRhdGEocGh5KTsKKworCW10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoaGRtaV9waHkpOwor CWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pX3BoeS0+cGxsKTsKKworCXJldHVybiAwOworfQor CitzdGF0aWMgc3RydWN0IHBoeV9vcHMgbXRrX2hkbWlfcGh5X29wcyA9IHsKKwkucG93ZXJfb24g PSBtdGtfaGRtaV9waHlfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dl cl9vZmYsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1p X3BoeV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHk7CisJ c3RydWN0IHJlc291cmNlICptZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFy ICpyZWZfY2xrX25hbWU7CisJc3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5v cHMgPSAmbXRrX2hkbWlfcGxsX29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9u YW1lcyA9IChjb25zdCBjaGFyICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBD TEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NFVF9SQVRFX0dBVEUsCisJfTsKKwlzdHJ1Y3QgcGh5 ICpwaHk7CisJc3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisK KwloZG1pX3BoeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VS TkVMKTsKKwlpZiAoIWhkbWlfcGh5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRm b3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaV9waHktPnJl Z3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoaGRtaV9w aHktPnJlZ3MpKSB7CisJCXJldCA9IFBUUl9FUlIoaGRtaV9waHktPnJlZ3MpOworCQlkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBsbF9yZWYiKTsK KwlpZiAoSVNfRVJSKHJlZl9jbGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVmX2Nsayk7CisJCWRl dl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgUExMIHJlZmVyZW5jZSBjbG9jazogJWRc biIsCisJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19n ZXRfbmFtZShyZWZfY2xrKTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+ b2Zfbm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUp OworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2st b3V0cHV0LW5hbWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pX3Bo eS0+cGxsX2h3LmluaXQgPSAmY2xrX2luaXQ7CisJaGRtaV9waHktPnBsbCA9IGRldm1fY2xrX3Jl Z2lzdGVyKGRldiwgJmhkbWlfcGh5LT5wbGxfaHcpOworCWlmIChJU19FUlIoaGRtaV9waHktPnBs bCkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cGxsKTsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gcmVnaXN0ZXIgUExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlh cyIsCisJCQkJICAgJmhkbWlfcGh5LT5pYmlhcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJldCk7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAi bWVkaWF0ZWssaWJpYXNfdXAiLAorCQkJCSAgICZoZG1pX3BoeS0+aWJpYXNfdXApOworCWlmIChy ZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgaWJpYXMgdXA6 ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKGRldiwgIlVzaW5n IGRlZmF1bHQgVFggRFJWIGltcGVkYW5jZTogNC4yay8zNlxuIik7CisJaGRtaV9waHktPmRydl9p bXBfY2xrID0gMHgzMDsKKwloZG1pX3BoeS0+ZHJ2X2ltcF9kMiA9IDB4MzA7CisJaGRtaV9waHkt PmRydl9pbXBfZDEgPSAweDMwOworCWhkbWlfcGh5LT5kcnZfaW1wX2QwID0gMHgzMDsKKworCXBo eSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsICZtdGtfaGRtaV9waHlfb3BzKTsKKwlpZiAo SVNfRVJSKHBoeSkpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIEhETUkgUEhZ XG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGh5KTsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwg aGRtaV9waHkpOworCisJcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0 ZXIoZGV2LCBvZl9waHlfc2ltcGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeV9wcm92aWRlcikp CisJCXJldHVybiBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisKKwloZG1pX3BoeS0+ZGV2ID0gZGV2 OworCXJldHVybiBvZl9jbGtfYWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3NyY19z aW1wbGVfZ2V0LAorCQkJCSAgIGhkbWlfcGh5LT5wbGwpOworfQorCitzdGF0aWMgaW50IG10a19o ZG1pX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfcGh5X21h dGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLCB9 LAorCXt9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVy ID0geworCS5wcm9iZSA9IG10a19oZG1pX3BoeV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlf cGh5X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLXBoeSIs CisJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKKwl9LAorfTsKKworTU9E VUxFX0FVVEhPUigiSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVT Q1JJUFRJT04oIk1lZGlhVGVrIE1UODE3MyBIRE1JIFBIWSBEcml2ZXIiKTsKK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsKLS0gCjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK