From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v2 04/21] drm/dp: Track link capabilities alongside settings Date: Mon, 2 Sep 2019 13:31:04 +0200 Message-ID: <20190902113121.31323-5-thierry.reding@gmail.com> References: <20190902113121.31323-1-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5DF5689A1F for ; Mon, 2 Sep 2019 11:31:34 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id g207so10207499wmg.5 for ; Mon, 02 Sep 2019 04:31:34 -0700 (PDT) In-Reply-To: <20190902113121.31323-1-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClN0b3JlIGNhcGFiaWxp dGllcyBpbiBtYXhfKiBmaWVsZHMgYW5kIGFkZCBzZXBhcmF0ZSBmaWVsZHMgZm9yIHRoZQpjdXJy ZW50bHkgc2VsZWN0ZWQgc2V0dGluZ3MuCgpDYzogUm9iIENsYXJrIDxyb2JkY2xhcmtAZ21haWwu Y29tPgpSZXZpZXdlZC1ieTogQW5kcnplaiBIYWpkYSA8YS5oYWpkYUBzYW1zdW5nLmNvbT4KU2ln bmVkLW9mZi1ieTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KLS0tCiBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMgICAgICB8IDE0ICsrKysrKy0tLS0tLS0KIGRy aXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMgICAgICAgIHwgMTYgKysrKysrKysrKy0tLS0t CiBkcml2ZXJzL2dwdS9kcm0vbXNtL2VkcC9lZHBfY3RybC5jICAgICB8ICA4ICsrKystLS0tCiBk cml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyB8ICA4ICsrKystLS0tCiBkcml2 ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLXJlZy5jICB8IDEzICsrKysrKy0tLS0tLQogZHJp dmVycy9ncHUvZHJtL3RlZ3JhL2RwYXV4LmMgICAgICAgICAgfCAgOCArKysrLS0tLQogZHJpdmVy cy9ncHUvZHJtL3RlZ3JhL3Nvci5jICAgICAgICAgICAgfCAyOCArKysrKysrKysrKysrLS0tLS0t LS0tLS0tLQogaW5jbHVkZS9kcm0vZHJtX2RwX2hlbHBlci5oICAgICAgICAgICAgfCAxNSArKysr KysrKystLS0tLQogOCBmaWxlcyBjaGFuZ2VkLCA2MCBpbnNlcnRpb25zKCspLCA1MCBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMgYi9k cml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMKaW5kZXggY2ViYzhlNjIwODIwLi43MzNm Y2E3ZDM4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvdGMzNTg3NjcuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3RjMzU4NzY3LmMKQEAgLTQzNyw3ICs0MzcsNyBA QCBzdGF0aWMgdTMyIHRjX3NyY2N0cmwoc3RydWN0IHRjX2RhdGEgKnRjKQogCQlyZWcgfD0gRFAw X1NSQ0NUUkxfU0NSTUJMRElTOwkvKiBTY3JhbWJsZXIgRGlzYWJsZWQgKi8KIAlpZiAodGMtPmxp bmsuc3ByZWFkKQogCQlyZWcgfD0gRFAwX1NSQ0NUUkxfU1NDRzsJLyogU3ByZWFkIFNwZWN0cnVt IEVuYWJsZSAqLwotCWlmICh0Yy0+bGluay5iYXNlLm51bV9sYW5lcyA9PSAyKQorCWlmICh0Yy0+ bGluay5iYXNlLmxhbmVzID09IDIpCiAJCXJlZyB8PSBEUDBfU1JDQ1RSTF9MQU5FU18yOwkvKiBU d28gTWFpbiBDaGFubmVsIExhbmVzICovCiAJaWYgKHRjLT5saW5rLmJhc2UucmF0ZSAhPSAxNjIw MDApCiAJCXJlZyB8PSBEUDBfU1JDQ1RSTF9CVzI3OwkvKiAyLjcgR2JwcyBsaW5rICovCkBAIC02 NzQsOSArNjc0LDkgQEAgc3RhdGljIGludCB0Y19nZXRfZGlzcGxheV9wcm9wcyhzdHJ1Y3QgdGNf ZGF0YSAqdGMpCiAJCXRjLT5saW5rLmJhc2UucmF0ZSA9IDI3MDAwMDsKIAl9CiAKLQlpZiAodGMt PmxpbmsuYmFzZS5udW1fbGFuZXMgPiAyKSB7CisJaWYgKHRjLT5saW5rLmJhc2UubGFuZXMgPiAy KSB7CiAJCWRldl9kYmcodGMtPmRldiwgIkZhbGxpbmcgdG8gMiBsYW5lc1xuIik7Ci0JCXRjLT5s aW5rLmJhc2UubnVtX2xhbmVzID0gMjsKKwkJdGMtPmxpbmsuYmFzZS5sYW5lcyA9IDI7CiAJfQog CiAJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZGIoJnRjLT5hdXgsIERQX01BWF9ET1dOU1BSRUFELCAm cmVnKTsKQEAgLTY5OCw3ICs2OTgsNyBAQCBzdGF0aWMgaW50IHRjX2dldF9kaXNwbGF5X3Byb3Bz KHN0cnVjdCB0Y19kYXRhICp0YykKIAlkZXZfZGJnKHRjLT5kZXYsICJEUENEIHJldjogJWQuJWQs IHJhdGU6ICVzLCBsYW5lczogJWQsIGZyYW1pbmc6ICVzXG4iLAogCQl0Yy0+bGluay5iYXNlLnJl dmlzaW9uID4+IDQsIHRjLT5saW5rLmJhc2UucmV2aXNpb24gJiAweDBmLAogCQkodGMtPmxpbmsu YmFzZS5yYXRlID09IDE2MjAwMCkgPyAiMS42MkdicHMiIDogIjIuN0dicHMiLAotCQl0Yy0+bGlu ay5iYXNlLm51bV9sYW5lcywKKwkJdGMtPmxpbmsuYmFzZS5sYW5lcywKIAkJKHRjLT5saW5rLmJh c2UuY2FwYWJpbGl0aWVzICYgRFBfTElOS19DQVBfRU5IQU5DRURfRlJBTUlORykgPwogCQkiZW5o YW5jZWQiIDogIm5vbi1lbmhhbmNlZCIpOwogCWRldl9kYmcodGMtPmRldiwgIkRvd25zcHJlYWQ6 ICVzLCBzY3JhbWJsZXI6ICVzXG4iLApAQCAtOTA2LDcgKzkwNiw3IEBAIHN0YXRpYyBpbnQgdGNf bWFpbl9saW5rX2VuYWJsZShzdHJ1Y3QgdGNfZGF0YSAqdGMpCiAKIAkvKiBTZXR1cCBNYWluIExp bmsgKi8KIAlkcF9waHlfY3RybCA9IEJHUkVOIHwgUFdSX1NXX0VOIHwgUEhZX0EwX0VOIHwgUEhZ X00wX0VOOwotCWlmICh0Yy0+bGluay5iYXNlLm51bV9sYW5lcyA9PSAyKQorCWlmICh0Yy0+bGlu ay5iYXNlLmxhbmVzID09IDIpCiAJCWRwX3BoeV9jdHJsIHw9IFBIWV8yTEFORTsKIAogCXJldCA9 IHJlZ21hcF93cml0ZSh0Yy0+cmVnbWFwLCBEUF9QSFlfQ1RSTCwgZHBfcGh5X2N0cmwpOwpAQCAt MTA5NCw3ICsxMDk0LDcgQEAgc3RhdGljIGludCB0Y19tYWluX2xpbmtfZW5hYmxlKHN0cnVjdCB0 Y19kYXRhICp0YykKIAkJcmV0ID0gLUVOT0RFVjsKIAl9CiAKLQlpZiAodGMtPmxpbmsuYmFzZS5u dW1fbGFuZXMgPT0gMikgeworCWlmICh0Yy0+bGluay5iYXNlLmxhbmVzID09IDIpIHsKIAkJdmFs dWUgPSAodG1wWzBdID4+IDQpICYgRFBfQ0hBTk5FTF9FUV9CSVRTOwogCiAJCWlmICh2YWx1ZSAh PSBEUF9DSEFOTkVMX0VRX0JJVFMpIHsKQEAgLTEyOTEsNyArMTI5MSw3IEBAIHN0YXRpYyBlbnVt IGRybV9tb2RlX3N0YXR1cyB0Y19tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us CiAJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CiAKIAlyZXEgPSBtb2RlLT5jbG9jayAqIGJpdHNf cGVyX3BpeGVsIC8gODsKLQlhdmFpbCA9IHRjLT5saW5rLmJhc2UubnVtX2xhbmVzICogdGMtPmxp bmsuYmFzZS5yYXRlOworCWF2YWlsID0gdGMtPmxpbmsuYmFzZS5sYW5lcyAqIHRjLT5saW5rLmJh c2UucmF0ZTsKIAogCWlmIChyZXEgPiBhdmFpbCkKIAkJcmV0dXJuIE1PREVfQkFEOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9k cm1fZHBfaGVscGVyLmMKaW5kZXggZjVhZjcxZWMxYjdkLi4zNjVkZTYzYTAyZmIgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2RybV9kcF9oZWxwZXIuYwpAQCAtMzQyLDkgKzM0MiwxMiBAQCBzdGF0aWMgdm9pZCBkcm1fZHBf bGlua19yZXNldChzdHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmspCiAJCXJldHVybjsKIAogCWxpbmst PnJldmlzaW9uID0gMDsKLQlsaW5rLT5yYXRlID0gMDsKLQlsaW5rLT5udW1fbGFuZXMgPSAwOwor CWxpbmstPm1heF9yYXRlID0gMDsKKwlsaW5rLT5tYXhfbGFuZXMgPSAwOwogCWxpbmstPmNhcGFi aWxpdGllcyA9IDA7CisKKwlsaW5rLT5yYXRlID0gMDsKKwlsaW5rLT5sYW5lcyA9IDA7CiB9CiAK IC8qKgpAQCAtMzcwLDEyICszNzMsMTUgQEAgaW50IGRybV9kcF9saW5rX3Byb2JlKHN0cnVjdCBk cm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfbGluayAqbGluaykKIAkJcmV0dXJuIGVycjsK IAogCWxpbmstPnJldmlzaW9uID0gdmFsdWVzWzBdOwotCWxpbmstPnJhdGUgPSBkcm1fZHBfYndf Y29kZV90b19saW5rX3JhdGUodmFsdWVzWzFdKTsKLQlsaW5rLT5udW1fbGFuZXMgPSB2YWx1ZXNb Ml0gJiBEUF9NQVhfTEFORV9DT1VOVF9NQVNLOworCWxpbmstPm1heF9yYXRlID0gZHJtX2RwX2J3 X2NvZGVfdG9fbGlua19yYXRlKHZhbHVlc1sxXSk7CisJbGluay0+bWF4X2xhbmVzID0gdmFsdWVz WzJdICYgRFBfTUFYX0xBTkVfQ09VTlRfTUFTSzsKIAogCWlmICh2YWx1ZXNbMl0gJiBEUF9FTkhB TkNFRF9GUkFNRV9DQVApCiAJCWxpbmstPmNhcGFiaWxpdGllcyB8PSBEUF9MSU5LX0NBUF9FTkhB TkNFRF9GUkFNSU5HOwogCisJbGluay0+cmF0ZSA9IGxpbmstPm1heF9yYXRlOworCWxpbmstPmxh bmVzID0gbGluay0+bWF4X2xhbmVzOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRy bV9kcF9saW5rX3Byb2JlKTsKQEAgLTQ2Miw3ICs0NjgsNyBAQCBpbnQgZHJtX2RwX2xpbmtfY29u ZmlndXJlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfbGluayAqbGluaykK IAlpbnQgZXJyOwogCiAJdmFsdWVzWzBdID0gZHJtX2RwX2xpbmtfcmF0ZV90b19id19jb2RlKGxp bmstPnJhdGUpOwotCXZhbHVlc1sxXSA9IGxpbmstPm51bV9sYW5lczsKKwl2YWx1ZXNbMV0gPSBs aW5rLT5sYW5lczsKIAogCWlmIChsaW5rLT5jYXBhYmlsaXRpZXMgJiBEUF9MSU5LX0NBUF9FTkhB TkNFRF9GUkFNSU5HKQogCQl2YWx1ZXNbMV0gfD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFN RV9FTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tc20vZWRwL2VkcF9jdHJsLmMgYi9k cml2ZXJzL2dwdS9kcm0vbXNtL2VkcC9lZHBfY3RybC5jCmluZGV4IDdmM2RkM2ZmZTJjOS4uNGIz MWJjMzBiZTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbXNtL2VkcC9lZHBfY3RybC5j CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9tc20vZWRwL2VkcF9jdHJsLmMKQEAgLTQwMyw3ICs0MDMs NyBAQCBzdGF0aWMgdm9pZCBlZHBfZmlsbF9saW5rX2NmZyhzdHJ1Y3QgZWRwX2N0cmwgKmN0cmwp CiAJdTMyIHByYXRlOwogCXUzMiBscmF0ZTsKIAl1MzIgYnBwOwotCXU4IG1heF9sYW5lID0gY3Ry bC0+ZHBfbGluay5udW1fbGFuZXM7CisJdTggbWF4X2xhbmUgPSBjdHJsLT5kcF9saW5rLm1heF9s YW5lczsKIAl1OCBsYW5lOwogCiAJcHJhdGUgPSBjdHJsLT5waXhlbF9yYXRlOwpAQCAtNDEzLDcg KzQxMyw3IEBAIHN0YXRpYyB2b2lkIGVkcF9maWxsX2xpbmtfY2ZnKHN0cnVjdCBlZHBfY3RybCAq Y3RybCkKIAkgKiBCeSBkZWZhdWx0LCB1c2UgdGhlIG1heGltdW0gbGluayByYXRlIGFuZCBtaW5p bXVtIGxhbmUgY291bnQsCiAJICogc28gdGhhdCB3ZSBjYW4gZG8gcmF0ZSBkb3duIHNoaWZ0IGR1 cmluZyBsaW5rIHRyYWluaW5nLgogCSAqLwotCWN0cmwtPmxpbmtfcmF0ZSA9IGRybV9kcF9saW5r X3JhdGVfdG9fYndfY29kZShjdHJsLT5kcF9saW5rLnJhdGUpOworCWN0cmwtPmxpbmtfcmF0ZSA9 IGRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShjdHJsLT5kcF9saW5rLm1heF9yYXRlKTsKIAog CXByYXRlICo9IGJwcDsKIAlwcmF0ZSAvPSA4OyAvKiBpbiBrQnl0ZSAqLwpAQCAtNzAxLDcgKzcw MSw3IEBAIHN0YXRpYyBpbnQgZWRwX2xpbmtfcmF0ZV9kb3duX3NoaWZ0KHN0cnVjdCBlZHBfY3Ry bCAqY3RybCkKIAogCXJhdGUgPSBjdHJsLT5saW5rX3JhdGU7CiAJbGFuZSA9IGN0cmwtPmxhbmVf Y250OwotCW1heF9sYW5lID0gY3RybC0+ZHBfbGluay5udW1fbGFuZXM7CisJbWF4X2xhbmUgPSBj dHJsLT5kcF9saW5rLm1heF9sYW5lczsKIAogCWJwcCA9IGN0cmwtPmNvbG9yX2RlcHRoICogMzsK IAlwcmF0ZSA9IGN0cmwtPnBpeGVsX3JhdGU7CkBAIC03NTksNyArNzU5LDcgQEAgc3RhdGljIGlu dCBlZHBfZG9fbGlua190cmFpbihzdHJ1Y3QgZWRwX2N0cmwgKmN0cmwpCiAJICogU2V0IHRoZSBj dXJyZW50IGxpbmsgcmF0ZSBhbmQgbGFuZSBjbnQgdG8gcGFuZWwuIFRoZXkgbWF5IGhhdmUgYmVl bgogCSAqIGFkanVzdGVkIGFuZCB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGVtIGlu IERQQ0QgQ0FQCiAJICovCi0JZHBfbGluay5udW1fbGFuZXMgPSBjdHJsLT5sYW5lX2NudDsKKwlk cF9saW5rLmxhbmVzID0gY3RybC0+bGFuZV9jbnQ7CiAJZHBfbGluay5yYXRlID0gZHJtX2RwX2J3 X2NvZGVfdG9fbGlua19yYXRlKGN0cmwtPmxpbmtfcmF0ZSk7CiAJZHBfbGluay5jYXBhYmlsaXRp ZXMgPSBjdHJsLT5kcF9saW5rLmNhcGFiaWxpdGllczsKIAlpZiAoZHJtX2RwX2xpbmtfY29uZmln dXJlKGN0cmwtPmRybV9hdXgsICZkcF9saW5rKSA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9j ZG4tZHAtY29yZS5jCmluZGV4IGQ1MDVlYTdkNTM4NC4uYzUwMGJlODk1ZTY0IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYworKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvY2RuLWRwLWNvcmUuYwpAQCAtNDc4LDcgKzQ3OCw3IEBAIHN0YXRpYyBp bnQgY2RuX2RwX2Rpc2FibGUoc3RydWN0IGNkbl9kcF9kZXZpY2UgKmRwKQogCWNkbl9kcF9jbGtf ZGlzYWJsZShkcCk7CiAJZHAtPmFjdGl2ZSA9IGZhbHNlOwogCWRwLT5saW5rLnJhdGUgPSAwOwot CWRwLT5saW5rLm51bV9sYW5lcyA9IDA7CisJZHAtPmxpbmsubGFuZXMgPSAwOwogCWlmICghZHAt PmNvbm5lY3RlZCkgewogCQlrZnJlZShkcC0+ZWRpZCk7CiAJCWRwLT5lZGlkID0gTlVMTDsKQEAg LTU3MCw3ICs1NzAsNyBAQCBzdGF0aWMgYm9vbCBjZG5fZHBfY2hlY2tfbGlua19zdGF0dXMoc3Ry dWN0IGNkbl9kcF9kZXZpY2UgKmRwKQogCXN0cnVjdCBjZG5fZHBfcG9ydCAqcG9ydCA9IGNkbl9k cF9jb25uZWN0ZWRfcG9ydChkcCk7CiAJdTggc2lua19sYW5lcyA9IGRybV9kcF9tYXhfbGFuZV9j b3VudChkcC0+ZHBjZCk7CiAKLQlpZiAoIXBvcnQgfHwgIWRwLT5saW5rLnJhdGUgfHwgIWRwLT5s aW5rLm51bV9sYW5lcykKKwlpZiAoIXBvcnQgfHwgIWRwLT5saW5rLnJhdGUgfHwgIWRwLT5saW5r LmxhbmVzKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoY2RuX2RwX2RwY2RfcmVhZChkcCwgRFBf TEFORTBfMV9TVEFUVVMsIGxpbmtfc3RhdHVzLApAQCAtOTUzLDcgKzk1Myw3IEBAIHN0YXRpYyB2 b2lkIGNkbl9kcF9wZF9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkvKiBF bmFibGVkIGFuZCBjb25uZWN0ZWQgd2l0aCBhIHNpbmssIHJlLXRyYWluIGlmIHJlcXVlc3RlZCAq LwogCX0gZWxzZSBpZiAoIWNkbl9kcF9jaGVja19saW5rX3N0YXR1cyhkcCkpIHsKIAkJdW5zaWdu ZWQgaW50IHJhdGUgPSBkcC0+bGluay5yYXRlOwotCQl1bnNpZ25lZCBpbnQgbGFuZXMgPSBkcC0+ bGluay5udW1fbGFuZXM7CisJCXVuc2lnbmVkIGludCBsYW5lcyA9IGRwLT5saW5rLmxhbmVzOwog CQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSA9ICZkcC0+bW9kZTsKIAogCQlEUk1fREVW X0lORk8oZHAtPmRldiwgIkNvbm5lY3RlZCB3aXRoIHNpbmsuIFJlLXRyYWluIGxpbmtcbiIpOwpA QCAtOTY2LDcgKzk2Niw3IEBAIHN0YXRpYyB2b2lkIGNkbl9kcF9wZF9ldmVudF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKIAogCQkvKiBJZiB0cmFpbmluZyByZXN1bHQgaXMgY2hhbmdl ZCwgdXBkYXRlIHRoZSB2aWRlbyBjb25maWcgKi8KIAkJaWYgKG1vZGUtPmNsb2NrICYmCi0JCSAg ICAocmF0ZSAhPSBkcC0+bGluay5yYXRlIHx8IGxhbmVzICE9IGRwLT5saW5rLm51bV9sYW5lcykp IHsKKwkJICAgIChyYXRlICE9IGRwLT5saW5rLnJhdGUgfHwgbGFuZXMgIT0gZHAtPmxpbmsubGFu ZXMpKSB7CiAJCQlyZXQgPSBjZG5fZHBfY29uZmlnX3ZpZGVvKGRwKTsKIAkJCWlmIChyZXQpIHsK IAkJCQlkcC0+Y29ubmVjdGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvY2RuLWRwLXJlZy5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1y ZWcuYwppbmRleCAwNzdjODcwMjE5MDguLjdiMjU0ZDBkMGJhMiAxMDA2NDQKLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL2Nkbi1kcC1yZWcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvY2RuLWRwLXJlZy5jCkBAIC01MzYsNyArNTM2LDcgQEAgc3RhdGljIGludCBjZG5fZHBf Z2V0X3RyYWluaW5nX3N0YXR1cyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCiAJCWdvdG8gZXJy X2dldF90cmFpbmluZ19zdGF0dXM7CiAKIAlkcC0+bGluay5yYXRlID0gZHJtX2RwX2J3X2NvZGVf dG9fbGlua19yYXRlKHN0YXR1c1swXSk7Ci0JZHAtPmxpbmsubnVtX2xhbmVzID0gc3RhdHVzWzFd OworCWRwLT5saW5rLmxhbmVzID0gc3RhdHVzWzFdOwogCiBlcnJfZ2V0X3RyYWluaW5nX3N0YXR1 czoKIAlpZiAocmV0KQpAQCAtNTYxLDcgKzU2MSw3IEBAIGludCBjZG5fZHBfdHJhaW5fbGluayhz dHJ1Y3QgY2RuX2RwX2RldmljZSAqZHApCiAJfQogCiAJRFJNX0RFVl9ERUJVR19LTVMoZHAtPmRl diwgInJhdGU6MHgleCwgbGFuZXM6JWRcbiIsIGRwLT5saW5rLnJhdGUsCi0JCQkgIGRwLT5saW5r Lm51bV9sYW5lcyk7CisJCQkgIGRwLT5saW5rLmxhbmVzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBA IC02NTksMTQgKzY1OSwxMyBAQCBpbnQgY2RuX2RwX2NvbmZpZ192aWRlbyhzdHJ1Y3QgY2RuX2Rw X2RldmljZSAqZHApCiAJZG8gewogCQl0dV9zaXplX3JlZyArPSAyOwogCQlzeW1ib2wgPSB0dV9z aXplX3JlZyAqIG1vZGUtPmNsb2NrICogYml0X3Blcl9waXg7Ci0JCWRvX2RpdihzeW1ib2wsIGRw LT5saW5rLm51bV9sYW5lcyAqIGxpbmtfcmF0ZSAqIDgpOworCQlkb19kaXYoc3ltYm9sLCBkcC0+ bGluay5sYW5lcyAqIGxpbmtfcmF0ZSAqIDgpOwogCQlyZW0gPSBkb19kaXYoc3ltYm9sLCAxMDAw KTsKIAkJaWYgKHR1X3NpemVfcmVnID4gNjQpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlEUk1f REVWX0VSUk9SKGRwLT5kZXYsCiAJCQkJICAgICAgInR1IGVycm9yLCBjbGs6JWQsIGxhbmVzOiVk LCByYXRlOiVkXG4iLAotCQkJCSAgICAgIG1vZGUtPmNsb2NrLCBkcC0+bGluay5udW1fbGFuZXMs Ci0JCQkJICAgICAgbGlua19yYXRlKTsKKwkJCQkgICAgICBtb2RlLT5jbG9jaywgZHAtPmxpbmsu bGFuZXMsIGxpbmtfcmF0ZSk7CiAJCQlnb3RvIGVycl9jb25maWdfdmlkZW87CiAJCX0KIAl9IHdo aWxlICgoc3ltYm9sIDw9IDEpIHx8ICh0dV9zaXplX3JlZyAtIHN5bWJvbCA8IDQpIHx8CkBAIC02 ODAsNyArNjc5LDcgQEAgaW50IGNkbl9kcF9jb25maWdfdmlkZW8oc3RydWN0IGNkbl9kcF9kZXZp Y2UgKmRwKQogCiAJLyogc2V0IHRoZSBGSUZPIEJ1ZmZlciBzaXplICovCiAJdmFsID0gZGl2X3U2 NChtb2RlLT5jbG9jayAqIChzeW1ib2wgKyAxKSwgMTAwMCkgKyBsaW5rX3JhdGU7Ci0JdmFsIC89 IChkcC0+bGluay5udW1fbGFuZXMgKiBsaW5rX3JhdGUpOworCXZhbCAvPSAoZHAtPmxpbmsubGFu ZXMgKiBsaW5rX3JhdGUpOwogCXZhbCA9IGRpdl91NjQoOCAqIChzeW1ib2wgKyAxKSwgYml0X3Bl cl9waXgpIC0gdmFsOwogCXZhbCArPSAyOwogCXJldCA9IGNkbl9kcF9yZWdfd3JpdGUoZHAsIERQ X1ZDX1RBQkxFKDE1KSwgdmFsKTsKQEAgLTgzMyw3ICs4MzIsNyBAQCBzdGF0aWMgdm9pZCBjZG5f ZHBfYXVkaW9fY29uZmlnX2kycyhzdHJ1Y3QgY2RuX2RwX2RldmljZSAqZHAsCiAJdTMyIHZhbDsK IAogCWlmIChhdWRpby0+Y2hhbm5lbHMgPT0gMikgewotCQlpZiAoZHAtPmxpbmsubnVtX2xhbmVz ID09IDEpCisJCWlmIChkcC0+bGluay5sYW5lcyA9PSAxKQogCQkJc3ViX3Bja3RfbnVtID0gMjsK IAkJZWxzZQogCQkJc3ViX3Bja3RfbnVtID0gNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS90ZWdyYS9kcGF1eC5jIGIvZHJpdmVycy9ncHUvZHJtL3RlZ3JhL2RwYXV4LmMKaW5kZXggYTBm NmY5YjBkMjU4Li5lYzE2ODhiZGZmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdy YS9kcGF1eC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9kcGF1eC5jCkBAIC03OTIsMTQg Kzc5MiwxNCBAQCBpbnQgZHJtX2RwX2F1eF90cmFpbihzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4LCBz dHJ1Y3QgZHJtX2RwX2xpbmsgKmxpbmssCiAJaWYgKHRwID09IERQX1RSQUlOSU5HX1BBVFRFUk5f RElTQUJMRSkKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbGluay0+bnVtX2xhbmVz OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxpbmstPmxhbmVzOyBpKyspCiAJCXZhbHVlc1tpXSA9 IERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRCB8CiAJCQkgICAgRFBfVFJBSU5fUFJF X0VNUEhfTEVWRUxfMCB8CiAJCQkgICAgRFBfVFJBSU5fTUFYX1NXSU5HX1JFQUNIRUQgfAogCQkJ ICAgIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDsKIAogCWVyciA9IGRybV9kcF9kcGNk X3dyaXRlKGF1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULCB2YWx1ZXMsCi0JCQkJbGluay0+bnVt X2xhbmVzKTsKKwkJCQlsaW5rLT5sYW5lcyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7 CiAKQEAgLTgxMSwxMyArODExLDEzIEBAIGludCBkcm1fZHBfYXV4X3RyYWluKHN0cnVjdCBkcm1f ZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfbGluayAqbGluaywKIAogCXN3aXRjaCAodHApIHsK IAljYXNlIERQX1RSQUlOSU5HX1BBVFRFUk5fMToKLQkJaWYgKCFkcm1fZHBfY2xvY2tfcmVjb3Zl cnlfb2soc3RhdHVzLCBsaW5rLT5udW1fbGFuZXMpKQorCQlpZiAoIWRybV9kcF9jbG9ja19yZWNv dmVyeV9vayhzdGF0dXMsIGxpbmstPmxhbmVzKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCWJy ZWFrOwogCiAJY2FzZSBEUF9UUkFJTklOR19QQVRURVJOXzI6Ci0JCWlmICghZHJtX2RwX2NoYW5u ZWxfZXFfb2soc3RhdHVzLCBsaW5rLT5udW1fbGFuZXMpKQorCQlpZiAoIWRybV9kcF9jaGFubmVs X2VxX29rKHN0YXR1cywgbGluay0+bGFuZXMpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJYnJl YWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGVncmEvc29yLmMgYi9kcml2ZXJzL2dw dS9kcm0vdGVncmEvc29yLmMKaW5kZXggZTE2NjlhZGEwYTQwLi5jYjk0MDkxZDk4YTcgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90ZWdyYS9zb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0v dGVncmEvc29yLmMKQEAgLTY0OSw3ICs2NDksNyBAQCBzdGF0aWMgaW50IHRlZ3JhX3Nvcl9kcF90 cmFpbl9mYXN0KHN0cnVjdCB0ZWdyYV9zb3IgKnNvciwKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJu IGVycjsKIAotCWZvciAoaSA9IDAsIHZhbHVlID0gMDsgaSA8IGxpbmstPm51bV9sYW5lczsgaSsr KSB7CisJZm9yIChpID0gMCwgdmFsdWUgPSAwOyBpIDwgbGluay0+bGFuZXM7IGkrKykgewogCQl1 bnNpZ25lZCBsb25nIGxhbmUgPSBTT1JfRFBfVFBHX0NIQU5ORUxfQ09ESU5HIHwKIAkJCQkgICAg IFNPUl9EUF9UUEdfU0NSQU1CTEVSX05PTkUgfAogCQkJCSAgICAgU09SX0RQX1RQR19QQVRURVJO X1RSQUlOMTsKQEAgLTY3MCw3ICs2NzAsNyBAQCBzdGF0aWMgaW50IHRlZ3JhX3Nvcl9kcF90cmFp bl9mYXN0KHN0cnVjdCB0ZWdyYV9zb3IgKnNvciwKIAl2YWx1ZSB8PSBTT1JfRFBfU1BBUkVfTUFD Uk9fU09SX0NMSzsKIAl0ZWdyYV9zb3Jfd3JpdGVsKHNvciwgdmFsdWUsIFNPUl9EUF9TUEFSRTAp OwogCi0JZm9yIChpID0gMCwgdmFsdWUgPSAwOyBpIDwgbGluay0+bnVtX2xhbmVzOyBpKyspIHsK Kwlmb3IgKGkgPSAwLCB2YWx1ZSA9IDA7IGkgPCBsaW5rLT5sYW5lczsgaSsrKSB7CiAJCXVuc2ln bmVkIGxvbmcgbGFuZSA9IFNPUl9EUF9UUEdfQ0hBTk5FTF9DT0RJTkcgfAogCQkJCSAgICAgU09S X0RQX1RQR19TQ1JBTUJMRVJfTk9ORSB8CiAJCQkJICAgICBTT1JfRFBfVFBHX1BBVFRFUk5fVFJB SU4yOwpAQCAtNjg1LDcgKzY4NSw3IEBAIHN0YXRpYyBpbnQgdGVncmFfc29yX2RwX3RyYWluX2Zh c3Qoc3RydWN0IHRlZ3JhX3NvciAqc29yLAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwog Ci0JZm9yIChpID0gMCwgdmFsdWUgPSAwOyBpIDwgbGluay0+bnVtX2xhbmVzOyBpKyspIHsKKwlm b3IgKGkgPSAwLCB2YWx1ZSA9IDA7IGkgPCBsaW5rLT5sYW5lczsgaSsrKSB7CiAJCXVuc2lnbmVk IGxvbmcgbGFuZSA9IFNPUl9EUF9UUEdfQ0hBTk5FTF9DT0RJTkcgfAogCQkJCSAgICAgU09SX0RQ X1RQR19TQ1JBTUJMRVJfR0FMSU9TIHwKIAkJCQkgICAgIFNPUl9EUF9UUEdfUEFUVEVSTl9OT05F OwpAQCAtOTEyLDExICs5MTIsMTEgQEAgc3RhdGljIGludCB0ZWdyYV9zb3JfY29tcHV0ZV9jb25m aWcoc3RydWN0IHRlZ3JhX3NvciAqc29yLAogCXUzMiBudW1fc3ltc19wZXJfbGluZTsKIAl1bnNp Z25lZCBpbnQgaTsKIAotCWlmICghbGlua19yYXRlIHx8ICFsaW5rLT5udW1fbGFuZXMgfHwgIXBj bGsgfHwgIWNvbmZpZy0+Yml0c19wZXJfcGl4ZWwpCisJaWYgKCFsaW5rX3JhdGUgfHwgIWxpbmst PmxhbmVzIHx8ICFwY2xrIHx8ICFjb25maWctPmJpdHNfcGVyX3BpeGVsKQogCQlyZXR1cm4gLUVJ TlZBTDsKIAotCW91dHB1dCA9IGxpbmtfcmF0ZSAqIDggKiBsaW5rLT5udW1fbGFuZXM7CiAJaW5w dXQgPSBwY2xrICogY29uZmlnLT5iaXRzX3Blcl9waXhlbDsKKwlvdXRwdXQgPSBsaW5rX3JhdGUg KiA4ICogbGluay0+bGFuZXM7CiAKIAlpZiAoaW5wdXQgPj0gb3V0cHV0KQogCQlyZXR1cm4gLUVS QU5HRTsKQEAgLTk1OSw3ICs5NTksNyBAQCBzdGF0aWMgaW50IHRlZ3JhX3Nvcl9jb21wdXRlX2Nv bmZpZyhzdHJ1Y3QgdGVncmFfc29yICpzb3IsCiAJd2F0ZXJtYXJrID0gZGl2X3U2NCh3YXRlcm1h cmsgKyBwYXJhbXMuZXJyb3IsIGYpOwogCWNvbmZpZy0+d2F0ZXJtYXJrID0gd2F0ZXJtYXJrICsg KGNvbmZpZy0+Yml0c19wZXJfcGl4ZWwgLyA4KSArIDI7CiAJbnVtX3N5bXNfcGVyX2xpbmUgPSAo bW9kZS0+aGRpc3BsYXkgKiBjb25maWctPmJpdHNfcGVyX3BpeGVsKSAqCi0JCQkgICAgKGxpbmst Pm51bV9sYW5lcyAqIDgpOworCQkJICAgIChsaW5rLT5sYW5lcyAqIDgpOwogCiAJaWYgKGNvbmZp Zy0+d2F0ZXJtYXJrID4gMzApIHsKIAkJY29uZmlnLT53YXRlcm1hcmsgPSAzMDsKQEAgLTk3OSwx MiArOTc5LDEyIEBAIHN0YXRpYyBpbnQgdGVncmFfc29yX2NvbXB1dGVfY29uZmlnKHN0cnVjdCB0 ZWdyYV9zb3IgKnNvciwKIAlpZiAobGluay0+Y2FwYWJpbGl0aWVzICYgRFBfTElOS19DQVBfRU5I QU5DRURfRlJBTUlORykKIAkJY29uZmlnLT5oYmxhbmtfc3ltYm9scyAtPSAzOwogCi0JY29uZmln LT5oYmxhbmtfc3ltYm9scyAtPSAxMiAvIGxpbmstPm51bV9sYW5lczsKKwljb25maWctPmhibGFu a19zeW1ib2xzIC09IDEyIC8gbGluay0+bGFuZXM7CiAKIAkvKiBjb21wdXRlIHRoZSBudW1iZXIg b2Ygc3ltYm9scyBwZXIgdmVydGljYWwgYmxhbmtpbmcgaW50ZXJ2YWwgKi8KIAludW0gPSAobW9k ZS0+aGRpc3BsYXkgLSAyNSkgKiBsaW5rX3JhdGU7CiAJY29uZmlnLT52Ymxhbmtfc3ltYm9scyA9 IGRpdl91NjQobnVtLCBwY2xrKTsKLQljb25maWctPnZibGFua19zeW1ib2xzIC09IDM2IC8gbGlu ay0+bnVtX2xhbmVzICsgNDsKKwljb25maWctPnZibGFua19zeW1ib2xzIC09IDM2IC8gbGluay0+ bGFuZXMgKyA0OwogCiAJZGV2X2RiZyhzb3ItPmRldiwgImJsYW5rIHN5bWJvbHM6IEg6JXUgVjol dVxuIiwgY29uZmlnLT5oYmxhbmtfc3ltYm9scywKIAkJY29uZmlnLT52Ymxhbmtfc3ltYm9scyk7 CkBAIC0xODMwLDE3ICsxODMwLDE3IEBAIHN0YXRpYyB2b2lkIHRlZ3JhX3Nvcl9lZHBfZW5hYmxl KHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAkvKiBwb3dlciBEUCBsYW5lcyAqLwogCXZh bHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgc29yLT5zb2MtPnJlZ3MtPmRwX3BhZGN0bDApOwog Ci0JaWYgKGxpbmsubnVtX2xhbmVzIDw9IDIpCisJaWYgKGxpbmsubGFuZXMgPD0gMikKIAkJdmFs dWUgJj0gfihTT1JfRFBfUEFEQ1RMX1BEX1RYRF8zIHwgU09SX0RQX1BBRENUTF9QRF9UWERfMik7 CiAJZWxzZQogCQl2YWx1ZSB8PSBTT1JfRFBfUEFEQ1RMX1BEX1RYRF8zIHwgU09SX0RQX1BBRENU TF9QRF9UWERfMjsKIAotCWlmIChsaW5rLm51bV9sYW5lcyA8PSAxKQorCWlmIChsaW5rLmxhbmVz IDw9IDEpCiAJCXZhbHVlICY9IH5TT1JfRFBfUEFEQ1RMX1BEX1RYRF8xOwogCWVsc2UKIAkJdmFs dWUgfD0gU09SX0RQX1BBRENUTF9QRF9UWERfMTsKIAotCWlmIChsaW5rLm51bV9sYW5lcyA9PSAw KQorCWlmIChsaW5rLmxhbmVzID09IDApCiAJCXZhbHVlICY9IH5TT1JfRFBfUEFEQ1RMX1BEX1RY RF8wOwogCWVsc2UKIAkJdmFsdWUgfD0gU09SX0RQX1BBRENUTF9QRF9UWERfMDsKQEAgLTE4NDks NyArMTg0OSw3IEBAIHN0YXRpYyB2b2lkIHRlZ3JhX3Nvcl9lZHBfZW5hYmxlKHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlcikKIAogCXZhbHVlID0gdGVncmFfc29yX3JlYWRsKHNvciwgU09SX0RQ X0xJTktDVEwwKTsKIAl2YWx1ZSAmPSB+U09SX0RQX0xJTktDVExfTEFORV9DT1VOVF9NQVNLOwot CXZhbHVlIHw9IFNPUl9EUF9MSU5LQ1RMX0xBTkVfQ09VTlQobGluay5udW1fbGFuZXMpOworCXZh bHVlIHw9IFNPUl9EUF9MSU5LQ1RMX0xBTkVfQ09VTlQobGluay5sYW5lcyk7CiAJdGVncmFfc29y X3dyaXRlbChzb3IsIHZhbHVlLCBTT1JfRFBfTElOS0NUTDApOwogCiAJLyogc3RhcnQgbGFuZSBz ZXF1ZW5jZXIgKi8KQEAgLTE5MDYsNyArMTkwNiw3IEBAIHN0YXRpYyB2b2lkIHRlZ3JhX3Nvcl9l ZHBfZW5hYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAkJZGV2X2Vycihzb3ItPmRl diwgImZhaWxlZCB0byBjb25maWd1cmUgZURQIGxpbms6ICVkXG4iLCBlcnIpOwogCiAJcmF0ZSA9 IGRybV9kcF9saW5rX3JhdGVfdG9fYndfY29kZShsaW5rLnJhdGUpOwotCWxhbmVzID0gbGluay5u dW1fbGFuZXM7CisJbGFuZXMgPSBsaW5rLmxhbmVzOwogCiAJdmFsdWUgPSB0ZWdyYV9zb3JfcmVh ZGwoc29yLCBTT1JfQ0xLX0NOVFJMKTsKIAl2YWx1ZSAmPSB+U09SX0NMS19DTlRSTF9EUF9MSU5L X1NQRUVEX01BU0s7CkBAIC0xOTI0LDcgKzE5MjQsNyBAQCBzdGF0aWMgdm9pZCB0ZWdyYV9zb3Jf ZWRwX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAKIAkvKiBkaXNhYmxlIHRy YWluaW5nIHBhdHRlcm4gZ2VuZXJhdG9yICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgbGluay5udW1f bGFuZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsaW5rLmxhbmVzOyBpKyspIHsKIAkJdW5z aWduZWQgbG9uZyBsYW5lID0gU09SX0RQX1RQR19DSEFOTkVMX0NPRElORyB8CiAJCQkJICAgICBT T1JfRFBfVFBHX1NDUkFNQkxFUl9HQUxJT1MgfAogCQkJCSAgICAgU09SX0RQX1RQR19QQVRURVJO X05PTkU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfaGVscGVyLmggYi9pbmNsdWRl L2RybS9kcm1fZHBfaGVscGVyLmgKaW5kZXggOTM1ZjMzMWU2ZTcyLi45YzY3NWJkZTExZTggMTAw NjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9kcF9oZWxwZXIuaAorKysgYi9pbmNsdWRlL2RybS9k cm1fZHBfaGVscGVyLmgKQEAgLTEzNTksMTcgKzEzNTksMjIgQEAgaW50IGRybV9kcF9kcGNkX3Jl YWRfbGlua19zdGF0dXMoc3RydWN0IGRybV9kcF9hdXggKmF1eCwKICNkZWZpbmUgRFBfTElOS19D QVBfRU5IQU5DRURfRlJBTUlORyAoMSA8PCAwKQogCiAvKioKLSAqIHN0cnVjdCBkcm1fZHBfbGlu ayAtIERQIGxpbmsgY2FwYWJpbGl0aWVzCisgKiBzdHJ1Y3QgZHJtX2RwX2xpbmsgLSBEUCBsaW5r IGNhcGFiaWxpdGllcyBhbmQgY29uZmlndXJhdGlvbgogICogQHJldmlzaW9uOiBEUCBzcGVjaWZp Y2F0aW9uIHJldmlzaW9uIHN1cHBvcnRlZCBvbiB0aGUgbGluawotICogQHJhdGU6IG1heGltdW0g Y2xvY2sgcmF0ZSBzdXBwb3J0ZWQgb24gdGhlIGxpbmsKLSAqIEBudW1fbGFuZXM6IG1heGltdW0g bnVtYmVyIG9mIGxhbmVzIHN1cHBvcnRlZCBvbiB0aGUgbGluaworICogQG1heF9yYXRlOiBtYXhp bXVtIGNsb2NrIHJhdGUgc3VwcG9ydGVkIG9uIHRoZSBsaW5rCisgKiBAbWF4X2xhbmVzOiBtYXhp bXVtIG51bWJlciBvZiBsYW5lcyBzdXBwb3J0ZWQgb24gdGhlIGxpbmsKICAqIEBjYXBhYmlsaXRp ZXM6IGJpdG1hc2sgb2YgY2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBvbiB0aGUgbGluaworICogQHJh dGU6IGN1cnJlbnRseSBjb25maWd1cmVkIGxpbmsgcmF0ZQorICogQGxhbmVzOiBjdXJyZW50bHkg Y29uZmlndXJlZCBudW1iZXIgb2YgbGFuZXMKICAqLwogc3RydWN0IGRybV9kcF9saW5rIHsKIAl1 bnNpZ25lZCBjaGFyIHJldmlzaW9uOwotCXVuc2lnbmVkIGludCByYXRlOwotCXVuc2lnbmVkIGlu dCBudW1fbGFuZXM7CisJdW5zaWduZWQgaW50IG1heF9yYXRlOworCXVuc2lnbmVkIGludCBtYXhf bGFuZXM7CiAJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXM7CisKKwl1bnNpZ25lZCBpbnQgcmF0 ZTsKKwl1bnNpZ25lZCBpbnQgbGFuZXM7CiB9OwogCiBpbnQgZHJtX2RwX2xpbmtfcHJvYmUoc3Ry dWN0IGRybV9kcF9hdXggKmF1eCwgc3RydWN0IGRybV9kcF9saW5rICpsaW5rKTsKLS0gCjIuMjIu MAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs