From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 170BFC433ED for ; Tue, 18 May 2021 08:27:49 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D90C1610A1 for ; Tue, 18 May 2021 08:27:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D90C1610A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 0930C6E874; Tue, 18 May 2021 08:27:42 +0000 (UTC) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8457B6E860; Tue, 18 May 2021 08:27:39 +0000 (UTC) IronPort-SDR: Hh3v3iPG36tYB7pd1fC/zjKmzafsw/1M0rqgRByl/jnFJRS+o5yqiOsI0FgZqQcLAa9nj1f9gD 7FWd/dSTis1g== X-IronPort-AV: E=McAfee;i="6200,9189,9987"; a="180937170" X-IronPort-AV: E=Sophos;i="5.82,309,1613462400"; d="scan'208";a="180937170" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2021 01:27:37 -0700 IronPort-SDR: P0/7LBMGe6uiTxlH2oaq5oqv7j3oyavaj6/i1T4MIP7e+M3bYmpJVMQItikhIY1QOHXj102yM1 8SuBzif6PnTQ== X-IronPort-AV: E=Sophos;i="5.82,309,1613462400"; d="scan'208";a="611892316" Received: from cmutgix-mobl.gar.corp.intel.com (HELO thellst-mobl1.intel.com) ([10.249.254.195]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2021 01:27:31 -0700 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= To: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Date: Tue, 18 May 2021 10:26:51 +0200 Message-Id: <20210518082701.997251-6-thomas.hellstrom@linux.intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210518082701.997251-1-thomas.hellstrom@linux.intel.com> References: <20210518082701.997251-1-thomas.hellstrom@linux.intel.com> MIME-Version: 1.0 Subject: [Intel-gfx] [PATCH v2 05/15] drm/i915/ttm Initialize the ttm device and memory managers X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" VGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBidWRkeSBhbGxvY2F0b3IgYW5kIHJlbGF0ZWQgc2VsZnRl c3RzCmFuZCBob29rIHVwIHRoZSBUVE0gcmFuZ2UgbWFuYWdlciBmb3IgaTkxNSByZWdpb25zLgoK QWxzbyBtb2RpZnkgdGhlIG1vY2sgcmVnaW9uIHNlbGZ0ZXN0cyBzb21ld2hhdCB0byBhY2NvdW50 IGZvciBhCmZyYWdtZW50aW5nIG1hbmFnZXIuCgpTaWduZWQtb2ZmLWJ5OiBUaG9tYXMgSGVsbHN0 csO2bSA8dGhvbWFzLmhlbGxzdHJvbUBsaW51eC5pbnRlbC5jb20+Ci0tLQp2MjoKLSBGaXggYW4g ZXJyb3IgdW53aW5kIGluIGxtZW1fZ2V0X3BhZ2VzKCkgKFJlcG9ydGVkIGJ5IE1hdHRoZXcgQXVs ZCkKLSBCcmVhayBvdXQgYW5kIG1vZGlmeSB1c2FnZSBvZiBpOTE1X3NnX2RtYV9zaXplcygpIChS ZXBvcnRlZCBieSBNYXR0ZXcgQXVsZCkKLSBCcmVhayBvdXQgVFRNIGNoYW5nZXMgdG8gYSBzZXBh cmF0ZSBwYXRjaCAoUmVwb3J0ZWQgYnkgQ2hyaXN0aWFuIEvDtm5pZykKLS0tCiBkcml2ZXJzL2dw dS9kcm0vaTkxNS9LY29uZmlnICAgICAgICAgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9ncHUv ZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICstCiBkcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5jICAgICAgfCAgNTkgKy0KIC4uLi9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oICB8ICAgNiArLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX3BhZ2VzLmMgICAgIHwgICAzICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmMgICAgfCAxMjAgLS0tCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmggICAgfCAgIDQgLQogZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMgICAgIHwgICA0ICstCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9nZW0vaTkxNV9nZW1fc3RvbGVuLmMgICAgfCAgMTAgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2dlbS9pOTE1X2dlbV9zdG9sZW4uaCAgICB8ICAgOSArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3QuYyAgICAgICAgICAgIHwgICAyIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX3JlZ2lvbl9sbWVtLmMgICB8ICAyNyArLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9idWRkeS5jICAgICAgICAgICAgIHwgNDM1IC0tLS0tLS0tLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfYnVkZHkuaCAgICAgICAgICAgICB8IDEzMSAtLS0KIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmMgICAgICAgICAgICAgICB8ICAgOCArCiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2Rydi5oICAgICAgICAgICAgICAgfCAgIDcgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtLmMgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dsb2JhbHMuYyAgICAgICAgICAgfCAgIDEgLQogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nbG9iYWxzLmggICAgICAgICAgIHwgICAxIC0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf c2NhdHRlcmxpc3QuYyAgICAgICB8ICA3MCArKwogZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9z Y2F0dGVybGlzdC5oICAgICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21l bW9yeV9yZWdpb24uYyAgICB8IDE4MCArKy0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9t ZW1vcnlfcmVnaW9uLmggICAgfCAgNDQgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Jl Z2lvbl90dG0uYyAgICAgICB8IDI0NSArKysrKysKIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X3JlZ2lvbl90dG0uaCAgICAgICB8ICAyOSArCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9idWRkeS5jICAgfCA3ODkgLS0tLS0tLS0tLS0tLS0tLS0tCiAuLi4vZHJtL2k5MTUv c2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaCAgfCAgIDEgLQogLi4uL2RybS9pOTE1L3Nl bGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVnaW9uLmMgIHwgMTMzICstLQogZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL21vY2tfcmVnaW9uLmMgIHwgIDUwICstCiAyOSBmaWxlcyBjaGFuZ2Vk LCA2MjIgaW5zZXJ0aW9ucygrKSwgMTc1NCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yZWdpb25fdHRtLmgKIGRlbGV0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9idWRkeS5jCgpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tj b25maWcKaW5kZXggMWUxY2IyNDVmY2E3Li5iNjNkMzc0ZGZmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZp ZwpAQCAtMjYsNiArMjYsNyBAQCBjb25maWcgRFJNX0k5MTUKIAlzZWxlY3QgU05EX0hEQV9JOTE1 IGlmIFNORF9IREFfQ09SRQogCXNlbGVjdCBDRUNfQ09SRSBpZiBDRUNfTk9USUZJRVIKIAlzZWxl Y3QgVk1BUF9QRk4KKwlzZWxlY3QgRFJNX1RUTQogCWhlbHAKIAkgIENob29zZSB0aGlzIG9wdGlv biBpZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGhhcyAiSW50ZWwgR3JhcGhpY3MKIAkgIE1lZGlh IEFjY2VsZXJhdG9yIiBvciAiSEQgR3JhcGhpY3MiIGludGVncmF0ZWQgZ3JhcGhpY3MsCmRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlCmluZGV4IGQwZDkzNmQ5MTM3Yi4uY2I4ODIzNTcwOTk2IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9NYWtlZmlsZQpAQCAtNTAsNiArNTAsNyBAQCBpOTE1LXkgKz0gaTkxNV9kcnYubyBcCiAJICBp bnRlbF9tZW1vcnlfcmVnaW9uLm8gXAogCSAgaW50ZWxfcGNoLm8gXAogCSAgaW50ZWxfcG0ubyBc CisJICBpbnRlbF9yZWdpb25fdHRtLm8gXAogCSAgaW50ZWxfcnVudGltZV9wbS5vIFwKIAkgIGlu dGVsX3NpZGViYW5kLm8gXAogCSAgaW50ZWxfc3RlcC5vIFwKQEAgLTE2MCw3ICsxNjEsNiBAQCBn ZW0teSArPSBcCiBpOTE1LXkgKz0gXAogCSAgJChnZW0teSkgXAogCSAgaTkxNV9hY3RpdmUubyBc Ci0JICBpOTE1X2J1ZGR5Lm8gXAogCSAgaTkxNV9jbWRfcGFyc2VyLm8gXAogCSAgaTkxNV9nZW1f ZXZpY3QubyBcCiAJICBpOTE1X2dlbV9ndHQubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX2xtZW0uYwppbmRleCBmNDRiZGQwOGY3Y2IuLjNiNGFhMjhhMDc2ZCAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2xtZW0uYworKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fbG1lbS5jCkBAIC00LDE2ICs0LDcxIEBACiAgKi8K IAogI2luY2x1ZGUgImludGVsX21lbW9yeV9yZWdpb24uaCIKKyNpbmNsdWRlICJpbnRlbF9yZWdp b25fdHRtLmgiCiAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oIgogI2luY2x1ZGUgImdl bS9pOTE1X2dlbV9sbWVtLmgiCiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKIAorc3RhdGljIHZvaWQg bG1lbV9wdXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgIHN0 cnVjdCBzZ190YWJsZSAqcGFnZXMpCit7CisJaW50ZWxfcmVnaW9uX3R0bV9ub2RlX2ZyZWUob2Jq LT5tbS5yZWdpb24sIG9iai0+bW0uc3RfbW1fbm9kZSk7CisJb2JqLT5tbS5kaXJ0eSA9IGZhbHNl OworCXNnX2ZyZWVfdGFibGUocGFnZXMpOworCWtmcmVlKHBhZ2VzKTsKK30KKworc3RhdGljIGlu dCBsbWVtX2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQoreworCXVu c2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzOworCisJZmxhZ3MgPSBJ OTE1X0FMTE9DX01JTl9QQUdFX1NJWkU7CisJaWYgKG9iai0+ZmxhZ3MgJiBJOTE1X0JPX0FMTE9D X0NPTlRJR1VPVVMpCisJCWZsYWdzIHw9IEk5MTVfQUxMT0NfQ09OVElHVU9VUzsKKworCW9iai0+ bW0uc3RfbW1fbm9kZSA9IGludGVsX3JlZ2lvbl90dG1fbm9kZV9hbGxvYyhvYmotPm1tLnJlZ2lv biwKKwkJCQkJCQkgb2JqLT5iYXNlLnNpemUsCisJCQkJCQkJIGZsYWdzKTsKKwlpZiAoSVNfRVJS KG9iai0+bW0uc3RfbW1fbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKG9iai0+bW0uc3RfbW1fbm9k ZSk7CisKKwkvKiBSYW5nZSBtYW5hZ2VyIGlzIGFsd2F5cyBjb250aWdvdXMgKi8KKwlpZiAob2Jq LT5tbS5yZWdpb24tPmlzX3JhbmdlX21hbmFnZXIpCisJCW9iai0+ZmxhZ3MgfD0gSTkxNV9CT19B TExPQ19DT05USUdVT1VTOworCXBhZ2VzID0gaW50ZWxfcmVnaW9uX3R0bV9ub2RlX3RvX3N0KG9i ai0+bW0ucmVnaW9uLCBvYmotPm1tLnN0X21tX25vZGUpOworCWlmIChJU19FUlIocGFnZXMpKSB7 CisJCWludGVsX3JlZ2lvbl90dG1fbm9kZV9mcmVlKG9iai0+bW0ucmVnaW9uLCBvYmotPm1tLnN0 X21tX25vZGUpOworCQlyZXR1cm4gUFRSX0VSUihwYWdlcyk7CisJfQorCisJX19pOTE1X2dlbV9v YmplY3Rfc2V0X3BhZ2VzKG9iaiwgcGFnZXMsIGk5MTVfc2dfZG1hX3NpemVzKHBhZ2VzLT5zZ2wp KTsKKworCWlmIChvYmotPmZsYWdzICYgSTkxNV9CT19BTExPQ19DUFVfQ0xFQVIpIHsKKwkJdm9p ZCBfX2lvbWVtICp2YWRkciA9CisJCQlpOTE1X2dlbV9vYmplY3RfbG1lbV9pb19tYXAob2JqLCAw LCBvYmotPmJhc2Uuc2l6ZSk7CisKKwkJaWYgKCF2YWRkcikgeworCQkJc3RydWN0IHNnX3RhYmxl ICpwYWdlcyA9CisJCQkJX19pOTE1X2dlbV9vYmplY3RfdW5zZXRfcGFnZXMob2JqKTsKKworCQkJ aWYgKCFJU19FUlJfT1JfTlVMTChwYWdlcykpCisJCQkJbG1lbV9wdXRfcGFnZXMob2JqLCBwYWdl cyk7CisJCX0KKworCQltZW1zZXRfaW8odmFkZHIsIDAsIG9iai0+YmFzZS5zaXplKTsKKwkJaW9f bWFwcGluZ191bm1hcCh2YWRkcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGNvbnN0IHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9sbWVtX29ial9vcHMgPSB7CiAJLm5h bWUgPSAiaTkxNV9nZW1fb2JqZWN0X2xtZW0iLAogCS5mbGFncyA9IEk5MTVfR0VNX09CSkVDVF9I QVNfSU9NRU0sCiAKLQkuZ2V0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19idWRk eSwKLQkucHV0X3BhZ2VzID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19idWRkeSwKKwkuZ2V0 X3BhZ2VzID0gbG1lbV9nZXRfcGFnZXMsCisJLnB1dF9wYWdlcyA9IGxtZW1fcHV0X3BhZ2VzLAog CS5yZWxlYXNlID0gaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbWVtb3J5X3JlZ2lvbiwKIH07CiAK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlw ZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaApp bmRleCA0NTAzNDBhNzMxODYuLmRiZDdmZmZlOTU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX29iamVjdF90eXBlcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3RfdHlwZXMuaApAQCAtMjMyLDEwICsyMzIsMTIgQEAg c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgewogCQkgKiBNZW1vcnkgcmVnaW9uIGZvciB0aGlz IG9iamVjdC4KIAkJICovCiAJCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICpyZWdpb247CisK IAkJLyoqCi0JCSAqIExpc3Qgb2YgbWVtb3J5IHJlZ2lvbiBibG9ja3MgYWxsb2NhdGVkIGZvciB0 aGlzIG9iamVjdC4KKwkJICogTWVtb3J5IG1hbmFnZXIgbm9kZSBhbGxvY2F0ZWQgZm9yIHRoaXMg b2JqZWN0LgogCQkgKi8KLQkJc3RydWN0IGxpc3RfaGVhZCBibG9ja3M7CisJCXZvaWQgKnN0X21t X25vZGU7CisKIAkJLyoqCiAJCSAqIEVsZW1lbnQgd2l0aGluIG1lbW9yeV9yZWdpb24tPm9iamVj dHMgb3IgcmVnaW9uLT5wdXJnZWFibGUKIAkJICogaWYgdGhlIG9iamVjdCBpcyBtYXJrZWQgYXMg RE9OVE5FRUQuIEFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3BhZ2VzLmMKaW5kZXggYWVkOGEzN2NjZGM5Li42MmVlMjE4NWE0MWIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9wYWdlcy5jCkBAIC00NzMsNyArNDczLDgg QEAgX19pOTE1X2dlbV9vYmplY3RfZ2V0X3NnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCiAKIAltaWdodF9zbGVlcCgpOwogCUdFTV9CVUdfT04obiA+PSBvYmotPmJhc2Uuc2l6ZSA+ PiBQQUdFX1NISUZUKTsKLQlHRU1fQlVHX09OKCFpOTE1X2dlbV9vYmplY3RfaGFzX3Bpbm5lZF9w YWdlcyhvYmopKTsKKwlpZiAoIWk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikp CisJCWFzc2VydF9vYmplY3RfaGVsZChvYmopOwogCiAJLyogQXMgd2UgaXRlcmF0ZSBmb3J3YXJk IHRocm91Z2ggdGhlIHNnLCB3ZSByZWNvcmQgZWFjaCBlbnRyeSBpbiBhCiAJICogcmFkaXh0cmVl IGZvciBxdWljayByZXBlYXRlZCAoYmFja3dhcmRzKSBsb29rdXBzLiBJZiB3ZSBoYXZlIHNlZW4K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24uYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9yZWdpb24uYwppbmRleCBjZThmY2Zj NTQwNzkuLmYyNWU2NjQ2YzViNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3JlZ2lvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9yZWdpb24uYwpAQCAtOCwxMjkgKzgsOSBAQAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5j bHVkZSAiaTkxNV90cmFjZS5oIgogCi12b2lkCi1pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2J1 ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCi0JCQkJc3RydWN0IHNnX3RhYmxl ICpwYWdlcykKLXsKLQlfX2ludGVsX21lbW9yeV9yZWdpb25fcHV0X3BhZ2VzX2J1ZGR5KG9iai0+ bW0ucmVnaW9uLCAmb2JqLT5tbS5ibG9ja3MpOwotCi0Jb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOwot CXNnX2ZyZWVfdGFibGUocGFnZXMpOwotCWtmcmVlKHBhZ2VzKTsKLX0KLQotaW50Ci1pOTE1X2dl bV9vYmplY3RfZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Ci17Ci0JY29uc3QgdTY0IG1heF9zZWdtZW50ID0gaTkxNV9zZ19zZWdtZW50X3NpemUoKTsKLQlz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtID0gb2JqLT5tbS5yZWdpb247Ci0Jc3RydWN0 IGxpc3RfaGVhZCAqYmxvY2tzID0gJm9iai0+bW0uYmxvY2tzOwotCXJlc291cmNlX3NpemVfdCBz aXplID0gb2JqLT5iYXNlLnNpemU7Ci0JcmVzb3VyY2Vfc2l6ZV90IHByZXZfZW5kOwotCXN0cnVj dCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0Jc3RydWN0 IHNnX3RhYmxlICpzdDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwotCXVuc2lnbmVkIGludCBz Z19wYWdlX3NpemVzOwotCWludCByZXQ7Ci0KLQlzdCA9IGttYWxsb2Moc2l6ZW9mKCpzdCksIEdG UF9LRVJORUwpOwotCWlmICghc3QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKHNnX2FsbG9j X3RhYmxlKHN0LCBzaXplID4+IFBBR0VfU0hJRlQsIEdGUF9LRVJORUwpKSB7Ci0JCWtmcmVlKHN0 KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZmxhZ3MgPSBJOTE1X0FMTE9DX01JTl9QQUdF X1NJWkU7Ci0JaWYgKG9iai0+ZmxhZ3MgJiBJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMpCi0JCWZs YWdzIHw9IEk5MTVfQUxMT0NfQ09OVElHVU9VUzsKLQotCXJldCA9IF9faW50ZWxfbWVtb3J5X3Jl Z2lvbl9nZXRfcGFnZXNfYnVkZHkobWVtLCBzaXplLCBmbGFncywgYmxvY2tzKTsKLQlpZiAocmV0 KQotCQlnb3RvIGVycl9mcmVlX3NnOwotCi0JR0VNX0JVR19PTihsaXN0X2VtcHR5KGJsb2Nrcykp OwotCi0Jc2cgPSBzdC0+c2dsOwotCXN0LT5uZW50cyA9IDA7Ci0Jc2dfcGFnZV9zaXplcyA9IDA7 Ci0JcHJldl9lbmQgPSAocmVzb3VyY2Vfc2l6ZV90KS0xOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRy eShibG9jaywgYmxvY2tzLCBsaW5rKSB7Ci0JCXU2NCBibG9ja19zaXplLCBvZmZzZXQ7Ci0KLQkJ YmxvY2tfc2l6ZSA9IG1pbl90KHU2NCwgc2l6ZSwKLQkJCQkgICBpOTE1X2J1ZGR5X2Jsb2NrX3Np emUoJm1lbS0+bW0sIGJsb2NrKSk7Ci0JCW9mZnNldCA9IGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0 KGJsb2NrKTsKLQotCQl3aGlsZSAoYmxvY2tfc2l6ZSkgewotCQkJdTY0IGxlbjsKLQotCQkJaWYg KG9mZnNldCAhPSBwcmV2X2VuZCB8fCBzZy0+bGVuZ3RoID49IG1heF9zZWdtZW50KSB7Ci0JCQkJ aWYgKHN0LT5uZW50cykgewotCQkJCQlzZ19wYWdlX3NpemVzIHw9IHNnLT5sZW5ndGg7Ci0JCQkJ CXNnID0gX19zZ19uZXh0KHNnKTsKLQkJCQl9Ci0KLQkJCQlzZ19kbWFfYWRkcmVzcyhzZykgPSBt ZW0tPnJlZ2lvbi5zdGFydCArIG9mZnNldDsKLQkJCQlzZ19kbWFfbGVuKHNnKSA9IDA7Ci0JCQkJ c2ctPmxlbmd0aCA9IDA7Ci0JCQkJc3QtPm5lbnRzKys7Ci0JCQl9Ci0KLQkJCWxlbiA9IG1pbihi bG9ja19zaXplLCBtYXhfc2VnbWVudCAtIHNnLT5sZW5ndGgpOwotCQkJc2ctPmxlbmd0aCArPSBs ZW47Ci0JCQlzZ19kbWFfbGVuKHNnKSArPSBsZW47Ci0KLQkJCW9mZnNldCArPSBsZW47Ci0JCQli bG9ja19zaXplIC09IGxlbjsKLQotCQkJcHJldl9lbmQgPSBvZmZzZXQ7Ci0JCX0KLQl9Ci0KLQlz Z19wYWdlX3NpemVzIHw9IHNnLT5sZW5ndGg7Ci0Jc2dfbWFya19lbmQoc2cpOwotCWk5MTVfc2df dHJpbShzdCk7Ci0KLQkvKiBJbnRlbmRlZCBmb3Iga2VybmVsIGludGVybmFsIHVzZSBvbmx5ICov Ci0JaWYgKG9iai0+ZmxhZ3MgJiBJOTE1X0JPX0FMTE9DX0NQVV9DTEVBUikgewotCQlzdHJ1Y3Qg c2NhdHRlcmxpc3QgKnNnOwotCQl1bnNpZ25lZCBsb25nIGk7Ci0KLQkJZm9yX2VhY2hfc2coc3Qt PnNnbCwgc2csIHN0LT5uZW50cywgaSkgewotCQkJdW5zaWduZWQgaW50IGxlbmd0aDsKLQkJCXZv aWQgX19pb21lbSAqdmFkZHI7Ci0JCQlkbWFfYWRkcl90IGRhZGRyOwotCi0JCQlkYWRkciA9IHNn X2RtYV9hZGRyZXNzKHNnKTsKLQkJCWRhZGRyIC09IG1lbS0+cmVnaW9uLnN0YXJ0OwotCQkJbGVu Z3RoID0gc2dfZG1hX2xlbihzZyk7Ci0KLQkJCXZhZGRyID0gaW9fbWFwcGluZ19tYXBfd2MoJm1l bS0+aW9tYXAsIGRhZGRyLCBsZW5ndGgpOwotCQkJbWVtc2V0NjQoKHZvaWQgX19mb3JjZSAqKXZh ZGRyLCAwLCBsZW5ndGggLyBzaXplb2YodTY0KSk7Ci0JCQlpb19tYXBwaW5nX3VubWFwKHZhZGRy KTsKLQkJfQotCi0JCXdtYigpOwotCX0KLQotCV9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhv YmosIHN0LCBzZ19wYWdlX3NpemVzKTsKLQotCXJldHVybiAwOwotCi1lcnJfZnJlZV9zZzoKLQlz Z19mcmVlX3RhYmxlKHN0KTsKLQlrZnJlZShzdCk7Ci0JcmV0dXJuIHJldDsKLX0KLQogdm9pZCBp OTE1X2dlbV9vYmplY3RfaW5pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosCiAJCQkJCXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCiB7Ci0JSU5J VF9MSVNUX0hFQUQoJm9iai0+bW0uYmxvY2tzKTsKIAlvYmotPm1tLnJlZ2lvbiA9IGludGVsX21l bW9yeV9yZWdpb25fZ2V0KG1lbSk7CiAKIAlpZiAob2JqLT5iYXNlLnNpemUgPD0gbWVtLT5taW5f cGFnZV9zaXplKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2Vt X3JlZ2lvbi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3JlZ2lvbi5oCmlu ZGV4IGViZGRjODZkNzhmNy4uODRmY2IzMjk3NDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9nZW0vaTkxNV9nZW1fcmVnaW9uLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z2VtL2k5MTVfZ2VtX3JlZ2lvbi5oCkBAIC0xMiwxMCArMTIsNiBAQCBzdHJ1Y3QgaW50ZWxfbWVt b3J5X3JlZ2lvbjsKIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0Owogc3RydWN0IHNnX3RhYmxl OwogCi1pbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19idWRkeShzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqKTsKLXZvaWQgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19idWRkeShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAotCQkJCSAgICAgc3RydWN0IHNnX3RhYmxl ICpwYWdlcyk7Ci0KIHZvaWQgaTkxNV9nZW1fb2JqZWN0X2luaXRfbWVtb3J5X3JlZ2lvbihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAogCQkJCQlzdHJ1Y3QgaW50ZWxfbWVtb3J5X3Jl Z2lvbiAqbWVtKTsKIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3JlbGVhc2VfbWVtb3J5X3JlZ2lvbihz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2Vt L2k5MTVfZ2VtX3NobWVtLmMKaW5kZXggYTliZmE2NmM4ZGExLi41ZDE2YzQ0NjJmZGEgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jCkBAIC02MjgsMTEgKzYyOCwx MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdpb25fb3BzIHNobWVtX3Jl Z2lvbl9vcHMgPSB7CiAJLmluaXRfb2JqZWN0ID0gc2htZW1fb2JqZWN0X2luaXQsCiB9OwogCi1z dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqaTkxNV9nZW1fc2htZW1fc2V0dXAoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUpCitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqaTkxNV9n ZW1fc2htZW1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkJCQkgdTE2 IHR5cGUsIHUxNiBpbnN0YW5jZSkKIHsKIAlyZXR1cm4gaW50ZWxfbWVtb3J5X3JlZ2lvbl9jcmVh dGUoaTkxNSwgMCwKIAkJCQkJICB0b3RhbHJhbV9wYWdlcygpIDw8IFBBR0VfU0hJRlQsCiAJCQkJ CSAgUEFHRV9TSVpFLCAwLAorCQkJCQkgIHR5cGUsIGluc3RhbmNlLAogCQkJCQkgICZzaG1lbV9y ZWdpb25fb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5 MTVfZ2VtX3N0b2xlbi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3N0b2xl bi5jCmluZGV4IDI5M2Y2NDBmYWEwYS4uYzQyYWJlZTIwNmRhIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc3RvbGVuLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ2VtL2k5MTVfZ2VtX3N0b2xlbi5jCkBAIC03NzAsNyArNzcwLDggQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uX29wcyBpOTE1X3JlZ2lvbl9zdG9sZW5fbG1l bV9vcHMgPSB7CiB9OwogCiBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqCi1pOTE1X2dlbV9z dG9sZW5fbG1lbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKK2k5MTVfZ2Vt X3N0b2xlbl9sbWVtX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1MTYgdHlw ZSwKKwkJCSAgIHUxNiBpbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUg PSAmaTkxNS0+dW5jb3JlOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihpOTE1 LT5kcm0uZGV2KTsKQEAgLTc4OCw2ICs3ODksNyBAQCBpOTE1X2dlbV9zdG9sZW5fbG1lbV9zZXR1 cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAogCW1lbSA9IGludGVsX21lbW9yeV9y ZWdpb25fY3JlYXRlKGk5MTUsIGxtZW1fYmFzZSwgbG1lbV9zaXplLAogCQkJCQkgSTkxNV9HVFRf UEFHRV9TSVpFXzRLLCBpb19zdGFydCwKKwkJCQkJIHR5cGUsIGluc3RhbmNlLAogCQkJCQkgJmk5 MTVfcmVnaW9uX3N0b2xlbl9sbWVtX29wcyk7CiAJaWYgKElTX0VSUihtZW0pKQogCQlyZXR1cm4g bWVtOwpAQCAtODA5LDE0ICs4MTEsMTUgQEAgaTkxNV9nZW1fc3RvbGVuX2xtZW1fc2V0dXAoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCiB9CiAKIHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVn aW9uKgotaTkxNV9nZW1fc3RvbGVuX3NtZW1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpCitpOTE1X2dlbV9zdG9sZW5fc21lbV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSwgdTE2IHR5cGUsCisJCQkgICB1MTYgaW5zdGFuY2UpCiB7CiAJc3RydWN0IGludGVs X21lbW9yeV9yZWdpb24gKm1lbTsKIAogCW1lbSA9IGludGVsX21lbW9yeV9yZWdpb25fY3JlYXRl KGk5MTUsCiAJCQkJCSBpbnRlbF9ncmFwaGljc19zdG9sZW5fcmVzLnN0YXJ0LAogCQkJCQkgcmVz b3VyY2Vfc2l6ZSgmaW50ZWxfZ3JhcGhpY3Nfc3RvbGVuX3JlcyksCi0JCQkJCSBQQUdFX1NJWkUs IDAsCisJCQkJCSBQQUdFX1NJWkUsIDAsIHR5cGUsIGluc3RhbmNlLAogCQkJCQkgJmk5MTVfcmVn aW9uX3N0b2xlbl9zbWVtX29wcyk7CiAJaWYgKElTX0VSUihtZW0pKQogCQlyZXR1cm4gbWVtOwpA QCAtODI0LDcgKzgyNyw2IEBAIGk5MTVfZ2VtX3N0b2xlbl9zbWVtX3NldHVwKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1KQogCWludGVsX21lbW9yeV9yZWdpb25fc2V0X25hbWUobWVtLCAi c3RvbGVuLXN5c3RlbSIpOwogCiAJbWVtLT5wcml2YXRlID0gdHJ1ZTsKLQogCXJldHVybiBtZW07 CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9s ZW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zdG9sZW4uaAppbmRleCAy YmVjNmMzNjdiOWMuLmNjZGY3YmVmYzU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ2VtL2k5MTVfZ2VtX3N0b2xlbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9p OTE1X2dlbV9zdG9sZW4uaApAQCAtMjEsOCArMjEsMTMgQEAgaW50IGk5MTVfZ2VtX3N0b2xlbl9p bnNlcnRfbm9kZV9pbl9yYW5nZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJ CQkJCSB1NjQgZW5kKTsKIHZvaWQgaTkxNV9nZW1fc3RvbGVuX3JlbW92ZV9ub2RlKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJCQkgc3RydWN0IGRybV9tbV9ub2RlICpub2Rl KTsKLXN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICppOTE1X2dlbV9zdG9sZW5fc21lbV9zZXR1 cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7Ci1zdHJ1Y3QgaW50ZWxfbWVtb3J5X3Jl Z2lvbiAqaTkxNV9nZW1fc3RvbGVuX2xtZW1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpOworc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKgoraTkxNV9nZW1fc3RvbGVuX3Nt ZW1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsIHUxNiB0eXBlLAorCQkJICAg dTE2IGluc3RhbmNlKTsKK3N0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKK2k5MTVfZ2VtX3N0 b2xlbl9sbWVtX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LCB1MTYgdHlwZSwK KwkJCSAgIHUxNiBpbnN0YW5jZSk7CisKIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICoKIGk5 MTVfZ2VtX29iamVjdF9jcmVhdGVfc3RvbGVuKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKIAkJCSAgICAgIHJlc291cmNlX3NpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9ndC5jCmluZGV4IDhkNzdkY2JhZDA1OS4uM2Y4OGVjZGVlMDMxIDEwMDY0NAotLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2d0LmMKQEAgLTY4LDggKzY4LDYgQEAgaW50IGludGVsX2d0X3Byb2JlX2xt ZW0oc3RydWN0IGludGVsX2d0ICpndCkKIAlpZCA9IElOVEVMX1JFR0lPTl9MTUVNOwogCiAJbWVt LT5pZCA9IGlkOwotCW1lbS0+dHlwZSA9IElOVEVMX01FTU9SWV9MT0NBTDsKLQltZW0tPmluc3Rh bmNlID0gMDsKIAogCWludGVsX21lbW9yeV9yZWdpb25fc2V0X25hbWUobWVtLCAibG9jYWwldSIs IG1lbS0+aW5zdGFuY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9yZWdpb25fbG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9u X2xtZW0uYwppbmRleCA3M2ZjZWIwYzI1ZmMuLmY3MzY2YjA1NGY4ZSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVnaW9uX2xtZW0uYworKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9yZWdpb25fbG1lbS5jCkBAIC01LDYgKzUsOCBAQAogCiAjaW5j bHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpbnRlbF9tZW1vcnlfcmVnaW9uLmgiCisjaW5j bHVkZSAiaW50ZWxfcmVnaW9uX2xtZW0uaCIKKyNpbmNsdWRlICJpbnRlbF9yZWdpb25fdHRtLmgi CiAjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2xtZW0uaCIKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1f cmVnaW9uLmgiCiAjaW5jbHVkZSAiaW50ZWxfcmVnaW9uX2xtZW0uaCIKQEAgLTY2LDkgKzY4LDkg QEAgc3RhdGljIHZvaWQgcmVsZWFzZV9mYWtlX2xtZW1fYmFyKHN0cnVjdCBpbnRlbF9tZW1vcnlf cmVnaW9uICptZW0pCiBzdGF0aWMgdm9pZAogcmVnaW9uX2xtZW1fcmVsZWFzZShzdHJ1Y3QgaW50 ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKQogewotCXJlbGVhc2VfZmFrZV9sbWVtX2JhcihtZW0pOwor CWludGVsX3JlZ2lvbl90dG1fZmluaShtZW0pOwogCWlvX21hcHBpbmdfZmluaSgmbWVtLT5pb21h cCk7Ci0JaW50ZWxfbWVtb3J5X3JlZ2lvbl9yZWxlYXNlX2J1ZGR5KG1lbSk7CisJcmVsZWFzZV9m YWtlX2xtZW1fYmFyKG1lbSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTgzLDEyICs4NSwyMSBAQCBy ZWdpb25fbG1lbV9pbml0KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCiAKIAlpZiAo IWlvX21hcHBpbmdfaW5pdF93YygmbWVtLT5pb21hcCwKIAkJCQltZW0tPmlvX3N0YXJ0LAotCQkJ CXJlc291cmNlX3NpemUoJm1lbS0+cmVnaW9uKSkpCi0JCXJldHVybiAtRUlPOworCQkJCXJlc291 cmNlX3NpemUoJm1lbS0+cmVnaW9uKSkpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXRfbm9f aW87CisJfQogCi0JcmV0ID0gaW50ZWxfbWVtb3J5X3JlZ2lvbl9pbml0X2J1ZGR5KG1lbSk7CisJ cmV0ID0gaW50ZWxfcmVnaW9uX3R0bV9pbml0KG1lbSk7CiAJaWYgKHJldCkKLQkJaW9fbWFwcGlu Z19maW5pKCZtZW0tPmlvbWFwKTsKKwkJZ290byBvdXRfbm9fYnVkZHk7CisKKwlyZXR1cm4gMDsK Kworb3V0X25vX2J1ZGR5OgorCWlvX21hcHBpbmdfZmluaSgmbWVtLT5pb21hcCk7CitvdXRfbm9f aW86CisJcmVsZWFzZV9mYWtlX2xtZW1fYmFyKG1lbSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAt MTI3LDYgKzEzOCw4IEBAIGludGVsX2d0X3NldHVwX2Zha2VfbG1lbShzdHJ1Y3QgaW50ZWxfZ3Qg Kmd0KQogCQkJCQkgbWFwcGFibGVfZW5kLAogCQkJCQkgUEFHRV9TSVpFLAogCQkJCQkgaW9fc3Rh cnQsCisJCQkJCSBJTlRFTF9NRU1PUllfTE9DQUwsCisJCQkJCSAwLAogCQkJCQkgJmludGVsX3Jl Z2lvbl9sbWVtX29wcyk7CiAJaWYgKCFJU19FUlIobWVtKSkgewogCQlkcm1faW5mbygmaTkxNS0+ ZHJtLCAiSW50ZWwgZ3JhcGhpY3MgZmFrZSBMTUVNOiAlcFJcbiIsCkBAIC0xOTgsNiArMjExLDgg QEAgc3RhdGljIHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICpzZXR1cF9sbWVtKHN0cnVjdCBp bnRlbF9ndCAqZ3QpCiAJCQkJCSBsbWVtX3NpemUsCiAJCQkJCSBJOTE1X0dUVF9QQUdFX1NJWkVf NEssCiAJCQkJCSBpb19zdGFydCwKKwkJCQkJIElOVEVMX01FTU9SWV9MT0NBTCwKKwkJCQkJIDAs CiAJCQkJCSAmaW50ZWxfcmVnaW9uX2xtZW1fb3BzKTsKIAlpZiAoSVNfRVJSKG1lbSkpCiAJCXJl dHVybiBtZW07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2J1ZGR5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDNhMmY2ZWVjYjJmYy4uMDAwMDAwMDAwMDAwCi0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfYnVkZHkuYworKysgL2Rldi9udWxsCkBAIC0xLDQzNSArMCwwIEBACi0vLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCi0vKgotICogQ29weXJpZ2h0IMKpIDIwMTkgSW50 ZWwgQ29ycG9yYXRpb24KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva21lbWxlYWsuaD4KLSNpbmNs dWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlICJpOTE1X2J1ZGR5LmgiCi0KLSNpbmNsdWRl ICJpOTE1X2dlbS5oIgotI2luY2x1ZGUgImk5MTVfZ2xvYmFscy5oIgotI2luY2x1ZGUgImk5MTVf dXRpbHMuaCIKLQotc3RhdGljIHN0cnVjdCBpOTE1X2dsb2JhbF9ibG9jayB7Ci0Jc3RydWN0IGk5 MTVfZ2xvYmFsIGJhc2U7Ci0Jc3RydWN0IGttZW1fY2FjaGUgKnNsYWJfYmxvY2tzOwotfSBnbG9i YWw7Ci0KLXN0YXRpYyB2b2lkIGk5MTVfZ2xvYmFsX2J1ZGR5X3Nocmluayh2b2lkKQotewotCWtt ZW1fY2FjaGVfc2hyaW5rKGdsb2JhbC5zbGFiX2Jsb2Nrcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGk5 MTVfZ2xvYmFsX2J1ZGR5X2V4aXQodm9pZCkKLXsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2xvYmFs LnNsYWJfYmxvY2tzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpOTE1X2dsb2JhbF9ibG9jayBnbG9i YWwgPSB7IHsKLQkuc2hyaW5rID0gaTkxNV9nbG9iYWxfYnVkZHlfc2hyaW5rLAotCS5leGl0ID0g aTkxNV9nbG9iYWxfYnVkZHlfZXhpdCwKLX0gfTsKLQotaW50IF9faW5pdCBpOTE1X2dsb2JhbF9i dWRkeV9pbml0KHZvaWQpCi17Ci0JZ2xvYmFsLnNsYWJfYmxvY2tzID0gS01FTV9DQUNIRShpOTE1 X2J1ZGR5X2Jsb2NrLCBTTEFCX0hXQ0FDSEVfQUxJR04pOwotCWlmICghZ2xvYmFsLnNsYWJfYmxv Y2tzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWk5MTVfZ2xvYmFsX3JlZ2lzdGVyKCZnbG9iYWwu YmFzZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAq aTkxNV9ibG9ja19hbGxvYyhzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqcGFyZW50LAotCQkJCQkJ IHVuc2lnbmVkIGludCBvcmRlciwKLQkJCQkJCSB1NjQgb2Zmc2V0KQotewotCXN0cnVjdCBpOTE1 X2J1ZGR5X2Jsb2NrICpibG9jazsKLQotCUdFTV9CVUdfT04ob3JkZXIgPiBJOTE1X0JVRERZX01B WF9PUkRFUik7Ci0KLQlibG9jayA9IGttZW1fY2FjaGVfemFsbG9jKGdsb2JhbC5zbGFiX2Jsb2Nr cywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFibG9jaykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlibG9jay0+ aGVhZGVyID0gb2Zmc2V0OwotCWJsb2NrLT5oZWFkZXIgfD0gb3JkZXI7Ci0JYmxvY2stPnBhcmVu dCA9IHBhcmVudDsKLQotCUdFTV9CVUdfT04oYmxvY2stPmhlYWRlciAmIEk5MTVfQlVERFlfSEVB REVSX1VOVVNFRCk7Ci0JcmV0dXJuIGJsb2NrOwotfQotCi1zdGF0aWMgdm9pZCBpOTE1X2Jsb2Nr X2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewotCWttZW1fY2FjaGVfZnJl ZShnbG9iYWwuc2xhYl9ibG9ja3MsIGJsb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgbWFya19hbGxv Y2F0ZWQoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewotCWJsb2NrLT5oZWFkZXIg Jj0gfkk5MTVfQlVERFlfSEVBREVSX1NUQVRFOwotCWJsb2NrLT5oZWFkZXIgfD0gSTkxNV9CVURE WV9BTExPQ0FURUQ7Ci0KLQlsaXN0X2RlbCgmYmxvY2stPmxpbmspOwotfQotCi1zdGF0aWMgdm9p ZCBtYXJrX2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAotCQkgICAgICBzdHJ1Y3QgaTkx NV9idWRkeV9ibG9jayAqYmxvY2spCi17Ci0JYmxvY2stPmhlYWRlciAmPSB+STkxNV9CVUREWV9I RUFERVJfU1RBVEU7Ci0JYmxvY2stPmhlYWRlciB8PSBJOTE1X0JVRERZX0ZSRUU7Ci0KLQlsaXN0 X2FkZCgmYmxvY2stPmxpbmssCi0JCSAmbW0tPmZyZWVfbGlzdFtpOTE1X2J1ZGR5X2Jsb2NrX29y ZGVyKGJsb2NrKV0pOwotfQotCi1zdGF0aWMgdm9pZCBtYXJrX3NwbGl0KHN0cnVjdCBpOTE1X2J1 ZGR5X2Jsb2NrICpibG9jaykKLXsKLQlibG9jay0+aGVhZGVyICY9IH5JOTE1X0JVRERZX0hFQURF Ul9TVEFURTsKLQlibG9jay0+aGVhZGVyIHw9IEk5MTVfQlVERFlfU1BMSVQ7Ci0KLQlsaXN0X2Rl bCgmYmxvY2stPmxpbmspOwotfQotCi1pbnQgaTkxNV9idWRkeV9pbml0KHN0cnVjdCBpOTE1X2J1 ZGR5X21tICptbSwgdTY0IHNpemUsIHU2NCBjaHVua19zaXplKQotewotCXVuc2lnbmVkIGludCBp OwotCXU2NCBvZmZzZXQ7Ci0KLQlpZiAoc2l6ZSA8IGNodW5rX3NpemUpCi0JCXJldHVybiAtRUlO VkFMOwotCi0JaWYgKGNodW5rX3NpemUgPCBQQUdFX1NJWkUpCi0JCXJldHVybiAtRUlOVkFMOwot Ci0JaWYgKCFpc19wb3dlcl9vZl8yKGNodW5rX3NpemUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQot CXNpemUgPSByb3VuZF9kb3duKHNpemUsIGNodW5rX3NpemUpOwotCi0JbW0tPnNpemUgPSBzaXpl OwotCW1tLT5jaHVua19zaXplID0gY2h1bmtfc2l6ZTsKLQltbS0+bWF4X29yZGVyID0gaWxvZzIo c2l6ZSkgLSBpbG9nMihjaHVua19zaXplKTsKLQotCUdFTV9CVUdfT04obW0tPm1heF9vcmRlciA+ IEk5MTVfQlVERFlfTUFYX09SREVSKTsKLQotCW1tLT5mcmVlX2xpc3QgPSBrbWFsbG9jX2FycmF5 KG1tLT5tYXhfb3JkZXIgKyAxLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwK LQkJCQkgICAgICBHRlBfS0VSTkVMKTsKLQlpZiAoIW1tLT5mcmVlX2xpc3QpCi0JCXJldHVybiAt RU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8PSBtbS0+bWF4X29yZGVyOyArK2kpCi0JCUlOSVRf TElTVF9IRUFEKCZtbS0+ZnJlZV9saXN0W2ldKTsKLQotCW1tLT5uX3Jvb3RzID0gaHdlaWdodDY0 KHNpemUpOwotCi0JbW0tPnJvb3RzID0ga21hbGxvY19hcnJheShtbS0+bl9yb290cywKLQkJCQkg IHNpemVvZihzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqKSwKLQkJCQkgIEdGUF9LRVJORUwpOwot CWlmICghbW0tPnJvb3RzKQotCQlnb3RvIG91dF9mcmVlX2xpc3Q7Ci0KLQlvZmZzZXQgPSAwOwot CWkgPSAwOwotCi0JLyoKLQkgKiBTcGxpdCBpbnRvIHBvd2VyLW9mLXR3byBibG9ja3MsIGluIGNh c2Ugd2UgYXJlIGdpdmVuIGEgc2l6ZSB0aGF0IGlzCi0JICogbm90IGl0c2VsZiBhIHBvd2VyLW9m LXR3by4KLQkgKi8KLQlkbyB7Ci0JCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpyb290OwotCQl1 bnNpZ25lZCBpbnQgb3JkZXI7Ci0JCXU2NCByb290X3NpemU7Ci0KLQkJcm9vdF9zaXplID0gcm91 bmRkb3duX3Bvd19vZl90d28oc2l6ZSk7Ci0JCW9yZGVyID0gaWxvZzIocm9vdF9zaXplKSAtIGls b2cyKGNodW5rX3NpemUpOwotCi0JCXJvb3QgPSBpOTE1X2Jsb2NrX2FsbG9jKE5VTEwsIG9yZGVy LCBvZmZzZXQpOwotCQlpZiAoIXJvb3QpCi0JCQlnb3RvIG91dF9mcmVlX3Jvb3RzOwotCi0JCW1h cmtfZnJlZShtbSwgcm9vdCk7Ci0KLQkJR0VNX0JVR19PTihpID4gbW0tPm1heF9vcmRlcik7Ci0J CUdFTV9CVUdfT04oaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCByb290KSA8IGNodW5rX3NpemUp OwotCi0JCW1tLT5yb290c1tpXSA9IHJvb3Q7Ci0KLQkJb2Zmc2V0ICs9IHJvb3Rfc2l6ZTsKLQkJ c2l6ZSAtPSByb290X3NpemU7Ci0JCWkrKzsKLQl9IHdoaWxlIChzaXplKTsKLQotCXJldHVybiAw OwotCi1vdXRfZnJlZV9yb290czoKLQl3aGlsZSAoaS0tKQotCQlpOTE1X2Jsb2NrX2ZyZWUobW0t PnJvb3RzW2ldKTsKLQlrZnJlZShtbS0+cm9vdHMpOwotb3V0X2ZyZWVfbGlzdDoKLQlrZnJlZSht bS0+ZnJlZV9saXN0KTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotdm9pZCBpOTE1X2J1ZGR5X2Zp bmkoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsg aSA8IG1tLT5uX3Jvb3RzOyArK2kpIHsKLQkJR0VNX1dBUk5fT04oIWk5MTVfYnVkZHlfYmxvY2tf aXNfZnJlZShtbS0+cm9vdHNbaV0pKTsKLQkJaTkxNV9ibG9ja19mcmVlKG1tLT5yb290c1tpXSk7 Ci0JfQotCi0Ja2ZyZWUobW0tPnJvb3RzKTsKLQlrZnJlZShtbS0+ZnJlZV9saXN0KTsKLX0KLQot c3RhdGljIGludCBzcGxpdF9ibG9jayhzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sCi0JCSAgICAg ICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCi17Ci0JdW5zaWduZWQgaW50IGJsb2Nr X29yZGVyID0gaTkxNV9idWRkeV9ibG9ja19vcmRlcihibG9jaykgLSAxOwotCXU2NCBvZmZzZXQg PSBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayk7Ci0KLQlHRU1fQlVHX09OKCFpOTE1X2J1 ZGR5X2Jsb2NrX2lzX2ZyZWUoYmxvY2spKTsKLQlHRU1fQlVHX09OKCFpOTE1X2J1ZGR5X2Jsb2Nr X29yZGVyKGJsb2NrKSk7Ci0KLQlibG9jay0+bGVmdCA9IGk5MTVfYmxvY2tfYWxsb2MoYmxvY2ss IGJsb2NrX29yZGVyLCBvZmZzZXQpOwotCWlmICghYmxvY2stPmxlZnQpCi0JCXJldHVybiAtRU5P TUVNOwotCi0JYmxvY2stPnJpZ2h0ID0gaTkxNV9ibG9ja19hbGxvYyhibG9jaywgYmxvY2tfb3Jk ZXIsCi0JCQkJCW9mZnNldCArIChtbS0+Y2h1bmtfc2l6ZSA8PCBibG9ja19vcmRlcikpOwotCWlm ICghYmxvY2stPnJpZ2h0KSB7Ci0JCWk5MTVfYmxvY2tfZnJlZShibG9jay0+bGVmdCk7Ci0JCXJl dHVybiAtRU5PTUVNOwotCX0KLQotCW1hcmtfZnJlZShtbSwgYmxvY2stPmxlZnQpOwotCW1hcmtf ZnJlZShtbSwgYmxvY2stPnJpZ2h0KTsKLQotCW1hcmtfc3BsaXQoYmxvY2spOwotCi0JcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqCi1nZXRfYnVkZHkoc3Ry dWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2Nr ICpwYXJlbnQ7Ci0KLQlwYXJlbnQgPSBibG9jay0+cGFyZW50OwotCWlmICghcGFyZW50KQotCQly ZXR1cm4gTlVMTDsKLQotCWlmIChwYXJlbnQtPmxlZnQgPT0gYmxvY2spCi0JCXJldHVybiBwYXJl bnQtPnJpZ2h0OwotCi0JcmV0dXJuIHBhcmVudC0+bGVmdDsKLX0KLQotc3RhdGljIHZvaWQgX19p OTE1X2J1ZGR5X2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAotCQkJICAgICAgc3RydWN0 IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpw YXJlbnQ7Ci0KLQl3aGlsZSAoKHBhcmVudCA9IGJsb2NrLT5wYXJlbnQpKSB7Ci0JCXN0cnVjdCBp OTE1X2J1ZGR5X2Jsb2NrICpidWRkeTsKLQotCQlidWRkeSA9IGdldF9idWRkeShibG9jayk7Ci0K LQkJaWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX2lzX2ZyZWUoYnVkZHkpKQotCQkJYnJlYWs7Ci0KLQkJ bGlzdF9kZWwoJmJ1ZGR5LT5saW5rKTsKLQotCQlpOTE1X2Jsb2NrX2ZyZWUoYmxvY2spOwotCQlp OTE1X2Jsb2NrX2ZyZWUoYnVkZHkpOwotCi0JCWJsb2NrID0gcGFyZW50OwotCX0KLQotCW1hcmtf ZnJlZShtbSwgYmxvY2spOwotfQotCi12b2lkIGk5MTVfYnVkZHlfZnJlZShzdHJ1Y3QgaTkxNV9i dWRkeV9tbSAqbW0sCi0JCSAgICAgc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewot CUdFTV9CVUdfT04oIWk5MTVfYnVkZHlfYmxvY2tfaXNfYWxsb2NhdGVkKGJsb2NrKSk7Ci0JX19p OTE1X2J1ZGR5X2ZyZWUobW0sIGJsb2NrKTsKLX0KLQotdm9pZCBpOTE1X2J1ZGR5X2ZyZWVfbGlz dChzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sIHN0cnVjdCBsaXN0X2hlYWQgKm9iamVjdHMpCi17 Ci0Jc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrLCAqb247Ci0KLQlsaXN0X2Zvcl9lYWNo X2VudHJ5X3NhZmUoYmxvY2ssIG9uLCBvYmplY3RzLCBsaW5rKSB7Ci0JCWk5MTVfYnVkZHlfZnJl ZShtbSwgYmxvY2spOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0JSU5JVF9MSVNUX0hFQUQob2Jq ZWN0cyk7Ci19Ci0KLS8qCi0gKiBBbGxvY2F0ZSBwb3dlci1vZi10d28gYmxvY2suIFRoZSBvcmRl ciB2YWx1ZSBoZXJlIHRyYW5zbGF0ZXMgdG86Ci0gKgotICogICAwID0gMl4wICogbW0tPmNodW5r X3NpemUKLSAqICAgMSA9IDJeMSAqIG1tLT5jaHVua19zaXplCi0gKiAgIDIgPSAyXjIgKiBtbS0+ Y2h1bmtfc2l6ZQotICogICAuLi4KLSAqLwotc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKgotaTkx NV9idWRkeV9hbGxvYyhzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sIHVuc2lnbmVkIGludCBvcmRl cikKLXsKLQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2sgPSBOVUxMOwotCXVuc2lnbmVk IGludCBpOwotCWludCBlcnI7Ci0KLQlmb3IgKGkgPSBvcmRlcjsgaSA8PSBtbS0+bWF4X29yZGVy OyArK2kpIHsKLQkJYmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJm1tLT5mcmVlX2xp c3RbaV0sCi0JCQkJCQkgc3RydWN0IGk5MTVfYnVkZHlfYmxvY2ssCi0JCQkJCQkgbGluayk7Ci0J CWlmIChibG9jaykKLQkJCWJyZWFrOwotCX0KLQotCWlmICghYmxvY2spCi0JCXJldHVybiBFUlJf UFRSKC1FTk9TUEMpOwotCi0JR0VNX0JVR19PTighaTkxNV9idWRkeV9ibG9ja19pc19mcmVlKGJs b2NrKSk7Ci0KLQl3aGlsZSAoaSAhPSBvcmRlcikgewotCQllcnIgPSBzcGxpdF9ibG9jayhtbSwg YmxvY2spOwotCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCWdvdG8gb3V0X2ZyZWU7Ci0KLQkJLyog R28gbG93ICovCi0JCWJsb2NrID0gYmxvY2stPmxlZnQ7Ci0JCWktLTsKLQl9Ci0KLQltYXJrX2Fs bG9jYXRlZChibG9jayk7Ci0Ja21lbWxlYWtfdXBkYXRlX3RyYWNlKGJsb2NrKTsKLQlyZXR1cm4g YmxvY2s7Ci0KLW91dF9mcmVlOgotCWlmIChpICE9IG9yZGVyKQotCQlfX2k5MTVfYnVkZHlfZnJl ZShtbSwgYmxvY2spOwotCXJldHVybiBFUlJfUFRSKGVycik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg Ym9vbCBvdmVybGFwcyh1NjQgczEsIHU2NCBlMSwgdTY0IHMyLCB1NjQgZTIpCi17Ci0JcmV0dXJu IHMxIDw9IGUyICYmIGUxID49IHMyOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnMo dTY0IHMxLCB1NjQgZTEsIHU2NCBzMiwgdTY0IGUyKQotewotCXJldHVybiBzMSA8PSBzMiAmJiBl MSA+PSBlMjsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIHJhbmdlLiBOb3RlIHRoYXQgaXQncyBzYWZl IHRvIGNoYWluIHRvZ2V0aGVyIG11bHRpcGxlIGFsbG9jX3JhbmdlcwotICogd2l0aCB0aGUgc2Ft ZSBibG9ja3MgbGlzdC4KLSAqCi0gKiBJbnRlbmRlZCBmb3IgcHJlLWFsbG9jYXRpbmcgcG9ydGlv bnMgb2YgdGhlIGFkZHJlc3Mgc3BhY2UsIGZvciBleGFtcGxlIHRvCi0gKiByZXNlcnZlIGEgYmxv Y2sgZm9yIHRoZSBpbml0aWFsIGZyYW1lYnVmZmVyIG9yIHNpbWlsYXIsIGhlbmNlIHRoZSBleHBl Y3RhdGlvbgotICogaGVyZSBpcyB0aGF0IGk5MTVfYnVkZHlfYWxsb2MoKSBpcyBzdGlsbCB0aGUg bWFpbiB2ZWhpY2xlIGZvcgotICogYWxsb2NhdGlvbnMsIHNvIGlmIHRoYXQncyBub3QgdGhlIGNh c2UgdGhlbiB0aGUgZHJtX21tIHJhbmdlIGFsbG9jYXRvciBpcwotICogcHJvYmFibHkgYSBtdWNo IGJldHRlciBmaXQsIGFuZCBzbyB5b3Ugc2hvdWxkIHByb2JhYmx5IGdvIHVzZSB0aGF0IGluc3Rl YWQuCi0gKi8KLWludCBpOTE1X2J1ZGR5X2FsbG9jX3JhbmdlKHN0cnVjdCBpOTE1X2J1ZGR5X21t ICptbSwKLQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrcywKLQkJCSAgIHU2NCBzdGFydCwg dTY0IHNpemUpCi17Ci0Jc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOwotCXN0cnVjdCBp OTE1X2J1ZGR5X2Jsb2NrICpidWRkeTsKLQlMSVNUX0hFQUQoYWxsb2NhdGVkKTsKLQlMSVNUX0hF QUQoZGZzKTsKLQl1NjQgZW5kOwotCWludCBlcnI7Ci0JaW50IGk7Ci0KLQlpZiAoc2l6ZSA8IG1t LT5jaHVua19zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghSVNfQUxJR05FRChzaXpl IHwgc3RhcnQsIG1tLT5jaHVua19zaXplKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAocmFu Z2Vfb3ZlcmZsb3dzKHN0YXJ0LCBzaXplLCBtbS0+c2l6ZSkpCi0JCXJldHVybiAtRUlOVkFMOwot Ci0JZm9yIChpID0gMDsgaSA8IG1tLT5uX3Jvb3RzOyArK2kpCi0JCWxpc3RfYWRkX3RhaWwoJm1t LT5yb290c1tpXS0+dG1wX2xpbmssICZkZnMpOwotCi0JZW5kID0gc3RhcnQgKyBzaXplIC0gMTsK LQotCWRvIHsKLQkJdTY0IGJsb2NrX3N0YXJ0OwotCQl1NjQgYmxvY2tfZW5kOwotCi0JCWJsb2Nr ID0gbGlzdF9maXJzdF9lbnRyeV9vcl9udWxsKCZkZnMsCi0JCQkJCQkgc3RydWN0IGk5MTVfYnVk ZHlfYmxvY2ssCi0JCQkJCQkgdG1wX2xpbmspOwotCQlpZiAoIWJsb2NrKQotCQkJYnJlYWs7Ci0K LQkJbGlzdF9kZWwoJmJsb2NrLT50bXBfbGluayk7Ci0KLQkJYmxvY2tfc3RhcnQgPSBpOTE1X2J1 ZGR5X2Jsb2NrX29mZnNldChibG9jayk7Ci0JCWJsb2NrX2VuZCA9IGJsb2NrX3N0YXJ0ICsgaTkx NV9idWRkeV9ibG9ja19zaXplKG1tLCBibG9jaykgLSAxOwotCi0JCWlmICghb3ZlcmxhcHMoc3Rh cnQsIGVuZCwgYmxvY2tfc3RhcnQsIGJsb2NrX2VuZCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAo aTkxNV9idWRkeV9ibG9ja19pc19hbGxvY2F0ZWQoYmxvY2spKSB7Ci0JCQllcnIgPSAtRU5PU1BD OwotCQkJZ290byBlcnJfZnJlZTsKLQkJfQotCi0JCWlmIChjb250YWlucyhzdGFydCwgZW5kLCBi bG9ja19zdGFydCwgYmxvY2tfZW5kKSkgewotCQkJaWYgKCFpOTE1X2J1ZGR5X2Jsb2NrX2lzX2Zy ZWUoYmxvY2spKSB7Ci0JCQkJZXJyID0gLUVOT1NQQzsKLQkJCQlnb3RvIGVycl9mcmVlOwotCQkJ fQotCi0JCQltYXJrX2FsbG9jYXRlZChibG9jayk7Ci0JCQlsaXN0X2FkZF90YWlsKCZibG9jay0+ bGluaywgJmFsbG9jYXRlZCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmICghaTkxNV9idWRk eV9ibG9ja19pc19zcGxpdChibG9jaykpIHsKLQkJCWVyciA9IHNwbGl0X2Jsb2NrKG1tLCBibG9j ayk7Ci0JCQlpZiAodW5saWtlbHkoZXJyKSkKLQkJCQlnb3RvIGVycl91bmRvOwotCQl9Ci0KLQkJ bGlzdF9hZGQoJmJsb2NrLT5yaWdodC0+dG1wX2xpbmssICZkZnMpOwotCQlsaXN0X2FkZCgmYmxv Y2stPmxlZnQtPnRtcF9saW5rLCAmZGZzKTsKLQl9IHdoaWxlICgxKTsKLQotCWxpc3Rfc3BsaWNl X3RhaWwoJmFsbG9jYXRlZCwgYmxvY2tzKTsKLQlyZXR1cm4gMDsKLQotZXJyX3VuZG86Ci0JLyoK LQkgKiBXZSByZWFsbHkgZG9uJ3Qgd2FudCB0byBsZWF2ZSBhcm91bmQgYSBidW5jaCBvZiBzcGxp dCBibG9ja3MsIHNpbmNlCi0JICogYmlnZ2VyIGlzIGJldHRlciwgc28gbWFrZSBzdXJlIHdlIG1l cmdlIGV2ZXJ5dGhpbmcgYmFjayBiZWZvcmUgd2UKLQkgKiBmcmVlIHRoZSBhbGxvY2F0ZWQgYmxv Y2tzLgotCSAqLwotCWJ1ZGR5ID0gZ2V0X2J1ZGR5KGJsb2NrKTsKLQlpZiAoYnVkZHkgJiYKLQkg ICAgKGk5MTVfYnVkZHlfYmxvY2tfaXNfZnJlZShibG9jaykgJiYKLQkgICAgIGk5MTVfYnVkZHlf YmxvY2tfaXNfZnJlZShidWRkeSkpKQotCQlfX2k5MTVfYnVkZHlfZnJlZShtbSwgYmxvY2spOwot Ci1lcnJfZnJlZToKLQlpOTE1X2J1ZGR5X2ZyZWVfbGlzdChtbSwgJmFsbG9jYXRlZCk7Ci0JcmV0 dXJuIGVycjsKLX0KLQotI2lmIElTX0VOQUJMRUQoQ09ORklHX0RSTV9JOTE1X1NFTEZURVNUKQot I2luY2x1ZGUgInNlbGZ0ZXN0cy9pOTE1X2J1ZGR5LmMiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfYnVkZHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfYnVkZHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNlNTIwMGY0MDAxLi4w MDAwMDAwMDAwMDAKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9idWRkeS5oCisrKyAv ZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBN SVQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgotICovCi0K LSNpZm5kZWYgX19JOTE1X0JVRERZX0hfXwotI2RlZmluZSBfX0k5MTVfQlVERFlfSF9fCi0KLSNp bmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0KLXN0cnVj dCBpOTE1X2J1ZGR5X2Jsb2NrIHsKLSNkZWZpbmUgSTkxNV9CVUREWV9IRUFERVJfT0ZGU0VUIEdF Tk1BU0tfVUxMKDYzLCAxMikKLSNkZWZpbmUgSTkxNV9CVUREWV9IRUFERVJfU1RBVEUgIEdFTk1B U0tfVUxMKDExLCAxMCkKLSNkZWZpbmUgICBJOTE1X0JVRERZX0FMTE9DQVRFRAkgICAoMSA8PCAx MCkKLSNkZWZpbmUgICBJOTE1X0JVRERZX0ZSRUUJICAgKDIgPDwgMTApCi0jZGVmaW5lICAgSTkx NV9CVUREWV9TUExJVAkgICAoMyA8PCAxMCkKLS8qIEZyZWUgdG8gYmUgdXNlZCwgaWYgbmVlZGVk IGluIHRoZSBmdXR1cmUgKi8KLSNkZWZpbmUgSTkxNV9CVUREWV9IRUFERVJfVU5VU0VEIEdFTk1B U0tfVUxMKDksIDYpCi0jZGVmaW5lIEk5MTVfQlVERFlfSEVBREVSX09SREVSICBHRU5NQVNLX1VM TCg1LCAwKQotCXU2NCBoZWFkZXI7Ci0KLQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqbGVmdDsK LQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqcmlnaHQ7Ci0Jc3RydWN0IGk5MTVfYnVkZHlfYmxv Y2sgKnBhcmVudDsKLQotCXZvaWQgKnByaXZhdGU7IC8qIG93bmVkIGJ5IGNyZWF0b3IgKi8KLQot CS8qCi0JICogV2hpbGUgdGhlIGJsb2NrIGlzIGFsbG9jYXRlZCBieSB0aGUgdXNlciB0aHJvdWdo IGk5MTVfYnVkZHlfYWxsb2MqLAotCSAqIHRoZSB1c2VyIGhhcyBvd25lcnNoaXAgb2YgdGhlIGxp bmssIGZvciBleGFtcGxlIHRvIG1haW50YWluIHdpdGhpbgotCSAqIGEgbGlzdCwgaWYgc28gZGVz aXJlZC4gQXMgc29vbiBhcyB0aGUgYmxvY2sgaXMgZnJlZWQgd2l0aAotCSAqIGk5MTVfYnVkZHlf ZnJlZSogb3duZXJzaGlwIGlzIGdpdmVuIGJhY2sgdG8gdGhlIG1tLgotCSAqLwotCXN0cnVjdCBs aXN0X2hlYWQgbGluazsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHRtcF9saW5rOwotfTsKLQotLyogT3Jk ZXItemVybyBtdXN0IGJlIGF0IGxlYXN0IFBBR0VfU0laRSAqLwotI2RlZmluZSBJOTE1X0JVRERZ X01BWF9PUkRFUiAoNjMgLSBQQUdFX1NISUZUKQotCi0vKgotICogQmluYXJ5IEJ1ZGR5IFN5c3Rl bS4KLSAqCi0gKiBMb2NraW5nIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSB1c2VyLCBhIHNpbXBs ZSBtdXRleCBhcm91bmQKLSAqIGk5MTVfYnVkZHlfYWxsb2MqIGFuZCBpOTE1X2J1ZGR5X2ZyZWUq IHNob3VsZCBzdWZmaWNlLgotICovCi1zdHJ1Y3QgaTkxNV9idWRkeV9tbSB7Ci0JLyogTWFpbnRh aW4gYSBmcmVlIGxpc3QgZm9yIGVhY2ggb3JkZXIuICovCi0Jc3RydWN0IGxpc3RfaGVhZCAqZnJl ZV9saXN0OwotCi0JLyoKLQkgKiBNYWludGFpbiBleHBsaWNpdCBiaW5hcnkgdHJlZShzKSB0byB0 cmFjayB0aGUgYWxsb2NhdGlvbiBvZiB0aGUKLQkgKiBhZGRyZXNzIHNwYWNlLiBUaGlzIGdpdmVz IHVzIGEgc2ltcGxlIHdheSBvZiBmaW5kaW5nIGEgYnVkZHkgYmxvY2sKLQkgKiBhbmQgcGVyZm9y bWluZyB0aGUgcG90ZW50aWFsbHkgcmVjdXJzaXZlIG1lcmdlIHN0ZXAgd2hlbiBmcmVlaW5nIGEK LQkgKiBibG9jay4gIE5vZGVzIGFyZSBlaXRoZXIgYWxsb2NhdGVkIG9yIGZyZWUsIGluIHdoaWNo IGNhc2UgdGhleSB3aWxsCi0JICogYWxzbyBleGlzdCBvbiB0aGUgcmVzcGVjdGl2ZSBmcmVlIGxp c3QuCi0JICovCi0Jc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKipyb290czsKLQotCS8qCi0JICog QW55dGhpbmcgZnJvbSBoZXJlIGlzIHB1YmxpYywgYW5kIHJlbWFpbnMgc3RhdGljIGZvciB0aGUg bGlmZXRpbWUgb2YKLQkgKiB0aGUgbW0uIEV2ZXJ5dGhpbmcgYWJvdmUgaXMgY29uc2lkZXJlZCBk by1ub3QtdG91Y2guCi0JICovCi0JdW5zaWduZWQgaW50IG5fcm9vdHM7Ci0JdW5zaWduZWQgaW50 IG1heF9vcmRlcjsKLQotCS8qIE11c3QgYmUgYXQgbGVhc3QgUEFHRV9TSVpFICovCi0JdTY0IGNo dW5rX3NpemU7Ci0JdTY0IHNpemU7Ci19OwotCi1zdGF0aWMgaW5saW5lIHU2NAotaTkxNV9idWRk eV9ibG9ja19vZmZzZXQoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewotCXJldHVy biBibG9jay0+aGVhZGVyICYgSTkxNV9CVUREWV9IRUFERVJfT0ZGU0VUOwotfQotCi1zdGF0aWMg aW5saW5lIHVuc2lnbmVkIGludAotaTkxNV9idWRkeV9ibG9ja19vcmRlcihzdHJ1Y3QgaTkxNV9i dWRkeV9ibG9jayAqYmxvY2spCi17Ci0JcmV0dXJuIGJsb2NrLT5oZWFkZXIgJiBJOTE1X0JVRERZ X0hFQURFUl9PUkRFUjsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWk5MTVfYnVk ZHlfYmxvY2tfc3RhdGUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewotCXJldHVy biBibG9jay0+aGVhZGVyICYgSTkxNV9CVUREWV9IRUFERVJfU1RBVEU7Ci19Ci0KLXN0YXRpYyBp bmxpbmUgYm9vbAotaTkxNV9idWRkeV9ibG9ja19pc19hbGxvY2F0ZWQoc3RydWN0IGk5MTVfYnVk ZHlfYmxvY2sgKmJsb2NrKQotewotCXJldHVybiBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2Nr KSA9PSBJOTE1X0JVRERZX0FMTE9DQVRFRDsKLX0KLQotc3RhdGljIGlubGluZSBib29sCi1pOTE1 X2J1ZGR5X2Jsb2NrX2lzX2ZyZWUoc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrKQotewot CXJldHVybiBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKSA9PSBJOTE1X0JVRERZX0ZSRUU7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaTkxNV9idWRkeV9ibG9ja19pc19zcGxpdChzdHJ1 Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCi17Ci0JcmV0dXJuIGk5MTVfYnVkZHlfYmxvY2tf c3RhdGUoYmxvY2spID09IEk5MTVfQlVERFlfU1BMSVQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTY0 Ci1pOTE1X2J1ZGR5X2Jsb2NrX3NpemUoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAotCQkgICAg ICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCi17Ci0JcmV0dXJuIG1tLT5jaHVua19z aXplIDw8IGk5MTVfYnVkZHlfYmxvY2tfb3JkZXIoYmxvY2spOwotfQotCi1pbnQgaTkxNV9idWRk eV9pbml0KHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwgdTY0IHNpemUsIHU2NCBjaHVua19zaXpl KTsKLQotdm9pZCBpOTE1X2J1ZGR5X2Zpbmkoc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tKTsKLQot c3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKgotaTkxNV9idWRkeV9hbGxvYyhzdHJ1Y3QgaTkxNV9i dWRkeV9tbSAqbW0sIHVuc2lnbmVkIGludCBvcmRlcik7Ci0KLWludCBpOTE1X2J1ZGR5X2FsbG9j X3JhbmdlKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKLQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQg KmJsb2NrcywKLQkJCSAgIHU2NCBzdGFydCwgdTY0IHNpemUpOwotCi12b2lkIGk5MTVfYnVkZHlf ZnJlZShzdHJ1Y3QgaTkxNV9idWRkeV9tbSAqbW0sIHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpi bG9jayk7Ci0KLXZvaWQgaTkxNV9idWRkeV9mcmVlX2xpc3Qoc3RydWN0IGk5MTVfYnVkZHlfbW0g Km1tLCBzdHJ1Y3QgbGlzdF9oZWFkICpvYmplY3RzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kcnYuYwppbmRleCA5MmJjY2M1NjIzYTguLjEyMmRkMjk3YjZhZiAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5jCkBAIC04NCw2ICs4NCw3IEBACiAjaW5jbHVkZSAiaW50ZWxfZ3Z0LmgiCiAjaW5j bHVkZSAiaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIgogI2luY2x1ZGUgImludGVsX3BtLmgiCisjaW5j bHVkZSAiaW50ZWxfcmVnaW9uX3R0bS5oIgogI2luY2x1ZGUgImludGVsX3NpZGViYW5kLmgiCiAj aW5jbHVkZSAidmx2X3N1c3BlbmQuaCIKIApAQCAtMzM1LDYgKzMzNiwxMCBAQCBzdGF0aWMgaW50 IGk5MTVfZHJpdmVyX2Vhcmx5X3Byb2JlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfd29ya3F1ZXVlczsKIAorCXJldCA9IGludGVs X3JlZ2lvbl90dG1fZGV2aWNlX2luaXQoZGV2X3ByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJy X3R0bTsKKwogCWludGVsX3dvcGNtX2luaXRfZWFybHkoJmRldl9wcml2LT53b3BjbSk7CiAKIAlp bnRlbF9ndF9pbml0X2Vhcmx5KCZkZXZfcHJpdi0+Z3QsIGRldl9wcml2KTsKQEAgLTM1OSw2ICsz NjQsOCBAQCBzdGF0aWMgaW50IGk5MTVfZHJpdmVyX2Vhcmx5X3Byb2JlKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdikKIGVycl9nZW06CiAJaTkxNV9nZW1fY2xlYW51cF9lYXJseShk ZXZfcHJpdik7CiAJaW50ZWxfZ3RfZHJpdmVyX2xhdGVfcmVsZWFzZSgmZGV2X3ByaXYtPmd0KTsK KwlpbnRlbF9yZWdpb25fdHRtX2RldmljZV9maW5pKGRldl9wcml2KTsKK2Vycl90dG06CiAJdmx2 X3N1c3BlbmRfY2xlYW51cChkZXZfcHJpdik7CiBlcnJfd29ya3F1ZXVlczoKIAlpOTE1X3dvcmtx dWV1ZXNfY2xlYW51cChkZXZfcHJpdik7CkBAIC0zNzYsNiArMzgzLDcgQEAgc3RhdGljIHZvaWQg aTkxNV9kcml2ZXJfbGF0ZV9yZWxlYXNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp dikKIAlpbnRlbF9wb3dlcl9kb21haW5zX2NsZWFudXAoZGV2X3ByaXYpOwogCWk5MTVfZ2VtX2Ns ZWFudXBfZWFybHkoZGV2X3ByaXYpOwogCWludGVsX2d0X2RyaXZlcl9sYXRlX3JlbGVhc2UoJmRl dl9wcml2LT5ndCk7CisJaW50ZWxfcmVnaW9uX3R0bV9kZXZpY2VfZmluaShkZXZfcHJpdik7CiAJ dmx2X3N1c3BlbmRfY2xlYW51cChkZXZfcHJpdik7CiAJaTkxNV93b3JrcXVldWVzX2NsZWFudXAo ZGV2X3ByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCAxMjgxOThlOGI0ZDAuLjEy NzZhMmY2MDc0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAor KysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC02MCw2ICs2MCw3IEBACiAj aW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2Nvbm5lY3Rvci5o PgogI2luY2x1ZGUgPGRybS9pOTE1X21laV9oZGNwX2ludGVyZmFjZS5oPgorI2luY2x1ZGUgPGRy bS90dG0vdHRtX2RldmljZS5oPgogCiAjaW5jbHVkZSAiaTkxNV9wYXJhbXMuaCIKICNpbmNsdWRl ICJpOTE1X3JlZy5oIgpAQCAtMTE2Niw2ICsxMTY3LDkgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgewogCS8qIE11dGV4IHRvIHByb3RlY3QgdGhlIGFib3ZlIGhkY3AgY29tcG9uZW50IHJlbGF0 ZWQgdmFsdWVzLiAqLwogCXN0cnVjdCBtdXRleCBoZGNwX2NvbXBfbXV0ZXg7CiAKKwkvKiBUaGUg VFRNIGRldmljZSBzdHJ1Y3R1cmUuICovCisJc3RydWN0IHR0bV9kZXZpY2UgYmRldjsKKwogCUk5 MTVfU0VMRlRFU1RfREVDTEFSRShzdHJ1Y3QgaTkxNV9zZWxmdGVzdF9zdGFzaCBzZWxmdGVzdDsp CiAKIAkvKgpAQCAtMTc1MSw3ICsxNzU1LDggQEAgdm9pZCBpOTE1X2dlbV9jbGVhbnVwX3VzZXJw dHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIHZvaWQgaTkxNV9nZW1faW5p dF9lYXJseShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwogdm9pZCBpOTE1X2dl bV9jbGVhbnVwX2Vhcmx5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7CiAKLXN0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICppOTE1X2dlbV9zaG1lbV9zZXR1cChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSk7CitzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqaTkxNV9n ZW1fc2htZW1fc2V0dXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCisJCQkJCQkgdTE2 IHR5cGUsIHUxNiBpbnN0YW5jZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9kcmFp bl9mcmVlZF9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQogewpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtLmMKaW5kZXggZDAwMThjNWY4OGJkLi4xODBmNmU5MTA3ZDQgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwpAQCAtMTEwOSw2ICsxMTA5LDcgQEAgaW50IGk5MTVfZ2VtX2luaXQo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQogCX0KIAogCWk5MTVfZ2VtX2RyYWlu X2ZyZWVkX29iamVjdHMoZGV2X3ByaXYpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmMgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dsb2JhbHMuYwppbmRleCAzYWEyMTM2ODQyOTMuLjc3ZjE5MTFjNDYzYiAxMDA2 NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmMKKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmMKQEAgLTg3LDcgKzg3LDYgQEAgc3RhdGljIHZv aWQgX19pOTE1X2dsb2JhbHNfY2xlYW51cCh2b2lkKQogCiBzdGF0aWMgX19pbml0Y29uc3QgaW50 ICgqIGNvbnN0IGluaXRmbltdKSh2b2lkKSA9IHsKIAlpOTE1X2dsb2JhbF9hY3RpdmVfaW5pdCwK LQlpOTE1X2dsb2JhbF9idWRkeV9pbml0LAogCWk5MTVfZ2xvYmFsX2NvbnRleHRfaW5pdCwKIAlp OTE1X2dsb2JhbF9nZW1fY29udGV4dF9pbml0LAogCWk5MTVfZ2xvYmFsX29iamVjdHNfaW5pdCwK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2xvYmFscy5oIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nbG9iYWxzLmgKaW5kZXggYjJmNWNkOWI5YjFhLi4yZDE5OWY0 MTFhNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2xvYmFscy5oCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2xvYmFscy5oCkBAIC0yNyw3ICsyNyw2IEBA IHZvaWQgaTkxNV9nbG9iYWxzX2V4aXQodm9pZCk7CiAKIC8qIGNvbnN0cnVjdG9ycyAqLwogaW50 IGk5MTVfZ2xvYmFsX2FjdGl2ZV9pbml0KHZvaWQpOwotaW50IGk5MTVfZ2xvYmFsX2J1ZGR5X2lu aXQodm9pZCk7CiBpbnQgaTkxNV9nbG9iYWxfY29udGV4dF9pbml0KHZvaWQpOwogaW50IGk5MTVf Z2xvYmFsX2dlbV9jb250ZXh0X2luaXQodm9pZCk7CiBpbnQgaTkxNV9nbG9iYWxfb2JqZWN0c19p bml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2F0dGVy bGlzdC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2F0dGVybGlzdC5jCmluZGV4IGNj NmIzODQ2YThjNy4uNjllOWU2YzMxMzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3NjYXR0ZXJsaXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2F0 dGVybGlzdC5jCkBAIC02LDYgKzYsMTAgQEAKIAogI2luY2x1ZGUgImk5MTVfc2NhdHRlcmxpc3Qu aCIKIAorI2luY2x1ZGUgPGRybS9kcm1fbW0uaD4KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4K KwogYm9vbCBpOTE1X3NnX3RyaW0oc3RydWN0IHNnX3RhYmxlICpvcmlnX3N0KQogewogCXN0cnVj dCBzZ190YWJsZSBuZXdfc3Q7CkBAIC0zNCw2ICszOCw3MiBAQCBib29sIGk5MTVfc2dfdHJpbShz dHJ1Y3Qgc2dfdGFibGUgKm9yaWdfc3QpCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qKgorICogaTkx NV9zZ19mcm9tX21tX25vZGUgLSBDcmVhdGUgYW4gc2dfdGFibGUgZnJvbSBhIHN0cnVjdCBkcm1f bW1fbm9kZQorICogQG5vZGU6IFRoZSBkcm1fbW1fbm9kZS4KKyAqIEByZWdpb25fc3RhcnQ6IEFu IG9mZnNldCB0byBhZGQgdG8gdGhlIGRtYSBhZGRyZXNzZXMgb2YgdGhlIHNnIGxpc3QuCisgKgor ICogQ3JlYXRlIGEgc3RydWN0IHNnX3RhYmxlLCBpbml0aWFsaXppbmcgaXQgZnJvbSBhIHN0cnVj dCBkcm1fbW1fbm9kZSwKKyAqIHRha2luZyBhIG1heGltdW0gc2VnbWVudCBsZW5ndGggaW50byBh Y2NvdW50LCBzcGxpdHRpbmcgaW50byBzZWdtZW50cworICogaWYgbmVjZXNzYXJ5LgorICoKKyAq IFJldHVybjogQSBwb2ludGVyIHRvIGEga21hbGxvY2VkIHN0cnVjdCBzZ190YWJsZSBvbiBzdWNj ZXNzLCBuZWdhdGl2ZQorICogZXJyb3IgY29kZSBjYXN0IHRvIGFuIGVycm9yIHBvaW50ZXIgb24g ZmFpbHVyZS4KKyAqLworc3RydWN0IHNnX3RhYmxlICppOTE1X3NnX2Zyb21fbW1fbm9kZShjb25z dCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCisJCQkJICAgICAgdTY0IHJlZ2lvbl9zdGFydCkK K3sKKwljb25zdCB1NjQgbWF4X3NlZ21lbnQgPSBTWl8xRzsgLyogRG8gd2UgaGF2ZSBhIGxpbWl0 IG9uIHRoaXM/ICovCisJdTY0IHNlZ21lbnRfcGFnZXMgPSBtYXhfc2VnbWVudCA+PiBQQUdFX1NI SUZUOworCXU2NCBibG9ja19zaXplLCBvZmZzZXQsIHByZXZfZW5kOworCXN0cnVjdCBzZ190YWJs ZSAqc3Q7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKworCXN0ID0ga21hbGxvYyhzaXplb2Yo KnN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7 CisKKwlpZiAoc2dfYWxsb2NfdGFibGUoc3QsIERJVl9ST1VORF9VUChub2RlLT5zaXplLCBzZWdt ZW50X3BhZ2VzKSwKKwkJCSAgIEdGUF9LRVJORUwpKSB7CisJCWtmcmVlKHN0KTsKKwkJcmV0dXJu IEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJc2cgPSBzdC0+c2dsOworCXN0LT5uZW50cyA9IDA7 CisJcHJldl9lbmQgPSAocmVzb3VyY2Vfc2l6ZV90KS0xOworCWJsb2NrX3NpemUgPSBub2RlLT5z aXplIDw8IFBBR0VfU0hJRlQ7CisJb2Zmc2V0ID0gbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsK KworCXdoaWxlIChibG9ja19zaXplKSB7CisJCXU2NCBsZW47CisKKwkJaWYgKG9mZnNldCAhPSBw cmV2X2VuZCB8fCBzZy0+bGVuZ3RoID49IG1heF9zZWdtZW50KSB7CisJCQlpZiAoc3QtPm5lbnRz KQorCQkJCXNnID0gX19zZ19uZXh0KHNnKTsKKworCQkJc2dfZG1hX2FkZHJlc3Moc2cpID0gcmVn aW9uX3N0YXJ0ICsgb2Zmc2V0OworCQkJc2dfZG1hX2xlbihzZykgPSAwOworCQkJc2ctPmxlbmd0 aCA9IDA7CisJCQlzdC0+bmVudHMrKzsKKwkJfQorCisJCWxlbiA9IG1pbihibG9ja19zaXplLCBt YXhfc2VnbWVudCAtIHNnLT5sZW5ndGgpOworCQlzZy0+bGVuZ3RoICs9IGxlbjsKKwkJc2dfZG1h X2xlbihzZykgKz0gbGVuOworCisJCW9mZnNldCArPSBsZW47CisJCWJsb2NrX3NpemUgLT0gbGVu OworCisJCXByZXZfZW5kID0gb2Zmc2V0OworCX0KKworCXNnX21hcmtfZW5kKHNnKTsKKwlpOTE1 X3NnX3RyaW0oc3QpOworCisJcmV0dXJuIHN0OworfQorCiAjaWYgSVNfRU5BQkxFRChDT05GSUdf RFJNX0k5MTVfU0VMRlRFU1QpCiAjaW5jbHVkZSAic2VsZnRlc3RzL3NjYXR0ZXJsaXN0LmMiCiAj ZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NhdHRlcmxpc3Qu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NhdHRlcmxpc3QuaAppbmRleCBiOTZiYWFk NjZhM2EuLjVhY2NhNDVlYTk4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2F0dGVybGlzdC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NhdHRlcmxp c3QuaApAQCAtMTMsNiArMTMsOCBAQAogCiAjaW5jbHVkZSAiaTkxNV9nZW0uaCIKIAorc3RydWN0 IGRybV9tbV9ub2RlOworCiAvKgogICogT3B0aW1pc2VkIFNHTCBpdGVyYXRvciBmb3IgR0VNIG9i amVjdHMKICAqLwpAQCAtMTQxLDQgKzE0Myw2IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50 IGk5MTVfc2dfc2VnbWVudF9zaXplKHZvaWQpCiAKIGJvb2wgaTkxNV9zZ190cmltKHN0cnVjdCBz Z190YWJsZSAqb3JpZ19zdCk7CiAKK3N0cnVjdCBzZ190YWJsZSAqaTkxNV9zZ19mcm9tX21tX25v ZGUoY29uc3Qgc3RydWN0IGRybV9tbV9ub2RlICpub2RlLAorCQkJCSAgICAgIHU2NCByZWdpb25f c3RhcnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9t ZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9u LmMKaW5kZXggZDk4ZThiODFkMzIyLi40MDkyY2M5ODc2NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9tZW1vcnlfcmVnaW9uLmMKQEAgLTI4LDYgKzI4LDExIEBAIHN0YXRpYyBjb25z dCBzdHJ1Y3QgewogCX0sCiB9OwogCitzdHJ1Y3QgaW50ZWxfcmVnaW9uX3Jlc2VydmUgeworCXN0 cnVjdCBsaXN0X2hlYWQgbGluazsKKwl2b2lkICpub2RlOworfTsKKwogc3RydWN0IGludGVsX21l bW9yeV9yZWdpb24gKgogaW50ZWxfbWVtb3J5X3JlZ2lvbl9sb29rdXAoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUsCiAJCQkgICB1MTYgY2xhc3MsIHUxNiBpbnN0YW5jZSkKQEAgLTU4LDE0 NiArNjMsNjEgQEAgaW50ZWxfbWVtb3J5X3JlZ2lvbl9ieV90eXBlKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1LAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdTY0Ci1pbnRlbF9tZW1v cnlfcmVnaW9uX2ZyZWVfcGFnZXMoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKLQkJ CSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja3MpCisvKioKKyAqIGludGVsX21lbW9yeV9y ZWdpb25fdW5yZXNlcnZlIC0gVW5yZXNlcnZlIGFsbCBwcmV2aW91c2x5IHJlc2VydmVkCisgKiBy YW5nZXMKKyAqIEBtZW06IFRoZSByZWdpb24gY29udGFpbmluZyB0aGUgcmVzZXJ2ZWQgcmFuZ2Vz LgorICovCit2b2lkIGludGVsX21lbW9yeV9yZWdpb25fdW5yZXNlcnZlKHN0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uICptZW0pCiB7Ci0Jc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrLCAq b247Ci0JdTY0IHNpemUgPSAwOworCXN0cnVjdCBpbnRlbF9yZWdpb25fcmVzZXJ2ZSAqcmVzZXJ2 ZSwgKm5leHQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYmxvY2ssIG9uLCBibG9ja3Ms IGxpbmspIHsKLQkJc2l6ZSArPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUoJm1lbS0+bW0sIGJsb2Nr KTsKLQkJaTkxNV9idWRkeV9mcmVlKCZtZW0tPm1tLCBibG9jayk7Ci0JfQotCUlOSVRfTElTVF9I RUFEKGJsb2Nrcyk7CisJaWYgKCFtZW0tPnByaXZfb3BzIHx8ICFtZW0tPnByaXZfb3BzLT5mcmVl KQorCQlyZXR1cm47CiAKLQlyZXR1cm4gc2l6ZTsKLX0KLQotdm9pZAotX19pbnRlbF9tZW1vcnlf cmVnaW9uX3B1dF9wYWdlc19idWRkeShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAot CQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrcykKLXsKIAltdXRleF9sb2NrKCZtZW0t Pm1tX2xvY2spOwotCW1lbS0+YXZhaWwgKz0gaW50ZWxfbWVtb3J5X3JlZ2lvbl9mcmVlX3BhZ2Vz KG1lbSwgYmxvY2tzKTsKLQltdXRleF91bmxvY2soJm1lbS0+bW1fbG9jayk7Ci19Ci0KLXZvaWQK LV9faW50ZWxfbWVtb3J5X3JlZ2lvbl9wdXRfYmxvY2tfYnVkZHkoc3RydWN0IGk5MTVfYnVkZHlf YmxvY2sgKmJsb2NrKQotewotCXN0cnVjdCBsaXN0X2hlYWQgYmxvY2tzOwotCi0JSU5JVF9MSVNU X0hFQUQoJmJsb2Nrcyk7Ci0JbGlzdF9hZGQoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKLQlfX2lu dGVsX21lbW9yeV9yZWdpb25fcHV0X3BhZ2VzX2J1ZGR5KGJsb2NrLT5wcml2YXRlLCAmYmxvY2tz KTsKLX0KLQotaW50Ci1fX2ludGVsX21lbW9yeV9yZWdpb25fZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCi0JCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNp emUsCi0JCQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzLAotCQkJCSAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgKmJsb2NrcykKLXsKLQl1bnNpZ25lZCBpbnQgbWluX29yZGVyID0gMDsKLQl1bnNpZ25l ZCBsb25nIG5fcGFnZXM7Ci0KLQlHRU1fQlVHX09OKCFJU19BTElHTkVEKHNpemUsIG1lbS0+bW0u Y2h1bmtfc2l6ZSkpOwotCUdFTV9CVUdfT04oIWxpc3RfZW1wdHkoYmxvY2tzKSk7Ci0KLQlpZiAo ZmxhZ3MgJiBJOTE1X0FMTE9DX01JTl9QQUdFX1NJWkUpIHsKLQkJbWluX29yZGVyID0gaWxvZzIo bWVtLT5taW5fcGFnZV9zaXplKSAtCi0JCQkgICAgaWxvZzIobWVtLT5tbS5jaHVua19zaXplKTsK LQl9Ci0KLQlpZiAoZmxhZ3MgJiBJOTE1X0FMTE9DX0NPTlRJR1VPVVMpIHsKLQkJc2l6ZSA9IHJv dW5kdXBfcG93X29mX3R3byhzaXplKTsKLQkJbWluX29yZGVyID0gaWxvZzIoc2l6ZSkgLSBpbG9n MihtZW0tPm1tLmNodW5rX3NpemUpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXNlcnZl LCBuZXh0LCAmbWVtLT5yZXNlcnZlZCwgbGluaykgeworCQlsaXN0X2RlbCgmcmVzZXJ2ZS0+bGlu ayk7CisJCW1lbS0+cHJpdl9vcHMtPmZyZWUobWVtLCByZXNlcnZlLT5ub2RlKTsKKwkJa2ZyZWUo cmVzZXJ2ZSk7CiAJfQotCi0JaWYgKHNpemUgPiBtZW0tPm1tLnNpemUpCi0JCXJldHVybiAtRTJC SUc7Ci0KLQluX3BhZ2VzID0gc2l6ZSA+PiBpbG9nMihtZW0tPm1tLmNodW5rX3NpemUpOwotCi0J bXV0ZXhfbG9jaygmbWVtLT5tbV9sb2NrKTsKLQotCWRvIHsKLQkJc3RydWN0IGk5MTVfYnVkZHlf YmxvY2sgKmJsb2NrOwotCQl1bnNpZ25lZCBpbnQgb3JkZXI7Ci0KLQkJb3JkZXIgPSBmbHMobl9w YWdlcykgLSAxOwotCQlHRU1fQlVHX09OKG9yZGVyID4gbWVtLT5tbS5tYXhfb3JkZXIpOwotCQlH RU1fQlVHX09OKG9yZGVyIDwgbWluX29yZGVyKTsKLQotCQlkbyB7Ci0JCQlibG9jayA9IGk5MTVf YnVkZHlfYWxsb2MoJm1lbS0+bW0sIG9yZGVyKTsKLQkJCWlmICghSVNfRVJSKGJsb2NrKSkKLQkJ CQlicmVhazsKLQotCQkJaWYgKG9yZGVyLS0gPT0gbWluX29yZGVyKQotCQkJCWdvdG8gZXJyX2Zy ZWVfYmxvY2tzOwotCQl9IHdoaWxlICgxKTsKLQotCQluX3BhZ2VzIC09IEJJVChvcmRlcik7Ci0K LQkJYmxvY2stPnByaXZhdGUgPSBtZW07Ci0JCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCBi bG9ja3MpOwotCi0JCWlmICghbl9wYWdlcykKLQkJCWJyZWFrOwotCX0gd2hpbGUgKDEpOwotCi0J bWVtLT5hdmFpbCAtPSBzaXplOwogCW11dGV4X3VubG9jaygmbWVtLT5tbV9sb2NrKTsKLQlyZXR1 cm4gMDsKLQotZXJyX2ZyZWVfYmxvY2tzOgotCWludGVsX21lbW9yeV9yZWdpb25fZnJlZV9wYWdl cyhtZW0sIGJsb2Nrcyk7Ci0JbXV0ZXhfdW5sb2NrKCZtZW0tPm1tX2xvY2spOwotCXJldHVybiAt RU5YSU87CiB9CiAKLXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICoKLV9faW50ZWxfbWVtb3J5X3Jl Z2lvbl9nZXRfYmxvY2tfYnVkZHkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSwKLQkJ CQkgICAgICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmxh Z3MpCisvKioKKyAqIGludGVsX21lbW9yeV9yZWdpb25fcmVzZXJ2ZSAtIFJlc2VydmUgYSBtZW1v cnkgcmFuZ2UKKyAqIEBtZW06IFRoZSByZWdpb24gZm9yIHdoaWNoIHdlIHdhbnQgdG8gcmVzZXJ2 ZSBhIHJhbmdlLgorICogQG9mZnNldDogU3RhcnQgb2YgdGhlIHJhbmdlIHRvIHJlc2VydmUuCisg KiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIHJhbmdlIHRvIHJlc2VydmUuCisgKgorICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLworaW50 IGludGVsX21lbW9yeV9yZWdpb25fcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAq bWVtLAorCQkJCXJlc291cmNlX3NpemVfdCBvZmZzZXQsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNp emUpCiB7Ci0Jc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOwotCUxJU1RfSEVBRChibG9j a3MpOwogCWludCByZXQ7CisJc3RydWN0IGludGVsX3JlZ2lvbl9yZXNlcnZlICpyZXNlcnZlOwog Ci0JcmV0ID0gX19pbnRlbF9tZW1vcnlfcmVnaW9uX2dldF9wYWdlc19idWRkeShtZW0sIHNpemUs IGZsYWdzLCAmYmxvY2tzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCWlm ICghbWVtLT5wcml2X29wcyB8fCAhbWVtLT5wcml2X29wcy0+cmVzZXJ2ZSkKKwkJcmV0dXJuIC1F SU5WQUw7CiAKLQlibG9jayA9IGxpc3RfZmlyc3RfZW50cnkoJmJsb2NrcywgdHlwZW9mKCpibG9j ayksIGxpbmspOwotCWxpc3RfZGVsX2luaXQoJmJsb2NrLT5saW5rKTsKLQlyZXR1cm4gYmxvY2s7 Ci19CisJcmVzZXJ2ZSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXNlcnZlKSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFyZXNlcnZlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotaW50IGludGVsX21lbW9yeV9yZWdp b25faW5pdF9idWRkeShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKQotewotCXJldHVy biBpOTE1X2J1ZGR5X2luaXQoJm1lbS0+bW0sIHJlc291cmNlX3NpemUoJm1lbS0+cmVnaW9uKSwK LQkJCSAgICAgICBQQUdFX1NJWkUpOwotfQotCi12b2lkIGludGVsX21lbW9yeV9yZWdpb25fcmVs ZWFzZV9idWRkeShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKQotewotCWk5MTVfYnVk ZHlfZnJlZV9saXN0KCZtZW0tPm1tLCAmbWVtLT5yZXNlcnZlZCk7Ci0JaTkxNV9idWRkeV9maW5p KCZtZW0tPm1tKTsKLX0KLQotaW50IGludGVsX21lbW9yeV9yZWdpb25fcmVzZXJ2ZShzdHJ1Y3Qg aW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAotCQkJCXU2NCBvZmZzZXQsIHU2NCBzaXplKQotewot CWludCByZXQ7CisJcmVzZXJ2ZS0+bm9kZSA9IG1lbS0+cHJpdl9vcHMtPnJlc2VydmUobWVtLCBv ZmZzZXQsIHNpemUpOworCWlmIChJU19FUlIocmVzZXJ2ZS0+bm9kZSkpIHsKKwkJcmV0ID0gUFRS X0VSUihyZXNlcnZlLT5ub2RlKTsKKwkJa2ZyZWUocmVzZXJ2ZSk7CisJCXJldHVybiByZXQ7CisJ fQogCiAJbXV0ZXhfbG9jaygmbWVtLT5tbV9sb2NrKTsKLQlyZXQgPSBpOTE1X2J1ZGR5X2FsbG9j X3JhbmdlKCZtZW0tPm1tLCAmbWVtLT5yZXNlcnZlZCwgb2Zmc2V0LCBzaXplKTsKKwlsaXN0X2Fk ZF90YWlsKCZyZXNlcnZlLT5saW5rLCAmbWVtLT5yZXNlcnZlZCk7CiAJbXV0ZXhfdW5sb2NrKCZt ZW0tPm1tX2xvY2spOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RydWN0IGlu dGVsX21lbW9yeV9yZWdpb24gKgpAQCAtMjA2LDYgKzEyNiw4IEBAIGludGVsX21lbW9yeV9yZWdp b25fY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkJICAgcmVzb3VyY2Vf c2l6ZV90IHNpemUsCiAJCQkgICByZXNvdXJjZV9zaXplX3QgbWluX3BhZ2Vfc2l6ZSwKIAkJCSAg IHJlc291cmNlX3NpemVfdCBpb19zdGFydCwKKwkJCSAgIHUxNiB0eXBlLAorCQkJICAgdTE2IGlu c3RhbmNlLAogCQkJICAgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdpb25fb3BzICpvcHMp CiB7CiAJc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbTsKQEAgLTIyMiw2ICsxNDQsOCBA QCBpbnRlbF9tZW1vcnlfcmVnaW9uX2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSwKIAltZW0tPm9wcyA9IG9wczsKIAltZW0tPnRvdGFsID0gc2l6ZTsKIAltZW0tPmF2YWlsID0g bWVtLT50b3RhbDsKKwltZW0tPnR5cGUgPSB0eXBlOworCW1lbS0+aW5zdGFuY2UgPSBpbnN0YW5j ZTsKIAogCW11dGV4X2luaXQoJm1lbS0+b2JqZWN0cy5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgm bWVtLT5vYmplY3RzLmxpc3QpOwpAQCAtMjU5LDYgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIF9faW50 ZWxfbWVtb3J5X3JlZ2lvbl9kZXN0cm95KHN0cnVjdCBrcmVmICprcmVmKQogCXN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICptZW0gPQogCQljb250YWluZXJfb2Yoa3JlZiwgdHlwZW9mKCptZW0p LCBrcmVmKTsKIAorCWludGVsX21lbW9yeV9yZWdpb25fdW5yZXNlcnZlKG1lbSk7CiAJaWYgKG1l bS0+b3BzLT5yZWxlYXNlKQogCQltZW0tPm9wcy0+cmVsZWFzZShtZW0pOwogCkBAIC0yOTYsMTUg KzIyMSwxNSBAQCBpbnQgaW50ZWxfbWVtb3J5X3JlZ2lvbnNfaHdfcHJvYmUoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpCiAJCWluc3RhbmNlID0gaW50ZWxfcmVnaW9uX21hcFtpXS5pbnN0 YW5jZTsKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgSU5URUxfTUVNT1JZX1NZU1RFTToKLQkJ CW1lbSA9IGk5MTVfZ2VtX3NobWVtX3NldHVwKGk5MTUpOworCQkJbWVtID0gaTkxNV9nZW1fc2ht ZW1fc2V0dXAoaTkxNSwgdHlwZSwgaW5zdGFuY2UpOwogCQkJYnJlYWs7CiAJCWNhc2UgSU5URUxf TUVNT1JZX1NUT0xFTl9MT0NBTDoKLQkJCW1lbSA9IGk5MTVfZ2VtX3N0b2xlbl9sbWVtX3NldHVw KGk5MTUpOworCQkJbWVtID0gaTkxNV9nZW1fc3RvbGVuX2xtZW1fc2V0dXAoaTkxNSwgdHlwZSwg aW5zdGFuY2UpOwogCQkJaWYgKCFJU19FUlIobWVtKSkKIAkJCQlpOTE1LT5tbS5zdG9sZW5fcmVn aW9uID0gbWVtOwogCQkJYnJlYWs7CiAJCWNhc2UgSU5URUxfTUVNT1JZX1NUT0xFTl9TWVNURU06 Ci0JCQltZW0gPSBpOTE1X2dlbV9zdG9sZW5fc21lbV9zZXR1cChpOTE1KTsKKwkJCW1lbSA9IGk5 MTVfZ2VtX3N0b2xlbl9zbWVtX3NldHVwKGk5MTUsIHR5cGUsIGluc3RhbmNlKTsKIAkJCWlmICgh SVNfRVJSKG1lbSkpCiAJCQkJaTkxNS0+bW0uc3RvbGVuX3JlZ2lvbiA9IG1lbTsKIAkJCWJyZWFr OwpAQCAtMzIxLDkgKzI0Niw2IEBAIGludCBpbnRlbF9tZW1vcnlfcmVnaW9uc19od19wcm9iZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKIAkJfQogCiAJCW1lbS0+aWQgPSBpOwotCQlt ZW0tPnR5cGUgPSB0eXBlOwotCQltZW0tPmluc3RhbmNlID0gaW5zdGFuY2U7Ci0KIAkJaTkxNS0+ bW0ucmVnaW9uc1tpXSA9IG1lbTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX21lbW9yeV9yZWdpb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21l bW9yeV9yZWdpb24uaAppbmRleCBkMjRjZTVhMGIzMGIuLmU2OWNkZTEzZGFmMiAxMDA2NDQKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbWVtb3J5X3JlZ2lvbi5oCisrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX21lbW9yeV9yZWdpb24uaApAQCAtMTMsOCArMTMsNiBAQAog I2luY2x1ZGUgPGRybS9kcm1fbW0uaD4KICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KIAotI2lu Y2x1ZGUgImk5MTVfYnVkZHkuaCIKLQogc3RydWN0IGRybV9pOTE1X3ByaXZhdGU7CiBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdDsKIHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uOwpAQCAtMjUs NiArMjMsNyBAQCBlbnVtIGludGVsX21lbW9yeV90eXBlIHsKIAlJTlRFTF9NRU1PUllfTE9DQUwg PSBJOTE1X01FTU9SWV9DTEFTU19ERVZJQ0UsCiAJSU5URUxfTUVNT1JZX1NUT0xFTl9TWVNURU0s CiAJSU5URUxfTUVNT1JZX1NUT0xFTl9MT0NBTCwKKwlJTlRFTF9NRU1PUllfTU9DSywKIH07CiAK IGVudW0gaW50ZWxfcmVnaW9uX2lkIHsKQEAgLTU5LDEwICs1OCwxOSBAQCBzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbl9vcHMgewogCQkJICAgdW5zaWduZWQgaW50IGZsYWdzKTsKIH07CiAKK3N0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uX3ByaXZhdGVfb3BzIHsKKwl2b2lkICooKnJlc2VydmUp KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkgcmVzb3VyY2Vfc2l6ZV90IG9m ZnNldCwKKwkJCSByZXNvdXJjZV9zaXplX3Qgc2l6ZSk7CisJdm9pZCAoKmZyZWUpKHN0cnVjdCBp bnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCisJCSAgICAgdm9pZCAqbm9kZSk7Cit9OworCiBzdHJ1 Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7 CiAKIAljb25zdCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9vcHMgKm9wczsKKwljb25zdCBz dHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9wcml2YXRlX29wcyAqcHJpdl9vcHM7CiAKIAlzdHJ1 Y3QgaW9fbWFwcGluZyBpb21hcDsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVnaW9uOwpAQCAtNzAsNyAr NzgsNiBAQCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiB7CiAJLyogRm9yIGZha2UgTE1FTSAq LwogCXN0cnVjdCBkcm1fbW1fbm9kZSBmYWtlX21hcHBhYmxlOwogCi0Jc3RydWN0IGk5MTVfYnVk ZHlfbW0gbW07CiAJc3RydWN0IG11dGV4IG1tX2xvY2s7CiAKIAlzdHJ1Y3Qga3JlZiBrcmVmOwpA QCAtOTUsMzYgKzEwMiwyNiBAQCBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiB7CiAJCXN0cnVj dCBsaXN0X2hlYWQgbGlzdDsKIAkJc3RydWN0IGxpc3RfaGVhZCBwdXJnZWFibGU7CiAJfSBvYmpl Y3RzOworCisJc2l6ZV90IGNodW5rX3NpemU7CisJdW5zaWduZWQgaW50IG1heF9vcmRlcjsKKwli b29sIGlzX3JhbmdlX21hbmFnZXI7CisKKwl2b2lkICpyZWdpb25fcHJpdmF0ZTsKIH07CiAKIHN0 cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICoKIGludGVsX21lbW9yeV9yZWdpb25fbG9va3VwKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAogCQkJICAgdTE2IGNsYXNzLCB1MTYgaW5zdGFu Y2UpOwogCi1pbnQgaW50ZWxfbWVtb3J5X3JlZ2lvbl9pbml0X2J1ZGR5KHN0cnVjdCBpbnRlbF9t ZW1vcnlfcmVnaW9uICptZW0pOwotdm9pZCBpbnRlbF9tZW1vcnlfcmVnaW9uX3JlbGVhc2VfYnVk ZHkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSk7Ci0KLWludCBfX2ludGVsX21lbW9y eV9yZWdpb25fZ2V0X3BhZ2VzX2J1ZGR5KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0s Ci0JCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCi0JCQkJCSAgdW5zaWduZWQgaW50IGZsYWdz LAotCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmJsb2Nrcyk7Ci1zdHJ1Y3QgaTkxNV9idWRkeV9i bG9jayAqCi1fX2ludGVsX21lbW9yeV9yZWdpb25fZ2V0X2Jsb2NrX2J1ZGR5KHN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICptZW0sCi0JCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCi0J CQkJICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKLXZvaWQgX19pbnRlbF9tZW1vcnlfcmVnaW9u X3B1dF9wYWdlc19idWRkeShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAotCQkJCQkg ICBzdHJ1Y3QgbGlzdF9oZWFkICpibG9ja3MpOwotdm9pZCBfX2ludGVsX21lbW9yeV9yZWdpb25f cHV0X2Jsb2NrX2J1ZGR5KHN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jayk7Ci0KLWludCBp bnRlbF9tZW1vcnlfcmVnaW9uX3Jlc2VydmUoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1l bSwKLQkJCQl1NjQgb2Zmc2V0LCB1NjQgc2l6ZSk7Ci0KIHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVn aW9uICoKIGludGVsX21lbW9yeV9yZWdpb25fY3JlYXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1LAogCQkJICAgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAogCQkJICAgcmVzb3VyY2Vfc2l6 ZV90IHNpemUsCiAJCQkgICByZXNvdXJjZV9zaXplX3QgbWluX3BhZ2Vfc2l6ZSwKIAkJCSAgIHJl c291cmNlX3NpemVfdCBpb19zdGFydCwKKwkJCSAgIHUxNiB0eXBlLAorCQkJICAgdTE2IGluc3Rh bmNlLAogCQkJICAgY29uc3Qgc3RydWN0IGludGVsX21lbW9yeV9yZWdpb25fb3BzICpvcHMpOwog CiBzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqCkBAIC0xNDEsNCArMTM4LDkgQEAgX19wcmlu dGYoMiwgMykgdm9pZAogaW50ZWxfbWVtb3J5X3JlZ2lvbl9zZXRfbmFtZShzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbiAqbWVtLAogCQkJICAgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKK3Zv aWQgaW50ZWxfbWVtb3J5X3JlZ2lvbl91bnJlc2VydmUoc3RydWN0IGludGVsX21lbW9yeV9yZWdp b24gKm1lbSk7CisKK2ludCBpbnRlbF9tZW1vcnlfcmVnaW9uX3Jlc2VydmUoc3RydWN0IGludGVs X21lbW9yeV9yZWdpb24gKm1lbSwKKwkJCQlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAorCQkJCXJl c291cmNlX3NpemVfdCBzaXplKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfcmVnaW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVn aW9uX3R0bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOWZiNDQ3 ZTE5ZWJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVn aW9uX3R0bS5jCkBAIC0wLDAgKzEsMjQ1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog TUlUCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29ycG9yYXRpb24KKyAqLworI2lu Y2x1ZGUgPGRybS90dG0vdHRtX2JvX2RyaXZlci5oPgorI2luY2x1ZGUgPGRybS90dG0vdHRtX2Rl dmljZS5oPgorCisjaW5jbHVkZSAiaTkxNV9kcnYuaCIKKyNpbmNsdWRlICJpOTE1X3NjYXR0ZXJs aXN0LmgiCisKKyNpbmNsdWRlICJpbnRlbF9yZWdpb25fdHRtLmgiCisKKy8qIEEgWmVyby1pbml0 aWFsaXplZCBkcml2ZXIgZm9yIG5vdy4gV2UgZG9uJ3QgaGF2ZSBhIFRUTSBiYWNrZW5kIHlldC4g Ki8KK3N0YXRpYyBzdHJ1Y3QgdHRtX2RldmljZV9mdW5jcyBpOTE1X3R0bV9ib19kcml2ZXI7CisK Ky8qKgorICogRE9DOiBUVE0gc3VwcG9ydCBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgY29kZSBpbiB0 aGlzIGZpbGUgZGVhbHMgd2l0aCBzZXR0aW5nIHVwIG1lbW9yeSBtYW5hZ2VycyBmb3IgVFRNCisg KiBMTUVNIGFuZCBNT0NLIHJlZ2lvbnMgYW5kIGNvbnZlcnRpbmcgdGhlIG91dHB1dCBmcm9tCisg KiB0aGUgbWFuYWdlcnMgdG8gc3RydWN0IHNnX3RhYmxlLCBCYXNpY2FsbHkgcHJvdmlkaW5nIHRo ZSBtYXBwaW5nIGZyb20KKyAqIGk5MTUgR0VNIHJlZ2lvbnMgdG8gVFRNIG1lbW9yeSB0eXBlcyBh bmQgcmVzb3VyY2UgbWFuYWdlcnMuCisgKi8KKworLyoqCisgKiBpbnRlbF9yZWdpb25fdHRtX2Rl dmljZV9pbml0IC0gSW5pdGlhbGl6ZSBhIFRUTSBkZXZpY2UKKyAqIEBkZXZfcHJpdjogUG9pbnRl ciB0byBhbiBpOTE1IGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4KKyAqCisgKiBSZXR1cm46IDAg b24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaW50 ZWxfcmVnaW9uX3R0bV9kZXZpY2VfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9ICZkZXZfcHJpdi0+ZHJtOworCisJcmV0 dXJuIHR0bV9kZXZpY2VfaW5pdCgmZGV2X3ByaXYtPmJkZXYsICZpOTE1X3R0bV9ib19kcml2ZXIs CisJCQkgICAgICAgZHJtLT5kZXYsIGRybS0+YW5vbl9pbm9kZS0+aV9tYXBwaW5nLAorCQkJICAg ICAgIGRybS0+dm1hX29mZnNldF9tYW5hZ2VyLCBmYWxzZSwgZmFsc2UpOworfQorCisvKioKKyAq IGludGVsX3JlZ2lvbl90dG1fZGV2aWNlX2ZpbmkgLSBGaW5hbGl6ZSBhIFRUTSBkZXZpY2UKKyAq IEBkZXZfcHJpdjogUG9pbnRlciB0byBhbiBpOTE1IGRldmljZSBwcml2YXRlIHN0cnVjdHVyZS4K KyAqLwordm9pZCBpbnRlbF9yZWdpb25fdHRtX2RldmljZV9maW5pKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKK3sKKwl0dG1fZGV2aWNlX2ZpbmkoJmRldl9wcml2LT5iZGV2KTsK K30KKworLyoKKyAqIE1hcCB0aGUgaTkxNSBtZW1vcnkgcmVnaW9ucyB0byBUVE0gbWVtb3J5IHR5 cGVzLiBXZSB1c2UgdGhlCisgKiBkcml2ZXItcHJpdmF0ZSB0eXBlcyBmb3Igbm93LCByZXNlcnZp bmcgVFRNX1BMX1ZSQU0gZm9yIHN0b2xlbgorICogbWVtb3J5IGFuZCBUVE1fUExfVFQgZm9yIEdH VFQgdXNlIGlmIGRlY2lkZWQgdG8gaW1wbGVtZW50IHRoaXMuCisgKi8KK3N0YXRpYyBpbnQgaW50 ZWxfcmVnaW9uX3RvX3R0bV90eXBlKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCit7 CisJaW50IHR5cGU7CisKKwlHRU1fQlVHX09OKG1lbS0+dHlwZSAhPSBJTlRFTF9NRU1PUllfTE9D QUwpOworCisJdHlwZSA9IG1lbS0+aW5zdGFuY2UgKyBUVE1fUExfUFJJVjsKKwlHRU1fQlVHX09O KHR5cGUgPj0gVFRNX05VTV9NRU1fVFlQRVMpOworCisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRp YyB2b2lkICppbnRlbF9yZWdpb25fdHRtX25vZGVfcmVzZXJ2ZShzdHJ1Y3QgaW50ZWxfbWVtb3J5 X3JlZ2lvbiAqbWVtLAorCQkJCQkgICByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAorCQkJCQkgICBy ZXNvdXJjZV9zaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdHRtX3Jlc291cmNlX21hbmFnZXIgKm1h biA9IG1lbS0+cmVnaW9uX3ByaXZhdGU7CisJc3RydWN0IHR0bV9wbGFjZSBwbGFjZSA9IHt9Owor CXN0cnVjdCB0dG1fcmVzb3VyY2UgcmVzID0ge307CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0 IG1vY2tfYm8gPSB7fTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBIYXZpbmcgdG8gdXNlIGEgbW9j a19ibyBpcyB1bmZvcnR1bmF0ZSBidXQgc3RlbXMgZnJvbSBzb21lCisJICogZHJpdmVycyBoYXZp bmcgcHJpdmF0ZSBtYW5hZ2VycyB0aGF0IGluc2lzdCB0byBrbm93IHdoYXQgdGhlCisJICogYWxs b2NhdGUgbWVtb3J5IGlzIGludGVuZGVkIGZvciwgdXNpbmcgaXQgdG8gc2VuZCBwcml2YXRlCisJ ICogZGF0YSB0byB0aGUgbWFuYWdlci4gQWxzbyByZWNlbnRseSB0aGUgYm8gaGFzIGJlZW4gdXNl ZCB0byBzZW5kCisJICogYWxpZ25tZW50IGluZm8gdG8gdGhlIG1hbmFnZXIuIEFzc3VtZSB0aGF0 IGFwYXJ0IGZyb20gdGhlIGxhdHRlciwKKwkgKiBub25lIG9mIHRoZSBtYW5hZ2VycyB3ZSB1c2Ug d2lsbCBldmVyIGFjY2VzcyB0aGUgYnVmZmVyIG9iamVjdAorCSAqIG1lbWJlcnMsIGhvcGluZyB3 ZSBjYW4gcGFzcyB0aGUgYWxpZ25tZW50IGluZm8gaW4gdGhlCisJICogc3RydWN0IHR0bV9wbGFj ZSBpbiB0aGUgZnV0dXJlLgorCSAqLworCisJcGxhY2UuZnBmbiA9IG9mZnNldCA+PiBQQUdFX1NI SUZUOworCXBsYWNlLmxwZm4gPSBwbGFjZS5mcGZuICsgKHNpemUgPj4gUEFHRV9TSElGVCk7CisJ cmVzLm51bV9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKKwlyZXQgPSBtYW4tPmZ1bmMtPmFs bG9jKG1hbiwgJm1vY2tfYm8sICZwbGFjZSwgJnJlcyk7CisJaWYgKHJldCA9PSAtRU5PU1BDKQor CQlyZXQgPSAtRU5YSU87CisKKwlyZXR1cm4gcmV0ID8gRVJSX1BUUihyZXQpIDogcmVzLm1tX25v ZGU7Cit9CisKKy8qKgorICogaW50ZWxfcmVnaW9uX3R0bV9ub2RlX2ZyZWUgLSBGcmVlIGEgbm9k ZSBhbGxvY2F0ZWQgZnJvbSBhIHJlc291cmNlIG1hbmFnZXIKKyAqIEBtZW06IFRoZSByZWdpb24g dGhlIG5vZGUgd2FzIGFsbG9jYXRlZCBmcm9tLgorICogQG5vZGU6IFRoZSBvcGFxdWUgbm9kZSBy ZXByZXNlbnRpbmcgYW4gYWxsb2NhdGlvbi4KKyAqLwordm9pZCBpbnRlbF9yZWdpb25fdHRtX25v ZGVfZnJlZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAorCQkJCXZvaWQgKm5vZGUp Cit7CisJc3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICptYW4gPSBtZW0tPnJlZ2lvbl9wcml2 YXRlOworCXN0cnVjdCB0dG1fcmVzb3VyY2UgcmVzID0ge307CisKKwlyZXMubW1fbm9kZSA9IG5v ZGU7CisJbWFuLT5mdW5jLT5mcmVlKG1hbiwgJnJlcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbl9wcml2YXRlX29wcyBwcml2X29wcyA9IHsKKwkucmVzZXJ2 ZSA9IGludGVsX3JlZ2lvbl90dG1fbm9kZV9yZXNlcnZlLAorCS5mcmVlID0gaW50ZWxfcmVnaW9u X3R0bV9ub2RlX2ZyZWUsCit9OworCisvKioKKyAqIGludGVsX3JlZ2lvbl90dG1faW5pdCAtIElu aXRpYWxpemUgYSBtZW1vcnkgcmVnaW9uIGZvciBUVE0uCisgKiBAbWVtOiBUaGUgcmVnaW9uIHRv IGluaXRpYWxpemUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIHN1aXRhYmxl IFRUTSByZXNvdXJjZSBtYW5hZ2VyIGZvciB0aGUKKyAqIHJlZ2lvbiwgYW5kIGlmIGl0J3MgYSBM TUVNIHJlZ2lvbiB0eXBlLCBhdHRhY2hlcyBpdCB0byB0aGUgVFRNCisgKiBkZXZpY2UuIE1PQ0sg cmVnaW9ucyBhcmUgTk9UIGF0dGFjaGVkIHRvIHRoZSBUVE0gZGV2aWNlLCBzaW5jZSB3ZSBkb24n dAorICogaGF2ZSBvbmUgZm9yIHRoZSBtb2NrIHNlbGZ0ZXN0cy4KKyAqCisgKiBSZXR1cm46IDAg b24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitpbnQgaW50 ZWxfcmVnaW9uX3R0bV9pbml0KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0pCit7CisJ c3RydWN0IHR0bV9yZXNvdXJjZV9tYW5hZ2VyICptYW47CisKKwltYW4gPSB0dG1fcmFuZ2VfbWFu X2luaXRfc3RhbmRhbG9uZShyZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lvbikgPj4KKwkJCQkJICAg IFBBR0VfU0hJRlQsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKG1hbikpCisJCXJldHVybiBQVFJfRVJS KG1hbik7CisKKwl0dG1fcmVzb3VyY2VfbWFuYWdlcl9zZXRfdXNlZChtYW4sIHRydWUpOworCW1l bS0+Y2h1bmtfc2l6ZSA9IFBBR0VfU0laRTsKKwltZW0tPm1heF9vcmRlciA9CisJCWdldF9vcmRl cihyb3VuZGRvd25fcG93X29mX3R3byhyZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lvbikpKTsKKwlt ZW0tPmlzX3JhbmdlX21hbmFnZXIgPSB0cnVlOworCW1lbS0+cHJpdl9vcHMgPSAmcHJpdl9vcHM7 CisJbWVtLT5yZWdpb25fcHJpdmF0ZSA9IG1hbjsKKworCS8qCisJICogUmVnaXN0ZXIgb25seSBM T0NBTCBtZW1vcnkgd2l0aCB0aGUgZGV2aWNlIHNvIHRoYXQgd2UgY2FuCisJICogcnVuIHRoZSBt b2NrIHNlbGZ0ZXN0cyB1c2luZyB0aGUgbWFuYWdlci4KKwkgKi8KKwlpZiAobWVtLT50eXBlID09 IElOVEVMX01FTU9SWV9MT0NBTCkgeworCQl0dG1fc2V0X2RyaXZlcl9tYW5hZ2VyKCZtZW0tPmk5 MTUtPmJkZXYsCisJCQkJICAgICAgIGludGVsX3JlZ2lvbl90b190dG1fdHlwZShtZW0pLAorCQkJ CSAgICAgICBtYW4pOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGludGVsX3JlZ2lv bl90dG1fZmluaSAtIEZpbmFsaXplIGEgVFRNIHJlZ2lvbi4KKyAqIEBtZW06IFRoZSBtZW1vcnkg cmVnaW9uCisgKgorICogVGhpcyBmdW5jdGlvbnMgdGFrZXMgZG93biB0aGUgVFRNIHJlc291cmNl IG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogbWVtb3J5IHJlZ2lvbiwgYW5kIGlmIGl0 IHdhcyByZWdpc3RlcmVkIHdpdGggdGhlIFRUTSBkZXZpY2UsCisgKiByZW1vdmVzIHRoYXQgcmVn aXN0cmF0aW9uLgorICovCit2b2lkIGludGVsX3JlZ2lvbl90dG1fZmluaShzdHJ1Y3QgaW50ZWxf bWVtb3J5X3JlZ2lvbiAqbWVtKQoreworCXN0cnVjdCB0dG1fcmVzb3VyY2VfbWFuYWdlciAqbWFu ID0gbWVtLT5yZWdpb25fcHJpdmF0ZTsKKworCWlmIChtZW0tPnR5cGUgPT0gSU5URUxfTUVNT1JZ X0xPQ0FMKSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gdHRtX3JhbmdlX21hbl9maW5pKCZtZW0t Pmk5MTUtPmJkZXYsCisJCQkJCSBpbnRlbF9yZWdpb25fdG9fdHRtX3R5cGUobWVtKSk7CisJCUdF TV9XQVJOX09OKHJldCk7CisJfSBlbHNlIHsKKwkJdHRtX3Jlc291cmNlX21hbmFnZXJfc2V0X3Vz ZWQobWFuLCBmYWxzZSk7CisJCXR0bV9yYW5nZV9tYW5fZmluaV9zdGFuZGFsb25lKG1hbik7CisJ fQorfQorCisvKioKKyAqIGludGVsX3JlZ2lvbl90dG1fbm9kZV90b19zdCAtIENvbnZlcnQgYW4g b3BhcXVlIFRUTSByZXNvdXJjZSBtYW5hZ2VyIG5vZGUKKyAqIHRvIGFuIHNnX3RhYmxlLgorICog QG1lbTogVGhlIG1lbW9yeSByZWdpb24uCisgKiBAbm9kZTogVGhlIHJlc291cmNlIG1hbmFnZXIg bm9kZSBvYnRhaW5lZCBmcm9tIHRoZSBUVE0gcmVzb3VyY2UgbWFuYWdlci4KKyAqCisgKiBUaGUg Z2VtIGJhY2tlbmRzIHR5cGljYWxseSB1c2Ugc2ctdGFibGVzIGZvciBvcGVyYXRpb25zIG9uIHRo ZSB1bmRlcmx5aW5nCisgKiBpb19tZW1vcnkuIFNvIHByb3ZpZGUgYSB3YXkgZm9yIHRoZSBiYWNr ZW5kcyB0byB0cmFuc2xhdGUgdGhlCisgKiBub2RlcyB0aGV5IGFyZSBoYW5kZWQgZnJvbSBUVE0g dG8gc2ctdGFibGVzLgorICoKKyAqIFJldHVybjogQSBtYWxsb2NlZCBzZ190YWJsZSBvbiBzdWNj ZXNzLCBhbiBlcnJvciBwb2ludGVyIG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBzZ190YWJsZSAq aW50ZWxfcmVnaW9uX3R0bV9ub2RlX3RvX3N0KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICpt ZW0sCisJCQkJCSAgICAgdm9pZCAqbm9kZSkKK3sKKwlyZXR1cm4gaTkxNV9zZ19mcm9tX21tX25v ZGUobm9kZSwgbWVtLT5yZWdpb24uc3RhcnQpOworfQorCisvKioKKyAqIGludGVsX3JlZ2lvbl90 dG1fbm9kZV9hbGxvYyAtIEFsbG9jYXRlIG1lbW9yeSByZXNvdXJjZXMgZnJvbSBhIHJlZ2lvbgor ICogQG1lbTogVGhlIG1lbW9yeSByZWdpb24sCisgKiBAc2l6ZTogVGhlIHJlcXVlc3RlZCBzaXpl IGluIGJ5dGVzCisgKiBAZmxhZ3M6IEFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0 aW9uYWxpdHkgaXMgcHJvdmlkZWQgb25seSBmb3IgY2FsbGVycyB0aGF0IG5lZWQgdG8gYWxsb2Nh dGUKKyAqIG1lbW9yeSBmcm9tIHN0YW5kYWxvbmUgVFRNIHJhbmdlIG1hbmFnZXJzLCB3aXRob3V0 IHRoZSBUVE0gZXZpY3Rpb24KKyAqIGZ1bmN0aW9uYWxpdHkuIERvbid0IHVzZSBpZiB5b3UgYXJl IG5vdCBjb21wbGV0ZWx5IHN1cmUgdGhhdCdzIHRoZQorICogY2FzZS4gVGhlIHJldHVybmVkIG9w YXF1ZSBub2RlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYW4gc2dfdGFibGUgdXNpbmcKKyAqIGludGVs X3JlZ2lvbl90dG1fbm9kZV90b19zdCgpLCBhbmQgY2FuIGJlIGZyZWVkIHVzaW5nCisgKiBpbnRl bF9yZWdpb25fdHRtX25vZGVfZnJlZSgpLgorICoKKyAqIFJldHVybjogQSB2YWxpZCBwb2ludGVy IG9uIHN1Y2Nlc3MsIGFuIGVycm9yIHBvaW50ZXIgb24gZmFpbHVyZS4KKyAqLwordm9pZCAqaW50 ZWxfcmVnaW9uX3R0bV9ub2RlX2FsbG9jKHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0s CisJCQkJICByZXNvdXJjZV9zaXplX3Qgc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGludCBmbGFncykK K3sKKwlzdHJ1Y3QgdHRtX3Jlc291cmNlX21hbmFnZXIgKm1hbiA9IG1lbS0+cmVnaW9uX3ByaXZh dGU7CisJc3RydWN0IHR0bV9wbGFjZSBwbGFjZSA9IHt9OworCXN0cnVjdCB0dG1fcmVzb3VyY2Ug cmVzID0ge307CisJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0IG1vY2tfYm8gPSB7fTsKKwlpbnQg cmV0OworCisJLyoKKwkgKiBXZSBpZ25vcmUgdGhlIGZsYWdzIGZvciBub3cgc2luY2Ugd2UncmUg dXNpbmcgdGhlIHJhbmdlCisJICogbWFuYWdlciBhbmQgY29udGlnb3VzIGFuZCBtaW4gcGFnZSBz aXplIHdvdWxkIGJlIGZ1bGZpbGxlZAorCSAqIGJ5IGRlZmF1bHQgaWYgc2l6ZSBpcyBtaW4gcGFn ZSBzaXplIGFsaWduZWQuCisJICovCisJcmVzLm51bV9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElG VDsKKworCWlmIChtZW0tPmlzX3JhbmdlX21hbmFnZXIpIHsKKwkJaWYgKHNpemUgPj0gU1pfMUcp CisJCQltb2NrX2JvLnBhZ2VfYWxpZ25tZW50ID0gU1pfMUcgPj4gUEFHRV9TSElGVDsKKwkJZWxz ZSBpZiAoc2l6ZSA+PSBTWl8yTSkKKwkJCW1vY2tfYm8ucGFnZV9hbGlnbm1lbnQgPSBTWl8yTSA+ PiBQQUdFX1NISUZUOworCQllbHNlIGlmIChzaXplID49IFNaXzY0SykKKwkJCW1vY2tfYm8ucGFn ZV9hbGlnbm1lbnQgPSBTWl82NEsgPj4gUEFHRV9TSElGVDsKKwl9CisKKwlyZXQgPSBtYW4tPmZ1 bmMtPmFsbG9jKG1hbiwgJm1vY2tfYm8sICZwbGFjZSwgJnJlcyk7CisJaWYgKHJldCA9PSAtRU5P U1BDKQorCQlyZXQgPSAtRU5YSU87CisJcmV0dXJuIHJldCA/IEVSUl9QVFIocmV0KSA6IHJlcy5t bV9ub2RlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9u X3R0bS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX3R0bS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDAxMjlmN2UwMzE3Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmVnaW9uX3R0bS5oCkBAIC0wLDAg KzEsMjkgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KKy8qCisgKiBDb3B5 cmlnaHQgwqkgMjAyMSBJbnRlbCBDb3Jwb3JhdGlvbgorICovCisjaWZuZGVmIF9JTlRFTF9SRUdJ T05fVFRNX0hfCisjZGVmaW5lIF9JTlRFTF9SRUdJT05fVFRNX0hfCisKKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgorCitzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZTsKK3N0cnVjdCBpbnRlbF9tZW1v cnlfcmVnaW9uOworCitpbnQgaW50ZWxfcmVnaW9uX3R0bV9kZXZpY2VfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCit2b2lkIGludGVsX3JlZ2lvbl90dG1fZGV2aWNl X2Zpbmkoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKKworaW50IGludGVsX3Jl Z2lvbl90dG1faW5pdChzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtKTsKKwordm9pZCBp bnRlbF9yZWdpb25fdHRtX2Zpbmkoc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSk7CisK K3N0cnVjdCBzZ190YWJsZSAqaW50ZWxfcmVnaW9uX3R0bV9ub2RlX3RvX3N0KHN0cnVjdCBpbnRl bF9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkJCSAgICAgdm9pZCAqbm9kZSk7CisKK3ZvaWQgKmlu dGVsX3JlZ2lvbl90dG1fbm9kZV9hbGxvYyhzdHJ1Y3QgaW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVt LAorCQkJCSAgcmVzb3VyY2Vfc2l6ZV90IHNpemUsCisJCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3Mp Owordm9pZCBpbnRlbF9yZWdpb25fdHRtX25vZGVfZnJlZShzdHJ1Y3QgaW50ZWxfbWVtb3J5X3Jl Z2lvbiAqbWVtLAorCQkJCXZvaWQgKm5vZGUpOworI2VuZGlmIC8qIF9JTlRFTF9SRUdJT05fVFRN X0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9i dWRkeS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfYnVkZHkuYwpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBmNWM0ZGY4ZGJjLi4wMDAwMDAwMDAwMDAKLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfYnVkZHkuYworKysgL2Rldi9u dWxsCkBAIC0xLDc4OSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUCi0v KgotICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KLSAqLwotCi0jaW5jbHVk ZSA8bGludXgvcHJpbWVfbnVtYmVycy5oPgotCi0jaW5jbHVkZSAiLi4vaTkxNV9zZWxmdGVzdC5o IgotI2luY2x1ZGUgImk5MTVfcmFuZG9tLmgiCi0KLXN0YXRpYyB2b2lkIF9faWd0X2R1bXBfYmxv Y2soc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1tLAotCQkJICAgICBzdHJ1Y3QgaTkxNV9idWRkeV9i bG9jayAqYmxvY2ssCi0JCQkgICAgIGJvb2wgYnVkZHkpCi17Ci0JcHJfZXJyKCJibG9jayBpbmZv OiBoZWFkZXI9JWxseCwgc3RhdGU9JXUsIG9yZGVyPSVkLCBvZmZzZXQ9JWxseCBzaXplPSVsbHgg cm9vdD0lcyBidWRkeT0lc1xuIiwKLQkgICAgICAgYmxvY2stPmhlYWRlciwKLQkgICAgICAgaTkx NV9idWRkeV9ibG9ja19zdGF0ZShibG9jayksCi0JICAgICAgIGk5MTVfYnVkZHlfYmxvY2tfb3Jk ZXIoYmxvY2spLAotCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChibG9jayksCi0JICAg ICAgIGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgYmxvY2spLAotCSAgICAgICB5ZXNubyghYmxv Y2stPnBhcmVudCksCi0JICAgICAgIHllc25vKGJ1ZGR5KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGln dF9kdW1wX2Jsb2NrKHN0cnVjdCBpOTE1X2J1ZGR5X21tICptbSwKLQkJCSAgIHN0cnVjdCBpOTE1 X2J1ZGR5X2Jsb2NrICpibG9jaykKLXsKLQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYnVkZHk7 Ci0KLQlfX2lndF9kdW1wX2Jsb2NrKG1tLCBibG9jaywgZmFsc2UpOwotCi0JYnVkZHkgPSBnZXRf YnVkZHkoYmxvY2spOwotCWlmIChidWRkeSkKLQkJX19pZ3RfZHVtcF9ibG9jayhtbSwgYnVkZHks IHRydWUpOwotfQotCi1zdGF0aWMgaW50IGlndF9jaGVja19ibG9jayhzdHJ1Y3QgaTkxNV9idWRk eV9tbSAqbW0sCi0JCQkgICBzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2spCi17Ci0Jc3Ry dWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJ1ZGR5OwotCXVuc2lnbmVkIGludCBibG9ja19zdGF0ZTsK LQl1NjQgYmxvY2tfc2l6ZTsKLQl1NjQgb2Zmc2V0OwotCWludCBlcnIgPSAwOwotCi0JYmxvY2tf c3RhdGUgPSBpOTE1X2J1ZGR5X2Jsb2NrX3N0YXRlKGJsb2NrKTsKLQotCWlmIChibG9ja19zdGF0 ZSAhPSBJOTE1X0JVRERZX0FMTE9DQVRFRCAmJgotCSAgICBibG9ja19zdGF0ZSAhPSBJOTE1X0JV RERZX0ZSRUUgJiYKLQkgICAgYmxvY2tfc3RhdGUgIT0gSTkxNV9CVUREWV9TUExJVCkgewotCQlw cl9lcnIoImJsb2NrIHN0YXRlIG1pc21hdGNoXG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0K LQlibG9ja19zaXplID0gaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCBibG9jayk7Ci0Jb2Zmc2V0 ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spOwotCi0JaWYgKGJsb2NrX3NpemUgPCBt bS0+Y2h1bmtfc2l6ZSkgewotCQlwcl9lcnIoImJsb2NrIHNpemUgc21hbGxlciB0aGFuIG1pbiBz aXplXG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIWlzX3Bvd2VyX29mXzIoYmxv Y2tfc2l6ZSkpIHsKLQkJcHJfZXJyKCJibG9jayBzaXplIG5vdCBwb3dlciBvZiB0d29cbiIpOwot CQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmICghSVNfQUxJR05FRChibG9ja19zaXplLCBtbS0+ Y2h1bmtfc2l6ZSkpIHsKLQkJcHJfZXJyKCJibG9jayBzaXplIG5vdCBhbGlnbmVkIHRvIG1pbiBz aXplXG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIUlTX0FMSUdORUQob2Zmc2V0 LCBtbS0+Y2h1bmtfc2l6ZSkpIHsKLQkJcHJfZXJyKCJibG9jayBvZmZzZXQgbm90IGFsaWduZWQg dG8gbWluIHNpemVcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmICghSVNfQUxJR05F RChvZmZzZXQsIGJsb2NrX3NpemUpKSB7Ci0JCXByX2VycigiYmxvY2sgb2Zmc2V0IG5vdCBhbGln bmVkIHRvIGJsb2NrIHNpemVcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWJ1ZGR5ID0g Z2V0X2J1ZGR5KGJsb2NrKTsKLQotCWlmICghYnVkZHkgJiYgYmxvY2stPnBhcmVudCkgewotCQlw cl9lcnIoImJ1ZGR5IGhhcyBnb25lIGZpc2hpbmdcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCX0K LQotCWlmIChidWRkeSkgewotCQlpZiAoaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYnVkZHkpICE9 IChvZmZzZXQgXiBibG9ja19zaXplKSkgewotCQkJcHJfZXJyKCJidWRkeSBoYXMgd3Jvbmcgb2Zm c2V0XG4iKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoaTkxNV9idWRkeV9ibG9j a19zaXplKG1tLCBidWRkeSkgIT0gYmxvY2tfc2l6ZSkgewotCQkJcHJfZXJyKCJidWRkeSBzaXpl IG1pc21hdGNoXG4iKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoaTkxNV9idWRk eV9ibG9ja19zdGF0ZShidWRkeSkgPT0gYmxvY2tfc3RhdGUgJiYKLQkJICAgIGJsb2NrX3N0YXRl ID09IEk5MTVfQlVERFlfRlJFRSkgewotCQkJcHJfZXJyKCJibG9jayBhbmQgaXRzIGJ1ZGR5IGFy ZSBmcmVlXG4iKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZXJyOwot fQotCi1zdGF0aWMgaW50IGlndF9jaGVja19ibG9ja3Moc3RydWN0IGk5MTVfYnVkZHlfbW0gKm1t LAotCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJsb2NrcywKLQkJCSAgICB1NjQgZXhwZWN0ZWRf c2l6ZSwKLQkJCSAgICBib29sIGlzX2NvbnRpZ3VvdXMpCi17Ci0Jc3RydWN0IGk5MTVfYnVkZHlf YmxvY2sgKmJsb2NrOwotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpwcmV2OwotCXU2NCB0b3Rh bDsKLQlpbnQgZXJyID0gMDsKLQotCWJsb2NrID0gTlVMTDsKLQlwcmV2ID0gTlVMTDsKLQl0b3Rh bCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJsb2NrLCBibG9ja3MsIGxpbmspIHsKLQkJ ZXJyID0gaWd0X2NoZWNrX2Jsb2NrKG1tLCBibG9jayk7Ci0KLQkJaWYgKCFpOTE1X2J1ZGR5X2Js b2NrX2lzX2FsbG9jYXRlZChibG9jaykpIHsKLQkJCXByX2VycigiYmxvY2sgbm90IGFsbG9jYXRl ZFxuIiksCi0JCQllcnIgPSAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGlzX2NvbnRpZ3VvdXMgJiYg cHJldikgewotCQkJdTY0IHByZXZfYmxvY2tfc2l6ZTsKLQkJCXU2NCBwcmV2X29mZnNldDsKLQkJ CXU2NCBvZmZzZXQ7Ci0KLQkJCXByZXZfb2Zmc2V0ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQo cHJldik7Ci0JCQlwcmV2X2Jsb2NrX3NpemUgPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUobW0sIHBy ZXYpOwotCQkJb2Zmc2V0ID0gaTkxNV9idWRkeV9ibG9ja19vZmZzZXQoYmxvY2spOwotCi0JCQlp ZiAob2Zmc2V0ICE9IChwcmV2X29mZnNldCArIHByZXZfYmxvY2tfc2l6ZSkpIHsKLQkJCQlwcl9l cnIoImJsb2NrIG9mZnNldCBtaXNtYXRjaFxuIik7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCX0K LQkJfQotCi0JCWlmIChlcnIpCi0JCQlicmVhazsKLQotCQl0b3RhbCArPSBpOTE1X2J1ZGR5X2Js b2NrX3NpemUobW0sIGJsb2NrKTsKLQkJcHJldiA9IGJsb2NrOwotCX0KLQotCWlmICghZXJyKSB7 Ci0JCWlmICh0b3RhbCAhPSBleHBlY3RlZF9zaXplKSB7Ci0JCQlwcl9lcnIoInNpemUgbWlzbWF0 Y2gsIGV4cGVjdGVkPSVsbHgsIGZvdW5kPSVsbHhcbiIsCi0JCQkgICAgICAgZXhwZWN0ZWRfc2l6 ZSwgdG90YWwpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gZXJyOwotCX0KLQot CWlmIChwcmV2KSB7Ci0JCXByX2VycigicHJldiBibG9jaywgZHVtcDpcbiIpOwotCQlpZ3RfZHVt cF9ibG9jayhtbSwgcHJldik7Ci0JfQotCi0JaWYgKGJsb2NrKSB7Ci0JCXByX2VycigiYmFkIGJs b2NrLCBkdW1wOlxuIik7Ci0JCWlndF9kdW1wX2Jsb2NrKG1tLCBibG9jayk7Ci0JfQotCi0JcmV0 dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBpZ3RfY2hlY2tfbW0oc3RydWN0IGk5MTVfYnVkZHlf bW0gKm1tKQotewotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpyb290OwotCXN0cnVjdCBpOTE1 X2J1ZGR5X2Jsb2NrICpwcmV2OwotCXVuc2lnbmVkIGludCBpOwotCXU2NCB0b3RhbDsKLQlpbnQg ZXJyID0gMDsKLQotCWlmICghbW0tPm5fcm9vdHMpIHsKLQkJcHJfZXJyKCJuX3Jvb3RzIGlzIHpl cm9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAobW0tPm5fcm9vdHMgIT0gaHdl aWdodDY0KG1tLT5zaXplKSkgewotCQlwcl9lcnIoIm5fcm9vdHMgbWlzbWF0Y2gsIG5fcm9vdHM9 JXUsIGV4cGVjdGVkPSVsdVxuIiwKLQkJICAgICAgIG1tLT5uX3Jvb3RzLCBod2VpZ2h0NjQobW0t PnNpemUpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jcm9vdCA9IE5VTEw7Ci0JcHJldiA9 IE5VTEw7Ci0JdG90YWwgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IG1tLT5uX3Jvb3RzOyArK2kp IHsKLQkJc3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOwotCQl1bnNpZ25lZCBpbnQgb3Jk ZXI7Ci0KLQkJcm9vdCA9IG1tLT5yb290c1tpXTsKLQkJaWYgKCFyb290KSB7Ci0JCQlwcl9lcnIo InJvb3QoJXUpIGlzIE5VTExcbiIsIGkpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwot CQl9Ci0KLQkJZXJyID0gaWd0X2NoZWNrX2Jsb2NrKG1tLCByb290KTsKLQotCQlpZiAoIWk5MTVf YnVkZHlfYmxvY2tfaXNfZnJlZShyb290KSkgewotCQkJcHJfZXJyKCJyb290IG5vdCBmcmVlXG4i KTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCX0KLQotCQlvcmRlciA9IGk5MTVfYnVkZHlfYmxvY2tf b3JkZXIocm9vdCk7Ci0KLQkJaWYgKCFpKSB7Ci0JCQlpZiAob3JkZXIgIT0gbW0tPm1heF9vcmRl cikgewotCQkJCXByX2VycigibWF4IG9yZGVyIHJvb3QgbWlzc2luZ1xuIik7Ci0JCQkJZXJyID0g LUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCWlmIChwcmV2KSB7Ci0JCQl1NjQgcHJldl9ibG9ja19z aXplOwotCQkJdTY0IHByZXZfb2Zmc2V0OwotCQkJdTY0IG9mZnNldDsKLQotCQkJcHJldl9vZmZz ZXQgPSBpOTE1X2J1ZGR5X2Jsb2NrX29mZnNldChwcmV2KTsKLQkJCXByZXZfYmxvY2tfc2l6ZSA9 IGk5MTVfYnVkZHlfYmxvY2tfc2l6ZShtbSwgcHJldik7Ci0JCQlvZmZzZXQgPSBpOTE1X2J1ZGR5 X2Jsb2NrX29mZnNldChyb290KTsKLQotCQkJaWYgKG9mZnNldCAhPSAocHJldl9vZmZzZXQgKyBw cmV2X2Jsb2NrX3NpemUpKSB7Ci0JCQkJcHJfZXJyKCJyb290IG9mZnNldCBtaXNtYXRjaFxuIik7 Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCX0KLQkJfQotCi0JCWJsb2NrID0gbGlzdF9maXJzdF9l bnRyeV9vcl9udWxsKCZtbS0+ZnJlZV9saXN0W29yZGVyXSwKLQkJCQkJCSBzdHJ1Y3QgaTkxNV9i dWRkeV9ibG9jaywKLQkJCQkJCSBsaW5rKTsKLQkJaWYgKGJsb2NrICE9IHJvb3QpIHsKLQkJCXBy X2Vycigicm9vdCBtaXNtYXRjaCBhdCBvcmRlcj0ldVxuIiwgb3JkZXIpOwotCQkJZXJyID0gLUVJ TlZBTDsKLQkJfQotCi0JCWlmIChlcnIpCi0JCQlicmVhazsKLQotCQlwcmV2ID0gcm9vdDsKLQkJ dG90YWwgKz0gaTkxNV9idWRkeV9ibG9ja19zaXplKG1tLCByb290KTsKLQl9Ci0KLQlpZiAoIWVy cikgewotCQlpZiAodG90YWwgIT0gbW0tPnNpemUpIHsKLQkJCXByX2VycigiZXhwZWN0ZWQgbW0g c2l6ZT0lbGx4LCBmb3VuZD0lbGx4XG4iLCBtbS0+c2l6ZSwKLQkJCSAgICAgICB0b3RhbCk7Ci0J CQllcnIgPSAtRUlOVkFMOwotCQl9Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JaWYgKHByZXYpIHsK LQkJcHJfZXJyKCJwcmV2IHJvb3QoJXUpLCBkdW1wOlxuIiwgaSAtIDEpOwotCQlpZ3RfZHVtcF9i bG9jayhtbSwgcHJldik7Ci0JfQotCi0JaWYgKHJvb3QpIHsKLQkJcHJfZXJyKCJiYWQgcm9vdCgl dSksIGR1bXA6XG4iLCBpKTsKLQkJaWd0X2R1bXBfYmxvY2sobW0sIHJvb3QpOwotCX0KLQotCXJl dHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIGlndF9tbV9jb25maWcodTY0ICpzaXplLCB1NjQg KmNodW5rX3NpemUpCi17Ci0JSTkxNV9STkRfU1RBVEUocHJuZyk7Ci0JdTMyIHMsIG1zOwotCi0J LyogTm90aGluZyBmYW5jeSwganVzdCB0cnkgdG8gZ2V0IGFuIGludGVyZXN0aW5nIGJpdCBwYXR0 ZXJuICovCi0KLQlwcmFuZG9tX3NlZWRfc3RhdGUoJnBybmcsIGk5MTVfc2VsZnRlc3QucmFuZG9t X3NlZWQpOwotCi0JLyogTGV0IHNpemUgYmUgYSByYW5kb20gbnVtYmVyIG9mIHBhZ2VzIHVwIHRv IDggR0IgKDJNIHBhZ2VzKSAqLwotCXMgPSAxICsgaTkxNV9wcmFuZG9tX3UzMl9tYXhfc3RhdGUo KEJJVCgzMyAtIDEyKSkgLSAxLCAmcHJuZyk7Ci0JLyogTGV0IHRoZSBjaHVuayBzaXplIGJlIGEg cmFuZG9tIHBvd2VyIG9mIDIgbGVzcyB0aGFuIHNpemUgKi8KLQltcyA9IEJJVChpOTE1X3ByYW5k b21fdTMyX21heF9zdGF0ZShpbG9nMihzKSwgJnBybmcpKTsKLQkvKiBSb3VuZCBzaXplIGRvd24g dG8gdGhlIGNodW5rIHNpemUgKi8KLQlzICY9IC1tczsKLQotCS8qIENvbnZlcnQgZnJvbSBwYWdl cyB0byBieXRlcyAqLwotCSpjaHVua19zaXplID0gKHU2NCltcyA8PCAxMjsKLQkqc2l6ZSA9ICh1 NjQpcyA8PCAxMjsKLX0KLQotc3RhdGljIGludCBpZ3RfYnVkZHlfYWxsb2Nfc21va2Uodm9pZCAq YXJnKQotewotCXN0cnVjdCBpOTE1X2J1ZGR5X21tIG1tOwotCUlHVF9USU1FT1VUKGVuZF90aW1l KTsKLQlJOTE1X1JORF9TVEFURShwcm5nKTsKLQl1NjQgY2h1bmtfc2l6ZTsKLQl1NjQgbW1fc2l6 ZTsKLQlpbnQgKm9yZGVyOwotCWludCBlcnIsIGk7Ci0KLQlpZ3RfbW1fY29uZmlnKCZtbV9zaXpl LCAmY2h1bmtfc2l6ZSk7Ci0KLQlwcl9pbmZvKCJidWRkeV9pbml0IHdpdGggc2l6ZT0lbGx4LCBj aHVua19zaXplPSVsbHhcbiIsIG1tX3NpemUsIGNodW5rX3NpemUpOwotCi0JZXJyID0gaTkxNV9i dWRkeV9pbml0KCZtbSwgbW1fc2l6ZSwgY2h1bmtfc2l6ZSk7Ci0JaWYgKGVycikgewotCQlwcl9l cnIoImJ1ZGR5X2luaXQgZmFpbGVkKCVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0K LQlvcmRlciA9IGk5MTVfcmFuZG9tX29yZGVyKG1tLm1heF9vcmRlciArIDEsICZwcm5nKTsKLQlp ZiAoIW9yZGVyKQotCQlnb3RvIG91dF9maW5pOwotCi0JZm9yIChpID0gMDsgaSA8PSBtbS5tYXhf b3JkZXI7ICsraSkgewotCQlzdHJ1Y3QgaTkxNV9idWRkeV9ibG9jayAqYmxvY2s7Ci0JCWludCBt YXhfb3JkZXIgPSBvcmRlcltpXTsKLQkJYm9vbCB0aW1lb3V0ID0gZmFsc2U7Ci0JCUxJU1RfSEVB RChibG9ja3MpOwotCQlpbnQgb3JkZXI7Ci0JCXU2NCB0b3RhbDsKLQotCQllcnIgPSBpZ3RfY2hl Y2tfbW0oJm1tKTsKLQkJaWYgKGVycikgewotCQkJcHJfZXJyKCJwcmUtbW0gY2hlY2sgZmFpbGVk LCBhYm9ydFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCXByX2luZm8oImZpbGxpbmcgZnJvbSBt YXhfb3JkZXI9JXVcbiIsIG1heF9vcmRlcik7Ci0KLQkJb3JkZXIgPSBtYXhfb3JkZXI7Ci0JCXRv dGFsID0gMDsKLQotCQlkbyB7Ci1yZXRyeToKLQkJCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygm bW0sIG9yZGVyKTsKLQkJCWlmIChJU19FUlIoYmxvY2spKSB7Ci0JCQkJZXJyID0gUFRSX0VSUihi bG9jayk7Ci0JCQkJaWYgKGVyciA9PSAtRU5PTUVNKSB7Ci0JCQkJCXByX2luZm8oImJ1ZGR5X2Fs bG9jIGhpdCAtRU5PTUVNIHdpdGggb3JkZXI9JWRcbiIsCi0JCQkJCQlvcmRlcik7Ci0JCQkJfSBl bHNlIHsKLQkJCQkJaWYgKG9yZGVyLS0pIHsKLQkJCQkJCWVyciA9IDA7Ci0JCQkJCQlnb3RvIHJl dHJ5OwotCQkJCQl9Ci0KLQkJCQkJcHJfZXJyKCJidWRkeV9hbGxvYyB3aXRoIG9yZGVyPSVkIGZh aWxlZCglZClcbiIsCi0JCQkJCSAgICAgICBvcmRlciwgZXJyKTsKLQkJCQl9Ci0KLQkJCQlicmVh azsKLQkJCX0KLQotCQkJbGlzdF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZibG9ja3MpOwotCi0J CQlpZiAoaTkxNV9idWRkeV9ibG9ja19vcmRlcihibG9jaykgIT0gb3JkZXIpIHsKLQkJCQlwcl9l cnIoImJ1ZGR5X2FsbG9jIG9yZGVyIG1pc21hdGNoXG4iKTsKLQkJCQllcnIgPSAtRUlOVkFMOwot CQkJCWJyZWFrOwotCQkJfQotCi0JCQl0b3RhbCArPSBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUoJm1t LCBibG9jayk7Ci0KLQkJCWlmIChfX2lndF90aW1lb3V0KGVuZF90aW1lLCBOVUxMKSkgewotCQkJ CXRpbWVvdXQgPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IHdoaWxlICh0b3RhbCA8IG1t LnNpemUpOwotCi0JCWlmICghZXJyKQotCQkJZXJyID0gaWd0X2NoZWNrX2Jsb2NrcygmbW0sICZi bG9ja3MsIHRvdGFsLCBmYWxzZSk7Ci0KLQkJaTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmYmxv Y2tzKTsKLQotCQlpZiAoIWVycikgewotCQkJZXJyID0gaWd0X2NoZWNrX21tKCZtbSk7Ci0JCQlp ZiAoZXJyKQotCQkJCXByX2VycigicG9zdC1tbSBjaGVjayBmYWlsZWRcbiIpOwotCQl9Ci0KLQkJ aWYgKGVyciB8fCB0aW1lb3V0KQotCQkJYnJlYWs7Ci0KLQkJY29uZF9yZXNjaGVkKCk7Ci0JfQot Ci0JaWYgKGVyciA9PSAtRU5PTUVNKQotCQllcnIgPSAwOwotCi0Ja2ZyZWUob3JkZXIpOwotb3V0 X2Zpbmk6Ci0JaTkxNV9idWRkeV9maW5pKCZtbSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0 aWMgaW50IGlndF9idWRkeV9hbGxvY19wZXNzaW1pc3RpYyh2b2lkICphcmcpCi17Ci0JY29uc3Qg dW5zaWduZWQgaW50IG1heF9vcmRlciA9IDE2OwotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpi bG9jaywgKmJuOwotCXN0cnVjdCBpOTE1X2J1ZGR5X21tIG1tOwotCXVuc2lnbmVkIGludCBvcmRl cjsKLQlMSVNUX0hFQUQoYmxvY2tzKTsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBDcmVhdGUgYSBw b3Qtc2l6ZWQgbW0sIHRoZW4gYWxsb2NhdGUgb25lIG9mIGVhY2ggcG9zc2libGUKLQkgKiBvcmRl ciB3aXRoaW4uIFRoaXMgc2hvdWxkIGxlYXZlIHRoZSBtbSB3aXRoIGV4YWN0bHkgb25lCi0JICog cGFnZSBsZWZ0LgotCSAqLwotCi0JZXJyID0gaTkxNV9idWRkeV9pbml0KCZtbSwgUEFHRV9TSVpF IDw8IG1heF9vcmRlciwgUEFHRV9TSVpFKTsKLQlpZiAoZXJyKSB7Ci0JCXByX2VycigiYnVkZHlf aW5pdCBmYWlsZWQoJWQpXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQlHRU1fQlVHX09O KG1tLm1heF9vcmRlciAhPSBtYXhfb3JkZXIpOwotCi0JZm9yIChvcmRlciA9IDA7IG9yZGVyIDwg bWF4X29yZGVyOyBvcmRlcisrKSB7Ci0JCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9y ZGVyKTsKLQkJaWYgKElTX0VSUihibG9jaykpIHsKLQkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIGhp dCAtRU5PTUVNIHdpdGggb3JkZXI9JWRcbiIsCi0JCQkJb3JkZXIpOwotCQkJZXJyID0gUFRSX0VS UihibG9jayk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5s aW5rLCAmYmxvY2tzKTsKLQl9Ci0KLQkvKiBBbmQgbm93IHRoZSBsYXN0IHJlbWFpbmluZyBibG9j ayBhdmFpbGFibGUgKi8KLQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCAwKTsKLQlpZiAo SVNfRVJSKGJsb2NrKSkgewotCQlwcl9pbmZvKCJidWRkeV9hbGxvYyBoaXQgLUVOT01FTSBvbiBm aW5hbCBhbGxvY1xuIik7Ci0JCWVyciA9IFBUUl9FUlIoYmxvY2spOwotCQlnb3RvIGVycjsKLQl9 Ci0JbGlzdF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZibG9ja3MpOwotCi0JLyogU2hvdWxkIGJl IGNvbXBsZXRlbHkgZnVsbCEgKi8KLQlmb3IgKG9yZGVyID0gbWF4X29yZGVyOyBvcmRlci0tOyAp IHsKLQkJYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOwotCQlpZiAoIUlTX0VS UihibG9jaykpIHsKLQkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIHVuZXhwZWN0ZWRseSBzdWNjZWVk ZWQgYXQgb3JkZXIgJWQsIGl0IHNob3VsZCBiZSBmdWxsISIsCi0JCQkJb3JkZXIpOwotCQkJbGlz dF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZibG9ja3MpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJ CWdvdG8gZXJyOwotCQl9Ci0JfQotCi0JYmxvY2sgPSBsaXN0X2xhc3RfZW50cnkoJmJsb2Nrcywg dHlwZW9mKCpibG9jayksIGxpbmspOwotCWxpc3RfZGVsKCZibG9jay0+bGluayk7Ci0JaTkxNV9i dWRkeV9mcmVlKCZtbSwgYmxvY2spOwotCi0JLyogQXMgd2UgZnJlZSBpbiBpbmNyZWFzaW5nIHNp emUsIHdlIG1ha2UgYXZhaWxhYmxlIGxhcmdlciBibG9ja3MgKi8KLQlvcmRlciA9IDE7Ci0JbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJsb2NrLCBibiwgJmJsb2NrcywgbGluaykgewotCQlsaXN0 X2RlbCgmYmxvY2stPmxpbmspOwotCQlpOTE1X2J1ZGR5X2ZyZWUoJm1tLCBibG9jayk7Ci0KLQkJ YmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgb3JkZXIpOwotCQlpZiAoSVNfRVJSKGJsb2Nr KSkgewotCQkJcHJfaW5mbygiYnVkZHlfYWxsb2MgKHJlYWxsb2MpIGhpdCAtRU5PTUVNIHdpdGgg b3JkZXI9JWRcbiIsCi0JCQkJb3JkZXIpOwotCQkJZXJyID0gUFRSX0VSUihibG9jayk7Ci0JCQln b3RvIGVycjsKLQkJfQotCQlpOTE1X2J1ZGR5X2ZyZWUoJm1tLCBibG9jayk7Ci0JCW9yZGVyKys7 Ci0JfQotCi0JLyogVG8gY29uZmlybSwgbm93IHRoZSB3aG9sZSBtbSBzaG91bGQgYmUgYXZhaWxh YmxlICovCi0JYmxvY2sgPSBpOTE1X2J1ZGR5X2FsbG9jKCZtbSwgbWF4X29yZGVyKTsKLQlpZiAo SVNfRVJSKGJsb2NrKSkgewotCQlwcl9pbmZvKCJidWRkeV9hbGxvYyAocmVhbGxvYykgaGl0IC1F Tk9NRU0gd2l0aCBvcmRlcj0lZFxuIiwKLQkJCW1heF9vcmRlcik7Ci0JCWVyciA9IFBUUl9FUlIo YmxvY2spOwotCQlnb3RvIGVycjsKLQl9Ci0JaTkxNV9idWRkeV9mcmVlKCZtbSwgYmxvY2spOwot Ci1lcnI6Ci0JaTkxNV9idWRkeV9mcmVlX2xpc3QoJm1tLCAmYmxvY2tzKTsKLQlpOTE1X2J1ZGR5 X2ZpbmkoJm1tKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGlndF9idWRkeV9hbGxv Y19vcHRpbWlzdGljKHZvaWQgKmFyZykKLXsKLQljb25zdCBpbnQgbWF4X29yZGVyID0gMTY7Ci0J c3RydWN0IGk5MTVfYnVkZHlfYmxvY2sgKmJsb2NrOwotCXN0cnVjdCBpOTE1X2J1ZGR5X21tIG1t OwotCUxJU1RfSEVBRChibG9ja3MpOwotCWludCBvcmRlcjsKLQlpbnQgZXJyOwotCi0JLyoKLQkg KiBDcmVhdGUgYSBtbSB3aXRoIG9uZSBibG9jayBvZiBlYWNoIG9yZGVyIGF2YWlsYWJsZSwgYW5k Ci0JICogdHJ5IHRvIGFsbG9jYXRlIHRoZW0gYWxsLgotCSAqLwotCi0JZXJyID0gaTkxNV9idWRk eV9pbml0KCZtbSwKLQkJCSAgICAgIFBBR0VfU0laRSAqICgoMSA8PCAobWF4X29yZGVyICsgMSkp IC0gMSksCi0JCQkgICAgICBQQUdFX1NJWkUpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCJidWRk eV9pbml0IGZhaWxlZCglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCUdFTV9CVUdf T04obW0ubWF4X29yZGVyICE9IG1heF9vcmRlcik7Ci0KLQlmb3IgKG9yZGVyID0gMDsgb3JkZXIg PD0gbWF4X29yZGVyOyBvcmRlcisrKSB7Ci0JCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0s IG9yZGVyKTsKLQkJaWYgKElTX0VSUihibG9jaykpIHsKLQkJCXByX2luZm8oImJ1ZGR5X2FsbG9j IGhpdCAtRU5PTUVNIHdpdGggb3JkZXI9JWRcbiIsCi0JCQkJb3JkZXIpOwotCQkJZXJyID0gUFRS X0VSUihibG9jayk7Ci0JCQlnb3RvIGVycjsKLQkJfQotCi0JCWxpc3RfYWRkX3RhaWwoJmJsb2Nr LT5saW5rLCAmYmxvY2tzKTsKLQl9Ci0KLQkvKiBTaG91bGQgYmUgY29tcGxldGVseSBmdWxsISAq LwotCWJsb2NrID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIDApOwotCWlmICghSVNfRVJSKGJsb2Nr KSkgewotCQlwcl9pbmZvKCJidWRkeV9hbGxvYyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkLCBpdCBz aG91bGQgYmUgZnVsbCEiKTsKLQkJbGlzdF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZibG9ja3Mp OwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLWVycjoKLQlpOTE1X2J1ZGR5 X2ZyZWVfbGlzdCgmbW0sICZibG9ja3MpOwotCWk5MTVfYnVkZHlfZmluaSgmbW0pOwotCXJldHVy biBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaWd0X2J1ZGR5X2FsbG9jX3BhdGhvbG9naWNhbCh2b2lk ICphcmcpCi17Ci0JY29uc3QgaW50IG1heF9vcmRlciA9IDE2OwotCXN0cnVjdCBpOTE1X2J1ZGR5 X2Jsb2NrICpibG9jazsKLQlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKLQlMSVNUX0hFQUQoYmxv Y2tzKTsKLQlMSVNUX0hFQUQoaG9sZXMpOwotCWludCBvcmRlciwgdG9wOwotCWludCBlcnI7Ci0K LQkvKgotCSAqIENyZWF0ZSBhIHBvdC1zaXplZCBtbSwgdGhlbiBhbGxvY2F0ZSBvbmUgb2YgZWFj aCBwb3NzaWJsZQotCSAqIG9yZGVyIHdpdGhpbi4gVGhpcyBzaG91bGQgbGVhdmUgdGhlIG1tIHdp dGggZXhhY3RseSBvbmUKLQkgKiBwYWdlIGxlZnQuIEZyZWUgdGhlIGxhcmdlc3QgYmxvY2ssIHRo ZW4gd2hpdHRsZSBkb3duIGFnYWluLgotCSAqIEV2ZW50dWFsbHkgd2Ugd2lsbCBoYXZlIGEgZnVs bHkgNTAlIGZyYWdtZW50ZWQgbW0uCi0JICovCi0KLQllcnIgPSBpOTE1X2J1ZGR5X2luaXQoJm1t LCBQQUdFX1NJWkUgPDwgbWF4X29yZGVyLCBQQUdFX1NJWkUpOwotCWlmIChlcnIpIHsKLQkJcHJf ZXJyKCJidWRkeV9pbml0IGZhaWxlZCglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQot CUdFTV9CVUdfT04obW0ubWF4X29yZGVyICE9IG1heF9vcmRlcik7Ci0KLQlmb3IgKHRvcCA9IG1h eF9vcmRlcjsgdG9wOyB0b3AtLSkgewotCQkvKiBNYWtlIHJvb20gYnkgZnJlZWluZyB0aGUgbGFy Z2VzdCBhbGxvY2F0ZWQgYmxvY2sgKi8KLQkJYmxvY2sgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251 bGwoJmJsb2NrcywgdHlwZW9mKCpibG9jayksIGxpbmspOwotCQlpZiAoYmxvY2spIHsKLQkJCWxp c3RfZGVsKCZibG9jay0+bGluayk7Ci0JCQlpOTE1X2J1ZGR5X2ZyZWUoJm1tLCBibG9jayk7Ci0J CX0KLQotCQlmb3IgKG9yZGVyID0gdG9wOyBvcmRlci0tOyApIHsKLQkJCWJsb2NrID0gaTkxNV9i dWRkeV9hbGxvYygmbW0sIG9yZGVyKTsKLQkJCWlmIChJU19FUlIoYmxvY2spKSB7Ci0JCQkJcHJf aW5mbygiYnVkZHlfYWxsb2MgaGl0IC1FTk9NRU0gd2l0aCBvcmRlcj0lZCwgdG9wPSVkXG4iLAot CQkJCQlvcmRlciwgdG9wKTsKLQkJCQllcnIgPSBQVFJfRVJSKGJsb2NrKTsKLQkJCQlnb3RvIGVy cjsKLQkJCX0KLQkJCWxpc3RfYWRkX3RhaWwoJmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKLQkJfQot Ci0JCS8qIFRoZXJlIHNob3VsZCBiZSBvbmUgZmluYWwgcGFnZSBmb3IgdGhpcyBzdWItYWxsb2Nh dGlvbiAqLwotCQlibG9jayA9IGk5MTVfYnVkZHlfYWxsb2MoJm1tLCAwKTsKLQkJaWYgKElTX0VS UihibG9jaykpIHsKLQkJCXByX2luZm8oImJ1ZGR5X2FsbG9jIGhpdCAtRU5PTUVNIGZvciBob2xl XG4iKTsKLQkJCWVyciA9IFBUUl9FUlIoYmxvY2spOwotCQkJZ290byBlcnI7Ci0JCX0KLQkJbGlz dF9hZGRfdGFpbCgmYmxvY2stPmxpbmssICZob2xlcyk7Ci0KLQkJYmxvY2sgPSBpOTE1X2J1ZGR5 X2FsbG9jKCZtbSwgdG9wKTsKLQkJaWYgKCFJU19FUlIoYmxvY2spKSB7Ci0JCQlwcl9pbmZvKCJi dWRkeV9hbGxvYyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkIGF0IHRvcC1vcmRlciAlZC8lZCwgaXQg c2hvdWxkIGJlIGZ1bGwhIiwKLQkJCQl0b3AsIG1heF9vcmRlcik7Ci0JCQlsaXN0X2FkZF90YWls KCZibG9jay0+bGluaywgJmJsb2Nrcyk7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBlcnI7 Ci0JCX0KLQl9Ci0KLQlpOTE1X2J1ZGR5X2ZyZWVfbGlzdCgmbW0sICZob2xlcyk7Ci0KLQkvKiBO b3RoaW5nIGxhcmdlciB0aGFuIGJsb2NrcyBvZiBjaHVua19zaXplIG5vdyBhdmFpbGFibGUgKi8K LQlmb3IgKG9yZGVyID0gMTsgb3JkZXIgPD0gbWF4X29yZGVyOyBvcmRlcisrKSB7Ci0JCWJsb2Nr ID0gaTkxNV9idWRkeV9hbGxvYygmbW0sIG9yZGVyKTsKLQkJaWYgKCFJU19FUlIoYmxvY2spKSB7 Ci0JCQlwcl9pbmZvKCJidWRkeV9hbGxvYyB1bmV4cGVjdGVkbHkgc3VjY2VlZGVkIGF0IG9yZGVy ICVkLCBpdCBzaG91bGQgYmUgZnVsbCEiLAotCQkJCW9yZGVyKTsKLQkJCWxpc3RfYWRkX3RhaWwo JmJsb2NrLT5saW5rLCAmYmxvY2tzKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycjsK LQkJfQotCX0KLQotZXJyOgotCWxpc3Rfc3BsaWNlX3RhaWwoJmhvbGVzLCAmYmxvY2tzKTsKLQlp OTE1X2J1ZGR5X2ZyZWVfbGlzdCgmbW0sICZibG9ja3MpOwotCWk5MTVfYnVkZHlfZmluaSgmbW0p OwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaWd0X2J1ZGR5X2FsbG9jX3JhbmdlKHZv aWQgKmFyZykKLXsKLQlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKLQl1bnNpZ25lZCBsb25nIHBh Z2VfbnVtOwotCUxJU1RfSEVBRChibG9ja3MpOwotCXU2NCBjaHVua19zaXplOwotCXU2NCBvZmZz ZXQ7Ci0JdTY0IHNpemU7Ci0JdTY0IHJlbTsKLQlpbnQgZXJyOwotCi0JaWd0X21tX2NvbmZpZygm c2l6ZSwgJmNodW5rX3NpemUpOwotCi0JcHJfaW5mbygiYnVkZHlfaW5pdCB3aXRoIHNpemU9JWxs eCwgY2h1bmtfc2l6ZT0lbGx4XG4iLCBzaXplLCBjaHVua19zaXplKTsKLQotCWVyciA9IGk5MTVf YnVkZHlfaW5pdCgmbW0sIHNpemUsIGNodW5rX3NpemUpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJy KCJidWRkeV9pbml0IGZhaWxlZCglZClcbiIsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0J ZXJyID0gaWd0X2NoZWNrX21tKCZtbSk7Ci0JaWYgKGVycikgewotCQlwcl9lcnIoInByZS1tbSBj aGVjayBmYWlsZWQsIGFib3J0LCBhYm9ydCwgYWJvcnQhXG4iKTsKLQkJZ290byBlcnJfZmluaTsK LQl9Ci0KLQlyZW0gPSBtbS5zaXplOwotCW9mZnNldCA9IDA7Ci0KLQlmb3JfZWFjaF9wcmltZV9u dW1iZXJfZnJvbShwYWdlX251bSwgMSwgVUxPTkdfTUFYIC0gMSkgewotCQlzdHJ1Y3QgaTkxNV9i dWRkeV9ibG9jayAqYmxvY2s7Ci0JCUxJU1RfSEVBRCh0bXApOwotCi0JCXNpemUgPSBtaW4ocGFn ZV9udW0gKiBtbS5jaHVua19zaXplLCByZW0pOwotCi0JCWVyciA9IGk5MTVfYnVkZHlfYWxsb2Nf cmFuZ2UoJm1tLCAmdG1wLCBvZmZzZXQsIHNpemUpOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAoZXJy ID09IC1FTk9NRU0pIHsKLQkJCQlwcl9pbmZvKCJhbGxvY19yYW5nZSBoaXQgLUVOT01FTSB3aXRo IHNpemU9JWxseFxuIiwKLQkJCQkJc2l6ZSk7Ci0JCQl9IGVsc2UgewotCQkJCXByX2VycigiYWxs b2NfcmFuZ2Ugd2l0aCBvZmZzZXQ9JWxseCwgc2l6ZT0lbGx4IGZhaWxlZCglZClcbiIsCi0JCQkJ ICAgICAgIG9mZnNldCwgc2l6ZSwgZXJyKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCX0KLQotCQli bG9jayA9IGxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmdG1wLAotCQkJCQkJIHN0cnVjdCBpOTE1 X2J1ZGR5X2Jsb2NrLAotCQkJCQkJIGxpbmspOwotCQlpZiAoIWJsb2NrKSB7Ci0JCQlwcl9lcnIo ImFsbG9jX3JhbmdlIGhhcyBubyBibG9ja3NcbiIpOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJy ZWFrOwotCQl9Ci0KLQkJaWYgKGk5MTVfYnVkZHlfYmxvY2tfb2Zmc2V0KGJsb2NrKSAhPSBvZmZz ZXQpIHsKLQkJCXByX2VycigiYWxsb2NfcmFuZ2Ugc3RhcnQgb2Zmc2V0IG1pc21hdGNoLCBmb3Vu ZD0lbGx4LCBleHBlY3RlZD0lbGx4XG4iLAotCQkJICAgICAgIGk5MTVfYnVkZHlfYmxvY2tfb2Zm c2V0KGJsb2NrKSwgb2Zmc2V0KTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoIWVy cikKLQkJCWVyciA9IGlndF9jaGVja19ibG9ja3MoJm1tLCAmdG1wLCBzaXplLCB0cnVlKTsKLQot CQlsaXN0X3NwbGljZV90YWlsKCZ0bXAsICZibG9ja3MpOwotCi0JCWlmIChlcnIpCi0JCQlicmVh azsKLQotCQlvZmZzZXQgKz0gc2l6ZTsKLQotCQlyZW0gLT0gc2l6ZTsKLQkJaWYgKCFyZW0pCi0J CQlicmVhazsKLQotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0KLQlpZiAoZXJyID09IC1FTk9NRU0p Ci0JCWVyciA9IDA7Ci0KLQlpOTE1X2J1ZGR5X2ZyZWVfbGlzdCgmbW0sICZibG9ja3MpOwotCi0J aWYgKCFlcnIpIHsKLQkJZXJyID0gaWd0X2NoZWNrX21tKCZtbSk7Ci0JCWlmIChlcnIpCi0JCQlw cl9lcnIoInBvc3QtbW0gY2hlY2sgZmFpbGVkXG4iKTsKLQl9Ci0KLWVycl9maW5pOgotCWk5MTVf YnVkZHlfZmluaSgmbW0pOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBpZ3RfYnVk ZHlfYWxsb2NfbGltaXQodm9pZCAqYXJnKQotewotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpi bG9jazsKLQlzdHJ1Y3QgaTkxNV9idWRkeV9tbSBtbTsKLQljb25zdCB1NjQgc2l6ZSA9IFU2NF9N QVg7Ci0JaW50IGVycjsKLQotCWVyciA9IGk5MTVfYnVkZHlfaW5pdCgmbW0sIHNpemUsIFBBR0Vf U0laRSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChtbS5tYXhfb3JkZXIgIT0g STkxNV9CVUREWV9NQVhfT1JERVIpIHsKLQkJcHJfZXJyKCJtbS5tYXhfb3JkZXIoJWQpICE9ICVk XG4iLAotCQkgICAgICAgbW0ubWF4X29yZGVyLCBJOTE1X0JVRERZX01BWF9PUkRFUik7Ci0JCWVy ciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2Zpbmk7Ci0JfQotCi0JYmxvY2sgPSBpOTE1X2J1ZGR5 X2FsbG9jKCZtbSwgbW0ubWF4X29yZGVyKTsKLQlpZiAoSVNfRVJSKGJsb2NrKSkgewotCQllcnIg PSBQVFJfRVJSKGJsb2NrKTsKLQkJZ290byBvdXRfZmluaTsKLQl9Ci0KLQlpZiAoaTkxNV9idWRk eV9ibG9ja19vcmRlcihibG9jaykgIT0gbW0ubWF4X29yZGVyKSB7Ci0JCXByX2VycigiYmxvY2sg b3JkZXIoJWQpICE9ICVkXG4iLAotCQkgICAgICAgaTkxNV9idWRkeV9ibG9ja19vcmRlcihibG9j ayksIG1tLm1heF9vcmRlcik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0J fQotCi0JaWYgKGk5MTVfYnVkZHlfYmxvY2tfc2l6ZSgmbW0sIGJsb2NrKSAhPQotCSAgICBCSVRf VUxMKG1tLm1heF9vcmRlcikgKiBQQUdFX1NJWkUpIHsKLQkJcHJfZXJyKCJibG9jayBzaXplKCVs bHUpICE9ICVsbHVcbiIsCi0JCSAgICAgICBpOTE1X2J1ZGR5X2Jsb2NrX3NpemUoJm1tLCBibG9j ayksCi0JCSAgICAgICBCSVRfVUxMKG1tLm1heF9vcmRlcikgKiBQQUdFX1NJWkUpOwotCQllcnIg PSAtRUlOVkFMOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotb3V0X2ZyZWU6Ci0JaTkxNV9idWRk eV9mcmVlKCZtbSwgYmxvY2spOwotb3V0X2Zpbmk6Ci0JaTkxNV9idWRkeV9maW5pKCZtbSk7Ci0J cmV0dXJuIGVycjsKLX0KLQotaW50IGk5MTVfYnVkZHlfbW9ja19zZWxmdGVzdHModm9pZCkKLXsK LQlzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfc3VidGVzdCB0ZXN0c1tdID0gewotCQlTVUJURVNU KGlndF9idWRkeV9hbGxvY19wZXNzaW1pc3RpYyksCi0JCVNVQlRFU1QoaWd0X2J1ZGR5X2FsbG9j X29wdGltaXN0aWMpLAotCQlTVUJURVNUKGlndF9idWRkeV9hbGxvY19wYXRob2xvZ2ljYWwpLAot CQlTVUJURVNUKGlndF9idWRkeV9hbGxvY19zbW9rZSksCi0JCVNVQlRFU1QoaWd0X2J1ZGR5X2Fs bG9jX3JhbmdlKSwKLQkJU1VCVEVTVChpZ3RfYnVkZHlfYWxsb2NfbGltaXQpLAotCX07Ci0KLQly ZXR1cm4gaTkxNV9zdWJ0ZXN0cyh0ZXN0cywgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAppbmRleCAzZGIzNGQz ZWVhNTguLjM0ZTVjYWYzODA5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2Vs ZnRlc3RzL2k5MTVfbW9ja19zZWxmdGVzdHMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9tb2NrX3NlbGZ0ZXN0cy5oCkBAIC0zMyw1ICszMyw0IEBAIHNlbGZ0ZXN0 KGV2aWN0LCBpOTE1X2dlbV9ldmljdF9tb2NrX3NlbGZ0ZXN0cykKIHNlbGZ0ZXN0KGd0dCwgaTkx NV9nZW1fZ3R0X21vY2tfc2VsZnRlc3RzKQogc2VsZnRlc3QoaHVnZXBhZ2VzLCBpOTE1X2dlbV9o dWdlX3BhZ2VfbW9ja19zZWxmdGVzdHMpCiBzZWxmdGVzdChjb250ZXh0cywgaTkxNV9nZW1fY29u dGV4dF9tb2NrX3NlbGZ0ZXN0cykKLXNlbGZ0ZXN0KGJ1ZGR5LCBpOTE1X2J1ZGR5X21vY2tfc2Vs ZnRlc3RzKQogc2VsZnRlc3QobWVtb3J5X3JlZ2lvbiwgaW50ZWxfbWVtb3J5X3JlZ2lvbl9tb2Nr X3NlbGZ0ZXN0cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p bnRlbF9tZW1vcnlfcmVnaW9uLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50 ZWxfbWVtb3J5X3JlZ2lvbi5jCmluZGV4IGY4NWZkOGNiZmJmNS4uYzg1ZDUxNmI4NWNkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbWVtb3J5X3JlZ2lv bi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9tZW1vcnlfcmVn aW9uLmMKQEAgLTU3LDkgKzU3LDEwIEBAIHN0YXRpYyBpbnQgaWd0X21vY2tfZmlsbCh2b2lkICph cmcpCiAJTElTVF9IRUFEKG9iamVjdHMpOwogCWludCBlcnIgPSAwOwogCi0JcGFnZV9zaXplID0g bWVtLT5tbS5jaHVua19zaXplOwotCW1heF9wYWdlcyA9IGRpdjY0X3U2NCh0b3RhbCwgcGFnZV9z aXplKTsKKwlwYWdlX3NpemUgPSBtZW0tPmNodW5rX3NpemU7CiAJcmVtID0gdG90YWw7CityZXRy eToKKwltYXhfcGFnZXMgPSBkaXY2NF91NjQocmVtLCBwYWdlX3NpemUpOwogCiAJZm9yX2VhY2hf cHJpbWVfbnVtYmVyX2Zyb20ocGFnZV9udW0sIDEsIG1heF9wYWdlcykgewogCQlyZXNvdXJjZV9z aXplX3Qgc2l6ZSA9IHBhZ2VfbnVtICogcGFnZV9zaXplOwpAQCAtODUsNiArODYsMTEgQEAgc3Rh dGljIGludCBpZ3RfbW9ja19maWxsKHZvaWQgKmFyZykKIAkJZXJyID0gMDsKIAlpZiAoZXJyID09 IC1FTlhJTykgewogCQlpZiAocGFnZV9udW0gKiBwYWdlX3NpemUgPD0gcmVtKSB7CisJCQlpZiAo bWVtLT5pc19yYW5nZV9tYW5hZ2VyICYmIG1heF9wYWdlcyA+IDEpIHsKKwkJCQltYXhfcGFnZXMg Pj49IDE7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwogCQkJcHJfZXJyKCIlcyBmYWlsZWQsIHNw YWNlIHN0aWxsIGxlZnQgaW4gcmVnaW9uXG4iLAogCQkJICAgICAgIF9fZnVuY19fKTsKIAkJCWVy ciA9IC1FSU5WQUw7CkBAIC0xOTksMTIgKzIwNSwxOCBAQCBzdGF0aWMgaW50IGlndF9tb2NrX3Jl c2VydmUodm9pZCAqYXJnKQogCWRvIHsKIAkJdTMyIHNpemUgPSBpOTE1X3ByYW5kb21fdTMyX21h eF9zdGF0ZShjdXJfYXZhaWwsICZwcm5nKTsKIAorcmV0cnk6CiAJCXNpemUgPSBtYXhfdCh1MzIs IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSksIFBBR0VfU0laRSk7CiAJCW9iaiA9IGlndF9vYmpl Y3RfY3JlYXRlKG1lbSwgJm9iamVjdHMsIHNpemUsIDApOwogCQlpZiAoSVNfRVJSKG9iaikpIHsK LQkJCWlmIChQVFJfRVJSKG9iaikgPT0gLUVOWElPKQorCQkJaWYgKFBUUl9FUlIob2JqKSA9PSAt RU5YSU8pIHsKKwkJCQlpZiAobWVtLT5pc19yYW5nZV9tYW5hZ2VyICYmCisJCQkJICAgIHNpemUg PiBtZW0tPmNodW5rX3NpemUpIHsKKwkJCQkJc2l6ZSA+Pj0gMTsKKwkJCQkJZ290byByZXRyeTsK KwkJCQl9CiAJCQkJYnJlYWs7Ci0KKwkJCX0KIAkJCWVyciA9IFBUUl9FUlIob2JqKTsKIAkJCWdv dG8gb3V0X2Nsb3NlOwogCQl9CkBAIC0yMjAsNyArMjMyLDcgQEAgc3RhdGljIGludCBpZ3RfbW9j a19yZXNlcnZlKHZvaWQgKmFyZykKIG91dF9jbG9zZToKIAlrZnJlZShvcmRlcik7CiAJY2xvc2Vf b2JqZWN0cyhtZW0sICZvYmplY3RzKTsKLQlpOTE1X2J1ZGR5X2ZyZWVfbGlzdCgmbWVtLT5tbSwg Jm1lbS0+cmVzZXJ2ZWQpOworCWludGVsX21lbW9yeV9yZWdpb25fdW5yZXNlcnZlKG1lbSk7CiAJ cmV0dXJuIGVycjsKIH0KIApAQCAtMjQwLDcgKzI1Miw3IEBAIHN0YXRpYyBpbnQgaWd0X21vY2tf Y29udGlndW91cyh2b2lkICphcmcpCiAJdG90YWwgPSByZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lv bik7CiAKIAkvKiBNaW4gc2l6ZSAqLwotCW9iaiA9IGlndF9vYmplY3RfY3JlYXRlKG1lbSwgJm9i amVjdHMsIG1lbS0+bW0uY2h1bmtfc2l6ZSwKKwlvYmogPSBpZ3Rfb2JqZWN0X2NyZWF0ZShtZW0s ICZvYmplY3RzLCBtZW0tPmNodW5rX3NpemUsCiAJCQkJSTkxNV9CT19BTExPQ19DT05USUdVT1VT KTsKIAlpZiAoSVNfRVJSKG9iaikpCiAJCXJldHVybiBQVFJfRVJSKG9iaik7CkBAIC0zMjEsMTQg KzMzMywxNiBAQCBzdGF0aWMgaW50IGlndF9tb2NrX2NvbnRpZ3VvdXModm9pZCAqYXJnKQogCW1p biA9IHRhcmdldDsKIAl0YXJnZXQgPSB0b3RhbCA+PiAxOwogCi0JLyogTWFrZSBzdXJlIHdlIGNh biBzdGlsbCBhbGxvY2F0ZSBhbGwgdGhlIGZyYWdtZW50ZWQgc3BhY2UgKi8KLQlvYmogPSBpZ3Rf b2JqZWN0X2NyZWF0ZShtZW0sICZvYmplY3RzLCB0YXJnZXQsIDApOwotCWlmIChJU19FUlIob2Jq KSkgewotCQllcnIgPSBQVFJfRVJSKG9iaik7Ci0JCWdvdG8gZXJyX2Nsb3NlX29iamVjdHM7Ci0J fQorCWlmICghbWVtLT5pc19yYW5nZV9tYW5hZ2VyKSB7CisJCS8qIE1ha2Ugc3VyZSB3ZSBjYW4g c3RpbGwgYWxsb2NhdGUgYWxsIHRoZSBmcmFnbWVudGVkIHNwYWNlICovCisJCW9iaiA9IGlndF9v YmplY3RfY3JlYXRlKG1lbSwgJm9iamVjdHMsIHRhcmdldCwgMCk7CisJCWlmIChJU19FUlIob2Jq KSkgeworCQkJZXJyID0gUFRSX0VSUihvYmopOworCQkJZ290byBlcnJfY2xvc2Vfb2JqZWN0czsK KwkJfQogCi0JaWd0X29iamVjdF9yZWxlYXNlKG9iaik7CisJCWlndF9vYmplY3RfcmVsZWFzZShv YmopOworCX0KIAogCS8qCiAJICogRXZlbiB0aG91Z2ggd2UgaGF2ZSBlbm91Z2ggZnJlZSBzcGFj ZSwgd2UgZG9uJ3QgaGF2ZSBhIGJpZyBlbm91Z2gKQEAgLTM0OCw3ICszNjIsNyBAQCBzdGF0aWMg aW50IGlndF9tb2NrX2NvbnRpZ3VvdXModm9pZCAqYXJnKQogCQl9CiAKIAkJdGFyZ2V0ID4+PSAx OwotCX0gd2hpbGUgKHRhcmdldCA+PSBtZW0tPm1tLmNodW5rX3NpemUpOworCX0gd2hpbGUgKHRh cmdldCA+PSBtZW0tPmNodW5rX3NpemUpOwogCiBlcnJfY2xvc2Vfb2JqZWN0czoKIAlsaXN0X3Nw bGljZV90YWlsKCZob2xlcywgJm9iamVjdHMpOwpAQCAtMzY4LDcgKzM4Miw3IEBAIHN0YXRpYyBp bnQgaWd0X21vY2tfc3BsaW50ZXJlZF9yZWdpb24odm9pZCAqYXJnKQogCiAJLyoKIAkgKiBTYW5p dHkgY2hlY2sgd2UgY2FuIHN0aWxsIGFsbG9jYXRlIGV2ZXJ5dGhpbmcgZXZlbiBpZiB0aGUKLQkg KiBtbS5tYXhfb3JkZXIgIT0gbW0uc2l6ZS4gaS5lIG91ciBzdGFydGluZyBhZGRyZXNzIHNwYWNl IHNpemUgaXMgbm90IGEKKwkgKiBtYXhfb3JkZXIgIT0gbW0uc2l6ZS4gaS5lIG91ciBzdGFydGlu ZyBhZGRyZXNzIHNwYWNlIHNpemUgaXMgbm90IGEKIAkgKiBwb3dlci1vZi10d28uCiAJICovCiAK QEAgLTM3NywxNyArMzkxLDEwIEBAIHN0YXRpYyBpbnQgaWd0X21vY2tfc3BsaW50ZXJlZF9yZWdp b24odm9pZCAqYXJnKQogCWlmIChJU19FUlIobWVtKSkKIAkJcmV0dXJuIFBUUl9FUlIobWVtKTsK IAotCWlmIChtZW0tPm1tLnNpemUgIT0gc2l6ZSkgewotCQlwcl9lcnIoIiVzIHNpemUgbWlzbWF0 Y2goJWxsdSAhPSAlbGx1KVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBtZW0tPm1tLnNpemUsIHNp emUpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9wdXQ7Ci0JfQotCiAJZXhwZWN0ZWRf b3JkZXIgPSBnZXRfb3JkZXIocm91bmRkb3duX3Bvd19vZl90d28oc2l6ZSkpOwotCWlmIChtZW0t Pm1tLm1heF9vcmRlciAhPSBleHBlY3RlZF9vcmRlcikgeworCWlmIChtZW0tPm1heF9vcmRlciAh PSBleHBlY3RlZF9vcmRlcikgewogCQlwcl9lcnIoIiVzIG9yZGVyIG1pc21hdGNoKCV1ICE9ICV1 KVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBtZW0tPm1tLm1heF9vcmRlciwgZXhwZWN0ZWRfb3Jk ZXIpOworCQkgICAgICAgX19mdW5jX18sIG1lbS0+bWF4X29yZGVyLCBleHBlY3RlZF9vcmRlcik7 CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X3B1dDsKIAl9CkBAIC00MDgsMTIgKzQxNSwx NSBAQCBzdGF0aWMgaW50IGlndF9tb2NrX3NwbGludGVyZWRfcmVnaW9uKHZvaWQgKmFyZykKIAkg KiBzdXJlIHRoYXQgZG9lcyBpbmRlZWQgaG9sZCB0cnVlLgogCSAqLwogCi0Jb2JqID0gaWd0X29i amVjdF9jcmVhdGUobWVtLCAmb2JqZWN0cywgc2l6ZSwgSTkxNV9CT19BTExPQ19DT05USUdVT1VT KTsKLQlpZiAoIUlTX0VSUihvYmopKSB7Ci0JCXByX2VycigiJXMgdG9vIGxhcmdlIGNvbnRpZ3Vv dXMgYWxsb2NhdGlvbiB3YXMgbm90IHJlamVjdGVkXG4iLAotCQkgICAgICAgX19mdW5jX18pOwot CQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9jbG9zZTsKKwlpZiAoIW1lbS0+aXNfcmFuZ2Vf bWFuYWdlcikgeworCQlvYmogPSBpZ3Rfb2JqZWN0X2NyZWF0ZShtZW0sICZvYmplY3RzLCBzaXpl LAorCQkJCQlJOTE1X0JPX0FMTE9DX0NPTlRJR1VPVVMpOworCQlpZiAoIUlTX0VSUihvYmopKSB7 CisJCQlwcl9lcnIoIiVzIHRvbyBsYXJnZSBjb250aWd1b3VzIGFsbG9jYXRpb24gd2FzIG5vdCBy ZWplY3RlZFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXyk7CisJCQllcnIgPSAtRUlOVkFMOworCQkJ Z290byBvdXRfY2xvc2U7CisJCX0KIAl9CiAKIAlvYmogPSBpZ3Rfb2JqZWN0X2NyZWF0ZShtZW0s ICZvYmplY3RzLCByb3VuZGRvd25fcG93X29mX3R3byhzaXplKSwKQEAgLTQzMiw2OCArNDQyLDYg QEAgc3RhdGljIGludCBpZ3RfbW9ja19zcGxpbnRlcmVkX3JlZ2lvbih2b2lkICphcmcpCiAJcmV0 dXJuIGVycjsKIH0KIAotI2lmbmRlZiBTWl84RwotI2RlZmluZSBTWl84RyBCSVRfVUxMKDMzKQot I2VuZGlmCi0KLXN0YXRpYyBpbnQgaWd0X21vY2tfbWF4X3NlZ21lbnQodm9pZCAqYXJnKQotewot CWNvbnN0IHVuc2lnbmVkIGludCBtYXhfc2VnbWVudCA9IGk5MTVfc2dfc2VnbWVudF9zaXplKCk7 Ci0Jc3RydWN0IGludGVsX21lbW9yeV9yZWdpb24gKm1lbSA9IGFyZzsKLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSA9IG1lbS0+aTkxNTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqOwotCXN0cnVjdCBpOTE1X2J1ZGR5X2Jsb2NrICpibG9jazsKLQlzdHJ1Y3Qgc2NhdHRl cmxpc3QgKnNnOwotCUxJU1RfSEVBRChvYmplY3RzKTsKLQl1NjQgc2l6ZTsKLQlpbnQgZXJyID0g MDsKLQotCS8qCi0JICogV2hpbGUgd2UgbWF5IGNyZWF0ZSB2ZXJ5IGxhcmdlIGNvbnRpZ3VvdXMg YmxvY2tzLCB3ZSBtYXkgbmVlZAotCSAqIHRvIGJyZWFrIHRob3NlIGRvd24gZm9yIGNvbnN1bXB0 aW9uIGVsc2V3aGVyZS4gSW4gcGFydGljdWxhciwKLQkgKiBkbWEtbWFwcGluZyB3aXRoIHNjYXR0 ZXJsaXN0IGVsZW1lbnRzIGhhdmUgYW4gaW1wbGljaXQgbGltaXQgb2YKLQkgKiBVSU5UX01BWCBv biBlYWNoIGVsZW1lbnQuCi0JICovCi0KLQlzaXplID0gU1pfOEc7Ci0JbWVtID0gbW9ja19yZWdp b25fY3JlYXRlKGk5MTUsIDAsIHNpemUsIFBBR0VfU0laRSwgMCk7Ci0JaWYgKElTX0VSUihtZW0p KQotCQlyZXR1cm4gUFRSX0VSUihtZW0pOwotCi0Jb2JqID0gaWd0X29iamVjdF9jcmVhdGUobWVt LCAmb2JqZWN0cywgc2l6ZSwgMCk7Ci0JaWYgKElTX0VSUihvYmopKSB7Ci0JCWVyciA9IFBUUl9F UlIob2JqKTsKLQkJZ290byBvdXRfcHV0OwotCX0KLQotCXNpemUgPSAwOwotCWxpc3RfZm9yX2Vh Y2hfZW50cnkoYmxvY2ssICZvYmotPm1tLmJsb2NrcywgbGluaykgewotCQlpZiAoaTkxNV9idWRk eV9ibG9ja19zaXplKCZtZW0tPm1tLCBibG9jaykgPiBzaXplKQotCQkJc2l6ZSA9IGk5MTVfYnVk ZHlfYmxvY2tfc2l6ZSgmbWVtLT5tbSwgYmxvY2spOwotCX0KLQlpZiAoc2l6ZSA8IG1heF9zZWdt ZW50KSB7Ci0JCXByX2VycigiJXM6IEZhaWxlZCB0byBjcmVhdGUgYSBodWdlIGNvbnRpZ3VvdXMg YmxvY2sgWz4gJXVdLCBsYXJnZXN0IGJsb2NrICVsbGRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywg bWF4X3NlZ21lbnQsIHNpemUpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dF9jbG9zZTsK LQl9Ci0KLQlmb3IgKHNnID0gb2JqLT5tbS5wYWdlcy0+c2dsOyBzZzsgc2cgPSBzZ19uZXh0KHNn KSkgewotCQlpZiAoc2ctPmxlbmd0aCA+IG1heF9zZWdtZW50KSB7Ci0JCQlwcl9lcnIoIiVzOiBD cmVhdGVkIGFuIG92ZXJzaXplZCBzY2F0dGVybGlzdCBlbnRyeSwgJXUgPiAldVxuIiwKLQkJCSAg ICAgICBfX2Z1bmNfXywgc2ctPmxlbmd0aCwgbWF4X3NlZ21lbnQpOwotCQkJZXJyID0gLUVJTlZB TDsKLQkJCWdvdG8gb3V0X2Nsb3NlOwotCQl9Ci0JfQotCi1vdXRfY2xvc2U6Ci0JY2xvc2Vfb2Jq ZWN0cyhtZW0sICZvYmplY3RzKTsKLW91dF9wdXQ6Ci0JaW50ZWxfbWVtb3J5X3JlZ2lvbl9wdXQo bWVtKTsKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW50IGlndF9ncHVfd3JpdGVfZHcoc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlLAogCQkJICAgIHN0cnVjdCBpOTE1X3ZtYSAqdm1hLAogCQkJ ICAgIHUzMiBkd29yZCwKQEAgLTEwOTgsNyArMTA0Niw2IEBAIGludCBpbnRlbF9tZW1vcnlfcmVn aW9uX21vY2tfc2VsZnRlc3RzKHZvaWQpCiAJCVNVQlRFU1QoaWd0X21vY2tfZmlsbCksCiAJCVNV QlRFU1QoaWd0X21vY2tfY29udGlndW91cyksCiAJCVNVQlRFU1QoaWd0X21vY2tfc3BsaW50ZXJl ZF9yZWdpb24pLAotCQlTVUJURVNUKGlndF9tb2NrX21heF9zZWdtZW50KSwKIAl9OwogCXN0cnVj dCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW07CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19yZWdp b24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX3JlZ2lvbi5jCmluZGV4 IDVkMmQwMTBhMWUyMi4uOGEyMTdhNTkyZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvbW9ja19yZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvbW9ja19yZWdpb24uYwpAQCAtMSwxNyArMSw1MiBAQAogLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IE1JVAogLyoKLSAqIENvcHlyaWdodCDCqSAyMDE5IEludGVsIENvcnBvcmF0 aW9uCisgKiBDb3B5cmlnaHQgwqkgMjAxOS0yMDIxIEludGVsIENvcnBvcmF0aW9uCiAgKi8KIAor I2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKICNpbmNsdWRlICJnZW0vaTkxNV9nZW1f cmVnaW9uLmgiCiAjaW5jbHVkZSAiaW50ZWxfbWVtb3J5X3JlZ2lvbi5oIgorI2luY2x1ZGUgImlu dGVsX3JlZ2lvbl90dG0uaCIKIAogI2luY2x1ZGUgIm1vY2tfcmVnaW9uLmgiCiAKK3N0YXRpYyB2 b2lkIG1vY2tfcmVnaW9uX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAorCQkJCSAgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKK3sKKwlpbnRlbF9yZWdpb25fdHRtX25v ZGVfZnJlZShvYmotPm1tLnJlZ2lvbiwgb2JqLT5tbS5zdF9tbV9ub2RlKTsKKwlzZ19mcmVlX3Rh YmxlKHBhZ2VzKTsKKwlrZnJlZShwYWdlcyk7Cit9CisKK3N0YXRpYyBpbnQgbW9ja19yZWdpb25f Z2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCit7CisJdW5zaWduZWQg aW50IGZsYWdzOworCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7CisKKwlmbGFncyA9IEk5MTVfQUxM T0NfTUlOX1BBR0VfU0laRTsKKwlpZiAob2JqLT5mbGFncyAmIEk5MTVfQk9fQUxMT0NfQ09OVElH VU9VUykKKwkJZmxhZ3MgfD0gSTkxNV9BTExPQ19DT05USUdVT1VTOworCisJb2JqLT5tbS5zdF9t bV9ub2RlID0gaW50ZWxfcmVnaW9uX3R0bV9ub2RlX2FsbG9jKG9iai0+bW0ucmVnaW9uLAorCQkJ CQkJCSBvYmotPmJhc2Uuc2l6ZSwKKwkJCQkJCQkgZmxhZ3MpOworCWlmIChJU19FUlIob2JqLT5t bS5zdF9tbV9ub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIob2JqLT5tbS5zdF9tbV9ub2RlKTsKKwor CXBhZ2VzID0gaW50ZWxfcmVnaW9uX3R0bV9ub2RlX3RvX3N0KG9iai0+bW0ucmVnaW9uLCBvYmot Pm1tLnN0X21tX25vZGUpOworCWlmIChJU19FUlIocGFnZXMpKQorCQlyZXR1cm4gUFRSX0VSUihw YWdlcyk7CisKKwlfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMob2JqLCBwYWdlcywgaTkxNV9z Z19kbWFfc2l6ZXMocGFnZXMtPnNnbCkpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25z dCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgbW9ja19yZWdpb25fb2JqX29wcyA9IHsK IAkubmFtZSA9ICJtb2NrLXJlZ2lvbiIsCi0JLmdldF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZXNfYnVkZHksCi0JLnB1dF9wYWdlcyA9IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNf YnVkZHksCisJLmdldF9wYWdlcyA9IG1vY2tfcmVnaW9uX2dldF9wYWdlcywKKwkucHV0X3BhZ2Vz ID0gbW9ja19yZWdpb25fcHV0X3BhZ2VzLAogCS5yZWxlYXNlID0gaTkxNV9nZW1fb2JqZWN0X3Jl bGVhc2VfbWVtb3J5X3JlZ2lvbiwKIH07CiAKQEAgLTIzLDcgKzU4LDcgQEAgc3RhdGljIGludCBt b2NrX29iamVjdF9pbml0KHN0cnVjdCBpbnRlbF9tZW1vcnlfcmVnaW9uICptZW0sCiAJc3RhdGlj IHN0cnVjdCBsb2NrX2NsYXNzX2tleSBsb2NrX2NsYXNzOwogCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gbWVtLT5pOTE1OwogCi0JaWYgKHNpemUgPiBtZW0tPm1tLnNpemUpCisJaWYg KHNpemUgPiByZXNvdXJjZV9zaXplKCZtZW0tPnJlZ2lvbikpCiAJCXJldHVybiAtRTJCSUc7CiAK IAlkcm1fZ2VtX3ByaXZhdGVfb2JqZWN0X2luaXQoJmk5MTUtPmRybSwgJm9iai0+YmFzZSwgc2l6 ZSk7CkBAIC0zOSw4ICs3NCw4IEBAIHN0YXRpYyBpbnQgbW9ja19vYmplY3RfaW5pdChzdHJ1Y3Qg aW50ZWxfbWVtb3J5X3JlZ2lvbiAqbWVtLAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVs X21lbW9yeV9yZWdpb25fb3BzIG1vY2tfcmVnaW9uX29wcyA9IHsKLQkuaW5pdCA9IGludGVsX21l bW9yeV9yZWdpb25faW5pdF9idWRkeSwKLQkucmVsZWFzZSA9IGludGVsX21lbW9yeV9yZWdpb25f cmVsZWFzZV9idWRkeSwKKwkuaW5pdCA9IGludGVsX3JlZ2lvbl90dG1faW5pdCwKKwkucmVsZWFz ZSA9IGludGVsX3JlZ2lvbl90dG1fZmluaSwKIAkuaW5pdF9vYmplY3QgPSBtb2NrX29iamVjdF9p bml0LAogfTsKIApAQCAtNTIsNSArODcsNiBAQCBtb2NrX3JlZ2lvbl9jcmVhdGUoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmk5MTUsCiAJCSAgIHJlc291cmNlX3NpemVfdCBpb19zdGFydCkKIHsK IAlyZXR1cm4gaW50ZWxfbWVtb3J5X3JlZ2lvbl9jcmVhdGUoaTkxNSwgc3RhcnQsIHNpemUsIG1p bl9wYWdlX3NpemUsCi0JCQkJCSAgaW9fc3RhcnQsICZtb2NrX3JlZ2lvbl9vcHMpOworCQkJCQkg IGlvX3N0YXJ0LCBJTlRFTF9NRU1PUllfTU9DSywgMCwKKwkJCQkJICAmbW9ja19yZWdpb25fb3Bz KTsKIH0KLS0gCjIuMzEuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50 ZWwtZ2Z4Cg==