From mboxrd@z Thu Jan 1 00:00:00 1970 From: Harry Wentland Subject: [PATCH 11/16] drm/amd/display: Refactor edid read. Date: Mon, 3 Apr 2017 19:07:25 -0400 Message-ID: <20170403230730.9884-12-harry.wentland@amd.com> References: <20170403230730.9884-1-harry.wentland@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170403230730.9884-1-harry.wentland-5C7GfCeVMHo@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Andrey Grodzovsky RnJvbTogQW5kcmV5IEdyb2R6b3Zza3kgPEFuZHJleS5Hcm9kem92c2t5QGFtZC5jb20+CgpBbGxv dyBMaW51eCB0byB1c2UgRFJNIHByb3ZpZGVkIEVESUQgcmVhZCBmdW5jdGlvYWxpdHkKYnkgbW92 aW5nICBEQUwgZWRpZCBpbXBsZW1lbnRhdGlvbiB0byBtb2R1bGUgaGVuY2UKcmVtb3ZpbmcgdGhp cyBjb2RlIGZyb20gREMgYnkgdGhpcyBjbGVhbmluZyB1cCBEQwpjb2RlIGZvciB1cHN0cmVhbS4K CkNoYW5nZS1JZDogSTdjNzNhZTYzMTAyZmEwNmY4NmIzNDdmMjFlZTI4OTAyY2E0ZjdjNTgKU2ln bmVkLW9mZi1ieTogQW5kcmV5IEdyb2R6b3Zza3kgPEFuZHJleS5Hcm9kem92c2t5QGFtZC5jb20+ CkFja2VkLWJ5OiBIYXJyeSBXZW50bGFuZCA8SGFycnkuV2VudGxhbmRAYW1kLmNvbT4KUmV2aWV3 ZWQtYnk6IFRvbnkgQ2hlbmcgPFRvbnkuQ2hlbmdAYW1kLmNvbT4KLS0tCiAuLi4vZHJtL2FtZC9k aXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1faGVscGVycy5jICB8ICA0NyArKysKIC4uLi9hbWQv ZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtX21zdF90eXBlcy5jICAgIHwgIDQ3ICsrLQogLi4u L2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1fbXN0X3R5cGVzLmggICAgfCAgIDIgKy0K IC4uLi9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV90eXBlcy5jICAgIHwgIDEw ICstCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kYy5jICAgICAgICAgICB8 ICA3OCArKysrLQogZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGluay5j ICAgICAgfCAgNTMgKy0tCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19s aW5rX2RkYy5jICB8IDMzNyArLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9hbWQv ZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYyAgIHwgIDMwICstCiBkcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvZGMvZGMuaCAgICAgICAgICAgICAgICB8ICAyMSArLQogZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjX3R5cGVzLmggICAgICAgICAgfCAgIDYgKwogZHJpdmVycy9n cHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RtX2hlbHBlcnMuaCAgICAgICAgfCAgMTAgKwogZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9pMmNhdXguYyAgICAgfCAgIDkgKy0KIGRy aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvZGNfbGlua19kZGMuaCAgIHwgIDM4ICst CiAuLi4vZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvZGRjX3NlcnZpY2VfdHlwZXMuaCAgICB8ICAy OCAtLQogLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvaW5jbHVkZS9pMmNhdXhfaW50ZXJmYWNlLmgg fCAgIDMgKwogLi4uL2FtZC9kaXNwbGF5L21vZHVsZXMvZGRjX3NlcnZpY2UvZGRjX3NlcnZpY2Uu YyAgfCAzODEgKysrKysrKysrKysrKysrKysrKysrCiAuLi4vZHJtL2FtZC9kaXNwbGF5L21vZHVs ZXMvaW5jL21vZF9kZGNfc2VydmljZS5oICB8ICA2NCArKysrCiAxNyBmaWxlcyBjaGFuZ2VkLCA2 OTkgaW5zZXJ0aW9ucygrKSwgNDY1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2RkY19zZXJ2aWNlL2RkY19zZXJ2aWNl LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxl cy9pbmMvbW9kX2RkY19zZXJ2aWNlLmgKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMKaW5kZXggY2E0ZmE1Yzhk OGJmLi4zNDAxNzgwYWYyZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9hbWRncHVfZG0vYW1kZ3B1X2RtX2hlbHBlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1k L2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9oZWxwZXJzLmMKQEAgLTQzNCwzICs0MzQsNTAg QEAgYm9vbCBkbV9oZWxwZXJzX3N1Ym1pdF9pMmMoCiAKIAlyZXR1cm4gcmVzdWx0OwogfQorCitl bnVtIGRjX2VkaWRfc3RhdHVzIGRtX2hlbHBlcnNfcmVhZF9sb2NhbF9lZGlkKAorCQlzdHJ1Y3Qg ZGNfY29udGV4dCAqY3R4LAorCQlzdHJ1Y3QgZGNfbGluayAqbGluaywKKwkJc3RydWN0IGRjX3Np bmsgKnNpbmspCit7CisJc3RydWN0IGFtZGdwdV9jb25uZWN0b3IgKmFjb25uZWN0b3IgPSBsaW5r LT5wcml2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqZGRjOworCWludCByZXRyeSA9IDM7CisJZW51 bSBkY19lZGlkX3N0YXR1cyBlZGlkX3N0YXR1czsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKworCWlm IChsaW5rLT5hdXhfbW9kZSkKKwkJZGRjID0gJmFjb25uZWN0b3ItPmRtX2RwX2F1eC5hdXguZGRj OworCWVsc2UKKwkJZGRjID0gJmFjb25uZWN0b3ItPmkyYy0+YmFzZTsKKworCS8qIHNvbWUgZG9u Z2xlcyByZWFkIGVkaWQgaW5jb3JyZWN0bHkgdGhlIGZpcnN0IHRpbWUsCisJICogZG8gY2hlY2sg c3VtIGFuZCByZXRyeSB0byBtYWtlIHN1cmUgcmVhZCBjb3JyZWN0IGVkaWQuCisJICovCisJZG8g eworCisJCWVkaWQgPSBkcm1fZ2V0X2VkaWQoJmFjb25uZWN0b3ItPmJhc2UsIGRkYyk7CisKKwkJ aWYgKCFlZGlkKQorCQkJcmV0dXJuIEVESURfTk9fUkVTUE9OU0U7CisKKwkJc2luay0+ZGNfZWRp ZC5sZW5ndGggPSBFRElEX0xFTkdUSCAqIChlZGlkLT5leHRlbnNpb25zICsgMSk7CisJCW1lbW1v dmUoc2luay0+ZGNfZWRpZC5yYXdfZWRpZCwgKHVpbnQ4X3QgKillZGlkLCBzaW5rLT5kY19lZGlk Lmxlbmd0aCk7CisKKwkJLyogV2UgZG9uJ3QgbmVlZCB0aGUgb3JpZ2luYWwgZWRpZCBhbnltb3Jl ICovCisJCWtmcmVlKGVkaWQpOworCisJCWVkaWRfc3RhdHVzID0gZG1faGVscGVyc19wYXJzZV9l ZGlkX2NhcHMoCisJCQkJCQljdHgsCisJCQkJCQkmc2luay0+ZGNfZWRpZCwKKwkJCQkJCSZzaW5r LT5lZGlkX2NhcHMpOworCisJfSB3aGlsZSAoZWRpZF9zdGF0dXMgPT0gRURJRF9CQURfQ0hFQ0tT VU0gJiYgLS1yZXRyeSA+IDApOworCisJaWYgKGVkaWRfc3RhdHVzICE9IEVESURfT0spCisJCURS TV9FUlJPUigiRURJRCBlcnI6ICVkLCBvbiBjb25uZWN0b3I6ICVzIiwKKwkJCQllZGlkX3N0YXR1 cywKKwkJCQlhY29ubmVjdG9yLT5iYXNlLm5hbWUpOworCisJcmV0dXJuIGVkaWRfc3RhdHVzOwor fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRn cHVfZG1fbXN0X3R5cGVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2Rt L2FtZGdwdV9kbV9tc3RfdHlwZXMuYwppbmRleCA5MWIzNjEwYTM2NTQuLjBlNzliYTkyMGIwNiAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVf ZG1fbXN0X3R5cGVzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2FtZGdwdV9k bS9hbWRncHVfZG1fbXN0X3R5cGVzLmMKQEAgLTgxLDI0ICs4MSw0MyBAQCBzdGF0aWMgc3NpemVf dCBkbV9kcF9hdXhfdHJhbnNmZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0IGRybV9k cF9hdXhfbXNnCiAJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEo cGRldik7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBkcm1fZGV2LT5kZXZfcHJpdmF0 ZTsKIAlzdHJ1Y3QgZGMgKmRjID0gYWRldi0+ZG0uZGM7CisJZW51bSBpMmNfbW90X21vZGUgbW90 ID0gKG1zZy0+cmVxdWVzdCAmIERQX0FVWF9JMkNfTU9UKSA/IEkyQ19NT1RfVFJVRSA6IEkyQ19N T1RfRkFMU0U7CiAJYm9vbCByZXM7CiAKLQlzd2l0Y2ggKG1zZy0+cmVxdWVzdCkgeworCXN3aXRj aCAobXNnLT5yZXF1ZXN0ICYgfkRQX0FVWF9JMkNfTU9UKSB7CiAJY2FzZSBEUF9BVVhfTkFUSVZF X1JFQUQ6Ci0JCXJlcyA9IGRjX3JlYWRfZHBjZCgKLQkJCWRjLAotCQkJVE9fRE1fQVVYKGF1eCkt PmxpbmtfaW5kZXgsCi0JCQltc2ctPmFkZHJlc3MsCi0JCQltc2ctPmJ1ZmZlciwKLQkJCW1zZy0+ c2l6ZSk7CisJCXJlcyA9IGRjX3JlYWRfYXV4X2RwY2QoCisJCQkJZGMsCisJCQkJVE9fRE1fQVVY KGF1eCktPmxpbmtfaW5kZXgsCisJCQkJbXNnLT5hZGRyZXNzLAorCQkJCW1zZy0+YnVmZmVyLAor CQkJCW1zZy0+c2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgRFBfQVVYX05BVElWRV9XUklURToKLQkJ cmVzID0gZGNfd3JpdGVfZHBjZCgKLQkJCWRjLAotCQkJVE9fRE1fQVVYKGF1eCktPmxpbmtfaW5k ZXgsCi0JCQltc2ctPmFkZHJlc3MsCi0JCQltc2ctPmJ1ZmZlciwKLQkJCW1zZy0+c2l6ZSk7CisJ CXJlcyA9IGRjX3dyaXRlX2F1eF9kcGNkKAorCQkJCWRjLAorCQkJCVRPX0RNX0FVWChhdXgpLT5s aW5rX2luZGV4LAorCQkJCW1zZy0+YWRkcmVzcywKKwkJCQltc2ctPmJ1ZmZlciwKKwkJCQltc2ct PnNpemUpOworCQlicmVhazsKKwljYXNlIERQX0FVWF9JMkNfUkVBRDoKKwkJcmVzID0gZGNfcmVh ZF9hdXhfaTJjKAorCQkJCWRjLAorCQkJCVRPX0RNX0FVWChhdXgpLT5saW5rX2luZGV4LAorCQkJ CW1vdCwKKwkJCQltc2ctPmFkZHJlc3MsCisJCQkJbXNnLT5idWZmZXIsCisJCQkJbXNnLT5zaXpl KTsKKwkJYnJlYWs7CisJY2FzZSBEUF9BVVhfSTJDX1dSSVRFOgorCQlyZXMgPSBkY193cml0ZV9h dXhfaTJjKAorCQkJCWRjLAorCQkJCVRPX0RNX0FVWChhdXgpLT5saW5rX2luZGV4LAorCQkJCW1v dCwKKwkJCQltc2ctPmFkZHJlc3MsCisJCQkJbXNnLT5idWZmZXIsCisJCQkJbXNnLT5zaXplKTsK IAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CkBAIC00MjAsNyArNDM5LDcgQEAgc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fZHBfbXN0X3RvcG9sb2d5X2NicyBkbV9tc3RfY2JzID0gewog CS5yZWdpc3Rlcl9jb25uZWN0b3IgPSBkbV9kcF9tc3RfcmVnaXN0ZXJfY29ubmVjdG9yCiB9Owog Ci12b2lkIGFtZGdwdV9kbV9pbml0aWFsaXplX21zdF9jb25uZWN0b3IoCit2b2lkIGFtZGdwdV9k bV9pbml0aWFsaXplX2RwX2Nvbm5lY3RvcigKIAlzdHJ1Y3QgYW1kZ3B1X2Rpc3BsYXlfbWFuYWdl ciAqZG0sCiAJc3RydWN0IGFtZGdwdV9jb25uZWN0b3IgKmFjb25uZWN0b3IpCiB7CmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3Rf dHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2Rt X21zdF90eXBlcy5oCmluZGV4IDYxMzBkNjJhYzY1Yy4uNDE4MDYxZjNiNDZiIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbV9tc3RfdHlw ZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9k bV9tc3RfdHlwZXMuaApAQCAtMjksNyArMjksNyBAQAogc3RydWN0IGFtZGdwdV9kaXNwbGF5X21h bmFnZXI7CiBzdHJ1Y3QgYW1kZ3B1X2Nvbm5lY3RvcjsKIAotdm9pZCBhbWRncHVfZG1faW5pdGlh bGl6ZV9tc3RfY29ubmVjdG9yKAordm9pZCBhbWRncHVfZG1faW5pdGlhbGl6ZV9kcF9jb25uZWN0 b3IoCiAJc3RydWN0IGFtZGdwdV9kaXNwbGF5X21hbmFnZXIgKmRtLAogCXN0cnVjdCBhbWRncHVf Y29ubmVjdG9yICphY29ubmVjdG9yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9kaXNwbGF5L2FtZGdwdV9kbS9hbWRncHVfZG1fdHlwZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9hbWRncHVfZG0vYW1kZ3B1X2RtX3R5cGVzLmMKaW5kZXggYTI2MGJiNWZhZDNi Li40OTA0ZDExNTc2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9h bWRncHVfZG0vYW1kZ3B1X2RtX3R5cGVzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNw bGF5L2FtZGdwdV9kbS9hbWRncHVfZG1fdHlwZXMuYwpAQCAtMjIyMCw3ICsyMjIwLDcgQEAgaW50 IGFtZGdwdV9kbV9jb25uZWN0b3JfaW5pdCgKIAogCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQKIAkJfHwgY29ubmVjdG9yX3R5cGUgPT0gRFJNX01P REVfQ09OTkVDVE9SX2VEUCkKLQkJYW1kZ3B1X2RtX2luaXRpYWxpemVfbXN0X2Nvbm5lY3Rvcihk bSwgYWNvbm5lY3Rvcik7CisJCWFtZGdwdV9kbV9pbml0aWFsaXplX2RwX2Nvbm5lY3RvcihkbSwg YWNvbm5lY3Rvcik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNF KSB8fFwKIAlkZWZpbmVkKENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFX01PRFVMRSkKQEAg LTMyMTEsOSArMzIxMSwxMSBAQCBzdGF0aWMgYm9vbCBpc19kcF9jYXBhYmxlX3dpdGhvdXRfdGlt aW5nX21zYSgKIAl1aW50OF90IGRwY2RfZGF0YTsKIAlib29sIGNhcGFibGUgPSBmYWxzZTsKIAlp ZiAoYW1kZ3B1X2Nvbm5lY3Rvci0+ZGNfbGluayAmJgotCSAgICBkY19yZWFkX2RwY2QoZGMsIGFt ZGdwdV9jb25uZWN0b3ItPmRjX2xpbmstPmxpbmtfaW5kZXgsCi0JCQkgRFBfRE9XTl9TVFJFQU1f UE9SVF9DT1VOVCwKLQkJCSAmZHBjZF9kYXRhLCBzaXplb2YoZHBjZF9kYXRhKSkgKQorCQlkY19y ZWFkX2F1eF9kcGNkKAorCQkJZGMsCisJCQlhbWRncHVfY29ubmVjdG9yLT5kY19saW5rLT5saW5r X2luZGV4LAorCQkJRFBfRE9XTl9TVFJFQU1fUE9SVF9DT1VOVCwKKwkJCSZkcGNkX2RhdGEsIHNp emVvZihkcGNkX2RhdGEpKSkKIAkJY2FwYWJsZSA9IChkcGNkX2RhdGEgJiBEUF9NU0FfVElNSU5H X1BBUl9JR05PUkVEKSA/IHRydWU6ZmFsc2U7CiAKIAlyZXR1cm4gY2FwYWJsZTsKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjLmMgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kYy5jCmluZGV4IGIzODkxMjI4YjQ5OS4uNDBhODAw MTU1ZmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9k Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjLmMKQEAgLTE1 NTMsNyArMTU1Myw3IEBAIHZvaWQgZGNfcmVzdW1lKGNvbnN0IHN0cnVjdCBkYyAqZGMpCiAJCWNv cmVfbGlua19yZXN1bWUoY29yZV9kYy0+bGlua3NbaV0pOwogfQogCi1ib29sIGRjX3JlYWRfZHBj ZCgKK2Jvb2wgZGNfcmVhZF9hdXhfZHBjZCgKIAkJc3RydWN0IGRjICpkYywKIAkJdWludDMyX3Qg bGlua19pbmRleCwKIAkJdWludDMyX3QgYWRkcmVzcywKQEAgLTE1NjUsNTYgKzE1NjUsMTAwIEBA IGJvb2wgZGNfcmVhZF9kcGNkKAogCXN0cnVjdCBjb3JlX2xpbmsgKmxpbmsgPSBjb3JlX2RjLT5s aW5rc1tsaW5rX2luZGV4XTsKIAllbnVtIGRkY19yZXN1bHQgciA9IGRhbF9kZGNfc2VydmljZV9y ZWFkX2RwY2RfZGF0YSgKIAkJCWxpbmstPmRkYywKKwkJCWZhbHNlLAorCQkJSTJDX01PVF9VTkRF RiwKIAkJCWFkZHJlc3MsCiAJCQlkYXRhLAogCQkJc2l6ZSk7CiAJcmV0dXJuIHIgPT0gRERDX1JF U1VMVF9TVUNFU1NGVUxMOwogfQogCi1ib29sIGRjX3F1ZXJ5X2RkY19kYXRhKAorYm9vbCBkY193 cml0ZV9hdXhfZHBjZCgKIAkJc3RydWN0IGRjICpkYywKIAkJdWludDMyX3QgbGlua19pbmRleCwK IAkJdWludDMyX3QgYWRkcmVzcywKLQkJdWludDhfdCAqd3JpdGVfYnVmLAotCQl1aW50MzJfdCB3 cml0ZV9zaXplLAotCQl1aW50OF90ICpyZWFkX2J1ZiwKLQkJdWludDMyX3QgcmVhZF9zaXplKSB7 Ci0KKwkJY29uc3QgdWludDhfdCAqZGF0YSwKKwkJdWludDMyX3Qgc2l6ZSkKK3sKIAlzdHJ1Y3Qg Y29yZV9kYyAqY29yZV9kYyA9IERDX1RPX0NPUkUoZGMpOwotCiAJc3RydWN0IGNvcmVfbGluayAq bGluayA9IGNvcmVfZGMtPmxpbmtzW2xpbmtfaW5kZXhdOwogCi0JYm9vbCByZXN1bHQgPSBkYWxf ZGRjX3NlcnZpY2VfcXVlcnlfZGRjX2RhdGEoCisJZW51bSBkZGNfcmVzdWx0IHIgPSBkYWxfZGRj X3NlcnZpY2Vfd3JpdGVfZHBjZF9kYXRhKAogCQkJbGluay0+ZGRjLAorCQkJZmFsc2UsCisJCQlJ MkNfTU9UX1VOREVGLAogCQkJYWRkcmVzcywKLQkJCXdyaXRlX2J1ZiwKLQkJCXdyaXRlX3NpemUs Ci0JCQlyZWFkX2J1ZiwKLQkJCXJlYWRfc2l6ZSk7Ci0KLQlyZXR1cm4gcmVzdWx0OworCQkJZGF0 YSwKKwkJCXNpemUpOworCXJldHVybiByID09IEREQ19SRVNVTFRfU1VDRVNTRlVMTDsKIH0KIAor Ym9vbCBkY19yZWFkX2F1eF9pMmMoCisJCXN0cnVjdCBkYyAqZGMsCisJCXVpbnQzMl90IGxpbmtf aW5kZXgsCisJCWVudW0gaTJjX21vdF9tb2RlIG1vdCwKKwkJdWludDMyX3QgYWRkcmVzcywKKwkJ dWludDhfdCAqZGF0YSwKKwkJdWludDMyX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgY29yZV9kYyAqY29y ZV9kYyA9IERDX1RPX0NPUkUoZGMpOwogCi1ib29sIGRjX3dyaXRlX2RwY2QoCisJCXN0cnVjdCBj b3JlX2xpbmsgKmxpbmsgPSBjb3JlX2RjLT5saW5rc1tsaW5rX2luZGV4XTsKKwkJZW51bSBkZGNf cmVzdWx0IHIgPSBkYWxfZGRjX3NlcnZpY2VfcmVhZF9kcGNkX2RhdGEoCisJCQlsaW5rLT5kZGMs CisJCQl0cnVlLAorCQkJbW90LAorCQkJYWRkcmVzcywKKwkJCWRhdGEsCisJCQlzaXplKTsKKwkJ cmV0dXJuIHIgPT0gRERDX1JFU1VMVF9TVUNFU1NGVUxMOworfQorCitib29sIGRjX3dyaXRlX2F1 eF9pMmMoCiAJCXN0cnVjdCBkYyAqZGMsCiAJCXVpbnQzMl90IGxpbmtfaW5kZXgsCisJCWVudW0g aTJjX21vdF9tb2RlIG1vdCwKIAkJdWludDMyX3QgYWRkcmVzcywKIAkJY29uc3QgdWludDhfdCAq ZGF0YSwKIAkJdWludDMyX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgY29yZV9kYyAqY29yZV9kYyA9IERD X1RPX0NPUkUoZGMpOwotCiAJc3RydWN0IGNvcmVfbGluayAqbGluayA9IGNvcmVfZGMtPmxpbmtz W2xpbmtfaW5kZXhdOwogCiAJZW51bSBkZGNfcmVzdWx0IHIgPSBkYWxfZGRjX3NlcnZpY2Vfd3Jp dGVfZHBjZF9kYXRhKAogCQkJbGluay0+ZGRjLAorCQkJdHJ1ZSwKKwkJCW1vdCwKIAkJCWFkZHJl c3MsCiAJCQlkYXRhLAogCQkJc2l6ZSk7CiAJcmV0dXJuIHIgPT0gRERDX1JFU1VMVF9TVUNFU1NG VUxMOwogfQogCitib29sIGRjX3F1ZXJ5X2RkY19kYXRhKAorCQlzdHJ1Y3QgZGMgKmRjLAorCQl1 aW50MzJfdCBsaW5rX2luZGV4LAorCQl1aW50MzJfdCBhZGRyZXNzLAorCQl1aW50OF90ICp3cml0 ZV9idWYsCisJCXVpbnQzMl90IHdyaXRlX3NpemUsCisJCXVpbnQ4X3QgKnJlYWRfYnVmLAorCQl1 aW50MzJfdCByZWFkX3NpemUpIHsKKworCXN0cnVjdCBjb3JlX2RjICpjb3JlX2RjID0gRENfVE9f Q09SRShkYyk7CisKKwlzdHJ1Y3QgY29yZV9saW5rICpsaW5rID0gY29yZV9kYy0+bGlua3NbbGlu a19pbmRleF07CisKKwlib29sIHJlc3VsdCA9IGRhbF9kZGNfc2VydmljZV9xdWVyeV9kZGNfZGF0 YSgKKwkJCWxpbmstPmRkYywKKwkJCWFkZHJlc3MsCisJCQl3cml0ZV9idWYsCisJCQl3cml0ZV9z aXplLAorCQkJcmVhZF9idWYsCisJCQlyZWFkX3NpemUpOworCisJcmV0dXJuIHJlc3VsdDsKK30K KwogYm9vbCBkY19zdWJtaXRfaTJjKAogCQlzdHJ1Y3QgZGMgKmRjLAogCQl1aW50MzJfdCBsaW5r X2luZGV4LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUv ZGNfbGluay5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGluay5j CmluZGV4IDc0ZGQyNzJkNzQ1Mi4uMGY4MjVmNjMyNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19saW5rLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGluay5jCkBAIC00NjQsMzkgKzQ2NCw2IEBAIHN0YXRp YyB2b2lkIGxpbmtfZGlzY29ubmVjdF9zaW5rKHN0cnVjdCBjb3JlX2xpbmsgKmxpbmspCiAJbGlu ay0+ZHBjZF9zaW5rX2NvdW50ID0gMDsKIH0KIAotc3RhdGljIGVudW0gZGNfZWRpZF9zdGF0dXMg cmVhZF9lZGlkKAotCXN0cnVjdCBjb3JlX2xpbmsgKmxpbmssCi0Jc3RydWN0IGNvcmVfc2luayAq c2luaykKLXsKLQl1aW50MzJfdCBlZGlkX3JldHJ5ID0gMzsKLQllbnVtIGRjX2VkaWRfc3RhdHVz IGVkaWRfc3RhdHVzOwotCi0JLyogc29tZSBkb25nbGVzIHJlYWQgZWRpZCBpbmNvcnJlY3RseSB0 aGUgZmlyc3QgdGltZSwKLQkgKiBkbyBjaGVjayBzdW0gYW5kIHJldHJ5IHRvIG1ha2Ugc3VyZSBy ZWFkIGNvcnJlY3QgZWRpZC4KLQkgKi8KLQlkbyB7Ci0JCXNpbmstPnB1YmxpYy5kY19lZGlkLmxl bmd0aCA9Ci0JCQkJZGFsX2RkY19zZXJ2aWNlX2VkaWRfcXVlcnkobGluay0+ZGRjKTsKLQotCQlp ZiAoMCA9PSBzaW5rLT5wdWJsaWMuZGNfZWRpZC5sZW5ndGgpCi0JCQlyZXR1cm4gRURJRF9OT19S RVNQT05TRTsKLQotCQlkYWxfZGRjX3NlcnZpY2VfZ2V0X2VkaWRfYnVmKGxpbmstPmRkYywKLQkJ CQlzaW5rLT5wdWJsaWMuZGNfZWRpZC5yYXdfZWRpZCk7Ci0JCWVkaWRfc3RhdHVzID0gZG1faGVs cGVyc19wYXJzZV9lZGlkX2NhcHMoCi0JCQkJc2luay0+Y3R4LAotCQkJCSZzaW5rLT5wdWJsaWMu ZGNfZWRpZCwKLQkJCQkmc2luay0+cHVibGljLmVkaWRfY2Fwcyk7Ci0JCS0tZWRpZF9yZXRyeTsK LQkJaWYgKGVkaWRfc3RhdHVzID09IEVESURfQkFEX0NIRUNLU1VNKQotCQkJZG1fbG9nZ2VyX3dy aXRlKGxpbmstPmN0eC0+bG9nZ2VyLCBMT0dfV0FSTklORywKLQkJCQkJIkJhZCBFRElEIGNoZWNr c3VtLCByZXRyeSByZW1haW46ICVkXG4iLAotCQkJCQllZGlkX3JldHJ5KTsKLQl9IHdoaWxlIChl ZGlkX3N0YXR1cyA9PSBFRElEX0JBRF9DSEVDS1NVTSAmJiBlZGlkX3JldHJ5ID4gMCk7Ci0KLQly ZXR1cm4gZWRpZF9zdGF0dXM7Ci19Ci0KIHN0YXRpYyB2b2lkIGRldGVjdF9kcCgKIAlzdHJ1Y3Qg Y29yZV9saW5rICpsaW5rLAogCXN0cnVjdCBkaXNwbGF5X3NpbmtfY2FwYWJpbGl0eSAqc2lua19j YXBzLApAQCAtNjczLDYgKzY0MCw5IEBAIGJvb2wgZGNfbGlua19kZXRlY3QoY29uc3Qgc3RydWN0 IGRjX2xpbmsgKmRjX2xpbmssIGJvb2wgYm9vdCkKIAkJCQkJCWxpbmstPmRkYywKIAkJCQkJCXNp bmtfY2Fwcy50cmFuc2FjdGlvbl90eXBlKTsKIAorCQlsaW5rLT5wdWJsaWMuYXV4X21vZGUgPSBk YWxfZGRjX3NlcnZpY2VfaXNfaW5fYXV4X3RyYW5zYWN0aW9uX21vZGUoCisJCQkJbGluay0+ZGRj KTsKKwogCQlzaW5rX2luaXRfZGF0YS5saW5rID0gJmxpbmstPnB1YmxpYzsKIAkJc2lua19pbml0 X2RhdGEuc2lua19zaWduYWwgPSBzaW5rX2NhcHMuc2lnbmFsOwogCkBAIC02ODgsNyArNjU4LDEw IEBAIGJvb2wgZGNfbGlua19kZXRlY3QoY29uc3Qgc3RydWN0IGRjX2xpbmsgKmRjX2xpbmssIGJv b2wgYm9vdCkKIAkJc2luayA9IERDX1NJTktfVE9fQ09SRShkY19zaW5rKTsKIAkJbGluay0+cHVi bGljLmxvY2FsX3NpbmsgPSAmc2luay0+cHVibGljOwogCi0JCWVkaWRfc3RhdHVzID0gcmVhZF9l ZGlkKGxpbmssIHNpbmspOworCQllZGlkX3N0YXR1cyA9IGRtX2hlbHBlcnNfcmVhZF9sb2NhbF9l ZGlkKAorCQkJCWxpbmstPmN0eCwKKwkJCQkmbGluay0+cHVibGljLAorCQkJCSZzaW5rLT5wdWJs aWMpOwogCiAJCXN3aXRjaCAoZWRpZF9zdGF0dXMpIHsKIAkJY2FzZSBFRElEX0JBRF9DSEVDS1NV TToKQEAgLTE1MDAsMTEgKzE0NzMsMTMgQEAgYm9vbCBkY19saW5rX3NldHVwX3Bzcihjb25zdCBz dHJ1Y3QgZGNfbGluayAqZGNfbGluaywKIAkJCSAqLwogCQkJcHNyX2NvbmZpZ3VyYXRpb24uYml0 cy5JUlFfSFBEX1dJVEhfQ1JDX0VSUk9SICAgID0gMTsKIAkJfQotCQlkYWxfZGRjX3NlcnZpY2Vf d3JpdGVfZHBjZF9kYXRhKAotCQkJCQlsaW5rLT5kZGMsCi0JCQkJCTM2OCwKLQkJCQkJJnBzcl9j b25maWd1cmF0aW9uLnJhdywKLQkJCQkJc2l6ZW9mKHBzcl9jb25maWd1cmF0aW9uLnJhdykpOwor CisJCWRtX2hlbHBlcnNfZHBfd3JpdGVfZHBjZCgKKwkJCWxpbmstPmN0eCwKKwkJCWRjX2xpbmss CisJCQkzNjgsCisJCQkmcHNyX2NvbmZpZ3VyYXRpb24ucmF3LAorCQkJc2l6ZW9mKHBzcl9jb25m aWd1cmF0aW9uLnJhdykpOwogCiAJCXBzcl9jb250ZXh0LmNoYW5uZWwgPSBsaW5rLT5kZGMtPmRk Y19waW4tPmh3X2luZm8uZGRjX2NoYW5uZWw7CiAJCWlmIChwc3JfY29udGV4dC5jaGFubmVsID09 IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19s aW5rX2RkYy5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGlua19k ZGMuYwppbmRleCA0ZTk0NjViNjMwZDEuLjJmNWE4OWM1YjA2MyAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGlua19kZGMuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvY29yZS9kY19saW5rX2RkYy5jCkBAIC01OCwzMCArNTgs NiBAQCBzdHJ1Y3QgZHBfaGRtaV9kb25nbGVfc2lnbmF0dXJlX2RhdGEgewogCXVpbnQ4X3QgZW90 Oy8qIGVuZCBvZiB0cmFuc21pdGlvbiAnXHg0JyAqLwogfTsKIAotLyogQWRkcmVzcyByYW5nZSBm cm9tIDB4MDAgdG8gMHgxRi4qLwotI2RlZmluZSBEUF9BREFQVE9SX1RZUEUyX1NJWkUgMHgyMAot I2RlZmluZSBEUF9BREFQVE9SX1RZUEUyX1JFR19JRCAweDEwCi0jZGVmaW5lIERQX0FEQVBUT1Jf VFlQRTJfUkVHX01BWF9UTURTX0NMSyAweDFECi0vKiBJZGVudGlmaWVzIGFkYXB0b3IgYXMgRHVh bC1tb2RlIGFkYXB0b3IgKi8KLSNkZWZpbmUgRFBfQURBUFRPUl9UWVBFMl9JRCAweEEwCi0vKiBN SHoqLwotI2RlZmluZSBEUF9BREFQVE9SX1RZUEUyX01BWF9UTURTX0NMSyA2MDAKLS8qIE1Ieiov Ci0jZGVmaW5lIERQX0FEQVBUT1JfVFlQRTJfTUlOX1RNRFNfQ0xLIDI1Ci0vKiBrSFoqLwotI2Rl ZmluZSBEUF9BREFQVE9SX0RWSV9NQVhfVE1EU19DTEsgMTY1MDAwCi0vKiBrSFoqLwotI2RlZmlu ZSBEUF9BREFQVE9SX0hETUlfU0FGRV9NQVhfVE1EU19DTEsgMTY1MDAwCi0KLSNkZWZpbmUgRERD X0kyQ19DT01NQU5EX0VOR0lORSBJMkNfQ09NTUFORF9FTkdJTkVfU1cKLQotZW51bSBlZGlkX3Jl YWRfcmVzdWx0IHsKLQlFRElEX1JFQURfUkVTVUxUX0VESURfTUFUQ0ggPSAwLAotCUVESURfUkVB RF9SRVNVTFRfRURJRF9NSVNNQVRDSCwKLQlFRElEX1JFQURfUkVTVUxUX0NIRUNLU1VNX1JFQURf RVJSLAotCUVESURfUkVBRF9SRVNVTFRfVkVORE9SX1JFQURfRVJSCi19OwotCiAvKiBTQ0RDIEFk ZHJlc3MgZGVmaW5lcyAoSERNSSAyLjApKi8KICNkZWZpbmUgSERNSV9TQ0RDX1dSSVRFX1VQREFU RV8wX0FSUkFZIDMKICNkZWZpbmUgSERNSV9TQ0RDX0FERFJFU1MgIDB4NTQKQEAgLTM5Miw3ICsz NjgsNyBAQCBzdGF0aWMgdWludDMyX3QgZGVmZXJfZGVsYXlfY29udmVydGVyX3dhKAogCiAjZGVm aW5lIERQX1RSQU5TTEFUT1JfREVMQVkgNQogCi1zdGF0aWMgdWludDMyX3QgZ2V0X2RlZmVyX2Rl bGF5KHN0cnVjdCBkZGNfc2VydmljZSAqZGRjKQordWludDMyX3QgZ2V0X2RlZmVyX2RlbGF5KHN0 cnVjdCBkZGNfc2VydmljZSAqZGRjKQogewogCXVpbnQzMl90IGRlZmVyX2RlbGF5ID0gMDsKIApA QCAtNDUxLDMwNyArNDI3LDYgQEAgc3RhdGljIGJvb2wgaTJjX3JlYWQoCiAJCQkmY29tbWFuZCk7 CiB9CiAKLXN0YXRpYyB1aW50OF90IGF1eF9yZWFkX2VkaWRfYmxvY2soCi0Jc3RydWN0IGRkY19z ZXJ2aWNlICpkZGMsCi0JdWludDhfdCBhZGRyZXNzLAotCXVpbnQ4X3QgaW5kZXgsCi0JdWludDhf dCAqYnVmKQotewotCXN0cnVjdCBhdXhfY29tbWFuZCBjbWQgPSB7Ci0JCS5wYXlsb2FkcyA9IE5V TEwsCi0JCS5udW1iZXJfb2ZfcGF5bG9hZHMgPSAwLAotCQkuZGVmZXJfZGVsYXkgPSBnZXRfZGVm ZXJfZGVsYXkoZGRjKSwKLQkJLm1heF9kZWZlcl93cml0ZV9yZXRyeSA9IDAgfTsKLQotCXVpbnQ4 X3QgcmV0cmlldmVkID0gMDsKLQl1aW50OF90IGJhc2Vfb2Zmc2V0ID0KLQkJKGluZGV4ICUgRERD X0VESURfQkxPQ0tTX1BFUl9TRUdNRU5UKSAqIEREQ19FRElEX0JMT0NLX1NJWkU7Ci0JdWludDhf dCBzZWdtZW50ID0gaW5kZXggLyBERENfRURJRF9CTE9DS1NfUEVSX1NFR01FTlQ7Ci0KLQlmb3Ig KHJldHJpZXZlZCA9IDA7IHJldHJpZXZlZCA8IEREQ19FRElEX0JMT0NLX1NJWkU7Ci0JCXJldHJp ZXZlZCArPSBERUZBVUxUX0FVWF9NQVhfREFUQV9TSVpFKSB7Ci0KLQkJdWludDhfdCBvZmZzZXQg PSBiYXNlX29mZnNldCArIHJldHJpZXZlZDsKLQotCQlzdHJ1Y3QgYXV4X3BheWxvYWQgcGF5bG9h ZHNbM10gPSB7Ci0JCQl7Ci0JCQkuaTJjX292ZXJfYXV4ID0gdHJ1ZSwKLQkJCS53cml0ZSA9IHRy dWUsCi0JCQkuYWRkcmVzcyA9IEREQ19FRElEX1NFR01FTlRfQUREUkVTUywKLQkJCS5sZW5ndGgg PSAxLAotCQkJLmRhdGEgPSAmc2VnbWVudCB9LAotCQkJewotCQkJLmkyY19vdmVyX2F1eCA9IHRy dWUsCi0JCQkud3JpdGUgPSB0cnVlLAotCQkJLmFkZHJlc3MgPSBhZGRyZXNzLAotCQkJLmxlbmd0 aCA9IDEsCi0JCQkuZGF0YSA9ICZvZmZzZXQgfSwKLQkJCXsKLQkJCS5pMmNfb3Zlcl9hdXggPSB0 cnVlLAotCQkJLndyaXRlID0gZmFsc2UsCi0JCQkuYWRkcmVzcyA9IGFkZHJlc3MsCi0JCQkubGVu Z3RoID0gREVGQVVMVF9BVVhfTUFYX0RBVEFfU0laRSwKLQkJCS5kYXRhID0gJmJ1ZltyZXRyaWV2 ZWRdIH0gfTsKLQotCQlpZiAoc2VnbWVudCA9PSAwKSB7Ci0JCQljbWQucGF5bG9hZHMgPSAmcGF5 bG9hZHNbMV07Ci0JCQljbWQubnVtYmVyX29mX3BheWxvYWRzID0gMjsKLQkJfSBlbHNlIHsKLQkJ CWNtZC5wYXlsb2FkcyA9IHBheWxvYWRzOwotCQkJY21kLm51bWJlcl9vZl9wYXlsb2FkcyA9IDM7 Ci0JCX0KLQotCQlpZiAoIWRhbF9pMmNhdXhfc3VibWl0X2F1eF9jb21tYW5kKAotCQkJZGRjLT5j dHgtPmkyY2F1eCwKLQkJCWRkYy0+ZGRjX3BpbiwKLQkJCSZjbWQpKQotCQkJLyogY2Fubm90IHJl YWQsIGJyZWFrKi8KLQkJCWJyZWFrOwotCX0KLQotCS8qIFJlc2V0IHNlZ21lbnQgdG8gMC4gTmVl ZGVkIGJ5IHNvbWUgcGFuZWxzICovCi0JaWYgKDAgIT0gc2VnbWVudCkgewotCQlzdHJ1Y3QgYXV4 X3BheWxvYWQgcGF5bG9hZHNbMV0gPSB7IHsKLQkJCS5pMmNfb3Zlcl9hdXggPSB0cnVlLAotCQkJ LndyaXRlID0gdHJ1ZSwKLQkJCS5hZGRyZXNzID0gRERDX0VESURfU0VHTUVOVF9BRERSRVNTLAot CQkJLmxlbmd0aCA9IDEsCi0JCQkuZGF0YSA9ICZzZWdtZW50IH0gfTsKLQkJYm9vbCByZXN1bHQg PSBmYWxzZTsKLQotCQlzZWdtZW50ID0gMDsKLQotCQljbWQubnVtYmVyX29mX3BheWxvYWRzID0g QVJSQVlfU0laRShwYXlsb2Fkcyk7Ci0JCWNtZC5wYXlsb2FkcyA9IHBheWxvYWRzOwotCi0JCXJl c3VsdCA9IGRhbF9pMmNhdXhfc3VibWl0X2F1eF9jb21tYW5kKAotCQkJZGRjLT5jdHgtPmkyY2F1 eCwKLQkJCWRkYy0+ZGRjX3BpbiwKLQkJCSZjbWQpOwotCi0JCWlmIChmYWxzZSA9PSByZXN1bHQp Ci0JCQlkbV9sb2dnZXJfd3JpdGUoCi0JCQkJZGRjLT5jdHgtPmxvZ2dlciwgTE9HX0VSUk9SLAot CQkJCSIlczogV3JpdGluZyBvZiBFRElEIFNlZ21lbnQgKDB4MzApIGZhaWxlZCFcbiIsCi0JCQkJ X19mdW5jX18pOwotCX0KLQotCXJldHVybiByZXRyaWV2ZWQ7Ci19Ci0KLXN0YXRpYyB1aW50OF90 IGkyY19yZWFkX2VkaWRfYmxvY2soCi0Jc3RydWN0IGRkY19zZXJ2aWNlICpkZGMsCi0JdWludDhf dCBhZGRyZXNzLAotCXVpbnQ4X3QgaW5kZXgsCi0JdWludDhfdCAqYnVmKQotewotCWJvb2wgcmV0 ID0gZmFsc2U7Ci0JdWludDhfdCBvZmZzZXQgPSAoaW5kZXggJSBERENfRURJRF9CTE9DS1NfUEVS X1NFR01FTlQpICoKLQkJRERDX0VESURfQkxPQ0tfU0laRTsKLQl1aW50OF90IHNlZ21lbnQgPSBp bmRleCAvIEREQ19FRElEX0JMT0NLU19QRVJfU0VHTUVOVDsKLQotCXN0cnVjdCBpMmNfY29tbWFu ZCBjbWQgPSB7Ci0JCS5wYXlsb2FkcyA9IE5VTEwsCi0JCS5udW1iZXJfb2ZfcGF5bG9hZHMgPSAw LAotCQkuZW5naW5lID0gRERDX0kyQ19DT01NQU5EX0VOR0lORSwKLQkJLnNwZWVkID0gZGRjLT5j dHgtPmRjLT5jYXBzLmkyY19zcGVlZF9pbl9raHogfTsKLQotCXN0cnVjdCBpMmNfcGF5bG9hZCBw YXlsb2Fkc1szXSA9IHsKLQkJewotCQkud3JpdGUgPSB0cnVlLAotCQkuYWRkcmVzcyA9IEREQ19F RElEX1NFR01FTlRfQUREUkVTUywKLQkJLmxlbmd0aCA9IDEsCi0JCS5kYXRhID0gJnNlZ21lbnQg fSwKLQkJewotCQkud3JpdGUgPSB0cnVlLAotCQkuYWRkcmVzcyA9IGFkZHJlc3MsCi0JCS5sZW5n dGggPSAxLAotCQkuZGF0YSA9ICZvZmZzZXQgfSwKLQkJewotCQkud3JpdGUgPSBmYWxzZSwKLQkJ LmFkZHJlc3MgPSBhZGRyZXNzLAotCQkubGVuZ3RoID0gRERDX0VESURfQkxPQ0tfU0laRSwKLQkJ LmRhdGEgPSBidWYgfSB9OwotLyoKLSAqIFNvbWUgSTJDIGVuZ2luZXMgZG9uJ3QgaGFuZGxlIHN0 b3Avc3RhcnQgYmV0d2VlbiB3cml0ZS1vZmZzZXQgYW5kIHJlYWQtZGF0YQotICogY29tbWFuZHMg cHJvcGVybHkuIEZvciB0aG9zZSBkaXNwbGF5cywgd2UgaGF2ZSB0byBmb3JjZSB0aGUgbmV3ZXIg RS1EREMKLSAqIGJlaGF2aW9yIG9mIHJlcGVhdGVkLXN0YXJ0IHdoaWNoIGNhbiBiZSBlbmFibGVk IGJ5IHJ1bnRpbWUgcGFyYW1ldGVyLiAqLwotLyogT3JpZ2luYWxseSBpbXBsZW1lbnRlZCBmb3Ig T25MaXZlIHVzaW5nIE5YUCByZWNlaXZlciBjaGlwICovCi0KLQlpZiAoaW5kZXggPT0gMCAmJiAh ZGRjLT5mbGFncy5GT1JDRV9SRUFEX1JFUEVBVEVEX1NUQVJUKSB7Ci0JCS8qIGJhc2UgYmxvY2ss IHVzZSB1c2UgRERDMkIsIHN1Ym1pdCBhcyAyIGNvbW1hbmRzICovCi0JCWNtZC5wYXlsb2FkcyA9 ICZwYXlsb2Fkc1sxXTsKLQkJY21kLm51bWJlcl9vZl9wYXlsb2FkcyA9IDE7Ci0KLQkJaWYgKGRt X2hlbHBlcnNfc3VibWl0X2kyYygKLQkJCWRkYy0+Y3R4LAotCQkJJmRkYy0+bGluay0+cHVibGlj LAotCQkJJmNtZCkpIHsKLQotCQkJY21kLnBheWxvYWRzID0gJnBheWxvYWRzWzJdOwotCQkJY21k Lm51bWJlcl9vZl9wYXlsb2FkcyA9IDE7Ci0KLQkJCXJldCA9IGRtX2hlbHBlcnNfc3VibWl0X2ky YygKLQkJCQkJZGRjLT5jdHgsCi0JCQkJCSZkZGMtPmxpbmstPnB1YmxpYywKLQkJCQkJJmNtZCk7 Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIGV4dGVuc2lvbiBibG9jayB1c2UgRS1EREMs IHN1Ym1pdCBhcyAxIGNvbW1hbmQKLQkJICogb3IgaWYgcmVwZWF0ZWQtc3RhcnQgaXMgZm9yY2Vk IGJ5IHJ1bnRpbWUgcGFyYW1ldGVyCi0JCSAqLwotCQlpZiAoc2VnbWVudCAhPSAwKSB7Ci0JCQkv KiBpbmNsdWRlIHNlZ21lbnQgb2Zmc2V0IGluIGNvbW1hbmQqLwotCQkJY21kLnBheWxvYWRzID0g cGF5bG9hZHM7Ci0JCQljbWQubnVtYmVyX29mX3BheWxvYWRzID0gMzsKLQkJfSBlbHNlIHsKLQkJ CS8qIHdlIGFyZSByZWFkaW5nIGZpcnN0IHNlZ21lbnQsCi0JCQkgKiBzZWdtZW50IG9mZnNldCBp cyBub3QgcmVxdWlyZWQgKi8KLQkJCWNtZC5wYXlsb2FkcyA9ICZwYXlsb2Fkc1sxXTsKLQkJCWNt ZC5udW1iZXJfb2ZfcGF5bG9hZHMgPSAyOwotCQl9Ci0KLQkJcmV0ID0gZG1faGVscGVyc19zdWJt aXRfaTJjKAotCQkJCWRkYy0+Y3R4LAotCQkJCSZkZGMtPmxpbmstPnB1YmxpYywKLQkJCQkmY21k KTsKLQl9Ci0KLQlyZXR1cm4gcmV0ID8gRERDX0VESURfQkxPQ0tfU0laRSA6IDA7Ci19Ci0KLXN0 YXRpYyB1aW50MzJfdCBxdWVyeV9lZGlkX2Jsb2NrKAotCXN0cnVjdCBkZGNfc2VydmljZSAqZGRj LAotCXVpbnQ4X3QgYWRkcmVzcywKLQl1aW50OF90IGluZGV4LAotCXVpbnQ4X3QgKmJ1ZiwKLQl1 aW50MzJfdCBzaXplKQotewotCXVpbnQzMl90IHNpemVfcmV0cmlldmVkID0gMDsKLQotCWlmIChz aXplIDwgRERDX0VESURfQkxPQ0tfU0laRSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoZGFsX2RkY19z ZXJ2aWNlX2lzX2luX2F1eF90cmFuc2FjdGlvbl9tb2RlKGRkYykpIHsKLQkJc2l6ZV9yZXRyaWV2 ZWQgPQotCQkJYXV4X3JlYWRfZWRpZF9ibG9jayhkZGMsIGFkZHJlc3MsIGluZGV4LCBidWYpOwot CX0gZWxzZSB7Ci0JCXNpemVfcmV0cmlldmVkID0KLQkJCWkyY19yZWFkX2VkaWRfYmxvY2soZGRj LCBhZGRyZXNzLCBpbmRleCwgYnVmKTsKLQl9Ci0KLQlyZXR1cm4gc2l6ZV9yZXRyaWV2ZWQ7Ci19 Ci0KLSNkZWZpbmUgRERDX0RQQ0RfRURJRF9DSEVDS1NVTV9XUklURV9BRERSRVNTIDB4MjYxCi0j ZGVmaW5lIEREQ19URVNUX0FDS19BRERSRVNTIDB4MjYwCi0jZGVmaW5lIEREQ19EUENEX0VESURf VEVTVF9BQ0sgMHgwNAotI2RlZmluZSBERENfRFBDRF9FRElEX1RFU1RfTUFTSyAweDA0Ci0jZGVm aW5lIEREQ19EUENEX1RFU1RfUkVRVUVTVF9BRERSRVNTIDB4MjE4Ci0KLS8qIEFHIFRPRE8gR08g dGhyb3VnIERNIGNhbGxiYWNrIGhlcmUgbGlrZSBmb3IgRFBDRCAqLwotCi1zdGF0aWMgdm9pZCB3 cml0ZV9kcF9lZGlkX2NoZWNrc3VtKAotCXN0cnVjdCBkZGNfc2VydmljZSAqZGRjLAotCXVpbnQ4 X3QgY2hlY2tzdW0pCi17Ci0JdWludDhfdCBkcGNkX2RhdGE7Ci0KLQlkYWxfZGRjX3NlcnZpY2Vf cmVhZF9kcGNkX2RhdGEoCi0JCWRkYywKLQkJRERDX0RQQ0RfVEVTVF9SRVFVRVNUX0FERFJFU1Ms Ci0JCSZkcGNkX2RhdGEsCi0JCTEpOwotCi0JaWYgKGRwY2RfZGF0YSAmIEREQ19EUENEX0VESURf VEVTVF9NQVNLKSB7Ci0KLQkJZGFsX2RkY19zZXJ2aWNlX3dyaXRlX2RwY2RfZGF0YSgKLQkJCWRk YywKLQkJCUREQ19EUENEX0VESURfQ0hFQ0tTVU1fV1JJVEVfQUREUkVTUywKLQkJCSZjaGVja3N1 bSwKLQkJCTEpOwotCi0JCWRwY2RfZGF0YSA9IEREQ19EUENEX0VESURfVEVTVF9BQ0s7Ci0KLQkJ ZGFsX2RkY19zZXJ2aWNlX3dyaXRlX2RwY2RfZGF0YSgKLQkJCWRkYywKLQkJCUREQ19URVNUX0FD S19BRERSRVNTLAotCQkJJmRwY2RfZGF0YSwKLQkJCTEpOwotCX0KLX0KLQotdWludDMyX3QgZGFs X2RkY19zZXJ2aWNlX2VkaWRfcXVlcnkoc3RydWN0IGRkY19zZXJ2aWNlICpkZGMpCi17Ci0JdWlu dDMyX3QgYnl0ZXNfcmVhZCA9IDA7Ci0JdWludDMyX3QgZXh0X2NudCA9IDA7Ci0KLQl1aW50OF90 IGFkZHJlc3M7Ci0JdWludDMyX3QgaTsKLQotCWZvciAoYWRkcmVzcyA9IEREQ19FRElEX0FERFJF U1NfU1RBUlQ7Ci0JCWFkZHJlc3MgPD0gRERDX0VESURfQUREUkVTU19FTkQ7ICsrYWRkcmVzcykg ewotCi0JCWJ5dGVzX3JlYWQgPSBxdWVyeV9lZGlkX2Jsb2NrKAotCQkJZGRjLAotCQkJYWRkcmVz cywKLQkJCTAsCi0JCQlkZGMtPmVkaWRfYnVmLAotCQkJc2l6ZW9mKGRkYy0+ZWRpZF9idWYpIC0g Ynl0ZXNfcmVhZCk7Ci0KLQkJaWYgKGJ5dGVzX3JlYWQgIT0gRERDX0VESURfQkxPQ0tfU0laRSkK LQkJCWNvbnRpbnVlOwotCi0JCS8qIGdldCB0aGUgbnVtYmVyIG9mIGV4dCBibG9ja3MqLwotCQll eHRfY250ID0gZGRjLT5lZGlkX2J1ZltERENfRURJRF9FWFRfQ09VTlRfT0ZGU0VUXTsKLQotCQkv KiBFRElEIDIuMCwgbmVlZCB0byByZWFkIDEgbW9yZSBibG9jayBiZWNhdXNlIEVESUQyLjAgaXMK LQkJICogMjU2IGJ5dGUgaW4gc2l6ZSovCi0JCWlmIChkZGMtPmVkaWRfYnVmW0REQ19FRElEXzIw X1NJR05BVFVSRV9PRkZTRVRdID09Ci0JCQlERENfRURJRF8yMF9TSUdOQVRVUkUpCi0JCQkJZXh0 X2NudCA9IDE7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGV4dF9jbnQ7IGkrKykgewotCQkJLyogcmVh ZCBhZGRpdGlvbmFsIGV4dCBibG9ja3MgYWNjb3JkaW5nbHkgKi8KLQkJCWJ5dGVzX3JlYWQgKz0g cXVlcnlfZWRpZF9ibG9jaygKLQkJCQkJZGRjLAotCQkJCQlhZGRyZXNzLAotCQkJCQlpKzEsCi0J CQkJCSZkZGMtPmVkaWRfYnVmW2J5dGVzX3JlYWRdLAotCQkJCQlzaXplb2YoZGRjLT5lZGlkX2J1 ZikgLSBieXRlc19yZWFkKTsKLQkJfQotCi0JCS8qdGhpcyBpcyBzcGVjaWFsIGNvZGUgcGF0aCBm b3IgRFAgY29tcGxpYW5jZSovCi0JCWlmIChERENfVFJBTlNBQ1RJT05fVFlQRV9JMkNfT1ZFUl9B VVggPT0gZGRjLT50cmFuc2FjdGlvbl90eXBlKQotCQkJd3JpdGVfZHBfZWRpZF9jaGVja3N1bSgK LQkJCQlkZGMsCi0JCQkJZGRjLT5lZGlkX2J1ZlsoZXh0X2NudCAqIEREQ19FRElEX0JMT0NLX1NJ WkUpICsKLQkJCQlERENfRURJRDFYX0NIRUNLU1VNX09GRlNFVF0pOwotCi0JCS8qcmVtZW1iZXJz IHRoZSBhZGRyZXNzIHdoZXJlIHdlIGZldGNoIHRoZSBFRElEIGZyb20KLQkJICogZm9yIGxhdGVy IHNpZ25hdHVyZSBjaGVjayB1c2UgKi8KLQkJZGRjLT5hZGRyZXNzID0gYWRkcmVzczsKLQotCQli cmVhazsvKiBhbHJlYWR5IHJlYWQgZWRpZCwgZG9uZSovCi0JfQotCi0JZGRjLT5lZGlkX2J1Zl9s ZW4gPSBieXRlc19yZWFkOwotCXJldHVybiBieXRlc19yZWFkOwotfQotCi11aW50MzJfdCBkYWxf ZGRjX3NlcnZpY2VfZ2V0X2VkaWRfYnVmX2xlbihzdHJ1Y3QgZGRjX3NlcnZpY2UgKmRkYykKLXsK LQlyZXR1cm4gZGRjLT5lZGlkX2J1Zl9sZW47Ci19Ci0KLXZvaWQgZGFsX2RkY19zZXJ2aWNlX2dl dF9lZGlkX2J1ZihzdHJ1Y3QgZGRjX3NlcnZpY2UgKmRkYywgdWludDhfdCAqZWRpZF9idWYpCi17 Ci0JbWVtbW92ZShlZGlkX2J1ZiwKLQkJCWRkYy0+ZWRpZF9idWYsIGRkYy0+ZWRpZF9idWZfbGVu KTsKLX0KLQogdm9pZCBkYWxfZGRjX3NlcnZpY2VfaTJjX3F1ZXJ5X2RwX2R1YWxfbW9kZV9hZGFw dG9yKAogCXN0cnVjdCBkZGNfc2VydmljZSAqZGRjLAogCXN0cnVjdCBkaXNwbGF5X3NpbmtfY2Fw YWJpbGl0eSAqc2lua19jYXApCkBAIC05NjAsMTIgKzYzNSwxNCBAQCBib29sIGRhbF9kZGNfc2Vy dmljZV9xdWVyeV9kZGNfZGF0YSgKIAogZW51bSBkZGNfcmVzdWx0IGRhbF9kZGNfc2VydmljZV9y ZWFkX2RwY2RfZGF0YSgKIAlzdHJ1Y3QgZGRjX3NlcnZpY2UgKmRkYywKKwlib29sIGkyYywKKwll bnVtIGkyY19tb3RfbW9kZSBtb3QsCiAJdWludDMyX3QgYWRkcmVzcywKIAl1aW50OF90ICpkYXRh LAogCXVpbnQzMl90IGxlbikKIHsKIAlzdHJ1Y3QgYXV4X3BheWxvYWQgcmVhZF9wYXlsb2FkID0g ewotCQkuaTJjX292ZXJfYXV4ID0gZmFsc2UsCisJCS5pMmNfb3Zlcl9hdXggPSBpMmMsCiAJCS53 cml0ZSA9IGZhbHNlLAogCQkuYWRkcmVzcyA9IGFkZHJlc3MsCiAJCS5sZW5ndGggPSBsZW4sCkBA IC05NzYsNiArNjUzLDcgQEAgZW51bSBkZGNfcmVzdWx0IGRhbF9kZGNfc2VydmljZV9yZWFkX2Rw Y2RfZGF0YSgKIAkJLm51bWJlcl9vZl9wYXlsb2FkcyA9IDEsCiAJCS5kZWZlcl9kZWxheSA9IDAs CiAJCS5tYXhfZGVmZXJfd3JpdGVfcmV0cnkgPSAwLAorCQkubW90ID0gbW90CiAJfTsKIAogCWlm IChsZW4gPiBERUZBVUxUX0FVWF9NQVhfREFUQV9TSVpFKSB7CkBAIC05OTQsMTIgKzY3MiwxNCBA QCBlbnVtIGRkY19yZXN1bHQgZGFsX2RkY19zZXJ2aWNlX3JlYWRfZHBjZF9kYXRhKAogCiBlbnVt IGRkY19yZXN1bHQgZGFsX2RkY19zZXJ2aWNlX3dyaXRlX2RwY2RfZGF0YSgKIAlzdHJ1Y3QgZGRj X3NlcnZpY2UgKmRkYywKKwlib29sIGkyYywKKwllbnVtIGkyY19tb3RfbW9kZSBtb3QsCiAJdWlu dDMyX3QgYWRkcmVzcywKIAljb25zdCB1aW50OF90ICpkYXRhLAogCXVpbnQzMl90IGxlbikKIHsK IAlzdHJ1Y3QgYXV4X3BheWxvYWQgd3JpdGVfcGF5bG9hZCA9IHsKLQkJLmkyY19vdmVyX2F1eCA9 IGZhbHNlLAorCQkuaTJjX292ZXJfYXV4ID0gaTJjLAogCQkud3JpdGUgPSB0cnVlLAogCQkuYWRk cmVzcyA9IGFkZHJlc3MsCiAJCS5sZW5ndGggPSBsZW4sCkBAIC0xMDEwLDYgKzY5MCw3IEBAIGVu dW0gZGRjX3Jlc3VsdCBkYWxfZGRjX3NlcnZpY2Vfd3JpdGVfZHBjZF9kYXRhKAogCQkubnVtYmVy X29mX3BheWxvYWRzID0gMSwKIAkJLmRlZmVyX2RlbGF5ID0gMCwKIAkJLm1heF9kZWZlcl93cml0 ZV9yZXRyeSA9IDAsCisJCS5tb3QgPSBtb3QKIAl9OwogCiAJaWYgKGxlbiA+IERFRkFVTFRfQVVY X01BWF9EQVRBX1NJWkUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9kYy9jb3JlL2RjX2xpbmtfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9j b3JlL2RjX2xpbmtfZHAuYwppbmRleCA2Y2ZkODgwODYwNDQuLjgwMmQ4Y2M5OWVhMyAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2NvcmUvZGNfbGlua19kcC5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9jb3JlL2RjX2xpbmtfZHAuYwpAQCAt MTQ4MSwyMiArMTQ4MSwyNSBAQCBzdGF0aWMgYm9vbCBoYW5kbGVfaHBkX2lycV9wc3Jfc2luayhj b25zdCBzdHJ1Y3QgY29yZV9saW5rICpsaW5rKQogCWlmIChsaW5rLT5wdWJsaWMucHNyX2NhcHMu cHNyX3ZlcnNpb24gPT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JZGFsX2RkY19zZXJ2aWNlX3Jl YWRfZHBjZF9kYXRhKAotCQkJCQlsaW5rLT5kZGMsCi0JCQkJCTM2OCAvKkRwY2RBZGRyZXNzX1BT Ul9FbmFibGVfQ2ZnKi8sCi0JCQkJCSZwc3JfY29uZmlndXJhdGlvbi5yYXcsCi0JCQkJCXNpemVv Zihwc3JfY29uZmlndXJhdGlvbi5yYXcpKTsKKwlkbV9oZWxwZXJzX2RwX3JlYWRfZHBjZCgKKwkJ bGluay0+Y3R4LAorCQkmbGluay0+cHVibGljLAorCQkzNjgsLypEcGNkQWRkcmVzc19QU1JfRW5h YmxlX0NmZyovCisJCSZwc3JfY29uZmlndXJhdGlvbi5yYXcsCisJCXNpemVvZihwc3JfY29uZmln dXJhdGlvbi5yYXcpKTsKKwogCiAJaWYgKHBzcl9jb25maWd1cmF0aW9uLmJpdHMuRU5BQkxFKSB7 CiAJCXVuc2lnbmVkIGNoYXIgZHBjZGJ1ZlszXSA9IHswfTsKIAkJdW5pb24gcHNyX2Vycm9yX3N0 YXR1cyBwc3JfZXJyb3Jfc3RhdHVzOwogCQl1bmlvbiBwc3Jfc2lua19wc3Jfc3RhdHVzIHBzcl9z aW5rX3Bzcl9zdGF0dXM7CiAKLQkJZGFsX2RkY19zZXJ2aWNlX3JlYWRfZHBjZF9kYXRhKAotCQkJ CQlsaW5rLT5kZGMsCi0JCQkJCTB4MjAwNiAvKkRwY2RBZGRyZXNzX1BTUl9FcnJvcl9TdGF0dXMq LywKLQkJCQkJKHVuc2lnbmVkIGNoYXIgKikgZHBjZGJ1ZiwKLQkJCQkJc2l6ZW9mKGRwY2RidWYp KTsKKwkJZG1faGVscGVyc19kcF9yZWFkX2RwY2QoCisJCQlsaW5rLT5jdHgsCisJCQkmbGluay0+ cHVibGljLAorCQkJMHgyMDA2LCAvKkRwY2RBZGRyZXNzX1BTUl9FcnJvcl9TdGF0dXMqLworCQkJ KHVuc2lnbmVkIGNoYXIgKikgZHBjZGJ1ZiwKKwkJCXNpemVvZihkcGNkYnVmKSk7CiAKIAkJLypE UENEIDIwMDZoICAgRVJST1IgU1RBVFVTKi8KIAkJcHNyX2Vycm9yX3N0YXR1cy5yYXcgPSBkcGNk YnVmWzBdOwpAQCAtMTUwNiw5ICsxNTA5LDEwIEBAIHN0YXRpYyBib29sIGhhbmRsZV9ocGRfaXJx X3Bzcl9zaW5rKGNvbnN0IHN0cnVjdCBjb3JlX2xpbmsgKmxpbmspCiAJCWlmIChwc3JfZXJyb3Jf c3RhdHVzLmJpdHMuTElOS19DUkNfRVJST1IgfHwKIAkJCQlwc3JfZXJyb3Jfc3RhdHVzLmJpdHMu UkZCX1NUT1JBR0VfRVJST1IpIHsKIAkJCS8qIEFja25vd2xlZGdlIGFuZCBjbGVhciBlcnJvciBi aXRzICovCi0JCQlkYWxfZGRjX3NlcnZpY2Vfd3JpdGVfZHBjZF9kYXRhKAotCQkJCWxpbmstPmRk YywKLQkJCQk4MTk4IC8qRHBjZEFkZHJlc3NfUFNSX0Vycm9yX1N0YXR1cyovLAorCQkJZG1faGVs cGVyc19kcF93cml0ZV9kcGNkKAorCQkJCWxpbmstPmN0eCwKKwkJCQkmbGluay0+cHVibGljLAor CQkJCTgxOTgsLypEcGNkQWRkcmVzc19QU1JfRXJyb3JfU3RhdHVzKi8KIAkJCQkmcHNyX2Vycm9y X3N0YXR1cy5yYXcsCiAJCQkJc2l6ZW9mKHBzcl9lcnJvcl9zdGF0dXMucmF3KSk7CiAKZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kYy5oIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9kaXNwbGF5L2RjL2RjLmgKaW5kZXggZDI5NjA1NTJjNzhlLi5hMjdhNmFiYTBkZjEg MTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kYy5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kYy5oCkBAIC01OTQsNiArNTk0LDcgQEAgc3Ry dWN0IGRjX2xpbmsgewogCXVuaW9uIGNvbXBsaWFuY2VfdGVzdF9zdGF0ZSBjb21wbGlhbmNlX3Rl c3Rfc3RhdGU7CiAKIAl2b2lkICpwcml2OworCWJvb2wgYXV4X21vZGU7CiB9OwogCiBzdHJ1Y3Qg ZHBjZF9jYXBzIHsKQEAgLTc4OCwyMCArNzg5LDM2IEBAIGNvbnN0IHN0cnVjdCBkZGNfc2Vydmlj ZSAqZGNfZ2V0X2RkY19hdF9pbmRleCgKICAqIERQQ0QgYWNjZXNzIGludGVyZmFjZXMKICAqLwog Ci1ib29sIGRjX3JlYWRfZHBjZCgKK2Jvb2wgZGNfcmVhZF9hdXhfZHBjZCgKIAkJc3RydWN0IGRj ICpkYywKIAkJdWludDMyX3QgbGlua19pbmRleCwKIAkJdWludDMyX3QgYWRkcmVzcywKIAkJdWlu dDhfdCAqZGF0YSwKIAkJdWludDMyX3Qgc2l6ZSk7CiAKLWJvb2wgZGNfd3JpdGVfZHBjZCgKK2Jv b2wgZGNfd3JpdGVfYXV4X2RwY2QoCiAJCXN0cnVjdCBkYyAqZGMsCiAJCXVpbnQzMl90IGxpbmtf aW5kZXgsCiAJCXVpbnQzMl90IGFkZHJlc3MsCiAJCWNvbnN0IHVpbnQ4X3QgKmRhdGEsCiAJCXVp bnQzMl90IHNpemUpOwogCitib29sIGRjX3JlYWRfYXV4X2kyYygKKwkJc3RydWN0IGRjICpkYywK KwkJdWludDMyX3QgbGlua19pbmRleCwKKwkJZW51bSBpMmNfbW90X21vZGUgbW90LAorCQl1aW50 MzJfdCBhZGRyZXNzLAorCQl1aW50OF90ICpkYXRhLAorCQl1aW50MzJfdCBzaXplKTsKKworYm9v bCBkY193cml0ZV9hdXhfaTJjKAorCQlzdHJ1Y3QgZGMgKmRjLAorCQl1aW50MzJfdCBsaW5rX2lu ZGV4LAorCQllbnVtIGkyY19tb3RfbW9kZSBtb3QsCisJCXVpbnQzMl90IGFkZHJlc3MsCisJCWNv bnN0IHVpbnQ4X3QgKmRhdGEsCisJCXVpbnQzMl90IHNpemUpOworCiBib29sIGRjX3F1ZXJ5X2Rk Y19kYXRhKAogCQlzdHJ1Y3QgZGMgKmRjLAogCQl1aW50MzJfdCBsaW5rX2luZGV4LApkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX3R5cGVzLmggYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZGNfdHlwZXMuaAppbmRleCAyNDJkZDdiM2I2YjEuLmUw NDM2ZTMxNzM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2Rj X3R5cGVzLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2RjX3R5cGVzLmgK QEAgLTQ4OSw0ICs0ODksMTAgQEAgc3RydWN0IHBzcl9jYXBzIHsKIAl1bnNpZ25lZCBpbnQgcHNy X3NkcF90cmFuc21pdF9saW5lX251bV9kZWFkbGluZTsKIH07CiAKK2VudW0gaTJjX21vdF9tb2Rl IHsKKwlJMkNfTU9UX1VOREVGLAorCUkyQ19NT1RfVFJVRSwKKwlJMkNfTU9UX0ZBTFNFCit9Owor CiAjZW5kaWYgLyogRENfVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvZGlzcGxheS9kYy9kbV9oZWxwZXJzLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv ZGMvZG1faGVscGVycy5oCmluZGV4IGQ2YzUyZDMxZjBmMC4uYzE1YTI1Y2U4MDQ5IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvZGMvZG1faGVscGVycy5oCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9kbV9oZWxwZXJzLmgKQEAgLTk4LDQgKzk4LDE0 IEBAIGJvb2wgZG1faGVscGVyc19zdWJtaXRfaTJjKAogCQlzdHJ1Y3QgaTJjX2NvbW1hbmQgKmNt ZCk7CiAKIAorCisKKworCitlbnVtIGRjX2VkaWRfc3RhdHVzIGRtX2hlbHBlcnNfcmVhZF9sb2Nh bF9lZGlkKAorCQlzdHJ1Y3QgZGNfY29udGV4dCAqY3R4LAorCQlzdHJ1Y3QgZGNfbGluayAqbGlu aywKKwkJc3RydWN0IGRjX3NpbmsgKnNpbmspOworCisKICNlbmRpZiAvKiBfX0RNX0hFTFBFUlNf XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9p MmNhdXguYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvaTJjYXV4LmMK aW5kZXggYmQ4NGI5MzJhYWFlLi4wNzQzMjY1ZTkzM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvZGlzcGxheS9kYy9pMmNhdXgvaTJjYXV4LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9kaXNwbGF5L2RjL2kyY2F1eC9pMmNhdXguYwpAQCAtMTg1LDYgKzE4NSw3IEBAIGJvb2wg ZGFsX2kyY2F1eF9zdWJtaXRfYXV4X2NvbW1hbmQoCiAJc3RydWN0IGF1eF9lbmdpbmUgKmVuZ2lu ZTsKIAl1aW50OF90IGluZGV4X29mX3BheWxvYWQgPSAwOwogCWJvb2wgcmVzdWx0OworCWJvb2wg bW90OwogCiAJaWYgKCFkZGMpIHsKIAkJQlJFQUtfVE9fREVCVUdHRVIoKTsKQEAgLTIwNywxMiAr MjA4LDE0IEBAIGJvb2wgZGFsX2kyY2F1eF9zdWJtaXRfYXV4X2NvbW1hbmQoCiAJcmVzdWx0ID0g dHJ1ZTsKIAogCXdoaWxlIChpbmRleF9vZl9wYXlsb2FkIDwgY21kLT5udW1iZXJfb2ZfcGF5bG9h ZHMpIHsKLQkJYm9vbCBtb3QgPSAoaW5kZXhfb2ZfcGF5bG9hZCAhPSBjbWQtPm51bWJlcl9vZl9w YXlsb2FkcyAtIDEpOwotCiAJCXN0cnVjdCBhdXhfcGF5bG9hZCAqcGF5bG9hZCA9IGNtZC0+cGF5 bG9hZHMgKyBpbmRleF9vZl9wYXlsb2FkOwotCiAJCXN0cnVjdCBpMmNhdXhfdHJhbnNhY3Rpb25f cmVxdWVzdCByZXF1ZXN0ID0geyAwIH07CiAKKwkJaWYgKGNtZC0+bW90ID09IEkyQ19NT1RfVU5E RUYpCisJCQltb3QgPSAoaW5kZXhfb2ZfcGF5bG9hZCAhPSBjbWQtPm51bWJlcl9vZl9wYXlsb2Fk cyAtIDEpOworCQllbHNlCisJCQltb3QgPSAoY21kLT5tb3QgPT0gSTJDX01PVF9UUlVFKTsKKwog CQlyZXF1ZXN0Lm9wZXJhdGlvbiA9IHBheWxvYWQtPndyaXRlID8KIAkJCUkyQ0FVWF9UUkFOU0FD VElPTl9XUklURSA6CiAJCQlJMkNBVVhfVFJBTlNBQ1RJT05fUkVBRDsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvZGNfbGlua19kZGMuaCBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvZGlzcGxheS9kYy9pbmMvZGNfbGlua19kZGMuaAppbmRleCA4MzBmYzNkMDM5 YzkuLjljMmY2NzBjM2RjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2RjL2luYy9kY19saW5rX2RkYy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9k Yy9pbmMvZGNfbGlua19kZGMuaApAQCAtMzEsNiArMzEsMjMgQEAKIAogI2RlZmluZSBFRElEX1NF R01FTlRfU0laRSAyNTYKIAorLyogQWRkcmVzcyByYW5nZSBmcm9tIDB4MDAgdG8gMHgxRi4qLwor I2RlZmluZSBEUF9BREFQVE9SX1RZUEUyX1NJWkUgMHgyMAorI2RlZmluZSBEUF9BREFQVE9SX1RZ UEUyX1JFR19JRCAweDEwCisjZGVmaW5lIERQX0FEQVBUT1JfVFlQRTJfUkVHX01BWF9UTURTX0NM SyAweDFECisvKiBJZGVudGlmaWVzIGFkYXB0b3IgYXMgRHVhbC1tb2RlIGFkYXB0b3IgKi8KKyNk ZWZpbmUgRFBfQURBUFRPUl9UWVBFMl9JRCAweEEwCisvKiBNSHoqLworI2RlZmluZSBEUF9BREFQ VE9SX1RZUEUyX01BWF9UTURTX0NMSyA2MDAKKy8qIE1IeiovCisjZGVmaW5lIERQX0FEQVBUT1Jf VFlQRTJfTUlOX1RNRFNfQ0xLIDI1CisvKiBrSFoqLworI2RlZmluZSBEUF9BREFQVE9SX0RWSV9N QVhfVE1EU19DTEsgMTY1MDAwCisvKiBrSFoqLworI2RlZmluZSBEUF9BREFQVE9SX0hETUlfU0FG RV9NQVhfVE1EU19DTEsgMTY1MDAwCisKKyNkZWZpbmUgRERDX0kyQ19DT01NQU5EX0VOR0lORSBJ MkNfQ09NTUFORF9FTkdJTkVfU1cKKwogc3RydWN0IGRkY19zZXJ2aWNlOwogc3RydWN0IGdyYXBo aWNzX29iamVjdF9pZDsKIGVudW0gZGRjX3Jlc3VsdDsKQEAgLTgzLDEyICsxMDAsNiBAQCB2b2lk IGRhbF9kZGNfc2VydmljZV9zZXRfdHJhbnNhY3Rpb25fdHlwZSgKIAogYm9vbCBkYWxfZGRjX3Nl cnZpY2VfaXNfaW5fYXV4X3RyYW5zYWN0aW9uX21vZGUoc3RydWN0IGRkY19zZXJ2aWNlICpkZGMp OwogCi11aW50MzJfdCBkYWxfZGRjX3NlcnZpY2VfZWRpZF9xdWVyeShzdHJ1Y3QgZGRjX3NlcnZp Y2UgKmRkYyk7Ci0KLXVpbnQzMl90IGRhbF9kZGNfc2VydmljZV9nZXRfZWRpZF9idWZfbGVuKHN0 cnVjdCBkZGNfc2VydmljZSAqZGRjKTsKLQotdm9pZCBkYWxfZGRjX3NlcnZpY2VfZ2V0X2VkaWRf YnVmKHN0cnVjdCBkZGNfc2VydmljZSAqZGRjLCB1aW50OF90ICplZGlkX2J1Zik7Ci0KIHZvaWQg ZGFsX2RkY19zZXJ2aWNlX2kyY19xdWVyeV9kcF9kdWFsX21vZGVfYWRhcHRvcigKIAkJc3RydWN0 IGRkY19zZXJ2aWNlICpkZGMsCiAJCXN0cnVjdCBkaXNwbGF5X3NpbmtfY2FwYWJpbGl0eSAqc2lu a19jYXApOwpAQCAtMTAzLDEyICsxMTQsMTYgQEAgYm9vbCBkYWxfZGRjX3NlcnZpY2VfcXVlcnlf ZGRjX2RhdGEoCiAKIGVudW0gZGRjX3Jlc3VsdCBkYWxfZGRjX3NlcnZpY2VfcmVhZF9kcGNkX2Rh dGEoCiAJCXN0cnVjdCBkZGNfc2VydmljZSAqZGRjLAorCQlib29sIGkyYywKKwkJZW51bSBpMmNf bW90X21vZGUgbW90LAogCQl1aW50MzJfdCBhZGRyZXNzLAogCQl1aW50OF90ICpkYXRhLAogCQl1 aW50MzJfdCBsZW4pOwogCiBlbnVtIGRkY19yZXN1bHQgZGFsX2RkY19zZXJ2aWNlX3dyaXRlX2Rw Y2RfZGF0YSgKIAkJc3RydWN0IGRkY19zZXJ2aWNlICpkZGMsCisJCWJvb2wgaTJjLAorCQllbnVt IGkyY19tb3RfbW9kZSBtb3QsCiAJCXVpbnQzMl90IGFkZHJlc3MsCiAJCWNvbnN0IHVpbnQ4X3Qg KmRhdGEsCiAJCXVpbnQzMl90IGxlbik7CkBAIC0xMzAsMTYgKzE0NSw3IEBAIHZvaWQgZGFsX2Rk Y19zZXJ2aWNlX3NldF9kZGNfcGluKAogCiBzdHJ1Y3QgZGRjICpkYWxfZGRjX3NlcnZpY2VfZ2V0 X2RkY19waW4oc3RydWN0IGRkY19zZXJ2aWNlICpkZGNfc2VydmljZSk7CiAKLWVudW0gZGRjX3Jl c3VsdCBkYWxfZGRjX3NlcnZpY2VfcmVhZF9kcGNkX2RhdGEoCi0JCXN0cnVjdCBkZGNfc2Vydmlj ZSAqZGRjLAotCQl1aW50MzJfdCBhZGRyZXNzLAotCQl1aW50OF90ICpkYXRhLAotCQl1aW50MzJf dCBsZW4pOwotZW51bSBkZGNfcmVzdWx0IGRhbF9kZGNfc2VydmljZV93cml0ZV9kcGNkX2RhdGEo Ci0JCXN0cnVjdCBkZGNfc2VydmljZSAqZGRjLAotCQl1aW50MzJfdCBhZGRyZXNzLAotCQljb25z dCB1aW50OF90ICpkYXRhLAotCQl1aW50MzJfdCBsZW4pOwordWludDMyX3QgZ2V0X2RlZmVyX2Rl bGF5KHN0cnVjdCBkZGNfc2VydmljZSAqZGRjKTsKIAogI2VuZGlmIC8qIF9fREFMX0REQ19TRVJW SUNFX0hfXyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvaW5j bHVkZS9kZGNfc2VydmljZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2lu Y2x1ZGUvZGRjX3NlcnZpY2VfdHlwZXMuaAppbmRleCBlZmZlMDNiOGY0MTguLjBmZjJhODk5Yjhm NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvZGRjX3Nl cnZpY2VfdHlwZXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvaW5jbHVkZS9k ZGNfc2VydmljZV90eXBlcy5oCkBAIC0xMTUsMzQgKzExNSw2IEBAIHN0cnVjdCBhdl9zeW5jX2Rh dGEgewogCXVpbnQ4X3QgYXVkX2RlbF9pbnMzOy8qIERQQ0QgMDAwMkRoICovCiB9OwogCi0vKiog RURJRCByZXRyaWV2YWwgcmVsYXRlZCBjb25zdGFudHMsIGFsc28gdXNlZCBieSBNc3RNZ3IgKiov Ci0KLSNkZWZpbmUgRERDX0VESURfU0VHTUVOVF9TSVpFIDI1NgotI2RlZmluZSBERENfRURJRF9C TE9DS19TSVpFIDEyOAotI2RlZmluZSBERENfRURJRF9CTE9DS1NfUEVSX1NFR01FTlQgXAotCShE RENfRURJRF9TRUdNRU5UX1NJWkUgLyBERENfRURJRF9CTE9DS19TSVpFKQotCi0jZGVmaW5lIERE Q19FRElEX0VYVF9DT1VOVF9PRkZTRVQgMHg3RQotCi0jZGVmaW5lIEREQ19FRElEX0FERFJFU1Nf U1RBUlQgMHg1MAotI2RlZmluZSBERENfRURJRF9BRERSRVNTX0VORCAweDUyCi0jZGVmaW5lIERE Q19FRElEX1NFR01FTlRfQUREUkVTUyAweDMwCi0KLS8qIHNpZ25hdHVyZXMgZm9yIEVkaWQgMXgg Ki8KLSNkZWZpbmUgRERDX0VESUQxWF9WRU5ET1JJRF9TSUdOQVRVUkVfT0ZGU0VUIDgKLSNkZWZp bmUgRERDX0VESUQxWF9WRU5ET1JJRF9TSUdOQVRVUkVfTEVOIDQKLSNkZWZpbmUgRERDX0VESUQx WF9FWFRfQ05UX0FORF9DSEVDS1NVTV9PRkZTRVQgMTI2Ci0jZGVmaW5lIEREQ19FRElEMVhfRVhU X0NOVF9BTkRfQ0hFQ0tTVU1fTEVOIDIKLSNkZWZpbmUgRERDX0VESUQxWF9DSEVDS1NVTV9PRkZT RVQgMTI3Ci0vKiBzaWduYXR1cmVzIGZvciBFZGlkIDIwKi8KLSNkZWZpbmUgRERDX0VESURfMjBf U0lHTkFUVVJFX09GRlNFVCAwCi0jZGVmaW5lIEREQ19FRElEXzIwX1NJR05BVFVSRSAweDIwCi0K LSNkZWZpbmUgRERDX0VESUQyMF9WRU5ET1JJRF9TSUdOQVRVUkVfT0ZGU0VUIDEKLSNkZWZpbmUg RERDX0VESUQyMF9WRU5ET1JJRF9TSUdOQVRVUkVfTEVOIDQKLSNkZWZpbmUgRERDX0VESUQyMF9D SEVDS1NVTV9PRkZTRVQgMjU1Ci0jZGVmaW5lIEREQ19FRElEMjBfQ0hFQ0tTVU1fTEVOIDEKLQog LypEUCB0byBWR0EgY29udmVydGVyKi8KIHN0YXRpYyBjb25zdCB1aW50OF90IERQX1ZHQV9DT05W RVJURVJfSURfMVtdID0gIm1WR0FhIjsKIC8qRFAgdG8gRHVhbCBsaW5rIERWSSBjb252ZXJ0ZXIq LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaTJjYXV4 X2ludGVyZmFjZS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaTJjYXV4 X2ludGVyZmFjZS5oCmluZGV4IGQyZWMwNGQxYzU5Mi4uMTNhM2M4MmQxMThmIDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvaW5jbHVkZS9pMmNhdXhfaW50ZXJmYWNlLmgK KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L2luY2x1ZGUvaTJjYXV4X2ludGVyZmFj ZS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIF9fREFMX0kyQ0FVWF9JTlRFUkZBQ0VfSF9f CiAjZGVmaW5lIF9fREFMX0kyQ0FVWF9JTlRFUkZBQ0VfSF9fCiAKKyNpbmNsdWRlICJkY190eXBl cy5oIgogI2luY2x1ZGUgImdwaW9fc2VydmljZV9pbnRlcmZhY2UuaCIKIAogCkBAIC01NCw2ICs1 NSw4IEBAIHN0cnVjdCBhdXhfY29tbWFuZCB7CiAKIAkvKiB6ZXJvIG1lYW5zICJ1c2UgZGVmYXVs dCB2YWx1ZSIgKi8KIAl1aW50MzJfdCBtYXhfZGVmZXJfd3JpdGVfcmV0cnk7CisKKwllbnVtIGky Y19tb3RfbW9kZSBtb3Q7CiB9OwogCiB1bmlvbiBhdXhfY29uZmlnIHsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxheS9tb2R1bGVzL2RkY19zZXJ2aWNlL2RkY19zZXJ2aWNl LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9kZGNfc2VydmljZS9kZGNf c2VydmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDIxNzc1 MjdlMjA1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5L21v ZHVsZXMvZGRjX3NlcnZpY2UvZGRjX3NlcnZpY2UuYwpAQCAtMCwwICsxLDM4MSBAQAorLyoKKyAq IENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNo YWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9S IEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIg TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworI2luY2x1ZGUgImRtX3NlcnZpY2Vz LmgiCisjaW5jbHVkZSAiZG1faGVscGVycy5oIgorI2luY2x1ZGUgImdwaW9fc2VydmljZV9pbnRl cmZhY2UuaCIKKyNpbmNsdWRlICJpbmNsdWRlL2RkY19zZXJ2aWNlX3R5cGVzLmgiCisjaW5jbHVk ZSAiaW5jbHVkZS9ncnBoX29iamVjdF9pZC5oIgorI2luY2x1ZGUgImluY2x1ZGUvZHBjZF9kZWZz LmgiCisjaW5jbHVkZSAiaW5jbHVkZS9sb2dnZXJfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiaW5j bHVkZS92ZWN0b3IuaCIKKyNpbmNsdWRlICJjb3JlX3R5cGVzLmgiCisjaW5jbHVkZSAiZGNfbGlu a19kZGMuaCIKKyNpbmNsdWRlICJtb2RfZGRjX3NlcnZpY2UuaCIKKworZW51bSBlZGlkX3JlYWRf cmVzdWx0IHsKKwlFRElEX1JFQURfUkVTVUxUX0VESURfTUFUQ0ggPSAwLAorCUVESURfUkVBRF9S RVNVTFRfRURJRF9NSVNNQVRDSCwKKwlFRElEX1JFQURfUkVTVUxUX0NIRUNLU1VNX1JFQURfRVJS LAorCUVESURfUkVBRF9SRVNVTFRfVkVORE9SX1JFQURfRVJSCit9OworCitzdGF0aWMgdWludDhf dCBhdXhfcmVhZF9lZGlkX2Jsb2NrKAorCXN0cnVjdCBkZGNfc2VydmljZSAqZGRjLAorCXVpbnQ4 X3QgYWRkcmVzcywKKwl1aW50OF90IGluZGV4LAorCXVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3Qg YXV4X2NvbW1hbmQgY21kID0geworCQkucGF5bG9hZHMgPSBOVUxMLAorCQkubnVtYmVyX29mX3Bh eWxvYWRzID0gMCwKKwkJLmRlZmVyX2RlbGF5ID0gZ2V0X2RlZmVyX2RlbGF5KGRkYyksCisJCS5t YXhfZGVmZXJfd3JpdGVfcmV0cnkgPSAwIH07CisKKwl1aW50OF90IHJldHJpZXZlZCA9IDA7CisJ dWludDhfdCBiYXNlX29mZnNldCA9CisJCShpbmRleCAlIEREQ19FRElEX0JMT0NLU19QRVJfU0VH TUVOVCkgKiBERENfRURJRF9CTE9DS19TSVpFOworCXVpbnQ4X3Qgc2VnbWVudCA9IGluZGV4IC8g RERDX0VESURfQkxPQ0tTX1BFUl9TRUdNRU5UOworCisJZm9yIChyZXRyaWV2ZWQgPSAwOyByZXRy aWV2ZWQgPCBERENfRURJRF9CTE9DS19TSVpFOworCQlyZXRyaWV2ZWQgKz0gREVGQVVMVF9BVVhf TUFYX0RBVEFfU0laRSkgeworCisJCXVpbnQ4X3Qgb2Zmc2V0ID0gYmFzZV9vZmZzZXQgKyByZXRy aWV2ZWQ7CisKKwkJc3RydWN0IGF1eF9wYXlsb2FkIHBheWxvYWRzWzNdID0geworCQkJeworCQkJ LmkyY19vdmVyX2F1eCA9IHRydWUsCisJCQkud3JpdGUgPSB0cnVlLAorCQkJLmFkZHJlc3MgPSBE RENfRURJRF9TRUdNRU5UX0FERFJFU1MsCisJCQkubGVuZ3RoID0gMSwKKwkJCS5kYXRhID0gJnNl Z21lbnQgfSwKKwkJCXsKKwkJCS5pMmNfb3Zlcl9hdXggPSB0cnVlLAorCQkJLndyaXRlID0gdHJ1 ZSwKKwkJCS5hZGRyZXNzID0gYWRkcmVzcywKKwkJCS5sZW5ndGggPSAxLAorCQkJLmRhdGEgPSAm b2Zmc2V0IH0sCisJCQl7CisJCQkuaTJjX292ZXJfYXV4ID0gdHJ1ZSwKKwkJCS53cml0ZSA9IGZh bHNlLAorCQkJLmFkZHJlc3MgPSBhZGRyZXNzLAorCQkJLmxlbmd0aCA9IERFRkFVTFRfQVVYX01B WF9EQVRBX1NJWkUsCisJCQkuZGF0YSA9ICZidWZbcmV0cmlldmVkXSB9IH07CisKKwkJaWYgKHNl Z21lbnQgPT0gMCkgeworCQkJY21kLnBheWxvYWRzID0gJnBheWxvYWRzWzFdOworCQkJY21kLm51 bWJlcl9vZl9wYXlsb2FkcyA9IDI7CisJCX0gZWxzZSB7CisJCQljbWQucGF5bG9hZHMgPSBwYXls b2FkczsKKwkJCWNtZC5udW1iZXJfb2ZfcGF5bG9hZHMgPSAzOworCQl9CisKKwkJaWYgKCFkYWxf aTJjYXV4X3N1Ym1pdF9hdXhfY29tbWFuZCgKKwkJCWRkYy0+Y3R4LT5pMmNhdXgsCisJCQlkZGMt PmRkY19waW4sCisJCQkmY21kKSkKKwkJCS8qIGNhbm5vdCByZWFkLCBicmVhayovCisJCQlicmVh azsKKwl9CisKKwkvKiBSZXNldCBzZWdtZW50IHRvIDAuIE5lZWRlZCBieSBzb21lIHBhbmVscyAq LworCWlmICgwICE9IHNlZ21lbnQpIHsKKwkJc3RydWN0IGF1eF9wYXlsb2FkIHBheWxvYWRzWzFd ID0geyB7CisJCQkuaTJjX292ZXJfYXV4ID0gdHJ1ZSwKKwkJCS53cml0ZSA9IHRydWUsCisJCQku YWRkcmVzcyA9IEREQ19FRElEX1NFR01FTlRfQUREUkVTUywKKwkJCS5sZW5ndGggPSAxLAorCQkJ LmRhdGEgPSAmc2VnbWVudCB9IH07CisJCWJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKwkJc2VnbWVu dCA9IDA7CisKKwkJY21kLm51bWJlcl9vZl9wYXlsb2FkcyA9IEFSUkFZX1NJWkUocGF5bG9hZHMp OworCQljbWQucGF5bG9hZHMgPSBwYXlsb2FkczsKKworCQlyZXN1bHQgPSBkYWxfaTJjYXV4X3N1 Ym1pdF9hdXhfY29tbWFuZCgKKwkJCWRkYy0+Y3R4LT5pMmNhdXgsCisJCQlkZGMtPmRkY19waW4s CisJCQkmY21kKTsKKworCQlpZiAoZmFsc2UgPT0gcmVzdWx0KQorCQkJZG1fbG9nZ2VyX3dyaXRl KAorCQkJCWRkYy0+Y3R4LT5sb2dnZXIsIExPR19FUlJPUiwKKwkJCQkiJXM6IFdyaXRpbmcgb2Yg RURJRCBTZWdtZW50ICgweDMwKSBmYWlsZWQhXG4iLAorCQkJCV9fZnVuY19fKTsKKwl9CisKKwly ZXR1cm4gcmV0cmlldmVkOworfQorCitzdGF0aWMgdWludDhfdCBpMmNfcmVhZF9lZGlkX2Jsb2Nr KAorCXN0cnVjdCBkZGNfc2VydmljZSAqZGRjLAorCXVpbnQ4X3QgYWRkcmVzcywKKwl1aW50OF90 IGluZGV4LAorCXVpbnQ4X3QgKmJ1ZikKK3sKKwlib29sIHJldCA9IGZhbHNlOworCXVpbnQ4X3Qg b2Zmc2V0ID0gKGluZGV4ICUgRERDX0VESURfQkxPQ0tTX1BFUl9TRUdNRU5UKSAqCisJCUREQ19F RElEX0JMT0NLX1NJWkU7CisJdWludDhfdCBzZWdtZW50ID0gaW5kZXggLyBERENfRURJRF9CTE9D S1NfUEVSX1NFR01FTlQ7CisKKwlzdHJ1Y3QgaTJjX2NvbW1hbmQgY21kID0geworCQkucGF5bG9h ZHMgPSBOVUxMLAorCQkubnVtYmVyX29mX3BheWxvYWRzID0gMCwKKwkJLmVuZ2luZSA9IEREQ19J MkNfQ09NTUFORF9FTkdJTkUsCisJCS5zcGVlZCA9IGRkYy0+Y3R4LT5kYy0+Y2Fwcy5pMmNfc3Bl ZWRfaW5fa2h6IH07CisKKwlzdHJ1Y3QgaTJjX3BheWxvYWQgcGF5bG9hZHNbM10gPSB7CisJCXsK KwkJLndyaXRlID0gdHJ1ZSwKKwkJLmFkZHJlc3MgPSBERENfRURJRF9TRUdNRU5UX0FERFJFU1Ms CisJCS5sZW5ndGggPSAxLAorCQkuZGF0YSA9ICZzZWdtZW50IH0sCisJCXsKKwkJLndyaXRlID0g dHJ1ZSwKKwkJLmFkZHJlc3MgPSBhZGRyZXNzLAorCQkubGVuZ3RoID0gMSwKKwkJLmRhdGEgPSAm b2Zmc2V0IH0sCisJCXsKKwkJLndyaXRlID0gZmFsc2UsCisJCS5hZGRyZXNzID0gYWRkcmVzcywK KwkJLmxlbmd0aCA9IEREQ19FRElEX0JMT0NLX1NJWkUsCisJCS5kYXRhID0gYnVmIH0gfTsKKy8q CisgKiBTb21lIEkyQyBlbmdpbmVzIGRvbid0IGhhbmRsZSBzdG9wL3N0YXJ0IGJldHdlZW4gd3Jp dGUtb2Zmc2V0IGFuZCByZWFkLWRhdGEKKyAqIGNvbW1hbmRzIHByb3Blcmx5LiBGb3IgdGhvc2Ug ZGlzcGxheXMsIHdlIGhhdmUgdG8gZm9yY2UgdGhlIG5ld2VyIEUtRERDCisgKiBiZWhhdmlvciBv ZiByZXBlYXRlZC1zdGFydCB3aGljaCBjYW4gYmUgZW5hYmxlZCBieSBydW50aW1lIHBhcmFtZXRl ci4gKi8KKy8qIE9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgZm9yIE9uTGl2ZSB1c2luZyBOWFAgcmVj ZWl2ZXIgY2hpcCAqLworCisJaWYgKGluZGV4ID09IDAgJiYgIWRkYy0+ZmxhZ3MuRk9SQ0VfUkVB RF9SRVBFQVRFRF9TVEFSVCkgeworCQkvKiBiYXNlIGJsb2NrLCB1c2UgdXNlIEREQzJCLCBzdWJt aXQgYXMgMiBjb21tYW5kcyAqLworCQljbWQucGF5bG9hZHMgPSAmcGF5bG9hZHNbMV07CisJCWNt ZC5udW1iZXJfb2ZfcGF5bG9hZHMgPSAxOworCisJCWlmIChkbV9oZWxwZXJzX3N1Ym1pdF9pMmMo CisJCQlkZGMtPmN0eCwKKwkJCSZkZGMtPmxpbmstPnB1YmxpYywKKwkJCSZjbWQpKSB7CisKKwkJ CWNtZC5wYXlsb2FkcyA9ICZwYXlsb2Fkc1syXTsKKwkJCWNtZC5udW1iZXJfb2ZfcGF5bG9hZHMg PSAxOworCisJCQlyZXQgPSBkbV9oZWxwZXJzX3N1Ym1pdF9pMmMoCisJCQkJCWRkYy0+Y3R4LAor CQkJCQkmZGRjLT5saW5rLT5wdWJsaWMsCisJCQkJCSZjbWQpOworCQl9CisKKwl9IGVsc2Ugewor CQkvKgorCQkgKiBleHRlbnNpb24gYmxvY2sgdXNlIEUtRERDLCBzdWJtaXQgYXMgMSBjb21tYW5k CisJCSAqIG9yIGlmIHJlcGVhdGVkLXN0YXJ0IGlzIGZvcmNlZCBieSBydW50aW1lIHBhcmFtZXRl cgorCQkgKi8KKwkJaWYgKHNlZ21lbnQgIT0gMCkgeworCQkJLyogaW5jbHVkZSBzZWdtZW50IG9m ZnNldCBpbiBjb21tYW5kKi8KKwkJCWNtZC5wYXlsb2FkcyA9IHBheWxvYWRzOworCQkJY21kLm51 bWJlcl9vZl9wYXlsb2FkcyA9IDM7CisJCX0gZWxzZSB7CisJCQkvKiB3ZSBhcmUgcmVhZGluZyBm aXJzdCBzZWdtZW50LAorCQkJICogc2VnbWVudCBvZmZzZXQgaXMgbm90IHJlcXVpcmVkICovCisJ CQljbWQucGF5bG9hZHMgPSAmcGF5bG9hZHNbMV07CisJCQljbWQubnVtYmVyX29mX3BheWxvYWRz ID0gMjsKKwkJfQorCisJCXJldCA9IGRtX2hlbHBlcnNfc3VibWl0X2kyYygKKwkJCQlkZGMtPmN0 eCwKKwkJCQkmZGRjLT5saW5rLT5wdWJsaWMsCisJCQkJJmNtZCk7CisJfQorCisJcmV0dXJuIHJl dCA/IEREQ19FRElEX0JMT0NLX1NJWkUgOiAwOworfQorCitzdGF0aWMgdWludDMyX3QgcXVlcnlf ZWRpZF9ibG9jaygKKwlzdHJ1Y3QgZGRjX3NlcnZpY2UgKmRkYywKKwl1aW50OF90IGFkZHJlc3Ms CisJdWludDhfdCBpbmRleCwKKwl1aW50OF90ICpidWYsCisJdWludDMyX3Qgc2l6ZSkKK3sKKwl1 aW50MzJfdCBzaXplX3JldHJpZXZlZCA9IDA7CisKKwlpZiAoc2l6ZSA8IEREQ19FRElEX0JMT0NL X1NJWkUpCisJCXJldHVybiAwOworCisJaWYgKGRhbF9kZGNfc2VydmljZV9pc19pbl9hdXhfdHJh bnNhY3Rpb25fbW9kZShkZGMpKSB7CisJCXNpemVfcmV0cmlldmVkID0KKwkJCWF1eF9yZWFkX2Vk aWRfYmxvY2soZGRjLCBhZGRyZXNzLCBpbmRleCwgYnVmKTsKKwl9IGVsc2UgeworCQlzaXplX3Jl dHJpZXZlZCA9CisJCQlpMmNfcmVhZF9lZGlkX2Jsb2NrKGRkYywgYWRkcmVzcywgaW5kZXgsIGJ1 Zik7CisJfQorCisJcmV0dXJuIHNpemVfcmV0cmlldmVkOworfQorCisjZGVmaW5lIEREQ19EUENE X0VESURfQ0hFQ0tTVU1fV1JJVEVfQUREUkVTUyAweDI2MQorI2RlZmluZSBERENfVEVTVF9BQ0tf QUREUkVTUyAweDI2MAorI2RlZmluZSBERENfRFBDRF9FRElEX1RFU1RfQUNLIDB4MDQKKyNkZWZp bmUgRERDX0RQQ0RfRURJRF9URVNUX01BU0sgMHgwNAorI2RlZmluZSBERENfRFBDRF9URVNUX1JF UVVFU1RfQUREUkVTUyAweDIxOAorCisvKiBBRyBUT0RPIEdPIHRocm91ZyBETSBjYWxsYmFjayBo ZXJlIGxpa2UgZm9yIERQQ0QgKi8KKworc3RhdGljIHZvaWQgd3JpdGVfZHBfZWRpZF9jaGVja3N1 bSgKKwlzdHJ1Y3QgZGRjX3NlcnZpY2UgKmRkYywKKwl1aW50OF90IGNoZWNrc3VtKQoreworCXVp bnQ4X3QgZHBjZF9kYXRhOworCisJZGFsX2RkY19zZXJ2aWNlX3JlYWRfZHBjZF9kYXRhKAorCQlk ZGMsCisJCWZhbHNlLAorCQlJMkNfTU9UX1VOREVGLAorCQlERENfRFBDRF9URVNUX1JFUVVFU1Rf QUREUkVTUywKKwkJJmRwY2RfZGF0YSwKKwkJMSk7CisKKwlpZiAoZHBjZF9kYXRhICYgRERDX0RQ Q0RfRURJRF9URVNUX01BU0spIHsKKworCQlkYWxfZGRjX3NlcnZpY2Vfd3JpdGVfZHBjZF9kYXRh KAorCQkJZGRjLAorCQkJdHJ1ZSwKKwkJCUkyQ19NT1RfVU5ERUYsCisJCQlERENfRFBDRF9FRElE X0NIRUNLU1VNX1dSSVRFX0FERFJFU1MsCisJCQkmY2hlY2tzdW0sCisJCQkxKTsKKworCQlkcGNk X2RhdGEgPSBERENfRFBDRF9FRElEX1RFU1RfQUNLOworCisJCWRhbF9kZGNfc2VydmljZV93cml0 ZV9kcGNkX2RhdGEoCisJCQlkZGMsCisJCQl0cnVlLAorCQkJSTJDX01PVF9VTkRFRiwKKwkJCURE Q19URVNUX0FDS19BRERSRVNTLAorCQkJJmRwY2RfZGF0YSwKKwkJCTEpOworCX0KK30KKwordm9p ZCBkYWxfZGRjX3NlcnZpY2VfZ2V0X2VkaWRfYnVmKHN0cnVjdCBkZGNfc2VydmljZSAqZGRjLCB1 aW50OF90ICplZGlkX2J1ZikKK3sKKwltZW1tb3ZlKGVkaWRfYnVmLAorCQkJZGRjLT5lZGlkX2J1 ZiwgZGRjLT5lZGlkX2J1Zl9sZW4pOworfQorCit1aW50MzJfdCBkYWxfZGRjX3NlcnZpY2VfZWRp ZF9xdWVyeShzdHJ1Y3QgZGRjX3NlcnZpY2UgKmRkYykKK3sKKwl1aW50MzJfdCBieXRlc19yZWFk ID0gMDsKKwl1aW50MzJfdCBleHRfY250ID0gMDsKKworCXVpbnQ4X3QgYWRkcmVzczsKKwl1aW50 MzJfdCBpOworCisJZm9yIChhZGRyZXNzID0gRERDX0VESURfQUREUkVTU19TVEFSVDsKKwkJYWRk cmVzcyA8PSBERENfRURJRF9BRERSRVNTX0VORDsgKythZGRyZXNzKSB7CisKKwkJYnl0ZXNfcmVh ZCA9IHF1ZXJ5X2VkaWRfYmxvY2soCisJCQlkZGMsCisJCQlhZGRyZXNzLAorCQkJMCwKKwkJCWRk Yy0+ZWRpZF9idWYsCisJCQlzaXplb2YoZGRjLT5lZGlkX2J1ZikgLSBieXRlc19yZWFkKTsKKwor CQlpZiAoYnl0ZXNfcmVhZCAhPSBERENfRURJRF9CTE9DS19TSVpFKQorCQkJY29udGludWU7CisK KwkJLyogZ2V0IHRoZSBudW1iZXIgb2YgZXh0IGJsb2NrcyovCisJCWV4dF9jbnQgPSBkZGMtPmVk aWRfYnVmW0REQ19FRElEX0VYVF9DT1VOVF9PRkZTRVRdOworCisJCS8qIEVESUQgMi4wLCBuZWVk IHRvIHJlYWQgMSBtb3JlIGJsb2NrIGJlY2F1c2UgRURJRDIuMCBpcworCQkgKiAyNTYgYnl0ZSBp biBzaXplKi8KKwkJaWYgKGRkYy0+ZWRpZF9idWZbRERDX0VESURfMjBfU0lHTkFUVVJFX09GRlNF VF0gPT0KKwkJCUREQ19FRElEXzIwX1NJR05BVFVSRSkKKwkJCQlleHRfY250ID0gMTsKKworCQlm b3IgKGkgPSAwOyBpIDwgZXh0X2NudDsgaSsrKSB7CisJCQkvKiByZWFkIGFkZGl0aW9uYWwgZXh0 IGJsb2NrcyBhY2NvcmRpbmdseSAqLworCQkJYnl0ZXNfcmVhZCArPSBxdWVyeV9lZGlkX2Jsb2Nr KAorCQkJCQlkZGMsCisJCQkJCWFkZHJlc3MsCisJCQkJCWkrMSwKKwkJCQkJJmRkYy0+ZWRpZF9i dWZbYnl0ZXNfcmVhZF0sCisJCQkJCXNpemVvZihkZGMtPmVkaWRfYnVmKSAtIGJ5dGVzX3JlYWQp OworCQl9CisKKwkJLyp0aGlzIGlzIHNwZWNpYWwgY29kZSBwYXRoIGZvciBEUCBjb21wbGlhbmNl Ki8KKwkJaWYgKEREQ19UUkFOU0FDVElPTl9UWVBFX0kyQ19PVkVSX0FVWCA9PSBkZGMtPnRyYW5z YWN0aW9uX3R5cGUpCisJCQl3cml0ZV9kcF9lZGlkX2NoZWNrc3VtKAorCQkJCWRkYywKKwkJCQlk ZGMtPmVkaWRfYnVmWyhleHRfY250ICogRERDX0VESURfQkxPQ0tfU0laRSkgKworCQkJCUREQ19F RElEMVhfQ0hFQ0tTVU1fT0ZGU0VUXSk7CisKKwkJLypyZW1lbWJlcnMgdGhlIGFkZHJlc3Mgd2hl cmUgd2UgZmV0Y2ggdGhlIEVESUQgZnJvbQorCQkgKiBmb3IgbGF0ZXIgc2lnbmF0dXJlIGNoZWNr IHVzZSAqLworCQlkZGMtPmFkZHJlc3MgPSBhZGRyZXNzOworCisJCWJyZWFrOy8qIGFscmVhZHkg cmVhZCBlZGlkLCBkb25lKi8KKwl9CisKKwlkZGMtPmVkaWRfYnVmX2xlbiA9IGJ5dGVzX3JlYWQ7 CisJcmV0dXJuIGJ5dGVzX3JlYWQ7Cit9CisKK2VudW0gZGNfZWRpZF9zdGF0dXMgcmVhZF9lZGlk KAorCXN0cnVjdCBkY19jb250ZXh0ICpjdHgsCisJc3RydWN0IGRjX2xpbmsgKmRjX2xpbmssCisJ c3RydWN0IGRjX3NpbmsgKmRjX3NpbmspCit7CisJdWludDMyX3QgZWRpZF9yZXRyeSA9IDM7CisJ ZW51bSBkY19lZGlkX3N0YXR1cyBlZGlkX3N0YXR1czsKKwlzdHJ1Y3QgY29yZV9saW5rICpsaW5r ID0gRENfTElOS19UT19MSU5LKGRjX2xpbmspOworCisJLyogc29tZSBkb25nbGVzIHJlYWQgZWRp ZCBpbmNvcnJlY3RseSB0aGUgZmlyc3QgdGltZSwKKwkgKiBkbyBjaGVjayBzdW0gYW5kIHJldHJ5 IHRvIG1ha2Ugc3VyZSByZWFkIGNvcnJlY3QgZWRpZC4KKwkgKi8KKwlkbyB7CisJCWRjX3Npbmst PmRjX2VkaWQubGVuZ3RoID0KKwkJCQlkYWxfZGRjX3NlcnZpY2VfZWRpZF9xdWVyeShsaW5rLT5k ZGMpOworCisJCWlmICgwID09IGRjX3NpbmstPmRjX2VkaWQubGVuZ3RoKQorCQkJcmV0dXJuIEVE SURfTk9fUkVTUE9OU0U7CisKKwkJZGFsX2RkY19zZXJ2aWNlX2dldF9lZGlkX2J1ZihsaW5rLT5k ZGMsCisJCQkJZGNfc2luay0+ZGNfZWRpZC5yYXdfZWRpZCk7CisJCWVkaWRfc3RhdHVzID0gZG1f aGVscGVyc19wYXJzZV9lZGlkX2NhcHMoCisJCQkJY3R4LAorCQkJCSZkY19zaW5rLT5kY19lZGlk LAorCQkJCSZkY19zaW5rLT5lZGlkX2NhcHMpOworCQktLWVkaWRfcmV0cnk7CisJCWlmIChlZGlk X3N0YXR1cyA9PSBFRElEX0JBRF9DSEVDS1NVTSkKKwkJCWRtX2xvZ2dlcl93cml0ZShsaW5rLT5j dHgtPmxvZ2dlciwgTE9HX1dBUk5JTkcsCisJCQkJCSJCYWQgRURJRCBjaGVja3N1bSwgcmV0cnkg cmVtYWluOiAlZFxuIiwKKwkJCQkJZWRpZF9yZXRyeSk7CisJfSB3aGlsZSAoZWRpZF9zdGF0dXMg PT0gRURJRF9CQURfQ0hFQ0tTVU0gJiYgZWRpZF9yZXRyeSA+IDApOworCisJcmV0dXJuIGVkaWRf c3RhdHVzOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvbW9k dWxlcy9pbmMvbW9kX2RkY19zZXJ2aWNlLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkv bW9kdWxlcy9pbmMvbW9kX2RkY19zZXJ2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwLi5iMjZlNGM0M2NmYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dw dS9kcm0vYW1kL2Rpc3BsYXkvbW9kdWxlcy9pbmMvbW9kX2RkY19zZXJ2aWNlLmgKQEAgLTAsMCAr MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE2IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIElu Yy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBh c3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRl YWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0 IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw dWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0 d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25k aXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p c3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBP UgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklH SFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBBTUQKKyAqCisgKi8KKworCisjaWZu ZGVmIE1PRF9ERENfU0VSVklDRV9IXworI2RlZmluZSBNT0RfRERDX1NFUlZJQ0VfSF8KKworCisv KiogRURJRCByZXRyaWV2YWwgcmVsYXRlZCBjb25zdGFudHMsIGFsc28gdXNlZCBieSBNc3RNZ3Ig KiovCisKKyNkZWZpbmUgRERDX0VESURfU0VHTUVOVF9TSVpFIDI1NgorI2RlZmluZSBERENfRURJ RF9CTE9DS19TSVpFIDEyOAorI2RlZmluZSBERENfRURJRF9CTE9DS1NfUEVSX1NFR01FTlQgXAor CShERENfRURJRF9TRUdNRU5UX1NJWkUgLyBERENfRURJRF9CTE9DS19TSVpFKQorCisjZGVmaW5l IEREQ19FRElEX0VYVF9DT1VOVF9PRkZTRVQgMHg3RQorCisjZGVmaW5lIEREQ19FRElEX0FERFJF U1NfU1RBUlQgMHg1MAorI2RlZmluZSBERENfRURJRF9BRERSRVNTX0VORCAweDUyCisjZGVmaW5l IEREQ19FRElEX1NFR01FTlRfQUREUkVTUyAweDMwCisKKy8qIHNpZ25hdHVyZXMgZm9yIEVkaWQg MXggKi8KKyNkZWZpbmUgRERDX0VESUQxWF9WRU5ET1JJRF9TSUdOQVRVUkVfT0ZGU0VUIDgKKyNk ZWZpbmUgRERDX0VESUQxWF9WRU5ET1JJRF9TSUdOQVRVUkVfTEVOIDQKKyNkZWZpbmUgRERDX0VE SUQxWF9FWFRfQ05UX0FORF9DSEVDS1NVTV9PRkZTRVQgMTI2CisjZGVmaW5lIEREQ19FRElEMVhf RVhUX0NOVF9BTkRfQ0hFQ0tTVU1fTEVOIDIKKyNkZWZpbmUgRERDX0VESUQxWF9DSEVDS1NVTV9P RkZTRVQgMTI3CisvKiBzaWduYXR1cmVzIGZvciBFZGlkIDIwKi8KKyNkZWZpbmUgRERDX0VESURf MjBfU0lHTkFUVVJFX09GRlNFVCAwCisjZGVmaW5lIEREQ19FRElEXzIwX1NJR05BVFVSRSAweDIw CisKKyNkZWZpbmUgRERDX0VESUQyMF9WRU5ET1JJRF9TSUdOQVRVUkVfT0ZGU0VUIDEKKyNkZWZp bmUgRERDX0VESUQyMF9WRU5ET1JJRF9TSUdOQVRVUkVfTEVOIDQKKyNkZWZpbmUgRERDX0VESUQy MF9DSEVDS1NVTV9PRkZTRVQgMjU1CisjZGVmaW5lIEREQ19FRElEMjBfQ0hFQ0tTVU1fTEVOIDEK KworZW51bSBkY19lZGlkX3N0YXR1cyByZWFkX2VkaWQoCisJc3RydWN0IGRjX2NvbnRleHQgKmN0 eCwKKwlzdHJ1Y3QgZGNfbGluayAqZGNfbGluaywKKwlzdHJ1Y3QgZGNfc2luayAqZGNfc2luayk7 CisKKyNlbmRpZgotLSAKMi4xMS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ft ZC1nZngK