From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagar Arun Kamble Subject: [PATCH 1/6] drm/i915: Separate GuC/HuC specific functionality from intel_uc Date: Thu, 14 Sep 2017 15:25:03 +0530 Message-ID: <1505382908-6844-2-git-send-email-sagar.a.kamble@intel.com> References: <1505382908-6844-1-git-send-email-sagar.a.kamble@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6C8BA6E9D3 for ; Thu, 14 Sep 2017 09:51:46 +0000 (UTC) In-Reply-To: <1505382908-6844-1-git-send-email-sagar.a.kamble@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogIkthbWJsZSwgU2FnYXIgQSIgPHNhZ2FyLmEua2FtYmxlQGludGVsLmNvbT4KClJlbW92 ZWQgdW5uZWNlc3NhcnkgaW50ZWxfdWMuaCBpbmNsdWRlcyBhcyBpdCBpcyBwcmVzZW50IGluIGk5 MTVfZHJ2LmguCkNyZWF0ZWQgaW50ZWxfZ3VjLmMgYW5kIGludGVsX2d1Yy5oIGZvciBwbGFjaW5n IEd1QyBzcGVjaWZpYyBjb2RlLgpDcmVhdGVkIGludGVsX2h1Yy5oIHRvIHJlZmVyIHRvIEh1QyBz cGVjaWZpYyBmdW5jdGlvbnMuCgp2MjogUHJlcGFyZWQgaW50ZWxfdWNfY29tbW9uLmguIE1vdmVk IGVuYWJsZS9kaXNhYmxlX2NvbW11bmljYXRpb24gdG8KaW50ZWxfdWMuYy4gaHVjX2F1dGggY29k ZSBkZWNsYXJhdGlvbiBhZGp1c3RlZC4KUmVzdG9yZWQgc3RhdGljIG9mIGd1Y19zZW5kX3JlZyBh bmQga2VwdCBhbG9uZyB3aXRoIG90aGVyIHNlbmQgZnVuY3Rpb25zCnMvZ3VjX2luaXRfc2VuZF9y ZWdzL2ludGVsX2d1Y19pbml0X3NlbmRfcmVncyBhbmQgbW92ZSB0aGUgY2FsbCB0bwppbnRlbF91 Y19pbml0X2h3LiBNb3ZlZCBpbnRlbF9ndWNfc2FtcGxlX2ZvcmNld2FrZSBtb3ZlZCB0byB0aGUg ZW5kCk1vdmVkIGludGVsX2d1Y19pbml0X2Vhcmx5IHRvIHRoZSB0b3AuIE1vdmVkIGd1Y19nZ3R0 X29mZnNldCBhZnRlcgpkZWZpbml0aW9uIG9mIGludGVsX2d1Yy4gQ2hhbmdlZCBpbnRlbF9ndWNf YXV0aF9odWMgcHJvdG90eXBlIHRvIGFjY2VwdApndWMgc3RydWN0IGFuZCBodWMgZmlybXdhcmUg c3RydWN0LiAoTWljaGFsIFdhamRlY3prbykKCnYzOiBSZW1vdmVkIGludGVsX3VjX2NvbW1vbi5o IHRvIGFzc29jaWF0ZSBzaW1pbGFyIGluY2x1ZGVzCmZvciBpbnRlbF9ndWMuaCBhbmQgaW50ZWxf aHVjLmggdGhyb3VnaCBpbnRlbF91Yy5oIGl0c2VsZi4KVXBkYXRlZCBjb21taXQgbWVzc2FnZS4g KE1pY2hhbCBXaW5pYXJza2kpCkNoYW5nZWQgZGVmaW5pdGlvbiBvZiBpbnRlbF9ndWNfYXV0aF9o dWMgdG8gcGFzcyBzdHJ1Y3QgaW50ZWxfaHVjIGluCm9yZGVyIHRvIHNlcGFyYXRlIHRoZSB3YWl0 IGZvciBhdXRoZW50aWNhdGlvbiBzdGF0dXMgd2hpY2ggaXMgbm93IHByZXBhcmVkCmFzIHNlcGFy YXRlIGZ1bmN0aW9uIGludGVsX2h1Y19jaGVja19hdXRoX3N0YXR1cy4KVXBkYXRlZCBkZWZpbml0 aW9uIG9mIGludGVsX2d1Y19zdXNwZW5kL3Jlc3VtZSAgdG8gdGFrZSBzdHJ1Y3QgaW50ZWxfZ3Vj CmFzIHBhcmFtZXRlci4gKE1pY2hhbCBXYWpkZWN6a28pCmludGVsX2d1Y19zdXNwZW5kIGFuZCBp bnRlbF9ndWNfcmVzdW1lIGFyZSBtb3ZlZCB0byBpbnRlbF9ndWMuYyBpbiB0aGUKdXBjb21pbmcg cGF0Y2hlcy4gTm90IHN1cmUgaWYgd2Ugc2hvdWxkIG1vdmUgaW50ZWxfZ3VjX2FsbG9jYXRlX3Zt YSBhbHNvCnRoZXJlLgoKQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVr PgpDYzogTWljaGFsIFdhamRlY3prbyA8bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+CkNjOiBE YW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29tPgpD YzogTWljaGHFgiBXaW5pYXJza2kgPG1pY2hhbC53aW5pYXJza2lAaW50ZWwuY29tPgpTaWduZWQt b2ZmLWJ5OiBTYWdhciBBcnVuIEthbWJsZSA8c2FnYXIuYS5rYW1ibGVAaW50ZWwuY29tPgotLS0K IGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICB8ICAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgICAgfCAgIDcgKy0KIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2dlbS5jICAgICAgICAgICAgfCAgIDIgKy0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ3VjX3N1Ym1pc3Npb24uYyB8ICAxMSArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZ3VjLmMgICAgICAgICAgIHwgMTgzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuaCAgICAgICAgICAgfCAxNzQgKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9h ZGVyLmMgICAgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMgICAgICAg ICAgIHwgIDU2ICsrKy0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmggICAg ICAgICAgIHwgIDQyICsrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgICAg ICAgICAgICB8IDEyOCArLS0tLS0tLS0tLS0tLS0tLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfdWMuaCAgICAgICAgICAgIHwgMTUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxMiBm aWxlcyBjaGFuZ2VkLCA0MzEgaW5zZXJ0aW9ucygrKSwgMzI2IGRlbGV0aW9ucygtKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9odWMuaAoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUK aW5kZXggMWNiODA1OS4uZTEzZmMxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKQEAgLTU5LDYgKzU5 LDcgQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5vIFwKIAogIyBnZW5lcmFsLXB1cnBvc2Ug bWljcm9jb250cm9sbGVyIChHdUMpIHN1cHBvcnQKIGk5MTUteSArPSBpbnRlbF91Yy5vIFwKKwkg IGludGVsX2d1Yy5vIFwKIAkgIGludGVsX2d1Y19jdC5vIFwKIAkgIGludGVsX2d1Y19sb2cubyBc CiAJICBpbnRlbF9ndWNfbG9hZGVyLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNWMx MTFlYS4uYjgyNTAyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC01MCw3ICs1MCw2IEBA CiAjaW5jbHVkZSAiaTkxNV90cmFjZS5oIgogI2luY2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1 ZGUgImludGVsX2Rydi5oIgotI2luY2x1ZGUgImludGVsX3VjLmgiCiAKIHN0YXRpYyBzdHJ1Y3Qg ZHJtX2RyaXZlciBkcml2ZXI7CiAKQEAgLTE2OTEsNyArMTY5MCw3IEBAIHN0YXRpYyBpbnQgaTkx NV9kcm1fcmVzdW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiAJfQogCW11dGV4X3VubG9jaygm ZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JaW50ZWxfZ3VjX3Jlc3VtZShkZXZfcHJpdik7CisJaW50 ZWxfZ3VjX3Jlc3VtZSgmZGV2X3ByaXYtPmd1Yyk7CiAKIAlpbnRlbF9tb2Rlc2V0X2luaXRfaHco ZGV2KTsKIApAQCAtMjQ5Myw3ICsyNDkyLDcgQEAgc3RhdGljIGludCBpbnRlbF9ydW50aW1lX3N1 c3BlbmQoc3RydWN0IGRldmljZSAqa2RldikKIAkgKi8KIAlpOTE1X2dlbV9ydW50aW1lX3N1c3Bl bmQoZGV2X3ByaXYpOwogCi0JaW50ZWxfZ3VjX3N1c3BlbmQoZGV2X3ByaXYpOworCWludGVsX2d1 Y19zdXNwZW5kKCZkZXZfcHJpdi0+Z3VjKTsKIAogCWludGVsX3J1bnRpbWVfcG1fZGlzYWJsZV9p bnRlcnJ1cHRzKGRldl9wcml2KTsKIApAQCAtMjU3OCw3ICsyNTc3LDcgQEAgc3RhdGljIGludCBp bnRlbF9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICprZGV2KQogCWlmIChpbnRlbF91bmNv cmVfdW5jbGFpbWVkX21taW8oZGV2X3ByaXYpKQogCQlEUk1fREVCVUdfRFJJVkVSKCJVbmNsYWlt ZWQgYWNjZXNzIGR1cmluZyBzdXNwZW5kLCBiaW9zP1xuIik7CiAKLQlpbnRlbF9ndWNfcmVzdW1l KGRldl9wcml2KTsKKwlpbnRlbF9ndWNfcmVzdW1lKCZkZXZfcHJpdi0+Z3VjKTsKIAogCWlmIChJ U19HRU45X0xQKGRldl9wcml2KSkgewogCQlieHRfZGlzYWJsZV9kYzkoZGV2X3ByaXYpOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggMTEzMmZhMS4uNDZmMTc5MSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCkBAIC01OSw2ICs1OSw4IEBACiAjaW5jbHVkZSAiaW50ZWxfYmlvcy5oIgogI2lu Y2x1ZGUgImludGVsX2RwbGxfbWdyLmgiCiAjaW5jbHVkZSAiaW50ZWxfdWMuaCIKKyNpbmNsdWRl ICJpbnRlbF9ndWMuaCIKKyNpbmNsdWRlICJpbnRlbF9odWMuaCIKICNpbmNsdWRlICJpbnRlbF9s cmMuaCIKICNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCmluZGV4IGY0NDU1ODcuLmViMjBlNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAt NDU3NSw3ICs0NTc1LDcgQEAgaW50IGk5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogCWk5MTVfZ2VtX2NvbnRleHRzX2xvc3QoZGV2X3ByaXYpOwogCW11 dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JaW50ZWxfZ3VjX3N1c3BlbmQoZGV2 X3ByaXYpOworCWludGVsX2d1Y19zdXNwZW5kKCZkZXZfcHJpdi0+Z3VjKTsKIAogCWNhbmNlbF9k ZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPmdwdV9lcnJvci5oYW5nY2hlY2tfd29yayk7CiAJ Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXZfcHJpdi0+Z3QucmV0aXJlX3dvcmspOwpkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndWNfc3VibWlzc2lvbi5jCmluZGV4IDNmOWQyMjcuLmM5 ODM4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3VjX3N1Ym1pc3Np b24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d1Y19zdWJtaXNzaW9uLmMKQEAg LTIzLDcgKzIzLDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CiAjaW5jbHVk ZSAiaTkxNV9kcnYuaCIKLSNpbmNsdWRlICJpbnRlbF91Yy5oIgogCiAjaW5jbHVkZSA8dHJhY2Uv ZXZlbnRzL2RtYV9mZW5jZS5oPgogCkBAIC0xMjA4LDExICsxMjA3LDEwIEBAIHZvaWQgaTkxNV9n dWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK IAogLyoqCiAgKiBpbnRlbF9ndWNfc3VzcGVuZCgpIC0gbm90aWZ5IEd1QyBlbnRlcmluZyBzdXNw ZW5kIHN0YXRlCi0gKiBAZGV2X3ByaXY6CWk5MTUgZGV2aWNlIHByaXZhdGUKICAqLwotaW50IGlu dGVsX2d1Y19zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK2ludCBp bnRlbF9ndWNfc3VzcGVuZChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7Ci0Jc3RydWN0IGludGVs X2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4 OwogCXUzMiBkYXRhWzNdOwogCkBAIC0xMjM0LDExICsxMjMyLDEwIEBAIGludCBpbnRlbF9ndWNf c3VzcGVuZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIC8qKgogICogaW50 ZWxfZ3VjX3Jlc3VtZSgpIC0gbm90aWZ5IEd1QyByZXN1bWluZyBmcm9tIHN1c3BlbmQgc3RhdGUK LSAqIEBkZXZfcHJpdjoJaTkxNSBkZXZpY2UgcHJpdmF0ZQogICovCi1pbnQgaW50ZWxfZ3VjX3Jl c3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCitpbnQgaW50ZWxfZ3VjX3Jl c3VtZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCiB7Ci0Jc3RydWN0IGludGVsX2d1YyAqZ3VjID0g JmRldl9wcml2LT5ndWM7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3Vj X3RvX2k5MTUoZ3VjKTsKIAlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4OwogCXUzMiBkYXRh WzNdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMuYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjU1NTllMDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9ndWMuYwpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE3 IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhp cyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3 YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklE RUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICog SU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENP UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVS CisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNP RlRXQVJFLgorICoKKyAqLworCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKworaW50IGludGVsX2d1 Y19zZW5kX25vcChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIg bGVuKQoreworCVdBUk4oMSwgIlVuZXhwZWN0ZWQgc2VuZDogYWN0aW9uPSUjeFxuIiwgKmFjdGlv bik7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIGdlbjhfZ3VjX3JhaXNlX2ly cShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKworCUk5MTVfV1JJVEUoR1VDX1NFTkRfSU5URVJS VVBULCBHVUNfU0VORF9UUklHR0VSKTsKK30KKwordm9pZCBpbnRlbF9ndWNfaW5pdF9lYXJseShz dHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJaW50ZWxfZ3VjX2N0X2luaXRfZWFybHkoJmd1Yy0+ Y3QpOworCisJbXV0ZXhfaW5pdCgmZ3VjLT5zZW5kX211dGV4KTsKKwlndWMtPnNlbmQgPSBpbnRl bF9ndWNfc2VuZF9ub3A7CisJZ3VjLT5ub3RpZnkgPSBnZW44X2d1Y19yYWlzZV9pcnE7Cit9CisK K3N0YXRpYyBpbmxpbmUgaTkxNV9yZWdfdCBndWNfc2VuZF9yZWcoc3RydWN0IGludGVsX2d1YyAq Z3VjLCB1MzIgaSkKK3sKKwlHRU1fQlVHX09OKCFndWMtPnNlbmRfcmVncy5iYXNlKTsKKwlHRU1f QlVHX09OKCFndWMtPnNlbmRfcmVncy5jb3VudCk7CisJR0VNX0JVR19PTihpID49IGd1Yy0+c2Vu ZF9yZWdzLmNvdW50KTsKKworCXJldHVybiBfTU1JTyhndWMtPnNlbmRfcmVncy5iYXNlICsgNCAq IGkpOworfQorCit2b2lkIGludGVsX2d1Y19pbml0X3NlbmRfcmVncyhzdHJ1Y3QgaW50ZWxfZ3Vj ICpndWMpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5 MTUoZ3VjKTsKKwllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnMgPSAwOworCXVuc2ln bmVkIGludCBpOworCisJZ3VjLT5zZW5kX3JlZ3MuYmFzZSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0 KFNPRlRfU0NSQVRDSCgwKSk7CisJZ3VjLT5zZW5kX3JlZ3MuY291bnQgPSBTT0ZUX1NDUkFUQ0hf Q09VTlQgLSAxOworCisJZm9yIChpID0gMDsgaSA8IGd1Yy0+c2VuZF9yZWdzLmNvdW50OyBpKysp IHsKKwkJZndfZG9tYWlucyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcoZGV2X3By aXYsCisJCQkJCWd1Y19zZW5kX3JlZyhndWMsIGkpLAorCQkJCQlGV19SRUdfUkVBRCB8IEZXX1JF R19XUklURSk7CisJfQorCWd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMgPSBmd19kb21haW5zOwor fQorCisvKgorICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBNTUlPIGJhc2VkIGhvc3Qg dG8gR3VDIGludGVyZmFjZS4KKyAqLworaW50IGludGVsX2d1Y19zZW5kX21taW8oc3RydWN0IGlu dGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOworCXUzMiBzdGF0dXM7 CisJaW50IGk7CisJaW50IHJldDsKKworCUdFTV9CVUdfT04oIWxlbik7CisJR0VNX0JVR19PTihs ZW4gPiBndWMtPnNlbmRfcmVncy5jb3VudCk7CisKKwkvKiBJZiBDVCBpcyBhdmFpbGFibGUsIHdl IGV4cGVjdCB0byB1c2UgTU1JTyBvbmx5IGR1cmluZyBpbml0L2ZpbmkgKi8KKwlHRU1fQlVHX09O KEhBU19HVUNfQ1QoZGV2X3ByaXYpICYmCisJCSphY3Rpb24gIT0gSU5URUxfR1VDX0FDVElPTl9S RUdJU1RFUl9DT01NQU5EX1RSQU5TUE9SVF9CVUZGRVIgJiYKKwkJKmFjdGlvbiAhPSBJTlRFTF9H VUNfQUNUSU9OX0RFUkVHSVNURVJfQ09NTUFORF9UUkFOU1BPUlRfQlVGRkVSKTsKKworCW11dGV4 X2xvY2soJmd1Yy0+c2VuZF9tdXRleCk7CisJaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2 X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOworCisJZm9yIChpID0gMDsgaSA8IGxl bjsgaSsrKQorCQlJOTE1X1dSSVRFKGd1Y19zZW5kX3JlZyhndWMsIGkpLCBhY3Rpb25baV0pOwor CisJUE9TVElOR19SRUFEKGd1Y19zZW5kX3JlZyhndWMsIGkgLSAxKSk7CisKKwlpbnRlbF9ndWNf bm90aWZ5KGd1Yyk7CisKKwkvKgorCSAqIE5vIEd1QyBjb21tYW5kIHNob3VsZCBldmVyIHRha2Ug bG9uZ2VyIHRoYW4gMTBtcy4KKwkgKiBGYXN0IGNvbW1hbmRzIHNob3VsZCBzdGlsbCBjb21wbGV0 ZSBpbiAxMHVzLgorCSAqLworCXJldCA9IF9faW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXJfZncoZGV2 X3ByaXYsCisJCQkJCSAgIGd1Y19zZW5kX3JlZyhndWMsIDApLAorCQkJCQkgICBJTlRFTF9HVUNf UkVDVl9NQVNLLAorCQkJCQkgICBJTlRFTF9HVUNfUkVDVl9NQVNLLAorCQkJCQkgICAxMCwgMTAs ICZzdGF0dXMpOworCWlmIChzdGF0dXMgIT0gSU5URUxfR1VDX1NUQVRVU19TVUNDRVNTKSB7CisJ CS8qCisJCSAqIEVpdGhlciB0aGUgR3VDIGV4cGxpY2l0bHkgcmV0dXJuZWQgYW4gZXJyb3IgKHdo aWNoCisJCSAqIHdlIGNvbnZlcnQgdG8gLUVJTyBoZXJlKSBvciBubyByZXNwb25zZSBhdCBhbGwg d2FzCisJCSAqIHJlY2VpdmVkIHdpdGhpbiB0aGUgdGltZW91dCBsaW1pdCAoLUVUSU1FRE9VVCkK KwkJICovCisJCWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKKwkJCXJldCA9IC1FSU87CisKKwkJRFJN X1dBUk4oIklOVEVMX0dVQ19TRU5EOiBBY3Rpb24gMHglWCBmYWlsZWQ7IgorCQkJICIgcmV0PSVk IHN0YXR1cz0weCUwOFggcmVzcG9uc2U9MHglMDhYXG4iLAorCQkJIGFjdGlvblswXSwgcmV0LCBz dGF0dXMsIEk5MTVfUkVBRChTT0ZUX1NDUkFUQ0goMTUpKSk7CisJfQorCisJaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9wdXQoZGV2X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOworCW11 dGV4X3VubG9jaygmZ3VjLT5zZW5kX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBp bnRlbF9ndWNfc2FtcGxlX2ZvcmNld2FrZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCit7CisJc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKKwl1MzIg YWN0aW9uWzJdOworCisJYWN0aW9uWzBdID0gSU5URUxfR1VDX0FDVElPTl9TQU1QTEVfRk9SQ0VX QUtFOworCS8qIFdhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmc6c2tsLGJ4dCAqLworCWlmICgh aW50ZWxfZW5hYmxlX3JjNigpIHx8IE5FRURTX1dhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmco ZGV2X3ByaXYpKQorCQlhY3Rpb25bMV0gPSAwOworCWVsc2UKKwkJLyogYml0IDAgYW5kIDEgYXJl IGZvciBSZW5kZXIgYW5kIE1lZGlhIGRvbWFpbiBzZXBhcmF0ZWx5ICovCisJCWFjdGlvblsxXSA9 IEdVQ19GT1JDRVdBS0VfUkVOREVSIHwgR1VDX0ZPUkNFV0FLRV9NRURJQTsKKworCXJldHVybiBp bnRlbF9ndWNfc2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24pKTsKK30KKworLyoq CisgKiBpbnRlbF9ndWNfYXV0aF9odWMoKSAtIGF1dGhlbnRpY2F0ZSBIdUMKKyAqCisgKiBUcmln Z2VycyBhIEh1QyBmdyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IHRvIHRoZSBHdUMgdmlhIGludGVs X2d1Y19hY3Rpb25fCisgKiBhdXRoZW50aWNhdGVfaHVjIGludGVyZmFjZS4KKyAqLwordm9pZCBp bnRlbF9ndWNfYXV0aF9odWMoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBzdHJ1Y3QgaW50ZWxfaHVj ICpodWMpCit7CisJc3RydWN0IGludGVsX3VjX2Z3ICpodWNfZncgPSAmaHVjLT5mdzsKKwlzdHJ1 Y3QgaTkxNV92bWEgKnZtYTsKKwlpbnQgcmV0OworCXUzMiBkYXRhWzJdOworCisJdm1hID0gaTkx NV9nZW1fb2JqZWN0X2dndHRfcGluKGh1Y19mdy0+b2JqLCBOVUxMLCAwLCAwLAorCQkJCVBJTl9P RkZTRVRfQklBUyB8IEdVQ19XT1BDTV9UT1ApOworCWlmIChJU19FUlIodm1hKSkgeworCQlEUk1f RVJST1IoImZhaWxlZCB0byBwaW4gaHVjIGZ3IG9iamVjdCAlZFxuIiwKKwkJCQkoaW50KVBUUl9F UlIodm1hKSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTcGVjaWZ5IGF1dGggYWN0aW9uIGFuZCB3 aGVyZSBwdWJsaWMgc2lnbmF0dXJlIGlzLiAqLworCWRhdGFbMF0gPSBJTlRFTF9HVUNfQUNUSU9O X0FVVEhFTlRJQ0FURV9IVUM7CisJZGF0YVsxXSA9IGd1Y19nZ3R0X29mZnNldCh2bWEpICsgaHVj X2Z3LT5yc2Ffb2Zmc2V0OworCisJcmV0ID0gaW50ZWxfZ3VjX3NlbmQoZ3VjLCBkYXRhLCBBUlJB WV9TSVpFKGRhdGEpKTsKKwlpZiAocmV0KSB7CisJCURSTV9FUlJPUigiSHVDOiBHdUMgZGlkIG5v dCBhY2sgQXV0aCByZXF1ZXN0ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQg PSBpbnRlbF9odWNfY2hlY2tfYXV0aF9zdGF0dXMoaHVjKTsKKworb3V0OgorCWk5MTVfdm1hX3Vu cGluKHZtYSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWMu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjlhMjgyYWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF9ndWMuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCDC qSAyMDE3IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh bnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkg b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUg IlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0 aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwg Y29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAq IGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29u cyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cisg KiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JT IE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S IE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4g VEhFIFNPRlRXQVJFLgorICoKKyAqLworI2lmbmRlZiBfSU5URUxfR1VDX0hfCisjZGVmaW5lIF9J TlRFTF9HVUNfSF8KKworI2luY2x1ZGUgImludGVsX3VjLmgiCisjaW5jbHVkZSAiaW50ZWxfaHVj LmgiCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBwcmltYXJpbHkgZGVzY3JpYmVzIHRoZSBHRU0g b2JqZWN0IHNoYXJlZCB3aXRoIHRoZSBHdUMuCisgKiBUaGUgc3BlY3Mgc29tZXRpbWVzIHJlZmVy IHRvIHRoaXMgb2JqZWN0IGFzIGEgIkd1QyBjb250ZXh0IiwgYnV0IHdlIHVzZQorICogdGhlIHRl cm0gImNsaWVudCIgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggaGFyZHdhcmUgY29udGV4dHMuIFRo aXMKKyAqIEdFTSBvYmplY3QgaXMgaGVsZCBmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiBvdXIg aW50ZXJhY3Rpb24gd2l0aAorICogdGhlIEd1QywgYmVpbmcgYWxsb2NhdGVkIGJlZm9yZSB0aGUg R3VDIGlzIGxvYWRlZCB3aXRoIGl0cyBmaXJtd2FyZS4KKyAqIEJlY2F1c2UgdGhlcmUncyBubyB3 YXkgdG8gdXBkYXRlIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhlIEd1QyBhZnRlcgorICogaW5pdGlh bGlzYXRpb24sIHRoZSBzaGFyZWQgb2JqZWN0IG11c3Qgc3RheSBwaW5uZWQgaW50byB0aGUgR0dU VCBhcworICogbG9uZyBhcyB0aGUgR3VDIGlzIGluIHVzZS4gV2UgYWxzbyBrZWVwIHRoZSBmaXJz dCBwYWdlIChvbmx5KSBtYXBwZWQKKyAqIGludG8ga2VybmVsIGFkZHJlc3Mgc3BhY2UsIGFzIGl0 IGluY2x1ZGVzIHNoYXJlZCBkYXRhIHRoYXQgbXVzdCBiZQorICogdXBkYXRlZCBvbiBldmVyeSBy ZXF1ZXN0IHN1Ym1pc3Npb24uCisgKgorICogVGhlIHNpbmdsZSBHRU0gb2JqZWN0IGRlc2NyaWJl ZCBoZXJlIGlzIGFjdHVhbGx5IG1hZGUgdXAgb2Ygc2V2ZXJhbAorICogc2VwYXJhdGUgYXJlYXMs IGFzIGZhciBhcyB0aGUgR3VDIGlzIGNvbmNlcm5lZC4gVGhlIGZpcnN0IHBhZ2UgKGtlcHQKKyAq IGttYXAnZCkgaW5jbHVkZXMgdGhlICJwcm9jZXNzIGRlc2NyaXB0b3IiIHdoaWNoIGhvbGRzIHNl cXVlbmNlIGRhdGEgZm9yCisgKiB0aGUgZG9vcmJlbGwsIGFuZCBvbmUgY2FjaGVsaW5lIHdoaWNo IGFjdHVhbGx5ICppcyogdGhlIGRvb3JiZWxsOyBhCisgKiB3cml0ZSB0byB0aGlzIHdpbGwgInJp bmcgdGhlIGRvb3JiZWxsIiAoaS5lLiBzZW5kIGFuIGludGVycnVwdCB0byB0aGUKKyAqIEd1Qyku IFRoZSBzdWJzZXF1ZW50ICBwYWdlcyBvZiB0aGUgY2xpZW50IG9iamVjdCBjb25zdGl0dXRlIHRo ZSB3b3JrCisgKiBxdWV1ZSAoYSBjaXJjdWxhciBhcnJheSBvZiB3b3JrIGl0ZW1zKSwgYWdhaW4g ZGVzY3JpYmVkIGluIHRoZSBwcm9jZXNzCisgKiBkZXNjcmlwdG9yLiBXb3JrIHF1ZXVlIHBhZ2Vz IGFyZSBtYXBwZWQgbW9tZW50YXJpbHkgYXMgcmVxdWlyZWQuCisgKi8KK3N0cnVjdCBpOTE1X2d1 Y19jbGllbnQgeworCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOworCXZvaWQgKnZhZGRyOworCXN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpvd25lcjsKKwlzdHJ1Y3QgaW50ZWxfZ3VjICpndWM7CisKKwl1 aW50MzJfdCBlbmdpbmVzOwkJLyogYml0bWFwIG9mIChob3N0KSBlbmdpbmUgaWRzCSovCisJdWlu dDMyX3QgcHJpb3JpdHk7CisJdTMyIHN0YWdlX2lkOworCXVpbnQzMl90IHByb2NfZGVzY19vZmZz ZXQ7CisKKwl1MTYgZG9vcmJlbGxfaWQ7CisJdW5zaWduZWQgbG9uZyBkb29yYmVsbF9vZmZzZXQ7 CisKKwlzcGlubG9ja190IHdxX2xvY2s7CisJLyogUGVyLWVuZ2luZSBjb3VudHMgb2YgR3VDIHN1 Ym1pc3Npb25zICovCisJdWludDY0X3Qgc3VibWlzc2lvbnNbSTkxNV9OVU1fRU5HSU5FU107Cit9 OworCitzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyB7CisJdWludDMyX3QgZmxhZ3M7CisJc3RydWN0IGk5 MTVfdm1hICp2bWE7CisJLyogVGhlIHJ1bnRpbWUgc3R1ZmYgZ2V0cyBjcmVhdGVkIG9ubHkgd2hl biBHdUMgbG9nZ2luZyBnZXRzIGVuYWJsZWQgKi8KKwlzdHJ1Y3QgeworCQl2b2lkICpidWZfYWRk cjsKKwkJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZsdXNoX3dxOworCQlzdHJ1Y3Qgd29ya19z dHJ1Y3QgZmx1c2hfd29yazsKKwkJc3RydWN0IHJjaGFuICpyZWxheV9jaGFuOworCX0gcnVudGlt ZTsKKwkvKiBsb2dnaW5nIHJlbGF0ZWQgc3RhdHMgKi8KKwl1MzIgY2FwdHVyZV9taXNzX2NvdW50 OworCXUzMiBmbHVzaF9pbnRlcnJ1cHRfY291bnQ7CisJdTMyIHByZXZfb3ZlcmZsb3dfY291bnRb R1VDX01BWF9MT0dfQlVGRkVSXTsKKwl1MzIgdG90YWxfb3ZlcmZsb3dfY291bnRbR1VDX01BWF9M T0dfQlVGRkVSXTsKKwl1MzIgZmx1c2hfY291bnRbR1VDX01BWF9MT0dfQlVGRkVSXTsKK307CisK K3N0cnVjdCBpbnRlbF9ndWMgeworCXN0cnVjdCBpbnRlbF91Y19mdyBmdzsKKwlzdHJ1Y3QgaW50 ZWxfZ3VjX2xvZyBsb2c7CisJc3RydWN0IGludGVsX2d1Y19jdCBjdDsKKworCS8qIExvZyBzbmFw c2hvdCBpZiBHdUMgZXJyb3JzIGR1cmluZyBsb2FkICovCisJc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKmxvYWRfZXJyX2xvZzsKKworCS8qIGludGVsX2d1Y19yZWN2IGludGVycnVwdCByZWxh dGVkIHN0YXRlICovCisJYm9vbCBpbnRlcnJ1cHRzX2VuYWJsZWQ7CisKKwlzdHJ1Y3QgaTkxNV92 bWEgKmFkc192bWE7CisJc3RydWN0IGk5MTVfdm1hICpzdGFnZV9kZXNjX3Bvb2w7CisJdm9pZCAq c3RhZ2VfZGVzY19wb29sX3ZhZGRyOworCXN0cnVjdCBpZGEgc3RhZ2VfaWRzOworCisJc3RydWN0 IGk5MTVfZ3VjX2NsaWVudCAqZXhlY2J1Zl9jbGllbnQ7CisKKwlERUNMQVJFX0JJVE1BUChkb29y YmVsbF9iaXRtYXAsIEdVQ19OVU1fRE9PUkJFTExTKTsKKwl1aW50MzJfdCBkYl9jYWNoZWxpbmU7 CQkvKiBDeWNsaWMgY291bnRlciBtb2QgcGFnZXNpemUJKi8KKworCS8qIEd1QydzIEZXIHNwZWNp ZmljIHJlZ2lzdGVycyB1c2VkIGluIE1NSU8gc2VuZCAqLworCXN0cnVjdCB7CisJCXUzMiBiYXNl OworCQl1bnNpZ25lZCBpbnQgY291bnQ7CisJCWVudW0gZm9yY2V3YWtlX2RvbWFpbnMgZndfZG9t YWluczsKKwl9IHNlbmRfcmVnczsKKworCS8qIFRvIHNlcmlhbGl6ZSB0aGUgaW50ZWxfZ3VjX3Nl bmQgYWN0aW9ucyAqLworCXN0cnVjdCBtdXRleCBzZW5kX211dGV4OworCisJLyogR3VDJ3MgRlcg c3BlY2lmaWMgc2VuZCBmdW5jdGlvbiAqLworCWludCAoKnNlbmQpKHN0cnVjdCBpbnRlbF9ndWMg Kmd1YywgY29uc3QgdTMyICpkYXRhLCB1MzIgbGVuKTsKKworCS8qIEd1QydzIEZXIHNwZWNpZmlj IG5vdGlmeSBmdW5jdGlvbiAqLworCXZvaWQgKCpub3RpZnkpKHN0cnVjdCBpbnRlbF9ndWMgKmd1 Yyk7Cit9OworCitzdGF0aWMgaW5saW5lIGludCBpbnRlbF9ndWNfc2VuZChzdHJ1Y3QgaW50ZWxf Z3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLAorCQkJCSB1MzIgbGVuKQoreworCXJldHVybiBn dWMtPnNlbmQoZ3VjLCBhY3Rpb24sIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRl bF9ndWNfbm90aWZ5KHN0cnVjdCBpbnRlbF9ndWMgKmd1YykKK3sKKwlndWMtPm5vdGlmeShndWMp OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBndWNfZ2d0dF9vZmZzZXQoc3RydWN0IGk5MTVfdm1h ICp2bWEpCit7CisJdTMyIG9mZnNldCA9IGk5MTVfZ2d0dF9vZmZzZXQodm1hKTsKKwlHRU1fQlVH X09OKG9mZnNldCA8IEdVQ19XT1BDTV9UT1ApOworCUdFTV9CVUdfT04ocmFuZ2Vfb3ZlcmZsb3dz X3QodTY0LCBvZmZzZXQsIHZtYS0+c2l6ZSwgR1VDX0dHVFRfVE9QKSk7CisJcmV0dXJuIG9mZnNl dDsKK30KKworLyogaW50ZWxfZ3VjLmMgKi8KK3ZvaWQgaW50ZWxfZ3VjX2luaXRfZWFybHkoc3Ry dWN0IGludGVsX2d1YyAqZ3VjKTsKK2ludCBpbnRlbF9ndWNfc2FtcGxlX2ZvcmNld2FrZShzdHJ1 Y3QgaW50ZWxfZ3VjICpndWMpOwordm9pZCBpbnRlbF9ndWNfaW5pdF9zZW5kX3JlZ3Moc3RydWN0 IGludGVsX2d1YyAqZ3VjKTsKK2ludCBpbnRlbF9ndWNfc2VuZF9ub3Aoc3RydWN0IGludGVsX2d1 YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbik7CitpbnQgaW50ZWxfZ3VjX3NlbmRf bW1pbyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVuKTsK K3ZvaWQgaW50ZWxfZ3VjX2F1dGhfaHVjKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yywgc3RydWN0IGlu dGVsX2h1YyAqaHVjKTsKKworLyogaW50ZWxfZ3VjX2xvYWRlci5jICovCitpbnQgaW50ZWxfZ3Vj X3NlbGVjdF9mdyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOworaW50IGludGVsX2d1Y19pbml0X2h3 KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Cit1MzIgaW50ZWxfZ3VjX3dvcGNtX3NpemUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworLyogaTkxNV9ndWNfc3VibWlzc2lvbi5j ICovCitpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7CitpbnQgaTkxNV9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2KTsKK3ZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxl KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGk5MTVfZ3VjX3N1Ym1p c3Npb25fZmluaShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworc3RydWN0IGk5 MTVfdm1hICppbnRlbF9ndWNfYWxsb2NhdGVfdm1hKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMy IHNpemUpOworaW50IGludGVsX2d1Y19zdXNwZW5kKHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7Citp bnQgaW50ZWxfZ3VjX3Jlc3VtZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpOworCisvKiBpbnRlbF9n dWNfbG9nLmMgKi8KK2ludCBpbnRlbF9ndWNfbG9nX2NyZWF0ZShzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMpOwordm9pZCBpbnRlbF9ndWNfbG9nX2Rlc3Ryb3koc3RydWN0IGludGVsX2d1YyAqZ3VjKTsK K2ludCBpOTE1X2d1Y19sb2dfY29udHJvbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHU2NCBjb250cm9sX3ZhbCk7Cit2b2lkIGk5MTVfZ3VjX2xvZ19yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBpOTE1X2d1Y19sb2dfdW5yZWdpc3Rl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCisjZW5kaWYKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2d1Y19sb2FkZXIuYwppbmRleCA4YjBhZTdmLi44MWUwM2E2IDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfbG9hZGVyLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX2xvYWRlci5jCkBAIC0yNyw3ICsyNyw2IEBACiAg KiAgICBBbGV4IERhaSA8eXUuZGFpQGludGVsLmNvbT4KICAqLwogI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCi0jaW5jbHVkZSAiaW50ZWxfdWMuaCIKIAogLyoqCiAgKiBET0M6IEd1Qy1zcGVjaWZpYyBm aXJtd2FyZSBsb2FkZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1 Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKaW5kZXggNjE0NWZhMC4uZjQw MDg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaHVjLmMKQEAgLTIxLDkgKzIxLDcgQEAKICAqIElO IFRIRSBTT0ZUV0FSRS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiCi0jaW5jbHVkZSAiaW50ZWxfdWMuaCIKIAogLyoqCiAgKiBET0M6 IEh1QyBGaXJtd2FyZQpAQCAtMjI0LDQxICsyMjIsMTAgQEAgdm9pZCBpbnRlbF9odWNfaW5pdF9o dyhzdHJ1Y3QgaW50ZWxfaHVjICpodWMpCiAJcmV0dXJuOwogfQogCi0vKioKLSAqIGludGVsX2d1 Y19hdXRoX2h1YygpIC0gYXV0aGVudGljYXRlIHVjb2RlCi0gKiBAZGV2X3ByaXY6IHRoZSBkcm1f aTkxNV9kZXZpY2UKLSAqCi0gKiBUcmlnZ2VycyBhIEh1QyBmdyBhdXRoZW50aWNhdGlvbiByZXF1 ZXN0IHRvIHRoZSBHdUMgdmlhIGludGVsX2d1Y19hY3Rpb25fCi0gKiBhdXRoZW50aWNhdGVfaHVj IGludGVyZmFjZS4KLSAqLwotdm9pZCBpbnRlbF9ndWNfYXV0aF9odWMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2KQoraW50IGludGVsX2h1Y19jaGVja19hdXRoX3N0YXR1cyhzdHJ1 Y3QgaW50ZWxfaHVjICpodWMpCiB7Ci0Jc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmRldl9wcml2 LT5ndWM7Ci0Jc3RydWN0IGludGVsX2h1YyAqaHVjID0gJmRldl9wcml2LT5odWM7Ci0Jc3RydWN0 IGk5MTVfdm1hICp2bWE7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gaHVj X3RvX2k5MTUoaHVjKTsKIAlpbnQgcmV0OwotCXUzMiBkYXRhWzJdOwotCi0JaWYgKGh1Yy0+Zncu bG9hZF9zdGF0dXMgIT0gSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUykKLQkJcmV0dXJuOwotCi0J dm1hID0gaTkxNV9nZW1fb2JqZWN0X2dndHRfcGluKGh1Yy0+Zncub2JqLCBOVUxMLCAwLCAwLAot CQkJCVBJTl9PRkZTRVRfQklBUyB8IEdVQ19XT1BDTV9UT1ApOwotCWlmIChJU19FUlIodm1hKSkg ewotCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gaHVjIGZ3IG9iamVjdCAlZFxuIiwKLQkJCQko aW50KVBUUl9FUlIodm1hKSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBTcGVjaWZ5IGF1dGggYWN0 aW9uIGFuZCB3aGVyZSBwdWJsaWMgc2lnbmF0dXJlIGlzLiAqLwotCWRhdGFbMF0gPSBJTlRFTF9H VUNfQUNUSU9OX0FVVEhFTlRJQ0FURV9IVUM7Ci0JZGF0YVsxXSA9IGd1Y19nZ3R0X29mZnNldCh2 bWEpICsgaHVjLT5mdy5yc2Ffb2Zmc2V0OwotCi0JcmV0ID0gaW50ZWxfZ3VjX3NlbmQoZ3VjLCBk YXRhLCBBUlJBWV9TSVpFKGRhdGEpKTsKLQlpZiAocmV0KSB7Ci0JCURSTV9FUlJPUigiSHVDOiBH dUMgZGlkIG5vdCBhY2sgQXV0aCByZXF1ZXN0ICVkXG4iLCByZXQpOwotCQlnb3RvIG91dDsKLQl9 CiAKIAkvKiBDaGVjayBhdXRoZW50aWNhdGlvbiBzdGF0dXMsIGl0IHNob3VsZCBiZSBkb25lIGJ5 IG5vdyAqLwogCXJldCA9IGludGVsX3dhaXRfZm9yX3JlZ2lzdGVyKGRldl9wcml2LApAQCAtMjY3 LDEyICsyMzQsMjEgQEAgdm9pZCBpbnRlbF9ndWNfYXV0aF9odWMoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQogCQkJCUhVQ19GV19WRVJJRklFRCwKIAkJCQk1MCk7CiAKLQlpZiAo cmV0KSB7CisJaWYgKHJldCkKIAkJRFJNX0VSUk9SKCJIdUM6IEF1dGhlbnRpY2F0aW9uIGZhaWxl ZCAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQogCi1vdXQ6Ci0JaTkxNV92bWFfdW5waW4o dm1hKTsKKwlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGludGVsX2F1dGhfaHVjKCkgLSBhdXRo ZW50aWNhdGUgSHVDIHVjb2RlCisgKi8KK3ZvaWQgaW50ZWxfaHVjX2F1dGgoc3RydWN0IGludGVs X2h1YyAqaHVjKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGh1Y190 b19pOTE1KGh1Yyk7CisKKwlpZiAoaHVjLT5mdy5sb2FkX3N0YXR1cyAhPSBJTlRFTF9VQ19GSVJN V0FSRV9TVUNDRVNTKQorCQlyZXR1cm47CisKKwlpbnRlbF9ndWNfYXV0aF9odWMoJmRldl9wcml2 LT5ndWMsIGh1Yyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9o dWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2h1Yy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjE0ZTA4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9odWMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0 IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhP UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMg T1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVD VElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJ TiBUSEUgU09GVFdBUkUuCisgKgorICovCisjaWZuZGVmIF9JTlRFTF9IVUNfSF8KKyNkZWZpbmUg X0lOVEVMX0hVQ19IXworCisjaW5jbHVkZSAiaW50ZWxfdWMuaCIKKworc3RydWN0IGludGVsX2h1 YyB7CisJLyogR2VuZXJpYyB1QyBmaXJtd2FyZSBtYW5hZ2VtZW50ICovCisJc3RydWN0IGludGVs X3VjX2Z3IGZ3OworCisJLyogSHVDLXNwZWNpZmljIGFkZGl0aW9ucyAqLworfTsKKworLyogaW50 ZWxfaHVjLmMgKi8KK3ZvaWQgaW50ZWxfaHVjX3NlbGVjdF9mdyhzdHJ1Y3QgaW50ZWxfaHVjICpo dWMpOwordm9pZCBpbnRlbF9odWNfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfaHVjICpodWMpOworaW50 IGludGVsX2h1Y19jaGVja19hdXRoX3N0YXR1cyhzdHJ1Y3QgaW50ZWxfaHVjICpodWMpOwordm9p ZCBpbnRlbF9odWNfYXV0aChzdHJ1Y3QgaW50ZWxfaHVjICpodWMpOworCisjZW5kaWYKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF91Yy5jCmluZGV4IDAxNzhiYTQuLmEzZmM0YzggMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfdWMuYwpAQCAtMjMsNyArMjMsNiBAQAogICovCiAKICNpbmNsdWRlICJpOTE1X2Rydi5oIgot I2luY2x1ZGUgImludGVsX3VjLmgiCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogLyog Q2xlYW5zIHVwIHVDIGZpcm13YXJlIGJ5IHJlbGVhc2luZyB0aGUgZmlybXdhcmUgR0VNIG9iai4K QEAgLTk0LDIyICs5MywxMSBAQCB2b2lkIGludGVsX3VjX3Nhbml0aXplX29wdGlvbnMoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCQlpOTE1LmVuYWJsZV9ndWNfc3VibWlzc2lv biA9IEhBU19HVUNfU0NIRUQoZGV2X3ByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBnZW44X2d1Y19y YWlzZV9pcnEoc3RydWN0IGludGVsX2d1YyAqZ3VjKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7Ci0KLQlJOTE1X1dSSVRFKEdVQ19TRU5E X0lOVEVSUlVQVCwgR1VDX1NFTkRfVFJJR0dFUik7Ci19Ci0KIHZvaWQgaW50ZWxfdWNfaW5pdF9l YXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJc3RydWN0IGludGVs X2d1YyAqZ3VjID0gJmRldl9wcml2LT5ndWM7CiAKLQlpbnRlbF9ndWNfY3RfaW5pdF9lYXJseSgm Z3VjLT5jdCk7Ci0KLQltdXRleF9pbml0KCZndWMtPnNlbmRfbXV0ZXgpOwotCWd1Yy0+c2VuZCA9 IGludGVsX2d1Y19zZW5kX25vcDsKLQlndWMtPm5vdGlmeSA9IGdlbjhfZ3VjX3JhaXNlX2lycTsK KwlpbnRlbF9ndWNfaW5pdF9lYXJseShndWMpOwogfQogCiBzdGF0aWMgdm9pZCBmZXRjaF91Y19m dyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0yNjIsMzIgKzI1MCw2IEBA IHZvaWQgaW50ZWxfdWNfZmluaV9mdyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp CiAJX19pbnRlbF91Y19md19maW5pKCZkZXZfcHJpdi0+aHVjLmZ3KTsKIH0KIAotc3RhdGljIGlu bGluZSBpOTE1X3JlZ190IGd1Y19zZW5kX3JlZyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIHUzMiBp KQotewotCUdFTV9CVUdfT04oIWd1Yy0+c2VuZF9yZWdzLmJhc2UpOwotCUdFTV9CVUdfT04oIWd1 Yy0+c2VuZF9yZWdzLmNvdW50KTsKLQlHRU1fQlVHX09OKGkgPj0gZ3VjLT5zZW5kX3JlZ3MuY291 bnQpOwotCi0JcmV0dXJuIF9NTUlPKGd1Yy0+c2VuZF9yZWdzLmJhc2UgKyA0ICogaSk7Ci19Ci0K LXN0YXRpYyB2b2lkIGd1Y19pbml0X3NlbmRfcmVncyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsK LQllbnVtIGZvcmNld2FrZV9kb21haW5zIGZ3X2RvbWFpbnMgPSAwOwotCXVuc2lnbmVkIGludCBp OwotCi0JZ3VjLT5zZW5kX3JlZ3MuYmFzZSA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KFNPRlRfU0NS QVRDSCgwKSk7Ci0JZ3VjLT5zZW5kX3JlZ3MuY291bnQgPSBTT0ZUX1NDUkFUQ0hfQ09VTlQgLSAx OwotCi0JZm9yIChpID0gMDsgaSA8IGd1Yy0+c2VuZF9yZWdzLmNvdW50OyBpKyspIHsKLQkJZndf ZG9tYWlucyB8PSBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2Zvcl9yZWcoZGV2X3ByaXYsCi0JCQkJ CWd1Y19zZW5kX3JlZyhndWMsIGkpLAotCQkJCQlGV19SRUdfUkVBRCB8IEZXX1JFR19XUklURSk7 Ci0JfQotCWd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMgPSBmd19kb21haW5zOwotfQotCiBzdGF0 aWMgdm9pZCBndWNfY2FwdHVyZV9sb2FkX2Vycl9sb2coc3RydWN0IGludGVsX2d1YyAqZ3VjKQog ewogCWlmICghZ3VjLT5sb2cudm1hIHx8IGk5MTUuZ3VjX2xvZ19sZXZlbCA8IDApCkBAIC0yOTUs OCArMjU3LDYgQEAgc3RhdGljIHZvaWQgZ3VjX2NhcHR1cmVfbG9hZF9lcnJfbG9nKHN0cnVjdCBp bnRlbF9ndWMgKmd1YykKIAogCWlmICghZ3VjLT5sb2FkX2Vycl9sb2cpCiAJCWd1Yy0+bG9hZF9l cnJfbG9nID0gaTkxNV9nZW1fb2JqZWN0X2dldChndWMtPmxvZy52bWEtPm9iaik7Ci0KLQlyZXR1 cm47CiB9CiAKIHN0YXRpYyB2b2lkIGd1Y19mcmVlX2xvYWRfZXJyX2xvZyhzdHJ1Y3QgaW50ZWxf Z3VjICpndWMpCkBAIC0zMDksOCArMjY5LDYgQEAgc3RhdGljIGludCBndWNfZW5hYmxlX2NvbW11 bmljYXRpb24oc3RydWN0IGludGVsX2d1YyAqZ3VjKQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiA9IGd1Y190b19pOTE1KGd1Yyk7CiAKLQlndWNfaW5pdF9zZW5kX3JlZ3Mo Z3VjKTsKLQogCWlmIChIQVNfR1VDX0NUKGRldl9wcml2KSkKIAkJcmV0dXJuIGludGVsX2d1Y19l bmFibGVfY3QoZ3VjKTsKIApAQCAtMzMxLDYgKzI4OSw3IEBAIHN0YXRpYyB2b2lkIGd1Y19kaXNh YmxlX2NvbW11bmljYXRpb24oc3RydWN0IGludGVsX2d1YyAqZ3VjKQogaW50IGludGVsX3VjX2lu aXRfaHcoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogewogCXN0cnVjdCBpbnRl bF9ndWMgKmd1YyA9ICZkZXZfcHJpdi0+Z3VjOworCXN0cnVjdCBpbnRlbF9odWMgKmh1YyA9ICZk ZXZfcHJpdi0+aHVjOwogCWludCByZXQsIGF0dGVtcHRzOwogCiAJaWYgKCFpOTE1LmVuYWJsZV9n dWNfbG9hZGluZykKQEAgLTM4NiwxMSArMzQ1LDEzIEBAIGludCBpbnRlbF91Y19pbml0X2h3KHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlpZiAocmV0KQogCQlnb3RvIGVycl9s b2dfY2FwdHVyZTsKIAorCWludGVsX2d1Y19pbml0X3NlbmRfcmVncyhndWMpOworCiAJcmV0ID0g Z3VjX2VuYWJsZV9jb21tdW5pY2F0aW9uKGd1Yyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfbG9n X2NhcHR1cmU7CiAKLQlpbnRlbF9ndWNfYXV0aF9odWMoZGV2X3ByaXYpOworCWludGVsX2h1Y19h dXRoKGh1Yyk7CiAJaWYgKGk5MTUuZW5hYmxlX2d1Y19zdWJtaXNzaW9uKSB7CiAJCWlmIChpOTE1 Lmd1Y19sb2dfbGV2ZWwgPj0gMCkKIAkJCWdlbjlfZW5hYmxlX2d1Y19pbnRlcnJ1cHRzKGRldl9w cml2KTsKQEAgLTQ1OCw4MiArNDE5LDMgQEAgdm9pZCBpbnRlbF91Y19maW5pX2h3KHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAogCWk5MTVfZ2d0dF9kaXNhYmxlX2d1YyhkZXZf cHJpdik7CiB9Ci0KLWludCBpbnRlbF9ndWNfc2VuZF9ub3Aoc3RydWN0IGludGVsX2d1YyAqZ3Vj LCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKLXsKLQlXQVJOKDEsICJVbmV4cGVjdGVkIHNl bmQ6IGFjdGlvbj0lI3hcbiIsICphY3Rpb24pOwotCXJldHVybiAtRU5PREVWOwotfQotCi0vKgot ICogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBNTUlPIGJhc2VkIGhvc3QgdG8gR3VDIGlu dGVyZmFjZS4KLSAqLwotaW50IGludGVsX2d1Y19zZW5kX21taW8oc3RydWN0IGludGVsX2d1YyAq Z3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBndWNfdG9faTkxNShndWMpOwotCXUzMiBzdGF0dXM7Ci0JaW50IGk7 Ci0JaW50IHJldDsKLQotCUdFTV9CVUdfT04oIWxlbik7Ci0JR0VNX0JVR19PTihsZW4gPiBndWMt PnNlbmRfcmVncy5jb3VudCk7Ci0KLQkvKiBJZiBDVCBpcyBhdmFpbGFibGUsIHdlIGV4cGVjdCB0 byB1c2UgTU1JTyBvbmx5IGR1cmluZyBpbml0L2ZpbmkgKi8KLQlHRU1fQlVHX09OKEhBU19HVUNf Q1QoZGV2X3ByaXYpICYmCi0JCSphY3Rpb24gIT0gSU5URUxfR1VDX0FDVElPTl9SRUdJU1RFUl9D T01NQU5EX1RSQU5TUE9SVF9CVUZGRVIgJiYKLQkJKmFjdGlvbiAhPSBJTlRFTF9HVUNfQUNUSU9O X0RFUkVHSVNURVJfQ09NTUFORF9UUkFOU1BPUlRfQlVGRkVSKTsKLQotCW11dGV4X2xvY2soJmd1 Yy0+c2VuZF9tdXRleCk7Ci0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9nZXQoZGV2X3ByaXYsIGd1 Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQot CQlJOTE1X1dSSVRFKGd1Y19zZW5kX3JlZyhndWMsIGkpLCBhY3Rpb25baV0pOwotCi0JUE9TVElO R19SRUFEKGd1Y19zZW5kX3JlZyhndWMsIGkgLSAxKSk7Ci0KLQlpbnRlbF9ndWNfbm90aWZ5KGd1 Yyk7Ci0KLQkvKgotCSAqIE5vIEd1QyBjb21tYW5kIHNob3VsZCBldmVyIHRha2UgbG9uZ2VyIHRo YW4gMTBtcy4KLQkgKiBGYXN0IGNvbW1hbmRzIHNob3VsZCBzdGlsbCBjb21wbGV0ZSBpbiAxMHVz LgotCSAqLwotCXJldCA9IF9faW50ZWxfd2FpdF9mb3JfcmVnaXN0ZXJfZncoZGV2X3ByaXYsCi0J CQkJCSAgIGd1Y19zZW5kX3JlZyhndWMsIDApLAotCQkJCQkgICBJTlRFTF9HVUNfUkVDVl9NQVNL LAotCQkJCQkgICBJTlRFTF9HVUNfUkVDVl9NQVNLLAotCQkJCQkgICAxMCwgMTAsICZzdGF0dXMp OwotCWlmIChzdGF0dXMgIT0gSU5URUxfR1VDX1NUQVRVU19TVUNDRVNTKSB7Ci0JCS8qCi0JCSAq IEVpdGhlciB0aGUgR3VDIGV4cGxpY2l0bHkgcmV0dXJuZWQgYW4gZXJyb3IgKHdoaWNoCi0JCSAq IHdlIGNvbnZlcnQgdG8gLUVJTyBoZXJlKSBvciBubyByZXNwb25zZSBhdCBhbGwgd2FzCi0JCSAq IHJlY2VpdmVkIHdpdGhpbiB0aGUgdGltZW91dCBsaW1pdCAoLUVUSU1FRE9VVCkKLQkJICovCi0J CWlmIChyZXQgIT0gLUVUSU1FRE9VVCkKLQkJCXJldCA9IC1FSU87Ci0KLQkJRFJNX1dBUk4oIklO VEVMX0dVQ19TRU5EOiBBY3Rpb24gMHglWCBmYWlsZWQ7IgotCQkJICIgcmV0PSVkIHN0YXR1cz0w eCUwOFggcmVzcG9uc2U9MHglMDhYXG4iLAotCQkJIGFjdGlvblswXSwgcmV0LCBzdGF0dXMsIEk5 MTVfUkVBRChTT0ZUX1NDUkFUQ0goMTUpKSk7Ci0JfQotCi0JaW50ZWxfdW5jb3JlX2ZvcmNld2Fr ZV9wdXQoZGV2X3ByaXYsIGd1Yy0+c2VuZF9yZWdzLmZ3X2RvbWFpbnMpOwotCW11dGV4X3VubG9j aygmZ3VjLT5zZW5kX211dGV4KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBpbnRlbF9ndWNf c2FtcGxlX2ZvcmNld2FrZShzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpCi17Ci0Jc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3VjX3RvX2k5MTUoZ3VjKTsKLQl1MzIgYWN0aW9uWzJd OwotCi0JYWN0aW9uWzBdID0gSU5URUxfR1VDX0FDVElPTl9TQU1QTEVfRk9SQ0VXQUtFOwotCS8q IFdhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmc6c2tsLGJ4dCAqLwotCWlmICghaW50ZWxfZW5h YmxlX3JjNigpIHx8IE5FRURTX1dhUnNEaXNhYmxlQ29hcnNlUG93ZXJHYXRpbmcoZGV2X3ByaXYp KQotCQlhY3Rpb25bMV0gPSAwOwotCWVsc2UKLQkJLyogYml0IDAgYW5kIDEgYXJlIGZvciBSZW5k ZXIgYW5kIE1lZGlhIGRvbWFpbiBzZXBhcmF0ZWx5ICovCi0JCWFjdGlvblsxXSA9IEdVQ19GT1JD RVdBS0VfUkVOREVSIHwgR1VDX0ZPUkNFV0FLRV9NRURJQTsKLQotCXJldHVybiBpbnRlbF9ndWNf c2VuZChndWMsIGFjdGlvbiwgQVJSQVlfU0laRShhY3Rpb24pKTsKLX0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3VjLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF91Yy5oCmluZGV4IDc3MDNjOWEuLjBkMzQ2ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX3VjLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdWMuaApA QCAtMzIsNDYgKzMyLDYgQEAKIAogc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0OwogCi0vKgot ICogVGhpcyBzdHJ1Y3R1cmUgcHJpbWFyaWx5IGRlc2NyaWJlcyB0aGUgR0VNIG9iamVjdCBzaGFy ZWQgd2l0aCB0aGUgR3VDLgotICogVGhlIHNwZWNzIHNvbWV0aW1lcyByZWZlciB0byB0aGlzIG9i amVjdCBhcyBhICJHdUMgY29udGV4dCIsIGJ1dCB3ZSB1c2UKLSAqIHRoZSB0ZXJtICJjbGllbnQi IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIGhhcmR3YXJlIGNvbnRleHRzLiBUaGlzCi0gKiBHRU0g b2JqZWN0IGlzIGhlbGQgZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2Ygb3VyIGludGVyYWN0aW9u IHdpdGgKLSAqIHRoZSBHdUMsIGJlaW5nIGFsbG9jYXRlZCBiZWZvcmUgdGhlIEd1QyBpcyBsb2Fk ZWQgd2l0aCBpdHMgZmlybXdhcmUuCi0gKiBCZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IHRvIHVwZGF0 ZSB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoZSBHdUMgYWZ0ZXIKLSAqIGluaXRpYWxpc2F0aW9uLCB0 aGUgc2hhcmVkIG9iamVjdCBtdXN0IHN0YXkgcGlubmVkIGludG8gdGhlIEdHVFQgYXMKLSAqIGxv bmcgYXMgdGhlIEd1QyBpcyBpbiB1c2UuIFdlIGFsc28ga2VlcCB0aGUgZmlyc3QgcGFnZSAob25s eSkgbWFwcGVkCi0gKiBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlLCBhcyBpdCBpbmNsdWRlcyBz aGFyZWQgZGF0YSB0aGF0IG11c3QgYmUKLSAqIHVwZGF0ZWQgb24gZXZlcnkgcmVxdWVzdCBzdWJt aXNzaW9uLgotICoKLSAqIFRoZSBzaW5nbGUgR0VNIG9iamVjdCBkZXNjcmliZWQgaGVyZSBpcyBh Y3R1YWxseSBtYWRlIHVwIG9mIHNldmVyYWwKLSAqIHNlcGFyYXRlIGFyZWFzLCBhcyBmYXIgYXMg dGhlIEd1QyBpcyBjb25jZXJuZWQuIFRoZSBmaXJzdCBwYWdlIChrZXB0Ci0gKiBrbWFwJ2QpIGlu Y2x1ZGVzIHRoZSAicHJvY2VzcyBkZXNjcmlwdG9yIiB3aGljaCBob2xkcyBzZXF1ZW5jZSBkYXRh IGZvcgotICogdGhlIGRvb3JiZWxsLCBhbmQgb25lIGNhY2hlbGluZSB3aGljaCBhY3R1YWxseSAq aXMqIHRoZSBkb29yYmVsbDsgYQotICogd3JpdGUgdG8gdGhpcyB3aWxsICJyaW5nIHRoZSBkb29y YmVsbCIgKGkuZS4gc2VuZCBhbiBpbnRlcnJ1cHQgdG8gdGhlCi0gKiBHdUMpLiBUaGUgc3Vic2Vx dWVudCAgcGFnZXMgb2YgdGhlIGNsaWVudCBvYmplY3QgY29uc3RpdHV0ZSB0aGUgd29yawotICog cXVldWUgKGEgY2lyY3VsYXIgYXJyYXkgb2Ygd29yayBpdGVtcyksIGFnYWluIGRlc2NyaWJlZCBp biB0aGUgcHJvY2VzcwotICogZGVzY3JpcHRvci4gV29yayBxdWV1ZSBwYWdlcyBhcmUgbWFwcGVk IG1vbWVudGFyaWx5IGFzIHJlcXVpcmVkLgotICovCi1zdHJ1Y3QgaTkxNV9ndWNfY2xpZW50IHsK LQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQl2b2lkICp2YWRkcjsKLQlzdHJ1Y3QgaTkxNV9nZW1f Y29udGV4dCAqb3duZXI7Ci0Jc3RydWN0IGludGVsX2d1YyAqZ3VjOwotCi0JdWludDMyX3QgZW5n aW5lczsJCS8qIGJpdG1hcCBvZiAoaG9zdCkgZW5naW5lIGlkcwkqLwotCXVpbnQzMl90IHByaW9y aXR5OwotCXUzMiBzdGFnZV9pZDsKLQl1aW50MzJfdCBwcm9jX2Rlc2Nfb2Zmc2V0OwotCi0JdTE2 IGRvb3JiZWxsX2lkOwotCXVuc2lnbmVkIGxvbmcgZG9vcmJlbGxfb2Zmc2V0OwotCi0Jc3Bpbmxv Y2tfdCB3cV9sb2NrOwotCS8qIFBlci1lbmdpbmUgY291bnRzIG9mIEd1QyBzdWJtaXNzaW9ucyAq LwotCXVpbnQ2NF90IHN1Ym1pc3Npb25zW0k5MTVfTlVNX0VOR0lORVNdOwotfTsKLQogZW51bSBp bnRlbF91Y19md19zdGF0dXMgewogCUlOVEVMX1VDX0ZJUk1XQVJFX0ZBSUwgPSAtMSwKIAlJTlRF TF9VQ19GSVJNV0FSRV9OT05FID0gMCwKQEAgLTEzOCw2OSArOTgsNiBAQCBzdHJ1Y3QgaW50ZWxf dWNfZncgewogCXVpbnQzMl90IHVjb2RlX29mZnNldDsKIH07CiAKLXN0cnVjdCBpbnRlbF9ndWNf bG9nIHsKLQl1aW50MzJfdCBmbGFnczsKLQlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKLQkvKiBUaGUg cnVudGltZSBzdHVmZiBnZXRzIGNyZWF0ZWQgb25seSB3aGVuIEd1QyBsb2dnaW5nIGdldHMgZW5h YmxlZCAqLwotCXN0cnVjdCB7Ci0JCXZvaWQgKmJ1Zl9hZGRyOwotCQlzdHJ1Y3Qgd29ya3F1ZXVl X3N0cnVjdCAqZmx1c2hfd3E7Ci0JCXN0cnVjdCB3b3JrX3N0cnVjdCBmbHVzaF93b3JrOwotCQlz dHJ1Y3QgcmNoYW4gKnJlbGF5X2NoYW47Ci0JfSBydW50aW1lOwotCS8qIGxvZ2dpbmcgcmVsYXRl ZCBzdGF0cyAqLwotCXUzMiBjYXB0dXJlX21pc3NfY291bnQ7Ci0JdTMyIGZsdXNoX2ludGVycnVw dF9jb3VudDsKLQl1MzIgcHJldl9vdmVyZmxvd19jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOwot CXUzMiB0b3RhbF9vdmVyZmxvd19jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOwotCXUzMiBmbHVz aF9jb3VudFtHVUNfTUFYX0xPR19CVUZGRVJdOwotfTsKLQotc3RydWN0IGludGVsX2d1YyB7Ci0J c3RydWN0IGludGVsX3VjX2Z3IGZ3OwotCXN0cnVjdCBpbnRlbF9ndWNfbG9nIGxvZzsKLQlzdHJ1 Y3QgaW50ZWxfZ3VjX2N0IGN0OwotCi0JLyogTG9nIHNuYXBzaG90IGlmIEd1QyBlcnJvcnMgZHVy aW5nIGxvYWQgKi8KLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqbG9hZF9lcnJfbG9nOwot Ci0JLyogaW50ZWxfZ3VjX3JlY3YgaW50ZXJydXB0IHJlbGF0ZWQgc3RhdGUgKi8KLQlib29sIGlu dGVycnVwdHNfZW5hYmxlZDsKLQotCXN0cnVjdCBpOTE1X3ZtYSAqYWRzX3ZtYTsKLQlzdHJ1Y3Qg aTkxNV92bWEgKnN0YWdlX2Rlc2NfcG9vbDsKLQl2b2lkICpzdGFnZV9kZXNjX3Bvb2xfdmFkZHI7 Ci0Jc3RydWN0IGlkYSBzdGFnZV9pZHM7Ci0KLQlzdHJ1Y3QgaTkxNV9ndWNfY2xpZW50ICpleGVj YnVmX2NsaWVudDsKLQotCURFQ0xBUkVfQklUTUFQKGRvb3JiZWxsX2JpdG1hcCwgR1VDX05VTV9E T09SQkVMTFMpOwotCXVpbnQzMl90IGRiX2NhY2hlbGluZTsJCS8qIEN5Y2xpYyBjb3VudGVyIG1v ZCBwYWdlc2l6ZQkqLwotCi0JLyogR3VDJ3MgRlcgc3BlY2lmaWMgcmVnaXN0ZXJzIHVzZWQgaW4g TU1JTyBzZW5kICovCi0Jc3RydWN0IHsKLQkJdTMyIGJhc2U7Ci0JCXVuc2lnbmVkIGludCBjb3Vu dDsKLQkJZW51bSBmb3JjZXdha2VfZG9tYWlucyBmd19kb21haW5zOwotCX0gc2VuZF9yZWdzOwot Ci0JLyogVG8gc2VyaWFsaXplIHRoZSBpbnRlbF9ndWNfc2VuZCBhY3Rpb25zICovCi0Jc3RydWN0 IG11dGV4IHNlbmRfbXV0ZXg7Ci0KLQkvKiBHdUMncyBGVyBzcGVjaWZpYyBzZW5kIGZ1bmN0aW9u ICovCi0JaW50ICgqc2VuZCkoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBjb25zdCB1MzIgKmRhdGEs IHUzMiBsZW4pOwotCi0JLyogR3VDJ3MgRlcgc3BlY2lmaWMgbm90aWZ5IGZ1bmN0aW9uICovCi0J dm9pZCAoKm5vdGlmeSkoc3RydWN0IGludGVsX2d1YyAqZ3VjKTsKLX07Ci0KLXN0cnVjdCBpbnRl bF9odWMgewotCS8qIEdlbmVyaWMgdUMgZmlybXdhcmUgbWFuYWdlbWVudCAqLwotCXN0cnVjdCBp bnRlbF91Y19mdyBmdzsKLQotCS8qIEh1Qy1zcGVjaWZpYyBhZGRpdGlvbnMgKi8KLX07Ci0KIC8q IGludGVsX3VjLmMgKi8KIHZvaWQgaW50ZWxfdWNfc2FuaXRpemVfb3B0aW9ucyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF91Y19pbml0X2Vhcmx5KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CkBAIC0yMDgsNTIgKzEwNSw1IEBAIHN0cnVj dCBpbnRlbF9odWMgewogdm9pZCBpbnRlbF91Y19maW5pX2Z3KHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7CiBpbnQgaW50ZWxfdWNfaW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpbnRlbF91Y19maW5pX2h3KHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdik7Ci1pbnQgaW50ZWxfZ3VjX3NhbXBsZV9mb3JjZXdha2Uoc3RydWN0 IGludGVsX2d1YyAqZ3VjKTsKLWludCBpbnRlbF9ndWNfc2VuZF9ub3Aoc3RydWN0IGludGVsX2d1 YyAqZ3VjLCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbik7Ci1pbnQgaW50ZWxfZ3VjX3NlbmRf bW1pbyhzdHJ1Y3QgaW50ZWxfZ3VjICpndWMsIGNvbnN0IHUzMiAqYWN0aW9uLCB1MzIgbGVuKTsK LQotc3RhdGljIGlubGluZSBpbnQgaW50ZWxfZ3VjX3NlbmQoc3RydWN0IGludGVsX2d1YyAqZ3Vj LCBjb25zdCB1MzIgKmFjdGlvbiwgdTMyIGxlbikKLXsKLQlyZXR1cm4gZ3VjLT5zZW5kKGd1Yywg YWN0aW9uLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50ZWxfZ3VjX25vdGlmeShz dHJ1Y3QgaW50ZWxfZ3VjICpndWMpCi17Ci0JZ3VjLT5ub3RpZnkoZ3VjKTsKLX0KLQotLyogaW50 ZWxfZ3VjX2xvYWRlci5jICovCi1pbnQgaW50ZWxfZ3VjX3NlbGVjdF9mdyhzdHJ1Y3QgaW50ZWxf Z3VjICpndWMpOwotaW50IGludGVsX2d1Y19pbml0X2h3KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yyk7 Ci1pbnQgaW50ZWxfZ3VjX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKLWludCBpbnRlbF9ndWNfcmVzdW1lKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dik7Ci11MzIgaW50ZWxfZ3VjX3dvcGNtX3NpemUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsKLQotLyogaTkxNV9ndWNfc3VibWlzc2lvbi5jICovCi1pbnQgaTkxNV9ndWNfc3Vi bWlzc2lvbl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci1pbnQgaTkx NV9ndWNfc3VibWlzc2lvbl9lbmFibGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKLXZvaWQgaTkxNV9ndWNfc3VibWlzc2lvbl9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdik7Ci12b2lkIGk5MTVfZ3VjX3N1Ym1pc3Npb25fZmluaShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotc3RydWN0IGk5MTVfdm1hICppbnRlbF9ndWNfYWxs b2NhdGVfdm1hKHN0cnVjdCBpbnRlbF9ndWMgKmd1YywgdTMyIHNpemUpOwotCi0vKiBpbnRlbF9n dWNfbG9nLmMgKi8KLWludCBpbnRlbF9ndWNfbG9nX2NyZWF0ZShzdHJ1Y3QgaW50ZWxfZ3VjICpn dWMpOwotdm9pZCBpbnRlbF9ndWNfbG9nX2Rlc3Ryb3koc3RydWN0IGludGVsX2d1YyAqZ3VjKTsK LWludCBpOTE1X2d1Y19sb2dfY29udHJvbChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsIHU2NCBjb250cm9sX3ZhbCk7Ci12b2lkIGk5MTVfZ3VjX2xvZ19yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotdm9pZCBpOTE1X2d1Y19sb2dfdW5yZWdpc3Rl cihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwotCi1zdGF0aWMgaW5saW5lIHUz MiBndWNfZ2d0dF9vZmZzZXQoc3RydWN0IGk5MTVfdm1hICp2bWEpCi17Ci0JdTMyIG9mZnNldCA9 IGk5MTVfZ2d0dF9vZmZzZXQodm1hKTsKLQlHRU1fQlVHX09OKG9mZnNldCA8IEdVQ19XT1BDTV9U T1ApOwotCUdFTV9CVUdfT04ocmFuZ2Vfb3ZlcmZsb3dzX3QodTY0LCBvZmZzZXQsIHZtYS0+c2l6 ZSwgR1VDX0dHVFRfVE9QKSk7Ci0JcmV0dXJuIG9mZnNldDsKLX0KLQotLyogaW50ZWxfaHVjLmMg Ki8KLXZvaWQgaW50ZWxfaHVjX3NlbGVjdF9mdyhzdHJ1Y3QgaW50ZWxfaHVjICpodWMpOwotdm9p ZCBpbnRlbF9odWNfaW5pdF9odyhzdHJ1Y3QgaW50ZWxfaHVjICpodWMpOwotdm9pZCBpbnRlbF9n dWNfYXV0aF9odWMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAogI2VuZGlm Ci0tIAoxLjkuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==