From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Deucher Subject: [PATCH 41/51] drm/amdgpu/powerplay: implement thermal control for tonga. Date: Thu, 12 Nov 2015 01:18:31 -0500 Message-ID: <1447309121-2480-42-git-send-email-alexander.deucher@amd.com> References: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-qg0-f51.google.com (mail-qg0-f51.google.com [209.85.192.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 89A4E7A114 for ; Wed, 11 Nov 2015 22:19:25 -0800 (PST) Received: by qgec40 with SMTP id c40so40609832qge.2 for ; Wed, 11 Nov 2015 22:19:24 -0800 (PST) In-Reply-To: <1447309121-2480-1-git-send-email-alexander.deucher@amd.com> 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: Rex Zhu List-Id: dri-devel@lists.freedesktop.org RnJvbTogUmV4IFpodSA8UmV4LlpodUBhbWQuY29tPgoKSW1wbGVtZW50IHRoZXJtYWwgYW5kIGZh biBjb250cm9sIGZvciB0b25nYS4KClNpZ25lZC1vZmYtYnk6IFJleCBaaHUgPFJleC5aaHVAYW1k LmNvbT4KUmV2aWV3ZWQtYnk6IEphbW15IFpob3UgPEphbW15Llpob3VAYW1kLmNvbT4KUmV2aWV3 ZWQtYnk6IEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9NYWtlZmlsZSAgICAgICB8ICAgMiArLQog ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdG9uZ2FfaHdtZ3IuYyAgfCAxNTAg KysrKystCiBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV9od21nci5o ICB8ICAgMSArCiAuLi4vZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX3RoZXJtYWwu YyAgICB8IDU4NyArKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncHUvZHJtL2FtZC9wb3dlcnBs YXkvaHdtZ3IvdG9uZ2FfdGhlcm1hbC5oICAgIHwgIDYwICsrKwogNSBmaWxlcyBjaGFuZ2VkLCA3 OTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV90aGVybWFsLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV90aGVy bWFsLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL01ha2VmaWxlCmlu ZGV4IDZmMzg4MTEuLmNlYTAzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93 ZXJwbGF5L2h3bWdyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5 L2h3bWdyL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQCBIQVJEV0FSRV9NR1IgPSBod21nci5vIHBy b2Nlc3NwcHRhYmxlcy5vIGZ1bmN0aW9udGFibGVzLm8gXAogCSAgICAgICBoYXJkd2FyZW1hbmFn ZXIubyBwcF9hY3BpLm8gY3pfaHdtZ3IubyBcCiAgICAgICAgICAgICAgICBjel9jbG9ja3Bvd2Vy Z2F0aW5nLm8gXAogCSAgICAgICB0b25nYV9wcm9jZXNzcHB0YWJsZXMubyBwcGF0b21jdHJsLm8g XAotICAgICAgICAgICAgICAgdG9uZ2FfaHdtZ3IubyAJcHBwY2llbGFuZXMubyBcCisgICAgICAg ICAgICAgICB0b25nYV9od21nci5vIHBwcGNpZWxhbmVzLm8gIHRvbmdhX3RoZXJtYWwub1wKICAg ICAgICAgICAgICAgIGZpamlfcG93ZXJ0dW5lLm8gZmlqaV9od21nci5vIHRvbmdhX2Nsb2NrcG93 ZXJnYXRpbmcubwogCiBBTURfUFBfSFdNR1IgPSAkKGFkZHByZWZpeCAkKEFNRF9QUF9QQVRIKS9o d21nci8sJChIQVJEV0FSRV9NR1IpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3IvdG9uZ2FfaHdtZ3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJw bGF5L2h3bWdyL3RvbmdhX2h3bWdyLmMKaW5kZXggOWE3ZGUxZi4uMDg4YjViZiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdG9uZ2FfaHdtZ3IuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV9od21nci5jCkBAIC00 MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAic211bWdyLmgiCiAjaW5jbHVkZSAidG9uZ2Ffc211bWdy LmgiCiAjaW5jbHVkZSAidG9uZ2FfY2xvY2twb3dlcmdhdGluZy5oIgorI2luY2x1ZGUgInRvbmdh X3RoZXJtYWwuaCIKIAogI2luY2x1ZGUgInNtdS9zbXVfN18xXzJfZC5oIgogI2luY2x1ZGUgInNt dS9zbXVfN18xXzJfc2hfbWFzay5oIgpAQCAtNTAsNiArNTEsOSBAQAogI2luY2x1ZGUgImJpZi9i aWZfNV8wX2QuaCIKICNpbmNsdWRlICJiaWYvYmlmXzVfMF9zaF9tYXNrLmgiCiAKKyNpbmNsdWRl ICJjZ3NfbGludXguaCIKKyNpbmNsdWRlICJldmVudG1nci5oIgorCiAjZGVmaW5lIE1DX0NHX0FS Ql9GUkVRX0YwICAgICAgICAgICAweDBhCiAjZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YxICAgICAg ICAgICAweDBiCiAjZGVmaW5lIE1DX0NHX0FSQl9GUkVRX0YyICAgICAgICAgICAweDBjCkBAIC01 NzIxLDYgKzU3MjUsMjIgQEAgc3RhdGljIGludCB0b25nYV9zZXRfcG93ZXJfc3RhdGVfdGFza3Mo c3RydWN0IHBwX2h3bWdyICpod21nciwgY29uc3Qgdm9pZCAqaW5wdXQKIAlyZXR1cm4gcmVzdWx0 OwogfQogCisvKioKKyogIFNldCBtYXhpbXVtIHRhcmdldCBvcGVyYXRpbmcgZmFuIG91dHB1dCBQ V00KKyoKKyogQHBhcmFtICAgIHBId01ncjogIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBsYXkg aGFyZHdhcmUgbWFuYWdlci4KKyogQHBhcmFtICAgIHVzTWF4RmFuUHdtOiAgbWF4IG9wZXJhdGlu ZyBmYW4gUFdNIGluIHBlcmNlbnRzCisqIEByZXR1cm4gICBUaGUgcmVzcG9uc2UgdGhhdCBjYW1l IGZyb20gdGhlIFNNQy4KKyovCitzdGF0aWMgaW50IHRvbmdhX3NldF9tYXhfZmFuX3B3bV9vdXRw dXQoc3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDE2X3QgdXNfbWF4X2Zhbl9wd20pCit7CisJ aHdtZ3ItPnRoZXJtYWxfY29udHJvbGxlci5hZHZhbmNlRmFuQ29udHJvbFBhcmFtZXRlcnMudXNN YXhGYW5QV00gPSB1c19tYXhfZmFuX3B3bTsKKworCWlmIChwaG1faXNfaHdfYWNjZXNzX2Jsb2Nr ZWQoaHdtZ3IpKQorCQlyZXR1cm4gMDsKKworICAgIHJldHVybiAoMCA9PSBzbXVtX3NlbmRfbXNn X3RvX3NtY193aXRoX3BhcmFtZXRlcihod21nci0+c211bWdyLCBQUFNNQ19NU0dfU2V0RmFuUHdt TWF4LCB1c19tYXhfZmFuX3B3bSkgPyAwIDogLUVJTlZBTCk7Cit9CiAKIGludCB0b25nYV9ub3Rp Znlfc21jX2Rpc3BsYXlfY29uZmlnX2FmdGVyX3BzX2FkanVzdG1lbnQoc3RydWN0IHBwX2h3bWdy ICpod21ncikKIHsKQEAgLTU3OTksNiArNTgxOSwxMjIgQEAgaW50IHRvbmdhX2Rpc3BsYXlfY29u ZmlndXJhdGlvbl9jaGFuZ2VkX3Rhc2soc3RydWN0IHBwX2h3bWdyICpod21ncikKIAlyZXR1cm4g MDsKIH0KIAorLyoqCisqICBTZXQgbWF4aW11bSB0YXJnZXQgb3BlcmF0aW5nIGZhbiBvdXRwdXQg UlBNCisqCisqIEBwYXJhbSAgICBwSHdNZ3I6ICB0aGUgYWRkcmVzcyBvZiB0aGUgcG93ZXJwbGF5 IGhhcmR3YXJlIG1hbmFnZXIuCisqIEBwYXJhbSAgICB1c01heEZhblJwbTogIG1heCBvcGVyYXRp bmcgZmFuIFJQTSB2YWx1ZS4KKyogQHJldHVybiAgIFRoZSByZXNwb25zZSB0aGF0IGNhbWUgZnJv bSB0aGUgU01DLgorKi8KK3N0YXRpYyBpbnQgdG9uZ2Ffc2V0X21heF9mYW5fcnBtX291dHB1dChz dHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MTZfdCB1c19tYXhfZmFuX3B3bSkKK3sKKwlod21n ci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51c01heEZh blJQTSA9IHVzX21heF9mYW5fcHdtOworCisJaWYgKHBobV9pc19od19hY2Nlc3NfYmxvY2tlZCho d21ncikpCisJCXJldHVybiAwOworCisJcmV0dXJuICgwID09IHNtdW1fc2VuZF9tc2dfdG9fc21j X3dpdGhfcGFyYW1ldGVyKGh3bWdyLT5zbXVtZ3IsIFBQU01DX01TR19TZXRGYW5ScG1NYXgsIHVz X21heF9mYW5fcHdtKSA/IDAgOiAtRUlOVkFMKTsKK30KKwordWludDMyX3QgdG9uZ2FfZ2V0X3hj bGsoc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwl1aW50MzJfdCByZWZlcmVuY2VfY2xvY2s7 CisJdWludDMyX3QgdGM7CisJdWludDMyX3QgZGl2aWRlOworCisJQVRPTV9GSVJNV0FSRV9JTkZP ICpmd19pbmZvOworCXVpbnQxNl90IHNpemU7CisJdWludDhfdCBmcmV2LCBjcmV2OworCWludCBp bmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKERBVEEsIEZpcm13YXJlSW5mbyk7CisKKwl0 YyA9IFBITV9SRUFEX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9S RUdfX1NNQywgQ0dfQ0xLUElOX0NOVExfMiwgTVVYX1RDTEtfVE9fWENMSyk7CisKKwlpZiAodGMp CisJCXJldHVybiBUQ0xLOworCisJZndfaW5mbyA9IChBVE9NX0ZJUk1XQVJFX0lORk8gKiljZ3Nf YXRvbV9nZXRfZGF0YV90YWJsZShod21nci0+ZGV2aWNlLCBpbmRleCwKKwkJCQkJCSAgJnNpemUs ICZmcmV2LCAmY3Jldik7CisKKwlpZiAoIWZ3X2luZm8pCisJCXJldHVybiAwOworCisJcmVmZXJl bmNlX2Nsb2NrID0gbGUxNl90b19jcHUoZndfaW5mby0+dXNNaW5QaXhlbENsb2NrUExMX091dHB1 dCk7CisKKwlkaXZpZGUgPSBQSE1fUkVBRF9WRlBGX0lORElSRUNUX0ZJRUxEKGh3bWdyLT5kZXZp Y2UsIENHU19JTkRfUkVHX19TTUMsIENHX0NMS1BJTl9DTlRMLCBYVEFMSU5fRElWSURFKTsKKwor CWlmICgwICE9IGRpdmlkZSkKKwkJcmV0dXJuIHJlZmVyZW5jZV9jbG9jayAvIDQ7CisKKwlyZXR1 cm4gcmVmZXJlbmNlX2Nsb2NrOworfQorCitpbnQgdG9uZ2FfZHBtX3NldF9pbnRlcnJ1cHRfc3Rh dGUodm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJCQkgdW5zaWduZWQgc3JjX2lkLCB1bnNpZ25lZCB0 eXBlLAorCQkJCQkgaW50IGVuYWJsZWQpCit7CisJdWludDMyX3QgY2dfdGhlcm1hbF9pbnQ7CisJ c3RydWN0IHBwX2h3bWdyICpod21nciA9ICgoc3RydWN0IHBwX2V2ZW50bWdyICopcHJpdmF0ZV9k YXRhKS0+aHdtZ3I7CisKKwlpZiAoaHdtZ3IgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisK Kwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFNRF9USEVSTUFMX0lSUV9MT1dfVE9fSElHSDoKKwkJ aWYgKGVuYWJsZWQpIHsKKwkJCWNnX3RoZXJtYWxfaW50ID0gY2dzX3JlYWRfaW5kX3JlZ2lzdGVy KGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIGl4Q0dfVEhFUk1BTF9JTlQpOworCQkJ Y2dfdGhlcm1hbF9pbnQgfD0gQ0dfVEhFUk1BTF9JTlRfQ1RSTF9fVEhFUk1fSU5USF9NQVNLX01B U0s7CisJCQljZ3Nfd3JpdGVfaW5kX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVH X19TTUMsIGl4Q0dfVEhFUk1BTF9JTlQsIGNnX3RoZXJtYWxfaW50KTsKKwkJfSBlbHNlIHsKKwkJ CWNnX3RoZXJtYWxfaW50ID0gY2dzX3JlYWRfaW5kX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIENH U19JTkRfUkVHX19TTUMsIGl4Q0dfVEhFUk1BTF9JTlQpOworCQkJY2dfdGhlcm1hbF9pbnQgJj0g fkNHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVEhfTUFTS19NQVNLOworCQkJY2dzX3dyaXRl X2luZF9yZWdpc3Rlcihod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JFR19fU01DLCBpeENHX1RIRVJN QUxfSU5ULCBjZ190aGVybWFsX2ludCk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIEFNRF9USEVS TUFMX0lSUV9ISUdIX1RPX0xPVzoKKwkJaWYgKGVuYWJsZWQpIHsKKwkJCWNnX3RoZXJtYWxfaW50 ID0gY2dzX3JlYWRfaW5kX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMs IGl4Q0dfVEhFUk1BTF9JTlQpOworCQkJY2dfdGhlcm1hbF9pbnQgfD0gQ0dfVEhFUk1BTF9JTlRf Q1RSTF9fVEhFUk1fSU5UTF9NQVNLX01BU0s7CisJCQljZ3Nfd3JpdGVfaW5kX3JlZ2lzdGVyKGh3 bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIGl4Q0dfVEhFUk1BTF9JTlQsIGNnX3RoZXJt YWxfaW50KTsKKwkJfSBlbHNlIHsKKwkJCWNnX3RoZXJtYWxfaW50ID0gY2dzX3JlYWRfaW5kX3Jl Z2lzdGVyKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIGl4Q0dfVEhFUk1BTF9JTlQp OworCQkJY2dfdGhlcm1hbF9pbnQgJj0gfkNHX1RIRVJNQUxfSU5UX0NUUkxfX1RIRVJNX0lOVExf TUFTS19NQVNLOworCQkJY2dzX3dyaXRlX2luZF9yZWdpc3Rlcihod21nci0+ZGV2aWNlLCBDR1Nf SU5EX1JFR19fU01DLCBpeENHX1RIRVJNQUxfSU5ULCBjZ190aGVybWFsX2ludCk7CisJCX0KKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitpbnQgdG9u Z2FfcmVnaXN0ZXJfaW50ZXJuYWxfdGhlcm1hbF9pbnRlcnJ1cHQoc3RydWN0IHBwX2h3bWdyICpo d21nciwKKwkJCQkJY29uc3Qgdm9pZCAqdGhlcm1hbF9pbnRlcnJ1cHRfaW5mbykKK3sKKwlpbnQg cmVzdWx0OworCWNvbnN0IHN0cnVjdCBwcF9pbnRlcnJ1cHRfcmVnaXN0cmF0aW9uX2luZm8gKmlu Zm8gPQorCQkJKGNvbnN0IHN0cnVjdCBwcF9pbnRlcnJ1cHRfcmVnaXN0cmF0aW9uX2luZm8gKil0 aGVybWFsX2ludGVycnVwdF9pbmZvOworCisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlyZXN1bHQgPSBjZ3NfYWRkX2lycV9zb3VyY2UoaHdtZ3ItPmRldmljZSwgMjMw LCBBTURfVEhFUk1BTF9JUlFfTEFTVCwKKwkJCQl0b25nYV9kcG1fc2V0X2ludGVycnVwdF9zdGF0 ZSwKKwkJCQlpbmZvLT5jYWxsX2JhY2ssIGluZm8tPmNvbnRleHQpOworCisJaWYgKHJlc3VsdCkK KwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXN1bHQgPSBjZ3NfYWRkX2lycV9zb3VyY2UoaHdtZ3It PmRldmljZSwgMjMxLCBBTURfVEhFUk1BTF9JUlFfTEFTVCwKKwkJCQl0b25nYV9kcG1fc2V0X2lu dGVycnVwdF9zdGF0ZSwKKwkJCQlpbmZvLT5jYWxsX2JhY2ssIGluZm8tPmNvbnRleHQpOworCisJ aWYgKHJlc3VsdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGlj IGNvbnN0IHN0cnVjdCBwcF9od21ncl9mdW5jIHRvbmdhX2h3bWdyX2Z1bmNzID0gewogCS5iYWNr ZW5kX2luaXQgPSAmdG9uZ2FfaHdtZ3JfYmFja2VuZF9pbml0LAogCS5iYWNrZW5kX2ZpbmkgPSAm dG9uZ2FfaHdtZ3JfYmFja2VuZF9maW5pLApAQCAtNTgyMCw2ICs1OTU2LDE4IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QgcHBfaHdtZ3JfZnVuYyB0b25nYV9od21ncl9mdW5jcyA9IHsKIAkuZGlzYWJs ZV9jbG9ja19wb3dlcl9nYXRpbmcgPSB0b25nYV9waG1fZGlzYWJsZV9jbG9ja19wb3dlcl9nYXRp bmcsCiAJLm5vdGlmeV9zbWNfZGlzcGxheV9jb25maWdfYWZ0ZXJfcHNfYWRqdXN0bWVudCA9IHRv bmdhX25vdGlmeV9zbWNfZGlzcGxheV9jb25maWdfYWZ0ZXJfcHNfYWRqdXN0bWVudCwKIAkuZGlz cGxheV9jb25maWdfY2hhbmdlZCA9IHRvbmdhX2Rpc3BsYXlfY29uZmlndXJhdGlvbl9jaGFuZ2Vk X3Rhc2ssCisJLnNldF9tYXhfZmFuX3B3bV9vdXRwdXQgPSB0b25nYV9zZXRfbWF4X2Zhbl9wd21f b3V0cHV0LAorCS5zZXRfbWF4X2Zhbl9ycG1fb3V0cHV0ID0gdG9uZ2Ffc2V0X21heF9mYW5fcnBt X291dHB1dCwKKwkuZ2V0X3RlbXBlcmF0dXJlID0gdG9uZ2FfdGhlcm1hbF9nZXRfdGVtcGVyYXR1 cmUsCisJLnN0b3BfdGhlcm1hbF9jb250cm9sbGVyID0gdG9uZ2FfdGhlcm1hbF9zdG9wX3RoZXJt YWxfY29udHJvbGxlciwKKwkuZ2V0X2Zhbl9zcGVlZF9pbmZvID0gdG9uZ2FfZmFuX2N0cmxfZ2V0 X2Zhbl9zcGVlZF9pbmZvLAorCS5nZXRfZmFuX3NwZWVkX3BlcmNlbnQgPSB0b25nYV9mYW5fY3Ry bF9nZXRfZmFuX3NwZWVkX3BlcmNlbnQsCisJLnNldF9mYW5fc3BlZWRfcGVyY2VudCA9IHRvbmdh X2Zhbl9jdHJsX3NldF9mYW5fc3BlZWRfcGVyY2VudCwKKwkucmVzZXRfZmFuX3NwZWVkX3RvX2Rl ZmF1bHQgPSB0b25nYV9mYW5fY3RybF9yZXNldF9mYW5fc3BlZWRfdG9fZGVmYXVsdCwKKwkuZ2V0 X2Zhbl9zcGVlZF9ycG0gPSB0b25nYV9mYW5fY3RybF9nZXRfZmFuX3NwZWVkX3JwbSwKKwkuc2V0 X2Zhbl9zcGVlZF9ycG0gPSB0b25nYV9mYW5fY3RybF9zZXRfZmFuX3NwZWVkX3JwbSwKKwkudW5p bml0aWFsaXplX3RoZXJtYWxfY29udHJvbGxlciA9IHRvbmdhX3RoZXJtYWxfY3RybF91bmluaXRp YWxpemVfdGhlcm1hbF9jb250cm9sbGVyLAorCS5yZWdpc3Rlcl9pbnRlcm5hbF90aGVybWFsX2lu dGVycnVwdCA9IHRvbmdhX3JlZ2lzdGVyX2ludGVybmFsX3RoZXJtYWxfaW50ZXJydXB0LAogfTsK IAogaW50IHRvbmdhX2h3bWdyX2luaXQoc3RydWN0IHBwX2h3bWdyICpod21ncikKQEAgLTU4MzQs NyArNTk4Miw3IEBAIGludCB0b25nYV9od21ncl9pbml0KHN0cnVjdCBwcF9od21nciAqaHdtZ3Ip CiAJaHdtZ3ItPmJhY2tlbmQgPSBkYXRhOwogCWh3bWdyLT5od21ncl9mdW5jID0gJnRvbmdhX2h3 bWdyX2Z1bmNzOwogCWh3bWdyLT5wcHRhYmxlX2Z1bmMgPSAmdG9uZ2FfcHB0YWJsZV9mdW5jczsK LQorCXBwX3RvbmdhX3RoZXJtYWxfaW5pdGlhbGl6ZShod21ncik7CiAJcmV0dXJuIDA7CiB9CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX2h3 bWdyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV9od21nci5o CmluZGV4IGQ3NzNkMTIuLjQ0Yjk4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQv cG93ZXJwbGF5L2h3bWdyL3RvbmdhX2h3bWdyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9w b3dlcnBsYXkvaHdtZ3IvdG9uZ2FfaHdtZ3IuaApAQCAtNDI2LDYgKzQyNiw3IEBAIGludCB0b25n YV91cGRhdGVfdmNlX2RwbShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBjb25zdCB2b2lkICppbnB1 dCk7CiBpbnQgdG9uZ2FfdXBkYXRlX3V2ZF9kcG0oc3RydWN0IHBwX2h3bWdyICpod21nciwgYm9v bCBiZ2F0ZSk7CiBpbnQgdG9uZ2FfZW5hYmxlX2Rpc2FibGVfdXZkX2RwbShzdHJ1Y3QgcHBfaHdt Z3IgKmh3bWdyLCBib29sIGVuYWJsZSk7CiBpbnQgdG9uZ2FfZW5hYmxlX2Rpc2FibGVfdmNlX2Rw bShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCBib29sIGVuYWJsZSk7Cit1aW50MzJfdCB0b25nYV9n ZXRfeGNsayhzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX3RoZXJtYWwuYyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvcG93ZXJwbGF5L2h3bWdyL3RvbmdhX3RoZXJtYWwuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzE1NTA3Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdG9uZ2FfdGhlcm1hbC5jCkBAIC0w LDAgKzEsNTg3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTUgQWR2YW5jZWQgTWljcm8gRGV2aWNl cywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENP UFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVB TElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAidG9uZ2FfdGhlcm1h bC5oIgorI2luY2x1ZGUgInRvbmdhX2h3bWdyLmgiCisjaW5jbHVkZSAidG9uZ2Ffc211bWdyLmgi CisjaW5jbHVkZSAidG9uZ2FfcHBzbWMuaCIKKyNpbmNsdWRlICJzbXUvc211XzdfMV8yX2QuaCIK KyNpbmNsdWRlICJzbXUvc211XzdfMV8yX3NoX21hc2suaCIKKworLyoqCisqIEdldCBGYW4gU3Bl ZWQgQ29udHJvbCBQYXJhbWV0ZXJzLgorKiBAcGFyYW0gICAgaHdtZ3IgIHRoZSBhZGRyZXNzIG9m IHRoZSBwb3dlcnBsYXkgaGFyZHdhcmUgbWFuYWdlci4KKyogQHBhcmFtICAgIHBTcGVlZCBpcyB0 aGUgYWRkcmVzcyBvZiB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSByZXN1bHQgaXMgdG8gYmUgcGxh Y2VkLgorKiBAZXhjZXB0aW9uIEFsd2F5cyBzdWNjZWVkcyBleGNlcHQgaWYgd2UgY2Fubm90IHpl cm8gb3V0IHRoZSBvdXRwdXQgc3RydWN0dXJlLgorKi8KK2ludCB0b25nYV9mYW5fY3RybF9nZXRf ZmFuX3NwZWVkX2luZm8oc3RydWN0IHBwX2h3bWdyICpod21nciwgc3RydWN0IHBobV9mYW5fc3Bl ZWRfaW5mbyAqZmFuX3NwZWVkX2luZm8pCit7CisKKwlpZiAoaHdtZ3ItPnRoZXJtYWxfY29udHJv bGxlci5mYW5JbmZvLmJOb0ZhbikKKwkJcmV0dXJuIDA7CisKKwlmYW5fc3BlZWRfaW5mby0+c3Vw cG9ydHNfcGVyY2VudF9yZWFkID0gdHJ1ZTsKKwlmYW5fc3BlZWRfaW5mby0+c3VwcG9ydHNfcGVy Y2VudF93cml0ZSA9IHRydWU7CisJZmFuX3NwZWVkX2luZm8tPm1pbl9wZXJjZW50ID0gMDsKKwlm YW5fc3BlZWRfaW5mby0+bWF4X3BlcmNlbnQgPSAxMDA7CisKKwlpZiAoMCAhPSBod21nci0+dGhl cm1hbF9jb250cm9sbGVyLmZhbkluZm8udWNUYWNob21ldGVyUHVsc2VzUGVyUmV2b2x1dGlvbikg eworCQlmYW5fc3BlZWRfaW5mby0+c3VwcG9ydHNfcnBtX3JlYWQgPSB0cnVlOworCQlmYW5fc3Bl ZWRfaW5mby0+c3VwcG9ydHNfcnBtX3dyaXRlID0gdHJ1ZTsKKwkJZmFuX3NwZWVkX2luZm8tPm1p bl9ycG0gPSBod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmZhbkluZm8udWxNaW5SUE07CisJCWZh bl9zcGVlZF9pbmZvLT5tYXhfcnBtID0gaHdtZ3ItPnRoZXJtYWxfY29udHJvbGxlci5mYW5JbmZv LnVsTWF4UlBNOworCX0gZWxzZSB7CisJCWZhbl9zcGVlZF9pbmZvLT5taW5fcnBtID0gMDsKKwkJ ZmFuX3NwZWVkX2luZm8tPm1heF9ycG0gPSAwOworCX0KKworCXJldHVybiAwOworfQorCisvKioK KyogR2V0IEZhbiBTcGVlZCBpbiBwZXJjZW50LgorKiBAcGFyYW0gICAgaHdtZ3IgIHRoZSBhZGRy ZXNzIG9mIHRoZSBwb3dlcnBsYXkgaGFyZHdhcmUgbWFuYWdlci4KKyogQHBhcmFtICAgIHBTcGVl ZCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSByZXN1bHQgaXMgdG8g YmUgcGxhY2VkLgorKiBAZXhjZXB0aW9uIEZhaWxzIGlzIHRoZSAxMDAlIHNldHRpbmcgYXBwZWFy cyB0byBiZSAwLgorKi8KK2ludCB0b25nYV9mYW5fY3RybF9nZXRfZmFuX3NwZWVkX3BlcmNlbnQo c3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDMyX3QgKnNwZWVkKQoreworCXVpbnQzMl90IGR1 dHkxMDA7CisJdWludDMyX3QgZHV0eTsKKwl1aW50NjRfdCB0bXA2NDsKKworCWlmIChod21nci0+ dGhlcm1hbF9jb250cm9sbGVyLmZhbkluZm8uYk5vRmFuKQorCQlyZXR1cm4gMDsKKworCWR1dHkx MDAgPSBQSE1fUkVBRF9WRlBGX0lORElSRUNUX0ZJRUxEKGh3bWdyLT5kZXZpY2UsIENHU19JTkRf UkVHX19TTUMsIENHX0ZET19DVFJMMSwgRk1BWF9EVVRZMTAwKTsKKwlkdXR5ID0gUEhNX1JFQURf VkZQRl9JTkRJUkVDVF9GSUVMRChod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JFR19fU01DLCBDR19U SEVSTUFMX1NUQVRVUywgRkRPX1BXTV9EVVRZKTsKKworCWlmICgwID09IGR1dHkxMDApCisJCXJl dHVybiAtRUlOVkFMOworCisKKwl0bXA2NCA9ICh1aW50NjRfdClkdXR5ICogMTAwOworCWRvX2Rp dih0bXA2NCwgZHV0eTEwMCk7CisJKnNwZWVkID0gKHVpbnQzMl90KXRtcDY0OworCisJaWYgKCpz cGVlZCA+IDEwMCkKKwkJKnNwZWVkID0gMTAwOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorKiBH ZXQgRmFuIFNwZWVkIGluIFJQTS4KKyogQHBhcmFtICAgIGh3bWdyICB0aGUgYWRkcmVzcyBvZiB0 aGUgcG93ZXJwbGF5IGhhcmR3YXJlIG1hbmFnZXIuCisqIEBwYXJhbSAgICBzcGVlZCBpcyB0aGUg YWRkcmVzcyBvZiB0aGUgc3RydWN0dXJlIHdoZXJlIHRoZSByZXN1bHQgaXMgdG8gYmUgcGxhY2Vk LgorKiBAZXhjZXB0aW9uIFJldHVybnMgbm90IHN1cHBvcnRlZCBpZiBubyBmYW4gaXMgZm91bmQg b3IgaWYgcHVsc2VzIHBlciByZXZvbHV0aW9uIGFyZSBub3Qgc2V0CisqLworaW50IHRvbmdhX2Zh bl9jdHJsX2dldF9mYW5fc3BlZWRfcnBtKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90 ICpzcGVlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisqIFNldCBGYW4gU3BlZWQgQ29udHJv bCB0byBzdGF0aWMgbW9kZSwgc28gdGhhdCB0aGUgdXNlciBjYW4gZGVjaWRlIHdoYXQgc3BlZWQg dG8gdXNlLgorKiBAcGFyYW0gICAgaHdtZ3IgIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBsYXkg aGFyZHdhcmUgbWFuYWdlci4KKyogICAgICAgICAgIG1vZGUgICAgdGhlIGZhbiBjb250cm9sIG1v ZGUsIDAgZGVmYXVsdCwgMSBieSBwZXJjZW50LCA1LCBieSBSUE0KKyogQGV4Y2VwdGlvbiBTaG91 bGQgYWx3YXlzIHN1Y2NlZWQuCisqLworaW50IHRvbmdhX2Zhbl9jdHJsX3NldF9zdGF0aWNfbW9k ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MzJfdCBtb2RlKQoreworCisJaWYgKGh3bWdy LT5mYW5fY3RybF9pc19pbl9kZWZhdWx0X21vZGUpIHsKKwkJaHdtZ3ItPmZhbl9jdHJsX2RlZmF1 bHRfbW9kZSA9IFBITV9SRUFEX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dT X0lORF9SRUdfX1NNQywgQ0dfRkRPX0NUUkwyLCBGRE9fUFdNX01PREUpOworCQlod21nci0+dG1p biA9IFBITV9SRUFEX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9S RUdfX1NNQywgQ0dfRkRPX0NUUkwyLCBUTUlOKTsKKwkJaHdtZ3ItPmZhbl9jdHJsX2lzX2luX2Rl ZmF1bHRfbW9kZSA9IGZhbHNlOworCX0KKworCVBITV9XUklURV9WRlBGX0lORElSRUNUX0ZJRUxE KGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIENHX0ZET19DVFJMMiwgVE1JTiwgMCk7 CisJUEhNX1dSSVRFX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9S RUdfX1NNQywgQ0dfRkRPX0NUUkwyLCBGRE9fUFdNX01PREUsIG1vZGUpOworCisJcmV0dXJuIDA7 Cit9CisKKy8qKgorKiBSZXNldCBGYW4gU3BlZWQgQ29udHJvbCB0byBkZWZhdWx0IG1vZGUuCisq IEBwYXJhbSAgICBod21nciAgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvd2VycGxheSBoYXJkd2FyZSBt YW5hZ2VyLgorKiBAZXhjZXB0aW9uIFNob3VsZCBhbHdheXMgc3VjY2VlZC4KKyovCitpbnQgdG9u Z2FfZmFuX2N0cmxfc2V0X2RlZmF1bHRfbW9kZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQorewor CWlmIChod21nci0+ZmFuX2N0cmxfaXNfaW5fZGVmYXVsdF9tb2RlKSB7CisJCVBITV9XUklURV9W RlBGX0lORElSRUNUX0ZJRUxEKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIENHX0ZE T19DVFJMMiwgRkRPX1BXTV9NT0RFLCBod21nci0+ZmFuX2N0cmxfZGVmYXVsdF9tb2RlKTsKKwkJ UEhNX1dSSVRFX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9SRUdf X1NNQywgQ0dfRkRPX0NUUkwyLCBUTUlOLCBod21nci0+dG1pbik7CisJCWh3bWdyLT5mYW5fY3Ry bF9pc19pbl9kZWZhdWx0X21vZGUgPSB0cnVlOworCX0KKworCXJldHVybiAwOworfQorCitpbnQg dG9uZ2FfZmFuX2N0cmxfc3RhcnRfc21jX2Zhbl9jb250cm9sKHN0cnVjdCBwcF9od21nciAqaHdt Z3IpCit7CisJaW50IHJlc3VsdDsKKworCWlmIChwaG1fY2FwX2VuYWJsZWQoaHdtZ3ItPnBsYXRm b3JtX2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX09ERnV6enlGYW5D b250cm9sU3VwcG9ydCkpIHsKKwkJY2dzX3dyaXRlX3JlZ2lzdGVyKGh3bWdyLT5kZXZpY2UsIG1t U01DX01TR19BUkdfMCwgRkFOX0NPTlRST0xfRlVaWlkpOworCQlyZXN1bHQgPSAoc211bV9zZW5k X21zZ190b19zbWMoaHdtZ3ItPnNtdW1nciwgUFBTTUNfU3RhcnRGYW5Db250cm9sKSA9PSAwKSA/ ICAwIDogLUVJTlZBTDsKKy8qCisJCWlmIChwaG1fY2FwX2VuYWJsZWQoaHdtZ3ItPnBsYXRmb3Jt X2Rlc2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX0ZhblNwZWVkSW5UYWJs ZUlzUlBNKSkKKwkJCWh3bWdyLT5zZXRfbWF4X2Zhbl9ycG1fb3V0cHV0KGh3bWdyLCBod21nci0+ dGhlcm1hbF9jb250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51c01heEZhblJQ TSk7CisJCWVsc2UKKwkJCWh3bWdyLT5zZXRfbWF4X2Zhbl9wd21fb3V0cHV0KGh3bWdyLCBod21n ci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51c01heEZh blBXTSk7CisqLworCX0gZWxzZSB7CisJCWNnc193cml0ZV9yZWdpc3Rlcihod21nci0+ZGV2aWNl LCBtbVNNQ19NU0dfQVJHXzAsIEZBTl9DT05UUk9MX1RBQkxFKTsKKwkJcmVzdWx0ID0gKHNtdW1f c2VuZF9tc2dfdG9fc21jKGh3bWdyLT5zbXVtZ3IsIFBQU01DX1N0YXJ0RmFuQ29udHJvbCkgPT0g MCkgPyAgMCA6IC1FSU5WQUw7CisJfQorLyogVE8gRE8gRk9SIFNPTUUgREVWSUNFIElEIDBYNjky Yiwgc2VuZCB0aGlzIG1zZyByZXR1cm4gaW52YWxpZCBjb21tYW5kLgorCWlmIChyZXN1bHQgPT0g MCAmJiBod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVy cy51Y1RhcmdldFRlbXBlcmF0dXJlICE9IDApCisJCXJlc3VsdCA9ICgwID09IHNtdW1fc2VuZF9t c2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3bWdyLT5zbXVtZ3IsIFBQU01DX01TR19TZXRGYW5U ZW1wZXJhdHVyZVRhcmdldCwgXAorCQkJCQkJCQlod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmFk dmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51Y1RhcmdldFRlbXBlcmF0dXJlKSA/IDAgOiAtRUlO VkFMKTsKKyovCisJcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQgdG9uZ2FfZmFuX2N0cmxfc3Rv cF9zbWNfZmFuX2NvbnRyb2woc3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlyZXR1cm4gKHNt dW1fc2VuZF9tc2dfdG9fc21jKGh3bWdyLT5zbXVtZ3IsIFBQU01DX1N0b3BGYW5Db250cm9sKSA9 PSAwKSA/ICAwIDogLUVJTlZBTDsKK30KKworLyoqCisqIFNldCBGYW4gU3BlZWQgaW4gcGVyY2Vu dC4KKyogQHBhcmFtICAgIGh3bWdyICB0aGUgYWRkcmVzcyBvZiB0aGUgcG93ZXJwbGF5IGhhcmR3 YXJlIG1hbmFnZXIuCisqIEBwYXJhbSAgICBzcGVlZCBpcyB0aGUgcGVyY2VudGFnZSB2YWx1ZSAo MCUgLSAxMDAlKSB0byBiZSBzZXQuCisqIEBleGNlcHRpb24gRmFpbHMgaXMgdGhlIDEwMCUgc2V0 dGluZyBhcHBlYXJzIHRvIGJlIDAuCisqLworaW50IHRvbmdhX2Zhbl9jdHJsX3NldF9mYW5fc3Bl ZWRfcGVyY2VudChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MzJfdCBzcGVlZCkKK3sKKwl1 aW50MzJfdCBkdXR5MTAwOworCXVpbnQzMl90IGR1dHk7CisJdWludDY0X3QgdG1wNjQ7CisKKwlp ZiAoaHdtZ3ItPnRoZXJtYWxfY29udHJvbGxlci5mYW5JbmZvLmJOb0ZhbikKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlpZiAoc3BlZWQgPiAxMDApCisJCXNwZWVkID0gMTAwOworCisJaWYgKHBobV9j YXBfZW5hYmxlZChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsIFBITV9Q bGF0Zm9ybUNhcHNfTWljcm9jb2RlRmFuQ29udHJvbCkpCisJCXRvbmdhX2Zhbl9jdHJsX3N0b3Bf c21jX2Zhbl9jb250cm9sKGh3bWdyKTsKKworCWR1dHkxMDAgPSBQSE1fUkVBRF9WRlBGX0lORElS RUNUX0ZJRUxEKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIENHX0ZET19DVFJMMSwg Rk1BWF9EVVRZMTAwKTsKKworCWlmICgwID09IGR1dHkxMDApCisJCXJldHVybiAtRUlOVkFMOwor CisJdG1wNjQgPSAodWludDY0X3Qpc3BlZWQgKiAxMDA7CisJZG9fZGl2KHRtcDY0LCBkdXR5MTAw KTsKKwlkdXR5ID0gKHVpbnQzMl90KXRtcDY0OworCisJUEhNX1dSSVRFX1ZGUEZfSU5ESVJFQ1Rf RklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9SRUdfX1NNQywgQ0dfRkRPX0NUUkwwLCBGRE9f U1RBVElDX0RVVFksIGR1dHkpOworCisJcmV0dXJuIHRvbmdhX2Zhbl9jdHJsX3NldF9zdGF0aWNf bW9kZShod21nciwgRkRPX1BXTV9NT0RFX1NUQVRJQyk7Cit9CisKKy8qKgorKiBSZXNldCBGYW4g U3BlZWQgdG8gZGVmYXVsdC4KKyogQHBhcmFtICAgIGh3bWdyICB0aGUgYWRkcmVzcyBvZiB0aGUg cG93ZXJwbGF5IGhhcmR3YXJlIG1hbmFnZXIuCisqIEBleGNlcHRpb24gQWx3YXlzIHN1Y2NlZWRz LgorKi8KK2ludCB0b25nYV9mYW5fY3RybF9yZXNldF9mYW5fc3BlZWRfdG9fZGVmYXVsdChzdHJ1 Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCWludCByZXN1bHQ7CisKKwlpZiAoaHdtZ3ItPnRoZXJt YWxfY29udHJvbGxlci5mYW5JbmZvLmJOb0ZhbikKKwkJcmV0dXJuIDA7CisKKwlpZiAocGhtX2Nh cF9lbmFibGVkKGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1Bs YXRmb3JtQ2Fwc19NaWNyb2NvZGVGYW5Db250cm9sKSkgeworCQlyZXN1bHQgPSB0b25nYV9mYW5f Y3RybF9zZXRfc3RhdGljX21vZGUoaHdtZ3IsIEZET19QV01fTU9ERV9TVEFUSUMpOworCQlpZiAo MCA9PSByZXN1bHQpCisJCQlyZXN1bHQgPSB0b25nYV9mYW5fY3RybF9zdGFydF9zbWNfZmFuX2Nv bnRyb2woaHdtZ3IpOworCX0gZWxzZQorCQlyZXN1bHQgPSB0b25nYV9mYW5fY3RybF9zZXRfZGVm YXVsdF9tb2RlKGh3bWdyKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorKiBTZXQgRmFu IFNwZWVkIGluIFJQTS4KKyogQHBhcmFtICAgIGh3bWdyICB0aGUgYWRkcmVzcyBvZiB0aGUgcG93 ZXJwbGF5IGhhcmR3YXJlIG1hbmFnZXIuCisqIEBwYXJhbSAgICBzcGVlZCBpcyB0aGUgcGVyY2Vu dGFnZSB2YWx1ZSAobWluIC0gbWF4KSB0byBiZSBzZXQuCisqIEBleGNlcHRpb24gRmFpbHMgaXMg dGhlIHNwZWVkIG5vdCBsaWUgYmV0d2VlbiBtaW4gYW5kIG1heC4KKyovCitpbnQgdG9uZ2FfZmFu X2N0cmxfc2V0X2Zhbl9zcGVlZF9ycG0oc3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDMyX3Qg c3BlZWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorKiBSZWFkcyB0aGUgcmVtb3RlIHRlbXBl cmF0dXJlIGZyb20gdGhlIFNJc2xhbmRzIHRoZXJtYWwgY29udHJvbGxlci4KKyoKKyogQHBhcmFt ICAgIGh3bWdyIFRoZSBhZGRyZXNzIG9mIHRoZSBoYXJkd2FyZSBtYW5hZ2VyLgorKi8KK2ludCB0 b25nYV90aGVybWFsX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQorewor CWludCB0ZW1wOworCisJdGVtcCA9IFBITV9SRUFEX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3It PmRldmljZSwgQ0dTX0lORF9SRUdfX1NNQywgQ0dfTVVMVF9USEVSTUFMX1NUQVRVUywgQ1RGX1RF TVApOworCisvKiBCaXQgOSBtZWFucyB0aGUgcmVhZGluZyBpcyBsb3dlciB0aGFuIHRoZSBsb3dl c3QgdXNhYmxlIHZhbHVlLiAqLworCWlmICgwICE9ICgweDIwMCAmIHRlbXApKQorCQl0ZW1wID0g VE9OR0FfVEhFUk1BTF9NQVhJTVVNX1RFTVBfUkVBRElORzsKKwllbHNlCisJCXRlbXAgPSAodGVt cCAmIDB4MWZmKTsKKworCXRlbXAgPSB0ZW1wICogUFBfVEVNUEVSQVRVUkVfVU5JVFNfUEVSX0NF TlRJR1JBREVTOworCisJcmV0dXJuIHRlbXA7Cit9CisKKy8qKgorKiBTZXQgdGhlIHJlcXVlc3Rl ZCB0ZW1wZXJhdHVyZSByYW5nZSBmb3IgaGlnaCBhbmQgbG93IGFsZXJ0IHNpZ25hbHMKKyoKKyog QHBhcmFtICAgIGh3bWdyIFRoZSBhZGRyZXNzIG9mIHRoZSBoYXJkd2FyZSBtYW5hZ2VyLgorKiBA cGFyYW0gICAgcmFuZ2UgVGVtcGVyYXR1cmUgcmFuZ2UgdG8gYmUgcHJvZ3JhbW1lZCBmb3IgaGln aCBhbmQgbG93IGFsZXJ0IHNpZ25hbHMKKyogQGV4Y2VwdGlvbiBQUF9SZXN1bHRfQmFkSW5wdXQg aWYgdGhlIGlucHV0IGRhdGEgaXMgbm90IHZhbGlkLgorKi8KK3N0YXRpYyBpbnQgdG9uZ2FfdGhl cm1hbF9zZXRfdGVtcGVyYXR1cmVfcmFuZ2Uoc3RydWN0IHBwX2h3bWdyICpod21nciwgdWludDMy X3QgbG93X3RlbXAsIHVpbnQzMl90IGhpZ2hfdGVtcCkKK3sKKwl1aW50MzJfdCBsb3cgPSBUT05H QV9USEVSTUFMX01JTklNVU1fQUxFUlRfVEVNUCAqIFBQX1RFTVBFUkFUVVJFX1VOSVRTX1BFUl9D RU5USUdSQURFUzsKKwl1aW50MzJfdCBoaWdoID0gVE9OR0FfVEhFUk1BTF9NQVhJTVVNX0FMRVJU X1RFTVAgKiBQUF9URU1QRVJBVFVSRV9VTklUU19QRVJfQ0VOVElHUkFERVM7CisKKwlpZiAobG93 IDwgbG93X3RlbXApCisJCWxvdyA9IGxvd190ZW1wOworCWlmIChoaWdoID4gaGlnaF90ZW1wKQor CQloaWdoID0gaGlnaF90ZW1wOworCisJaWYgKGxvdyA+IGhpZ2gpCisJCXJldHVybiAtRUlOVkFM OworCisJUEhNX1dSSVRFX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lO RF9SRUdfX1NNQywgQ0dfVEhFUk1BTF9JTlQsIERJR19USEVSTV9JTlRILCAoaGlnaCAvIFBQX1RF TVBFUkFUVVJFX1VOSVRTX1BFUl9DRU5USUdSQURFUykpOworCVBITV9XUklURV9WRlBGX0lORElS RUNUX0ZJRUxEKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIENHX1RIRVJNQUxfSU5U LCBESUdfVEhFUk1fSU5UTCwgKGxvdyAvIFBQX1RFTVBFUkFUVVJFX1VOSVRTX1BFUl9DRU5USUdS QURFUykpOworCVBITV9XUklURV9WRlBGX0lORElSRUNUX0ZJRUxEKGh3bWdyLT5kZXZpY2UsIENH U19JTkRfUkVHX19TTUMsIENHX1RIRVJNQUxfQ1RSTCwgRElHX1RIRVJNX0RQTSwgKGhpZ2ggLyBQ UF9URU1QRVJBVFVSRV9VTklUU19QRVJfQ0VOVElHUkFERVMpKTsKKworCXJldHVybiAwOworfQor CisvKioKKyogUHJvZ3JhbXMgdGhlcm1hbCBjb250cm9sbGVyIG9uZS10aW1lIHNldHRpbmcgcmVn aXN0ZXJzCisqCisqIEBwYXJhbSAgICBod21nciBUaGUgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUg bWFuYWdlci4KKyovCitzdGF0aWMgaW50IHRvbmdhX3RoZXJtYWxfaW5pdGlhbGl6ZShzdHJ1Y3Qg cHBfaHdtZ3IgKmh3bWdyKQoreworCWlmICgwICE9IGh3bWdyLT50aGVybWFsX2NvbnRyb2xsZXIu ZmFuSW5mby51Y1RhY2hvbWV0ZXJQdWxzZXNQZXJSZXZvbHV0aW9uKQorCQlQSE1fV1JJVEVfVkZQ Rl9JTkRJUkVDVF9GSUVMRChod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JFR19fU01DLAorCQkJCQkJ Q0dfVEFDSF9DVFJMLCBFREdFX1BFUl9SRVYsCisJCQkJCQlod21nci0+dGhlcm1hbF9jb250cm9s bGVyLmZhbkluZm8udWNUYWNob21ldGVyUHVsc2VzUGVyUmV2b2x1dGlvbiAtIDEpOworCisJUEhN X1dSSVRFX1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9SRUdfX1NN QywgQ0dfRkRPX0NUUkwyLCBUQUNIX1BXTV9SRVNQX1JBVEUsIDB4MjgpOworCisJcmV0dXJuIDA7 Cit9CisKKy8qKgorKiBFbmFibGUgdGhlcm1hbCBhbGVydHMgb24gdGhlIFJWNzcwIHRoZXJtYWwg Y29udHJvbGxlci4KKyoKKyogQHBhcmFtICAgIGh3bWdyIFRoZSBhZGRyZXNzIG9mIHRoZSBoYXJk d2FyZSBtYW5hZ2VyLgorKi8KK3N0YXRpYyBpbnQgdG9uZ2FfdGhlcm1hbF9lbmFibGVfYWxlcnQo c3RydWN0IHBwX2h3bWdyICpod21ncikKK3sKKwl1aW50MzJfdCBhbGVydDsKKworCWFsZXJ0ID0g UEhNX1JFQURfVkZQRl9JTkRJUkVDVF9GSUVMRChod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JFR19f U01DLCBDR19USEVSTUFMX0lOVCwgVEhFUk1fSU5UX01BU0spOworCWFsZXJ0ICY9IH4oVE9OR0Ff VEhFUk1BTF9ISUdIX0FMRVJUX01BU0sgfCBUT05HQV9USEVSTUFMX0xPV19BTEVSVF9NQVNLKTsK KwlQSE1fV1JJVEVfVkZQRl9JTkRJUkVDVF9GSUVMRChod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JF R19fU01DLCBDR19USEVSTUFMX0lOVCwgVEhFUk1fSU5UX01BU0ssIGFsZXJ0KTsKKworCS8qIHNl bmQgbWVzc2FnZSB0byBTTVUgdG8gZW5hYmxlIGludGVybmFsIHRoZXJtYWwgaW50ZXJydXB0cyAq LworCXJldHVybiAoc211bV9zZW5kX21zZ190b19zbWMoaHdtZ3ItPnNtdW1nciwgUFBTTUNfTVNH X1RoZXJtYWxfQ250bF9FbmFibGUpID09IDApID8gMCA6IC0xOworfQorCisvKioKKyogRGlzYWJs ZSB0aGVybWFsIGFsZXJ0cyBvbiB0aGUgUlY3NzAgdGhlcm1hbCBjb250cm9sbGVyLgorKiBAcGFy YW0gICAgaHdtZ3IgVGhlIGFkZHJlc3Mgb2YgdGhlIGhhcmR3YXJlIG1hbmFnZXIuCisqLworc3Rh dGljIGludCB0b25nYV90aGVybWFsX2Rpc2FibGVfYWxlcnQoc3RydWN0IHBwX2h3bWdyICpod21n cikKK3sKKwl1aW50MzJfdCBhbGVydDsKKworCWFsZXJ0ID0gUEhNX1JFQURfVkZQRl9JTkRJUkVD VF9GSUVMRChod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JFR19fU01DLCBDR19USEVSTUFMX0lOVCwg VEhFUk1fSU5UX01BU0spOworCWFsZXJ0IHw9IChUT05HQV9USEVSTUFMX0hJR0hfQUxFUlRfTUFT SyB8IFRPTkdBX1RIRVJNQUxfTE9XX0FMRVJUX01BU0spOworCVBITV9XUklURV9WRlBGX0lORElS RUNUX0ZJRUxEKGh3bWdyLT5kZXZpY2UsIENHU19JTkRfUkVHX19TTUMsIENHX1RIRVJNQUxfSU5U LCBUSEVSTV9JTlRfTUFTSywgYWxlcnQpOworCisJLyogc2VuZCBtZXNzYWdlIHRvIFNNVSB0byBk aXNhYmxlIGludGVybmFsIHRoZXJtYWwgaW50ZXJydXB0cyAqLworCXJldHVybiAoc211bV9zZW5k X21zZ190b19zbWMoaHdtZ3ItPnNtdW1nciwgUFBTTUNfTVNHX1RoZXJtYWxfQ250bF9EaXNhYmxl KSA9PSAwKSA/IDAgOiAtMTsKK30KKworLyoqCisqIFVuaW5pdGlhbGl6ZSB0aGUgdGhlcm1hbCBj b250cm9sbGVyLgorKiBDdXJyZW50bHkganVzdCBkaXNhYmxlcyBhbGVydHMuCisqIEBwYXJhbSAg ICBod21nciBUaGUgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUgbWFuYWdlci4KKyovCitpbnQgdG9u Z2FfdGhlcm1hbF9zdG9wX3RoZXJtYWxfY29udHJvbGxlcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdy KQoreworCWludCByZXN1bHQgPSB0b25nYV90aGVybWFsX2Rpc2FibGVfYWxlcnQoaHdtZ3IpOwor CisJaWYgKGh3bWdyLT50aGVybWFsX2NvbnRyb2xsZXIuZmFuSW5mby5iTm9GYW4pCisJCXRvbmdh X2Zhbl9jdHJsX3NldF9kZWZhdWx0X21vZGUoaHdtZ3IpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KworLyoqCisqIFNldCB1cCB0aGUgZmFuIHRhYmxlIHRvIGNvbnRyb2wgdGhlIGZhbiB1c2luZyB0 aGUgU01DLgorKiBAcGFyYW0gICAgaHdtZ3IgIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBsYXkg aGFyZHdhcmUgbWFuYWdlci4KKyogQHBhcmFtICAgIHBJbnB1dCB0aGUgcG9pbnRlciB0byBpbnB1 dCBkYXRhCisqIEBwYXJhbSAgICBwT3V0cHV0IHRoZSBwb2ludGVyIHRvIG91dHB1dCBkYXRhCisq IEBwYXJhbSAgICBwU3RvcmFnZSB0aGUgcG9pbnRlciB0byB0ZW1wb3Jhcnkgc3RvcmFnZQorKiBA cGFyYW0gICAgUmVzdWx0IHRoZSBsYXN0IGZhaWx1cmUgY29kZQorKiBAcmV0dXJuICAgcmVzdWx0 IGZyb20gc2V0IHRlbXBlcmF0dXJlIHJhbmdlIHJvdXRpbmUKKyovCitpbnQgdGZfdG9uZ2FfdGhl cm1hbF9zZXR1cF9mYW5fdGFibGUoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQs IHZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKwlzdHJ1Y3QgdG9u Z2FfaHdtZ3IgKmRhdGEgPSAoc3RydWN0IHRvbmdhX2h3bWdyICopKGh3bWdyLT5iYWNrZW5kKTsK KwlTTVU3Ml9EaXNjcmV0ZV9GYW5UYWJsZSBmYW5fdGFibGUgPSB7IEZET19NT0RFX0hBUkRXQVJF IH07CisJdWludDMyX3QgZHV0eTEwMDsKKwl1aW50MzJfdCB0X2RpZmYxLCB0X2RpZmYyLCBwd21f ZGlmZjEsIHB3bV9kaWZmMjsKKwl1aW50MTZfdCBmZG9fbWluLCBzbG9wZTEsIHNsb3BlMjsKKwl1 aW50MzJfdCByZWZlcmVuY2VfY2xvY2s7CisJaW50IHJlczsKKwl1aW50NjRfdCB0bXA2NDsKKwor CWlmICgwID09IGRhdGEtPmZhbl90YWJsZV9zdGFydCkgeworCQlwaG1fY2FwX3Vuc2V0KGh3bWdy LT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1BsYXRmb3JtQ2Fwc19NaWNy b2NvZGVGYW5Db250cm9sKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZHV0eTEwMCA9IFBITV9SRUFE X1ZGUEZfSU5ESVJFQ1RfRklFTEQoaHdtZ3ItPmRldmljZSwgQ0dTX0lORF9SRUdfX1NNQywgQ0df RkRPX0NUUkwxLCBGTUFYX0RVVFkxMDApOworCisJaWYgKDAgPT0gZHV0eTEwMCkgeworCQlwaG1f Y2FwX3Vuc2V0KGh3bWdyLT5wbGF0Zm9ybV9kZXNjcmlwdG9yLnBsYXRmb3JtQ2FwcywgUEhNX1Bs YXRmb3JtQ2Fwc19NaWNyb2NvZGVGYW5Db250cm9sKTsKKwkJcmV0dXJuIDA7CisJfQorCisJdG1w NjQgPSBod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVy cy51c1BXTU1pbiAqIGR1dHkxMDA7CisJZG9fZGl2KHRtcDY0LCAxMDAwMCk7CisJZmRvX21pbiA9 ICh1aW50MTZfdCl0bXA2NDsKKworCXRfZGlmZjEgPSBod21nci0+dGhlcm1hbF9jb250cm9sbGVy LmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51c1RNZWQgLSBod21nci0+dGhlcm1hbF9jb250 cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51c1RNaW47CisJdF9kaWZmMiA9IGh3 bWdyLT50aGVybWFsX2NvbnRyb2xsZXIuYWR2YW5jZUZhbkNvbnRyb2xQYXJhbWV0ZXJzLnVzVEhp Z2ggLSBod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVy cy51c1RNZWQ7CisKKwlwd21fZGlmZjEgPSBod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFu Y2VGYW5Db250cm9sUGFyYW1ldGVycy51c1BXTU1lZCAtIGh3bWdyLT50aGVybWFsX2NvbnRyb2xs ZXIuYWR2YW5jZUZhbkNvbnRyb2xQYXJhbWV0ZXJzLnVzUFdNTWluOworCXB3bV9kaWZmMiA9IGh3 bWdyLT50aGVybWFsX2NvbnRyb2xsZXIuYWR2YW5jZUZhbkNvbnRyb2xQYXJhbWV0ZXJzLnVzUFdN SGlnaCAtIGh3bWdyLT50aGVybWFsX2NvbnRyb2xsZXIuYWR2YW5jZUZhbkNvbnRyb2xQYXJhbWV0 ZXJzLnVzUFdNTWVkOworCisJc2xvcGUxID0gKHVpbnQxNl90KSgoNTAgKyAoKDE2ICogZHV0eTEw MCAqIHB3bV9kaWZmMSkgLyB0X2RpZmYxKSkgLyAxMDApOworCXNsb3BlMiA9ICh1aW50MTZfdCko KDUwICsgKCgxNiAqIGR1dHkxMDAgKiBwd21fZGlmZjIpIC8gdF9kaWZmMikpIC8gMTAwKTsKKwor CWZhbl90YWJsZS5UZW1wTWluID0gY3B1X3RvX2JlMTYoKDUwICsgaHdtZ3ItPnRoZXJtYWxfY29u dHJvbGxlci5hZHZhbmNlRmFuQ29udHJvbFBhcmFtZXRlcnMudXNUTWluKSAvIDEwMCk7CisJZmFu X3RhYmxlLlRlbXBNZWQgPSBjcHVfdG9fYmUxNigoNTAgKyBod21nci0+dGhlcm1hbF9jb250cm9s bGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51c1RNZWQpIC8gMTAwKTsKKwlmYW5fdGFi bGUuVGVtcE1heCA9IGNwdV90b19iZTE2KCg1MCArIGh3bWdyLT50aGVybWFsX2NvbnRyb2xsZXIu YWR2YW5jZUZhbkNvbnRyb2xQYXJhbWV0ZXJzLnVzVE1heCkgLyAxMDApOworCisJZmFuX3RhYmxl LlNsb3BlMSA9IGNwdV90b19iZTE2KHNsb3BlMSk7CisJZmFuX3RhYmxlLlNsb3BlMiA9IGNwdV90 b19iZTE2KHNsb3BlMik7CisKKwlmYW5fdGFibGUuRmRvTWluID0gY3B1X3RvX2JlMTYoZmRvX21p bik7CisKKwlmYW5fdGFibGUuSHlzdERvd24gPSBjcHVfdG9fYmUxNihod21nci0+dGhlcm1hbF9j b250cm9sbGVyLmFkdmFuY2VGYW5Db250cm9sUGFyYW1ldGVycy51Y1RIeXN0KTsKKworCWZhbl90 YWJsZS5IeXN0VXAgPSBjcHVfdG9fYmUxNigxKTsKKworCWZhbl90YWJsZS5IeXN0U2xvcGUgPSBj cHVfdG9fYmUxNigxKTsKKworCWZhbl90YWJsZS5UZW1wUmVzcExpbSA9IGNwdV90b19iZTE2KDUp OworCisJcmVmZXJlbmNlX2Nsb2NrID0gdG9uZ2FfZ2V0X3hjbGsoaHdtZ3IpOworCisJZmFuX3Rh YmxlLlJlZnJlc2hQZXJpb2QgPSBjcHVfdG9fYmUzMigoaHdtZ3ItPnRoZXJtYWxfY29udHJvbGxl ci5hZHZhbmNlRmFuQ29udHJvbFBhcmFtZXRlcnMudWxDeWNsZURlbGF5ICogcmVmZXJlbmNlX2Ns b2NrKSAvIDE2MDApOworCisJZmFuX3RhYmxlLkZkb01heCA9IGNwdV90b19iZTE2KCh1aW50MTZf dClkdXR5MTAwKTsKKworCWZhbl90YWJsZS5UZW1wU3JjID0gKHVpbnQ4X3QpUEhNX1JFQURfVkZQ Rl9JTkRJUkVDVF9GSUVMRChod21nci0+ZGV2aWNlLCBDR1NfSU5EX1JFR19fU01DLCBDR19NVUxU X1RIRVJNQUxfQ1RSTCwgVEVNUF9TRUwpOworCisJZmFuX3RhYmxlLkZhbkNvbnRyb2xfR0xfRmxh ZyA9IDE7CisKKwlyZXMgPSB0b25nYV9jb3B5X2J5dGVzX3RvX3NtYyhod21nci0+c211bWdyLCBk YXRhLT5mYW5fdGFibGVfc3RhcnQsICh1aW50OF90ICopJmZhbl90YWJsZSwgKHVpbnQzMl90KXNp emVvZihmYW5fdGFibGUpLCBkYXRhLT5zcmFtX2VuZCk7CisvKiBUTyBETyBGT1IgU09NRSBERVZJ Q0UgSUQgMFg2OTJiLCBzZW5kIHRoaXMgbXNnIHJldHVybiBpbnZhbGlkIGNvbW1hbmQuCisJaWYg KHJlcyA9PSAwICYmIGh3bWdyLT50aGVybWFsX2NvbnRyb2xsZXIuYWR2YW5jZUZhbkNvbnRyb2xQ YXJhbWV0ZXJzLnVjTWluaW11bVBXTUxpbWl0ICE9IDApCisJCXJlcyA9ICgwID09IHNtdW1fc2Vu ZF9tc2dfdG9fc21jX3dpdGhfcGFyYW1ldGVyKGh3bWdyLT5zbXVtZ3IsIFBQU01DX01TR19TZXRG YW5NaW5Qd20sIFwKKwkJCQkJCWh3bWdyLT50aGVybWFsX2NvbnRyb2xsZXIuYWR2YW5jZUZhbkNv bnRyb2xQYXJhbWV0ZXJzLnVjTWluaW11bVBXTUxpbWl0KSA/IDAgOiAtMSk7CisKKwlpZiAocmVz ID09IDAgJiYgaHdtZ3ItPnRoZXJtYWxfY29udHJvbGxlci5hZHZhbmNlRmFuQ29udHJvbFBhcmFt ZXRlcnMudWxNaW5GYW5TQ0xLQWNvdXN0aWNMaW1pdCAhPSAwKQorCQlyZXMgPSAoMCA9PSBzbXVt X3NlbmRfbXNnX3RvX3NtY193aXRoX3BhcmFtZXRlcihod21nci0+c211bWdyLCBQUFNNQ19NU0df U2V0RmFuU2Nsa1RhcmdldCwgXAorCQkJCQlod21nci0+dGhlcm1hbF9jb250cm9sbGVyLmFkdmFu Y2VGYW5Db250cm9sUGFyYW1ldGVycy51bE1pbkZhblNDTEtBY291c3RpY0xpbWl0KSA/IDAgOiAt MSk7CisKKwlpZiAoMCAhPSByZXMpCisJCXBobV9jYXBfdW5zZXQoaHdtZ3ItPnBsYXRmb3JtX2Rl c2NyaXB0b3IucGxhdGZvcm1DYXBzLCBQSE1fUGxhdGZvcm1DYXBzX01pY3JvY29kZUZhbkNvbnRy b2wpOworKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisqIFN0YXJ0IHRoZSBmYW4gY29udHJvbCBv biB0aGUgU01DLgorKiBAcGFyYW0gICAgaHdtZ3IgIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBs YXkgaGFyZHdhcmUgbWFuYWdlci4KKyogQHBhcmFtICAgIHBJbnB1dCB0aGUgcG9pbnRlciB0byBp bnB1dCBkYXRhCisqIEBwYXJhbSAgICBwT3V0cHV0IHRoZSBwb2ludGVyIHRvIG91dHB1dCBkYXRh CisqIEBwYXJhbSAgICBwU3RvcmFnZSB0aGUgcG9pbnRlciB0byB0ZW1wb3Jhcnkgc3RvcmFnZQor KiBAcGFyYW0gICAgUmVzdWx0IHRoZSBsYXN0IGZhaWx1cmUgY29kZQorKiBAcmV0dXJuICAgcmVz dWx0IGZyb20gc2V0IHRlbXBlcmF0dXJlIHJhbmdlIHJvdXRpbmUKKyovCitpbnQgdGZfdG9uZ2Ff dGhlcm1hbF9zdGFydF9zbWNfZmFuX2NvbnRyb2woc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9p ZCAqaW5wdXQsIHZvaWQgKm91dHB1dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKy8q IElmIHRoZSBmYW50YWJsZSBzZXR1cCBoYXMgZmFpbGVkIHdlIGNvdWxkIGhhdmUgZGlzYWJsZWQg UEhNX1BsYXRmb3JtQ2Fwc19NaWNyb2NvZGVGYW5Db250cm9sIGV2ZW4gYWZ0ZXIgdGhpcyBmdW5j dGlvbiB3YXMgaW5jbHVkZWQgaW4gdGhlIHRhYmxlLgorICogTWFrZSBzdXJlIHRoYXQgd2Ugc3Rp bGwgdGhpbmsgY29udHJvbGxpbmcgdGhlIGZhbiBpcyBPSy4KKyovCisJaWYgKHBobV9jYXBfZW5h YmxlZChod21nci0+cGxhdGZvcm1fZGVzY3JpcHRvci5wbGF0Zm9ybUNhcHMsIFBITV9QbGF0Zm9y bUNhcHNfTWljcm9jb2RlRmFuQ29udHJvbCkpIHsKKwkJdG9uZ2FfZmFuX2N0cmxfc3RhcnRfc21j X2Zhbl9jb250cm9sKGh3bWdyKTsKKwkJdG9uZ2FfZmFuX2N0cmxfc2V0X3N0YXRpY19tb2RlKGh3 bWdyLCBGRE9fUFdNX01PREVfU1RBVElDKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisq IFNldCB0ZW1wZXJhdHVyZSByYW5nZSBmb3IgaGlnaCBhbmQgbG93IGFsZXJ0cworKiBAcGFyYW0g ICAgaHdtZ3IgIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBsYXkgaGFyZHdhcmUgbWFuYWdlci4K KyogQHBhcmFtICAgIHBJbnB1dCB0aGUgcG9pbnRlciB0byBpbnB1dCBkYXRhCisqIEBwYXJhbSAg ICBwT3V0cHV0IHRoZSBwb2ludGVyIHRvIG91dHB1dCBkYXRhCisqIEBwYXJhbSAgICBwU3RvcmFn ZSB0aGUgcG9pbnRlciB0byB0ZW1wb3Jhcnkgc3RvcmFnZQorKiBAcGFyYW0gICAgUmVzdWx0IHRo ZSBsYXN0IGZhaWx1cmUgY29kZQorKiBAcmV0dXJuICAgcmVzdWx0IGZyb20gc2V0IHRlbXBlcmF0 dXJlIHJhbmdlIHJvdXRpbmUKKyovCitpbnQgdGZfdG9uZ2FfdGhlcm1hbF9zZXRfdGVtcGVyYXR1 cmVfcmFuZ2Uoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1 dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKwlzdHJ1Y3QgUFBfVGVtcGVyYXR1cmVS YW5nZSAqcmFuZ2UgPSAoc3RydWN0IFBQX1RlbXBlcmF0dXJlUmFuZ2UgKilpbnB1dDsKKworCWlm IChyYW5nZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB0b25nYV90aGVy bWFsX3NldF90ZW1wZXJhdHVyZV9yYW5nZShod21nciwgcmFuZ2UtPm1pbiwgcmFuZ2UtPm1heCk7 Cit9CisKKy8qKgorKiBQcm9ncmFtcyBvbmUtdGltZSBzZXR0aW5nIHJlZ2lzdGVycworKiBAcGFy YW0gICAgaHdtZ3IgIHRoZSBhZGRyZXNzIG9mIHRoZSBwb3dlcnBsYXkgaGFyZHdhcmUgbWFuYWdl ci4KKyogQHBhcmFtICAgIHBJbnB1dCB0aGUgcG9pbnRlciB0byBpbnB1dCBkYXRhCisqIEBwYXJh bSAgICBwT3V0cHV0IHRoZSBwb2ludGVyIHRvIG91dHB1dCBkYXRhCisqIEBwYXJhbSAgICBwU3Rv cmFnZSB0aGUgcG9pbnRlciB0byB0ZW1wb3Jhcnkgc3RvcmFnZQorKiBAcGFyYW0gICAgUmVzdWx0 IHRoZSBsYXN0IGZhaWx1cmUgY29kZQorKiBAcmV0dXJuICAgcmVzdWx0IGZyb20gaW5pdGlhbGl6 ZSB0aGVybWFsIGNvbnRyb2xsZXIgcm91dGluZQorKi8KK2ludCB0Zl90b25nYV90aGVybWFsX2lu aXRpYWxpemUoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1 dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gdG9uZ2FfdGhlcm1h bF9pbml0aWFsaXplKGh3bWdyKTsKK30KKworLyoqCisqIEVuYWJsZSBoaWdoIGFuZCBsb3cgYWxl cnRzCisqIEBwYXJhbSAgICBod21nciAgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvd2VycGxheSBoYXJk d2FyZSBtYW5hZ2VyLgorKiBAcGFyYW0gICAgcElucHV0IHRoZSBwb2ludGVyIHRvIGlucHV0IGRh dGEKKyogQHBhcmFtICAgIHBPdXRwdXQgdGhlIHBvaW50ZXIgdG8gb3V0cHV0IGRhdGEKKyogQHBh cmFtICAgIHBTdG9yYWdlIHRoZSBwb2ludGVyIHRvIHRlbXBvcmFyeSBzdG9yYWdlCisqIEBwYXJh bSAgICBSZXN1bHQgdGhlIGxhc3QgZmFpbHVyZSBjb2RlCisqIEByZXR1cm4gICByZXN1bHQgZnJv bSBlbmFibGUgYWxlcnQgcm91dGluZQorKi8KK2ludCB0Zl90b25nYV90aGVybWFsX2VuYWJsZV9h bGVydChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0LCB2 b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KQoreworCXJldHVybiB0b25nYV90aGVybWFsX2VuYWJs ZV9hbGVydChod21ncik7Cit9CisKKy8qKgorKiBEaXNhYmxlIGhpZ2ggYW5kIGxvdyBhbGVydHMK KyogQHBhcmFtICAgIGh3bWdyICB0aGUgYWRkcmVzcyBvZiB0aGUgcG93ZXJwbGF5IGhhcmR3YXJl IG1hbmFnZXIuCisqIEBwYXJhbSAgICBwSW5wdXQgdGhlIHBvaW50ZXIgdG8gaW5wdXQgZGF0YQor KiBAcGFyYW0gICAgcE91dHB1dCB0aGUgcG9pbnRlciB0byBvdXRwdXQgZGF0YQorKiBAcGFyYW0g ICAgcFN0b3JhZ2UgdGhlIHBvaW50ZXIgdG8gdGVtcG9yYXJ5IHN0b3JhZ2UKKyogQHBhcmFtICAg IFJlc3VsdCB0aGUgbGFzdCBmYWlsdXJlIGNvZGUKKyogQHJldHVybiAgIHJlc3VsdCBmcm9tIGRp c2FibGUgYWxlcnQgcm91dGluZQorKi8KK3N0YXRpYyBpbnQgdGZfdG9uZ2FfdGhlcm1hbF9kaXNh YmxlX2FsZXJ0KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlucHV0LCB2b2lkICpvdXRw dXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpCit7CisJcmV0dXJuIHRvbmdhX3RoZXJtYWxf ZGlzYWJsZV9hbGVydChod21ncik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGhtX21hc3Rlcl90YWJs ZV9pdGVtIHRvbmdhX3RoZXJtYWxfc3RhcnRfdGhlcm1hbF9jb250cm9sbGVyX21hc3Rlcl9saXN0 W10gPSB7CisJeyBOVUxMLCB0Zl90b25nYV90aGVybWFsX2luaXRpYWxpemUgfSwKKwl7IE5VTEws IHRmX3RvbmdhX3RoZXJtYWxfc2V0X3RlbXBlcmF0dXJlX3JhbmdlIH0sCisJeyBOVUxMLCB0Zl90 b25nYV90aGVybWFsX2VuYWJsZV9hbGVydCB9LAorLyogV2Ugc2hvdWxkIHJlc3RyaWN0IHBlcmZv cm1hbmNlIGxldmVscyB0byBsb3cgYmVmb3JlIHdlIGhhbHQgdGhlIFNNQy4KKyAqIE9uIHRoZSBv dGhlciBoYW5kIHdlIGFyZSBzdGlsbCBpbiBib290IHN0YXRlIHdoZW4gd2UgZG8gdGhpcyBzbyBp dCB3b3VsZCBiZSBwb2ludGxlc3MuCisgKiBJZiB0aGlzIGFzc3VtcHRpb24gY2hhbmdlcyB3ZSBo YXZlIHRvIHJldmlzaXQgdGhpcyB0YWJsZS4KKyAqLworCXsgTlVMTCwgdGZfdG9uZ2FfdGhlcm1h bF9zZXR1cF9mYW5fdGFibGV9LAorCXsgTlVMTCwgdGZfdG9uZ2FfdGhlcm1hbF9zdGFydF9zbWNf ZmFuX2NvbnRyb2x9LAorCXsgTlVMTCwgTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IHBobV9t YXN0ZXJfdGFibGVfaGVhZGVyIHRvbmdhX3RoZXJtYWxfc3RhcnRfdGhlcm1hbF9jb250cm9sbGVy X21hc3RlciA9IHsKKwkwLAorCVBITV9NYXN0ZXJUYWJsZUZsYWdfTm9uZSwKKwl0b25nYV90aGVy bWFsX3N0YXJ0X3RoZXJtYWxfY29udHJvbGxlcl9tYXN0ZXJfbGlzdAorfTsKKworc3RhdGljIHN0 cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2l0ZW0gdG9uZ2FfdGhlcm1hbF9zZXRfdGVtcGVyYXR1cmVf cmFuZ2VfbWFzdGVyX2xpc3RbXSA9IHsKKwl7IE5VTEwsIHRmX3RvbmdhX3RoZXJtYWxfZGlzYWJs ZV9hbGVydH0sCisJeyBOVUxMLCB0Zl90b25nYV90aGVybWFsX3NldF90ZW1wZXJhdHVyZV9yYW5n ZX0sCisJeyBOVUxMLCB0Zl90b25nYV90aGVybWFsX2VuYWJsZV9hbGVydH0sCisJeyBOVUxMLCBO VUxMIH0KK307CisKK3N0cnVjdCBwaG1fbWFzdGVyX3RhYmxlX2hlYWRlciB0b25nYV90aGVybWFs X3NldF90ZW1wZXJhdHVyZV9yYW5nZV9tYXN0ZXIgPSB7CisJMCwKKwlQSE1fTWFzdGVyVGFibGVG bGFnX05vbmUsCisJdG9uZ2FfdGhlcm1hbF9zZXRfdGVtcGVyYXR1cmVfcmFuZ2VfbWFzdGVyX2xp c3QKK307CisKK2ludCB0b25nYV90aGVybWFsX2N0cmxfdW5pbml0aWFsaXplX3RoZXJtYWxfY29u dHJvbGxlcihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKQoreworCWlmICghaHdtZ3ItPnRoZXJtYWxf Y29udHJvbGxlci5mYW5JbmZvLmJOb0ZhbikKKwkJdG9uZ2FfZmFuX2N0cmxfc2V0X2RlZmF1bHRf bW9kZShod21ncik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorKiBJbml0aWFsaXplcyB0aGUgdGhl cm1hbCBjb250cm9sbGVyIHJlbGF0ZWQgZnVuY3Rpb25zIGluIHRoZSBIYXJkd2FyZSBNYW5hZ2Vy IHN0cnVjdHVyZS4KKyogQHBhcmFtICAgIGh3bWdyIFRoZSBhZGRyZXNzIG9mIHRoZSBoYXJkd2Fy ZSBtYW5hZ2VyLgorKiBAZXhjZXB0aW9uIEFueSBlcnJvciBjb2RlIGZyb20gdGhlIGxvdy1sZXZl bCBjb21tdW5pY2F0aW9uLgorKi8KK2ludCBwcF90b25nYV90aGVybWFsX2luaXRpYWxpemUoc3Ry dWN0IHBwX2h3bWdyICpod21ncikKK3sKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gcGhtX2Nv bnN0cnVjdF90YWJsZShod21nciwgJnRvbmdhX3RoZXJtYWxfc2V0X3RlbXBlcmF0dXJlX3Jhbmdl X21hc3RlciwgJihod21nci0+c2V0X3RlbXBlcmF0dXJlX3JhbmdlKSk7CisKKwlpZiAoMCA9PSBy ZXN1bHQpIHsKKwkJcmVzdWx0ID0gcGhtX2NvbnN0cnVjdF90YWJsZShod21nciwKKwkJCQkJCSZ0 b25nYV90aGVybWFsX3N0YXJ0X3RoZXJtYWxfY29udHJvbGxlcl9tYXN0ZXIsCisJCQkJCQkmKGh3 bWdyLT5zdGFydF90aGVybWFsX2NvbnRyb2xsZXIpKTsKKwkJaWYgKDAgIT0gcmVzdWx0KQorCQkJ cGhtX2Rlc3Ryb3lfdGFibGUoaHdtZ3IsICYoaHdtZ3ItPnNldF90ZW1wZXJhdHVyZV9yYW5nZSkp OworCX0KKworCWlmICgwID09IHJlc3VsdCkKKwkJaHdtZ3ItPmZhbl9jdHJsX2lzX2luX2RlZmF1 bHRfbW9kZSA9IHRydWU7CisJcmV0dXJuIHJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdG9uZ2FfdGhlcm1hbC5oIGIvZHJpdmVycy9n cHUvZHJtL2FtZC9wb3dlcnBsYXkvaHdtZ3IvdG9uZ2FfdGhlcm1hbC5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjgwYTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL3Bvd2VycGxheS9od21nci90b25nYV90aGVybWFsLmgKQEAgLTAsMCArMSw2 MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQg SE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElO IFRIRSBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2lmbmRlZiBUT05HQV9USEVSTUFMX0gKKyNkZWZp bmUgVE9OR0FfVEhFUk1BTF9ICisKKyNpbmNsdWRlICJod21nci5oIgorCisjZGVmaW5lIFRPTkdB X1RIRVJNQUxfSElHSF9BTEVSVF9NQVNLICAgICAgICAgMHgxCisjZGVmaW5lIFRPTkdBX1RIRVJN QUxfTE9XX0FMRVJUX01BU0sgICAgICAgICAgMHgyCisKKyNkZWZpbmUgVE9OR0FfVEhFUk1BTF9N SU5JTVVNX1RFTVBfUkVBRElORyAgICAtMjU2CisjZGVmaW5lIFRPTkdBX1RIRVJNQUxfTUFYSU1V TV9URU1QX1JFQURJTkcgICAgMjU1CisKKyNkZWZpbmUgVE9OR0FfVEhFUk1BTF9NSU5JTVVNX0FM RVJUX1RFTVAgICAgICAwCisjZGVmaW5lIFRPTkdBX1RIRVJNQUxfTUFYSU1VTV9BTEVSVF9URU1Q ICAgICAgMjU1CisKKyNkZWZpbmUgRkRPX1BXTV9NT0RFX1NUQVRJQyAgMQorI2RlZmluZSBGRE9f UFdNX01PREVfU1RBVElDX1JQTSA1CisKKworZXh0ZXJuIGludCB0Zl90b25nYV90aGVybWFsX2lu aXRpYWxpemUoc3RydWN0IHBwX2h3bWdyICpod21nciwgdm9pZCAqaW5wdXQsIHZvaWQgKm91dHB1 dCwgdm9pZCAqc3RvcmFnZSwgaW50IHJlc3VsdCk7CitleHRlcm4gaW50IHRmX3RvbmdhX3RoZXJt YWxfc2V0X3RlbXBlcmF0dXJlX3JhbmdlKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHZvaWQgKmlu cHV0LCB2b2lkICpvdXRwdXQsIHZvaWQgKnN0b3JhZ2UsIGludCByZXN1bHQpOworZXh0ZXJuIGlu dCB0Zl90b25nYV90aGVybWFsX2VuYWJsZV9hbGVydChzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB2 b2lkICppbnB1dCwgdm9pZCAqb3V0cHV0LCB2b2lkICpzdG9yYWdlLCBpbnQgcmVzdWx0KTsKKwor ZXh0ZXJuIGludCB0b25nYV90aGVybWFsX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgcHBfaHdtZ3Ig Kmh3bWdyKTsKK2V4dGVybiBpbnQgdG9uZ2FfdGhlcm1hbF9zdG9wX3RoZXJtYWxfY29udHJvbGxl cihzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKK2V4dGVybiBpbnQgdG9uZ2FfZmFuX2N0cmxfZ2V0 X2Zhbl9zcGVlZF9pbmZvKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHN0cnVjdCBwaG1fZmFuX3Nw ZWVkX2luZm8gKmZhbl9zcGVlZF9pbmZvKTsKK2V4dGVybiBpbnQgdG9uZ2FfZmFuX2N0cmxfZ2V0 X2Zhbl9zcGVlZF9wZXJjZW50KHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90ICpzcGVl ZCk7CitleHRlcm4gaW50IHRvbmdhX2Zhbl9jdHJsX3NldF9kZWZhdWx0X21vZGUoc3RydWN0IHBw X2h3bWdyICpod21ncik7CitleHRlcm4gaW50IHRvbmdhX2Zhbl9jdHJsX3NldF9zdGF0aWNfbW9k ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyLCB1aW50MzJfdCBtb2RlKTsKK2V4dGVybiBpbnQgdG9u Z2FfZmFuX2N0cmxfc2V0X2Zhbl9zcGVlZF9wZXJjZW50KHN0cnVjdCBwcF9od21nciAqaHdtZ3Is IHVpbnQzMl90IHNwZWVkKTsKK2V4dGVybiBpbnQgdG9uZ2FfZmFuX2N0cmxfcmVzZXRfZmFuX3Nw ZWVkX3RvX2RlZmF1bHQoc3RydWN0IHBwX2h3bWdyICpod21ncik7CitleHRlcm4gaW50IHBwX3Rv bmdhX3RoZXJtYWxfaW5pdGlhbGl6ZShzdHJ1Y3QgcHBfaHdtZ3IgKmh3bWdyKTsKK2V4dGVybiBp bnQgdG9uZ2FfdGhlcm1hbF9jdHJsX3VuaW5pdGlhbGl6ZV90aGVybWFsX2NvbnRyb2xsZXIoc3Ry dWN0IHBwX2h3bWdyICpod21ncik7CitleHRlcm4gaW50IHRvbmdhX2Zhbl9jdHJsX3NldF9mYW5f c3BlZWRfcnBtKHN0cnVjdCBwcF9od21nciAqaHdtZ3IsIHVpbnQzMl90IHNwZWVkKTsKK2V4dGVy biBpbnQgdG9uZ2FfZmFuX2N0cmxfZ2V0X2Zhbl9zcGVlZF9ycG0oc3RydWN0IHBwX2h3bWdyICpo d21nciwgdWludDMyX3QgKnNwZWVkKTsKKworI2VuZGlmCisKLS0gCjEuOC4zLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==