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,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable 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 33C92C433E0 for ; Wed, 3 Feb 2021 07:45:58 +0000 (UTC) Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (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 B3D3064DDB for ; Wed, 3 Feb 2021 07:45:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B3D3064DDB Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=virtualization-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 6FC5320488; Wed, 3 Feb 2021 07:45:57 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id UidnEO44yyzg; Wed, 3 Feb 2021 07:45:49 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 98CC620011; Wed, 3 Feb 2021 07:45:49 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 79EB1C1825; Wed, 3 Feb 2021 07:45:49 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id B34F7C013A for ; Wed, 3 Feb 2021 07:45:48 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id 998A785D48 for ; Wed, 3 Feb 2021 07:45:48 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lIp0Tp9IwJV9 for ; Wed, 3 Feb 2021 07:45:44 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by fraxinus.osuosl.org (Postfix) with ESMTPS id 634C985010 for ; Wed, 3 Feb 2021 07:45:44 +0000 (UTC) IronPort-SDR: Th8kXvjOhXCom/JUMhHOCPT21qKBYsSi5miR3kr/eFPlGV25YGtOwnwap0NwNbRIwHkwCfnVt/ Evsn2by/cYqQ== X-IronPort-AV: E=McAfee;i="6000,8403,9883"; a="180225889" X-IronPort-AV: E=Sophos;i="5.79,397,1602572400"; d="scan'208";a="180225889" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2021 23:45:42 -0800 IronPort-SDR: XrXHr6thpyGH03L4Zf2qWGNb4zHX7p41wk0aZm9x/iHU1ckIm544Vylkxho+kar/UrrQ0/BHSF 9YJ4BGnknWiA== X-IronPort-AV: E=Sophos;i="5.79,397,1602572400"; d="scan'208";a="433280699" Received: from vkasired-desk2.fm.intel.com ([10.105.128.127]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Feb 2021 23:45:42 -0800 From: Vivek Kasireddy To: virtualization@lists.linux-foundation.org, dri-devel@lists.freedesktop.org Subject: [RFC v3 2/3] virtio: Introduce Vdmabuf driver Date: Tue, 2 Feb 2021 23:35:16 -0800 Message-Id: <20210203073517.1908882-3-vivek.kasireddy@intel.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210203073517.1908882-1-vivek.kasireddy@intel.com> References: <20210203073517.1908882-1-vivek.kasireddy@intel.com> MIME-Version: 1.0 Cc: dongwon.kim@intel.com, daniel.vetter@ffwll.ch, sumit.semwal@linaro.org, daniel.vetter@intel.com, christian.koenig@amd.com, linux-media@vger.kernel.org X-BeenThere: virtualization@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Linux virtualization List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: virtualization-bounces@lists.linux-foundation.org Sender: "Virtualization" VGhpcyBkcml2ZXIgInRyYW5zZmVycyIgYSBkbWFidWYgY3JlYXRlZCBvbiB0aGUgR3Vlc3QgdG8g dGhlIEhvc3QuCkEgY29tbW9uIHVzZS1jYXNlIGZvciBzdWNoIGEgdHJhbnNmZXIgaW5jbHVkZXMg c2hhcmluZyB0aGUgc2Nhbm91dApidWZmZXIgY3JlYXRlZCBieSBhIGRpc3BsYXkgc2VydmVyIG9y IGEgY29tcG9zaXRvciBydW5uaW5nIGluIHRoZQpHdWVzdCB3aXRoIFFlbXUgVUkgLS0gcnVubmlu ZyBvbiB0aGUgSG9zdC4KClRoZSAidHJhbnNmZXIiIGlzIGFjY29tcGxpc2hlZCBieSBzaGFyaW5n IHRoZSBQRk5zIG9mIGFsbCB0aGUgcGFnZXMKYXNzb2NpYXRlZCB3aXRoIHRoZSBkbWFidWYgYW5k IGhhdmluZyBhIG5ldyBkbWFidWYgY3JlYXRlZCBvbiB0aGUKSG9zdCB0aGF0IGlzIGJhY2tlZCB1 cCBieSB0aGUgcGFnZXMgbWFwcGVkIGZyb20gdGhlIEd1ZXN0LgoKU2lnbmVkLW9mZi1ieTogRG9u Z3dvbiBLaW0gPGRvbmd3b24ua2ltQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogVml2ZWsgS2Fz aXJlZGR5IDx2aXZlay5rYXNpcmVkZHlAaW50ZWwuY29tPgotLS0KIGRyaXZlcnMvdmlydGlvL0tj b25maWcgICAgICAgICAgICAgIHwgICAgOCArCiBkcml2ZXJzL3ZpcnRpby9NYWtlZmlsZSAgICAg ICAgICAgICB8ICAgIDEgKwogZHJpdmVycy92aXJ0aW8vdmlydGlvX3ZkbWFidWYuYyAgICAgfCAx MDkwICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogaW5jbHVkZS9saW51eC92aXJ0aW9fdmRt YWJ1Zi5oICAgICAgfCAgMjcxICsrKysrKysKIGluY2x1ZGUvdWFwaS9saW51eC92aXJ0aW9faWRz LmggICAgIHwgICAgMSArCiBpbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3ZkbWFidWYuaCB8ICAg OTkgKysrCiA2IGZpbGVzIGNoYW5nZWQsIDE0NzAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvdmlydGlvL3ZpcnRpb192ZG1hYnVmLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL2xpbnV4L3ZpcnRpb192ZG1hYnVmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs dWRlL3VhcGkvbGludXgvdmlydGlvX3ZkbWFidWYuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmly dGlvL0tjb25maWcgYi9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCmluZGV4IDdiNDExMzBkM2YzNS4u ZTU2M2MxMmY3MTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby9LY29uZmlnCisrKyBiL2Ry aXZlcnMvdmlydGlvL0tjb25maWcKQEAgLTEzOSw0ICsxMzksMTIgQEAgY29uZmlnIFZJUlRJT19E TUFfU0hBUkVEX0JVRkZFUgogCSBUaGlzIG9wdGlvbiBhZGRzIGEgZmxhdm9yIG9mIGRtYSBidWZm ZXJzIHRoYXQgYXJlIGJhY2tlZCBieQogCSB2aXJ0aW8gcmVzb3VyY2VzLgogCitjb25maWcgVklS VElPX1ZETUFCVUYKKwlib29sICJFbmFibGVzIFZkbWFidWYgZHJpdmVyIGluIGd1ZXN0IG9zIgor CWRlZmF1bHQgbgorCWRlcGVuZHMgb24gVklSVElPCisJaGVscAorCSBUaGlzIGRyaXZlciBwcm92 aWRlcyBhIHdheSB0byBzaGFyZSB0aGUgZG1hYnVmcyBjcmVhdGVkIGluCisJIHRoZSBHdWVzdCB3 aXRoIHRoZSBIb3N0LgorCiBlbmRpZiAjIFZJUlRJT19NRU5VCmRpZmYgLS1naXQgYS9kcml2ZXJz L3ZpcnRpby9NYWtlZmlsZSBiL2RyaXZlcnMvdmlydGlvL01ha2VmaWxlCmluZGV4IDU5MWU2Zjcy YWE1NC4uYjRiYjA3MzgwMDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZQor KysgYi9kcml2ZXJzL3ZpcnRpby9NYWtlZmlsZQpAQCAtOSwzICs5LDQgQEAgb2JqLSQoQ09ORklH X1ZJUlRJT19JTlBVVCkgKz0gdmlydGlvX2lucHV0Lm8KIG9iai0kKENPTkZJR19WSVJUSU9fVkRQ QSkgKz0gdmlydGlvX3ZkcGEubwogb2JqLSQoQ09ORklHX1ZJUlRJT19NRU0pICs9IHZpcnRpb19t ZW0ubwogb2JqLSQoQ09ORklHX1ZJUlRJT19ETUFfU0hBUkVEX0JVRkZFUikgKz0gdmlydGlvX2Rt YV9idWYubworb2JqLSQoQ09ORklHX1ZJUlRJT19WRE1BQlVGKSArPSB2aXJ0aW9fdmRtYWJ1Zi5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fdmRtYWJ1Zi5jIGIvZHJpdmVycy92 aXJ0aW8vdmlydGlvX3ZkbWFidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAuLmMyOGYxNDRlYjEyNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlydGlvL3Zp cnRpb192ZG1hYnVmLmMKQEAgLTAsMCArMSwxMDkwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogKE1JVCBPUiBHUEwtMi4wKQorCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwg Q29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUu CisgKgorICogQXV0aG9yczoKKyAqICAgIERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBpbnRlbC5j b20+CisgKiAgICBNYXRldXN6IFBvbHJvbGEgPG1hdGV1c3oucG9scm9sYUBnbWFpbC5jb20+Cisg KiAgICBWaXZlayBLYXNpcmVkZHkgPHZpdmVrLmthc2lyZWRkeUBpbnRlbC5jb20+CisgKi8KKwor I2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNs dWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxs aW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgv c3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CisjaW5jbHVkZSA8bGludXgv dmlydGlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2lkcy5oPgorI2luY2x1ZGUgPGxpbnV4 L3ZpcnRpb19jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fdmRtYWJ1Zi5oPgorCisj ZGVmaW5lIFZJUlRJT19WRE1BQlVGX01BWF9JRCBJTlRfTUFYCisjZGVmaW5lIFJFRlNfUEVSX1BB R0UgKFBBR0VfU0laRS9zaXplb2YobG9uZykpCisjZGVmaW5lIE5FV19CVUZfSURfR0VOKHZtaWQs IGNudCkgKCgodm1pZCAmIDB4RkZGRkZGRkYpIDw8IDMyKSB8IFwKKwkJCQkgICAgKChjbnQpICYg MHhGRkZGRkZGRikpCisKKy8qIG9uZSBnbG9iYWwgZHJ2IG9iamVjdCAqLworc3RhdGljIHN0cnVj dCB2aXJ0aW9fdmRtYWJ1Zl9pbmZvICpkcnZfaW5mbzsKKworc3RydWN0IHZpcnRpb192ZG1hYnVm IHsKKwkvKiB2aXJ0aW8gZGV2aWNlIHN0cnVjdHVyZSAqLworCXN0cnVjdCB2aXJ0aW9fZGV2aWNl ICp2ZGV2OworCisJLyogdmlydHVhbCBxdWV1ZSBhcnJheSAqLworCXN0cnVjdCB2aXJ0cXVldWUg KnZxc1tWRE1BQlVGX1ZRX01BWF07CisKKwkvKiBJRCBvZiBndWVzdCBPUyAqLworCXU2NCB2bWlk OworCisJLyogc3BpbiBsb2NrIHRoYXQgbmVlZHMgdG8gYmUgYWNxdWlyZWQgYmVmb3JlIGFjY2Vz c2luZworCSAqIHZpcnR1YWwgcXVldWUKKwkgKi8KKwlzcGlubG9ja190IHZxX2xvY2s7CisJc3Ry dWN0IG11dGV4IHJlY3ZfbG9jazsKKwlzdHJ1Y3QgbXV0ZXggc2VuZF9sb2NrOworCisJc3RydWN0 IGxpc3RfaGVhZCBtc2dfbGlzdDsKKworCS8qIHdvcmtxdWV1ZSAqLworCXN0cnVjdCB3b3JrcXVl dWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjdl93b3JrOworCXN0cnVjdCB3 b3JrX3N0cnVjdCBzZW5kX3dvcms7CisJc3RydWN0IHdvcmtfc3RydWN0IHNlbmRfbXNnX3dvcms7 CisKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfZXZlbnRfcXVldWUgKmV2cTsKK307CisKK3N0YXRp YyB2aXJ0aW9fdmRtYWJ1Zl9idWZfaWRfdCBnZXRfYnVmX2lkKHN0cnVjdCB2aXJ0aW9fdmRtYWJ1 ZiAqdmRtYWJ1ZikKK3sKKwl2aXJ0aW9fdmRtYWJ1Zl9idWZfaWRfdCBidWZfaWQgPSB7MCwgezAs IDB9IH07CisJc3RhdGljIGludCBjb3VudCA9IDA7CisKKwljb3VudCA9IGNvdW50IDwgVklSVElP X1ZETUFCVUZfTUFYX0lEID8gY291bnQgKyAxIDogMDsKKwlidWZfaWQuaWQgPSBORVdfQlVGX0lE X0dFTih2ZG1hYnVmLT52bWlkLCBjb3VudCk7CisKKwkvKiByYW5kb20gZGF0YSBlbWJlZGRlZCBp biB0aGUgaWQgZm9yIHNlY3VyaXR5ICovCisJZ2V0X3JhbmRvbV9ieXRlcygmYnVmX2lkLnJuZ19r ZXlbMF0sIDgpOworCisJcmV0dXJuIGJ1Zl9pZDsKK30KKworLyogc2hhcmluZyBwYWdlcyBmb3Ig b3JpZ2luYWwgRE1BQlVGIHdpdGggSG9zdCAqLworc3RhdGljIHN0cnVjdCB2aXJ0aW9fdmRtYWJ1 Zl9zaGFyZWRfcGFnZXMKKyp2aXJ0aW9fdmRtYWJ1Zl9zaGFyZV9idWYoc3RydWN0IHBhZ2UgKipw YWdlcywgaW50IG5lbnRzLAorCQkJICBpbnQgZmlyc3Rfb2ZzdCwgaW50IGxhc3RfbGVuKQorewor CXN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9zaGFyZWRfcGFnZXMgKnBhZ2VzX2luZm87CisJaW50IGk7 CisJaW50IG5fbDJyZWZzID0gbmVudHMvUkVGU19QRVJfUEFHRSArCisJCSAgICAgICAoKG5lbnRz ICUgUkVGU19QRVJfUEFHRSkgPyAxIDogMCk7CisKKwlwYWdlc19pbmZvID0ga3ZjYWxsb2MoMSwg c2l6ZW9mKCpwYWdlc19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlc19pbmZvKQorCQly ZXR1cm4gTlVMTDsKKworCXBhZ2VzX2luZm8tPnBhZ2VzID0gcGFnZXM7CisJcGFnZXNfaW5mby0+ bmVudHMgPSBuZW50czsKKwlwYWdlc19pbmZvLT5maXJzdF9vZnN0ID0gZmlyc3Rfb2ZzdDsKKwlw YWdlc19pbmZvLT5sYXN0X2xlbiA9IGxhc3RfbGVuOworCXBhZ2VzX2luZm8tPmwzcmVmcyA9IChn cGFfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKworCWlmICghcGFnZXNfaW5mby0+ bDNyZWZzKSB7CisJCWt2ZnJlZShwYWdlc19pbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ cGFnZXNfaW5mby0+bDJyZWZzID0gKGdwYV90ICoqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5F TCwKKwkJCQkJZ2V0X29yZGVyKG5fbDJyZWZzICogUEFHRV9TSVpFKSk7CisKKwlpZiAoIXBhZ2Vz X2luZm8tPmwycmVmcykgeworCQlmcmVlX3BhZ2UoKGdwYV90KXBhZ2VzX2luZm8tPmwzcmVmcyk7 CisJCWt2ZnJlZShwYWdlc19pbmZvKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogU2hhcmUg cGh5c2ljYWwgYWRkcmVzcyBvZiBwYWdlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuZW50czsgaSsr KQorCQlwYWdlc19pbmZvLT5sMnJlZnNbaV0gPSAoZ3BhX3QgKilwYWdlX3RvX3BoeXMocGFnZXNb aV0pOworCisJZm9yIChpID0gMDsgaSA8IG5fbDJyZWZzOyBpKyspCisJCXBhZ2VzX2luZm8tPmwz cmVmc1tpXSA9CisJCQl2aXJ0X3RvX3BoeXMoKHZvaWQgKilwYWdlc19pbmZvLT5sMnJlZnMgKwor CQkJCSAgICAgaSAqIFBBR0VfU0laRSk7CisKKwlwYWdlc19pbmZvLT5yZWYgPSAoZ3BhX3Qpdmly dF90b19waHlzKHBhZ2VzX2luZm8tPmwzcmVmcyk7CisKKwlyZXR1cm4gcGFnZXNfaW5mbzsKK30K KworLyogc3RvcCBzaGFyaW5nIHBhZ2VzICovCitzdGF0aWMgdm9pZAordmlydGlvX3ZkbWFidWZf ZnJlZV9idWYoc3RydWN0IHZpcnRpb192ZG1hYnVmX3NoYXJlZF9wYWdlcyAqcGFnZXNfaW5mbykK K3sKKwlpbnQgbl9sMnJlZnMgPSAocGFnZXNfaW5mby0+bmVudHMvUkVGU19QRVJfUEFHRSArCisJ CSAgICAgICAoKHBhZ2VzX2luZm8tPm5lbnRzICUgUkVGU19QRVJfUEFHRSkgPyAxIDogMCkpOwor CisJZnJlZV9wYWdlcygoZ3BhX3QpcGFnZXNfaW5mby0+bDJyZWZzLCBnZXRfb3JkZXIobl9sMnJl ZnMgKiBQQUdFX1NJWkUpKTsKKwlmcmVlX3BhZ2UoKGdwYV90KXBhZ2VzX2luZm8tPmwzcmVmcyk7 CisKKwlrdmZyZWUocGFnZXNfaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgc2VuZF9tc2dfdG9faG9z dChlbnVtIHZpcnRpb192ZG1hYnVmX2NtZCBjbWQsIGludCAqb3ApCit7CisJc3RydWN0IHZpcnRp b192ZG1hYnVmICp2ZG1hYnVmID0gZHJ2X2luZm8tPnByaXY7CisJc3RydWN0IHZpcnRpb192ZG1h YnVmX21zZyAqbXNnOworCWludCBpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJUlRJT19W RE1BQlVGX0NNRF9ORUVEX1ZNSUQ6CisJCW1zZyA9IGt2Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qg dmlydGlvX3ZkbWFidWZfbXNnKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtc2cp CisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAob3ApCisJCQlmb3IgKGkgPSAwOyBpIDwgNDsg aSsrKQorCQkJCW1zZy0+b3BbaV0gPSBvcFtpXTsKKwkJYnJlYWs7CisKKwljYXNlIFZJUlRJT19W RE1BQlVGX0NNRF9FWFBPUlQ6CisJCW1zZyA9IGt2Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgdmly dGlvX3ZkbWFidWZfbXNnKSwKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtc2cpCisJ CQlyZXR1cm4gLUVOT01FTTsKKworCQltZW1jcHkoJm1zZy0+b3BbMF0sICZvcFswXSwgOSAqIHNp emVvZihpbnQpICsgb3BbOV0pOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qIG5vIGNvbW1h bmQgZm91bmQgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXNnLT5jbWQgPSBjbWQ7CisJ bGlzdF9hZGRfdGFpbCgmbXNnLT5saXN0LCAmdmRtYWJ1Zi0+bXNnX2xpc3QpOworCXF1ZXVlX3dv cmsodmRtYWJ1Zi0+d3EsICZ2ZG1hYnVmLT5zZW5kX21zZ193b3JrKTsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGFkZF9ldmVudF9idWZfcmVsKHN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9i dWYgKmJ1Zl9pbmZvKQoreworCXN0cnVjdCB2aXJ0aW9fdmRtYWJ1ZiAqdmRtYWJ1ZiA9IGRydl9p bmZvLT5wcml2OworCXN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9ldmVudCAqZV9vbGRlc3QsICplX25l dzsKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfZXZlbnRfcXVldWUgKmVxID0gdmRtYWJ1Zi0+ZXZx OworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CisKKwllX25ldyA9IGt2emFsbG9jKHNpemVvZigq ZV9uZXcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVfbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWVfbmV3LT5lX2RhdGEuaGRyLmJ1Zl9pZCA9IGJ1Zl9pbmZvLT5idWZfaWQ7CisJZV9uZXctPmVf ZGF0YS5kYXRhID0gKHZvaWQgKilidWZfaW5mby0+cHJpdjsKKwllX25ldy0+ZV9kYXRhLmhkci5z aXplID0gYnVmX2luZm8tPnN6X3ByaXY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXEtPmVfbG9j aywgaXJxZmxhZ3MpOworCisJLyogY2hlY2sgY3VycmVudCBudW1iZXIgb2YgZXZlbnRzIGFuZCBp ZiBpdCBoaXRzIHRoZSBtYXggbnVtICgzMikKKwkgKiB0aGVuIHJlbW92ZSB0aGUgb2xkZXN0IGV2 ZW50IGluIHRoZSBsaXN0CisJICovCisJaWYgKGVxLT5wZW5kaW5nID4gMzEpIHsKKwkJZV9vbGRl c3QgPSBsaXN0X2ZpcnN0X2VudHJ5KCZlcS0+ZV9saXN0LAorCQkJCQkgICAgc3RydWN0IHZpcnRp b192ZG1hYnVmX2V2ZW50LCBsaW5rKTsKKwkJbGlzdF9kZWwoJmVfb2xkZXN0LT5saW5rKTsKKwkJ ZXEtPnBlbmRpbmctLTsKKwkJa3ZmcmVlKGVfb2xkZXN0KTsKKwl9CisKKwlsaXN0X2FkZF90YWls KCZlX25ldy0+bGluaywgJmVxLT5lX2xpc3QpOworCisJZXEtPnBlbmRpbmcrKzsKKworCXdha2Vf dXBfaW50ZXJydXB0aWJsZSgmZXEtPmVfd2FpdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZXEtPmVfbG9jaywgaXJxZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZp cnRpb192ZG1hYnVmX2NsZWFyX2J1ZihzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfYnVmICpleHApCit7 CisJLyogU3RhcnQgY2xlYW51cCBvZiBidWZmZXIgaW4gcmV2ZXJzZSBvcmRlciB0byBleHBvcnRp bmcgKi8KKwl2aXJ0aW9fdmRtYWJ1Zl9mcmVlX2J1ZihleHAtPnBhZ2VzX2luZm8pOworCisJZG1h X2J1Zl91bm1hcF9hdHRhY2htZW50KGV4cC0+YXR0YWNoLCBleHAtPnNndCwKKwkJCQkgRE1BX0JJ RElSRUNUSU9OQUwpOworCisJaWYgKGV4cC0+ZG1hX2J1ZikgeworCQlkbWFfYnVmX2RldGFjaChl eHAtPmRtYV9idWYsIGV4cC0+YXR0YWNoKTsKKwkJLyogY2xvc2UgY29ubmVjdGlvbiB0byBkbWEt YnVmIGNvbXBsZXRlbHkgKi8KKwkJZG1hX2J1Zl9wdXQoZXhwLT5kbWFfYnVmKTsKKwkJZXhwLT5k bWFfYnVmID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2J1ZihzdHJ1Y3Qgdmly dGlvX3ZkbWFidWYgKnZkbWFidWYsCisJCSAgICAgIHN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9idWYg KmV4cCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gYWRkX2V2ZW50X2J1Zl9yZWwoZXhwKTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmlydGlvX3ZkbWFidWZfY2xlYXJfYnVmKGV4cCk7 CisKKwlyZXQgPSB2aXJ0aW9fdmRtYWJ1Zl9kZWxfYnVmKGRydl9pbmZvLCAmZXhwLT5idWZfaWQp OworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoZXhwLT5zel9wcml2ID4gMCAmJiAh ZXhwLT5wcml2KQorCQlrdmZyZWUoZXhwLT5wcml2KTsKKworCWt2ZnJlZShleHApOworCXJldHVy biAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX21zZ19mcm9tX2hvc3Qoc3RydWN0IHZpcnRpb192 ZG1hYnVmICp2ZG1hYnVmLAorCQkgICAgIAkgICAgICAgc3RydWN0IHZpcnRpb192ZG1hYnVmX21z ZyAqbXNnKQoreworCXN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9idWYgKmV4cDsKKwl2aXJ0aW9fdmRt YWJ1Zl9idWZfaWRfdCBidWZfaWQ7CisJaW50IHJldDsKKworCXN3aXRjaCAobXNnLT5jbWQpIHsK KwljYXNlIFZJUlRJT19WRE1BQlVGX0NNRF9ORUVEX1ZNSUQ6CisJCXZkbWFidWYtPnZtaWQgPSBt c2ctPm9wWzBdOworCisJCWJyZWFrOworCWNhc2UgVklSVElPX1ZETUFCVUZfQ01EX0RNQUJVRl9S RUw6CisJCW1lbWNweSgmYnVmX2lkLCBtc2ctPm9wLCBzaXplb2YoYnVmX2lkKSk7CisKKwkJZXhw ID0gdmlydGlvX3ZkbWFidWZfZmluZF9idWYoZHJ2X2luZm8sICZidWZfaWQpOworCQlpZiAoIWV4 cCkgeworCQkJZGV2X2VycihkcnZfaW5mby0+ZGV2LCAiY2FuJ3QgZmluZCBidWZmZXJcbiIpOwor CQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlyZXQgPSByZW1vdmVfYnVmKHZkbWFidWYsIGV4 cCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWJyZWFrOworCWNhc2UgVklSVElP X1ZETUFCVUZfQ01EX0VYUE9SVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkcnZf aW5mby0+ZGV2LCAiZW1wdHkgY21kXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb192ZG1hYnVmX3JlY3Zfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZpcnRpb192ZG1hYnVmICp2ZG1hYnVmID0K KwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aXJ0aW9fdmRtYWJ1ZiwgcmVjdl93b3JrKTsK KwlzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZkbWFidWYtPnZxc1tWRE1BQlVGX1ZRX1JFQ1ZdOwor CXN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9tc2cgKm1zZzsKKwlpbnQgc3o7CisKKwltdXRleF9sb2Nr KCZ2ZG1hYnVmLT5yZWN2X2xvY2spOworCisJZG8geworCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2 cSk7CisJCWZvciAoOzspIHsKKwkJCW1zZyA9IHZpcnRxdWV1ZV9nZXRfYnVmKHZxLCAmc3opOwor CQkJaWYgKCFtc2cpCisJCQkJYnJlYWs7CisKKwkJCS8qIHZhbGlkIHNpemUgKi8KKwkJCWlmIChz eiA9PSBzaXplb2Yoc3RydWN0IHZpcnRpb192ZG1hYnVmX21zZykpIHsKKwkJCQlpZiAocGFyc2Vf bXNnX2Zyb21faG9zdCh2ZG1hYnVmLCBtc2cpKQorCQkJCQlkZXZfZXJyKGRydl9pbmZvLT5kZXYs CisJCQkJCQkibXNnIHBhcnNlIGVycm9yXG4iKTsKKworCQkJCWt2ZnJlZShtc2cpOworCQkJfSBl bHNlIHsKKwkJCQlkZXZfZXJyKGRydl9pbmZvLT5kZXYsCisJCQkJCSJyZWNlaXZlZCBtYWxmb3Jt ZWQgbWVzc2FnZVxuIik7CisJCQl9CisJCX0KKwl9IHdoaWxlICghdmlydHF1ZXVlX2VuYWJsZV9j Yih2cSkpOworCisJbXV0ZXhfdW5sb2NrKCZ2ZG1hYnVmLT5yZWN2X2xvY2spOworfQorCitzdGF0 aWMgdm9pZCB2aXJ0aW9fdmRtYWJ1Zl9maWxsX3JlY3ZfbXNnKHN0cnVjdCB2aXJ0aW9fdmRtYWJ1 ZiAqdmRtYWJ1ZikKK3sKKwlzdHJ1Y3QgdmlydHF1ZXVlICp2cSA9IHZkbWFidWYtPnZxc1tWRE1B QlVGX1ZRX1JFQ1ZdOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlzdHJ1Y3QgdmlydGlvX3Zk bWFidWZfbXNnICptc2c7CisJaW50IHJldDsKKworCW1zZyA9IGt2emFsbG9jKHNpemVvZigqbXNn KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCXNnX2luaXRfb25lKCZz ZywgbXNnLCBzaXplb2Yoc3RydWN0IHZpcnRpb192ZG1hYnVmX21zZykpOworCXJldCA9IHZpcnRx dWV1ZV9hZGRfaW5idWYodnEsICZzZywgMSwgbXNnLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0KQor CQlyZXR1cm47CisKKwl2aXJ0cXVldWVfa2ljayh2cSk7Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRp b192ZG1hYnVmX3NlbmRfbXNnX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0 cnVjdCB2aXJ0aW9fdmRtYWJ1ZiAqdmRtYWJ1ZiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgdmlydGlvX3ZkbWFidWYsIHNlbmRfbXNnX3dvcmspOworCXN0cnVjdCB2aXJ0cXVldWUgKnZx ID0gdmRtYWJ1Zi0+dnFzW1ZETUFCVUZfVlFfU0VORF07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNn OworCXN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9tc2cgKm1zZzsKKwlib29sIGFkZGVkID0gZmFsc2U7 CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnZkbWFidWYtPnNlbmRfbG9jayk7CisKKwlmb3Ig KDs7KSB7CisJCWlmIChsaXN0X2VtcHR5KCZ2ZG1hYnVmLT5tc2dfbGlzdCkpCisJCQlicmVhazsK KworCQl2aXJ0aW9fdmRtYWJ1Zl9maWxsX3JlY3ZfbXNnKHZkbWFidWYpOworCisJCW1zZyA9IGxp c3RfZmlyc3RfZW50cnkoJnZkbWFidWYtPm1zZ19saXN0LAorCQkJCSAgICAgICBzdHJ1Y3Qgdmly dGlvX3ZkbWFidWZfbXNnLCBsaXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmbXNnLT5saXN0KTsKKwor CQlzZ19pbml0X29uZSgmc2csIG1zZywgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9tc2cp KTsKKwkJcmV0ID0gdmlydHF1ZXVlX2FkZF9vdXRidWYodnEsICZzZywgMSwgbXNnLCBHRlBfS0VS TkVMKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZHJ2X2luZm8tPmRldiwKKwkJCQki ZmFpbGVkIHRvIGFkZCBtc2cgdG8gdnFcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQlhZGRlZCA9 IHRydWU7CQorCX0KKworCWlmIChhZGRlZCkKKwkJdmlydHF1ZXVlX2tpY2sodnEpOworCisJbXV0 ZXhfdW5sb2NrKCZ2ZG1hYnVmLT5zZW5kX2xvY2spOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9f dmRtYWJ1Zl9zZW5kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2 aXJ0aW9fdmRtYWJ1ZiAqdmRtYWJ1ZiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmly dGlvX3ZkbWFidWYsIHNlbmRfd29yayk7CisJc3RydWN0IHZpcnRxdWV1ZSAqdnEgPSB2ZG1hYnVm LT52cXNbVkRNQUJVRl9WUV9TRU5EXTsKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfbXNnICptc2c7 CisJdW5zaWduZWQgaW50IHN6OworCWJvb2wgYWRkZWQgPSBmYWxzZTsKKworCW11dGV4X2xvY2so JnZkbWFidWYtPnNlbmRfbG9jayk7CisKKwlkbyB7CisJCXZpcnRxdWV1ZV9kaXNhYmxlX2NiKHZx KTsKKworCQlmb3IgKDs7KSB7CisJCQltc2cgPSB2aXJ0cXVldWVfZ2V0X2J1Zih2cSwgJnN6KTsK KwkJCWlmICghbXNnKQorCQkJCWJyZWFrOworCisJCQlpZiAocGFyc2VfbXNnX2Zyb21faG9zdCh2 ZG1hYnVmLCBtc2cpKQorCQkJCWRldl9lcnIoZHJ2X2luZm8tPmRldiwKKwkJCQkJIm1zZyBwYXJz ZSBlcnJvclxuIik7CisKKwkJCWt2ZnJlZShtc2cpOworCQkJYWRkZWQgPSB0cnVlOworCQl9CisJ fSB3aGlsZSAoIXZpcnRxdWV1ZV9lbmFibGVfY2IodnEpKTsKKworCW11dGV4X3VubG9jaygmdmRt YWJ1Zi0+c2VuZF9sb2NrKTsKKworCWlmIChhZGRlZCkKKwkJcXVldWVfd29yayh2ZG1hYnVmLT53 cSwgJnZkbWFidWYtPnNlbmRfbXNnX3dvcmspOworfQorCitzdGF0aWMgdm9pZCB2aXJ0aW9fdmRt YWJ1Zl9yZWN2X2NiKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCB2aXJ0aW9fdmRt YWJ1ZiAqdmRtYWJ1ZiA9IHZxLT52ZGV2LT5wcml2OworCisJaWYgKCF2ZG1hYnVmKQorCQlyZXR1 cm47CisKKwlxdWV1ZV93b3JrKHZkbWFidWYtPndxLCAmdmRtYWJ1Zi0+cmVjdl93b3JrKTsKK30K Kworc3RhdGljIHZvaWQgdmlydGlvX3ZkbWFidWZfc2VuZF9jYihzdHJ1Y3QgdmlydHF1ZXVlICp2 cSkKK3sKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWYgKnZkbWFidWYgPSB2cS0+dmRldi0+cHJpdjsK KworCWlmICghdmRtYWJ1ZikKKwkJcmV0dXJuOworCisJcXVldWVfd29yayh2ZG1hYnVmLT53cSwg JnZkbWFidWYtPnNlbmRfd29yayk7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2FsbF9idWZzKHN0 cnVjdCB2aXJ0aW9fdmRtYWJ1ZiAqdmRtYWJ1ZikKK3sKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZf YnVmICpmb3VuZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOworCWludCBia3Q7CisJaW50IHJl dDsKKworCWhhc2hfZm9yX2VhY2hfc2FmZShkcnZfaW5mby0+YnVmX2xpc3QsIGJrdCwgdG1wLCBm b3VuZCwgbm9kZSkgeworCQlyZXQgPSByZW1vdmVfYnVmKHZkbWFidWYsIGZvdW5kKTsKKwkJaWYg KHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg dmlydGlvX3ZkbWFidWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmls cCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFkcnZfaW5mbykgeworCQlwcl9lcnIoInZpcnRpbyB2 ZG1hYnVmIGRyaXZlciBpcyBub3QgcmVhZHlcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK KwlyZXQgPSBzZW5kX21zZ190b19ob3N0KFZJUlRJT19WRE1BQlVGX0NNRF9ORUVEX1ZNSUQsIDAp OworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRydl9pbmZvLT5kZXYsICJmYWlsIHRvIHJlY2Vp dmUgdm1pZFxuIik7CisKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSBkcnZfaW5mby0+cHJpdjsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpcnRpb192ZG1hYnVmX3JlbGVhc2Uoc3RydWN0 IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKKy8q IE5vdGlmeSBIb3N0IGFib3V0IHRoZSBuZXcgdmRtYWJ1ZiAqLworc3RhdGljIGludCBleHBvcnRf bm90aWZ5KHN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9idWYgKmV4cCwgc3RydWN0IHBhZ2UgKipwYWdl cykKK3sKKwlpbnQgKm9wOworCWludCByZXQ7CisKKwlvcCA9IGt2Y2FsbG9jKDEsIHNpemVvZihp bnQpICogNjUsIEdGUF9LRVJORUwpOworCWlmICghb3ApCisJCXJldHVybiAtRU5PTUVNOworCisJ bWVtY3B5KG9wLCAmZXhwLT5idWZfaWQsIHNpemVvZihleHAtPmJ1Zl9pZCkpOworCisJLyogaWYg bmV3IHBhZ2VzIGFyZSB0byBiZSBzaGFyZWQgKi8KKwlpZiAocGFnZXMpIHsKKwkJb3BbNF0gPSBl eHAtPnBhZ2VzX2luZm8tPm5lbnRzOworCQlvcFs1XSA9IGV4cC0+cGFnZXNfaW5mby0+Zmlyc3Rf b2ZzdDsKKwkJb3BbNl0gPSBleHAtPnBhZ2VzX2luZm8tPmxhc3RfbGVuOworCisJCW1lbWNweSgm b3BbN10sICZleHAtPnBhZ2VzX2luZm8tPnJlZiwgc2l6ZW9mKGdwYV90KSk7CisJfQorCisJb3Bb OV0gPSBleHAtPnN6X3ByaXY7CisKKwkvKiBkcml2ZXIvYXBwbGljYXRpb24gc3BlY2lmaWMgcHJp dmF0ZSBpbmZvICovCisJbWVtY3B5KCZvcFsxMF0sIGV4cC0+cHJpdiwgb3BbOV0pOworCisJcmV0 ID0gc2VuZF9tc2dfdG9faG9zdChWSVJUSU9fVkRNQUJVRl9DTURfRVhQT1JULCBvcCk7CisKKwlr dmZyZWUob3ApOworCXJldHVybiByZXQ7Cit9CisKKy8qIHJldHVybiB0b3RhbCBudW1iZXIgb2Yg cGFnZXMgcmVmZXJlbmNlZCBieSBhIHNndAorICogZm9yIHByZS1jYWxjdWxhdGlvbiBvZiAjIG9m IHBhZ2VzIGJlaGluZCBhIGdpdmVuIHNndAorICovCitzdGF0aWMgaW50IG51bV9wZ3Moc3RydWN0 IHNnX3RhYmxlICpzZ3QpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2w7CisJaW50IGxlbiwg aTsKKwkvKiBhdCBsZWFzdCBvbmUgcGFnZSAqLworCWludCBuX3BncyA9IDE7CisKKwlzZ2wgPSBz Z3QtPnNnbDsKKworCWxlbiA9IHNnbC0+bGVuZ3RoIC0gUEFHRV9TSVpFICsgc2dsLT5vZmZzZXQ7 CisKKwkvKiByb3VuZC11cCAqLworCW5fcGdzICs9ICgobGVuICsgUEFHRV9TSVpFIC0gMSkvUEFH RV9TSVpFKTsKKworCWZvciAoaSA9IDE7IGkgPCBzZ3QtPm5lbnRzOyBpKyspIHsKKwkJc2dsID0g c2dfbmV4dChzZ2wpOworCisJCS8qIHJvdW5kLXVwICovCisJCW5fcGdzICs9ICgoc2dsLT5sZW5n dGggKyBQQUdFX1NJWkUgLSAxKSAvCisJCQkgIFBBR0VfU0laRSk7IC8qIHJvdW5kLXVwICovCisJ fQorCisJcmV0dXJuIG5fcGdzOworfQorCisvKiBleHRyYWN0IHBhZ2VzIHJlZmVyZW5jZWQgYnkg c2d0ICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKipleHRyX3BncyhzdHJ1Y3Qgc2dfdGFibGUgKnNn dCwgaW50ICpuZW50cywgaW50ICpsYXN0X2xlbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn bDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBwYWdlICoqdGVtcF9wZ3M7CisJaW50 IGksIGo7CisJaW50IGxlbjsKKworCSpuZW50cyA9IG51bV9wZ3Moc2d0KTsKKwlwYWdlcyA9CWt2 bWFsbG9jX2FycmF5KCpuZW50cywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsK KwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gTlVMTDsKKworCXNnbCA9IHNndC0+c2dsOworCisJdGVt cF9wZ3MgPSBwYWdlczsKKwkqdGVtcF9wZ3MrKyA9IHNnX3BhZ2Uoc2dsKTsKKwlsZW4gPSBzZ2wt Pmxlbmd0aCAtIFBBR0VfU0laRSArIHNnbC0+b2Zmc2V0OworCisJaSA9IDE7CisJd2hpbGUgKGxl biA+IDApIHsKKwkJKnRlbXBfcGdzKysgPSBudGhfcGFnZShzZ19wYWdlKHNnbCksIGkrKyk7CisJ CWxlbiAtPSBQQUdFX1NJWkU7CisJfQorCisJZm9yIChpID0gMTsgaSA8IHNndC0+bmVudHM7IGkr KykgeworCQlzZ2wgPSBzZ19uZXh0KHNnbCk7CisJCSp0ZW1wX3BncysrID0gc2dfcGFnZShzZ2wp OworCQlsZW4gPSBzZ2wtPmxlbmd0aCAtIFBBR0VfU0laRTsKKwkJaiA9IDE7CisKKwkJd2hpbGUg KGxlbiA+IDApIHsKKwkJCSp0ZW1wX3BncysrID0gbnRoX3BhZ2Uoc2dfcGFnZShzZ2wpLCBqKysp OworCQkJbGVuIC09IFBBR0VfU0laRTsKKwkJfQorCX0KKworCSpsYXN0X2xlbiA9IGxlbiArIFBB R0VfU0laRTsKKworCXJldHVybiBwYWdlczsKK30KKworLyogaW9jdGwgLSBleHBvcnRpbmcgbmV3 IHZkbWFidWYKKyAqCisgKgkgaW50IGRtYWJ1Zl9mZCAtIEZpbGUgaGFuZGxlIG9mIG9yaWdpbmFs IERNQUJVRgorICoJIHZpcnRpb192ZG1hYnVmX2J1Zl9pZF90IGJ1Zl9pZCAtIHJldHVybmVkIHZk bWFidWYgSUQKKyAqCSBpbnQgc3pfcHJpdiAtIHNpemUgb2YgcHJpdmF0ZSBkYXRhIGZyb20gdXNl cnNwYWNlCisgKgkgY2hhciAqcHJpdiAtIGJ1ZmZlciBvZiB1c2VyIHByaXZhdGUgZGF0YQorICoK KyAqLworc3RhdGljIGludCBleHBvcnRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRh dGEpCit7CisJc3RydWN0IHZpcnRpb192ZG1hYnVmICp2ZG1hYnVmID0gZHJ2X2luZm8tPnByaXY7 CisJc3RydWN0IHZpcnRpb192ZG1hYnVmX2V4cG9ydCAqYXR0ciA9IGRhdGE7CisJc3RydWN0IGRt YV9idWYgKmRtYWJ1ZjsKKwlzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2g7CisJc3Ry dWN0IHNnX3RhYmxlICpzZ3Q7CisJc3RydWN0IHZpcnRpb192ZG1hYnVmX2J1ZiAqZXhwOworCXN0 cnVjdCBwYWdlICoqcGFnZXM7CisJaW50IG5lbnRzLCBsYXN0X2xlbjsKKwl2aXJ0aW9fdmRtYWJ1 Zl9idWZfaWRfdCBidWZfaWQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAodmRtYWJ1Zi0+dm1pZCA8 PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGF0dHItPmZk KTsKKwlpZiAoSVNfRVJSKGRtYWJ1ZikpCisJCXJldHVybiBQVFJfRVJSKGRtYWJ1Zik7CisKKwlt dXRleF9sb2NrKCZkcnZfaW5mby0+Z19tdXRleCk7CisKKwlidWZfaWQgPSBnZXRfYnVmX2lkKHZk bWFidWYpOworCisJYXR0YWNoID0gZG1hX2J1Zl9hdHRhY2goZG1hYnVmLCBkcnZfaW5mby0+ZGV2 KTsKKwlpZiAoSVNfRVJSKGF0dGFjaCkpIHsKKwkJcmV0ID0gUFRSX0VSUihhdHRhY2gpOworCQln b3RvIGZhaWxfYXR0YWNoOworCX0KKworCXNndCA9IGRtYV9idWZfbWFwX2F0dGFjaG1lbnQoYXR0 YWNoLCBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKElTX0VSUihzZ3QpKSB7CisJCXJldCA9IFBU Ul9FUlIoc2d0KTsKKwkJZ290byBmYWlsX21hcF9hdHRhY2htZW50OworCX0KKworCS8qIGFsbG9j YXRlIGEgbmV3IGV4cCAqLworCWV4cCA9IGt2Y2FsbG9jKDEsIHNpemVvZigqZXhwKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFleHApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX3NndF9p bmZvX2NyZWF0aW9uOworCX0KKworCS8qIHBvc3NpYmxlIHRydW5jYXRpb24gKi8KKwlpZiAoYXR0 ci0+c3pfcHJpdiA+IE1BWF9TSVpFX1BSSVZfREFUQSkKKwkJZXhwLT5zel9wcml2ID0gTUFYX1NJ WkVfUFJJVl9EQVRBOworCWVsc2UKKwkJZXhwLT5zel9wcml2ID0gYXR0ci0+c3pfcHJpdjsKKwor CS8qIGNyZWF0aW5nIGJ1ZmZlciBmb3IgcHJpdmF0ZSBkYXRhICovCisJaWYgKGV4cC0+c3pfcHJp diAhPSAwKSB7CisJCWV4cC0+cHJpdiA9IGt2Y2FsbG9jKDEsIGV4cC0+c3pfcHJpdiwgR0ZQX0tF Uk5FTCk7CisJCWlmICghZXhwLT5wcml2KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBm YWlsX3ByaXZfY3JlYXRpb247CisJCX0KKwl9CisKKwlleHAtPmJ1Zl9pZCA9IGJ1Zl9pZDsKKwll eHAtPmF0dGFjaCA9IGF0dGFjaDsKKwlleHAtPnNndCA9IHNndDsKKwlleHAtPmRtYV9idWYgPSBk bWFidWY7CisJZXhwLT52YWxpZCA9IDE7CisKKwlpZiAoZXhwLT5zel9wcml2KSB7CisJCS8qIGNv cHkgcHJpdmF0ZSBkYXRhIHRvIHNndF9pbmZvICovCisJCXJldCA9IGNvcHlfZnJvbV91c2VyKGV4 cC0+cHJpdiwgYXR0ci0+cHJpdiwgZXhwLT5zel9wcml2KTsKKwkJaWYgKHJldCkgeworCQkJcmV0 ID0gLUVJTlZBTDsKKwkJCWdvdG8gZmFpbF9leHA7CisJCX0KKwl9CisKKwlwYWdlcyA9IGV4dHJf cGdzKHNndCwgJm5lbnRzLCAmbGFzdF9sZW4pOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCXJl dCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9leHA7CisJfQorCisJZXhwLT5wYWdlc19pbmZvID0g dmlydGlvX3ZkbWFidWZfc2hhcmVfYnVmKHBhZ2VzLCBuZW50cywKKwkJCQkJCSAgIHNndC0+c2ds LT5vZmZzZXQsCisJCQkJCSAJICAgbGFzdF9sZW4pOworCWlmICghZXhwLT5wYWdlc19pbmZvKSB7 CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9jcmVhdGVfcGFnZXNfaW5mbzsKKwl9CisK KwlhdHRyLT5idWZfaWQgPSBleHAtPmJ1Zl9pZDsKKwlyZXQgPSBleHBvcnRfbm90aWZ5KGV4cCwg cGFnZXMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxfc2VuZF9yZXF1ZXN0OworCisJLyog bm93IHJlZ2lzdGVyIGl0IHRvIHRoZSBleHBvcnQgbGlzdCAqLworCXZpcnRpb192ZG1hYnVmX2Fk ZF9idWYoZHJ2X2luZm8sIGV4cCk7CisKKwlleHAtPmZpbHAgPSBmaWxwOworCisJbXV0ZXhfdW5s b2NrKCZkcnZfaW5mby0+Z19tdXRleCk7CisKKwlyZXR1cm4gcmV0OworCisvKiBDbGVhbi11cCBp ZiBlcnJvciBvY2N1cnMgKi8KK2ZhaWxfc2VuZF9yZXF1ZXN0OgorCXZpcnRpb192ZG1hYnVmX2Zy ZWVfYnVmKGV4cC0+cGFnZXNfaW5mbyk7CisKK2ZhaWxfY3JlYXRlX3BhZ2VzX2luZm86CisJa3Zm cmVlKHBhZ2VzKTsKKworZmFpbF9leHA6CisJa3ZmcmVlKGV4cC0+cHJpdik7CisKK2ZhaWxfcHJp dl9jcmVhdGlvbjoKKwlrdmZyZWUoZXhwKTsKKworZmFpbF9zZ3RfaW5mb19jcmVhdGlvbjoKKwlk bWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoYXR0YWNoLCBzZ3QsCisJCQkJIERNQV9CSURJUkVDVElP TkFMKTsKKworZmFpbF9tYXBfYXR0YWNobWVudDoKKwlkbWFfYnVmX2RldGFjaChkbWFidWYsIGF0 dGFjaCk7CisKK2ZhaWxfYXR0YWNoOgorCWRtYV9idWZfcHV0KGRtYWJ1Zik7CisKKwltdXRleF91 bmxvY2soJmRydl9pbmZvLT5nX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfaW9jdGxfZGVzYyB2aXJ0aW9fdmRtYWJ1Zl9pb2N0 bHNbXSA9IHsKKwlWSVJUSU9fVkRNQUJVRl9JT0NUTF9ERUYoVklSVElPX1ZETUFCVUZfSU9DVExf RVhQT1JULCBleHBvcnRfaW9jdGwsIDApLAorfTsKKworc3RhdGljIGxvbmcgdmlydGlvX3ZkbWFi dWZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgICAJ CSB1bnNpZ25lZCBsb25nIHBhcmFtKQoreworCWNvbnN0IHN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9p b2N0bF9kZXNjICppb2N0bCA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5yID0gX0lPQ19OUihjbWQp OworCWludCByZXQ7CisJdmlydGlvX3ZkbWFidWZfaW9jdGxfdCBmdW5jOworCWNoYXIgKmtkYXRh OworCisJaWYgKG5yID49IEFSUkFZX1NJWkUodmlydGlvX3ZkbWFidWZfaW9jdGxzKSkgeworCQlk ZXZfZXJyKGRydl9pbmZvLT5kZXYsICJpbnZhbGlkIGlvY3RsXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJaW9jdGwgPSAmdmlydGlvX3ZkbWFidWZfaW9jdGxzW25yXTsKKworCWZ1bmMg PSBpb2N0bC0+ZnVuYzsKKworCWlmICh1bmxpa2VseSghZnVuYykpIHsKKwkJZGV2X2VycihkcnZf aW5mby0+ZGV2LCAibm8gZnVuY3Rpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlr ZGF0YSA9IGt2bWFsbG9jKF9JT0NfU0laRShjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWtkYXRh KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihrZGF0YSwgKHZvaWQg X191c2VyICopcGFyYW0sCisJCQkgICBfSU9DX1NJWkUoY21kKSkgIT0gMCkgeworCQlkZXZfZXJy KGRydl9pbmZvLT5kZXYsCisJCQkiZmFpbGVkIHRvIGNvcHkgZnJvbSB1c2VyIGFyZ3VtZW50c1xu Iik7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gaW9jdGxfZXJyb3I7CisJfQorCisJcmV0ID0g ZnVuYyhmaWxwLCBrZGF0YSk7CisKKwlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKXBh cmFtLCBrZGF0YSwKKwkJCSBfSU9DX1NJWkUoY21kKSkgIT0gMCkgeworCQlkZXZfZXJyKGRydl9p bmZvLT5kZXYsCisJCQkiZmFpbGVkIHRvIGNvcHkgdG8gdXNlciBhcmd1bWVudHNcbiIpOworCQly ZXQgPSAtRUZBVUxUOworCQlnb3RvIGlvY3RsX2Vycm9yOworCX0KKworaW9jdGxfZXJyb3I6CisJ a3ZmcmVlKGtkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHZp cnRpb192ZG1hYnVmX2V2ZW50X3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgCSAgICAJ ICAgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQoreworCXN0cnVjdCB2aXJ0aW9f dmRtYWJ1ZiAqdmRtYWJ1ZiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCXBvbGxfd2FpdChmaWxw LCAmdmRtYWJ1Zi0+ZXZxLT5lX3dhaXQsIHdhaXQpOworCisJaWYgKCFsaXN0X2VtcHR5KCZ2ZG1h YnVmLT5ldnEtPmVfbGlzdCkpCisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZpcnRpb192ZG1hYnVmX2V2ZW50X3JlYWQoc3Ry dWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICAgCQkgc2l6ZV90IGNu dCwgbG9mZl90ICpvZnN0KQoreworCXN0cnVjdCB2aXJ0aW9fdmRtYWJ1ZiAqdmRtYWJ1ZiA9IGZp bHAtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCisJLyogbWFrZSBzdXJlIHVzZXIgYnVmZmVy IGNhbiBiZSB3cml0dGVuICovCisJaWYgKCFhY2Nlc3Nfb2soYnVmLCBzaXplb2YgKCpidWYpKSkg eworCQlkZXZfZXJyKGRydl9pbmZvLT5kZXYsICJ1c2VyIGJ1ZmZlciBjYW4ndCBiZSB3cml0dGVu LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IG11dGV4X2xvY2tfaW50ZXJy dXB0aWJsZSgmdmRtYWJ1Zi0+ZXZxLT5lX3JlYWRsb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfZXZlbnQgKmUgPSBO VUxMOworCisJCXNwaW5fbG9ja19pcnEoJnZkbWFidWYtPmV2cS0+ZV9sb2NrKTsKKwkJaWYgKCFs aXN0X2VtcHR5KCZ2ZG1hYnVmLT5ldnEtPmVfbGlzdCkpIHsKKwkJCWUgPSBsaXN0X2ZpcnN0X2Vu dHJ5KCZ2ZG1hYnVmLT5ldnEtPmVfbGlzdCwKKwkJCQkJICAgICBzdHJ1Y3QgdmlydGlvX3ZkbWFi dWZfZXZlbnQsIGxpbmspOworCQkJbGlzdF9kZWwoJmUtPmxpbmspOworCQl9CisJCXNwaW5fdW5s b2NrX2lycSgmdmRtYWJ1Zi0+ZXZxLT5lX2xvY2spOworCisJCWlmICghZSkgeworCQkJaWYgKHJl dCkKKwkJCQlicmVhazsKKworCQkJaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJ CQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJbXV0ZXhfdW5sb2NrKCZ2 ZG1hYnVmLT5ldnEtPmVfcmVhZGxvY2spOworCQkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRp YmxlKHZkbWFidWYtPmV2cS0+ZV93YWl0LAorCQkJCQkhbGlzdF9lbXB0eSgmdmRtYWJ1Zi0+ZXZx LT5lX2xpc3QpKTsKKworCQkJaWYgKHJldCA9PSAwKQorCQkJCXJldCA9IG11dGV4X2xvY2tfaW50 ZXJydXB0aWJsZSgKKwkJCQkJCSZ2ZG1hYnVmLT5ldnEtPmVfcmVhZGxvY2spOworCisJCQlpZiAo cmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbGVuID0g KHNpemVvZihlLT5lX2RhdGEuaGRyKSArCisJCQkJCSAgICBlLT5lX2RhdGEuaGRyLnNpemUpOwor CisJCQlpZiAobGVuID4gY250IC0gcmV0KSB7CitwdXRfYmFja19ldmVudDoKKwkJCQlzcGluX2xv Y2tfaXJxKCZ2ZG1hYnVmLT5ldnEtPmVfbG9jayk7CisJCQkJbGlzdF9hZGQoJmUtPmxpbmssICZ2 ZG1hYnVmLT5ldnEtPmVfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZ2ZG1hYnVmLT5ldnEt PmVfbG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsg cmV0LCAmZS0+ZV9kYXRhLmhkciwKKwkJCQkJIHNpemVvZihlLT5lX2RhdGEuaGRyKSkpIHsKKwkJ CQlpZiAocmV0ID09IDApCisJCQkJCXJldCA9IC1FRkFVTFQ7CisKKwkJCQlnb3RvIHB1dF9iYWNr X2V2ZW50OworCQkJfQorCisJCQlyZXQgKz0gc2l6ZW9mKGUtPmVfZGF0YS5oZHIpOworCisJCQlp ZiAoY29weV90b191c2VyKGJ1ZiArIHJldCwgZS0+ZV9kYXRhLmRhdGEsCisJCQkJCSBlLT5lX2Rh dGEuaGRyLnNpemUpKSB7CisJCQkJLyogZXJyb3Igd2hpbGUgY29weWluZyB2b2lkICpkYXRhICov CisKKwkJCQlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfZV9oZHIgZHVtbXlfaGRyID0gezB9OworCisJ CQkJcmV0IC09IHNpemVvZihlLT5lX2RhdGEuaGRyKTsKKworCQkJCS8qIG51bGxpZnlpbmcgaGRy IG9mIHRoZSBldmVudCBpbiB1c2VyIGJ1ZmZlciAqLworCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVm ICsgcmV0LCAmZHVtbXlfaGRyLAorCQkJCQkJIHNpemVvZihkdW1teV9oZHIpKSkKKwkJCQkJZGV2 X2VycihkcnZfaW5mby0+ZGV2LAorCQkJCQkgICAiZmFpbCB0byBudWxsaWZ5IGludmFsaWQgaGRy XG4iKTsKKworCQkJCXJldCA9IC1FRkFVTFQ7CisKKwkJCQlnb3RvIHB1dF9iYWNrX2V2ZW50Owor CQkJfQorCisJCQlyZXQgKz0gZS0+ZV9kYXRhLmhkci5zaXplOworCQkJdmRtYWJ1Zi0+ZXZxLT5w ZW5kaW5nLS07CisJCQlrdmZyZWUoZSk7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnZkbWFi dWYtPmV2cS0+ZV9yZWFkbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyB2aXJ0aW9fdmRtYWJ1Zl9mb3BzID0geworCS5vd25lciA9 IFRISVNfTU9EVUxFLAorCS5vcGVuID0gdmlydGlvX3ZkbWFidWZfb3BlbiwKKwkucmVsZWFzZSA9 IHZpcnRpb192ZG1hYnVmX3JlbGVhc2UsCisJLnJlYWQgPSB2aXJ0aW9fdmRtYWJ1Zl9ldmVudF9y ZWFkLAorCS5wb2xsID0gdmlydGlvX3ZkbWFidWZfZXZlbnRfcG9sbCwKKwkudW5sb2NrZWRfaW9j dGwgPSB2aXJ0aW9fdmRtYWJ1Zl9pb2N0bCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2Rldmlj ZSB2aXJ0aW9fdmRtYWJ1Zl9taXNjZGV2ID0geworCS5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5P UiwKKwkubmFtZSA9ICJ2aXJ0aW8tdmRtYWJ1ZiIsCisJLmZvcHMgPSAmdmlydGlvX3ZkbWFidWZf Zm9wcywKK307CisKK3N0YXRpYyBpbnQgdmlydGlvX3ZkbWFidWZfcHJvYmUoc3RydWN0IHZpcnRp b19kZXZpY2UgKnZkZXYpCit7CisJdnFfY2FsbGJhY2tfdCAqY2JzW10gPSB7CisJCXZpcnRpb192 ZG1hYnVmX3JlY3ZfY2IsCisJCXZpcnRpb192ZG1hYnVmX3NlbmRfY2IsCisJfTsKKwlzdGF0aWMg Y29uc3QgY2hhciAqY29uc3QgbmFtZXNbXSA9IHsKKwkJInJlY3YiLAorCQkic2VuZCIsCisJfTsK KwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWYgKnZkbWFidWY7CisJaW50IHJldCA9IDA7CisKKwlpZiAo IWRydl9pbmZvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZkbWFidWYgPSBkcnZfaW5mby0+cHJp djsKKworCWlmICghdmRtYWJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2ZG1hYnVmLT52ZGV2 ID0gdmRldjsKKwl2ZGV2LT5wcml2ID0gdmRtYWJ1ZjsKKworCS8qIGluaXRpYWxpemUgc3Bpbmxv Y2sgZm9yIHN5bmNocm9uaXppbmcgdmlydHF1ZXVlIGFjY2Vzc2VzICovCisJc3Bpbl9sb2NrX2lu aXQoJnZkbWFidWYtPnZxX2xvY2spOworCisJcmV0ID0gdmlydGlvX2ZpbmRfdnFzKHZkbWFidWYt PnZkZXYsIFZETUFCVUZfVlFfTUFYLCB2ZG1hYnVmLT52cXMsCisJCQkgICAgICBjYnMsIG5hbWVz LCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHJ2X2luZm8tPmRldiwgIkNhbm5vdCBm aW5kIGFueSB2cXNcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCUlOSVRfTElTVF9IRUFEKCZ2 ZG1hYnVmLT5tc2dfbGlzdCk7CisJSU5JVF9XT1JLKCZ2ZG1hYnVmLT5yZWN2X3dvcmssIHZpcnRp b192ZG1hYnVmX3JlY3Zfd29yayk7CisJSU5JVF9XT1JLKCZ2ZG1hYnVmLT5zZW5kX3dvcmssIHZp cnRpb192ZG1hYnVmX3NlbmRfd29yayk7CisJSU5JVF9XT1JLKCZ2ZG1hYnVmLT5zZW5kX21zZ193 b3JrLCB2aXJ0aW9fdmRtYWJ1Zl9zZW5kX21zZ193b3JrKTsKKworCXJldHVybiByZXQ7Cit9CisK K3N0YXRpYyB2b2lkIHZpcnRpb192ZG1hYnVmX3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAq dmRldikKK3sKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWYgKnZkbWFidWY7CisKKwlpZiAoIWRydl9p bmZvKQorCQlyZXR1cm47CisKKwl2ZG1hYnVmID0gZHJ2X2luZm8tPnByaXY7CisJZmx1c2hfd29y aygmdmRtYWJ1Zi0+cmVjdl93b3JrKTsKKwlmbHVzaF93b3JrKCZ2ZG1hYnVmLT5zZW5kX3dvcmsp OworCWZsdXNoX3dvcmsoJnZkbWFidWYtPnNlbmRfbXNnX3dvcmspOworCisJdmRldi0+Y29uZmln LT5yZXNldCh2ZGV2KTsKKwl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVklSVElPX0lEX1ZE TUFCVUYsIFZJUlRJT19ERVZfQU5ZX0lEIH0sCisJeyAwIH0sCit9OworCitzdGF0aWMgc3RydWN0 IHZpcnRpb19kcml2ZXIgdmlydGlvX3ZkbWFidWZfdmRldl9kcnYgPSB7CisJLmRyaXZlci5uYW1l ID0gIEtCVUlMRF9NT0ROQU1FLAorCS5kcml2ZXIub3duZXIgPSBUSElTX01PRFVMRSwKKwkuaWRf dGFibGUgPSAgICAgaWRfdGFibGUsCisJLnByb2JlID0gICAgICAgIHZpcnRpb192ZG1hYnVmX3By b2JlLAorCS5yZW1vdmUgPSAgICAgICB2aXJ0aW9fdmRtYWJ1Zl9yZW1vdmUsCit9OworCitzdGF0 aWMgaW50IF9faW5pdCB2aXJ0aW9fdmRtYWJ1Zl9pbml0KHZvaWQpCit7CisJc3RydWN0IHZpcnRp b192ZG1hYnVmICp2ZG1hYnVmOworCWludCByZXQgPSAwOworCisJZHJ2X2luZm8gPSBOVUxMOwor CisJcmV0ID0gbWlzY19yZWdpc3RlcigmdmlydGlvX3ZkbWFidWZfbWlzY2Rldik7CisJaWYgKHJl dCkgeworCQlwcl9lcnIoInZpcnRpby12ZG1hYnVmIG1pc2MgZHJpdmVyIGNhbid0IGJlIHJlZ2lz dGVyZWRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRtYV9zZXRfbWFza19hbmRf Y29oZXJlbnQodmlydGlvX3ZkbWFidWZfbWlzY2Rldi50aGlzX2RldmljZSwKKwkJCQkJRE1BX0JJ VF9NQVNLKDY0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWlzY19kZXJlZ2lzdGVyKCZ2aXJ0aW9f dmRtYWJ1Zl9taXNjZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHJ2X2luZm8gPSBr dmNhbGxvYygxLCBzaXplb2YoKmRydl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcnZfaW5m bykgeworCQltaXNjX2RlcmVnaXN0ZXIoJnZpcnRpb192ZG1hYnVmX21pc2NkZXYpOworCQlyZXR1 cm4gLUVOT01FTTsKKwl9CisKKwl2ZG1hYnVmID0ga3ZjYWxsb2MoMSwgc2l6ZW9mKCp2ZG1hYnVm KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2ZG1hYnVmKSB7CisJCWt2ZnJlZShkcnZfaW5mbyk7CisJ CW1pc2NfZGVyZWdpc3RlcigmdmlydGlvX3ZkbWFidWZfbWlzY2Rldik7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCXZkbWFidWYtPmV2cSA9IGt2Y2FsbG9jKDEsIHNpemVvZigqKHZkbWFidWYt PmV2cSkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZkbWFidWYtPmV2cSkgeworCQlrdmZyZWUoZHJ2 X2luZm8pOworCQlrdmZyZWUodmRtYWJ1Zik7CisJCW1pc2NfZGVyZWdpc3RlcigmdmlydGlvX3Zk bWFidWZfbWlzY2Rldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWRydl9pbmZvLT5wcml2 ID0gKHZvaWQgKil2ZG1hYnVmOworCWRydl9pbmZvLT5kZXYgPSB2aXJ0aW9fdmRtYWJ1Zl9taXNj ZGV2LnRoaXNfZGV2aWNlOworCisJbXV0ZXhfaW5pdCgmZHJ2X2luZm8tPmdfbXV0ZXgpOworCisJ bXV0ZXhfaW5pdCgmdmRtYWJ1Zi0+ZXZxLT5lX3JlYWRsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgm dmRtYWJ1Zi0+ZXZxLT5lX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnZkbWFidWYtPmV2cS0+ ZV9saXN0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2ZG1hYnVmLT5ldnEtPmVfd2FpdCk7CisJ aGFzaF9pbml0KGRydl9pbmZvLT5idWZfbGlzdCk7CisKKwl2ZG1hYnVmLT5ldnEtPnBlbmRpbmcg PSAwOworCXZkbWFidWYtPndxID0gY3JlYXRlX3dvcmtxdWV1ZSgidmlydGlvX3ZkbWFidWZfd3Ei KTsKKworCXJldCA9IHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnZpcnRpb192ZG1hYnVmX3ZkZXZf ZHJ2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZHJ2X2luZm8tPmRldiwgInZkbWFidWYgZHJp dmVyIGNhbid0IGJlIHJlZ2lzdGVyZWRcbiIpOworCQltaXNjX2RlcmVnaXN0ZXIoJnZpcnRpb192 ZG1hYnVmX21pc2NkZXYpOworCQlrdmZyZWUodmRtYWJ1Zik7CisJCWt2ZnJlZShkcnZfaW5mbyk7 CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBf X2V4aXQgdmlydGlvX3ZkbWFidWZfZGVpbml0KHZvaWQpCit7CisJc3RydWN0IHZpcnRpb192ZG1h YnVmICp2ZG1hYnVmID0gZHJ2X2luZm8tPnByaXY7CisJc3RydWN0IHZpcnRpb192ZG1hYnVmX2V2 ZW50ICplLCAqZXQ7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCW1pc2NfZGVyZWdpc3Rl cigmdmlydGlvX3ZkbWFidWZfbWlzY2Rldik7CisJdW5yZWdpc3Rlcl92aXJ0aW9fZHJpdmVyKCZ2 aXJ0aW9fdmRtYWJ1Zl92ZGV2X2Rydik7CisKKwlpZiAodmRtYWJ1Zi0+d3EpCisJCWRlc3Ryb3lf d29ya3F1ZXVlKHZkbWFidWYtPndxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZG1hYnVmLT5l dnEtPmVfbG9jaywgaXJxZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIGV0 LCAmdmRtYWJ1Zi0+ZXZxLT5lX2xpc3QsCisJCQkJIGxpbmspIHsKKwkJbGlzdF9kZWwoJmUtPmxp bmspOworCQlrdmZyZWUoZSk7CisJCXZkbWFidWYtPmV2cS0+cGVuZGluZy0tOworCX0KKworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnZkbWFidWYtPmV2cS0+ZV9sb2NrLCBpcnFmbGFncyk7CisK KwkvKiBmcmVlaW5nIGFsbCBleHBvcnRlZCBidWZmZXJzICovCisJcmVtb3ZlX2FsbF9idWZzKHZk bWFidWYpOworCisJa3ZmcmVlKHZkbWFidWYtPmV2cSk7CisJa3ZmcmVlKHZkbWFidWYpOworCWt2 ZnJlZShkcnZfaW5mbyk7Cit9CisKK21vZHVsZV9pbml0KHZpcnRpb192ZG1hYnVmX2luaXQpOwor bW9kdWxlX2V4aXQodmlydGlvX3ZkbWFidWZfZGVpbml0KTsKKworTU9EVUxFX0RFVklDRV9UQUJM RSh2aXJ0aW8sIHZpcnRpb192ZG1hYnVmX2lkX3RhYmxlKTsKK01PRFVMRV9ERVNDUklQVElPTigi VmlydGlvIFZkbWFidWYgZnJvbnRlbmQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIGFu ZCBhZGRpdGlvbmFsIHJpZ2h0cyIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aXJ0aW9f dmRtYWJ1Zi5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fdmRtYWJ1Zi5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOTUwMGJmNGE1NGFjCi0tLSAvZGV2L251bGwKKysr IGIvaW5jbHVkZS9saW51eC92aXJ0aW9fdmRtYWJ1Zi5oCkBAIC0wLDAgKzEsMjcxIEBACisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwtMi4wKSAqLworCisvKgorICogQ29w eXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQor ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMg dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNl bnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhl IG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBz dWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBX QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhF IEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4g Q09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT CisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1ZJUlRJT19W RE1BQlVGX0ggCisjZGVmaW5lIF9MSU5VWF9WSVJUSU9fVkRNQUJVRl9IIAorCisjaW5jbHVkZSA8 dWFwaS9saW51eC92aXJ0aW9fdmRtYWJ1Zi5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2h0YWJsZS5o PgorI2luY2x1ZGUgPGxpbnV4L2t2bV90eXBlcy5oPgorCitzdHJ1Y3QgdmlydGlvX3ZkbWFidWZf c2hhcmVkX3BhZ2VzIHsKKwkvKiBjcm9zcy1WTSByZWYgYWRkciBmb3IgdGhlIGJ1ZmZlciAqLwor CWdwYV90IHJlZjsKKworCS8qIHBhZ2UgYXJyYXkgKi8KKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOwor CWdwYV90ICoqbDJyZWZzOworCWdwYV90ICpsM3JlZnM7CisKKwkvKiBkYXRhIG9mZnNldCBpbiB0 aGUgZmlyc3QgcGFnZQorCSAqIGFuZCBkYXRhIGxlbmd0aCBpbiB0aGUgbGFzdCBwYWdlCisJICov CisJaW50IGZpcnN0X29mc3Q7CisJaW50IGxhc3RfbGVuOworCisJLyogbnVtYmVyIG9mIHNoYXJl ZCBwYWdlcyAqLworCWludCBuZW50czsKK307CisKK3N0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9idWYg eworCXZpcnRpb192ZG1hYnVmX2J1Zl9pZF90IGJ1Zl9pZDsKKworCXN0cnVjdCBkbWFfYnVmX2F0 dGFjaG1lbnQgKmF0dGFjaDsKKwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3Qgc2df dGFibGUgKnNndDsKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfc2hhcmVkX3BhZ2VzICpwYWdlc19p bmZvOworCWludCB2bWlkOworCisJLyogdmFsaWRpdHkgb2YgdGhlIGJ1ZmZlciAqLworCWJvb2wg dmFsaWQ7CisKKwkvKiBzZXQgaWYgdGhlIGJ1ZmZlciBpcyBpbXBvcnRlZCB2aWEgaW1wb3J0X2lv Y3RsICovCisJYm9vbCBpbXBvcnRlZDsKKworCS8qIHNpemUgb2YgcHJpdmF0ZSAqLworCXNpemVf dCBzel9wcml2OworCS8qIHByaXZhdGUgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4cG9ydGVk IGJ1ZmZlciAqLworCXZvaWQgKnByaXY7CisKKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKwlzdHJ1Y3Qg aGxpc3Rfbm9kZSBub2RlOworfTsKKworc3RydWN0IHZpcnRpb192ZG1hYnVmX2V2ZW50IHsKKwlz dHJ1Y3QgdmlydGlvX3ZkbWFidWZfZV9kYXRhIGVfZGF0YTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxp bms7Cit9OworCitzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfZXZlbnRfcXVldWUgeworCXdhaXRfcXVl dWVfaGVhZF90IGVfd2FpdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVfbGlzdDsKKworCXNwaW5sb2Nr X3QgZV9sb2NrOworCXN0cnVjdCBtdXRleCBlX3JlYWRsb2NrOworCisJLyogIyBvZiBwZW5kaW5n IGV2ZW50cyAqLworCWludCBwZW5kaW5nOworfTsKKworLyogZHJpdmVyIGluZm9ybWF0aW9uICov CitzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfaW5mbyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJ c3RydWN0IGxpc3RfaGVhZCBoZWFkX3ZkbWFidWZfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGt2 bV9pbnN0YW5jZXM7CisKKwlERUNMQVJFX0hBU0hUQUJMRShidWZfbGlzdCwgNyk7CisKKwl2b2lk ICpwcml2OworCXN0cnVjdCBtdXRleCBnX211dGV4OworCXN0cnVjdCBub3RpZmllcl9ibG9jayBr dm1fbm90aWZpZXI7Cit9OworCisvKiBJT0NUTCBkZWZpbml0aW9ucworICovCit0eXBlZGVmIGlu dCAoKnZpcnRpb192ZG1hYnVmX2lvY3RsX3QpKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpkYXRh KTsKKworc3RydWN0IHZpcnRpb192ZG1hYnVmX2lvY3RsX2Rlc2MgeworCXVuc2lnbmVkIGludCBj bWQ7CisJaW50IGZsYWdzOworCXZpcnRpb192ZG1hYnVmX2lvY3RsX3QgZnVuYzsKKwljb25zdCBj aGFyICpuYW1lOworfTsKKworI2RlZmluZSBWSVJUSU9fVkRNQUJVRl9JT0NUTF9ERUYoaW9jdGws IF9mdW5jLCBfZmxhZ3MpCVwKKwlbX0lPQ19OUihpb2N0bCldID0gewkJCVwKKwkJCS5jbWQgPSBp b2N0bCwJCVwKKwkJCS5mdW5jID0gX2Z1bmMsCQlcCisJCQkuZmxhZ3MgPSBfZmxhZ3MsCVwKKwkJ CS5uYW1lID0gI2lvY3RsCQlcCit9CisKKyNkZWZpbmUgVklSVElPX1ZETUFCVUZfVk1JRChidWZf aWQpICgoKChidWZfaWQpLmlkKSA+PiAzMikgJiAweEZGRkZGRkZGKQorCisvKiBNZXNzYWdlcyBi ZXR3ZWVuIEhvc3QgYW5kIEd1ZXN0ICovCisKKy8qIExpc3Qgb2YgY29tbWFuZHMgZnJvbSBHdWVz dCB0byBIb3N0OgorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQS4gTkVFRF9WTUlECisgKgorICogIGd1 ZXN0IGFza3MgdGhlIGhvc3QgdG8gcHJvdmlkZSBpdHMgdm1pZAorICoKKyAqIHJlcToKKyAqCisg KiBjbWQ6IFZJUlRJT19WRE1BQlVGX05FRURfVk1JRAorICoKKyAqIGFjazoKKyAqCisgKiBjbWQ6 IHNhbWUgYXMgcmVxCisgKiBvcFswXSA6IHZtaWQgb2YgZ3Vlc3QKKyAqCisgKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqIEIuIEVYUE9SVAorICoKKyAqICBleHBvcnQgZG1hYnVmIHRvIGhvc3QKKyAqCisgKiByZXE6 CisgKgorICogY21kOiBWSVJUSU9fVkRNQUJVRl9DTURfRVhQT1JUCisgKiBvcDB+b3AzIDogSERN QUJVRiBJRAorICogb3A0IDogbnVtYmVyIG9mIHBhZ2VzIHRvIGJlIHNoYXJlZAorICogb3A1IDog b2Zmc2V0IG9mIGRhdGEgaW4gdGhlIGZpcnN0IHBhZ2UKKyAqIG9wNiA6IGxlbmd0aCBvZiBkYXRh IGluIHRoZSBsYXN0IHBhZ2UKKyAqIG9wNyA6IHVwcGVyIDMyIGJpdCBvZiB0b3AtbGV2ZWwgcmVm IG9mIHNoYXJlZCBidWYKKyAqIG9wOCA6IGxvd2VyIDMyIGJpdCBvZiB0b3AtbGV2ZWwgcmVmIG9m IHNoYXJlZCBidWYKKyAqIG9wOSA6IHNpemUgb2YgcHJpdmF0ZSBkYXRhCisgKiBvcDEwIH4gb3A2 NDogVXNlciBwcml2YXRlIGRhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXIKKyAqCSAgICAg ICAgKGUuZy4gZ3JhcGhpYyBidWZmZXIncyBtZXRhIGluZm8pCisgKgorICogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg KgorICogTGlzdCBvZiBjb21tYW5kcyBmcm9tIEhvc3QgdG8gR3Vlc3QKKyAqCisgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqIEEuIFJFTEVBU0UKKyAqCisgKiAgbm90aWZ5aW5nIGd1ZXN0IHRoYXQgdGhlIHNoYXJl ZCBidWZmZXIgaXMgcmVsZWFzZWQgYnkgYW4gaW1wb3J0ZXIKKyAqCisgKiByZXE6CisgKgorICog Y21kOiBWSVJUSU9fVkRNQUJVRl9DTURfRE1BQlVGX1JFTAorICogb3Awfm9wMyA6IFZETUFCVUYg SUQKKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKiBtc2cgc3RydWN0dXJlcyAqLworc3RydWN0 IHZpcnRpb192ZG1hYnVmX21zZyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXVuc2lnbmVk IGludCBjbWQ7CisJdW5zaWduZWQgaW50IG9wWzY0XTsKK307CisKK2VudW0geworCVZETUFCVUZf VlFfUkVDViA9IDAsCisJVkRNQUJVRl9WUV9TRU5EID0gMSwKKwlWRE1BQlVGX1ZRX01BWCAgPSAy LAorfTsKKworZW51bSB2aXJ0aW9fdmRtYWJ1Zl9jbWQgeworCVZJUlRJT19WRE1BQlVGX0NNRF9O RUVEX1ZNSUQsCisJVklSVElPX1ZETUFCVUZfQ01EX0VYUE9SVCA9IDB4MTAsCisJVklSVElPX1ZE TUFCVUZfQ01EX0RNQUJVRl9SRUwKK307CisKK2VudW0gdmlydGlvX3ZkbWFidWZfb3BzIHsKKwlW SVJUSU9fVkRNQUJVRl9IRE1BQlVGX0lEX0lEID0gMCwKKwlWSVJUSU9fVkRNQUJVRl9IRE1BQlVG X0lEX1JOR19LRVkwLAorCVZJUlRJT19WRE1BQlVGX0hETUFCVUZfSURfUk5HX0tFWTEsCisJVklS VElPX1ZETUFCVUZfTlVNX1BBR0VTX1NIQVJFRCA9IDQsCisJVklSVElPX1ZETUFCVUZfRklSU1Rf UEFHRV9EQVRBX09GRlNFVCwKKwlWSVJUSU9fVkRNQUJVRl9MQVNUX1BBR0VfREFUQV9MRU5HVEgs CisJVklSVElPX1ZETUFCVUZfUkVGX0FERFJfVVBQRVJfMzJCSVQsCisJVklSVElPX1ZETUFCVUZf UkVGX0FERFJfTE9XRVJfMzJCSVQsCisJVklSVElPX1ZETUFCVUZfUFJJVkFURV9EQVRBX1NJWkUs CisJVklSVElPX1ZETUFCVUZfUFJJVkFURV9EQVRBX1NUQVJUCit9OworCisvKiBhZGRpbmcgZXhw b3J0ZWQvaW1wb3J0ZWQgdmRtYWJ1ZiBpbmZvIHRvIGhhc2ggKi8KK3N0YXRpYyBpbmxpbmUgaW50 Cit2aXJ0aW9fdmRtYWJ1Zl9hZGRfYnVmKHN0cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9pbmZvICppbmZv LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfYnVmICpuZXcp Cit7CisJaGFzaF9hZGQoaW5mby0+YnVmX2xpc3QsICZuZXctPm5vZGUsIG5ldy0+YnVmX2lkLmlk KTsKKwlyZXR1cm4gMDsKK30KKworLyogY29tcGFyaW5nIHR3byB2ZG1hYnVmIElEcyAqLworc3Rh dGljIGlubGluZSBib29sCitpc19zYW1lX2J1Zih2aXJ0aW9fdmRtYWJ1Zl9idWZfaWRfdCBhLAor ICAgICAgICAgICAgdmlydGlvX3ZkbWFidWZfYnVmX2lkX3QgYikKK3sKKwlpbnQgaTsKKworCWlm IChhLmlkICE9IGIuaWQpCisJCXJldHVybiAxOworCisJLyogY29tcGFyZSBrZXlzICovCisJZm9y IChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAoYS5ybmdfa2V5W2ldICE9IGIucm5nX2tleVtp XSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyogZmluZCBi dWYgZm9yIGdpdmVuIHZkbWFidWYgSUQgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZpcnRpb192 ZG1hYnVmX2J1ZgorKnZpcnRpb192ZG1hYnVmX2ZpbmRfYnVmKHN0cnVjdCB2aXJ0aW9fdmRtYWJ1 Zl9pbmZvICppbmZvLAorCQkJIHZpcnRpb192ZG1hYnVmX2J1Zl9pZF90ICpidWZfaWQpCit7CisJ c3RydWN0IHZpcnRpb192ZG1hYnVmX2J1ZiAqZm91bmQ7CisKKwloYXNoX2Zvcl9lYWNoX3Bvc3Np YmxlKGluZm8tPmJ1Zl9saXN0LCBmb3VuZCwgbm9kZSwgYnVmX2lkLT5pZCkKKwkJaWYgKGlzX3Nh bWVfYnVmKGZvdW5kLT5idWZfaWQsICpidWZfaWQpKQorCQkJcmV0dXJuIGZvdW5kOworCisJcmV0 dXJuIE5VTEw7Cit9CisKKy8qIGRlbGV0ZSBidWYgZnJvbSBoYXNoICovCitzdGF0aWMgaW5saW5l IGludAordmlydGlvX3ZkbWFidWZfZGVsX2J1ZihzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfaW5mbyAq aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgdmlydGlvX3ZkbWFidWZfYnVmX2lkX3QgKmJ1 Zl9pZCkKK3sKKwlzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfYnVmICpmb3VuZDsKKworCWZvdW5kID0g dmlydGlvX3ZkbWFidWZfZmluZF9idWYoaW5mbywgYnVmX2lkKTsKKwlpZiAoIWZvdW5kKQorCQly ZXR1cm4gLUVOT0VOVDsKKworCWhhc2hfZGVsKCZmb3VuZC0+bm9kZSk7CisKKwlyZXR1cm4gMDsK K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5o IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaAppbmRleCBiYzFjMDYyMWY1ZWQuLjM5 Yzk0NjM3ZGRlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb19pZHMuaAor KysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX2lkcy5oCkBAIC01NCw1ICs1NCw2IEBACiAj ZGVmaW5lIFZJUlRJT19JRF9GUwkJCTI2IC8qIHZpcnRpbyBmaWxlc3lzdGVtICovCiAjZGVmaW5l IFZJUlRJT19JRF9QTUVNCQkJMjcgLyogdmlydGlvIHBtZW0gKi8KICNkZWZpbmUgVklSVElPX0lE X01BQzgwMjExX0hXU0lNCTI5IC8qIHZpcnRpbyBtYWM4MDIxMS1od3NpbSAqLworI2RlZmluZSBW SVJUSU9fSURfVkRNQUJVRiAgICAgICAgICAJNDAgLyogdmlydGlvIHZkbWFidWYgKi8KIAogI2Vu ZGlmIC8qIF9MSU5VWF9WSVJUSU9fSURTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9s aW51eC92aXJ0aW9fdmRtYWJ1Zi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpcnRpb192ZG1hYnVm LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43YmRkYWEwNGRkZDYK LS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlydGlvX3ZkbWFidWYuaApA QCAtMCwwICsxLDk5IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKE1JVCBPUiBHUEwt Mi4wKQorCisvKgorICogQ29weXJpZ2h0IMKpIDIwMjEgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5k ZWYgX1VBUElfTElOVVhfVklSVElPX1ZETUFCVUZfSAorI2RlZmluZSBfVUFQSV9MSU5VWF9WSVJU SU9fVkRNQUJVRl9ICisKKyNkZWZpbmUgTUFYX1NJWkVfUFJJVl9EQVRBIDE5MgorCit0eXBlZGVm IHN0cnVjdCB7CisJX191NjQgaWQ7CisJLyogOEIgbG9uZyBSYW5kb20gbnVtYmVyICovCisJaW50 IHJuZ19rZXlbMl07Cit9IHZpcnRpb192ZG1hYnVmX2J1Zl9pZF90OworCitzdHJ1Y3QgdmlydGlv X3ZkbWFidWZfZV9oZHIgeworCS8qIGJ1Zl9pZCBvZiBuZXcgYnVmICovCisJdmlydGlvX3ZkbWFi dWZfYnVmX2lkX3QgYnVmX2lkOworCS8qIHNpemUgb2YgcHJpdmF0ZSBkYXRhICovCisJaW50IHNp emU7Cit9OworCitzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfZV9kYXRhIHsKKwlzdHJ1Y3QgdmlydGlv X3ZkbWFidWZfZV9oZHIgaGRyOworCS8qIHB0ciB0byBwcml2YXRlIGRhdGEgKi8KKwl2b2lkIF9f dXNlciAqZGF0YTsKK307CisKKyNkZWZpbmUgVklSVElPX1ZETUFCVUZfSU9DVExfSU1QT1JUIFwK K19JT0MoX0lPQ19OT05FLCAnRycsIDIsIHNpemVvZihzdHJ1Y3QgdmlydGlvX3ZkbWFidWZfaW1w b3J0KSkKKyNkZWZpbmUgVklSVElPX1ZETUFCVUZfSU9DVExfUkVMRUFTRSBcCitfSU9DKF9JT0Nf Tk9ORSwgJ0cnLCAzLCBzaXplb2Yoc3RydWN0IHZpcnRpb192ZG1hYnVmX2ltcG9ydCkpCitzdHJ1 Y3QgdmlydGlvX3ZkbWFidWZfaW1wb3J0IHsKKwkvKiBJTiBwYXJhbWV0ZXJzICovCisJLyogYWhk YiBidWYgaWQgdG8gYmUgaW1wb3J0ZWQgKi8KKwl2aXJ0aW9fdmRtYWJ1Zl9idWZfaWRfdCBidWZf aWQ7CisJLyogZmxhZ3MgKi8KKwlpbnQgZmxhZ3M7CisJLyogT1VUIHBhcmFtZXRlcnMgKi8KKwkv KiBleHBvcnRlZCBkbWEgYnVmIGZkICovCisJaW50IGZkOworfTsKKworI2RlZmluZSBWSVJUSU9f VkRNQUJVRl9JT0NUTF9FWFBPUlQgXAorX0lPQyhfSU9DX05PTkUsICdHJywgNCwgc2l6ZW9mKHN0 cnVjdCB2aXJ0aW9fdmRtYWJ1Zl9leHBvcnQpKQorc3RydWN0IHZpcnRpb192ZG1hYnVmX2V4cG9y dCB7CisJLyogSU4gcGFyYW1ldGVycyAqLworCS8qIERNQSBidWYgZmQgdG8gYmUgZXhwb3J0ZWQg Ki8KKwlpbnQgZmQ7CisJLyogZXhwb3J0ZWQgZG1hIGJ1ZiBpZCAqLworCXZpcnRpb192ZG1hYnVm X2J1Zl9pZF90IGJ1Zl9pZDsKKwlpbnQgc3pfcHJpdjsKKwljaGFyICpwcml2OworfTsKKworI2Rl ZmluZSBWSVJUSU9fVkRNQUJVRl9JT0NUTF9RVUVSWSBcCitfSU9DKF9JT0NfTk9ORSwgJ0cnLCA1 LCBzaXplb2Yoc3RydWN0IHZpcnRpb192ZG1hYnVmX3F1ZXJ5KSkKK3N0cnVjdCB2aXJ0aW9fdmRt YWJ1Zl9xdWVyeSB7CisJLyogaW4gcGFyYW1ldGVycyAqLworCS8qIGlkIG9mIGJ1ZiB0byBiZSBx dWVyaWVkICovCisJdmlydGlvX3ZkbWFidWZfYnVmX2lkX3QgYnVmX2lkOworCS8qIGl0ZW0gdG8g YmUgcXVlcmllZCAqLworCWludCBpdGVtOworCS8qIE9VVCBwYXJhbWV0ZXJzICovCisJLyogVmFs dWUgb2YgcXVlcmllZCBpdGVtICovCisJdW5zaWduZWQgbG9uZyBpbmZvOworfTsKKworLyogRE1B QlVGIHF1ZXJ5ICovCitlbnVtIHZpcnRpb192ZG1hYnVmX3F1ZXJ5X2NtZCB7CisJVklSVElPX1ZE TUFCVUZfUVVFUllfU0laRSA9IDB4MTAsCisJVklSVElPX1ZETUFCVUZfUVVFUllfQlVTWSwKKwlW SVJUSU9fVkRNQUJVRl9RVUVSWV9QUklWX0lORk9fU0laRSwKKwlWSVJUSU9fVkRNQUJVRl9RVUVS WV9QUklWX0lORk8sCit9OworCisjZW5kaWYKLS0gCjIuMjYuMgoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlz dApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3Rz LmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==