From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Hellstrom Subject: [PATCH 17/28] drm/vmwgfx: Convert screen targets to new helpers v3 Date: Wed, 12 Aug 2015 22:43:06 -0700 Message-ID: <1439444597-4664-18-git-send-email-thellstrom@vmware.com> References: <1439444597-4664-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx6.bahnhof.se (mx6.bahnhof.se [213.80.101.16]) by gabe.freedesktop.org (Postfix) with ESMTPS id CF2CD6EBE8 for ; Wed, 12 Aug 2015 23:03:45 -0700 (PDT) Received: from localhost (mf.bahnhof.se [213.80.101.20]) by mx6-reinject (Postfix) with ESMTP id 8F6B644133 for ; Thu, 13 Aug 2015 08:03:44 +0200 (CEST) Received: from mf3.bahnhof.se ([127.0.0.1]) by localhost (mf3.bahnhof.se [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id aWkGpktfKqvc for ; Thu, 13 Aug 2015 08:03:33 +0200 (CEST) Received: from mail.shipmail.org (h-5-150-198-217.na.cust.bahnhof.se [5.150.198.217]) by mf3.bahnhof.se (Postfix) with ESMTP id 96F503E8CFB for ; Thu, 13 Aug 2015 08:03:03 +0200 (CEST) Received: from mail.shipmail.org (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id BE38D3F4001 for ; Thu, 13 Aug 2015 07:43:25 +0200 (CEST) Received: from localhost.localdomain (lin0.kontor.shipmail.org [127.0.0.1]) by mail.shipmail.org (Postfix) with ESMTP id 831183DC001 for ; Thu, 13 Aug 2015 07:43:25 +0200 (CEST) In-Reply-To: <1439444597-4664-1-git-send-email-thellstrom@vmware.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 QWxzbyBpbXBsZW1lbnRzIHRoZSBtaXNzaW5nIHJlYWRiYWNrIGZ1bmN0aW9uIGFuZApmaXhlcyBw YWdlIGZsaXAgaW4gY2FzZSBvZiBubyBldmVudC4KCnYyOgotIEFkYXB0IHRvIHRoZSB3b3JrIGRv bmUgZm9yIHNjcmVlbiB0YXJnZXRzIGZvciAyZCwgaW4gcGFydGljdWxhcgpIYW5kbGUgcHJveHkg c3VyZmFjZSB1cGRhdGVzLgotIFJlbW92ZSBleGVjYnVmIHF1aXJrcyBzaW5jZSB3ZSBub3cgdXNl IGZpZm8gcmVzZXJ2ZSAvIGNvbW1pdC4KLSBSZXZlcnQgdGhlIGluaXRpYWwgcGxhY2VtZW50IG9m IHZtdyBkbWEgYnVmZmVycy4KCnYzOiBBZGRyZXNzIHJldmlldyBjb21tZW50cy4KClNpZ25lZC1v ZmYtYnk6IFRob21hcyBIZWxsc3Ryb20gPHRoZWxsc3Ryb21Adm13YXJlLmNvbT4KUmV2aWV3ZWQt Ynk6IFNpbmNsYWlyIFllaCA8c3llaEB2bXdhcmUuY29tPgotLS0KIGRyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X2Rydi5oICAgICAgfCAgIDUgLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92 bXdnZnhfZXhlY2J1Zi5jICB8ICAyNCArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhf a21zLmMgICAgICB8IDE0OSArKysrLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21z LmggICAgICB8ICAzNyArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfcmVzb3VyY2Uu YyB8ICAgMiArLQogZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5jICAgICB8IDk5 NiArKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDUzNCBp bnNlcnRpb25zKCspLCA2NzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9k cnYuaAppbmRleCBkNjBhZTIwLi5kNmIyNDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9k cnYuaApAQCAtMzQzLDkgKzM0Myw2IEBAIGVudW0gdm13X2Rpc3BsYXlfdW5pdF90eXBlIHsKIH07 CiAKIAotI2RlZmluZSBWTVdfUVVJUktfRFNUX1NJRF9PSyAoMVUgPDwgMCkKLSNkZWZpbmUgVk1X X1FVSVJLX1NSQ19TSURfT0sgKDFVIDw8IDEpCi0KIHN0cnVjdCB2bXdfc3dfY29udGV4dHsKIAlz dHJ1Y3QgZHJtX29wZW5faGFzaCByZXNfaHQ7CiAJYm9vbCByZXNfaHRfaW5pdGlhbGl6ZWQ7CkBA IC0zNjgsNyArMzY1LDYgQEAgc3RydWN0IHZtd19zd19jb250ZXh0ewogCXN0cnVjdCB2bXdfcmVz b3VyY2UgKmVycm9yX3Jlc291cmNlOwogCXN0cnVjdCB2bXdfY3R4X2JpbmRpbmdfc3RhdGUgc3Rh Z2VkX2JpbmRpbmdzOwogCXN0cnVjdCBsaXN0X2hlYWQgc3RhZ2VkX2NtZF9yZXM7Ci0JdWludDMy X3QgcXVpcmtzOwogfTsKIAogc3RydWN0IHZtd19sZWdhY3lfZGlzcGxheTsKQEAgLTg0Miw3ICs4 MzgsNiBAQCBleHRlcm4gaW50IHZtd19leGVjYnVmX3Byb2Nlc3Moc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYsCiAJCQkgICAgICAgdm9pZCAqa2VybmVsX2NvbW1hbmRzLAogCQkJICAgICAgIHVp bnQzMl90IGNvbW1hbmRfc2l6ZSwKIAkJCSAgICAgICB1aW50NjRfdCB0aHJvdHRsZV91cywKLQkJ CSAgICAgICB1aW50MzJfdCBxdWlya3MsCiAJCQkgICAgICAgc3RydWN0IGRybV92bXdfZmVuY2Vf cmVwIF9fdXNlcgogCQkJICAgICAgICp1c2VyX2ZlbmNlX3JlcCwKIAkJCSAgICAgICBzdHJ1Y3Qg dm13X2ZlbmNlX29iaiAqKm91dF9mZW5jZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v dm13Z2Z4L3Ztd2dmeF9leGVjYnVmLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9l eGVjYnVmLmMKaW5kZXggNjk4YTBlMi4uNjRkYmE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3Ztd2dmeC92bXdnZnhfZXhlY2J1Zi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X2V4ZWNidWYuYwpAQCAtNjc1LDE2ICs2NzUsMTEgQEAgc3RhdGljIGludCB2bXdfY21k X3N1cmZhY2VfY29weV9jaGVjayhzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCiAJY21k ID0gY29udGFpbmVyX29mKGhlYWRlciwgc3RydWN0IHZtd19zaWRfY21kLCBoZWFkZXIpOwogCi0J aWYgKCEoc3dfY29udGV4dC0+cXVpcmtzICYgVk1XX1FVSVJLX1NSQ19TSURfT0spKSB7Ci0JCXJl dCA9IHZtd19jbWRfcmVzX2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdfcmVzX3N1cmZh Y2UsCi0JCQkJCXVzZXJfc3VyZmFjZV9jb252ZXJ0ZXIsCi0JCQkJCSZjbWQtPmJvZHkuc3JjLnNp ZCwgTlVMTCk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JaWYgKHN3 X2NvbnRleHQtPnF1aXJrcyAmIFZNV19RVUlSS19EU1RfU0lEX09LKQotCQlyZXR1cm4gMDsKKwly ZXQgPSB2bXdfY21kX3Jlc19jaGVjayhkZXZfcHJpdiwgc3dfY29udGV4dCwgdm13X3Jlc19zdXJm YWNlLAorCQkJCXVzZXJfc3VyZmFjZV9jb252ZXJ0ZXIsCisJCQkJJmNtZC0+Ym9keS5zcmMuc2lk LCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHZtd19jbWRfcmVz X2NoZWNrKGRldl9wcml2LCBzd19jb250ZXh0LCB2bXdfcmVzX3N1cmZhY2UsCiAJCQkJIHVzZXJf c3VyZmFjZV9jb252ZXJ0ZXIsCkBAIC0xMjY2LDkgKzEyNjEsNiBAQCBzdGF0aWMgaW50IHZtd19j bWRfZG1hKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJaWYgKHVubGlrZWx5KHN1ZmZp eC0+bWF4aW11bU9mZnNldCA+IGJvX3NpemUpKQogCQlzdWZmaXgtPm1heGltdW1PZmZzZXQgPSBi b19zaXplOwogCi0JaWYgKHN3X2NvbnRleHQtPnF1aXJrcyAmIFZNV19RVUlSS19EU1RfU0lEX09L KQotCQlnb3RvIG91dF9ub19zdXJmYWNlOwotCiAJcmV0ID0gdm13X2NtZF9yZXNfY2hlY2soZGV2 X3ByaXYsIHN3X2NvbnRleHQsIHZtd19yZXNfc3VyZmFjZSwKIAkJCQl1c2VyX3N1cmZhY2VfY29u dmVydGVyLCAmY21kLT5kbWEuaG9zdC5zaWQsCiAJCQkJTlVMTCk7CkBAIC0xNTA3LDkgKzE0OTks NiBAQCBzdGF0aWMgaW50IHZtd19jbWRfdXBkYXRlX2diX2ltYWdlKHN0cnVjdCB2bXdfcHJpdmF0 ZSAqZGV2X3ByaXYsCiAKIAljbWQgPSBjb250YWluZXJfb2YoaGVhZGVyLCBzdHJ1Y3Qgdm13X2di X3N1cmZhY2VfY21kLCBoZWFkZXIpOwogCi0JaWYgKHN3X2NvbnRleHQtPnF1aXJrcyAmIFZNV19R VUlSS19TUkNfU0lEX09LKQotCQlyZXR1cm4gMDsKLQogCXJldHVybiB2bXdfY21kX3Jlc19jaGVj ayhkZXZfcHJpdiwgc3dfY29udGV4dCwgdm13X3Jlc19zdXJmYWNlLAogCQkJCSB1c2VyX3N1cmZh Y2VfY29udmVydGVyLAogCQkJCSAmY21kLT5ib2R5LmltYWdlLnNpZCwgTlVMTCk7CkBAIC0yNTU0 LDcgKzI1NDMsNiBAQCBpbnQgdm13X2V4ZWNidWZfcHJvY2VzcyhzdHJ1Y3QgZHJtX2ZpbGUgKmZp bGVfcHJpdiwKIAkJCXZvaWQgKmtlcm5lbF9jb21tYW5kcywKIAkJCXVpbnQzMl90IGNvbW1hbmRf c2l6ZSwKIAkJCXVpbnQ2NF90IHRocm90dGxlX3VzLAotCQkJdWludDMyX3QgcXVpcmtzLAogCQkJ c3RydWN0IGRybV92bXdfZmVuY2VfcmVwIF9fdXNlciAqdXNlcl9mZW5jZV9yZXAsCiAJCQlzdHJ1 Y3Qgdm13X2ZlbmNlX29iaiAqKm91dF9mZW5jZSkKIHsKQEAgLTI2MDksNyArMjU5Nyw2IEBAIGlu dCB2bXdfZXhlY2J1Zl9wcm9jZXNzKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAogCXN3X2Nv bnRleHQtPmZwID0gdm13X2Zwcml2KGZpbGVfcHJpdik7CiAJc3dfY29udGV4dC0+Y3VyX3JlbG9j ID0gMDsKIAlzd19jb250ZXh0LT5jdXJfdmFsX2J1ZiA9IDA7Ci0Jc3dfY29udGV4dC0+cXVpcmtz ID0gcXVpcmtzOwogCUlOSVRfTElTVF9IRUFEKCZzd19jb250ZXh0LT5yZXNvdXJjZV9saXN0KTsK IAlzd19jb250ZXh0LT5jdXJfcXVlcnlfYm8gPSBkZXZfcHJpdi0+cGlubmVkX2JvOwogCXN3X2Nv bnRleHQtPmxhc3RfcXVlcnlfY3R4ID0gTlVMTDsKQEAgLTI5MjEsNyArMjkwOCw2IEBAIGludCB2 bXdfZXhlY2J1Zl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCXJl dCA9IHZtd19leGVjYnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJpdiwKIAkJCQkgICh2b2lk IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZy0+Y29tbWFuZHMsCiAJCQkJICBOVUxMLCBhcmct PmNvbW1hbmRfc2l6ZSwgYXJnLT50aHJvdHRsZV91cywKLQkJCQkgIDAsCiAJCQkJICAodm9pZCBf X3VzZXIgKikodW5zaWduZWQgbG9uZylhcmctPmZlbmNlX3JlcCwKIAkJCQkgIE5VTEwpOwogCXR0 bV9yZWFkX3VubG9jaygmZGV2X3ByaXYtPnJlc2VydmF0aW9uX3NlbSk7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2ttcy5jCmluZGV4IDU5MDFkMzIuLjIzNGEzY2UgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdn Zngvdm13Z2Z4X2ttcy5jCkBAIC00MjcsMTAgKzQyNyw5IEBAIHN0YXRpYyBpbnQgdm13X2ZyYW1l YnVmZmVyX3N1cmZhY2VfZGlydHkoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIs CiAJCQkJCQkgICBjbGlwcywgTlVMTCwgTlVMTCwgMCwgMCwKIAkJCQkJCSAgIG51bV9jbGlwcywg aW5jLCBOVUxMKTsKIAllbHNlCi0JCXJldCA9IHZtd19rbXNfc3RkdV9kb19zdXJmYWNlX2RpcnR5 KGRldl9wcml2LCBmaWxlX3ByaXYsCi0JCQkJCQkgICAgJnZmYnMtPmJhc2UsCi0JCQkJCQkgICAg Y2xpcHMsIG51bV9jbGlwcywKLQkJCQkJCSAgICBpbmMpOworCQlyZXQgPSB2bXdfa21zX3N0ZHVf c3VyZmFjZV9kaXJ0eShkZXZfcHJpdiwgJnZmYnMtPmJhc2UsCisJCQkJCQkgY2xpcHMsIE5VTEws IE5VTEwsIDAsIDAsCisJCQkJCQkgbnVtX2NsaXBzLCBpbmMsIE5VTEwpOwogCiAJdm13X2ZpZm9f Zmx1c2goZGV2X3ByaXYsIGZhbHNlKTsKIAl0dG1fcmVhZF91bmxvY2soJmRldl9wcml2LT5yZXNl cnZhdGlvbl9zZW0pOwpAQCAtNDY3LDEwICs0NjYsMTQgQEAgaW50IHZtd19rbXNfcmVhZGJhY2so c3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAljYXNlIHZtd19kdV9zY3JlZW5fb2JqZWN0 OgogCQlyZXR1cm4gdm13X2ttc19zb3VfcmVhZGJhY2soZGV2X3ByaXYsIGZpbGVfcHJpdiwgdmZi LAogCQkJCQkgICAgdXNlcl9mZW5jZV9yZXAsIHZjbGlwcywgbnVtX2NsaXBzKTsKKwljYXNlIHZt d19kdV9zY3JlZW5fdGFyZ2V0OgorCQlyZXR1cm4gdm13X2ttc19zdGR1X2RtYShkZXZfcHJpdiwg ZmlsZV9wcml2LCB2ZmIsCisJCQkJCXVzZXJfZmVuY2VfcmVwLCBOVUxMLCB2Y2xpcHMsIG51bV9j bGlwcywKKwkJCQkJMSwgZmFsc2UsIHRydWUpOwogCWRlZmF1bHQ6CiAJCVdBUk5fT05DRSh0cnVl LAogCQkJICAiUmVhZGJhY2sgY2FsbGVkIHdpdGggaW52YWxpZCBkaXNwbGF5IHN5c3RlbS5cbiIp OwotCX0KK30KIAogCXJldHVybiAtRU5PU1lTOwogfQpAQCAtNjMyLDIwICs2MzUsMjMgQEAgc3Rh dGljIGludCB2bXdfZnJhbWVidWZmZXJfZG1hYnVmX2RpcnR5KHN0cnVjdCBkcm1fZnJhbWVidWZm ZXIgKmZyYW1lYnVmZmVyLAogCQlpbmNyZW1lbnQgPSAyOwogCX0KIAotCWlmIChkZXZfcHJpdi0+ bGR1X3ByaXYpIHsKLQkJcmV0ID0gdm13X2ttc19sZHVfZG9fZG1hYnVmX2RpcnR5KGRldl9wcml2 LCAmdmZiZC0+YmFzZSwKLQkJCQkJCSAgZmxhZ3MsIGNvbG9yLAotCQkJCQkJICBjbGlwcywgbnVt X2NsaXBzLCBpbmNyZW1lbnQpOwotCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5 X3VuaXQgPT0gdm13X2R1X3NjcmVlbl9vYmplY3QpIHsKKwlzd2l0Y2ggKGRldl9wcml2LT5hY3Rp dmVfZGlzcGxheV91bml0KSB7CisJY2FzZSB2bXdfZHVfc2NyZWVuX3RhcmdldDoKKwkJcmV0ID0g dm13X2ttc19zdGR1X2RtYShkZXZfcHJpdiwgTlVMTCwgJnZmYmQtPmJhc2UsIE5VTEwsCisJCQkJ ICAgICAgIGNsaXBzLCBOVUxMLCBudW1fY2xpcHMsIGluY3JlbWVudCwKKwkJCQkgICAgICAgdHJ1 ZSwgdHJ1ZSk7CisJCWJyZWFrOworCWNhc2Ugdm13X2R1X3NjcmVlbl9vYmplY3Q6CiAJCXJldCA9 IHZtd19rbXNfc291X2RvX2RtYWJ1Zl9kaXJ0eShkZXZfcHJpdiwgJnZmYmQtPmJhc2UsCiAJCQkJ CQkgIGNsaXBzLCBudW1fY2xpcHMsIGluY3JlbWVudCwKIAkJCQkJCSAgdHJ1ZSwKIAkJCQkJCSAg TlVMTCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHko ZGV2X3ByaXYsIGZpbGVfcHJpdiwKLQkJCQkJCSAgICAmdmZiZC0+YmFzZSwKLQkJCQkJCSAgICBj bGlwcywgbnVtX2NsaXBzLAotCQkJCQkJICAgIGluY3JlbWVudCk7CisJCWJyZWFrOworCWRlZmF1 bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJCVdBUk5fT05DRSh0cnVlLAorCQkJICAiRGlydHkgY2Fs bGVkIHdpdGggaW52YWxpZCBkaXNwbGF5IHN5c3RlbS5cbiIpOworCQlicmVhazsKIAl9CiAKIAl2 bXdfZmlmb19mbHVzaChkZXZfcHJpdiwgZmFsc2UpOwpAQCAtNzIxLDkgKzcyNyw5IEBAIHN0YXRp YyBpbnQgdm13X2NyZWF0ZV9kbWFidWZfcHJveHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIHsK IAl1aW50MzJfdCBmb3JtYXQ7CiAJc3RydWN0IGRybV92bXdfc2l6ZSBjb250ZW50X2Jhc2Vfc2l6 ZTsKKwlzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAotCiAJc3dpdGNoICht b2RlX2NtZC0+ZGVwdGgpIHsKIAljYXNlIDMyOgogCWNhc2UgMjQ6CkBAIC03NjIsMTUgKzc2OCwx OCBAQCBzdGF0aWMgaW50IHZtd19jcmVhdGVfZG1hYnVmX3Byb3h5KHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogVXNlIHRoZSBzYW1lIE1PQiBiYWNraW5n IGZvciBzdXJmYWNlICovCi0Jdm13X2RtYWJ1Zl9yZWZlcmVuY2UoZG1hYnVmX21vYik7Ci0KLQko KnNyZl9vdXQpLT5yZXMuYmFja3VwID0gZG1hYnVmX21vYjsKKwlyZXMgPSAmKCpzcmZfb3V0KS0+ cmVzOwogCi0JLyogRklYTUU6ICBXYWl0aW5nIGZvciBmYmRldiByZXdvcmsgdG8gZG8gYSBwcm9w ZXIgcmVzZXJ2ZS9waW4gKi8KLQlyZXQgPSB2bXdfcmVzb3VyY2VfdmFsaWRhdGUoJigqc3JmX291 dCktPnJlcyk7CisJLyogUmVzZXJ2ZSBhbmQgc3dpdGNoIHRoZSBiYWNraW5nIG1vYi4gKi8KKwlt dXRleF9sb2NrKCZyZXMtPmRldl9wcml2LT5jbWRidWZfbXV0ZXgpOworCSh2b2lkKSB2bXdfcmVz b3VyY2VfcmVzZXJ2ZShyZXMsIGZhbHNlLCB0cnVlKTsKKwl2bXdfZG1hYnVmX3VucmVmZXJlbmNl KCZyZXMtPmJhY2t1cCk7CisJcmVzLT5iYWNrdXAgPSB2bXdfZG1hYnVmX3JlZmVyZW5jZShkbWFi dWZfbW9iKTsKKwlyZXMtPmJhY2t1cF9vZmZzZXQgPSAwOworCXZtd19yZXNvdXJjZV91bnJlc2Vy dmUocmVzLCBOVUxMLCAwKTsKKwltdXRleF91bmxvY2soJnJlcy0+ZGV2X3ByaXYtPmNtZGJ1Zl9t dXRleCk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAKQEAgLTk4Nyw2ICs5OTYs NyBAQCBpbnQgdm13X2ttc19nZW5lcmljX3ByZXNlbnQoc3RydWN0IHZtd19wcml2YXRlICpkZXZf cHJpdiwKIAkJCQkJICAgIG51bV9jbGlwcywgMSwgTlVMTCk7CiB9CiAKKwogaW50IHZtd19rbXNf cHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAogCQkgICAgc3RydWN0IGRybV9m aWxlICpmaWxlX3ByaXYsCiAJCSAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIsCkBAIC05 OTgsMTMgKzEwMDgsMjMgQEAgaW50IHZtd19rbXNfcHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAogewogCWludCByZXQ7CiAKLQlpZiAoZGV2X3ByaXYtPmFjdGl2ZV9kaXNwbGF5 X3VuaXQgPT0gdm13X2R1X3NjcmVlbl90YXJnZXQpCi0JCXJldCA9IHZtd19rbXNfc3RkdV9wcmVz ZW50KGRldl9wcml2LCBmaWxlX3ByaXYsIHZmYiwgc2lkLAotCQkJCQkgICBkZXN0WCwgZGVzdFks IGNsaXBzLCBudW1fY2xpcHMpOwotCWVsc2UKLQkJcmV0ID0gdm13X2ttc19nZW5lcmljX3ByZXNl bnQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgdmZiLAotCQkJCQkgICAgICBzdXJmYWNlLCBzaWQsIGRl c3RYLCBkZXN0WSwKLQkJCQkJICAgICAgY2xpcHMsIG51bV9jbGlwcyk7CisJc3dpdGNoIChkZXZf cHJpdi0+YWN0aXZlX2Rpc3BsYXlfdW5pdCkgeworCWNhc2Ugdm13X2R1X3NjcmVlbl90YXJnZXQ6 CisJCXJldCA9IHZtd19rbXNfc3RkdV9zdXJmYWNlX2RpcnR5KGRldl9wcml2LCB2ZmIsIE5VTEws IGNsaXBzLAorCQkJCQkJICZzdXJmYWNlLT5yZXMsIGRlc3RYLCBkZXN0WSwKKwkJCQkJCSBudW1f Y2xpcHMsIDEsIE5VTEwpOworCQlicmVhazsKKwljYXNlIHZtd19kdV9zY3JlZW5fb2JqZWN0Ogor CQlyZXQgPSB2bXdfa21zX2dlbmVyaWNfcHJlc2VudChkZXZfcHJpdiwgZmlsZV9wcml2LCB2ZmIs IHN1cmZhY2UsCisJCQkJCSAgICAgIHNpZCwgZGVzdFgsIGRlc3RZLCBjbGlwcywKKwkJCQkJICAg ICAgbnVtX2NsaXBzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTkNFKHRydWUsCisJ CQkgICJQcmVzZW50IGNhbGxlZCB3aXRoIGludmFsaWQgZGlzcGxheSBzeXN0ZW0uXG4iKTsKKwkJ cmV0ID0gLUVOT1NZUzsKKwkJYnJlYWs7CisJfQogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAK QEAgLTE4ODIsMyArMTkwMiw3MiBAQCB2b2lkIHZtd19rbXNfaGVscGVyX3Jlc291cmNlX2Zpbmlz aChzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCiAJdm13X3Jlc291cmNlX3VucmVzZXJ2ZShyZXMs IE5VTEwsIDApOwogCW11dGV4X3VubG9jaygmcmVzLT5kZXZfcHJpdi0+Y21kYnVmX211dGV4KTsK IH0KKworLyoqCisgKiB2bXdfa21zX3VwZGF0ZV9wcm94eSAtIEhlbHBlciBmdW5jdGlvbiB0byB1 cGRhdGUgYSBwcm94eSBzdXJmYWNlIGZyb20KKyAqIGl0cyBiYWNraW5nIE1PQi4KKyAqCisgKiBA cmVzOiBQb2ludGVyIHRvIHRoZSBzdXJmYWNlIHJlc291cmNlCisgKiBAY2xpcHM6IENsaXAgcmVj dHMgaW4gZnJhbWVidWZmZXIgKHN1cmZhY2UpIHNwYWNlLgorICogQG51bV9jbGlwczogTnVtYmVy IG9mIGNsaXBzIGluIEBjbGlwcy4KKyAqIEBpbmNyZW1lbnQ6IEludGVnZXIgd2l0aCB3aGljaCB0 byBpbmNyZW1lbnQgdGhlIGNsaXAgY291bnRlciB3aGVuIGxvb3BpbmcuCisgKiBVc2VkIHRvIHNr aXAgYSBwcmVkZXRlcm1pbmVkIG51bWJlciBvZiBjbGlwIHJlY3RzLgorICoKKyAqIFRoaXMgZnVu Y3Rpb24gbWFrZXMgc3VyZSB0aGUgcHJveHkgc3VyZmFjZSBpcyB1cGRhdGVkIGZyb20gaXRzIGJh Y2tpbmcgTU9CCisgKiB1c2luZyB0aGUgcmVnaW9uIGdpdmVuIGJ5IEBjbGlwcy4gVGhlIHN1cmZh Y2UgcmVzb3VyY2UgQHJlcyBhbmQgaXRzIGJhY2tpbmcKKyAqIE1PQiBuZWVkcyB0byBiZSByZXNl cnZlZCBhbmQgdmFsaWRhdGVkIG9uIGNhbGwuCisgKi8KK2ludCB2bXdfa21zX3VwZGF0ZV9wcm94 eShzdHJ1Y3Qgdm13X3Jlc291cmNlICpyZXMsCisJCQkgY29uc3Qgc3RydWN0IGRybV9jbGlwX3Jl Y3QgKmNsaXBzLAorCQkJIHVuc2lnbmVkIG51bV9jbGlwcywKKwkJCSBpbnQgaW5jcmVtZW50KQor eworCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYgPSByZXMtPmRldl9wcml2OworCXN0cnVj dCBkcm1fdm13X3NpemUgKnNpemUgPSAmdm13X3Jlc190b19zcmYocmVzKS0+YmFzZV9zaXplOwor CXN0cnVjdCB7CisJCVNWR0EzZENtZEhlYWRlciBoZWFkZXI7CisJCVNWR0EzZENtZFVwZGF0ZUdC SW1hZ2UgYm9keTsKKwl9ICpjbWQ7CisJU1ZHQTNkQm94ICpib3g7CisJc2l6ZV90IGNvcHlfc2l6 ZSA9IDA7CisJaW50IGk7CisKKwlpZiAoIWNsaXBzKQorCQlyZXR1cm4gMDsKKworCWNtZCA9IHZt d19maWZvX3Jlc2VydmUoZGV2X3ByaXYsIHNpemVvZigqY21kKSAqIG51bV9jbGlwcyk7CisJaWYg KCFjbWQpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZG4ndCByZXNlcnZlIGZpZm8gc3BhY2UgZm9yIHBy b3h5IHN1cmZhY2UgIgorCQkJICAidXBkYXRlLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0K KworCWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7ICsraSwgY2xpcHMgKz0gaW5jcmVtZW50LCAr K2NtZCkgeworCQlib3ggPSAmY21kLT5ib2R5LmJveDsKKworCQljbWQtPmhlYWRlci5pZCA9IFNW R0FfM0RfQ01EX1VQREFURV9HQl9JTUFHRTsKKwkJY21kLT5oZWFkZXIuc2l6ZSA9IHNpemVvZihj bWQtPmJvZHkpOworCQljbWQtPmJvZHkuaW1hZ2Uuc2lkID0gcmVzLT5pZDsKKwkJY21kLT5ib2R5 LmltYWdlLmZhY2UgPSAwOworCQljbWQtPmJvZHkuaW1hZ2UubWlwbWFwID0gMDsKKworCQlpZiAo Y2xpcHMtPngxID4gc2l6ZS0+d2lkdGggfHwgY2xpcHMtPngyID4gc2l6ZS0+d2lkdGggfHwKKwkJ ICAgIGNsaXBzLT55MSA+IHNpemUtPmhlaWdodCB8fCBjbGlwcy0+eTIgPiBzaXplLT5oZWlnaHQp IHsKKwkJCURSTV9FUlJPUigiSW52YWxpZCBjbGlwcyBvdXRzaXplIG9mIGZyYW1lYnVmZmVyLlxu Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWJveC0+eCA9IGNsaXBzLT54MTsKKwkJ Ym94LT55ID0gY2xpcHMtPnkxOworCQlib3gtPnogPSAwOworCQlib3gtPncgPSBjbGlwcy0+eDIg LSBjbGlwcy0+eDE7CisJCWJveC0+aCA9IGNsaXBzLT55MiAtIGNsaXBzLT55MTsKKwkJYm94LT5k ID0gMTsKKworCQljb3B5X3NpemUgKz0gc2l6ZW9mKCpjbWQpOworCX0KKworCXZtd19maWZvX2Nv bW1pdChkZXZfcHJpdiwgY29weV9zaXplKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmggYi9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9rbXMuaAppbmRleCA4YTgyMDNjLi5mOTQxZjkyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9rbXMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13 Z2Z4L3Ztd2dmeF9rbXMuaApAQCAtMjM5LDYgKzIzOSw3IEBAIGludCB2bXdfa21zX3JlYWRiYWNr KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCSAgICAgc3RydWN0IGRybV92bXdfcmVj dCAqdmNsaXBzLAogCQkgICAgIHVpbnQzMl90IG51bV9jbGlwcyk7CiAKKwogLyoKICAqIExlZ2Fj eSBkaXNwbGF5IHVuaXQgZnVuY3Rpb25zIC0gdm13Z2Z4X2xkdS5jCiAgKi8KQEAgLTI0OSw2ICsy NTAsMTAgQEAgaW50IHZtd19rbXNfbGR1X2RvX2RtYWJ1Zl9kaXJ0eShzdHJ1Y3Qgdm13X3ByaXZh dGUgKmRldl9wcml2LAogCQkJCXVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjb2xvciwKIAkJCQlz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCiAJCQkJdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQg aW5jcmVtZW50KTsKK2ludCB2bXdfa21zX3VwZGF0ZV9wcm94eShzdHJ1Y3Qgdm13X3Jlc291cmNl ICpyZXMsCisJCQkgY29uc3Qgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJIHVuc2ln bmVkIG51bV9jbGlwcywKKwkJCSBpbnQgaW5jcmVtZW50KTsKIAogLyoKICAqIFNjcmVlbiBPYmpl Y3RzIGRpc3BsYXkgZnVuY3Rpb25zIC0gdm13Z2Z4X3Njcm4uYwpAQCAtMjgyLDE3ICsyODcsMjUg QEAgaW50IHZtd19rbXNfc291X3JlYWRiYWNrKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CiAgKi8KIGludCB2bXdfa21zX3N0ZHVfaW5pdF9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYpOwogaW50IHZtd19rbXNfc3RkdV9jbG9zZV9kaXNwbGF5KHN0cnVjdCB2bXdfcHJp dmF0ZSAqZGV2X3ByaXYpOwotaW50IHZtd19rbXNfc3RkdV9kb19zdXJmYWNlX2RpcnR5KHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwKLQkJCQkgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAotCQkJCSAgc3Ry dWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAotCQkJCSAgdW5zaWduZWQgbnVtX2NsaXBzLCBpbnQg aW5jcmVtZW50KTsKLWludCB2bXdfa21zX3N0ZHVfcHJlc2VudChzdHJ1Y3Qgdm13X3ByaXZhdGUg KmRldl9wcml2LAotCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJIHN0cnVjdCB2 bXdfZnJhbWVidWZmZXIgKnZmYiwKLQkJCSB1aW50MzJfdCB1c2VyX2hhbmRsZSwKLQkJCSBpbnQz Ml90IGRlc3RfeCwgaW50MzJfdCBkZXN0X3ksCi0JCQkgc3RydWN0IGRybV92bXdfcmVjdCAqY2xp cHMsCi0JCQkgdWludDMyX3QgbnVtX2NsaXBzKTsKK2ludCB2bXdfa21zX3N0ZHVfc3VyZmFjZV9k aXJ0eShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkJICAgICAgIHN0cnVjdCB2bXdf ZnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyLAorCQkJICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0 ICpjbGlwcywKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX3Ztd19yZWN0ICp2Y2xpcHMsCisJCQkgICAg ICAgc3RydWN0IHZtd19yZXNvdXJjZSAqc3JmLAorCQkJICAgICAgIHMzMiBkZXN0X3gsCisJCQkg ICAgICAgczMyIGRlc3RfeSwKKwkJCSAgICAgICB1bnNpZ25lZCBudW1fY2xpcHMsIGludCBpbmMs CisJCQkgICAgICAgc3RydWN0IHZtd19mZW5jZV9vYmogKipvdXRfZmVuY2UpOworaW50IHZtd19r bXNfc3RkdV9kbWEoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKKwkJICAgICBzdHJ1Y3Qg ZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIs CisJCSAgICAgc3RydWN0IGRybV92bXdfZmVuY2VfcmVwIF9fdXNlciAqdXNlcl9mZW5jZV9yZXAs CisJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkgICAgIHN0cnVjdCBkcm1f dm13X3JlY3QgKnZjbGlwcywKKwkJICAgICB1aW50MzJfdCBudW1fY2xpcHMsCisJCSAgICAgaW50 IGluY3JlbWVudCwKKwkJICAgICBib29sIHRvX3N1cmZhY2UsCisJCSAgICAgYm9vbCBpbnRlcnJ1 cHRpYmxlKTsKKwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngv dm13Z2Z4X3Jlc291cmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9yZXNvdXJj ZS5jCmluZGV4IDUyMWYxOTQuLjY5YjQ3MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92 bXdnZngvdm13Z2Z4X3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdn ZnhfcmVzb3VyY2UuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBAIGludCB2bXdfdXNlcl9kbWFidWZfYWxs b2Moc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAogCXJldCA9IHZtd19kbWFidWZfaW5p dChkZXZfcHJpdiwgJnVzZXJfYm8tPmRtYSwgc2l6ZSwKIAkJCSAgICAgIChkZXZfcHJpdi0+aGFz X21vYikgPwotCQkJICAgICAgJnZtd19tb2JfcGxhY2VtZW50IDoKKwkJCSAgICAgICZ2bXdfc3lz X3BsYWNlbWVudCA6CiAJCQkgICAgICAmdm13X3ZyYW1fc3lzX3BsYWNlbWVudCwgdHJ1ZSwKIAkJ CSAgICAgICZ2bXdfdXNlcl9kbWFidWZfZGVzdHJveSk7CiAJaWYgKHVubGlrZWx5KHJldCAhPSAw KSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYyBiL2Ry aXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X3N0ZHUuYwppbmRleCBiZWNmOTY1Li40OTNmY2Qx IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9zdGR1LmMKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfc3RkdS5jCkBAIC0xLDYgKzEsNiBAQAogLyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodCDCqSAyMDE0IFZNd2FyZSwgSW5j LiwgUGFsbyBBbHRvLCBDQS4sIFVTQQorICogQ09QWVJJR0hUIMKpIDIwMTQgVk13YXJlLCBJbmMu LCBQYWxvIEFsdG8sIENBLiwgVVNBCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCkBAIC00NCw2ICs0NCw0NyBAQCBlbnVtIHN0ZHVfY29udGVudF90eXBlIHsK IAlTRVBBUkFURV9ETUEKIH07CiAKKy8qKgorICogc3RydWN0IHZtd19zdGR1X2RpcnR5IC0gY2xv c3VyZSBzdHJ1Y3R1cmUgZm9yIHRoZSB1cGRhdGUgZnVuY3Rpb25zCisgKgorICogQGJhc2U6IFRo ZSBiYXNlIHR5cGUgd2UgZGVyaXZlIGZyb20uIFVzZWQgYnkgdm13X2ttc19oZWxwZXJfZGlydHko KS4KKyAqIEB0cmFuc2ZlcjogVHJhbnNmZXIgZGlyZWN0aW9uIGZvciBETUEgY29tbWFuZC4KKyAq IEBsZWZ0OiBMZWZ0IHNpZGUgb2YgYm91bmRpbmcgYm94LgorICogQHJpZ2h0OiBSaWdodCBzaWRl IG9mIGJvdW5kaW5nIGJveC4KKyAqIEB0b3A6IFRvcCBzaWRlIG9mIGJvdW5kaW5nIGJveC4KKyAq IEBib3R0b206IEJvdHRvbSBzaWRlIG9mIGJvdW5kaW5nIGJveC4KKyAqIEBidWY6IERNQSBidWZm ZXIgd2hlbiBETUEtaW5nIGJldHdlZW4gYnVmZmVyIGFuZCBzY3JlZW4gdGFyZ2V0cy4KKyAqIEBz aWQ6IFN1cmZhY2UgSUQgd2hlbiBjb3B5aW5nIGJldHdlZW4gc3VyZmFjZSBhbmQgc2NyZWVuIHRh cmdldHMuCisgKi8KK3N0cnVjdCB2bXdfc3RkdV9kaXJ0eSB7CisJc3RydWN0IHZtd19rbXNfZGly dHkgYmFzZTsKKwlTVkdBM2RUcmFuc2ZlclR5cGUgIHRyYW5zZmVyOworCXMzMiBsZWZ0LCByaWdo dCwgdG9wLCBib3R0b207CisJdTMyIHBpdGNoOworCXVuaW9uIHsKKwkJc3RydWN0IHZtd19kbWFf YnVmZmVyICpidWY7CisJCXUzMiBzaWQ7CisJfTsKK307CisKKy8qCisgKiBTVkdBIGNvbW1hbmRz IHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBjb2RlLiBQbGVhc2Ugc2VlIHRoZSBkZXZpY2UgaGVhZGVy cworICogZm9yIGV4cGxhbmF0aW9uLgorICovCitzdHJ1Y3Qgdm13X3N0ZHVfdXBkYXRlIHsKKwlT VkdBM2RDbWRIZWFkZXIgaGVhZGVyOworCVNWR0EzZENtZFVwZGF0ZUdCU2NyZWVuVGFyZ2V0IGJv ZHk7Cit9OworCitzdHJ1Y3Qgdm13X3N0ZHVfZG1hIHsKKwlTVkdBM2RDbWRIZWFkZXIgICAgIGhl YWRlcjsKKwlTVkdBM2RDbWRTdXJmYWNlRE1BIGJvZHk7Cit9OworCitzdHJ1Y3Qgdm13X3N0ZHVf c3VyZmFjZV9jb3B5IHsKKwlTVkdBM2RDbWRIZWFkZXIgICAgICBoZWFkZXI7CisJU1ZHQTNkQ21k U3VyZmFjZUNvcHkgYm9keTsKK307CiAKIAogLyoqCkBAIC0xMzksMjU0ICsxODAsNiBAQCBzdGF0 aWMgdm9pZCB2bXdfc3RkdV9jcnRjX2Rlc3Ryb3koc3RydWN0IGRybV9jcnRjICpjcnRjKQogCXZt d19zdGR1X2Rlc3Ryb3kodm13X2NydGNfdG9fc3RkdShjcnRjKSk7CiB9CiAKLQotCi0vKioKLSAq IHZtd19zdGR1X2RtYV91cGRhdGUgLSBVcGRhdGUgRE1BIGJ1ZiBkaXJ0eSByZWdpb24gb24gdGhl IFNWR0EgZGV2aWNlCi0gKgotICogQGRldl9wcml2OiAgVk1XIERSTSBkZXZpY2UKLSAqIEBmaWxl X3ByaXY6IFBvaW50ZXIgdG8gYSBkcm0gZmlsZSBwcml2YXRlIHN0cnVjdHVyZQotICogQHZmYnM6 IFZNVyBmcmFtZWJ1ZmZlciBzdXJmYWNlIHRoYXQgbWF5IG5lZWQgYSBETUEgYnVmIHVwZGF0ZQot ICogQHg6IHRvcC9sZWZ0IGNvcm5lciBvZiB0aGUgY29udGVudCBhcmVhIHRvIGJsaXQgZnJvbQot ICogQHk6IHRvcC9sZWZ0IGNvcm5lciBvZiB0aGUgY29udGVudCBhcmVhIHRvIGJsaXQgZnJvbQot ICogQHdpZHRoOiB3aWR0aCBvZiB0aGUgYmxpdCBhcmVhCi0gKiBAaGVpZ2h0OiBoZWlnaHQgb2Yg dGhlIGJsaXQgYXJlYQotICoKLSAqIFRoZSBTVkdBIGRldmljZSBtYXkgaGF2ZSB0aGUgRE1BIGJ1 ZiBjYWNoZWQsIHNvIGJlZm9yZSBsZXR0aW5nIHRoZQotICogZGV2aWNlIHVzZSBpdCBhcyB0aGUg c291cmNlIGltYWdlIGZvciBhIHN1YnNlcXVlbnQgb3BlcmF0aW9uLCB3ZQotICogdXBkYXRlIHRo ZSBjYWNoZWQgY29weS4KLSAqCi0gKiBSRVRVUk5zOgotICogMCBvbiBzdWNjZXNzLCBlcnJvciBj b2RlIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCB2bXdfc3RkdV9kbWFfdXBkYXRlKHN0cnVj dCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCi0JCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxl X3ByaXYsCi0JCQkgICAgICAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlICp2ZmJzLAot CQkJICAgICAgIHVpbnQzMl90IHgsIHVpbnQzMl90IHksCi0JCQkgICAgICAgdWludDMyX3Qgd2lk dGgsIHVpbnQzMl90IGhlaWdodCkKLXsKLQlzaXplX3QgZmlmb19zaXplOwotCXN0cnVjdCB7Ci0J CVNWR0EzZENtZEhlYWRlciBoZWFkZXI7Ci0JCVNWR0EzZENtZFVwZGF0ZUdCSW1hZ2UgYm9keTsK LQl9IGltZ191cGRhdGVfY21kOwotCi0KLQkvKiBPbmx5IG5lZWQgdG8gZG8gdGhpcyBpZiB0aGUg c3VyZmFjZSBpcyBhIERNQSBidWYgcHJveHkgKi8KLQlpZiAoIXZmYnMtPmlzX2RtYWJ1Zl9wcm94 eSkKLQkJcmV0dXJuIDA7Ci0KLQlmaWZvX3NpemUgPSBzaXplb2YoaW1nX3VwZGF0ZV9jbWQpOwot Ci0JbWVtc2V0KCZpbWdfdXBkYXRlX2NtZCwgMCwgZmlmb19zaXplKTsKLQlpbWdfdXBkYXRlX2Nt ZC5oZWFkZXIuaWQgICA9IFNWR0FfM0RfQ01EX1VQREFURV9HQl9JTUFHRTsKLQlpbWdfdXBkYXRl X2NtZC5oZWFkZXIuc2l6ZSA9IHNpemVvZihpbWdfdXBkYXRlX2NtZC5ib2R5KTsKLQotCWltZ191 cGRhdGVfY21kLmJvZHkuaW1hZ2Uuc2lkID0gdmZicy0+c3VyZmFjZS0+cmVzLmlkOwotCi0JaW1n X3VwZGF0ZV9jbWQuYm9keS5ib3gueCA9IHg7Ci0JaW1nX3VwZGF0ZV9jbWQuYm9keS5ib3gueSA9 IHk7Ci0JaW1nX3VwZGF0ZV9jbWQuYm9keS5ib3gudyA9IHdpZHRoOwotCWltZ191cGRhdGVfY21k LmJvZHkuYm94LmggPSBoZWlnaHQ7Ci0JaW1nX3VwZGF0ZV9jbWQuYm9keS5ib3guZCA9IDE7Ci0K LQlyZXR1cm4gdm13X2V4ZWNidWZfcHJvY2VzcyhmaWxlX3ByaXYsIGRldl9wcml2LCBOVUxMLAot CQkJCSAgICh2b2lkICopICZpbWdfdXBkYXRlX2NtZCwKLQkJCQkgICBmaWZvX3NpemUsIDAsIFZN V19RVUlSS19TUkNfU0lEX09LLAotCQkJCSAgIE5VTEwsIE5VTEwpOwotfQotCi0KLQotLyoqCi0g KiB2bXdfc3RkdV9jb250ZW50X2NvcHkgLSBjb3BpZXMgYW4gYXJlYSBmcm9tIHRoZSBjb250ZW50 IHRvIGRpc3BsYXkgc3VyZmFjZQotICoKLSAqIEBkZXZfcHJpdjogIFZNVyBEUk0gZGV2aWNlCi0g KiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgZHJtIGZpbGUgcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAq IEBzdGR1OiBTVERVIHdob3NlIGRpc3BsYXkgc3VyZmFjZSB3aWxsIGJlIGJsaXR0ZWQgdG8KLSAq IEBjb250ZW50X3g6IHRvcC9sZWZ0IGNvcm5lciBvZiB0aGUgY29udGVudCBhcmVhIHRvIGJsaXQg ZnJvbQotICogQGNvbnRlbnRfeTogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBjb250ZW50IGFyZWEg dG8gYmxpdCBmcm9tCi0gKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBibGl0IGFyZWEKLSAqIEBoZWln aHQ6IGhlaWdodCBvZiB0aGUgYmxpdCBhcmVhCi0gKiBAZGlzcGxheV94OiB0b3AvbGVmdCBjb3Ju ZXIgb2YgdGhlIGRpc3BsYXkgYXJlYSB0byBibGl0IHRvCi0gKiBAZGlzcGxheV95OiB0b3AvbGVm dCBjb3JuZXIgb2YgdGhlIGRpc3BsYXkgYXJlYSB0byBibGl0IHRvCi0gKgotICogQ29waWVzIGFu IGFyZWEgZnJvbSB0aGUgY29udGVudCBzdXJmYWNlIHRvIHRoZSBkaXNwbGF5IHN1cmZhY2UuCi0g KgotICogUkVUVVJOczoKLSAqIDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlCi0g Ki8KLXN0YXRpYyBpbnQgdm13X3N0ZHVfY29udGVudF9jb3B5KHN0cnVjdCB2bXdfcHJpdmF0ZSAq ZGV2X3ByaXYsCi0JCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCSBzdHJ1Y3Qg dm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0ICpzdGR1LAotCQkJCSB1aW50MzJfdCBjb250 ZW50X3gsIHVpbnQzMl90IGNvbnRlbnRfeSwKLQkJCQkgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90 IGhlaWdodCwKLQkJCQkgdWludDMyX3QgZGlzcGxheV94LCB1aW50MzJfdCBkaXNwbGF5X3kpCi17 Ci0Jc3RydWN0IHZtd19mcmFtZWJ1ZmZlcl9zdXJmYWNlICpjb250ZW50X3ZmYnM7Ci0Jc2l6ZV90 IGZpZm9fc2l6ZTsJCi0JaW50IHJldDsKLQl2b2lkICpjbWQ7Ci0JdTMyIHF1aXJrcyA9IFZNV19R VUlSS19EU1RfU0lEX09LOwotCi0Jc3RydWN0IHsKLQkJU1ZHQTNkQ21kSGVhZGVyICAgICBoZWFk ZXI7Ci0JCVNWR0EzZENtZFN1cmZhY2VETUEgYm9keTsKLQkJU1ZHQTNkQ29weUJveCAgICAgICBh cmVhOwotCQlTVkdBM2RDbWRTdXJmYWNlRE1BU3VmZml4IHN1ZmZpeDsKLQl9IHN1cmZhY2VfZG1h X2NtZDsKLQotCXN0cnVjdCB7Ci0JCVNWR0EzZENtZEhlYWRlciAgICAgIGhlYWRlcjsKLQkJU1ZH QTNkQ21kU3VyZmFjZUNvcHkgYm9keTsKLQkJU1ZHQTNkQ29weUJveCAgICAgICAgYXJlYTsKLQl9 IHN1cmZhY2VfY3B5X2NtZDsKLQotCi0JLyoKLQkgKiBDYW4gb25seSBjb3B5IGlmIGNvbnRlbnQg YW5kIGRpc3BsYXkgc3VyZmFjZXMgZXhpc3QgYW5kIGFyZSBub3QKLQkgKiB0aGUgc2FtZSBzdXJm YWNlCi0JICovCi0JaWYgKHN0ZHUtPmRpc3BsYXlfc3JmID09IE5VTEwgfHwgc3RkdS0+Y29udGVu dF9mYiA9PSBOVUxMIHx8Ci0JICAgIHN0ZHUtPmNvbnRlbnRfZmJfdHlwZSA9PSBTQU1FX0FTX0RJ U1BMQVkpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0KLQlpZiAoc3RkdS0+Y29udGVudF9m Yl90eXBlID09IFNFUEFSQVRFX0RNQSkgewotCQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpjb250 ZW50X3ZmYjsKLQkJc3RydWN0IGRybV92bXdfc2l6ZSBjdXJfc2l6ZSA9IHswfTsKLQkJY29uc3Qg c3RydWN0IHN2Z2EzZF9zdXJmYWNlX2Rlc2MgKmRlc2M7Ci0JCWVudW0gU1ZHQTNkU3VyZmFjZUZv cm1hdCBmb3JtYXQ7Ci0JCVNWR0EzZENtZFN1cmZhY2VETUFTdWZmaXggKnN1ZmZpeDsKLQkJU1ZH QUd1ZXN0UHRyIHB0cjsKLQotCi0JCWNvbnRlbnRfdmZiICA9IHZtd19mcmFtZWJ1ZmZlcl90b192 ZmIoc3RkdS0+Y29udGVudF9mYik7Ci0KLQkJY3VyX3NpemUud2lkdGggID0gd2lkdGg7Ci0JCWN1 cl9zaXplLmhlaWdodCA9IGhlaWdodDsKLQkJY3VyX3NpemUuZGVwdGggID0gMTsKLQotCQkvKiBE ZXJpdmUgYSBTVkdBM2RTdXJmYWNlRm9ybWF0IGZvciB0aGUgRE1BIGJ1ZiAqLwotCQlzd2l0Y2gg KGNvbnRlbnRfdmZiLT5iYXNlLmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgMzI6Ci0JCQlmb3Jt YXQgPSBTVkdBM0RfQThSOEc4Qjg7Ci0JCQlicmVhazsKLQkJY2FzZSAyNDoKLQkJCWZvcm1hdCA9 IFNWR0EzRF9YOFI4RzhCODsKLQkJCWJyZWFrOwotCQljYXNlIDE2OgotCQkJZm9ybWF0ID0gU1ZH QTNEX1I1RzZCNTsKLQkJCWJyZWFrOwotCQljYXNlIDE1OgotCQkJZm9ybWF0ID0gU1ZHQTNEX0Ex UjVHNUI1OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoIkludmFsaWQgY29s b3IgZGVwdGg6ICVkXG4iLAotCQkJCQljb250ZW50X3ZmYi0+YmFzZS5kZXB0aCk7Ci0JCQlyZXR1 cm4gLUVJTlZBTDsKLQkJfQotCi0JCWRlc2MgPSBzdmdhM2RzdXJmYWNlX2dldF9kZXNjKGZvcm1h dCk7Ci0KLQotCQlmaWZvX3NpemUgPSBzaXplb2Yoc3VyZmFjZV9kbWFfY21kKTsKLQotCQltZW1z ZXQoJnN1cmZhY2VfZG1hX2NtZCwgMCwgZmlmb19zaXplKTsKLQotCQlwdHIuZ21ySWQgID0gY29u dGVudF92ZmItPnVzZXJfaGFuZGxlOwotCQlwdHIub2Zmc2V0ID0gMDsKLQotCQlzdXJmYWNlX2Rt YV9jbWQuaGVhZGVyLmlkICAgPSBTVkdBXzNEX0NNRF9TVVJGQUNFX0RNQTsKLQkJc3VyZmFjZV9k bWFfY21kLmhlYWRlci5zaXplID0gc2l6ZW9mKHN1cmZhY2VfZG1hX2NtZC5ib2R5KSArCi0JCQkJ CSAgICAgIHNpemVvZihzdXJmYWNlX2RtYV9jbWQuYXJlYSkgKwotCQkJCQkgICAgICBzaXplb2Yo c3VyZmFjZV9kbWFfY21kLnN1ZmZpeCk7Ci0KLQkJc3VyZmFjZV9kbWFfY21kLmJvZHkuZ3Vlc3Qu cHRyICAgPSBwdHI7Ci0JCXN1cmZhY2VfZG1hX2NtZC5ib2R5Lmd1ZXN0LnBpdGNoID0gc3RkdS0+ Y29udGVudF9mYi0+cGl0Y2hlc1swXTsKLQkJc3VyZmFjZV9kbWFfY21kLmJvZHkuaG9zdC5zaWQg ICAgPSBzdGR1LT5kaXNwbGF5X3NyZi0+cmVzLmlkOwotCQlzdXJmYWNlX2RtYV9jbWQuYm9keS5o b3N0LmZhY2UgICA9IDA7Ci0JCXN1cmZhY2VfZG1hX2NtZC5ib2R5Lmhvc3QubWlwbWFwID0gMDsK LQkJc3VyZmFjZV9kbWFfY21kLmJvZHkudHJhbnNmZXIgICAgPSBTVkdBM0RfV1JJVEVfSE9TVF9W UkFNOwotCi0JCXN1cmZhY2VfZG1hX2NtZC5hcmVhLnNyY3ggPSBjb250ZW50X3g7Ci0JCXN1cmZh Y2VfZG1hX2NtZC5hcmVhLnNyY3kgPSBjb250ZW50X3k7Ci0JCXN1cmZhY2VfZG1hX2NtZC5hcmVh LnggICAgPSBkaXNwbGF5X3g7Ci0JCXN1cmZhY2VfZG1hX2NtZC5hcmVhLnkgICAgPSBkaXNwbGF5 X3k7Ci0JCXN1cmZhY2VfZG1hX2NtZC5hcmVhLmQgICAgPSAxOwotCQlzdXJmYWNlX2RtYV9jbWQu YXJlYS53ICAgID0gd2lkdGg7Ci0JCXN1cmZhY2VfZG1hX2NtZC5hcmVhLmggICAgPSBoZWlnaHQ7 Ci0KLQkJc3VmZml4ID0gJnN1cmZhY2VfZG1hX2NtZC5zdWZmaXg7Ci0KLQkJc3VmZml4LT5zdWZm aXhTaXplICAgID0gc2l6ZW9mKCpzdWZmaXgpOwotCQlzdWZmaXgtPm1heGltdW1PZmZzZXQgPSBz dmdhM2RzdXJmYWNlX2dldF9pbWFnZV9idWZmZXJfc2l6ZSgKLQkJCQkJCWRlc2MsCi0JCQkJCQkm Y3VyX3NpemUsCi0JCQkJCQlzdGR1LT5jb250ZW50X2ZiLT5waXRjaGVzWzBdKTsKLQotCQljbWQg PSAodm9pZCAqKSAmc3VyZmFjZV9kbWFfY21kOwotCX0gZWxzZSB7Ci0JCXUzMiBzcmNfaWQ7Ci0K LQotCQljb250ZW50X3ZmYnMgPSB2bXdfZnJhbWVidWZmZXJfdG9fdmZicyhzdGR1LT5jb250ZW50 X2ZiKTsKLQotCQlpZiAoY29udGVudF92ZmJzLT5pc19kbWFidWZfcHJveHkpIHsKLQkJCXJldCA9 IHZtd19zdGR1X2RtYV91cGRhdGUoZGV2X3ByaXYsIGZpbGVfcHJpdiwKLQkJCQkJCSAgY29udGVu dF92ZmJzLAotCQkJCQkJICBjb250ZW50X3gsIGNvbnRlbnRfeSwKLQkJCQkJCSAgd2lkdGgsIGhl aWdodCk7Ci0KLQkJCWlmIChyZXQgIT0gMCkgewotCQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIHVw ZGF0ZSBjYWNoZWQgRE1BIGJ1ZlxuIik7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJcXVp cmtzIHw9IFZNV19RVUlSS19TUkNfU0lEX09LOwotCQkJc3JjX2lkID0gY29udGVudF92ZmJzLT5z dXJmYWNlLT5yZXMuaWQ7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICpj b250ZW50X3ZmYjsKLQotCQkJY29udGVudF92ZmIgPSB2bXdfZnJhbWVidWZmZXJfdG9fdmZiKHN0 ZHUtPmNvbnRlbnRfZmIpOwotCQkJc3JjX2lkID0gY29udGVudF92ZmItPnVzZXJfaGFuZGxlOwot CQl9Ci0gCi0JCWZpZm9fc2l6ZSA9IHNpemVvZihzdXJmYWNlX2NweV9jbWQpOwotCi0JCW1lbXNl dCgmc3VyZmFjZV9jcHlfY21kLCAwLCBmaWZvX3NpemUpOwotCi0JCXN1cmZhY2VfY3B5X2NtZC5o ZWFkZXIuaWQgICA9IFNWR0FfM0RfQ01EX1NVUkZBQ0VfQ09QWTsKLQkJc3VyZmFjZV9jcHlfY21k LmhlYWRlci5zaXplID0gc2l6ZW9mKHN1cmZhY2VfY3B5X2NtZC5ib2R5KSArCi0JCQkJCSAgICAg IHNpemVvZihzdXJmYWNlX2NweV9jbWQuYXJlYSk7Ci0KLQkJc3VyZmFjZV9jcHlfY21kLmJvZHku c3JjLnNpZCAgPSBzcmNfaWQ7Ci0JCXN1cmZhY2VfY3B5X2NtZC5ib2R5LmRlc3Quc2lkID0gc3Rk dS0+ZGlzcGxheV9zcmYtPnJlcy5pZDsKLQotCQlzdXJmYWNlX2NweV9jbWQuYXJlYS5zcmN4ID0g Y29udGVudF94OwotCQlzdXJmYWNlX2NweV9jbWQuYXJlYS5zcmN5ID0gY29udGVudF95OwotCQlz dXJmYWNlX2NweV9jbWQuYXJlYS54ICAgID0gZGlzcGxheV94OwotCQlzdXJmYWNlX2NweV9jbWQu YXJlYS55ICAgID0gZGlzcGxheV95OwotCQlzdXJmYWNlX2NweV9jbWQuYXJlYS5kICAgID0gMTsK LQkJc3VyZmFjZV9jcHlfY21kLmFyZWEudyAgICA9IHdpZHRoOwotCQlzdXJmYWNlX2NweV9jbWQu YXJlYS5oICAgID0gaGVpZ2h0OwotCi0JCWNtZCA9ICh2b2lkICopICZzdXJmYWNlX2NweV9jbWQ7 Ci0JfQotCi0KLQotCXJldCA9IHZtd19leGVjYnVmX3Byb2Nlc3MoZmlsZV9wcml2LCBkZXZfcHJp diwgTlVMTCwKLQkJCQkgICh2b2lkICopIGNtZCwKLQkJCQkgIGZpZm9fc2l6ZSwgMCwgcXVpcmtz LAotCQkJCSAgTlVMTCwgTlVMTCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLQogLyoqCiAgKiB2 bXdfc3RkdV9kZWZpbmVfc3QgLSBEZWZpbmVzIGEgU2NyZWVuIFRhcmdldAogICoKQEAgLTQ4Nywx MDggKzI4MCw1NiBAQCBzdGF0aWMgaW50IHZtd19zdGR1X2JpbmRfc3Qoc3RydWN0IHZtd19wcml2 YXRlICpkZXZfcHJpdiwKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiB2bXdfc3RkdV9wb3B1bGF0 ZV91cGRhdGUgLSBwb3B1bGF0ZSBhbiBVUERBVEVfR0JfU0NSRUVOVEFSR0VUIGNvbW1hbmQgd2l0 aCBhCisgKiBib3VuZGluZyBib3guCisgKgorICogQGNtZDogUG9pbnRlciB0byBjb21tYW5kIHN0 cmVhbS4KKyAqIEB1bml0OiBTY3JlZW4gdGFyZ2V0IHVuaXQuCisgKiBAbGVmdDogTGVmdCBzaWRl IG9mIGJvdW5kaW5nIGJveC4KKyAqIEByaWdodDogUmlnaHQgc2lkZSBvZiBib3VuZGluZyBib3gu CisgKiBAdG9wOiBUb3Agc2lkZSBvZiBib3VuZGluZyBib3guCisgKiBAYm90dG9tOiBCb3R0b20g c2lkZSBvZiBib3VuZGluZyBib3guCisgKi8KK3N0YXRpYyB2b2lkIHZtd19zdGR1X3BvcHVsYXRl X3VwZGF0ZSh2b2lkICpjbWQsIGludCB1bml0LAorCQkJCSAgICAgczMyIGxlZnQsIHMzMiByaWdo dCwgczMyIHRvcCwgczMyIGJvdHRvbSkKK3sKKwlzdHJ1Y3Qgdm13X3N0ZHVfdXBkYXRlICp1cGRh dGUgPSBjbWQ7CisKKwl1cGRhdGUtPmhlYWRlci5pZCAgID0gU1ZHQV8zRF9DTURfVVBEQVRFX0dC X1NDUkVFTlRBUkdFVDsKKwl1cGRhdGUtPmhlYWRlci5zaXplID0gc2l6ZW9mKHVwZGF0ZS0+Ym9k eSk7CiAKKwl1cGRhdGUtPmJvZHkuc3RpZCAgID0gdW5pdDsKKwl1cGRhdGUtPmJvZHkucmVjdC54 ID0gbGVmdDsKKwl1cGRhdGUtPmJvZHkucmVjdC55ID0gdG9wOworCXVwZGF0ZS0+Ym9keS5yZWN0 LncgPSByaWdodCAtIGxlZnQ7CisJdXBkYXRlLT5ib2R5LnJlY3QuaCA9IGJvdHRvbSAtIHRvcDsK K30KIAogLyoqCi0gKiB2bXdfc3RkdV91cGRhdGVfc3QgLSBVcGRhdGVzIGEgU2NyZWVuIFRhcmdl dAorICogdm13X3N0ZHVfdXBkYXRlX3N0IC0gRnVsbCB1cGRhdGUgb2YgYSBTY3JlZW4gVGFyZ2V0 CiAgKgogICogQGRldl9wcml2OiBWTVcgRFJNIGRldmljZQotICogQGZpbGVfcHJpdjogUG9pbnRl ciB0byBEUk0gZmlsZSBwcml2YXRlIHN0cnVjdHVyZS4gIFNldCB0byBOVUxMIHdoZW4KLSAqICAg ICAgICAgICAgIHdlIHdhbnQgdG8gYmxhbmsgZGlzcGxheS4KICAqIEBzdGR1OiBkaXNwbGF5IHVu aXQgYWZmZWN0ZWQKLSAqIEB1cGRhdGVfYXJlYTogYXJlYSB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0 ZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUg Y29udGVudCBvZiBhIHNjcmVlbgotICogdGFyZ2V0IGNoYW5nZXMuCi0gKiBJZiB0aGUgZGlzcGxh eSBhbmQgY29udGVudCBidWZmZXJzIGFyZSBkaWZmZXJlbnQsIHRoZW4gdGhpcyBmdW5jdGlvbiBk b2VzCi0gKiBhIGJsaXQgZmlyc3QgZnJvbSB0aGUgY29udGVudCBidWZmZXIgdG8gdGhlIGRpc3Bs YXkgYnVmZmVyIGJlZm9yZSBpc3N1aW5nCi0gKiB0aGUgU2NyZWVuIFRhcmdldCB1cGRhdGUgY29t bWFuZC4KKyAqIHRhcmdldCBoYXMgY2hhbmdlZCBjb21wbGV0ZWx5LiBUeXBpY2FsbHkgYXMgYSBy ZXN1bHQgb2YgYSBiYWNraW5nCisgKiBzdXJmYWNlIGNoYW5nZS4KICAqCiAgKiBSRVRVUk5TOgog ICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIGludCB2 bXdfc3RkdV91cGRhdGVfc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJCSAgICAg IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJICAgICAgc3RydWN0IHZtd19zY3JlZW5f dGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdSwKLQkJCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0 ICp1cGRhdGVfYXJlYSkKKwkJCSAgICAgIHN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5 X3VuaXQgKnN0ZHUpCiB7Ci0JdTMyIHdpZHRoLCBoZWlnaHQ7Ci0JdTMyIGRpc3BsYXlfdXBkYXRl X3gsIGRpc3BsYXlfdXBkYXRlX3k7Ci0JdW5zaWduZWQgc2hvcnQgZGlzcGxheV94MSwgZGlzcGxh eV95MSwgZGlzcGxheV94MiwgZGlzcGxheV95MjsKLQlpbnQgcmV0OwotCi0Jc3RydWN0IHsKLQkJ U1ZHQTNkQ21kSGVhZGVyIGhlYWRlcjsKLQkJU1ZHQTNkQ21kVXBkYXRlR0JTY3JlZW5UYXJnZXQg Ym9keTsKLQl9ICpjbWQ7Ci0KKwlzdHJ1Y3Qgdm13X3N0ZHVfdXBkYXRlICpjbWQ7CisJc3RydWN0 IGRybV9jcnRjICpjcnRjID0gJnN0ZHUtPmJhc2UuY3J0YzsKIAogCWlmICghc3RkdS0+ZGVmaW5l ZCkgewogCQlEUk1fRVJST1IoIk5vIHNjcmVlbiB0YXJnZXQgZGVmaW5lZCIpOwogCQlyZXR1cm4g LUVJTlZBTDsKIAl9CiAKLQkvKiBEaXNwbGF5IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIGl0cyBw b3NpdGlvbiBpbiBjb250ZW50IHN1cmZhY2UgKi8KLQlkaXNwbGF5X3gxID0gc3RkdS0+YmFzZS5j cnRjLng7Ci0JZGlzcGxheV95MSA9IHN0ZHUtPmJhc2UuY3J0Yy55OwotCWRpc3BsYXlfeDIgPSBk aXNwbGF5X3gxICsgc3RkdS0+ZGlzcGxheV9zcmYtPmJhc2Vfc2l6ZS53aWR0aDsKLQlkaXNwbGF5 X3kyID0gZGlzcGxheV95MSArIHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUuaGVpZ2h0Owot Ci0JLyogRG8gbm90aGluZyBpZiB0aGUgdXBkYXRlIGFyZWEgaXMgb3V0c2lkZSBvZiB0aGUgZGlz cGxheSBzdXJmYWNlICovCi0JaWYgKHVwZGF0ZV9hcmVhLT54MiA8PSBkaXNwbGF5X3gxIHx8IHVw ZGF0ZV9hcmVhLT54MSA+PSBkaXNwbGF5X3gyIHx8Ci0JICAgIHVwZGF0ZV9hcmVhLT55MiA8PSBk aXNwbGF5X3kxIHx8IHVwZGF0ZV9hcmVhLT55MSA+PSBkaXNwbGF5X3kyKQotCQlyZXR1cm4gMDsK LQotCS8qIFRoZSB0b3AtbGVmdCBoYW5kIGNvcm5lciBvZiB0aGUgdXBkYXRlIGFyZWEgaW4gZGlz cGxheSBzdXJmYWNlICovCi0JZGlzcGxheV91cGRhdGVfeCA9IG1heCh1cGRhdGVfYXJlYS0+eDEg LSBkaXNwbGF5X3gxLCAwKTsKLQlkaXNwbGF5X3VwZGF0ZV95ID0gbWF4KHVwZGF0ZV9hcmVhLT55 MSAtIGRpc3BsYXlfeTEsIDApOwotCi0Jd2lkdGggID0gbWluKHVwZGF0ZV9hcmVhLT54MiwgZGlz cGxheV94MikgLQotCQkgbWF4KHVwZGF0ZV9hcmVhLT54MSwgZGlzcGxheV94MSk7Ci0JaGVpZ2h0 ID0gbWluKHVwZGF0ZV9hcmVhLT55MiwgZGlzcGxheV95MikgLQotCQkgbWF4KHVwZGF0ZV9hcmVh LT55MSwgZGlzcGxheV95MSk7Ci0KLQkvKgotCSAqIElmIGNvbnRlbnQgaXMgb24gYSBzZXBhcmF0 ZSBzdXJmYWNlLCB0aGVuIGNvcHkgdGhlIGRpcnR5IGFyZWEgdG8KLQkgKiB0aGUgZGlzcGxheSBz dXJmYWNlCi0JICovCi0JaWYgKGZpbGVfcHJpdiAmJiBzdGR1LT5jb250ZW50X2ZiX3R5cGUgIT0g U0FNRV9BU19ESVNQTEFZKSB7Ci0KLQkJcmV0ID0gdm13X3N0ZHVfY29udGVudF9jb3B5KGRldl9w cml2LCBmaWxlX3ByaXYsCi0JCQkJCSAgICBzdGR1LAotCQkJCQkgICAgbWF4KHVwZGF0ZV9hcmVh LT54MSwgZGlzcGxheV94MSksCi0JCQkJCSAgICBtYXgodXBkYXRlX2FyZWEtPnkxLCBkaXNwbGF5 X3kxKSwKLQkJCQkJICAgIHdpZHRoLCBoZWlnaHQsCi0JCQkJCSAgICBkaXNwbGF5X3VwZGF0ZV94 LCBkaXNwbGF5X3VwZGF0ZV95KTsKLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQkJRFJN X0VSUk9SKCJGYWlsZWQgdG8gYmxpdCBjb250ZW50XG4iKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0K LQl9Ci0KLQotCS8qCi0JICogSWYgdGhlIGRpc3BsYXkgc3VyZmFjZSBpcyB0aGUgc2FtZSBhcyB0 aGUgY29udGVudCBzdXJmYWNlLCB0aGVuCi0JICogaXQgbWF5IGJlIGJhY2tlZCBieSBhIERNQSBi dWYuICBJZiBpdCBpcyB0aGVuIHdlIG5lZWQgdG8gdXBkYXRlCi0JICogdGhlIGRldmljZSdzIGNh Y2hlZCBjb3B5IG9mIHRoZSBETUEgYnVmIGJlZm9yZSBpc3N1aW5nIHRoZSBzY3JlZW4KLQkgKiB0 YXJnZXQgdXBkYXRlLgotCSAqLwotCWlmIChmaWxlX3ByaXYgJiYgc3RkdS0+Y29udGVudF9mYl90 eXBlID09IFNBTUVfQVNfRElTUExBWSkgewotCQlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX3N1cmZh Y2UgKnZmYnM7Ci0KLQkJdmZicyA9IHZtd19mcmFtZWJ1ZmZlcl90b192ZmJzKHN0ZHUtPmNvbnRl bnRfZmIpOwotCQlyZXQgPSB2bXdfc3RkdV9kbWFfdXBkYXRlKGRldl9wcml2LCBmaWxlX3ByaXYs Ci0JCQkJCSAgdmZicywKLQkJCQkJICBtYXgodXBkYXRlX2FyZWEtPngxLCBkaXNwbGF5X3gxKSwK LQkJCQkJICBtYXgodXBkYXRlX2FyZWEtPnkxLCBkaXNwbGF5X3kxKSwKLQkJCQkJICB3aWR0aCwg aGVpZ2h0KTsKLQotCQlpZiAocmV0ICE9IDApIHsKLQkJCURSTV9FUlJPUigiRmFpbGVkIHRvIHVw ZGF0ZSBjYWNoZWQgRE1BIGJ1ZmZlclxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCiAJ Y21kID0gdm13X2ZpZm9fcmVzZXJ2ZShkZXZfcHJpdiwgc2l6ZW9mKCpjbWQpKTsKIAogCWlmICh1 bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKQEAgLTU5NiwxNCArMzM3LDggQEAgc3RhdGljIGludCB2 bXdfc3RkdV91cGRhdGVfc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJcmV0dXJu IC1FTk9NRU07CiAJfQogCi0JY21kLT5oZWFkZXIuaWQgICA9IFNWR0FfM0RfQ01EX1VQREFURV9H Ql9TQ1JFRU5UQVJHRVQ7Ci0JY21kLT5oZWFkZXIuc2l6ZSA9IHNpemVvZihjbWQtPmJvZHkpOwot Ci0JY21kLT5ib2R5LnN0aWQgICA9IHN0ZHUtPmJhc2UudW5pdDsKLQljbWQtPmJvZHkucmVjdC54 ID0gZGlzcGxheV91cGRhdGVfeDsKLQljbWQtPmJvZHkucmVjdC55ID0gZGlzcGxheV91cGRhdGVf eTsKLQljbWQtPmJvZHkucmVjdC53ID0gd2lkdGg7Ci0JY21kLT5ib2R5LnJlY3QuaCA9IGhlaWdo dDsKKwl2bXdfc3RkdV9wb3B1bGF0ZV91cGRhdGUoY21kLCBzdGR1LT5iYXNlLnVuaXQsIDAsIGNy dGMtPm1vZGUuaGRpc3BsYXksCisJCQkJIDAsIGNydGMtPm1vZGUudmRpc3BsYXkpOwogCiAJdm13 X2ZpZm9fY29tbWl0KGRldl9wcml2LCBzaXplb2YoKmNtZCkpOwogCkBAIC02ODIsNyArNDE3LDYg QEAgc3RhdGljIGludCB2bXdfc3RkdV9jcnRjX3NldF9jb25maWcoc3RydWN0IGRybV9tb2RlX3Nl dCAqc2V0KQogCXN0cnVjdCBkcm1fY3J0YyAgICAgICpjcnRjOwogCXN0cnVjdCBkcm1fZW5jb2Rl ciAgICplbmNvZGVyOwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0 IGRybV9jbGlwX3JlY3QgdXBkYXRlX2FyZWEgPSB7MH07CiAJaW50ICAgIHJldDsKIAogCkBAIC03 MjgsMTIgKzQ2Miw3IEBAIHN0YXRpYyBpbnQgdm13X3N0ZHVfY3J0Y19zZXRfY29uZmlnKHN0cnVj dCBkcm1fbW9kZV9zZXQgKnNldCkKIAogCQkvKiBVcGRhdGUgU2NyZWVuIFRhcmdldCwgZGlzcGxh eSB3aWxsIG5vdyBiZSBibGFuayAqLwogCQlpZiAoY3J0Yy0+cHJpbWFyeS0+ZmIpIHsKLQkJCXVw ZGF0ZV9hcmVhLngyID0gY3J0Yy0+cHJpbWFyeS0+ZmItPndpZHRoOwotCQkJdXBkYXRlX2FyZWEu eTIgPSBjcnRjLT5wcmltYXJ5LT5mYi0+aGVpZ2h0OwotCi0JCQlyZXQgPSB2bXdfc3RkdV91cGRh dGVfc3QoZGV2X3ByaXYsIE5VTEwsCi0JCQkJCQkgc3RkdSwKLQkJCQkJCSAmdXBkYXRlX2FyZWEp OworCQkJdm13X3N0ZHVfdXBkYXRlX3N0KGRldl9wcml2LCBzdGR1KTsKIAkJCWlmICh1bmxpa2Vs eShyZXQgIT0gMCkpCiAJCQkJcmV0dXJuIHJldDsKIAkJfQpAQCAtODUyLDcgKzU4MSw2IEBAIHN0 YXRpYyBpbnQgdm13X3N0ZHVfY3J0Y19zZXRfY29uZmlnKHN0cnVjdCBkcm1fbW9kZV9zZXQgKnNl dCkKIAkJZ290byBlcnJfdW5yZWZfY29udGVudDsKIAl9CiAKLQl2bXdfZmJfb2ZmKGRldl9wcml2 KTsKIAl2bXdfc3ZnYV9lbmFibGUoZGV2X3ByaXYpOwogCiAJLyoKQEAgLTkxOSwxNyArNjQ3LDgg QEAgc3RhdGljIGludCB2bXdfc3RkdV9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCiB7CiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGNydGMtPmRl dik7CiAJc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdTsKLQlzdHJ1 Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCB1cGRhdGVfYXJl YSA9IHswfTsKIAlpbnQgcmV0OwogCi0JLyoKLQkgKiBUZW1wb3JhcmlseSBkb24ndCBzdXBwb3J0 IGV2ZW50ID09IE5VTEwuIFdlIG5lZWQgdGhlCi0JICogQGZpbGVfcHJpdiBwb2ludGVyIQotCSAq LwotCWlmIChldmVudCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChjcnRjID09 IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC05MzksOSArNjU4LDYgQEAgc3RhdGljIGlu dCB2bXdfc3RkdV9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJc3RkdS0+ Y29udGVudF9mYiAgPSBuZXdfZmI7CiAKIAlpZiAoc3RkdS0+ZGlzcGxheV9zcmYpIHsKLQkJdXBk YXRlX2FyZWEueDIgPSBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLndpZHRoOwotCQl1cGRh dGVfYXJlYS55MiA9IHN0ZHUtPmRpc3BsYXlfc3JmLT5iYXNlX3NpemUuaGVpZ2h0OwotCiAJCS8q CiAJCSAqIElmIHRoZSBkaXNwbGF5IHN1cmZhY2UgaXMgdGhlIHNhbWUgYXMgdGhlIGNvbnRlbnQg c3VyZmFjZQogCQkgKiB0aGVuIHJlbW92ZSB0aGUgcmVmZXJlbmNlCkBAIC05NjEsNyArNjc3LDcg QEAgc3RhdGljIGludCB2bXdfc3RkdV9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNy dGMsCiAKIAlpZiAoIW5ld19mYikgewogCQkvKiBCbGFua3MgdGhlIGRpc3BsYXkgKi8KLQkJKHZv aWQpIHZtd19zdGR1X3VwZGF0ZV9zdChkZXZfcHJpdiwgTlVMTCwgc3RkdSwgJnVwZGF0ZV9hcmVh KTsKKwkJKHZvaWQpIHZtd19zdGR1X3VwZGF0ZV9zdChkZXZfcHJpdiwgc3RkdSk7CiAKIAkJcmV0 dXJuIDA7CiAJfQpAQCAtOTgyLDE2ICs2OTgsMTMgQEAgc3RhdGljIGludCB2bXdfc3RkdV9jcnRj X3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJfQogCiAJLyogVXBkYXRlIGRpc3Bs YXkgc3VyZmFjZTogYWZ0ZXIgdGhpcyBwb2ludCBldmVyeXRoaW5nIGlzIGJvdW5kICovCi0JdXBk YXRlX2FyZWEueDIgPSBzdGR1LT5kaXNwbGF5X3NyZi0+YmFzZV9zaXplLndpZHRoOwotCXVwZGF0 ZV9hcmVhLnkyID0gc3RkdS0+ZGlzcGxheV9zcmYtPmJhc2Vfc2l6ZS5oZWlnaHQ7Ci0KLQlmaWxl X3ByaXYgPSBldmVudC0+YmFzZS5maWxlX3ByaXY7Ci0JcmV0ID0gdm13X3N0ZHVfdXBkYXRlX3N0 KGRldl9wcml2LCBmaWxlX3ByaXYsIHN0ZHUsICZ1cGRhdGVfYXJlYSk7CisJcmV0ID0gdm13X3N0 ZHVfdXBkYXRlX3N0KGRldl9wcml2LCBzdGR1KTsKIAlpZiAodW5saWtlbHkocmV0ICE9IDApKQog CQlyZXR1cm4gcmV0OwogCiAJaWYgKGV2ZW50KSB7CiAJCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpm ZW5jZSA9IE5VTEw7CisJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2ID0gZXZlbnQtPmJhc2Uu ZmlsZV9wcml2OwogCiAJCXZtd19leGVjYnVmX2ZlbmNlX2NvbW1hbmRzKE5VTEwsIGRldl9wcml2 LCAmZmVuY2UsIE5VTEwpOwogCQlpZiAoIWZlbmNlKQpAQCAtMTAxNiw2ICs3MjksMzEwIEBAIGVy cl9vdXQ6CiB9CiAKIAorLyoqCisgKiB2bXdfc3RkdV9kbWFidWZfY2xpcCAtIENhbGxiYWNrIHRv IGVuY29kZSBhIHN1ZmFjZSBETUEgY29tbWFuZCBjbGlwcmVjdAorICoKKyAqIEBkaXJ0eTogVGhl IGNsb3N1cmUgc3RydWN0dXJlLgorICoKKyAqIEVuY29kZXMgYSBzdXJmYWNlIERNQSBjb21tYW5k IGNsaXByZWN0IGFuZCB1cGRhdGVzIHRoZSBib3VuZGluZyBib3gKKyAqIGZvciB0aGUgRE1BLgor ICovCitzdGF0aWMgdm9pZCB2bXdfc3RkdV9kbWFidWZfY2xpcChzdHJ1Y3Qgdm13X2ttc19kaXJ0 eSAqZGlydHkpCit7CisJc3RydWN0IHZtd19zdGR1X2RpcnR5ICpkZGlydHkgPQorCQljb250YWlu ZXJfb2YoZGlydHksIHN0cnVjdCB2bXdfc3RkdV9kaXJ0eSwgYmFzZSk7CisJc3RydWN0IHZtd19z dGR1X2RtYSAqY21kID0gZGlydHktPmNtZDsKKwlzdHJ1Y3QgU1ZHQTNkQ29weUJveCAqYmxpdCA9 IChzdHJ1Y3QgU1ZHQTNkQ29weUJveCAqKSAmY21kWzFdOworCisJYmxpdCArPSBkaXJ0eS0+bnVt X2hpdHM7CisJYmxpdC0+c3JjeCA9IGRpcnR5LT5mYl94OworCWJsaXQtPnNyY3kgPSBkaXJ0eS0+ ZmJfeTsKKwlibGl0LT54ID0gZGlydHktPnVuaXRfeDE7CisJYmxpdC0+eSA9IGRpcnR5LT51bml0 X3kxOworCWJsaXQtPmQgPSAxOworCWJsaXQtPncgPSBkaXJ0eS0+dW5pdF94MiAtIGRpcnR5LT51 bml0X3gxOworCWJsaXQtPmggPSBkaXJ0eS0+dW5pdF95MiAtIGRpcnR5LT51bml0X3kxOworCWRp cnR5LT5udW1faGl0cysrOworCisJaWYgKGRkaXJ0eS0+dHJhbnNmZXIgIT0gU1ZHQTNEX1dSSVRF X0hPU1RfVlJBTSkKKwkJcmV0dXJuOworCisJLyogRGVzdGluYXRpb24gYm91bmRpbmcgYm94ICov CisJZGRpcnR5LT5sZWZ0ID0gbWluX3QoczMyLCBkZGlydHktPmxlZnQsIGRpcnR5LT51bml0X3gx KTsKKwlkZGlydHktPnRvcCA9IG1pbl90KHMzMiwgZGRpcnR5LT50b3AsIGRpcnR5LT51bml0X3kx KTsKKwlkZGlydHktPnJpZ2h0ID0gbWF4X3QoczMyLCBkZGlydHktPnJpZ2h0LCBkaXJ0eS0+dW5p dF94Mik7CisJZGRpcnR5LT5ib3R0b20gPSBtYXhfdChzMzIsIGRkaXJ0eS0+Ym90dG9tLCBkaXJ0 eS0+dW5pdF95Mik7Cit9CisKKy8qKgorICogdm13X3N0ZHVfZG1hYnVmX2ZpZm9fY29tbWl0IC0g Q2FsbGJhY2sgdG8gZmlsbCBpbiBhbmQgc3VibWl0IGEgRE1BIGNvbW1hbmQuCisgKgorICogQGRp cnR5OiBUaGUgY2xvc3VyZSBzdHJ1Y3R1cmUuCisgKgorICogRmlsbHMgaW4gdGhlIG1pc3Npbmcg ZmllbGRzIGluIGEgRE1BIGNvbW1hbmQsIGFuZCBvcHRpb25hbGx5IGVuY29kZXMKKyAqIGEgc2Ny ZWVuIHRhcmdldCB1cGRhdGUgY29tbWFuZCwgZGVwZW5kaW5nIG9uIHRyYW5zZmVyIGRpcmVjdGlv bi4KKyAqLworc3RhdGljIHZvaWQgdm13X3N0ZHVfZG1hYnVmX2ZpZm9fY29tbWl0KHN0cnVjdCB2 bXdfa21zX2RpcnR5ICpkaXJ0eSkKK3sKKwlzdHJ1Y3Qgdm13X3N0ZHVfZGlydHkgKmRkaXJ0eSA9 CisJCWNvbnRhaW5lcl9vZihkaXJ0eSwgc3RydWN0IHZtd19zdGR1X2RpcnR5LCBiYXNlKTsKKwlz dHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRfZGlzcGxheV91bml0ICpzdGR1ID0KKwkJY29udGFpbmVy X29mKGRpcnR5LT51bml0LCB0eXBlb2YoKnN0ZHUpLCBiYXNlKTsKKwlzdHJ1Y3Qgdm13X3N0ZHVf ZG1hICpjbWQgPSBkaXJ0eS0+Y21kOworCXN0cnVjdCBTVkdBM2RDb3B5Qm94ICpibGl0ID0gKHN0 cnVjdCBTVkdBM2RDb3B5Qm94ICopICZjbWRbMV07CisJU1ZHQTNkQ21kU3VyZmFjZURNQVN1ZmZp eCAqc3VmZml4ID0KKwkJKFNWR0EzZENtZFN1cmZhY2VETUFTdWZmaXggKikgJmJsaXRbZGlydHkt Pm51bV9oaXRzXTsKKwlzaXplX3QgYmxpdF9zaXplID0gc2l6ZW9mKCpibGl0KSAqIGRpcnR5LT5u dW1faGl0cyArIHNpemVvZigqc3VmZml4KTsKKworCWlmICghZGlydHktPm51bV9oaXRzKSB7CisJ CXZtd19maWZvX2NvbW1pdChkaXJ0eS0+ZGV2X3ByaXYsIDApOworCQlyZXR1cm47CisJfQorCisJ Y21kLT5oZWFkZXIuaWQgPSBTVkdBXzNEX0NNRF9TVVJGQUNFX0RNQTsKKwljbWQtPmhlYWRlci5z aXplID0gc2l6ZW9mKGNtZC0+Ym9keSkgKyBibGl0X3NpemU7CisJdm13X2JvX2dldF9ndWVzdF9w dHIoJmRkaXJ0eS0+YnVmLT5iYXNlLCAmY21kLT5ib2R5Lmd1ZXN0LnB0cik7CisJY21kLT5ib2R5 Lmd1ZXN0LnBpdGNoID0gZGRpcnR5LT5waXRjaDsKKwljbWQtPmJvZHkuaG9zdC5zaWQgPSBzdGR1 LT5kaXNwbGF5X3NyZi0+cmVzLmlkOworCWNtZC0+Ym9keS5ob3N0LmZhY2UgPSAwOworCWNtZC0+ Ym9keS5ob3N0Lm1pcG1hcCA9IDA7CisJY21kLT5ib2R5LnRyYW5zZmVyID0gZGRpcnR5LT50cmFu c2ZlcjsKKwlzdWZmaXgtPnN1ZmZpeFNpemUgPSBzaXplb2YoKnN1ZmZpeCk7CisJc3VmZml4LT5t YXhpbXVtT2Zmc2V0ID0gZGRpcnR5LT5idWYtPmJhc2UubnVtX3BhZ2VzICogUEFHRV9TSVpFOwor CisJaWYgKGRkaXJ0eS0+dHJhbnNmZXIgPT0gU1ZHQTNEX1dSSVRFX0hPU1RfVlJBTSkgeworCQli bGl0X3NpemUgKz0gc2l6ZW9mKHN0cnVjdCB2bXdfc3RkdV91cGRhdGUpOworCisJCXZtd19zdGR1 X3BvcHVsYXRlX3VwZGF0ZSgmc3VmZml4WzFdLCBzdGR1LT5iYXNlLnVuaXQsCisJCQkJCSBkZGly dHktPmxlZnQsIGRkaXJ0eS0+cmlnaHQsCisJCQkJCSBkZGlydHktPnRvcCwgZGRpcnR5LT5ib3R0 b20pOworCX0KKworCXZtd19maWZvX2NvbW1pdChkaXJ0eS0+ZGV2X3ByaXYsIHNpemVvZigqY21k KSArIGJsaXRfc2l6ZSk7CisKKwlkZGlydHktPmxlZnQgPSBkZGlydHktPnRvcCA9IFMzMl9NQVg7 CisJZGRpcnR5LT5yaWdodCA9IGRkaXJ0eS0+Ym90dG9tID0gUzMyX01JTjsKK30KKworLyoqCisg KiB2bXdfa21zX3N0ZHVfZG1hIC0gUGVyZm9ybSBhIERNQSB0cmFuc2ZlciBiZXR3ZWVuIGEgZG1h LWJ1ZmZlciBiYWNrZWQKKyAqIGZyYW1lYnVmZmVyIGFuZCB0aGUgc2NyZWVuIHRhcmdldCBzeXN0 ZW0uCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRvIHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1 Y3R1cmUuCisgKiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgc3RydWN0IGRybS1maWxlIGlkZW50 aWZ5aW5nIHRoZSBjYWxsZXIuIE1heSBiZQorICogc2V0IHRvIE5VTEwsIGJ1dCB0aGVuIEB1c2Vy X2ZlbmNlX3JlcCBtdXN0IGFsc28gYmUgc2V0IHRvIE5VTEwuCisgKiBAdmZiOiBQb2ludGVyIHRv IHRoZSBkbWEtYnVmZmVyIGJhY2tlZCBmcmFtZWJ1ZmZlci4KKyAqIEBjbGlwczogQXJyYXkgb2Yg Y2xpcCByZWN0cy4gRWl0aGVyIEBjbGlwcyBvciBAdmNsaXBzIG11c3QgYmUgTlVMTC4KKyAqIEB2 Y2xpcHM6IEFsdGVybmF0ZSBhcnJheSBvZiBjbGlwIHJlY3RzLiBFaXRoZXIgQGNsaXBzIG9yIEB2 Y2xpcHMgbXVzdAorICogYmUgTlVMTC4KKyAqIEBudW1fY2xpcHM6IE51bWJlciBvZiBjbGlwIHJl Y3RzIGluIEBjbGlwcyBvciBAdmNsaXBzLgorICogQGluY3JlbWVudDogSW5jcmVtZW50IHRvIHVz ZSB3aGVuIGxvb3Bpbmcgb3ZlciBAY2xpcHMgb3IgQHZjbGlwcy4KKyAqIEB0b19zdXJmYWNlOiBX aGV0aGVyIHRvIERNQSB0byB0aGUgc2NyZWVuIHRhcmdldCBzeXN0ZW0gYXMgb3Bwb3NlZCB0bwor ICogZnJvbSB0aGUgc2NyZWVuIHRhcmdldCBzeXN0ZW0uCisgKiBAaW50ZXJydXB0aWJsZTogV2hl dGhlciB0byBwZXJmb3JtIHdhaXRzIGludGVycnVwdGlibGUgaWYgcG9zc2libGUuCisgKgorICog SWYgRE1BLWluZyB0aWxsIHRoZSBzY3JlZW4gdGFyZ2V0IHN5c3RlbSwgdGhlIGZ1bmN0aW9uIHdp bGwgYWxzbyBub3RpZnkKKyAqIHRoZSBzY3JlZW4gdGFyZ2V0IHN5c3RlbSB0aGF0IGEgYm91bmRp bmcgYm94IG9mIHRoZSBjbGlwcmVjdHMgaGFzIGJlZW4KKyAqIHVwZGF0ZWQuCisgKiBSZXR1cm5z IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLiAtRVJFU1RBUlRT WVMgaWYKKyAqIGludGVycnVwdGVkLgorICovCitpbnQgdm13X2ttc19zdGR1X2RtYShzdHJ1Y3Qg dm13X3ByaXZhdGUgKmRldl9wcml2LAorCQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2 LAorCQkgICAgIHN0cnVjdCB2bXdfZnJhbWVidWZmZXIgKnZmYiwKKwkJICAgICBzdHJ1Y3QgZHJt X3Ztd19mZW5jZV9yZXAgX191c2VyICp1c2VyX2ZlbmNlX3JlcCwKKwkJICAgICBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqY2xpcHMsCisJCSAgICAgc3RydWN0IGRybV92bXdfcmVjdCAqdmNsaXBzLAor CQkgICAgIHVpbnQzMl90IG51bV9jbGlwcywKKwkJICAgICBpbnQgaW5jcmVtZW50LAorCQkgICAg IGJvb2wgdG9fc3VyZmFjZSwKKwkJICAgICBib29sIGludGVycnVwdGlibGUpCit7CisJc3RydWN0 IHZtd19kbWFfYnVmZmVyICpidWYgPQorCQljb250YWluZXJfb2YodmZiLCBzdHJ1Y3Qgdm13X2Zy YW1lYnVmZmVyX2RtYWJ1ZiwgYmFzZSktPmJ1ZmZlcjsKKwlzdHJ1Y3Qgdm13X3N0ZHVfZGlydHkg ZGRpcnR5OworCWludCByZXQ7CisKKwlyZXQgPSB2bXdfa21zX2hlbHBlcl9idWZmZXJfcHJlcGFy ZShkZXZfcHJpdiwgYnVmLCBpbnRlcnJ1cHRpYmxlLAorCQkJCQkgICAgZmFsc2UpOworCWlmIChy ZXQpCisJCXJldHVybiByZXQ7CisKKwlkZGlydHkudHJhbnNmZXIgPSAodG9fc3VyZmFjZSkgPyBT VkdBM0RfV1JJVEVfSE9TVF9WUkFNIDoKKwkJU1ZHQTNEX1JFQURfSE9TVF9WUkFNOworCWRkaXJ0 eS5sZWZ0ID0gZGRpcnR5LnRvcCA9IFMzMl9NQVg7CisJZGRpcnR5LnJpZ2h0ID0gZGRpcnR5LmJv dHRvbSA9IFMzMl9NSU47CisJZGRpcnR5LnBpdGNoID0gdmZiLT5iYXNlLnBpdGNoZXNbMF07CisJ ZGRpcnR5LmJ1ZiA9IGJ1ZjsKKwlkZGlydHkuYmFzZS5maWZvX2NvbW1pdCA9IHZtd19zdGR1X2Rt YWJ1Zl9maWZvX2NvbW1pdDsKKwlkZGlydHkuYmFzZS5jbGlwID0gdm13X3N0ZHVfZG1hYnVmX2Ns aXA7CisJZGRpcnR5LmJhc2UuZmlmb19yZXNlcnZlX3NpemUgPSBzaXplb2Yoc3RydWN0IHZtd19z dGR1X2RtYSkgKworCQludW1fY2xpcHMgKiBzaXplb2YoU1ZHQTNkQ29weUJveCkgKworCQlzaXpl b2YoU1ZHQTNkQ21kU3VyZmFjZURNQVN1ZmZpeCk7CisJaWYgKHRvX3N1cmZhY2UpCisJCWRkaXJ0 eS5iYXNlLmZpZm9fcmVzZXJ2ZV9zaXplICs9IHNpemVvZihzdHJ1Y3Qgdm13X3N0ZHVfdXBkYXRl KTsKKworCXJldCA9IHZtd19rbXNfaGVscGVyX2RpcnR5KGRldl9wcml2LCB2ZmIsIGNsaXBzLCB2 Y2xpcHMsCisJCQkJICAgMCwgMCwgbnVtX2NsaXBzLCBpbmNyZW1lbnQsICZkZGlydHkuYmFzZSk7 CisJdm13X2ttc19oZWxwZXJfYnVmZmVyX2ZpbmlzaChkZXZfcHJpdiwgZmlsZV9wcml2LCBidWYs IE5VTEwsCisJCQkJICAgICB1c2VyX2ZlbmNlX3JlcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KioKKyAqIHZtd19zdGR1X3N1cmZhY2VfY2xpcCAtIENhbGxiYWNrIHRvIGVuY29kZSBhIHN1cmZh Y2UgY29weSBjb21tYW5kIGNsaXByZWN0CisgKgorICogQGRpcnR5OiBUaGUgY2xvc3VyZSBzdHJ1 Y3R1cmUuCisgKgorICogRW5jb2RlcyBhIHN1cmZhY2UgY29weSBjb21tYW5kIGNsaXByZWN0IGFu ZCB1cGRhdGVzIHRoZSBib3VuZGluZyBib3gKKyAqIGZvciB0aGUgY29weS4KKyAqLworc3RhdGlj IHZvaWQgdm13X2ttc19zdGR1X3N1cmZhY2VfY2xpcChzdHJ1Y3Qgdm13X2ttc19kaXJ0eSAqZGly dHkpCit7CisJc3RydWN0IHZtd19zdGR1X2RpcnR5ICpzZGlydHkgPQorCQljb250YWluZXJfb2Yo ZGlydHksIHN0cnVjdCB2bXdfc3RkdV9kaXJ0eSwgYmFzZSk7CisJc3RydWN0IHZtd19zdGR1X3N1 cmZhY2VfY29weSAqY21kID0gZGlydHktPmNtZDsKKwlzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRf ZGlzcGxheV91bml0ICpzdGR1ID0KKwkJY29udGFpbmVyX29mKGRpcnR5LT51bml0LCB0eXBlb2Yo KnN0ZHUpLCBiYXNlKTsKKworCWlmIChzZGlydHktPnNpZCAhPSBzdGR1LT5kaXNwbGF5X3NyZi0+ cmVzLmlkKSB7CisJCXN0cnVjdCBTVkdBM2RDb3B5Qm94ICpibGl0ID0gKHN0cnVjdCBTVkdBM2RD b3B5Qm94ICopICZjbWRbMV07CisKKwkJYmxpdCArPSBkaXJ0eS0+bnVtX2hpdHM7CisJCWJsaXQt PnNyY3ggPSBkaXJ0eS0+ZmJfeDsKKwkJYmxpdC0+c3JjeSA9IGRpcnR5LT5mYl95OworCQlibGl0 LT54ID0gZGlydHktPnVuaXRfeDE7CisJCWJsaXQtPnkgPSBkaXJ0eS0+dW5pdF95MTsKKwkJYmxp dC0+ZCA9IDE7CisJCWJsaXQtPncgPSBkaXJ0eS0+dW5pdF94MiAtIGRpcnR5LT51bml0X3gxOwor CQlibGl0LT5oID0gZGlydHktPnVuaXRfeTIgLSBkaXJ0eS0+dW5pdF95MTsKKwl9CisKKwlkaXJ0 eS0+bnVtX2hpdHMrKzsKKworCS8qIERlc3RpbmF0aW9uIGJvdW5kaW5nIGJveCAqLworCXNkaXJ0 eS0+bGVmdCA9IG1pbl90KHMzMiwgc2RpcnR5LT5sZWZ0LCBkaXJ0eS0+dW5pdF94MSk7CisJc2Rp cnR5LT50b3AgPSBtaW5fdChzMzIsIHNkaXJ0eS0+dG9wLCBkaXJ0eS0+dW5pdF95MSk7CisJc2Rp cnR5LT5yaWdodCA9IG1heF90KHMzMiwgc2RpcnR5LT5yaWdodCwgZGlydHktPnVuaXRfeDIpOwor CXNkaXJ0eS0+Ym90dG9tID0gbWF4X3QoczMyLCBzZGlydHktPmJvdHRvbSwgZGlydHktPnVuaXRf eTIpOworfQorCisvKioKKyAqIHZtd19zdGR1X3N1cmZhY2VfZmlmb19jb21taXQgLSBDYWxsYmFj ayB0byBmaWxsIGluIGFuZCBzdWJtaXQgYSBzdXJmYWNlCisgKiBjb3B5IGNvbW1hbmQuCisgKgor ICogQGRpcnR5OiBUaGUgY2xvc3VyZSBzdHJ1Y3R1cmUuCisgKgorICogRmlsbHMgaW4gdGhlIG1p c3NpbmcgZmllbGRzIGluIGEgc3VyZmFjZSBjb3B5IGNvbW1hbmQsIGFuZCBlbmNvZGVzIGEgc2Ny ZWVuCisgKiB0YXJnZXQgdXBkYXRlIGNvbW1hbmQuCisgKi8KK3N0YXRpYyB2b2lkIHZtd19rbXNf c3RkdV9zdXJmYWNlX2ZpZm9fY29tbWl0KHN0cnVjdCB2bXdfa21zX2RpcnR5ICpkaXJ0eSkKK3sK KwlzdHJ1Y3Qgdm13X3N0ZHVfZGlydHkgKnNkaXJ0eSA9CisJCWNvbnRhaW5lcl9vZihkaXJ0eSwg c3RydWN0IHZtd19zdGR1X2RpcnR5LCBiYXNlKTsKKwlzdHJ1Y3Qgdm13X3NjcmVlbl90YXJnZXRf ZGlzcGxheV91bml0ICpzdGR1ID0KKwkJY29udGFpbmVyX29mKGRpcnR5LT51bml0LCB0eXBlb2Yo KnN0ZHUpLCBiYXNlKTsKKwlzdHJ1Y3Qgdm13X3N0ZHVfc3VyZmFjZV9jb3B5ICpjbWQgPSBkaXJ0 eS0+Y21kOworCXN0cnVjdCB2bXdfc3RkdV91cGRhdGUgKnVwZGF0ZTsKKwlzaXplX3QgYmxpdF9z aXplID0gc2l6ZW9mKFNWR0EzZENvcHlCb3gpICogZGlydHktPm51bV9oaXRzOworCXNpemVfdCBj b21taXRfc2l6ZTsKKworCWlmICghZGlydHktPm51bV9oaXRzKSB7CisJCXZtd19maWZvX2NvbW1p dChkaXJ0eS0+ZGV2X3ByaXYsIDApOworCQlyZXR1cm47CisJfQorCisJaWYgKHNkaXJ0eS0+c2lk ICE9IHN0ZHUtPmRpc3BsYXlfc3JmLT5yZXMuaWQpIHsKKwkJc3RydWN0IFNWR0EzZENvcHlCb3gg KmJsaXQgPSAoc3RydWN0IFNWR0EzZENvcHlCb3ggKikgJmNtZFsxXTsKKworCQljbWQtPmhlYWRl ci5pZCA9IFNWR0FfM0RfQ01EX1NVUkZBQ0VfQ09QWTsKKwkJY21kLT5oZWFkZXIuc2l6ZSA9IHNp emVvZihjbWQtPmJvZHkpICsgYmxpdF9zaXplOworCQljbWQtPmJvZHkuc3JjLnNpZCA9IHNkaXJ0 eS0+c2lkOworCQljbWQtPmJvZHkuZGVzdC5zaWQgPSBzdGR1LT5kaXNwbGF5X3NyZi0+cmVzLmlk OworCQl1cGRhdGUgPSAoc3RydWN0IHZtd19zdGR1X3VwZGF0ZSAqKSAmYmxpdFtkaXJ0eS0+bnVt X2hpdHNdOworCQljb21taXRfc2l6ZSA9IHNpemVvZigqY21kKSArIGJsaXRfc2l6ZSArIHNpemVv ZigqdXBkYXRlKTsKKwl9IGVsc2UgeworCQl1cGRhdGUgPSBkaXJ0eS0+Y21kOworCQljb21taXRf c2l6ZSA9IHNpemVvZigqdXBkYXRlKTsKKwl9CisKKwl2bXdfc3RkdV9wb3B1bGF0ZV91cGRhdGUo dXBkYXRlLCBzdGR1LT5iYXNlLnVuaXQsIHNkaXJ0eS0+bGVmdCwKKwkJCQkgc2RpcnR5LT5yaWdo dCwgc2RpcnR5LT50b3AsIHNkaXJ0eS0+Ym90dG9tKTsKKworCXZtd19maWZvX2NvbW1pdChkaXJ0 eS0+ZGV2X3ByaXYsIGNvbW1pdF9zaXplKTsKKworCXNkaXJ0eS0+bGVmdCA9IHNkaXJ0eS0+dG9w ID0gUzMyX01BWDsKKwlzZGlydHktPnJpZ2h0ID0gc2RpcnR5LT5ib3R0b20gPSBTMzJfTUlOOwor fQorCisvKioKKyAqIHZtd19rbXNfc3RkdV9zdXJmYWNlX2RpcnR5IC0gRGlydHkgcGFydCBvZiBh IHN1cmZhY2UgYmFja2VkIGZyYW1lYnVmZmVyCisgKgorICogQGRldl9wcml2OiBQb2ludGVyIHRv IHRoZSBkZXZpY2UgcHJpdmF0ZSBzdHJ1Y3R1cmUuCisgKiBAZnJhbWVidWZmZXI6IFBvaW50ZXIg dG8gdGhlIHN1cmZhY2UtYnVmZmVyIGJhY2tlZCBmcmFtZWJ1ZmZlci4KKyAqIEBjbGlwczogQXJy YXkgb2YgY2xpcCByZWN0cy4gRWl0aGVyIEBjbGlwcyBvciBAdmNsaXBzIG11c3QgYmUgTlVMTC4K KyAqIEB2Y2xpcHM6IEFsdGVybmF0ZSBhcnJheSBvZiBjbGlwIHJlY3RzLiBFaXRoZXIgQGNsaXBz IG9yIEB2Y2xpcHMgbXVzdAorICogYmUgTlVMTC4KKyAqIEBzcmY6IFBvaW50ZXIgdG8gc3VyZmFj ZSB0byBibGl0IGZyb20uIElmIE5VTEwsIHRoZSBzdXJmYWNlIGF0dGFjaGVkCisgKiB0byBAZnJh bWVidWZmZXIgd2lsbCBiZSB1c2VkLgorICogQGRlc3RfeDogWCBjb29yZGluYXRlIG9mZnNldCB0 byBhbGlnbiBAc3JmIHdpdGggZnJhbWVidWZmZXIgY29vcmRpbmF0ZXMuCisgKiBAZGVzdF95OiBZ IGNvb3JkaW5hdGUgb2Zmc2V0IHRvIGFsaWduIEBzcmYgd2l0aCBmcmFtZWJ1ZmZlciBjb29yZGlu YXRlcy4KKyAqIEBudW1fY2xpcHM6IE51bWJlciBvZiBjbGlwIHJlY3RzIGluIEBjbGlwcy4KKyAq IEBpbmM6IEluY3JlbWVudCB0byB1c2Ugd2hlbiBsb29waW5nIG92ZXIgQGNsaXBzLgorICogQG91 dF9mZW5jZTogSWYgbm9uLU5VTEwsIHdpbGwgcmV0dXJuIGEgcmVmLWNvdW50ZWQgcG9pbnRlciB0 byBhCisgKiBzdHJ1Y3Qgdm13X2ZlbmNlX29iai4gVGhlIHJldHVybmVkIGZlbmNlIHBvaW50ZXIg bWF5IGJlIE5VTEwgaW4gd2hpY2gKKyAqIGNhc2UgdGhlIGRldmljZSBoYXMgYWxyZWFkeSBzeW5j aHJvbml6ZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNv ZGUgb24gZmFpbHVyZS4gLUVSRVNUQVJUU1lTIGlmCisgKiBpbnRlcnJ1cHRlZC4KKyAqLworaW50 IHZtd19rbXNfc3RkdV9zdXJmYWNlX2RpcnR5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYs CisJCQkgICAgICAgc3RydWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCisJCQkgICAg ICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXBzLAorCQkJICAgICAgIHN0cnVjdCBkcm1fdm13 X3JlY3QgKnZjbGlwcywKKwkJCSAgICAgICBzdHJ1Y3Qgdm13X3Jlc291cmNlICpzcmYsCisJCQkg ICAgICAgczMyIGRlc3RfeCwKKwkJCSAgICAgICBzMzIgZGVzdF95LAorCQkJICAgICAgIHVuc2ln bmVkIG51bV9jbGlwcywgaW50IGluYywKKwkJCSAgICAgICBzdHJ1Y3Qgdm13X2ZlbmNlX29iaiAq Km91dF9mZW5jZSkKK3sKKwlzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyX3N1cmZhY2UgKnZmYnMgPQor CQljb250YWluZXJfb2YoZnJhbWVidWZmZXIsIHR5cGVvZigqdmZicyksIGJhc2UpOworCXN0cnVj dCB2bXdfc3RkdV9kaXJ0eSBzZGlydHk7CisJaW50IHJldDsKKworCWlmICghc3JmKQorCQlzcmYg PSAmdmZicy0+c3VyZmFjZS0+cmVzOworCisJcmV0ID0gdm13X2ttc19oZWxwZXJfcmVzb3VyY2Vf cHJlcGFyZShzcmYsIHRydWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAodmZi cy0+aXNfZG1hYnVmX3Byb3h5KSB7CisJCXJldCA9IHZtd19rbXNfdXBkYXRlX3Byb3h5KHNyZiwg Y2xpcHMsIG51bV9jbGlwcywgaW5jKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZpbmlzaDsK Kwl9CisKKwlzZGlydHkuYmFzZS5maWZvX2NvbW1pdCA9IHZtd19rbXNfc3RkdV9zdXJmYWNlX2Zp Zm9fY29tbWl0OworCXNkaXJ0eS5iYXNlLmNsaXAgPSB2bXdfa21zX3N0ZHVfc3VyZmFjZV9jbGlw OworCXNkaXJ0eS5iYXNlLmZpZm9fcmVzZXJ2ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2bXdfc3Rk dV9zdXJmYWNlX2NvcHkpICsKKwkJc2l6ZW9mKFNWR0EzZENvcHlCb3gpICogbnVtX2NsaXBzICsK KwkJc2l6ZW9mKHN0cnVjdCB2bXdfc3RkdV91cGRhdGUpOworCXNkaXJ0eS5zaWQgPSBzcmYtPmlk OworCXNkaXJ0eS5sZWZ0ID0gc2RpcnR5LnRvcCA9IFMzMl9NQVg7CisJc2RpcnR5LnJpZ2h0ID0g c2RpcnR5LmJvdHRvbSA9IFMzMl9NSU47CisKKwlyZXQgPSB2bXdfa21zX2hlbHBlcl9kaXJ0eShk ZXZfcHJpdiwgZnJhbWVidWZmZXIsIGNsaXBzLCB2Y2xpcHMsCisJCQkJICAgZGVzdF94LCBkZXN0 X3ksIG51bV9jbGlwcywgaW5jLAorCQkJCSAgICZzZGlydHkuYmFzZSk7CitvdXRfZmluaXNoOgor CXZtd19rbXNfaGVscGVyX3Jlc291cmNlX2ZpbmlzaChzcmYsIG91dF9mZW5jZSk7CisKKwlyZXR1 cm4gcmV0OworfQorCiAKIC8qCiAgKiAgU2NyZWVuIFRhcmdldCBDUlRDIGRpc3BhdGNoIHRhYmxl CkBAIC0xMTIyLDcgKzExMzksNiBAQCBzdGF0aWMgaW50IHZtd19zdGR1X2luaXQoc3RydWN0IHZt d19wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgdW5pdCkKIAlzdGR1LT5iYXNlLnByZWZfYWN0 aXZlID0gKHVuaXQgPT0gMCk7CiAJc3RkdS0+YmFzZS5wcmVmX3dpZHRoICA9IGRldl9wcml2LT5p bml0aWFsX3dpZHRoOwogCXN0ZHUtPmJhc2UucHJlZl9oZWlnaHQgPSBkZXZfcHJpdi0+aW5pdGlh bF9oZWlnaHQ7Ci0Jc3RkdS0+YmFzZS5wcmVmX21vZGUgICA9IE5VTEw7CiAJc3RkdS0+YmFzZS5p c19pbXBsaWNpdCA9IHRydWU7CiAKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3Is ICZ2bXdfc3RkdV9jb25uZWN0b3JfZnVuY3MsCkBAIC0xMjA3LDYgKzEyMjMsOCBAQCBpbnQgdm13 X2ttc19zdGR1X2luaXRfZGlzcGxheShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogCWlm ICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gZXJyX3ZibGFua19jbGVhbnVwOwogCisJZGV2 X3ByaXYtPmFjdGl2ZV9kaXNwbGF5X3VuaXQgPSB2bXdfZHVfc2NyZWVuX3RhcmdldDsKKwogCWZv ciAoaSA9IDA7IGkgPCBWTVdHRlhfTlVNX0RJU1BMQVlfVU5JVFM7ICsraSkgewogCQlyZXQgPSB2 bXdfc3RkdV9pbml0KGRldl9wcml2LCBpKTsKIApAQCAtMTIxNiw4ICsxMjM0LDYgQEAgaW50IHZt d19rbXNfc3RkdV9pbml0X2Rpc3BsYXkoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIAkJ fQogCX0KIAotCWRldl9wcml2LT5hY3RpdmVfZGlzcGxheV91bml0ID0gdm13X2R1X3NjcmVlbl90 YXJnZXQ7Ci0KIAlEUk1fSU5GTygiU2NyZWVuIFRhcmdldCBEaXNwbGF5IGRldmljZSBpbml0aWFs aXplZFxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDcsMjQ3ICsxMjYzLDMgQEAgaW50IHZtd19r bXNfc3RkdV9jbG9zZV9kaXNwbGF5KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIAly ZXR1cm4gMDsKIH0KLQotCi0KLS8qKgotICogdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkg LSB1cGRhdGVzIGEgZGlydHkgcmVjdGFuZ2UgdG8gU1ZHQSBkZXZpY2UKLSAqCi0gKiBAZGV2X3By aXY6IFZNVyBEUk0gZGV2aWNlCi0gKiBAZmlsZV9wcml2OiBQb2ludGVyIHRvIGEgZHJtIGZpbGUg cHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqIEBmcmFtZWJ1ZmZlcjogRkIgd2l0aCB0aGUgbmV3IGNvbnRl bnQgdG8gYmUgY29waWVkIHRvIFNWR0EgZGV2aWNlCi0gKiBAY2xpcF9yZWN0czogYXJyYXkgb2Yg ZGlydHkgcmVjdGFuZ2VzCi0gKiBAbnVtX29mX2NsaXBfcmVjdHM6IG51bWJlciBvZiByZWN0YW5n ZXMgaW4gQGNsaXBzCi0gKiBAaW5jcmVtZW50OiBpbmNyZW1lbnQgdG8gdGhlIG5leHQgZGlydHkg cmVjdCBpbiBAY2xpcHMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNlbmRzIGFuIFVwZGF0ZSBjb21t YW5kIHRvIHRoZSBTVkdBIGRldmljZS4gIFRoaXMgd2lsbCBub3RpZnkKLSAqIHRoZSBkZXZpY2Ug dGhhdCBhIHJlZ2lvbiBuZWVkcyB0byBiZSBjb3BpZWQgdG8gdGhlIHNjcmVlbi4gIEF0IHRoaXMg dGltZQotICogd2UgYXJlIG5vdCBjb2FsZXNjaW5nIGNsaXAgcmVjdHMgaW50byBvbmUgbGFyZ2Ug Y2xpcCByZWN0IGJlY2F1c2UgdGhlIFNWR0EKLSAqIGRldmljZSB3aWxsIGRvIGl0IGZvciB1cy4K LSAqCi0gKiBSRVRVUk5TOgotICogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZQot ICovCi1pbnQgdm13X2ttc19zdGR1X2RvX3N1cmZhY2VfZGlydHkoc3RydWN0IHZtd19wcml2YXRl ICpkZXZfcHJpdiwKLQkJCQkgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAotCQkJCSAgc3Ry dWN0IHZtd19mcmFtZWJ1ZmZlciAqZnJhbWVidWZmZXIsCi0JCQkJICBzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqY2xpcF9yZWN0cywKLQkJCQkgIHVuc2lnbmVkIG51bV9vZl9jbGlwX3JlY3RzLCBpbnQg aW5jcmVtZW50KQotewotCXN0cnVjdCB2bXdfc2NyZWVuX3RhcmdldF9kaXNwbGF5X3VuaXQgKnN0 ZHVbVk1XR0ZYX05VTV9ESVNQTEFZX1VOSVRTXTsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY3Vy X3JlY3Q7Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCi0JdW5zaWduZWQgbnVtX29mX2R1ID0g MCwgY3VyX2R1LCBjb3VudCA9IDA7Ci0JaW50ICAgICAgcmV0ID0gMDsKLQotCi0JQlVHX09OKCFj bGlwX3JlY3RzIHx8ICFudW1fb2ZfY2xpcF9yZWN0cyk7Ci0KLQkvKiBGaWd1cmUgb3V0IGFsbCB0 aGUgRFUgYWZmZWN0ZWQgYnkgdGhpcyBzdXJmYWNlICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShj cnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19saXN0LAotCQkJICAgIGhlYWQp IHsKLQkJaWYgKGNydGMtPnByaW1hcnktPmZiICE9ICZmcmFtZWJ1ZmZlci0+YmFzZSkKLQkJCWNv bnRpbnVlOwotCi0JCXN0ZHVbbnVtX29mX2R1KytdID0gdm13X2NydGNfdG9fc3RkdShjcnRjKTsK LQl9Ci0KLQlmb3IgKGN1cl9kdSA9IDA7IGN1cl9kdSA8IG51bV9vZl9kdTsgY3VyX2R1KyspCi0J CWZvciAoY3VyX3JlY3QgPSBjbGlwX3JlY3RzLCBjb3VudCA9IDA7Ci0JCSAgICAgY291bnQgPCBu dW1fb2ZfY2xpcF9yZWN0cyAmJiByZXQgPT0gMDsKLQkJICAgICBjdXJfcmVjdCArPSBpbmNyZW1l bnQsIGNvdW50KyspIHsKLQkJCXJldCA9IHZtd19zdGR1X3VwZGF0ZV9zdChkZXZfcHJpdiwgZmls ZV9wcml2LAotCQkJCQkJIHN0ZHVbY3VyX2R1XSwKLQkJCQkJCSBjdXJfcmVjdCk7Ci0JCX0KLQot CXJldHVybiByZXQ7Ci19Ci0KLQotCi0vKioKLSAqIHZtd19rbXNfc3RkdV9wcmVzZW50IC0gcHJl c2VudCBhIHN1cmZhY2UgdG8gdGhlIGRpc3BsYXkgc3VyZmFjZQotICoKLSAqIEBkZXZfcHJpdjog Vk1XIERSTSBkZXZpY2UKLSAqIEBmaWxlX3ByaXY6IFBvaW50ZXIgdG8gYSBkcm0gZmlsZSBwcml2 YXRlIHN0cnVjdHVyZQotICogQHZmYjogVXNlZCB0byBwaWNrIHdoaWNoIFNURFUocykgaXMgYWZm ZWN0ZWQKLSAqIEB1c2VyX2hhbmRsZTogdXNlciBoYW5kbGUgZm9yIHRoZSBzb3VyY2Ugc3VyZmFj ZQotICogQGRlc3RfeDogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5IGFyZWEgdG8gYmxp dCB0bwotICogQGRlc3RfeTogdG9wL2xlZnQgY29ybmVyIG9mIHRoZSBkaXNwbGF5IGFyZWEgdG8g YmxpdCB0bwotICogQGNsaXBfcmVjdHM6IGFycmF5IG9mIGRpcnR5IHJlY3RhbmdlcwotICogQG51 bV9vZl9jbGlwX3JlY3RzOiBudW1iZXIgb2YgcmVjdGFuZ2VzIGluIEBjbGlwcwotICoKLSAqIFRo aXMgZnVuY3Rpb24gY29waWVzIGEgc3VyZmFjZSBvbnRvIHRoZSBkaXNwbGF5IHN1cmZhY2UsIGFu ZAotICogdXBkYXRlcyB0aGUgc2NyZWVuIHRhcmdldC4gIFN0cmVjaCBibGl0IGlzIGN1cnJlbnRs eSBub3QKLSAqIHN1cHBvcnRlZC4KLSAqCi0gKiBSRVRVUk5TOgotICogMCBvbiBzdWNjZXNzLCBl cnJvciBjb2RlIG90aGVyd2lzZQotICovCi1pbnQgdm13X2ttc19zdGR1X3ByZXNlbnQoc3RydWN0 IHZtd19wcml2YXRlICpkZXZfcHJpdiwKLQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwK LQkJCSBzdHJ1Y3Qgdm13X2ZyYW1lYnVmZmVyICp2ZmIsCi0JCQkgdWludDMyX3QgdXNlcl9oYW5k bGUsCi0JCQkgaW50MzJfdCBkZXN0X3gsIGludDMyX3QgZGVzdF95LAotCQkJIHN0cnVjdCBkcm1f dm13X3JlY3QgKmNsaXBfcmVjdHMsCi0JCQkgdWludDMyX3QgbnVtX29mX2NsaXBfcmVjdHMpCi17 Ci0Jc3RydWN0IHZtd19zY3JlZW5fdGFyZ2V0X2Rpc3BsYXlfdW5pdCAqc3RkdVtWTVdHRlhfTlVN X0RJU1BMQVlfVU5JVFNdOwotCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICp1cGRhdGVfYXJlYTsKLQlz dHJ1Y3QgZHJtX2NydGMgKmNydGM7Ci0Jc2l6ZV90IGZpZm9fc2l6ZTsKLQlpbnQgbnVtX29mX2R1 ID0gMCwgY3VyX2R1LCBpOwotCWludCByZXQgPSAwOwotCXN0cnVjdCB2bXdfY2xpcF9yZWN0IHNy Y19iYjsKLQotCXN0cnVjdCB7Ci0JCVNWR0EzZENtZEhlYWRlciAgICAgIGhlYWRlcjsKLQkJU1ZH QTNkQ21kU3VyZmFjZUNvcHkgYm9keTsKLQl9ICpjbWQ7Ci0JU1ZHQTNkQ29weUJveCAqYmxpdHM7 Ci0KLQotCUJVR19PTighY2xpcF9yZWN0cyB8fCAhbnVtX29mX2NsaXBfcmVjdHMpOwotCi0JbGlz dF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2X3ByaXYtPmRldi0+bW9kZV9jb25maWcuY3J0Y19s aXN0LCBoZWFkKSB7Ci0JCWlmIChjcnRjLT5wcmltYXJ5LT5mYiAhPSAmdmZiLT5iYXNlKQotCQkJ Y29udGludWU7Ci0KLQkJc3RkdVtudW1fb2ZfZHUrK10gPSB2bXdfY3J0Y190b19zdGR1KGNydGMp OwotCX0KLQotCi0JdXBkYXRlX2FyZWEgPSBrY2FsbG9jKG51bV9vZl9jbGlwX3JlY3RzLCBzaXpl b2YoKnVwZGF0ZV9hcmVhKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSh1 cGRhdGVfYXJlYSA9PSBOVUxMKSkgewotCQlEUk1fRVJST1IoIlRlbXBvcmFyeSBjbGlwIHJlY3Qg bWVtb3J5IGFsbG9jIGZhaWxlZC5cbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQotCWZp Zm9fc2l6ZSA9IHNpemVvZigqY21kKSArIHNpemVvZihTVkdBM2RDb3B5Qm94KSAqIG51bV9vZl9j bGlwX3JlY3RzOwotCi0JY21kID0ga21hbGxvYyhmaWZvX3NpemUsIEdGUF9LRVJORUwpOwotCWlm ICh1bmxpa2VseShjbWQgPT0gTlVMTCkpIHsKLQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2Nh dGUgbWVtb3J5IGZvciBzdXJmYWNlIGNvcHkuXG4iKTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290 byBvdXRfZnJlZV91cGRhdGVfYXJlYTsKLQl9Ci0KLQltZW1zZXQoY21kLCAwLCBmaWZvX3NpemUp OwotCWNtZC0+aGVhZGVyLmlkID0gU1ZHQV8zRF9DTURfU1VSRkFDRV9DT1BZOwotCi0JYmxpdHMg PSAoU1ZHQTNkQ29weUJveCAqKSZjbWRbMV07Ci0KLQotCS8qIEZpZ3VyZSBvdXQgdGhlIHNvdXJj ZSBib3VuZGluZyBib3ggKi8KLQlzcmNfYmIueDEgPSBjbGlwX3JlY3RzLT54OwotCXNyY19iYi55 MSA9IGNsaXBfcmVjdHMtPnk7Ci0Jc3JjX2JiLngyID0gY2xpcF9yZWN0cy0+eCArIGNsaXBfcmVj dHMtPnc7Ci0Jc3JjX2JiLnkyID0gY2xpcF9yZWN0cy0+eSArIGNsaXBfcmVjdHMtPmg7Ci0KLQlm b3IgKGkgPSAxOyBpIDwgbnVtX29mX2NsaXBfcmVjdHM7IGkrKykgewotCQlzcmNfYmIueDEgPSBt aW5fdChpbnQsIHNyY19iYi54MSwgY2xpcF9yZWN0c1tpXS54KTsKLQkJc3JjX2JiLngyID0gbWF4 X3QoaW50LCBzcmNfYmIueDIsCi0JCQkJICBjbGlwX3JlY3RzW2ldLnggKyAoaW50KSBjbGlwX3Jl Y3RzW2ldLncpOwotCQlzcmNfYmIueTEgPSBtaW5fdChpbnQsIHNyY19iYi55MSwgY2xpcF9yZWN0 c1tpXS55KTsKLQkJc3JjX2JiLnkyID0gbWF4X3QoaW50LCBzcmNfYmIueTIsCi0JCQkJICBjbGlw X3JlY3RzW2ldLnkgKyAoaW50KSBjbGlwX3JlY3RzW2ldLmgpOwotCX0KLQotCWZvciAoaSA9IDA7 IGkgPCBudW1fb2ZfY2xpcF9yZWN0czsgaSsrKSB7Ci0JCXVwZGF0ZV9hcmVhW2ldLngxID0gY2xp cF9yZWN0c1tpXS54IC0gc3JjX2JiLngxOwotCQl1cGRhdGVfYXJlYVtpXS54MiA9IHVwZGF0ZV9h cmVhW2ldLngxICsgY2xpcF9yZWN0c1tpXS53OwotCQl1cGRhdGVfYXJlYVtpXS55MSA9IGNsaXBf cmVjdHNbaV0ueSAtIHNyY19iYi55MTsKLQkJdXBkYXRlX2FyZWFbaV0ueTIgPSB1cGRhdGVfYXJl YVtpXS55MSArIGNsaXBfcmVjdHNbaV0uaDsKLQl9Ci0KLQotCWZvciAoY3VyX2R1ID0gMDsgY3Vy X2R1IDwgbnVtX29mX2R1OyBjdXJfZHUrKykgewotCQlzdHJ1Y3Qgdm13X2NsaXBfcmVjdCBkZXN0 X2JiOwotCQlpbnQgbnVtX29mX2JsaXRzOwotCi0JCWNydGMgPSAmc3RkdVtjdXJfZHVdLT5iYXNl LmNydGM7Ci0KLQkJZGVzdF9iYi54MSA9IHNyY19iYi54MSArIGRlc3RfeCAtIGNydGMtPng7Ci0J CWRlc3RfYmIueTEgPSBzcmNfYmIueTEgKyBkZXN0X3kgLSBjcnRjLT55OwotCQlkZXN0X2JiLngy ID0gc3JjX2JiLngyICsgZGVzdF94IC0gY3J0Yy0+eDsKLQkJZGVzdF9iYi55MiA9IHNyY19iYi55 MiArIGRlc3RfeSAtIGNydGMtPnk7Ci0KLQkJLyogU2tpcCBhbnkgU1REVSBvdXRzaWRlIG9mIHRo ZSBkZXN0aW5hdGlvbiBib3VuZGluZyBib3ggKi8KLQkJaWYgKGRlc3RfYmIueDEgPj0gY3J0Yy0+ bW9kZS5oZGlzcGxheSB8fAotCQkgICAgZGVzdF9iYi55MSA+PSBjcnRjLT5tb2RlLnZkaXNwbGF5 IHx8Ci0JCSAgICBkZXN0X2JiLngyIDw9IDAgfHwgZGVzdF9iYi55MiA8PSAwKQotCQkJY29udGlu dWU7Ci0KLQkJLyogTm9ybWFsaXplIHRvIHRvcC1sZWZ0IG9mIHNyYyBib3VuZGluZyBib3ggaW4g ZGVzdCBjb29yZCAqLwotCQlkZXN0X2JiLngyID0gY3J0Yy0+bW9kZS5oZGlzcGxheSAtIGRlc3Rf YmIueDE7Ci0JCWRlc3RfYmIueTIgPSBjcnRjLT5tb2RlLnZkaXNwbGF5IC0gZGVzdF9iYi55MTsK LQkJZGVzdF9iYi54MSA9IDAgLSBkZXN0X2JiLngxOwotCQlkZXN0X2JiLnkxID0gMCAtIGRlc3Rf YmIueTE7Ci0KLQkJZm9yIChpID0gMCwgbnVtX29mX2JsaXRzID0gMDsgaSA8IG51bV9vZl9jbGlw X3JlY3RzOyBpKyspIHsKLQkJCWludCB4MSA9IG1heF90KGludCwgZGVzdF9iYi54MSwgKGludCl1 cGRhdGVfYXJlYVtpXS54MSk7Ci0JCQlpbnQgeTEgPSBtYXhfdChpbnQsIGRlc3RfYmIueTEsIChp bnQpdXBkYXRlX2FyZWFbaV0ueTEpOwotCQkJaW50IHgyID0gbWluX3QoaW50LCBkZXN0X2JiLngy LCAoaW50KXVwZGF0ZV9hcmVhW2ldLngyKTsKLQkJCWludCB5MiA9IG1pbl90KGludCwgZGVzdF9i Yi55MiwgKGludCl1cGRhdGVfYXJlYVtpXS55Mik7Ci0KLQkJCWlmICh4MSA+PSB4MikKLQkJCQlj b250aW51ZTsKLQotCQkJaWYgKHkxID49IHkyKQotCQkJCWNvbnRpbnVlOwotCi0JCQlibGl0c1tu dW1fb2ZfYmxpdHNdLnNyY3ggPSAgc3JjX2JiLngxICArIHgxOwotCQkJYmxpdHNbbnVtX29mX2Js aXRzXS5zcmN5ID0gIHNyY19iYi55MSAgKyB5MTsKLQkJCWJsaXRzW251bV9vZl9ibGl0c10ueCAg ICA9IC1kZXN0X2JiLngxICsgeDE7Ci0JCQlibGl0c1tudW1fb2ZfYmxpdHNdLnkgICAgPSAtZGVz dF9iYi55MSArIHkxOwotCQkJYmxpdHNbbnVtX29mX2JsaXRzXS5kICAgID0gMTsKLQkJCWJsaXRz W251bV9vZl9ibGl0c10udyAgICA9IHgyIC0geDE7Ci0JCQlibGl0c1tudW1fb2ZfYmxpdHNdLmgg ICAgPSB5MiAtIHkxOwotCQkJbnVtX29mX2JsaXRzKys7Ci0JCX0KLQotCQlpZiAobnVtX29mX2Js aXRzID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKiBDYWxjdWxhdGUgbmV3IGNvbW1hbmQgc2l6 ZSAqLwotCQlmaWZvX3NpemUgPSBzaXplb2YoKmNtZCkgKyBzaXplb2YoU1ZHQTNkQ29weUJveCkg KiBudW1fb2ZfYmxpdHM7Ci0KLQkJY21kLT5oZWFkZXIuc2l6ZSA9IGNwdV90b19sZTMyKGZpZm9f c2l6ZSAtIHNpemVvZihjbWQtPmhlYWRlcikpOwotCi0JCWNtZC0+Ym9keS5zcmMuc2lkICA9IHVz ZXJfaGFuZGxlOwotCQljbWQtPmJvZHkuZGVzdC5zaWQgPSBzdGR1W2N1cl9kdV0tPmRpc3BsYXlf c3JmLT5yZXMuaWQ7Ci0KLQkJcmV0ID0gdm13X2V4ZWNidWZfcHJvY2VzcyhmaWxlX3ByaXYsIGRl dl9wcml2LCBOVUxMLCBjbWQsCi0JCQkJCSAgZmlmb19zaXplLCAwLCBWTVdfUVVJUktfRFNUX1NJ RF9PSywKLQkJCQkJICBOVUxMLCBOVUxMKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQot CQkJYnJlYWs7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bV9vZl9ibGl0czsgaSsrKSB7Ci0JCQlz dHJ1Y3QgZHJtX2NsaXBfcmVjdCBibGl0X2FyZWE7Ci0KLQkJCS8qCi0JCQkgKiBBZGQgY3J0YyBv ZmZzZXQgYmVjYXVzZSB2bXdfc3RkdV91cGRhdGVfc3QgZXhwZWN0cwotCQkJICogZGVza3RvcCBj b29yZGluYXRlcwotCQkJICovCi0JCQlibGl0X2FyZWEueDEgPSBibGl0c1tpXS54ICsgY3J0Yy0+ eDsKLQkJCWJsaXRfYXJlYS54MiA9IGJsaXRfYXJlYS54MSArIGJsaXRzW2ldLnc7Ci0JCQlibGl0 X2FyZWEueTEgPSBibGl0c1tpXS55ICsgY3J0Yy0+eTsKLQkJCWJsaXRfYXJlYS55MiA9IGJsaXRf YXJlYS55MSArIGJsaXRzW2ldLmg7Ci0JCQkodm9pZCkgdm13X3N0ZHVfdXBkYXRlX3N0KGRldl9w cml2LCBOVUxMLCBzdGR1W2N1cl9kdV0sCi0JCQkJCQkgICZibGl0X2FyZWEpOwotCQl9Ci0JfQot Ci0Ja2ZyZWUoY21kKTsKLQotb3V0X2ZyZWVfdXBkYXRlX2FyZWE6Ci0Ja2ZyZWUodXBkYXRlX2Fy ZWEpOwotCi0JcmV0dXJuIHJldDsKLX0KLS0gCjIuMS4wCgoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK