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=-14.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,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 A02D7C5ACD6 for ; Wed, 18 Mar 2020 15:37: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 5D7BE20774 for ; Wed, 18 Mar 2020 15:37:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="WmjnM5qn" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5D7BE20774 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5B3E16E915; Wed, 18 Mar 2020 15:37:45 +0000 (UTC) Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9079C6E912 for ; Wed, 18 Mar 2020 15:37:41 +0000 (UTC) Received: from pendragon.bb.dnainternet.fi (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 0D818AC0; Wed, 18 Mar 2020 16:37:38 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1584545859; bh=tOy70d0qfNKnMCvkz1Zbu/0tMGm4dVQ06E10tcvH/LU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WmjnM5qnla7LqLNnLiLTB9ZG87eDTxfhskxfHXEUOLYX4om+uqOyf+ymxUXytbG75 URhc1jGOc/Qj4c9M/fQG5wd5K15MUx/QpEb8Ezg5+vN3QeS3z7JrW2dufLaPGZ3mKY 3nHSzs/K26s5CxOCH3XRSxUBoMW7TAMaOQzgKVCY= From: Laurent Pinchart To: dri-devel@lists.freedesktop.org Subject: [PATCH v11 2/5] drm: xlnx: DRM/KMS driver for Xilinx ZynqMP DisplayPort Subsystem Date: Wed, 18 Mar 2020 17:37:25 +0200 Message-Id: <20200318153728.25843-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200318153728.25843-1-laurent.pinchart@ideasonboard.com> References: <20200318153728.25843-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Michal Simek , Hyun Kwon , Satish Kumar Nagireddy Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RnJvbTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KClRoZSBYaWxpbnggWnlucU1Q IFNvQyBoYXMgYSBoYXJkZW5lZCBkaXNwbGF5IHBpcGVsaW5lIG5hbWVkIERpc3BsYXlQb3J0ClN1 YnN5c3RlbS4gSXQgaW5jbHVkZXMgYSBidWZmZXIgbWFuYWdlciwgYSB2aWRlbyBwaXBlbGluZSBy ZW5kZXJlcgooYmxlbmRlciksIGFuIGF1ZGlvIG1peGVyIGFuZCBhIERpc3BsYXlQb3J0IHNvdXJj ZSBjb250cm9sbGVyCih0cmFuc21pdHRlcikuIFRoZSBETUEgZW5naW5lIHRoZSBwcm92aWRlIGRh dGEgdG8gdGhlIGJ1ZmZlciBtYW5hZ2VyLCBhcwp3ZWxsIGFzIHRoZSBEaXNwbGF5UG9ydCBQSFlz IHRoYXQgZHJpdmUgdGhlIGxhbmVzLCBhcmUgZXh0ZXJuYWwgdG8gdGhlCnN1YnN5c3RlbSBhbmQg aW50ZXJmYWNlZCB1c2luZyB0aGUgRE1BIGVuZ2luZSBhbmQgUEhZIEFQSXMgcmVzcGVjdGl2ZWx5 LgoKVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIERpc3BsYXlQb3J0IFN1YnN5c3RlbSBhbmQgaW1w bGVtZW50cwoKLSBUd28gcGxhbmVzLCBmb3IgZ3JhcGhpY3MgYW5kIHZpZGVvCi0gT25lIENSVEMg dGhhdCBzdXBwb3J0cyBhbHBoYSBibGVuZGluZwotIE9uZSBlbmNvZGVyIGZvciB0aGUgRGlzcGxh eVBvcnQgdHJhbnNtaXR0ZXIKLSBPbmUgY29ubmVjdG9yIGZvciBhbiBleHRlcm5hbCBtb25pdG9y CgpJdCBjdXJyZW50bHkgZG9lc24ndCBzdXBwb3J0CgotIENvbG9yIGtleWluZwotIFRlc3QgcGF0 dGVybiBnZW5lcmF0aW9uCi0gQXVkaW8KLSBMaXZlIGlucHV0IGZyb20gdGhlIFByb2dyYW1tYWJs ZSBMb2dpYyAoRlBHQSkKLSBPdXRwdXQgdG8gdGhlIFByb2dyYW1tYWJsZSBMb2dpYyAoRlBHQSkK ClNpZ25lZC1vZmYtYnk6IEh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+ClNpZ25lZC1v ZmYtYnk6IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNv bT4KLS0tCkNoYW5nZXMgc2luY2UgdjEwOgoKLSBDb25maWd1cmUgdGhlIGRtYWVuZ2luZSBjaGFu bmVscwotIFVzZSBpbnRlcmxhdmVkIGN5Y2xpYyBETUEgdHJhbnNmZXJzCi0gRml4IERNQSByZWxl YXNlIGVycm9yIHBhdGgKLSBSZW5hbWUgZHJpdmVyIHRvIHhpbGlueC1kcHN1YgotIEZpeCBjcmFz aCB3aGVuIGRpc2FibGluZyBhbHJlYWR5IGRpc2FibGVkIGxheWVyCi0gQ29uZmlndXJlIERQIFBI WSBwYXJhbWV0ZXJzCi0gVXNlIHBoeV9wb3dlcl9vbigpIGFuZCBwaHlfcG93ZXJfb2ZmKCkKLSBB ZGQgcmVzZXQgaGFuZGxpbmcKCkNoYW5nZXMgc2luY2Ugdjk6CgotIERyb3AgRFJJVkVSX1BSSU1F Ci0gRG9uJ3Qgc2V0IHRoZSBzdHJ1Y3QgZHJpdmVyIG93bmVyIGZpZWxkIG1hbnVhbGx5Ci0gUmVu YW1lIHp5bnFtcF9kcHN1YiBhbGlnbiBmaWVsZCB0byBkbWFfYWxpZ24gYW5kIGNsYXJpZnkgaXRz CiAgZGVzY3JpcHRpb24KLSBEb2N1bWVudCB0aGUgenlucW1wX2Rwc3ViIGFwYl9jbGsgZmllbGQg YW5kIGZpeCBhIHJlbGF0ZWQgY29tbWVudCB0bwogIG1lbnRpb24gdGhlIEFQQiBjbG9jayBpbnN0 ZWFkIG9mIHRoZSBBWEkgY2xvY2sKLSBDb2Rpbmcgc3R5bGUgZml4ZXMKCk5vdGFibGUgY2hhbmdl cyBzaW5jZSB2ODoKCi0gUmViYXNlIG9uIHRvcCBvZiB2NS4zIGFuZCB1cGRhdGUgdG8gQVBJIGNo YW5nZXMKLSBDbGVhbnVwICNpbmNsdWRlIHN0YXRlbWVudHMKLSBVc2UgdGhlIG1vZGUgY29uZmln IHN1c3BlbmQvcmVzdW1lIGhlbHBlcnMKLSBSZW1vdmUgdW51c2VkIGNvZGUgKG1hY3JvcywgZmll bGRzLCBmdW5jdGlvbnMsIC4uLikKLSBTb3J0IGhlYWRlcnMgYW5kIGZvcndhcmQgZGVjbGFyYXRp b25zIGFscGhhYmV0aWNhbGx5Ci0gVXNlIG1vcmUgc3RhbmRhcmQgRFJNL0tNUyBoZWxwZXJzIChz dXNwZW5kL3Jlc3VtZSwgZmJkZXYsCiAgREVGSU5FX0RSTV9HRU1fQ01BX0ZPUFMpCi0gRHJvcCBz dXBwb3J0IGZvciBoYWxmLWltcGxlbWVudGVkIG9yIHVuc3VwcG9ydGVkIGZlYXR1cmVzIChzb3Vu ZCBEVAogIGJpbmRpbmdzIHBhcnNpbmcsIGludGVyZmFjZSB3aXRoIFBMKQotIFJlbW92ZSB0aGUg eGxueCBkcm0gaGVscGVycwotIFJlbW92ZSBzb21lIG1vZHVsZSBwYXJhbWV0ZXJzCi0gUmVvcmdh bml6ZSBjb2RlIGluIHNlY3Rpb25zLCB3aXRoIGJldHRlciBzZXBhcmF0aW9uIG9mIG9wZXJhdGlv bnMKLSBCZXR0ZXIgc2VwYXJhdGlvbiBvZiB0aGUgZW5jb2RlciBmcm9tIHRoZSBDUlRDCi0gRHJv cCB0aGUgY29tcG9uZW50IGZyYW1ld29yawotIFZhcmlvdXMga2VybmVsZG9jIHJld29ya3MsIHdp dGggcmVuYW1lcyBvZiBzdHJ1Y3R1cmVzLCBmaWVsZHMgYW5kCiAgZnVuY3Rpb25zCi0gRml4IHZi bGFuayBhbmQgcGFnZSBmbGlwIGV2ZW50IGhhbmRsaW5nCi0gUmVtb3ZlIGhhY2sgdG8gZGlzYWJs ZSBjbG9ja3MgYXQgc3RhcnR1cAotIFVwZGF0ZSBjb3B5cmlnaHQgaGVhZGVycwotIE1vdmUgY2hl Y2tzIGZyb20gYXRvbWljIGNvbW1pdCB0aW1lIHRvIGF0b21pYyBjaGVjayB0aW1lCi0gUmVtb3Zl IHBhcnRpYWwgc3VwcG9ydCBmb3IgdGhlIFRQRwotIFJlbW92ZSBwYXJ0aWFsIHN1cHBvcnQgZm9y IGxpdmUgaW5wdXRzCi0gUmVtb3ZlIGFzeW5jIHVwZGF0ZSBzdXBwb3J0Ci0gQ2xlYW4gdXAgRFAg VFggaW5pdGlhbGlzYXRpb24gYW5kIGNsZWFudXAKLS0tCiBNQUlOVEFJTkVSUyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAg ICAgICAgICAgICB8ICAgIDIgKwogZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlICAgICAgICAgICAg ICAgIHwgICAgMSArCiBkcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnICAgICAgICAgICAgfCAg IDEzICsKIGRyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlICAgICAgICAgICB8ICAgIDIgKwog ZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rpc3AuYyAgICAgIHwgMTcwOCArKysrKysrKysr KysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcC5oICAgICAgfCAg IDQzICsKIGRyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kaXNwX3JlZ3MuaCB8ICAyMDEgKysr CiBkcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZHAuYyAgICAgICAgfCAxNzQyICsrKysrKysr KysrKysrKysrKysrKysrCiBkcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZHAuaCAgICAgICAg fCAgIDI5ICsKIGRyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcHN1Yi5jICAgICB8ICAzMzAg KysrKysKIGRyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcHN1Yi5oICAgICB8ICAgNDkgKwog MTIgZmlsZXMgY2hhbmdlZCwgNDEyOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS94bG54L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJt L3hsbngvenlucW1wX2Rpc3AuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94 bG54L3p5bnFtcF9kaXNwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxu eC96eW5xbXBfZGlzcF9yZWdzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v eGxueC96eW5xbXBfZHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS94bG54 L3p5bnFtcF9kcC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3hsbngvenlu cW1wX2Rwc3ViLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0veGxueC96eW5x bXBfZHBzdWIuaAoKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXgg ZmM2ZDgxODMxMDZiLi4yMmZjODBlZDJjMDEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBi L01BSU5UQUlORVJTCkBAIC01NzEzLDYgKzU3MTMsMTUgQEAgRjoJZHJpdmVycy9ncHUvZHJtL2V0 bmF2aXYvCiBGOglpbmNsdWRlL3VhcGkvZHJtL2V0bmF2aXZfZHJtLmgKIEY6CURvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2V0bmF2aXYvCiAKK0RSTSBEUklWRVJTIEZP UiBYSUxJTlgKK006CUh5dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+CitNOglMYXVyZW50 IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+CitMOglkcmktZGV2 ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL2dwdS9k cm0veGxueC8KK0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3hs bngvCitUOglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZHJtL2RybS1taXNjCisK IERSTSBEUklWRVJTIEZPUiBaVEUgWlgKIE06CVNoYXduIEd1byA8c2hhd25ndW9Aa2VybmVsLm9y Zz4KIEw6CWRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggZDBhYTZj ZmYyZTAyLi44ZTZhZjYwNDY4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmln CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0zODksNiArMzg5LDggQEAgc291cmNl ICJkcml2ZXJzL2dwdS9kcm0vYXNwZWVkL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9ncHUv ZHJtL21jZGUvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmln IgorCiAjIEtlZXAgbGVnYWN5IGRyaXZlcnMgbGFzdAogCiBtZW51Y29uZmlnIERSTV9MRUdBQ1kK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9N YWtlZmlsZQppbmRleCA2NDkzMDg4YTBmZGQuLmQ4YTYwYjA5Y2FkYSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncHUvZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQpAQCAt MTIyLDMgKzEyMiw0IEBAIG9iai0kKENPTkZJR19EUk1fTElNQSkgICs9IGxpbWEvCiBvYmotJChD T05GSUdfRFJNX1BBTkZST1NUKSArPSBwYW5mcm9zdC8KIG9iai0kKENPTkZJR19EUk1fQVNQRUVE X0dGWCkgKz0gYXNwZWVkLwogb2JqLSQoQ09ORklHX0RSTV9NQ0RFKSArPSBtY2RlLworb2JqLXkJ CQkrPSB4bG54LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3hsbngvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5hYTZjZDg4OWJkMTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0veGxueC9LY29uZmlnCkBAIC0wLDAgKzEsMTMgQEAKK2NvbmZpZyBEUk1fWllOUU1QX0RQU1VC CisJdHJpc3RhdGUgIlp5bnFNUCBEaXNwbGF5UG9ydCBDb250cm9sbGVyIERyaXZlciIKKwlkZXBl bmRzIG9uIEFSQ0hfWllOUU1QIHx8IENPTVBJTEVfVEVTVAorCWRlcGVuZHMgb24gQ09NTU9OX0NM SyAmJiBEUk0gJiYgT0YKKwlzZWxlY3QgRE1BX0VOR0lORQorCXNlbGVjdCBEUk1fR0VNX0NNQV9I RUxQRVIKKwlzZWxlY3QgRFJNX0tNU19DTUFfSEVMUEVSCisJc2VsZWN0IERSTV9LTVNfSEVMUEVS CisJc2VsZWN0IEdFTkVSSUNfUEhZCisJaGVscAorCSAgVGhpcyBpcyBhIERSTS9LTVMgZHJpdmVy IGZvciBaeW5xTVAgRGlzcGxheVBvcnQgY29udHJvbGxlci4gQ2hvb3NlCisJICB0aGlzIG9wdGlv biBpZiB5b3UgaGF2ZSBhIFhpbGlueCBaeW5xTVAgU29DIHdpdGggRGlzcGxheVBvcnQKKwkgIHN1 YnN5c3RlbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL3hsbngvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi4yYjg0NGM2MGE4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0veGxueC9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKK3p5bnFtcC1kcHN1Yi1vYmpzICs9IHp5 bnFtcF9kaXNwLm8genlucW1wX2Rwc3ViLm8genlucW1wX2RwLm8KK29iai0kKENPTkZJR19EUk1f WllOUU1QX0RQU1VCKSArPSB6eW5xbXAtZHBzdWIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3hsbngvenlucW1wX2Rpc3AuYyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kaXNw LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MWM5NTQ4MjI1ZTcK LS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcC5jCkBA IC0wLDAgKzEsMTcwOCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8q CisgKiBaeW5xTVAgRGlzcGxheSBDb250cm9sbGVyIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAo QykgMjAxNyAtIDIwMTkgWGlsaW54LCBJbmMuCisgKgorICogQXV0aG9yczoKKyAqIC0gSHl1biBX b28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+CisgKiAtIExhdXJlbnQgUGluY2hhcnQgPGxh dXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KKyNpbmNsdWRl IDxkcm0vZHJtX2F0b21pY191YXBpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2ZvdXJjYy5oPgorI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVi dWZmZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9w bGFuZV9oZWxwZXIuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3ZibGFuay5oPgorCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9k bWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2Zf ZG1hLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGlu dXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRl ICJ6eW5xbXBfZGlzcC5oIgorI2luY2x1ZGUgInp5bnFtcF9kaXNwX3JlZ3MuaCIKKyNpbmNsdWRl ICJ6eW5xbXBfZHAuaCIKKyNpbmNsdWRlICJ6eW5xbXBfZHBzdWIuaCIKKworLyoKKyAqIE92ZXJ2 aWV3CisgKiAtLS0tLS0tLQorICoKKyAqIFRoZSBkaXNwbGF5IGNvbnRyb2xsZXIgcGFydCBvZiBa eW5xTVAgRFAgc3Vic3lzdGVtLCBtYWRlIG9mIHRoZSBBdWRpby9WaWRlbworICogQnVmZmVyIE1h bmFnZXIsIHRoZSBWaWRlbyBSZW5kZXJpbmcgUGlwZWxpbmUgKGJsZW5kZXIpIGFuZCB0aGUgQXVk aW8gTWl4ZXIuCisgKgorICogICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgKiArLS0tLS0tLS0rICAgfCAr LS0tLS0tLS0tLS0tLS0tLSsgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAg IHwKKyAqIHwgRFBETUEgIHwgLS0tPnwgICAgICAgICAgICAgICAgfCAtLT4gfCAgIFZpZGVvICAg fCBWaWRlbyArLS0tLS0tLS0tLS0tLSsgfAorICogfCA0eCB2aWQgfCAgIHwgfCAgICAgICAgICAg ICAgICB8ICAgICB8IFJlbmRlcmluZyB8IC0rLS0+IHwgICAgICAgICAgICAgfCB8ICAgKy0tLS0t LSsKKyAqIHwgMnggYXVkIHwgICB8IHwgIEF1ZGlvL1ZpZGVvICAgfCAtLT4gfCBQaXBlbGluZSAg fCAgfCAgICB8IERpc3BsYXlQb3J0IHwtLS0+IHwgUEhZMCB8CisgKiArLS0tLS0tLS0rICAgfCB8 IEJ1ZmZlciBNYW5hZ2VyIHwgICAgICstLS0tLS0tLS0tLSsgIHwgICAgfCAgIFNvdXJjZSAgICB8 IHwgICArLS0tLS0tKworICogICAgICAgICAgICAgIHwgfCAgICBhbmQgU1RDICAgICB8ICAgICAr LS0tLS0tLS0tLS0rICB8ICAgIHwgQ29udHJvbGxlciAgfCB8ICAgKy0tLS0tLSsKKyAqIExpdmUg VmlkZW8gLS0tPnwgICAgICAgICAgICAgICAgfCAtLT4gfCAgIEF1ZGlvICAgfCBBdWRpbyB8ICAg ICAgICAgICAgIHwtLS0+IHwgUEhZMSB8CisgKiAgICAgICAgICAgICAgfCB8ICAgICAgICAgICAg ICAgIHwgICAgIHwgICBNaXhlciAgIHwgLS0rLT4gfCAgICAgICAgICAgICB8IHwgICArLS0tLS0t KworICogTGl2ZSBBdWRpbyAtLS0+fCAgICAgICAgICAgICAgICB8IC0tPiB8ICAgICAgICAgICB8 ICB8fCAgICstLS0tLS0tLS0tLS0tKyB8CisgKiAgICAgICAgICAgICAgfCArLS0tLS0tLS0tLS0t LS0tLSsgICAgICstLS0tLS0tLS0tLSsgIHx8ICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICAg ICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfHwtLS0tLS0t LS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB2dgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBCbGVuZGVkIFZpZGVvIGFuZAorICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBNaXhlZCBBdWRpbyB0byBQTAorICoKKyAqIE9ubHkgbm9u LWxpdmUgaW5wdXQgZnJvbSB0aGUgRFBETUEgYW5kIG91dHB1dCB0byB0aGUgRGlzcGxheVBvcnQg U291cmNlCisgKiBDb250cm9sbGVyIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkLiBJbnRlcmZhY2Ug d2l0aCB0aGUgcHJvZ3JhbW1hYmxlIGxvZ2ljCisgKiBmb3IgbGl2ZSBzdHJlYW1zIGlzIG5vdCBp bXBsZW1lbnRlZC4KKyAqCisgKiBUaGUgZGlzcGxheSBjb250cm9sbGVyIGNvZGUgY3JlYXRlcyBw bGFuZXMgZm9yIHRoZSBEUERNQSB2aWRlbyBhbmQgZ3JhcGhpY3MKKyAqIGxheWVycywgYW5kIGEg Q1JUQyBmb3IgdGhlIFZpZGVvIFJlbmRlcmluZyBQaXBlbGluZS4KKyAqCisgKiBpbnRlcmZhY2Ug aW50byB0aG9zZSAzIGJsb2Nrcy4gSW4gaGlnaCBsZXZlbCwgdGhlIGRyaXZlciBpcyBsYXllcmVk CisgKiBpbiB0aGUgZm9sbG93aW5nIHdheToKKyAqCisgKiB6eW5xbXBfZGlzcF9jcnRjICYgenlu cW1wX2Rpc3BfcGxhbmUKKyAqIHwtPnp5bnFtcF9kaXNwCisgKgl8LT56eW5xbXBfZGlzcF9hdWQK KyAqCXwtPnp5bnFtcF9kaXNwX2JsZW5kCisgKgl8LT56eW5xbXBfZGlzcF9hdmJ1ZgorICovCisK KyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX05VTV9WSURfR0ZYX0JVRkZFUlMJCTQKKyNkZWZp bmUgWllOUU1QX0RJU1BfQVZfQlVGX05VTV9CVUZGRVJTCQkJNgorCisjZGVmaW5lIFpZTlFNUF9E SVNQX05VTV9MQVlFUlMJCQkJMgorI2RlZmluZSBaWU5RTVBfRElTUF9NQVhfTlVNX1NVQl9QTEFO RVMJCQkzCisKKy8qKgorICogc3RydWN0IHp5bnFtcF9kaXNwX2Zvcm1hdCAtIERpc3BsYXkgc3Vi c3lzdGVtIGZvcm1hdCBpbmZvcm1hdGlvbgorICogQGRybV9mbXQ6IERSTSBmb3JtYXQgKDRDQykK KyAqIEBidWZfZm10OiBBViBidWZmZXIgZm9ybWF0CisgKiBAYnVzX2ZtdDogTWVkaWEgYnVzIGZv cm1hdHMgKGxpdmUgZm9ybWF0cykKKyAqIEBzd2FwOiBGbGFnIHRvIHN3YXAgUiAmIEIgZm9yIFJH QiBmb3JtYXRzLCBhbmQgVSAmIFYgZm9yIFlVViBmb3JtYXRzCisgKiBAc2Y6IFNjYWxpbmcgZmFj dG9ycyBmb3IgY29sb3IgY29tcG9uZW50cworICovCitzdHJ1Y3QgenlucW1wX2Rpc3BfZm9ybWF0 IHsKKwl1MzIgZHJtX2ZtdDsKKwl1MzIgYnVmX2ZtdDsKKwl1MzIgYnVzX2ZtdDsKKwlib29sIHN3 YXA7CisJY29uc3QgdTMyICpzZjsKK307CisKKy8qKgorICogZW51bSB6eW5xbXBfZGlzcF9pZCAt IExheWVyIGlkZW50aWZpZXIKKyAqIEBaWU5RTVBfRElTUF9MQVlFUl9WSUQ6IFZpZGVvIGxheWVy CisgKiBAWllOUU1QX0RJU1BfTEFZRVJfR0ZYOiBHcmFwaGljcyBsYXllcgorICovCitlbnVtIHp5 bnFtcF9kaXNwX2xheWVyX2lkIHsKKwlaWU5RTVBfRElTUF9MQVlFUl9WSUQsCisJWllOUU1QX0RJ U1BfTEFZRVJfR0ZYCit9OworCisvKioKKyAqIGVudW0genlucW1wX2Rpc3BfbGF5ZXJfbW9kZSAt IExheWVyIG1vZGUKKyAqIEBaWU5RTVBfRElTUF9MQVlFUl9OT05MSVZFOiBub24tbGl2ZSAobWVt b3J5KSBtb2RlCisgKiBAWllOUU1QX0RJU1BfTEFZRVJfTElWRTogbGl2ZSAoc3RyZWFtKSBtb2Rl CisgKi8KK2VudW0genlucW1wX2Rpc3BfbGF5ZXJfbW9kZSB7CisJWllOUU1QX0RJU1BfTEFZRVJf Tk9OTElWRSwKKwlaWU5RTVBfRElTUF9MQVlFUl9MSVZFCit9OworCisvKioKKyAqIHN0cnVjdCB6 eW5xbXBfZGlzcF9sYXllcl9kbWEgLSBETUEgY2hhbm5lbCBmb3Igb25lIGRhdGEgcGxhbmUgb2Yg YSBsYXllcgorICogQGNoYW46IERNQSBjaGFubmVsCisgKiBAeHQ6IEludGVybGVhdmVkIERNQSBk ZXNjcmlwdG9yIHRlbXBsYXRlCisgKiBAc2dsOiBEYXRhIGNodW5rIGZvciBkbWFfaW50ZXJsZWF2 ZWRfdGVtcGxhdGUKKyAqLworc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyX2RtYSB7CisJc3RydWN0 IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBkbWFfaW50ZXJsZWF2ZWRfdGVtcGxhdGUgeHQ7CisJ c3RydWN0IGRhdGFfY2h1bmsgc2dsOworfTsKKworLyoqCisgKiBzdHJ1Y3QgenlucW1wX2Rpc3Bf bGF5ZXJfaW5mbyAtIFN0YXRpYyBsYXllciBpbmZvcm1hdGlvbgorICogQGZvcm1hdHM6IEFycmF5 IG9mIHN1cHBvcnRlZCBmb3JtYXRzCisgKiBAbnVtX2Zvcm1hdHM6IE51bWJlciBvZiBmb3JtYXRz IGluIEBmb3JtYXRzIGFycmF5CisgKiBAbnVtX2NoYW5uZWxzOiBOdW1iZXIgb2YgRE1BIGNoYW5u ZWxzCisgKi8KK3N0cnVjdCB6eW5xbXBfZGlzcF9sYXllcl9pbmZvIHsKKwljb25zdCBzdHJ1Y3Qg enlucW1wX2Rpc3BfZm9ybWF0ICpmb3JtYXRzOworCXVuc2lnbmVkIGludCBudW1fZm9ybWF0czsK Kwl1bnNpZ25lZCBpbnQgbnVtX2NoYW5uZWxzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgenlucW1w X2Rpc3BfbGF5ZXIgLSBEaXNwbGF5IGxheWVyIChEUk0gcGxhbmUpCisgKiBAcGxhbmU6IERSTSBw bGFuZQorICogQGlkOiBMYXllciBJRAorICogQGRpc3A6IEJhY2sgcG9pbnRlciB0byBzdHJ1Y3Qg enlucW1wX2Rpc3AKKyAqIEBpbmZvOiBTdGF0aWMgbGF5ZXIgaW5mb3JtYXRpb24KKyAqIEBkbWFz OiBETUEgY2hhbm5lbHMKKyAqIEBkaXNwX2ZtdDogQ3VycmVudCBmb3JtYXQgaW5mb3JtYXRpb24K KyAqIEBkcm1fZm10OiBDdXJyZW50IERSTSBmb3JtYXQgaW5mb3JtYXRpb24KKyAqIEBtb2RlOiBD dXJyZW50IG9wZXJhdGlvbiBtb2RlCisgKi8KK3N0cnVjdCB6eW5xbXBfZGlzcF9sYXllciB7CisJ c3RydWN0IGRybV9wbGFuZSBwbGFuZTsKKwllbnVtIHp5bnFtcF9kaXNwX2xheWVyX2lkIGlkOwor CXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcDsKKwljb25zdCBzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5 ZXJfaW5mbyAqaW5mbzsKKworCXN0cnVjdCB6eW5xbXBfZGlzcF9sYXllcl9kbWEgZG1hc1taWU5R TVBfRElTUF9NQVhfTlVNX1NVQl9QTEFORVNdOworCisJY29uc3Qgc3RydWN0IHp5bnFtcF9kaXNw X2Zvcm1hdCAqZGlzcF9mbXQ7CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqZHJtX2Zt dDsKKwllbnVtIHp5bnFtcF9kaXNwX2xheWVyX21vZGUgbW9kZTsKK307CisKKy8qKgorICogc3Ry dWN0IHp5bnFtcF9kaXNwX2JsZW5kIC0gQmxlbmRlcgorICogQGJhc2U6IFJlZ2lzdGVycyBJL08g YmFzZSBhZGRyZXNzCisgKi8KK3N0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCB7CisJdm9pZCBfX2lv bWVtICpiYXNlOworfTsKKworLyoqCisgKiBzdHJ1Y3QgenlucW1wX2Rpc3BfYXZidWYgLSBBdWRp by92aWRlbyBidWZmZXIgbWFuYWdlcgorICogQGJhc2U6IFJlZ2lzdGVycyBJL08gYmFzZSBhZGRy ZXNzCisgKi8KK3N0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1ZiB7CisJdm9pZCBfX2lvbWVtICpiYXNl OworfTsKKworLyoqCisgKiBzdHJ1Y3QgenlucW1wX2Rpc3BfYXVkaW8gLSBBdWRpbyBtaXhlcgor ICogQGJhc2U6IFJlZ2lzdGVycyBJL08gYmFzZSBhZGRyZXNzCisgKiBAX3BzX2NsazogQXVkaW8g Y2xvY2sgZnJvbSBQUworICogQF9wbF9jbGs6IEF1ZGlvIGNsb2NrIGZyb20gUEwKKyAqIEBjbGs6 IEF1ZGlvIGNsb2NrCisgKi8KK3N0cnVjdCB6eW5xbXBfZGlzcF9hdWRpbyB7CisJdm9pZCBfX2lv bWVtICpiYXNlOworCXN0cnVjdCBjbGsgKl9wc19jbGs7CisJc3RydWN0IGNsayAqX3BsX2NsazsK KwlzdHJ1Y3QgY2xrICpjbGs7Cit9OworCisvKioKKyAqIHN0cnVjdCB6eW5xbXBfZGlzcCAtIERp c3BsYXkgY29udHJvbGxlcgorICogQGRldjogRGV2aWNlIHN0cnVjdHVyZQorICogQGRybTogRFJN IGNvcmUKKyAqIEBkcHN1YjogRGlzcGxheSBzdWJzeXN0ZW0KKyAqIEBjcnRjOiBEUk0gQ1JUQwor ICogQGJsZW5kOiBCbGVuZGVyICh2aWRlbyByZW5kZXJpbmcgcGlwZWxpbmUpCisgKiBAYXZidWY6 IEF1ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2VyCisgKiBAYXVkaW86IEF1ZGlvIG1peGVyCisgKiBA bGF5ZXJzOiBMYXllcnMgKHBsYW5lcykKKyAqIEBldmVudDogUGVuZGluZyB2YmxhbmsgZXZlbnQg cmVxdWVzdAorICogQF9wc19wY2xrOiBQaXhlbCBjbG9jayBmcm9tIFBTCisgKiBAX3BsX3BjbGs6 IFBpeGVsIGNsb2NrIGZyb20gUEwKKyAqIEBwY2xrOiBQaXhlbCBjbG9jaworICovCitzdHJ1Y3Qg enlucW1wX2Rpc3AgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtOworCXN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViOworCisJc3RydWN0IGRybV9jcnRjIGNy dGM7CisKKwlzdHJ1Y3QgenlucW1wX2Rpc3BfYmxlbmQgYmxlbmQ7CisJc3RydWN0IHp5bnFtcF9k aXNwX2F2YnVmIGF2YnVmOworCXN0cnVjdCB6eW5xbXBfZGlzcF9hdWRpbyBhdWRpbzsKKworCXN0 cnVjdCB6eW5xbXBfZGlzcF9sYXllciBsYXllcnNbWllOUU1QX0RJU1BfTlVNX0xBWUVSU107CisK KwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudDsKKworCS8qIERvbid0IG9w ZXJhdGUgZGlyZWN0bHkgb24gX3BzXyAqLworCXN0cnVjdCBjbGsgKl9wc19wY2xrOworCXN0cnVj dCBjbGsgKl9wbF9wY2xrOworCXN0cnVjdCBjbGsgKnBjbGs7Cit9OworCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogQXVkaW8vVmlkZW8gQnVmZmVyIE1hbmFnZXIKKyAqLworCitzdGF0aWMg Y29uc3QgdTMyIHNjYWxpbmdfZmFjdG9yc180NDRbXSA9IHsKKwlaWU5RTVBfRElTUF9BVl9CVUZf NEJJVF9TRiwKKwlaWU5RTVBfRElTUF9BVl9CVUZfNEJJVF9TRiwKKwlaWU5RTVBfRElTUF9BVl9C VUZfNEJJVF9TRiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgc2NhbGluZ19mYWN0b3JzXzU1NVtd ID0geworCVpZTlFNUF9ESVNQX0FWX0JVRl81QklUX1NGLAorCVpZTlFNUF9ESVNQX0FWX0JVRl81 QklUX1NGLAorCVpZTlFNUF9ESVNQX0FWX0JVRl81QklUX1NGLAorfTsKKworc3RhdGljIGNvbnN0 IHUzMiBzY2FsaW5nX2ZhY3RvcnNfNTY1W10gPSB7CisJWllOUU1QX0RJU1BfQVZfQlVGXzVCSVRf U0YsCisJWllOUU1QX0RJU1BfQVZfQlVGXzZCSVRfU0YsCisJWllOUU1QX0RJU1BfQVZfQlVGXzVC SVRfU0YsCit9OworCitzdGF0aWMgY29uc3QgdTMyIHNjYWxpbmdfZmFjdG9yc182NjZbXSA9IHsK KwlaWU5RTVBfRElTUF9BVl9CVUZfNkJJVF9TRiwKKwlaWU5RTVBfRElTUF9BVl9CVUZfNkJJVF9T RiwKKwlaWU5RTVBfRElTUF9BVl9CVUZfNkJJVF9TRiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIg c2NhbGluZ19mYWN0b3JzXzg4OFtdID0geworCVpZTlFNUF9ESVNQX0FWX0JVRl84QklUX1NGLAor CVpZTlFNUF9ESVNQX0FWX0JVRl84QklUX1NGLAorCVpZTlFNUF9ESVNQX0FWX0JVRl84QklUX1NG LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBzY2FsaW5nX2ZhY3RvcnNfMTAxMDEwW10gPSB7CisJ WllOUU1QX0RJU1BfQVZfQlVGXzEwQklUX1NGLAorCVpZTlFNUF9ESVNQX0FWX0JVRl8xMEJJVF9T RiwKKwlaWU5RTVBfRElTUF9BVl9CVUZfMTBCSVRfU0YsCit9OworCisvKiBMaXN0IG9mIHZpZGVv IGxheWVyIGZvcm1hdHMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgenlucW1wX2Rpc3BfZm9ybWF0 IGF2YnVmX3ZpZF9mbXRzW10gPSB7CisJeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfVllVWSwK KwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9WWVVZLAorCQkuc3dh cAkJPSB0cnVlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1f Zm10CT0gRFJNX0ZPUk1BVF9VWVZZLAorCQkuYnVmX2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9G TVRfTkxfVklEX1ZZVVksCisJCS5zd2FwCQk9IGZhbHNlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0 b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1fZm10CT0gRFJNX0ZPUk1BVF9ZVVlWLAorCQkuYnVmX2Zt dAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lVWVYsCisJCS5zd2FwCQk9IGZhbHNl LAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1fZm10CT0gRFJN X0ZPUk1BVF9ZVllVLAorCQkuYnVmX2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklE X1lVWVYsCisJCS5zd2FwCQk9IHRydWUsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfODg4LAor CX0sIHsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX1lVVjQyMiwKKwkJLmJ1Zl9mbXQJPSBaWU5R TVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2LAorCQkuc3dhcAkJPSBmYWxzZSwKKwkJLnNm CQk9IHNjYWxpbmdfZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRf WVZVNDIyLAorCQkuYnVmX2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lWMTYs CisJCS5zd2FwCQk9IHRydWUsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfODg4LAorCX0sIHsK KwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX1lVVjQ0NCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElT UF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjI0LAorCQkuc3dhcAkJPSBmYWxzZSwKKwkJLnNmCQk9IHNj YWxpbmdfZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfWVZVNDQ0 LAorCQkuYnVmX2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lWMjQsCisJCS5z d2FwCQk9IHRydWUsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfODg4LAorCX0sIHsKKwkJLmRy bV9mbXQJPSBEUk1fRk9STUFUX05WMTYsCisJCS5idWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVG X0ZNVF9OTF9WSURfWVYxNkNJLAorCQkuc3dhcAkJPSBmYWxzZSwKKwkJLnNmCQk9IHNjYWxpbmdf ZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfTlY2MSwKKwkJLmJ1 Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0ksCisJCS5zd2FwCQk9 IHRydWUsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfODg4LAorCX0sIHsKKwkJLmRybV9mbXQJ PSBEUk1fRk9STUFUX0JHUjg4OCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1U X05MX1ZJRF9SR0I4ODgsCisJCS5zd2FwCQk9IGZhbHNlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0 b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1fZm10CT0gRFJNX0ZPUk1BVF9SR0I4ODgsCisJCS5idWZf Zm10CT0gWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfUkdCODg4LAorCQkuc3dhcAkJPSB0 cnVlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1fZm10CT0g RFJNX0ZPUk1BVF9YQkdSODg4OCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1U X05MX1ZJRF9SR0JBODg4MCwKKwkJLnN3YXAJCT0gZmFsc2UsCisJCS5zZgkJPSBzY2FsaW5nX2Zh Y3RvcnNfODg4LAorCX0sIHsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX1hSR0I4ODg4LAorCQku YnVmX2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1JHQkE4ODgwLAorCQkuc3dh cAkJPSB0cnVlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1f Zm10CT0gRFJNX0ZPUk1BVF9YQkdSMjEwMTAxMCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9B Vl9CVUZfRk1UX05MX1ZJRF9SR0I4ODhfMTAsCisJCS5zd2FwCQk9IGZhbHNlLAorCQkuc2YJCT0g c2NhbGluZ19mYWN0b3JzXzEwMTAxMCwKKwl9LCB7CisJCS5kcm1fZm10CT0gRFJNX0ZPUk1BVF9Y UkdCMjEwMTAxMCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9S R0I4ODhfMTAsCisJCS5zd2FwCQk9IHRydWUsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfMTAx MDEwLAorCX0sIHsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX1lVVjQyMCwKKwkJLmJ1Zl9mbXQJ PSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2XzQyMCwKKwkJLnN3YXAJCT0gZmFs c2UsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfODg4LAorCX0sIHsKKwkJLmRybV9mbXQJPSBE Uk1fRk9STUFUX1lWVTQyMCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05M X1ZJRF9ZVjE2XzQyMCwKKwkJLnN3YXAJCT0gdHJ1ZSwKKwkJLnNmCQk9IHNjYWxpbmdfZmFjdG9y c184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfTlYxMiwKKwkJLmJ1Zl9mbXQJ PSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0lfNDIwLAorCQkuc3dhcAkJPSBm YWxzZSwKKwkJLnNmCQk9IHNjYWxpbmdfZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9 IERSTV9GT1JNQVRfTlYyMSwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05M X1ZJRF9ZVjE2Q0lfNDIwLAorCQkuc3dhcAkJPSB0cnVlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0 b3JzXzg4OCwKKwl9LAorfTsKKworLyogTGlzdCBvZiBncmFwaGljcyBsYXllciBmb3JtYXRzICov CitzdGF0aWMgY29uc3Qgc3RydWN0IHp5bnFtcF9kaXNwX2Zvcm1hdCBhdmJ1Zl9nZnhfZm10c1td ID0geworCXsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX0FCR1I4ODg4LAorCQkuYnVmX2ZtdAk9 IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYX1JHQkE4ODg4LAorCQkuc3dhcAkJPSBmYWxz ZSwKKwkJLnNmCQk9IHNjYWxpbmdfZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9IERS TV9GT1JNQVRfQVJHQjg4ODgsCisJCS5idWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9O TF9HRlhfUkdCQTg4ODgsCisJCS5zd2FwCQk9IHRydWUsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3Rv cnNfODg4LAorCX0sIHsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX1JHQkE4ODg4LAorCQkuYnVm X2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYX0FCR1I4ODg4LAorCQkuc3dhcAkJ PSBmYWxzZSwKKwkJLnNmCQk9IHNjYWxpbmdfZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2Zt dAk9IERSTV9GT1JNQVRfQkdSQTg4ODgsCisJCS5idWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVG X0ZNVF9OTF9HRlhfQUJHUjg4ODgsCisJCS5zd2FwCQk9IHRydWUsCisJCS5zZgkJPSBzY2FsaW5n X2ZhY3RvcnNfODg4LAorCX0sIHsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX0JHUjg4OCwKKwkJ LmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF9SR0I4ODgsCisJCS5zd2Fw CQk9IGZhbHNlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzg4OCwKKwl9LCB7CisJCS5kcm1f Zm10CT0gRFJNX0ZPUk1BVF9SR0I4ODgsCisJCS5idWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVG X0ZNVF9OTF9HRlhfQkdSODg4LAorCQkuc3dhcAkJPSBmYWxzZSwKKwkJLnNmCQk9IHNjYWxpbmdf ZmFjdG9yc184ODgsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfUkdCQTU1NTEsCisJ CS5idWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfUkdCQTU1NTEsCisJCS5z d2FwCQk9IGZhbHNlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzU1NSwKKwl9LCB7CisJCS5k cm1fZm10CT0gRFJNX0ZPUk1BVF9CR1JBNTU1MSwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBfRElTUF9B Vl9CVUZfRk1UX05MX0dGWF9SR0JBNTU1MSwKKwkJLnN3YXAJCT0gdHJ1ZSwKKwkJLnNmCQk9IHNj YWxpbmdfZmFjdG9yc181NTUsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRfUkdCQTQ0 NDQsCisJCS5idWZfZm10CT0gWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfUkdCQTQ0NDQs CisJCS5zd2FwCQk9IGZhbHNlLAorCQkuc2YJCT0gc2NhbGluZ19mYWN0b3JzXzQ0NCwKKwl9LCB7 CisJCS5kcm1fZm10CT0gRFJNX0ZPUk1BVF9CR1JBNDQ0NCwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBf RElTUF9BVl9CVUZfRk1UX05MX0dGWF9SR0JBNDQ0NCwKKwkJLnN3YXAJCT0gdHJ1ZSwKKwkJLnNm CQk9IHNjYWxpbmdfZmFjdG9yc180NDQsCisJfSwgeworCQkuZHJtX2ZtdAk9IERSTV9GT1JNQVRf UkdCNTY1LAorCQkuYnVmX2ZtdAk9IFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYX1JHQjU2 NSwKKwkJLnN3YXAJCT0gZmFsc2UsCisJCS5zZgkJPSBzY2FsaW5nX2ZhY3RvcnNfNTY1LAorCX0s IHsKKwkJLmRybV9mbXQJPSBEUk1fRk9STUFUX0JHUjU2NSwKKwkJLmJ1Zl9mbXQJPSBaWU5RTVBf RElTUF9BVl9CVUZfRk1UX05MX0dGWF9SR0I1NjUsCisJCS5zd2FwCQk9IHRydWUsCisJCS5zZgkJ PSBzY2FsaW5nX2ZhY3RvcnNfNTY1LAorCX0sCit9OworCitzdGF0aWMgdTMyIHp5bnFtcF9kaXNw X2F2YnVmX3JlYWQoc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZiwgaW50IHJlZykKK3sK KwlyZXR1cm4gcmVhZGwoYXZidWYtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCB6eW5x bXBfZGlzcF9hdmJ1Zl93cml0ZShzdHJ1Y3QgenlucW1wX2Rpc3BfYXZidWYgKmF2YnVmLAorCQkJ CSAgICBpbnQgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGF2YnVmLT5iYXNlICsgcmVn KTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9zZXRfZm9ybWF0IC0gU2V0IHRoZSBp bnB1dCBmb3JtYXQgZm9yIGEgbGF5ZXIKKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8gYnVmZmVyIG1h bmFnZXIKKyAqIEBsYXllcjogVGhlIGxheWVyIElECisgKiBAZm10OiBUaGUgZm9ybWF0IGluZm9y bWF0aW9uCisgKgorICogU2V0IHRoZSB2aWRlbyBidWZmZXIgbWFuYWdlciBmb3JtYXQgZm9yIEBs YXllciB0byBAZm10LgorICovCitzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9hdmJ1Zl9zZXRfZm9y bWF0KHN0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1ZiAqYXZidWYsCisJCQkJCSBlbnVtIHp5bnFtcF9k aXNwX2xheWVyX2lkIGxheWVyLAorCQkJCQkgY29uc3Qgc3RydWN0IHp5bnFtcF9kaXNwX2Zvcm1h dCAqZm10KQoreworCXVuc2lnbmVkIGludCBpOworCXUzMiB2YWw7CisKKwl2YWwgPSB6eW5xbXBf ZGlzcF9hdmJ1Zl9yZWFkKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfRk1UKTsKKwl2YWwgJj0g bGF5ZXIgPT0gWllOUU1QX0RJU1BfTEFZRVJfVklECisJICAgID8gflpZTlFNUF9ESVNQX0FWX0JV Rl9GTVRfTkxfVklEX01BU0sKKwkgICAgOiB+WllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhf TUFTSzsKKwl2YWwgfD0gZm10LT5idWZfZm10OworCXp5bnFtcF9kaXNwX2F2YnVmX3dyaXRlKGF2 YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfRk1ULCB2YWwpOworCisJZm9yIChpID0gMDsgaSA8IFpZ TlFNUF9ESVNQX0FWX0JVRl9OVU1fU0Y7IGkrKykgeworCQl1bnNpZ25lZCBpbnQgcmVnID0gbGF5 ZXIgPT0gWllOUU1QX0RJU1BfTEFZRVJfVklECisJCQkJID8gWllOUU1QX0RJU1BfQVZfQlVGX1ZJ RF9DT01QX1NGKGkpCisJCQkJIDogWllOUU1QX0RJU1BfQVZfQlVGX0dGWF9DT01QX1NGKGkpOwor CisJCXp5bnFtcF9kaXNwX2F2YnVmX3dyaXRlKGF2YnVmLCByZWcsIGZtdC0+c2ZbaV0pOworCX0K K30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9zZXRfY2xvY2tzX3NvdXJjZXMgLSBTZXQg dGhlIGNsb2NrcyBzb3VyY2VzCisgKiBAYXZidWY6IEF1ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2Vy CisgKiBAdmlkZW9fZnJvbV9wczogVHJ1ZSBpZiB0aGUgdmlkZW8gY2xvY2sgb3JpZ2luYXRlcyBm cm9tIHRoZSBQUworICogQGF1ZGlvX2Zyb21fcHM6IFRydWUgaWYgdGhlIGF1ZGlvIGNsb2NrIG9y aWdpbmF0ZXMgZnJvbSB0aGUgUFMKKyAqIEB0aW1pbmdzX2ludGVybmFsOiBUcnVlIGlmIHZpZGVv IHRpbWluZ3MgYXJlIGdlbmVyYXRlZCBpbnRlcm5hbGx5CisgKgorICogU2V0IHRoZSBzb3VyY2Ug Zm9yIHRoZSB2aWRlbyBhbmQgYXVkaW8gY2xvY2tzLCBhcyB3ZWxsIGFzIGZvciB0aGUgdmlkZW8K KyAqIHRpbWluZ3MuIENsb2NrcyBjYW4gb3JpZ2luYXRlIGZyb20gdGhlIFBTIG9yIFBMLCBhbmQg dGltaW5ncyBjYW4gYmUKKyAqIGdlbmVyYXRlZCBpbnRlcm5hbGx5IG9yIGV4dGVybmFsbHkuCisg Ki8KK3N0YXRpYyB2b2lkCit6eW5xbXBfZGlzcF9hdmJ1Zl9zZXRfY2xvY2tzX3NvdXJjZXMoc3Ry dWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZiwKKwkJCQkgICAgIGJvb2wgdmlkZW9fZnJvbV9w cywgYm9vbCBhdWRpb19mcm9tX3BzLAorCQkJCSAgICAgYm9vbCB0aW1pbmdzX2ludGVybmFsKQor eworCXUzMiB2YWwgPSAwOworCisJaWYgKHZpZGVvX2Zyb21fcHMpCisJCXZhbCB8PSBaWU5RTVBf RElTUF9BVl9CVUZfQ0xLX1NSQ19WSURfRlJPTV9QUzsKKwlpZiAoYXVkaW9fZnJvbV9wcykKKwkJ dmFsIHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9DTEtfU1JDX0FVRF9GUk9NX1BTOworCWlmICh0aW1p bmdzX2ludGVybmFsKQorCQl2YWwgfD0gWllOUU1QX0RJU1BfQVZfQlVGX0NMS19TUkNfVklEX0lO VEVSTkFMX1RJTUlORzsKKworCXp5bnFtcF9kaXNwX2F2YnVmX3dyaXRlKGF2YnVmLCBaWU5RTVBf RElTUF9BVl9CVUZfQ0xLX1NSQywgdmFsKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdmJ1 Zl9lbmFibGVfY2hhbm5lbHMgLSBFbmFibGUgYnVmZmVyIGNoYW5uZWxzCisgKiBAYXZidWY6IEF1 ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2VyCisgKgorICogRW5hYmxlIGFsbCAodmlkZW8gYW5kIGF1 ZGlvKSBidWZmZXIgY2hhbm5lbHMuCisgKi8KK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F2YnVm X2VuYWJsZV9jaGFubmVscyhzdHJ1Y3QgenlucW1wX2Rpc3BfYXZidWYgKmF2YnVmKQoreworCXVu c2lnbmVkIGludCBpOworCXUzMiB2YWw7CisKKwl2YWwgPSBaWU5RTVBfRElTUF9BVl9CVUZfQ0hC VUZfRU4gfAorCSAgICAgIChaWU5RTVBfRElTUF9BVl9CVUZfQ0hCVUZfQlVSU1RfTEVOX01BWCA8 PAorCSAgICAgICBaWU5RTVBfRElTUF9BVl9CVUZfQ0hCVUZfQlVSU1RfTEVOX1NISUZUKTsKKwor CWZvciAoaSA9IDA7IGkgPCBaWU5RTVBfRElTUF9BVl9CVUZfTlVNX1ZJRF9HRlhfQlVGRkVSUzsg aSsrKQorCQl6eW5xbXBfZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVG X0NIQlVGKGkpLAorCQkJCQl2YWwpOworCisJdmFsID0gWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVG X0VOIHwKKwkgICAgICAoWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0JVUlNUX0xFTl9BVURfTUFY IDw8CisJICAgICAgIFpZTlFNUF9ESVNQX0FWX0JVRl9DSEJVRl9CVVJTVF9MRU5fU0hJRlQpOwor CisJZm9yICg7IGkgPCBaWU5RTVBfRElTUF9BVl9CVUZfTlVNX0JVRkZFUlM7IGkrKykKKwkJenlu cW1wX2Rpc3BfYXZidWZfd3JpdGUoYXZidWYsIFpZTlFNUF9ESVNQX0FWX0JVRl9DSEJVRihpKSwK KwkJCQkJdmFsKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlX2NoYW5u ZWxzIC0gRGlzYWJsZSBidWZmZXIgY2hhbm5lbHMKKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8gYnVm ZmVyIG1hbmFnZXIKKyAqCisgKiBEaXNhYmxlIGFsbCAodmlkZW8gYW5kIGF1ZGlvKSBidWZmZXIg Y2hhbm5lbHMuCisgKi8KK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F2YnVmX2Rpc2FibGVfY2hh bm5lbHMoc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZikKK3sKKwl1bnNpZ25lZCBpbnQg aTsKKworCWZvciAoaSA9IDA7IGkgPCBaWU5RTVBfRElTUF9BVl9CVUZfTlVNX0JVRkZFUlM7IGkr KykKKwkJenlucW1wX2Rpc3BfYXZidWZfd3JpdGUoYXZidWYsIFpZTlFNUF9ESVNQX0FWX0JVRl9D SEJVRihpKSwKKwkJCQkJWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0ZMVVNIKTsKK30KKworLyoq CisgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9lbmFibGVfYXVkaW8gLSBFbmFibGUgYXVkaW8KKyAqIEBh dmJ1ZjogQXVkaW8vdmlkZW8gYnVmZmVyIG1hbmFnZXIKKyAqCisgKiBFbmFibGUgYWxsIGF1ZGlv IGJ1ZmZlcnMgd2l0aCBhIG5vbi1saXZlIChtZW1vcnkpIHNvdXJjZS4KKyAqLworc3RhdGljIHZv aWQgenlucW1wX2Rpc3BfYXZidWZfZW5hYmxlX2F1ZGlvKHN0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1 ZiAqYXZidWYpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHp5bnFtcF9kaXNwX2F2YnVmX3JlYWQo YXZidWYsIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVQpOworCXZhbCAmPSB+WllOUU1QX0RJU1Bf QVZfQlVGX09VVFBVVF9BVUQxX01BU0s7CisJdmFsIHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQ VVRfQVVEMV9NRU07CisJdmFsIHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfQVVEMl9FTjsK Kwl6eW5xbXBfZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBV VCwgdmFsKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlX2F1ZGlvIC0g RGlzYWJsZSBhdWRpbworICogQGF2YnVmOiBBdWRpby92aWRlbyBidWZmZXIgbWFuYWdlcgorICoK KyAqIERpc2FibGUgYWxsIGF1ZGlvIGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHp5bnFtcF9k aXNwX2F2YnVmX2Rpc2FibGVfYXVkaW8oc3RydWN0IHp5bnFtcF9kaXNwX2F2YnVmICphdmJ1ZikK K3sKKwl1MzIgdmFsOworCisJdmFsID0genlucW1wX2Rpc3BfYXZidWZfcmVhZChhdmJ1ZiwgWllO UU1QX0RJU1BfQVZfQlVGX09VVFBVVCk7CisJdmFsICY9IH5aWU5RTVBfRElTUF9BVl9CVUZfT1VU UFVUX0FVRDFfTUFTSzsKKwl2YWwgfD0gWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9BVUQxX0RJ U0FCTEU7CisJdmFsICY9IH5aWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX0FVRDJfRU47CisJenlu cW1wX2Rpc3BfYXZidWZfd3JpdGUoYXZidWYsIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVQsIHZh bCk7Cit9CisKKy8qKgorICogenlucW1wX2Rpc3BfYXZidWZfZW5hYmxlX3ZpZGVvIC0gRW5hYmxl IGEgdmlkZW8gbGF5ZXIKKyAqIEBhdmJ1ZjogQXVkaW8vdmlkZW8gYnVmZmVyIG1hbmFnZXIKKyAq IEBsYXllcjogVGhlIGxheWVyIElECisgKiBAbW9kZTogT3BlcmF0aW5nIG1vZGUgb2YgbGF5ZXIK KyAqCisgKiBFbmFibGUgdGhlIHZpZGVvL2dyYXBoaWNzIGJ1ZmZlciBmb3IgQGxheWVyLgorICov CitzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9hdmJ1Zl9lbmFibGVfdmlkZW8oc3RydWN0IHp5bnFt cF9kaXNwX2F2YnVmICphdmJ1ZiwKKwkJCQkJICAgZW51bSB6eW5xbXBfZGlzcF9sYXllcl9pZCBs YXllciwKKwkJCQkJICAgZW51bSB6eW5xbXBfZGlzcF9sYXllcl9tb2RlIG1vZGUpCit7CisJdTMy IHZhbDsKKworCXZhbCA9IHp5bnFtcF9kaXNwX2F2YnVmX3JlYWQoYXZidWYsIFpZTlFNUF9ESVNQ X0FWX0JVRl9PVVRQVVQpOworCWlmIChsYXllciA9PSBaWU5RTVBfRElTUF9MQVlFUl9WSUQpIHsK KwkJdmFsICY9IH5aWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTUFTSzsKKwkJaWYgKG1v ZGUgPT0gWllOUU1QX0RJU1BfTEFZRVJfTk9OTElWRSkKKwkJCXZhbCB8PSBaWU5RTVBfRElTUF9B Vl9CVUZfT1VUUFVUX1ZJRDFfTUVNOworCQllbHNlCisJCQl2YWwgfD0gWllOUU1QX0RJU1BfQVZf QlVGX09VVFBVVF9WSUQxX0xJVkU7CisJfSBlbHNlIHsKKwkJdmFsICY9IH5aWU5RTVBfRElTUF9B Vl9CVUZfT1VUUFVUX1ZJRDJfTUFTSzsKKwkJdmFsIHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQ VVRfVklEMl9NRU07CisJCWlmIChtb2RlID09IFpZTlFNUF9ESVNQX0xBWUVSX05PTkxJVkUpCisJ CQl2YWwgfD0gWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQyX01FTTsKKwkJZWxzZQorCQkJ dmFsIHw9IFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMl9MSVZFOworCX0KKwl6eW5xbXBf ZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVCwgdmFsKTsK K30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlX3ZpZGVvIC0gRGlzYWJsZSBh IHZpZGVvIGxheWVyCisgKiBAYXZidWY6IEF1ZGlvL3ZpZGVvIGJ1ZmZlciBtYW5hZ2VyCisgKiBA bGF5ZXI6IFRoZSBsYXllciBJRAorICoKKyAqIERpc2FibGUgdGhlIHZpZGVvL2dyYXBoaWNzIGJ1 ZmZlciBmb3IgQGxheWVyLgorICovCitzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNh YmxlX3ZpZGVvKHN0cnVjdCB6eW5xbXBfZGlzcF9hdmJ1ZiAqYXZidWYsCisJCQkJCSAgICBlbnVt IHp5bnFtcF9kaXNwX2xheWVyX2lkIGxheWVyKQoreworCXUzMiB2YWw7CisKKwl2YWwgPSB6eW5x bXBfZGlzcF9hdmJ1Zl9yZWFkKGF2YnVmLCBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUKTsKKwlp ZiAobGF5ZXIgPT0gWllOUU1QX0RJU1BfTEFZRVJfVklEKSB7CisJCXZhbCAmPSB+WllOUU1QX0RJ U1BfQVZfQlVGX09VVFBVVF9WSUQxX01BU0s7CisJCXZhbCB8PSBaWU5RTVBfRElTUF9BVl9CVUZf T1VUUFVUX1ZJRDFfTk9ORTsKKwl9IGVsc2UgeworCQl2YWwgJj0gflpZTlFNUF9ESVNQX0FWX0JV Rl9PVVRQVVRfVklEMl9NQVNLOworCQl2YWwgfD0gWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9W SUQyX0RJU0FCTEU7CisJfQorCXp5bnFtcF9kaXNwX2F2YnVmX3dyaXRlKGF2YnVmLCBaWU5RTVBf RElTUF9BVl9CVUZfT1VUUFVULCB2YWwpOworfQorCisvKioKKyAqIHp5bnFtcF9kaXNwX2F2YnVm X2VuYWJsZSAtIEVuYWJsZSB0aGUgdmlkZW8gcGlwZQorICogQGF2YnVmOiBBdWRpby92aWRlbyBi dWZmZXIgbWFuYWdlcgorICoKKyAqIERlLWFzc2VydCB0aGUgdmlkZW8gcGlwZSByZXNldC4KKyAq Lworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYXZidWZfZW5hYmxlKHN0cnVjdCB6eW5xbXBfZGlz cF9hdmJ1ZiAqYXZidWYpCit7CisJenlucW1wX2Rpc3BfYXZidWZfd3JpdGUoYXZidWYsIFpZTlFN UF9ESVNQX0FWX0JVRl9TUlNUX1JFRywgMCk7Cit9CisKKy8qKgorICogenlucW1wX2Rpc3BfYXZi dWZfZGlzYWJsZSAtIERpc2FibGUgdGhlIHZpZGVvIHBpcGUKKyAqIEBhdmJ1ZjogQXVkaW8vdmlk ZW8gYnVmZmVyIG1hbmFnZXIKKyAqCisgKiBBc3NlcnQgdGhlIHZpZGVvIHBpcGUgcmVzZXQuCisg Ki8KK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F2YnVmX2Rpc2FibGUoc3RydWN0IHp5bnFtcF9k aXNwX2F2YnVmICphdmJ1ZikKK3sKKwl6eW5xbXBfZGlzcF9hdmJ1Zl93cml0ZShhdmJ1ZiwgWllO UU1QX0RJU1BfQVZfQlVGX1NSU1RfUkVHLAorCQkJCVpZTlFNUF9ESVNQX0FWX0JVRl9TUlNUX1JF R19WSURfUlNUKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJsZW5kZXIgKFZp ZGVvIFBpcGVsaW5lKQorICovCisKK3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2JsZW5kX3dyaXRl KHN0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCAqYmxlbmQsCisJCQkJICAgIGludCByZWcsIHUzMiB2 YWwpCit7CisJd3JpdGVsKHZhbCwgYmxlbmQtPmJhc2UgKyByZWcpOworfQorCisvKgorICogQ29s b3JzcGFjZSBjb252ZXJzaW9uIG1hdHJpY2VzLgorICoKKyAqIEhhcmRjb2RlIFJHQiA8LT4gWVVW IGNvbnZlcnNpb24gdG8gZnVsbC1yYW5nZSBTRFRWIGZvciBub3cuCisgKi8KK3N0YXRpYyBjb25z dCB1MTYgY3NjX3plcm9fbWF0cml4W10gPSB7CisJMHgwLCAgICAweDAsICAgIDB4MCwKKwkweDAs ICAgIDB4MCwgICAgMHgwLAorCTB4MCwgICAgMHgwLCAgICAweDAKK307CisKK3N0YXRpYyBjb25z dCB1MTYgY3NjX2lkZW50aXR5X21hdHJpeFtdID0geworCTB4MTAwMCwgMHgwLCAgICAweDAsCisJ MHgwLCAgICAweDEwMDAsIDB4MCwKKwkweDAsICAgIDB4MCwgICAgMHgxMDAwCit9OworCitzdGF0 aWMgY29uc3QgdTMyIGNzY196ZXJvX29mZnNldHNbXSA9IHsKKwkwLCAwLCAwCit9OworCitzdGF0 aWMgY29uc3QgdTE2IGNzY19yZ2JfdG9fc2R0dl9tYXRyaXhbXSA9IHsKKwkweDRjOSwgIDB4ODY0 LCAgMHgxZDMsCisJMHg3ZDRkLCAweDdhYjMsIDB4ODAwLAorCTB4ODAwLCAgMHg3OTRkLCAweDdl YjMKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY3NjX3JnYl90b19zZHR2X29mZnNldHNbXSA9IHsK KwkweDAsIDB4ODAwMDAwMCwgMHg4MDAwMDAwCit9OworCitzdGF0aWMgY29uc3QgdTE2IGNzY19z ZHR2X3RvX3JnYl9tYXRyaXhbXSA9IHsKKwkweDEwMDAsIDB4MTY2ZiwgMHgwLAorCTB4MTAwMCwg MHg3NDgzLCAweDdhN2YsCisJMHgxMDAwLCAweDAsICAgIDB4MWM1YQorfTsKKworc3RhdGljIGNv bnN0IHUzMiBjc2Nfc2R0dl90b19yZ2Jfb2Zmc2V0c1tdID0geworCTB4MCwgMHgxODAwLCAweDE4 MDAKK307CisKKy8qKgorICogenlucW1wX2Rpc3BfYmxlbmRfc2V0X291dHB1dF9mb3JtYXQgLSBT ZXQgdGhlIG91dHB1dCBmb3JtYXQgb2YgdGhlIGJsZW5kZXIKKyAqIEBibGVuZDogQmxlbmRlciBv YmplY3QKKyAqIEBmb3JtYXQ6IE91dHB1dCBmb3JtYXQKKyAqCisgKiBTZXQgdGhlIG91dHB1dCBm b3JtYXQgb2YgdGhlIGJsZW5kZXIgdG8gQGZvcm1hdC4KKyAqLworc3RhdGljIHZvaWQgenlucW1w X2Rpc3BfYmxlbmRfc2V0X291dHB1dF9mb3JtYXQoc3RydWN0IHp5bnFtcF9kaXNwX2JsZW5kICpi bGVuZCwKKwkJCQkJCWVudW0genlucW1wX2Rwc3ViX2Zvcm1hdCBmb3JtYXQpCit7CisJc3RhdGlj IGNvbnN0IHVuc2lnbmVkIGludCBibGVuZF9vdXRwdXRfZm10c1tdID0geworCQlbWllOUU1QX0RQ U1VCX0ZPUk1BVF9SR0JdID0gWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9SR0Is CisJCVtaWU5RTVBfRFBTVUJfRk9STUFUX1lDUkNCNDQ0XSA9IFpZTlFNUF9ESVNQX1ZfQkxFTkRf T1VUUFVUX1ZJRF9GTVRfWUNCQ1I0NDQsCisJCVtaWU5RTVBfRFBTVUJfRk9STUFUX1lDUkNCNDIy XSA9IFpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VUUFVUX1ZJRF9GTVRfWUNCQ1I0MjIKKwkJCQkJICAg ICAgIHwgWllOUU1QX0RJU1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVF9FTl9ET1dOU0FNUExFLAor CQlbWllOUU1QX0RQU1VCX0ZPUk1BVF9ZT05MWV0gPSBaWU5RTVBfRElTUF9WX0JMRU5EX09VVFBV VF9WSURfRk1UX1lPTkxZLAorCX07CisKKwl1MzIgZm10ID0gYmxlbmRfb3V0cHV0X2ZtdHNbZm9y bWF0XTsKKwljb25zdCB1MTYgKmNvZWZmczsKKwljb25zdCB1MzIgKm9mZnNldHM7CisJdW5zaWdu ZWQgaW50IGk7CisKKwl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwgWllOUU1QX0RJU1Bf Vl9CTEVORF9PVVRQVVRfVklEX0ZNVCwgZm10KTsKKwlpZiAoZm10ID09IFpZTlFNUF9ESVNQX1Zf QkxFTkRfT1VUUFVUX1ZJRF9GTVRfUkdCKSB7CisJCWNvZWZmcyA9IGNzY19pZGVudGl0eV9tYXRy aXg7CisJCW9mZnNldHMgPSBjc2NfemVyb19vZmZzZXRzOworCX0gZWxzZSB7CisJCWNvZWZmcyA9 IGNzY19yZ2JfdG9fc2R0dl9tYXRyaXg7CisJCW9mZnNldHMgPSBjc2NfcmdiX3RvX3NkdHZfb2Zm c2V0czsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1QX0RJU1BfVl9CTEVORF9OVU1fQ09F RkY7IGkrKykKKwkJenlucW1wX2Rpc3BfYmxlbmRfd3JpdGUoYmxlbmQsCisJCQkJCVpZTlFNUF9E SVNQX1ZfQkxFTkRfUkdCMllDQkNSX0NPRUZGKGkpLAorCQkJCQljb2VmZnNbaV0pOworCisJZm9y IChpID0gMDsgaSA8IFpZTlFNUF9ESVNQX1ZfQkxFTkRfTlVNX09GRlNFVDsgaSsrKQorCQl6eW5x bXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwKKwkJCQkJWllOUU1QX0RJU1BfVl9CTEVORF9PVVRD U0NfT0ZGU0VUKGkpLAorCQkJCQlvZmZzZXRzW2ldKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlz cF9ibGVuZF9zZXRfYmdfY29sb3IgLSBTZXQgdGhlIGJhY2tncm91bmQgY29sb3IKKyAqIEBibGVu ZDogQmxlbmRlciBvYmplY3QKKyAqIEByY3I6IFJlZC9DciBjb2xvciBjb21wb25lbnQKKyAqIEBn eTogR3JlZW4vWSBjb2xvciBjb21wb25lbnQKKyAqIEBiY2I6IEJsdWUvQ2IgY29sb3IgY29tcG9u ZW50CisgKgorICogU2V0IHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHRvIChAcmNyLCBAZ3ksIEBiY2Ip LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBSLCBHIGFuZAorICogQiBvciBDciwgWSBhbmQgQ2IgY29t cG9uZW50cyByZXNwZWN0aXZlbHkgZGVwZW5kaW5nIG9uIHRoZSBzZWxlY3RlZCBvdXRwdXQKKyAq IGZvcm1hdC4KKyAqLworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYmxlbmRfc2V0X2JnX2NvbG9y KHN0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCAqYmxlbmQsCisJCQkJCSAgIHUzMiByY3IsIHUzMiBn eSwgdTMyIGJjYikKK3sKKwl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwgWllOUU1QX0RJ U1BfVl9CTEVORF9CR19DTFJfMCwgcmNyKTsKKwl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShibGVu ZCwgWllOUU1QX0RJU1BfVl9CTEVORF9CR19DTFJfMSwgZ3kpOworCXp5bnFtcF9kaXNwX2JsZW5k X3dyaXRlKGJsZW5kLCBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8yLCBiY2IpOworfQorCisv KioKKyAqIHp5bnFtcF9kaXNwX2JsZW5kX3NldF9nbG9iYWxfYWxwaGEgLSBDb25maWd1cmUgZ2xv YmFsIGFscGhhIGJsZW5kaW5nCisgKiBAYmxlbmQ6IEJsZW5kZXIgb2JqZWN0CisgKiBAZW5hYmxl OiBUcnVlIHRvIGVuYWJsZSBnbG9iYWwgYWxwaGEgYmxlbmRpbmcKKyAqIEBhbHBoYTogR2xvYmFs IGFscGhhIHZhbHVlIChpZ25vcmVkIGlmIEBlbmFibGVkIGlzIGZhbHNlKQorICovCitzdGF0aWMg dm9pZCB6eW5xbXBfZGlzcF9ibGVuZF9zZXRfZ2xvYmFsX2FscGhhKHN0cnVjdCB6eW5xbXBfZGlz cF9ibGVuZCAqYmxlbmQsCisJCQkJCSAgICAgICBib29sIGVuYWJsZSwgdTMyIGFscGhhKQorewor CXp5bnFtcF9kaXNwX2JsZW5kX3dyaXRlKGJsZW5kLCBaWU5RTVBfRElTUF9WX0JMRU5EX1NFVF9H TE9CQUxfQUxQSEEsCisJCQkJWllOUU1QX0RJU1BfVl9CTEVORF9TRVRfR0xPQkFMX0FMUEhBX1ZB TFVFKGFscGhhKSB8CisJCQkJKGVuYWJsZSA/IFpZTlFNUF9ESVNQX1ZfQkxFTkRfU0VUX0dMT0JB TF9BTFBIQV9FTiA6IDApKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9ibGVuZF9sYXllcl9z ZXRfY3NjIC0gQ29uZmlndXJlIGNvbG9yc3BhY2UgY29udmVyc2lvbiBmb3IgbGF5ZXIKKyAqIEBi bGVuZDogQmxlbmRlciBvYmplY3QKKyAqIEBsYXllcjogVGhlIGxheWVyCisgKiBAY29lZmZzOiBD b2xvcnNwYWNlIGNvbnZlcnNpb24gbWF0cml4CisgKiBAb2Zmc2V0czogQ29sb3JzcGFjZSBjb252 ZXJzaW9uIG9mZnNldHMKKyAqCisgKiBDb25maWd1cmUgdGhlIGlucHV0IGNvbG9yc3BhY2UgY29u dmVyc2lvbiBtYXRyaXggYW5kIG9mZnNldHMgZm9yIHRoZSBAbGF5ZXIuCisgKiBDb2x1bW5zIG9m IHRoZSBtYXRyaXggYXJlIGF1dG9tYXRpY2FsbHkgc3dhcHBlZCBiYXNlZCBvbiB0aGUgaW5wdXQg Zm9ybWF0IHRvCisgKiBoYW5kbGUgUkdCIGFuZCBZQ3JDYiBjb21wb25lbnRzIHBlcm11dGF0aW9u cy4KKyAqLworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYmxlbmRfbGF5ZXJfc2V0X2NzYyhzdHJ1 Y3QgenlucW1wX2Rpc3BfYmxlbmQgKmJsZW5kLAorCQkJCQkgICAgc3RydWN0IHp5bnFtcF9kaXNw X2xheWVyICpsYXllciwKKwkJCQkJICAgIGNvbnN0IHUxNiAqY29lZmZzLAorCQkJCQkgICAgY29u c3QgdTMyICpvZmZzZXRzKQoreworCXVuc2lnbmVkIGludCBzd2FwWzNdID0geyAwLCAxLCAyIH07 CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChsYXllci0+ZGlz cF9mbXQtPnN3YXApIHsKKwkJaWYgKGxheWVyLT5kcm1fZm10LT5pc195dXYpIHsKKwkJCS8qIFN3 YXAgVSBhbmQgVi4gKi8KKwkJCXN3YXBbMV0gPSAyOworCQkJc3dhcFsyXSA9IDE7CisJCX0gZWxz ZSB7CisJCQkvKiBTd2FwIFIgYW5kIEIuICovCisJCQlzd2FwWzBdID0gMjsKKwkJCXN3YXBbMl0g PSAwOworCQl9CisJfQorCisJaWYgKGxheWVyLT5pZCA9PSBaWU5RTVBfRElTUF9MQVlFUl9WSUQp CisJCXJlZyA9IFpZTlFNUF9ESVNQX1ZfQkxFTkRfSU4xQ1NDX0NPRUZGKDApOworCWVsc2UKKwkJ cmVnID0gWllOUU1QX0RJU1BfVl9CTEVORF9JTjJDU0NfQ09FRkYoMCk7CisKKwlmb3IgKGkgPSAw OyBpIDwgWllOUU1QX0RJU1BfVl9CTEVORF9OVU1fQ09FRkY7IGkgKz0gMywgcmVnICs9IDEyKSB7 CisJCXp5bnFtcF9kaXNwX2JsZW5kX3dyaXRlKGJsZW5kLCByZWcgKyAwLCBjb2VmZnNbaSArIHN3 YXBbMF1dKTsKKwkJenlucW1wX2Rpc3BfYmxlbmRfd3JpdGUoYmxlbmQsIHJlZyArIDQsIGNvZWZm c1tpICsgc3dhcFsxXV0pOworCQl6eW5xbXBfZGlzcF9ibGVuZF93cml0ZShibGVuZCwgcmVnICsg OCwgY29lZmZzW2kgKyBzd2FwWzJdXSk7CisJfQorCisJaWYgKGxheWVyLT5pZCA9PSBaWU5RTVBf RElTUF9MQVlFUl9WSUQpCisJCXJlZyA9IFpZTlFNUF9ESVNQX1ZfQkxFTkRfSU4xQ1NDX09GRlNF VCgwKTsKKwllbHNlCisJCXJlZyA9IFpZTlFNUF9ESVNQX1ZfQkxFTkRfSU4yQ1NDX09GRlNFVCgw KTsKKworCWZvciAoaSA9IDA7IGkgPCBaWU5RTVBfRElTUF9WX0JMRU5EX05VTV9PRkZTRVQ7IGkr KykKKwkJenlucW1wX2Rpc3BfYmxlbmRfd3JpdGUoYmxlbmQsIHJlZyArIGkgKiA0LCBvZmZzZXRz W2ldKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9ibGVuZF9sYXllcl9lbmFibGUgLSBFbmFi bGUgYSBsYXllcgorICogQGJsZW5kOiBCbGVuZGVyIG9iamVjdAorICogQGxheWVyOiBUaGUgbGF5 ZXIKKyAqLworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYmxlbmRfbGF5ZXJfZW5hYmxlKHN0cnVj dCB6eW5xbXBfZGlzcF9ibGVuZCAqYmxlbmQsCisJCQkJCSAgIHN0cnVjdCB6eW5xbXBfZGlzcF9s YXllciAqbGF5ZXIpCit7CisJY29uc3QgdTE2ICpjb2VmZnM7CisJY29uc3QgdTMyICpvZmZzZXRz OworCXUzMiB2YWw7CisKKwl2YWwgPSAobGF5ZXItPmRybV9mbXQtPmlzX3l1diA/CisJICAgICAg IDAgOiBaWU5RTVBfRElTUF9WX0JMRU5EX0xBWUVSX0NPTlRST0xfUkdCKSB8CisJICAgICAgKGxh eWVyLT5kcm1fZm10LT5oc3ViID4gMSA/CisJICAgICAgIFpZTlFNUF9ESVNQX1ZfQkxFTkRfTEFZ RVJfQ09OVFJPTF9FTl9VUyA6IDApOworCisJenlucW1wX2Rpc3BfYmxlbmRfd3JpdGUoYmxlbmQs CisJCQkJWllOUU1QX0RJU1BfVl9CTEVORF9MQVlFUl9DT05UUk9MKGxheWVyLT5pZCksCisJCQkJ dmFsKTsKKworCWlmIChsYXllci0+ZHJtX2ZtdC0+aXNfeXV2KSB7CisJCWNvZWZmcyA9IGNzY19z ZHR2X3RvX3JnYl9tYXRyaXg7CisJCW9mZnNldHMgPSBjc2Nfc2R0dl90b19yZ2Jfb2Zmc2V0czsK Kwl9IGVsc2UgeworCQljb2VmZnMgPSBjc2NfaWRlbnRpdHlfbWF0cml4OworCQlvZmZzZXRzID0g Y3NjX3plcm9fb2Zmc2V0czsKKwl9CisKKwl6eW5xbXBfZGlzcF9ibGVuZF9sYXllcl9zZXRfY3Nj KGJsZW5kLCBsYXllciwgY29lZmZzLCBvZmZzZXRzKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlz cF9ibGVuZF9sYXllcl9kaXNhYmxlIC0gRGlzYWJsZSBhIGxheWVyCisgKiBAYmxlbmQ6IEJsZW5k ZXIgb2JqZWN0CisgKiBAbGF5ZXI6IFRoZSBsYXllcgorICovCitzdGF0aWMgdm9pZCB6eW5xbXBf ZGlzcF9ibGVuZF9sYXllcl9kaXNhYmxlKHN0cnVjdCB6eW5xbXBfZGlzcF9ibGVuZCAqYmxlbmQs CisJCQkJCSAgICBzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyKQoreworCXp5bnFtcF9k aXNwX2JsZW5kX3dyaXRlKGJsZW5kLAorCQkJCVpZTlFNUF9ESVNQX1ZfQkxFTkRfTEFZRVJfQ09O VFJPTChsYXllci0+aWQpLAorCQkJCTApOworCisJenlucW1wX2Rpc3BfYmxlbmRfbGF5ZXJfc2V0 X2NzYyhibGVuZCwgbGF5ZXIsIGNzY196ZXJvX21hdHJpeCwKKwkJCQkJY3NjX3plcm9fb2Zmc2V0 cyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBBdWRpbyBNaXhlcgorICovCisK K3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX2F1ZGlvX3dyaXRlKHN0cnVjdCB6eW5xbXBfZGlzcF9h dWRpbyAqYXVkaW8sCisJCQkJICBpbnQgcmVnLCB1MzIgdmFsKQoreworCXdyaXRlbCh2YWwsIGF1 ZGlvLT5iYXNlICsgcmVnKTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdWRpb19lbmFibGUg LSBFbmFibGUgdGhlIGF1ZGlvIG1peGVyCisgKiBAYXVkaW86IEF1ZGlvIG1peGVyCisgKgorICog RW5hYmxlIHRoZSBhdWRpbyBtaXhlciBieSBkZS1hc3NlcnRpbmcgdGhlIHNvZnQgcmVzZXQuIFRo ZSBhdWRpbyBzdGF0ZSBpcyBzZXQgdG8KKyAqIGRlZmF1bHQgdmFsdWVzIGJ5IHRoZSByZXNldCwg c2V0IHRoZSBkZWZhdWx0IG1peGVyIHZvbHVtZSBleHBsaWNpdGx5LgorICovCitzdGF0aWMgdm9p ZCB6eW5xbXBfZGlzcF9hdWRpb19lbmFibGUoc3RydWN0IHp5bnFtcF9kaXNwX2F1ZGlvICphdWRp bykKK3sKKwkvKiBDbGVhciB0aGUgYXVkaW8gc29mdCByZXNldCByZWdpc3RlciBhcyBpdCdzIGFu IG5vbi1yZXNldCBmbG9wLiAqLworCXp5bnFtcF9kaXNwX2F1ZGlvX3dyaXRlKGF1ZGlvLCBaWU5R TVBfRElTUF9BVURfU09GVF9SRVNFVCwgMCk7CisJenlucW1wX2Rpc3BfYXVkaW9fd3JpdGUoYXVk aW8sIFpZTlFNUF9ESVNQX0FVRF9NSVhFUl9WT0xVTUUsCisJCQkJWllOUU1QX0RJU1BfQVVEX01J WEVSX1ZPTFVNRV9OT19TQ0FMRSk7Cit9CisKKy8qKgorICogenlucW1wX2Rpc3BfYXVkaW9fZGlz YWJsZSAtIERpc2FibGUgdGhlIGF1ZGlvIG1peGVyCisgKiBAYXVkaW86IEF1ZGlvIG1peGVyCisg KgorICogRGlzYWJsZSB0aGUgYXVkaW8gbWl4ZXIgYnkgYXNzZXJ0aW5nIGl0cyBzb2Z0IHJlc2V0 LgorICovCitzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9hdWRpb19kaXNhYmxlKHN0cnVjdCB6eW5x bXBfZGlzcF9hdWRpbyAqYXVkaW8pCit7CisJenlucW1wX2Rpc3BfYXVkaW9fd3JpdGUoYXVkaW8s IFpZTlFNUF9ESVNQX0FVRF9TT0ZUX1JFU0VULAorCQkJCVpZTlFNUF9ESVNQX0FVRF9TT0ZUX1JF U0VUX0FVRF9TUlNUKTsKK30KKworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfYXVkaW9faW5pdChz dHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCB6eW5xbXBfZGlzcF9hdWRpbyAqYXVkaW8p Cit7CisJLyogVHJ5IHRoZSBsaXZlIFBMIGF1ZGlvIGNsb2NrLiAqLworCWF1ZGlvLT5fcGxfY2xr ID0gZGV2bV9jbGtfZ2V0KGRldiwgImRwX2xpdmVfYXVkaW9fYWNsayIpOworCWlmICghSVNfRVJS KGF1ZGlvLT5fcGxfY2xrKSkgeworCQlhdWRpby0+Y2xrID0gYXVkaW8tPl9wbF9jbGs7CisJCXJl dHVybjsKKwl9CisKKwkvKiBJZiB0aGUgbGl2ZSBQTCBhdWRpbyBjbG9jayBpcyBub3QgdmFsaWQs IGZhbGwgYmFjayB0byBQUyBjbG9jay4gKi8KKwlhdWRpby0+X3BzX2NsayA9IGRldm1fY2xrX2dl dChkZXYsICJkcF9hdWRfY2xrIik7CisJaWYgKCFJU19FUlIoYXVkaW8tPl9wc19jbGspKSB7CisJ CWF1ZGlvLT5jbGsgPSBhdWRpby0+X3BzX2NsazsKKwkJcmV0dXJuOworCX0KKworCWRldl9lcnIo ZGV2LCAiYXVkaW8gZGlzYWJsZWQgZHVlIHRvIG1pc3NpbmcgY2xvY2tcbiIpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICogWnlucU1QIERpc3BsYXkgZXh0ZXJuYWwgZnVuY3Rpb25z IGZvciB6eW5xbXBfZHAKKyAqLworCisvKioKKyAqIHp5bnFtcF9kaXNwX2hhbmRsZV92Ymxhbmsg LSBIYW5kbGUgdGhlIHZibGFuayBldmVudAorICogQGRpc3A6IERpc3BsYXkgY29udHJvbGxlcgor ICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgdmJsYW5rIGludGVycnVwdCwgYW5kIHNl bmRzIGFuIGV2ZW50IHRvCisgKiBDUlRDIG9iamVjdC4gVGhpcyB3aWxsIGJlIGNhbGxlZCBieSB0 aGUgRFAgdmJsYW5rIGludGVycnVwdCBoYW5kbGVyLgorICovCit2b2lkIHp5bnFtcF9kaXNwX2hh bmRsZV92Ymxhbmsoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwKQoreworCXN0cnVjdCBkcm1fY3J0 YyAqY3J0YyA9ICZkaXNwLT5jcnRjOworCisJZHJtX2NydGNfaGFuZGxlX3ZibGFuayhjcnRjKTsK K30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9hdWRpb19lbmFibGVkIC0gSWYgdGhlIGF1ZGlvIGlz IGVuYWJsZWQKKyAqIEBkaXNwOiBEaXNwbGF5IGNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm4gaWYg dGhlIGF1ZGlvIGlzIGVuYWJsZWQgZGVwZW5kaW5nIG9uIHRoZSBhdWRpbyBjbG9jay4KKyAqCisg KiBSZXR1cm46IHRydWUgaWYgYXVkaW8gaXMgZW5hYmxlZCwgb3IgZmFsc2UuCisgKi8KK2Jvb2wg enlucW1wX2Rpc3BfYXVkaW9fZW5hYmxlZChzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3ApCit7CisJ cmV0dXJuICEhZGlzcC0+YXVkaW8uY2xrOworfQorCisvKioKKyAqIHp5bnFtcF9kaXNwX2dldF9h dWRpb19jbGtfcmF0ZSAtIEdldCB0aGUgY3VycmVudCBhdWRpbyBjbG9jayByYXRlCisgKiBAZGlz cDogRGlzcGxheSBjb250cm9sbGVyCisgKgorICogUmV0dXJuOiB0aGUgY3VycmVudCBhdWRpbyBj bG9jayByYXRlLgorICovCit1bnNpZ25lZCBpbnQgenlucW1wX2Rpc3BfZ2V0X2F1ZGlvX2Nsa19y YXRlKHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCkKK3sKKwlpZiAoenlucW1wX2Rpc3BfYXVkaW9f ZW5hYmxlZChkaXNwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShkaXNwLT5h dWRpby5jbGspOworfQorCisvKioKKyAqIHp5bnFtcF9kaXNwX2dldF9jcnRjX21hc2sgLSBSZXR1 cm4gdGhlIENSVEMgYml0IG1hc2sKKyAqIEBkaXNwOiBEaXNwbGF5IGNvbnRyb2xsZXIKKyAqCisg KiBSZXR1cm46IHRoZSBjcnRjIG1hc2sgb2YgdGhlIHp5cW5tcF9kaXNwIENSVEMuCisgKi8KK3Vp bnQzMl90IHp5bnFtcF9kaXNwX2dldF9jcnRjX21hc2soc3RydWN0IHp5bnFtcF9kaXNwICpkaXNw KQoreworCXJldHVybiBkcm1fY3J0Y19tYXNrKCZkaXNwLT5jcnRjKTsKK30KKworLyogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqIFp5bnFNUCBEaXNwbGF5IExheWVyICYgRFJNIFBsYW5lCisgKi8K KworLyoqCisgKiB6eW5xbXBfZGlzcF9sYXllcl9maW5kX2Zvcm1hdCAtIEZpbmQgZm9ybWF0IGlu Zm9ybWF0aW9uIGZvciBhIERSTSBmb3JtYXQKKyAqIEBsYXllcjogVGhlIGxheWVyCisgKiBAZHJt X2ZtdDogRFJNIGZvcm1hdCB0byBzZWFyY2gKKyAqCisgKiBTZWFyY2ggZGlzcGxheSBzdWJzeXN0 ZW0gZm9ybWF0IGluZm9ybWF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIERSTQorICog Zm9ybWF0IEBkcm1fZm10IGZvciB0aGUgQGxheWVyLCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byB0 aGUgZm9ybWF0CisgKiBkZXNjcmlwdG9yLgorICoKKyAqIFJldHVybjogQSBwb2ludGVyIHRvIHRo ZSBmb3JtYXQgZGVzY3JpcHRvciBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAqLworc3RhdGlj IGNvbnN0IHN0cnVjdCB6eW5xbXBfZGlzcF9mb3JtYXQgKgorenlucW1wX2Rpc3BfbGF5ZXJfZmlu ZF9mb3JtYXQoc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyICpsYXllciwKKwkJCSAgICAgIHUzMiBk cm1fZm10KQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxheWVyLT5p bmZvLT5udW1fZm9ybWF0czsgaSsrKSB7CisJCWlmIChsYXllci0+aW5mby0+Zm9ybWF0c1tpXS5k cm1fZm10ID09IGRybV9mbXQpCisJCQlyZXR1cm4gJmxheWVyLT5pbmZvLT5mb3JtYXRzW2ldOwor CX0KKworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHp5bnFtcF9kaXNwX2xheWVyX2VuYWJs ZSAtIEVuYWJsZSBhIGxheWVyCisgKiBAbGF5ZXI6IFRoZSBsYXllcgorICoKKyAqIEVuYWJsZSB0 aGUgQGxheWVyIGluIHRoZSBhdWRpby92aWRlbyBidWZmZXIgbWFuYWdlciBhbmQgdGhlIGJsZW5k ZXIuIERNQQorICogY2hhbm5lbHMgYXJlIHN0YXJ0ZWQgc2VwYXJhdGVseSBieSB6eW5xbXBfZGlz cF9sYXllcl91cGRhdGUoKS4KKyAqLworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfbGF5ZXJfZW5h YmxlKHN0cnVjdCB6eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIpCit7CisJenlucW1wX2Rpc3BfYXZi dWZfZW5hYmxlX3ZpZGVvKCZsYXllci0+ZGlzcC0+YXZidWYsIGxheWVyLT5pZCwKKwkJCQkgICAg ICAgWllOUU1QX0RJU1BfTEFZRVJfTk9OTElWRSk7CisJenlucW1wX2Rpc3BfYmxlbmRfbGF5ZXJf ZW5hYmxlKCZsYXllci0+ZGlzcC0+YmxlbmQsIGxheWVyKTsKKworCWxheWVyLT5tb2RlID0gWllO UU1QX0RJU1BfTEFZRVJfTk9OTElWRTsKK30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9sYXllcl9k aXNhYmxlIC0gRGlzYWJsZSB0aGUgbGF5ZXIKKyAqIEBsYXllcjogVGhlIGxheWVyCisgKgorICog RGlzYWJsZSB0aGUgbGF5ZXIgYnkgc3RvcHBpbmcgaXRzIERNQSBjaGFubmVscyBhbmQgZGlzYWJs aW5nIGl0IGluIHRoZQorICogYXVkaW8vdmlkZW8gYnVmZmVyIG1hbmFnZXIgYW5kIHRoZSBibGVu ZGVyLgorICovCitzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9sYXllcl9kaXNhYmxlKHN0cnVjdCB6 eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkg PSAwOyBpIDwgbGF5ZXItPmRybV9mbXQtPm51bV9wbGFuZXM7IGkrKykKKwkJZG1hZW5naW5lX3Rl cm1pbmF0ZV9zeW5jKGxheWVyLT5kbWFzW2ldLmNoYW4pOworCisJenlucW1wX2Rpc3BfYXZidWZf ZGlzYWJsZV92aWRlbygmbGF5ZXItPmRpc3AtPmF2YnVmLCBsYXllci0+aWQpOworCXp5bnFtcF9k aXNwX2JsZW5kX2xheWVyX2Rpc2FibGUoJmxheWVyLT5kaXNwLT5ibGVuZCwgbGF5ZXIpOworfQor CisvKioKKyAqIHp5bnFtcF9kaXNwX2xheWVyX3NldF9mb3JtYXQgLSBTZXQgdGhlIGxheWVyIGZv cm1hdAorICogQGxheWVyOiBUaGUgbGF5ZXIKKyAqIEBzdGF0ZTogVGhlIHBsYW5lIHN0YXRlCisg KgorICogU2V0IHRoZSBmb3JtYXQgZm9yIEBsYXllciBiYXNlZCBvbiBAc3RhdGUtPmZiLT5mb3Jt YXQuIFRoZSBsYXllciBtdXN0IGJlCisgKiBkaXNhYmxlZC4KKyAqLworc3RhdGljIHZvaWQgenlu cW1wX2Rpc3BfbGF5ZXJfc2V0X2Zvcm1hdChzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIgKmxheWVy LAorCQkJCQkgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCit7CisJY29uc3Qgc3RydWN0 IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IHN0YXRlLT5mYi0+Zm9ybWF0OworCXVuc2lnbmVkIGlu dCBpOworCisJbGF5ZXItPmRpc3BfZm10ID0genlucW1wX2Rpc3BfbGF5ZXJfZmluZF9mb3JtYXQo bGF5ZXIsIGluZm8tPmZvcm1hdCk7CisJbGF5ZXItPmRybV9mbXQgPSBpbmZvOworCisJenlucW1w X2Rpc3BfYXZidWZfc2V0X2Zvcm1hdCgmbGF5ZXItPmRpc3AtPmF2YnVmLCBsYXllci0+aWQsCisJ CQkJICAgICBsYXllci0+ZGlzcF9mbXQpOworCisJLyoKKwkgKiBTZXQgc2xhdmVfaWQgZm9yIGVh Y2ggRE1BIGNoYW5uZWwgdG8gaW5kaWNhdGUgdGhleSdyZSBwYXJ0IG9mIGEKKwkgKiB2aWRlbyBn cm91cC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX3BsYW5lczsgaSsrKSB7CisJ CXN0cnVjdCB6eW5xbXBfZGlzcF9sYXllcl9kbWEgKmRtYSA9ICZsYXllci0+ZG1hc1tpXTsKKwkJ c3RydWN0IGRtYV9zbGF2ZV9jb25maWcgY29uZmlnID0geworCQkJLmRpcmVjdGlvbiA9IERNQV9N RU1fVE9fREVWLAorCQkJLnNsYXZlX2lkID0gMSwKKwkJfTsKKworCQlkbWFlbmdpbmVfc2xhdmVf Y29uZmlnKGRtYS0+Y2hhbiwgJmNvbmZpZyk7CisJfQorfQorCisvKioKKyAqIHp5bnFtcF9kaXNw X2xheWVyX3VwZGF0ZSAtIFVwZGF0ZSB0aGUgbGF5ZXIgZnJhbWVidWZmZXIKKyAqIEBsYXllcjog VGhlIGxheWVyCisgKiBAc3RhdGU6IFRoZSBwbGFuZSBzdGF0ZQorICoKKyAqIFVwZGF0ZSB0aGUg ZnJhbWVidWZmZXIgZm9yIHRoZSBsYXllciBieSBpc3N1aW5nIGEgbmV3IERNQSBlbmdpbmUgdHJh bnNhY3Rpb24KKyAqIGZvciB0aGUgbmV3IGZyYW1lYnVmZmVyLgorICoKKyAqIFJldHVybjogMCBv biBzdWNjZXNzLCBvciB0aGUgRE1BIGRlc2NyaXB0b3IgZmFpbHVyZSBlcnJvciBvdGhlcndpc2UK KyAqLworc3RhdGljIGludCB6eW5xbXBfZGlzcF9sYXllcl91cGRhdGUoc3RydWN0IHp5bnFtcF9k aXNwX2xheWVyICpsYXllciwKKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUp Cit7CisJY29uc3Qgc3RydWN0IGRybV9mb3JtYXRfaW5mbyAqaW5mbyA9IGxheWVyLT5kcm1fZm10 OworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxheWVyLT5kcm1fZm10LT5u dW1fcGxhbmVzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHdpZHRoID0gc3RhdGUtPmNydGNfdyAv IChpID8gaW5mby0+aHN1YiA6IDEpOworCQl1bnNpZ25lZCBpbnQgaGVpZ2h0ID0gc3RhdGUtPmNy dGNfaCAvIChpID8gaW5mby0+dnN1YiA6IDEpOworCQlzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXJf ZG1hICpkbWEgPSAmbGF5ZXItPmRtYXNbaV07CisJCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3Jp cHRvciAqZGVzYzsKKwkJZG1hX2FkZHJfdCBwYWRkcjsKKworCQlwYWRkciA9IGRybV9mYl9jbWFf Z2V0X2dlbV9hZGRyKHN0YXRlLT5mYiwgc3RhdGUsIGkpOworCisJCWRtYS0+eHQubnVtZiA9IGhl aWdodDsKKwkJZG1hLT5zZ2wuc2l6ZSA9IHdpZHRoICogaW5mby0+Y3BwW2ldOworCQlkbWEtPnNn bC5pY2cgPSBzdGF0ZS0+ZmItPnBpdGNoZXNbaV0gLSBkbWEtPnNnbC5zaXplOworCQlkbWEtPnh0 LnNyY19zdGFydCA9IHBhZGRyOworCQlkbWEtPnh0LmZyYW1lX3NpemUgPSAxOworCQlkbWEtPnh0 LmRpciA9IERNQV9NRU1fVE9fREVWOworCQlkbWEtPnh0LnNyY19zZ2wgPSB0cnVlOworCQlkbWEt Pnh0LmRzdF9zZ2wgPSBmYWxzZTsKKworCQlkZXNjID0gZG1hZW5naW5lX3ByZXBfaW50ZXJsZWF2 ZWRfY3ljbGljKGRtYS0+Y2hhbiwgJmRtYS0+eHQsCisJCQkJCQkJIERNQV9DVFJMX0FDSyk7CisJ CWlmICghZGVzYykgeworCQkJZGV2X2VycihsYXllci0+ZGlzcC0+ZGV2LAorCQkJCSJmYWlsZWQg dG8gcHJlcGFyZSBETUEgZGVzY3JpcHRvclxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQor CisJCWRtYWVuZ2luZV9zdWJtaXQoZGVzYyk7CisJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGRt YS0+Y2hhbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHp5 bnFtcF9kaXNwX2xheWVyICpwbGFuZV90b19sYXllcihzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkK K3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBsYW5lLCBzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIs IHBsYW5lKTsKK30KKworc3RhdGljIGludAorenlucW1wX2Rpc3BfcGxhbmVfYXRvbWljX2NoZWNr KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAorCQkJICAgICAgIHN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlKQoreworCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKKworCWlm ICghc3RhdGUtPmNydGMpCisJCXJldHVybiAwOworCisJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X2NydGNfc3RhdGUoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+Y3J0Yyk7CisJaWYgKElTX0VSUihj cnRjX3N0YXRlKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J0Y19zdGF0ZSk7CisKKwlyZXR1cm4gZHJt X2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoc3RhdGUsIGNydGNfc3RhdGUsCisJCQkJ CQkgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCisJCQkJCQkgICBEUk1fUExBTkVfSEVM UEVSX05PX1NDQUxJTkcsCisJCQkJCQkgICBmYWxzZSwgZmFsc2UpOworfQorCitzdGF0aWMgdm9p ZAorenlucW1wX2Rpc3BfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCisJCQkJIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKm9sZF9zdGF0ZSkKK3sKKwlzdHJ1Y3Qg enlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyID0gcGxhbmVfdG9fbGF5ZXIocGxhbmUpOworCisJaWYg KCFvbGRfc3RhdGUtPmZiKQorCQlyZXR1cm47CisKKwl6eW5xbXBfZGlzcF9sYXllcl9kaXNhYmxl KGxheWVyKTsKK30KKworc3RhdGljIHZvaWQKK3p5bnFtcF9kaXNwX3BsYW5lX2F0b21pY191cGRh dGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCisJCQkJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq b2xkX3N0YXRlKQoreworCXN0cnVjdCB6eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIgPSBwbGFuZV90 b19sYXllcihwbGFuZSk7CisJYm9vbCBmb3JtYXRfY2hhbmdlZCA9IGZhbHNlOworCisJaWYgKCFv bGRfc3RhdGUtPmZiIHx8CisJICAgIG9sZF9zdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0ICE9IHBs YW5lLT5zdGF0ZS0+ZmItPmZvcm1hdC0+Zm9ybWF0KQorCQlmb3JtYXRfY2hhbmdlZCA9IHRydWU7 CisKKwkvKgorCSAqIElmIHRoZSBmb3JtYXQgaGFzIGNoYW5nZWQgKGluY2x1ZGluZyBnb2luZyBm cm9tIGEgcHJldmlvdXNseQorCSAqIGRpc2FibGVkIHN0YXRlIHRvIGFueSBmb3JtYXQpLCByZWNv bmZpZ3VyZSB0aGUgZm9ybWF0LiBEaXNhYmxlIHRoZQorCSAqIHBsYW5lIGZpcnN0IGlmIG5lZWRl ZC4KKwkgKi8KKwlpZiAoZm9ybWF0X2NoYW5nZWQpIHsKKwkJaWYgKG9sZF9zdGF0ZS0+ZmIpCisJ CQl6eW5xbXBfZGlzcF9sYXllcl9kaXNhYmxlKGxheWVyKTsKKworCQl6eW5xbXBfZGlzcF9sYXll cl9zZXRfZm9ybWF0KGxheWVyLCBwbGFuZS0+c3RhdGUpOworCX0KKworCXp5bnFtcF9kaXNwX2xh eWVyX3VwZGF0ZShsYXllciwgcGxhbmUtPnN0YXRlKTsKKworCS8qIEVuYWJsZSBvciByZS1lbmFi bGUgdGhlIHBsYW5lIGlzIHRoZSBmb3JtYXQgaGFzIGNoYW5nZWQuICovCisJaWYgKGZvcm1hdF9j aGFuZ2VkKQorCQl6eW5xbXBfZGlzcF9sYXllcl9lbmFibGUobGF5ZXIpOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgenlucW1wX2Rpc3BfcGxhbmVfaGVs cGVyX2Z1bmNzID0geworCS5hdG9taWNfY2hlY2sJCT0genlucW1wX2Rpc3BfcGxhbmVfYXRvbWlj X2NoZWNrLAorCS5hdG9taWNfdXBkYXRlCQk9IHp5bnFtcF9kaXNwX3BsYW5lX2F0b21pY191cGRh dGUsCisJLmF0b21pY19kaXNhYmxlCQk9IHp5bnFtcF9kaXNwX3BsYW5lX2F0b21pY19kaXNhYmxl LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVfZnVuY3MgenlucW1wX2Rpc3Bf cGxhbmVfZnVuY3MgPSB7CisJLnVwZGF0ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRh dGVfcGxhbmUsCisJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9w bGFuZSwKKwkuZGVzdHJveQkJPSBkcm1fcGxhbmVfY2xlYW51cCwKKwkucmVzZXQJCQk9IGRybV9h dG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gZHJt X2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAorCS5hdG9taWNfZGVzdHJveV9z dGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCit9OworCitzdGF0 aWMgaW50IHp5bnFtcF9kaXNwX2NyZWF0ZV9wbGFuZXMoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNw KQoreworCXVuc2lnbmVkIGludCBpLCBqOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwg WllOUU1QX0RJU1BfTlVNX0xBWUVSUzsgaSsrKSB7CisJCXN0cnVjdCB6eW5xbXBfZGlzcF9sYXll ciAqbGF5ZXIgPSAmZGlzcC0+bGF5ZXJzW2ldOworCQllbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7 CisJCXUzMiAqZHJtX2Zvcm1hdHM7CisKKwkJZHJtX2Zvcm1hdHMgPSBkZXZtX2tjYWxsb2MoZGlz cC0+ZGV2LCBzaXplb2YoKmRybV9mb3JtYXRzKSwKKwkJCQkJICAgbGF5ZXItPmluZm8tPm51bV9m b3JtYXRzLAorCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkcm1fZm9ybWF0cykKKwkJCXJl dHVybiAtRU5PTUVNOworCisJCWZvciAoaiA9IDA7IGogPCBsYXllci0+aW5mby0+bnVtX2Zvcm1h dHM7ICsraikKKwkJCWRybV9mb3JtYXRzW2pdID0gbGF5ZXItPmluZm8tPmZvcm1hdHNbal0uZHJt X2ZtdDsKKworCQkvKiBHcmFwaGljcyBsYXllciBpcyBwcmltYXJ5LCBhbmQgdmlkZW8gbGF5ZXIg aXMgb3ZlcmxheS4gKi8KKwkJdHlwZSA9IGkgPT0gWllOUU1QX0RJU1BfTEFZRVJfR0ZYCisJCSAg ICAgPyBEUk1fUExBTkVfVFlQRV9QUklNQVJZIDogRFJNX1BMQU5FX1RZUEVfT1ZFUkxBWTsKKwkJ cmV0ID0gZHJtX3VuaXZlcnNhbF9wbGFuZV9pbml0KGRpc3AtPmRybSwgJmxheWVyLT5wbGFuZSwg MCwKKwkJCQkJICAgICAgICZ6eW5xbXBfZGlzcF9wbGFuZV9mdW5jcywKKwkJCQkJICAgICAgIGRy bV9mb3JtYXRzLAorCQkJCQkgICAgICAgbGF5ZXItPmluZm8tPm51bV9mb3JtYXRzLAorCQkJCQkg ICAgICAgTlVMTCwgdHlwZSwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJ CWRybV9wbGFuZV9oZWxwZXJfYWRkKCZsYXllci0+cGxhbmUsCisJCQkJICAgICAmenlucW1wX2Rp c3BfcGxhbmVfaGVscGVyX2Z1bmNzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB6 eW5xbXBfZGlzcF9sYXllcl9yZWxlYXNlX2RtYSAtIFJlbGVhc2UgRE1BIGNoYW5uZWxzIGZvciBh IGxheWVyCisgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCisgKiBAbGF5ZXI6IFRoZSBsYXll cgorICoKKyAqIFJlbGVhc2UgdGhlIERNQSBjaGFubmVscyBhc3NvY2lhdGVkIHdpdGggQGxheWVy LgorICovCitzdGF0aWMgdm9pZCB6eW5xbXBfZGlzcF9sYXllcl9yZWxlYXNlX2RtYShzdHJ1Y3Qg enlucW1wX2Rpc3AgKmRpc3AsCisJCQkJCSAgc3RydWN0IHp5bnFtcF9kaXNwX2xheWVyICpsYXll cikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghbGF5ZXItPmluZm8pCisJCXJldHVybjsK KworCWZvciAoaSA9IDA7IGkgPCBsYXllci0+aW5mby0+bnVtX2NoYW5uZWxzOyBpKyspIHsKKwkJ c3RydWN0IHp5bnFtcF9kaXNwX2xheWVyX2RtYSAqZG1hID0gJmxheWVyLT5kbWFzW2ldOworCisJ CWlmICghZG1hLT5jaGFuKQorCQkJY29udGludWU7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBjaGFu bmVsIGlzIHRlcm1pbmF0ZWQgYmVmb3JlIHJlbGVhc2UuICovCisJCWRtYWVuZ2luZV90ZXJtaW5h dGVfc3luYyhkbWEtPmNoYW4pOworCQlkbWFfcmVsZWFzZV9jaGFubmVsKGRtYS0+Y2hhbik7CisJ fQorfQorCisvKioKKyAqIHp5bnFtcF9kaXNwX2Rlc3Ryb3lfbGF5ZXJzIC0gRGVzdHJveSBhbGwg bGF5ZXJzCisgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIHp5 bnFtcF9kaXNwX2Rlc3Ryb3lfbGF5ZXJzKHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCkKK3sKKwl1 bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBaWU5RTVBfRElTUF9OVU1fTEFZRVJT OyBpKyspCisJCXp5bnFtcF9kaXNwX2xheWVyX3JlbGVhc2VfZG1hKGRpc3AsICZkaXNwLT5sYXll cnNbaV0pOworfQorCisvKioKKyAqIHp5bnFtcF9kaXNwX2xheWVyX3JlcXVlc3RfZG1hIC0gUmVx dWVzdCBETUEgY2hhbm5lbHMgZm9yIGEgbGF5ZXIKKyAqIEBkaXNwOiBEaXNwbGF5IGNvbnRyb2xs ZXIKKyAqIEBsYXllcjogVGhlIGxheWVyCisgKgorICogUmVxdWVzdCBhbGwgRE1BIGVuZ2luZSBj aGFubmVscyBuZWVkZWQgYnkgQGxheWVyLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBv ciB0aGUgRE1BIGNoYW5uZWwgcmVxdWVzdCBlcnJvciBvdGhlcndpc2UKKyAqLworc3RhdGljIGlu dCB6eW5xbXBfZGlzcF9sYXllcl9yZXF1ZXN0X2RtYShzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3As CisJCQkJCSBzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5ZXIgKmxheWVyKQoreworCXN0YXRpYyBjb25z dCBjaGFyICogY29uc3QgZG1hX25hbWVzW10gPSB7ICJ2aWQiLCAiZ2Z4IiB9OworCXVuc2lnbmVk IGludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGF5ZXItPmluZm8tPm51bV9j aGFubmVsczsgaSsrKSB7CisJCXN0cnVjdCB6eW5xbXBfZGlzcF9sYXllcl9kbWEgKmRtYSA9ICZs YXllci0+ZG1hc1tpXTsKKwkJY2hhciBkbWFfY2hhbm5lbF9uYW1lWzE2XTsKKworCQlzbnByaW50 ZihkbWFfY2hhbm5lbF9uYW1lLCBzaXplb2YoZG1hX2NoYW5uZWxfbmFtZSksCisJCQkgIiVzJXUi LCBkbWFfbmFtZXNbbGF5ZXItPmlkXSwgaSk7CisJCWRtYS0+Y2hhbiA9IG9mX2RtYV9yZXF1ZXN0 X3NsYXZlX2NoYW5uZWwoZGlzcC0+ZGV2LT5vZl9ub2RlLAorCQkJCQkJCSBkbWFfY2hhbm5lbF9u YW1lKTsKKwkJaWYgKElTX0VSUihkbWEtPmNoYW4pKSB7CisJCQlkZXZfZXJyKGRpc3AtPmRldiwg ImZhaWxlZCB0byByZXF1ZXN0IGRtYSBjaGFubmVsXG4iKTsKKwkJCXJldCA9IFBUUl9FUlIoZG1h LT5jaGFuKTsKKwkJCWRtYS0+Y2hhbiA9IE5VTEw7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQor CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogenlucW1wX2Rpc3BfY3JlYXRlX2xheWVycyAtIENy ZWF0ZSBhbGwgbGF5ZXJzCisgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCisgKgorICogUmV0 dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIHRoZSBETUEgY2hhbm5lbCByZXF1ZXN0IGVycm9yIG90aGVy d2lzZQorICovCitzdGF0aWMgaW50IHp5bnFtcF9kaXNwX2NyZWF0ZV9sYXllcnMoc3RydWN0IHp5 bnFtcF9kaXNwICpkaXNwKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgenlucW1wX2Rpc3BfbGF5 ZXJfaW5mbyBsYXllcl9pbmZvW10gPSB7CisJCVtaWU5RTVBfRElTUF9MQVlFUl9WSURdID0gewor CQkJLmZvcm1hdHMgPSBhdmJ1Zl92aWRfZm10cywKKwkJCS5udW1fZm9ybWF0cyA9IEFSUkFZX1NJ WkUoYXZidWZfdmlkX2ZtdHMpLAorCQkJLm51bV9jaGFubmVscyA9IDMsCisJCX0sCisJCVtaWU5R TVBfRElTUF9MQVlFUl9HRlhdID0geworCQkJLmZvcm1hdHMgPSBhdmJ1Zl9nZnhfZm10cywKKwkJ CS5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUoYXZidWZfZ2Z4X2ZtdHMpLAorCQkJLm51bV9jaGFu bmVscyA9IDEsCisJCX0sCisJfTsKKworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlm b3IgKGkgPSAwOyBpIDwgWllOUU1QX0RJU1BfTlVNX0xBWUVSUzsgaSsrKSB7CisJCXN0cnVjdCB6 eW5xbXBfZGlzcF9sYXllciAqbGF5ZXIgPSAmZGlzcC0+bGF5ZXJzW2ldOworCisJCWxheWVyLT5p ZCA9IGk7CisJCWxheWVyLT5kaXNwID0gZGlzcDsKKwkJbGF5ZXItPmluZm8gPSAmbGF5ZXJfaW5m b1tpXTsKKworCQlyZXQgPSB6eW5xbXBfZGlzcF9sYXllcl9yZXF1ZXN0X2RtYShkaXNwLCBsYXll cik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgor CXp5bnFtcF9kaXNwX2Rlc3Ryb3lfbGF5ZXJzKGRpc3ApOworCXJldHVybiByZXQ7Cit9CisKKy8q IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBaeW5xTVAgRGlzcGxheSAmIERSTSBDUlRDCisgKi8K KworLyoqCisgKiB6eW5xbXBfZGlzcF9lbmFibGUgLSBFbmFibGUgdGhlIGRpc3BsYXkgY29udHJv bGxlcgorICogQGRpc3A6IERpc3BsYXkgY29udHJvbGxlcgorICovCitzdGF0aWMgdm9pZCB6eW5x bXBfZGlzcF9lbmFibGUoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwKQoreworCXp5bnFtcF9kaXNw X2F2YnVmX2VuYWJsZSgmZGlzcC0+YXZidWYpOworCS8qIENob29zZSBjbG9jayBzb3VyY2UgYmFz ZWQgb24gdGhlIERUIGNsb2NrIGhhbmRsZS4gKi8KKwl6eW5xbXBfZGlzcF9hdmJ1Zl9zZXRfY2xv Y2tzX3NvdXJjZXMoJmRpc3AtPmF2YnVmLCAhIWRpc3AtPl9wc19wY2xrLAorCQkJCQkgICAgICEh ZGlzcC0+YXVkaW8uX3BzX2NsaywgdHJ1ZSk7CisJenlucW1wX2Rpc3BfYXZidWZfZW5hYmxlX2No YW5uZWxzKCZkaXNwLT5hdmJ1Zik7CisJenlucW1wX2Rpc3BfYXZidWZfZW5hYmxlX2F1ZGlvKCZk aXNwLT5hdmJ1Zik7CisKKwl6eW5xbXBfZGlzcF9hdWRpb19lbmFibGUoJmRpc3AtPmF1ZGlvKTsK K30KKworLyoqCisgKiB6eW5xbXBfZGlzcF9kaXNhYmxlIC0gRGlzYWJsZSB0aGUgZGlzcGxheSBj b250cm9sbGVyCisgKiBAZGlzcDogRGlzcGxheSBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lk IHp5bnFtcF9kaXNwX2Rpc2FibGUoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwKQoreworCXN0cnVj dCBkcm1fY3J0YyAqY3J0YyA9ICZkaXNwLT5jcnRjOworCisJenlucW1wX2Rpc3BfYXVkaW9fZGlz YWJsZSgmZGlzcC0+YXVkaW8pOworCisJenlucW1wX2Rpc3BfYXZidWZfZGlzYWJsZV9hdWRpbygm ZGlzcC0+YXZidWYpOworCXp5bnFtcF9kaXNwX2F2YnVmX2Rpc2FibGVfY2hhbm5lbHMoJmRpc3At PmF2YnVmKTsKKwl6eW5xbXBfZGlzcF9hdmJ1Zl9kaXNhYmxlKCZkaXNwLT5hdmJ1Zik7CisKKwkv KiBNYXJrIHRoZSBmbGlwIGlzIGRvbmUgYXMgY3J0YyBpcyBkaXNhYmxlZCBhbnl3YXkgKi8KKwlp ZiAoY3J0Yy0+c3RhdGUtPmV2ZW50KSB7CisJCWNvbXBsZXRlX2FsbChjcnRjLT5zdGF0ZS0+ZXZl bnQtPmJhc2UuY29tcGxldGlvbik7CisJCWNydGMtPnN0YXRlLT5ldmVudCA9IE5VTEw7CisJfQor fQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6eW5xbXBfZGlzcCAqY3J0Y190b19kaXNwKHN0cnVj dCBkcm1fY3J0YyAqY3J0YykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCB6 eW5xbXBfZGlzcCwgY3J0Yyk7Cit9CisKK3N0YXRpYyBpbnQgenlucW1wX2Rpc3BfY3J0Y19zZXR1 cF9jbG9jayhzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICphZGp1c3RlZF9tb2RlKQoreworCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCA9IGNydGNf dG9fZGlzcChjcnRjKTsKKwl1bnNpZ25lZCBsb25nIG1vZGVfY2xvY2sgPSBhZGp1c3RlZF9tb2Rl LT5jbG9jayAqIDEwMDA7CisJdW5zaWduZWQgbG9uZyByYXRlOworCWxvbmcgZGlmZjsKKwlpbnQg cmV0OworCisJcmV0ID0gY2xrX3NldF9yYXRlKGRpc3AtPnBjbGssIG1vZGVfY2xvY2spOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihkaXNwLT5kZXYsICJmYWlsZWQgdG8gc2V0IGEgcGl4ZWwgY2xv Y2tcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoZGlzcC0+ cGNsayk7CisJZGlmZiA9IHJhdGUgLSBtb2RlX2Nsb2NrOworCWlmIChhYnMoZGlmZikgPiBtb2Rl X2Nsb2NrIC8gMjApCisJCWRldl9pbmZvKGRpc3AtPmRldiwKKwkJCSAicmVxdWVzdGVkIHBpeGVs IHJhdGU6ICVsdSBhY3R1YWwgcmF0ZTogJWx1XG4iLAorCQkJIG1vZGVfY2xvY2ssIHJhdGUpOwor CWVsc2UKKwkJZGV2X2RiZyhkaXNwLT5kZXYsCisJCQkicmVxdWVzdGVkIHBpeGVsIHJhdGU6ICVs dSBhY3R1YWwgcmF0ZTogJWx1XG4iLAorCQkJbW9kZV9jbG9jaywgcmF0ZSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIHZvaWQKK3p5bnFtcF9kaXNwX2NydGNfYXRvbWljX2VuYWJsZShzdHJ1 Y3QgZHJtX2NydGMgKmNydGMsCisJCQkgICAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRf Y3J0Y19zdGF0ZSkKK3sKKwlzdHJ1Y3QgenlucW1wX2Rpc3AgKmRpc3AgPSBjcnRjX3RvX2Rpc3Ao Y3J0Yyk7CisJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUgPSAmY3J0Yy0+ c3RhdGUtPmFkanVzdGVkX21vZGU7CisJaW50IHJldCwgdnJlZnJlc2g7CisKKwl6eW5xbXBfZGlz cF9jcnRjX3NldHVwX2Nsb2NrKGNydGMsIGFkanVzdGVkX21vZGUpOworCisJcG1fcnVudGltZV9n ZXRfc3luYyhkaXNwLT5kZXYpOworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkaXNwLT5wY2xr KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGlzcC0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBh IHBpeGVsIGNsb2NrXG4iKTsKKwkJcG1fcnVudGltZV9wdXRfc3luYyhkaXNwLT5kZXYpOworCQly ZXR1cm47CisJfQorCisJenlucW1wX2Rpc3BfYmxlbmRfc2V0X291dHB1dF9mb3JtYXQoJmRpc3At PmJsZW5kLAorCQkJCQkgICAgWllOUU1QX0RQU1VCX0ZPUk1BVF9SR0IpOworCXp5bnFtcF9kaXNw X2JsZW5kX3NldF9iZ19jb2xvcigmZGlzcC0+YmxlbmQsIDAsIDAsIDApOworCXp5bnFtcF9kaXNw X2JsZW5kX3NldF9nbG9iYWxfYWxwaGEoJmRpc3AtPmJsZW5kLCBmYWxzZSwgMCk7CisKKwl6eW5x bXBfZGlzcF9lbmFibGUoZGlzcCk7CisKKwkvKiBEZWxheSBvZiAzIHZibGFuayBpbnRlcnZhbHMg Zm9yIHRpbWluZyBnZW4gdG8gYmUgc3RhYmxlICovCisJdnJlZnJlc2ggPSAoYWRqdXN0ZWRfbW9k ZS0+Y2xvY2sgKiAxMDAwKSAvCisJCSAgIChhZGp1c3RlZF9tb2RlLT52dG90YWwgKiBhZGp1c3Rl ZF9tb2RlLT5odG90YWwpOworCW1zbGVlcCgzICogMTAwMCAvIHZyZWZyZXNoKTsKK30KKworc3Rh dGljIHZvaWQKK3p5bnFtcF9kaXNwX2NydGNfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9jcnRj ICpjcnRjLAorCQkJCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3RhdGUpCit7CisJ c3RydWN0IHp5bnFtcF9kaXNwICpkaXNwID0gY3J0Y190b19kaXNwKGNydGMpOworCXN0cnVjdCBk cm1fcGxhbmVfc3RhdGUgKm9sZF9wbGFuZV9zdGF0ZTsKKworCS8qCisJICogRGlzYWJsZSB0aGUg cGxhbmUgaWYgYWN0aXZlLiBUaGUgb2xkIHBsYW5lIHN0YXRlIGNhbiBiZSBOVUxMIGluIHRoZQor CSAqIC5zaHV0ZG93bigpIHBhdGggaWYgdGhlIHBsYW5lIGlzIGFscmVhZHkgZGlzYWJsZWQsIHNr aXAKKwkgKiB6eW5xbXBfZGlzcF9wbGFuZV9hdG9taWNfZGlzYWJsZSgpIGluIHRoYXQgY2FzZS4K KwkgKi8KKwlvbGRfcGxhbmVfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9vbGRfcGxhbmVfc3RhdGUo b2xkX2NydGNfc3RhdGUtPnN0YXRlLAorCQkJCQkJCSBjcnRjLT5wcmltYXJ5KTsKKwlpZiAob2xk X3BsYW5lX3N0YXRlKQorCQl6eW5xbXBfZGlzcF9wbGFuZV9hdG9taWNfZGlzYWJsZShjcnRjLT5w cmltYXJ5LCBvbGRfcGxhbmVfc3RhdGUpOworCisJenlucW1wX2Rpc3BfZGlzYWJsZShkaXNwKTsK KworCWRybV9jcnRjX3ZibGFua19vZmYoJmRpc3AtPmNydGMpOworCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRpc3AtPnBjbGspOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGlzcC0+ZGV2KTsKK30K Kworc3RhdGljIGludCB6eW5xbXBfZGlzcF9jcnRjX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCisJCQkJCSBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQoreworCXJldHVy biBkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9wbGFuZXMoc3RhdGUtPnN0YXRlLCBjcnRjKTsKK30K Kworc3RhdGljIHZvaWQKK3p5bnFtcF9kaXNwX2NydGNfYXRvbWljX2JlZ2luKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCSAgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX2NydGNfc3Rh dGUpCit7CisJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOworfQorCitzdGF0aWMgdm9pZAorenlu cW1wX2Rpc3BfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJICAg ICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpvbGRfY3J0Y19zdGF0ZSkKK3sKKwlpZiAoY3J0Yy0+ c3RhdGUtPmV2ZW50KSB7CisJCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50 OworCisJCS8qIENvbnN1bWUgdGhlIGZsaXBfZG9uZSBldmVudCBmcm9tIGF0b21pYyBoZWxwZXIu ICovCisJCWV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2ZW50OworCQljcnRjLT5zdGF0ZS0+ZXZlbnQg PSBOVUxMOworCisJCWV2ZW50LT5waXBlID0gZHJtX2NydGNfaW5kZXgoY3J0Yyk7CisKKwkJV0FS Tl9PTihkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpICE9IDApOworCisJCXNwaW5fbG9ja19pcnEo JmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJCWRybV9jcnRjX2FybV92YmxhbmtfZXZlbnQoY3J0 YywgZXZlbnQpOworCQlzcGluX3VubG9ja19pcnEoJmNydGMtPmRldi0+ZXZlbnRfbG9jayk7CisJ fQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyB6eW5xbXBf ZGlzcF9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKKwkuYXRvbWljX2VuYWJsZQk9IHp5bnFtcF9kaXNw X2NydGNfYXRvbWljX2VuYWJsZSwKKwkuYXRvbWljX2Rpc2FibGUJPSB6eW5xbXBfZGlzcF9jcnRj X2F0b21pY19kaXNhYmxlLAorCS5hdG9taWNfY2hlY2sJPSB6eW5xbXBfZGlzcF9jcnRjX2F0b21p Y19jaGVjaywKKwkuYXRvbWljX2JlZ2luCT0genlucW1wX2Rpc3BfY3J0Y19hdG9taWNfYmVnaW4s CisJLmF0b21pY19mbHVzaAk9IHp5bnFtcF9kaXNwX2NydGNfYXRvbWljX2ZsdXNoLAorfTsKKwor c3RhdGljIGludCB6eW5xbXBfZGlzcF9jcnRjX2VuYWJsZV92Ymxhbmsoc3RydWN0IGRybV9jcnRj ICpjcnRjKQoreworCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCA9IGNydGNfdG9fZGlzcChjcnRj KTsKKworCXp5bnFtcF9kcF9lbmFibGVfdmJsYW5rKGRpc3AtPmRwc3ViLT5kcCk7CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIHZvaWQgenlucW1wX2Rpc3BfY3J0Y19kaXNhYmxlX3ZibGFuayhz dHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwID0gY3J0 Y190b19kaXNwKGNydGMpOworCisJenlucW1wX2RwX2Rpc2FibGVfdmJsYW5rKGRpc3AtPmRwc3Vi LT5kcCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgenlucW1wX2Rp c3BfY3J0Y19mdW5jcyA9IHsKKwkuZGVzdHJveQkJPSBkcm1fY3J0Y19jbGVhbnVwLAorCS5zZXRf Y29uZmlnCQk9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcsCisJLnBhZ2VfZmxpcAkJPSBk cm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCisJLnJlc2V0CQkJPSBkcm1fYXRvbWljX2hlbHBl cl9jcnRjX3Jlc2V0LAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0gZHJtX2F0b21pY19oZWxw ZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95X3N0YXRlCT0gZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlLAorCS5lbmFibGVfdmJsYW5rCQk9IHp5bnFt cF9kaXNwX2NydGNfZW5hYmxlX3ZibGFuaywKKwkuZGlzYWJsZV92YmxhbmsJCT0genlucW1wX2Rp c3BfY3J0Y19kaXNhYmxlX3ZibGFuaywKK307CisKK3N0YXRpYyBpbnQgenlucW1wX2Rpc3BfY3Jl YXRlX2NydGMoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwKQoreworCXN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lID0gJmRpc3AtPmxheWVyc1taWU5RTVBfRElTUF9MQVlFUl9HRlhdLnBsYW5lOworCWlu dCByZXQ7CisKKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRpc3AtPmRybSwgJmRp c3AtPmNydGMsIHBsYW5lLAorCQkJCQlOVUxMLCAmenlucW1wX2Rpc3BfY3J0Y19mdW5jcywgTlVM TCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkcm1fY3J0Y19oZWxwZXJfYWRk KCZkaXNwLT5jcnRjLCAmenlucW1wX2Rpc3BfY3J0Y19oZWxwZXJfZnVuY3MpOworCisJLyogU3Rh cnQgd2l0aCB2ZXJ0aWNhbCBibGFua2luZyBpbnRlcnJ1cHQgcmVwb3J0aW5nIGRpc2FibGVkLiAq LworCWRybV9jcnRjX3ZibGFua19vZmYoJmRpc3AtPmNydGMpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyB2b2lkIHp5bnFtcF9kaXNwX21hcF9jcnRjX3RvX3BsYW5lKHN0cnVjdCB6eW5xbXBf ZGlzcCAqZGlzcCkKK3sKKwl1MzIgcG9zc2libGVfY3J0Y3MgPSBkcm1fY3J0Y19tYXNrKCZkaXNw LT5jcnRjKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBaWU5RTVBfRElT UF9OVU1fTEFZRVJTOyBpKyspCisJCWRpc3AtPmxheWVyc1tpXS5wbGFuZS5wb3NzaWJsZV9jcnRj cyA9IHBvc3NpYmxlX2NydGNzOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW5p dGlhbGl6YXRpb24gJiBDbGVhbnVwCisgKi8KKworaW50IHp5bnFtcF9kaXNwX2luaXQoc3RydWN0 IHp5bnFtcF9kcHN1YiAqZHBzdWIsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCit7CisJc3RydWN0 IHp5bnFtcF9kaXNwICpkaXNwID0gZHBzdWItPmRpc3A7CisJaW50IHJldDsKKworCWRpc3AtPmRy bSA9IGRybTsKKworCXJldCA9IHp5bnFtcF9kaXNwX2NyZWF0ZV9wbGFuZXMoZGlzcCk7CisJaWYg KHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHp5bnFtcF9kaXNwX2NyZWF0ZV9jcnRjKGRp c3ApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJenlucW1wX2Rpc3BfbWFwX2Ny dGNfdG9fcGxhbmUoZGlzcCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHp5bnFtcF9kaXNwX3By b2JlKHN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQoreworCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcDsKKwlzdHJ1Y3QgenlucW1wX2Rpc3Bf bGF5ZXIgKmxheWVyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlkaXNw ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGlzcCksIEdGUF9LRVJORUwpOwor CWlmICghZGlzcCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZGlzcC0+ZGV2ID0gJnBkZXYtPmRldjsK KworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9N RU0sICJibGVuZCIpOworCWRpc3AtPmJsZW5kLmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2Uo JnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGRpc3AtPmJsZW5kLmJhc2UpKQorCQlyZXR1 cm4gUFRSX0VSUihkaXNwLT5ibGVuZC5iYXNlKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJhdl9idWYiKTsKKwlkaXNwLT5hdmJ1 Zi5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElT X0VSUihkaXNwLT5hdmJ1Zi5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGlzcC0+YXZidWYuYmFz ZSk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAiYXVkIik7CisJZGlzcC0+YXVkaW8uYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJj ZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoZGlzcC0+YXVkaW8uYmFzZSkpCisJCXJl dHVybiBQVFJfRVJSKGRpc3AtPmF1ZGlvLmJhc2UpOworCisJZHBzdWItPmRpc3AgPSBkaXNwOwor CWRpc3AtPmRwc3ViID0gZHBzdWI7CisKKwkvKiBUcnkgdGhlIGxpdmUgUEwgdmlkZW8gY2xvY2sg Ki8KKwlkaXNwLT5fcGxfcGNsayA9IGRldm1fY2xrX2dldChkaXNwLT5kZXYsICJkcF9saXZlX3Zp ZGVvX2luX2NsayIpOworCWlmICghSVNfRVJSKGRpc3AtPl9wbF9wY2xrKSkKKwkJZGlzcC0+cGNs ayA9IGRpc3AtPl9wbF9wY2xrOworCWVsc2UgaWYgKFBUUl9FUlIoZGlzcC0+X3BsX3BjbGspID09 IC1FUFJPQkVfREVGRVIpCisJCXJldHVybiBQVFJfRVJSKGRpc3AtPl9wbF9wY2xrKTsKKworCS8q IElmIHRoZSBsaXZlIFBMIHZpZGVvIGNsb2NrIGlzIG5vdCB2YWxpZCwgZmFsbCBiYWNrIHRvIFBT IGNsb2NrICovCisJaWYgKCFkaXNwLT5wY2xrKSB7CisJCWRpc3AtPl9wc19wY2xrID0gZGV2bV9j bGtfZ2V0KGRpc3AtPmRldiwgImRwX3Z0Y19waXhlbF9jbGtfaW4iKTsKKwkJaWYgKElTX0VSUihk aXNwLT5fcHNfcGNsaykpIHsKKwkJCWRldl9lcnIoZGlzcC0+ZGV2LCAiZmFpbGVkIHRvIGluaXQg YW55IHZpZGVvIGNsb2NrXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGRpc3AtPl9wc19wY2xrKTsK KwkJfQorCQlkaXNwLT5wY2xrID0gZGlzcC0+X3BzX3BjbGs7CisJfQorCisJenlucW1wX2Rpc3Bf YXVkaW9faW5pdChkaXNwLT5kZXYsICZkaXNwLT5hdWRpbyk7CisKKwlyZXQgPSB6eW5xbXBfZGlz cF9jcmVhdGVfbGF5ZXJzKGRpc3ApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlsYXll ciA9ICZkaXNwLT5sYXllcnNbWllOUU1QX0RJU1BfTEFZRVJfVklEXTsKKwlkcHN1Yi0+ZG1hX2Fs aWduID0gMSA8PCBsYXllci0+ZG1hc1swXS5jaGFuLT5kZXZpY2UtPmNvcHlfYWxpZ247CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCB6eW5xbXBfZGlzcF9yZW1vdmUoc3RydWN0IHp5bnFtcF9kcHN1 YiAqZHBzdWIpCit7CisJc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwID0gZHBzdWItPmRpc3A7CisK Kwl6eW5xbXBfZGlzcF9kZXN0cm95X2xheWVycyhkaXNwKTsKKwlkcHN1Yi0+ZGlzcCA9IE5VTEw7 Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcC5oIGIvZHJp dmVycy9ncHUvZHJtL3hsbngvenlucW1wX2Rpc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAuLjkzYWQzNmFkN2VmMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMv Z3B1L2RybS94bG54L3p5bnFtcF9kaXNwLmgKQEAgLTAsMCArMSw0MyBAQAorLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBaeW5xTVAgRGlzcGxheSBEcml2ZXIK KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE5IFhpbGlueCwgSW5jLgorICoKKyAqIEF1 dGhvcnM6CisgKiAtIEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgorICogLSBM YXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+CisgKi8K KworI2lmbmRlZiBfWllOUU1QX0RJU1BfSF8KKyNkZWZpbmUgX1pZTlFNUF9ESVNQX0hfCisKKyNp bmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogMzg0MHgyMTYwIGlzIGFkdmVydGlzZWQg YXMgdGhlIG1heGltdW0gcmVzb2x1dGlvbiwgYnV0IGFsbW9zdCBhbnkKKyAqIHJlc29sdXRpb25z IHVuZGVyIGEgMzAwTWh6IHBpeGVsIHJhdGUgd291bGQgd29yay4gUGljayA0MDk2eDQwOTYuCisg Ki8KKyNkZWZpbmUgWllOUU1QX0RJU1BfTUFYX1dJRFRICQkJCTQwOTYKKyNkZWZpbmUgWllOUU1Q X0RJU1BfTUFYX0hFSUdIVAkJCQk0MDk2CisKKy8qIFRoZSBEUERNQSBpcyBsaW1pdGVkIHRvIDQ0 IGJpdCBhZGRyZXNzaW5nLiAqLworI2RlZmluZSBaWU5RTVBfRElTUF9NQVhfRE1BX0JJVAkJCQk0 NAorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlOworc3RydWN0IHp5bnFtcF9kaXNwOworc3RydWN0IHp5bnFtcF9kcHN1YjsKKwordm9p ZCB6eW5xbXBfZGlzcF9oYW5kbGVfdmJsYW5rKHN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcCk7Citi b29sIHp5bnFtcF9kaXNwX2F1ZGlvX2VuYWJsZWQoc3RydWN0IHp5bnFtcF9kaXNwICpkaXNwKTsK K3Vuc2lnbmVkIGludCB6eW5xbXBfZGlzcF9nZXRfYXVkaW9fY2xrX3JhdGUoc3RydWN0IHp5bnFt cF9kaXNwICpkaXNwKTsKK3VpbnQzMl90IHp5bnFtcF9kaXNwX2dldF9jcnRjX21hc2soc3RydWN0 IHp5bnFtcF9kaXNwICpkaXNwKTsKKworaW50IHp5bnFtcF9kaXNwX2luaXQoc3RydWN0IHp5bnFt cF9kcHN1YiAqZHBzdWIsIHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOworCitpbnQgenlucW1wX2Rp c3BfcHJvYmUoc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIsIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpOwordm9pZCB6eW5xbXBfZGlzcF9yZW1vdmUoc3RydWN0IHp5bnFtcF9kcHN1YiAq ZHBzdWIpOworCisjZW5kaWYgLyogX1pZTlFNUF9ESVNQX0hfICovCmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZGlzcF9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0veGxu eC96eW5xbXBfZGlzcF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi5jOTJlMmMyYmQyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0veGxu eC96eW5xbXBfZGlzcF9yZWdzLmgKQEAgLTAsMCArMSwyMDEgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogWnlucU1QIERpc3BsYXkgQ29udHJvbGxlciBE cml2ZXIgLSBSZWdpc3RlciBEZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNyAt IDIwMTkgWGlsaW54LCBJbmMuCisgKgorICogQXV0aG9yczoKKyAqIC0gSHl1biBXb28gS3dvbiA8 aHl1bi5rd29uQHhpbGlueC5jb20+CisgKiAtIExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGlu Y2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KKyAqLworCisjaWZuZGVmIF9aWU5RTVBfRElTUF9SRUdT X0hfCisjZGVmaW5lIF9aWU5RTVBfRElTUF9SRUdTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9iaXRz Lmg+CisKKy8qIEJsZW5kZXIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxF TkRfQkdfQ0xSXzAJCQkweDAKKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9CR19DTFJfMQkJ CTB4NAorI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX0JHX0NMUl8yCQkJMHg4CisjZGVmaW5l IFpZTlFNUF9ESVNQX1ZfQkxFTkRfQkdfTUFYCQkJMHhmZmYKKyNkZWZpbmUgWllOUU1QX0RJU1Bf Vl9CTEVORF9TRVRfR0xPQkFMX0FMUEhBCQkweGMKKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVO RF9TRVRfR0xPQkFMX0FMUEhBX1ZBTFVFKG4pCSgobikgPDwgMSkKKyNkZWZpbmUgWllOUU1QX0RJ U1BfVl9CTEVORF9TRVRfR0xPQkFMX0FMUEhBX0VOCQlCSVQoMCkKKyNkZWZpbmUgWllOUU1QX0RJ U1BfVl9CTEVORF9PVVRQVVRfVklEX0ZNVAkJMHgxNAorI2RlZmluZSBaWU5RTVBfRElTUF9WX0JM RU5EX09VVFBVVF9WSURfRk1UX1JHQgkJMHgwCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRf T1VUUFVUX1ZJRF9GTVRfWUNCQ1I0NDQJMHgxCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRf T1VUUFVUX1ZJRF9GTVRfWUNCQ1I0MjIJMHgyCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRf T1VUUFVUX1ZJRF9GTVRfWU9OTFkJMHgzCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VU UFVUX1ZJRF9GTVRfWFZZQ0MJMHg0CisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfT1VUUFVU X1ZJRF9GTVRfRU5fRE9XTlNBTVBMRQlCSVQoNCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVO RF9MQVlFUl9DT05UUk9MKG4pCQkoMHgxOCArICgobikgKiA0KSkKKyNkZWZpbmUgWllOUU1QX0RJ U1BfVl9CTEVORF9MQVlFUl9DT05UUk9MX0VOX1VTCQlCSVQoMCkKKyNkZWZpbmUgWllOUU1QX0RJ U1BfVl9CTEVORF9MQVlFUl9DT05UUk9MX1JHQgkJQklUKDEpCisjZGVmaW5lIFpZTlFNUF9ESVNQ X1ZfQkxFTkRfTEFZRVJfQ09OVFJPTF9CWVBBU1MJQklUKDgpCisjZGVmaW5lIFpZTlFNUF9ESVNQ X1ZfQkxFTkRfTlVNX0NPRUZGCQkJOQorI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX05VTV9P RkZTRVQJCQkzCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfUkdCMllDQkNSX0NPRUZGKG4p CQkoMHgyMCArICgobikgKiA0KSkKKyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9JTjFDU0Nf Q09FRkYobikJCSgweDQ0ICsgKChuKSAqIDQpKQorI2RlZmluZSBaWU5RTVBfRElTUF9WX0JMRU5E X0lOMUNTQ19PRkZTRVQobikJCSgweDY4ICsgKChuKSAqIDQpKQorI2RlZmluZSBaWU5RTVBfRElT UF9WX0JMRU5EX09VVENTQ19PRkZTRVQobikJCSgweDc0ICsgKChuKSAqIDQpKQorI2RlZmluZSBa WU5RTVBfRElTUF9WX0JMRU5EX0lOMkNTQ19DT0VGRihuKQkJKDB4ODAgKyAoKG4pICogNCkpCisj ZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfSU4yQ1NDX09GRlNFVChuKQkJKDB4YTQgKyAoKG4p ICogNCkpCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfQ0hST01BX0tFWV9FTkFCTEUJCTB4 MWQwCisjZGVmaW5lIFpZTlFNUF9ESVNQX1ZfQkxFTkRfQ0hST01BX0tFWV9DT01QMQkJMHgxZDQK KyNkZWZpbmUgWllOUU1QX0RJU1BfVl9CTEVORF9DSFJPTUFfS0VZX0NPTVAyCQkweDFkOAorI2Rl ZmluZSBaWU5RTVBfRElTUF9WX0JMRU5EX0NIUk9NQV9LRVlfQ09NUDMJCTB4MWRjCisKKy8qIEFW IGJ1ZmZlciBtYW5hZ2VyIHJlZ2lzdGVycyAqLworI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf Rk1UCQkJCTB4MAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9TSElGVAkJ MAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9NQVNLCQkoMHgxZiA8PCAw KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9VWVZZCQkoMCA8PCAwKQor I2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9WWVVZCQkoMSA8PCAwKQorI2Rl ZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVllVCQkoMiA8PCAwKQorI2RlZmlu ZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVVlWCQkoMyA8PCAwKQorI2RlZmluZSBa WU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2CQkoNCA8PCAwKQorI2RlZmluZSBaWU5R TVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjI0CQkoNSA8PCAwKQorI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0kJCSg2IDw8IDApCisjZGVmaW5lIFpZTlFNUF9E SVNQX0FWX0JVRl9GTVRfTkxfVklEX01PTk8JCSg3IDw8IDApCisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FWX0JVRl9GTVRfTkxfVklEX1lWMTZDSTIJCSg4IDw8IDApCisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FWX0JVRl9GTVRfTkxfVklEX1lVVjQ0NAkJKDkgPDwgMCkKKyNkZWZpbmUgWllOUU1QX0RJU1Bf QVZfQlVGX0ZNVF9OTF9WSURfUkdCODg4CQkoMTAgPDwgMCkKKyNkZWZpbmUgWllOUU1QX0RJU1Bf QVZfQlVGX0ZNVF9OTF9WSURfUkdCQTg4ODAJCSgxMSA8PCAwKQorI2RlZmluZSBaWU5RTVBfRElT UF9BVl9CVUZfRk1UX05MX1ZJRF9SR0I4ODhfMTAJCSgxMiA8PCAwKQorI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVVY0NDRfMTAJCSgxMyA8PCAwKQorI2RlZmluZSBaWU5R TVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0kyXzEwCSgxNCA8PCAwKQorI2RlZmluZSBa WU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0lfMTAJCSgxNSA8PCAwKQorI2RlZmlu ZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2XzEwCQkoMTYgPDwgMCkKKyNkZWZp bmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfWVYyNF8xMAkJKDE3IDw8IDApCisjZGVm aW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lPTkxZXzEwCQkoMTggPDwgMCkKKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfWVYxNl80MjAJCSgxOSA8PCAwKQor I2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0lfNDIwCSgyMCA8PCAw KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX1ZJRF9ZVjE2Q0kyXzQyMAkoMjEg PDwgMCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9WSURfWVYxNl80MjBfMTAJ KDIyIDw8IDApCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lWMTZDSV80 MjBfMTAJKDIzIDw8IDApCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfVklEX1lW MTZDSTJfNDIwXzEwCSgyNCA8PCAwKQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05M X0dGWF9TSElGVAkJOAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF9NQVNL CQkoMHhmIDw8IDgpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYX1JHQkE4 ODg4CQkoMCA8PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF9BQkdS ODg4OAkJKDEgPDwgOCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfUkdC ODg4CQkoMiA8PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF9CR1I4 ODgJCSgzIDw8IDgpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9GTVRfTkxfR0ZYX1JHQkE1 NTUxCQkoNCA8PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF9SR0JB NDQ0NAkJKDUgPDwgOCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0ZNVF9OTF9HRlhfUkdC NTY1CQkoNiA8PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF84QlBQ CQkoNyA8PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF80QlBQCQko OCA8PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF8yQlBQCQkoOSA8 PCA4KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfRk1UX05MX0dGWF8xQlBQCQkoMTAgPDwg OCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX05PTl9MSVZFX0xBVEVOQ1kJCTB4OAorI2Rl ZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfQ0hCVUYobikJCQkoMHgxMCArICgobikgKiA0KSkKKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NIQlVGX0VOCQkJQklUKDApCisjZGVmaW5lIFpZTlFN UF9ESVNQX0FWX0JVRl9DSEJVRl9GTFVTSAkJCUJJVCgxKQorI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfQ0hCVUZfQlVSU1RfTEVOX1NISUZUCTIKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X0NIQlVGX0JVUlNUX0xFTl9NQVNLCQkoMHhmIDw8IDIpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FW X0JVRl9DSEJVRl9CVVJTVF9MRU5fTUFYCQkweGYKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X0NIQlVGX0JVUlNUX0xFTl9BVURfTUFYCTB4MworI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf U1RBVFVTCQkJMHgyOAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX0NUUkwJCQkweDJj CisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfQ1RSTF9FTgkJCUJJVCgwKQorI2RlZmlu ZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX0NUUkxfRVZFTlRfU0hJRlQJCTEKKyNkZWZpbmUgWllO UU1QX0RJU1BfQVZfQlVGX1NUQ19DVFJMX0VWRU5UX0VYX1ZTWU5DCTAKKyNkZWZpbmUgWllOUU1Q X0RJU1BfQVZfQlVGX1NUQ19DVFJMX0VWRU5UX0VYX1ZJRAkxCisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FWX0JVRl9TVENfQ1RSTF9FVkVOVF9FWF9BVUQJMgorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9C VUZfU1RDX0NUUkxfRVZFTlRfSU5UX1ZTWU5DCTMKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X1NUQ19JTklUX1ZBTFVFMAkJMHgzMAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX0lO SVRfVkFMVUUxCQkweDM0CisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfQURKCQkJMHgz OAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfU1RDX1ZJRF9WU1lOQ19UUzAJCTB4M2MKKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX1NUQ19WSURfVlNZTkNfVFMxCQkweDQwCisjZGVmaW5l IFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfRVhUX1ZTWU5DX1RTMAkJMHg0NAorI2RlZmluZSBaWU5R TVBfRElTUF9BVl9CVUZfU1RDX0VYVF9WU1lOQ19UUzEJCTB4NDgKKyNkZWZpbmUgWllOUU1QX0RJ U1BfQVZfQlVGX1NUQ19DVVNUT01fRVZFTlRfVFMwCQkweDRjCisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FWX0JVRl9TVENfQ1VTVE9NX0VWRU5UX1RTMQkJMHg1MAorI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfU1RDX0NVU1RPTV9FVkVOVDJfVFMwCTB4NTQKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX1NUQ19DVVNUT01fRVZFTlQyX1RTMQkweDU4CisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JV Rl9TVENfU05BUFNIT1QwCQkweDYwCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9TVENfU05B UFNIT1QxCQkweDY0CisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVQJCQkweDcwCisj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMV9TSElGVAkJMAorI2RlZmluZSBa WU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTUFTSwkJKDB4MyA8PCAwKQorI2RlZmluZSBa WU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX1ZJRDFfTElWRQkJKDAgPDwgMCkKKyNkZWZpbmUgWllO UU1QX0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX01FTQkJKDEgPDwgMCkKKyNkZWZpbmUgWllOUU1Q X0RJU1BfQVZfQlVGX09VVFBVVF9WSUQxX1BBVFRFUk4JCSgyIDw8IDApCisjZGVmaW5lIFpZTlFN UF9ESVNQX0FWX0JVRl9PVVRQVVRfVklEMV9OT05FCQkoMyA8PCAwKQorI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfT1VUUFVUX1ZJRDJfU0hJRlQJCTIKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX09VVFBVVF9WSUQyX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX09VVFBVVF9WSUQyX0RJU0FCTEUJCSgwIDw8IDIpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FW X0JVRl9PVVRQVVRfVklEMl9NRU0JCSgxIDw8IDIpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JV Rl9PVVRQVVRfVklEMl9MSVZFCQkoMiA8PCAyKQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf T1VUUFVUX1ZJRDJfTk9ORQkJKDMgPDwgMikKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09V VFBVVF9BVUQxX1NISUZUCQk0CisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfQVVE MV9NQVNLCQkoMHgzIDw8IDQpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfQVVE MV9QTAkJKDAgPDwgNCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9BVUQxX01F TQkJKDEgPDwgNCkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX09VVFBVVF9BVUQxX1BBVFRF Uk4JCSgyIDw8IDQpCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9PVVRQVVRfQVVEMV9ESVNB QkxFCQkoMyA8PCA0KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfT1VUUFVUX0FVRDJfRU4J CUJJVCg2KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfSENPVU5UX1ZDT1VOVF9JTlQwCQkw eDc0CisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9IQ09VTlRfVkNPVU5UX0lOVDEJCTB4NzgK KyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX1BBVFRFUk5fR0VOX1NFTEVDVAkJMHgxMDAKKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0NMS19TUkMJCQkweDEyMAorI2RlZmluZSBaWU5RTVBf RElTUF9BVl9CVUZfQ0xLX1NSQ19WSURfRlJPTV9QUwkJQklUKDApCisjZGVmaW5lIFpZTlFNUF9E SVNQX0FWX0JVRl9DTEtfU1JDX0FVRF9GUk9NX1BTCQlCSVQoMSkKKyNkZWZpbmUgWllOUU1QX0RJ U1BfQVZfQlVGX0NMS19TUkNfVklEX0lOVEVSTkFMX1RJTUlORwlCSVQoMikKKyNkZWZpbmUgWllO UU1QX0RJU1BfQVZfQlVGX1NSU1RfUkVHCQkJMHgxMjQKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZf QlVGX1NSU1RfUkVHX1ZJRF9SU1QJCUJJVCgxKQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZf QVVESU9fQ0hfQ09ORklHCQkweDEyYworI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfR0ZYX0NP TVBfU0YobikJCSgweDIwMCArICgobikgKiA0KSkKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVG X1ZJRF9DT01QX1NGKG4pCQkoMHgyMGMgKyAoKG4pICogNCkpCisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FWX0JVRl9MSVZEX1ZJRF9DT01QX1NGKG4pCQkoMHgyMTggKyAoKG4pICogNCkpCisjZGVmaW5l IFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX1ZJRF9DT05GSUcJCTB4MjI0CisjZGVmaW5lIFpZTlFN UF9ESVNQX0FWX0JVRl9MSVZEX0dGWF9DT01QX1NGKG4pCQkoMHgyMjggKyAoKG4pICogNCkpCisj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX0dGWF9DT05GSUcJCTB4MjM0CisjZGVmaW5l IFpZTlFNUF9ESVNQX0FWX0JVRl80QklUX1NGCQkJMHgxMTExMQorI2RlZmluZSBaWU5RTVBfRElT UF9BVl9CVUZfNUJJVF9TRgkJCTB4MTA4NDIKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGXzZC SVRfU0YJCQkweDEwNDEwCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl84QklUX1NGCQkJMHgx MDEwMQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfMTBCSVRfU0YJCQkweDEwMDQwCisjZGVm aW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9OVUxMX1NGCQkJMAorI2RlZmluZSBaWU5RTVBfRElTUF9B Vl9CVUZfTlVNX1NGCQkJMworI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdf QlBDXzYJCTB4MAorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdfQlBDXzgJ CTB4MQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdfQlBDXzEwCQkweDIK KyNkZWZpbmUgWllOUU1QX0RJU1BfQVZfQlVGX0xJVkVfQ09ORklHX0JQQ18xMgkJMHgzCisjZGVm aW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX0NPTkZJR19CUENfTUFTSwkJR0VOTUFTSygyLCAw KQorI2RlZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdfRk1UX1JHQgkJMHgwCisj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX0NPTkZJR19GTVRfWVVWNDQ0CTB4MQorI2Rl ZmluZSBaWU5RTVBfRElTUF9BVl9CVUZfTElWRV9DT05GSUdfRk1UX1lVVjQyMgkweDIKKyNkZWZp bmUgWllOUU1QX0RJU1BfQVZfQlVGX0xJVkVfQ09ORklHX0ZNVF9ZT05MWQkweDMKKyNkZWZpbmUg WllOUU1QX0RJU1BfQVZfQlVGX0xJVkVfQ09ORklHX0ZNVF9NQVNLCQlHRU5NQVNLKDUsIDQpCisj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9MSVZFX0NPTkZJR19DQl9GSVJTVAkJQklUKDgpCisj ZGVmaW5lIFpZTlFNUF9ESVNQX0FWX0JVRl9QQUxFVFRFX01FTU9SWQkJMHg0MDAKKworLyogQXVk aW8gcmVnaXN0ZXJzICovCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9NSVhFUl9WT0xVTUUJCQkw eDAKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX01JWEVSX1ZPTFVNRV9OT19TQ0FMRQkJMHgyMDAw MjAwMAorI2RlZmluZSBaWU5RTVBfRElTUF9BVURfTUlYRVJfTUVUQV9EQVRBCQkJMHg0CisjZGVm aW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9TVEFUVVMwCQkJMHg4CisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FVRF9DSF9TVEFUVVMxCQkJMHhjCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9TVEFUVVMy CQkJMHgxMAorI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfU1RBVFVTMwkJCTB4MTQKKyNkZWZp bmUgWllOUU1QX0RJU1BfQVVEX0NIX1NUQVRVUzQJCQkweDE4CisjZGVmaW5lIFpZTlFNUF9ESVNQ X0FVRF9DSF9TVEFUVVM1CQkJMHgxYworI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfQV9EQVRB MAkJCTB4MjAKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX0FfREFUQTEJCQkweDI0CisjZGVm aW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9BX0RBVEEyCQkJMHgyOAorI2RlZmluZSBaWU5RTVBfRElT UF9BVURfQ0hfQV9EQVRBMwkJCTB4MmMKKyNkZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX0FfREFU QTQJCQkweDMwCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9BX0RBVEE1CQkJMHgzNAorI2Rl ZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfQl9EQVRBMAkJCTB4MzgKKyNkZWZpbmUgWllOUU1QX0RJ U1BfQVVEX0NIX0JfREFUQTEJCQkweDNjCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9DSF9CX0RB VEEyCQkJMHg0MAorI2RlZmluZSBaWU5RTVBfRElTUF9BVURfQ0hfQl9EQVRBMwkJCTB4NDQKKyNk ZWZpbmUgWllOUU1QX0RJU1BfQVVEX0NIX0JfREFUQTQJCQkweDQ4CisjZGVmaW5lIFpZTlFNUF9E SVNQX0FVRF9DSF9CX0RBVEE1CQkJMHg0YworI2RlZmluZSBaWU5RTVBfRElTUF9BVURfU09GVF9S RVNFVAkJCTB4YzAwCisjZGVmaW5lIFpZTlFNUF9ESVNQX0FVRF9TT0ZUX1JFU0VUX0FVRF9TUlNU CQlCSVQoMCkKKworI2VuZGlmIC8qIF9aWU5RTVBfRElTUF9SRUdTX0hfICovCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS94bG54 L3p5bnFtcF9kcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDA5 ZDRhMzVjYmY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1w X2RwLmMKQEAgLTAsMCArMSwxNzQyIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMAorLyoKKyAqIFp5bnFNUCBEaXNwbGF5UG9ydCBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQg KEMpIDIwMTcgLSAyMDE5IFhpbGlueCwgSW5jLgorICoKKyAqIEF1dGhvcnM6CisgKiAtIEh5dW4g V29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgorICogLSBMYXVyZW50IFBpbmNoYXJ0IDxs YXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+CisgKi8KKworI2luY2x1ZGUgPGRybS9k cm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+CisjaW5j bHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2RwX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorI2lu Y2x1ZGUgPGRybS9kcm1fZW5jb2Rlci5oPgorI2luY2x1ZGUgPGRybS9kcm1fbW9kZXMuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX29mLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4K KworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5j bHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5o PgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgor CisjaW5jbHVkZSAienlucW1wX2Rpc3AuaCIKKyNpbmNsdWRlICJ6eW5xbXBfZHAuaCIKKyNpbmNs dWRlICJ6eW5xbXBfZHBzdWIuaCIKKworc3RhdGljIHVpbnQgenlucW1wX2RwX2F1eF90aW1lb3V0 X21zID0gNTA7Cittb2R1bGVfcGFyYW1fbmFtZWQoYXV4X3RpbWVvdXRfbXMsIHp5bnFtcF9kcF9h dXhfdGltZW91dF9tcywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1eF90aW1lb3V0 X21zLCAiRFAgYXV4IHRpbWVvdXQgdmFsdWUgaW4gbXNlYyAoZGVmYXVsdDogNTApIik7CisKKy8q CisgKiBTb21lIHNpbmsgcmVxdWlyZXMgYSBkZWxheSBhZnRlciBwb3dlciBvbiByZXF1ZXN0Cisg Ki8KK3N0YXRpYyB1aW50IHp5bnFtcF9kcF9wb3dlcl9vbl9kZWxheV9tcyA9IDQ7Cittb2R1bGVf cGFyYW1fbmFtZWQocG93ZXJfb25fZGVsYXlfbXMsIHp5bnFtcF9kcF9wb3dlcl9vbl9kZWxheV9t cywgdWludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGF1eF90aW1lb3V0X21zLCAiRFAgcG93 ZXIgb24gZGVsYXkgaW4gbXNlYyAoZGVmYXVsdDogNCkiKTsKKworLyogTGluayBjb25maWd1cmF0 aW9uIHJlZ2lzdGVycyAqLworI2RlZmluZSBaWU5RTVBfRFBfTElOS19CV19TRVQJCQkJMHgwCisj ZGVmaW5lIFpZTlFNUF9EUF9MQU5FX0NPVU5UX1NFVAkJCTB4NAorI2RlZmluZSBaWU5RTVBfRFBf RU5IQU5DRURfRlJBTUVfRU4JCQkweDgKKyNkZWZpbmUgWllOUU1QX0RQX1RSQUlOSU5HX1BBVFRF Uk5fU0VUCQkJMHhjCisjZGVmaW5lIFpZTlFNUF9EUF9TQ1JBTUJMSU5HX0RJU0FCTEUJCQkweDE0 CisjZGVmaW5lIFpZTlFNUF9EUF9ET1dOU1BSRUFEX0NUTAkJCTB4MTgKKyNkZWZpbmUgWllOUU1Q X0RQX1NPRlRXQVJFX1JFU0VUCQkJMHgxYworI2RlZmluZSBaWU5RTVBfRFBfU09GVFdBUkVfUkVT RVRfU1RSRUFNMQkJQklUKDApCisjZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9TVFJF QU0yCQlCSVQoMSkKKyNkZWZpbmUgWllOUU1QX0RQX1NPRlRXQVJFX1JFU0VUX1NUUkVBTTMJCUJJ VCgyKQorI2RlZmluZSBaWU5RTVBfRFBfU09GVFdBUkVfUkVTRVRfU1RSRUFNNAkJQklUKDMpCisj ZGVmaW5lIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9BVVgJCQlCSVQoNykKKyNkZWZpbmUgWllO UU1QX0RQX1NPRlRXQVJFX1JFU0VUX0FMTAkJCShaWU5RTVBfRFBfU09GVFdBUkVfUkVTRVRfU1RS RUFNMSB8IFwKKwkJCQkJCQkgWllOUU1QX0RQX1NPRlRXQVJFX1JFU0VUX1NUUkVBTTIgfCBcCisJ CQkJCQkJIFpZTlFNUF9EUF9TT0ZUV0FSRV9SRVNFVF9TVFJFQU0zIHwgXAorCQkJCQkJCSBaWU5R TVBfRFBfU09GVFdBUkVfUkVTRVRfU1RSRUFNNCB8IFwKKwkJCQkJCQkgWllOUU1QX0RQX1NPRlRX QVJFX1JFU0VUX0FVWCkKKworLyogQ29yZSBlbmFibGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFpZ TlFNUF9EUF9UUkFOU01JVFRFUl9FTkFCTEUJCQkweDgwCisjZGVmaW5lIFpZTlFNUF9EUF9NQUlO X1NUUkVBTV9FTkFCTEUJCQkweDg0CisjZGVmaW5lIFpZTlFNUF9EUF9GT1JDRV9TQ1JBTUJMRVJf UkVTRVQJCQkweGMwCisjZGVmaW5lIFpZTlFNUF9EUF9WRVJTSU9OCQkJCTB4ZjgKKyNkZWZpbmUg WllOUU1QX0RQX1ZFUlNJT05fTUFKT1JfTUFTSwkJCUdFTk1BU0soMzEsIDI0KQorI2RlZmluZSBa WU5RTVBfRFBfVkVSU0lPTl9NQUpPUl9TSElGVAkJCTI0CisjZGVmaW5lIFpZTlFNUF9EUF9WRVJT SU9OX01JTk9SX01BU0sJCQlHRU5NQVNLKDIzLCAxNikKKyNkZWZpbmUgWllOUU1QX0RQX1ZFUlNJ T05fTUlOT1JfU0hJRlQJCQkxNgorI2RlZmluZSBaWU5RTVBfRFBfVkVSU0lPTl9SRVZJU0lPTl9N QVNLCQkJR0VOTUFTSygxNSwgMTIpCisjZGVmaW5lIFpZTlFNUF9EUF9WRVJTSU9OX1JFVklTSU9O X1NISUZUCQkxMgorI2RlZmluZSBaWU5RTVBfRFBfVkVSU0lPTl9QQVRDSF9NQVNLCQkJR0VOTUFT SygxMSwgOCkKKyNkZWZpbmUgWllOUU1QX0RQX1ZFUlNJT05fUEFUQ0hfU0hJRlQJCQk4CisjZGVm aW5lIFpZTlFNUF9EUF9WRVJTSU9OX0lOVEVSTkFMX01BU0sJCQlHRU5NQVNLKDcsIDApCisjZGVm aW5lIFpZTlFNUF9EUF9WRVJTSU9OX0lOVEVSTkFMX1NISUZUCQkwCisKKy8qIENvcmUgSUQgcmVn aXN0ZXJzICovCisjZGVmaW5lIFpZTlFNUF9EUF9DT1JFX0lECQkJCTB4ZmMKKyNkZWZpbmUgWllO UU1QX0RQX0NPUkVfSURfTUFKT1JfTUFTSwkJCUdFTk1BU0soMzEsIDI0KQorI2RlZmluZSBaWU5R TVBfRFBfQ09SRV9JRF9NQUpPUl9TSElGVAkJCTI0CisjZGVmaW5lIFpZTlFNUF9EUF9DT1JFX0lE X01JTk9SX01BU0sJCQlHRU5NQVNLKDIzLCAxNikKKyNkZWZpbmUgWllOUU1QX0RQX0NPUkVfSURf TUlOT1JfU0hJRlQJCQkxNgorI2RlZmluZSBaWU5RTVBfRFBfQ09SRV9JRF9SRVZJU0lPTl9NQVNL CQkJR0VOTUFTSygxNSwgOCkKKyNkZWZpbmUgWllOUU1QX0RQX0NPUkVfSURfUkVWSVNJT05fU0hJ RlQJCTgKKyNkZWZpbmUgWllOUU1QX0RQX0NPUkVfSURfRElSRUNUSU9OCQkJR0VOTUFTSygxKQor CisvKiBBVVggY2hhbm5lbCBpbnRlcmZhY2UgcmVnaXN0ZXJzICovCisjZGVmaW5lIFpZTlFNUF9E UF9BVVhfQ09NTUFORAkJCQkweDEwMAorI2RlZmluZSBaWU5RTVBfRFBfQVVYX0NPTU1BTkRfQ01E X1NISUZUCQkJOAorI2RlZmluZSBaWU5RTVBfRFBfQVVYX0NPTU1BTkRfQUREUkVTU19PTkxZCQlC SVQoMTIpCisjZGVmaW5lIFpZTlFNUF9EUF9BVVhfQ09NTUFORF9CWVRFU19TSElGVAkJMAorI2Rl ZmluZSBaWU5RTVBfRFBfQVVYX1dSSVRFX0ZJRk8JCQkweDEwNAorI2RlZmluZSBaWU5RTVBfRFBf QVVYX0FERFJFU1MJCQkJMHgxMDgKKyNkZWZpbmUgWllOUU1QX0RQX0FVWF9DTEtfRElWSURFUgkJ CTB4MTBjCisjZGVmaW5lIFpZTlFNUF9EUF9BVVhfQ0xLX0RJVklERVJfQVVYX0ZJTFRFUl9TSElG VAk4CisjZGVmaW5lIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRFCQkweDEzMAorI2Rl ZmluZSBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05BTF9TVEFURV9IUEQJCUJJVCgwKQorI2RlZmlu ZSBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05BTF9TVEFURV9SRVFVRVNUCUJJVCgxKQorI2RlZmlu ZSBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05BTF9TVEFURV9SRVBMWQkJQklUKDIpCisjZGVmaW5l IFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRFX1JFUExZX1RJTUVPVVQJQklUKDMpCisj ZGVmaW5lIFpZTlFNUF9EUF9BVVhfUkVQTFlfREFUQQkJCTB4MTM0CisjZGVmaW5lIFpZTlFNUF9E UF9BVVhfUkVQTFlfQ09ERQkJCTB4MTM4CisjZGVmaW5lIFpZTlFNUF9EUF9BVVhfUkVQTFlfQ09E RV9BVVhfQUNLCQkoMCkKKyNkZWZpbmUgWllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFX0FVWF9OQUNL CQlCSVQoMCkKKyNkZWZpbmUgWllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFX0FVWF9ERUZFUgkJQklU KDEpCisjZGVmaW5lIFpZTlFNUF9EUF9BVVhfUkVQTFlfQ09ERV9JMkNfQUNLCQkoMCkKKyNkZWZp bmUgWllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFX0kyQ19OQUNLCQlCSVQoMikKKyNkZWZpbmUgWllO UU1QX0RQX0FVWF9SRVBMWV9DT0RFX0kyQ19ERUZFUgkJQklUKDMpCisjZGVmaW5lIFpZTlFNUF9E UF9BVVhfUkVQTFlfQ09VTlQJCQkweDEzYworI2RlZmluZSBaWU5RTVBfRFBfUkVQTFlfREFUQV9D T1VOVAkJCTB4MTQ4CisjZGVmaW5lIFpZTlFNUF9EUF9SRVBMWV9EQVRBX0NPVU5UX01BU0sJCQkw eGZmCisjZGVmaW5lIFpZTlFNUF9EUF9JTlRfU1RBVFVTCQkJCTB4M2EwCisjZGVmaW5lIFpZTlFN UF9EUF9JTlRfTUFTSwkJCQkweDNhNAorI2RlZmluZSBaWU5RTVBfRFBfSU5UX0VOCQkJCTB4M2E4 CisjZGVmaW5lIFpZTlFNUF9EUF9JTlRfRFMJCQkJMHgzYWMKKyNkZWZpbmUgWllOUU1QX0RQX0lO VF9IUERfSVJRCQkJCUJJVCgwKQorI2RlZmluZSBaWU5RTVBfRFBfSU5UX0hQRF9FVkVOVAkJCQlC SVQoMSkKKyNkZWZpbmUgWllOUU1QX0RQX0lOVF9SRVBMWV9SRUNFSVZFRAkJCUJJVCgyKQorI2Rl ZmluZSBaWU5RTVBfRFBfSU5UX1JFUExZX1RJTUVPVVQJCQlCSVQoMykKKyNkZWZpbmUgWllOUU1Q X0RQX0lOVF9IUERfUFVMU0VfREVUCQkJQklUKDQpCisjZGVmaW5lIFpZTlFNUF9EUF9JTlRfRVhU X1BLVF9UWEQJCQlCSVQoNSkKKyNkZWZpbmUgWllOUU1QX0RQX0lOVF9MSVZfQUJVRl9VTkRSRkxX CQkJQklUKDEyKQorI2RlZmluZSBaWU5RTVBfRFBfSU5UX1ZCTEFOS19TVEFSVAkJCUJJVCgxMykK KyNkZWZpbmUgWllOUU1QX0RQX0lOVF9QSVhFTDFfTUFUQ0gJCQlCSVQoMTQpCisjZGVmaW5lIFpZ TlFNUF9EUF9JTlRfUElYRUwwX01BVENICQkJQklUKDE1KQorI2RlZmluZSBaWU5RTVBfRFBfSU5U X0NIQlVGX1VOREVSRkxXX01BU0sJCTB4M2YwMDAwCisjZGVmaW5lIFpZTlFNUF9EUF9JTlRfQ0hC VUZfT1ZFUkZMV19NQVNLCQkweGZjMDAwMDAKKyNkZWZpbmUgWllOUU1QX0RQX0lOVF9DVVNUX1RT XzIJCQkJQklUKDI4KQorI2RlZmluZSBaWU5RTVBfRFBfSU5UX0NVU1RfVFMJCQkJQklUKDI5KQor I2RlZmluZSBaWU5RTVBfRFBfSU5UX0VYVF9WU1lOQ19UUwkJCUJJVCgzMCkKKyNkZWZpbmUgWllO UU1QX0RQX0lOVF9WU1lOQ19UUwkJCQlCSVQoMzEpCisjZGVmaW5lIFpZTlFNUF9EUF9JTlRfQUxM CQkJCShaWU5RTVBfRFBfSU5UX0hQRF9JUlEgfCBcCisJCQkJCQkJIFpZTlFNUF9EUF9JTlRfSFBE X0VWRU5UIHwgXAorCQkJCQkJCSBaWU5RTVBfRFBfSU5UX0NIQlVGX1VOREVSRkxXX01BU0sgfCBc CisJCQkJCQkJIFpZTlFNUF9EUF9JTlRfQ0hCVUZfT1ZFUkZMV19NQVNLKQorCisvKiBNYWluIHN0 cmVhbSBhdHRyaWJ1dGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9IVE9UQUwJCQkweDE4MAorI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fVlRPVEFMCQkJ MHgxODQKKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX1BPTEFSSVRZCQkJMHgxODgKKyNk ZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX1BPTEFSSVRZX0hTWU5DX1NISUZUCTAKKyNkZWZp bmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX1BPTEFSSVRZX1ZTWU5DX1NISUZUCTEKKyNkZWZpbmUg WllOUU1QX0RQX01BSU5fU1RSRUFNX0hTV0lEVEgJCQkweDE4YworI2RlZmluZSBaWU5RTVBfRFBf TUFJTl9TVFJFQU1fVlNXSURUSAkJCTB4MTkwCisjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9IUkVTCQkJMHgxOTQKKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX1ZSRVMJCQkweDE5 OAorI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fSFNUQVJUCQkJMHgxOWMKKyNkZWZpbmUg WllOUU1QX0RQX01BSU5fU1RSRUFNX1ZTVEFSVAkJCTB4MWEwCisjZGVmaW5lIFpZTlFNUF9EUF9N QUlOX1NUUkVBTV9NSVNDMAkJCTB4MWE0CisjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9N SVNDMF9TWU5DX0xPQ0sJCUJJVCgwKQorI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlT QzBfQ09NUF9GT1JNQVRfUkdCCSgwIDw8IDEpCisjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9NSVNDMF9DT01QX0ZPUk1BVF9ZQ1JDQl80MjIJKDUgPDwgMSkKKyNkZWZpbmUgWllOUU1QX0RQ X01BSU5fU1RSRUFNX01JU0MwX0NPTVBfRk9STUFUX1lDUkNCXzQ0NAkoNiA8PCAxKQorI2RlZmlu ZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBfQ09NUF9GT1JNQVRfTUFTSwkoNyA8PCAxKQor I2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBfRFlOQU1JQ19SQU5HRQlCSVQoMykK KyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX1lDQkNSX0NPTFIJCUJJVCg0KQor I2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBfQlBDXzYJCSgwIDw8IDUpCisjZGVm aW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9CUENfOAkJKDEgPDwgNSkKKyNkZWZpbmUg WllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ18xMAkJKDIgPDwgNSkKKyNkZWZpbmUgWllO UU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ18xMgkJKDMgPDwgNSkKKyNkZWZpbmUgWllOUU1Q X0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ18xNgkJKDQgPDwgNSkKKyNkZWZpbmUgWllOUU1QX0RQ X01BSU5fU1RSRUFNX01JU0MwX0JQQ19NQVNLCQkoNyA8PCA1KQorI2RlZmluZSBaWU5RTVBfRFBf TUFJTl9TVFJFQU1fTUlTQzEJCQkweDFhOAorI2RlZmluZSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1f TUlTQzFfWV9PTkxZX0VOCQlCSVQoNykKKyNkZWZpbmUgWllOUU1QX0RQX01BSU5fU1RSRUFNX01f VklECQkJMHgxYWMKKyNkZWZpbmUgWllOUU1QX0RQX01TQV9UUkFOU0ZFUl9VTklUX1NJWkUJCTB4 MWIwCisjZGVmaW5lIFpZTlFNUF9EUF9NU0FfVFJBTlNGRVJfVU5JVF9TSVpFX1RVX1NJWkVfREVG CTY0CisjZGVmaW5lIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9OX1ZJRAkJCTB4MWI0CisjZGVmaW5l IFpZTlFNUF9EUF9VU0VSX1BJWF9XSURUSAkJCTB4MWI4CisjZGVmaW5lIFpZTlFNUF9EUF9VU0VS X0RBVEFfQ09VTlRfUEVSX0xBTkUJCTB4MWJjCisjZGVmaW5lIFpZTlFNUF9EUF9NSU5fQllURVNf UEVSX1RVCQkJMHgxYzQKKyNkZWZpbmUgWllOUU1QX0RQX0ZSQUNfQllURVNfUEVSX1RVCQkJMHgx YzgKKyNkZWZpbmUgWllOUU1QX0RQX0lOSVRfV0FJVAkJCQkweDFjYworCisvKiBQSFkgY29uZmln dXJhdGlvbiBhbmQgc3RhdHVzIHJlZ2lzdGVycyAqLworI2RlZmluZSBaWU5RTVBfRFBfUEhZX1JF U0VUCQkJCTB4MjAwCisjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUkVTRVRfUEhZX1JFU0VUCQkJQklU KDApCisjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUkVTRVRfR1RUWF9SRVNFVAkJCUJJVCgxKQorI2Rl ZmluZSBaWU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9QTUFfUkVTRVQJCUJJVCg4KQorI2RlZmluZSBa WU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9QQ1NfUkVTRVQJCUJJVCg5KQorI2RlZmluZSBaWU5RTVBf RFBfUEhZX1JFU0VUX0FMTF9SRVNFVAkJCShaWU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9SRVNFVCB8 IFwKKwkJCQkJCQkgWllOUU1QX0RQX1BIWV9SRVNFVF9HVFRYX1JFU0VUIHwgXAorCQkJCQkJCSBa WU5RTVBfRFBfUEhZX1JFU0VUX1BIWV9QTUFfUkVTRVQgfCBcCisJCQkJCQkJIFpZTlFNUF9EUF9Q SFlfUkVTRVRfUEhZX1BDU19SRVNFVCkKKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9QUkVFTVBIQVNJ U19MQU5FXzAJCTB4MjEwCisjZGVmaW5lIFpZTlFNUF9EUF9QSFlfUFJFRU1QSEFTSVNfTEFORV8x CQkweDIxNAorI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BSRUVNUEhBU0lTX0xBTkVfMgkJMHgyMTgK KyNkZWZpbmUgWllOUU1QX0RQX1BIWV9QUkVFTVBIQVNJU19MQU5FXzMJCTB4MjFjCisjZGVmaW5l IFpZTlFNUF9EUF9QSFlfVk9MVEFHRV9ESUZGX0xBTkVfMAkJMHgyMjAKKyNkZWZpbmUgWllOUU1Q X0RQX1BIWV9WT0xUQUdFX0RJRkZfTEFORV8xCQkweDIyNAorI2RlZmluZSBaWU5RTVBfRFBfUEhZ X1ZPTFRBR0VfRElGRl9MQU5FXzIJCTB4MjI4CisjZGVmaW5lIFpZTlFNUF9EUF9QSFlfVk9MVEFH RV9ESUZGX0xBTkVfMwkJMHgyMmMKKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9DTE9DS19TRUxFQ1QJ CQkweDIzNAorI2RlZmluZSBaWU5RTVBfRFBfUEhZX0NMT0NLX1NFTEVDVF8xXzYyRwkJMHgxCisj ZGVmaW5lIFpZTlFNUF9EUF9QSFlfQ0xPQ0tfU0VMRUNUXzJfNzBHCQkweDMKKyNkZWZpbmUgWllO UU1QX0RQX1BIWV9DTE9DS19TRUxFQ1RfNV80MEcJCTB4NQorI2RlZmluZSBaWU5RTVBfRFBfVFhf UEhZX1BPV0VSX0RPV04JCQkweDIzOAorI2RlZmluZSBaWU5RTVBfRFBfVFhfUEhZX1BPV0VSX0RP V05fTEFORV8wCQlCSVQoMCkKKyNkZWZpbmUgWllOUU1QX0RQX1RYX1BIWV9QT1dFUl9ET1dOX0xB TkVfMQkJQklUKDEpCisjZGVmaW5lIFpZTlFNUF9EUF9UWF9QSFlfUE9XRVJfRE9XTl9MQU5FXzIJ CUJJVCgyKQorI2RlZmluZSBaWU5RTVBfRFBfVFhfUEhZX1BPV0VSX0RPV05fTEFORV8zCQlCSVQo MykKKyNkZWZpbmUgWllOUU1QX0RQX1RYX1BIWV9QT1dFUl9ET1dOX0FMTAkJCTB4ZgorI2RlZmlu ZSBaWU5RTVBfRFBfUEhZX1BSRUNVUlNPUl9MQU5FXzAJCQkweDIzYworI2RlZmluZSBaWU5RTVBf RFBfUEhZX1BSRUNVUlNPUl9MQU5FXzEJCQkweDI0MAorI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BS RUNVUlNPUl9MQU5FXzIJCQkweDI0NAorI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BSRUNVUlNPUl9M QU5FXzMJCQkweDI0OAorI2RlZmluZSBaWU5RTVBfRFBfUEhZX1BPU1RDVVJTT1JfTEFORV8wCQkJ MHgyNGMKKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9QT1NUQ1VSU09SX0xBTkVfMQkJCTB4MjUwCisj ZGVmaW5lIFpZTlFNUF9EUF9QSFlfUE9TVENVUlNPUl9MQU5FXzIJCQkweDI1NAorI2RlZmluZSBa WU5RTVBfRFBfUEhZX1BPU1RDVVJTT1JfTEFORV8zCQkJMHgyNTgKKyNkZWZpbmUgWllOUU1QX0RQ X1NVQl9UWF9QSFlfUFJFQ1VSU09SX0xBTkVfMAkJMHgyNGMKKyNkZWZpbmUgWllOUU1QX0RQX1NV Ql9UWF9QSFlfUFJFQ1VSU09SX0xBTkVfMQkJMHgyNTAKKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9T VEFUVVMJCQkJMHgyODAKKyNkZWZpbmUgWllOUU1QX0RQX1BIWV9TVEFUVVNfUExMX0xPQ0tFRF9T SElGVAkJNAorI2RlZmluZSBaWU5RTVBfRFBfUEhZX1NUQVRVU19GUEdBX1BMTF9MT0NLRUQJCUJJ VCg2KQorCisvKiBBdWRpbyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgWllOUU1QX0RQX1RYX0FVRElP X0NPTlRST0wJCQkweDMwMAorI2RlZmluZSBaWU5RTVBfRFBfVFhfQVVESU9fQ0hBTk5FTFMJCQkw eDMwNAorI2RlZmluZSBaWU5RTVBfRFBfVFhfQVVESU9fSU5GT19EQVRBCQkJMHgzMDgKKyNkZWZp bmUgWllOUU1QX0RQX1RYX01fQVVECQkJCTB4MzI4CisjZGVmaW5lIFpZTlFNUF9EUF9UWF9OX0FV RAkJCQkweDMyYworI2RlZmluZSBaWU5RTVBfRFBfVFhfQVVESU9fRVhUX0RBVEEJCQkweDMzMAor CisjZGVmaW5lIFpZTlFNUF9EUF9NQVhfTEFORVMJCQkJMgorI2RlZmluZSBaWU5RTVBfTUFYX0ZS RVEJCQkJCTMwMDAwMDAKKworI2RlZmluZSBEUF9SRURVQ0VEX0JJVF9SQVRFCQkJCTE2MjAwMAor I2RlZmluZSBEUF9ISUdIX0JJVF9SQVRFCQkJCTI3MDAwMAorI2RlZmluZSBEUF9ISUdIX0JJVF9S QVRFMgkJCQk1NDAwMDAKKyNkZWZpbmUgRFBfTUFYX1RSQUlOSU5HX1RSSUVTCQkJCTUKKyNkZWZp bmUgRFBfVjFfMgkJCQkJCTB4MTIKKworLyoqCisgKiBzdHJ1Y3QgenlucW1wX2RwX2xpbmtfY29u ZmlnIC0gQ29tbW9uIGxpbmsgY29uZmlnIGJldHdlZW4gc291cmNlIGFuZCBzaW5rCisgKiBAbWF4 X3JhdGU6IG1heGltdW0gbGluayByYXRlCisgKiBAbWF4X2xhbmVzOiBtYXhpbXVtIG51bWJlciBv ZiBsYW5lcworICovCitzdHJ1Y3QgenlucW1wX2RwX2xpbmtfY29uZmlnIHsKKwlpbnQgbWF4X3Jh dGU7CisJdTggbWF4X2xhbmVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgenlucW1wX2RwX21vZGUg LSBDb25maWd1cmVkIG1vZGUgb2YgRGlzcGxheVBvcnQKKyAqIEBid19jb2RlOiBjb2RlIGZvciBi YW5kd2lkdGgobGluayByYXRlKQorICogQGxhbmVfY250OiBudW1iZXIgb2YgbGFuZXMKKyAqIEBw Y2xvY2s6IHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSBvZiBjdXJyZW50IG1vZGUKKyAqIEBmbXQ6IGZv cm1hdCBpZGVudGlmaWVyIHN0cmluZworICovCitzdHJ1Y3QgenlucW1wX2RwX21vZGUgeworCXU4 IGJ3X2NvZGU7CisJdTggbGFuZV9jbnQ7CisJaW50IHBjbG9jazsKKwljb25zdCBjaGFyICpmbXQ7 Cit9OworCisvKioKKyAqIHN0cnVjdCB6eW5xbXBfZHBfY29uZmlnIC0gQ29uZmlndXJhdGlvbiBv ZiBEaXNwbGF5UG9ydCBmcm9tIERUUworICogQG1pc2MwOiBtaXNjMCBjb25maWd1cmF0aW9uIChw ZXIgRFAgdjEuMiBzcGVjKQorICogQG1pc2MxOiBtaXNjMSBjb25maWd1cmF0aW9uIChwZXIgRFAg djEuMiBzcGVjKQorICogQGJwcDogYml0cyBwZXIgcGl4ZWwKKyAqLworc3RydWN0IHp5bnFtcF9k cF9jb25maWcgeworCXU4IG1pc2MwOworCXU4IG1pc2MxOworCXU4IGJwcDsKK307CisKKy8qKgor ICogc3RydWN0IHp5bnFtcF9kcCAtIFhpbGlueCBEaXNwbGF5UG9ydCBjb3JlCisgKiBAZW5jb2Rl cjogdGhlIGRybSBlbmNvZGVyIHN0cnVjdHVyZQorICogQGNvbm5lY3RvcjogdGhlIGRybSBjb25u ZWN0b3Igc3RydWN0dXJlCisgKiBAZGV2OiBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZHBzdWI6IERp c3BsYXkgc3Vic3lzdGVtCisgKiBAZHJtOiBEUk0gY29yZQorICogQGlvbWVtOiBkZXZpY2UgSS9P IG1lbW9yeSBmb3IgcmVnaXN0ZXIgYWNjZXNzCisgKiBAcmVzZXQ6IHJlc2V0IGNvbnRyb2xsZXIK KyAqIEBpcnE6IGlycQorICogQGNvbmZpZzogSVAgY29yZSBjb25maWd1cmF0aW9uIGZyb20gRFRT CisgKiBAYXV4OiBhdXggY2hhbm5lbAorICogQHBoeTogUEhZIGhhbmRsZXMgZm9yIERQIGxhbmVz CisgKiBAbnVtX2xhbmVzOiBudW1iZXIgb2YgZW5hYmxlZCBwaHkgbGFuZXMKKyAqIEBocGRfd29y azogaG90IHBsdWcgZGV0ZWN0aW9uIHdvcmtlcgorICogQHN0YXR1czogY29ubmVjdGlvbiBzdGF0 dXMKKyAqIEBlbmFibGVkOiBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSBkZXZpY2UgaXMgZW5hYmxl ZAorICogQGRwY2Q6IERQIGNvbmZpZ3VyYXRpb24gZGF0YSBmcm9tIGN1cnJlbnRseSBjb25uZWN0 ZWQgc2luayBkZXZpY2UKKyAqIEBsaW5rX2NvbmZpZzogY29tbW9uIGxpbmsgY29uZmlndXJhdGlv biBiZXR3ZWVuIElQIGNvcmUgYW5kIHNpbmsgZGV2aWNlCisgKiBAbW9kZTogY3VycmVudCBtb2Rl IGJldHdlZW4gSVAgY29yZSBhbmQgc2luayBkZXZpY2UKKyAqIEB0cmFpbl9zZXQ6IHNldCBvZiB0 cmFpbmluZyBkYXRhCisgKi8KK3N0cnVjdCB6eW5xbXBfZHAgeworCXN0cnVjdCBkcm1fZW5jb2Rl ciBlbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yIGNvbm5lY3RvcjsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7CisJc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWI7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybTsKKwl2b2lkIF9faW9tZW0gKmlvbWVtOworCXN0cnVjdCByZXNldF9jb250cm9sICpy ZXNldDsKKwlpbnQgaXJxOworCisJc3RydWN0IHp5bnFtcF9kcF9jb25maWcgY29uZmlnOworCXN0 cnVjdCBkcm1fZHBfYXV4IGF1eDsKKwlzdHJ1Y3QgcGh5ICpwaHlbWllOUU1QX0RQX01BWF9MQU5F U107CisJdTggbnVtX2xhbmVzOworCXN0cnVjdCBkZWxheWVkX3dvcmsgaHBkX3dvcms7CisJZW51 bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7CisJYm9vbCBlbmFibGVkOworCisJdTggZHBj ZFtEUF9SRUNFSVZFUl9DQVBfU0laRV07CisJc3RydWN0IHp5bnFtcF9kcF9saW5rX2NvbmZpZyBs aW5rX2NvbmZpZzsKKwlzdHJ1Y3QgenlucW1wX2RwX21vZGUgbW9kZTsKKwl1OCB0cmFpbl9zZXRb WllOUU1QX0RQX01BWF9MQU5FU107Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCB6eW5xbXBf ZHAgKmVuY29kZXJfdG9fZHAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXJldHVy biBjb250YWluZXJfb2YoZW5jb2Rlciwgc3RydWN0IHp5bnFtcF9kcCwgZW5jb2Rlcik7Cit9CisK K3N0YXRpYyBpbmxpbmUgc3RydWN0IHp5bnFtcF9kcCAqY29ubmVjdG9yX3RvX2RwKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjb25uZWN0 b3IsIHN0cnVjdCB6eW5xbXBfZHAsIGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIHp5bnFt cF9kcF93cml0ZShzdHJ1Y3QgenlucW1wX2RwICpkcCwgaW50IG9mZnNldCwgdTMyIHZhbCkKK3sK Kwl3cml0ZWwodmFsLCBkcC0+aW9tZW0gKyBvZmZzZXQpOworfQorCitzdGF0aWMgdTMyIHp5bnFt cF9kcF9yZWFkKHN0cnVjdCB6eW5xbXBfZHAgKmRwLCBpbnQgb2Zmc2V0KQoreworCXJldHVybiBy ZWFkbChkcC0+aW9tZW0gKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCB6eW5xbXBfZHBfY2xy KHN0cnVjdCB6eW5xbXBfZHAgKmRwLCBpbnQgb2Zmc2V0LCB1MzIgY2xyKQoreworCXp5bnFtcF9k cF93cml0ZShkcCwgb2Zmc2V0LCB6eW5xbXBfZHBfcmVhZChkcCwgb2Zmc2V0KSAmIH5jbHIpOwor fQorCitzdGF0aWMgdm9pZCB6eW5xbXBfZHBfc2V0KHN0cnVjdCB6eW5xbXBfZHAgKmRwLCBpbnQg b2Zmc2V0LCB1MzIgc2V0KQoreworCXp5bnFtcF9kcF93cml0ZShkcCwgb2Zmc2V0LCB6eW5xbXBf ZHBfcmVhZChkcCwgb2Zmc2V0KSB8IHNldCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgKiBQSFkgSGFuZGxpbmcKKyAqLworCisjZGVmaW5lIFJTVF9USU1FT1VUX01TCQkJMTAwMAor CitzdGF0aWMgaW50IHp5bnFtcF9kcF9yZXNldChzdHJ1Y3QgenlucW1wX2RwICpkcCwgYm9vbCBh c3NlcnQpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJaWYgKGFzc2VydCkKKwkJcmVz ZXRfY29udHJvbF9hc3NlcnQoZHAtPnJlc2V0KTsKKwllbHNlCisJCXJlc2V0X2NvbnRyb2xfZGVh c3NlcnQoZHAtPnJlc2V0KTsKKworCS8qIFdhaXQgZm9yIHRoZSAoZGUpYXNzZXJ0IHRvIGNvbXBs ZXRlLiAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSU1RfVElNRU9V VF9NUyk7CisJd2hpbGUgKCF0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCWJv b2wgc3RhdHVzID0gISFyZXNldF9jb250cm9sX3N0YXR1cyhkcC0+cmVzZXQpOworCisJCWlmIChh c3NlcnQgPT0gc3RhdHVzKQorCQkJcmV0dXJuIDA7CisKKwkJY3B1X3JlbGF4KCk7CisJfQorCisJ ZGV2X2VycihkcC0+ZGV2LCAicmVzZXQgJXMgdGltZW91dFxuIiwgYXNzZXJ0ID8gImFzc2VydCIg OiAiZGVhc3NlcnQiKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworLyoqCisgKiB6eW5xbXBf ZHBfcGh5X2luaXQgLSBJbml0aWFsaXplIHRoZSBwaHkKKyAqIEBkcDogRGlzcGxheVBvcnQgSVAg Y29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBJbml0aWFsaXplIHRoZSBwaHkuCisgKgorICogUmV0dXJu OiAwIGlmIHRoZSBwaHkgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBjb3JyZWN0bHksIG9yIHRo ZSBlcnJvciBjb2RlCisgKiByZXR1cm5lZCBmcm9tIHRoZSBjYWxsZWUgZnVuY3Rpb25zLgorICov CitzdGF0aWMgaW50IHp5bnFtcF9kcF9waHlfaW5pdChzdHJ1Y3QgenlucW1wX2RwICpkcCkKK3sK KwlpbnQgcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRwLT5udW1fbGFuZXM7IGkr KykgeworCQlyZXQgPSBwaHlfaW5pdChkcC0+cGh5W2ldKTsKKwkJaWYgKHJldCkgeworCQkJZGV2 X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgcGh5IGxhbmUgJWRcbiIsIGkpOworCQkJcmV0 dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHp5bnFtcF9kcF9yZXNldChkcCwgZmFsc2UpOwor CWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJenlucW1wX2RwX2NscihkcCwgWllOUU1Q X0RQX1BIWV9SRVNFVCwgWllOUU1QX0RQX1BIWV9SRVNFVF9BTExfUkVTRVQpOworCisJLyoKKwkg KiBQb3dlciBvbiBsYW5lcyBpbiByZXZlcnNlIG9yZGVyIGFzIG9ubHkgbGFuZSAwIHdhaXRzIGZv ciB0aGUgUExMIHRvCisJICogbG9jay4KKwkgKi8KKwlmb3IgKGkgPSBkcC0+bnVtX2xhbmVzIC0g MTsgaSA+PSAwOyBpLS0pIHsKKwkJcmV0ID0gcGh5X3Bvd2VyX29uKGRwLT5waHlbaV0pOworCQlp ZiAocmV0KSB7CisJCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcG93ZXIgb24gcGh5IGxh bmUgJWRcbiIsIGkpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQor CisvKioKKyAqIHp5bnFtcF9kcF9waHlfZXhpdCAtIEV4aXQgdGhlIHBoeQorICogQGRwOiBEaXNw bGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQorICoKKyAqIEV4aXQgdGhlIHBoeS4KKyAqLworc3Rh dGljIHZvaWQgenlucW1wX2RwX3BoeV9leGl0KHN0cnVjdCB6eW5xbXBfZHAgKmRwKQoreworCXVu c2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHAtPm51bV9sYW5l czsgaSsrKSB7CisJCXJldCA9IHBoeV9wb3dlcl9vZmYoZHAtPnBoeVtpXSk7CisJCWlmIChyZXQp CisJCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcG93ZXIgb2ZmIHBoeSglZCkgJWRcbiIs IGksCisJCQkJcmV0KTsKKwl9CisKKwl6eW5xbXBfZHBfcmVzZXQoZHAsIHRydWUpOworCisJZm9y IChpID0gMDsgaSA8IGRwLT5udW1fbGFuZXM7IGkrKykgeworCQlyZXQgPSBwaHlfZXhpdChkcC0+ cGh5W2ldKTsKKwkJaWYgKHJldCkKKwkJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBleGl0 IHBoeSglZCkgJWRcbiIsIGksIHJldCk7CisJfQorfQorCisvKioKKyAqIHp5bnFtcF9kcF9waHlf cHJvYmUgLSBQcm9iZSB0aGUgUEhZcworICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVj dHVyZQorICoKKyAqIFByb2JlIFBIWXMgZm9yIGFsbCBsYW5lcy4gTGVzcyBQSFlzIG1heSBiZSBh dmFpbGFibGUgdGhhbiB0aGUgbnVtYmVyIG9mCisgKiBsYW5lcywgd2hpY2ggaXMgbm90IGNvbnNp ZGVyZWQgYW4gZXJyb3IgYXMgbG9uZyBhcyBhdCBsZWFzdCBvbmUgUEhZIGlzCisgKiBmb3VuZC4g VGhlIGNhbGxlciBjYW4gY2hlY2sgZHAtPm51bV9sYW5lcyB0byBjaGVjayBob3cgbWFueSBQSFlz IHdlcmUgZm91bmQuCisgKgorICogUmV0dXJuOgorICogKiAwCQkJCS0gU3VjY2VzcworICogKiAt RU5YSU8JCQktIE5vIFBIWSBmb3VuZAorICogKiAtRVBST0JFX0RFRkVSCQktIFByb2JlIGRlZmVy cmFsIHJlcXVlc3RlZAorICogKiBPdGhlciBuZWdhdGl2ZSB2YWx1ZQktIFBIWSByZXRyaWV2YWwg ZmFpbHVyZQorICovCitzdGF0aWMgaW50IHp5bnFtcF9kcF9waHlfcHJvYmUoc3RydWN0IHp5bnFt cF9kcCAqZHApCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgWllOUU1Q X0RQX01BWF9MQU5FUzsgaSsrKSB7CisJCWNoYXIgcGh5X25hbWVbMTZdOworCQlzdHJ1Y3QgcGh5 ICpwaHk7CisKKwkJc25wcmludGYocGh5X25hbWUsIHNpemVvZihwaHlfbmFtZSksICJkcC1waHkl ZCIsIGkpOworCQlwaHkgPSBkZXZtX3BoeV9nZXQoZHAtPmRldiwgcGh5X25hbWUpOworCisJCWlm IChJU19FUlIocGh5KSkgeworCQkJc3dpdGNoIChQVFJfRVJSKHBoeSkpIHsKKwkJCWNhc2UgLUVO T0RFVjoKKwkJCQlpZiAoZHAtPm51bV9sYW5lcykKKwkJCQkJcmV0dXJuIDA7CisKKwkJCQlkZXZf ZXJyKGRwLT5kZXYsICJubyBQSFkgZm91bmRcbiIpOworCQkJCXJldHVybiAtRU5YSU87CisKKwkJ CWNhc2UgLUVQUk9CRV9ERUZFUjoKKwkJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCQkJZGVm YXVsdDoKKwkJCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gZ2V0IFBIWSBsYW5lICV1XG4i LAorCQkJCQlpKTsKKwkJCQlyZXR1cm4gUFRSX0VSUihwaHkpOworCQkJfQorCQl9CisKKwkJZHAt PnBoeVtpXSA9IHBoeTsKKwkJZHAtPm51bV9sYW5lcysrOworCX0KKworCXJldHVybiAwOworfQor CisvKioKKyAqIHp5bnFtcF9kcF9waHlfcmVhZHkgLSBDaGVjayBpZiBQSFkgaXMgcmVhZHkKKyAq IEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBDaGVjayBpZiBQSFkg aXMgcmVhZHkuIElmIFBIWSBpcyBub3QgcmVhZHksIHdhaXQgMW1zIHRvIGNoZWNrIGZvciAxMDAg dGltZXMuCisgKiBUaGlzIGFtb3VudCBvZiBkZWxheSB3YXMgc3VnZ2VzdGVkIGJ5IElQIGRlc2ln bmVyLgorICoKKyAqIFJldHVybjogMCBpZiBQSFkgaXMgcmVhZHksIG9yIC1FTk9ERVYgaWYgUEhZ IGlzIG5vdCByZWFkeS4KKyAqLworc3RhdGljIGludCB6eW5xbXBfZHBfcGh5X3JlYWR5KHN0cnVj dCB6eW5xbXBfZHAgKmRwKQoreworCXUzMiBpLCByZWcsIHJlYWR5OworCisJcmVhZHkgPSAoMSA8 PCBkcC0+bnVtX2xhbmVzKSAtIDE7CisKKwkvKiBXYWl0IGZvciAxMDAgKiAxbXMuIFRoaXMgc2hv dWxkIGJlIGVub3VnaCB0aW1lIGZvciBQSFkgdG8gYmUgcmVhZHkgKi8KKwlmb3IgKGkgPSAwOyA7 IGkrKykgeworCQlyZWcgPSB6eW5xbXBfZHBfcmVhZChkcCwgWllOUU1QX0RQX1BIWV9TVEFUVVMp OworCQlpZiAoKHJlZyAmIHJlYWR5KSA9PSByZWFkeSkKKwkJCXJldHVybiAwOworCisJCWlmIChp ID09IDEwMCkgeworCQkJZGV2X2VycihkcC0+ZGV2LCAiUEhZIGlzbid0IHJlYWR5XG4iKTsKKwkJ CXJldHVybiAtRU5PREVWOworCQl9CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAsIDExMDApOworCX0K KworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGlzcGxheVBv cnQgTGluayBUcmFpbmluZworICovCisKKy8qKgorICogenlucW1wX2RwX21heF9yYXRlIC0gQ2Fs Y3VsYXRlIGFuZCByZXR1cm4gYXZhaWxhYmxlIG1heCBwaXhlbCBjbG9jaworICogQGxpbmtfcmF0 ZTogbGluayByYXRlIChLaWxvLWJ5dGVzIC8gc2VjKQorICogQGxhbmVfbnVtOiBudW1iZXIgb2Yg bGFuZXMKKyAqIEBicHA6IGJpdHMgcGVyIHBpeGVsCisgKgorICogUmV0dXJuOiBtYXggcGl4ZWwg Y2xvY2sgKEtIeikgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgbGluayBjb25maWcuCisgKi8KK3N0YXRp YyBpbmxpbmUgaW50IHp5bnFtcF9kcF9tYXhfcmF0ZShpbnQgbGlua19yYXRlLCB1OCBsYW5lX251 bSwgdTggYnBwKQoreworCXJldHVybiBsaW5rX3JhdGUgKiBsYW5lX251bSAqIDggLyBicHA7Cit9 CisKKy8qKgorICogenlucW1wX2RwX21vZGVfY29uZmlndXJlIC0gQ29uZmlndXJlIHRoZSBsaW5r IHZhbHVlcworICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQorICogQHBjbG9j azogcGl4ZWwgY2xvY2sgZm9yIHJlcXVlc3RlZCBkaXNwbGF5IG1vZGUKKyAqIEBjdXJyZW50X2J3 OiBjdXJyZW50IGxpbmsgcmF0ZQorICoKKyAqIEZpbmQgdGhlIGxpbmsgY29uZmlndXJhdGlvbiB2 YWx1ZXMsIHJhdGUgYW5kIGxhbmUgY291bnQgZm9yIHJlcXVlc3RlZCBwaXhlbAorICogY2xvY2sg QHBjbG9jay4gVGhlIEBwY2xvY2sgaXMgc3RvcmVkIGluIHRoZSBtb2RlIHRvIGJlIHVzZWQgaW4g b3RoZXIKKyAqIGZ1bmN0aW9ucyBsYXRlci4gVGhlIHJldHVybmVkIHJhdGUgaXMgZG93bnNoaWZ0 ZWQgZnJvbSB0aGUgY3VycmVudCByYXRlCisgKiBAY3VycmVudF9idy4KKyAqCisgKiBSZXR1cm46 IEN1cnJlbnQgbGluayByYXRlIGNvZGUsIG9yIC1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgenlu cW1wX2RwX21vZGVfY29uZmlndXJlKHN0cnVjdCB6eW5xbXBfZHAgKmRwLCBpbnQgcGNsb2NrLAor CQkJCSAgICB1OCBjdXJyZW50X2J3KQoreworCWludCBtYXhfcmF0ZSA9IGRwLT5saW5rX2NvbmZp Zy5tYXhfcmF0ZTsKKwl1OCBid3NbM10gPSB7IERQX0xJTktfQldfMV82MiwgRFBfTElOS19CV18y XzcsIERQX0xJTktfQldfNV80IH07CisJdTggbWF4X2xhbmVzID0gZHAtPmxpbmtfY29uZmlnLm1h eF9sYW5lczsKKwl1OCBtYXhfbGlua19yYXRlX2NvZGUgPSBkcm1fZHBfbGlua19yYXRlX3RvX2J3 X2NvZGUobWF4X3JhdGUpOworCXU4IGJwcCA9IGRwLT5jb25maWcuYnBwOworCXU4IGxhbmVfY250 OworCXM4IGk7CisKKwlpZiAoY3VycmVudF9idyA9PSBEUF9MSU5LX0JXXzFfNjIpIHsKKwkJZGV2 X2VycihkcC0+ZGV2LCAiY2FuJ3QgZG93bnNoaWZ0LiBhbHJlYWR5IGxvd2VzdCBsaW5rIHJhdGVc biIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSBBUlJBWV9TSVpFKGJ3cykg LSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoY3VycmVudF9idyAmJiBid3NbaV0gPj0gY3VycmVu dF9idykKKwkJCWNvbnRpbnVlOworCisJCWlmIChid3NbaV0gPD0gbWF4X2xpbmtfcmF0ZV9jb2Rl KQorCQkJYnJlYWs7CisJfQorCisJZm9yIChsYW5lX2NudCA9IDE7IGxhbmVfY250IDw9IG1heF9s YW5lczsgbGFuZV9jbnQgPDw9IDEpIHsKKwkJaW50IGJ3OworCQl1MzIgcmF0ZTsKKworCQlidyA9 IGRybV9kcF9id19jb2RlX3RvX2xpbmtfcmF0ZShid3NbaV0pOworCQlyYXRlID0genlucW1wX2Rw X21heF9yYXRlKGJ3LCBsYW5lX2NudCwgYnBwKTsKKwkJaWYgKHBjbG9jayA8PSByYXRlKSB7CisJ CQlkcC0+bW9kZS5id19jb2RlID0gYndzW2ldOworCQkJZHAtPm1vZGUubGFuZV9jbnQgPSBsYW5l X2NudDsKKwkJCWRwLT5tb2RlLnBjbG9jayA9IHBjbG9jazsKKwkJCXJldHVybiBkcC0+bW9kZS5i d19jb2RlOworCQl9CisJfQorCisJZGV2X2VycihkcC0+ZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3Vy ZSBsaW5rIHZhbHVlc1xuIik7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB6eW5x bXBfZHBfYWRqdXN0X3RyYWluIC0gQWRqdXN0IHRyYWluIHZhbHVlcworICogQGRwOiBEaXNwbGF5 UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQorICogQGxpbmtfc3RhdHVzOiBsaW5rIHN0YXR1cyBmcm9t IHNpbmsgd2hpY2ggY29udGFpbnMgcmVxdWVzdGVkIHRyYWluaW5nIHZhbHVlcworICovCitzdGF0 aWMgdm9pZCB6eW5xbXBfZHBfYWRqdXN0X3RyYWluKHN0cnVjdCB6eW5xbXBfZHAgKmRwLAorCQkJ CSAgIHU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdKQoreworCXU4ICp0cmFpbl9z ZXQgPSBkcC0+dHJhaW5fc2V0OworCXU4IHZvbHRhZ2UgPSAwLCBwcmVlbXBoYXNpcyA9IDA7CisJ dTggaTsKKworCWZvciAoaSA9IDA7IGkgPCBkcC0+bW9kZS5sYW5lX2NudDsgaSsrKSB7CisJCXU4 IHYgPSBkcm1fZHBfZ2V0X2FkanVzdF9yZXF1ZXN0X3ZvbHRhZ2UobGlua19zdGF0dXMsIGkpOwor CQl1OCBwID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMobGlua19zdGF0 dXMsIGkpOworCisJCWlmICh2ID4gdm9sdGFnZSkKKwkJCXZvbHRhZ2UgPSB2OworCisJCWlmIChw ID4gcHJlZW1waGFzaXMpCisJCQlwcmVlbXBoYXNpcyA9IHA7CisJfQorCisJaWYgKHZvbHRhZ2Ug Pj0gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8zKQorCQl2b2x0YWdlIHw9IERQX1RSQUlO X01BWF9TV0lOR19SRUFDSEVEOworCisJaWYgKHByZWVtcGhhc2lzID49IERQX1RSQUlOX1BSRV9F TVBIX0xFVkVMXzIpCisJCXByZWVtcGhhc2lzIHw9IERQX1RSQUlOX01BWF9QUkVfRU1QSEFTSVNf UkVBQ0hFRDsKKworCWZvciAoaSA9IDA7IGkgPCBkcC0+bW9kZS5sYW5lX2NudDsgaSsrKQorCQl0 cmFpbl9zZXRbaV0gPSB2b2x0YWdlIHwgcHJlZW1waGFzaXM7Cit9CisKKy8qKgorICogenlucW1w X2RwX3VwZGF0ZV92c19lbXBoIC0gVXBkYXRlIHRoZSB0cmFpbmluZyB2YWx1ZXMKKyAqIEBkcDog RGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBVcGRhdGUgdGhlIHRyYWluaW5n IHZhbHVlcyBiYXNlZCBvbiB0aGUgcmVxdWVzdCBmcm9tIHNpbmsuIFRoZSBtYXBwZWQgdmFsdWVz CisgKiBhcmUgcHJlZGVmaW5lZCwgYW5kIHZhbHVlcyh2cywgcGUsIHBjKSBhcmUgZnJvbSB0aGUg ZGV2aWNlIG1hbnVhbC4KKyAqCisgKiBSZXR1cm46IDAgaWYgdnMgYW5kIGVtcGggYXJlIHVwZGF0 ZWQgc3VjY2Vzc2Z1bGx5LCBvciB0aGUgZXJyb3IgY29kZSByZXR1cm5lZAorICogYnkgZHJtX2Rw X2RwY2Rfd3JpdGUoKS4KKyAqLworc3RhdGljIGludCB6eW5xbXBfZHBfdXBkYXRlX3ZzX2VtcGgo c3RydWN0IHp5bnFtcF9kcCAqZHApCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKwor CXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKCZkcC0+YXV4LCBEUF9UUkFJTklOR19MQU5FMF9TRVQs IGRwLT50cmFpbl9zZXQsCisJCQkJZHAtPm1vZGUubGFuZV9jbnQpOworCWlmIChyZXQgPCAwKQor CQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGRwLT5tb2RlLmxhbmVfY250OyBpKysp IHsKKwkJdTMyIHJlZyA9IFpZTlFNUF9EUF9TVUJfVFhfUEhZX1BSRUNVUlNPUl9MQU5FXzAgKyBp ICogNDsKKwkJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIG9wdHMgPSB7IDAgfTsKKwkJdTggdHJh aW4gPSBkcC0+dHJhaW5fc2V0W2ldOworCisJCW9wdHMuZHAudm9sdGFnZVswXSA9ICh0cmFpbiAm IERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTUFTSykKKwkJCQkgICA+PiBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX1NISUZUOworCQlvcHRzLmRwLnByZVswXSA9ICh0cmFpbiAmIERQX1RSQUlOX1BSRV9F TVBIQVNJU19NQVNLKQorCQkJICAgICAgID4+IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVDsK KworCQlwaHlfY29uZmlndXJlKGRwLT5waHlbaV0sICZvcHRzKTsKKworCQl6eW5xbXBfZHBfd3Jp dGUoZHAsIHJlZywgMHgyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB6eW5xbXBf ZHBfbGlua190cmFpbl9jciAtIFRyYWluIGNsb2NrIHJlY292ZXJ5CisgKiBAZHA6IERpc3BsYXlQ b3J0IElQIGNvcmUgc3RydWN0dXJlCisgKgorICogUmV0dXJuOiAwIGlmIGNsb2NrIHJlY292ZXJ5 IHRyYWluIGlzIGRvbmUgc3VjY2Vzc2Z1bGx5LCBvciBjb3JyZXNwb25kaW5nCisgKiBlcnJvciBj b2RlLgorICovCitzdGF0aWMgaW50IHp5bnFtcF9kcF9saW5rX3RyYWluX2NyKHN0cnVjdCB6eW5x bXBfZHAgKmRwKQoreworCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOworCXU4 IGxhbmVfY250ID0gZHAtPm1vZGUubGFuZV9jbnQ7CisJdTggdnMgPSAwLCB0cmllcyA9IDA7CisJ dTE2IG1heF90cmllcywgaTsKKwlib29sIGNyX2RvbmU7CisJaW50IHJldDsKKworCXp5bnFtcF9k cF93cml0ZShkcCwgWllOUU1QX0RQX1RSQUlOSU5HX1BBVFRFUk5fU0VULAorCQkJRFBfVFJBSU5J TkdfUEFUVEVSTl8xKTsKKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1RS QUlOSU5HX1BBVFRFUk5fU0VULAorCQkJCSBEUF9UUkFJTklOR19QQVRURVJOXzEgfAorCQkJCSBE UF9MSU5LX1NDUkFNQkxJTkdfRElTQUJMRSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7 CisKKwkvKgorCSAqIDI1NiBsb29wcyBzaG91bGQgYmUgbWF4aW11bSBpdGVyYXRpb25zIGZvciA0 IGxhbmVzIGFuZCA0IHZhbHVlcy4KKwkgKiBTbywgVGhpcyBsb29wIHNob3VsZCBleGl0IGJlZm9y ZSA1MTIgaXRlcmF0aW9ucworCSAqLworCWZvciAobWF4X3RyaWVzID0gMDsgbWF4X3RyaWVzIDwg NTEyOyBtYXhfdHJpZXMrKykgeworCQlyZXQgPSB6eW5xbXBfZHBfdXBkYXRlX3ZzX2VtcGgoZHAp OworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlkcm1fZHBfbGlua190cmFpbl9jbG9j a19yZWNvdmVyeV9kZWxheShkcC0+ZHBjZCk7CisJCXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlu a19zdGF0dXMoJmRwLT5hdXgsIGxpbmtfc3RhdHVzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1 cm4gcmV0OworCisJCWNyX2RvbmUgPSBkcm1fZHBfY2xvY2tfcmVjb3Zlcnlfb2sobGlua19zdGF0 dXMsIGxhbmVfY250KTsKKwkJaWYgKGNyX2RvbmUpCisJCQlicmVhazsKKworCQlmb3IgKGkgPSAw OyBpIDwgbGFuZV9jbnQ7IGkrKykKKwkJCWlmICghKGRwLT50cmFpbl9zZXRbaV0gJiBEUF9UUkFJ Tl9NQVhfU1dJTkdfUkVBQ0hFRCkpCisJCQkJYnJlYWs7CisJCWlmIChpID09IGxhbmVfY250KQor CQkJYnJlYWs7CisKKwkJaWYgKChkcC0+dHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fVk9MVEFHRV9T V0lOR19NQVNLKSA9PSB2cykKKwkJCXRyaWVzKys7CisJCWVsc2UKKwkJCXRyaWVzID0gMDsKKwor CQlpZiAodHJpZXMgPT0gRFBfTUFYX1RSQUlOSU5HX1RSSUVTKQorCQkJYnJlYWs7CisKKwkJdnMg PSBkcC0+dHJhaW5fc2V0WzBdICYgRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19NQVNLOworCQl6eW5x bXBfZHBfYWRqdXN0X3RyYWluKGRwLCBsaW5rX3N0YXR1cyk7CisJfQorCisJaWYgKCFjcl9kb25l KQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHp5bnFtcF9kcF9s aW5rX3RyYWluX2NlIC0gVHJhaW4gY2hhbm5lbCBlcXVhbGl6YXRpb24KKyAqIEBkcDogRGlzcGxh eVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm46IDAgaWYgY2hhbm5lbCBlcXVh bGl6YXRpb24gdHJhaW4gaXMgZG9uZSBzdWNjZXNzZnVsbHksIG9yCisgKiBjb3JyZXNwb25kaW5n IGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgenlucW1wX2RwX2xpbmtfdHJhaW5fY2Uoc3Ry dWN0IHp5bnFtcF9kcCAqZHApCit7CisJdTggbGlua19zdGF0dXNbRFBfTElOS19TVEFUVVNfU0la RV07CisJdTggbGFuZV9jbnQgPSBkcC0+bW9kZS5sYW5lX2NudDsKKwl1MzIgcGF0LCB0cmllczsK KwlpbnQgcmV0OworCWJvb2wgY2VfZG9uZTsKKworCWlmIChkcC0+ZHBjZFtEUF9EUENEX1JFVl0g Pj0gRFBfVjFfMiAmJgorCSAgICBkcC0+ZHBjZFtEUF9NQVhfTEFORV9DT1VOVF0gJiBEUF9UUFMz X1NVUFBPUlRFRCkKKwkJcGF0ID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8zOworCWVsc2UKKwkJcGF0 ID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8yOworCisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBf RFBfVFJBSU5JTkdfUEFUVEVSTl9TRVQsIHBhdCk7CisJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVi KCZkcC0+YXV4LCBEUF9UUkFJTklOR19QQVRURVJOX1NFVCwKKwkJCQkgcGF0IHwgRFBfTElOS19T Q1JBTUJMSU5HX0RJU0FCTEUpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9y ICh0cmllcyA9IDA7IHRyaWVzIDwgRFBfTUFYX1RSQUlOSU5HX1RSSUVTOyB0cmllcysrKSB7CisJ CXJldCA9IHp5bnFtcF9kcF91cGRhdGVfdnNfZW1waChkcCk7CisJCWlmIChyZXQpCisJCQlyZXR1 cm4gcmV0OworCisJCWRybV9kcF9saW5rX3RyYWluX2NoYW5uZWxfZXFfZGVsYXkoZHAtPmRwY2Qp OworCQlyZXQgPSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZkcC0+YXV4LCBsaW5rX3N0 YXR1cyk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQljZV9kb25lID0gZHJt X2RwX2NoYW5uZWxfZXFfb2sobGlua19zdGF0dXMsIGxhbmVfY250KTsKKwkJaWYgKGNlX2RvbmUp CisJCQlicmVhazsKKworCQl6eW5xbXBfZHBfYWRqdXN0X3RyYWluKGRwLCBsaW5rX3N0YXR1cyk7 CisJfQorCisJaWYgKCFjZV9kb25lKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQor CisvKioKKyAqIHp5bnFtcF9kcF9saW5rX3RyYWluIC0gVHJhaW4gdGhlIGxpbmsKKyAqIEBkcDog RGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm46IDAgaWYgYWxsIHRy YWlucyBhcmUgZG9uZSBzdWNjZXNzZnVsbHksIG9yIGNvcnJlc3BvbmRpbmcgZXJyb3IgY29kZS4K KyAqLworc3RhdGljIGludCB6eW5xbXBfZHBfdHJhaW4oc3RydWN0IHp5bnFtcF9kcCAqZHApCit7 CisJdTMyIHJlZzsKKwl1OCBid19jb2RlID0gZHAtPm1vZGUuYndfY29kZTsKKwl1OCBsYW5lX2Nu dCA9IGRwLT5tb2RlLmxhbmVfY250OworCXU4IGF1eF9sYW5lX2NudCA9IGxhbmVfY250OworCWJv b2wgZW5oYW5jZWQ7CisJaW50IHJldDsKKworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQ X0xBTkVfQ09VTlRfU0VULCBsYW5lX2NudCk7CisJZW5oYW5jZWQgPSBkcm1fZHBfZW5oYW5jZWRf ZnJhbWVfY2FwKGRwLT5kcGNkKTsKKwlpZiAoZW5oYW5jZWQpIHsKKwkJenlucW1wX2RwX3dyaXRl KGRwLCBaWU5RTVBfRFBfRU5IQU5DRURfRlJBTUVfRU4sIDEpOworCQlhdXhfbGFuZV9jbnQgfD0g RFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKKwl9CisKKwlpZiAoZHAtPmRwY2RbM10g JiAweDEpIHsKKwkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfRE9XTlNQUkVBRF9DVEws IDEpOworCQlkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX0RPV05TUFJFQURfQ1RSTCwK KwkJCQkgICBEUF9TUFJFQURfQU1QXzBfNSk7CisJfSBlbHNlIHsKKwkJenlucW1wX2RwX3dyaXRl KGRwLCBaWU5RTVBfRFBfRE9XTlNQUkVBRF9DVEwsIDApOworCQlkcm1fZHBfZHBjZF93cml0ZWIo JmRwLT5hdXgsIERQX0RPV05TUFJFQURfQ1RSTCwgMCk7CisJfQorCisJcmV0ID0gZHJtX2RwX2Rw Y2Rfd3JpdGViKCZkcC0+YXV4LCBEUF9MQU5FX0NPVU5UX1NFVCwgYXV4X2xhbmVfY250KTsKKwlp ZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gc2V0IGxhbmUgY291 bnRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYigm ZHAtPmF1eCwgRFBfTUFJTl9MSU5LX0NIQU5ORUxfQ09ESU5HX1NFVCwKKwkJCQkgRFBfU0VUX0FO U0lfOEIxMEIpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0 byBzZXQgQU5TSSA4Qi8xMEIgZW5jb2RpbmdcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJl dCA9IGRybV9kcF9kcGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfTElOS19CV19TRVQsIGJ3X2NvZGUp OworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBzZXQgRFAg YmFuZHdpZHRoXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl6eW5xbXBfZHBfd3JpdGUoZHAs IFpZTlFNUF9EUF9MSU5LX0JXX1NFVCwgYndfY29kZSk7CisJc3dpdGNoIChid19jb2RlKSB7CisJ Y2FzZSBEUF9MSU5LX0JXXzFfNjI6CisJCXJlZyA9IFpZTlFNUF9EUF9QSFlfQ0xPQ0tfU0VMRUNU XzFfNjJHOworCQlicmVhazsKKwljYXNlIERQX0xJTktfQldfMl83OgorCQlyZWcgPSBaWU5RTVBf RFBfUEhZX0NMT0NLX1NFTEVDVF8yXzcwRzsKKwkJYnJlYWs7CisJY2FzZSBEUF9MSU5LX0JXXzVf NDoKKwlkZWZhdWx0OgorCQlyZWcgPSBaWU5RTVBfRFBfUEhZX0NMT0NLX1NFTEVDVF81XzQwRzsK KwkJYnJlYWs7CisJfQorCisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfUEhZX0NMT0NL X1NFTEVDVCwgcmVnKTsKKwlyZXQgPSB6eW5xbXBfZHBfcGh5X3JlYWR5KGRwKTsKKwlpZiAocmV0 IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1ND UkFNQkxJTkdfRElTQUJMRSwgMSk7CisJbWVtc2V0KGRwLT50cmFpbl9zZXQsIDAsIDQpOworCXJl dCA9IHp5bnFtcF9kcF9saW5rX3RyYWluX2NyKGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0 OworCisJcmV0ID0genlucW1wX2RwX2xpbmtfdHJhaW5fY2UoZHApOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1RSQUlO SU5HX1BBVFRFUk5fU0VULAorCQkJCSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZHAtPmRldiwgImZhaWxlZCB0byBkaXNhYmxlIHRyYWlu aW5nIHBhdHRlcm5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwl6eW5xbXBfZHBfd3JpdGUoZHAs IFpZTlFNUF9EUF9UUkFJTklOR19QQVRURVJOX1NFVCwKKwkJCURQX1RSQUlOSU5HX1BBVFRFUk5f RElTQUJMRSk7CisKKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9TQ1JBTUJMSU5HX0RJ U0FCTEUsIDApOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogenlucW1wX2RwX3RyYWluX2xv b3AgLSBEb3duc2hpZnQgdGhlIGxpbmsgcmF0ZSBkdXJpbmcgdHJhaW5pbmcKKyAqIEBkcDogRGlz cGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBUcmFpbiB0aGUgbGluayBieSBkb3du c2hpZnRpbmcgdGhlIGxpbmsgcmF0ZSBpZiB0cmFpbmluZyBpcyBub3Qgc3VjY2Vzc2Z1bC4KKyAq Lworc3RhdGljIHZvaWQgenlucW1wX2RwX3RyYWluX2xvb3Aoc3RydWN0IHp5bnFtcF9kcCAqZHAp Cit7CisJc3RydWN0IHp5bnFtcF9kcF9tb2RlICptb2RlID0gJmRwLT5tb2RlOworCXU4IGJ3ID0g bW9kZS0+YndfY29kZTsKKwlpbnQgcmV0OworCisJZG8geworCQlpZiAoZHAtPnN0YXR1cyA9PSBj b25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCB8fAorCQkgICAgIWRwLT5lbmFibGVkKQorCQkJ cmV0dXJuOworCisJCXJldCA9IHp5bnFtcF9kcF90cmFpbihkcCk7CisJCWlmICghcmV0KQorCQkJ cmV0dXJuOworCisJCXJldCA9IHp5bnFtcF9kcF9tb2RlX2NvbmZpZ3VyZShkcCwgbW9kZS0+cGNs b2NrLCBidyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlcnJfb3V0OworCisJCWJ3ID0gcmV0 OworCX0gd2hpbGUgKGJ3ID49IERQX0xJTktfQldfMV82Mik7CisKK2Vycl9vdXQ6CisJZGV2X2Vy cihkcC0+ZGV2LCAiZmFpbGVkIHRvIHRyYWluIHRoZSBEUCBsaW5rXG4iKTsKK30KKworLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqIERpc3BsYXlQb3J0IEFVWAorICovCisKKyNkZWZpbmUgQVVY X1JFQURfQklUCTB4MQorCisvKioKKyAqIHp5bnFtcF9kcF9hdXhfY21kX3N1Ym1pdCAtIFN1Ym1p dCBhdXggY29tbWFuZAorICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQorICog QGNtZDogYXV4IGNvbW1hbmQKKyAqIEBhZGRyOiBhdXggYWRkcmVzcworICogQGJ1ZjogYnVmZmVy IGZvciBjb21tYW5kIGRhdGEKKyAqIEBieXRlczogbnVtYmVyIG9mIGJ5dGVzIGZvciBAYnVmCisg KiBAcmVwbHk6IHJlcGx5IGNvZGUgdG8gYmUgcmV0dXJuZWQKKyAqCisgKiBTdWJtaXQgYW4gYXV4 IGNvbW1hbmQuIEFsbCBhdXggcmVsYXRlZCBjb21tYW5kcywgbmF0aXZlIG9yIGkyYyBhdXgKKyAq IHJlYWQvd3JpdGUsIGFyZSBzdWJtaXR0ZWQgdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBUaGUgZnVu Y3Rpb24gaXMgbWFwcGVkIHRvCisgKiB0aGUgdHJhbnNmZXIgZnVuY3Rpb24gb2Ygc3RydWN0IGRy bV9kcF9hdXguIFRoaXMgZnVuY3Rpb24gaW52b2x2ZXMgaW4KKyAqIG11bHRpcGxlIHJlZ2lzdGVy IHJlYWRzL3dyaXRlcywgdGh1cyBzeW5jaHJvbml6YXRpb24gaXMgbmVlZGVkLCBhbmQgaXQgaXMK KyAqIGRvbmUgYnkgZHJtX2RwX2hlbHBlciB1c2luZyBAaHdfbXV0ZXguIFRoZSBjYWxsaW5nIHRo cmVhZCBnb2VzIGludG8gc2xlZXAKKyAqIGlmIHRoZXJlJ3Mgbm8gaW1tZWRpYXRlIHJlcGx5IHRv IHRoZSBjb21tYW5kIHN1Ym1pc3Npb24uIFRoZSByZXBseSBjb2RlIGlzCisgKiByZXR1cm5lZCBh dCBAcmVwbHkgaWYgQHJlcGx5ICE9IE5VTEwuCisgKgorICogUmV0dXJuOiAwIGlmIHRoZSBjb21t YW5kIGlzIHN1Ym1pdHRlZCBwcm9wZXJseSwgb3IgY29ycmVzcG9uZGluZyBlcnJvciBjb2RlOgor ICogLUVCVVNZIHdoZW4gdGhlcmUgaXMgYW55IHJlcXVlc3QgYWxyZWFkeSBiZWluZyBwcm9jZXNz ZWQKKyAqIC1FVElNRURPVVQgd2hlbiByZWNlaXZpbmcgcmVwbHkgaXMgdGltZWQgb3V0CisgKiAt RUlPIHdoZW4gcmVjZWl2ZWQgYnl0ZXMgYXJlIGxlc3MgdGhhbiByZXF1ZXN0ZWQKKyAqLworc3Rh dGljIGludCB6eW5xbXBfZHBfYXV4X2NtZF9zdWJtaXQoc3RydWN0IHp5bnFtcF9kcCAqZHAsIHUz MiBjbWQsIHUxNiBhZGRyLAorCQkJCSAgICB1OCAqYnVmLCB1OCBieXRlcywgdTggKnJlcGx5KQor eworCWJvb2wgaXNfcmVhZCA9IChjbWQgJiBBVVhfUkVBRF9CSVQpID8gdHJ1ZSA6IGZhbHNlOwor CXUzMiByZWcsIGk7CisKKwlyZWcgPSB6eW5xbXBfZHBfcmVhZChkcCwgWllOUU1QX0RQX0lOVEVS UlVQVF9TSUdOQUxfU1RBVEUpOworCWlmIChyZWcgJiBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05B TF9TVEFURV9SRVFVRVNUKQorCQlyZXR1cm4gLUVCVVNZOworCisJenlucW1wX2RwX3dyaXRlKGRw LCBaWU5RTVBfRFBfQVVYX0FERFJFU1MsIGFkZHIpOworCWlmICghaXNfcmVhZCkKKwkJZm9yIChp ID0gMDsgaSA8IGJ5dGVzOyBpKyspCisJCQl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9B VVhfV1JJVEVfRklGTywKKwkJCQkJYnVmW2ldKTsKKworCXJlZyA9IGNtZCA8PCBaWU5RTVBfRFBf QVVYX0NPTU1BTkRfQ01EX1NISUZUOworCWlmICghYnVmIHx8ICFieXRlcykKKwkJcmVnIHw9IFpZ TlFNUF9EUF9BVVhfQ09NTUFORF9BRERSRVNTX09OTFk7CisJZWxzZQorCQlyZWcgfD0gKGJ5dGVz IC0gMSkgPDwgWllOUU1QX0RQX0FVWF9DT01NQU5EX0JZVEVTX1NISUZUOworCXp5bnFtcF9kcF93 cml0ZShkcCwgWllOUU1QX0RQX0FVWF9DT01NQU5ELCByZWcpOworCisJLyogV2FpdCBmb3IgcmVw bHkgdG8gYmUgZGVsaXZlcmVkIHVwdG8gMm1zICovCisJZm9yIChpID0gMDsgOyBpKyspIHsKKwkJ cmVnID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRF KTsKKwkJaWYgKHJlZyAmIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRFX1JFUExZKQor CQkJYnJlYWs7CisKKwkJaWYgKHJlZyAmIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRF X1JFUExZX1RJTUVPVVQgfHwKKwkJICAgIGkgPT0gMikKKwkJCXJldHVybiAtRVRJTUVET1VUOwor CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAxMTAwKTsKKwl9CisKKwlyZWcgPSB6eW5xbXBfZHBfcmVh ZChkcCwgWllOUU1QX0RQX0FVWF9SRVBMWV9DT0RFKTsKKwlpZiAocmVwbHkpCisJCSpyZXBseSA9 IHJlZzsKKworCWlmIChpc19yZWFkICYmCisJICAgIChyZWcgPT0gWllOUU1QX0RQX0FVWF9SRVBM WV9DT0RFX0FVWF9BQ0sgfHwKKwkgICAgIHJlZyA9PSBaWU5RTVBfRFBfQVVYX1JFUExZX0NPREVf STJDX0FDSykpIHsKKwkJcmVnID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9SRVBMWV9E QVRBX0NPVU5UKTsKKwkJaWYgKChyZWcgJiBaWU5RTVBfRFBfUkVQTFlfREFUQV9DT1VOVF9NQVNL KSAhPSBieXRlcykKKwkJCXJldHVybiAtRUlPOworCisJCWZvciAoaSA9IDA7IGkgPCBieXRlczsg aSsrKQorCQkJYnVmW2ldID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9BVVhfUkVQTFlf REFUQSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90Cit6eW5xbXBfZHBf YXV4X3RyYW5zZmVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsIHN0cnVjdCBkcm1fZHBfYXV4X21z ZyAqbXNnKQoreworCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gY29udGFpbmVyX29mKGF1eCwgc3Ry dWN0IHp5bnFtcF9kcCwgYXV4KTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBpLCBpdGVyOwor CisJLyogTnVtYmVyIG9mIGxvb3BzID0gdGltZW91dCBpbiBtc2VjIC8gYXV4IGRlbGF5ICg0MDAg dXNlYykgKi8KKwlpdGVyID0genlucW1wX2RwX2F1eF90aW1lb3V0X21zICogMTAwMCAvIDQwMDsK KwlpdGVyID0gaXRlciA/IGl0ZXIgOiAxOworCisJZm9yIChpID0gMDsgaSA8IGl0ZXI7IGkrKykg eworCQlyZXQgPSB6eW5xbXBfZHBfYXV4X2NtZF9zdWJtaXQoZHAsIG1zZy0+cmVxdWVzdCwgbXNn LT5hZGRyZXNzLAorCQkJCQkgICAgICAgbXNnLT5idWZmZXIsIG1zZy0+c2l6ZSwKKwkJCQkJICAg ICAgICZtc2ctPnJlcGx5KTsKKwkJaWYgKCFyZXQpIHsKKwkJCWRldl9kYmcoZHAtPmRldiwgImF1 eCAlZCByZXRyaWVzXG4iLCBpKTsKKwkJCXJldHVybiBtc2ctPnNpemU7CisJCX0KKworCQlpZiAo ZHAtPnN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCkgeworCQkJZGV2X2Ri ZyhkcC0+ZGV2LCAibm8gY29ubmVjdGVkIGF1eCBkZXZpY2VcbiIpOworCQkJcmV0dXJuIC1FTk9E RVY7CisJCX0KKworCQl1c2xlZXBfcmFuZ2UoNDAwLCA1MDApOworCX0KKworCWRldl9kYmcoZHAt PmRldiwgImZhaWxlZCB0byBkbyBhdXggdHJhbnNmZXIgKCVkKVxuIiwgcmV0KTsKKworCXJldHVy biByZXQ7Cit9CisKKy8qKgorICogenlucW1wX2RwX2F1eF9pbml0IC0gSW5pdGlhbGl6ZSBhbmQg cmVnaXN0ZXIgdGhlIERQIEFVWAorICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVy ZQorICoKKyAqIFByb2dyYW0gdGhlIEFVWCBjbG9jayBkaXZpZGVyIGFuZCBmaWx0ZXIgYW5kIHJl Z2lzdGVyIHRoZSBEUCBBVVggYWRhcHRlci4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywg ZXJyb3IgdmFsdWUgb3RoZXJ3aXNlCisgKi8KK3N0YXRpYyBpbnQgenlucW1wX2RwX2F1eF9pbml0 KHN0cnVjdCB6eW5xbXBfZHAgKmRwKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKwl1bnNpZ25l ZCBpbnQgdzsKKworCS8qCisJICogVGhlIEFVWF9TSUdOQUxfV0lEVEhfRklMVEVSIGlzIHRoZSBu dW1iZXIgb2YgQVBCIGNsb2NrIGN5Y2xlcworCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFVWCBw dWxzZS4gQWxsb3dhYmxlIHZhbHVlcyBhcmUgOCwgMTYsIDI0LCAzMiwKKwkgKiA0MCBhbmQgNDgu IFRoZSBBVVggcHVsc2Ugd2lkdGggbXVzdCBiZSBiZXR3ZWVuIDAuNMK1cyBhbmQgMC42wrVzLAor CSAqIGNvbXB1dGUgdGhlIHcgLyA4IHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gMC40wrVzIHJvdW5k ZWQgdXAsIGFuZCBtYWtlCisJICogc3VyZSBpdCBzdGF5cyBiZWxvdyAwLjbCtXMgYW5kIHdpdGhp biB0aGUgYWxsb3dhYmxlIHZhbHVlcy4KKwkgKi8KKwlyYXRlID0gY2xrX2dldF9yYXRlKGRwLT5k cHN1Yi0+YXBiX2Nsayk7CisJdyA9IERJVl9ST1VORF9VUCg0ICogcmF0ZSwgMTAwMCAqIDEwMDAg KiAxMCAqIDgpICogODsKKwlpZiAodyA+IDYgKiByYXRlIC8gKDEwMDAgKiAxMDAwICogMTApIHx8 IHcgPiA0OCkgeworCQlkZXZfZXJyKGRwLT5kZXYsICJhY2xrIGZyZXF1ZW5jeSB0b28gaGlnaFxu Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1Q X0RQX0FVWF9DTEtfRElWSURFUiwKKwkJCSh3IDw8IFpZTlFNUF9EUF9BVVhfQ0xLX0RJVklERVJf QVVYX0ZJTFRFUl9TSElGVCkgfAorCQkJKHJhdGUgLyAoMTAwMCAqIDEwMDApKSk7CisKKwlkcC0+ YXV4Lm5hbWUgPSAiWnlucU1QIERQIEFVWCI7CisJZHAtPmF1eC5kZXYgPSBkcC0+ZGV2OworCWRw LT5hdXgudHJhbnNmZXIgPSB6eW5xbXBfZHBfYXV4X3RyYW5zZmVyOworCisJcmV0dXJuIGRybV9k cF9hdXhfcmVnaXN0ZXIoJmRwLT5hdXgpOworfQorCisvKioKKyAqIHp5bnFtcF9kcF9hdXhfY2xl YW51cCAtIENsZWFudXAgdGhlIERQIEFVWAorICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0 cnVjdHVyZQorICoKKyAqIFVucmVnaXN0ZXIgdGhlIERQIEFVWCBhZGFwdGVyLgorICovCitzdGF0 aWMgdm9pZCB6eW5xbXBfZHBfYXV4X2NsZWFudXAoc3RydWN0IHp5bnFtcF9kcCAqZHApCit7CisJ ZHJtX2RwX2F1eF91bnJlZ2lzdGVyKCZkcC0+YXV4KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqIERpc3BsYXlQb3J0IEdlbmVyaWMgU3VwcG9ydAorICovCisKKy8qKgorICogenlu cW1wX2RwX3VwZGF0ZV9taXNjIC0gV3JpdGUgdGhlIG1pc2MgcmVnaXN0ZXJzCisgKiBAZHA6IERp c3BsYXlQb3J0IElQIGNvcmUgc3RydWN0dXJlCisgKgorICogVGhlIG1pc2MgcmVnaXN0ZXIgdmFs dWVzIGFyZSBzdG9yZWQgaW4gdGhlIHN0cnVjdHVyZSwgYW5kIHRoaXMKKyAqIGZ1bmN0aW9uIGFw cGxpZXMgdGhlIHZhbHVlcyBpbnRvIHRoZSByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHp5 bnFtcF9kcF91cGRhdGVfbWlzYyhzdHJ1Y3QgenlucW1wX2RwICpkcCkKK3sKKwl6eW5xbXBfZHBf d3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMCwgZHAtPmNvbmZpZy5taXNjMCk7 CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzEsIGRwLT5j b25maWcubWlzYzEpOworfQorCisvKioKKyAqIHp5bnFtcF9kcF9zZXRfZm9ybWF0IC0gU2V0IHRo ZSBpbnB1dCBmb3JtYXQKKyAqIEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAq IEBmb3JtYXQ6IGlucHV0IGZvcm1hdAorICogQGJwYzogYml0cyBwZXIgY29tcG9uZW50CisgKgor ICogVXBkYXRlIG1pc2MgcmVnaXN0ZXIgdmFsdWVzIGJhc2VkIG9uIGlucHV0IEBmb3JtYXQgYW5k IEBicGMuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIC1FSU5WQUwuCisgKi8KK3N0 YXRpYyBpbnQgenlucW1wX2RwX3NldF9mb3JtYXQoc3RydWN0IHp5bnFtcF9kcCAqZHAsCisJCQkJ ZW51bSB6eW5xbXBfZHBzdWJfZm9ybWF0IGZvcm1hdCwKKwkJCQl1bnNpZ25lZCBpbnQgYnBjKQor eworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGlzcGxheTsKKwlzdHJ1 Y3QgenlucW1wX2RwX2NvbmZpZyAqY29uZmlnID0gJmRwLT5jb25maWc7CisJdW5zaWduZWQgaW50 IG51bV9jb2xvcnM7CisKKwljb25maWctPm1pc2MwICY9IH5aWU5RTVBfRFBfTUFJTl9TVFJFQU1f TUlTQzBfQ09NUF9GT1JNQVRfTUFTSzsKKwljb25maWctPm1pc2MxICY9IH5aWU5RTVBfRFBfTUFJ Tl9TVFJFQU1fTUlTQzFfWV9PTkxZX0VOOworCisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFpZ TlFNUF9EUFNVQl9GT1JNQVRfUkdCOgorCQljb25maWctPm1pc2MwIHw9IFpZTlFNUF9EUF9NQUlO X1NUUkVBTV9NSVNDMF9DT01QX0ZPUk1BVF9SR0I7CisJCW51bV9jb2xvcnMgPSAzOworCQlicmVh azsKKworCWNhc2UgWllOUU1QX0RQU1VCX0ZPUk1BVF9ZQ1JDQjQ0NDoKKwkJY29uZmlnLT5taXNj MCB8PSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBfQ09NUF9GT1JNQVRfWUNSQ0JfNDQ0Owor CQludW1fY29sb3JzID0gMzsKKwkJYnJlYWs7CisKKwljYXNlIFpZTlFNUF9EUFNVQl9GT1JNQVRf WUNSQ0I0MjI6CisJCWNvbmZpZy0+bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0Mw X0NPTVBfRk9STUFUX1lDUkNCXzQyMjsKKwkJbnVtX2NvbG9ycyA9IDI7CisJCWJyZWFrOworCisJ Y2FzZSBaWU5RTVBfRFBTVUJfRk9STUFUX1lPTkxZOgorCQljb25maWctPm1pc2MxIHw9IFpZTlFN UF9EUF9NQUlOX1NUUkVBTV9NSVNDMV9ZX09OTFlfRU47CisJCW51bV9jb2xvcnMgPSAxOworCQli cmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoZHAtPmRldiwgIkludmFsaWQgY29sb3JtZXRy eSBpbiBEVFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRpc3BsYXkgPSAmZHAtPmNv bm5lY3Rvci5kaXNwbGF5X2luZm87CisJaWYgKGRpc3BsYXktPmJwYyAmJiBicGMgPiBkaXNwbGF5 LT5icGMpIHsKKwkJZGV2X3dhcm4oZHAtPmRldiwKKwkJCSAiZG93bmdyYWRpbmcgcmVxdWVzdGVk ICV1YnBjIHRvIGRpc3BsYXkgbGltaXQgJXVicGNcbiIsCisJCQkgYnBjLCBkaXNwbGF5LT5icGMp OworCQlicGMgPSBkaXNwbGF5LT5icGM7CisJfQorCisJY29uZmlnLT5taXNjMCAmPSB+WllOUU1Q X0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ19NQVNLOworCisJc3dpdGNoIChicGMpIHsKKwljYXNl IDY6CisJCWNvbmZpZy0+bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ182 OworCQlicmVhazsKKwljYXNlIDg6CisJCWNvbmZpZy0+bWlzYzAgfD0gWllOUU1QX0RQX01BSU5f U1RSRUFNX01JU0MwX0JQQ184OworCQlicmVhazsKKwljYXNlIDEwOgorCQljb25maWctPm1pc2Mw IHw9IFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9CUENfMTA7CisJCWJyZWFrOworCWNhc2Ug MTI6CisJCWNvbmZpZy0+bWlzYzAgfD0gWllOUU1QX0RQX01BSU5fU1RSRUFNX01JU0MwX0JQQ18x MjsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJY29uZmlnLT5taXNjMCB8PSBaWU5RTVBfRFBfTUFJ Tl9TVFJFQU1fTUlTQzBfQlBDXzE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2Fybihk cC0+ZGV2LCAiTm90IHN1cHBvcnRlZCBicGMgKCV1KS4gZmFsbCBiYWNrIHRvIDhicGNcbiIsCisJ CQkgYnBjKTsKKwkJY29uZmlnLT5taXNjMCB8PSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTUlTQzBf QlBDXzg7CisJCWJwYyA9IDg7CisJCWJyZWFrOworCX0KKworCS8qIFVwZGF0ZSB0aGUgY3VycmVu dCBicHAgYmFzZWQgb24gdGhlIGZvcm1hdC4gKi8KKwljb25maWctPmJwcCA9IGJwYyAqIG51bV9j b2xvcnM7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB6eW5xbXBfZHBfZW5jb2Rlcl9tb2Rl X3NldF90cmFuc2Zlcl91bml0IC0gU2V0IHRoZSB0cmFuc2ZlciB1bml0IHZhbHVlcworICogQGRw OiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQorICogQG1vZGU6IHJlcXVlc3RlZCBkaXNw bGF5IG1vZGUKKyAqCisgKiBTZXQgdGhlIHRyYW5zZmVyIHVuaXQsIGFuZCBjYWxjdWxhdGUgYWxs IHRyYW5zZmVyIHVuaXQgc2l6ZSByZWxhdGVkIHZhbHVlcy4KKyAqIENhbGN1bGF0aW9uIGlzIGJh c2VkIG9uIERQIGFuZCBJUCBjb3JlIHNwZWNpZmljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCit6 eW5xbXBfZHBfZW5jb2Rlcl9tb2RlX3NldF90cmFuc2Zlcl91bml0KHN0cnVjdCB6eW5xbXBfZHAg KmRwLAorCQkJCQkgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCit7CisJdTMyIHR1ID0g WllOUU1QX0RQX01TQV9UUkFOU0ZFUl9VTklUX1NJWkVfVFVfU0laRV9ERUY7CisJdTMyIGJ3LCB2 aWRfa2J5dGVzLCBhdmdfYnl0ZXNfcGVyX3R1LCBpbml0X3dhaXQ7CisKKwkvKiBVc2UgdGhlIG1h eCB0cmFuc2ZlciB1bml0IHNpemUgKGRlZmF1bHQpICovCisJenlucW1wX2RwX3dyaXRlKGRwLCBa WU5RTVBfRFBfTVNBX1RSQU5TRkVSX1VOSVRfU0laRSwgdHUpOworCisJdmlkX2tieXRlcyA9IG1v ZGUtPmNsb2NrICogKGRwLT5jb25maWcuYnBwIC8gOCk7CisJYncgPSBkcm1fZHBfYndfY29kZV90 b19saW5rX3JhdGUoZHAtPm1vZGUuYndfY29kZSk7CisJYXZnX2J5dGVzX3Blcl90dSA9IHZpZF9r Ynl0ZXMgKiB0dSAvIChkcC0+bW9kZS5sYW5lX2NudCAqIGJ3IC8gMTAwMCk7CisJenlucW1wX2Rw X3dyaXRlKGRwLCBaWU5RTVBfRFBfTUlOX0JZVEVTX1BFUl9UVSwKKwkJCWF2Z19ieXRlc19wZXJf dHUgLyAxMDAwKTsKKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9GUkFDX0JZVEVTX1BF Ul9UVSwKKwkJCWF2Z19ieXRlc19wZXJfdHUgJSAxMDAwKTsKKworCS8qIENvbmZpZ3VyZSB0aGUg aW5pdGlhbCB3YWl0IGN5Y2xlIGJhc2VkIG9uIHRyYW5zZmVyIHVuaXQgc2l6ZSAqLworCWlmICh0 dSA8IChhdmdfYnl0ZXNfcGVyX3R1IC8gMTAwMCkpCisJCWluaXRfd2FpdCA9IDA7CisJZWxzZSBp ZiAoKGF2Z19ieXRlc19wZXJfdHUgLyAxMDAwKSA8PSA0KQorCQlpbml0X3dhaXQgPSB0dTsKKwll bHNlCisJCWluaXRfd2FpdCA9IHR1IC0gYXZnX2J5dGVzX3Blcl90dSAvIDEwMDA7CisKKwl6eW5x bXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9JTklUX1dBSVQsIGluaXRfd2FpdCk7Cit9CisKKy8q KgorICogenlucW1wX2RwX2VuY29kZXJfbW9kZV9zZXRfc3RyZWFtIC0gQ29uZmlndXJlIHRoZSBt YWluIHN0cmVhbQorICogQGRwOiBEaXNwbGF5UG9ydCBJUCBjb3JlIHN0cnVjdHVyZQorICogQG1v ZGU6IHJlcXVlc3RlZCBkaXNwbGF5IG1vZGUKKyAqCisgKiBDb25maWd1cmUgdGhlIG1haW4gc3Ry ZWFtIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgbW9kZSBAbW9kZS4gQ2FsY3VsYXRpb24gaXMKKyAq IGJhc2VkIG9uIElQIGNvcmUgc3BlY2lmaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgenlucW1w X2RwX2VuY29kZXJfbW9kZV9zZXRfc3RyZWFtKHN0cnVjdCB6eW5xbXBfZHAgKmRwLAorCQkJCQkg ICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwl1OCBsYW5lX2Nu dCA9IGRwLT5tb2RlLmxhbmVfY250OworCXUzMiByZWcsIHdwbDsKKwl1bnNpZ25lZCBpbnQgcmF0 ZTsKKworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX01BSU5fU1RSRUFNX0hUT1RBTCwg bW9kZS0+aHRvdGFsKTsKKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVB TV9WVE9UQUwsIG1vZGUtPnZ0b3RhbCk7CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBf TUFJTl9TVFJFQU1fUE9MQVJJVFksCisJCQkoISEobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFH X1BWU1lOQykgPDwKKwkJCSBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fUE9MQVJJVFlfVlNZTkNfU0hJ RlQpIHwKKwkJCSghIShtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUEhTWU5DKSA8PAorCQkJ IFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9QT0xBUklUWV9IU1lOQ19TSElGVCkpOworCXp5bnFtcF9k cF93cml0ZShkcCwgWllOUU1QX0RQX01BSU5fU1RSRUFNX0hTV0lEVEgsCisJCQltb2RlLT5oc3lu Y19lbmQgLSBtb2RlLT5oc3luY19zdGFydCk7CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBf RFBfTUFJTl9TVFJFQU1fVlNXSURUSCwKKwkJCW1vZGUtPnZzeW5jX2VuZCAtIG1vZGUtPnZzeW5j X3N0YXJ0KTsKKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9IUkVT LCBtb2RlLT5oZGlzcGxheSk7CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9T VFJFQU1fVlJFUywgbW9kZS0+dmRpc3BsYXkpOworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1Q X0RQX01BSU5fU1RSRUFNX0hTVEFSVCwKKwkJCW1vZGUtPmh0b3RhbCAtIG1vZGUtPmhzeW5jX3N0 YXJ0KTsKKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9WU1RBUlQs CisJCQltb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19zdGFydCk7CisKKwkvKiBJbiBzeW5jaHJv bm91cyBtb2RlLCBzZXQgdGhlIGRpdmllcnMgKi8KKwlpZiAoZHAtPmNvbmZpZy5taXNjMCAmIFpZ TlFNUF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9TWU5DX0xPQ0spIHsKKwkJcmVnID0gZHJtX2RwX2J3 X2NvZGVfdG9fbGlua19yYXRlKGRwLT5tb2RlLmJ3X2NvZGUpOworCQl6eW5xbXBfZHBfd3JpdGUo ZHAsIFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9OX1ZJRCwgcmVnKTsKKwkJenlucW1wX2RwX3dyaXRl KGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fTV9WSUQsIG1vZGUtPmNsb2NrKTsKKwkJcmF0ZSA9 IHp5bnFtcF9kaXNwX2dldF9hdWRpb19jbGtfcmF0ZShkcC0+ZHBzdWItPmRpc3ApOworCQlpZiAo cmF0ZSkgeworCQkJZGV2X2RiZyhkcC0+ZGV2LCAiQXVkaW8gcmF0ZTogJWRcbiIsIHJhdGUgLyA1 MTIpOworCQkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFhfTl9BVUQsIHJlZyk7CisJ CQl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9UWF9NX0FVRCwgcmF0ZSAvIDEwMDApOwor CQl9CisJfQorCisJLyogT25seSAyIGNoYW5uZWwgYXVkaW8gaXMgc3VwcG9ydGVkIG5vdyAqLwor CWlmICh6eW5xbXBfZGlzcF9hdWRpb19lbmFibGVkKGRwLT5kcHN1Yi0+ZGlzcCkpCisJCXp5bnFt cF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RYX0FVRElPX0NIQU5ORUxTLCAxKTsKKworCXp5bnFt cF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1VTRVJfUElYX1dJRFRILCAxKTsKKworCS8qIFRyYW5z bGF0ZSB0byB0aGUgbmF0aXZlIDE2IGJpdCBkYXRhcGF0aCBiYXNlZCBvbiBJUCBjb3JlIHNwZWMg Ki8KKwl3cGwgPSAobW9kZS0+aGRpc3BsYXkgKiBkcC0+Y29uZmlnLmJwcCArIDE1KSAvIDE2Owor CXJlZyA9IHdwbCArIHdwbCAlIGxhbmVfY250IC0gbGFuZV9jbnQ7CisJenlucW1wX2RwX3dyaXRl KGRwLCBaWU5RTVBfRFBfVVNFUl9EQVRBX0NPVU5UX1BFUl9MQU5FLCByZWcpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICogRFJNIENvbm5lY3RvcgorICovCisKK3N0YXRpYyBlbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzCit6eW5xbXBfZHBfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQoreworCXN0cnVjdCB6eW5xbXBf ZHAgKmRwID0gY29ubmVjdG9yX3RvX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IHp5bnFtcF9kcF9s aW5rX2NvbmZpZyAqbGlua19jb25maWcgPSAmZHAtPmxpbmtfY29uZmlnOworCXUzMiBzdGF0ZSwg aTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUaGlzIGlzIGZyb20gaGV1cmlzdGljLiBJdCB0YWtl cyBzb21lIGRlbGF5IChleCwgMTAwIH4gNTAwIG1zZWMpIHRvCisJICogZ2V0IHRoZSBIUEQgc2ln bmFsIHdpdGggc29tZSBtb25pdG9ycy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykg eworCQlzdGF0ZSA9IHp5bnFtcF9kcF9yZWFkKGRwLCBaWU5RTVBfRFBfSU5URVJSVVBUX1NJR05B TF9TVEFURSk7CisJCWlmIChzdGF0ZSAmIFpZTlFNUF9EUF9JTlRFUlJVUFRfU0lHTkFMX1NUQVRF X0hQRCkKKwkJCWJyZWFrOworCQltc2xlZXAoMTAwKTsKKwl9CisKKwlpZiAoc3RhdGUgJiBaWU5R TVBfRFBfSU5URVJSVVBUX1NJR05BTF9TVEFURV9IUEQpIHsKKwkJcmV0ID0gZHJtX2RwX2RwY2Rf cmVhZCgmZHAtPmF1eCwgMHgwLCBkcC0+ZHBjZCwKKwkJCQkgICAgICAgc2l6ZW9mKGRwLT5kcGNk KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZGJnKGRwLT5kZXYsICJEUENEIHJlYWQgZmFp bGVzIik7CisJCQlnb3RvIGRpc2Nvbm5lY3RlZDsKKwkJfQorCisJCWxpbmtfY29uZmlnLT5tYXhf cmF0ZSA9IG1pbl90KGludCwKKwkJCQkJICAgICAgZHJtX2RwX21heF9saW5rX3JhdGUoZHAtPmRw Y2QpLAorCQkJCQkgICAgICBEUF9ISUdIX0JJVF9SQVRFMik7CisJCWxpbmtfY29uZmlnLT5tYXhf bGFuZXMgPSBtaW5fdCh1OCwKKwkJCQkJICAgICAgIGRybV9kcF9tYXhfbGFuZV9jb3VudChkcC0+ ZHBjZCksCisJCQkJCSAgICAgICBkcC0+bnVtX2xhbmVzKTsKKworCQlkcC0+c3RhdHVzID0gY29u bmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5l Y3RlZDsKKwl9CisKK2Rpc2Nvbm5lY3RlZDoKKwlkcC0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1 c19kaXNjb25uZWN0ZWQ7CisJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwor fQorCitzdGF0aWMgaW50IHp5bnFtcF9kcF9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IHp5bnFtcF9kcCAqZHAgPSBjb25uZWN0 b3JfdG9fZHAoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZWRpZCAqZWRpZDsKKwlpbnQgcmV0OworCisJ ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsICZkcC0+YXV4LmRkYyk7CisJaWYgKCFlZGlk KQorCQlyZXR1cm4gMDsKKworCWRybV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29u bmVjdG9yLCBlZGlkKTsKKwlyZXQgPSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlk KTsKKwlrZnJlZShlZGlkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHJt X2VuY29kZXIgKgorenlucW1wX2RwX2Nvbm5lY3Rvcl9iZXN0X2VuY29kZXIoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IGNvbm5lY3Rv cl90b19kcChjb25uZWN0b3IpOworCisJcmV0dXJuICZkcC0+ZW5jb2RlcjsKK30KKworc3RhdGlj IGludCB6eW5xbXBfZHBfY29ubmVjdG9yX21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3RvciwKKwkJCQkJICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3sKKwlz dHJ1Y3QgenlucW1wX2RwICpkcCA9IGNvbm5lY3Rvcl90b19kcChjb25uZWN0b3IpOworCXU4IG1h eF9sYW5lcyA9IGRwLT5saW5rX2NvbmZpZy5tYXhfbGFuZXM7CisJdTggYnBwID0gZHAtPmNvbmZp Zy5icHA7CisJaW50IG1heF9yYXRlID0gZHAtPmxpbmtfY29uZmlnLm1heF9yYXRlOworCWludCBy YXRlOworCisJaWYgKG1vZGUtPmNsb2NrID4gWllOUU1QX01BWF9GUkVRKSB7CisJCWRldl9kYmco ZHAtPmRldiwgImZpbHRlcmVkIHRoZSBtb2RlLCAlcyxmb3IgaGlnaCBwaXhlbCByYXRlXG4iLAor CQkJbW9kZS0+bmFtZSk7CisJCWRybV9tb2RlX2RlYnVnX3ByaW50bW9kZWxpbmUobW9kZSk7CisJ CXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CisJfQorCisJLyogQ2hlY2sgd2l0aCBsaW5rIHJhdGUg YW5kIGxhbmUgY291bnQgKi8KKwlyYXRlID0genlucW1wX2RwX21heF9yYXRlKG1heF9yYXRlLCBt YXhfbGFuZXMsIGJwcCk7CisJaWYgKG1vZGUtPmNsb2NrID4gcmF0ZSkgeworCQlkZXZfZGJnKGRw LT5kZXYsICJmaWx0ZXJlZCB0aGUgbW9kZSwgJXMsZm9yIGhpZ2ggcGl4ZWwgcmF0ZVxuIiwKKwkJ CW1vZGUtPm5hbWUpOworCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKG1vZGUpOworCQly ZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCX0KKworCXJldHVybiBNT0RFX09LOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgenlucW1wX2RwX2Nvbm5lY3Rvcl9m dW5jcyA9IHsKKwkuZGV0ZWN0CQkJPSB6eW5xbXBfZHBfY29ubmVjdG9yX2RldGVjdCwKKwkuZmls bF9tb2RlcwkJPSBkcm1faGVscGVyX3Byb2JlX3NpbmdsZV9jb25uZWN0b3JfbW9kZXMsCisJLmRl c3Ryb3kJCT0gZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwLAorCS5hdG9taWNfZHVwbGljYXRlX3N0YXRl CT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSwKKwkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0 ZSwKKwkucmVzZXQJCQk9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKK307CisK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MKK3p5bnFtcF9k cF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzID0geworCS5nZXRfbW9kZXMJPSB6eW5xbXBfZHBfY29u bmVjdG9yX2dldF9tb2RlcywKKwkuYmVzdF9lbmNvZGVyCT0genlucW1wX2RwX2Nvbm5lY3Rvcl9i ZXN0X2VuY29kZXIsCisJLm1vZGVfdmFsaWQJPSB6eW5xbXBfZHBfY29ubmVjdG9yX21vZGVfdmFs aWQsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRFJNIEVuY29kZXIKKyAqLwor CitzdGF0aWMgdm9pZCB6eW5xbXBfZHBfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVy ICplbmNvZGVyKQoreworCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gZW5jb2Rlcl90b19kcChlbmNv ZGVyKTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKworCXBtX3J1bnRpbWVfZ2V0 X3N5bmMoZHAtPmRldik7CisJZHAtPmVuYWJsZWQgPSB0cnVlOworCXp5bnFtcF9kcF91cGRhdGVf bWlzYyhkcCk7CisJaWYgKHp5bnFtcF9kaXNwX2F1ZGlvX2VuYWJsZWQoZHAtPmRwc3ViLT5kaXNw KSkKKwkJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFhfQVVESU9fQ09OVFJPTCwgMSk7 CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFhfUEhZX1BPV0VSX0RPV04sIDApOwor CWlmIChkcC0+c3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkKSB7CisJCWZvciAo aSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYigmZHAtPmF1 eCwgRFBfU0VUX1BPV0VSLAorCQkJCQkJIERQX1NFVF9QT1dFUl9EMCk7CisJCQlpZiAocmV0ID09 IDEpCisJCQkJYnJlYWs7CisJCQl1c2xlZXBfcmFuZ2UoMzAwLCA1MDApOworCQl9CisJCS8qIFNv bWUgbW9uaXRvcnMgdGFrZSB0aW1lIHRvIHdha2UgdXAgcHJvcGVybHkgKi8KKwkJbXNsZWVwKHp5 bnFtcF9kcF9wb3dlcl9vbl9kZWxheV9tcyk7CisJfQorCWlmIChyZXQgIT0gMSkKKwkJZGV2X2Ri ZyhkcC0+ZGV2LCAiRFAgYXV4IGZhaWxlZFxuIik7CisJZWxzZQorCQl6eW5xbXBfZHBfdHJhaW5f bG9vcChkcCk7CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfU09GVFdBUkVfUkVTRVQs CisJCQlaWU5RTVBfRFBfU09GVFdBUkVfUkVTRVRfQUxMKTsKKwl6eW5xbXBfZHBfd3JpdGUoZHAs IFpZTlFNUF9EUF9NQUlOX1NUUkVBTV9FTkFCTEUsIDEpOworfQorCitzdGF0aWMgdm9pZCB6eW5x bXBfZHBfZW5jb2Rlcl9kaXNhYmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKK3sKKwlz dHJ1Y3QgenlucW1wX2RwICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisKKwlkcC0+ZW5h YmxlZCA9IGZhbHNlOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmRwLT5ocGRfd29yayk7CisJenlu cW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfTUFJTl9TVFJFQU1fRU5BQkxFLCAwKTsKKwlkcm1f ZHBfZHBjZF93cml0ZWIoJmRwLT5hdXgsIERQX1NFVF9QT1dFUiwgRFBfU0VUX1BPV0VSX0QzKTsK Kwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9UWF9QSFlfUE9XRVJfRE9XTiwKKwkJCVpZ TlFNUF9EUF9UWF9QSFlfUE9XRVJfRE9XTl9BTEwpOworCWlmICh6eW5xbXBfZGlzcF9hdWRpb19l bmFibGVkKGRwLT5kcHN1Yi0+ZGlzcCkpCisJCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQ X1RYX0FVRElPX0NPTlRST0wsIDApOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHAtPmRldik7Cit9 CisKK3N0YXRpYyB2b2lkCit6eW5xbXBfZHBfZW5jb2Rlcl9hdG9taWNfbW9kZV9zZXQoc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAorCQkJCSAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRj X3N0YXRlLAorCQkJCSAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5lY3Rvcl9zdGF0 ZSkKK3sKKwlzdHJ1Y3QgenlucW1wX2RwICpkcCA9IGVuY29kZXJfdG9fZHAoZW5jb2Rlcik7CisJ c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsKKwlzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZjcnRjX3N0YXRlLT5hZGp1c3Rl ZF9tb2RlOworCXU4IG1heF9sYW5lcyA9IGRwLT5saW5rX2NvbmZpZy5tYXhfbGFuZXM7CisJdTgg YnBwID0gZHAtPmNvbmZpZy5icHA7CisJaW50IHJhdGUsIG1heF9yYXRlID0gZHAtPmxpbmtfY29u ZmlnLm1heF9yYXRlOworCWludCByZXQ7CisKKwl6eW5xbXBfZHBfc2V0X2Zvcm1hdChkcCwgWllO UU1QX0RQU1VCX0ZPUk1BVF9SR0IsIDgpOworCisJLyogQ2hlY2sgYWdhaW4gYXMgYnBwIG9yIGZv cm1hdCBtaWdodCBoYXZlIGJlZW4gY2hhZ25lZCAqLworCXJhdGUgPSB6eW5xbXBfZHBfbWF4X3Jh dGUobWF4X3JhdGUsIG1heF9sYW5lcywgYnBwKTsKKwlpZiAobW9kZS0+Y2xvY2sgPiByYXRlKSB7 CisJCWRldl9lcnIoZHAtPmRldiwgInRoZSBtb2RlLCAlcyxoYXMgdG9vIGhpZ2ggcGl4ZWwgcmF0 ZVxuIiwKKwkJCW1vZGUtPm5hbWUpOworCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKG1v ZGUpOworCX0KKworCXJldCA9IHp5bnFtcF9kcF9tb2RlX2NvbmZpZ3VyZShkcCwgYWRqdXN0ZWRf bW9kZS0+Y2xvY2ssIDApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisKKwl6eW5xbXBfZHBf ZW5jb2Rlcl9tb2RlX3NldF90cmFuc2Zlcl91bml0KGRwLCBhZGp1c3RlZF9tb2RlKTsKKwl6eW5x bXBfZHBfZW5jb2Rlcl9tb2RlX3NldF9zdHJlYW0oZHAsIGFkanVzdGVkX21vZGUpOworfQorCisj ZGVmaW5lIFpZTlFNUF9EUF9NSU5fSF9CQUNLUE9SQ0gJMjAKKworc3RhdGljIGludAorenlucW1w X2RwX2VuY29kZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKKwkJ CSAgICAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCisJCQkgICAgICAgc3Ry dWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUpCit7CisJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm1vZGUgPSAmY3J0Y19zdGF0ZS0+bW9kZTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqYWRqdXN0ZWRfbW9kZSA9ICZjcnRjX3N0YXRlLT5hZGp1c3RlZF9tb2RlOworCWludCBk aWZmID0gbW9kZS0+aHRvdGFsIC0gbW9kZS0+aHN5bmNfZW5kOworCisJLyoKKwkgKiBaeW5xTVAg RFAgcmVxdWlyZXMgaG9yaXpvbnRhbCBiYWNrcG9yY2ggdG8gYmUgZ3JlYXRlciB0aGFuIDEyLgor CSAqIFRoaXMgbGltaXRhdGlvbiBtYXkgbm90IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgc2luayBk ZXZpY2UuCisJICovCisJaWYgKGRpZmYgPCBaWU5RTVBfRFBfTUlOX0hfQkFDS1BPUkNIKSB7CisJ CWludCB2cmVmcmVzaCA9IChhZGp1c3RlZF9tb2RlLT5jbG9jayAqIDEwMDApIC8KKwkJCSAgICAg ICAoYWRqdXN0ZWRfbW9kZS0+dnRvdGFsICogYWRqdXN0ZWRfbW9kZS0+aHRvdGFsKTsKKworCQlk ZXZfZGJnKGVuY29kZXItPmRldi0+ZGV2LCAiaGJhY2twb3JjaCBhZGp1c3RlZDogJWQgdG8gJWQi LAorCQkJZGlmZiwgWllOUU1QX0RQX01JTl9IX0JBQ0tQT1JDSCAtIGRpZmYpOworCQlkaWZmID0g WllOUU1QX0RQX01JTl9IX0JBQ0tQT1JDSCAtIGRpZmY7CisJCWFkanVzdGVkX21vZGUtPmh0b3Rh bCArPSBkaWZmOworCQlhZGp1c3RlZF9tb2RlLT5jbG9jayA9IGFkanVzdGVkX21vZGUtPnZ0b3Rh bCAqCisJCQkJICAgICAgIGFkanVzdGVkX21vZGUtPmh0b3RhbCAqIHZyZWZyZXNoIC8gMTAwMDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9m dW5jcyB6eW5xbXBfZHBfZW5jb2Rlcl9mdW5jcyA9IHsKKwkuZGVzdHJveQkJPSBkcm1fZW5jb2Rl cl9jbGVhbnVwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxwZXJf ZnVuY3MgenlucW1wX2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzID0geworCS5lbmFibGUJCQk9IHp5 bnFtcF9kcF9lbmNvZGVyX2VuYWJsZSwKKwkuZGlzYWJsZQkJPSB6eW5xbXBfZHBfZW5jb2Rlcl9k aXNhYmxlLAorCS5hdG9taWNfbW9kZV9zZXQJPSB6eW5xbXBfZHBfZW5jb2Rlcl9hdG9taWNfbW9k ZV9zZXQsCisJLmF0b21pY19jaGVjawkJPSB6eW5xbXBfZHBfZW5jb2Rlcl9hdG9taWNfY2hlY2ss Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSW50ZXJydXB0IEhhbmRsaW5nCisg Ki8KKworLyoqCisgKiB6eW5xbXBfZHBfZW5hYmxlX3ZibGFuayAtIEVuYWJsZSB2YmxhbmsKKyAq IEBkcDogRGlzcGxheVBvcnQgSVAgY29yZSBzdHJ1Y3R1cmUKKyAqCisgKiBFbmFibGUgdmJsYW5r IGludGVycnVwdAorICovCit2b2lkIHp5bnFtcF9kcF9lbmFibGVfdmJsYW5rKHN0cnVjdCB6eW5x bXBfZHAgKmRwKQoreworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0lOVF9FTiwgWllO UU1QX0RQX0lOVF9WQkxBTktfU1RBUlQpOworfQorCisvKioKKyAqIHp5bnFtcF9kcF9kaXNhYmxl X3ZibGFuayAtIERpc2FibGUgdmJsYW5rCisgKiBAZHA6IERpc3BsYXlQb3J0IElQIGNvcmUgc3Ry dWN0dXJlCisgKgorICogRGlzYWJsZSB2YmxhbmsgaW50ZXJydXB0CisgKi8KK3ZvaWQgenlucW1w X2RwX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCB6eW5xbXBfZHAgKmRwKQoreworCXp5bnFtcF9kcF93 cml0ZShkcCwgWllOUU1QX0RQX0lOVF9EUywgWllOUU1QX0RQX0lOVF9WQkxBTktfU1RBUlQpOwor fQorCitzdGF0aWMgdm9pZCB6eW5xbXBfZHBfaHBkX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1 Y3QgKndvcmspCit7CisJc3RydWN0IHp5bnFtcF9kcCAqZHA7CisKKwlkcCA9IGNvbnRhaW5lcl9v Zih3b3JrLCBzdHJ1Y3QgenlucW1wX2RwLCBocGRfd29yay53b3JrKTsKKworCWlmIChkcC0+ZHJt KQorCQlkcm1faGVscGVyX2hwZF9pcnFfZXZlbnQoZHAtPmRybSk7Cit9CisKK3N0YXRpYyBpcnFy ZXR1cm5fdCB6eW5xbXBfZHBfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlz dHJ1Y3QgenlucW1wX2RwICpkcCA9IChzdHJ1Y3QgenlucW1wX2RwICopZGF0YTsKKwl1MzIgc3Rh dHVzLCBtYXNrOworCisJc3RhdHVzID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9JTlRf U1RBVFVTKTsKKwltYXNrID0genlucW1wX2RwX3JlYWQoZHAsIFpZTlFNUF9EUF9JTlRfTUFTSyk7 CisJaWYgKCEoc3RhdHVzICYgfm1hc2spKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBkYmcg Zm9yIGRpYWdub3N0aWMsIGJ1dCBub3QgbXVjaCB0aGF0IHRoZSBkcml2ZXIgY2FuIGRvICovCisJ aWYgKHN0YXR1cyAmIFpZTlFNUF9EUF9JTlRfQ0hCVUZfVU5ERVJGTFdfTUFTSykKKwkJZGV2X2Ri Z19yYXRlbGltaXRlZChkcC0+ZGV2LCAidW5kZXJmbG93IGludGVycnVwdFxuIik7CisJaWYgKHN0 YXR1cyAmIFpZTlFNUF9EUF9JTlRfQ0hCVUZfT1ZFUkZMV19NQVNLKQorCQlkZXZfZGJnX3JhdGVs aW1pdGVkKGRwLT5kZXYsICJvdmVyZmxvdyBpbnRlcnJ1cHRcbiIpOworCisJenlucW1wX2RwX3dy aXRlKGRwLCBaWU5RTVBfRFBfSU5UX1NUQVRVUywgc3RhdHVzKTsKKworCWlmIChzdGF0dXMgJiBa WU5RTVBfRFBfSU5UX1ZCTEFOS19TVEFSVCkKKwkJenlucW1wX2Rpc3BfaGFuZGxlX3ZibGFuayhk cC0+ZHBzdWItPmRpc3ApOworCisJaWYgKHN0YXR1cyAmIFpZTlFNUF9EUF9JTlRfSFBEX0VWRU5U KQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRwLT5ocGRfd29yaywgMCk7CisKKwlpZiAoc3Rh dHVzICYgWllOUU1QX0RQX0lOVF9IUERfSVJRKSB7CisJCWludCByZXQ7CisJCXU4IHN0YXR1c1tE UF9MSU5LX1NUQVRVU19TSVpFICsgMl07CisKKwkJcmV0ID0gZHJtX2RwX2RwY2RfcmVhZCgmZHAt PmF1eCwgRFBfU0lOS19DT1VOVCwgc3RhdHVzLAorCQkJCSAgICAgICBEUF9MSU5LX1NUQVRVU19T SVpFICsgMik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBoYW5kbGVkOworCisJCWlmIChzdGF0 dXNbNF0gJiBEUF9MSU5LX1NUQVRVU19VUERBVEVEIHx8CisJCSAgICAhZHJtX2RwX2Nsb2NrX3Jl Y292ZXJ5X29rKCZzdGF0dXNbMl0sIGRwLT5tb2RlLmxhbmVfY250KSB8fAorCQkgICAgIWRybV9k cF9jaGFubmVsX2VxX29rKCZzdGF0dXNbMl0sIGRwLT5tb2RlLmxhbmVfY250KSkgeworCQkJenlu cW1wX2RwX3RyYWluX2xvb3AoZHApOworCQl9CisJfQorCitoYW5kbGVkOgorCXJldHVybiBJUlFf SEFORExFRDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEluaXRpYWxpemF0aW9u ICYgQ2xlYW51cAorICovCisKK2ludCB6eW5xbXBfZHBfaW5pdChzdHJ1Y3QgenlucW1wX2Rwc3Vi ICpkcHN1Yiwgc3RydWN0IGRybV9kZXZpY2UgKmRybSkKK3sKKwlzdHJ1Y3QgenlucW1wX2RwICpk cCA9IGRwc3ViLT5kcDsKKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSAmZHAtPmVuY29k ZXI7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZkcC0+Y29ubmVjdG9yOwor CWludCByZXQ7CisKKwlkcC0+ZHJtID0gZHJtOworCWRwLT5jb25maWcubWlzYzAgJj0gflpZTlFN UF9EUF9NQUlOX1NUUkVBTV9NSVNDMF9TWU5DX0xPQ0s7CisJenlucW1wX2RwX3NldF9mb3JtYXQo ZHAsIFpZTlFNUF9EUFNVQl9GT1JNQVRfUkdCLCA4KTsKKworCS8qIENyZWF0ZSB0aGUgRFJNIGVu Y29kZXIgYW5kIGNvbm5lY3Rvci4gKi8KKwllbmNvZGVyLT5wb3NzaWJsZV9jcnRjcyB8PSB6eW5x bXBfZGlzcF9nZXRfY3J0Y19tYXNrKGRwc3ViLT5kaXNwKTsKKwlkcm1fZW5jb2Rlcl9pbml0KGRy bSwgZW5jb2RlciwgJnp5bnFtcF9kcF9lbmNvZGVyX2Z1bmNzLAorCQkJIERSTV9NT0RFX0VOQ09E RVJfVE1EUywgTlVMTCk7CisJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmenlucW1w X2RwX2VuY29kZXJfaGVscGVyX2Z1bmNzKTsKKworCWNvbm5lY3Rvci0+cG9sbGVkID0gRFJNX0NP Tk5FQ1RPUl9QT0xMX0hQRDsKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZW5jb2Rlci0+ZGV2 LCBjb25uZWN0b3IsCisJCQkJICZ6eW5xbXBfZHBfY29ubmVjdG9yX2Z1bmNzLAorCQkJCSBEUk1f TU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkcC0+ ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgRFJNIGNvbm5lY3RvclxuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJnp5bnFtcF9k cF9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKKwlkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKGNvbm5l Y3Rvcik7CisJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIp OworCisJLyogSW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhlIEFVWCBhZGFwdGVyLiAqLworCXJl dCA9IHp5bnFtcF9kcF9hdXhfaW5pdChkcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRwLT5k ZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBEUCBhdXhcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCS8qIE5vdyB0aGF0IGluaXRpYWxpc2F0aW9uIGlzIGNvbXBsZXRlLCBlbmFibGUgaW50ZXJy dXB0cy4gKi8KKwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9JTlRfRU4sIFpZTlFNUF9E UF9JTlRfQUxMKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHp5bnFtcF9kcF9jbGVhbnVwKHN0 cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViKQoreworCXN0cnVjdCB6eW5xbXBfZHAgKmRwID0gZHBz dWItPmRwOworCisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfSU5UX0RTLCBaWU5RTVBf RFBfSU5UX0FMTCk7CisJZGlzYWJsZV9pcnEoZHAtPmlycSk7CisKKwljYW5jZWxfZGVsYXllZF93 b3JrX3N5bmMoJmRwLT5ocGRfd29yayk7CisJenlucW1wX2RwX2F1eF9jbGVhbnVwKGRwKTsKK30K KworaW50IHp5bnFtcF9kcF9wcm9iZShzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1Yiwgc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgenlucW1wX2RwICpkcDsKKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJZHAgPSBkZXZtX2t6YWxsb2MoJnBkZXYt PmRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOworCWlmICghZHApCisJCXJldHVybiAtRU5P TUVNOworCisJZHAtPmRldiA9ICZwZGV2LT5kZXY7CisJZHAtPmRwc3ViID0gZHBzdWI7CisJZHAt PnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCisJSU5JVF9ERUxBWUVE X1dPUksoJmRwLT5ocGRfd29yaywgenlucW1wX2RwX2hwZF93b3JrX2Z1bmMpOworCisJLyogQWNx dWlyZSBhbGwgcmVzb3VyY2VzIChJT01FTSwgSVJRIGFuZCBQSFlzKS4gKi8KKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZHAiKTsKKwlk cC0+aW9tZW0gPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZHAtPmRldiwgcmVzKTsKKwlpZiAoSVNf RVJSKGRwLT5pb21lbSkpCisJCXJldHVybiBQVFJfRVJSKGRwLT5pb21lbSk7CisKKwlkcC0+aXJx ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoZHAtPmlycSA8IDApCisJCXJldHVy biBkcC0+aXJxOworCisJZHAtPnJlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldCgmcGRldi0+ ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRwLT5yZXNldCkpIHsKKwkJaWYgKFBUUl9FUlIoZHAt PnJlc2V0KSAhPSAtRVBST0JFX0RFRkVSKQorCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVk IHRvIGdldCByZXNldDogJWxkXG4iLAorCQkJCVBUUl9FUlIoZHAtPnJlc2V0KSk7CisJCXJldHVy biBQVFJfRVJSKGRwLT5yZXNldCk7CisJfQorCisJcmV0ID0genlucW1wX2RwX3BoeV9wcm9iZShk cCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEluaXRpYWxpemUgdGhlIGhhcmR3 YXJlLiAqLworCXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX1RYX1BIWV9QT1dFUl9ET1dO LAorCQkJWllOUU1QX0RQX1RYX1BIWV9QT1dFUl9ET1dOX0FMTCk7CisJenlucW1wX2RwX3NldChk cCwgWllOUU1QX0RQX1BIWV9SRVNFVCwgWllOUU1QX0RQX1BIWV9SRVNFVF9BTExfUkVTRVQpOwor CXp5bnFtcF9kcF93cml0ZShkcCwgWllOUU1QX0RQX0ZPUkNFX1NDUkFNQkxFUl9SRVNFVCwgMSk7 CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFJBTlNNSVRURVJfRU5BQkxFLCAwKTsK Kwl6eW5xbXBfZHBfd3JpdGUoZHAsIFpZTlFNUF9EUF9JTlRfRFMsIDB4ZmZmZmZmZmYpOworCisJ cmV0ID0genlucW1wX2RwX3BoeV9pbml0KGRwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0Owor CisJenlucW1wX2RwX3dyaXRlKGRwLCBaWU5RTVBfRFBfVFJBTlNNSVRURVJfRU5BQkxFLCAxKTsK KworCS8qCisJICogTm93IHRoYXQgdGhlIGhhcmR3YXJlIGlzIGluaXRpYWxpemVkIGFuZCB3b24n dCBnZW5lcmF0ZSBzcHVyaW91cworCSAqIGludGVycnVwdHMsIHJlcXVlc3QgdGhlIElSUS4KKwkg Ki8KKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRwLT5kZXYsIGRwLT5pcnEsIE5V TEwsCisJCQkJCXp5bnFtcF9kcF9pcnFfaGFuZGxlciwgSVJRRl9PTkVTSE9ULAorCQkJCQlkZXZf bmFtZShkcC0+ZGV2KSwgZHApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yX3BoeTsKKwor CWRwc3ViLT5kcCA9IGRwOworCisJZGV2X2RiZyhkcC0+ZGV2LCAiWnlucU1QIERpc3BsYXlQb3J0 IFR4IHByb2JlZCB3aXRoICV1IGxhbmVzXG4iLAorCQlkcC0+bnVtX2xhbmVzKTsKKworCXJldHVy biAwOworCitlcnJvcl9waHk6CisJenlucW1wX2RwX3BoeV9leGl0KGRwKTsKKwlyZXR1cm4gcmV0 OworfQorCit2b2lkIHp5bnFtcF9kcF9yZW1vdmUoc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIp Cit7CisJc3RydWN0IHp5bnFtcF9kcCAqZHAgPSBkcHN1Yi0+ZHA7CisKKwl6eW5xbXBfZHBfd3Jp dGUoZHAsIFpZTlFNUF9EUF9UUkFOU01JVFRFUl9FTkFCTEUsIDApOworCXp5bnFtcF9kcF93cml0 ZShkcCwgWllOUU1QX0RQX0lOVF9EUywgMHhmZmZmZmZmZik7CisKKwl6eW5xbXBfZHBfcGh5X2V4 aXQoZHApOworCWRwc3ViLT5kcCA9IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0veGxueC96eW5xbXBfZHAuaCBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcC5oCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNWU3NThkMmI3NmIwCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngvenlucW1wX2RwLmgKQEAgLTAsMCAr MSwyOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBa eW5xTVAgRGlzcGxheVBvcnQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAx OSBYaWxpbngsIEluYy4KKyAqCisgKiBBdXRob3JzOgorICogLSBIeXVuIFdvbyBLd29uIDxoeXVu Lmt3b25AeGlsaW54LmNvbT4KKyAqIC0gTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFy dEBpZGVhc29uYm9hcmQuY29tPgorICovCisKKyNpZm5kZWYgX1pZTlFNUF9EUF9IXworI2RlZmlu ZSBfWllOUU1QX0RQX0hfCisKK3N0cnVjdCBkcm1fZGV2aWNlOworc3RydWN0IHBsYXRmb3JtX2Rl dmljZTsKK3N0cnVjdCB6eW5xbXBfZHA7CitzdHJ1Y3QgenlucW1wX2Rwc3ViOworCit2b2lkIHp5 bnFtcF9kcF9lbmFibGVfdmJsYW5rKHN0cnVjdCB6eW5xbXBfZHAgKmRwKTsKK3ZvaWQgenlucW1w X2RwX2Rpc2FibGVfdmJsYW5rKHN0cnVjdCB6eW5xbXBfZHAgKmRwKTsKKworaW50IHp5bnFtcF9k cF9pbml0KHN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViLCBzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KTsKK3ZvaWQgenlucW1wX2RwX2NsZWFudXAoc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIpOwor CitpbnQgenlucW1wX2RwX3Byb2JlKHN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViLCBzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3ZvaWQgenlucW1wX2RwX3JlbW92ZShzdHJ1Y3Qgenlu cW1wX2Rwc3ViICpkcHN1Yik7CisKKyNlbmRpZiAvKiBfWllOUU1QX0RQX0hfICovCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC96eW5xbXBfZHBzdWIuYyBiL2RyaXZlcnMvZ3B1L2Ry bS94bG54L3p5bnFtcF9kcHN1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMjIzNTc2MWM0ZWQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3hs bngvenlucW1wX2Rwc3ViLmMKQEAgLTAsMCArMSwzMzAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wCisvKgorICogWnlucU1QIERpc3BsYXlQb3J0IFN1YnN5c3RlbSBEcml2 ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE5IFhpbGlueCwgSW5jLgorICoKKyAq IEF1dGhvcnM6CisgKiAtIEh5dW4gV29vIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgorICog LSBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cisg Ki8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5n Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2 ZWRfbWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8 bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgor I2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2Mu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX2NvbmZp Zy5oPgorI2luY2x1ZGUgPGRybS9kcm1fcHJvYmVfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2Ry bV92YmxhbmsuaD4KKworI2luY2x1ZGUgInp5bnFtcF9kaXNwLmgiCisjaW5jbHVkZSAienlucW1w X2RwLmgiCisjaW5jbHVkZSAienlucW1wX2Rwc3ViLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKiBEdW1iIEJ1ZmZlciAmIEZyYW1lYnVmZmVyIEFsbG9jYXRpb24KKyAqLworCitzdGF0 aWMgaW50IHp5bnFtcF9kcHN1Yl9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp diwKKwkJCQkgICAgc3RydWN0IGRybV9kZXZpY2UgKmRybSwKKwkJCQkgICAgc3RydWN0IGRybV9t b2RlX2NyZWF0ZV9kdW1iICphcmdzKQoreworCXN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViID0g ZHJtLT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgcGl0Y2ggPSBESVZfUk9VTkRfVVAoYXJn cy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOworCisJLyogRW5mb3JjZSB0aGUgYWxpZ25tZW50IGNv bnN0cmFpbnRzIG9mIHRoZSBETUEgZW5naW5lLiAqLworCWFyZ3MtPnBpdGNoID0gQUxJR04ocGl0 Y2gsIGRwc3ViLT5kbWFfYWxpZ24pOworCisJcmV0dXJuIGRybV9nZW1fY21hX2R1bWJfY3JlYXRl X2ludGVybmFsKGZpbGVfcHJpdiwgZHJtLCBhcmdzKTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1f ZnJhbWVidWZmZXIgKgorenlucW1wX2Rwc3ViX2ZiX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBk cm1fbW9kZV9mYl9jbWQyICptb2RlX2NtZCkKK3sKKwlzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1 YiA9IGRybS0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9tb2RlX2ZiX2NtZDIgY21kID0gKm1v ZGVfY21kOworCXVuc2lnbmVkIGludCBpOworCisJLyogRW5mb3JjZSB0aGUgYWxpZ25tZW50IGNv bnN0cmFpbnRzIG9mIHRoZSBETUEgZW5naW5lLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T SVpFKGNtZC5waXRjaGVzKTsgKytpKQorCQljbWQucGl0Y2hlc1tpXSA9IEFMSUdOKGNtZC5waXRj aGVzW2ldLCBkcHN1Yi0+ZG1hX2FsaWduKTsKKworCXJldHVybiBkcm1fZ2VtX2ZiX2NyZWF0ZShk cm0sIGZpbGVfcHJpdiwgJmNtZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX21vZGVf Y29uZmlnX2Z1bmNzIHp5bnFtcF9kcHN1Yl9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKKwkuZmJfY3Jl YXRlCQk9IHp5bnFtcF9kcHN1Yl9mYl9jcmVhdGUsCisJLmF0b21pY19jaGVjawkJPSBkcm1fYXRv bWljX2hlbHBlcl9jaGVjaywKKwkuYXRvbWljX2NvbW1pdAkJPSBkcm1fYXRvbWljX2hlbHBlcl9j b21taXQsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRFJNL0tNUyBEcml2ZXIK KyAqLworCitERUZJTkVfRFJNX0dFTV9DTUFfRk9QUyh6eW5xbXBfZHBzdWJfZHJtX2ZvcHMpOwor CitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgenlucW1wX2Rwc3ViX2RybV9kcml2ZXIgPSB7CisJ LmRyaXZlcl9mZWF0dXJlcwkJPSBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9HRU0gfAorCQkJCQkg IERSSVZFUl9BVE9NSUMsCisKKwkucHJpbWVfaGFuZGxlX3RvX2ZkCQk9IGRybV9nZW1fcHJpbWVf aGFuZGxlX3RvX2ZkLAorCS5wcmltZV9mZF90b19oYW5kbGUJCT0gZHJtX2dlbV9wcmltZV9mZF90 b19oYW5kbGUsCisJLmdlbV9wcmltZV9leHBvcnQJCT0gZHJtX2dlbV9wcmltZV9leHBvcnQsCisJ LmdlbV9wcmltZV9pbXBvcnQJCT0gZHJtX2dlbV9wcmltZV9pbXBvcnQsCisJLmdlbV9wcmltZV9n ZXRfc2dfdGFibGUJCT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAorCS5nZW1fcHJp bWVfaW1wb3J0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAor CS5nZW1fcHJpbWVfdm1hcAkJCT0gZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCwKKwkuZ2VtX3ByaW1l X3Z1bm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsCisJLmdlbV9wcmltZV9tbWFwCQkJ PSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAorCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQJPSBk cm1fZ2VtX2NtYV9mcmVlX29iamVjdCwKKwkuZ2VtX3ZtX29wcwkJCT0gJmRybV9nZW1fY21hX3Zt X29wcywKKwkuZHVtYl9jcmVhdGUJCQk9IHp5bnFtcF9kcHN1Yl9kdW1iX2NyZWF0ZSwKKwkuZHVt Yl9kZXN0cm95CQkJPSBkcm1fZ2VtX2R1bWJfZGVzdHJveSwKKworCS5mb3BzCQkJCT0gJnp5bnFt cF9kcHN1Yl9kcm1fZm9wcywKKworCS5uYW1lCQkJCT0gInp5bnFtcC1kcHN1YiIsCisJLmRlc2MJ CQkJPSAiWGlsaW54IERpc3BsYXlQb3J0IFN1YnN5c3RlbSBEcml2ZXIiLAorCS5kYXRlCQkJCT0g IjIwMTMwNTA5IiwKKwkubWFqb3IJCQkJPSAxLAorCS5taW5vcgkJCQk9IDAsCit9OworCitzdGF0 aWMgdm9pZCB6eW5xbXBfZHBzdWJfZHJtX2NsZWFudXAoc3RydWN0IHp5bnFtcF9kcHN1YiAqZHBz dWIpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IGRwc3ViLT5kcm07CisKKwlkcm1fZGV2 X3VucmVnaXN0ZXIoZHJtKTsKKworCXp5bnFtcF9kcF9jbGVhbnVwKGRwc3ViKTsKKworCWRybV9r bXNfaGVscGVyX3BvbGxfZmluaShkcm0pOworCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7 CisKKwlkcm1fZGV2X3B1dChkcm0pOworfQorCitzdGF0aWMgaW50IHp5bnFtcF9kcHN1Yl9kcm1f aW5pdChzdHJ1Y3QgenlucW1wX2Rwc3ViICpkcHN1YikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtOworCWludCByZXQ7CisKKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZ6eW5xbXBfZHBzdWJfZHJt X2RyaXZlciwgZHBzdWItPmRldik7CisJaWYgKElTX0VSUihkcm0pKQorCQlyZXR1cm4gUFRSX0VS Uihkcm0pOworCisJZHBzdWItPmRybSA9IGRybTsKKwlkcm0tPmRldl9wcml2YXRlID0gZHBzdWI7 CisKKwkvKiBJbml0aWFsaXplIG1vZGUgY29uZmlnLCB2YmxhbmsgYW5kIHRoZSBLTVMgcG9sbCBo ZWxwZXIuICovCisJZHJtX21vZGVfY29uZmlnX2luaXQoZHJtKTsKKworCWRybS0+bW9kZV9jb25m aWcuZnVuY3MgPSAmenlucW1wX2Rwc3ViX21vZGVfY29uZmlnX2Z1bmNzOworCWRybS0+bW9kZV9j b25maWcubWluX3dpZHRoID0gMDsKKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSAwOwor CWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gWllOUU1QX0RJU1BfTUFYX1dJRFRIOworCWRy bS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9IFpZTlFNUF9ESVNQX01BWF9IRUlHSFQ7CisKKwly ZXQgPSBkcm1fdmJsYW5rX2luaXQoZHJtLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9tb2Rl X2NvbmZpZ19jbGVhbnVwOworCisJZHJtLT5pcnFfZW5hYmxlZCA9IDE7CisKKwlkcm1fa21zX2hl bHBlcl9wb2xsX2luaXQoZHJtKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgRElTUCBhbmQg RFAgY29tcG9uZW50cy4gVGhpcyB3aWxsIGNyZWF0ZXMgcGxhbmVzLAorCSAqIENSVEMsIGVuY29k ZXIgYW5kIGNvbm5lY3Rvci4gVGhlIERJU1Agc2hvdWxkIGJlIGluaXRpYWxpemVkIGZpcnN0IGFz CisJICogdGhlIERQIGVuY29kZXIgbmVlZHMgdGhlIENSVEMuCisJICovCisJcmV0ID0genlucW1w X2Rpc3BfaW5pdChkcHN1YiwgZHJtKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wb2xsX2Zpbmk7 CisKKwlyZXQgPSB6eW5xbXBfZHBfaW5pdChkcHN1YiwgZHJtKTsKKwlpZiAocmV0KQorCQlnb3Rv IGVycl9wb2xsX2Zpbmk7CisKKwlkbWFfc2V0X21hc2soZHBzdWItPmRldiwgRE1BX0JJVF9NQVNL KFpZTlFNUF9ESVNQX01BWF9ETUFfQklUKSk7CisKKwkvKiBSZXNldCBhbGwgY29tcG9uZW50cyBh bmQgcmVnaXN0ZXIgdGhlIERSTSBkZXZpY2UuICovCisJZHJtX21vZGVfY29uZmlnX3Jlc2V0KGRy bSk7CisKKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7CisJaWYgKHJldCA8IDApCisJ CWdvdG8gZXJyX2RwX2NsZWFudXA7CisKKwkvKgorCSAqIEluaXRpYWxpemUgZmJkZXYgZ2VuZXJp YyBlbXVsYXRpb24uIEZhaWx1cmVzIGFyZSBub3QgZmF0YWwgYXMgdGhlCisJICogRFJNL0tNUyBk ZXZpY2UgaXMgc3RpbGwgdXNhYmxlIHdpdGhvdXQgZW11bGF0aW9uIHN1cHBvcnQuCisJICovCisJ cmV0ID0gZHJtX2ZiZGV2X2dlbmVyaWNfc2V0dXAoZHJtLCAyNCk7CisJaWYgKHJldCA8IDApCisJ CWRldl9lcnIoZHBzdWItPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZiZGV2IGVtdWxhdGlv blxuIik7CisKKwlyZXR1cm4gMDsKKworZXJyX2RwX2NsZWFudXA6CisJenlucW1wX2RwX2NsZWFu dXAoZHBzdWIpOworZXJyX3BvbGxfZmluaToKKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJt KTsKK2Vycl9tb2RlX2NvbmZpZ19jbGVhbnVwOgorCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRy bSk7CisJZHJtX2Rldl9wdXQoZHJtKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICogUG93ZXIgTWFuYWdlbWVudAorICovCisKK3N0YXRpYyBpbnQgX19tYXli ZV91bnVzZWQgenlucW1wX2Rwc3ViX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0 cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1 cm4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9zdXNwZW5kKGRwc3ViLT5kcm0pOworfQorCitzdGF0 aWMgaW50IF9fbWF5YmVfdW51c2VkIHp5bnFtcF9kcHN1Yl9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQoreworCXN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViID0gZGV2X2dldF9kcnZkYXRhKGRl dik7CisKKwlyZXR1cm4gZHJtX21vZGVfY29uZmlnX2hlbHBlcl9yZXN1bWUoZHBzdWItPmRybSk7 Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB6eW5xbXBfZHBzdWJfcG1fb3Bz ID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHp5bnFtcF9kcHN1Yl9zdXNwZW5kLCB6eW5x bXBfZHBzdWJfcmVzdW1lKQorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFByb2Jl ICYgUmVtb3ZlCisgKi8KKworc3RhdGljIGludCB6eW5xbXBfZHBzdWJfaW5pdF9jbG9ja3Moc3Ry dWN0IHp5bnFtcF9kcHN1YiAqZHBzdWIpCit7CisJaW50IHJldDsKKworCWRwc3ViLT5hcGJfY2xr ID0gZGV2bV9jbGtfZ2V0KGRwc3ViLT5kZXYsICJkcF9hcGJfY2xrIik7CisJaWYgKElTX0VSUihk cHN1Yi0+YXBiX2NsaykpCisJCXJldHVybiBQVFJfRVJSKGRwc3ViLT5hcGJfY2xrKTsKKworCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShkcHN1Yi0+YXBiX2Nsayk7CisJaWYgKHJldCkgeworCQlk ZXZfZXJyKGRwc3ViLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIHRoZSBBUEIgY2xvY2tcbiIpOwor CQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHp5bnFtcF9k cHN1Yl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB6eW5x bXBfZHBzdWIgKmRwc3ViOworCWludCByZXQ7CisKKwlkcHN1YiA9IGRldm1fa3phbGxvYygmcGRl di0+ZGV2LCBzaXplb2YoKmRwc3ViKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcHN1YikKKwkJcmV0 dXJuIC1FTk9NRU07CisKKwlkcHN1Yi0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRf ZHJ2ZGF0YShwZGV2LCBkcHN1Yik7CisKKwkvKiBUcnkgdGhlIHJlc2VydmVkIG1lbW9yeS4gUHJv Y2VlZCBpZiB0aGVyZSdzIG5vbmUuICovCisJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9pbml0KCZw ZGV2LT5kZXYpOworCisJcmV0ID0genlucW1wX2Rwc3ViX2luaXRfY2xvY2tzKGRwc3ViKTsKKwlp ZiAocmV0IDwgMCkKKwkJZ290byBlcnJfbWVtOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYt PmRldik7CisKKwkvKgorCSAqIERQIHNob3VsZCBiZSBwcm9iZWQgZmlyc3Qgc28gdGhhdCB0aGUg enlucW1wX2Rpc3AgY2FuIHNldCB0aGUgb3V0cHV0CisJICogZm9ybWF0IGFjY29yZGluZ2x5Lgor CSAqLworCXJldCA9IHp5bnFtcF9kcF9wcm9iZShkcHN1YiwgcGRldik7CisJaWYgKHJldCkKKwkJ Z290byBlcnJfcG07CisKKwlyZXQgPSB6eW5xbXBfZGlzcF9wcm9iZShkcHN1YiwgcGRldik7CisJ aWYgKHJldCkKKwkJZ290byBlcnJfZHA7CisKKwlyZXQgPSB6eW5xbXBfZHBzdWJfZHJtX2luaXQo ZHBzdWIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2Rpc3A7CisKKwlkZXZfaW5mbygmcGRldi0+ ZGV2LCAiWnlucU1QIERpc3BsYXlQb3J0IFN1YnN5c3RlbSBkcml2ZXIgcHJvYmVkIik7CisKKwly ZXR1cm4gMDsKKworZXJyX2Rpc3A6CisJenlucW1wX2Rpc3BfcmVtb3ZlKGRwc3ViKTsKK2Vycl9k cDoKKwl6eW5xbXBfZHBfcmVtb3ZlKGRwc3ViKTsKK2Vycl9wbToKKwlwbV9ydW50aW1lX2Rpc2Fi bGUoJnBkZXYtPmRldik7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRwc3ViLT5hcGJfY2xrKTsK K2Vycl9tZW06CisJb2ZfcmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKCZwZGV2LT5kZXYpOwor CXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgenlucW1wX2Rwc3ViX3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB6eW5xbXBfZHBzdWIgKmRwc3ViID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl6eW5xbXBfZHBzdWJfZHJtX2NsZWFudXAo ZHBzdWIpOworCisJenlucW1wX2Rpc3BfcmVtb3ZlKGRwc3ViKTsKKwl6eW5xbXBfZHBfcmVtb3Zl KGRwc3ViKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoZHBzdWItPmFwYl9jbGspOworCW9mX3Jlc2VydmVkX21lbV9kZXZpY2VfcmVs ZWFzZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB6eW5xbXBf ZHBzdWJfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qg enlucW1wX2Rwc3ViICpkcHN1YiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHJt X2F0b21pY19oZWxwZXJfc2h1dGRvd24oZHBzdWItPmRybSk7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp5bnFtcF9kcHN1Yl9vZl9tYXRjaFtdID0geworCXsgLmNvbXBh dGlibGUgPSAieGxueCx6eW5xbXAtZHBzdWItMS43IiwgfSwKKwl7IC8qIGVuZCBvZiB0YWJsZSAq LyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHp5bnFtcF9kcHN1Yl9vZl9tYXRjaCk7 CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHp5bnFtcF9kcHN1Yl9kcml2ZXIgPSB7 CisJLnByb2JlCQkJPSB6eW5xbXBfZHBzdWJfcHJvYmUsCisJLnJlbW92ZQkJCT0genlucW1wX2Rw c3ViX3JlbW92ZSwKKwkuc2h1dGRvd24JCT0genlucW1wX2Rwc3ViX3NodXRkb3duLAorCS5kcml2 ZXIJCQk9IHsKKwkJLm5hbWUJCT0gInp5bnFtcC1kcHN1YiIsCisJCS5wbQkJPSAmenlucW1wX2Rw c3ViX3BtX29wcywKKwkJLm9mX21hdGNoX3RhYmxlCT0genlucW1wX2Rwc3ViX29mX21hdGNoLAor CX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHp5bnFtcF9kcHN1Yl9kcml2ZXIpOwor CitNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiWnlu cU1QIERQIFN1YnN5c3RlbSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3p5bnFtcF9kcHN1Yi5oIGIvZHJpdmVycy9n cHUvZHJtL3hsbngvenlucW1wX2Rwc3ViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi43MzJmMjliZGE4ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9k cm0veGxueC96eW5xbXBfZHBzdWIuaApAQCAtMCwwICsxLDQ5IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIFp5bnFNUCBEUFNVQiBTdWJzeXN0ZW0gRHJp dmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3IC0gMjAxOSBYaWxpbngsIEluYy4KKyAqCisg KiBBdXRob3JzOgorICogLSBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KKyAq IC0gTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgor ICovCisKKyNpZm5kZWYgX1pZTlFNUF9EUFNVQl9IXworI2RlZmluZSBfWllOUU1QX0RQU1VCX0hf CisKK3N0cnVjdCBjbGs7CitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRybV9kZXZpY2U7CitzdHJ1 Y3QgenlucW1wX2Rpc3A7CitzdHJ1Y3QgenlucW1wX2RwOworCitlbnVtIHp5bnFtcF9kcHN1Yl9m b3JtYXQgeworCVpZTlFNUF9EUFNVQl9GT1JNQVRfUkdCLAorCVpZTlFNUF9EUFNVQl9GT1JNQVRf WUNSQ0I0NDQsCisJWllOUU1QX0RQU1VCX0ZPUk1BVF9ZQ1JDQjQyMiwKKwlaWU5RTVBfRFBTVUJf Rk9STUFUX1lPTkxZLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgenlucW1wX2Rwc3ViIC0gWnlucU1Q IERpc3BsYXlQb3J0IFN1YnN5c3RlbQorICogQGRybTogVGhlIERSTS9LTVMgZGV2aWNlCisgKiBA ZGV2OiBUaGUgcGh5c2ljYWwgZGV2aWNlCisgKiBAYXBiX2NsazogVGhlIEFQQiBjbG9jaworICog QGRpc3A6IFRoZSBkaXNwbGF5IGNvbnRyb2xsZXIKKyAqIEBkcDogVGhlIERpc3BsYXlQb3J0IGNv bnRyb2xsZXIKKyAqIEBkbWFfYWxpZ246IERNQSBhbGlnbm1lbnQgY29uc3RyYWludCAobXVzdCBi ZSBhIHBvd2VyIG9mIDIpCisgKi8KK3N0cnVjdCB6eW5xbXBfZHBzdWIgeworCXN0cnVjdCBkcm1f ZGV2aWNlICpkcm07CisJc3RydWN0IGRldmljZSAqZGV2OworCisJc3RydWN0IGNsayAqYXBiX2Ns azsKKworCXN0cnVjdCB6eW5xbXBfZGlzcCAqZGlzcDsKKwlzdHJ1Y3QgenlucW1wX2RwICpkcDsK KworCXVuc2lnbmVkIGludCBkbWFfYWxpZ247Cit9OworCisjZW5kaWYgLyogX1pZTlFNUF9EUFNV Ql9IXyAqLwotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=