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 54B5BCD1284 for ; Tue, 2 Apr 2024 08:30:06 +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:Cc:To:In-Reply-To:References:Message-Id :MIME-Version:Subject:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=69G2E7tB3mjU6Lcxw54JpXUJkLrV3ZUEjZ2ha+W5Qw8=; b=XZ+9nA8X6kXmmz aWo2a1IUuT20eVgkDwVkAa9vixIvsIisvh40gKbrKJDp5yk/Qcro5pmyd97Pm0cK501/+ShCQAXLX iZ6NzwMUlQ0Y7FxwjYmwpHsbk5f9QZ925cBtaaTnuI9ERkjN0k5hvUAA6XpvlbnKcrhCOfPo26HH1 dMrO4vu4pMdRk/72jfL7vLv8zqFha/hbLcXrd0aDsW0iNAFRvgoVEIevyvqimlsXETtnnunrWw+3P i7CGPhkti23He3h6BD3gvV1bazmjKJp8Ri845bhDiu10StnbP4y+cEI/6OLGL4LPtqJCoQ6vgKefY i77QWQqIotbvM0Lqdmfw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rrZWh-0000000AEQI-09z4; Tue, 02 Apr 2024 08:29:51 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rrZWY-0000000AELw-2fWx for linux-arm-kernel@lists.infradead.org; Tue, 02 Apr 2024 08:29:48 +0000 Received: from [192.168.1.118] (unknown [103.86.18.232]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id B74718E1; Tue, 2 Apr 2024 10:29:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1712046545; bh=uY0v4mWfIiBNq9UIUWVBEb3Oy1GfkqNLhDfEfaI+sV0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=V6hPbMi0nD2nMF3bcfuY+t9c7MaMBd5sh9uHvQhPJIDBGTQ7oKJ7p15tysxeDZV/A uXW6V1cHBPHmA4XnaV7QeYadDGs/Etosn22VR+zfsSccrxmuXli15NmZjWaSFimod2 3xM5w6MYSrvDrXKwYO8mrnKJ4uIPdoo8+iifdAgo= From: Umang Jain Date: Tue, 02 Apr 2024 13:59:26 +0530 Subject: [PATCH 2/3] media: i2c: Add imx283 camera sensor driver MIME-Version: 1.0 Message-Id: <20240402-kernel-name-extraversion-v1-2-57bb38de841b@ideasonboard.com> References: <20240402-kernel-name-extraversion-v1-0-57bb38de841b@ideasonboard.com> In-Reply-To: <20240402-kernel-name-extraversion-v1-0-57bb38de841b@ideasonboard.com> To: Kieran Bingham , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Sakari Ailus Cc: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Umang Jain X-Mailer: b4 0.12.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1712046569; l=48649; i=umang.jain@ideasonboard.com; s=20240402; h=from:subject:message-id; bh=PE/El+BLgYZkCPgDIE4rkH477xy1kHajZ6mWQnLQ5JM=; b=YwUjqg0l7Uu/XUqauanREShWsaimao+KCaj7JTgejMrg5NdV4ZGUJMWsURhxqlKOANOogSVZD bBXSIJGVNNkD46m0aLY8YEXLl5Vu53h5nL5eJA/zAoGPrUdIaMhKUjr X-Developer-Key: i=umang.jain@ideasonboard.com; a=ed25519; pk=8K9qSAtc2dNF4Ax+jYC0w9dlfptU7wxPBQwOy0nxRoc= X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240402_012943_216069_7C8EF241 X-CRM114-Status: GOOD ( 20.17 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org RnJvbTogS2llcmFuIEJpbmdoYW0gPGtpZXJhbi5iaW5naGFtQGlkZWFzb25ib2FyZC5jb20+CgpB ZGQgYSB2NGwyIHN1YmRldmljZSBkcml2ZXIgZm9yIHRoZSBTb255IElNWDI4MyBpbWFnZSBzZW5z b3IuCgpUaGUgSU1YMjgzIGlzIGEgMjBNUCBEaWFnb25hbCAxNS44NiBtbSAoVHlwZSAxKSBDTU9T IEltYWdlIFNlbnNvciB3aXRoClNxdWFyZSBQaXhlbCBmb3IgQ29sb3IgQ2FtZXJhcy4KClRoZSBm b2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDoKLSBNYW51YWwgZXhwb3N1cmUgYW4gZ2Fp biBjb250cm9sIHN1cHBvcnQKLSB2YmxhbmsvaGJsYW5rL2xpbmsgZnJlcSBjb250cm9sIHN1cHBv cnQKLSBUZXN0IHBhdHRlcm4gc3VwcG9ydCBjb250cm9sCi0gQXJiaXRyYXJ5IGhvcml6b250YWwg YW5kIHZlcnRpY2FsIGNyb3BwaW5nCi0gU3VwcG9ydGVkIHJlc29sdXRpb246CiAgLSA1NDcyeDM2 NDggQCAyMGZwcyAoU1JHR0IxMikKICAtIDU0NzJ4MzY0OCBAIDI1ZnBzIChTUkdHQjEwKQogIC0g MjczNngxODI0IEAgNTBmcHMgKFNSR0dCMTIpCgpTaWduZWQtb2ZmLWJ5OiBLaWVyYW4gQmluZ2hh bSA8a2llcmFuLmJpbmdoYW1AaWRlYXNvbmJvYXJkLmNvbT4KU2lnbmVkLW9mZi1ieTogVW1hbmcg SmFpbiA8dW1hbmcuamFpbkBpZGVhc29uYm9hcmQuY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAg ICAgICAgICAgIHwgICAgMSArCiBkcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnICB8ICAgMTAgKwog ZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUgfCAgICAxICsKIGRyaXZlcnMvbWVkaWEvaTJjL2lt eDI4My5jIHwgMTU5NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogNCBmaWxlcyBjaGFuZ2VkLCAxNjA4IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGEyZTE2NDEzMTY1MC4uNjRkMzc4MGFmYjk5IDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjAzNzQsNiArMjAz NzQsNyBAQCBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIFQ6 CWdpdCBnaXQ6Ly9saW51eHR2Lm9yZy9tZWRpYV90cmVlLmdpdAogRjoJRG9jdW1lbnRhdGlvbi9k ZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2kyYy9zb255LGlteDI4My55YW1sCitGOglkcml2ZXJz L21lZGlhL2kyYy9pbXgyODMuYwogCiBTT05ZIElNWDI5MCBTRU5TT1IgRFJJVkVSCiBNOglNYW5p dmFubmFuIFNhZGhhc2l2YW0gPG1hbml2YW5uYW4uc2FkaGFzaXZhbUBsaW5hcm8ub3JnPgpkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvaTJjL0tj b25maWcKaW5kZXggZTRkYTY4ODM1NjgzLi5iODRkNjRkMzdmMGUgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvbWVkaWEvaTJjL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwpAQCAt MTYzLDYgKzE2MywxNiBAQCBjb25maWcgVklERU9fSU1YMjc0CiAJICBUaGlzIGlzIGEgVjRMMiBz ZW5zb3IgZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyNzQKIAkgIENNT1MgaW1hZ2Ugc2Vuc29yLgog Citjb25maWcgVklERU9fSU1YMjgzCisJdHJpc3RhdGUgIlNvbnkgSU1YMjgzIHNlbnNvciBzdXBw b3J0IgorCXNlbGVjdCBWNEwyX0NDSV9JMkMKKwloZWxwCisJICBUaGlzIGlzIGEgVjRMMiBzZW5z b3IgZHJpdmVyIGZvciB0aGUgU29ueSBJTVgyODMKKwkgIENNT1MgaW1hZ2Ugc2Vuc29yLgorCisJ ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUK KwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXgyODMuCisKIGNvbmZpZyBWSURFT19JTVgyOTAK IAl0cmlzdGF0ZSAiU29ueSBJTVgyOTAgc2Vuc29yIHN1cHBvcnQiCiAJc2VsZWN0IFJFR01BUF9J MkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlIGIvZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUKaW5kZXggYjgyZTk5Y2E3NTc4Li5iYmU0MWU4MzFjNzYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL01h a2VmaWxlCkBAIC00OSw2ICs0OSw3IEBAIG9iai0kKENPTkZJR19WSURFT19JTVgyMTQpICs9IGlt eDIxNC5vCiBvYmotJChDT05GSUdfVklERU9fSU1YMjE5KSArPSBpbXgyMTkubwogb2JqLSQoQ09O RklHX1ZJREVPX0lNWDI1OCkgKz0gaW14MjU4Lm8KIG9iai0kKENPTkZJR19WSURFT19JTVgyNzQp ICs9IGlteDI3NC5vCitvYmotJChDT05GSUdfVklERU9fSU1YMjgzKSArPSBpbXgyODMubwogb2Jq LSQoQ09ORklHX1ZJREVPX0lNWDI5MCkgKz0gaW14MjkwLm8KIG9iai0kKENPTkZJR19WSURFT19J TVgyOTYpICs9IGlteDI5Ni5vCiBvYmotJChDT05GSUdfVklERU9fSU1YMzE5KSArPSBpbXgzMTku bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvaW14MjgzLmMgYi9kcml2ZXJzL21lZGlh L2kyYy9pbXgyODMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgx ZmUyZDRmZDRkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL2lteDI4My5j CkBAIC0wLDAgKzEsMTU5NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Ky8qCisgKiBWNEwyIFN1cHBvcnQgZm9yIHRoZSBJTVgyODMKKyAqCisgKiBEaWFnb25hbCAxNS44 NiBtbSAoVHlwZSAxKSBDTU9TIEltYWdlIFNlbnNvciB3aXRoIFNxdWFyZSBQaXhlbCBmb3IgQ29s b3IKKyAqIENhbWVyYXMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDI0IElkZWFzIG9uIEJvYXJk IE95LgorICoKKyAqIEJhc2VkIG9uIFNvbnkgSU1YMjgzIGRyaXZlciBwcmVwYXJlZCBieSBXaWxs IFdoYW5nCisgKgorICogQmFzZWQgb24gU29ueSBpbXg0NzcgY2FtZXJhIGRyaXZlcgorICogQ29w eXJpZ2h0IChDKSAyMDE5LTIwMjAgUmFzcGJlcnJ5IFBpIChUcmFkaW5nKSBMdGQKKyAqLworCisj aW5jbHVkZSA8bGludXgvYXJyYXlfc2l6ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgor I2luY2x1ZGUgPGxpbnV4L2NvbnRhaW5lcl9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgor I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVk ZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1 ZGUgPGxpbnV4L21pbm1heC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUg PGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUg PGxpbnV4L3Byb3BlcnR5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+ CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91bml0cy5oPgorI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItY2NpLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgor I2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVu dC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2RlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRs Mi1tZWRpYWJ1cy5oPgorCisvKiBDaGlwIElEICovCisjZGVmaW5lIElNWDI4M19SRUdfQ0hJUF9J RAkJQ0NJX1JFRzgoMHgzMDAwKQorI2RlZmluZSBJTVgyODNfQ0hJUF9JRAkJCTB4MGIJLy8gRGVm YXVsdCBwb3dlciBvbiBzdGF0ZQorCisjZGVmaW5lIElNWDI4M19SRUdfU1RBTkRCWQkJQ0NJX1JF RzgoMHgzMDAwKQorI2RlZmluZSAgIElNWDI4M19BQ1RJVkUJCQkwCisjZGVmaW5lICAgSU1YMjgz X1NUQU5EQlkJCUJJVCgwKQorI2RlZmluZSAgIElNWDI4M19TVEJMT0dJQwkJQklUKDEpCisjZGVm aW5lICAgSU1YMjgzX1NUQk1JUEkJCUJJVCgyKQorI2RlZmluZSAgIElNWDI4M19TVEJEVgkJCUJJ VCgzKQorI2RlZmluZSAgIElNWDI4M19TTEVFUAkJCUJJVCg0KQorCisjZGVmaW5lIElNWDI4M19S RUdfQ0xBTVAJCUNDSV9SRUc4KDB4MzAwMSkKKyNkZWZpbmUgICBJTVgyODNfQ0xQU1FSU1QJCUJJ VCg0KQorCisjZGVmaW5lIElNWDI4M19SRUdfUExTVE1HMDgJCUNDSV9SRUc4KDB4MzAwMykKKyNk ZWZpbmUgICBJTVgyODNfUExTVE1HMDhfVkFMCQkweDc3CisKKyNkZWZpbmUgSU1YMjgzX1JFR19N RFNFTDEJCUNDSV9SRUc4KDB4MzAwNCkKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDIJCUNDSV9S RUc4KDB4MzAwNSkKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDMJCUNDSV9SRUc4KDB4MzAwNikK KyNkZWZpbmUgICBJTVgyODNfTURTRUwzX1ZDUk9QX0VOCUJJVCg1KQorI2RlZmluZSBJTVgyODNf UkVHX01EU0VMNAkJQ0NJX1JFRzgoMHgzMDA3KQorI2RlZmluZSAgIElNWDI4M19NRFNFTDRfVkNS T1BfRU4JKEJJVCg0KSB8IEJJVCg2KSkKKworI2RlZmluZSBJTVgyODNfUkVHX1NWUgkJCUNDSV9S RUcxNl9MRSgweDMwMDkpCisKKyNkZWZpbmUgSU1YMjgzX1JFR19IVFJJTU1JTkcJCUNDSV9SRUc4 KDB4MzAwYikKKyNkZWZpbmUgICBJTVgyODNfTURWUkVWCQkJQklUKDApIC8qIFZGTElQICovCisj ZGVmaW5lICAgSU1YMjgzX0hUUklNTUlOR19FTgkJQklUKDQpCisKKyNkZWZpbmUgSU1YMjgzX1JF R19WV0lOUE9TCQlDQ0lfUkVHMTZfTEUoMHgzMDBmKQorI2RlZmluZSBJTVgyODNfUkVHX1ZXSURD VVQJCUNDSV9SRUcxNl9MRSgweDMwMTEpCisKKyNkZWZpbmUgSU1YMjgzX1JFR19NRFNFTDcJCUND SV9SRUcxNl9MRSgweDMwMTMpCisKKy8qIENTSSBDbG9jayBDb25maWd1cmF0aW9uICovCisjZGVm aW5lIElNWDI4M19SRUdfVENMS1BPU1QJCUNDSV9SRUc4KDB4MzAxOCkKKyNkZWZpbmUgSU1YMjgz X1JFR19USFNQUkVQQVJFCQlDQ0lfUkVHOCgweDMwMWEpCisjZGVmaW5lIElNWDI4M19SRUdfVEhT WkVSTwkJQ0NJX1JFRzgoMHgzMDFjKQorI2RlZmluZSBJTVgyODNfUkVHX1RIU1RSQUlMCQlDQ0lf UkVHOCgweDMwMWUpCisjZGVmaW5lIElNWDI4M19SRUdfVENMS1RSQUlMCQlDQ0lfUkVHOCgweDMw MjApCisjZGVmaW5lIElNWDI4M19SRUdfVENMS1BSRVBBUkUJCUNDSV9SRUc4KDB4MzAyMikKKyNk ZWZpbmUgSU1YMjgzX1JFR19UQ0xLWkVSTwkJQ0NJX1JFRzE2X0xFKDB4MzAyNCkKKyNkZWZpbmUg SU1YMjgzX1JFR19UTFBYCQkJQ0NJX1JFRzgoMHgzMDI2KQorI2RlZmluZSBJTVgyODNfUkVHX1RI U0VYSVQJCUNDSV9SRUc4KDB4MzAyOCkKKyNkZWZpbmUgSU1YMjgzX1JFR19UQ0xLUFJFCQlDQ0lf UkVHOCgweDMwMmEpCisjZGVmaW5lIElNWDI4M19SRUdfU1lTTU9ERQkJQ0NJX1JFRzgoMHgzMTA0 KQorCisjZGVmaW5lIElNWDI4M19SRUdfWV9PVVRfU0laRQkJQ0NJX1JFRzE2X0xFKDB4MzAyZikK KyNkZWZpbmUgSU1YMjgzX1JFR19XUklURV9WU0laRQkJQ0NJX1JFRzE2X0xFKDB4MzAzMSkKKyNk ZWZpbmUgSU1YMjgzX1JFR19PQl9TSVpFX1YJCUNDSV9SRUc4KDB4MzAzMykKKworLyogSE1BWCBp bnRlcm5hbCBIQkxBTksgKi8KKyNkZWZpbmUgSU1YMjgzX1JFR19ITUFYCQkJQ0NJX1JFRzE2X0xF KDB4MzAzNikKKyNkZWZpbmUgSU1YMjgzX0hNQVhfTUFYCQkJKEJJVCgxNikgLSAxKQorCisvKiBW TUFYIGludGVybmFsIFZCTEFOSyAqLworI2RlZmluZSBJTVgyODNfUkVHX1ZNQVgJCQlDQ0lfUkVH MjRfTEUoMHgzMDM4KQorI2RlZmluZSAgIElNWDI4M19WTUFYX01BWAkJKEJJVCgxNikgLSAxKQor CisvKiBTSFIgaW50ZXJuYWwgKi8KKyNkZWZpbmUgSU1YMjgzX1JFR19TSFIJCQlDQ0lfUkVHMTZf TEUoMHgzMDNiKQorI2RlZmluZSAgIElNWDI4M19TSFJfTUlOCQkxMQorCisvKgorICogQW5hbG9n IGdhaW4gY29udHJvbAorICogIEdhaW4gW2RCXSA9IC0yMGxvZ3soMjA0OCAtIHZhbHVlIFsxMDow XSkgLzIwNDh9CisgKiAgUmFuZ2U6IDBkQiB0byBhcHByb3hpbWF0ZWx5ICsyN2RCCisgKi8KKyNk ZWZpbmUgSU1YMjgzX1JFR19BTkFMT0dfR0FJTgkJQ0NJX1JFRzE2X0xFKDB4MzA0MikKKyNkZWZp bmUgICBJTVgyODNfQU5BX0dBSU5fTUlOCQkwCisjZGVmaW5lICAgSU1YMjgzX0FOQV9HQUlOX01B WAkJMTk1NworI2RlZmluZSAgIElNWDI4M19BTkFfR0FJTl9TVEVQCQkxCisjZGVmaW5lICAgSU1Y MjgzX0FOQV9HQUlOX0RFRkFVTFQJMHgwCisKKy8qCisgKiBEaWdpdGFsIGdhaW4gY29udHJvbAor ICogIEdhaW4gW2RCXSA9IHZhbHVlICogNgorICogIFJhbmdlOiAwZEIgdG8gKzE4ZGIKKyAqLwor I2RlZmluZSBJTVgyODNfUkVHX0RJR0lUQUxfR0FJTgkJQ0NJX1JFRzgoMHgzMDQ0KQorI2RlZmlu ZSBJTVgyODNfREdUTF9HQUlOX01JTgkJMAorI2RlZmluZSBJTVgyODNfREdUTF9HQUlOX01BWAkJ MworI2RlZmluZSBJTVgyODNfREdUTF9HQUlOX0RFRkFVTFQJMAorI2RlZmluZSBJTVgyODNfREdU TF9HQUlOX1NURVAJCTEKKworI2RlZmluZSBJTVgyODNfUkVHX0hUUklNTUlOR19TVEFSVAlDQ0lf UkVHMTZfTEUoMHgzMDU4KQorI2RlZmluZSBJTVgyODNfUkVHX0hUUklNTUlOR19FTkQJQ0NJX1JF RzE2X0xFKDB4MzA1YSkKKworI2RlZmluZSBJTVgyODNfUkVHX01EU0VMMTgJCUNDSV9SRUcxNl9M RSgweDMwZjYpCisKKy8qIE1hc3RlciBNb2RlIE9wZXJhdGlvbiBDb250cm9sICovCisjZGVmaW5l IElNWDI4M19SRUdfWE1TVEEJCUNDSV9SRUc4KDB4MzEwNSkKKyNkZWZpbmUgICBJTVgyODNfWE1T VEEJCQlCSVQoMCkKKworI2RlZmluZSBJTVgyODNfUkVHX1NZTkNEUlYJCUNDSV9SRUc4KDB4MzEw NykKKyNkZWZpbmUgICBJTVgyODNfU1lOQ0RSVl9YSFNfWFZTCSgweGEwIHwgMHgwMikKKyNkZWZp bmUgICBJTVgyODNfU1lOQ0RSVl9ISVoJCSgweGEwIHwgMHgwMykKKworLyogUExMIFN0YW5kYnkg Ki8KKyNkZWZpbmUgSU1YMjgzX1JFR19TVEJQTAkJQ0NJX1JFRzgoMHgzMjBiKQorI2RlZmluZSAg SU1YMjgzX1NUQlBMX05PUk1BTAkJMHgwMAorI2RlZmluZSAgSU1YMjgzX1NUQlBMX1NUQU5EQlkJ CTB4MDMKKworLyogSW5wdXQgRnJlcXVlbmN5IFNldHRpbmcgKi8KKyNkZWZpbmUgSU1YMjgzX1JF R19QTFJEMQkJQ0NJX1JFRzgoMHgzNmMxKQorI2RlZmluZSBJTVgyODNfUkVHX1BMUkQyCQlDQ0lf UkVHMTZfTEUoMHgzNmMyKQorI2RlZmluZSBJTVgyODNfUkVHX1BMUkQzCQlDQ0lfUkVHOCgweDM2 ZjcpCisjZGVmaW5lIElNWDI4M19SRUdfUExSRDQJCUNDSV9SRUc4KDB4MzZmOCkKKworI2RlZmlu ZSBJTVgyODNfUkVHX1BMU1RNRzAyCQlDQ0lfUkVHOCgweDM2YWEpCisjZGVmaW5lICAgSU1YMjgz X1BMU1RNRzAyX1ZBTAkJMHgwMAorCisjZGVmaW5lIElNWDI4M19SRUdfRUJEX1hfT1VUX1NJWkUJ Q0NJX1JFRzE2X0xFKDB4M2E1NCkKKworLyogVGVzdCBwYXR0ZXJuIGdlbmVyYXRvciAqLworI2Rl ZmluZSBJTVgyODNfUkVHX1RQR19DVFJMCQlDQ0lfUkVHOCgweDMxNTYpCisjZGVmaW5lICAgSU1Y MjgzX1RQR19DVFJMX0NMS0VOCQlCSVQoMCkKKyNkZWZpbmUgICBJTVgyODNfVFBHX0NUUkxfUEFU RU4JCUJJVCg0KQorCisjZGVmaW5lIElNWDI4M19SRUdfVFBHX1BBVAkJQ0NJX1JFRzgoMHgzMTU3 KQorI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0FMTF8wMDAJMHgwMAorI2RlZmluZSAgIElNWDI4 M19UUEdfUEFUX0FMTF9GRkYJMHgwMQorI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0FMTF81NTUJ MHgwMgorI2RlZmluZSAgIElNWDI4M19UUEdfUEFUX0FMTF9BQUEJMHgwMworI2RlZmluZSAgIElN WDI4M19UUEdfUEFUX0hfQ09MT1JfQkFSUwkweDBhCisjZGVmaW5lICAgSU1YMjgzX1RQR19QQVRf Vl9DT0xPUl9CQVJTCTB4MGIKKworLyogRXhwb3N1cmUgY29udHJvbCAqLworI2RlZmluZSBJTVgy ODNfRVhQT1NVUkVfTUlOCQk1MgorI2RlZmluZSBJTVgyODNfRVhQT1NVUkVfU1RFUAkJMQorI2Rl ZmluZSBJTVgyODNfRVhQT1NVUkVfREVGQVVMVAkJMTAwMAorI2RlZmluZSBJTVgyODNfRVhQT1NV UkVfTUFYCQk0OTg2NQorCisjZGVmaW5lIElNQUdFX1BBRAkJCTAKKworI2RlZmluZSBJTVgyODNf WENMUl9NSU5fREVMQVlfVVMJKDEgKiBVU0VDX1BFUl9NU0VDKQorI2RlZmluZSBJTVgyODNfWENM Ul9ERUxBWV9SQU5HRV9VUwkoMSAqIFVTRUNfUEVSX01TRUMpCisKKy8qIElNWDI4MyBuYXRpdmUg YW5kIGFjdGl2ZSBwaXhlbCBhcnJheSBzaXplLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X3JlY3QgaW14MjgzX25hdGl2ZV9hcmVhID0geworCS50b3AgPSAwLAorCS5sZWZ0ID0gMCwKKwku d2lkdGggPSA1NTkyLAorCS5oZWlnaHQgPSAzNzEwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVj dCB2NGwyX3JlY3QgaW14MjgzX2FjdGl2ZV9hcmVhID0geworCS50b3AgPSA0MCwKKwkubGVmdCA9 IDEwOCwKKwkud2lkdGggPSA1NDcyLAorCS5oZWlnaHQgPSAzNjQ4LAorfTsKKworc3RydWN0IGlt eDI4M19yZWdfbGlzdCB7CisJdW5zaWduZWQgaW50IG51bV9vZl9yZWdzOworCWNvbnN0IHN0cnVj dCBjY2lfcmVnX3NlcXVlbmNlICpyZWdzOworfTsKKworLyogTW9kZSA6IHJlc29sdXRpb24gYW5k IHJlbGF0ZWQgY29uZmlnIHZhbHVlcyAqLworc3RydWN0IGlteDI4M19tb2RlIHsKKwl1bnNpZ25l ZCBpbnQgbW9kZTsKKworCS8qIEJpdHMgcGVyIHBpeGVsICovCisJdW5zaWduZWQgaW50IGJwcDsK KworCS8qIEZyYW1lIHdpZHRoICovCisJdW5zaWduZWQgaW50IHdpZHRoOworCisJLyogRnJhbWUg aGVpZ2h0ICovCisJdW5zaWduZWQgaW50IGhlaWdodDsKKworCS8qCisJICogTWluaW11bSBob3Jp em9udGFsIHRpbWluZyBpbiBwaXhlbC11bml0cworCSAqCisJICogTm90ZSB0aGF0IEhNQVggaXMg d3JpdHRlbiBpbiA3Mk1IeiB1bml0cywgYW5kIHRoZSBkYXRhc2hlZXQgYXNzdW1lcyBhCisJICog NzIwTUh6IGxpbmsgZnJlcXVlbmN5LiBDb252ZXJ0IGRhdGFzaGVldCB2YWx1ZXMgd2l0aCB0aGUg Zm9sbG93aW5nOgorCSAqCisJICogRm9yIDEyIGJwcCBtb2RlcyAoNDgwTWJwcykgY29udmVydCB3 aXRoOgorCSAqICAgaG1heCA9IFtobWF4IGluIDcyTUh6IHVuaXRzXSAqIDQ4MCAvIDcyCisJICoK KwkgKiBGb3IgMTAgYnBwIG1vZGVzICg1NzZNYnBzKSBjb252ZXJ0IHdpdGg6CisJICogICBobWF4 ID0gW2htYXggaW4gNzJNSHogdW5pdHNdICogNTc2IC8gNzIKKwkgKi8KKwl1MzIgbWluX2htYXg7 CisKKwkvKiBtaW5pbXVtIFYtdGltaW5nIGluIGxpbmVzICovCisJdTMyIG1pbl92bWF4OworCisJ LyogZGVmYXVsdCBILXRpbWluZyAqLworCXUzMiBkZWZhdWx0X2htYXg7CisKKwkvKiBkZWZhdWx0 IFYtdGltaW5nICovCisJdTMyIGRlZmF1bHRfdm1heDsKKworCS8qIG1pbmltdW0gU0hSICovCisJ dTMyIG1pbl9zaHI7CisKKwkvKgorCSAqIFBlci1tb2RlIHZlcnRpY2FsIGNyb3AgY29uc3RhbnRz IHVzZWQgdG8gY2FsY3VsYXRlIHZhbHVlcworCSAqIG9mIElNWDI4M1JFR19XSURDVVQgYW5kIElN WDI4M19SRUdfVldJTlBPUy4KKwkgKi8KKwl1MzIgdmVmZjsKKwl1MzIgdnN0OworCXUzMiB2Y3Q7 CisKKwkvKiBIb3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBiaW5uaW5nIHJhdGlvICovCisJdTggaGJp bl9yYXRpbzsKKwl1OCB2YmluX3JhdGlvOworCisJLyogT3B0aWNhbCBCbGFua2luZyAqLworCXUz MiBob3Jpem9udGFsX29iOworCXUzMiB2ZXJ0aWNhbF9vYjsKKworCS8qIEFuYWxvZyBjcm9wIHJl Y3RhbmdsZS4gKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IGNyb3A7Cit9OworCitzdHJ1Y3QgaW14Mjgz X2lucHV0X2ZyZXF1ZW5jeSB7CisJdW5zaWduZWQgaW50IG1oejsKKwl1bnNpZ25lZCBpbnQgcmVn X2NvdW50OworCXN0cnVjdCBjY2lfcmVnX3NlcXVlbmNlIHJlZ3NbNF07Cit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IGlteDI4M19pbnB1dF9mcmVxdWVuY3kgaW14MjgzX2ZyZXF1ZW5jaWVzW10g PSB7CisJeworCQkubWh6ID0gNiAqIEhaX1BFUl9NSFosCisJCS5yZWdfY291bnQgPSA0LAorCQku cmVncyA9IHsKKwkJCXsgSU1YMjgzX1JFR19QTFJEMSwgMHgwMCB9LAorCQkJeyBJTVgyODNfUkVH X1BMUkQyLCAweDAwZjAgfSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMCB9LAorCQkJeyBJ TVgyODNfUkVHX1BMUkQ0LCAweGMwIH0sCisJCX0sCisJfSwKKwl7CisJCS5taHogPSAxMiAqIEha X1BFUl9NSFosCisJCS5yZWdfY291bnQgPSA0LAorCQkucmVncyA9IHsKKwkJCXsgSU1YMjgzX1JF R19QTFJEMSwgMHgwMSB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQyLCAweDAwZjAgfSwKKwkJCXsg SU1YMjgzX1JFR19QTFJEMywgMHgwMSB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0LCAweGMwIH0s CisJCX0sCisJfSwKKwl7CisJCS5taHogPSAxOCAqIEhaX1BFUl9NSFosCisJCS5yZWdfY291bnQg PSA0LAorCQkucmVncyA9IHsKKwkJCXsgSU1YMjgzX1JFR19QTFJEMSwgMHgwMSB9LAorCQkJeyBJ TVgyODNfUkVHX1BMUkQyLCAweDAwYTAgfSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMSB9 LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0LCAweDgwIH0sCisJCX0sCisJfSwKKwl7CisJCS5taHog PSAyNCAqIEhaX1BFUl9NSFosCisJCS5yZWdfY291bnQgPSA0LAorCQkucmVncyA9IHsKKwkJCXsg SU1YMjgzX1JFR19QTFJEMSwgMHgwMiB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQyLCAweDAwZjAg fSwKKwkJCXsgSU1YMjgzX1JFR19QTFJEMywgMHgwMiB9LAorCQkJeyBJTVgyODNfUkVHX1BMUkQ0 LCAweGMwIH0sCisJCX0sCisJfSwKK307CisKK2VudW0gaW14MjgzX21vZGVzIHsKKwlJTVgyODNf TU9ERV8wLAorCUlNWDI4M19NT0RFXzEsCisJSU1YMjgzX01PREVfMUEsCisJSU1YMjgzX01PREVf MVMsCisJSU1YMjgzX01PREVfMiwKKwlJTVgyODNfTU9ERV8yQSwKKwlJTVgyODNfTU9ERV8zLAor CUlNWDI4M19NT0RFXzQsCisJSU1YMjgzX01PREVfNSwKKwlJTVgyODNfTU9ERV82LAorfTsKKwor c3RydWN0IGlteDI4M19yZWFkb3V0X21vZGUgeworCXU4IG1kc2VsMTsKKwl1OCBtZHNlbDI7CisJ dTggbWRzZWwzOworCXU4IG1kc2VsNDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW14Mjgz X3JlYWRvdXRfbW9kZSBpbXgyODNfcmVhZG91dF9tb2Rlc1tdID0geworCS8qIEFsbCBwaXhlbCBz Y2FuIG1vZGVzICovCisJW0lNWDI4M19NT0RFXzBdID0geyAweDA0LCAweDAzLCAweDEwLCAweDAw IH0sIC8qIDEyIGJpdCAqLworCVtJTVgyODNfTU9ERV8xXSA9IHsgMHgwNCwgMHgwMSwgMHgwMCwg MHgwMCB9LCAvKiAxMCBiaXQgKi8KKwlbSU1YMjgzX01PREVfMUFdID0geyAweDA0LCAweDAxLCAw eDIwLCAweDUwIH0sIC8qIDEwIGJpdCAqLworCVtJTVgyODNfTU9ERV8xU10gPSB7IDB4MDQsIDB4 NDEsIDB4MjAsIDB4NTAgfSwgLyogMTAgYml0ICovCisKKwkvKiBIb3Jpem9udGFsIC8gVmVydGlj YWwgMi8yLWxpbmUgYmlubmluZyAqLworCVtJTVgyODNfTU9ERV8yXSA9IHsgMHgwZCwgMHgxMSwg MHg1MCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KKwlbSU1YMjgzX01PREVfMkFdID0geyAweDBkLCAw eDExLCAweDcwLCAweDUwIH0sIC8qIDEyIGJpdCAqLworCisJLyogSG9yaXpvbnRhbCAvIFZlcnRp Y2FsIDMvMy1saW5lIGJpbm5pbmcgKi8KKwlbSU1YMjgzX01PREVfM10gPSB7IDB4MWUsIDB4MTgs IDB4MTAsIDB4MDAgfSwgLyogMTIgYml0ICovCisKKwkvKiBWZXJ0aWNhbCAyLzkgc3Vic2FtcGxp bmcsIGhvcml6b250YWwgMyBiaW5uaW5nIGNyb3BwaW5nICovCisJW0lNWDI4M19NT0RFXzRdID0g eyAweDI5LCAweDE4LCAweDMwLCAweDUwIH0sIC8qIDEyIGJpdCAqLworCisJLyogVmVydGljYWwg Mi8xOSBzdWJzYW1wbGluZyBiaW5uaW5nLCBob3Jpem9udGFsIDMgYmlubmluZyAqLworCVtJTVgy ODNfTU9ERV81XSA9IHsgMHgyZCwgMHgxOCwgMHgxMCwgMHgwMCB9LCAvKiAxMiBiaXQgKi8KKwor CS8qIFZlcnRpY2FsIDIgYmlubmluZyBob3Jpem9udGFsIDIvNCwgc3Vic2FtcGxpbmcgMTY6OSBj cm9wcGluZyAqLworCVtJTVgyODNfTU9ERV82XSA9IHsgMHgxOCwgMHgyMSwgMHgwMCwgMHgwOSB9 LCAvKiAxMCBiaXQgKi8KKworCS8qCisJICogTmV3IG1vZGVzIHNob3VsZCBtYWtlIHN1cmUgdGhl IG9mZnNldCBwZXJpb2QgaXMgY29tcGxpZWQuCisJICogU2VlIGlteDI4M19leHBvc3VyZSgpIGZv ciByZWZlcmVuY2UuCisJICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNjaV9yZWdfc2Vx dWVuY2UgbWlwaV9kYXRhX3JhdGVfMTQ0ME1icHNbXSA9IHsKKwkvKiBUaGUgZGVmYXVsdCByZWdp c3RlciBzZXR0aW5ncyBwcm92aWRlIHRoZSAxNDQwTWJwcyByYXRlICovCisJeyBDQ0lfUkVHOCgw eDM2YzUpLCAweDAwIH0sIC8qIFVuZG9jdW1lbnRlZCAqLworCXsgQ0NJX1JFRzgoMHgzYWM0KSwg MHgwMCB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KKworCXsgSU1YMjgzX1JFR19TVEJQTCwgMHgwMCB9 LAorCXsgSU1YMjgzX1JFR19UQ0xLUE9TVCwgMHhhNyB9LAorCXsgSU1YMjgzX1JFR19USFNQUkVQ QVJFLCAweDZmIH0sCisJeyBJTVgyODNfUkVHX1RIU1pFUk8sIDB4OWYgfSwKKwl7IElNWDI4M19S RUdfVEhTVFJBSUwsIDB4NWYgfSwKKwl7IElNWDI4M19SRUdfVENMS1RSQUlMLCAweDVmIH0sCisJ eyBJTVgyODNfUkVHX1RDTEtQUkVQQVJFLCAweDZmIH0sCisJeyBJTVgyODNfUkVHX1RDTEtaRVJP LCAweDAxN2YgfSwKKwl7IElNWDI4M19SRUdfVExQWCwgMHg0ZiB9LAorCXsgSU1YMjgzX1JFR19U SFNFWElULCAweDQ3IH0sCisJeyBJTVgyODNfUkVHX1RDTEtQUkUsIDB4MDcgfSwKKwl7IElNWDI4 M19SRUdfU1lTTU9ERSwgMHgwMiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjY2lfcmVn X3NlcXVlbmNlIG1pcGlfZGF0YV9yYXRlXzcyME1icHNbXSA9IHsKKwkvKiBVbmRvY3VtZW50ZWQg QWRkaXRpb25zICJGb3IgNzIwTUJwcyIgU2V0dGluZyAqLworCXsgQ0NJX1JFRzgoMHgzNmM1KSwg MHgwMSB9LCAvKiBVbmRvY3VtZW50ZWQgKi8KKwl7IENDSV9SRUc4KDB4M2FjNCksIDB4MDEgfSwg LyogVW5kb2N1bWVudGVkICovCisKKwl7IElNWDI4M19SRUdfU1RCUEwsIDB4MDAgfSwKKwl7IElN WDI4M19SRUdfVENMS1BPU1QsIDB4NzcgfSwKKwl7IElNWDI4M19SRUdfVEhTUFJFUEFSRSwgMHgz NyB9LAorCXsgSU1YMjgzX1JFR19USFNaRVJPLCAweDY3IH0sCisJeyBJTVgyODNfUkVHX1RIU1RS QUlMLCAweDM3IH0sCisJeyBJTVgyODNfUkVHX1RDTEtUUkFJTCwgMHgzNyB9LAorCXsgSU1YMjgz X1JFR19UQ0xLUFJFUEFSRSwgMHgzNyB9LAorCXsgSU1YMjgzX1JFR19UQ0xLWkVSTywgMHhkZiB9 LAorCXsgSU1YMjgzX1JFR19UTFBYLCAweDJmIH0sCisJeyBJTVgyODNfUkVHX1RIU0VYSVQsIDB4 NDcgfSwKKwl7IElNWDI4M19SRUdfVENMS1BSRSwgMHgwZiB9LAorCXsgSU1YMjgzX1JFR19TWVNN T0RFLCAweDAyIH0sCit9OworCitzdGF0aWMgY29uc3QgczY0IGxpbmtfZnJlcXVlbmNpZXNbXSA9 IHsKKwk3MjAgKiBIWl9QRVJfTUhaLCAvKiAxNDQwIE1icHMgbGFuZSBkYXRhIHJhdGUgKi8KKwkz NjAgKiBIWl9QRVJfTUhaLCAvKiA3MjAgTWJwcyBkYXRhIGxhbmUgcmF0ZSAqLworfTsKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBpbXgyODNfcmVnX2xpc3QgbGlua19mcmVxX3JlZ2xpc3RbXSA9IHsK Kwl7IC8qIDcyMCBNSHogKi8KKwkJLm51bV9vZl9yZWdzID0gQVJSQVlfU0laRShtaXBpX2RhdGFf cmF0ZV8xNDQwTWJwcyksCisJCS5yZWdzID0gbWlwaV9kYXRhX3JhdGVfMTQ0ME1icHMsCisJfSwK Kwl7IC8qIDM2MCBNSHogKi8KKwkJLm51bV9vZl9yZWdzID0gQVJSQVlfU0laRShtaXBpX2RhdGFf cmF0ZV83MjBNYnBzKSwKKwkJLnJlZ3MgPSBtaXBpX2RhdGFfcmF0ZV83MjBNYnBzLAorCX0sCit9 OworCisjZGVmaW5lIENFTlRFUkVEX1JFQ1RBTkdMRShyZWN0LCBfd2lkdGgsIF9oZWlnaHQpCQkJ XAorCXsJCQkJCQkJCVwKKwkJLmxlZnQgPSByZWN0LmxlZnQgKyAoKHJlY3Qud2lkdGggLSAoX3dp ZHRoKSkgLyAyKSwJXAorCQkudG9wID0gcmVjdC50b3AgKyAoKHJlY3QuaGVpZ2h0IC0gKF9oZWln aHQpKSAvIDIpLAlcCisJCS53aWR0aCA9IChfd2lkdGgpLAkJCQkJXAorCQkuaGVpZ2h0ID0gKF9o ZWlnaHQpLAkJCQkJXAorCX0KKworLyogTW9kZSBjb25maWdzICovCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGlteDI4M19tb2RlIHN1cHBvcnRlZF9tb2Rlc18xMmJpdFtdID0geworCXsKKwkJLyogMjBN UGl4IDIxLjQwIGZwcyByZWFkb3V0IG1vZGUgMCAqLworCQkubW9kZSA9IElNWDI4M19NT0RFXzAs CisJCS5icHAgPSAxMiwKKwkJLndpZHRoID0gNTQ3MiwKKwkJLmhlaWdodCA9IDM2NDgsCisJCS5t aW5faG1heCA9IDU5MTQsIC8qIDg4NyBAIDQ4ME1Iei83Mk1IeiAqLworCQkubWluX3ZtYXggPSAz NzkzLCAvKiBMaW5lcyAqLworCisJCS52ZWZmID0gMzY5NCwKKwkJLnZzdCA9IDAsCisJCS52Y3Qg PSAwLAorCisJCS5oYmluX3JhdGlvID0gMSwKKwkJLnZiaW5fcmF0aW8gPSAxLAorCisJCS8qIDIw LjAwIEZQUyAqLworCQkuZGVmYXVsdF9obWF4ID0gNjAwMCwgLyogOTAwIEAgNDgwTUh6LzcyTUh6 ICovCisJCS5kZWZhdWx0X3ZtYXggPSA0MDAwLAorCisJCS5taW5fc2hyID0gMTEsCisJCS5ob3Jp em9udGFsX29iID0gOTYsCisJCS52ZXJ0aWNhbF9vYiA9IDE2LAorCQkuY3JvcCA9IENFTlRFUkVE X1JFQ1RBTkdMRShpbXgyODNfYWN0aXZlX2FyZWEsIDU0NzIsIDM2NDgpLAorCX0sCisJeworCQkv KgorCQkgKiBSZWFkb3V0IG1vZGUgMiA6IDIvMiBiaW5uZWQgbW9kZSAoMjczNngxODI0KQorCQkg Ki8KKwkJLm1vZGUgPSBJTVgyODNfTU9ERV8yLAorCQkuYnBwID0gMTIsCisJCS53aWR0aCA9IDI3 MzYsCisJCS5oZWlnaHQgPSAxODI0LAorCQkubWluX2htYXggPSAxODcwLCAvKiBQaXhlbHMgKDM2 MiAqIDM2MC83MiArIHBhZGRpbmcpICovCisJCS5taW5fdm1heCA9IDM4NDAsIC8qIExpbmVzICov CisKKwkJLyogNTAuMDAgRlBTICovCisJCS5kZWZhdWx0X2htYXggPSAxODcwLCAvKiAzNjIgQCAz NjBNSHovNzJNSHogKi8KKwkJLmRlZmF1bHRfdm1heCA9IDM5NjAsCisKKwkJLnZlZmYgPSAxODI0 LAorCQkudnN0ID0gMCwKKwkJLnZjdCA9IDAsCisKKwkJLmhiaW5fcmF0aW8gPSAyLAorCQkudmJp bl9yYXRpbyA9IDIsCisKKwkJLm1pbl9zaHIgPSAxMiwKKwkJLmhvcml6b250YWxfb2IgPSA0OCwK KwkJLnZlcnRpY2FsX29iID0gNCwKKworCQkuY3JvcCA9IENFTlRFUkVEX1JFQ1RBTkdMRShpbXgy ODNfYWN0aXZlX2FyZWEsIDU0NzIsIDM2NDgpLAorCX0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGlteDI4M19tb2RlIHN1cHBvcnRlZF9tb2Rlc18xMGJpdFtdID0geworCXsKKwkJLyogMjBN UGl4IDI1LjQ4IGZwcyByZWFkb3V0IG1vZGUgMSAqLworCQkubW9kZSA9IElNWDI4M19NT0RFXzEs CisJCS5icHAgPSAxMCwKKwkJLndpZHRoID0gNTQ3MiwKKwkJLmhlaWdodCA9IDM2NDgsCisJCS5t aW5faG1heCA9IDU5NjAsIC8qIDc0NSBAIDU3Nk1IeiAvIDcyTUh6ICovCisJCS5taW5fdm1heCA9 IDM3OTMsCisKKwkJLyogMjUuMDAgRlBTICovCisJCS5kZWZhdWx0X2htYXggPSAxNTAwLCAvKiA3 NTAgQCA1NzZNSHogLyA3Mk1IeiAqLworCQkuZGVmYXVsdF92bWF4ID0gMzg0MCwKKworCQkubWlu X3NociA9IDEwLAorCQkuaG9yaXpvbnRhbF9vYiA9IDk2LAorCQkudmVydGljYWxfb2IgPSAxNiwK KwkJLmNyb3AgPSBDRU5URVJFRF9SRUNUQU5HTEUoaW14MjgzX2FjdGl2ZV9hcmVhLCA1NDcyLCAz NjQ4KSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBpbXgyODNfbWJ1c19jb2Rlc1tdID0g eworCU1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLAorCU1FRElBX0JVU19GTVRfU1JHR0IxMF8x WDEwLAorfTsKKworLyogcmVndWxhdG9yIHN1cHBsaWVzICovCitzdGF0aWMgY29uc3QgY2hhciAq Y29uc3QgaW14MjgzX3N1cHBseV9uYW1lW10gPSB7CisJInZhZGQiLCAvKiBBbmFsb2cgKDIuOVYp IHN1cHBseSAqLworCSJ2ZGQxIiwgLyogU3VwcGx5IFZvbHRhZ2UgMiAoMS44Vikgc3VwcGx5ICov CisJInZkZDIiLCAvKiBTdXBwbHkgVm9sdGFnZSAzICgxLjJWKSBzdXBwbHkgKi8KK307CisKK3N0 cnVjdCBpbXgyODMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcmVnbWFwICpjY2k7 CisKKwljb25zdCBzdHJ1Y3QgaW14MjgzX2lucHV0X2ZyZXF1ZW5jeSAqZnJlcTsKKworCXN0cnVj dCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZDsKKworCXN0cnVjdCBjbGsg KnhjbGs7CisKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOworCXN0cnVjdCByZWd1bGF0 b3JfYnVsa19kYXRhIHN1cHBsaWVzW0FSUkFZX1NJWkUoaW14MjgzX3N1cHBseV9uYW1lKV07CisK KwkvKiBWNEwyIENvbnRyb2xzICovCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFu ZGxlcjsKKwlzdHJ1Y3QgdjRsMl9jdHJsICpleHBvc3VyZTsKKwlzdHJ1Y3QgdjRsMl9jdHJsICp2 Ymxhbms7CisJc3RydWN0IHY0bDJfY3RybCAqaGJsYW5rOworCXN0cnVjdCB2NGwyX2N0cmwgKnZm bGlwOworCisJdW5zaWduZWQgbG9uZyBsaW5rX2ZyZXFfYml0bWFwOworCisJdTE2IGhtYXg7CisJ dTMyIHZtYXg7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbXgyODMgKnRvX2lteDI4Myhz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2ZfY29uc3Qoc2Qs IHN0cnVjdCBpbXgyODMsIHNkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdldF9tb2RlX3Rh YmxlKHVuc2lnbmVkIGludCBjb2RlLAorCQkJCSAgY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICoq bW9kZV9saXN0LAorCQkJCSAgdW5zaWduZWQgaW50ICpudW1fbW9kZXMpCit7CisJc3dpdGNoIChj b2RlKSB7CisJY2FzZSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMjoKKwljYXNlIE1FRElBX0JV U19GTVRfU0dSQkcxMl8xWDEyOgorCWNhc2UgTUVESUFfQlVTX0ZNVF9TR0JSRzEyXzFYMTI6CisJ Y2FzZSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMjoKKwkJKm1vZGVfbGlzdCA9IHN1cHBvcnRl ZF9tb2Rlc18xMmJpdDsKKwkJKm51bV9tb2RlcyA9IEFSUkFZX1NJWkUoc3VwcG9ydGVkX21vZGVz XzEyYml0KTsKKwkJYnJlYWs7CisKKwljYXNlIE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwOgor CWNhc2UgTUVESUFfQlVTX0ZNVF9TR1JCRzEwXzFYMTA6CisJY2FzZSBNRURJQV9CVVNfRk1UX1NH QlJHMTBfMVgxMDoKKwljYXNlIE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwOgorCQkqbW9kZV9s aXN0ID0gc3VwcG9ydGVkX21vZGVzXzEwYml0OworCQkqbnVtX21vZGVzID0gQVJSQVlfU0laRShz dXBwb3J0ZWRfbW9kZXNfMTBiaXQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqbW9kZV9saXN0 ID0gTlVMTDsKKwkJKm51bV9tb2RlcyA9IDA7CisJCWJyZWFrOworCX0KK30KKworLyogQ2FsY3Vs YXRlIHRoZSBQaXhlbCBSYXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1vZGUgKi8KK3N0YXRpYyB1 NjQgaW14MjgzX3BpeGVsX3JhdGUoc3RydWN0IGlteDI4MyAqaW14MjgzLAorCQkJICAgICBjb25z dCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUpCit7CisJdW5zaWduZWQgaW50IGJwcCA9IG1vZGUt PmJwcDsKKwljb25zdCB1bnNpZ25lZCBpbnQgZGRyID0gMjsgLyogRG91YmxlIERhdGEgUmF0ZSAq LworCWNvbnN0IHVuc2lnbmVkIGludCBsYW5lcyA9IDQ7IC8qIE9ubHkgNCBsYW5lIHN1cHBvcnQg Ki8KKwl1NjQgbGlua19mcmVxdWVuY3kgPSBsaW5rX2ZyZXF1ZW5jaWVzW19fZmZzKGlteDI4My0+ bGlua19mcmVxX2JpdG1hcCldOworCisJcmV0dXJuIGxpbmtfZnJlcXVlbmN5ICogZGRyICogbGFu ZXMgLyBicHA7Cit9CisKKy8qIENvbnZlcnQgZnJvbSBhIHZhcmlhYmxlIHBpeGVsX3JhdGUgdG8g NzIgTUh6IGNsb2NrIGN5Y2xlcyAqLworc3RhdGljIHU2NCBpbXgyODNfaW50ZXJuYWxfY2xvY2so dW5zaWduZWQgaW50IHBpeGVsX3JhdGUsIHVuc2lnbmVkIGludCBwaXhlbHMpCit7CisJLyoKKwkg KiBEZXRlcm1pbmUgdGhlIGZvbGxvd2luZyBvcGVyYXRpb24gd2l0aG91dCBvdmVyZmxvdzoKKwkg KiAgICBwaXhlbHMgPSA3MiBNaHogLyBwaXhlbF9yYXRlCisJICoKKwkgKiBUaGUgaW50ZXJuYWwg Y2xvY2sgYXQgNzJNSHogYW5kIFBpeGVsIFJhdGUgKGJldHdlZW4gMjQwIGFuZCA1NzZNSHopCisJ ICogY2FuIGVhc2lseSBvdmVyZmxvdyB0aGlzIGNhbGN1bGF0aW9uLCBzbyBwcmUtZGl2aWRlIHRv IHNpbXBsaWZ5LgorCSAqLworCWNvbnN0IHUzMiBpY2xrX3ByZSA9IDcyOworCWNvbnN0IHUzMiBw Y2xrX3ByZSA9IHBpeGVsX3JhdGUgLyBIWl9QRVJfTUhaOworCisJcmV0dXJuIHBpeGVscyAqIGlj bGtfcHJlIC8gcGNsa19wcmU7Cit9CisKKy8qIEludGVybmFsIGNsb2NrICg3Mk1IeikgdG8gUGl4 ZWwgUmF0ZSBjbG9jayAoVmFyaWFibGUpICovCitzdGF0aWMgdTY0IGlteDI4M19pY2xrX3RvX3Bp eCh1bnNpZ25lZCBpbnQgcGl4ZWxfcmF0ZSwgdW5zaWduZWQgaW50IGN5Y2xlcykKK3sKKwkvKgor CSAqIERldGVybWluZSB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbiB3aXRob3V0IG92ZXJmbG93Ogor CSAqICAgIGN5Y2xlcyAqIHBpeGVsX3JhdGUgLyA3MiBNSHoKKwkgKgorCSAqIFRoZSBpbnRlcm5h bCBjbG9jayBhdCA3Mk1IeiBhbmQgUGl4ZWwgUmF0ZSAoYmV0d2VlbiAyNDAgYW5kIDU3Nk1IeikK KwkgKiBjYW4gZWFzaWx5IG92ZXJmbG93IHRoaXMgY2FsY3VsYXRpb24sIHNvIHByZS1kaXZpZGUg dG8gc2ltcGxpZnkuCisJICovCisJY29uc3QgdTMyIGljbGtfcHJlID0gNzI7CisJY29uc3QgdTMy IHBjbGtfcHJlID0gcGl4ZWxfcmF0ZSAvIEhaX1BFUl9NSFo7CisKKwlyZXR1cm4gY3ljbGVzICog cGNsa19wcmUgLyBpY2xrX3ByZTsKK30KKworLyogRGV0ZXJtaW5lIHRoZSBleHBvc3VyZSBiYXNl ZCBvbiBjdXJyZW50IGhtYXgsIHZtYXggYW5kIGEgZ2l2ZW4gU0hSICovCitzdGF0aWMgdTMyIGlt eDI4M19leHBvc3VyZShzdHJ1Y3QgaW14MjgzICppbXgyODMsCisJCQkgICBjb25zdCBzdHJ1Y3Qg aW14MjgzX21vZGUgKm1vZGUsIHU2NCBzaHIpCit7CisJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0 dXJlIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkICovCisJdTMyIG9mZnNldDsKKwl1NjQgbnVt ZXJhdG9yOworCisJLyogTnVtYmVyIG9mIGNsb2NrcyBwZXIgaW50ZXJuYWwgb2Zmc2V0IHBlcmlv ZCAqLworCW9mZnNldCA9IG1vZGUtPm1vZGUgPT0gSU1YMjgzX01PREVfMCA/IDIwOSA6IDE1NzsK KwludW1lcmF0b3IgPSAoaW14MjgzLT52bWF4ICogKHN2ciArIDEpIC0gc2hyKSAqIGlteDI4My0+ aG1heCArIG9mZnNldDsKKworCWRvX2RpdihudW1lcmF0b3IsIGlteDI4My0+aG1heCk7CisKKwly ZXR1cm4gY2xhbXAobnVtZXJhdG9yLCAwLCBVMzJfTUFYKTsKK30KKworc3RhdGljIHZvaWQgaW14 MjgzX2V4cG9zdXJlX2xpbWl0cyhzdHJ1Y3QgaW14MjgzICppbXgyODMsCisJCQkJICAgY29uc3Qg c3RydWN0IGlteDI4M19tb2RlICptb2RlLAorCQkJCSAgIHM2NCAqbWluX2V4cG9zdXJlLCBzNjQg Km1heF9leHBvc3VyZSkKK3sKKwl1MzIgc3ZyID0gMDsgLyogU1ZSIGZlYXR1cmUgaXMgbm90IGN1 cnJlbnRseSBzdXBwb3J0ZWQgKi8KKwl1NjQgbWluX3NociA9IG1vZGUtPm1pbl9zaHI7CisJLyog R2xvYmFsIFNodXR0ZXIgaXMgbm90IHN1cHBvcnRlZCAqLworCXU2NCBtYXhfc2hyID0gKHN2ciAr IDEpICogaW14MjgzLT52bWF4IC0gNDsKKworCW1heF9zaHIgPSBtaW4obWF4X3NociwgQklUKDE2 KSAtIDEpOworCisJKm1pbl9leHBvc3VyZSA9IGlteDI4M19leHBvc3VyZShpbXgyODMsIG1vZGUs IG1heF9zaHIpOworCSptYXhfZXhwb3N1cmUgPSBpbXgyODNfZXhwb3N1cmUoaW14MjgzLCBtb2Rl LCBtaW5fc2hyKTsKK30KKworLyoKKyAqIEludGVncmF0aW9uIFRpbWUgW3NdID0gWyB7Vk1BWCB4 IChTVlIgKyAxKSDigJMgKFNIUil9IHggSE1BWCArIG9mZnNldCBdCisgKiAgICAgICAgICAgICAg ICAgICAgICAvIFsgNzIgeCAxMF42IF0KKyAqLworc3RhdGljIHUzMiBpbXgyODNfc2hyKHN0cnVj dCBpbXgyODMgKmlteDI4MywgY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlLAorCQkgICAg ICB1MzIgZXhwb3N1cmUpCit7CisJdTMyIHN2ciA9IDA7IC8qIFNWUiBmZWF0dXJlIGlzIG5vdCBj dXJyZW50bHkgc3VwcG9ydGVkICovCisJdTMyIG9mZnNldDsKKwl1NjQgdGVtcDsKKworCS8qIE51 bWJlciBvZiBjbG9ja3MgcGVyIGludGVybmFsIG9mZnNldCBwZXJpb2QgKi8KKwlvZmZzZXQgPSBt b2RlLT5tb2RlID09IElNWDI4M19NT0RFXzAgPyAyMDkgOiAxNTc7CisJdGVtcCA9ICgodTY0KWV4 cG9zdXJlICogaW14MjgzLT5obWF4IC0gb2Zmc2V0KTsKKwlkb19kaXYodGVtcCwgaW14MjgzLT5o bWF4KTsKKworCXJldHVybiAoaW14MjgzLT52bWF4ICogKHN2ciArIDEpIC0gdGVtcCk7Cit9CisK K3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW14MjgzX3RwZ19tZW51W10gPSB7CisJIkRpc2Fi bGVkIiwKKwkiQWxsIDAwMGgiLAorCSJBbGwgRkZGaCIsCisJIkFsbCA1NTVoIiwKKwkiQWxsIEFB QWgiLAorCSJIb3Jpem9udGFsIGNvbG9yIGJhcnMiLAorCSJWZXJ0aWNhbCBjb2xvciBiYXJzIiwK K307CisKK3N0YXRpYyBjb25zdCBpbnQgaW14MjgzX3RwZ192YWxbXSA9IHsKKwlJTVgyODNfVFBH X1BBVF9BTExfMDAwLAorCUlNWDI4M19UUEdfUEFUX0FMTF8wMDAsCisJSU1YMjgzX1RQR19QQVRf QUxMX0ZGRiwKKwlJTVgyODNfVFBHX1BBVF9BTExfNTU1LAorCUlNWDI4M19UUEdfUEFUX0FMTF9B QUEsCisJSU1YMjgzX1RQR19QQVRfSF9DT0xPUl9CQVJTLAorCUlNWDI4M19UUEdfUEFUX1ZfQ09M T1JfQkFSUywKK307CisKK3N0YXRpYyBpbnQgaW14MjgzX3VwZGF0ZV90ZXN0X3BhdHRlcm4oc3Ry dWN0IGlteDI4MyAqaW14MjgzLCB1MzIgcGF0dGVybl9pbmRleCkKK3sKKwlpbnQgcmV0OworCisJ aWYgKHBhdHRlcm5faW5kZXggPj0gQVJSQVlfU0laRShpbXgyODNfdHBnX3ZhbCkpCisJCXJldHVy biAtRUlOVkFMOworCisJaWYgKCFwYXR0ZXJuX2luZGV4KQorCQlyZXR1cm4gY2NpX3dyaXRlKGlt eDI4My0+Y2NpLCBJTVgyODNfUkVHX1RQR19DVFJMLCAweDAwLCBOVUxMKTsKKworCXJldCA9IGNj aV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19UUEdfUEFULAorCQkJaW14MjgzX3RwZ192 YWxbcGF0dGVybl9pbmRleF0sIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZXR1cm4gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1RQR19DVFJMLAorCQkJIElN WDI4M19UUEdfQ1RSTF9DTEtFTiB8IElNWDI4M19UUEdfQ1RSTF9QQVRFTiwgTlVMTCk7Cit9CisK K3N0YXRpYyBpbnQgaW14MjgzX3NldF9jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCit7CisJ c3RydWN0IGlteDI4MyAqaW14MjgzID0gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVj dCBpbXgyODMsCisJCQkJCSAgICAgY3RybF9oYW5kbGVyKTsKKwljb25zdCBzdHJ1Y3QgaW14Mjgz X21vZGUgKm1vZGU7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10OworCWNvbnN0IHN0 cnVjdCBpbXgyODNfbW9kZSAqbW9kZV9saXN0OworCXN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAq c3RhdGU7CisJdW5zaWduZWQgaW50IG51bV9tb2RlczsKKwl1NjQgc2hyLCBwaXhlbF9yYXRlOwor CWludCByZXQgPSAwOworCisJc3RhdGUgPSB2NGwyX3N1YmRldl9nZXRfbG9ja2VkX2FjdGl2ZV9z dGF0ZSgmaW14MjgzLT5zZCk7CisJZm10ID0gdjRsMl9zdWJkZXZfc3RhdGVfZ2V0X2Zvcm1hdChz dGF0ZSwgMCk7CisKKwlnZXRfbW9kZV90YWJsZShmbXQtPmNvZGUsICZtb2RlX2xpc3QsICZudW1f bW9kZXMpOworCW1vZGUgPSB2NGwyX2ZpbmRfbmVhcmVzdF9zaXplKG1vZGVfbGlzdCwgbnVtX21v ZGVzLCB3aWR0aCwgaGVpZ2h0LAorCQkJCSAgICAgIGZtdC0+d2lkdGgsIGZtdC0+aGVpZ2h0KTsK KworCS8qCisJICogVGhlIFZCTEFOSyBjb250cm9sIG1heSBjaGFuZ2UgdGhlIGxpbWl0cyBvZiB1 c2FibGUgZXhwb3N1cmUsIHNvIGNoZWNrCisJICogYW5kIGFkanVzdCBpZiBuZWNlc3NhcnkuCisJ ICovCisJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX1ZCTEFOSykgeworCQkvKiBIb25vdXIgdGhl IFZCTEFOSyBsaW1pdHMgd2hlbiBzZXR0aW5nIGV4cG9zdXJlLiAqLworCQlzNjQgY3VycmVudF9l eHBvc3VyZSwgbWF4X2V4cG9zdXJlLCBtaW5fZXhwb3N1cmU7CisKKwkJaW14MjgzLT52bWF4ID0g bW9kZS0+aGVpZ2h0ICsgY3RybC0+dmFsOworCisJCWlteDI4M19leHBvc3VyZV9saW1pdHMoaW14 MjgzLCBtb2RlLAorCQkJCSAgICAgICAmbWluX2V4cG9zdXJlLCAmbWF4X2V4cG9zdXJlKTsKKwor CQljdXJyZW50X2V4cG9zdXJlID0gaW14MjgzLT5leHBvc3VyZS0+dmFsOworCQljdXJyZW50X2V4 cG9zdXJlID0gY2xhbXAoY3VycmVudF9leHBvc3VyZSwgbWluX2V4cG9zdXJlLAorCQkJCQkgbWF4 X2V4cG9zdXJlKTsKKworCQlfX3Y0bDJfY3RybF9tb2RpZnlfcmFuZ2UoaW14MjgzLT5leHBvc3Vy ZSwgbWluX2V4cG9zdXJlLAorCQkJCQkgbWF4X2V4cG9zdXJlLCAxLCBjdXJyZW50X2V4cG9zdXJl KTsKKwl9CisKKwkvKgorCSAqIEFwcGx5aW5nIFY0TDIgY29udHJvbCB2YWx1ZSBvbmx5IGhhcHBl bnMKKwkgKiB3aGVuIHBvd2VyIGlzIHVwIGZvciBzdHJlYW1pbmcKKwkgKi8KKwlpZiAoIXBtX3J1 bnRpbWVfZ2V0X2lmX2FjdGl2ZShpbXgyODMtPmRldiwgdHJ1ZSkpCisJCXJldHVybiAwOworCisJ c3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCXNociA9IGlt eDI4M19zaHIoaW14MjgzLCBtb2RlLCBjdHJsLT52YWwpOworCQlkZXZfZGJnKGlteDI4My0+ZGV2 LCAiVjRMMl9DSURfRVhQT1NVUkUgOiAlZCAtIFNIUjogJWxsZFxuIiwKKwkJCWN0cmwtPnZhbCwg c2hyKTsKKwkJcmV0ID0gY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1NIUiwgc2hy LCBOVUxMKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0hCTEFOSzoKKwkJcGl4ZWxfcmF0 ZSA9IGlteDI4M19waXhlbF9yYXRlKGlteDI4MywgbW9kZSk7CisJCWlteDI4My0+aG1heCA9IGlt eDI4M19pbnRlcm5hbF9jbG9jayhwaXhlbF9yYXRlLCBtb2RlLT53aWR0aCArIGN0cmwtPnZhbCk7 CisJCWRldl9kYmcoaW14MjgzLT5kZXYsICJWNEwyX0NJRF9IQkxBTksgOiAlZCAgSE1BWCA6ICV1 XG4iLAorCQkJY3RybC0+dmFsLCBpbXgyODMtPmhtYXgpOworCQlyZXQgPSBjY2lfd3JpdGUoaW14 MjgzLT5jY2ksIElNWDI4M19SRUdfSE1BWCwgaW14MjgzLT5obWF4LCBOVUxMKTsKKwkJYnJlYWs7 CisKKwljYXNlIFY0TDJfQ0lEX1ZCTEFOSzoKKwkJaW14MjgzLT52bWF4ID0gbW9kZS0+aGVpZ2h0 ICsgY3RybC0+dmFsOworCQlkZXZfZGJnKGlteDI4My0+ZGV2LCAiVjRMMl9DSURfVkJMQU5LIDog JWQgIFZNQVggOiAldVxuIiwKKwkJCWN0cmwtPnZhbCwgaW14MjgzLT52bWF4KTsKKwkJcmV0ID0g Y2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1ZNQVgsIGlteDI4My0+dm1heCwgTlVM TCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOOgorCQlyZXQgPSBj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfQU5BTE9HX0dBSU4sIGN0cmwtPnZhbCwg TlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9ESUdJVEFMX0dBSU46CisJCXJldCA9 IGNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19ESUdJVEFMX0dBSU4sIGN0cmwtPnZh bCwgTlVMTCk7CisJCWJyZWFrOworCisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJLyoKKwkJICog VkZMSVAgaXMgbWFuYWdlZCBieSBCSVQoMCkgb2YgSU1YMjgzX1JFR19IVFJJTU1JTkcgYWRkcmVz cywgaGVuY2UKKwkJICogYm90aCBuZWVkIHRvIGJlIHNldCBzaW11bHRhbmVvdXNseS4KKwkJICov CisJCWlmIChjdHJsLT52YWwpIHsKKwkJCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JF R19IVFJJTU1JTkcsCisJCQkJICBJTVgyODNfSFRSSU1NSU5HX0VOIHwgSU1YMjgzX01EVlJFViwg JnJldCk7CisJCX0gZWxzZSB7CisJCQljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdf SFRSSU1NSU5HLAorCQkJCSAgSU1YMjgzX0hUUklNTUlOR19FTiwgJnJldCk7CisJCX0KKwkJYnJl YWs7CisKKwljYXNlIFY0TDJfQ0lEX1RFU1RfUEFUVEVSTjoKKwkJcmV0ID0gaW14MjgzX3VwZGF0 ZV90ZXN0X3BhdHRlcm4oaW14MjgzLCBjdHJsLT52YWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6 CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICJjdHJsKGlkOjB4JXgsIHZhbDoweCV4KSBpcyBub3Qg aGFuZGxlZFxuIiwKKwkJCWN0cmwtPmlkLCBjdHJsLT52YWwpOworCQlicmVhazsKKwl9CisKKwlw bV9ydW50aW1lX3B1dChpbXgyODMtPmRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgaW14MjgzX2N0cmxfb3BzID0geworCS5zX2N0cmwg PSBpbXgyODNfc2V0X2N0cmwsCit9OworCitzdGF0aWMgaW50IGlteDI4M19lbnVtX21idXNfY29k ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUg KnNkX3N0YXRlLAorCQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfbWJ1c19jb2RlX2VudW0gKmNvZGUp Cit7CisJaWYgKGNvZGUtPmluZGV4ID49IEFSUkFZX1NJWkUoaW14MjgzX21idXNfY29kZXMpKQor CQlyZXR1cm4gLUVJTlZBTDsKKworCWNvZGUtPmNvZGUgPSBpbXgyODNfbWJ1c19jb2Rlc1tjb2Rl LT5pbmRleF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbXgyODNfZW51bV9mcmFt ZV9zaXplKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZf c3RhdGUgKnNkX3N0YXRlLAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51 bSAqZnNlKQoreworCWNvbnN0IHN0cnVjdCBpbXgyODNfbW9kZSAqbW9kZV9saXN0OworCXVuc2ln bmVkIGludCBudW1fbW9kZXM7CisKKwlnZXRfbW9kZV90YWJsZShmc2UtPmNvZGUsICZtb2RlX2xp c3QsICZudW1fbW9kZXMpOworCisJaWYgKGZzZS0+aW5kZXggPj0gbnVtX21vZGVzKQorCQlyZXR1 cm4gLUVJTlZBTDsKKworCWZzZS0+bWluX3dpZHRoID0gbW9kZV9saXN0W2ZzZS0+aW5kZXhdLndp ZHRoOworCWZzZS0+bWF4X3dpZHRoID0gZnNlLT5taW5fd2lkdGg7CisJZnNlLT5taW5faGVpZ2h0 ID0gbW9kZV9saXN0W2ZzZS0+aW5kZXhdLmhlaWdodDsKKwlmc2UtPm1heF9oZWlnaHQgPSBmc2Ut Pm1pbl9oZWlnaHQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW14MjgzX3VwZGF0 ZV9pbWFnZV9wYWRfZm9ybWF0KHN0cnVjdCBpbXgyODMgKmlteDI4MywKKwkJCQkJICAgY29uc3Qg c3RydWN0IGlteDI4M19tb2RlICptb2RlLAorCQkJCQkgICBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10ICpmb3JtYXQpCit7CisJZm9ybWF0LT53aWR0aCA9IG1vZGUtPndpZHRoOworCWZvcm1hdC0+ aGVpZ2h0ID0gbW9kZS0+aGVpZ2h0OworCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7 CisJZm9ybWF0LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1JBVzsKKwlmb3JtYXQtPnlj YmNyX2VuYyA9IFY0TDJfWUNCQ1JfRU5DXzYwMTsKKwlmb3JtYXQtPnF1YW50aXphdGlvbiA9IFY0 TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0U7CisJZm9ybWF0LT54ZmVyX2Z1bmMgPSBWNEwyX1hG RVJfRlVOQ19OT05FOworfQorCitzdGF0aWMgaW50IGlteDI4M19pbml0X3N0YXRlKHN0cnVjdCB2 NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUp Cit7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKwlzdHJ1Y3QgdjRs Ml9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7CisJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2Rl OworCXN0cnVjdCB2NGwyX3JlY3QgKmNyb3A7CisKKwkvKiBJbml0aWFsaXplIHRyeV9mbXQgKi8K Kwlmb3JtYXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHN0YXRlLCBJTUFHRV9QQUQp OworCisJbW9kZSA9ICZzdXBwb3J0ZWRfbW9kZXNfMTJiaXRbMF07CisJZm9ybWF0LT5jb2RlID0g TUVESUFfQlVTX0ZNVF9TUkdHQjEyXzFYMTI7CisJaW14MjgzX3VwZGF0ZV9pbWFnZV9wYWRfZm9y bWF0KGlteDI4MywgbW9kZSwgZm9ybWF0KTsKKworCS8qIEluaXRpYWxpemUgY3JvcCByZWN0YW5n bGUgdG8gbW9kZSBkZWZhdWx0ICovCisJY3JvcCA9IHY0bDJfc3ViZGV2X3N0YXRlX2dldF9jcm9w KHN0YXRlLCBJTUFHRV9QQUQpOworCSpjcm9wID0gbW9kZS0+Y3JvcDsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZCBpbXgyODNfc2V0X2ZyYW1pbmdfbGltaXRzKHN0cnVjdCBpbXgyODMg KmlteDI4MywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGUpCit7CisJ dTY0IHBpeGVsX3JhdGUgPSBpbXgyODNfcGl4ZWxfcmF0ZShpbXgyODMsIG1vZGUpOworCXU2NCBt aW5faGJsYW5rLCBtYXhfaGJsYW5rLCBkZWZfaGJsYW5rOworCisJLyogSW5pdGlhbGlzZSBobWF4 IGFuZCB2bWF4IGZvciBleHBvc3VyZSBjYWxjdWxhdGlvbnMgKi8KKwlpbXgyODMtPmhtYXggPSBp bXgyODNfaW50ZXJuYWxfY2xvY2socGl4ZWxfcmF0ZSwgbW9kZS0+ZGVmYXVsdF9obWF4KTsKKwlp bXgyODMtPnZtYXggPSBtb2RlLT5kZWZhdWx0X3ZtYXg7CisKKwkvKgorCSAqIEhvcml6b250YWwg QmxhbmtpbmcKKwkgKiBDb252ZXJ0IHRoZSBITUFYX01BWCAoNzJNSHopIHRvIFBpeGVsIHJhdGUg dmFsdWVzIGZvciBIQkxBTktfTUFYCisJICovCisJbWluX2hibGFuayA9IG1vZGUtPm1pbl9obWF4 IC0gbW9kZS0+d2lkdGg7CisJbWF4X2hibGFuayA9IGlteDI4M19pY2xrX3RvX3BpeChwaXhlbF9y YXRlLCBJTVgyODNfSE1BWF9NQVgpIC0gbW9kZS0+d2lkdGg7CisJZGVmX2hibGFuayA9IG1vZGUt PmRlZmF1bHRfaG1heCAtIG1vZGUtPndpZHRoOworCV9fdjRsMl9jdHJsX21vZGlmeV9yYW5nZShp bXgyODMtPmhibGFuaywgbWluX2hibGFuaywgbWF4X2hibGFuaywgMSwKKwkJCQkgZGVmX2hibGFu ayk7CisJX192NGwyX2N0cmxfc19jdHJsKGlteDI4My0+aGJsYW5rLCBkZWZfaGJsYW5rKTsKKwor CS8qIFZlcnRpY2FsIEJsYW5raW5nICovCisJX192NGwyX2N0cmxfbW9kaWZ5X3JhbmdlKGlteDI4 My0+dmJsYW5rLCBtb2RlLT5taW5fdm1heCAtIG1vZGUtPmhlaWdodCwKKwkJCQkgSU1YMjgzX1ZN QVhfTUFYIC0gbW9kZS0+aGVpZ2h0LCAxLAorCQkJCSBtb2RlLT5kZWZhdWx0X3ZtYXggLSBtb2Rl LT5oZWlnaHQpOworCV9fdjRsMl9jdHJsX3NfY3RybChpbXgyODMtPnZibGFuaywgbW9kZS0+ZGVm YXVsdF92bWF4IC0gbW9kZS0+aGVpZ2h0KTsKK30KKworc3RhdGljIGludCBpbXgyODNfc2V0X3Bh ZF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2 X3N0YXRlICpzZF9zdGF0ZSwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQor eworCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKmZvcm1hdDsKKwljb25zdCBzdHJ1Y3QgaW14 MjgzX21vZGUgKm1vZGU7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsK Kwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1vZGVfbGlzdDsKKwl1bnNpZ25lZCBpbnQgbnVt X21vZGVzOworCisJZ2V0X21vZGVfdGFibGUoZm10LT5mb3JtYXQuY29kZSwgJm1vZGVfbGlzdCwg Jm51bV9tb2Rlcyk7CisKKwltb2RlID0gdjRsMl9maW5kX25lYXJlc3Rfc2l6ZShtb2RlX2xpc3Qs IG51bV9tb2Rlcywgd2lkdGgsIGhlaWdodCwKKwkJCQkgICAgICBmbXQtPmZvcm1hdC53aWR0aCwg Zm10LT5mb3JtYXQuaGVpZ2h0KTsKKworCWZtdC0+Zm9ybWF0LndpZHRoID0gbW9kZS0+d2lkdGg7 CisJZm10LT5mb3JtYXQuaGVpZ2h0ID0gbW9kZS0+aGVpZ2h0OworCWZtdC0+Zm9ybWF0LmZpZWxk ID0gVjRMMl9GSUVMRF9OT05FOworCWZtdC0+Zm9ybWF0LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9S U1BBQ0VfUkFXOworCWZtdC0+Zm9ybWF0LnljYmNyX2VuYyA9IFY0TDJfWUNCQ1JfRU5DXzYwMTsK KwlmbXQtPmZvcm1hdC5xdWFudGl6YXRpb24gPSBWNEwyX1FVQU5USVpBVElPTl9GVUxMX1JBTkdF OworCWZtdC0+Zm9ybWF0LnhmZXJfZnVuYyA9IFY0TDJfWEZFUl9GVU5DX05PTkU7CisKKwlmb3Jt YXQgPSB2NGwyX3N1YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHNkX3N0YXRlLCAwKTsKKworCWlmIChm bXQtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpCisJCWlteDI4M19zZXRfZnJh bWluZ19saW1pdHMoaW14MjgzLCBtb2RlKTsKKworCSpmb3JtYXQgPSBmbXQtPmZvcm1hdDsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlteDI4M19zdGFuZGJ5X2NhbmNlbChzdHJ1Y3Qg aW14MjgzICppbXgyODMpCit7CisJdW5zaWduZWQgaW50IGxpbmtfZnJlcV9pZHg7CisJaW50IHJl dCA9IDA7CisKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRCWSwKKwkJ ICBJTVgyODNfU1RCTE9HSUMgfCBJTVgyODNfU1RCRFYsICZyZXQpOworCisJLyogQ29uZmlndXJl IFBMTCBjbG9ja3MgYmFzZWQgb24gdGhlIHhjbGsgKi8KKwljY2lfbXVsdGlfcmVnX3dyaXRlKGlt eDI4My0+Y2NpLCBpbXgyODMtPmZyZXEtPnJlZ3MsCisJCQkgICAgaW14MjgzLT5mcmVxLT5yZWdf Y291bnQsICZyZXQpOworCisJZGV2X2RiZyhpbXgyODMtPmRldiwgIlVzaW5nIGNsayBmcmVxICVs ZCBNSHoiLAorCQlpbXgyODMtPmZyZXEtPm1oeiAvIEhaX1BFUl9NSFopOworCisJLyogSW5pdGlh bGlzZSBjb21tdW5pY2F0aW9uICovCisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVH X1BMU1RNRzA4LCBJTVgyODNfUExTVE1HMDhfVkFMLCAmcmV0KTsKKwljY2lfd3JpdGUoaW14Mjgz LT5jY2ksIElNWDI4M19SRUdfUExTVE1HMDIsIElNWDI4M19QTFNUTUcwMl9WQUwsICZyZXQpOwor CisJLyogRW5hYmxlIFBMTCAqLworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19T VEJQTCwgSU1YMjgzX1NUQlBMX05PUk1BTCwgJnJldCk7CisKKwkvKiBDb25maWd1cmUgdGhlIE1J UEkgbGluayBzcGVlZCAqLworCWxpbmtfZnJlcV9pZHggPSBfX2ZmcyhpbXgyODMtPmxpbmtfZnJl cV9iaXRtYXApOworCWNjaV9tdWx0aV9yZWdfd3JpdGUoaW14MjgzLT5jY2ksIGxpbmtfZnJlcV9y ZWdsaXN0W2xpbmtfZnJlcV9pZHhdLnJlZ3MsCisJCQkgICAgbGlua19mcmVxX3JlZ2xpc3RbbGlu a19mcmVxX2lkeF0ubnVtX29mX3JlZ3MsCisJCQkgICAgJnJldCk7CisKKwkvKiAxc3QgU3RhYmls aXNhdGlvbiBwZXJpb2Qgb2YgMSBtcyBvciBtb3JlICovCisJdXNsZWVwX3JhbmdlKDEwMDAsIDIw MDApOworCisJLyogQWN0aXZhdGUgKi8KKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19S RUdfU1RBTkRCWSwgSU1YMjgzX0FDVElWRSwgJnJldCk7CisKKwkvKiAybmQgU3RhYmlsaXNhdGlv biBwZXJpb2Qgb2YgMTltcyBvciBtb3JlICovCisJdXNsZWVwX3JhbmdlKDE5MDAwLCAyMDAwMCk7 CisKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfQ0xBTVAsIElNWDI4M19DTFBT UVJTVCwgJnJldCk7CisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX1hNU1RBLCAw LCAmcmV0KTsKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1lOQ0RSViwgSU1Y MjgzX1NZTkNEUlZfWEhTX1hWUywgJnJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBTdGFy dCBzdHJlYW1pbmcgKi8KK3N0YXRpYyBpbnQgaW14MjgzX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3Qg aW14MjgzICppbXgyODMsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlKQor eworCWNvbnN0IHN0cnVjdCBpbXgyODNfcmVhZG91dF9tb2RlICpyZWFkb3V0OworCWNvbnN0IHN0 cnVjdCBpbXgyODNfbW9kZSAqbW9kZTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10 ICpmbXQ7CisJY29uc3Qgc3RydWN0IGlteDI4M19tb2RlICptb2RlX2xpc3Q7CisJdW5zaWduZWQg aW50IG51bV9tb2RlczsKKwl1MzIgdl93aWRjdXQ7CisJczMyIHZfcG9zOworCXUzMiB3cml0ZV92 X3NpemU7CisJdTMyIHlfb3V0X3NpemU7CisJaW50IHJldCA9IDA7CisKKwlmbXQgPSB2NGwyX3N1 YmRldl9zdGF0ZV9nZXRfZm9ybWF0KHN0YXRlLCAwKTsKKwlnZXRfbW9kZV90YWJsZShmbXQtPmNv ZGUsICZtb2RlX2xpc3QsICZudW1fbW9kZXMpOworCW1vZGUgPSB2NGwyX2ZpbmRfbmVhcmVzdF9z aXplKG1vZGVfbGlzdCwgbnVtX21vZGVzLCB3aWR0aCwgaGVpZ2h0LAorCQkJCSAgICAgIGZtdC0+ d2lkdGgsIGZtdC0+aGVpZ2h0KTsKKworCXJldCA9IGlteDI4M19zdGFuZGJ5X2NhbmNlbChpbXgy ODMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBjYW5j ZWwgc3RhbmRieVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBTZXQgdGhlIHJl YWRvdXQgbW9kZSByZWdpc3RlcnMuCisJICogTURTRUwzIGFuZCBNRFNFTDQgYXJlIHVwZGF0ZWQg dG8gZW5hYmxlIEFyYml0cmFyeSBWZXJ0aWNhbCBDcm9wcGluZy4KKwkgKi8KKwlyZWFkb3V0ID0g JmlteDI4M19yZWFkb3V0X21vZGVzW21vZGUtPm1vZGVdOworCWNjaV93cml0ZShpbXgyODMtPmNj aSwgSU1YMjgzX1JFR19NRFNFTDEsIHJlYWRvdXQtPm1kc2VsMSwgJnJldCk7CisJY2NpX3dyaXRl KGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX01EU0VMMiwgcmVhZG91dC0+bWRzZWwyLCAmcmV0KTsK KwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfTURTRUwzLAorCQkgIHJlYWRvdXQt Pm1kc2VsMyB8IElNWDI4M19NRFNFTDNfVkNST1BfRU4sICZyZXQpOworCWNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19NRFNFTDQsCisJCSAgcmVhZG91dC0+bWRzZWw0IHwgSU1YMjgz X01EU0VMNF9WQ1JPUF9FTiwgJnJldCk7CisKKwkvKiBNb2RlIDFTIHNwZWNpZmljIGVudHJpZXMg ZnJvbSB0aGUgUmVhZG91dCBEcml2ZSBNb2RlIFRhYmxlcyAqLworCWlmIChtb2RlLT5tb2RlID09 IElNWDI4M19NT0RFXzFTKSB7CisJCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19N RFNFTDcsIDB4MDEsICZyZXQpOworCQljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdf TURTRUwxOCwgMHgxMDk4LCAmcmV0KTsKKwl9CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaW14 MjgzLT5kZXYsICJmYWlsZWQgdG8gc2V0IHJlYWRvdXRcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCS8qIEluaXRpYWxpc2UgU1ZSLiBVbnN1cHBvcnRlZCBmb3Igbm93IC0gQWx3YXlzIDAgKi8K KwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1ZSLCAweDAwLCAmcmV0KTsKKwor CWRldl9kYmcoaW14MjgzLT5kZXYsICJNb2RlOiBTaXplICVkIHggJWRcbiIsIG1vZGUtPndpZHRo LCBtb2RlLT5oZWlnaHQpOworCWRldl9kYmcoaW14MjgzLT5kZXYsICJBbmFsb2d1ZSBDcm9wIChp biB0aGUgbW9kZSkgJWQsJWQgJWR4JWRcbiIsCisJCW1vZGUtPmNyb3AubGVmdCwKKwkJbW9kZS0+ Y3JvcC50b3AsCisJCW1vZGUtPmNyb3Aud2lkdGgsCisJCW1vZGUtPmNyb3AuaGVpZ2h0KTsKKwor CXlfb3V0X3NpemUgPSBtb2RlLT5jcm9wLmhlaWdodCAvIG1vZGUtPnZiaW5fcmF0aW87CisJd3Jp dGVfdl9zaXplID0geV9vdXRfc2l6ZSArIG1vZGUtPnZlcnRpY2FsX29iOworCS8qCisJICogY3Jv cHBpbmcgc3RhcnQgcG9zaXRpb24gPSAoVldJTlBPUyDigJMgVnN0KSDDlyAyCisJICogY3JvcHBp bmcgd2lkdGggPSBWZWZmIOKAkyAoVldJRENVVCDigJMgVmN0KSDDlyAyCisJICovCisJdl9wb3Mg PSBpbXgyODMtPnZmbGlwLT52YWwgPworCQkoKC1tb2RlLT5jcm9wLnRvcCAvIG1vZGUtPnZiaW5f cmF0aW8pIC8gMikgKyBtb2RlLT52c3QgOgorCQkoKG1vZGUtPmNyb3AudG9wIC8gbW9kZS0+dmJp bl9yYXRpbykgLyAyKSAgKyBtb2RlLT52c3Q7CisJdl93aWRjdXQgPSAoKG1vZGUtPnZlZmYgLSB5 X291dF9zaXplKSAvIDIpICsgbW9kZS0+dmN0OworCisJY2NpX3dyaXRlKGlteDI4My0+Y2NpLCBJ TVgyODNfUkVHX1lfT1VUX1NJWkUsIHlfb3V0X3NpemUsICZyZXQpOworCWNjaV93cml0ZShpbXgy ODMtPmNjaSwgSU1YMjgzX1JFR19XUklURV9WU0laRSwgd3JpdGVfdl9zaXplLCAmcmV0KTsKKwlj Y2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfVldJRENVVCwgdl93aWRjdXQsICZyZXQp OworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19WV0lOUE9TLCB2X3BvcywgJnJl dCk7CisKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfT0JfU0laRV9WLCBtb2Rl LT52ZXJ0aWNhbF9vYiwgJnJldCk7CisKKwkvKiBUT0RPOiBWYWxpZGF0ZSBtb2RlLT5jcm9wIGlz IGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gaW14MjgzX25hdGl2ZV9hcmVhICovCisJY2NpX3dyaXRl KGlteDI4My0+Y2NpLCBJTVgyODNfUkVHX0hUUklNTUlOR19TVEFSVCwgbW9kZS0+Y3JvcC5sZWZ0 LCAmcmV0KTsKKwljY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfSFRSSU1NSU5HX0VO RCwKKwkJICBtb2RlLT5jcm9wLmxlZnQgKyBtb2RlLT5jcm9wLndpZHRoLCAmcmV0KTsKKworCS8q IERpc2FibGUgZW1iZWRkZWQgZGF0YSAqLworCWNjaV93cml0ZShpbXgyODMtPmNjaSwgSU1YMjgz X1JFR19FQkRfWF9PVVRfU0laRSwgMCwgJnJldCk7CisKKwkvKiBBcHBseSBjdXN0b21pemVkIHZh bHVlcyBmcm9tIGNvbnRyb2xzIChITUFYL1ZNQVgvU0hSKSAqLworCXJldCA9ICBfX3Y0bDJfY3Ry bF9oYW5kbGVyX3NldHVwKGlteDI4My0+c2QuY3RybF9oYW5kbGVyKTsKKworCXJldHVybiByZXQ7 Cit9CisKK3N0YXRpYyBpbnQgaW14MjgzX2VuYWJsZV9zdHJlYW1zKHN0cnVjdCB2NGwyX3N1YmRl diAqc2QsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc3RhdGUsIHUzMiBwYWQsCisJ CQkJIHU2NCBzdHJlYW1zX21hc2spCit7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14 MjgzKHNkKTsKKwlpbnQgcmV0OworCisJaWYgKHBhZCAhPSBJTUFHRV9QQUQpCisJCXJldHVybiAt RUlOVkFMOworCisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYyhpbXgyODMtPmRldik7CisJaWYg KHJldCA8IDApIHsKKwkJcG1fcnVudGltZV9wdXRfbm9pZGxlKGlteDI4My0+ZGV2KTsKKwkJcmV0 dXJuIHJldDsKKwl9CisKKwlyZXQgPSBpbXgyODNfc3RhcnRfc3RyZWFtaW5nKGlteDI4Mywgc3Rh dGUpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JwbV9wdXQ7CisKKwlyZXR1cm4gMDsKKworZXJy X3JwbV9wdXQ6CisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShpbXgyODMtPmRldik7CisJcG1f cnVudGltZV9wdXRfYXV0b3N1c3BlbmQoaW14MjgzLT5kZXYpOworCisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIGludCBpbXgyODNfZGlzYWJsZV9zdHJlYW1zKHN0cnVjdCB2NGwyX3N1YmRldiAq c2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnN0YXRlLCB1MzIgcGFkLAorCQkJ CSAgdTY0IHN0cmVhbXNfbWFzaykKK3sKKwlzdHJ1Y3QgaW14MjgzICppbXgyODMgPSB0b19pbXgy ODMoc2QpOworCWludCByZXQ7CisKKwlpZiAocGFkICE9IElNQUdFX1BBRCkKKwkJcmV0dXJuIC1F SU5WQUw7CisKKwlyZXQgPSBjY2lfd3JpdGUoaW14MjgzLT5jY2ksIElNWDI4M19SRUdfU1RBTkRC WSwgSU1YMjgzX1NUQkxPR0lDLCBOVUxMKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKGlteDI4My0+ ZGV2LCAiRmFpbGVkIHRvIHN0b3Agc3RyZWFtXG4iKTsKKworCXBtX3J1bnRpbWVfbWFya19sYXN0 X2J1c3koaW14MjgzLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKGlteDI4My0+ ZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFBvd2VyL2Nsb2NrIG1hbmFnZW1lbnQgZnVu Y3Rpb25zICovCitzdGF0aWMgaW50IGlteDI4M19wb3dlcl9vbihzdHJ1Y3QgaW14MjgzICppbXgy ODMpCit7CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9T SVpFKGlteDI4M19zdXBwbHlfbmFtZSksCisJCQkJICAgIGlteDI4My0+c3VwcGxpZXMpOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBlbmFibGUgcmVndWxh dG9yc1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxl KGlteDI4My0+eGNsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiZmFp bGVkIHRvIGVuYWJsZSBjbG9ja1xuIik7CisJCWdvdG8gcmVnX29mZjsKKwl9CisKKwlncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAoaW14MjgzLT5yZXNldF9ncGlvLCAwKTsKKworCXVzbGVlcF9yYW5n ZShJTVgyODNfWENMUl9NSU5fREVMQVlfVVMsCisJCSAgICAgSU1YMjgzX1hDTFJfTUlOX0RFTEFZ X1VTICsgSU1YMjgzX1hDTFJfREVMQVlfUkFOR0VfVVMpOworCisJcmV0dXJuIDA7CisKK3JlZ19v ZmY6CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFt ZSksIGlteDI4My0+c3VwcGxpZXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14 MjgzX3Bvd2VyX29mZihzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJZ3Bpb2Rfc2V0X3ZhbHVl X2NhbnNsZWVwKGlteDI4My0+cmVzZXRfZ3BpbywgMSk7CisJcmVndWxhdG9yX2J1bGtfZGlzYWJs ZShBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSksIGlteDI4My0+c3VwcGxpZXMpOworCWNs a19kaXNhYmxlX3VucHJlcGFyZShpbXgyODMtPnhjbGspOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgaW14MjgzX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlt eDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKworCXJldHVybiBpbXgyODNfcG93ZXJfb24o aW14MjgzKTsKK30KKworc3RhdGljIGludCBpbXgyODNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBk ZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gZGV2X2dldF9kcnZkYXRh KGRldik7CisJc3RydWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKworCWlteDI4 M19wb3dlcl9vZmYoaW14MjgzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlteDI4 M19nZXRfcmVndWxhdG9ycyhzdHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJdW5zaWduZWQgaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXgyODNfc3VwcGx5X25hbWUpOyBp KyspCisJCWlteDI4My0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gaW14MjgzX3N1cHBseV9uYW1lW2ld OworCisJcmV0dXJuIGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KGlteDI4My0+ZGV2LAorCQkJCSAg ICAgICBBUlJBWV9TSVpFKGlteDI4M19zdXBwbHlfbmFtZSksCisJCQkJICAgICAgIGlteDI4My0+ c3VwcGxpZXMpOworfQorCisvKiBWZXJpZnkgY2hpcCBJRCAqLworc3RhdGljIGludCBpbXgyODNf aWRlbnRpZnlfbW9kdWxlKHN0cnVjdCBpbXgyODMgKmlteDI4MykKK3sKKwlpbnQgcmV0OworCXU2 NCB2YWw7CisKKwlyZXQgPSBjY2lfcmVhZChpbXgyODMtPmNjaSwgSU1YMjgzX1JFR19DSElQX0lE LCAmdmFsLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaW14MjgzLT5kZXYsICJmYWls ZWQgdG8gcmVhZCBjaGlwIGlkICV4LCB3aXRoIGVycm9yICVkXG4iLAorCQkJSU1YMjgzX0NISVBf SUQsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHZhbCAhPSBJTVgyODNfQ0hJUF9J RCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiY2hpcCBpZCBtaXNtYXRjaDogJXghPSVsbHhc biIsCisJCQlJTVgyODNfQ0hJUF9JRCwgdmFsKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14MjgzX2dldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJf c3ViZGV2ICpzZCwKKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAorCQkJ CXN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKK3sKKwlzd2l0Y2ggKHNlbC0+dGFy Z2V0KSB7CisJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUDogeworCQlzZWwtPnIgPSAqdjRsMl9zdWJk ZXZfc3RhdGVfZ2V0X2Nyb3Aoc2Rfc3RhdGUsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwljYXNl IFY0TDJfU0VMX1RHVF9OQVRJVkVfU0laRToKKwkJc2VsLT5yID0gaW14MjgzX25hdGl2ZV9hcmVh OworCQlyZXR1cm4gMDsKKworCWNhc2UgVjRMMl9TRUxfVEdUX0NST1BfREVGQVVMVDoKKwljYXNl IFY0TDJfU0VMX1RHVF9DUk9QX0JPVU5EUzoKKwkJc2VsLT5yID0gaW14MjgzX2FjdGl2ZV9hcmVh OworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgaW14MjgzX2NvcmVfb3BzID0g eworCS5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2N0cmxfc3ViZGV2X3N1YnNjcmliZV9ldmVudCwK KwkudW5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2V2ZW50X3N1YmRldl91bnN1YnNjcmliZSwKK307 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGlteDI4M192aWRl b19vcHMgPSB7CisJLnNfc3RyZWFtID0gdjRsMl9zdWJkZXZfc19zdHJlYW1faGVscGVyLAorfTsK Kworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIGlteDI4M19wYWRfb3Bz ID0geworCS5lbnVtX21idXNfY29kZSA9IGlteDI4M19lbnVtX21idXNfY29kZSwKKwkuZ2V0X2Zt dCA9IHY0bDJfc3ViZGV2X2dldF9mbXQsCisJLnNldF9mbXQgPSBpbXgyODNfc2V0X3BhZF9mb3Jt YXQsCisJLmdldF9zZWxlY3Rpb24gPSBpbXgyODNfZ2V0X3NlbGVjdGlvbiwKKwkuZW51bV9mcmFt ZV9zaXplID0gaW14MjgzX2VudW1fZnJhbWVfc2l6ZSwKKwkuZW5hYmxlX3N0cmVhbXMgPSBpbXgy ODNfZW5hYmxlX3N0cmVhbXMsCisJLmRpc2FibGVfc3RyZWFtcyA9IGlteDI4M19kaXNhYmxlX3N0 cmVhbXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2ludGVybmFsX29w cyBpbXgyODNfaW50ZXJuYWxfb3BzID0geworCS5pbml0X3N0YXRlID0gaW14MjgzX2luaXRfc3Rh dGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBpbXgyODNfc3Vi ZGV2X29wcyA9IHsKKwkuY29yZSA9ICZpbXgyODNfY29yZV9vcHMsCisJLnZpZGVvID0gJmlteDI4 M192aWRlb19vcHMsCisJLnBhZCA9ICZpbXgyODNfcGFkX29wcywKK307CisKKy8qIEluaXRpYWxp emUgY29udHJvbCBoYW5kbGVycyAqLworc3RhdGljIGludCBpbXgyODNfaW5pdF9jb250cm9scyhz dHJ1Y3QgaW14MjgzICppbXgyODMpCit7CisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpjdHJs X2hkbHI7CisJc3RydWN0IHY0bDJfZndub2RlX2RldmljZV9wcm9wZXJ0aWVzIHByb3BzOworCXN0 cnVjdCB2NGwyX2N0cmwgKmxpbmtfZnJlcTsKKwljb25zdCBzdHJ1Y3QgaW14MjgzX21vZGUgKm1v ZGUgPSAmc3VwcG9ydGVkX21vZGVzXzEyYml0WzBdOworCXU2NCBtaW5faGJsYW5rLCBtYXhfaGJs YW5rLCBkZWZfaGJsYW5rOworCXU2NCBwaXhlbF9yYXRlOworCWludCByZXQ7CisKKwljdHJsX2hk bHIgPSAmaW14MjgzLT5jdHJsX2hhbmRsZXI7CisJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5p dChjdHJsX2hkbHIsIDE2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBD cmVhdGUgdGhlIGNvbnRyb2xzIGhlcmUsIGJ1dCBtb2RlIHNwZWNpZmljIGxpbWl0cyBhcmUgc2V0 dXAKKwkgKiBpbiB0aGUgaW14MjgzX3NldF9mcmFtaW5nX2xpbWl0cygpIGNhbGwgYmVsb3cuCisJ ICovCisKKwkvKiBCeSBkZWZhdWx0LCBQSVhFTF9SQVRFIGlzIHJlYWQgb25seSAqLworCXBpeGVs X3JhdGUgPSBpbXgyODNfcGl4ZWxfcmF0ZShpbXgyODMsIG1vZGUpOworCXY0bDJfY3RybF9uZXdf c3RkKGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29wcywKKwkJCSAgVjRMMl9DSURfUElYRUxfUkFU RSwgcGl4ZWxfcmF0ZSwKKwkJCSAgcGl4ZWxfcmF0ZSwgMSwgcGl4ZWxfcmF0ZSk7CisKKwlsaW5r X2ZyZXEgPSB2NGwyX2N0cmxfbmV3X2ludF9tZW51KGN0cmxfaGRsciwgJmlteDI4M19jdHJsX29w cywKKwkJCQkJICAgVjRMMl9DSURfTElOS19GUkVRLAorCQkJCQkgICBfX2ZscyhpbXgyODMtPmxp bmtfZnJlcV9iaXRtYXApLAorCQkJCQkgICBfX2ZmcyhpbXgyODMtPmxpbmtfZnJlcV9iaXRtYXAp LAorCQkJCQkgICBsaW5rX2ZyZXF1ZW5jaWVzKTsKKwlpZiAobGlua19mcmVxKQorCQlsaW5rX2Zy ZXEtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWTsKKworCS8qIEluaXRpYWxpc2Ug dmJsYW5rL2hibGFuay9leHBvc3VyZSBiYXNlZCBvbiB0aGUgY3VycmVudCBtb2RlLiAqLworCWlt eDI4My0+dmJsYW5rID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxf b3BzLAorCQkJCQkgICBWNEwyX0NJRF9WQkxBTkssCisJCQkJCSAgIG1vZGUtPm1pbl92bWF4IC0g bW9kZS0+aGVpZ2h0LAorCQkJCQkgICBJTVgyODNfVk1BWF9NQVgsIDEsCisJCQkJCSAgIG1vZGUt PmRlZmF1bHRfdm1heCAtIG1vZGUtPmhlaWdodCk7CisKKwltaW5faGJsYW5rID0gbW9kZS0+bWlu X2htYXggLSBtb2RlLT53aWR0aDsKKwltYXhfaGJsYW5rID0gaW14MjgzX2ljbGtfdG9fcGl4KHBp eGVsX3JhdGUsIElNWDI4M19ITUFYX01BWCkgLSBtb2RlLT53aWR0aDsKKwlkZWZfaGJsYW5rID0g bW9kZS0+ZGVmYXVsdF9obWF4IC0gbW9kZS0+d2lkdGg7CisJaW14MjgzLT5oYmxhbmsgPSB2NGwy X2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsCisJCQkJCSAgIFY0TDJf Q0lEX0hCTEFOSywgbWluX2hibGFuaywgbWF4X2hibGFuaywKKwkJCQkJICAgMSwgZGVmX2hibGFu ayk7CisKKwlpbXgyODMtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoY3RybF9oZGxyLCAm aW14MjgzX2N0cmxfb3BzLAorCQkJCQkgICAgIFY0TDJfQ0lEX0VYUE9TVVJFLAorCQkJCQkgICAg IElNWDI4M19FWFBPU1VSRV9NSU4sCisJCQkJCSAgICAgSU1YMjgzX0VYUE9TVVJFX01BWCwKKwkJ CQkJICAgICBJTVgyODNfRVhQT1NVUkVfU1RFUCwKKwkJCQkJICAgICBJTVgyODNfRVhQT1NVUkVf REVGQVVMVCk7CisKKwl2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNfY3RybF9v cHMsIFY0TDJfQ0lEX0FOQUxPR1VFX0dBSU4sCisJCQkgIElNWDI4M19BTkFfR0FJTl9NSU4sIElN WDI4M19BTkFfR0FJTl9NQVgsCisJCQkgIElNWDI4M19BTkFfR0FJTl9TVEVQLCBJTVgyODNfQU5B X0dBSU5fREVGQVVMVCk7CisKKwl2NGwyX2N0cmxfbmV3X3N0ZChjdHJsX2hkbHIsICZpbXgyODNf Y3RybF9vcHMsIFY0TDJfQ0lEX0RJR0lUQUxfR0FJTiwKKwkJCSAgSU1YMjgzX0RHVExfR0FJTl9N SU4sIElNWDI4M19ER1RMX0dBSU5fTUFYLAorCQkJICBJTVgyODNfREdUTF9HQUlOX1NURVAsIElN WDI4M19ER1RMX0dBSU5fREVGQVVMVCk7CisKKwlpbXgyODMtPnZmbGlwID0gdjRsMl9jdHJsX25l d19zdGQoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLCBWNEwyX0NJRF9WRkxJUCwKKwkJCQkJ ICAwLCAxLCAxLCAwKTsKKwlpZiAoaW14MjgzLT52ZmxpcCkKKwkJaW14MjgzLT52ZmxpcC0+Zmxh Z3MgfD0gVjRMMl9DVFJMX0ZMQUdfTU9ESUZZX0xBWU9VVDsKKworCXY0bDJfY3RybF9uZXdfc3Rk X21lbnVfaXRlbXMoY3RybF9oZGxyLCAmaW14MjgzX2N0cmxfb3BzLAorCQkJCSAgICAgVjRMMl9D SURfVEVTVF9QQVRURVJOLAorCQkJCSAgICAgQVJSQVlfU0laRShpbXgyODNfdHBnX21lbnUpIC0g MSwKKwkJCQkgICAgIDAsIDAsIGlteDI4M190cGdfbWVudSk7CisKKwlpZiAoY3RybF9oZGxyLT5l cnJvcikgeworCQlyZXQgPSBjdHJsX2hkbHItPmVycm9yOworCQlkZXZfZXJyKGlteDI4My0+ZGV2 LCAiY29udHJvbCBpbml0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCQlnb3RvIGVycm9yOworCX0K KworCXJldCA9IHY0bDJfZndub2RlX2RldmljZV9wYXJzZShpbXgyODMtPmRldiwgJnByb3BzKTsK KwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gdjRsMl9jdHJsX25ld19md25vZGVf cHJvcGVydGllcyhjdHJsX2hkbHIsICZpbXgyODNfY3RybF9vcHMsCisJCQkJCSAgICAgICZwcm9w cyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJvcjsKKworCWlteDI4My0+c2QuY3RybF9oYW5kbGVy ID0gY3RybF9oZGxyOworCisJbXV0ZXhfbG9jayhpbXgyODMtPmN0cmxfaGFuZGxlci5sb2NrKTsK KworCS8qIFNldHVwIGV4cG9zdXJlIGFuZCBmcmFtZS9saW5lIGxlbmd0aCBsaW1pdHMuICovCisJ aW14MjgzX3NldF9mcmFtaW5nX2xpbWl0cyhpbXgyODMsIG1vZGUpOworCisJbXV0ZXhfdW5sb2Nr KGlteDI4My0+Y3RybF9oYW5kbGVyLmxvY2spOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgorCXY0 bDJfY3RybF9oYW5kbGVyX2ZyZWUoY3RybF9oZGxyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgaW14MjgzX3BhcnNlX2VuZHBvaW50KHN0cnVjdCBpbXgyODMgKmlteDI4MykKK3sK KwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlOworCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRw b2ludCBidXNfY2ZnID0geworCQkuYnVzX3R5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZCisJfTsK KwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZXA7CisJaW50IHJldDsKKworCWZ3bm9kZSA9IGRldl9m d25vZGUoaW14MjgzLT5kZXYpOworCWVwID0gZndub2RlX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50 KGZ3bm9kZSwgTlVMTCk7CisJaWYgKCFlcCkgeworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiRmFp bGVkIHRvIGdldCBuZXh0IGVuZHBvaW50XG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwly ZXQgPSB2NGwyX2Z3bm9kZV9lbmRwb2ludF9hbGxvY19wYXJzZShlcCwgJmJ1c19jZmcpOworCWZ3 bm9kZV9oYW5kbGVfcHV0KGVwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGJ1 c19jZmcuYnVzLm1pcGlfY3NpMi5udW1fZGF0YV9sYW5lcyAhPSA0KSB7CisJCWRldl9lcnIoaW14 MjgzLT5kZXYsCisJCQkibnVtYmVyIG9mIENTSTIgZGF0YSBsYW5lcyAlZCBpcyBub3Qgc3VwcG9y dGVkXG4iLAorCQkJYnVzX2NmZy5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzKTsKKwkJcmV0 ID0gLUVJTlZBTDsKKwkJZ290byBkb25lX2VuZHBvaW50X2ZyZWU7CisJfQorCisJcmV0ID0gdjRs Ml9saW5rX2ZyZXFfdG9fYml0bWFwKGlteDI4My0+ZGV2LCBidXNfY2ZnLmxpbmtfZnJlcXVlbmNp ZXMsCisJCQkJICAgICAgIGJ1c19jZmcubnJfb2ZfbGlua19mcmVxdWVuY2llcywKKwkJCQkgICAg ICAgbGlua19mcmVxdWVuY2llcywgQVJSQVlfU0laRShsaW5rX2ZyZXF1ZW5jaWVzKSwKKwkJCQkg ICAgICAgJmlteDI4My0+bGlua19mcmVxX2JpdG1hcCk7CisKK2RvbmVfZW5kcG9pbnRfZnJlZToK Kwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZidXNfY2ZnKTsKKworCXJldHVybiByZXQ7Cit9 OworCitzdGF0aWMgaW50IGlteDI4M19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQor eworCXN0cnVjdCBpbXgyODMgKmlteDI4MzsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBp bnQgeGNsa19mcmVxOworCWludCByZXQ7CisKKwlpbXgyODMgPSBkZXZtX2t6YWxsb2MoJmNsaWVu dC0+ZGV2LCBzaXplb2YoKmlteDI4MyksIEdGUF9LRVJORUwpOworCWlmICghaW14MjgzKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWlteDI4My0+ZGV2ID0gJmNsaWVudC0+ZGV2OworCisJdjRsMl9p MmNfc3ViZGV2X2luaXQoJmlteDI4My0+c2QsIGNsaWVudCwgJmlteDI4M19zdWJkZXZfb3BzKTsK KworCWlteDI4My0+Y2NpID0gZGV2bV9jY2lfcmVnbWFwX2luaXRfaTJjKGNsaWVudCwgMTYpOwor CWlmIChJU19FUlIoaW14MjgzLT5jY2kpKSB7CisJCXJldCA9IFBUUl9FUlIoaW14MjgzLT5jY2kp OworCQlkZXZfZXJyKGlteDI4My0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgQ0NJOiAlZFxu IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBHZXQgc3lzdGVtIGNsb2NrICh4Y2xr KSAqLworCWlteDI4My0+eGNsayA9IGRldm1fY2xrX2dldChpbXgyODMtPmRldiwgTlVMTCk7CisJ aWYgKElTX0VSUihpbXgyODMtPnhjbGspKSB7CisJCXJldHVybiBkZXZfZXJyX3Byb2JlKGlteDI4 My0+ZGV2LCBQVFJfRVJSKGlteDI4My0+eGNsayksCisJCQkJICAgICAiZmFpbGVkIHRvIGdldCB4 Y2xrXG4iKTsKKwl9CisKKwl4Y2xrX2ZyZXEgPSBjbGtfZ2V0X3JhdGUoaW14MjgzLT54Y2xrKTsK Kwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbXgyODNfZnJlcXVlbmNpZXMpOyBpKyspIHsK KwkJaWYgKHhjbGtfZnJlcSA9PSBpbXgyODNfZnJlcXVlbmNpZXNbaV0ubWh6KSB7CisJCQlpbXgy ODMtPmZyZXEgPSAmaW14MjgzX2ZyZXF1ZW5jaWVzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisJ aWYgKCFpbXgyODMtPmZyZXEpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgInhjbGsgZnJlcXVl bmN5IHVuc3VwcG9ydGVkOiAlZCBIelxuIiwgeGNsa19mcmVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJcmV0ID0gaW14MjgzX2dldF9yZWd1bGF0b3JzKGlteDI4Myk7CisJaWYgKHJldCkg eworCQlyZXR1cm4gZGV2X2Vycl9wcm9iZShpbXgyODMtPmRldiwgcmV0LAorCQkJCSJmYWlsZWQg dG8gZ2V0IHJlZ3VsYXRvcnNcbiIpOworCX0KKworCXJldCA9IGlteDI4M19wYXJzZV9lbmRwb2lu dChpbXgyODMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0 byBwYXJzZSBlbmRwb2ludCBjb25maWd1cmF0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisK KwkvKiBSZXF1ZXN0IG9wdGlvbmFsIGVuYWJsZSBwaW4gKi8KKwlpbXgyODMtPnJlc2V0X2dwaW8g PSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChpbXgyODMtPmRldiwgInJlc2V0IiwKKwkJCQkJCSAg ICAgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihpbXgyODMtPnJlc2V0X2dwaW8pKQorCQly ZXR1cm4gZGV2X2Vycl9wcm9iZShpbXgyODMtPmRldiwgUFRSX0VSUihpbXgyODMtPnJlc2V0X2dw aW8pLAorCQkJCSAgICAgImZhaWxlZCB0byBnZXQgcmVzZXQgR1BJT1xuIik7CisKKwkvKgorCSAq IFRoZSBzZW5zb3IgbXVzdCBiZSBwb3dlcmVkIGZvciBpbXgyODNfaWRlbnRpZnlfbW9kdWxlKCkK KwkgKiB0byBiZSBhYmxlIHRvIHJlYWQgdGhlIENISVBfSUQgcmVnaXN0ZXIKKwkgKi8KKwlyZXQg PSBpbXgyODNfcG93ZXJfb24oaW14MjgzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJ cmV0ID0gaW14MjgzX2lkZW50aWZ5X21vZHVsZShpbXgyODMpOworCWlmIChyZXQpCisJCWdvdG8g ZXJyb3JfcG93ZXJfb2ZmOworCisJLyoKKwkgKiBFbmFibGUgcnVudGltZSBQTSB3aXRoIGF1dG9z dXNwZW5kLiBBcyB0aGUgZGV2aWNlIGhhcyBiZWVuIHBvd2VyZWQKKwkgKiBtYW51YWxseSwgbWFy ayBpdCBhcyBhY3RpdmUsIGFuZCBpbmNyZWFzZSB0aGUgdXNhZ2UgY291bnQgd2l0aG91dAorCSAq IHJlc3VtaW5nIHRoZSBkZXZpY2UuCisJICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGlteDI4 My0+ZGV2KTsKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShpbXgyODMtPmRldik7CisJcG1fcnVu dGltZV9lbmFibGUoaW14MjgzLT5kZXYpOworCXBtX3J1bnRpbWVfc2V0X2F1dG9zdXNwZW5kX2Rl bGF5KGlteDI4My0+ZGV2LCAxMDAwKTsKKwlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZChpbXgy ODMtPmRldik7CisKKwkvKiBUaGlzIG5lZWRzIHRoZSBwbSBydW50aW1lIHRvIGJlIHJlZ2lzdGVy ZWQuICovCisJcmV0ID0gaW14MjgzX2luaXRfY29udHJvbHMoaW14MjgzKTsKKwlpZiAocmV0KQor CQlnb3RvIGVycm9yX3BtOworCisJLyogSW5pdGlhbGl6ZSBzdWJkZXYgKi8KKwlpbXgyODMtPnNk LmZsYWdzIHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFIHwKKwkJCSAgICBWNEwyX1NVQkRF Vl9GTF9IQVNfRVZFTlRTOworCWlteDI4My0+c2QuZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5U X0ZfQ0FNX1NFTlNPUjsKKwlpbXgyODMtPnNkLmludGVybmFsX29wcyA9ICZpbXgyODNfaW50ZXJu YWxfb3BzOworCisJLyogSW5pdGlhbGl6ZSBzb3VyY2UgcGFkcyAqLworCWlteDI4My0+cGFkLmZs YWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsKKworCXJldCA9IG1lZGlhX2VudGl0eV9wYWRzX2lu aXQoJmlteDI4My0+c2QuZW50aXR5LCAxLCAmaW14MjgzLT5wYWQpOworCWlmIChyZXQpIHsKKwkJ ZGV2X2VycihpbXgyODMtPmRldiwgImZhaWxlZCB0byBpbml0IGVudGl0eSBwYWRzOiAlZFxuIiwg cmV0KTsKKwkJZ290byBlcnJvcl9oYW5kbGVyX2ZyZWU7CisJfQorCisJaW14MjgzLT5zZC5zdGF0 ZV9sb2NrID0gaW14MjgzLT5jdHJsX2hhbmRsZXIubG9jazsKKwlyZXQgPSB2NGwyX3N1YmRldl9p bml0X2ZpbmFsaXplKCZpbXgyODMtPnNkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGlt eDI4My0+ZGV2LCAic3ViZGV2IGluaXQgZXJyb3I6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycm9y X21lZGlhX2VudGl0eTsKKwl9CisKKwlyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldl9z ZW5zb3IoJmlteDI4My0+c2QpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoaW14MjgzLT5k ZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc2Vuc29yIHN1Yi1kZXZpY2U6ICVkXG4iLCByZXQpOwor CQlnb3RvIGVycm9yX3N1YmRldl9jbGVhbnVwOworCX0KKworCS8qCisJICogRGVjcmVhc2UgdGhl IFBNIHVzYWdlIGNvdW50LiBUaGUgZGV2aWNlIHdpbGwgZ2V0IHN1c3BlbmRlZCBhZnRlciB0aGUK KwkgKiBhdXRvc3VzcGVuZCBkZWxheSwgdHVybmluZyB0aGUgcG93ZXIgb2ZmLgorCSAqLworCXBt X3J1bnRpbWVfbWFya19sYXN0X2J1c3koaW14MjgzLT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X2F1 dG9zdXNwZW5kKGlteDI4My0+ZGV2KTsKKworCXJldHVybiAwOworCitlcnJvcl9zdWJkZXZfY2xl YW51cDoKKwl2NGwyX3N1YmRldl9jbGVhbnVwKCZpbXgyODMtPnNkKTsKKworZXJyb3JfbWVkaWFf ZW50aXR5OgorCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZpbXgyODMtPnNkLmVudGl0eSk7CisKK2Vy cm9yX2hhbmRsZXJfZnJlZToKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGlteDI4My0+c2QuY3Ry bF9oYW5kbGVyKTsKKworZXJyb3JfcG06CisJcG1fcnVudGltZV9kaXNhYmxlKGlteDI4My0+ZGV2 KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoaW14MjgzLT5kZXYpOworZXJyb3JfcG93ZXJf b2ZmOgorCWlteDI4M19wb3dlcl9vZmYoaW14MjgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyB2b2lkIGlteDI4M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlz dHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3Ry dWN0IGlteDI4MyAqaW14MjgzID0gdG9faW14MjgzKHNkKTsKKworCXY0bDJfYXN5bmNfdW5yZWdp c3Rlcl9zdWJkZXYoc2QpOworCXY0bDJfc3ViZGV2X2NsZWFudXAoJmlteDI4My0+c2QpOworCW1l ZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVl KGlteDI4My0+c2QuY3RybF9oYW5kbGVyKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZShpbXgyODMt PmRldik7CisJaWYgKCFwbV9ydW50aW1lX3N0YXR1c19zdXNwZW5kZWQoaW14MjgzLT5kZXYpKQor CQlpbXgyODNfcG93ZXJfb2ZmKGlteDI4Myk7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGlt eDI4My0+ZGV2KTsKK30KKworc3RhdGljIERFRklORV9SVU5USU1FX0RFVl9QTV9PUFMoaW14Mjgz X3BtX29wcywgaW14MjgzX3J1bnRpbWVfc3VzcGVuZCwKKwkJCQkgaW14MjgzX3J1bnRpbWVfcmVz dW1lLCBOVUxMKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14MjgzX2R0 X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic29ueSxpbXgyODMiIH0sCisJeyAvKiBzZW50 aW5lbCAqLyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14MjgzX2R0X2lkcyk7CisK K3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpbXgyODNfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVy ID0geworCQkubmFtZSA9ICJpbXgyODMiLAorCQkucG0gPSBwbV9wdHIoJmlteDI4M19wbV9vcHMp LAorCQkub2ZfbWF0Y2hfdGFibGUJPSBpbXgyODNfZHRfaWRzLAorCX0sCisJLnByb2JlID0gaW14 MjgzX3Byb2JlLAorCS5yZW1vdmUgPSBpbXgyODNfcmVtb3ZlLAorfTsKK21vZHVsZV9pMmNfZHJp dmVyKGlteDI4M19pMmNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiV2lsbCBXaGFuZyA8d2ls bEB3aWxsd2hhbmcuY29tPiIpOworTU9EVUxFX0FVVEhPUigiS2llcmFuIEJpbmdoYW0gPGtpZXJh bi5iaW5naGFtQGlkZWFzb25ib2FyZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJVbWFuZyBKYWlu IDx1bWFuZy5qYWluQGlkZWFzb25ib2FyZC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNv bnkgSU1YMjgzIFNlbnNvciBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKCi0tIAoy LjQzLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps aW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJh ZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51 eC1hcm0ta2VybmVsCg==