From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [v3 PATCH 5/5] drm/rockchip: cdn-dp: add cdn DP support for rk3399 Date: Thu, 23 Jun 2016 20:51:04 +0800 Message-ID: <1466686264-6744-6-git-send-email-zyw@rock-chips.com> References: <1466686264-6744-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1466686264-6744-1-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dianders@chromium.org, tfiga@chromium.org, heiko@sntech.de, yzq@rock-chips.com, groeck@chromium.org, myungjoo.ham@samsung.com, cw00.choi@samsung.com Cc: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, Chris Zhong , linux-arm-kernel@lists.infradead.org List-Id: linux-rockchip.vger.kernel.org QWRkIHN1cHBvcnQgZm9yIGNkbiBEUCBjb250cm9sbGVyIHdoaWNoIGlzIGVtYmVkZGVkIGluIHRo ZSByazMzOTkKU29Dcy4gVGhlIERQIGlzIGNvbXBsaWFudCB3aXRoIERpc3BsYXlQb3J0IFNwZWNp ZmljYXRpb24sClZlcnNpb24gMS4zLCBUaGlzIElQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcm9j a2NoaXAgdHlwZS1jIFBIWSBJUC4KVGhlcmUgaXMgYSB1Q1BVIGluIERQIGNvbnRyb2xsZXIsIGl0 IG5lZWQgYSBmaXJtd2FyZSB0byB3b3JrLApwbGVhc2UgcHV0IHRoZSBmaXJtd2FyZSBmaWxlIHRv IC9saWIvZmlybXdhcmUvY2RuL2RwdHguYmluLiBUaGUKdUNQVSBpbiBjaGFyZ2Ugb2YgYXV4IGNv bW11bmljYXRpb24gYW5kIGxpbmsgdHJhaW5pbmcsIHRoZSBob3N0IHVzZQptYWlsYm94IHRvIGNv bW11bmljYXRlIHdpdGggdGhlIHVjcHUuClRoZSBkY2xrIHBpbl9wb2wgb2Ygdm9wIG11c3Qgbm90 IGJlIGludmVydCBmb3IgRFAuCgpTaWduZWQtb2ZmLWJ5OiBDaHJpcyBaaG9uZyA8enl3QHJvY2st Y2hpcHMuY29tPgoKLS0tCgpDaGFuZ2VzIGluIHYzOgotIHVzZSBFWFRDT05fRElTUF9EUCBhbmQg RVhUQ09OX0RJU1BfRFBfQUxUIGNhYmxlIHRvIGdldCBkcCBwb3J0IHN0YXRlLgotIHJlc2V0IHNw ZGlmIGJlZm9yZSBjb25maWcgaXQKLSBtb2RpZnkgdGhlIGZpcm13YXJlIGNsayB0byAxMDBNaHoK LSByZXRyeSBsb2FkIGZpcm13YXJlIGlmIGZ3IGZpbGUgaXMgcmVxdWVzdGVkIHRvbyBlYXJseQoK Q2hhbmdlcyBpbiB2MjoKLSBBbHBoYWJldGljIG9yZGVyCi0gcmVtb3ZlIGV4Y2VzcyBlcnJvciBt ZXNzYWdlCi0gdXNlIGRlZmluZSBjbGtfcmF0ZQotIGNoZWNrIGFsbCByZXR1cm4gdmFsdWUKLSBy ZW1vdmUgZGV2X3NldF9uYW1lKGRwLT5kZXYsICJjZG4tZHAiKTsKLSB1c2Ugc2NoZWR1bGVfZGVs YXllZF93b3JrCi0gcmVtb3ZlIG5ldmVyLWNhbGxlZCBmdW5jdGlvbnMKLSByZW1vdmUgc29tZSB1 bm5lY2Vzc2FyeSAoKQoKQ2hhbmdlcyBpbiB2MToKLSB1c2UgZXh0Y29uIEFQSQotIHVzZSBoZG1p LWNvZGVjIGZvciB0aGUgRFAgQXNvYwotIGRvIG5vdCBpbml0aWFsaXplIHRoZSAicmV0IgotIHBy aW50ayBhIGVyciBsb2cgd2hlbiBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQKLSBt b2RpZnkgdGhlIGRjbGsgcGluX3BvbCB0byBhIHNpbmdsZSBsaW5lCgogZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL0tjb25maWcgICAgICAgICAgICB8ICAgOSArCiBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvTWFrZWZpbGUgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9jZG4tZHAtY29yZS5jICAgICAgfCA3MjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuaCAgICAgIHwgMTA4ICsrKysKIGRy aXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtcmVnLmMgICAgICAgfCA3MzEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcu aCAgICAgICB8IDQwNCArKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fdm9wLmMgfCAgIDYgKy0KIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2Nr Y2hpcF9kcm1fdm9wLmggfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X3ZvcF9yZWcuYyB8ICAgMiArCiA5IGZpbGVzIGNoYW5nZWQsIDE5ODQgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9jZG4tZHAtY29yZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL2Nkbi1kcC1jb3JlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLXJlZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2Nkbi1kcC1yZWcuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hp cC9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKaW5kZXggZDMwYmRj My4uMjBkYTlhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcK KysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL0tjb25maWcKQEAgLTI1LDYgKzI1LDE1IEBA IGNvbmZpZyBST0NLQ0hJUF9BTkFMT0dJWF9EUAogCSAgZm9yIHRoZSBBbmFsb2dpeCBDb3JlIERQ IGRyaXZlci4gSWYgeW91IHdhbnQgdG8gZW5hYmxlIERQCiAJICBvbiBSSzMyODggYmFzZWQgU29D LCB5b3Ugc2hvdWxkIHNlbGV0IHRoaXMgb3B0aW9uLgogCitjb25maWcgUk9DS0NISVBfQ0ROX0RQ CisgICAgICAgIHRyaXN0YXRlICJSb2NrY2hpcCBjZG4gRFAiCisgICAgICAgIGRlcGVuZHMgb24g RFJNX1JPQ0tDSElQCisgICAgICAgIGhlbHAKKwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciBS b2NrY2hpcCBTb0Mgc3BlY2lmaWMgZXh0ZW5zaW9ucworCSAgZm9yIHRoZSBjZG4gRHAgZHJpdmVy LiBJZiB5b3Ugd2FudCB0byBlbmFibGUgRHAgb24KKwkgIFJLMzM5OSBiYXNlZCBTb0MsIHlvdSBz aG91bGQgc2VsZXQgdGhpcworCSAgb3B0aW9uLgorCiBjb25maWcgUk9DS0NISVBfRFdfSERNSQog ICAgICAgICB0cmlzdGF0ZSAiUm9ja2NoaXAgc3BlY2lmaWMgZXh0ZW5zaW9ucyBmb3IgU3lub3Bz eXMgRFcgSERNSSIKICAgICAgICAgZGVwZW5kcyBvbiBEUk1fUk9DS0NISVAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9yb2Nr Y2hpcC9NYWtlZmlsZQppbmRleCAwNWQwNzEzLi5hYmRlY2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vcm9ja2NoaXAvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQCByb2NrY2hpcGRybS15IDo9IHJvY2tjaGlwX2RybV9k cnYubyByb2NrY2hpcF9kcm1fZmIubyBcCiByb2NrY2hpcGRybS0kKENPTkZJR19EUk1fRkJERVZf RU1VTEFUSU9OKSArPSByb2NrY2hpcF9kcm1fZmJkZXYubwogCiBvYmotJChDT05GSUdfUk9DS0NI SVBfQU5BTE9HSVhfRFApICs9IGFuYWxvZ2l4X2RwLXJvY2tjaGlwLm8KK29iai0kKENPTkZJR19S T0NLQ0hJUF9DRE5fRFApICs9IGNkbi1kcC1jb3JlLm8gY2RuLWRwLXJlZy5vCiBvYmotJChDT05G SUdfUk9DS0NISVBfRFdfSERNSSkgKz0gZHdfaGRtaS1yb2NrY2hpcC5vCiBvYmotJChDT05GSUdf Uk9DS0NISVBfRFdfTUlQSV9EU0kpICs9IGR3LW1pcGktZHNpLm8KIG9iai0kKENPTkZJR19ST0NL Q0hJUF9JTk5PX0hETUkpICs9IGlubm9faGRtaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4t ZHAtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MDlhOWUKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpA QCAtMCwwICsxLDcyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVs ZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMu Y29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVk LCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSA8 ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5o PgorI2luY2x1ZGUgPGRybS9kcm1fZHBfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9lZGlk Lmg+CisjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgorCisjaW5jbHVkZSA8bGludXgvY2xrLmg+Cisj aW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+CisjaW5jbHVkZSA8bGludXgvZXh0Y29uLmg+Cisj aW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNp bmNsdWRlIDxsaW51eC9yZXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKwor I2luY2x1ZGUgPHNvdW5kL2hkbWktY29kZWMuaD4KKworI2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVv bW9kZS5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgorCisjaW5jbHVkZSAiY2RuLWRw LXJlZy5oIgorI2luY2x1ZGUgImNkbi1kcC1jb3JlLmgiCisjaW5jbHVkZSAicm9ja2NoaXBfZHJt X3ZvcC5oIgorCisjZGVmaW5lIGNvbm5lY3Rvcl90b19kcChjKSBcCisJCWNvbnRhaW5lcl9vZihj LCBzdHJ1Y3QgY2RuX2RwX2RldmljZSwgY29ubmVjdG9yKQorCisjZGVmaW5lIGVuY29kZXJfdG9f ZHAoYykgXAorCQljb250YWluZXJfb2YoYywgc3RydWN0IGNkbl9kcF9kZXZpY2UsIGVuY29kZXIp CisKKy8qIGRwIGdyZiByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgRFBfVk9QX1NFTAkJMHg2 MjI0CisjZGVmaW5lIERQX1NFTF9WT1BfTElUCQlCSVQoMTIpCisjZGVmaW5lIERQX0NMS19SQVRF CQkxMDAwMDAwMDAKKyNkZWZpbmUgV0FJVF9IUERfU1RBQkxFCQkxMDAwCisKK3N0YXRpYyBpbnQg Y2RuX2RwX2Nsa19lbmFibGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCWludCByZXQ7 CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHAtPnBjbGspOworCWlmIChyZXQgPCAwKSB7 CisJCWRldl9lcnIoZHAtPmRldiwgImNhbm5vdCBlbmFibGUgZHAgcGNsayAlZFxuIiwgcmV0KTsK KwkJZ290byBlcnJfcGNsazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHAtPmNv cmVfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJjYW5ub3QgZW5h YmxlIGNvcmVfY2xrICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9jb3JlX2NsazsKKwl9CisKKwly ZXQgPSBjbGtfc2V0X3JhdGUoZHAtPmNvcmVfY2xrLCBEUF9DTEtfUkFURSk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiY2Fubm90IHNldCBkcCBjb3JlIGNsayB0byAlZCAl ZFxuIiwKKwkJCURQX0NMS19SQVRFLCByZXQpOworCQlnb3RvIGVycl9zZXRfcmF0ZTsKKwl9CisK KwkvKiBub3RpY2UgZncgdGhlIGNsayBmcmVxIHZhbHVlICovCisJY2RuX2RwX3NldF9md19jbGso ZHAsIERQX0NMS19SQVRFKTsKKworCXJldHVybiAwOworCitlcnJfc2V0X3JhdGU6CisJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKGRwLT5jb3JlX2Nsayk7CitlcnJfY29yZV9jbGs6CisJY2xrX2Rpc2Fi bGVfdW5wcmVwYXJlKGRwLT5wY2xrKTsKK2Vycl9wY2xrOgorCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzCitjZG5fZHBfY29ubmVjdG9yX2RldGVjdChz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCisJcmV0dXJu IGRwLT5ocGRfc3RhdHVzID8gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgOgorCQkJCWNvbm5l Y3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfY29ubmVj dG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1fY29u bmVjdG9yX3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKKwlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29u bmVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGNkbl9kcF9h dG9taWNfY29ubmVjdG9yX2Z1bmNzID0geworCS5kcG1zID0gZHJtX2F0b21pY19oZWxwZXJfY29u bmVjdG9yX2RwbXMsCisJLmRldGVjdCA9IGNkbl9kcF9jb25uZWN0b3JfZGV0ZWN0LAorCS5kZXN0 cm95ID0gY2RuX2RwX2Nvbm5lY3Rvcl9kZXN0cm95LAorCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAorCS5yZXNldCA9IGRybV9hdG9taWNfaGVs cGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9OworCitz dGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gY29ubmVjdG9yX3Rv X2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisKKwlpZiAoIWRwLT5md19sb2Fk ZWQpCisJCXJldHVybiAwOworCisJZWRpZCA9IGRybV9kb19nZXRfZWRpZChjb25uZWN0b3IsIGNk bl9kcF9nZXRfZWRpZF9ibG9jaywgZHApOworCWlmIChlZGlkKSB7CisJCWRldl9kYmcoZHAtPmRl diwgImdvdCBlZGlkOiB3aWR0aFslZF0geCBoZWlnaHRbJWRdXG4iLAorCQkJZWRpZC0+d2lkdGhf Y20sIGVkaWQtPmhlaWdodF9jbSk7CisKKwkJZHAtPnNpbmtfaGFzX2F1ZGlvID0gZHJtX2RldGVj dF9tb25pdG9yX2F1ZGlvKGVkaWQpOworCQlkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRf cHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKKwkJZHJtX2FkZF9lZGlkX21vZGVzKGNvbm5lY3Rv ciwgZWRpZCk7CisJCS8qIFN0b3JlIHRoZSBFTEQgKi8KKwkJZHJtX2VkaWRfdG9fZWxkKGNvbm5l Y3RvciwgZWRpZCk7CisJCWtmcmVlKGVkaWQpOworCX0gZWxzZSB7CisJCWRldl9kYmcoZHAtPmRl diwgImZhaWxlZCB0byBnZXQgZWRpZFxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgZHJtX2VuY29kZXIgKgorCWNkbl9kcF9jb25uZWN0b3JfYmVzdF9lbmNvZGVyKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisKKwlyZXR1cm4gJmRwLT5lbmNvZGVy OworfQorCitzdGF0aWMgaW50IGNkbl9kcF9jb25uZWN0b3JfbW9kZV92YWxpZChzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBjb25uZWN0b3JfdG9fZHAo Y29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxheV9pbmZvID0gJmRw LT5jb25uZWN0b3IuZGlzcGxheV9pbmZvOworCWxvbmcgcmVxdWVzdGVkID0gbW9kZS0+Y2xvY2sg KiBkaXNwbGF5X2luZm8tPmJwYyAqIDMgLyAxMDAwOworCWxvbmcgYWN0dWFsLCByYXRlOworCisJ cmF0ZSA9IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShkcC0+bGluay5yYXRlKTsKKwlhY3R1 YWwgPSByYXRlICogZHAtPmxpbmsubnVtX2xhbmVzIC8gMTAwOworCisJLyogZWZmaWNpZW5jeSBp cyBhYm91dCAwLjggKi8KKwlhY3R1YWwgPSBhY3R1YWwgKiA4IC8gMTA7CisKKwlpZiAocmVxdWVz dGVkID4gYWN0dWFsKSB7CisJCWRldl9kYmcoZHAtPmRldiwgInJlcXVlc3RlZD0lbGQsIGFjdHVh bD0lbGQsIGNsb2NrPSVkLCBicGM9ICVkXG4iLAorCQkJcmVxdWVzdGVkLCBhY3R1YWwsIG1vZGUt PmNsb2NrLCBkaXNwbGF5X2luZm8tPmJwYyk7CisJCXJldHVybiBNT0RFX0hfSUxMRUdBTDsKKwl9 CisKKwlyZXR1cm4gTU9ERV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBkcm1fY29ubmVjdG9yX2hl bHBlcl9mdW5jcyBjZG5fZHBfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVz ID0gY2RuX2RwX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCisJLmJlc3RfZW5jb2RlciA9IGNkbl9kcF9j b25uZWN0b3JfYmVzdF9lbmNvZGVyLAorCS5tb2RlX3ZhbGlkID0gY2RuX2RwX2Nvbm5lY3Rvcl9t b2RlX3ZhbGlkLAorfTsKKworc3RhdGljIHZvaWQgY2RuX2RwX2NvbW1pdChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90 b19kcChlbmNvZGVyKTsKKworCWlmIChjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhkcCwgQ09OVFJP TF9WSURFT19JRExFKSkKKwkJcmV0dXJuOworCisJaWYgKGNkbl9kcF9jb25maWdfdmlkZW8oZHAp KSB7CisJCWRldl9lcnIoZHAtPmRldiwgInVuYWJsZSB0byBjb25maWcgdmlkZW9cbiIpOworCQly ZXR1cm47CisJfQorCisJaWYgKGNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJ REVPX1ZBTElEKSkKKwkJcmV0dXJuOworCisJZHAtPmRwbXNfbW9kZSA9IERSTV9NT0RFX0RQTVNf T047Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0KHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlciwKKwkJCQkgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs CisJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKK3sKKwlzdHJ1Y3Qg Y2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOworCXN0cnVjdCBkcm1f ZGlzcGxheV9pbmZvICpkaXNwbGF5X2luZm8gPSAmZHAtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm87 CisJc3RydWN0IHJvY2tjaGlwX2NydGNfc3RhdGUgKnN0YXRlOworCXN0cnVjdCB2aWRlb19pbmZv ICp2aWRlbyA9ICZkcC0+dmlkZW9faW5mbzsKKwlpbnQgcmV0LCB2YWw7CisKKwlzd2l0Y2ggKGRp c3BsYXlfaW5mby0+YnBjKSB7CisJY2FzZSAxNjoKKwljYXNlIDEyOgorCWNhc2UgMTA6CisJCXZp ZGVvLT5jb2xvcl9kZXB0aCA9IDEwOworCQlicmVhazsKKwljYXNlIDY6CisJCXZpZGVvLT5jb2xv cl9kZXB0aCA9IDY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZpZGVvLT5jb2xvcl9kZXB0aCA9 IDg7CisJCWJyZWFrOworCX0KKworCXZpZGVvLT5jb2xvcl9mbXQgPSBQWExfUkdCOworCisJdmlk ZW8tPnZfc3luY19wb2xhcml0eSA9ICEhKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OVlNZ TkMpOworCXZpZGVvLT5oX3N5bmNfcG9sYXJpdHkgPSAhIShtb2RlLT5mbGFncyAmIERSTV9NT0RF X0ZMQUdfTkhTWU5DKTsKKworCXJldCA9IGRybV9vZl9lbmNvZGVyX2FjdGl2ZV9lbmRwb2ludF9p ZChkcC0+ZGV2LT5vZl9ub2RlLCBlbmNvZGVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJy KGRwLT5kZXYsICJDb3VsZCBub3QgZ2V0IHZvcCBpZCwgJWQiLCByZXQpOworCQlyZXR1cm47CisJ fQorCisJc3RhdGUgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGVuY29kZXItPmNydGMtPnN0YXRl KTsKKwlpZiAocmV0KSB7CisJCXZhbCA9IERQX1NFTF9WT1BfTElUIHwgKERQX1NFTF9WT1BfTElU IDw8IDE2KTsKKwkJc3RhdGUtPm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDg4ODsK Kwl9IGVsc2UgeworCQl2YWwgPSBEUF9TRUxfVk9QX0xJVCA8PCAxNjsKKwkJc3RhdGUtPm91dHB1 dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfQUFBQTsKKwl9CisJcmV0ID0gcmVnbWFwX3dyaXRl KGRwLT5ncmYsIERQX1ZPUF9TRUwsIHZhbCk7CisJaWYgKHJldCAhPSAwKQorCQlkZXZfZXJyKGRw LT5kZXYsICJDb3VsZCBub3Qgd3JpdGUgdG8gR1JGOiAlZFxuIiwgcmV0KTsKKworCW1lbWNweSgm ZHAtPm1vZGUsIGFkanVzdGVkLCBzaXplb2YoKm1vZGUpKTsKK30KKworc3RhdGljIHZvaWQgY2Ru X2RwX2VuY29kZXJfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlzdHJ1 Y3QgY2RuX2RwX2RldmljZSAqZHAgPSBlbmNvZGVyX3RvX2RwKGVuY29kZXIpOworCisJaWYgKGRw LT5kcG1zX21vZGUgIT0gRFJNX01PREVfRFBNU19PTikKKwkJY2RuX2RwX2NvbW1pdChlbmNvZGVy KTsKK30KKworc3RhdGljIHZvaWQgY2RuX2RwX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCit7CisJc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwID0gZW5jb2Rlcl90 b19kcChlbmNvZGVyKTsKKworCWlmIChkcC0+ZHBtc19tb2RlICE9IERSTV9NT0RFX0RQTVNfT0ZG KSB7CisJCWNkbl9kcF9zZXRfdmlkZW9fc3RhdHVzKGRwLCBDT05UUk9MX1ZJREVPX0lETEUpOwor CQlkcC0+ZHBtc19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisJfQorfQorCitzdGF0aWMgaW50 CitjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy LAorCQkJICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKK3sKKwlzdHJ1Y3Qgcm9ja2NoaXBf Y3J0Y19zdGF0ZSAqcyA9IHRvX3JvY2tjaGlwX2NydGNfc3RhdGUoY3J0Y19zdGF0ZSk7CisKKwlz LT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09VVF9NT0RFX0FBQUE7CisJcy0+b3V0cHV0X3R5cGUg PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJfZnVuY3MgY2RuX2RwX2VuY29kZXJfaGVscGVy X2Z1bmNzID0geworCS5tb2RlX3NldCA9IGNkbl9kcF9lbmNvZGVyX21vZGVfc2V0LAorCS5lbmFi bGUgPSBjZG5fZHBfZW5jb2Rlcl9lbmFibGUsCisJLmRpc2FibGUgPSBjZG5fZHBfZW5jb2Rlcl9k aXNhYmxlLAorCS5hdG9taWNfY2hlY2sgPSBjZG5fZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2ssCit9 OworCitzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGNkbl9kcF9lbmNvZGVyX2Z1bmNz ID0geworCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwKK307CisKK3N0YXRpYyBpbnQg Y2RuX2RwX2Zpcm13YXJlX2luaXQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCWludCBy ZXQ7CisJY29uc3QgdTMyICppcmFtX2RhdGEsICpkcmFtX2RhdGE7CisJY29uc3Qgc3RydWN0IGZp cm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3QgY2RuX2Zpcm13YXJlX2hlYWRlciAqaGRyOworCisJ aWYgKGRwLT5md19sb2FkZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2Fy ZSgmZncsICJjZG4vZHB0eC5iaW4iLCBkcC0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZf ZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBmaXJtd2FyZSAlZFxuIiwgcmV0KTsKKwkJ cmV0dXJuIHJldDsKKwl9CisKKwloZHIgPSAoc3RydWN0IGNkbl9maXJtd2FyZV9oZWFkZXIgKilm dy0+ZGF0YTsKKwlpZiAoZnctPnNpemUgIT0gbGUzMl90b19jcHUoaGRyLT5zaXplX2J5dGVzKSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcmFtX2RhdGEgPSAoY29uc3QgdTMyICopKGZ3LT5kYXRh ICsgaGRyLT5oZWFkZXJfc2l6ZSk7CisJZHJhbV9kYXRhID0gKGNvbnN0IHUzMiAqKShmdy0+ZGF0 YSArIGhkci0+aGVhZGVyX3NpemUgKyBoZHItPmlyYW1fc2l6ZSk7CisKKwlyZXQgPSBjZG5fZHBf bG9hZF9maXJtd2FyZShkcCwgaXJhbV9kYXRhLCBoZHItPmlyYW1fc2l6ZSwKKwkJCQkgICBkcmFt X2RhdGEsIGhkci0+ZHJhbV9zaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0 ID0gY2RuX2RwX2FjdGl2ZShkcCwgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5k ZXYsICJhY3RpdmUgdWNwdSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0K KworCXJldHVybiBjZG5fZHBfZXZlbnRfY29uZmlnKGRwKTsKK30KKworc3RhdGljIGludCBjZG5f ZHBfaW5pdChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJc3RydWN0IGRldmljZSAqZGV2 ID0gZHAtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlz dHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJZHAtPmdyZiA9IHN5c2Nvbl9yZWdt YXBfbG9va3VwX2J5X3BoYW5kbGUobnAsICJyb2NrY2hpcCxncmYiKTsKKwlpZiAoSVNfRVJSKGRw LT5ncmYpKSB7CisJCWRldl9lcnIoZGV2LCAiY2RuLWRwIG5lZWRzIHJvY2tjaGlwLGdyZiBwcm9w ZXJ0eVxuIik7CisJCXJldHVybiBQVFJfRVJSKGRwLT5ncmYpOworCX0KKworCWRwLT5pcnEgPSBw bGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChkcC0+aXJxIDwgMCkgeworCQlkZXZfZXJy KGRldiwgImNkbi1kcCBjYW4gbm90IGdldCBpcnFcbiIpOworCQlyZXR1cm4gZHAtPmlycTsKKwl9 CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDAp OworCWRwLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNf RVJSKGRwLT5yZWdzKSkgeworCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgcmVnIGZhaWxlZFxuIik7 CisJCXJldHVybiBQVFJfRVJSKGRwLT5yZWdzKTsKKwl9CisKKwlkcC0+Y29yZV9jbGsgPSBkZXZt X2Nsa19nZXQoZGV2LCAiY29yZS1jbGsiKTsKKwlpZiAoSVNfRVJSKGRwLT5jb3JlX2NsaykpIHsK KwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGNvcmVfY2xrX2RwXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoZHAtPmNvcmVfY2xrKTsKKwl9CisKKwlkcC0+cGNsayA9IGRldm1fY2xrX2dldChkZXYs ICJwY2xrIik7CisJaWYgKElTX0VSUihkcC0+cGNsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5u b3QgZ2V0IHBjbGtcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+cGNsayk7CisJfQorCisJZHAt PnNwZGlmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJzcGRpZiIpOworCWlmIChJU19FUlIoZHAt PnNwZGlmX2NsaykpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IHNwZGlmX2Nsa1xuIik7 CisJCXJldHVybiBQVFJfRVJSKGRwLT5zcGRpZl9jbGspOworCX0KKworCWRwLT5zcGRpZl9yc3Qg PSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KGRldiwgInNwZGlmIik7CisJaWYgKElTX0VSUihkcC0+ c3BkaWZfcnN0KSkgeworCQlkZXZfZXJyKGRldiwgIm5vIHNwZGlmIHJlc2V0IGNvbnRyb2wgZm91 bmRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihkcC0+c3BkaWZfcnN0KTsKKwl9CisKKwlkcC0+ZHBt c19tb2RlID0gRFJNX01PREVfRFBNU19PRkY7CisKKwlyZXQgPSBjZG5fZHBfY2xrX2VuYWJsZShk cCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcF9jbG9ja19yZXNldF9zZXEo ZHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2h3X3BhcmFt cyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaGRtaV9jb2RlY19kYWlmbXQgKmRh aWZtdCwKKwkJCQkgIHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVj dCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisJ c3RydWN0IGF1ZGlvX2luZm8gYXVkaW8gPSB7CisJCS5zYW1wbGVfd2lkdGggPSBwYXJhbXMtPnNh bXBsZV93aWR0aCwKKwkJLnNhbXBsZV9yYXRlID0gcGFyYW1zLT5zYW1wbGVfcmF0ZSwKKwkJLmNo YW5uZWxzID0gcGFyYW1zLT5jaGFubmVscywKKwl9OworCisJaWYgKCFkcC0+ZW5jb2Rlci5jcnRj KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoZGFpZm10LT5mbXQpIHsKKwljYXNlIEhE TUlfSTJTOgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX0kyUzsKKwkJYnJlYWs7CisJY2FzZSBIRE1J X1NQRElGOgorCQlhdWRpby5mb3JtYXQgPSBBRk1UX1NQRElGOworCQlicmVhazsKKwlkZWZhdWx0 OgorCQlkZXZfZXJyKGRldiwgIiVzOiBJbnZhbGlkIGZvcm1hdCAlZFxuIiwgX19mdW5jX18sIGRh aWZtdC0+Zm10KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gY2RuX2RwX2F1ZGlv X2NvbmZpZ19zZXQoZHAsICZhdWRpbyk7CisJaWYgKCFyZXQpCisJCWRwLT5hdWRpb19pbmZvID0g YXVkaW87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZG5fZHBfYXVkaW9fc2h1 dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQgPSBjZG5fZHBfYXVkaW9fc3RvcChkcCwg JmRwLT5hdWRpb19pbmZvKTsKKworCWlmICghcmV0KQorCQlkcC0+YXVkaW9faW5mby5mb3JtYXQg PSBBRk1UX1VOVVNFRDsKK30KKworc3RhdGljIGludCBjZG5fZHBfYXVkaW9fZGlnaXRhbF9tdXRl KHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gY2RuX2RwX2F1ZGlvX211 dGUoZHAsIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2F1ZGlvX2dldF9lbGQoc3Ry dWN0IGRldmljZSAqZGV2LCB1aW50OF90ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGNk bl9kcF9kZXZpY2UgKmRwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRybV9tb2Rl X2NvbmZpZyAqY29uZmlnID0gJmRwLT5lbmNvZGVyLmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlpbnQgcmV0ID0gLUVOT0RFVjsKKworCW11dGV4 X2xvY2soJmNvbmZpZy0+bXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLCAm Y29uZmlnLT5jb25uZWN0b3JfbGlzdCwgaGVhZCkgeworCQlpZiAoJmRwLT5lbmNvZGVyID09IGNv bm5lY3Rvci0+ZW5jb2RlcikgeworCQkJbWVtY3B5KGJ1ZiwgY29ubmVjdG9yLT5lbGQsCisJCQkg ICAgICAgbWluKHNpemVvZihjb25uZWN0b3ItPmVsZCksIGxlbikpOworCQkJcmV0ID0gMDsKKwkJ fQorCX0KKwltdXRleF91bmxvY2soJmNvbmZpZy0+bXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBoZG1pX2NvZGVjX29wcyBhdWRpb19jb2RlY19vcHMgPSB7 CisJLmh3X3BhcmFtcyA9IGNkbl9kcF9hdWRpb19od19wYXJhbXMsCisJLmF1ZGlvX3NodXRkb3du ID0gY2RuX2RwX2F1ZGlvX3NodXRkb3duLAorCS5kaWdpdGFsX211dGUgPSBjZG5fZHBfYXVkaW9f ZGlnaXRhbF9tdXRlLAorCS5nZXRfZWxkID0gY2RuX2RwX2F1ZGlvX2dldF9lbGQsCit9OworCitz dGF0aWMgaW50IGNkbl9kcF9hdWRpb19jb2RlY19pbml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cCwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkbWlfY29kZWNfcGRh dGEgY29kZWNfZGF0YSA9IHsKKwkJLmkycyA9IDEsCisJCS5zcGRpZiA9IDEsCisJCS5vcHMgPSAm YXVkaW9fY29kZWNfb3BzLAorCQkubWF4X2kyc19jaGFubmVscyA9IDgsCisJfTsKKworCWRwLT5h dWRpb19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX2RhdGEoCisJCQkgZGV2LCBIRE1J X0NPREVDX0RSVl9OQU1FLCBQTEFURk9STV9ERVZJRF9BVVRPLAorCQkJICZjb2RlY19kYXRhLCBz aXplb2YoY29kZWNfZGF0YSkpOworCisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkcC0+YXVkaW9f cGRldik7Cit9CisKK3N0YXRpYyB2b2lkIGNkbl9kcF9nZXRfc3RhdGUoc3RydWN0IGNkbl9kcF9k ZXZpY2UgKmRwLCBzdHJ1Y3QgZXh0Y29uX2RldiAqZWRldikKK3sKKwlib29sIGFsdCwgZHBfb25s eTsKKwl1OCBjYXBfbGFuZXM7CisKKwlhbHQgPSBleHRjb25fZ2V0X2NhYmxlX3N0YXRlXyhlZGV2 LCBFWFRDT05fRElTUF9EUF9BTFQpOworCWRwX29ubHkgPSBleHRjb25fZ2V0X2NhYmxlX3N0YXRl XyhlZGV2LCBFWFRDT05fRElTUF9EUCk7CisKKwlpZiAoYWx0KQorCQljYXBfbGFuZXMgPSAyOwor CWVsc2UgaWYgKGRwX29ubHkpCisJCWNhcF9sYW5lcyA9IDQ7CisJZWxzZQorCQljYXBfbGFuZXMg PSAwOworCisJaWYgKGNhcF9sYW5lcyAhPSBkcC0+Y2FwX2xhbmVzKSB7CisJCWRwLT5jYXBfbGFu ZXMgPSBjYXBfbGFuZXM7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZHAtPmV2ZW50X3dxLAor CQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoV0FJVF9IUERfU1RBQkxFKSk7CisJfQorfQorCitz dGF0aWMgaW50IGNkbl9kcF9wZF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJ ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHA7CisJc3RydWN0IGV4dGNvbl9kZXYgKmVkZXYgPSBwcml2OworCisJZHAgPSBjb250 YWluZXJfb2YobmIsIHN0cnVjdCBjZG5fZHBfZGV2aWNlLCBldmVudF9uYik7CisJY2RuX2RwX2dl dF9zdGF0ZShkcCwgZWRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2RuX2Rw X3BkX2V2ZW50X3dxKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHA7CisJaW50IHJldDsKKworCWRwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVj dCBjZG5fZHBfZGV2aWNlLCBldmVudF93cS53b3JrKTsKKworCXJldCA9IGNkbl9kcF9maXJtd2Fy ZV9pbml0KGRwKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gLUVOT0VOVCkKKwkJCXJldHVy bjsKKwkJLyoKKwkJICogSWYgY2FuIG5vdCBmaW5kIHRoZSBmaWxlLCByZXRyeSB0byBsb2FkIHRo ZSBmaXJtd2FyZSBpbiAxCisJCSAqIHNlY29uZCwgaWYgc3RpbGwgZmFpbGVkIGFmdGVyIDEgbWlu dXRlLCBnaXZlIHVwLgorCQkgKi8KKwkJaWYgKGRwLT5md19yZXRyeSsrIDwgNjApIHsKKwkJCXNj aGVkdWxlX2RlbGF5ZWRfd29yaygmZHAtPmV2ZW50X3dxLAorCQkJCQkgICAgICBtc2Vjc190b19q aWZmaWVzKEhaKSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCXJldCA9IGNkbl9kcF9nZXRfaHBk X3N0YXR1cyhkcCk7CisJaWYgKHJldCA8PSAwKSB7CisJCS8qIHJlYWQgaHBkIHN0YXR1cyBmYWls ZWQsIG9yIHRoZSBocGQgZG9lcyBub3QgZXhpc3QuICovCisJCWRwLT5ocGRfc3RhdHVzID0gZmFs c2U7CisJCWRybV9oZWxwZXJfaHBkX2lycV9ldmVudChkcC0+ZHJtX2Rldik7CisJCXJldHVybjsK Kwl9CisKKwkvKgorCSAqIFNldCB0aGUgY2FwYWJpbGl0eSBhbmQgc3RhcnQgdGhlIHRyYWluaW5n IHByb2Nlc3Mgb25jZQorCSAqIHRoZSBocGQgaXMgZGV0ZWN0ZWQuCisJICovCisJcmV0ID0gY2Ru X2RwX3NldF9ob3N0X2NhcChkcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJz ZXQgaG9zdCBjYXBhYmlsaXRpZXMgZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9 IGNkbl9kcF90cmFpbmluZ19zdGFydChkcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5k ZXYsICJodyBsdCBlcnI6JWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CisKKwlyZXQgPSBjZG5f ZHBfZ2V0X2x0X3N0YXR1cyhkcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJo dyBsdCBnZXQgc3RhdHVzIGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkZXZfaW5mbyhk cC0+ZGV2LCAicmF0ZTolZCwgbGFuZXM6JWRcbiIsCisJCSBkcC0+bGluay5yYXRlLCBkcC0+bGlu ay5udW1fbGFuZXMpOworCisJZHAtPmhwZF9zdGF0dXMgPSB0cnVlOworCWRybV9oZWxwZXJfaHBk X2lycV9ldmVudChkcC0+ZHJtX2Rldik7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX2JpbmQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCisJCSAgICAgICB2b2lkICpk YXRhKQoreworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp OworCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKKwlpbnQgcmV0 OworCisJcmV0ID0gY2RuX2RwX2luaXQoZHApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0 OworCisJZHAtPmRybV9kZXYgPSBkcm1fZGV2OworCisJZW5jb2RlciA9ICZkcC0+ZW5jb2RlcjsK KworCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gZHJtX29mX2ZpbmRfcG9zc2libGVfY3J0Y3Mo ZHJtX2RldiwKKwkJCQkJCQkgICAgIGRldi0+b2Zfbm9kZSk7CisJRFJNX0RFQlVHX0tNUygicG9z c2libGVfY3J0Y3MgPSAweCV4XG4iLCBlbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyk7CisKKwlyZXQg PSBkcm1fZW5jb2Rlcl9pbml0KGRybV9kZXYsIGVuY29kZXIsICZjZG5fZHBfZW5jb2Rlcl9mdW5j cywKKwkJCSAgICAgICBEUk1fTU9ERV9FTkNPREVSX1RNRFMsIE5VTEwpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBlbmNvZGVyIHdpdGggZHJtXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlkcm1fZW5jb2Rlcl9oZWxwZXJfYWRkKGVuY29kZXIsICZj ZG5fZHBfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOworCisJY29ubmVjdG9yID0gJmRwLT5jb25uZWN0 b3I7CisJY29ubmVjdG9yLT5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOworCWNvbm5l Y3Rvci0+ZHBtcyA9IERSTV9NT0RFX0RQTVNfT0ZGOworCisJcmV0ID0gZHJtX2Nvbm5lY3Rvcl9p bml0KGRybV9kZXYsIGNvbm5lY3RvciwKKwkJCQkgJmNkbl9kcF9hdG9taWNfY29ubmVjdG9yX2Z1 bmNzLAorCQkJCSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOworCWlmIChyZXQpIHsK KwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBjb25uZWN0b3Igd2l0aCBkcm1cbiIp OworCQlnb3RvIGVycl9mcmVlX2VuY29kZXI7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJf YWRkKGNvbm5lY3RvciwgJmNkbl9kcF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKworCXJldCA9 IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwor CWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYXR0YWNoIGNvbm5lY3RvciBhbmQg ZW5jb2RlclxuIik7CisJCWdvdG8gZXJyX2ZyZWVfY29ubmVjdG9yOworCX0KKworCWNkbl9kcF9h dWRpb19jb2RlY19pbml0KGRwLCBkZXYpOworCisJZHAtPmV2ZW50X25iLm5vdGlmaWVyX2NhbGwg PSBjZG5fZHBfcGRfZXZlbnQ7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRwLT5ldmVudF93cSwgY2Ru X2RwX3BkX2V2ZW50X3dxKTsKKwlyZXQgPSBleHRjb25fcmVnaXN0ZXJfbm90aWZpZXIoZHAtPmV4 dGNvbiwgRVhUQ09OX0RJU1BfRFAsCisJCQkJICAgICAgICZkcC0+ZXZlbnRfbmIpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihkZXYsICJyZWdpdHN0ZXIgRVhUQ09OX0RJU1BfRFAgbm90aWZlciBm YWlsZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGV4dGNvbl9yZWdpc3Rlcl9u b3RpZmllcihkcC0+ZXh0Y29uLCBFWFRDT05fRElTUF9EUF9BTFQsCisJCQkJICAgICAgICZkcC0+ ZXZlbnRfbmIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJyZWdpdHN0ZXIgRVhUQ09O X0RJU1BfRFBfQUxUIG5vdGlmZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlj ZG5fZHBfZ2V0X3N0YXRlKGRwLCBkcC0+ZXh0Y29uKTsKKworCXJldHVybiAwOworCitlcnJfZnJl ZV9jb25uZWN0b3I6CisJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CitlcnJfZnJl ZV9lbmNvZGVyOgorCWRybV9lbmNvZGVyX2NsZWFudXAoZW5jb2Rlcik7CisJcmV0dXJuIHJldDsK K30KKworc3RhdGljIHZvaWQgY2RuX2RwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIg PSAmZHAtPmVuY29kZXI7CisKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkcC0+YXVkaW9f cGRldik7CisJY2RuX2RwX2VuY29kZXJfZGlzYWJsZShlbmNvZGVyKTsKKwllbmNvZGVyLT5mdW5j cy0+ZGVzdHJveShlbmNvZGVyKTsKKwlkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoJmRwLT5jb25u ZWN0b3IpOworCWRybV9jb25uZWN0b3JfY2xlYW51cCgmZHAtPmNvbm5lY3Rvcik7CisJZHJtX2Vu Y29kZXJfY2xlYW51cChlbmNvZGVyKTsKKworCWV4dGNvbl91bnJlZ2lzdGVyX25vdGlmaWVyKGRw LT5leHRjb24sIEVYVENPTl9VU0IsCisJCQkJICAgJmRwLT5ldmVudF9uYik7Cit9CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3QgY29tcG9uZW50X29wcyBjZG5fZHBfY29tcG9uZW50X29wcyA9IHsKKwku YmluZCA9IGNkbl9kcF9iaW5kLAorCS51bmJpbmQgPSBjZG5fZHBfdW5iaW5kLAorfTsKKworc3Rh dGljIGludCBjZG5fZHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBjZG5fZHBfZGV2aWNlICpk cDsKKworCWRwID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOwor CWlmICghZHApCisJCXJldHVybiAtRU5PTUVNOworCWRwLT5kZXYgPSBkZXY7CisKKwlkcC0+ZXh0 Y29uID0gZXh0Y29uX2dldF9lZGV2X2J5X3BoYW5kbGUoZGV2LCAwKTsKKwlpZiAoSVNfRVJSKGRw LT5leHRjb24pKSB7CisJCWlmIChQVFJfRVJSKGRwLT5leHRjb24pID09IC1FUFJPQkVfREVGRVIp CisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIG9yIG1p c3NpbmcgZXh0Y29uXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZHAtPmV4dGNvbik7CisJfQorCisJ ZGV2X3NldF9kcnZkYXRhKGRldiwgZHApOworCisJcmV0dXJuIGNvbXBvbmVudF9hZGQoZGV2LCAm Y2RuX2RwX2NvbXBvbmVudF9vcHMpOworfQorCitzdGF0aWMgaW50IGNkbl9kcF9yZW1vdmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb21wb25lbnRfZGVsKCZwZGV2LT5kZXYs ICZjZG5fZHBfY29tcG9uZW50X29wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgY2RuX2RwX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUg PSAicm9ja2NoaXAscmszMzk5LWNkbi1kcCIgfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgY2RuX2RwX2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGNkbl9kcF9kcml2ZXIgPSB7CisJLnByb2JlID0gY2RuX2RwX3Byb2JlLAorCS5yZW1vdmUgPSBj ZG5fZHBfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gImNkbi1kcCIsCisJCSAg IC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9w dHIoY2RuX2RwX2R0X2lkcyksCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoY2Ru X2RwX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzIFpob25nIDx6eXdAcm9jay1jaGlw cy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImNkbiBEUCBEcml2ZXIiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9j ZG4tZHAtY29yZS5oIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1jb3JlLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0MTc2MgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4tZHAtY29yZS5oCkBAIC0wLDAgKzEsMTA4 IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlw cy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgUk9DS0NISVAsIEluYy4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y IG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqLworCisjaWZuZGVmIF9ST0NLQ0hJUF9FRFBfQ09SRV9ICisjZGVmaW5lIF9ST0NLQ0hJ UF9FRFBfQ09SRV9ICisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1ZGUg PGRybS9kcm1fcGFuZWwuaD4KKyNpbmNsdWRlICJyb2NrY2hpcF9kcm1fZHJ2LmgiCisjaW5jbHVk ZSAiY2RuLWRwLXJlZy5oIgorCitlbnVtIEFVRElPX0ZPUk1BVCB7CisJQUZNVF9JMlMgPSAwLAor CUFGTVRfU1BESUYgPSAxLAorCUFGTVRfVU5VU0VELAorfTsKKworc3RydWN0IGF1ZGlvX2luZm8g eworCWVudW0gQVVESU9fRk9STUFUIGZvcm1hdDsKKwlpbnQgc2FtcGxlX3JhdGU7CisJaW50IGNo YW5uZWxzOworCWludCBzYW1wbGVfd2lkdGg7Cit9OworCitzdHJ1Y3QgdmlkZW9faW5mbyB7CisJ Ym9vbCBoX3N5bmNfcG9sYXJpdHk7CisJYm9vbCB2X3N5bmNfcG9sYXJpdHk7CisJYm9vbCBpbnRl cmxhY2VkOworCWludCBjb2xvcl9kZXB0aDsKKwllbnVtIFZJQ19QWExfRU5DT0RJTkdfRk9STUFU IGNvbG9yX2ZtdDsKK307CisKK3N0cnVjdCBjZG5fZmlybXdhcmVfaGVhZGVyIHsKKwl1MzIgc2l6 ZV9ieXRlczsgLyogc2l6ZSBvZiB0aGUgZW50aXJlIGhlYWRlcitpbWFnZShzKSBpbiBieXRlcyAq LworCXUzMiBoZWFkZXJfc2l6ZTsgLyogc2l6ZSBvZiBqdXN0IHRoZSBoZWFkZXIgaW4gYnl0ZXMg Ki8KKwl1MzIgaXJhbV9zaXplOyAvKiBzaXplIG9mIGlyYW0gKi8KKwl1MzIgZHJhbV9zaXplOyAv KiBzaXplIG9mIGRyYW0gKi8KK307CisKK3N0cnVjdCBjZG5fZHBfZGV2aWNlIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7CisJc3RydWN0IGRybV9j b25uZWN0b3IgY29ubmVjdG9yOworCXN0cnVjdCBkcm1fZW5jb2RlciBlbmNvZGVyOworCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlIG1vZGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXVkaW9f cGRldjsKKworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CS8qIGNkbiBkcCBmaXJtd2FyZSAq LworCXVuc2lnbmVkIGludCBmd192ZXJzaW9uOwkvKiBjZG4gZncgdmVyc2lvbiAqLworCXUzMiBm d19yZXRyeTsKKwlib29sIGZ3X2xvYWRlZDsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CisJc3RydWN0 IHJlZ21hcCAqZ3JmOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGNsayAqY29yZV9jbGs7 CisJc3RydWN0IGNsayAqcGNsazsKKwlzdHJ1Y3QgY2xrICpzcGRpZl9jbGs7CisJc3RydWN0IHJl c2V0X2NvbnRyb2wgKnNwZGlmX3JzdDsKKwlzdHJ1Y3QgYXVkaW9faW5mbyBhdWRpb19pbmZvOwor CXN0cnVjdCB2aWRlb19pbmZvIHZpZGVvX2luZm87CisJc3RydWN0IGV4dGNvbl9kZXYgKmV4dGNv bjsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZXZlbnRfbmI7CisJc3RydWN0IGRlbGF5ZWRfd29y ayBldmVudF93cTsKKworCXU4IGNhcF9sYW5lczsKKwlib29sIGhwZF9zdGF0dXM7CisKKwlpbnQg ZHBtc19tb2RlOworCXN0cnVjdCBkcm1fZHBfbGluayBsaW5rOworCWJvb2wgc2lua19oYXNfYXVk aW87Cit9OworCit2b2lkIGRwX2Nsb2NrX3Jlc2V0X3NlcShzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHApOworCit2b2lkIGNkbl9kcF9zZXRfZndfY2xrKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwg aW50IGNsayk7CitpbnQgY2RuX2RwX2xvYWRfZmlybXdhcmUoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwLCBjb25zdCB1MzIgKmlfbWVtLAorCQkJIHUzMiBpX3NpemUsIGNvbnN0IHUzMiAqZF9tZW0s IHUzMiBkX3NpemUpOworaW50IGNkbl9kcF9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRw LCBib29sIGVuYWJsZSk7CitpbnQgY2RuX2RwX3NldF9ob3N0X2NhcChzdHJ1Y3QgY2RuX2RwX2Rl dmljZSAqZHApOworaW50IGNkbl9kcF9ldmVudF9jb25maWcoc3RydWN0IGNkbl9kcF9kZXZpY2Ug KmRwKTsKK2ludCBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7Citp bnQgY2RuX2RwX2dldF9ocGRfc3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCk7CitpbnQg Y2RuX2RwX2RwY2Rfd3JpdGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1MzIgYWRkciwgdTgg dmFsdWUpOworaW50IGNkbl9kcF9kcGNkX3JlYWQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1 MzIgYWRkcik7CitpbnQgY2RuX2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRwLCB1OCAqZWRpZCwK KwkJCSAgdW5zaWduZWQgaW50IGJsb2NrLCBzaXplX3QgbGVuZ3RoKTsKK2ludCBjZG5fZHBfdHJh aW5pbmdfc3RhcnQoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKTsKK2ludCBjZG5fZHBfZ2V0X2x0 X3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9zZXRfdmlkZW9f c3RhdHVzKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgaW50IGFjdGl2ZSk7CitpbnQgY2RuX2Rw X2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApOworaW50IGNkbl9kcF9hdWRp b19zdG9wKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlv KTsKK2ludCBjZG5fZHBfYXVkaW9fbXV0ZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGJvb2wg ZW5hYmxlKTsKK2ludCBjZG5fZHBfYXVkaW9fY29uZmlnX3NldChzdHJ1Y3QgY2RuX2RwX2Rldmlj ZSAqZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbyk7CisKKyNlbmRpZiAgLyogX1JPQ0tDSElQ X0VEUF9DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9jZG4t ZHAtcmVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWE3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jCkBAIC0wLDAgKzEsNzMxIEBACisv KgorICogQ29weXJpZ2h0IChDKSBGdXpob3UgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uTHRkCisg KiBBdXRob3I6IENocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5jb20+CisgKgorICogVGhpcyBz b2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQg bW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq LworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cisj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUg PGxpbnV4L2lvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlICJj ZG4tZHAtY29yZS5oIgorI2luY2x1ZGUgImNkbi1kcC1yZWcuaCIKKworI2RlZmluZSBDRE5fRFBf U1BESUZfQ0xLCQkyMDAwMDAwMDAKKyNkZWZpbmUgRldfQUxJVkVfVElNRU9VVF9VUwkJMTAwMDAw MAorI2RlZmluZSBNQUlMQk9YX1RJTUVPVVRfVVMJCTUwMDAwMDAKKwordm9pZCBjZG5fZHBfc2V0 X2Z3X2NsayhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGludCBjbGspCit7CisJd3JpdGVsKGNs ayAvIDEwMDAwMDAsIGRwLT5yZWdzICsgU1dfQ0xLX0gpOworfQorCit2b2lkIGRwX2Nsb2NrX3Jl c2V0X3NlcShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJd3JpdGVsKDB4ZmZmLCBkcC0+ cmVncyArIFNPVVJDRV9EUFRYX0NBUik7CisJd3JpdGVsKDB4NywgZHAtPnJlZ3MgKyBTT1VSQ0Vf UEhZX0NBUik7CisJd3JpdGVsKDB4ZiwgZHAtPnJlZ3MgKyBTT1VSQ0VfUEtUX0NBUik7CisJd3Jp dGVsKDB4ZmYsIGRwLT5yZWdzICsgU09VUkNFX0FJRl9DQVIpOworCXdyaXRlbCgweGYsIGRwLT5y ZWdzICsgU09VUkNFX0NJUEhFUl9DQVIpOworCXdyaXRlbCgweDMsIGRwLT5yZWdzICsgU09VUkNF X0NSWVBUT19DQVIpOworCXdyaXRlbCgwLCBkcC0+cmVncyArIEFQQl9JTlRfTUFTSyk7Cit9CisK K3N0YXRpYyBpbnQgY2RuX2RwX21haWxib3hfcmVhZChzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAp Cit7CisJaW50IHZhbCwgcmV0OworCisJaWYgKCFkcC0+ZndfbG9hZGVkKQorCQlyZXR1cm4gMDsK KworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChyZWFkbCwgZHAtPnJlZ3MgKyBNQUlMQk9YX0VN UFRZX0FERFIsCisJCQkJIHZhbCwgIXZhbCwgMTAwMCwgTUFJTEJPWF9USU1FT1VUX1VTKTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcmVhZCBtYWlsYm94 LCBrZWVwIGFsaXZlID0gJXhcbiIsCisJCQlyZWFkbChkcC0+cmVncyArIEtFRVBfQUxJVkUpKTsK KwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBNQUlMQk9YMF9S RF9EQVRBKSAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbnQgY2RwX2RwX21haWxib3hfd3JpdGUoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwLCB1OCB2YWwpCit7CisJaW50IHJldCwgZnVsbDsKKworCWlm ICghZHAtPmZ3X2xvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSByZWFkeF9wb2xsX3RpbWVv dXQocmVhZGwsIGRwLT5yZWdzICsgTUFJTEJPWF9GVUxMX0FERFIsCisJCQkJIGZ1bGwsICFmdWxs LCAxMDAwLCBNQUlMQk9YX1RJTUVPVVRfVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIo ZHAtPmRldiwgIm1haWxib3ggaXMgZnVsbCwga2VlcCBhbGl2ZSA9ICV4XG4iLAorCQkJcmVhZGwo ZHAtPnJlZ3MgKyBLRUVQX0FMSVZFKSk7CisJCXJldHVybiByZXQ7CisJfQorCisJd3JpdGVsKHZh bCwgZHAtPnJlZ3MgKyBNQUlMQk9YMF9XUl9EQVRBKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwg dTggbW9kdWxlX2lkLAorCQkJCSAgIHU4IG9wY29kZSwgdTggKmJ1ZmYsIHU4IGJ1ZmZfc2l6ZSkK K3sKKwlpbnQgcmV0LCBpID0gMDsKKwl1OCBoZWFkZXJbNF07CisKKwkvKiByZWFkIHRoZSBoZWFk ZXIgb2YgdGhlIG1lc3NhZ2UgKi8KKwl3aGlsZSAoaSA8IDQpIHsKKwkJcmV0ID0gY2RuX2RwX21h aWxib3hfcmVhZChkcCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQloZWFk ZXJbaSsrXSA9IHJldDsKKwl9CisKKwlpZiAob3Bjb2RlICE9IGhlYWRlclswXSB8fCBtb2R1bGVf aWQgIT0gaGVhZGVyWzFdIHx8CisJICAgIGJ1ZmZfc2l6ZSAhPSAoKGhlYWRlclsyXSA8PCA4KSB8 IGhlYWRlclszXSkpIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAibWFpbGJveCByZXNwb25zZSBmYWls ZWQiKTsKKworCQkvKgorCQkgKiBJZiB0aGUgbWVzc2FnZSBpbiBtYWlsYm94IGlzIG5vdCB3aGF0 IHdlIHdhbnQsIHdlIG5lZWQgdG8KKwkJICogY2xlYXIgdGhlIG1haWxib3ggYnkgcmVhZC4KKwkJ ICovCisJCWkgPSAoaGVhZGVyWzJdIDw8IDgpIHwgaGVhZGVyWzNdOworCQl3aGlsZSAoaS0tKQor CQkJaWYgKGNkbl9kcF9tYWlsYm94X3JlYWQoZHApIDwgMCkKKwkJCQlicmVhazsKKworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKKwlpID0gMDsKKwl3aGlsZSAoaSA8IGJ1ZmZfc2l6ZSkgeworCQly ZXQgPSBjZG5fZHBfbWFpbGJveF9yZWFkKGRwKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4g cmV0OworCisJCWJ1ZmZbaSsrXSA9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBjZG5fZHBfbWFpbGJveF9zZW5kKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTggbW9k dWxlX2lkLAorCQkJICAgICAgIHU4IG9wY29kZSwgdTE2IHNpemUsIHU4ICptZXNzYWdlKQorewor CXU4IGhlYWRlcls0XTsKKwlpbnQgcmV0LCBpOworCisJaGVhZGVyWzBdID0gb3Bjb2RlOworCWhl YWRlclsxXSA9IG1vZHVsZV9pZDsKKwloZWFkZXJbMl0gPSBzaXplID4+IDg7CisJaGVhZGVyWzNd ID0gc2l6ZSAmIDB4ZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXJldCA9IGNk cF9kcF9tYWlsYm94X3dyaXRlKGRwLCBoZWFkZXJbaV0pOworCQlpZiAocmV0KQorCQkJcmV0dXJu IHJldDsKKwl9CisKKwl3aGlsZSAoc2l6ZS0tKSB7CisJCXJldCA9IGNkcF9kcF9tYWlsYm94X3dy aXRlKGRwLCAqbWVzc2FnZSsrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2RuX2RwX3JlZ193cml0ZShzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHAsIHUxNiBhZGRyLCB1MzIgdmFsKQoreworCXU4IG1zZ1s2XTsKKworCW1zZ1sw XSA9IChhZGRyID4+IDgpICYgMHhmZjsKKwltc2dbMV0gPSBhZGRyICYgMHhmZjsKKwltc2dbMl0g PSAodmFsID4+IDI0KSAmIDB4ZmY7CisJbXNnWzNdID0gKHZhbCA+PiAxNikgJiAweGZmOworCW1z Z1s0XSA9ICh2YWwgPj4gOCkgJiAweGZmOworCW1zZ1s1XSA9IHZhbCAmIDB4ZmY7CisJcmV0dXJu IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9XUklURV9S RUdJU1RFUiwKKwkJCQkgICBBUlJBWV9TSVpFKG1zZyksIG1zZyk7Cit9CisKK2ludCBjZG5fZHBf bG9hZF9maXJtd2FyZShzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsIGNvbnN0IHUzMiAqaV9tZW0s CisJCQkgdTMyIGlfc2l6ZSwgY29uc3QgdTMyICpkX21lbSwgdTMyIGRfc2l6ZSkKK3sKKwlpbnQg aSwgcmVnLCByZXQ7CisKKwkvKiByZXNldCB1Y3B1IGJlZm9yZSBsb2FkIGZpcm13YXJlKi8KKwl3 cml0ZWwoQVBCX0lSQU1fUEFUSCB8IEFQQl9EUkFNX1BBVEggfCBBUEJfWFRfUkVTRVQsCisJICAg ICAgIGRwLT5yZWdzICsgQVBCX0NUUkwpOworCisJZm9yIChpID0gMDsgaSA8IGlfc2l6ZTsgaSAr PSA0KQorCQl3cml0ZWwoKmlfbWVtKyssIGRwLT5yZWdzICsgQUREUl9JTUVNICsgaSk7CisKKwlm b3IgKGkgPSAwOyBpIDwgZF9zaXplOyBpICs9IDQpCisJCXdyaXRlbCgqZF9tZW0rKywgZHAtPnJl Z3MgKyBBRERSX0RNRU0gKyBpKTsKKworCS8qIHVuLXJlc2V0IHVjcHUgKi8KKwl3cml0ZWwoMCwg ZHAtPnJlZ3MgKyBBUEJfQ1RSTCk7CisKKwkvKiBjaGVjayB0aGUga2VlcCBhbGl2ZSByZWdpc3Rl ciB0byBtYWtlIHN1cmUgZncgd29ya2luZyAqLworCXJldCA9IHJlYWR4X3BvbGxfdGltZW91dChy ZWFkbCwgZHAtPnJlZ3MgKyBLRUVQX0FMSVZFLAorCQkJCSByZWcsIHJlZywgMjAwMCwgRldfQUxJ VkVfVElNRU9VVF9VUyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkcC0+ZGV2LCAiZmFp bGVkIHRvIGxvYWRlZCB0aGUgRlcgcmVnID0gJXhcbiIsIHJlZyk7CisJCXJldHVybiAtRUlOVkFM OworCX0KKworCXJlZyA9IHJlYWRsKGRwLT5yZWdzICsgVkVSX0wpICYgMHhmZjsKKwlkcC0+Zndf dmVyc2lvbiA9IHJlZzsKKwlyZWcgPSByZWFkbChkcC0+cmVncyArIFZFUl9IKSAmIDB4ZmY7CisJ ZHAtPmZ3X3ZlcnNpb24gfD0gcmVnIDw8IDg7CisJcmVnID0gcmVhZGwoZHAtPnJlZ3MgKyBWRVJf TElCX0xfQUREUikgJiAweGZmOworCWRwLT5md192ZXJzaW9uIHw9IHJlZyA8PCAxNjsKKwlyZWcg PSByZWFkbChkcC0+cmVncyArIFZFUl9MSUJfSF9BRERSKSAmIDB4ZmY7CisJZHAtPmZ3X3ZlcnNp b24gfD0gcmVnIDw8IDI0OworCisJZHAtPmZ3X2xvYWRlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30K KworaW50IGNkbl9kcF9yZWdfd3JpdGVfYml0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgdTE2 IGFkZHIsIHU4IHN0YXJ0X2JpdCwKKwkJCSB1OCBiaXRzX25vLCB1MzIgdmFsKQoreworCXU4IGZp ZWxkWzhdOworCisJZmllbGRbMF0gPSAoYWRkciA+PiA4KSAmIDB4ZmY7CisJZmllbGRbMV0gPSBh ZGRyICYgMHhmZjsKKwlmaWVsZFsyXSA9IHN0YXJ0X2JpdDsKKwlmaWVsZFszXSA9IGJpdHNfbm87 CisJZmllbGRbNF0gPSAodmFsID4+IDI0KSAmIDB4ZmY7CisJZmllbGRbNV0gPSAodmFsID4+IDE2 KSAmIDB4ZmY7CisJZmllbGRbNl0gPSAodmFsID4+IDgpICYgMHhmZjsKKwlmaWVsZFs3XSA9IHZh bCAmIDB4ZmY7CisKKwlyZXR1cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLCBEUFRYX1dSSVRFX0ZJRUxELAorCQkJICAgIHNpemVvZihmaWVsZCksIGZpZWxkKTsK K30KKworaW50IGNkbl9kcF9hY3RpdmUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwLCBib29sIGVu YWJsZSkKK3sKKwl1OCBhY3RpdmUgPSBlbmFibGUgPyAxIDogMDsKKwl1OCByZXNwOworCWludCBy ZXQ7CisKKwkvKiBzZXQgZmlybXdhcmUgc3RhdHVzLCAxOiBhdnRpdmU7IDA6IHN0YW5kYnkgKi8K KwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfR0VORVJBTCwKKwkJ CQkgIEdFTkVSQUxfTUFJTl9DT05UUk9MLCAxLCAmYWN0aXZlKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVzcG9uc2UoZHAsIE1CX01PRFVMRV9J RF9HRU5FUkFMLAorCQkJCSAgICAgIEdFTkVSQUxfTUFJTl9DT05UUk9MLCAmcmVzcCwgMSk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXNwID8gMCA6IC1FSU5WQUw7Cit9 CisKK2ludCBjZG5fZHBfc2V0X2hvc3RfY2FwKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sK Kwl1OCBtc2dbOF07CisJaW50IHJldDsKKworCW1zZ1swXSA9IERQX0xJTktfQldfNV80OworCW1z Z1sxXSA9IGRwLT5jYXBfbGFuZXM7CisJbXNnWzJdID0gVk9MVEFHRV9MRVZFTF8yOworCW1zZ1sz XSA9IFBSRV9FTVBIQVNJU19MRVZFTF8zOworCW1zZ1s0XSA9IFBSQlM3IHwgRDEwXzIgfCBUUkFJ TklOR19QVE4xIHwgVFJBSU5JTkdfUFROMjsKKwltc2dbNV0gPSBGQVNUX0xUX05PVF9TVVBQT1JU OworCW1zZ1s2XSA9IExBTkVfTUFQUElOR19OT1JNQUw7CisJbXNnWzddID0gRU5IQU5DRUQ7CisK KwlyZXQgPSBjZG5fZHBfbWFpbGJveF9zZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJ ICBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUywKKwkJCQkgIEFSUkFZX1NJWkUobXNnKSwgbXNn KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShk cCwgRFBfQVVYX1NXQVBfSU5WRVJTSU9OX0NPTlRST0wsCisJCQkgICAgICAgQVVYX0hPU1RfSU5W RVJUKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBj ZG5fZHBfZXZlbnRfY29uZmlnKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sKKwl1OCBtc2db NV0gPSB7MCwgMCwgMCwgMCwgMH07CisKKwltc2dbMF0gPSBEUFRYX0VWRU5UX0VOQUJMRV9IUEQg fCBEUFRYX0VWRU5UX0VOQUJMRV9UUkFJTklORzsKKworCXJldHVybiBjZG5fZHBfbWFpbGJveF9z ZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfRU5BQkxFX0VWRU5ULAorCQkJCSAgICBB UlJBWV9TSVpFKG1zZyksIG1zZyk7Cit9CisKK2ludCBjZG5fZHBfZ2V0X2V2ZW50KHN0cnVjdCBj ZG5fZHBfZGV2aWNlICpkcCkKK3sKKwlyZXR1cm4gcmVhZGwoZHAtPnJlZ3MgKyBTV19FVkVOVFMw KTsKK30KKworaW50IGNkbl9kcF9nZXRfaHBkX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHApCit7CisJdTggc3RhdHVzOworCWludCByZXQ7CisKKwlyZXQgPSBjZG5fZHBfbWFpbGJveF9z ZW5kKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsIERQVFhfSFBEX1NUQVRFLAorCQkJCSAgMCwgTlVM TCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jl c3BvbnNlKGRwLCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJICAgICAgRFBUWF9IUERfU1RBVEUs ICZzdGF0dXMsIDEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3RhdHVz OworfQorCitpbnQgY2RuX2RwX2dldF9lZGlkX2Jsb2NrKHZvaWQgKmRhdGEsIHU4ICplZGlkLAor CQkJICB1bnNpZ25lZCBpbnQgYmxvY2ssIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IGNkbl9k cF9kZXZpY2UgKmRwID0gZGF0YTsKKwl1OCBtc2dbMl0sIHJlZ1tFRElEX0RBVEEgKyBFRElEX0JM T0NLX1NJWkVdOworCWludCByZXQ7CisKKwlpZiAobGVuZ3RoICE9IEVESURfQkxPQ0tfU0laRSkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwltc2dbMF0gPSBibG9jayAvIDI7CisJbXNnWzFdID0gYmxv Y2sgJSAyOworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQ X1RYLCBEUFRYX0dFVF9FRElELAorCQkJCSAgMiwgbXNnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfcmVzcG9uc2UoZHAsIE1CX01PRFVMRV9JRF9E UF9UWCwKKwkJCQkgICAgICBEUFRYX0dFVF9FRElELCByZWcsCisJCQkJICAgICAgRURJRF9EQVRB ICsgRURJRF9CTE9DS19TSVpFKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJl Z1tFRElEX0xFTkdUSF9CWVRFXSAhPSBFRElEX0JMT0NLX1NJWkUgfHwKKwkgICAgcmVnW0VESURf U0VHTUVOVF9CVU1CRVJdICE9IGJsb2NrIC8gMikgeworCQlkZXZfZXJyKGRwLT5kZXYsICJlZGlk IGJsb2NrIHNpemUgZXJyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KGVk aWQsICZyZWdbRURJRF9EQVRBXSwgRURJRF9CTE9DS19TSVpFKTsKKworCXJldHVybiAwOworfQor CitpbnQgY2RuX2RwX3RyYWluaW5nX3N0YXJ0KHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCkKK3sK Kwl1OCBtc2csIGV2ZW50WzJdOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0Owor CisJbXNnID0gTElOS19UUkFJTklOR19SVU47CisKKwkvKiBzdGFydCB0cmFpbmluZyAqLworCXJl dCA9IGNkbl9kcF9tYWlsYm94X3NlbmQoZHAsIE1CX01PRFVMRV9JRF9EUF9UWCwgRFBUWF9UUkFJ TklOR19DT05UUk9MLAorCQkJCSAgMSwgJm1zZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCS8qIHRoZSB3aG9sZSB0cmFpbmluZyBzaG91bGQgZmluaXNoIGluIDUwMG1zICovCisJdGlt ZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CisJd2hpbGUgKDEpIHsKKwkJ bXNsZWVwKDIwKTsKKwkJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lE X0RQX1RYLAorCQkJCQkgIERQVFhfUkVBRF9FVkVOVCwgMCwgTlVMTCk7CisJCWlmIChyZXQpCisJ CQlyZXR1cm4gcmV0OworCisJCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRwLCBNQl9N T0RVTEVfSURfRFBfVFgsCisJCQkJCSAgICAgIERQVFhfUkVBRF9FVkVOVCwgZXZlbnQsIDIpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoZXZlbnRbMV0gJiBFUV9QSEFTRV9G SU5JU0hFRCkKKwkJCWJyZWFrOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQp KQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBjZG5f ZHBfZ2V0X2x0X3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCit7CisJdTggc3RhdHVz WzEwXTsKKwlpbnQgcmV0OworCisJcmV0ID0gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9E VUxFX0lEX0RQX1RYLCBEUFRYX1JFQURfTElOS19TVEFULAorCQkJCSAgMCwgTlVMTCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGNkbl9kcF9tYWlsYm94X3Jlc3BvbnNlKGRw LCBNQl9NT0RVTEVfSURfRFBfVFgsCisJCQkJICAgICAgRFBUWF9SRUFEX0xJTktfU1RBVCwgc3Rh dHVzLCAxMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRwLT5saW5rLnJhdGUgPSBz dGF0dXNbMF07CisJZHAtPmxpbmsubnVtX2xhbmVzID0gc3RhdHVzWzFdOworCisJcmV0dXJuIDA7 Cit9CisKK2ludCBjZG5fZHBfc2V0X3ZpZGVvX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsIGludCBhY3RpdmUpCit7CisJdTggbXNnOworCisJbXNnID0gISFhY3RpdmU7CisKKwlyZXR1 cm4gY2RuX2RwX21haWxib3hfc2VuZChkcCwgTUJfTU9EVUxFX0lEX0RQX1RYLCBEUFRYX1NFVF9W SURFTywKKwkJCQkgICAxLCAmbXNnKTsKK30KKworc3RhdGljIGludCBjZG5fZHBfZ2V0X21zYV9t aXNjKHN0cnVjdCB2aWRlb19pbmZvICp2aWRlbywKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZSkKK3sKKwl1OCB2YWwwLCB2YWwxOworCXUzMiBtc2FfbWlzYzsKKworCXN3 aXRjaCAodmlkZW8tPmNvbG9yX2ZtdCkgeworCWNhc2UgUFhMX1JHQjoKKwljYXNlIFlfT05MWToK KwkJdmFsMCA9IDA7CisJCWJyZWFrOworCWNhc2UgWUNCQ1JfNF80XzQ6CisJCXZhbDAgPSA2Owor CQlicmVhazsKKwljYXNlIFlDQkNSXzRfMl8yOgorCQl2YWwwID0gNTsKKwkJYnJlYWs7CisJY2Fz ZSBZQ0JDUl80XzJfMDoKKwkJdmFsMCA9IDU7CisJCWJyZWFrOworCX07CisKKwlzd2l0Y2ggKHZp ZGVvLT5jb2xvcl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFsMSA9IDA7CisJCWJyZWFrOworCWNh c2UgODoKKwkJdmFsMSA9IDE7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCXZhbDEgPSAyOworCQli cmVhazsKKwljYXNlIDEyOgorCQl2YWwxID0gMzsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFs MSA9IDQ7CisJCWJyZWFrOworCX07CisKKwltc2FfbWlzYyA9IDIgKiB2YWwwICsgMzIgKiB2YWwx ICsKKwkJICAgKCh2aWRlby0+Y29sb3JfZm10ID09IFlfT05MWSkgPyAoMSA8PCAxNCkgOiAwKTsK KworCXJldHVybiBtc2FfbWlzYzsKK30KKworaW50IGNkbl9kcF9jb25maWdfdmlkZW8oc3RydWN0 IGNkbl9kcF9kZXZpY2UgKmRwKQoreworCXN0cnVjdCB2aWRlb19pbmZvICp2aWRlbyA9ICZkcC0+ dmlkZW9faW5mbzsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkcC0+bW9kZTsK Kwl1MzIgdmFsLCBsaW5rX3JhdGU7CisJdTggYml0X3Blcl9waXg7CisJaW50IHJldDsKKworCWJp dF9wZXJfcGl4ID0gKHZpZGVvLT5jb2xvcl9mbXQgPT0gWUNCQ1JfNF8yXzIpID8KKwkJICAgICAg KHZpZGVvLT5jb2xvcl9kZXB0aCAqIDIpIDogKHZpZGVvLT5jb2xvcl9kZXB0aCAqIDMpOworCisJ dmFsID0gVklGX0JZUEFTU19JTlRFUkxBQ0U7CisKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRw LCBCTkRfSFNZTkMyVlNZTkMsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJl dCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIEhTWU5DMlZTWU5DX1BPTF9DVFJMLCAwKTsKKwlpZiAo cmV0KQorCQlyZXR1cm4gcmV0OworCisJbGlua19yYXRlID0gZHJtX2RwX2J3X2NvZGVfdG9fbGlu a19yYXRlKGRwLT5saW5rLnJhdGUpIC8gMTAwMDsKKworCXZhbCA9IFRVX1NJWkUgKiBtb2RlLT5j bG9jayAqIGJpdF9wZXJfcGl4OworCXZhbCAvPSBkcC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3Jh dGUgKiA4ICogMTAwMDsKKwl2YWwgKz0gVFVfU0laRSA8PCA4OworCisJcmV0ID0gY2RuX2RwX3Jl Z193cml0ZShkcCwgRFBfRlJBTUVSX1RVLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7 CisKKwlzd2l0Y2ggKHZpZGVvLT5jb2xvcl9kZXB0aCkgeworCWNhc2UgNjoKKwkJdmFsID0gQkNT XzY7CisJCWJyZWFrOworCWNhc2UgODoKKwkJdmFsID0gQkNTXzg7CisJCWJyZWFrOworCWNhc2Ug MTA6CisJCXZhbCA9IEJDU18xMDsKKwkJYnJlYWs7CisJY2FzZSAxMjoKKwkJdmFsID0gQkNTXzEy OworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWwgPSBCQ1NfMTY7CisJCWJyZWFrOworCX07CisK Kwl2YWwgKz0gdmlkZW8tPmNvbG9yX2ZtdCA8PCA4OworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIERQX0ZSQU1FUl9QWExfUkVQUiwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJdmFsID0gdmlkZW8tPmhfc3luY19wb2xhcml0eSA/IERQX0ZSQU1FUl9TUF9IU1AgOiAwOwor CXZhbCB8PSB2aWRlby0+dl9zeW5jX3BvbGFyaXR5ID8gRFBfRlJBTUVSX1NQX1ZTUCA6IDA7CisJ cmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfRlJBTUVSX1NQLCB2YWwpOworCWlmIChyZXQp CisJCXJldHVybiByZXQ7CisKKwl2YWwgPSAobW9kZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlz cGxheSkgPDwgMTY7CisJdmFsIHw9IG1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX2VuZDsKKwly ZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9GUk9OVF9CQUNLX1BPUkNILCB2YWwpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT5oZGlzcGxheSAqIGJpdF9wZXJf cGl4IC8gODsKKwlyZXQgPSBjZG5fZHBfcmVnX3dyaXRlKGRwLCBEUF9CWVRFX0NPVU5ULCB2YWwp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBtb2RlLT5odG90YWwgfCAoKG1v ZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX3N0YXJ0KSA8PCAxNik7CisJcmV0ID0gY2RuX2RwX3Jl Z193cml0ZShkcCwgTVNBX0hPUklaT05UQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJdmFsID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJdmFs IHw9IChtb2RlLT5oZGlzcGxheSA8PCAxNikgfCAodmlkZW8tPmhfc3luY19wb2xhcml0eSA8PCAx NSk7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX0hPUklaT05UQUxfMSwgdmFsKTsK KwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXZhbCB8 PSAoKG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0KSA8PCAxNik7CisKKwlyZXQgPSBj ZG5fZHBfcmVnX3dyaXRlKGRwLCBNU0FfVkVSVElDQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQly ZXR1cm4gcmV0OworCisJdmFsID0gbW9kZS0+dnN5bmNfZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7 CisJdmFsIHw9IG1vZGUtPnZkaXNwbGF5IDw8IDE2OworCXZhbCB8PSAodmlkZW8tPnZfc3luY19w b2xhcml0eSA8PCAxNSk7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgTVNBX1ZFUlRJQ0FM XzEsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCA9IGNkbl9kcF9nZXRf bXNhX21pc2ModmlkZW8sIG1vZGUpOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIE1TQV9N SVNDLCB2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBjZG5fZHBfcmVn X3dyaXRlKGRwLCBTVFJFQU1fQ09ORklHLCAxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJdmFsID0gbW9kZS0+aHN5bmNfZW5kIC0gbW9kZS0+aHN5bmNfc3RhcnQ7CisJdmFsIHw9ICht b2RlLT5oZGlzcGxheSA8PCAxNik7CisJcmV0ID0gY2RuX2RwX3JlZ193cml0ZShkcCwgRFBfSE9S SVpPTlRBTCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gbW9kZS0+ dnRvdGFsOworCXZhbCAtPSAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3BsYXkpOworCXZhbCB8 PSAobW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfc3RhcnQpIDw8IDE2OworCisJcmV0ID0gY2Ru X2RwX3JlZ193cml0ZShkcCwgRFBfVkVSVElDQUxfMCwgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1 cm4gcmV0OworCisJdmFsID0gbW9kZS0+dnRvdGFsOworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUo ZHAsIERQX1ZFUlRJQ0FMXzEsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZh bCA9ICAwOworCXJldHVybiBjZG5fZHBfcmVnX3dyaXRlX2JpdChkcCwgRFBfVkJfSUQsIDIsIDEs IHZhbCk7Cit9CisKK2ludCBjZG5fZHBfYXVkaW9fc3RvcChzdHJ1Y3QgY2RuX2RwX2RldmljZSAq ZHAsIHN0cnVjdCBhdWRpb19pbmZvICphdWRpbykKK3sKKwlpbnQgcmV0ID0gY2RuX2RwX3JlZ193 cml0ZShkcCwgQVVESU9fUEFDS19DT05UUk9MLCBBVURJT19QQUNLX0VOKDApKTsKKworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisJd3JpdGVsKDB4MUYwNzA3LCBkcC0+cmVncyArIFNQRElGX0NU UkxfQUREUik7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NOVEwpOworCXdyaXRl bCgwLCBkcC0+cmVncyArIEFVRElPX1NSQ19DTkZHKTsKKwl3cml0ZWwoMSwgZHAtPnJlZ3MgKyBB VURJT19TUkNfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NOVEwpOwor CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3JpdGVsKDEsIGRwLT5y ZWdzICsgU01QTDJQS1RfQ05UTCk7CisJd3JpdGVsKDAsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05U TCk7CisKKwl3cml0ZWwoMSwgZHAtPnJlZ3MgKyBGSUZPX0NOVEwpOworCXdyaXRlbCgwLCBkcC0+ cmVncyArIEZJRk9fQ05UTCk7CisKKwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX1NQRElGKQor CQljbGtfZGlzYWJsZV91bnByZXBhcmUoZHAtPnNwZGlmX2Nsayk7CisKKwlyZXR1cm4gMDsKK30K KworaW50IGNkbl9kcF9hdWRpb19tdXRlKHN0cnVjdCBjZG5fZHBfZGV2aWNlICpkcCwgYm9vbCBl bmFibGUpCit7CisJcmV0dXJuIGNkbl9kcF9yZWdfd3JpdGVfYml0KGRwLCBEUF9WQl9JRCwgNCwg MSwgZW5hYmxlKTsKK30KKworaW50IGNkbl9kcF9hdWRpb19jb25maWdfc2V0KHN0cnVjdCBjZG5f ZHBfZGV2aWNlICpkcCwgc3RydWN0IGF1ZGlvX2luZm8gKmF1ZGlvKQoreworCWludCBsYW5lc19w YXJhbSwgaTJzX3BvcnRfZW5fdmFsLCB2YWwsIGk7CisJaW50IHJldDsKKworCWlmIChhdWRpby0+ Y2hhbm5lbHMgPT0gMiAmJiBkcC0+bGluay5udW1fbGFuZXMgPT0gMSkKKwkJbGFuZXNfcGFyYW0g PSAxOworCWVsc2UgaWYgKGF1ZGlvLT5jaGFubmVscyA9PSAyKQorCQlsYW5lc19wYXJhbSA9IDM7 CisJZWxzZQorCQlsYW5lc19wYXJhbSA9IDA7CisKKwlpZiAoYXVkaW8tPmNoYW5uZWxzID09IDIp CisJCWkyc19wb3J0X2VuX3ZhbCA9IDE7CisJZWxzZSBpZiAoYXVkaW8tPmNoYW5uZWxzID09IDQp CisJCWkyc19wb3J0X2VuX3ZhbCA9IDM7CisJZWxzZQorCQlpMnNfcG9ydF9lbl92YWwgPSAweGY7 CisKKwlpZiAoYXVkaW8tPmZvcm1hdCA9PSBBRk1UX1NQRElGKSB7CisJCXJlc2V0X2NvbnRyb2xf YXNzZXJ0KGRwLT5zcGRpZl9yc3QpOworCQlyZXNldF9jb250cm9sX2RlYXNzZXJ0KGRwLT5zcGRp Zl9yc3QpOworCX0KKworCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIENNX0xBTkVfQ1RSTCwg MHg4MDAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gY2RuX2RwX3JlZ193 cml0ZShkcCwgQ01fQ1RSTCwgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChh dWRpby0+Zm9ybWF0ID09IEFGTVRfSTJTKSB7CisJCXdyaXRlbCgweDAsIGRwLT5yZWdzICsgU1BE SUZfQ1RSTF9BRERSKTsKKworCQl3cml0ZWwoU1lOQ19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyAr IEZJRk9fQ05UTCk7CisKKwkJdmFsID0gYXVkaW8tPmNoYW5uZWxzIC0gMTsKKwkJdmFsIHw9IChh dWRpby0+Y2hhbm5lbHMgLyAyIC0gMSkgPDwgNTsKKwkJdmFsIHw9IEJJVCg4KTsKKwkJdmFsIHw9 IGxhbmVzX3BhcmFtIDw8IDExOworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNNUEwyUEtUX0NO RkcpOworCisJCWlmIChhdWRpby0+c2FtcGxlX3dpZHRoID09IDE2KQorCQkJdmFsID0gMDsKKwkJ ZWxzZSBpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAyNCkKKwkJCXZhbCA9IDEgPDwgOTsKKwkJ ZWxzZQorCQkJdmFsID0gMiA8PCA5OworCisJCXZhbCB8PSAoYXVkaW8tPmNoYW5uZWxzIC0gMSkg PDwgMjsKKwkJdmFsIHw9IGkyc19wb3J0X2VuX3ZhbCA8PCAxNzsKKwkJdmFsIHw9IDIgPDwgMTE7 CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgQVVESU9fU1JDX0NORkcpOworCisJCWZvciAoaSA9 IDA7IGkgPCAoYXVkaW8tPmNoYW5uZWxzICsgMSkgLyAyOyBpKyspIHsKKwkJCWlmIChhdWRpby0+ c2FtcGxlX3dpZHRoID09IDE2KQorCQkJCXZhbCA9ICgweDA4IDw8IDgpIHwgKDB4MDggPDwgMjAp OworCQkJZWxzZSBpZiAoYXVkaW8tPnNhbXBsZV93aWR0aCA9PSAyNCkKKwkJCQl2YWwgPSAoMHgw YiA8PCA4KSB8ICgweDBiIDw8IDIwKTsKKworCQkJdmFsIHw9ICgoMiAqIGkpIDw8IDQpIHwgKCgy ICogaSArIDEpIDw8IDE2KTsKKwkJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU1RUU19CSVRfQ0go aSkpOworCQl9CisKKwkJc3dpdGNoIChhdWRpby0+c2FtcGxlX3JhdGUpIHsKKwkJY2FzZSAzMjAw MDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMykgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9G UkVRKDB4Yyk7CisJCQlicmVhazsKKwkJY2FzZSA0NDEwMDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZS RVEoMCkgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDB4Zik7CisJCQlicmVhazsKKwkJ Y2FzZSA0ODAwMDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMikgfAorCQkJICAgICAgT1JJR0lO QUxfU0FNUF9GUkVRKDB4ZCk7CisJCQlicmVhazsKKwkJY2FzZSA4ODIwMDoKKwkJCXZhbCA9IFNB TVBMSU5HX0ZSRVEoOCkgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVRKDB4Nyk7CisJCQli cmVhazsKKwkJY2FzZSA5NjAwMDoKKwkJCXZhbCA9IFNBTVBMSU5HX0ZSRVEoMHhhKSB8CisJCQkg ICAgICBPUklHSU5BTF9TQU1QX0ZSRVEoNSk7CisJCQlicmVhazsKKwkJY2FzZSAxNzY0MDA6CisJ CQl2YWwgPSBTQU1QTElOR19GUkVRKDB4YykgfAorCQkJICAgICAgT1JJR0lOQUxfU0FNUF9GUkVR KDMpOworCQkJYnJlYWs7CisJCWNhc2UgMTkyMDAwOgorCQkJdmFsID0gU0FNUExJTkdfRlJFUSgw eGUpIHwKKwkJCSAgICAgIE9SSUdJTkFMX1NBTVBfRlJFUSgxKTsKKwkJCWJyZWFrOworCQl9CisJ CXZhbCB8PSA0OworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIENPTV9DSF9TVFRTX0JJVFMpOwor CisJCXdyaXRlbCgyLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOworCQl3cml0ZWwoMiwgZHAt PnJlZ3MgKyBBVURJT19TUkNfQ05UTCk7CisJfSBlbHNlIHsKKwkJdmFsID0gMHgxRjA3MDc7CisJ CXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU1BESUZfQ1RSTF9BRERSKTsKKworCQl3cml0ZWwoU1lO Q19XUl9UT19DSF9aRVJPLCBkcC0+cmVncyArIEZJRk9fQ05UTCk7CisKKwkJdmFsID0gMHgxMDEg fCAoMyA8PCAxMSk7CisJCXdyaXRlbCh2YWwsIGRwLT5yZWdzICsgU01QTDJQS1RfQ05GRyk7CisJ CXdyaXRlbCgyLCBkcC0+cmVncyArIFNNUEwyUEtUX0NOVEwpOworCisJCXZhbCA9IDB4M0YwNzA3 OworCQl3cml0ZWwodmFsLCBkcC0+cmVncyArIFNQRElGX0NUUkxfQUREUik7CisKKwkJY2xrX3By ZXBhcmVfZW5hYmxlKGRwLT5zcGRpZl9jbGspOworCQljbGtfc2V0X3JhdGUoZHAtPnNwZGlmX2Ns aywgQ0ROX0RQX1NQRElGX0NMSyk7CisJfQorCisJcmV0dXJuIGNkbl9kcF9yZWdfd3JpdGUoZHAs IEFVRElPX1BBQ0tfQ09OVFJPTCwgQVVESU9fUEFDS19FTigxKSk7Cit9CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3Jv Y2tjaGlwL2Nkbi1kcC1yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l Nzc1ZjEyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1k cC1yZWcuaApAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJv Y2tjaGlwIEVsZWN0cm9uaWNzIENvLkx0ZAorICogQXV0aG9yOiBDaHJpcyBaaG9uZyA8enl3QHJv Y2stY2hpcHMuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkg YmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQ0ROX0RQX1JFR19ICisj ZGVmaW5lIF9DRE5fRFBfUkVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCisjZGVm aW5lIEFERFJfSU1FTQkJMHgxMDAwMAorI2RlZmluZSBBRERSX0RNRU0JCTB4MjAwMDAKKworLyog QVBCIENGRyBhZGRyICovCisjZGVmaW5lIEFQQl9DVFJMCQkJMAorI2RlZmluZSBYVF9JTlRfQ1RS TAkJCTB4MDQKKyNkZWZpbmUgTUFJTEJPWF9GVUxMX0FERFIJCTB4MDgKKyNkZWZpbmUgTUFJTEJP WF9FTVBUWV9BRERSCQkweDBjCisjZGVmaW5lIE1BSUxCT1gwX1dSX0RBVEEJCTB4MTAKKyNkZWZp bmUgTUFJTEJPWDBfUkRfREFUQQkJMHgxNAorI2RlZmluZSBLRUVQX0FMSVZFCQkJMHgxOAorI2Rl ZmluZSBWRVJfTAkJCQkweDFjCisjZGVmaW5lIFZFUl9ICQkJCTB4MjAKKyNkZWZpbmUgVkVSX0xJ Ql9MX0FERFIJCQkweDI0CisjZGVmaW5lIFZFUl9MSUJfSF9BRERSCQkJMHgyOAorI2RlZmluZSBT V19ERUJVR19MCQkJMHgyYworI2RlZmluZSBTV19ERUJVR19ICQkJMHgzMAorI2RlZmluZSBNQUlM Qk9YX0lOVF9NQVNLCQkweDM0CisjZGVmaW5lIE1BSUxCT1hfSU5UX1NUQVRVUwkJMHgzOAorI2Rl ZmluZSBTV19DTEtfTAkJCTB4M2MKKyNkZWZpbmUgU1dfQ0xLX0gJCQkweDQwCisjZGVmaW5lIFNX X0VWRU5UUzAJCQkweDQ0CisjZGVmaW5lIFNXX0VWRU5UUzEJCQkweDQ4CisjZGVmaW5lIFNXX0VW RU5UUzIJCQkweDRjCisjZGVmaW5lIFNXX0VWRU5UUzMJCQkweDUwCisjZGVmaW5lIFhUX09DRF9D VFJMCQkJMHg2MAorI2RlZmluZSBBUEJfSU5UX01BU0sJCQkweDZjCisjZGVmaW5lIEFQQl9TVEFU VVNfTUFTSwkJCTB4NzAKKworLyogYXVkaW8gZGVjb2RlciBhZGRyICovCisjZGVmaW5lIEFVRElP X1NSQ19DTlRMCQkJMHgzMDAwMAorI2RlZmluZSBBVURJT19TUkNfQ05GRwkJCTB4MzAwMDQKKyNk ZWZpbmUgQ09NX0NIX1NUVFNfQklUUwkJMHgzMDAwOAorI2RlZmluZSBTVFRTX0JJVF9DSCh4KQkJ CSgweDMwMDBjICsgKCh4KSA8PCAyKSkKKyNkZWZpbmUgU1BESUZfQ1RSTF9BRERSCQkJMHgzMDA0 YworI2RlZmluZSBTUERJRl9DSDFfQ1NfMzEwMF9BRERSCQkweDMwMDUwCisjZGVmaW5lIFNQRElG X0NIMV9DU182MzMyX0FERFIJCTB4MzAwNTQKKyNkZWZpbmUgU1BESUZfQ0gxX0NTXzk1NjRfQURE UgkJMHgzMDA1OAorI2RlZmluZSBTUERJRl9DSDFfQ1NfMTI3OTZfQUREUgkJMHgzMDA1YworI2Rl ZmluZSBTUERJRl9DSDFfQ1NfMTU5MTI4X0FERFIJMHgzMDA2MAorI2RlZmluZSBTUERJRl9DSDFf Q1NfMTkxMTYwX0FERFIJMHgzMDA2NAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMzEwMF9BRERSCQkw eDMwMDY4CisjZGVmaW5lIFNQRElGX0NIMl9DU182MzMyX0FERFIJCTB4MzAwNmMKKyNkZWZpbmUg U1BESUZfQ0gyX0NTXzk1NjRfQUREUgkJMHgzMDA3MAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTI3 OTZfQUREUgkJMHgzMDA3NAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTU5MTI4X0FERFIJMHgzMDA3 OAorI2RlZmluZSBTUERJRl9DSDJfQ1NfMTkxMTYwX0FERFIJMHgzMDA3YworI2RlZmluZSBTTVBM MlBLVF9DTlRMCQkJMHgzMDA4MAorI2RlZmluZSBTTVBMMlBLVF9DTkZHCQkJMHgzMDA4NAorI2Rl ZmluZSBGSUZPX0NOVEwJCQkweDMwMDg4CisjZGVmaW5lIEZJRk9fU1RUUwkJCTB4MzAwOGMKKwor Lyogc291cmNlIHBpZiBhZGRyICovCisjZGVmaW5lIFNPVVJDRV9QSUZfV1JfQUREUgkJMHgzMDgw MAorI2RlZmluZSBTT1VSQ0VfUElGX1dSX1JFUQkJMHgzMDgwNAorI2RlZmluZSBTT1VSQ0VfUElG X1JEX0FERFIJCTB4MzA4MDgKKyNkZWZpbmUgU09VUkNFX1BJRl9SRF9SRVEJCTB4MzA4MGMKKyNk ZWZpbmUgU09VUkNFX1BJRl9EQVRBX1dSCQkweDMwODEwCisjZGVmaW5lIFNPVVJDRV9QSUZfREFU QV9SRAkJMHgzMDgxNAorI2RlZmluZSBTT1VSQ0VfUElGX0ZJRk8xX0ZMVVNICQkweDMwODE4Cisj ZGVmaW5lIFNPVVJDRV9QSUZfRklGTzJfRkxVU0gJCTB4MzA4MWMKKyNkZWZpbmUgU09VUkNFX1BJ Rl9TVEFUVVMJCTB4MzA4MjAKKyNkZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRfU09VUkNFCTB4 MzA4MjQKKyNkZWZpbmUgU09VUkNFX1BJRl9JTlRFUlJVUFRfTUFTSwkweDMwODI4CisjZGVmaW5l IFNPVVJDRV9QSUZfUEtUX0FMTE9DX1JFRwkweDMwODJjCisjZGVmaW5lIFNPVVJDRV9QSUZfUEtU X0FMTE9DX1dSX0VOCTB4MzA4MzAKKyNkZWZpbmUgU09VUkNFX1BJRl9TV19SRVNFVAkJMHgzMDgz NAorCisvKiBiZWxsb3cgcmVnaXN0ZXJzIG5lZWQgYWNjZXNzIGJ5IG1haWxib3ggKi8KKy8qIHNv dXJjZSBjYXIgYWRkciAqLworI2RlZmluZSBTT1VSQ0VfSERUWF9DQVIJCQkweDA5MDAKKyNkZWZp bmUgU09VUkNFX0RQVFhfQ0FSCQkJMHgwOTA0CisjZGVmaW5lIFNPVVJDRV9QSFlfQ0FSCQkJMHgw OTA4CisjZGVmaW5lIFNPVVJDRV9DRUNfQ0FSCQkJMHgwOTBjCisjZGVmaW5lIFNPVVJDRV9DQlVT X0NBUgkJCTB4MDkxMAorI2RlZmluZSBTT1VSQ0VfUEtUX0NBUgkJCTB4MDkxOAorI2RlZmluZSBT T1VSQ0VfQUlGX0NBUgkJCTB4MDkxYworI2RlZmluZSBTT1VSQ0VfQ0lQSEVSX0NBUgkJMHgwOTIw CisjZGVmaW5lIFNPVVJDRV9DUllQVE9fQ0FSCQkweDA5MjQKKworLyogY2xvY2sgbWV0ZXJzIGFk ZHIgKi8KKyNkZWZpbmUgQ01fQ1RSTAkJCQkweDBhMDAKKyNkZWZpbmUgQ01fSTJTX0NUUkwJCQkw eDBhMDQKKyNkZWZpbmUgQ01fU1BESUZfQ1RSTAkJCTB4MGEwOAorI2RlZmluZSBDTV9WSURfQ1RS TAkJCTB4MGEwYworI2RlZmluZSBDTV9MQU5FX0NUUkwJCQkweDBhMTAKKyNkZWZpbmUgSTJTX05N X1NUQUJMRQkJCTB4MGExNAorI2RlZmluZSBJMlNfTkNUU19TVEFCTEUJCQkweDBhMTgKKyNkZWZp bmUgU1BESUZfTk1fU1RBQkxFCQkJMHgwYTFjCisjZGVmaW5lIFNQRElGX05DVFNfU1RBQkxFCQkw eDBhMjAKKyNkZWZpbmUgTk1WSURfTUVBU19TVEFCTEUJCTB4MGEyNAorI2RlZmluZSBJMlNfTUVB UwkJCTB4MGE0MAorI2RlZmluZSBTUERJRl9NRUFTCQkJMHgwYTgwCisjZGVmaW5lIE5NVklEX01F QVMJCQkweDBhYzAKKworLyogc291cmNlIHZpZiBhZGRyICovCisjZGVmaW5lIEJORF9IU1lOQzJW U1lOQwkJCTB4MGIwMAorI2RlZmluZSBIU1lOQzJWU1lOQ19GMV9MMQkJMHgwYjA0CisjZGVmaW5l IEhTWU5DMlZTWU5DX0YyX0wxCQkweDBiMDgKKyNkZWZpbmUgSFNZTkMyVlNZTkNfU1RBVFVTCQkw eDBiMGMKKyNkZWZpbmUgSFNZTkMyVlNZTkNfUE9MX0NUUkwJCTB4MGIxMAorCisvKiBkcHR4IHBo eSBhZGRyICovCisjZGVmaW5lIERQX1RYX1BIWV9DT05GSUdfUkVHCQkweDIwMDAKKyNkZWZpbmUg RFBfVFhfUEhZX1NUQVRVU19SRUcJCTB4MjAwNAorI2RlZmluZSBEUF9UWF9QSFlfU1dfUkVTRVQJ CTB4MjAwOAorI2RlZmluZSBEUF9UWF9QSFlfU0NSQU1CTEVSX1NFRUQJMHgyMDBjCisjZGVmaW5l IERQX1RYX1BIWV9UUkFJTklOR18wMV8wNAkweDIwMTAKKyNkZWZpbmUgRFBfVFhfUEhZX1RSQUlO SU5HXzA1XzA4CTB4MjAxNAorI2RlZmluZSBEUF9UWF9QSFlfVFJBSU5JTkdfMDlfMTAJMHgyMDE4 CisjZGVmaW5lIFRFU1RfQ09SCQkJMHgyM2ZjCisKKy8qIGRwdHggaHBkIGFkZHIgKi8KKyNkZWZp bmUgSFBEX0lSUV9ERVRfTUlOX1RJTUVSCQkweDIxMDAKKyNkZWZpbmUgSFBEX0lSUV9ERVRfTUFY X1RJTUVSCQkweDIxMDQKKyNkZWZpbmUgSFBEX1VOUExHRURfREVUX01JTl9USU1FUgkweDIxMDgK KyNkZWZpbmUgSFBEX1NUQUJMRV9USU1FUgkJMHgyMTBjCisjZGVmaW5lIEhQRF9GSUxURVJfVElN RVIJCTB4MjExMAorI2RlZmluZSBIUERfRVZFTlRfTUFTSwkJCTB4MjExYworI2RlZmluZSBIUERf RVZFTlRfREVUCQkJMHgyMTIwCisKKy8qIGRweXggZnJhbWVyIGFkZHIgKi8KKyNkZWZpbmUgRFBf RlJBTUVSX0dMT0JBTF9DT05GSUcJCTB4MjIwMAorI2RlZmluZSBEUF9TV19SRVNFVAkJCTB4MjIw NAorI2RlZmluZSBEUF9GUkFNRVJfVFUJCQkweDIyMDgKKyNkZWZpbmUgRFBfRlJBTUVSX1BYTF9S RVBSCQkweDIyMGMKKyNkZWZpbmUgRFBfRlJBTUVSX1NQCQkJMHgyMjEwCisjZGVmaW5lIEFVRElP X1BBQ0tfQ09OVFJPTAkJMHgyMjE0CisjZGVmaW5lIERQX1ZDX1RBQkxFKHgpCQkJKDB4MjIxOCAr ICgoeCkgPDwgMikpCisjZGVmaW5lIERQX1ZCX0lECQkJMHgyMjU4CisjZGVmaW5lIERQX01UUEhf TFZQX0NPTlRST0wJCTB4MjI1YworI2RlZmluZSBEUF9NVFBIX1NZTUJPTF9WQUxVRVMJCTB4MjI2 MAorI2RlZmluZSBEUF9NVFBIX0VDRl9DT05UUk9MCQkweDIyNjQKKyNkZWZpbmUgRFBfTVRQSF9B Q1RfQ09OVFJPTAkJMHgyMjY4CisjZGVmaW5lIERQX01UUEhfU1RBVFVTCQkJMHgyMjZjCisjZGVm aW5lIERQX0lOVEVSUlVQVF9TT1VSQ0UJCTB4MjI3MAorI2RlZmluZSBEUF9JTlRFUlJVUFRfTUFT SwkJMHgyMjc0CisjZGVmaW5lIERQX0ZST05UX0JBQ0tfUE9SQ0gJCTB4MjI3OAorI2RlZmluZSBE UF9CWVRFX0NPVU5UCQkJMHgyMjdjCisKKy8qIGRwdHggc3RyZWFtIGFkZHIgKi8KKyNkZWZpbmUg TVNBX0hPUklaT05UQUxfMAkJMHgyMjgwCisjZGVmaW5lIE1TQV9IT1JJWk9OVEFMXzEJCTB4MjI4 NAorI2RlZmluZSBNU0FfVkVSVElDQUxfMAkJCTB4MjI4OAorI2RlZmluZSBNU0FfVkVSVElDQUxf MQkJCTB4MjI4YworI2RlZmluZSBNU0FfTUlTQwkJCTB4MjI5MAorI2RlZmluZSBTVFJFQU1fQ09O RklHCQkJMHgyMjk0CisjZGVmaW5lIEFVRElPX1BBQ0tfU1RBVFVTCQkweDIyOTgKKyNkZWZpbmUg VklGX1NUQVRVUwkJCTB4MjI5YworI2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzAJCTB4MjJhMAor I2RlZmluZSBQQ0tfU1RVRkZfU1RBVFVTXzEJCTB4MjJhNAorI2RlZmluZSBJTkZPX1BBQ0tfU1RB VFVTCQkweDIyYTgKKyNkZWZpbmUgUkFURV9HT1ZFUk5PUl9TVEFUVVMJCTB4MjJhYworI2RlZmlu ZSBEUF9IT1JJWk9OVEFMCQkJMHgyMmIwCisjZGVmaW5lIERQX1ZFUlRJQ0FMXzAJCQkweDIyYjQK KyNkZWZpbmUgRFBfVkVSVElDQUxfMQkJCTB4MjJiOAorI2RlZmluZSBEUF9CTE9DS19TRFAJCQkw eDIyYmMKKworLyogZHB0eCBnbGJsIGFkZHIgKi8KKyNkZWZpbmUgRFBUWF9MQU5FX0VOCQkJMHgy MzAwCisjZGVmaW5lIERQVFhfRU5ITkNECQkJMHgyMzA0CisjZGVmaW5lIERQVFhfSU5UX01BU0sJ CQkweDIzMDgKKyNkZWZpbmUgRFBUWF9JTlRfU1RBVFVTCQkJMHgyMzBjCisKKy8qIGRwIGF1eCBh ZGRyICovCisjZGVmaW5lIERQX0FVWF9IT1NUX0NPTlRST0wJCTB4MjgwMAorI2RlZmluZSBEUF9B VVhfSU5URVJSVVBUX1NPVVJDRQkJMHgyODA0CisjZGVmaW5lIERQX0FVWF9JTlRFUlJVUFRfTUFT SwkJMHgyODA4CisjZGVmaW5lIERQX0FVWF9TV0FQX0lOVkVSU0lPTl9DT05UUk9MCTB4MjgwYwor I2RlZmluZSBEUF9BVVhfU0VORF9OQUNLX1RSQU5TQUNUSU9OCTB4MjgxMAorI2RlZmluZSBEUF9B VVhfQ0xFQVJfUlgJCQkweDI4MTQKKyNkZWZpbmUgRFBfQVVYX0NMRUFSX1RYCQkJMHgyODE4Cisj ZGVmaW5lIERQX0FVWF9USU1FUl9TVE9QCQkweDI4MWMKKyNkZWZpbmUgRFBfQVVYX1RJTUVSX0NM RUFSCQkweDI4MjAKKyNkZWZpbmUgRFBfQVVYX1JFU0VUX1NXCQkJMHgyODI0CisjZGVmaW5lIERQ X0FVWF9ESVZJREVfMk0JCTB4MjgyOAorI2RlZmluZSBEUF9BVVhfVFhfUFJFQUNIQVJHRV9MRU5H VEgJMHgyODJjCisjZGVmaW5lIERQX0FVWF9GUkVRVUVOQ1lfMU1fTUFYCQkweDI4MzAKKyNkZWZp bmUgRFBfQVVYX0ZSRVFVRU5DWV8xTV9NSU4JCTB4MjgzNAorI2RlZmluZSBEUF9BVVhfUlhfUFJF X01JTgkJMHgyODM4CisjZGVmaW5lIERQX0FVWF9SWF9QUkVfTUFYCQkweDI4M2MKKyNkZWZpbmUg RFBfQVVYX1RJTUVSX1BSRVNFVAkJMHgyODQwCisjZGVmaW5lIERQX0FVWF9OQUNLX0ZPUk1BVAkJ MHgyODQ0CisjZGVmaW5lIERQX0FVWF9UWF9EQVRBCQkJMHgyODQ4CisjZGVmaW5lIERQX0FVWF9S WF9EQVRBCQkJMHgyODRjCisjZGVmaW5lIERQX0FVWF9UWF9TVEFUVVMJCTB4Mjg1MAorI2RlZmlu ZSBEUF9BVVhfUlhfU1RBVFVTCQkweDI4NTQKKyNkZWZpbmUgRFBfQVVYX1JYX0NZQ0xFX0NPVU5U RVIJCTB4Mjg1OAorI2RlZmluZSBEUF9BVVhfTUFJTl9TVEFURVMJCTB4Mjg1YworI2RlZmluZSBE UF9BVVhfTUFJTl9USU1FUgkJMHgyODYwCisjZGVmaW5lIERQX0FVWF9BRkVfT1VUCQkJMHgyODY0 CisKKy8qIGNyeXB0byBhZGRyICovCisjZGVmaW5lIENSWVBUT19IRENQX1JFVklTSU9OCQkweDU4 MDAKKyNkZWZpbmUgSERDUF9DUllQVE9fQ09ORklHCQkweDU4MDQKKyNkZWZpbmUgQ1JZUFRPX0lO VEVSUlVQVF9TT1VSQ0UJCTB4NTgwOAorI2RlZmluZSBDUllQVE9fSU5URVJSVVBUX01BU0sJCTB4 NTgwYworI2RlZmluZSBDUllQVE8yMl9DT05GSUcJCQkweDU4MTgKKyNkZWZpbmUgQ1JZUFRPMjJf U1RBVFVTCQkJMHg1ODFjCisjZGVmaW5lIFNIQV8yNTZfREFUQV9JTgkJCTB4NTgzYworI2RlZmlu ZSBTSEFfMjU2X0RBVEFfT1VUXyh4KQkJKDB4NTg1MCArICgoeCkgPDwgMikpCisjZGVmaW5lIEFF U18zMl9LRVlfKHgpCQkJKDB4NTg3MCArICgoeCkgPDwgMikpCisjZGVmaW5lIEFFU18zMl9EQVRB X0lOCQkJMHg1ODgwCisjZGVmaW5lIEFFU18zMl9EQVRBX09VVF8oeCkJCSgweDU4ODQgKyAoKHgp IDw8IDIpKQorI2RlZmluZSBDUllQVE8xNF9DT05GSUcJCQkweDU4YTAKKyNkZWZpbmUgQ1JZUFRP MTRfU1RBVFVTCQkJMHg1OGE0CisjZGVmaW5lIENSWVBUTzE0X1BSTk1fT1VUCQkweDU4YTgKKyNk ZWZpbmUgQ1JZUFRPMTRfS01fMAkJCTB4NThhYworI2RlZmluZSBDUllQVE8xNF9LTV8xCQkJMHg1 OGIwCisjZGVmaW5lIENSWVBUTzE0X0FOXzAJCQkweDU4YjQKKyNkZWZpbmUgQ1JZUFRPMTRfQU5f MQkJCTB4NThiOAorI2RlZmluZSBDUllQVE8xNF9ZT1VSX0tTVl8wCQkweDU4YmMKKyNkZWZpbmUg Q1JZUFRPMTRfWU9VUl9LU1ZfMQkJMHg1OGMwCisjZGVmaW5lIENSWVBUTzE0X01JXzAJCQkweDU4 YzQKKyNkZWZpbmUgQ1JZUFRPMTRfTUlfMQkJCTB4NThjOAorI2RlZmluZSBDUllQVE8xNF9USV8w CQkJMHg1OGNjCisjZGVmaW5lIENSWVBUTzE0X0tJXzAJCQkweDU4ZDAKKyNkZWZpbmUgQ1JZUFRP MTRfS0lfMQkJCTB4NThkNAorI2RlZmluZSBDUllQVE8xNF9CTE9DS1NfTlVNCQkweDU4ZDgKKyNk ZWZpbmUgQ1JZUFRPMTRfS0VZX01FTV9EQVRBXzAJCTB4NThkYworI2RlZmluZSBDUllQVE8xNF9L RVlfTUVNX0RBVEFfMQkJMHg1OGUwCisjZGVmaW5lIENSWVBUTzE0X1NIQTFfTVNHX0RBVEEJCTB4 NThlNAorI2RlZmluZSBDUllQVE8xNF9TSEExX1ZfVkFMVUVfKHgpCSgweDU4ZTggKyAoKHgpIDw8 IDIpKQorI2RlZmluZSBUUk5HX0NUUkwJCQkweDU4ZmMKKyNkZWZpbmUgVFJOR19EQVRBX1JEWQkJ CTB4NTkwMAorI2RlZmluZSBUUk5HX0RBVEEJCQkweDU5MDQKKworLyogY2lwaGVyIGFkZHIgKi8K KyNkZWZpbmUgSERDUF9SRVZJU0lPTgkJCTB4NjAwMDAKKyNkZWZpbmUgSU5URVJSVVBUX1NPVVJD RQkJMHg2MDAwNAorI2RlZmluZSBJTlRFUlJVUFRfTUFTSwkJCTB4NjAwMDgKKyNkZWZpbmUgSERD UF9DSVBIRVJfQ09ORklHCQkweDYwMDBjCisjZGVmaW5lIEFFU18xMjhfS0VZXzAJCQkweDYwMDEw CisjZGVmaW5lIEFFU18xMjhfS0VZXzEJCQkweDYwMDE0CisjZGVmaW5lIEFFU18xMjhfS0VZXzIJ CQkweDYwMDE4CisjZGVmaW5lIEFFU18xMjhfS0VZXzMJCQkweDYwMDFjCisjZGVmaW5lIEFFU18x MjhfUkFORE9NXzAJCTB4NjAwMjAKKyNkZWZpbmUgQUVTXzEyOF9SQU5ET01fMQkJMHg2MDAyNAor I2RlZmluZSBDSVBIRVIxNF9LTV8wCQkJMHg2MDAyOAorI2RlZmluZSBDSVBIRVIxNF9LTV8xCQkJ MHg2MDAyYworI2RlZmluZSBDSVBIRVIxNF9TVEFUVVMJCQkweDYwMDMwCisjZGVmaW5lIENJUEhF UjE0X1JJX1BKX1NUQVRVUwkJMHg2MDAzNAorI2RlZmluZSBDSVBIRVJfTU9ERQkJCTB4NjAwMzgK KyNkZWZpbmUgQ0lQSEVSMTRfQU5fMAkJCTB4NjAwM2MKKyNkZWZpbmUgQ0lQSEVSMTRfQU5fMQkJ CTB4NjAwNDAKKyNkZWZpbmUgQ0lQSEVSMjJfQVVUSAkJCTB4NjAwNDQKKyNkZWZpbmUgQ0lQSEVS MTRfUjBfRFBfU1RBVFVTCQkweDYwMDQ4CisjZGVmaW5lIENJUEhFUjE0X0JPT1RTVFJBUAkJMHg2 MDA0YworCisjZGVmaW5lIEFQQl9JUkFNX1BBVEgJCQlCSVQoMikKKyNkZWZpbmUgQVBCX0RSQU1f UEFUSAkJCUJJVCgxKQorI2RlZmluZSBBUEJfWFRfUkVTRVQJCQlCSVQoMCkKKworLyogbWFpbGJv eCAqLworI2RlZmluZSBNQl9PUENPREVfSUQJCQkwCisjZGVmaW5lIE1CX01PRFVMRV9JRAkJCTEK KyNkZWZpbmUgTUJfU0laRV9NU0JfSUQJCQkyCisjZGVmaW5lIE1CX1NJWkVfTFNCX0lECQkJMwor I2RlZmluZSBNQl9EQVRBX0lECQkJNAorCisjZGVmaW5lIE1CX01PRFVMRV9JRF9EUF9UWAkJMHgw MQorI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9UWAkJMHgwNworI2RlZmluZSBNQl9NT0RVTEVf SURfSERDUF9SWAkJMHgwOAorI2RlZmluZSBNQl9NT0RVTEVfSURfSERDUF9HRU5FUkFMCTB4MDkK KyNkZWZpbmUgTUJfTU9EVUxFX0lEX0dFTkVSQUwJCTB4MGEKKworLyogZ2VuZXJhbCBvcGNvZGUg Ki8KKyNkZWZpbmUgR0VORVJBTF9NQUlOX0NPTlRST0wgICAgICAgICAgICAweDAxCisjZGVmaW5l IEdFTkVSQUxfVEVTVF9FQ0hPICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBHRU5FUkFMX0JV U19TRVRUSU5HUyAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgR0VORVJBTF9URVNUX0FDQ0VTUyAg ICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgRFBUWF9TRVRfUE9XRVJfTU5HCQkJMHgwMAorI2Rl ZmluZSBEUFRYX1NFVF9IT1NUX0NBUEFCSUxJVElFUwkJMHgwMQorI2RlZmluZSBEUFRYX0dFVF9F RElECQkJCTB4MDIKKyNkZWZpbmUgRFBUWF9SRUFEX0RQQ0QJCQkJMHgwMworI2RlZmluZSBEUFRY X1dSSVRFX0RQQ0QJCQkJMHgwNAorI2RlZmluZSBEUFRYX0VOQUJMRV9FVkVOVAkJCTB4MDUKKyNk ZWZpbmUgRFBUWF9XUklURV9SRUdJU1RFUgkJCTB4MDYKKyNkZWZpbmUgRFBUWF9SRUFEX1JFR0lT VEVSCQkJMHgwNworI2RlZmluZSBEUFRYX1dSSVRFX0ZJRUxECQkJMHgwOAorI2RlZmluZSBEUFRY X1RSQUlOSU5HX0NPTlRST0wJCQkweDA5CisjZGVmaW5lIERQVFhfUkVBRF9FVkVOVAkJCQkweDBh CisjZGVmaW5lIERQVFhfUkVBRF9MSU5LX1NUQVQJCQkweDBiCisjZGVmaW5lIERQVFhfU0VUX1ZJ REVPCQkJCTB4MGMKKyNkZWZpbmUgRFBUWF9TRVRfQVVESU8JCQkJMHgwZAorI2RlZmluZSBEUFRY X0dFVF9MQVNUX0FVWF9TVEFVUwkJCTB4MGUKKyNkZWZpbmUgRFBUWF9TRVRfTElOS19CUkVBS19Q T0lOVAkJMHgwZgorI2RlZmluZSBEUFRYX0ZPUkNFX0xBTkVTCQkJMHgxMAorI2RlZmluZSBEUFRY X0hQRF9TVEFURQkJCQkweDExCisKKyNkZWZpbmUgRFBUWF9FVkVOVF9FTkFCTEVfSFBECQkJQklU KDApCisjZGVmaW5lIERQVFhfRVZFTlRfRU5BQkxFX1RSQUlOSU5HCQlCSVQoMSkKKworI2RlZmlu ZSBMSU5LX1RSQUlOSU5HX05PVF9BQ1RJVkUJCTAKKyNkZWZpbmUgTElOS19UUkFJTklOR19SVU4J CQkxCisjZGVmaW5lIExJTktfVFJBSU5JTkdfUkVTVEFSVAkJCTIKKworI2RlZmluZSBDT05UUk9M X1ZJREVPX0lETEUJCQkwCisjZGVmaW5lIENPTlRST0xfVklERU9fVkFMSUQJCQkxCisKKyNkZWZp bmUgVklGX0JZUEFTU19JTlRFUkxBQ0UJCQlCSVQoMTMpCisjZGVmaW5lIElOVEVSTEFDRV9GTVRf REVUCQkJQklUKDEyKQorI2RlZmluZSBJTlRFUkxBQ0VfRFRDVF9XSU4JCQkweDIwCisKKyNkZWZp bmUgRFBfRlJBTUVSX1NQX0lOVEVSTEFDRV9FTgkJQklUKDIpCisjZGVmaW5lIERQX0ZSQU1FUl9T UF9IU1AJCQlCSVQoMSkKKyNkZWZpbmUgRFBfRlJBTUVSX1NQX1ZTUAkJCUJJVCgwKQorCisvKiBj YXBhYmlsaXR5ICovCisjZGVmaW5lIEFVWF9IT1NUX0lOVkVSVAkJCQkzCisjZGVmaW5lCUZBU1Rf TFRfU1VQUE9SVAkJCQkxCisjZGVmaW5lIEZBU1RfTFRfTk9UX1NVUFBPUlQJCQkwCisjZGVmaW5l IExBTkVfTUFQUElOR19OT1JNQUwJCQkweGU0CisjZGVmaW5lIExBTkVfTUFQUElOR19GTElQUEVE CQkJMHgxYgorI2RlZmluZSBFTkhBTkNFRAkJCQkxCisKKyNkZWZpbmUJRlVMTF9MVF9TVEFSVEVE CQkJCUJJVCgwKQorI2RlZmluZSBGQVNFX0xUX1NUQVJURUQJCQkJQklUKDEpCisjZGVmaW5lIENM S19SRUNPVkVSWV9GSU5JU0hFRAkJCUJJVCgyKQorI2RlZmluZSBFUV9QSEFTRV9GSU5JU0hFRAkJ CUJJVCgzKQorI2RlZmluZSBGQVNFX0xUX1NUQVJUX0ZJTklTSEVECQkJQklUKDQpCisjZGVmaW5l IENMS19SRUNPVkVSWV9GQUlMRUQJCQlCSVQoNSkKKyNkZWZpbmUgRVFfUEhBU0VfRkFJTEVECQkJ CUJJVCg2KQorI2RlZmluZSBGQVNFX0xUX0ZBSUxFRAkJCQlCSVQoNykKKworI2RlZmluZSBEUFRY X0hQRF9FVkVOVAkJCQlCSVQoMCkKKyNkZWZpbmUgRFBUWF9UUkFJTklOR19FVkVOVAkJCUJJVCgx KQorI2RlZmluZSBIRENQX1RYX1NUQVRVU19FVkVOVAkJCUJJVCg0KQorI2RlZmluZSBIRENQMl9U WF9JU19LTV9TVE9SRURfRVZFTlQJCUJJVCg1KQorI2RlZmluZSBIRENQMl9UWF9TVE9SRV9LTV9F VkVOVAkJCUJJVCg2KQorI2RlZmluZSBIRENQX1RYX0lTX1JFQ0VJVkVSX0lEX1ZBTElEX0VWRU5U CUJJVCg3KQorCisjZGVmaW5lIEVESURfTEVOR1RIX0JZVEUJCQkwCisjZGVmaW5lIEVESURfU0VH TUVOVF9CVU1CRVIJCQkxCisjZGVmaW5lIEVESURfREFUQQkJCQkyCisjZGVmaW5lIEVESURfQkxP Q0tfU0laRQkJCQkxMjgKKworI2RlZmluZSBUVV9TSVpFCQkJCQk2NAorCisvKiBhdWRpbyAqLwor I2RlZmluZSBBVURJT19QQUNLX0VOKHgpCQkJKCh4KSA8PCA4KQorI2RlZmluZSBTQU1QTElOR19G UkVRKHgpCQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgT1JJR0lOQUxfU0FNUF9GUkVRKHgpCQkJKCh4 KSA8PCAyNCkKKyNkZWZpbmUgU1lOQ19XUl9UT19DSF9aRVJPCQkJQklUKDEpCisKK2VudW0gdm9s dGFnZV9zd2luZ19sZXZlbCB7CisJVk9MVEFHRV9MRVZFTF8wLAorCVZPTFRBR0VfTEVWRUxfMSwK KwlWT0xUQUdFX0xFVkVMXzIsCisJVk9MVEFHRV9MRVZFTF8zLAorfTsKKworZW51bSBwcmVfZW1w aGFzaXNfbGV2ZWwgeworCVBSRV9FTVBIQVNJU19MRVZFTF8wLAorCVBSRV9FTVBIQVNJU19MRVZF TF8xLAorCVBSRV9FTVBIQVNJU19MRVZFTF8yLAorCVBSRV9FTVBIQVNJU19MRVZFTF8zLAorfTsK KworZW51bSBwYXR0ZXJuX3NldCB7CisJUFJCUzcJCT0gQklUKDApLAorCUQxMF8yCQk9IEJJVCgx KSwKKwlUUkFJTklOR19QVE4xCT0gQklUKDIpLAorCVRSQUlOSU5HX1BUTjIJPSBCSVQoMyksCisJ RFBfTk9ORQkJPSBCSVQoNCkKK307CisKK2VudW0gVklDX1BYTF9FTkNPRElOR19GT1JNQVQgewor CVBYTF9SR0IgPSAweDEsCisJWUNCQ1JfNF80XzQgPSAweDIsCisJWUNCQ1JfNF8yXzIgPSAweDQs CisJWUNCQ1JfNF8yXzAgPSAweDgsCisJWV9PTkxZID0gMHgxMCwKK307CisKK2VudW0gVklDX0NP TE9SX0RFUFRIIHsKKwlCQ1NfNiA9IDB4MSwKKwlCQ1NfOCA9IDB4MiwKKwlCQ1NfMTAgPSAweDQs CisJQkNTXzEyID0gMHg4LAorCUJDU18xNiA9IDB4MTAsCit9OworCisjZW5kaWYgLyogX0NETl9E UF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV92b3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fdm9wLmMK aW5kZXggZWRkN2VjMi4uOTgzMDJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV92b3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9j a2NoaXBfZHJtX3ZvcC5jCkBAIC05NjksNyArOTY5LDcgQEAgc3RhdGljIHZvaWQgdm9wX2NydGNf ZW5hYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIAkJdm9wX2RzcF9ob2xkX3ZhbGlkX2lycV9k aXNhYmxlKHZvcCk7CiAJfQogCi0JcGluX3BvbCA9IDB4ODsKKwlwaW5fcG9sID0gKHMtPm91dHB1 dF90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgPyAwIDogMHg4OwogCXBp bl9wb2wgfD0gKGFkanVzdGVkX21vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19OSFNZTkMpID8g MCA6IDE7CiAJcGluX3BvbCB8PSAoYWRqdXN0ZWRfbW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X05WU1lOQykgPyAwIDogKDEgPDwgMSk7CiAJVk9QX0NUUkxfU0VUKHZvcCwgcGluX3BvbCwgcGlu X3BvbCk7CkBAIC05OTEsNiArOTkxLDEwIEBAIHN0YXRpYyB2b2lkIHZvcF9jcnRjX2VuYWJsZShz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCiAJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlfcGluX3BvbCwg cGluX3BvbCk7CiAJCVZPUF9DVFJMX1NFVCh2b3AsIG1pcGlfZW4sIDEpOwogCQlicmVhazsKKwlj YXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDoKKwkJVk9QX0NUUkxfU0VUKHZvcCwg ZHBfcGluX3BvbCwgcGluX3BvbCk7CisJCVZPUF9DVFJMX1NFVCh2b3AsIGRwX2VuLCAxKTsKKwkJ YnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJ1bnN1cHBvcnQgY29ubmVjdG9yX3R5cGVb JWRdXG4iLCBzLT5vdXRwdXRfdHlwZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9y b2NrY2hpcF9kcm1fdm9wLmgKaW5kZXggZmY0ZjUyZS4uNTBhMDQ1YyAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV92b3AuaAorKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3ZvcC5oCkBAIC00NSw2ICs0NSw3IEBAIHN0cnVj dCB2b3BfY3RybCB7CiAJc3RydWN0IHZvcF9yZWcgZWRwX2VuOwogCXN0cnVjdCB2b3BfcmVnIGhk bWlfZW47CiAJc3RydWN0IHZvcF9yZWcgbWlwaV9lbjsKKwlzdHJ1Y3Qgdm9wX3JlZyBkcF9lbjsK IAlzdHJ1Y3Qgdm9wX3JlZyBvdXRfbW9kZTsKIAlzdHJ1Y3Qgdm9wX3JlZyBkaXRoZXJfZG93bjsK IAlzdHJ1Y3Qgdm9wX3JlZyBkaXRoZXJfdXA7CkBAIC01Myw2ICs1NCw3IEBAIHN0cnVjdCB2b3Bf Y3RybCB7CiAJc3RydWN0IHZvcF9yZWcgaGRtaV9waW5fcG9sOwogCXN0cnVjdCB2b3BfcmVnIGVk cF9waW5fcG9sOwogCXN0cnVjdCB2b3BfcmVnIG1pcGlfcGluX3BvbDsKKwlzdHJ1Y3Qgdm9wX3Jl ZyBkcF9waW5fcG9sOwogCiAJc3RydWN0IHZvcF9yZWcgaHRvdGFsX3B3OwogCXN0cnVjdCB2b3Bf cmVnIGhhY3Rfc3RfZW5kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3Jv Y2tjaGlwX3ZvcF9yZWcuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF92b3Bf cmVnLmMKaW5kZXggNWIxYWUxZi4uZGNmMTcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3JvY2tjaGlwL3JvY2tjaGlwX3ZvcF9yZWcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfdm9wX3JlZy5jCkBAIC0yODEsNiArMjgxLDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCB2b3BfZGF0YSByazMyODhfdm9wID0gewogc3RhdGljIGNvbnN0IHN0cnVjdCB2b3BfY3Ry bCByazMzOTlfY3RybF9kYXRhID0gewogCS5zdGFuZGJ5ID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NU UkwsIDB4MSwgMjIpLAogCS5nYXRlX2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwg MjMpLAorCS5kcF9lbiA9IFZPUF9SRUcoUkszMzk5X1NZU19DVFJMLCAweDEsIDExKSwKIAkucmdi X2VuID0gVk9QX1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTIpLAogCS5oZG1pX2VuID0gVk9Q X1JFRyhSSzMzOTlfU1lTX0NUUkwsIDB4MSwgMTMpLAogCS5lZHBfZW4gPSBWT1BfUkVHKFJLMzM5 OV9TWVNfQ1RSTCwgMHgxLCAxNCksCkBAIC0yOTAsNiArMjkxLDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCB2b3BfY3RybCByazMzOTlfY3RybF9kYXRhID0gewogCS5kYXRhX2JsYW5rID0gVk9QX1JF RyhSSzMzOTlfRFNQX0NUUkwwLCAweDEsIDE5KSwKIAkub3V0X21vZGUgPSBWT1BfUkVHKFJLMzM5 OV9EU1BfQ1RSTDAsIDB4ZiwgMCksCiAJLnJnYl9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQ X0NUUkwxLCAweGYsIDE2KSwKKwkuZHBfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJM MSwgMHhmLCAxNiksCiAJLmhkbWlfcGluX3BvbCA9IFZPUF9SRUcoUkszMzk5X0RTUF9DVFJMMSwg MHhmLCAyMCksCiAJLmVkcF9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYs IDI0KSwKIAkubWlwaV9waW5fcG9sID0gVk9QX1JFRyhSSzMzOTlfRFNQX0NUUkwxLCAweGYsIDI4 KSwKLS0gCjIuNi4zCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWwK