From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philipp Zabel Subject: [PATCH v14 2/6] drm/mediatek: Add HDMI support Date: Mon, 11 Apr 2016 17:10:12 +0200 Message-ID: <1460387416-31254-3-git-send-email-p.zabel@pengutronix.de> References: <1460387416-31254-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: <1460387416-31254-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: devicetree@vger.kernel.org RnJvbTogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+CgpUaGlzIHBhdGNoIGFkZHMgZHJp dmVycyBmb3IgdGhlIEhETUkgYnJpZGdlIGNvbm5lY3RlZCB0byB0aGUgRFBJMApkaXNwbGF5IHN1 YnN5c3RlbSBmdW5jdGlvbiBibG9jaywgZm9yIHRoZSBIRE1JIEREQyBibG9jaywgYW5kIGZvcgp0 aGUgSERNSSBQSFkgdG8gc3VwcG9ydCBIRE1JIG91dHB1dC4KClNpZ25lZC1vZmYtYnk6IEppZSBR aXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgpTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwIFphYmVsIDxw LnphYmVsQHBlbmd1dHJvbml4LmRlPgotLS0KQ2hhbmdlcyBzaW5jZSB2MTM6CiAtIERvbid0IGRp c2FibGUgb3V0cHV0IGluIHN1c3BlbmQvcmVzdW1lCiAtIENvbWJpbmUgaGRtaSBicmlkZ2UgZHJp dmVyIGludG8gbXRrX2hkbWkuYwogLSBSZW1vdmUgbXRrX2NlY19pcnEKIC0gQWRkIFBIWSBzZXQv Y2xlYXJfYml0IHJlZ2lzdGVyIGFjY2VzcyBmdW5jdGlvbnMKIC0gUmVuYW1lIGhkbWlfaTJjIHRv IGhkbWlfZGRjIGZvciBjb25zaXN0ZW5jeQogLSBUcmFjayBicmlkZ2UgZW5hYmxlIHN0YXRlCiAt IFZhcmlvdXMgY2xlYW51cCBhbmQgZml4ZXMKLS0tCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv S2NvbmZpZyAgICAgICAgICAgICAgIHwgICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv TWFrZWZpbGUgICAgICAgICAgICAgIHwgICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsv bXRrX2NlYy5jICAgICAgICAgICAgIHwgIDI2NSArKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2NlYy5oICAgICAgICAgICAgIHwgICAyNiArCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2hkbWkuYyAgICAgICAgICAgIHwgMTc1MCArKysrKysrKysrKysrKysrKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oICAgICAgICAgICAgfCAgIDIzICsK IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYyAgICAgICAgfCAgMzU4ICsr KysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oICAgICAgIHwgIDIz NyArKysrCiBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jIHwg IDUxNSArKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDMxODggaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfY2VjLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9kZGMuYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3Bo eS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwppbmRleCAwYzQ5YTk0Li5lMmZmMTU4IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZworKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvS2NvbmZpZwpAQCAtMTIsMyArMTIsMTAgQEAgY29uZmlnIERSTV9NRURJ QVRFSwogCSAgVGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtZWRpYXRlay1kcm0KIAkgIFRoaXMg ZHJpdmVyIHByb3ZpZGVzIGtlcm5lbCBtb2RlIHNldHRpbmcgYW5kCiAJICBidWZmZXIgbWFuYWdl bWVudCB0byB1c2Vyc3BhY2UuCisKK2NvbmZpZyBEUk1fTUVESUFURUtfSERNSQorCXRyaXN0YXRl ICJEUk0gSERNSSBTdXBwb3J0IGZvciBNZWRpYXRlayBTb0NzIgorCWRlcGVuZHMgb24gRFJNX01F RElBVEVLCisJc2VsZWN0IEdFTkVSSUNfUEhZCisJaGVscAorCSAgRFJNL0tNUyBIRE1JIGRyaXZl ciBmb3IgTWVkaWF0ZWsgU29DcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlCmluZGV4IDVmY2Y1 OGUuLmJmMmU1YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmls ZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUKQEAgLTEyLDMgKzEyLDEw IEBAIG1lZGlhdGVrLWRybS15IDo9IG10a19kaXNwX292bC5vIFwKIAkJICBtdGtfZHBpLm8KIAog b2JqLSQoQ09ORklHX0RSTV9NRURJQVRFSykgKz0gbWVkaWF0ZWstZHJtLm8KKworbWVkaWF0ZWst ZHJtLWhkbWktb2JqcyA6PSBtdGtfY2VjLm8gXAorCQkJICBtdGtfaGRtaS5vIFwKKwkJCSAgbXRr X2hkbWlfZGRjLm8gXAorCQkJICBtdGtfbXQ4MTczX2hkbWlfcGh5Lm8KKworb2JqLSQoQ09ORklH X0RSTV9NRURJQVRFS19IRE1JKSArPSBtZWRpYXRlay1kcm0taGRtaS5vCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlh dGVrL210a19jZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTNlYjhj Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19jZWMuYwpA QCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4K KyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KKworI2luY2x1ZGUgIm10a19jZWMuaCIKKworI2RlZmluZSBUUl9DT05GSUcJCTB4 MDAKKyNkZWZpbmUgQ0xFQVJfQ0VDX0lSUQkJCUJJVCgxNSkKKworI2RlZmluZSBDRUNfQ0tHRU4J CTB4MDQKKyNkZWZpbmUgQ0VDXzMyS19QRE4JCQlCSVQoMTkpCisjZGVmaW5lIFBETgkJCQlCSVQo MTYpCisKKyNkZWZpbmUgUlhfRVZFTlQJCTB4NTQKKyNkZWZpbmUgSERNSV9QT1JECQkJQklUKDI1 KQorI2RlZmluZSBIRE1JX0hUUExHCQkJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UX0VO CQlCSVQoOSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfRU4JCUJJVCg4KQorCisjZGVmaW5lIFJY X0dFTl9XRAkJMHg1OAorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19TVEFUVVMJQklUKDI2KQor I2RlZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBVFVTCQlCSVQoMjUpCisjZGVmaW5lIEhETUlfSFRQ TEdfSU5UXzMyS19TVEFUVVMJQklUKDI0KQorI2RlZmluZSBIRE1JX1BPUkRfSU5UXzMyS19DTFIJ CUJJVCgxOCkKKyNkZWZpbmUgUlhfSU5UXzMyS19DTFIJCQlCSVQoMTcpCisjZGVmaW5lIEhETUlf SFRQTEdfSU5UXzMyS19DTFIJCUJJVCgxNikKKyNkZWZpbmUgSERNSV9QT1JEX0lOVF8zMktfU1RB X01BU0sJQklUKDEwKQorI2RlZmluZSBSWF9SSVNDX0lOVF8zMktfU1RBX01BU0sJQklUKDkpCisj ZGVmaW5lIEhETUlfSFRQTEdfSU5UXzMyS19TVEFfTUFTSwlCSVQoOCkKKyNkZWZpbmUgSERNSV9Q T1JEX0lOVF8zMktfRU4JCUJJVCgyKQorI2RlZmluZSBSWF9JTlRfMzJLX0VOCQkJQklUKDEpCisj ZGVmaW5lIEhETUlfSFRQTEdfSU5UXzMyS19FTgkJQklUKDApCisKKyNkZWZpbmUgTk9STUFMX0lO VF9DVFJMCQkweDVDCisjZGVmaW5lIEhETUlfSFRQTEdfSU5UX1NUQQkJQklUKDApCisjZGVmaW5l IEhETUlfUE9SRF9JTlRfU1RBCQlCSVQoMSkKKyNkZWZpbmUgSERNSV9IVFBMR19JTlRfQ0xSCQlC SVQoMTYpCisjZGVmaW5lIEhETUlfUE9SRF9JTlRfQ0xSCQlCSVQoMTcpCisjZGVmaW5lIEhETUlf RlVMTF9JTlRfQ0xSCQlCSVQoMjApCisKK3N0cnVjdCBtdGtfY2VjIHsKKwl2b2lkIF9faW9tZW0g KnJlZ3M7CisJc3RydWN0IGNsayAqY2xrOworCWludCBpcnE7CisJYm9vbCBocGQ7CisJdm9pZCAo KmhwZF9ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldik7CisJc3RydWN0IGRldmlj ZSAqaGRtaV9kZXY7CisJc3BpbmxvY2tfdCBsb2NrOworfTsKKworc3RhdGljIHZvaWQgbXRrX2Nl Y19jbGVhcl9iaXRzKHN0cnVjdCBtdGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJ CQkgICAgICAgdW5zaWduZWQgaW50IGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjZWMt PnJlZ3MgKyBvZmZzZXQ7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wICY9 IH5iaXRzOworCXdyaXRlbCh0bXAsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfc2V0 X2JpdHMoc3RydWN0IG10a19jZWMgKmNlYywgdW5zaWduZWQgaW50IG9mZnNldCwKKwkJCSAgICAg dW5zaWduZWQgaW50IGJpdHMpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjZWMtPnJlZ3MgKyBv ZmZzZXQ7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wIHw9IGJpdHM7CisJ d3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19tYXNrKHN0cnVjdCBt dGtfY2VjICpjZWMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkgdW5zaWduZWQgaW50IHZhbCwg dW5zaWduZWQgaW50IG1hc2spCit7CisJdTMyIHRtcCA9IHJlYWRsKGNlYy0+cmVncyArIG9mZnNl dCkgJiB+bWFzazsKKworCXRtcCB8PSB2YWwgJiBtYXNrOworCXdyaXRlbCh2YWwsIGNlYy0+cmVn cyArIG9mZnNldCk7Cit9CisKK3ZvaWQgbXRrX2NlY19zZXRfaHBkX2V2ZW50KHN0cnVjdCBkZXZp Y2UgKmRldiwKKwkJCSAgIHZvaWQgKCpocGRfZXZlbnQpKGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNl ICpkZXYpLAorCQkJICAgc3RydWN0IGRldmljZSAqaGRtaV9kZXYpCit7CisJc3RydWN0IG10a19j ZWMgKmNlYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmY2VjLT5sb2NrLCBmbGFncyk7CisJY2VjLT5oZG1pX2RldiA9 IGhkbWlfZGV2OworCWNlYy0+aHBkX2V2ZW50ID0gaHBkX2V2ZW50OworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmNlYy0+bG9jaywgZmxhZ3MpOworfQorCitib29sIG10a19jZWNfaHBkX2hpZ2go c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoY2Vj LT5yZWdzICsgUlhfRVZFTlQpOworCisJcmV0dXJuIChzdGF0dXMgJiAoSERNSV9QT1JEIHwgSERN SV9IVFBMRykpID09IChIRE1JX1BPUkQgfCBIRE1JX0hUUExHKTsKK30KKworc3RhdGljIHZvaWQg bXRrX2NlY19odHBsZ19pcnFfaW5pdChzdHJ1Y3QgbXRrX2NlYyAqY2VjKQoreworCW10a19jZWNf bWFzayhjZWMsIENFQ19DS0dFTiwgMCB8IENFQ18zMktfUEROLCBQRE4gfCBDRUNfMzJLX1BETik7 CisJbXRrX2NlY19zZXRfYml0cyhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lOVF8zMktfQ0xS IHwKKwkJCSBSWF9JTlRfMzJLX0NMUiB8IEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCW10a19j ZWNfbWFzayhjZWMsIFJYX0dFTl9XRCwgMCwgSERNSV9QT1JEX0lOVF8zMktfQ0xSIHwgUlhfSU5U XzMyS19DTFIgfAorCQkgICAgIEhETUlfSFRQTEdfSU5UXzMyS19DTFIgfCBIRE1JX1BPUkRfSU5U XzMyS19FTiB8CisJCSAgICAgUlhfSU5UXzMyS19FTiB8IEhETUlfSFRQTEdfSU5UXzMyS19FTik7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19jZWNfaHRwbGdfaXJxX2VuYWJsZShzdHJ1Y3QgbXRrX2Nl YyAqY2VjKQoreworCW10a19jZWNfc2V0X2JpdHMoY2VjLCBSWF9FVkVOVCwgSERNSV9QT1JEX0lO VF9FTiB8IEhETUlfSFRQTEdfSU5UX0VOKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2NlY19odHBs Z19pcnFfZGlzYWJsZShzdHJ1Y3QgbXRrX2NlYyAqY2VjKQoreworCW10a19jZWNfY2xlYXJfYml0 cyhjZWMsIFJYX0VWRU5ULCBIRE1JX1BPUkRfSU5UX0VOIHwgSERNSV9IVFBMR19JTlRfRU4pOwor fQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2NsZWFyX2h0cGxnX2lycShzdHJ1Y3QgbXRrX2NlYyAq Y2VjKQoreworCW10a19jZWNfc2V0X2JpdHMoY2VjLCBUUl9DT05GSUcsIENMRUFSX0NFQ19JUlEp OworCW10a19jZWNfc2V0X2JpdHMoY2VjLCBOT1JNQUxfSU5UX0NUUkwsIEhETUlfSFRQTEdfSU5U X0NMUiB8CisJCQkgSERNSV9QT1JEX0lOVF9DTFIgfCBIRE1JX0ZVTExfSU5UX0NMUik7CisJbXRr X2NlY19zZXRfYml0cyhjZWMsIFJYX0dFTl9XRCwgSERNSV9QT1JEX0lOVF8zMktfQ0xSIHwKKwkJ CSBSWF9JTlRfMzJLX0NMUiB8IEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOworCXVzbGVlcF9yYW5n ZSg1LCAxMCk7CisJbXRrX2NlY19jbGVhcl9iaXRzKGNlYywgTk9STUFMX0lOVF9DVFJMLCBIRE1J X0hUUExHX0lOVF9DTFIgfAorCQkJICAgSERNSV9QT1JEX0lOVF9DTFIgfCBIRE1JX0ZVTExfSU5U X0NMUik7CisJbXRrX2NlY19jbGVhcl9iaXRzKGNlYywgVFJfQ09ORklHLCBDTEVBUl9DRUNfSVJR KTsKKwltdGtfY2VjX2NsZWFyX2JpdHMoY2VjLCBSWF9HRU5fV0QsIEhETUlfUE9SRF9JTlRfMzJL X0NMUiB8CisJCQkgICBSWF9JTlRfMzJLX0NMUiB8IEhETUlfSFRQTEdfSU5UXzMyS19DTFIpOwor fQorCitzdGF0aWMgdm9pZCBtdGtfY2VjX2hwZF9ldmVudChzdHJ1Y3QgbXRrX2NlYyAqY2VjLCBi b29sIGhwZCkKK3sKKwl2b2lkICgqaHBkX2V2ZW50KShib29sIGhwZCwgc3RydWN0IGRldmljZSAq ZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpoZG1pX2RldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNlYy0+bG9jaywgZmxhZ3MpOworCWhwZF9ldmVudCA9IGNl Yy0+aHBkX2V2ZW50OworCWhkbWlfZGV2ID0gY2VjLT5oZG1pX2RldjsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjZWMtPmxvY2ssIGZsYWdzKTsKKworCWlmIChocGRfZXZlbnQpCisJCWhwZF9l dmVudChocGQsIGhkbWlfZGV2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IG10a19jZWNfaHRw bGdfaXNyX3RocmVhZChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gYXJnOworCXN0cnVjdCBtdGtfY2VjICpjZWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwli b29sIGhwZDsKKworCW10a19jZWNfY2xlYXJfaHRwbGdfaXJxKGNlYyk7CisJaHBkID0gbXRrX2Nl Y19ocGRfaGlnaChkZXYpOworCisJaWYgKGNlYy0+aHBkICE9IGhwZCkgeworCQlkZXZfZGJnKGRl diwgImhvdHBsdWcgZXZlbnQhIGN1ciBocGQgPSAlZCwgaHBkID0gJWRcbiIsCisJCQljZWMtPmhw ZCwgaHBkKTsKKwkJY2VjLT5ocGQgPSBocGQ7CisJCW10a19jZWNfaHBkX2V2ZW50KGNlYywgaHBk KTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG10a19jZWNfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfY2VjICpjZWM7CisJc3RydWN0IHJlc291cmNlICpy ZXM7CisJaW50IHJldDsKKworCWNlYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY2VjKSwg R0ZQX0tFUk5FTCk7CisJaWYgKCFjZWMpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgY2VjKTsKKwlzcGluX2xvY2tfaW5pdCgmY2VjLT5sb2NrKTsKKwor CXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJ Y2VjLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJS KGNlYy0+cmVncykpIHsKKwkJcmV0ID0gUFRSX0VSUihjZWMtPnJlZ3MpOworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBpb3JlbWFwIGNlYzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJY2VjLT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGNl Yy0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGNlYy0+Y2xrKTsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gZ2V0IGNlYyBjbG9jazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQor CisJY2VjLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChjZWMtPmlycSA8 IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGNlYyBpcnE6ICVkXG4iLCBjZWMt PmlycSk7CisJCXJldHVybiBjZWMtPmlycTsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhy ZWFkZWRfaXJxKGRldiwgY2VjLT5pcnEsIE5VTEwsCisJCQkJCW10a19jZWNfaHRwbGdfaXNyX3Ro cmVhZCwKKwkJCQkJSVJRRl9TSEFSRUQgfCBJUlFGX1RSSUdHRVJfTE9XIHwKKwkJCQkJSVJRRl9P TkVTSE9ULCAiaGRtaSBocGQiLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJG YWlsZWQgdG8gcmVnaXN0ZXIgY2VjIGlycTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGNlYy0+Y2xrKTsKKwlpZiAocmV0KSB7CisJ CWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBjZWMgY2xvY2s6ICVkXG4iLCByZXQpOwor CQlyZXR1cm4gcmV0OworCX0KKworCW10a19jZWNfaHRwbGdfaXJxX2luaXQoY2VjKTsKKwltdGtf Y2VjX2h0cGxnX2lycV9lbmFibGUoY2VjKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IG10a19jZWNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IG10a19jZWMgKmNlYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbXRrX2NlY19o dHBsZ19pcnFfZGlzYWJsZShjZWMpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShjZWMtPmNsayk7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19j ZWNfb2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtY2VjIiwg fSwKKwl7fQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfY2VjX2RyaXZlciA9IHsK KwkucHJvYmUgPSBtdGtfY2VjX3Byb2JlLAorCS5yZW1vdmUgPSBtdGtfY2VjX3JlbW92ZSwKKwku ZHJpdmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1jZWMiLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBtdGtfY2VjX29mX2lkcywKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9t ZWRpYXRlay9tdGtfY2VjLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMDU3YjcKLS0tIC9kZXYvbnVsbAor KysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2NlYy5oCkBAIC0wLDAgKzEsMjYgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUg UWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIg YXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX01US19DRUNfSAorI2RlZmluZSBfTVRL X0NFQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNlOworCit2 b2lkIG10a19jZWNfc2V0X2hwZF9ldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICB2b2lk ICgqaG90cGx1Z19ldmVudCkoYm9vbCBocGQsIHN0cnVjdCBkZXZpY2UgKmRldiksCisJCQkgICBz dHJ1Y3QgZGV2aWNlICpoZG1pX2Rldik7Citib29sIG10a19jZWNfaHBkX2hpZ2goc3RydWN0IGRl dmljZSAqZGV2KTsKKworI2VuZGlmIC8qIF9NVEtfQ0VDX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVr L210a19oZG1pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNkNGMwMQot LS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCkBA IC0wLDAgKzEsMTc1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJt L2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fZWRpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4 L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaGRtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5o PgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+ CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5j bHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CisjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+ CisjaW5jbHVkZSAibXRrX2NlYy5oIgorI2luY2x1ZGUgIm10a19oZG1pLmgiCisjaW5jbHVkZSAi bXRrX2hkbWlfcmVncy5oIgorCisjZGVmaW5lIE5DVFNfQllURVMJNworCitlbnVtIG10a19oZG1p X2Nsa19pZCB7CisJTVRLX0hETUlfQ0xLX0hETUlfUElYRUwsCisJTVRLX0hETUlfQ0xLX0hETUlf UExMLAorCU1US19IRE1JX0NMS19BVURfQkNMSywKKwlNVEtfSERNSV9DTEtfQVVEX1NQRElGLAor CU1US19IRE1JX0NMS19DT1VOVAorfTsKKworZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBlIHsKKwlI RE1JX0FVRF9JTlBVVF9JMlMgPSAwLAorCUhETUlfQVVEX0lOUFVUX1NQRElGLAorfTsKKworZW51 bSBoZG1pX2F1ZF9pMnNfZm10IHsKKwlIRE1JX0kyU19NT0RFX1JKVF8yNEJJVCA9IDAsCisJSERN SV9JMlNfTU9ERV9SSlRfMTZCSVQsCisJSERNSV9JMlNfTU9ERV9MSlRfMjRCSVQsCisJSERNSV9J MlNfTU9ERV9MSlRfMTZCSVQsCisJSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQsCisJSERNSV9JMlNf TU9ERV9JMlNfMTZCSVQKK307CisKK2VudW0gaGRtaV9hdWRfbWNsayB7CisJSERNSV9BVURfTUNM S18xMjhGUywKKwlIRE1JX0FVRF9NQ0xLXzE5MkZTLAorCUhETUlfQVVEX01DTEtfMjU2RlMsCisJ SERNSV9BVURfTUNMS18zODRGUywKKwlIRE1JX0FVRF9NQ0xLXzUxMkZTLAorCUhETUlfQVVEX01D TEtfNzY4RlMsCisJSERNSV9BVURfTUNMS18xMTUyRlMsCit9OworCitlbnVtIGhkbWlfYXVkX2ll Y19mcmFtZV9yYXRlIHsKKwlIRE1JX0lFQ18zMksgPSAwLAorCUhETUlfSUVDXzk2SywKKwlIRE1J X0lFQ18xOTJLLAorCUhETUlfSUVDXzc2OEssCisJSERNSV9JRUNfNDRLLAorCUhETUlfSUVDXzg4 SywKKwlIRE1JX0lFQ18xNzZLLAorCUhETUlfSUVDXzcwNUssCisJSERNSV9JRUNfMTZLLAorCUhE TUlfSUVDXzIySywKKwlIRE1JX0lFQ18yNEssCisJSERNSV9JRUNfNDhLLAorfTsKKworZW51bSBo ZG1pX2F1ZF9jaGFubmVsX3R5cGUgeworCUhETUlfQVVEX0NIQU5fVFlQRV8xXzAgPSAwLAorCUhE TUlfQVVEX0NIQU5fVFlQRV8xXzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzJfMCwKKwlIRE1JX0FV RF9DSEFOX1RZUEVfMl8xLAorCUhETUlfQVVEX0NIQU5fVFlQRV8zXzAsCisJSERNSV9BVURfQ0hB Tl9UWVBFXzNfMSwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNF8wLAorCUhETUlfQVVEX0NIQU5fVFlQ RV80XzEsCisJSERNSV9BVURfQ0hBTl9UWVBFXzVfMCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNV8x LAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzAsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMSwKKwlI RE1JX0FVRF9DSEFOX1RZUEVfN18wLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzEsCisJSERNSV9B VURfQ0hBTl9UWVBFXzNfMF9MUlMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzNfMV9MUlMsCisJSERN SV9BVURfQ0hBTl9UWVBFXzRfMF9DTFJTLAorCUhETUlfQVVEX0NIQU5fVFlQRV80XzFfQ0xSUywK KwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NTLAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0gs CisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX0NI UiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JILAorCUhETUlfQVVEX0NIQU5fVFlQRV83 XzFfTFNSX1JTUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xDX1JDLAorCUhETUlfQVVEX0NI QU5fVFlQRV83XzFfTFdfUlcsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MU0RfUlNELAorCUhE TUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTUywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xI U19SSFMsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSCwKKwlIRE1JX0FVRF9DSEFOX1RZ UEVfN18xX0NTX09ILAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSLAorCUhETUlfQVVE X0NIQU5fVFlQRV83XzFfQ0hfT0gsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DSF9DSFIsCisJ SERNSV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9M U1NfUlNTX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DUywKKwlIRE1JX0FVRF9D SEFOX1RZUEVfNl8wX0NILAorCUhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0gsCisJSERNSV9BVURf Q0hBTl9UWVBFXzZfMF9DSFIsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSCwKKwlIRE1J X0FVRF9DSEFOX1RZUEVfN18wX0xTUl9SU1IsCisJSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MQ19S QywKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXLAorCUhETUlfQVVEX0NIQU5fVFlQRV83 XzBfTFNEX1JTRCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xTU19SU1MsCisJSERNSV9BVURf Q0hBTl9UWVBFXzdfMF9MSFNfUkhTLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfQ0gsCisJ SERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19PSCwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NT X0NIUiwKKwlIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX09ILAorCUhETUlfQVVEX0NIQU5fVFlQ RV83XzBfQ0hfQ0hSLAorCUhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSLAorCUhETUlfQVVE X0NIQU5fVFlQRV83XzBfTFNTX1JTU19MU1JfUlNSLAorCUhETUlfQVVEX0NIQU5fVFlQRV84XzBf TEhfUkhfQ1MsCisJSERNSV9BVURfQ0hBTl9UWVBFX1VOS05PV04gPSAweEZGCit9OworCitlbnVt IGhkbWlfYXVkX2NoYW5uZWxfc3dhcF90eXBlIHsKKwlIRE1JX0FVRF9TV0FQX0xSLAorCUhETUlf QVVEX1NXQVBfTEZFX0NDLAorCUhETUlfQVVEX1NXQVBfTFNSUywKKwlIRE1JX0FVRF9TV0FQX1JM U19SUlMsCisJSERNSV9BVURfU1dBUF9MUl9TVEFUVVMsCit9OworCitzdHJ1Y3QgaGRtaV9hdWRp b19wYXJhbSB7CisJZW51bSBoZG1pX2F1ZGlvX2NvZGluZ190eXBlIGF1ZF9jb2RlYzsKKwllbnVt IGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeSBhdWRfaGRtaV9mczsKKwllbnVtIGhkbWlfYXVk aW9fc2FtcGxlX3NpemUgYXVkX3NhbXBlX3NpemU7CisJZW51bSBoZG1pX2F1ZF9pbnB1dF90eXBl IGF1ZF9pbnB1dF90eXBlOworCWVudW0gaGRtaV9hdWRfaTJzX2ZtdCBhdWRfaTJzX2ZtdDsKKwll bnVtIGhkbWlfYXVkX21jbGsgYXVkX21jbGs7CisJZW51bSBoZG1pX2F1ZF9pZWNfZnJhbWVfcmF0 ZSBpZWNfZnJhbWVfZnM7CisJZW51bSBoZG1pX2F1ZF9jaGFubmVsX3R5cGUgYXVkX2lucHV0X2No YW5fdHlwZTsKKwl1OCBoZG1pX2xfY2hhbm5lbF9zdGF0ZVs2XTsKKwl1OCBoZG1pX3JfY2hhbm5l bF9zdGF0ZVs2XTsKK307CisKK3N0cnVjdCBtdGtfaGRtaSB7CisJc3RydWN0IGRybV9icmlkZ2Ug YnJpZGdlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm47CisJc3RydWN0IGRldmljZSAqZGV2 OworCXN0cnVjdCBwaHkgKnBoeTsKKwlzdHJ1Y3QgZGV2aWNlICpjZWNfZGV2OworCXN0cnVjdCBp MmNfYWRhcHRlciAqZGRjX2FkcHQ7CisJc3RydWN0IGNsayAqY2xrW01US19IRE1JX0NMS19DT1VO VF07CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbW9kZTsKKwlib29sIGR2aV9tb2RlOworCXUz MiBtaW5fY2xvY2s7CisJdTMyIG1heF9jbG9jazsKKwl1MzIgbWF4X2hkaXNwbGF5OworCXUzMiBt YXhfdmRpc3BsYXk7CisJdTMyIGliaWFzOworCXUzMiBpYmlhc191cDsKKwlzdHJ1Y3QgcmVnbWFw ICpzeXNfcmVnbWFwOworCXVuc2lnbmVkIGludCBzeXNfb2Zmc2V0OworCXZvaWQgX19pb21lbSAq cmVnczsKKwllbnVtIGhkbWlfY29sb3JzcGFjZSBjc3A7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFy YW0gYXVkX3BhcmFtOworCWJvb2wgcG93ZXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9OworCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaSAqaGRtaV9jdHhfZnJvbV9icmlkZ2Uoc3RydWN0IGRy bV9icmlkZ2UgKmIpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihiLCBzdHJ1Y3QgbXRrX2hkbWks IGJyaWRnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10a19oZG1pICpoZG1pX2N0eF9m cm9tX2Nvbm4oc3RydWN0IGRybV9jb25uZWN0b3IgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9v ZihjLCBzdHJ1Y3QgbXRrX2hkbWksIGNvbm4pOworfQorCitzdGF0aWMgdTMyIG10a19oZG1pX3Jl YWQoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByZWFkbCho ZG1pLT5yZWdzICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfd3JpdGUoc3Ry dWN0IG10a19oZG1pICpoZG1pLCB1MzIgb2Zmc2V0LCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWws IGhkbWktPnJlZ3MgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9jbGVhcl9i aXRzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIGJpdHMpCit7CisJdm9p ZCBfX2lvbWVtICpyZWcgPSBoZG1pLT5yZWdzICsgb2Zmc2V0OworCXUzMiB0bXA7CisKKwl0bXAg PSByZWFkbChyZWcpOworCXRtcCAmPSB+Yml0czsKKwl3cml0ZWwodG1wLCByZWcpOworfQorCitz dGF0aWMgdm9pZCBtdGtfaGRtaV9zZXRfYml0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHUzMiBv ZmZzZXQsIHUzMiBiaXRzKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaS0+cmVncyArIG9m ZnNldDsKKwl1MzIgdG1wOworCisJdG1wID0gcmVhZGwocmVnKTsKKwl0bXAgfD0gYml0czsKKwl3 cml0ZWwodG1wLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9tYXNrKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgdTMyIG9mZnNldCwgdTMyIHZhbCwgdTMyIG1hc2spCit7CisJdm9pZCBf X2lvbWVtICpyZWcgPSBoZG1pLT5yZWdzICsgb2Zmc2V0OworCXUzMiB0bXA7CisKKwl0bXAgPSBy ZWFkbChyZWcpOworCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CisJd3JpdGVs KHRtcCwgcmVnKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfdmlkX2JsYWNrKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBibGFjaykKK3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIFZJ REVPX0NGR180LCBibGFjayA/IEdFTl9SR0IgOiBOT1JNQUxfUEFUSCwKKwkJICAgICAgVklERU9f U09VUkNFX1NFTCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X21ha2VfcmVnX3dyaXRh YmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCit7CisJcmVnbWFwX3VwZGF0 ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcy MCwKKwkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8gSERNSV9QQ0xLX0ZSRUVfUlVO IDogMCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19v ZmZzZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEhETUlfT04gfCBBTkxHX09OLCBlbmFibGUg PyAoSERNSV9PTiB8IEFOTEdfT04pIDogMCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3 XzFwNF92ZXJzaW9uX2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQor eworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0 ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBIRE1JMlAwX0VOLCBlbmFibGUgPyAwIDogSERNSTJQ MF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9tdXRlKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSkKK3sKKwltdGtfaGRtaV9zZXRfYml0cyhoZG1pLCBHUkxfQVVESU9fQ0ZHLCBB VURJT19aRVJPKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3VubXV0ZShzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQVVE SU9fQ0ZHLCBBVURJT19aRVJPKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfcmVzZXQo c3RydWN0IG10a19oZG1pICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNf cmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JT VCwgSERNSV9SU1QpOworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1p LT5zeXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMUMsCisJCQkgICBIRE1JX1JTVCwgMCk7CisJbXRr X2hkbWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQ0ZHMywgQ0ZHM19DT05UUk9MX1BBQ0tFVF9ERUxB WSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdtYXAsIGhkbWktPnN5c19vZmZz ZXQgKyBIRE1JX1NZU19DRkcxQywKKwkJCSAgIEFOTEdfT04sIEFOTEdfT04pOworfQorCitzdGF0 aWMgdm9pZCBtdGtfaGRtaV9od19lbmFibGVfbm90aWNlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwg Ym9vbCBlbmFibGVfbm90aWNlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NGRzIsIGVu YWJsZV9ub3RpY2UgPyBDRkcyX05PVElDRV9FTiA6IDAsCisJCSAgICAgIENGRzJfTk9USUNFX0VO KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfd3JpdGVfaW50X21hc2soc3RydWN0IG10 a19oZG1pICpoZG1pLCB1MzIgaW50X21hc2spCit7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JM X0lOVF9NQVNLLCBpbnRfbWFzayk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2VuYWJs ZV9kdmlfbW9kZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQoreworCW10a19o ZG1pX21hc2soaGRtaSwgR1JMX0NGRzEsIGVuYWJsZSA/IENGRzFfRFZJIDogMCwgQ0ZHMV9EVkkp OworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19zZW5kX2luZm9fZnJhbWUoc3RydWN0IG10 a19oZG1pICpoZG1pLCB1OCAqYnVmZmVyLAorCQkJCQl1OCBsZW4pCit7CisJdTMyIGN0cmxfcmVn ID0gR1JMX0NUUkw7CisJaW50IGk7CisJdTggKmZyYW1lX2RhdGE7CisJZW51bSBoZG1pX2luZm9m cmFtZV90eXBlIGZyYW1lX3R5cGU7CisJdTggZnJhbWVfdmVyOworCXU4IGZyYW1lX2xlbjsKKwl1 OCBjaGVja3N1bTsKKwlpbnQgY3RybF9mcmFtZV9lbiA9IDA7CisKKwlmcmFtZV90eXBlID0gKmJ1 ZmZlcjsKKwlidWZmZXIgKz0gMTsKKwlmcmFtZV92ZXIgPSAqYnVmZmVyOworCWJ1ZmZlciArPSAx OworCWZyYW1lX2xlbiA9ICpidWZmZXI7CisJYnVmZmVyICs9IDE7CisJY2hlY2tzdW0gPSAqYnVm ZmVyOworCWJ1ZmZlciArPSAxOworCWZyYW1lX2RhdGEgPSBidWZmZXI7CisKKwlkZXZfZGJnKGhk bWktPmRldiwKKwkJImZyYW1lX3R5cGU6MHgleCxmcmFtZV92ZXI6MHgleCxmcmFtZV9sZW46MHgl eCxjaGVja3N1bToweCV4XG4iLAorCQlmcmFtZV90eXBlLCBmcmFtZV92ZXIsIGZyYW1lX2xlbiwg Y2hlY2tzdW0pOworCisJc3dpdGNoIChmcmFtZV90eXBlKSB7CisJY2FzZSBIRE1JX0lORk9GUkFN RV9UWVBFX0FWSToKKwkJY3RybF9mcmFtZV9lbiA9IENUUkxfQVZJX0VOOworCQljdHJsX3JlZyA9 IEdSTF9DVFJMOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfU1BEOgorCQlj dHJsX2ZyYW1lX2VuID0gQ1RSTF9TUERfRU47CisJCWN0cmxfcmVnID0gR1JMX0NUUkw7CisJCWJy ZWFrOworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTzoKKwkJY3RybF9mcmFtZV9lbiA9 IENUUkxfQVVESU9fRU47CisJCWN0cmxfcmVnID0gR1JMX0NUUkw7CisJCWJyZWFrOworCWNhc2Ug SERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1I6CisJCWN0cmxfZnJhbWVfZW4gPSBWU19FTjsKKwkJ Y3RybF9yZWcgPSBHUkxfQUNQX0lTUkNfQ1RSTDsKKwkJYnJlYWs7CisJfQorCW10a19oZG1pX2Ns ZWFyX2JpdHMoaGRtaSwgY3RybF9yZWcsIGN0cmxfZnJhbWVfZW4pOworCW10a19oZG1pX3dyaXRl KGhkbWksIEdSTF9JTkZPRlJNX1RZUEUsIGZyYW1lX3R5cGUpOworCW10a19oZG1pX3dyaXRlKGhk bWksIEdSTF9JTkZPRlJNX1ZFUiwgZnJhbWVfdmVyKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBH UkxfSU5GT0ZSTV9MTkcsIGZyYW1lX2xlbik7CisKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxf SUZNX1BPUlQsIGNoZWNrc3VtKTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWVfbGVuOyBpKyspCisJ CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JRk1fUE9SVCwgZnJhbWVfZGF0YVtpXSk7CisKKwlt dGtfaGRtaV9zZXRfYml0cyhoZG1pLCBjdHJsX3JlZywgY3RybF9mcmFtZV9lbik7Cit9CisKK3N0 YXRpYyB2b2lkIG10a19oZG1pX2h3X3NlbmRfYXVkX3BhY2tldChzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksIGJvb2wgZW5hYmxlKQoreworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX1NISUZUX1IyLCBl bmFibGUgPyAwIDogQVVESU9fUEFDS0VUX09GRiwKKwkJICAgICAgQVVESU9fUEFDS0VUX09GRik7 Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2NvbmZpZ19zeXMoc3RydWN0IG10a19oZG1p ICpoZG1pKQoreworCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5z eXNfb2Zmc2V0ICsgSERNSV9TWVNfQ0ZHMjAsCisJCQkgICBIRE1JX09VVF9GSUZPX0VOIHwgTUhM X01PREVfT04sIDApOworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKKwlyZWdtYXBfdXBkYXRl X2JpdHMoaGRtaS0+c3lzX3JlZ21hcCwgaGRtaS0+c3lzX29mZnNldCArIEhETUlfU1lTX0NGRzIw LAorCQkJICAgSERNSV9PVVRfRklGT19FTiB8IE1ITF9NT0RFX09OLCBIRE1JX09VVF9GSUZPX0VO KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfc2V0X2RlZXBfY29sb3JfbW9kZShzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnN5c19yZWdt YXAsIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKKwkJCSAgIERFRVBfQ09MT1Jf TU9ERV9NQVNLIHwgREVFUF9DT0xPUl9FTiwKKwkJCSAgIENPTE9SXzhCSVRfTU9ERSk7Cit9CisK K3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X3NlbmRfYXZfbXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhk bWkpCit7CisJbXRrX2hkbWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQ0ZHNCwgQ1RSTF9BVk1VVEUp OworCXVzbGVlcF9yYW5nZSgyMDAwLCA0MDAwKTsKKwltdGtfaGRtaV9zZXRfYml0cyhoZG1pLCBH UkxfQ0ZHNCwgQ1RSTF9BVk1VVEUpOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19zZW5k X2F2X3VubXV0ZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpCit7CisJbXRrX2hkbWlfbWFzayhoZG1p LCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfRU4sCisJCSAgICAgIENGRzRfQVZfVU5NVVRFX0VO IHwgQ0ZHNF9BVl9VTk1VVEVfU0VUKTsKKwl1c2xlZXBfcmFuZ2UoMjAwMCwgNDAwMCk7CisJbXRr X2hkbWlfbWFzayhoZG1pLCBHUkxfQ0ZHNCwgQ0ZHNF9BVl9VTk1VVEVfU0VULAorCQkgICAgICBD Rkc0X0FWX1VOTVVURV9FTiB8IENGRzRfQVZfVU5NVVRFX1NFVCk7Cit9CisKK3N0YXRpYyB2b2lk IG10a19oZG1pX2h3X25jdHNfZW5hYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBvbikK K3sKKwltdGtfaGRtaV9tYXNrKGhkbWksIEdSTF9DVFNfQ1RSTCwgb24gPyAwIDogQ1RTX0NUUkxf U09GVCwKKwkJICAgICAgQ1RTX0NUUkxfU09GVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1p X2h3X25jdHNfYXV0b193cml0ZV9lbmFibGUoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQkg ICAgICAgYm9vbCBlbmFibGUpCit7CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQ1RTX0NUUkws IGVuYWJsZSA/IE5DVFNfV1JJX0FOWVRJTUUgOiAwLAorCQkgICAgICBOQ1RTX1dSSV9BTllUSU1F KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfbXNpY19zZXR0aW5nKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwKKwkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQorewor CW10a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0NGRzQsIENGRzRfTUhMX01PREUpOworCisJ aWYgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgJiYKKwkgICAgbW9kZS0+ Y2xvY2sgPT0gNzQyNTAgJiYKKwkgICAgbW9kZS0+dmRpc3BsYXkgPT0gMTA4MCkKKwkJbXRrX2hk bWlfY2xlYXJfYml0cyhoZG1pLCBHUkxfQ0ZHMiwgQ0ZHMl9NSExfREVfU0VMKTsKKwllbHNlCisJ CW10a19oZG1pX3NldF9iaXRzKGhkbWksIEdSTF9DRkcyLCBDRkcyX01ITF9ERV9TRUwpOworfQor CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X2NoYW5uZWxfc3dhcChzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksCisJCQkJCWVudW0gaGRtaV9hdWRfY2hhbm5lbF9zd2FwX3R5cGUgc3dhcCkK K3sKKwl1OCBzd2FwX2JpdDsKKworCXN3aXRjaCAoc3dhcCkgeworCWNhc2UgSERNSV9BVURfU1dB UF9MUjoKKwkJc3dhcF9iaXQgPSBMUl9TV0FQOworCQlicmVhazsKKwljYXNlIEhETUlfQVVEX1NX QVBfTEZFX0NDOgorCQlzd2FwX2JpdCA9IExGRV9DQ19TV0FQOworCQlicmVhazsKKwljYXNlIEhE TUlfQVVEX1NXQVBfTFNSUzoKKwkJc3dhcF9iaXQgPSBMU1JTX1NXQVA7CisJCWJyZWFrOworCWNh c2UgSERNSV9BVURfU1dBUF9STFNfUlJTOgorCQlzd2FwX2JpdCA9IFJMU19SUlNfU1dBUDsKKwkJ YnJlYWs7CisJY2FzZSBIRE1JX0FVRF9TV0FQX0xSX1NUQVRVUzoKKwkJc3dhcF9iaXQgPSBMUl9T VEFUVVNfU1dBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3dhcF9iaXQgPSBMRkVfQ0NfU1dB UDsKKwkJYnJlYWs7CisJfQorCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0NIX1NXQVAsIHN3YXBf Yml0LCAweGZmKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9iaXRfbnVt KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJZW51bSBoZG1pX2F1ZGlvX3NhbXBsZV9zaXpl IGJpdF9udW0pCit7CisJdTMyIHZhbDsKKworCXN3aXRjaCAoYml0X251bSkgeworCWNhc2UgSERN SV9BVURJT19TQU1QTEVfU0laRV8xNjoKKwkJdmFsID0gQU9VVF8xNkJJVDsKKwkJYnJlYWs7CisJ Y2FzZSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzIwOgorCQl2YWwgPSBBT1VUXzIwQklUOworCQli cmVhazsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQ6CisJY2FzZSBIRE1JX0FVRElP X1NBTVBMRV9TSVpFX1NUUkVBTToKKwkJdmFsID0gQU9VVF8yNEJJVDsKKwkJYnJlYWs7CisJfQor CisJbXRrX2hkbWlfbWFzayhoZG1pLCBHUkxfQU9VVF9DRkcsIHZhbCwgQU9VVF9CTlVNX1NFTF9N QVNLKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9pMnNfZm10KHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJZW51bSBoZG1pX2F1ZF9pMnNfZm10IGkyc19mbXQpCit7 CisJdTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzApOworCXZh bCAmPSB+KENGRzBfV19MRU5HVEhfTUFTSyB8IENGRzBfSTJTX01PREVfTUFTSyk7CisKKwlzd2l0 Y2ggKGkyc19mbXQpIHsKKwljYXNlIEhETUlfSTJTX01PREVfUkpUXzI0QklUOgorCQl2YWwgfD0g Q0ZHMF9JMlNfTU9ERV9SVEogfCBDRkcwX1dfTEVOR1RIXzI0QklUOworCQlicmVhazsKKwljYXNl IEhETUlfSTJTX01PREVfUkpUXzE2QklUOgorCQl2YWwgfD0gQ0ZHMF9JMlNfTU9ERV9SVEogfCBD RkcwX1dfTEVOR1RIXzE2QklUOworCQlicmVhazsKKwljYXNlIEhETUlfSTJTX01PREVfTEpUXzI0 QklUOgorCWRlZmF1bHQ6CisJCXZhbCB8PSBDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfV19MRU5H VEhfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9MSlRfMTZCSVQ6CisJCXZh bCB8PSBDRkcwX0kyU19NT0RFX0xUSiB8IENGRzBfV19MRU5HVEhfMTZCSVQ7CisJCWJyZWFrOwor CWNhc2UgSERNSV9JMlNfTU9ERV9JMlNfMjRCSVQ6CisJCXZhbCB8PSBDRkcwX0kyU19NT0RFX0ky UyB8IENGRzBfV19MRU5HVEhfMjRCSVQ7CisJCWJyZWFrOworCWNhc2UgSERNSV9JMlNfTU9ERV9J MlNfMTZCSVQ6CisJCXZhbCB8PSBDRkcwX0kyU19NT0RFX0kyUyB8IENGRzBfV19MRU5HVEhfMTZC SVQ7CisJCWJyZWFrOworCX0KKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfQ0ZHMCwgdmFsKTsK K30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkaW9fY29uZmlnKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwgYm9vbCBkc3QpCit7CisJY29uc3QgdTggbWFzayA9IEhJR0hfQklUX1JBVEUgfCBE U1RfTk9STUFMX0RPVUJMRSB8IFNBQ0RfRFNUIHwgRFNEX1NFTDsKKwl1OCB2YWw7CisKKwkvKiBE aXNhYmxlIGhpZ2ggYml0cmF0ZSwgc2V0IERTVCBwYWNrZXQgbm9ybWFsL2RvdWJsZSAqLworCW10 a19oZG1pX2NsZWFyX2JpdHMoaGRtaSwgR1JMX0FPVVRfQ0ZHLCBISUdIX0JJVF9SQVRFX1BBQ0tF VF9BTElHTik7CisKKwlpZiAoZHN0KQorCQl2YWwgPSBEU1RfTk9STUFMX0RPVUJMRSB8IFNBQ0Rf RFNUOworCWVsc2UKKwkJdmFsID0gMDsKKworCW10a19oZG1pX21hc2soaGRtaSwgR1JMX0FVRElP X0NGRywgdmFsLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NldF9p MnNfY2hhbl9udW0oc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCQllbnVtIGhkbWlfYXVkX2No YW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJCXU4IGNoYW5uZWxfY291bnQpCit7CisJdW5z aWduZWQgaW50IGNoX3N3aXRjaDsKKwl1OCBpMnNfdXY7CisKKwljaF9zd2l0Y2ggPSBDSF9TV0lU Q0goNywgNykgfCBDSF9TV0lUQ0goNiwgNikgfAorCQkgICAgQ0hfU1dJVENIKDUsIDUpIHwgQ0hf U1dJVENIKDQsIDQpIHwKKwkJICAgIENIX1NXSVRDSCgzLCAzKSB8IENIX1NXSVRDSCgxLCAyKSB8 CisJCSAgICBDSF9TV0lUQ0goMiwgMSkgfCBDSF9TV0lUQ0goMCwgMCk7CisKKwlpZiAoY2hhbm5l bF9jb3VudCA9PSAyKSB7CisJCWkyc191diA9IEkyU19VVl9DSF9FTigwKTsKKwl9IGVsc2UgaWYg KGNoYW5uZWxfY291bnQgPT0gMyB8fCBjaGFubmVsX2NvdW50ID09IDQpIHsKKwkJaWYgKGNoYW5u ZWxfY291bnQgPT0gNCAmJgorCQkgICAgKGNoYW5uZWxfdHlwZSA9PSBIRE1JX0FVRF9DSEFOX1RZ UEVfM18wX0xSUyB8fAorCQkgICAgY2hhbm5lbF90eXBlID09IEhETUlfQVVEX0NIQU5fVFlQRV80 XzApKQorCQkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDIpIHwgSTJTX1VWX0NIX0VOKDApOworCQll bHNlCisJCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMykgfCBJMlNfVVZfQ0hfRU4oMik7CisJfSBl bHNlIGlmIChjaGFubmVsX2NvdW50ID09IDYgfHwgY2hhbm5lbF9jb3VudCA9PSA1KSB7CisJCWlm IChjaGFubmVsX2NvdW50ID09IDYgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBIRE1JX0FVRF9D SEFOX1RZUEVfNV8xICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gSERNSV9BVURfQ0hBTl9UWVBF XzRfMV9DTFJTKSB7CisJCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMykgfCBJMlNfVVZfQ0hfRU4o MikgfAorCQkJCSBJMlNfVVZfQ0hfRU4oMSkgfCBJMlNfVVZfQ0hfRU4oMCk7CisJCX0gZWxzZSB7 CisJCQlpMnNfdXYgPSBJMlNfVVZfQ0hfRU4oMikgfCBJMlNfVVZfQ0hfRU4oMSkgfAorCQkJCSBJ MlNfVVZfQ0hfRU4oMCk7CisJCX0KKwl9IGVsc2UgaWYgKGNoYW5uZWxfY291bnQgPT0gOCB8fCBj aGFubmVsX2NvdW50ID09IDcpIHsKKwkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDMpIHwgSTJTX1VW X0NIX0VOKDIpIHwKKwkJCSBJMlNfVVZfQ0hfRU4oMSkgfCBJMlNfVVZfQ0hfRU4oMCk7CisJfSBl bHNlIHsKKwkJaTJzX3V2ID0gSTJTX1VWX0NIX0VOKDApOworCX0KKworCW10a19oZG1pX3dyaXRl KGhkbWksIEdSTF9DSF9TVzAsIGNoX3N3aXRjaCAmIDB4ZmYpOworCW10a19oZG1pX3dyaXRlKGhk bWksIEdSTF9DSF9TVzEsIChjaF9zd2l0Y2ggPj4gOCkgJiAweGZmKTsKKwltdGtfaGRtaV93cml0 ZShoZG1pLCBHUkxfQ0hfU1cyLCAoY2hfc3dpdGNoID4+IDE2KSAmIDB4ZmYpOworCW10a19oZG1p X3dyaXRlKGhkbWksIEdSTF9JMlNfVVYsIGkyc191dik7Cit9CisKK3N0YXRpYyB2b2lkIG10a19o ZG1pX2h3X2F1ZF9zZXRfaW5wdXRfdHlwZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCSAg IGVudW0gaGRtaV9hdWRfaW5wdXRfdHlwZSBpbnB1dF90eXBlKQoreworCXUzMiB2YWw7CisKKwl2 YWwgPSBtdGtfaGRtaV9yZWFkKGhkbWksIEdSTF9DRkcxKTsKKwlpZiAoaW5wdXRfdHlwZSA9PSBI RE1JX0FVRF9JTlBVVF9JMlMgJiYKKwkgICAgKHZhbCAmIENGRzFfU1BESUYpID09IENGRzFfU1BE SUYpIHsKKwkJdmFsICY9IH5DRkcxX1NQRElGOworCX0gZWxzZSBpZiAoaW5wdXRfdHlwZSA9PSBI RE1JX0FVRF9JTlBVVF9TUERJRiAmJgorCQkodmFsICYgQ0ZHMV9TUERJRikgPT0gMCkgeworCQl2 YWwgfD0gQ0ZHMV9TUERJRjsKKwl9CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0NGRzEsIHZh bCk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMo c3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXU4ICpsX2NoYW5fc3RhdHVzLCB1OCAqcl9jaGFu X3N0YXR1cywKKwkJCQllbnVtIGhkbWlfYXVkaW9fc2FtcGxlX2ZyZXF1ZW5jeSBhdWRfaGRtaV9m cykKK3sKKwl1OCBsX3N0YXR1c1s1XTsKKwl1OCByX3N0YXR1c1s1XTsKKwl1OCB2YWw7CisKKwls X3N0YXR1c1swXSA9IGxfY2hhbl9zdGF0dXNbMF07CisJbF9zdGF0dXNbMV0gPSBsX2NoYW5fc3Rh dHVzWzFdOworCWxfc3RhdHVzWzJdID0gbF9jaGFuX3N0YXR1c1syXTsKKwlyX3N0YXR1c1swXSA9 IHJfY2hhbl9zdGF0dXNbMF07CisJcl9zdGF0dXNbMV0gPSByX2NoYW5fc3RhdHVzWzFdOworCXJf c3RhdHVzWzJdID0gcl9jaGFuX3N0YXR1c1syXTsKKworCWxfc3RhdHVzWzBdICY9IH4weDAyOwor CXJfc3RhdHVzWzBdICY9IH4weDAyOworCisJdmFsID0gbF9jaGFuX3N0YXR1c1szXSAmIDB4ZjA7 CisJc3dpdGNoIChhdWRfaGRtaV9mcykgeworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVF TkNZXzMyMDAwOgorCQl2YWwgfD0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FVRElPX1NB TVBMRV9GUkVRVUVOQ1lfNDQxMDA6CisJCWJyZWFrOworCWNhc2UgSERNSV9BVURJT19TQU1QTEVf RlJFUVVFTkNZXzg4MjAwOgorCQl2YWwgfD0gMHgwODsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0FV RElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCXZhbCB8PSAweDBhOworCQlicmVhazsKKwlj YXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJdmFsIHw9IDB4MDI7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbCB8PSAweDAyOworCQlicmVhazsKKwl9CisJbF9zdGF0 dXNbM10gPSB2YWw7CisJcl9zdGF0dXNbM10gPSB2YWw7CisKKwl2YWwgPSBsX2NoYW5fc3RhdHVz WzRdOworCXZhbCB8PSAoKH4obF9zdGF0dXNbM10gJiAweDBmKSkgPDwgNCk7CisJbF9zdGF0dXNb NF0gPSB2YWw7CisJcl9zdGF0dXNbNF0gPSB2YWw7CisKKwl2YWwgPSBsX3N0YXR1c1swXTsKKwlt dGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJTX0NfU1RBMCwgdmFsKTsKKwltdGtfaGRtaV93cml0 ZShoZG1pLCBHUkxfTF9TVEFUVVNfMCwgdmFsKTsKKworCXZhbCA9IHJfc3RhdHVzWzBdOworCW10 a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU18wLCB2YWwpOworCisJdmFsID0gbF9zdGF0 dXNbMV07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0kyU19DX1NUQTEsIHZhbCk7CisJbXRr X2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RBVFVTXzEsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1 c1sxXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfUl9TVEFUVVNfMSwgdmFsKTsKKworCXZh bCA9IGxfc3RhdHVzWzJdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9JMlNfQ19TVEEyLCB2 YWwpOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU18yLCB2YWwpOworCisJdmFs ID0gcl9zdGF0dXNbMl07CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX1JfU1RBVFVTXzIsIHZh bCk7CisKKwl2YWwgPSBsX3N0YXR1c1szXTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfSTJT X0NfU1RBMywgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTF9TVEFUVVNfMywgdmFs KTsKKworCXZhbCA9IHJfc3RhdHVzWzNdOworCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NU QVRVU18zLCB2YWwpOworCisJdmFsID0gbF9zdGF0dXNbNF07CisJbXRrX2hkbWlfd3JpdGUoaGRt aSwgR1JMX0kyU19DX1NUQTQsIHZhbCk7CisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX0xfU1RB VFVTXzQsIHZhbCk7CisKKwl2YWwgPSByX3N0YXR1c1s0XTsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfUl9TVEFUVVNfNCwgdmFsKTsKKworCWZvciAodmFsID0gMDsgdmFsIDwgMTk7IHZhbCsr KSB7CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9MX1NUQVRVU181ICsgdmFsICogNCwgMCk7 CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9SX1NUQVRVU181ICsgdmFsICogNCwgMCk7CisJ fQorfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1p LCBHUkxfTUlYX0NUUkwpOworCWlmICh2YWwgJiBNSVhfQ1RSTF9TUkNfRU4pIHsKKwkJdmFsICY9 IH5NSVhfQ1RSTF9TUkNfRU47CisJCW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9NSVhfQ1RSTCwg dmFsKTsKKwkJdXNsZWVwX3JhbmdlKDI1NSwgNTEyKTsKKwkJdmFsIHw9IE1JWF9DVFJMX1NSQ19F TjsKKwkJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX01JWF9DVFJMLCB2YWwpOworCX0KK30KKwor c3RhdGljIHZvaWQgbXRrX2hkbWlfaHdfYXVkX3NyY19kaXNhYmxlKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSkKK3sKKwl1MzIgdmFsOworCisJdmFsID0gbXRrX2hkbWlfcmVhZChoZG1pLCBHUkxfTUlY X0NUUkwpOworCXZhbCAmPSB+TUlYX0NUUkxfU1JDX0VOOworCW10a19oZG1pX3dyaXRlKGhkbWks IEdSTF9NSVhfQ1RSTCwgdmFsKTsKKwltdGtfaGRtaV93cml0ZShoZG1pLCBHUkxfU0hJRlRfTDEs IDB4MDApOworfQorCitzdGF0aWMgdm9pZCBtdGtfaGRtaV9od19hdWRfc2V0X21jbGsoc3RydWN0 IG10a19oZG1pICpoZG1pLAorCQkJCSAgICAgZW51bSBoZG1pX2F1ZF9tY2xrIG1jbGspCit7CisJ dTMyIHZhbDsKKworCXZhbCA9IG10a19oZG1pX3JlYWQoaGRtaSwgR1JMX0NGRzUpOworCXZhbCAm PSBDRkc1X0NEX1JBVElPX01BU0s7CisKKwlzd2l0Y2ggKG1jbGspIHsKKwljYXNlIEhETUlfQVVE X01DTEtfMTI4RlM6CisJCXZhbCB8PSBDRkc1X0ZTMTI4OworCQlicmVhazsKKwljYXNlIEhETUlf QVVEX01DTEtfMjU2RlM6CisJCXZhbCB8PSBDRkc1X0ZTMjU2OworCQlicmVhazsKKwljYXNlIEhE TUlfQVVEX01DTEtfMzg0RlM6CisJCXZhbCB8PSBDRkc1X0ZTMzg0OworCQlicmVhazsKKwljYXNl IEhETUlfQVVEX01DTEtfNTEyRlM6CisJCXZhbCB8PSBDRkc1X0ZTNTEyOworCQlicmVhazsKKwlj YXNlIEhETUlfQVVEX01DTEtfNzY4RlM6CisJCXZhbCB8PSBDRkc1X0ZTNzY4OworCQlicmVhazsK KwlkZWZhdWx0OgorCQl2YWwgfD0gQ0ZHNV9GUzI1NjsKKwkJYnJlYWs7CisJfQorCW10a19oZG1p X3dyaXRlKGhkbWksIEdSTF9DRkc1LCB2YWwpOworfQorCitzdHJ1Y3QgaGRtaV9hY3JfbiB7CisJ dW5zaWduZWQgaW50IGNsb2NrOworCXVuc2lnbmVkIGludCBuWzNdOworfTsKKworLyogUmVjb21t ZW5kZWQgTiB2YWx1ZXMgZnJvbSBIRE1JIHNwZWNpZmljYXRpb24sIHRhYmxlcyA3LTEgdG8gNy0z ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfYWNyX24gaGRtaV9yZWNfbl90YWJsZVtdID0g eworCS8qIENsb2NrLCBOOiAzMmtIeiA0NC4xa0h6IDQ4a0h6ICovCisJeyAgMjUxNzUsIHsgIDQ1 NzYsICA3MDA3LCAgNjg2NCB9IH0sCisJeyAgNzQxNzYsIHsgMTE2NDgsIDE3ODM2LCAxMTY0OCB9 IH0sCisJeyAxNDgzNTIsIHsgMTE2NDgsICA4OTE4LCAgNTgyNCB9IH0sCisJeyAyOTY3MDMsIHsg IDU4MjQsICA0NDU5LCAgNTgyNCB9IH0sCisJeyAyOTcwMDAsIHsgIDMwNzIsICA0NzA0LCAgNTEy MCB9IH0sCisJeyAgICAgIDAsIHsgIDQwOTYsICA2MjcyLCAgNjE0NCB9IH0sIC8qIGFsbCBvdGhl ciBUTURTIGNsb2NrcyAqLworfTsKKworLyoqCisgKiBoZG1pX3JlY29tbWVuZGVkX24oKSAtIFJl dHVybiBOIHZhbHVlIHJlY29tbWVuZGVkIGJ5IEhETUkgc3BlY2lmaWNhdGlvbgorICogQGZyZXE6 IGF1ZGlvIHNhbXBsZSByYXRlIGluIEh6CisgKiBAY2xvY2s6IHJvdW5kZWQgVE1EUyBjbG9jayBp biBrSHoKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX3JlY29tbWVuZGVkX24odW5zaWdu ZWQgaW50IGZyZXEsIHVuc2lnbmVkIGludCBjbG9jaykKK3sKKwljb25zdCBzdHJ1Y3QgaGRtaV9h Y3JfbiAqcmVjb21tZW5kZWQ7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShoZG1pX3JlY19uX3RhYmxlKSAtIDE7IGkrKykgeworCQlpZiAoY2xvY2sgPT0g aGRtaV9yZWNfbl90YWJsZVtpXS5jbG9jaykKKwkJCWJyZWFrOworCX0KKwlyZWNvbW1lbmRlZCA9 IGhkbWlfcmVjX25fdGFibGUgKyBpOworCisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSAzMjAwMDoK KwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzBdOworCWNhc2UgNDQxMDA6CisJCXJldHVybiByZWNv bW1lbmRlZC0+blsxXTsKKwljYXNlIDQ4MDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl07 CisJY2FzZSA4ODIwMDoKKwkJcmV0dXJuIHJlY29tbWVuZGVkLT5uWzFdICogMjsKKwljYXNlIDk2 MDAwOgorCQlyZXR1cm4gcmVjb21tZW5kZWQtPm5bMl0gKiAyOworCWNhc2UgMTc2NDAwOgorCQly ZXR1cm4gcmVjb21tZW5kZWQtPm5bMV0gKiA0OworCWNhc2UgMTkyMDAwOgorCQlyZXR1cm4gcmVj b21tZW5kZWQtPm5bMl0gKiA0OworCWRlZmF1bHQ6CisJCXJldHVybiAoMTI4ICogZnJlcSkgLyAx MDAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX21vZGVfY2xvY2tfdG9faHoo dW5zaWduZWQgaW50IGNsb2NrKQoreworCXN3aXRjaCAoY2xvY2spIHsKKwljYXNlIDI1MTc1Ogor CQlyZXR1cm4gMjUxNzQ4MjU7CS8qIDI1LjIvMS4wMDEgTUh6ICovCisJY2FzZSA3NDE3NjoKKwkJ cmV0dXJuIDc0MTc1ODI0OwkvKiA3NC4yNS8xLjAwMSBNSHogKi8KKwljYXNlIDE0ODM1MjoKKwkJ cmV0dXJuIDE0ODM1MTY0ODsJLyogMTQ4LjUvMS4wMDEgTUh6ICovCisJY2FzZSAyOTY3MDM6CisJ CXJldHVybiAyOTY3MDMyOTc7CS8qIDI5Ny8xLjAwMSBNSHogKi8KKwlkZWZhdWx0OgorCQlyZXR1 cm4gY2xvY2sgKiAxMDAwOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoZG1pX2V4cGVj dGVkX2N0cyh1bnNpZ25lZCBpbnQgYXVkaW9fc2FtcGxlX3JhdGUsCisJCQkJICAgICAgdW5zaWdu ZWQgaW50IHRtZHNfY2xvY2ssIHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiBESVZfUk9VTkRf Q0xPU0VTVF9VTEwoKHU2NCloZG1pX21vZGVfY2xvY2tfdG9faHoodG1kc19jbG9jaykgKiBuLAor CQkJCSAgICAgMTI4ICogYXVkaW9fc2FtcGxlX3JhdGUpOworfQorCitzdGF0aWMgdm9pZCBkb19o ZG1pX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGludCBu LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3RzKQoreworCXVuc2lnbmVkIGNoYXIgdmFsW05DVFNf QllURVNdOworCWludCBpOworCisJbXRrX2hkbWlfd3JpdGUoaGRtaSwgR1JMX05DVFMsIDApOwor CW10a19oZG1pX3dyaXRlKGhkbWksIEdSTF9OQ1RTLCAwKTsKKwltdGtfaGRtaV93cml0ZShoZG1p LCBHUkxfTkNUUywgMCk7CisJbWVtc2V0KHZhbCwgMCwgc2l6ZW9mKHZhbCkpOworCisJdmFsWzBd ID0gKGN0cyA+PiAyNCkgJiAweGZmOworCXZhbFsxXSA9IChjdHMgPj4gMTYpICYgMHhmZjsKKwl2 YWxbMl0gPSAoY3RzID4+IDgpICYgMHhmZjsKKwl2YWxbM10gPSBjdHMgJiAweGZmOworCisJdmFs WzRdID0gKG4gPj4gMTYpICYgMHhmZjsKKwl2YWxbNV0gPSAobiA+PiA4KSAmIDB4ZmY7CisJdmFs WzZdID0gbiAmIDB4ZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNUU19CWVRFUzsgaSsrKQorCQlt dGtfaGRtaV93cml0ZShoZG1pLCBHUkxfTkNUUywgdmFsW2ldKTsKK30KKworc3RhdGljIHZvaWQg bXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICAg IHVuc2lnbmVkIGludCBzYW1wbGVfcmF0ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjbG9jaykK K3sKKwl1bnNpZ25lZCBpbnQgbiwgY3RzOworCisJbiA9IGhkbWlfcmVjb21tZW5kZWRfbihzYW1w bGVfcmF0ZSwgY2xvY2spOworCWN0cyA9IGhkbWlfZXhwZWN0ZWRfY3RzKHNhbXBsZV9yYXRlLCBj bG9jaywgbik7CisKKwlkZXZfZGJnKGhkbWktPmRldiwgIiVzOiBzYW1wbGVfcmF0ZT0ldSwgY2xv Y2s9JWQsIGN0cz0ldSwgbj0ldVxuIiwKKwkJX19mdW5jX18sIHNhbXBsZV9yYXRlLCBjbG9jaywg biwgY3RzKTsKKworCW10a19oZG1pX21hc2soaGRtaSwgRFVNTVlfMzA0LCBBVURJT19JMlNfTkNU U19TRUxfNjQsCisJCSAgICAgIEFVRElPX0kyU19OQ1RTX1NFTCk7CisJZG9faGRtaV9od19hdWRf c2V0X25jdHMoaGRtaSwgbiwgY3RzKTsKK30KKworc3RhdGljIHU4IG10a19oZG1pX2F1ZF9nZXRf Y2hubF9jb3VudChlbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpCit7CisJ c3dpdGNoIChjaGFubmVsX3R5cGUpIHsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8xXzA6CisJ Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMV8xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzJf MDoKKwkJcmV0dXJuIDI7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfMl8xOgorCWNhc2UgSERN SV9BVURfQ0hBTl9UWVBFXzNfMDoKKwkJcmV0dXJuIDM7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ UEVfM18xOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoKKwljYXNlIEhETUlfQVVEX0NI QU5fVFlQRV8zXzBfTFJTOgorCQlyZXR1cm4gNDsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV80 XzE6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNV8wOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzNfMV9MUlM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6CisJCXJldHVy biA1OworCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToKKwljYXNlIEhETUlfQVVEX0NIQU5f VFlQRV82XzA6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8xX0NMUlM6CisJY2FzZSBIRE1J X0FVRF9DSEFOX1RZUEVfNl8wX0NTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMF9DSDoK KwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZ UEVfNl8wX0NIUjoKKwkJcmV0dXJuIDY7CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xOgor CWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DUzoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV82XzFfQ0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOgorCWNhc2UgSERNSV9B VURfQ0hBTl9UWVBFXzZfMV9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wOgorCWNh c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9SSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV83XzBfTFNSX1JTUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzdfMF9MU0RfUlNEOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTOgorCWNh c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhTOgorCWNhc2UgSERNSV9BVURfQ0hBTl9U WVBFXzdfMF9DU19DSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6CisJY2Fz ZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV83XzBfQ0hfT0g6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NIX0NIUjoKKwljYXNl IEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBF XzdfMF9MU1NfUlNTX0xTUl9SU1I6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8wX0xIX1JI X0NTOgorCQlyZXR1cm4gNzsKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzE6CisJY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIX1JIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf MV9MU1JfUlNSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MQ19SQzoKKwljYXNlIEhE TUlfQVVEX0NIQU5fVFlQRV83XzFfTFdfUlc6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18x X0xTRF9SU0Q6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xTU19SU1M6CisJY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfN18xX0xIU19SSFM6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVf N18xX0NTX0NIOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19PSDoKKwljYXNlIEhE TUlfQVVEX0NIQU5fVFlQRV83XzFfQ1NfQ0hSOgorCWNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf MV9DSF9PSDoKKwljYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ0hfQ0hSOgorCWNhc2UgSERN SV9BVURfQ0hBTl9UWVBFXzdfMV9PSF9DSFI6CisJY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18x X0xTU19SU1NfTFNSX1JTUjoKKwkJcmV0dXJuIDg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDI7CisJ fQorfQorCitzdGF0aWMgaW50IG10a19oZG1pX3ZpZGVvX2NoYW5nZV92cGxsKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwgdTMyIGNsb2NrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwlpbnQgcmV0 OworCisJLyogVGhlIERQSSBkcml2ZXIgYWxyZWFkeSBzaG91bGQgaGF2ZSBzZXQgVFZEUExMIHRv IHRoZSBjb3JyZWN0IHJhdGUgKi8KKwlyZXQgPSBjbGtfc2V0X3JhdGUoaGRtaS0+Y2xrW01US19I RE1JX0NMS19IRE1JX1BMTF0sIGNsb2NrKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ ZGV2LCAiRmFpbGVkIHRvIHNldCBQTEwgdG8gJXUgSHo6ICVkXG4iLCBjbG9jaywKKwkJCXJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShoZG1pLT5jbGtbTVRL X0hETUlfQ0xLX0hETUlfUExMXSk7CisKKwlpZiAoRElWX1JPVU5EX0NMT1NFU1QocmF0ZSwgMTAw MCkgIT0gRElWX1JPVU5EX0NMT1NFU1QoY2xvY2ssIDEwMDApKQorCQlkZXZfd2FybihoZG1pLT5k ZXYsICJXYW50IFBMTCAldSBIeiwgZ290ICVsdSBIelxuIiwgY2xvY2ssCisJCQkgcmF0ZSk7CisJ ZWxzZQorCQlkZXZfZGJnKGhkbWktPmRldiwgIldhbnQgUExMICV1IEh6LCBnb3QgJWx1IEh6XG4i LCBjbG9jaywgcmF0ZSk7CisKKwltdGtfaGRtaV9od19jb25maWdfc3lzKGhkbWkpOworCW10a19o ZG1pX2h3X3NldF9kZWVwX2NvbG9yX21vZGUoaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyB2b2lkIG10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19oZG1pICpo ZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJbXRrX2hk bWlfaHdfcmVzZXQoaGRtaSk7CisJbXRrX2hkbWlfaHdfZW5hYmxlX25vdGljZShoZG1pLCB0cnVl KTsKKwltdGtfaGRtaV9od193cml0ZV9pbnRfbWFzayhoZG1pLCAweGZmKTsKKwltdGtfaGRtaV9o d19lbmFibGVfZHZpX21vZGUoaGRtaSwgaGRtaS0+ZHZpX21vZGUpOworCW10a19oZG1pX2h3X25j dHNfYXV0b193cml0ZV9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwltdGtfaGRtaV9od19tc2ljX3Nl dHRpbmcoaGRtaSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfYXVkX2VuYWJsZV9w YWNrZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIGVuYWJsZSkKK3sKKwltdGtfaGRtaV9o d19zZW5kX2F1ZF9wYWNrZXQoaGRtaSwgZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBtdGtfaGRtaV9hdWRfb25fb2ZmX2h3X25jdHMoc3RydWN0IG10a19oZG1pICpoZG1pLCBi b29sIG9uKQoreworCW10a19oZG1pX2h3X25jdHNfZW5hYmxlKGhkbWksIG9uKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9hdWRfc2V0X2lucHV0KHN0cnVjdCBtdGtfaGRt aSAqaGRtaSkKK3sKKwllbnVtIGhkbWlfYXVkX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7CisJdTgg Y2hhbl9jb3VudDsKKwlib29sIGRzdDsKKworCW10a19oZG1pX2h3X2F1ZF9zZXRfY2hhbm5lbF9z d2FwKGhkbWksIEhETUlfQVVEX1NXQVBfTEZFX0NDKTsKKwltdGtfaGRtaV9zZXRfYml0cyhoZG1p LCBHUkxfTUlYX0NUUkwsIE1JWF9DVFJMX0ZMQVQpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5h dWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRiAmJgorCSAgICBoZG1pLT5hdWRf cGFyYW0uYXVkX2NvZGVjID09IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUKSB7CisJCW10a19o ZG1pX2h3X2F1ZF9zZXRfYml0X251bShoZG1pLCBIRE1JX0FVRElPX1NBTVBMRV9TSVpFXzI0KTsK Kwl9IGVsc2UgaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRfaTJzX2ZtdCA9PSBIRE1JX0kyU19NT0RF X0xKVF8yNEJJVCkgeworCQloZG1pLT5hdWRfcGFyYW0uYXVkX2kyc19mbXQgPSBIRE1JX0kyU19N T0RFX0xKVF8xNkJJVDsKKwl9CisKKwltdGtfaGRtaV9od19hdWRfc2V0X2kyc19mbXQoaGRtaSwg aGRtaS0+YXVkX3BhcmFtLmF1ZF9pMnNfZm10KTsKKwltdGtfaGRtaV9od19hdWRfc2V0X2JpdF9u dW0oaGRtaSwgSERNSV9BVURJT19TQU1QTEVfU0laRV8yNCk7CisKKwlkc3QgPSAoKGhkbWktPmF1 ZF9wYXJhbS5hdWRfaW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9TUERJRikgJiYKKwkgICAg ICAgKGhkbWktPmF1ZF9wYXJhbS5hdWRfY29kZWMgPT0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9E U1QpKTsKKwltdGtfaGRtaV9od19hdWRpb19jb25maWcoaGRtaSwgZHN0KTsKKworCWlmIChoZG1p LT5hdWRfcGFyYW0uYXVkX2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfU1BESUYpCisJCWNo YW5fdHlwZSA9IEhETUlfQVVEX0NIQU5fVFlQRV8yXzA7CisJZWxzZQorCQljaGFuX3R5cGUgPSBo ZG1pLT5hdWRfcGFyYW0uYXVkX2lucHV0X2NoYW5fdHlwZTsKKwljaGFuX2NvdW50ID0gbXRrX2hk bWlfYXVkX2dldF9jaG5sX2NvdW50KGNoYW5fdHlwZSk7CisJbXRrX2hkbWlfaHdfYXVkX3NldF9p MnNfY2hhbl9udW0oaGRtaSwgY2hhbl90eXBlLCBjaGFuX2NvdW50KTsKKwltdGtfaGRtaV9od19h dWRfc2V0X2lucHV0X3R5cGUoaGRtaSwgaGRtaS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF90eXBlKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2F1ZF9zZXRfc3JjKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwKKwkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9t b2RlKQoreworCW10a19oZG1pX2F1ZF9vbl9vZmZfaHdfbmN0cyhoZG1pLCBmYWxzZSk7CisJbXRr X2hkbWlfaHdfYXVkX3NyY19kaXNhYmxlKGhkbWkpOworCW10a19oZG1pX2NsZWFyX2JpdHMoaGRt aSwgR1JMX0NGRzIsIENGRzJfQUNMS19JTlYpOworCisJaWYgKGhkbWktPmF1ZF9wYXJhbS5hdWRf aW5wdXRfdHlwZSA9PSBIRE1JX0FVRF9JTlBVVF9JMlMpIHsKKwkJc3dpdGNoIChoZG1pLT5hdWRf cGFyYW0uYXVkX2hkbWlfZnMpIHsKKwkJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lf MzIwMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzQ0MTAwOgorCQljYXNl IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDoKKwkJY2FzZSBIRE1JX0FVRElPX1NB TVBMRV9GUkVRVUVOQ1lfODgyMDA6CisJCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZ Xzk2MDAwOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQor CQltdGtfaGRtaV9od19hdWRfc2V0X21jbGsoaGRtaSwgaGRtaS0+YXVkX3BhcmFtLmF1ZF9tY2xr KTsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGhkbWktPmF1ZF9wYXJhbS5pZWNfZnJhbWVfZnMpIHsK KwkJY2FzZSBIRE1JX0lFQ18zMks6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQor CQkJCQlIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfMzIwMDA7CisJCQlicmVhazsKKwkJY2Fz ZSBIRE1JX0lFQ180OEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJCQlI RE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA7CisJCQlicmVhazsKKwkJY2FzZSBIRE1J X0lFQ180NEs6CisJCQloZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMgPQorCQkJCQlIRE1JX0FV RElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJl dHVybiAtRUlOVkFMOworCQl9CisJCW10a19oZG1pX2h3X2F1ZF9zZXRfbWNsayhoZG1pLCBIRE1J X0FVRF9NQ0xLXzEyOEZTKTsKKwl9CisJbXRrX2hkbWlfaHdfYXVkX3NldF9uY3RzKGhkbWksIGhk bWktPmF1ZF9wYXJhbS5hdWRfaGRtaV9mcywKKwkJCQkgZGlzcGxheV9tb2RlLT5jbG9jayk7CisK KwltdGtfaGRtaV9od19hdWRfc3JjX3JlZW5hYmxlKGhkbWkpOworCXJldHVybiAwOworfQorCitz dGF0aWMgaW50IG10a19oZG1pX2F1ZF9vdXRwdXRfY29uZmlnKHN0cnVjdCBtdGtfaGRtaSAqaGRt aSwKKwkJCQkgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqZGlzcGxheV9tb2RlKQorewor CW10a19oZG1pX2h3X2F1ZF9tdXRlKGhkbWkpOworCW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0 KGhkbWksIGZhbHNlKTsKKworCW10a19oZG1pX2F1ZF9zZXRfaW5wdXQoaGRtaSk7CisJbXRrX2hk bWlfYXVkX3NldF9zcmMoaGRtaSwgZGlzcGxheV9tb2RlKTsKKwltdGtfaGRtaV9od19hdWRfc2V0 X2NoYW5uZWxfc3RhdHVzKGhkbWksCisJCQkJCSAgIGhkbWktPmF1ZF9wYXJhbS5oZG1pX2xfY2hh bm5lbF9zdGF0ZSwKKwkJCQkJICAgaGRtaS0+YXVkX3BhcmFtLmhkbWlfcl9jaGFubmVsX3N0YXRl LAorCQkJCQkgICBoZG1pLT5hdWRfcGFyYW0uYXVkX2hkbWlfZnMpOworCisJdXNsZWVwX3Jhbmdl KDUwLCAxMDApOworCisJbXRrX2hkbWlfYXVkX29uX29mZl9od19uY3RzKGhkbWksIHRydWUpOwor CW10a19oZG1pX2F1ZF9lbmFibGVfcGFja2V0KGhkbWksIHRydWUpOworCW10a19oZG1pX2h3X2F1 ZF91bm11dGUoaGRtaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0 dXBfYXZpX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCisJCQkJCXN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgZnJhbWU7 CisJdTggYnVmZmVyWzE3XTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGRybV9oZG1pX2F2aV9p bmZvZnJhbWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLCBtb2RlKTsKKwlpZiAoZXJyIDwgMCkg eworCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCSJGYWlsZWQgdG8gZ2V0IEFWSSBpbmZvZnJhbWUg ZnJvbSBtb2RlOiAlemRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gaGRt aV9hdmlfaW5mb2ZyYW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlp ZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBwYWNrIEFWSSBp bmZvZnJhbWU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwltdGtfaGRtaV9o d19zZW5kX2luZm9fZnJhbWUoaGRtaSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfc2V0dXBfc3BkX2luZm9mcmFtZShzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWksCisJCQkJCWNvbnN0IGNoYXIgKnZlbmRvciwKKwkJCQkJY29uc3QgY2hh ciAqcHJvZHVjdCkKK3sKKwlzdHJ1Y3QgaGRtaV9zcGRfaW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1 ZmZlclsyOV07CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1pX3NwZF9pbmZvZnJhbWVfaW5p dCgmZnJhbWUsIHZlbmRvciwgcHJvZHVjdCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vyciho ZG1pLT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBTUEQgaW5mb2ZyYW1lOiAlemRcbiIsCisJ CQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGhkbWlfc3BkX2luZm9mcmFtZV9w YWNrKCZmcmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJaWYgKGVyciA8IDApIHsKKwkJ ZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayBTRFAgaW5mb2ZyYW1lOiAlemRcbiIs IGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbXRrX2hkbWlfaHdfc2VuZF9pbmZvX2ZyYW1l KGhkbWksIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IG10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkp Cit7CisJc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIGZyYW1lOworCXU4IGJ1ZmZlclsxNF07 CisJc3NpemVfdCBlcnI7CisKKwllcnIgPSBoZG1pX2F1ZGlvX2luZm9mcmFtZV9pbml0KCZmcmFt ZSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gc2V0 dXAgYXVkaW8gaW5mb2ZyYW1lOiAlemRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0K KworCWZyYW1lLmNvZGluZ190eXBlID0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9TVFJFQU07CisJ ZnJhbWUuc2FtcGxlX2ZyZXF1ZW5jeSA9IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV9TVFJF QU07CisJZnJhbWUuc2FtcGxlX3NpemUgPSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFX1NUUkVBTTsK KwlmcmFtZS5jaGFubmVscyA9IG10a19oZG1pX2F1ZF9nZXRfY2hubF9jb3VudCgKKwkJCQkJaGRt aS0+YXVkX3BhcmFtLmF1ZF9pbnB1dF9jaGFuX3R5cGUpOworCisJZXJyID0gaGRtaV9hdWRpb19p bmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChlcnIg PCAwKSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFpbGVkIHRvIHBhY2sgYXVkaW8gaW5mb2Zy YW1lOiAlemRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3 X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9zZXR1cF92ZW5kb3Jfc3BlY2lmaWNfaW5mb2Zy YW1lKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlKQoreworCXN0cnVjdCBoZG1pX3ZlbmRvcl9pbmZvZnJhbWUgZnJhbWU7CisJdTggYnVm ZmVyWzEwXTsKKwlzc2l6ZV90IGVycjsKKworCWVyciA9IGRybV9oZG1pX3ZlbmRvcl9pbmZvZnJh bWVfZnJvbV9kaXNwbGF5X21vZGUoJmZyYW1lLCBtb2RlKTsKKwlpZiAoZXJyKSB7CisJCWRldl9l cnIoaGRtaS0+ZGV2LAorCQkJIkZhaWxlZCB0byBnZXQgdmVuZG9yIGluZm9mcmFtZSBmcm9tIG1v ZGU6ICV6ZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBoZG1pX3ZlbmRv cl9pbmZvZnJhbWVfcGFjaygmZnJhbWUsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCWlmIChl cnIpIHsKKwkJZGV2X2VycihoZG1pLT5kZXYsICJGYWlsZWQgdG8gcGFjayB2ZW5kb3IgaW5mb2Zy YW1lOiAlemRcbiIsCisJCQllcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCW10a19oZG1pX2h3 X3NlbmRfaW5mb19mcmFtZShoZG1pLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9vdXRwdXRfaW5pdChzdHJ1Y3QgbXRrX2hkbWkg KmhkbWkpCit7CisJc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0gKmF1ZF9wYXJhbSA9ICZoZG1pLT5h dWRfcGFyYW07CisKKwloZG1pLT5jc3AgPSBIRE1JX0NPTE9SU1BBQ0VfUkdCOworCWF1ZF9wYXJh bS0+YXVkX2NvZGVjID0gSERNSV9BVURJT19DT0RJTkdfVFlQRV9QQ007CisJYXVkX3BhcmFtLT5h dWRfaGRtaV9mcyA9IEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV80ODAwMDsKKwlhdWRfcGFy YW0tPmF1ZF9zYW1wZV9zaXplID0gSERNSV9BVURJT19TQU1QTEVfU0laRV8xNjsKKwlhdWRfcGFy YW0tPmF1ZF9pbnB1dF90eXBlID0gSERNSV9BVURfSU5QVVRfSTJTOworCWF1ZF9wYXJhbS0+YXVk X2kyc19mbXQgPSBIRE1JX0kyU19NT0RFX0kyU18yNEJJVDsKKwlhdWRfcGFyYW0tPmF1ZF9tY2xr ID0gSERNSV9BVURfTUNMS18xMjhGUzsKKwlhdWRfcGFyYW0tPmllY19mcmFtZV9mcyA9IEhETUlf SUVDXzQ4SzsKKwlhdWRfcGFyYW0tPmF1ZF9pbnB1dF9jaGFuX3R5cGUgPSBIRE1JX0FVRF9DSEFO X1RZUEVfMl8wOworCWF1ZF9wYXJhbS0+aGRtaV9sX2NoYW5uZWxfc3RhdGVbMl0gPSAyOworCWF1 ZF9wYXJhbS0+aGRtaV9yX2NoYW5uZWxfc3RhdGVbMl0gPSAyOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgbXRrX2hkbWlfb3V0cHV0X3NldF9kaXNwbGF5X21vZGUoc3RydWN0IG10a19o ZG1pICpoZG1pLAorCQkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJ aW50IHJldDsKKworCW10a19oZG1pX2h3X3ZpZF9ibGFjayhoZG1pLCB0cnVlKTsKKwltdGtfaGRt aV9od19hdWRfbXV0ZShoZG1pKTsKKwltdGtfaGRtaV9od19zZW5kX2F2X211dGUoaGRtaSk7CisJ cGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOworCisJcmV0ID0gbXRrX2hkbWlfdmlkZW9fY2hhbmdl X3ZwbGwoaGRtaSwKKwkJCQkJIG1vZGUtPmNsb2NrICogMTAwMCk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGhkbWktPmRldiwgIkZhaWxlZCB0byBzZXQgdnBsbDogJWRcbiIsIHJldCk7CisJCXJl dHVybiByZXQ7CisJfQorCW10a19oZG1pX3ZpZGVvX3NldF9kaXNwbGF5X21vZGUoaGRtaSwgbW9k ZSk7CisKKwlwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsKKwltdGtfaGRtaV9hdWRfb3V0cHV0X2Nv bmZpZyhoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShoZG1p KTsKKwltdGtfaGRtaV9zZXR1cF9hdmlfaW5mb2ZyYW1lKGhkbWksIG1vZGUpOworCW10a19oZG1p X3NldHVwX3NwZF9pbmZvZnJhbWUoaGRtaSwgIm1lZGlhdGVrIiwgIk9uLWNoaXAgSERNSSIpOwor CWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfM0RfTUFTSykKKwkJbXRrX2hkbWlfc2V0 dXBfdmVuZG9yX3NwZWNpZmljX2luZm9mcmFtZShoZG1pLCBtb2RlKTsKKworCW10a19oZG1pX2h3 X3ZpZF9ibGFjayhoZG1pLCBmYWxzZSk7CisJbXRrX2hkbWlfaHdfYXVkX3VubXV0ZShoZG1pKTsK KwltdGtfaGRtaV9od19zZW5kX2F2X3VubXV0ZShoZG1pKTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG10a19oZG1pX2Nsa19uYW1lc1tNVEtfSERNSV9DTEtf Q09VTlRdID0geworCVtNVEtfSERNSV9DTEtfSERNSV9QSVhFTF0gPSAicGl4ZWwiLAorCVtNVEtf SERNSV9DTEtfSERNSV9QTExdID0gInBsbCIsCisJW01US19IRE1JX0NMS19BVURfQkNMS10gPSAi YmNsayIsCisJW01US19IRE1JX0NMS19BVURfU1BESUZdID0gInNwZGlmIiwKK307CisKK3N0YXRp YyBpbnQgbXRrX2hkbWlfZ2V0X2FsbF9jbGsoc3RydWN0IG10a19oZG1pICpoZG1pLAorCQkJCXN0 cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShtdGtfaGRtaV9jbGtfbmFtZXMpOyBpKyspIHsKKwkJaGRtaS0+Y2xrW2ldID0gb2Zf Y2xrX2dldF9ieV9uYW1lKG5wLAorCQkJCQkJICBtdGtfaGRtaV9jbGtfbmFtZXNbaV0pOworCQlp ZiAoSVNfRVJSKGhkbWktPmNsa1tpXSkpCisJCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5jbGtbaV0p OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1 ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tNVEtfSERNSV9DTEtfQVVEX0JDTEtdKTsKKwlpZiAocmV0 KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tN VEtfSERNSV9DTEtfQVVEX1NQRElGXSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1 cm4gMDsKK2VycjoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NM S19BVURfQkNMS10pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX2Ns a19kaXNhYmxlX2F1ZGlvKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkKK3sKKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19BVURfQkNMS10pOworCWNsa19kaXNhYmxl X3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfQ0xLX0FVRF9TUERJRl0pOworfQorCitzdGF0 aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBoZG1pX2Nvbm5fZGV0ZWN0KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uLAorCQkJCQkJICBib29sIGZvcmNlKQoreworCXN0cnVjdCBtdGtfaGRt aSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fY29ubihjb25uKTsKKworCXJldHVybiBtdGtfY2VjX2hw ZF9oaWdoKGhkbWktPmNlY19kZXYpID8KKwkgICAgICAgY29ubmVjdG9yX3N0YXR1c19jb25uZWN0 ZWQgOiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKK30KKworc3RhdGljIHZvaWQgaGRt aV9jb25uX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4pCit7CisJc3RydWN0IG10 a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9jb25uKGNvbm4pOworCisJbXRrX2NlY19zZXRf aHBkX2V2ZW50KGhkbWktPmNlY19kZXYsIE5VTEwsIE5VTEwpOworCisJZHJtX2Nvbm5lY3Rvcl91 bnJlZ2lzdGVyKGNvbm4pOworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uKTsKK30KKworc3Rh dGljIGludCBtdGtfaGRtaV9jb25uX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29u bikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7 CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJaW50IHJldDsKKworCWlmICghaGRtaS0+ZGRjX2FkcHQp CisJCXJldHVybiAtRU5PREVWOworCisJZWRpZCA9IGRybV9nZXRfZWRpZChjb25uLCBoZG1pLT5k ZGNfYWRwdCk7CisJaWYgKCFlZGlkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhkbWktPmR2aV9t b2RlID0gIWRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCWRybV9tb2RlX2Nvbm5l Y3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eShjb25uLCBlZGlkKTsKKworCXJldCA9IGRybV9hZGRf ZWRpZF9tb2Rlcyhjb25uLCBlZGlkKTsKKwlkcm1fZWRpZF90b19lbGQoY29ubiwgZWRpZCk7CisJ a2ZyZWUoZWRpZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtdGtfaGRtaV9jb25u X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm4sCisJCQkJICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlf Y3R4X2Zyb21fY29ubihjb25uKTsKKworCWRldl9kYmcoaGRtaS0+ZGV2LCAieHJlcz0lZCwgeXJl cz0lZCwgcmVmcmVzaD0lZCwgaW50bD0lZCBjbG9jaz0lZFxuIiwKKwkJbW9kZS0+aGRpc3BsYXks IG1vZGUtPnZkaXNwbGF5LCBtb2RlLT52cmVmcmVzaCwKKwkJISEobW9kZS0+ZmxhZ3MgJiBEUk1f TU9ERV9GTEFHX0lOVEVSTEFDRSksIG1vZGUtPmNsb2NrICogMTAwMCk7CisKKwlpZiAoaGRtaS0+ YnJpZGdlLm5leHQpIHsKKwkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgYWRqdXN0ZWRfbW9kZTsK KworCQlkcm1fbW9kZV9jb3B5KCZhZGp1c3RlZF9tb2RlLCBtb2RlKTsKKwkJaWYgKCFkcm1fYnJp ZGdlX21vZGVfZml4dXAoaGRtaS0+YnJpZGdlLm5leHQsIG1vZGUsCisJCQkJCSAgICZhZGp1c3Rl ZF9tb2RlKSkKKwkJCXJldHVybiBNT0RFX0JBRDsKKwl9CisKKwlpZiAobW9kZS0+Y2xvY2sgPCAy NzAwMCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfTE9XOworCWlmIChtb2RlLT5jbG9jayA+IDI5NzAw MCkKKwkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKKworCXJldHVybiBkcm1fbW9kZV92YWxpZGF0 ZV9zaXplKG1vZGUsIDB4MWZmZiwgMHgxZmZmKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fZW5j b2RlciAqbXRrX2hkbWlfY29ubl9iZXN0X2VuYyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubikK K3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2Nvbm4oY29ubik7CisK KwlyZXR1cm4gaGRtaS0+YnJpZGdlLmVuY29kZXI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyBtdGtfaGRtaV9jb25uZWN0b3JfZnVuY3MgPSB7CisJLmRwbXMg PSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKKwkuZGV0ZWN0ID0gaGRtaV9jb25u X2RldGVjdCwKKwkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rv cl9tb2RlcywKKwkuZGVzdHJveSA9IGhkbWlfY29ubl9kZXN0cm95LAorCS5yZXNldCA9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19k ZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUs Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzCisJ CW10a19oZG1pX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7CisJLmdldF9tb2RlcyA9IG10a19o ZG1pX2Nvbm5fZ2V0X21vZGVzLAorCS5tb2RlX3ZhbGlkID0gbXRrX2hkbWlfY29ubl9tb2RlX3Zh bGlkLAorCS5iZXN0X2VuY29kZXIgPSBtdGtfaGRtaV9jb25uX2Jlc3RfZW5jLAorfTsKKworc3Rh dGljIHZvaWQgbXRrX2hkbWlfaHBkX2V2ZW50KGJvb2wgaHBkLCBzdHJ1Y3QgZGV2aWNlICpkZXYp Cit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlp ZiAoaGRtaSAmJiBoZG1pLT5icmlkZ2UuZW5jb2RlciAmJiBoZG1pLT5icmlkZ2UuZW5jb2Rlci0+ ZGV2KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaGRtaS0+YnJpZGdlLmVuY29kZXItPmRl dik7Cit9CisKKy8qCisgKiBCcmlkZ2UgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBtdGtf aGRtaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7CisJc3RydWN0 IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsKKwlpbnQgcmV0 OworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9pbml0KGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCAmaGRt aS0+Y29ubiwKKwkJCQkgJm10a19oZG1pX2Nvbm5lY3Rvcl9mdW5jcywKKwkJCQkgRFJNX01PREVf Q09OTkVDVE9SX0hETUlBKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGRtaS0+ZGV2LCAiRmFp bGVkIHRvIGluaXRpYWxpemUgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKCZoZG1pLT5jb25uLCAmbXRrX2hkbWlfY29u bmVjdG9yX2hlbHBlcl9mdW5jcyk7CisKKwloZG1pLT5jb25uLnBvbGxlZCA9IERSTV9DT05ORUNU T1JfUE9MTF9IUEQ7CisJaGRtaS0+Y29ubi5pbnRlcmxhY2VfYWxsb3dlZCA9IHRydWU7CisJaGRt aS0+Y29ubi5kb3VibGVzY2FuX2FsbG93ZWQgPSBmYWxzZTsKKworCXJldCA9IGRybV9jb25uZWN0 b3JfcmVnaXN0ZXIoJmhkbWktPmNvbm4pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoZG1pLT5k ZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29ubmVjdG9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJu IHJldDsKKwl9CisKKwlyZXQgPSBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIoJmhk bWktPmNvbm4sCisJCQkJCQlicmlkZ2UtPmVuY29kZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vy cihoZG1pLT5kZXYsCisJCQkiRmFpbGVkIHRvIGF0dGFjaCBjb25uZWN0b3IgdG8gZW5jb2Rlcjog JWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGJyaWRnZS0+bmV4dCkgewor CQlicmlkZ2UtPm5leHQtPmVuY29kZXIgPSBicmlkZ2UtPmVuY29kZXI7CisJCXJldCA9IGRybV9i cmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2Rlci0+ZGV2LCBicmlkZ2UtPm5leHQpOworCQlpZiAo cmV0KSB7CisJCQlkZXZfZXJyKGhkbWktPmRldiwKKwkJCQkiRmFpbGVkIHRvIGF0dGFjaCBleHRl cm5hbCBicmlkZ2U6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCW10 a19jZWNfc2V0X2hwZF9ldmVudChoZG1pLT5jZWNfZGV2LCBtdGtfaGRtaV9ocGRfZXZlbnQsIGhk bWktPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgbXRrX2hkbWlfYnJpZGdl X21vZGVfZml4dXAoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKKwkJCQkgICAgICAgY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICAgIHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMg dm9pZCBtdGtfaGRtaV9icmlkZ2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7 CisKKwlpZiAoIWhkbWktPmVuYWJsZWQpCisJCXJldHVybjsKKworCXBoeV9wb3dlcl9vZmYoaGRt aS0+cGh5KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX0NMS19I RE1JX1BJWEVMXSk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPmNsa1tNVEtfSERNSV9D TEtfSERNSV9QTExdKTsKKworCWhkbWktPmVuYWJsZWQgPSBmYWxzZTsKK30KKworc3RhdGljIHZv aWQgbXRrX2hkbWlfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRn ZSk7CisKKwlpZiAoIWhkbWktPnBvd2VyZWQpCisJCXJldHVybjsKKworCW10a19oZG1pX2h3XzFw NF92ZXJzaW9uX2VuYWJsZShoZG1pLCB0cnVlKTsKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0 YWJsZShoZG1pLCBmYWxzZSk7CisKKwloZG1pLT5wb3dlcmVkID0gZmFsc2U7Cit9CisKK3N0YXRp YyB2b2lkIG10a19oZG1pX2JyaWRnZV9tb2RlX3NldChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl LAorCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCisJCQkJICAgICBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkg KmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOworCisJZGV2X2RiZyhoZG1pLT5k ZXYsICJjdXIgaW5mbzogbmFtZTolcywgaGRpc3BsYXk6JWRcbiIsCisJCWFkanVzdGVkX21vZGUt Pm5hbWUsIGFkanVzdGVkX21vZGUtPmhkaXNwbGF5KTsKKwlkZXZfZGJnKGhkbWktPmRldiwgImhz eW5jX3N0YXJ0OiVkLGhzeW5jX2VuZDolZCwgaHRvdGFsOiVkIiwKKwkJYWRqdXN0ZWRfbW9kZS0+ aHN5bmNfc3RhcnQsIGFkanVzdGVkX21vZGUtPmhzeW5jX2VuZCwKKwkJYWRqdXN0ZWRfbW9kZS0+ aHRvdGFsKTsKKwlkZXZfZGJnKGhkbWktPmRldiwgImhza2V3OiVkLCB2ZGlzcGxheTolZFxuIiwK KwkJYWRqdXN0ZWRfbW9kZS0+aHNrZXcsIGFkanVzdGVkX21vZGUtPnZkaXNwbGF5KTsKKwlkZXZf ZGJnKGhkbWktPmRldiwgInZzeW5jX3N0YXJ0OiVkLCB2c3luY19lbmQ6JWQsIHZ0b3RhbDolZCIs CisJCWFkanVzdGVkX21vZGUtPnZzeW5jX3N0YXJ0LCBhZGp1c3RlZF9tb2RlLT52c3luY19lbmQs CisJCWFkanVzdGVkX21vZGUtPnZ0b3RhbCk7CisJZGV2X2RiZyhoZG1pLT5kZXYsICJ2c2Nhbjol ZCwgZmxhZzolZFxuIiwKKwkJYWRqdXN0ZWRfbW9kZS0+dnNjYW4sIGFkanVzdGVkX21vZGUtPmZs YWdzKTsKKworCWRybV9tb2RlX2NvcHkoJmhkbWktPm1vZGUsIGFkanVzdGVkX21vZGUpOworfQor CitzdGF0aWMgdm9pZCBtdGtfaGRtaV9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJp ZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9od19tYWtlX3JlZ193cml0YWJsZShoZG1pLCB0cnVl KTsKKwltdGtfaGRtaV9od18xcDRfdmVyc2lvbl9lbmFibGUoaGRtaSwgdHJ1ZSk7CisKKwloZG1p LT5wb3dlcmVkID0gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfYnJpZGdlX2VuYWJs ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9 IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7CisKKwltdGtfaGRtaV9vdXRwdXRfc2V0X2Rp c3BsYXlfbW9kZShoZG1pLCAmaGRtaS0+bW9kZSk7CisJY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWkt PmNsa1tNVEtfSERNSV9DTEtfSERNSV9QTExdKTsKKwljbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+ Y2xrW01US19IRE1JX0NMS19IRE1JX1BJWEVMXSk7CisJcGh5X3Bvd2VyX29uKGhkbWktPnBoeSk7 CisKKwloZG1pLT5lbmFibGVkID0gdHJ1ZTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f YnJpZGdlX2Z1bmNzIG10a19oZG1pX2JyaWRnZV9mdW5jcyA9IHsKKwkuYXR0YWNoID0gbXRrX2hk bWlfYnJpZGdlX2F0dGFjaCwKKwkubW9kZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2Zp eHVwLAorCS5kaXNhYmxlID0gbXRrX2hkbWlfYnJpZGdlX2Rpc2FibGUsCisJLnBvc3RfZGlzYWJs ZSA9IG10a19oZG1pX2JyaWRnZV9wb3N0X2Rpc2FibGUsCisJLm1vZGVfc2V0ID0gbXRrX2hkbWlf YnJpZGdlX21vZGVfc2V0LAorCS5wcmVfZW5hYmxlID0gbXRrX2hkbWlfYnJpZGdlX3ByZV9lbmFi bGUsCisJLmVuYWJsZSA9IG10a19oZG1pX2JyaWRnZV9lbmFibGUsCit9OworCitzdGF0aWMgaW50 IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKKwkJCQkgICBz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1 Y3QgZGV2aWNlX25vZGUgKmNlY19ucCwgKnBvcnQsICplcCwgKnJlbW90ZSwgKmkyY19ucDsKKwlz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjZWNfcGRldjsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7 CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IHJldDsKKworCXJldCA9IG10a19oZG1pX2dl dF9hbGxfY2xrKGhkbWksIG5wKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGdldCBjbG9ja3M6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFRo ZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERNSSBob3RwbHVnIGRldGVjdGlvbiAqLworCWNlY19ucCA9 IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKG5wLT5wYXJlbnQsIE5VTEwsCisJCQkJCSAibWVkaWF0 ZWssbXQ4MTczLWNlYyIpOworCWlmICghY2VjX25wKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVk IHRvIGZpbmQgQ0VDIG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZWNfcGRl diA9IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoY2VjX25wKTsKKwlpZiAoIWNlY19wZGV2KSB7CisJ CWRldl9lcnIoaGRtaS0+ZGV2LCAiV2FpdGluZyBmb3IgQ0VDIGRldmljZSAlc1xuIiwKKwkJCWNl Y19ucC0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCWhkbWktPmNl Y19kZXYgPSAmY2VjX3BkZXYtPmRldjsKKworCS8qCisJICogVGhlIG1lZGlhdGVrLHN5c2Nvbi1o ZG1pIHByb3BlcnR5IGNvbnRhaW5zIGEgcGhhbmRsZSBsaW5rIHRvIHRoZQorCSAqIE1NU1lTX0NP TkZJRyBkZXZpY2UgYW5kIHRoZSByZWdpc3RlciBvZmZzZXQgb2YgdGhlIEhETUlfU1lTX0NGRwor CSAqIHJlZ2lzdGVycyBpdCBjb250YWlucy4KKwkgKi8KKwlyZWdtYXAgPSBzeXNjb25fcmVnbWFw X2xvb2t1cF9ieV9waGFuZGxlKG5wLCAibWVkaWF0ZWssc3lzY29uLWhkbWkiKTsKKwlyZXQgPSBv Zl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgIm1lZGlhdGVrLHN5c2Nvbi1oZG1pIiwgMSwK KwkJCQkJICZoZG1pLT5zeXNfb2Zmc2V0KTsKKwlpZiAoSVNfRVJSKHJlZ21hcCkpCisJCXJldCA9 IFBUUl9FUlIocmVnbWFwKTsKKwlpZiAocmV0KSB7CisJCXJldCA9IFBUUl9FUlIocmVnbWFwKTsK KwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGdldCBzeXN0ZW0gY29uZmlndXJhdGlvbiBy ZWdpc3RlcnM6ICVkXG4iLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaGRtaS0+c3lz X3JlZ21hcCA9IHJlZ21hcDsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJ T1JFU09VUkNFX01FTSwgMCk7CisJaGRtaS0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShk ZXYsIG1lbSk7CisJaWYgKElTX0VSUihoZG1pLT5yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIoaGRt aS0+cmVncyk7CisKKwlwb3J0ID0gb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQobnAsIDEpOworCWlm ICghcG9ydCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3Npbmcgb3V0cHV0IHBvcnQgbm9kZVxuIik7 CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVwID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUocG9y dCwgImVuZHBvaW50Iik7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgZW5k cG9pbnQgbm9kZSBpbiBwb3J0ICVzXG4iLAorCQkJcG9ydC0+ZnVsbF9uYW1lKTsKKwkJb2Zfbm9k ZV9wdXQocG9ydCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlvZl9ub2RlX3B1dChwb3J0KTsK KworCXJlbW90ZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfcG9ydF9wYXJlbnQoZXApOworCWlmICgh cmVtb3RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IvYnJpZGdlIG5vZGUg Zm9yIGVuZHBvaW50ICVzXG4iLAorCQkJZXAtPmZ1bGxfbmFtZSk7CisJCW9mX25vZGVfcHV0KGVw KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW9mX25vZGVfcHV0KGVwKTsKKworCWlmICghb2Zf ZGV2aWNlX2lzX2NvbXBhdGlibGUocmVtb3RlLCAiaGRtaS1jb25uZWN0b3IiKSkgeworCQloZG1p LT5icmlkZ2UubmV4dCA9IG9mX2RybV9maW5kX2JyaWRnZShyZW1vdGUpOworCQlpZiAoIWhkbWkt PmJyaWRnZS5uZXh0KSB7CisJCQlkZXZfZXJyKGRldiwgIldhaXRpbmcgZm9yIGV4dGVybmFsIGJy aWRnZVxuIik7CisJCQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQkJcmV0dXJuIC1FUFJPQkVfREVG RVI7CisJCX0KKwl9CisKKwlpMmNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKHJlbW90ZSwgImRkYy1p MmMtYnVzIiwgMCk7CisJaWYgKCFpMmNfbnApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8g ZmluZCBkZGMtaTJjLWJ1cyBub2RlIGluICVzXG4iLAorCQkJcmVtb3RlLT5mdWxsX25hbWUpOwor CQlvZl9ub2RlX3B1dChyZW1vdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJb2Zfbm9kZV9w dXQocmVtb3RlKTsKKworCWhkbWktPmRkY19hZHB0ID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9u b2RlKGkyY19ucCk7CisJaWYgKCFoZG1pLT5kZGNfYWRwdCkgeworCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBnZXQgZGRjIGkyYyBhZGFwdGVyIGJ5IG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdGtfZHJtX2hkbWlfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWk7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlpbnQgcmV0OworCisJaGRtaSA9 IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaSksIEdGUF9LRVJORUwpOworCWlmICghaGRt aSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZG1pLT5kZXYgPSBkZXY7CisKKwlyZXQgPSBtdGtf aGRtaV9kdF9wYXJzZV9wZGF0YShoZG1pLCBwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJaGRtaS0+cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImhkbWkiKTsKKwlpZiAoSVNfRVJS KGhkbWktPnBoeSkpIHsKKwkJcmV0ID0gUFRSX0VSUihoZG1pLT5waHkpOworCQlkZXZfZXJyKGRl diwgIkZhaWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0Owor CX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhkbWkpOworCisJcmV0ID0gbXRrX2hk bWlfb3V0cHV0X2luaXQoaGRtaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxl ZCB0byBpbml0aWFsaXplIGhkbWkgb3V0cHV0XG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlo ZG1pLT5icmlkZ2UuZnVuY3MgPSAmbXRrX2hkbWlfYnJpZGdlX2Z1bmNzOworCWhkbWktPmJyaWRn ZS5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJcmV0ID0gZHJtX2JyaWRnZV9hZGQoJmhk bWktPmJyaWRnZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQg YnJpZGdlLCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBt dGtfaGRtaV9jbGtfZW5hYmxlX2F1ZGlvKGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihk ZXYsICJGYWlsZWQgdG8gZW5hYmxlIGF1ZGlvIGNsb2NrczogJWRcbiIsIHJldCk7CisJCWdvdG8g ZXJyX2JyaWRnZV9yZW1vdmU7CisJfQorCisJZGV2X2RiZyhkZXYsICJtZWRpYXRlayBoZG1pIHBy b2JlIHN1Y2Nlc3NcbiIpOworCXJldHVybiAwOworCitlcnJfYnJpZGdlX3JlbW92ZToKKwlkcm1f YnJpZGdlX3JlbW92ZSgmaGRtaS0+YnJpZGdlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg aW50IG10a19kcm1faGRtaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sK KwlzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwor CWRybV9icmlkZ2VfcmVtb3ZlKCZoZG1pLT5icmlkZ2UpOworCW10a19oZG1pX2Nsa19kaXNhYmxl X2F1ZGlvKGhkbWkpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitz dGF0aWMgaW50IG10a19oZG1pX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVj dCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbXRrX2hkbWlfY2xr X2Rpc2FibGVfYXVkaW8oaGRtaSk7CisJZGV2X2RiZyhkZXYsICJoZG1pIHN1c3BlbmQgc3VjY2Vz cyFcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3Jlc3VtZShzdHJ1 Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2X2dldF9kcnZk YXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBtdGtfaGRtaV9jbGtfZW5hYmxlX2F1 ZGlvKGhkbWkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJoZG1pIHJlc3VtZSBmYWls ZWQhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlkZXZfZGJnKGRldiwgImhkbWkgcmVzdW1l IHN1Y2Nlc3MhXG4iKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorc3RhdGljIFNJTVBMRV9ERVZf UE1fT1BTKG10a19oZG1pX3BtX29wcywKKwkJCSBtdGtfaGRtaV9zdXNwZW5kLCBtdGtfaGRtaV9y ZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdGtfZHJtX2hkbWlf b2ZfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaSIsIH0s CisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX2RyaXZl ciA9IHsKKwkucHJvYmUgPSBtdGtfZHJtX2hkbWlfcHJvYmUsCisJLnJlbW92ZSA9IG10a19kcm1f aGRtaV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstZHJtLWhkbWki LAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hkbWlfb2ZfaWRzLAorCQkucG0gPSAmbXRr X2hkbWlfcG1fb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciAq IGNvbnN0IG10a19oZG1pX2RyaXZlcnNbXSA9IHsKKwkmbXRrX2hkbWlfcGh5X2RyaXZlciwKKwkm bXRrX2hkbWlfZGRjX2RyaXZlciwKKwkmbXRrX2NlY19kcml2ZXIsCisJJm10a19oZG1pX2RyaXZl ciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG10a19oZG1pdHhfaW5pdCh2b2lkKQoreworCWlu dCByZXQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdGtfaGRtaV9k cml2ZXJzKTsgaSsrKSB7CisJCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihtdGtfaGRt aV9kcml2ZXJzW2ldKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByX2VycigiRmFpbGVkIHRvIHJl Z2lzdGVyICVzIGRyaXZlcjogJWRcbiIsCisJCQkgICAgICAgbXRrX2hkbWlfZHJpdmVyc1tpXS0+ ZHJpdmVyLm5hbWUsIHJldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOwor CitlcnI6CisJd2hpbGUgKC0taSA+PSAwKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlciht dGtfaGRtaV9kcml2ZXJzW2ldKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9f ZXhpdCBtdGtfaGRtaXR4X2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IEFSUkFZ X1NJWkUobXRrX2hkbWlfZHJpdmVycykgLSAxOyBpID49IDA7IGktLSkKKwkJcGxhdGZvcm1fZHJp dmVyX3VucmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7Cit9CisKK21vZHVsZV9pbml0KG10 a19oZG1pdHhfaW5pdCk7Cittb2R1bGVfZXhpdChtdGtfaGRtaXR4X2V4aXQpOworCitNT0RVTEVf QVVUSE9SKCJKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQ VElPTigiTWVkaWFUZWsgSERNSSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oIGIvZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNjM3MWIzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9tdGtfaGRtaS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw MTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBKaWUgUWl1IDxqaWUucWl1QG1lZGlhdGVrLmNv bT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8K KyNpZm5kZWYgX01US19IRE1JX0NUUkxfSAorI2RlZmluZSBfTVRLX0hETUlfQ1RSTF9ICisKK3N0 cnVjdCBwbGF0Zm9ybV9kcml2ZXI7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10 a19jZWNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlfZGRj X2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2 ZXI7CisKKyNlbmRpZiAvKiBfTVRLX0hETUlfQ1RSTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0 ZWsvbXRrX2hkbWlfZGRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3 ZGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRt aV9kZGMuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRp YVRlayBJbmMuCisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICog R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+ CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xr Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5j bHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mX2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisK KyNkZWZpbmUgU0lGMV9DTE9LCQkoMjg4KQorI2RlZmluZSBERENfRERDTUNUTDAJCSgweDApCisj ZGVmaW5lIEREQ01fT0RSQUlOCQkJQklUKDMxKQorI2RlZmluZSBERENNX0NMS19ESVZfT0ZGU0VU CQkoMTYpCisjZGVmaW5lIEREQ01fQ0xLX0RJVl9NQVNLCQkoMHhmZmYgPDwgMTYpCisjZGVmaW5l IEREQ01fQ1NfU1RBVFVTCQkJQklUKDQpCisjZGVmaW5lIEREQ01fU0NMX1NUQVRFCQkJQklUKDMp CisjZGVmaW5lIEREQ01fU0RBX1NUQVRFCQkJQklUKDIpCisjZGVmaW5lIEREQ01fU00wRU4JCQlC SVQoMSkKKyNkZWZpbmUgRERDTV9TQ0xfU1RSRUNICQkJQklUKDApCisjZGVmaW5lIEREQ19ERENN Q1RMMQkJKDB4NCkKKyNkZWZpbmUgRERDTV9BQ0tfT0ZGU0VUCQkJKDE2KQorI2RlZmluZSBERENN X0FDS19NQVNLCQkJKDB4ZmYgPDwgMTYpCisjZGVmaW5lIEREQ01fUEdMRU5fT0ZGU0VUCQkoOCkK KyNkZWZpbmUgRERDTV9QR0xFTl9NQVNLCQkJKDB4NyA8PCA4KQorI2RlZmluZSBERENNX1NJRl9N T0RFX09GRlNFVAkJKDQpCisjZGVmaW5lIEREQ01fU0lGX01PREVfTUFTSwkJKDB4NyA8PCA0KQor I2RlZmluZSBERENNX1NUQVJUCQkJKDB4MSkKKyNkZWZpbmUgRERDTV9XUklURV9EQVRBCQkJKDB4 MikKKyNkZWZpbmUgRERDTV9TVE9QCQkJKDB4MykKKyNkZWZpbmUgRERDTV9SRUFEX0RBVEFfTk9f QUNLCQkoMHg0KQorI2RlZmluZSBERENNX1JFQURfREFUQV9BQ0sJCSgweDUpCisjZGVmaW5lIERE Q01fVFJJCQkJQklUKDApCisjZGVmaW5lIEREQ19ERENNRDAJCSgweDgpCisjZGVmaW5lIEREQ01f REFUQTMJCQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERDTV9EQVRBMgkJCSgweGZmIDw8IDE2KQor I2RlZmluZSBERENNX0RBVEExCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRERDTV9EQVRBMAkJCSgw eGZmIDw8IDApCisjZGVmaW5lIEREQ19ERENNRDEJCSgweGMpCisjZGVmaW5lIEREQ01fREFUQTcJ CQkoMHhmZiA8PCAyNCkKKyNkZWZpbmUgRERDTV9EQVRBNgkJCSgweGZmIDw8IDE2KQorI2RlZmlu ZSBERENNX0RBVEE1CQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgRERDTV9EQVRBNAkJCSgweGZmIDw8 IDApCisKK3N0cnVjdCBtdGtfaGRtaV9kZGMgeworCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwOwor CXN0cnVjdCBjbGsgKmNsazsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cit9OworCitzdGF0aWMgaW5s aW5lIHZvaWQgc2lmX3NldF9iaXQoc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLCB1bnNpZ25lZCBp bnQgb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCB2YWwpCit7CisJd3JpdGVsKHJlYWRs KGRkYy0+cmVncyArIG9mZnNldCkgfCB2YWwsIGRkYy0+cmVncyArIG9mZnNldCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBzaWZfY2xyX2JpdChzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHVu c2lnbmVkIGludCBvZmZzZXQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwl3cml0 ZWwocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSAmIH52YWwsIGRkYy0+cmVncyArIG9mZnNldCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaWZfYml0X2lzX3NldChzdHJ1Y3QgbXRrX2hkbWlf ZGRjICpkZGMsIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJICB1bnNpZ25lZCBpbnQgdmFsKQor eworCXJldHVybiAocmVhZGwoZGRjLT5yZWdzICsgb2Zmc2V0KSAmIHZhbCkgPT0gdmFsOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgc2lmX3dyaXRlX21hc2soc3RydWN0IG10a19oZG1pX2RkYyAq ZGRjLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJCSAgdW5zaWduZWQgaW50IG1hc2ssIHVuc2ln bmVkIGludCBzaGlmdCwKKwkJCQkgIHVuc2lnbmVkIGludCB2YWwpCit7CisJdW5zaWduZWQgaW50 IHRtcDsKKworCXRtcCA9IHJlYWRsKGRkYy0+cmVncyArIG9mZnNldCk7CisJdG1wICY9IH5tYXNr OworCXRtcCB8PSAodmFsIDw8IHNoaWZ0KSAmIG1hc2s7CisJd3JpdGVsKHRtcCwgZGRjLT5yZWdz ICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2lmX3JlYWRfbWFz ayhzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsCisJCQkJCSB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1 bnNpZ25lZCBpbnQgbWFzaywKKwkJCQkJIHVuc2lnbmVkIGludCBzaGlmdCkKK3sKKwlyZXR1cm4g KHJlYWRsKGRkYy0+cmVncyArIG9mZnNldCkgJiBtYXNrKSA+PiBzaGlmdDsKK30KKworc3RhdGlj IHZvaWQgZGRjbV90cmlnZ2VyX21vZGUoc3RydWN0IG10a19oZG1pX2RkYyAqZGRjLCBpbnQgbW9k ZSkKK3sKKwl1MzIgdmFsOworCisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUNUTDEsIERE Q01fU0lGX01PREVfTUFTSywKKwkJICAgICAgIEREQ01fU0lGX01PREVfT0ZGU0VULCBtb2RlKTsK KwlzaWZfc2V0X2JpdChkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpOworCXJlYWRsX3BvbGxf dGltZW91dChkZGMtPnJlZ3MgKyBERENfRERDTUNUTDEsIHZhbCwgdmFsICYgRERDTV9UUkksIDQs CisJCQkgICAyMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3JlYWRfbXNnKHN0 cnVjdCBtdGtfaGRtaV9kZGMgKmRkYywgc3RydWN0IGkyY19tc2cgKm1zZykKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBkZGMtPmFkYXAuZGV2LnBhcmVudDsKKwl1MzIgcmVtYWluX2NvdW50LCBh Y2tfY291bnQsIGFja19maW5hbCwgcmVhZF9jb3VudCwgdGVtcF9jb3VudDsKKwl1MzIgaW5kZXgg PSAwOworCXUzMiBhY2s7CisJaW50IGk7CisKKwlkZGNtX3RyaWdnZXJfbW9kZShkZGMsIEREQ01f U1RBUlQpOworCXNpZl93cml0ZV9tYXNrKGRkYywgRERDX0REQ01EMCwgMHhmZiwgMCwgKG1zZy0+ YWRkciA8PCAxKSB8IDB4MDEpOworCXNpZl93cml0ZV9tYXNrKGRkYywgRERDX0REQ01DVEwxLCBE RENNX1BHTEVOX01BU0ssIEREQ01fUEdMRU5fT0ZGU0VULAorCQkgICAgICAgMHgwMCk7CisJZGRj bV90cmlnZ2VyX21vZGUoZGRjLCBERENNX1dSSVRFX0RBVEEpOworCWFjayA9IHNpZl9yZWFkX21h c2soZGRjLCBERENfRERDTUNUTDEsIEREQ01fQUNLX01BU0ssIEREQ01fQUNLX09GRlNFVCk7CisJ ZGV2X2RiZyhkZXYsICJhY2sgPSAweCV4XG4iLCBhY2spOworCWlmIChhY2sgIT0gMHgwMSkgewor CQlkZXZfZXJyKGRldiwgImkyYyBhY2sgZXJyIVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQor CisJcmVtYWluX2NvdW50ID0gbXNnLT5sZW47CisJYWNrX2NvdW50ID0gKG1zZy0+bGVuIC0gMSkg LyA4OworCWFja19maW5hbCA9IDA7CisKKwl3aGlsZSAocmVtYWluX2NvdW50ID4gMCkgeworCQlp ZiAoYWNrX2NvdW50ID4gMCkgeworCQkJcmVhZF9jb3VudCA9IDg7CisJCQlhY2tfZmluYWwgPSAw OworCQkJYWNrX2NvdW50LS07CisJCX0gZWxzZSB7CisJCQlyZWFkX2NvdW50ID0gcmVtYWluX2Nv dW50OworCQkJYWNrX2ZpbmFsID0gMTsKKwkJfQorCisJCXNpZl93cml0ZV9tYXNrKGRkYywgRERD X0REQ01DVEwxLCBERENNX1BHTEVOX01BU0ssCisJCQkgICAgICAgRERDTV9QR0xFTl9PRkZTRVQs IHJlYWRfY291bnQgLSAxKTsKKwkJZGRjbV90cmlnZ2VyX21vZGUoZGRjLCAoYWNrX2ZpbmFsID09 IDEpID8KKwkJCQkgIEREQ01fUkVBRF9EQVRBX05PX0FDSyA6CisJCQkJICBERENNX1JFQURfREFU QV9BQ0spOworCisJCWFjayA9IHNpZl9yZWFkX21hc2soZGRjLCBERENfRERDTUNUTDEsIEREQ01f QUNLX01BU0ssCisJCQkJICAgIEREQ01fQUNLX09GRlNFVCk7CisJCXRlbXBfY291bnQgPSAwOwor CQl3aGlsZSAoKChhY2sgJiAoMSA8PCB0ZW1wX2NvdW50KSkgIT0gMCkgJiYgKHRlbXBfY291bnQg PCA4KSkKKwkJCXRlbXBfY291bnQrKzsKKwkJaWYgKCgoYWNrX2ZpbmFsID09IDEpICYmICh0ZW1w X2NvdW50ICE9IChyZWFkX2NvdW50IC0gMSkpKSB8fAorCQkgICAgKChhY2tfZmluYWwgPT0gMCkg JiYgKHRlbXBfY291bnQgIT0gcmVhZF9jb3VudCkpKSB7CisJCQlkZXZfZXJyKGRldiwgIkFkZHJl c3MgTkFDSyEgQUNLKDB4JXgpXG4iLCBhY2spOworCQkJYnJlYWs7CisJCX0KKworCQlmb3IgKGkg PSByZWFkX2NvdW50OyBpID49IDE7IGktLSkgeworCQkJaW50IHNoaWZ0OworCQkJaW50IG9mZnNl dDsKKworCQkJaWYgKGkgPiA0KSB7CisJCQkJb2Zmc2V0ID0gRERDX0REQ01EMTsKKwkJCQlzaGlm dCA9IChpIC0gNSkgKiA4OworCQkJfSBlbHNlIHsKKwkJCQlvZmZzZXQgPSBERENfRERDTUQwOwor CQkJCXNoaWZ0ID0gKGkgLSAxKSAqIDg7CisJCQl9CisKKwkJCW1zZy0+YnVmW2luZGV4ICsgaSAt IDFdID0gc2lmX3JlYWRfbWFzayhkZGMsIG9mZnNldCwKKwkJCQkJCQkJMHhmZiA8PCBzaGlmdCwK KwkJCQkJCQkJc2hpZnQpOworCQl9CisKKwkJcmVtYWluX2NvdW50IC09IHJlYWRfY291bnQ7CisJ CWluZGV4ICs9IHJlYWRfY291bnQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg bXRrX2hkbWlfZGRjX3dyaXRlX21zZyhzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHN0cnVjdCBp MmNfbXNnICptc2cpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGRjLT5hZGFwLmRldi5wYXJl bnQ7CisJdTMyIGFjazsKKworCWRkY21fdHJpZ2dlcl9tb2RlKGRkYywgRERDTV9TVEFSVCk7CisJ c2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUQwLCBERENNX0RBVEEwLCAwLCBtc2ctPmFkZHIg PDwgMSk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUQwLCBERENNX0RBVEExLCA4LCBt c2ctPmJ1ZlswXSk7CisJc2lmX3dyaXRlX21hc2soZGRjLCBERENfRERDTUNUTDEsIEREQ01fUEdM RU5fTUFTSywgRERDTV9QR0xFTl9PRkZTRVQsCisJCSAgICAgICAweDEpOworCWRkY21fdHJpZ2dl cl9tb2RlKGRkYywgRERDTV9XUklURV9EQVRBKTsKKworCWFjayA9IHNpZl9yZWFkX21hc2soZGRj LCBERENfRERDTUNUTDEsIEREQ01fQUNLX01BU0ssIEREQ01fQUNLX09GRlNFVCk7CisJZGV2X2Ri ZyhkZXYsICJhY2sgPSAlZFxuIiwgYWNrKTsKKworCWlmIChhY2sgIT0gMHgwMykgeworCQlkZXZf ZXJyKGRldiwgImkyYyBhY2sgZXJyIVxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2RkY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRl ciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJ c3RydWN0IG10a19oZG1pX2RkYyAqZGRjID0gYWRhcHRlci0+YWxnb19kYXRhOworCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGFkYXB0ZXItPmRldi5wYXJlbnQ7CisJaW50IHJldDsKKwlpbnQgaTsKKwor CWlmICghZGRjKSB7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCBhcmd1bWVudHNcbiIpOworCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzaWZfc2V0X2JpdChkZGMsIEREQ19ERENNQ1RMMCwgRERD TV9TQ0xfU1RSRUNIKTsKKwlzaWZfc2V0X2JpdChkZGMsIEREQ19ERENNQ1RMMCwgRERDTV9TTTBF Tik7CisJc2lmX2Nscl9iaXQoZGRjLCBERENfRERDTUNUTDAsIEREQ01fT0RSQUlOKTsKKworCWlm IChzaWZfYml0X2lzX3NldChkZGMsIEREQ19ERENNQ1RMMSwgRERDTV9UUkkpKSB7CisJCWRldl9l cnIoZGV2LCAiZGRjIGxpbmUgaXMgYnVzeSFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwor CXNpZl93cml0ZV9tYXNrKGRkYywgRERDX0REQ01DVEwwLCBERENNX0NMS19ESVZfTUFTSywKKwkJ ICAgICAgIEREQ01fQ0xLX0RJVl9PRkZTRVQsIFNJRjFfQ0xPSyk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbnVtOyBpKyspIHsKKwkJc3RydWN0IGkyY19tc2cgKm1zZyA9ICZtc2dzW2ldOworCisJCWRl dl9kYmcoZGV2LCAiaTJjIG1zZywgYWRyOjB4JXgsIGZsYWdzOiVkLCBsZW4gOjB4JXhcbiIsCisJ CQltc2ctPmFkZHIsIG1zZy0+ZmxhZ3MsIG1zZy0+bGVuKTsKKworCQlpZiAobXNnLT5mbGFncyAm IEkyQ19NX1JEKQorCQkJcmV0ID0gbXRrX2hkbWlfZGRjX3JlYWRfbXNnKGRkYywgbXNnKTsKKwkJ ZWxzZQorCQkJcmV0ID0gbXRrX2hkbWlfZGRjX3dyaXRlX21zZyhkZGMsIG1zZyk7CisJCWlmIChy ZXQgPCAwKQorCQkJZ290byB4ZmVyX2VuZDsKKwl9CisKKwlkZGNtX3RyaWdnZXJfbW9kZShkZGMs IEREQ01fU1RPUCk7CisKKwlyZXR1cm4gaTsKKworeGZlcl9lbmQ6CisJZGRjbV90cmlnZ2VyX21v ZGUoZGRjLCBERENNX1NUT1ApOworCWRldl9lcnIoZGV2LCAiZGRjIGZhaWxlZCFcbiIpOworCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgbXRrX2hkbWlfZGRjX2Z1bmMoc3RydWN0IGkyY19h ZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJV U19FTVVMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gbXRrX2hkbWlf ZGRjX2FsZ29yaXRobSA9IHsKKwkubWFzdGVyX3hmZXIgPSBtdGtfaGRtaV9kZGNfeGZlciwKKwku ZnVuY3Rpb25hbGl0eSA9IG10a19oZG1pX2RkY19mdW5jLAorfTsKKworc3RhdGljIGludCBtdGtf aGRtaV9kZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYzsKKwlz dHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgcmV0OworCisJZGRjID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKHN0cnVjdCBtdGtfaGRtaV9kZGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRkYykK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlkZGMtPmNsayA9IGRldm1fY2xrX2dldChkZXYsICJkZGMt aTJjIik7CisJaWYgKElTX0VSUihkZGMtPmNsaykpIHsKKwkJZGV2X2VycihkZXYsICJnZXQgZGRj X2NsayBmYWlsZWQ6ICVwICxcbiIsIGRkYy0+Y2xrKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGRjLT5j bGspOworCX0KKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7CisJZGRjLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYs IG1lbSk7CisJaWYgKElTX0VSUihkZGMtPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihkZGMtPnJl Z3MpOworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRkYy0+Y2xrKTsKKwlpZiAocmV0KSB7 CisJCWRldl9lcnIoZGV2LCAiZW5hYmxlIGRkYyBjbGsgZmFpbGVkIVxuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJc3RybGNweShkZGMtPmFkYXAubmFtZSwgIm1lZGlhdGVrLWhkbWktZGRjIiwg c2l6ZW9mKGRkYy0+YWRhcC5uYW1lKSk7CisJZGRjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7 CisJZGRjLT5hZGFwLmNsYXNzID0gSTJDX0NMQVNTX0REQzsKKwlkZGMtPmFkYXAuYWxnbyA9ICZt dGtfaGRtaV9kZGNfYWxnb3JpdGhtOworCWRkYy0+YWRhcC5yZXRyaWVzID0gMzsKKwlkZGMtPmFk YXAuZGV2Lm9mX25vZGUgPSBkZXYtPm9mX25vZGU7CisJZGRjLT5hZGFwLmFsZ29fZGF0YSA9IGRk YzsKKwlkZGMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlyZXQgPSBpMmNfYWRk X2FkYXB0ZXIoJmRkYy0+YWRhcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJm YWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CisJCWdvdG8gZXJyX2Nsa19kaXNhYmxl OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRkYyk7CisKKwlkZXZfZGJnKGRl diwgImRkYy0+YWRhcDogJXBcbiIsICZkZGMtPmFkYXApOworCWRldl9kYmcoZGV2LCAiZGRjLT5j bGs6ICVwXG4iLCBkZGMtPmNsayk7CisJZGV2X2RiZyhkZXYsICJwaHlzaWNhbCBhZHI6IDB4JWxs eCwgZW5kOiAweCVsbHhcbiIsIG1lbS0+c3RhcnQsCisJCW1lbS0+ZW5kKTsKKworCXJldHVybiAw OworCitlcnJfY2xrX2Rpc2FibGU6CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRkYy0+Y2xrKTsK KwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG10a19oZG1pX2RkY19yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWkyY19kZWxfYWRhcHRlcigmZGRjLT5hZGFw KTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGRjLT5jbGspOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19oZG1pX2RkY19tYXRjaFtdID0g eworCXsgLmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTczLWhkbWktZGRjIiwgfSwKKwl7fSwK K307CisKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hkbWlfZGRjX2RyaXZlciA9IHsKKwku cHJvYmUgPSBtdGtfaGRtaV9kZGNfcHJvYmUsCisJLnJlbW92ZSA9IG10a19oZG1pX2RkY19yZW1v dmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibWVkaWF0ZWstaGRtaS1kZGMiLAorCQkub2Zf bWF0Y2hfdGFibGUgPSBtdGtfaGRtaV9kZGNfbWF0Y2gsCisJfSwKK307CisKK01PRFVMRV9BVVRI T1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9O KCJNZWRpYVRlayBIRE1JIEREQyBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmggYi9k cml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjIwOWZiZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVncy5oCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICog Q29weXJpZ2h0IChjKSAyMDE0IE1lZGlhVGVrIEluYy4KKyAqIEF1dGhvcjogSmllIFFpdSA8amll LnFpdUBtZWRpYXRlay5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICovCisjaWZuZGVmIF9NVEtfSERNSV9SRUdTX0gKKyNkZWZpbmUgX01US19I RE1JX1JFR1NfSAorCisjZGVmaW5lIEdSTF9JTlRfTUFTSwkJMHgxOAorI2RlZmluZSBHUkxfSUZN X1BPUlQJCTB4MTg4CisjZGVmaW5lIEdSTF9DSF9TV0FQCQkweDE5OAorI2RlZmluZSBMUl9TV0FQ CQkJCUJJVCgwKQorI2RlZmluZSBMRkVfQ0NfU1dBUAkJCUJJVCgxKQorI2RlZmluZSBMU1JTX1NX QVAJCQlCSVQoMikKKyNkZWZpbmUgUkxTX1JSU19TV0FQCQkJQklUKDMpCisjZGVmaW5lIExSX1NU QVRVU19TV0FQCQkJQklUKDQpCisjZGVmaW5lIEdSTF9JMlNfQ19TVEEwCQkweDE0MAorI2RlZmlu ZSBHUkxfSTJTX0NfU1RBMQkJMHgxNDQKKyNkZWZpbmUgR1JMX0kyU19DX1NUQTIJCTB4MTQ4Cisj ZGVmaW5lIEdSTF9JMlNfQ19TVEEzCQkweDE0QworI2RlZmluZSBHUkxfSTJTX0NfU1RBNAkJMHgx NTAKKyNkZWZpbmUgR1JMX0kyU19VVgkJMHgxNTQKKyNkZWZpbmUgSTJTX1VWX1YJCQlCSVQoMCkK KyNkZWZpbmUgSTJTX1VWX1UJCQlCSVQoMSkKKyNkZWZpbmUgSTJTX1VWX0NIX0VOX01BU0sJCTB4 M2MKKyNkZWZpbmUgSTJTX1VWX0NIX0VOKHgpCQkJQklUKCh4KSArIDIpCisjZGVmaW5lIEkyU19V Vl9UTURTX0RFQlVHCQlCSVQoNikKKyNkZWZpbmUgSTJTX1VWX05PUk1BTF9JTkZPX0lOVgkJQklU KDcpCisjZGVmaW5lIEdSTF9BQ1BfSVNSQ19DVFJMCTB4MTU4CisjZGVmaW5lIFZTX0VOCQkJCUJJ VCgwKQorI2RlZmluZSBBQ1BfRU4JCQkJQklUKDEpCisjZGVmaW5lIElTUkMxX0VOCQkJQklUKDIp CisjZGVmaW5lIElTUkMyX0VOCQkJQklUKDMpCisjZGVmaW5lIEdBTVVUX0VOCQkJQklUKDQpCisj ZGVmaW5lIEdSTF9DVFNfQ1RSTAkJMHgxNjAKKyNkZWZpbmUgQ1RTX0NUUkxfU09GVAkJCUJJVCgw KQorI2RlZmluZSBHUkxfSU5UCQkJMHgxNAorI2RlZmluZSBJTlRfTURJCQkJCUJJVCgwKQorI2Rl ZmluZSBJTlRfSERDUAkJCUJJVCgxKQorI2RlZmluZSBJTlRfRklGT19PCQkJQklUKDIpCisjZGVm aW5lIElOVF9GSUZPX1UJCQlCSVQoMykKKyNkZWZpbmUgSU5UX0lGTV9FUlIJCQlCSVQoNCkKKyNk ZWZpbmUgSU5UX0lORl9ET05FCQkJQklUKDUpCisjZGVmaW5lIElOVF9OQ1RTX0RPTkUJCQlCSVQo NikKKyNkZWZpbmUgSU5UX0NUUkxfUEtUX0RPTkUJCUJJVCg3KQorI2RlZmluZSBHUkxfSU5UX01B U0sJCTB4MTgKKyNkZWZpbmUgR1JMX0NUUkwJCTB4MUMKKyNkZWZpbmUgQ1RSTF9HRU5fRU4JCQlC SVQoMikKKyNkZWZpbmUgQ1RSTF9TUERfRU4JCQlCSVQoMykKKyNkZWZpbmUgQ1RSTF9NUEVHX0VO CQkJQklUKDQpCisjZGVmaW5lIENUUkxfQVVESU9fRU4JCQlCSVQoNSkKKyNkZWZpbmUgQ1RSTF9B VklfRU4JCQlCSVQoNikKKyNkZWZpbmUgQ1RSTF9BVk1VVEUJCQlCSVQoNykKKyNkZWZpbmUJR1JM X1NUQVRVUwkJMHgyMAorI2RlZmluZSBTVEFUVVNfSFRQTEcJCQlCSVQoMCkKKyNkZWZpbmUgU1RB VFVTX1BPUkQJCQlCSVQoMSkKKyNkZWZpbmUgR1JMX0RJVk4JCTB4MTcwCisjZGVmaW5lIE5DVFNf V1JJX0FOWVRJTUUJCUJJVCg2KQorI2RlZmluZSBHUkxfQVVESU9fQ0ZHCQkweDE3QworI2RlZmlu ZSBBVURJT19aRVJPCQkJQklUKDApCisjZGVmaW5lIEhJR0hfQklUX1JBVEUJCQlCSVQoMSkKKyNk ZWZpbmUgU0FDRF9EU1QJCQlCSVQoMikKKyNkZWZpbmUgRFNUX05PUk1BTF9ET1VCTEUJCUJJVCgz KQorI2RlZmluZSBEU0RfSU5WCQkJCUJJVCg0KQorI2RlZmluZSBMUl9JTlYJCQkJQklUKDUpCisj ZGVmaW5lIExSX01JWAkJCQlCSVQoNikKKyNkZWZpbmUgRFNEX1NFTAkJCQlCSVQoNykKKyNkZWZp bmUgR1JMX05DVFMJCTB4MTg0CisjZGVmaW5lIEdSTF9DSF9TVzAJCTB4MThDCisjZGVmaW5lIEdS TF9DSF9TVzEJCTB4MTkwCisjZGVmaW5lIEdSTF9DSF9TVzIJCTB4MTk0CisjZGVmaW5lIENIX1NX SVRDSChmcm9tLCB0bykJCSgoZnJvbSkgPDwgKCh0bykgKiAzKSkKKyNkZWZpbmUgR1JMX0lORk9G Uk1fVkVSCQkweDE5QworI2RlZmluZSBHUkxfSU5GT0ZSTV9UWVBFCTB4MUEwCisjZGVmaW5lIEdS TF9JTkZPRlJNX0xORwkJMHgxQTQKKyNkZWZpbmUgR1JMX01JWF9DVFJMCQkweDFCNAorI2RlZmlu ZSBNSVhfQ1RSTF9TUkNfRU4JCQlCSVQoMCkKKyNkZWZpbmUgQllQQVNTX1ZPTFVNRQkJCUJJVCgx KQorI2RlZmluZSBNSVhfQ1RSTF9GTEFUCQkJQklUKDcpCisjZGVmaW5lIEdSTF9BT1VUX0NGRwkJ MHgxQzQKKyNkZWZpbmUgQU9VVF9CTlVNX1NFTF9NQVNLCQkweDAzCisjZGVmaW5lIEFPVVRfMjRC SVQJCQkweDAwCisjZGVmaW5lIEFPVVRfMjBCSVQJCQkweDAyCisjZGVmaW5lIEFPVVRfMTZCSVQJ CQkweDAzCisjZGVmaW5lIEFPVVRfRklGT19BREFQX0NUUkwJCUJJVCg2KQorI2RlZmluZSBBT1VU X0JVUlNUX1BSRUFNQkxFX0VOCQlCSVQoNykKKyNkZWZpbmUgSElHSF9CSVRfUkFURV9QQUNLRVRf QUxJR04JKEFPVVRfQlVSU1RfUFJFQU1CTEVfRU4gfCBcCisJCQkJCSBBT1VUX0ZJRk9fQURBUF9D VFJMKQorI2RlZmluZSBHUkxfU0hJRlRfTDEJCTB4MUMwCisjZGVmaW5lIEdSTF9TSElGVF9SMgkJ MHgxQjAKKyNkZWZpbmUgQVVESU9fUEFDS0VUX09GRgkJQklUKDYpCisjZGVmaW5lIEdSTF9DRkcw CQkweDI0CisjZGVmaW5lIENGRzBfSTJTX01PREVfTUFTSwkJMHgzCisjZGVmaW5lIENGRzBfSTJT X01PREVfUlRKCQkweDEKKyNkZWZpbmUgQ0ZHMF9JMlNfTU9ERV9MVEoJCTB4MAorI2RlZmluZSBD RkcwX0kyU19NT0RFX0kyUwkJMHgyCisjZGVmaW5lIENGRzBfV19MRU5HVEhfTUFTSwkJMHgzMAor I2RlZmluZSBDRkcwX1dfTEVOR1RIXzI0QklUCQkweDAwCisjZGVmaW5lIENGRzBfV19MRU5HVEhf MTZCSVQJCTB4MTAKKyNkZWZpbmUgR1JMX0NGRzEJCTB4MjgKKyNkZWZpbmUgQ0ZHMV9FREdfU0VM CQkJQklUKDApCisjZGVmaW5lIENGRzFfU1BESUYJCQlCSVQoMSkKKyNkZWZpbmUgQ0ZHMV9EVkkJ CQlCSVQoMikKKyNkZWZpbmUgQ0ZHMV9IRENQX0RFQlVHCQkJQklUKDMpCisjZGVmaW5lIEdSTF9D RkcyCQkweDJjCisjZGVmaW5lIENGRzJfTUhMX0RFX1NFTAkJCUJJVCgzKQorI2RlZmluZSBDRkcy X01ITF9GQUtFX0RFX1NFTAkJQklUKDQpCisjZGVmaW5lIENGRzJfTUhMX0RBVEFfUkVNQVAJCUJJ VCg1KQorI2RlZmluZSBDRkcyX05PVElDRV9FTgkJCUJJVCg2KQorI2RlZmluZSBDRkcyX0FDTEtf SU5WCQkJQklUKDcpCisjZGVmaW5lIEdSTF9DRkczCQkweDMwCisjZGVmaW5lIENGRzNfQUVTX0tF WV9JTkRFWF9NQVNLCQkweDNmCisjZGVmaW5lIENGRzNfQ09OVFJPTF9QQUNLRVRfREVMQVkJQklU KDYpCisjZGVmaW5lIENGRzNfS1NWX0xPQURfU1RBUlQJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZH NAkJMHgzNAorI2RlZmluZSBDRkc0X0FFU19LRVlfTE9BRAkJQklUKDQpCisjZGVmaW5lIENGRzRf QVZfVU5NVVRFX0VOCQlCSVQoNSkKKyNkZWZpbmUgQ0ZHNF9BVl9VTk1VVEVfU0VUCQlCSVQoNikK KyNkZWZpbmUgQ0ZHNF9NSExfTU9ERQkJCUJJVCg3KQorI2RlZmluZSBHUkxfQ0ZHNQkJMHgzOAor I2RlZmluZSBDRkc1X0NEX1JBVElPX01BU0sJMHg4RgorI2RlZmluZSBDRkc1X0ZTMTI4CQkJKDB4 MSA8PCA0KQorI2RlZmluZSBDRkc1X0ZTMjU2CQkJKDB4MiA8PCA0KQorI2RlZmluZSBDRkc1X0ZT Mzg0CQkJKDB4MyA8PCA0KQorI2RlZmluZSBDRkc1X0ZTNTEyCQkJKDB4NCA8PCA0KQorI2RlZmlu ZSBDRkc1X0ZTNzY4CQkJKDB4NiA8PCA0KQorI2RlZmluZSBEVU1NWV8zMDQJCTB4MzA0CisjZGVm aW5lIENITU9fU0VMCQkJKDB4MyA8PCAyKQorI2RlZmluZSBDSE0xX1NFTAkJCSgweDMgPDwgNCkK KyNkZWZpbmUgQ0hNMl9TRUwJCQkoMHgzIDw8IDYpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NF TAkJQklUKDEpCisjZGVmaW5lIEFVRElPX0kyU19OQ1RTX1NFTF82NAkJKDEgPDwgMSkKKyNkZWZp bmUgQVVESU9fSTJTX05DVFNfU0VMXzEyOAkJKDAgPDwgMSkKKyNkZWZpbmUgTkVXX0dDUF9DVFJM CQkJQklUKDApCisjZGVmaW5lIE5FV19HQ1BfQ1RSTF9NRVJHRQkJQklUKDApCisjZGVmaW5lIEdS TF9MX1NUQVRVU18wCQkweDIwMAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMQkJMHgyMDQKKyNkZWZp bmUgR1JMX0xfU1RBVFVTXzIJCTB4MjA4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18zCQkweDIwYwor I2RlZmluZSBHUkxfTF9TVEFUVVNfNAkJMHgyMTAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzUJCTB4 MjE0CisjZGVmaW5lIEdSTF9MX1NUQVRVU182CQkweDIxOAorI2RlZmluZSBHUkxfTF9TVEFUVVNf NwkJMHgyMWMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzgJCTB4MjIwCisjZGVmaW5lIEdSTF9MX1NU QVRVU185CQkweDIyNAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTAJCTB4MjI4CisjZGVmaW5lIEdS TF9MX1NUQVRVU18xMQkJMHgyMmMKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzEyCQkweDIzMAorI2Rl ZmluZSBHUkxfTF9TVEFUVVNfMTMJCTB4MjM0CisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNAkJMHgy MzgKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzE1CQkweDIzYworI2RlZmluZSBHUkxfTF9TVEFUVVNf MTYJCTB4MjQwCisjZGVmaW5lIEdSTF9MX1NUQVRVU18xNwkJMHgyNDQKKyNkZWZpbmUgR1JMX0xf U1RBVFVTXzE4CQkweDI0OAorI2RlZmluZSBHUkxfTF9TVEFUVVNfMTkJCTB4MjRjCisjZGVmaW5l IEdSTF9MX1NUQVRVU18yMAkJMHgyNTAKKyNkZWZpbmUgR1JMX0xfU1RBVFVTXzIxCQkweDI1NAor I2RlZmluZSBHUkxfTF9TVEFUVVNfMjIJCTB4MjU4CisjZGVmaW5lIEdSTF9MX1NUQVRVU18yMwkJ MHgyNWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzAJCTB4MjYwCisjZGVmaW5lIEdSTF9SX1NUQVRV U18xCQkweDI2NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMgkJMHgyNjgKKyNkZWZpbmUgR1JMX1Jf U1RBVFVTXzMJCTB4MjZjCisjZGVmaW5lIEdSTF9SX1NUQVRVU180CQkweDI3MAorI2RlZmluZSBH UkxfUl9TVEFUVVNfNQkJMHgyNzQKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzYJCTB4Mjc4CisjZGVm aW5lIEdSTF9SX1NUQVRVU183CQkweDI3YworI2RlZmluZSBHUkxfUl9TVEFUVVNfOAkJMHgyODAK KyNkZWZpbmUgR1JMX1JfU1RBVFVTXzkJCTB4Mjg0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMAkJ MHgyODgKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzExCQkweDI4YworI2RlZmluZSBHUkxfUl9TVEFU VVNfMTIJCTB4MjkwCisjZGVmaW5lIEdSTF9SX1NUQVRVU18xMwkJMHgyOTQKKyNkZWZpbmUgR1JM X1JfU1RBVFVTXzE0CQkweDI5OAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTUJCTB4MjljCisjZGVm aW5lIEdSTF9SX1NUQVRVU18xNgkJMHgyYTAKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzE3CQkweDJh NAorI2RlZmluZSBHUkxfUl9TVEFUVVNfMTgJCTB4MmE4CisjZGVmaW5lIEdSTF9SX1NUQVRVU18x OQkJMHgyYWMKKyNkZWZpbmUgR1JMX1JfU1RBVFVTXzIwCQkweDJiMAorI2RlZmluZSBHUkxfUl9T VEFUVVNfMjEJCTB4MmI0CisjZGVmaW5lIEdSTF9SX1NUQVRVU18yMgkJMHgyYjgKKyNkZWZpbmUg R1JMX1JfU1RBVFVTXzIzCQkweDJiYworI2RlZmluZSBHUkxfQUJJU1RfQ1RSTDAJCTB4MkQ0Cisj ZGVmaW5lIEdSTF9BQklTVF9DVFJMMQkJMHgyRDgKKyNkZWZpbmUgQUJJU1RfRU4JCQlCSVQoNykK KyNkZWZpbmUgQUJJU1RfREFUQV9GTVQJCQkoMHg3IDw8IDApCisjZGVmaW5lIFZJREVPX0NGR18w CQkweDM4MAorI2RlZmluZSBWSURFT19DRkdfMQkJMHgzODQKKyNkZWZpbmUgVklERU9fQ0ZHXzIJ CTB4Mzg4CisjZGVmaW5lIFZJREVPX0NGR18zCQkweDM4YworI2RlZmluZSBWSURFT19DRkdfNAkJ MHgzOTAKKyNkZWZpbmUgVklERU9fU09VUkNFX1NFTAkJQklUKDcpCisjZGVmaW5lIE5PUk1BTF9Q QVRICQkJKDEgPDwgNykKKyNkZWZpbmUgR0VOX1JHQgkJCQkoMCA8PCA3KQorCisjZGVmaW5lIEhE TUlfU1lTX0NGRzFDCQkweDAwMAorI2RlZmluZSBIRE1JX09OCQkJCUJJVCgwKQorI2RlZmluZSBI RE1JX1JTVAkJCUJJVCgxKQorI2RlZmluZSBBTkxHX09OCQkJCUJJVCgyKQorI2RlZmluZSBDRkcx MF9EVkkJCQlCSVQoMykKKyNkZWZpbmUgSERNSV9UU1QJCQlCSVQoMykKKyNkZWZpbmUgU1lTX0tF WU1BU0sxCQkJKDB4ZmYgPDwgOCkKKyNkZWZpbmUgU1lTX0tFWU1BU0syCQkJKDB4ZmYgPDwgMTYp CisjZGVmaW5lIEFVRF9PVVRTWU5DX0VOCQkJQklUKDI0KQorI2RlZmluZSBBVURfT1VUU1lOQ19Q UkVfRU4JCUJJVCgyNSkKKyNkZWZpbmUgSTJDTV9PTgkJCQlCSVQoMjYpCisjZGVmaW5lIEUyUFJP TV9UWVBFXzhCSVQJCUJJVCgyNykKKyNkZWZpbmUgTUNNX0UyUFJPTV9PTgkJCUJJVCgyOCkKKyNk ZWZpbmUgRVhUX0UyUFJPTV9PTgkJCUJJVCgyOSkKKyNkZWZpbmUgSFRQTEdfUElOX1NFTF9PRkYJ CUJJVCgzMCkKKyNkZWZpbmUgQUVTX0VGVVNFX0VOQUJMRQkJQklUKDMxKQorI2RlZmluZSBIRE1J X1NZU19DRkcyMAkJMHgwMDQKKyNkZWZpbmUgREVFUF9DT0xPUl9NT0RFX01BU0sJCSgzIDw8IDEp CisjZGVmaW5lIENPTE9SXzhCSVRfTU9ERQkJCSgwIDw8IDEpCisjZGVmaW5lIENPTE9SXzEwQklU X01PREUJCSgxIDw8IDEpCisjZGVmaW5lIENPTE9SXzEyQklUX01PREUJCSgyIDw8IDEpCisjZGVm aW5lIENPTE9SXzE2QklUX01PREUJCSgzIDw8IDEpCisjZGVmaW5lIERFRVBfQ09MT1JfRU4JCQlC SVQoMCkKKyNkZWZpbmUgSERNSV9BVURJT19URVNUX1NFTAkJQklUKDgpCisjZGVmaW5lIEhETUky UDBfRU4JCQlCSVQoMTEpCisjZGVmaW5lIEhETUlfT1VUX0ZJRk9fRU4JCUJJVCgxNikKKyNkZWZp bmUgSERNSV9PVVRfRklGT19DTEtfSU5WCQlCSVQoMTcpCisjZGVmaW5lIE1ITF9NT0RFX09OCQkJ QklUKDI4KQorI2RlZmluZSBNSExfUFBfTU9ERQkJCUJJVCgyOSkKKyNkZWZpbmUgTUhMX1NZTkNf QVVUT19FTgkJQklUKDMwKQorI2RlZmluZSBIRE1JX1BDTEtfRlJFRV9SVU4JCUJJVCgzMSkKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19o ZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHku YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTI0NzU0Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYwpA QCAtMCwwICsxLDUxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBNZWRpYVRlayBJbmMu CisgKiBBdXRob3I6IEppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGlu dXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9z eXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkv cGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KKworI2RlZmluZSBIRE1JX0NPTjAJCTB4MDAKKyNkZWZpbmUgUkdfSERNSVRY X1BMTF9FTgkJQklUKDMxKQorI2RlZmluZSBSR19IRE1JVFhfUExMX0ZCS0RJVgkJKDB4N2YgPDwg MjQpCisjZGVmaW5lIFBMTF9GQktESVZfU0hJRlQJCTI0CisjZGVmaW5lIFJHX0hETUlUWF9QTExf RkJLU0VMCQkoMHgzIDw8IDIyKQorI2RlZmluZSBQTExfRkJLU0VMX1NISUZUCQkyMgorI2RlZmlu ZSBSR19IRE1JVFhfUExMX1BSRURJVgkJKDB4MyA8PCAyMCkKKyNkZWZpbmUgUFJFRElWX1NISUZU CQkJMjAKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9QT1NESVYJCSgweDMgPDwgMTgpCisjZGVmaW5l IFBPU0RJVl9TSElGVAkJCTE4CisjZGVmaW5lIFJHX0hETUlUWF9QTExfUlNUX0RMWQkJKDB4MyA8 PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9JUgkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUExM X0lSX1NISUZUCQkJMTIKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9JQwkJKDB4ZiA8PCA4KQorI2Rl ZmluZSBQTExfSUNfU0hJRlQJCQk4CisjZGVmaW5lIFJHX0hETUlUWF9QTExfQlAJCSgweGYgPDwg NCkKKyNkZWZpbmUgUExMX0JQX1NISUZUCQkJNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0JSCQko MHgzIDw8IDIpCisjZGVmaW5lIFBMTF9CUl9TSElGVAkJCTIKKyNkZWZpbmUgUkdfSERNSVRYX1BM TF9CQwkJKDB4MyA8PCAwKQorI2RlZmluZSBQTExfQkNfU0hJRlQJCQkwCisjZGVmaW5lIEhETUlf Q09OMQkJMHgwNAorI2RlZmluZSBSR19IRE1JVFhfUExMX0RJVkVOCQkoMHg3IDw8IDI5KQorI2Rl ZmluZSBQTExfRElWRU5fU0hJRlQJCQkyOQorI2RlZmluZSBSR19IRE1JVFhfUExMX0FVVE9LX0VO CQlCSVQoMjgpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQVVUT0tfS0YJCSgweDMgPDwgMjYpCisj ZGVmaW5lIFJHX0hETUlUWF9QTExfQVVUT0tfS1MJCSgweDMgPDwgMjQpCisjZGVmaW5lIFJHX0hE TUlUWF9QTExfQVVUT0tfTE9BRAlCSVQoMjMpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfQkFORAkJ KDB4M2YgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfUkVGX1NFTAkJQklUKDE1KQorI2Rl ZmluZSBSR19IRE1JVFhfUExMX0JJQVNfRU4JCUJJVCgxNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BM TF9CSUFTX0xQRl9FTglCSVQoMTMpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfVFhESVZfRU4JCUJJ VCgxMikKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9UWERJVgkJKDB4MyA8PCAxMCkKKyNkZWZpbmUg UExMX1RYRElWX1NISUZUCQkJMTAKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9MVlJPRF9FTgkJQklU KDkpCisjZGVmaW5lIFJHX0hETUlUWF9QTExfTU9OVkNfRU4JCUJJVCg4KQorI2RlZmluZSBSR19I RE1JVFhfUExMX01PTkNLX0VOCQlCSVQoNykKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9NT05SRUZf RU4JCUJJVCg2KQorI2RlZmluZSBSR19IRE1JVFhfUExMX1RTVF9FTgkJQklUKDUpCisjZGVmaW5l IFJHX0hETUlUWF9QTExfVFNUX0NLX0VOCQlCSVQoNCkKKyNkZWZpbmUgUkdfSERNSVRYX1BMTF9U U1RfU0VMCQkoMHhmIDw8IDApCisjZGVmaW5lIEhETUlfQ09OMgkJMHgwOAorI2RlZmluZSBSR1Nf SERNSVRYX1BMTF9BVVRPS19CQU5ECSgweDdmIDw8IDgpCisjZGVmaW5lIFJHU19IRE1JVFhfUExM X0FVVE9LX0ZBSUwJQklUKDEpCisjZGVmaW5lIFJHX0hETUlUWF9FTl9UWF9DS0xETwkJQklUKDAp CisjZGVmaW5lIEhETUlfQ09OMwkJMHgwYworI2RlZmluZSBSR19IRE1JVFhfU0VSX0VOCQkoMHhm IDw8IDI4KQorI2RlZmluZSBSR19IRE1JVFhfUFJEX0VOCQkoMHhmIDw8IDI0KQorI2RlZmluZSBS R19IRE1JVFhfUFJEX0lNUF9FTgkJKDB4ZiA8PCAyMCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9F TgkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfRU4JCSgweGYgPDwgMTIp CisjZGVmaW5lIERSVl9JTVBfRU5fU0hJRlQJCTEyCisjZGVmaW5lIFJHX0hETUlUWF9NSExDS19G T1JDRQkJQklUKDEwKQorI2RlZmluZSBSR19IRE1JVFhfTUhMQ0tfUFBJWF9FTgkJQklUKDkpCisj ZGVmaW5lIFJHX0hETUlUWF9NSExDS19FTgkJQklUKDgpCisjZGVmaW5lIFJHX0hETUlUWF9TRVJf RElOX1NFTAkJKDB4ZiA8PCA0KQorI2RlZmluZSBSR19IRE1JVFhfU0VSXzVUMV9CSVNUX0VOCUJJ VCgzKQorI2RlZmluZSBSR19IRE1JVFhfU0VSX0JJU1RfVE9HCQlCSVQoMikKKyNkZWZpbmUgUkdf SERNSVRYX1NFUl9ESU5fVE9HCQlCSVQoMSkKKyNkZWZpbmUgUkdfSERNSVRYX1NFUl9DTEtESUdf SU5WCUJJVCgwKQorI2RlZmluZSBIRE1JX0NPTjQJCTB4MTAKKyNkZWZpbmUgUkdfSERNSVRYX1BS RF9JQklBU19DTEsJCSgweGYgPDwgMjQpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfRDIJ CSgweGYgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9QUkRfSUJJQVNfRDEJCSgweGYgPDwgOCkK KyNkZWZpbmUgUkdfSERNSVRYX1BSRF9JQklBU19EMAkJKDB4ZiA8PCAwKQorI2RlZmluZSBQUkRf SUJJQVNfQ0xLX1NISUZUCQkyNAorI2RlZmluZSBQUkRfSUJJQVNfRDJfU0hJRlQJCTE2CisjZGVm aW5lIFBSRF9JQklBU19EMV9TSElGVAkJOAorI2RlZmluZSBQUkRfSUJJQVNfRDBfU0hJRlQJCTAK KyNkZWZpbmUgSERNSV9DT041CQkweDE0CisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfQ0xL CQkoMHgzZiA8PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JQklBU19EMgkJKDB4M2YgPDwg MTYpCisjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVNfRDEJCSgweDNmIDw8IDgpCisjZGVmaW5l IFJHX0hETUlUWF9EUlZfSUJJQVNfRDAJCSgweDNmIDw8IDApCisjZGVmaW5lIERSVl9JQklBU19D TEtfU0hJRlQJCTI0CisjZGVmaW5lIERSVl9JQklBU19EMl9TSElGVAkJMTYKKyNkZWZpbmUgRFJW X0lCSUFTX0QxX1NISUZUCQk4CisjZGVmaW5lIERSVl9JQklBU19EMF9TSElGVAkJMAorI2RlZmlu ZSBIRE1JX0NPTjYJCTB4MTgKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfQ0xLCQkoMHgzZiA8 PCAyNCkKKyNkZWZpbmUgUkdfSERNSVRYX0RSVl9JTVBfRDIJCSgweDNmIDw8IDE2KQorI2RlZmlu ZSBSR19IRE1JVFhfRFJWX0lNUF9EMQkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgUkdfSERNSVRYX0RS Vl9JTVBfRDAJCSgweDNmIDw8IDApCisjZGVmaW5lIERSVl9JTVBfQ0xLX1NISUZUCQkyNAorI2Rl ZmluZSBEUlZfSU1QX0QyX1NISUZUCQkxNgorI2RlZmluZSBEUlZfSU1QX0QxX1NISUZUCQk4Cisj ZGVmaW5lIERSVl9JTVBfRDBfU0hJRlQJCTAKKyNkZWZpbmUgSERNSV9DT043CQkweDFjCisjZGVm aW5lIFJHX0hETUlUWF9NSExDS19EUlZfSUJJQVMJKDB4MWYgPDwgMjcpCisjZGVmaW5lIFJHX0hE TUlUWF9TRVJfRElOCQkoMHgzZmYgPDwgMTYpCisjZGVmaW5lIFJHX0hETUlUWF9DSExEQ19UU1QJ CSgweGYgPDwgMTIpCisjZGVmaW5lIFJHX0hETUlUWF9DSExDS19UU1QJCSgweGYgPDwgOCkKKyNk ZWZpbmUgUkdfSERNSVRYX1JFU0VSVkUJCSgweGZmIDw8IDApCisjZGVmaW5lIEhETUlfQ09OOAkJ MHgyMAorI2RlZmluZSBSR1NfSERNSVRYXzJUMV9MRVYJCSgweGYgPDwgMTYpCisjZGVmaW5lIFJH U19IRE1JVFhfMlQxX0VERwkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUkdTX0hETUlUWF81VDFfTEVW CQkoMHhmIDw8IDgpCisjZGVmaW5lIFJHU19IRE1JVFhfNVQxX0VERwkJKDB4ZiA8PCA0KQorI2Rl ZmluZSBSR1NfSERNSVRYX1BMVUdfVFNUCQlCSVQoMCkKKworc3RydWN0IG10a19oZG1pX3BoeSB7 CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2xr ICpwbGw7CisJc3RydWN0IGNsa19odyBwbGxfaHc7CisJdW5zaWduZWQgbG9uZyBwbGxfcmF0ZTsK Kwl1OCBkcnZfaW1wX2NsazsKKwl1OCBkcnZfaW1wX2QyOworCXU4IGRydl9pbXBfZDE7CisJdTgg ZHJ2X2ltcF9kMDsKKwl1MzIgaWJpYXM7CisJdTMyIGliaWFzX3VwOworfTsKKworc3RhdGljIGNv bnN0IHU4IFBSRURJVlszXVs0XSA9IHsKKwl7MHgwLCAweDAsIDB4MCwgMHgwfSwJLyogMjdNaHog Ki8KKwl7MHgxLCAweDEsIDB4MSwgMHgxfSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDEsIDB4MSwg MHgxfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25zdCB1OCBUWERJVlszXVs0XSA9IHsK Kwl7MHgzLCAweDMsIDB4MywgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDEsIDB4MSwgMHgx fSwJLyogNzRNaHogKi8KKwl7MHgxLCAweDAsIDB4MCwgMHgwfQkvKiAxNDhNaHogKi8KK307CisK K3N0YXRpYyBjb25zdCB1OCBGQktTRUxbM11bNF0gPSB7CisJezB4MSwgMHgxLCAweDEsIDB4MX0s CS8qIDI3TWh6ICovCisJezB4MSwgMHgwLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCisJezB4MSwg MHgwLCAweDEsIDB4MX0JLyogMTQ4TWh6ICovCit9OworCitzdGF0aWMgY29uc3QgdTggRkJLRElW WzNdWzRdID0geworCXsxOSwgMjQsIDI5LCAxOX0sCS8qIDI3TWh6ICovCisJezE5LCAyNCwgMTQs IDE5fSwJLyogNzRNaHogKi8KKwl7MTksIDI0LCAxNCwgMTl9CS8qIDE0OE1oeiAqLworfTsKKwor c3RhdGljIGNvbnN0IHU4IERJVkVOWzNdWzRdID0geworCXsweDIsIDB4MSwgMHgxLCAweDJ9LAkv KiAyN01oeiAqLworCXsweDIsIDB4MiwgMHgyLCAweDJ9LAkvKiA3NE1oeiAqLworCXsweDIsIDB4 MiwgMHgyLCAweDJ9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIGNvbnN0IHU4IEhUUExMQlBb M11bNF0gPSB7CisJezB4YywgMHhjLCAweDgsIDB4Y30sCS8qIDI3TWh6ICovCisJezB4YywgMHhm LCAweGYsIDB4Y30sCS8qIDc0TWh6ICovCisJezB4YywgMHhmLCAweGYsIDB4Y30JLyogMTQ4TWh6 ICovCit9OworCitzdGF0aWMgY29uc3QgdTggSFRQTExCQ1szXVs0XSA9IHsKKwl7MHgyLCAweDMs IDB4MywgMHgyfSwJLyogMjdNaHogKi8KKwl7MHgyLCAweDMsIDB4MywgMHgyfSwJLyogNzRNaHog Ki8KKwl7MHgyLCAweDMsIDB4MywgMHgyfQkvKiAxNDhNaHogKi8KK307CisKK3N0YXRpYyBjb25z dCB1OCBIVFBMTEJSWzNdWzRdID0geworCXsweDEsIDB4MSwgMHgwLCAweDF9LAkvKiAyN01oeiAq LworCXsweDEsIDB4MiwgMHgyLCAweDF9LAkvKiA3NE1oeiAqLworCXsweDEsIDB4MiwgMHgyLCAw eDF9CS8qIDE0OE1oeiAqLworfTsKKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2NsZWFyX2Jp dHMoc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHksIHUzMiBvZmZzZXQsCisJCQkJICAgIHUz MiBiaXRzKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQ7 CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wICY9IH5iaXRzOworCXdyaXRl bCh0bXAsIHJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9zZXRfYml0cyhzdHJ1 Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSwgdTMyIG9mZnNldCwKKwkJCQkgIHUzMiBiaXRzKQor eworCXZvaWQgX19pb21lbSAqcmVnID0gaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQ7CisJdTMyIHRt cDsKKworCXRtcCA9IHJlYWRsKHJlZyk7CisJdG1wIHw9IGJpdHM7CisJd3JpdGVsKHRtcCwgcmVn KTsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X21hc2soc3RydWN0IG10a19oZG1pX3Bo eSAqaGRtaV9waHksIHUzMiBvZmZzZXQsCisJCQkgICAgICB1MzIgdmFsLCB1MzIgbWFzaykKK3sK Kwl2b2lkIF9faW9tZW0gKnJlZyA9IGhkbWlfcGh5LT5yZWdzICsgb2Zmc2V0OworCXUzMiB0bXA7 CisKKwl0bXAgPSByZWFkbChyZWcpOworCXRtcCA9ICh0bXAgJiB+bWFzaykgfCAodmFsICYgbWFz ayk7CisJd3JpdGVsKHRtcCwgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXRrX2hk bWlfcGh5ICp0b19tdGtfaGRtaV9waHkoc3RydWN0IGNsa19odyAqaHcpCit7CisJcmV0dXJuIGNv bnRhaW5lcl9vZihodywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKK30KKworc3RhdGlj IGludCBtdGtfaGRtaV9wbGxfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3Qg bXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeShodyk7CisKKwlkZXZfZGJn KGhkbWlfcGh5LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOworCisJbXRrX2hkbWlfcGh5X3NldF9i aXRzKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQVVUT0tfRU4pOworCW10a19o ZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExMX1BPU0RJ Vik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMywgUkdfSERN SVRYX01ITENLX0VOKTsKKwltdGtfaGRtaV9waHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09O MSwgUkdfSERNSVRYX1BMTF9CSUFTX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10 a19oZG1pX3BoeV9zZXRfYml0cyhoZG1pX3BoeSwgSERNSV9DT04wLCBSR19IRE1JVFhfUExMX0VO KTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1pX3BoeV9zZXRfYml0cyhoZG1p X3BoeSwgSERNSV9DT04xLCBSR19IRE1JVFhfUExMX0JJQVNfTFBGX0VOKTsKKwltdGtfaGRtaV9w aHlfc2V0X2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9UWERJVl9FTik7 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbXRrX2hkbWlfcGxsX3VucHJlcGFyZShz dHJ1Y3QgY2xrX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRv X210a19oZG1pX3BoeShodyk7CisKKwlkZXZfZGJnKGhkbWlfcGh5LT5kZXYsICIlc1xuIiwgX19m dW5jX18pOworCisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMSwg UkdfSERNSVRYX1BMTF9UWERJVl9FTik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9w aHksIEhETUlfQ09OMSwgUkdfSERNSVRYX1BMTF9CSUFTX0xQRl9FTik7CisJdXNsZWVwX3Jhbmdl KDEwMCwgMTUwKTsKKwltdGtfaGRtaV9waHlfY2xlYXJfYml0cyhoZG1pX3BoeSwgSERNSV9DT04w LCBSR19IRE1JVFhfUExMX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOworCW10a19oZG1p X3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjEsIFJHX0hETUlUWF9QTExfQklBU19F Tik7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhETUlfQ09OMCwgUkdfSERN SVRYX1BMTF9QT1NESVYpOworCW10a19oZG1pX3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBIRE1J X0NPTjEsIFJHX0hETUlUWF9QTExfQVVUT0tfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7 Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGxsX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LCB1bnNpZ25lZCBsb25nIHJhdGUsCisJCQkJIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7 CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOwor CXVuc2lnbmVkIGludCBwcmVfZGl2OworCXVuc2lnbmVkIGludCBkaXY7CisKKwlkZXZfZGJnKGhk bWlfcGh5LT5kZXYsICIlczogJWx1IEh6LCBwYXJlbnQ6ICVsdSBIelxuIiwgX19mdW5jX18sCisJ CXJhdGUsIHBhcmVudF9yYXRlKTsKKworCWlmIChyYXRlIDw9IDI3MDAwMDAwKSB7CisJCXByZV9k aXYgPSAwOworCQlkaXYgPSAzOworCX0gZWxzZSBpZiAocmF0ZSA8PSA3NDI1MDAwMCkgeworCQlw cmVfZGl2ID0gMTsKKwkJZGl2ID0gMjsKKwl9IGVsc2UgeworCQlwcmVfZGl2ID0gMTsKKwkJZGl2 ID0gMTsKKwl9CisKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJ ICAocHJlX2RpdiA8PCBQUkVESVZfU0hJRlQpLCBSR19IRE1JVFhfUExMX1BSRURJVik7CisJbXRr X2hkbWlfcGh5X3NldF9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjAsIFJHX0hETUlUWF9QTExfUE9T RElWKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLAorCQkJICAoMHgx IDw8IFBMTF9JQ19TSElGVCkgfCAoMHgxIDw8IFBMTF9JUl9TSElGVCksCisJCQkgIFJHX0hETUlU WF9QTExfSUMgfCBSR19IRE1JVFhfUExMX0lSKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3Bo eSwgSERNSV9DT04xLAorCQkJICAoZGl2IDw8IFBMTF9UWERJVl9TSElGVCksIFJHX0hETUlUWF9Q TExfVFhESVYpOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsCisJCQkg ICgweDEgPDwgUExMX0ZCS1NFTF9TSElGVCkgfCAoMTkgPDwgUExMX0ZCS0RJVl9TSElGVCksCisJ CQkgIFJHX0hETUlUWF9QTExfRkJLU0VMIHwgUkdfSERNSVRYX1BMTF9GQktESVYpOworCW10a19o ZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjEsCisJCQkgICgweDIgPDwgUExMX0RJVkVO X1NISUZUKSwgUkdfSERNSVRYX1BMTF9ESVZFTik7CisJbXRrX2hkbWlfcGh5X21hc2soaGRtaV9w aHksIEhETUlfQ09OMCwKKwkJCSAgKDB4YyA8PCBQTExfQlBfU0hJRlQpIHwgKDB4MiA8PCBQTExf QkNfU0hJRlQpIHwKKwkJCSAgKDB4MSA8PCBQTExfQlJfU0hJRlQpLAorCQkJICBSR19IRE1JVFhf UExMX0JQIHwgUkdfSERNSVRYX1BMTF9CQyB8CisJCQkgIFJHX0hETUlUWF9QTExfQlIpOworCW10 a19oZG1pX3BoeV9jbGVhcl9iaXRzKGhkbWlfcGh5LCBIRE1JX0NPTjMsIFJHX0hETUlUWF9QUkRf SU1QX0VOKTsKKwltdGtfaGRtaV9waHlfbWFzayhoZG1pX3BoeSwgSERNSV9DT040LAorCQkJICAo MHgzIDw8IFBSRF9JQklBU19DTEtfU0hJRlQpIHwKKwkJCSAgKDB4MyA8PCBQUkRfSUJJQVNfRDJf U0hJRlQpIHwKKwkJCSAgKDB4MyA8PCBQUkRfSUJJQVNfRDFfU0hJRlQpIHwKKwkJCSAgKDB4MyA8 PCBQUkRfSUJJQVNfRDBfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0NMSyB8CisJ CQkgIFJHX0hETUlUWF9QUkRfSUJJQVNfRDIgfAorCQkJICBSR19IRE1JVFhfUFJEX0lCSUFTX0Qx IHwKKwkJCSAgUkdfSERNSVRYX1BSRF9JQklBU19EMCk7CisJbXRrX2hkbWlfcGh5X21hc2soaGRt aV9waHksIEhETUlfQ09OMywKKwkJCSAgKDB4MCA8PCBEUlZfSU1QX0VOX1NISUZUKSwgUkdfSERN SVRYX0RSVl9JTVBfRU4pOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYs CisJCQkgIChoZG1pX3BoeS0+ZHJ2X2ltcF9jbGsgPDwgRFJWX0lNUF9DTEtfU0hJRlQpIHwKKwkJ CSAgKGhkbWlfcGh5LT5kcnZfaW1wX2QyIDw8IERSVl9JTVBfRDJfU0hJRlQpIHwKKwkJCSAgKGhk bWlfcGh5LT5kcnZfaW1wX2QxIDw8IERSVl9JTVBfRDFfU0hJRlQpIHwKKwkJCSAgKGhkbWlfcGh5 LT5kcnZfaW1wX2QwIDw8IERSVl9JTVBfRDBfU0hJRlQpLAorCQkJICBSR19IRE1JVFhfRFJWX0lN UF9DTEsgfCBSR19IRE1JVFhfRFJWX0lNUF9EMiB8CisJCQkgIFJHX0hETUlUWF9EUlZfSU1QX0Qx IHwgUkdfSERNSVRYX0RSVl9JTVBfRDApOworCW10a19oZG1pX3BoeV9tYXNrKGhkbWlfcGh5LCBI RE1JX0NPTjUsCisJCQkgIChoZG1pX3BoeS0+aWJpYXMgPDwgRFJWX0lCSUFTX0NMS19TSElGVCkg fAorCQkJICAoaGRtaV9waHktPmliaWFzIDw8IERSVl9JQklBU19EMl9TSElGVCkgfAorCQkJICAo aGRtaV9waHktPmliaWFzIDw8IERSVl9JQklBU19EMV9TSElGVCkgfAorCQkJICAoaGRtaV9waHkt PmliaWFzIDw8IERSVl9JQklBU19EMF9TSElGVCksCisJCQkgIFJHX0hETUlUWF9EUlZfSUJJQVNf Q0xLIHwgUkdfSERNSVRYX0RSVl9JQklBU19EMiB8CisJCQkgIFJHX0hETUlUWF9EUlZfSUJJQVNf RDEgfCBSR19IRE1JVFhfRFJWX0lCSUFTX0QwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxv bmcgbXRrX2hkbWlfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxv bmcgcmF0ZSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyAqcGFyZW50X3JhdGUpCit7CisJc3RydWN0 IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9waHkoaHcpOworCisJaGRtaV9w aHktPnBsbF9yYXRlID0gcmF0ZTsKKwlpZiAocmF0ZSA8PSA3NDI1MDAwMCkKKwkJKnBhcmVudF9y YXRlID0gcmF0ZTsKKwllbHNlCisJCSpwYXJlbnRfcmF0ZSA9IHJhdGUgLyAyOworCisJcmV0dXJu IHJhdGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG10a19oZG1pX3BsbF9yZWNhbGNfcmF0 ZShzdHJ1Y3QgY2xrX2h3ICpodywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0 ZSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BoeSho dyk7CisKKwlyZXR1cm4gaGRtaV9waHktPnBsbF9yYXRlOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGNsa19vcHMgbXRrX2hkbWlfcGxsX29wcyA9IHsKKwkucHJlcGFyZSA9IG10a19oZG1pX3Bs bF9wcmVwYXJlLAorCS51bnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfdW5wcmVwYXJlLAorCS5zZXRf cmF0ZSA9IG10a19oZG1pX3BsbF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9IG10a19oZG1pX3Bs bF9yb3VuZF9yYXRlLAorCS5yZWNhbGNfcmF0ZSA9IG10a19oZG1pX3BsbF9yZWNhbGNfcmF0ZSwK K307CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9lbmFibGVfdG1kcyhzdHJ1Y3QgbXRrX2hk bWlfcGh5ICpoZG1pX3BoeSkKK3sKKwltdGtfaGRtaV9waHlfc2V0X2JpdHMoaGRtaV9waHksIEhE TUlfQ09OMywKKwkJCSAgICAgIFJHX0hETUlUWF9TRVJfRU4gfCBSR19IRE1JVFhfUFJEX0VOIHwK KwkJCSAgICAgIFJHX0hETUlUWF9EUlZfRU4pOworCXVzbGVlcF9yYW5nZSgxMDAsIDE1MCk7Cit9 CisKK3N0YXRpYyB2b2lkIG10a19oZG1pX3BoeV9kaXNhYmxlX3RtZHMoc3RydWN0IG10a19oZG1p X3BoeSAqaGRtaV9waHkpCit7CisJbXRrX2hkbWlfcGh5X2NsZWFyX2JpdHMoaGRtaV9waHksIEhE TUlfQ09OMywKKwkJCQlSR19IRE1JVFhfRFJWX0VOIHwgUkdfSERNSVRYX1BSRF9FTiB8CisJCQkJ UkdfSERNSVRYX1NFUl9FTik7Cit9CisKK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29u KHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHBo eV9nZXRfZHJ2ZGF0YShwaHkpOworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFi bGUoaGRtaV9waHktPnBsbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwltdGtf aGRtaV9waHlfZW5hYmxlX3RtZHMoaGRtaV9waHkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgbXRrX2hkbWlfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0 IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKKworCW10a19o ZG1pX3BoeV9kaXNhYmxlX3RtZHMoaGRtaV9waHkpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZSho ZG1pX3BoeS0+cGxsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBo eV9vcHMgbXRrX2hkbWlfcGh5X29wcyA9IHsKKwkucG93ZXJfb24gPSBtdGtfaGRtaV9waHlfcG93 ZXJfb24sCisJLnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dlcl9vZmYsCisJLm93bmVyID0g VEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IG10a19oZG1pX3BoeV9wcm9iZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5k ZXY7CisJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHk7CisJc3RydWN0IHJlc291cmNlICpt ZW07CisJc3RydWN0IGNsayAqcmVmX2NsazsKKwljb25zdCBjaGFyICpyZWZfY2xrX25hbWU7CisJ c3RydWN0IGNsa19pbml0X2RhdGEgY2xrX2luaXQgPSB7CisJCS5vcHMgPSAmbXRrX2hkbWlfcGxs X29wcywKKwkJLm51bV9wYXJlbnRzID0gMSwKKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFy ICogY29uc3QgKikmcmVmX2Nsa19uYW1lLAorCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5U IHwgQ0xLX1NFVF9SQVRFX0dBVEUsCisJfTsKKwlzdHJ1Y3QgcGh5ICpwaHk7CisJc3RydWN0IHBo eV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOworCWludCByZXQ7CisKKwloZG1pX3BoeSA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhkbWlf cGh5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaGRtaV9waHktPnJlZ3MgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZGV2LCBtZW0pOworCWlmIChJU19FUlIoaGRtaV9waHktPnJlZ3MpKSB7CisJCXJl dCA9IFBUUl9FUlIoaGRtaV9waHktPnJlZ3MpOworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBn ZXQgbWVtb3J5IHJlc291cmNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBsbF9yZWYiKTsKKwlpZiAoSVNfRVJSKHJlZl9j bGspKSB7CisJCXJldCA9IFBUUl9FUlIocmVmX2Nsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwg IkZhaWxlZCB0byBnZXQgUExMIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsCisJCQlyZXQpOworCQly ZXR1cm4gcmV0OworCX0KKwlyZWZfY2xrX25hbWUgPSBfX2Nsa19nZXRfbmFtZShyZWZfY2xrKTsK KworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9kZSwgImNsb2NrLW91 dHB1dC1uYW1lcyIsCisJCQkJICAgICAgJmNsa19pbml0Lm5hbWUpOworCWlmIChyZXQgPCAwKSB7 CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0cHV0LW5hbWVzOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwloZG1pX3BoeS0+cGxsX2h3LmluaXQgPSAm Y2xrX2luaXQ7CisJaGRtaV9waHktPnBsbCA9IGRldm1fY2xrX3JlZ2lzdGVyKGRldiwgJmhkbWlf cGh5LT5wbGxfaHcpOworCWlmIChJU19FUlIoaGRtaV9waHktPnBsbCkpIHsKKwkJcmV0ID0gUFRS X0VSUihoZG1pX3BoeS0+cGxsKTsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIg UExMOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhcyIsCisJCQkJICAgJmhkbWlf cGh5LT5pYmlhcyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFp bGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAibWVkaWF0ZWssaWJpYXNfdXAi LAorCQkJCSAgICZoZG1pX3BoeS0+aWJpYXNfdXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9l cnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgaWJpYXMgdXA6ICVkXG4iLCByZXQpOworCQly ZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKGRldiwgIlVzaW5nIGRlZmF1bHQgVFggRFJWIGlt cGVkYW5jZTogNC4yay8zNlxuIik7CisJaGRtaV9waHktPmRydl9pbXBfY2xrID0gMHgzMDsKKwlo ZG1pX3BoeS0+ZHJ2X2ltcF9kMiA9IDB4MzA7CisJaGRtaV9waHktPmRydl9pbXBfZDEgPSAweDMw OworCWhkbWlfcGh5LT5kcnZfaW1wX2QwID0gMHgzMDsKKworCXBoeSA9IGRldm1fcGh5X2NyZWF0 ZShkZXYsIE5VTEwsICZtdGtfaGRtaV9waHlfb3BzKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJ ZGV2X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIEhETUkgUEhZXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIocGh5KTsKKwl9CisJcGh5X3NldF9kcnZkYXRhKHBoeSwgaGRtaV9waHkpOworCisJcGh5 X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9waHlfc2lt cGxlX3hsYXRlKTsKKwlpZiAoSVNfRVJSKHBoeV9wcm92aWRlcikpCisJCXJldHVybiBQVFJfRVJS KHBoeV9wcm92aWRlcik7CisKKwloZG1pX3BoeS0+ZGV2ID0gZGV2OworCXJldHVybiBvZl9jbGtf YWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0LAorCQkJCSAg IGhkbWlfcGh5LT5wbGwpOworfQorCitzdGF0aWMgaW50IG10a19oZG1pX3BoeV9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXRrX2hkbWlfcGh5X21hdGNoW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxNzMtaGRtaS1waHkiLCB9LAorCXt9LAorfTsKKworc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyID0geworCS5wcm9iZSA9IG10 a19oZG1pX3BoeV9wcm9iZSwKKwkucmVtb3ZlID0gbXRrX2hkbWlfcGh5X3JlbW92ZSwKKwkuZHJp dmVyID0geworCQkubmFtZSA9ICJtZWRpYXRlay1oZG1pLXBoeSIsCisJCS5vZl9tYXRjaF90YWJs ZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKKwl9LAorfTsKKworTU9EVUxFX0FVVEhPUigiSmllIFFp dSA8amllLnFpdUBtZWRpYXRlay5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVr IE1UODE3MyBIRE1JIFBIWSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0g CjIuNy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpk cmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK