From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B8CF1C352A3 for ; Tue, 11 Feb 2020 16:21:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A991720708 for ; Tue, 11 Feb 2020 16:21:55 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=displaylink.com header.i=@displaylink.com header.b="u2D7m2mn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729133AbgBKQVy (ORCPT ); Tue, 11 Feb 2020 11:21:54 -0500 Received: from eu-smtp-delivery-167.mimecast.com ([207.82.80.167]:37783 "EHLO eu-smtp-delivery-167.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728448AbgBKQVy (ORCPT ); Tue, 11 Feb 2020 11:21:54 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=displaylink.com; s=mimecast20151025; t=1581438090; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=oTdnF9Rt3y6fUh4dxtX+2Zq5TfuZAUuX2/o/c1KDykE=; b=u2D7m2mnftKkvV6Zebgh/DxnvsGfZK0ZSI0z9BcCVAypkBJJQu4GqJ/4BmGSMhUAcx0BRg z49Z2cLNYXdmxUl0N+BHsr6YYvfZAquBFVPChTw0Vg6Xqs/mrefxtg/bRwZDwgfdjghLmr LK1Bozn3ouxpafL2LSw4dgATPOSzME0= Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04lp2055.outbound.protection.outlook.com [104.47.12.55]) (Using TLS) by relay.mimecast.com with ESMTP id uk-mta-174-zrg8E_tAOHG5FZLYUa6fPw-1; Tue, 11 Feb 2020 16:21:26 +0000 Received: from VI1PR10MB1965.EURPRD10.PROD.OUTLOOK.COM (52.134.27.157) by VI1PR10MB2320.EURPRD10.PROD.OUTLOOK.COM (20.177.60.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.23; Tue, 11 Feb 2020 16:21:24 +0000 Received: from VI1PR10MB1965.EURPRD10.PROD.OUTLOOK.COM ([fe80::7cc2:599e:25ce:49b2]) by VI1PR10MB1965.EURPRD10.PROD.OUTLOOK.COM ([fe80::7cc2:599e:25ce:49b2%6]) with mapi id 15.20.2707.030; Tue, 11 Feb 2020 16:21:24 +0000 Received: from [172.17.183.132] (80.93.235.40) by VI1P18901CA0019.EURP189.PROD.OUTLOOK.COM (2603:10a6:801::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.23 via Frontend Transport; Tue, 11 Feb 2020 16:21:23 +0000 From: Vladimir Stankovic To: "gregkh@linuxfoundation.org" CC: "linux-kernel@vger.kernel.org" , "linux-usb@vger.kernel.org" , Petar Kovacevic , Stefan Lugonjic , Nikola Simic , Marko Miljkovic Subject: [PATCH 1/1] usb: Add MA USB Host driver Thread-Topic: [PATCH 1/1] usb: Add MA USB Host driver Thread-Index: AQHV4OzJT2OJQ4szCkS0GbDThotPEqgWLLMA Date: Tue, 11 Feb 2020 16:21:24 +0000 Message-ID: <61e63056-31f9-9d4b-60c1-8cbf0372d34f@displaylink.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-clientproxiedby: VI1P18901CA0019.EURP189.PROD.OUTLOOK.COM (2603:10a6:801::29) To VI1PR10MB1965.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:803:37::29) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [80.93.235.40] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 75c10544-d401-4fd6-6660-08d7af0e6fdf x-ms-traffictypediagnostic: VI1PR10MB2320: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:356; x-forefront-prvs: 0310C78181 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(376002)(136003)(346002)(396003)(39840400004)(366004)(189003)(199004)(2906002)(956004)(54906003)(2616005)(66446008)(64756008)(16576012)(66556008)(66476007)(316002)(107886003)(31696002)(6486002)(81166006)(81156014)(31686004)(66946007)(86362001)(66616009)(44832011)(8676002)(6916009)(36756003)(71200400001)(5660300002)(8936002)(478600001)(4326008)(52116002)(16526019)(26005)(186003);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR10MB2320;H:VI1PR10MB1965.EURPRD10.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 4eQtwFYgH50IOH3x1kAJ4aF5WxvB/tRBzpsaaeK8cW1eYu8iVK0svsZfUkk0m6mYEz8AfaTm2szDU2ey9qZPrtA/ITEjgYVp3HCF4LJ9EV56Ap7LjWPl9RCCm961c7iS7yiKunjYIJpPnoMjDvvcnsOmVriwFksozigM80l03k/A5IHMn6q5YCiN7U47EDJE8v+O0QXlEGzahC0usGuGdYnClc4uiuRZgzay6PNMPCYSgJcORqyvlm5XcFvwiMNq9cB+WRZ6/Z5THo7rEm7d4dzY7U3TbPmj+WPQ3qS0SOXWs9AYGrzHBS3RqRAZmfpkdRosIWQNuyt52m83JsqPV13hnA86wkSjkE3VFf6AvexNWCr9w1axoCcEG5eoD1Osel4Co+bN4Fteb+lY8Grd0xrQzu4++a/dQQ5uVczBNoYXZVswr1W0UwZQR82Tzd2w x-ms-exchange-antispam-messagedata: 85XuWeN/WU5XVHM2xUH36oeYD5RyVJsG3wZdJlEQW6vyXZh8gqttUfoIhYJp8fmRvWAAznqoL6t3z3w2jpWUYHWPsecHbsxgef5gBqnfQi4Oa9vBm7/IyTPAKSDtUosYzm+4QYgxDo7FO4vOwKOvBg== MIME-Version: 1.0 X-OriginatorOrg: displaylink.com X-MS-Exchange-CrossTenant-Network-Message-Id: 75c10544-d401-4fd6-6660-08d7af0e6fdf X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Feb 2020 16:21:24.0847 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a4bda75a-b444-4312-9c90-44a7c4b2c91a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lBMH2l0TKtGbNRHoyK8jENPWRTyz0hes+HVkrIZPuFwKzuY72qBULu6gY3n0qgu7yIN2sRGxSgOQbAdiG7gJiZcQq29zFc2dUOb5gc+scCxaswniHfBetloDzuSf03EF X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR10MB2320 X-MC-Unique: zrg8E_tAOHG5FZLYUa6fPw-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: displaylink.com Content-Type: multipart/mixed; boundary="_002_61e6305631f99d4b60c18cbf0372d34fdisplaylinkcom_" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --_002_61e6305631f99d4b60c18cbf0372d34fdisplaylinkcom_ Content-Type: text/plain; charset=WINDOWS-1252 Content-ID: Content-Transfer-Encoding: quoted-printable MA-USB Host driver provides USB connectivity over an available network, allowing host device to access remote USB devices attached to one or more MA USB devices (accessible via network). This driver has been developed to enable the host to communicate with DisplayLink products supporting MA USB protocol (MA USB device, in terms of MA USB Specification). MA-USB protocol used by MA-USB Host driver has been implemented in accordance with MA USB Specification Release 1.0b. This driver depends on the functions provided by DisplayLink's user-space driver. Signed-off-by: Vladimir Stankovic --- drivers/usb/Kconfig | 2 + drivers/usb/Makefile | 2 + drivers/usb/mausb_host/Kconfig | 15 + drivers/usb/mausb_host/Makefile | 30 + .../usb/mausb_host/include/common/ma_usb.h | 873 +++++++++ .../mausb_host/include/common/mausb_address.h | 38 + .../include/common/mausb_driver_status.h | 21 + .../mausb_host/include/common/mausb_event.h | 228 +++ drivers/usb/mausb_host/include/hcd/hub.h | 115 ++ drivers/usb/mausb_host/include/hcd/vhcd.h | 79 + .../usb/mausb_host/include/hpal/data_common.h | 66 + drivers/usb/mausb_host/include/hpal/data_in.h | 18 + .../usb/mausb_host/include/hpal/data_out.h | 22 + drivers/usb/mausb_host/include/hpal/hpal.h | 184 ++ .../usb/mausb_host/include/hpal/isoch_in.h | 22 + .../usb/mausb_host/include/hpal/isoch_out.h | 20 + .../mausb_host/include/hpal/mausb_events.h | 99 + .../include/hpal/network_callbacks.h | 20 + .../mausb_host/include/link/mausb_ip_link.h | 87 + .../include/utils/mausb_data_iterator.h | 52 + .../usb/mausb_host/include/utils/mausb_logs.h | 35 + .../usb/mausb_host/include/utils/mausb_mmap.h | 21 + .../include/utils/mausb_ring_buffer.h | 67 + .../mausb_host/include/utils/mausb_version.h | 17 + drivers/usb/mausb_host/src/hcd/hub.c | 1684 +++++++++++++++++ drivers/usb/mausb_host/src/hcd/module_init.c | 219 +++ drivers/usb/mausb_host/src/hcd/vhcd.c | 291 +++ drivers/usb/mausb_host/src/hpal/data_common.c | 141 ++ drivers/usb/mausb_host/src/hpal/data_in.c | 73 + drivers/usb/mausb_host/src/hpal/data_out.c | 202 ++ drivers/usb/mausb_host/src/hpal/hpal.c | 1306 +++++++++++++ drivers/usb/mausb_host/src/hpal/isoch_in.c | 241 +++ drivers/usb/mausb_host/src/hpal/isoch_out.c | 361 ++++ .../usb/mausb_host/src/hpal/mausb_events.c | 659 +++++++ .../mausb_host/src/hpal/network_callbacks.c | 160 ++ .../usb/mausb_host/src/link/mausb_ip_link.c | 354 ++++ .../src/utils/mausb_data_iterator.c | 295 +++ drivers/usb/mausb_host/src/utils/mausb_mmap.c | 381 ++++ .../mausb_host/src/utils/mausb_ring_buffer.c | 168 ++ 39 files changed, 8668 insertions(+) create mode 100644 drivers/usb/mausb_host/Kconfig create mode 100644 drivers/usb/mausb_host/Makefile create mode 100644 drivers/usb/mausb_host/include/common/ma_usb.h create mode 100644 drivers/usb/mausb_host/include/common/mausb_address.h create mode 100644=20 drivers/usb/mausb_host/include/common/mausb_driver_status.h create mode 100644 drivers/usb/mausb_host/include/common/mausb_event.h create mode 100644 drivers/usb/mausb_host/include/hcd/hub.h create mode 100644 drivers/usb/mausb_host/include/hcd/vhcd.h create mode 100644 drivers/usb/mausb_host/include/hpal/data_common.h create mode 100644 drivers/usb/mausb_host/include/hpal/data_in.h create mode 100644 drivers/usb/mausb_host/include/hpal/data_out.h create mode 100644 drivers/usb/mausb_host/include/hpal/hpal.h create mode 100644 drivers/usb/mausb_host/include/hpal/isoch_in.h create mode 100644 drivers/usb/mausb_host/include/hpal/isoch_out.h create mode 100644 drivers/usb/mausb_host/include/hpal/mausb_events.h create mode 100644 drivers/usb/mausb_host/include/hpal/network_callbacks.= h create mode 100644 drivers/usb/mausb_host/include/link/mausb_ip_link.h create mode 100644=20 drivers/usb/mausb_host/include/utils/mausb_data_iterator.h create mode 100644 drivers/usb/mausb_host/include/utils/mausb_logs.h create mode 100644 drivers/usb/mausb_host/include/utils/mausb_mmap.h create mode 100644=20 drivers/usb/mausb_host/include/utils/mausb_ring_buffer.h create mode 100644 drivers/usb/mausb_host/include/utils/mausb_version.h create mode 100644 drivers/usb/mausb_host/src/hcd/hub.c create mode 100644 drivers/usb/mausb_host/src/hcd/module_init.c create mode 100644 drivers/usb/mausb_host/src/hcd/vhcd.c create mode 100644 drivers/usb/mausb_host/src/hpal/data_common.c create mode 100644 drivers/usb/mausb_host/src/hpal/data_in.c create mode 100644 drivers/usb/mausb_host/src/hpal/data_out.c create mode 100644 drivers/usb/mausb_host/src/hpal/hpal.c create mode 100644 drivers/usb/mausb_host/src/hpal/isoch_in.c create mode 100644 drivers/usb/mausb_host/src/hpal/isoch_out.c create mode 100644 drivers/usb/mausb_host/src/hpal/mausb_events.c create mode 100644 drivers/usb/mausb_host/src/hpal/network_callbacks.c create mode 100644 drivers/usb/mausb_host/src/link/mausb_ip_link.c create mode 100644 drivers/usb/mausb_host/src/utils/mausb_data_iterator.c create mode 100644 drivers/usb/mausb_host/src/utils/mausb_mmap.c create mode 100644 drivers/usb/mausb_host/src/utils/mausb_ring_buffer.c --_002_61e6305631f99d4b60c18cbf0372d34fdisplaylinkcom_ Content-Type: text/x-patch; name="0001-usb-Add-MA-USB-Host-driver.patch" Content-Description: 0001-usb-Add-MA-USB-Host-driver.patch Content-Disposition: attachment; filename="0001-usb-Add-MA-USB-Host-driver.patch"; size=273949; creation-date="Tue, 11 Feb 2020 16:21:23 GMT"; modification-date="Tue, 11 Feb 2020 16:21:23 GMT" Content-ID: <2B456C447588DA4397A6B42233DA681D@EURPRD10.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 RnJvbSAwMzI0YjNhNDlkMGVmNDE0ODBhMGE0MmFiMjdmNzBlZGViMDA3OTgwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogVmxhZGltaXIgU3RhbmtvdmljIDx2bGFkaW1pci5zdGFua292 aWNAZGlzcGxheWxpbmsuY29tPg0KRGF0ZTogVHVlLCAxMSBGZWIgMjAyMCAxNjowMzo0MyArMDEw MA0KU3ViamVjdDogW1BBVENIXSB1c2I6IEFkZCBNQSBVU0IgSG9zdCBkcml2ZXINCg0KTUEtVVNC IEhvc3QgZHJpdmVyIHByb3ZpZGVzIFVTQiBjb25uZWN0aXZpdHkgb3ZlciBhbiBhdmFpbGFibGUN Cm5ldHdvcmssIGFsbG93aW5nIGhvc3QgZGV2aWNlIHRvIGFjY2VzcyByZW1vdGUgVVNCIGRldmlj ZXMgYXR0YWNoZWQNCnRvIG9uZSBvciBtb3JlIE1BIFVTQiBkZXZpY2VzIChhY2Nlc3NpYmxlIHZp YSBuZXR3b3JrKS4NCg0KVGhpcyBkcml2ZXIgaGFzIGJlZW4gZGV2ZWxvcGVkIHRvIGVuYWJsZSB0 aGUgaG9zdCB0byBjb21tdW5pY2F0ZQ0Kd2l0aCBEaXNwbGF5TGluayBwcm9kdWN0cyBzdXBwb3J0 aW5nIE1BIFVTQiBwcm90b2NvbCAoTUEgVVNCIGRldmljZSwNCmluIHRlcm1zIG9mIE1BIFVTQiBT cGVjaWZpY2F0aW9uKS4NCg0KTUEtVVNCIHByb3RvY29sIHVzZWQgYnkgTUEtVVNCIEhvc3QgZHJp dmVyIGhhcyBiZWVuIGltcGxlbWVudGVkIGluDQphY2NvcmRhbmNlIHdpdGggTUEgVVNCIFNwZWNp ZmljYXRpb24gUmVsZWFzZSAxLjBiLg0KDQpUaGlzIGRyaXZlciBkZXBlbmRzIG9uIHRoZSBmdW5j dGlvbnMgcHJvdmlkZWQgYnkgRGlzcGxheUxpbmsncw0KdXNlci1zcGFjZSBkcml2ZXIuDQoNClNp Z25lZC1vZmYtYnk6IFZsYWRpbWlyIFN0YW5rb3ZpYyA8dmxhZGltaXIuc3RhbmtvdmljQGRpc3Bs YXlsaW5rLmNvbT4NCi0tLQ0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDYgKw0KIGRyaXZlcnMvdXNiL0tjb25maWcgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDIgKw0KIGRyaXZlcnMvdXNiL01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgIDIgKw0KIGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvS2NvbmZpZyAgICAgICAg ICAgICAgICB8ICAgMTUgKw0KIGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvTWFrZWZpbGUgICAgICAg ICAgICAgICB8ICAgMzAgKw0KIC4uLi91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2NvbW1vbi9tYV91 c2IuaCAgICB8ICA4NzMgKysrKysrKysrDQogLi4uL21hdXNiX2hvc3QvaW5jbHVkZS9jb21tb24v bWF1c2JfYWRkcmVzcy5oIHwgICAzOCArDQogLi4uL2luY2x1ZGUvY29tbW9uL21hdXNiX2RyaXZl cl9zdGF0dXMuaCAgICAgIHwgICAyMSArDQogLi4uL21hdXNiX2hvc3QvaW5jbHVkZS9jb21tb24v bWF1c2JfZXZlbnQuaCAgIHwgIDIyOCArKysNCiBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1 ZGUvaGNkL2h1Yi5oICAgICAgfCAgMTE1ICsrDQogZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL2hjZC92aGNkLmggICAgIHwgICA3OSArDQogLi4uL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUv aHBhbC9kYXRhX2NvbW1vbi5oIHwgICA2NiArDQogZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL2hwYWwvZGF0YV9pbi5oIHwgICAxOCArDQogLi4uL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUv aHBhbC9kYXRhX291dC5oICAgIHwgICAyMiArDQogZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL2hwYWwvaHBhbC5oICAgIHwgIDE4NCArKw0KIC4uLi91c2IvbWF1c2JfaG9zdC9pbmNsdWRl L2hwYWwvaXNvY2hfaW4uaCAgICB8ICAgMjIgKw0KIC4uLi91c2IvbWF1c2JfaG9zdC9pbmNsdWRl L2hwYWwvaXNvY2hfb3V0LmggICB8ICAgMjAgKw0KIC4uLi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBh bC9tYXVzYl9ldmVudHMuaCAgICB8ICAgOTkgKw0KIC4uLi9pbmNsdWRlL2hwYWwvbmV0d29ya19j YWxsYmFja3MuaCAgICAgICAgICB8ICAgMjAgKw0KIC4uLi9tYXVzYl9ob3N0L2luY2x1ZGUvbGlu ay9tYXVzYl9pcF9saW5rLmggICB8ICAgODcgKw0KIC4uLi9pbmNsdWRlL3V0aWxzL21hdXNiX2Rh dGFfaXRlcmF0b3IuaCAgICAgICB8ICAgNTIgKw0KIC4uLi91c2IvbWF1c2JfaG9zdC9pbmNsdWRl L3V0aWxzL21hdXNiX2xvZ3MuaCB8ICAgMzUgKw0KIC4uLi91c2IvbWF1c2JfaG9zdC9pbmNsdWRl L3V0aWxzL21hdXNiX21tYXAuaCB8ICAgMjEgKw0KIC4uLi9pbmNsdWRlL3V0aWxzL21hdXNiX3Jp bmdfYnVmZmVyLmggICAgICAgICB8ICAgNjcgKw0KIC4uLi9tYXVzYl9ob3N0L2luY2x1ZGUvdXRp bHMvbWF1c2JfdmVyc2lvbi5oICB8ICAgMTcgKw0KIGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3Jj L2hjZC9odWIuYyAgICAgICAgICB8IDE2ODIgKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL3Vz Yi9tYXVzYl9ob3N0L3NyYy9oY2QvbW9kdWxlX2luaXQuYyAgfCAgMjE5ICsrKw0KIGRyaXZlcnMv dXNiL21hdXNiX2hvc3Qvc3JjL2hjZC92aGNkLmMgICAgICAgICB8ICAyOTEgKysrDQogZHJpdmVy cy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9kYXRhX2NvbW1vbi5jIHwgIDE0MSArKw0KIGRyaXZl cnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvZGF0YV9pbi5jICAgICB8ICAgNzMgKw0KIGRyaXZl cnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvZGF0YV9vdXQuYyAgICB8ICAyMDIgKysNCiBkcml2 ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2hwYWwuYyAgICAgICAgfCAxMzA2ICsrKysrKysr KysrKysNCiBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2lzb2NoX2luLmMgICAgfCAg MjQxICsrKw0KIGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvaXNvY2hfb3V0LmMgICB8 ICAzNjAgKysrKw0KIC4uLi91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9tYXVzYl9ldmVudHMuYyAg ICB8ICA2NTkgKysrKysrKw0KIC4uLi9tYXVzYl9ob3N0L3NyYy9ocGFsL25ldHdvcmtfY2FsbGJh Y2tzLmMgICB8ICAxNjAgKysNCiAuLi4vdXNiL21hdXNiX2hvc3Qvc3JjL2xpbmsvbWF1c2JfaXBf bGluay5jICAgfCAgMzU0ICsrKysNCiAuLi4vc3JjL3V0aWxzL21hdXNiX2RhdGFfaXRlcmF0b3Iu YyAgICAgICAgICAgfCAgMjk1ICsrKw0KIGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL3V0aWxz L21hdXNiX21tYXAuYyB8ICAzODEgKysrKw0KIC4uLi9tYXVzYl9ob3N0L3NyYy91dGlscy9tYXVz Yl9yaW5nX2J1ZmZlci5jICB8ICAxNjggKysNCiA0MCBmaWxlcyBjaGFuZ2VkLCA4NjcxIGluc2Vy dGlvbnMoKykNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9LY29u ZmlnDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvTWFrZWZpbGUN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2NvbW1v bi9tYV91c2IuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2lu Y2x1ZGUvY29tbW9uL21hdXNiX2FkZHJlc3MuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvY29tbW9uL21hdXNiX2RyaXZlcl9zdGF0dXMuaA0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvY29tbW9uL21h dXNiX2V2ZW50LmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9p bmNsdWRlL2hjZC9odWIuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9o b3N0L2luY2x1ZGUvaGNkL3ZoY2QuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9t YXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9kYXRhX2NvbW1vbi5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9ocGFsL2RhdGFfaW4uaA0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9kYXRhX291dC5o DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9ocGFs L2hwYWwuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1 ZGUvaHBhbC9pc29jaF9pbi5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNi X2hvc3QvaW5jbHVkZS9ocGFsL2lzb2NoX291dC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9ocGFsL21hdXNiX2V2ZW50cy5oDQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9ocGFsL25ldHdvcmtfY2Fs bGJhY2tzLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL2xpbmsvbWF1c2JfaXBfbGluay5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNi L21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9yLmgNCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL3V0aWxzL21hdXNiX2xv Z3MuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUv dXRpbHMvbWF1c2JfbW1hcC5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNi X2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl9yaW5nX2J1ZmZlci5oDQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl92ZXJzaW9uLmgN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaGNkL2h1Yi5j DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hjZC9tb2R1 bGVfaW5pdC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3Jj L2hjZC92aGNkLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9z cmMvaHBhbC9kYXRhX2NvbW1vbi5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21h dXNiX2hvc3Qvc3JjL2hwYWwvZGF0YV9pbi5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv dXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvZGF0YV9vdXQuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2hwYWwuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2lzb2NoX2luLmMNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9pc29jaF9vdXQuYw0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL21hdXNiX2V2 ZW50cy5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hw YWwvbmV0d29ya19jYWxsYmFja3MuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9t YXVzYl9ob3N0L3NyYy9saW5rL21hdXNiX2lwX2xpbmsuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy91dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9yLmMNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvdXRpbHMvbWF1c2Jf bW1hcC5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL3V0 aWxzL21hdXNiX3JpbmdfYnVmZmVyLmMNCg0KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJ TlRBSU5FUlMNCmluZGV4IDM4ZmUyZjNmN2I2Zi4uNjJiN2Q4MTYxODdkIDEwMDY0NA0KLS0tIGEv TUFJTlRBSU5FUlMNCisrKyBiL01BSU5UQUlORVJTDQpAQCAtOTk0Niw2ICs5OTQ2LDEyIEBAIFE6 CWh0dHA6Ly9wYXRjaHdvcmsubGludXh0di5vcmcvcHJvamVjdC9saW51eC1tZWRpYS9saXN0Lw0K IFM6CU1haW50YWluZWQNCiBGOglkcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbTg4cnMyMDAw Kg0KIA0KK01BIFVTQiBIT1NUIERSSVZFUg0KK006CVZsYWRpbWlyIFN0YW5rb3ZpYyA8dmxhZGlt aXIuc3RhbmtvdmljQGRpc3BsYXlsaW5rLmNvbT4NCitXOglodHRwczovL3d3dy5kaXNwbGF5bGlu ay5jb20vDQorUzoJTWFpbnRhaW5lZA0KK0Y6CWRyaXZlcnMvdXNiL21hdXNiX2hvc3QvKg0KKw0K IE1BOTAxIE1BU1RFUktJVCBVU0IgRk0gUkFESU8gRFJJVkVSDQogTToJQWxleGV5IEtsaW1vdiA8 a2xpbW92LmxpbnV4QGdtYWlsLmNvbT4NCiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcN CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZw0K aW5kZXggMjc1NTY4YWJjNjcwLi43MmFjNDdmNmNiNmMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3Vz Yi9LY29uZmlnDQorKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnDQpAQCAtMTY0LDYgKzE2NCw4IEBA IHNvdXJjZSAiZHJpdmVycy91c2IvbWlzYy9LY29uZmlnIg0KIA0KIHNvdXJjZSAiZHJpdmVycy91 c2IvYXRtL0tjb25maWciDQogDQorc291cmNlICJkcml2ZXJzL3VzZXIvbWF1c2JfaG9zdC9LY29u ZmlnIg0KKw0KIGVuZGlmICMgVVNCDQogDQogc291cmNlICJkcml2ZXJzL3VzYi9waHkvS2NvbmZp ZyINCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2Vm aWxlDQppbmRleCAxYzFjMWQ2NTkzOTQuLjIyZDE5OThkYjBlMiAxMDA2NDQNCi0tLSBhL2RyaXZl cnMvdXNiL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQ0KQEAgLTY2LDMgKzY2 LDUgQEAgb2JqLSQoQ09ORklHX1VTQklQX0NPUkUpCSs9IHVzYmlwLw0KIG9iai0kKENPTkZJR19U WVBFQykJCSs9IHR5cGVjLw0KIA0KIG9iai0kKENPTkZJR19VU0JfUk9MRV9TV0lUQ0gpCSs9IHJv bGVzLw0KKw0KK29iai0kKENPTkZJR19IT1NUX01BVVNCKSAgICAgICAgKz0gbWF1c2JfaG9zdC8N CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3Vz Yi9tYXVzYl9ob3N0L0tjb25maWcNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwMDAuLjM1NzIyOWE0ZWJjMw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1 c2JfaG9zdC9LY29uZmlnDQpAQCAtMCwwICsxLDE1IEBADQorIw0KKyMgQ29weXJpZ2h0IChjKSAy MDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisjDQorIyBUaGlzIGZpbGUgaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp Yw0KKyMgTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0 b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisjIG1vcmUgZGV0YWlscy4NCisjDQorDQorY29uZmln IEhPU1RfTUFVU0INCisJdHJpc3RhdGUgIk1BLVVTQiBIb3N0IERyaXZlciINCisJZGVwZW5kcyBv biBVU0I9eQ0KKwlkZWZhdWx0IHkNCisJaGVscA0KKwkJVGhpcyBpcyBhIE1BLVVTQiBIb3N0IGRy aXZlciB3aGljaCBlbmFibGVzIGhvc3QgY29tbXVuaWNhdGlvbg0KKwkJdmlhIE1BLVVTQiBwcm90 b2NvbCBzdGFjay4NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L01ha2VmaWxl IGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9NYWtlZmlsZQ0KbmV3IGZpbGUgbW9kZSAxMDA2NDQN CmluZGV4IDAwMDAwMDAwMDAwMC4uOGVmM2I4YzQ0YmJkDQotLS0gL2Rldi9udWxsDQorKysgYi9k cml2ZXJzL3VzYi9tYXVzYl9ob3N0L01ha2VmaWxlDQpAQCAtMCwwICsxLDMwIEBADQorIw0KKyMg Q29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisjDQorIyBU aGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYw0KKyMgTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4g dGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisjIG1vcmUgZGV0YWlscy4N CisjDQorDQorY2NmbGFncy0kKENPTkZJR19IT1NUX01BVVNCX0RFQlVHKSA6PSAtRERFQlVHDQor DQorb2JqLSQoQ09ORklHX0hPU1RfTUFVU0IpICs9IGhvc3RfbWF1c2Iubw0KK2hvc3RfbWF1c2It eSA6PSBzcmMvaGNkL2h1Yi5vDQoraG9zdF9tYXVzYi15ICs9IHNyYy9oY2QvbW9kdWxlX2luaXQu bw0KK2hvc3RfbWF1c2IteSArPSBzcmMvaGNkL3ZoY2Qubw0KK2hvc3RfbWF1c2IteSArPSBzcmMv aHBhbC9kYXRhX2NvbW1vbi5vDQoraG9zdF9tYXVzYi15ICs9IHNyYy9ocGFsL2RhdGFfaW4ubw0K K2hvc3RfbWF1c2IteSArPSBzcmMvaHBhbC9kYXRhX291dC5vDQoraG9zdF9tYXVzYi15ICs9IHNy Yy9ocGFsL2hwYWwubw0KK2hvc3RfbWF1c2IteSArPSBzcmMvaHBhbC9pc29jaF9pbi5vDQoraG9z dF9tYXVzYi15ICs9IHNyYy9ocGFsL2lzb2NoX291dC5vDQoraG9zdF9tYXVzYi15ICs9IHNyYy9o cGFsL21hdXNiX2V2ZW50cy5vDQoraG9zdF9tYXVzYi15ICs9IHNyYy9ocGFsL25ldHdvcmtfY2Fs bGJhY2tzLm8NCitob3N0X21hdXNiLXkgKz0gc3JjL2xpbmsvbWF1c2JfaXBfbGluay5vDQoraG9z dF9tYXVzYi15ICs9IHNyYy91dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9yLm8NCitob3N0X21hdXNi LXkgKz0gc3JjL3V0aWxzL21hdXNiX21tYXAubw0KK2hvc3RfbWF1c2IteSArPSBzcmMvdXRpbHMv bWF1c2JfcmluZ19idWZmZXIubw0KKw0KK2NjZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvJChzcmMp L2luY2x1ZGUNCitjY2ZsYWdzLXkgKz0gLWcNCitjY2ZsYWdzLXkgKz0gLURNQVVTQl9XSVRIX0xP R1MNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvY29tbW9uL21h X3VzYi5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2NvbW1vbi9tYV91c2IuaA0K bmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNzJkNjAyZWJhZGMwDQot LS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvY29tbW9u L21hX3VzYi5oDQpAQCAtMCwwICsxLDg3MyBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wICovDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3BsYXlM aW5rIChVSykgTHRkLg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHYy LiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNo aXZlIGZvcg0KKyAqIG1vcmUgZGV0YWlscy4NCisgKi8NCisjaWZuZGVmIF9fTUFVU0JfQ09NTU9O X01BX1VTQl9IX18NCisjZGVmaW5lIF9fTUFVU0JfQ09NTU9OX01BX1VTQl9IX18NCisNCisjaWZk ZWYgX19LRVJORUxfXw0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KKyNlbHNlDQorI2luY2x1 ZGUgPHR5cGVzLmg+DQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8NCisNCisjZGVmaW5lIE1BX1VT Ql9TRVRfRklFTERfKF9tXywgX3YpIF9fbWF1c2Jfc2V0X2ZpZWxkKE1BX1VTQl8jI19tXyMjX01B U0ssIF92KQ0KKyNkZWZpbmUgTUFfVVNCX0dFVF9GSUVMRF8oX21fLCBfdikgX19tYXVzYl9nZXRf ZmllbGQoTUFfVVNCXyMjX21fIyNfTUFTSywgX3YpDQorI2RlZmluZSBNQV9VU0JfU0VUX0ZJRUxE KF9tXywgX3YpIF9fbWF1c2Jfc2V0X2ZpZWxkKE1BX1VTQl8jI19tXyMjX01BU0ssIFwNCisJCQkJ CQkgICAgTUFfVVNCXyMjX3YpDQorI2RlZmluZSBNQV9VU0JfR0VUX0ZJRUxEKF9tXywgX3YpIF9f bWF1c2JfZ2V0X2ZpZWxkKE1BX1VTQl8jI19tXyMjX01BU0ssIFwNCisJCQkJCQkgICAgTUFfVVNC XyMjX3YpDQorDQorI2RlZmluZSBNQV9VU0JfTUdNVF9UT0tFTl9SRVNFUlZFRCAgMA0KKyNkZWZp bmUgTUFfVVNCX01HTVRfVE9LRU5fTUlOICAgICAgIDENCisjZGVmaW5lIE1BX1VTQl9NR01UX1RP S0VOX01BWCAgICAgICAoKDEgPDwgMTApIC0gMSkNCisNCisjZGVmaW5lIE1BX1VTQl9EQVRBX0VQ U19VTkFTU0lHTkVEICAwDQorI2RlZmluZSBNQV9VU0JfREFUQV9FUFNfQUNUSVZFICAgICAgMQ0K KyNkZWZpbmUgTUFfVVNCX0RBVEFfRVBTX0lOQUNUSVZFICAgIDINCisjZGVmaW5lIE1BX1VTQl9E QVRBX0VQU19IQUxURUQgICAgICAzDQorDQorI2RlZmluZSBNQV9VU0JfREFUQV9URkxBR1NfQVJR ICAgICAgMQ0KKyNkZWZpbmUgTUFfVVNCX0RBVEFfVEZMQUdTX05FRyAgICAgIDINCisjZGVmaW5l IE1BX1VTQl9EQVRBX1RGTEFHU19FT1QgICAgICA0DQorI2RlZmluZSBNQV9VU0JfREFUQV9URkxB R1NfVFJBTlNGRVJfVFlQRV9DVFJMICAgMA0KKyNkZWZpbmUgTUFfVVNCX0RBVEFfVEZMQUdTX1RS QU5TRkVSX1RZUEVfSVNPQ0ggIDgNCisjZGVmaW5lIE1BX1VTQl9EQVRBX1RGTEFHU19UUkFOU0ZF Ul9UWVBFX0JVTEsgICAxNg0KKyNkZWZpbmUgTUFfVVNCX0RBVEFfVEZMQUdTX1RSQU5TRkVSX1RZ UEVfSU5UUiAgIDI0DQorDQorI2RlZmluZSBNQV9VU0JfREFUQV9URkxBR1NfVFJBTlNGRVJfVFlQ RV9NQVNLICAgMHgxOA0KKw0KKyNkZWZpbmUgTUFfVVNCX0RBVEFfSUZMQUdTX01URF9WQUxJRCAg ICAgIDENCisjZGVmaW5lIE1BX1VTQl9EQVRBX0lGTEFHU19IRFJfRk1UX1NIT1JUICAwDQorI2Rl ZmluZSBNQV9VU0JfREFUQV9JRkxBR1NfSERSX0ZNVF9TVEQgICAgMg0KKyNkZWZpbmUgTUFfVVNC X0RBVEFfSUZMQUdTX0hEUl9GTVRfTE9ORyAgIDQNCisjZGVmaW5lIE1BX1VTQl9EQVRBX0lGTEFH U19JUlNfRk1UX1NURCAgICAwDQorI2RlZmluZSBNQV9VU0JfREFUQV9JRkxBR1NfSVJTX0ZNVF9M T05HICAgMg0KKyNkZWZpbmUgTUFfVVNCX0RBVEFfSUZMQUdTX0FTQVAgICAgICAgICAgIDgNCisN CisjZGVmaW5lIE1BX1VTQl9EQVRBX0lGTEFHU19GTVRfTUFTSyAgICAgICAweDYNCisNCisvKiB2 ZXJzaW9uICovDQorDQorI2RlZmluZSBNQV9VU0JfSERSX1ZFUlNJT05fMV8wICAgICAgMA0KKw0K Ky8qIGZsYWdzICovDQorDQorI2RlZmluZSBNQV9VU0JfSERSX0ZMQUdTX0hPU1QgICAgICAgMQ0K KyNkZWZpbmUgTUFfVVNCX0hEUl9GTEFHU19SRVRSWSAgICAgIDINCisjZGVmaW5lIE1BX1VTQl9I RFJfRkxBR1NfVElNRVNUQU1QICA0DQorI2RlZmluZSBNQV9VU0JfSERSX0ZMQUdTX1JFU0VSVkVE ICAgOA0KKyNkZWZpbmUgTUFfVVNCX0hEUl9GTEFHKF9mKSBNQV9VU0JfSERSX0ZMQUdTXyMjX2YN CisNCisvKiB0eXBlIGFuZCBzdWJ0eXBlICovDQorDQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVf VFlQRV9NQVNLICAgICAweEMwDQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9NQVNL ICAweDNGDQorDQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfVFlQRV9NQU5BR0VNRU5UIDANCisj ZGVmaW5lIE1BX1VTQl9IRFJfVFlQRV9UWVBFX0NPTlRST0wgICAgMQ0KKyNkZWZpbmUgTUFfVVNC X0hEUl9UWVBFX1RZUEVfREFUQSAgICAgICAyDQorDQorLyogTWFuYWdlbWVudCBzdWJ0eXBlcyAq Lw0KKw0KKyNkZWZpbmUgX01BX1VTQl9IRFJfVFlQRV9NQU5BR0VNRU5UX1JFUShfcykgXA0KKwlN QV9VU0JfU0VUX0ZJRUxEXyhIRFJfVFlQRV9TVUJUWVBFLCAoX3MpICogMikNCisjZGVmaW5lIF9N QV9VU0JfSERSX1RZUEVfTUFOQUdFTUVOVF9SRVNQKF9zKSBcDQorCU1BX1VTQl9TRVRfRklFTERf KEhEUl9UWVBFX1NVQlRZUEUsIChfcykgKiAyICsgMSkNCisNCisjZGVmaW5lIE1BX1VTQl9IRFJf VFlQRV9NQU5BR0VNRU5UX1JFUShfcykgXA0KKwlfTUFfVVNCX0hEUl9UWVBFX01BTkFHRU1FTlRf UkVRKE1BX1VTQl9IRFJfVFlQRV9TVUJUWVBFXyMjX3MpDQorI2RlZmluZSBNQV9VU0JfSERSX1RZ UEVfTUFOQUdFTUVOVF9SRVNQKF9zKSBcDQorCV9NQV9VU0JfSERSX1RZUEVfTUFOQUdFTUVOVF9S RVNQKE1BX1VTQl9IRFJfVFlQRV9TVUJUWVBFXyMjX3MpDQorDQorI2RlZmluZSBNQV9VU0JfSERS X1RZUEVfU1VCVFlQRV9DQVAgICAgICAgICAgICAgICAwDQorI2RlZmluZSBNQV9VU0JfSERSX1RZ UEVfU1VCVFlQRV9VU0JERVZIQU5ETEUgICAgICAxDQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVf U1VCVFlQRV9FUEhBTkRMRSAgICAgICAgICAyDQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VC VFlQRV9FUEFDVElWQVRFICAgICAgICAzDQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQ RV9FUElOQUNUSVZBVEUgICAgICA0DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9F UFJFU0VUICAgICAgICAgICA1DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9DTEVB UlRSQU5TRkVSUyAgICA2DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9FUEhBTkRM RURFTEVURSAgICA3DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9ERVZSRVNFVCAg ICAgICAgICA4DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9NT0RJRllFUDAgICAg ICAgICA5DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9TRVRVU0JERVZBRERSICAg ICAxMA0KKyNkZWZpbmUgTUFfVVNCX0hEUl9UWVBFX1NVQlRZUEVfVVBEQVRFREVWICAgICAgICAg MTENCisjZGVmaW5lIE1BX1VTQl9IRFJfVFlQRV9TVUJUWVBFX1VTQkRFVkRJU0NPTk5FQ1QgIDEy DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9VU0JTVVNQRU5EICAgICAgICAxMw0K KyNkZWZpbmUgTUFfVVNCX0hEUl9UWVBFX1NVQlRZUEVfVVNCUkVTVU1FICAgICAgICAgMTQNCisj ZGVmaW5lIE1BX1VTQl9IRFJfVFlQRV9TVUJUWVBFX1JFTU9URVdBS0UgICAgICAgIDE1DQorI2Rl ZmluZSBNQV9VU0JfSERSX1RZUEVfU1VCVFlQRV9QSU5HICAgICAgICAgICAgICAxNg0KKyNkZWZp bmUgTUFfVVNCX0hEUl9UWVBFX1NVQlRZUEVfREVWRElTQ09OTkVDVCAgICAgMTcNCisjZGVmaW5l IE1BX1VTQl9IRFJfVFlQRV9TVUJUWVBFX0RFVklOSVRESVNDT05ORUNUIDE4DQorI2RlZmluZSBN QV9VU0JfSERSX1RZUEVfU1VCVFlQRV9TWU5DSCAgICAgICAgICAgICAxOQ0KKyNkZWZpbmUgTUFf VVNCX0hEUl9UWVBFX1NVQlRZUEVfQ0FOQ0VMVFJBTlNGRVIgICAgMjANCisjZGVmaW5lIE1BX1VT Ql9IRFJfVFlQRV9TVUJUWVBFX0VQT1BFTlNUUkVBTSAgICAgIDIxDQorI2RlZmluZSBNQV9VU0Jf SERSX1RZUEVfU1VCVFlQRV9FUENMT1NFU1RSRUFNICAgICAyMg0KKyNkZWZpbmUgTUFfVVNCX0hE Ul9UWVBFX1NVQlRZUEVfVVNCREVWUkVTRVQgICAgICAgMjMNCisjZGVmaW5lIE1BX1VTQl9IRFJf VFlQRV9TVUJUWVBFX0RFVk5PVElGSUNBVElPTiAgIDI0DQorI2RlZmluZSBNQV9VU0JfSERSX1RZ UEVfU1VCVFlQRV9FUFNFVEtFRVBBTElWRSAgICAyNQ0KKyNkZWZpbmUgTUFfVVNCX0hEUl9UWVBF X1NVQlRZUEVfR0VUUE9SVEJXICAgICAgICAgMjYNCisjZGVmaW5lIE1BX1VTQl9IRFJfVFlQRV9T VUJUWVBFX1NMRUVQICAgICAgICAgICAgIDI3DQorI2RlZmluZSBNQV9VU0JfSERSX1RZUEVfU1VC VFlQRV9XQUtFICAgICAgICAgICAgICAyOA0KKyNkZWZpbmUgTUFfVVNCX0hEUl9UWVBFX1NVQlRZ UEVfVkVORE9SU1BFQ0lGSUMgICAgMzEgLyogUmVzZXJ2ZWQgKi8NCisNCisvKiBEYXRhIHN1YnR5 cGVzICovDQorDQorI2RlZmluZSBfTUFfVVNCX0hEUl9UWVBFX0RBVEFfUkVRKF9zKSAoeyBcDQor CXR5cGVvZihfcykgKHMpID0gKF9zKTsgXA0KKwlNQV9VU0JfU0VUX0ZJRUxEKEhEUl9UWVBFX1RZ UEUsIEhEUl9UWVBFX1RZUEVfREFUQSkgfCBcDQorCU1BX1VTQl9TRVRfRklFTERfKEhEUl9UWVBF X1NVQlRZUEUsIChzKSAqIDIgXA0KKwkrICgocykgPiAwID8gMSA6IDApKTsgfSkNCisjZGVmaW5l IF9NQV9VU0JfSERSX1RZUEVfREFUQV9SRVNQKF9zKSAoeyBcDQorCXR5cGVvZihfcykgKHMpID0g KF9zKTsgXA0KKwlNQV9VU0JfU0VUX0ZJRUxEKEhEUl9UWVBFX1RZUEUsIEhEUl9UWVBFX1RZUEVf REFUQSkgfCBcDQorCU1BX1VTQl9TRVRfRklFTERfKEhEUl9UWVBFX1NVQlRZUEUsIChzKSAqIDIg KyAxIFwNCisJKyAoKHMpID4gMCA/IDEgOiAwKSk7IH0pDQorI2RlZmluZSBfTUFfVVNCX0hEUl9U WVBFX0RBVEFfQUNLKF9zKSAoIFwNCisJTUFfVVNCX1NFVF9GSUVMRChIRFJfVFlQRV9UWVBFLCBI RFJfVFlQRV9UWVBFX0RBVEEpIHwgXA0KKwlNQV9VU0JfU0VUX0ZJRUxEXyhIRFJfVFlQRV9TVUJU WVBFLCAoX3MpICogMiArIDIpKQ0KKw0KKyNkZWZpbmUgTUFfVVNCX0hEUl9UWVBFX0RBVEFfUkVR KF9zKSBcDQorCV9NQV9VU0JfSERSX1RZUEVfREFUQV9SRVEoTUFfVVNCX0hEUl9UWVBFX1NVQlRZ UEVfIyNfcykNCisjZGVmaW5lIE1BX1VTQl9IRFJfVFlQRV9EQVRBX1JFU1AoX3MpIFwNCisJX01B X1VTQl9IRFJfVFlQRV9EQVRBX1JFU1AoTUFfVVNCX0hEUl9UWVBFX1NVQlRZUEVfIyNfcykNCisj ZGVmaW5lIE1BX1VTQl9IRFJfVFlQRV9EQVRBX0FDSyhfcykgXA0KKwlfTUFfVVNCX0hEUl9UWVBF X0RBVEFfQUNLKE1BX1VTQl9IRFJfVFlQRV9TVUJUWVBFXyMjX3MpDQorDQorI2RlZmluZSBNQV9V U0JfSERSX1RZUEVfU1VCVFlQRV9UUkFOU0ZFUiAgICAgICAgICAwDQorI2RlZmluZSBNQV9VU0Jf SERSX1RZUEVfU1VCVFlQRV9JU09DSFRSQU5TRkVSICAgICAxDQorDQorLyogRVAvRGV2aWNlIEhh bmRsZSAqLw0KKw0KKyNkZWZpbmUgTUFfVVNCX0RFVklDRV9IQU5ETEVfUkVTRVJWRUQgICAwDQor DQorI2RlZmluZSBNQV9VU0JfRVBfSEFORExFX0RfTUFTSyAgICAgMHgwMDAxDQorI2RlZmluZSBN QV9VU0JfRVBfSEFORExFX0VQX05fTUFTSyAgMHgwMDFlDQorI2RlZmluZSBNQV9VU0JfRVBfSEFO RExFX0FERFJfTUFTSyAgMHgwZmUwDQorI2RlZmluZSBNQV9VU0JfRVBfSEFORExFX0JVU19OX01B U0sgMHhmMDAwDQorDQorI2RlZmluZSBNQV9VU0JfRVBfSEFORExFKF9iLCBfYSwgX2UsIF9kKSAo IFwNCisJTUFfVVNCX1NFVF9GSUVMRF8oRVBfSEFORExFX0JVU19OLCBfYikgIHwgXA0KKwlNQV9V U0JfU0VUX0ZJRUxEXyhFUF9IQU5ETEVfQUREUiwgX2EpICAgfCBcDQorCU1BX1VTQl9TRVRfRklF TERfKEVQX0hBTkRMRV9FUF9OLCBfZSkgICB8IFwNCisJTUFfVVNCX1NFVF9GSUVMRF8oRVBfSEFO RExFX0QsIF9kKSkNCisNCisjZGVmaW5lIE1BX1VTQl9FUF9IQU5ETEVfQlVTX05fVklSVFVBTCAg MTUNCisjZGVmaW5lIE1BX1VTQl9FUF9IQU5ETEVfQUREUl9ERUZBVUxUICAgMA0KKyNkZWZpbmUg TUFfVVNCX0VQX0hBTkRMRV9FUF9OX0RFRkFVTFQgICAwDQorI2RlZmluZSBNQV9VU0JfRVBfSEFO RExFX0RfT1VUICAgICAgICAgIDAJLyogU2VlIFVTQjIuMCA5LjMsIFRhYmxlIDktMiAqLw0KKyNk ZWZpbmUgTUFfVVNCX0VQX0hBTkRMRV9EX0lOICAgICAgICAgICAxCS8qIFNlZSBVU0IyLjAgOS4z LCBUYWJsZSA5LTIgKi8NCisNCisvKiBTdGF0dXMgY29kZXMgKi8NCisNCisjZGVmaW5lIE1BX1VT Ql9IRFJfU1RBVFVTX1VOU1VDQ0VTU0ZVTCAgICAgICAgICAgICAgICAgIC0xMjgNCisjZGVmaW5l IE1BX1VTQl9IRFJfU1RBVFVTX0lOVkFMSURfTUFfVVNCX1NFU1NJT05fU1RBVEUgIC0xMjcNCisj ZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lOVkFMSURfREVWSUNFX0hBTkRMRSAgICAgICAgIC0x MjYNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lOVkFMSURfRVBfSEFORExFICAgICAgICAg ICAgIC0xMjUNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lOVkFMSURfRVBfSEFORExFX1NU QVRFICAgICAgIC0xMjQNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lOVkFMSURfUkVRVUVT VCAgICAgICAgICAgICAgIC0xMjMNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX01JU1NJTkdf U0VRVUVOQ0VfTlVNQkVSICAgICAgIC0xMjINCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX1RS QU5TRkVSX1BFTkRJTkcgICAgICAgICAgICAgIC0xMjENCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RB VFVTX1RSQU5TRkVSX0VQX1NUQUxMICAgICAgICAgICAgIC0xMjANCisjZGVmaW5lIE1BX1VTQl9I RFJfU1RBVFVTX1RSQU5TRkVSX1NJWkVfRVJST1IgICAgICAgICAgIC0xMTkNCisjZGVmaW5lIE1B X1VTQl9IRFJfU1RBVFVTX1RSQU5TRkVSX0RBVEFfQlVGRkVSX0VSUk9SICAgIC0xMTgNCisjZGVm aW5lIE1BX1VTQl9IRFJfU1RBVFVTX1RSQU5TRkVSX0JBQkJMRV9ERVRFQ1RFRCAgICAgIC0xMTcN CisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX1RSQU5TRkVSX1RSQU5TQUNUSU9OX0VSUk9SICAg IC0xMTYNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX1RSQU5TRkVSX1NIT1JUX1RSQU5TRkVS ICAgICAgIC0xMTUNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX1RSQU5TRkVSX0NBTkNFTEVE ICAgICAgICAgICAgIC0xMTQNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lOU1VGSUNJRU5U X1JFU09VUkNFUyAgICAgICAgIC0xMTMNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX05PVF9T VUZGSUNJRU5UX0JBTkRXSURUSCAgICAgIC0xMTINCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVT X0lOVEVSTkFMX0VSUk9SICAgICAgICAgICAgICAgIC0xMTENCisjZGVmaW5lIE1BX1VTQl9IRFJf U1RBVFVTX0RBVEFfT1ZFUlJVTiAgICAgICAgICAgICAgICAgIC0xMTANCisjZGVmaW5lIE1BX1VT Ql9IRFJfU1RBVFVTX0RFVklDRV9OT1RfQUNDRVNTRUQgICAgICAgICAgIC0xMDkNCisjZGVmaW5l IE1BX1VTQl9IRFJfU1RBVFVTX0JVRkZFUl9PVkVSUlVOICAgICAgICAgICAgICAgIC0xMDgNCisj ZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgIC0x MDcNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0RST1BQRURfUEFDS0VUICAgICAgICAgICAg ICAgIC0xMDYNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lTT0NIX1RJTUVfRVhQSVJFRCAg ICAgICAgICAgIC0xMDUNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX0lTT0NIX1RJTUVfSU5W QUxJRCAgICAgICAgICAgIC0xMDQNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX05PX1VTQl9Q SU5HX1JFU1BPTlNFICAgICAgICAgIC0xMDMNCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX05P VF9TVVBQT1JURUQgICAgICAgICAgICAgICAgIC0xMDINCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RB VFVTX1JFUVVFU1RfREVOSUVEICAgICAgICAgICAgICAgIC0xMDENCisjZGVmaW5lIE1BX1VTQl9I RFJfU1RBVFVTX01JU1NJTkdfUkVRVUVTVF9JRCAgICAgICAgICAgIC0xMDANCisjZGVmaW5lIE1B X1VTQl9IRFJfU1RBVFVTX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgIDAJLyogUmVzZXJ2 ZWQgKi8NCisjZGVmaW5lIE1BX1VTQl9IRFJfU1RBVFVTX05PX0VSUk9SIE1BX1VTQl9IRFJfU1RB VFVTX1NVQ0NFU1MJLyogUmVzZXJ2ZWQgKi8NCisNCisvKiBTcGVlZCB2YWx1ZXMgKi8NCisNCisj ZGVmaW5lIE1BX1VTQl9TUEVFRF9MT1dfU1BFRUQgICAgICAgICAwDQorI2RlZmluZSBNQV9VU0Jf U1BFRURfRlVMTF9TUEVFRCAgICAgICAgMQ0KKyNkZWZpbmUgTUFfVVNCX1NQRUVEX0hJR0hfU1BF RUQgICAgICAgIDINCisjZGVmaW5lIE1BX1VTQl9TUEVFRF9TVVBFUl9TUEVFRCAgICAgICAzDQor I2RlZmluZSBNQV9VU0JfU1BFRURfU1VQRVJfU1BFRURfUExVUyAgNA0KKw0KKy8qIGNhcHJlcSBl eHRyYSBoZHIgKi8NCisNCisjZGVmaW5lIE1BX1VTQl9DQVBSRVFfREVTQ19TWU5DSFJPTklaQVRJ T05fTEVOR1RIXA0KKwkoc2l6ZW9mKHN0cnVjdCBtYV91c2JfZGVzYykgK1wNCisJc2l6ZW9mKHN0 cnVjdCBtYV91c2JfY2FwcmVxX2Rlc2Nfc3luY2hyb25pemF0aW9uKSkNCisjZGVmaW5lIE1BX1VT Ql9DQVBSRVFfREVTQ19MSU5LX1NMRUVQX0xFTkdUSFwNCisJKHNpemVvZihzdHJ1Y3QgbWFfdXNi X2Rlc2MpICtcDQorCXNpemVvZihzdHJ1Y3QgbWFfdXNiX2NhcHJlcV9kZXNjX2xpbmtfc2xlZXAp KQ0KKw0KKyNkZWZpbmUgTUFfVVNCX0NBUFJFUV9MRU5HVEhcDQorCShzaXplb2Yoc3RydWN0IG1h X3VzYl9oZHJfY29tbW9uKSArXA0KKwlzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfY2FwcmVxKSAr XA0KKwlNQV9VU0JfQ0FQUkVRX0RFU0NfU1lOQ0hST05JWkFUSU9OX0xFTkdUSCArXA0KKwlNQV9V U0JfQ0FQUkVRX0RFU0NfTElOS19TTEVFUF9MRU5HVEgpDQorDQorLyogY2FwcmVxIGRlc2MgdHlw ZXMgKi8NCisNCisjZGVmaW5lIE1BX1VTQl9DQVBSRVFfREVTQ19UWVBFX1NZTkNIUk9OSVpBVElP TiAzDQorI2RlZmluZSBNQV9VU0JfQ0FQUkVRX0RFU0NfVFlQRV9MSU5LX1NMRUVQICAgICAgNQ0K Kw0KKy8qIGNhcHJlc3AgZGVzY3JpcHRvcnMgKi8NCisNCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQ X0RFU0NfVFlQRV9TUEVFRCAgICAgICAgICAgIDANCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQX0RF U0NfVFlQRV9QX01BTkFHRURfT1VUICAgIDENCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQX0RFU0Nf VFlQRV9JU09DSFJPTk9VUyAgICAgIDINCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQX0RFU0NfVFlQ RV9TWU5DSFJPTklaQVRJT04gIDMNCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQX0RFU0NfVFlQRV9D T05UQUlORVJfSUQgICAgIDQNCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQX0RFU0NfVFlQRV9MSU5L X1NMRUVQICAgICAgIDUNCisjZGVmaW5lIE1BX1VTQl9DQVBSRVNQX0RFU0NfVFlQRV9IVUJfTEFU RU5DWSAgICAgIDYNCisNCisvKiBSZXF1ZXN0IElEIGFuZCBzZXF1ZW5jZSBudW1iZXIgdmFsdWVz ICovDQorDQorI2RlZmluZSBNQV9VU0JfVFJBTlNGRVJfUkVTRVJWRUQgICAgICAwDQorI2RlZmlu ZSBNQV9VU0JfVFJBTlNGRVJfUkVRSURfTUlOICAgICAwDQorI2RlZmluZSBNQV9VU0JfVFJBTlNG RVJfUkVRSURfTUFYICAgICAoKDEgPDwgIDgpIC0gMSkNCisjZGVmaW5lIE1BX1VTQl9UUkFOU0ZF Ul9TRVFOX01JTiAgICAgIDANCisjZGVmaW5lIE1BX1VTQl9UUkFOU0ZFUl9TRVFOX01BWCAgICAg ICgoMSA8PCAyNCkgLSAyKQ0KKyNkZWZpbmUgTUFfVVNCX1RSQU5TRkVSX1NFUU5fSU5WQUxJRCAg KCgxIDw8IDI0KSAtIDEpDQorDQorI2RlZmluZSBNQV9VU0JfSVNPQ0hfU0ZMQUdTX0ZSQUdNRU5U ICAgICAgMHgxDQorI2RlZmluZSBNQV9VU0JfSVNPQ0hfU0ZMQUdTX0xBU1RfRlJBR01FTlQgMHgy DQorDQorI2RlZmluZSBNQVVTQl9NQVhfTUdNVF9TSVpFIDUwDQorDQorI2RlZmluZSBNQVVTQl9U UkFOU0ZFUl9IRFJfU0laRSAodTMyKShzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uKSAr XA0KKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfdHJhbnNmZXIpKQ0KKw0KKyNk ZWZpbmUgTUFVU0JfSVNPQ0hfVFJBTlNGRVJfSERSX1NJWkUgKHUxNikoc2l6ZW9mKHN0cnVjdCBt YV91c2JfaGRyX2NvbW1vbikgK1wNCisJCQlzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfaXNvY2h0 cmFuc2ZlcikgK1wNCisJCQlzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfaXNvY2h0cmFuc2Zlcl9v cHRpb25hbCkpDQorDQorI2RlZmluZSBNQVhfSVNPQ0hfQVNBUF9QQUNLRVRfU0laRSAoMTUwMDAw IC8qIE5ldHdvcmsgTVRVICovIC1cDQorCU1BVVNCX0lTT0NIX1RSQU5TRkVSX0hEUl9TSVpFIC0g MjAgLyogSVAgaGVhZGVyIHNpemUgKi8gLVwNCisJOCAvKiBVRFAgaGVhZGVyIHNpemUqLykNCisN CisjZGVmaW5lIHNoaWZ0X3B0cihwdHIsIG9mZnNldCkgKCh1OCAqKShwdHIpICsgKG9mZnNldCkp DQorDQorLyogVVNCIGRlc2NyaXB0b3IgKi8NCitzdHJ1Y3QgbWFfdXNiX2Rlc2Mgew0KKwl1OCBs ZW5ndGg7DQorCXU4IHR5cGU7DQorCXU4IHZhbHVlWzBdOw0KK30gX19wYWNrZWQ7DQorDQorc3Ry dWN0IG1hX3VzYl9lcF9oYW5kbGUgew0KKwl1MTYgZAkJOjEsDQorCSAgICBlcF9uCTo0LA0KKwkg ICAgYWRkcgk6NywNCisJICAgIGJ1c19uCTo0Ow0KK307DQorDQorc3RydWN0IG1hX3VzYl9oZHJf bWdtdCB7DQorCXUzMiBzdGF0dXMJOjgsDQorCSAgICB0b2tlbgk6MTAsICAvKiByZXF1ZXN0b3Ig b3JpZ2luYXRvciBhbGxvY2F0ZWQgKi8NCisJICAgIHJlc2VydmVkCToxNDsNCit9IF9fYWxpZ25l ZCg0KTsNCisNCitzdHJ1Y3QgbWFfdXNiX2hkcl9jdHJsIHsJLyogdXNlZCBpbiBhbGwgcmVxL3Jl c3AvY29uZiBvcGVyYXRpb25zICovDQorCXM4IHN0YXR1czsNCisJdTggbGlua190eXBlOw0KKwl1 bmlvbiB7DQorCQl1OCB0aWQ7CS8qIGllZWUgODAyLjExICovDQorCX0gY29ubmVjdGlvbl9pZDsN Cit9IF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgbWFfdXNiX2hkcl9kYXRhIHsNCisJczggc3Rh dHVzOw0KKwl1OCBlcHMJCToyLA0KKwkgICB0X2ZsYWdzCTo2Ow0KKwl1bmlvbiB7DQorCQl1MTYg c3RyZWFtX2lkOw0KKwkJc3RydWN0IHsNCisJCQl1MTYgaGVhZGVycwk6MTIsDQorCQkJICAgIGlf ZmxhZ3MJOjQ7DQorCQl9Ow0KKwl9Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVjdCBtYV91 c2JfaGRyX2NvbW1vbiB7DQorCXU4IHZlcnNpb24JOjQsDQorCSAgIGZsYWdzCTo0Ow0KKwl1OCAg dHlwZTsNCisJdTE2IGxlbmd0aDsNCisJdW5pb24gew0KKwkJdTE2IGRldjsNCisJCXUxNiBlcHY7 DQorCQlzdHJ1Y3QgbWFfdXNiX2VwX2hhbmRsZSBlcGg7DQorCX0gaGFuZGxlOw0KKwl1OCBkZXZf YWRkcjsNCisJdTggc3NpZDsNCisJdW5pb24gew0KKwkJczggc3RhdHVzOw0KKwkJc3RydWN0IG1h X3VzYl9oZHJfbWdtdCBtZ210Ow0KKwkJc3RydWN0IG1hX3VzYl9oZHJfY3RybCBjdHJsOw0KKwkJ c3RydWN0IG1hX3VzYl9oZHJfZGF0YSBkYXRhOw0KKwl9Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0K Ky8qIGNhcHJlcSBleHRyYSBoZHIgKi8NCisNCitzdHJ1Y3QgbWFfdXNiX2hkcl9jYXByZXEgew0K Kwl1MzIgb3V0X21nbXRfcmVxcwk6MTIsDQorCSAgICByZXNlcnZlZAkJOjIwOw0KK30gX19hbGln bmVkKDQpOw0KKw0KK3N0cnVjdCBtYV91c2JfY2FwcmVxX2Rlc2Nfc3luY2hyb25pemF0aW9uIHsN CisJdTggbWVkaWFfdGltZV9hdmFpbGFibGUJOjEsDQorCSAgIHJlc2VydmVkCQk6NzsNCit9IF9f cGFja2VkOw0KKw0KK3N0cnVjdCBtYV91c2JfY2FwcmVxX2Rlc2NfbGlua19zbGVlcCB7DQorCXU4 IGxpbmtfc2xlZXBfY2FwYWJsZQk6MSwNCisJICAgcmVzZXJ2ZWQJCTo3Ow0KK30gX19wYWNrZWQ7 DQorDQorLyogY2FwcmVzcCBleHRyYSBoZHIgKi8NCisNCitzdHJ1Y3QgbWFfdXNiX2hkcl9jYXBy ZXNwIHsNCisJdTE2IGVuZHBvaW50czsNCisJdTggZGV2aWNlczsNCisJdTggc3RyZWFtcwkJOjUs DQorCSAgIGRldl90eXBlCQk6MzsNCisJdTMyIGRlc2NzCQk6OCwNCisJICAgIGRlc2NzX2xlbmd0 aAk6MjQ7DQorCXUxNiBvdXRfdHJhbnNmZXJfcmVxczsNCisJdTE2IG91dF9tZ210X3JlcXMJOjEy LA0KKwkgICAgcmVzZXJ2ZWQJCTo0Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVjdCBtYV91 c2JfY2FwcmVzcF9kZXNjX3NwZWVkIHsNCisJdTggcmVzZXJ2ZWQxCQk6NCwNCisJCXNwZWVkCQk6 NDsNCisJdTggcmVzZXJ2ZWQyCQk6NCwNCisJICAgbHNlCQkJOjIsCS8qIFVTQjMuMSA4LjUuNi43 LCBUYWJsZSA4LTIyICovDQorCSAgIHJlc2VydmVkMwkJOjI7DQorfSBfX3BhY2tlZDsNCisNCitz dHJ1Y3QgbWFfdXNiX2NhcHJlc3BfZGVzY19wX21hbmFnZWRfb3V0IHsNCisJdTggZWxhc3RpY19i dWZmZXIJCToxLA0KKwkgICBkcm9wX25vdGlmaWNhdGlvbgkJOjEsDQorCSAgIHJlc2VydmVkCQkJ OjY7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbWFfdXNiX2NhcHJlc3BfZGVzY19pc29jaHJv bm91cyB7DQorCXU4IHBheWxvYWRfZHdvcmRfYWxpZ25lZAk6MSwNCisJICAgcmVzZXJ2ZWQJCQk6 NzsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtYV91c2JfY2FwcmVzcF9kZXNjX3N5bmNocm9u aXphdGlvbiB7DQorCXU4IG1lZGlhX3RpbWVfYXZhaWxhYmxlCToxLA0KKwkgICB0aW1lX3N0YW1w X3JlcXVpcmVkCToxLC8qIGh1YnMgbmVlZCB0aGlzIHNldCAqLw0KKwkgICByZXNlcnZlZAkJOjY7 DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbWFfdXNiX2NhcHJlc3BfZGVzY19jb250YWluZXJf aWQgew0KKwl1OCBjb250YWluZXJfaWRbMTZdOwkvKiBVVUlEIElFVEYgUkZDIDQxMjIgKi8NCit9 IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtYV91c2JfY2FwcmVzcF9kZXNjX2xpbmtfc2xlZXAgew0K Kwl1OCBsaW5rX3NsZWVwX2NhcGFibGUJOjEsDQorCSAgIHJlc2VydmVkCQk6NzsNCit9IF9fcGFj a2VkOw0KKw0KK3N0cnVjdCBtYV91c2JfY2FwcmVzcF9kZXNjX2h1Yl9sYXRlbmN5IHsNCisJdTE2 IGxhdGVuY3k7CQkvKiBVU0IzLjEgKi8NCit9IF9fcGFja2VkOw0KKw0KKy8qIHVzYmRldmhhbmRs ZXJlcSBleHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNiX2hkcl91c2JkZXZoYW5kbGVyZXEgew0K Kwl1MzIgcm91dGVfc3RyaW5nCToyMCwNCisJICAgIHNwZWVkCQk6NCwNCisJICAgIHJlc2VydmVk MQkJOjg7DQorCXUxNiBodWJfZGV2X2hhbmRsZTsNCisJdTE2IHJlc2VydmVkMjsNCisJdTE2IHBh cmVudF9oc19odWJfZGV2X2hhbmRsZTsNCisJdTE2IHBhcmVudF9oc19odWJfcG9ydAkJOjQsDQor CSAgICBtdHQJCQkJOjEsCS8qIFVTQjIuMCAxMS4xNCwgMTEuMTQuMS4zICovDQorCSAgICBsc2UJ CQkJOjIsCS8qIFVTQjMuMSA4LjUuNi43LCBUYWJsZSA4LTIyICovDQorCSAgICByZXNlcnZlZDMJ CQk6OTsNCit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiB1c2JkZXZoYW5kbGVyZXNwIGV4dHJhIGhk ciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX3VzYmRldmhhbmRsZXJlc3Agew0KKwl1MTYgZGV2X2hh bmRsZTsNCisJdTE2IHJlc2VydmVkOw0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGVwaGFuZGxl cmVxIGV4dHJhIGhkciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX2VwaGFuZGxlcmVxIHsNCisJdTMy IGVwX2Rlc2NzCQk6NSwNCisJICAgIGVwX2Rlc2Nfc2l6ZQk6NiwNCisJICAgIHJlc2VydmVkCQk6 MjE7DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyoNCisgKiBSZXN0cmljdGVkIFVTQjIuMCBlcCBk ZXNjIGxpbWl0ZWQgdG8gNiBieXRlcywgaXNvbGF0aW5nIGZ1cnRoZXIgY2hhbmdlcy4NCisgKiBT ZWUgVVNCMi4wIDkuNi42LCBUYWJsZSA5LTEzDQorICovDQorc3RydWN0IHVzYl9lcF9kZXNjIHsN CisJdTggYkxlbmd0aDsNCisJLyogVVNCMi4wIDkuNCwgVGFibGUgOS01ICg1KSB1c2IvY2g5Lmg6 IFVTQl9EVF9FTkRQT0lOVCAqLw0KKwl1OCBiRGVzY3JpcHRvclR5cGU7DQorCXU4ICBiRW5kcG9p bnRBZGRyZXNzOw0KKwl1OCAgYm1BdHRyaWJ1dGVzOw0KKwlfX2xlMTYgd01heFBhY2tldFNpemU7 DQorCXU4ICBiSW50ZXJ2YWw7DQorfSBfX3BhY2tlZDsNCisNCisvKg0KKyAqIFJlc3RyaWN0ZWQg VVNCMy4xIGVwIGNvbXAgZGVzYyBpc29sYXRpbmcgZnVydGhlciBjaGFuZ2VzIGluIHVzYi9jaDku aA0KKyAqIFNlZSBVU0IzLjEgOS42LjcsIFRhYmxlIDktMjYNCisgKi8NCitzdHJ1Y3QgdXNiX3Nz X2VwX2NvbXBfZGVzYyB7DQorCXU4IGJMZW5ndGg7DQorCS8qIFVTQjMuMSA5LjQsIFRhYmxlIDkt NiAoNDgpIHVzYi9jaDkuaDogVVNCX0RUX1NTX0VORFBPSU5UX0NPTVAgKi8NCisJdTggIGJEZXNj cmlwdG9yVHlwZTsNCisJdTggIGJNYXhCdXJzdDsNCisJdTggIGJtQXR0cmlidXRlczsNCisJX19s ZTE2IHdCeXRlc1BlckludGVydmFsOw0KK30gX19wYWNrZWQ7DQorDQorLyoNCisgKiBVU0IzLjEg c3NfcGx1c19pc29jaF9lcF9jb21wX2Rlc2MNCisgKiBTZWUgVVNCMy4xIDkuNi44LCBUYWJsZSA5 LTI3DQorICovDQorc3RydWN0IHVzYl9zc19wbHVzX2lzb2NoX2VwX2NvbXBfZGVzYyB7DQorCXU4 IGJMZW5ndGg7DQorCS8qIFVTQjMuMSA5LjQsIFRhYmxlIDktNiAoNDkpIHVzYi9jaDkuaDogbm90 IHlldCBkZWZpbmVkISAqLw0KKwl1OCBiRGVzY3JpcHRvclR5cGU7DQorCXUxNiB3UmVzZXJ2ZWQ7 DQorCXUzMiBkd0J5dGVzUGVySW50ZXJ2YWw7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbWFf dXNiX2VwaGFuZGxlcmVxX2Rlc2Nfc3RkIHsNCisJc3RydWN0IHVzYl9lcF9kZXNjIHVzYjIwOw0K K30gX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVjdCBtYV91c2JfZXBoYW5kbGVyZXFfZGVzY19zcyB7 DQorCXN0cnVjdCB1c2JfZXBfZGVzYwkgICB1c2IyMDsNCisJc3RydWN0IHVzYl9zc19lcF9jb21w X2Rlc2MgdXNiMzE7DQorfSBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0IG1hX3VzYl9lcGhhbmRs ZXJlcV9kZXNjX3NzX3BsdXMgew0KKwlzdHJ1Y3QgdXNiX2VwX2Rlc2MJCSAgICAgIHVzYjIwOw0K KwlzdHJ1Y3QgdXNiX3NzX2VwX2NvbXBfZGVzYwkgICAgICB1c2IzMTsNCisJc3RydWN0IHVzYl9z c19wbHVzX2lzb2NoX2VwX2NvbXBfZGVzYyB1c2IzMV9pc29jaDsNCit9IF9fYWxpZ25lZCg0KTsN CisNCitzdHJ1Y3QgbWFfdXNiX2Rldl9jb250ZXh0IHsNCisJc3RydWN0IHVzYl9lcF9kZXNjIHVz YjsNCit9Ow0KKw0KKy8qIGVwaGFuZGxlcmVzcCBleHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNi X2hkcl9lcGhhbmRsZXJlc3Agew0KKwl1MzIgZXBfZGVzY3MgOjUsDQorCSAgICByZXNlcnZlZCA6 Mjc7DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyogZXBoYW5kbGVyZXNwIGRlc2NyaXB0b3IgKi8N CitzdHJ1Y3QgbWFfdXNiX2VwaGFuZGxlcmVzcF9kZXNjIHsNCisJdW5pb24gew0KKwkJc3RydWN0 IG1hX3VzYl9lcF9oYW5kbGUgZXBoOw0KKwkJdTE2CQllcHY7DQorCX0gZXBfaGFuZGxlOw0KKwl1 MTYgZAkJOjEsCS8qIG5vbi1jb250cm9sIG9yIG5vbi1PVVQgKi8NCisJICAgIGlzb2NoCToxLA0K KwkgICAgbF9tYW5hZ2VkCToxLAkvKiBjb250cm9sIG9yIG5vbi1pc29jaCBPVVQgKi8NCisJICAg IGludmFsaWQJOjEsDQorCSAgICByZXNlcnZlZDEJOjEyOw0KKwl1MTYgY2N1OwkJLyogY29udHJv bCBvciBub24taXNvY2ggT1VUICovDQorCXUxNiByZXNlcnZlZDI7DQorCXUzMiBidWZmZXJfc2l6 ZTsJLyogY29udHJvbCBvciBPVVQgKi8NCisJdTE2IGlzb2NoX3Byb2dfZGVsYXk7CS8qIGluIHVz LiAqLw0KKwl1MTYgaXNvY2hfcmVzcF9kZWxheTsJLyogaW4gdXMuICovDQorfSBfX2FsaWduZWQo NCk7DQorDQorLyogZXBhY3RpdmF0ZXJlcSBleHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNiX2hk cl9lcGFjdGl2YXRlcmVxIHsNCisJdTMyIGVwX2hhbmRsZXMJOjUsDQorCSAgICByZXNlcnZlZAk6 Mjc7DQorCXVuaW9uIHsNCisJCXUxNgkJZXB2Ow0KKwkJc3RydWN0IG1hX3VzYl9lcF9oYW5kbGUg ZXBoOw0KKwl9IGhhbmRsZVswXTsNCit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiBlcGFjdGl2YXRl cmVzcCBleHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNiX2hkcl9lcGFjdGl2YXRlcmVzcCB7DQor CXUzMiBlcF9lcnJvcnMJOjUsDQorCSAgICByZXNlcnZlZAk6Mjc7DQorCXVuaW9uIHsNCisJCXUx NgkJCWVwdjsNCisJCXN0cnVjdCBtYV91c2JfZXBfaGFuZGxlIGVwaDsNCisJfSBoYW5kbGVbMF07 DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyogZXBpbmFjdGl2YXRlcmVxIGV4dHJhIGhkciAqLw0K K3N0cnVjdCBtYV91c2JfaGRyX2VwaW5hY3RpdmF0ZXJlcSB7DQorCXUzMiBlcF9oYW5kbGVzCTo1 LA0KKwkgICAgc3VzcGVuZAk6MSwNCisJICAgIHJlc2VydmVkCToyNjsNCisJdW5pb24gew0KKwkJ dTE2CQllcHY7DQorCQlzdHJ1Y3QgbWFfdXNiX2VwX2hhbmRsZSBlcGg7DQorCX0gaGFuZGxlWzBd Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGVwaW5hY3RpdmF0ZXJlc3AgZXh0cmEgaGRyICov DQorc3RydWN0IG1hX3VzYl9oZHJfZXBpbmFjdGl2YXRlcmVzcCB7DQorCXUzMiBlcF9lcnJvcnMJ OjUsDQorCSAgICByZXNlcnZlZAk6Mjc7DQorCXVuaW9uIHsNCisJCXUxNgkJZXB2Ow0KKwkJc3Ry dWN0IG1hX3VzYl9lcF9oYW5kbGUgZXBoOw0KKwl9IGhhbmRsZVswXTsNCit9IF9fYWxpZ25lZCg0 KTsNCisNCisvKiBlcHJlc2V0cmVxIGV4dHJhIGhkciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX2Vw cmVzZXRyZXEgew0KKwl1MzIgZXBfcmVzZXRfYmxvY2tzCTo1LA0KKwkgICAgcmVzZXJ2ZWQJCToy NzsNCit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiBlcHJlc2V0cmVxIHJlc2V0IGJsb2NrICovDQor c3RydWN0IG1hX3VzYl9lcHJlc2V0cmVxX2Jsb2NrIHsNCisJdW5pb24gew0KKwkJdTE2CQkJZXB2 Ow0KKwkJc3RydWN0IG1hX3VzYl9lcF9oYW5kbGUgZXBoOw0KKwl9IGhhbmRsZTsNCisJdTE2IHRz cAkJOjEsDQorCSAgICByZXNlcnZlZAk6MTU7DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyogZXBy ZXNldHJlc3AgZXh0cmEgaGRyICovDQorc3RydWN0IG1hX3VzYl9oZHJfZXByZXNldHJlc3Agew0K Kwl1MzIgZXBfZXJyb3JzCTo1LA0KKwkgICAgcmVzZXJ2ZWQJOjI3Ow0KKwl1bmlvbiB7DQorCQl1 MTYJCQllcHY7DQorCQlzdHJ1Y3QgbWFfdXNiX2VwX2hhbmRsZSBlcGg7DQorCX0gaGFuZGxlWzBd Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGNsZWFydHJhbnNmZXJzcmVxIGV4dHJhIGhkciAq Lw0KK3N0cnVjdCBtYV91c2JfaGRyX2NsZWFydHJhbnNmZXJzcmVxIHsNCisJdTMyIGluZm9fYmxv Y2tzCTo4LA0KKwkgICAgcmVzZXJ2ZWQJOjI0Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGNs ZWFydHJhbnNmZXJzcmVxIGluZm8gYmxvY2sgKi8NCitzdHJ1Y3QgbWFfdXNiX2NsZWFydHJhbnNm ZXJzcmVxX2Jsb2NrIHsNCisJdW5pb24gew0KKwkJdTE2CQkJZXB2Ow0KKwkJc3RydWN0IG1hX3Vz Yl9lcF9oYW5kbGUgZXBoOw0KKwl9IGhhbmRsZTsNCisJdTE2IHN0cmVhbV9pZDsgLyogc3Mgc3Ry ZWFtIGVwcyBvbmx5ICovDQorCXUzMiBzdGFydF9yZXFfaWQJOjgsDQorCSAgICByZXNlcnZlZAkJ OjI0Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGNsZWFydHJhbnNmZXJzcmVzcCBleHRyYSBo ZHIgKi8NCitzdHJ1Y3QgbWFfdXNiX2hkcl9jbGVhcnRyYW5zZmVyc3Jlc3Agew0KKwl1MzIgc3Rh dHVzX2Jsb2Nrcwk6OCwNCisJICAgIHJlc2VydmVkCQk6MjQ7DQorfSBfX2FsaWduZWQoNCk7DQor DQorLyogY2xlYXJ0cmFuc2ZlcnNyZXNwIHN0YXR1cyBibG9jayAqLw0KK3N0cnVjdCBtYV91c2Jf Y2xlYXJ0cmFuc2ZlcnNyZXNwX2Jsb2NrIHsNCisJdW5pb24gew0KKwkJdTE2CQkJZXB2Ow0KKwkJ c3RydWN0IG1hX3VzYl9lcF9oYW5kbGUgZXBoOw0KKwl9IGhhbmRsZTsNCisJdTE2IHN0cmVhbV9p ZDsJLyogc3Mgc3RyZWFtIGVwcyBvbmx5ICovDQorCXUzMiBjYW5jZWxfc3VjY2Vzcwk6MSwNCisJ ICAgIHBhcnRpYWxfZGVsaXZlcnkJOjEsDQorCSAgICByZXNlcnZlZAkJOjMwOw0KKwl1MzIgbGFz dF9yZXFfaWQJCTo4LA0KKwkgICAgZGVsaXZlcmVkX3NlcV9uCToyNDsJLyogT1VUIHcvcGFydGlh bF9kZWxpdmVyeSBvbmx5ICovDQorCXUzMiBkZWxpdmVyZWRfYnl0ZV9vZmZzZXQ7CS8qIE9VVCB3 L3BhcnRpYWxfZGVsaXZlcnkgb25seSAqLw0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGVwaGFu ZGxlZGVsZXRlcmVxIGV4dHJhIGhkciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX2VwaGFuZGxlZGVs ZXRlcmVxIHsNCisJdTMyIGVwX2hhbmRsZXMJOjUsDQorCSAgICByZXNlcnZlZAk6Mjc7DQorCXVu aW9uIHsNCisJCXUxNgkJCWVwdjsNCisJCXN0cnVjdCBtYV91c2JfZXBfaGFuZGxlIGVwaDsNCisJ fSBoYW5kbGVbMF07DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyogZXBoYW5kbGVkZWxldGVyZXNw IGV4dHJhIGhkciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX2VwaGFuZGxlZGVsZXRlcmVzcCB7DQor CXUzMiBlcF9lcnJvcnMJOjUsDQorCSAgICByZXNlcnZlZAk6Mjc7DQorCXVuaW9uIHsNCisJCXUx NgkJCWVwdjsNCisJCXN0cnVjdCBtYV91c2JfZXBfaGFuZGxlIGVwaDsNCisJfSBoYW5kbGVbMF07 DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyogbW9kaWZ5ZXAwcmVxIGV4dHJhIGhkciAqLw0KK3N0 cnVjdCBtYV91c2JfaGRyX21vZGlmeWVwMHJlcSB7DQorCXVuaW9uIHsNCisJCXUxNgkJCWVwdjsN CisJCXN0cnVjdCBtYV91c2JfZXBfaGFuZGxlIGVwaDsNCisJfSBoYW5kbGU7DQorCXUxNiBtYXhf cGFja2V0X3NpemU7DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyoNCisgKiBtb2RpZnllcDByZXNw IGV4dHJhIGhkcg0KKyAqIE9ubHkgaWYgcmVxIGVwMCBoYW5kbGUgYWRkciB3YXMgMCBhbmQgcmVx IGRldiBpcyBpbiB0aGUgYWRkcmVzc2VkIHN0YXRlDQorICogb3IgIGlmIHJlcSBlcDAgaGFuZGxl IGFkZHIgIT0gMCBhbmQgcmVxIGRldiBpcyBpbiBkZWZhdWx0IHN0YXRlDQorICovDQorc3RydWN0 IG1hX3VzYl9oZHJfbW9kaWZ5ZXAwcmVzcCB7DQorCXVuaW9uIHsNCisJCXUxNgkJCWVwdjsNCisJ CXN0cnVjdCBtYV91c2JfZXBfaGFuZGxlIGVwaDsNCisJfSBoYW5kbGU7DQorDQorCXUxNiByZXNl cnZlZDsNCit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiBzZXR1c2JkZXZhZGRycmVxIGV4dHJhIGhk ciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX3NldHVzYmRldmFkZHJyZXEgew0KKwl1MTYgcmVzcG9u c2VfdGltZW91dDsJLyogaW4gbXMuICovDQorCXUxNiByZXNlcnZlZDsNCit9IF9fYWxpZ25lZCg0 KTsNCisNCisvKiBzZXR1c2JkZXZhZGRycmVzcCBleHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNi X2hkcl9zZXR1c2JkZXZhZGRycmVzcCB7DQorCXUzMiBhZGRyCTo3LA0KKwkgICAgcmVzZXJ2ZWQJ OjI1Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIHVwZGF0ZWRldnJlcSBleHRyYSBoZHIgKi8N CitzdHJ1Y3QgbWFfdXNiX2hkcl91cGRhdGVkZXZyZXEgew0KKwl1MTYgbWF4X2V4aXRfbGF0ZW5j eTsJLyogaHVicyBvbmx5ICovDQorCXU4IGh1YgkJOjEsDQorCSAgIHBvcnRzCTo0LA0KKwkgICBt dHQJCToxLA0KKwkgICB0dHQJCToyOw0KKwl1OCBpbnRlZ3JhdGVkX2h1Yl9sYXRlbmN5CToxLA0K KwkgICByZXNlcnZlZAkJCTo3Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qDQorICogVVNCMi4w IGRldiBkZXNjLCBpc29sYXRpbmcgZnVydGhlciBjaGFuZ2VzIGluIHVzYi9jaDkuaA0KKyAqIFNl ZSBVU0IyLjAgOS42LjYsIFRhYmxlIDktMTMNCisgKi8NCitzdHJ1Y3QgdXNiX2Rldl9kZXNjIHsN CisJdTggYkxlbmd0aDsNCisJLyoNCisJICogVVNCMi4wIDkuNCwgVGFibGUgOS01ICgxKQ0KKwkg KiB1c2IvY2g5Lmg6IFVTQl9EVF9ERVZJQ0UNCisJICovDQorCXU4IGJEZXNjcmlwdG9yVHlwZTsN CisJX19sZTE2IGJjZFVTQjsNCisJdTggIGJEZXZpY2VDbGFzczsNCisJdTggIGJEZXZpY2VTdWJD bGFzczsNCisJdTggIGJEZXZpY2VQcm90b2NvbDsNCisJdTggIGJNYXhQYWNrZXRTaXplMDsNCisJ X19sZTE2IGlkVmVuZG9yOw0KKwlfX2xlMTYgaWRQcm9kdWN0Ow0KKwlfX2xlMTYgYmNkRGV2aWNl Ow0KKwl1OCAgaU1hbnVmYWN0dXJlcjsNCisJdTggIGlQcm9kdWN0Ow0KKwl1OCAgaVNlcmlhbE51 bWJlcjsNCisJdTggIGJOdW1Db25maWd1cmF0aW9uczsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVj dCBtYV91c2JfdXBkYXRlZGV2cmVxX2Rlc2Mgew0KKwlzdHJ1Y3QgdXNiX2Rldl9kZXNjIHVzYjIw Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIHJlbW90ZXdha2VyZXEgZXh0cmEgaGRyICovDQor c3RydWN0IG1hX3VzYl9oZHJfcmVtb3Rld2FrZXJlcSB7DQorCXUzMiByZXN1bWVkICA6MSwNCisJ CSByZXNlcnZlZCA6MzE7DQorfSBfX2FsaWduZWQoNCk7DQorDQorLyogc3luY2hyZXEvcmVzcCBl eHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNiX2hkcl9zeW5jaCB7DQorCXUzMiBtdGRfdmFsaWQJ CToxLAkvKiBNQS1VU0IxLjBiIDYuNS4xLjgsIFRhYmxlIDY2ICovDQorCSAgICByZXNwX3JlcXVp cmVkCToxLA0KKwkgICAgcmVzZXJ2ZWQJCTozMDsNCisJdW5pb24gew0KKwkJdTMyIHRpbWVzdGFt cDsJCS8qIE1BLVVTQjEuMGIgNi41LjEuMTEgKi8NCisJCXN0cnVjdCB7DQorCQkJdTMyIGRlbHRh CQk6MTMsDQorCQkJICAgIGJ1c19pbnRlcnZhbAk6MTk7DQorCQl9OwkJCS8qIE1BLVVTQjEuMGIg Ni42LjEsIFRhYmxlIDY5ICovDQorCX07DQorCXUzMiBtdGQ7CQkJLyogTUEtVVNCMS4wYiA2LjUu MS4xMiAqLw0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGNhbmNlbHRyYW5zZmVycmVxIGV4dHJh IGhkciAqLw0KK3N0cnVjdCBtYV91c2JfaGRyX2NhbmNlbHRyYW5zZmVycmVxIHsNCisJdW5pb24g ew0KKwkJdTE2CQkJZXB2Ow0KKwkJc3RydWN0IG1hX3VzYl9lcF9oYW5kbGUgZXBoOw0KKwl9IGhh bmRsZTsNCisJdTE2IHN0cmVhbV9pZDsNCisJdTMyIHJlcV9pZAkgIDo4LA0KKwkJIHJlc2VydmVk IDoyNDsNCit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiBjYW5jZWx0cmFuc2ZlcnJlc3AgZXh0cmEg aGRyICovDQorc3RydWN0IG1hX3VzYl9oZHJfY2FuY2VsdHJhbnNmZXJyZXNwIHsNCisJdW5pb24g ew0KKwkJdTE2CQkJZXB2Ow0KKwkJc3RydWN0IG1hX3VzYl9lcF9oYW5kbGUgZXBoOw0KKwl9IGhh bmRsZTsNCisJdTE2IHN0cmVhbV9pZDsNCisJdTMyIHJlcV9pZAkJOjgsDQorCSAgICBjYW5jZWxf c3RhdHVzCTozLA0KKwkgICAgcmVzZXJ2ZWQxCQk6MjE7DQorCXUzMiBkZWxpdmVyZWRfc2VxX24J OjI0LA0KKwkgICAgcmVzZXJ2ZWQyCQk6ODsNCisJdTMyIGRlbGl2ZXJlZF9ieXRlX29mZnNldDsN Cit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiB0cmFuc2ZlcnJlcS9yZXNwL2FjayBleHRyYSBoZHIg Ki8NCitzdHJ1Y3QgbWFfdXNiX2hkcl90cmFuc2ZlciB7DQorCXUzMiBzZXFfbgk6MjQsDQorCSAg ICByZXFfaWQJOjg7DQorCXVuaW9uIHsNCisJCXUzMiByZW1fc2l6ZV9jcmVkaXQ7DQorCQkvKiBJ U09DSCBhbGlhc2VkIGZpZWxkcyBhZGRlZCBmb3IgY29udmVuaWVuY2UuICovDQorCQlzdHJ1Y3Qg ew0KKwkJCXUzMiBwcmVzZW50YXRpb25fdGltZQk6MjAsDQorCQkJICAgIHNlZ21lbnRzCQk6MTI7 DQorCQl9Ow0KKwl9Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGlzb2NodHJhbnNmZXJyZXEv cmVzcCBleHRyYSBoZHIgKi8NCitzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaHRyYW5zZmVyIHsNCisJ dTMyIHNlcV9uCQk6MjQsDQorCSAgICByZXFfaWQJCTo4Ow0KKwl1MzIgcHJlc2VudGF0aW9uX3Rp bWUJOjIwLA0KKwkgICAgc2VnbWVudHMJCToxMjsNCit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiBp c29jaHRyYW5zZmVycmVxL3Jlc3Agb3B0aW9uYWwgaGRyICovDQorc3RydWN0IG1hX3VzYl9oZHJf aXNvY2h0cmFuc2Zlcl9vcHRpb25hbCB7DQorCXVuaW9uIHsNCisJCXUzMiB0aW1lc3RhbXA7CS8q IE1BLVVTQjEuMGIgNi41LjEuMTEgKi8NCisJCXN0cnVjdCB7DQorCQkJdTMyIGRlbHRhCQk6MTMs DQorCQkJICAgIGJ1c19pbnRlcnZhbAk6MTk7DQorCQl9OwkJLyogTUEtVVNCMS4wYiA2LjYuMSwg VGFibGUgNjkgKi8NCisJfTsNCisJdTMyIG10ZDsJCS8qIE1BLVVTQjEuMGIgNi41LjEuMTIgKi8N Cit9IF9fYWxpZ25lZCg0KTsNCisNCisvKiBpc29jaGRhdGFibG9jayBoZHJzICovDQorDQorc3Ry dWN0IG1hX3VzYl9oZHJfaXNvY2hkYXRhYmxvY2tfc2hvcnQgew0KKwl1MTYgYmxvY2tfbGVuZ3Ro Ow0KKwl1MTYgc2VnbWVudF9udW1iZXIJOjEyLA0KKwkgICAgc19mbGFncwkJOjQ7DQorfSBfX2Fs aWduZWQoNCk7DQorDQorc3RydWN0IG1hX3VzYl9oZHJfaXNvY2hkYXRhYmxvY2tfc3RkIHsNCisJ dTE2IGJsb2NrX2xlbmd0aDsNCisJdTE2IHNlZ21lbnRfbnVtYmVyCToxMiwNCisJICAgIHNfZmxh Z3MJCTo0Ow0KKwl1MTYgc2VnbWVudF9sZW5ndGg7DQorCXUxNiBmcmFnbWVudF9vZmZzZXQ7DQor fSBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0IG1hX3VzYl9oZHJfaXNvY2hkYXRhYmxvY2tfbG9u ZyB7DQorCXUxNiBibG9ja19sZW5ndGg7DQorCXUxNiBzZWdtZW50X251bWJlcgk6MTIsDQorCSAg ICBzX2ZsYWdzCQk6NDsNCisJdTMyIHNlZ21lbnRfbGVuZ3RoOw0KKwl1MzIgZnJhZ21lbnRfb2Zm c2V0Ow0KK30gX19hbGlnbmVkKDQpOw0KKw0KKy8qIGlzb2NocmVhZHNpemVibG9jayBoZHJzICov DQorDQorc3RydWN0IG1hX3VzYl9oZHJfaXNvY2hyZWFkc2l6ZWJsb2NrX3N0ZCB7DQorCXUzMiBz ZXJ2aWNlX2ludGVydmFscwkJOjEyLA0KKwkgICAgbWF4X3NlZ21lbnRfbGVuZ3RoCQk6MjA7DQor fSBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0IG1hX3VzYl9oZHJfaXNvY2hyZWFkc2l6ZWJsb2Nr X2xvbmcgew0KKwl1MzIgc2VydmljZV9pbnRlcnZhbHMJCToxMiwNCisJICAgIHJlc2VydmVkCQkJ OjIwOw0KKwl1MzIgbWF4X3NlZ21lbnRfbGVuZ3RoOw0KK30gX19hbGlnbmVkKDQpOw0KKw0KK3N0 YXRpYyBpbmxpbmUgaW50IF9fbWF1c2Jfc2V0X2ZpZWxkKGludCBtLCBpbnQgdikNCit7DQorCXJl dHVybiAoKH4oKG0pIC0gMSkgJiAobSkpICogKHYpKSAmIChtKTsNCit9DQorDQorc3RhdGljIGlu bGluZSBpbnQgX19tYXVzYl9nZXRfZmllbGQoaW50IG0sIGludCB2KQ0KK3sNCisJcmV0dXJuICgo dikgJiAobSkpIC8gKH4oKG0pIC0gMSkgJiAobSkpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGJv b2wgbWF1c2JfaXNfbWFuYWdlbWVudF9oZHJfdHlwZShpbnQgaGRyX3R5cGUpDQorew0KKwlyZXR1 cm4gTUFfVVNCX0dFVF9GSUVMRF8oSERSX1RZUEVfVFlQRSwgaGRyX3R5cGUpDQorCQkJPT0gTUFf VVNCX0hEUl9UWVBFX1RZUEVfTUFOQUdFTUVOVDsNCit9DQorDQorc3RhdGljIGlubGluZSBib29s IG1hdXNiX2lzX2RhdGFfaGRyX3R5cGUoaW50IGhkcl90eXBlKQ0KK3sNCisJcmV0dXJuIE1BX1VT Ql9HRVRfRklFTERfKEhEUl9UWVBFX1RZUEUsIGhkcl90eXBlKQ0KKwkJCT09IE1BX1VTQl9IRFJf VFlQRV9UWVBFX0RBVEE7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXVzYl9pc19tYW5h Z2VtZW50X3Jlc3BfaGRyX3R5cGUoaW50IGhkcl9yZXNwX3R5cGUpDQorew0KKwlyZXR1cm4gbWF1 c2JfaXNfbWFuYWdlbWVudF9oZHJfdHlwZShoZHJfcmVzcF90eXBlKSAmJg0KKwkJCShNQV9VU0Jf R0VUX0ZJRUxEXyhIRFJfVFlQRV9TVUJUWVBFLCBoZHJfcmVzcF90eXBlKSAmIDEpDQorCQkJIT0g MDsNCit9DQorDQorc3RhdGljIGlubGluZQ0KK3N0cnVjdCBtYV91c2JfaGRyX3RyYW5zZmVyICoN CittYXVzYl9nZXRfZGF0YV90cmFuc2Zlcl9oZHIoc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICpo ZHIpDQorew0KKwlyZXR1cm4gKHN0cnVjdCBtYV91c2JfaGRyX3RyYW5zZmVyICopc2hpZnRfcHRy KGhkciwgc2l6ZW9mKCpoZHIpKTsNCit9DQorDQorc3RhdGljIGlubGluZQ0KK3N0cnVjdCBtYV91 c2JfaGRyX2lzb2NodHJhbnNmZXIgKg0KK21hdXNiX2dldF9pc29jaHRyYW5zZmVyX2hkcihzdHJ1 Y3QgbWFfdXNiX2hkcl9jb21tb24gKmhkcikNCit7DQorCXJldHVybiAoc3RydWN0IG1hX3VzYl9o ZHJfaXNvY2h0cmFuc2ZlciAqKXNoaWZ0X3B0cihoZHIsIHNpemVvZigqaGRyKSk7DQorfQ0KKw0K K3N0YXRpYyBpbmxpbmUNCitzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaHRyYW5zZmVyX29wdGlvbmFs ICoNCittYXVzYl9oZHJfaXNvY2h0cmFuc2Zlcl9vcHRpb25hbF9oZHIoc3RydWN0IG1hX3VzYl9o ZHJfY29tbW9uICpoZHIpDQorew0KKwlyZXR1cm4gKHN0cnVjdCBtYV91c2JfaGRyX2lzb2NodHJh bnNmZXJfb3B0aW9uYWwgKikNCisJCQlzaGlmdF9wdHIoaGRyLCBzaXplb2Yoc3RydWN0IG1hX3Vz Yl9oZHJfY29tbW9uKSArDQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfaXNv Y2h0cmFuc2ZlcikpOw0KK30NCisNCisjZW5kaWYJLyogX19NQVVTQl9DT01NT05fTUFfVVNCX0hf XyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9jb21tb24v bWF1c2JfYWRkcmVzcy5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2NvbW1vbi9t YXVzYl9hZGRyZXNzLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAu LjAzOTk3YmUzMzM5MQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9z dC9pbmNsdWRlL2NvbW1vbi9tYXVzYl9hZGRyZXNzLmgNCkBAIC0wLDAgKzEsMzggQEANCisvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJpZ2h0IChj KSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBp cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4g ZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICovDQor I2lmbmRlZiBfX01BVVNCX0NPTU1PTl9NQVVTQl9BRERSRVNTX0hfXw0KKyNkZWZpbmUgX19NQVVT Ql9DT01NT05fTUFVU0JfQUREUkVTU19IX18NCisNCisjaWZkZWYgX19LRVJORUxfXw0KKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPg0KKyNlbHNlDQorI2luY2x1ZGUgPHR5cGVzLmg+DQorI2VuZGlm IC8qIF9fS0VSTkVMX18gKi8NCisNCisjZGVmaW5lIEFERFJfTEVOIDE2DQorDQorc3RydWN0IG1h dXNiX2RldmljZV9hZGRyZXNzIHsNCisJdTggbGlua190eXBlOw0KKwlzdHJ1Y3Qgew0KKwkJdW5p b24gew0KKwkJCWNoYXIJaXA0W0FERFJfTEVOXTsNCisJCQl1OAlpcDZbQUREUl9MRU5dOw0KKwkJ fSBhZGRyZXNzOw0KKwkJdTggbnVtYmVyX29mX3BvcnRzOw0KKwkJc3RydWN0IHsNCisJCQl1MTYg bWFuYWdlbWVudDsNCisJCQl1MTYgY29udHJvbDsNCisJCQl1MTYgYnVsazsNCisJCQl1MTYgaW50 ZXJydXB0Ow0KKwkJCXUxNiBpc29jaHJvbm91czsNCisJCX0gcG9ydDsNCisJfSBpcDsNCit9Ow0K Kw0KKyNlbmRpZiAvKiBfX01BVVNCX0NPTU1PTl9NQVVTQl9BRERSRVNTX0hfXyAqLw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9jb21tb24vbWF1c2JfZHJpdmVy X3N0YXR1cy5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2NvbW1vbi9tYXVzYl9k cml2ZXJfc3RhdHVzLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAu LmU0ZjQyZTZkZjA1OA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9z dC9pbmNsdWRlL2NvbW1vbi9tYXVzYl9kcml2ZXJfc3RhdHVzLmgNCkBAIC0wLDAgKzEsMjEgQEAN CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJp Z2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMg ZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhl IG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQor ICovDQorI2lmbmRlZiBfX01BVVNCX0NPTU1PTl9NQVVTQl9EUklWRVJfU1RBVFVTX0hfXw0KKyNk ZWZpbmUgX19NQVVTQl9DT01NT05fTUFVU0JfRFJJVkVSX1NUQVRVU19IX18NCisNCisjZGVmaW5l IE1BVVNCX0RSSVZFUl9CQURfUkVBRF9CVUZGRVJfU0laRSAgLTENCisjZGVmaW5lIE1BVVNCX0RS SVZFUl9SSU5HX0VWRU5UU19TVE9QUEVEICAgLTINCisjZGVmaW5lIE1BVVNCX0RSSVZFUl9TWVNU RU1fU1VTUEVOREVEICAgICAgLTMNCisjZGVmaW5lIE1BVVNCX0RSSVZFUl9DT1BZX1RPX0JVRkZF Ul9GQUlMRUQgLTQNCisNCisjZGVmaW5lIE1BVVNCX0RSSVZFUl9SRUFEX1RJTUVPVVQgMA0KKyNk ZWZpbmUgTUFVU0JfRFJJVkVSX1JFQURfRVJST1IgIC0xDQorI2RlZmluZSBNQVVTQl9EUklWRVJf V1JJVEVfRVJST1IgIC0yDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1 c2JfaG9zdC9pbmNsdWRlL2NvbW1vbi9tYXVzYl9ldmVudC5oIGIvZHJpdmVycy91c2IvbWF1c2Jf aG9zdC9pbmNsdWRlL2NvbW1vbi9tYXVzYl9ldmVudC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwLi4xYzExN2ZkMzdkMjANCi0tLSAvZGV2L251bGwNCisrKyBiL2Ry aXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9jb21tb24vbWF1c2JfZXZlbnQuaA0KQEAgLTAs MCArMSwyMjggQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8q DQorICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisg Kg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENP UFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3Jl IGRldGFpbHMuDQorICovDQorI2lmbmRlZiBfX01BVVNCX0NPTU1PTl9NQVVTQl9FVkVOVF9IX18N CisjZGVmaW5lIF9fTUFVU0JfQ09NTU9OX01BVVNCX0VWRU5UX0hfXw0KKw0KKyNpbmNsdWRlIDxj b21tb24vbWFfdXNiLmg+DQorDQorI2RlZmluZSBNQVVTQl9NQVhfTlVNX09GX01BX0RFVlMJCQkx NQ0KKyNkZWZpbmUgTUFVU0JfUklOR19CVUZGRVJfU0laRQkJCQkxMDI0DQorI2RlZmluZSBNQVVT Ql9NQVhfREFUQV9JTl9SRVFfU0laRQkJCTI4DQorDQorI2RlZmluZSBNQVVTQl9FVkVOVF9UWVBF X0RFVl9SRVNFVAkJCTF1DQorI2RlZmluZSBNQVVTQl9FVkVOVF9UWVBFX1VTQl9ERVZfSEFORExF CQkJMnUNCisjZGVmaW5lIE1BVVNCX0VWRU5UX1RZUEVfRVBfSEFORExFCQkJM3UNCisjZGVmaW5l IE1BVVNCX0VWRU5UX1RZUEVfRVBfSEFORExFX0FDVElWQVRFCQk0dQ0KKyNkZWZpbmUgTUFVU0Jf RVZFTlRfVFlQRV9FUF9IQU5ETEVfSU5BQ1RJVkFURQkJNXUNCisjZGVmaW5lIE1BVVNCX0VWRU5U X1RZUEVfRVBfSEFORExFX1JFU0VUCQk2dQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9FUF9I QU5ETEVfREVMRVRFCQk3dQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9NT0RJRllfRVAwCQkJ OHUNCisjZGVmaW5lIE1BVVNCX0VWRU5UX1RZUEVfU0VUX1VTQl9ERVZfQUREUkVTUwkJOXUNCisj ZGVmaW5lIE1BVVNCX0VWRU5UX1RZUEVfVVBEQVRFX0RFVgkJCTEwdQ0KKyNkZWZpbmUgTUFVU0Jf RVZFTlRfVFlQRV9VU0JfREVWX0RJU0NPTk5FQ1QJCTExdQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRf VFlQRV9QSU5HCQkJCTEydQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9ERVZfRElTQ09OTkVD VAkJCTEzdQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9VU0JfREVWX1JFU0VUCQkJMTR1DQor I2RlZmluZSBNQVVTQl9FVkVOVF9UWVBFX0NBTkNFTF9UUkFOU0ZFUgkJMTV1DQorDQorI2RlZmlu ZSBNQVVTQl9FVkVOVF9UWVBFX1BPUlRfQ0hBTkdFRAkJCTgwdQ0KKyNkZWZpbmUgTUFVU0JfRVZF TlRfVFlQRV9TRU5EX01HTVRfTVNHCQkJODF1DQorI2RlZmluZSBNQVVTQl9FVkVOVF9UWVBFX1NF TkRfREFUQV9NU0cJCQk4MnUNCisjZGVmaW5lIE1BVVNCX0VWRU5UX1RZUEVfUkVDRUlWRURfTUdN VF9NU0cJCTgzdQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9SRUNFSVZFRF9EQVRBX01TRwkJ ODR1DQorI2RlZmluZSBNQVVTQl9FVkVOVF9UWVBFX1VSQl9DT01QTEVURQkJCTg1dQ0KKyNkZWZp bmUgTUFVU0JfRVZFTlRfVFlQRV9TRU5EX0FDSwkJCTg2dQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRf VFlQRV9JVEVSQVRPUl9SRVNFVAkJCTg3dQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9JVEVS QVRPUl9TRUVLCQkJODh1DQorI2RlZmluZSBNQVVTQl9FVkVOVF9UWVBFX0RFTEVURV9EQVRBX1RS QU5TRkVSCQk4OXUNCisjZGVmaW5lIE1BVVNCX0VWRU5UX1RZUEVfREVMRVRFX01BX0RFVgkJCTkw dQ0KKyNkZWZpbmUgTUFVU0JfRVZFTlRfVFlQRV9VU0VSX0ZJTklTSEVECQkJOTF1DQorI2RlZmlu ZSBNQVVTQl9FVkVOVF9UWVBFX1JFTEVBU0VfRVZFTlRfUkVTT1VSQ0VTCTkydQ0KKyNkZWZpbmUg TUFVU0JfRVZFTlRfVFlQRV9ORVRXT1JLX0RJU0NPTk5FQ1RFRAkJOTN1DQorI2RlZmluZSBNQVVT Ql9FVkVOVF9UWVBFX01HTVRfUkVRVUVTVF9USU1FRF9PVVQJCTk0dQ0KKw0KKyNkZWZpbmUgTUFV U0JfRVZFTlRfVFlQRV9OT05FCQkJCTI1NXUNCisNCisjZGVmaW5lIE1BVVNCX0RBVEFfTVNHX0RJ UkVDVElPTl9PVVQJCQkwDQorI2RlZmluZSBNQVVTQl9EQVRBX01TR19ESVJFQ1RJT05fSU4JCQkx DQorI2RlZmluZSBNQVVTQl9EQVRBX01TR19DT05UUk9MIE1BVVNCX0RBVEFfTVNHX0RJUkVDVElP Tl9PVVQNCisNCitzdHJ1Y3QgbWF1c2JfZGV2aGFuZGxlIHsNCisJdTY0IGV2ZW50X2lkOw0KKwl1 MzIgcm91dGVfc3RyaW5nOw0KKwl1MTYgaHViX2Rldl9oYW5kbGU7DQorCXUxNiBwYXJlbnRfaHNf aHViX2Rldl9oYW5kbGU7DQorCXUxNiBwYXJlbnRfaHNfaHViX3BvcnQ7DQorCXUxNiBtdHQ7DQor CS8qIGRldl9oYW5kbGUgYXNzaWduZWQgaW4gdXNlciAqLw0KKwl1MTYgZGV2X2hhbmRsZTsNCisJ dTggIGRldmljZV9zcGVlZDsNCisJdTggIGxzZTsNCit9Ow0KKw0KK3N0cnVjdCBtYXVzYl9lcGhh bmRsZSB7DQorCXU2NCBldmVudF9pZDsNCisJdTE2IGRldmljZV9oYW5kbGU7DQorCXUxNiBkZXNj cmlwdG9yX3NpemU7DQorCS8qIGVwX2hhbmRsZSBhc3NpZ25lZCBpbiB1c2VyICovDQorCXUxNiBl cF9oYW5kbGU7DQorCWNoYXIJIGRlc2NyaXB0b3Jbc2l6ZW9mKHN0cnVjdCBtYV91c2JfZXBoYW5k bGVyZXFfZGVzY19zcyldOw0KK307DQorDQorc3RydWN0IG1hdXNiX2VwYWN0aXZhdGUgew0KKwl1 NjQgZXZlbnRfaWQ7DQorCXUxNiBkZXZpY2VfaGFuZGxlOw0KKwl1MTYgZXBfaGFuZGxlOw0KK307 DQorDQorc3RydWN0IG1hdXNiX2VwaW5hY3RpdmF0ZSB7DQorCXU2NCBldmVudF9pZDsNCisJdTE2 IGRldmljZV9oYW5kbGU7DQorCXUxNiBlcF9oYW5kbGU7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2Jf ZXByZXNldCB7DQorCXU2NCBldmVudF9pZDsNCisJdTE2IGRldmljZV9oYW5kbGU7DQorCXUxNiBl cF9oYW5kbGU7DQorCXU4ICB0c3A7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2JfZXBkZWxldGUgew0K Kwl1NjQgZXZlbnRfaWQ7DQorCXUxNiBkZXZpY2VfaGFuZGxlOw0KKwl1MTYgZXBfaGFuZGxlOw0K K307DQorDQorc3RydWN0IG1hdXNiX3VwZGF0ZWRldiB7DQorCXU2NCBldmVudF9pZDsNCisJdTE2 IGRldmljZV9oYW5kbGU7DQorCXUxNiBtYXhfZXhpdF9sYXRlbmN5Ow0KKwlzdHJ1Y3QgbWFfdXNi X3VwZGF0ZWRldnJlcV9kZXNjIHVwZGF0ZV9kZXNjcmlwdG9yOw0KKwl1OCAgaHViOw0KKwl1OCAg bnVtYmVyX29mX3BvcnRzOw0KKwl1OCAgbXR0Ow0KKwl1OCAgdHR0Ow0KKwl1OCAgaW50ZWdyYXRl ZF9odWJfbGF0ZW5jeTsNCit9Ow0KKw0KK3N0cnVjdCBtYXVzYl91c2JkZXZyZXNldCB7DQorCXU2 NCBldmVudF9pZDsNCisJdTE2IGRldmljZV9oYW5kbGU7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2Jf bW9kaWZ5ZXAwIHsNCisJdTY0IGV2ZW50X2lkOw0KKwl1MTYgZGV2aWNlX2hhbmRsZTsNCisJdTE2 IGVwX2hhbmRsZTsNCisJX19sZTE2IG1heF9wYWNrZXRfc2l6ZTsNCit9Ow0KKw0KK3N0cnVjdCBt YXVzYl9zZXR1c2JkZXZhZGRyZXNzIHsNCisJdTY0IGV2ZW50X2lkOw0KKwl1MTYgZGV2aWNlX2hh bmRsZTsNCisJdTE2IHJlc3BvbnNlX3RpbWVvdXQ7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2JfdXNi ZGV2ZGlzY29ubmVjdCB7DQorCXUxNiBkZXZpY2VfaGFuZGxlOw0KK307DQorDQorc3RydWN0IG1h dXNiX2NhbmNlbHRyYW5zZmVyIHsNCisJdTY0IHVyYjsNCisJdTE2IGRldmljZV9oYW5kbGU7DQor CXUxNiBlcF9oYW5kbGU7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2JfbWdtdF9oZHIgew0KKwlfX2Fs aWduZWQoNCkgY2hhciBoZHJbTUFVU0JfTUFYX01HTVRfU0laRV07DQorfTsNCisNCitzdHJ1Y3Qg bWF1c2JfbWdtdF9yZXFfdGltZWRvdXQgew0KKwl1NjQgZXZlbnRfaWQ7DQorfTsNCisNCitzdHJ1 Y3QgbWF1c2JfZGVsZXRlX21hX2RldiB7DQorCXU2NCBldmVudF9pZDsNCisJdTE2IGRldmljZV9p ZDsNCit9Ow0KKw0KKy8qIFRPRE8gc3BsaXQgbWdtdF9ldmVudCB0byBnZW5lcmljIHNlbmQgbWdt dCByZXEgYW5kIHNwZWNpZmljIHJlcXVlc3RzICovDQorc3RydWN0IG1hdXNiX21nbXRfZXZlbnQg ew0KKwl1bmlvbiB7DQorCQlzdHJ1Y3QgbWF1c2JfZGV2aGFuZGxlCQlkZXZfaGFuZGxlOw0KKwkJ c3RydWN0IG1hdXNiX2VwaGFuZGxlCQllcF9oYW5kbGU7DQorCQlzdHJ1Y3QgbWF1c2JfZXBhY3Rp dmF0ZQkJZXBfYWN0aXZhdGU7DQorCQlzdHJ1Y3QgbWF1c2JfZXBpbmFjdGl2YXRlCWVwX2luYWN0 aXZhdGU7DQorCQlzdHJ1Y3QgbWF1c2JfZXByZXNldAkJZXBfcmVzZXQ7DQorCQlzdHJ1Y3QgbWF1 c2JfZXBkZWxldGUJCWVwX2RlbGV0ZTsNCisJCXN0cnVjdCBtYXVzYl9tb2RpZnllcDAJCW1vZGlm eV9lcDA7DQorCQlzdHJ1Y3QgbWF1c2Jfc2V0dXNiZGV2YWRkcmVzcwlzZXRfdXNiX2Rldl9hZGRy ZXNzOw0KKwkJc3RydWN0IG1hdXNiX3VwZGF0ZWRldgkJdXBkYXRlX2RldjsNCisJCXN0cnVjdCBt YXVzYl91c2JkZXZyZXNldAl1c2JfZGV2X3Jlc2V0Ow0KKwkJc3RydWN0IG1hdXNiX3VzYmRldmRp c2Nvbm5lY3QJdXNiX2Rldl9kaXNjb25uZWN0Ow0KKwkJc3RydWN0IG1hdXNiX2NhbmNlbHRyYW5z ZmVyCWNhbmNlbF90cmFuc2ZlcjsNCisJCXN0cnVjdCBtYXVzYl9tZ210X2hkcgkJbWdtdF9oZHI7 DQorCQlzdHJ1Y3QgbWF1c2JfbWdtdF9yZXFfdGltZWRvdXQJbWdtdF9yZXFfdGltZWRvdXQ7DQor CQlzdHJ1Y3QgbWF1c2JfZGVsZXRlX21hX2RldglkZWxldGVfbWFfZGV2Ow0KKwl9Ow0KK307DQor DQorc3RydWN0IG1hdXNiX2RhdGFfZXZlbnQgew0KKwl1NjQgdXJiOw0KKwl1NjQgcmVjdl9idWY7 DQorCXUzMiBpdGVyYXRvcl9zZWVrX2RlbHRhOw0KKwl1MzIgdHJhbnNmZXJfc2l6ZTsNCisJdTMy IHJlbV90cmFuc2Zlcl9zaXplOw0KKwl1MzIgdHJhbnNmZXJfZmxhZ3M7DQorCXUzMiBpc29jaF9z ZWdfbnVtOw0KKwl1MzIgcmVxX2lkOw0KKwl1MzIgcGF5bG9hZF9zaXplOw0KKwlzMzIgc3RhdHVz Ow0KKw0KKwlfX2FsaWduZWQoNCkgY2hhciBoZHJbTUFVU0JfVFJBTlNGRVJfSERSX1NJWkVdOw0K KwlfX2FsaWduZWQoNCkgY2hhciBoZHJfYWNrW01BVVNCX1RSQU5TRkVSX0hEUl9TSVpFXTsNCisN CisJdTE2IGRldmljZV9pZDsNCisJdTE2IGVwX2hhbmRsZTsNCisJdTE2IHBhY2tldF9zaXplOw0K Kwl1OCAgc2V0dXBfcGFja2V0Ow0KKwl1OCAgZGlyZWN0aW9uOw0KKwl1OCAgdHJhbnNmZXJfdHlw ZTsNCisJdTggIGZpcnN0X2NvbnRyb2xfcGFja2V0Ow0KKwl1OCAgdHJhbnNmZXJfZW90Ow0KKwl1 OCAgbWF1c2JfYWRkcmVzczsNCisJdTggIG1hdXNiX3NzaWQ7DQorfTsNCisNCitzdHJ1Y3QgbWF1 c2JfcG9ydF9jaGFuZ2VkX2V2ZW50IHsNCisJdTggcG9ydDsNCisJdTggZGV2X3R5cGU7DQorCXU4 IGRldl9zcGVlZDsNCisJdTggbHNlOw0KK307DQorDQorc3RydWN0IG1hdXNiX2V2ZW50IHsNCisJ dW5pb24gew0KKwkJc3RydWN0IG1hdXNiX21nbXRfZXZlbnQJCW1nbXQ7DQorCQlzdHJ1Y3QgbWF1 c2JfZGF0YV9ldmVudAkJZGF0YTsNCisJCXN0cnVjdCBtYXVzYl9wb3J0X2NoYW5nZWRfZXZlbnQg cG9ydF9jaGFuZ2VkOw0KKwl9Ow0KKwlzMzIgc3RhdHVzOw0KKwl1OCB0eXBlOw0KKwl1OCBtYWRl dl9hZGRyOw0KK307DQorDQorc3RydWN0IG1hdXNiX2V2ZW50c19ub3RpZmljYXRpb24gew0KKwl1 MTYgbnVtX29mX2V2ZW50czsNCisJdTE2IG51bV9vZl9jb21wbGV0ZWRfZXZlbnRzOw0KKwl1OCAg bWFkZXZfYWRkcjsNCit9Ow0KKw0KKyNlbmRpZiAvKiBfX01BVVNCX0NPTU1PTl9NQVVTQl9FVkVO VF9IX18gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaGNk L2h1Yi5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hjZC9odWIuaA0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uY2E4MzQ2NjY1MjVhDQotLS0gL2Rl di9udWxsDQorKysgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaGNkL2h1Yi5oDQpA QCAtMCwwICsxLDExNSBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov DQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3BsYXlMaW5rIChVSykgTHRk Lg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZp bGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0KKyAq IG1vcmUgZGV0YWlscy4NCisgKi8NCisjaWZuZGVmIF9fTUFVU0JfSENEX0hVQl9IX18NCisjZGVm aW5lIF9fTUFVU0JfSENEX0hVQl9IX18NCisNCisjaW5jbHVkZSA8bGludXgvdXNiLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3VzYi9oY2QuaD4NCisNCisjaW5jbHVkZSAidXRpbHMvbWF1c2JfZGF0YV9p dGVyYXRvci5oIg0KKw0KKyNkZWZpbmUgUE9SVF9DX01BU0sgXA0KKwkJKChVU0JfUE9SVF9TVEFU X0NfQ09OTkVDVElPTiBcDQorCQl8IFVTQl9QT1JUX1NUQVRfQ19FTkFCTEUgXA0KKwkJfCBVU0Jf UE9SVF9TVEFUX0NfU1VTUEVORCBcDQorCQl8IFVTQl9QT1JUX1NUQVRfQ19PVkVSQ1VSUkVOVCBc DQorCQl8IFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgPDwgMTYpDQorDQorI2RlZmluZSBNQVVTQl9Q T1JUXzIwX1NUQVRVU19DT05ORUNUICAgICAgICAgMHgwMDAxDQorI2RlZmluZSBNQVVTQl9QT1JU XzIwX1NUQVRVU19FTkFCTEUgICAgICAgICAgMHgwMDAyDQorI2RlZmluZSBNQVVTQl9QT1JUXzIw X1NUQVRVU19TVVNQRU5EICAgICAgICAgMHgwMDA0DQorI2RlZmluZSBNQVVTQl9QT1JUXzIwX1NU QVRVU19PVkVSX0NVUlJFTlQgICAgMHgwMDA4DQorI2RlZmluZSBNQVVTQl9QT1JUXzIwX1NUQVRV U19SRVNFVCAgICAgICAgICAgMHgwMDEwDQorI2RlZmluZSBNQVVTQl9QT1JUXzIwX1NUQVRVU19Q T1dFUiAgICAgICAgICAgMHgwMTAwDQorI2RlZmluZSBNQVVTQl9QT1JUXzIwX1NUQVRVU19MT1df U1BFRUQgICAgICAgMHgwMjAwDQorI2RlZmluZSBNQVVTQl9QT1JUXzIwX1NUQVRVU19ISUdIX1NQ RUVEICAgICAgMHgwNDAwDQorDQorI2RlZmluZSBNQVVTQl9DSEFOR0VfUE9SVF8yMF9TVEFUVVNf Q09OTkVDVCAgMHgwMTAwMDANCisjZGVmaW5lIE1BVVNCX0NIQU5HRV9QT1JUXzIwX1NUQVRVU19S RVNFVCAgICAweDEwMDAwMA0KKw0KKy8qIFVTQiAzLjIgc3BlY2lmaWNhdGlvbiBjaGFwdGVyIDEw LjE2LjIuNi4xIHRhYmxlIDEwLTEzIHBhZ2UgNDQwICovDQorI2RlZmluZSBNQVVTQl9QT1JUXzMw X1NUQVRVU19DT05ORUNUICAgICAgICAgICAgICAweDAwMDENCisjZGVmaW5lIE1BVVNCX1BPUlRf MzBfU1RBVFVTX0VOQUJMRSAgICAgICAgICAgICAgIDB4MDAwMg0KKyNkZWZpbmUgTUFVU0JfUE9S VF8zMF9TVEFUVVNfT1ZFUl9DVVJSRU5UICAgICAgICAgMHgwMDA4DQorI2RlZmluZSBNQVVTQl9Q T1JUXzMwX1NUQVRVU19SRVNFVCAgICAgICAgICAgICAgICAweDAwMTANCisjZGVmaW5lIE1BVVNC X1BPUlRfMzBfTElOS19TVEFURV9VMCAgICAgICAgICAgICAgIDB4MDAwMA0KKyNkZWZpbmUgTUFV U0JfUE9SVF8zMF9MSU5LX1NUQVRFX1UxICAgICAgICAgICAgICAgMHgwMDIwDQorI2RlZmluZSBN QVVTQl9QT1JUXzMwX0xJTktfU1RBVEVfVTIgICAgICAgICAgICAgICAweDAwNDANCisjZGVmaW5l IE1BVVNCX1BPUlRfMzBfTElOS19TVEFURV9VMyAgICAgICAgICAgICAgIDB4MDA2MA0KKyNkZWZp bmUgTUFVU0JfUE9SVF8zMF9MSU5LX1NUQVRFX0RJU0FCTEVEICAgICAgICAgMHgwMDgwDQorI2Rl ZmluZSBNQVVTQl9QT1JUXzMwX0xJTktfU1RBVEVfUlhfREVURUNUICAgICAgICAweDAwQTANCisj ZGVmaW5lIE1BVVNCX1BPUlRfMzBfTElOS19TVEFURV9JTkFDVElWRSAgICAgICAgIDB4MDBDMA0K KyNkZWZpbmUgTUFVU0JfUE9SVF8zMF9MSU5LX1NUQVRFX1BPTExJTkcgICAgICAgICAgMHgwMEUw DQorI2RlZmluZSBNQVVTQl9QT1JUXzMwX0xJTktfU1RBVEVfUkVDT1ZFUlkgICAgICAgICAweDAx MDANCisjZGVmaW5lIE1BVVNCX1BPUlRfMzBfTElOS19TVEFURV9IT1RfUkVTRVQgICAgICAgIDB4 MDEyMA0KKyNkZWZpbmUgTUFVU0JfUE9SVF8zMF9MSU5LX1NUQVRFX0NPTVBMSUFOQ0VfTU9ERSAg MHgwMTQwDQorI2RlZmluZSBNQVVTQl9QT1JUXzMwX0xJTktfU1RBVEVfTE9PUEJBQ0sgICAgICAg ICAweDAxNjANCisjZGVmaW5lIE1BVVNCX1BPUlRfMzBfU1RBVFVTX1BPV0VSICAgICAgICAgICAg ICAgIDB4MDIwMA0KKyNkZWZpbmUgTUFVU0JfUE9SVF8zMF9TVEFUVVNfU1VQRVJfU1BFRUQgICAg ICAgICAgMHgwNDAwDQorI2RlZmluZSBNQVVTQl9QT1JUXzMwX0NMRUFSX0xJTktfU1RBVEUgICAg ICAgICAgICAweEZFMUYNCisNCisvKiBVU0IgMy4yIHNwZWNpZmljYXRpb24gY2hhcHRlciAxMC4x Ni4yLjYuMiB0YWJsZSAxMC0xNCBwYWdlIDQ0MyAqLw0KKyNkZWZpbmUgTUFVU0JfQ0hBTkdFX1BP UlRfMzBfU1RBVFVTX0NPTk5FQ1QgICAgICAgICAgICAgIDB4MDEwMDAwDQorI2RlZmluZSBNQVVT Ql9DSEFOR0VfUE9SVF8zMF9TVEFUVVNfT1ZFUl9DVVJSRU5UICAgICAgICAgMHgwODAwMDANCisj ZGVmaW5lIE1BVVNCX0NIQU5HRV9QT1JUXzMwX1NUQVRVU19SRVNFVCAgICAgICAgICAgICAgICAw eDEwMDAwMA0KKyNkZWZpbmUgTUFVU0JfQ0hBTkdFX1BPUlRfMzBfQkhfU1RBVFVTX1JFU0VUICAg ICAgICAgICAgIDB4MjAwMDAwDQorI2RlZmluZSBNQVVTQl9DSEFOR0VfUE9SVF8zMF9MSU5LX1NU QVRFICAgICAgICAgICAgICAgICAgMHg0MDAwMDANCisjZGVmaW5lIE1BVVNCX0NIQU5HRV9QT1JU XzMwX0NPTkZJR19FUlJPUiAgICAgICAgICAgICAgICAweDgwMDAwMA0KKw0KKy8qIFVTQiAzLjIg c3BlY2lmaWNhdGlvbiBjaGFwdGVyIDEwLjE2LjIuNCB0YWJsZSAxMC0xMCBwYWdlIDQzOCAqLw0K KyNkZWZpbmUgTUFVU0JfSFVCXzMwX1BPV0VSX0dPT0QgICAgICAgICAgICAgIDB4MDANCisjZGVm aW5lIE1BVVNCX0hVQl8zMF9MT0NBTF9QT1dFUl9TT1VSQ0VfTE9TVCAweDAxDQorI2RlZmluZSBN QVVTQl9IVUJfMzBfT1ZFUl9DVVJSRU5UICAgICAgICAgICAgMHgwMg0KKw0KKy8qIFVTQiAzLjIg c3BlY2lmaWNhdGlvbiBjaGFwdGVyIDEwLjE2LjIuNCB0YWJsZSAxMC0xMSBwYWdlIDQzOCAqLw0K KyNkZWZpbmUgTUFVU0JfQ0hBTkdFX0hVQl8zMF9MT0NBTF9QT1dFUl9TT1VSQ0VfTE9TVCAgMHgx MDAwMA0KKyNkZWZpbmUgTUFVU0JfQ0hBTkdFX0hVQl8zMF9PVkVSX0NVUlJFTlQgICAgICAgICAg ICAgMHgyMDAwMA0KKw0KKyNkZWZpbmUgREVWX0hBTkRMRV9OT1RfQVNTSUdORUQJLTENCisNCitz dHJ1Y3QgbWF1c2JfdXNiX2RldmljZV9jdHggew0KKwlzMzIJCWRldl9oYW5kbGU7DQorCWJvb2wJ CWFkZHJlc3NlZDsNCisJdm9pZAkJKmRldl9hZGRyOw0KKwlzdHJ1Y3QgcmJfbm9kZQlyYl9ub2Rl Ow0KK307DQorDQorc3RydWN0IG1hdXNiX2VuZHBvaW50X2N0eCB7DQorCXUxNgllcF9oYW5kbGU7 DQorCXUxNglkZXZfaGFuZGxlOw0KKwl2b2lkCSptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl91c2Jf ZGV2aWNlX2N0eCAqdXNiX2RldmljZV9jdHg7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2JfdXJiX2N0 eCB7DQorCXN0cnVjdCB1cmIJCSp1cmI7DQorCXN0cnVjdCBtYXVzYl9kYXRhX2l0ZXIJaXRlcmF0 b3I7DQorCXN0cnVjdCByYl9ub2RlCQlyYl9ub2RlOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29y azsNCit9Ow0KKw0KK2ludCBtYXVzYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpOw0KK3ZvaWQg bWF1c2JfaGNkX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHUzMiBhY3R1YWxfbGVuZ3Ro LCBpbnQgc3RhdHVzKTsNCisNCisjaWZkZWYgSVNPQ0hfQ0FMTEJBQ0tTDQoraW50IG1hdXNiX3Nl Y19ldmVudF9yaW5nX3NldHVwKHN0cnVjdCB1c2JfaGNkICpoY2QsIHVuc2lnbmVkIGludCBpbnRy X251bSk7DQoraW50IG1hdXNiX3NlY19ldmVudF9yaW5nX2NsZWFudXAoc3RydWN0IHVzYl9oY2Qg KmhjZCwgdW5zaWduZWQgaW50IGludHJfbnVtKTsNCitwaHlzX2FkZHJfdCBtYXVzYl9nZXRfc2Vj X2V2ZW50X3JpbmdfcGh5c19hZGRyKHN0cnVjdCB1c2JfaGNkICpoY2QsDQorCQkJCQkgICAgICAg dW5zaWduZWQgaW50IGludHJfbnVtLA0KKwkJCQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYSk7DQor cGh5c19hZGRyX3QgbWF1c2JfZ2V0X3hmZXJfcmluZ19waHlzX2FkZHIoc3RydWN0IHVzYl9oY2Qg KmhjZCwNCisJCQkJCSAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsDQorCQkJCQkgIHN0cnVjdCB1 c2JfaG9zdF9lbmRwb2ludCAqZXAsDQorCQkJCQkgIGRtYV9hZGRyX3QgKmRtYSk7DQoraW50IG1h dXNiX2dldF9jb3JlX2lkKHN0cnVjdCB1c2JfaGNkICpoY2QpOw0KKyNlbmRpZiAvKiBJU09DSF9D QUxMQkFDS1MgKi8NCisNCit2b2lkIG1hdXNiX2NsZWFyX2hjZF9tYWRldih1MTYgcG9ydF9udW1i ZXIpOw0KKw0KKyNlbmRpZiAvKiBfX01BVVNCX0hDRF9IVUJfSF9fICovDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hjZC92aGNkLmggYi9kcml2ZXJzL3VzYi9t YXVzYl9ob3N0L2luY2x1ZGUvaGNkL3ZoY2QuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uNjQzNGU3YzYwYTE4DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaGNkL3ZoY2QuaA0KQEAgLTAsMCArMSw3OSBAQA0KKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoNCisgKiBDb3B5cmlnaHQg KGMpIDIwMTkgLSAyMDIwIERpc3BsYXlMaW5rIChVSykgTHRkLg0KKyAqDQorICogVGhpcyBmaWxl IGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMNCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFp biBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0KKyAqIG1vcmUgZGV0YWlscy4NCisgKi8N CisjaWZuZGVmIF9fTUFVU0JfSENEX1ZIQ0RfSF9fDQorI2RlZmluZSBfX01BVVNCX0hDRF9WSENE X0hfXw0KKw0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvZnMu aD4NCisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4NCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5o Pg0KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0K KyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQorDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX3Jp bmdfYnVmZmVyLmgiDQorDQorI2RlZmluZSBERVZJQ0VfTkFNRSAibWF1c2JfaG9zdF9oY2RfZGV2 Ig0KKyNkZWZpbmUgQ0xBU1NfTkFNRSAibWF1c2IiDQorDQorI2RlZmluZSBOVU1CRVJfT0ZfUE9S VFMJCTE1DQorDQorI2RlZmluZSBNQVhfVVNCX0RFVklDRV9ERVBUSAk2DQorDQorI2RlZmluZSBS RVNQT05TRV9USU1FT1VUCTUwMDANCisNCitlbnVtIG1hdXNiX2RldmljZV90eXBlIHsNCisJVVNC REVWSUNFID0gMCwNCisJVVNCMjBIVUIgID0gMSwNCisJVVNCMzBIVUIgID0gMg0KK307DQorDQor ZW51bSBtYXVzYl9kZXZpY2Vfc3BlZWQgew0KKwlMT1dfU1BFRUQJID0gMCwNCisJRlVMTF9TUEVF RAkgPSAxLA0KKwlISUdIX1NQRUVECSA9IDIsDQorCVNVUEVSX1NQRUVECSA9IDMsDQorCVNVUEVS X1NQRUVEX1BMVVMgPSA0DQorfTsNCisNCitzdHJ1Y3QgbWF1c2JfaGNkIHsNCisJc3BpbmxvY2tf dAlsb2NrOwkvKiBQcm90ZWN0IEhDRCBkdXJpbmcgVVJCIHByb2Nlc3NpbmcgKi8NCisJc3RydWN0 IGRldmljZQkqcGRldjsNCisJdTE2CQljb25uZWN0ZWRfcG9ydHM7DQorDQorCXN0cnVjdCByYl9y b290CW1hdXNiX3VyYnM7DQorCXN0cnVjdCBodWJfY3R4CSpoY2Rfc3NfY3R4Ow0KKwlzdHJ1Y3Qg aHViX2N0eAkqaGNkX2hzX2N0eDsNCisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBvd2VyX3N0YXRl X2xpc3RlbmVyOw0KK307DQorDQorc3RydWN0IG1hdXNiX2RldiB7DQorCXUzMgkJcG9ydF9zdGF0 dXM7DQorCXN0cnVjdCByYl9yb290CXVzYl9kZXZpY2VzOw0KKwl1OAkJZGV2X3NwZWVkOw0KKwl2 b2lkCQkqbWFfZGV2Ow0KK307DQorDQorc3RydWN0IGh1Yl9jdHggew0KKwlzdHJ1Y3QgbWF1c2Jf aGNkICptaGNkOw0KKwlzdHJ1Y3QgdXNiX2hjZAkgKmhjZDsNCisJc3RydWN0IG1hdXNiX2RldiBt YV9kZXZzW05VTUJFUl9PRl9QT1JUU107DQorfTsNCisNCitpbnQgbWF1c2JfaW5pdF9oY2Qodm9p ZCk7DQordm9pZCBtYXVzYl9kZWluaXRfaGNkKHZvaWQpOw0KKw0KK3ZvaWQgbWF1c2JfcG9ydF9o YXNfY2hhbmdlZChjb25zdCBlbnVtIG1hdXNiX2RldmljZV90eXBlIGRldmljZV90eXBlLA0KKwkJ CSAgICBjb25zdCBlbnVtIG1hdXNiX2RldmljZV9zcGVlZCBkZXZpY2Vfc3BlZWQsDQorCQkJICAg IHZvaWQgKm1hX2Rldik7DQordm9pZCBtYXVzYl9oY2RfZGlzY29ubmVjdChjb25zdCB1MTYgcG9y dF9udW1iZXIsDQorCQkJICBjb25zdCBlbnVtIG1hdXNiX2RldmljZV90eXBlIGRldmljZV90eXBl LA0KKwkJCSAgY29uc3QgZW51bSBtYXVzYl9kZXZpY2Vfc3BlZWQgZGV2aWNlX3NwZWVkKTsNCisN CisjZW5kaWYgLyogX19NQVVTQl9IQ0RfVkhDRF9IX18gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9kYXRhX2NvbW1vbi5oIGIvZHJpdmVycy91c2Iv bWF1c2JfaG9zdC9pbmNsdWRlL2hwYWwvZGF0YV9jb21tb24uaA0KbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uODgwM2I3Yjc3ODJiDQotLS0gL2Rldi9udWxsDQorKysg Yi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9kYXRhX2NvbW1vbi5oDQpAQCAt MCwwICsxLDY2IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisv Kg0KKyAqIENvcHlyaWdodCAoYykgMjAxOSAtIDIwMjAgRGlzcGxheUxpbmsgKFVLKSBMdGQuDQor ICoNCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBD T1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICogbW9y ZSBkZXRhaWxzLg0KKyAqLw0KKyNpZm5kZWYgX19NQVVTQl9IUEFMX0RBVEFfQ09NTU9OX0hfXw0K KyNkZWZpbmUgX19NQVVTQl9IUEFMX0RBVEFfQ09NTU9OX0hfXw0KKw0KKyNpbmNsdWRlICJocGFs L2hwYWwuaCINCisNCitpbnQgbWF1c2Jfc2VuZF9kYXRhKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRl diwgZW51bSBtYXVzYl9jaGFubmVsIGNoYW5uZWxfbnVtLA0KKwkJICAgIHN0cnVjdCBtYXVzYl9r dmVjX2RhdGFfd3JhcHBlciAqZGF0YSk7DQorDQoraW50IG1hdXNiX3NlbmRfdHJhbnNmZXJfYWNr KHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkgICAgc3RydWN0IG1hdXNiX2V2ZW50ICpl dmVudCk7DQorDQoraW50IG1hdXNiX3NlbmRfZGF0YV9tc2coc3RydWN0IG1hdXNiX2RldmljZSAq ZGV2LCBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCisNCitpbnQgbWF1c2JfcmVjZWl2ZV9k YXRhX21zZyhzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBtYXVzYl9ldmVudCAqZXZl bnQpOw0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBtYXVzYl9jdHJsX3RyYW5zZmVyKHN0cnVjdCBt YV91c2JfaGRyX2NvbW1vbiAqaGRyKQ0KK3sNCisJcmV0dXJuIChoZHItPmRhdGEudF9mbGFncyAm IE1BX1VTQl9EQVRBX1RGTEFHU19UUkFOU0ZFUl9UWVBFX01BU0spID09DQorCQlNQV9VU0JfREFU QV9URkxBR1NfVFJBTlNGRVJfVFlQRV9DVFJMOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGJvb2wg bWF1c2JfaXNvY2hfdHJhbnNmZXIoc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICpoZHIpDQorew0K KwlyZXR1cm4gKGhkci0+ZGF0YS50X2ZsYWdzICYgTUFfVVNCX0RBVEFfVEZMQUdTX1RSQU5TRkVS X1RZUEVfTUFTSykgPT0NCisJCU1BX1VTQl9EQVRBX1RGTEFHU19UUkFOU0ZFUl9UWVBFX0lTT0NI Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIGJvb2wgbWF1c2JfY3RybF9kYXRhX2V2ZW50KHN0cnVj dCBtYXVzYl9ldmVudCAqZXZlbnQpDQorew0KKwlyZXR1cm4gZXZlbnQtPmRhdGEudHJhbnNmZXJf dHlwZSA9PQ0KKwkJTUFfVVNCX0RBVEFfVEZMQUdTX1RSQU5TRkVSX1RZUEVfQ1RSTDsNCit9DQor DQorc3RhdGljIGlubGluZSBib29sIG1hdXNiX2lzb2NoX2RhdGFfZXZlbnQoc3RydWN0IG1hdXNi X2V2ZW50ICpldmVudCkNCit7DQorCXJldHVybiBldmVudC0+ZGF0YS50cmFuc2Zlcl90eXBlID09 DQorCQlNQV9VU0JfREFUQV9URkxBR1NfVFJBTlNGRVJfVFlQRV9JU09DSDsNCit9DQorDQorLyog dXNiIHRvIG1hdXNiIHRyYW5zZmVyIHR5cGUgKi8NCitzdGF0aWMgaW5saW5lDQordTggbWF1c2Jf dHJhbnNmZXJfdHlwZV9mcm9tX3VzYihzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVw ZCkNCit7DQorCXJldHVybiAodTgpdXNiX2VuZHBvaW50X3R5cGUoZXBkKSA8PCAzOw0KK30NCisN CitzdGF0aWMgaW5saW5lIHU4IG1hdXNiX3RyYW5zZmVyX3R5cGVfZnJvbV9oZHIoc3RydWN0IG1h X3VzYl9oZHJfY29tbW9uICpoZHIpDQorew0KKwlyZXR1cm4gaGRyLT5kYXRhLnRfZmxhZ3MgJiBN QV9VU0JfREFUQV9URkxBR1NfVFJBTlNGRVJfVFlQRV9NQVNLOw0KK30NCisNCitzdGF0aWMgaW5s aW5lDQorZW51bSBtYXVzYl9jaGFubmVsIG1hdXNiX3RyYW5zZmVyX3R5cGVfdG9fY2hhbm5lbCh1 OCB0cmFuc2Zlcl90eXBlKQ0KK3sNCisJcmV0dXJuIHRyYW5zZmVyX3R5cGUgPj4gMzsNCit9DQor DQorI2VuZGlmIC8qIF9fTUFVU0JfSFBBTF9EQVRBX0NPTU1PTl9IX18gKi8NCmRpZmYgLS1naXQg YS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9kYXRhX2luLmggYi9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9kYXRhX2luLmgNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmE4YmIyMjVjZGU4MA0KLS0tIC9kZXYvbnVsbA0KKysr IGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hwYWwvZGF0YV9pbi5oDQpAQCAtMCww ICsxLDE4IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0K KyAqIENvcHlyaWdodCAoYykgMjAxOSAtIDIwMjAgRGlzcGxheUxpbmsgKFVLKSBMdGQuDQorICoN CisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZ SU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICogbW9yZSBk ZXRhaWxzLg0KKyAqLw0KKyNpZm5kZWYgX19NQVVTQl9IUEFMX0RBVEFfSU5fSF9fDQorI2RlZmlu ZSBfX01BVVNCX0hQQUxfREFUQV9JTl9IX18NCisNCisjaW5jbHVkZSAiaHBhbC9ocGFsLmgiDQor DQoraW50IG1hdXNiX3NlbmRfaW5fZGF0YV9tc2coc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LCBz dHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCit2b2lkIG1hdXNiX3JlY2VpdmVfaW5fZGF0YShz dHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50LA0KKwkJCSAgIHN0cnVjdCBtYXVzYl91cmJfY3R4ICp1 cmJfY3R4KTsNCisNCisjZW5kaWYgLyogX19NQVVTQl9IUEFMX0RBVEFfSU5fSF9fICovDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hwYWwvZGF0YV9vdXQuaCBi L2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9ocGFsL2RhdGFfb3V0LmgNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmQ0ZDU1YTYzNzA0YQ0KLS0tIC9kZXYv bnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hwYWwvZGF0YV9vdXQu aA0KQEAgLTAsMCArMSwyMiBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w ICovDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3BsYXlMaW5rIChVSykg THRkLg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25k aXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhl IGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0K KyAqIG1vcmUgZGV0YWlscy4NCisgKi8NCisjaWZuZGVmIF9fTUFVU0JfSFBBTF9EQVRBX09VVF9I X18NCisjZGVmaW5lIF9fTUFVU0JfSFBBTF9EQVRBX09VVF9IX18NCisNCisjaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4NCisNCisjaW5jbHVkZSAiaHBhbC9tYXVzYl9ldmVudHMuaCINCisjaW5jbHVk ZSAidXRpbHMvbWF1c2JfZGF0YV9pdGVyYXRvci5oIg0KKw0KK2ludCBtYXVzYl9zZW5kX291dF9k YXRhX21zZyhzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsIHN0cnVjdCBtYXVzYl9ldmVudCAqZXZl bnQsDQorCQkJICAgIHN0cnVjdCBtYXVzYl91cmJfY3R4ICp1cmJfY3R4KTsNCit2b2lkIG1hdXNi X3JlY2VpdmVfb3V0X2RhdGEoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkgICAgc3Ry dWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpOw0KKw0KKyNlbmRpZiAvKiBfX01BVVNCX0hQQUxf REFUQV9PVVRfSF9fICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL2hwYWwvaHBhbC5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hwYWwvaHBh bC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi44NDM2ZThlZWI0 YzgNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9o cGFsL2hwYWwuaA0KQEAgLTAsMCArMSwxODQgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5 TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2 Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJj aGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICovDQorI2lmbmRlZiBfX01BVVNCX0hQQUxf SFBBTF9IX18NCisjZGVmaW5lIF9fTUFVU0JfSFBBTF9IUEFMX0hfXw0KKw0KKyNpbmNsdWRlIDxs aW51eC9rcmVmLmg+DQorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4NCisjaW5jbHVkZSA8bGlu dXgvdXNiLmg+DQorDQorI2luY2x1ZGUgImNvbW1vbi9tYXVzYl9hZGRyZXNzLmgiDQorI2luY2x1 ZGUgImNvbW1vbi9tYXVzYl9ldmVudC5oIg0KKyNpbmNsdWRlICJoY2QvaHViLmgiDQorI2luY2x1 ZGUgImxpbmsvbWF1c2JfaXBfbGluay5oIg0KKw0KKyNkZWZpbmUgTUFVU0JfQ09OVFJPTF9TRVRV UF9TSVpFCTgNCisjZGVmaW5lIE1BVVNCX0JVU1lfUkVUUklFU19DT1VOVAkzDQorI2RlZmluZSBN QVVTQl9IRUFSVEJFQVRfVElNRU9VVF9NUwkxMDAwDQorI2RlZmluZSBNQVVTQl9DTElFTlRfU1RP UFBFRF9USU1FT1VUX01TCTMwMDANCisNCisjZGVmaW5lIE1BVVNCX01BWF9SRUNFSVZFX0ZBSUxV UkVTCTMNCisjZGVmaW5lIE1BVVNCX01BWF9NSVNTRURfSEVBUlRCRUFUUwkzDQorI2RlZmluZSBN QVVTQl9UUkFOU0ZFUl9SRVNFUlZFRAkJMA0KKw0KKyNkZWZpbmUgTUFVU0JfQ0hBTk5FTF9NQVBf TEVOR1RICTQNCisNCitleHRlcm4gc3RydWN0IG1zcyBtc3M7DQorZXh0ZXJuIHN0cnVjdCBtYXVz Yl9oY2QgKm1oY2Q7DQorDQorZW51bSBtYXVzYl9pc29jaF9oZWFkZXJfZm9ybWF0X3NpemUgew0K KwlNQVVTQl9JU09DSF9TSE9SVF9GT1JNQVRfU0laRQkgPSA0LA0KKwlNQVVTQl9JU09DSF9TVEFO REFSRF9GT1JNQVRfU0laRSA9IDgsDQorCU1BVVNCX0lTT0NIX0xPTkdfRk9STUFUX1NJWkUJID0g MTINCit9Ow0KKw0KK3N0cnVjdCBtYXVzYl9jb21wbGV0aW9uIHsNCisJc3RydWN0IGxpc3RfaGVh ZCAgIGxpc3RfZW50cnk7DQorCXN0cnVjdCBjb21wbGV0aW9uICAqY29tcGxldGlvbl9ldmVudDsN CisJc3RydWN0IG1hdXNiX2V2ZW50ICptYXVzYl9ldmVudDsNCisJdTY0CQkgICBldmVudF9pZDsN Cit9Ow0KKw0KK3N0cnVjdCBtYXVzYl9tc3NfcmluZ3NfZXZlbnRzIHsNCisJYXRvbWljX3QJICBt YXVzYl9zdG9wX3JlYWRpbmdfcmluZ19ldmVudHM7DQorCXN0cnVjdCBjb21wbGV0aW9uIG1hdXNi X3JpbmdfaGFzX2V2ZW50czsNCit9Ow0KKw0KK3N0cnVjdCBtc3Mgew0KKwlib29sCSAgIGRlaW5p dF9pbl9wcm9ncmVzczsNCisJc3BpbmxvY2tfdCBsb2NrOwkvKiBQcm90ZWN0IG1zcyBzdHJ1Y3R1 cmUgKi8NCisJdTY0CSAgIHJpbmdfYnVmZmVyX2lkOw0KKw0KKwlzdHJ1Y3QgY29tcGxldGlvbiBl bXB0eTsNCisJc3RydWN0IGNvbXBsZXRpb24gY2xpZW50X3N0b3BwZWQ7DQorCWJvb2wJCSAgY2xp ZW50X2Nvbm5lY3RlZDsNCisJc3RydWN0IHRpbWVyX2xpc3QgaGVhcnRiZWF0X3RpbWVyOw0KKwl1 OAkJICBtaXNzZWRfaGVhcnRiZWF0czsNCisNCisJc3RydWN0IGxpc3RfaGVhZCAgbWFkZXZfbGlz dDsNCisJYXRvbWljX3QJICBudW1fb2ZfdHJhbnNpdGlvbnNfdG9fc2xlZXA7DQorCXN0cnVjdCBs aXN0X2hlYWQgIGF2YWlsYWJsZV9yaW5nX2J1ZmZlcnM7DQorDQorCXN0cnVjdCBtYXVzYl9tc3Nf cmluZ3NfZXZlbnRzCSByaW5nc19ldmVudHM7DQorCXN0cnVjdCBtYXVzYl9ldmVudHNfbm90aWZp Y2F0aW9uIGV2ZW50c1tNQVVTQl9NQVhfTlVNX09GX01BX0RFVlNdOw0KK307DQorDQorc3RydWN0 IG1hdXNiX2RldmljZSB7DQorCXN0cnVjdCBtYXVzYl9kZXZpY2VfYWRkcmVzcyBkZXZfYWRkcjsN CisJc3RydWN0IG5ldAkJICAgICpuZXRfbnM7DQorCXN0cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAg ICAqcmluZ19idWZmZXI7DQorCXN0cnVjdCBsaXN0X2hlYWQJICAgIGxpc3RfZW50cnk7DQorDQor CXN0cnVjdCBtYXVzYl9pcF9jdHggKm1nbXRfY2hhbm5lbDsNCisJc3RydWN0IG1hdXNiX2lwX2N0 eCAqY3RybF9jaGFubmVsOw0KKwlzdHJ1Y3QgbWF1c2JfaXBfY3R4ICpidWxrX2NoYW5uZWw7DQor CXN0cnVjdCBtYXVzYl9pcF9jdHggKmlzb2NoX2NoYW5uZWw7DQorCXN0cnVjdCBtYXVzYl9pcF9j dHggKmNoYW5uZWxfbWFwW01BVVNCX0NIQU5ORUxfTUFQX0xFTkdUSF07DQorDQorCXN0cnVjdCB3 b3JrX3N0cnVjdCB3b3JrOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc29ja2V0X2Rpc2Nvbm5lY3Rf d29yazsNCisJc3RydWN0IHdvcmtfc3RydWN0IGhjZF9kaXNjb25uZWN0X3dvcms7DQorCXN0cnVj dCB3b3JrX3N0cnVjdCBtYWRldl9kZWxldGVfd29yazsNCisJc3RydWN0IHdvcmtfc3RydWN0IHBp bmdfd29yazsNCisJc3RydWN0IHdvcmtfc3RydWN0IGhlYXJ0YmVhdF93b3JrOw0KKwlzdHJ1Y3Qg d29ya3F1ZXVlX3N0cnVjdCAqd29ya3E7DQorDQorCXN0cnVjdCBrcmVmIHJlZmNvdW50Ow0KKwkv KiBTZXQgb24gcG9ydCBjaGFuZ2UgZXZlbnQgYWZ0ZXIgY2FwIHJlc3AgKi8NCisJdTggZGV2X3R5 cGU7DQorCXU4IGRldl9zcGVlZDsNCisJdTggbHNlOw0KKwl1OCBtYWRldl9hZGRyOw0KKwl1OCBk ZXZfY29ubmVjdGVkOw0KKwl1MTYgaWQ7DQorCXUxNiBwb3J0X251bWJlcjsNCisNCisJdTY0CQll dmVudF9pZDsNCisJc3BpbmxvY2tfdAlldmVudF9pZF9sb2NrOyAvKiBMb2NrIGV2ZW50IElEIGlu Y3JlbWVudHMgKi8NCisNCisJc3RydWN0IGxpc3RfaGVhZCBjb21wbGV0aW9uX2V2ZW50czsNCisJ c3BpbmxvY2tfdAkgY29tcGxldGlvbl9ldmVudHNfbG9jazsgLyogTG9jayBjb21wbGV0aW9uIGV2 ZW50cyAqLw0KKw0KKwlzdHJ1Y3QgY29tcGxldGlvbiB1c2VyX2ZpbmlzaGVkX2V2ZW50Ow0KKwl1 MTYJCSAgbnVtX29mX3VzZXJfZXZlbnRzOw0KKwl1MTYJCSAgbnVtX29mX2NvbXBsZXRlZF9ldmVu dHM7DQorDQorCXNwaW5sb2NrX3QJICBudW1fb2ZfdXNlcl9ldmVudHNfbG9jazsgLyogTG9jayB1 c2VyIGV2ZW50cyBjb3VudCAqLw0KKw0KKwlzdHJ1Y3QgdGltZXJfbGlzdCBjb25uZWN0aW9uX3Rp bWVyOw0KKwl1OAkJICByZWNlaXZlX2ZhaWx1cmVzX251bTsNCisJc3BpbmxvY2tfdAkgIGNvbm5l Y3Rpb25fdGltZXJfbG9jazsgLyogTG9jayBjb25uZWN0aW9uIHRpbWVyICovDQorDQorCWF0b21p Y190CSAgdW5yZXNwb25zaXZlX2NsaWVudDsNCisNCisJYXRvbWljX3QJICBudW1fb2ZfdXNiX2Rl dmljZXM7DQorfTsNCisNCitzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqbWF1c2JfZmluZF91cmJfaW5f dHJlZShzdHJ1Y3QgdXJiICp1cmIpOw0KK3N0cnVjdCBtYXVzYl91cmJfY3R4ICptYXVzYl91bmxp bmtfYW5kX2RlbGV0ZV91cmJfZnJvbV90cmVlKHN0cnVjdCB1cmIgKnVyYiwNCisJCQkJCQkJICAg IGludCBzdGF0dXMpOw0KK3N0cnVjdCBtYXVzYl9kZXZpY2UgKm1hdXNiX2dldF9kZXZfZnJvbV9h ZGRyX3Vuc2FmZSh1OCBtYWRldl9hZGRyKTsNCisNCitzdGF0aWMgaW5saW5lIHU2NCBtYXVzYl9l dmVudF9pZChzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYpDQorew0KKwl1bnNpZ25lZCBsb25nIGZs YWdzOw0KKwl1NjQgdmFsOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9pZF9s b2NrLCBmbGFncyk7DQorCXZhbCA9ICsrKGRldi0+ZXZlbnRfaWQpOw0KKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXYtPmV2ZW50X2lkX2xvY2ssIGZsYWdzKTsNCisNCisJcmV0dXJuIHZhbDsN Cit9DQorDQoraW50IG1hdXNiX2luaXRpYXRlX2Rldl9jb25uZWN0aW9uKHN0cnVjdCBtYXVzYl9k ZXZpY2VfYWRkcmVzcyBkZXZpY2VfYWRkcmVzcywNCisJCQkJICB1OCBtYWRldl9hZGRyZXNzKTsN CitpbnQgbWF1c2JfZW5xdWV1ZV9ldmVudF9mcm9tX3VzZXIodTggbWFkZXZfYWRkciwgdTE2IG51 bV9vZl9ldmVudHMsDQorCQkJCSAgdTE2IG51bV9vZl9jb21wbGV0ZWQpOw0KK2ludCBtYXVzYl9l bnF1ZXVlX2V2ZW50X3RvX3VzZXIoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQlzdHJ1 Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCitpbnQgbWF1c2JfZGF0YV9yZXFfZW5xdWV1ZV9ldmVu dChzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsIHUxNiBlcF9oYW5kbGUsDQorCQkJCSBzdHJ1Y3Qg dXJiICpyZXF1ZXN0KTsNCitpbnQgbWF1c2Jfc2lnbmFsX2V2ZW50KHN0cnVjdCBtYXVzYl9kZXZp Y2UgKmRldiwgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCSAgICAgICB1NjQgZXZlbnRf aWQpOw0KK2ludCBtYXVzYl9pbnNlcnRfdXJiX2luX3RyZWUoc3RydWN0IHVyYiAqdXJiLCBib29s IGxpbmtfdXJiX3RvX2VwKTsNCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbWF1c2JfaW5zZXJ0X2V2 ZW50KHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgICAgc3RydWN0IG1hdXNiX2Nv bXBsZXRpb24gKmV2ZW50KQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9s b2NrX2lycXNhdmUoJmRldi0+Y29tcGxldGlvbl9ldmVudHNfbG9jaywgZmxhZ3MpOw0KKwlsaXN0 X2FkZF90YWlsKCZldmVudC0+bGlzdF9lbnRyeSwgJmRldi0+Y29tcGxldGlvbl9ldmVudHMpOw0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvbXBsZXRpb25fZXZlbnRzX2xvY2ssIGZs YWdzKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG1hdXNiX3JlbW92ZV9ldmVudChzdHJ1 Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgICAgIHN0cnVjdCBtYXVzYl9jb21wbGV0aW9u ICpldmVudCkNCit7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmNvbXBsZXRpb25fZXZlbnRzX2xvY2ssIGZsYWdzKTsNCisJbGlzdF9kZWwoJmV2 ZW50LT5saXN0X2VudHJ5KTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb21wbGV0 aW9uX2V2ZW50c19sb2NrLCBmbGFncyk7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfcmVsZWFzZV9tYV9k ZXZfYXN5bmMoc3RydWN0IGtyZWYgKmtyZWYpOw0KK3ZvaWQgbWF1c2Jfb25fbWFkZXZfY29ubmVj dGVkKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldik7DQordm9pZCBtYXVzYl9jb21wbGV0ZV9yZXF1 ZXN0KHN0cnVjdCB1cmIgKnVyYiwgdTMyIGFjdHVhbF9sZW5ndGgsIGludCBzdGF0dXMpOw0KK3Zv aWQgbWF1c2JfY29tcGxldGVfdXJiKHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQpOw0KK3ZvaWQg bWF1c2JfcmVzZXRfY29ubmVjdGlvbl90aW1lcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYpOw0K K3ZvaWQgbWF1c2JfcmVzZXRfaGVhcnRiZWF0X2NudCh2b2lkKTsNCit2b2lkIG1hdXNiX3JlbGVh c2VfZXZlbnRfcmVzb3VyY2VzKHN0cnVjdCBtYXVzYl9ldmVudCAgKmV2ZW50KTsNCit2b2lkIG1h dXNiX2luaXRpYWxpemVfbXNzKHZvaWQpOw0KK3ZvaWQgbWF1c2JfZGVpbml0aWFsaXplX21zcyh2 b2lkKTsNCitpbnQgbWF1c2JfcmVnaXN0ZXJfcG93ZXJfc3RhdGVfbGlzdGVuZXIodm9pZCk7DQor dm9pZCBtYXVzYl91bnJlZ2lzdGVyX3Bvd2VyX3N0YXRlX2xpc3RlbmVyKHZvaWQpOw0KKw0KKyNl bmRpZiAvKiBfX01BVVNCX0hQQUxfSFBBTF9IX18gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9pc29jaF9pbi5oIGIvZHJpdmVycy91c2IvbWF1c2Jf aG9zdC9pbmNsdWRlL2hwYWwvaXNvY2hfaW4uaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uYzA5NjU5MzQyNTc4DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9pc29jaF9pbi5oDQpAQCAtMCwwICsxLDIyIEBA DQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIENvcHly aWdodCAoYykgMjAxOSAtIDIwMjAgRGlzcGxheUxpbmsgKFVLKSBMdGQuDQorICoNCisgKiBUaGlz IGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRo ZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICogbW9yZSBkZXRhaWxzLg0K KyAqLw0KKyNpZm5kZWYgX19NQVVTQl9IUEFMX0lTT0NIX0lOX0hfXw0KKyNkZWZpbmUgX19NQVVT Ql9IUEFMX0lTT0NIX0lOX0hfXw0KKw0KKyNpbmNsdWRlICJocGFsL2hwYWwuaCINCisNCisjZGVm aW5lIE1BVVNCX0lTT0NIX0lOX0tWRUNfTlVNIDMNCisNCitpbnQgbWF1c2Jfc2VuZF9pc29jaF9p bl9tc2coc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCSAgICBzdHJ1Y3QgbWF1c2JfZXZl bnQgKmV2ZW50KTsNCitpbnQgbWF1c2JfcmVjZWl2ZV9pc29jaF9pbl9kYXRhKHN0cnVjdCBtYXVz Yl9kZXZpY2UgKmRldiwNCisJCQkJc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkJc3Ry dWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpOw0KKw0KKyNlbmRpZiAvKiBfX01BVVNCX0hQQUxf SVNPQ0hfSU5fSF9fICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL2hwYWwvaXNvY2hfb3V0LmggYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBh bC9pc29jaF9vdXQuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4u NWZmZmI3Nzk4YjdjDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0 L2luY2x1ZGUvaHBhbC9pc29jaF9vdXQuaA0KQEAgLTAsMCArMSwyMCBAQA0KKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkg LSAyMDIwIERpc3BsYXlMaW5rIChVSykgTHRkLg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMN CisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rv cnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0KKyAqIG1vcmUgZGV0YWlscy4NCisgKi8NCisjaWZuZGVm IF9fTUFVU0JfSFBBTF9JU09DSF9PVVRfSF9fDQorI2RlZmluZSBfX01BVVNCX0hQQUxfSVNPQ0hf T1VUX0hfXw0KKw0KKyNpbmNsdWRlICJjb21tb24vbWF1c2JfZXZlbnQuaCINCisjaW5jbHVkZSAi aHBhbC9ocGFsLmgiDQorDQoraW50IG1hdXNiX3NlbmRfaXNvY2hfb3V0X21zZyhzdHJ1Y3QgbWF1 c2JfZGV2aWNlICptYV9kZXYsDQorCQkJICAgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKm1hdXNiX2V2 ZW50LA0KKwkJCSAgICAgc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpOw0KK2ludCBtYXVz Yl9yZWNlaXZlX2lzb2NoX291dChzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCisNCisjZW5k aWYgLyogX19NQVVTQl9IUEFMX0lTT0NIX09VVF9IX18gKi8NCmRpZmYgLS1naXQgYS9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9tYXVzYl9ldmVudHMuaCBiL2RyaXZlcnMvdXNi L21hdXNiX2hvc3QvaW5jbHVkZS9ocGFsL21hdXNiX2V2ZW50cy5oDQpuZXcgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5hMjYwNWNiNjljNTINCi0tLSAvZGV2L251bGwNCisr KyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS9ocGFsL21hdXNiX2V2ZW50cy5oDQpA QCAtMCwwICsxLDk5IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8N CisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOSAtIDIwMjAgRGlzcGxheUxpbmsgKFVLKSBMdGQu DQorICoNCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmls ZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICog bW9yZSBkZXRhaWxzLg0KKyAqLw0KKyNpZm5kZWYgX19NQVVTQl9IUEFMX01BVVNCX0VWRU5UU19I X18NCisjZGVmaW5lIF9fTUFVU0JfSFBBTF9NQVVTQl9FVkVOVFNfSF9fDQorDQorI2luY2x1ZGUg ImNvbW1vbi9tYXVzYl9ldmVudC5oIg0KKyNpbmNsdWRlICJocGFsL2hwYWwuaCINCisjaW5jbHVk ZSAibGluay9tYXVzYl9pcF9saW5rLmgiDQorDQorI2RlZmluZSBNQU5BR0VNRU5UX0VWRU5UX1RJ TUVPVVQgMzAwMA0KKw0KK2ludCBtYXVzYl9tc2dfcmVjZWl2ZWRfZXZlbnQoc3RydWN0IG1hdXNi X2V2ZW50ICpldmVudCwNCisJCQkgICAgIHN0cnVjdCBtYV91c2JfaGRyX2NvbW1vbiAqaGRyLA0K KwkJCSAgICAgZW51bSBtYXVzYl9jaGFubmVsIGNoYW5uZWwpOw0KK2ludCBtYXVzYl91c2JkZXZo YW5kbGVfZXZlbnRfdG9fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgICAg dTggZGV2aWNlX3NwZWVkLA0KKwkJCQkgICAgIHUzMiByb3V0ZV9zdHJpbmcsDQorCQkJCSAgICAg dTE2IGh1Yl9kZXZfaGFuZGxlLA0KKwkJCQkgICAgIHUxNiBwYXJlbnRfaHNfaHViX2Rldl9oYW5k bGUsDQorCQkJCSAgICAgdTE2IHBhcmVudF9oc19odWJfcG9ydCwgdTE2IG10dCwNCisJCQkJICAg ICB1OCBsc2UsIHMzMiAqdXNiX2Rldl9oYW5kbGUpOw0KK2ludCBtYXVzYl91c2JkZXZoYW5kbGVf ZXZlbnRfZnJvbV91c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgICAgIHN0 cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQpOw0KK3ZvaWQgbWF1c2JfaW5pdF9zdGFuZGFyZF9lcF9k ZXNjcmlwdG9yKHN0cnVjdCBtYV91c2JfZXBoYW5kbGVyZXFfZGVzY19zdGQgKg0KKwkJCQkgICAg ICAgc3RkX2Rlc2MsDQorCQkJCSAgICAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Ig Kg0KKwkJCQkgICAgICAgdXNiX3N0ZF9kZXNjKTsNCit2b2lkIG1hdXNiX2luaXRfc3VwZXJzcGVl ZF9lcF9kZXNjcmlwdG9yKHN0cnVjdCBtYV91c2JfZXBoYW5kbGVyZXFfZGVzY19zcyAqDQorCQkJ CQkgc3NfZGVzYywNCisJCQkJCSBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKg0KKwkJ CQkJIHVzYl9zdGRfZGVzYywNCisJCQkJCSBzdHJ1Y3QgdXNiX3NzX2VwX2NvbXBfZGVzY3JpcHRv ciAqDQorCQkJCQkgdXNiX3NzX2Rlc2MpOw0KK2ludCBtYXVzYl9lcGhhbmRsZV9ldmVudF90b191 c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwgdTE2IGRldmljZV9oYW5kbGUsDQorCQkJCSB1 MTYgZGVzY3JpcHRvcl9zaXplLCB2b2lkICpkZXNjcmlwdG9yLA0KKwkJCQkgdTE2ICplcF9oYW5k bGUpOw0KK2ludCBtYXVzYl9lcGhhbmRsZV9ldmVudF9mcm9tX3VzZXIoc3RydWN0IG1hdXNiX2Rl dmljZSAqZGV2LA0KKwkJCQkgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCitpbnQgbWF1 c2JfZXBhY3RpdmF0ZV9ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJ CQkJICAgdTE2IGRldmljZV9oYW5kbGUsIHUxNiBlcF9oYW5kbGUpOw0KK2ludCBtYXVzYl9lcGFj dGl2YXRlX2V2ZW50X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAg ICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCk7DQoraW50IG1hdXNiX2VwaW5hY3RpdmF0ZV9l dmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgICB1MTYgZGV2 aWNlX2hhbmRsZSwNCisJCQkJICAgICB1MTYgZXBfaGFuZGxlKTsNCitpbnQgbWF1c2JfZXBpbmFj dGl2YXRlX2V2ZW50X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAg ICAgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCitpbnQgbWF1c2JfZXByZXNldF9ldmVu dF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJdTE2IGRldmljZV9oYW5k bGUsIHUxNiBlcF9oYW5kbGUsDQorCQkJCXU4IHRzcF9mbGFnKTsNCitpbnQgbWF1c2JfZXByZXNl dF9ldmVudF9mcm9tX3VzZXIoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkgIHN0cnVj dCBtYXVzYl9ldmVudCAqZXZlbnQpOw0KK2ludCBtYXVzYl9lcGRlbGV0ZV9ldmVudF90b191c2Vy KHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJIHUxNiBkZXZpY2VfaGFuZGxlLCB1MTYg ZXBfaGFuZGxlKTsNCitpbnQgbWF1c2JfZXBkZWxldGVfZXZlbnRfZnJvbV91c2VyKHN0cnVjdCBt YXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCk7DQor aW50IG1hdXNiX21vZGlmeWVwMF9ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRl diwNCisJCQkJICB1MTYgZGV2aWNlX2hhbmRsZSwgdTE2ICplcF9oYW5kbGUsDQorCQkJCSAgX19s ZTE2IG1heF9wYWNrZXRfc2l6ZSk7DQoraW50IG1hdXNiX21vZGlmeWVwMF9ldmVudF9mcm9tX3Vz ZXIoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkgICAgc3RydWN0IG1hdXNiX2V2ZW50 ICpldmVudCk7DQoraW50IG1hdXNiX3NldHVzYmRldmFkZHJlc3NfZXZlbnRfdG9fdXNlcihzdHJ1 Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCQkgdTE2IGRldmljZV9oYW5kbGUsDQorCQkJCQkg dTE2IHJlc3BvbnNlX3RpbWVvdXQpOw0KK2ludCBtYXVzYl9zZXR1c2JkZXZhZGRyZXNzX2V2ZW50 X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCQkgICBzdHJ1Y3QgbWF1 c2JfZXZlbnQgKmV2ZW50KTsNCitpbnQgbWF1c2JfdXBkYXRlZGV2X2V2ZW50X3RvX3VzZXIoc3Ry dWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkgIHUxNiBkZXZpY2VfaGFuZGxlLA0KKwkJCQkg IHUxNiBtYXhfZXhpdF9sYXRlbmN5LCB1OCBodWIsDQorCQkJCSAgdTggbnVtYmVyX29mX3BvcnRz LCB1OCBtdHQsDQorCQkJCSAgdTggdHR0LCB1OCBpbnRlZ3JhdGVkX2h1Yl9sYXRlbmN5LA0KKwkJ CQkgIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgKmRldl9kZXNjcmlwdG9yKTsNCitpbnQg bWF1c2JfdXBkYXRlZGV2X2V2ZW50X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYs DQorCQkJCSAgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KTsNCitpbnQgbWF1c2JfdXNiZGV2 ZGlzY29ubmVjdF9ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJ CSB1MTYgZGV2X2hhbmRsZSk7DQoraW50IG1hdXNiX3BpbmdfZXZlbnRfdG9fdXNlcihzdHJ1Y3Qg bWF1c2JfZGV2aWNlICpkZXYpOw0KK2ludCBtYXVzYl91c2JkZXZyZXNldF9ldmVudF90b191c2Vy KHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgIHUxNiBkZXZpY2VfaGFuZGxlKTsN CitpbnQgbWF1c2JfdXNiZGV2cmVzZXRfZXZlbnRfZnJvbV91c2VyKHN0cnVjdCBtYXVzYl9kZXZp Y2UgKmRldiwNCisJCQkJICAgICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCk7DQoraW50IG1h dXNiX2NhbmNlbHRyYW5zZmVyX2V2ZW50X3RvX3VzZXIoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2 LA0KKwkJCQkgICAgICAgdTE2IGRldmljZV9oYW5kbGUsDQorCQkJCSAgICAgICB1MTYgZXBfaGFu ZGxlLCB1NjQgdXJiKTsNCitpbnQgbWF1c2JfY2FuY2VsdHJhbnNmZXJfZXZlbnRfZnJvbV91c2Vy KHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJCSBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2 ZW50KTsNCisNCit2b2lkIG1hdXNiX2Rldl9yZXNldF9yZXFfZXZlbnQoc3RydWN0IG1hdXNiX2V2 ZW50ICpldmVudCk7DQordm9pZCBtYXVzYl9jbGVhbnVwX3NlbmRfZGF0YV9tc2dfZXZlbnQoc3Ry dWN0IG1hdXNiX2V2ZW50ICpldmVudCk7DQordm9pZCBtYXVzYl9jbGVhbnVwX3JlY2VpdmVkX2Rh dGFfbXNnX2V2ZW50KHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQpOw0KK3ZvaWQgbWF1c2JfY2xl YW51cF9kZWxldGVfZGF0YV90cmFuc2Zlcl9ldmVudChzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50 KTsNCisNCisjZW5kaWYgLyogX19NQVVTQl9IUEFMX01BVVNCX0VWRU5UU19IX18gKi8NCmRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvaHBhbC9uZXR3b3JrX2NhbGxi YWNrcy5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL2hwYWwvbmV0d29ya19jYWxs YmFja3MuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uYTEwYjU5 MGQ1M2FhDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1 ZGUvaHBhbC9uZXR3b3JrX2NhbGxiYWNrcy5oDQpAQCAtMCwwICsxLDIwIEBADQorLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAx OSAtIDIwMjAgRGlzcGxheUxpbmsgKFVLKSBMdGQuDQorICoNCisgKiBUaGlzIGZpbGUgaXMgc3Vi amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp Yw0KKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVj dG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICogbW9yZSBkZXRhaWxzLg0KKyAqLw0KKyNpZm5k ZWYgX19NQVVTQl9IUEFMX05FVFdPUktfQ0FMTEJBQ0tTX0hfXw0KKyNkZWZpbmUgX19NQVVTQl9I UEFMX05FVFdPUktfQ0FMTEJBQ0tTX0hfXw0KKw0KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUu aD4NCisNCisjaW5jbHVkZSAibGluay9tYXVzYl9pcF9saW5rLmgiDQorDQorLyogZ2VuZXJpYyBj YWxsYmFjayBieSBkZWZhdWx0ICovDQordm9pZCBtYXVzYl9pcF9jYWxsYmFjayh2b2lkICpjdHgs IGVudW0gbWF1c2JfY2hhbm5lbCBjaGFubmVsLA0KKwkJICAgICAgIGVudW0gbWF1c2JfbGlua19h Y3Rpb24gYWN0aW9uLCBpbnQgc3RhdHVzLCB2b2lkICpkYXRhKTsNCisNCisjZW5kaWYgLyogX19N QVVTQl9IUEFMX05FVFdPUktfQ0FMTEJBQ0tTX0hfXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL21hdXNiX2hvc3QvaW5jbHVkZS9saW5rL21hdXNiX2lwX2xpbmsuaCBiL2RyaXZlcnMvdXNi L21hdXNiX2hvc3QvaW5jbHVkZS9saW5rL21hdXNiX2lwX2xpbmsuaA0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uNDE2ZjE1YjhjZTlkDQotLS0gL2Rldi9udWxsDQor KysgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvbGluay9tYXVzYl9pcF9saW5rLmgN CkBAIC0wLDAgKzEsODcgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0 ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0 aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBm aWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisg KiBtb3JlIGRldGFpbHMuDQorICovDQorI2lmbmRlZiBfX01BVVNCX0xJTktfTUFVU0JfSVBfTElO S19IX18NCisjZGVmaW5lIF9fTUFVU0JfTElOS19NQVVTQl9JUF9MSU5LX0hfXw0KKw0KKyNpbmNs dWRlIDxsaW51eC9pbmV0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8 bGludXgvd29ya3F1ZXVlLmg+DQorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+DQorDQor I2RlZmluZSBNQVVTQl9MSU5LX0JVRkZfU0laRQkxNjc3NzIxNg0KKyNkZWZpbmUgTUFVU0JfTElO S19UT1NfTEVWRUxfRUYgMHhCOA0KKw0KK2VudW0gbWF1c2JfbGlua19hY3Rpb24gew0KKwlNQVVT Ql9MSU5LX0NPTk5FQ1QJPSAwLA0KKwlNQVVTQl9MSU5LX0RJU0NPTk5FQ1QJPSAxLA0KKwlNQVVT Ql9MSU5LX1JFQ1YJCT0gMiwNCisJTUFVU0JfTElOS19TRU5ECQk9IDMNCit9Ow0KKw0KK2VudW0g bWF1c2JfY2hhbm5lbCB7DQorCU1BVVNCX0NUUkxfQ0hBTk5FTCAgPSAwLA0KKwlNQVVTQl9JU09D SF9DSEFOTkVMID0gMSwNCisJTUFVU0JfQlVMS19DSEFOTkVMICA9IDIsDQorCU1BVVNCX0lOVFJf Q0hBTk5FTCAgPSAzLA0KKwlNQVVTQl9NR01UX0NIQU5ORUwgID0gNA0KK307DQorDQorc3RydWN0 IG1hdXNiX2t2ZWNfZGF0YV93cmFwcGVyIHsNCisJc3RydWN0IGt2ZWMgKmt2ZWM7DQorCXUzMiAg ICBrdmVjX251bTsNCisJdTMyICAgIGxlbmd0aDsNCit9Ow0KKw0KK3N0cnVjdCBtYXVzYl9pcF9y ZWN2X2N0eCB7DQorCXUxNiAgbGVmdDsNCisJdTE2ICByZWNlaXZlZDsNCisJY2hhciAqYnVmZmVy Ow0KKwljaGFyIGNvbW1vbl9oZHJbMTJdIF9fYWxpZ25lZCg0KTsNCit9Ow0KKw0KK3N0cnVjdCBt YXVzYl9pcF9jdHggew0KKwlzdHJ1Y3Qgc29ja2V0ICpjbGllbnRfc29ja2V0Ow0KKwlzdHJ1Y3Qg bmV0ICAgICpuZXRfbnM7DQorCWNoYXIJICAgICAgaXBfYWRkcltJTkVUNl9BRERSU1RSTEVOXTsN CisJdTE2CSAgICAgIHBvcnQ7DQorCWJvb2wJICAgICAgdWRwOw0KKw0KKwkvKiBRdWV1ZXMgdG8g c2NoZWR1bGUgcnggd29yayAqLw0KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqcmVjdl93b3Jr cTsNCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKmNvbm5lY3Rfd29ya3E7DQorCXN0cnVjdCB3 b3JrX3N0cnVjdAlyZWN2X3dvcms7DQorCXN0cnVjdCB3b3JrX3N0cnVjdAljb25uZWN0X3dvcms7 DQorDQorCXN0cnVjdCBtYXVzYl9pcF9yZWN2X2N0eCByZWN2X2N0eDsgLyogcmVjdiBidWZmZXIg Ki8NCisNCisJZW51bSBtYXVzYl9jaGFubmVsIGNoYW5uZWw7DQorCXZvaWQgKmN0eDsNCisJLyog Y2FsbGJhY2sgc2hvdWxkIHN0b3JlIHRhc2sgaW50byBocGFsIHF1ZXVlICovDQorCXZvaWQgKCpm bl9jYWxsYmFjaykodm9pZCAqY3R4LCBlbnVtIG1hdXNiX2NoYW5uZWwgY2hhbm5lbCwNCisJCQkg ICAgZW51bSBtYXVzYl9saW5rX2FjdGlvbiBhY3QsIGludCBzdGF0dXMsIHZvaWQgKmRhdGEpOw0K K307DQorDQoraW50IG1hdXNiX2luaXRfaXBfY3R4KHN0cnVjdCBtYXVzYl9pcF9jdHggKippcF9j dHgsDQorCQkgICAgICBzdHJ1Y3QgbmV0ICpuZXRfbnMsDQorCQkgICAgICBjaGFyIGlwX2FkZHJb SU5FVDZfQUREUlNUUkxFTl0sDQorCQkgICAgICB1MTYgcG9ydCwNCisJCSAgICAgIHZvaWQgKmN0 eCwNCisJCSAgICAgIHZvaWQgKCpjdHhfY2FsbGJhY2spKHZvaWQgKmN0eCwNCisJCQkJCSAgIGVu dW0gbWF1c2JfY2hhbm5lbCBjaGFubmVsLA0KKwkJCQkJICAgZW51bSBtYXVzYl9saW5rX2FjdGlv biBhY3QsDQorCQkJCQkgICBpbnQgc3RhdHVzLCB2b2lkICpkYXRhKSwNCisJCSAgICAgIGVudW0g bWF1c2JfY2hhbm5lbCBjaGFubmVsKTsNCitpbnQgbWF1c2JfaXBfZGlzY29ubmVjdChzdHJ1Y3Qg bWF1c2JfaXBfY3R4ICppcF9jdHgpOw0KK2ludCBtYXVzYl9pcF9zZW5kKHN0cnVjdCBtYXVzYl9p cF9jdHggKmlwX2N0eCwNCisJCSAgc3RydWN0IG1hdXNiX2t2ZWNfZGF0YV93cmFwcGVyICp3cmFw cGVyKTsNCisNCit2b2lkIG1hdXNiX2Rlc3Ryb3lfaXBfY3R4KHN0cnVjdCBtYXVzYl9pcF9jdHgg KmlwX2N0eCk7DQordm9pZCBtYXVzYl9pcF9jb25uZWN0X2FzeW5jKHN0cnVjdCBtYXVzYl9pcF9j dHggKmlwX2N0eCk7DQorDQorI2VuZGlmIC8qIF9fTUFVU0JfTElOS19NQVVTQl9JUF9MSU5LX0hf XyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9t YXVzYl9kYXRhX2l0ZXJhdG9yLmggYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvdXRp bHMvbWF1c2JfZGF0YV9pdGVyYXRvci5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMDAwLi4zNTRiNDdmNDJiN2ENCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNi L21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9yLmgNCkBAIC0wLDAg KzEsNTIgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQor ICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0K KyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJ TkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRl dGFpbHMuDQorICovDQorI2lmbmRlZiBfX01BVVNCX1VUSUxTX01BVVNCX0RBVEFfSVRFUkFUT1Jf SF9fDQorI2RlZmluZSBfX01BVVNCX1VUSUxTX01BVVNCX0RBVEFfSVRFUkFUT1JfSF9fDQorDQor I2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4N CisjaW5jbHVkZSA8bGludXgvdWlvLmg+DQorDQorc3RydWN0IG1hdXNiX2RhdGFfaXRlciB7DQor CXUzMiBsZW5ndGg7DQorDQorCXZvaWQgKmJ1ZmZlcjsNCisJdTMyICBidWZmZXJfbGVuOw0KKwl1 MzIgIG9mZnNldDsNCisNCisJc3RydWN0IHNjYXR0ZXJsaXN0CSpzZzsNCisJc3RydWN0IHNnX21h cHBpbmdfaXRlcglzZ19pdGVyOw0KKwlib29sCQlzZ19zdGFydGVkOw0KKwl1bnNpZ25lZCBpbnQJ bnVtX3NnczsNCisJdW5zaWduZWQgaW50CWZsYWdzOw0KK307DQorDQorc3RydWN0IG1hdXNiX3Bh eWxvYWRfY2h1bmsgew0KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3RfZW50cnk7DQorCXN0cnVjdCBr dmVjCSBrdmVjOw0KK307DQorDQoraW50IG1hdXNiX2RhdGFfaXRlcmF0b3JfcmVhZChzdHJ1Y3Qg bWF1c2JfZGF0YV9pdGVyICppdGVyYXRvciwNCisJCQkgICAgIHUzMiBieXRlX251bSwNCisJCQkg ICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRhdGFfY2h1bmtzX2xpc3QsDQorCQkJICAgICB1MzIgKmRh dGFfY2h1bmtzX251bSk7DQorDQordTMyIG1hdXNiX2RhdGFfaXRlcmF0b3JfbGVuZ3RoKHN0cnVj dCBtYXVzYl9kYXRhX2l0ZXIgKml0ZXJhdG9yKTsNCit1MzIgbWF1c2JfZGF0YV9pdGVyYXRvcl93 cml0ZShzdHJ1Y3QgbWF1c2JfZGF0YV9pdGVyICppdGVyYXRvciwgdm9pZCAqYnVmZmVyLA0KKwkJ CSAgICAgIHUzMiBsZW5ndGgpOw0KKw0KK3ZvaWQgbWF1c2JfaW5pdF9kYXRhX2l0ZXJhdG9yKHN0 cnVjdCBtYXVzYl9kYXRhX2l0ZXIgKml0ZXJhdG9yLA0KKwkJCSAgICAgIHZvaWQgKmJ1ZmZlciwg dTMyIGJ1ZmZlcl9sZW4sDQorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWdu ZWQgaW50IG51bV9zZ3MsDQorCQkJICAgICAgYm9vbCBkaXJlY3Rpb24pOw0KK3ZvaWQgbWF1c2Jf cmVzZXRfZGF0YV9pdGVyYXRvcihzdHJ1Y3QgbWF1c2JfZGF0YV9pdGVyICppdGVyYXRvcik7DQor dm9pZCBtYXVzYl91bmluaXRfZGF0YV9pdGVyYXRvcihzdHJ1Y3QgbWF1c2JfZGF0YV9pdGVyICpp dGVyYXRvcik7DQordm9pZCBtYXVzYl9kYXRhX2l0ZXJhdG9yX3NlZWsoc3RydWN0IG1hdXNiX2Rh dGFfaXRlciAqaXRlcmF0b3IsIHUzMiBzZWVrX2RlbHRhKTsNCisNCisjZW5kaWYgLyogX19NQVVT Ql9VVElMU19NQVVTQl9EQVRBX0lURVJBVE9SX0hfXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl9sb2dzLmggYi9kcml2ZXJzL3VzYi9t YXVzYl9ob3N0L2luY2x1ZGUvdXRpbHMvbWF1c2JfbG9ncy5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5kNTEwMDYxZDJjMzQNCi0tLSAvZGV2L251bGwNCisrKyBi L2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl9sb2dzLmgNCkBAIC0w LDAgKzEsMzUgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8q DQorICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisg Kg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENP UFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3Jl IGRldGFpbHMuDQorICovDQorI2lmbmRlZiBfX01BVVNCX1VUSUxTX01BVVNCX0xPR1NfSF9fDQor I2RlZmluZSBfX01BVVNCX1VUSUxTX01BVVNCX0xPR1NfSF9fDQorDQorI2lmZGVmIE1BVVNCX1dJ VEhfTE9HUw0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0KKyNkZWZpbmUgbWF1c2JfcHJfbG9n cyhsZXZlbF9zdHIsIGxldmVsLCBsb2csIC4uLilcDQorCXByXyMjbGV2ZWxfc3RyKCJNQVVTQiAi ICNsZXZlbCAiIFsleDoleF0gWyVzXSAiIGxvZyAiXG4iLFwNCisJY3VycmVudC0+cGlkLCBjdXJy ZW50LT50Z2lkLCBfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXykNCisjZWxzZQ0KKyNkZWZpbmUgbWF1 c2JfcHJfbG9ncyguLi4pDQorI2VuZGlmIC8qIE1BVVNCX1dJVEhfTE9HUyAqLw0KKw0KKyNkZWZp bmUgbWF1c2JfcHJfYWxlcnQoLi4uKSBtYXVzYl9wcl9sb2dzKGFsZXJ0LCAxLCAjI19fVkFfQVJH U19fKQ0KKw0KKyNkZWZpbmUgbWF1c2JfcHJfZXJyKC4uLikgbWF1c2JfcHJfbG9ncyhlcnIsIDIs ICMjX19WQV9BUkdTX18pDQorDQorI2RlZmluZSBtYXVzYl9wcl93YXJuKC4uLikgbWF1c2JfcHJf bG9ncyh3YXJuLCAzLCAjI19fVkFfQVJHU19fKQ0KKw0KKyNkZWZpbmUgbWF1c2JfcHJfaW5mbygu Li4pICBtYXVzYl9wcl9sb2dzKGluZm8sIDQsICMjX19WQV9BUkdTX18pDQorDQorI2lmIGRlZmlu ZWQoTUFVU0JfTE9HX1ZFUkJPU0UpDQorCSNkZWZpbmUgbWF1c2JfcHJfZGVidWcoLi4uKSBtYXVz Yl9wcl9sb2dzKGRlYnVnLCA1LCAjI19fVkFfQVJHU19fKQ0KKyNlbHNlDQorCSNkZWZpbmUgbWF1 c2JfcHJfZGVidWcoLi4uKQ0KKyNlbmRpZiAvKiBkZWZpbmVkKE1BVVNCX0xPR19WRVJCT1NFKSAq Lw0KKw0KKyNlbmRpZiAvKiBfX01BVVNCX1VUSUxTX01BVVNCX0xPR1NfSF9fICovDQpkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL3V0aWxzL21hdXNiX21tYXAuaCBi L2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVzYl9tbWFwLmgNCm5ldyBm aWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmVmYTQzODlmYmIwYg0KLS0tIC9k ZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL3V0aWxzL21hdXNi X21tYXAuaA0KQEAgLTAsMCArMSwyMSBAQA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wICovDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3BsYXlMaW5r IChVSykgTHRkLg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHYyLiBT ZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZl IGZvcg0KKyAqIG1vcmUgZGV0YWlscy4NCisgKi8NCisjaWZuZGVmIF9fTUFVU0JfVVRJTFNfTUFV U0JfTU1BUF9IX18NCisjZGVmaW5lIF9fTUFVU0JfVVRJTFNfTUFVU0JfTU1BUF9IX18NCisNCisj aW5jbHVkZSAidXRpbHMvbWF1c2JfcmluZ19idWZmZXIuaCINCisNCitpbnQgbWF1c2JfY3JlYXRl X2Rldih2b2lkKTsNCisNCit2b2lkIG1hdXNiX2NsZWFudXBfZGV2KGludCBkZXZpY2VfY3JlYXRl ZCk7DQordm9pZCBtYXVzYl9ub3RpZnlfY29tcGxldGVkX3VzZXJfZXZlbnRzKHN0cnVjdCBtYXVz Yl9yaW5nX2J1ZmZlciAqcmluZ19idWZmZXIpOw0KK3ZvaWQgbWF1c2Jfbm90aWZ5X3JpbmdfZXZl bnRzKHN0cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAqcmluZ19idWZmZXIpOw0KK3ZvaWQgbWF1c2Jf c3RvcF9yaW5nX2V2ZW50cyh2b2lkKTsNCisNCisjZW5kaWYgLyogX19NQVVTQl9VVElMU19NQVVT Ql9NTUFQX0hfXyAqLw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVk ZS91dGlscy9tYXVzYl9yaW5nX2J1ZmZlci5oIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9pbmNs dWRlL3V0aWxzL21hdXNiX3JpbmdfYnVmZmVyLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAuLjQ2NWJhZDg3YWE4OQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy91c2IvbWF1c2JfaG9zdC9pbmNsdWRlL3V0aWxzL21hdXNiX3JpbmdfYnVmZmVyLmgNCkBAIC0w LDAgKzEsNjcgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8q DQorICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisg Kg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENP UFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3Jl IGRldGFpbHMuDQorICovDQorI2lmbmRlZiBfX19NQVVTQl9VVElMU19NQVVTQl9SSU5HX0JVRkZF Ul9IX18NCisjZGVmaW5lIF9fX01BVVNCX1VUSUxTX01BVVNCX1JJTkdfQlVGRkVSX0hfXw0KKw0K KyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+DQor DQorI2luY2x1ZGUgImNvbW1vbi9tYXVzYl9ldmVudC5oIg0KKyNpbmNsdWRlICJ1dGlscy9tYXVz Yl9sb2dzLmgiDQorDQorc3RydWN0IG1hdXNiX3JpbmdfYnVmZmVyIHsNCisJYXRvbWljX3QgbWF1 c2JfcmluZ19ldmVudHM7DQorCWF0b21pY190IG1hdXNiX2NvbXBsZXRlZF91c2VyX2V2ZW50czsN CisNCisJc3RydWN0IG1hdXNiX2V2ZW50ICp0b191c2VyX2J1ZmZlcjsNCisJaW50CQloZWFkOw0K KwlpbnQJCXRhaWw7DQorCXNwaW5sb2NrX3QJbG9jazsgLyogUHJvdGVjdCByaW5nIGJ1ZmZlciAq Lw0KKwl1NjQJCWlkOw0KKw0KKwlzdHJ1Y3QgbWF1c2JfZXZlbnQgKmZyb21fdXNlcl9idWZmZXI7 DQorCWludCBjdXJyZW50X2Zyb21fdXNlcjsNCisNCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2Vu dHJ5Ow0KKwlib29sIGJ1ZmZlcl9mdWxsOw0KK307DQorDQoraW50IG1hdXNiX3JpbmdfYnVmZmVy X2luaXQoc3RydWN0IG1hdXNiX3JpbmdfYnVmZmVyICpyaW5nKTsNCitpbnQgbWF1c2JfcmluZ19i dWZmZXJfcHV0KHN0cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAqcmluZywNCisJCQkgIHN0cnVjdCBt YXVzYl9ldmVudCAqZXZlbnQpOw0KK2ludCBtYXVzYl9yaW5nX2J1ZmZlcl9tb3ZlX3RhaWwoc3Ry dWN0IG1hdXNiX3JpbmdfYnVmZmVyICpyaW5nLCB1MzIgY291bnQpOw0KK3ZvaWQgbWF1c2Jfcmlu Z19idWZmZXJfY2xlYW51cChzdHJ1Y3QgbWF1c2JfcmluZ19idWZmZXIgKnJpbmcpOw0KK3ZvaWQg bWF1c2JfcmluZ19idWZmZXJfZGVzdHJveShzdHJ1Y3QgbWF1c2JfcmluZ19idWZmZXIgKnJpbmcp Ow0KK3ZvaWQgbWF1c2JfY2xlYW51cF9yaW5nX2J1ZmZlcl9ldmVudChzdHJ1Y3QgbWF1c2JfZXZl bnQgKmV2ZW50KTsNCit2b2lkIG1hdXNiX2Rpc2NvbmVjdF9ldmVudF91bnNhZmUoc3RydWN0IG1h dXNiX3JpbmdfYnVmZmVyICpyaW5nLA0KKwkJCQkgIHVpbnQ4X3QgbWFkZXZfYWRkcik7DQorDQor c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWF1c2JfZ2V0X3BhZ2Vfb3JkZXIodW5zaWduZWQg aW50IG51bV9vZl9lbGVtcywNCisJCQkJCQl1bnNpZ25lZCBpbnQgZWxlbV9zaXplKQ0KK3sNCisJ dW5zaWduZWQgaW50IG51bV9vZl9wYWdlcyA9IERJVl9ST1VORF9VUChudW1fb2ZfZWxlbXMgKiBl bGVtX3NpemUsDQorCQkJCQkJIFBBR0VfU0laRSk7DQorCXVuc2lnbmVkIGludCBvcmRlciA9ICh1 bnNpZ25lZCBpbnQpaWxvZzIobnVtX29mX3BhZ2VzKSArDQorCQkJCQkoaXNfcG93ZXJfb2ZfMihu dW1fb2ZfcGFnZXMpID8gMCA6IDEpOw0KKwlyZXR1cm4gb3JkZXI7DQorfQ0KKw0KK3N0YXRpYyBp bmxpbmUNCitzdHJ1Y3QgbWF1c2JfZXZlbnQgKm1hdXNiX3JpbmdfY3VycmVudF9mcm9tX3VzZXIo c3RydWN0IG1hdXNiX3JpbmdfYnVmZmVyICpyaW5nKQ0KK3sNCisJcmV0dXJuIHJpbmctPmZyb21f dXNlcl9idWZmZXIgKyByaW5nLT5jdXJyZW50X2Zyb21fdXNlcjsNCit9DQorDQorc3RhdGljIGlu bGluZSB2b2lkIG1hdXNiX3JpbmdfbmV4dF9mcm9tX3VzZXIoc3RydWN0IG1hdXNiX3JpbmdfYnVm ZmVyICpyaW5nKQ0KK3sNCisJcmluZy0+Y3VycmVudF9mcm9tX3VzZXIgPSAocmluZy0+Y3VycmVu dF9mcm9tX3VzZXIgKyAxKSAmDQorCQkJCSAgKE1BVVNCX1JJTkdfQlVGRkVSX1NJWkUgLSAxKTsN Cit9DQorDQorI2VuZGlmIC8qIF9fX01BVVNCX1VUSUxTX01BVVNCX1JJTkdfQlVGRkVSX0hfXyAq Lw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5jbHVkZS91dGlscy9tYXVz Yl92ZXJzaW9uLmggYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L2luY2x1ZGUvdXRpbHMvbWF1c2Jf dmVyc2lvbi5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5jMmM0 NWVjZDg4ODUNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3QvaW5j bHVkZS91dGlscy9tYXVzYl92ZXJzaW9uLmgNCkBAIC0wLDAgKzEsMTcgQEANCisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5 IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJq ZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj DQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0 b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICovDQorI2lmbmRl ZiBfX01BVVNCX1VUSUxTX01BVVNCX1ZFUlNJT05fSF9fDQorI2RlZmluZSBfX01BVVNCX1VUSUxT X01BVVNCX1ZFUlNJT05fSF9fDQorDQorI2RlZmluZSBNQVVTQl9TVFJJTkdJRlkyKHgpICN4DQor I2RlZmluZSBNQVVTQl9TVFJJTkdJRlkoeCkgTUFVU0JfU1RSSU5HSUZZMih4KQ0KKw0KKyNkZWZp bmUgTUFVU0JfRFJJVkVSX1ZFUlNJT04gTUFVU0JfU1RSSU5HSUZZKDEuMS4wLjAuOWY2YzQ4NjEp DQorDQorI2VuZGlmIC8qIF9fTUFVU0JfVVRJTFNfTUFVU0JfVkVSU0lPTl9IX18gKi8NCmRpZmYg LS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9oY2QvaHViLmMgYi9kcml2ZXJzL3Vz Yi9tYXVzYl9ob3N0L3NyYy9oY2QvaHViLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAw MDAwMDAwMDAwMDAuLjcwNjM0ODBkNTY2ZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91 c2IvbWF1c2JfaG9zdC9zcmMvaGNkL2h1Yi5jDQpAQCAtMCwwICsxLDE2ODIgQEANCisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5 IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJq ZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj DQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0 b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICovDQorI2luY2x1 ZGUgImhjZC9odWIuaCINCisNCisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+DQorI2luY2x1ZGUg PGxpbnV4L3ZlcnNpb24uaD4NCisNCisjaW5jbHVkZSAiaGNkL3ZoY2QuaCINCisjaW5jbHVkZSAi aHBhbC9ocGFsLmgiDQorI2luY2x1ZGUgImhwYWwvbWF1c2JfZXZlbnRzLmgiDQorI2luY2x1ZGUg InV0aWxzL21hdXNiX2xvZ3MuaCINCisNCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZVtd ID0gIk1BLVVTQiBob3N0IGNvbnRyb2xsZXIiOw0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2dldF9o dWJfZGVzY3JpcHRvcihzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZV9yZXEsDQorCQkJCSAg ICAgdTE2IHZhbHVlLCB1MTYgaW5kZXgsDQorCQkJCSAgICAgY2hhciAqYnVmZiwgdTE2IGxlbmd0 aCk7DQorc3RhdGljIHZvaWQgbWF1c2Jfc2V0X3BvcnRfZmVhdHVyZShzdHJ1Y3QgdXNiX2hjZCAq aGNkLCB1MTYgdHlwZV9yZXEsDQorCQkJCSAgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjaGFyICpi dWZmLA0KKwkJCQkgICB1MTYgbGVuZ3RoKTsNCitzdGF0aWMgdm9pZCBtYXVzYl9nZXRfcG9ydF9z dGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVfcmVxLA0KKwkJCQkgIHUxNiB2YWx1 ZSwgdTE2IGluZGV4LCBjaGFyICpidWZmLA0KKwkJCQkgIHUxNiBsZW5ndGgpOw0KK3N0YXRpYyB2 b2lkIG1hdXNiX2NsZWFyX3BvcnRfZmVhdHVyZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlw ZV9yZXEsDQorCQkJCSAgICAgdTE2IHZhbHVlLCB1MTYgaW5kZXgsDQorCQkJCSAgICAgY2hhciAq YnVmZiwgdTE2IGxlbmd0aCk7DQorc3RhdGljIHZvaWQgbWF1c2JfZ2V0X2h1Yl9zdGF0dXMoc3Ry dWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVfcmVxLA0KKwkJCQkgdTE2IHZhbHVlLCB1MTYgaW5k ZXgsIGNoYXIgKmJ1ZmYsDQorCQkJCSB1MTYgbGVuZ3RoKTsNCitzdGF0aWMgaW50IG1hdXNiX2Fk ZF9lbmRwb2ludChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LA0K KwkJCSAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQpOw0KK3N0YXRpYyBp bnQgbWF1c2JfYWRkcmVzc19kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9k ZXZpY2UgKmRldik7DQorc3RhdGljIGludCBtYXVzYl9hbGxvY19kZXYoc3RydWN0IHVzYl9oY2Qg KmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldik7DQorc3RhdGljIGludCBtYXVzYl9jaGVja19i YW5kd2lkdGgoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldik7DQor c3RhdGljIGludCBtYXVzYl9kcm9wX2VuZHBvaW50KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVj dCB1c2JfZGV2aWNlICpkZXYsDQorCQkJICAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAq ZW5kcG9pbnQpOw0KK3N0YXRpYyBpbnQgbWF1c2JfZW5hYmxlX2RldmljZShzdHJ1Y3QgdXNiX2hj ZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsNCitzdGF0aWMgdm9pZCBtYXVzYl9lbmRw b2ludF9kaXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsDQorCQkJCSAgIHN0cnVjdCB1c2JfaG9z dF9lbmRwb2ludCAqZW5kcG9pbnQpOw0KK3N0YXRpYyB2b2lkIG1hdXNiX2VuZHBvaW50X3Jlc2V0 KHN0cnVjdCB1c2JfaGNkICpoY2QsDQorCQkJCSBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVu ZHBvaW50KTsNCitzdGF0aWMgdm9pZCBtYXVzYl9mcmVlX2RldihzdHJ1Y3QgdXNiX2hjZCAqaGNk LCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsNCitzdGF0aWMgaW50IG1hdXNiX2hjZF9idXNfcmVz dW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpOw0KK3N0YXRpYyBpbnQgbWF1c2JfaGNkX2J1c19zdXNw ZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpOw0KK3N0YXRpYyBpbnQgbWF1c2JfaGNkX2dldF9mcmFt ZV9udW1iZXIoc3RydWN0IHVzYl9oY2QgKmhjZCk7DQorc3RhdGljIGludCBtYXVzYl9oY2RfaHVi X2NvbnRyb2woc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVfcmVxLA0KKwkJCQkgdTE2IHZh bHVlLCB1MTYgaW5kZXgsIGNoYXIgKmJ1ZmYsDQorCQkJCSB1MTYgbGVuZ3RoKTsNCitzdGF0aWMg aW50IG1hdXNiX2hjZF9odWJfc3RhdHVzKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZmYp Ow0KK3N0YXRpYyBpbnQgbWF1c2JfaGNkX3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QpOw0KK3N0 YXRpYyBpbnQgbWF1c2JfaGNkX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpOw0KK3N0YXRpYyB2 b2lkIG1hdXNiX2hjZF9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpOw0KK3N0YXRpYyBpbnQgbWF1 c2JfaGNkX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwN CisJCQkJIGludCBzdGF0dXMpOw0KK3N0YXRpYyBpbnQgbWF1c2JfaGNkX3VyYl9lbnF1ZXVlKHN0 cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwNCisJCQkJIGdmcF90IG1lbV9mbGFn cyk7DQorc3RhdGljIGludCBtYXVzYl9odWJfdXBkYXRlX2RldmljZShzdHJ1Y3QgdXNiX2hjZCAq aGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LA0KKwkJCQkgICBzdHJ1Y3QgdXNiX3R0ICp0dCwg Z2ZwX3QgbWVtX2ZsYWdzKTsNCitzdGF0aWMgdm9pZCBtYXVzYl9yZXNldF9iYW5kd2lkdGgoc3Ry dWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldik7DQorc3RhdGljIGludCBt YXVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2Ug KmRldik7DQorc3RhdGljIGludCBtYXVzYl91cGRhdGVfZGV2aWNlKHN0cnVjdCB1c2JfaGNkICpo Y2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOw0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX3ByaW50 X3VyYihzdHJ1Y3QgdXJiICpyZXF1ZXN0KQ0KK3sNCisJbWF1c2JfcHJfZGVidWcoIlVSQjogdXJi PSVwLCBlcF9oYW5kbGU9JSN4LCBwYWNrZXRfbnVtPSVkLCBzZXR1cF9kbWE9JWxsZCwgaXNfc2V0 dXBfcGFja2V0PSVkLCBpc19lcD0lZCwgaXNfc2c9JWQsIG51bV9zZ3M9JWQsIG51bV9tYXBwZWRf c2dzPSVkLCBzdGF0dXM9JWQsIGlzX3RyYW5zZmVyX2J1ZmZlcj0lZCwgdHJhbnNmZXJfYnVmZmVy X2xlbmd0aD0lZCwgaXNfdHJhbnNmZXJfZG1hPSVsbHUsIHRyYW5zZmVyX2ZsYWdzPSVkLCBpc19o Y3ByaXY9JWQiLA0KKwkJICAgICAgIHJlcXVlc3QsICgoc3RydWN0IG1hdXNiX2VuZHBvaW50X2N0 eCAqKQ0KKwkJCQkgcmVxdWVzdC0+ZXAtPmhjcHJpdiktPmVwX2hhbmRsZSwNCisJCSAgICAgICBy ZXF1ZXN0LT5udW1iZXJfb2ZfcGFja2V0cywgcmVxdWVzdC0+c2V0dXBfZG1hLA0KKwkJICAgICAg IHJlcXVlc3QtPnNldHVwX3BhY2tldCA/IDEgOiAwLCByZXF1ZXN0LT5lcCA/IDEgOiAwLA0KKwkJ ICAgICAgIHJlcXVlc3QtPnNnID8gMSA6IDAsIHJlcXVlc3QtPm51bV9zZ3MsDQorCQkgICAgICAg cmVxdWVzdC0+bnVtX21hcHBlZF9zZ3MsIHJlcXVlc3QtPnN0YXR1cywNCisJCSAgICAgICByZXF1 ZXN0LT50cmFuc2Zlcl9idWZmZXIgPyAxIDogMCwNCisJCSAgICAgICByZXF1ZXN0LT50cmFuc2Zl cl9idWZmZXJfbGVuZ3RoLA0KKwkJICAgICAgIHJlcXVlc3QtPnRyYW5zZmVyX2RtYSwgcmVxdWVz dC0+dHJhbnNmZXJfZmxhZ3MsDQorCQkgICAgICAgKHJlcXVlc3QtPmVwICYmIHJlcXVlc3QtPmVw LT5oY3ByaXYpID8gMSA6IDApOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZl ciBtYXVzYl9oY19kcml2ZXIgPSB7DQorCS5kZXNjcmlwdGlvbiAgPSAgZHJpdmVyX25hbWUsDQor CS5wcm9kdWN0X2Rlc2MgPSBkcml2ZXJfbmFtZSwNCisJLmZsYWdzCSAgICAgID0gSENEX1VTQjMg fCBIQ0RfU0hBUkVELA0KKw0KKwkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHViX2N0 eCksDQorDQorCS5yZXNldCA9IG1hdXNiX2hjZF9yZXNldCwNCisJLnN0YXJ0ID0gbWF1c2JfaGNk X3N0YXJ0LA0KKwkuc3RvcCAgPSBtYXVzYl9oY2Rfc3RvcCwNCisNCisJLnVyYl9lbnF1ZXVlID0g bWF1c2JfaGNkX3VyYl9lbnF1ZXVlLA0KKwkudXJiX2RlcXVldWUgPSBtYXVzYl9oY2RfdXJiX2Rl cXVldWUsDQorDQorCS5nZXRfZnJhbWVfbnVtYmVyID0gbWF1c2JfaGNkX2dldF9mcmFtZV9udW1i ZXIsDQorDQorCS5odWJfc3RhdHVzX2RhdGEgICA9IG1hdXNiX2hjZF9odWJfc3RhdHVzLA0KKwku aHViX2NvbnRyb2wJICAgPSBtYXVzYl9oY2RfaHViX2NvbnRyb2wsDQorCS51cGRhdGVfaHViX2Rl dmljZSA9IG1hdXNiX2h1Yl91cGRhdGVfZGV2aWNlLA0KKwkuYnVzX3N1c3BlbmQJICAgPSBtYXVz Yl9oY2RfYnVzX3N1c3BlbmQsDQorCS5idXNfcmVzdW1lCSAgID0gbWF1c2JfaGNkX2J1c19yZXN1 bWUsDQorDQorCS5hbGxvY19kZXYJPSBtYXVzYl9hbGxvY19kZXYsDQorCS5mcmVlX2Rldgk9IG1h dXNiX2ZyZWVfZGV2LA0KKwkuZW5hYmxlX2RldmljZQk9IG1hdXNiX2VuYWJsZV9kZXZpY2UsDQor CS51cGRhdGVfZGV2aWNlCT0gbWF1c2JfdXBkYXRlX2RldmljZSwNCisJLnJlc2V0X2RldmljZQk9 IG1hdXNiX3Jlc2V0X2RldmljZSwNCisNCisJLmFkZF9lbmRwb2ludAkgID0gbWF1c2JfYWRkX2Vu ZHBvaW50LA0KKwkuZHJvcF9lbmRwb2ludAkgID0gbWF1c2JfZHJvcF9lbmRwb2ludCwNCisJLmNo ZWNrX2JhbmR3aWR0aCAgPSBtYXVzYl9jaGVja19iYW5kd2lkdGgsDQorCS5yZXNldF9iYW5kd2lk dGggID0gbWF1c2JfcmVzZXRfYmFuZHdpZHRoLA0KKwkuYWRkcmVzc19kZXZpY2UgICA9IG1hdXNi X2FkZHJlc3NfZGV2aWNlLA0KKwkuZW5kcG9pbnRfZGlzYWJsZSA9IG1hdXNiX2VuZHBvaW50X2Rp c2FibGUsDQorCS5lbmRwb2ludF9yZXNldAkgID0gbWF1c2JfZW5kcG9pbnRfcmVzZXQsDQorDQor I2lmZGVmIElTT0NIX0NBTExCQUNLUw0KKwkuc2VjX2V2ZW50X3Jpbmdfc2V0dXAJCT0gbWF1c2Jf c2VjX2V2ZW50X3Jpbmdfc2V0dXAsDQorCS5zZWNfZXZlbnRfcmluZ19jbGVhbnVwCQk9IG1hdXNi X3NlY19ldmVudF9yaW5nX2NsZWFudXAsDQorCS5nZXRfc2VjX2V2ZW50X3JpbmdfcGh5c19hZGRy CT0gbWF1c2JfZ2V0X3NlY19ldmVudF9yaW5nX3BoeXNfYWRkciwNCisJLmdldF94ZmVyX3Jpbmdf cGh5c19hZGRyCT0gbWF1c2JfZ2V0X3hmZXJfcmluZ19waHlzX2FkZHIsDQorCS5nZXRfY29yZV9p ZAkJCT0gbWF1c2JfZ2V0X2NvcmVfaWQNCisjZW5kaWYgLyogSVNPQ0hfQ0FMTEJBQ0tTICovDQor DQorfTsNCisNCitzdGF0aWMgc3RydWN0IHsNCisJc3RydWN0IHVzYl9ib3NfZGVzY3JpcHRvciAg ICBib3M7DQorCXN0cnVjdCB1c2Jfc3NfY2FwX2Rlc2NyaXB0b3Igc3NfY2FwOw0KK30gdXNiM19i b3NfZGVzYyA9IHsNCisJLmJvcyA9IHsNCisJCS5iTGVuZ3RoCSA9IFVTQl9EVF9CT1NfU0laRSwN CisJCS5iRGVzY3JpcHRvclR5cGUgPSBVU0JfRFRfQk9TLA0KKwkJLndUb3RhbExlbmd0aAkgPSBj cHVfdG9fbGUxNihzaXplb2YodXNiM19ib3NfZGVzYykpLA0KKwkJLmJOdW1EZXZpY2VDYXBzCSA9 IDENCisJfSwNCisJLnNzX2NhcCA9IHsNCisJCS5iTGVuZ3RoCQk9IFVTQl9EVF9VU0JfU1NfQ0FQ X1NJWkUsDQorCQkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0RFVklDRV9DQVBBQklMSVRZLA0K KwkJLmJEZXZDYXBhYmlsaXR5VHlwZQk9IFVTQl9TU19DQVBfVFlQRSwNCisJCS53U3BlZWRTdXBw b3J0ZWQJPSBjcHVfdG9fbGUxNihVU0JfNUdCUFNfT1BFUkFUSU9OKSwNCisJCS5iRnVuY3Rpb25h bGl0eVN1cHBvcnQJPSBpbG9nMihVU0JfNUdCUFNfT1BFUkFUSU9OKQ0KKwl9DQorfTsNCisNCitz dGF0aWMgaW50IGdldF9yb290X2h1Yl9wb3J0X251bWJlcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2 LCB1OCAqcG9ydF9udW1iZXIpDQorew0KKwlzdHJ1Y3QgdXNiX2RldmljZSAqZmlyc3RfaHViX2Rl dmljZSA9IGRldjsNCisNCisJaWYgKCFkZXYtPnBhcmVudCkgew0KKwkJbWF1c2JfcHJfaW5mbygi VHJ5aW5nIHRvIGdldCByb290aHViIHBvcnQgbnVtYmVyIik7DQorCQkoKnBvcnRfbnVtYmVyKSA9 IDA7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwl3aGlsZSAoZmlyc3RfaHViX2Rldmlj ZS0+cGFyZW50LT5wYXJlbnQpDQorCQlmaXJzdF9odWJfZGV2aWNlID0gZmlyc3RfaHViX2Rldmlj ZS0+cGFyZW50Ow0KKw0KKwkoKnBvcnRfbnVtYmVyKSA9IGZpcnN0X2h1Yl9kZXZpY2UtPnBvcnRu dW0gLSAxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCB1c2JfdG9fbWF1c2Jf ZGV2aWNlX3NwZWVkKHU4IHNwZWVkKQ0KK3sNCisJc3dpdGNoIChzcGVlZCkgew0KKwljYXNlIFVT Ql9TUEVFRF9MT1c6DQorCQlyZXR1cm4gTUFfVVNCX1NQRUVEX0xPV19TUEVFRDsNCisJY2FzZSBV U0JfU1BFRURfRlVMTDoNCisJCXJldHVybiBNQV9VU0JfU1BFRURfRlVMTF9TUEVFRDsNCisJY2Fz ZSBVU0JfU1BFRURfV0lSRUxFU1M6DQorCWNhc2UgVVNCX1NQRUVEX0hJR0g6DQorCQlyZXR1cm4g TUFfVVNCX1NQRUVEX0hJR0hfU1BFRUQ7DQorCWNhc2UgVVNCX1NQRUVEX1NVUEVSOg0KKwkJcmV0 dXJuIE1BX1VTQl9TUEVFRF9TVVBFUl9TUEVFRDsNCisJY2FzZSBVU0JfU1BFRURfU1VQRVJfUExV UzoNCisJCXJldHVybiBNQV9VU0JfU1BFRURfU1VQRVJfU1BFRURfUExVUzsNCisJZGVmYXVsdDoN CisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgbWF1c2JfdXNi X2RldmljZV9jdHggKm1hdXNiX2ZpbmRfdXNiX2RldmljZShzdHJ1Y3QgbWF1c2JfZGV2DQorCQkJ CQkJCSptZGV2cywgdm9pZCAqZGV2X2FkZHIpDQorew0KKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZSA9 IG1kZXZzLT51c2JfZGV2aWNlcy5yYl9ub2RlOw0KKw0KKwl3aGlsZSAobm9kZSkgew0KKwkJc3Ry dWN0IG1hdXNiX3VzYl9kZXZpY2VfY3R4ICp1c2JfZGV2aWNlID0NCisJCSAgICByYl9lbnRyeShu b2RlLCBzdHJ1Y3QgbWF1c2JfdXNiX2RldmljZV9jdHgsIHJiX25vZGUpOw0KKw0KKwkJaWYgKGRl dl9hZGRyIDwgdXNiX2RldmljZS0+ZGV2X2FkZHIpDQorCQkJbm9kZSA9IHVzYl9kZXZpY2UtPnJi X25vZGUucmJfbGVmdDsNCisJCWVsc2UgaWYgKGRldl9hZGRyID4gdXNiX2RldmljZS0+ZGV2X2Fk ZHIpDQorCQkJbm9kZSA9IHVzYl9kZXZpY2UtPnJiX25vZGUucmJfcmlnaHQ7DQorCQllbHNlDQor CQkJcmV0dXJuIHVzYl9kZXZpY2U7DQorCX0NCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRp YyBpbnQgbWF1c2JfaW5zZXJ0X3VzYl9kZXZpY2Uoc3RydWN0IG1hdXNiX2RldiAqbWRldnMsDQor CQkJCSAgIHN0cnVjdCBtYXVzYl91c2JfZGV2aWNlX2N0eCAqdXNiX2RldmljZSkNCit7DQorCXN0 cnVjdCByYl9ub2RlICoqbmV3X25vZGUgPSAmbWRldnMtPnVzYl9kZXZpY2VzLnJiX25vZGU7DQor CXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOw0KKwlzdHJ1Y3QgbWF1c2JfdXNiX2Rldmlj ZV9jdHggKmN1cnJlbnRfdXNiX2RldmljZSA9IE5VTEw7DQorDQorCXdoaWxlICgqbmV3X25vZGUp IHsNCisJCXBhcmVudCA9ICpuZXdfbm9kZTsNCisJCWN1cnJlbnRfdXNiX2RldmljZSA9IHJiX2Vu dHJ5KCpuZXdfbm9kZSwNCisJCQkJCSAgICAgIHN0cnVjdCBtYXVzYl91c2JfZGV2aWNlX2N0eCwN CisJCQkJCSAgICAgIHJiX25vZGUpOw0KKw0KKwkJaWYgKHVzYl9kZXZpY2UtPmRldl9hZGRyIDwg Y3VycmVudF91c2JfZGV2aWNlLT5kZXZfYWRkcikNCisJCQluZXdfbm9kZSA9ICYoKCpuZXdfbm9k ZSktPnJiX2xlZnQpOw0KKwkJZWxzZSBpZiAodXNiX2RldmljZS0+ZGV2X2FkZHIgPiBjdXJyZW50 X3VzYl9kZXZpY2UtPmRldl9hZGRyKQ0KKwkJCW5ld19ub2RlID0gJigoKm5ld19ub2RlKS0+cmJf cmlnaHQpOw0KKwkJZWxzZQ0KKwkJCXJldHVybiAtRUVYSVNUOw0KKwl9DQorCXJiX2xpbmtfbm9k ZSgmdXNiX2RldmljZS0+cmJfbm9kZSwgcGFyZW50LCBuZXdfbm9kZSk7DQorCXJiX2luc2VydF9j b2xvcigmdXNiX2RldmljZS0+cmJfbm9kZSwgJm1kZXZzLT51c2JfZGV2aWNlcyk7DQorCXJldHVy biAwOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX2hjZF9nZXRfZnJhbWVfbnVtYmVyKHN0cnVj dCB1c2JfaGNkICpoY2QpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtYXVz Yl9oY2RfcmVzZXQoc3RydWN0IHVzYl9oY2QgKmhjZCkNCit7DQorCWlmICh1c2JfaGNkX2lzX3By aW1hcnlfaGNkKGhjZCkpIHsNCisJCWhjZC0+c3BlZWQgPSBIQ0RfVVNCMjsNCisJCWhjZC0+c2Vs Zi5yb290X2h1Yi0+c3BlZWQgPSBVU0JfU1BFRURfSElHSDsNCisJfSBlbHNlIHsNCisJCWhjZC0+ c3BlZWQgPSBIQ0RfVVNCMzsNCisJCWhjZC0+c2VsZi5yb290X2h1Yi0+c3BlZWQgPSBVU0JfU1BF RURfU1VQRVI7DQorCX0NCisJaGNkLT5zZWxmLm5vX3NnX2NvbnN0cmFpbnQgPSAxOw0KKwloY2Qt PnNlbGYuc2dfdGFibGVzaXplID0gVUlOVF9NQVg7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IG1hdXNiX2hjZF9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQ0KK3sNCisJaGNk LT5wb3dlcl9idWRnZXQgPSAwOw0KKwloY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1c2JfaGNkX3N0b3Aoc3RydWN0IHVzYl9oY2Qg KmhjZCkNCit7DQorCW1hdXNiX3ByX2RlYnVnKCJOb3QgaW1wbGVtZW50ZWQiKTsNCit9DQorDQor c3RhdGljIGludCBtYXVzYl9oY2RfaHViX3N0YXR1cyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBjaGFy ICpidWZmKQ0KK3sNCisJaW50IHJldHZhbDsNCisJaW50IGNoYW5nZWQ7DQorCWludCBpOw0KKwlz dHJ1Y3QgaHViX2N0eCAqaHViOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJaHVi ID0gKHN0cnVjdCBodWJfY3R4ICopaGNkLT5oY2RfcHJpdjsNCisNCisJcmV0dmFsICA9IERJVl9S T1VORF9VUChOVU1CRVJfT0ZfUE9SVFMgKyAxLCA4KTsNCisJY2hhbmdlZCA9IDA7DQorDQorCW1l bXNldChidWZmLCAwLCAodW5zaWduZWQgaW50KXJldHZhbCk7DQorDQorCXNwaW5fbG9ja19pcnFz YXZlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQorCWlmICghSENEX0hXX0FDQ0VTU0lCTEUoaGNk KSkgew0KKwkJbWF1c2JfcHJfaW5mbygiaGNkIG5vdCBhY2Nlc3NpYmxlLCBoY2Qgc3BlZWQ9JWQi LCBoY2QtPnNwZWVkKTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1oY2QtPmxvY2ssIGZs YWdzKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0Zf UE9SVFM7ICsraSkgew0KKwkJaWYgKChodWItPm1hX2RldnNbaV0ucG9ydF9zdGF0dXMgJiBQT1JU X0NfTUFTSykpIHsNCisJCQlidWZmWyhpICsgMSkgLyA4XSB8PSAxIDw8IChpICsgMSkgJSA4Ow0K KwkJCWNoYW5nZWQgPSAxOw0KKwkJfQ0KKwl9DQorDQorCW1hdXNiX3ByX2luZm8oIlVzYiAlZC4w IDogY2hhbmdlZD0lZCwgcmV0dmFsPSVkIiwNCisJCSAgICAgIChoY2QtPnNwZWVkID09IEhDRF9V U0IyKSA/IDIgOiAzLCBjaGFuZ2VkLCByZXR2YWwpOw0KKw0KKwlpZiAoaGNkLT5zdGF0ZSA9PSBI Q19TVEFURV9TVVNQRU5ERUQgJiYgY2hhbmdlZCA9PSAxKSB7DQorCQltYXVzYl9wcl9pbmZvKCJo Y2Qgc3RhdGUgaXMgc3VzcGVuZGVkIik7DQorCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2Qp Ow0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsN CisNCisJcmV0dXJuIGNoYW5nZWQgPyByZXR2YWwgOiAwOw0KK30NCisNCitzdGF0aWMgaW50IG1h dXNiX2hjZF9idXNfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpDQorew0KKwl1bnNpZ25lZCBs b25nIGZsYWdzID0gMDsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1oY2QtPmxvY2ssIGZsYWdz KTsNCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7DQorCQltYXVzYl9wcl9pbmZvKCJo Y2Qgbm90IGFjY2Vzc2libGUsIGhjZCBzcGVlZD0lZCIsIGhjZC0+c3BlZWQpOw0KKwkJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKwkJcmV0dXJuIC1FU0hVVERP V047DQorCX0NCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7DQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbWF1c2JfaGNkX2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfaGNkICpoY2QpDQor ew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1o Y2QtPmxvY2ssIGZsYWdzKTsNCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1NVU1BFTkRFRDsNCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGludCBtYXVzYl9oY2RfaHViX2NvbnRyb2woc3RydWN0IHVzYl9o Y2QgKmhjZCwgdTE2IHR5cGVfcmVxLA0KKwkJCQkgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIGNoYXIg KmJ1ZmYsDQorCQkJCSB1MTYgbGVuZ3RoKQ0KK3sNCisJaW50IHJldHZhbCA9IDA7DQorCXN0cnVj dCBodWJfY3R4CSAqaHViID0gKHN0cnVjdCBodWJfY3R4ICopaGNkLT5oY2RfcHJpdjsNCisJc3Ry dWN0IG1hdXNiX2hjZCAqaHViX21oY2QgPSBodWItPm1oY2Q7DQorCXVuc2lnbmVkIGxvbmcJIGZs YWdzOw0KKwlib29sIGludmFsaWRfcmhwb3J0ID0gZmFsc2U7DQorDQorCWluZGV4ID0gKChfX3U4 KShpbmRleCAmIDB4MDBmZikpOw0KKwlpZiAoaW5kZXggPCAxIHx8IGluZGV4ID4gTlVNQkVSX09G X1BPUlRTKQ0KKwkJaW52YWxpZF9yaHBvcnQgPSB0cnVlOw0KKw0KKwltYXVzYl9wcl9pbmZvKCJU eXBlUmVxPSVkIiwgdHlwZV9yZXEpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHViX21oY2Qt PmxvY2ssIGZsYWdzKTsNCisNCisJaWYgKCFIQ0RfSFdfQUNDRVNTSUJMRShoY2QpKSB7DQorCQlt YXVzYl9wcl9pbmZvKCJoY2Qgbm90IGFjY2Vzc2libGUsIGhjZCBzcGVlZD0lZCIsIGhjZC0+c3Bl ZWQpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHViX21oY2QtPmxvY2ssIGZsYWdzKTsN CisJCXJldHVybiAtRVRJTUVET1VUOw0KKwl9DQorDQorCXN3aXRjaCAodHlwZV9yZXEpIHsNCisJ Y2FzZSBDbGVhckh1YkZlYXR1cmU6DQorCQlicmVhazsNCisJY2FzZSBDbGVhclBvcnRGZWF0dXJl Og0KKwkJaWYgKGludmFsaWRfcmhwb3J0KQ0KKwkJCWdvdG8gaW52YWxpZF9wb3J0Ow0KKw0KKwkJ bWF1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKGhjZCwgdHlwZV9yZXEsIHZhbHVlLCBpbmRleCwgYnVm ZiwNCisJCQkJCSBsZW5ndGgpOw0KKwkJYnJlYWs7DQorCWNhc2UgRGV2aWNlUmVxdWVzdCB8IFVT Ql9SRVFfR0VUX0RFU0NSSVBUT1I6DQorCQltZW1jcHkoYnVmZiwgJnVzYjNfYm9zX2Rlc2MsIHNp emVvZih1c2IzX2Jvc19kZXNjKSk7DQorCQlyZXR2YWwgPSBzaXplb2YodXNiM19ib3NfZGVzYyk7 DQorCQlicmVhazsNCisJY2FzZSBHZXRIdWJEZXNjcmlwdG9yOg0KKwkJbWF1c2JfZ2V0X2h1Yl9k ZXNjcmlwdG9yKGhjZCwgdHlwZV9yZXEsIHZhbHVlLCBpbmRleCwgYnVmZiwNCisJCQkJCSBsZW5n dGgpOw0KKwkJYnJlYWs7DQorCWNhc2UgR2V0SHViU3RhdHVzOg0KKwkJbWF1c2JfZ2V0X2h1Yl9z dGF0dXMoaGNkLCB0eXBlX3JlcSwgdmFsdWUsIGluZGV4LCBidWZmLA0KKwkJCQkgICAgIGxlbmd0 aCk7DQorCQlicmVhazsNCisJY2FzZSBHZXRQb3J0U3RhdHVzOg0KKwkJaWYgKGludmFsaWRfcmhw b3J0KQ0KKwkJCWdvdG8gaW52YWxpZF9wb3J0Ow0KKw0KKwkJbWF1c2JfZ2V0X3BvcnRfc3RhdHVz KGhjZCwgdHlwZV9yZXEsIHZhbHVlLCBpbmRleCwgYnVmZiwNCisJCQkJICAgICAgbGVuZ3RoKTsN CisJCWJyZWFrOw0KKwljYXNlIFNldEh1YkZlYXR1cmU6DQorCQlyZXR2YWwgPSAtRVBJUEU7DQor CQlicmVhazsNCisJY2FzZSBTZXRQb3J0RmVhdHVyZToNCisJCWlmIChpbnZhbGlkX3JocG9ydCkN CisJCQlnb3RvIGludmFsaWRfcG9ydDsNCisNCisJCW1hdXNiX3NldF9wb3J0X2ZlYXR1cmUoaGNk LCB0eXBlX3JlcSwgdmFsdWUsIGluZGV4LCBidWZmLA0KKwkJCQkgICAgICAgbGVuZ3RoKTsNCisJ CWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0dmFsID0gLUVQSVBFOw0KKwl9DQorDQoraW52YWxp ZF9wb3J0Og0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodWJfbWhjZC0+bG9jaywgZmxhZ3Mp Ow0KKwlyZXR1cm4gcmV0dmFsOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX3ZhbGlkYXRlX3Vy YihzdHJ1Y3QgdXJiICp1cmIpDQorew0KKwlpZiAoIXVyYikgew0KKwkJbWF1c2JfcHJfZXJyKCJ1 cmIgaXMgTlVMTCIpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJaWYgKCF1cmItPmVw LT5oY3ByaXYpIHsNCisJCW1hdXNiX3ByX2VycigidXJiLT5lcC0+aGNwcml2IGlzIE5VTEwiKTsN CisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCWlmICghdXJiLT5lcC0+ZW5hYmxlZCkgew0K KwkJbWF1c2JfcHJfZXJyKCJFbmRwb2ludCBub3QgZW5hYmxlZCIpOw0KKwkJcmV0dXJuIC1FSU5W QUw7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfaGNkX3VyYl9l bnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwNCisJCQkJIGdmcF90 IG1lbV9mbGFncykNCit7DQorCXN0cnVjdCBtYXVzYl9lbmRwb2ludF9jdHggKmVuZHBvaW50X2N0 eDsNCisJc3RydWN0IG1hdXNiX2RldmljZQkgICptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl91cmJf Y3R4CSAgKnVyYl9jdHg7DQorCWludCBzdGF0dXMgPSAwOw0KKw0KKwlpZiAobWF1c2JfdmFsaWRh dGVfdXJiKHVyYikgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIkhwYWwgdXJiIGVucXVldWUgZmFp bGVkIik7DQorCQlyZXR1cm4gLUVQUk9UTzsNCisJfQ0KKw0KKwllbmRwb2ludF9jdHggPSB1cmIt PmVwLT5oY3ByaXY7DQorCW1hX2RldiA9IGVuZHBvaW50X2N0eC0+bWFfZGV2Ow0KKw0KKwlpZiAo YXRvbWljX3JlYWQoJm1hX2Rldi0+dW5yZXNwb25zaXZlX2NsaWVudCkpIHsNCisJCW1hdXNiX3By X2VycigiQ2xpZW50IGlzIG5vdCByZXNwb25zaXZlIGFueW1vcmUgLSBmaW5pc2ggdXJiIGltbWVk aWF0ZWx5Iik7DQorCQlyZXR1cm4gLUVIT1NURE9XTjsNCisJfQ0KKw0KKwl1cmItPmhjcHJpdiA9 IGhjZDsNCisNCisJbWF1c2JfcHJfZGVidWcoImVwX2hhbmRsZT0lI3gsIGRldl9oYW5kbGU9JSN4 LCB1cmJfcmVqZWN0PSVkIiwNCisJCSAgICAgICBlbmRwb2ludF9jdHgtPmVwX2hhbmRsZSwgZW5k cG9pbnRfY3R4LT5kZXZfaGFuZGxlLA0KKwkJICAgICAgIGF0b21pY19yZWFkKCZ1cmItPnJlamVj dCkpOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9pbnNlcnRfdXJiX2luX3RyZWUodXJiLCB0cnVlKTsN CisJaWYgKHN0YXR1cykgew0KKwkJbWF1c2JfcHJfZXJyKCJIcGFsIHVyYiBlbnF1ZXVlIGZhaWxl ZCIpOw0KKwkJcmV0dXJuIHN0YXR1czsNCisJfQ0KKw0KKwlhdG9taWNfaW5jKCZ1cmItPnVzZV9j b3VudCk7DQorDQorCW1hdXNiX3ByaW50X3VyYih1cmIpOw0KKw0KKwkvKg0KKwkgKiBNYXNraW5n IFVSQl9TSE9SVF9OT1RfT0sgZmxhZyBhcyBTQ1NJIGRyaXZlciBpcyBhZGRpbmcgaXQgd2hlcmUg aXQNCisJICogc2hvdWxkIG5vdCwgc28gaXQgaXMgYnJlYWtpbmcgdGhlIFVTQiBkcml2ZSBvbiB0 aGUgbGludXgNCisJICovDQorCXVyYi0+dHJhbnNmZXJfZmxhZ3MgJj0gflVSQl9TSE9SVF9OT1Rf T0s7DQorDQorCXN0YXR1cyA9IG1hdXNiX2RhdGFfcmVxX2VucXVldWVfZXZlbnQobWFfZGV2LCBl bmRwb2ludF9jdHgtPmVwX2hhbmRsZSwNCisJCQkJCSAgICAgIHVyYik7DQorCWlmIChzdGF0dXMg PCAwKSB7DQorCQl1cmJfY3R4ID0gbWF1c2JfdW5saW5rX2FuZF9kZWxldGVfdXJiX2Zyb21fdHJl ZSh1cmIsIHN0YXR1cyk7DQorCQlhdG9taWNfZGVjKCZ1cmItPnVzZV9jb3VudCk7DQorCQlpZiAo dXJiX2N0eCkgew0KKwkJCW1hdXNiX3VuaW5pdF9kYXRhX2l0ZXJhdG9yKCZ1cmJfY3R4LT5pdGVy YXRvcik7DQorCQkJa2ZyZWUodXJiX2N0eCk7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIHN0YXR1 czsNCit9DQorDQorc3RhdGljIGludCBtYXVzYl9oY2RfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9o Y2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLA0KKwkJCQkgaW50IHN0YXR1cykNCit7DQorCXN0cnVj dCBtYXVzYl9lbmRwb2ludF9jdHggKmVuZHBvaW50X2N0eDsNCisJc3RydWN0IG1hdXNiX2Rldmlj ZQkgICptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl91cmJfY3R4CSAgKnVyYl9jdHg7DQorDQorCW1h dXNiX3ByX2luZm8oIlVyYj0lcCIsIHVyYik7DQorDQorCXVyYl9jdHggPSBtYXVzYl91bmxpbmtf YW5kX2RlbGV0ZV91cmJfZnJvbV90cmVlKHVyYiwgc3RhdHVzKTsNCisJaWYgKCF1cmJfY3R4KSB7 DQorCQltYXVzYl9wcl93YXJuKCJVcmI9JXAgaXMgbm90IGluIHRyZWUiLCB1cmIpOw0KKwkJcmV0 dXJuIDA7DQorCX0NCisNCisJZW5kcG9pbnRfY3R4ID0gdXJiLT5lcC0+aGNwcml2Ow0KKwltYV9k ZXYJICAgICA9IGVuZHBvaW50X2N0eC0+bWFfZGV2Ow0KKw0KKwlxdWV1ZV93b3JrKG1hX2Rldi0+ d29ya3EsICZ1cmJfY3R4LT53b3JrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbWF1 c2JfaGNkX3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHUzMiBhY3R1YWxfbGVuZ3RoLCBp bnQgc3RhdHVzKQ0KK3sNCisJc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHggPQ0KKwkJbWF1 c2JfdW5saW5rX2FuZF9kZWxldGVfdXJiX2Zyb21fdHJlZSh1cmIsIHN0YXR1cyk7DQorDQorCWlm ICh1cmJfY3R4KSB7DQorCQltYXVzYl91bmluaXRfZGF0YV9pdGVyYXRvcigmdXJiX2N0eC0+aXRl cmF0b3IpOw0KKwkJa2ZyZWUodXJiX2N0eCk7DQorDQorCQl1cmItPnN0YXR1cwkgICA9IHN0YXR1 czsNCisJCXVyYi0+YWN0dWFsX2xlbmd0aCA9IGFjdHVhbF9sZW5ndGg7DQorDQorCQlhdG9taWNf ZGVjKCZ1cmItPnVzZV9jb3VudCk7DQorCQl1c2JfaGNkX2dpdmViYWNrX3VyYih1cmItPmhjcHJp diwgdXJiLCB1cmItPnN0YXR1cyk7DQorCQlyZXR1cm47DQorCX0NCit9DQorDQoraW50IG1hdXNi X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBtYXVzYl9oY2QgKm1hdXNi X2hjZDsNCisJc3RydWN0IHVzYl9oY2QJICpoY2Rfc3M7DQorCXN0cnVjdCB1c2JfaGNkCSAqaGNk X2hzOw0KKwlpbnQgcmV0Ow0KKw0KKwltYXVzYl9oY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsN CisJc3Bpbl9sb2NrX2luaXQoJm1hdXNiX2hjZC0+bG9jayk7DQorDQorCWhjZF9ocyA9IHVzYl9j cmVhdGVfaGNkKCZtYXVzYl9oY19kcml2ZXIsIGRldiwgZGV2X25hbWUoZGV2KSk7DQorCWlmICgh aGNkX2hzKSB7DQorCQltYXVzYl9wcl9lcnIoInVzYl9jcmVhdGVfaGNkIGZhaWxlZCIpOw0KKwkJ cmV0dXJuIC1FTk9NRU07DQorCX0NCisJaGNkX2hzLT5oYXNfdHQgPSAxOw0KKwltYXVzYl9oY2Qt PmhjZF9oc19jdHgJICAgID0gKHN0cnVjdCBodWJfY3R4ICopaGNkX2hzLT5oY2RfcHJpdjsNCisJ bWF1c2JfaGNkLT5oY2RfaHNfY3R4LT5taGNkID0gbWF1c2JfaGNkOw0KKwltYXVzYl9oY2QtPmhj ZF9oc19jdHgtPmhjZCAgPSBoY2RfaHM7DQorCW1lbXNldChtYXVzYl9oY2QtPmhjZF9oc19jdHgt Pm1hX2RldnMsIDAsDQorCSAgICAgICBzaXplb2Yoc3RydWN0IG1hdXNiX2RldikgKiBOVU1CRVJf T0ZfUE9SVFMpOw0KKw0KKwlyZXQgPSB1c2JfYWRkX2hjZChoY2RfaHMsIDAsIDApOw0KKwlpZiAo cmV0KSB7DQorCQltYXVzYl9wcl9lcnIoInVzYl9hZGRfaGNkIGZhaWxlZCIpOw0KKwkJZ290byBw dXRfaGNkX2hzOw0KKwl9DQorDQorCWhjZF9zcyA9IHVzYl9jcmVhdGVfc2hhcmVkX2hjZCgmbWF1 c2JfaGNfZHJpdmVyLCBkZXYsIGRldl9uYW1lKGRldiksDQorCQkJCSAgICAgICBoY2RfaHMpOw0K KwlpZiAoIWhjZF9zcykgew0KKwkJbWF1c2JfcHJfZXJyKCJ1c2JfY3JlYXRlX3NoYXJlZF9oY2Qg ZmFpbGVkIik7DQorCQlyZXQgPSAtRU5PTUVNOw0KKwkJZ290byByZW1vdmVfaGNkX2hzOw0KKwl9 DQorCW1hdXNiX2hjZC0+aGNkX3NzX2N0eAkgICAgPSAoc3RydWN0IGh1Yl9jdHggKiloY2Rfc3Mt PmhjZF9wcml2Ow0KKwltYXVzYl9oY2QtPmhjZF9zc19jdHgtPm1oY2QgPSBtYXVzYl9oY2Q7DQor CW1hdXNiX2hjZC0+aGNkX3NzX2N0eC0+aGNkICA9IGhjZF9zczsNCisNCisJbWVtc2V0KG1hdXNi X2hjZC0+aGNkX3NzX2N0eC0+bWFfZGV2cywgMCwNCisJICAgICAgIHNpemVvZihzdHJ1Y3QgbWF1 c2JfZGV2KSAqIE5VTUJFUl9PRl9QT1JUUyk7DQorDQorCXJldCA9IHVzYl9hZGRfaGNkKGhjZF9z cywgMCwgMCk7DQorCWlmIChyZXQpIHsNCisJCW1hdXNiX3ByX2VycigidXNiX2FkZF9oY2QgZmFp bGVkIik7DQorCQlnb3RvIHB1dF9oY2Rfc3M7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCisNCitw dXRfaGNkX3NzOg0KKwl1c2JfcHV0X2hjZChoY2Rfc3MpOw0KK3JlbW92ZV9oY2RfaHM6DQorCXVz Yl9yZW1vdmVfaGNkKGhjZF9ocyk7DQorcHV0X2hjZF9oczoNCisJdXNiX3B1dF9oY2QoaGNkX2hz KTsNCisJbWF1c2JfaGNkLT5oY2RfaHNfY3R4ID0gTlVMTDsNCisJbWF1c2JfaGNkLT5oY2Rfc3Nf Y3R4ID0gTlVMTDsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1c2JfZ2V0 X2h1Yl9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlX3JlcSwNCisJCQkJ ICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwNCisJCQkJICAgICBjaGFyICpidWZmLCB1MTYgbGVu Z3RoKQ0KK3sNCisJdTggd2lkdGg7DQorCXN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKmRlc2Mg PSAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqKWJ1ZmY7DQorDQorCW1lbXNldChkZXNjLCAw LCBzaXplb2Yoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcikpOw0KKw0KKwlpZiAoaGNkLT5zcGVl ZCA9PSBIQ0RfVVNCMykgew0KKwkJZGVzYy0+YkRlc2NyaXB0b3JUeXBlCSAgID0gVVNCX0RUX1NT X0hVQjsNCisJCWRlc2MtPmJEZXNjTGVuZ3RoCSAgID0gMTI7DQorCQlkZXNjLT53SHViQ2hhcmFj dGVyaXN0aWNzICA9DQorCQkgICAgY3B1X3RvX2xlMTYoSFVCX0NIQVJfSU5EVl9QT1JUX0xQU00g fCBIVUJfQ0hBUl9DT01NT05fT0NQTSk7DQorCQlkZXNjLT5iTmJyUG9ydHMJCSAgID0gTlVNQkVS X09GX1BPUlRTOw0KKwkJZGVzYy0+dS5zcy5iSHViSGRyRGVjTGF0ICAgPSAweDA0Ow0KKwkJZGVz Yy0+dS5zcy5EZXZpY2VSZW1vdmFibGUgPSBjcHVfdG9fbGUxNigweGZmZmYpOw0KKwl9IGVsc2Ug ew0KKwkJZGVzYy0+YkRlc2NyaXB0b3JUeXBlCSAgPSBVU0JfRFRfSFVCOw0KKwkJZGVzYy0+d0h1 YkNoYXJhY3RlcmlzdGljcyA9DQorCQkgICAgY3B1X3RvX2xlMTYoSFVCX0NIQVJfSU5EVl9QT1JU X0xQU00gfCBIVUJfQ0hBUl9DT01NT05fT0NQTSk7DQorCQlkZXNjLT5iTmJyUG9ydHMJCSAgPSBO VU1CRVJfT0ZfUE9SVFM7DQorCQl3aWR0aAkJCSAgPSAodTgpKGRlc2MtPmJOYnJQb3J0cyAvIDgg KyAxKTsNCisJCWRlc2MtPmJEZXNjTGVuZ3RoCSAgPSBVU0JfRFRfSFVCX05PTlZBUl9TSVpFICsg MiAqIHdpZHRoOw0KKw0KKwkJbWVtc2V0KCZkZXNjLT51LmhzLkRldmljZVJlbW92YWJsZVswXSwg MCwgd2lkdGgpOw0KKwkJbWVtc2V0KCZkZXNjLT51LmhzLkRldmljZVJlbW92YWJsZVt3aWR0aF0s IDB4ZmYsIHdpZHRoKTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9zZXRfcG9ydF9m ZWF0dXJlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlX3JlcSwNCisJCQkJICAgdTE2IHZh bHVlLCB1MTYgaW5kZXgsIGNoYXIgKmJ1ZmYsDQorCQkJCSAgIHUxNiBsZW5ndGgpDQorew0KKwlz dHJ1Y3QgaHViX2N0eCAqaHViID0gKHN0cnVjdCBodWJfY3R4ICopaGNkLT5oY2RfcHJpdjsNCisN CisJaW5kZXggPSAoKF9fdTgpKGluZGV4ICYgMHgwMGZmKSk7DQorDQorCXN3aXRjaCAodmFsdWUp IHsNCisJY2FzZSBVU0JfUE9SVF9GRUFUX0xJTktfU1RBVEU6DQorCQltYXVzYl9wcl9pbmZvKCJV U0JfUE9SVF9GRUFUX0xJTktfU1RBVEUiKTsNCisJCWlmIChoY2QtPnNwZWVkID09IEhDRF9VU0Iz KSB7DQorCQkJaWYgKChodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1cyAmDQorCQkJ ICAgICBVU0JfU1NfUE9SVF9TVEFUX1BPV0VSKSAhPSAwKSB7DQorCQkJCWh1Yi0+bWFfZGV2c1tp bmRleCAtIDFdLnBvcnRfc3RhdHVzIHw9DQorCQkJCSAgICAoMVUgPDwgdmFsdWUpOw0KKwkJCX0N CisJCX0gZWxzZSB7DQorCQkJaWYgKChodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1 cyAmDQorCQkJICAgICBVU0JfUE9SVF9TVEFUX1BPV0VSKSAhPSAwKSB7DQorCQkJCWh1Yi0+bWFf ZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzIHw9DQorCQkJCSAgICAoMVUgPDwgdmFsdWUpOw0K KwkJCX0NCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFVTQl9QT1JUX0ZFQVRfVTFfVElNRU9VVDoN CisJY2FzZSBVU0JfUE9SVF9GRUFUX1UyX1RJTUVPVVQ6DQorCQlicmVhazsNCisJY2FzZSBVU0Jf UE9SVF9GRUFUX1NVU1BFTkQ6DQorCQlicmVhazsNCisJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VS Og0KKwkJbWF1c2JfcHJfaW5mbygiVVNCX1BPUlRfRkVBVF9QT1dFUiIpOw0KKw0KKwkJaWYgKGhj ZC0+c3BlZWQgPT0gSENEX1VTQjMpIHsNCisJCQlodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0 X3N0YXR1cyB8PQ0KKwkJCSAgICBVU0JfU1NfUE9SVF9TVEFUX1BPV0VSOw0KKwkJfSBlbHNlIHsN CisJCQlodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1cyB8PQ0KKwkJCSAgICBVU0Jf UE9SVF9TVEFUX1BPV0VSOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgVVNCX1BPUlRfRkVBVF9C SF9QT1JUX1JFU0VUOg0KKwkJbWF1c2JfcHJfaW5mbygiVVNCX1BPUlRfRkVBVF9CSF9QT1JUX1JF U0VUIik7DQorCQkvKiBmYWxsIHRocm91Z2ggKi8NCisJY2FzZSBVU0JfUE9SVF9GRUFUX1JFU0VU Og0KKwkJbWF1c2JfcHJfaW5mbygiVVNCX1BPUlRfRkVBVF9SRVNFVCBoY2QtPnNwZWVkPSVkIiwg aGNkLT5zcGVlZCk7DQorDQorCQlpZiAoaGNkLT5zcGVlZCA9PSBIQ0RfVVNCMykgew0KKwkJCWh1 Yi0+bWFfZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzID0gMDsNCisJCQlodWItPm1hX2RldnNb aW5kZXggLSAxXS5wb3J0X3N0YXR1cyA9DQorCQkJICAgIChVU0JfU1NfUE9SVF9TVEFUX1BPV0VS IHwNCisJCQkgICAgIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8IFVTQl9QT1JUX1NUQVRfUkVT RVQpOw0KKwkJfSBlbHNlIGlmIChodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1cw0K KwkJCSAgICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpIHsNCisJCQlodWItPm1hX2RldnNbaW5kZXgg LSAxXS5wb3J0X3N0YXR1cyAmPQ0KKwkJCSAgICB+KFVTQl9QT1JUX1NUQVRfRU5BQkxFIHwNCisJ CQkgICAgICBVU0JfUE9SVF9TVEFUX0xPV19TUEVFRCB8DQorCQkJICAgICAgVVNCX1BPUlRfU1RB VF9ISUdIX1NQRUVEKTsNCisJCX0NCisJCS8qIGZhbGwgdGhyb3VnaCAqLw0KKwlkZWZhdWx0Og0K KwkJbWF1c2JfcHJfaW5mbygiRGVmYXVsdCB2YWx1ZT0lZCIsIHZhbHVlKTsNCisNCisJCWlmICho Y2QtPnNwZWVkID09IEhDRF9VU0IzKSB7DQorCQkJaWYgKChodWItPm1hX2RldnNbaW5kZXggLSAx XS5wb3J0X3N0YXR1cyAmDQorCQkJICAgICBVU0JfU1NfUE9SVF9TVEFUX1BPV0VSKSAhPSAwKSB7 DQorCQkJCWh1Yi0+bWFfZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzIHw9DQorCQkJCSAgICAo MVUgPDwgdmFsdWUpOw0KKwkJCX0NCisJCX0gZWxzZSB7DQorCQkJaWYgKChodWItPm1hX2RldnNb aW5kZXggLSAxXS5wb3J0X3N0YXR1cyAmDQorCQkJICAgICBVU0JfUE9SVF9TVEFUX1BPV0VSKSAh PSAwKSB7DQorCQkJCWh1Yi0+bWFfZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzIHw9DQorCQkJ CSAgICAoMVUgPDwgdmFsdWUpOw0KKwkJCX0NCisJCX0NCisJfQ0KK30NCisNCitzdGF0aWMgdm9p ZCBtYXVzYl9nZXRfcG9ydF9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVfcmVx LA0KKwkJCQkgIHUxNiB2YWx1ZSwgdTE2IGluZGV4LCBjaGFyICpidWZmLA0KKwkJCQkgIHUxNiBs ZW5ndGgpDQorew0KKwl1OCBkZXZfc3BlZWQ7DQorCXN0cnVjdCBodWJfY3R4ICpodWIgPSAoc3Ry dWN0IGh1Yl9jdHggKiloY2QtPmhjZF9wcml2Ow0KKw0KKwlpbmRleCA9ICgoX191OCkoaW5kZXgg JiAweDAwZmYpKTsNCisNCisJaWYgKChodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1 cyAmDQorCQkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfUkVTRVQpKSAhPSAwKSB7DQorCQltYXVzYl9w cl9pbmZvKCJGaW5pc2hlZCByZXNldCBoY2QtPnNwZWVkPSVkIiwgaGNkLT5zcGVlZCk7DQorDQor CQlkZXZfc3BlZWQgPSBodWItPm1hX2RldnNbaW5kZXggLSAxXS5kZXZfc3BlZWQ7DQorCQlzd2l0 Y2ggKGRldl9zcGVlZCkgew0KKwkJY2FzZSBMT1dfU1BFRUQ6DQorCQkJaHViLT5tYV9kZXZzW2lu ZGV4IC0gMV0ucG9ydF9zdGF0dXMgfD0NCisJCQkgICAgVVNCX1BPUlRfU1RBVF9MT1dfU1BFRUQ7 DQorCQkJYnJlYWs7DQorCQljYXNlIEhJR0hfU1BFRUQ6DQorCQkJaHViLT5tYV9kZXZzW2luZGV4 IC0gMV0ucG9ydF9zdGF0dXMgfD0NCisJCQkgICAgVVNCX1BPUlRfU1RBVF9ISUdIX1NQRUVEOw0K KwkJCWJyZWFrOw0KKwkJZGVmYXVsdDoNCisJCQltYXVzYl9wcl9pbmZvKCJOb3QgdXBkYXRpbmcg cG9ydF9zdGF0dXMgZm9yIGRldmljZSBzcGVlZCAlZCIsDQorCQkJCSAgICAgIGRldl9zcGVlZCk7 DQorCQl9DQorDQorCQlodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1cyB8PQ0KKwkJ ICAgICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19SRVNFVCkgfCBVU0JfUE9SVF9TVEFUX0VOQUJMRTsN CisJCWh1Yi0+bWFfZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzICY9DQorCQkgICAgfigxIDw8 IFVTQl9QT1JUX0ZFQVRfUkVTRVQpOw0KKwl9DQorDQorCSgoX19sZTE2ICopYnVmZilbMF0gPSBj cHVfdG9fbGUxNihodWItPm1hX2RldnNbaW5kZXggLSAxXS5wb3J0X3N0YXR1cyk7DQorCSgoX19s ZTE2ICopYnVmZilbMV0gPQ0KKwkgICAgY3B1X3RvX2xlMTYoaHViLT5tYV9kZXZzW2luZGV4IC0g MV0ucG9ydF9zdGF0dXMgPj4gMTYpOw0KKw0KKwltYXVzYl9wcl9pbmZvKCJwb3J0X3N0YXR1cz0l ZCIsIGh1Yi0+bWFfZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzKTsNCit9DQorDQorc3RhdGlj IHZvaWQgbWF1c2JfY2xlYXJfcG9ydF9mZWF0dXJlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0 eXBlX3JlcSwNCisJCQkJICAgICB1MTYgdmFsdWUsIHUxNiBpbmRleCwNCisJCQkJICAgICBjaGFy ICpidWZmLCB1MTYgbGVuZ3RoKQ0KK3sNCisJc3RydWN0IGh1Yl9jdHggKmh1YiA9IChzdHJ1Y3Qg aHViX2N0eCAqKWhjZC0+aGNkX3ByaXY7DQorDQorCWluZGV4ID0gKChfX3U4KShpbmRleCAmIDB4 MDBmZikpOw0KKw0KKwlzd2l0Y2ggKHZhbHVlKSB7DQorCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQ RU5EOg0KKwkJYnJlYWs7DQorCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoNCisJCW1hdXNiX3By X2luZm8oIlVTQl9QT1JUX0ZFQVRfUE9XRVIiKTsNCisNCisJCWlmIChoY2QtPnNwZWVkID09IEhD RF9VU0IzKSB7DQorCQkJaHViLT5tYV9kZXZzW2luZGV4IC0gMV0ucG9ydF9zdGF0dXMgJj0NCisJ CQkgICAgflVTQl9TU19QT1JUX1NUQVRfUE9XRVI7DQorCQl9IGVsc2Ugew0KKwkJCWh1Yi0+bWFf ZGV2c1tpbmRleCAtIDFdLnBvcnRfc3RhdHVzICY9DQorCQkJICAgIH5VU0JfUE9SVF9TVEFUX1BP V0VSOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgVVNCX1BPUlRfRkVBVF9SRVNFVDoNCisNCisJ Y2FzZSBVU0JfUE9SVF9GRUFUX0NfUkVTRVQ6DQorDQorCWRlZmF1bHQ6DQorCQltYXVzYl9wcl9p bmZvKCJEZWZhdWx0IHZhbHVlOiAlZCIsIHZhbHVlKTsNCisNCisJCWh1Yi0+bWFfZGV2c1tpbmRl eCAtIDFdLnBvcnRfc3RhdHVzICY9IH4oMSA8PCB2YWx1ZSk7DQorCX0NCit9DQorDQorc3RhdGlj IHZvaWQgbWF1c2JfZ2V0X2h1Yl9zdGF0dXMoc3RydWN0IHVzYl9oY2QgKmhjZCwgdTE2IHR5cGVf cmVxLA0KKwkJCQkgdTE2IHZhbHVlLCB1MTYgaW5kZXgsIGNoYXIgKmJ1ZmYsDQorCQkJCSB1MTYg bGVuZ3RoKQ0KK3sNCisJKihfX2xlMzIgKilidWZmID0gY3B1X3RvX2xlMzIoMCk7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbWF1c2JfYWxsb2NfZGV2KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1 c2JfZGV2aWNlICpkZXYpDQorew0KKwltYXVzYl9wcl9pbmZvKCJVc2IgZGV2aWNlPSVwIiwgZGV2 KTsNCisNCisJcmV0dXJuIDE7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2ZyZWVfZGV2KHN0 cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpDQorew0KKwl1OAlwb3J0 X251bWJlcjsNCisJczE2CWRldl9oYW5kbGU7DQorCWludAlzdGF0dXM7DQorCXVuc2lnbmVkIGxv bmcJIGZsYWdzOw0KKwlzdHJ1Y3QgaHViX2N0eCAgICpodWIgID0gKHN0cnVjdCBodWJfY3R4ICop aGNkLT5oY2RfcHJpdjsNCisJc3RydWN0IG1hdXNiX2RldgkgICAgKm1kZXYgPSBOVUxMOw0KKwlz dHJ1Y3QgbWF1c2JfZGV2aWNlCSAgICAqbWFfZGV2Ow0KKwlzdHJ1Y3QgbWF1c2JfdXNiX2Rldmlj ZV9jdHggKnVzYl9kZXZpY2VfY3R4Ow0KKwlzdHJ1Y3QgbWF1c2JfZW5kcG9pbnRfY3R4ICAgKmVw X2N0eCA9IGRldi0+ZXAwLmhjcHJpdjsNCisNCisJc3RhdHVzID0gZ2V0X3Jvb3RfaHViX3BvcnRf bnVtYmVyKGRldiwgJnBvcnRfbnVtYmVyKTsNCisJaWYgKHN0YXR1cyA8IDAgfHwgcG9ydF9udW1i ZXIgPj0gTlVNQkVSX09GX1BPUlRTKSB7DQorCQltYXVzYl9wcl9pbmZvKCJwb3J0X251bWJlciBv dXQgb2YgcmFuZ2UsIHBvcnRfbnVtYmVyPSV4IiwNCisJCQkgICAgICBwb3J0X251bWJlcik7DQor CQlyZXR1cm47DQorCX0NCisNCisJbWRldiAgPSAmaHViLT5tYV9kZXZzW3BvcnRfbnVtYmVyXTsN CisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsNCisJbWFfZGV2ID0g aHViLT5tYV9kZXZzW3BvcnRfbnVtYmVyXS5tYV9kZXY7DQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsNCisNCisJaWYgKCFtYV9kZXYpIHsNCisJCW1hdXNiX3By X2VycigiTUFVU0IgZGV2aWNlIG5vdCBmb3VuZCBvbiBwb3J0X251bWJlcj0lZCIsDQorCQkJICAg ICBwb3J0X251bWJlcik7DQorCQlyZXR1cm47DQorCX0NCisNCisJdXNiX2RldmljZV9jdHggPSBt YXVzYl9maW5kX3VzYl9kZXZpY2UobWRldiwgZGV2KTsNCisJaWYgKCF1c2JfZGV2aWNlX2N0eCkg ew0KKwkJbWF1c2JfcHJfd2FybigiZGV2aWNlX2N0eCBpcyBub3QgZm91bmQiKTsNCisJCXJldHVy bjsNCisJfQ0KKw0KKwlkZXZfaGFuZGxlID0gdXNiX2RldmljZV9jdHgtPmRldl9oYW5kbGU7DQor DQorCWlmIChhdG9taWNfcmVhZCgmbWFfZGV2LT51bnJlc3BvbnNpdmVfY2xpZW50KSkgew0KKwkJ bWF1c2JfcHJfZXJyKCJDbGllbnQgaXMgbm90IHJlc3BvbnNpdmUgYW55bW9yZSAtIGZyZWUgdXNi ZGV2aWNlIGltbWVkaWF0ZWx5Iik7DQorCQlkZXYtPmVwMC5oY3ByaXYgPSBOVUxMOw0KKwkJa2Zy ZWUoZXBfY3R4KTsNCisJCWdvdG8gZnJlZV9kZXY7DQorCX0NCisNCisJaWYgKGVwX2N0eCkgew0K KwkJc3RhdHVzID0gbWF1c2JfZXBpbmFjdGl2YXRlX2V2ZW50X3RvX3VzZXIobWFfZGV2LCBkZXZf aGFuZGxlLA0KKwkJCQkJCQkgIGVwX2N0eC0+ZXBfaGFuZGxlKTsNCisNCisJCW1hdXNiX3ByX2lu Zm8oImVwaW5hY3RpdmF0ZSByZXF1ZXN0IGVwX2hhbmRsZT0lI3gsIGRldl9oYW5kbGU9JSN4LCBz dGF0dXM9JWQiLA0KKwkJCSAgICAgIGVwX2N0eC0+ZXBfaGFuZGxlLCBkZXZfaGFuZGxlLCBzdGF0 dXMpOw0KKw0KKwkJc3RhdHVzID0gbWF1c2JfZXBkZWxldGVfZXZlbnRfdG9fdXNlcihtYV9kZXYs IGRldl9oYW5kbGUsDQorCQkJCQkJICAgICAgZXBfY3R4LT5lcF9oYW5kbGUpOw0KKw0KKwkJaWYg KHN0YXR1cyA8IDApDQorCQkJbWF1c2JfcHJfd2FybigiZXBfaGFuZGxlX2RlbCByZXF1ZXN0IGZh aWxlZCBmb3IgZXAwOiBlcF9oYW5kbGU9JSN4LCBkZXZfaGFuZGxlPSUjeCIsDQorCQkJCSAgICAg IGVwX2N0eC0+ZXBfaGFuZGxlLCBkZXZfaGFuZGxlKTsNCisJCWRldi0+ZXAwLmhjcHJpdiA9IE5V TEw7DQorCQlrZnJlZShlcF9jdHgpOw0KKw0KKwl9IGVsc2Ugew0KKwkJbWF1c2JfcHJfd2Fybigi ZXBfY3R4IGlzIE5VTEw6IGRldl9oYW5kbGU9JSN4IiwgZGV2X2hhbmRsZSk7DQorCX0NCisNCisJ aWYgKGRldl9oYW5kbGUgIT0gREVWX0hBTkRMRV9OT1RfQVNTSUdORUQpIHsNCisJCXN0YXR1cyA9 IG1hdXNiX3VzYmRldmRpc2Nvbm5lY3RfZXZlbnRfdG9fdXNlcihtYV9kZXYsDQorCQkJCQkJCSAg ICAgIGRldl9oYW5kbGUpOw0KKwkJaWYgKHN0YXR1cyA8IDApDQorCQkJbWF1c2JfcHJfd2Fybigi dXNiX2Rldl9kaXNjb25uZWN0IHJlcSBmYWlsZWQgZm9yIGRldl9oYW5kbGU9JSN4IiwNCisJCQkJ ICAgICAgZGV2X2hhbmRsZSk7DQorCX0NCisNCitmcmVlX2RldjoNCisJaWYgKGF0b21pY19zdWJf YW5kX3Rlc3QoMSwgJm1hX2Rldi0+bnVtX29mX3VzYl9kZXZpY2VzKSkgew0KKwkJbWF1c2JfcHJf aW5mbygiQWxsIHVzYiBkZXZpY2VzIGRlc3Ryb3llZCAtIHByb2NlZWQgd2l0aCBkaXNjb25uZWN0 aW5nIik7DQorCQlxdWV1ZV93b3JrKG1hX2Rldi0+d29ya3EsICZtYV9kZXYtPnNvY2tldF9kaXNj b25uZWN0X3dvcmspOw0KKwl9DQorDQorCXJiX2VyYXNlKCZ1c2JfZGV2aWNlX2N0eC0+cmJfbm9k ZSwgJm1kZXYtPnVzYl9kZXZpY2VzKTsNCisJbWF1c2JfcHJfaW5mbygiVVNCIGRldmljZSBkZWxl dGVkIGRldmljZT0lcCIsIHVzYl9kZXZpY2VfY3R4LT5kZXZfYWRkcik7DQorCWtmcmVlKHVzYl9k ZXZpY2VfY3R4KTsNCisNCisJbWF1c2JfcHJfaW5mbygia3JlZl9wdXQiKTsNCisJaWYgKGtyZWZf cHV0KCZtYV9kZXYtPnJlZmNvdW50LCBtYXVzYl9yZWxlYXNlX21hX2Rldl9hc3luYykpDQorCQlt YXVzYl9jbGVhcl9oY2RfbWFkZXYocG9ydF9udW1iZXIpOw0KK30NCisNCitzdGF0aWMgaW50IG1h dXNiX2RldmljZV9hc3NpZ25fYWRkcmVzcyhzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJ CSAgICAgICBzdHJ1Y3QgbWF1c2JfdXNiX2RldmljZV9jdHggKnVzYl9kZXZfY3R4KQ0KK3sNCisJ aW50IHN0YXR1cyA9DQorCQltYXVzYl9zZXR1c2JkZXZhZGRyZXNzX2V2ZW50X3RvX3VzZXIoZGV2 LA0KKwkJCQkJCSAgICAgdXNiX2Rldl9jdHgtPmRldl9oYW5kbGUsDQorCQkJCQkJICAgICBSRVNQ T05TRV9USU1FT1VUKTsNCisNCisJbWF1c2JfcHJfaW5mbygiZGV2X2hhbmRsZT0lI3gsIHN0YXR1 cz0lZCIsIHVzYl9kZXZfY3R4LT5kZXZfaGFuZGxlLA0KKwkJICAgICAgc3RhdHVzKTsNCisJdXNi X2Rldl9jdHgtPmFkZHJlc3NlZCA9IChzdGF0dXMgPT0gMCk7DQorDQorCXJldHVybiBzdGF0dXM7 DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgbWF1c2JfdXNiX2RldmljZV9jdHggKg0KK21hdXNiX2Fs bG9jX2RldmljZV9jdHgoc3RydWN0IGh1Yl9jdHggKmh1Yiwgc3RydWN0IHVzYl9kZXZpY2UgKmRl diwNCisJCSAgICAgICBzdHJ1Y3QgbWF1c2JfZGV2aWNlICptYV9kZXYsIHUxNiBwb3J0X251bWJl ciwNCisJCSAgICAgICBpbnQgKnN0YXR1cykNCit7DQorCXN0cnVjdCBtYXVzYl91c2JfZGV2aWNl X2N0eCAqdXNiX2RldmljZV9jdHggPSBOVUxMOw0KKw0KKwl1c2JfZGV2aWNlX2N0eCA9IGt6YWxs b2Moc2l6ZW9mKCp1c2JfZGV2aWNlX2N0eCksIEdGUF9BVE9NSUMpOw0KKwlpZiAoIXVzYl9kZXZp Y2VfY3R4KSB7DQorCQkqc3RhdHVzID0gLUVOT01FTTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQor DQorCXVzYl9kZXZpY2VfY3R4LT5kZXZfYWRkciAgID0gZGV2Ow0KKwl1c2JfZGV2aWNlX2N0eC0+ ZGV2X2hhbmRsZSA9IERFVl9IQU5ETEVfTk9UX0FTU0lHTkVEOw0KKwl1c2JfZGV2aWNlX2N0eC0+ YWRkcmVzc2VkICA9IGZhbHNlOw0KKw0KKwlpZiAobWF1c2JfaW5zZXJ0X3VzYl9kZXZpY2UoJmh1 Yi0+bWFfZGV2c1twb3J0X251bWJlcl0sDQorCQkJCSAgICB1c2JfZGV2aWNlX2N0eCkpIHsNCisJ CW1hdXNiX3ByX3dhcm4oImRldmljZV9jdHggYWxyZWFkeSBleGlzdHMiKTsNCisJCWtmcmVlKHVz Yl9kZXZpY2VfY3R4KTsNCisJCSpzdGF0dXMgPSAtRUVYSVNUOw0KKwkJcmV0dXJuIE5VTEw7DQor CX0NCisNCisJa3JlZl9nZXQoJm1hX2Rldi0+cmVmY291bnQpOw0KKwltYXVzYl9wcl9pbmZvKCJO ZXcgVVNCIGRldmljZSBhZGRlZCBkZXZpY2U9JXAiLA0KKwkJICAgICAgdXNiX2RldmljZV9jdHgt PmRldl9hZGRyKTsNCisJYXRvbWljX2luYygmbWFfZGV2LT5udW1fb2ZfdXNiX2RldmljZXMpOw0K Kw0KKwlyZXR1cm4gdXNiX2RldmljZV9jdHg7DQorfQ0KKw0KKy8qDQorICogRm9yIHVzYiAyLjAg bG9naXRlY2ggY2FtZXJhIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgb25jZSBkdXJpbmcNCisgKiBl bnVtZXJhdGlvbiBvZiBkZXZpY2UgYW5kIGxhdGVyIGFmdGVyIG1hdXNiX3Jlc2V0X2RldmljZS4N CisgKi8NCitzdGF0aWMgaW50IG1hdXNiX2FkZHJlc3NfZGV2aWNlKHN0cnVjdCB1c2JfaGNkICpo Y2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpDQorew0KKwl1OAlwb3J0X251bWJlcjsNCisJaW50 CXN0YXR1czsNCisJdW5zaWduZWQgbG9uZwlmbGFnczsNCisJc3RydWN0IGh1Yl9jdHgJKmh1YiA9 IChzdHJ1Y3QgaHViX2N0eCAqKWhjZC0+aGNkX3ByaXY7DQorCXN0cnVjdCBtYXVzYl9kZXZpY2UJ ICAgICptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl91c2JfZGV2aWNlX2N0eCAqdXNiX2RldmljZV9j dHg7DQorCXN0cnVjdCBtYXVzYl9lbmRwb2ludF9jdHggICAqZW5kcG9pbnRfY3R4Ow0KKw0KKwlz dGF0dXMgPSBnZXRfcm9vdF9odWJfcG9ydF9udW1iZXIoZGV2LCAmcG9ydF9udW1iZXIpOw0KKwlp ZiAoc3RhdHVzIDwgMCB8fCBwb3J0X251bWJlciA+PSBOVU1CRVJfT0ZfUE9SVFMpIHsNCisJCW1h dXNiX3ByX2luZm8oInBvcnRfbnVtYmVyIG91dCBvZiByYW5nZSwgcG9ydF9udW1iZXI9JXgiLA0K KwkJCSAgICAgIHBvcnRfbnVtYmVyKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXNw aW5fbG9ja19pcnFzYXZlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorCW1hX2RldiA9IGh1Yi0+bWFf ZGV2c1twb3J0X251bWJlcl0ubWFfZGV2Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNk LT5sb2NrLCBmbGFncyk7DQorDQorCWlmICghbWFfZGV2KSB7DQorCQltYXVzYl9wcl9lcnIoIk1B VVNCIGRldmljZSBub3QgZm91bmQgb24gcG9ydF9udW1iZXI9JWQiLA0KKwkJCSAgICAgcG9ydF9u dW1iZXIpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJdXNiX2RldmljZV9jdHggPSBt YXVzYl9maW5kX3VzYl9kZXZpY2UoJmh1Yi0+bWFfZGV2c1twb3J0X251bWJlcl0sIGRldik7DQor CWlmICghdXNiX2RldmljZV9jdHgpIHsNCisJCXVzYl9kZXZpY2VfY3R4ID0gbWF1c2JfYWxsb2Nf ZGV2aWNlX2N0eChodWIsIGRldiwgbWFfZGV2LA0KKwkJCQkJCQlwb3J0X251bWJlciwgJnN0YXR1 cyk7DQorCQlpZiAoIXVzYl9kZXZpY2VfY3R4KQ0KKwkJCXJldHVybiBzdGF0dXM7DQorCX0NCisN CisJbWF1c2JfcHJfaW5mbygiZGV2X2hhbmRsZT0lI3gsIGRldl9zcGVlZD0lI3giLA0KKwkJICAg ICAgdXNiX2RldmljZV9jdHgtPmRldl9oYW5kbGUsIGRldi0+c3BlZWQpOw0KKw0KKwlpZiAoZGV2 LT5zcGVlZCA+PSBVU0JfU1BFRURfU1VQRVIpDQorCQltYXVzYl9wcl9pbmZvKCJVU0IgMy4wIik7 DQorCWVsc2UNCisJCW1hdXNiX3ByX2luZm8oIlVTQiAyLjAiKTsNCisNCisJaWYgKHVzYl9kZXZp Y2VfY3R4LT5kZXZfaGFuZGxlID09IERFVl9IQU5ETEVfTk9UX0FTU0lHTkVEKSB7DQorCQlzdGF0 dXMgPSBtYXVzYl9lbmFibGVfZGV2aWNlKGhjZCwgZGV2KTsNCisJCWlmIChzdGF0dXMgPCAwKQ0K KwkJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJaWYgKCF1c2JfZGV2aWNlX2N0eC0+YWRkcmVz c2VkKSB7DQorCQlzdGF0dXMgPSBtYXVzYl9kZXZpY2VfYXNzaWduX2FkZHJlc3MobWFfZGV2LCB1 c2JfZGV2aWNlX2N0eCk7DQorCQlpZiAoc3RhdHVzIDwgMCkNCisJCQlyZXR1cm4gc3RhdHVzOw0K Kwl9DQorDQorCWVuZHBvaW50X2N0eCA9IGRldi0+ZXAwLmhjcHJpdjsNCisJaWYgKCFlbmRwb2lu dF9jdHgpIHsNCisJCW1hdXNiX3ByX2VycigiZW5kcG9pbnRfY3R4IGlzIE5VTEw6IGRldl9oYW5k bGU9JSN4IiwNCisJCQkgICAgIHVzYl9kZXZpY2VfY3R4LT5kZXZfaGFuZGxlKTsNCisJCXJldHVy biAtRUlOVkFMOw0KKwl9DQorDQorCS8qDQorCSAqIEZpeCB0byBzdXBwb3J0IHVzYiAyLjAgbG9n aXRlY2ggY2FtZXJhLiBJZiBlbmRvaW50IGhhbmRsZSBvZiB1c2IgMi4wDQorCSAqIGRldmljZSBp cyBhbHJlYWR5IG1vZGlmaWVkLCBkbyBub3QgbW9kaWZ5IGl0IGFnYWluLg0KKwkgKi8NCisJaWYg KGRldi0+c3BlZWQgPCBVU0JfU1BFRURfU1VQRVIgJiYgZW5kcG9pbnRfY3R4LT5lcF9oYW5kbGUg IT0gMCkNCisJCXJldHVybiAwOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9tb2RpZnllcDBfZXZlbnRf dG9fdXNlcihtYV9kZXYsDQorCQkJCQkgICAgICAgdXNiX2RldmljZV9jdHgtPmRldl9oYW5kbGUs DQorCQkJCQkgICAgICAgJmVuZHBvaW50X2N0eC0+ZXBfaGFuZGxlLA0KKwkJCQkJICAgICAgIGRl di0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUpOw0KKw0KKwltYXVzYl9wcl9pbmZvKCJtb2RpZnkg ZXAwIHJlc3BvbnNlLCBlcF9oYW5kbGU9JSN4LCBkZXZfaGFuZGxlPSUjeCwgc3RhdHVzPSVkIiwN CisJCSAgICAgIGVuZHBvaW50X2N0eC0+ZXBfaGFuZGxlLCBlbmRwb2ludF9jdHgtPmRldl9oYW5k bGUsDQorCQkgICAgICBzdGF0dXMpOw0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitzdGF0 aWMgaW50IG1hdXNiX2FkZF9lbmRwb2ludChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNi X2RldmljZSAqZGV2LA0KKwkJCSAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9p bnQpDQorew0KKwlpbnQJc3RhdHVzOw0KKwl1OAlwb3J0X251bWJlcjsNCisJc3RydWN0IG1hX3Vz Yl9lcGhhbmRsZXJlcV9kZXNjX3NzICBkZXNjcmlwdG9yX3NzOw0KKwlzdHJ1Y3QgbWFfdXNiX2Vw aGFuZGxlcmVxX2Rlc2Nfc3RkIGRlc2NyaXB0b3I7DQorCXN0cnVjdCBodWJfY3R4CQkgICAgKmh1 YiA9IChzdHJ1Y3QgaHViX2N0eCAqKWhjZC0+aGNkX3ByaXY7DQorCXN0cnVjdCBtYXVzYl9kZXZp Y2UJICAgICptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl91c2JfZGV2aWNlX2N0eCAqdXNiX2Rldl9j dHg7DQorCXN0cnVjdCBtYXVzYl9lbmRwb2ludF9jdHggICAqZW5kcG9pbnRfY3R4Ow0KKwl1bnNp Z25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJc3RhdHVzID0gZ2V0X3Jvb3RfaHViX3BvcnRfbnVt YmVyKGRldiwgJnBvcnRfbnVtYmVyKTsNCisJaWYgKHN0YXR1cyA8IDAgfHwgcG9ydF9udW1iZXIg Pj0gTlVNQkVSX09GX1BPUlRTKSB7DQorCQltYXVzYl9wcl9pbmZvKCJwb3J0X251bWJlciBvdXQg b2YgcmFuZ2UsIHBvcnRfbnVtYmVyPSV4IiwNCisJCQkgICAgICBwb3J0X251bWJlcik7DQorCQly ZXR1cm4gMDsNCisJfQ0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+bG9jaywgZmxhZ3Mp Ow0KKwltYV9kZXYgPSBodWItPm1hX2RldnNbcG9ydF9udW1iZXJdLm1hX2RldjsNCisJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlpZiAoIW1hX2Rldikg ew0KKwkJbWF1c2JfcHJfZXJyKCJNQVVTQiBkZXZpY2Ugbm90IGZvdW5kIG9uIHBvcnRfbnVtYmVy PSVkIiwNCisJCQkgICAgIHBvcnRfbnVtYmVyKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQor DQorCXVzYl9kZXZfY3R4ID0gbWF1c2JfZmluZF91c2JfZGV2aWNlKCZodWItPm1hX2RldnNbcG9y dF9udW1iZXJdLCBkZXYpOw0KKw0KKwlpZiAoIXVzYl9kZXZfY3R4KSB7DQorCQltYXVzYl9wcl93 YXJuKCJEZXZpY2Ugbm90IGZvdW5kIik7DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwll bmRwb2ludF9jdHggPSBremFsbG9jKHNpemVvZigqZW5kcG9pbnRfY3R4KSwgR0ZQX0FUT01JQyk7 DQorCWlmICghZW5kcG9pbnRfY3R4KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWVuZHBvaW50 X2N0eC0+ZGV2X2hhbmRsZQk9IHVzYl9kZXZfY3R4LT5kZXZfaGFuZGxlOw0KKwllbmRwb2ludF9j dHgtPnVzYl9kZXZpY2VfY3R4CT0gdXNiX2Rldl9jdHg7DQorCWVuZHBvaW50X2N0eC0+bWFfZGV2 CQk9IG1hX2RldjsNCisJZW5kcG9pbnQtPmhjcHJpdgkJPSBlbmRwb2ludF9jdHg7DQorDQorCWlm IChkZXYtPnNwZWVkID49IFVTQl9TUEVFRF9TVVBFUikgew0KKwkJbWF1c2JfaW5pdF9zdXBlcnNw ZWVkX2VwX2Rlc2NyaXB0b3IoJmRlc2NyaXB0b3Jfc3MsDQorCQkJCQkJICAgICZlbmRwb2ludC0+ ZGVzYywNCisJCQkJCQkgICAgJmVuZHBvaW50LT5zc19lcF9jb21wKTsNCisJCXN0YXR1cyA9IG1h dXNiX2VwaGFuZGxlX2V2ZW50X3RvX3VzZXIobWFfZGV2LA0KKwkJCQkJCSAgICAgIHVzYl9kZXZf Y3R4LT5kZXZfaGFuZGxlLA0KKwkJCQkJCSAgICAgIHNpemVvZihkZXNjcmlwdG9yX3NzKSwNCisJ CQkJCQkgICAgICAmZGVzY3JpcHRvcl9zcywNCisJCQkJCQkgICAgICAmZW5kcG9pbnRfY3R4LT5l cF9oYW5kbGUpOw0KKw0KKwl9IGVsc2Ugew0KKwkJbWF1c2JfaW5pdF9zdGFuZGFyZF9lcF9kZXNj cmlwdG9yKCZkZXNjcmlwdG9yLCAmZW5kcG9pbnQtPmRlc2MpOw0KKwkJc3RhdHVzID0gbWF1c2Jf ZXBoYW5kbGVfZXZlbnRfdG9fdXNlcihtYV9kZXYsDQorCQkJCQkJICAgICAgdXNiX2Rldl9jdHgt PmRldl9oYW5kbGUsDQorCQkJCQkJICAgICAgc2l6ZW9mKGRlc2NyaXB0b3IpLA0KKwkJCQkJCSAg ICAgICZkZXNjcmlwdG9yLA0KKwkJCQkJCSAgICAgICZlbmRwb2ludF9jdHgtPmVwX2hhbmRsZSk7 DQorCX0NCisNCisJaWYgKHN0YXR1cyA8IDApIHsNCisJCW1hdXNiX3ByX2VycigiZXBfaGFuZGxl X3JlcXVlc3QgZmFpbGVkIGRldl9oYW5kbGU9JSN4IiwNCisJCQkgICAgIHVzYl9kZXZfY3R4LT5k ZXZfaGFuZGxlKTsNCisJCWVuZHBvaW50LT5oY3ByaXYgPSBOVUxMOw0KKwkJa2ZyZWUoZW5kcG9p bnRfY3R4KTsNCisJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJbWF1c2JfcHJfaW5mbygiRW5k cG9pbnQgYWRkZWQgZXBfaGFuZGxlPSUjeCwgZGV2X2hhbmRsZT0lI3giLA0KKwkJICAgICAgZW5k cG9pbnRfY3R4LT5lcF9oYW5kbGUsIGVuZHBvaW50X2N0eC0+ZGV2X2hhbmRsZSk7DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX2Ryb3BfZW5kcG9pbnQoc3RydWN0IHVz Yl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwNCisJCQkgICAgICAgc3RydWN0IHVz Yl9ob3N0X2VuZHBvaW50ICplbmRwb2ludCkNCit7DQorCXU4CXBvcnRfbnVtYmVyOw0KKwlpbnQJ c3RhdHVzOw0KKwlpbnQJcmV0cmllcwkgICAgPSAwOw0KKwlzdHJ1Y3QgaHViX2N0eAkJICAgICpo dWIgPSAoc3RydWN0IGh1Yl9jdHggKiloY2QtPmhjZF9wcml2Ow0KKwlzdHJ1Y3QgbWF1c2JfZGV2 aWNlCSAgICAqbWFfZGV2Ow0KKwlzdHJ1Y3QgbWF1c2JfdXNiX2RldmljZV9jdHggKnVzYl9kZXZf Y3R4Ow0KKwlzdHJ1Y3QgbWF1c2JfZW5kcG9pbnRfY3R4ICAgKmVuZHBvaW50X2N0eCA9IGVuZHBv aW50LT5oY3ByaXY7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOw0KKw0KKwlzdGF0dXMgPSBn ZXRfcm9vdF9odWJfcG9ydF9udW1iZXIoZGV2LCAmcG9ydF9udW1iZXIpOw0KKwlpZiAoc3RhdHVz IDwgMCB8fCBwb3J0X251bWJlciA+PSBOVU1CRVJfT0ZfUE9SVFMpIHsNCisJCW1hdXNiX3ByX2lu Zm8oInBvcnRfbnVtYmVyIG91dCBvZiByYW5nZSwgcG9ydF9udW1iZXI9JXgiLA0KKwkJCSAgICAg IHBvcnRfbnVtYmVyKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorCW1hX2RldiA9IGh1Yi0+bWFfZGV2c1twb3J0 X251bWJlcl0ubWFfZGV2Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBm bGFncyk7DQorDQorCWlmICghbWFfZGV2KSB7DQorCQltYXVzYl9wcl9lcnIoIk1BVVNCIGRldmlj ZSBub3QgZm91bmQgb24gcG9ydF9udW1iZXI9JWQiLA0KKwkJCSAgICAgcG9ydF9udW1iZXIpOw0K KwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJdXNiX2Rldl9jdHggPSBtYXVzYl9maW5kX3Vz Yl9kZXZpY2UoJmh1Yi0+bWFfZGV2c1twb3J0X251bWJlcl0sIGRldik7DQorDQorCWlmICghZW5k cG9pbnRfY3R4KSB7DQorCQltYXVzYl9wcl9lcnIoIkVuZHBvaW50IGNvbnRleHQgZG9lc24ndCBl eGlzdCIpOw0KKwkJcmV0dXJuIDA7DQorCX0NCisJaWYgKCF1c2JfZGV2X2N0eCkgew0KKwkJbWF1 c2JfcHJfZXJyKCJVc2IgZGV2aWNlIGNvbnRleHQgZG9lc24ndCBleGlzdCIpOw0KKwkJcmV0dXJu IC1FTk9ERVY7DQorCX0NCisNCisJbWF1c2JfcHJfaW5mbygiU3RhcnQgZHJvcHBpbmcgZXBfaGFu ZGxlPSUjeCwgZGV2X2hhbmRsZT0lI3giLA0KKwkJICAgICAgZW5kcG9pbnRfY3R4LT5lcF9oYW5k bGUsIGVuZHBvaW50X2N0eC0+ZGV2X2hhbmRsZSk7DQorDQorCWlmIChhdG9taWNfcmVhZCgmbWFf ZGV2LT51bnJlc3BvbnNpdmVfY2xpZW50KSkgew0KKwkJbWF1c2JfcHJfZXJyKCJDbGllbnQgaXMg bm90IHJlc3BvbnNpdmUgYW55bW9yZSAtIGRyb3AgZW5kcG9pbnQgaW1tZWRpYXRlbHkiKTsNCisJ CWVuZHBvaW50LT5oY3ByaXYgPSBOVUxMOw0KKwkJa2ZyZWUoZW5kcG9pbnRfY3R4KTsNCisJCXJl dHVybiAtRVNIVVRET1dOOw0KKwl9DQorDQorCXN0YXR1cyA9IG1hdXNiX2VwaW5hY3RpdmF0ZV9l dmVudF90b191c2VyKG1hX2RldiwNCisJCQkJCQkgIHVzYl9kZXZfY3R4LT5kZXZfaGFuZGxlLA0K KwkJCQkJCSAgZW5kcG9pbnRfY3R4LT5lcF9oYW5kbGUpOw0KKw0KKwltYXVzYl9wcl9pbmZvKCJl cGluYWN0aXZhdGUgcmVxdWVzdCBlcF9oYW5kbGU9JSN4LCBkZXZfaGFuZGxlPSUjeCwgc3RhdHVz PSVkIiwNCisJCSAgICAgIGVuZHBvaW50X2N0eC0+ZXBfaGFuZGxlLCBlbmRwb2ludF9jdHgtPmRl dl9oYW5kbGUsDQorCQkgICAgICBzdGF0dXMpOw0KKw0KKwl3aGlsZSAodHJ1ZSkgew0KKwkJc3Rh dHVzID0gbWF1c2JfZXBkZWxldGVfZXZlbnRfdG9fdXNlcihtYV9kZXYsDQorCQkJCQkJICAgICAg dXNiX2Rldl9jdHgtPmRldl9oYW5kbGUsDQorCQkJCQkJICAgICAgZW5kcG9pbnRfY3R4LT5lcF9o YW5kbGUpOw0KKw0KKwkJbWF1c2JfcHJfaW5mbygiZXBfaGFuZGxlX2RlbGV0ZV9yZXF1ZXN0LCBl cF9oYW5kbGU9JSN4LCBkZXZfaGFuZGxlPSUjeCwgc3RhdHVzPSVkIiwNCisJCQkgICAgICBlbmRw b2ludF9jdHgtPmVwX2hhbmRsZSwgZW5kcG9pbnRfY3R4LT5kZXZfaGFuZGxlLA0KKwkJCSAgICAg IHN0YXR1cyk7DQorDQorCQlpZiAoc3RhdHVzID09IC1FQlVTWSkgew0KKwkJCWlmICgrK3JldHJp ZXMgPCBNQVVTQl9CVVNZX1JFVFJJRVNfQ09VTlQpDQorCQkJCXVzbGVlcF9yYW5nZSgxMDAwMCwg MTAwMDEpOw0KKwkJCWVsc2UNCisJCQkJcmV0dXJuIC1FQlVTWTsNCisJCX0gZWxzZSB7DQorCQkJ YnJlYWs7DQorCQl9DQorCX0NCisNCisJbWF1c2JfcHJfaW5mbygiRW5kcG9pbnQgZHJvcHBlZCBl cF9oYW5kbGU9JSN4LCBkZXZfaGFuZGxlPSUjeCIsDQorCQkgICAgICBlbmRwb2ludF9jdHgtPmVw X2hhbmRsZSwgZW5kcG9pbnRfY3R4LT5kZXZfaGFuZGxlKTsNCisNCisJZW5kcG9pbnQtPmhjcHJp diA9IE5VTEw7DQorCWtmcmVlKGVuZHBvaW50X2N0eCk7DQorCXJldHVybiBzdGF0dXM7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbWF1c2JfZGV2aWNlX2Fzc2lnbl9kZXZfaGFuZGxlKHN0cnVjdCB1c2Jf aGNkICpoY2QsDQorCQkJCQkgIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsDQorCQkJCQkgIHN0cnVj dCBodWJfY3R4ICpodWIsDQorCQkJCQkgIHN0cnVjdCBtYXVzYl9kZXZpY2UgKm1hX2RldiwNCisJ CQkJCSAgc3RydWN0IG1hdXNiX3VzYl9kZXZpY2VfY3R4DQorCQkJCQkgICp1c2JfZGV2aWNlX2N0 eCkNCit7DQorCXU4IHBvcnRfbnVtYmVyOw0KKwlpbnQgc3RhdHVzOw0KKwlpbnQgZGV2X3NwZWVk Ow0KKwl1MTYgaHViX2Rldl9oYW5kbGUJCT0gMDsNCisJdTE2IHBhcmVudF9oc19odWJfZGV2X2hh bmRsZQk9IDA7DQorCXUxNiBwYXJlbnRfaHNfaHViX3BvcnQJCT0gMDsNCisJc3RydWN0IHVzYl9k ZXZpY2UJCSAgICpmaXJzdF9odWJfZGV2aWNlID0gZGV2Ow0KKwlzdHJ1Y3QgbWF1c2JfdXNiX2Rl dmljZV9jdHgJICAgKmh1Yl9kZXZpY2VfY3R4Ow0KKwlzdHJ1Y3QgbWF1c2JfZW5kcG9pbnRfY3R4 CSAgICplbmRwb2ludF9jdHg7DQorCXN0cnVjdCBtYV91c2JfZXBoYW5kbGVyZXFfZGVzY19zdGQg ZGVzY3JpcHRvcjsNCisNCisJc3RhdHVzID0gZ2V0X3Jvb3RfaHViX3BvcnRfbnVtYmVyKGRldiwg JnBvcnRfbnVtYmVyKTsNCisJaWYgKHN0YXR1cyA8IDAgfHwgcG9ydF9udW1iZXIgPj0gTlVNQkVS X09GX1BPUlRTKSB7DQorCQltYXVzYl9wcl9pbmZvKCJwb3J0X251bWJlciBvdXQgb2YgcmFuZ2Us IHBvcnRfbnVtYmVyPSV4IiwNCisJCQkgICAgICBwb3J0X251bWJlcik7DQorCQlyZXR1cm4gLUVJ TlZBTDsNCisJfQ0KKw0KKwl3aGlsZSAoZmlyc3RfaHViX2RldmljZS0+cGFyZW50LT5wYXJlbnQp DQorCQlmaXJzdF9odWJfZGV2aWNlID0gZmlyc3RfaHViX2RldmljZS0+cGFyZW50Ow0KKw0KKwlo dWJfZGV2aWNlX2N0eCA9IG1hdXNiX2ZpbmRfdXNiX2RldmljZSgmaHViLT5tYV9kZXZzW3BvcnRf bnVtYmVyXSwNCisJCQkJCSAgICAgICBmaXJzdF9odWJfZGV2aWNlKTsNCisJaWYgKGh1Yl9kZXZp Y2VfY3R4KQ0KKwkJaHViX2Rldl9oYW5kbGUgPSBodWJfZGV2aWNlX2N0eC0+ZGV2X2hhbmRsZTsN CisNCisJaWYgKChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9MT1cgfHwgZGV2LT5zcGVlZCA9PSBV U0JfU1BFRURfRlVMTCkgJiYNCisJICAgIGZpcnN0X2h1Yl9kZXZpY2UtPnNwZWVkID09IFVTQl9T UEVFRF9ISUdIKSB7DQorCQlwYXJlbnRfaHNfaHViX2Rldl9oYW5kbGUgPQ0KKwkJCW1hdXNiX2Zp bmRfdXNiX2RldmljZSgmaHViLT5tYV9kZXZzW3BvcnRfbnVtYmVyXSwNCisJCQkJCSAgICAgIGRl di0+cGFyZW50KS0+ZGV2X2hhbmRsZTsNCisJCXBhcmVudF9oc19odWJfcG9ydCA9IGRldi0+cGFy ZW50LT5wb3J0bnVtOw0KKwl9DQorDQorCWRldl9zcGVlZCA9IHVzYl90b19tYXVzYl9kZXZpY2Vf c3BlZWQoZGV2LT5zcGVlZCk7DQorCW1hdXNiX3ByX2luZm8oInN0YXJ0Li4uIG1hdXNiX2RldnNw ZWVkPSVkLCByb3V0ZT0lI3gsIHBvcnRfbnVtYmVyPSVkIiwNCisJCSAgICAgIGRldl9zcGVlZCwg ZGV2LT5yb3V0ZSwgcG9ydF9udW1iZXIpOw0KKw0KKwlpZiAoZGV2X3NwZWVkID09IC1FSU5WQUwp IHsNCisJCW1hdXNiX3ByX2VycigiYmFkIGRldl9zcGVlZCIpOw0KKwkJcmV0dXJuIC1FSU5WQUw7 DQorCX0NCisNCisJc3RhdHVzID0gbWF1c2JfdXNiZGV2aGFuZGxlX2V2ZW50X3RvX3VzZXIobWFf ZGV2LCAodTgpZGV2X3NwZWVkLA0KKwkJCQkJCSAgZGV2LT5yb3V0ZSwgaHViX2Rldl9oYW5kbGUs DQorCQkJCQkJICBwYXJlbnRfaHNfaHViX2Rldl9oYW5kbGUsDQorCQkJCQkJICBwYXJlbnRfaHNf aHViX3BvcnQsIDAsDQorCQkJCQkJICBtYV9kZXYtPmxzZSwNCisJCQkJCQkgICZ1c2JfZGV2aWNl X2N0eC0+ZGV2X2hhbmRsZSk7DQorDQorCW1hdXNiX3ByX2luZm8oIm1hdXNiX3VzYmRldmhhbmRs ZV9ldmVudCBzdGF0dXM9JWQiLCBzdGF0dXMpOw0KKw0KKwlpZiAoc3RhdHVzIDwgMCkNCisJCXJl dHVybiBzdGF0dXM7DQorDQorCW1hdXNiX3ByX2luZm8oIkdldCByZWYgZGV2X2hhbmRsZT0lI3gi LCB1c2JfZGV2aWNlX2N0eC0+ZGV2X2hhbmRsZSk7DQorDQorCWVuZHBvaW50X2N0eCA9IGt6YWxs b2Moc2l6ZW9mKCplbmRwb2ludF9jdHgpLCBHRlBfQVRPTUlDKTsNCisJaWYgKCFlbmRwb2ludF9j dHgpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJZW5kcG9pbnRfY3R4LT5kZXZfaGFuZGxlICAg ICA9IHVzYl9kZXZpY2VfY3R4LT5kZXZfaGFuZGxlOw0KKwllbmRwb2ludF9jdHgtPm1hX2Rldgkg ICAgID0gbWFfZGV2Ow0KKwllbmRwb2ludF9jdHgtPnVzYl9kZXZpY2VfY3R4ID0gdXNiX2Rldmlj ZV9jdHg7DQorCWRldi0+ZXAwLmhjcHJpdgkJICAgICA9IGVuZHBvaW50X2N0eDsNCisNCisJbWF1 c2JfaW5pdF9zdGFuZGFyZF9lcF9kZXNjcmlwdG9yKCZkZXNjcmlwdG9yLCAmZGV2LT5lcDAuZGVz Yyk7DQorDQorCXN0YXR1cyA9IG1hdXNiX2VwaGFuZGxlX2V2ZW50X3RvX3VzZXIobWFfZGV2LA0K KwkJCQkJICAgICAgdXNiX2RldmljZV9jdHgtPmRldl9oYW5kbGUsDQorCQkJCQkgICAgICBzaXpl b2YoZGVzY3JpcHRvciksDQorCQkJCQkgICAgICAmZGVzY3JpcHRvciwNCisJCQkJCSAgICAgICZl bmRwb2ludF9jdHgtPmVwX2hhbmRsZSk7DQorDQorCW1hdXNiX3ByX2luZm8oIm1hdXNiX2VwaGFu ZGxlX2V2ZW50IGVwX2hhbmRsZT0lI3gsIGRldl9oYW5kbGU9JSN4LCBzdGF0dXM9JWQiLA0KKwkJ ICAgICAgZW5kcG9pbnRfY3R4LT5lcF9oYW5kbGUsIGVuZHBvaW50X2N0eC0+ZGV2X2hhbmRsZSwN CisJCSAgICAgIHN0YXR1cyk7DQorDQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQlkZXYtPmVwMC5o Y3ByaXYgPSBOVUxMOw0KKwkJa2ZyZWUoZW5kcG9pbnRfY3R4KTsNCisJCXJldHVybiBzdGF0dXM7 DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qDQorICogRm9yIHVzYiAyLjAgbG9naXRl Y2ggY2FtZXJhIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgb25jZSBkdXJpbmcgZW51bWVyYXRpb24N CisgKiBvZiBkZXZpY2UgYW5kIGxhdGVyIGFmdGVyIG1hdXNiX3Jlc2V0X2RldmljZS4gSW4gbGF0 dGVyIGNhc2UgaXQgaXMNCisgKiByZXF1aXJlZCB0byBhZGRyZXNzIHRoZSBkZXZpY2UgYWdhaW4g aW4gb3JkZXIgZm9yIGVwMCB0byB3b3JrIHByb3Blcmx5Lg0KKyAqLw0KK3N0YXRpYyBpbnQgbWF1 c2JfZW5hYmxlX2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAq ZGV2KQ0KK3sNCisJaW50IHN0YXR1czsNCisJdTggcG9ydF9udW1iZXI7DQorCXN0cnVjdCBodWJf Y3R4CQkgICAgKmh1YiA9IChzdHJ1Y3QgaHViX2N0eCAqKWhjZC0+aGNkX3ByaXY7DQorCXN0cnVj dCBtYXVzYl9kZXZpY2UJICAgICptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl91c2JfZGV2aWNlX2N0 eCAqdXNiX2RldmljZV9jdHg7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXN0YXR1cyA9 IGdldF9yb290X2h1Yl9wb3J0X251bWJlcihkZXYsICZwb3J0X251bWJlcik7DQorCWlmIChzdGF0 dXMgPCAwIHx8IHBvcnRfbnVtYmVyID49IE5VTUJFUl9PRl9QT1JUUykgew0KKwkJbWF1c2JfcHJf aW5mbygicG9ydF9udW1iZXIgb3V0IG9mIHJhbmdlLCBwb3J0X251bWJlcj0leCIsDQorCQkJICAg ICAgcG9ydF9udW1iZXIpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJc3Bpbl9sb2Nr X2lycXNhdmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsNCisJbWFfZGV2ID0gaHViLT5tYV9kZXZzW3Bv cnRfbnVtYmVyXS5tYV9kZXY7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1oY2QtPmxvY2ss IGZsYWdzKTsNCisNCisJaWYgKCFtYV9kZXYpIHsNCisJCW1hdXNiX3ByX2VycigiTUFVU0IgZGV2 aWNlIG5vdCBmb3VuZCBvbiBwb3J0X251bWJlcj0lZCIsDQorCQkJICAgICBwb3J0X251bWJlcik7 DQorCQlyZXR1cm4gLUVOT0RFVjsNCisJfQ0KKw0KKwl1c2JfZGV2aWNlX2N0eCA9IG1hdXNiX2Zp bmRfdXNiX2RldmljZSgmaHViLT5tYV9kZXZzW3BvcnRfbnVtYmVyXSwgZGV2KTsNCisJaWYgKCF1 c2JfZGV2aWNlX2N0eCkgew0KKwkJdXNiX2RldmljZV9jdHggPSBtYXVzYl9hbGxvY19kZXZpY2Vf Y3R4KGh1YiwgZGV2LCBtYV9kZXYsDQorCQkJCQkJCXBvcnRfbnVtYmVyLCAmc3RhdHVzKTsNCisJ CWlmICghdXNiX2RldmljZV9jdHgpDQorCQkJcmV0dXJuIHN0YXR1czsNCisJfQ0KKw0KKwltYXVz Yl9wcl9pbmZvKCJEZXZpY2UgYXNzaWduZWQgYW5kIGFkZHJlc3NlZCB1c2JfZGV2aWNlX2N0eD0l cCIsDQorCQkgICAgICB1c2JfZGV2aWNlX2N0eCk7DQorDQorCWlmICh1c2JfZGV2aWNlX2N0eC0+ ZGV2X2hhbmRsZSA9PSBERVZfSEFORExFX05PVF9BU1NJR05FRCkNCisJCXJldHVybiBtYXVzYl9k ZXZpY2VfYXNzaWduX2Rldl9oYW5kbGUoaGNkLCBkZXYsIGh1YiwgbWFfZGV2LA0KKwkJCQkJCSAg ICAgIHVzYl9kZXZpY2VfY3R4KTsNCisNCisJLyoNCisJICogRml4IGZvciB1c2IgMi4wIGxvZ2l0 ZWNoIGNhbWVyYQ0KKwkgKi8NCisJaWYgKCF1c2JfZGV2aWNlX2N0eC0+YWRkcmVzc2VkKQ0KKwkJ cmV0dXJuIG1hdXNiX2RldmljZV9hc3NpZ25fYWRkcmVzcyhtYV9kZXYsIHVzYl9kZXZpY2VfY3R4 KTsNCisNCisJbWF1c2JfcHJfaW5mbygiRGV2aWNlIGFzc2lnbmVkIGFuZCBhZGRyZXNzZWQgZGV2 X2hhbmRsZT0lI3giLA0KKwkJICAgICAgdXNiX2RldmljZV9jdHgtPmRldl9oYW5kbGUpOw0KKwly ZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtYXVzYl9pc19odWJfZGV2aWNlKHN0cnVjdCB1 c2JfZGV2aWNlICpkZXYpDQorew0KKwlyZXR1cm4gZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFz cyA9PSAweDA5Ow0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX3VwZGF0ZV9kZXZpY2Uoc3RydWN0 IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikNCit7DQorCXU4CXBvcnRfbnVt YmVyID0gMDsNCisJaW50CXN0YXR1cwkgICAgPSAwOw0KKwlzdHJ1Y3QgaHViX2N0eAkJICAgICpo dWIgPSAoc3RydWN0IGh1Yl9jdHggKiloY2QtPmhjZF9wcml2Ow0KKwlzdHJ1Y3QgbWF1c2JfZGV2 aWNlCSAgICAqbWFfZGV2ID0gTlVMTDsNCisJc3RydWN0IG1hdXNiX3VzYl9kZXZpY2VfY3R4ICp1 c2JfZGV2aWNlX2N0eCA9IE5VTEw7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOw0KKw0KKwlp ZiAobWF1c2JfaXNfaHViX2RldmljZShkZXYpKSB7DQorCQltYXVzYl9wcl93YXJuKCJEZXZpY2Ug aXMgaHViIik7DQorCQlyZXR1cm4gMDsNCisJfQ0KKw0KKwlzdGF0dXMgPSBnZXRfcm9vdF9odWJf cG9ydF9udW1iZXIoZGV2LCAmcG9ydF9udW1iZXIpOw0KKwlpZiAoc3RhdHVzIDwgMCB8fCBwb3J0 X251bWJlciA+PSBOVU1CRVJfT0ZfUE9SVFMpIHsNCisJCW1hdXNiX3ByX2luZm8oInBvcnRfbnVt YmVyIG91dCBvZiByYW5nZSwgcG9ydF9udW1iZXI9JXgiLA0KKwkJCSAgICAgIHBvcnRfbnVtYmVy KTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZtaGNk LT5sb2NrLCBmbGFncyk7DQorCW1hX2RldiA9IGh1Yi0+bWFfZGV2c1twb3J0X251bWJlcl0ubWFf ZGV2Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQor CWlmICghbWFfZGV2KSB7DQorCQltYXVzYl9wcl9lcnIoIk1BVVNCIGRldmljZSBub3QgZm91bmQg b24gcG9ydF9udW1iZXI9JWQiLA0KKwkJCSAgICAgcG9ydF9udW1iZXIpOw0KKwkJcmV0dXJuIC1F Tk9ERVY7DQorCX0NCisNCisJdXNiX2RldmljZV9jdHggPSBtYXVzYl9maW5kX3VzYl9kZXZpY2Uo Jmh1Yi0+bWFfZGV2c1twb3J0X251bWJlcl0sIGRldik7DQorCWlmICghdXNiX2RldmljZV9jdHgp IHsNCisJCW1hdXNiX3ByX3dhcm4oIkRldmljZSBub3QgZm91bmQiKTsNCisJCXJldHVybiAtRU5P REVWOw0KKwl9DQorDQorCXN0YXR1cyA9IG1hdXNiX3VwZGF0ZWRldl9ldmVudF90b191c2VyKG1h X2RldiwNCisJCQkJCSAgICAgICB1c2JfZGV2aWNlX2N0eC0+ZGV2X2hhbmRsZSwNCisJCQkJCSAg ICAgICAwLCAwLCAwLCAwLCAwLCAwLA0KKwkJCQkJICAgICAgICZkZXYtPmRlc2NyaXB0b3IpOw0K Kw0KKwltYXVzYl9wcl9pbmZvKCJGaW5pc2hlZCBkZXZfaGFuZGxlPSUjeCwgc3RhdHVzPSVkIiwN CisJCSAgICAgIHVzYl9kZXZpY2VfY3R4LT5kZXZfaGFuZGxlLCBzdGF0dXMpOw0KKw0KKwlyZXR1 cm4gc3RhdHVzOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX2h1Yl91cGRhdGVfZGV2aWNlKHN0 cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgIHN0cnVj dCB1c2JfdHQgKnR0LCBnZnBfdCBtZW1fZmxhZ3MpDQorew0KKwlpbnQJc3RhdHVzOw0KKwl1OAlw b3J0X251bWJlcjsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJdTE2IG1heF9leGl0X2xhdGVu Y3kgPSAwOw0KKwl1OCAgbnVtYmVyX29mX3BvcnRzID0gKHU4KWRldi0+bWF4Y2hpbGQ7DQorCXU4 ICBtdHQgPSAwOw0KKwl1OCAgdHR0ID0gMDsNCisJdTggIGludGVncmF0ZWRfaHViX2xhdGVuY3kg PSAwOw0KKwlzdHJ1Y3QgaHViX2N0eAkJICAgICpodWIgPSAoc3RydWN0IGh1Yl9jdHggKiloY2Qt PmhjZF9wcml2Ow0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNlCSAgICAqbWFfZGV2Ow0KKwlzdHJ1Y3Qg bWF1c2JfdXNiX2RldmljZV9jdHggKnVzYl9kZXZpY2VfY3R4Ow0KKw0KKwlpZiAoZGV2LT5zcGVl ZCA9PSBVU0JfU1BFRURfSElHSCkgew0KKwkJbXR0ID0gdHQtPm11bHRpID09IDAgPyAxIDogMDsN CisJCXR0dCA9ICh1OCl0dC0+dGhpbmtfdGltZTsNCisJfQ0KKw0KKwlzdGF0dXMgPSBnZXRfcm9v dF9odWJfcG9ydF9udW1iZXIoZGV2LCAmcG9ydF9udW1iZXIpOw0KKwlpZiAoc3RhdHVzIDwgMCB8 fCBwb3J0X251bWJlciA+PSBOVU1CRVJfT0ZfUE9SVFMpIHsNCisJCW1hdXNiX3ByX2luZm8oInBv cnRfbnVtYmVyIG91dCBvZiByYW5nZSwgcG9ydF9udW1iZXI9JXgiLA0KKwkJCSAgICAgIHBvcnRf bnVtYmVyKTsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZtaGNk LT5sb2NrLCBmbGFncyk7DQorCW1hX2RldiA9IGh1Yi0+bWFfZGV2c1twb3J0X251bWJlcl0ubWFf ZGV2Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQor CWlmICghbWFfZGV2KSB7DQorCQltYXVzYl9wcl9lcnIoIk1BVVNCIGRldmljZSBub3QgZm91bmQg b24gcG9ydF9udW1iZXI9JWQiLA0KKwkJCSAgICAgcG9ydF9udW1iZXIpOw0KKwkJcmV0dXJuIC1F Tk9ERVY7DQorCX0NCisNCisJdXNiX2RldmljZV9jdHggPSBtYXVzYl9maW5kX3VzYl9kZXZpY2Uo Jmh1Yi0+bWFfZGV2c1twb3J0X251bWJlcl0sDQorCQkJCQkgICAgICAgZGV2KTsNCisNCisJaWYg KCF1c2JfZGV2aWNlX2N0eCkgew0KKwkJbWF1c2JfcHJfZXJyKCJVU0IgZGV2aWNlIG5vdCBmb3Vu ZCIpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJaWYgKGRldi0+dXNiM19scG1fdTFf ZW5hYmxlZCkNCisJCW1heF9leGl0X2xhdGVuY3kgPSAodTE2KWRldi0+dTFfcGFyYW1zLm1lbDsN CisJZWxzZSBpZiAoZGV2LT51c2IzX2xwbV91Ml9lbmFibGVkKQ0KKwkJbWF4X2V4aXRfbGF0ZW5j eSA9ICh1MTYpZGV2LT51Ml9wYXJhbXMubWVsOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl91cGRhdGVk ZXZfZXZlbnRfdG9fdXNlcihtYV9kZXYsDQorCQkJCQkgICAgICAgdXNiX2RldmljZV9jdHgtPmRl dl9oYW5kbGUsDQorCQkJCQkgICAgICAgbWF4X2V4aXRfbGF0ZW5jeSwgMSwNCisJCQkJCSAgICAg ICBudW1iZXJfb2ZfcG9ydHMsIG10dCwgdHR0LA0KKwkJCQkJICAgICAgIGludGVncmF0ZWRfaHVi X2xhdGVuY3ksDQorCQkJCQkgICAgICAgJmRldi0+ZGVzY3JpcHRvcik7DQorDQorCW1hdXNiX3By X2luZm8oIkZpbmlzaGVkIGRldl9oYW5kbGU9JSN4LCBzdGF0dXM9JWQiLA0KKwkJICAgICAgdXNi X2RldmljZV9jdHgtPmRldl9oYW5kbGUsIHN0YXR1cyk7DQorDQorCXJldHVybiBzdGF0dXM7DQor fQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfY2hlY2tfYmFuZHdpZHRoKHN0cnVjdCB1c2JfaGNkICpo Y2QsIHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpDQorew0KKwltYXVzYl9wcl9kZWJ1ZygiTm90IGlt cGxlbWVudGVkIik7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9yZXNl dF9iYW5kd2lkdGgoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikN Cit7DQorCW1hdXNiX3ByX2RlYnVnKCJOb3QgaW1wbGVtZW50ZWQiKTsNCit9DQorDQorc3RhdGlj IHZvaWQgbWF1c2JfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLA0KKwkJCQkg ICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50KQ0KK3sNCisJbWF1c2JfcHJfZGVi dWcoIk5vdCBpbXBsZW1lbnRlZCIpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9lbmRwb2lu dF9yZXNldChzdHJ1Y3QgdXNiX2hjZCAqaGNkLA0KKwkJCQkgc3RydWN0IHVzYl9ob3N0X2VuZHBv aW50ICplbmRwb2ludCkNCit7DQorCWludCBzdGF0dXM7DQorCWludCBpc19jb250cm9sOw0KKwlp bnQgZXBudW07DQorCWludCBpc19vdXQ7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXUxNglk ZXZfaGFuZGxlOw0KKwl1OAl0c3A7DQorCXU4CXBvcnRfbnVtYmVyOw0KKwlzdHJ1Y3QgaHViX2N0 eAkJICAgICpodWI7DQorCXN0cnVjdCBtYXVzYl9kZXZpY2UJICAgICptYV9kZXY7DQorCXN0cnVj dCBtYXVzYl91c2JfZGV2aWNlX2N0eCAqdXNiX2RldmljZV9jdHg7DQorCXN0cnVjdCB1c2JfZGV2 aWNlCSAgICAqZGV2Ow0KKwlzdHJ1Y3QgbWF1c2JfZW5kcG9pbnRfY3R4ICAgKmVwX2N0eDsNCisJ c3RydWN0IG1hX3VzYl9lcGhhbmRsZXJlcV9kZXNjX3NzICBkZXNjcmlwdG9yX3NzOw0KKwlzdHJ1 Y3QgbWFfdXNiX2VwaGFuZGxlcmVxX2Rlc2Nfc3RkIGRlc2NyaXB0b3I7DQorDQorCWVwX2N0eCA9 IGVuZHBvaW50LT5oY3ByaXY7DQorCWlmICghZXBfY3R4KSB7DQorCQltYXVzYl9wcl9lcnIoImVw LT5oY3ByaXYgaXMgTlVMTCIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXVzYl9kZXZpY2VfY3R4 CT0gZXBfY3R4LT51c2JfZGV2aWNlX2N0eDsNCisJZGV2X2hhbmRsZQk9IHVzYl9kZXZpY2VfY3R4 LT5kZXZfaGFuZGxlOw0KKwlkZXYJCT0gdXNiX2RldmljZV9jdHgtPmRldl9hZGRyOw0KKw0KKwlz dGF0dXMgPSBnZXRfcm9vdF9odWJfcG9ydF9udW1iZXIoZGV2LCAmcG9ydF9udW1iZXIpOw0KKwlp ZiAoc3RhdHVzIDwgMCB8fCBwb3J0X251bWJlciA+PSBOVU1CRVJfT0ZfUE9SVFMpIHsNCisJCW1h dXNiX3ByX2luZm8oInBvcnRfbnVtYmVyIG91dCBvZiByYW5nZSwgcG9ydF9udW1iZXI9JXgiLA0K KwkJCSAgICAgIHBvcnRfbnVtYmVyKTsNCisJCXJldHVybjsNCisJfQ0KKwlodWIgPSAoc3RydWN0 IGh1Yl9jdHggKiloY2QtPmhjZF9wcml2Ow0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+ bG9jaywgZmxhZ3MpOw0KKwltYV9kZXYgPSBodWItPm1hX2RldnNbcG9ydF9udW1iZXJdLm1hX2Rl djsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlp ZiAoIW1hX2Rldikgew0KKwkJbWF1c2JfcHJfZXJyKCJNQVVTQiBkZXZpY2Ugbm90IGZvdW5kIG9u IHBvcnRfbnVtYmVyPSVkIiwNCisJCQkgICAgIHBvcnRfbnVtYmVyKTsNCisJCXJldHVybjsNCisJ fQ0KKw0KKwlpc19jb250cm9sID0gdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmZW5kcG9pbnQt PmRlc2MpOw0KKwllcG51bSA9IHVzYl9lbmRwb2ludF9udW0oJmVuZHBvaW50LT5kZXNjKTsNCisJ aXNfb3V0ID0gdXNiX2VuZHBvaW50X2Rpcl9vdXQoJmVuZHBvaW50LT5kZXNjKTsNCisJdHNwID0g KHU4KShpc19vdXQgPyBkZXYtPnRvZ2dsZVsxXSA6IGRldi0+dG9nZ2xlWzBdKTsNCisNCisJc3Rh dHVzID0gbWF1c2JfZXByZXNldF9ldmVudF90b191c2VyKG1hX2RldiwgZGV2X2hhbmRsZSwNCisJ CQkJCSAgICAgZXBfY3R4LT5lcF9oYW5kbGUsIHRzcCk7DQorDQorCW1hdXNiX3ByX2luZm8oImVw X3Jlc2V0IHN0YXR1cz0lZCwgZXBfaGFuZGxlPSUjeCwgZGV2X2hhbmRsZT0lI3giLA0KKwkJICAg ICAgc3RhdHVzLCBlcF9jdHgtPmVwX2hhbmRsZSwgZGV2X2hhbmRsZSk7DQorDQorCWlmIChzdGF0 dXMgPCAwKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoc3RhdHVzICE9IEVVQ0xFQU4pIHsNCisJCWlm ICghdHNwKSB7DQorCQkJdXNiX3NldHRvZ2dsZShkZXYsIGVwbnVtLCBpc19vdXQsIDBVKTsNCisJ CQlpZiAoaXNfY29udHJvbCkNCisJCQkJdXNiX3NldHRvZ2dsZShkZXYsIGVwbnVtLCAhaXNfb3V0 LCAwVSk7DQorCQl9DQorDQorCQlzdGF0dXMgPSBtYXVzYl9lcGFjdGl2YXRlX2V2ZW50X3RvX3Vz ZXIobWFfZGV2LCBkZXZfaGFuZGxlLA0KKwkJCQkJCQllcF9jdHgtPmVwX2hhbmRsZSk7DQorDQor CQltYXVzYl9wcl9lcnIoImVwX2FjdGl2YXRlIGZhaWxlZCwgc3RhdHVzPSVkLCBlcF9oYW5kbGU9 JSN4LCBkZXZfaGFuZGxlPSUjeCIsDQorCQkJICAgICBzdGF0dXMsIGVwX2N0eC0+ZXBfaGFuZGxl LCBkZXZfaGFuZGxlKTsNCisNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAodHNwKQ0KKwkJcmV0 dXJuOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9lcGluYWN0aXZhdGVfZXZlbnRfdG9fdXNlcihtYV9k ZXYsIGRldl9oYW5kbGUsDQorCQkJCQkJICBlcF9jdHgtPmVwX2hhbmRsZSk7DQorDQorCW1hdXNi X3ByX2luZm8oImVwX2luYWN0aXZhdGUgc3RhdHVzPSVkLCBlcF9oYW5kbGU9JSN4LCBkZXZfaGFu ZGxlPSUjeCIsDQorCQkgICAgICBzdGF0dXMsIGVwX2N0eC0+ZXBfaGFuZGxlLCBkZXZfaGFuZGxl KTsNCisNCisJaWYgKHN0YXR1cyA8IDApDQorCQlyZXR1cm47DQorDQorCXN0YXR1cyA9IG1hdXNi X2VwZGVsZXRlX2V2ZW50X3RvX3VzZXIobWFfZGV2LCBkZXZfaGFuZGxlLA0KKwkJCQkJICAgICAg ZXBfY3R4LT5lcF9oYW5kbGUpOw0KKw0KKwltYXVzYl9wcl9pbmZvKCJlcF9oYW5kbGVfZGVsZXRl IHN0YXR1cz0lZCwgZXBfaGFuZGxlPSUjeCwgZGV2X2hhbmRsZT0lI3giLA0KKwkJICAgICAgc3Rh dHVzLCBlcF9jdHgtPmVwX2hhbmRsZSwgZGV2X2hhbmRsZSk7DQorDQorCWlmIChzdGF0dXMgPCAw KQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAoZGV2LT5zcGVlZCA+PSBVU0JfU1BFRURfU1VQRVIpIHsN CisJCW1hdXNiX2luaXRfc3VwZXJzcGVlZF9lcF9kZXNjcmlwdG9yKCZkZXNjcmlwdG9yX3NzLA0K KwkJCQkJCSAgICAmZW5kcG9pbnQtPmRlc2MsDQorCQkJCQkJICAgICZlbmRwb2ludC0+c3NfZXBf Y29tcCk7DQorCQlzdGF0dXMgPSBtYXVzYl9lcGhhbmRsZV9ldmVudF90b191c2VyKG1hX2Rldiwg ZGV2X2hhbmRsZSwNCisJCQkJCQkgICAgICBzaXplb2YoZGVzY3JpcHRvcl9zcyksDQorCQkJCQkJ ICAgICAgJmRlc2NyaXB0b3Jfc3MsDQorCQkJCQkJICAgICAgJmVwX2N0eC0+ZXBfaGFuZGxlKTsN CisJfSBlbHNlIHsNCisJCW1hdXNiX2luaXRfc3RhbmRhcmRfZXBfZGVzY3JpcHRvcigmZGVzY3Jp cHRvciwgJmVuZHBvaW50LT5kZXNjKTsNCisJCXN0YXR1cyA9IG1hdXNiX2VwaGFuZGxlX2V2ZW50 X3RvX3VzZXIobWFfZGV2LCBkZXZfaGFuZGxlLA0KKwkJCQkJCSAgICAgIHNpemVvZihkZXNjcmlw dG9yKSwNCisJCQkJCQkgICAgICAmZGVzY3JpcHRvciwNCisJCQkJCQkgICAgICAmZXBfY3R4LT5l cF9oYW5kbGUpOw0KKwl9DQorDQorCW1hdXNiX3ByX2luZm8oImVwX2hhbmRsZSByZXF1ZXN0IHN0 YXR1cz0lZCwgZXBfaGFuZGxlPSUjeCwgZGV2X2hhbmRsZT0lI3giLA0KKwkJICAgICAgc3RhdHVz LCBlcF9jdHgtPmVwX2hhbmRsZSwgZGV2X2hhbmRsZSk7DQorfQ0KKw0KKy8qDQorICogRm9yIHVz YiAyLjAgbG9naXRlY2ggY2FtZXJhIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywNCisgKiBmb2xsb3dl ZCBieSBlaXRoZXIgbWF1c2JfZW5hYmxlX2RldmljZSBvciBtYXVzYl9hZGRyZXNzX2RldmljZS4N CisgKiBSZXNldHMgZGV2aWNlIHRvIG5vbi1hZGRyZXNzZWQgc3RhdGUuDQorICovDQorc3RhdGlj IGludCBtYXVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9k ZXZpY2UgKmRldikNCit7DQorCWludCBzdGF0dXM7DQorCXU4ICBwb3J0X251bWJlcjsNCisJdTE2 IGRldl9oYW5kbGU7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXN0cnVjdCBodWJfY3R4CQkg ICAgKmh1YjsNCisJc3RydWN0IG1hdXNiX2RldmljZQkgICAgKm1hX2RldjsNCisJc3RydWN0IG1h dXNiX3VzYl9kZXZpY2VfY3R4ICp1c2JfZGV2aWNlX2N0eDsNCisNCisJaHViID0gKHN0cnVjdCBo dWJfY3R4ICopaGNkLT5oY2RfcHJpdjsNCisNCisJc3RhdHVzID0gZ2V0X3Jvb3RfaHViX3BvcnRf bnVtYmVyKGRldiwgJnBvcnRfbnVtYmVyKTsNCisJaWYgKHN0YXR1cyA8IDAgfHwgcG9ydF9udW1i ZXIgPj0gTlVNQkVSX09GX1BPUlRTKSB7DQorCQltYXVzYl9wcl9pbmZvKCJwb3J0X251bWJlciBv dXQgb2YgcmFuZ2UsIHBvcnRfbnVtYmVyPSV4IiwNCisJCQkgICAgICBwb3J0X251bWJlcik7DQor CQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+bG9j aywgZmxhZ3MpOw0KKwltYV9kZXYgPSBodWItPm1hX2RldnNbcG9ydF9udW1iZXJdLm1hX2RldjsN CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlpZiAo IW1hX2Rldikgew0KKwkJbWF1c2JfcHJfZXJyKCJNQVVTQiBkZXZpY2Ugbm90IGZvdW5kIG9uIHBv cnRfbnVtYmVyPSVkIiwNCisJCQkgICAgIHBvcnRfbnVtYmVyKTsNCisJCXJldHVybiAtRU5PREVW Ow0KKwl9DQorDQorCXVzYl9kZXZpY2VfY3R4ID0gbWF1c2JfZmluZF91c2JfZGV2aWNlKCZodWIt Pm1hX2RldnNbcG9ydF9udW1iZXJdLCBkZXYpOw0KKw0KKwlpZiAoIXVzYl9kZXZpY2VfY3R4IHx8 DQorCSAgICB1c2JfZGV2aWNlX2N0eC0+ZGV2X2hhbmRsZSA9PSBERVZfSEFORExFX05PVF9BU1NJ R05FRCkNCisJCXJldHVybiAwOw0KKw0KKwlkZXZfaGFuZGxlID0gdXNiX2RldmljZV9jdHgtPmRl dl9oYW5kbGU7DQorDQorCXN0YXR1cyA9IG1hdXNiX3VzYmRldnJlc2V0X2V2ZW50X3RvX3VzZXIo bWFfZGV2LCBkZXZfaGFuZGxlKTsNCisNCisJbWF1c2JfcHJfaW5mbygidXNiX2Rldl9yZXNldCBk ZXZfaGFuZGxlPSUjeCwgc3RhdHVzPSVkIiwNCisJCSAgICAgIGRldl9oYW5kbGUsIHN0YXR1cyk7 DQorDQorCWlmIChzdGF0dXMgPT0gMCkNCisJCXVzYl9kZXZpY2VfY3R4LT5hZGRyZXNzZWQgPSBm YWxzZTsNCisNCisJcmV0dXJuIHN0YXR1czsNCit9DQorDQorI2lmZGVmIElTT0NIX0NBTExCQUNL Uw0KK2ludCBtYXVzYl9zZWNfZXZlbnRfcmluZ19zZXR1cChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1 bnNpZ25lZCBpbnQgaW50cl9udW0pDQorew0KKwltYXVzYl9wcl9kZWJ1ZygiIik7DQorCXJldHVy biAwOw0KK30NCisNCitpbnQgbWF1c2Jfc2VjX2V2ZW50X3JpbmdfY2xlYW51cChzdHJ1Y3QgdXNi X2hjZCAqaGNkLCB1bnNpZ25lZCBpbnQgaW50cl9udW0pDQorew0KKwltYXVzYl9wcl9kZWJ1Zygi Iik7DQorCXJldHVybiAwOw0KK30NCisNCitwaHlzX2FkZHJfdCBtYXVzYl9nZXRfc2VjX2V2ZW50 X3JpbmdfcGh5c19hZGRyKHN0cnVjdCB1c2JfaGNkICpoY2QsDQorCQkJCQkgICAgICAgdW5zaWdu ZWQgaW50IGludHJfbnVtLA0KKwkJCQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYSkNCit7DQorCW1h dXNiX3ByX2RlYnVnKCIiKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3BoeXNfYWRkcl90IG1hdXNi X2dldF94ZmVyX3JpbmdfcGh5c19hZGRyKHN0cnVjdCB1c2JfaGNkICpoY2QsDQorCQkJCQkgIHN0 cnVjdCB1c2JfZGV2aWNlICp1ZGV2LA0KKwkJCQkJICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQg KmVwLA0KKwkJCQkJICBkbWFfYWRkcl90ICpkbWEpDQorew0KKwltYXVzYl9wcl9kZWJ1ZygiIik7 DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbWF1c2JfZ2V0X2NvcmVfaWQoc3RydWN0IHVzYl9o Y2QgKmhjZCkNCit7DQorCW1hdXNiX3ByX2RlYnVnKCIiKTsNCisJcmV0dXJuIDA7DQorfQ0KKyNl bmRpZiAvKiBJU09DSF9DQUxMQkFDS1MgKi8NCisNCit2b2lkIG1hdXNiX2NsZWFyX2hjZF9tYWRl dih1MTYgcG9ydF9udW1iZXIpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJ aWYgKHBvcnRfbnVtYmVyID49IE5VTUJFUl9PRl9QT1JUUykgew0KKwkJbWF1c2JfcHJfZXJyKCJw b3J0X251bWJlciBvdXQgb2YgcmFuZ2UsIHBvcnRfbnVtYmVyPSV4IiwNCisJCQkgICAgIHBvcnRf bnVtYmVyKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+ bG9jaywgZmxhZ3MpOw0KKw0KKwltZW1zZXQoJm1oY2QtPmhjZF9oc19jdHgtPm1hX2RldnNbcG9y dF9udW1iZXJdLCAwLA0KKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBtYXVzYl9kZXYpKTsNCisJbWVt c2V0KCZtaGNkLT5oY2Rfc3NfY3R4LT5tYV9kZXZzW3BvcnRfbnVtYmVyXSwgMCwNCisJICAgICAg IHNpemVvZihzdHJ1Y3QgbWF1c2JfZGV2KSk7DQorDQorCW1oY2QtPmNvbm5lY3RlZF9wb3J0cyAm PSB+KDEgPDwgcG9ydF9udW1iZXIpOw0KKw0KKwltaGNkLT5oY2RfaHNfY3R4LT5tYV9kZXZzW3Bv cnRfbnVtYmVyXS5wb3J0X3N0YXR1cyA9DQorCQkJCQkJCVVTQl9QT1JUX1NUQVRfUE9XRVI7DQor CW1oY2QtPmhjZF9zc19jdHgtPm1hX2RldnNbcG9ydF9udW1iZXJdLnBvcnRfc3RhdHVzID0NCisJ CQkJCQkJVVNCX1NTX1BPUlRfU1RBVF9QT1dFUjsNCisNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tYXVz Yl9ob3N0L3NyYy9oY2QvbW9kdWxlX2luaXQuYyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3Jj L2hjZC9tb2R1bGVfaW5pdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MDAwLi5jYWUwMmVhZjhlM2INCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL21hdXNi X2hvc3Qvc3JjL2hjZC9tb2R1bGVfaW5pdC5jDQpAQCAtMCwwICsxLDIxOSBAQA0KKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkg LSAyMDIwIERpc3BsYXlMaW5rIChVSykgTHRkLg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1Ympl Y3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMN CisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rv cnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0KKyAqIG1vcmUgZGV0YWlscy4NCisgKi8NCisjaW5jbHVk ZSA8bGludXgvaW4uaD4NCisjaW5jbHVkZSA8bGludXgvaW5ldC5oPg0KKyNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9r b2JqZWN0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGVwYXJhbS5oPg0KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4NCisNCisjaW5jbHVkZSAiY29t bW9uL21hdXNiX2FkZHJlc3MuaCINCisjaW5jbHVkZSAiaGNkL3ZoY2QuaCINCisjaW5jbHVkZSAi aHBhbC9ocGFsLmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisjaW5jbHVkZSAi dXRpbHMvbWF1c2JfbW1hcC5oIg0KKyNpbmNsdWRlICJ1dGlscy9tYXVzYl92ZXJzaW9uLmgiDQor DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KK01PRFVMRV9BVVRIT1IoIkRpc3BsYXlMaW5rIChV SykgTHRkLiIpOw0KK01PRFVMRV9WRVJTSU9OKE1BVVNCX0RSSVZFUl9WRVJTSU9OKTsNCisNCitz dGF0aWMgc3RydWN0IG1hdXNiX2RldmljZV9hZGRyZXNzCWRldmljZV9hZGRyZXNzOw0KK3N0YXRp YyBpbnQJCQkJbWF1c2JfZGV2aWNlX2Rpc2Nvbm5lY3RfcGFyYW07DQorc3RhdGljIHUxNgkJCQlt YWRldl9hZGRyOw0KK3N0YXRpYyB1OAkJCQltYXVzYl9jbGllbnRfY29ubmVjdF9wYXJhbTsNCitz dGF0aWMgdTgJCQkJbWF1c2JfY2xpZW50X2Rpc2Nvbm5lY3RfcGFyYW07DQorDQorc3RhdGljIGlu dCBtYXVzYl9jbGllbnRfY29ubmVjdChjb25zdCBjaGFyICp2YWx1ZSwNCisJCQkJY29uc3Qgc3Ry dWN0IGtlcm5lbF9wYXJhbSAqa3ApDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisN CisJbWF1c2JfcHJfaW5mbygiVmVyc2lvbj0lcyIsIE1BVVNCX0RSSVZFUl9WRVJTSU9OKTsNCisN CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zcy5sb2NrLCBmbGFncyk7DQorCWlmIChtc3MuY2xpZW50 X2Nvbm5lY3RlZCkgew0KKwkJbWF1c2JfcHJfZXJyKCJNQS1VU0IgY2xpZW50IGlzIGFscmVhZHkg Y29ubmVjdGVkIik7DQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3Mp Ow0KKwkJcmV0dXJuIC1FRVhJU1Q7DQorCX0NCisJLyogU2F2ZSBoZWFydGJlYXQgY2xpZW50IGlu Zm9ybWF0aW9uICovDQorCW1zcy5jbGllbnRfY29ubmVjdGVkID0gdHJ1ZTsNCisJbXNzLm1pc3Nl ZF9oZWFydGJlYXRzID0gMDsNCisJcmVpbml0X2NvbXBsZXRpb24oJm1zcy5jbGllbnRfc3RvcHBl ZCk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFncyk7DQorCS8qIFN0 YXJ0IGhlYXJiZWF0IHRpbWVyICovDQorCW1vZF90aW1lcigmbXNzLmhlYXJ0YmVhdF90aW1lciwN CisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTUFVU0JfSEVBUlRCRUFUX1RJTUVPVVRf TVMpKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfY2xpZW50X2Rp c2Nvbm5lY3QoY29uc3QgY2hhciAqdmFsdWUsDQorCQkJCSAgIGNvbnN0IHN0cnVjdCBrZXJuZWxf cGFyYW0gKmtwKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQorCXN0cnVjdCBtYXVz Yl9kZXZpY2UgKmRldiA9IE5VTEw7DQorDQorCW1hdXNiX3ByX2luZm8oIlZlcnNpb249JXMiLCBN QVVTQl9EUklWRVJfVkVSU0lPTik7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZtc3MubG9jaywg ZmxhZ3MpOw0KKwlpZiAoIW1zcy5jbGllbnRfY29ubmVjdGVkKSB7DQorCQltYXVzYl9wcl9lcnIo Ik1BLVVTQiBjbGllbnQgaXMgbm90IGNvbm5lY3RlZCIpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFncyk7DQorDQorCS8qIFN0b3AgaGVh cnRiZWF0IHRpbWVyICovDQorCWRlbF90aW1lcl9zeW5jKCZtc3MuaGVhcnRiZWF0X3RpbWVyKTsN CisNCisJLyogQ2xlYXIgaGVhcnRiZWF0IGNsaWVudCBpbmZvcm1hdGlvbiAqLw0KKwlzcGluX2xv Y2tfaXJxc2F2ZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisJbXNzLmNsaWVudF9jb25uZWN0ZWQgPSBm YWxzZTsNCisJbXNzLm1pc3NlZF9oZWFydGJlYXRzID0gMDsNCisJbGlzdF9mb3JfZWFjaF9lbnRy eShkZXYsICZtc3MubWFkZXZfbGlzdCwgbGlzdF9lbnRyeSkgew0KKwkJbWF1c2JfcHJfZGVidWco IkVucXVldWUgaGVhcnRiZWF0X3dvcmsgbWFkZXZfYWRkcj0leCIsDQorCQkJICAgICAgIGRldi0+ bWFkZXZfYWRkcik7DQorCQlxdWV1ZV93b3JrKGRldi0+d29ya3EsICZkZXYtPmhlYXJ0YmVhdF93 b3JrKTsNCisJfQ0KKwljb21wbGV0ZSgmbXNzLmNsaWVudF9zdG9wcGVkKTsNCisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbWF1c2JfZGV2aWNlX2Nvbm5lY3QoY29uc3QgY2hhciAqdmFsdWUsDQorCQkJ CWNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQ0KK3sNCisJaW50IHN0YXR1cyA9IDA7DQor DQorCW1hdXNiX3ByX2luZm8oIlZlcnNpb249JXMiLCBNQVVTQl9EUklWRVJfVkVSU0lPTik7DQor DQorCWlmIChzdHJsZW4odmFsdWUpIDw9IElORVRfQUREUlNUUkxFTikgew0KKwkJc3RyY3B5KGRl dmljZV9hZGRyZXNzLmlwLmFkZHJlc3MuaXA0LCB2YWx1ZSk7DQorCQkvKiBBZGQgbGlzdCBvZiBh bHJlYWR5IGNvbm5lY3RlZCBkZXZpY2VzICovDQorCX0gZWxzZSBpZiAoc3RybGVuKHZhbHVlKSA8 PSBJTkVUNl9BRERSU1RSTEVOKSB7DQorCQkvKiBMb2dpYyBmb3IgaXA2ICovDQorCX0gZWxzZSB7 DQorCQltYXVzYl9wcl9lcnIoIkludmFsaWQgSVAgZm9ybWF0Iik7DQorCQlyZXR1cm4gMDsNCisJ fQ0KKwlzdGF0dXMgPSBtYXVzYl9pbml0aWF0ZV9kZXZfY29ubmVjdGlvbihkZXZpY2VfYWRkcmVz cywgbWFkZXZfYWRkcik7DQorCW1lbXNldCgmZGV2aWNlX2FkZHJlc3MsIDAsIHNpemVvZihkZXZp Y2VfYWRkcmVzcykpOw0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitzdGF0aWMgaW50IG1h dXNiX2RldmljZV9kaXNjb25uZWN0KGNvbnN0IGNoYXIgKnZhbHVlLA0KKwkJCQkgICBjb25zdCBz dHJ1Y3Qga2VybmVsX3BhcmFtICprcCkNCit7DQorCXU4IGRldl9hZGRyZXNzID0gMDsNCisJaW50 IHN0YXR1cyA9IDA7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOw0KKwlzdHJ1Y3QgbWF1c2Jf ZGV2aWNlICpkZXYgPSBOVUxMOw0KKw0KKwltYXVzYl9wcl9pbmZvKCJWZXJzaW9uPSVzIiwgTUFV U0JfRFJJVkVSX1ZFUlNJT04pOw0KKw0KKwlzdGF0dXMgPSBrc3RydG91OCh2YWx1ZSwgMCwgJmRl dl9hZGRyZXNzKTsNCisJaWYgKHN0YXR1cyA8IDApDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJ c3Bpbl9sb2NrX2lycXNhdmUoJm1zcy5sb2NrLCBmbGFncyk7DQorDQorCWRldiA9IG1hdXNiX2dl dF9kZXZfZnJvbV9hZGRyX3Vuc2FmZShkZXZfYWRkcmVzcyk7DQorCWlmIChkZXYpDQorCQlxdWV1 ZV93b3JrKGRldi0+d29ya3EsICZkZXYtPmhjZF9kaXNjb25uZWN0X3dvcmspOw0KKw0KKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIG1hdXNiX2RldmljZV9j b25uZWN0X29wcyA9IHsNCisJLnNldCA9IG1hdXNiX2RldmljZV9jb25uZWN0DQorfTsNCisNCitz dGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgbWF1c2JfZGV2aWNlX2Rpc2Nvbm5l Y3Rfb3BzID0gew0KKwkuc2V0ID0gbWF1c2JfZGV2aWNlX2Rpc2Nvbm5lY3QNCit9Ow0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBtYXVzYl9jbGllbnRfY29ubmVjdF9v cHMgPSB7DQorCS5zZXQgPSBtYXVzYl9jbGllbnRfY29ubmVjdA0KK307DQorDQorc3RhdGljIGNv bnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIG1hdXNiX2NsaWVudF9kaXNjb25uZWN0X29wcyA9 IHsNCisJLnNldCA9IG1hdXNiX2NsaWVudF9kaXNjb25uZWN0DQorfTsNCisNCittb2R1bGVfcGFy YW1fbmFtZWQobWdtdCwgZGV2aWNlX2FkZHJlc3MuaXAucG9ydC5tYW5hZ2VtZW50LCB1c2hvcnQs IDA2NjQpOw0KK01PRFVMRV9QQVJNX0RFU0MobWdtdCwgIk1BLVVTQiBtYW5hZ2VtZW50IHBvcnQi KTsNCittb2R1bGVfcGFyYW1fbmFtZWQoY3RybCwgZGV2aWNlX2FkZHJlc3MuaXAucG9ydC5jb250 cm9sLCB1c2hvcnQsIDA2NjQpOw0KK01PRFVMRV9QQVJNX0RFU0MoY3RybCwgIk1BLVVTQiBjb250 cm9sIHBvcnQiKTsNCittb2R1bGVfcGFyYW1fbmFtZWQoYnVsaywgZGV2aWNlX2FkZHJlc3MuaXAu cG9ydC5idWxrLCB1c2hvcnQsIDA2NjQpOw0KK01PRFVMRV9QQVJNX0RFU0MoYnVsaywgIk1BLVVT QiBidWxrIHBvcnQiKTsNCittb2R1bGVfcGFyYW1fbmFtZWQoaXNvY2gsIGRldmljZV9hZGRyZXNz LmlwLnBvcnQuaXNvY2hyb25vdXMsIHVzaG9ydCwgMDY2NCk7DQorTU9EVUxFX1BBUk1fREVTQyhp c29jaCwgIk1BLVVTQiBpc29jaHJvbm91cyBwb3J0Iik7DQorbW9kdWxlX3BhcmFtX25hbWVkKG1h ZGV2X2FkZHIsIG1hZGV2X2FkZHIsIHVzaG9ydCwgMDY2NCk7DQorTU9EVUxFX1BBUk1fREVTQyht YWRldl9hZGRyLCAiTUEtVVNCIGRldmljZSBhZGRyZXNzIik7DQorDQorbW9kdWxlX3BhcmFtX2Ni KGNsaWVudF9jb25uZWN0LCAmbWF1c2JfY2xpZW50X2Nvbm5lY3Rfb3BzLA0KKwkJJm1hdXNiX2Ns aWVudF9jb25uZWN0X3BhcmFtLCAwNjY0KTsNCittb2R1bGVfcGFyYW1fY2IoY2xpZW50X2Rpc2Nv bm5lY3QsICZtYXVzYl9jbGllbnRfZGlzY29ubmVjdF9vcHMsDQorCQkmbWF1c2JfY2xpZW50X2Rp c2Nvbm5lY3RfcGFyYW0sIDA2NjQpOw0KK21vZHVsZV9wYXJhbV9jYihpcCwgJm1hdXNiX2Rldmlj ZV9jb25uZWN0X29wcywNCisJCWRldmljZV9hZGRyZXNzLmlwLmFkZHJlc3MuaXA0LCAwNjY0KTsN Cittb2R1bGVfcGFyYW1fY2IoZGlzY29ubmVjdCwgJm1hdXNiX2RldmljZV9kaXNjb25uZWN0X29w cywNCisJCSZtYXVzYl9kZXZpY2VfZGlzY29ubmVjdF9wYXJhbSwgMDY2NCk7DQorDQorc3RhdGlj IGludCBob3N0X21hdXNiX2luaXQodm9pZCkNCit7DQorCWludCBzdGF0dXM7DQorDQorCW1hdXNi X3ByX2luZm8oIk1vZHVsZSBsb2FkLiBWZXJzaW9uPSVzIiwgTUFVU0JfRFJJVkVSX1ZFUlNJT04p Ow0KKwlzdGF0dXMgPSBtYXVzYl9pbml0X2hjZCgpOw0KKwlpZiAoc3RhdHVzIDwgMCkNCisJCWdv dG8gY2xlYW51cDsNCisNCisJc3RhdHVzID0gbWF1c2JfcmVnaXN0ZXJfcG93ZXJfc3RhdGVfbGlz dGVuZXIoKTsNCisJaWYgKHN0YXR1cyA8IDApDQorCQlnb3RvIGNsZWFudXBfaGNkOw0KKw0KKwlz dGF0dXMgPSBtYXVzYl9jcmVhdGVfZGV2KCk7DQorCWlmIChzdGF0dXMgPCAwKQ0KKwkJZ290byB1 bnJlZ2lzdGVyX3Bvd2VyX3N0YXRlX2xpc3RlbmVyOw0KKw0KKwltYXVzYl9pbml0aWFsaXplX21z cygpOw0KKw0KKwlyZXR1cm4gMDsNCisNCit1bnJlZ2lzdGVyX3Bvd2VyX3N0YXRlX2xpc3RlbmVy Og0KKwltYXVzYl91bnJlZ2lzdGVyX3Bvd2VyX3N0YXRlX2xpc3RlbmVyKCk7DQorY2xlYW51cF9o Y2Q6DQorCW1hdXNiX2RlaW5pdF9oY2QoKTsNCitjbGVhbnVwOg0KKwltYXVzYl9wcl9hbGVydCgi RmFpbGVkIHRvIGxvYWQgTUFVU0IgbW9kdWxlISIpOw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisN CitzdGF0aWMgdm9pZCBob3N0X21hdXNiX2V4aXQodm9pZCkNCit7DQorCW1hdXNiX3ByX2luZm8o Ik1vZHVsZSB1bmxvYWRpbmcgc3RhcnRlZC4uLiIpOw0KKwltYXVzYl91bnJlZ2lzdGVyX3Bvd2Vy X3N0YXRlX2xpc3RlbmVyKCk7DQorCW1hdXNiX2RlaW5pdGlhbGl6ZV9tc3MoKTsNCisJbWF1c2Jf ZGVpbml0X2hjZCgpOw0KKwltYXVzYl9jbGVhbnVwX2RldigxKTsNCisJbWF1c2JfcHJfaW5mbygi TW9kdWxlIHVubG9hZGVkLiBWZXJzaW9uPSVzIiwgTUFVU0JfRFJJVkVSX1ZFUlNJT04pOw0KK30N CisNCittb2R1bGVfaW5pdChob3N0X21hdXNiX2luaXQpOw0KK21vZHVsZV9leGl0KGhvc3RfbWF1 c2JfZXhpdCk7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaGNkL3Zo Y2QuYyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hjZC92aGNkLmMNCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjRlYjhiNGEwOTk3Nw0KLS0tIC9kZXYvbnVs bA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaGNkL3ZoY2QuYw0KQEAgLTAsMCAr MSwyOTEgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICog Q29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAq IFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcg aW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFp bHMuDQorICovDQorI2luY2x1ZGUgImhjZC92aGNkLmgiDQorDQorI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4NCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KKw0KKyNpbmNsdWRlICJoY2QvaHViLmgiDQorI2luY2x1ZGUgImhwYWwvaHBhbC5oIg0K KyNpbmNsdWRlICJ1dGlscy9tYXVzYl9sb2dzLmgiDQorDQorc3RhdGljIGludCBtYXVzYl9vcGVu KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsNCitzdGF0aWMgaW50IG1h dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOw0KK3N0 YXRpYyBzc2l6ZV90IG1hdXNiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpi dWZmZXIsIHNpemVfdCBsZW5ndGgsDQorCQkJICBsb2ZmX3QgKm9mZnNldCk7DQorc3RhdGljIHNz aXplX3QgbWF1c2Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpi dWZmZXIsDQorCQkJICAgc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpvZmZzZXQpOw0KK3N0YXRpYyBs b25nIG1hdXNiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgaW9jdGxfZnVu YywNCisJCQl1bnNpZ25lZCBsb25nIGlvY3RsX2J1ZmZlcik7DQorc3RhdGljIGludCBtYXVzYl9i dXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KTsNCitzdGF0aWMgaW50IG1hdXNiX2J1c19yZW1v dmUoc3RydWN0IGRldmljZSAqZGV2KTsNCitzdGF0aWMgaW50IG1hdXNiX2J1c19tYXRjaChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOw0KKw0KK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1hdXNiX2ZvcHMgPSB7DQorCS5vcGVuCQk9IG1h dXNiX29wZW4sDQorCS5yZWxlYXNlCT0gbWF1c2JfcmVsZWFzZSwNCisJLnJlYWQJCT0gbWF1c2Jf cmVhZCwNCisJLndyaXRlCQk9IG1hdXNiX3dyaXRlLA0KKwkudW5sb2NrZWRfaW9jdGwJPSBtYXVz Yl9pb2N0bA0KK307DQorDQorc3RhdGljIHVuc2lnbmVkIGludCBtYWpvcjsNCitzdGF0aWMgdW5z aWduZWQgaW50IG1pbm9yID0gMTsNCitzdGF0aWMgZGV2X3QgZGV2dDsNCitzdGF0aWMgc3RydWN0 IGRldmljZSAqZGV2aWNlOw0KKw0KK3N0cnVjdCBtYXVzYl9oY2QJKm1oY2Q7DQorc3RhdGljIHN0 cnVjdCBjbGFzcwkqbWF1c2JfY2xhc3M7DQorc3RhdGljIHN0cnVjdCBidXNfdHlwZQltYXVzYl9i dXNfdHlwZSA9IHsNCisJLm5hbWUJPSBERVZJQ0VfTkFNRSwNCisJLm1hdGNoCT0gbWF1c2JfYnVz X21hdGNoLA0KKwkucHJvYmUJPSBtYXVzYl9idXNfcHJvYmUsDQorCS5yZW1vdmUJPSBtYXVzYl9i dXNfcmVtb3ZlLA0KK307DQorDQorc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1hdXNiX2Ry aXZlciA9IHsNCisJLm5hbWUJPSBERVZJQ0VfTkFNRSwNCisJLmJ1cwk9ICZtYXVzYl9idXNfdHlw ZSwNCisJLm93bmVyCT0gVEhJU19NT0RVTEUsDQorfTsNCisNCitzdGF0aWMgdm9pZCBtYXVzYl9y ZW1vdmUodm9pZCkNCit7DQorCXN0cnVjdCB1c2JfaGNkICpoY2QsICpzaGFyZWRfaGNkOw0KKw0K KwloY2QJICAgPSBtaGNkLT5oY2RfaHNfY3R4LT5oY2Q7DQorCXNoYXJlZF9oY2QgPSBtaGNkLT5o Y2Rfc3NfY3R4LT5oY2Q7DQorDQorCWlmIChzaGFyZWRfaGNkKSB7DQorCQl1c2JfcmVtb3ZlX2hj ZChzaGFyZWRfaGNkKTsNCisJCXVzYl9wdXRfaGNkKHNoYXJlZF9oY2QpOw0KKwkJbWhjZC0+aGNk X3NzX2N0eCA9IE5VTEw7DQorCX0NCisNCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsNCisJdXNiX3B1 dF9oY2QoaGNkKTsNCisJbWhjZC0+aGNkX2hzX2N0eCA9IE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBp bnQgbWF1c2JfYnVzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXJldHVybiBtYXVz Yl9wcm9iZShkZXYpOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX2J1c19yZW1vdmUoc3RydWN0 IGRldmljZSAqZGV2KQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2Jf YnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikN Cit7DQorCWlmIChzdHJuY21wKGRldi0+YnVzLT5uYW1lLCBkcnYtPm5hbWUsIHN0cmxlbihkcnYt Pm5hbWUpKSkNCisJCXJldHVybiAwOw0KKwllbHNlDQorCQlyZXR1cm4gMTsNCit9DQorDQorc3Rh dGljIGludCBtYXVzYl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxl KQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfcmVsZWFzZShzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgc3NpemVfdCBtYXVzYl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9f dXNlciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLA0KKwkJCSAgbG9mZl90ICpvZmZzZXQpDQorew0K KwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHNzaXplX3QgbWF1c2Jfd3JpdGUoc3RydWN0IGZp bGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsDQorCQkJICAgc2l6ZV90IGxlbmd0 aCwgbG9mZl90ICpvZmZzZXQpDQorew0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGxvbmcg bWF1c2JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBpb2N0bF9mdW5jLA0K KwkJCXVuc2lnbmVkIGxvbmcgaW9jdGxfYnVmZmVyKQ0KK3sNCisJcmV0dXJuIDA7DQorfQ0KKw0K K2ludCBtYXVzYl9pbml0X2hjZCh2b2lkKQ0KK3sNCisJaW50IHJldHZhbDsNCisNCisJcmV0dmFs ID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERFVklDRV9OQU1FLCAmbWF1c2JfZm9wcyk7DQorCWlmIChy ZXR2YWwgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIlJlZ2lzdGVyX2NocmRldiBmYWlsZWQiKTsN CisJCXJldHVybiByZXR2YWw7DQorCX0NCisNCisJbWFqb3IgPSAodW5zaWduZWQgaW50KXJldHZh bDsNCisJcmV0dmFsID0gYnVzX3JlZ2lzdGVyKCZtYXVzYl9idXNfdHlwZSk7DQorCWlmIChyZXR2 YWwpIHsNCisJCW1hdXNiX3ByX2VycigiQnVzX3JlZ2lzdGVyIGZhaWxlZCAlZCIsIHJldHZhbCk7 DQorCQlnb3RvIGJ1c19yZWdpc3Rlcl9lcnJvcjsNCisJfQ0KKw0KKwltYXVzYl9jbGFzcyA9IGNs YXNzX2NyZWF0ZShUSElTX01PRFVMRSwgQ0xBU1NfTkFNRSk7DQorCWlmIChJU19FUlIobWF1c2Jf Y2xhc3MpKSB7DQorCQltYXVzYl9wcl9lcnIoIkNsYXNzX2NyZWF0ZSBmYWlsZWQgJWxkIiwgUFRS X0VSUihtYXVzYl9jbGFzcykpOw0KKwkJZ290byBjbGFzc19lcnJvcjsNCisJfQ0KKw0KKwlyZXR2 YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm1hdXNiX2RyaXZlcik7DQorCWlmIChyZXR2YWwpIHsNCisJ CW1hdXNiX3ByX2VycigiRHJpdmVyX3JlZ2lzdGVyIGZhaWxlZCIpOw0KKwkJZ290byBkcml2ZXJf cmVnaXN0ZXJfZXJyb3I7DQorCX0NCisNCisJbWhjZCA9IGt6YWxsb2Moc2l6ZW9mKCptaGNkKSwg R0ZQX0FUT01JQyk7DQorCWlmICghbWhjZCkgew0KKwkJcmV0dmFsID0gLUVOT01FTTsNCisJCWdv dG8gbWF1c2JfaGNkX2FsbG9jX2ZhaWxlZDsNCisJfQ0KKw0KKwlkZXZ0ID0gTUtERVYobWFqb3Is IG1pbm9yKTsNCisJZGV2aWNlID0gZGV2aWNlX2NyZWF0ZShtYXVzYl9jbGFzcywgTlVMTCwgZGV2 dCwgbWhjZCwgREVWSUNFX05BTUUpOw0KKw0KKwlpZiAoSVNfRVJSKGRldmljZSkpIHsNCisJCW1h dXNiX3ByX2VycigiRGV2aWNlX2NyZWF0ZSBmYWlsZWQgJWxkIiwgUFRSX0VSUihkZXZpY2UpKTsN CisJCWdvdG8gZGV2aWNlX2NyZWF0ZV9lcnJvcjsNCisJfQ0KKw0KKwlkZXZpY2UtPmRyaXZlciA9 ICZtYXVzYl9kcml2ZXI7DQorDQorCXJldHZhbCA9IG1hdXNiX3Byb2JlKGRldmljZSk7DQorDQor CWlmIChyZXR2YWwpIHsNCisJCW1hdXNiX3ByX2VycigiTWF1c2JfcHJvYmUgZmFpbGVkIik7DQor CQlnb3RvIG1hdXNiX3Byb2JlX2ZhaWxlZDsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0dmFsOw0KK21h dXNiX3Byb2JlX2ZhaWxlZDoNCisJZGV2aWNlX2Rlc3Ryb3kobWF1c2JfY2xhc3MsIGRldnQpOw0K K2RldmljZV9jcmVhdGVfZXJyb3I6DQorCWtmcmVlKG1oY2QpOw0KKwltaGNkID0gTlVMTDsNCitt YXVzYl9oY2RfYWxsb2NfZmFpbGVkOg0KKwlkcml2ZXJfdW5yZWdpc3RlcigmbWF1c2JfZHJpdmVy KTsNCitkcml2ZXJfcmVnaXN0ZXJfZXJyb3I6DQorCWNsYXNzX2Rlc3Ryb3kobWF1c2JfY2xhc3Mp Ow0KK2NsYXNzX2Vycm9yOg0KKwlidXNfdW5yZWdpc3RlcigmbWF1c2JfYnVzX3R5cGUpOw0KK2J1 c19yZWdpc3Rlcl9lcnJvcjoNCisJdW5yZWdpc3Rlcl9jaHJkZXYobWFqb3IsIERFVklDRV9OQU1F KTsNCisNCisJcmV0dXJuIHJldHZhbDsNCit9DQorDQordm9pZCBtYXVzYl9kZWluaXRfaGNkKHZv aWQpDQorew0KKwltYXVzYl9wcl9pbmZvKCJTdGFydCIpOw0KKw0KKwlpZiAobWhjZCkgew0KKwkJ bWF1c2JfcmVtb3ZlKCk7DQorCQlkZXZpY2VfZGVzdHJveShtYXVzYl9jbGFzcywgZGV2dCk7DQor CQlkcml2ZXJfdW5yZWdpc3RlcigmbWF1c2JfZHJpdmVyKTsNCisJCWNsYXNzX2Rlc3Ryb3kobWF1 c2JfY2xhc3MpOw0KKwkJYnVzX3VucmVnaXN0ZXIoJm1hdXNiX2J1c190eXBlKTsNCisJCXVucmVn aXN0ZXJfY2hyZGV2KG1ham9yLCBERVZJQ0VfTkFNRSk7DQorCX0NCisNCisJbWF1c2JfcHJfaW5m bygiRmluaXNoIik7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfcG9ydF9oYXNfY2hhbmdlZChjb25zdCBl bnVtIG1hdXNiX2RldmljZV90eXBlIGRldmljZV90eXBlLA0KKwkJCSAgICBjb25zdCBlbnVtIG1h dXNiX2RldmljZV9zcGVlZCBkZXZpY2Vfc3BlZWQsDQorCQkJICAgIHZvaWQgKm1hX2RldikNCit7 DQorCXN0cnVjdCB1c2JfaGNkICpoY2Q7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOw0KKwlz dHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYgPSBtYV9kZXY7DQorCXUxNiBwb3J0X251bWJlciA9IGRl di0+cG9ydF9udW1iZXI7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZtaGNkLT5sb2NrLCBmbGFn cyk7DQorDQorCWlmIChkZXZpY2VfdHlwZSA9PSBVU0IyMEhVQiB8fCBkZXZpY2Vfc3BlZWQgPCBT VVBFUl9TUEVFRCkgew0KKwkJbWhjZC0+aGNkX2hzX2N0eC0+bWFfZGV2c1twb3J0X251bWJlcl0u cG9ydF9zdGF0dXMgfD0NCisJCSAgICBVU0JfUE9SVF9TVEFUX0NPTk5FQ1RJT04gfCAoMSA8PA0K KwkJCQkJCVVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsNCisNCisJCWlmIChkZXZpY2Vfc3Bl ZWQgPT0gTE9XX1NQRUVEKSB7DQorCQkJbWhjZC0+aGNkX2hzX2N0eC0+bWFfZGV2c1twb3J0X251 bWJlcl0ucG9ydF9zdGF0dXMgfD0NCisJCQkgICAgTUFVU0JfUE9SVF8yMF9TVEFUVVNfTE9XX1NQ RUVEOw0KKwkJCW1oY2QtPmhjZF9oc19jdHgtPm1hX2RldnNbcG9ydF9udW1iZXJdLmRldl9zcGVl ZCA9DQorCQkJICAgIExPV19TUEVFRDsNCisJCX0gZWxzZSBpZiAoZGV2aWNlX3NwZWVkID09IEhJ R0hfU1BFRUQpIHsNCisJCQltaGNkLT5oY2RfaHNfY3R4LT5tYV9kZXZzW3BvcnRfbnVtYmVyXS5w b3J0X3N0YXR1cyB8PQ0KKwkJCSAgICBNQVVTQl9QT1JUXzIwX1NUQVRVU19ISUdIX1NQRUVEOw0K KwkJCW1oY2QtPmhjZF9oc19jdHgtPm1hX2RldnNbcG9ydF9udW1iZXJdLmRldl9zcGVlZCA9DQor CQkJICAgIEhJR0hfU1BFRUQ7DQorCQl9DQorDQorCQloY2QgPSBtaGNkLT5oY2RfaHNfY3R4LT5o Y2Q7DQorCQltaGNkLT5oY2RfaHNfY3R4LT5tYV9kZXZzW3BvcnRfbnVtYmVyXS5tYV9kZXYgPSBt YV9kZXY7DQorCX0gZWxzZSB7DQorCQltaGNkLT5oY2Rfc3NfY3R4LT5tYV9kZXZzW3BvcnRfbnVt YmVyXS5wb3J0X3N0YXR1cyB8PQ0KKwkJICAgIFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTiB8ICgx IDw8DQorCQkJCQkJVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT04pOw0KKwkJbWhjZC0+aGNkX3Nz X2N0eC0+bWFfZGV2c1twb3J0X251bWJlcl0uZGV2X3NwZWVkID0gU1VQRVJfU1BFRUQ7DQorDQor CQloY2QgPSBtaGNkLT5oY2Rfc3NfY3R4LT5oY2Q7DQorCQltaGNkLT5oY2Rfc3NfY3R4LT5tYV9k ZXZzW3BvcnRfbnVtYmVyXS5tYV9kZXYgPSBtYV9kZXY7DQorCX0NCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVz KGhjZCk7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfaGNkX2Rpc2Nvbm5lY3QoY29uc3QgdTE2IHBvcnRf bnVtYmVyLA0KKwkJCSAgY29uc3QgZW51bSBtYXVzYl9kZXZpY2VfdHlwZSBkZXZpY2VfdHlwZSwN CisJCQkgIGNvbnN0IGVudW0gbWF1c2JfZGV2aWNlX3NwZWVkIGRldmljZV9zcGVlZCkNCit7DQor CXN0cnVjdCB1c2JfaGNkICpoY2Q7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOw0KKw0KKwlp ZiAocG9ydF9udW1iZXIgPj0gTlVNQkVSX09GX1BPUlRTKSB7DQorCQltYXVzYl9wcl9lcnIoInBv cnQgbnVtYmVyIG91dCBvZiByYW5nZSwgcG9ydF9udW1iZXI9JXgiLA0KKwkJCSAgICAgcG9ydF9u dW1iZXIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZtaGNkLT5s b2NrLCBmbGFncyk7DQorDQorCWlmIChkZXZpY2VfdHlwZSA9PSBVU0IyMEhVQiB8fCBkZXZpY2Vf c3BlZWQgPCBTVVBFUl9TUEVFRCkgew0KKwkJbWhjZC0+aGNkX2hzX2N0eC0+bWFfZGV2c1twb3J0 X251bWJlcl0ucG9ydF9zdGF0dXMgJj0NCisJCQl+KFVTQl9QT1JUX1NUQVRfQ09OTkVDVElPTik7 DQorCQltaGNkLT5oY2RfaHNfY3R4LT5tYV9kZXZzW3BvcnRfbnVtYmVyXS5wb3J0X3N0YXR1cyAm PQ0KKwkJCX4oVVNCX1BPUlRfU1RBVF9FTkFCTEUpOw0KKwkJbWhjZC0+aGNkX2hzX2N0eC0+bWFf ZGV2c1twb3J0X251bWJlcl0ucG9ydF9zdGF0dXMgfD0NCisJCQkoMSA8PCBVU0JfUE9SVF9GRUFU X0NfQ09OTkVDVElPTik7DQorCQloY2QgPSBtaGNkLT5oY2RfaHNfY3R4LT5oY2Q7DQorCX0gZWxz ZSB7DQorCQltaGNkLT5oY2Rfc3NfY3R4LT5tYV9kZXZzW3BvcnRfbnVtYmVyXS5wb3J0X3N0YXR1 cyAmPQ0KKwkJCX4oVVNCX1BPUlRfU1RBVF9DT05ORUNUSU9OKTsNCisJCW1oY2QtPmhjZF9zc19j dHgtPm1hX2RldnNbcG9ydF9udW1iZXJdLnBvcnRfc3RhdHVzICY9DQorCQkJfihVU0JfUE9SVF9T VEFUX0VOQUJMRSk7DQorCQltaGNkLT5oY2Rfc3NfY3R4LT5tYV9kZXZzW3BvcnRfbnVtYmVyXS5w b3J0X3N0YXR1cyB8PQ0KKwkJCSgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05ORUNUSU9OKTsNCisJ CWhjZCA9IG1oY2QtPmhjZF9zc19jdHgtPmhjZDsNCisJfQ0KKw0KKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorCWlmICghaGNkKQ0KKwkJcmV0dXJuOw0KKw0K Kwl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvZGF0YV9jb21tb24uYyBiL2RyaXZlcnMvdXNiL21hdXNi X2hvc3Qvc3JjL2hwYWwvZGF0YV9jb21tb24uYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uYzNmZWYwZTJjOWI4DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2RhdGFfY29tbW9uLmMNCkBAIC0wLDAgKzEsMTQxIEBA DQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIENvcHlyaWdo dCAoYykgMjAxOSAtIDIwMjAgRGlzcGxheUxpbmsgKFVLKSBMdGQuDQorICoNCisgKiBUaGlzIGZp bGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdjIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBt YWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yDQorICogbW9yZSBkZXRhaWxzLg0KKyAq Lw0KKyNpbmNsdWRlICJocGFsL2RhdGFfY29tbW9uLmgiDQorDQorI2luY2x1ZGUgImhwYWwvZGF0 YV9pbi5oIg0KKyNpbmNsdWRlICJocGFsL2RhdGFfb3V0LmgiDQorI2luY2x1ZGUgImhwYWwvaXNv Y2hfaW4uaCINCisjaW5jbHVkZSAiaHBhbC9pc29jaF9vdXQuaCINCisjaW5jbHVkZSAidXRpbHMv bWF1c2JfbG9ncy5oIg0KKw0KK3N0YXRpYyBpbmxpbmUNCitzdHJ1Y3QgbWF1c2JfaXBfY3R4ICpt YXVzYl9nZXRfZGF0YV9jaGFubmVsKHN0cnVjdCBtYXVzYl9kZXZpY2UgKm1hX2RldiwNCisJCQkJ CSAgICBlbnVtIG1hdXNiX2NoYW5uZWwgY2hhbm5lbCkNCit7DQorCWlmIChjaGFubmVsID49IE1B VVNCX0NIQU5ORUxfTUFQX0xFTkdUSCkNCisJCXJldHVybiBOVUxMOw0KKw0KKwlyZXR1cm4gbWFf ZGV2LT5jaGFubmVsX21hcFtjaGFubmVsXTsNCit9DQorDQoraW50IG1hdXNiX3NlbmRfZGF0YShz dHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsIGVudW0gbWF1c2JfY2hhbm5lbCBjaGFubmVsX251bSwN CisJCSAgICBzdHJ1Y3QgbWF1c2Jfa3ZlY19kYXRhX3dyYXBwZXIgKmRhdGEpDQorew0KKwlzdHJ1 Y3QgbWF1c2JfaXBfY3R4ICpjaGFubmVsID0gbWF1c2JfZ2V0X2RhdGFfY2hhbm5lbChkZXYsIGNo YW5uZWxfbnVtKTsNCisJaW50IHN0YXR1cyA9IDA7DQorDQorCWlmICghY2hhbm5lbCkNCisJCXJl dHVybiAtRUNIUk5HOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9pcF9zZW5kKGNoYW5uZWwsIGRhdGEp Ow0KKw0KKwlpZiAoc3RhdHVzIDwgMCkgew0KKwkJbWF1c2JfcHJfZXJyKCJTZW5kIGZhaWxlZC4g RGlzY29ubmVjdGluZy4uLiBzdGF0dXM9JWQiLCBzdGF0dXMpOw0KKwkJcXVldWVfd29yayhkZXYt PndvcmtxLCAmZGV2LT5zb2NrZXRfZGlzY29ubmVjdF93b3JrKTsNCisJCXF1ZXVlX3dvcmsoZGV2 LT53b3JrcSwgJmRldi0+aGNkX2Rpc2Nvbm5lY3Rfd29yayk7DQorCX0NCisNCisJcmV0dXJuIHN0 YXR1czsNCit9DQorDQoraW50IG1hdXNiX3NlbmRfdHJhbnNmZXJfYWNrKHN0cnVjdCBtYXVzYl9k ZXZpY2UgKmRldiwgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCXN0cnVjdCBtYV91 c2JfaGRyX2NvbW1vbiAqYWNrX2hkcjsNCisJc3RydWN0IGt2ZWMga3ZlYzsNCisJc3RydWN0IG1h dXNiX2t2ZWNfZGF0YV93cmFwcGVyIGRhdGFfdG9fc2VuZDsNCisJZW51bSBtYXVzYl9jaGFubmVs IGNoYW5uZWw7DQorDQorCWFja19oZHIgPSAoc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICopKCZl dmVudC0+ZGF0YS5oZHJfYWNrKTsNCisNCisJZGF0YV90b19zZW5kLmt2ZWMJICAgID0gJmt2ZWM7 DQorCWRhdGFfdG9fc2VuZC5rdmVjLT5pb3ZfYmFzZSA9IGFja19oZHI7DQorCWRhdGFfdG9fc2Vu ZC5rdmVjLT5pb3ZfbGVuICA9IGFja19oZHItPmxlbmd0aDsNCisJZGF0YV90b19zZW5kLmt2ZWNf bnVtCSAgICA9IDE7DQorCWRhdGFfdG9fc2VuZC5sZW5ndGgJICAgID0gYWNrX2hkci0+bGVuZ3Ro Ow0KKw0KKwljaGFubmVsID0gbWF1c2JfdHJhbnNmZXJfdHlwZV90b19jaGFubmVsKGV2ZW50LT5k YXRhLnRyYW5zZmVyX3R5cGUpOw0KKwlyZXR1cm4gbWF1c2Jfc2VuZF9kYXRhKGRldiwgY2hhbm5l bCwgJmRhdGFfdG9fc2VuZCk7DQorfQ0KKw0KK2ludCBtYXVzYl9zZW5kX2RhdGFfbXNnKHN0cnVj dCBtYXVzYl9kZXZpY2UgKmRldiwgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCXN0 cnVjdCBtYXVzYl91cmJfY3R4ICp1cmJfY3R4Ow0KKwlpbnQgc3RhdHVzID0gMDsNCisNCisJaWYg KGV2ZW50LT5zdGF0dXMgIT0gMCkgew0KKwkJbWF1c2JfcHJfZXJyKCJFdmVudCAlZCBmYWlsZWQg d2l0aCBzdGF0dXMgJWQiLA0KKwkJCSAgICAgZXZlbnQtPnR5cGUsIGV2ZW50LT5zdGF0dXMpOw0K KwkJbWF1c2JfY29tcGxldGVfdXJiKGV2ZW50KTsNCisJCXJldHVybiBldmVudC0+c3RhdHVzOw0K Kwl9DQorDQorCXVyYl9jdHggPSBtYXVzYl9maW5kX3VyYl9pbl90cmVlKChzdHJ1Y3QgdXJiICop ZXZlbnQtPmRhdGEudXJiKTsNCisNCisJaWYgKCF1cmJfY3R4KSB7DQorCQkvKiBUcmFuc2ZlciB3 aWxsIGJlIGRlbGV0ZWQgZnJvbSBkZXF1ZXVlIHRhc2sgKi8NCisJCW1hdXNiX3ByX3dhcm4oIlVy YiBpcyBhbHJlYWR5IGNhbmNlbGxlZCBmb3IgZXZlbnQ9JWQiLA0KKwkJCSAgICAgIGV2ZW50LT50 eXBlKTsNCisJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJaWYgKG1hdXNiX2lzb2NoX2RhdGFf ZXZlbnQoZXZlbnQpKSB7DQorCQlpZiAoZXZlbnQtPmRhdGEuZGlyZWN0aW9uID09IE1BVVNCX0RB VEFfTVNHX0RJUkVDVElPTl9JTikNCisJCQlzdGF0dXMgPSBtYXVzYl9zZW5kX2lzb2NoX2luX21z ZyhkZXYsIGV2ZW50KTsNCisJCWVsc2UNCisJCQlzdGF0dXMgPSBtYXVzYl9zZW5kX2lzb2NoX291 dF9tc2coZGV2LCBldmVudCwgdXJiX2N0eCk7DQorCX0gZWxzZSB7DQorCQlpZiAoZXZlbnQtPmRh dGEuZGlyZWN0aW9uID09IE1BVVNCX0RBVEFfTVNHX0RJUkVDVElPTl9JTikNCisJCQlzdGF0dXMg PSBtYXVzYl9zZW5kX2luX2RhdGFfbXNnKGRldiwgZXZlbnQpOw0KKwkJZWxzZQ0KKwkJCXN0YXR1 cyA9IG1hdXNiX3NlbmRfb3V0X2RhdGFfbXNnKGRldiwgZXZlbnQsIHVyYl9jdHgpOw0KKwl9DQor DQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK2ludCBtYXVzYl9yZWNlaXZlX2RhdGFfbXNnKHN0 cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQor CWludCBzdGF0dXMgPSAwOw0KKwlzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0eDsNCisNCisJ bWF1c2JfcHJfZGVidWcoIkRpcmVjdGlvbj0lZCIsIGV2ZW50LT5kYXRhLmRpcmVjdGlvbik7DQor DQorCWlmICghbWF1c2JfaXNvY2hfZGF0YV9ldmVudChldmVudCkpIHsNCisJCXN0YXR1cyA9IG1h dXNiX3NlbmRfdHJhbnNmZXJfYWNrKGRldiwgZXZlbnQpOw0KKwkJaWYgKHN0YXR1cyA8IDApIHsN CisJCQltYXVzYl9wcl93YXJuKCJTZW5kaW5nIGFja25vd2xlZGdtZW50IGZhaWxlZCIpOw0KKwkJ CWdvdG8gY2xlYW51cDsNCisJCX0NCisJfQ0KKw0KKwl1cmJfY3R4ID0gbWF1c2JfZmluZF91cmJf aW5fdHJlZSgoc3RydWN0IHVyYiAqKWV2ZW50LT5kYXRhLnVyYik7DQorDQorCWlmICghdXJiX2N0 eCkgew0KKwkJLyogVHJhbnNmZXIgd2lsbCBiZSBkZWxldGVkIGZyb20gZGVxdWV1ZSB0YXNrICov DQorCQltYXVzYl9wcl93YXJuKCJVcmIgaXMgYWxyZWFkeSBjYW5jZWxsZWQiKTsNCisJCWdvdG8g Y2xlYW51cDsNCisJfQ0KKw0KKwlpZiAobWF1c2JfaXNvY2hfZGF0YV9ldmVudChldmVudCkpIHsN CisJCWlmIChldmVudC0+ZGF0YS5kaXJlY3Rpb24gPT0gTUFVU0JfREFUQV9NU0dfRElSRUNUSU9O X0lOKQ0KKwkJCXN0YXR1cyA9IG1hdXNiX3JlY2VpdmVfaXNvY2hfaW5fZGF0YShkZXYsIGV2ZW50 LA0KKwkJCQkJCQkgICAgIHVyYl9jdHgpOw0KKwkJZWxzZQ0KKwkJCXN0YXR1cyA9IG1hdXNiX3Jl Y2VpdmVfaXNvY2hfb3V0KGV2ZW50KTsNCisJfSBlbHNlIHsNCisJCWlmIChldmVudC0+ZGF0YS5k aXJlY3Rpb24gPT0gTUFVU0JfREFUQV9NU0dfRElSRUNUSU9OX0lOKQ0KKwkJCW1hdXNiX3JlY2Vp dmVfaW5fZGF0YShldmVudCwgdXJiX2N0eCk7DQorCQllbHNlDQorCQkJbWF1c2JfcmVjZWl2ZV9v dXRfZGF0YShldmVudCwgdXJiX2N0eCk7DQorCX0NCisNCitjbGVhbnVwOg0KKwltYXVzYl9yZWxl YXNlX2V2ZW50X3Jlc291cmNlcyhldmVudCk7DQorCXJldHVybiBzdGF0dXM7DQorfQ0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvZGF0YV9pbi5jIGIvZHJpdmVy cy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9kYXRhX2luLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQppbmRleCAwMDAwMDAwMDAwMDAuLjRlMzk0NWIzMTQ1Zg0KLS0tIC9kZXYvbnVsbA0KKysrIGIv ZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9kYXRhX2luLmMNCkBAIC0wLDAgKzEsNzMg QEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29weXJp Z2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMg ZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhl IG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQor ICovDQorI2luY2x1ZGUgImhwYWwvZGF0YV9pbi5oIg0KKw0KKyNpbmNsdWRlICJoY2QvaHViLmgi DQorI2luY2x1ZGUgImhwYWwvZGF0YV9jb21tb24uaCINCisjaW5jbHVkZSAiaHBhbC9tYXVzYl9l dmVudHMuaCINCisjaW5jbHVkZSAidXRpbHMvbWF1c2JfZGF0YV9pdGVyYXRvci5oIg0KKyNpbmNs dWRlICJ1dGlscy9tYXVzYl9sb2dzLmgiDQorDQoraW50IG1hdXNiX3NlbmRfaW5fZGF0YV9tc2co c3RydWN0IG1hdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sN CisJc3RydWN0IG1hdXNiX2t2ZWNfZGF0YV93cmFwcGVyIGRhdGFfdG9fc2VuZDsNCisJc3RydWN0 IGt2ZWMga3ZlY1syXTsNCisJc3RydWN0IHVyYiAqdXJiICAgPSAoc3RydWN0IHVyYiAqKShldmVu dC0+ZGF0YS51cmIpOw0KKwlib29sIHNldHVwX3BhY2tldCA9ICh1c2JfZW5kcG9pbnRfeGZlcl9j b250cm9sKCZ1cmItPmVwLT5kZXNjKSAmJg0KKwkJCSAgICAgdXJiLT5zZXR1cF9wYWNrZXQpOw0K Kwl1MzIga3ZlY19udW0gPSBzZXR1cF9wYWNrZXQgPyAyIDogMTsNCisJZW51bSBtYXVzYl9jaGFu bmVsIGNoYW5uZWw7DQorDQorCWRhdGFfdG9fc2VuZC5rdmVjX251bQk9IGt2ZWNfbnVtOw0KKwlk YXRhX3RvX3NlbmQubGVuZ3RoCT0gTUFVU0JfVFJBTlNGRVJfSERSX1NJWkUgKw0KKwkJCShzZXR1 cF9wYWNrZXQgPyBNQVVTQl9DT05UUk9MX1NFVFVQX1NJWkUgOiAwKTsNCisNCisJLyogUHJlcGFy ZSB0cmFuc2ZlciBoZWFkZXIga3ZlYyAqLw0KKwlrdmVjWzBdLmlvdl9iYXNlID0gZXZlbnQtPmRh dGEuaGRyOw0KKwlrdmVjWzBdLmlvdl9sZW4gID0gTUFVU0JfVFJBTlNGRVJfSERSX1NJWkU7DQor DQorCS8qIFByZXBhcmUgc2V0dXAgcGFja2V0IGt2ZWMgKi8NCisJaWYgKHNldHVwX3BhY2tldCkg ew0KKwkJa3ZlY1sxXS5pb3ZfYmFzZSA9IHVyYi0+c2V0dXBfcGFja2V0Ow0KKwkJa3ZlY1sxXS5p b3ZfbGVuICA9IE1BVVNCX0NPTlRST0xfU0VUVVBfU0laRTsNCisJfQ0KKwlkYXRhX3RvX3NlbmQu a3ZlYyA9IGt2ZWM7DQorDQorCWNoYW5uZWwgPSBtYXVzYl90cmFuc2Zlcl90eXBlX3RvX2NoYW5u ZWwoZXZlbnQtPmRhdGEudHJhbnNmZXJfdHlwZSk7DQorCXJldHVybiBtYXVzYl9zZW5kX2RhdGEo ZGV2LCBjaGFubmVsLCAmZGF0YV90b19zZW5kKTsNCit9DQorDQordm9pZCBtYXVzYl9yZWNlaXZl X2luX2RhdGEoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkgICBzdHJ1Y3QgbWF1c2Jf dXJiX2N0eCAqdXJiX2N0eCkNCit7DQorCXN0cnVjdCB1cmIgKnVyYiA9IHVyYl9jdHgtPnVyYjsN CisJc3RydWN0IG1hdXNiX2RhdGFfaXRlciAqaXRlcmF0b3IgICAgID0gJnVyYl9jdHgtPml0ZXJh dG9yOw0KKwlzdHJ1Y3QgbWFfdXNiX2hkcl9jb21tb24gKmNvbW1vbl9oZHIgPQ0KKwkJCShzdHJ1 Y3QgbWFfdXNiX2hkcl9jb21tb24gKilldmVudC0+ZGF0YS5yZWN2X2J1ZjsNCisJdm9pZCAqYnVm ZmVyOw0KKwl1MzIgcGF5bG9hZF9zaXplID0gY29tbW9uX2hkci0+bGVuZ3RoIC0gTUFVU0JfVFJB TlNGRVJfSERSX1NJWkU7DQorCXUzMiBkYXRhX3dyaXR0ZW4gPSAwOw0KKw0KKwlidWZmZXIgPSBz aGlmdF9wdHIoY29tbW9uX2hkciwgTUFVU0JfVFJBTlNGRVJfSERSX1NJWkUpOw0KKwlkYXRhX3dy aXR0ZW4gPSBtYXVzYl9kYXRhX2l0ZXJhdG9yX3dyaXRlKGl0ZXJhdG9yLCBidWZmZXIsDQorCQkJ CQkJIHBheWxvYWRfc2l6ZSk7DQorDQorCW1hdXNiX3ByX2RlYnVnKCJkYXRhX3dyaXR0ZW49JWQs IHBheWxvYWRfc2l6ZT0lZCIsIGRhdGFfd3JpdHRlbiwNCisJCSAgICAgICBwYXlsb2FkX3NpemUp Ow0KKwlldmVudC0+ZGF0YS5yZW1fdHJhbnNmZXJfc2l6ZSAtPSBkYXRhX3dyaXR0ZW47DQorDQor CWlmIChldmVudC0+ZGF0YS50cmFuc2Zlcl9lb3QpIHsNCisJCW1hdXNiX3ByX2RlYnVnKCJ0cmFu c2Zlcl9zaXplPSVkLCByZW1fdHJhbnNmZXJfc2l6ZT0lZCwgc3RhdHVzPSVkIiwNCisJCQkgICAg ICAgZXZlbnQtPmRhdGEudHJhbnNmZXJfc2l6ZSwNCisJCQkgICAgICAgZXZlbnQtPmRhdGEucmVt X3RyYW5zZmVyX3NpemUsIGV2ZW50LT5zdGF0dXMpOw0KKwkJbWF1c2JfY29tcGxldGVfcmVxdWVz dCh1cmIsIGV2ZW50LT5kYXRhLnRyYW5zZmVyX3NpemUgLQ0KKwkJCQkgICAgICAgZXZlbnQtPmRh dGEucmVtX3RyYW5zZmVyX3NpemUsDQorCQkJCSAgICAgICBldmVudC0+c3RhdHVzKTsNCisJfQ0K K30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2RhdGFfb3V0 LmMgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2RhdGFfb3V0LmMNCm5ldyBmaWxl IG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmQ5MmY2YjA0ODJkMA0KLS0tIC9kZXYv bnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9kYXRhX291dC5jDQpA QCAtMCwwICsxLDIwMiBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQor LyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3BsYXlMaW5rIChVSykgTHRkLg0K KyAqDQorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUg Q09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0KKyAqIG1v cmUgZGV0YWlscy4NCisgKi8NCisjaW5jbHVkZSA8aHBhbC9kYXRhX291dC5oPg0KKw0KKyNpbmNs dWRlIDxsaW51eC9zbGFiLmg+DQorDQorI2luY2x1ZGUgImhjZC9odWIuaCINCisjaW5jbHVkZSAi aHBhbC9kYXRhX2NvbW1vbi5oIg0KKyNpbmNsdWRlICJ1dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9y LmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisNCitzdGF0aWMgaW50IG1hdXNi X2FkZF9kYXRhX2NodW5rKHZvaWQgKmJ1ZmZlciwgdTMyIGJ1ZmZlcl9zaXplLA0KKwkJCQlzdHJ1 Y3QgbGlzdF9oZWFkICpjaHVua3NfbGlzdCkNCit7DQorCXN0cnVjdCBtYXVzYl9wYXlsb2FkX2No dW5rICpkYXRhX2NodW5rOw0KKw0KKwlkYXRhX2NodW5rID0ga3phbGxvYyhzaXplb2YoKmRhdGFf Y2h1bmspLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkYXRhX2NodW5rKQ0KKwkJcmV0dXJuIC1FTk9N RU07DQorDQorCS8qIEluaXRpYWxpemUgZGF0YSBjaHVuayBmb3IgTUFVU0IgaGVhZGVyIGFuZCBh ZGQgaXQgdG8gY2h1bmtzIGxpc3QgKi8NCisJSU5JVF9MSVNUX0hFQUQoJmRhdGFfY2h1bmstPmxp c3RfZW50cnkpOw0KKw0KKwlkYXRhX2NodW5rLT5rdmVjLmlvdl9iYXNlID0gYnVmZmVyOw0KKwlk YXRhX2NodW5rLT5rdmVjLmlvdl9sZW4gID0gYnVmZmVyX3NpemU7DQorCWxpc3RfYWRkX3RhaWwo JmRhdGFfY2h1bmstPmxpc3RfZW50cnksIGNodW5rc19saXN0KTsNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbWF1c2JfaW5pdF9kYXRhX3dyYXBwZXIoc3RydWN0IG1hdXNiX2t2ZWNf ZGF0YV93cmFwcGVyICpkYXRhLA0KKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpjaHVua3NfbGlz dCwNCisJCQkJICAgdTMyIG51bV9vZl9kYXRhX2NodW5rcykNCit7DQorCXN0cnVjdCBtYXVzYl9w YXlsb2FkX2NodW5rICpkYXRhX2NodW5rID0gTlVMTCwNCisJCQkJICAgKnRtcCA9IE5VTEw7DQor CXUzMiBjdXJyZW50X2t2ZWMgPSAwOw0KKw0KKwlkYXRhLT5sZW5ndGggPSAwOw0KKwlkYXRhLT5r dmVjID0NCisJICAgIGtjYWxsb2MobnVtX29mX2RhdGFfY2h1bmtzLCBzaXplb2Yoc3RydWN0IGt2 ZWMpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFkYXRhLT5rdmVjKQ0KKwkJcmV0dXJuIC1FTk9NRU07 DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkYXRhX2NodW5rLCB0bXAsIGNodW5rc19s aXN0LCBsaXN0X2VudHJ5KSB7DQorCQlkYXRhLT5rdmVjW2N1cnJlbnRfa3ZlY10uaW92X2Jhc2Ug PQ0KKwkJCWRhdGFfY2h1bmstPmt2ZWMuaW92X2Jhc2U7DQorCQlkYXRhLT5rdmVjW2N1cnJlbnRf a3ZlY10uaW92X2xlbiAgPQ0KKwkJICAgIGRhdGFfY2h1bmstPmt2ZWMuaW92X2xlbjsNCisJCSsr ZGF0YS0+a3ZlY19udW07DQorCQlkYXRhLT5sZW5ndGggKz0gZGF0YV9jaHVuay0+a3ZlYy5pb3Zf bGVuOw0KKwkJKytjdXJyZW50X2t2ZWM7DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyBpbnQgbWF1c2JfaW5pdF9oZWFkZXJfZGF0YV9jaHVuayhzdHJ1Y3QgbWFfdXNiX2hkcl9jb21t b24gKmNvbW1vbl9oZHIsDQorCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpjaHVua3NfbGlzdCwNCisJ CQkJCXUzMiAqbnVtX29mX2RhdGFfY2h1bmtzKQ0KK3sNCisJaW50IHN0YXR1cyA9IG1hdXNiX2Fk ZF9kYXRhX2NodW5rKGNvbW1vbl9oZHIsIE1BVVNCX1RSQU5TRkVSX0hEUl9TSVpFLA0KKwkJCQkJ ICBjaHVua3NfbGlzdCk7DQorCWlmICghc3RhdHVzKQ0KKwkJKysoKm51bV9vZl9kYXRhX2NodW5r cyk7DQorDQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfaW5pdF9j b250cm9sX2RhdGFfY2h1bmsoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkJCSBzdHJ1 Y3QgbGlzdF9oZWFkICpjaHVua3NfbGlzdCwNCisJCQkJCSB1MzIgKm51bV9vZl9kYXRhX2NodW5r cykNCit7DQorCWludCBzdGF0dXM7DQorCXZvaWQgKmJ1ZmZlciA9ICgoc3RydWN0IHVyYiAqKWV2 ZW50LT5kYXRhLnVyYiktPnNldHVwX3BhY2tldDsNCisNCisJaWYgKCFldmVudC0+ZGF0YS5maXJz dF9jb250cm9sX3BhY2tldCkNCisJCXJldHVybiAwOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9hZGRf ZGF0YV9jaHVuayhidWZmZXIsIE1BVVNCX0NPTlRST0xfU0VUVVBfU0laRSwNCisJCQkJICAgICAg Y2h1bmtzX2xpc3QpOw0KKwlpZiAoIXN0YXR1cykNCisJCSsrKCpudW1fb2ZfZGF0YV9jaHVua3Mp Ow0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9jbGVhbnVw X2NodW5rc19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmNodW5rc19saXN0KQ0KK3sNCisJc3RydWN0 IG1hdXNiX3BheWxvYWRfY2h1bmsgKmRhdGFfY2h1bmsgPSBOVUxMLCAqdG1wID0gTlVMTDsNCisN CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRhdGFfY2h1bmssIHRtcCwgY2h1bmtzX2xpc3Qs IGxpc3RfZW50cnkpIHsNCisJCWxpc3RfZGVsKCZkYXRhX2NodW5rLT5saXN0X2VudHJ5KTsNCisJ CWtmcmVlKGRhdGFfY2h1bmspOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittYXVzYl9wcmVw YXJlX3RyYW5zZmVyX3BhY2tldChzdHJ1Y3QgbWF1c2Jfa3ZlY19kYXRhX3dyYXBwZXIgKndyYXBw ZXIsDQorCQkJICAgICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkgICAgICBzdHJ1 Y3QgbWF1c2JfZGF0YV9pdGVyICppdGVyYXRvcikNCit7DQorCXUzMiBudW1fb2ZfZGF0YV9jaHVu a3MJCT0gMDsNCisJdTMyIG51bV9vZl9wYXlsb2FkX2RhdGFfY2h1bmtzCT0gMDsNCisJdTMyIHBh eWxvYWRfZGF0YV9zaXplCQk9IDA7DQorCWludCBzdGF0dXMgPSAwOw0KKwlzdHJ1Y3QgbGlzdF9o ZWFkIGNodW5rc19saXN0Ow0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBheWxvYWRfZGF0YV9jaHVua3M7 DQorCXN0cnVjdCBtYV91c2JfaGRyX2NvbW1vbiAqZGF0YV9oZHIgPSAoc3RydWN0IG1hX3VzYl9o ZHJfY29tbW9uICopDQorCQkJZXZlbnQtPmRhdGEuaGRyOw0KKw0KKwlJTklUX0xJU1RfSEVBRCgm Y2h1bmtzX2xpc3QpOw0KKw0KKwkvKiBJbml0aWFsaXplIGRhdGEgY2h1bmsgZm9yIE1BVVNCIGhl YWRlciBhbmQgYWRkIGl0IHRvIGNodW5rcyBsaXN0ICovDQorCWlmIChtYXVzYl9pbml0X2hlYWRl cl9kYXRhX2NodW5rKGRhdGFfaGRyLCAmY2h1bmtzX2xpc3QsDQorCQkJCQkgJm51bV9vZl9kYXRh X2NodW5rcykgPCAwKSB7DQorCQlzdGF0dXMgPSAtRU5PTUVNOw0KKwkJZ290byBjbGVhbnVwX2Rh dGFfY2h1bmtzOw0KKwl9DQorDQorCS8qDQorCSAqIEluaXRpYWxpemUgZGF0YSBjaHVuayBmb3Ig TUFVU0IgY29udHJvbCBzZXR1cCBwYWNrZXQgYW5kDQorCSAqIGFkZCBpdCB0byBjaHVua3MgbGlz dA0KKwkgKi8NCisJaWYgKG1hdXNiX2luaXRfY29udHJvbF9kYXRhX2NodW5rKGV2ZW50LCAmY2h1 bmtzX2xpc3QsDQorCQkJCQkgICZudW1fb2ZfZGF0YV9jaHVua3MpIDwgMCkgew0KKwkJc3RhdHVz ID0gLUVOT01FTTsNCisJCWdvdG8gY2xlYW51cF9kYXRhX2NodW5rczsNCisJfQ0KKw0KKwkvKiBH ZXQgZGF0YSBjaHVua3MgZm9yIGRhdGEgcGF5bG9hZCB0byBzZW5kICovDQorCUlOSVRfTElTVF9I RUFEKCZwYXlsb2FkX2RhdGFfY2h1bmtzKTsNCisJcGF5bG9hZF9kYXRhX3NpemUgPQ0KKwkJCSgo c3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICopZXZlbnQtPmRhdGEuaGRyKS0+bGVuZ3RoIC0NCisJ CQkgTUFVU0JfVFJBTlNGRVJfSERSX1NJWkUgLQ0KKwkJCSAoZXZlbnQtPmRhdGEuZmlyc3RfY29u dHJvbF9wYWNrZXQgPw0KKwkJCSAgTUFVU0JfQ09OVFJPTF9TRVRVUF9TSVpFIDogMCk7DQorDQor CWlmIChtYXVzYl9kYXRhX2l0ZXJhdG9yX3JlYWQoaXRlcmF0b3IsIHBheWxvYWRfZGF0YV9zaXpl LA0KKwkJCQkgICAgICZwYXlsb2FkX2RhdGFfY2h1bmtzLA0KKwkJCQkgICAgICZudW1fb2ZfcGF5 bG9hZF9kYXRhX2NodW5rcykgPCAwKSB7DQorCQlzdGF0dXMgPSAtRU5PTUVNOw0KKwkJZ290byBj bGVhbnVwX2RhdGFfY2h1bmtzOw0KKwl9DQorDQorCWxpc3Rfc3BsaWNlX3RhaWwoJnBheWxvYWRf ZGF0YV9jaHVua3MsICZjaHVua3NfbGlzdCk7DQorCW51bV9vZl9kYXRhX2NodW5rcyArPSBudW1f b2ZfcGF5bG9hZF9kYXRhX2NodW5rczsNCisNCisJLyogTWFwIGFsbCBkYXRhIGNodW5rcyB0byBk YXRhIHdyYXBwZXIgKi8NCisJaWYgKG1hdXNiX2luaXRfZGF0YV93cmFwcGVyKHdyYXBwZXIsICZj aHVua3NfbGlzdCwNCisJCQkJICAgIG51bV9vZl9kYXRhX2NodW5rcykgPCAwKSB7DQorCQlzdGF0 dXMgPSAtRU5PTUVNOw0KKwkJZ290byBjbGVhbnVwX2RhdGFfY2h1bmtzOw0KKwl9DQorDQorY2xl YW51cF9kYXRhX2NodW5rczogLyogQ2xlYW51cCBhbGwgYWxsb2NhdGVkIGRhdGEgY2h1bmtzICov DQorCW1hdXNiX2NsZWFudXBfY2h1bmtzX2xpc3QoJmNodW5rc19saXN0KTsNCisJcmV0dXJuIHN0 YXR1czsNCit9DQorDQoraW50IG1hdXNiX3NlbmRfb3V0X2RhdGFfbXNnKHN0cnVjdCBtYXVzYl9k ZXZpY2UgKmRldiwgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkgICAgc3RydWN0IG1h dXNiX3VyYl9jdHggKnVyYl9jdHgpDQorew0KKwlpbnQgc3RhdHVzOw0KKwlzdHJ1Y3QgbWF1c2Jf a3ZlY19kYXRhX3dyYXBwZXIgZGF0YTsNCisJZW51bSBtYXVzYl9jaGFubmVsIGNoYW5uZWw7DQor DQorCXN0YXR1cyA9IG1hdXNiX3ByZXBhcmVfdHJhbnNmZXJfcGFja2V0KCZkYXRhLCBldmVudCwN CisJCQkJCSAgICAgICAmdXJiX2N0eC0+aXRlcmF0b3IpOw0KKw0KKwlpZiAoc3RhdHVzIDwgMCkg ew0KKwkJbWF1c2JfcHJfZXJyKCJGYWlsZWQgdG8gcHJlcGFyZSB0cmFuc2ZlciBwYWNrZXQiKTsN CisJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJY2hhbm5lbCA9IG1hdXNiX3RyYW5zZmVyX3R5 cGVfdG9fY2hhbm5lbChldmVudC0+ZGF0YS50cmFuc2Zlcl90eXBlKTsNCisJc3RhdHVzID0gbWF1 c2Jfc2VuZF9kYXRhKGRldiwgY2hhbm5lbCwgJmRhdGEpOw0KKw0KKwlrZnJlZShkYXRhLmt2ZWMp Ow0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCit2b2lkIG1hdXNiX3JlY2VpdmVfb3V0X2Rh dGEoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkgICAgc3RydWN0IG1hdXNiX3VyYl9j dHggKnVyYl9jdHgpDQorew0KKwlzdHJ1Y3QgdXJiICp1cmIgPSB1cmJfY3R4LT51cmI7DQorDQor CW1hdXNiX3ByX2RlYnVnKCJ0cmFuc2Zlcl9zaXplPSVkLCByZW1fdHJhbnNmZXJfc2l6ZT0lZCwg c3RhdHVzPSVkIiwNCisJCSAgICAgICBldmVudC0+ZGF0YS50cmFuc2Zlcl9zaXplLCBldmVudC0+ ZGF0YS5yZW1fdHJhbnNmZXJfc2l6ZSwNCisJCSAgICAgICBldmVudC0+c3RhdHVzKTsNCisNCisJ aWYgKGV2ZW50LT5kYXRhLnRyYW5zZmVyX2VvdCkgew0KKwkJbWF1c2JfY29tcGxldGVfcmVxdWVz dCh1cmIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAtDQorCQkJCSAgICAgICBldmVudC0+ ZGF0YS5yZW1fdHJhbnNmZXJfc2l6ZSwNCisJCQkJICAgICAgIGV2ZW50LT5zdGF0dXMpOw0KKwl9 DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvaHBhbC5j IGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9ocGFsLmMNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjRhMzZjOGI5YjlmZg0KLS0tIC9kZXYvbnVsbA0K KysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9ocGFsLmMNCkBAIC0wLDAgKzEs MTMwNiBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBD b3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3BsYXlMaW5rIChVSykgTHRkLg0KKyAqDQorICog VGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNlIHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBp biB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcg0KKyAqIG1vcmUgZGV0YWls cy4NCisgKi8NCisjaW5jbHVkZSAiaHBhbC9ocGFsLmgiDQorDQorI2luY2x1ZGUgPGxpbnV4L2tv YmplY3QuaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KKyNpbmNsdWRlIDxsaW51eC9zeXNm cy5oPg0KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4NCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5o Pg0KKw0KKyNpbmNsdWRlICJjb21tb24vbWF1c2JfZXZlbnQuaCINCisjaW5jbHVkZSAiaGNkL2h1 Yi5oIg0KKyNpbmNsdWRlICJoY2QvdmhjZC5oIg0KKyNpbmNsdWRlICJocGFsL21hdXNiX2V2ZW50 cy5oIg0KKyNpbmNsdWRlICJocGFsL2RhdGFfY29tbW9uLmgiDQorI2luY2x1ZGUgImhwYWwvbmV0 d29ya19jYWxsYmFja3MuaCINCisjaW5jbHVkZSAibGluay9tYXVzYl9pcF9saW5rLmgiDQorI2lu Y2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisjaW5jbHVkZSAidXRpbHMvbWF1c2JfbW1hcC5o Ig0KKyNpbmNsdWRlICJ1dGlscy9tYXVzYl9yaW5nX2J1ZmZlci5oIg0KKyNpbmNsdWRlICJ1dGls cy9tYXVzYl9kYXRhX2l0ZXJhdG9yLmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX3ZlcnNpb24u aCINCisNCisjZGVmaW5lIE1BVVNCX0RFTEVURV9NQURFVl9USU1FT1VUX01TIDMwMDANCisNCitz dHJ1Y3QgbXNzIG1zczsNCisNCitzdGF0aWMgaW50IG1hdXNiX3N0YXJ0X2Nvbm5lY3Rpb25fdGlt ZXIoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2KTsNCitzdGF0aWMgaW50IG1hdXNiX3Bvd2VyX3N0 YXRlX2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLA0K KwkJCQl2b2lkICpkYXRhKTsNCitzdGF0aWMgdm9pZCBtYXVzYl9zaWduYWxfZW1wdHlfbXNzKHZv aWQpOw0KK3N0YXRpYyB2b2lkIG1hdXNiX3JlbW92ZV9tYWRldl9mcm9tX2xpc3QodTggbWFkZXZf YWRkcik7DQorc3RhdGljIHZvaWQgbWF1c2JfZXhlY3V0ZV91cmJfZGVxdWV1ZShzdHJ1Y3Qgd29y a19zdHJ1Y3QgKmRlcXVldWVfd29yayk7DQorc3RhdGljIGludCBtYXVzYl9zdGFydF9oZWFydGJl YXRfdGltZXIodm9pZCk7DQorDQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAq X19tYXVzYl9maW5kX3VyYl9pbl90cmVlKHN0cnVjdCB1cmIgKnVyYikNCit7DQorCXN0cnVjdCBy Yl9ub2RlICpub2RlID0gbWhjZC0+bWF1c2JfdXJicy5yYl9ub2RlOw0KKw0KKwl3aGlsZSAobm9k ZSkgew0KKwkJc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHggPQ0KKwkJICAgIHJiX2VudHJ5 KG5vZGUsIHN0cnVjdCBtYXVzYl91cmJfY3R4LCByYl9ub2RlKTsNCisNCisJCWlmICh1cmIgPCB1 cmJfY3R4LT51cmIpDQorCQkJbm9kZSA9IHVyYl9jdHgtPnJiX25vZGUucmJfbGVmdDsNCisJCWVs c2UgaWYgKHVyYiA+IHVyYl9jdHgtPnVyYikNCisJCQlub2RlID0gdXJiX2N0eC0+cmJfbm9kZS5y Yl9yaWdodDsNCisJCWVsc2UNCisJCQlyZXR1cm4gdXJiX2N0eDsNCisJfQ0KKwlyZXR1cm4gTlVM TDsNCit9DQorDQorc3RydWN0IG1hdXNiX3VyYl9jdHggKm1hdXNiX2ZpbmRfdXJiX2luX3RyZWUo c3RydWN0IHVyYiAqdXJiKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQorCXN0cnVj dCBtYXVzYl91cmJfY3R4ICp1cmJfY3R4Ow0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+ bG9jaywgZmxhZ3MpOw0KKwl1cmJfY3R4ID0gIF9fbWF1c2JfZmluZF91cmJfaW5fdHJlZSh1cmIp Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQorCXJl dHVybiB1cmJfY3R4Ow0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX2luc2VydF91cmJfY3R4X2lu X3RyZWUoc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpDQorew0KKwlzdHJ1Y3QgcmJfbm9k ZSAqKm5ld19ub2RlID0gJm1oY2QtPm1hdXNiX3VyYnMucmJfbm9kZTsNCisJc3RydWN0IHJiX25v ZGUgKnBhcmVudCA9IE5VTEw7DQorCXN0cnVjdCBtYXVzYl91cmJfY3R4ICpjdXJyZW50X3VyYiA9 IE5VTEw7DQorDQorCXdoaWxlICgqbmV3X25vZGUpIHsNCisJCXBhcmVudCA9ICpuZXdfbm9kZTsN CisJCWN1cnJlbnRfdXJiID0gcmJfZW50cnkoKm5ld19ub2RlLCBzdHJ1Y3QgbWF1c2JfdXJiX2N0 eCwNCisJCQkJICAgICAgIHJiX25vZGUpOw0KKw0KKwkJaWYgKHVyYl9jdHgtPnVyYiA8IGN1cnJl bnRfdXJiLT51cmIpDQorCQkJbmV3X25vZGUgPSAmKCgqbmV3X25vZGUpLT5yYl9sZWZ0KTsNCisJ CWVsc2UgaWYgKHVyYl9jdHgtPnVyYiA+IGN1cnJlbnRfdXJiLT51cmIpDQorCQkJbmV3X25vZGUg PSAmKCgqbmV3X25vZGUpLT5yYl9yaWdodCk7DQorCQllbHNlDQorCQkJcmV0dXJuIC1FRVhJU1Q7 DQorCX0NCisJcmJfbGlua19ub2RlKCZ1cmJfY3R4LT5yYl9ub2RlLCBwYXJlbnQsIG5ld19ub2Rl KTsNCisJcmJfaW5zZXJ0X2NvbG9yKCZ1cmJfY3R4LT5yYl9ub2RlLCAmbWhjZC0+bWF1c2JfdXJi cyk7DQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9kZWxldGVfdXJiX2N0 eF9mcm9tX3RyZWUoc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpDQorew0KKwlyYl9lcmFz ZSgmdXJiX2N0eC0+cmJfbm9kZSwgJm1oY2QtPm1hdXNiX3VyYnMpOw0KK30NCisNCitzdGF0aWMg c3RydWN0IG1hdXNiX3VyYl9jdHggKm1hdXNiX2NyZWF0ZV91cmJfY3R4KHN0cnVjdCB1cmIgKnVy YiwgaW50ICpzdGF0dXMpDQorew0KKwlzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0eCA9IE5V TEw7DQorDQorCWlmICghdXJiKSB7DQorCQltYXVzYl9wcl9lcnIoIlVyYiBpcyBOVUxMIik7DQor CQkqc3RhdHVzID0gLUVJTlZBTDsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCXVyYl9jdHgg PSBremFsbG9jKHNpemVvZigqdXJiX2N0eCksIEdGUF9BVE9NSUMpOw0KKwlpZiAoIXVyYl9jdHgp IHsNCisJCSpzdGF0dXMgPSAtRU5PTUVNOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJdXJi X2N0eC0+dXJiID0gdXJiOw0KKwlJTklUX1dPUksoJnVyYl9jdHgtPndvcmssIG1hdXNiX2V4ZWN1 dGVfdXJiX2RlcXVldWUpOw0KKw0KKwlyZXR1cm4gdXJiX2N0eDsNCit9DQorDQoraW50IG1hdXNi X2luc2VydF91cmJfaW5fdHJlZShzdHJ1Y3QgdXJiICp1cmIsIGJvb2wgbGlua191cmJfdG9fZXAp DQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlpbnQgc3RhdHVzID0gMDsNCisNCisJc3Ry dWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHggPSBtYXVzYl9jcmVhdGVfdXJiX2N0eCh1cmIsICZz dGF0dXMpOw0KKw0KKwlpZiAoIXVyYl9jdHgpDQorCQlyZXR1cm4gc3RhdHVzOw0KKw0KKwlzcGlu X2xvY2tfaXJxc2F2ZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlpZiAobGlua191cmJfdG9f ZXApIHsNCisJCXN0YXR1cyA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAodXJiLT5oY3ByaXYsIHVy Yik7DQorCQlpZiAoc3RhdHVzKSB7DQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+ bG9jaywgZmxhZ3MpOw0KKwkJCW1hdXNiX3ByX2VycigiRXJyb3IgJWQgd2hpbGUgbGlua2luZyB1 cmIgdG8gaGNkX2VuZHBvaW50IiwNCisJCQkJICAgICBzdGF0dXMpOw0KKwkJCWtmcmVlKHVyYl9j dHgpOw0KKwkJCXJldHVybiBzdGF0dXM7DQorCQl9DQorCX0NCisNCisJaWYgKG1hdXNiX2luc2Vy dF91cmJfY3R4X2luX3RyZWUodXJiX2N0eCkpIHsNCisJCWtmcmVlKHVyYl9jdHgpOw0KKwkJaWYg KGxpbmtfdXJiX3RvX2VwKQ0KKwkJCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKHVyYi0+aGNw cml2LCB1cmIpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3Mp Ow0KKwkJbWF1c2JfcHJfZXJyKCJVcmJfY3R4IGluc2VydGlvbiBmYWlsZWQiKTsNCisJCXJldHVy biAtRUVYSVNUOw0KKwl9DQorDQorCW1hdXNiX2luaXRfZGF0YV9pdGVyYXRvcigmdXJiX2N0eC0+ aXRlcmF0b3IsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLA0KKwkJCQkgdXJiLT50cmFuc2Zlcl9idWZm ZXJfbGVuZ3RoLCB1cmItPnNnLA0KKwkJCQkgKHVuc2lnbmVkIGludCl1cmItPm51bV9zZ3MsDQor CQkJCSB1c2JfdXJiX2Rpcl9pbih1cmIpKTsNCisNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm bWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGJvb2wg bWF1c2JfcmV0dXJuX3VyYl9jdHhfdG9fdHJlZShzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0 eCwNCisJCQkJCSBib29sIGxpbmtfdXJiX3RvX2VwKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFn czsNCisJaW50IHN0YXR1czsNCisNCisJaWYgKCF1cmJfY3R4KQ0KKwkJcmV0dXJuIGZhbHNlOw0K Kw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKwlpZiAobGlua191 cmJfdG9fZXApIHsNCisJCXN0YXR1cyA9IHVzYl9oY2RfbGlua191cmJfdG9fZXAodXJiX2N0eC0+ dXJiLT5oY3ByaXYsDQorCQkJCQkJdXJiX2N0eC0+dXJiKTsNCisJCWlmIChzdGF0dXMpIHsNCisJ CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorCQkJbWF1c2Jf cHJfZXJyKCJFcnJvciAlZCB3aGlsZSBsaW5raW5nIHVyYiB0byBoY2RfZW5kcG9pbnQiLA0KKwkJ CQkgICAgIHN0YXR1cyk7DQorCQkJcmV0dXJuIGZhbHNlOw0KKwkJfQ0KKwl9DQorDQorCWlmICht YXVzYl9pbnNlcnRfdXJiX2N0eF9pbl90cmVlKHVyYl9jdHgpKSB7DQorCQlpZiAobGlua191cmJf dG9fZXApDQorCQkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAodXJiX2N0eC0+dXJiLT5oY3By aXYsDQorCQkJCQkJICAgdXJiX2N0eC0+dXJiKTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo Jm1oY2QtPmxvY2ssIGZsYWdzKTsNCisJCW1hdXNiX3ByX2VycigiVXJiX2N0eCBpbnNlcnRpb24g ZmFpbGVkIik7DQorCQlyZXR1cm4gZmFsc2U7DQorCX0NCisNCisJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4gdHJ1ZTsNCit9DQorDQorc3Rh dGljIHZvaWQgbWF1c2JfY29tcGxldGVfdXJic19mcm9tX3RyZWUodm9pZCkNCit7DQorCXN0cnVj dCBtYXVzYl91cmJfY3R4ICp1cmJfY3R4ID0gTlVMTDsNCisJc3RydWN0IHVyYgkgICAgICpjdXJy ZW50X3VyYiA9IE5VTEw7DQorCXN0cnVjdCByYl9ub2RlCSAgICAgKmN1cnJlbnRfbm9kZSA9IE5V TEw7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCWludCBzdGF0dXMgPSAwOw0KKwlpbnQgcmV0 Ow0KKw0KKwltYXVzYl9wcl9kZWJ1ZygiQ29tcGxldGluZyBhbGwgdXJicyBmcm9tIHRyZWUiKTsN CisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsNCisNCisJd2hpbGUg KChjdXJyZW50X25vZGUgPSByYl9maXJzdCgmbWhjZC0+bWF1c2JfdXJicykpKSB7DQorCQl1cmJf Y3R4ID0gcmJfZW50cnkoY3VycmVudF9ub2RlLCBzdHJ1Y3QgbWF1c2JfdXJiX2N0eCwgcmJfbm9k ZSk7DQorDQorCQljdXJyZW50X3VyYiA9IHVyYl9jdHgtPnVyYjsNCisJCW1hdXNiX2RlbGV0ZV91 cmJfY3R4X2Zyb21fdHJlZSh1cmJfY3R4KTsNCisJCW1hdXNiX3VuaW5pdF9kYXRhX2l0ZXJhdG9y KCZ1cmJfY3R4LT5pdGVyYXRvcik7DQorCQlrZnJlZSh1cmJfY3R4KTsNCisNCisJCXJldCA9IHVz Yl9oY2RfY2hlY2tfdW5saW5rX3VyYihjdXJyZW50X3VyYi0+aGNwcml2LA0KKwkJCQkJICAgICAg IGN1cnJlbnRfdXJiLCBzdGF0dXMpOw0KKwkJaWYgKHJldCA9PSAtRUlEUk0pDQorCQkJbWF1c2Jf cHJfd2FybigiVXJiPSVwIGlzIGFscmVhZHkgdW5saW5rZWQiLA0KKwkJCQkgICAgICBjdXJyZW50 X3VyYik7DQorCQllbHNlDQorCQkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoY3VycmVudF91 cmItPmhjcHJpdiwNCisJCQkJCQkgICBjdXJyZW50X3VyYik7DQorDQorCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQorCQkvKiBQcmVwYXJlIHVyYiBmb3Ig Y29tcGxldGlvbiAqLw0KKwkJbWF1c2JfcHJfZGVidWcoIkNvbXBsZXRpbmcgdXJiPSVwIiwgY3Vy cmVudF91cmIpOw0KKw0KKwkJY3VycmVudF91cmItPnN0YXR1cwkgICA9IC1FUFJPVE87DQorCQlj dXJyZW50X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7DQorCQlhdG9taWNfZGVjKCZjdXJyZW50X3Vy Yi0+dXNlX2NvdW50KTsNCisJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGN1cnJlbnRfdXJiLT5oY3By aXYsIGN1cnJlbnRfdXJiLA0KKwkJCQkgICAgIGN1cnJlbnRfdXJiLT5zdGF0dXMpOw0KKw0KKwkJ c3Bpbl9sb2NrX2lycXNhdmUoJm1oY2QtPmxvY2ssIGZsYWdzKTsNCisJfQ0KKw0KKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQorCW1hdXNiX3ByX2RlYnVn KCJDb21wbGV0ZWQgYWxsIHVyYnMgZnJvbSB0cmVlIik7DQorfQ0KKw0KKy8qQWZ0ZXIgdGhpcyBm dW5jdGlvbiBjYWxsIG9ubHkgdmFsaWQgdGhpbmcgdG8gZG8gd2l0aCB1cmIgaXMgdG8gZ2l2ZSBp dCBiYWNrKi8NCitzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqbWF1c2JfdW5saW5rX2FuZF9kZWxldGVf dXJiX2Zyb21fdHJlZShzdHJ1Y3QgdXJiICp1cmIsDQorCQkJCQkJCSAgICBpbnQgc3RhdHVzKQ0K K3sNCisJc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHggPSBOVUxMOw0KKwl1bnNpZ25lZCBs b25nIGZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAoIXVyYikgew0KKwkJbWF1c2JfcHJfd2Fy bigiVXJiIGlzIE5VTEwiKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQorDQorCXVyYl9jdHggPSBfX21hdXNiX2ZpbmRf dXJiX2luX3RyZWUodXJiKTsNCisNCisJaWYgKCF1cmJfY3R4KSB7DQorCQltYXVzYl9wcl93YXJu KCJVcmI9JXAgbm90IGluIHRyZWUiLCB1cmIpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm bWhjZC0+bG9jaywgZmxhZ3MpOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJcmV0ID0gdXNi X2hjZF9jaGVja191bmxpbmtfdXJiKHVyYi0+aGNwcml2LCB1cmIsIHN0YXR1cyk7DQorDQorCWlm IChyZXQgPT0gLUVJRFJNKQ0KKwkJbWF1c2JfcHJfd2FybigiVXJiPSVwIGlzIGFscmVhZHkgdW5s aW5rZWQiLCB1cmIpOw0KKwllbHNlDQorCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh1cmIt PmhjcHJpdiwgdXJiKTsNCisNCisJbWF1c2JfZGVsZXRlX3VyYl9jdHhfZnJvbV90cmVlKHVyYl9j dHgpOw0KKw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaGNkLT5sb2NrLCBmbGFncyk7DQor DQorCW1hdXNiX3ByX2RlYnVnKCJVcmI9JXAgaXMgcmVtb3ZlZCBmcm9tIHRyZWUiLCB1cmIpOw0K Kw0KKwlyZXR1cm4gdXJiX2N0eDsNCit9DQorDQordm9pZCBtYXVzYl9yZWxlYXNlX2V2ZW50X3Jl c291cmNlcyhzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJc3RydWN0IG1hX3VzYl9o ZHJfY29tbW9uICpyZWNlaXZlX2J1ZmZlciA9IChzdHJ1Y3QgbWFfdXNiX2hkcl9jb21tb24gKikN CisJCQkJCQkgICAgZXZlbnQtPmRhdGEucmVjdl9idWY7DQorDQorCWtmcmVlKHJlY2VpdmVfYnVm ZmVyKTsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1c2JfaXRlcmF0b3JfcmVzZXQoc3RydWN0IG1h dXNiX2RldmljZSAqZGV2LA0KKwkJCQkgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQor CXN0cnVjdCB1cmIJICAgICAqdXJiID0gKHN0cnVjdCB1cmIgKilldmVudC0+ZGF0YS51cmI7DQor CXN0cnVjdCBtYXVzYl91cmJfY3R4ICp1cmJfY3R4Ow0KKw0KKwl1cmJfY3R4ID0gbWF1c2JfZmlu ZF91cmJfaW5fdHJlZSh1cmIpOw0KKw0KKwlpZiAodXJiX2N0eCkNCisJCW1hdXNiX3Jlc2V0X2Rh dGFfaXRlcmF0b3IoJnVyYl9jdHgtPml0ZXJhdG9yKTsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1 c2JfaXRlcmF0b3Jfc2VlayhzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCXN0cnVjdCBt YXVzYl9ldmVudCAqZXZlbnQpDQorew0KKwlzdHJ1Y3QgdXJiCSAgICAgKnVyYiA9IChzdHJ1Y3Qg dXJiICopZXZlbnQtPmRhdGEudXJiOw0KKwlzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0eDsN CisNCisJdXJiX2N0eCA9IG1hdXNiX2ZpbmRfdXJiX2luX3RyZWUodXJiKTsNCisNCisJaWYgKHVy Yl9jdHgpDQorCQltYXVzYl9kYXRhX2l0ZXJhdG9yX3NlZWsoJnVyYl9jdHgtPml0ZXJhdG9yLA0K KwkJCQkJIGV2ZW50LT5kYXRhLml0ZXJhdG9yX3NlZWtfZGVsdGEpOw0KK30NCisNCit2b2lkIG1h dXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJc3RydWN0 IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKilldmVudC0+ZGF0YS51cmI7DQorDQorCW1hdXNiX3By X2RlYnVnKCJ0cmFuc2Zlcl9zaXplPSVkLCByZW1fdHJhbnNmZXJfc2l6ZT0lZCwgc3RhdHVzPSVk IiwNCisJCSAgICAgICBldmVudC0+ZGF0YS50cmFuc2Zlcl9zaXplLA0KKwkJICAgICAgIGV2ZW50 LT5kYXRhLnJlbV90cmFuc2Zlcl9zaXplLCBldmVudC0+c3RhdHVzKTsNCisJbWF1c2JfY29tcGxl dGVfcmVxdWVzdCh1cmIsDQorCQkJICAgICAgIGV2ZW50LT5kYXRhLnRyYW5zZmVyX3NpemUgLQ0K KwkJCSAgICAgICBldmVudC0+ZGF0YS5yZW1fdHJhbnNmZXJfc2l6ZSwNCisJCQkgICAgICAgZXZl bnQtPnN0YXR1cyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2RlbGV0ZV9tYV9kZXYoc3Ry dWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQlzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0K K3sNCisJbWF1c2Jfc2lnbmFsX2V2ZW50KGRldiwgZXZlbnQsIGV2ZW50LT5tZ210LmRlbGV0ZV9t YV9kZXYuZXZlbnRfaWQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9wcm9jZXNzX3VzZXJf ZmluaXNoZWQoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkJc3RydWN0IG1hdXNiX2V2 ZW50ICpldmVudCkNCit7DQorCWNvbXBsZXRlKCZkZXYtPnVzZXJfZmluaXNoZWRfZXZlbnQpOw0K K30NCisNCitzdGF0aWMgaW50IG1hdXNiX3NlbmRfbWdtdF9tc2coc3RydWN0IG1hdXNiX2Rldmlj ZSAqZGV2LA0KKwkJCSAgICAgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJc3Ry dWN0IG1hdXNiX2t2ZWNfZGF0YV93cmFwcGVyIHdyYXBwZXI7DQorCXN0cnVjdCBrdmVjIGt2ZWM7 DQorCXN0cnVjdCBtYV91c2JfaGRyX2NvbW1vbiAqaGRyOw0KKwlpbnQgc3RhdHVzOw0KKw0KKwlo ZHIgPSAoc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICopZXZlbnQtPm1nbXQubWdtdF9oZHIuaGRy Ow0KKw0KKwltYXVzYl9wcl9pbmZvKCJldmVudD0lZCwgdHlwZT0lZCIsIGV2ZW50LT50eXBlLCBo ZHItPnR5cGUpOw0KKw0KKwlrdmVjLmlvdl9iYXNlCSA9IGhkcjsNCisJa3ZlYy5pb3ZfbGVuCSA9 IGhkci0+bGVuZ3RoOw0KKwl3cmFwcGVyLmt2ZWMJID0gJmt2ZWM7DQorCXdyYXBwZXIua3ZlY19u dW0gPSAxOw0KKwl3cmFwcGVyLmxlbmd0aAkgPSBoZHItPmxlbmd0aDsNCisNCisJc3RhdHVzID0g bWF1c2JfaXBfc2VuZChkZXYtPm1nbXRfY2hhbm5lbCwgJndyYXBwZXIpOw0KKwlpZiAoc3RhdHVz IDwgMCkgew0KKwkJbWF1c2JfcHJfZXJyKCJTZW5kIGZhaWxlZC4gRGlzY29ubmVjdGluZy4uLiBz dGF0dXM9JWQiLCBzdGF0dXMpOw0KKwkJcXVldWVfd29yayhkZXYtPndvcmtxLCAmZGV2LT5zb2Nr ZXRfZGlzY29ubmVjdF93b3JrKTsNCisJCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+aGNk X2Rpc2Nvbm5lY3Rfd29yayk7DQorCX0NCisNCisJcmV0dXJuIHN0YXR1czsNCit9DQorDQorc3Rh dGljIGludCBtYXVzYl9nZXRfZmlyc3RfZnJlZV9wb3J0X251bWJlcih1MTYgKnBvcnRfbnVtYmVy KQ0KK3sNCisJKCpwb3J0X251bWJlcikgPSAwOw0KKwl3aGlsZSAoKG1oY2QtPmNvbm5lY3RlZF9w b3J0cyAmICgxIDw8ICpwb3J0X251bWJlcikpICE9IDAgJiYNCisJICAgICAgICpwb3J0X251bWJl ciA8IE5VTUJFUl9PRl9QT1JUUykNCisJCSsrKCpwb3J0X251bWJlcik7DQorDQorCWlmICgqcG9y dF9udW1iZXIgPT0gTlVNQkVSX09GX1BPUlRTKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCW1o Y2QtPmNvbm5lY3RlZF9wb3J0cyB8PSAoMSA8PCAqcG9ydF9udW1iZXIpOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG1hdXNiX3BvcnRfaGFzX2NoYW5nZWRfZXZl bnQoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkJCXN0cnVjdCBtYXVzYl9ldmVudCAq ZXZlbnQpDQorew0KKwlpbnQgc3RhdHVzOw0KKwl1MTYgcG9ydF9udW1iZXI7DQorCXVuc2lnbmVk IGxvbmcgZmxhZ3MgPSAwOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWhjZC0+bG9jaywgZmxh Z3MpOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9nZXRfZmlyc3RfZnJlZV9wb3J0X251bWJlcigmcG9y dF9udW1iZXIpOw0KKwlpZiAoc3RhdHVzIDwgMCkgew0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKwkJbWF1c2JfcHJfZXJyKCJUaGVyZSBpcyBubyBmcmVl IHBvcnQsIHNjaGVkdWxlIGRlbGV0ZSBtYV9kZXYiKTsNCisJCXF1ZXVlX3dvcmsoZGV2LT53b3Jr cSwgJmRldi0+c29ja2V0X2Rpc2Nvbm5lY3Rfd29yayk7DQorCQlyZXR1cm47DQorCX0NCisNCisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWhjZC0+bG9jaywgZmxhZ3MpOw0KKw0KKwlkZXYtPmRl dl90eXBlCSAgID0gZXZlbnQtPnBvcnRfY2hhbmdlZC5kZXZfdHlwZTsNCisJZGV2LT5kZXZfc3Bl ZWQJICAgPSBldmVudC0+cG9ydF9jaGFuZ2VkLmRldl9zcGVlZDsNCisJZGV2LT5sc2UJICAgPSBl dmVudC0+cG9ydF9jaGFuZ2VkLmxzZTsNCisJZGV2LT5kZXZfY29ubmVjdGVkID0gMTsNCisJZGV2 LT5wb3J0X251bWJlciAgID0gcG9ydF9udW1iZXI7DQorDQorCW1hdXNiX3BvcnRfaGFzX2NoYW5n ZWQoZXZlbnQtPnBvcnRfY2hhbmdlZC5kZXZfdHlwZSwNCisJCQkgICAgICAgZXZlbnQtPnBvcnRf Y2hhbmdlZC5kZXZfc3BlZWQsIGRldik7DQorDQorCWlmICgoZW51bSBtYXVzYl9kZXZpY2VfdHlw ZSlldmVudC0+cG9ydF9jaGFuZ2VkLmRldl90eXBlID09IFVTQjMwSFVCKQ0KKwkJbWF1c2JfcG9y dF9oYXNfY2hhbmdlZChVU0IyMEhVQiwgSElHSF9TUEVFRCwgZGV2KTsNCit9DQorDQorc3RhdGlj IHZvaWQgbWF1c2JfY29tcGxldGVfdGltZW91dF9ldmVudChzdHJ1Y3QgbWF1c2JfZGV2aWNlICpk ZXYsDQorCQkJCQkgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCW1hdXNiX3ByX2Rl YnVnKCJFdmVudCB0eXBlPSVkLCBldmVudF9pZD0lbGx1IiwgZXZlbnQtPnR5cGUsDQorCQkgICAg ICAgZXZlbnQtPm1nbXQubWdtdF9yZXFfdGltZWRvdXQuZXZlbnRfaWQpOw0KKwltYXVzYl9zaWdu YWxfZXZlbnQoZGV2LCBldmVudCwgZXZlbnQtPm1nbXQubWdtdF9yZXFfdGltZWRvdXQuZXZlbnRf aWQpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9wcm9jZXNzX2V2ZW50KHN0cnVjdCBtYXVz Yl9kZXZpY2UgKmRldiwNCisJCQkJc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCW1h dXNiX3ByX2RlYnVnKCJFdmVudCB0eXBlPSVkIiwgZXZlbnQtPnR5cGUpOw0KKw0KKwlzd2l0Y2gg KGV2ZW50LT50eXBlKSB7DQorCWNhc2UgTUFVU0JfRVZFTlRfVFlQRV9VU0JfREVWX0hBTkRMRToN CisJCW1hdXNiX3VzYmRldmhhbmRsZV9ldmVudF9mcm9tX3VzZXIoZGV2LCBldmVudCk7DQorCQli cmVhazsNCisJY2FzZSBNQVVTQl9FVkVOVF9UWVBFX0VQX0hBTkRMRToNCisJCW1hdXNiX2VwaGFu ZGxlX2V2ZW50X2Zyb21fdXNlcihkZXYsIGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNC X0VWRU5UX1RZUEVfRVBfSEFORExFX0FDVElWQVRFOg0KKwkJbWF1c2JfZXBhY3RpdmF0ZV9ldmVu dF9mcm9tX3VzZXIoZGV2LCBldmVudCk7DQorCQlicmVhazsNCisJY2FzZSBNQVVTQl9FVkVOVF9U WVBFX0VQX0hBTkRMRV9JTkFDVElWQVRFOg0KKwkJbWF1c2JfZXBpbmFjdGl2YXRlX2V2ZW50X2Zy b21fdXNlcihkZXYsIGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVf RVBfSEFORExFX1JFU0VUOg0KKwkJbWF1c2JfZXByZXNldF9ldmVudF9mcm9tX3VzZXIoZGV2LCBl dmVudCk7DQorCQlicmVhazsNCisJY2FzZSBNQVVTQl9FVkVOVF9UWVBFX0VQX0hBTkRMRV9ERUxF VEU6DQorCQltYXVzYl9lcGRlbGV0ZV9ldmVudF9mcm9tX3VzZXIoZGV2LCBldmVudCk7DQorCQli cmVhazsNCisJY2FzZSBNQVVTQl9FVkVOVF9UWVBFX01PRElGWV9FUDA6DQorCQltYXVzYl9tb2Rp ZnllcDBfZXZlbnRfZnJvbV91c2VyKGRldiwgZXZlbnQpOw0KKwkJYnJlYWs7DQorCWNhc2UgTUFV U0JfRVZFTlRfVFlQRV9TRVRfVVNCX0RFVl9BRERSRVNTOg0KKwkJbWF1c2Jfc2V0dXNiZGV2YWRk cmVzc19ldmVudF9mcm9tX3VzZXIoZGV2LCBldmVudCk7DQorCQlicmVhazsNCisJY2FzZSBNQVVT Ql9FVkVOVF9UWVBFX1VQREFURV9ERVY6DQorCQltYXVzYl91cGRhdGVkZXZfZXZlbnRfZnJvbV91 c2VyKGRldiwgZXZlbnQpOw0KKwkJYnJlYWs7DQorCWNhc2UgTUFVU0JfRVZFTlRfVFlQRV9VU0Jf REVWX1JFU0VUOg0KKwkJbWF1c2JfdXNiZGV2cmVzZXRfZXZlbnRfZnJvbV91c2VyKGRldiwgZXZl bnQpOw0KKwkJYnJlYWs7DQorCWNhc2UgTUFVU0JfRVZFTlRfVFlQRV9DQU5DRUxfVFJBTlNGRVI6 DQorCQltYXVzYl9jYW5jZWx0cmFuc2Zlcl9ldmVudF9mcm9tX3VzZXIoZGV2LCBldmVudCk7DQor CQlicmVhazsNCisJY2FzZSBNQVVTQl9FVkVOVF9UWVBFX1BPUlRfQ0hBTkdFRDoNCisJCW1hdXNi X3BvcnRfaGFzX2NoYW5nZWRfZXZlbnQoZGV2LCBldmVudCk7DQorCQlicmVhazsNCisJY2FzZSBN QVVTQl9FVkVOVF9UWVBFX1BJTkc6DQorCQltYXVzYl9zZW5kX21nbXRfbXNnKGRldiwgZXZlbnQp Ow0KKwkJYnJlYWs7DQorCWNhc2UgTUFVU0JfRVZFTlRfVFlQRV9TRU5EX01HTVRfTVNHOg0KKwkJ bWF1c2Jfc2VuZF9tZ210X21zZyhkZXYsIGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNC X0VWRU5UX1RZUEVfU0VORF9EQVRBX01TRzoNCisJCW1hdXNiX3NlbmRfZGF0YV9tc2coZGV2LCBl dmVudCk7DQorCQlicmVhazsNCisJY2FzZSBNQVVTQl9FVkVOVF9UWVBFX1JFQ0VJVkVEX0RBVEFf TVNHOg0KKwkJbWF1c2JfcmVjZWl2ZV9kYXRhX21zZyhkZXYsIGV2ZW50KTsNCisJCWJyZWFrOw0K KwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfVVJCX0NPTVBMRVRFOg0KKwkJbWF1c2JfY29tcGxldGVf dXJiKGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfU0VORF9BQ0s6 DQorCQltYXVzYl9zZW5kX3RyYW5zZmVyX2FjayhkZXYsIGV2ZW50KTsNCisJCW1hdXNiX3JlbGVh c2VfZXZlbnRfcmVzb3VyY2VzKGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5U X1RZUEVfSVRFUkFUT1JfUkVTRVQ6DQorCQltYXVzYl9pdGVyYXRvcl9yZXNldChkZXYsIGV2ZW50 KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfSVRFUkFUT1JfU0VFSzoNCisJ CW1hdXNiX2l0ZXJhdG9yX3NlZWsoZGV2LCBldmVudCk7DQorCQlicmVhazsNCisJY2FzZSBNQVVT Ql9FVkVOVF9UWVBFX0RFTEVURV9NQV9ERVY6DQorCQltYXVzYl9kZWxldGVfbWFfZGV2KGRldiwg ZXZlbnQpOw0KKwkJYnJlYWs7DQorCWNhc2UgTUFVU0JfRVZFTlRfVFlQRV9VU0VSX0ZJTklTSEVE Og0KKwkJbWF1c2JfcHJvY2Vzc191c2VyX2ZpbmlzaGVkKGRldiwgZXZlbnQpOw0KKwkJYnJlYWs7 DQorCWNhc2UgTUFVU0JfRVZFTlRfVFlQRV9SRUxFQVNFX0VWRU5UX1JFU09VUkNFUzoNCisJCW1h dXNiX3JlbGVhc2VfZXZlbnRfcmVzb3VyY2VzKGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1B VVNCX0VWRU5UX1RZUEVfTk9ORToNCisJCW1hdXNiX3JlbGVhc2VfZXZlbnRfcmVzb3VyY2VzKGV2 ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfTUdNVF9SRVFVRVNUX1RJ TUVEX09VVDoNCisJCW1hdXNiX2NvbXBsZXRlX3RpbWVvdXRfZXZlbnQoZGV2LCBldmVudCk7DQor CQlicmVhazsNCisJZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQorDQorCW1hdXNiX25vdGlmeV9j b21wbGV0ZWRfdXNlcl9ldmVudHMoZGV2LT5yaW5nX2J1ZmZlcik7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIG1hdXNiX2hwYWxfa2VybmVsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sN CisJc3RydWN0IG1hdXNiX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBt YXVzYl9kZXZpY2UsDQorCQkJCQkJd29yayk7DQorCXN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQ7 DQorCWludCBzdGF0dXM7DQorCXUxNiBpOw0KKwl1MTYgZXZlbnRzOw0KKwl1MTYgY29tcGxldGVk X2V2ZW50czsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJc3RydWN0IG1hdXNiX3JpbmdfYnVm ZmVyICpkZXZfbWF1c2JfcmluZyA9IGRldi0+cmluZ19idWZmZXI7DQorDQorCXNwaW5fbG9ja19p cnFzYXZlKCZkZXYtPm51bV9vZl91c2VyX2V2ZW50c19sb2NrLCBmbGFncyk7DQorCWV2ZW50cyA9 IGRldi0+bnVtX29mX3VzZXJfZXZlbnRzOw0KKwljb21wbGV0ZWRfZXZlbnRzID0gZGV2LT5udW1f b2ZfY29tcGxldGVkX2V2ZW50czsNCisJZGV2LT5udW1fb2ZfdXNlcl9ldmVudHMgPSAwOw0KKwlk ZXYtPm51bV9vZl9jb21wbGV0ZWRfZXZlbnRzID0gMDsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmZGV2LT5udW1fb2ZfdXNlcl9ldmVudHNfbG9jaywgZmxhZ3MpOw0KKw0KKwlzdGF0dXMgPSBt YXVzYl9yaW5nX2J1ZmZlcl9tb3ZlX3RhaWwoZGV2X21hdXNiX3JpbmcsIGNvbXBsZXRlZF9ldmVu dHMpOw0KKwlpZiAoc3RhdHVzIDwgMCkgew0KKwkJbWF1c2JfcHJfZXJyKCJEZXF1ZXVlIGZhaWxl ZCwgc3RhdHVzPSVkIiwgc3RhdHVzKTsNCisJCWtyZWZfcHV0KCZkZXYtPnJlZmNvdW50LCBtYXVz Yl9yZWxlYXNlX21hX2Rldl9hc3luYyk7DQorCQlyZXR1cm47DQorCX0NCisNCisJZm9yIChpID0g MDsgaSA8IGV2ZW50czsgKytpKSB7DQorCQlldmVudCA9IG1hdXNiX3JpbmdfY3VycmVudF9mcm9t X3VzZXIoZGV2X21hdXNiX3JpbmcpOw0KKwkJbWF1c2JfcmluZ19uZXh0X2Zyb21fdXNlcihkZXZf bWF1c2JfcmluZyk7DQorCQltYXVzYl9wcm9jZXNzX2V2ZW50KGRldiwgZXZlbnQpOw0KKwl9DQor fQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX3NvY2tldF9kaXNjb25uZWN0X2V2ZW50KHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiA9IGNvbnRh aW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWF1c2JfZGV2aWNlLA0KKwkJCQkJCXNvY2tldF9kaXNjb25u ZWN0X3dvcmspOw0KKwlzdHJ1Y3QgbWF1c2JfZXZlbnQgZXZlbnQ7DQorCWludCBzdGF0dXM7DQor DQorCW1hdXNiX3ByX2luZm8oIm1hZGV2X2FkZHI9JWQiLCBkZXYtPm1hZGV2X2FkZHIpOw0KKw0K KwltYXVzYl9pcF9kaXNjb25uZWN0KGRldi0+Y3RybF9jaGFubmVsKTsNCisJbWF1c2JfZGVzdHJv eV9pcF9jdHgoZGV2LT5jdHJsX2NoYW5uZWwpOw0KKwlkZXYtPmN0cmxfY2hhbm5lbCA9IE5VTEw7 DQorDQorCW1hdXNiX2lwX2Rpc2Nvbm5lY3QoZGV2LT5idWxrX2NoYW5uZWwpOw0KKwltYXVzYl9k ZXN0cm95X2lwX2N0eChkZXYtPmJ1bGtfY2hhbm5lbCk7DQorCWRldi0+YnVsa19jaGFubmVsID0g TlVMTDsNCisNCisJbWF1c2JfaXBfZGlzY29ubmVjdChkZXYtPmlzb2NoX2NoYW5uZWwpOw0KKwlt YXVzYl9kZXN0cm95X2lwX2N0eChkZXYtPmlzb2NoX2NoYW5uZWwpOw0KKwlkZXYtPmlzb2NoX2No YW5uZWwgPSBOVUxMOw0KKw0KKwlpZiAoZGV2LT5tZ210X2NoYW5uZWwpIHsNCisJCW1lbXNldCgm ZXZlbnQsIDAsIHNpemVvZihldmVudCkpOw0KKwkJZXZlbnQudHlwZSA9IE1BVVNCX0VWRU5UX1RZ UEVfTkVUV09SS19ESVNDT05ORUNURUQ7DQorCQlldmVudC5kYXRhLmRldmljZV9pZCA9IGRldi0+ aWQ7DQorDQorCQlzdGF0dXMgPSBtYXVzYl9lbnF1ZXVlX2V2ZW50X3RvX3VzZXIoZGV2LCAmZXZl bnQpOw0KKw0KKwkJbWF1c2JfcHJfaW5mbygiU2VuZGluZyBub3RpZmljYXRpb24gdG8gdXNlciB0 aGF0IG5ldHdvcmsgaXMgZGlzY29ubmVjdGVkIHN0YXR1cz0lZCIsDQorCQkJICAgICAgc3RhdHVz KTsNCisNCisJCW1hdXNiX3ByX2luZm8oIlJlbGVhc2luZyBNQVVTQiBkZXZpY2UgcmVmIik7DQor CQlrcmVmX3B1dCgmZGV2LT5yZWZjb3VudCwgbWF1c2JfcmVsZWFzZV9tYV9kZXZfYXN5bmMpOw0K Kwl9DQorDQorCW1hdXNiX2lwX2Rpc2Nvbm5lY3QoZGV2LT5tZ210X2NoYW5uZWwpOw0KKwltYXVz Yl9kZXN0cm95X2lwX2N0eChkZXYtPm1nbXRfY2hhbm5lbCk7DQorCWRldi0+bWdtdF9jaGFubmVs ID0gTlVMTDsNCisNCisJbWVtc2V0KGRldi0+Y2hhbm5lbF9tYXAsIDAsIHNpemVvZihkZXYtPmNo YW5uZWxfbWFwKSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2Rpc2Nvbm5lY3RfbWFfZGV2 KHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldikNCit7DQorCW1hdXNiX3ByX2luZm8oIkRpc2Nvbm5l Y3RpbmcgTUFVU0IgZGV2aWNlIG1hZGV2X2FkZHI9JWQiLA0KKwkJICAgICAgZGV2LT5tYWRldl9h ZGRyKTsNCisNCisJaWYgKCFkZXYtPmRldl9jb25uZWN0ZWQpIHsNCisJCW1hdXNiX3ByX3dhcm4o Ik1BVVNCIGRldmljZSBpcyBub3QgY29ubmVjdGVkIik7DQorCQlrcmVmX3B1dCgmZGV2LT5yZWZj b3VudCwgbWF1c2JfcmVsZWFzZV9tYV9kZXZfYXN5bmMpOw0KKwkJcmV0dXJuOw0KKwl9DQorCW1h dXNiX2hjZF9kaXNjb25uZWN0KGRldi0+cG9ydF9udW1iZXIsIGRldi0+ZGV2X3R5cGUsIGRldi0+ ZGV2X3NwZWVkKTsNCisNCisJaWYgKGRldi0+ZGV2X3R5cGUgPT0gVVNCMzBIVUIpDQorCQltYXVz Yl9oY2RfZGlzY29ubmVjdChkZXYtPnBvcnRfbnVtYmVyLCBVU0IyMEhVQiwgSElHSF9TUEVFRCk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2hjZF9kaXNjb25uZWN0X2V2ZW50KHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCBtYXVzYl9kZXZpY2UgKm1hX2RldiA9IGNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWF1c2JfZGV2aWNlLA0KKwkJCQkJCSAgIGhjZF9kaXNj b25uZWN0X3dvcmspOw0KKw0KKwltYXVzYl9kaXNjb25uZWN0X21hX2RldihtYV9kZXYpOw0KK30N CisNCitzdGF0aWMgdm9pZCBtYXVzYl9kZWxldGVfbWFkZXYoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKQ0KK3sNCisJc3RydWN0IG1hdXNiX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdCBtYXVzYl9kZXZpY2UsDQorCQkJCQkJbWFkZXZfZGVsZXRlX3dvcmspOw0KKwlzdHJ1 Y3QgbWF1c2JfZXZlbnQJZXZlbnQ7DQorCXN0cnVjdCBjb21wbGV0aW9uCWNvbXBsZXRpb247DQor CXN0cnVjdCBjb21wbGV0aW9uCSp1c2VyX2V2ZW50Ow0KKwlzdHJ1Y3QgbWF1c2JfY29tcGxldGlv biBtYXVzYl9jb21wbGV0aW9uOw0KKwlsb25nIHN0YXR1czsNCisJdW5zaWduZWQgbG9uZyB0aW1l b3V0ID0gbXNlY3NfdG9famlmZmllcyhNQVVTQl9ERUxFVEVfTUFERVZfVElNRU9VVF9NUyk7DQor DQorCW1hdXNiX3ByX2luZm8oIkRlbGV0aW5nIE1BVVNCIGRldmljZSBtYWRldl9hZGRyPSVkIiwg ZGV2LT5tYWRldl9hZGRyKTsNCisNCisJZGVsX3RpbWVyX3N5bmMoJmRldi0+Y29ubmVjdGlvbl90 aW1lcik7DQorDQorCS8qIENsaWVudCBJUyByZXNwb25zaXZlICovDQorCWlmICghYXRvbWljX3Jl YWQoJmRldi0+dW5yZXNwb25zaXZlX2NsaWVudCkpIHsNCisJCW1lbXNldCgmZXZlbnQsIDAsIHNp emVvZihldmVudCkpOw0KKwkJZXZlbnQudHlwZSA9IE1BVVNCX0VWRU5UX1RZUEVfREVMRVRFX01B X0RFVjsNCisJCWV2ZW50Lm1nbXQuZGVsZXRlX21hX2Rldi5kZXZpY2VfaWQgPSBkZXYtPmlkOw0K KwkJZXZlbnQubWdtdC5kZWxldGVfbWFfZGV2LmV2ZW50X2lkICA9IG1hdXNiX2V2ZW50X2lkKGRl dik7DQorDQorCQlpbml0X2NvbXBsZXRpb24oJmNvbXBsZXRpb24pOw0KKwkJbWF1c2JfY29tcGxl dGlvbi5jb21wbGV0aW9uX2V2ZW50ID0gJmNvbXBsZXRpb247DQorCQltYXVzYl9jb21wbGV0aW9u LmV2ZW50X2lkID0gZXZlbnQubWdtdC5kZWxldGVfbWFfZGV2LmV2ZW50X2lkOw0KKwkJbWF1c2Jf Y29tcGxldGlvbi5tYXVzYl9ldmVudCA9ICZldmVudDsNCisNCisJCW1hdXNiX2luc2VydF9ldmVu dChkZXYsICZtYXVzYl9jb21wbGV0aW9uKTsNCisNCisJCXN0YXR1cyA9IG1hdXNiX2VucXVldWVf ZXZlbnRfdG9fdXNlcihkZXYsICZldmVudCk7DQorCQlpZiAoc3RhdHVzIDwgMCkgew0KKwkJCW1h dXNiX3JlbW92ZV9ldmVudChkZXYsICZtYXVzYl9jb21wbGV0aW9uKTsNCisJCQltYXVzYl9wcl9l cnIoIlJpbmcgYnVmZmVyIGZ1bGwsIGVucXVldWUgZmFpbGVkIik7DQorCQkJcmV0dXJuOw0KKwkJ fQ0KKwkJbWF1c2JfcHJfZGVidWcoIkRlbGV0aW5nIE1BVVNCIGRldmljZS4uLiIpOw0KKw0KKwkJ c3RhdHVzID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmNvbXBs ZXRpb24sDQorCQkJCQkJCQkgICB0aW1lb3V0KTsNCisNCisJCW1hdXNiX3ByX2RlYnVnKCJEZWxl dGluZyBNQVVTQiBkZXZpY2UgZXZlbnQgZmluaXNoZWQgd2l0aCAlbGQiLA0KKwkJCSAgICAgICBz dGF0dXMpOw0KKw0KKwkJbWF1c2JfcmVtb3ZlX2V2ZW50KGRldiwgJm1hdXNiX2NvbXBsZXRpb24p Ow0KKw0KKwkJdXNlcl9ldmVudCA9ICZkZXYtPnVzZXJfZmluaXNoZWRfZXZlbnQ7DQorDQorCQlz dGF0dXMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCh1c2VyX2V2 ZW50LA0KKwkJCQkJCQkJICAgdGltZW91dCk7DQorCQltYXVzYl9wcl9pbmZvKCJVc2VyIGV2ZW50 IGZpbmlzaGVkIHdpdGggJWxkIiwgc3RhdHVzKTsNCisJfQ0KKw0KKwlmbHVzaF93b3JrcXVldWUo ZGV2LT53b3JrcSk7DQorCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+d29ya3EpOw0KKw0KKwltYXVz Yl9jbGVhcl9oY2RfbWFkZXYoZGV2LT5wb3J0X251bWJlcik7DQorDQorCW1hdXNiX3JpbmdfYnVm ZmVyX2NsZWFudXAoZGV2LT5yaW5nX2J1ZmZlcik7DQorCW1hdXNiX3JpbmdfYnVmZmVyX2Rlc3Ry b3koZGV2LT5yaW5nX2J1ZmZlcik7DQorDQorCW1hdXNiX3JlbW92ZV9tYWRldl9mcm9tX2xpc3Qo ZGV2LT5tYWRldl9hZGRyKTsNCisNCisJcHV0X25ldChkZXYtPm5ldF9ucyk7DQorDQorCWtmcmVl KGRldi0+cmluZ19idWZmZXIpOw0KKwlrZnJlZShkZXYpOw0KKwltYXVzYl9zaWduYWxfZW1wdHlf bXNzKCk7DQorDQorCW1hdXNiX3ByX2luZm8oIk1BVVNCIGRldmljZSBkZWxldGVkLiBWZXJzaW9u PSVzIiwgTUFVU0JfRFJJVkVSX1ZFUlNJT04pOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9w aW5nX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IG1hdXNiX2Rl dmljZSAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtYXVzYl9kZXZpY2UsDQorCQkJ CQkJcGluZ193b3JrKTsNCisJaW50IHN0YXR1cyA9IDA7DQorDQorCWlmIChtYXVzYl9zdGFydF9j b25uZWN0aW9uX3RpbWVyKGRldikgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIkRldmljZSBkaXNj b25uZWN0aW5nIGR1ZSB0byBzZXNzaW9uIHRpbWVvdXQgbWFkZXZfYWRkcj0lZCIsDQorCQkJICAg ICBkZXYtPm1hZGV2X2FkZHIpOw0KKwkJcXVldWVfd29yayhkZXYtPndvcmtxLCAmZGV2LT5zb2Nr ZXRfZGlzY29ubmVjdF93b3JrKTsNCisJCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+aGNk X2Rpc2Nvbm5lY3Rfd29yayk7DQorCQlyZXR1cm47DQorCX0NCisNCisJc3RhdHVzID0gbWF1c2Jf cGluZ19ldmVudF90b191c2VyKGRldik7DQorDQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQltYXVz Yl9wcl9lcnIoIlJpbmcgYnVmZmVyIGZ1bGwiKTsNCisJCXJldHVybjsNCisJfQ0KK30NCisNCitz dGF0aWMgdm9pZCBtYXVzYl9oZWFydGJlYXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp DQorew0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3Ry dWN0IG1hdXNiX2RldmljZSwNCisJCQkJCQloZWFydGJlYXRfd29yayk7DQorDQorCW1hdXNiX3By X2VycigiRGV2aWNlIGRpc2Nvbm5lY3RpbmcgLSBhcHAgaXMgdW5yZXNwb25zaXZlIik7DQorCWF0 b21pY19zZXQoJmRldi0+dW5yZXNwb25zaXZlX2NsaWVudCwgMSk7DQorCW1hdXNiX2NvbXBsZXRl X3VyYnNfZnJvbV90cmVlKCk7DQorCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+c29ja2V0 X2Rpc2Nvbm5lY3Rfd29yayk7DQorCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+aGNkX2Rp c2Nvbm5lY3Rfd29yayk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2Nvbm5lY3Rpb25fdGlt ZXJfZnVuYyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpDQorew0KKwlzdHJ1Y3QgbWF1c2JfZGV2 aWNlICpkZXYgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBtYXVzYl9kZXZpY2UsDQorCQkJ CQkJY29ubmVjdGlvbl90aW1lcik7DQorDQorCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+ cGluZ193b3JrKTsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1c2JfaGVhcnRiZWF0X3RpbWVyX2Z1 bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFncyA9 IDA7DQorCXN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiA9IE5VTEw7DQorDQorCWlmIChtYXVzYl9z dGFydF9oZWFydGJlYXRfdGltZXIoKSA8IDApIHsNCisJCW1hdXNiX3ByX2VycigiRGV2aWNlcyBk aXNjb25uZWN0aW5nIC0gYXBwIGlzIHVucmVzcG9uc2l2ZSIpOw0KKwkJc3Bpbl9sb2NrX2lycXNh dmUoJm1zcy5sb2NrLCBmbGFncyk7DQorDQorCQkvKiBSZXNldCBjb25uZWN0ZWQgY2xpZW50cyAq Lw0KKwkJbXNzLmNsaWVudF9jb25uZWN0ZWQgPSBmYWxzZTsNCisJCW1zcy5taXNzZWRfaGVhcnRi ZWF0cyA9IDA7DQorDQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJm1zcy5tYWRldl9saXN0 LCBsaXN0X2VudHJ5KSB7DQorCQkJbWF1c2JfcHJfZGVidWcoIkVucXVldWUgaGVhcnRiZWF0X3dv cmsgbWFkZXZfYWRkcj0leCIsDQorCQkJCSAgICAgICBkZXYtPm1hZGV2X2FkZHIpOw0KKwkJCXF1 ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+aGVhcnRiZWF0X3dvcmspOw0KKwkJfQ0KKw0KKwkJ Y29tcGxldGUoJm1zcy5jbGllbnRfc3RvcHBlZCk7DQorCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZtc3MubG9jaywgZmxhZ3MpOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgbWF1c2JfZGV2 aWNlICptYXVzYl9jcmVhdGVfbWFkZXYoc3RydWN0IG1hdXNiX2RldmljZV9hZGRyZXNzDQorCQkJ CQlkZXZfYWRkciwgdTggbWFkZXZfYWRkcmVzcywNCisJCQkJCWludCAqc3RhdHVzKQ0KK3sNCisJ c3RydWN0IG1hdXNiX2RldmljZSAqZGV2Ow0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisJ Y2hhciB3b3JrcV9uYW1lWzE2XTsNCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxOw0K Kw0KKwltZW1zZXQod29ya3FfbmFtZSwgMCwgc2l6ZW9mKHdvcmtxX25hbWUpKTsNCisJc3ByaW50 Zih3b3JrcV9uYW1lLCAiJXgiLCBtYWRldl9hZGRyZXNzKTsNCisJc3RyY2F0KHdvcmtxX25hbWUs ICJfbWFkZXZfd29ya3EiKTsNCisNCisJbWF1c2JfcHJfZGVidWcoIm1hZGV2X3dvcmtxX25hbWUg PSAlcyIsIHdvcmtxX25hbWUpOw0KKw0KKwl3b3JrcSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVl KHdvcmtxX25hbWUsIFdRX01FTV9SRUNMQUlNKTsNCisJaWYgKCF3b3JrcSkgew0KKwkJbWF1c2Jf cHJfYWxlcnQoIkNvdWxkIG5vdCBhbGxvY2F0ZSB3b3JrcXVldWUhIik7DQorCQkqc3RhdHVzID0g LUVOT01FTTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZt c3MubG9jaywgZmxhZ3MpOw0KKw0KKwlpZiAobXNzLmRlaW5pdF9pbl9wcm9ncmVzcykgew0KKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisJCW1hdXNiX3ByX2Fs ZXJ0KCJEZXZpY2UgY3JlYXRpbmcgZmFpbGVkIC0gbXNzIGRlaW5pdCBpbiBwcm9ncmVzcyIpOw0K KwkJZmx1c2hfd29ya3F1ZXVlKHdvcmtxKTsNCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHdvcmtxKTsN CisJCSpzdGF0dXMgPSAtRVNIVVRET1dOOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJZGV2 ID0gbWF1c2JfZ2V0X2Rldl9mcm9tX2FkZHJfdW5zYWZlKG1hZGV2X2FkZHJlc3MpOw0KKwlpZiAo ZGV2KSB7DQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwkJ bWF1c2JfcHJfZGVidWcoIk1BVVNCIGRldmljZSBhbHJlYWR5IGNvbm5lY3RlZCwgbWFkZXZfYWRk cmVzcz0leCIsDQorCQkJICAgICAgIG1hZGV2X2FkZHJlc3MpOw0KKwkJZmx1c2hfd29ya3F1ZXVl KHdvcmtxKTsNCisJCWRlc3Ryb3lfd29ya3F1ZXVlKHdvcmtxKTsNCisJCSpzdGF0dXMgPSAtRUVY SVNUOw0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRl diksIEdGUF9BVE9NSUMpOw0KKw0KKwlpZiAoIWRldikgew0KKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisJCW1hdXNiX3ByX2FsZXJ0KCJDb3VsZCBub3QgYWxs b2NhdGUgTUFVU0IgZGV2aWNlISIpOw0KKwkJZmx1c2hfd29ya3F1ZXVlKHdvcmtxKTsNCisJCWRl c3Ryb3lfd29ya3F1ZXVlKHdvcmtxKTsNCisJCSpzdGF0dXMgPSAtRU5PTUVNOw0KKwkJcmV0dXJu IE5VTEw7DQorCX0NCisNCisJbWF1c2JfcHJfaW5mbygiQ3JlYXRlIE1BVVNCIGRldmljZS4gVmVy c2lvbj0lcyIsIE1BVVNCX0RSSVZFUl9WRVJTSU9OKTsNCisNCisJZGV2LT53b3JrcSA9IHdvcmtx Ow0KKw0KKwlJTklUX1dPUksoJmRldi0+d29yaywgbWF1c2JfaHBhbF9rZXJuZWxfd29yayk7DQor CUlOSVRfV09SSygmZGV2LT5zb2NrZXRfZGlzY29ubmVjdF93b3JrLCBtYXVzYl9zb2NrZXRfZGlz Y29ubmVjdF9ldmVudCk7DQorCUlOSVRfV09SSygmZGV2LT5oY2RfZGlzY29ubmVjdF93b3JrLCBt YXVzYl9oY2RfZGlzY29ubmVjdF9ldmVudCk7DQorCUlOSVRfV09SSygmZGV2LT5tYWRldl9kZWxl dGVfd29yaywgbWF1c2JfZGVsZXRlX21hZGV2KTsNCisJSU5JVF9XT1JLKCZkZXYtPnBpbmdfd29y aywgbWF1c2JfcGluZ193b3JrKTsNCisJSU5JVF9XT1JLKCZkZXYtPmhlYXJ0YmVhdF93b3JrLCBt YXVzYl9oZWFydGJlYXRfd29yayk7DQorDQorCWtyZWZfaW5pdCgmZGV2LT5yZWZjb3VudCk7DQor DQorCWRldi0+ZXZlbnRfaWQgPSAwOw0KKwlzcGluX2xvY2tfaW5pdCgmZGV2LT5ldmVudF9pZF9s b2NrKTsNCisNCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+Y29tcGxldGlvbl9ldmVudHMpOw0KKwlz cGluX2xvY2tfaW5pdCgmZGV2LT5jb21wbGV0aW9uX2V2ZW50c19sb2NrKTsNCisJc3Bpbl9sb2Nr X2luaXQoJmRldi0+bnVtX29mX3VzZXJfZXZlbnRzX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgm ZGV2LT5jb25uZWN0aW9uX3RpbWVyX2xvY2spOw0KKw0KKwlpbml0X2NvbXBsZXRpb24oJmRldi0+ dXNlcl9maW5pc2hlZF9ldmVudCk7DQorCWF0b21pY19zZXQoJmRldi0+dW5yZXNwb25zaXZlX2Ns aWVudCwgMCk7DQorDQorCXRpbWVyX3NldHVwKCZkZXYtPmNvbm5lY3Rpb25fdGltZXIsIG1hdXNi X2Nvbm5lY3Rpb25fdGltZXJfZnVuYywgMCk7DQorDQorCWRldi0+ZGV2X2FkZHIgPSBkZXZfYWRk cjsNCisJZGV2LT5tYWRldl9hZGRyID0gbWFkZXZfYWRkcmVzczsNCisJZGV2LT5uZXRfbnMgPSBn ZXRfbmV0KGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucyk7DQorDQorCWlmICghbGlzdF9lbXB0eSgm bXNzLmF2YWlsYWJsZV9yaW5nX2J1ZmZlcnMpKSB7DQorCQlkZXYtPnJpbmdfYnVmZmVyID0gY29u dGFpbmVyX29mKG1zcy5hdmFpbGFibGVfcmluZ19idWZmZXJzLm5leHQsDQorCQkJCQkJc3RydWN0 IG1hdXNiX3JpbmdfYnVmZmVyLA0KKwkJCQkJCWxpc3RfZW50cnkpOw0KKwkJbGlzdF9kZWwobXNz LmF2YWlsYWJsZV9yaW5nX2J1ZmZlcnMubmV4dCk7DQorCX0gZWxzZSB7DQorCQltYXVzYl9wcl9h bGVydCgiUmluZyBidWZmZXIgZm9yIG1hdXNiIGRldmljZSBpcyBub3QgYXZhaWxiYWxlISIpOw0K Kwl9DQorDQorCWxpc3RfYWRkX3RhaWwoJmRldi0+bGlzdF9lbnRyeSwgJm1zcy5tYWRldl9saXN0 KTsNCisNCisJcmVpbml0X2NvbXBsZXRpb24oJm1zcy5lbXB0eSk7DQorDQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFncyk7DQorDQorCXJldHVybiBkZXY7DQorfQ0KKw0K K3ZvaWQgbWF1c2JfcmVsZWFzZV9tYV9kZXZfYXN5bmMoc3RydWN0IGtyZWYgKmtyZWYpDQorew0K KwlzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IG1h dXNiX2RldmljZSwNCisJCQkJCQlyZWZjb3VudCk7DQorDQorCW1hdXNiX3ByX2luZm8oIlNjaGVk dWxpbmcgd29yayBmb3IgTUFVU0IgZGV2aWNlIHRvIGJlIGRlbGV0ZWQiKTsNCisNCisJc2NoZWR1 bGVfd29yaygmZGV2LT5tYWRldl9kZWxldGVfd29yayk7DQorfQ0KKw0KK2ludCBtYXVzYl9pbml0 aWF0ZV9kZXZfY29ubmVjdGlvbihzdHJ1Y3QgbWF1c2JfZGV2aWNlX2FkZHJlc3MgZGV2X2FkZHIs DQorCQkJCSAgdTggbWFkZXZfYWRkcmVzcykNCit7DQorCWludCBlcnJvciA9IDA7DQorCXN0cnVj dCBtYXVzYl9kZXZpY2UgKmRldjsNCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQorDQorCXNw aW5fbG9ja19pcnFzYXZlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwlkZXYgPSBtYXVzYl9nZXRfZGV2 X2Zyb21fYWRkcl91bnNhZmUobWFkZXZfYWRkcmVzcyk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJm1zcy5sb2NrLCBmbGFncyk7DQorDQorCWlmIChkZXYpIHsNCisJCW1hdXNiX3ByX2RlYnVn KCJNQVVTQiBkZXZpY2UgYWxyZWFkeSBjb25uZWN0ZWQsIG1hZGV2X2FkZHJlc3M9JXgiLA0KKwkJ CSAgICAgICBtYWRldl9hZGRyZXNzKTsNCisJCXJldHVybiAtRUVYSVNUOw0KKwl9DQorDQorCWRl diA9IG1hdXNiX2NyZWF0ZV9tYWRldihkZXZfYWRkciwgbWFkZXZfYWRkcmVzcywgJmVycm9yKTsN CisNCisJaWYgKCFkZXYpDQorCQlyZXR1cm4gZXJyb3I7DQorDQorCW1hdXNiX3ByX2luZm8oIk5l dyBNQVVTQiBkZXZpY2UgY3JlYXRlZCBtYWRldl9hZGRyPSVkIiwgbWFkZXZfYWRkcmVzcyk7DQor DQorCWVycm9yID0gbWF1c2JfaW5pdF9pcF9jdHgoJmRldi0+bWdtdF9jaGFubmVsLCBkZXYtPm5l dF9ucywNCisJCQkJICBkZXYtPmRldl9hZGRyLmlwLmFkZHJlc3MuaXA0LA0KKwkJCQkgIGRldi0+ ZGV2X2FkZHIuaXAucG9ydC5tYW5hZ2VtZW50LCBkZXYsDQorCQkJCSAgbWF1c2JfaXBfY2FsbGJh Y2ssIE1BVVNCX01HTVRfQ0hBTk5FTCk7DQorCWlmIChlcnJvcikgew0KKwkJbWF1c2JfcHJfZXJy KCJNZ210IGlwIGNvbnRleHQgaW5pdCBmYWlsZWQ6IGVycm9yPSVkIiwgZXJyb3IpOw0KKwkJa3Jl Zl9wdXQoJmRldi0+cmVmY291bnQsIG1hdXNiX3JlbGVhc2VfbWFfZGV2X2FzeW5jKTsNCisJCXJl dHVybiBlcnJvcjsNCisJfQ0KKw0KKwltYXVzYl9pcF9jb25uZWN0X2FzeW5jKGRldi0+bWdtdF9j aGFubmVsKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgbWF1c2Jfb25fbWFkZXZfY29u bmVjdGVkKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVu dCBtYXVzYl9ldmVudDsNCisNCisJbWF1c2JfZGV2X3Jlc2V0X3JlcV9ldmVudCgmbWF1c2JfZXZl bnQpOw0KKwltYXVzYl9lbnF1ZXVlX2V2ZW50X3RvX3VzZXIoZGV2LCAmbWF1c2JfZXZlbnQpOw0K K30NCisNCitpbnQgbWF1c2JfZW5xdWV1ZV9ldmVudF9mcm9tX3VzZXIodTggbWFkZXZfYWRkciwg dTE2IG51bV9vZl9ldmVudHMsDQorCQkJCSAgdTE2IG51bV9vZl9jb21wbGV0ZWQpDQorew0KKwl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXY7DQorDQorCXNw aW5fbG9ja19pcnFzYXZlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwlkZXYgPSBtYXVzYl9nZXRfZGV2 X2Zyb21fYWRkcl91bnNhZmUobWFkZXZfYWRkcik7DQorDQorCWlmICghZGV2KSB7DQorCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwkJcmV0dXJuIC1FSU5WQUw7 DQorCX0NCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bnVtX29mX3VzZXJfZXZlbnRzX2xv Y2ssIGZsYWdzKTsNCisJZGV2LT5udW1fb2ZfdXNlcl9ldmVudHMgKz0gbnVtX29mX2V2ZW50czsN CisJZGV2LT5udW1fb2ZfY29tcGxldGVkX2V2ZW50cyArPSBudW1fb2ZfY29tcGxldGVkOw0KKwlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPm51bV9vZl91c2VyX2V2ZW50c19sb2NrLCBmbGFn cyk7DQorCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+d29yayk7DQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFncyk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitp bnQgbWF1c2JfZW5xdWV1ZV9ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwN CisJCQkJc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCWludCBzdGF0dXM7DQorDQor CWV2ZW50LT5tYWRldl9hZGRyID0gZGV2LT5tYWRldl9hZGRyOw0KKwlzdGF0dXMgPSBtYXVzYl9y aW5nX2J1ZmZlcl9wdXQoZGV2LT5yaW5nX2J1ZmZlciwgZXZlbnQpOw0KKwlpZiAoc3RhdHVzIDwg MCkgew0KKwkJbWF1c2JfcHJfZXJyKCJSaW5nIGJ1ZmZlciBvcGVyYXRpb24gZmFpbGVkIik7DQor CQltYXVzYl9jbGVhbnVwX3JpbmdfYnVmZmVyX2V2ZW50KGV2ZW50KTsNCisJCXJldHVybiBzdGF0 dXM7DQorCX0NCisNCisJbWF1c2Jfbm90aWZ5X3JpbmdfZXZlbnRzKGRldi0+cmluZ19idWZmZXIp Ow0KKwltYXVzYl9wcl9kZWJ1ZygiVXNlci1zcGFjZSBub3RpZmljYXRpb24gc2VudC4iKTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYXVzYl9kYXRhX3JlcV9lbnF1ZXVlX2V2ZW50KHN0 cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwgdTE2IGVwX2hhbmRsZSwNCisJCQkJIHN0cnVjdCB1cmIg KnJlcXVlc3QpDQorew0KKwlpbnQgc3RhdHVzOw0KKwlzdHJ1Y3QgbWF1c2JfZXZlbnQgbWF1c2Jf ZXZlbnQ7DQorDQorCW1hdXNiX2V2ZW50LnR5cGUgICA9IE1BVVNCX0VWRU5UX1RZUEVfU0VORF9E QVRBX01TRzsNCisJbWF1c2JfZXZlbnQuc3RhdHVzID0gMDsNCisNCisJbWF1c2JfZXZlbnQuZGF0 YS50cmFuc2Zlcl90eXBlID0NCisJCW1hdXNiX3RyYW5zZmVyX3R5cGVfZnJvbV91c2IoJnJlcXVl c3QtPmVwLT5kZXNjKTsNCisJbWF1c2JfZXZlbnQuZGF0YS5kZXZpY2VfaWQJPSBkZXYtPmlkOw0K KwltYXVzYl9ldmVudC5kYXRhLmVwX2hhbmRsZQk9IGVwX2hhbmRsZTsNCisJbWF1c2JfZXZlbnQu ZGF0YS51cmIJCT0gKHU2NClyZXF1ZXN0Ow0KKwltYXVzYl9ldmVudC5kYXRhLnNldHVwX3BhY2tl dAk9DQorCQkodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgmcmVxdWVzdC0+ZXAtPmRlc2MpICYm DQorCQkJcmVxdWVzdC0+c2V0dXBfcGFja2V0KTsNCisJbWF1c2JfZXZlbnQuZGF0YS50cmFuc2Zl cl9zaXplCT0gcmVxdWVzdC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsNCisJbWF1c2JfZXZlbnQu ZGF0YS5kaXJlY3Rpb24JPSAodXNiX3VyYl9kaXJfaW4ocmVxdWVzdCkgPw0KKwkJCQkJCU1BVVNC X0RBVEFfTVNHX0RJUkVDVElPTl9JTiA6DQorCQkJCQkJTUFVU0JfREFUQV9NU0dfRElSRUNUSU9O X09VVCk7DQorCW1hdXNiX2V2ZW50LmRhdGEudHJhbnNmZXJfc2l6ZSArPQ0KKwkJKChtYXVzYl9l dmVudC5kYXRhLmRpcmVjdGlvbiA9PSBNQVVTQl9EQVRBX01TR19ESVJFQ1RJT05fT1VUICYmDQor CQkJbWF1c2JfZXZlbnQuZGF0YS5zZXR1cF9wYWNrZXQpID8NCisJCQkJTUFVU0JfQ09OVFJPTF9T RVRVUF9TSVpFIDogMCk7DQorCW1hdXNiX2V2ZW50LmRhdGEucmVtX3RyYW5zZmVyX3NpemUgPSBt YXVzYl9ldmVudC5kYXRhLnRyYW5zZmVyX3NpemU7DQorCW1hdXNiX2V2ZW50LmRhdGEudHJhbnNm ZXJfZmxhZ3MJICAgPSByZXF1ZXN0LT50cmFuc2Zlcl9mbGFnczsNCisJbWF1c2JfZXZlbnQuZGF0 YS50cmFuc2Zlcl9lb3QJICAgPSBmYWxzZTsNCisJbWF1c2JfZXZlbnQuZGF0YS5pc29jaF9zZWdf bnVtCSAgID0gKHUzMilyZXF1ZXN0LT5udW1iZXJfb2ZfcGFja2V0czsNCisJbWF1c2JfZXZlbnQu ZGF0YS5yZWN2X2J1ZgkgICA9IDA7DQorCW1hdXNiX2V2ZW50LmRhdGEucGF5bG9hZF9zaXplCSAg ID0NCisJCSh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZyZXF1ZXN0LT5lcC0+ZGVzYykgJiYNCisJ CSB1c2JfZW5kcG9pbnRfZGlyX291dCgmcmVxdWVzdC0+ZXAtPmRlc2MpKSA/DQorCQkocmVxdWVz dC0+aXNvX2ZyYW1lX2Rlc2NbcmVxdWVzdC0+bnVtYmVyX29mX3BhY2tldHMgLSAxXQ0KKwkJCQkJ CQkJLm9mZnNldCArDQorCQkgcmVxdWVzdC0+aXNvX2ZyYW1lX2Rlc2NbcmVxdWVzdC0+bnVtYmVy X29mX3BhY2tldHMgLSAxXQ0KKwkJCQkJCQkJLmxlbmd0aCkgOiAwOw0KKw0KKwlpZiAobWF1c2Jf ZXZlbnQuZGF0YS5zZXR1cF9wYWNrZXQpIHsNCisJCW1lbWNweShtYXVzYl9ldmVudC5kYXRhLmhk cl9hY2ssIHJlcXVlc3QtPnNldHVwX3BhY2tldCwNCisJCSAgICAgICBNQVVTQl9DT05UUk9MX1NF VFVQX1NJWkUpOw0KKwkJbWVtY3B5KHNoaWZ0X3B0cihtYXVzYl9ldmVudC5kYXRhLmhkcl9hY2ss DQorCQkJCSBNQVVTQl9DT05UUk9MX1NFVFVQX1NJWkUpLA0KKwkJICAgICAgICZyZXF1ZXN0LT5k ZXYtPnJvdXRlLCBzaXplb2YocmVxdWVzdC0+ZGV2LT5yb3V0ZSkpOw0KKwl9DQorDQorCXN0YXR1 cyA9IG1hdXNiX2VucXVldWVfZXZlbnRfdG9fdXNlcihkZXYsICZtYXVzYl9ldmVudCk7DQorCWlm IChzdGF0dXMgPCAwKQ0KKwkJbWF1c2JfcHJfZXJyKCJGYWlsZWQgdG8gZW5xdWV1ZSBldmVudCB0 byB1c2VyLXNwYWNlIGVwX2hhbmRsZT0lI3gsIHN0YXR1cz0lZCIsDQorCQkJICAgICBtYXVzYl9l dmVudC5kYXRhLmVwX2hhbmRsZSwgc3RhdHVzKTsNCisNCisJcmV0dXJuIHN0YXR1czsNCit9DQor DQordm9pZCBtYXVzYl9jb21wbGV0ZV9yZXF1ZXN0KHN0cnVjdCB1cmIgKnVyYiwgdTMyIGFjdHVh bF9sZW5ndGgsIGludCBzdGF0dXMpDQorew0KKwltYXVzYl9oY2RfdXJiX2NvbXBsZXRlKHVyYiwg YWN0dWFsX2xlbmd0aCwgc3RhdHVzKTsNCit9DQorDQoraW50IG1hdXNiX3NpZ25hbF9ldmVudChz dHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkgICAgICAgc3RydWN0IG1hdXNiX2V2ZW50ICpl dmVudCwgdTY0IGV2ZW50X2lkKQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJc3RydWN0 IG1hdXNiX2NvbXBsZXRpb24gKm1hdXNiX2NvbXBsZXRpb247DQorDQorCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmNvbXBsZXRpb25fZXZlbnRzX2xvY2ssIGZsYWdzKTsNCisJbGlzdF9mb3JfZWFj aF9lbnRyeShtYXVzYl9jb21wbGV0aW9uLCAmZGV2LT5jb21wbGV0aW9uX2V2ZW50cywNCisJCQkg ICAgbGlzdF9lbnRyeSkgew0KKwkJaWYgKG1hdXNiX2NvbXBsZXRpb24tPmV2ZW50X2lkID09IGV2 ZW50X2lkKSB7DQorCQkJbWVtY3B5KG1hdXNiX2NvbXBsZXRpb24tPm1hdXNiX2V2ZW50LCBldmVu dCwNCisJCQkgICAgICAgc2l6ZW9mKCpldmVudCkpOw0KKwkJCWNvbXBsZXRlKG1hdXNiX2NvbXBs ZXRpb24tPmNvbXBsZXRpb25fZXZlbnQpOw0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl di0+Y29tcGxldGlvbl9ldmVudHNfbG9jaywNCisJCQkJCSAgICAgICBmbGFncyk7DQorCQkJcmV0 dXJuIDA7DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb21wbGV0 aW9uX2V2ZW50c19sb2NrLCBmbGFncyk7DQorDQorCXJldHVybiAtRVRJTUVET1VUOw0KK30NCisN CitzdGF0aWMgaW50IG1hdXNiX3N0YXJ0X2Nvbm5lY3Rpb25fdGltZXIoc3RydWN0IG1hdXNiX2Rl dmljZSAqZGV2KQ0KK3sNCisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQorDQorCXNwaW5fbG9j a19pcnFzYXZlKCZkZXYtPmNvbm5lY3Rpb25fdGltZXJfbG9jaywgZmxhZ3MpOw0KKw0KKwlpZiAo KytkZXYtPnJlY2VpdmVfZmFpbHVyZXNfbnVtID4gTUFVU0JfTUFYX1JFQ0VJVkVfRkFJTFVSRVMp IHsNCisJCW1hdXNiX3ByX2VycigiTWlzc2VkIG1vcmUgdGhhbiAlZCBwaW5nIHJlc3BvbnNlcyIs DQorCQkJICAgICBNQVVTQl9NQVhfUkVDRUlWRV9GQUlMVVJFUyk7DQorCQlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXYtPmNvbm5lY3Rpb25fdGltZXJfbG9jaywgZmxhZ3MpOw0KKwkJcmV0dXJu IC1FVElNRURPVVQ7DQorCX0NCisNCisJbW9kX3RpbWVyKCZkZXYtPmNvbm5lY3Rpb25fdGltZXIs IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsNCisNCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2LT5jb25uZWN0aW9uX3RpbWVyX2xvY2ssIGZsYWdzKTsNCisNCisJcmV0dXJu IDA7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfcmVzZXRfY29ubmVjdGlvbl90aW1lcihzdHJ1Y3QgbWF1 c2JfZGV2aWNlICpkZXYpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJc3Bp bl9sb2NrX2lycXNhdmUoJmRldi0+Y29ubmVjdGlvbl90aW1lcl9sb2NrLCBmbGFncyk7DQorCWRl di0+cmVjZWl2ZV9mYWlsdXJlc19udW0gPSAwOw0KKw0KKwltb2RfdGltZXIoJmRldi0+Y29ubmVj dGlvbl90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOw0KKw0KKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvbm5lY3Rpb25fdGltZXJfbG9jaywgZmxhZ3MpOw0K K30NCisNCitzdGF0aWMgaW50IG1hdXNiX3N0YXJ0X2hlYXJ0YmVhdF90aW1lcih2b2lkKQ0KK3sN CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZtc3Mu bG9jaywgZmxhZ3MpOw0KKwlpZiAoKyttc3MubWlzc2VkX2hlYXJ0YmVhdHMgPiBNQVVTQl9NQVhf TUlTU0VEX0hFQVJUQkVBVFMpIHsNCisJCW1hdXNiX3ByX2VycigiTWlzc2VkIG1vcmUgdGhhbiAl ZCBoZWFydGJlYXRzIiwNCisJCQkgICAgIE1BVVNCX01BWF9NSVNTRURfSEVBUlRCRUFUUyk7DQor CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwkJcmV0dXJuIC1F VElNRURPVVQ7DQorCX0NCisNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNzLmxvY2ssIGZs YWdzKTsNCisJbW9kX3RpbWVyKCZtc3MuaGVhcnRiZWF0X3RpbWVyLA0KKwkJICBqaWZmaWVzICsg bXNlY3NfdG9famlmZmllcyhNQVVTQl9IRUFSVEJFQVRfVElNRU9VVF9NUykpOw0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQordm9pZCBtYXVzYl9yZXNldF9oZWFydGJlYXRfY250KHZvaWQpDQorew0K Kwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zcy5s b2NrLCBmbGFncyk7DQorCW1zcy5taXNzZWRfaGVhcnRiZWF0cyA9IDA7DQorCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNi X2V4ZWN1dGVfdXJiX2RlcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICpkZXF1ZXVlX3dvcmspDQor ew0KKwlzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0eCA9DQorCQkJY29udGFpbmVyX29mKGRl cXVldWVfd29yaywgc3RydWN0IG1hdXNiX3VyYl9jdHgsIHdvcmspOw0KKwlzdHJ1Y3QgdXJiCQkg ICp1cmIgPSB1cmJfY3R4LT51cmI7DQorCXN0cnVjdCBtYXVzYl9lbmRwb2ludF9jdHggKmVwX2N0 eDsNCisJc3RydWN0IG1hdXNiX2RldmljZQkgICptYV9kZXY7DQorCXN0cnVjdCBtYXVzYl9ldmVu dAkgIG1hdXNiX2V2ZW50Ow0KKwlpbnQgc3RhdHVzID0gMDsNCisNCisJZXBfY3R4ID0gdXJiLT5l cC0+aGNwcml2Ow0KKwltYV9kZXYgPSBlcF9jdHgtPm1hX2RldjsNCisNCisJaWYgKGF0b21pY19y ZWFkKCZtYV9kZXYtPnVucmVzcG9uc2l2ZV9jbGllbnQpKSB7DQorCQltYXVzYl9wcl9lcnIoIkNs aWVudCBpcyBub3QgcmVzcG9uc2l2ZSBhbnltb3JlIC0gZmluaXNoIHVyYiBpbW1lZGlhdGVseSB1 cmI9JXAsIGVwX2hhbmRsZT0lI3gsIGRldl9oYW5kbGU9JSN4IiwNCisJCQkgICAgIHVyYiwgZXBf Y3R4LT5lcF9oYW5kbGUsIGVwX2N0eC0+ZGV2X2hhbmRsZSk7DQorCQlnb3RvIGNvbXBsZXRlX3Vy YjsNCisJfQ0KKw0KKwltYXVzYl9wcl9kZWJ1ZygidXJiPSVwLCBlcF9oYW5kbGU9JSN4LCBkZXZf aGFuZGxlPSUjeCIsDQorCQkgICAgICAgdXJiLCBlcF9jdHgtPmVwX2hhbmRsZSwgZXBfY3R4LT5k ZXZfaGFuZGxlKTsNCisNCisJaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZ1cmItPmVwLT5k ZXNjKSkgew0KKwkJc3RhdHVzID0gbWF1c2JfY2FuY2VsdHJhbnNmZXJfZXZlbnRfdG9fdXNlcihl cF9jdHgtPm1hX2RldiwNCisJCQkJCQkJICAgIGVwX2N0eC0+ZGV2X2hhbmRsZSwNCisJCQkJCQkJ ICAgIGVwX2N0eC0+ZXBfaGFuZGxlLA0KKwkJCQkJCQkgICAgKHU2NCl1cmIpOw0KKwkJaWYgKHN0 YXR1cyA8IDApIHsNCisJCQltYXVzYl9wcl9lcnIoIkZhaWxlZCB0byBlbnF1ZXVlIGNhbmNlbCB0 cmFuc2ZlciB0byB1c2VyIik7DQorCQkJZ290byBjb21wbGV0ZV91cmI7DQorCQl9DQorCX0NCisN CisJbWVtc2V0KCZtYXVzYl9ldmVudCwgMCwgc2l6ZW9mKG1hdXNiX2V2ZW50KSk7DQorDQorCW1h dXNiX2V2ZW50LnR5cGUgICA9IE1BVVNCX0VWRU5UX1RZUEVfREVMRVRFX0RBVEFfVFJBTlNGRVI7 DQorCW1hdXNiX2V2ZW50LnN0YXR1cyA9IDA7DQorDQorCW1hdXNiX2V2ZW50LmRhdGEudHJhbnNm ZXJfdHlwZSA9DQorCQkJCW1hdXNiX3RyYW5zZmVyX3R5cGVfZnJvbV91c2IoJnVyYi0+ZXAtPmRl c2MpOw0KKwltYXVzYl9ldmVudC5kYXRhLmRldmljZV9pZCAgICAgPSBtYV9kZXYtPmlkOw0KKwlt YXVzYl9ldmVudC5kYXRhLmVwX2hhbmRsZSAgICAgPSBlcF9jdHgtPmVwX2hhbmRsZTsNCisJbWF1 c2JfZXZlbnQuZGF0YS51cmIJICAgICAgID0gKHU2NCl1cmI7DQorCW1hdXNiX2V2ZW50LmRhdGEu ZGlyZWN0aW9uICAgICA9ICh1c2JfdXJiX2Rpcl9pbih1cmIpID8NCisJCQkJCQlNQVVTQl9EQVRB X01TR19ESVJFQ1RJT05fSU4gOg0KKwkJCQkJCU1BVVNCX0RBVEFfTVNHX0RJUkVDVElPTl9PVVQp Ow0KKw0KKwlzdGF0dXMgPSBtYXVzYl9lbnF1ZXVlX2V2ZW50X3RvX3VzZXIoZXBfY3R4LT5tYV9k ZXYsICZtYXVzYl9ldmVudCk7DQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQltYXVzYl9wcl9hbGVy dCgiRmFpbGVkIHRvIGVucXVldWUgZXZlbnQgdG8gdXNlci1zcGFjZSBlcF9oYW5kbGU9JSN4LCBz dGF0dXM9JWQiLA0KKwkJCSAgICAgICBtYXVzYl9ldmVudC5kYXRhLmVwX2hhbmRsZSwgc3RhdHVz KTsNCisJCWdvdG8gY29tcGxldGVfdXJiOw0KKwl9DQorDQorCWlmICghbWF1c2JfcmV0dXJuX3Vy Yl9jdHhfdG9fdHJlZSh1cmJfY3R4LCBmYWxzZSkpIHsNCisJCW1hdXNiX3ByX2FsZXJ0KCJGYWls ZWQgdG8gaW5zZXJ0IGluIHRyZWUgdXJiPSVwIGVwX2hhbmRsZT0lI3gsIHN0YXR1cz0lZCIsDQor CQkJICAgICAgIHVyYiwgbWF1c2JfZXZlbnQuZGF0YS5lcF9oYW5kbGUsIHN0YXR1cyk7DQorCQln b3RvIGNvbXBsZXRlX3VyYjsNCisJfQ0KKw0KKwlyZXR1cm47DQorDQorY29tcGxldGVfdXJiOg0K Kw0KKwkvKiBEZWFsbG9jYXRlIHVyYl9jdHggKi8NCisJbWF1c2JfdW5pbml0X2RhdGFfaXRlcmF0 b3IoJnVyYl9jdHgtPml0ZXJhdG9yKTsNCisJa2ZyZWUodXJiX2N0eCk7DQorDQorCXVyYi0+c3Rh dHVzCSAgID0gLUVQUk9UTzsNCisJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsNCisJYXRvbWljX2Rl YygmdXJiLT51c2VfY291bnQpOw0KKwl1c2JfaGNkX2dpdmViYWNrX3VyYih1cmItPmhjcHJpdiwg dXJiLCB1cmItPnN0YXR1cyk7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfaW5pdGlhbGl6ZV9tc3Modm9p ZCkNCit7DQorCXNwaW5fbG9ja19pbml0KCZtc3MubG9jayk7DQorCUlOSVRfTElTVF9IRUFEKCZt c3MubWFkZXZfbGlzdCk7DQorCUlOSVRfTElTVF9IRUFEKCZtc3MuYXZhaWxhYmxlX3JpbmdfYnVm ZmVycyk7DQorDQorCWluaXRfY29tcGxldGlvbigmbXNzLmVtcHR5KTsNCisJY29tcGxldGUoJm1z cy5lbXB0eSk7DQorCWluaXRfY29tcGxldGlvbigmbXNzLnJpbmdzX2V2ZW50cy5tYXVzYl9yaW5n X2hhc19ldmVudHMpOw0KKwlhdG9taWNfc2V0KCZtc3MucmluZ3NfZXZlbnRzLm1hdXNiX3N0b3Bf cmVhZGluZ19yaW5nX2V2ZW50cywgMCk7DQorCW1zcy5kZWluaXRfaW5fcHJvZ3Jlc3MJPSBmYWxz ZTsNCisJbXNzLnJpbmdfYnVmZmVyX2lkCT0gMDsNCisJbXNzLmNsaWVudF9jb25uZWN0ZWQgPSBm YWxzZTsNCisJbXNzLm1pc3NlZF9oZWFydGJlYXRzID0gMDsNCisJaW5pdF9jb21wbGV0aW9uKCZt c3MuY2xpZW50X3N0b3BwZWQpOw0KKwlhdG9taWNfc2V0KCZtc3MubnVtX29mX3RyYW5zaXRpb25z X3RvX3NsZWVwLCAwKTsNCisNCisJdGltZXJfc2V0dXAoJm1zcy5oZWFydGJlYXRfdGltZXIsIG1h dXNiX2hlYXJ0YmVhdF90aW1lcl9mdW5jLCAwKTsNCit9DQorDQordm9pZCBtYXVzYl9kZWluaXRp YWxpemVfbXNzKHZvaWQpDQorew0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYgPSBOVUxMOw0K Kwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0NCisJ CQltc2Vjc190b19qaWZmaWVzKE1BVVNCX0NMSUVOVF9TVE9QUEVEX1RJTUVPVVRfTVMpOw0KKw0K KwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisNCisJbXNzLmRlaW5pdF9p bl9wcm9ncmVzcyA9IHRydWU7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmbXNzLm1h ZGV2X2xpc3QsIGxpc3RfZW50cnkpIHsNCisJCW1hdXNiX3ByX2RlYnVnKCJFbnF1ZXVlIG1hdXNi X2hjZF9kaXNjb25uZWN0X3dvcmsgbWFkZXZfYWRkcj0leCIsDQorCQkJICAgICAgIGRldi0+bWFk ZXZfYWRkcik7DQorCQlxdWV1ZV93b3JrKGRldi0+d29ya3EsICZkZXYtPmhjZF9kaXNjb25uZWN0 X3dvcmspOw0KKwl9DQorDQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFn cyk7DQorDQorCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1zcy5lbXB0eSk7DQorCW1hdXNiX3ByX2Rl YnVnKCJXYWl0aW5nIGZvciBjb21wbGV0aW9uIG9uIGRpc2Nvbm5lY3RfZXZlbnQgZW5kZWQiKTsN CisJbWF1c2Jfc3RvcF9yaW5nX2V2ZW50cygpOw0KKw0KKwl0aW1lb3V0ID0gd2FpdF9mb3JfY29t cGxldGlvbl90aW1lb3V0KCZtc3MuY2xpZW50X3N0b3BwZWQsIHRpbWVvdXQpOw0KKwltYXVzYl9w cl9pbmZvKCJSZW1haW5pbmcgdGltZSBhZnRlciB3YWl0aW5nIGZvciBzdG9wcGluZyBjbGllbnQg JWxkIiwNCisJCSAgICAgIHRpbWVvdXQpOw0KK30NCisNCitpbnQgbWF1c2JfcmVnaXN0ZXJfcG93 ZXJfc3RhdGVfbGlzdGVuZXIodm9pZCkNCit7DQorCW1hdXNiX3ByX2luZm8oIlJlZ2lzdGVyaW5n IHBvd2VyIHN0YXRlcyBsaXN0ZW5lciIpOw0KKw0KKwltaGNkLT5wb3dlcl9zdGF0ZV9saXN0ZW5l ci5ub3RpZmllcl9jYWxsID0gbWF1c2JfcG93ZXJfc3RhdGVfY2I7DQorCXJldHVybiByZWdpc3Rl cl9wbV9ub3RpZmllcigmbWhjZC0+cG93ZXJfc3RhdGVfbGlzdGVuZXIpOw0KK30NCisNCit2b2lk IG1hdXNiX3VucmVnaXN0ZXJfcG93ZXJfc3RhdGVfbGlzdGVuZXIodm9pZCkNCit7DQorCW1hdXNi X3ByX2luZm8oIlVuLXJlZ2lzdGVyaW5nIHBvd2VyIHN0YXRlcyBsaXN0ZW5lciIpOw0KKw0KKwl1 bnJlZ2lzdGVyX3BtX25vdGlmaWVyKCZtaGNkLT5wb3dlcl9zdGF0ZV9saXN0ZW5lcik7DQorfQ0K Kw0KK3N0YXRpYyBpbnQgbWF1c2JfcG93ZXJfc3RhdGVfY2Ioc3RydWN0IG5vdGlmaWVyX2Jsb2Nr ICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sDQorCQkJCXZvaWQgKmRhdGEpDQorew0KKwl1bnNp Z25lZCBsb25nIGZsYWdzID0gMDsNCisJc3RydWN0IG1hdXNiX2RldmljZSAqZGV2ID0gTlVMTDsN CisNCisJbWF1c2JfcHJfaW5mbygiUG93ZXIgc3RhdGUgY2FsbGJhY2sgYWN0aW9uID0gJWxkIiwg YWN0aW9uKTsNCisJaWYgKGFjdGlvbiA9PSBQTV9TVVNQRU5EX1BSRVBBUkUgfHwgYWN0aW9uID09 IFBNX0hJQkVSTkFUSU9OX1BSRVBBUkUpIHsNCisJCS8qIFN0b3AgaGVhcnRiZWF0IHRpbWVyICov DQorCQlkZWxfdGltZXJfc3luYygmbXNzLmhlYXJ0YmVhdF90aW1lcik7DQorCQltYXVzYl9wcl9p bmZvKCJTYXZpbmcgc3RhdGUgYmVmb3JlIHNsZWVwIik7DQorCQlzcGluX2xvY2tfaXJxc2F2ZSgm bXNzLmxvY2ssIGZsYWdzKTsNCisJCWlmICghbGlzdF9lbXB0eSgmbXNzLm1hZGV2X2xpc3QpKQ0K KwkJCWF0b21pY19pbmMoJm1zcy5udW1fb2ZfdHJhbnNpdGlvbnNfdG9fc2xlZXApOw0KKw0KKwkJ bGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZtc3MubWFkZXZfbGlzdCwgbGlzdF9lbnRyeSkgew0K KwkJCW1hdXNiX3ByX2luZm8oIkVucXVldWUgaGVhcnRiZWF0X3dvcmsgbWFkZXZfYWRkcj0leCIs DQorCQkJCSAgICAgIGRldi0+bWFkZXZfYWRkcik7DQorCQkJcXVldWVfd29yayhkZXYtPndvcmtx LCAmZGV2LT5oZWFydGJlYXRfd29yayk7DQorCQl9DQorDQorCQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwl9IGVsc2UgaWYgKGFjdGlvbiA9PSBQTV9QT1NUX1NV U1BFTkQgfHwgYWN0aW9uID09IFBNX1BPU1RfSElCRVJOQVRJT04pIHsNCisJCW1hdXNiX3Jlc2V0 X2hlYXJ0YmVhdF9jbnQoKTsNCisJCS8qIFN0YXJ0IGhlYXJiZWF0IHRpbWVyICovDQorCQltb2Rf dGltZXIoJm1zcy5oZWFydGJlYXRfdGltZXIsIGppZmZpZXMgKw0KKwkJCSAgbXNlY3NfdG9famlm ZmllcyhNQVVTQl9IRUFSVEJFQVRfVElNRU9VVF9NUykpOw0KKwl9DQorCXJldHVybiBOT1RJRllf T0s7DQorfQ0KKw0KK3N0cnVjdCBtYXVzYl9kZXZpY2UgKm1hdXNiX2dldF9kZXZfZnJvbV9hZGRy X3Vuc2FmZSh1OCBtYWRldl9hZGRyKQ0KK3sNCisJc3RydWN0IG1hdXNiX2RldmljZSAqZGV2ID0g TlVMTDsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZtc3MubWFkZXZfbGlzdCwgbGlz dF9lbnRyeSkgew0KKwkJaWYgKGRldi0+bWFkZXZfYWRkciA9PSBtYWRldl9hZGRyKQ0KKwkJCXJl dHVybiBkZXY7DQorCX0NCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1h dXNiX3JlbW92ZV9tYWRldl9mcm9tX2xpc3QodTggbWFkZXZfYWRkcikNCit7DQorCXVuc2lnbmVk IGxvbmcgZmxhZ3MgPSAwOw0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNlICptYV9kZXYsICp0bXAgPSBO VUxMOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisNCisJbGlz dF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hX2RldiwgdG1wLCAmbXNzLm1hZGV2X2xpc3QsIGxpc3Rf ZW50cnkpIHsNCisJCWlmIChtYV9kZXYtPm1hZGV2X2FkZHIgPT0gbWFkZXZfYWRkcikgew0KKwkJ CWxpc3RfZGVsKCZtYV9kZXYtPmxpc3RfZW50cnkpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQor DQorCWlmIChsaXN0X2VtcHR5KCZtc3MubWFkZXZfbGlzdCkpDQorCQlyZWluaXRfY29tcGxldGlv bigmbXNzLnJpbmdzX2V2ZW50cy5tYXVzYl9yaW5nX2hhc19ldmVudHMpOw0KKw0KKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgdm9pZCBt YXVzYl9zaWduYWxfZW1wdHlfbXNzKHZvaWQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0g MDsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zcy5sb2NrLCBmbGFncyk7DQorCWlmIChsaXN0 X2VtcHR5KCZtc3MubWFkZXZfbGlzdCkpDQorCQljb21wbGV0ZSgmbXNzLmVtcHR5KTsNCisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmbXNzLmxvY2ssIGZsYWdzKTsNCit9DQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9pc29jaF9pbi5jIGIvZHJpdmVycy91c2Iv bWF1c2JfaG9zdC9zcmMvaHBhbC9pc29jaF9pbi5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMDAwMDAwLi40NDZkZDljY2Q1MDYNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZl cnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvaXNvY2hfaW4uYw0KQEAgLTAsMCArMSwyNDEgQEAN CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29weXJpZ2h0 IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmls ZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1h aW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICov DQorI2luY2x1ZGUgImhwYWwvaXNvY2hfaW4uaCINCisNCisjaW5jbHVkZSA8bGludXgvc2xhYi5o Pg0KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4NCisNCisjaW5jbHVkZSAiaGNkL2h1Yi5oIg0KKyNp bmNsdWRlICJocGFsL2RhdGFfY29tbW9uLmgiDQorI2luY2x1ZGUgImhwYWwvaHBhbC5oIg0KKyNp bmNsdWRlICJocGFsL21hdXNiX2V2ZW50cy5oIg0KKyNpbmNsdWRlICJ1dGlscy9tYXVzYl9kYXRh X2l0ZXJhdG9yLmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisNCitzdGF0aWMg aW5saW5lIHUzMg0KK19fbWF1c2JfaXNvY2hfcHJlcGFyZV9yZWFkX3NpemVfYmxvY2soc3RydWN0 IG1hX3VzYl9oZHJfaXNvY2hyZWFkc2l6ZWJsb2NrX3N0ZCAqDQorCQkJCSAgICAgIGlzb2NoX3Jl YWRzaXplX2Jsb2NrLCBzdHJ1Y3QgdXJiICp1cmIpDQorew0KKwl1MzIgaTsNCisJdTMyIG51bWJl cl9vZl9wYWNrZXRzID0gKHUzMil1cmItPm51bWJlcl9vZl9wYWNrZXRzOw0KKw0KKwlpZiAobnVt YmVyX29mX3BhY2tldHMgPT0gMCkNCisJCXJldHVybiAwOw0KKw0KKwlpc29jaF9yZWFkc2l6ZV9i bG9jay0+c2VydmljZV9pbnRlcnZhbHMgID0gbnVtYmVyX29mX3BhY2tldHM7DQorCWlzb2NoX3Jl YWRzaXplX2Jsb2NrLT5tYXhfc2VnbWVudF9sZW5ndGggPQ0KKwkJCQkJKHUzMil1cmItPmlzb19m cmFtZV9kZXNjWzBdLmxlbmd0aDsNCisNCisJZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9wYWNr ZXRzOyArK2kpIHsNCisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsNCisJCXVy Yi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA9IDA7DQorCX0NCisNCisJcmV0dXJu IHNpemVvZihzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaHJlYWRzaXplYmxvY2tfc3RkKTsNCit9DQor DQoraW50IG1hdXNiX3NlbmRfaXNvY2hfaW5fbXNnKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwg c3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCXUzMiByZWFkX3NpemVfYmxvY2tfbGVu Z3RoID0gMDsNCisJc3RydWN0IG1hdXNiX2t2ZWNfZGF0YV93cmFwcGVyIGRhdGFfdG9fc2VuZDsN CisJc3RydWN0IGt2ZWMga3ZlY1tNQVVTQl9JU09DSF9JTl9LVkVDX05VTV07DQorCXN0cnVjdCBt YV91c2JfaGRyX2lzb2NodHJhbnNmZXJfb3B0aW9uYWwgb3B0X2lzb2NoX2hkcjsNCisJc3RydWN0 IG1hX3VzYl9oZHJfaXNvY2hyZWFkc2l6ZWJsb2NrX3N0ZCBpc29jaF9yZWFkc2l6ZV9ibG9jazsN CisJc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICpoZHIgPQ0KKwkJCQkoc3RydWN0IG1hX3VzYl9o ZHJfY29tbW9uICopZXZlbnQtPmRhdGEuaGRyOw0KKwlzdHJ1Y3QgdXJiICp1cmIgPSAoc3RydWN0 IHVyYiAqKWV2ZW50LT5kYXRhLnVyYjsNCisJZW51bSBtYXVzYl9jaGFubmVsIGNoYW5uZWw7DQor DQorCWRhdGFfdG9fc2VuZC5rdmVjX251bQk9IDA7DQorCWRhdGFfdG9fc2VuZC5sZW5ndGgJPSAw Ow0KKw0KKwkvKiBQcmVwYXJlIHRyYW5zZmVyIGhlYWRlciBrdmVjICovDQorCWt2ZWNbMF0uaW92 X2Jhc2UgICAgID0gZXZlbnQtPmRhdGEuaGRyOw0KKwlrdmVjWzBdLmlvdl9sZW4JICAgICA9IE1B VVNCX1RSQU5TRkVSX0hEUl9TSVpFOw0KKwlkYXRhX3RvX3NlbmQubGVuZ3RoICs9ICh1MzIpa3Zl Y1swXS5pb3ZfbGVuOw0KKwlkYXRhX3RvX3NlbmQua3ZlY19udW0rKzsNCisNCisJLyogUHJlcGFy ZSBvcHRpb25hbCBoZWFkZXIga3ZlYyAqLw0KKwlvcHRfaXNvY2hfaGRyLnRpbWVzdGFtcCA9IE1B X1VTQl9UUkFOU0ZFUl9SRVNFUlZFRDsNCisJb3B0X2lzb2NoX2hkci5tdGQJPSBNQV9VU0JfVFJB TlNGRVJfUkVTRVJWRUQ7DQorDQorCWt2ZWNbMV0uaW92X2Jhc2UgICAgID0gJm9wdF9pc29jaF9o ZHI7DQorCWt2ZWNbMV0uaW92X2xlbgkgICAgID0gc2l6ZW9mKHN0cnVjdCBtYV91c2JfaGRyX2lz b2NodHJhbnNmZXJfb3B0aW9uYWwpOw0KKwlkYXRhX3RvX3NlbmQubGVuZ3RoICs9ICh1MzIpa3Zl Y1sxXS5pb3ZfbGVuOw0KKwlkYXRhX3RvX3NlbmQua3ZlY19udW0rKzsNCisNCisJLyogUHJlcGFy ZSByZWFkIHNpemUgYmxvY2tzICovDQorCXJlYWRfc2l6ZV9ibG9ja19sZW5ndGggPQ0KKwkJX19t YXVzYl9pc29jaF9wcmVwYXJlX3JlYWRfc2l6ZV9ibG9jaygmaXNvY2hfcmVhZHNpemVfYmxvY2ss DQorCQkJCQkJICAgICAgdXJiKTsNCisJaWYgKHJlYWRfc2l6ZV9ibG9ja19sZW5ndGggPiAwKSB7 DQorCQlrdmVjWzJdLmlvdl9iYXNlICAgICA9ICZpc29jaF9yZWFkc2l6ZV9ibG9jazsNCisJCWt2 ZWNbMl0uaW92X2xlbgkgICAgID0gcmVhZF9zaXplX2Jsb2NrX2xlbmd0aDsNCisJCWRhdGFfdG9f c2VuZC5sZW5ndGggKz0gKHUzMilrdmVjWzJdLmlvdl9sZW47DQorCQlkYXRhX3RvX3NlbmQua3Zl Y19udW0rKzsNCisJfQ0KKw0KKwloZHItPmxlbmd0aCA9ICh1MTYpZGF0YV90b19zZW5kLmxlbmd0 aDsNCisJZGF0YV90b19zZW5kLmt2ZWMgPSBrdmVjOw0KKw0KKwljaGFubmVsID0gbWF1c2JfdHJh bnNmZXJfdHlwZV90b19jaGFubmVsKGV2ZW50LT5kYXRhLnRyYW5zZmVyX3R5cGUpOw0KKwlyZXR1 cm4gbWF1c2Jfc2VuZF9kYXRhKGRldiwgY2hhbm5lbCwgJmRhdGFfdG9fc2VuZCk7DQorfQ0KKw0K K3N0YXRpYyB2b2lkIF9fbWF1c2JfcHJvY2Vzc19pbl9pc29jaF9zaG9ydF9yZXNwKHN0cnVjdCBt YXVzYl9ldmVudCAqZXZlbnQsDQorCQkJCQkJc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICpoZHIs DQorCQkJCQkJc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpDQorew0KKwl1OCBvcHRfaGRy X3NoaWZ0ID0gKGhkci0+ZmxhZ3MgJiBNQV9VU0JfSERSX0ZMQUdTX1RJTUVTVEFNUCkgPw0KKwkJ CSAgIHNpemVvZihzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaHRyYW5zZmVyX29wdGlvbmFsKSA6IDA7 DQorCXN0cnVjdCBtYV91c2JfaGRyX2lzb2NoZGF0YWJsb2NrX3Nob3J0ICpkYXRhX2Jsb2NrX2hk ciA9DQorCQkJKHN0cnVjdCBtYV91c2JfaGRyX2lzb2NoZGF0YWJsb2NrX3Nob3J0ICopDQorCQkJ c2hpZnRfcHRyKG1hdXNiX2hkcl9pc29jaHRyYW5zZmVyX29wdGlvbmFsX2hkcihoZHIpLA0KKwkJ CQkgIG9wdF9oZHJfc2hpZnQpOw0KKwl1OCAqaXNvY2hfZGF0YSA9IHNoaWZ0X3B0cihkYXRhX2Js b2NrX2hkciwgaGRyLT5kYXRhLmhlYWRlcnMgKg0KKwkJCQkgICBzaXplb2YoKmRhdGFfYmxvY2tf aGRyKSk7DQorCXU4ICplbmRfb2ZfcGFja2V0ID0gc2hpZnRfcHRyKGhkciwgaGRyLT5sZW5ndGgp Ow0KKwlzdHJ1Y3QgdXJiICp1cmIgPSB1cmJfY3R4LT51cmI7DQorCWludCBpOw0KKw0KKwlpZiAo aXNvY2hfZGF0YSA+PSBlbmRfb2ZfcGFja2V0KSB7DQorCQltYXVzYl9wcl9lcnIoIkJhZCBoZWFk ZXIgZGF0YS4gRGF0YSBzdGFydCBwb2ludGVyIGFmdGVyIGVuZCBvZiBwYWNrZXQ6IGVwX2hhbmRs ZT0lI3giLA0KKwkJCSAgICAgZXZlbnQtPmRhdGEuZXBfaGFuZGxlKTsNCisJCXJldHVybjsNCisJ fQ0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgaGRyLT5kYXRhLmhlYWRlcnM7ICsraSkgew0KKwkJdTE2 IHNlZ19udW0gID0gZGF0YV9ibG9ja19oZHJbaV0uc2VnbWVudF9udW1iZXI7DQorCQl1MTYgc2Vn X3NpemUgPSBkYXRhX2Jsb2NrX2hkcltpXS5ibG9ja19sZW5ndGg7DQorDQorCQlpZiAoc2VnX251 bSA+PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB7DQorCQkJbWF1c2JfcHJfZXJyKCJUb28gbWFu eSBzZWdtZW50czogZXBfaGFuZGxlPSUjeCwgc2VnX251bT0lZCwgdXJiLm51bWJlcl9vZl9wYWNr ZXRzPSVkIiwNCisJCQkJICAgICBldmVudC0+ZGF0YS5lcF9oYW5kbGUsIHNlZ19udW0sDQorCQkJ CSAgICAgdXJiLT5udW1iZXJfb2ZfcGFja2V0cyk7DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQlp ZiAoc2VnX3NpemUgPiB1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1dLmxlbmd0aCkgew0KKwkJ CW1hdXNiX3ByX2VycigiQmxvY2sgdG8gbG9uZyBmb3Igc2VnbWVudDogZXBfaGFuZGxlPSUjeCIs DQorCQkJCSAgICAgZXZlbnQtPmRhdGEuZXBfaGFuZGxlKTsNCisJCQlicmVhazsNCisJCX0NCisN CisJCWlmIChzaGlmdF9wdHIoaXNvY2hfZGF0YSwgc2VnX3NpemUpID4gZW5kX29mX3BhY2tldCkg ew0KKwkJCW1hdXNiX3ByX2VycigiRW5kIG9mIHNlZ21lbnQgYWZ0ZXIgZW5mIG9mIHBhY2tldDog ZXBfaGFuZGxlPSUjeCIsDQorCQkJCSAgICAgZXZlbnQtPmRhdGEuZXBfaGFuZGxlKTsNCisJCQli cmVhazsNCisJCX0NCisNCisJCW1hdXNiX3Jlc2V0X2RhdGFfaXRlcmF0b3IoJnVyYl9jdHgtPml0 ZXJhdG9yKTsNCisJCW1hdXNiX2RhdGFfaXRlcmF0b3Jfc2VlaygmdXJiX2N0eC0+aXRlcmF0b3Is DQorCQkJCQkgdXJiLT5pc29fZnJhbWVfZGVzY1tzZWdfbnVtXS5vZmZzZXQpOw0KKwkJbWF1c2Jf ZGF0YV9pdGVyYXRvcl93cml0ZSgmdXJiX2N0eC0+aXRlcmF0b3IsIGlzb2NoX2RhdGEsDQorCQkJ CQkgIHNlZ19zaXplKTsNCisNCisJCWlzb2NoX2RhdGEgPSBzaGlmdF9wdHIoaXNvY2hfZGF0YSwg c2VnX3NpemUpOw0KKw0KKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tzZWdfbnVtXS5hY3R1YWxfbGVu Z3RoID0gc2VnX3NpemU7DQorCQl1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1dLnN0YXR1cyA9 IDA7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgX19tYXVzYl9wcm9jZXNzX2luX2lzb2NoX3N0 ZF9yZXNwKHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQsDQorCQkJCQkgICAgICBzdHJ1Y3QgbWFf dXNiX2hkcl9jb21tb24gKmhkciwNCisJCQkJCSAgICAgIHN0cnVjdCBtYXVzYl91cmJfY3R4ICp1 cmJfY3R4KQ0KK3sNCisJdTggb3B0X2hkcl9zaGlmdCA9IChoZHItPmZsYWdzICYgTUFfVVNCX0hE Ul9GTEFHU19USU1FU1RBTVApID8NCisJCQkgICBzaXplb2Yoc3RydWN0IG1hX3VzYl9oZHJfaXNv Y2h0cmFuc2Zlcl9vcHRpb25hbCkgOiAwOw0KKwlzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaGRhdGFi bG9ja19zdGQgKmRhdGFfYmxvY2tfaGRyID0NCisJCShzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaGRh dGFibG9ja19zdGQgKikNCisJCXNoaWZ0X3B0cihtYXVzYl9oZHJfaXNvY2h0cmFuc2Zlcl9vcHRp b25hbF9oZHIoaGRyKSwNCisJCQkgIG9wdF9oZHJfc2hpZnQpOw0KKwl1OCAqaXNvY2hfZGF0YSA9 DQorCQlzaGlmdF9wdHIoZGF0YV9ibG9ja19oZHIsIGhkci0+ZGF0YS5oZWFkZXJzICoNCisJCQkg IHNpemVvZihzdHJ1Y3QgbWFfdXNiX2hkcl9pc29jaGRhdGFibG9ja19zdGQpKTsNCisJdTggKmVu ZF9vZl9wYWNrZXQgPSBzaGlmdF9wdHIoaGRyLCBoZHItPmxlbmd0aCk7DQorCXN0cnVjdCB1cmIg KnVyYiA9IChzdHJ1Y3QgdXJiICopZXZlbnQtPmRhdGEudXJiOw0KKwlpbnQgaTsNCisNCisJaWYg KGlzb2NoX2RhdGEgPj0gZW5kX29mX3BhY2tldCkgew0KKwkJbWF1c2JfcHJfZXJyKCJCYWQgaGVh ZGVyIGRhdGEuIERhdGEgc3RhcnQgcG9pbnRlciBhZnRlciBlbmQgb2YgcGFja2V0OiBlcF9oYW5k bGU9JSN4IiwNCisJCQkgICAgIGV2ZW50LT5kYXRhLmVwX2hhbmRsZSk7DQorCQlyZXR1cm47DQor CX0NCisNCisJZm9yIChpID0gMDsgaSA8IGhkci0+ZGF0YS5oZWFkZXJzOyArK2kpIHsNCisJCXUx NiBzZWdfbnVtICAgPSBkYXRhX2Jsb2NrX2hkcltpXS5zZWdtZW50X251bWJlcjsNCisJCXUxNiBz ZWdfbGVuICAgPSBkYXRhX2Jsb2NrX2hkcltpXS5zZWdtZW50X2xlbmd0aDsNCisJCXUxNiBibG9j a19sZW4gPSBkYXRhX2Jsb2NrX2hkcltpXS5ibG9ja19sZW5ndGg7DQorDQorCQlpZiAoc2VnX251 bSA+PSB1cmItPm51bWJlcl9vZl9wYWNrZXRzKSB7DQorCQkJbWF1c2JfcHJfZXJyKCJUb28gbWFu eSBzZWdtZW50czogZXBfaGFuZGxlPSUjeCwgc2VnX251bT0lZCwgbnVtYmVyX29mX3BhY2tldHM9 JWQiLA0KKwkJCQkgICAgIGV2ZW50LT5kYXRhLmVwX2hhbmRsZSwgc2VnX251bSwNCisJCQkJICAg ICB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCWlmIChi bG9ja19sZW4gPiB1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1dLmxlbmd0aCAtDQorCQkJICAg ICB1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1dLmFjdHVhbF9sZW5ndGgpIHsNCisJCQltYXVz Yl9wcl9lcnIoIkJsb2NrIHRvbyBsb25nIGZvciBzZWdtZW50OiBlcF9oYW5kbGU9JSN4IiwNCisJ CQkJICAgICBldmVudC0+ZGF0YS5lcF9oYW5kbGUpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJ aWYgKHNoaWZ0X3B0cihpc29jaF9kYXRhLCBibG9ja19sZW4pID4NCisJCQkJICAgICAgIGVuZF9v Zl9wYWNrZXQpIHsNCisJCQltYXVzYl9wcl9lcnIoIkVuZCBvZiBmcmFnbWVudCBhZnRlciBlbmQg b2YgcGFja2V0OiBlcF9oYW5kbGU9JSN4IiwNCisJCQkJICAgICBldmVudC0+ZGF0YS5lcF9oYW5k bGUpOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKw0KKwkJbWF1c2JfcmVzZXRfZGF0YV9pdGVyYXRvcigm dXJiX2N0eC0+aXRlcmF0b3IpOw0KKwkJbWF1c2JfZGF0YV9pdGVyYXRvcl9zZWVrKCZ1cmJfY3R4 LT5pdGVyYXRvciwNCisJCQkJCSB1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1dLm9mZnNldCAr DQorCQkJCQkgZGF0YV9ibG9ja19oZHJbaV0uZnJhZ21lbnRfb2Zmc2V0KTsNCisJCW1hdXNiX2Rh dGFfaXRlcmF0b3Jfd3JpdGUoJnVyYl9jdHgtPml0ZXJhdG9yLA0KKwkJCQkJICBpc29jaF9kYXRh LCBibG9ja19sZW4pOw0KKwkJaXNvY2hfZGF0YSA9IHNoaWZ0X3B0cihpc29jaF9kYXRhLCBibG9j a19sZW4pOw0KKw0KKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tzZWdfbnVtXS5hY3R1YWxfbGVuZ3Ro ICs9IGJsb2NrX2xlbjsNCisNCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1dLmFj dHVhbF9sZW5ndGggPT0gc2VnX2xlbikNCisJCQl1cmItPmlzb19mcmFtZV9kZXNjW3NlZ19udW1d LnN0YXR1cyA9IDA7DQorCX0NCit9DQorDQoraW50IG1hdXNiX3JlY2VpdmVfaXNvY2hfaW5fZGF0 YShzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCXN0cnVjdCBtYXVzYl9ldmVudCAqZXZl bnQsDQorCQkJCXN0cnVjdCBtYXVzYl91cmJfY3R4ICp1cmJfY3R4KQ0KK3sNCisJc3RydWN0IG1h X3VzYl9oZHJfY29tbW9uICpjb21tb25faGRyID0NCisJCQkoc3RydWN0IG1hX3VzYl9oZHJfY29t bW9uICopZXZlbnQtPmRhdGEucmVjdl9idWY7DQorCXN0cnVjdCBtYV91c2JfaGRyX3RyYW5zZmVy ICp0cmFuc2Zlcl9oZHIgPQ0KKwkJCQkJbWF1c2JfZ2V0X2RhdGFfdHJhbnNmZXJfaGRyKGNvbW1v bl9oZHIpOw0KKw0KKwlpZiAoIShjb21tb25faGRyLT5kYXRhLmlfZmxhZ3MgJiBNQV9VU0JfREFU QV9JRkxBR1NfRk1UX01BU0spKSB7DQorCQkvKiBTaG9ydCBJU08gaGVhZGVycyByZXNwb25zZSAq Lw0KKwkJX19tYXVzYl9wcm9jZXNzX2luX2lzb2NoX3Nob3J0X3Jlc3AoZXZlbnQsIGNvbW1vbl9o ZHIsIHVyYl9jdHgpOw0KKwl9IGVsc2UgaWYgKChjb21tb25faGRyLT5kYXRhLmlfZmxhZ3MgJiBN QV9VU0JfREFUQV9JRkxBR1NfRk1UX01BU0spICYNCisJCU1BX1VTQl9EQVRBX0lGTEFHU19IRFJf Rk1UX1NURCkgew0KKwkJLyogU3RhbmRhcmQgSVNPIGhlYWRlcnMgcmVzcG9uc2UgKi8NCisJCV9f bWF1c2JfcHJvY2Vzc19pbl9pc29jaF9zdGRfcmVzcChldmVudCwgY29tbW9uX2hkciwgdXJiX2N0 eCk7DQorCX0gZWxzZSBpZiAoKGNvbW1vbl9oZHItPmRhdGEuaV9mbGFncyAmIE1BX1VTQl9EQVRB X0lGTEFHU19GTVRfTUFTSykgJg0KKwkJTUFfVVNCX0RBVEFfSUZMQUdTX0hEUl9GTVRfTE9ORykg ew0KKwkJLyogTG9uZyBJU08gaGVhZGVycyByZXNwb25zZSAqLw0KKwkJbWF1c2JfcHJfd2Fybigi TG9uZyBpc29jIGhlYWRlcnMgaW4gcmVzcG9uc2U6IGVwX2hhbmRsZT0lI3gsIHJlcV9pZD0lI3gi LA0KKwkJCSAgICAgIGV2ZW50LT5kYXRhLmVwX2hhbmRsZSwgdHJhbnNmZXJfaGRyLT5yZXFfaWQp Ow0KKwl9IGVsc2Ugew0KKwkJLyogRXJyb3IgKi8NCisJCW1hdXNiX3ByX2VycigiSXNvYyBoZWFk ZXIgZXJyb3IgaW4gcmVzcG9uc2U6IGVwX2hhbmRsZT0lI3gsIHJlcV9pZD0lI3giLA0KKwkJCSAg ICAgZXZlbnQtPmRhdGEuZXBfaGFuZGxlLCB0cmFuc2Zlcl9oZHItPnJlcV9pZCk7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3Jj L2hwYWwvaXNvY2hfb3V0LmMgYi9kcml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy9ocGFsL2lzb2No X291dC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5lZTJmMzc2 NTNlZmUNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hw YWwvaXNvY2hfb3V0LmMNCkBAIC0wLDAgKzEsMzYwIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOSAtIDIwMjAgRGlzcGxh eUxpbmsgKFVLKSBMdGQuDQorICoNCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVy bXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2Ug djIuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFy Y2hpdmUgZm9yDQorICogbW9yZSBkZXRhaWxzLg0KKyAqLw0KKyNpbmNsdWRlICJocGFsL2lzb2No X291dC5oIg0KKw0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorDQorI2luY2x1ZGUgImhjZC9o dWIuaCINCisjaW5jbHVkZSAiaHBhbC9kYXRhX2NvbW1vbi5oIg0KKyNpbmNsdWRlICJocGFsL2hw YWwuaCINCisjaW5jbHVkZSAidXRpbHMvbWF1c2JfZGF0YV9pdGVyYXRvci5oIg0KKyNpbmNsdWRl ICJ1dGlscy9tYXVzYl9sb2dzLmgiDQorDQorc3RhdGljIGlubGluZSB1MzINCitfX21hdXNiX2Nh bGN1bGF0ZV9pc29jaF9jb21tb25faGVhZGVyX3NpemUodTMyIG51bV9vZl9zZWdtZW50cykNCit7 DQorCXJldHVybiBNQVVTQl9JU09DSF9UUkFOU0ZFUl9IRFJfU0laRSArDQorCQkJTUFVU0JfSVNP Q0hfU1RBTkRBUkRfRk9STUFUX1NJWkUgKiBudW1fb2Zfc2VnbWVudHM7DQorfQ0KKw0KK3N0YXRp YyBzdHJ1Y3QgbWFfdXNiX2hkcl9jb21tb24gKg0KK19fbWF1c2JfY3JlYXRlX2lzb2NoX291dF90 cmFuc2Zlcl9wYWNrZXQoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkJCSBzdHJ1Y3Qg bWF1c2JfdXJiX2N0eCAqdXJiX2N0eCwNCisJCQkJCSB1MTYgcGF5bG9hZF9zaXplLCB1MzIgc2Vx X24sDQorCQkJCQkgdTMyIHN0YXJ0X29mX3NlZ21lbnRzLA0KKwkJCQkJIHUzMiBudW1iZXJfb2Zf c2VnbWVudHMpDQorew0KKwlzdHJ1Y3QgbWFfdXNiX2hkcl9jb21tb24JCSAqaGRyOw0KKwlzdHJ1 Y3QgbWFfdXNiX2hkcl9pc29jaHRyYW5zZmVyCQkgKmhkcl9pc29jaHRyYW5zZmVyOw0KKwlzdHJ1 Y3QgbWFfdXNiX2hkcl9pc29jaGRhdGFibG9ja19zdGQJICppc29jX2hlYWRlcl9zdGQ7DQorCXN0 cnVjdCBtYV91c2JfaGRyX2lzb2NodHJhbnNmZXJfb3B0aW9uYWwgKmhkcl9vcHRfaXNvY2h0cmFu c2ZlcjsNCisJc3RydWN0IHVyYiAqdXJiID0gKHN0cnVjdCB1cmIgKilldmVudC0+ZGF0YS51cmI7 DQorCXZvaWQgKmlzb2NfaGVhZGVycyA9IE5VTEw7DQorCXUzMiBsZW5ndGg7DQorCXUxNiBpOw0K Kwl1bnNpZ25lZCBsb25nIGJsb2NrX2xlbmd0aDsNCisJdTMyIG51bWJlcl9vZl9wYWNrZXRzID0g KHUzMilldmVudC0+ZGF0YS5pc29jaF9zZWdfbnVtOw0KKwl1MzIgc2l6ZV9vZl9yZXF1ZXN0ID0N CisJCV9fbWF1c2JfY2FsY3VsYXRlX2lzb2NoX2NvbW1vbl9oZWFkZXJfc2l6ZShudW1iZXJfb2Zf c2VnbWVudHMpOw0KKw0KKwloZHIgPSBremFsbG9jKHNpemVfb2ZfcmVxdWVzdCwgR0ZQX0tFUk5F TCk7DQorCWlmICghaGRyKQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCWhkci0+dmVyc2lvbgkgID0g TUFfVVNCX0hEUl9WRVJTSU9OXzFfMDsNCisJaGRyLT5zc2lkCSAgPSBldmVudC0+ZGF0YS5tYXVz Yl9zc2lkOw0KKwloZHItPmZsYWdzCSAgPSBNQV9VU0JfSERSX0ZMQUdTX0hPU1Q7DQorCWhkci0+ ZGV2X2FkZHIJICA9IGV2ZW50LT5kYXRhLm1hdXNiX2FkZHJlc3M7DQorCWhkci0+aGFuZGxlLmVw dgkgID0gZXZlbnQtPmRhdGEuZXBfaGFuZGxlOw0KKwloZHItPmRhdGEuc3RhdHVzICA9IE1BX1VT Ql9IRFJfU1RBVFVTX05PX0VSUk9SOw0KKwloZHItPmRhdGEuZXBzCSAgPSBNQVVTQl9UUkFOU0ZF Ul9SRVNFUlZFRDsNCisJaGRyLT5kYXRhLnRfZmxhZ3MgPSAodTgpKHVzYl9lbmRwb2ludF90eXBl KCZ1cmItPmVwLT5kZXNjKSA8PCAzKTsNCisNCisJaXNvY19oZWFkZXJzID0gc2hpZnRfcHRyKGhk ciwgTUFVU0JfSVNPQ0hfVFJBTlNGRVJfSERSX1NJWkUpOw0KKw0KKwlmb3IgKGkgPSAodTE2KXN0 YXJ0X29mX3NlZ21lbnRzOw0KKwkgICAgIGkgPCBudW1iZXJfb2Zfc2VnbWVudHMgKyBzdGFydF9v Zl9zZWdtZW50czsgKytpKSB7DQorCQlibG9ja19sZW5ndGggPSBpIDwgbnVtYmVyX29mX3BhY2tl dHMgLSAxID8NCisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2kgKyAxXS5vZmZzZXQgLQ0KKwkJCXVy Yi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0IDoNCisJCQltYXVzYl9kYXRhX2l0ZXJhdG9yX2xl bmd0aCgmdXJiX2N0eC0+aXRlcmF0b3IpIC0NCisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9m ZnNldDsNCisNCisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gTUFfVVNCX0hEUl9T VEFUVVNfVU5TVUNDRVNTRlVMOw0KKwkJaXNvY19oZWFkZXJfc3RkID0gKHN0cnVjdCBtYV91c2Jf aGRyX2lzb2NoZGF0YWJsb2NrX3N0ZCAqKQ0KKwkJCXNoaWZ0X3B0cihpc29jX2hlYWRlcnMsDQor CQkJCSAgKHU2NClNQVVTQl9JU09DSF9TVEFOREFSRF9GT1JNQVRfU0laRSAqDQorCQkJCSAgKGkg LSBzdGFydF9vZl9zZWdtZW50cykpOw0KKwkJaXNvY19oZWFkZXJfc3RkLT5ibG9ja19sZW5ndGgJ ID0gKHUxNilibG9ja19sZW5ndGg7DQorCQlpc29jX2hlYWRlcl9zdGQtPnNlZ21lbnRfbnVtYmVy ICA9IGk7DQorCQlpc29jX2hlYWRlcl9zdGQtPnNfZmxhZ3MJID0gMDsNCisJCWlzb2NfaGVhZGVy X3N0ZC0+c2VnbWVudF9sZW5ndGggID0gKHUxNilibG9ja19sZW5ndGg7DQorCQlpc29jX2hlYWRl cl9zdGQtPmZyYWdtZW50X29mZnNldCA9IDA7DQorCX0NCisNCisJbGVuZ3RoID0gX19tYXVzYl9j YWxjdWxhdGVfaXNvY2hfY29tbW9uX2hlYWRlcl9zaXplKG51bWJlcl9vZl9zZWdtZW50cyk7DQor DQorCWhkci0+ZmxhZ3MJCXw9IE1BX1VTQl9IRFJfRkxBR1NfVElNRVNUQU1QOw0KKwloZHItPnR5 cGUJCSA9ICh1OClNQV9VU0JfSERSX1RZUEVfREFUQV9SRVEoSVNPQ0hUUkFOU0ZFUik7DQorCWhk ci0+ZGF0YS5oZWFkZXJzCSA9ICh1MTYpbnVtYmVyX29mX3NlZ21lbnRzOw0KKwloZHItPmRhdGEu aV9mbGFncwkgPSBNQV9VU0JfREFUQV9JRkxBR1NfSERSX0ZNVF9TVEQgfA0KKwkJCQkgICAgICBN QV9VU0JfREFUQV9JRkxBR1NfQVNBUDsNCisJaGRyX29wdF9pc29jaHRyYW5zZmVyCSAgICA9IG1h dXNiX2hkcl9pc29jaHRyYW5zZmVyX29wdGlvbmFsX2hkcihoZHIpOw0KKwloZHJfaXNvY2h0cmFu c2ZlcgkgICAgPSBtYXVzYl9nZXRfaXNvY2h0cmFuc2Zlcl9oZHIoaGRyKTsNCisJaGRyX2lzb2No dHJhbnNmZXItPnJlcV9pZCAgID0gZXZlbnQtPmRhdGEucmVxX2lkOw0KKwloZHJfaXNvY2h0cmFu c2Zlci0+c2VxX24gICAgPSBzZXFfbjsNCisJaGRyX2lzb2NodHJhbnNmZXItPnNlZ21lbnRzID0g bnVtYmVyX29mX3BhY2tldHM7DQorDQorCWhkcl9pc29jaHRyYW5zZmVyLT5wcmVzZW50YXRpb25f dGltZSA9IE1BX1VTQl9UUkFOU0ZFUl9SRVNFUlZFRDsNCisNCisJaGRyX29wdF9pc29jaHRyYW5z ZmVyLT50aW1lc3RhbXAgPSBNQV9VU0JfVFJBTlNGRVJfUkVTRVJWRUQ7DQorCWhkcl9vcHRfaXNv Y2h0cmFuc2Zlci0+bXRkCSA9IE1BX1VTQl9UUkFOU0ZFUl9SRVNFUlZFRDsNCisNCisJaGRyLT5s ZW5ndGggPSAodTE2KWxlbmd0aCArIHBheWxvYWRfc2l6ZTsNCisNCisJcmV0dXJuIGhkcjsNCit9 DQorDQorc3RhdGljIGludCBtYXVzYl9hZGRfZGF0YV9jaHVuayh2b2lkICpidWZmZXIsIHUzMiBi dWZmZXJfc2l6ZSwNCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqY2h1bmtzX2xpc3QpDQorew0KKwlz dHJ1Y3QgbWF1c2JfcGF5bG9hZF9jaHVuayAqZGF0YV9jaHVuayA9IE5VTEw7DQorDQorCWRhdGFf Y2h1bmsgPSBremFsbG9jKHNpemVvZigqZGF0YV9jaHVuayksIEdGUF9LRVJORUwpOw0KKwlpZiAo IWRhdGFfY2h1bmspDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJLyogSW5pdGlhbGl6ZSBkYXRh IGNodW5rIGZvciBNQVVTQiBoZWFkZXIgYW5kIGFkZCBpdCB0byBjaHVua3MgbGlzdCAqLw0KKwlJ TklUX0xJU1RfSEVBRCgmZGF0YV9jaHVuay0+bGlzdF9lbnRyeSk7DQorCWRhdGFfY2h1bmstPmt2 ZWMuaW92X2Jhc2UgPSBidWZmZXI7DQorCWRhdGFfY2h1bmstPmt2ZWMuaW92X2xlbiAgPSBidWZm ZXJfc2l6ZTsNCisJbGlzdF9hZGRfdGFpbCgmZGF0YV9jaHVuay0+bGlzdF9lbnRyeSwgY2h1bmtz X2xpc3QpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtYXVzYl9pbml0X2hlYWRl cl9kYXRhX2NodW5rKHN0cnVjdCBtYV91c2JfaGRyX2NvbW1vbiAqY29tbW9uX2hkciwNCisJCQkJ CXN0cnVjdCBsaXN0X2hlYWQgKmNodW5rc19saXN0LA0KKwkJCQkJdTMyICpudW1fb2ZfZGF0YV9j aHVua3MsDQorCQkJCQl1MzIgbnVtX29mX3BhY2tldHMpDQorew0KKwl1MzIgaGVhZGVyX3NpemUg PQ0KKwkJX19tYXVzYl9jYWxjdWxhdGVfaXNvY2hfY29tbW9uX2hlYWRlcl9zaXplKG51bV9vZl9w YWNrZXRzKTsNCisJaW50IHN0YXR1cyA9IG1hdXNiX2FkZF9kYXRhX2NodW5rKGNvbW1vbl9oZHIs IGhlYWRlcl9zaXplLCBjaHVua3NfbGlzdCk7DQorDQorCWlmICghc3RhdHVzKQ0KKwkJKysoKm51 bV9vZl9kYXRhX2NodW5rcyk7DQorDQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK3N0YXRpYyBp bnQgbWF1c2JfaW5pdF9kYXRhX3dyYXBwZXIoc3RydWN0IG1hdXNiX2t2ZWNfZGF0YV93cmFwcGVy ICpkYXRhLA0KKwkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpjaHVua3NfbGlzdCwNCisJCQkJICAg dTMyIG51bV9vZl9kYXRhX2NodW5rcykNCit7DQorCXN0cnVjdCBtYXVzYl9wYXlsb2FkX2NodW5r ICpkYXRhX2NodW5rID0gTlVMTCwgKnRtcCA9IE5VTEw7DQorCXUzMiBjdXJyZW50X2t2ZWMgPSAw Ow0KKw0KKwlkYXRhLT5sZW5ndGggPSAwOw0KKwlkYXRhLT5rdmVjID0ga2NhbGxvYyhudW1fb2Zf ZGF0YV9jaHVua3MsIHNpemVvZihzdHJ1Y3Qga3ZlYyksDQorCQkJICAgICBHRlBfS0VSTkVMKTsN CisJaWYgKCFkYXRhLT5rdmVjKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShkYXRhX2NodW5rLCB0bXAsIGNodW5rc19saXN0LCBsaXN0X2VudHJ5KSB7 DQorCQlkYXRhLT5rdmVjW2N1cnJlbnRfa3ZlY10uaW92X2Jhc2UgPQ0KKwkJCWRhdGFfY2h1bmst Pmt2ZWMuaW92X2Jhc2U7DQorCQlkYXRhLT5rdmVjW2N1cnJlbnRfa3ZlY10uaW92X2xlbiA9DQor CQkgICAgZGF0YV9jaHVuay0+a3ZlYy5pb3ZfbGVuOw0KKwkJKytkYXRhLT5rdmVjX251bTsNCisJ CWRhdGEtPmxlbmd0aCArPSBkYXRhX2NodW5rLT5rdmVjLmlvdl9sZW47DQorCQkrK2N1cnJlbnRf a3ZlYzsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1c2JfY2xlYW51 cF9jaHVua3NfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpjaHVua3NfbGlzdCkNCit7DQorCXN0cnVj dCBtYXVzYl9wYXlsb2FkX2NodW5rICpkYXRhX2NodW5rID0gTlVMTCwgKnRtcCA9IE5VTEw7DQor DQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkYXRhX2NodW5rLCB0bXAsIGNodW5rc19saXN0 LCBsaXN0X2VudHJ5KSB7DQorCQlsaXN0X2RlbCgmZGF0YV9jaHVuay0+bGlzdF9lbnRyeSk7DQor CQlrZnJlZShkYXRhX2NodW5rKTsNCisJfQ0KK30NCisNCitzdGF0aWMNCitpbnQgbWF1c2JfcHJl cGFyZV9pc29jaF9vdXRfdHJhbnNmZXJfcGFja2V0KHN0cnVjdCBtYV91c2JfaGRyX2NvbW1vbiAq aGRyLA0KKwkJCQkJICAgIHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQsDQorCQkJCQkgICAgc3Ry dWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgsDQorCQkJCQkgICAgc3RydWN0IG1hdXNiX2t2ZWNf ZGF0YV93cmFwcGVyICoNCisJCQkJCSAgICByZXN1bHRfZGF0YV93cmFwcGVyKQ0KK3sNCisJdTMy IG51bV9vZl9kYXRhX2NodW5rcwkgICAgICAgPSAwOw0KKwl1MzIgbnVtX29mX3BheWxvYWRfZGF0 YV9jaHVua3MgPSAwOw0KKwl1MzIgc2VnbWVudF9udW1iZXIJICAgICAgID0gZXZlbnQtPmRhdGEu aXNvY2hfc2VnX251bTsNCisJdTMyIHBheWxvYWRfZGF0YV9zaXplOw0KKwlzdHJ1Y3QgbGlzdF9o ZWFkIGNodW5rc19saXN0Ow0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHBheWxvYWRfZGF0YV9jaHVua3M7 DQorCWludCBzdGF0dXMgPSAwOw0KKw0KKwlJTklUX0xJU1RfSEVBRCgmY2h1bmtzX2xpc3QpOw0K Kw0KKwkvKiBJbml0aWFsaXplIGRhdGEgY2h1bmsgZm9yIE1BVVNCIGhlYWRlciBhbmQgYWRkIGl0 IHRvIGNodW5rcyBsaXN0ICovDQorCWlmIChtYXVzYl9pbml0X2hlYWRlcl9kYXRhX2NodW5rKGhk ciwgJmNodW5rc19saXN0LCAmbnVtX29mX2RhdGFfY2h1bmtzLA0KKwkJCQkJIHNlZ21lbnRfbnVt YmVyKSA8IDApIHsNCisJCXN0YXR1cyA9IC1FTk9NRU07DQorCQlnb3RvIGNsZWFudXBfZGF0YV9j aHVua3M7DQorCX0NCisNCisJLyogR2V0IGRhdGEgY2h1bmtzIGZvciBkYXRhIHBheWxvYWQgdG8g c2VuZCAqLw0KKwlJTklUX0xJU1RfSEVBRCgmcGF5bG9hZF9kYXRhX2NodW5rcyk7DQorCXBheWxv YWRfZGF0YV9zaXplID0gaGRyLT5sZW5ndGggLQ0KKwkJX19tYXVzYl9jYWxjdWxhdGVfaXNvY2hf Y29tbW9uX2hlYWRlcl9zaXplKHNlZ21lbnRfbnVtYmVyKTsNCisNCisJaWYgKG1hdXNiX2RhdGFf aXRlcmF0b3JfcmVhZCgmdXJiX2N0eC0+aXRlcmF0b3IsIHBheWxvYWRfZGF0YV9zaXplLA0KKwkJ CQkgICAgICZwYXlsb2FkX2RhdGFfY2h1bmtzLA0KKwkJCQkgICAgICZudW1fb2ZfcGF5bG9hZF9k YXRhX2NodW5rcykgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIkRhdGEgaXRlcmF0b3IgcmVhZCBm YWlsZWQiKTsNCisJCXN0YXR1cyA9IC1FTk9NRU07DQorCQlnb3RvIGNsZWFudXBfZGF0YV9jaHVu a3M7DQorCX0NCisNCisJbGlzdF9zcGxpY2VfdGFpbCgmcGF5bG9hZF9kYXRhX2NodW5rcywgJmNo dW5rc19saXN0KTsNCisJbnVtX29mX2RhdGFfY2h1bmtzICs9IG51bV9vZl9wYXlsb2FkX2RhdGFf Y2h1bmtzOw0KKw0KKwkvKiBNYXAgYWxsIGRhdGEgY2h1bmtzIHRvIGRhdGEgd3JhcHBlciAqLw0K KwlpZiAobWF1c2JfaW5pdF9kYXRhX3dyYXBwZXIocmVzdWx0X2RhdGFfd3JhcHBlciwgJmNodW5r c19saXN0LA0KKwkJCQkgICAgbnVtX29mX2RhdGFfY2h1bmtzKSA8IDApIHsNCisJCW1hdXNiX3By X2VycigiRGF0YSB3cmFwcGVyIGluaXQgZmFpbGVkIik7DQorCQlzdGF0dXMgPSAtRU5PTUVNOw0K KwkJZ290byBjbGVhbnVwX2RhdGFfY2h1bmtzOw0KKwl9DQorDQorY2xlYW51cF9kYXRhX2NodW5r czoNCisJbWF1c2JfY2xlYW51cF9jaHVua3NfbGlzdCgmY2h1bmtzX2xpc3QpOw0KKwlyZXR1cm4g c3RhdHVzOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX2NyZWF0ZV9hbmRfc2VuZF9pc29jaF90 cmFuc2Zlcl9yZXEoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkJCSAgICBzdHJ1Y3Qg bWF1c2JfZXZlbnQgKmV2ZW50LA0KKwkJCQkJCSAgICBzdHJ1Y3QgbWF1c2JfdXJiX2N0eA0KKwkJ CQkJCSAgICAqdXJiX2N0eCwgdTMyICpzZXFfbiwNCisJCQkJCQkgICAgdTMyIHBheWxvYWRfc2l6 ZSwNCisJCQkJCQkgICAgdTMyIHN0YXJ0X29mX3NlZ21lbnRzLA0KKwkJCQkJCSAgICB1MzIgbnVt YmVyX29mX3NlZ21lbnRzKQ0KK3sNCisJc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICpoZHI7DQor CXN0cnVjdCBtYXVzYl9rdmVjX2RhdGFfd3JhcHBlciBkYXRhX3RvX3NlbmQ7DQorCWludCBzdGF0 dXM7DQorCWVudW0gbWF1c2JfY2hhbm5lbCBjaGFubmVsOw0KKw0KKwloZHIgPSBfX21hdXNiX2Ny ZWF0ZV9pc29jaF9vdXRfdHJhbnNmZXJfcGFja2V0KGV2ZW50LCB1cmJfY3R4LA0KKwkJCQkJCSAg ICAgICAodTE2KXBheWxvYWRfc2l6ZSwNCisJCQkJCQkgICAgICAgKnNlcV9uLA0KKwkJCQkJCSAg ICAgICBzdGFydF9vZl9zZWdtZW50cywNCisJCQkJCQkgICAgICAgbnVtYmVyX29mX3NlZ21lbnRz KTsNCisJaWYgKCFoZHIpIHsNCisJCW1hdXNiX3ByX2FsZXJ0KCJJc29jaCB0cmFuc2ZlciBwYWNr ZXQgYWxsb2MgZmFpbGVkIik7DQorCQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKwkqc2VxX24gPSAo KnNlcV9uICsgMSkgJSAoTUFfVVNCX1RSQU5TRkVSX1NFUU5fTUFYICsgMSk7DQorDQorCXN0YXR1 cyA9IG1hdXNiX3ByZXBhcmVfaXNvY2hfb3V0X3RyYW5zZmVyX3BhY2tldChoZHIsIGV2ZW50LCB1 cmJfY3R4LA0KKwkJCQkJCQkgJmRhdGFfdG9fc2VuZCk7DQorCWlmIChzdGF0dXMgPCAwKSB7DQor CQltYXVzYl9wcl9hbGVydCgiRmFpbGVkIHRvIHByZXBhcmUgdHJhbnNmZXIgcGFja2V0Iik7DQor CQlrZnJlZShoZHIpOw0KKwkJcmV0dXJuIHN0YXR1czsNCisJfQ0KKw0KKwljaGFubmVsID0gbWF1 c2JfdHJhbnNmZXJfdHlwZV90b19jaGFubmVsKGV2ZW50LT5kYXRhLnRyYW5zZmVyX3R5cGUpOw0K KwlzdGF0dXMgPSBtYXVzYl9zZW5kX2RhdGEoZGV2LCBjaGFubmVsLCAmZGF0YV90b19zZW5kKTsN CisNCisJa2ZyZWUoaGRyKTsNCisJa2ZyZWUoZGF0YV90b19zZW5kLmt2ZWMpOw0KKw0KKwlyZXR1 cm4gc3RhdHVzOw0KK30NCisNCitzdGF0aWMgaW5saW5lIGludCBfX21hdXNiX3NlbmRfaXNvY2hf b3V0X3BhY2tldChzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCQkJc3RydWN0IG1hdXNi X2V2ZW50ICpldmVudCwNCisJCQkJCQlzdHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0eCwNCisJ CQkJCQl1MzIgKnNlcV9uLA0KKwkJCQkJCXUzMiAqc3RhcnRpbmdfc2VnbWVudHMsDQorCQkJCQkJ dTMyICpyZW1fdHJhbnNmZXJfYnVmLA0KKwkJCQkJCXUzMiAqcGF5bG9hZF9zaXplLCB1MzIgaW5k ZXgpDQorew0KKwlpbnQgc3RhdHVzID0gbWF1c2JfY3JlYXRlX2FuZF9zZW5kX2lzb2NoX3RyYW5z ZmVyX3JlcShkZXYsIGV2ZW50LA0KKwkJCQkJdXJiX2N0eCwgc2VxX24sICpwYXlsb2FkX3NpemUs DQorCQkJCQkqc3RhcnRpbmdfc2VnbWVudHMsDQorCQkJCQlpbmRleCAtICpzdGFydGluZ19zZWdt ZW50cyk7DQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIklTT0NIIHRyYW5z ZmVyIHJlcXVlc3QgY3JlYXRlIGFuZCBzZW5kIGZhaWxlZCIpOw0KKwkJcmV0dXJuIHN0YXR1czsN CisJfQ0KKwkqc3RhcnRpbmdfc2VnbWVudHMgPSBpbmRleDsNCisJKnJlbV90cmFuc2Zlcl9idWYg ID0gTUFYX0lTT0NIX0FTQVBfUEFDS0VUX1NJWkU7DQorCSpwYXlsb2FkX3NpemUJICAgPSAwOw0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG1hdXNiX3NlbmRfaXNvY2hfb3V0X21zZyhzdHJ1 Y3QgbWF1c2JfZGV2aWNlICptYV9kZXYsDQorCQkJICAgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKm1h dXNiX2V2ZW50LA0KKwkJCSAgICAgc3RydWN0IG1hdXNiX3VyYl9jdHggKnVyYl9jdHgpDQorew0K Kwl1MzIgICBzdGFydGluZ19zZWdtZW50cyA9IDA7DQorCXUzMiAgIHJlbV90cmFuc2Zlcl9idWYg ID0gTUFYX0lTT0NIX0FTQVBfUEFDS0VUX1NJWkU7DQorCXN0cnVjdCB1cmIgKnVyYiA9IChzdHJ1 Y3QgdXJiICopbWF1c2JfZXZlbnQtPmRhdGEudXJiOw0KKwl1MzIgbnVtYmVyX29mX3BhY2tldHMg PSAodTMyKXVyYi0+bnVtYmVyX29mX3BhY2tldHM7DQorCXUzMiBwYXlsb2FkX3NpemUgICA9IDA7 DQorCXUzMiBjaHVua19zaXplOw0KKwl1MzIgc2VxX24JICAgPSAwOw0KKwlpbnQgc3RhdHVzOw0K Kwl1MzIgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9wYWNrZXRzOyArK2kpIHsN CisJCWlmIChpIDwgbnVtYmVyX29mX3BhY2tldHMgLSAxKQ0KKwkJCWNodW5rX3NpemUgPSB1cmIt Pmlzb19mcmFtZV9kZXNjW2kgKyAxXS5vZmZzZXQgLQ0KKwkJCQkJdXJiLT5pc29fZnJhbWVfZGVz Y1tpXS5vZmZzZXQ7DQorCQllbHNlDQorCQkJY2h1bmtfc2l6ZSA9DQorCQkJCW1hdXNiX2RhdGFf aXRlcmF0b3JfbGVuZ3RoKCZ1cmJfY3R4LT5pdGVyYXRvcikgLQ0KKwkJCQkJCXVyYi0+aXNvX2Zy YW1lX2Rlc2NbaV0ub2Zmc2V0Ow0KKw0KKwkJaWYgKGNodW5rX3NpemUgKyBNQVVTQl9JU09DSF9T VEFOREFSRF9GT1JNQVRfU0laRSA+DQorCQkgICAgcmVtX3RyYW5zZmVyX2J1Zikgew0KKwkJCWlm IChwYXlsb2FkX3NpemUgPT0gMCkgew0KKwkJCQltYXVzYl9wcl93YXJuKCJGcmFnbWVudGF0aW9u Iik7DQorCQkJfSBlbHNlIHsNCisJCQkJc3RhdHVzID0gX19tYXVzYl9zZW5kX2lzb2NoX291dF9w YWNrZXQNCisJCQkJCQkobWFfZGV2LCBtYXVzYl9ldmVudCwgdXJiX2N0eCwNCisJCQkJCQkgJnNl cV9uLCAmc3RhcnRpbmdfc2VnbWVudHMsDQorCQkJCQkJICZyZW1fdHJhbnNmZXJfYnVmLA0KKwkJ CQkJCSAmcGF5bG9hZF9zaXplLCBpKTsNCisJCQkJaWYgKHN0YXR1cyA8IDApDQorCQkJCQlyZXR1 cm4gc3RhdHVzOw0KKwkJCQlpLS07DQorCQkJCWNvbnRpbnVlOw0KKwkJCX0NCisJCX0gZWxzZSB7 DQorCQkJcmVtX3RyYW5zZmVyX2J1ZiAtPQ0KKwkJCQljaHVua19zaXplICsgTUFVU0JfSVNPQ0hf U1RBTkRBUkRfRk9STUFUX1NJWkU7DQorCQkJcGF5bG9hZF9zaXplICs9IGNodW5rX3NpemU7DQor CQl9DQorDQorCQlpZiAoaSA9PSBudW1iZXJfb2ZfcGFja2V0cyAtIDEgfHwgcmVtX3RyYW5zZmVy X2J1ZiA9PSAwKSB7DQorCQkJc3RhdHVzID0gX19tYXVzYl9zZW5kX2lzb2NoX291dF9wYWNrZXQN CisJCQkJCShtYV9kZXYsIG1hdXNiX2V2ZW50LCB1cmJfY3R4LCAmc2VxX24sDQorCQkJCQkgJnN0 YXJ0aW5nX3NlZ21lbnRzLCAmcmVtX3RyYW5zZmVyX2J1ZiwNCisJCQkJCSAmcGF5bG9hZF9zaXpl LCBpICsgMSk7DQorCQkJaWYgKHN0YXR1cyA8IDApDQorCQkJCXJldHVybiBzdGF0dXM7DQorCQl9 DQorCX0NCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYXVzYl9yZWNlaXZlX2lzb2NoX291dChz dHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJc3RydWN0IHVyYiAqdXJiID0gKHN0cnVj dCB1cmIgKilldmVudC0+ZGF0YS51cmI7DQorCWludCBzdGF0dXMgPSAwOw0KKwl1MTYgaTsNCisN CisJbWF1c2JfcHJfZGVidWcoInRyYW5zZmVyX3NpemU9JWQsIHJlbV90cmFuc2Zlcl9zaXplPSVk LCBzdGF0dXM9JWQiLA0KKwkJICAgICAgIGV2ZW50LT5kYXRhLnRyYW5zZmVyX3NpemUsIGV2ZW50 LT5kYXRhLnJlbV90cmFuc2Zlcl9zaXplLA0KKwkJICAgICAgIGV2ZW50LT5zdGF0dXMpOw0KKw0K Kwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgKytpKQ0KKwkJdXJiLT5p c29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSBldmVudC0+c3RhdHVzOw0KKw0KKwltYXVzYl9jb21w bGV0ZV9yZXF1ZXN0KHVyYiwgZXZlbnQtPmRhdGEucGF5bG9hZF9zaXplLCBldmVudC0+c3RhdHVz KTsNCisNCisJcmV0dXJuIHN0YXR1czsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1 c2JfaG9zdC9zcmMvaHBhbC9tYXVzYl9ldmVudHMuYyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qv c3JjL2hwYWwvbWF1c2JfZXZlbnRzLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAw MDAwMDAwMDAuLmJhZjZiZGYyZjQwYw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2Iv bWF1c2JfaG9zdC9zcmMvaHBhbC9tYXVzYl9ldmVudHMuYw0KQEAgLTAsMCArMSw2NTkgQEANCisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29weXJpZ2h0IChj KSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBp cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4g ZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICovDQor I2luY2x1ZGUgPGhwYWwvbWF1c2JfZXZlbnRzLmg+DQorDQorI2luY2x1ZGUgPGxpbnV4L3NsYWIu aD4NCisNCisjaW5jbHVkZSAiaGNkL2h1Yi5oIg0KKyNpbmNsdWRlICJocGFsL2RhdGFfY29tbW9u LmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisjaW5jbHVkZSAidXRpbHMvbWF1 c2JfZGF0YV9pdGVyYXRvci5oIg0KKw0KK3ZvaWQgbWF1c2JfZGV2X3Jlc2V0X3JlcV9ldmVudChz dHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJZXZlbnQtPnR5cGUgPSBNQVVTQl9FVkVO VF9UWVBFX0RFVl9SRVNFVDsNCit9DQorDQorc3RhdGljIGludCBtYXVzYl9tZ210X21zZ19yZWNl aXZlZF9ldmVudChzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50LA0KKwkJCQkJIHN0cnVjdCBtYV91 c2JfaGRyX2NvbW1vbiAqaGRyLA0KKwkJCQkJIGVudW0gbWF1c2JfY2hhbm5lbCBjaGFubmVsKQ0K K3sNCisJaW50IHN0YXR1cyA9IDA7DQorDQorCW1hdXNiX3ByX2luZm8oImNoYW5uZWw9JWQsIHR5 cGU9JWQiLCBjaGFubmVsLCBoZHItPnR5cGUpOw0KKwlpZiAoaGRyLT5sZW5ndGggPD0gTUFVU0Jf TUFYX01HTVRfU0laRSkgew0KKwkJZXZlbnQtPnR5cGUgPSBNQVVTQl9FVkVOVF9UWVBFX1JFQ0VJ VkVEX01HTVRfTVNHOw0KKwkJbWVtY3B5KGV2ZW50LT5tZ210Lm1nbXRfaGRyLmhkciwgaGRyLCBo ZHItPmxlbmd0aCk7DQorCX0gZWxzZSB7DQorCQltYXVzYl9wcl9lcnIoIk1HTVQgbWVzc2FnZSB0 byBsb25nLCBmYWlsZWQgdG8gY29weSIpOw0KKwkJc3RhdHVzID0gLUVJTlZBTDsNCisJfQ0KKw0K KwlrZnJlZShoZHIpOw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNi X2RhdGFfbXNnX3JlY2VpdmVkX2V2ZW50KHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQsDQorCQkJ CQkgc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICpoZHIsDQorCQkJCQkgZW51bSBtYXVzYl9jaGFu bmVsIGNoYW5uZWwpDQorew0KKwlldmVudC0+dHlwZQkJICA9IE1BVVNCX0VWRU5UX1RZUEVfUkVD RUlWRURfREFUQV9NU0c7DQorCWV2ZW50LT5kYXRhLnRyYW5zZmVyX3R5cGUgPSBtYXVzYl90cmFu c2Zlcl90eXBlX2Zyb21faGRyKGhkcik7DQorCWV2ZW50LT5kYXRhLmRldmljZV9pZAkgID0gKHUx NikoKGhkci0+c3NpZCA8PCA4KSB8IGhkci0+ZGV2X2FkZHIpOw0KKwlldmVudC0+ZGF0YS5lcF9o YW5kbGUJICA9IGhkci0+aGFuZGxlLmVwdjsNCisJZXZlbnQtPmRhdGEucmVjdl9idWYJICA9ICh1 NjQpaGRyOw0KKw0KKwltZW1jcHkoZXZlbnQtPmRhdGEuaGRyLCBoZHIsIE1BVVNCX1RSQU5TRkVS X0hEUl9TSVpFKTsNCisNCisJaWYgKG1hdXNiX2N0cmxfdHJhbnNmZXIoaGRyKSAmJg0KKwkgICAg aGRyLT5sZW5ndGggPD0gMiAqIE1BVVNCX1RSQU5TRkVSX0hEUl9TSVpFKSB7DQorCQltZW1jcHko ZXZlbnQtPmRhdGEuaGRyX2FjaywNCisJCSAgICAgICBzaGlmdF9wdHIoaGRyLCBNQVVTQl9UUkFO U0ZFUl9IRFJfU0laRSksDQorCQkgICAgICAgKHNpemVfdCkoaGRyLT5sZW5ndGggLSBNQVVTQl9U UkFOU0ZFUl9IRFJfU0laRSkpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50IG1hdXNiX2lzb2NoX21zZ19yZWNlaXZlZF9ldmVudChzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2 ZW50LA0KKwkJCQkJICBzdHJ1Y3QgbWFfdXNiX2hkcl9jb21tb24gKmhkciwNCisJCQkJCSAgZW51 bSBtYXVzYl9jaGFubmVsIGNoYW5uZWwpDQorew0KKwlldmVudC0+dHlwZQkJICA9IE1BVVNCX0VW RU5UX1RZUEVfUkVDRUlWRURfREFUQV9NU0c7DQorCWV2ZW50LT5kYXRhLnRyYW5zZmVyX3R5cGUg PSBtYXVzYl90cmFuc2Zlcl90eXBlX2Zyb21faGRyKGhkcik7DQorCWV2ZW50LT5kYXRhLmRldmlj ZV9pZAkgID0gKHUxNikoKGhkci0+c3NpZCA8PCA4KSB8IGhkci0+ZGV2X2FkZHIpOw0KKwlldmVu dC0+ZGF0YS5lcF9oYW5kbGUJICA9IGhkci0+aGFuZGxlLmVwdjsNCisJZXZlbnQtPmRhdGEucmVj dl9idWYJICA9ICh1NjQpaGRyOw0KKw0KKwltZW1jcHkoZXZlbnQtPmRhdGEuaGRyLCBoZHIsIE1B VVNCX1RSQU5TRkVSX0hEUl9TSVpFKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYXVz Yl9tc2dfcmVjZWl2ZWRfZXZlbnQoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwNCisJCQkgICAg IHN0cnVjdCBtYV91c2JfaGRyX2NvbW1vbiAqaGRyLA0KKwkJCSAgICAgZW51bSBtYXVzYl9jaGFu bmVsIGNoYW5uZWwpDQorew0KKwltYXVzYl9wcl9kZWJ1ZygiY2hhbm5lbD0lZCwgdHlwZT0lZCIs IGNoYW5uZWwsIGhkci0+dHlwZSk7DQorCWlmIChtYXVzYl9pc19tYW5hZ2VtZW50X2hkcl90eXBl KGhkci0+dHlwZSkpDQorCQlyZXR1cm4gbWF1c2JfbWdtdF9tc2dfcmVjZWl2ZWRfZXZlbnQoZXZl bnQsIGhkciwgY2hhbm5lbCk7DQorCWVsc2UgaWYgKGhkci0+dHlwZSA9PSBNQV9VU0JfSERSX1RZ UEVfREFUQV9SRVNQKFRSQU5TRkVSKSkNCisJCXJldHVybiBtYXVzYl9kYXRhX21zZ19yZWNlaXZl ZF9ldmVudChldmVudCwgaGRyLCBjaGFubmVsKTsNCisJZWxzZSBpZiAoaGRyLT50eXBlID09IE1B X1VTQl9IRFJfVFlQRV9EQVRBX1JFU1AoSVNPQ0hUUkFOU0ZFUikpDQorCQlyZXR1cm4gbWF1c2Jf aXNvY2hfbXNnX3JlY2VpdmVkX2V2ZW50KGV2ZW50LCBoZHIsIGNoYW5uZWwpOw0KKw0KKwlrZnJl ZShoZHIpOw0KKwltYXVzYl9wcl93YXJuKCJVbmtub3duIGV2ZW50IHR5cGUgZXZlbnQ9JWQiLCBo ZHItPnR5cGUpOw0KKwlyZXR1cm4gLUVCQURSOw0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9w cmVwYXJlX2NvbXBsZXRpb24oc3RydWN0IG1hdXNiX2NvbXBsZXRpb24gKm1hdXNiX2NvbXBsZXRp b24sDQorCQkJCSAgICAgc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRpb24sDQorCQkJCSAgICAg c3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCwgdTY0IGV2ZW50X2lkKQ0KK3sNCisJaW5pdF9jb21w bGV0aW9uKGNvbXBsZXRpb24pOw0KKw0KKwltYXVzYl9jb21wbGV0aW9uLT5jb21wbGV0aW9uX2V2 ZW50ID0gY29tcGxldGlvbjsNCisJbWF1c2JfY29tcGxldGlvbi0+ZXZlbnRfaWQJICAgPSBldmVu dF9pZDsNCisJbWF1c2JfY29tcGxldGlvbi0+bWF1c2JfZXZlbnQJICAgPSBldmVudDsNCit9DQor DQorc3RhdGljIGludCBtYXVzYl93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBtYXVzYl9ldmVu dCAqZXZlbnQsIHU2NCBldmVudF9pZCwNCisJCQkJICAgICBzdHJ1Y3QgbWF1c2JfZGV2aWNlICpk ZXYpDQorew0KKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOw0KKwlzdHJ1Y3QgbWF1c2Jf Y29tcGxldGlvbiBtYXVzYl9jb21wbGV0aW9uOw0KKwlsb25nIHN0YXR1czsNCisJdW5zaWduZWQg bG9uZyB0aW1lb3V0Ow0KKw0KKwltYXVzYl9wcmVwYXJlX2NvbXBsZXRpb24oJm1hdXNiX2NvbXBs ZXRpb24sICZjb21wbGV0aW9uLCBldmVudCwNCisJCQkJIGV2ZW50X2lkKTsNCisJbWF1c2JfaW5z ZXJ0X2V2ZW50KGRldiwgJm1hdXNiX2NvbXBsZXRpb24pOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9l bnF1ZXVlX2V2ZW50X3RvX3VzZXIoZGV2LCBldmVudCk7DQorCWlmIChzdGF0dXMgPCAwKSB7DQor CQltYXVzYl9yZW1vdmVfZXZlbnQoZGV2LCAmbWF1c2JfY29tcGxldGlvbik7DQorCQltYXVzYl9w cl9lcnIoIlJpbmcgYnVmZmVyIGZ1bGwsIGV2ZW50X2lkPSVsbGQiLCBldmVudF9pZCk7DQorCQly ZXR1cm4gKGludClzdGF0dXM7DQorCX0NCisNCisJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMo TUFOQUdFTUVOVF9FVkVOVF9USU1FT1VUKTsNCisJc3RhdHVzID0gd2FpdF9mb3JfY29tcGxldGlv bl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmNvbXBsZXRpb24sDQorCQkJCQkJCSAgIHRpbWVvdXQp Ow0KKw0KKwltYXVzYl9yZW1vdmVfZXZlbnQoZGV2LCAmbWF1c2JfY29tcGxldGlvbik7DQorDQor CWlmIChzdGF0dXMgPT0gMCkgew0KKwkJcXVldWVfd29yayhkZXYtPndvcmtxLCAmZGV2LT5zb2Nr ZXRfZGlzY29ubmVjdF93b3JrKTsNCisJCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+aGNk X2Rpc2Nvbm5lY3Rfd29yayk7DQorCQlyZXR1cm4gLUVUSU1FRE9VVDsNCisJfQ0KKw0KKwlyZXR1 cm4gMDsNCit9DQorDQoraW50IG1hdXNiX3VzYmRldmhhbmRsZV9ldmVudF90b191c2VyKHN0cnVj dCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgICB1OCBkZXZpY2Vfc3BlZWQsDQorCQkJCSAg ICAgdTMyIHJvdXRlX3N0cmluZywNCisJCQkJICAgICB1MTYgaHViX2Rldl9oYW5kbGUsDQorCQkJ CSAgICAgdTE2IHBhcmVudF9oc19odWJfZGV2X2hhbmRsZSwNCisJCQkJICAgICB1MTYgcGFyZW50 X2hzX2h1Yl9wb3J0LCB1MTYgbXR0LA0KKwkJCQkgICAgIHU4IGxzZSwgczMyICp1c2JfZGV2X2hh bmRsZSkNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50IHN0YXR1czsNCisJ dTY0IGV2ZW50X2lkID0gbWF1c2JfZXZlbnRfaWQoZGV2KTsNCisNCisJZXZlbnQudHlwZSA9IE1B VVNCX0VWRU5UX1RZUEVfVVNCX0RFVl9IQU5ETEU7DQorCWV2ZW50Lm1nbXQuZGV2X2hhbmRsZS5k ZXZpY2Vfc3BlZWQJID0gZGV2aWNlX3NwZWVkOw0KKwlldmVudC5tZ210LmRldl9oYW5kbGUucm91 dGVfc3RyaW5nCSA9IHJvdXRlX3N0cmluZzsNCisJZXZlbnQubWdtdC5kZXZfaGFuZGxlLmh1Yl9k ZXZfaGFuZGxlCSA9IGh1Yl9kZXZfaGFuZGxlOw0KKwlldmVudC5tZ210LmRldl9oYW5kbGUucGFy ZW50X2hzX2h1Yl9wb3J0ID0gcGFyZW50X2hzX2h1Yl9wb3J0Ow0KKwlldmVudC5tZ210LmRldl9o YW5kbGUubXR0CQkgPSBtdHQ7DQorCWV2ZW50Lm1nbXQuZGV2X2hhbmRsZS5sc2UJCSA9IGxzZTsN CisJZXZlbnQubWdtdC5kZXZfaGFuZGxlLmV2ZW50X2lkCQkgPSBldmVudF9pZDsNCisJZXZlbnQu bWFkZXZfYWRkcgkJCSA9IGRldi0+bWFkZXZfYWRkcjsNCisJZXZlbnQubWdtdC5kZXZfaGFuZGxl LnBhcmVudF9oc19odWJfZGV2X2hhbmRsZSA9DQorCQkJCQkJICAgcGFyZW50X2hzX2h1Yl9kZXZf aGFuZGxlOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl93YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCwg ZXZlbnRfaWQsIGRldik7DQorDQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIo IlVzYmRldmhhbmRsZSBmYWlsZWQsIGV2ZW50X2lkPSVsbGQiLCBldmVudF9pZCk7DQorCQlyZXR1 cm4gc3RhdHVzOw0KKwl9DQorDQorCWlmIChldmVudC5zdGF0dXMgPCAwKQ0KKwkJcmV0dXJuIGV2 ZW50LnN0YXR1czsNCisNCisJKnVzYl9kZXZfaGFuZGxlID0gZXZlbnQubWdtdC5kZXZfaGFuZGxl LmRldl9oYW5kbGU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbWF1c2JfdXNiZGV2aGFu ZGxlX2V2ZW50X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgICAg ICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJcmV0dXJuIG1hdXNiX3NpZ25hbF9l dmVudChkZXYsIGV2ZW50LCBldmVudC0+bWdtdC5kZXZfaGFuZGxlLmV2ZW50X2lkKTsNCit9DQor DQorc3RhdGljIHZvaWQgbWF1c2JfcG9wdWxhdGVfc3RhbmRhcmRfZXBfZGVzY3JpcHRvcihzdHJ1 Y3QgdXNiX2VwX2Rlc2MgKnN0ZF9kZXNjLA0KKwkJCQkJCSAgc3RydWN0IHVzYl9lbmRwb2ludF9k ZXNjcmlwdG9yDQorCQkJCQkJICAqdXNiX3N0ZF9kZXNjKQ0KK3sNCisJc3RkX2Rlc2MtPmJMZW5n dGgJICAgPSB1c2Jfc3RkX2Rlc2MtPmJMZW5ndGg7DQorCXN0ZF9kZXNjLT5iRGVzY3JpcHRvclR5 cGUgID0gdXNiX3N0ZF9kZXNjLT5iRGVzY3JpcHRvclR5cGU7DQorCXN0ZF9kZXNjLT5iRW5kcG9p bnRBZGRyZXNzID0gdXNiX3N0ZF9kZXNjLT5iRW5kcG9pbnRBZGRyZXNzOw0KKwlzdGRfZGVzYy0+ Ym1BdHRyaWJ1dGVzCSAgID0gdXNiX3N0ZF9kZXNjLT5ibUF0dHJpYnV0ZXM7DQorCXN0ZF9kZXNj LT53TWF4UGFja2V0U2l6ZSAgID0gdXNiX3N0ZF9kZXNjLT53TWF4UGFja2V0U2l6ZTsNCisJc3Rk X2Rlc2MtPmJJbnRlcnZhbAkgICA9IHVzYl9zdGRfZGVzYy0+YkludGVydmFsOw0KK30NCisNCitz dGF0aWMgdm9pZA0KK21hdXNiX3BvcHVsYXRlX3N1cGVyc3BlZWRfZXBfZGVzY3JpcHRvcihzdHJ1 Y3QgdXNiX3NzX2VwX2NvbXBfZGVzYyAqc3NfZGVzYywNCisJCQkJCXN0cnVjdCB1c2Jfc3NfZXBf Y29tcF9kZXNjcmlwdG9yKg0KKwkJCQkJdXNiX3NzX2Rlc2MpDQorew0KKwlzc19kZXNjLT5iTGVu Z3RoCSAgID0gdXNiX3NzX2Rlc2MtPmJMZW5ndGg7DQorCXNzX2Rlc2MtPmJEZXNjcmlwdG9yVHlw ZSAgID0gdXNiX3NzX2Rlc2MtPmJEZXNjcmlwdG9yVHlwZTsNCisJc3NfZGVzYy0+Yk1heEJ1cnN0 CSAgID0gdXNiX3NzX2Rlc2MtPmJNYXhCdXJzdDsNCisJc3NfZGVzYy0+Ym1BdHRyaWJ1dGVzCSAg ID0gdXNiX3NzX2Rlc2MtPmJtQXR0cmlidXRlczsNCisJc3NfZGVzYy0+d0J5dGVzUGVySW50ZXJ2 YWwgPSB1c2Jfc3NfZGVzYy0+d0J5dGVzUGVySW50ZXJ2YWw7DQorfQ0KKw0KK3ZvaWQNCittYXVz Yl9pbml0X3N0YW5kYXJkX2VwX2Rlc2NyaXB0b3Ioc3RydWN0IG1hX3VzYl9lcGhhbmRsZXJlcV9k ZXNjX3N0ZCAqc3RkX2Rlc2MsDQorCQkJCSAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9y ICp1c2Jfc3RkX2Rlc2MpDQorew0KKwltYXVzYl9wb3B1bGF0ZV9zdGFuZGFyZF9lcF9kZXNjcmlw dG9yKCZzdGRfZGVzYy0+dXNiMjAsIHVzYl9zdGRfZGVzYyk7DQorfQ0KKw0KK3ZvaWQNCittYXVz Yl9pbml0X3N1cGVyc3BlZWRfZXBfZGVzY3JpcHRvcihzdHJ1Y3QgbWFfdXNiX2VwaGFuZGxlcmVx X2Rlc2Nfc3MgKnNzX2Rlc2MsDQorCQkJCSAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0 b3IgKg0KKwkJCQkgICAgdXNiX3N0ZF9kZXNjLA0KKwkJCQkgICAgc3RydWN0IHVzYl9zc19lcF9j b21wX2Rlc2NyaXB0b3IgKg0KKwkJCQkgICAgdXNiX3NzX2Rlc2MpDQorew0KKwltYXVzYl9wb3B1 bGF0ZV9zdGFuZGFyZF9lcF9kZXNjcmlwdG9yKCZzc19kZXNjLT51c2IyMCwgdXNiX3N0ZF9kZXNj KTsNCisJbWF1c2JfcG9wdWxhdGVfc3VwZXJzcGVlZF9lcF9kZXNjcmlwdG9yKCZzc19kZXNjLT51 c2IzMSwgdXNiX3NzX2Rlc2MpOw0KK30NCisNCitpbnQgbWF1c2JfZXBoYW5kbGVfZXZlbnRfdG9f dXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSB1MTYgZGV2aWNlX2hhbmRsZSwN CisJCQkJIHUxNiBkZXNjcmlwdG9yX3NpemUsIHZvaWQgKmRlc2NyaXB0b3IsDQorCQkJCSB1MTYg KmVwX2hhbmRsZSkNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50ICBzdGF0 dXM7DQorCXU2NCBldmVudF9pZCA9IG1hdXNiX2V2ZW50X2lkKGRldik7DQorDQorCWV2ZW50LnR5 cGUJCQkgICAgID0gTUFVU0JfRVZFTlRfVFlQRV9FUF9IQU5ETEU7DQorCWV2ZW50Lm1nbXQuZXBf aGFuZGxlLmRldmljZV9oYW5kbGUgICA9IGRldmljZV9oYW5kbGU7DQorCWV2ZW50Lm1nbXQuZXBf aGFuZGxlLmRlc2NyaXB0b3Jfc2l6ZSA9IGRlc2NyaXB0b3Jfc2l6ZTsNCisJZXZlbnQubWdtdC5l cF9oYW5kbGUuZXZlbnRfaWQJICAgICA9IGV2ZW50X2lkOw0KKwlldmVudC5tYWRldl9hZGRyCQkg ICAgID0gZGV2LT5tYWRldl9hZGRyOw0KKw0KKwltZW1jcHkoZXZlbnQubWdtdC5lcF9oYW5kbGUu ZGVzY3JpcHRvciwgZGVzY3JpcHRvciwgZGVzY3JpcHRvcl9zaXplKTsNCisNCisJc3RhdHVzID0g bWF1c2Jfd2FpdF9mb3JfY29tcGxldGlvbigmZXZlbnQsIGV2ZW50X2lkLCBkZXYpOw0KKw0KKwlp ZiAoc3RhdHVzIDwgMCkgew0KKwkJbWF1c2JfcHJfZXJyKCJFcGhhbmRsZSBmYWlsZWQsIGV2ZW50 X2lkPSVsbGQiLCBldmVudF9pZCk7DQorCQlyZXR1cm4gc3RhdHVzOw0KKwl9DQorDQorCWlmIChl dmVudC5zdGF0dXMgPCAwKQ0KKwkJcmV0dXJuIGV2ZW50LnN0YXR1czsNCisNCisJKmVwX2hhbmRs ZSA9IGV2ZW50Lm1nbXQuZXBfaGFuZGxlLmVwX2hhbmRsZTsNCisNCisJcmV0dXJuIDA7DQorfQ0K Kw0KK2ludCBtYXVzYl9lcGhhbmRsZV9ldmVudF9mcm9tX3VzZXIoc3RydWN0IG1hdXNiX2Rldmlj ZSAqZGV2LA0KKwkJCQkgICBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJcmV0dXJu IG1hdXNiX3NpZ25hbF9ldmVudChkZXYsIGV2ZW50LCBldmVudC0+bWdtdC5lcF9oYW5kbGUuZXZl bnRfaWQpOw0KK30NCisNCitpbnQgbWF1c2JfZXBhY3RpdmF0ZV9ldmVudF90b191c2VyKHN0cnVj dCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgdTE2IGRldmljZV9oYW5kbGUsIHUxNiBlcF9o YW5kbGUpDQorew0KKwlzdHJ1Y3QgbWF1c2JfZXZlbnQgZXZlbnQ7DQorCWludCAgc3RhdHVzOw0K Kwl1NjQgZXZlbnRfaWQgPSBtYXVzYl9ldmVudF9pZChkZXYpOw0KKw0KKwlldmVudC50eXBlID0g TUFVU0JfRVZFTlRfVFlQRV9FUF9IQU5ETEVfQUNUSVZBVEU7DQorCWV2ZW50Lm1nbXQuZXBfYWN0 aXZhdGUuZGV2aWNlX2hhbmRsZSA9IGRldmljZV9oYW5kbGU7DQorCWV2ZW50Lm1nbXQuZXBfYWN0 aXZhdGUuZXBfaGFuZGxlICAgICA9IGVwX2hhbmRsZTsNCisJZXZlbnQubWdtdC5lcF9hY3RpdmF0 ZS5ldmVudF9pZAkgICAgID0gZXZlbnRfaWQ7DQorCWV2ZW50Lm1hZGV2X2FkZHIJCSAgICAgPSBk ZXYtPm1hZGV2X2FkZHI7DQorDQorCXN0YXR1cyA9IG1hdXNiX3dhaXRfZm9yX2NvbXBsZXRpb24o JmV2ZW50LCBldmVudF9pZCwgZGV2KTsNCisNCisJaWYgKHN0YXR1cyA8IDApIHsNCisJCW1hdXNi X3ByX2VycigiRXBhY3RpdmF0ZSBmYWlsZWQsIGV2ZW50X2lkPSVsbGQiLCBldmVudF9pZCk7DQor CQlyZXR1cm4gc3RhdHVzOw0KKwl9DQorDQorCXJldHVybiBldmVudC5zdGF0dXM7DQorfQ0KKw0K K2ludCBtYXVzYl9lcGFjdGl2YXRlX2V2ZW50X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNl ICpkZXYsDQorCQkJCSAgICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCXJldHVy biBtYXVzYl9zaWduYWxfZXZlbnQoZGV2LCBldmVudCwNCisJCWV2ZW50LT5tZ210LmVwX2FjdGl2 YXRlLmV2ZW50X2lkKTsNCit9DQorDQoraW50IG1hdXNiX2VwaW5hY3RpdmF0ZV9ldmVudF90b191 c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgICB1MTYgZGV2aWNlX2hhbmRs ZSwgdTE2IGVwX2hhbmRsZSkNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50 ICBzdGF0dXM7DQorCXU2NCBldmVudF9pZCA9IG1hdXNiX2V2ZW50X2lkKGRldik7DQorDQorCWV2 ZW50LnR5cGUgPSBNQVVTQl9FVkVOVF9UWVBFX0VQX0hBTkRMRV9JTkFDVElWQVRFOw0KKwlldmVu dC5tZ210LmVwX2luYWN0aXZhdGUuZGV2aWNlX2hhbmRsZQk9IGRldmljZV9oYW5kbGU7DQorCWV2 ZW50Lm1nbXQuZXBfaW5hY3RpdmF0ZS5lcF9oYW5kbGUJPSBlcF9oYW5kbGU7DQorCWV2ZW50Lm1n bXQuZXBfaW5hY3RpdmF0ZS5ldmVudF9pZAk9IGV2ZW50X2lkOw0KKwlldmVudC5tYWRldl9hZGRy CQkJPSBkZXYtPm1hZGV2X2FkZHI7DQorDQorCXN0YXR1cyA9IG1hdXNiX3dhaXRfZm9yX2NvbXBs ZXRpb24oJmV2ZW50LCBldmVudF9pZCwgZGV2KTsNCisNCisJaWYgKHN0YXR1cyA8IDApIHsNCisJ CW1hdXNiX3ByX2VycigiRXBpbmFjdGl2YXRlIGZhaWxlZCwgZXZlbnRfaWQ9JWxsZCIsIGV2ZW50 X2lkKTsNCisJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJcmV0dXJuIGV2ZW50LnN0YXR1czsN Cit9DQorDQoraW50IG1hdXNiX2VwaW5hY3RpdmF0ZV9ldmVudF9mcm9tX3VzZXIoc3RydWN0IG1h dXNiX2RldmljZSAqZGV2LA0KKwkJCQkgICAgICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkN Cit7DQorCXJldHVybiBtYXVzYl9zaWduYWxfZXZlbnQoZGV2LCBldmVudCwNCisJCQkJICBldmVu dC0+bWdtdC5lcF9pbmFjdGl2YXRlLmV2ZW50X2lkKTsNCit9DQorDQoraW50IG1hdXNiX2VwcmVz ZXRfZXZlbnRfdG9fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCXUxNiBkZXZp Y2VfaGFuZGxlLCB1MTYgZXBfaGFuZGxlLA0KKwkJCQl1OCB0c3BfZmxhZykNCit7DQorCXN0cnVj dCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50ICBzdGF0dXM7DQorCXU2NCBldmVudF9pZCA9IG1h dXNiX2V2ZW50X2lkKGRldik7DQorDQorCWV2ZW50LnR5cGUJCQkgID0gTUFVU0JfRVZFTlRfVFlQ RV9FUF9IQU5ETEVfUkVTRVQ7DQorCWV2ZW50Lm1nbXQuZXBfcmVzZXQuZGV2aWNlX2hhbmRsZSA9 IGRldmljZV9oYW5kbGU7DQorCWV2ZW50Lm1nbXQuZXBfcmVzZXQuZXBfaGFuZGxlCSAgPSBlcF9o YW5kbGU7DQorCWV2ZW50Lm1nbXQuZXBfcmVzZXQudHNwCQkgID0gdHNwX2ZsYWc7DQorCWV2ZW50 Lm1nbXQuZXBfcmVzZXQuZXZlbnRfaWQJICA9IGV2ZW50X2lkOw0KKwlldmVudC5tYWRldl9hZGRy CQkgID0gZGV2LT5tYWRldl9hZGRyOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl93YWl0X2Zvcl9jb21w bGV0aW9uKCZldmVudCwgZXZlbnRfaWQsIGRldik7DQorDQorCWlmIChzdGF0dXMgPCAwKSB7DQor CQltYXVzYl9wcl9lcnIoIkVwcmVzZXQgZmFpbGVkLCBldmVudF9pZD0lbGxkIiwgZXZlbnRfaWQp Ow0KKwkJcmV0dXJuIHN0YXR1czsNCisJfQ0KKw0KKwlyZXR1cm4gZXZlbnQuc3RhdHVzOw0KK30N CisNCitpbnQgbWF1c2JfZXByZXNldF9ldmVudF9mcm9tX3VzZXIoc3RydWN0IG1hdXNiX2Rldmlj ZSAqZGV2LA0KKwkJCQkgIHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQpDQorew0KKwlyZXR1cm4g bWF1c2Jfc2lnbmFsX2V2ZW50KGRldiwgZXZlbnQsIGV2ZW50LT5tZ210LmVwX3Jlc2V0LmV2ZW50 X2lkKTsNCit9DQorDQoraW50IG1hdXNiX2VwZGVsZXRlX2V2ZW50X3RvX3VzZXIoc3RydWN0IG1h dXNiX2RldmljZSAqZGV2LA0KKwkJCQkgdTE2IGRldmljZV9oYW5kbGUsIHUxNiBlcF9oYW5kbGUp DQorew0KKwlzdHJ1Y3QgbWF1c2JfZXZlbnQgZXZlbnQ7DQorCWludCAgc3RhdHVzOw0KKwl1NjQg ZXZlbnRfaWQgPSBtYXVzYl9ldmVudF9pZChkZXYpOw0KKw0KKwlldmVudC50eXBlCQkJICAgPSBN QVVTQl9FVkVOVF9UWVBFX0VQX0hBTkRMRV9ERUxFVEU7DQorCWV2ZW50Lm1nbXQuZXBfZGVsZXRl LmRldmljZV9oYW5kbGUgPSBkZXZpY2VfaGFuZGxlOw0KKwlldmVudC5tZ210LmVwX2RlbGV0ZS5l cF9oYW5kbGUJICAgPSBlcF9oYW5kbGU7DQorCWV2ZW50Lm1nbXQuZXBfZGVsZXRlLmV2ZW50X2lk CSAgID0gZXZlbnRfaWQ7DQorCWV2ZW50Lm1hZGV2X2FkZHIJCSAgID0gZGV2LT5tYWRldl9hZGRy Ow0KKw0KKwlzdGF0dXMgPSBtYXVzYl93YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCwgZXZlbnRf aWQsIGRldik7DQorDQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIkVwZGVs ZXRlIGZhaWxlZCwgZXZlbnRfaWQ9JWxsZCIsIGV2ZW50X2lkKTsNCisJCXJldHVybiBzdGF0dXM7 DQorCX0NCisNCisJcmV0dXJuIGV2ZW50LnN0YXR1czsNCit9DQorDQoraW50IG1hdXNiX2VwZGVs ZXRlX2V2ZW50X2Zyb21fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgIHN0 cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQpDQorew0KKwlyZXR1cm4gbWF1c2Jfc2lnbmFsX2V2ZW50 KGRldiwgZXZlbnQsIGV2ZW50LT5tZ210LmVwX2RlbGV0ZS5ldmVudF9pZCk7DQorfQ0KKw0KK2lu dCBtYXVzYl9tb2RpZnllcDBfZXZlbnRfdG9fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYs DQorCQkJCSAgdTE2IGRldmljZV9oYW5kbGUsIHUxNiAqZXBfaGFuZGxlLA0KKwkJCQkgIF9fbGUx NiBtYXhfcGFja2V0X3NpemUpDQorew0KKwlzdHJ1Y3QgbWF1c2JfZXZlbnQgZXZlbnQ7DQorCWlu dCAgc3RhdHVzOw0KKwl1NjQgZXZlbnRfaWQgPSBtYXVzYl9ldmVudF9pZChkZXYpOw0KKw0KKwll dmVudC50eXBlCQkJCT0gTUFVU0JfRVZFTlRfVFlQRV9NT0RJRllfRVAwOw0KKwlldmVudC5tZ210 Lm1vZGlmeV9lcDAuZGV2aWNlX2hhbmRsZQk9IGRldmljZV9oYW5kbGU7DQorCWV2ZW50Lm1nbXQu bW9kaWZ5X2VwMC5lcF9oYW5kbGUJCT0gKmVwX2hhbmRsZTsNCisJZXZlbnQubWdtdC5tb2RpZnlf ZXAwLm1heF9wYWNrZXRfc2l6ZQk9IG1heF9wYWNrZXRfc2l6ZTsNCisJZXZlbnQubWdtdC5tb2Rp ZnlfZXAwLmV2ZW50X2lkCQk9IGV2ZW50X2lkOw0KKwlldmVudC5tYWRldl9hZGRyCQkJPSBkZXYt Pm1hZGV2X2FkZHI7DQorDQorCXN0YXR1cyA9IG1hdXNiX3dhaXRfZm9yX2NvbXBsZXRpb24oJmV2 ZW50LCBldmVudF9pZCwgZGV2KTsNCisNCisJaWYgKHN0YXR1cyA8IDApIHsNCisJCW1hdXNiX3By X2VycigiTW9kaWZ5ZXAwIGZhaWxlZCwgZXZlbnRfaWQ9JWxsZCIsIGV2ZW50X2lkKTsNCisJCXJl dHVybiBzdGF0dXM7DQorCX0NCisNCisJaWYgKGV2ZW50LnN0YXR1cyA8IDApDQorCQlyZXR1cm4g ZXZlbnQuc3RhdHVzOw0KKw0KKwkqZXBfaGFuZGxlID0gZXZlbnQubWdtdC5tb2RpZnlfZXAwLmVw X2hhbmRsZTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtYXVzYl9tb2RpZnllcDBfZXZl bnRfZnJvbV91c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICAgIHN0cnVjdCBt YXVzYl9ldmVudCAqZXZlbnQpDQorew0KKwlyZXR1cm4gbWF1c2Jfc2lnbmFsX2V2ZW50KGRldiwg ZXZlbnQsIGV2ZW50LT5tZ210Lm1vZGlmeV9lcDAuZXZlbnRfaWQpOw0KK30NCisNCitpbnQgbWF1 c2Jfc2V0dXNiZGV2YWRkcmVzc19ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRl diwNCisJCQkJCSB1MTYgZGV2aWNlX2hhbmRsZSwNCisJCQkJCSB1MTYgcmVzcG9uc2VfdGltZW91 dCkNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50ICBzdGF0dXM7DQorCXU2 NCBldmVudF9pZCA9IG1hdXNiX2V2ZW50X2lkKGRldik7DQorDQorCWV2ZW50LnR5cGUgPSBNQVVT Ql9FVkVOVF9UWVBFX1NFVF9VU0JfREVWX0FERFJFU1M7DQorCWV2ZW50Lm1nbXQuc2V0X3VzYl9k ZXZfYWRkcmVzcy5kZXZpY2VfaGFuZGxlCT0gZGV2aWNlX2hhbmRsZTsNCisJZXZlbnQubWdtdC5z ZXRfdXNiX2Rldl9hZGRyZXNzLnJlc3BvbnNlX3RpbWVvdXQJPSByZXNwb25zZV90aW1lb3V0Ow0K KwlldmVudC5tZ210LnNldF91c2JfZGV2X2FkZHJlc3MuZXZlbnRfaWQJCT0gZXZlbnRfaWQ7DQor CWV2ZW50Lm1hZGV2X2FkZHIJCQkJPSBkZXYtPm1hZGV2X2FkZHI7DQorDQorCXN0YXR1cyA9IG1h dXNiX3dhaXRfZm9yX2NvbXBsZXRpb24oJmV2ZW50LCBldmVudF9pZCwgZGV2KTsNCisNCisJaWYg KHN0YXR1cyA8IDApIHsNCisJCW1hdXNiX3ByX2VycigiU2V0dXNiZGV2YWRkcmVzcyBmYWlsZWQs IGV2ZW50X2lkPSVsbGQiLA0KKwkJCSAgICAgZXZlbnRfaWQpOw0KKwkJcmV0dXJuIHN0YXR1czsN CisJfQ0KKw0KKwlyZXR1cm4gZXZlbnQuc3RhdHVzOw0KK30NCisNCitpbnQgbWF1c2Jfc2V0dXNi ZGV2YWRkcmVzc19ldmVudF9mcm9tX3VzZXIoc3RydWN0IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJ CQkJICAgc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCXJldHVybiBtYXVzYl9zaWdu YWxfZXZlbnQoZGV2LCBldmVudCwNCisJCWV2ZW50LT5tZ210LnNldF91c2JfZGV2X2FkZHJlc3Mu ZXZlbnRfaWQpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK21hdXNiX2luaXRfZGV2aWNlX2Rlc2Ny aXB0b3Ioc3RydWN0IG1hX3VzYl91cGRhdGVkZXZyZXFfZGVzYyAqdXBkYXRlX2Rlc2NyaXB0b3Is DQorCQkJICAgICBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yICpkZXZpY2VfZGVzY3JpcHRv cikNCit7DQorCXVwZGF0ZV9kZXNjcmlwdG9yLT51c2IyMC5iTGVuZ3RoID0gZGV2aWNlX2Rlc2Ny aXB0b3ItPmJMZW5ndGg7DQorCXVwZGF0ZV9kZXNjcmlwdG9yLT51c2IyMC5iRGVzY3JpcHRvclR5 cGUgPQ0KKwkJCQkJZGV2aWNlX2Rlc2NyaXB0b3ItPmJEZXNjcmlwdG9yVHlwZTsNCisJdXBkYXRl X2Rlc2NyaXB0b3ItPnVzYjIwLmJjZFVTQiA9IGRldmljZV9kZXNjcmlwdG9yLT5iY2RVU0I7DQor CXVwZGF0ZV9kZXNjcmlwdG9yLT51c2IyMC5iRGV2aWNlQ2xhc3MgPQ0KKwkJCQkJZGV2aWNlX2Rl c2NyaXB0b3ItPmJEZXZpY2VDbGFzczsNCisJdXBkYXRlX2Rlc2NyaXB0b3ItPnVzYjIwLmJEZXZp Y2VTdWJDbGFzcyA9DQorCQkJCQlkZXZpY2VfZGVzY3JpcHRvci0+YkRldmljZVN1YkNsYXNzOw0K Kwl1cGRhdGVfZGVzY3JpcHRvci0+dXNiMjAuYkRldmljZVByb3RvY29sID0NCisJCQkJCWRldmlj ZV9kZXNjcmlwdG9yLT5iRGV2aWNlUHJvdG9jb2w7DQorCXVwZGF0ZV9kZXNjcmlwdG9yLT51c2Iy MC5iTWF4UGFja2V0U2l6ZTAgPQ0KKwkJCQkJZGV2aWNlX2Rlc2NyaXB0b3ItPmJNYXhQYWNrZXRT aXplMDsNCisJdXBkYXRlX2Rlc2NyaXB0b3ItPnVzYjIwLmlkVmVuZG9yICA9IGRldmljZV9kZXNj cmlwdG9yLT5pZFZlbmRvcjsNCisJdXBkYXRlX2Rlc2NyaXB0b3ItPnVzYjIwLmlkUHJvZHVjdCA9 IGRldmljZV9kZXNjcmlwdG9yLT5pZFByb2R1Y3Q7DQorCXVwZGF0ZV9kZXNjcmlwdG9yLT51c2Iy MC5iY2REZXZpY2UgPSBkZXZpY2VfZGVzY3JpcHRvci0+YmNkRGV2aWNlOw0KKwl1cGRhdGVfZGVz Y3JpcHRvci0+dXNiMjAuaU1hbnVmYWN0dXJlciA9DQorCQkJCQlkZXZpY2VfZGVzY3JpcHRvci0+ aU1hbnVmYWN0dXJlcjsNCisJdXBkYXRlX2Rlc2NyaXB0b3ItPnVzYjIwLmlQcm9kdWN0ICA9IGRl dmljZV9kZXNjcmlwdG9yLT5pUHJvZHVjdDsNCisJdXBkYXRlX2Rlc2NyaXB0b3ItPnVzYjIwLmlT ZXJpYWxOdW1iZXIgPQ0KKwkJCQkJZGV2aWNlX2Rlc2NyaXB0b3ItPmlTZXJpYWxOdW1iZXI7DQor CXVwZGF0ZV9kZXNjcmlwdG9yLT51c2IyMC5iTnVtQ29uZmlndXJhdGlvbnMgPQ0KKwkJCQkJZGV2 aWNlX2Rlc2NyaXB0b3ItPmJOdW1Db25maWd1cmF0aW9uczsNCit9DQorDQoraW50IG1hdXNiX3Vw ZGF0ZWRldl9ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJCQkJICB1 MTYgZGV2aWNlX2hhbmRsZSwNCisJCQkJICB1MTYgbWF4X2V4aXRfbGF0ZW5jeSwgdTggaHViLA0K KwkJCQkgIHU4IG51bWJlcl9vZl9wb3J0cywgdTggbXR0LA0KKwkJCQkgIHU4IHR0dCwgdTggaW50 ZWdyYXRlZF9odWJfbGF0ZW5jeSwNCisJCQkJICBzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9y ICpkZXZfZGVzY3JpcHRvcikNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50 IHN0YXR1czsNCisJdTY0IGV2ZW50X2lkID0gbWF1c2JfZXZlbnRfaWQoZGV2KTsNCisNCisJZXZl bnQudHlwZSA9IE1BVVNCX0VWRU5UX1RZUEVfVVBEQVRFX0RFVjsNCisJZXZlbnQubWdtdC51cGRh dGVfZGV2LmRldmljZV9oYW5kbGUJICAgICA9IGRldmljZV9oYW5kbGU7DQorCWV2ZW50Lm1nbXQu dXBkYXRlX2Rldi5tYXhfZXhpdF9sYXRlbmN5CSAgICAgPSBtYXhfZXhpdF9sYXRlbmN5Ow0KKwll dmVudC5tZ210LnVwZGF0ZV9kZXYuaHViCQkgICAgID0gaHViOw0KKwlldmVudC5tZ210LnVwZGF0 ZV9kZXYubnVtYmVyX29mX3BvcnRzCSAgICAgPSBudW1iZXJfb2ZfcG9ydHM7DQorCWV2ZW50Lm1n bXQudXBkYXRlX2Rldi5tdHQJCSAgICAgPSBtdHQ7DQorCWV2ZW50Lm1nbXQudXBkYXRlX2Rldi50 dHQJCSAgICAgPSB0dHQ7DQorCWV2ZW50Lm1nbXQudXBkYXRlX2Rldi5pbnRlZ3JhdGVkX2h1Yl9s YXRlbmN5ID0gaW50ZWdyYXRlZF9odWJfbGF0ZW5jeTsNCisJZXZlbnQubWdtdC51cGRhdGVfZGV2 LmV2ZW50X2lkCQkgICAgID0gZXZlbnRfaWQ7DQorCWV2ZW50Lm1hZGV2X2FkZHIJCQkgICAgID0g ZGV2LT5tYWRldl9hZGRyOw0KKw0KKwltYXVzYl9pbml0X2RldmljZV9kZXNjcmlwdG9yKCZldmVu dC5tZ210LnVwZGF0ZV9kZXYudXBkYXRlX2Rlc2NyaXB0b3IsDQorCQkJCSAgICAgZGV2X2Rlc2Ny aXB0b3IpOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl93YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCwg ZXZlbnRfaWQsIGRldik7DQorDQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIo IlVwZGF0ZWRldiBmYWlsZWQsIGV2ZW50X2lkPSVsbGQiLCBldmVudF9pZCk7DQorCQlyZXR1cm4g c3RhdHVzOw0KKwl9DQorDQorCXJldHVybiBldmVudC5zdGF0dXM7DQorfQ0KKw0KK2ludCBtYXVz Yl91cGRhdGVkZXZfZXZlbnRfZnJvbV91c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRldiwNCisJ CQkJICAgIHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQpDQorew0KKwlyZXR1cm4gbWF1c2Jfc2ln bmFsX2V2ZW50KGRldiwgZXZlbnQsIGV2ZW50LT5tZ210LnVwZGF0ZV9kZXYuZXZlbnRfaWQpOw0K K30NCisNCitpbnQgbWF1c2JfdXNiZGV2ZGlzY29ubmVjdF9ldmVudF90b191c2VyKHN0cnVjdCBt YXVzYl9kZXZpY2UgKmRldiwNCisJCQkJCSB1MTYgZGV2X2hhbmRsZSkNCit7DQorCXN0cnVjdCBt YXVzYl9ldmVudCBldmVudDsNCisJaW50IHN0YXR1czsNCisNCisJZXZlbnQudHlwZSA9IE1BVVNC X0VWRU5UX1RZUEVfVVNCX0RFVl9ESVNDT05ORUNUOw0KKwlldmVudC5tZ210LnVzYl9kZXZfZGlz Y29ubmVjdC5kZXZpY2VfaGFuZGxlID0gZGV2X2hhbmRsZTsNCisJZXZlbnQubWFkZXZfYWRkcgkJ CSAgICA9IGRldi0+bWFkZXZfYWRkcjsNCisNCisJc3RhdHVzID0gbWF1c2JfZW5xdWV1ZV9ldmVu dF90b191c2VyKGRldiwgJmV2ZW50KTsNCisJaWYgKHN0YXR1cyA8IDApDQorCQltYXVzYl9wcl9l cnIoIlJpbmcgYnVmZmVyIGZ1bGwsIHVzYmRldmRpc2Nvbm5lY3QgZmFpbGVkIik7DQorDQorCXJl dHVybiBzdGF0dXM7DQorfQ0KKw0KK2ludCBtYXVzYl9waW5nX2V2ZW50X3RvX3VzZXIoc3RydWN0 IG1hdXNiX2RldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IG1hdXNiX2V2ZW50IGV2ZW50Ow0KKwlp bnQgc3RhdHVzOw0KKw0KKwlldmVudC50eXBlCSA9IE1BVVNCX0VWRU5UX1RZUEVfUElORzsNCisJ ZXZlbnQubWFkZXZfYWRkciA9IGRldi0+bWFkZXZfYWRkcjsNCisNCisJc3RhdHVzID0gbWF1c2Jf ZW5xdWV1ZV9ldmVudF90b191c2VyKGRldiwgJmV2ZW50KTsNCisJaWYgKHN0YXR1cyA8IDApDQor CQltYXVzYl9wcl9lcnIoIlJpbmcgYnVmZmVyIGZ1bGwsIGRldmRpc2Nvbm5lY3QgZmFpbGVkIik7 DQorDQorCXJldHVybiBzdGF0dXM7DQorfQ0KKw0KK19fYXR0cmlidXRlX18oKHVudXNlZCkpDQor c3RhdGljIGludCBtYXVzYl9kZXZkaXNjb25uZWN0X2V2ZW50X3RvX3VzZXIoc3RydWN0IG1hdXNi X2RldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IG1hdXNiX2V2ZW50IGV2ZW50Ow0KKwlpbnQgc3Rh dHVzOw0KKw0KKwlldmVudC50eXBlCSA9IE1BVVNCX0VWRU5UX1RZUEVfREVWX0RJU0NPTk5FQ1Q7 DQorCWV2ZW50Lm1hZGV2X2FkZHIgPSBkZXYtPm1hZGV2X2FkZHI7DQorDQorCXN0YXR1cyA9IG1h dXNiX2VucXVldWVfZXZlbnRfdG9fdXNlcihkZXYsICZldmVudCk7DQorCWlmIChzdGF0dXMgPCAw KQ0KKwkJbWF1c2JfcHJfZXJyKCJSaW5nIGJ1ZmZlciBmdWxsLCBkZXZkaXNjb25uZWN0IGZhaWxl ZCIpOw0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitpbnQgbWF1c2JfdXNiZGV2cmVzZXRf ZXZlbnRfdG9fdXNlcihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgICB1MTYgZGV2 aWNlX2hhbmRsZSkNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50ICBzdGF0 dXM7DQorCXU2NCBldmVudF9pZCA9IG1hdXNiX2V2ZW50X2lkKGRldik7DQorDQorCWV2ZW50LnR5 cGUJCQkgICAgICAgPSBNQVVTQl9FVkVOVF9UWVBFX1VTQl9ERVZfUkVTRVQ7DQorCWV2ZW50Lm1n bXQudXNiX2Rldl9yZXNldC5kZXZpY2VfaGFuZGxlID0gZGV2aWNlX2hhbmRsZTsNCisJZXZlbnQu bWdtdC51c2JfZGV2X3Jlc2V0LmV2ZW50X2lkICAgICAgPSBldmVudF9pZDsNCisJZXZlbnQubWFk ZXZfYWRkcgkJICAgICAgID0gZGV2LT5tYWRldl9hZGRyOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl93 YWl0X2Zvcl9jb21wbGV0aW9uKCZldmVudCwgZXZlbnRfaWQsIGRldik7DQorDQorCWlmIChzdGF0 dXMgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIlVzYmRldnJlc2V0IGZhaWxlZCwgZXZlbnRfaWQ9 JWxsZCIsIGV2ZW50X2lkKTsNCisJCXJldHVybiBzdGF0dXM7DQorCX0NCisNCisJcmV0dXJuIGV2 ZW50LnN0YXR1czsNCit9DQorDQoraW50IG1hdXNiX3VzYmRldnJlc2V0X2V2ZW50X2Zyb21fdXNl cihzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgICAgIHN0cnVjdCBtYXVzYl9ldmVu dCAqZXZlbnQpDQorew0KKwlyZXR1cm4gbWF1c2Jfc2lnbmFsX2V2ZW50KGRldiwgZXZlbnQsDQor CQkJCSAgZXZlbnQtPm1nbXQudXNiX2Rldl9yZXNldC5ldmVudF9pZCk7DQorfQ0KKw0KK2ludCBt YXVzYl9jYW5jZWx0cmFuc2Zlcl9ldmVudF90b191c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2UgKmRl diwNCisJCQkJICAgICAgIHUxNiBkZXZpY2VfaGFuZGxlLA0KKwkJCQkgICAgICAgdTE2IGVwX2hh bmRsZSwgdTY0IHVyYikNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBldmVudDsNCisJaW50IHN0 YXR1czsNCisNCisJZXZlbnQudHlwZSA9IE1BVVNCX0VWRU5UX1RZUEVfQ0FOQ0VMX1RSQU5TRkVS Ow0KKwlldmVudC5tZ210LmNhbmNlbF90cmFuc2Zlci5kZXZpY2VfaGFuZGxlID0gZGV2aWNlX2hh bmRsZTsNCisJZXZlbnQubWdtdC5jYW5jZWxfdHJhbnNmZXIuZXBfaGFuZGxlCSA9IGVwX2hhbmRs ZTsNCisJZXZlbnQubWdtdC5jYW5jZWxfdHJhbnNmZXIudXJiCQkgPSB1cmI7DQorCWV2ZW50Lm1h ZGV2X2FkZHIJCQkgPSBkZXYtPm1hZGV2X2FkZHI7DQorDQorCXN0YXR1cyA9IG1hdXNiX2VucXVl dWVfZXZlbnRfdG9fdXNlcihkZXYsICZldmVudCk7DQorCWlmIChzdGF0dXMgPCAwKSB7DQorCQlt YXVzYl9wcl9lcnIoIlJpbmcgYnVmZmVyIGZ1bGwsIGNhbmNlbHRyYW5zZmVyIGZhaWxlZCIpOw0K KwkJcmV0dXJuIHN0YXR1czsNCisJfQ0KKw0KKwlyZXR1cm4gc3RhdHVzOw0KK30NCisNCitpbnQg bWF1c2JfY2FuY2VsdHJhbnNmZXJfZXZlbnRfZnJvbV91c2VyKHN0cnVjdCBtYXVzYl9kZXZpY2Ug KmRldiwNCisJCQkJCSBzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJbWF1c2JfcHJf ZGVidWcoIiIpOw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtYXVzYl9jbGVhbnVwX3NlbmRf ZGF0YV9tc2dfZXZlbnQoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7DQorCW1hdXNiX2Nv bXBsZXRlX3VyYihldmVudCk7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfY2xlYW51cF9yZWNlaXZlZF9k YXRhX21zZ19ldmVudChzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJbWF1c2JfcmVs ZWFzZV9ldmVudF9yZXNvdXJjZXMoZXZlbnQpOw0KK30NCisNCit2b2lkIG1hdXNiX2NsZWFudXBf ZGVsZXRlX2RhdGFfdHJhbnNmZXJfZXZlbnQoc3RydWN0IG1hdXNiX2V2ZW50ICpldmVudCkNCit7 DQorCXN0cnVjdCB1cmIgKnVyYiA9IChzdHJ1Y3QgdXJiICopZXZlbnQtPmRhdGEudXJiOw0KKwlz dHJ1Y3QgbWF1c2JfdXJiX2N0eCAqdXJiX2N0eDsNCisJaW50IHN0YXR1cyA9IDA7DQorDQorCXVy Yl9jdHggPSBtYXVzYl91bmxpbmtfYW5kX2RlbGV0ZV91cmJfZnJvbV90cmVlKHVyYiwgc3RhdHVz KTsNCisJaWYgKCF1cmJfY3R4KSB7DQorCQltYXVzYl9wcl93YXJuKCJVcmI9JXAgaXMgbm90IGlu IHRyZWUiLCB1cmIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQorCS8qIERlYWxsb2NhdGUgdXJiX2N0 eCAqLw0KKwltYXVzYl91bmluaXRfZGF0YV9pdGVyYXRvcigmdXJiX2N0eC0+aXRlcmF0b3IpOw0K KwlrZnJlZSh1cmJfY3R4KTsNCisNCisJdXJiLT5zdGF0dXMgPSAtRVBST1RPOw0KKwl1cmItPmFj dHVhbF9sZW5ndGggPSAwOw0KKwlhdG9taWNfZGVjKCZ1cmItPnVzZV9jb3VudCk7DQorCXVzYl9o Y2RfZ2l2ZWJhY2tfdXJiKHVyYi0+aGNwcml2LCB1cmIsIHVyYi0+c3RhdHVzKTsNCit9DQpkaWZm IC0tZ2l0IGEvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9uZXR3b3JrX2NhbGxiYWNr cy5jIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvaHBhbC9uZXR3b3JrX2NhbGxiYWNrcy5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5iOGJjYmRmN2UyMGYN Ci0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL2hwYWwvbmV0 d29ya19jYWxsYmFja3MuYw0KQEAgLTAsMCArMSwxNjAgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNw bGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0 ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljDQorICogTGljZW5z ZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMg YXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQorICovDQorI2luY2x1ZGUgImhwYWwvbmV0 d29ya19jYWxsYmFja3MuaCINCisNCisjaW5jbHVkZSA8bGludXgvdWlvLmg+DQorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4NCisNCisjaW5jbHVkZSAiaHBhbC9ocGFsLmgiDQorI2luY2x1ZGUgImhw YWwvbWF1c2JfZXZlbnRzLmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisNCitz dGF0aWMgdm9pZCBtYXVzYl9pbml0X2lwX2N0eF9oZWxwZXIoc3RydWN0IG1hdXNiX2RldmljZSAq ZGV2LA0KKwkJCQkgICAgIHN0cnVjdCBtYXVzYl9pcF9jdHggKippcF9jdHgsDQorCQkJCSAgICAg dTE2IHBvcnQsDQorCQkJCSAgICAgZW51bSBtYXVzYl9jaGFubmVsIGNoYW5uZWwpDQorew0KKwlp bnQgc3RhdHVzOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9pbml0X2lwX2N0eChpcF9jdHgsIGRldi0+ bmV0X25zLA0KKwkJCQkgICBkZXYtPmRldl9hZGRyLmlwLmFkZHJlc3MuaXA0LCBwb3J0LCBkZXYs DQorCQkJCSAgIG1hdXNiX2lwX2NhbGxiYWNrLCBjaGFubmVsKTsNCisJaWYgKHN0YXR1cyA8IDAp IHsNCisJCW1hdXNiX3ByX2VycigiSW5pdCBpcCBjb250ZXh0IGZhaWxlZCB3aXRoIGVycm9yPSVk Iiwgc3RhdHVzKTsNCisJCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwgJmRldi0+c29ja2V0X2Rpc2Nv bm5lY3Rfd29yayk7DQorCQlyZXR1cm47DQorCX0NCisNCisJZGV2LT5jaGFubmVsX21hcFtjaGFu bmVsXSA9ICppcF9jdHg7DQorCW1hdXNiX2lwX2Nvbm5lY3RfYXN5bmMoKmlwX2N0eCk7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkIG1hdXNiX2Nvbm5lY3RfY2FsbGJhY2soc3RydWN0IG1hdXNiX2Rldmlj ZSAqZGV2LCBlbnVtIG1hdXNiX2NoYW5uZWwNCisJCQkJY2hhbm5lbCwgaW50IHN0YXR1cykNCit7 DQorCXN0cnVjdCBtYXVzYl9kZXZpY2VfYWRkcmVzcyAqZGV2X2FkZHIgPSAmZGV2LT5kZXZfYWRk cjsNCisNCisJbWF1c2JfcHJfaW5mbygiQ29ubmVjdCBjYWxsYmFjayBmb3IgY2hhbm5lbD0lZCB3 aXRoIHN0YXR1cz0lZCIsDQorCQkgICAgICBjaGFubmVsLCBzdGF0dXMpOw0KKw0KKwlpZiAoc3Rh dHVzIDwgMCkgew0KKwkJcXVldWVfd29yayhkZXYtPndvcmtxLCAmZGV2LT5zb2NrZXRfZGlzY29u bmVjdF93b3JrKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlpZiAoY2hhbm5lbCA9PSBNQVVTQl9N R01UX0NIQU5ORUwpIHsNCisJCWlmIChkZXZfYWRkci0+aXAucG9ydC5jb250cm9sID09IDApIHsN CisJCQlkZXYtPmNoYW5uZWxfbWFwW01BVVNCX0NUUkxfQ0hBTk5FTF0gPQ0KKwkJCQlkZXYtPm1n bXRfY2hhbm5lbDsNCisJCQljaGFubmVsID0gTUFVU0JfQ1RSTF9DSEFOTkVMOw0KKwkJfSBlbHNl IHsNCisJCQltYXVzYl9pbml0X2lwX2N0eF9oZWxwZXIoZGV2LCAmZGV2LT5jdHJsX2NoYW5uZWws DQorCQkJCQkJIGRldl9hZGRyLT5pcC5wb3J0LmNvbnRyb2wsDQorCQkJCQkJIE1BVVNCX0NUUkxf Q0hBTk5FTCk7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwl9DQorDQorCWlmIChjaGFubmVsID09IE1B VVNCX0NUUkxfQ0hBTk5FTCkgew0KKwkJaWYgKGRldl9hZGRyLT5pcC5wb3J0LmJ1bGsgPT0gMCkg ew0KKwkJCWRldi0+Y2hhbm5lbF9tYXBbTUFVU0JfQlVMS19DSEFOTkVMXSA9DQorCQkJCWRldi0+ Y2hhbm5lbF9tYXBbTUFVU0JfQ1RSTF9DSEFOTkVMXTsNCisJCQljaGFubmVsID0gTUFVU0JfQlVM S19DSEFOTkVMOw0KKwkJfSBlbHNlIHsNCisJCQltYXVzYl9pbml0X2lwX2N0eF9oZWxwZXIoZGV2 LCAmZGV2LT5idWxrX2NoYW5uZWwsDQorCQkJCQkJIGRldl9hZGRyLT5pcC5wb3J0LmJ1bGssDQor CQkJCQkJIE1BVVNCX0JVTEtfQ0hBTk5FTCk7DQorCQkJcmV0dXJuOw0KKwkJfQ0KKwl9DQorDQor CWlmIChjaGFubmVsID09IE1BVVNCX0JVTEtfQ0hBTk5FTCkgew0KKwkJaWYgKGRldl9hZGRyLT5p cC5wb3J0Lmlzb2Nocm9ub3VzID09IDApIHsNCisJCQkvKiBpZiB0aGVyZSBpcyBubyBpc29jaCBw b3J0IHVzZSB0Y3AgZm9yIGl0ICovDQorCQkJZGV2LT5jaGFubmVsX21hcFtNQVVTQl9JU09DSF9D SEFOTkVMXSA9DQorCQkJCWRldi0+Y2hhbm5lbF9tYXBbTUFVU0JfQlVMS19DSEFOTkVMXTsNCisJ CQljaGFubmVsID0gTUFVU0JfSVNPQ0hfQ0hBTk5FTDsNCisJCX0gZWxzZSB7DQorCQkJbWF1c2Jf aW5pdF9pcF9jdHhfaGVscGVyKGRldiwgJmRldi0+aXNvY2hfY2hhbm5lbCwNCisJCQkJCQkgZGV2 X2FkZHItPmlwLnBvcnQuaXNvY2hyb25vdXMsDQorCQkJCQkJIE1BVVNCX0lTT0NIX0NIQU5ORUwp Ow0KKwkJCXJldHVybjsNCisJCX0NCisJfQ0KKw0KKwlpZiAoY2hhbm5lbCA9PSBNQVVTQl9JU09D SF9DSEFOTkVMKSB7DQorCQlkZXYtPmNoYW5uZWxfbWFwW01BVVNCX0lOVFJfQ0hBTk5FTF0gPQ0K KwkJCQlkZXYtPmNoYW5uZWxfbWFwW01BVVNCX0NUUkxfQ0hBTk5FTF07DQorCQltYXVzYl9vbl9t YWRldl9jb25uZWN0ZWQoZGV2KTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtYXVzYl9oYW5k bGVfY29ubmVjdF9ldmVudChzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXYsDQorCQkJCSAgICAgICBl bnVtIG1hdXNiX2NoYW5uZWwgY2hhbm5lbCwgaW50IHN0YXR1cywNCisJCQkJICAgICAgIHZvaWQg KmRhdGEpDQorew0KKwltYXVzYl9jb25uZWN0X2NhbGxiYWNrKGRldiwgY2hhbm5lbCwgc3RhdHVz KTsNCit9DQorDQorc3RhdGljIHZvaWQgbWF1c2JfaGFuZGxlX3JlY2VpdmVfZXZlbnQoc3RydWN0 IG1hdXNiX2RldmljZSAqZGV2LA0KKwkJCQkgICAgICAgZW51bSBtYXVzYl9jaGFubmVsIGNoYW5u ZWwsIGludCBzdGF0dXMsDQorCQkJCSAgICAgICB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IG1h dXNiX2V2ZW50IGV2ZW50Ow0KKw0KKwlldmVudC5tYWRldl9hZGRyID0gZGV2LT5tYWRldl9hZGRy Ow0KKw0KKwlpZiAoc3RhdHVzIDw9IDApIHsNCisJCW1hdXNiX3ByX2VycigiUmVjZWl2ZSBldmVu dCBlcnJvciBzdGF0dXM9JWQiLCBzdGF0dXMpOw0KKwkJcXVldWVfd29yayhkZXYtPndvcmtxLCAm ZGV2LT5zb2NrZXRfZGlzY29ubmVjdF93b3JrKTsNCisJCXF1ZXVlX3dvcmsoZGV2LT53b3JrcSwg JmRldi0+aGNkX2Rpc2Nvbm5lY3Rfd29yayk7DQorCQlyZXR1cm47DQorCX0NCisNCisJbWF1c2Jf cmVzZXRfY29ubmVjdGlvbl90aW1lcihkZXYpOw0KKw0KKwlzdGF0dXMgPSBtYXVzYl9tc2dfcmVj ZWl2ZWRfZXZlbnQoJmV2ZW50LA0KKwkJCQkJICAoc3RydWN0IG1hX3VzYl9oZHJfY29tbW9uICop ZGF0YSwNCisJCQkJCSAgY2hhbm5lbCk7DQorDQorCWlmIChzdGF0dXMgPT0gMCkNCisJCXN0YXR1 cyA9IG1hdXNiX2VucXVldWVfZXZlbnRfdG9fdXNlcihkZXYsICZldmVudCk7DQorDQorCWlmIChz dGF0dXMgPCAwKQ0KKwkJbWF1c2JfcHJfZXJyKCJGYWlsZWQgdG8gZW5xdWV1ZSwgc3RhdHVzPSVk Iiwgc3RhdHVzKTsNCit9DQorDQordm9pZCBtYXVzYl9pcF9jYWxsYmFjayh2b2lkICpjdHgsIGVu dW0gbWF1c2JfY2hhbm5lbCBjaGFubmVsLA0KKwkJICAgICAgIGVudW0gbWF1c2JfbGlua19hY3Rp b24gYWN0aW9uLCBpbnQgc3RhdHVzLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IG1hdXNiX2Rl dmljZSAqZGV2ID0gKHN0cnVjdCBtYXVzYl9kZXZpY2UgKiljdHg7DQorDQorCXN3aXRjaCAoYWN0 aW9uKSB7DQorCWNhc2UgTUFVU0JfTElOS19DT05ORUNUOg0KKwkJbWF1c2JfaGFuZGxlX2Nvbm5l Y3RfZXZlbnQoZGV2LCBjaGFubmVsLCBzdGF0dXMsIGRhdGEpOw0KKwkJYnJlYWs7DQorCWNhc2Ug TUFVU0JfTElOS19TRU5EOg0KKwkJLyoNCisJCSAqIEN1cnJlbnRseSB0aGVyZSBpcyBub3RoaW5n IHRvIGRvLCBhcyBzZW5kIG9wZXJhdGlvbiBpcw0KKwkJICogc3luY2hyb25vdXMNCisJCSAqLw0K KwkJYnJlYWs7DQorCWNhc2UgTUFVU0JfTElOS19SRUNWOg0KKwkJbWF1c2JfaGFuZGxlX3JlY2Vp dmVfZXZlbnQoZGV2LCBjaGFubmVsLCBzdGF0dXMsIGRhdGEpOw0KKwkJYnJlYWs7DQorCWNhc2Ug TUFVU0JfTElOS19ESVNDT05ORUNUOg0KKwkJLyoNCisJCSAqIEN1cnJlbnRseSB0aGVyZSBpcyBu b3RoaW5nIHRvIGRvLCBhcyBkaXNjb25uZWN0IG9wZXJhdGlvbiBpcw0KKwkJICogc3luY2hyb25v dXMNCisJCSAqLw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQltYXVzYl9wcl93YXJuKCJVbmtu b3duIG5ldHdvcmsgYWN0aW9uIik7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv bWF1c2JfaG9zdC9zcmMvbGluay9tYXVzYl9pcF9saW5rLmMgYi9kcml2ZXJzL3VzYi9tYXVzYl9o b3N0L3NyYy9saW5rL21hdXNiX2lwX2xpbmsuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uYmNkNmQwMGQxMmNkDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L3VzYi9tYXVzYl9ob3N0L3NyYy9saW5rL21hdXNiX2lwX2xpbmsuYw0KQEAgLTAsMCArMSwzNTQg QEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29weXJp Z2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRoaXMg ZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhl IG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMuDQor ICovDQorI2luY2x1ZGUgImxpbmsvbWF1c2JfaXBfbGluay5oIg0KKw0KKyNpbmNsdWRlIDxsaW51 eC9pbi5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2ppZmZp ZXMuaD4NCisjaW5jbHVkZSA8bGludXgvbmV0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pg0KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+ DQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVl Lmg+DQorI2luY2x1ZGUgPG5ldC90Y3AuaD4NCisjaW5jbHVkZSA8bmV0L3NvY2suaD4NCisNCisj aW5jbHVkZSAidXRpbHMvbWF1c2JfbG9ncy5oIg0KKw0KK3N0YXRpYyB2b2lkIF9fbWF1c2JfaXBf Y29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KK3N0YXRpYyBpbnQgX19tYXVzYl9p cF9yZWN2KHN0cnVjdCBtYXVzYl9pcF9jdHggKmlwX2N0eCk7DQorc3RhdGljIHZvaWQgX19tYXVz Yl9pcF9yZWN2X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCitzdGF0aWMgaW5saW5l IHZvaWQgX19tYXVzYl9pcF9yZWN2X2N0eF9jbGVhcihzdHJ1Y3QgbWF1c2JfaXBfcmVjdl9jdHgN CisJCQkJCSAgICAgKnJlY3ZfY3R4KTsNCitzdGF0aWMgaW5saW5lIHZvaWQgX19tYXVzYl9pcF9y ZWN2X2N0eF9mcmVlKHN0cnVjdCBtYXVzYl9pcF9yZWN2X2N0eA0KKwkJCQkJICAgICpyZWN2X2N0 eCk7DQorDQoraW50IG1hdXNiX2luaXRfaXBfY3R4KHN0cnVjdCBtYXVzYl9pcF9jdHggKippcF9j dHgsDQorCQkgICAgICBzdHJ1Y3QgbmV0ICpuZXRfbnMsDQorCQkgICAgICBjaGFyIGlwX2FkZHJb SU5FVDZfQUREUlNUUkxFTl0sDQorCQkgICAgICB1MTYgcG9ydCwgdm9pZCAqY29udGV4dCwNCisJ CSAgICAgIHZvaWQgKCpmbl9jYWxsYmFjaykodm9pZCAqY3R4LCBlbnVtIG1hdXNiX2NoYW5uZWwg Y2hhbm5lbCwNCisJCQkJCSAgZW51bSBtYXVzYl9saW5rX2FjdGlvbiBhY3QsDQorCQkJCQkgIGlu dCBzdGF0dXMsIHZvaWQgKmRhdGEpLA0KKwkJICAgICAgZW51bSBtYXVzYl9jaGFubmVsIGNoYW5u ZWwpDQorew0KKwlzdHJ1Y3QgbWF1c2JfaXBfY3R4ICpjdHg7DQorCSppcF9jdHggPSBremFsbG9j KHNpemVvZigqKmlwX2N0eCksIEdGUF9BVE9NSUMpOw0KKwlpZiAoISppcF9jdHgpIHsNCisJCW1h dXNiX3ByX2FsZXJ0KCJpcCBjb250ZXh0IGFsbG9jYXRpb24gZmFpbGVkIik7DQorCQlyZXR1cm4g LUVOT01FTTsNCisJfQ0KKwljdHggPSAqaXBfY3R4Ow0KKwljdHgtPmNsaWVudF9zb2NrZXQgPSBO VUxMOw0KKwlfX21hdXNiX2lwX3JlY3ZfY3R4X2NsZWFyKCZjdHgtPnJlY3ZfY3R4KTsNCisJc3Ry Y3B5KGN0eC0+aXBfYWRkciwgaXBfYWRkcik7DQorCWN0eC0+cG9ydCA9IHBvcnQ7DQorCWN0eC0+ bmV0X25zID0gbmV0X25zOw0KKw0KKwlpZiAoY2hhbm5lbCA9PSBNQVVTQl9JU09DSF9DSEFOTkVM KQ0KKwkJY3R4LT51ZHAgPSB0cnVlOw0KKw0KKwljdHgtPmNvbm5lY3Rfd29ya3EgPSBhbGxvY19v cmRlcmVkX3dvcmtxdWV1ZSgiY29ubmVjdF93b3JrcSIsDQorCQkJCQkJICAgICBXUV9NRU1fUkVD TEFJTSk7DQorCWlmICghY3R4LT5jb25uZWN0X3dvcmtxKSB7DQorCQltYXVzYl9wcl9hbGVydCgi Y29ubmVjdF93b3JrcSBhbGxvYyBmYWlsZWQiKTsNCisJCWtmcmVlKGN0eCk7DQorCQlyZXR1cm4g LUVOT01FTTsNCisJfQ0KKw0KKwljdHgtPnJlY3Zfd29ya3EgPQ0KKwkgICAgYWxsb2Nfb3JkZXJl ZF93b3JrcXVldWUoInJlY3Zfd29ya3EiLCBXUV9NRU1fUkVDTEFJTSk7DQorCWlmICghY3R4LT5y ZWN2X3dvcmtxKSB7DQorCQltYXVzYl9wcl9hbGVydCgic2VuZF9yZWN2X3dvcmtxIGFsbG9jIGZh aWxlZCIpOw0KKwkJZGVzdHJveV93b3JrcXVldWUoY3R4LT5jb25uZWN0X3dvcmtxKTsNCisJCWtm cmVlKGN0eCk7DQorCQlyZXR1cm4gLUVOT01FTTsNCisJfQ0KKw0KKwlJTklUX1dPUksoJmN0eC0+ Y29ubmVjdF93b3JrLCBfX21hdXNiX2lwX2Nvbm5lY3QpOw0KKwlJTklUX1dPUksoJmN0eC0+cmVj dl93b3JrLCBfX21hdXNiX2lwX3JlY3Zfd29yayk7DQorDQorCWN0eC0+Y2hhbm5lbAkgPSBjaGFu bmVsOw0KKwljdHgtPmN0eAkgPSBjb250ZXh0Ow0KKwljdHgtPmZuX2NhbGxiYWNrID0gZm5fY2Fs bGJhY2s7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIG1hdXNiX2Rlc3Ryb3lfaXBfY3R4 KHN0cnVjdCBtYXVzYl9pcF9jdHggKmlwX2N0eCkNCit7DQorCWlmICghaXBfY3R4KQ0KKwkJcmV0 dXJuOw0KKw0KKwlpZiAoaXBfY3R4LT5jb25uZWN0X3dvcmtxKSB7DQorCQlmbHVzaF93b3JrcXVl dWUoaXBfY3R4LT5jb25uZWN0X3dvcmtxKTsNCisJCWRlc3Ryb3lfd29ya3F1ZXVlKGlwX2N0eC0+ Y29ubmVjdF93b3JrcSk7DQorCX0NCisNCisJaWYgKGlwX2N0eC0+cmVjdl93b3JrcSkgew0KKwkJ Zmx1c2hfd29ya3F1ZXVlKGlwX2N0eC0+cmVjdl93b3JrcSk7DQorCQlkZXN0cm95X3dvcmtxdWV1 ZShpcF9jdHgtPnJlY3Zfd29ya3EpOw0KKwl9DQorCWlmIChpcF9jdHgtPmNsaWVudF9zb2NrZXQp DQorCQlzb2NrX3JlbGVhc2UoaXBfY3R4LT5jbGllbnRfc29ja2V0KTsNCisJX19tYXVzYl9pcF9y ZWN2X2N0eF9mcmVlKCZpcF9jdHgtPnJlY3ZfY3R4KTsNCisNCisJa2ZyZWUoaXBfY3R4KTsNCit9 DQorDQorc3RhdGljIHZvaWQgX19tYXVzYl9pcF9zZXRfb3B0aW9ucyhzdHJ1Y3Qgc29ja2V0ICpz b2NrLCBib29sIHVkcCkNCit7DQorCXUzMiBvcHR2YWwgPSAwOw0KKwl1bnNpZ25lZCBpbnQgb3B0 bGVuID0gc2l6ZW9mKG9wdHZhbCk7DQorCWludCBzdGF0dXMgPSAwOw0KKwlzdHJ1Y3QgdGltZXZh bCB0aW1lbyA9IHsudHZfc2VjID0gMCwgLnR2X3VzZWMgPSA1MDAwMDBVIH07DQorCXN0cnVjdCB0 aW1ldmFsIHNlbmRfdGltZW8gPSB7LnR2X3NlYyA9IDEsIC50dl91c2VjID0gMCB9Ow0KKw0KKwlp ZiAoIXVkcCkgew0KKwkJb3B0dmFsID0gMTsNCisJCXN0YXR1cyA9IGtlcm5lbF9zZXRzb2Nrb3B0 KHNvY2ssIElQUFJPVE9fVENQLCBUQ1BfTk9ERUxBWSwNCisJCQkJCSAgIChjaGFyICopJm9wdHZh bCwgb3B0bGVuKTsNCisJCWlmIChzdGF0dXMgPCAwKQ0KKwkJCW1hdXNiX3ByX3dhcm4oIkZhaWxl ZCB0byBzZXQgdGNwIG5vIGRlbGF5IG9wdGlvbjogc3RhdHVzPSVkIiwNCisJCQkJICAgICAgc3Rh dHVzKTsNCisJfQ0KKw0KKwlzdGF0dXMgPSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBTT0xfU09D S0VULCBTT19SQ1ZUSU1FT19ORVcsDQorCQkJCSAgIChjaGFyICopJnRpbWVvLCBzaXplb2YodGlt ZW8pKTsNCisJaWYgKHN0YXR1cyA8IDApDQorCQltYXVzYl9wcl93YXJuKCJGYWlsZWQgdG8gc2V0 IHJlY3YgdGltZW91dCBvcHRpb246IHN0YXR1cz0lZCIsDQorCQkJICAgICAgc3RhdHVzKTsNCisN CisJc3RhdHVzID0ga2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fU05EVElN RU9fTkVXLA0KKwkJCQkgICAoY2hhciAqKSZzZW5kX3RpbWVvLCBzaXplb2Yoc2VuZF90aW1lbykp Ow0KKwlpZiAoc3RhdHVzIDwgMCkNCisJCW1hdXNiX3ByX3dhcm4oIkZhaWxlZCB0byBzZXQgc25k IHRpbWVvdXQgb3B0aW9uOiBzdGF0dXM9JWQiLA0KKwkJCSAgICAgIHN0YXR1cyk7DQorDQorCW9w dHZhbCA9IE1BVVNCX0xJTktfQlVGRl9TSVpFOw0KKwlzdGF0dXMgID0ga2VybmVsX3NldHNvY2tv cHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLA0KKwkJCQkgICAgKGNoYXIgKikmb3B0dmFs LCBvcHRsZW4pOw0KKwlpZiAoc3RhdHVzIDwgMCkNCisJCW1hdXNiX3ByX3dhcm4oIkZhaWxlZCB0 byBzZXQgcmVjdiBidWZmZXIgc2l6ZTogc3RhdHVzPSVkIiwNCisJCQkgICAgICBzdGF0dXMpOw0K Kw0KKwlvcHR2YWwgPSBNQVVTQl9MSU5LX0JVRkZfU0laRTsNCisJc3RhdHVzICA9IGtlcm5lbF9z ZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwNCisJCQkJICAgIChjaGFyICop Jm9wdHZhbCwgb3B0bGVuKTsNCisJaWYgKHN0YXR1cyA8IDApDQorCQltYXVzYl9wcl93YXJuKCJG YWlsZWQgdG8gc2V0IHNlbmQgYnVmZmVyIHNpemU6IHN0YXR1cz0lZCIsDQorCQkJICAgICAgc3Rh dHVzKTsNCisNCisJb3B0dmFsID0gTUFVU0JfTElOS19UT1NfTEVWRUxfRUY7DQorCXN0YXR1cyAg PSBrZXJuZWxfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX0lQLCBJUF9UT1MsDQorCQkJCSAgICAo Y2hhciAqKSZvcHR2YWwsIG9wdGxlbik7DQorCWlmIChzdGF0dXMgPCAwKQ0KKwkJbWF1c2JfcHJf d2FybigiRmFpbGVkIHRvIHNldCBRT1M6IHN0YXR1cz0lZCIsIHN0YXR1cyk7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIF9fbWF1c2JfaXBfY29ubmVjdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQor ew0KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc29ja2FkZHI7DQorCWludCBzdGF0dXMgPSAwOw0KKw0K KwlzdHJ1Y3QgbWF1c2JfaXBfY3R4ICppcF9jdHggPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0 IG1hdXNiX2lwX2N0eCwNCisJCQkJCQkgICBjb25uZWN0X3dvcmspOw0KKw0KKwlpZiAoIWlwX2N0 eC0+dWRwKSB7DQorCQlzdGF0dXMgPSBzb2NrX2NyZWF0ZV9rZXJuKGlwX2N0eC0+bmV0X25zLCBB Rl9JTkVULCBTT0NLX1NUUkVBTSwNCisJCQkJCSAgSVBQUk9UT19UQ1AsICZpcF9jdHgtPmNsaWVu dF9zb2NrZXQpOw0KKwkJaWYgKHN0YXR1cyA8IDApIHsNCisJCQltYXVzYl9wcl9lcnIoIkZhaWxl ZCB0byBjcmVhdGUgc29ja2V0OiBzdGF0dXM9JWQiLA0KKwkJCQkgICAgIHN0YXR1cyk7DQorCQkJ Z290byBjYWxsYmFjazsNCisJCX0NCisJfSBlbHNlIHsNCisJCXN0YXR1cyA9IHNvY2tfY3JlYXRl X2tlcm4oaXBfY3R4LT5uZXRfbnMsIEFGX0lORVQsIFNPQ0tfREdSQU0sDQorCQkJCQkgIElQUFJP VE9fVURQLCAmaXBfY3R4LT5jbGllbnRfc29ja2V0KTsNCisJCWlmIChzdGF0dXMgPCAwKSB7DQor CQkJbWF1c2JfcHJfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIHNvY2tldDogc3RhdHVzPSVkIiwNCisJ CQkJICAgICBzdGF0dXMpOw0KKwkJCWdvdG8gY2FsbGJhY2s7DQorCQl9DQorCX0NCisNCisJbWVt c2V0KCZzb2NrYWRkciwgMCwgc2l6ZW9mKHNvY2thZGRyKSk7DQorCXNvY2thZGRyLnNpbl9mYW1p bHkJID0gQUZfSU5FVDsNCisJc29ja2FkZHIuc2luX3BvcnQJID0gaHRvbnMoaXBfY3R4LT5wb3J0 KTsNCisJc29ja2FkZHIuc2luX2FkZHIuc19hZGRyID0gaW5fYXRvbihpcF9jdHgtPmlwX2FkZHIp Ow0KKw0KKwlfX21hdXNiX2lwX3NldF9vcHRpb25zKChzdHJ1Y3Qgc29ja2V0ICopaXBfY3R4LT5j bGllbnRfc29ja2V0LA0KKwkJCSAgICAgICBpcF9jdHgtPnVkcCk7DQorDQorCXN0YXR1cyA9IGtl cm5lbF9jb25uZWN0KGlwX2N0eC0+Y2xpZW50X3NvY2tldCwNCisJCQkJKHN0cnVjdCBzb2NrYWRk ciAqKSZzb2NrYWRkciwgc2l6ZW9mKHNvY2thZGRyKSwNCisJCQkJT19SRFdSKTsNCisJaWYgKHN0 YXR1cyA8IDApIHsNCisJCW1hdXNiX3ByX2VycigiRmFpbGVkIHRvIGNvbm5lY3QgdG8gaG9zdCAl czolZCwgc3RhdHVzPSVkIiwNCisJCQkgICAgIGlwX2N0eC0+aXBfYWRkciwgaXBfY3R4LT5wb3J0 LCBzdGF0dXMpOw0KKwkJZ290byBjbGVhcl9zb2NrZXQ7DQorCX0NCisNCisJcXVldWVfd29yayhp cF9jdHgtPnJlY3Zfd29ya3EsICZpcF9jdHgtPnJlY3Zfd29yayk7DQorCW1hdXNiX3ByX2luZm8o IkNvbm5lY3RlZCB0byBob3N0ICVzOiVkLCBzdGF0dXM9JWQiLCBpcF9jdHgtPmlwX2FkZHIsDQor CQkgICAgICBpcF9jdHgtPnBvcnQsIHN0YXR1cyk7DQorDQorCWdvdG8gY2FsbGJhY2s7DQorDQor Y2xlYXJfc29ja2V0Og0KKwlzb2NrX3JlbGVhc2UoaXBfY3R4LT5jbGllbnRfc29ja2V0KTsNCisJ aXBfY3R4LT5jbGllbnRfc29ja2V0ID0gTlVMTDsNCitjYWxsYmFjazoNCisJaXBfY3R4LT5mbl9j YWxsYmFjayhpcF9jdHgtPmN0eCwgaXBfY3R4LT5jaGFubmVsLCBNQVVTQl9MSU5LX0NPTk5FQ1Qs DQorCQkJICAgIHN0YXR1cywgTlVMTCk7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfaXBfY29ubmVjdF9h c3luYyhzdHJ1Y3QgbWF1c2JfaXBfY3R4ICppcF9jdHgpDQorew0KKwlxdWV1ZV93b3JrKGlwX2N0 eC0+Y29ubmVjdF93b3JrcSwgJmlwX2N0eC0+Y29ubmVjdF93b3JrKTsNCit9DQorDQoraW50IG1h dXNiX2lwX2Rpc2Nvbm5lY3Qoc3RydWN0IG1hdXNiX2lwX2N0eCAqaXBfY3R4KQ0KK3sNCisJaWYg KGlwX2N0eCAmJiBpcF9jdHgtPmNsaWVudF9zb2NrZXQpDQorCQlyZXR1cm4ga2VybmVsX3NvY2tf c2h1dGRvd24oaXBfY3R4LT5jbGllbnRfc29ja2V0LCBTSFVUX1JEV1IpOw0KKwlyZXR1cm4gMDsN Cit9DQorDQoraW50IG1hdXNiX2lwX3NlbmQoc3RydWN0IG1hdXNiX2lwX2N0eCAqaXBfY3R4LA0K KwkJICBzdHJ1Y3QgbWF1c2Jfa3ZlY19kYXRhX3dyYXBwZXIgKndyYXBwZXIpDQorew0KKwlzdHJ1 Y3QgbXNnaGRyIG1zZ2hkOw0KKw0KKwlpZiAoIWlwX2N0eCkgew0KKwkJbWF1c2JfcHJfYWxlcnQo IlNvY2tldCBjdHggaXMgTlVMTCEiKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCW1l bXNldCgmbXNnaGQsIDAsIHNpemVvZihtc2doZCkpOw0KKwltc2doZC5tc2dfZmxhZ3MgPSBNU0df V0FJVEFMTDsNCisNCisJcmV0dXJuIGtlcm5lbF9zZW5kbXNnKGlwX2N0eC0+Y2xpZW50X3NvY2tl dCwgJm1zZ2hkLCB3cmFwcGVyLT5rdmVjLA0KKwkJCSAgICAgIHdyYXBwZXItPmt2ZWNfbnVtLCB3 cmFwcGVyLT5sZW5ndGgpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgX19tYXVzYl9pcF9y ZWN2X2N0eF9jbGVhcihzdHJ1Y3QgbWF1c2JfaXBfcmVjdl9jdHggKnJlY3ZfY3R4KQ0KK3sNCisJ cmVjdl9jdHgtPmJ1ZmZlciAgID0gTlVMTDsNCisJcmVjdl9jdHgtPmxlZnQJICAgPSAwOw0KKwly ZWN2X2N0eC0+cmVjZWl2ZWQgPSAwOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgX19tYXVz Yl9pcF9yZWN2X2N0eF9mcmVlKHN0cnVjdCBtYXVzYl9pcF9yZWN2X2N0eCAqcmVjdl9jdHgpDQor ew0KKwlrZnJlZShyZWN2X2N0eC0+YnVmZmVyKTsNCisJX19tYXVzYl9pcF9yZWN2X2N0eF9jbGVh cihyZWN2X2N0eCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXVzYl9pcF9yZWN2KHN0cnVjdCBt YXVzYl9pcF9jdHggKmlwX2N0eCkNCit7DQorCXN0cnVjdCBtc2doZHIgbXNnaGQ7DQorCXN0cnVj dCBrdmVjIHZlYzsNCisJaW50ICBzdGF0dXM7DQorCWJvb2wgcGVlayA9IHRydWU7DQorCXVuc2ln bmVkIGludCBvcHR2YWwgPSAxOw0KKwlzdHJ1Y3Qgc29ja2V0ICpjbGllbnRfc29ja2V0ID0gKHN0 cnVjdCBzb2NrZXQgKilpcF9jdHgtPmNsaWVudF9zb2NrZXQ7DQorDQorCS8qIHJlY2VpdmUgd2l0 aCB0aW1lb3V0IG9mIDAuNXMgKi8NCisJd2hpbGUgKHRydWUpIHsNCisJCW1lbXNldCgmbXNnaGQs IDAsIHNpemVvZihtc2doZCkpOw0KKwkJaWYgKHBlZWspIHsNCisJCQl2ZWMuaW92X2Jhc2UgPSBp cF9jdHgtPnJlY3ZfY3R4LmNvbW1vbl9oZHI7DQorCQkJdmVjLmlvdl9sZW4gID0gc2l6ZW9mKGlw X2N0eC0+cmVjdl9jdHguY29tbW9uX2hkcik7DQorCQkJbXNnaGQubXNnX2ZsYWdzID0gTVNHX1BF RUs7DQorCQl9IGVsc2Ugew0KKwkJCXZlYy5pb3ZfYmFzZSA9DQorCQkJICAgIGlwX2N0eC0+cmVj dl9jdHguYnVmZmVyICsNCisJCQkgICAgaXBfY3R4LT5yZWN2X2N0eC5yZWNlaXZlZDsNCisJCQl2 ZWMuaW92X2xlbiA9IGlwX2N0eC0+cmVjdl9jdHgubGVmdDsNCisJCQltc2doZC5tc2dfZmxhZ3Mg PSBNU0dfV0FJVEFMTDsNCisJCX0NCisNCisJCWlmICghaXBfY3R4LT51ZHApIHsNCisJCQlzdGF0 dXMgPSBrZXJuZWxfc2V0c29ja29wdChjbGllbnRfc29ja2V0LCBJUFBST1RPX1RDUCwNCisJCQkJ CQkgICBUQ1BfUVVJQ0tBQ0ssDQorCQkJCQkJICAgKGNoYXIgKikmb3B0dmFsLA0KKwkJCQkJCSAg IHNpemVvZihvcHR2YWwpKTsNCisJCQlpZiAoc3RhdHVzICE9IDApIHsNCisJCQkJbWF1c2JfcHJf d2FybigiU2V0dGluZyBUQ1BfUVVJQ0tBQ0sgZmFpbGVkOiAlczolZCwgc3RhdHVzPSVkIiwNCisJ CQkJCSAgICAgIGlwX2N0eC0+aXBfYWRkciwgaXBfY3R4LT5wb3J0LA0KKwkJCQkJICAgICAgc3Rh dHVzKTsNCisJCQl9DQorCQl9DQorDQorCQlzdGF0dXMgPSBrZXJuZWxfcmVjdm1zZyhjbGllbnRf c29ja2V0LCAmbXNnaGQsICZ2ZWMsIDEsDQorCQkJCQl2ZWMuaW92X2xlbiwgKGludCltc2doZC5t c2dfZmxhZ3MpOw0KKwkJaWYgKHN0YXR1cyA9PSAtRUFHQUlOKSB7DQorCQkJcmV0dXJuIC1FQUdB SU47DQorCQl9IGVsc2UgaWYgKHN0YXR1cyA8PSAwKSB7DQorCQkJbWF1c2JfcHJfd2Fybigia2Vy bmVsX3JlY3Ztc2cgaG9zdCAlczolZCwgc3RhdHVzPSVkIiwNCisJCQkJICAgICAgaXBfY3R4LT5p cF9hZGRyLCBpcF9jdHgtPnBvcnQsIHN0YXR1cyk7DQorDQorCQkJX19tYXVzYl9pcF9yZWN2X2N0 eF9mcmVlKCZpcF9jdHgtPnJlY3ZfY3R4KTsNCisJCQlpcF9jdHgtPmZuX2NhbGxiYWNrKGlwX2N0 eC0+Y3R4LCBpcF9jdHgtPmNoYW5uZWwsDQorCQkJCQkgICAgTUFVU0JfTElOS19SRUNWLCBzdGF0 dXMsIE5VTEwpOw0KKwkJCXJldHVybiBzdGF0dXM7DQorCQl9DQorDQorCQltYXVzYl9wcl9kZWJ1 Zygia2VybmVsX3JlY3Ztc2cgaG9zdCAlczolZCwgc3RhdHVzPSVkIiwNCisJCQkgICAgICAgaXBf Y3R4LT5pcF9hZGRyLCBpcF9jdHgtPnBvcnQsIHN0YXR1cyk7DQorDQorCQlpZiAocGVlaykgew0K KwkJCWlmICgodW5zaWduZWQgaW50KXN0YXR1cyA8DQorCQkJCQlzaXplb2YoaXBfY3R4LT5yZWN2 X2N0eC5jb21tb25faGRyKSkNCisJCQkJcmV0dXJuIC1FQUdBSU47DQorCQkJLyogbGVuZ3RoIGZp ZWxkIG9mIG1hdXNiX2NvbW1vbl9oZHIgKi8NCisJCQlpcF9jdHgtPnJlY3ZfY3R4LmxlZnQgPQ0K KwkJCSAgICAqKHUxNiAqKSgmaXBfY3R4LT5yZWN2X2N0eC5jb21tb25faGRyWzJdKTsNCisJCQlp cF9jdHgtPnJlY3ZfY3R4LnJlY2VpdmVkID0gMDsNCisJCQlpcF9jdHgtPnJlY3ZfY3R4LmJ1ZmZl cgkgID0NCisJCQkgICAga3phbGxvYyhpcF9jdHgtPnJlY3ZfY3R4LmxlZnQsIEdGUF9LRVJORUwp Ow0KKwkJCXBlZWsgPSBmYWxzZTsNCisJCQlpZiAoIWlwX2N0eC0+cmVjdl9jdHguYnVmZmVyKSB7 DQorCQkJCWlwX2N0eC0+Zm5fY2FsbGJhY2soaXBfY3R4LT5jdHgsDQorCQkJCQkJICAgIGlwX2N0 eC0+Y2hhbm5lbCwNCisJCQkJCQkgICAgTUFVU0JfTElOS19SRUNWLA0KKwkJCQkJCSAgICAtRU5P TUVNLCBOVUxMKTsNCisJCQkJcmV0dXJuIC1FTk9NRU07DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJ CQlpZiAoc3RhdHVzIDwgaXBfY3R4LT5yZWN2X2N0eC5sZWZ0KSB7DQorCQkJCWlwX2N0eC0+cmVj dl9jdHgubGVmdCAtPSAodTE2KXN0YXR1czsNCisJCQkJaXBfY3R4LT5yZWN2X2N0eC5yZWNlaXZl ZCArPSAodTE2KXN0YXR1czsNCisJCQl9IGVsc2Ugew0KKwkJCQlpcF9jdHgtPmZuX2NhbGxiYWNr KGlwX2N0eC0+Y3R4LA0KKwkJCQkJCSAgICBpcF9jdHgtPmNoYW5uZWwsDQorCQkJCQkJICAgIE1B VVNCX0xJTktfUkVDViwgc3RhdHVzLA0KKwkJCQkJCSAgICBpcF9jdHgtPnJlY3ZfY3R4LmJ1ZmZl cik7DQorCQkJCV9fbWF1c2JfaXBfcmVjdl9jdHhfY2xlYXIoJmlwX2N0eC0+cmVjdl9jdHgpOw0K KwkJCQlwZWVrID0gdHJ1ZTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJcmV0dXJuIHN0YXR1czsN Cit9DQorDQorc3RhdGljIHZvaWQgX19tYXVzYl9pcF9yZWN2X3dvcmsoc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IG1hdXNiX2lwX2N0eCAqaXBfY3R4ID0gY29udGFpbmVy X29mKHdvcmssIHN0cnVjdCBtYXVzYl9pcF9jdHgsDQorCQkJCQkJICAgcmVjdl93b3JrKTsNCisJ aW50IHN0YXR1cyA9IF9fbWF1c2JfaXBfcmVjdihpcF9jdHgpOw0KKw0KKwlpZiAoc3RhdHVzIDw9 IDAgJiYgc3RhdHVzICE9IC1FQUdBSU4pDQorCQlyZXR1cm47DQorDQorCXF1ZXVlX3dvcmsoaXBf Y3R4LT5yZWN2X3dvcmtxLCAmaXBfY3R4LT5yZWN2X3dvcmspOw0KK30NCmRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy91dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9yLmMgYi9k cml2ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy91dGlscy9tYXVzYl9kYXRhX2l0ZXJhdG9yLmMNCm5l dyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjBlYTdkNzE5MGJkYQ0KLS0t IC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy91c2IvbWF1c2JfaG9zdC9zcmMvdXRpbHMvbWF1c2Jf ZGF0YV9pdGVyYXRvci5jDQpAQCAtMCwwICsxLDI5NSBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTkgLSAyMDIwIERpc3Bs YXlMaW5rIChVSykgTHRkLg0KKyAqDQorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNlbnNl IHYyLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBh cmNoaXZlIGZvcg0KKyAqIG1vcmUgZGV0YWlscy4NCisgKi8NCisjaW5jbHVkZSAidXRpbHMvbWF1 c2JfZGF0YV9pdGVyYXRvci5oIg0KKw0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1 ZGUgPGxpbnV4L3N0cmluZy5oPg0KKyNpbmNsdWRlIDxsaW51eC91aW8uaD4NCisNCisjaW5jbHVk ZSAiaHBhbC9ocGFsLmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisNCitzdGF0 aWMgaW50IG1hdXNiX3JlYWRfdmlydHVhbF9idWZmZXIoc3RydWN0IG1hdXNiX2RhdGFfaXRlciAq aXRlcmF0b3IsDQorCQkJCSAgICAgdTMyIGJ5dGVfbnVtLA0KKwkJCQkgICAgIHN0cnVjdCBsaXN0 X2hlYWQgKmRhdGFfY2h1bmtzX2xpc3QsDQorCQkJCSAgICAgdTMyICpkYXRhX2NodW5rc19udW0p DQorew0KKwl1MzIgcmVtX2RhdGEJCT0gMDsNCisJdTMyIGJ5dGVzX3RvX3JlYWQJPSAwOw0KKwlz dHJ1Y3QgbWF1c2JfcGF5bG9hZF9jaHVuayAqZGF0YV9jaHVuayA9IE5VTEw7DQorDQorCSgqZGF0 YV9jaHVua3NfbnVtKSA9IDA7DQorDQorCWlmICghZGF0YV9jaHVua3NfbGlzdCkNCisJCXJldHVy biAtRUlOVkFMOw0KKw0KKwlJTklUX0xJU1RfSEVBRChkYXRhX2NodW5rc19saXN0KTsNCisJcmVt X2RhdGEgICAgICA9IGl0ZXJhdG9yLT5sZW5ndGggLSBpdGVyYXRvci0+b2Zmc2V0Ow0KKwlieXRl c190b19yZWFkID0gbWluKGJ5dGVfbnVtLCByZW1fZGF0YSk7DQorDQorCWlmIChieXRlc190b19y ZWFkID09IDApDQorCQlyZXR1cm4gMDsNCisNCisJZGF0YV9jaHVuayA9IGt6YWxsb2Moc2l6ZW9m KCpkYXRhX2NodW5rKSwgR0ZQX0tFUk5FTCk7DQorDQorCWlmICghZGF0YV9jaHVuaykNCisJCXJl dHVybiAtRU5PTUVNOw0KKw0KKwkrKygqZGF0YV9jaHVua3NfbnVtKTsNCisNCisJZGF0YV9jaHVu ay0+a3ZlYy5pb3ZfYmFzZSA9ICh1OCAqKShpdGVyYXRvci0+YnVmZmVyKSArIGl0ZXJhdG9yLT5v ZmZzZXQ7DQorCWRhdGFfY2h1bmstPmt2ZWMuaW92X2xlbiA9IGJ5dGVzX3RvX3JlYWQ7DQorCWl0 ZXJhdG9yLT5vZmZzZXQgKz0gYnl0ZXNfdG9fcmVhZDsNCisNCisJbGlzdF9hZGRfdGFpbCgmZGF0 YV9jaHVuay0+bGlzdF9lbnRyeSwgZGF0YV9jaHVua3NfbGlzdCk7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IG1hdXNiX3JlYWRfc2NhdHRlcmxpc3RfYnVmZmVyKHN0cnVjdCBt YXVzYl9kYXRhX2l0ZXIgKml0ZXJhdG9yLA0KKwkJCQkJIHUzMiBieXRlX251bSwNCisJCQkJCSBz dHJ1Y3QgbGlzdF9oZWFkICpkYXRhX2NodW5rc19saXN0LA0KKwkJCQkJIHUzMiAqZGF0YV9jaHVu a3NfbnVtKQ0KK3sNCisJdTMyIGN1cnJlbnRfc2dfcmVhZF9udW07DQorCXN0cnVjdCBtYXVzYl9w YXlsb2FkX2NodW5rICpkYXRhX2NodW5rID0gTlVMTDsNCisNCisJKCpkYXRhX2NodW5rc19udW0p ID0gMDsNCisNCisJaWYgKCFkYXRhX2NodW5rc19saXN0KQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQor DQorCUlOSVRfTElTVF9IRUFEKGRhdGFfY2h1bmtzX2xpc3QpOw0KKw0KKwl3aGlsZSAoYnl0ZV9u dW0pIHsNCisJCWlmIChpdGVyYXRvci0+c2dfaXRlci5jb25zdW1lZCA9PSBpdGVyYXRvci0+c2df aXRlci5sZW5ndGgpIHsNCisJCQlpZiAoIXNnX21pdGVyX25leHQoJml0ZXJhdG9yLT5zZ19pdGVy KSkNCisJCQkJYnJlYWs7DQorCQkJaXRlcmF0b3ItPnNnX2l0ZXIuY29uc3VtZWQgPSAwOw0KKwkJ fQ0KKw0KKwkJZGF0YV9jaHVuayA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhX2NodW5rKSwgR0ZQX0tF Uk5FTCk7DQorCQlpZiAoIWRhdGFfY2h1bmspIHsNCisJCQlzZ19taXRlcl9zdG9wKCZpdGVyYXRv ci0+c2dfaXRlcik7DQorCQkJcmV0dXJuIC1FTk9NRU07DQorCQl9DQorDQorCQljdXJyZW50X3Nn X3JlYWRfbnVtID0gbWluKChzaXplX3QpYnl0ZV9udW0sDQorCQkJCQkgIGl0ZXJhdG9yLT5zZ19p dGVyLmxlbmd0aCAtDQorCQkJCQkgIGl0ZXJhdG9yLT5zZ19pdGVyLmNvbnN1bWVkKTsNCisNCisJ CWRhdGFfY2h1bmstPmt2ZWMuaW92X2Jhc2UgPSAodTggKilpdGVyYXRvci0+c2dfaXRlci5hZGRy ICsNCisJCQkJaXRlcmF0b3ItPnNnX2l0ZXIuY29uc3VtZWQ7DQorCQlkYXRhX2NodW5rLT5rdmVj Lmlvdl9sZW4gID0gY3VycmVudF9zZ19yZWFkX251bTsNCisNCisJCSsrKCpkYXRhX2NodW5rc19u dW0pOw0KKwkJbGlzdF9hZGRfdGFpbCgmZGF0YV9jaHVuay0+bGlzdF9lbnRyeSwgZGF0YV9jaHVu a3NfbGlzdCk7DQorDQorCQlieXRlX251bSAtPSBjdXJyZW50X3NnX3JlYWRfbnVtOw0KKwkJaXRl cmF0b3ItPnNnX2l0ZXIuY29uc3VtZWQgKz0gY3VycmVudF9zZ19yZWFkX251bTsNCisJCWRhdGFf Y2h1bmsgPSBOVUxMOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdTMyIG1h dXNiX3dyaXRlX3ZpcnR1YWxfYnVmZmVyKHN0cnVjdCBtYXVzYl9kYXRhX2l0ZXIgKml0ZXJhdG9y LA0KKwkJCQkgICAgICB2b2lkICpidWZmZXIsIHUzMiBzaXplKQ0KK3sNCisJdTMyIHJlbV9zcGFj ZSAgID0gMDsNCisJdTMyIHdyaXRlX2NvdW50ID0gMDsNCisNCisJaWYgKCFidWZmZXIgfHwgIXNp emUpDQorCQlyZXR1cm4gd3JpdGVfY291bnQ7DQorDQorCXJlbV9zcGFjZSAgID0gaXRlcmF0b3It Pmxlbmd0aCAtIGl0ZXJhdG9yLT5vZmZzZXQ7DQorCXdyaXRlX2NvdW50ID0gbWluKHNpemUsIHJl bV9zcGFjZSk7DQorDQorCWlmICh3cml0ZV9jb3VudCA+IDApIHsNCisJCXZvaWQgKmxvY2F0aW9u ID0gc2hpZnRfcHRyKGl0ZXJhdG9yLT5idWZmZXIsIGl0ZXJhdG9yLT5vZmZzZXQpOw0KKw0KKwkJ bWVtY3B5KGxvY2F0aW9uLCBidWZmZXIsIHdyaXRlX2NvdW50KTsNCisJCWl0ZXJhdG9yLT5vZmZz ZXQgKz0gd3JpdGVfY291bnQ7DQorCX0NCisNCisJcmV0dXJuIHdyaXRlX2NvdW50Ow0KK30NCisN CitzdGF0aWMgdTMyIG1hdXNiX3dyaXRlX3NjYXR0ZXJsaXN0X2J1ZmZlcihzdHJ1Y3QgbWF1c2Jf ZGF0YV9pdGVyICppdGVyYXRvciwNCisJCQkJCSAgdm9pZCAqYnVmZmVyLCB1MzIgc2l6ZSkNCit7 DQorCXUzMiBjdXJyZW50X3NnX3JlbV9zcGFjZTsNCisJdTMyIGNvdW50ID0gMDsNCisJdTMyIHRv dGFsX2NvdW50ID0gMDsNCisJdm9pZCAqbG9jYXRpb24gPSBOVUxMOw0KKw0KKwlpZiAoIWJ1ZmZl ciB8fCAhc2l6ZSkNCisJCXJldHVybiBjb3VudDsNCisNCisJd2hpbGUgKHNpemUpIHsNCisJCWlm IChpdGVyYXRvci0+c2dfaXRlci5jb25zdW1lZCA+PSBpdGVyYXRvci0+c2dfaXRlci5sZW5ndGgp IHsNCisJCQlpZiAoIXNnX21pdGVyX25leHQoJml0ZXJhdG9yLT5zZ19pdGVyKSkNCisJCQkJYnJl YWs7DQorCQkJaXRlcmF0b3ItPnNnX2l0ZXIuY29uc3VtZWQgPSAwOw0KKwkJfQ0KKw0KKwkJY3Vy cmVudF9zZ19yZW1fc3BhY2UgPSAodTMyKShpdGVyYXRvci0+c2dfaXRlci5sZW5ndGggLQ0KKwkJ CWl0ZXJhdG9yLT5zZ19pdGVyLmNvbnN1bWVkKTsNCisNCisJCWNvdW50ID0gbWluKHNpemUsIGN1 cnJlbnRfc2dfcmVtX3NwYWNlKTsNCisJCXRvdGFsX2NvdW50ICs9IGNvdW50Ow0KKw0KKwkJbG9j YXRpb24gPSBzaGlmdF9wdHIoaXRlcmF0b3ItPnNnX2l0ZXIuYWRkciwNCisJCQkJICAgICBpdGVy YXRvci0+c2dfaXRlci5jb25zdW1lZCk7DQorDQorCQltZW1jcHkobG9jYXRpb24sIGJ1ZmZlciwg Y291bnQpOw0KKw0KKwkJYnVmZmVyID0gc2hpZnRfcHRyKGJ1ZmZlciwgY291bnQpOw0KKwkJc2l6 ZSAtPSBjb3VudDsNCisJCWl0ZXJhdG9yLT5zZ19pdGVyLmNvbnN1bWVkICs9IGNvdW50Ow0KKwl9 DQorDQorCXJldHVybiB0b3RhbF9jb3VudDsNCit9DQorDQoraW50IG1hdXNiX2RhdGFfaXRlcmF0 b3JfcmVhZChzdHJ1Y3QgbWF1c2JfZGF0YV9pdGVyICppdGVyYXRvciwNCisJCQkgICAgIHUzMiBi eXRlX251bSwNCisJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRhdGFfY2h1bmtzX2xpc3QsDQor CQkJICAgICB1MzIgKmRhdGFfY2h1bmtzX251bSkNCit7DQorCWlmIChpdGVyYXRvci0+YnVmZmVy KQ0KKwkJcmV0dXJuIG1hdXNiX3JlYWRfdmlydHVhbF9idWZmZXIoaXRlcmF0b3IsIGJ5dGVfbnVt LA0KKwkJCQkJCSBkYXRhX2NodW5rc19saXN0LA0KKwkJCQkJCSBkYXRhX2NodW5rc19udW0pOw0K KwllbHNlDQorCQlyZXR1cm4gbWF1c2JfcmVhZF9zY2F0dGVybGlzdF9idWZmZXIoaXRlcmF0b3Is IGJ5dGVfbnVtLA0KKwkJCQkJCSAgICAgZGF0YV9jaHVua3NfbGlzdCwNCisJCQkJCQkgICAgIGRh dGFfY2h1bmtzX251bSk7DQorfQ0KKw0KK3UzMiBtYXVzYl9kYXRhX2l0ZXJhdG9yX3dyaXRlKHN0 cnVjdCBtYXVzYl9kYXRhX2l0ZXIgKml0ZXJhdG9yLCB2b2lkICpidWZmZXIsDQorCQkJICAgICAg dTMyIGxlbmd0aCkNCit7DQorCWlmIChpdGVyYXRvci0+YnVmZmVyKQ0KKwkJcmV0dXJuIG1hdXNi X3dyaXRlX3ZpcnR1YWxfYnVmZmVyKGl0ZXJhdG9yLCBidWZmZXIsIGxlbmd0aCk7DQorCWVsc2UN CisJCXJldHVybiBtYXVzYl93cml0ZV9zY2F0dGVybGlzdF9idWZmZXIoaXRlcmF0b3IsIGJ1ZmZl ciwgbGVuZ3RoKTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIG1hdXNiX3NlZWtfdmlydHVh bF9idWZmZXIoc3RydWN0IG1hdXNiX2RhdGFfaXRlciAqaXRlcmF0b3IsDQorCQkJCQkgICAgIHUz MiBzZWVrX2RlbHRhKQ0KK3sNCisJaXRlcmF0b3ItPm9mZnNldCArPSBtaW4oc2Vla19kZWx0YSwg aXRlcmF0b3ItPmxlbmd0aCAtDQorCQkJCQkgICAgaXRlcmF0b3ItPm9mZnNldCk7DQorfQ0KKw0K K3N0YXRpYyB2b2lkIG1hdXNiX3NlZWtfc2NhdHRlcmxpc3RfYnVmZmVyKHN0cnVjdCBtYXVzYl9k YXRhX2l0ZXIgKml0ZXJhdG9yLA0KKwkJCQkJICB1MzIgc2Vla19kZWx0YSkNCit7DQorCXUzMiBy ZW1fYnl0ZXNfaW5fY3VycmVudF9zY2F0dGVyOw0KKw0KKwl3aGlsZSAoc2Vla19kZWx0YSkgew0K KwkJcmVtX2J5dGVzX2luX2N1cnJlbnRfc2NhdHRlciA9ICh1MzIpKGl0ZXJhdG9yLT5zZ19pdGVy Lmxlbmd0aCAtDQorCQkJCQkJaXRlcmF0b3ItPnNnX2l0ZXIuY29uc3VtZWQpOw0KKwkJaWYgKHJl bV9ieXRlc19pbl9jdXJyZW50X3NjYXR0ZXIgPD0gc2Vla19kZWx0YSkgew0KKwkJCWl0ZXJhdG9y LT5zZ19pdGVyLmNvbnN1bWVkICs9DQorCQkJICAgIHJlbV9ieXRlc19pbl9jdXJyZW50X3NjYXR0 ZXI7DQorCQkJc2Vla19kZWx0YSAtPSByZW1fYnl0ZXNfaW5fY3VycmVudF9zY2F0dGVyOw0KKwkJ CWlmICghc2dfbWl0ZXJfbmV4dCgmaXRlcmF0b3ItPnNnX2l0ZXIpKQ0KKwkJCQlicmVhazsNCisJ CQlpdGVyYXRvci0+c2dfaXRlci5jb25zdW1lZCA9IDA7DQorCQl9IGVsc2Ugew0KKwkJCWl0ZXJh dG9yLT5zZ19pdGVyLmNvbnN1bWVkICs9IHNlZWtfZGVsdGE7DQorCQkJYnJlYWs7DQorCQl9DQor CX0NCit9DQorDQordm9pZCBtYXVzYl9kYXRhX2l0ZXJhdG9yX3NlZWsoc3RydWN0IG1hdXNiX2Rh dGFfaXRlciAqaXRlcmF0b3IsDQorCQkJICAgICAgdTMyIHNlZWtfZGVsdGEpDQorew0KKwlpZiAo aXRlcmF0b3ItPmJ1ZmZlcikNCisJCW1hdXNiX3NlZWtfdmlydHVhbF9idWZmZXIoaXRlcmF0b3Is IHNlZWtfZGVsdGEpOw0KKwllbHNlDQorCQltYXVzYl9zZWVrX3NjYXR0ZXJsaXN0X2J1ZmZlcihp dGVyYXRvciwgc2Vla19kZWx0YSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX2NhbGN1bGF0 ZV9idWZmZXJfbGVuZ3RoKHN0cnVjdCBtYXVzYl9kYXRhX2l0ZXIgKml0ZXJhdG9yKQ0KK3sNCisJ LyogQ2FsY3VsYXRlIGJ1ZmZlciBsZW5ndGggKi8NCisJaWYgKGl0ZXJhdG9yLT5idWZmZXJfbGVu ID4gMCkgew0KKwkJLyogVHJhbnNmZXJfYnVmZmVyX2xlbmd0aCBpcyBwb3B1bGF0ZWQgKi8NCisJ CWl0ZXJhdG9yLT5sZW5ndGggPSBpdGVyYXRvci0+YnVmZmVyX2xlbjsNCisJfSBlbHNlIGlmIChp dGVyYXRvci0+c2cgJiYgaXRlcmF0b3ItPm51bV9zZ3MgIT0gMCkgew0KKwkJLyogVHJhbnNmZXJf YnVmZmVyX2xlbmd0aCBpcyBub3QgcG9wdWxhdGVkICovDQorCQlzZ19taXRlcl9zdGFydCgmaXRl cmF0b3ItPnNnX2l0ZXIsIGl0ZXJhdG9yLT5zZywNCisJCQkgICAgICAgaXRlcmF0b3ItPm51bV9z Z3MsIGl0ZXJhdG9yLT5mbGFncyk7DQorCQl3aGlsZSAoc2dfbWl0ZXJfbmV4dCgmaXRlcmF0b3It PnNnX2l0ZXIpKQ0KKwkJCWl0ZXJhdG9yLT5sZW5ndGggKz0gKHUzMilpdGVyYXRvci0+c2dfaXRl ci5sZW5ndGg7DQorCQlzZ19taXRlcl9zdG9wKCZpdGVyYXRvci0+c2dfaXRlcik7DQorCX0gZWxz ZSB7DQorCQlpdGVyYXRvci0+bGVuZ3RoID0gMDsNCisJfQ0KK30NCisNCit2b2lkIG1hdXNiX2lu aXRfZGF0YV9pdGVyYXRvcihzdHJ1Y3QgbWF1c2JfZGF0YV9pdGVyICppdGVyYXRvciwgdm9pZCAq YnVmZmVyLA0KKwkJCSAgICAgIHUzMiBidWZmZXJfbGVuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNn LA0KKwkJCSAgICAgIHVuc2lnbmVkIGludCBudW1fc2dzLCBib29sIGRpcmVjdGlvbikNCit7DQor CWl0ZXJhdG9yLT5vZmZzZXQgPSAwOw0KKwlpdGVyYXRvci0+YnVmZmVyICAgICA9IGJ1ZmZlcjsN CisJaXRlcmF0b3ItPmJ1ZmZlcl9sZW4gPSBidWZmZXJfbGVuOw0KKwlpdGVyYXRvci0+bGVuZ3Ro ICAgICA9IDA7DQorCWl0ZXJhdG9yLT5zZwkgICAgID0gc2c7DQorCWl0ZXJhdG9yLT5udW1fc2dz ICAgID0gbnVtX3NnczsNCisJaXRlcmF0b3ItPnNnX3N0YXJ0ZWQgPSAwOw0KKw0KKwltYXVzYl9j YWxjdWxhdGVfYnVmZmVyX2xlbmd0aChpdGVyYXRvcik7DQorDQorCWlmICghYnVmZmVyICYmIHNn ICYmIG51bV9zZ3MgIT0gMCkgew0KKwkJLyogU2NhdHRlcmxpc3QgcHJvdmlkZWQgKi8NCisJCWl0 ZXJhdG9yLT5mbGFncyA9IGRpcmVjdGlvbiA/IFNHX01JVEVSX1RPX1NHIDogU0dfTUlURVJfRlJP TV9TRzsNCisJCXNnX21pdGVyX3N0YXJ0KCZpdGVyYXRvci0+c2dfaXRlciwgc2csIG51bV9zZ3Ms DQorCQkJICAgICAgIGl0ZXJhdG9yLT5mbGFncyk7DQorCQlpdGVyYXRvci0+c2dfc3RhcnRlZCA9 IDE7DQorCX0NCit9DQorDQordm9pZCBtYXVzYl91bmluaXRfZGF0YV9pdGVyYXRvcihzdHJ1Y3Qg bWF1c2JfZGF0YV9pdGVyICppdGVyYXRvcikNCit7DQorCWl0ZXJhdG9yLT5vZmZzZXQgICAgID0g MDsNCisJaXRlcmF0b3ItPmxlbmd0aCAgICAgPSAwOw0KKwlpdGVyYXRvci0+YnVmZmVyICAgICA9 IE5VTEw7DQorCWl0ZXJhdG9yLT5idWZmZXJfbGVuID0gMDsNCisNCisJaWYgKGl0ZXJhdG9yLT5z Z19zdGFydGVkKQ0KKwkJc2dfbWl0ZXJfc3RvcCgmaXRlcmF0b3ItPnNnX2l0ZXIpOw0KKw0KKwlp dGVyYXRvci0+c2dfc3RhcnRlZCA9IDA7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfcmVzZXRfZGF0YV9p dGVyYXRvcihzdHJ1Y3QgbWF1c2JfZGF0YV9pdGVyICppdGVyYXRvcikNCit7DQorCWl0ZXJhdG9y LT5vZmZzZXQgPSAwOw0KKwlpZiAoaXRlcmF0b3ItPnNnX3N0YXJ0ZWQpIHsNCisJCXNnX21pdGVy X3N0b3AoJml0ZXJhdG9yLT5zZ19pdGVyKTsNCisJCWl0ZXJhdG9yLT5zZ19zdGFydGVkID0gMDsN CisJfQ0KKw0KKwlpZiAoIWl0ZXJhdG9yLT5idWZmZXIgJiYgaXRlcmF0b3ItPnNnICYmIGl0ZXJh dG9yLT5udW1fc2dzICE9IDApIHsNCisJCXNnX21pdGVyX3N0YXJ0KCZpdGVyYXRvci0+c2dfaXRl ciwgaXRlcmF0b3ItPnNnLA0KKwkJCSAgICAgICBpdGVyYXRvci0+bnVtX3NncywgaXRlcmF0b3It PmZsYWdzKTsNCisJCWl0ZXJhdG9yLT5zZ19zdGFydGVkID0gMTsNCisJfQ0KK30NCisNCit1MzIg bWF1c2JfZGF0YV9pdGVyYXRvcl9sZW5ndGgoc3RydWN0IG1hdXNiX2RhdGFfaXRlciAqaXRlcmF0 b3IpDQorew0KKwlyZXR1cm4gaXRlcmF0b3ItPmxlbmd0aDsNCit9DQpkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvbWF1c2JfaG9zdC9zcmMvdXRpbHMvbWF1c2JfbW1hcC5jIGIvZHJpdmVycy91c2Iv bWF1c2JfaG9zdC9zcmMvdXRpbHMvbWF1c2JfbW1hcC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0K aW5kZXggMDAwMDAwMDAwMDAwLi44YWIwNzNkN2Q2NjINCi0tLSAvZGV2L251bGwNCisrKyBiL2Ry aXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL3V0aWxzL21hdXNiX21tYXAuYw0KQEAgLTAsMCArMSwz ODEgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogQ29w eXJpZ2h0IChjKSAyMDE5IC0gMjAyMCBEaXNwbGF5TGluayAoVUspIEx0ZC4NCisgKg0KKyAqIFRo aXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4g dGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3INCisgKiBtb3JlIGRldGFpbHMu DQorICovDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX21tYXAuaCINCisNCisjaW5jbHVkZSA8bGlu dXgvYXRvbWljLmg+DQorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4NCisjaW5jbHVkZSA8bGludXgv Y29tcGxldGlvbi5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGlu dXgvZnMuaD4NCisjaW5jbHVkZSA8bGludXgvbW0uaD4NCisjaW5jbHVkZSA8bGludXgvc2xhYi5o Pg0KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24u aD4NCisNCisjaW5jbHVkZSAiY29tbW9uL21hdXNiX2RyaXZlcl9zdGF0dXMuaCINCisjaW5jbHVk ZSAiaHBhbC9ocGFsLmgiDQorI2luY2x1ZGUgInV0aWxzL21hdXNiX2xvZ3MuaCINCisjaW5jbHVk ZSAidXRpbHMvbWF1c2JfcmluZ19idWZmZXIuaCINCisNCisjZGVmaW5lIE1BVVNCX0tFUk5FTF9E RVZfTkFNRSAibWF1c2JfaG9zdCINCisjZGVmaW5lIE1BVVNCX1JFQURfREVWSUNFX1RJTUVPVVRf TVMgNTAwDQorDQorc3RhdGljIGRldl90IG1hdXNiX21ham9yX2tlcm5lbDsNCitzdGF0aWMgc3Ry dWN0IGNkZXYgIG1hdXNiX2tlcm5lbF9kZXY7DQorc3RhdGljIHN0cnVjdCBjbGFzcyAqbWF1c2Jf a2VybmVsX2NsYXNzOw0KKw0KK3N0YXRpYyB2b2lkIG1hdXNiX3ZtX29wZW4oc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpDQorew0KKwltYXVzYl9wcl9kZWJ1ZygiIik7DQorfQ0KKw0KK3N0YXRp YyB2b2lkIG1hdXNiX3ZtX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQ0KK3sNCisJ c3RydWN0IG1hdXNiX3JpbmdfYnVmZmVyICpidWZmZXIgPSBOVUxMLCAqbmV4dCA9IE5VTEw7DQor CXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOw0KKwl1NjQgcmluZ19idWZmZXJfaWQgPSAqKHU2NCAq KSh2bWEtPnZtX3ByaXZhdGVfZGF0YSk7DQorDQorCW1hdXNiX3ByX2luZm8oIlJlbGVhc2luZyBy aW5nIGJ1ZmZlciB3aXRoIGlkOiAlbGx1IiwgcmluZ19idWZmZXJfaWQpOw0KKwlzcGluX2xvY2tf aXJxc2F2ZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJ1 ZmZlciwgbmV4dCwgJm1zcy5hdmFpbGFibGVfcmluZ19idWZmZXJzLA0KKwkJCQkgbGlzdF9lbnRy eSkgew0KKwkJaWYgKGJ1ZmZlci0+aWQgPT0gcmluZ19idWZmZXJfaWQpIHsNCisJCQlsaXN0X2Rl bCgmYnVmZmVyLT5saXN0X2VudHJ5KTsNCisJCQltYXVzYl9yaW5nX2J1ZmZlcl9kZXN0cm95KGJ1 ZmZlcik7DQorCQkJa2ZyZWUoYnVmZmVyKTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KK30NCisNCisvKg0KKyAqIG1h dXNiX3ZtX2ZhdWx0IGlzIGNhbGxlZCB0aGUgZmlyc3QgdGltZSBhIG1lbW9yeSBhcmVhIGlzIGFj Y2Vzc2VkIHdoaWNoIGlzDQorICogbm90IGluIG1lbW9yeQ0KKyAqLw0KK3N0YXRpYyB2bV9mYXVs dF90IG1hdXNiX3ZtX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mKQ0KK3sNCisJbWF1c2JfcHJf ZGVidWcoIiIpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9v cGVyYXRpb25zX3N0cnVjdCBtYXVzYl92bV9vcHMgPSB7DQorCS5vcGVuICA9IG1hdXNiX3ZtX29w ZW4sDQorCS5jbG9zZSA9IG1hdXNiX3ZtX2Nsb3NlLA0KKwkuZmF1bHQgPSBtYXVzYl92bV9mYXVs dCwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5v ZGUsIHN0cnVjdCBmaWxlICpmaWxwKQ0KK3sNCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfZmlsZV9jbG9zZShzdHJ1 Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkNCit7DQorCWtmcmVlKGZpbHAtPnBy aXZhdGVfZGF0YSk7DQorCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7DQorDQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgc3NpemVfdCBtYXVzYl9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZp bHAsIGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwNCisJCQkgICAgICAgc2l6ZV90IHNpemUsIGxv ZmZfdCAqb2Zmc2V0KQ0KK3sNCisJc3NpemVfdCBudW1fb2ZfYnl0ZXNfdG9fcmVhZCA9IE1BVVNC X01BWF9OVU1fT0ZfTUFfREVWUyAqDQorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1hdXNiX2V2 ZW50c19ub3RpZmljYXRpb24pOw0KKwl1bnNpZ25lZCBsb25nIG51bV9vZl9ieXRlc19ub3RfY29w aWVkOw0KKwlpbnQgY29tcGxldGVkX2V2ZW50czsNCisJaW50IHJpbmdfZXZlbnRzOw0KKwlzdHJ1 Y3QgbWF1c2JfcmluZ19idWZmZXIgKnJpbmdfYnVmZmVyOw0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNl CSAqZGV2Ow0KKwlzdHJ1Y3QgY29tcGxldGlvbgkgKnJpbmdfaGFzX2V2ZW50czsNCisJdTggY3Vy cmVudF9kZXZpY2UgPSAwOw0KKwlzOCBmYWlsX3JldF92YWw7DQorCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQorCXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCisJbG9uZyBzdGF0dXM7DQorDQorCS8qIFJl c2V0IGhlYXJ0YmVhdCB0aW1lciBldmVudHMgKi8NCisJbWF1c2JfcmVzZXRfaGVhcnRiZWF0X2Nu dCgpOw0KKw0KKwlpZiAoKHNzaXplX3Qpc2l6ZSAhPSBudW1fb2ZfYnl0ZXNfdG9fcmVhZCkgew0K KwkJbWF1c2JfcHJfYWxlcnQoIkRpZmZlcmVudCBleHBlY3RlZCBieXRlcyB0byByZWFkICglbGQp IGZyb20gYWN0dWFsIHNpemUgKCVsZCkiLA0KKwkJCSAgICAgICBudW1fb2ZfYnl0ZXNfdG9fcmVh ZCwgc2l6ZSk7DQorCQlmYWlsX3JldF92YWwgPSBNQVVTQl9EUklWRVJfQkFEX1JFQURfQlVGRkVS X1NJWkU7DQorCQlpZiAoY29weV90b191c2VyKHVzZXJfYnVmZmVyLCAmZmFpbF9yZXRfdmFsLA0K KwkJCQkgc2l6ZW9mKGZhaWxfcmV0X3ZhbCkpICE9IDApIHsNCisJCQltYXVzYl9wcl93YXJuKCJG YWlsZWQgdG8gc2V0IGVycm9yIGNvZGUuIik7DQorCQl9DQorCQlyZXR1cm4gTUFVU0JfRFJJVkVS X1JFQURfRVJST1I7DQorCX0NCisNCisJLyogSWYgc3VzcGVuZC9oaWJlcm5hdGUgaGFwcGVuZWQg ZGVsZXRlIGFsbCBkZXZpY2VzICovDQorCWlmIChhdG9taWNfeGNoZygmbXNzLm51bV9vZl90cmFu c2l0aW9uc190b19zbGVlcCwgMCkpIHsNCisJCW1hdXNiX3ByX2FsZXJ0KCJTdXNwZW5kIHN5c3Rl bSBldmVudCBkZXRlY3RlZCIpOw0KKwkJZmFpbF9yZXRfdmFsID0gTUFVU0JfRFJJVkVSX1NZU1RF TV9TVVNQRU5ERUQ7DQorCQlpZiAoY29weV90b191c2VyKHVzZXJfYnVmZmVyLCAmZmFpbF9yZXRf dmFsLA0KKwkJCQkgc2l6ZW9mKGZhaWxfcmV0X3ZhbCkpICE9IDApIHsNCisJCQltYXVzYl9wcl93 YXJuKCJGYWlsZWQgdG8gc2V0IGVycm9yIGNvZGUuIik7DQorCQl9DQorCQlyZXR1cm4gTUFVU0Jf RFJJVkVSX1JFQURfRVJST1I7DQorCX0NCisNCisJcmluZ19oYXNfZXZlbnRzID0gJm1zcy5yaW5n c19ldmVudHMubWF1c2JfcmluZ19oYXNfZXZlbnRzOw0KKwl0aW1lb3V0ID0gbXNlY3NfdG9famlm ZmllcyhNQVVTQl9SRUFEX0RFVklDRV9USU1FT1VUX01TKTsNCisJc3RhdHVzID0gd2FpdF9mb3Jf Y29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocmluZ19oYXNfZXZlbnRzLA0KKwkJCQkJ CQkgICB0aW1lb3V0KTsNCisJcmVpbml0X2NvbXBsZXRpb24ocmluZ19oYXNfZXZlbnRzKTsNCisN CisJaWYgKGF0b21pY19yZWFkKCZtc3MucmluZ3NfZXZlbnRzLm1hdXNiX3N0b3BfcmVhZGluZ19y aW5nX2V2ZW50cykpIHsNCisJCW1hdXNiX3ByX2FsZXJ0KCJSaW5nIGV2ZW50cyBzdG9wcGVkIik7 DQorCQlmYWlsX3JldF92YWwgPSBNQVVTQl9EUklWRVJfUklOR19FVkVOVFNfU1RPUFBFRDsNCisJ CWlmIChjb3B5X3RvX3VzZXIodXNlcl9idWZmZXIsICZmYWlsX3JldF92YWwsDQorCQkJCSBzaXpl b2YoZmFpbF9yZXRfdmFsKSkgIT0gMCkgew0KKwkJCW1hdXNiX3ByX3dhcm4oIkZhaWxlZCB0byBz ZXQgZXJyb3IgY29kZS4iKTsNCisJCX0NCisJCXJldHVybiBNQVVTQl9EUklWRVJfUkVBRF9FUlJP UjsNCisJfQ0KKw0KKwkvKiBUaGVyZSBhcmUgbm8gbmV3IGV2ZW50cyAtIHdhaXRpbmcgZm9yIGV2 ZW50cyBoaXQgdGltZW91dCAqLw0KKwlpZiAoc3RhdHVzID09IDApDQorCQlyZXR1cm4gTUFVU0Jf RFJJVkVSX1JFQURfVElNRU9VVDsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1zcy5sb2NrLCBm bGFncyk7DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmbXNzLm1hZGV2X2xpc3QsIGxp c3RfZW50cnkpIHsNCisJCW1zcy5ldmVudHNbY3VycmVudF9kZXZpY2VdLm1hZGV2X2FkZHIgPSBk ZXYtPm1hZGV2X2FkZHI7DQorCQlyaW5nX2J1ZmZlciA9IGRldi0+cmluZ19idWZmZXI7DQorCQly aW5nX2V2ZW50cyA9IGF0b21pY194Y2hnKCZyaW5nX2J1ZmZlci0+bWF1c2JfcmluZ19ldmVudHMs IDApOw0KKwkJY29tcGxldGVkX2V2ZW50cyA9DQorCQkJYXRvbWljX3hjaGcoJnJpbmdfYnVmZmVy LT5tYXVzYl9jb21wbGV0ZWRfdXNlcl9ldmVudHMsDQorCQkJCSAgICAwKTsNCisJCW1zcy5ldmVu dHNbY3VycmVudF9kZXZpY2VdLm51bV9vZl9ldmVudHMgPSAodTE2KXJpbmdfZXZlbnRzOw0KKwkJ bXNzLmV2ZW50c1tjdXJyZW50X2RldmljZV0ubnVtX29mX2NvbXBsZXRlZF9ldmVudHMgPQ0KKwkJ CQkodTE2KWNvbXBsZXRlZF9ldmVudHM7DQorCQlpZiAoKytjdXJyZW50X2RldmljZSA9PSBNQVVT Ql9NQVhfTlVNX09GX01BX0RFVlMpDQorCQkJYnJlYWs7DQorCX0NCisNCisJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisNCisJbnVtX29mX2J5dGVzX3RvX3JlYWQg PQ0KKwkJKHNzaXplX3QpKGN1cnJlbnRfZGV2aWNlICoNCisJCQkgIHNpemVvZihzdHJ1Y3QgbWF1 c2JfZXZlbnRzX25vdGlmaWNhdGlvbikpOw0KKwludW1fb2ZfYnl0ZXNfbm90X2NvcGllZCA9DQor CQljb3B5X3RvX3VzZXIodXNlcl9idWZmZXIsICZtc3MuZXZlbnRzLA0KKwkJCSAgICAgKHVuc2ln bmVkIGxvbmcpbnVtX29mX2J5dGVzX3RvX3JlYWQpOw0KKw0KKwltYXVzYl9wcl9kZWJ1ZygibnVt X29mX2J5dGVzX25vdF9jb3BpZWQgJWxkLCBudW1fb2ZfYnl0ZXNfdG9fcmVhZCAlbGQiLA0KKwkJ ICAgICAgIG51bV9vZl9ieXRlc19ub3RfY29waWVkLCBudW1fb2ZfYnl0ZXNfdG9fcmVhZCk7DQor DQorCWlmIChudW1fb2ZfYnl0ZXNfbm90X2NvcGllZCkgew0KKwkJZmFpbF9yZXRfdmFsID0gTUFV U0JfRFJJVkVSX0NPUFlfVE9fQlVGRkVSX0ZBSUxFRDsNCisJCWlmIChjb3B5X3RvX3VzZXIodXNl cl9idWZmZXIsICZmYWlsX3JldF92YWwsDQorCQkJCSBzaXplb2YoZmFpbF9yZXRfdmFsKSkgIT0g MCkgew0KKwkJCW1hdXNiX3ByX3dhcm4oIkZhaWxlZCB0byBzZXQgZXJyb3IgY29kZS4iKTsNCisJ CX0NCisJCXJldHVybiBNQVVTQl9EUklWRVJfUkVBRF9FUlJPUjsNCisJfQ0KKw0KKwlyZXR1cm4g bnVtX29mX2J5dGVzX3RvX3JlYWQ7DQorfQ0KKw0KK3N0YXRpYyBzc2l6ZV90IG1hdXNiX2ZpbGVf d3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsDQorCQkJ CXNpemVfdCBzaXplLCBsb2ZmX3QgKm9mZnNldCkNCit7DQorCXNzaXplX3QgbnVtX29mX2J5dGVz X3RvX3dyaXRlID0NCisJCQkJc2l6ZW9mKHN0cnVjdCBtYXVzYl9ldmVudHNfbm90aWZpY2F0aW9u KTsNCisJc3RydWN0IG1hdXNiX2V2ZW50c19ub3RpZmljYXRpb24gbm90aWZpY2F0aW9uOw0KKwl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KKwlzdHJ1Y3QgbWF1c2JfZGV2aWNlICpkZXY7DQorDQorCWlm IChzaXplICE9IChzaXplX3QpbnVtX29mX2J5dGVzX3RvX3dyaXRlKSB7DQorCQltYXVzYl9wcl9h bGVydCgiRGlmZmVyZW50IGV4cGVjdGVkIGJ5dGVzIHRvIHdyaXRlICglbGQpIGZyb20gYWN0dWFs IHNpemUgKCVsZCkiLA0KKwkJCSAgICAgICBudW1fb2ZfYnl0ZXNfdG9fd3JpdGUsIHNpemUpOw0K KwkJcmV0dXJuIE1BVVNCX0RSSVZFUl9XUklURV9FUlJPUjsNCisJfQ0KKw0KKwljb3B5X2Zyb21f dXNlcigmbm90aWZpY2F0aW9uLCBidWZmZXIsIHNpemUpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2 ZSgmbXNzLmxvY2ssIGZsYWdzKTsNCisJZGV2ID0gbWF1c2JfZ2V0X2Rldl9mcm9tX2FkZHJfdW5z YWZlKG5vdGlmaWNhdGlvbi5tYWRldl9hZGRyKTsNCisNCisJaWYgKCFkZXYpIHsNCisJCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJm1zcy5sb2NrLCBmbGFncyk7DQorCQlyZXR1cm4gMDsNCisJfQ0K Kw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5udW1fb2ZfdXNlcl9ldmVudHNfbG9jaywgZmxh Z3MpOw0KKwlkZXYtPm51bV9vZl91c2VyX2V2ZW50cyArPSBub3RpZmljYXRpb24ubnVtX29mX2V2 ZW50czsNCisJZGV2LT5udW1fb2ZfY29tcGxldGVkX2V2ZW50cyArPSBub3RpZmljYXRpb24ubnVt X29mX2NvbXBsZXRlZF9ldmVudHM7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bnVt X29mX3VzZXJfZXZlbnRzX2xvY2ssIGZsYWdzKTsNCisNCisJcXVldWVfd29yayhkZXYtPndvcmtx LCAmZGV2LT53b3JrKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNzLmxvY2ssIGZsYWdz KTsNCisNCisJcmV0dXJuIG51bV9vZl9ieXRlc190b193cml0ZTsNCit9DQorDQorc3RhdGljIGlu bGluZSB1bnNpZ25lZCBsb25nIG1hdXNiX3JpbmdfYnVmZmVyX2xlbmd0aCh2b2lkKQ0KK3sNCisJ aW50IHBhZ2Vfb3JkZXIgPSBtYXVzYl9nZXRfcGFnZV9vcmRlcigyICogTUFVU0JfUklOR19CVUZG RVJfU0laRSwNCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgbWF1c2JfZXZlbnQpKTsNCisJcmV0 dXJuIFBBR0VfU0laRSA8PCBwYWdlX29yZGVyOw0KK30NCisNCitzdGF0aWMgaW50IG1hdXNiX21t YXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQ0KK3sNCisJ dW5zaWduZWQgbG9uZyBzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0Ow0KKwlpbnQg cmV0Ow0KKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3Mg PSAwOw0KKwlzdHJ1Y3QgbWF1c2JfcmluZ19idWZmZXIgKnJpbmdfYnVmZmVyID0ga3phbGxvYyhz aXplb2YoKnJpbmdfYnVmZmVyKSwNCisJCQkJCQkJR0ZQX0tFUk5FTCk7DQorCWlmICghcmluZ19i dWZmZXIpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcmV0ID0gbWF1c2JfcmluZ19idWZmZXJf aW5pdChyaW5nX2J1ZmZlcik7DQorCWlmIChyZXQgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIlJp bmcgYnVmZmVyIGluaXQgZmFpbGVkIik7DQorCQlnb3RvIHJlbGVhc2VfcmluZ19idWZmZXI7DQor CX0NCisNCisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihyaW5nX2J1ZmZl ci0+aWQpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCF2bWEtPnZtX3ByaXZhdGVfZGF0YSkgew0KKwkJ cmV0ID0gLUVOT01FTTsNCisJCWdvdG8gcmVsZWFzZV9yaW5nX2J1ZmZlcjsNCisJfQ0KKw0KKwlm aWxwLT5wcml2YXRlX2RhdGEgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsNCisNCisJaWYgKHNpemUg PiBtYXVzYl9yaW5nX2J1ZmZlcl9sZW5ndGgoKSkgew0KKwkJbWF1c2JfcHJfZXJyKCJJbnZhbGlk IG1lbW9yeSBzaXplIHRvIG1hcCIpOw0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gcmVsZWFz ZV9yaW5nX2J1ZmZlcjsNCisJfQ0KKw0KKwl2bWEtPnZtX29wcyA9ICZtYXVzYl92bV9vcHM7DQor CW1hdXNiX3ZtX29wZW4odm1hKTsNCisNCisJcGFnZSA9IHZpcnRfdG9fcGFnZShyaW5nX2J1ZmZl ci0+dG9fdXNlcl9idWZmZXIpOw0KKwlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZt X3N0YXJ0LCBwYWdlX3RvX3BmbihwYWdlKSwgc2l6ZSwNCisJCQkgICAgICB2bWEtPnZtX3BhZ2Vf cHJvdCk7DQorCWlmIChyZXQgPCAwKSB7DQorCQltYXVzYl9wcl9lcnIoIkNvdWxkIG5vdCBtYXAg dGhlIGFkZHJlc3MgYXJlYSIpOw0KKwkJZ290byByZWxlYXNlX3JpbmdfYnVmZmVyOw0KKwl9DQor DQorCXNwaW5fbG9ja19pcnFzYXZlKCZtc3MubG9jaywgZmxhZ3MpOw0KKwlyaW5nX2J1ZmZlci0+ aWQgPSBtc3MucmluZ19idWZmZXJfaWQrKzsNCisJKih1NjQgKikodm1hLT52bV9wcml2YXRlX2Rh dGEpID0gcmluZ19idWZmZXItPmlkOw0KKwlsaXN0X2FkZF90YWlsKCZyaW5nX2J1ZmZlci0+bGlz dF9lbnRyeSwgJm1zcy5hdmFpbGFibGVfcmluZ19idWZmZXJzKTsNCisJbWF1c2JfcHJfaW5mbygi QWxsb2NhdGVkIHJpbmcgYnVmZmVyIHdpdGggaWQ6ICVsbHUiLCByaW5nX2J1ZmZlci0+aWQpOw0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc3MubG9jaywgZmxhZ3MpOw0KKw0KKwlyZXR1cm4g MDsNCisNCityZWxlYXNlX3JpbmdfYnVmZmVyOg0KKwltYXVzYl9yaW5nX2J1ZmZlcl9kZXN0cm95 KHJpbmdfYnVmZmVyKTsNCisJa2ZyZWUocmluZ19idWZmZXIpOw0KKwlyZXR1cm4gcmV0Ow0KK30N CisNCitzdGF0aWMgY2hhciAqbWF1c2Jfa2VybmVsX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2 LCB1bW9kZV90ICptb2RlKQ0KK3sNCisJaWYgKCFtb2RlKQ0KKwkJcmV0dXJuIE5VTEw7DQorCSpt b2RlID0gMDY2NjsNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZmlsZV9vcGVyYXRpb25zIG1hdXNiX2ZpbGVfb3BzID0gew0KKwkub3BlbgkgPSBtYXVzYl9maWxl X29wZW4sDQorCS5yZWxlYXNlID0gbWF1c2JfZmlsZV9jbG9zZSwNCisJLnJlYWQJID0gbWF1c2Jf ZmlsZV9yZWFkLA0KKwkud3JpdGUgICA9IG1hdXNiX2ZpbGVfd3JpdGUsDQorCS5tbWFwCSA9IG1h dXNiX21tYXAsDQorfTsNCisNCitpbnQgbWF1c2JfY3JlYXRlX2Rldih2b2lkKQ0KK3sNCisJaW50 IGRldmljZV9jcmVhdGVkID0gMDsNCisJaW50IHN0YXR1cyA9IGFsbG9jX2NocmRldl9yZWdpb24o Jm1hdXNiX21ham9yX2tlcm5lbCwgMCwgMSwNCisJCQkJCSBNQVVTQl9LRVJORUxfREVWX05BTUUg Il9wcm9jIik7DQorCWlmIChzdGF0dXMpDQorCQlnb3RvIGNsZWFudXA7DQorDQorCW1hdXNiX2tl cm5lbF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwNCisJCQkJCSAgTUFVU0JfS0VS TkVMX0RFVl9OQU1FICJfc3lzIik7DQorCWlmICghbWF1c2Jfa2VybmVsX2NsYXNzKSB7DQorCQlz dGF0dXMgPSAtRU5PTUVNOw0KKwkJZ290byBjbGVhbnVwOw0KKwl9DQorDQorCW1hdXNiX2tlcm5l bF9jbGFzcy0+ZGV2bm9kZSA9IG1hdXNiX2tlcm5lbF9kZXZub2RlOw0KKw0KKwlpZiAoIWRldmlj ZV9jcmVhdGUobWF1c2Jfa2VybmVsX2NsYXNzLCBOVUxMLCBtYXVzYl9tYWpvcl9rZXJuZWwsIE5V TEwsDQorCQkJICAgTUFVU0JfS0VSTkVMX0RFVl9OQU1FICJfZGV2IikpIHsNCisJCXN0YXR1cyA9 IC1FTk9NRU07DQorCQlnb3RvIGNsZWFudXA7DQorCX0NCisJZGV2aWNlX2NyZWF0ZWQgPSAxOw0K KwljZGV2X2luaXQoJm1hdXNiX2tlcm5lbF9kZXYsICZtYXVzYl9maWxlX29wcyk7DQorCXN0YXR1 cyA9IGNkZXZfYWRkKCZtYXVzYl9rZXJuZWxfZGV2LCBtYXVzYl9tYWpvcl9rZXJuZWwsIDEpOw0K KwlpZiAoc3RhdHVzKQ0KKwkJZ290byBjbGVhbnVwOw0KKwlyZXR1cm4gMDsNCitjbGVhbnVwOg0K KwltYXVzYl9jbGVhbnVwX2RldihkZXZpY2VfY3JlYXRlZCk7DQorCXJldHVybiBzdGF0dXM7DQor fQ0KKw0KK3ZvaWQgbWF1c2JfY2xlYW51cF9kZXYoaW50IGRldmljZV9jcmVhdGVkKQ0KK3sNCisJ aWYgKGRldmljZV9jcmVhdGVkKSB7DQorCQlkZXZpY2VfZGVzdHJveShtYXVzYl9rZXJuZWxfY2xh c3MsIG1hdXNiX21ham9yX2tlcm5lbCk7DQorCQltYXVzYl9wcl9pbmZvKCJkZXZpY2UgZGVzdHJv eWVkIik7DQorCQljZGV2X2RlbCgmbWF1c2Jfa2VybmVsX2Rldik7DQorCQltYXVzYl9wcl9pbmZv KCJkZXZpY2UgZGVsZXRlZCIpOw0KKwl9DQorCWlmIChtYXVzYl9rZXJuZWxfY2xhc3MpIHsNCisJ CWNsYXNzX2Rlc3Ryb3kobWF1c2Jfa2VybmVsX2NsYXNzKTsNCisJCW1hdXNiX3ByX2luZm8oImNs YXNzIGRlc3Ryb3llZCIpOw0KKwl9DQorDQorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihtYXVz Yl9tYWpvcl9rZXJuZWwsIDEpOw0KKwltYXVzYl9wcl9pbmZvKCJ1bnJlZ2lzdGVyZWQiKTsNCit9 DQorDQordm9pZCBtYXVzYl9ub3RpZnlfY29tcGxldGVkX3VzZXJfZXZlbnRzKHN0cnVjdCBtYXVz Yl9yaW5nX2J1ZmZlciAqcmluZ19idWZmZXIpDQorew0KKwlpbnQgY29tcGxldGVkOw0KKw0KKwlj b21wbGV0ZWQgPQ0KKwkJYXRvbWljX2luY19yZXR1cm4oJnJpbmdfYnVmZmVyLT5tYXVzYl9jb21w bGV0ZWRfdXNlcl9ldmVudHMpOw0KKwltYXVzYl9wcl9kZWJ1ZygibWF1c2JfY29tcGxldGVkX3Vz ZXJfZXZlbnRzIElOQ1JFTUVOVEVEICVkIiwgY29tcGxldGVkKTsNCisJaWYgKGNvbXBsZXRlZCA+ IE1BVVNCX1JJTkdfQlVGRkVSX1NJWkUgLyAxNikNCisJCWNvbXBsZXRlKCZtc3MucmluZ3NfZXZl bnRzLm1hdXNiX3JpbmdfaGFzX2V2ZW50cyk7DQorfQ0KKw0KK3ZvaWQgbWF1c2Jfbm90aWZ5X3Jp bmdfZXZlbnRzKHN0cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAqcmluZ19idWZmZXIpDQorew0KKwlp bnQgZXZlbnRzOw0KKw0KKwlldmVudHMgPSBhdG9taWNfaW5jX3JldHVybigmcmluZ19idWZmZXIt Pm1hdXNiX3JpbmdfZXZlbnRzKTsNCisJaWYgKGV2ZW50cyA9PSAxKQ0KKwkJY29tcGxldGUoJm1z cy5yaW5nc19ldmVudHMubWF1c2JfcmluZ19oYXNfZXZlbnRzKTsNCit9DQorDQordm9pZCBtYXVz Yl9zdG9wX3JpbmdfZXZlbnRzKHZvaWQpDQorew0KKwlhdG9taWNfc2V0KCZtc3MucmluZ3NfZXZl bnRzLm1hdXNiX3N0b3BfcmVhZGluZ19yaW5nX2V2ZW50cywgMSk7DQorCWNvbXBsZXRlKCZtc3Mu cmluZ3NfZXZlbnRzLm1hdXNiX3JpbmdfaGFzX2V2ZW50cyk7DQorfQ0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL3V0aWxzL21hdXNiX3JpbmdfYnVmZmVyLmMgYi9kcml2 ZXJzL3VzYi9tYXVzYl9ob3N0L3NyYy91dGlscy9tYXVzYl9yaW5nX2J1ZmZlci5jDQpuZXcgZmls ZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4yZjMwNTIzMDQyMTUNCi0tLSAvZGV2 L251bGwNCisrKyBiL2RyaXZlcnMvdXNiL21hdXNiX2hvc3Qvc3JjL3V0aWxzL21hdXNiX3Jpbmdf YnVmZmVyLmMNCkBAIC0wLDAgKzEsMTY4IEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjANCisvKg0KKyAqIENvcHlyaWdodCAoYykgMjAxOSAtIDIwMjAgRGlzcGxheUxpbmsg KFVLKSBMdGQuDQorICoNCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5k IGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KKyAqIExpY2Vuc2UgdjIuIFNl ZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUg Zm9yDQorICogbW9yZSBkZXRhaWxzLg0KKyAqLw0KKyNpbmNsdWRlICJ1dGlscy9tYXVzYl9yaW5n X2J1ZmZlci5oIg0KKw0KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2NpcmNfYnVmLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9mcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+DQorI2luY2x1ZGUgPGxpbnV4L21tLmg+ DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4N CisNCisjaW5jbHVkZSAiaHBhbC9tYXVzYl9ldmVudHMuaCINCisjaW5jbHVkZSAidXRpbHMvbWF1 c2JfbG9ncy5oIg0KKw0KK3N0YXRpYyBpbnQgbWF1c2JfcmluZ19idWZmZXJfZ2V0KHN0cnVjdCBt YXVzYl9yaW5nX2J1ZmZlciAqcmluZywNCisJCQkJIHN0cnVjdCBtYXVzYl9ldmVudCAqZXZlbnQp DQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUo JnJpbmctPmxvY2ssIGZsYWdzKTsNCisJaWYgKENJUkNfQ05UKHJpbmctPmhlYWQsIHJpbmctPnRh aWwsIE1BVVNCX1JJTkdfQlVGRkVSX1NJWkUpIDwgMSkgew0KKwkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOw0KKwkJcmV0dXJuIC1FTk9TUEM7DQorCX0NCisJbWVt Y3B5KGV2ZW50LCByaW5nLT50b191c2VyX2J1ZmZlciArIHJpbmctPnRhaWwsIHNpemVvZigqZXZl bnQpKTsNCisJbWF1c2JfcHJfZGVidWcoIkhFQUQ9JWQsIFRBSUw9JWQiLCByaW5nLT5oZWFkLCBy aW5nLT50YWlsKTsNCisJcmluZy0+dGFpbCA9IChyaW5nLT50YWlsICsgMSkgJiAoTUFVU0JfUklO R19CVUZGRVJfU0laRSAtIDEpOw0KKwltYXVzYl9wcl9kZWJ1ZygiSEVBRD0lZCwgVEFJTD0lZCIs IHJpbmctPmhlYWQsIHJpbmctPnRhaWwpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5n LT5sb2NrLCBmbGFncyk7DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbWF1c2JfcmluZ19idWZm ZXJfaW5pdChzdHJ1Y3QgbWF1c2JfcmluZ19idWZmZXIgKnJpbmcpDQorew0KKwl1bnNpZ25lZCBp bnQgcGFnZV9vcmRlciA9DQorCQltYXVzYl9nZXRfcGFnZV9vcmRlcigyICogTUFVU0JfUklOR19C VUZGRVJfU0laRSwNCisJCQkJICAgICBzaXplb2Yoc3RydWN0IG1hdXNiX2V2ZW50KSk7DQorCXJp bmctPnRvX3VzZXJfYnVmZmVyID0NCisJCShzdHJ1Y3QgbWF1c2JfZXZlbnQgKilfX2dldF9mcmVl X3BhZ2VzKEdGUF9LRVJORUwsIHBhZ2Vfb3JkZXIpOw0KKwlpZiAoIXJpbmctPnRvX3VzZXJfYnVm ZmVyKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorCXJpbmctPmZyb21fdXNlcl9idWZmZXIgPSByaW5n LT50b191c2VyX2J1ZmZlciArIE1BVVNCX1JJTkdfQlVGRkVSX1NJWkU7DQorCXJpbmctPmhlYWQg PSAwOw0KKwlyaW5nLT50YWlsID0gMDsNCisJcmluZy0+Y3VycmVudF9mcm9tX3VzZXIgPSAwOw0K KwlyaW5nLT5idWZmZXJfZnVsbCA9IGZhbHNlOw0KKwlzcGluX2xvY2tfaW5pdCgmcmluZy0+bG9j ayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbWF1c2JfcmluZ19idWZmZXJfcHV0KHN0 cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAqcmluZywNCisJCQkgIHN0cnVjdCBtYXVzYl9ldmVudCAq ZXZlbnQpDQorew0KKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsNCisNCisJc3Bpbl9sb2NrX2ly cXNhdmUoJnJpbmctPmxvY2ssIGZsYWdzKTsNCisNCisJaWYgKHJpbmctPmJ1ZmZlcl9mdWxsKSB7 DQorCQltYXVzYl9wcl9lcnIoIlJpbmcgYnVmZmVyIGlzIGZ1bGwiKTsNCisJCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJnJpbmctPmxvY2ssIGZsYWdzKTsNCisJCXJldHVybiAtRU5PU1BDOw0KKwl9 DQorDQorCWlmIChDSVJDX1NQQUNFKHJpbmctPmhlYWQsIHJpbmctPnRhaWwsIE1BVVNCX1JJTkdf QlVGRkVSX1NJWkUpIDwgMikgew0KKwkJbWF1c2JfcHJfZXJyKCJSaW5nIGJ1ZmZlciBjYXBhY2l0 eSBleGNlZWRlZCwgZGlzY29ubmVjdGluZyBkZXZpY2UiKTsNCisJCXJpbmctPmJ1ZmZlcl9mdWxs ID0gdHJ1ZTsNCisJCW1hdXNiX2Rpc2NvbmVjdF9ldmVudF91bnNhZmUocmluZywgZXZlbnQtPm1h ZGV2X2FkZHIpOw0KKwkJcmluZy0+aGVhZCA9IChyaW5nLT5oZWFkICsgMSkgJiAoTUFVU0JfUklO R19CVUZGRVJfU0laRSAtIDEpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9j aywgZmxhZ3MpOw0KKwkJcmV0dXJuIC1FTk9TUEM7DQorCX0NCisJbWVtY3B5KHJpbmctPnRvX3Vz ZXJfYnVmZmVyICsgcmluZy0+aGVhZCwgZXZlbnQsIHNpemVvZigqZXZlbnQpKTsNCisJbWF1c2Jf cHJfZGVidWcoIkhFQUQ9JWQsIFRBSUw9JWQiLCByaW5nLT5oZWFkLCByaW5nLT50YWlsKTsNCisJ cmluZy0+aGVhZCA9IChyaW5nLT5oZWFkICsgMSkgJiAoTUFVU0JfUklOR19CVUZGRVJfU0laRSAt IDEpOw0KKwltYXVzYl9wcl9kZWJ1ZygiSEVBRD0lZCwgVEFJTD0lZCIsIHJpbmctPmhlYWQsIHJp bmctPnRhaWwpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7 DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbWF1c2JfcmluZ19idWZmZXJfbW92ZV90YWlsKHN0 cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAqcmluZywgdTMyIGNvdW50KQ0KK3sNCisJdW5zaWduZWQg bG9uZyBmbGFncyA9IDA7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFn cyk7DQorCWlmIChDSVJDX0NOVChyaW5nLT5oZWFkLCByaW5nLT50YWlsLCBNQVVTQl9SSU5HX0JV RkZFUl9TSVpFKSA8IGNvdW50KSB7DQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5s b2NrLCBmbGFncyk7DQorCQlyZXR1cm4gLUVOT1NQQzsNCisJfQ0KKwltYXVzYl9wcl9kZWJ1Zygi b2xkIEhFQUQ9JWQsIFRBSUw9JWQiLCByaW5nLT5oZWFkLCByaW5nLT50YWlsKTsNCisJcmluZy0+ dGFpbCA9IChyaW5nLT50YWlsICsgKGludCljb3VudCkgJiAoTUFVU0JfUklOR19CVUZGRVJfU0la RSAtIDEpOw0KKwltYXVzYl9wcl9kZWJ1ZygibmV3IEhFQUQ9JWQsIFRBSUw9JWQiLCByaW5nLT5o ZWFkLCByaW5nLT50YWlsKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywg ZmxhZ3MpOw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtYXVzYl9yaW5nX2J1ZmZlcl9jbGVh bnVwKHN0cnVjdCBtYXVzYl9yaW5nX2J1ZmZlciAqcmluZykNCit7DQorCXN0cnVjdCBtYXVzYl9l dmVudCBldmVudDsNCisNCisJd2hpbGUgKG1hdXNiX3JpbmdfYnVmZmVyX2dldChyaW5nLCAmZXZl bnQpID09IDApDQorCQltYXVzYl9jbGVhbnVwX3JpbmdfYnVmZmVyX2V2ZW50KCZldmVudCk7DQor fQ0KKw0KK3ZvaWQgbWF1c2JfcmluZ19idWZmZXJfZGVzdHJveShzdHJ1Y3QgbWF1c2JfcmluZ19i dWZmZXIgKnJpbmcpDQorew0KKwl1bnNpZ25lZCBpbnQgcGFnZV9vcmRlciA9DQorCQltYXVzYl9n ZXRfcGFnZV9vcmRlcigyICogTUFVU0JfUklOR19CVUZGRVJfU0laRSwNCisJCQkJICAgICBzaXpl b2Yoc3RydWN0IG1hdXNiX2V2ZW50KSk7DQorCWlmIChyaW5nICYmIHJpbmctPnRvX3VzZXJfYnVm ZmVyKQ0KKwkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylyaW5nLT50b191c2VyX2J1ZmZlciwg cGFnZV9vcmRlcik7DQorfQ0KKw0KK3ZvaWQgbWF1c2JfY2xlYW51cF9yaW5nX2J1ZmZlcl9ldmVu dChzdHJ1Y3QgbWF1c2JfZXZlbnQgKmV2ZW50KQ0KK3sNCisJbWF1c2JfcHJfZGVidWcoImV2ZW50 PSVkIiwgZXZlbnQtPnR5cGUpOw0KKwlzd2l0Y2ggKGV2ZW50LT50eXBlKSB7DQorCWNhc2UgTUFV U0JfRVZFTlRfVFlQRV9TRU5EX0RBVEFfTVNHOg0KKwkJbWF1c2JfY2xlYW51cF9zZW5kX2RhdGFf bXNnX2V2ZW50KGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfUkVD RUlWRURfREFUQV9NU0c6DQorCQltYXVzYl9jbGVhbnVwX3JlY2VpdmVkX2RhdGFfbXNnX2V2ZW50 KGV2ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfREVMRVRFX0RBVEFf VFJBTlNGRVI6DQorCQltYXVzYl9jbGVhbnVwX2RlbGV0ZV9kYXRhX3RyYW5zZmVyX2V2ZW50KGV2 ZW50KTsNCisJCWJyZWFrOw0KKwljYXNlIE1BVVNCX0VWRU5UX1RZUEVfTk9ORToNCisJCWJyZWFr Ow0KKwlkZWZhdWx0Og0KKwkJbWF1c2JfcHJfd2FybigiVW5rbm93biBldmVudCB0eXBlIik7DQor CQlicmVhazsNCisJfQ0KK30NCisNCit2b2lkIG1hdXNiX2Rpc2NvbmVjdF9ldmVudF91bnNhZmUo c3RydWN0IG1hdXNiX3JpbmdfYnVmZmVyICpyaW5nLA0KKwkJCQkgIHVpbnQ4X3QgbWFkZXZfYWRk cikNCit7DQorCXN0cnVjdCBtYXVzYl9ldmVudCBkaXNjb25uZWN0X2V2ZW50Ow0KKwlzdHJ1Y3Qg bWF1c2JfZGV2aWNlICpkZXYgPSBtYXVzYl9nZXRfZGV2X2Zyb21fYWRkcl91bnNhZmUobWFkZXZf YWRkcik7DQorDQorCWlmICghZGV2KSB7DQorCQltYXVzYl9wcl9lcnIoIkRldmljZSBub3QgZm91 bmQsIG1hZGV2X2FkZHI9JSN4IiwgbWFkZXZfYWRkcik7DQorCQlyZXR1cm47DQorCX0NCisNCisJ ZGlzY29ubmVjdF9ldmVudC50eXBlID0gTUFVU0JfRVZFTlRfVFlQRV9ERVZfRElTQ09OTkVDVDsN CisJZGlzY29ubmVjdF9ldmVudC5zdGF0dXMgPSAtRUlOVkFMOw0KKwlkaXNjb25uZWN0X2V2ZW50 Lm1hZGV2X2FkZHIgPSBtYWRldl9hZGRyOw0KKw0KKwltZW1jcHkocmluZy0+dG9fdXNlcl9idWZm ZXIgKyByaW5nLT5oZWFkLCAmZGlzY29ubmVjdF9ldmVudCwNCisJICAgICAgIHNpemVvZihkaXNj b25uZWN0X2V2ZW50KSk7DQorDQorCW1hdXNiX3ByX2luZm8oIkRpc2Nvbm5lY3QgZXZlbnQgYWRk ZWQgdG8gcmluZyBidWZmZXIgZm9yIG1hZGV2X2FkZHI9JSN4IiwNCisJCSAgICAgIG1hZGV2X2Fk ZHIpOw0KKwltYXVzYl9wcl9pbmZvKCJBZGRpbmcgaGNkX2Rpc2Nvbm5lY3Rfd29yayB0byBkZXYg d29ya3EsIG1hZGV2X2FkZHI9JSN4IiwNCisJCSAgICAgIG1hZGV2X2FkZHIpOw0KKwlxdWV1ZV93 b3JrKGRldi0+d29ya3EsICZkZXYtPmhjZF9kaXNjb25uZWN0X3dvcmspOw0KK30NCi0tIA0KMi4x Ny4xDQoNCg== --_002_61e6305631f99d4b60c18cbf0372d34fdisplaylinkcom_--