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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 272F9C433F5 for ; Wed, 8 Dec 2021 02:40:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Z4ZjstKSA+jAjAPZPGDTCpO9dnJGMZOJvMkrbxLKhsU=; b=RlXxU93v7avgTK 5vHmYAOwvsTm345dnvhYM8yG+BFyohN9SEnUkO54+S5AXCTxA7NDUsty7DNvDOHzvmXce7P/pltzW HIF72+HKq/k0fL6G5EhrT43nbc41zJCIG3Dz4tmKsDJQ5gXYH81Jmq0s1VhCZdcIVPWkLxmYPsFVQ epcyi9NcqR8zNVW9V7Pg7soeP//o0vpqWSf9hjwxO2eQcbdf3QE5sY6Rgaz51pNJ4iuNRO3fmTem7 6V8KnlZpFawA77bH8MP2mY1EC9iwdGZpdLu+7LVLui7iVzmJdyZvFQ9rJzAapeLhe9PcxumjJRmgc PAe4H9qCbrR3veGFQWyg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mumt5-00AiDc-JF; Wed, 08 Dec 2021 02:40:55 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mumsz-00AiB7-7b for linux-phy@lists.infradead.org; Wed, 08 Dec 2021 02:40:54 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 897AFB81F4D; Wed, 8 Dec 2021 02:40:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A51EC341C5; Wed, 8 Dec 2021 02:40:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1638931247; bh=VRPCljZI82+/Fh4KglTot2iPGeLjowoIpCXFxaFTUU0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hJ4i4Nv9hE2PdVHrU7xQ4EXVhrHOyIex/dr3WJa1eYE/JokW+8hkxf571Ap1EJmUq kLIvUUQokXM+hqQAbBl56CDY+nH1DRl4K2pgHz7X27+3f32owhHoD+ZZxexHD8Shsf yRi7jNLqyVI3PKBI/LZ/F5Y2HPrJ+uITUua8Ui5ap800bXuJbiSNz3LebiQqjy9WTs SfFiALg0cjdIn48BW0CarQnFGtJiTx1MhCoc1ZwgsUc6JBcRzfRffv2D7WvkKvvaJT kx8Bkyq1AirRa+Bj5KPVYtQzUnmqMKeL0ylHOIxScYyiHwdKewRVFU7bBapr/sVAz0 VmDXRVSdT+8YA== From: =?UTF-8?q?Marek=20Beh=C3=BAn?= To: Vinod Koul Cc: linux-phy@lists.infradead.org, Kishon Vijay Abraham I , pali@kernel.org, Miquel Raynal , Gregory CLEMENT , =?UTF-8?q?Marek=20Beh=C3=BAn?= Subject: [PATCH phy v2 2/6] phy: marvell: phy-mvebu-a3700-comphy: Add native kernel implementation Date: Wed, 8 Dec 2021 03:40:34 +0100 Message-Id: <20211208024038.8797-3-kabel@kernel.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211208024038.8797-1-kabel@kernel.org> References: <20211208024038.8797-1-kabel@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211207_184049_779102_49F911B8 X-CRM114-Status: GOOD ( 27.51 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org RnJvbTogUGFsaSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KClJlbW92ZSBvbGQgUlBDIGltcGxl bWVudGF0aW9uIGFuZCBhZGQgYSBuZXcgbmF0aXZlIGtlcm5lbCBpbXBsZW1lbnRhdGlvbi4KClRo ZSBvbGQgaW1wbGVtZW50YXRpb24gdXNlcyBBUk0gU01DIEFQSSB0byBpc3N1ZSBSUEMgY2FsbHMg dG8gQVJNIFRydXN0ZWQKRmlybXdhcmUgd2hpY2ggcHJvdmlkZXMgcmVhbCBpbXBsZW1lbnRhdGlv biBvZiBQSFkgY29uZmlndXJhdGlvbi4KCkJ1dCBvbGRlciB2ZXJzaW9ucyBvZiBBUk0gVHJ1c3Rl ZCBGaXJtd2FyZSBkbyBub3QgcHJvdmlkZSB0aGlzIFBIWQpjb25maWd1cmF0aW9uIGZ1bmN0aW9u YWxpdHksIHNpbXBseSByZXR1cm5pbmc6IG9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkOyBvcgp3b3Jz ZSwgc29tZSB2ZXJzaW9ucyBwcm92aWRlIHRoZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkg aW5jb3JyZWN0bHkuCgpGb3IgZXhhbXBsZSB0aGUgZmlybXdhcmUgc2hpcHBlZCBpbiBFU1BSRVNT T2JpbiBib2FyZCBoYXMgdGhpcyBvbGRlcgp2ZXJzaW9uIG9mIEFSTSBUcnVzdGVkIEZpcm13YXJl IGFuZCB0aGVyZWZvcmUgU0FUQSwgVVNCIDMuMCBhbmQgUENJZQpmdW5jdGlvbmFsaXR5IGRvIG5v dCB3b3JrIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgTGludXgga2VybmVsLgoKRHVlIHRvIHRoZSBh Ym92ZSByZWFzb25zLCB0aGUgZm9sbG93aW5nIGNvbW1pdHMgd2VyZSBpbnRyb2R1Y2VkIGludG8g TGludXgsCnRvIHdvcmthcm91bmQgdGhlc2UgaXNzdWVzIGJ5IGlnbm9yaW5nIC1FT1BOT1RTVVBQ IGVycm9yIGNvZGUgZnJvbQpwaHktbXZlYnUtYTM3MDAtY29tcGh5IGRyaXZlciBmdW5jdGlvbiBw aHlfcG93ZXJfb24oKToKCmNvbW1pdCA0NWFlZmUzZDIyNTEgKCJhdGE6IGFoY2k6IG12ZWJ1OiBN YWtlIFNBVEEgUEhZIG9wdGlvbmFsIGZvciBBcm1hZGEKMzcyMCIpCmNvbW1pdCAzMjQxOTI5YjY3 ZDIgKCJ1c2I6IGhvc3Q6IHhoY2k6IG12ZWJ1OiBtYWtlIFVTQiAzLjAgUEhZIG9wdGlvbmFsIGZv cgpBcm1hZGEgMzcyMCIpCmNvbW1pdCBiMGM2YWUwZjg5NDggKCJQQ0k6IGFhcmR2YXJrOiBGaXgg aW5pdGlhbGl6YXRpb24gd2l0aCBvbGQgTWFydmVsbCdzCkFybSBUcnVzdGVkIEZpcm13YXJlIikK ClJlcGxhY2UgdGhpcyBSUEMgaW1wbGVtZW50YXRpb24gd2l0aCBwcm9wZXIgbmF0aXZlIGtlcm5l bCBpbXBsZW1lbnRhdGlvbiwKd2hpY2ggaXMgaW5kZXBlbmRlbnQgb24gdGhlIGZpcm13YXJlLiBO ZXZlciByZXR1cm4gLUVPUE5PVFNVUFAgZm9yIHByb3Blcgphcmd1bWVudHMuCgpUaGlzIHNob3Vs ZCBzb2x2ZSBtdWx0aXBsZSBpc3N1ZXMgd2l0aCByZWFsLXdvcmxkIGJvYXJkcywgd2hlcmUgaXQg aXMgbm90CnBvc3NpYmxlIG9yIHJlYWxseSBpbmNvbnZlbmllbnQgdG8gY2hhbmdlIHRoZSBmaXJt d2FyZS4gTGV0J3MgZWxpbWluYXRlCnRoZXNlIGlzc3Vlcy4KClRoaXMgaW1wbGVtZW50YXRpb24g aXMgcG9ydGVkIGRpcmVjdGx5IGZyb20gQXJtYWRhIDM3MjAgY29tcGh5IGRyaXZlciBmb3VuZApp biBuZXdlc3QgdmVyc2lvbiBvZiBBUk0gVHJ1c3RlZCBGaXJtd2FyZSBzb3VyY2UgY29kZSwgYnV0 IHdpdGggdmFyaW91cwpmaXhlcyBvZiByZWdpc3RlciBuYW1lcywgc29tZSBhZGRlZCBjb21tZW50 cywgc29tZSByZWZhY3RvcmluZyBkdWUgdG8gdGhlCm9yaWdpbmFsIGNvZGUgbm90IGNvbmZvcm1p bmcgdG8ga2VybmVsIHN0YW5kYXJkcy4gQWxzbyBQQ0llIG1vZGUgcG93ZXJvZmYKc3VwcG9ydCB3 YXMgYWRkZWQgaGVyZSwgYW5kIFBIWSByZXNldCBzdXBwb3J0LiBUaGVzZSBjaGFuZ2VzIGFyZSBh bHNvIGdvaW5nCnRvIGJlIHNlbnQgdG8gQVJNIFRydXN0ZWQgRmlybXdhcmUuCgpTaWduZWQtb2Zm LWJ5OiBQYWxpIFJvaMOhciA8cGFsaUBrZXJuZWwub3JnPgpBY2tlZC1ieTogTWlxdWVsIFJheW5h bCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4KWyBQYWxpIGRpZCB0aGUgcG9ydGluZyBmcm9t IEFURi4KICBJIChNYXJlaykgdGhlbiBmaXhlZCBzb21lIHJlZ2lzdGVyIG5hbWVzLCBzb21lIHZh cmlvdXMgb3RoZXIgdGhpbmdzLAogIGFkZGVkIHNvbWUgY29tbWVudHMgYW5kIHJlZmFjdG9yZWQg dGhlIGNvZGUgdG8ga2VybmVsIHN0YW5kYXJkcy4gQWxzbwogIGZpeGVkIFBIWSBwb3dlcm9mZiBh bmQgYWRkZWQgUEhZIHJlc2V0LiBdClNpZ25lZC1vZmYtYnk6IE1hcmVrIEJlaMO6biA8a2FiZWxA a2VybmVsLm9yZz4KLS0tCkNoYW5nZXMgc2luY2UgdjE6Ci0gcmVmYWN0b3JlZCB0byB1c2UgR0VO TUFTSygpCi0gZml4ZWQgdmFyaW91cyByZWdpc3RlciBuYW1lcyB0byBjb25mb3JtIHRvIEZ1bmN0 aW9uYWwgU3BlY2lmaWNhdGlvbgotIHJlZmFjdG9yZWQgdmFyaW91cyByZWdpc3RlciBuYW1lcyB0 byBoYXZlIHVuaWZvcm0gbmFtaW5nCi0gcmVmYWN0b3JlZCByZWdpc3RlciBhY2Nlc3MgaW50byBv bmUgZnVuY3Rpb24sIHdoaWNoIGRlY2lkZXMgd2hldGhlcgogIHRoZSBhY2Nlc3Mgc2hvdWxkIGJl IGRpcmVjdCBvciBpbmRpcmVjdCwgc28gYXMgdG8gbm90IGhhdmUgYWxsIHRoZXNlCiAgY2hlY2tz IGRvbmUgZXZlcnl3aGVyZSBpbiB0aGUgY29kZQotIG1vdmVkIGFyb3VuZCBvbmUgcmVnaXN0ZXIg ZGVmaW5pdGlvbiB0byBoYXZlIHRoZSByZWdpc3RlcnMgc29ydGVkCiAgYWNjb3JkaW5nIHRvIHRo ZWlyIG9mZnNldAotIGFkZGVkIGNvbW1lbnRzIHRvIHNvbWUgcmVnaXN0ZXIgZGVmaW5pdGlvbnMK LSBhZGRlZCBzdXBwb3J0IGZvciBQSFkgcmVzZXQoKSBtZXRob2QKLSB3aGVuIGNoYW5naW5nIFBI WSBtb2RlLCB0aGUgZHJpdmVyIG5vdyByZXNldHMgdGhlIFBIWSBhbmQgaXRzCiAgcmVnaXN0ZXJz IHRvIHB1dCB0aGUgUEhZIGluIGtub3duIHN0YXRlCi0gZml4ZWQgdGhlIHBvd2VyX29mZigpIG1l dGhvZAotIGFkZGVkIHNwaW5sb2NrIGd1YXJkIHdoZW4gYWNjZXNzaW5nIFBIWSBTZWxlY3RvciBy ZWdpc3Rlciwgc2luY2UgaXQKICBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgUEhZcyBhbmQgc28gdGhl IFBIWSBtdXRleCBpcyBpbnN1ZmZpY2llbnQKLSB1cG9uIGRyaXZlciBwcm9iZSBjaGFuZ2VkIHRo ZSBjYWxscyB0byBwb3dlcl9vZmYoKSB0byByZXNldCgpCi0tLQogZHJpdmVycy9waHkvbWFydmVs bC9waHktbXZlYnUtYTM3MDAtY29tcGh5LmMgfCAxMzQ0ICsrKysrKysrKysrKysrKystLQogMSBm aWxlIGNoYW5nZWQsIDEyMjcgaW5zZXJ0aW9ucygrKSwgMTE3IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5jIGIvZHJp dmVycy9waHkvbWFydmVsbC9waHktbXZlYnUtYTM3MDAtY29tcGh5LmMKaW5kZXggZGJiMmQ0MzA4 ODUxLi5hOTBkMTJkMGRiMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L21hcnZlbGwvcGh5LW12 ZWJ1LWEzNzAwLWNvbXBoeS5jCisrKyBiL2RyaXZlcnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEz NzAwLWNvbXBoeS5jCkBAIC01LDEyICs1LDE1IEBACiAgKiBBdXRob3JzOgogICogICBFdmFuIFdh bmcgPHhzd2FuZ0BtYXJ2ZWxsLmNvbT4KICAqICAgTWlxdcOobCBSYXluYWwgPG1pcXVlbC5yYXlu YWxAYm9vdGxpbi5jb20+CisgKiAgIFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+CisgKiAg IE1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVsLm9yZz4KICAqCiAgKiBTdHJ1Y3R1cmUgaW5zcGly ZWQgZnJvbSBwaHktbXZlYnUtY3AxMTAtY29tcGh5LmMgd3JpdHRlbiBieSBBbnRvaW5lIFRlbmFy dC4KLSAqIFNNQyBjYWxsIGluaXRpYWwgc3VwcG9ydCBkb25lIGJ5IEdyemVnb3J6IEphc3pjenlr LgorICogQ29tcGh5IGNvZGUgZnJvbSBBUk0gVHJ1c3RlZCBGaXJtd2FyZSBwb3J0ZWQgYnkgUGFs aSBSb2jDoXIgPHBhbGlAa2VybmVsLm9yZz4KKyAqIGFuZCBNYXJlayBCZWjDum4gPGthYmVsQGtl cm5lbC5vcmc+LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9hcm0tc21jY2MuaD4KKyNpbmNsdWRl IDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lv cG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KQEAgLTE4LDEwMyArMjEsMTE0 MSBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4K ICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlu bG9jay5oPgogCi0jZGVmaW5lIE1WRUJVX0EzNzAwX0NPTVBIWV9MQU5FUwkJMwotCi0vKiBDT01Q SFkgRmFzdCBTTUMgZnVuY3Rpb24gaWRlbnRpZmllcnMgKi8KLSNkZWZpbmUgQ09NUEhZX1NJUF9Q T1dFUl9PTgkJCTB4ODIwMDAwMDEKLSNkZWZpbmUgQ09NUEhZX1NJUF9QT1dFUl9PRkYJCQkweDgy MDAwMDAyCi0jZGVmaW5lIENPTVBIWV9TSVBfUExMX0xPQ0sJCQkweDgyMDAwMDAzCi0KLSNkZWZp bmUgQ09NUEhZX0ZXX01PREVfU0FUQQkJCTB4MQotI2RlZmluZSBDT01QSFlfRldfTU9ERV9TR01J SQkJCTB4MgotI2RlZmluZSBDT01QSFlfRldfTU9ERV8yNTAwQkFTRVgJCTB4MwotI2RlZmluZSBD T01QSFlfRldfTU9ERV9VU0IzSAkJCTB4NAotI2RlZmluZSBDT01QSFlfRldfTU9ERV9VU0IzRAkJ CTB4NQotI2RlZmluZSBDT01QSFlfRldfTU9ERV9QQ0lFCQkJMHg2Ci0jZGVmaW5lIENPTVBIWV9G V19NT0RFX1VTQjMJCQkweGEKLQotI2RlZmluZSBDT01QSFlfRldfU1BFRURfMV8yNUcJCQkwIC8q IFNHTUlJIDFHICovCi0jZGVmaW5lIENPTVBIWV9GV19TUEVFRF8yXzVHCQkJMQotI2RlZmluZSBD T01QSFlfRldfU1BFRURfM18xMjVHCQkJMiAvKiAyNTAwQkFTRS1YICovCi0jZGVmaW5lIENPTVBI WV9GV19TUEVFRF81RwkJCTMKLSNkZWZpbmUgQ09NUEhZX0ZXX1NQRUVEX01BWAkJCTB4M0YKLQot I2RlZmluZSBDT01QSFlfRldfTU9ERShtb2RlKQkJCSgobW9kZSkgPDwgMTIpCi0jZGVmaW5lIENP TVBIWV9GV19ORVQobW9kZSwgaWR4LCBzcGVlZCkJCShDT01QSFlfRldfTU9ERShtb2RlKSB8IFwK LQkJCQkJCSAoKGlkeCkgPDwgOCkgfAlcCi0JCQkJCQkgKChzcGVlZCkgPDwgMikpCi0jZGVmaW5l IENPTVBIWV9GV19QQ0lFKG1vZGUsIHNwZWVkLCB3aWR0aCkJKENPTVBIWV9GV19ORVQobW9kZSwg MCwgc3BlZWQpIHwgXAotCQkJCQkJICgod2lkdGgpIDw8IDE4KSkKKyNkZWZpbmUgUExMX1NFVF9E RUxBWV9VUwkJNjAwCisjZGVmaW5lIENPTVBIWV9QTExfU0xFRVAJCTEwMDAKKyNkZWZpbmUgQ09N UEhZX1BMTF9USU1FT1VUCQkxNTAwMDAKKworLyogQ29tcGh5IGxhbmUyIGluZGlyZWN0IGFjY2Vz cyByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgQ09NUEhZX0xBTkUyX0lORElSX0FERFIJCTB4 MAorI2RlZmluZSBDT01QSFlfTEFORTJfSU5ESVJfREFUQQkJMHg0CisKKy8qIFNBVEEgYW5kIFVT QjMgUEhZIG9mZnNldCBjb21wYXJlZCB0byBTQVRBIFBIWSAqLworI2RlZmluZSBDT01QSFlfTEFO RTJfUkVHU19CQVNFCQkweDIwMAorCisvKgorICogV2hlbiBhY2Nlc3NpbmcgY29tbW9uIFBIWSBs YW5lIHJlZ2lzdGVycyBkaXJlY3RseSwgd2UgbmVlZCB0byBzaGlmdCBieSAxLAorICogc2luY2Ug dGhlIHJlZ2lzdGVycyBhcmUgMTYtYml0LgorICovCisjZGVmaW5lIENPTVBIWV9MQU5FX1JFR19E SVJFQ1QocmVnKQkoKChyZWcpICYgMHg3RkYpIDw8IDEpCisKKy8qIENPTVBIWSByZWdpc3RlcnMg Ki8KKyNkZWZpbmUgQ09NUEhZX1BPV0VSX1BMTF9DVFJMCQkweDAxCisjZGVmaW5lIFBVX0lWUkVG X0JJVAkJCUJJVCgxNSkKKyNkZWZpbmUgUFVfUExMX0JJVAkJCUJJVCgxNCkKKyNkZWZpbmUgUFVf UlhfQklUCQkJQklUKDEzKQorI2RlZmluZSBQVV9UWF9CSVQJCQlCSVQoMTIpCisjZGVmaW5lIFBV X1RYX0lOVFBfQklUCQkJQklUKDExKQorI2RlZmluZSBQVV9ERkVfQklUCQkJQklUKDEwKQorI2Rl ZmluZSBSRVNFVF9EVExfUlhfQklUCQlCSVQoOSkKKyNkZWZpbmUgUExMX0xPQ0tfQklUCQkJQklU KDgpCisjZGVmaW5lIFJFRl9GUkVGX1NFTF9NQVNLCQlHRU5NQVNLKDQsIDApCisjZGVmaW5lIFJF Rl9GUkVGX1NFTF9TRVJERVNfMjVNSFoJKDB4MSA8PCAwKQorI2RlZmluZSBSRUZfRlJFRl9TRUxf U0VSREVTXzQwTUhaCSgweDMgPDwgMCkKKyNkZWZpbmUgUkVGX0ZSRUZfU0VMX1NFUkRFU181ME1I WgkoMHg0IDw8IDApCisjZGVmaW5lIFJFRl9GUkVGX1NFTF9QQ0lFX1VTQjNfMjVNSFoJKDB4MiA8 PCAwKQorI2RlZmluZSBSRUZfRlJFRl9TRUxfUENJRV9VU0IzXzQwTUhaCSgweDMgPDwgMCkKKyNk ZWZpbmUgQ09NUEhZX01PREVfTUFTSwkJR0VOTUFTSyg3LCA1KQorI2RlZmluZSBDT01QSFlfTU9E RV9TQVRBCQkoMHgwIDw8IDUpCisjZGVmaW5lIENPTVBIWV9NT0RFX1BDSUUJCSgweDMgPDwgNSkK KyNkZWZpbmUgQ09NUEhZX01PREVfU0VSREVTCQkoMHg0IDw8IDUpCisjZGVmaW5lIENPTVBIWV9N T0RFX1VTQjMJCSgweDUgPDwgNSkKKworI2RlZmluZSBDT01QSFlfS1ZDT19DQUxfQ1RSTAkJMHgw MgorI2RlZmluZSBVU0VfTUFYX1BMTF9SQVRFX0JJVAkJQklUKDEyKQorI2RlZmluZSBTUEVFRF9Q TExfTUFTSwkJCUdFTk1BU0soNywgMikKKyNkZWZpbmUgU1BFRURfUExMX1ZBTFVFXzE2CQkoMHgx MCA8PCAyKQorCisjZGVmaW5lIENPTVBIWV9ESUdfTE9PUEJBQ0tfRU4JCTB4MjMKKyNkZWZpbmUg U0VMX0RBVEFfV0lEVEhfTUFTSwkJR0VOTUFTSygxMSwgMTApCisjZGVmaW5lIERBVEFfV0lEVEhf MTBCSVQJCSgweDAgPDwgMTApCisjZGVmaW5lIERBVEFfV0lEVEhfMjBCSVQJCSgweDEgPDwgMTAp CisjZGVmaW5lIERBVEFfV0lEVEhfNDBCSVQJCSgweDIgPDwgMTApCisjZGVmaW5lIFBMTF9SRUFE WV9UWF9CSVQJCUJJVCg0KQorCisjZGVmaW5lIENPTVBIWV9TWU5DX1BBVFRFUk4JCTB4MjQKKyNk ZWZpbmUgVFhEX0lOVkVSVF9CSVQJCQlCSVQoMTApCisjZGVmaW5lIFJYRF9JTlZFUlRfQklUCQkJ QklUKDExKQorCisjZGVmaW5lIENPTVBIWV9TWU5DX01BU0tfR0VOCQkweDI1CisjZGVmaW5lIFBI WV9HRU5fTUFYX01BU0sJCUdFTk1BU0soMTEsIDEwKQorI2RlZmluZSBQSFlfR0VOX01BWF9VU0Iz XzVHCQkoMHgxIDw8IDEwKQorCisjZGVmaW5lIENPTVBIWV9JU09MQVRJT05fQ1RSTAkJMHgyNgor I2RlZmluZSBQSFlfSVNPTEFURV9NT0RFCQlCSVQoMTUpCisKKyNkZWZpbmUgQ09NUEhZX0dFTjJf U0VUMgkJMHgzZQorI2RlZmluZSBHUzJfVFhfU1NDX0FNUF9NQVNLCQlHRU5NQVNLKDE1LCA5KQor I2RlZmluZSBHUzJfVFhfU1NDX0FNUF80MTI4CQkoMHgyMCA8PCA5KQorI2RlZmluZSBHUzJfVlJF R19SWFRYX01BU19JU0VUX01BU0sJR0VOTUFTSyg4LCA3KQorI2RlZmluZSBHUzJfVlJFR19SWFRY X01BU19JU0VUXzYwVQkoMHgwIDw8IDcpCisjZGVmaW5lIEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRf ODBVCSgweDEgPDwgNykKKyNkZWZpbmUgR1MyX1ZSRUdfUlhUWF9NQVNfSVNFVF8xMDBVCSgweDIg PDwgNykKKyNkZWZpbmUgR1MyX1ZSRUdfUlhUWF9NQVNfSVNFVF8xMjBVCSgweDMgPDwgNykKKyNk ZWZpbmUgR1MyX1JTVkRfNl8wX01BU0sJCUdFTk1BU0soNiwgMCkKKworI2RlZmluZSBDT01QSFlf R0VOM19TRVQyCQkweDNmCisKKyNkZWZpbmUgQ09NUEhZX0lETEVfU1lOQ19FTgkJMHg0OAorI2Rl ZmluZSBJRExFX1NZTkNfRU4JCQlCSVQoMTIpCisKKyNkZWZpbmUgQ09NUEhZX01JU0NfQ1RSTDAJ CTB4NEYKKyNkZWZpbmUgQ0xLMTAwTV8xMjVNX0VOCQkJQklUKDQpCisjZGVmaW5lIFRYRENMS18y WF9TRUwJCQlCSVQoNikKKyNkZWZpbmUgQ0xLNTAwTV9FTgkJCUJJVCg3KQorI2RlZmluZSBQSFlf UkVGX0NMS19TRUwJCQlCSVQoMTApCisKKyNkZWZpbmUgQ09NUEhZX1NGVF9SRVNFVAkJMHg1Mgor I2RlZmluZSBTRlRfUlNUCQkJCUJJVCg5KQorI2RlZmluZSBTRlRfUlNUX05PX1JFRwkJCUJJVCgx MCkKKworI2RlZmluZSBDT01QSFlfTUlTQ19DVFJMMQkJMHg3MworI2RlZmluZSBTRUxfQklUU19Q Q0lFX0ZPUkNFCQlCSVQoMTUpCisKKyNkZWZpbmUgQ09NUEhZX0dFTjJfU0VUMwkJMHgxMTIKKyNk ZWZpbmUgR1MzX0ZGRV9DQVBfU0VMX01BU0sJCUdFTk1BU0soMywgMCkKKyNkZWZpbmUgR1MzX0ZG RV9DQVBfU0VMX1ZBTFVFCQkweEYKKworLyogUElQRSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ09N UEhZX1BJUEVfTEFORV9DRkcwCQkweDE4MAorI2RlZmluZSBQUkRfVFhERUVNUEgwX01BU0sJCUJJ VCgwKQorI2RlZmluZSBQUkRfVFhNQVJHSU5fTUFTSwkJR0VOTUFTSygzLCAxKQorI2RlZmluZSBQ UkRfVFhTV0lOR19NQVNLCQlCSVQoNCkKKyNkZWZpbmUgQ0ZHX1RYX0FMSUdOX1BPU19NQVNLCQlH RU5NQVNLKDgsIDUpCisKKyNkZWZpbmUgQ09NUEhZX1BJUEVfTEFORV9DRkcxCQkweDE4MQorI2Rl ZmluZSBQUkRfVFhERUVNUEgxX01BU0sJCUJJVCgxNSkKKyNkZWZpbmUgVVNFX01BWF9QTExfUkFU RV9FTgkJQklUKDkpCisjZGVmaW5lIFRYX0RFVF9SWF9NT0RFCQkJQklUKDYpCisjZGVmaW5lIEdF TjJfVFhfREFUQV9ETFlfTUFTSwkJR0VOTUFTSyg0LCAzKQorI2RlZmluZSBHRU4yX1RYX0RBVEFf RExZX0RFRlQJCSgyIDw8IDMpCisjZGVmaW5lIFRYX0VMRUNfSURMRV9NT0RFX0VOCQlCSVQoMCkK KworI2RlZmluZSBDT01QSFlfUElQRV9MQU5FX1NUQVQxCQkweDE4MworI2RlZmluZSBUWERDTEtf UENMS19FTgkJCUJJVCgwKQorCisjZGVmaW5lIENPTVBIWV9QSVBFX0xBTkVfQ0ZHNAkJMHgxODgK KyNkZWZpbmUgU1BSRUFEX1NQRUNUUlVNX0NMS19FTgkJQklUKDcpCisKKyNkZWZpbmUgQ09NUEhZ X1BJUEVfUlNUX0NMS19DVFJMCTB4MUMxCisjZGVmaW5lIFBJUEVfU09GVF9SRVNFVAkJCUJJVCgw KQorI2RlZmluZSBQSVBFX1JFR19SRVNFVAkJCUJJVCgxKQorI2RlZmluZSBNT0RFX0NPUkVfQ0xL X0ZSRVFfU0VMCQlCSVQoOSkKKyNkZWZpbmUgTU9ERV9QSVBFX1dJRFRIXzMyCQlCSVQoMykKKyNk ZWZpbmUgTU9ERV9SRUZESVZfTUFTSwkJR0VOTUFTSyg1LCA0KQorI2RlZmluZSBNT0RFX1JFRkRJ Vl9CWV80CQkoMHgyIDw8IDQpCisKKyNkZWZpbmUgQ09NUEhZX1BJUEVfVEVTVF9NT0RFX0NUUkwJ MHgxQzIKKyNkZWZpbmUgTU9ERV9NQVJHSU5fT1ZFUlJJREUJCUJJVCgyKQorCisjZGVmaW5lIENP TVBIWV9QSVBFX0NMS19TUkNfTE8JCTB4MUMzCisjZGVmaW5lIE1PREVfQ0xLX1NSQwkJCUJJVCgw KQorI2RlZmluZSBCVU5ETEVfUEVSSU9EX1NFTAkJQklUKDEpCisjZGVmaW5lIEJVTkRMRV9QRVJJ T0RfU0NBTEVfTUFTSwlHRU5NQVNLKDMsIDIpCisjZGVmaW5lIEJVTkRMRV9TQU1QTEVfQ1RSTAkJ QklUKDQpCisjZGVmaW5lIFBMTF9SRUFEWV9ETFlfTUFTSwkJR0VOTUFTSyg3LCA1KQorI2RlZmlu ZSBDRkdfU0VMXzIwQgkJCUJJVCgxNSkKKworI2RlZmluZSBDT01QSFlfUElQRV9QV1JfTUdNX1RJ TTEJMHgxRDAKKyNkZWZpbmUgQ0ZHX1BNX09TQ0NMS19XQUlUX01BU0sJCUdFTk1BU0soMTUsIDEy KQorI2RlZmluZSBDRkdfUE1fUlhERU5fV0FJVF9NQVNLCQlHRU5NQVNLKDExLCA4KQorI2RlZmlu ZSBDRkdfUE1fUlhERU5fV0FJVF8xX1VOSVQJKDB4MSA8PCA4KQorI2RlZmluZSBDRkdfUE1fUlhE TE9aX1dBSVRfTUFTSwkJR0VOTUFTSyg3LCAwKQorI2RlZmluZSBDRkdfUE1fUlhETE9aX1dBSVRf N19VTklUCSgweDcgPDwgMCkKKyNkZWZpbmUgQ0ZHX1BNX1JYRExPWl9XQUlUXzEyX1VOSVQJKDB4 QyA8PCAwKQorCisvKgorICogVGhpcyByZWdpc3RlciBpcyBub3QgZnJvbSBQSFkgbGFuZSByZWdp c3RlciBzcGFjZS4gSXQgb25seSBleGlzdHMgaW4gdGhlCisgKiBpbmRpcmVjdCByZWdpc3RlciBz cGFjZSwgYmVmb3JlIHRoZSBhY3R1YWwgUEhZIGxhbmUgMiByZWdpc3RlcnMuIFNvIHRoZQorICog b2Zmc2V0IGlzIGFic29sdXRlLCBub3QgcmVsYXRpdmUgdG8gQ09NUEhZX0xBTkUyX1JFR1NfQkFT RS4KKyAqIEl0IGlzIHVzZWQgb25seSBmb3IgU0FUQSBQSFkgaW5pdGlhbGl6YXRpb24uCisgKi8K KyNkZWZpbmUgQ09NUEhZX1JFU0VSVkVEX1JFRwkJMHgwRQorI2RlZmluZSBQSFlDVFJMX0ZSTV9Q SU5fQklUCQlCSVQoMTMpCisKKy8qIFNvdXRoIEJyaWRnZSBQSFkgQ29uZmlndXJhdGlvbiBSZWdp c3RlcnMgKi8KKyNkZWZpbmUgQ09NUEhZX1BIWV9SRUcobGFuZSwgcmVnKQkoKCgxIC0gKGxhbmUp KSAqIDB4MjgpICsgKChyZWcpICYgMHgzZikpCisKKy8qCisgKiBsYW5lMDogVVNCMy9HYkUxIFBI WSBDb25maWd1cmF0aW9uIDEKKyAqIGxhbmUxOiBQQ0llL0diRTAgUEhZIENvbmZpZ3VyYXRpb24g MQorICogKHVzZWQgb25seSBieSBTR01JSSBjb2RlKQorICovCisjZGVmaW5lIENPTVBIWV9QSFlf Q0ZHMQkJCTB4MAorI2RlZmluZSBQSU5fUFVfSVZSRUZfQklUCQlCSVQoMSkKKyNkZWZpbmUgUElO X1JFU0VUX0NPUkVfQklUCQlCSVQoMTEpCisjZGVmaW5lIFBJTl9SRVNFVF9DT01QSFlfQklUCQlC SVQoMTIpCisjZGVmaW5lIFBJTl9QVV9QTExfQklUCQkJQklUKDE2KQorI2RlZmluZSBQSU5fUFVf UlhfQklUCQkJQklUKDE3KQorI2RlZmluZSBQSU5fUFVfVFhfQklUCQkJQklUKDE4KQorI2RlZmlu ZSBQSU5fVFhfSURMRV9CSVQJCQlCSVQoMTkpCisjZGVmaW5lIEdFTl9SWF9TRUxfTUFTSwkJCUdF Tk1BU0soMjUsIDIyKQorI2RlZmluZSBHRU5fUlhfU0VMX1ZBTFVFKHZhbCkJCSgodmFsKSA8PCAy MikKKyNkZWZpbmUgR0VOX1RYX1NFTF9NQVNLCQkJR0VOTUFTSygyOSwgMjYpCisjZGVmaW5lIEdF Tl9UWF9TRUxfVkFMVUUodmFsKQkJKCh2YWwpIDw8IDI2KQorI2RlZmluZSBTRVJERVNfU1BFRURf MV8yNV9HCQkweDYKKyNkZWZpbmUgU0VSREVTX1NQRUVEXzNfMTI1X0cJCTB4OAorI2RlZmluZSBQ SFlfUlhfSU5JVF9CSVQJCQlCSVQoMzApCisKKy8qCisgKiBsYW5lMDogVVNCMy9HYkUxIFBIWSBT dGF0dXMgMQorICogbGFuZTE6IFBDSWUvR2JFMCBQSFkgU3RhdHVzIDEKKyAqICh1c2VkIG9ubHkg YnkgU0dNSUkgY29kZSkKKyAqLworI2RlZmluZSBDT01QSFlfUEhZX1NUQVQxCQkweDE4CisjZGVm aW5lIFBIWV9SWF9JTklUX0RPTkVfQklUCQlCSVQoMCkKKyNkZWZpbmUgUEhZX1BMTF9SRUFEWV9S WF9CSVQJCUJJVCgyKQorI2RlZmluZSBQSFlfUExMX1JFQURZX1RYX0JJVAkJQklUKDMpCisKKy8q IFBIWSBTZWxlY3RvciAqLworI2RlZmluZSBDT01QSFlfU0VMRUNUT1JfUEhZX1JFRwkJCTB4RkMK Ky8qIGJpdDA6IDA6IExhbmUxIGlzIEdiRTA7IDE6IExhbmUxIGlzIFBDSWUgKi8KKyNkZWZpbmUg Q09NUEhZX1NFTEVDVE9SX1BDSUVfR0JFMF9TRUxfQklUCUJJVCgwKQorLyogYml0NDogMDogTGFu ZTAgaXMgR2JFMTsgMTogTGFuZTAgaXMgVVNCMyAqLworI2RlZmluZSBDT01QSFlfU0VMRUNUT1Jf VVNCM19HQkUxX1NFTF9CSVQJQklUKDQpCisvKiBiaXQ4OiAwOiBMYW5lMCBpcyBVU0IzIGluc3Rl YWQgb2YgR2JFMSwgTGFuZTIgaXMgU0FUQTsgMTogTGFuZTIgaXMgVVNCMyAqLworI2RlZmluZSBD T01QSFlfU0VMRUNUT1JfVVNCM19QSFlfU0VMX0JJVAlCSVQoOCkKIAogc3RydWN0IG12ZWJ1X2Ez NzAwX2NvbXBoeV9jb25mIHsKIAl1bnNpZ25lZCBpbnQgbGFuZTsKIAllbnVtIHBoeV9tb2RlIG1v ZGU7CiAJaW50IHN1Ym1vZGU7Ci0JdTMyIGZ3X21vZGU7CiB9OwogCi0jZGVmaW5lIE1WRUJVX0Ez NzAwX0NPTVBIWV9DT05GKF9sYW5lLCBfbW9kZSwgX3Ntb2RlLCBfZncpCQlcCisjZGVmaW5lIE1W RUJVX0EzNzAwX0NPTVBIWV9DT05GKF9sYW5lLCBfbW9kZSwgX3Ntb2RlKQkJCVwKIAl7CQkJCQkJ CQlcCiAJCS5sYW5lID0gX2xhbmUsCQkJCQkJXAogCQkubW9kZSA9IF9tb2RlLAkJCQkJCVwKIAkJ LnN1Ym1vZGUgPSBfc21vZGUsCQkJCQlcCi0JCS5md19tb2RlID0gX2Z3LAkJCQkJCVwKIAl9CiAK LSNkZWZpbmUgTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKF9sYW5lLCBfbW9kZSwgX2Z3KSBc Ci0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkYoX2xhbmUsIF9tb2RlLCBQSFlfSU5URVJGQUNFX01P REVfTkEsIF9mdykKKyNkZWZpbmUgTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKF9sYW5lLCBf bW9kZSkgXAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GKF9sYW5lLCBfbW9kZSwgUEhZX0lOVEVS RkFDRV9NT0RFX05BKQogCi0jZGVmaW5lIE1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSChfbGFu ZSwgX3Ntb2RlLCBfZncpIFwKLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORihfbGFuZSwgUEhZX01P REVfRVRIRVJORVQsIF9zbW9kZSwgX2Z3KQorI2RlZmluZSBNVkVCVV9BMzcwMF9DT01QSFlfQ09O Rl9FVEgoX2xhbmUsIF9zbW9kZSkgXAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GKF9sYW5lLCBQ SFlfTU9ERV9FVEhFUk5FVCwgX3Ntb2RlKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG12ZWJ1X2Ez NzAwX2NvbXBoeV9jb25mIG12ZWJ1X2EzNzAwX2NvbXBoeV9tb2Rlc1tdID0gewogCS8qIGxhbmUg MCAqLwotCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTigwLCBQSFlfTU9ERV9VU0JfSE9TVF9T UywKLQkJCQkgICAgQ09NUEhZX0ZXX01PREVfVVNCM0gpLAotCU1WRUJVX0EzNzAwX0NPTVBIWV9D T05GX0VUSCgwLCBQSFlfSU5URVJGQUNFX01PREVfU0dNSUksCi0JCQkJICAgIENPTVBIWV9GV19N T0RFX1NHTUlJKSwKLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZX0lOVEVSRkFD RV9NT0RFXzI1MDBCQVNFWCwKLQkJCQkgICAgQ09NUEhZX0ZXX01PREVfMjUwMEJBU0VYKSwKKwlN VkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oMCwgUEhZX01PREVfVVNCX0hPU1RfU1MpLAorCU1W RUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgwLCBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpLAor CU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgwLCBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJB U0VYKSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMCwgUEhZX0lOVEVSRkFDRV9NT0RF XzI1MDBCQVNFWCksCiAJLyogbGFuZSAxICovCi0JTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VO KDEsIFBIWV9NT0RFX1BDSUUsIENPTVBIWV9GV19NT0RFX1BDSUUpLAotCU1WRUJVX0EzNzAwX0NP TVBIWV9DT05GX0VUSCgxLCBQSFlfSU5URVJGQUNFX01PREVfU0dNSUksCi0JCQkJICAgIENPTVBI WV9GV19NT0RFX1NHTUlJKSwKLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9FVEgoMSwgUEhZX0lO VEVSRkFDRV9NT0RFXzI1MDBCQVNFWCwKLQkJCQkgICAgQ09NUEhZX0ZXX01PREVfMjUwMEJBU0VY KSwKKwlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4oMSwgUEhZX01PREVfUENJRSksCisJTVZF QlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDEsIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSksCisJ TVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfRVRIKDEsIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFT RVgpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0VUSCgxLCBQSFlfSU5URVJGQUNFX01PREVf MjUwMEJBU0VYKSwKIAkvKiBsYW5lIDIgKi8KLQlNVkVCVV9BMzcwMF9DT01QSFlfQ09ORl9HRU4o MiwgUEhZX01PREVfU0FUQSwgQ09NUEhZX0ZXX01PREVfU0FUQSksCi0JTVZFQlVfQTM3MDBfQ09N UEhZX0NPTkZfR0VOKDIsIFBIWV9NT0RFX1VTQl9IT1NUX1NTLAotCQkJCSAgICBDT01QSFlfRldf TU9ERV9VU0IzSCksCisJTVZFQlVfQTM3MDBfQ09NUEhZX0NPTkZfR0VOKDIsIFBIWV9NT0RFX1NB VEEpLAorCU1WRUJVX0EzNzAwX0NPTVBIWV9DT05GX0dFTigyLCBQSFlfTU9ERV9VU0JfSE9TVF9T UyksCit9OworCitzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X3ByaXYgeworCXZvaWQgX19pb21l bSAqY29tcGh5X3JlZ3M7CisJdm9pZCBfX2lvbWVtICpsYW5lMF9waHlfcmVnczsgLyogVVNCMyBh bmQgR2JFMSAqLworCXZvaWQgX19pb21lbSAqbGFuZTFfcGh5X3JlZ3M7IC8qIFBDSWUgYW5kIEdi RTAgKi8KKwl2b2lkIF9faW9tZW0gKmxhbmUyX3BoeV9pbmRpcmVjdDsgLyogU0FUQSBhbmQgVVNC MyAqLworCXJhd19zcGlubG9ja190IGxvY2s7IC8qIGZvciBQSFkgc2VsZWN0b3IgYWNjZXNzICov CisJYm9vbCB4dGFsX2lzXzQwbTsKIH07CiAKIHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFu ZSB7CisJc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9wcml2ICpwcml2OwogCXN0cnVjdCBkZXZp Y2UgKmRldjsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJZW51bSBwaHlfbW9kZSBtb2RlOwogCWludCBz dWJtb2RlOworCWJvb2wgaW52ZXJ0X3R4OworCWJvb2wgaW52ZXJ0X3J4OworCWJvb2wgbmVlZHNf cmVzZXQ7CiB9OwogCi1zdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9zbWModW5zaWduZWQg bG9uZyBmdW5jdGlvbiwgdW5zaWduZWQgbG9uZyBsYW5lLAotCQkJCSAgdW5zaWduZWQgbG9uZyBt b2RlKQorc3RydWN0IGdiZV9waHlfaW5pdF9kYXRhX2ZpeCB7CisJdTE2IGFkZHI7CisJdTE2IHZh bHVlOworfTsKKworLyogQ2hhbmdlcyB0byA0ME0xRzI1IG1vZGUgZGF0YSByZXF1aXJlZCBmb3Ig cnVubmluZyA0ME0zRzEyNSBpbml0IG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgZ2JlX3BoeV9pbml0 X2RhdGFfZml4IGdiZV9waHlfaW5pdF9maXhbXSA9IHsKKwl7MHgwMDUsIDB4MDdDQ30sIHsweDAx NSwgMHgwMDAwfSwgezB4MDFCLCAweDAwMDB9LCB7MHgwMUQsIDB4MDAwMH0sCisJezB4MDFFLCAw eDAwMDB9LCB7MHgwMUYsIDB4MDAwMH0sIHsweDAyMCwgMHgwMDAwfSwgezB4MDIxLCAweDAwMzB9 LAorCXsweDAyNiwgMHgwODg4fSwgezB4MDRELCAweDAxNTJ9LCB7MHgwNEYsIDB4QTAyMH0sIHsw eDA1MCwgMHgwN0NDfSwKKwl7MHgwNTMsIDB4RTlDQX0sIHsweDA1NSwgMHhCRDk3fSwgezB4MDcx LCAweDMwMTV9LCB7MHgwNzYsIDB4MDNBQX0sCisJezB4MDdDLCAweDBGREZ9LCB7MHgwQzIsIDB4 MzAzMH0sIHsweDBDMywgMHg4MDAwfSwgezB4MEUyLCAweDU1NTB9LAorCXsweDBFMywgMHgxMkE0 fSwgezB4MEU0LCAweDdEMDB9LCB7MHgwRTYsIDB4MEM4M30sIHsweDEwMSwgMHhGQ0MwfSwKKwl7 MHgxMDQsIDB4MEMxMH0KK307CisKKy8qIDQwTTFHMjUgbW9kZSBpbml0IGRhdGEgKi8KK3N0YXRp YyB1MTYgZ2JlX3BoeV9pbml0WzUxMl0gPSB7CisJLyogMCAgICAgICAxICAgICAgIDIgICAgICAg MyAgICAgICA0ICAgICAgIDUgICAgICAgNiAgICAgICA3ICovCisJLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisJLyogOCAgICAg ICA5ICAgICAgIEEgICAgICAgQiAgICAgICBDICAgICAgIEQgICAgICAgRSAgICAgICBGICovCisJ MHgzMTEwLCAweEZEODMsIDB4NjQzMCwgMHg0MTJGLCAweDgyQzAsIDB4MDZGQSwgMHg0NTAwLCAw eDZEMjYsCS8qIDAwICovCisJMHhBRkMwLCAweDgwMDAsIDB4QzAwMCwgMHgwMDAwLCAweDIwMDAs IDB4NDlDQywgMHgwQkM5LCAweDJBNTIsCS8qIDA4ICovCisJMHgwQkQyLCAweDBDREUsIDB4MTNE MiwgMHgwQ0U4LCAweDExNDksIDB4MTBFMCwgMHgwMDAwLCAweDAwMDAsCS8qIDEwICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAxLCAweDAwMDAsIDB4NDEzNCwgMHgwRDJELCAweEZG RkYsCS8qIDE4ICovCisJMHhGRkUwLCAweDQwMzAsIDB4MTAxNiwgMHgwMDMwLCAweDAwMDAsIDB4 MDgwMCwgMHgwODY2LCAweDAwMDAsCS8qIDIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4RkZGRiwg MHhGRkZGLCAweEZGRkYsIDB4RkZGRiwgMHhGRkZGLCAweEZGRkYsCS8qIDI4ICovCisJMHhGRkZG LCAweEZGRkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qIDMwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwRiwgMHg2QTYyLCAweDE5ODgsIDB4MzEw MCwgMHgzMTAwLCAweDMxMDAsCS8qIDM4ICovCisJMHgzMTAwLCAweEE3MDgsIDB4MjQzMCwgMHgw ODMwLCAweDEwMzAsIDB4NDYxMCwgMHhGRjAwLCAweEZGMDAsCS8qIDQwICovCisJMHgwMDYwLCAw eDEwMDAsIDB4MDQwMCwgMHgwMDQwLCAweDAwRjAsIDB4MDE1NSwgMHgxMTAwLCAweEEwMkEsCS8q IDQ4ICovCisJMHgwNkZBLCAweDAwODAsIDB4QjAwOCwgMHhFM0VELCAweDUwMDIsIDB4QjU5Miwg MHg3QTgwLCAweDAwMDEsCS8qIDUwICovCisJMHgwMjBBLCAweDg4MjAsIDB4NjAxNCwgMHg4MDU0 LCAweEFDQUEsIDB4RkM4OCwgMHgyQTAyLCAweDQ1Q0YsCS8qIDU4ICovCisJMHgwMDBGLCAweDE4 MTcsIDB4Mjg2MCwgMHgwNjRGLCAweDAwMDAsIDB4MDIwNCwgMHgxODAwLCAweDYwMDAsCS8qIDYw ICovCisJMHg4MTBGLCAweDRGMjMsIDB4NDAwMCwgMHg0NDk4LCAweDA4NTAsIDB4MDAwMCwgMHgw MDBFLCAweDEwMDIsCS8qIDY4ICovCisJMHg5RDNBLCAweDMwMDksIDB4RDA2NiwgMHgwNDkxLCAw eDAwMDEsIDB4NkFCMCwgMHgwMzk5LCAweDM3ODAsCS8qIDcwICovCisJMHgwMDQwLCAweDVBQzAs IDB4NEE4MCwgMHgwMDAwLCAweDAxREYsIDB4MDAwMCwgMHgwMDA3LCAweDAwMDAsCS8qIDc4ICov CisJMHgyRDU0LCAweDAwQTEsIDB4NDAwMCwgMHgwMTAwLCAweEEyMEEsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsCS8qIDgwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg3NDAwLCAweDBF ODEsIDB4MTAwMCwgMHgxMjQyLCAweDAyMTAsCS8qIDg4ICovCisJMHg4MERGLCAweDBGMUYsIDB4 MkYzRiwgMHg0RjVGLCAweDZGN0YsIDB4MEYxRiwgMHgyRjNGLCAweDRGNUYsCS8qIDkwICovCisJ MHg2RjdGLCAweDRCQUQsIDB4MDAwMCwgMHgwMDAwLCAweDA4MDAsIDB4MDAwMCwgMHgyNDAwLCAw eEI2NTEsCS8qIDk4ICovCisJMHhDOUUwLCAweDQyNDcsIDB4MEEyNCwgMHgwMDAwLCAweEFGMTks IDB4MTAwNCwgMHgwMDAwLCAweDAwMDAsCS8qIEEwICovCisJMHgwMDAwLCAweDAwMTMsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEE4ICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsCS8qIEIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDYwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qIEI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MzAxMCwg MHhGQTAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDMsCS8qIEMwICovCisJMHgxNjE4 LCAweDgyMDAsIDB4ODAwMCwgMHgwNDAwLCAweDA1MEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qIEM4ICovCisJMHg0QzkzLCAweDAwMDAsIDB4MTAwMCwgMHgxMTIwLCAweDAwMTAsIDB4MTI0 MiwgMHgxMjQyLCAweDFFMDAsCS8qIEQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MEY4LCAweDAwMDAsIDB4MDA0MSwgMHgwODAwLCAweDAwMDAsCS8qIEQ4ICovCisJMHg4MkEwLCAw eDU3MkUsIDB4MjQ5MCwgMHgxNEE5LCAweDRFMDAsIDB4MDAwMCwgMHgwODAzLCAweDA1NDEsCS8q IEUwICovCisJMHgwQzE1LCAweDAwMDAsIDB4MDAwMCwgMHgwNDAwLCAweDI2MjYsIDB4MDAwMCwg MHgwMDAwLCAweDQyMDAsCS8qIEU4ICovCisJMHgwMDAwLCAweEFBNTUsIDB4MTAyMCwgMHgwMDAw LCAweDAwMDAsIDB4NTAxMCwgMHgwMDAwLCAweDAwMDAsCS8qIEYwICovCisJMHgwMDAwLCAweDAw MDAsIDB4NTAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMkYyLCAweDAwMDAsCS8qIEY4 ICovCisJMHgxMDFGLCAweEZEQzAsIDB4NDAwMCwgMHg4MDEwLCAweDAxMTAsIDB4MDAwNiwgMHgw MDAwLCAweDAwMDAsCS8qMTAwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTA4ICovCisJMHgwNENGLCAweDAwMDAs IDB4MDRDRiwgMHgwMDAwLCAweDA0Q0YsIDB4MDAwMCwgMHgwNEM2LCAweDAwMDAsCS8qMTEwICov CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsCS8qMTE4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTI4ICovCisJ MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsCS8qMTMwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTM4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTQwICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsCS8qMTQ4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTUwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTU4ICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs CS8qMTYwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsCS8qMTY4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTcwICovCisJMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMEYwLCAweDA4QTIsIDB4MzExMiwgMHgwQTE0LCAweDAwMDAsCS8q MTc4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsCS8qMTgwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTg4ICovCisJMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMTkw ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgw MDAwLCAweDAwMDAsCS8qMTk4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUEwICovCisJMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUE4ICov CisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAw LCAweDAwMDAsCS8qMUIwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUI4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUMwICovCisJ MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAw eDAwMDAsCS8qMUM4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAs IDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUQwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAw MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUQ4ICovCisJMHgw MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsCS8qMUUwICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4 MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUU4ICovCisJMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwg MHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCS8qMUYwICovCisJMHgwMDAw LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAJ LyoxRjggKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21waHlfcmVnX3NldCh2b2lkIF9f aW9tZW0gKmFkZHIsIHUzMiBkYXRhLCB1MzIgbWFzaykKK3sKKwl1MzIgdmFsOworCisJdmFsID0g cmVhZGwoYWRkcik7CisJdmFsID0gKHZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7CisJd3Jp dGVsKHZhbCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb21waHlfcmVnX3NldDE2 KHZvaWQgX19pb21lbSAqYWRkciwgdTE2IGRhdGEsIHUxNiBtYXNrKQogewotCXN0cnVjdCBhcm1f c21jY2NfcmVzIHJlczsKLQlzMzIgcmV0OworCXUxNiB2YWw7CiAKLQlhcm1fc21jY2Nfc21jKGZ1 bmN0aW9uLCBsYW5lLCBtb2RlLCAwLCAwLCAwLCAwLCAwLCAmcmVzKTsKLQlyZXQgPSByZXMuYTA7 CisJdmFsID0gcmVhZHcoYWRkcik7CisJdmFsID0gKHZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFz ayk7CisJd3JpdGV3KHZhbCwgYWRkcik7Cit9CiAKLQlzd2l0Y2ggKHJldCkgewotCWNhc2UgU01D Q0NfUkVUX1NVQ0NFU1M6Ci0JCXJldHVybiAwOwotCWNhc2UgU01DQ0NfUkVUX05PVF9TVVBQT1JU RUQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKy8qIFVzZWQgZm9yIGFjY2Vzc2luZyBsYW5lIDIg cmVnaXN0ZXJzIChTQVRBL1VTQjMgUEhZKSAqLworc3RhdGljIHZvaWQgY29tcGh5X3NldF9pbmRp cmVjdChzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X3ByaXYgKnByaXYsCisJCQkJdTMyIG9mZnNl dCwgdTE2IGRhdGEsIHUxNiBtYXNrKQoreworCXdyaXRlbChvZmZzZXQsCisJICAgICAgIHByaXYt PmxhbmUyX3BoeV9pbmRpcmVjdCArIENPTVBIWV9MQU5FMl9JTkRJUl9BRERSKTsKKwljb21waHlf cmVnX3NldChwcml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKyBDT01QSFlfTEFORTJfSU5ESVJfREFU QSwKKwkJICAgICAgIGRhdGEsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBjb21waHlfbGFuZV9y ZWdfc2V0KHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQl1MTYgcmVn LCB1MTYgZGF0YSwgdTE2IG1hc2spCit7CisJaWYgKGxhbmUtPmlkID09IDIpIHsKKwkJLyogbGFu ZSAyIFBIWSByZWdpc3RlcnMgYXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgKi8KKwkJY29tcGh5X3Nl dF9pbmRpcmVjdChsYW5lLT5wcml2LAorCQkJCSAgICByZWcgKyBDT01QSFlfTEFORTJfUkVHU19C QVNFLAorCQkJCSAgICBkYXRhLCBtYXNrKTsKKwl9IGVsc2UgeworCQl2b2lkIF9faW9tZW0gKmJh c2UgPSBsYW5lLT5pZCA9PSAxID8KKwkJCQkgICAgIGxhbmUtPnByaXYtPmxhbmUxX3BoeV9yZWdz IDoKKwkJCQkgICAgIGxhbmUtPnByaXYtPmxhbmUwX3BoeV9yZWdzOworCisJCWNvbXBoeV9yZWdf c2V0MTYoYmFzZSArIENPTVBIWV9MQU5FX1JFR19ESVJFQ1QocmVnKSwKKwkJCQkgZGF0YSwgbWFz ayk7CisJfQorfQorCitzdGF0aWMgaW50IGNvbXBoeV9sYW5lX3JlZ19wb2xsKHN0cnVjdCBtdmVi dV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQl1MTYgcmVnLCB1MTYgYml0cywKKwkJCQl1 bG9uZyBzbGVlcF91cywgdWxvbmcgdGltZW91dF91cykKK3sKKwlpbnQgcmV0OworCisJaWYgKGxh bmUtPmlkID09IDIpIHsKKwkJdTMyIGRhdGE7CisKKwkJLyogbGFuZSAyIFBIWSByZWdpc3RlcnMg YXJlIGFjY2Vzc2VkIGluZGlyZWN0bHkgKi8KKwkJd3JpdGVsKHJlZyArIENPTVBIWV9MQU5FMl9S RUdTX0JBU0UsCisJCSAgICAgICBsYW5lLT5wcml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKworCQkg ICAgICAgQ09NUEhZX0xBTkUyX0lORElSX0FERFIpOworCisJCXJldCA9IHJlYWRsX3BvbGxfdGlt ZW91dChsYW5lLT5wcml2LT5sYW5lMl9waHlfaW5kaXJlY3QgKworCQkJCQkgQ09NUEhZX0xBTkUy X0lORElSX0RBVEEsCisJCQkJCSBkYXRhLCAoZGF0YSAmIGJpdHMpID09IGJpdHMsCisJCQkJCSBz bGVlcF91cywgdGltZW91dF91cyk7CisJfSBlbHNlIHsKKwkJdm9pZCBfX2lvbWVtICpiYXNlID0g bGFuZS0+aWQgPT0gMSA/CisJCQkJICAgICBsYW5lLT5wcml2LT5sYW5lMV9waHlfcmVncyA6CisJ CQkJICAgICBsYW5lLT5wcml2LT5sYW5lMF9waHlfcmVnczsKKwkJdTE2IGRhdGE7CisKKwkJcmV0 ID0gcmVhZHdfcG9sbF90aW1lb3V0KGJhc2UgKyBDT01QSFlfTEFORV9SRUdfRElSRUNUKHJlZyks CisJCQkJCSBkYXRhLCAoZGF0YSAmIGJpdHMpID09IGJpdHMsCisJCQkJCSBzbGVlcF91cywgdGlt ZW91dF91cyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY29tcGh5X3Bl cmlwaF9yZWdfc2V0KHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQkg IHU4IHJlZywgdTMyIGRhdGEsIHUzMiBtYXNrKQoreworCWNvbXBoeV9yZWdfc2V0KGxhbmUtPnBy aXYtPmNvbXBoeV9yZWdzICsgQ09NUEhZX1BIWV9SRUcobGFuZS0+aWQsIHJlZyksCisJCSAgICAg ICBkYXRhLCBtYXNrKTsKK30KKworc3RhdGljIGludCBjb21waHlfcGVyaXBoX3JlZ19wb2xsKHN0 cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSwKKwkJCQkgIHU4IHJlZywgdTMyIGJp dHMsCisJCQkJICB1bG9uZyBzbGVlcF91cywgdWxvbmcgdGltZW91dF91cykKK3sKKwl1MzIgZGF0 YTsKKworCXJldHVybiByZWFkbF9wb2xsX3RpbWVvdXQobGFuZS0+cHJpdi0+Y29tcGh5X3JlZ3Mg KworCQkJCSAgQ09NUEhZX1BIWV9SRUcobGFuZS0+aWQsIHJlZyksCisJCQkJICBkYXRhLCAoZGF0 YSAmIGJpdHMpID09IGJpdHMsCisJCQkJICBzbGVlcF91cywgdGltZW91dF91cyk7Cit9CisKKy8q IFBIWSBzZWxlY3RvciBjb25maWd1cmVzIHdpdGggY29ycmVzcG9uZGluZyBtb2RlcyAqLworc3Rh dGljIGludAorbXZlYnVfYTM3MDBfY29tcGh5X3NldF9waHlfc2VsZWN0b3Ioc3RydWN0IG12ZWJ1 X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCXUzMiBvbGQsIG5ldywgY2xyID0gMCwgc2V0 ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3dpdGNoIChsYW5lLT5tb2RlKSB7CisJ Y2FzZSBQSFlfTU9ERV9TQVRBOgorCQkvKiBTQVRBIG11c3QgYmUgaW4gTGFuZTIgKi8KKwkJaWYg KGxhbmUtPmlkID09IDIpCisJCQljbHIgPSBDT01QSFlfU0VMRUNUT1JfVVNCM19QSFlfU0VMX0JJ VDsKKwkJZWxzZQorCQkJZ290byBlcnJvcjsKKwkJYnJlYWs7CisKKwljYXNlIFBIWV9NT0RFX0VU SEVSTkVUOgorCQlpZiAobGFuZS0+aWQgPT0gMCkKKwkJCWNsciA9IENPTVBIWV9TRUxFQ1RPUl9V U0IzX0dCRTFfU0VMX0JJVDsKKwkJZWxzZSBpZiAobGFuZS0+aWQgPT0gMSkKKwkJCWNsciA9IENP TVBIWV9TRUxFQ1RPUl9QQ0lFX0dCRTBfU0VMX0JJVDsKKwkJZWxzZQorCQkJZ290byBlcnJvcjsK KwkJYnJlYWs7CisKKwljYXNlIFBIWV9NT0RFX1VTQl9IT1NUX1NTOgorCQlpZiAobGFuZS0+aWQg PT0gMikKKwkJCXNldCA9IENPTVBIWV9TRUxFQ1RPUl9VU0IzX1BIWV9TRUxfQklUOworCQllbHNl IGlmIChsYW5lLT5pZCA9PSAwKQorCQkJc2V0ID0gQ09NUEhZX1NFTEVDVE9SX1VTQjNfR0JFMV9T RUxfQklUOworCQllbHNlCisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKworCWNhc2UgUEhZX01P REVfUENJRToKKwkJLyogUENJRSBtdXN0IGJlIGluIExhbmUxICovCisJCWlmIChsYW5lLT5pZCA9 PSAxKQorCQkJc2V0ID0gQ09NUEhZX1NFTEVDVE9SX1BDSUVfR0JFMF9TRUxfQklUOworCQllbHNl CisJCQlnb3RvIGVycm9yOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gZXJyb3I7CisJ fQorCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZsYW5lLT5wcml2LT5sb2NrLCBmbGFncyk7CisK KwlvbGQgPSByZWFkbChsYW5lLT5wcml2LT5jb21waHlfcmVncyArIENPTVBIWV9TRUxFQ1RPUl9Q SFlfUkVHKTsKKwluZXcgPSAob2xkICYgfmNscikgfCBzZXQ7CisJd3JpdGVsKG5ldywgbGFuZS0+ cHJpdi0+Y29tcGh5X3JlZ3MgKyBDT01QSFlfU0VMRUNUT1JfUEhZX1JFRyk7CisKKwlyYXdfc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmbGFuZS0+cHJpdi0+bG9jaywgZmxhZ3MpOworCisJZGV2X2Ri ZyhsYW5lLT5kZXYsCisJCSJDT01QSFlbJWRdIG1vZGVbJWRdIGNoYW5nZWQgUEhZIHNlbGVjdG9y IDB4JTA4eCAtPiAweCUwOHhcbiIsCisJCWxhbmUtPmlkLCBsYW5lLT5tb2RlLCBvbGQsIG5ldyk7 CisKKwlyZXR1cm4gMDsKK2Vycm9yOgorCWRldl9lcnIobGFuZS0+ZGV2LCAiQ09NUEhZWyVkXSBt b2RlWyVkXSBpcyBpbnZhbGlkXG4iLCBsYW5lLT5pZCwKKwkJbGFuZS0+bW9kZSk7CisJcmV0dXJu IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQKK212ZWJ1X2EzNzAwX2NvbXBoeV9zYXRhX3Bvd2Vy X29uKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkKK3sKKwl1MzIgbWFzaywg ZGF0YSwgcmVmX2NsazsKKwlpbnQgcmV0OworCisJLyogQ29uZmlndXJlIHBoeSBzZWxlY3RvciBm b3IgU0FUQSAqLworCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfcGh5X3NlbGVjdG9yKGxh bmUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBDbGVhciBwaHkgaXNvbGF0aW9u IG1vZGUgdG8gbWFrZSBpdCB3b3JrIGluIG5vcm1hbCBtb2RlICovCisJY29tcGh5X2xhbmVfcmVn X3NldChsYW5lLCBDT01QSFlfSVNPTEFUSU9OX0NUUkwsCisJCQkgICAgMHgwLCBQSFlfSVNPTEFU RV9NT0RFKTsKKworCS8qIDAuIENoZWNrIHRoZSBQb2xhcml0eSBpbnZlcnQgYml0cyAqLworCWRh dGEgPSAweDA7CisJaWYgKGxhbmUtPmludmVydF90eCkKKwkJZGF0YSB8PSBUWERfSU5WRVJUX0JJ VDsKKwlpZiAobGFuZS0+aW52ZXJ0X3J4KQorCQlkYXRhIHw9IFJYRF9JTlZFUlRfQklUOworCW1h c2sgPSBUWERfSU5WRVJUX0JJVCB8IFJYRF9JTlZFUlRfQklUOworCWNvbXBoeV9sYW5lX3JlZ19z ZXQobGFuZSwgQ09NUEhZX1NZTkNfUEFUVEVSTiwgZGF0YSwgbWFzayk7CisKKwkvKiAxLiBTZWxl Y3QgNDAtYml0IGRhdGEgd2lkdGggKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBI WV9ESUdfTE9PUEJBQ0tfRU4sCisJCQkgICAgREFUQV9XSURUSF80MEJJVCwgU0VMX0RBVEFfV0lE VEhfTUFTSyk7CisKKwkvKiAyLiBTZWxlY3QgcmVmZXJlbmNlIGNsb2NrKDI1TSkgYW5kIFBIWSBt b2RlIChTQVRBKSAqLworCWlmIChsYW5lLT5wcml2LT54dGFsX2lzXzQwbSkKKwkJcmVmX2NsayA9 IFJFRl9GUkVGX1NFTF9TRVJERVNfNDBNSFo7CisJZWxzZQorCQlyZWZfY2xrID0gUkVGX0ZSRUZf U0VMX1NFUkRFU18yNU1IWjsKKworCWRhdGEgPSByZWZfY2xrIHwgQ09NUEhZX01PREVfU0FUQTsK KwltYXNrID0gUkVGX0ZSRUZfU0VMX01BU0sgfCBDT01QSFlfTU9ERV9NQVNLOworCWNvbXBoeV9s YW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BPV0VSX1BMTF9DVFJMLCBkYXRhLCBtYXNrKTsKKwor CS8qIDMuIFVzZSBtYXhpbXVtIFBMTCByYXRlIChubyBwb3dlciBzYXZlKSAqLworCWNvbXBoeV9s YW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0tWQ09fQ0FMX0NUUkwsCisJCQkgICAgVVNFX01BWF9Q TExfUkFURV9CSVQsIFVTRV9NQVhfUExMX1JBVEVfQklUKTsKKworCS8qIDQuIFJlc2V0IHJlc2Vy dmVkIGJpdCAqLworCWNvbXBoeV9zZXRfaW5kaXJlY3QobGFuZS0+cHJpdiwgQ09NUEhZX1JFU0VS VkVEX1JFRywKKwkJCSAgICAweDAsIFBIWUNUUkxfRlJNX1BJTl9CSVQpOworCisJLyogNS4gU2V0 IHZlbmRvci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIChJdCBpcyBkb25lIGluIHNhdGEgZHJpdmVy KSAqLworCS8qIFhYWDogaW4gVS1Cb290IGJlbG93IHNlcXVlbmNlIHdhcyBleGVjdXRlZCBpbiB0 aGlzIHBsYWNlLCBpbiBMaW51eAorCSAqIG5vdC4gIE5vdyBpdCBpcyBkb25lIG9ubHkgaW4gVS1C b290IGJlZm9yZSB0aGlzIGNvbXBoeQorCSAqIGluaXRpYWxpemF0aW9uIC0gdGVzdHMgc2hvd3Mg dGhhdCBpdCB3b3JrcyBvaywgYnV0IGluIGNhc2Ugb2YgYW55CisJICogZnV0dXJlIHByb2JsZW0g aXQgaXMgbGVmdCBmb3IgcmVmZXJlbmNlLgorCSAqICAgcmVnX3NldChNVkVCVV9SRUdTX0JBU0Ug KyAweGUwMGEwLCAwLCAweGZmZmZmZmZmKTsKKwkgKiAgIHJlZ19zZXQoTVZFQlVfUkVHU19CQVNF ICsgMHhlMDBhNCwgQklUKDYpLCBCSVQoNikpOworCSAqLworCisJLyogV2FpdCBmb3IgPiA1NSB1 cyB0byBhbGxvdyBQTEwgYmUgZW5hYmxlZCAqLworCXVkZWxheShQTExfU0VUX0RFTEFZX1VTKTsK KworCS8qIFBvbGxpbmcgc3RhdHVzICovCisJcmV0ID0gY29tcGh5X2xhbmVfcmVnX3BvbGwobGFu ZSwgQ09NUEhZX0RJR19MT09QQkFDS19FTiwKKwkJCQkgICBQTExfUkVBRFlfVFhfQklULCBDT01Q SFlfUExMX1NMRUVQLAorCQkJCSAgIENPTVBIWV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkgewor CQlkZXZfZXJyKGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFNBVEEgUExMXG4iKTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29tcGh5X2diZV9w aHlfaW5pdChzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUsCisJCQkJYm9vbCBp c18xZ2JwcykKK3sKKwlpbnQgYWRkciwgZml4X2lkeDsKKwl1MTYgdmFsOworCisJZml4X2lkeCA9 IDA7CisJZm9yIChhZGRyID0gMDsgYWRkciA8IDUxMjsgYWRkcisrKSB7CisJCS8qCisJCSAqIEFs bCBQSFkgcmVnaXN0ZXIgdmFsdWVzIGFyZSBkZWZpbmVkIGluIGZ1bGwgZm9yIDMuMTI1R2Jwcwor CQkgKiBTRVJERVMgc3BlZWQuIFRoZSB2YWx1ZXMgcmVxdWlyZWQgZm9yIDEuMjUgR2JwcyBhcmUg YWxtb3N0CisJCSAqIHRoZSBzYW1lIGFuZCBvbmx5IGZldyByZWdpc3RlcnMgc2hvdWxkIGJlICJm aXhlZCIgaW4KKwkJICogY29tcGFyaXNvbiB0byAzLjEyNSBHYnBzIHZhbHVlcy4gVGhlc2UgcmVn aXN0ZXIgdmFsdWVzIGFyZQorCQkgKiBzdG9yZWQgaW4gImdiZV9waHlfaW5pdF9maXgiIGFycmF5 LgorCQkgKi8KKwkJaWYgKCFpc18xZ2JwcyAmJiBnYmVfcGh5X2luaXRfZml4W2ZpeF9pZHhdLmFk ZHIgPT0gYWRkcikgeworCQkJLyogVXNlIG5ldyB2YWx1ZSAqLworCQkJdmFsID0gZ2JlX3BoeV9p bml0X2ZpeFtmaXhfaWR4XS52YWx1ZTsKKwkJCWlmIChmaXhfaWR4IDwgQVJSQVlfU0laRShnYmVf cGh5X2luaXRfZml4KSkKKwkJCQlmaXhfaWR4Kys7CisJCX0gZWxzZSB7CisJCQl2YWwgPSBnYmVf cGh5X2luaXRbYWRkcl07CisJCX0KKworCQljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIGFkZHIs IHZhbCwgMHhGRkZGKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK212ZWJ1X2EzNzAwX2NvbXBoeV9l dGhlcm5ldF9wb3dlcl9vbihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUpCit7 CisJdTMyIG1hc2ssIGRhdGEsIHNwZWVkX3NlbDsKKwlpbnQgcmV0OworCisJLyogU2V0IHNlbGVj dG9yICovCisJcmV0ID0gbXZlYnVfYTM3MDBfY29tcGh5X3NldF9waHlfc2VsZWN0b3IobGFuZSk7 CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogMS4gUmVzZXQgUEhZIGJ5IHNl dHRpbmcgUEhZIGlucHV0IHBvcnQgUElOX1JFU0VUPTEuCisJICogMi4gU2V0IFBIWSBpbnB1dCBw b3J0IFBJTl9UWF9JRExFPTEsIFBJTl9QVV9JVlJFRj0xIHRvIGtlZXAKKwkgKiAgICBQSFkgVFhQ L1RYTiBvdXRwdXQgdG8gaWRsZSBzdGF0ZSBkdXJpbmcgUEhZIGluaXRpYWxpemF0aW9uCisJICog My4gU2V0IFBIWSBpbnB1dCBwb3J0IFBJTl9QVV9QTEw9MCwgUElOX1BVX1JYPTAsIFBJTl9QVV9U WD0wLgorCSAqLworCWRhdGEgPSBQSU5fUFVfSVZSRUZfQklUIHwgUElOX1RYX0lETEVfQklUIHwg UElOX1JFU0VUX0NPTVBIWV9CSVQ7CisJbWFzayA9IGRhdGEgfCBQSU5fUkVTRVRfQ09SRV9CSVQg fCBQSU5fUFVfUExMX0JJVCB8IFBJTl9QVV9SWF9CSVQgfAorCSAgICAgICBQSU5fUFVfVFhfQklU IHwgUEhZX1JYX0lOSVRfQklUOworCWNvbXBoeV9wZXJpcGhfcmVnX3NldChsYW5lLCBDT01QSFlf UEhZX0NGRzEsIGRhdGEsIG1hc2spOworCisJLyogNC4gUmVsZWFzZSByZXNldCB0byB0aGUgUEhZ IGJ5IHNldHRpbmcgUElOX1JFU0VUPTAuICovCisJZGF0YSA9IDB4MDsKKwltYXNrID0gUElOX1JF U0VUX0NPTVBIWV9CSVQ7CisJY29tcGh5X3BlcmlwaF9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSFlf Q0ZHMSwgZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDUuIFNldCBQSU5fUEhZX0dFTl9UWFszOjBd IGFuZCBQSU5fUEhZX0dFTl9SWFszOjBdIHRvIGRlY2lkZSBDT01QSFkKKwkgKiBiaXQgcmF0ZQor CSAqLworCXN3aXRjaCAobGFuZS0+c3VibW9kZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RF X1NHTUlJOgorCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDoKKwkJLyogU0dNSUkg MUcsIFNlckRlcyBzcGVlZCAxLjI1RyAqLworCQlzcGVlZF9zZWwgPSBTRVJERVNfU1BFRURfMV8y NV9HOworCQlicmVhazsKKwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6CisJCS8q IDI1MDBCYXNlLVgsIFNlckRlcyBzcGVlZCAzLjEyNUcgKi8KKwkJc3BlZWRfc2VsID0gU0VSREVT X1NQRUVEXzNfMTI1X0c7CisJCWJyZWFrOwogCWRlZmF1bHQ6CisJCS8qIE90aGVyIHJhdGVzIGFy ZSBub3Qgc3VwcG9ydGVkICovCisJCWRldl9lcnIobGFuZS0+ZGV2LAorCQkJInVuc3VwcG9ydGVk IHBoeSBzcGVlZCAlZCBvbiBjb21waHkgbGFuZSVkXG4iLAorCQkJbGFuZS0+c3VibW9kZSwgbGFu ZS0+aWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJZGF0YSA9IEdFTl9SWF9TRUxfVkFMVUUo c3BlZWRfc2VsKSB8IEdFTl9UWF9TRUxfVkFMVUUoc3BlZWRfc2VsKTsKKwltYXNrID0gR0VOX1JY X1NFTF9NQVNLIHwgR0VOX1RYX1NFTF9NQVNLOworCWNvbXBoeV9wZXJpcGhfcmVnX3NldChsYW5l LCBDT01QSFlfUEhZX0NGRzEsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiA2LiBXYWl0IDEwbVMg Zm9yIGJhbmRnYXAgYW5kIHJlZmVyZW5jZSBjbG9ja3MgdG8gc3RhYmlsaXplOyB0aGVuCisJICog c3RhcnQgU1cgcHJvZ3JhbW1pbmcuCisJICovCisJbWRlbGF5KDEwKTsKKworCS8qIDcuIFByb2dy YW0gQ09NUEhZIHJlZ2lzdGVyIFBIWV9NT0RFICovCisJZGF0YSA9IENPTVBIWV9NT0RFX1NFUkRF UzsKKwltYXNrID0gQ09NUEhZX01PREVfTUFTSzsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUs IENPTVBIWV9QT1dFUl9QTExfQ1RSTCwgZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDguIFNldCBD T01QSFkgcmVnaXN0ZXIgUkVGQ0xLX1NFTCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgUkVGQ0xLCisJ ICogc291cmNlCisJICovCisJZGF0YSA9IDB4MDsKKwltYXNrID0gUEhZX1JFRl9DTEtfU0VMOwor CWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX01JU0NfQ1RSTDAsIGRhdGEsIG1hc2sp OworCisJLyoKKwkgKiA5LiBTZXQgY29ycmVjdCByZWZlcmVuY2UgY2xvY2sgZnJlcXVlbmN5IGlu IENPTVBIWSByZWdpc3RlcgorCSAqIFJFRl9GUkVGX1NFTC4KKwkgKi8KKwlpZiAobGFuZS0+cHJp di0+eHRhbF9pc180MG0pCisJCWRhdGEgPSBSRUZfRlJFRl9TRUxfU0VSREVTXzUwTUhaOworCWVs c2UKKwkJZGF0YSA9IFJFRl9GUkVGX1NFTF9TRVJERVNfMjVNSFo7CisKKwltYXNrID0gUkVGX0ZS RUZfU0VMX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExM X0NUUkwsIGRhdGEsIG1hc2spOworCisJLyogMTAuIFByb2dyYW0gQ09NUEhZIHJlZ2lzdGVyIFBI WV9HRU5fTUFYWzE6MF0KKwkgKiBUaGlzIHN0ZXAgaXMgbWVudGlvbmVkIGluIHRoZSBmbG93IHJl Y2VpdmVkIGZyb20gdmVyaWZpY2F0aW9uIHRlYW0uCisJICogSG93ZXZlciB0aGUgUEhZX0dFTl9N QVggdmFsdWUgaXMgb25seSBtZWFuaW5nZnVsIGZvciBvdGhlciBpbnRlcmZhY2VzCisJICogKG5v dCBTRVJERVMpLiBGb3IgaW5zdGFuY2UsIGl0IHNlbGVjdHMgU0FUQSBzcGVlZCAxLjUvMy82IEdi cHMgb3IKKwkgKiBQQ0llIHNwZWVkIDIuNS81IEdicHMKKwkgKi8KKworCS8qCisJICogMTEuIFBy b2dyYW0gQ09NUEhZIHJlZ2lzdGVyIFNFTF9CSVRTIHRvIHNldCBjb3JyZWN0IHBhcmFsbGVsIGRh dGEKKwkgKiBidXMgd2lkdGgKKwkgKi8KKwlkYXRhID0gREFUQV9XSURUSF8xMEJJVDsKKwltYXNr ID0gU0VMX0RBVEFfV0lEVEhfTUFTSzsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBI WV9ESUdfTE9PUEJBQ0tfRU4sIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAxMi4gQXMgbG9uZyBh cyBERkUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgZW5hYmxlZCBpbiBhbnkgbW9kZSwKKwkgKiBDT01Q SFkgcmVnaXN0ZXIgREZFX1VQREFURV9FTls1OjBdIHNoYWxsIGJlIHByb2dyYW1tZWQgdG8gMHgz RgorCSAqIGZvciByZWFsIGNoaXAgZHVyaW5nIENPTVBIWSBwb3dlciBvbi4KKwkgKiBUaGUgc3Rl cCAxNCBleGlzdHMgKGFuZCBlbXB0eSkgaW4gdGhlIG9yaWdpbmFsIGluaXRpYWxpemF0aW9uIGZs b3cKKwkgKiBvYnRhaW5lZCBmcm9tIHRoZSB2ZXJpZmljYXRpb24gdGVhbS4gQWNjb3JkaW5nIHRv IHRoZSBmdW5jdGlvbmFsCisJICogc3BlY2lmaWNhdGlvbiBERkVfVVBEQVRFX0VOIGFscmVhZHkg aGFzIHRoZSBkZWZhdWx0IHZhbHVlIDB4M0YKKwkgKi8KKworCS8qCisJICogMTMuIFByb2dyYW0g Q09NUEhZIEdFTiByZWdpc3RlcnMuCisJICogVGhlc2UgcmVnaXN0ZXJzIHNob3VsZCBiZSBwcm9n cmFtbWVkIGJhc2VkIG9uIHRoZSBsYWIgdGVzdGluZyByZXN1bHQKKwkgKiB0byBhY2hpZXZlIG9w dGltYWwgcGVyZm9ybWFuY2UuIFBsZWFzZSBjb250YWN0IHRoZSBDRUEgZ3JvdXAgdG8gZ2V0CisJ ICogdGhlIHJlbGF0ZWQgR0VOIHRhYmxlIGR1cmluZyByZWFsIGNoaXAgYnJpbmctdXAuIFdlIG9u bHkgcmVxdWlyZWQgdG8KKwkgKiBydW4gdGhvdWdoIHRoZSBlbnRpcmUgcmVnaXN0ZXJzIHByb2dy YW1taW5nIGZsb3cgZGVmaW5lZCBieQorCSAqICJjb21waHlfZ2JlX3BoeV9pbml0IiB3aGVuIHRo ZSBSRUYgY2xvY2sgaXMgNDAgTUh6LiBGb3IgUkVGIGNsb2NrCisJICogMjUgTUh6IHRoZSBkZWZh dWx0IHZhbHVlcyBzdG9yZWQgaW4gUEhZIHJlZ2lzdGVycyBhcmUgT0suCisJICovCisJZGV2X2Ri ZyhsYW5lLT5kZXYsICJSdW5uaW5nIEMtRFBJIHBoeSBpbml0ICVzIG1vZGVcbiIsCisJCWxhbmUt PnN1Ym1vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWCA/ICIyRzUiIDogIjFHIik7 CisJaWYgKGxhbmUtPnByaXYtPnh0YWxfaXNfNDBtKQorCQljb21waHlfZ2JlX3BoeV9pbml0KGxh bmUsCisJCQkJICAgIGxhbmUtPnN1Ym1vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNF WCk7CisKKwkvKgorCSAqIDE0LiBbU2ltdWxhdGlvbiBPbmx5XSBzaG91bGQgbm90IGJlIHVzZWQg Zm9yIHJlYWwgY2hpcC4KKwkgKiBCeSBwYXNzIHBvd2VyIHVwIGNhbGlicmF0aW9uIGJ5IHByb2dy YW1taW5nIEVYVF9GT1JDRV9DQUxfRE9ORQorCSAqIChSMDJoWzldKSB0byAxIHRvIHNob3J0ZW4g Q09NUEhZIHNpbXVsYXRpb24gdGltZS4KKwkgKi8KKworCS8qCisJICogMTUuIFtTaW11bGF0aW9u IE9ubHk6IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgcmVhbCBjaGlwXQorCSAqIFByb2dyYW0gQ09N UEhZIHJlZ2lzdGVyIEZBU1RfREZFX1RJTUVSX0VOPTEgdG8gc2hvcnRlbiBSWCB0cmFpbmluZwor CSAqIHNpbXVsYXRpb24gdGltZS4KKwkgKi8KKworCS8qCisJICogMTYuIENoZWNrIHRoZSBQSFkg UG9sYXJpdHkgaW52ZXJ0IGJpdAorCSAqLworCWRhdGEgPSAweDA7CisJaWYgKGxhbmUtPmludmVy dF90eCkKKwkJZGF0YSB8PSBUWERfSU5WRVJUX0JJVDsKKwlpZiAobGFuZS0+aW52ZXJ0X3J4KQor CQlkYXRhIHw9IFJYRF9JTlZFUlRfQklUOworCW1hc2sgPSBUWERfSU5WRVJUX0JJVCB8IFJYRF9J TlZFUlRfQklUOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1NZTkNfUEFUVEVS TiwgZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDE3LiBTZXQgUEhZIGlucHV0IHBvcnRzIFBJTl9Q VV9QTEwsIFBJTl9QVV9UWCBhbmQgUElOX1BVX1JYIHRvIDEgdG8KKwkgKiBzdGFydCBQSFkgcG93 ZXIgdXAgc2VxdWVuY2UuIEFsbCB0aGUgUEhZIHJlZ2lzdGVyIHByb2dyYW1taW5nIHNob3VsZAor CSAqIGJlIGRvbmUgYmVmb3JlIFBJTl9QVV9QTEw9MS4gVGhlcmUgc2hvdWxkIGJlIG5vIHJlZ2lz dGVyIHByb2dyYW1taW5nCisJICogZm9yIG5vcm1hbCBQSFkgb3BlcmF0aW9uIGZyb20gdGhpcyBw b2ludC4KKwkgKi8KKwlkYXRhID0gUElOX1BVX1BMTF9CSVQgfCBQSU5fUFVfUlhfQklUIHwgUElO X1BVX1RYX0JJVDsKKwltYXNrID0gZGF0YTsKKwljb21waHlfcGVyaXBoX3JlZ19zZXQobGFuZSwg Q09NUEhZX1BIWV9DRkcxLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogMTguIFdhaXQgZm9yIFBI WSBwb3dlciB1cCBzZXF1ZW5jZSB0byBmaW5pc2ggYnkgY2hlY2tpbmcgb3V0cHV0IHBvcnRzCisJ ICogUElOX1BMTF9SRUFEWV9UWD0xIGFuZCBQSU5fUExMX1JFQURZX1JYPTEuCisJICovCisJcmV0 ID0gY29tcGh5X3BlcmlwaF9yZWdfcG9sbChsYW5lLCBDT01QSFlfUEhZX1NUQVQxLAorCQkJCSAg ICAgUEhZX1BMTF9SRUFEWV9UWF9CSVQgfAorCQkJCSAgICAgUEhZX1BMTF9SRUFEWV9SWF9CSVQs CisJCQkJICAgICBDT01QSFlfUExMX1NMRUVQLCBDT01QSFlfUExMX1RJTUVPVVQpOworCWlmIChy ZXQpIHsKKwkJZGV2X2VycihsYW5lLT5kZXYsICJGYWlsZWQgdG8gbG9jayBQTEwgZm9yIFNFUkRF UyBQSFkgJWRcbiIsCisJCQlsYW5lLT5pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkg KiAxOS4gU2V0IENPTVBIWSBpbnB1dCBwb3J0IFBJTl9UWF9JRExFPTAKKwkgKi8KKwljb21waHlf cGVyaXBoX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BIWV9DRkcxLCAweDAsIFBJTl9UWF9JRExFX0JJ VCk7CisKKwkvKgorCSAqIDIwLiBBZnRlciB2YWxpZCBkYXRhIGFwcGVhciBvbiBQSU5fUlhEQVRB IGJ1cywgc2V0IFBJTl9SWF9JTklUPTEuIFRvCisJICogc3RhcnQgUlggaW5pdGlhbGl6YXRpb24u IFBJTl9SWF9JTklUX0RPTkUgd2lsbCBiZSBjbGVhcmVkIHRvIDAgYnkgdGhlCisJICogUEhZIEFm dGVyIFJYIGluaXRpYWxpemF0aW9uIGlzIGRvbmUsIFBJTl9SWF9JTklUX0RPTkUgd2lsbCBiZSBz ZXQgdG8KKwkgKiAxIGJ5IENPTVBIWSBTZXQgUElOX1JYX0lOSVQ9MCBhZnRlciBQSU5fUlhfSU5J VF9ET05FPSAxLiBQbGVhc2UKKwkgKiByZWZlciB0byBSWCBpbml0aWFsaXphdGlvbiBwYXJ0IGZv ciBkZXRhaWxzLgorCSAqLworCWNvbXBoeV9wZXJpcGhfcmVnX3NldChsYW5lLCBDT01QSFlfUEhZ X0NGRzEsCisJCQkgICAgICBQSFlfUlhfSU5JVF9CSVQsIFBIWV9SWF9JTklUX0JJVCk7CisKKwly ZXQgPSBjb21waHlfcGVyaXBoX3JlZ19wb2xsKGxhbmUsIENPTVBIWV9QSFlfU1RBVDEsCisJCQkJ ICAgICBQSFlfUExMX1JFQURZX1RYX0JJVCB8CisJCQkJICAgICBQSFlfUExMX1JFQURZX1JYX0JJ VCwKKwkJCQkgICAgIENPTVBIWV9QTExfU0xFRVAsIENPTVBIWV9QTExfVElNRU9VVCk7CisJaWYg KHJldCkgeworCQlkZXZfZXJyKGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFBMTCBmb3IgU0VS REVTIFBIWSAlZFxuIiwKKwkJCWxhbmUtPmlkKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQg PSBjb21waHlfcGVyaXBoX3JlZ19wb2xsKGxhbmUsIENPTVBIWV9QSFlfU1RBVDEsCisJCQkJICAg ICBQSFlfUlhfSU5JVF9ET05FX0JJVCwKKwkJCQkgICAgIENPTVBIWV9QTExfU0xFRVAsIENPTVBI WV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGxhbmUtPmRldiwgIkZhaWxl ZCB0byBpbml0IFJYIG9mIFNFUkRFUyBQSFkgJWRcbiIsCisJCQlsYW5lLT5pZCk7CisJCXJldHVy biByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK212ZWJ1X2EzNzAwX2Nv bXBoeV91c2IzX3Bvd2VyX29uKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSkK K3sKKwl1MzIgbWFzaywgZGF0YSwgY2ZnLCByZWZfY2xrOworCWludCByZXQ7CisKKwkvKiBTZXQg cGh5IHNlY2xlY3RvciAqLworCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9zZXRfcGh5X3NlbGVj dG9yKGxhbmUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIDAuIFNldCBQ SFkgT1RHIENvbnRyb2woMHg1ZDAzNCksIGJpdCA0LCBQb3dlciB1cCBPVEcgbW9kdWxlIFRoZQor CSAqIHJlZ2lzdGVyIGJlbG9uZyB0byBVVE1JIG1vZHVsZSwgc28gaXQgaXMgc2V0IGluIFVUTUkg cGh5IGRyaXZlci4KKwkgKi8KKworCS8qCisJICogMS4gU2V0IFBSRF9UWERFRU1QSCAoMy41ZGIg ZGUtZW1waCkKKwkgKi8KKwlkYXRhID0gUFJEX1RYREVFTVBIMF9NQVNLOworCW1hc2sgPSBQUkRf VFhERUVNUEgwX01BU0sgfCBQUkRfVFhNQVJHSU5fTUFTSyB8IFBSRF9UWFNXSU5HX01BU0sgfAor CSAgICAgICBDRkdfVFhfQUxJR05fUE9TX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5l LCBDT01QSFlfUElQRV9MQU5FX0NGRzAsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAyLiBTZXQg QklUMDogZW5hYmxlIHRyYW5zbWl0dGVyIGluIGhpZ2ggaW1wZWRhbmNlIG1vZGUKKwkgKiAgICBT ZXQgQklUWzM6NF06IGRlbGF5IDIgY2xvY2sgY3ljbGVzIGZvciBIaVogb2ZmIGxhdGVuY3kKKwkg KiAgICBTZXQgQklUNjogVHggZGV0ZWN0IFJ4IGF0IEhpWiBtb2RlCisJICogICAgVW5zZXQgQklU MTU6IHNldCB0byAwIHRvIHNldCBVU0IzIERlLWVtcGhhc2l6ZSBsZXZlbCB0byAtMy41ZGIKKwkg KiAgICAgICAgICAgIHRvZ2V0aGVyIHdpdGggYml0IDAgb2YgQ09NUEhZX1BJUEVfTEFORV9DRkcw IHJlZ2lzdGVyCisJICovCisJZGF0YSA9IFRYX0RFVF9SWF9NT0RFIHwgR0VOMl9UWF9EQVRBX0RM WV9ERUZUIHwgVFhfRUxFQ19JRExFX01PREVfRU47CisJbWFzayA9IFBSRF9UWERFRU1QSDFfTUFT SyB8IFRYX0RFVF9SWF9NT0RFIHwgR0VOMl9UWF9EQVRBX0RMWV9NQVNLIHwKKwkgICAgICAgVFhf RUxFQ19JRExFX01PREVfRU47CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQ RV9MQU5FX0NGRzEsIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAzLiBTZXQgU3ByZWFkIFNwZWN0 cnVtIENsb2NrIEVuYWJsZWQKKwkgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBI WV9QSVBFX0xBTkVfQ0ZHNCwKKwkJCSAgICBTUFJFQURfU1BFQ1RSVU1fQ0xLX0VOLCBTUFJFQURf U1BFQ1RSVU1fQ0xLX0VOKTsKKworCS8qCisJICogNC4gU2V0IE92ZXJyaWRlIE1hcmdpbmluZyBD b250cm9scyBGcm9tIHRoZSBNQUM6CisJICogICAgVXNlIG1hcmdpbmluZyBzaWduYWxzIGZyb20g bGFuZSBjb25maWd1cmF0aW9uCisJICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01Q SFlfUElQRV9URVNUX01PREVfQ1RSTCwKKwkJCSAgICBNT0RFX01BUkdJTl9PVkVSUklERSwgMHhG RkZGKTsKKworCS8qCisJICogNS4gU2V0IExhbmUtdG8tTGFuZSBCdW5kbGUgQ2xvY2sgU2FtcGxp bmcgUGVyaW9kID0gcGVyIFBDTEsgY3ljbGVzCisJICogICAgc2V0IE1vZGUgQ2xvY2sgU291cmNl ID0gUENMSyBpcyBnZW5lcmF0ZWQgZnJvbSBSRUZDTEsKKwkgKi8KKwlkYXRhID0gMHgwOworCW1h c2sgPSBNT0RFX0NMS19TUkMgfCBCVU5ETEVfUEVSSU9EX1NFTCB8IEJVTkRMRV9QRVJJT0RfU0NB TEVfTUFTSyB8CisJICAgICAgIEJVTkRMRV9TQU1QTEVfQ1RSTCB8IFBMTF9SRUFEWV9ETFlfTUFT SzsKKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX0NMS19TUkNfTE8sIGRh dGEsIG1hc2spOworCisJLyoKKwkgKiA2LiBTZXQgRzIgU3ByZWFkIFNwZWN0cnVtIENsb2NrIEFt cGxpdHVkZSBhdCA0SworCSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0dF TjJfU0VUMiwKKwkJCSAgICBHUzJfVFhfU1NDX0FNUF80MTI4LCBHUzJfVFhfU1NDX0FNUF9NQVNL KTsKKworCS8qCisJICogNy4gVW5zZXQgRzMgU3ByZWFkIFNwZWN0cnVtIENsb2NrIEFtcGxpdHVk ZQorCSAqICAgIHNldCBHMyBUWCBhbmQgUlggUmVnaXN0ZXIgTWFzdGVyIEN1cnJlbnQgU2VsZWN0 CisJICovCisJZGF0YSA9IEdTMl9WUkVHX1JYVFhfTUFTX0lTRVRfNjBVOworCW1hc2sgPSBHUzJf VFhfU1NDX0FNUF9NQVNLIHwgR1MyX1ZSRUdfUlhUWF9NQVNfSVNFVF9NQVNLIHwKKwkgICAgICAg R1MyX1JTVkRfNl8wX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfR0VO M19TRVQyLCBkYXRhLCBtYXNrKTsKKworCS8qCisJICogOC4gQ2hlY2sgY3J5c3RhbCBqdW1wZXIg c2V0dGluZyBhbmQgcHJvZ3JhbSB0aGUgUG93ZXIgYW5kIFBMTCBDb250cm9sCisJICogYWNjb3Jk aW5nbHkgQ2hhbmdlIFJYIHdhaXQKKwkgKi8KKwlpZiAobGFuZS0+cHJpdi0+eHRhbF9pc180MG0p IHsKKwkJcmVmX2NsayA9IFJFRl9GUkVGX1NFTF9QQ0lFX1VTQjNfNDBNSFo7CisJCWNmZyA9IENG R19QTV9SWERMT1pfV0FJVF8xMl9VTklUOworCX0gZWxzZSB7CisJCXJlZl9jbGsgPSBSRUZfRlJF Rl9TRUxfUENJRV9VU0IzXzI1TUhaOworCQljZmcgPSBDRkdfUE1fUlhETE9aX1dBSVRfN19VTklU OworCX0KKworCWRhdGEgPSBQVV9JVlJFRl9CSVQgfCBQVV9QTExfQklUIHwgUFVfUlhfQklUIHwg UFVfVFhfQklUIHwKKwkgICAgICAgUFVfVFhfSU5UUF9CSVQgfCBQVV9ERkVfQklUIHwgQ09NUEhZ X01PREVfVVNCMyB8IHJlZl9jbGs7CisJbWFzayA9IFBVX0lWUkVGX0JJVCB8IFBVX1BMTF9CSVQg fCBQVV9SWF9CSVQgfCBQVV9UWF9CSVQgfAorCSAgICAgICBQVV9UWF9JTlRQX0JJVCB8IFBVX0RG RV9CSVQgfCBQTExfTE9DS19CSVQgfCBDT01QSFlfTU9ERV9NQVNLIHwKKwkgICAgICAgUkVGX0ZS RUZfU0VMX01BU0s7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExM X0NUUkwsIGRhdGEsIG1hc2spOworCisJZGF0YSA9IENGR19QTV9SWERFTl9XQUlUXzFfVU5JVCB8 IGNmZzsKKwltYXNrID0gQ0ZHX1BNX09TQ0NMS19XQUlUX01BU0sgfCBDRkdfUE1fUlhERU5fV0FJ VF9NQVNLIHwKKwkgICAgICAgQ0ZHX1BNX1JYRExPWl9XQUlUX01BU0s7CisJY29tcGh5X2xhbmVf cmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9QV1JfTUdNX1RJTTEsIGRhdGEsIG1hc2spOworCisJ LyoKKwkgKiA5LiBFbmFibGUgaWRsZSBzeW5jCisJICovCisJY29tcGh5X2xhbmVfcmVnX3NldChs YW5lLCBDT01QSFlfSURMRV9TWU5DX0VOLAorCQkJICAgIElETEVfU1lOQ19FTiwgSURMRV9TWU5D X0VOKTsKKworCS8qCisJICogMTAuIEVuYWJsZSB0aGUgb3V0cHV0IG9mIDUwME0gY2xvY2sKKwkg Ki8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9NSVNDX0NUUkwwLCBDTEs1MDBN X0VOLCBDTEs1MDBNX0VOKTsKKworCS8qCisJICogMTEuIFNldCAyMC1iaXQgZGF0YSB3aWR0aAor CSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0RJR19MT09QQkFDS19FTiwK KwkJCSAgICBEQVRBX1dJRFRIXzIwQklULCAweEZGRkYpOworCisJLyoKKwkgKiAxMi4gT3ZlcnJp ZGUgU3BlZWRfUExMIHZhbHVlIGFuZCB1c2UgTUFDIFBMTAorCSAqLworCWRhdGEgPSBTUEVFRF9Q TExfVkFMVUVfMTYgfCBVU0VfTUFYX1BMTF9SQVRFX0JJVDsKKwltYXNrID0gMHhGRkZGOworCWNv bXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0tWQ09fQ0FMX0NUUkwsIGRhdGEsIG1hc2sp OworCisJLyoKKwkgKiAxMy4gQ2hlY2sgdGhlIFBvbGFyaXR5IGludmVydCBiaXQKKwkgKi8KKwlk YXRhID0gMHgwOworCWlmIChsYW5lLT5pbnZlcnRfdHgpCisJCWRhdGEgfD0gVFhEX0lOVkVSVF9C SVQ7CisJaWYgKGxhbmUtPmludmVydF9yeCkKKwkJZGF0YSB8PSBSWERfSU5WRVJUX0JJVDsKKwlt YXNrID0gVFhEX0lOVkVSVF9CSVQgfCBSWERfSU5WRVJUX0JJVDsKKwljb21waHlfbGFuZV9yZWdf c2V0KGxhbmUsIENPTVBIWV9TWU5DX1BBVFRFUk4sIGRhdGEsIG1hc2spOworCisJLyoKKwkgKiAx NC4gU2V0IG1heCBzcGVlZCBnZW5lcmF0aW9uIHRvIFVTQjMuMCA1R2JwcworCSAqLworCWNvbXBo eV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1NZTkNfTUFTS19HRU4sCisJCQkgICAgUEhZX0dF Tl9NQVhfVVNCM181RywgUEhZX0dFTl9NQVhfTUFTSyk7CisKKwkvKgorCSAqIDE1LiBTZXQgY2Fw YWNpdG9yIHZhbHVlIGZvciBGRkUgZ2FpbiBwZWFraW5nIHRvIDB4RgorCSAqLworCWNvbXBoeV9s YW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX0dFTjJfU0VUMywKKwkJCSAgICBHUzNfRkZFX0NBUF9T RUxfVkFMVUUsIEdTM19GRkVfQ0FQX1NFTF9NQVNLKTsKKworCS8qCisJICogMTYuIFJlbGVhc2Ug U1cgcmVzZXQKKwkgKi8KKwlkYXRhID0gTU9ERV9DT1JFX0NMS19GUkVRX1NFTCB8IE1PREVfUElQ RV9XSURUSF8zMiB8IE1PREVfUkVGRElWX0JZXzQ7CisJbWFzayA9IDB4RkZGRjsKKwljb21waHlf bGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSVBFX1JTVF9DTEtfQ1RSTCwgZGF0YSwgbWFzayk7 CisKKwkvKiBXYWl0IGZvciA+IDU1IHVzIHRvIGFsbG93IFBDTEsgYmUgZW5hYmxlZCAqLworCXVk ZWxheShQTExfU0VUX0RFTEFZX1VTKTsKKworCXJldCA9IGNvbXBoeV9sYW5lX3JlZ19wb2xsKGxh bmUsIENPTVBIWV9QSVBFX0xBTkVfU1RBVDEsIFRYRENMS19QQ0xLX0VOLAorCQkJCSAgIENPTVBI WV9QTExfU0xFRVAsIENPTVBIWV9QTExfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJy KGxhbmUtPmRldiwgIkZhaWxlZCB0byBsb2NrIFVTQjMgUExMXG4iKTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXZlYnVfYTM3MDBfY29tcGh5X3Bj aWVfcG93ZXJfb24oc3RydWN0IG12ZWJ1X2EzNzAwX2NvbXBoeV9sYW5lICpsYW5lKQoreworCXUz MiBtYXNrLCBkYXRhLCByZWZfY2xrOworCWludCByZXQ7CisKKwkvKiBDb25maWd1cmUgcGh5IHNl bGVjdG9yIGZvciBQQ0llICovCisJcmV0ID0gbXZlYnVfYTM3MDBfY29tcGh5X3NldF9waHlfc2Vs ZWN0b3IobGFuZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIDEuIEVuYWJsZSBt YXggUExMLiAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfTEFORV9D RkcxLAorCQkJICAgIFVTRV9NQVhfUExMX1JBVEVfRU4sIFVTRV9NQVhfUExMX1JBVEVfRU4pOwor CisJLyogMi4gU2VsZWN0IDIwIGJpdCBTRVJERVMgaW50ZXJmYWNlLiAqLworCWNvbXBoeV9sYW5l X3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfQ0xLX1NSQ19MTywKKwkJCSAgICBDRkdfU0VMXzIw QiwgQ0ZHX1NFTF8yMEIpOworCisJLyogMy4gRm9yY2UgdG8gdXNlIHJlZyBzZXR0aW5nIGZvciBQ Q0llIG1vZGUgKi8KKwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9NSVNDX0NUUkwx LAorCQkJICAgIFNFTF9CSVRTX1BDSUVfRk9SQ0UsIFNFTF9CSVRTX1BDSUVfRk9SQ0UpOworCisJ LyogNC4gQ2hhbmdlIFJYIHdhaXQgKi8KKwlkYXRhID0gQ0ZHX1BNX1JYREVOX1dBSVRfMV9VTklU IHwgQ0ZHX1BNX1JYRExPWl9XQUlUXzEyX1VOSVQ7CisJbWFzayA9IENGR19QTV9PU0NDTEtfV0FJ VF9NQVNLIHwgQ0ZHX1BNX1JYREVOX1dBSVRfTUFTSyB8CisJICAgICAgIENGR19QTV9SWERMT1pf V0FJVF9NQVNLOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfUFdSX01H TV9USU0xLCBkYXRhLCBtYXNrKTsKKworCS8qIDUuIEVuYWJsZSBpZGxlIHN5bmMgKi8KKwljb21w aHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9JRExFX1NZTkNfRU4sCisJCQkgICAgSURMRV9T WU5DX0VOLCBJRExFX1NZTkNfRU4pOworCisJLyogNi4gRW5hYmxlIHRoZSBvdXRwdXQgb2YgMTAw TS8xMjVNLzUwME0gY2xvY2sgKi8KKwlkYXRhID0gQ0xLNTAwTV9FTiB8IFRYRENMS18yWF9TRUwg fCBDTEsxMDBNXzEyNU1fRU47CisJbWFzayA9IGRhdGE7CisJY29tcGh5X2xhbmVfcmVnX3NldChs YW5lLCBDT01QSFlfTUlTQ19DVFJMMCwgZGF0YSwgbWFzayk7CisKKwkvKgorCSAqIDcuIEVuYWJs ZSBUWCwgUENJRSBnbG9iYWwgcmVnaXN0ZXIsIDB4ZDAwNzQ4MTQsIGl0IGlzIGRvbmUgaW4KKwkg KiBQQ0ktRSBkcml2ZXIKKwkgKi8KKworCS8qCisJICogOC4gQ2hlY2sgY3J5c3RhbCBqdW1wZXIg c2V0dGluZyBhbmQgcHJvZ3JhbSB0aGUgUG93ZXIgYW5kIFBMTAorCSAqIENvbnRyb2wgYWNjb3Jk aW5nbHkKKwkgKi8KKworCWlmIChsYW5lLT5wcml2LT54dGFsX2lzXzQwbSkKKwkJcmVmX2NsayA9 IFJFRl9GUkVGX1NFTF9QQ0lFX1VTQjNfNDBNSFo7CisJZWxzZQorCQlyZWZfY2xrID0gUkVGX0ZS RUZfU0VMX1BDSUVfVVNCM18yNU1IWjsKKworCWRhdGEgPSBQVV9JVlJFRl9CSVQgfCBQVV9QTExf QklUIHwgUFVfUlhfQklUIHwgUFVfVFhfQklUIHwKKwkgICAgICAgUFVfVFhfSU5UUF9CSVQgfCBQ VV9ERkVfQklUIHwgQ09NUEhZX01PREVfUENJRSB8IHJlZl9jbGs7CisJbWFzayA9IDB4RkZGRjsK Kwljb21waHlfbGFuZV9yZWdfc2V0KGxhbmUsIENPTVBIWV9QT1dFUl9QTExfQ1RSTCwgZGF0YSwg bWFzayk7CisKKwkvKiA5LiBPdmVycmlkZSBTcGVlZF9QTEwgdmFsdWUgYW5kIHVzZSBNQUMgUExM ICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfS1ZDT19DQUxfQ1RSTCwKKwkJ CSAgICBTUEVFRF9QTExfVkFMVUVfMTYgfCBVU0VfTUFYX1BMTF9SQVRFX0JJVCwKKwkJCSAgICAw eEZGRkYpOworCisJLyogMTAuIENoZWNrIHRoZSBQb2xhcml0eSBpbnZlcnQgYml0ICovCisJZGF0 YSA9IDB4MDsKKwlpZiAobGFuZS0+aW52ZXJ0X3R4KQorCQlkYXRhIHw9IFRYRF9JTlZFUlRfQklU OworCWlmIChsYW5lLT5pbnZlcnRfcngpCisJCWRhdGEgfD0gUlhEX0lOVkVSVF9CSVQ7CisJbWFz ayA9IFRYRF9JTlZFUlRfQklUIHwgUlhEX0lOVkVSVF9CSVQ7CisJY29tcGh5X2xhbmVfcmVnX3Nl dChsYW5lLCBDT01QSFlfU1lOQ19QQVRURVJOLCBkYXRhLCBtYXNrKTsKKworCS8qIDExLiBSZWxl YXNlIFNXIHJlc2V0ICovCisJZGF0YSA9IE1PREVfQ09SRV9DTEtfRlJFUV9TRUwgfCBNT0RFX1BJ UEVfV0lEVEhfMzI7CisJbWFzayA9IGRhdGEgfCBQSVBFX1NPRlRfUkVTRVQgfCBNT0RFX1JFRkRJ Vl9NQVNLOworCWNvbXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1BJUEVfUlNUX0NMS19D VFJMLCBkYXRhLCBtYXNrKTsKKworCS8qIFdhaXQgZm9yID4gNTUgdXMgdG8gYWxsb3cgUENMSyBi ZSBlbmFibGVkICovCisJdWRlbGF5KFBMTF9TRVRfREVMQVlfVVMpOworCisJcmV0ID0gY29tcGh5 X2xhbmVfcmVnX3BvbGwobGFuZSwgQ09NUEhZX1BJUEVfTEFORV9TVEFUMSwgVFhEQ0xLX1BDTEtf RU4sCisJCQkJICAgQ09NUEhZX1BMTF9TTEVFUCwgQ09NUEhZX1BMTF9USU1FT1VUKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIobGFuZS0+ZGV2LCAiRmFpbGVkIHRvIGxvY2sgUENJRSBQTExcbiIp OworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXZl YnVfYTM3MDBfY29tcGh5X3VzYjNfcG93ZXJfb2ZmKHN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlf bGFuZSAqbGFuZSkKK3sKKwkvKgorCSAqIEN1cnJlbnRseSB0aGUgVVNCMyBNQUMgc2V0cyB0aGUg VVNCMyBQSFkgdG8gbG93IHN0YXRlLCBzbyB3ZSBkbyBub3QKKwkgKiBuZWVkIHRvIHBvd2VyIG9m ZiBVU0IzIFBIWSBhZ2Fpbi4KKwkgKi8KK30KKworc3RhdGljIHZvaWQKK212ZWJ1X2EzNzAwX2Nv bXBoeV9zYXRhX3Bvd2VyX29mZihzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5X2xhbmUgKmxhbmUp Cit7CisJLyogU2V0IHBoeSBpc29sYXRpb24gbW9kZSAqLworCWNvbXBoeV9sYW5lX3JlZ19zZXQo bGFuZSwgQ09NUEhZX0lTT0xBVElPTl9DVFJMLAorCQkJICAgIFBIWV9JU09MQVRFX01PREUsIFBI WV9JU09MQVRFX01PREUpOworCisJLyogUG93ZXIgb2ZmIFBMTCwgVHgsIFJ4ICovCisJY29tcGh5 X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExMX0NUUkwsCisJCQkgICAgMHgwLCBQ VV9QTExfQklUIHwgUFVfUlhfQklUIHwgUFVfVFhfQklUKTsKK30KKworc3RhdGljIHZvaWQKK212 ZWJ1X2EzNzAwX2NvbXBoeV9ldGhlcm5ldF9wb3dlcl9vZmYoc3RydWN0IG12ZWJ1X2EzNzAwX2Nv bXBoeV9sYW5lICpsYW5lKQoreworCXUzMiBtYXNrLCBkYXRhOworCisJZGF0YSA9IFBJTl9SRVNF VF9DT1JFX0JJVCB8IFBJTl9SRVNFVF9DT01QSFlfQklUIHwgUElOX1BVX0lWUkVGX0JJVCB8CisJ ICAgICAgIFBIWV9SWF9JTklUX0JJVDsKKwltYXNrID0gZGF0YTsKKwljb21waHlfcGVyaXBoX3Jl Z19zZXQobGFuZSwgQ09NUEhZX1BIWV9DRkcxLCBkYXRhLCBtYXNrKTsKK30KKworc3RhdGljIHZv aWQKK212ZWJ1X2EzNzAwX2NvbXBoeV9wY2llX3Bvd2VyX29mZihzdHJ1Y3QgbXZlYnVfYTM3MDBf Y29tcGh5X2xhbmUgKmxhbmUpCit7CisJLyogUG93ZXIgb2ZmIFBMTCwgVHgsIFJ4ICovCisJY29t cGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUE9XRVJfUExMX0NUUkwsCisJCQkgICAgMHgw LCBQVV9QTExfQklUIHwgUFVfUlhfQklUIHwgUFVfVFhfQklUKTsKK30KKworc3RhdGljIGludCBt dmVidV9hMzcwMF9jb21waHlfcmVzZXQoc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBtdmVi dV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOworCXUxNiBt YXNrLCBkYXRhOworCisJZGV2X2RiZyhsYW5lLT5kZXYsICJyZXNldHRpbmcgbGFuZSAlZFxuIiwg bGFuZS0+aWQpOworCisJLyogQ09NUEhZIHJlc2V0IGZvciBpbnRlcm5hbCBsb2dpYyAqLworCWNv bXBoeV9sYW5lX3JlZ19zZXQobGFuZSwgQ09NUEhZX1NGVF9SRVNFVCwKKwkJCSAgICBTRlRfUlNU X05PX1JFRywgU0ZUX1JTVF9OT19SRUcpOworCisJLyogQ09NUEhZIHJlZ2lzdGVyIHJlc2V0IChj bGVhcmVkIGF1dG9tYXRpY2FsbHkpICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01Q SFlfU0ZUX1JFU0VULCBTRlRfUlNULCBTRlRfUlNUKTsKKworCS8qIFBJUEUgc29mdCBhbmQgcmVn aXN0ZXIgcmVzZXQgKi8KKwlkYXRhID0gUElQRV9TT0ZUX1JFU0VUIHwgUElQRV9SRUdfUkVTRVQ7 CisJbWFzayA9IGRhdGE7CisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9S U1RfQ0xLX0NUUkwsIGRhdGEsIG1hc2spOworCisJLyogUmVsZWFzZSBQSVBFIHJlZ2lzdGVyIHJl c2V0ICovCisJY29tcGh5X2xhbmVfcmVnX3NldChsYW5lLCBDT01QSFlfUElQRV9SU1RfQ0xLX0NU UkwsCisJCQkgICAgMHgwLCBQSVBFX1JFR19SRVNFVCk7CisKKwkvKiBSZXNldCBTQiBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyIChvbmx5IGZvciBsYW5lcyAwIGFuZCAxKSAqLworCWlmIChsYW5lLT5p ZCA9PSAwIHx8IGxhbmUtPmlkID09IDEpIHsKKwkJdTMyIG1hc2ssIGRhdGE7CisKKwkJZGF0YSA9 IFBJTl9SRVNFVF9DT1JFX0JJVCB8IFBJTl9SRVNFVF9DT01QSFlfQklUIHwKKwkJICAgICAgIFBJ Tl9QVV9QTExfQklUIHwgUElOX1BVX1JYX0JJVCB8IFBJTl9QVV9UWF9CSVQ7CisJCW1hc2sgPSBk YXRhIHwgUElOX1BVX0lWUkVGX0JJVCB8IFBJTl9UWF9JRExFX0JJVDsKKwkJY29tcGh5X3Blcmlw aF9yZWdfc2V0KGxhbmUsIENPTVBIWV9QSFlfQ0ZHMSwgZGF0YSwgbWFzayk7CisJfQorCisJcmV0 dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X2dldF9md19tb2RlKGlu dCBsYW5lLAorc3RhdGljIGJvb2wgbXZlYnVfYTM3MDBfY29tcGh5X2NoZWNrX21vZGUoaW50IGxh bmUsCiAJCQkJCSAgZW51bSBwaHlfbW9kZSBtb2RlLAogCQkJCQkgIGludCBzdWJtb2RlKQogewpA QCAtMTIyLDcgKzExNjMsNyBAQCBzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX2NvbXBoeV9nZXRfZndf bW9kZShpbnQgbGFuZSwKIAogCS8qIFVudXNlZCBQSFkgbXV4IHZhbHVlIGlzIDB4MCAqLwogCWlm IChtb2RlID09IFBIWV9NT0RFX0lOVkFMSUQpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4g ZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCWlmIChtdmVidV9hMzcwMF9j b21waHlfbW9kZXNbaV0ubGFuZSA9PSBsYW5lICYmCkBAIC0xMzIsMjcgKzExNzMsMzAgQEAgc3Rh dGljIGludCBtdmVidV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUoaW50IGxhbmUsCiAJfQogCiAJ aWYgKGkgPT0gbikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBmYWxzZTsKIAotCXJldHVy biBtdmVidV9hMzcwMF9jb21waHlfbW9kZXNbaV0uZndfbW9kZTsKKwlyZXR1cm4gdHJ1ZTsKIH0K IAogc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfc2V0X21vZGUoc3RydWN0IHBoeSAqcGh5 LCBlbnVtIHBoeV9tb2RlIG1vZGUsCiAJCQkJICAgICAgIGludCBzdWJtb2RlKQogewogCXN0cnVj dCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwot CWludCBmd19tb2RlOwotCi0JaWYgKHN1Ym1vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBC QVNFWCkKLQkJc3VibW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTsKIAotCWZ3X21vZGUg PSBtdmVidV9hMzcwMF9jb21waHlfZ2V0X2Z3X21vZGUobGFuZS0+aWQsIG1vZGUsCi0JCQkJCQkg c3VibW9kZSk7Ci0JaWYgKGZ3X21vZGUgPCAwKSB7CisJaWYgKCFtdmVidV9hMzcwMF9jb21waHlf Y2hlY2tfbW9kZShsYW5lLT5pZCwgbW9kZSwgc3VibW9kZSkpIHsKIAkJZGV2X2VycihsYW5lLT5k ZXYsICJpbnZhbGlkIENPTVBIWSBtb2RlXG4iKTsKLQkJcmV0dXJuIGZ3X21vZGU7CisJCXJldHVy biAtRUlOVkFMOwogCX0KIAorCS8qIE1vZGUgY2Fubm90IGJlIGNoYW5nZWQgd2hpbGUgdGhlIFBI WSBpcyBwb3dlcmVkIG9uICovCisJaWYgKHBoeS0+cG93ZXJfY291bnQgJiYKKwkgICAgKGxhbmUt Pm1vZGUgIT0gbW9kZSB8fCBsYW5lLT5zdWJtb2RlICE9IHN1Ym1vZGUpKQorCQlyZXR1cm4gLUVC VVNZOworCisJLyogSWYgY2hhbmdpbmcgbW9kZSwgZW5zdXJlIHJlc2V0IGlzIGNhbGxlZCAqLwor CWlmIChsYW5lLT5tb2RlICE9IFBIWV9NT0RFX0lOVkFMSUQgJiYgbGFuZS0+bW9kZSAhPSBtb2Rl KQorCQlsYW5lLT5uZWVkc19yZXNldCA9IHRydWU7CisKIAkvKiBKdXN0IHJlbWVtYmVyIHRoZSBt b2RlLCAtPnBvd2VyX29uKCkgd2lsbCBkbyB0aGUgcmVhbCBzZXR1cCAqLwogCWxhbmUtPm1vZGUg PSBtb2RlOwogCWxhbmUtPnN1Ym1vZGUgPSBzdWJtb2RlOwpAQCAtMTYzLDc2ICsxMjA3LDY4IEBA IHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBfY29tcGh5X3NldF9tb2RlKHN0cnVjdCBwaHkgKnBoeSwg ZW51bSBwaHlfbW9kZSBtb2RlLAogc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfcG93ZXJf b24oc3RydWN0IHBoeSAqcGh5KQogewogCXN0cnVjdCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAq bGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwotCXUzMiBmd19wYXJhbTsKLQlpbnQgZndfbW9k ZTsKLQlpbnQgZndfcG9ydDsKIAlpbnQgcmV0OwogCi0JZndfbW9kZSA9IG12ZWJ1X2EzNzAwX2Nv bXBoeV9nZXRfZndfbW9kZShsYW5lLT5pZCwKLQkJCQkJCSBsYW5lLT5tb2RlLCBsYW5lLT5zdWJt b2RlKTsKLQlpZiAoZndfbW9kZSA8IDApIHsKKwlpZiAoIW12ZWJ1X2EzNzAwX2NvbXBoeV9jaGVj a19tb2RlKGxhbmUtPmlkLCBsYW5lLT5tb2RlLAorCQkJCQkgICBsYW5lLT5zdWJtb2RlKSkgewog CQlkZXZfZXJyKGxhbmUtPmRldiwgImludmFsaWQgQ09NUEhZIG1vZGVcbiIpOwotCQlyZXR1cm4g ZndfbW9kZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxhbmUtPm5lZWRzX3Jlc2V0 KSB7CisJCXJldCA9IG12ZWJ1X2EzNzAwX2NvbXBoeV9yZXNldChwaHkpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlsYW5lLT5uZWVkc19yZXNldCA9IGZhbHNlOwogCX0KIAogCXN3 aXRjaCAobGFuZS0+bW9kZSkgewogCWNhc2UgUEhZX01PREVfVVNCX0hPU1RfU1M6CiAJCWRldl9k YmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQgdG8gVVNCMyBob3N0IG1vZGVcbiIsIGxhbmUtPmlk KTsKLQkJZndfcGFyYW0gPSBDT01QSFlfRldfTU9ERShmd19tb2RlKTsKLQkJYnJlYWs7CisJCXJl dHVybiBtdmVidV9hMzcwMF9jb21waHlfdXNiM19wb3dlcl9vbihsYW5lKTsKIAljYXNlIFBIWV9N T0RFX1NBVEE6CiAJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQgdG8gU0FUQSBtb2Rl XG4iLCBsYW5lLT5pZCk7Ci0JCWZ3X3BhcmFtID0gQ09NUEhZX0ZXX01PREUoZndfbW9kZSk7Ci0J CWJyZWFrOworCQlyZXR1cm4gbXZlYnVfYTM3MDBfY29tcGh5X3NhdGFfcG93ZXJfb24obGFuZSk7 CiAJY2FzZSBQSFlfTU9ERV9FVEhFUk5FVDoKLQkJZndfcG9ydCA9IChsYW5lLT5pZCA9PSAwKSA/ IDEgOiAwOwotCQlzd2l0Y2ggKGxhbmUtPnN1Ym1vZGUpIHsKLQkJY2FzZSBQSFlfSU5URVJGQUNF X01PREVfU0dNSUk6Ci0JCQlkZXZfZGJnKGxhbmUtPmRldiwgInNldCBsYW5lICVkIHRvIFNHTUlJ IG1vZGVcbiIsCi0JCQkJbGFuZS0+aWQpOwotCQkJZndfcGFyYW0gPSBDT01QSFlfRldfTkVUKGZ3 X21vZGUsIGZ3X3BvcnQsCi0JCQkJCQkgQ09NUEhZX0ZXX1NQRUVEXzFfMjVHKTsKLQkJCWJyZWFr OwotCQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6Ci0JCQlkZXZfZGJnKGxhbmUt PmRldiwgInNldCBsYW5lICVkIHRvIDI1MDBCQVNFWCBtb2RlXG4iLAotCQkJCWxhbmUtPmlkKTsK LQkJCWZ3X3BhcmFtID0gQ09NUEhZX0ZXX05FVChmd19tb2RlLCBmd19wb3J0LAotCQkJCQkJIENP TVBIWV9GV19TUEVFRF8zXzEyNUcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJy KGxhbmUtPmRldiwgInVuc3VwcG9ydGVkIFBIWSBzdWJtb2RlICglZClcbiIsCi0JCQkJbGFuZS0+ c3VibW9kZSk7Ci0JCQlyZXR1cm4gLUVOT1RTVVBQOwotCQl9Ci0JCWJyZWFrOworCQlkZXZfZGJn KGxhbmUtPmRldiwgInNldCBsYW5lICVkIHRvIEV0aGVybmV0IG1vZGVcbiIsIGxhbmUtPmlkKTsK KwkJcmV0dXJuIG12ZWJ1X2EzNzAwX2NvbXBoeV9ldGhlcm5ldF9wb3dlcl9vbihsYW5lKTsKIAlj YXNlIFBIWV9NT0RFX1BDSUU6CiAJCWRldl9kYmcobGFuZS0+ZGV2LCAic2V0IGxhbmUgJWQgdG8g UENJZSBtb2RlXG4iLCBsYW5lLT5pZCk7Ci0JCWZ3X3BhcmFtID0gQ09NUEhZX0ZXX1BDSUUoZndf bW9kZSwgQ09NUEhZX0ZXX1NQRUVEXzVHLAotCQkJCQkgIHBoeS0+YXR0cnMuYnVzX3dpZHRoKTsK LQkJYnJlYWs7CisJCXJldHVybiBtdmVidV9hMzcwMF9jb21waHlfcGNpZV9wb3dlcl9vbihsYW5l KTsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKGxhbmUtPmRldiwgInVuc3VwcG9ydGVkIFBIWSBtb2Rl ICglZClcbiIsIGxhbmUtPm1vZGUpOwotCQlyZXR1cm4gLUVOT1RTVVBQOworCQlyZXR1cm4gLUVP UE5PVFNVUFA7CiAJfQotCi0JcmV0ID0gbXZlYnVfYTM3MDBfY29tcGh5X3NtYyhDT01QSFlfU0lQ X1BPV0VSX09OLCBsYW5lLT5pZCwgZndfcGFyYW0pOwotCWlmIChyZXQgPT0gLUVPUE5PVFNVUFAp Ci0JCWRldl9lcnIobGFuZS0+ZGV2LAotCQkJInVuc3VwcG9ydGVkIFNNQyBjYWxsLCB0cnkgdXBk YXRpbmcgeW91ciBmaXJtd2FyZVxuIik7Ci0KLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50 IG12ZWJ1X2EzNzAwX2NvbXBoeV9wb3dlcl9vZmYoc3RydWN0IHBoeSAqcGh5KQogewogCXN0cnVj dCBtdmVidV9hMzcwMF9jb21waHlfbGFuZSAqbGFuZSA9IHBoeV9nZXRfZHJ2ZGF0YShwaHkpOwog Ci0JcmV0dXJuIG12ZWJ1X2EzNzAwX2NvbXBoeV9zbWMoQ09NUEhZX1NJUF9QT1dFUl9PRkYsIGxh bmUtPmlkLCAwKTsKKwlzd2l0Y2ggKGxhbmUtPm1vZGUpIHsKKwljYXNlIFBIWV9NT0RFX1VTQl9I T1NUX1NTOgorCQltdmVidV9hMzcwMF9jb21waHlfdXNiM19wb3dlcl9vZmYobGFuZSk7CisJCXJl dHVybiAwOworCWNhc2UgUEhZX01PREVfU0FUQToKKwkJbXZlYnVfYTM3MDBfY29tcGh5X3NhdGFf cG93ZXJfb2ZmKGxhbmUpOworCQlyZXR1cm4gMDsKKwljYXNlIFBIWV9NT0RFX0VUSEVSTkVUOgor CQltdmVidV9hMzcwMF9jb21waHlfZXRoZXJuZXRfcG93ZXJfb2ZmKGxhbmUpOworCQlyZXR1cm4g MDsKKwljYXNlIFBIWV9NT0RFX1BDSUU6CisJCW12ZWJ1X2EzNzAwX2NvbXBoeV9wY2llX3Bvd2Vy X29mZihsYW5lKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJZGV2X2VycihsYW5lLT5kZXYs ICJpbnZhbGlkIENPTVBIWSBtb2RlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogfQogCiBz dGF0aWMgY29uc3Qgc3RydWN0IHBoeV9vcHMgbXZlYnVfYTM3MDBfY29tcGh5X29wcyA9IHsKIAku cG93ZXJfb24JPSBtdmVidV9hMzcwMF9jb21waHlfcG93ZXJfb24sCiAJLnBvd2VyX29mZgk9IG12 ZWJ1X2EzNzAwX2NvbXBoeV9wb3dlcl9vZmYsCisJLnJlc2V0CQk9IG12ZWJ1X2EzNzAwX2NvbXBo eV9yZXNldCwKIAkuc2V0X21vZGUJPSBtdmVidV9hMzcwMF9jb21waHlfc2V0X21vZGUsCiAJLm93 bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKQEAgLTI1NiwxMyArMTI5Miw3NSBAQCBzdGF0aWMgc3Ry dWN0IHBoeSAqbXZlYnVfYTM3MDBfY29tcGh5X3hsYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJ cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCisJbGFuZS0+aW52ZXJ0X3R4ID0gYXJncy0+ YXJnc1sxXSAmIEJJVCgwKTsKKwlsYW5lLT5pbnZlcnRfcnggPSBhcmdzLT5hcmdzWzFdICYgQklU KDEpOworCiAJcmV0dXJuIHBoeTsKIH0KIAogc3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgbXZlYnVfYTM3 MDBfY29tcGh5X3ByaXYgKnByaXY7CiAJc3RydWN0IHBoeV9wcm92aWRlciAqcHJvdmlkZXI7CiAJ c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1 Y3QgY2xrICpjbGs7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRl diwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVO T01FTTsKKworCXJhd19zcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisKKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiY29tcGh5Iik7 CisJcHJpdi0+Y29tcGh5X3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKHByaXYtPmNvbXBoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIo cHJpdi0+Y29tcGh5X3JlZ3MpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJICAgImxhbmUxX3BjaWVfZ2JlIik7CisJcHJp di0+bGFuZTFfcGh5X3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVz KTsKKwlpZiAoSVNfRVJSKHByaXYtPmxhbmUxX3BoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9FUlIo cHJpdi0+bGFuZTFfcGh5X3JlZ3MpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJICAgImxhbmUwX3VzYjNfZ2JlIik7CisJ cHJpdi0+bGFuZTBfcGh5X3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwg cmVzKTsKKwlpZiAoSVNfRVJSKHByaXYtPmxhbmUwX3BoeV9yZWdzKSkKKwkJcmV0dXJuIFBUUl9F UlIocHJpdi0+bGFuZTBfcGh5X3JlZ3MpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNl X2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJICAgImxhbmUyX3NhdGFfdXNiMyIp OworCXByaXYtPmxhbmUyX3BoeV9pbmRpcmVjdCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRl di0+ZGV2LCByZXMpOworCWlmIChJU19FUlIocHJpdi0+bGFuZTJfcGh5X2luZGlyZWN0KSkKKwkJ cmV0dXJuIFBUUl9FUlIocHJpdi0+bGFuZTJfcGh5X2luZGlyZWN0KTsKKworCS8qCisJICogRHJp dmVyIG5lZWRzIHRvIGtub3cgaWYgcmVmZXJlbmNlIHh0YWwgY2xvY2sgaXMgNDBNSHogb3IgMjVN SHouCisJICogT2xkIERUIGJpbmRpbmdzIGRvIG5vdCBoYXZlIHh0YWwgY2xrIHByZXNlbnQuIFNv IGRvIG5vdCBmYWlsIGhlcmUKKwkgKiBhbmQgZXhwZWN0cyB0aGF0IGRlZmF1bHQgMjVNSHogcmVm ZXJlbmNlIGNsb2NrIGlzIHVzZWQuCisJICovCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAi eHRhbCIpOworCWlmIChJU19FUlIoY2xrKSkgeworCQlpZiAoUFRSX0VSUihjbGspID09IC1FUFJP QkVfREVGRVIpCisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJZGV2X3dhcm4oJnBkZXYtPmRl diwgIm1pc3NpbmcgJ3h0YWwnIGNsayAoJWxkKVxuIiwKKwkJCSBQVFJfRVJSKGNsaykpOworCX0g ZWxzZSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShjbGspOworCQlpZiAocmV0KSB7CisJ CQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZW5hYmxpbmcgeHRhbCBjbGsgZmFpbGVkICglZClcbiIs CisJCQkJIHJldCk7CisJCX0gZWxzZSB7CisJCQlpZiAoY2xrX2dldF9yYXRlKGNsaykgPT0gNDAw MDAwMDApCisJCQkJcHJpdi0+eHRhbF9pc180MG0gPSB0cnVlOworCQkJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGNsayk7CisJCX0KKwkJY2xrX3B1dChjbGspOworCX0KKworCWRldl9zZXRfZHJ2ZGF0 YSgmcGRldi0+ZGV2LCBwcml2KTsKIAogCWZvcl9lYWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2Rl KHBkZXYtPmRldi5vZl9ub2RlLCBjaGlsZCkgewogCQlzdHJ1Y3QgbXZlYnVfYTM3MDBfY29tcGh5 X2xhbmUgKmxhbmU7CkBAIC0yNzcsNyArMTM3NSw3IEBAIHN0YXRpYyBpbnQgbXZlYnVfYTM3MDBf Y29tcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCQljb250aW51ZTsK IAkJfQogCi0JCWlmIChsYW5lX2lkID49IE1WRUJVX0EzNzAwX0NPTVBIWV9MQU5FUykgeworCQlp ZiAobGFuZV9pZCA+PSAzKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkICdyZWcn IHByb3BlcnR5XG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yOTUsMTEgKzEzOTMsMjEgQEAg c3RhdGljIGludCBtdmVidV9hMzcwMF9jb21waHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKIAkJCXJldHVybiBQVFJfRVJSKHBoeSk7CiAJCX0KIAorCQlsYW5lLT5wcml2ID0g cHJpdjsKIAkJbGFuZS0+ZGV2ID0gJnBkZXYtPmRldjsKIAkJbGFuZS0+bW9kZSA9IFBIWV9NT0RF X0lOVkFMSUQ7CiAJCWxhbmUtPnN1Ym1vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7CiAJCWxh bmUtPmlkID0gbGFuZV9pZDsKKwkJbGFuZS0+aW52ZXJ0X3R4ID0gZmFsc2U7CisJCWxhbmUtPmlu dmVydF9yeCA9IGZhbHNlOwogCQlwaHlfc2V0X2RydmRhdGEocGh5LCBsYW5lKTsKKworCQkvKgor CQkgKiBUbyBhdm9pZCByZWx5aW5nIG9uIHRoZSBib290bG9hZGVyL2Zpcm13YXJlIGNvbmZpZ3Vy YXRpb24sCisJCSAqIHBvd2VyIG9mZiBhbGwgY29tcGh5cy4KKwkJICovCisJCW12ZWJ1X2EzNzAw X2NvbXBoeV9yZXNldChwaHkpOworCQlsYW5lLT5uZWVkc19yZXNldCA9IGZhbHNlOwogCX0KIAog CXByb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoJnBkZXYtPmRldiwKQEAg LTMyMyw1ICsxNDMxLDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXZlYnVfYTM3 MDBfY29tcGh5X2RyaXZlciA9IHsKIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXZlYnVfYTM3MDBf Y29tcGh5X2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIk1pcXXDqGwgUmF5bmFsIDxtaXF1ZWwu cmF5bmFsQGJvb3RsaW4uY29tPiIpOworTU9EVUxFX0FVVEhPUigiUGFsaSBSb2jDoXIgPHBhbGlA a2VybmVsLm9yZz4iKTsKK01PRFVMRV9BVVRIT1IoIk1hcmVrIEJlaMO6biA8a2FiZWxAa2VybmVs Lm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIFBIWSBkcml2ZXIgZm9yIEEzNzAw Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjMyLjAKCgotLSAKbGludXgtcGh5 IG1haWxpbmcgbGlzdApsaW51eC1waHlAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwczovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1waHkK