From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 46/46] drm/i915: Replace global breadcrumbs with per-context interrupt tracking Date: Mon, 7 Jan 2019 11:55:09 +0000 Message-ID: <20190107115509.12523-46-chris@chris-wilson.co.uk> References: <20190107115509.12523-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from fireflyinternet.com (mail.fireflyinternet.com [109.228.58.192]) by gabe.freedesktop.org (Postfix) with ESMTPS id 5DF166E49A for ; Mon, 7 Jan 2019 11:55:41 +0000 (UTC) In-Reply-To: <20190107115509.12523-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org QSBmZXcgeWVhcnMgYWdvLCBzZWUgY29tbWl0IDY4OGU2YzcyNTgxNiAoImRybS9pOTE1OiBTbGF1 Z2h0ZXIgdGhlCnRodW5kZXJpbmcgaTkxNV93YWl0X3JlcXVlc3QgaGVyZCIpLCB0aGUgaXNzdWUg b2YgaGFuZGxpbmcgbXVsdGlwbGUKY2xpZW50cyB3YWl0aW5nIGluIHBhcmFsbGVsIHdhcyBicm91 Z2h0IHRvIG91ciBhdHRlbnRpb24uIFRoZQpyZXF1aXJlbWVudCB3YXMgdGhhdCBldmVyeSBjbGll bnQgc2hvdWxkIGJlIHdva2VuIGltbWVkaWF0ZWx5IHVwb24gaXRzCnJlcXVlc3QgYmVpbmcgc2ln bmFsZWQsIHdpdGhvdXQgaW5jdXJyaW5nIGFueSBjcHUgb3ZlcmhlYWQuCgpUbyBoYW5kbGUgY2Vy dGFpbiBmcmFnaWxpdHkgb2Ygb3VyIGh3IG1lYW50IHRoYXQgd2UgY291bGQgbm90IGRvIGEKc2lt cGxlIGNoZWNrIGluc2lkZSB0aGUgaXJxIGhhbmRsZXIgKHNvbWUgZ2VuZXJhdGlvbnMgcmVxdWly ZWQgYWxtb3N0CnVuYm91bmRlZCBkZWxheXMgYmVmb3JlIHdlIGNvdWxkIGJlIHN1cmUgb2Ygc2Vx bm8gY29oZXJlbmN5KSBhbmQgc28KcmVxdWVzdCBjb21wbGV0aW9uIGNoZWNraW5nIHJlcXVpcmVk IGRlbGVnYXRpb24uCgpCZWZvcmUgY29tbWl0IDY4OGU2YzcyNTgxNiwgdGhlIHNvbHV0aW9uIHdh cyBzaW1wbGUuIEV2ZXJ5IGNsaWVudCB3YWtpbmcKb24gYSByZXF1ZXN0IHdvdWxkIGJlIHdva2Vu IG9uIGV2ZXJ5IGludGVycnVwdCBhbmQgZWFjaCB3b3VsZCBkbyBhCmhlYXZ5d2VpZ2h0IGNoZWNr IHRvIHNlZSBpZiB0aGVpciByZXF1ZXN0IHdhcyBjb21wbGV0ZS4gQ29tbWl0CjY4OGU2YzcyNTgx NiBpbnRyb2R1Y2VkIGFuIHJidHJlZSBzbyB0aGF0IG9ubHkgdGhlIGVhcmxpZXN0IHdhaXRlciBv bgp0aGUgZ2xvYmFsIHRpbWVsaW5lIHdvdWxkIHdva2VuLCBhbmQgd291bGQgd2FrZSB0aGUgbmV4 dCBhbmQgc28gb24uCihBbG9uZyB3aXRoIHZhcmlvdXMgY29tcGxpY2F0aW9ucyB0byBoYW5kbGUg cmVxdWVzdHMgYmVpbmcgcmVvcmRlcmVkCmFsb25nIHRoZSBnbG9iYWwgdGltZWxpbmUsIGFuZCBh bHNvIGEgcmVxdWlyZW1lbnQgZm9yIGt0aHJlYWQgdG8gcHJvdmlkZQphIGRlbGVnYXRlIGZvciBm ZW5jZSBzaWduYWxpbmcgdGhhdCBoYWQgbm8gcHJvY2VzcyBjb250ZXh0LikKClRoZSBnbG9iYWwg cmJ0cmVlIGRlcGVuZHMgb24ga25vd2luZyB0aGUgZXhlY3V0aW9uIHRpbWVsaW5lIChhbmQgZ2xv YmFsCnNlcW5vKS4gV2l0aG91dCBrbm93aW5nIHRoYXQgb3JkZXIsIHdlIG11c3QgaW5zdGVhZCBj aGVjayBhbGwgY29udGV4dHMKcXVldWVkIHRvIHRoZSBIVyB0byBzZWUgd2hpY2ggbWF5IGhhdmUg YWR2YW5jZWQuIFdlIHRyaW0gdGhhdCBsaXN0IGJ5Cm9ubHkgY2hlY2tpbmcgcXVldWVkIGNvbnRl eHRzIHRoYXQgYXJlIGJlaW5nIHdhaXRlZCBvbiwgYnV0IHN0aWxsIHdlCmtlZXAgYSBsaXN0IG9m IGFsbCBhY3RpdmUgY29udGV4dHMgYW5kIHRoZWlyIGFjdGl2ZSBzaWduYWxlcnMgdGhhdCB3ZQpp bnNwZWN0IGZyb20gaW5zaWRlIHRoZSBpcnEgaGFuZGxlci4gQnkgbW92aW5nIHRoZSB3YWl0ZXJz IG9udG8gdGhlIGZlbmNlCnNpZ25hbCBsaXN0LCB3ZSBjYW4gY29tYmluZSB0aGUgY2xpZW50IHdh a2V1cCB3aXRoIHRoZSBkbWFfZmVuY2UKc2lnbmFsaW5nIChhIGRyYW1hdGljIHJlZHVjdGlvbiBp biBjb21wbGV4aXR5LCBidXQgZG9lcyByZXF1aXJlIHRoZSBIVwpiZWluZyBjb2hlcmVudCwgdGhl IHNlcW5vIG11c3QgYmUgdmlzaWJsZSBmcm9tIHRoZSBjcHUgYmVmb3JlIHRoZQppbnRlcnJ1cHQg aXMgcmFpc2VkIC0gd2Uga2VlcCBhIHRpbWVyIGJhY2t1cCBqdXN0IGluIGNhc2UpLgoKSGF2aW5n IHByZXZpb3VzbHkgZml4ZWQgYWxsIHRoZSBpc3N1ZXMgd2l0aCBpcnEtc2Vxbm8gc2VyaWFsaXNh dGlvbiAoYnkKaW5zZXJ0aW5nIGRlbGF5cyBvbnRvIHRoZSBHUFUgYWZ0ZXIgZWFjaCByZXF1ZXN0 IGluc3RlYWQgb2YgcmFuZG9tIGRlbGF5cwpvbiB0aGUgQ1BVIGFmdGVyIGVhY2ggaW50ZXJydXB0 KSwgd2UgY2FuIHJlbHkgb24gdGhlIHNlcW5vIHN0YXRlIHRvCnBlcmZvbSBkaXJlY3Qgd2FrZXVw cyBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcyBhbGxvd3MgdXMgdG8KcHJlc2VydmUg b3VyIHNpbmdsZSBjb250ZXh0IHN3aXRjaCBiZWhhdmlvdXIgb2YgdGhlIGN1cnJlbnQgcm91dGlu ZSwKd2l0aCB0aGUgb25seSBkb3duc2lkZSB0aGF0IHdlIGxvc2UgdGhlIFJUIHByaW9yaXR5IHNv cnRpbmcgb2Ygd2FrZXVwcy4KSW4gZ2VuZXJhbCwgZGlyZWN0IHdha2V1cCBsYXRlbmN5IG9mIG11 bHRpcGxlIGNsaWVudHMgaXMgYWJvdXQgdGhlIHNhbWUKKGFib3V0IDEwJSBiZXR0ZXIgaW4gbW9z dCBjYXNlcykgd2l0aCBhIHJlZHVjdGlvbiBpbiB0b3RhbCBDUFUgdGltZSBzcGVudAppbiB0aGUg d2FpdGVyIChhYm91dCAyMC01MCUgZGVwZW5kaW5nIG9uIGdlbikuIEF2ZXJhZ2UgaGVyZCBiZWhh dmlvdXIgaXMKaW1wcm92ZWQsIGJ1dCBhdCB0aGUgY29zdCBvZiBub3QgZGVsZWdhdGluZyB3YWtl dXBzIG9uIHRhc2tfcHJpby4KClJlZmVyZW5jZXM6IDY4OGU2YzcyNTgxNiAoImRybS9pOTE1OiBT bGF1Z2h0ZXIgdGhlIHRodW5kZXJpbmcgaTkxNV93YWl0X3JlcXVlc3QgaGVyZCIpClNpZ25lZC1v ZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgICAgICAgICB8ICAyOCArLQogZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jICAgICAgIHwgICAyICsKIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCAgICAgICB8ICAgMiArCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jICAgICAgICAgfCAgNzMgLS0KIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmggICAgICAgICB8ICAgOCAtCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2lycS5jICAgICAgICAgICAgICAgfCAgODggKy0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVxdWVzdC5jICAgICAgICAgICB8IDEyOCArLS0KIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVxdWVzdC5oICAgICAgICAgICB8ICAyMiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9yZXNldC5jICAgICAgICAgICAgIHwgIDEzICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9icmVhZGNydW1icy5jICAgICAgfCA4MDYgKysrKystLS0tLS0tLS0tLS0tCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyAgICAgICAgfCAgMzQgKy0KIGRy aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyAgICAgICB8ICAgNiArLQogZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oICAgICAgIHwgIDk1ICstLQogLi4u L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmggIHwgICAxIC0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYyB8IDM5OCArKysrKysrKysK IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pZ3Rfc3Bpbm5lci5jICB8ICAgNSAtCiAu Li4vZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2JyZWFkY3J1bWJzLmMgICAgfCA0NzAgLS0tLS0t LS0tLQogLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfaGFuZ2NoZWNrLmMgIHwgICAy ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMgfCAgNTQg KysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuaCB8ICAgMyAr CiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgfCAgIDIgKwog ZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMgIHwgIDI2ICstCiBk cml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuaCAgfCAgIDYgLQogMjMg ZmlsZXMgY2hhbmdlZCwgNzc5IGluc2VydGlvbnMoKyksIDE0OTMgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2JyZWFk Y3J1bWJzLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCmluZGV4IDQyNTkwYTBhNjM0 Zi4uYzA0MTRhZjA3MzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtMTMx NSwyOSArMTMxNSwxNiBAQCBzdGF0aWMgaW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0IHNl cV9maWxlICptLCB2b2lkICp1bnVzZWQpCiAJc2VxX3ByaW50ZihtLCAiR1QgYWN0aXZlPyAlc1xu IiwgeWVzbm8oZGV2X3ByaXYtPmd0LmF3YWtlKSk7CiAKIAlmb3JfZWFjaF9lbmdpbmUoZW5naW5l LCBkZXZfcHJpdiwgaWQpIHsKLQkJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2lu ZS0+YnJlYWRjcnVtYnM7Ci0JCXN0cnVjdCByYl9ub2RlICpyYjsKLQogCQlzZXFfcHJpbnRmKG0s ICIlczpcbiIsIGVuZ2luZS0+bmFtZSk7CiAJCXNlcV9wcmludGYobSwgIlx0c2Vxbm8gPSAleCBb Y3VycmVudCAleCwgbGFzdCAleF1cbiIsCiAJCQkgICBlbmdpbmUtPmhhbmdjaGVjay5zZXFubywg c2Vxbm9baWRdLAogCQkJICAgaW50ZWxfZW5naW5lX2xhc3Rfc3VibWl0KGVuZ2luZSkpOwotCQlz ZXFfcHJpbnRmKG0sICJcdHdhaXRlcnM/ICVzLCBmYWtlIGlycSBhY3RpdmU/ICVzLCBzdGFsbGVk PyAlcywgd2VkZ2VkPyAlc1xuIiwKLQkJCSAgIHllc25vKGludGVsX2VuZ2luZV9oYXNfd2FpdGVy KGVuZ2luZSkpLAorCQlzZXFfcHJpbnRmKG0sICJcdGZha2UgaXJxIGFjdGl2ZT8gJXMsIHN0YWxs ZWQ/ICVzLCB3ZWRnZWQ/ICVzXG4iLAogCQkJICAgeWVzbm8odGVzdF9iaXQoZW5naW5lLT5pZCwK IAkJCQkJICAmZGV2X3ByaXYtPmdwdV9lcnJvci5taXNzZWRfaXJxX3JpbmdzKSksCiAJCQkgICB5 ZXNubyhlbmdpbmUtPmhhbmdjaGVjay5zdGFsbGVkKSwKIAkJCSAgIHllc25vKGVuZ2luZS0+aGFu Z2NoZWNrLndlZGdlZCkpOwogCi0JCXNwaW5fbG9ja19pcnEoJmItPnJiX2xvY2spOwotCQlmb3Ig KHJiID0gcmJfZmlyc3QoJmItPndhaXRlcnMpOyByYjsgcmIgPSByYl9uZXh0KHJiKSkgewotCQkJ c3RydWN0IGludGVsX3dhaXQgKncgPSByYl9lbnRyeShyYiwgdHlwZW9mKCp3KSwgbm9kZSk7Ci0K LQkJCXNlcV9wcmludGYobSwgIlx0JXMgWyVkXSB3YWl0aW5nIGZvciAleFxuIiwKLQkJCQkgICB3 LT50c2stPmNvbW0sIHctPnRzay0+cGlkLCB3LT5zZXFubyk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tf aXJxKCZiLT5yYl9sb2NrKTsKLQogCQlzZXFfcHJpbnRmKG0sICJcdEFDVEhEID0gMHglMDhsbHgg W2N1cnJlbnQgMHglMDhsbHhdXG4iLAogCQkJICAgKGxvbmcgbG9uZyllbmdpbmUtPmhhbmdjaGVj ay5hY3RoZCwKIAkJCSAgIChsb25nIGxvbmcpYWN0aGRbaWRdKTsKQEAgLTIwMjYsMTggKzIwMTMs NiBAQCBzdGF0aWMgaW50IGk5MTVfc3dpenpsZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9p ZCAqZGF0YSkKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3VudF9pcnFfd2FpdGVycyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKLXsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Ci0JaW50IGNvdW50ID0gMDsKLQot CWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKQotCQljb3VudCArPSBpbnRlbF9lbmdp bmVfaGFzX3dhaXRlcihlbmdpbmUpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCiBzdGF0aWMgY29u c3QgY2hhciAqcnBzX3Bvd2VyX3RvX3N0cih1bnNpZ25lZCBpbnQgcG93ZXIpCiB7CiAJc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCBzdHJpbmdzW10gPSB7CkBAIC0yMDc3LDcgKzIwNTIsNiBAQCBz dGF0aWMgaW50IGk5MTVfcnBzX2Jvb3N0X2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpk YXRhKQogCXNlcV9wcmludGYobSwgIlJQUyBlbmFibGVkPyAlZFxuIiwgcnBzLT5lbmFibGVkKTsK IAlzZXFfcHJpbnRmKG0sICJHUFUgYnVzeT8gJXMgWyVkIHJlcXVlc3RzXVxuIiwKIAkJICAgeWVz bm8oZGV2X3ByaXYtPmd0LmF3YWtlKSwgZGV2X3ByaXYtPmd0LmFjdGl2ZV9yZXF1ZXN0cyk7Ci0J c2VxX3ByaW50ZihtLCAiQ1BVIHdhaXRpbmc/ICVkXG4iLCBjb3VudF9pcnFfd2FpdGVycyhkZXZf cHJpdikpOwogCXNlcV9wcmludGYobSwgIkJvb3N0cyBvdXRzdGFuZGluZz8gJWRcbiIsCiAJCSAg IGF0b21pY19yZWFkKCZycHMtPm51bV93YWl0ZXJzKSk7CiAJc2VxX3ByaW50ZihtLCAiSW50ZXJh Y3RpdmU/ICVkXG4iLCBSRUFEX09OQ0UocnBzLT5wb3dlci5pbnRlcmFjdGl2ZSkpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCmluZGV4IDU5MDViNmQ4ZjI5MS4uNDcxNDU2 OGJjZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0 LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCkBAIC0zNDMs NiArMzQzLDggQEAgX19jcmVhdGVfaHdfY29udGV4dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9ICZjdHgtPl9fZW5naW5lW25d OwogCiAJCWNlLT5nZW1fY29udGV4dCA9IGN0eDsKKwkJSU5JVF9MSVNUX0hFQUQoJmNlLT5zaWdu YWxfbGluayk7CisJCUlOSVRfTElTVF9IRUFEKCZjZS0+c2lnbmFscyk7CiAJfQogCiAJSU5JVF9S QURJWF9UUkVFKCZjdHgtPmhhbmRsZXNfdm1hLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2NvbnRleHQuaAppbmRleCBmNmQ4NzBiMWY3M2UuLmU1ZWNhMjljZDM3MyAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCisrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2NvbnRleHQuaApAQCAtMTY0LDYgKzE2NCw4 IEBAIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0IHsKIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCB7CiAJ CXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpnZW1fY29udGV4dDsKIAkJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqYWN0aXZlOworCQlzdHJ1Y3QgbGlzdF9oZWFkIHNpZ25hbF9saW5rOworCQlzdHJ1 Y3QgbGlzdF9oZWFkIHNpZ25hbHM7CiAJCXN0cnVjdCBpOTE1X3ZtYSAqc3RhdGU7CiAJCXN0cnVj dCBpbnRlbF9yaW5nICpyaW5nOwogCQl1MzIgKmxyY19yZWdfc3RhdGU7CmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ncHVfZXJyb3IuYwppbmRleCA2ZTk3NWM0M2RhZTkuLmNiMWRkOTNiM2FhYSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYworKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCkBAIC01MzAsNyArNTMwLDYgQEAgc3Rh dGljIHZvaWQgZXJyb3JfcHJpbnRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9i dWYgKm0sCiAJfQogCWVycl9wcmludGYobSwgIiAgc2Vxbm86IDB4JTA4eFxuIiwgZWUtPnNlcW5v KTsKIAllcnJfcHJpbnRmKG0sICIgIGxhc3Rfc2Vxbm86IDB4JTA4eFxuIiwgZWUtPmxhc3Rfc2Vx bm8pOwotCWVycl9wcmludGYobSwgIiAgd2FpdGluZzogJXNcbiIsIHllc25vKGVlLT53YWl0aW5n KSk7CiAJZXJyX3ByaW50ZihtLCAiICByaW5nLT5oZWFkOiAweCUwOHhcbiIsIGVlLT5jcHVfcmlu Z19oZWFkKTsKIAllcnJfcHJpbnRmKG0sICIgIHJpbmctPnRhaWw6IDB4JTA4eFxuIiwgZWUtPmNw dV9yaW5nX3RhaWwpOwogCWVycl9wcmludGYobSwgIiAgaGFuZ2NoZWNrIHN0YWxsOiAlc1xuIiwg eWVzbm8oZWUtPmhhbmdjaGVja19zdGFsbGVkKSk7CkBAIC04MDcsMjEgKzgwNiw2IEBAIHN0YXRp YyB2b2lkIF9fZXJyX3ByaW50X3RvX3NnbChzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVm ICptLAogCQkJCQkJICAgIGVycm9yLT5lcG9jaCk7CiAJCX0KIAotCQlpZiAoSVNfRVJSKGVlLT53 YWl0ZXJzKSkgewotCQkJZXJyX3ByaW50ZihtLCAiJXMgLS0tID8gd2FpdGVycyBbdW5hYmxlIHRv IGFjcXVpcmUgc3BpbmxvY2tdXG4iLAotCQkJCSAgIG0tPmk5MTUtPmVuZ2luZVtpXS0+bmFtZSk7 Ci0JCX0gZWxzZSBpZiAoZWUtPm51bV93YWl0ZXJzKSB7Ci0JCQllcnJfcHJpbnRmKG0sICIlcyAt LS0gJWQgd2FpdGVyc1xuIiwKLQkJCQkgICBtLT5pOTE1LT5lbmdpbmVbaV0tPm5hbWUsCi0JCQkJ ICAgZWUtPm51bV93YWl0ZXJzKTsKLQkJCWZvciAoaiA9IDA7IGogPCBlZS0+bnVtX3dhaXRlcnM7 IGorKykgewotCQkJCWVycl9wcmludGYobSwgIiBzZXFubyAweCUwOHggZm9yICVzIFslZF1cbiIs Ci0JCQkJCSAgIGVlLT53YWl0ZXJzW2pdLnNlcW5vLAotCQkJCQkgICBlZS0+d2FpdGVyc1tqXS5j b21tLAotCQkJCQkgICBlZS0+d2FpdGVyc1tqXS5waWQpOwotCQkJfQotCQl9Ci0KIAkJcHJpbnRf ZXJyb3Jfb2JqKG0sIG0tPmk5MTUtPmVuZ2luZVtpXSwKIAkJCQkicmluZ2J1ZmZlciIsIGVlLT5y aW5nYnVmZmVyKTsKIApAQCAtMTAwMyw4ICs5ODcsNiBAQCB2b2lkIF9faTkxNV9ncHVfc3RhdGVf ZnJlZShzdHJ1Y3Qga3JlZiAqZXJyb3JfcmVmKQogCQlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVl LT53YV9jdHgpOwogCiAJCWtmcmVlKGVlLT5yZXF1ZXN0cyk7Ci0JCWlmICghSVNfRVJSX09SX05V TEwoZWUtPndhaXRlcnMpKQotCQkJa2ZyZWUoZWUtPndhaXRlcnMpOwogCX0KIAogCWZvciAoaSA9 IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yLT5hY3RpdmVfYm8pOyBpKyspCkBAIC0xMjExLDU5ICsx MTkzLDYgQEAgc3RhdGljIHZvaWQgZ2VuNl9yZWNvcmRfc2VtYXBob3JlX3N0YXRlKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCUk5MTVfUkVBRChSSU5HX1NZTkNfMihlbmdpbmUt Pm1taW9fYmFzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBlcnJvcl9yZWNvcmRfZW5naW5lX3dhaXRl cnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCQlzdHJ1Y3QgZHJtX2k5MTVf ZXJyb3JfZW5naW5lICplZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5n aW5lLT5icmVhZGNydW1iczsKLQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfd2FpdGVyICp3YWl0ZXI7 Ci0Jc3RydWN0IHJiX25vZGUgKnJiOwotCWludCBjb3VudDsKLQotCWVlLT5udW1fd2FpdGVycyA9 IDA7Ci0JZWUtPndhaXRlcnMgPSBOVUxMOwotCi0JaWYgKFJCX0VNUFRZX1JPT1QoJmItPndhaXRl cnMpKQotCQlyZXR1cm47Ci0KLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnEoJmItPnJiX2xvY2spKSB7 Ci0JCWVlLT53YWl0ZXJzID0gRVJSX1BUUigtRURFQURMSyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlj b3VudCA9IDA7Ci0JZm9yIChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmIgIT0gTlVMTDsg cmIgPSByYl9uZXh0KHJiKSkKLQkJY291bnQrKzsKLQlzcGluX3VubG9ja19pcnEoJmItPnJiX2xv Y2spOwotCi0Jd2FpdGVyID0gTlVMTDsKLQlpZiAoY291bnQpCi0JCXdhaXRlciA9IGttYWxsb2Nf YXJyYXkoY291bnQsCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfd2Fp dGVyKSwKLQkJCQkgICAgICAgR0ZQX0FUT01JQyk7Ci0JaWYgKCF3YWl0ZXIpCi0JCXJldHVybjsK LQotCWlmICghc3Bpbl90cnlsb2NrX2lycSgmYi0+cmJfbG9jaykpIHsKLQkJa2ZyZWUod2FpdGVy KTsKLQkJZWUtPndhaXRlcnMgPSBFUlJfUFRSKC1FREVBRExLKTsKLQkJcmV0dXJuOwotCX0KLQot CWVlLT53YWl0ZXJzID0gd2FpdGVyOwotCWZvciAocmIgPSByYl9maXJzdCgmYi0+d2FpdGVycyk7 IHJiOyByYiA9IHJiX25leHQocmIpKSB7Ci0JCXN0cnVjdCBpbnRlbF93YWl0ICp3ID0gcmJfZW50 cnkocmIsIHR5cGVvZigqdyksIG5vZGUpOwotCi0JCXN0cmNweSh3YWl0ZXItPmNvbW0sIHctPnRz ay0+Y29tbSk7Ci0JCXdhaXRlci0+cGlkID0gdy0+dHNrLT5waWQ7Ci0JCXdhaXRlci0+c2Vxbm8g PSB3LT5zZXFubzsKLQkJd2FpdGVyKys7Ci0KLQkJaWYgKCsrZWUtPm51bV93YWl0ZXJzID09IGNv dW50KQotCQkJYnJlYWs7Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmYi0+cmJfbG9jayk7Ci19Ci0K IHN0YXRpYyB2b2lkIGVycm9yX3JlY29yZF9lbmdpbmVfcmVnaXN0ZXJzKHN0cnVjdCBpOTE1X2dw dV9zdGF0ZSAqZXJyb3IsCiAJCQkJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAog CQkJCQkgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVlKQpAQCAtMTI5OSw3ICsxMjI4 LDYgQEAgc3RhdGljIHZvaWQgZXJyb3JfcmVjb3JkX2VuZ2luZV9yZWdpc3RlcnMoc3RydWN0IGk5 MTVfZ3B1X3N0YXRlICplcnJvciwKIAogCWludGVsX2VuZ2luZV9nZXRfaW5zdGRvbmUoZW5naW5l LCAmZWUtPmluc3Rkb25lKTsKIAotCWVlLT53YWl0aW5nID0gaW50ZWxfZW5naW5lX2hhc193YWl0 ZXIoZW5naW5lKTsKIAllZS0+aW5zdHBtID0gSTkxNV9SRUFEKFJJTkdfSU5TVFBNKGVuZ2luZS0+ bW1pb19iYXNlKSk7CiAJZWUtPmFjdGhkID0gaW50ZWxfZW5naW5lX2dldF9hY3RpdmVfaGVhZChl bmdpbmUpOwogCWVlLT5zZXFubyA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKQEAg LTE1NDksNyArMTQ3Nyw2IEBAIHN0YXRpYyB2b2lkIGdlbV9yZWNvcmRfcmluZ3Moc3RydWN0IGk5 MTVfZ3B1X3N0YXRlICplcnJvcikKIAkJZWUtPmVuZ2luZV9pZCA9IGk7CiAKIAkJZXJyb3JfcmVj b3JkX2VuZ2luZV9yZWdpc3RlcnMoZXJyb3IsIGVuZ2luZSwgZWUpOwotCQllcnJvcl9yZWNvcmRf ZW5naW5lX3dhaXRlcnMoZW5naW5lLCBlZSk7CiAJCWVycm9yX3JlY29yZF9lbmdpbmVfZXhlY2xp c3RzKGVuZ2luZSwgZWUpOwogCiAJCXJlcXVlc3QgPSBpOTE1X2dlbV9maW5kX2FjdGl2ZV9yZXF1 ZXN0KGVuZ2luZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9l cnJvci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaAppbmRleCA3MzM3 MjNlMWVhMDMuLmNiNmE2YWRkNTQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ncHVfZXJyb3IuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJv ci5oCkBAIC04Miw4ICs4Miw2IEBAIHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSB7CiAJCWludCBlbmdp bmVfaWQ7CiAJCS8qIFNvZnR3YXJlIHRyYWNrZWQgc3RhdGUgKi8KIAkJYm9vbCBpZGxlOwotCQli b29sIHdhaXRpbmc7Ci0JCWludCBudW1fd2FpdGVyczsKIAkJdW5zaWduZWQgbG9uZyBoYW5nY2hl Y2tfdGltZXN0YW1wOwogCQlib29sIGhhbmdjaGVja19zdGFsbGVkOwogCQllbnVtIGludGVsX2Vu Z2luZV9oYW5nY2hlY2tfYWN0aW9uIGhhbmdjaGVja19hY3Rpb247CkBAIC0xNjEsMTIgKzE1OSw2 IEBAIHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSB7CiAJCX0gKnJlcXVlc3RzLCBleGVjbGlzdFtFWEVD TElTVF9NQVhfUE9SVFNdOwogCQl1bnNpZ25lZCBpbnQgbnVtX3BvcnRzOwogCi0JCXN0cnVjdCBk cm1faTkxNV9lcnJvcl93YWl0ZXIgewotCQkJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwotCQkJ cGlkX3QgcGlkOwotCQkJdTMyIHNlcW5vOwotCQl9ICp3YWl0ZXJzOwotCiAJCXN0cnVjdCB7CiAJ CQl1MzIgZ2Z4X21vZGU7CiAJCQl1bmlvbiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCA0 NmM3NDJkNzE2MTAuLjllN2JiNTk3NzgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0y OCw5ICsyOCwxMCBAQAogCiAjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIg Zm10CiAKLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K ICNpbmNsdWRlIDxsaW51eC9jaXJjX2J1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNp bmNsdWRlIDxsaW51eC9zeXNycS5oPgorCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRl IDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1X2Rydi5oIgpAQCAtMTE1Miw2NyArMTE1 Myw2IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3Jwc19jaGFuZ2VfaXJxX2hhbmRsZXIoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQg bm90aWZ5X3Jpbmcoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCWNvbnN0IHUz MiBzZXFubyA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKLQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSA9IE5VTEw7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBOVUxMOwotCXN0 cnVjdCBpbnRlbF93YWl0ICp3YWl0OwotCi0JaWYgKHVubGlrZWx5KCFlbmdpbmUtPmJyZWFkY3J1 bWJzLmlycV9hcm1lZCkpCi0JCXJldHVybjsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXNwaW5f bG9jaygmZW5naW5lLT5icmVhZGNydW1icy5pcnFfbG9jayk7Ci0Jd2FpdCA9IGVuZ2luZS0+YnJl YWRjcnVtYnMuaXJxX3dhaXQ7Ci0JaWYgKHdhaXQpIHsKLQkJLyoKLQkJICogV2UgdXNlIGEgY2Fs bGJhY2sgZnJvbSB0aGUgZG1hLWZlbmNlIHRvIHN1Ym1pdAotCQkgKiByZXF1ZXN0cyBhZnRlciB3 YWl0aW5nIG9uIG91ciBvd24gcmVxdWVzdHMuIFRvCi0JCSAqIGVuc3VyZSBtaW5pbXVtIGRlbGF5 IGluIHF1ZXVpbmcgdGhlIG5leHQgcmVxdWVzdCB0bwotCQkgKiBoYXJkd2FyZSwgc2lnbmFsIHRo ZSBmZW5jZSBub3cgcmF0aGVyIHRoYW4gd2FpdCBmb3IKLQkJICogdGhlIHNpZ25hbGVyIHRvIGJl IHdva2VuIHVwLiBXZSBzdGlsbCB3YWtlIHVwIHRoZQotCQkgKiB3YWl0ZXIgaW4gb3JkZXIgdG8g aGFuZGxlIHRoZSBpcnEtc2Vxbm8gY29oZXJlbmN5Ci0JCSAqIGlzc3VlcyAod2UgbWF5IHJlY2Vp dmUgdGhlIGludGVycnVwdCBiZWZvcmUgdGhlCi0JCSAqIHNlcW5vIGlzIHdyaXR0ZW4sIHNlZSBf X2k5MTVfcmVxdWVzdF9pcnFfY29tcGxldGUoKSkKLQkJICogYW5kIHRvIGhhbmRsZSBjb2FsZXNj aW5nIG9mIG11bHRpcGxlIHNlcW5vIHVwZGF0ZXMKLQkJICogYW5kIG1hbnkgd2FpdGVycy4KLQkJ ICovCi0JCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgd2FpdC0+c2Vxbm8pKSB7Ci0JCQlz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICp3YWl0ZXIgPSB3YWl0LT5yZXF1ZXN0OwotCi0JCQlpZiAod2Fp dGVyICYmCi0JCQkgICAgIXRlc3RfYml0KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwKLQkJ CQkgICAgICAmd2FpdGVyLT5mZW5jZS5mbGFncykgJiYKLQkJCSAgICBpbnRlbF93YWl0X2NoZWNr X3JlcXVlc3Qod2FpdCwgd2FpdGVyKSkKLQkJCQlycSA9IGk5MTVfcmVxdWVzdF9nZXQod2FpdGVy KTsKLQotCQkJdHNrID0gd2FpdC0+dHNrOwotCQl9Ci0KLQkJZW5naW5lLT5icmVhZGNydW1icy5p cnFfY291bnQrKzsKLQl9IGVsc2UgewotCQlpZiAoZW5naW5lLT5icmVhZGNydW1icy5pcnFfYXJt ZWQpCi0JCQlfX2ludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRjcnVtYnMoZW5naW5lKTsKLQl9Ci0J c3Bpbl91bmxvY2soJmVuZ2luZS0+YnJlYWRjcnVtYnMuaXJxX2xvY2spOwotCi0JaWYgKHJxKSB7 Ci0JCXNwaW5fbG9jaygmcnEtPmxvY2spOwotCQlkbWFfZmVuY2Vfc2lnbmFsX2xvY2tlZCgmcnEt PmZlbmNlKTsKLQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpOwotCQlz cGluX3VubG9jaygmcnEtPmxvY2spOwotCi0JCWk5MTVfcmVxdWVzdF9wdXQocnEpOwotCX0KLQot CWlmICh0c2sgJiYgdHNrLT5zdGF0ZSAmIFRBU0tfTk9STUFMKQotCQl3YWtlX3VwX3Byb2Nlc3Mo dHNrKTsKLQotCXJjdV9yZWFkX3VubG9jaygpOwotfQotCiBzdGF0aWMgdm9pZCB2bHZfYzBfcmVh ZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJCQlzdHJ1Y3QgaW50ZWxfcnBz X2VpICplaSkKIHsKQEAgLTE0NTcsMjAgKzEzOTcsMjAgQEAgc3RhdGljIHZvaWQgaWxrX2d0X2ly cV9oYW5kbGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgICB1 MzIgZ3RfaWlyKQogewogCWlmIChndF9paXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpCi0J CW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbUkNTXSk7CisJCWludGVsX2VuZ2luZV9icmVh ZGNydW1ic19pcnEoZGV2X3ByaXYtPmVuZ2luZVtSQ1NdKTsKIAlpZiAoZ3RfaWlyICYgSUxLX0JT RF9VU0VSX0lOVEVSUlVQVCkKLQkJbm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsK KwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1ZDU10pOwog fQogCiBzdGF0aWMgdm9pZCBzbmJfZ3RfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAogCQkJICAgICAgIHUzMiBndF9paXIpCiB7CiAJaWYgKGd0X2lpciAmIEdU X1JFTkRFUl9VU0VSX0lOVEVSUlVQVCkKLQkJbm90aWZ5X3JpbmcoZGV2X3ByaXYtPmVuZ2luZVtS Q1NdKTsKKwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1JD U10pOwogCWlmIChndF9paXIgJiBHVF9CU0RfVVNFUl9JTlRFUlJVUFQpCi0JCW5vdGlmeV9yaW5n KGRldl9wcml2LT5lbmdpbmVbVkNTXSk7CisJCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEo ZGV2X3ByaXYtPmVuZ2luZVtWQ1NdKTsKIAlpZiAoZ3RfaWlyICYgR1RfQkxUX1VTRVJfSU5URVJS VVBUKQotCQlub3RpZnlfcmluZyhkZXZfcHJpdi0+ZW5naW5lW0JDU10pOworCQlpbnRlbF9lbmdp bmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbQkNTXSk7CiAKIAlpZiAoZ3RfaWly ICYgKEdUX0JMVF9DU19FUlJPUl9JTlRFUlJVUFQgfAogCQkgICAgICBHVF9CU0RfQ1NfRVJST1Jf SU5URVJSVVBUIHwKQEAgLTE0OTAsNyArMTQzMCw3IEBAIGdlbjhfY3NfaXJxX2hhbmRsZXIoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgaWlyKQogCQl0YXNrbGV0ID0gdHJ1ZTsK IAogCWlmIChpaXIgJiBHVF9SRU5ERVJfVVNFUl9JTlRFUlJVUFQpIHsKLQkJbm90aWZ5X3Jpbmco ZW5naW5lKTsKKwkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShlbmdpbmUpOwogCQl0YXNr bGV0IHw9IFVTRVNfR1VDX1NVQk1JU1NJT04oZW5naW5lLT5pOTE1KTsKIAl9CiAKQEAgLTE4MzYs NyArMTc3Niw3IEBAIHN0YXRpYyB2b2lkIGdlbjZfcnBzX2lycV9oYW5kbGVyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHBtX2lpcikKIAogCWlmIChIQVNfVkVCT1goZGV2 X3ByaXYpKSB7CiAJCWlmIChwbV9paXIgJiBQTV9WRUJPWF9VU0VSX0lOVEVSUlVQVCkKLQkJCW5v dGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbVkVDU10pOworCQkJaW50ZWxfZW5naW5lX2JyZWFk Y3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1ZFQ1NdKTsKIAogCQlpZiAocG1faWlyICYgUE1f VkVCT1hfQ1NfRVJST1JfSU5URVJSVVBUKQogCQkJRFJNX0RFQlVHKCJDb21tYW5kIHBhcnNlciBl cnJvciwgcG1faWlyIDB4JTA4eFxuIiwgcG1faWlyKTsKQEAgLTQyNjIsNyArNDIwMiw3IEBAIHN0 YXRpYyBpcnFyZXR1cm5fdCBpOHh4X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAkJ STkxNV9XUklURTE2KElJUiwgaWlyKTsKIAogCQlpZiAoaWlyICYgSTkxNV9VU0VSX0lOVEVSUlVQ VCkKLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbUkNTXSk7CisJCQlpbnRlbF9lbmdp bmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbUkNTXSk7CiAKIAkJaWYgKGlpciAm IEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCkKIAkJCWk4eHhfZXJyb3JfaXJxX2hhbmRsZXIo ZGV2X3ByaXYsIGVpciwgZWlyX3N0dWNrKTsKQEAgLTQzNzAsNyArNDMxMCw3IEBAIHN0YXRpYyBp cnFyZXR1cm5fdCBpOTE1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAkJSTkxNV9X UklURShJSVIsIGlpcik7CiAKIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCi0JCQlu b3RpZnlfcmluZyhkZXZfcHJpdi0+ZW5naW5lW1JDU10pOworCQkJaW50ZWxfZW5naW5lX2JyZWFk Y3J1bWJzX2lycShkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwogCiAJCWlmIChpaXIgJiBJOTE1X01B U1RFUl9FUlJPUl9JTlRFUlJVUFQpCiAJCQlpOXh4X2Vycm9yX2lycV9oYW5kbGVyKGRldl9wcml2 LCBlaXIsIGVpcl9zdHVjayk7CkBAIC00NTE1LDEwICs0NDU1LDEwIEBAIHN0YXRpYyBpcnFyZXR1 cm5fdCBpOTY1X2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKIAkJSTkxNV9XUklURShJ SVIsIGlpcik7CiAKIAkJaWYgKGlpciAmIEk5MTVfVVNFUl9JTlRFUlJVUFQpCi0JCQlub3RpZnlf cmluZyhkZXZfcHJpdi0+ZW5naW5lW1JDU10pOworCQkJaW50ZWxfZW5naW5lX2JyZWFkY3J1bWJz X2lycShkZXZfcHJpdi0+ZW5naW5lW1JDU10pOwogCiAJCWlmIChpaXIgJiBJOTE1X0JTRF9VU0VS X0lOVEVSUlVQVCkKLQkJCW5vdGlmeV9yaW5nKGRldl9wcml2LT5lbmdpbmVbVkNTXSk7CisJCQlp bnRlbF9lbmdpbmVfYnJlYWRjcnVtYnNfaXJxKGRldl9wcml2LT5lbmdpbmVbVkNTXSk7CiAKIAkJ aWYgKGlpciAmIEk5MTVfTUFTVEVSX0VSUk9SX0lOVEVSUlVQVCkKIAkJCWk5eHhfZXJyb3JfaXJx X2hhbmRsZXIoZGV2X3ByaXYsIGVpciwgZWlyX3N0dWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9y ZXF1ZXN0LmMKaW5kZXggOGU2MWExMThhZDJjLi45MGY4NGY2MDkwNzcgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVxdWVzdC5jCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBib29sIGk5MTVfZmVu Y2Vfc2lnbmFsZWQoc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UpCiAKIHN0YXRpYyBib29sIGk5MTVf ZmVuY2VfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSkKIHsKLQlyZXR1 cm4gaW50ZWxfZW5naW5lX2VuYWJsZV9zaWduYWxpbmcodG9fcmVxdWVzdChmZW5jZSksIHRydWUp OworCXJldHVybiBpbnRlbF9lbmdpbmVfZW5hYmxlX3NpZ25hbGluZyh0b19yZXF1ZXN0KGZlbmNl KSk7CiB9CiAKIHN0YXRpYyBzaWduZWQgbG9uZyBpOTE1X2ZlbmNlX3dhaXQoc3RydWN0IGRtYV9m ZW5jZSAqZmVuY2UsCkBAIC0zNzAsOSArMzcwLDExIEBAIHZvaWQgX19pOTE1X3JlcXVlc3Rfc3Vi bWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiAKIAkvKiBXZSBtYXkgYmUgcmVjdXJz aW5nIGZyb20gdGhlIHNpZ25hbCBjYWxsYmFjayBvZiBhbm90aGVyIGk5MTUgZmVuY2UgKi8KIAlz cGluX2xvY2tfbmVzdGVkKCZyZXF1ZXN0LT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJ c2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcmVxdWVzdC0+ZmVuY2UuZmxhZ3MpOwog CXJlcXVlc3QtPmdsb2JhbF9zZXFubyA9IHNlcW5vOwotCWlmICh0ZXN0X2JpdChETUFfRkVOQ0Vf RkxBR19FTkFCTEVfU0lHTkFMX0JJVCwgJnJlcXVlc3QtPmZlbmNlLmZsYWdzKSkKLQkJaW50ZWxf ZW5naW5lX2VuYWJsZV9zaWduYWxpbmcocmVxdWVzdCwgZmFsc2UpOworCWlmICh0ZXN0X2JpdChE TUFfRkVOQ0VfRkxBR19FTkFCTEVfU0lHTkFMX0JJVCwgJnJlcXVlc3QtPmZlbmNlLmZsYWdzKSAm JgorCSAgICAhaW50ZWxfZW5naW5lX2VuYWJsZV9zaWduYWxpbmcocmVxdWVzdCkpCisJCWludGVs X2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhlbmdpbmUpOwogCXNwaW5fdW5sb2NrKCZyZXF1ZXN0 LT5sb2NrKTsKIAogCWVuZ2luZS0+ZW1pdF9icmVhZGNydW1iKHJlcXVlc3QsCkBAIC0zODIsOCAr Mzg0LDYgQEAgdm9pZCBfX2k5MTVfcmVxdWVzdF9zdWJtaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAq cmVxdWVzdCkKIAltb3ZlX3RvX3RpbWVsaW5lKHJlcXVlc3QsICZlbmdpbmUtPnRpbWVsaW5lKTsK IAogCXRyYWNlX2k5MTVfcmVxdWVzdF9leGVjdXRlKHJlcXVlc3QpOwotCi0Jd2FrZV91cF9hbGwo JnJlcXVlc3QtPmV4ZWN1dGUpOwogfQogCiB2b2lkIGk5MTVfcmVxdWVzdF9zdWJtaXQoc3RydWN0 IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKQEAgLTQyNyw2ICs0MjcsNyBAQCB2b2lkIF9faTkxNV9y ZXF1ZXN0X3Vuc3VibWl0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiAJcmVxdWVzdC0+ Z2xvYmFsX3NlcW5vID0gMDsKIAlpZiAodGVzdF9iaXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJ R05BTF9CSVQsICZyZXF1ZXN0LT5mZW5jZS5mbGFncykpCiAJCWludGVsX2VuZ2luZV9jYW5jZWxf c2lnbmFsaW5nKHJlcXVlc3QpOworCWNsZWFyX2JpdChJOTE1X0ZFTkNFX0ZMQUdfQUNUSVZFLCAm cmVxdWVzdC0+ZmVuY2UuZmxhZ3MpOwogCXNwaW5fdW5sb2NrKCZyZXF1ZXN0LT5sb2NrKTsKIAog CS8qIFRyYW5zZmVyIGJhY2sgZnJvbSB0aGUgZ2xvYmFsIHBlci1lbmdpbmUgdGltZWxpbmUgdG8g cGVyLWNvbnRleHQgKi8KQEAgLTYwMiwxMyArNjAzLDExIEBAIGk5MTVfcmVxdWVzdF9hbGxvYyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHgpCiAKIAkvKiBXZSBidW1wIHRoZSByZWYgZm9yIHRoZSBmZW5jZSBjaGFpbiAqLwogCWk5MTVf c3dfZmVuY2VfaW5pdCgmaTkxNV9yZXF1ZXN0X2dldChycSktPnN1Ym1pdCwgc3VibWl0X25vdGlm eSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcnEtPmV4ZWN1dGUpOwogCiAJaTkxNV9zY2hlZF9u b2RlX2luaXQoJnJxLT5zY2hlZCk7CiAKIAkvKiBObyB6YWxsb2MsIG11c3QgY2xlYXIgd2hhdCB3 ZSBuZWVkIGJ5IGhhbmQgKi8KIAlycS0+Z2xvYmFsX3NlcW5vID0gMDsKLQlycS0+c2lnbmFsaW5n LndhaXQuc2Vxbm8gPSAwOwogCXJxLT5maWxlX3ByaXYgPSBOVUxMOwogCXJxLT5iYXRjaCA9IE5V TEw7CiAJcnEtPmNhcHR1cmVfbGlzdCA9IE5VTEw7CkBAIC05OTksMTMgKzk5OCwxMCBAQCBzdGF0 aWMgYm9vbCBidXN5d2FpdF9zdG9wKHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdW5zaWduZWQgaW50 IGNwdSkKIAlyZXR1cm4gdGhpc19jcHUgIT0gY3B1OwogfQogCi1zdGF0aWMgYm9vbCBfX2k5MTVf c3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAotCQkJCXUzMiBzZXFu bywgaW50IHN0YXRlLCB1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXMpCitzdGF0aWMgYm9vbCBfX2k5 MTVfc3Bpbl9yZXF1ZXN0KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCBycSwKKwkJ CQlpbnQgc3RhdGUsIHVuc2lnbmVkIGxvbmcgdGltZW91dF91cykKIHsKLQlzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUgPSBycS0+ZW5naW5lOwotCXVuc2lnbmVkIGludCBpcnEsIGNwdTsK LQotCUdFTV9CVUdfT04oIXNlcW5vKTsKKwl1bnNpZ25lZCBpbnQgY3B1OwogCiAJLyoKIAkgKiBP bmx5IHdhaXQgZm9yIHRoZSByZXF1ZXN0IGlmIHdlIGtub3cgaXQgaXMgbGlrZWx5IHRvIGNvbXBs ZXRlLgpAQCAtMTAxOCw3ICsxMDE0LDcgQEAgc3RhdGljIGJvb2wgX19pOTE1X3NwaW5fcmVxdWVz dChjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKIAkgKiBpdCBpcyBhIGZhaXIgYXNzdW1w dGlvbiB0aGF0IGl0IHdpbGwgbm90IGNvbXBsZXRlIHdpdGhpbiBvdXIKIAkgKiByZWxhdGl2ZWx5 IHNob3J0IHRpbWVvdXQuCiAJICovCi0JaWYgKCFpbnRlbF9lbmdpbmVfaGFzX3N0YXJ0ZWQoZW5n aW5lLCBzZXFubykpCisJaWYgKCFpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkpCiAJCXJldHVybiBm YWxzZTsKIAogCS8qCkBAIC0xMDMyLDIwICsxMDI4LDEwIEBAIHN0YXRpYyBib29sIF9faTkxNV9z cGluX3JlcXVlc3QoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJICogdGFrZXMgdG8g c2xlZXAgb24gYSByZXF1ZXN0LCBvbiB0aGUgb3JkZXIgb2YgYSBtaWNyb3NlY29uZC4KIAkgKi8K IAotCWlycSA9IFJFQURfT05DRShlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9jb3VudCk7CiAJdGlt ZW91dF91cyArPSBsb2NhbF9jbG9ja191cygmY3B1KTsKIAlkbyB7Ci0JCWlmIChpbnRlbF9lbmdp bmVfaGFzX2NvbXBsZXRlZChlbmdpbmUsIHNlcW5vKSkKLQkJCXJldHVybiBzZXFubyA9PSBpOTE1 X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJxKTsKLQotCQkvKgotCQkgKiBTZXFubyBhcmUgbWVhbnQg dG8gYmUgb3JkZXJlZCAqYmVmb3JlKiB0aGUgaW50ZXJydXB0LiBJZgotCQkgKiB3ZSBzZWUgYW4g aW50ZXJydXB0IHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIHNlcW5vIGFkdmFuY2UsCi0JCSAqIGFz c3VtZSB3ZSB3b24ndCBzZWUgb25lIGluIHRoZSBuZWFyIGZ1dHVyZSBidXQgcmVxdWlyZQotCQkg KiB0aGUgZW5naW5lLT5zZXFub19iYXJyaWVyKCkgdG8gZml4dXAgY29oZXJlbmN5LgotCQkgKi8K LQkJaWYgKFJFQURfT05DRShlbmdpbmUtPmJyZWFkY3J1bWJzLmlycV9jb3VudCkgIT0gaXJxKQot CQkJYnJlYWs7CisJCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKKwkJCXJldHVybiB0 cnVlOwogCiAJCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkpCiAJCQli cmVhazsKQEAgLTEwNTksNiArMTA0NSwxOCBAQCBzdGF0aWMgYm9vbCBfX2k5MTVfc3Bpbl9yZXF1 ZXN0KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAogCXJldHVybiBmYWxzZTsKIH0KIAor c3RydWN0IHJlcXVlc3Rfd2FpdCB7CisJc3RydWN0IGRtYV9mZW5jZV9jYiBjYjsKKwlzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnRzazsKK307CisKK3N0YXRpYyB2b2lkIHJlcXVlc3Rfd2FpdF93YWtlKHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlLCBzdHJ1Y3QgZG1hX2ZlbmNlX2NiICpjYikKK3sKKwlzdHJ1 Y3QgcmVxdWVzdF93YWl0ICp3YWl0ID0gY29udGFpbmVyX29mKGNiLCB0eXBlb2YoKndhaXQpLCBj Yik7CisKKwl3YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dHNrKTsKK30KKwogLyoqCiAgKiBpOTE1X3Jl cXVlc3Rfd2FpdCAtIHdhaXQgdW50aWwgZXhlY3V0aW9uIG9mIHJlcXVlc3QgaGFzIGZpbmlzaGVk CiAgKiBAcnE6IHRoZSByZXF1ZXN0IHRvIHdhaXQgdXBvbgpAQCAtMTA4NCw4ICsxMDgyLDcgQEAg bG9uZyBpOTE1X3JlcXVlc3Rfd2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKIHsKIAljb25z dCBpbnQgc3RhdGUgPSBmbGFncyAmIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFID8KIAkJVEFTS19J TlRFUlJVUFRJQkxFIDogVEFTS19VTklOVEVSUlVQVElCTEU7Ci0JREVGSU5FX1dBSVRfRlVOQyhl eGVjLCBkZWZhdWx0X3dha2VfZnVuY3Rpb24pOwotCXN0cnVjdCBpbnRlbF93YWl0IHdhaXQ7CisJ c3RydWN0IHJlcXVlc3Rfd2FpdCB3YWl0OwogCiAJbWlnaHRfc2xlZXAoKTsKIAlHRU1fQlVHX09O KHRpbWVvdXQgPCAwKTsKQEAgLTEwOTcsNDcgKzEwOTQsMjQgQEAgbG9uZyBpOTE1X3JlcXVlc3Rf d2FpdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwKIAkJcmV0dXJuIC1FVElNRTsKIAogCXRyYWNl X2k5MTVfcmVxdWVzdF93YWl0X2JlZ2luKHJxLCBmbGFncyk7Ci0JYWRkX3dhaXRfcXVldWUoJnJx LT5leGVjdXRlLCAmZXhlYyk7Ci0JaW50ZWxfd2FpdF9pbml0KCZ3YWl0KTsKLQlpZiAoZmxhZ3Mg JiBJOTE1X1dBSVRfUFJJT1JJVFkpCi0JCWk5MTVfc2NoZWR1bGVfYnVtcF9wcmlvcml0eShycSwg STkxNV9QUklPUklUWV9XQUlUKTsKLQotcmVzdGFydDoKLQlkbyB7Ci0JCXNldF9jdXJyZW50X3N0 YXRlKHN0YXRlKTsKLQkJaWYgKGludGVsX3dhaXRfdXBkYXRlX3JlcXVlc3QoJndhaXQsIHJxKSkK LQkJCWJyZWFrOwogCi0JCWlmIChzaWduYWxfcGVuZGluZ19zdGF0ZShzdGF0ZSwgY3VycmVudCkp IHsKLQkJCXRpbWVvdXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQlnb3RvIGNvbXBsZXRlOwotCQl9Ci0K LQkJaWYgKCF0aW1lb3V0KSB7Ci0JCQl0aW1lb3V0ID0gLUVUSU1FOwotCQkJZ290byBjb21wbGV0 ZTsKLQkJfQorCS8qIE9wdGltaXN0aWMgc2hvcnQgc3BpbiBiZWZvcmUgdG91Y2hpbmcgSVJRcyAq LworCWlmIChfX2k5MTVfc3Bpbl9yZXF1ZXN0KHJxLCBzdGF0ZSwgNSkpCisJCWdvdG8gb3V0Owog Ci0JCXRpbWVvdXQgPSBpb19zY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCX0gd2hpbGUgKDEp OworCWlmIChmbGFncyAmIEk5MTVfV0FJVF9QUklPUklUWSkKKwkJaTkxNV9zY2hlZHVsZV9idW1w X3ByaW9yaXR5KHJxLCBJOTE1X1BSSU9SSVRZX1dBSVQpOwogCi0JR0VNX0JVR19PTighaW50ZWxf d2FpdF9oYXNfc2Vxbm8oJndhaXQpKTsKLQlHRU1fQlVHX09OKCFpOTE1X3N3X2ZlbmNlX3NpZ25h bGVkKCZycS0+c3VibWl0KSk7CisJd2FpdC50c2sgPSBjdXJyZW50OworCWlmIChkbWFfZmVuY2Vf YWRkX2NhbGxiYWNrKCZycS0+ZmVuY2UsICZ3YWl0LmNiLCByZXF1ZXN0X3dhaXRfd2FrZSkpCisJ CWdvdG8gb3V0OwogCi0JLyogT3B0aW1pc3RpYyBzaG9ydCBzcGluIGJlZm9yZSB0b3VjaGluZyBJ UlFzICovCi0JaWYgKF9faTkxNV9zcGluX3JlcXVlc3QocnEsIHdhaXQuc2Vxbm8sIHN0YXRlLCA1 KSkKLQkJZ290byBjb21wbGV0ZTsKKwlmb3IgKDs7KSB7CisJCXNldF9jdXJyZW50X3N0YXRlKHN0 YXRlKTsKIAotCXNldF9jdXJyZW50X3N0YXRlKHN0YXRlKTsKLQlpZiAoaW50ZWxfZW5naW5lX2Fk ZF93YWl0KHJxLT5lbmdpbmUsICZ3YWl0KSkKLQkJLyoKLQkJICogSW4gb3JkZXIgdG8gY2hlY2sg dGhhdCB3ZSBoYXZlbid0IG1pc3NlZCB0aGUgaW50ZXJydXB0Ci0JCSAqIGFzIHdlIGVuYWJsZWQg aXQsIHdlIG5lZWQgdG8ga2ljayBvdXJzZWx2ZXMgdG8gZG8gYQotCQkgKiBjb2hlcmVudCBjaGVj ayBvbiB0aGUgc2Vxbm8gYmVmb3JlIHdlIHNsZWVwLgotCQkgKi8KLQkJZ290byB3YWtldXA7CisJ CWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKKwkJCWJyZWFrOwogCi0JZm9yICg7Oykg ewogCQlpZiAoc2lnbmFsX3BlbmRpbmdfc3RhdGUoc3RhdGUsIGN1cnJlbnQpKSB7CiAJCQl0aW1l b3V0ID0gLUVSRVNUQVJUU1lTOwogCQkJYnJlYWs7CkBAIC0xMTQ5LDMzICsxMTIzLDEzIEBAIGxv bmcgaTkxNV9yZXF1ZXN0X3dhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsCiAJCX0KIAogCQl0 aW1lb3V0ID0gaW9fc2NoZWR1bGVfdGltZW91dCh0aW1lb3V0KTsKLQotCQlpZiAoaW50ZWxfd2Fp dF9jb21wbGV0ZSgmd2FpdCkgJiYKLQkJICAgIGludGVsX3dhaXRfY2hlY2tfcmVxdWVzdCgmd2Fp dCwgcnEpKQotCQkJYnJlYWs7Ci0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoc3RhdGUpOwotCi13YWtl dXA6Ci0JCWlmIChpOTE1X3JlcXVlc3RfY29tcGxldGVkKHJxKSkKLQkJCWJyZWFrOwotCi0JCS8q IE9ubHkgc3BpbiBpZiB3ZSBrbm93IHRoZSBHUFUgaXMgcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3Qg Ki8KLQkJaWYgKF9faTkxNV9zcGluX3JlcXVlc3QocnEsIHdhaXQuc2Vxbm8sIHN0YXRlLCAyKSkK LQkJCWJyZWFrOwotCi0JCWlmICghaW50ZWxfd2FpdF9jaGVja19yZXF1ZXN0KCZ3YWl0LCBycSkp IHsKLQkJCWludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChycS0+ZW5naW5lLCAmd2FpdCk7Ci0JCQln b3RvIHJlc3RhcnQ7Ci0JCX0KIAl9Ci0KLQlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQocnEtPmVu Z2luZSwgJndhaXQpOwotY29tcGxldGU6CiAJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5J TkcpOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZycS0+ZXhlY3V0ZSwgJmV4ZWMpOwotCXRyYWNlX2k5 MTVfcmVxdWVzdF93YWl0X2VuZChycSk7CiAKKwlkbWFfZmVuY2VfcmVtb3ZlX2NhbGxiYWNrKCZy cS0+ZmVuY2UsICZ3YWl0LmNiKTsKKworb3V0OgorCXRyYWNlX2k5MTVfcmVxdWVzdF93YWl0X2Vu ZChycSk7CiAJcmV0dXJuIHRpbWVvdXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0 LmgKaW5kZXggMDg0ZDE3NGJhODNiLi5mNzc0MWEzNWYyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5oCkBAIC0zOCwyMyArMzgsMTYgQEAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3Q7CiBzdHJ1Y3QgaTkxNV9yZXF1ZXN0Owogc3RydWN0IGk5MTVfdGltZWxpbmU7CiAKLXN0cnVj dCBpbnRlbF93YWl0IHsKLQlzdHJ1Y3QgcmJfbm9kZSBub2RlOwotCXN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrOwotCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3Q7Ci0JdTMyIHNlcW5vOwotfTsK LQotc3RydWN0IGludGVsX3NpZ25hbF9ub2RlIHsKLQlzdHJ1Y3QgaW50ZWxfd2FpdCB3YWl0Owot CXN0cnVjdCBsaXN0X2hlYWQgbGluazsKLX07Ci0KIHN0cnVjdCBpOTE1X2NhcHR1cmVfbGlzdCB7 CiAJc3RydWN0IGk5MTVfY2FwdHVyZV9saXN0ICpuZXh0OwogCXN0cnVjdCBpOTE1X3ZtYSAqdm1h OwogfTsKIAorZW51bSB7CisJSTkxNV9GRU5DRV9GTEFHX0FDVElWRSA9IERNQV9GRU5DRV9GTEFH X1VTRVJfQklUUywKKwlJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLAorfTsKKwogLyoqCiAgKiBSZXF1 ZXN0IHF1ZXVlIHN0cnVjdHVyZS4KICAqCkBAIC05Nyw3ICs5MCw3IEBAIHN0cnVjdCBpOTE1X3Jl cXVlc3QgewogCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpod19jb250ZXh0OwogCXN0cnVjdCBpbnRl bF9yaW5nICpyaW5nOwogCXN0cnVjdCBpOTE1X3RpbWVsaW5lICp0aW1lbGluZTsKLQlzdHJ1Y3Qg aW50ZWxfc2lnbmFsX25vZGUgc2lnbmFsaW5nOworCXN0cnVjdCBsaXN0X2hlYWQgc2lnbmFsX2xp bms7CiAKIAkvKgogCSAqIFRoZSByY3UgZXBvY2ggb2Ygd2hlbiB0aGlzIHJlcXVlc3Qgd2FzIGFs bG9jYXRlZC4gVXNlZCB0byBqdWRpY2lvdXNseQpAQCAtMTE2LDcgKzEwOSw2IEBAIHN0cnVjdCBp OTE1X3JlcXVlc3QgewogCSAqLwogCXN0cnVjdCBpOTE1X3N3X2ZlbmNlIHN1Ym1pdDsKIAl3YWl0 X3F1ZXVlX2VudHJ5X3Qgc3VibWl0cTsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBleGVjdXRlOwogCiAJ LyoKIAkgKiBBIGxpc3Qgb2YgZXZlcnlvbmUgd2Ugd2FpdCB1cG9uLCBhbmQgZXZlcnlvbmUgd2hv IHdhaXRzIHVwb24gdXMuCkBAIC0yNTAsNyArMjQyLDcgQEAgaTkxNV9yZXF1ZXN0X3B1dChzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSkKICAqIHRoYXQgaXQgaGFzIHBhc3NlZCB0aGUgZ2xvYmFsIHNl cW5vIGFuZCB0aGUgZ2xvYmFsIHNlcW5vIGlzIHVuY2hhbmdlZAogICogYWZ0ZXIgdGhlIHJlYWQs IGl0IGlzIGluZGVlZCBjb21wbGV0ZSkuCiAgKi8KLXN0YXRpYyB1MzIKK3N0YXRpYyBpbmxpbmUg dTMyCiBpOTE1X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJlcXVlc3QpCiB7CiAJcmV0dXJuIFJFQURfT05DRShyZXF1ZXN0LT5nbG9iYWxfc2Vxbm8pOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jCmluZGV4IDg5ZDQ1NDBhZDVlNi4uNDg4MWFmODNkMzE1 IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3Jlc2V0LmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXNldC5jCkBAIC03NDcsMTggKzc0NywxOSBAQCBzdGF0 aWMgdm9pZCByZXNldF9yZXN0YXJ0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCiBz dGF0aWMgdm9pZCBub3Bfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCkKIHsKKwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSByZXF1ZXN0LT5lbmdpbmU7 CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUdFTV9UUkFDRSgiJXMgZmVuY2UgJWxseDolbGxk IC0+IC1FSU9cbiIsCi0JCSAgcmVxdWVzdC0+ZW5naW5lLT5uYW1lLAotCQkgIHJlcXVlc3QtPmZl bmNlLmNvbnRleHQsIHJlcXVlc3QtPmZlbmNlLnNlcW5vKTsKKwkJICBlbmdpbmUtPm5hbWUsIHJl cXVlc3QtPmZlbmNlLmNvbnRleHQsIHJlcXVlc3QtPmZlbmNlLnNlcW5vKTsKIAlkbWFfZmVuY2Vf c2V0X2Vycm9yKCZyZXF1ZXN0LT5mZW5jZSwgLUVJTyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgm cmVxdWVzdC0+ZW5naW5lLT50aW1lbGluZS5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNh dmUoJmVuZ2luZS0+dGltZWxpbmUubG9jaywgZmxhZ3MpOwogCV9faTkxNV9yZXF1ZXN0X3N1Ym1p dChyZXF1ZXN0KTsKIAlpOTE1X3JlcXVlc3RfZmFrZV9jb21wbGV0ZShyZXF1ZXN0KTsKLQlpbnRl bF9lbmdpbmVfd3JpdGVfZ2xvYmFsX3NlcW5vKHJlcXVlc3QtPmVuZ2luZSwgcmVxdWVzdC0+Z2xv YmFsX3NlcW5vKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZXF1ZXN0LT5lbmdpbmUtPnRp bWVsaW5lLmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPnRp bWVsaW5lLmxvY2ssIGZsYWdzKTsKKworCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhl bmdpbmUpOwogfQogCiB2b2lkIGk5MTVfZ2VtX3NldF93ZWRnZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmk5MTUpCkBAIC04MTMsNyArODE0LDcgQEAgdm9pZCBpOTE1X2dlbV9zZXRfd2VkZ2Vk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogCiAJZm9yX2VhY2hfZW5naW5lKGVuZ2lu ZSwgaTkxNSwgaWQpIHsKIAkJcmVzZXRfZmluaXNoX2VuZ2luZShlbmdpbmUpOwotCQlpbnRlbF9l bmdpbmVfd2FrZXVwKGVuZ2luZSk7CisJCWludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMo ZW5naW5lKTsKIAl9CiAKIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9icmVhZGNydW1icy5jCmluZGV4IDdiNTE3YmY4MzUwNy4uYmU5MjhiZDIwNGQz IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9icmVhZGNydW1icy5jCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2JyZWFkY3J1bWJzLmMKQEAgLTI5LDQ4ICsy OSwxMzUgQEAKIAogI2RlZmluZSB0YXNrX2FzbGVlcCh0c2spICgodHNrKS0+c3RhdGUgJiBUQVNL X05PUk1BTCAmJiAhKHRzayktPm9uX3JxKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW50ZWxf YnJlYWRjcnVtYnNfd2FrZXVwKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikKK3N0YXRpYyB2 b2lkIGlycV9lbmFibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQoreworCWlmICgh ZW5naW5lLT5pcnFfZW5hYmxlKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEZJWE1FOiBJZGVhbGx5 IHdlIHdhbnQgdGhpcyBvbiB0aGUgQVBJIGJvdW5kYXJ5LCBidXQgZm9yIHRoZQorCSAqIHNha2Ug b2YgdGVzdGluZyB3aXRoIG1vY2sgYnJlYWRjcnVtYnMgKG5vIEhXIHNvIHVuYWJsZSB0bworCSAq IGVuYWJsZSBpcnFzKSB3ZSBwbGFjZSBpdCBkZWVwIHdpdGhpbiB0aGUgYm93ZWxzLCBhdCB0aGUg cG9pbnQKKwkgKiBvZiBubyByZXR1cm4uCisJICovCisJR0VNX0JVR19PTighaW50ZWxfaXJxc19l bmFibGVkKGVuZ2luZS0+aTkxNSkpOworCisJLyogQ2FsbGVyIGRpc2FibGVzIGludGVycnVwdHMg Ki8KKwlzcGluX2xvY2soJmVuZ2luZS0+aTkxNS0+aXJxX2xvY2spOworCWVuZ2luZS0+aXJxX2Vu YWJsZShlbmdpbmUpOworCXNwaW5fdW5sb2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKK30K Kworc3RhdGljIHZvaWQgaXJxX2Rpc2FibGUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogewotCXN0cnVjdCBpbnRlbF93YWl0ICp3YWl0OwotCXVuc2lnbmVkIGludCByZXN1bHQgPSAw OworCWlmICghZW5naW5lLT5pcnFfZGlzYWJsZSkKKwkJcmV0dXJuOworCisJLyogQ2FsbGVyIGRp c2FibGVzIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2soJmVuZ2luZS0+aTkxNS0+aXJxX2xvY2sp OworCWVuZ2luZS0+aXJxX2Rpc2FibGUoZW5naW5lKTsKKwlzcGluX3VubG9jaygmZW5naW5lLT5p OTE1LT5pcnFfbG9jayk7Cit9CiAKK3N0YXRpYyB2b2lkIF9faW50ZWxfYnJlYWRjcnVtYnNfZGlz YXJtX2lycShzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIpCit7CiAJbG9ja2RlcF9hc3NlcnRf aGVsZCgmYi0+aXJxX2xvY2spOwogCi0Jd2FpdCA9IGItPmlycV93YWl0OwotCWlmICh3YWl0KSB7 Ci0JCS8qCi0JCSAqIE4uQi4gU2luY2UgdGFza19hc2xlZXAoKSBhbmQgdHR3dSBhcmUgbm90IGF0 b21pYywgdGhlCi0JCSAqIHdhaXRlciBtYXkgYWN0dWFsbHkgZ28gdG8gc2xlZXAgYWZ0ZXIgdGhl IGNoZWNrLCBjYXVzaW5nCi0JCSAqIHVzIHRvIHN1cHByZXNzIGEgdmFsaWQgd2FrZXVwLiBXZSBw cmVmZXIgdG8gcmVkdWNlIHRoZQotCQkgKiBudW1iZXIgb2YgZmFsc2UgcG9zaXRpdmUgbWlzc2Vk X2JyZWFkY3J1bWIoKSB3YXJuaW5ncwotCQkgKiBhdCB0aGUgZXhwZW5zZSBvZiBhIGZldyBmYWxz ZSBuZWdhdGl2ZXMsIGFzIGl0IGl0IGVhc3kKLQkJICogdG8gdHJpZ2dlciBhIGZhbHNlIHBvc2l0 aXZlIHVuZGVyIGhlYXZ5IGxvYWQuIEVub3VnaAotCQkgKiBzaWduYWwgc2hvdWxkIHJlbWFpbiBm cm9tIGdlbnVpbmUgbWlzc2VkX2JyZWFkY3J1bWIoKQotCQkgKiBmb3IgdXMgdG8gZGV0ZWN0IGlu IENJLgotCQkgKi8KLQkJYm9vbCB3YXNfYXNsZWVwID0gdGFza19hc2xlZXAod2FpdC0+dHNrKTsK LQotCQlyZXN1bHQgPSBFTkdJTkVfV0FLRVVQX1dBSVRFUjsKLQkJaWYgKHdha2VfdXBfcHJvY2Vz cyh3YWl0LT50c2spICYmIHdhc19hc2xlZXApCi0JCQlyZXN1bHQgfD0gRU5HSU5FX1dBS0VVUF9B U0xFRVA7Ci0JfQorCUdFTV9CVUdfT04oIWItPmlycV9lbmFibGVkKTsKKwlpZiAoIS0tYi0+aXJx X2VuYWJsZWQpCisJCWlycV9kaXNhYmxlKGNvbnRhaW5lcl9vZihiLAorCQkJCQkgc3RydWN0IGlu dGVsX2VuZ2luZV9jcywKKwkJCQkJIGJyZWFkY3J1bWJzKSk7CiAKLQlyZXR1cm4gcmVzdWx0Owor CWItPmlycV9hcm1lZCA9IGZhbHNlOwogfQogCi11bnNpZ25lZCBpbnQgaW50ZWxfZW5naW5lX3dh a2V1cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit2b2lkIGludGVsX2VuZ2luZV9k aXNhcm1fYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCXVuc2ln bmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHJlc3VsdDsKIAotCXNwaW5fbG9ja19pcnFz YXZlKCZiLT5pcnFfbG9jaywgZmxhZ3MpOwotCXJlc3VsdCA9IF9faW50ZWxfYnJlYWRjcnVtYnNf d2FrZXVwKGIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmItPmlycV9sb2NrLCBmbGFncyk7 CisJaWYgKCFiLT5pcnFfYXJtZWQpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnEoJmItPmly cV9sb2NrKTsKKwlpZiAoYi0+aXJxX2FybWVkKQorCQlfX2ludGVsX2JyZWFkY3J1bWJzX2Rpc2Fy bV9pcnEoYik7CisJc3Bpbl91bmxvY2tfaXJxKCZiLT5pcnFfbG9jayk7Cit9CisKK2Jvb2wgaW50 ZWxfZW5naW5lX2JyZWFkY3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUp Cit7CisJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7 CisJc3RydWN0IGludGVsX2NvbnRleHQgKmNlLCAqY247CisJc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsICpybjsKKwlMSVNUX0hFQUQoc2lnbmFsKTsKKworCXNwaW5fbG9jaygmYi0+aXJxX2xvY2sp OworCisJYi0+aXJxX2ZpcmVkID0gdHJ1ZTsKKwlpZiAoYi0+aXJxX2FybWVkICYmIGxpc3RfZW1w dHkoJmItPnNpZ25hbGVycykpCisJCV9faW50ZWxfYnJlYWRjcnVtYnNfZGlzYXJtX2lycShiKTsK KworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjZSwgY24sICZiLT5zaWduYWxlcnMsIHNpZ25h bF9saW5rKSB7CisJCUdFTV9CVUdfT04obGlzdF9lbXB0eSgmY2UtPnNpZ25hbHMpKTsKKworCQls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnEsIHJuLCAmY2UtPnNpZ25hbHMsIHNpZ25hbF9saW5r KSB7CisJCQlpZiAoIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQorCQkJCWJyZWFrOworCisJ CQlHRU1fQlVHX09OKCF0ZXN0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLAorCQkJCQkgICAg ICZycS0+ZmVuY2UuZmxhZ3MpKTsKKwkJCWNsZWFyX2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFM LCAmcnEtPmZlbmNlLmZsYWdzKTsKKworCQkJaWYgKHRlc3RfYml0KERNQV9GRU5DRV9GTEFHX1NJ R05BTEVEX0JJVCwKKwkJCQkgICAgICZycS0+ZmVuY2UuZmxhZ3MpKQorCQkJCWNvbnRpbnVlOwor CisJCQkvKgorCQkJICogUXVldWUgZm9yIGV4ZWN1dGlvbiBhZnRlciBkcm9wcGluZyB0aGUgc2ln bmFsaW5nCisJCQkgKiBzcGlubG9jayBhcyB0aGUgY2FsbGJhY2sgY2hhaW4gbWF5IGVuZCBhZGRp bmcKKwkJCSAqIG1vcmUgc2lnbmFsZXJzIHRvIHRoZSBzYW1lIGNvbnRleHQgb3IgZW5naW5lLgor CQkJICovCisJCQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKKwkJCWxpc3RfYWRkX3RhaWwoJnJxLT5z aWduYWxfbGluaywgJnNpZ25hbCk7CisJCX0KKworCQlpZiAoIWxpc3RfaXNfZmlyc3QoJnJxLT5z aWduYWxfbGluaywgJmNlLT5zaWduYWxzKSkgeworCQkJX19saXN0X2RlbF9tYW55KCZjZS0+c2ln bmFscywgJnJxLT5zaWduYWxfbGluayk7CisJCQlpZiAoJmNlLT5zaWduYWxzID09ICZycS0+c2ln bmFsX2xpbmspCisJCQkJbGlzdF9kZWxfaW5pdCgmY2UtPnNpZ25hbF9saW5rKTsKKwkJfQorCX0K KworCXNwaW5fdW5sb2NrKCZiLT5pcnFfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUocnEsIHJuLCAmc2lnbmFsLCBzaWduYWxfbGluaykgeworCQlkbWFfZmVuY2Vfc2lnbmFsKCZy cS0+ZmVuY2UpOworCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKKwl9CisKKwlyZXR1cm4gIWxpc3Rf ZW1wdHkoJnNpZ25hbCk7Cit9CisKK2Jvb2wgaW50ZWxfZW5naW5lX3NpZ25hbF9icmVhZGNydW1i cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJYm9vbCByZXN1bHQ7CisKKwls b2NhbF9pcnFfZGlzYWJsZSgpOworCXJlc3VsdCA9IGludGVsX2VuZ2luZV9icmVhZGNydW1ic19p cnEoZW5naW5lKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQog CitzdGF0aWMgdm9pZCBzaWduYWxfaXJxX3dvcmsoc3RydWN0IGlycV93b3JrICp3b3JrKQorewor CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCB0 eXBlb2YoKmVuZ2luZSksIGJyZWFkY3J1bWJzLmlycV93b3JrKTsKKworCWludGVsX2VuZ2luZV9i cmVhZGNydW1ic19pcnEoZW5naW5lKTsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2FpdF90 aW1lb3V0KHZvaWQpCiB7CiAJcmV0dXJuIHJvdW5kX2ppZmZpZXNfdXAoamlmZmllcyArIERSTV9J OTE1X0hBTkdDSEVDS19KSUZGSUVTKTsKQEAgLTk0LDE5ICsxODEsMTUgQEAgc3RhdGljIHZvaWQg aW50ZWxfYnJlYWRjcnVtYnNfaGFuZ2NoZWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9CiAJCWZyb21fdGltZXIoZW5naW5lLCB0LCBicmVh ZGNydW1icy5oYW5nY2hlY2spOwogCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdp bmUtPmJyZWFkY3J1bWJzOwotCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CiAKIAlpZiAoIWItPmly cV9hcm1lZCkKIAkJcmV0dXJuOwogCi0JaXJxX2NvdW50ID0gUkVBRF9PTkNFKGItPmlycV9jb3Vu dCk7Ci0JaWYgKGItPmhhbmdjaGVja19pbnRlcnJ1cHRzICE9IGlycV9jb3VudCkgewotCQliLT5o YW5nY2hlY2tfaW50ZXJydXB0cyA9IGlycV9jb3VudDsKLQkJbW9kX3RpbWVyKCZiLT5oYW5nY2hl Y2ssIHdhaXRfdGltZW91dCgpKTsKLQkJcmV0dXJuOwotCX0KKwlpZiAoYi0+aXJxX2ZpcmVkKQor CQlnb3RvIHJlYXJtOwogCi0JLyogV2Uga2VlcCB0aGUgaGFuZ2NoZWNrIHRpbWVyIGFsaXZlIHVu dGlsIHdlIGRpc2FybSB0aGUgaXJxLCBldmVuCisJLyoKKwkgKiBXZSBrZWVwIHRoZSBoYW5nY2hl Y2sgdGltZXIgYWxpdmUgdW50aWwgd2UgZGlzYXJtIHRoZSBpcnEsIGV2ZW4KIAkgKiBpZiB0aGVy ZSBhcmUgbm8gd2FpdGVycyBhdCBwcmVzZW50LgogCSAqCiAJICogSWYgdGhlIHdhaXRlciB3YXMg Y3VycmVudGx5IHJ1bm5pbmcsIGFzc3VtZSBpdCBoYXNuJ3QgaGFkIGEgY2hhbmNlCkBAIC0xMTgs MTAgKzIwMSwxMyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9icmVhZGNydW1ic19oYW5nY2hlY2soc3Ry dWN0IHRpbWVyX2xpc3QgKnQpCiAJICogYnV0IHdlIHN0aWxsIGhhdmUgYSB3YWl0ZXIuIEFzc3Vt aW5nIGFsbCBiYXRjaGVzIGNvbXBsZXRlIHdpdGhpbgogCSAqIERSTV9JOTE1X0hBTkdDSEVDS19K SUZGSUVTIFsxLjVzXSEKIAkgKi8KLQlpZiAoaW50ZWxfZW5naW5lX3dha2V1cChlbmdpbmUpICYg RU5HSU5FX1dBS0VVUF9BU0xFRVApIHsKKwlzeW5jaHJvbml6ZV9oYXJkaXJxKGVuZ2luZS0+aTkx NS0+ZHJtLmlycSk7CisJaWYgKGludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5naW5l KSkgewogCQltaXNzZWRfYnJlYWRjcnVtYihlbmdpbmUpOwogCQltb2RfdGltZXIoJmItPmZha2Vf aXJxLCBqaWZmaWVzICsgMSk7CiAJfSBlbHNlIHsKK3JlYXJtOgorCQliLT5pcnFfZmlyZWQgPSBm YWxzZTsKIAkJbW9kX3RpbWVyKCZiLT5oYW5nY2hlY2ssIHdhaXRfdGltZW91dCgpKTsKIAl9CiB9 CkBAIC0xNDAsMTEgKzIyNiw3IEBAIHN0YXRpYyB2b2lkIGludGVsX2JyZWFkY3J1bWJzX2Zha2Vf aXJxKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCSAqIG9sZGVzdCB3YWl0ZXIgdG8gZG8gdGhlIGNv aGVyZW50IHNlcW5vIGNoZWNrLgogCSAqLwogCi0Jc3Bpbl9sb2NrX2lycSgmYi0+aXJxX2xvY2sp OwotCWlmIChiLT5pcnFfYXJtZWQgJiYgIV9faW50ZWxfYnJlYWRjcnVtYnNfd2FrZXVwKGIpKQot CQlfX2ludGVsX2VuZ2luZV9kaXNhcm1fYnJlYWRjcnVtYnMoZW5naW5lKTsKLQlzcGluX3VubG9j a19pcnEoJmItPmlycV9sb2NrKTsKLQlpZiAoIWItPmlycV9hcm1lZCkKKwlpZiAoIWludGVsX2Vu Z2luZV9zaWduYWxfYnJlYWRjcnVtYnMoZW5naW5lKSAmJiAhYi0+aXJxX2FybWVkKQogCQlyZXR1 cm47CiAKIAkvKiBJZiB0aGUgdXNlciBoYXMgZGlzYWJsZWQgdGhlIGZha2UtaXJxLCByZXN0b3Jl IHRoZSBoYW5nY2hlY2tpbmcgKi8KQEAgLTE1Niw1MSArMjM4LDYgQEAgc3RhdGljIHZvaWQgaW50 ZWxfYnJlYWRjcnVtYnNfZmFrZV9pcnEoc3RydWN0IHRpbWVyX2xpc3QgKnQpCiAJbW9kX3RpbWVy KCZiLT5mYWtlX2lycSwgamlmZmllcyArIDEpOwogfQogCi1zdGF0aWMgdm9pZCBpcnFfZW5hYmxl KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlpZiAoIWVuZ2luZS0+aXJxX2Vu YWJsZSkKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBGSVhNRTogSWRlYWxseSB3ZSB3YW50IHRoaXMg b24gdGhlIEFQSSBib3VuZGFyeSwgYnV0IGZvciB0aGUKLQkgKiBzYWtlIG9mIHRlc3Rpbmcgd2l0 aCBtb2NrIGJyZWFkY3J1bWJzIChubyBIVyBzbyB1bmFibGUgdG8KLQkgKiBlbmFibGUgaXJxcykg d2UgcGxhY2UgaXQgZGVlcCB3aXRoaW4gdGhlIGJvd2VscywgYXQgdGhlIHBvaW50Ci0JICogb2Yg bm8gcmV0dXJuLgotCSAqLwotCUdFTV9CVUdfT04oIWludGVsX2lycXNfZW5hYmxlZChlbmdpbmUt Pmk5MTUpKTsKLQotCS8qIENhbGxlciBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCi0Jc3Bpbl9sb2Nr KCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKLQllbmdpbmUtPmlycV9lbmFibGUoZW5naW5lKTsK LQlzcGluX3VubG9jaygmZW5naW5lLT5pOTE1LT5pcnFfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lk IGlycV9kaXNhYmxlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlpZiAoIWVu Z2luZS0+aXJxX2Rpc2FibGUpCi0JCXJldHVybjsKLQotCS8qIENhbGxlciBkaXNhYmxlcyBpbnRl cnJ1cHRzICovCi0Jc3Bpbl9sb2NrKCZlbmdpbmUtPmk5MTUtPmlycV9sb2NrKTsKLQllbmdpbmUt PmlycV9kaXNhYmxlKGVuZ2luZSk7Ci0Jc3Bpbl91bmxvY2soJmVuZ2luZS0+aTkxNS0+aXJxX2xv Y2spOwotfQotCi12b2lkIF9faW50ZWxfZW5naW5lX2Rpc2FybV9icmVhZGNydW1icyhzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpi ID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZiLT5pcnFf bG9jayk7Ci0JR0VNX0JVR19PTihiLT5pcnFfd2FpdCk7Ci0JR0VNX0JVR19PTighYi0+aXJxX2Fy bWVkKTsKLQotCUdFTV9CVUdfT04oIWItPmlycV9lbmFibGVkKTsKLQlpZiAoIS0tYi0+aXJxX2Vu YWJsZWQpCi0JCWlycV9kaXNhYmxlKGVuZ2luZSk7Ci0KLQliLT5pcnFfYXJtZWQgPSBmYWxzZTsK LX0KLQogdm9pZCBpbnRlbF9lbmdpbmVfcGluX2JyZWFkY3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVu Z2luZS0+YnJlYWRjcnVtYnM7CkBAIC0yMjMsNDAgKzI2MCw2IEBAIHZvaWQgaW50ZWxfZW5naW5l X3VucGluX2JyZWFkY3J1bWJzX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJ c3Bpbl91bmxvY2tfaXJxKCZiLT5pcnFfbG9jayk7CiB9CiAKLXZvaWQgaW50ZWxfZW5naW5lX2Rp c2FybV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3Ry dWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Ci0Jc3RydWN0 IGludGVsX3dhaXQgKndhaXQsICpuOwotCi0JaWYgKCFiLT5pcnFfYXJtZWQpCi0JCXJldHVybjsK LQotCS8qCi0JICogV2Ugb25seSBkaXNhcm0gdGhlIGlycSB3aGVuIHdlIGFyZSBpZGxlIChhbGwg cmVxdWVzdHMgY29tcGxldGVkKSwKLQkgKiBzbyBpZiB0aGUgYm90dG9tLWhhbGYgcmVtYWlucyBh c2xlZXAsIGl0IG1pc3NlZCB0aGUgcmVxdWVzdAotCSAqIGNvbXBsZXRpb24uCi0JICovCi0JaWYg KGludGVsX2VuZ2luZV93YWtldXAoZW5naW5lKSAmIEVOR0lORV9XQUtFVVBfQVNMRUVQKQotCQlt aXNzZWRfYnJlYWRjcnVtYihlbmdpbmUpOwotCi0Jc3Bpbl9sb2NrX2lycSgmYi0+cmJfbG9jayk7 Ci0KLQlzcGluX2xvY2soJmItPmlycV9sb2NrKTsKLQliLT5pcnFfd2FpdCA9IE5VTEw7Ci0JaWYg KGItPmlycV9hcm1lZCkKLQkJX19pbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFkY3J1bWJzKGVuZ2lu ZSk7Ci0Jc3Bpbl91bmxvY2soJmItPmlycV9sb2NrKTsKLQotCXJidHJlZV9wb3N0b3JkZXJfZm9y X2VhY2hfZW50cnlfc2FmZSh3YWl0LCBuLCAmYi0+d2FpdGVycywgbm9kZSkgewotCQlHRU1fQlVH X09OKCFpbnRlbF9lbmdpbmVfc2lnbmFsZWQoZW5naW5lLCB3YWl0LT5zZXFubykpOwotCQlSQl9D TEVBUl9OT0RFKCZ3YWl0LT5ub2RlKTsKLQkJd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRzayk7Ci0J fQotCWItPndhaXRlcnMgPSBSQl9ST09UOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9sb2Nr KTsKLX0KLQogc3RhdGljIGJvb2wgdXNlX2Zha2VfaXJxKGNvbnN0IHN0cnVjdCBpbnRlbF9icmVh ZGNydW1icyAqYikKIHsKIAljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQpA QCAtMjcyLDcgKzI3NSw3IEBAIHN0YXRpYyBib29sIHVzZV9mYWtlX2lycShjb25zdCBzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIpCiAJICogZW5naW5lLT5zZXFub19iYXJyaWVyKCksIGEgdGlt aW5nIGVycm9yIHRoYXQgc2hvdWxkIGJlIHRyYW5zaWVudAogCSAqIGFuZCB1bmxpa2VseSB0byBy ZW9jY3VyLgogCSAqLwotCXJldHVybiBSRUFEX09OQ0UoYi0+aXJxX2NvdW50KSA9PSBiLT5oYW5n Y2hlY2tfaW50ZXJydXB0czsKKwlyZXR1cm4gIWItPmlycV9maXJlZDsKIH0KIAogc3RhdGljIHZv aWQgZW5hYmxlX2Zha2VfaXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikKQEAgLTI4NCw3 ICsyODcsNyBAQCBzdGF0aWMgdm9pZCBlbmFibGVfZmFrZV9pcnEoc3RydWN0IGludGVsX2JyZWFk Y3J1bWJzICpiKQogCQltb2RfdGltZXIoJmItPmhhbmdjaGVjaywgd2FpdF90aW1lb3V0KCkpOwog fQogCi1zdGF0aWMgYm9vbCBfX2ludGVsX2JyZWFkY3J1bWJzX2VuYWJsZV9pcnEoc3RydWN0IGlu dGVsX2JyZWFkY3J1bWJzICpiKQorc3RhdGljIGJvb2wgX19pbnRlbF9icmVhZGNydW1ic19hcm1f aXJxKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYikKIHsKIAlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUgPQogCQljb250YWluZXJfb2YoYiwgc3RydWN0IGludGVsX2VuZ2luZV9jcywg YnJlYWRjcnVtYnMpOwpAQCAtMzIzLDUzNyArMzI2LDEzMiBAQCBzdGF0aWMgYm9vbCBfX2ludGVs X2JyZWFkY3J1bWJzX2VuYWJsZV9pcnEoc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiKQogCXJl dHVybiBlbmFibGVkOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF93YWl0ICp0b193 YWl0KHN0cnVjdCByYl9ub2RlICpub2RlKQordm9pZCBpbnRlbF9lbmdpbmVfaW5pdF9icmVhZGNy dW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7Ci0JcmV0dXJuIHJiX2VudHJ5 KG5vZGUsIHN0cnVjdCBpbnRlbF93YWl0LCBub2RlKTsKLX0KKwlzdHJ1Y3QgaW50ZWxfYnJlYWRj cnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKIAotc3RhdGljIGlubGluZSB2b2lkIF9f aW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKHN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiwKLQkJ CQkJICAgICAgc3RydWN0IGludGVsX3dhaXQgKndhaXQpCi17Ci0JbG9ja2RlcF9hc3NlcnRfaGVs ZCgmYi0+cmJfbG9jayk7Ci0JR0VNX0JVR19PTihiLT5pcnFfd2FpdCA9PSB3YWl0KTsKKwlzcGlu X2xvY2tfaW5pdCgmYi0+aXJxX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZiLT5zaWduYWxlcnMp OwogCi0JLyoKLQkgKiBUaGlzIHJlcXVlc3QgaXMgY29tcGxldGVkLCBzbyByZW1vdmUgaXQgZnJv bSB0aGUgdHJlZSwgbWFyayBpdCBhcwotCSAqIGNvbXBsZXRlLCBhbmQgKnRoZW4qIHdha2UgdXAg dGhlIGFzc29jaWF0ZWQgdGFzay4gTi5CLiB3aGVuIHRoZQotCSAqIHRhc2sgd2FrZXMgdXAsIGl0 IHdpbGwgZmluZCB0aGUgZW1wdHkgcmJfbm9kZSwgZGlzY2VybiB0aGF0IGl0Ci0JICogaGFzIGFs cmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHRyZWUgYW5kIHNraXAgdGhlIHNlcmlhbGlzYXRp b24KLQkgKiBvZiB0aGUgYi0+cmJfbG9jayBhbmQgYi0+aXJxX2xvY2suIFRoaXMgbWVhbnMgdGhh dCB0aGUgZGVzdHJ1Y3Rpb24KLQkgKiBvZiB0aGUgaW50ZWxfd2FpdCBpcyBub3Qgc2VyaWFsaXNl ZCB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcgotCSAqIGJ5IHRoZSB3YWl0ZXIgLSBpdCBtdXN0 IGluc3RlYWQgYmUgc2VyaWFsaXNlZCBieSB0aGUgY2FsbGVyLgotCSAqLwotCXJiX2VyYXNlKCZ3 YWl0LT5ub2RlLCAmYi0+d2FpdGVycyk7Ci0JUkJfQ0xFQVJfTk9ERSgmd2FpdC0+bm9kZSk7CisJ aW5pdF9pcnFfd29yaygmYi0+aXJxX3dvcmssIHNpZ25hbF9pcnFfd29yayk7CiAKLQlpZiAod2Fp dC0+dHNrLT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCi0JCXdha2VfdXBfcHJvY2Vzcyh3YWl0LT50 c2spOyAvKiBpbXBsaWNpdCBzbXBfd21iKCkgKi8KKwl0aW1lcl9zZXR1cCgmYi0+ZmFrZV9pcnEs IGludGVsX2JyZWFkY3J1bWJzX2Zha2VfaXJxLCAwKTsKKwl0aW1lcl9zZXR1cCgmYi0+aGFuZ2No ZWNrLCBpbnRlbF9icmVhZGNydW1ic19oYW5nY2hlY2ssIDApOwogfQogCi1zdGF0aWMgaW5saW5l IHZvaWQgX19pbnRlbF9icmVhZGNydW1ic19uZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwKLQkJCQkJICAgIHN0cnVjdCByYl9ub2RlICpuZXh0KQorc3RhdGljIHZvaWQgY2FuY2Vs X2Zha2VfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKIHsKIAlzdHJ1Y3QgaW50 ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKIAotCXNwaW5fbG9jaygm Yi0+aXJxX2xvY2spOwotCUdFTV9CVUdfT04oIWItPmlycV9hcm1lZCk7Ci0JR0VNX0JVR19PTigh Yi0+aXJxX3dhaXQpOwotCWItPmlycV93YWl0ID0gdG9fd2FpdChuZXh0KTsKLQlzcGluX3VubG9j aygmYi0+aXJxX2xvY2spOwotCi0JLyogV2UgYWx3YXlzIHdha2UgdXAgdGhlIG5leHQgd2FpdGVy IHRoYXQgdGFrZXMgb3ZlciBhcyB0aGUgYm90dG9tLWhhbGYKLQkgKiBhcyB3ZSBtYXkgZGVsZWdh dGUgbm90IG9ubHkgdGhlIGlycS1zZXFubyBiYXJyaWVyIHRvIHRoZSBuZXh0IHdhaXRlcgotCSAq IGJ1dCBhbHNvIHRoZSB0YXNrIG9mIHdha2luZyB1cCBjb25jdXJyZW50IHdhaXRlcnMuCi0JICov Ci0JaWYgKG5leHQpCi0JCXdha2VfdXBfcHJvY2Vzcyh0b193YWl0KG5leHQpLT50c2spOworCWRl bF90aW1lcl9zeW5jKCZiLT5mYWtlX2lycSk7IC8qIG1heSBxdWV1ZSBiLT5oYW5nY2hlY2sgKi8K KwlkZWxfdGltZXJfc3luYygmYi0+aGFuZ2NoZWNrKTsKKwljbGVhcl9iaXQoZW5naW5lLT5pZCwg JmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9yLm1pc3NlZF9pcnFfcmluZ3MpOwogfQogCi1zdGF0aWMg Ym9vbCBfX2ludGVsX2VuZ2luZV9hZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCi0JCQkJICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQordm9pZCBpbnRlbF9lbmdpbmVf cmVzZXRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCXN0 cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCXN0cnVj dCByYl9ub2RlICoqcCwgKnBhcmVudCwgKmNvbXBsZXRlZDsKLQlib29sIGZpcnN0LCBhcm1lZDsK LQl1MzIgc2Vxbm87CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUdFTV9CVUdfT04oIXdhaXQt PnNlcW5vKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYi0+aXJxX2xvY2ssIGZsYWdzKTsKIAotCS8q IEluc2VydCB0aGUgcmVxdWVzdCBpbnRvIHRoZSByZXRpcmVtZW50IG9yZGVyZWQgbGlzdAotCSAq IG9mIHdhaXRlcnMgYnkgd2Fsa2luZyB0aGUgcmJ0cmVlLiBJZiB3ZSBhcmUgdGhlIG9sZGVzdAot CSAqIHNlcW5vIGluIHRoZSB0cmVlICh0aGUgZmlyc3QgdG8gYmUgcmV0aXJlZCksIHRoZW4KLQkg KiBzZXQgb3Vyc2VsdmVzIGFzIHRoZSBib3R0b20taGFsZi4KLQkgKgotCSAqIEFzIHdlIGRlc2Nl bmQgdGhlIHRyZWUsIHBydW5lIGNvbXBsZXRlZCBicmFuY2hlcyBzaW5jZSB3ZSBob2xkIHRoZQot CSAqIHNwaW5sb2NrIHdlIGtub3cgdGhhdCB0aGUgZmlyc3Rfd2FpdGVyIG11c3QgYmUgZGVsYXll ZCBhbmQgY2FuCi0JICogcmVkdWNlIHNvbWUgb2YgdGhlIHNlcXVlbnRpYWwgd2FrZSB1cCBsYXRl bmN5IGlmIHdlIHRha2UgYWN0aW9uCi0JICogb3Vyc2VsdmVzIGFuZCB3YWtlIHVwIHRoZSBjb21w bGV0ZWQgdGFza3MgaW4gcGFyYWxsZWwuIEFsc28sIGJ5Ci0JICogcmVtb3Zpbmcgc3RhbGUgZWxl bWVudHMgaW4gdGhlIHRyZWUsIHdlIG1heSBiZSBhYmxlIHRvIHJlZHVjZSB0aGUKLQkgKiBwaW5n LXBvbmcgYmV0d2VlbiB0aGUgb2xkIGJvdHRvbS1oYWxmIGFuZCBvdXJzZWx2ZXMgYXMgZmlyc3Qt d2FpdGVyLgorCS8qCisJICogTGVhdmUgdGhlIGZha2VfaXJxIHRpbWVyIGVuYWJsZWQgKGlmIGl0 IGlzIHJ1bm5pbmcpLCBidXQgY2xlYXIgdGhlCisJICogYml0IHNvIHRoYXQgaXQgdHVybnMgaXRz ZWxmIG9mZiBvbiBpdHMgbmV4dCB3YWtlIHVwIGFuZCBnb2VzIGJhY2sKKwkgKiB0byB0aGUgbG9u ZyBoYW5nY2hlY2sgaW50ZXJ2YWwgaWYgc3RpbGwgcmVxdWlyZWQuCiAJICovCi0JYXJtZWQgPSBm YWxzZTsKLQlmaXJzdCA9IHRydWU7Ci0JcGFyZW50ID0gTlVMTDsKLQljb21wbGV0ZWQgPSBOVUxM OwotCXNlcW5vID0gaW50ZWxfZW5naW5lX2dldF9zZXFubyhlbmdpbmUpOwotCi0JIC8qIElmIHRo ZSByZXF1ZXN0IGNvbXBsZXRlZCBiZWZvcmUgd2UgbWFuYWdlZCB0byBncmFiIHRoZSBzcGlubG9j aywKLQkgICogcmV0dXJuIG5vdyBiZWZvcmUgYWRkaW5nIG91cnNlbHZlcyB0byB0aGUgcmJ0cmVl LiBXZSBsZXQgdGhlCi0JICAqIGN1cnJlbnQgYm90dG9tLWhhbGYgaGFuZGxlIGFueSBwZW5kaW5n IHdha2V1cHMgYW5kIGluc3RlYWQKLQkgICogdHJ5IGFuZCBnZXQgb3V0IG9mIHRoZSB3YXkgcXVp Y2tseS4KLQkgICovCi0JaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCB3YWl0LT5zZXFubykp IHsKLQkJUkJfQ0xFQVJfTk9ERSgmd2FpdC0+bm9kZSk7Ci0JCXJldHVybiBmaXJzdDsKLQl9Ci0K LQlwID0gJmItPndhaXRlcnMucmJfbm9kZTsKLQl3aGlsZSAoKnApIHsKLQkJcGFyZW50ID0gKnA7 Ci0JCWlmICh3YWl0LT5zZXFubyA9PSB0b193YWl0KHBhcmVudCktPnNlcW5vKSB7Ci0JCQkvKiBX ZSBoYXZlIG11bHRpcGxlIHdhaXRlcnMgb24gdGhlIHNhbWUgc2Vxbm8sIHNlbGVjdAotCQkJICog dGhlIGhpZ2hlc3QgcHJpb3JpdHkgdGFzayAodGhhdCB3aXRoIHRoZSBzbWFsbGVzdAotCQkJICog dGFzay0+cHJpbykgdG8gc2VydmUgYXMgdGhlIGJvdHRvbS1oYWxmIGZvciB0aGlzCi0JCQkgKiBn cm91cC4KLQkJCSAqLwotCQkJaWYgKHdhaXQtPnRzay0+cHJpbyA+IHRvX3dhaXQocGFyZW50KS0+ dHNrLT5wcmlvKSB7Ci0JCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0OwotCQkJCWZpcnN0ID0gZmFs c2U7Ci0JCQl9IGVsc2UgewotCQkJCXAgPSAmcGFyZW50LT5yYl9sZWZ0OwotCQkJfQotCQl9IGVs c2UgaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHdhaXQtPnNlcW5vLAotCQkJCQkgICAgIHRvX3dhaXQo cGFyZW50KS0+c2Vxbm8pKSB7Ci0JCQlwID0gJnBhcmVudC0+cmJfcmlnaHQ7Ci0JCQlpZiAoaTkx NV9zZXFub19wYXNzZWQoc2Vxbm8sIHRvX3dhaXQocGFyZW50KS0+c2Vxbm8pKQotCQkJCWNvbXBs ZXRlZCA9IHBhcmVudDsKLQkJCWVsc2UKLQkJCQlmaXJzdCA9IGZhbHNlOwotCQl9IGVsc2Ugewot CQkJcCA9ICZwYXJlbnQtPnJiX2xlZnQ7Ci0JCX0KLQl9Ci0JcmJfbGlua19ub2RlKCZ3YWl0LT5u b2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmd2FpdC0+bm9kZSwgJmItPndhaXRl cnMpOwotCi0JaWYgKGZpcnN0KSB7Ci0JCXNwaW5fbG9jaygmYi0+aXJxX2xvY2spOwotCQliLT5p cnFfd2FpdCA9IHdhaXQ7Ci0JCS8qIEFmdGVyIGFzc2lnbmluZyBvdXJzZWx2ZXMgYXMgdGhlIG5l dyBib3R0b20taGFsZiwgd2UgbXVzdAotCQkgKiBwZXJmb3JtIGEgY3Vyc29yeSBjaGVjayB0byBw cmV2ZW50IGEgbWlzc2VkIGludGVycnVwdC4KLQkJICogRWl0aGVyIHdlIG1pc3MgdGhlIGludGVy cnVwdCB3aGlsc3QgcHJvZ3JhbW1pbmcgdGhlIGhhcmR3YXJlLAotCQkgKiBvciBpZiB0aGVyZSB3 YXMgYSBwcmV2aW91cyB3YWl0ZXIgKGZvciBhIGxhdGVyIHNlcW5vKSB0aGV5Ci0JCSAqIG1heSBi ZSB3b2tlbiBpbnN0ZWFkIG9mIHVzIChkdWUgdG8gdGhlIGluaGVyZW50IHJhY2UKLQkJICogaW4g dGhlIHVubG9ja2VkIHJlYWQgb2YgYi0+aXJxX3NlcW5vX2JoIGluIHRoZSBpcnEgaGFuZGxlcikK LQkJICogYW5kIHNvIHdlIG1pc3MgdGhlIHdha2UgdXAuCi0JCSAqLwotCQlhcm1lZCA9IF9faW50 ZWxfYnJlYWRjcnVtYnNfZW5hYmxlX2lycShiKTsKLQkJc3Bpbl91bmxvY2soJmItPmlycV9sb2Nr KTsKLQl9Ci0KLQlpZiAoY29tcGxldGVkKSB7Ci0JCS8qIEFkdmFuY2UgdGhlIGJvdHRvbS1oYWxm IChiLT5pcnFfd2FpdCkgYmVmb3JlIHdlIHdha2UgdXAKLQkJICogdGhlIHdhaXRlcnMgd2hvIG1h eSBzY3JpYmJsZSBvdmVyIHRoZWlyIGludGVsX3dhaXQKLQkJICoganVzdCBhcyB0aGUgaW50ZXJy dXB0IGhhbmRsZXIgaXMgZGVyZWZlcmVuY2luZyBpdCB2aWEKLQkJICogYi0+aXJxX3dhaXQuCi0J CSAqLwotCQlpZiAoIWZpcnN0KSB7Ci0JCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQo Y29tcGxldGVkKTsKLQkJCUdFTV9CVUdfT04obmV4dCA9PSAmd2FpdC0+bm9kZSk7Ci0JCQlfX2lu dGVsX2JyZWFkY3J1bWJzX25leHQoZW5naW5lLCBuZXh0KTsKLQkJfQotCi0JCWRvIHsKLQkJCXN0 cnVjdCBpbnRlbF93YWl0ICpjcnVtYiA9IHRvX3dhaXQoY29tcGxldGVkKTsKLQkJCWNvbXBsZXRl ZCA9IHJiX3ByZXYoY29tcGxldGVkKTsKLQkJCV9faW50ZWxfYnJlYWRjcnVtYnNfZmluaXNoKGIs IGNydW1iKTsKLQkJfSB3aGlsZSAoY29tcGxldGVkKTsKLQl9Ci0KLQlHRU1fQlVHX09OKCFiLT5p cnFfd2FpdCk7Ci0JR0VNX0JVR19PTighYi0+aXJxX2FybWVkKTsKLQlHRU1fQlVHX09OKHJiX2Zp cnN0KCZiLT53YWl0ZXJzKSAhPSAmYi0+aXJxX3dhaXQtPm5vZGUpOwotCi0JcmV0dXJuIGFybWVk OwotfQotCi1ib29sIGludGVsX2VuZ2luZV9hZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgaW50 ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKLQlib29sIGFybWVkOwot Ci0Jc3Bpbl9sb2NrX2lycSgmYi0+cmJfbG9jayk7Ci0JYXJtZWQgPSBfX2ludGVsX2VuZ2luZV9h ZGRfd2FpdChlbmdpbmUsIHdhaXQpOwotCXNwaW5fdW5sb2NrX2lycSgmYi0+cmJfbG9jayk7Ci0J aWYgKGFybWVkKQotCQlyZXR1cm4gYXJtZWQ7Ci0KLQkvKiBNYWtlIHRoZSBjYWxsZXIgcmVjaGVj ayBpZiBpdHMgcmVxdWVzdCBoYXMgYWxyZWFkeSBzdGFydGVkLiAqLwotCXJldHVybiBpbnRlbF9l bmdpbmVfaGFzX3N0YXJ0ZWQoZW5naW5lLCB3YWl0LT5zZXFubyk7Ci19Ci0KLXN0YXRpYyBpbmxp bmUgYm9vbCBjaGFpbl93YWtldXAoc3RydWN0IHJiX25vZGUgKnJiLCBpbnQgcHJpb3JpdHkpCi17 Ci0JcmV0dXJuIHJiICYmIHRvX3dhaXQocmIpLT50c2stPnByaW8gPD0gcHJpb3JpdHk7Ci19CisJ Y2xlYXJfYml0KGVuZ2luZS0+aWQsICZlbmdpbmUtPmk5MTUtPmdwdV9lcnJvci5taXNzZWRfaXJx X3JpbmdzKTsKIAotc3RhdGljIGlubGluZSBpbnQgd2FrZXVwX3ByaW9yaXR5KHN0cnVjdCBpbnRl bF9icmVhZGNydW1icyAqYiwKLQkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCWlm ICh0c2sgPT0gYi0+c2lnbmFsZXIpCi0JCXJldHVybiBJTlRfTUlOOworCWlmIChiLT5pcnFfZW5h YmxlZCkKKwkJaXJxX2VuYWJsZShlbmdpbmUpOwogCWVsc2UKLQkJcmV0dXJuIHRzay0+cHJpbzsK LX0KLQotc3RhdGljIHZvaWQgX19pbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkK LXsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsK LQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmItPnJiX2xvY2spOwotCi0JaWYgKFJCX0VNUFRZX05P REUoJndhaXQtPm5vZGUpKQotCQlnb3RvIG91dDsKLQotCWlmIChiLT5pcnFfd2FpdCA9PSB3YWl0 KSB7Ci0JCWNvbnN0IGludCBwcmlvcml0eSA9IHdha2V1cF9wcmlvcml0eShiLCB3YWl0LT50c2sp OwotCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKLQotCQkvKiBXZSBhcmUgdGhlIGN1cnJlbnQgYm90 dG9tLWhhbGYuIEZpbmQgdGhlIG5leHQgY2FuZGlkYXRlLAotCQkgKiB0aGUgZmlyc3Qgd2FpdGVy IGluIHRoZSBxdWV1ZSBvbiB0aGUgcmVtYWluaW5nIG9sZGVzdAotCQkgKiByZXF1ZXN0LiBBcyBt dWx0aXBsZSBzZXFub3MgbWF5IGNvbXBsZXRlIGluIHRoZSB0aW1lIGl0Ci0JCSAqIHRha2VzIHVz IHRvIHdha2UgdXAgYW5kIGZpbmQgdGhlIG5leHQgd2FpdGVyLCB3ZSBoYXZlIHRvCi0JCSAqIHdh a2UgdXAgdGhhdCB3YWl0ZXIgZm9yIGl0IHRvIHBlcmZvcm0gaXRzIG93biBjb2hlcmVudAotCQkg KiBjb21wbGV0aW9uIGNoZWNrLgotCQkgKi8KLQkJbmV4dCA9IHJiX25leHQoJndhaXQtPm5vZGUp OwotCQlpZiAoY2hhaW5fd2FrZXVwKG5leHQsIHByaW9yaXR5KSkgewotCQkJLyogSWYgdGhlIG5l eHQgd2FpdGVyIGlzIGFscmVhZHkgY29tcGxldGUsCi0JCQkgKiB3YWtlIGl0IHVwIGFuZCBjb250 aW51ZSBvbnRvIHRoZSBuZXh0IHdhaXRlci4gU28KLQkJCSAqIGlmIGhhdmUgYSBzbWFsbCBoZXJk LCB0aGV5IHdpbGwgd2FrZSB1cCBpbiBwYXJhbGxlbAotCQkJICogcmF0aGVyIHRoYW4gc2VxdWVu dGlhbGx5LCB3aGljaCBzaG91bGQgcmVkdWNlCi0JCQkgKiB0aGUgb3ZlcmFsbCBsYXRlbmN5IGlu IHdha2luZyBhbGwgdGhlIGNvbXBsZXRlZAotCQkJICogY2xpZW50cy4KLQkJCSAqCi0JCQkgKiBI b3dldmVyLCB3YWtpbmcgdXAgYSBjaGFpbiBhZGRzIGV4dHJhIGxhdGVuY3kgdG8KLQkJCSAqIHRo ZSBmaXJzdF93YWl0ZXIuIFRoaXMgaXMgdW5kZXNpcmFibGUgaWYgdGhhdAotCQkJICogd2FpdGVy IGlzIGEgaGlnaCBwcmlvcml0eSB0YXNrLgotCQkJICovCi0JCQl1MzIgc2Vxbm8gPSBpbnRlbF9l bmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSk7Ci0KLQkJCXdoaWxlIChpOTE1X3NlcW5vX3Bhc3NlZChz ZXFubywgdG9fd2FpdChuZXh0KS0+c2Vxbm8pKSB7Ci0JCQkJc3RydWN0IHJiX25vZGUgKm4gPSBy Yl9uZXh0KG5leHQpOwotCi0JCQkJX19pbnRlbF9icmVhZGNydW1ic19maW5pc2goYiwgdG9fd2Fp dChuZXh0KSk7Ci0JCQkJbmV4dCA9IG47Ci0JCQkJaWYgKCFjaGFpbl93YWtldXAobmV4dCwgcHJp b3JpdHkpKQotCQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCV9faW50ZWxfYnJlYWRjcnVtYnNf bmV4dChlbmdpbmUsIG5leHQpOwotCX0gZWxzZSB7Ci0JCUdFTV9CVUdfT04ocmJfZmlyc3QoJmIt PndhaXRlcnMpID09ICZ3YWl0LT5ub2RlKTsKLQl9Ci0KLQlHRU1fQlVHX09OKFJCX0VNUFRZX05P REUoJndhaXQtPm5vZGUpKTsKLQlyYl9lcmFzZSgmd2FpdC0+bm9kZSwgJmItPndhaXRlcnMpOwot CVJCX0NMRUFSX05PREUoJndhaXQtPm5vZGUpOwotCi1vdXQ6Ci0JR0VNX0JVR19PTihiLT5pcnFf d2FpdCA9PSB3YWl0KTsKLQlHRU1fQlVHX09OKHJiX2ZpcnN0KCZiLT53YWl0ZXJzKSAhPQotCQkg ICAoYi0+aXJxX3dhaXQgPyAmYi0+aXJxX3dhaXQtPm5vZGUgOiBOVUxMKSk7Ci19Ci0KLXZvaWQg aW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK LQkJCSAgICAgIHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0KQotewotCXN0cnVjdCBpbnRlbF9icmVh ZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCi0JLyogUXVpY2sgY2hlY2sgdG8g c2VlIGlmIHRoaXMgd2FpdGVyIHdhcyBhbHJlYWR5IGRlY291cGxlZCBmcm9tCi0JICogdGhlIHRy ZWUgYnkgdGhlIGJvdHRvbS1oYWxmIHRvIGF2b2lkIGNvbnRlbnRpb24gb24gdGhlIHNwaW5sb2Nr Ci0JICogYnkgdGhlIGhlcmQuCi0JICovCi0JaWYgKFJCX0VNUFRZX05PREUoJndhaXQtPm5vZGUp KSB7Ci0JCUdFTV9CVUdfT04oUkVBRF9PTkNFKGItPmlycV93YWl0KSA9PSB3YWl0KTsKLQkJcmV0 dXJuOwotCX0KKwkJaXJxX2Rpc2FibGUoZW5naW5lKTsKIAotCXNwaW5fbG9ja19pcnEoJmItPnJi X2xvY2spOwotCV9faW50ZWxfZW5naW5lX3JlbW92ZV93YWl0KGVuZ2luZSwgd2FpdCk7Ci0Jc3Bp bl91bmxvY2tfaXJxKCZiLT5yYl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5p cnFfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBzaWduYWxlcl9zZXRfcnRwcmlvcml0 eSh2b2lkKQordm9pZCBpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUpCiB7Ci0JIHN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNj aGVkX3ByaW9yaXR5ID0gMSB9OwotCi0JIHNjaGVkX3NldHNjaGVkdWxlcl9ub2NoZWNrKGN1cnJl bnQsIFNDSEVEX0ZJRk8sICZwYXJhbSk7CisJY2FuY2VsX2Zha2VfaXJxKGVuZ2luZSk7CiB9CiAK LXN0YXRpYyBpbnQgaW50ZWxfYnJlYWRjcnVtYnNfc2lnbmFsZXIodm9pZCAqYXJnKQorYm9vbCBp bnRlbF9lbmdpbmVfZW5hYmxlX3NpZ25hbGluZyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKIHsK LQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBhcmc7Ci0Jc3RydWN0IGludGVsX2Jy ZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Ci0Jc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEsICpuOwotCi0JLyogSW5zdGFsbCBvdXJzZWx2ZXMgd2l0aCBoaWdoIHByaW9yaXR5IHRv IHJlZHVjZSBzaWduYWxsaW5nIGxhdGVuY3kgKi8KLQlzaWduYWxlcl9zZXRfcnRwcmlvcml0eSgp OwotCi0JZG8gewotCQlib29sIGRvX3NjaGVkdWxlID0gdHJ1ZTsKLQkJTElTVF9IRUFEKGxpc3Qp OwotCQl1MzIgc2Vxbm87Ci0KLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxF KTsKLQkJaWYgKGxpc3RfZW1wdHkoJmItPnNpZ25hbHMpKQotCQkJZ290byBzbGVlcDsKLQotCQkv KgotCQkgKiBXZSBhcmUgZWl0aGVyIHdva2VuIHVwIGJ5IHRoZSBpbnRlcnJ1cHQgYm90dG9tLWhh bGYsCi0JCSAqIG9yIGJ5IGEgY2xpZW50IGFkZGluZyBhIG5ldyBzaWduYWxsZXIuIEluIGJvdGgg Y2FzZXMsCi0JCSAqIHRoZSBHUFUgc2Vxbm8gbWF5IGhhdmUgYWR2YW5jZWQgYmV5b25kIG91ciBv bGRlc3Qgc2lnbmFsLgotCQkgKiBJZiBpdCBoYXMsIHByb3BhZ2F0ZSB0aGUgc2lnbmFsLCByZW1v dmUgdGhlIHdhaXRlciBhbmQKLQkJICogY2hlY2sgYWdhaW4gd2l0aCB0aGUgbmV4dCBvbGRlc3Qg c2lnbmFsLiBPdGhlcndpc2Ugd2UKLQkJICogbmVlZCB0byB3YWl0IGZvciBhIG5ldyBpbnRlcnJ1 cHQgZnJvbSB0aGUgR1BVIG9yIGZvcgotCQkgKiBhIG5ldyBjbGllbnQuCi0JCSAqLwotCQlzZXFu byA9IGludGVsX2VuZ2luZV9nZXRfc2Vxbm8oZW5naW5lKTsKLQotCQlzcGluX2xvY2tfaXJxKCZi LT5yYl9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJxLCBuLCAmYi0+c2lnbmFs cywgc2lnbmFsaW5nLmxpbmspIHsKLQkJCXUzMiB0aGlzID0gcnEtPnNpZ25hbGluZy53YWl0LnNl cW5vOwotCi0JCQlHRU1fQlVHX09OKCFycS0+c2lnbmFsaW5nLndhaXQuc2Vxbm8pOwotCi0JCQlp ZiAoIWk5MTVfc2Vxbm9fcGFzc2VkKHNlcW5vLCB0aGlzKSkKLQkJCQlicmVhazsKKwlzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmcnEtPmVuZ2luZS0+YnJlYWRjcnVtYnM7CiAKLQkJCWlm IChsaWtlbHkodGhpcyA9PSBpOTE1X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJxKSkpIHsKLQkJCQlf X2ludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChlbmdpbmUsCi0JCQkJCQkJICAgJnJxLT5zaWduYWxp bmcud2FpdCk7CisJR0VNX0JVR19PTih0ZXN0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLCAm cnEtPmZlbmNlLmZsYWdzKSk7CiAKLQkJCQlycS0+c2lnbmFsaW5nLndhaXQuc2Vxbm8gPSAwOwot CQkJCV9fbGlzdF9kZWxfZW50cnkoJnJxLT5zaWduYWxpbmcubGluayk7Ci0KLQkJCQlpZiAoIXRl c3RfYml0KERNQV9GRU5DRV9GTEFHX1NJR05BTEVEX0JJVCwKLQkJCQkJICAgICAgJnJxLT5mZW5j ZS5mbGFncykpIHsKLQkJCQkJbGlzdF9hZGRfdGFpbCgmcnEtPnNpZ25hbGluZy5saW5rLAotCQkJ CQkJICAgICAgJmxpc3QpOwotCQkJCQlpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKLQkJCQl9Ci0JCQl9 Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZiLT5yYl9sb2NrKTsKLQotCQlpZiAoIWxpc3RfZW1w dHkoJmxpc3QpKSB7Ci0JCQlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUocnEsIG4sICZsaXN0LCBzaWduYWxpbmcubGluaykgewotCQkJCWRtYV9mZW5jZV9z aWduYWwoJnJxLT5mZW5jZSk7Ci0JCQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBsZXRl ZChycSkpOwotCQkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwotCQkJfQotCQkJbG9jYWxfYmhfZW5h YmxlKCk7IC8qIGtpY2sgc3RhcnQgdGhlIHRhc2tsZXRzICovCisJaWYgKCF0ZXN0X2JpdChJOTE1 X0ZFTkNFX0ZMQUdfQUNUSVZFLCAmcnEtPmZlbmNlLmZsYWdzKSkKKwkJcmV0dXJuIHRydWU7CiAK LQkJCS8qCi0JCQkgKiBJZiB0aGUgZW5naW5lIGlzIHNhdHVyYXRlZCB3ZSBtYXkgYmUgY29udGlu dWFsbHkKLQkJCSAqIHByb2Nlc3NpbmcgY29tcGxldGVkIHJlcXVlc3RzLiBUaGlzIGFuZ2VycyB0 aGUKLQkJCSAqIE5NSSB3YXRjaGRvZyBpZiB3ZSBuZXZlciBsZXQgYW55dGhpbmcgZWxzZQotCQkJ ICogaGF2ZSBhY2Nlc3MgdG8gdGhlIENQVS4gTGV0J3MgcHJldGVuZCB0byBiZSBuaWNlCi0JCQkg KiBhbmQgcmVsaW5xdWlzaCB0aGUgQ1BVIGlmIHdlIGJ1cm4gdGhyb3VnaCB0aGUKLQkJCSAqIGVu dGlyZSBSVCB0aW1lc2xpY2UhCi0JCQkgKi8KLQkJCWRvX3NjaGVkdWxlID0gbmVlZF9yZXNjaGVk KCk7Ci0JCX0KKwlzcGluX2xvY2soJmItPmlycV9sb2NrKTsKKwlpZiAodGVzdF9iaXQoSTkxNV9G RU5DRV9GTEFHX0FDVElWRSwgJnJxLT5mZW5jZS5mbGFncykpIHsKKwkJc3RydWN0IGludGVsX2Nv bnRleHQgKmNlID0gcnEtPmh3X2NvbnRleHQ7CisJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnBvczsK IAotCQlpZiAodW5saWtlbHkoZG9fc2NoZWR1bGUpKSB7Ci1zbGVlcDoKLQkJCWlmIChrdGhyZWFk X3Nob3VsZF9wYXJrKCkpCi0JCQkJa3RocmVhZF9wYXJrbWUoKTsKKwkJX19pbnRlbF9icmVhZGNy dW1ic19hcm1faXJxKGIpOwogCi0JCQlpZiAodW5saWtlbHkoa3RocmVhZF9zaG91bGRfc3RvcCgp KSkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHBvcywgJmNlLT5zaWduYWxzLCBzaWdu YWxfbGluaykgeworCQkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKHJxLT5mZW5jZS5zZXFubywKKwkJ CQkJICAgICAgcG9zLT5mZW5jZS5zZXFubykpCiAJCQkJYnJlYWs7Ci0KLQkJCXNjaGVkdWxlKCk7 CiAJCX0KLQl9IHdoaWxlICgxKTsKLQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7 CisJCWxpc3RfYWRkKCZycS0+c2lnbmFsX2xpbmssICZwb3MtPnNpZ25hbF9saW5rKTsKIAotCXJl dHVybiAwOwotfQorCQlsaXN0X21vdmVfdGFpbCgmY2UtPnNpZ25hbF9saW5rLCAmYi0+c2lnbmFs ZXJzKTsKIAotc3RhdGljIHZvaWQgaW5zZXJ0X3NpZ25hbChzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIsCi0JCQkgIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCi0JCQkgIGNvbnN0IHUz MiBzZXFubykKLXsKLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICppdGVyOwotCi0JbG9ja2RlcF9hc3Nl cnRfaGVsZCgmYi0+cmJfbG9jayk7Ci0KLQkvKgotCSAqIEEgcmVhc29uYWJsZSBhc3N1bXB0aW9u IGlzIHRoYXQgd2UgYXJlIGNhbGxlZCB0byBhZGQgc2lnbmFscwotCSAqIGluIHNlcXVlbmNlLCBh cyB0aGUgcmVxdWVzdHMgYXJlIHN1Ym1pdHRlZCBmb3IgZXhlY3V0aW9uIGFuZAotCSAqIGFzc2ln bmVkIGEgZ2xvYmFsX3NlcW5vLiBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIHRoZSBtYWpvcml0 eQotCSAqIG9mIGludGVybmFsbHkgZ2VuZXJhdGVkIHNpZ25hbHMgKGludGVyLWVuZ2luZSBzaWdu YWxpbmcpLgotCSAqCi0JICogT3V0IG9mIG9yZGVyIHdhaXRlcnMgdHJpZ2dlcmluZyByYW5kb20g c2lnbmFsaW5nIGVuYWJsaW5nIHdpbGwKLQkgKiBiZSBtb3JlIHByb2JsZW1hdGljLCBidXQgaG9w ZWZ1bGx5IHJhcmUgZW5vdWdoIGFuZCB0aGUgbGlzdAotCSAqIHNtYWxsIGVub3VnaCB0aGF0IHRo ZSBPKE4pIGluc2VydGlvbiBzb3J0IGlzIG5vdCBhbiBpc3N1ZS4KLQkgKi8KLQotCWxpc3RfZm9y X2VhY2hfZW50cnlfcmV2ZXJzZShpdGVyLCAmYi0+c2lnbmFscywgc2lnbmFsaW5nLmxpbmspCi0J CWlmIChpOTE1X3NlcW5vX3Bhc3NlZChzZXFubywgaXRlci0+c2lnbmFsaW5nLndhaXQuc2Vxbm8p KQotCQkJYnJlYWs7Ci0KLQlsaXN0X2FkZCgmcmVxdWVzdC0+c2lnbmFsaW5nLmxpbmssICZpdGVy LT5zaWduYWxpbmcubGluayk7Ci19Ci0KLWJvb2wgaW50ZWxfZW5naW5lX2VuYWJsZV9zaWduYWxp bmcoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgYm9vbCB3YWtldXApCi17Ci0Jc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxdWVzdC0+ZW5naW5lOwotCXN0cnVjdCBpbnRl bF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwotCXN0cnVjdCBpbnRlbF93 YWl0ICp3YWl0ID0gJnJlcXVlc3QtPnNpZ25hbGluZy53YWl0OwotCXUzMiBzZXFubzsKLQotCS8q Ci0JICogTm90ZSB0aGF0IHdlIG1heSBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxl ciBvbiBhbm90aGVyCi0JICogZGV2aWNlIChlLmcuIG5vdXZlYXUgc2lnbmFsaW5nIGEgZmVuY2Ug Y29tcGxldGlvbiBjYXVzaW5nIHVzCi0JICogdG8gc3VibWl0IGEgcmVxdWVzdCwgYW5kIHNvIGVu YWJsZSBzaWduYWxpbmcpLiBBcyBzdWNoLAotCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQg YWxsIG90aGVyIHVzZXJzIG9mIGItPnJiX2xvY2sgcHJvdGVjdAotCSAqIGFnYWluc3QgaW50ZXJy dXB0cywgaS5lLiB1c2Ugc3Bpbl9sb2NrX2lycXNhdmUuCi0JICovCi0KLQkvKiBsb2NrZWQgYnkg ZG1hX2ZlbmNlX2VuYWJsZV9zd19zaWduYWxpbmcoKSAoaXJxc2FmZSBmZW5jZS0+bG9jaykgKi8K LQlHRU1fQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJl cXVlc3QtPmxvY2spOwotCi0Jc2Vxbm8gPSBpOTE1X3JlcXVlc3RfZ2xvYmFsX3NlcW5vKHJlcXVl c3QpOwotCWlmICghc2Vxbm8pIC8qIHdpbGwgYmUgZW5hYmxlZCBsYXRlciB1cG9uIGV4ZWN1dGlv biAqLwotCQlyZXR1cm4gdHJ1ZTsKLQotCUdFTV9CVUdfT04od2FpdC0+c2Vxbm8pOwotCXdhaXQt PnRzayA9IGItPnNpZ25hbGVyOwotCXdhaXQtPnJlcXVlc3QgPSByZXF1ZXN0OwotCXdhaXQtPnNl cW5vID0gc2Vxbm87Ci0KLQkvKgotCSAqIEFkZCBvdXJzZWx2ZXMgaW50byB0aGUgbGlzdCBvZiB3 YWl0ZXJzLCBidXQgcmVnaXN0ZXJpbmcgb3VyCi0JICogYm90dG9tLWhhbGYgYXMgdGhlIHNpZ25h bGxlciB0aHJlYWQuIEFzIHBlciB1c3VhbCwgb25seSB0aGUgb2xkZXN0Ci0JICogd2FpdGVyIChu b3QganVzdCBzaWduYWxsZXIpIGlzIHRhc2tlZCBhcyB0aGUgYm90dG9tLWhhbGYgd2FraW5nCi0J ICogdXAgYWxsIGNvbXBsZXRlZCB3YWl0ZXJzIGFmdGVyIHRoZSB1c2VyIGludGVycnVwdC4KLQkg KgotCSAqIElmIHdlIGFyZSB0aGUgb2xkZXN0IHdhaXRlciwgZW5hYmxlIHRoZSBpcnEgKGFmdGVy IHdoaWNoIHdlCi0JICogbXVzdCBkb3VibGUgY2hlY2sgdGhhdCB0aGUgc2Vxbm8gZGlkIG5vdCBj b21wbGV0ZSkuCi0JICovCi0Jc3Bpbl9sb2NrKCZiLT5yYl9sb2NrKTsKLQlpbnNlcnRfc2lnbmFs KGIsIHJlcXVlc3QsIHNlcW5vKTsKLQl3YWtldXAgJj0gX19pbnRlbF9lbmdpbmVfYWRkX3dhaXQo ZW5naW5lLCB3YWl0KTsKLQlzcGluX3VubG9jaygmYi0+cmJfbG9jayk7Ci0KLQlpZiAod2FrZXVw KSB7Ci0JCXdha2VfdXBfcHJvY2VzcyhiLT5zaWduYWxlcik7Ci0JCXJldHVybiAhaW50ZWxfd2Fp dF9jb21wbGV0ZSh3YWl0KTsKKwkJc2V0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLCAmcnEt PmZlbmNlLmZsYWdzKTsKIAl9CisJc3Bpbl91bmxvY2soJmItPmlycV9sb2NrKTsKIAotCXJldHVy biB0cnVlOworCXJldHVybiAhaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSk7CiB9CiAKLXZvaWQg aW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVz dCkKK3ZvaWQgaW50ZWxfZW5naW5lX2NhbmNlbF9zaWduYWxpbmcoc3RydWN0IGk5MTVfcmVxdWVz dCAqcnEpCiB7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gcmVxdWVzdC0+ZW5n aW5lOwotCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJz OwotCi0JR0VNX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKLQlsb2NrZGVwX2Fzc2VydF9oZWxk KCZyZXF1ZXN0LT5sb2NrKTsKKwlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVtYnMgKmIgPSAmcnEtPmVu Z2luZS0+YnJlYWRjcnVtYnM7CiAKLQlpZiAoIVJFQURfT05DRShyZXF1ZXN0LT5zaWduYWxpbmcu d2FpdC5zZXFubykpCisJaWYgKCF0ZXN0X2JpdChJOTE1X0ZFTkNFX0ZMQUdfU0lHTkFMLCAmcnEt PmZlbmNlLmZsYWdzKSkKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrKCZiLT5yYl9sb2NrKTsKLQlf X2ludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChlbmdpbmUsICZyZXF1ZXN0LT5zaWduYWxpbmcud2Fp dCk7Ci0JaWYgKGZldGNoX2FuZF96ZXJvKCZyZXF1ZXN0LT5zaWduYWxpbmcud2FpdC5zZXFubykp Ci0JCV9fbGlzdF9kZWxfZW50cnkoJnJlcXVlc3QtPnNpZ25hbGluZy5saW5rKTsKLQlzcGluX3Vu bG9jaygmYi0+cmJfbG9jayk7Ci19Ci0KLWludCBpbnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1i cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVsX2JyZWFk Y3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0 c2s7Ci0KLQlzcGluX2xvY2tfaW5pdCgmYi0+cmJfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmIt PmlycV9sb2NrKTsKLQotCXRpbWVyX3NldHVwKCZiLT5mYWtlX2lycSwgaW50ZWxfYnJlYWRjcnVt YnNfZmFrZV9pcnEsIDApOwotCXRpbWVyX3NldHVwKCZiLT5oYW5nY2hlY2ssIGludGVsX2JyZWFk Y3J1bWJzX2hhbmdjaGVjaywgMCk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmYi0+c2lnbmFscyk7Ci0K LQkvKiBTcGF3biBhIHRocmVhZCB0byBwcm92aWRlIGEgY29tbW9uIGJvdHRvbS1oYWxmIGZvciBh bGwgc2lnbmFscy4KLQkgKiBBcyB0aGlzIGlzIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2Ugd2Ug Y2Fubm90IHN0ZWFsIHRoZSBjdXJyZW50Ci0JICogdGFzayBmb3IgaGFuZGxpbmcgdGhlIGJvdHRv bS1oYWxmIHRvIHRoZSB1c2VyIGludGVycnVwdCwgdGhlcmVmb3JlCi0JICogd2UgY3JlYXRlIGEg dGhyZWFkIHRvIGRvIHRoZSBjb2hlcmVudCBzZXFubyBkYW5jZSBhZnRlciB0aGUKLQkgKiBpbnRl cnJ1cHQgYW5kIHRoZW4gc2lnbmFsIHRoZSB3YWl0cXVldWUgKHZpYSB0aGUgZG1hLWJ1Zi9mZW5j ZSkuCi0JICovCi0JdHNrID0ga3RocmVhZF9ydW4oaW50ZWxfYnJlYWRjcnVtYnNfc2lnbmFsZXIs IGVuZ2luZSwKLQkJCSAgImk5MTUvc2lnbmFsOiVkIiwgZW5naW5lLT5pZCk7Ci0JaWYgKElTX0VS Uih0c2spKQotCQlyZXR1cm4gUFRSX0VSUih0c2spOwotCi0JYi0+c2lnbmFsZXIgPSB0c2s7Ci0K LQlyZXR1cm4gMDsKLX0KKwlzcGluX2xvY2soJmItPmlycV9sb2NrKTsKKwlpZiAodGVzdF9iaXQo STkxNV9GRU5DRV9GTEFHX1NJR05BTCwgJnJxLT5mZW5jZS5mbGFncykpIHsKKwkJc3RydWN0IGlu dGVsX2NvbnRleHQgKmNlID0gcnEtPmh3X2NvbnRleHQ7CiAKLXN0YXRpYyB2b2lkIGNhbmNlbF9m YWtlX2lycShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCi17Ci0Jc3RydWN0IGludGVs X2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7CisJCWxpc3RfZGVsKCZycS0+ c2lnbmFsX2xpbmspOworCQlpZiAobGlzdF9lbXB0eSgmY2UtPnNpZ25hbHMpKQorCQkJbGlzdF9k ZWxfaW5pdCgmY2UtPnNpZ25hbF9saW5rKTsKIAotCWRlbF90aW1lcl9zeW5jKCZiLT5mYWtlX2ly cSk7IC8qIG1heSBxdWV1ZSBiLT5oYW5nY2hlY2sgKi8KLQlkZWxfdGltZXJfc3luYygmYi0+aGFu Z2NoZWNrKTsKLQljbGVhcl9iaXQoZW5naW5lLT5pZCwgJmVuZ2luZS0+aTkxNS0+Z3B1X2Vycm9y Lm1pc3NlZF9pcnFfcmluZ3MpOworCQljbGVhcl9iaXQoSTkxNV9GRU5DRV9GTEFHX1NJR05BTCwg JnJxLT5mZW5jZS5mbGFncyk7CisJfQorCXNwaW5fdW5sb2NrKCZiLT5pcnFfbG9jayk7CiB9CiAK LXZvaWQgaW50ZWxfZW5naW5lX3Jlc2V0X2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKK3ZvaWQgaW50ZWxfZW5naW5lX3ByaW50X2JyZWFkY3J1bWJzKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKKwkJCQkgICAgc3RydWN0IGRybV9wcmludGVyICpwKQog ewogCXN0cnVjdCBpbnRlbF9icmVhZGNydW1icyAqYiA9ICZlbmdpbmUtPmJyZWFkY3J1bWJzOwot CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGludGVsX2NvbnRleHQgKmNlOworCXN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmItPmlycV9sb2NrLCBm bGFncyk7Ci0KLQkvKgotCSAqIExlYXZlIHRoZSBmYWtlX2lycSB0aW1lciBlbmFibGVkIChpZiBp dCBpcyBydW5uaW5nKSwgYnV0IGNsZWFyIHRoZQotCSAqIGJpdCBzbyB0aGF0IGl0IHR1cm5zIGl0 c2VsZiBvZmYgb24gaXRzIG5leHQgd2FrZSB1cCBhbmQgZ29lcyBiYWNrCi0JICogdG8gdGhlIGxv bmcgaGFuZ2NoZWNrIGludGVydmFsIGlmIHN0aWxsIHJlcXVpcmVkLgotCSAqLwotCWNsZWFyX2Jp dChlbmdpbmUtPmlkLCAmZW5naW5lLT5pOTE1LT5ncHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncyk7 Ci0KLQlpZiAoYi0+aXJxX2VuYWJsZWQpCi0JCWlycV9lbmFibGUoZW5naW5lKTsKLQllbHNlCi0J CWlycV9kaXNhYmxlKGVuZ2luZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5pcnFf bG9jaywgZmxhZ3MpOwotfQotCi12b2lkIGludGVsX2VuZ2luZV9maW5pX2JyZWFkY3J1bWJzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKLXsKLQlzdHJ1Y3QgaW50ZWxfYnJlYWRjcnVt YnMgKmIgPSAmZW5naW5lLT5icmVhZGNydW1iczsKKwlpZiAobGlzdF9lbXB0eSgmYi0+c2lnbmFs ZXJzKSkKKwkJcmV0dXJuOwogCi0JLyogVGhlIGVuZ2luZXMgc2hvdWxkIGJlIGlkbGUgYW5kIGFs bCByZXF1ZXN0cyBhY2NvdW50ZWQgZm9yISAqLwotCVdBUk5fT04oUkVBRF9PTkNFKGItPmlycV93 YWl0KSk7Ci0JV0FSTl9PTighUkJfRU1QVFlfUk9PVCgmYi0+d2FpdGVycykpOwotCVdBUk5fT04o IWxpc3RfZW1wdHkoJmItPnNpZ25hbHMpKTsKKwlkcm1fcHJpbnRmKHAsICJTaWduYWxzOlxuIik7 CiAKLQlpZiAoIUlTX0VSUl9PUl9OVUxMKGItPnNpZ25hbGVyKSkKLQkJa3RocmVhZF9zdG9wKGIt PnNpZ25hbGVyKTsKKwlzcGluX2xvY2tfaXJxKCZiLT5pcnFfbG9jayk7CisJbGlzdF9mb3JfZWFj aF9lbnRyeShjZSwgJmItPnNpZ25hbGVycywgc2lnbmFsX2xpbmspIHsKKwkJbGlzdF9mb3JfZWFj aF9lbnRyeShycSwgJmNlLT5zaWduYWxzLCBzaWduYWxfbGluaykgeworCQkJZHJtX3ByaW50Zihw LCAiXHRbJWxseDolbGx4JXNdIEAgJWRtc1xuIiwKKwkJCQkgICBycS0+ZmVuY2UuY29udGV4dCwg cnEtPmZlbmNlLnNlcW5vLAorCQkJCSAgIGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpID8gIiEi IDoKKwkJCQkgICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkgPyAiKiIgOgorCQkJCSAgICIiLAor CQkJCSAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHJxLT5lbWl0dGVkX2ppZmZpZXMpKTsK KwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJmItPmlycV9sb2NrKTsKIAotCWNhbmNlbF9mYWtl X2lycShlbmdpbmUpOworCWlmICh0ZXN0X2JpdChlbmdpbmUtPmlkLCAmZW5naW5lLT5pOTE1LT5n cHVfZXJyb3IubWlzc2VkX2lycV9yaW5ncykpCisJCWRybV9wcmludGYocCwgIkZha2UgaXJxIGFj dGl2ZVxuIik7CiB9Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkxNV9TRUxGVEVTVCkK LSNpbmNsdWRlICJzZWxmdGVzdHMvaW50ZWxfYnJlYWRjcnVtYnMuYyIKLSNlbmRpZgpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYwppbmRleCBlNDk5MjVhZjZkYTguLjMxYTYxNGVh MGQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMK KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMKQEAgLTQ1OCwxMiAr NDU4LDYgQEAgaW50IGludGVsX2VuZ2luZXNfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYpCiB2b2lkIGludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgc2Vxbm8pCiB7CiAJaW50ZWxfd3JpdGVfc3RhdHVz X3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1NfSU5ERVgsIHNlcW5vKTsKLQotCS8qIEFmdGVyIG1h bnVhbGx5IGFkdmFuY2luZyB0aGUgc2Vxbm8sIGZha2UgdGhlIGludGVycnVwdCBpbiBjYXNlCi0J ICogdGhlcmUgYXJlIGFueSB3YWl0ZXJzIGZvciB0aGF0IHNlcW5vLgotCSAqLwotCWludGVsX2Vu Z2luZV93YWtldXAoZW5naW5lKTsKLQogCUdFTV9CVUdfT04oaW50ZWxfZW5naW5lX2dldF9zZXFu byhlbmdpbmUpICE9IHNlcW5vKTsKIH0KIApAQCAtNjY3LDE2ICs2NjEsMTAgQEAgaW50IGludGVs X2VuZ2luZV9pbml0X2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAJCX0K IAl9CiAKLQlyZXQgPSBpbnRlbF9lbmdpbmVfaW5pdF9icmVhZGNydW1icyhlbmdpbmUpOwotCWlm IChyZXQpCi0JCWdvdG8gZXJyX3VucGluX3ByZWVtcHQ7CisJaW50ZWxfZW5naW5lX2luaXRfYnJl YWRjcnVtYnMoZW5naW5lKTsKIAogCXJldHVybiAwOwogCi1lcnJfdW5waW5fcHJlZW1wdDoKLQlp ZiAoaTkxNS0+cHJlZW1wdF9jb250ZXh0KQotCQlfX2ludGVsX2NvbnRleHRfdW5waW4oaTkxNS0+ cHJlZW1wdF9jb250ZXh0LCBlbmdpbmUpOwotCiBlcnJfdW5waW5fa2VybmVsOgogCV9faW50ZWxf Y29udGV4dF91bnBpbihpOTE1LT5rZXJuZWxfY29udGV4dCwgZW5naW5lKTsKIAlyZXR1cm4gcmV0 OwpAQCAtMTIzNiwxMiArMTIyNCwxNCBAQCBzdGF0aWMgdm9pZCBwcmludF9yZXF1ZXN0KHN0cnVj dCBkcm1fcHJpbnRlciAqbSwKIAogCXggPSBwcmludF9zY2hlZF9hdHRyKHJxLT5pOTE1LCAmcnEt PnNjaGVkLmF0dHIsIGJ1ZiwgeCwgc2l6ZW9mKGJ1ZikpOwogCi0JZHJtX3ByaW50ZihtLCAiJXMl eCVzIFslbGx4OiVsbHhdJXMgQCAlZG1zOiAlc1xuIiwKKwlkcm1fcHJpbnRmKG0sICIlcyV4JXMl cyBbJWxseDolbGx4XSVzIEAgJWRtczogJXNcbiIsCiAJCSAgIHByZWZpeCwKIAkJICAgcnEtPmds b2JhbF9zZXFubywKIAkJICAgaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkgPyAiISIgOgogCQkg ICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChycSkgPyAiKiIgOgogCQkgICAiIiwKKwkJICAgdGVzdF9i aXQoRE1BX0ZFTkNFX0ZMQUdfRU5BQkxFX1NJR05BTF9CSVQsCisJCQkgICAgJnJxLT5mZW5jZS5m bGFncykgPyAgIisiIDogIiIsCiAJCSAgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vx bm8sCiAJCSAgIGJ1ZiwKIAkJICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gcnEtPmVtaXR0 ZWRfamlmZmllcyksCkBAIC0xNDMzLDEyICsxNDIzLDkgQEAgdm9pZCBpbnRlbF9lbmdpbmVfZHVt cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX3By aW50ZXIgKm0sCiAJCSAgICAgICBjb25zdCBjaGFyICpoZWFkZXIsIC4uLikKIHsKLQlzdHJ1Y3Qg aW50ZWxfYnJlYWRjcnVtYnMgKiBjb25zdCBiID0gJmVuZ2luZS0+YnJlYWRjcnVtYnM7CiAJc3Ry dWN0IGk5MTVfZ3B1X2Vycm9yICogY29uc3QgZXJyb3IgPSAmZW5naW5lLT5pOTE1LT5ncHVfZXJy b3I7CiAJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7CiAJaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7 Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmI7CiAKIAlpZiAoaGVh ZGVyKSB7CiAJCXZhX2xpc3QgYXA7CkBAIC0xNTA0LDIxICsxNDkxLDEyIEBAIHZvaWQgaW50ZWxf ZW5naW5lX2R1bXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCiAJaW50ZWxfZXhl Y2xpc3RzX3Nob3dfcmVxdWVzdHMoZW5naW5lLCBtLCBwcmludF9yZXF1ZXN0LCA4KTsKIAotCXNw aW5fbG9ja19pcnFzYXZlKCZiLT5yYl9sb2NrLCBmbGFncyk7Ci0JZm9yIChyYiA9IHJiX2ZpcnN0 KCZiLT53YWl0ZXJzKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsKLQkJc3RydWN0IGludGVsX3dh aXQgKncgPSByYl9lbnRyeShyYiwgdHlwZW9mKCp3KSwgbm9kZSk7Ci0KLQkJZHJtX3ByaW50Ziht LCAiXHQlcyBbJWQ6JWNdIHdhaXRpbmcgZm9yICV4XG4iLAotCQkJICAgdy0+dHNrLT5jb21tLCB3 LT50c2stPnBpZCwKLQkJCSAgIHRhc2tfc3RhdGVfdG9fY2hhcih3LT50c2spLAotCQkJICAgdy0+ c2Vxbm8pOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiLT5yYl9sb2NrLCBmbGFncyk7 Ci0KIAlkcm1fcHJpbnRmKG0sICJIV1NQOlxuIik7CiAJaGV4ZHVtcChtLCBlbmdpbmUtPnN0YXR1 c19wYWdlLmFkZHIsIFBBR0VfU0laRSk7CiAKIAlkcm1fcHJpbnRmKG0sICJJZGxlPyAlc1xuIiwg eWVzbm8oaW50ZWxfZW5naW5lX2lzX2lkbGUoZW5naW5lKSkpOworCisJaW50ZWxfZW5naW5lX3By aW50X2JyZWFkY3J1bWJzKGVuZ2luZSwgbSk7CiB9CiAKIHN0YXRpYyB1OCB1c2VyX2NsYXNzX21h cFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZl ci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCmluZGV4IDcxNDhk MTQ4MGY1ZC4uZWM2MGI2Njc3M2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9yaW5nYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1 ZmZlci5jCkBAIC00ODMsOCArNDgzLDggQEAgc3RhdGljIHZvaWQgZ2VuN194Y3NfZW1pdF9icmVh ZGNydW1iKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgKmNzKQogCiAJZm9yIChpID0gMDsg aSA8IEdFTjdfWENTX1dBOyBpKyspIHsKIAkJKmNzKysgPSBNSV9TVE9SRV9EV09SRF9JTkRFWDsK LQkJKmNzKysgPSBJOTE1X0dFTV9IV1NfSU5ERVhfQUREUjsKLQkJKmNzKysgPSBycS0+Z2xvYmFs X3NlcW5vOworCQkqY3MrKyA9IEk5MTVfR0VNX0hXU19TRVFOT19BRERSOworCQkqY3MrKyA9IHJx LT5mZW5jZS5zZXFubzsKIAl9CiAKIAkqY3MrKyA9IE1JX0ZMVVNIX0RXOwpAQCAtNzM0LDcgKzcz NCw3IEBAIHN0YXRpYyBpbnQgaW5pdF9yaW5nX2NvbW1vbihzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCiAJfQogCiAJLyogUGFwZXJpbmcgb3ZlciBsb3N0IF9pbnRlcnJ1cHRzXyBpbW1l ZGlhdGVseSBmb2xsb3dpbmcgdGhlIHJlc3RhcnQgKi8KLQlpbnRlbF9lbmdpbmVfd2FrZXVwKGVu Z2luZSk7CisJaW50ZWxfZW5naW5lX3NpZ25hbF9icmVhZGNydW1icyhlbmdpbmUpOwogb3V0Ogog CWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JDRVdBS0VfQUxMKTsKIApk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCmluZGV4IGU2ZWM5NmUwYWI1Ni4u OGI0YjdiZDUyOWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5n YnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBA IC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGRybS9kcm1fdXRpbC5oPgogCiAjaW5jbHVkZSA8bGlu dXgvaGFzaHRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxX3dvcmsuaD4KICNpbmNsdWRlIDxs aW51eC9zZXFsb2NrLmg+CiAKICNpbmNsdWRlICJpOTE1X2dlbV9iYXRjaF9wb29sLmgiCkBAIC0z ODAsMjIgKzM4MSwxOSBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsKIAkgKiB0aGUgb3Zlcmhl YWQgb2Ygd2FraW5nIHRoYXQgY2xpZW50IGlzIG11Y2ggcHJlZmVycmVkLgogCSAqLwogCXN0cnVj dCBpbnRlbF9icmVhZGNydW1icyB7Ci0JCXNwaW5sb2NrX3QgaXJxX2xvY2s7IC8qIHByb3RlY3Rz IGlycV8qOyBpcnFzYWZlICovCi0JCXN0cnVjdCBpbnRlbF93YWl0ICppcnFfd2FpdDsgLyogb2xk ZXN0IHdhaXRlciBieSByZXRpcmVtZW50ICovCisJCXNwaW5sb2NrX3QgaXJxX2xvY2s7CisJCXN0 cnVjdCBsaXN0X2hlYWQgc2lnbmFsZXJzOwogCi0JCXNwaW5sb2NrX3QgcmJfbG9jazsgLyogcHJv dGVjdHMgdGhlIHJiIGFuZCB3cmFwcyBpcnFfbG9jayAqLwotCQlzdHJ1Y3QgcmJfcm9vdCB3YWl0 ZXJzOyAvKiBzb3J0ZWQgYnkgcmV0aXJlbWVudCwgcHJpb3JpdHkgKi8KLQkJc3RydWN0IGxpc3Rf aGVhZCBzaWduYWxzOyAvKiBzb3J0ZWQgYnkgcmV0aXJlbWVudCAqLwotCQlzdHJ1Y3QgdGFza19z dHJ1Y3QgKnNpZ25hbGVyOyAvKiB1c2VkIGZvciBmZW5jZSBzaWduYWxsaW5nICovCisJCXN0cnVj dCBpcnFfd29yayBpcnFfd29yazsKIAogCQlzdHJ1Y3QgdGltZXJfbGlzdCBmYWtlX2lycTsgLyog dXNlZCBhZnRlciBhIG1pc3NlZCBpbnRlcnJ1cHQgKi8KIAkJc3RydWN0IHRpbWVyX2xpc3QgaGFu Z2NoZWNrOyAvKiBkZXRlY3QgbWlzc2VkIGludGVycnVwdHMgKi8KIAogCQl1bnNpZ25lZCBpbnQg aGFuZ2NoZWNrX2ludGVycnVwdHM7CiAJCXVuc2lnbmVkIGludCBpcnFfZW5hYmxlZDsKLQkJdW5z aWduZWQgaW50IGlycV9jb3VudDsKIAotCQlib29sIGlycV9hcm1lZCA6IDE7CisJCWJvb2wgaXJx X2FybWVkOworCQlib29sIGlycV9maXJlZDsKIAl9IGJyZWFkY3J1bWJzOwogCiAJc3RydWN0IHsK QEAgLTg4Miw4MyArODgwLDMyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF9lbmdpbmVfaGFz X3N0YXJ0ZWQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogdm9pZCBpbnRlbF9lbmdp bmVfZ2V0X2luc3Rkb25lKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAkJCSAgICAg ICBzdHJ1Y3QgaW50ZWxfaW5zdGRvbmUgKmluc3Rkb25lKTsKIAotLyogaW50ZWxfYnJlYWRjcnVt YnMuYyAtLSB1c2VyIGludGVycnVwdCBib3R0b20taGFsZiBmb3Igd2FpdGVycyAqLwotaW50IGlu dGVsX2VuZ2luZV9pbml0X2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRlbF93YWl0X2luaXQoc3RydWN0IGludGVsX3dh aXQgKndhaXQpCi17Ci0Jd2FpdC0+dHNrID0gY3VycmVudDsKLQl3YWl0LT5yZXF1ZXN0ID0gTlVM TDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGludGVsX3dhaXRfaW5pdF9mb3Jfc2Vxbm8oc3Ry dWN0IGludGVsX3dhaXQgKndhaXQsIHUzMiBzZXFubykKLXsKLQl3YWl0LT50c2sgPSBjdXJyZW50 OwotCXdhaXQtPnNlcW5vID0gc2Vxbm87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpbnRlbF93 YWl0X2hhc19zZXFubyhjb25zdCBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCkKLXsKLQlyZXR1cm4g d2FpdC0+c2Vxbm87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaW50ZWxfd2FpdF91cGRhdGVf c2Vxbm8oc3RydWN0IGludGVsX3dhaXQgKndhaXQsIHUzMiBzZXFubykKLXsKLQl3YWl0LT5zZXFu byA9IHNlcW5vOwotCXJldHVybiBpbnRlbF93YWl0X2hhc19zZXFubyh3YWl0KTsKLX0KLQotc3Rh dGljIGlubGluZSBib29sCi1pbnRlbF93YWl0X3VwZGF0ZV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF93 YWl0ICp3YWl0LAotCQkJICBjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKLXsKLQlyZXR1 cm4gaW50ZWxfd2FpdF91cGRhdGVfc2Vxbm8od2FpdCwgaTkxNV9yZXF1ZXN0X2dsb2JhbF9zZXFu byhycSkpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wKLWludGVsX3dhaXRfY2hlY2tfc2Vxbm8o Y29uc3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXQsIHUzMiBzZXFubykKLXsKLQlyZXR1cm4gd2Fp dC0+c2Vxbm8gPT0gc2Vxbm87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaW50ZWxfd2FpdF9j aGVja19yZXF1ZXN0KGNvbnN0IHN0cnVjdCBpbnRlbF93YWl0ICp3YWl0LAotCQkJIGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQotewotCXJldHVybiBpbnRlbF93YWl0X2NoZWNrX3NlcW5v KHdhaXQsIGk5MTVfcmVxdWVzdF9nbG9iYWxfc2Vxbm8ocnEpKTsKLX0KLQotc3RhdGljIGlubGlu ZSBib29sIGludGVsX3dhaXRfY29tcGxldGUoY29uc3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXQp Ci17Ci0JcmV0dXJuIFJCX0VNUFRZX05PREUoJndhaXQtPm5vZGUpOwotfQordm9pZCBpbnRlbF9l bmdpbmVfaW5pdF9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwor dm9pZCBpbnRlbF9lbmdpbmVfZmluaV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpOwogCi1ib29sIGludGVsX2VuZ2luZV9hZGRfd2FpdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCi0JCQkgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCk7Ci12b2lkIGlu dGVsX2VuZ2luZV9yZW1vdmVfd2FpdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCi0J CQkgICAgICBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdCk7Ci1ib29sIGludGVsX2VuZ2luZV9lbmFi bGVfc2lnbmFsaW5nKHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgd2FrZXVwKTsK K2Jvb2wgaW50ZWxfZW5naW5lX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGk5MTVfcmVxdWVzdCAq cmVxdWVzdCk7CiB2b2lkIGludGVsX2VuZ2luZV9jYW5jZWxfc2lnbmFsaW5nKHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJlcXVlc3QpOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxfZW5naW5lX2hh c193YWl0ZXIoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQotewotCXJldHVy biBSRUFEX09OQ0UoZW5naW5lLT5icmVhZGNydW1icy5pcnFfd2FpdCk7Ci19Ci0KLXVuc2lnbmVk IGludCBpbnRlbF9lbmdpbmVfd2FrZXVwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7 Ci0jZGVmaW5lIEVOR0lORV9XQUtFVVBfV0FJVEVSIEJJVCgwKQotI2RlZmluZSBFTkdJTkVfV0FL RVVQX0FTTEVFUCBCSVQoMSkKLQogdm9pZCBpbnRlbF9lbmdpbmVfcGluX2JyZWFkY3J1bWJzX2ly cShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogdm9pZCBpbnRlbF9lbmdpbmVfdW5w aW5fYnJlYWRjcnVtYnNfaXJxKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7CiAKLXZv aWQgX19pbnRlbF9lbmdpbmVfZGlzYXJtX2JyZWFkY3J1bWJzKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSk7Citib29sIGludGVsX2VuZ2luZV9zaWduYWxfYnJlYWRjcnVtYnMoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIHZvaWQgaW50ZWxfZW5naW5lX2Rpc2FybV9icmVh ZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCitzdGF0aWMgaW5saW5l IHZvaWQKK2ludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCit7CisJaXJxX3dvcmtfcXVldWUoJmVuZ2luZS0+YnJlYWRjcnVtYnMuaXJx X3dvcmspOworfQorCitib29sIGludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKKwogdm9pZCBpbnRlbF9lbmdpbmVfcmVzZXRfYnJlYWRj cnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIHZvaWQgaW50ZWxfZW5naW5l X2ZpbmlfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIAordm9p ZCBpbnRlbF9lbmdpbmVfcHJpbnRfYnJlYWRjcnVtYnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAorCQkJCSAgICBzdHJ1Y3QgZHJtX3ByaW50ZXIgKnApOworCiBzdGF0aWMgaW5saW5l IHUzMiAqZ2VuOF9lbWl0X3BpcGVfY29udHJvbCh1MzIgKmJhdGNoLCB1MzIgZmxhZ3MsIHUzMiBv ZmZzZXQpCiB7CiAJbWVtc2V0KGJhdGNoLCAwLCA2ICogc2l6ZW9mKHUzMikpOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKaW5k ZXggNGE4M2ExYzZjNDA2Li44OGU1YWI1ODYzMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X21vY2tfc2VsZnRlc3RzLmgKKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaApAQCAtMTUsNyArMTUsNiBA QCBzZWxmdGVzdChzY2F0dGVybGlzdCwgc2NhdHRlcmxpc3RfbW9ja19zZWxmdGVzdHMpCiBzZWxm dGVzdChzeW5jbWFwLCBpOTE1X3N5bmNtYXBfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdCh1bmNv cmUsIGludGVsX3VuY29yZV9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGVuZ2luZSwgaW50ZWxf ZW5naW5lX2NzX21vY2tfc2VsZnRlc3RzKQotc2VsZnRlc3QoYnJlYWRjcnVtYnMsIGludGVsX2Jy ZWFkY3J1bWJzX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QodGltZWxpbmVzLCBpOTE1X3RpbWVs aW5lX21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QocmVxdWVzdHMsIGk5MTVfcmVxdWVzdF9tb2Nr X3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KG9iamVjdHMsIGk5MTVfZ2VtX29iamVjdF9tb2NrX3NlbGZ0 ZXN0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3Jl cXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYwpp bmRleCA4YjczYThjMjEzNzcuLjRkYmIwNjJkNGM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pOTE1X3JlcXVlc3QuYwpAQCAtMjUsOCArMjUsMTEgQEAKICNpbmNsdWRl IDxsaW51eC9wcmltZV9udW1iZXJzLmg+CiAKICNpbmNsdWRlICIuLi9pOTE1X3NlbGZ0ZXN0Lmgi CisjaW5jbHVkZSAiaTkxNV9yYW5kb20uaCIKKyNpbmNsdWRlICJsaWJfc3dfZmVuY2UuaCIKIAog I2luY2x1ZGUgIm1vY2tfY29udGV4dC5oIgorI2luY2x1ZGUgIm1vY2tfZHJtLmgiCiAjaW5jbHVk ZSAibW9ja19nZW1fZGV2aWNlLmgiCiAKIHN0YXRpYyBpbnQgaWd0X2FkZF9yZXF1ZXN0KHZvaWQg KmFyZykKQEAgLTI0Niw2ICsyNDksMjM5IEBAIHN0YXRpYyBpbnQgaWd0X3JlcXVlc3RfcmV3aW5k KHZvaWQgKmFyZykKIAlyZXR1cm4gZXJyOwogfQogCitzdHJ1Y3Qgc21va2V0ZXN0IHsKKwlzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmU7CisJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKipj b250ZXh0czsKKwl1bnNpZ25lZCBpbnQgbmNvbnRleHRzLCBtYXhfYmF0Y2g7CisJYXRvbWljX2xv bmdfdCBudW1fd2FpdHMsIG51bV9mZW5jZXM7CisJc3RydWN0IGk5MTVfcmVxdWVzdCAqKCpyZXF1 ZXN0X2FsbG9jKShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqLAorCQkJCQkgICAgICBzdHJ1Y3Qg aW50ZWxfZW5naW5lX2NzICopOworCit9OworCitzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAq CitfX21vY2tfcmVxdWVzdF9hbGxvYyhzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAorCQkg ICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlyZXR1cm4gbW9ja19yZXF1 ZXN0KGVuZ2luZSwgY3R4LCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgor X19saXZlX3JlcXVlc3RfYWxsb2Moc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCwKKwkJICAg ICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCit7CisJcmV0dXJuIGk5MTVfcmVxdWVz dF9hbGxvYyhlbmdpbmUsIGN0eCk7Cit9CisKK3N0YXRpYyBpbnQgX19pZ3RfYnJlYWRjcnVtYnNf c21va2V0ZXN0KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc21va2V0ZXN0ICp0ID0gYXJnOworCXN0 cnVjdCBtdXRleCAqQktMID0gJnQtPmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleDsKKwlz dHJ1Y3QgaTkxNV9yZXF1ZXN0ICoqcmVxdWVzdHM7CisJSTkxNV9STkRfU1RBVEUocHJuZyk7CisJ Y29uc3QgdW5zaWduZWQgaW50IHRvdGFsID0gNCAqIHQtPm5jb250ZXh0cyArIDE7CisJY29uc3Qg dW5zaWduZWQgaW50IG1heF9iYXRjaCA9IG1pbih0LT5uY29udGV4dHMsIHQtPm1heF9iYXRjaCkg LSAxOworCXVuc2lnbmVkIGludCBudW1fd2FpdHMgPSAwLCBudW1fZmVuY2VzID0gMDsKKwl1bnNp Z25lZCBpbnQgKm9yZGVyOworCWludCBlcnIgPSAwOworCisJcmVxdWVzdHMgPSBrbWFsbG9jX2Fy cmF5KHRvdGFsLCBzaXplb2YoKnJlcXVlc3RzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0 cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvcmRlciA9IGk5MTVfcmFuZG9tX29yZGVyKHRvdGFs LCAmcHJuZyk7CisJaWYgKCFvcmRlcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9y ZXF1ZXN0czsKKwl9CisKKwl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgeworCQlzdHJ1 Y3QgaTkxNV9zd19mZW5jZSAqc3VibWl0LCAqd2FpdDsKKwkJdW5zaWduZWQgaW50IG4sIGNvdW50 OworCisJCXN1Ym1pdCA9IGhlYXBfZmVuY2VfY3JlYXRlKEdGUF9LRVJORUwpOworCQlpZiAoIXN1 Ym1pdCkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWJyZWFrOworCQl9CisKKwkJd2FpdCA9IGhl YXBfZmVuY2VfY3JlYXRlKEdGUF9LRVJORUwpOworCQlpZiAoIXdhaXQpIHsKKwkJCWk5MTVfc3df ZmVuY2VfY29tbWl0KHN1Ym1pdCk7CisJCQloZWFwX2ZlbmNlX3B1dChzdWJtaXQpOworCQkJZXJy ID0gRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKworCQlpOTE1X3JhbmRvbV9yZW9yZGVyKG9yZGVy LCB0b3RhbCwgJnBybmcpOworCQljb3VudCA9IDEgKyBpOTE1X3ByYW5kb21fdTMyX21heF9zdGF0 ZShtYXhfYmF0Y2gsICZwcm5nKTsKKworCQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewor CQkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9CisJCQkJdC0+Y29udGV4dHNbb3JkZXJb bl0gJSB0LT5uY29udGV4dHNdOworCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7CisKKwkJCW11 dGV4X2xvY2soQktMKTsKKworCQkJcnEgPSB0LT5yZXF1ZXN0X2FsbG9jKGN0eCwgdC0+ZW5naW5l KTsKKwkJCWlmIChJU19FUlIocnEpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKEJLTCk7CisJCQkJZXJy ID0gUFRSX0VSUihycSk7CisJCQkJY291bnQgPSBuOworCQkJCWJyZWFrOworCQkJfQorCisJCQll cnIgPSBpOTE1X3N3X2ZlbmNlX2F3YWl0X3N3X2ZlbmNlX2dmcCgmcnEtPnN1Ym1pdCwKKwkJCQkJ CQkgICAgICAgc3VibWl0LAorCQkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKworCQkJcmVxdWVz dHNbbl0gPSBpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKKwkJCWk5MTVfcmVxdWVzdF9hZGQocnEpOwor CisJCQltdXRleF91bmxvY2soQktMKTsKKworCQkJaWYgKGVyciA+PSAwKQorCQkJCWVyciA9IGk5 MTVfc3dfZmVuY2VfYXdhaXRfZG1hX2ZlbmNlKHdhaXQsCisJCQkJCQkJCSAgICAmcnEtPmZlbmNl LAorCQkJCQkJCQkgICAgMCwKKwkJCQkJCQkJICAgIEdGUF9LRVJORUwpOworCQkJaWYgKGVyciA8 IDApIHsKKwkJCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKKwkJCQljb3VudCA9IG47CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKworCQlpOTE1X3N3X2ZlbmNlX2NvbW1pdChzdWJtaXQpOworCQlpOTE1 X3N3X2ZlbmNlX2NvbW1pdCh3YWl0KTsKKworCQlpZiAoIXdhaXRfZXZlbnRfdGltZW91dCh3YWl0 LT53YWl0LAorCQkJCQlpOTE1X3N3X2ZlbmNlX2RvbmUod2FpdCksCisJCQkJCUhaIC8gMikpIHsK KwkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxID0gcmVxdWVzdHNbY291bnQgLSAxXTsKKworCQkJ cHJfZXJyKCJ3YWl0aW5nIGZvciAlZCBmZW5jZXMgKGxhc3QgJWxseDolbGxkKSBvbiAlcyB0aW1l ZCBvdXQhXG4iLAorCQkJICAgICAgIGNvdW50LAorCQkJICAgICAgIHJxLT5mZW5jZS5jb250ZXh0 LCBycS0+ZmVuY2Uuc2Vxbm8sCisJCQkgICAgICAgdC0+ZW5naW5lLT5uYW1lKTsKKwkJCWk5MTVf Z2VtX3NldF93ZWRnZWQodC0+ZW5naW5lLT5pOTE1KTsKKwkJCUdFTV9CVUdfT04oIWk5MTVfcmVx dWVzdF9jb21wbGV0ZWQocnEpKTsKKwkJCWk5MTVfc3dfZmVuY2Vfd2FpdCh3YWl0KTsKKwkJCWVy ciA9IC1FSU87CisJCX0KKworCQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgeworCQkJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEgPSByZXF1ZXN0c1tuXTsKKworCQkJaWYgKCF0ZXN0X2JpdChE TUFfRkVOQ0VfRkxBR19TSUdOQUxFRF9CSVQsCisJCQkJICAgICAgJnJxLT5mZW5jZS5mbGFncykp IHsKKwkJCQlwcl9lcnIoIiVsbHU6JWxsdSB3YXMgbm90IHNpZ25hbGVkIVxuIiwKKwkJCQkgICAg ICAgcnEtPmZlbmNlLmNvbnRleHQsIHJxLT5mZW5jZS5zZXFubyk7CisJCQkJZXJyID0gLUVJTlZB TDsKKwkJCX0KKworCQkJaTkxNV9yZXF1ZXN0X3B1dChycSk7CisJCX0KKworCQloZWFwX2ZlbmNl X3B1dCh3YWl0KTsKKwkJaGVhcF9mZW5jZV9wdXQoc3VibWl0KTsKKworCQlpZiAoZXJyIDwgMCkK KwkJCWJyZWFrOworCisJCW51bV9mZW5jZXMgKz0gY291bnQ7CisJCW51bV93YWl0cysrOworCisJ CWNvbmRfcmVzY2hlZCgpOworCX0KKworCWF0b21pY19sb25nX2FkZChudW1fZmVuY2VzLCAmdC0+ bnVtX2ZlbmNlcyk7CisJYXRvbWljX2xvbmdfYWRkKG51bV93YWl0cywgJnQtPm51bV93YWl0cyk7 CisKKwlrZnJlZShvcmRlcik7CitvdXRfcmVxdWVzdHM6CisJa2ZyZWUocmVxdWVzdHMpOworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbW9ja19icmVhZGNydW1ic19zbW9rZXRlc3Qodm9p ZCAqYXJnKQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOworCXN0cnVj dCBzbW9rZXRlc3QgdCA9IHsKKwkJLmVuZ2luZSA9IGk5MTUtPmVuZ2luZVtSQ1NdLAorCQkubmNv bnRleHRzID0gMTAyNCwKKwkJLm1heF9iYXRjaCA9IDEwMjQsCisJCS5yZXF1ZXN0X2FsbG9jID0g X19tb2NrX3JlcXVlc3RfYWxsb2MKKwl9OworCXVuc2lnbmVkIGludCBuY3B1cyA9IG51bV9vbmxp bmVfY3B1cygpOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqKnRocmVhZHM7CisJdW5zaWduZWQgaW50 IG47CisJaW50IHJldCA9IDA7CisKKwl0aHJlYWRzID0ga21hbGxvY19hcnJheShuY3B1cywgc2l6 ZW9mKCp0aHJlYWRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0aHJlYWRzKQorCQlyZXR1cm4gLUVO T01FTTsKKworCXQuY29udGV4dHMgPQorCQlrbWFsbG9jX2FycmF5KHQubmNvbnRleHRzLCBzaXpl b2YoKnQuY29udGV4dHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXQuY29udGV4dHMpIHsKKwkJcmV0 ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdGhyZWFkczsKKwl9CisKKwltdXRleF9sb2NrKCZ0LmVu Z2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7CisJZm9yIChuID0gMDsgbiA8IHQubmNvbnRl eHRzOyBuKyspIHsKKwkJdC5jb250ZXh0c1tuXSA9IG1vY2tfY29udGV4dCh0LmVuZ2luZS0+aTkx NSwgIm1vY2siKTsKKwkJaWYgKCF0LmNvbnRleHRzW25dKSB7CisJCQlyZXQgPSAtRU5PTUVNOwor CQkJZ290byBvdXRfY29udGV4dHM7CisJCX0KKwl9CisKKwlmb3IgKG4gPSAwOyBuIDwgbmNwdXM7 IG4rKykgeworCQl0aHJlYWRzW25dID0ga3RocmVhZF9ydW4oX19pZ3RfYnJlYWRjcnVtYnNfc21v a2V0ZXN0LAorCQkJCQkgJnQsICJpZ3QvJWQiLCBuKTsKKwkJaWYgKElTX0VSUih0aHJlYWRzW25d KSkgeworCQkJcmV0ID0gUFRSX0VSUih0aHJlYWRzW25dKTsKKwkJCW5jcHVzID0gbjsKKwkJCWJy ZWFrOworCQl9CisKKwkJZ2V0X3Rhc2tfc3RydWN0KHRocmVhZHNbbl0pOworCX0KKwltdXRleF91 bmxvY2soJnQuZW5naW5lLT5pOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKworCW1zbGVlcChqaWZm aWVzX3RvX21zZWNzKGk5MTVfc2VsZnRlc3QudGltZW91dF9qaWZmaWVzKSk7CisKKwlmb3IgKG4g PSAwOyBuIDwgbmNwdXM7IG4rKykgeworCQlpbnQgZXJyOworCisJCWVyciA9IGt0aHJlYWRfc3Rv cCh0aHJlYWRzW25dKTsKKwkJaWYgKGVyciA8IDAgJiYgIXJldCkKKwkJCXJldCA9IGVycjsKKwor CQlwdXRfdGFza19zdHJ1Y3QodGhyZWFkc1tuXSk7CisJfQorCXByX2luZm8oIkNvbXBsZXRlZCAl bHUgd2FpdHMgZm9yICVsdSBmZW5jZSBhY3Jvc3MgJWQgY3B1c1xuIiwKKwkJYXRvbWljX2xvbmdf cmVhZCgmdC5udW1fd2FpdHMpLAorCQlhdG9taWNfbG9uZ19yZWFkKCZ0Lm51bV9mZW5jZXMpLAor CQluY3B1cyk7CisKKwltdXRleF9sb2NrKCZ0LmVuZ2luZS0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRl eCk7CitvdXRfY29udGV4dHM6CisJZm9yIChuID0gMDsgbiA8IHQubmNvbnRleHRzOyBuKyspIHsK KwkJaWYgKCF0LmNvbnRleHRzW25dKQorCQkJYnJlYWs7CisJCW1vY2tfY29udGV4dF9jbG9zZSh0 LmNvbnRleHRzW25dKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ0LmVuZ2luZS0+aTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7CisJa2ZyZWUodC5jb250ZXh0cyk7CitvdXRfdGhyZWFkczoKKwlrZnJlZSh0 aHJlYWRzKTsKKworCXJldHVybiByZXQ7Cit9CisKIGludCBpOTE1X3JlcXVlc3RfbW9ja19zZWxm dGVzdHModm9pZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1td ID0gewpAQCAtMjUzLDYgKzQ4OSw3IEBAIGludCBpOTE1X3JlcXVlc3RfbW9ja19zZWxmdGVzdHMo dm9pZCkKIAkJU1VCVEVTVChpZ3Rfd2FpdF9yZXF1ZXN0KSwKIAkJU1VCVEVTVChpZ3RfZmVuY2Vf d2FpdCksCiAJCVNVQlRFU1QoaWd0X3JlcXVlc3RfcmV3aW5kKSwKKwkJU1VCVEVTVChtb2NrX2Jy ZWFkY3J1bWJzX3Ntb2tldGVzdCksCiAJfTsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NTsKIAlpbnQgZXJyOwpAQCAtODY5LDYgKzExMDYsMTY2IEBAIHN0YXRpYyBpbnQgbGl2ZV9zZXF1 ZW50aWFsX2VuZ2luZXModm9pZCAqYXJnKQogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQK K21heF9iYXRjaGVzKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKK3sKKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKKwlpbnQgcmV0 OworCisJLyoKKwkgKiBCZWZvcmUgZXhlY2xpc3RzLCBhbGwgY29udGV4dHMgc2hhcmUgdGhlIHNh bWUgcmluZ2J1ZmZlci4gV2l0aAorCSAqIGV4ZWNsaXN0cywgZWFjaCBjb250ZXh0L2VuZ2luZSBo YXMgYSBzZXBhcmF0ZSByaW5nYnVmZmVyIGFuZAorCSAqIGZvciB0aGUgcHVycG9zZXMgb2YgdGhp cyB0ZXN0LCBpbmV4aGF1c3RpYmxlLgorCSAqCisJICogRm9yIHRoZSBnbG9iYWwgcmluZ2J1ZmZl ciB0aG91Z2gsIHdlIGhhdmUgdG8gYmUgdmVyeSBjYXJlZnVsCisJICogdGhhdCB3ZSBkbyBub3Qg d3JhcCB3aGlsZSBwcmV2ZW50aW5nIHRoZSBleGVjdXRpb24gb2YgcmVxdWVzdHMKKwkgKiB3aXRo IGEgdW5zaWduYWxlZCBmZW5jZS4KKwkgKi8KKwlpZiAoSEFTX0VYRUNMSVNUUyhjdHgtPmk5MTUp KQorCQlyZXR1cm4gSU5UX01BWDsKKworCXJxID0gaTkxNV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwg Y3R4KTsKKwlpZiAoSVNfRVJSKHJxKSkgeworCQlyZXQgPSBQVFJfRVJSKHJxKTsKKwl9IGVsc2Ug eworCQlpbnQgc3o7CisKKwkJcmV0ID0gcnEtPnJpbmctPnNpemUgLSBycS0+cmVzZXJ2ZWRfc3Bh Y2U7CisJCWk5MTVfcmVxdWVzdF9hZGQocnEpOworCisJCXN6ID0gcnEtPnJpbmctPmVtaXQgLSBy cS0+aGVhZDsKKwkJaWYgKHN6IDwgMCkKKwkJCXN6ICs9IHJxLT5yaW5nLT5zaXplOworCQlyZXQg Lz0gc3o7CisJCXJldCAvPSAyOyAvKiBsZWF2ZSBoYWxmIHNwYXJlLCBpbiBjYXNlIG9mIGVtZXJn ZW5jeSEgKi8KKworCQkvKiBPbmUgcmluZyBpbnRlcmxlYXZlZCBiZXR3ZWVuIHJlcXVlc3RzIGZy b20gYWxsIGNwdXMgKi8KKwkJcmV0IC89IG51bV9vbmxpbmVfY3B1cygpICsgMTsKKwl9CisKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxpdmVfYnJlYWRjcnVtYnNfc21va2V0ZXN0KHZv aWQgKmFyZykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKKwlzdHJ1 Y3Qgc21va2V0ZXN0IHRbSTkxNV9OVU1fRU5HSU5FU107CisJdW5zaWduZWQgaW50IG5jcHVzID0g bnVtX29ubGluZV9jcHVzKCk7CisJdW5zaWduZWQgbG9uZyBudW1fd2FpdHMsIG51bV9mZW5jZXM7 CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOworCXN0cnVjdCB0YXNrX3N0cnVjdCAq KnRocmVhZHM7CisJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CisJaW50ZWxfd2FrZXJlZl90IHdh a2VyZWY7CisJc3RydWN0IGRybV9maWxlICpmaWxlOworCXN0cnVjdCBsaXZlX3Rlc3QgbGl2ZTsK Kwl1bnNpZ25lZCBpbnQgbjsKKwlpbnQgcmV0ID0gMDsKKworCXdha2VyZWYgPSBpbnRlbF9ydW50 aW1lX3BtX2dldChpOTE1KTsKKworCWZpbGUgPSBtb2NrX2ZpbGUoaTkxNSk7CisJaWYgKElTX0VS UihmaWxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGZpbGUpOworCQlnb3RvIG91dF9ycG07CisJfQor CisJdGhyZWFkcyA9IGtjYWxsb2MobmNwdXMgKiBJOTE1X05VTV9FTkdJTkVTLAorCQkJICBzaXpl b2YoKnRocmVhZHMpLAorCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVhZHMpCisJCXJldHVy biAtRU5PTUVNOworCisJbWVtc2V0KCZ0WzBdLCAwLCBzaXplb2YodFswXSkpOworCXRbMF0ucmVx dWVzdF9hbGxvYyA9IF9fbGl2ZV9yZXF1ZXN0X2FsbG9jOworCXRbMF0ubmNvbnRleHRzID0gNjQ7 CisJdFswXS5jb250ZXh0cyA9IGttYWxsb2NfYXJyYXkodFswXS5uY29udGV4dHMsCisJCQkJICAg ICAgc2l6ZW9mKCp0WzBdLmNvbnRleHRzKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAo IXRbMF0uY29udGV4dHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdGhyZWFkczsK Kwl9CisKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlmb3IgKG4gPSAw OyBuIDwgdFswXS5uY29udGV4dHM7IG4rKykgeworCQl0WzBdLmNvbnRleHRzW25dID0gbGl2ZV9j b250ZXh0KGk5MTUsIGZpbGUpOworCQlpZiAoIXRbMF0uY29udGV4dHNbbl0pIHsKKwkJCXJldCA9 IC1FTk9NRU07CisJCQlnb3RvIG91dF9jb250ZXh0czsKKwkJfQorCX0KKworCXJldCA9IGJlZ2lu X2xpdmVfdGVzdCgmbGl2ZSwgaTkxNSwgX19mdW5jX18sICIiKTsKKwlpZiAocmV0KQorCQlnb3Rv IG91dF9jb250ZXh0czsKKworCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7CisJ CXRbaWRdID0gdFswXTsKKwkJdFtpZF0uZW5naW5lID0gZW5naW5lOworCQl0W2lkXS5tYXhfYmF0 Y2ggPSBtYXhfYmF0Y2hlcyh0WzBdLmNvbnRleHRzWzBdLCBlbmdpbmUpOworCQlpZiAodFtpZF0u bWF4X2JhdGNoIDwgMCkgeworCQkJcmV0ID0gdFtpZF0ubWF4X2JhdGNoOworCQkJZ290byBvdXRf Zmx1c2g7CisJCX0KKwkJcHJfZGVidWcoIkxpbWl0aW5nIGJhdGNoZXMgdG8gJWQgcmVxdWVzdHMg b24gJXNcbiIsCisJCQkgdFtpZF0ubWF4X2JhdGNoLCBlbmdpbmUtPm5hbWUpOworCisJCWZvciAo biA9IDA7IG4gPCBuY3B1czsgbisrKSB7CisJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKwor CQkJdHNrID0ga3RocmVhZF9ydW4oX19pZ3RfYnJlYWRjcnVtYnNfc21va2V0ZXN0LAorCQkJCQkg ICZ0W2lkXSwgImlndC8lZC4lZCIsIGlkLCBuKTsKKwkJCWlmIChJU19FUlIodHNrKSkgeworCQkJ CXJldCA9IFBUUl9FUlIodHNrKTsKKwkJCQlnb3RvIG91dF9mbHVzaDsKKwkJCX0KKworCQkJZ2V0 X3Rhc2tfc3RydWN0KHRzayk7CisJCQl0aHJlYWRzW2lkICogbmNwdXMgKyBuXSA9IHRzazsKKwkJ fQorCX0KKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOworCisJbXNsZWVw KGppZmZpZXNfdG9fbXNlY3MoaTkxNV9zZWxmdGVzdC50aW1lb3V0X2ppZmZpZXMpKTsKKworb3V0 X2ZsdXNoOgorCW51bV93YWl0cyA9IDA7CisJbnVtX2ZlbmNlcyA9IDA7CisJZm9yX2VhY2hfZW5n aW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKKwkJZm9yIChuID0gMDsgbiA8IG5jcHVzOyBuKyspIHsK KwkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gdGhyZWFkc1tpZCAqIG5jcHVzICsgbl07CisJ CQlpbnQgZXJyOworCisJCQlpZiAoIXRzaykKKwkJCQljb250aW51ZTsKKworCQkJZXJyID0ga3Ro cmVhZF9zdG9wKHRzayk7CisJCQlpZiAoZXJyIDwgMCAmJiAhcmV0KQorCQkJCXJldCA9IGVycjsK KworCQkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CisJCX0KKworCQludW1fd2FpdHMgKz0gYXRvbWlj X2xvbmdfcmVhZCgmdFtpZF0ubnVtX3dhaXRzKTsKKwkJbnVtX2ZlbmNlcyArPSBhdG9taWNfbG9u Z19yZWFkKCZ0W2lkXS5udW1fZmVuY2VzKTsKKwl9CisJcHJfaW5mbygiQ29tcGxldGVkICVsdSB3 YWl0cyBmb3IgJWx1IGZlbmNlIGFjcm9zcyAlZCBlbmdpbmVzIGFuZCAlZCBjcHVzXG4iLAorCQlu dW1fd2FpdHMsIG51bV9mZW5jZXMsIFJVTlRJTUVfSU5GTyhpOTE1KS0+bnVtX3JpbmdzLCBuY3B1 cyk7CisKKwltdXRleF9sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlyZXQgPSBlbmRf bGl2ZV90ZXN0KCZsaXZlKSA/OiByZXQ7CitvdXRfY29udGV4dHM6CisJbXV0ZXhfdW5sb2NrKCZp OTE1LT5kcm0uc3RydWN0X211dGV4KTsKKwlrZnJlZSh0WzBdLmNvbnRleHRzKTsKK291dF90aHJl YWRzOgorCWtmcmVlKHRocmVhZHMpOworCW1vY2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOworb3V0 X3JwbToKKwlpbnRlbF9ydW50aW1lX3BtX3B1dChpOTE1LCB3YWtlcmVmKTsKKworCXJldHVybiBy ZXQ7Cit9CisKIGludCBpOTE1X3JlcXVlc3RfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVz dHNbXSA9IHsKQEAgLTg3Niw2ICsxMjczLDcgQEAgaW50IGk5MTVfcmVxdWVzdF9saXZlX3NlbGZ0 ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAkJU1VCVEVTVChsaXZlX2FsbF9l bmdpbmVzKSwKIAkJU1VCVEVTVChsaXZlX3NlcXVlbnRpYWxfZW5naW5lcyksCiAJCVNVQlRFU1Qo bGl2ZV9lbXB0eV9yZXF1ZXN0KSwKKwkJU1VCVEVTVChsaXZlX2JyZWFkY3J1bWJzX3Ntb2tldGVz dCksCiAJfTsKIAogCWlmIChpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKCZpOTE1LT5ncHVfZXJyb3Ip KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lndF9zcGlubmVy LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaWd0X3NwaW5uZXIuYwppbmRleCAw ZTcwZGYwMjMwYjguLjllYmQ5MjI1Njg0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2lndF9zcGlubmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2lndF9zcGlubmVyLmMKQEAgLTE4NSwxMSArMTg1LDYgQEAgdm9pZCBpZ3Rfc3Bpbm5l cl9maW5pKHN0cnVjdCBpZ3Rfc3Bpbm5lciAqc3BpbikKIAogYm9vbCBpZ3Rfd2FpdF9mb3Jfc3Bp bm5lcihzdHJ1Y3QgaWd0X3NwaW5uZXIgKnNwaW4sIHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQog ewotCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHJxLT5leGVjdXRlLAotCQkJCVJFQURfT05DRShy cS0+Z2xvYmFsX3NlcW5vKSwKLQkJCQltc2Vjc190b19qaWZmaWVzKDEwKSkpCi0JCXJldHVybiBm YWxzZTsKLQogCXJldHVybiAhKHdhaXRfZm9yX3VzKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19zZXFu byhzcGluLCBycSksCiAJCQkJCSAgICAgICBycS0+ZmVuY2Uuc2Vxbm8pLAogCQkJICAgICAxMCkg JiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9icmVh ZGNydW1icy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2JyZWFkY3J1 bWJzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwM2I0MDdmZGJlMi4uMDAwMDAw MDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9icmVhZGNy dW1icy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg wqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAotICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgotICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCi0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAot ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgotICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKLSAqIElO IFRIRSBTT0ZUV0FSRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3QuaCIK LSNpbmNsdWRlICJpOTE1X3JhbmRvbS5oIgotCi0jaW5jbHVkZSAibW9ja19nZW1fZGV2aWNlLmgi Ci0jaW5jbHVkZSAibW9ja19lbmdpbmUuaCIKLQotc3RhdGljIGludCBjaGVja19yYnRyZWUoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJY29uc3QgdW5zaWduZWQgbG9uZyAqYml0 bWFwLAotCQkJY29uc3Qgc3RydWN0IGludGVsX3dhaXQgKndhaXRlcnMsCi0JCQljb25zdCBpbnQg Y291bnQpCi17Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRj cnVtYnM7Ci0Jc3RydWN0IHJiX25vZGUgKnJiOwotCWludCBuOwotCi0JaWYgKCZiLT5pcnFfd2Fp dC0+bm9kZSAhPSByYl9maXJzdCgmYi0+d2FpdGVycykpIHsKLQkJcHJfZXJyKCJGaXJzdCB3YWl0 ZXIgZG9lcyBub3QgbWF0Y2ggZmlyc3QgZWxlbWVudCBvZiB3YWl0LXRyZWVcbiIpOwotCQlyZXR1 cm4gLUVJTlZBTDsKLQl9Ci0KLQluID0gZmluZF9maXJzdF9iaXQoYml0bWFwLCBjb3VudCk7Ci0J Zm9yIChyYiA9IHJiX2ZpcnN0KCZiLT53YWl0ZXJzKTsgcmI7IHJiID0gcmJfbmV4dChyYikpIHsK LQkJc3RydWN0IGludGVsX3dhaXQgKncgPSBjb250YWluZXJfb2YocmIsIHR5cGVvZigqdyksIG5v ZGUpOwotCQlpbnQgaWR4ID0gdyAtIHdhaXRlcnM7Ci0KLQkJaWYgKCF0ZXN0X2JpdChpZHgsIGJp dG1hcCkpIHsKLQkJCXByX2Vycigid2FpdGVyWyVkLCBzZXFubz0lZF0gcmVtb3ZlZCBidXQgc3Rp bGwgaW4gd2FpdC10cmVlXG4iLAotCQkJICAgICAgIGlkeCwgdy0+c2Vxbm8pOwotCQkJcmV0dXJu IC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAobiAhPSBpZHgpIHsKLQkJCXByX2Vycigid2FpdGVyWyVk LCBzZXFubz0lZF0gZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgbmV4dCBlbGVtZW50IGluIHRyZWUg WyVkXVxuIiwKLQkJCSAgICAgICBpZHgsIHctPnNlcW5vLCBuKTsKLQkJCXJldHVybiAtRUlOVkFM OwotCQl9Ci0KLQkJbiA9IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBjb3VudCwgbiArIDEpOwotCX0K LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX2NvbXBsZXRpb24oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1h cCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfd2FpdCAqd2FpdGVycywKLQkJCSAgICBjb25z dCBpbnQgY291bnQpCi17Ci0JaW50IG47Ci0KLQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykg ewotCQlpZiAoaW50ZWxfd2FpdF9jb21wbGV0ZSgmd2FpdGVyc1tuXSkgIT0gISF0ZXN0X2JpdChu LCBiaXRtYXApKQotCQkJY29udGludWU7Ci0KLQkJcHJfZXJyKCJ3YWl0ZXJbJWQsIHNlcW5vPSVk XSBpcyAlcywgYnV0IGV4cGVjdGVkICVzXG4iLAotCQkgICAgICAgbiwgd2FpdGVyc1tuXS5zZXFu bywKLQkJICAgICAgIGludGVsX3dhaXRfY29tcGxldGUoJndhaXRlcnNbbl0pID8gImNvbXBsZXRl IiA6ICJhY3RpdmUiLAotCQkgICAgICAgdGVzdF9iaXQobiwgYml0bWFwKSA/ICJhY3RpdmUiIDog ImNvbXBsZXRlIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGNoZWNrX3JidHJlZV9lbXB0eShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCi17Ci0Jc3RydWN0IGludGVsX2JyZWFkY3J1bWJzICpiID0gJmVuZ2luZS0+YnJlYWRjcnVt YnM7Ci0KLQlpZiAoYi0+aXJxX3dhaXQpIHsKLQkJcHJfZXJyKCJFbXB0eSBicmVhZGNydW1icyBz dGlsbCBoYXMgYSB3YWl0ZXJcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIVJC X0VNUFRZX1JPT1QoJmItPndhaXRlcnMpKSB7Ci0JCXByX2VycigiRW1wdHkgYnJlYWRjcnVtYnMs IGJ1dCB3YWl0LXRyZWUgbm90IGVtcHR5XG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0J cmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWd0X3JhbmRvbV9pbnNlcnRfcmVtb3ZlKHZvaWQg KmFyZykKLXsKLQljb25zdCB1MzIgc2Vxbm9fYmlhcyA9IDB4MTAwMDsKLQlJOTE1X1JORF9TVEFU RShwcm5nKTsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBhcmc7Ci0Jc3RydWN0 IGludGVsX3dhaXQgKndhaXRlcnM7Ci0JY29uc3QgaW50IGNvdW50ID0gNDA5NjsKLQl1bnNpZ25l ZCBpbnQgKm9yZGVyOwotCXVuc2lnbmVkIGxvbmcgKmJpdG1hcDsKLQlpbnQgZXJyID0gLUVOT01F TTsKLQlpbnQgbjsKLQotCW1vY2tfZW5naW5lX3Jlc2V0KGVuZ2luZSk7Ci0KLQl3YWl0ZXJzID0g a3ZtYWxsb2NfYXJyYXkoY291bnQsIHNpemVvZigqd2FpdGVycyksIEdGUF9LRVJORUwpOwotCWlm ICghd2FpdGVycykKLQkJZ290byBvdXRfZW5naW5lczsKLQotCWJpdG1hcCA9IGtjYWxsb2MoRElW X1JPVU5EX1VQKGNvdW50LCBCSVRTX1BFUl9MT05HKSwgc2l6ZW9mKCpiaXRtYXApLAotCQkJIEdG UF9LRVJORUwpOwotCWlmICghYml0bWFwKQotCQlnb3RvIG91dF93YWl0ZXJzOwotCi0Jb3JkZXIg PSBpOTE1X3JhbmRvbV9vcmRlcihjb3VudCwgJnBybmcpOwotCWlmICghb3JkZXIpCi0JCWdvdG8g b3V0X2JpdG1hcDsKLQotCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKQotCQlpbnRlbF93YWl0 X2luaXRfZm9yX3NlcW5vKCZ3YWl0ZXJzW25dLCBzZXFub19iaWFzICsgbik7Ci0KLQllcnIgPSBj aGVja19yYnRyZWUoZW5naW5lLCBiaXRtYXAsIHdhaXRlcnMsIGNvdW50KTsKLQlpZiAoZXJyKQot CQlnb3RvIG91dF9vcmRlcjsKLQotCS8qIEFkZCBhbmQgcmVtb3ZlIHdhaXRlcnMgaW50byB0aGUg cmJ0cmVlIGluIHJhbmRvbSBvcmRlci4gQXQgZWFjaAotCSAqIHN0ZXAsIHdlIHZlcmlmeSB0aGF0 IHRoZSByYnRyZWUgaXMgY29ycmVjdGx5IG9yZGVyZWQuCi0JICovCi0JZm9yIChuID0gMDsgbiA8 IGNvdW50OyBuKyspIHsKLQkJaW50IGkgPSBvcmRlcltuXTsKLQotCQlpbnRlbF9lbmdpbmVfYWRk X3dhaXQoZW5naW5lLCAmd2FpdGVyc1tpXSk7Ci0JCV9fc2V0X2JpdChpLCBiaXRtYXApOwotCi0J CWVyciA9IGNoZWNrX3JidHJlZShlbmdpbmUsIGJpdG1hcCwgd2FpdGVycywgY291bnQpOwotCQlp ZiAoZXJyKQotCQkJZ290byBvdXRfb3JkZXI7Ci0JfQotCi0JaTkxNV9yYW5kb21fcmVvcmRlcihv cmRlciwgY291bnQsICZwcm5nKTsKLQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewotCQlp bnQgaSA9IG9yZGVyW25dOwotCi0JCWludGVsX2VuZ2luZV9yZW1vdmVfd2FpdChlbmdpbmUsICZ3 YWl0ZXJzW2ldKTsKLQkJX19jbGVhcl9iaXQoaSwgYml0bWFwKTsKLQotCQllcnIgPSBjaGVja19y YnRyZWUoZW5naW5lLCBiaXRtYXAsIHdhaXRlcnMsIGNvdW50KTsKLQkJaWYgKGVycikKLQkJCWdv dG8gb3V0X29yZGVyOwotCX0KLQotCWVyciA9IGNoZWNrX3JidHJlZV9lbXB0eShlbmdpbmUpOwot b3V0X29yZGVyOgotCWtmcmVlKG9yZGVyKTsKLW91dF9iaXRtYXA6Ci0Ja2ZyZWUoYml0bWFwKTsK LW91dF93YWl0ZXJzOgotCWt2ZnJlZSh3YWl0ZXJzKTsKLW91dF9lbmdpbmVzOgotCW1vY2tfZW5n aW5lX2ZsdXNoKGVuZ2luZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBpZ3RfaW5z ZXJ0X2NvbXBsZXRlKHZvaWQgKmFyZykKLXsKLQljb25zdCB1MzIgc2Vxbm9fYmlhcyA9IDB4MTAw MDsKLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPSBhcmc7Ci0Jc3RydWN0IGludGVs X3dhaXQgKndhaXRlcnM7Ci0JY29uc3QgaW50IGNvdW50ID0gNDA5NjsKLQl1bnNpZ25lZCBsb25n ICpiaXRtYXA7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0JaW50IG4sIG07Ci0KLQltb2NrX2VuZ2lu ZV9yZXNldChlbmdpbmUpOwotCi0Jd2FpdGVycyA9IGt2bWFsbG9jX2FycmF5KGNvdW50LCBzaXpl b2YoKndhaXRlcnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhaXRlcnMpCi0JCWdvdG8gb3V0X2Vu Z2luZXM7Ci0KLQliaXRtYXAgPSBrY2FsbG9jKERJVl9ST1VORF9VUChjb3VudCwgQklUU19QRVJf TE9ORyksIHNpemVvZigqYml0bWFwKSwKLQkJCSBHRlBfS0VSTkVMKTsKLQlpZiAoIWJpdG1hcCkK LQkJZ290byBvdXRfd2FpdGVyczsKLQotCWZvciAobiA9IDA7IG4gPCBjb3VudDsgbisrKSB7Ci0J CWludGVsX3dhaXRfaW5pdF9mb3Jfc2Vxbm8oJndhaXRlcnNbbl0sIG4gKyBzZXFub19iaWFzKTsK LQkJaW50ZWxfZW5naW5lX2FkZF93YWl0KGVuZ2luZSwgJndhaXRlcnNbbl0pOwotCQlfX3NldF9i aXQobiwgYml0bWFwKTsKLQl9Ci0JZXJyID0gY2hlY2tfcmJ0cmVlKGVuZ2luZSwgYml0bWFwLCB3 YWl0ZXJzLCBjb3VudCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfYml0bWFwOwotCi0JLyogT24g ZWFjaCBzdGVwLCB3ZSBhZHZhbmNlIHRoZSBzZXFubyBzbyB0aGF0IHNldmVyYWwgd2FpdGVycyBh cmUgdGhlbgotCSAqIGNvbXBsZXRlICh3ZSBpbmNyZWFzZSB0aGUgc2Vxbm8gYnkgaW5jcmVhc2lu Z2x5IGxhcmdlciB2YWx1ZXMgdG8KLQkgKiByZXRpcmUgbW9yZSBhbmQgbW9yZSB3YWl0ZXJzIGF0 IG9uY2UpLiBBbGwgcmV0aXJlZCB3YWl0ZXJzIHNob3VsZAotCSAqIGJlIHdva2VuIGFuZCByZW1v dmVkIGZyb20gdGhlIHJidHJlZSwgYW5kIHNvIHRoYXQgd2UgY2hlY2suCi0JICovCi0JZm9yIChu ID0gMDsgbiA8IGNvdW50OyBuID0gbSkgewotCQlpbnQgc2Vxbm8gPSAyICogbjsKLQotCQlHRU1f QlVHX09OKGZpbmRfZmlyc3RfYml0KGJpdG1hcCwgY291bnQpICE9IG4pOwotCi0JCWlmIChpbnRl bF93YWl0X2NvbXBsZXRlKCZ3YWl0ZXJzW25dKSkgewotCQkJcHJfZXJyKCJ3YWl0ZXJbJWQsIHNl cW5vPSVkXSBjb21wbGV0ZWQgdG9vIGVhcmx5XG4iLAotCQkJICAgICAgIG4sIHdhaXRlcnNbbl0u c2Vxbm8pOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0X2JpdG1hcDsKLQkJfQotCi0J CS8qIGNvbXBsZXRlIHRoZSBmb2xsb3dpbmcgd2FpdGVycyAqLwotCQltb2NrX3NlcW5vX2FkdmFu Y2UoZW5naW5lLCBzZXFubyArIHNlcW5vX2JpYXMpOwotCQlmb3IgKG0gPSBuOyBtIDw9IHNlcW5v OyBtKyspIHsKLQkJCWlmIChtID09IGNvdW50KQotCQkJCWJyZWFrOwotCi0JCQlHRU1fQlVHX09O KCF0ZXN0X2JpdChtLCBiaXRtYXApKTsKLQkJCV9fY2xlYXJfYml0KG0sIGJpdG1hcCk7Ci0JCX0K LQotCQlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQoZW5naW5lLCAmd2FpdGVyc1tuXSk7Ci0JCVJC X0NMRUFSX05PREUoJndhaXRlcnNbbl0ubm9kZSk7Ci0KLQkJZXJyID0gY2hlY2tfcmJ0cmVlKGVu Z2luZSwgYml0bWFwLCB3YWl0ZXJzLCBjb3VudCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByX2Vycigi cmJ0cmVlIGNvcnJ1cHQgYWZ0ZXIgc2Vxbm8gYWR2YW5jZSB0byAlZFxuIiwKLQkJCSAgICAgICBz ZXFubyArIHNlcW5vX2JpYXMpOwotCQkJZ290byBvdXRfYml0bWFwOwotCQl9Ci0KLQkJZXJyID0g Y2hlY2tfY29tcGxldGlvbihlbmdpbmUsIGJpdG1hcCwgd2FpdGVycywgY291bnQpOwotCQlpZiAo ZXJyKSB7Ci0JCQlwcl9lcnIoImNvbXBsZXRpb25zIGFmdGVyIHNlcW5vIGFkdmFuY2UgdG8gJWQg ZmFpbGVkXG4iLAotCQkJICAgICAgIHNlcW5vICsgc2Vxbm9fYmlhcyk7Ci0JCQlnb3RvIG91dF9i aXRtYXA7Ci0JCX0KLQl9Ci0KLQllcnIgPSBjaGVja19yYnRyZWVfZW1wdHkoZW5naW5lKTsKLW91 dF9iaXRtYXA6Ci0Ja2ZyZWUoYml0bWFwKTsKLW91dF93YWl0ZXJzOgotCWt2ZnJlZSh3YWl0ZXJz KTsKLW91dF9lbmdpbmVzOgotCW1vY2tfZW5naW5lX2ZsdXNoKGVuZ2luZSk7Ci0JcmV0dXJuIGVy cjsKLX0KLQotc3RydWN0IGlndF93YWtldXAgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwot CWF0b21pY190ICpyZWFkeSwgKnNldCwgKmRvbmU7Ci0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jZGVmaW5lIFNUT1AgMAotI2RlZmluZSBJ RExFIDEKLQl3YWl0X3F1ZXVlX2hlYWRfdCAqd3E7Ci0JdTMyIHNlcW5vOwotfTsKLQotc3RhdGlj IGJvb2wgd2FpdF9mb3JfcmVhZHkoc3RydWN0IGlndF93YWtldXAgKncpCi17Ci0JREVGSU5FX1dB SVQocmVhZHkpOwotCi0Jc2V0X2JpdChJRExFLCAmdy0+ZmxhZ3MpOwotCWlmIChhdG9taWNfZGVj X2FuZF90ZXN0KHctPmRvbmUpKQotCQl3YWtlX3VwX3Zhcih3LT5kb25lKTsKLQotCWlmICh0ZXN0 X2JpdChTVE9QLCAmdy0+ZmxhZ3MpKQotCQlnb3RvIG91dDsKLQotCWZvciAoOzspIHsKLQkJcHJl cGFyZV90b193YWl0KHctPndxLCAmcmVhZHksIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChh dG9taWNfcmVhZCh3LT5yZWFkeSkgPT0gMCkKLQkJCWJyZWFrOwotCi0JCXNjaGVkdWxlKCk7Ci0J fQotCWZpbmlzaF93YWl0KHctPndxLCAmcmVhZHkpOwotCi1vdXQ6Ci0JY2xlYXJfYml0KElETEUs ICZ3LT5mbGFncyk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3Qody0+c2V0KSkKLQkJd2FrZV91 cF92YXIody0+c2V0KTsKLQotCXJldHVybiAhdGVzdF9iaXQoU1RPUCwgJnctPmZsYWdzKTsKLX0K LQotc3RhdGljIGludCBpZ3Rfd2FrZXVwX3RocmVhZCh2b2lkICphcmcpCi17Ci0Jc3RydWN0IGln dF93YWtldXAgKncgPSBhcmc7Ci0Jc3RydWN0IGludGVsX3dhaXQgd2FpdDsKLQotCXdoaWxlICh3 YWl0X2Zvcl9yZWFkeSh3KSkgewotCQlHRU1fQlVHX09OKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7 Ci0KLQkJaW50ZWxfd2FpdF9pbml0X2Zvcl9zZXFubygmd2FpdCwgdy0+c2Vxbm8pOwotCQlpbnRl bF9lbmdpbmVfYWRkX3dhaXQody0+ZW5naW5lLCAmd2FpdCk7Ci0JCWZvciAoOzspIHsKLQkJCXNl dF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWlmIChpOTE1X3NlcW5v X3Bhc3NlZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKHctPmVuZ2luZSksCi0JCQkJCSAgICAgIHct PnNlcW5vKSkKLQkJCQlicmVhazsKLQotCQkJaWYgKHRlc3RfYml0KFNUT1AsICZ3LT5mbGFncykp IC8qIGVtZXJnZW5jeSBlc2NhcGUgKi8KLQkJCQlicmVhazsKLQotCQkJc2NoZWR1bGUoKTsKLQkJ fQotCQlpbnRlbF9lbmdpbmVfcmVtb3ZlX3dhaXQody0+ZW5naW5lLCAmd2FpdCk7Ci0JCV9fc2V0 X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3Rh dGljIHZvaWQgaWd0X3dha2VfYWxsX3N5bmMoYXRvbWljX3QgKnJlYWR5LAotCQkJICAgICAgYXRv bWljX3QgKnNldCwKLQkJCSAgICAgIGF0b21pY190ICpkb25lLAotCQkJICAgICAgd2FpdF9xdWV1 ZV9oZWFkX3QgKndxLAotCQkJICAgICAgaW50IGNvdW50KQotewotCWF0b21pY19zZXQoc2V0LCBj b3VudCk7Ci0JYXRvbWljX3NldChyZWFkeSwgMCk7Ci0Jd2FrZV91cF9hbGwod3EpOwotCi0Jd2Fp dF92YXJfZXZlbnQoc2V0LCAhYXRvbWljX3JlYWQoc2V0KSk7Ci0JYXRvbWljX3NldChyZWFkeSwg Y291bnQpOwotCWF0b21pY19zZXQoZG9uZSwgY291bnQpOwotfQotCi1zdGF0aWMgaW50IGlndF93 YWtldXAodm9pZCAqYXJnKQotewotCUk5MTVfUk5EX1NUQVRFKHBybmcpOwotCXN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSA9IGFyZzsKLQlzdHJ1Y3QgaWd0X3dha2V1cCAqd2FpdGVyczsK LQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKHdxKTsKLQljb25zdCBpbnQgY291bnQg PSA0MDk2OwotCWNvbnN0IHUzMiBtYXhfc2Vxbm8gPSBjb3VudCAvIDQ7Ci0JYXRvbWljX3QgcmVh ZHksIHNldCwgZG9uZTsKLQlpbnQgZXJyID0gLUVOT01FTTsKLQlpbnQgbiwgc3RlcDsKLQotCW1v Y2tfZW5naW5lX3Jlc2V0KGVuZ2luZSk7Ci0KLQl3YWl0ZXJzID0ga3ZtYWxsb2NfYXJyYXkoY291 bnQsIHNpemVvZigqd2FpdGVycyksIEdGUF9LRVJORUwpOwotCWlmICghd2FpdGVycykKLQkJZ290 byBvdXRfZW5naW5lczsKLQotCS8qIENyZWF0ZSBhIGxhcmdlIG51bWJlciBvZiB0aHJlYWRzLCBl YWNoIHdhaXRpbmcgb24gYSByYW5kb20gc2Vxbm8uCi0JICogTXVsdGlwbGUgd2FpdGVycyB3aWxs IGJlIHdhaXRpbmcgZm9yIHRoZSBzYW1lIHNlcW5vLgotCSAqLwotCWF0b21pY19zZXQoJnJlYWR5 LCBjb3VudCk7Ci0JZm9yIChuID0gMDsgbiA8IGNvdW50OyBuKyspIHsKLQkJd2FpdGVyc1tuXS53 cSA9ICZ3cTsKLQkJd2FpdGVyc1tuXS5yZWFkeSA9ICZyZWFkeTsKLQkJd2FpdGVyc1tuXS5zZXQg PSAmc2V0OwotCQl3YWl0ZXJzW25dLmRvbmUgPSAmZG9uZTsKLQkJd2FpdGVyc1tuXS5lbmdpbmUg PSBlbmdpbmU7Ci0JCXdhaXRlcnNbbl0uZmxhZ3MgPSBCSVQoSURMRSk7Ci0KLQkJd2FpdGVyc1tu XS50c2sgPSBrdGhyZWFkX3J1bihpZ3Rfd2FrZXVwX3RocmVhZCwgJndhaXRlcnNbbl0sCi0JCQkJ CSAgICAgImk5MTUvaWd0OiVkIiwgbik7Ci0JCWlmIChJU19FUlIod2FpdGVyc1tuXS50c2spKQot CQkJZ290byBvdXRfd2FpdGVyczsKLQotCQlnZXRfdGFza19zdHJ1Y3Qod2FpdGVyc1tuXS50c2sp OwotCX0KLQotCWZvciAoc3RlcCA9IDE7IHN0ZXAgPD0gbWF4X3NlcW5vOyBzdGVwIDw8PSAxKSB7 Ci0JCXUzMiBzZXFubzsKLQotCQkvKiBUaGUgd2FpdGVyIHRocmVhZHMgc3RhcnQgcGF1c2VkIGFz IHdlIGFzc2lnbiB0aGVtIGEgcmFuZG9tCi0JCSAqIHNlcW5vIGFuZCByZXNldCB0aGUgZW5naW5l LiBPbmNlIHRoZSBlbmdpbmUgaXMgcmVzZXQsCi0JCSAqIHdlIHNpZ25hbCB0aGF0IHRoZSB0aHJl YWRzIG1heSBiZWdpbiB0aGVpciB3YWl0IHVwb24gdGhlaXIKLQkJICogc2Vxbm8uCi0JCSAqLwot CQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewotCQkJR0VNX0JVR19PTighdGVzdF9iaXQo SURMRSwgJndhaXRlcnNbbl0uZmxhZ3MpKTsKLQkJCXdhaXRlcnNbbl0uc2Vxbm8gPQotCQkJCTEg KyBwcmFuZG9tX3UzMl9zdGF0ZSgmcHJuZykgJSBtYXhfc2Vxbm87Ci0JCX0KLQkJbW9ja19zZXFu b19hZHZhbmNlKGVuZ2luZSwgMCk7Ci0JCWlndF93YWtlX2FsbF9zeW5jKCZyZWFkeSwgJnNldCwg JmRvbmUsICZ3cSwgY291bnQpOwotCi0JCS8qIFNpbXVsYXRlIHRoZSBHUFUgZG9pbmcgY2h1bmtz IG9mIHdvcmssIHdpdGggb25lIG9yIG1vcmUKLQkJICogc2Vxbm8gYXBwZWFyaW5nIHRvIGZpbmlz aCBhdCB0aGUgc2FtZSB0aW1lLiBBIHJhbmRvbSBudW1iZXIKLQkJICogb2YgdGhyZWFkcyB3aWxs IGJlIHdhaXRpbmcgdXBvbiB0aGUgdXBkYXRlIGFuZCBob3BlZnVsbHkgYmUKLQkJICogd29rZW4u Ci0JCSAqLwotCQlmb3IgKHNlcW5vID0gMTsgc2Vxbm8gPD0gbWF4X3NlcW5vICsgc3RlcDsgc2Vx bm8gKz0gc3RlcCkgewotCQkJdXNsZWVwX3JhbmdlKDUwLCA1MDApOwotCQkJbW9ja19zZXFub19h ZHZhbmNlKGVuZ2luZSwgc2Vxbm8pOwotCQl9Ci0JCUdFTV9CVUdfT04oaW50ZWxfZW5naW5lX2dl dF9zZXFubyhlbmdpbmUpIDwgMSArIG1heF9zZXFubyk7Ci0KLQkJLyogV2l0aCB0aGUgc2Vxbm8g bm93IGJleW9uZCBhbnkgb2YgdGhlIHdhaXRpbmcgdGhyZWFkcywgdGhleQotCQkgKiBzaG91bGQg YWxsIGJlIHdva2VuLCBzZWUgdGhhdCB0aGV5IGFyZSBjb21wbGV0ZSBhbmQgc2lnbmFsCi0JCSAq IHRoYXQgdGhleSBhcmUgcmVhZHkgZm9yIHRoZSBuZXh0IHRlc3QuIFdlIHdhaXQgdW50aWwgYWxs Ci0JCSAqIHRocmVhZHMgYXJlIGNvbXBsZXRlIGFuZCB3YWl0aW5nIGZvciB1cyAoaS5lLiBub3Qg YSBzZXFubykuCi0JCSAqLwotCQlpZiAoIXdhaXRfdmFyX2V2ZW50X3RpbWVvdXQoJmRvbmUsCi0J CQkJCSAgICAhYXRvbWljX3JlYWQoJmRvbmUpLCAxMCAqIEhaKSkgewotCQkJcHJfZXJyKCJUaW1l ZCBvdXQgd2FpdGluZyBmb3IgJWQgcmVtYWluaW5nIHdhaXRlcnNcbiIsCi0JCQkgICAgICAgYXRv bWljX3JlYWQoJmRvbmUpKTsKLQkJCWVyciA9IC1FVElNRURPVVQ7Ci0JCQlicmVhazsKLQkJfQot Ci0JCWVyciA9IGNoZWNrX3JidHJlZV9lbXB0eShlbmdpbmUpOwotCQlpZiAoZXJyKQotCQkJYnJl YWs7Ci0JfQotCi1vdXRfd2FpdGVyczoKLQlmb3IgKG4gPSAwOyBuIDwgY291bnQ7IG4rKykgewot CQlpZiAoSVNfRVJSKHdhaXRlcnNbbl0udHNrKSkKLQkJCWJyZWFrOwotCi0JCXNldF9iaXQoU1RP UCwgJndhaXRlcnNbbl0uZmxhZ3MpOwotCX0KLQltb2NrX3NlcW5vX2FkdmFuY2UoZW5naW5lLCBJ TlRfTUFYKTsgLyogd2FrZXVwIGFueSBicm9rZW4gd2FpdGVycyAqLwotCWlndF93YWtlX2FsbF9z eW5jKCZyZWFkeSwgJnNldCwgJmRvbmUsICZ3cSwgbik7Ci0KLQlmb3IgKG4gPSAwOyBuIDwgY291 bnQ7IG4rKykgewotCQlpZiAoSVNfRVJSKHdhaXRlcnNbbl0udHNrKSkKLQkJCWJyZWFrOwotCi0J CWt0aHJlYWRfc3RvcCh3YWl0ZXJzW25dLnRzayk7Ci0JCXB1dF90YXNrX3N0cnVjdCh3YWl0ZXJz W25dLnRzayk7Ci0JfQotCi0Ja3ZmcmVlKHdhaXRlcnMpOwotb3V0X2VuZ2luZXM6Ci0JbW9ja19l bmdpbmVfZmx1c2goZW5naW5lKTsKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgaW50ZWxfYnJlYWRj cnVtYnNfbW9ja19zZWxmdGVzdHModm9pZCkKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVf c3VidGVzdCB0ZXN0c1tdID0gewotCQlTVUJURVNUKGlndF9yYW5kb21faW5zZXJ0X3JlbW92ZSks Ci0JCVNVQlRFU1QoaWd0X2luc2VydF9jb21wbGV0ZSksCi0JCVNVQlRFU1QoaWd0X3dha2V1cCks Ci0JfTsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKLQlpbnQgZXJyOwotCi0JaTkx NSA9IG1vY2tfZ2VtX2RldmljZSgpOwotCWlmICghaTkxNSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0K LQllcnIgPSBpOTE1X3N1YnRlc3RzKHRlc3RzLCBpOTE1LT5lbmdpbmVbUkNTXSk7Ci0JZHJtX2Rl dl9wdXQoJmk5MTUtPmRybSk7Ci0KLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jCmluZGV4IDQ4MDk4NzRhYjI4Yy4u NGU4YzMwMDhkYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfaGFuZ2NoZWNrLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2lu dGVsX2hhbmdjaGVjay5jCkBAIC0xMTI3LDcgKzExMjcsNyBAQCBzdGF0aWMgaW50IF9faWd0X3Jl c2V0X2V2aWN0X3ZtYShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAogCXdhaXRfZm9y X2NvbXBsZXRpb24oJmFyZy5jb21wbGV0aW9uKTsKIAotCWlmICh3YWl0X2Zvcih3YWl0cXVldWVf YWN0aXZlKCZycS0+ZXhlY3V0ZSksIDEwKSkgeworCWlmICh3YWl0X2ZvcighbGlzdF9lbXB0eSgm cnEtPmZlbmNlLmNiX2xpc3QpLCAxMCkpIHsKIAkJc3RydWN0IGRybV9wcmludGVyIHAgPSBkcm1f aW5mb19wcmludGVyKGk5MTUtPmRybS5kZXYpOwogCiAJCXByX2VycigiaWd0L2V2aWN0X3ZtYSBr dGhyZWFkIGRpZCBub3Qgd2FpdFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvbGliX3N3X2ZlbmNlLmMKaW5kZXggYjI2ZjA3YjU1ZDg2Li4yYmZhNzJjMTY1NGIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbGliX3N3X2ZlbmNlLmMKQEAgLTc2LDMg Kzc2LDU3IEBAIHZvaWQgdGltZWRfZmVuY2VfZmluaShzdHJ1Y3QgdGltZWRfZmVuY2UgKnRmKQog CWRlc3Ryb3lfdGltZXJfb25fc3RhY2soJnRmLT50aW1lcik7CiAJaTkxNV9zd19mZW5jZV9maW5p KCZ0Zi0+ZmVuY2UpOwogfQorCitzdHJ1Y3QgaGVhcF9mZW5jZSB7CisJc3RydWN0IGk5MTVfc3df ZmVuY2UgZmVuY2U7CisJdW5pb24geworCQlzdHJ1Y3Qga3JlZiByZWY7CisJCXN0cnVjdCByY3Vf aGVhZCByY3U7CisJfTsKK307CisKK3N0YXRpYyBpbnQgX19pOTE1X3N3X2ZlbmNlX2NhbGwKK2hl YXBfZmVuY2Vfbm90aWZ5KHN0cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSwgZW51bSBpOTE1X3N3 X2ZlbmNlX25vdGlmeSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaGVhcF9mZW5jZSAqaCA9IGNvbnRhaW5l cl9vZihmZW5jZSwgdHlwZW9mKCpoKSwgZmVuY2UpOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNh c2UgRkVOQ0VfQ09NUExFVEU6CisJCWJyZWFrOworCisJY2FzZSBGRU5DRV9GUkVFOgorCQloZWFw X2ZlbmNlX3B1dCgmaC0+ZmVuY2UpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKwor c3RydWN0IGk5MTVfc3dfZmVuY2UgKmhlYXBfZmVuY2VfY3JlYXRlKGdmcF90IGdmcCkKK3sKKwlz dHJ1Y3QgaGVhcF9mZW5jZSAqaDsKKworCWggPSBrbWFsbG9jKHNpemVvZigqaCksIGdmcCk7CisJ aWYgKCFoKQorCQlyZXR1cm4gTlVMTDsKKworCWk5MTVfc3dfZmVuY2VfaW5pdCgmaC0+ZmVuY2Us IGhlYXBfZmVuY2Vfbm90aWZ5KTsKKwlyZWZjb3VudF9zZXQoJmgtPnJlZi5yZWZjb3VudCwgMik7 CisKKwlyZXR1cm4gJmgtPmZlbmNlOworfQorCitzdGF0aWMgdm9pZCBoZWFwX2ZlbmNlX3JlbGVh c2Uoc3RydWN0IGtyZWYgKnJlZikKK3sKKwlzdHJ1Y3QgaGVhcF9mZW5jZSAqaCA9IGNvbnRhaW5l cl9vZihyZWYsIHR5cGVvZigqaCksIHJlZik7CisKKwlpOTE1X3N3X2ZlbmNlX2ZpbmkoJmgtPmZl bmNlKTsKKworCWtmcmVlX3JjdShoLCByY3UpOworfQorCit2b2lkIGhlYXBfZmVuY2VfcHV0KHN0 cnVjdCBpOTE1X3N3X2ZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3QgaGVhcF9mZW5jZSAqaCA9IGNv bnRhaW5lcl9vZihmZW5jZSwgdHlwZW9mKCpoKSwgZmVuY2UpOworCisJa3JlZl9wdXQoJmgtPnJl ZiwgaGVhcF9mZW5jZV9yZWxlYXNlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0 ZXN0cy9saWJfc3dfZmVuY2UuaAppbmRleCA0NzRhYWZiOTJhZTEuLjFmOTkyN2UxMGYzYSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2xpYl9zd19mZW5jZS5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9saWJfc3dfZmVuY2UuaApAQCAtMzks NCArMzksNyBAQCBzdHJ1Y3QgdGltZWRfZmVuY2Ugewogdm9pZCB0aW1lZF9mZW5jZV9pbml0KHN0 cnVjdCB0aW1lZF9mZW5jZSAqdGYsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CiB2b2lkIHRpbWVk X2ZlbmNlX2Zpbmkoc3RydWN0IHRpbWVkX2ZlbmNlICp0Zik7CiAKK3N0cnVjdCBpOTE1X3N3X2Zl bmNlICpoZWFwX2ZlbmNlX2NyZWF0ZShnZnBfdCBnZnApOwordm9pZCBoZWFwX2ZlbmNlX3B1dChz dHJ1Y3QgaTkxNV9zd19mZW5jZSAqZmVuY2UpOworCiAjZW5kaWYgLyogX0xJQl9TV19GRU5DRV9I XyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29u dGV4dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jCmlu ZGV4IGQ5MzdiZGZmMjZmOS4uZTRkYjlhMzFiNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL21vY2tfY29udGV4dC5jCkBAIC00OSw2ICs0OSw4IEBAIG1vY2tfY29udGV4 dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKIAkJc3RydWN0IGludGVsX2NvbnRleHQg KmNlID0gJmN0eC0+X19lbmdpbmVbbl07CiAKIAkJY2UtPmdlbV9jb250ZXh0ID0gY3R4OworCQlJ TklUX0xJU1RfSEVBRCgmY2UtPnNpZ25hbF9saW5rKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNlLT5z aWduYWxzKTsKIAl9CiAKIAlyZXQgPSBpOTE1X2dlbV9jb250ZXh0X3Bpbl9od19pZChjdHgpOwpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUuYwppbmRleCBiNGI2 MTA1NmIyMjcuLmMxY2Q4YjI3YjMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv c2VsZnRlc3RzL21vY2tfZW5naW5lLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL21vY2tfZW5naW5lLmMKQEAgLTc1LDI1ICs3NSwyNyBAQCBzdGF0aWMgc3RydWN0IG1vY2tf cmVxdWVzdCAqZmlyc3RfcmVxdWVzdChzdHJ1Y3QgbW9ja19lbmdpbmUgKmVuZ2luZSkKIAkJCQkJ bGluayk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkdmFuY2Uoc3RydWN0IG1vY2tfZW5naW5lICplbmdp bmUsCi0JCSAgICBzdHJ1Y3QgbW9ja19yZXF1ZXN0ICpyZXF1ZXN0KQorc3RhdGljIHZvaWQgYWR2 YW5jZShzdHJ1Y3QgbW9ja19yZXF1ZXN0ICpyZXF1ZXN0KQogewogCWxpc3RfZGVsX2luaXQoJnJl cXVlc3QtPmxpbmspOwogCWk5MTVfcmVxdWVzdF9mYWtlX2NvbXBsZXRlKCZyZXF1ZXN0LT5iYXNl KTsKLQltb2NrX3NlcW5vX2FkdmFuY2UoJmVuZ2luZS0+YmFzZSwgcmVxdWVzdC0+YmFzZS5nbG9i YWxfc2Vxbm8pOworCWludGVsX2VuZ2luZV93cml0ZV9nbG9iYWxfc2Vxbm8ocmVxdWVzdC0+YmFz ZS5lbmdpbmUsCisJCQkJCXJlcXVlc3QtPmJhc2UuZ2xvYmFsX3NlcW5vKTsKKwlpbnRlbF9lbmdp bmVfcXVldWVfYnJlYWRjcnVtYnMocmVxdWVzdC0+YmFzZS5lbmdpbmUpOwogfQogCiBzdGF0aWMg dm9pZCBod19kZWxheV9jb21wbGV0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKIHsKIAlzdHJ1Y3Qg bW9ja19lbmdpbmUgKmVuZ2luZSA9IGZyb21fdGltZXIoZW5naW5lLCB0LCBod19kZWxheSk7CiAJ c3RydWN0IG1vY2tfcmVxdWVzdCAqcmVxdWVzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0J c3Bpbl9sb2NrKCZlbmdpbmUtPmh3X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUt Pmh3X2xvY2ssIGZsYWdzKTsKIAogCS8qIFRpbWVyIGZpcmVkLCBmaXJzdCByZXF1ZXN0IGlzIGNv bXBsZXRlICovCiAJcmVxdWVzdCA9IGZpcnN0X3JlcXVlc3QoZW5naW5lKTsKIAlpZiAocmVxdWVz dCkKLQkJYWR2YW5jZShlbmdpbmUsIHJlcXVlc3QpOworCQlhZHZhbmNlKHJlcXVlc3QpOwogCiAJ LyoKIAkgKiBBbHNvIGltbWVkaWF0ZWx5IHNpZ25hbCBhbnkgc3Vic2VxdWVudCAwLWRlbGF5IHJl cXVlc3RzLCBidXQKQEAgLTEwNSwxMCArMTA3LDEwIEBAIHN0YXRpYyB2b2lkIGh3X2RlbGF5X2Nv bXBsZXRlKHN0cnVjdCB0aW1lcl9saXN0ICp0KQogCQkJYnJlYWs7CiAJCX0KIAotCQlhZHZhbmNl KGVuZ2luZSwgcmVxdWVzdCk7CisJCWFkdmFuY2UocmVxdWVzdCk7CiAJfQogCi0Jc3Bpbl91bmxv Y2soJmVuZ2luZS0+aHdfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5o d19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1vY2tfY29udGV4dF91bnBpbihzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UpCkBAIC0xNzksMTkgKzE4MSwyMCBAQCBzdGF0aWMgdm9pZCBt b2NrX3N1Ym1pdF9yZXF1ZXN0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCiAJc3RydWN0 IG1vY2tfcmVxdWVzdCAqbW9jayA9IGNvbnRhaW5lcl9vZihyZXF1ZXN0LCB0eXBlb2YoKm1vY2sp LCBiYXNlKTsKIAlzdHJ1Y3QgbW9ja19lbmdpbmUgKmVuZ2luZSA9CiAJCWNvbnRhaW5lcl9vZihy ZXF1ZXN0LT5lbmdpbmUsIHR5cGVvZigqZW5naW5lKSwgYmFzZSk7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKIAogCWk5MTVfcmVxdWVzdF9zdWJtaXQocmVxdWVzdCk7CiAJR0VNX0JVR19PTighcmVx dWVzdC0+Z2xvYmFsX3NlcW5vKTsKIAotCXNwaW5fbG9ja19pcnEoJmVuZ2luZS0+aHdfbG9jayk7 CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVuZ2luZS0+aHdfbG9jaywgZmxhZ3MpOwogCWxpc3RfYWRk X3RhaWwoJm1vY2stPmxpbmssICZlbmdpbmUtPmh3X3F1ZXVlKTsKIAlpZiAobW9jay0+bGluay5w cmV2ID09ICZlbmdpbmUtPmh3X3F1ZXVlKSB7CiAJCWlmIChtb2NrLT5kZWxheSkKIAkJCW1vZF90 aW1lcigmZW5naW5lLT5od19kZWxheSwgamlmZmllcyArIG1vY2stPmRlbGF5KTsKIAkJZWxzZQot CQkJYWR2YW5jZShlbmdpbmUsIG1vY2spOworCQkJYWR2YW5jZShtb2NrKTsKIAl9Ci0Jc3Bpbl91 bmxvY2tfaXJxKCZlbmdpbmUtPmh3X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVu Z2luZS0+aHdfbG9jaywgZmxhZ3MpOwogfQogCiBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICptb2Nr X2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwKQEAgLTI1NSwxMiArMjU4LDEz IEBAIHZvaWQgbW9ja19lbmdpbmVfZmx1c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQogCiAJc3Bpbl9sb2NrX2lycSgmbW9jay0+aHdfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHJlcXVlc3QsIHJuLCAmbW9jay0+aHdfcXVldWUsIGxpbmspCi0JCWFkdmFuY2UobW9j aywgcmVxdWVzdCk7CisJCWFkdmFuY2UocmVxdWVzdCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZtb2Nr LT5od19sb2NrKTsKIH0KIAogdm9pZCBtb2NrX2VuZ2luZV9yZXNldChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCiB7CisJaW50ZWxfZW5naW5lX3dyaXRlX2dsb2JhbF9zZXFubyhlbmdp bmUsIDApOwogfQogCiB2b2lkIG1vY2tfZW5naW5lX2ZyZWUoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL21v Y2tfZW5naW5lLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19lbmdpbmUu aAppbmRleCAxMzNkMGMyMTc5MGQuLmI5Y2MzYTI0NWYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmgKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL21vY2tfZW5naW5lLmgKQEAgLTQ2LDEwICs0Niw0IEBAIHZvaWQgbW9j a19lbmdpbmVfZmx1c2goc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIHZvaWQgbW9j a19lbmdpbmVfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKIHZvaWQgbW9j a19lbmdpbmVfZnJlZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwogCi1zdGF0aWMg aW5saW5lIHZvaWQgbW9ja19zZXFub19hZHZhbmNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTMyIHNlcW5vKQotewotCWludGVsX3dyaXRlX3N0YXR1c19wYWdlKGVuZ2luZSwgSTkx NV9HRU1fSFdTX0lOREVYLCBzZXFubyk7Ci0JaW50ZWxfZW5naW5lX3dha2V1cChlbmdpbmUpOwot fQotCiAjZW5kaWYgLyogIV9fTU9DS19FTkdJTkVfSF9fICovCi0tIAoyLjIwLjEKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=