From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Wilson Subject: [PATCH 24/38] drm/i915: Move GEM activity tracking into a common struct reservation_object Date: Tue, 20 Sep 2016 09:29:58 +0100 Message-ID: <20160920083012.2754-25-chris@chris-wilson.co.uk> References: <20160920083012.2754-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 mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 75A9E6E695 for ; Tue, 20 Sep 2016 08:30:47 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id 133so2072283wmq.2 for ; Tue, 20 Sep 2016 01:30:47 -0700 (PDT) In-Reply-To: <20160920083012.2754-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 Cc: mika.kuoppala@intel.com List-Id: intel-gfx@lists.freedesktop.org SW4gcHJlcGFyYXRpb24gdG8gc3VwcG9ydCBtYW55IGRpc3RpbmN0IHRpbWVsaW5lcywgd2UgbmVl ZCB0byBleHBhbmQgdGhlCmFjdGl2aXR5IHRyYWNraW5nIG9uIHRoZSBHRU0gb2JqZWN0IHRvIGhh bmRsZSBtb3JlIHRoYW4ganVzdCBhIHJlcXVlc3QKcGVyIGVuZ2luZS4gV2UgYWxyZWFkeSB1c2Ug dGhlIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3Qgb24gdGhlIGRtYS1idWYKdG8gaGFuZGxlIG1h bnkgZmVuY2UgY29udGV4dHMsIHNvIGludGVncmF0aW5nIHRoYXQgaW50byB0aGUgR0VNIG9iamVj dAppdHNlbGYgaXMgdGhlIHByZWZlcnJlZCBzb2x1dGlvbi4gKEZvciBleGFtcGxlLCB3ZSBjYW4g bm93IHNoYXJlIHRoZSBzYW1lCnJlc2VydmF0aW9uX29iamVjdCBiZXR3ZWVuIGV2ZXJ5IGNvbnN1 bWVyL3Byb2R1Y2VyIHVzaW5nIHRoaXMgYnVmZmVyIGFuZApza2lwIHRoZSBtYW51YWwgaW1wb3J0 L2V4cG9ydCB2aWEgZG1hLWJ1Zi4pCgp2MjogUmVpbXBsZW1lbnQgYnVzeS1pb2N0bCAoYnkgd2Fs a2luZyB0aGUgcmVzZXJ2YXRpb24gb2JqZWN0KSwgcG9zdHBvbmUKdGhlIEFCSSBjaGFuZ2UgZm9y IGFub3RoZXIgZGF5LiBTaW1pbGFybHkgdXNlIHRoZSByZXNlcnZhdGlvbiBvYmplY3QgdG8KZmlu ZCB0aGUgbGFzdF93cml0ZSByZXF1ZXN0IChpZiBhY3RpdmUgYW5kIGZyb20gaTkxNSkgZm9yIGNo b29zaW5nCmRpc3BsYXkgQ1MgZmxpcHMuCgpDYXZlYXRzOgoKICogYnVzeS1pb2N0bDogYnVzeS1p b2N0bCBvbmx5IHJlcG9ydHMgb24gdGhlIG5hdGl2ZSBmZW5jZXMsIGl0IHdpbGwgbm90Cndhcm4g b2Ygc3RhbGxzIChpbiBzZXQtZG9tYWluLWlvY3RsLCBwcmVhZC9wd3JpdGUgZXRjKSBpZiB0aGUg b2JqZWN0IGlzCmJlaW5nIHJlbmRlcmVkIHRvIGJ5IGV4dGVybmFsIGZlbmNlcy4gSXQgYWxzbyB3 aWxsIG5vdCByZXBvcnQgdGhlIHNhbWUKYnVzeSBzdGF0ZSBhcyB3YWl0LWlvY3RsIChvciBwb2xs aW5nIG9uIHRoZSBkbWEtYnVmKSBpbiB0aGUgc2FtZQpjaXJjdW1zdGFuY2VzLiBPbiB0aGUgcGx1 cyBzaWRlLCBpdCBkb2VzIHJldGFpbiByZXBvcnRpbmcgb2Ygd2hpY2gKKmk5MTUqIGVuZ2luZXMg YXJlIGVuZ2FnZWQgd2l0aCB0aGlzIG9iamVjdC4KCiAqIG5vbi1ibG9ja2luZyBhdG9taWMgbW9k ZXNldHMgdGFrZSBhIHN0ZXAgYmFja3dhcmRzIGFzIHRoZSB3YWl0IGZvcgpyZW5kZXIgY29tcGxl dGlvbiBibG9ja3MgdGhlIGlvY3RsLiBUaGlzIGlzIGZpeGVkIGluIGEgc3Vic2VxdWVudApwYXRj aCB0byB1c2UgYSBmZW5jZSBpbnN0ZWFkIGZvciBhd2FpdGluZyBvbiB0aGUgcmVuZGVyaW5nLCBz ZWUKImRybS9pOTE1OiBSZXN0b3JlIG5vbmJsb2NraW5nIGF3YWl0cyBmb3IgbW9kZXNldHRpbmci CgogKiBkeW5hbWljIGFycmF5IG1hbmlwdWxhdGlvbiBmb3Igc2hhcmVkLWZlbmNlcyBpbiByZXNl cnZhdGlvbiBpcyBzbG93ZXIKdGhhbiB0aGUgcHJldmlvdXMgbG9ja2xlc3Mgc3RhdGljIGFzc2ln bm1lbnQgKGUuZy4gZ2VtX2V4ZWNfbHV0X2hhbmRsZQpydW50aW1lIG9uIGl2YiBnb2VzIGZyb20g NDJzIHRvIDcycykuIFRoZSBydW50aW1lIGVmZmVjdCBpcyBmYXIgbGFyZ2VyCnRoYW4gdGhlIG92 ZXJoZWFkIGFkZGVkIHRvIGV4ZWNidWYgYXMgaW5kaWNhdGVkIGJ5IHBlcmYgLSBpbnRlcmVzdGlu ZwpzZWNvbmRhcnkgZWZmZWN0cz8KCiAqIGxvc3Mgb2Ygb2JqZWN0LWxldmVsIHJldGlyZW1lbnQg Y2FsbGJhY2tzLCBlbXVsYXRlZCBieSBWTUEgcmV0aXJlbWVudAp0cmFja2luZy4KCiAqIG1pbm9y IGxvc3Mgb2Ygb2JqZWN0LWxldmVsIGxhc3QgYWN0aXZpdHkgaW5mb3JtYXRpb24gZnJvbSBkZWJ1 Z2ZzLApjb3VsZCBiZSByZXBsYWNlZCB3aXRoIHBlci12bWEgaW5mb3JtYXRpb24gaWYgZGVzaXJl ZAoKU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgICAgICAgIHwgIDMyICsr LS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgICB8ICA0NSArLS0t LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICAgIHwgMjc3ICsrKysr KysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9i YXRjaF9wb29sLmMgfCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1 Zi5jICAgICB8ICA0NiArLS0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZG1hYnVm LmggICAgIHwgIDQ1IC0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVm ZmVyLmMgfCAgNzEgKystLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5j ICAgICAgICB8ICAzMiArKysrCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCAg ICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jICAg IHwgIDQ4ICsrKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9yZXF1ZXN0LmggICAg fCAgMzcgKy0tLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyAgICAgIHwg ICA2ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyAgfCAgIDIg LQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgICAgIHwgMTMxICsrKyst LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgICAgICAgICAgfCAg IDMgLQogMTUgZmlsZXMgY2hhbmdlZCwgMjM0IGluc2VydGlvbnMoKyksIDU0NSBkZWxldGlvbnMo LSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFi dWYuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggMzU1ZWVjOGY3Y2FjLi43 ZWNkZDVjYzI3ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdm cy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCkBAIC0xMzAsNiAr MTMwLDIzIEBAIHN0YXRpYyB1NjQgaTkxNV9nZW1fb2JqX3RvdGFsX2dndHRfc2l6ZShzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCXJldHVybiBzaXplOwogfQogCitzdGF0aWMgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqCitsYXN0X3dyaXRlX2VuZ2luZShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IE5V TEw7CisJc3RydWN0IGZlbmNlICpmZW5jZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlmZW5jZSA9 IHJlc2VydmF0aW9uX29iamVjdF9nZXRfZXhjbF9yY3Uob2JqLT5yZXN2KTsKKwlyY3VfcmVhZF91 bmxvY2soKTsKKworCWlmIChmZW5jZSAmJiBmZW5jZV9pc19pOTE1KGZlbmNlKSAmJiAhZmVuY2Vf aXNfc2lnbmFsZWQoZmVuY2UpKQorCQllbmdpbmUgPSB0b19yZXF1ZXN0KGZlbmNlKS0+ZW5naW5l OworCWZlbmNlX3B1dChmZW5jZSk7CisKKwlyZXR1cm4gZW5naW5lOworfQorCiBzdGF0aWMgdm9p ZAogZGVzY3JpYmVfb2JqKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKIHsKQEAgLTEzOCwxMSArMTU1LDEwIEBAIGRlc2NyaWJlX29iaihzdHJ1Y3Qg c2VxX2ZpbGUgKm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJc3RydWN0IGk5 MTVfdm1hICp2bWE7CiAJdW5zaWduZWQgaW50IGZyb250YnVmZmVyX2JpdHM7CiAJaW50IHBpbl9j b3VudCA9IDA7Ci0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0Jc2VxX3ByaW50ZihtLCAiJXBL OiAlYyVjJWMlYyVjICU4emRLaUIgJTAyeCAlMDJ4IFsgIiwKKwlzZXFfcHJpbnRmKG0sICIlcEs6 ICVjJWMlYyVjJWMgJTh6ZEtpQiAlMDJ4ICUwMnggJXMlcyVzIiwKIAkJICAgJm9iai0+YmFzZSwK IAkJICAgZ2V0X2FjdGl2ZV9mbGFnKG9iaiksCiAJCSAgIGdldF9waW5fZmxhZyhvYmopLApAQCAt MTUxLDE0ICsxNjcsNyBAQCBkZXNjcmliZV9vYmooc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogCQkgICBnZXRfcGluX21hcHBlZF9mbGFnKG9iaiks CiAJCSAgIG9iai0+YmFzZS5zaXplIC8gMTAyNCwKIAkJICAgb2JqLT5iYXNlLnJlYWRfZG9tYWlu cywKLQkJICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7Ci0JZm9yX2VhY2hfZW5naW5lX2lkKGVu Z2luZSwgZGV2X3ByaXYsIGlkKQotCQlzZXFfcHJpbnRmKG0sICIleCAiLAotCQkJICAgaTkxNV9n ZW1fYWN0aXZlX2dldF9zZXFubygmb2JqLT5sYXN0X3JlYWRbaWRdLAotCQkJCQkJICAgICAmb2Jq LT5iYXNlLmRldi0+c3RydWN0X211dGV4KSk7Ci0Jc2VxX3ByaW50ZihtLCAiXSAleCAlcyVzJXMi LAotCQkgICBpOTE1X2dlbV9hY3RpdmVfZ2V0X3NlcW5vKCZvYmotPmxhc3Rfd3JpdGUsCi0JCQkJ CSAgICAgJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCksCisJCSAgIG9iai0+YmFzZS53cml0 ZV9kb21haW4sCiAJCSAgIGk5MTVfY2FjaGVfbGV2ZWxfc3RyKGRldl9wcml2LCBvYmotPmNhY2hl X2xldmVsKSwKIAkJICAgb2JqLT5tbS5kaXJ0eSA/ICIgZGlydHkiIDogIiIsCiAJCSAgIG9iai0+ bW0ubWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQgPyAiIHB1cmdlYWJsZSIgOiAiIik7CkBAIC0x OTgsOCArMjA3LDcgQEAgZGVzY3JpYmVfb2JqKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIAkJc2VxX3ByaW50ZihtLCAiICglcyBtYXBwYWJsZSki LCBzKTsKIAl9CiAKLQllbmdpbmUgPSBpOTE1X2dlbV9hY3RpdmVfZ2V0X2VuZ2luZSgmb2JqLT5s YXN0X3dyaXRlLAotCQkJCQkgICAgJmRldl9wcml2LT5kcm0uc3RydWN0X211dGV4KTsKKwllbmdp bmUgPSBsYXN0X3dyaXRlX2VuZ2luZShvYmopOwogCWlmIChlbmdpbmUpCiAJCXNlcV9wcmludGYo bSwgIiAoJXMpIiwgZW5naW5lLT5uYW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXgg OGE1OWUyN2RmZWU0Li5kOTg0MjI2ZmEwNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAt NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8 bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgorI2luY2x1ZGUgPGxpbnV4 L3Jlc2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KIAogI2luY2x1ZGUg PGRybS9kcm1QLmg+CkBAIC0yMjEzLDIxICsyMjE0LDEyIEBAIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJhdGNoX3Bvb2xfbGluazsKIAogCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Ci0JLyoqCi0JICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBpcyBvbiB0 aGUgYWN0aXZlIGxpc3RzIChoYXMgcGVuZGluZwotCSAqIHJlbmRlcmluZyBhbmQgc28gYSBub24t emVybyBzZXFubyksIGFuZCBpcyBub3Qgc2V0IGlmIGl0IGkgcyBvbgotCSAqIGluYWN0aXZlIChy ZWFkeSB0byBiZSB1bmJvdW5kKSBsaXN0LgotCSAqLwotI2RlZmluZSBJOTE1X0JPX0FDVElWRV9T SElGVCAwCi0jZGVmaW5lIEk5MTVfQk9fQUNUSVZFX01BU0sgKCgxIDw8IEk5MTVfTlVNX0VOR0lO RVMpIC0gMSkKLSNkZWZpbmUgX19JOTE1X0JPX0FDVElWRShibykgXAotCSgoUkVBRF9PTkNFKChi byktPmZsYWdzKSA+PiBJOTE1X0JPX0FDVElWRV9TSElGVCkgJiBJOTE1X0JPX0FDVElWRV9NQVNL KQogCiAJLyoqCiAJICogSGF2ZSB3ZSB0YWtlbiBhIHJlZmVyZW5jZSBmb3IgdGhlIG9iamVjdCBm b3IgaW5jb21wbGV0ZSBHUFUKIAkgKiBhY3Rpdml0eT8KIAkgKi8KLSNkZWZpbmUgSTkxNV9CT19B Q1RJVkVfUkVGX1NISUZUIChJOTE1X0JPX0FDVElWRV9TSElGVCArIEk5MTVfTlVNX0VOR0lORVMp CisjZGVmaW5lIEk5MTVfQk9fQUNUSVZFX1JFRl9TSElGVCAoMCkKICNkZWZpbmUgSTkxNV9CT19B Q1RJVkVfUkVGIEJJVChJOTE1X0JPX0FDVElWRV9SRUZfU0hJRlQpCiAKIAkvKioKQEAgLTIyNTYs NiArMjI0OCw3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0IHsKIAogCS8qKiBDb3VudCBv ZiBWTUEgYWN0dWFsbHkgYm91bmQgYnkgdGhpcyBvYmplY3QgKi8KIAl1bnNpZ25lZCBpbnQgYmlu ZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgYWN0aXZlX2NvdW50OwogCXVuc2lnbmVkIGludCBwaW5f ZGlzcGxheTsKIAogCXN0cnVjdCB7CkBAIC0yMjk1LDggKzIyODgsNyBAQCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCB7CiAJICogcmVhZCByZXF1ZXN0LiBUaGlzIGFsbG93cyBmb3IgdGhlIENQ VSB0byByZWFkIGZyb20gYW4gYWN0aXZlCiAJICogYnVmZmVyIGJ5IG9ubHkgd2FpdGluZyBmb3Ig dGhlIHdyaXRlIHRvIGNvbXBsZXRlLgogCSAqLwotCXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgbGFz dF9yZWFkW0k5MTVfTlVNX0VOR0lORVNdOwotCXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgbGFzdF93 cml0ZTsKKwlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OwogCiAJLyoqIFJlZmVyZW5j ZXMgZnJvbSBmcmFtZWJ1ZmZlcnMsIGxvY2tzIG91dCB0aWxpbmcgY2hhbmdlcy4gKi8KIAl1bnNp Z25lZCBsb25nIGZyYW1lYnVmZmVyX3JlZmVyZW5jZXM7CkBAIC0yMzE3LDYgKzIzMDksOCBAQCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCB7CiAJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcms7 CiAJCX0gdXNlcnB0cjsKIAl9OworCisJc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCBfX2J1aWx0 aW5fcmVzdjsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg KgpAQCAtMjQwOSwzNSArMjQwMywxMCBAQCBpOTE1X2dlbV9vYmplY3RfaGFzX3N0cnVjdF9wYWdl KGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCiAJcmV0dXJuIG9iai0+b3Bz LT5mbGFncyAmIEk5MTVfR0VNX09CSkVDVF9IQVNfU1RSVUNUX1BBR0U7CiB9CiAKLXN0YXRpYyBp bmxpbmUgdW5zaWduZWQgbG9uZwotaTkxNV9nZW1fb2JqZWN0X2dldF9hY3RpdmUoY29uc3Qgc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKLXsKLQlyZXR1cm4gKG9iai0+ZmxhZ3MgPj4g STkxNV9CT19BQ1RJVkVfU0hJRlQpICYgSTkxNV9CT19BQ1RJVkVfTUFTSzsKLX0KLQogc3RhdGlj IGlubGluZSBib29sCiBpOTE1X2dlbV9vYmplY3RfaXNfYWN0aXZlKGNvbnN0IHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF9nZXRfYWN0 aXZlKG9iaik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaTkxNV9nZW1fb2JqZWN0X3NldF9h Y3RpdmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgaW50IGVuZ2luZSkKLXsKLQlv YmotPmZsYWdzIHw9IEJJVChlbmdpbmUgKyBJOTE1X0JPX0FDVElWRV9TSElGVCk7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgdm9pZAotaTkxNV9nZW1fb2JqZWN0X2NsZWFyX2FjdGl2ZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqLCBpbnQgZW5naW5lKQotewotCW9iai0+ZmxhZ3MgJj0gfkJJ VChlbmdpbmUgKyBJOTE1X0JPX0FDVElWRV9TSElGVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9v bAotaTkxNV9nZW1fb2JqZWN0X2hhc19hY3RpdmVfZW5naW5lKGNvbnN0IHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJICBpbnQgZW5naW5lKQotewotCXJldHVybiBvYmotPmZs YWdzICYgQklUKGVuZ2luZSArIEk5MTVfQk9fQUNUSVZFX1NISUZUKTsKKwlyZXR1cm4gb2JqLT5h Y3RpdmVfY291bnQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbApkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKaW5kZXggNGI0YjZmMTY0NTQwLi40ODY2YWE0NmQ4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW0uYwpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgPGRybS9kcm1fdm1hX21hbmFnZXIuaD4K ICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1X2Rydi5oIgotI2luY2x1 ZGUgImk5MTVfZ2VtX2RtYWJ1Zi5oIgogI2luY2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUg Imk5MTVfdHJhY2UuaCIKICNpbmNsdWRlICJpbnRlbF9kcnYuaCIKQEAgLTQ0NywxMSArNDQ2LDYg QEAgaTkxNV9nZW1fb2JqZWN0X3dhaXQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwK IAkJICAgICBsb25nIHRpbWVvdXQsCiAJCSAgICAgc3RydWN0IGludGVsX3Jwc19jbGllbnQgKnJw cykKIHsKLQlzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OwotCXN0cnVjdCBpOTE1X2dl bV9hY3RpdmUgKmFjdGl2ZTsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV9tYXNrOwotCWludCBpZHg7 Ci0KIAltaWdodF9zbGVlcCgpOwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0xPQ0tERVApCiAJR0VN X0JVR19PTighIWxvY2tkZXBfaXNfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KSAh PQpAQCAtNDU5LDMzICs0NTMsOSBAQCBpOTE1X2dlbV9vYmplY3Rfd2FpdChzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAogI2VuZGlmCiAJR0VNX0JVR19PTih0aW1lb3V0IDwgMCk7CiAK LQlpZiAoZmxhZ3MgJiBJOTE1X1dBSVRfQUxMKSB7Ci0JCWFjdGl2ZSA9IG9iai0+bGFzdF9yZWFk OwotCQlhY3RpdmVfbWFzayA9IGk5MTVfZ2VtX29iamVjdF9nZXRfYWN0aXZlKG9iaik7Ci0JfSBl bHNlIHsKLQkJYWN0aXZlX21hc2sgPSAxOwotCQlhY3RpdmUgPSAmb2JqLT5sYXN0X3dyaXRlOwot CX0KLQotCWZvcl9lYWNoX2FjdGl2ZShhY3RpdmVfbWFzaywgaWR4KSB7Ci0JCXN0cnVjdCBkcm1f aTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKLQotCQlyZXF1ZXN0ID0gaTkxNV9nZW1fYWN0aXZl X2dldF91bmxvY2tlZCgmYWN0aXZlW2lkeF0pOwotCQlpZiAocmVxdWVzdCkgewotCQkJdGltZW91 dCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X2ZlbmNlKCZyZXF1ZXN0LT5mZW5jZSwKLQkJCQkJCQkg ICAgIGZsYWdzLCB0aW1lb3V0LAotCQkJCQkJCSAgICAgcnBzKTsKLQkJCWk5MTVfZ2VtX3JlcXVl c3RfcHV0KHJlcXVlc3QpOwotCQl9Ci0JCWlmICh0aW1lb3V0IDwgMCkKLQkJCXJldHVybiB0aW1l b3V0OwotCX0KLQotCXJlc3YgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RtYWJ1Zl9yZXN2KG9iaik7 Ci0JaWYgKHJlc3YpCi0JCXRpbWVvdXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZXNlcnZhdGlv bihyZXN2LAotCQkJCQkJCSAgIGZsYWdzLCB0aW1lb3V0LAotCQkJCQkJCSAgIHJwcyk7CisJdGlt ZW91dCA9IGk5MTVfZ2VtX29iamVjdF93YWl0X3Jlc2VydmF0aW9uKG9iai0+cmVzdiwKKwkJCQkJ CSAgIGZsYWdzLCB0aW1lb3V0LAorCQkJCQkJICAgcnBzKTsKIAlyZXR1cm4gdGltZW91dCA8IDAg PyB0aW1lb3V0IDogdGltZW91dCA+IDAgPyAwIDogLUVUSU1FOwogfQogCkBAIC0yNTEwLDQ0ICsy NDgwLDYgQEAgZXJyX3VubG9jazoKIAlnb3RvIG91dF91bmxvY2s7CiB9CiAKLXN0YXRpYyB2b2lk Ci1pOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICph Y3RpdmUsCi0JCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCi17 Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9Ci0JCWNvbnRhaW5lcl9vZihhY3Rp dmUsIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LCBsYXN0X3dyaXRlKTsKLQotCWludGVsX2Zi X29ial9mbHVzaChvYmosIHRydWUsIE9SSUdJTl9DUyk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pOTE1 X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgKmFjdGl2ZSwK LQkJCSAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQotewotCWludCBp ZHggPSByZXF1ZXN0LT5lbmdpbmUtPmlkOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmogPQotCQljb250YWluZXJfb2YoYWN0aXZlLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwg bGFzdF9yZWFkW2lkeF0pOwotCi0JR0VNX0JVR19PTighaTkxNV9nZW1fb2JqZWN0X2hhc19hY3Rp dmVfZW5naW5lKG9iaiwgaWR4KSk7Ci0KLQlpOTE1X2dlbV9vYmplY3RfY2xlYXJfYWN0aXZlKG9i aiwgaWR4KTsKLQlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX2FjdGl2ZShvYmopKQotCQlyZXR1cm47 Ci0KLQkvKiBCdW1wIG91ciBwbGFjZSBvbiB0aGUgYm91bmQgbGlzdCB0byBrZWVwIGl0IHJvdWdo bHkgaW4gTFJVIG9yZGVyCi0JICogc28gdGhhdCB3ZSBkb24ndCBzdGVhbCBmcm9tIHJlY2VudGx5 IHVzZWQgYnV0IGluYWN0aXZlIG9iamVjdHMKLQkgKiAodW5sZXNzIHdlIGFyZSBmb3JjZWQgdG8g b2ZjISkKLQkgKi8KLQlpZiAob2JqLT5iaW5kX2NvdW50KQotCQlsaXN0X21vdmVfdGFpbCgmb2Jq LT5nbG9iYWxfbGlzdCwKLQkJCSAgICAgICAmcmVxdWVzdC0+aTkxNS0+bW0uYm91bmRfbGlzdCk7 Ci0KLQlpZiAoaTkxNV9nZW1fb2JqZWN0X2hhc19hY3RpdmVfcmVmZXJlbmNlKG9iaikpIHsKLQkJ aTkxNV9nZW1fb2JqZWN0X2NsZWFyX2FjdGl2ZV9yZWZlcmVuY2Uob2JqKTsKLQkJaTkxNV9nZW1f b2JqZWN0X3B1dChvYmopOwotCX0KLX0KLQogc3RhdGljIGJvb2wgaTkxNV9jb250ZXh0X2lzX2Jh bm5lZChjb25zdCBzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQogewogCXVuc2lnbmVkIGxv bmcgZWxhcHNlZDsKQEAgLTI4NTgsNiArMjc5MCwxNiBAQCBpOTE1X2dlbV93YWl0X2lvY3RsKHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSkK IAlpZiAoIW9iaikKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwlpZiAocmVzZXJ2YXRpb25fb2JqZWN0 X3Rlc3Rfc2lnbmFsZWRfcmN1KG9iai0+cmVzdiwgdHJ1ZSkpIHsKKwkJcmV0ID0gMDsKKwkJZ290 byBvdXQ7CisJfQorCisJaWYgKCFhcmdzLT50aW1lb3V0X25zKSB7CisJCXJldCA9IC1FVElNRTsK KwkJZ290byBvdXQ7CisJfQorCiAJc3RhcnQgPSBrdGltZV9nZXQoKTsKIAogCXJldCA9IGk5MTVf Z2VtX29iamVjdF93YWl0KG9iaiwKQEAgLTI4NzEsNiArMjgxMyw3IEBAIGk5MTVfZ2VtX3dhaXRf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxl ICpmaWxlKQogCQkJYXJncy0+dGltZW91dF9ucyA9IDA7CiAJfQogCitvdXQ6CiAJaTkxNV9nZW1f b2JqZWN0X3B1dChvYmopOwogCXJldHVybiByZXQ7CiB9CkBAIC0yOTA1LDYgKzI4NDgsMTMgQEAg aW50IGk5MTVfdm1hX3VuYmluZChzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKIAkJICogSW4gb3JkZXIg dG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIHJlY3Vyc2l2ZWx5IGNsb3NlZCwKIAkJICogdGFrZSBh IHBpbiBvbiB0aGUgdm1hIHNvIHRoYXQgdGhlIHNlY29uZCB1bmJpbmQgaXMKIAkJICogYWJvcnRl ZC4KKwkJICoKKwkJICogRXZlbiBtb3JlIHNjYXJ5IGlzIHRoYXQgdGhlIHJldGlyZSBjYWxsYmFj ayBtYXkgZnJlZQorCQkgKiB0aGUgb2JqZWN0IChsYXN0IGFjdGl2ZSB2bWEpLiBUbyBwcmV2ZW50 IHRoZSBleHBsb3Npb24KKwkJICogd2UgZGVmZXIgdGhlIGFjdHVhbCBvYmplY3QgZnJlZSB0byBh IHdvcmtlciB0aGF0IGNhbgorCQkgKiBvbmx5IHByb2NlZWQgb25jZSBpdCBhY3F1aXJlcyB0aGUg c3RydWN0X211dGV4ICh3aGljaAorCQkgKiB3ZSBjdXJyZW50bHkgaG9sZCwgdGhlcmVmb3JlIGl0 IGNhbm5vdCBmcmVlIHRoaXMgb2JqZWN0CisJCSAqIGJlZm9yZSB3ZSBhcmUgZmluaXNoZWQpLgog CQkgKi8KIAkJX19pOTE1X3ZtYV9waW4odm1hKTsKIApAQCAtMzkxMSw4MyArMzg2MSw0MiBAQCBz dGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCBfX2J1c3lfd3JpdGVfaWQodW5zaWdu ZWQgaW50IGlkKQogfQogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludAotX19i dXN5X3NldF9pZl9hY3RpdmUoY29uc3Qgc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZlLAor X19idXN5X3NldF9pZl9hY3RpdmUoY29uc3Qgc3RydWN0IGZlbmNlICpmZW5jZSwKIAkJICAgICB1 bnNpZ25lZCBpbnQgKCpmbGFnKSh1bnNpZ25lZCBpbnQgaWQpKQogewotCXN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKLQotCXJlcXVlc3QgPSByY3VfZGVyZWZlcmVuY2UoYWN0 aXZlLT5yZXF1ZXN0KTsKLQlpZiAoIXJlcXVlc3QgfHwgaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0 ZWQocmVxdWVzdCkpCi0JCXJldHVybiAwOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cnE7CiAKLQkvKiBUaGlzIGlzIHJhY3kuIFNlZSBfX2k5MTVfZ2VtX2FjdGl2ZV9nZXRfcmN1KCkg Zm9yIGFuIGluIGRldGFpbAotCSAqIGRpc2N1c3Npb24gb2YgaG93IHRvIGhhbmRsZSB0aGUgcmFj ZSBjb3JyZWN0bHksIGJ1dCBmb3IgcmVwb3J0aW5nCi0JICogdGhlIGJ1c3kgc3RhdGUgd2UgZXJy IG9uIHRoZSBzaWRlIG9mIHBvdGVudGlhbGx5IHJlcG9ydGluZyB0aGUKLQkgKiB3cm9uZyBlbmdp bmUgYXMgYmVpbmcgYnVzeSAoYnV0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSByZXN1bHQKLQkgKiBp cyBhdCBsZWFzdCBzZWxmLWNvbnNpc3RlbnQpLgotCSAqCi0JICogQXMgd2UgdXNlIFNMQUJfREVT VFJPWV9CWV9SQ1UsIHRoZSByZXF1ZXN0IG1heSBiZSByZWFsbG9jYXRlZAotCSAqIHdoaWxzdCB3 ZSBhcmUgaW5zcGVjdGluZyBpdCwgZXZlbiB1bmRlciB0aGUgUkNVIHJlYWQgbG9jayBhcyB3ZSBh cmUuCi0JICogVGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGZvciB0aGUg ZW5naW5lIGFuZC9vciB0aGUKLQkgKiBzZXFubyB0byBoYXZlIGJlZW4gb3ZlcndyaXR0ZW4uIFRo ZSBzZXFubyB3aWxsIGFsd2F5cyBiZSBpbiB0aGUKLQkgKiBmdXR1cmUgY29tcGFyZWQgdG8gdGhl IGludGVuZGVkLCBhbmQgc28gd2Uga25vdyB0aGF0IGlmIHRoYXQKLQkgKiBzZXFubyBpcyBpZGxl IChvbiB3aGF0ZXZlciBlbmdpbmUpIG91ciByZXF1ZXN0IGlzIGlkbGUgYW5kIHRoZQotCSAqIHJl dHVybiAwIGFib3ZlIGlzIGNvcnJlY3QuCi0JICoKLQkgKiBUaGUgaXNzdWUgaXMgdGhhdCBpZiB0 aGUgZW5naW5lIGlzIHN3aXRjaGVkLCBpdCBpcyBqdXN0IGFzIGxpa2VseQotCSAqIHRvIHJlcG9y dCB0aGF0IGl0IGlzIGJ1c3kgKGJ1dCBzaW5jZSB0aGUgc3dpdGNoIGhhcHBlbmVkLCB3ZSBrbm93 Ci0JICogdGhlIHJlcXVlc3Qgc2hvdWxkIGJlIGlkbGUpLiBTbyB0aGVyZSBpcyBhIHNtYWxsIGNo YW5jZSB0aGF0IGEgYnVzeQotCSAqIHJlc3VsdCBpcyBhY3R1YWxseSB0aGUgd3JvbmcgZW5naW5l LgotCSAqCi0JICogU28gd2h5IGRvbid0IHdlIGNhcmU/Ci0JICoKLQkgKiBGb3Igc3RhcnRlcnMs IHRoZSBidXN5IGlvY3RsIGlzIGEgaGV1cmlzdGljIHRoYXQgaXMgYnkgZGVmaW5pdGlvbgotCSAq IHJhY3kuIEV2ZW4gd2l0aCBwZXJmZWN0IHNlcmlhbGlzYXRpb24gaW4gdGhlIGRyaXZlciwgdGhl IGhhcmR3YXJlCi0JICogc3RhdGUgaXMgY29uc3RhbnRseSBhZHZhbmNpbmcgLSB0aGUgc3RhdGUg d2UgcmVwb3J0IHRvIHRoZSB1c2VyCi0JICogaXMgc3RhbGUuCi0JICoKLQkgKiBUaGUgY3JpdGlj YWwgaW5mb3JtYXRpb24gZm9yIHRoZSBidXN5LWlvY3RsIGlzIHdoZXRoZXIgdGhlIG9iamVjdAot CSAqIGlzIGlkbGUgYXMgdXNlcnNwYWNlIHJlbGllcyBvbiB0aGF0IHRvIGRldGVjdCB3aGV0aGVy IGl0cyBuZXh0Ci0JICogYWNjZXNzIHdpbGwgc3RhbGwsIG9yIGlmIGl0IGhhcyBtaXNzZWQgc3Vi bWl0dGluZyBjb21tYW5kcyB0bwotCSAqIHRoZSBoYXJkd2FyZSBhbGxvd2luZyB0aGUgR1BVIHRv IHN0YWxsLiBXZSBuZXZlciBnZW5lcmF0ZSBhCi0JICogZmFsc2UtcG9zaXRpdmUgZm9yIGlkbGVu ZXNzLCB0aHVzIGJ1c3ktaW9jdGwgaXMgcmVsaWFibGUgYXQgdGhlCi0JICogbW9zdCBmdW5kYW1l bnRhbCBsZXZlbCwgYW5kIHdlIG1haW50YWluIHRoZSBndWFyYW50ZWUgdGhhdCBhCi0JICogYnVz eSBvYmplY3QgbGVmdCB0byBpdHNlbGYgd2lsbCBldmVudHVhbGx5IGJlY29tZSBpZGxlIChhbmQg c3RheQotCSAqIGlkbGUhKS4KKwkvKiBXZSBoYXZlIHRvIGNoZWNrIHRoZSBjdXJyZW50IGh3IHN0 YXR1cyBvZiB0aGUgZmVuY2UgYXMgdGhlIHVBQkkKKwkgKiBndWFyYW50ZWVzIGZvcndhcmQgcHJv Z3Jlc3MuIFdlIGNvdWxkIHJlbHkgb24gdGhlIGlkbGUgd29ya2VyCisJICogdG8gZXZlbnR1YWxs eSBmbHVzaCB1cywgYnV0IHRvIG1pbmltaXNlIGxhdGVuY3kganVzdCBhc2sgdGhlCisJICogaGFy ZHdhcmUuCiAJICoKLQkgKiBXZSBhbGxvdyBvdXJzZWx2ZXMgdGhlIGxlZXdheSBvZiBwb3RlbnRp YWxseSBtaXNyZXBvcnRpbmcgdGhlIGJ1c3kKLQkgKiBzdGF0ZSBiZWNhdXNlIHRoYXQgaXMgYW4g b3B0aW1pc2F0aW9uIGhldXJpc3RpYyB0aGF0IGlzIGNvbnN0YW50bHkKLQkgKiBpbiBmbHV4LiBC ZWluZyBxdWlja2x5IGFibGUgdG8gZGV0ZWN0IHRoZSBidXN5L2lkbGUgc3RhdGUgaXMgbXVjaAot CSAqIG1vcmUgaW1wb3J0YW50IHRoYW4gYWNjdXJhdGUgbG9nZ2luZyBvZiBleGFjdGx5IHdoaWNo IGVuZ2luZXMgd2VyZQotCSAqIGJ1c3kuCi0JICoKLQkgKiBGb3IgYWNjdXJhY3kgaW4gcmVwb3J0 aW5nIHRoZSBlbmdpbmUsIHdlIGNvdWxkIHVzZQotCSAqCi0JICoJcmVzdWx0ID0gMDsKLQkgKgly ZXF1ZXN0ID0gX19pOTE1X2dlbV9hY3RpdmVfZ2V0X3JjdShhY3RpdmUpOwotCSAqCWlmIChyZXF1 ZXN0KSB7Ci0JICoJCWlmICghaTkxNV9nZW1fcmVxdWVzdF9jb21wbGV0ZWQocmVxdWVzdCkpCi0J ICoJCQlyZXN1bHQgPSBmbGFnKHJlcXVlc3QtPmVuZ2luZS0+ZXhlY19pZCk7Ci0JICoJCWk5MTVf Z2VtX3JlcXVlc3RfcHV0KHJlcXVlc3QpOwotCSAqCX0KLQkgKgotCSAqIGJ1dCB0aGF0IHN0aWxs IHJlbWFpbnMgc3VzY2VwdGlibGUgdG8gYm90aCBoYXJkd2FyZSBhbmQgdXNlcnNwYWNlCi0JICog cmFjZXMuIFNvIHdlIGFjY2VwdCBtYWtpbmcgdGhlIHJlc3VsdCBvZiB0aGF0IHJhY2Ugc2xpZ2h0 bHkgd29yc2UsCi0JICogZ2l2ZW4gdGhlIHJhcml0eSBvZiB0aGUgcmFjZSBhbmQgaXRzIGxvdyBp bXBhY3Qgb24gdGhlIHJlc3VsdC4KKwkgKiBOb3RlIHdlIG9ubHkgcmVwb3J0IG9uIHRoZSBzdGF0 dXMgb2YgbmF0aXZlIGZlbmNlcy4KIAkgKi8KLQlyZXR1cm4gZmxhZyhSRUFEX09OQ0UocmVxdWVz dC0+ZW5naW5lLT5leGVjX2lkKSk7CisJaWYgKCFmZW5jZV9pc19pOTE1KGZlbmNlKSkKKwkJcmV0 dXJuIDA7CisKKwkvKiBvcGVuY29kZSB0b19yZXF1ZXN0KCkgaW4gb3JkZXIgdG8gYXZvaWQgY29u c3Qgd2FybmluZ3MgKi8KKwlycSA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0LCBmZW5jZSk7CisJaWYgKGk5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJx KSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZmxhZyhycS0+ZW5naW5lLT5leGVjX2lkKTsKIH0K IAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQKLWJ1c3lfY2hlY2tfcmVhZGVy KGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgKmFjdGl2ZSkKK2J1c3lfY2hlY2tfcmVhZGVy KGNvbnN0IHN0cnVjdCBmZW5jZSAqZmVuY2UpCiB7Ci0JcmV0dXJuIF9fYnVzeV9zZXRfaWZfYWN0 aXZlKGFjdGl2ZSwgX19idXN5X3JlYWRfZmxhZyk7CisJcmV0dXJuIF9fYnVzeV9zZXRfaWZfYWN0 aXZlKGZlbmNlLCBfX2J1c3lfcmVhZF9mbGFnKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGlu ZSB1bnNpZ25lZCBpbnQKLWJ1c3lfY2hlY2tfd3JpdGVyKGNvbnN0IHN0cnVjdCBpOTE1X2dlbV9h Y3RpdmUgKmFjdGl2ZSkKK2J1c3lfY2hlY2tfd3JpdGVyKGNvbnN0IHN0cnVjdCBmZW5jZSAqZmVu Y2UpCiB7Ci0JcmV0dXJuIF9fYnVzeV9zZXRfaWZfYWN0aXZlKGFjdGl2ZSwgX19idXN5X3dyaXRl X2lkKTsKKwlpZiAoIWZlbmNlKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBfX2J1c3lfc2V0X2lm X2FjdGl2ZShmZW5jZSwgX19idXN5X3dyaXRlX2lkKTsKIH0KIAogaW50CkBAIC0zOTk2LDYzICsz OTA1LDUyIEBAIGk5MTVfZ2VtX2J1c3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2J1c3kgKmFyZ3MgPSBkYXRhOwogCXN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Ci0JdW5zaWduZWQgbG9uZyBhY3RpdmU7CisJ c3RydWN0IHJlc2VydmF0aW9uX29iamVjdF9saXN0ICpsaXN0OworCXVuc2lnbmVkIGludCBzZXE7 CiAJaW50IGVycjsKIAorCWVyciA9IC1FTk9FTlQ7CiAJcmN1X3JlYWRfbG9jaygpOwogCW9iaiA9 IGk5MTVfZ2VtX29iamVjdF9sb29rdXBfcmN1KGZpbGUsIGFyZ3MtPmhhbmRsZSk7Ci0JaWYgKCFv YmopIHsKLQkJZXJyID0gLUVOT0VOVDsKKwlpZiAoIW9iaikKIAkJZ290byBvdXQ7Ci0JfQogCi0J YXJncy0+YnVzeSA9IDA7Ci0JYWN0aXZlID0gX19JOTE1X0JPX0FDVElWRShvYmopOwotCWlmIChh Y3RpdmUpIHsKLQkJaW50IGlkeDsKLQotCQkvKiBZZXMsIHRoZSBsb29rdXBzIGFyZSBpbnRlbnRp b25hbGx5IHJhY3kuCi0JCSAqCi0JCSAqIEZpcnN0LCB3ZSBjYW5ub3Qgc2ltcGx5IHJlbHkgb24g X19JOTE1X0JPX0FDVElWRS4gV2UgaGF2ZQotCQkgKiB0byByZWdhcmQgdGhlIHZhbHVlIGFzIHN0 YWxlIGFuZCBhcyBvdXIgQUJJIGd1YXJhbnRlZXMKLQkJICogZm9yd2FyZCBwcm9ncmVzcywgd2Ug Y29uZmlybSB0aGUgc3RhdHVzIG9mIGVhY2ggYWN0aXZlCi0JCSAqIHJlcXVlc3Qgd2l0aCB0aGUg aGFyZHdhcmUuCi0JCSAqCi0JCSAqIEV2ZW4gdGhvdWdoIHdlIGd1YXJkIHRoZSBwb2ludGVyIGxv b2t1cCBieSBSQ1UsIHRoYXQgb25seQotCQkgKiBndWFyYW50ZWVzIHRoYXQgdGhlIHBvaW50ZXIg YW5kIGl0cyBjb250ZW50cyByZW1haW4KLQkJICogZGVyZWZlcmVuY2FibGUgYW5kIGRvZXMgKm5v dCogbWVhbiB0aGF0IHRoZSByZXF1ZXN0IHdlCi0JCSAqIGhhdmUgaXMgdGhlIHNhbWUgYXMgdGhl IG9uZSBiZWluZyB0cmFja2VkIGJ5IHRoZSBvYmplY3QuCi0JCSAqCi0JCSAqIENvbnNpZGVyIHRo YXQgd2UgbG9va3VwIHRoZSByZXF1ZXN0IGp1c3QgYXMgaXQgaXMgYmVpbmcKLQkJICogcmV0aXJl ZCBhbmQgZnJlZWQuIFdlIHRha2UgYSBsb2NhbCBjb3B5IG9mIHRoZSBwb2ludGVyLAotCQkgKiBi dXQgYmVmb3JlIHdlIGFkZCBpdHMgZW5naW5lIGludG8gdGhlIGJ1c3kgc2V0LCB0aGUgb3RoZXIK LQkJICogdGhyZWFkIHJlYWxsb2NhdGVzIGl0IGFuZCBhc3NpZ25zIGl0IHRvIGEgdGFzayBvbiBh bm90aGVyCi0JCSAqIGVuZ2luZSB3aXRoIGEgZnJlc2ggYW5kIGluY29tcGxldGUgc2Vxbm8uIEd1 YXJkaW5nIGFnYWluc3QKLQkJICogdGhhdCByZXF1aXJlcyBjYXJlZnVsIHNlcmlhbGlzYXRpb24g YW5kIHJlZmVyZW5jZSBjb3VudGluZywKLQkJICogaS5lLiB1c2luZyBfX2k5MTVfZ2VtX2FjdGl2 ZV9nZXRfcmVxdWVzdF9yY3UoKS4gV2UgZG9uJ3QsCi0JCSAqIGluc3RlYWQgd2UgZXhwZWN0IHRo YXQgaWYgdGhlIHJlc3VsdCBpcyBidXN5LCB3aGljaCBlbmdpbmVzCi0JCSAqIGFyZSBidXN5IGlz IG5vdCBjb21wbGV0ZWx5IHJlbGlhYmxlIC0gd2Ugb25seSBndWFyYW50ZWUKLQkJICogdGhhdCB0 aGUgb2JqZWN0IHdhcyBidXN5LgotCQkgKi8KLQotCQlmb3JfZWFjaF9hY3RpdmUoYWN0aXZlLCBp ZHgpCi0JCQlhcmdzLT5idXN5IHw9IGJ1c3lfY2hlY2tfcmVhZGVyKCZvYmotPmxhc3RfcmVhZFtp ZHhdKTsKLQotCQkvKiBGb3IgQUJJIHNhbml0eSwgd2Ugb25seSBjYXJlIHRoYXQgdGhlIHdyaXRl IGVuZ2luZSBpcyBpbgotCQkgKiB0aGUgc2V0IG9mIHJlYWQgZW5naW5lcy4gVGhpcyBzaG91bGQg YmUgZW5zdXJlZCBieSB0aGUKLQkJICogb3JkZXJpbmcgb2Ygc2V0dGluZyBsYXN0X3JlYWQvbGFz dF93cml0ZSBpbgotCQkgKiBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZSgpLCBhbmQgdGhlbiBpbiBy ZXZlcnNlIGluIHJldGlyZS4KLQkJICogSG93ZXZlciwgZm9yIGdvb2QgbWVhc3VyZSwgd2UgYWx3 YXlzIHJlcG9ydCB0aGUgbGFzdF93cml0ZQotCQkgKiByZXF1ZXN0IGFzIGEgYnVzeSByZWFkIGFz IHdlbGwgYXMgYmVpbmcgYSBidXN5IHdyaXRlLgotCQkgKgotCQkgKiBXZSBkb24ndCBjYXJlIHRo YXQgdGhlIHNldCBvZiBhY3RpdmUgcmVhZC93cml0ZSBlbmdpbmVzCi0JCSAqIG1heSBjaGFuZ2Ug ZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGUgcmVzdWx0LCBhcyBpdCBpcwotCQkgKiBlcXVhbGx5 IGxpYWJsZSB0byBjaGFuZ2UgYmVmb3JlIHVzZXJzcGFjZSBjYW4gaW5zcGVjdAotCQkgKiB0aGUg cmVzdWx0LgotCQkgKi8KLQkJYXJncy0+YnVzeSB8PSBidXN5X2NoZWNrX3dyaXRlcigmb2JqLT5s YXN0X3dyaXRlKTsKKwkvKiBBIGRpc2NyZXBhbmN5IGhlcmUgaXMgdGhhdCB3ZSBkbyBub3QgcmVw b3J0IHRoZSBzdGF0dXMgb2YKKwkgKiBub24taTkxNSBmZW5jZXMsIGkuZS4gZXZlbiB0aG91Z2gg d2UgbWF5IHJlcG9ydCB0aGUgb2JqZWN0IGFzIGlkbGUsCisJICogYSBjYWxsIHRvIHNldC1kb21h aW4gbWF5IHN0aWxsIHN0YWxsIHdhaXRpbmcgZm9yIGZvcmVpZ24gcmVuZGVyaW5nLgorCSAqIFRo aXMgYWxzbyBtZWFucyB0aGF0IHdhaXQtaW9jdGwgbWF5IHJlcG9ydCBhbiBvYmplY3QgYXMgYnVz eSwKKwkgKiB3aGVyZSBidXN5LWlvY3RsIGNvbnNpZGVycyBpdCBpZGxlLgorCSAqCisJICogV2Ug dHJhZGUgdGhlIGFiaWxpdHkgdG8gd2FybiBvZiBmb3JlaWduIGZlbmNlcyB0byByZXBvcnQgb24g d2hpY2gKKwkgKiBpOTE1IGVuZ2luZXMgYXJlIGFjdGl2ZSBmb3IgdGhlIG9iamVjdC4KKwkgKgor CSAqIEFsdGVybmF0aXZlbHksIHdlIGNhbiB0cmFkZSB0aGF0IGV4dHJhIGluZm9ybWF0aW9uIG9u IHJlYWQvd3JpdGUKKwkgKiBhY3Rpdml0eSB3aXRoCisJICogCWFyZ3MtPmJ1c3kgPQorCSAqCQkh cmVzZXJ2YXRpb25fb2JqZWN0X3Rlc3Rfc2lnbmFsZWRfcmN1KG9iai0+cmVzdiwgdHJ1ZSk7CisJ ICogdG8gcmVwb3J0IHRoZSBvdmVyYWxsIGJ1c3luZXNzLiBUaGlzIGlzIHdoYXQgdGhlIHdhaXQt aW9jdGwgZG9lcy4KKwkgKgorCSAqLworcmV0cnk6CisJc2VxID0gcmVhZF9zZXFjb3VudF9iZWdp bigmb2JqLT5yZXN2LT5zZXEpOworCisJLyogVHJhbnNsYXRlIHRoZSBleGNsdXNpdmUgZmVuY2Ug dG8gdGhlIFJFQUQgKmFuZCogV1JJVEUgZW5naW5lICovCisJYXJncy0+YnVzeSA9IGJ1c3lfY2hl Y2tfd3JpdGVyKHJjdV9kZXJlZmVyZW5jZShvYmotPnJlc3YtPmZlbmNlX2V4Y2wpKTsKKworCS8q IFRyYW5zbGF0ZSBzaGFyZWQgZmVuY2VzIHRvIFJFQUQgc2V0IG9mIGVuZ2luZXMgKi8KKwlsaXN0 ID0gcmN1X2RlcmVmZXJlbmNlKG9iai0+cmVzdi0+ZmVuY2UpOworCWlmIChsaXN0KSB7CisJCXVu c2lnbmVkIHNoYXJlZF9jb3VudCA9IGxpc3QtPnNoYXJlZF9jb3VudCwgaTsKKwkJZm9yIChpID0g MDsgaSA8IHNoYXJlZF9jb3VudDsgKytpKSB7CisJCQlzdHJ1Y3QgZmVuY2UgKmZlbmNlID0gcmN1 X2RlcmVmZXJlbmNlKGxpc3QtPnNoYXJlZFtpXSk7CisJCQlhcmdzLT5idXN5IHw9IGJ1c3lfY2hl Y2tfcmVhZGVyKGZlbmNlKTsKKwkJfQogCX0KIAorCWlmIChhcmdzLT5idXN5ICYmIHJlYWRfc2Vx Y291bnRfcmV0cnkoJm9iai0+cmVzdi0+c2VxLCBzZXEpKQorCQlnb3RvIHJldHJ5OworCisJZXJy ID0gMDsKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwpAQCAtNDExNywy MiArNDAxNSwxOCBAQCBlcnI6CiB2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0X29wcyAqb3BzKQogewotCWludCBpOwotCiAJbXV0ZXhfaW5pdCgmb2JqLT5tbS5sb2NrKTsK IAogCUlOSVRfTElTVF9IRUFEKCZvYmotPmdsb2JhbF9saXN0KTsKLQlmb3IgKGkgPSAwOyBpIDwg STkxNV9OVU1fRU5HSU5FUzsgaSsrKQotCQlpbml0X3JlcXVlc3RfYWN0aXZlKCZvYmotPmxhc3Rf cmVhZFtpXSwKLQkJCQkgICAgaTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZCk7Ci0JaW5pdF9y ZXF1ZXN0X2FjdGl2ZSgmb2JqLT5sYXN0X3dyaXRlLAotCQkJICAgIGk5MTVfZ2VtX29iamVjdF9y ZXRpcmVfX3dyaXRlKTsKIAlJTklUX0xJU1RfSEVBRCgmb2JqLT5vYmpfZXhlY19saW5rKTsKIAlJ TklUX0xJU1RfSEVBRCgmb2JqLT52bWFfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm9iai0+YmF0 Y2hfcG9vbF9saW5rKTsKIAogCW9iai0+b3BzID0gb3BzOwogCisJcmVzZXJ2YXRpb25fb2JqZWN0 X2luaXQoJm9iai0+X19idWlsdGluX3Jlc3YpOworCW9iai0+cmVzdiA9ICZvYmotPl9fYnVpbHRp bl9yZXN2OworCiAJb2JqLT5mcm9udGJ1ZmZlcl9nZ3R0X29yaWdpbiA9IE9SSUdJTl9HVFQ7CiAK IAlvYmotPm1tLm1hZHYgPSBJOTE1X01BRFZfV0lMTE5FRUQ7CkBAIC00MjcwLDYgKzQxNjQsNyBA QCBzdGF0aWMgdm9pZCBfX2k5MTVfZ2VtX2ZyZWVfb2JqZWN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwKIAkJaWYgKG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoKQogCQkJZHJtX3ByaW1l X2dlbV9kZXN0cm95KCZvYmotPmJhc2UsIE5VTEwpOwogCisJCXJlc2VydmF0aW9uX29iamVjdF9m aW5pKCZvYmotPl9fYnVpbHRpbl9yZXN2KTsKIAkJZHJtX2dlbV9vYmplY3RfcmVsZWFzZSgmb2Jq LT5iYXNlKTsKIAkJaTkxNV9nZW1faW5mb19yZW1vdmVfb2JqKGk5MTUsIG9iai0+YmFzZS5zaXpl KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9v bC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fYmF0Y2hfcG9vbC5jCmluZGV4IDZi NjU2ODIyYmIzYS4uMTU5YTg2OGM3Y2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9iYXRjaF9wb29sLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fYmF0Y2hfcG9vbC5jCkBAIC0xMTQsOCArMTE0LDcgQEAgaTkxNV9nZW1fYmF0Y2hfcG9vbF9n ZXQoc3RydWN0IGk5MTVfZ2VtX2JhdGNoX3Bvb2wgKnBvb2wsCiAKIAlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KHRtcCwgbGlzdCwgYmF0Y2hfcG9vbF9saW5rKSB7CiAJCS8qIFRoZSBiYXRjaGVzIGFyZSBz dHJpY3RseSBMUlUgb3JkZXJlZCAqLwotCQlpZiAoIWk5MTVfZ2VtX2FjdGl2ZV9pc19pZGxlKCZ0 bXAtPmxhc3RfcmVhZFtwb29sLT5lbmdpbmUtPmlkXSwKLQkJCQkJICAgICAmdG1wLT5iYXNlLmRl di0+c3RydWN0X211dGV4KSkKKwkJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19hY3RpdmUodG1wKSkK IAkJCWJyZWFrOwogCiAJCWlmICh0bXAtPmJhc2Uuc2l6ZSA+PSBzaXplKSB7CmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFidWYuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5jCmluZGV4IDYxYjk4M2VmYmEzZi4uMWI5MTc4MGUwZmMy IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFidWYuYworKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFidWYuYwpAQCAtMjExLDQ5ICsyMTEs NiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIGk5MTVfZG1hYnVmX29wcyA9ICB7 CiAJLmVuZF9jcHVfYWNjZXNzID0gaTkxNV9nZW1fZW5kX2NwdV9hY2Nlc3MsCiB9OwogCi1zdGF0 aWMgdm9pZCBleHBvcnRfZmVuY2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0J CQkgIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQotewotCXN0cnVjdCByZXNlcnZhdGlvbl9vYmpl Y3QgKnJlc3YgPSBkbWFfYnVmLT5yZXN2OwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxOwotCXVuc2lnbmVkIGxvbmcgYWN0aXZlOwotCWludCBpZHg7Ci0KLQlhY3RpdmUgPSBfX0k5 MTVfQk9fQUNUSVZFKG9iaik7Ci0JaWYgKCFhY3RpdmUpCi0JCXJldHVybjsKLQotCS8qIFNlcmlh bGlzZSB3aXRoIGV4ZWNidWYgdG8gcHJldmVudCBjb25jdXJyZW50IGZlbmNlLWxvb3BzICovCi0J bXV0ZXhfbG9jaygmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKLQotCS8qIE1hcmsgdGhl IG9iamVjdCBmb3IgZnV0dXJlIGZlbmNlcyBiZWZvcmUgcmFjaWx5IGFkZGluZyBvbGQgZmVuY2Vz ICovCi0Jb2JqLT5iYXNlLmRtYV9idWYgPSBkbWFfYnVmOwotCi0Jd3dfbXV0ZXhfbG9jaygmcmVz di0+bG9jaywgTlVMTCk7Ci0KLQlmb3JfZWFjaF9hY3RpdmUoYWN0aXZlLCBpZHgpIHsKLQkJcmVx ID0gaTkxNV9nZW1fYWN0aXZlX2dldCgmb2JqLT5sYXN0X3JlYWRbaWR4XSwKLQkJCQkJICAmb2Jq LT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKLQkJaWYgKCFyZXEpCi0JCQljb250aW51ZTsKLQot CQlpZiAocmVzZXJ2YXRpb25fb2JqZWN0X3Jlc2VydmVfc2hhcmVkKHJlc3YpID09IDApCi0JCQly ZXNlcnZhdGlvbl9vYmplY3RfYWRkX3NoYXJlZF9mZW5jZShyZXN2LCAmcmVxLT5mZW5jZSk7Ci0K LQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocmVxKTsKLQl9Ci0KLQlyZXEgPSBpOTE1X2dlbV9hY3Rp dmVfZ2V0KCZvYmotPmxhc3Rfd3JpdGUsCi0JCQkJICAmb2JqLT5iYXNlLmRldi0+c3RydWN0X211 dGV4KTsKLQlpZiAocmVxKSB7Ci0JCXJlc2VydmF0aW9uX29iamVjdF9hZGRfZXhjbF9mZW5jZShy ZXN2LCAmcmVxLT5mZW5jZSk7Ci0JCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHJlcSk7Ci0JfQotCi0J d3dfbXV0ZXhfdW5sb2NrKCZyZXN2LT5sb2NrKTsKLQltdXRleF91bmxvY2soJm9iai0+YmFzZS5k ZXYtPnN0cnVjdF9tdXRleCk7Ci19Ci0KIHN0cnVjdCBkbWFfYnVmICppOTE1X2dlbV9wcmltZV9l eHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgICAgICBzdHJ1Y3QgZHJtX2dlbV9v YmplY3QgKmdlbV9vYmosIGludCBmbGFncykKIHsKQEAgLTI2NSw2ICsyMjIsNyBAQCBzdHJ1Y3Qg ZG1hX2J1ZiAqaTkxNV9nZW1fcHJpbWVfZXhwb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJ ZXhwX2luZm8uc2l6ZSA9IGdlbV9vYmotPnNpemU7CiAJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsK IAlleHBfaW5mby5wcml2ID0gZ2VtX29iajsKKwlleHBfaW5mby5yZXN2ID0gb2JqLT5yZXN2Owog CiAJaWYgKG9iai0+b3BzLT5kbWFidWZfZXhwb3J0KSB7CiAJCWludCByZXQgPSBvYmotPm9wcy0+ ZG1hYnVmX2V4cG9ydChvYmopOwpAQCAtMjc2LDcgKzIzNCw2IEBAIHN0cnVjdCBkbWFfYnVmICpp OTE1X2dlbV9wcmltZV9leHBvcnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAlpZiAoSVNfRVJS KGRtYV9idWYpKQogCQlyZXR1cm4gZG1hX2J1ZjsKIAotCWV4cG9ydF9mZW5jZXMob2JqLCBkbWFf YnVmKTsKIAlyZXR1cm4gZG1hX2J1ZjsKIH0KIApAQCAtMzM1LDYgKzI5Miw3IEBAIHN0cnVjdCBk cm1fZ2VtX29iamVjdCAqaTkxNV9nZW1fcHJpbWVfaW1wb3J0KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYsCiAJZHJtX2dlbV9wcml2YXRlX29iamVjdF9pbml0KGRldiwgJm9iai0+YmFzZSwgZG1hX2J1 Zi0+c2l6ZSk7CiAJaTkxNV9nZW1fb2JqZWN0X2luaXQob2JqLCAmaTkxNV9nZW1fb2JqZWN0X2Rt YWJ1Zl9vcHMpOwogCW9iai0+YmFzZS5pbXBvcnRfYXR0YWNoID0gYXR0YWNoOworCW9iai0+cmVz diA9IGRtYV9idWYtPnJlc3Y7CiAKIAkvKiBXZSB1c2UgR1RUIGFzIHNob3J0aGFuZCBmb3IgYSBj b2hlcmVudCBkb21haW4sIG9uZSB0aGF0IGlzCiAJICogbmVpdGhlciBpbiB0aGUgR1BVIGNhY2hl IG5vciBpbiB0aGUgQ1BVIGNhY2hlLCB3aGVyZSBhbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZG1hYnVmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMzE1NTU3ZTQyMS4u MDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5o CisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDE2IElu dGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0g KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRX QVJFLgotICoKLSAqLwotCi0jaWZuZGVmIF9JOTE1X0dFTV9ETUFCVUZfSF8KLSNkZWZpbmUgX0k5 MTVfR0VNX0RNQUJVRl9IXwotCi0jaW5jbHVkZSA8bGludXgvZG1hLWJ1Zi5oPgotCi1zdGF0aWMg aW5saW5lIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKgotaTkxNV9nZW1fb2JqZWN0X2dldF9k bWFidWZfcmVzdihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQotewotCXN0cnVjdCBk bWFfYnVmICpkbWFfYnVmOwotCi0JaWYgKG9iai0+YmFzZS5kbWFfYnVmKQotCQlkbWFfYnVmID0g b2JqLT5iYXNlLmRtYV9idWY7Ci0JZWxzZSBpZiAob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gpCi0J CWRtYV9idWYgPSBvYmotPmJhc2UuaW1wb3J0X2F0dGFjaC0+ZG1hYnVmOwotCWVsc2UKLQkJcmV0 dXJuIE5VTEw7Ci0KLQlyZXR1cm4gZG1hX2J1Zi0+cmVzdjsKLX0KLQotI2VuZGlmCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKaW5kZXggMDQ5MWEyYWYyNmQxLi5l MmQ0ZjkzN2QwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4 ZWNidWZmZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVy LmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KIAogI2luY2x1 ZGUgImk5MTVfZHJ2LmgiCi0jaW5jbHVkZSAiaTkxNV9nZW1fZG1hYnVmLmgiCiAjaW5jbHVkZSAi aTkxNV90cmFjZS5oIgogI2luY2x1ZGUgImludGVsX2Rydi5oIgogI2luY2x1ZGUgImludGVsX2Zy b250YnVmZmVyLmgiCkBAIC01NTIsMjAgKzU1MSw2IEBAIHJlcGVhdDoKIAlyZXR1cm4gMDsKIH0K IAotc3RhdGljIGJvb2wgb2JqZWN0X2lzX2lkbGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKLXsKLQl1bnNpZ25lZCBsb25nIGFjdGl2ZSA9IGk5MTVfZ2VtX29iamVjdF9nZXRfYWN0 aXZlKG9iaik7Ci0JaW50IGlkeDsKLQotCWZvcl9lYWNoX2FjdGl2ZShhY3RpdmUsIGlkeCkgewot CQlpZiAoIWk5MTVfZ2VtX2FjdGl2ZV9pc19pZGxlKCZvYmotPmxhc3RfcmVhZFtpZHhdLAotCQkJ CQkgICAgICZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpKQotCQkJcmV0dXJuIGZhbHNlOwot CX0KLQotCXJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgaW50CiBpOTE1X2dlbV9leGVjYnVmZmVy X3JlbG9jYXRlX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJICAg c3RydWN0IGViX3ZtYXMgKmViLApAQCAtNjUwLDcgKzYzNSw4IEBAIGk5MTVfZ2VtX2V4ZWNidWZm ZXJfcmVsb2NhdGVfZW50cnkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAl9CiAK IAkvKiBXZSBjYW4ndCB3YWl0IGZvciByZW5kZXJpbmcgd2l0aCBwYWdlZmF1bHRzIGRpc2FibGVk ICovCi0JaWYgKHBhZ2VmYXVsdF9kaXNhYmxlZCgpICYmICFvYmplY3RfaXNfaWRsZShvYmopKQor CWlmIChwYWdlZmF1bHRfZGlzYWJsZWQoKSAmJgorCSAgICAhcmVzZXJ2YXRpb25fb2JqZWN0X3Rl c3Rfc2lnbmFsZWRfcmN1KG9iai0+cmVzdiwgdHJ1ZSkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJ cmV0ID0gcmVsb2NhdGVfZW50cnkob2JqLCByZWxvYywgY2FjaGUsIHRhcmdldF9vZmZzZXQpOwpA QCAtMTExMSw0NCArMTA5NywyMCBAQCBlcnI6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVu c2lnbmVkIGludCBlYl9vdGhlcl9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxKQotewotCXVuc2lnbmVkIGludCBtYXNrOwotCi0JbWFzayA9IH5pbnRlbF9lbmdpbmVfZmxh ZyhyZXEtPmVuZ2luZSkgJiBJOTE1X0JPX0FDVElWRV9NQVNLOwotCW1hc2sgPDw9IEk5MTVfQk9f QUNUSVZFX1NISUZUOwotCi0JcmV0dXJuIG1hc2s7Ci19Ci0KIHN0YXRpYyBpbnQKIGk5MTVfZ2Vt X2V4ZWNidWZmZXJfbW92ZV90b19ncHUoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEs CiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqdm1hcykKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgb3Ro ZXJfcmluZ3MgPSBlYl9vdGhlcl9lbmdpbmVzKHJlcSk7CiAJc3RydWN0IGk5MTVfdm1hICp2bWE7 CiAJaW50IHJldDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCB2bWFzLCBleGVjX2xpc3Qp IHsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+b2JqOwotCQlzdHJ1 Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2OwotCi0JCWlmIChvYmotPmZsYWdzICYgb3RoZXJf cmluZ3MpIHsKLQkJCXJldCA9IGk5MTVfZ2VtX3JlcXVlc3RfYXdhaXRfb2JqZWN0Ci0JCQkJKHJl cSwgb2JqLCBvYmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4pOwotCQkJaWYgKHJldCkKLQkJ CQlyZXR1cm4gcmV0OwotCQl9CiAKLQkJcmVzdiA9IGk5MTVfZ2VtX29iamVjdF9nZXRfZG1hYnVm X3Jlc3Yob2JqKTsKLQkJaWYgKHJlc3YpIHsKLQkJCXJldCA9IGk5MTVfc3dfZmVuY2VfYXdhaXRf cmVzZXJ2YXRpb24KLQkJCQkoJnJlcS0+c3VibWl0LCByZXN2LCAmaTkxNV9mZW5jZV9vcHMsCi0J CQkJIG9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbiwgMTAqSFosCi0JCQkJIEdGUF9LRVJO RUwgfCBfX0dGUF9OT1dBUk4pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKLQkJ fQorCQlyZXQgPSBpOTE1X2dlbV9yZXF1ZXN0X2F3YWl0X29iamVjdAorCQkJKHJlcSwgb2JqLCBv YmotPmJhc2UucGVuZGluZ193cml0ZV9kb21haW4pOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJl dDsKIAogCQlpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUp CiAJCQlpOTE1X2dlbV9jbGZsdXNoX29iamVjdChvYmosIGZhbHNlKTsKQEAgLTEyOTAsOCArMTI1 Miw2IEBAIHZvaWQgaTkxNV92bWFfbW92ZV90b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEs CiAKIAlHRU1fQlVHX09OKCFkcm1fbW1fbm9kZV9hbGxvY2F0ZWQoJnZtYS0+bm9kZSkpOwogCi0J b2JqLT5tbS5kaXJ0eSA9IHRydWU7IC8qIGJlIHBhcmFub2lkICAqLwotCiAJLyogQWRkIGEgcmVm ZXJlbmNlIGlmIHdlJ3JlIG5ld2x5IGVudGVyaW5nIHRoZSBhY3RpdmUgbGlzdC4KIAkgKiBUaGUg b3JkZXIgaW4gd2hpY2ggd2UgYWRkIG9wZXJhdGlvbnMgdG8gdGhlIHJldGlyZW1lbnQgcXVldWUg aXMKIAkgKiB2aXRhbCBoZXJlOiBtYXJrX2FjdGl2ZSBhZGRzIHRvIHRoZSBzdGFydCBvZiB0aGUg Y2FsbGJhY2sgbGlzdCwKQEAgLTEyOTksMTEgKzEyNTksMTQgQEAgdm9pZCBpOTE1X3ZtYV9tb3Zl X3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKIAkgKiBhZGQgdGhlIGFjdGl2ZSByZWZl cmVuY2UgZmlyc3QgYW5kIHF1ZXVlIGZvciBpdCB0byBiZSBkcm9wcGVkCiAJICogKmxhc3QqLgog CSAqLwotCWk5MTVfZ2VtX29iamVjdF9zZXRfYWN0aXZlKG9iaiwgaWR4KTsKLQlpOTE1X2dlbV9h Y3RpdmVfc2V0KCZvYmotPmxhc3RfcmVhZFtpZHhdLCByZXEpOworCWlmICghaTkxNV92bWFfaXNf YWN0aXZlKHZtYSkpCisJCW9iai0+YWN0aXZlX2NvdW50Kys7CisJaTkxNV92bWFfc2V0X2FjdGl2 ZSh2bWEsIGlkeCk7CisJaTkxNV9nZW1fYWN0aXZlX3NldCgmdm1hLT5sYXN0X3JlYWRbaWR4XSwg cmVxKTsKKwlsaXN0X21vdmVfdGFpbCgmdm1hLT52bV9saW5rLCAmdm1hLT52bS0+YWN0aXZlX2xp c3QpOwogCiAJaWYgKGZsYWdzICYgRVhFQ19PQkpFQ1RfV1JJVEUpIHsKLQkJaTkxNV9nZW1fYWN0 aXZlX3NldCgmb2JqLT5sYXN0X3dyaXRlLCByZXEpOworCQlpOTE1X2dlbV9hY3RpdmVfc2V0KCZ2 bWEtPmxhc3Rfd3JpdGUsIHJlcSk7CiAKIAkJaW50ZWxfZmJfb2JqX2ludmFsaWRhdGUob2JqLCBP UklHSU5fQ1MpOwogCkBAIC0xMzEzLDIxICsxMjc2LDEzIEBAIHZvaWQgaTkxNV92bWFfbW92ZV90 b19hY3RpdmUoc3RydWN0IGk5MTVfdm1hICp2bWEsCiAKIAlpZiAoZmxhZ3MgJiBFWEVDX09CSkVD VF9ORUVEU19GRU5DRSkKIAkJaTkxNV9nZW1fYWN0aXZlX3NldCgmdm1hLT5sYXN0X2ZlbmNlLCBy ZXEpOwotCi0JaTkxNV92bWFfc2V0X2FjdGl2ZSh2bWEsIGlkeCk7Ci0JaTkxNV9nZW1fYWN0aXZl X3NldCgmdm1hLT5sYXN0X3JlYWRbaWR4XSwgcmVxKTsKLQlsaXN0X21vdmVfdGFpbCgmdm1hLT52 bV9saW5rLCAmdm1hLT52bS0+YWN0aXZlX2xpc3QpOwogfQogCiBzdGF0aWMgdm9pZCBlYl9leHBv cnRfZmVuY2Uoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKIAkJCSAgICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7 Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKLQotCXJlc3YgPSBpOTE1X2dlbV9v YmplY3RfZ2V0X2RtYWJ1Zl9yZXN2KG9iaik7Ci0JaWYgKCFyZXN2KQotCQlyZXR1cm47CisJc3Ry dWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdiA9IG9iai0+cmVzdjsKIAogCS8qIElnbm9yZSBl cnJvcnMgZnJvbSBmYWlsaW5nIHRvIGFsbG9jYXRlIHRoZSBuZXcgZmVuY2UsIHdlIGNhbid0CiAJ ICogaGFuZGxlIGFuIGVycm9yIHJpZ2h0IG5vdy4gV29yc3QgY2FzZSBzaG91bGQgYmUgbWlzc2Vk CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCmluZGV4IDNhYzZhMWQ5OTVhZS4uMmE4ZWVk NWE3MGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwpAQCAtMzEsNiArMzEsNyBA QAogI2luY2x1ZGUgImk5MTVfdmdwdS5oIgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNs dWRlICJpbnRlbF9kcnYuaCIKKyNpbmNsdWRlICJpbnRlbF9mcm9udGJ1ZmZlci5oIgogCiAjZGVm aW5lIEk5MTVfR0ZQX0RNQSAoR0ZQX0tFUk5FTCB8IF9fR0ZQX0hJR0hNRU0pCiAKQEAgLTMzMjEs NiArMzMyMiw3IEBAIGk5MTVfdm1hX3JldGlyZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICphY3Rp dmUsCiAJY29uc3QgdW5zaWduZWQgaW50IGlkeCA9IHJxLT5lbmdpbmUtPmlkOwogCXN0cnVjdCBp OTE1X3ZtYSAqdm1hID0KIAkJY29udGFpbmVyX29mKGFjdGl2ZSwgc3RydWN0IGk5MTVfdm1hLCBs YXN0X3JlYWRbaWR4XSk7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+ b2JqOwogCiAJR0VNX0JVR19PTighaTkxNV92bWFfaGFzX2FjdGl2ZV9lbmdpbmUodm1hLCBpZHgp KTsKIApAQCAtMzMzMSw2ICszMzMzLDM0IEBAIGk5MTVfdm1hX3JldGlyZShzdHJ1Y3QgaTkxNV9n ZW1fYWN0aXZlICphY3RpdmUsCiAJbGlzdF9tb3ZlX3RhaWwoJnZtYS0+dm1fbGluaywgJnZtYS0+ dm0tPmluYWN0aXZlX2xpc3QpOwogCWlmICh1bmxpa2VseShpOTE1X3ZtYV9pc19jbG9zZWQodm1h KSAmJiAhaTkxNV92bWFfaXNfcGlubmVkKHZtYSkpKQogCQlXQVJOX09OKGk5MTVfdm1hX3VuYmlu ZCh2bWEpKTsKKworCUdFTV9CVUdfT04oIWk5MTVfZ2VtX29iamVjdF9pc19hY3RpdmUob2JqKSk7 CisJaWYgKC0tb2JqLT5hY3RpdmVfY291bnQpCisJCXJldHVybjsKKworCS8qIEJ1bXAgb3VyIHBs YWNlIG9uIHRoZSBib3VuZCBsaXN0IHRvIGtlZXAgaXQgcm91Z2hseSBpbiBMUlUgb3JkZXIKKwkg KiBzbyB0aGF0IHdlIGRvbid0IHN0ZWFsIGZyb20gcmVjZW50bHkgdXNlZCBidXQgaW5hY3RpdmUg b2JqZWN0cworCSAqICh1bmxlc3Mgd2UgYXJlIGZvcmNlZCB0byBvZmMhKQorCSAqLworCWlmIChv YmotPmJpbmRfY291bnQpCisJCWxpc3RfbW92ZV90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmcnEt Pmk5MTUtPm1tLmJvdW5kX2xpc3QpOworCisJb2JqLT5tbS5kaXJ0eSA9IHRydWU7IC8qIGJlIHBh cmFub2lkICAqLworCisJaWYgKGk5MTVfZ2VtX29iamVjdF9oYXNfYWN0aXZlX3JlZmVyZW5jZShv YmopKSB7CisJCWk5MTVfZ2VtX29iamVjdF9jbGVhcl9hY3RpdmVfcmVmZXJlbmNlKG9iaik7CisJ CWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2dn dHRfcmV0aXJlX193cml0ZShzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsCisJCQlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGk5MTVfdm1hICp2 bWEgPQorCQljb250YWluZXJfb2YoYWN0aXZlLCBzdHJ1Y3QgaTkxNV92bWEsIGxhc3Rfd3JpdGUp OworCisJaW50ZWxfZmJfb2JqX2ZsdXNoKHZtYS0+b2JqLCB0cnVlLCBPUklHSU5fQ1MpOwogfQog CiB2b2lkIGk5MTVfdm1hX2Rlc3Ryb3koc3RydWN0IGk5MTVfdm1hICp2bWEpCkBAIC0zMzc0LDYg KzM0MDQsOCBAQCBfX2k5MTVfdm1hX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAogCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmV4ZWNfbGlzdCk7CiAJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUodm1hLT5sYXN0X3JlYWQpOyBpKyspCiAJCWluaXRfcmVxdWVzdF9hY3RpdmUo JnZtYS0+bGFzdF9yZWFkW2ldLCBpOTE1X3ZtYV9yZXRpcmUpOworCWluaXRfcmVxdWVzdF9hY3Rp dmUoJnZtYS0+bGFzdF93cml0ZSwKKwkJCSAgICBpOTE1X2lzX2dndHQodm0pID8gaTkxNV9nZ3R0 X3JldGlyZV9fd3JpdGUgOiBOVUxMKTsKIAlpbml0X3JlcXVlc3RfYWN0aXZlKCZ2bWEtPmxhc3Rf ZmVuY2UsIE5VTEwpOwogCWxpc3RfYWRkKCZ2bWEtPnZtX2xpbmssICZ2bS0+dW5ib3VuZF9saXN0 KTsKIAl2bWEtPnZtID0gdm07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCmluZGV4IGNm YTQxYTg4N2YyZC4uMjA1OTMyYzkwZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu aApAQCAtMjExLDYgKzIxMSw3IEBAIHN0cnVjdCBpOTE1X3ZtYSB7CiAKIAl1bnNpZ25lZCBpbnQg YWN0aXZlOwogCXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgbGFzdF9yZWFkW0k5MTVfTlVNX0VOR0lO RVNdOworCXN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgbGFzdF93cml0ZTsKIAlzdHJ1Y3QgaTkxNV9n ZW1fYWN0aXZlIGxhc3RfZmVuY2U7CiAKIAkvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X3JlcXVlc3QuYwppbmRleCBlNDRhNGQ0ZmZiOWUuLmM1N2ZmMDljZmQ0ZiAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5jCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3QuYwpAQCAtMTkzLDYgKzE5Myw4IEBAIHN0YXRpYyB2 b2lkIGk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAq cmVxdWVzdCkKIAl9CiAKIAlpOTE1X2dlbV9jb250ZXh0X3B1dChyZXF1ZXN0LT5jdHgpOworCisJ ZmVuY2Vfc2lnbmFsKCZyZXF1ZXN0LT5mZW5jZSk7CiAJaTkxNV9nZW1fcmVxdWVzdF9wdXQocmVx dWVzdCk7CiB9CiAKQEAgLTU0MCwzMyArNTQyLDQxIEBAIGk5MTVfZ2VtX3JlcXVlc3RfYXdhaXRf b2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqdG8sCiAJCQkgICAgICBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJICAgICAgYm9vbCB3cml0ZSkKIHsKLQlzdHJ1 Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmU7Ci0JdW5zaWduZWQgbG9uZyBhY3RpdmVfbWFzazsK LQlpbnQgaWR4OworCXN0cnVjdCBmZW5jZSAqZXhjbDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICh3 cml0ZSkgewotCQlhY3RpdmVfbWFzayA9IGk5MTVfZ2VtX29iamVjdF9nZXRfYWN0aXZlKG9iaik7 Ci0JCWFjdGl2ZSA9IG9iai0+bGFzdF9yZWFkOworCQlzdHJ1Y3QgZmVuY2UgKipzaGFyZWQ7CisJ CXVuc2lnbmVkIGludCBjb3VudCwgaTsKKworCQlyZXQgPSByZXNlcnZhdGlvbl9vYmplY3RfZ2V0 X2ZlbmNlc19yY3Uob2JqLT5yZXN2LAorCQkJCQkJCSZleGNsLCAmY291bnQsICZzaGFyZWQpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr KykgeworCQkJcmV0ID0gaTkxNV9nZW1fcmVxdWVzdF9hd2FpdF9mZW5jZSh0bywgc2hhcmVkW2ld KTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisKKwkJCWZlbmNlX3B1dChzaGFyZWRbaV0pOwor CQl9CisKKwkJZm9yICg7IGkgPCBjb3VudDsgaSsrKQorCQkJZmVuY2VfcHV0KHNoYXJlZFtpXSk7 CisJCWtmcmVlKHNoYXJlZCk7CiAJfSBlbHNlIHsKLQkJYWN0aXZlX21hc2sgPSAxOwotCQlhY3Rp dmUgPSAmb2JqLT5sYXN0X3dyaXRlOworCQlleGNsID0gcmVzZXJ2YXRpb25fb2JqZWN0X2dldF9l eGNsX3JjdShvYmotPnJlc3YpOwogCX0KIAotCWZvcl9lYWNoX2FjdGl2ZShhY3RpdmVfbWFzaywg aWR4KSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdDsKLQkJaW50IHJl dDsKLQotCQlyZXF1ZXN0ID0gaTkxNV9nZW1fYWN0aXZlX3BlZWsoJmFjdGl2ZVtpZHhdLAotCQkJ CQkgICAgICAgJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWlmICghcmVxdWVzdCkK LQkJCWNvbnRpbnVlOworCWlmIChleGNsKSB7CisJCWlmIChyZXQgPT0gMCkKKwkJCXJldCA9IGk5 MTVfZ2VtX3JlcXVlc3RfYXdhaXRfZmVuY2UodG8sIGV4Y2wpOwogCi0JCXJldCA9IGk5MTVfZ2Vt X3JlcXVlc3RfYXdhaXRfcmVxdWVzdCh0bywgcmVxdWVzdCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1 cm4gcmV0OworCQlmZW5jZV9wdXQoZXhjbCk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJl dDsKIH0KIAogc3RhdGljIHZvaWQgaTkxNV9nZW1fbWFya19idXN5KGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtX3JlcXVlc3QuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3JlcXVlc3Qu aAppbmRleCA0NTk5OGVlZGRhMmMuLmI4ZmVmZjU4NTdhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fcmVxdWVzdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX3JlcXVlc3QuaApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCB7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmVuY2Vfb3BzIGk5MTVfZmVuY2Vf b3BzOwogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVuY2VfaXNfaTkxNShzdHJ1Y3QgZmVuY2UgKmZl bmNlKQorc3RhdGljIGlubGluZSBib29sIGZlbmNlX2lzX2k5MTUoY29uc3Qgc3RydWN0IGZlbmNl ICpmZW5jZSkKIHsKIAlyZXR1cm4gZmVuY2UtPm9wcyA9PSAmaTkxNV9mZW5jZV9vcHM7CiB9CkBA IC01NTQsMjIgKzU1NCw3IEBAIGk5MTVfZ2VtX2FjdGl2ZV9pc3NldChjb25zdCBzdHJ1Y3QgaTkx NV9nZW1fYWN0aXZlICphY3RpdmUpCiB9CiAKIC8qKgotICogaTkxNV9nZW1fYWN0aXZlX2lzX2lk bGUgLSByZXBvcnQgd2hldGhlciB0aGUgYWN0aXZlIHRyYWNrZXIgaXMgaWRsZQotICogQGFjdGl2 ZSAtIHRoZSBhY3RpdmUgdHJhY2tlcgotICoKLSAqIGk5MTVfZ2VtX2FjdGl2ZV9pc19pZGxlKCkg cmV0dXJucyB0cnVlIGlmIHRoZSBhY3RpdmUgdHJhY2tlciBpcyBjdXJyZW50bHkKLSAqIHVuYXNz aWduZWQgb3IgaWYgdGhlIHJlcXVlc3QgaXMgY29tcGxldGUgKGJ1dCBub3QgeWV0IHJldGlyZWQp LiBSZXF1aXJlcwotICogdGhlIGNhbGxlciB0byBob2xkIHN0cnVjdF9tdXRleCAoYnV0IHRoYXQg Y2FuIGJlIHJlbGF4ZWQgaWYgZGVzaXJlZCkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbAotaTkx NV9nZW1fYWN0aXZlX2lzX2lkbGUoY29uc3Qgc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZl LAotCQkJc3RydWN0IG11dGV4ICptdXRleCkKLXsKLQlyZXR1cm4gIWk5MTVfZ2VtX2FjdGl2ZV9w ZWVrKGFjdGl2ZSwgbXV0ZXgpOwotfQotCi0vKioKLSAqIGk5MTVfZ2VtX2FjdGl2ZV93YWl0LSB3 YWl0cyB1bnRpbCB0aGUgcmVxdWVzdCBpcyBjb21wbGV0ZWQKKyAqIGk5MTVfZ2VtX2FjdGl2ZV93 YWl0IC0gd2FpdHMgdW50aWwgdGhlIHJlcXVlc3QgaXMgY29tcGxldGVkCiAgKiBAYWN0aXZlIC0g dGhlIGFjdGl2ZSByZXF1ZXN0IG9uIHdoaWNoIHRvIHdhaXQKICAqIEBmbGFncyAtIGhvdyB0byB3 YWl0CiAgKiBAdGltZW91dCAtIGhvdyBsb25nIHRvIHdhaXQgYXQgbW9zdApAQCAtNjM5LDI0ICs2 MjQsNiBAQCBpOTE1X2dlbV9hY3RpdmVfcmV0aXJlKHN0cnVjdCBpOTE1X2dlbV9hY3RpdmUgKmFj dGl2ZSwKIAlyZXR1cm4gMDsKIH0KIAotLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBwZWVr aW5nIGF0IHN0YXRlIGluc2lkZSBhY3RpdmUncyByZXF1ZXN0IHdoaWxzdAotICogZ3VhcmRlZCBi eSB0aGUgc3RydWN0X211dGV4LgotICovCi0KLXN0YXRpYyBpbmxpbmUgdWludDMyX3QKLWk5MTVf Z2VtX2FjdGl2ZV9nZXRfc2Vxbm8oY29uc3Qgc3RydWN0IGk5MTVfZ2VtX2FjdGl2ZSAqYWN0aXZl LAotCQkJICBzdHJ1Y3QgbXV0ZXggKm11dGV4KQotewotCXJldHVybiBpOTE1X2dlbV9yZXF1ZXN0 X2dldF9zZXFubyhpOTE1X2dlbV9hY3RpdmVfcGVlayhhY3RpdmUsIG11dGV4KSk7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqCi1pOTE1X2dlbV9hY3RpdmVfZ2V0 X2VuZ2luZShjb25zdCBzdHJ1Y3QgaTkxNV9nZW1fYWN0aXZlICphY3RpdmUsCi0JCQkgICBzdHJ1 Y3QgbXV0ZXggKm11dGV4KQotewotCXJldHVybiBpOTE1X2dlbV9yZXF1ZXN0X2dldF9lbmdpbmUo aTkxNV9nZW1fYWN0aXZlX3BlZWsoYWN0aXZlLCBtdXRleCkpOwotfQotCiAjZGVmaW5lIGZvcl9l YWNoX2FjdGl2ZShtYXNrLCBpZHgpIFwKIAlmb3IgKDsgbWFzayA/IGlkeCA9IGZmcyhtYXNrKSAt IDEsIDEgOiAwOyBtYXNrICY9IH5CSVQoaWR4KSkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1 X2Vycm9yLmMKaW5kZXggNTZhOTI5MWJlZGU4Li5iNzY4N2ExZmFmMzAgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9ncHVfZXJyb3IuYwpAQCAtODM5LDkgKzgzOSw5IEBAIHN0YXRpYyB2b2lkIGNh cHR1cmVfYm8oc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAqZXJyLAogCWVyci0+bmFtZSA9 IG9iai0+YmFzZS5uYW1lOwogCiAJZm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX0VOR0lORVM7IGkr KykKLQkJZXJyLT5yc2Vxbm9baV0gPSBfX2FjdGl2ZV9nZXRfc2Vxbm8oJm9iai0+bGFzdF9yZWFk W2ldKTsKLQllcnItPndzZXFubyA9IF9fYWN0aXZlX2dldF9zZXFubygmb2JqLT5sYXN0X3dyaXRl KTsKLQllcnItPmVuZ2luZSA9IF9fYWN0aXZlX2dldF9lbmdpbmVfaWQoJm9iai0+bGFzdF93cml0 ZSk7CisJCWVyci0+cnNlcW5vW2ldID0gX19hY3RpdmVfZ2V0X3NlcW5vKCZ2bWEtPmxhc3RfcmVh ZFtpXSk7CisJZXJyLT53c2Vxbm8gPSBfX2FjdGl2ZV9nZXRfc2Vxbm8oJnZtYS0+bGFzdF93cml0 ZSk7CisJZXJyLT5lbmdpbmUgPSBfX2FjdGl2ZV9nZXRfZW5naW5lX2lkKCZ2bWEtPmxhc3Rfd3Jp dGUpOwogCiAJZXJyLT5ndHRfb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0OwogCWVyci0+cmVhZF9k b21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfYXRvbWljX3BsYW5lLmMKaW5kZXggYjgyZGUzMDcyZDRmLi5hODkyNzkyOWM3NDAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCkBAIC04NCw3ICs4NCw2IEBA IGludGVsX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKIAlz dGF0ZSA9ICZpbnRlbF9zdGF0ZS0+YmFzZTsKIAogCV9fZHJtX2F0b21pY19oZWxwZXJfcGxhbmVf ZHVwbGljYXRlX3N0YXRlKHBsYW5lLCBzdGF0ZSk7Ci0JaW50ZWxfc3RhdGUtPndhaXRfcmVxID0g TlVMTDsKIAogCXJldHVybiBzdGF0ZTsKIH0KQEAgLTEwMSw3ICsxMDAsNiBAQCB2b2lkCiBpbnRl bF9wbGFuZV9kZXN0cm95X3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAogCQkJICBzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKIHsKLQlXQVJOX09OKHN0YXRlICYmIHRvX2ludGVs X3BsYW5lX3N0YXRlKHN0YXRlKS0+d2FpdF9yZXEpOwogCWRybV9hdG9taWNfaGVscGVyX3BsYW5l X2Rlc3Ryb3lfc3RhdGUocGxhbmUsIHN0YXRlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZGlzcGxheS5jCmluZGV4IGZiNDRmNWIyZjNiOS4uZWE2OTcxNjA1OTFhIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiaW50ZWxf ZnJvbnRidWZmZXIuaCIKICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KICNpbmNsdWRlICJpOTE1 X2Rydi5oIgotI2luY2x1ZGUgImk5MTVfZ2VtX2RtYWJ1Zi5oIgogI2luY2x1ZGUgImludGVsX2Rz aS5oIgogI2luY2x1ZGUgImk5MTVfdHJhY2UuaCIKICNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o PgpAQCAtMTE5MTQsMTEgKzExOTEzLDI2IEBAIHN0YXRpYyBpbnQgaW50ZWxfZ2VuN19xdWV1ZV9m bGlwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1 Y3QgaW50ZWxfZW5naW5lX2NzICoKK2xhc3Rfd3JpdGVfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lID0gTlVM TDsKKwlzdHJ1Y3QgZmVuY2UgKmZlbmNlOworCisJcmN1X3JlYWRfbG9jaygpOworCWZlbmNlID0g cmVzZXJ2YXRpb25fb2JqZWN0X2dldF9leGNsX3JjdShvYmotPnJlc3YpOworCXJjdV9yZWFkX3Vu bG9jaygpOworCisJaWYgKGZlbmNlICYmIGZlbmNlX2lzX2k5MTUoZmVuY2UpICYmICFmZW5jZV9p c19zaWduYWxlZChmZW5jZSkpCisJCWVuZ2luZSA9IHRvX3JlcXVlc3QoZmVuY2UpLT5lbmdpbmU7 CisJZmVuY2VfcHV0KGZlbmNlKTsKKworCXJldHVybiBlbmdpbmU7Cit9CisKIHN0YXRpYyBib29s IHVzZV9tbWlvX2ZsaXAoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCQkJICBzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQogewotCXN0cnVjdCByZXNlcnZhdGlvbl9vYmpl Y3QgKnJlc3Y7Ci0KIAkvKgogCSAqIFRoaXMgaXMgbm90IGJlaW5nIHVzZWQgZm9yIG9sZGVyIHBs YXRmb3JtcywgYmVjYXVzZQogCSAqIG5vbi1hdmFpbGFiaWxpdHkgb2YgZmxpcCBkb25lIGludGVy cnVwdCBmb3JjZXMgdXMgdG8gdXNlCkBAIC0xMTk0MCwxMiArMTE5NTQsNyBAQCBzdGF0aWMgYm9v bCB1c2VfbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKIAllbHNlIGlm IChpOTE1LmVuYWJsZV9leGVjbGlzdHMpCiAJCXJldHVybiB0cnVlOwogCi0JcmVzdiA9IGk5MTVf Z2VtX29iamVjdF9nZXRfZG1hYnVmX3Jlc3Yob2JqKTsKLQlpZiAocmVzdiAmJiAhcmVzZXJ2YXRp b25fb2JqZWN0X3Rlc3Rfc2lnbmFsZWRfcmN1KHJlc3YsIGZhbHNlKSkKLQkJcmV0dXJuIHRydWU7 Ci0KLQlyZXR1cm4gZW5naW5lICE9IGk5MTVfZ2VtX2FjdGl2ZV9nZXRfZW5naW5lKCZvYmotPmxh c3Rfd3JpdGUsCi0JCQkJCQkgICAgJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0 dXJuIGVuZ2luZSAhPSBsYXN0X3dyaXRlX2VuZ2luZShvYmopOwogfQogCiBzdGF0aWMgdm9pZCBz a2xfZG9fbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjLApAQCAtMTIwMTgs MTcgKzEyMDI3LDggQEAgc3RhdGljIHZvaWQgaW50ZWxfbW1pb19mbGlwX3dvcmtfZnVuYyhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKncpCiAJc3RydWN0IGludGVsX2ZyYW1lYnVmZmVyICppbnRlbF9mYiA9 CiAJCXRvX2ludGVsX2ZyYW1lYnVmZmVyKGNydGMtPmJhc2UucHJpbWFyeS0+ZmIpOwogCXN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBpbnRlbF9mYi0+b2JqOwotCXN0cnVjdCByZXNl cnZhdGlvbl9vYmplY3QgKnJlc3Y7CiAKLQlpZiAod29yay0+ZmxpcF9xdWV1ZWRfcmVxKQotCQlX QVJOX09OKGk5MTVfd2FpdF9yZXF1ZXN0KHdvcmstPmZsaXBfcXVldWVkX3JlcSwKLQkJCQkJICAw LCBNQVhfU0NIRURVTEVfVElNRU9VVCkgPCAwKTsKLQotCS8qIEZvciBmcmFtZWJ1ZmZlciBiYWNr ZWQgYnkgZG1hYnVmLCB3YWl0IGZvciBmZW5jZSAqLwotCXJlc3YgPSBpOTE1X2dlbV9vYmplY3Rf Z2V0X2RtYWJ1Zl9yZXN2KG9iaik7Ci0JaWYgKHJlc3YpCi0JCVdBUk5fT04ocmVzZXJ2YXRpb25f b2JqZWN0X3dhaXRfdGltZW91dF9yY3UocmVzdiwgZmFsc2UsIGZhbHNlLAotCQkJCQkJCSAgICBN QVhfU0NIRURVTEVfVElNRU9VVCkgPCAwKTsKKwlXQVJOX09OKGk5MTVfZ2VtX29iamVjdF93YWl0 KG9iaiwgMCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQsIE5VTEwpIDwgMCk7CiAKIAlpbnRlbF9waXBl X3VwZGF0ZV9zdGFydChjcnRjKTsKIApAQCAtMTIyMjksOCArMTIyMjksNyBAQCBzdGF0aWMgaW50 IGludGVsX2NydGNfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKIAl9IGVsc2UgaWYg KElTX0lWWUJSSURHRShkZXYpIHx8IElTX0hBU1dFTEwoZGV2KSkgewogCQllbmdpbmUgPSAmZGV2 X3ByaXYtPmVuZ2luZVtCQ1NdOwogCX0gZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0g NykgewotCQllbmdpbmUgPSBpOTE1X2dlbV9hY3RpdmVfZ2V0X2VuZ2luZSgmb2JqLT5sYXN0X3dy aXRlLAotCQkJCQkJICAgICZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQllbmdpbmUg PSBsYXN0X3dyaXRlX2VuZ2luZShvYmopOwogCQlpZiAoZW5naW5lID09IE5VTEwgfHwgZW5naW5l LT5pZCAhPSBSQ1MpCiAJCQllbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZVtCQ1NdOwogCX0gZWxz ZSB7CkBAIC0xMjI2Miw5ICsxMjI2MSw2IEBAIHN0YXRpYyBpbnQgaW50ZWxfY3J0Y19wYWdlX2Zs aXAoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCiAJaWYgKG1taW9fZmxpcCkgewogCQlJTklUX1dP UksoJndvcmstPm1taW9fd29yaywgaW50ZWxfbW1pb19mbGlwX3dvcmtfZnVuYyk7Ci0KLQkJd29y ay0+ZmxpcF9xdWV1ZWRfcmVxID0gaTkxNV9nZW1fYWN0aXZlX2dldCgmb2JqLT5sYXN0X3dyaXRl LAotCQkJCQkJCSAgICAmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKIAkJc2NoZWR1bGVf d29yaygmd29yay0+bW1pb193b3JrKTsKIAl9IGVsc2UgewogCQlyZXF1ZXN0ID0gaTkxNV9nZW1f cmVxdWVzdF9hbGxvYyhlbmdpbmUsIGVuZ2luZS0+bGFzdF9jb250ZXh0KTsKQEAgLTE0MDM2LDEz ICsxNDAzMiwxMCBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAogfQogCiBzdGF0aWMgaW50IGludGVsX2F0b21pY19wcmVwYXJlX2NvbW1pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGUsCi0JCQkJICAgICAgIGJvb2wgbm9uYmxvY2spCisJCQkJICAgICAgIHN0cnVjdCBk cm1fYXRvbWljX3N0YXRlICpzdGF0ZSkKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYgPSB0b19pOTE1KGRldik7Ci0Jc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3Rh dGU7CiAJc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlOwotCXN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAlpbnQgaSwgcmV0OwogCkBAIC0x NDA2NSwzMCArMTQwNTgsNiBAQCBzdGF0aWMgaW50IGludGVsX2F0b21pY19wcmVwYXJlX2NvbW1p dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCXJldCA9IGRybV9hdG9taWNfaGVscGVyX3ByZXBh cmVfcGxhbmVzKGRldiwgc3RhdGUpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgp OwogCi0JaWYgKCFyZXQgJiYgIW5vbmJsb2NrKSB7Ci0JCWZvcl9lYWNoX3BsYW5lX2luX3N0YXRl KHN0YXRlLCBwbGFuZSwgcGxhbmVfc3RhdGUsIGkpIHsKLQkJCXN0cnVjdCBpbnRlbF9wbGFuZV9z dGF0ZSAqaW50ZWxfcGxhbmVfc3RhdGUgPQotCQkJCXRvX2ludGVsX3BsYW5lX3N0YXRlKHBsYW5l X3N0YXRlKTsKLQkJCWxvbmcgdGltZW91dDsKLQotCQkJaWYgKCFpbnRlbF9wbGFuZV9zdGF0ZS0+ d2FpdF9yZXEpCi0JCQkJY29udGludWU7Ci0KLQkJCXRpbWVvdXQgPSBpOTE1X3dhaXRfcmVxdWVz dChpbnRlbF9wbGFuZV9zdGF0ZS0+d2FpdF9yZXEsCi0JCQkJCQkgICAgSTkxNV9XQUlUX0lOVEVS UlVQVElCTEUsCi0JCQkJCQkgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCQkJaWYgKHRpbWVv dXQgPCAwKSB7Ci0JCQkJLyogQW55IGhhbmcgc2hvdWxkIGJlIHN3YWxsb3dlZCBieSB0aGUgd2Fp dCAqLwotCQkJCVdBUk5fT04odGltZW91dCA9PSAtRUlPKTsKLQkJCQltdXRleF9sb2NrKCZkZXYt PnN0cnVjdF9tdXRleCk7Ci0JCQkJZHJtX2F0b21pY19oZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2 LCBzdGF0ZSk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCQkJcmV0 ID0gdGltZW91dDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQogCXJldHVybiByZXQ7CiB9 CiAKQEAgLTE0MjgwLDI2ICsxNDI0OSwxMSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9hdG9taWNfY29t bWl0X3RhaWwoc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQogCXN0cnVjdCBkcm1fY3J0 Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGU7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwogCXN0cnVj dCBpbnRlbF9jcnRjX3N0YXRlICppbnRlbF9jc3RhdGU7Ci0Jc3RydWN0IGRybV9wbGFuZSAqcGxh bmU7Ci0Jc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqcGxhbmVfc3RhdGU7CiAJYm9vbCBod19jaGVj ayA9IGludGVsX3N0YXRlLT5tb2Rlc2V0OwogCXVuc2lnbmVkIGxvbmcgcHV0X2RvbWFpbnNbSTkx NV9NQVhfUElQRVNdID0ge307CiAJdW5zaWduZWQgY3J0Y192YmxhbmtfbWFzayA9IDA7CiAJaW50 IGk7CiAKLQlmb3JfZWFjaF9wbGFuZV9pbl9zdGF0ZShzdGF0ZSwgcGxhbmUsIHBsYW5lX3N0YXRl LCBpKSB7Ci0JCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfcGxhbmVfc3RhdGUgPQot CQkJdG9faW50ZWxfcGxhbmVfc3RhdGUocGxhbmVfc3RhdGUpOwotCi0JCWlmICghaW50ZWxfcGxh bmVfc3RhdGUtPndhaXRfcmVxKQotCQkJY29udGludWU7Ci0KLQkJLyogRUlPIHNob3VsZCBiZSBl YXRlbiwgYW5kIHdlIGNhbid0IGdldCBpbnRlcnJ1cHRlZCBpbiB0aGUKLQkJICogd29ya2VyLCBh bmQgYmxvY2tpbmcgY29tbWl0cyBoYXZlIHdhaXRlZCBhbHJlYWR5LiAqLwotCQlXQVJOX09OKGk5 MTVfd2FpdF9yZXF1ZXN0KGludGVsX3BsYW5lX3N0YXRlLT53YWl0X3JlcSwKLQkJCQkJICAwLCBN QVhfU0NIRURVTEVfVElNRU9VVCkgPCAwKTsKLQl9Ci0KIAlkcm1fYXRvbWljX2hlbHBlcl93YWl0 X2Zvcl9kZXBlbmRlbmNpZXMoc3RhdGUpOwogCiAJaWYgKGludGVsX3N0YXRlLT5tb2Rlc2V0KSB7 CkBAIC0xNDUwNyw3ICsxNDQ2MSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfYXRvbWljX2NvbW1pdChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCiAJSU5JVF9XT1JLKCZzdGF0ZS0+Y29tbWl0X3dvcmss IGludGVsX2F0b21pY19jb21taXRfd29yayk7CiAKLQlyZXQgPSBpbnRlbF9hdG9taWNfcHJlcGFy ZV9jb21taXQoZGV2LCBzdGF0ZSwgbm9uYmxvY2spOworCXJldCA9IGludGVsX2F0b21pY19wcmVw YXJlX2NvbW1pdChkZXYsIHN0YXRlKTsKIAlpZiAocmV0KSB7CiAJCURSTV9ERUJVR19BVE9NSUMo IlByZXBhcmluZyBzdGF0ZSBmYWlsZWQgd2l0aCAlaVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsK QEAgLTE0NjM5LDcgKzE0NTkzLDcgQEAgaW50ZWxfcHJlcGFyZV9wbGFuZV9mYihzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IG5ld19zdGF0ZS0+ ZmI7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGludGVsX2ZiX29iaihmYik7 CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9sZF9vYmogPSBpbnRlbF9mYl9vYmoocGxh bmUtPnN0YXRlLT5mYik7Ci0Jc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVzdjsKKwlsb25n IGxyZXQ7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIW9iaiAmJiAhb2xkX29iaikKQEAgLTE0Njc4 LDM5ICsxNDYzMiwzNCBAQCBpbnRlbF9wcmVwYXJlX3BsYW5lX2ZiKHN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lLAogCQlyZXR1cm4gMDsKIAogCS8qIEZvciBmcmFtZWJ1ZmZlciBiYWNrZWQgYnkgZG1h YnVmLCB3YWl0IGZvciBmZW5jZSAqLwotCXJlc3YgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X2RtYWJ1 Zl9yZXN2KG9iaik7Ci0JaWYgKHJlc3YpIHsKLQkJbG9uZyBscmV0OworCWxyZXQgPSBpOTE1X2dl bV9vYmplY3Rfd2FpdChvYmosCisJCQkJICAgIEk5MTVfV0FJVF9JTlRFUlJVUFRJQkxFIHwgSTkx NV9XQUlUX0xPQ0tFRCwKKwkJCQkgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQsCisJCQkJICAgIE5V TEwpOworCWlmIChscmV0ID09IC1FUkVTVEFSVFNZUykKKwkJcmV0dXJuIGxyZXQ7CiAKLQkJbHJl dCA9IHJlc2VydmF0aW9uX29iamVjdF93YWl0X3RpbWVvdXRfcmN1KHJlc3YsIGZhbHNlLCB0cnVl LAotCQkJCQkJCSAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQkJaWYgKGxyZXQgPT0gLUVSRVNU QVJUU1lTKQotCQkJcmV0dXJuIGxyZXQ7Ci0KLQkJV0FSTihscmV0IDwgMCwgIndhaXRpbmcgcmV0 dXJucyAlbGlcbiIsIGxyZXQpOwotCX0KKwlXQVJOKGxyZXQgPCAwLCAid2FpdGluZyByZXR1cm5z ICVsaVxuIiwgbHJldCk7CiAKIAlpZiAocGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VS U09SICYmCiAJICAgIElOVEVMX0lORk8oZGV2KS0+Y3Vyc29yX25lZWRzX3BoeXNpY2FsKSB7CiAJ CWludCBhbGlnbiA9IElTX0k4MzAoZGV2KSA/IDE2ICogMTAyNCA6IDI1NjsKIAkJcmV0ID0gaTkx NV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKG9iaiwgYWxpZ24pOwotCQlpZiAocmV0KQorCQlpZiAo cmV0KSB7CiAJCQlEUk1fREVCVUdfS01TKCJmYWlsZWQgdG8gYXR0YWNoIHBoeXMgb2JqZWN0XG4i KTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9IGVsc2UgewogCQlzdHJ1Y3QgaTkxNV92bWEgKnZt YTsKIAogCQl2bWEgPSBpbnRlbF9waW5fYW5kX2ZlbmNlX2ZiX29iaihmYiwgbmV3X3N0YXRlLT5y b3RhdGlvbik7Ci0JCWlmIChJU19FUlIodm1hKSkKLQkJCXJldCA9IFBUUl9FUlIodm1hKTsKLQl9 Ci0KLQlpZiAocmV0ID09IDApIHsKLQkJdG9faW50ZWxfcGxhbmVfc3RhdGUobmV3X3N0YXRlKS0+ d2FpdF9yZXEgPQotCQkJaTkxNV9nZW1fYWN0aXZlX2dldCgmb2JqLT5sYXN0X3dyaXRlLAotCQkJ CQkgICAgJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7CisJCWlmIChJU19FUlIodm1hKSkg eworCQkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIHBpbiBvYmplY3RcbiIpOworCQkJcmV0dXJu IFBUUl9FUlIodm1hKTsKKwkJfQogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAK IC8qKgpAQCAtMTQ3MjgsNyArMTQ2NzcsNiBAQCBpbnRlbF9jbGVhbnVwX3BsYW5lX2ZiKHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lLAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwbGFuZS0+ ZGV2OwogCXN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX2ludGVsX3N0YXRlOwotCXN0cnVj dCBpbnRlbF9wbGFuZV9zdGF0ZSAqaW50ZWxfc3RhdGUgPSB0b19pbnRlbF9wbGFuZV9zdGF0ZShw bGFuZS0+c3RhdGUpOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvbGRfb2JqID0gaW50 ZWxfZmJfb2JqKG9sZF9zdGF0ZS0+ZmIpOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmogPSBpbnRlbF9mYl9vYmoocGxhbmUtPnN0YXRlLT5mYik7CiAKQEAgLTE0NzQwLDkgKzE0Njg4 LDYgQEAgaW50ZWxfY2xlYW51cF9wbGFuZV9mYihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKIAlp ZiAob2xkX29iaiAmJiAocGxhbmUtPnR5cGUgIT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SIHx8CiAJ ICAgICFJTlRFTF9JTkZPKGRldiktPmN1cnNvcl9uZWVkc19waHlzaWNhbCkpCiAJCWludGVsX3Vu cGluX2ZiX29iaihvbGRfc3RhdGUtPmZiLCBvbGRfc3RhdGUtPnJvdGF0aW9uKTsKLQotCWk5MTVf Z2VtX3JlcXVlc3RfYXNzaWduKCZpbnRlbF9zdGF0ZS0+d2FpdF9yZXEsIE5VTEwpOwotCWk5MTVf Z2VtX3JlcXVlc3RfYXNzaWduKCZvbGRfaW50ZWxfc3RhdGUtPndhaXRfcmVxLCBOVUxMKTsKIH0K IAogaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDhmZDE2YWRmMDY5Yi4uMjVlN2Ji ZjRkN2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMzk3LDkgKzM5Nyw2IEBAIHN0 cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSB7CiAJaW50IHNjYWxlcl9pZDsKIAogCXN0cnVjdCBkcm1f aW50ZWxfc3ByaXRlX2NvbG9ya2V5IGNrZXk7Ci0KLQkvKiBhc3luYyBmbGlwIHJlbGF0ZWQgc3Ry dWN0dXJlcyAqLwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqd2FpdF9yZXE7CiB9Owog CiBzdHJ1Y3QgaW50ZWxfaW5pdGlhbF9wbGFuZV9jb25maWcgewotLSAKMi45LjMKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5n IGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=