Received: by 2002:a05:6359:6284:b0:131:369:b2a3 with SMTP id se4csp4588027rwb; Tue, 8 Aug 2023 10:33:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGJwHsx/75KNXzhlxNEnVp2g8gOTdfhHOIOptzdd3jIRILSvpR3dCo10C6EDlVDGN/OK/+w X-Received: by 2002:a17:906:311a:b0:994:673:8af6 with SMTP id 26-20020a170906311a00b0099406738af6mr241811ejx.29.1691515988691; Tue, 08 Aug 2023 10:33:08 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1691515988; cv=pass; d=google.com; s=arc-20160816; b=zFRyTHA3mugY4uEG3QBtk9luACJSyz8IfG7KPXJ/6ne2ioYplVsDm2dMJaXDVG7Pf0 /4y1qaosbA9aXxYxuDUBWvrRa6LPL3pORNkgKKO2D+3n/7igjB7UwoYpopsgJ6Qf4cbB MTRZTEeegSB1Mci9S69uK0mv7n/HCAxylIWkay4UxGs2dCSiDrwUHA6nGLH/zl6lOYZD 3pGd0i+hwlaqVGkBrj0KXNmyOhFtQSfeWTDm5o5TrG4i4tomFxLF58StkHSd3li2RIvV MtZ72YVDOO/xBTg9Awz0n2tFNSV8LWZuRKS1ypMZIxLgor0oDNxawRq7BlalZbUZzoMH sx9g== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:dkim-signature; bh=LrQ72HDpso1CkrLCAy9dATwk6s9VeKHZWz3XSiqMx5w=; fh=6h8sCOzsHN91gFokT9+/SXj1hfw5Bcz4arIPHgkww8A=; b=tWDc8gO4lFLZeXw3EYI3kSKDhOjXtliTTWIjG7BCssnrXk5PExSrepVmXnN8mYdsyw YD2AMXSVsvmjZVkewHQuvyFNyn+ivkWC0hMShZLbXWpTp7L9sH0LIX3NhNFHjFDsFjwU ug/niMM+D5NPYsh8mL02KXmDWP5M9Ds5I+hkMdzlyUu3GmuPVL8/Gycj8strz4e2XeZg iVo74ercBt2/lVK9aGd9iQ47Wx+B1sZT8uA63n+bdaOt0kEH5XhD1baYP3l/KrUl/vap gnEhPsfvNEbV8vraZdWUmqPKP4mnU7S2DJJAOGjyVBnlYlJAWakMnh3oDJHj4YpExP8/ fHMg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@csgroup.eu header.s=selector2 header.b=CMBvZIPc; arc=pass (i=1 spf=pass spfdomain=csgroup.eu dkim=pass dkdomain=csgroup.eu dmarc=pass fromdomain=csgroup.eu); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=csgroup.eu Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id d20-20020a170906041400b0099d0033ab14si410431eja.1012.2023.08.08.10.32.43; Tue, 08 Aug 2023 10:33:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@csgroup.eu header.s=selector2 header.b=CMBvZIPc; arc=pass (i=1 spf=pass spfdomain=csgroup.eu dkim=pass dkdomain=csgroup.eu dmarc=pass fromdomain=csgroup.eu); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=csgroup.eu Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231748AbjHHQG2 (ORCPT + 99 others); Tue, 8 Aug 2023 12:06:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231381AbjHHQFX (ORCPT ); Tue, 8 Aug 2023 12:05:23 -0400 Received: from FRA01-PR2-obe.outbound.protection.outlook.com (mail-pr2fra01on2041.outbound.protection.outlook.com [40.107.12.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E27CD2D62; Tue, 8 Aug 2023 08:45:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z0e/rIVyPrBoAQuEfXcS31LxXcxIhpBGICGfKBzwp6sVoF5hHTPibhqU0HlvZfefiYAOIq0ypLO+aGMMkc6GUQRh0O6f3oVL8KwWs+zIdV/Fk/qlFijrxAmzYPzHxp6nhyB+wH51P5CbiP911/Y+TPbbCGmRfZdC8bHT8QqlO1Iv+MrsvzMaAimK/35+N4EnXtUtdLri+J6Rkewi5eCGHwSziJrUkgYUQuYo5ufq2X+Xik+6Al6nnKFISVIflVAiM9C6isUNKWFqs3YhRunArgqgYcH2BLueIAk5i4SdjhrnfpJIyBD4ZOIRC2Es4Qlltw3kOUswAXqzrl/MJn/6qQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LrQ72HDpso1CkrLCAy9dATwk6s9VeKHZWz3XSiqMx5w=; b=XvEK9eVUUhA3UuClZp6z4wzEZNxjlxij/JCIoOBMoD44v+ilVFO8Tynl1CS34jjnSdLUEzss0j6JfNEztj2httApbCfAD1naGDoicMyQrlC85Iwr1BsJpCYQahEeYhtu1TeiifALmFUnXpYnIVgnPsqlVCouviUCuFBu98NLC2tTpJ3TBbwPc4ctpU9J1hDo5gdMX5zk/lfDL7yN6JMGvsDYho9Keq3JJtlYIuNW6GEWlGF3BXdzOPNMDPYFinPVRtViMA3nNEzAdQ0SoEIc+Vxo5XYIzbfswCL8ujxG9LMWcleR9kIVZ5mNp4lZakoQkYqCK1t5nZBSRKmIMqDcwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csgroup.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LrQ72HDpso1CkrLCAy9dATwk6s9VeKHZWz3XSiqMx5w=; b=CMBvZIPcKvytz7he4IILWSH2RPjozs3RdYke57NTi0X3AtNAVKuvWbjKFi0+4JonMiVX6tN+yv3PEaFXlqTz8m5GCVXgXL63vsLXzF2+tPcGY/PW6tG3xDL9gBoW1vT7cOTD2/6axErP55HzKgMHAnJC8kSAI7phvW+cKyPcpstO+mBJi67X4BFzpJIdUSpVukGbkmGFsE7RNfa1r/h6JMBRN73QrCrWO4o6IkPuaWDTxlHR99jGl8wwCDA/L94MbRh2f2GTNTUOBo0BrSUlzpFnwtM1//AXkmuiYEKog0YpVSU65fr40EJEmUjvewn0nd5HRHtBY8Yvgcymnu/SNw== Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MR1P264MB3396.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:21::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27; Tue, 8 Aug 2023 08:11:47 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2820:d3a6:1cdf:c60e]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::2820:d3a6:1cdf:c60e%6]) with mapi id 15.20.6652.026; Tue, 8 Aug 2023 08:11:47 +0000 From: Christophe Leroy To: Herve Codina , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Linus Walleij , Qiang Zhao , Li Yang , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , Shengjiu Wang , Xiubo Li , Fabio Estevam , Nicolin Chen , Randy Dunlap CC: "netdev@vger.kernel.org" , "linuxppc-dev@lists.ozlabs.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-gpio@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "alsa-devel@alsa-project.org" , Thomas Petazzoni Subject: Re: [PATCH v2 20/28] net: wan: Add framer framework support Thread-Topic: [PATCH v2 20/28] net: wan: Add framer framework support Thread-Index: AQHZv9JlL4aLxdUYuEiC5V4O9h5NFK/gIE6A Date: Tue, 8 Aug 2023 08:11:47 +0000 Message-ID: <34683017-49e8-f282-653a-8b7be32d541e@csgroup.eu> References: <20230726150225.483464-1-herve.codina@bootlin.com> <20230726150225.483464-21-herve.codina@bootlin.com> In-Reply-To: <20230726150225.483464-21-herve.codina@bootlin.com> Accept-Language: fr-FR, en-US Content-Language: fr-FR X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=csgroup.eu; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MRZP264MB2988:EE_|MR1P264MB3396:EE_ x-ms-office365-filtering-correlation-id: 11a5e2e8-77b3-424c-5d71-08db97e71c86 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: AM062yKW5rRTC3o5Ut/73zCM8HTOoTfdryyG5v2iZKdB3CQfuCNbLQ5c3NDhc70pJvZCTQoNT3Dq/IdrhficHxWcEZn5kR0gAsgN+b9AyJRAarCpJR/NvkYPdBQp1sTNkbw5/9JvEoDtpjg85+R+dhZwYn5XOFZdYVA1hFC02OMKSO3zneKJ6xNRVba4RdNwuAxnz2lRh2V6xdmKlbkpuaaK19Sll1MJFWqqwTrd7Hcxc2Ii4frC6LdYFVyXvH5riSaoXHibH/T6RA8aaxhXjd2UZ6Vu/v6yM1C5w/UcHSZAtdgdUyNy5sC4QbNBFAZAufTXcwXD/9EMr7dIF/M/I3+zISzDsfjweazJ/L2v+l/+mkM8ueEt+R0ZeFGY3s+fyVoWmjSzCf81Kh8qVAUGJMV5qWocXzQ2BouXowimzM8VL0X8sbNBPQOGAx8XsAv7QEpiVmg0s3QlWsfRm3SRXrh+QzK9uoBoZtm5nyBIvxycEx9HFT8CDil0y/pm4DUXJ7pr+fLqJHZn5q/K7IzdgDo35xmgBuHn9oQO1wy01+ZUvk8hlVsR0MBxRoOSH5irHvijL7G6NArXtnPzSk8aL+N/mwefvFAW2VE/LwWWOKguriyiDasCwP3EiU4ye9X2dRvtbia3u8WokPGsh5D81OPYK05SxTK/RTGfaVifXiI2kQFR8UaU4+b3y+kLfHbZQOz3ZjiCdkN8SaFpXbrEy0fvvWz+nHdFrdBl97tL806aG2n078SZHNSnPIzCqzgY9iLqdaXOGNwzggs2FxBCbw== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230028)(376002)(346002)(136003)(39850400004)(396003)(366004)(90021799007)(1800799003)(186006)(451199021)(90011799007)(38070700005)(66574015)(41300700001)(26005)(30864003)(2906002)(31686004)(44832011)(83380400001)(5660300002)(7406005)(7416002)(8936002)(8676002)(2616005)(478600001)(316002)(921005)(31696002)(110136005)(91956017)(54906003)(76116006)(6506007)(6486002)(66476007)(64756008)(66446008)(66556008)(38100700002)(71200400001)(66946007)(86362001)(122000001)(6512007)(4326008)(36756003)(43740500002)(45980500001)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?TW5Ra2paemhnNU9Kb1NYM3FNcVdSa2x3aVVYb2RjRW44ZlZuS2dwU2lwRlFy?= =?utf-8?B?YmtRaG5VYzRFUUt2aGxmaHYwK1p2NEdVRDk0SWtBeTBPVGZJS1U0WHNHMmJ4?= =?utf-8?B?c3BTNkRnU1VIeWVXV3hTN2xpVGRBVmVVYVRoL0NBNTlSd283dytDS295Qlcv?= =?utf-8?B?cXB6RzVrQmNMcmp6SUc0VnMxK28xMmFxT1h4QWkzUmRqVXZUR0F3NFBmMXY3?= =?utf-8?B?L0xZcnJUZFBxamh3MTl1bTJVYzFnRWNDK2tnM2pObElpSDJTR2k5eEE4TmF2?= =?utf-8?B?VU8yYldnbm5Fb3hrTGZmczRVU0ZtOVQvRDgwVTgzMEhVMklBNjVKUEs3akRY?= =?utf-8?B?WnhQTWtUenMzUExOVGJPN2REMUJhYWMwNTJGdUxXQk9GNC9DOFlGb1c5UnRz?= =?utf-8?B?bWZCeS9aT3o1YUlLdTdSdy9Od1BRR09zVWtXeUtzNWpWRTgwd2h6OG8xWFdO?= =?utf-8?B?RU9sTkU1dlpDSTZvVXlITENlOTcyMVFXeHIxQll3SmgxcW0zRDlXcXltSDJO?= =?utf-8?B?cEE0VFdWa3RGVU5HMEZuT3RScFgyTW55SEdpWTdrSlUwZnh3SlBmSTF2bGIy?= =?utf-8?B?TFRMS3FRbU9rUzh4Zi9Pc2greTVVVGgzUW1YV0QzVWJOUjd2VmZwQ1AzWk1n?= =?utf-8?B?UlJMNGNvT1lnMU83MVlrVE5wU3Z0VlJQRTNqb1A1ZzdjM2hQY3M3RUFieXhG?= =?utf-8?B?NFdNWFhaNFhGZUtQbTBuTG5FcG51cmdVL3F3MUZvRVdLUHRHdEFkd1JlSCts?= =?utf-8?B?SkUvMVRrZm9PeHROYnpjSEZFTXJiTTdYT25UZklaMjZPRGVIS1dBSDNBSS9Z?= =?utf-8?B?OVpLMU4zd0RsNmNsaXpKM0xVa256ZHdtdnp6eGJ3dFo1dTAzeDc0RUVQbmNO?= =?utf-8?B?c2ZGZHM1M3BzVmFVOVdSN24xUUMyOC9hWnNqbCsxN3ZIQW5tbnhBZEttTW42?= =?utf-8?B?MEtEYktCQWZLM2VGNWt3L2xvb1ZsWVlrdTgwTUJBVGZqV3ZzN2ttUllvanIr?= =?utf-8?B?STQ5R1djN29GazI2UXREc05sbThWZEQ2T1U1eTNvOTg4TmJUYVdzOC9XZ2FN?= =?utf-8?B?WVFidFVNbGkrck9ibXA3SWpHUVlsNGFZMnorNlZEQnBkMWEzdENpZytiQzZM?= =?utf-8?B?UXdieUFIZFF2Ym1JaXlkUG92L05vZlBtR0VNS1ZwbDJ5dDFuRWpSb0E1cGE0?= =?utf-8?B?Q2hGU2FhRjg2cDN3TkM4RlV0c05RY1drVmU2Z1BLZDV1NVdyWW5uNi9oVVJO?= =?utf-8?B?T3FldHNWSzc5V1pZUFdzWUsxQzlFdWRvTzYxQit2TU1DKzI0b29iZk1LbGZY?= =?utf-8?B?aG5hc21GN2t0THpKNzN4Y1JzSW93ejF5WHhPUHVuMERLdUJNVk1KOVZWQ3ZT?= =?utf-8?B?N29TWktNTm11OHMrNTNacTZWK0dQUlJ0K1VjQjB2a2YyNVhHaTJZWWZKeE54?= =?utf-8?B?Y0prN0IwNG56a3JhcS9LcWlhT2Z3TTlwY09oWk5wYzFWZGlSUEx0ZzVjVWJj?= =?utf-8?B?NmpSck83QUx6QkI2OGRIYmt1MGs0UG9ieStxRkpBbnFFNTNZS2xNU0FTNW8r?= =?utf-8?B?SXppWUd1SnMvRnVsUXlwSHRkVXlJTlpzeXlZRkI4N0FFZ3dDRVNnZjZib0Nh?= =?utf-8?B?cytGaUdBdUNzMkVPamNnd3dacWV3RkpnOWtnSzgxTjlwN0NyK1lYTG9uemd6?= =?utf-8?B?cnBQZ2pNOVZyaExFTmp5VmhlQ0creVoySFhWTm1rbXZvWVZMV1A1TDhXZU0x?= =?utf-8?B?VFE2RVVVck02NDF0ZVpvYVg0djRuUEp6WnU5bDFlczFqcFBoeDhWSmI2aWFu?= =?utf-8?B?NDV3bGlQc1UzY3dSUVRlNCtyQnFLaXY0cTZ0UUVuVmsyL2ViNkZMZVR1Qmkr?= =?utf-8?B?T0ptKytjNndTOHZCaHo5aE95YU9xS3FORE5JUzlFVTVJai9DK3F6NWJYbGxB?= =?utf-8?B?Kzk5VFYvMllzazhWaU84WnErMHhZZkdlQnRKMjlYMmFXTkJIZkRZMFM3cUIv?= =?utf-8?B?UXZXSVh5UGROYWZiTW1haWV3d3lPcjNPVzJLdGxDeGJ2ZVc4RFRJTWhLdHA2?= =?utf-8?B?WWdWRnNWZTlQT1pESnZ5dHhLQVdCWUFXaHJOYTZRRWdibnZzZTllRnJ3RmNh?= =?utf-8?Q?zsSJjQnUkY+FmXLBTowVoaSkh?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 11a5e2e8-77b3-424c-5d71-08db97e71c86 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Aug 2023 08:11:47.4467 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: W7fA3QlrPblFOw2V0j2AK3GG3JwqZJNAoy1IVqmFDHHcwwqe589nYzhQgQZRcQpwuEW9TnTqZaLU2i8AF/biWfy4/NSOhS/mxjSlG47VtJc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR1P264MB3396 X-Spam-Status: No, score=-3.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQoNCkxlIDI2LzA3LzIwMjMgw6AgMTc6MDIsIEhlcnZlIENvZGluYSBhIMOpY3JpdMKgOg0KPiBB IGZyYW1lciBpcyBhIGNvbXBvbmVudCBpbiBjaGFyZ2Ugb2YgYW4gRTEvVDEgbGluZSBpbnRlcmZh Y2UuDQo+IENvbm5lY3RlZCB1c3VhbGx5IHRvIGEgVERNIGJ1cywgaXQgY29udmVydHMgVERNIGZy YW1lcyB0by9mcm9tIEUxL1QxDQo+IGZyYW1lcy4gSXQgYWxzbyBwcm92aWRlcyBpbmZvcm1hdGlv biByZWxhdGVkIHRvIHRoZSBFMS9UMSBsaW5lLg0KPiANCj4gVGhlIGZyYW1lciBmcmFtZXdvcmsg cHJvdmlkZXMgYSBzZXQgb2YgQVBJcyBmb3IgdGhlIGZyYW1lciBkcml2ZXJzDQo+IChmcmFtZXIg cHJvdmlkZXIpIHRvIGNyZWF0ZS9kZXN0cm95IGEgZnJhbWVyIGFuZCBBUElzIGZvciB0aGUgZnJh bWVyDQo+IHVzZXJzIChmcmFtZXIgY29uc3VtZXIpIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byB0 aGUgZnJhbWVyLCBhbmQNCj4gdXNlIHRoZSBmcmFtZXIuDQo+IA0KPiBUaGlzIGJhc2ljIGltcGxl bWVudGF0aW9uIHByb3ZpZGVzIGEgZnJhbWVyIGFic3RyYWN0aW9uIGZvcjoNCj4gICAtIHBvd2Vy IG9uL29mZiB0aGUgZnJhbWVyDQo+ICAgLSBnZXQgdGhlIGZyYW1lciBzdGF0dXMgKGxpbmUgc3Rh dGUpDQo+ICAgLSBiZSBub3RpZmllZCBvbiBmcmFtZXIgc3RhdHVzIGNoYW5nZXMNCj4gICAtIGdl dC9zZXQgdGhlIGZyYW1lciBjb25maWd1cmF0aW9uDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBIZXJ2 ZSBDb2RpbmEgPGhlcnZlLmNvZGluYUBib290bGluLmNvbT4NCg0KUmV2aWV3ZWQtYnk6IENocmlz dG9waGUgTGVyb3kgPGNocmlzdG9waGUubGVyb3lAY3Nncm91cC5ldT4NCg0KPiAtLS0NCj4gICBk cml2ZXJzL25ldC93YW4vS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgMiArDQo+ICAgZHJpdmVy cy9uZXQvd2FuL01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDIgKw0KPiAgIGRyaXZlcnMvbmV0 L3dhbi9mcmFtZXIvS2NvbmZpZyAgICAgICAgIHwgIDE5ICsNCj4gICBkcml2ZXJzL25ldC93YW4v ZnJhbWVyL01ha2VmaWxlICAgICAgICB8ICAgNiArDQo+ICAgZHJpdmVycy9uZXQvd2FuL2ZyYW1l ci9mcmFtZXItY29yZS5jICAgfCA5MzUgKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgIGlu Y2x1ZGUvbGludXgvZnJhbWVyL2ZyYW1lci1wcm92aWRlci5oIHwgMTk0ICsrKysrDQo+ICAgaW5j bHVkZS9saW51eC9mcmFtZXIvZnJhbWVyLmggICAgICAgICAgfCAyMTUgKysrKysrDQo+ICAgNyBm aWxlcyBjaGFuZ2VkLCAxMzczIGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9LY29uZmlnDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvbmV0L3dhbi9mcmFtZXIvTWFrZWZpbGUNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvd2FuL2ZyYW1lci9mcmFtZXItY29yZS5jDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvbGludXgvZnJhbWVyL2ZyYW1lci1wcm92aWRlci5oDQo+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvbGludXgvZnJhbWVyL2ZyYW1lci5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9uZXQvd2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZw0KPiBpbmRl eCA4ZGU5OWY0YjY0N2IuLjMxYWIyMTM2Y2RmMSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9uZXQv d2FuL0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9uZXQvd2FuL0tjb25maWcNCj4gQEAgLTk1LDYg Kzk1LDggQEAgY29uZmlnIEhETENfWDI1DQo+ICAgY29tbWVudCAiWC4yNS9MQVBCIHN1cHBvcnQg aXMgZGlzYWJsZWQiDQo+ICAgCWRlcGVuZHMgb24gSERMQyAmJiAoTEFQQiE9bSB8fCBIRExDIT1t KSAmJiBMQVBCIT15DQo+ICAgDQo+ICtzb3VyY2UgImRyaXZlcnMvbmV0L3dhbi9mcmFtZXIvS2Nv bmZpZyINCj4gKw0KPiAgIGNvbmZpZyBQQ0kyMDBTWU4NCj4gICAJdHJpc3RhdGUgIkdvcmFtbyBQ Q0kyMDBTWU4gc3VwcG9ydCINCj4gICAJZGVwZW5kcyBvbiBIRExDICYmIFBDSQ0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxl DQo+IGluZGV4IGYzMzhmNDgzMDYyNi4uMDBlOWI3ZWUxZTAxIDEwMDY0NA0KPiAtLS0gYS9kcml2 ZXJzL25ldC93YW4vTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxlDQo+ IEBAIC0xNCw2ICsxNCw4IEBAIG9iai0kKENPTkZJR19IRExDX0ZSKQkJKz0gaGRsY19mci5vDQo+ ICAgb2JqLSQoQ09ORklHX0hETENfUFBQKQkJKz0gaGRsY19wcHAubw0KPiAgIG9iai0kKENPTkZJ R19IRExDX1gyNSkJCSs9IGhkbGNfeDI1Lm8NCj4gICANCj4gK29iai15CQkJCSs9IGZyYW1lci8N Cj4gKw0KPiAgIG9iai0kKENPTkZJR19GQVJTWU5DKQkJKz0gZmFyc3luYy5vDQo+ICAgDQo+ICAg b2JqLSQoQ09ORklHX0xBUEJFVEhFUikJCSs9IGxhcGJldGhlci5vDQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC93YW4vZnJhbWVyL0tjb25maWcgYi9kcml2ZXJzL25ldC93YW4vZnJhbWVyL0tj b25maWcNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi45NmVm MWU3YmE4ZWINCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL25ldC93YW4vZnJhbWVy L0tjb25maWcNCj4gQEAgLTAsMCArMSwxOSBAQA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5DQo+ICsjDQo+ICsjIEZSQU1FUg0KPiArIw0KPiArDQo+ICttZW51ICJG cmFtZXIgU3Vic3lzdGVtIg0KPiArDQo+ICtjb25maWcgR0VORVJJQ19GUkFNRVINCj4gKwlib29s ICJGcmFtZXIgQ29yZSINCj4gKwloZWxwDQo+ICsJICBHZW5lcmljIEZyYW1lciBzdXBwb3J0Lg0K PiArDQo+ICsJICBUaGlzIGZyYW1ld29yayBpcyBkZXNpZ25lZCB0byBwcm92aWRlIGEgZ2VuZXJp YyBpbnRlcmZhY2UgZm9yIGZyYW1lcg0KPiArCSAgZGV2aWNlcyBwcmVzZW50IGluIHRoZSBrZXJu ZWwuIFRoaXMgbGF5ZXIgd2lsbCBoYXZlIHRoZSBnZW5lcmljDQo+ICsJICBBUEkgYnkgd2hpY2gg ZnJhbWVyIGRyaXZlcnMgY2FuIGNyZWF0ZSBmcmFtZXIgdXNpbmcgdGhlIGZyYW1lcg0KPiArCSAg ZnJhbWV3b3JrIGFuZCBmcmFtZXIgdXNlcnMgY2FuIG9idGFpbiByZWZlcmVuY2UgdG8gdGhlIGZy YW1lci4NCj4gKwkgIEFsbCB0aGUgdXNlcnMgb2YgdGhpcyBmcmFtZXdvcmsgc2hvdWxkIHNlbGVj dCB0aGlzIGNvbmZpZy4NCj4gKw0KPiArZW5kbWVudQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2FuL2ZyYW1lci9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dhbi9mcmFtZXIvTWFrZWZpbGUN Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi43OGRiZDhlNTYz ZDANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL25ldC93YW4vZnJhbWVyL01ha2Vm aWxlDQo+IEBAIC0wLDAgKzEsNiBAQA0KPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiArIw0KPiArIyBNYWtlZmlsZSBmb3IgdGhlIGZyYW1lciBkcml2ZXJzLg0KPiArIw0K PiArDQo+ICtvYmotJChDT05GSUdfR0VORVJJQ19GUkFNRVIpCQkJKz0gZnJhbWVyLWNvcmUubw0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9mcmFtZXItY29yZS5jIGIvZHJp dmVycy9uZXQvd2FuL2ZyYW1lci9mcmFtZXItY29yZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWY5M2I3ZDc0ZmQxDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvZHJpdmVycy9uZXQvd2FuL2ZyYW1lci9mcmFtZXItY29yZS5jDQo+IEBAIC0wLDAgKzEs OTM1IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcg0K PiArLyoNCj4gKyAqIEdlbmVyaWMgRnJhbWVyIGZyYW1ld29yay4NCj4gKyAqDQo+ICsgKiBDb3B5 cmlnaHQgMjAyMyBDUyBHUk9VUCBGcmFuY2UNCj4gKyAqDQo+ICsgKiBBdXRob3I6IEhlcnZlIENv ZGluYSA8aGVydmUuY29kaW5hQGJvb3RsaW4uY29tPg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRl IDxsaW51eC9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9mcmFtZXIvZnJhbWVyLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvZnJhbWVyL2ZyYW1lci1wcm92aWRlci5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L2lkci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L25vdGlmaWVyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1 bWVyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0KPiArDQo+ICtzdGF0aWMgc3RydWN0 IGNsYXNzICpmcmFtZXJfY2xhc3M7DQo+ICtzdGF0aWMgREVGSU5FX01VVEVYKGZyYW1lcl9wcm92 aWRlcl9tdXRleCk7DQo+ICtzdGF0aWMgTElTVF9IRUFEKGZyYW1lcl9wcm92aWRlcl9saXN0KTsN Cj4gK3N0YXRpYyBERUZJTkVfSURBKGZyYW1lcl9pZGEpOw0KPiArDQo+ICsjZGVmaW5lIGRldl90 b19mcmFtZXIoYSkJKGNvbnRhaW5lcl9vZigoYSksIHN0cnVjdCBmcmFtZXIsIGRldikpDQo+ICsN Cj4gK2ludCBmcmFtZXJfcG1fcnVudGltZV9nZXQoc3RydWN0IGZyYW1lciAqZnJhbWVyKQ0KPiAr ew0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAoIWZyYW1lcikNCj4gKwkJcmV0dXJuIDA7DQo+ ICsNCj4gKwlpZiAoIXBtX3J1bnRpbWVfZW5hYmxlZCgmZnJhbWVyLT5kZXYpKQ0KPiArCQlyZXR1 cm4gLUVPUE5PVFNVUFA7DQo+ICsNCj4gKwlyZXQgPSBwbV9ydW50aW1lX2dldCgmZnJhbWVyLT5k ZXYpOw0KPiArCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRUlOUFJPR1JFU1MpDQo+ICsJCXBtX3J1 bnRpbWVfcHV0X25vaWRsZSgmZnJhbWVyLT5kZXYpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4g K30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGZyYW1lcl9wbV9ydW50aW1lX2dldCk7DQo+ICsNCj4g K2ludCBmcmFtZXJfcG1fcnVudGltZV9nZXRfc3luYyhzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICghZnJhbWVyKQ0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCWlmICghcG1fcnVudGltZV9lbmFibGVkKCZmcmFtZXItPmRldikpDQo+ICsJCXJl dHVybiAtRU9QTk9UU1VQUDsNCj4gKw0KPiArCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJmZy YW1lci0+ZGV2KTsNCj4gKwlpZiAocmV0IDwgMCkNCj4gKwkJcG1fcnVudGltZV9wdXRfc3luYygm ZnJhbWVyLT5kZXYpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1C T0xfR1BMKGZyYW1lcl9wbV9ydW50aW1lX2dldF9zeW5jKTsNCj4gKw0KPiAraW50IGZyYW1lcl9w bV9ydW50aW1lX3B1dChzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaWYgKCFmcmFt ZXIpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJaWYgKCFwbV9ydW50aW1lX2VuYWJsZWQoJmZy YW1lci0+ZGV2KSkNCj4gKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArDQo+ICsJcmV0dXJuIHBt X3J1bnRpbWVfcHV0KCZmcmFtZXItPmRldik7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChm cmFtZXJfcG1fcnVudGltZV9wdXQpOw0KPiArDQo+ICtpbnQgZnJhbWVyX3BtX3J1bnRpbWVfcHV0 X3N5bmMoc3RydWN0IGZyYW1lciAqZnJhbWVyKQ0KPiArew0KPiArCWlmICghZnJhbWVyKQ0KPiAr CQlyZXR1cm4gMDsNCj4gKw0KPiArCWlmICghcG1fcnVudGltZV9lbmFibGVkKCZmcmFtZXItPmRl dikpDQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKw0KPiArCXJldHVybiBwbV9ydW50aW1l X3B1dF9zeW5jKCZmcmFtZXItPmRldik7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChmcmFt ZXJfcG1fcnVudGltZV9wdXRfc3luYyk7DQo+ICsNCj4gKy8qKg0KPiArICogZnJhbWVyX2luaXQg LSBmcmFtZXIgaW50ZXJuYWwgaW5pdGlhbGl6YXRpb24gYmVmb3JlIGZyYW1lciBvcGVyYXRpb24N Cj4gKyAqIEBmcmFtZXI6IHRoZSBmcmFtZXIgcmV0dXJuZWQgYnkgZnJhbWVyX2dldCgpDQo+ICsg Kg0KPiArICogVXNlZCB0byBhbGxvdyBmcmFtZXIncyBkcml2ZXIgdG8gcGVyZm9ybSBmcmFtZXIg aW50ZXJuYWwgaW5pdGlhbGl6YXRpb24sDQo+ICsgKiBzdWNoIGFzIFBMTCBibG9jayBwb3dlcmlu ZywgY2xvY2sgaW5pdGlhbGl6YXRpb24gb3IgYW55dGhpbmcgdGhhdCdzDQo+ICsgKiBpcyByZXF1 aXJlZCBieSB0aGUgZnJhbWVyIHRvIHBlcmZvcm0gdGhlIHN0YXJ0IG9mIG9wZXJhdGlvbi4NCj4g KyAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBmcmFtZXJfcG93ZXJfb24oKS4NCj4gKyAqDQo+ICsg KiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndp c2UNCj4gKyAqLw0KPiAraW50IGZyYW1lcl9pbml0KHN0cnVjdCBmcmFtZXIgKmZyYW1lcikNCj4g K3sNCj4gKwlib29sIHN0YXJ0X3BvbGxpbmcgPSBmYWxzZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ ICsJaWYgKCFmcmFtZXIpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJcmV0ID0gZnJhbWVyX3Bt X3J1bnRpbWVfZ2V0X3N5bmMoZnJhbWVyKTsNCj4gKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVP UE5PVFNVUFApDQo+ICsJCXJldHVybiByZXQ7DQo+ICsJcmV0ID0gMDsgLyogT3ZlcnJpZGUgcG9z c2libGUgcmV0ID09IC1FT1BOT1RTVVBQICovDQo+ICsNCj4gKwltdXRleF9sb2NrKCZmcmFtZXIt Pm11dGV4KTsNCj4gKwlpZiAoZnJhbWVyLT5wb3dlcl9jb3VudCA+IGZyYW1lci0+aW5pdF9jb3Vu dCkNCj4gKwkJZGV2X3dhcm4oJmZyYW1lci0+ZGV2LCAiZnJhbWVyX3Bvd2VyX29uIHdhcyBjYWxs ZWQgYmVmb3JlIGZyYW1lciBpbml0XG4iKTsNCj4gKw0KPiArCWlmIChmcmFtZXItPmluaXRfY291 bnQgPT0gMCkgew0KPiArCQlpZiAoZnJhbWVyLT5vcHMtPmluaXQpIHsNCj4gKwkJCXJldCA9IGZy YW1lci0+b3BzLT5pbml0KGZyYW1lcik7DQo+ICsJCQlpZiAocmV0IDwgMCkgew0KPiArCQkJCWRl dl9lcnIoJmZyYW1lci0+ZGV2LCAiZnJhbWVyIGluaXQgZmFpbGVkIC0tPiAlZFxuIiwgcmV0KTsN Cj4gKwkJCQlnb3RvIG91dDsNCj4gKwkJCX0NCj4gKwkJfQ0KPiArCQlpZiAoZnJhbWVyLT5vcHMt PmZsYWdzICYgRlJBTUVSX0ZMQUdfUE9MTF9TVEFUVVMpDQo+ICsJCQlzdGFydF9wb2xsaW5nID0g dHJ1ZTsNCj4gKwl9DQo+ICsJKytmcmFtZXItPmluaXRfY291bnQ7DQo+ICsNCj4gK291dDoNCj4g KwltdXRleF91bmxvY2soJmZyYW1lci0+bXV0ZXgpOw0KPiArDQo+ICsJaWYgKCFyZXQgJiYgc3Rh cnRfcG9sbGluZykgew0KPiArCQlyZXQgPSBmcmFtZXJfZ2V0X3N0YXR1cyhmcmFtZXIsICZmcmFt ZXItPnByZXZfc3RhdHVzKTsNCj4gKwkJaWYgKHJldCA8IDApIHsNCj4gKwkJCWRldl93YXJuKCZm cmFtZXItPmRldiwgImZyYW1lciBnZXQgc3RhdHVzIGZhaWxlZCAtLT4gJWRcbiIsIHJldCk7DQo+ ICsJCQkvKiBXaWxsIGJlIHJldHJpZWQgb24gcG9sbGluZ193b3JrICovDQo+ICsJCQlyZXQgPSAw Ow0KPiArCQl9DQo+ICsJCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50 X3dxLCAmZnJhbWVyLT5wb2xsaW5nX3dvcmssIDEgKiBIWik7DQo+ICsJfQ0KPiArDQo+ICsJZnJh bWVyX3BtX3J1bnRpbWVfcHV0KGZyYW1lcik7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gK0VY UE9SVF9TWU1CT0xfR1BMKGZyYW1lcl9pbml0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJf ZXhpdCAtIEZyYW1lciBpbnRlcm5hbCB1bi1pbml0aWFsaXphdGlvbg0KPiArICogQGZyYW1lcjog dGhlIGZyYW1lciByZXR1cm5lZCBieSBmcmFtZXJfZ2V0KCkNCj4gKyAqDQo+ICsgKiBNdXN0IGJl IGNhbGxlZCBhZnRlciBmcmFtZXJfcG93ZXJfb2ZmKCkuDQo+ICsgKi8NCj4gK2ludCBmcmFtZXJf ZXhpdChzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiAr CWlmICghZnJhbWVyKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXJldCA9IGZyYW1lcl9wbV9y dW50aW1lX2dldF9zeW5jKGZyYW1lcik7DQo+ICsJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FT1BO T1RTVVBQKQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCXJldCA9IDA7IC8qIE92ZXJyaWRlIHBvc3Np YmxlIHJldCA9PSAtRU9QTk9UU1VQUCAqLw0KPiArDQo+ICsJbXV0ZXhfbG9jaygmZnJhbWVyLT5t dXRleCk7DQo+ICsJLS1mcmFtZXItPmluaXRfY291bnQ7DQo+ICsJaWYgKGZyYW1lci0+aW5pdF9j b3VudCA9PSAwKSB7DQo+ICsJCWlmIChmcmFtZXItPm9wcy0+ZmxhZ3MgJiBGUkFNRVJfRkxBR19Q T0xMX1NUQVRVUykgew0KPiArCQkJbXV0ZXhfdW5sb2NrKCZmcmFtZXItPm11dGV4KTsNCj4gKwkJ CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZnJhbWVyLT5wb2xsaW5nX3dvcmspOw0KPiArCQkJ bXV0ZXhfbG9jaygmZnJhbWVyLT5tdXRleCk7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAoZnJhbWVy LT5vcHMtPmV4aXQpDQo+ICsJCQlmcmFtZXItPm9wcy0+ZXhpdChmcmFtZXIpOw0KPiArCX0NCj4g Kw0KPiArCW11dGV4X3VubG9jaygmZnJhbWVyLT5tdXRleCk7DQo+ICsJZnJhbWVyX3BtX3J1bnRp bWVfcHV0KGZyYW1lcik7DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xf R1BMKGZyYW1lcl9leGl0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfcG93ZXJfb24gLSBF bmFibGUgdGhlIGZyYW1lciBhbmQgZW50ZXIgcHJvcGVyIG9wZXJhdGlvbg0KPiArICogQGZyYW1l cjogdGhlIGZyYW1lciByZXR1cm5lZCBieSBmcmFtZXJfZ2V0KCkNCj4gKyAqDQo+ICsgKiBNdXN0 IGJlIGNhbGxlZCBhZnRlciBmcmFtZXJfaW5pdCgpLg0KPiArICoNCj4gKyAqIFJldHVybjogJTAg aWYgc3VjY2Vzc2Z1bCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQ0KPiArICovDQo+ ICtpbnQgZnJhbWVyX3Bvd2VyX29uKHN0cnVjdCBmcmFtZXIgKmZyYW1lcikNCj4gK3sNCj4gKwlp bnQgcmV0ID0gMDsNCj4gKw0KPiArCWlmICghZnJhbWVyKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0K PiArCWlmIChmcmFtZXItPnB3cikgew0KPiArCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGZyYW1l ci0+cHdyKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiAr CXJldCA9IGZyYW1lcl9wbV9ydW50aW1lX2dldF9zeW5jKGZyYW1lcik7DQo+ICsJaWYgKHJldCA8 IDAgJiYgcmV0ICE9IC1FT1BOT1RTVVBQKQ0KPiArCQlnb3RvIGVycl9wbV9zeW5jOw0KPiArDQo+ ICsJcmV0ID0gMDsgLyogT3ZlcnJpZGUgcG9zc2libGUgcmV0ID09IC1FT1BOT1RTVVBQICovDQo+ ICsNCj4gKwltdXRleF9sb2NrKCZmcmFtZXItPm11dGV4KTsNCj4gKwlpZiAoZnJhbWVyLT5wb3dl cl9jb3VudCA9PSAwICYmIGZyYW1lci0+b3BzLT5wb3dlcl9vbikgew0KPiArCQlyZXQgPSBmcmFt ZXItPm9wcy0+cG93ZXJfb24oZnJhbWVyKTsNCj4gKwkJaWYgKHJldCA8IDApIHsNCj4gKwkJCWRl dl9lcnIoJmZyYW1lci0+ZGV2LCAiZnJhbWVyIHBvd2Vyb24gZmFpbGVkIC0tPiAlZFxuIiwgcmV0 KTsNCj4gKwkJCWdvdG8gZXJyX3B3cl9vbjsNCj4gKwkJfQ0KPiArCX0NCj4gKwkrK2ZyYW1lci0+ cG93ZXJfY291bnQ7DQo+ICsJbXV0ZXhfdW5sb2NrKCZmcmFtZXItPm11dGV4KTsNCj4gKwlyZXR1 cm4gMDsNCj4gKw0KPiArZXJyX3B3cl9vbjoNCj4gKwltdXRleF91bmxvY2soJmZyYW1lci0+bXV0 ZXgpOw0KPiArCWZyYW1lcl9wbV9ydW50aW1lX3B1dF9zeW5jKGZyYW1lcik7DQo+ICtlcnJfcG1f c3luYzoNCj4gKwlpZiAoZnJhbWVyLT5wd3IpDQo+ICsJCXJlZ3VsYXRvcl9kaXNhYmxlKGZyYW1l ci0+cHdyKTsNCj4gK291dDoNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJP TF9HUEwoZnJhbWVyX3Bvd2VyX29uKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfcG93ZXJf b2ZmIC0gRGlzYWJsZSB0aGUgZnJhbWVyLg0KPiArICogQGZyYW1lcjogdGhlIGZyYW1lciByZXR1 cm5lZCBieSBmcmFtZXJfZ2V0KCkNCj4gKyAqDQo+ICsgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUg ZnJhbWVyX2V4aXQoKS4NCj4gKyAqDQo+ICsgKiBSZXR1cm46ICUwIGlmIHN1Y2Nlc3NmdWwsIGEg bmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UNCj4gKyAqLw0KPiAraW50IGZyYW1lcl9wb3dl cl9vZmYoc3RydWN0IGZyYW1lciAqZnJhbWVyKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsNCj4g KwlpZiAoIWZyYW1lcikNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZmcmFt ZXItPm11dGV4KTsNCj4gKwlpZiAoZnJhbWVyLT5wb3dlcl9jb3VudCA9PSAxICYmIGZyYW1lci0+ b3BzLT5wb3dlcl9vZmYpIHsNCj4gKwkJcmV0ID0gIGZyYW1lci0+b3BzLT5wb3dlcl9vZmYoZnJh bWVyKTsNCj4gKwkJaWYgKHJldCA8IDApIHsNCj4gKwkJCWRldl9lcnIoJmZyYW1lci0+ZGV2LCAi ZnJhbWVyIHBvd2Vyb2ZmIGZhaWxlZCAtLT4gJWRcbiIsIHJldCk7DQo+ICsJCQltdXRleF91bmxv Y2soJmZyYW1lci0+bXV0ZXgpOw0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0KPiArCX0NCj4g KwktLWZyYW1lci0+cG93ZXJfY291bnQ7DQo+ICsJbXV0ZXhfdW5sb2NrKCZmcmFtZXItPm11dGV4 KTsNCj4gKwlmcmFtZXJfcG1fcnVudGltZV9wdXQoZnJhbWVyKTsNCj4gKw0KPiArCWlmIChmcmFt ZXItPnB3cikNCj4gKwkJcmVndWxhdG9yX2Rpc2FibGUoZnJhbWVyLT5wd3IpOw0KPiArDQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChmcmFtZXJfcG93ZXJfb2ZmKTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfZ2V0X3N0YXR1cygpIC0gR2V0cyB0aGUgZnJhbWVy IHN0YXR1cw0KPiArICogQGZyYW1lcjogdGhlIGZyYW1lciByZXR1cm5lZCBieSBmcmFtZXJfZ2V0 KCkNCj4gKyAqIEBzdGF0dXM6IHRoZSBzdGF0dXMgdG8gcmV0cmlldmUNCj4gKyAqDQo+ICsgKiBV c2VkIHRvIGdldCB0aGUgZnJhbWVyIHN0YXR1cy4gZnJhbWVyX2luaXQoKSBtdXN0IGhhdmUgYmVl biBjYWxsZWQNCj4gKyAqIG9uIHRoZSBmcmFtZXIuDQo+ICsgKg0KPiArICogUmV0dXJuOiAlMCBp ZiBzdWNjZXNzZnVsLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlDQo+ICsgKi8NCj4g K2ludCBmcmFtZXJfZ2V0X3N0YXR1cyhzdHJ1Y3QgZnJhbWVyICpmcmFtZXIsIHN0cnVjdCBmcmFt ZXJfc3RhdHVzICpzdGF0dXMpDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICghZnJh bWVyKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmICghZnJhbWVyLT5vcHMtPmdl dF9zdGF0dXMpDQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKw0KPiArCS8qIEJlIHN1cmUg dG8gaGF2ZSBrbm93biB2YWx1ZXMgKHN0cnVjdCBwYWRkaW5nIGFuZCBmdXR1cmUgZXh0ZW5zaW9u cykgKi8NCj4gKwltZW1zZXQoc3RhdHVzLCAwLCBzaXplb2YoKnN0YXR1cykpOw0KPiArDQo+ICsJ bXV0ZXhfbG9jaygmZnJhbWVyLT5tdXRleCk7DQo+ICsJcmV0ID0gZnJhbWVyLT5vcHMtPmdldF9z dGF0dXMoZnJhbWVyLCBzdGF0dXMpOw0KPiArCW11dGV4X3VubG9jaygmZnJhbWVyLT5tdXRleCk7 DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZnJhbWVy X2dldF9zdGF0dXMpOw0KPiArDQo+ICsvKioNCj4gKyAqIGZyYW1lcl9zZXRfY29uZmlnKCkgLSBT ZXRzIHRoZSBmcmFtZXIgY29uZmlndXJhdGlvbg0KPiArICogQGZyYW1lcjogdGhlIGZyYW1lciBy ZXR1cm5lZCBieSBmcmFtZXJfZ2V0KCkNCj4gKyAqIEBjb25maWc6IHRoZSBjb25maWd1cmF0aW9u IHRvIHNldA0KPiArICoNCj4gKyAqIFVzZWQgdG8gc2V0IHRoZSBmcmFtZXIgY29uZmlndXJhdGlv bi4gZnJhbWVyX2luaXQoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQNCj4gKyAqIG9uIHRoZSBmcmFt ZXIuDQo+ICsgKg0KPiArICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsLCBhIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb3RoZXJ3aXNlDQo+ICsgKi8NCj4gK2ludCBmcmFtZXJfc2V0X2NvbmZpZyhzdHJ1 Y3QgZnJhbWVyICpmcmFtZXIsIGNvbnN0IHN0cnVjdCBmcmFtZXJfY29uZmlnICpjb25maWcpDQo+ ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICghZnJhbWVyKQ0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKw0KPiArCWlmICghZnJhbWVyLT5vcHMtPnNldF9jb25maWcpDQo+ICsJCXJldHVy biAtRU9QTk9UU1VQUDsNCj4gKw0KPiArCW11dGV4X2xvY2soJmZyYW1lci0+bXV0ZXgpOw0KPiAr CXJldCA9IGZyYW1lci0+b3BzLT5zZXRfY29uZmlnKGZyYW1lciwgY29uZmlnKTsNCj4gKwltdXRl eF91bmxvY2soJmZyYW1lci0+bXV0ZXgpOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4g K0VYUE9SVF9TWU1CT0xfR1BMKGZyYW1lcl9zZXRfY29uZmlnKTsNCj4gKw0KPiArLyoqDQo+ICsg KiBmcmFtZXJfZ2V0X2NvbmZpZygpIC0gR2V0cyB0aGUgZnJhbWVyIGNvbmZpZ3VyYXRpb24NCj4g KyAqIEBmcmFtZXI6IHRoZSBmcmFtZXIgcmV0dXJuZWQgYnkgZnJhbWVyX2dldCgpDQo+ICsgKiBA Y29uZmlnOiB0aGUgY29uZmlndXJhdGlvbiB0byByZXRyaWV2ZQ0KPiArICoNCj4gKyAqIFVzZWQg dG8gZ2V0IHRoZSBmcmFtZXIgY29uZmlndXJhdGlvbi4gZnJhbWVyX2luaXQoKSBtdXN0IGhhdmUg YmVlbiBjYWxsZWQNCj4gKyAqIG9uIHRoZSBmcmFtZXIuDQo+ICsgKg0KPiArICogUmV0dXJuOiAl MCBpZiBzdWNjZXNzZnVsLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlDQo+ICsgKi8N Cj4gK2ludCBmcmFtZXJfZ2V0X2NvbmZpZyhzdHJ1Y3QgZnJhbWVyICpmcmFtZXIsIHN0cnVjdCBm cmFtZXJfY29uZmlnICpjb25maWcpDQo+ICt7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWlmICgh ZnJhbWVyKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCWlmICghZnJhbWVyLT5vcHMt PmdldF9jb25maWcpDQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gKw0KPiArCW11dGV4X2xv Y2soJmZyYW1lci0+bXV0ZXgpOw0KPiArCXJldCA9IGZyYW1lci0+b3BzLT5nZXRfY29uZmlnKGZy YW1lciwgY29uZmlnKTsNCj4gKwltdXRleF91bmxvY2soJmZyYW1lci0+bXV0ZXgpOw0KPiArDQo+ ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGZyYW1lcl9nZXRfY29u ZmlnKTsNCj4gKw0KPiArc3RhdGljIHZvaWQgZnJhbWVyX3BvbGxpbmdfd29yayhzdHJ1Y3Qgd29y a19zdHJ1Y3QgKndvcmspDQo+ICt7DQo+ICsJc3RydWN0IGZyYW1lciAqZnJhbWVyID0gY29udGFp bmVyX29mKHdvcmssIHN0cnVjdCBmcmFtZXIsIHBvbGxpbmdfd29yay53b3JrKTsNCj4gKwlzdHJ1 Y3QgZnJhbWVyX3N0YXR1cyBzdGF0dXM7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IGZy YW1lcl9nZXRfc3RhdHVzKGZyYW1lciwgJnN0YXR1cyk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlk ZXZfZXJyKCZmcmFtZXItPmRldiwgInBvbGxpbmcsIGdldCBzdGF0dXMgZmFpbGVkICglZClcbiIs IHJldCk7DQo+ICsJCWdvdG8gZW5kOw0KPiArCX0NCj4gKwlpZiAobWVtY21wKCZmcmFtZXItPnBy ZXZfc3RhdHVzLCAmc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSkpIHsNCj4gKwkJYmxvY2tpbmdfbm90 aWZpZXJfY2FsbF9jaGFpbigmZnJhbWVyLT5ub3RpZmllcl9saXN0LA0KPiArCQkJCQkgICAgIEZS QU1FUl9FVkVOVF9TVEFUVVMsIE5VTEwpOw0KPiArCQltZW1jcHkoJmZyYW1lci0+cHJldl9zdGF0 dXMsICZzdGF0dXMsIHNpemVvZihzdGF0dXMpKTsNCj4gKwl9DQo+ICsNCj4gK2VuZDoNCj4gKwkv KiBSZS1zY2hlZHVsZSB0YXNrIGluIDEgc2VjICovDQo+ICsJcXVldWVfZGVsYXllZF93b3JrKHN5 c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZmcmFtZXItPnBvbGxpbmdfd29yaywgMSAqIEhaKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfbm90aWZpZXJfcmVnaXN0ZXIoKSAtIFJl Z2lzdGVycyBhIG5vdGlmaWVyDQo+ICsgKiBAZnJhbWVyOiB0aGUgZnJhbWVyIHJldHVybmVkIGJ5 IGZyYW1lcl9nZXQoKQ0KPiArICogQG5iOiB0aGUgbm90aWZpZXIgYmxvY2sgdG8gcmVnaXN0ZXIN Cj4gKyAqDQo+ICsgKiBVc2VkIHRvIHJlZ2lzdGVyIGEgbm90aWZpZXIgYmxvY2sgb24gZnJhbWVy IGV2ZW50cy4gZnJhbWVyX2luaXQoKSBtdXN0IGhhdmUNCj4gKyAqIGJlZW4gY2FsbGVkIG9uIHRo ZSBmcmFtZXIuDQo+ICsgKiBUaGUgYXZhaWxhYmxlIGZyYW1lciBldmVudHMgYXJlIHByZXNlbnQg aW4gZW51bSBmcmFtZXJfZXZlbnRzLg0KPiArICoNCj4gKyAqIFJldHVybjogJTAgaWYgc3VjY2Vz c2Z1bCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZQ0KPiArICovDQo+ICtpbnQgZnJh bWVyX25vdGlmaWVyX3JlZ2lzdGVyKHN0cnVjdCBmcmFtZXIgKmZyYW1lciwgc3RydWN0IG5vdGlm aWVyX2Jsb2NrICpuYikNCj4gK3sNCj4gKwlpZiAoIWZyYW1lcikNCj4gKwkJcmV0dXJuIDA7DQo+ ICsNCj4gKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmZyYW1lci0+ bm90aWZpZXJfbGlzdCwgbmIpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZnJhbWVyX25v dGlmaWVyX3JlZ2lzdGVyKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfbm90aWZpZXJfdW5y ZWdpc3RlcigpIC0gVW5yZWdpc3RlcnMgYSBub3RpZmllcg0KPiArICogQGZyYW1lcjogdGhlIGZy YW1lciByZXR1cm5lZCBieSBmcmFtZXJfZ2V0KCkNCj4gKyAqIEBuYjogdGhlIG5vdGlmaWVyIGJs b2NrIHRvIHVucmVnaXN0ZXINCj4gKyAqDQo+ICsgKiBVc2VkIHRvIHVucmVnaXN0ZXIgYSBub3Rp ZmllciBibG9jay4gZnJhbWVyX2luaXQoKSBtdXN0IGhhdmUNCj4gKyAqIGJlZW4gY2FsbGVkIG9u IHRoZSBmcmFtZXIuDQo+ICsgKg0KPiArICogUmV0dXJuOiAlMCBpZiBzdWNjZXNzZnVsLCBhIG5l Z2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlDQo+ICsgKi8NCj4gK2ludCBmcmFtZXJfbm90aWZp ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZnJhbWVyICpmcmFtZXIsIHN0cnVjdCBub3RpZmllcl9ibG9j ayAqbmIpDQo+ICt7DQo+ICsJaWYgKCFmcmFtZXIpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiAr DQo+ICsJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmZyYW1lci0+ bm90aWZpZXJfbGlzdCwgbmIpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZnJhbWVyX2F0 b21pY19ub3RpZmllcl91bnJlZ2lzdGVyKTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBmcmFtZXJf cHJvdmlkZXIgKmZyYW1lcl9wcm92aWRlcl9vZl9sb29rdXAoY29uc3Qgc3RydWN0IGRldmljZV9u b2RlICpub2RlKQ0KPiArew0KPiArCXN0cnVjdCBmcmFtZXJfcHJvdmlkZXIgKmZyYW1lcl9wcm92 aWRlcjsNCj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZnJhbWVyX3Byb3ZpZGVyLCAmZnJh bWVyX3Byb3ZpZGVyX2xpc3QsIGxpc3QpIHsNCj4gKwkJaWYgKGRldmljZV9tYXRjaF9vZl9ub2Rl KGZyYW1lcl9wcm92aWRlci0+ZGV2LCBub2RlKSkNCj4gKwkJCXJldHVybiBmcmFtZXJfcHJvdmlk ZXI7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgZnJhbWVyICpmcmFtZXJfb2ZfZ2V0X2Zyb21fcHJvdmlk ZXIoc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqYXJncykNCj4gK3sNCj4gKwlzdHJ1Y3QgZnJhbWVy X3Byb3ZpZGVyICpmcmFtZXJfcHJvdmlkZXI7DQo+ICsJc3RydWN0IGZyYW1lciAqZnJhbWVyOw0K PiArDQo+ICsJbXV0ZXhfbG9jaygmZnJhbWVyX3Byb3ZpZGVyX211dGV4KTsNCj4gKwlmcmFtZXJf cHJvdmlkZXIgPSBmcmFtZXJfcHJvdmlkZXJfb2ZfbG9va3VwKGFyZ3MtPm5wKTsNCj4gKwlpZiAo SVNfRVJSKGZyYW1lcl9wcm92aWRlcikgfHwgIXRyeV9tb2R1bGVfZ2V0KGZyYW1lcl9wcm92aWRl ci0+b3duZXIpKSB7DQo+ICsJCWZyYW1lciA9IEVSUl9QVFIoLUVQUk9CRV9ERUZFUik7DQo+ICsJ CWdvdG8gZW5kOw0KPiArCX0NCj4gKw0KPiArCWZyYW1lciA9IGZyYW1lcl9wcm92aWRlci0+b2Zf eGxhdGUoZnJhbWVyX3Byb3ZpZGVyLT5kZXYsIGFyZ3MpOw0KPiArDQo+ICsJbW9kdWxlX3B1dChm cmFtZXJfcHJvdmlkZXItPm93bmVyKTsNCj4gKw0KPiArZW5kOg0KPiArCW11dGV4X3VubG9jaygm ZnJhbWVyX3Byb3ZpZGVyX211dGV4KTsNCj4gKw0KPiArCXJldHVybiBmcmFtZXI7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgZnJhbWVyICpmcmFtZXJfb2ZfZ2V0X2J5cGhhbmRsZShzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpwcm9wbmFtZSwNCj4gKwkJCQkJICAgICAg aW50IGluZGV4KQ0KPiArew0KPiArCXN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgYXJnczsNCj4gKwlz dHJ1Y3QgZnJhbWVyICpmcmFtZXI7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXJldCA9IG9mX3Bh cnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCBwcm9wbmFtZSwgIiNmcmFtZXItY2VsbHMiLCBpbmRl eCwgJmFyZ3MpOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOw0K PiArDQo+ICsJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKGFyZ3MubnApKSB7DQo+ICsJCWZy YW1lciA9IEVSUl9QVFIoLUVOT0RFVik7DQo+ICsJCWdvdG8gb3V0X25vZGVfcHV0Ow0KPiArCX0N Cj4gKw0KPiArCWZyYW1lciA9IGZyYW1lcl9vZl9nZXRfZnJvbV9wcm92aWRlcigmYXJncyk7DQo+ ICsNCj4gK291dF9ub2RlX3B1dDoNCj4gKwlvZl9ub2RlX3B1dChhcmdzLm5wKTsNCj4gKw0KPiAr CXJldHVybiBmcmFtZXI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgZnJhbWVyICpmcmFt ZXJfb2ZfZ2V0X2J5cGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpbmRleCkNCj4g K3sNCj4gKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZ3M7DQo+ICsJc3RydWN0IGZyYW1lciAq ZnJhbWVyOw0KPiArDQo+ICsJYXJncy5ucCA9IG9mX2dldF9wYXJlbnQobnApOw0KPiArCWFyZ3Mu YXJnc19jb3VudCA9IDE7DQo+ICsJYXJncy5hcmdzWzBdID0gaW5kZXg7DQo+ICsNCj4gKwl3aGls ZSAoYXJncy5ucCkgew0KPiArCQlmcmFtZXIgPSBmcmFtZXJfb2ZfZ2V0X2Zyb21fcHJvdmlkZXIo JmFyZ3MpOw0KPiArCQlpZiAoSVNfRVJSKGZyYW1lcikgJiYgUFRSX0VSUihmcmFtZXIpICE9IC1F UFJPQkVfREVGRVIpIHsNCj4gKwkJCWFyZ3MubnAgPSBvZl9nZXRfbmV4dF9wYXJlbnQoYXJncy5u cCk7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArCQlvZl9ub2RlX3B1dChhcmdzLm5wKTsN Cj4gKwkJcmV0dXJuIGZyYW1lcjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gRVJSX1BUUigtRU5P REVWKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfZ2V0KCkgLSBsb29rdXAgYW5k IG9idGFpbiBhIHJlZmVyZW5jZSB0byBhIGZyYW1lci4NCj4gKyAqIEBkZXY6IGRldmljZSB0aGF0 IHJlcXVlc3RzIHRoZSBmcmFtZXINCj4gKyAqIEBjb25faWQ6IG5hbWUgb2YgdGhlIGZyYW1lciBm cm9tIGRldmljZSdzIHBvaW50IG9mIHZpZXcNCj4gKyAqDQo+ICsgKiBSZXR1cm5zIHRoZSBmcmFt ZXIgZHJpdmVyLCBhZnRlciBnZXR0aW5nIGEgcmVmY291bnQgdG8gaXQ7IG9yDQo+ICsgKiAtRU5P REVWIGlmIHRoZXJlIGlzIG5vIHN1Y2ggZnJhbWVyLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxl IGZvcg0KPiArICogY2FsbGluZyBmcmFtZXJfcHV0KCkgdG8gcmVsZWFzZSB0aGF0IGNvdW50Lg0K PiArICovDQo+ICtzdHJ1Y3QgZnJhbWVyICpmcmFtZXJfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwg Y29uc3QgY2hhciAqY29uX2lkKQ0KPiArew0KPiArCXN0cnVjdCBmcmFtZXIgKmZyYW1lciA9IEVS Ul9QVFIoLUVOT0RFVik7DQo+ICsJc3RydWN0IGRldmljZV9saW5rICpsaW5rOw0KPiArCWludCBy ZXQ7DQo+ICsNCj4gKwlpZiAoZGV2LT5vZl9ub2RlKSB7DQo+ICsJCWlmIChjb25faWQpDQo+ICsJ CQlmcmFtZXIgPSBmcmFtZXJfb2ZfZ2V0X2J5cGhhbmRsZShkZXYtPm9mX25vZGUsIGNvbl9pZCwg MCk7DQo+ICsJCWVsc2UNCj4gKwkJCWZyYW1lciA9IGZyYW1lcl9vZl9nZXRfYnlwYXJlbnQoZGV2 LT5vZl9ub2RlLCAwKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoSVNfRVJSKGZyYW1lcikpDQo+ICsJ CXJldHVybiBmcmFtZXI7DQo+ICsNCj4gKwlnZXRfZGV2aWNlKCZmcmFtZXItPmRldik7DQo+ICsN Cj4gKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGZyYW1lci0+b3BzLT5vd25lcikpIHsNCj4gKwkJcmV0 ID0gLUVQUk9CRV9ERUZFUjsNCj4gKwkJZ290byBlcnJfcHV0X2RldmljZTsNCj4gKwl9DQo+ICsN Cj4gKwlsaW5rID0gZGV2aWNlX2xpbmtfYWRkKGRldiwgJmZyYW1lci0+ZGV2LCBETF9GTEFHX1NU QVRFTEVTUyk7DQo+ICsJaWYgKCFsaW5rKSB7DQo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRv IGNyZWF0ZSBkZXZpY2VfbGluayB0byAlc1xuIiwgZGV2X25hbWUoJmZyYW1lci0+ZGV2KSk7DQo+ ICsJCXJldCA9IC1FUFJPQkVfREVGRVI7DQo+ICsJCWdvdG8gZXJyX21vZHVsZV9wdXQ7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIGZyYW1lcjsNCj4gKw0KPiArZXJyX21vZHVsZV9wdXQ6DQo+ICsJ bW9kdWxlX3B1dChmcmFtZXItPm9wcy0+b3duZXIpOw0KPiArZXJyX3B1dF9kZXZpY2U6DQo+ICsJ cHV0X2RldmljZSgmZnJhbWVyLT5kZXYpOw0KPiArCXJldHVybiBFUlJfUFRSKHJldCk7DQo+ICt9 DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChmcmFtZXJfZ2V0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBm cmFtZXJfcHV0KCkgLSByZWxlYXNlIHRoZSBmcmFtZXINCj4gKyAqIEBkZXY6IGRldmljZSB0aGF0 IHdhbnRzIHRvIHJlbGVhc2UgdGhpcyBmcmFtZXINCj4gKyAqIEBmcmFtZXI6IHRoZSBmcmFtZXIg cmV0dXJuZWQgYnkgZnJhbWVyX2dldCgpDQo+ICsgKg0KPiArICogUmVsZWFzZXMgYSByZWZjb3Vu dCB0aGUgY2FsbGVyIHJlY2VpdmVkIGZyb20gZnJhbWVyX2dldCgpLg0KPiArICovDQo+ICt2b2lk IGZyYW1lcl9wdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ ICt7DQo+ICsJaWYgKCFmcmFtZXIgfHwgSVNfRVJSKGZyYW1lcikpDQo+ICsJCXJldHVybjsNCj4g Kw0KPiArCWRldmljZV9saW5rX3JlbW92ZShkZXYsICZmcmFtZXItPmRldik7DQo+ICsNCj4gKwlt b2R1bGVfcHV0KGZyYW1lci0+b3BzLT5vd25lcik7DQo+ICsJcHV0X2RldmljZSgmZnJhbWVyLT5k ZXYpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZnJhbWVyX3B1dCk7DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIGRldm1fZnJhbWVyX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykN Cj4gK3sNCj4gKwlzdHJ1Y3QgZnJhbWVyICpmcmFtZXIgPSAqKHN0cnVjdCBmcmFtZXIgKiopcmVz Ow0KPiArDQo+ICsJZnJhbWVyX3B1dChkZXYsIGZyYW1lcik7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICogZGV2bV9mcmFtZXJfZ2V0KCkgLSBsb29rdXAgYW5kIG9idGFpbiBhIHJlZmVyZW5jZSB0 byBhIGZyYW1lci4NCj4gKyAqIEBkZXY6IGRldmljZSB0aGF0IHJlcXVlc3RzIHRoaXMgZnJhbWVy DQo+ICsgKiBAY29uX2lkOiBuYW1lIG9mIHRoZSBmcmFtZXIgZnJvbSBkZXZpY2UncyBwb2ludCBv ZiB2aWV3DQo+ICsgKg0KPiArICogR2V0cyB0aGUgZnJhbWVyIHVzaW5nIGZyYW1lcl9nZXQoKSwg YW5kIGFzc29jaWF0ZXMgYSBkZXZpY2Ugd2l0aCBpdCB1c2luZw0KPiArICogZGV2cmVzLiBPbiBk cml2ZXIgZGV0YWNoLCBmcmFtZXJfcHV0KCkgZnVuY3Rpb24gaXMgaW52b2tlZCBvbiB0aGUgZGV2 cmVzDQo+ICsgKiBkYXRhLCB0aGVuLCBkZXZyZXMgZGF0YSBpcyBmcmVlZC4NCj4gKyAqLw0KPiAr c3RydWN0IGZyYW1lciAqZGV2bV9mcmFtZXJfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qg Y2hhciAqY29uX2lkKQ0KPiArew0KPiArCXN0cnVjdCBmcmFtZXIgKipwdHIsICpmcmFtZXI7DQo+ ICsNCj4gKwlwdHIgPSBkZXZyZXNfYWxsb2MoZGV2bV9mcmFtZXJfcHV0LCBzaXplb2YoKnB0ciks IEdGUF9LRVJORUwpOw0KPiArCWlmICghcHRyKQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVN KTsNCj4gKw0KPiArCWZyYW1lciA9IGZyYW1lcl9nZXQoZGV2LCBjb25faWQpOw0KPiArCWlmICgh SVNfRVJSKGZyYW1lcikpIHsNCj4gKwkJKnB0ciA9IGZyYW1lcjsNCj4gKwkJZGV2cmVzX2FkZChk ZXYsIHB0cik7DQo+ICsJfSBlbHNlIHsNCj4gKwkJZGV2cmVzX2ZyZWUocHRyKTsNCj4gKwkJcmV0 dXJuIGZyYW1lcjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZnJhbWVyOw0KPiArfQ0KPiArRVhQ T1JUX1NZTUJPTF9HUEwoZGV2bV9mcmFtZXJfZ2V0KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBkZXZt X2ZyYW1lcl9vcHRpb25hbF9nZXQoKSAtIGxvb2t1cCBhbmQgb2J0YWluIGEgcmVmZXJlbmNlIHRv IGFuIG9wdGlvbmFsDQo+ICsgKiBmcmFtZXIuDQo+ICsgKiBAZGV2OiBkZXZpY2UgdGhhdCByZXF1 ZXN0cyB0aGlzIGZyYW1lcg0KPiArICogQGNvbl9pZDogbmFtZSBvZiB0aGUgZnJhbWVyIGZyb20g ZGV2aWNlJ3MgcG9pbnQgb2Ygdmlldw0KPiArICoNCj4gKyAqIFNhbWUgYXMgZGV2bV9mcmFtZXJf Z2V0KCkgZXhjZXB0IHRoYXQgaWYgdGhlIGZyYW1lciBkb2VzIG5vdCBleGlzdCwgaXQgaXMgbm90 DQo+ICsgKiBjb25zaWRlcmVkIGFuIGVycm9yIGFuZCAtRU5PREVWIHdpbGwgbm90IGJlIHJldHVy bmVkLiBJbnN0ZWFkIHRoZSBOVUxMIGZyYW1lcg0KPiArICogaXMgcmV0dXJuZWQsIHdoaWNoIGNh biBiZSBwYXNzZWQgdG8gb3RoZXIgZnJhbWVyIGNvbnN1bWVyIGNhbGxzLg0KPiArICovDQo+ICtz dHJ1Y3QgZnJhbWVyICpkZXZtX2ZyYW1lcl9vcHRpb25hbF9nZXQoc3RydWN0IGRldmljZSAqZGV2 LCBjb25zdCBjaGFyICpjb25faWQpDQo+ICt7DQo+ICsJc3RydWN0IGZyYW1lciAqZnJhbWVyID0g ZGV2bV9mcmFtZXJfZ2V0KGRldiwgY29uX2lkKTsNCj4gKw0KPiArCWlmIChQVFJfRVJSKGZyYW1l cikgPT0gLUVOT0RFVikNCj4gKwkJZnJhbWVyID0gTlVMTDsNCj4gKw0KPiArCXJldHVybiBmcmFt ZXI7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChkZXZtX2ZyYW1lcl9vcHRpb25hbF9nZXQp Ow0KPiArDQo+ICtzdGF0aWMgdm9pZCBmcmFtZXJfbm90aWZ5X3N0YXR1c193b3JrKHN0cnVjdCB3 b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgZnJhbWVyICpmcmFtZXIgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IGZyYW1lciwgbm90aWZ5X3N0YXR1c193b3JrKTsNCj4gKw0K PiArCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmZyYW1lci0+bm90aWZpZXJfbGlzdCwg RlJBTUVSX0VWRU5UX1NUQVRVUywgTlVMTCk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgZnJhbWVyX25v dGlmeV9zdGF0dXNfY2hhbmdlKHN0cnVjdCBmcmFtZXIgKmZyYW1lcikNCj4gK3sNCj4gKwlpZiAo IWZyYW1lcikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJLyogQ2FuIGJlIGNhbGxlZCBmcm9tIGF0 b21pYyBjb250ZXh0IC0+IGp1c3Qgc2NoZWR1bGUgYSB0YXNrIHRvIGNhbGwNCj4gKwkgKiBibG9j a2luZyBub3RpZmllcnMNCj4gKwkgKi8NCj4gKwlxdWV1ZV93b3JrKHN5c3RlbV9wb3dlcl9lZmZp Y2llbnRfd3EsICZmcmFtZXItPm5vdGlmeV9zdGF0dXNfd29yayk7DQo+ICt9DQo+ICtFWFBPUlRf U1lNQk9MX0dQTChmcmFtZXJfbm90aWZ5X3N0YXR1c19jaGFuZ2UpOw0KPiArDQo+ICsvKioNCj4g KyAqIGZyYW1lcl9jcmVhdGUoKSAtIGNyZWF0ZSBhIG5ldyBmcmFtZXINCj4gKyAqIEBkZXY6IGRl dmljZSB0aGF0IGlzIGNyZWF0aW5nIHRoZSBuZXcgZnJhbWVyDQo+ICsgKiBAbm9kZTogZGV2aWNl IG5vZGUgb2YgdGhlIGZyYW1lci4gZGVmYXVsdCB0byBkZXYtPm9mX25vZGUuDQo+ICsgKiBAb3Bz OiBmdW5jdGlvbiBwb2ludGVycyBmb3IgcGVyZm9ybWluZyBmcmFtZXIgb3BlcmF0aW9ucw0KPiAr ICoNCj4gKyAqIENhbGxlZCB0byBjcmVhdGUgYSBmcmFtZXIgdXNpbmcgZnJhbWVyIGZyYW1ld29y ay4NCj4gKyAqLw0KPiArc3RydWN0IGZyYW1lciAqZnJhbWVyX2NyZWF0ZShzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwNCj4gKwkJCSAgICAgY29uc3Qgc3RydWN0 IGZyYW1lcl9vcHMgKm9wcykNCj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArCWludCBpZDsNCj4gKwlz dHJ1Y3QgZnJhbWVyICpmcmFtZXI7DQo+ICsNCj4gKwlpZiAoV0FSTl9PTighZGV2KSkNCj4gKwkJ cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ICsNCj4gKwkvKiBnZXRfc3RhdHVzKCkgaXMgbWFu ZGF0b3J5IGlmIHRoZSBwcm92aWRlciBhc2sgZm9yIHBvbGxpbmcgc3RhdHVzICovDQo+ICsJaWYg KFdBUk5fT04oKG9wcy0+ZmxhZ3MgJiBGUkFNRVJfRkxBR19QT0xMX1NUQVRVUykgJiYgIW9wcy0+ Z2V0X3N0YXR1cykpDQo+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPiArDQo+ICsJZnJh bWVyID0ga3phbGxvYyhzaXplb2YoKmZyYW1lciksIEdGUF9LRVJORUwpOw0KPiArCWlmICghZnJh bWVyKQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4gKw0KPiArCWlkID0gaWRhX3Np bXBsZV9nZXQoJmZyYW1lcl9pZGEsIDAsIDAsIEdGUF9LRVJORUwpOw0KPiArCWlmIChpZCA8IDAp IHsNCj4gKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gZ2V0IGlkXG4iKTsNCj4gKwkJcmV0ID0g aWQ7DQo+ICsJCWdvdG8gZnJlZV9mcmFtZXI7DQo+ICsJfQ0KPiArDQo+ICsJZGV2aWNlX2luaXRp YWxpemUoJmZyYW1lci0+ZGV2KTsNCj4gKwltdXRleF9pbml0KCZmcmFtZXItPm11dGV4KTsNCj4g KwlJTklUX1dPUksoJmZyYW1lci0+bm90aWZ5X3N0YXR1c193b3JrLCBmcmFtZXJfbm90aWZ5X3N0 YXR1c193b3JrKTsNCj4gKwlJTklUX0RFTEFZRURfV09SSygmZnJhbWVyLT5wb2xsaW5nX3dvcmss IGZyYW1lcl9wb2xsaW5nX3dvcmspOw0KPiArCUJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRCgm ZnJhbWVyLT5ub3RpZmllcl9saXN0KTsNCj4gKw0KPiArCWZyYW1lci0+ZGV2LmNsYXNzID0gZnJh bWVyX2NsYXNzOw0KPiArCWZyYW1lci0+ZGV2LnBhcmVudCA9IGRldjsNCj4gKwlmcmFtZXItPmRl di5vZl9ub2RlID0gbm9kZSA/IG5vZGUgOiBkZXYtPm9mX25vZGU7DQo+ICsJZnJhbWVyLT5pZCA9 IGlkOw0KPiArCWZyYW1lci0+b3BzID0gb3BzOw0KPiArDQo+ICsJcmV0ID0gZGV2X3NldF9uYW1l KCZmcmFtZXItPmRldiwgImZyYW1lci0lcy4lZCIsIGRldl9uYW1lKGRldiksIGlkKTsNCj4gKwlp ZiAocmV0KQ0KPiArCQlnb3RvIHB1dF9kZXY7DQo+ICsNCj4gKwkvKiBmcmFtZXItc3VwcGx5ICov DQo+ICsJZnJhbWVyLT5wd3IgPSByZWd1bGF0b3JfZ2V0X29wdGlvbmFsKCZmcmFtZXItPmRldiwg ImZyYW1lciIpOw0KPiArCWlmIChJU19FUlIoZnJhbWVyLT5wd3IpKSB7DQo+ICsJCXJldCA9IFBU Ul9FUlIoZnJhbWVyLT5wd3IpOw0KPiArCQlpZiAocmV0ID09IC1FUFJPQkVfREVGRVIpDQo+ICsJ CQlnb3RvIHB1dF9kZXY7DQo+ICsNCj4gKwkJZnJhbWVyLT5wd3IgPSBOVUxMOw0KPiArCX0NCj4g Kw0KPiArCXJldCA9IGRldmljZV9hZGQoJmZyYW1lci0+ZGV2KTsNCj4gKwlpZiAocmV0KQ0KPiAr CQlnb3RvIHB1dF9kZXY7DQo+ICsNCj4gKwlpZiAocG1fcnVudGltZV9lbmFibGVkKGRldikpIHsN Cj4gKwkJcG1fcnVudGltZV9lbmFibGUoJmZyYW1lci0+ZGV2KTsNCj4gKwkJcG1fcnVudGltZV9u b19jYWxsYmFja3MoJmZyYW1lci0+ZGV2KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZnJhbWVy Ow0KPiArDQo+ICtwdXRfZGV2Og0KPiArCXB1dF9kZXZpY2UoJmZyYW1lci0+ZGV2KTsgIC8qIGNh bGxzIGZyYW1lcl9yZWxlYXNlKCkgd2hpY2ggZnJlZXMgcmVzb3VyY2VzICovDQo+ICsJcmV0dXJu IEVSUl9QVFIocmV0KTsNCj4gKw0KPiArZnJlZV9mcmFtZXI6DQo+ICsJa2ZyZWUoZnJhbWVyKTsN Cj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZnJh bWVyX2NyZWF0ZSk7DQo+ICsNCj4gKy8qKg0KPiArICogZnJhbWVyX2Rlc3Ryb3koKSAtIGRlc3Ry b3kgdGhlIGZyYW1lcg0KPiArICogQGZyYW1lcjogdGhlIGZyYW1lciB0byBiZSBkZXN0cm95ZWQN Cj4gKyAqDQo+ICsgKiBDYWxsZWQgdG8gZGVzdHJveSB0aGUgZnJhbWVyLg0KPiArICovDQo+ICt2 b2lkIGZyYW1lcl9kZXN0cm95KHN0cnVjdCBmcmFtZXIgKmZyYW1lcikNCj4gK3sNCj4gKwkvKiBw b2xsaW5nX3dvcmsgc2hvdWxkIGFscmVhZHkgYmUgc3RvcHBlZCBidXQgaWYgZnJhbWVyX2V4aXQo KSB3YXMgbm90DQo+ICsJICogY2FsbGVkIChidWcpLCBoZXJlIGl0J3MgdGhlIGxhc3QgdGltZSB0 byBkbyB0aGF0IC4uLg0KPiArCSAqLw0KPiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZnJh bWVyLT5wb2xsaW5nX3dvcmspOw0KPiArCWNhbmNlbF93b3JrX3N5bmMoJmZyYW1lci0+bm90aWZ5 X3N0YXR1c193b3JrKTsNCj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJmZyYW1lci0+ZGV2KTsNCj4g KwlkZXZpY2VfdW5yZWdpc3RlcigmZnJhbWVyLT5kZXYpOyAvKiBjYWxscyBmcmFtZXJfcmVsZWFz ZSgpIHdoaWNoIGZyZWVzIHJlc291cmNlcyAqLw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwo ZnJhbWVyX2Rlc3Ryb3kpOw0KPiArDQo+ICtzdGF0aWMgdm9pZCBkZXZtX2ZyYW1lcl9kZXN0cm95 KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcmVzKQ0KPiArew0KPiArCXN0cnVjdCBmcmFtZXIg KmZyYW1lciA9ICooc3RydWN0IGZyYW1lciAqKilyZXM7DQo+ICsNCj4gKwlmcmFtZXJfZGVzdHJv eShmcmFtZXIpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGRldm1fZnJhbWVyX2NyZWF0ZSgp IC0gY3JlYXRlIGEgbmV3IGZyYW1lcg0KPiArICogQGRldjogZGV2aWNlIHRoYXQgaXMgY3JlYXRp bmcgdGhlIG5ldyBmcmFtZXINCj4gKyAqIEBub2RlOiBkZXZpY2Ugbm9kZSBvZiB0aGUgZnJhbWVy DQo+ICsgKiBAb3BzOiBmdW5jdGlvbiBwb2ludGVycyBmb3IgcGVyZm9ybWluZyBmcmFtZXIgb3Bl cmF0aW9ucw0KPiArICoNCj4gKyAqIENyZWF0ZXMgYSBuZXcgZnJhbWVyIGRldmljZSBhZGRpbmcg aXQgdG8gdGhlIGZyYW1lciBjbGFzcy4NCj4gKyAqIFdoaWxlIGF0IHRoYXQsIGl0IGFsc28gYXNz b2NpYXRlcyB0aGUgZGV2aWNlIHdpdGggdGhlIGZyYW1lciB1c2luZyBkZXZyZXMuDQo+ICsgKiBP biBkcml2ZXIgZGV0YWNoLCByZWxlYXNlIGZ1bmN0aW9uIGlzIGludm9rZWQgb24gdGhlIGRldnJl cyBkYXRhLA0KPiArICogdGhlbiwgZGV2cmVzIGRhdGEgaXMgZnJlZWQuDQo+ICsgKi8NCj4gK3N0 cnVjdCBmcmFtZXIgKmRldm1fZnJhbWVyX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZSwNCj4gKwkJCQkgIGNvbnN0IHN0cnVjdCBmcmFtZXJfb3BzICpv cHMpDQo+ICt7DQo+ICsJc3RydWN0IGZyYW1lciAqKnB0ciwgKmZyYW1lcjsNCj4gKw0KPiArCXB0 ciA9IGRldnJlc19hbGxvYyhkZXZtX2ZyYW1lcl9kZXN0cm95LCBzaXplb2YoKnB0ciksIEdGUF9L RVJORUwpOw0KPiArCWlmICghcHRyKQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4g Kw0KPiArCWZyYW1lciA9IGZyYW1lcl9jcmVhdGUoZGV2LCBub2RlLCBvcHMpOw0KPiArCWlmICgh SVNfRVJSKGZyYW1lcikpIHsNCj4gKwkJKnB0ciA9IGZyYW1lcjsNCj4gKwkJZGV2cmVzX2FkZChk ZXYsIHB0cik7DQo+ICsJfSBlbHNlIHsNCj4gKwkJZGV2cmVzX2ZyZWUocHRyKTsNCj4gKwl9DQo+ ICsNCj4gKwlyZXR1cm4gZnJhbWVyOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9m cmFtZXJfY3JlYXRlKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBmcmFtZXJfcHJvdmlkZXJfc2ltcGxl X29mX3hsYXRlKCkgLSByZXR1cm5zIHRoZSBmcmFtZXIgaW5zdGFuY2UgZnJvbSBmcmFtZXIgcHJv dmlkZXINCj4gKyAqIEBkZXY6IHRoZSBmcmFtZXIgcHJvdmlkZXIgZGV2aWNlDQo+ICsgKiBAYXJn czogb2ZfcGhhbmRsZV9hcmdzIChub3QgdXNlZCBoZXJlKQ0KPiArICoNCj4gKyAqIEludGVuZGVk IHRvIGJlIHVzZWQgYnkgZnJhbWVyIHByb3ZpZGVyIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUg I2ZyYW1lci1jZWxscyBpcw0KPiArICogMC4gRm9yIG90aGVyIGNhc2VzIHdoZXJlICNmcmFtZXIt Y2VsbHMgaXMgZ3JlYXRlciB0aGFuICcwJywgdGhlIGZyYW1lciBwcm92aWRlcg0KPiArICogc2hv dWxkIHByb3ZpZGUgYSBjdXN0b20gb2ZfeGxhdGUgZnVuY3Rpb24gdGhhdCByZWFkcyB0aGUgKmFy Z3MqIGFuZCByZXR1cm5zDQo+ICsgKiB0aGUgYXBwcm9wcmlhdGUgZnJhbWVyLg0KPiArICovDQo+ ICtzdHJ1Y3QgZnJhbWVyICpmcmFtZXJfcHJvdmlkZXJfc2ltcGxlX29mX3hsYXRlKHN0cnVjdCBk ZXZpY2UgKmRldiwgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqYXJncykNCj4gK3sNCj4gKwlzdHJ1 Y3QgZnJhbWVyICpmcmFtZXI7DQo+ICsJc3RydWN0IGNsYXNzX2Rldl9pdGVyIGl0ZXI7DQo+ICsN Cj4gKwljbGFzc19kZXZfaXRlcl9pbml0KCZpdGVyLCBmcmFtZXJfY2xhc3MsIE5VTEwsIE5VTEwp Ow0KPiArCXdoaWxlICgoZGV2ID0gY2xhc3NfZGV2X2l0ZXJfbmV4dCgmaXRlcikpKSB7DQo+ICsJ CWZyYW1lciA9IGRldl90b19mcmFtZXIoZGV2KTsNCj4gKwkJaWYgKGFyZ3MtPm5wICE9IGZyYW1l ci0+ZGV2Lm9mX25vZGUpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQljbGFzc19kZXZfaXRl cl9leGl0KCZpdGVyKTsNCj4gKwkJcmV0dXJuIGZyYW1lcjsNCj4gKwl9DQo+ICsNCj4gKwljbGFz c19kZXZfaXRlcl9leGl0KCZpdGVyKTsNCj4gKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsNCj4g K30NCj4gK0VYUE9SVF9TWU1CT0xfR1BMKGZyYW1lcl9zaW1wbGVfb2ZfeGxhdGUpOw0KPiArDQo+ ICsvKioNCj4gKyAqIF9fZnJhbWVyX3Byb3ZpZGVyX29mX3JlZ2lzdGVyKCkgLSBjcmVhdGUvcmVn aXN0ZXIgZnJhbWVyIHByb3ZpZGVyIHdpdGggdGhlIGZyYW1ld29yaw0KPiArICogQGRldjogc3Ry dWN0IGRldmljZSBvZiB0aGUgZnJhbWVyIHByb3ZpZGVyDQo+ICsgKiBAb3duZXI6IHRoZSBtb2R1 bGUgb3duZXIgY29udGFpbmluZyBvZl94bGF0ZQ0KPiArICogQG9mX3hsYXRlOiBmdW5jdGlvbiBw b2ludGVyIHRvIG9idGFpbiBmcmFtZXIgaW5zdGFuY2UgZnJvbSBmcmFtZXIgcHJvdmlkZXINCj4g KyAqDQo+ICsgKiBDcmVhdGVzIHN0cnVjdCBmcmFtZXJfcHJvdmlkZXIgZnJvbSBkZXYgYW5kIG9m X3hsYXRlIGZ1bmN0aW9uIHBvaW50ZXIuDQo+ICsgKiBUaGlzIGlzIHVzZWQgaW4gdGhlIGNhc2Ug b2YgZHQgYm9vdCBmb3IgZmluZGluZyB0aGUgZnJhbWVyIGluc3RhbmNlIGZyb20NCj4gKyAqIGZy YW1lciBwcm92aWRlci4NCj4gKyAqLw0KPiArc3RydWN0IGZyYW1lcl9wcm92aWRlciAqDQo+ICtf X2ZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBt b2R1bGUgKm93bmVyLA0KPiArCQkJICAgICAgc3RydWN0IGZyYW1lciAqKCpvZl94bGF0ZSkoc3Ry dWN0IGRldmljZSAqZGV2LA0KPiArCQkJCQkJCSBzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICphcmdz KSkNCj4gK3sNCj4gKwlzdHJ1Y3QgZnJhbWVyX3Byb3ZpZGVyICpmcmFtZXJfcHJvdmlkZXI7DQo+ ICsNCj4gKwlmcmFtZXJfcHJvdmlkZXIgPSBremFsbG9jKHNpemVvZigqZnJhbWVyX3Byb3ZpZGVy KSwgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFmcmFtZXJfcHJvdmlkZXIpDQo+ICsJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOw0KPiArDQo+ICsJZnJhbWVyX3Byb3ZpZGVyLT5kZXYgPSBkZXY7DQo+ ICsJZnJhbWVyX3Byb3ZpZGVyLT5vd25lciA9IG93bmVyOw0KPiArCWZyYW1lcl9wcm92aWRlci0+ b2ZfeGxhdGUgPSBvZl94bGF0ZTsNCj4gKw0KPiArCW9mX25vZGVfZ2V0KGZyYW1lcl9wcm92aWRl ci0+ZGV2LT5vZl9ub2RlKTsNCj4gKw0KPiArCW11dGV4X2xvY2soJmZyYW1lcl9wcm92aWRlcl9t dXRleCk7DQo+ICsJbGlzdF9hZGRfdGFpbCgmZnJhbWVyX3Byb3ZpZGVyLT5saXN0LCAmZnJhbWVy X3Byb3ZpZGVyX2xpc3QpOw0KPiArCW11dGV4X3VubG9jaygmZnJhbWVyX3Byb3ZpZGVyX211dGV4 KTsNCj4gKw0KPiArCXJldHVybiBmcmFtZXJfcHJvdmlkZXI7DQo+ICt9DQo+ICtFWFBPUlRfU1lN Qk9MX0dQTChfX2ZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3Rlcik7DQo+ICsNCj4gKy8qKg0KPiAr ICogZnJhbWVyX3Byb3ZpZGVyX29mX3VucmVnaXN0ZXIoKSAtIHVucmVnaXN0ZXIgZnJhbWVyIHBy b3ZpZGVyIGZyb20gdGhlIGZyYW1ld29yaw0KPiArICogQGZyYW1lcl9wcm92aWRlcjogZnJhbWVy IHByb3ZpZGVyIHJldHVybmVkIGJ5IGZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3RlcigpDQo+ICsg Kg0KPiArICogUmVtb3ZlcyB0aGUgZnJhbWVyX3Byb3ZpZGVyIGNyZWF0ZWQgdXNpbmcgZnJhbWVy X3Byb3ZpZGVyX29mX3JlZ2lzdGVyKCkuDQo+ICsgKi8NCj4gK3ZvaWQgZnJhbWVyX3Byb3ZpZGVy X29mX3VucmVnaXN0ZXIoc3RydWN0IGZyYW1lcl9wcm92aWRlciAqZnJhbWVyX3Byb3ZpZGVyKQ0K PiArew0KPiArCWlmIChJU19FUlIoZnJhbWVyX3Byb3ZpZGVyKSkNCj4gKwkJcmV0dXJuOw0KPiAr DQo+ICsJbXV0ZXhfbG9jaygmZnJhbWVyX3Byb3ZpZGVyX211dGV4KTsNCj4gKwlsaXN0X2RlbCgm ZnJhbWVyX3Byb3ZpZGVyLT5saXN0KTsNCj4gKwlvZl9ub2RlX3B1dChmcmFtZXJfcHJvdmlkZXIt PmRldi0+b2Zfbm9kZSk7DQo+ICsJa2ZyZWUoZnJhbWVyX3Byb3ZpZGVyKTsNCj4gKwltdXRleF91 bmxvY2soJmZyYW1lcl9wcm92aWRlcl9tdXRleCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MX0dQ TChvZl9mcmFtZXJfcHJvdmlkZXJfdW5yZWdpc3Rlcik7DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGRl dm1fZnJhbWVyX3Byb3ZpZGVyX29mX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCB2b2lk ICpyZXMpDQo+ICt7DQo+ICsJc3RydWN0IGZyYW1lcl9wcm92aWRlciAqZnJhbWVyX3Byb3ZpZGVy ID0gKihzdHJ1Y3QgZnJhbWVyX3Byb3ZpZGVyICoqKXJlczsNCj4gKw0KPiArCWZyYW1lcl9wcm92 aWRlcl9vZl91bnJlZ2lzdGVyKGZyYW1lcl9wcm92aWRlcik7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICogX19kZXZtX2ZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3RlcigpIC0gY3JlYXRlL3JlZ2lz dGVyIGZyYW1lciBwcm92aWRlciB3aXRoDQo+ICsgKiB0aGUgZnJhbWV3b3JrDQo+ICsgKiBAZGV2 OiBzdHJ1Y3QgZGV2aWNlIG9mIHRoZSBmcmFtZXIgcHJvdmlkZXINCj4gKyAqIEBvd25lcjogdGhl IG1vZHVsZSBvd25lciBjb250YWluaW5nIG9mX3hsYXRlDQo+ICsgKiBAb2ZfeGxhdGU6IGZ1bmN0 aW9uIHBvaW50ZXIgdG8gb2J0YWluIGZyYW1lciBpbnN0YW5jZSBmcm9tIGZyYW1lciBwcm92aWRl cg0KPiArICoNCj4gKyAqIENyZWF0ZXMgc3RydWN0IGZyYW1lcl9wcm92aWRlciBmcm9tIGRldiBh bmQgb2ZfeGxhdGUgZnVuY3Rpb24gcG9pbnRlci4NCj4gKyAqIFRoaXMgaXMgdXNlZCBpbiB0aGUg Y2FzZSBvZiBkdCBib290IGZvciBmaW5kaW5nIHRoZSBmcmFtZXIgaW5zdGFuY2UgZnJvbQ0KPiAr ICogZnJhbWVyIHByb3ZpZGVyLiBXaGlsZSBhdCB0aGF0LCBpdCBhbHNvIGFzc29jaWF0ZXMgdGhl IGRldmljZSB3aXRoIHRoZQ0KPiArICogZnJhbWVyIHByb3ZpZGVyIHVzaW5nIGRldnJlcy4gT24g ZHJpdmVyIGRldGFjaCwgcmVsZWFzZSBmdW5jdGlvbiBpcyBpbnZva2VkDQo+ICsgKiBvbiB0aGUg ZGV2cmVzIGRhdGEsIHRoZW4sIGRldnJlcyBkYXRhIGlzIGZyZWVkLg0KPiArICovDQo+ICtzdHJ1 Y3QgZnJhbWVyX3Byb3ZpZGVyICoNCj4gK19fZGV2bV9mcmFtZXJfcHJvdmlkZXJfb2ZfcmVnaXN0 ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwNCj4gKwkJCQkgICBz dHJ1Y3QgZnJhbWVyICooKm9mX3hsYXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkJ ICAgICAgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqYXJncykpDQo+ICt7DQo+ICsJc3RydWN0IGZy YW1lcl9wcm92aWRlciAqKnB0ciwgKmZyYW1lcl9wcm92aWRlcjsNCj4gKw0KPiArCXB0ciA9IGRl dnJlc19hbGxvYyhkZXZtX2ZyYW1lcl9wcm92aWRlcl9vZl91bnJlZ2lzdGVyLCBzaXplb2YoKnB0 ciksIEdGUF9LRVJORUwpOw0KPiArCWlmICghcHRyKQ0KPiArCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsNCj4gKw0KPiArCWZyYW1lcl9wcm92aWRlciA9IF9fZnJhbWVyX3Byb3ZpZGVyX29mX3Jl Z2lzdGVyKGRldiwgb3duZXIsIG9mX3hsYXRlKTsNCj4gKwlpZiAoIUlTX0VSUihmcmFtZXJfcHJv dmlkZXIpKSB7DQo+ICsJCSpwdHIgPSBmcmFtZXJfcHJvdmlkZXI7DQo+ICsJCWRldnJlc19hZGQo ZGV2LCBwdHIpOw0KPiArCX0gZWxzZSB7DQo+ICsJCWRldnJlc19mcmVlKHB0cik7DQo+ICsJfQ0K PiArDQo+ICsJcmV0dXJuIGZyYW1lcl9wcm92aWRlcjsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0xf R1BMKF9fZGV2bV9mcmFtZXJfcHJvdmlkZXJfb2ZfcmVnaXN0ZXIpOw0KPiArDQo+ICsvKioNCj4g KyAqIGZyYW1lcl9yZWxlYXNlKCkgLSByZWxlYXNlIHRoZSBmcmFtZXINCj4gKyAqIEBkZXY6IHRo ZSBkZXYgbWVtYmVyIHdpdGhpbiBmcmFtZXINCj4gKyAqDQo+ICsgKiBXaGVuIHRoZSBsYXN0IHJl ZmVyZW5jZSB0byB0aGUgZGV2aWNlIGlzIHJlbW92ZWQsIGl0IGlzIGNhbGxlZA0KPiArICogZnJv bSB0aGUgZW1iZWRkZWQga29iamVjdCBhcyByZWxlYXNlIG1ldGhvZC4NCj4gKyAqLw0KPiArc3Rh dGljIHZvaWQgZnJhbWVyX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArCXN0 cnVjdCBmcmFtZXIgKmZyYW1lcjsNCj4gKw0KPiArCWZyYW1lciA9IGRldl90b19mcmFtZXIoZGV2 KTsNCj4gKwlyZWd1bGF0b3JfcHV0KGZyYW1lci0+cHdyKTsNCj4gKwlpZGFfc2ltcGxlX3JlbW92 ZSgmZnJhbWVyX2lkYSwgZnJhbWVyLT5pZCk7DQo+ICsJa2ZyZWUoZnJhbWVyKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludCBfX2luaXQgZnJhbWVyX2NvcmVfaW5pdCh2b2lkKQ0KPiArew0KPiAr CWZyYW1lcl9jbGFzcyA9IGNsYXNzX2NyZWF0ZSgiZnJhbWVyIik7DQo+ICsJaWYgKElTX0VSUihm cmFtZXJfY2xhc3MpKSB7DQo+ICsJCXByX2VycigiZmFpbGVkIHRvIGNyZWF0ZSBmcmFtZXIgY2xh c3MgKCVwZSlcbiIsIGZyYW1lcl9jbGFzcyk7DQo+ICsJCXJldHVybiBQVFJfRVJSKGZyYW1lcl9j bGFzcyk7DQo+ICsJfQ0KPiArDQo+ICsJZnJhbWVyX2NsYXNzLT5kZXZfcmVsZWFzZSA9IGZyYW1l cl9yZWxlYXNlOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtkZXZpY2VfaW5pdGNhbGwo ZnJhbWVyX2NvcmVfaW5pdCk7DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZyYW1lci9m cmFtZXItcHJvdmlkZXIuaCBiL2luY2x1ZGUvbGludXgvZnJhbWVyL2ZyYW1lci1wcm92aWRlci5o DQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTQxYTM0M2Mz YmE3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvaW5jbHVkZS9saW51eC9mcmFtZXIvZnJhbWVy LXByb3ZpZGVyLmgNCj4gQEAgLTAsMCArMSwxOTQgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovDQo+ICsvKg0KPiArICogR2VuZXJpYyBmcmFtZXIg cHJvZmlkZXIgaGVhZGVyIGZpbGUNCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgMjAyMyBDUyBHUk9V UCBGcmFuY2UNCj4gKyAqDQo+ICsgKiBBdXRob3I6IEhlcnZlIENvZGluYSA8aGVydmUuY29kaW5h QGJvb3RsaW4uY29tPg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX19EUklWRVJTX1BST1ZJREVS X0ZSQU1FUl9IDQo+ICsjZGVmaW5lIF9fRFJJVkVSU19QUk9WSURFUl9GUkFNRVJfSA0KPiArDQo+ ICsjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZnJhbWVyL2Zy YW1lci5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ICsNCj4gKyNkZWZpbmUgRlJB TUVSX0ZMQUdfUE9MTF9TVEFUVVMgIEJJVCgwKQ0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBm cmFtZXJfb3BzIC0gc2V0IG9mIGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBwZXJmb3JtaW5nIGZyYW1l ciBvcGVyYXRpb25zDQo+ICsgKiBAaW5pdDogb3BlcmF0aW9uIHRvIGJlIHBlcmZvcm1lZCBmb3Ig aW5pdGlhbGl6aW5nIHRoZSBmcmFtZXINCj4gKyAqIEBleGl0OiBvcGVyYXRpb24gdG8gYmUgcGVy Zm9ybWVkIHdoaWxlIGV4aXRpbmcNCj4gKyAqIEBwb3dlcl9vbjogcG93ZXJpbmcgb24gdGhlIGZy YW1lcg0KPiArICogQHBvd2VyX29mZjogcG93ZXJpbmcgb2ZmIHRoZSBmcmFtZXINCj4gKyAqIEBm bGFnczogT1ItZWQgZmxhZ3MgKEZSQU1FUl9GTEFHXyopIHRvIGFzayBmb3IgY29yZSBmdW5jdGlv bmFsaXR5DQo+ICsgKiAgICAgICAgICAtIEBGUkFNRVJfRkxBR19QT0xMX1NUQVRVUzoNCj4gKyAq ICAgICAgICAgICAgQXNrIHRoZSBjb3JlIHRvIHBlcmZvbSBhIHBvbGxpbmcgdG8gZ2V0IHRoZSBm cmFtZXIgc3RhdHVzIGFuZA0KPiArICogICAgICAgICAgICBub3RpZnkgY29uc3VtZXJzIG9uIGNo YW5nZS4NCj4gKyAqICAgICAgICAgICAgVGhlIGZyYW1lciBzaG91bGQgY2FsbCBAZnJhbWVyX25v dGlmeV9zdGF0dXNfY2hhbmdlKCkgd2hlbiBpdA0KPiArICogICAgICAgICAgICBkZXRlY3RzIGEg c3RhdHVzIGNoYW5nZS4gVGhpcyBpcyB1c2FsbHkgZG9uZSB1c2luZyBpbnRlcnJ1dHBzLg0KPiAr ICogICAgICAgICAgICBJZiB0aGUgZnJhbWVyIGNhbm5vdCBkZXRlY3QgdGhpcyBjaGFuZ2UsIGl0 IGNhbiBhc2sgdGhlIGNvcmUgZm9yDQo+ICsgKiAgICAgICAgICAgIGEgc3RhdHVzIHBvbGxpbmcu IFRoZSBjb3JlIHdpbGwgY2FsbCBAZ2V0X3N0YXR1cygpIHBlcmlvZGljYWxseQ0KPiArICogICAg ICAgICAgICBhbmQsIG9uIGNoYW5nZSBkZXRlY3RlZCwgaXQgd2lsbCBub3RpZnkgdGhlIGNvbnN1 bWVyLg0KPiArICogICAgICAgICAgICB0aGUgQGdldF9zdGF0dXMoKQ0KPiArICogQG93bmVyOiB0 aGUgbW9kdWxlIG93bmVyIGNvbnRhaW5pbmcgdGhlIG9wcw0KPiArICovDQo+ICtzdHJ1Y3QgZnJh bWVyX29wcyB7DQo+ICsJaW50CSgqaW5pdCkoc3RydWN0IGZyYW1lciAqZnJhbWVyKTsNCj4gKwl2 b2lkCSgqZXhpdCkoc3RydWN0IGZyYW1lciAqZnJhbWVyKTsNCj4gKwlpbnQJKCpwb3dlcl9vbiko c3RydWN0IGZyYW1lciAqZnJhbWVyKTsNCj4gKwlpbnQJKCpwb3dlcl9vZmYpKHN0cnVjdCBmcmFt ZXIgKmZyYW1lcik7DQo+ICsNCj4gKwkvKioNCj4gKwkgKiBAZ2V0X3N0YXR1czoNCj4gKwkgKg0K PiArCSAqIE9wdGlvbmFsLg0KPiArCSAqDQo+ICsJICogVXNlZCB0byBnZXQgdGhlIGZyYW1lciBz dGF0dXMuIGZyYW1lcl9pbml0KCkgbXVzdCBoYXZlDQo+ICsJICogYmVlbiBjYWxsZWQgb24gdGhl IGZyYW1lci4NCj4gKwkgKg0KPiArCSAqIFJldHVybnM6IDAgaWYgc3VjY2Vzc2Z1bCwgYW4gbmVn YXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UNCj4gKwkgKi8NCj4gKwlpbnQJKCpnZXRfc3RhdHVz KShzdHJ1Y3QgZnJhbWVyICpmcmFtZXIsIHN0cnVjdCBmcmFtZXJfc3RhdHVzICpzdGF0dXMpOw0K PiArDQo+ICsJLyoqDQo+ICsJICogQHNldF9jb25maWc6DQo+ICsJICoNCj4gKwkgKiBPcHRpb25h bC4NCj4gKwkgKg0KPiArCSAqIFVzZWQgdG8gc2V0IHRoZSBmcmFtZXIgY29uZmlndXJhdGlvbi4g ZnJhbWVyX2luaXQoKSBtdXN0IGhhdmUNCj4gKwkgKiBiZWVuIGNhbGxlZCBvbiB0aGUgZnJhbWVy Lg0KPiArCSAqDQo+ICsJICogUmV0dXJuczogMCBpZiBzdWNjZXNzZnVsLCBhbiBuZWdhdGl2ZSBl cnJvciBjb2RlIG90aGVyd2lzZQ0KPiArCSAqLw0KPiArCWludAkoKnNldF9jb25maWcpKHN0cnVj dCBmcmFtZXIgKmZyYW1lciwgY29uc3Qgc3RydWN0IGZyYW1lcl9jb25maWcgKmNvbmZpZyk7DQo+ ICsNCj4gKwkvKioNCj4gKwkgKiBAZ2V0X2NvbmZpZzoNCj4gKwkgKg0KPiArCSAqIE9wdGlvbmFs Lg0KPiArCSAqDQo+ICsJICogVXNlZCB0byBnZXQgdGhlIGZyYW1lciBjb25maWd1cmF0aW9uLiBm cmFtZXJfaW5pdCgpIG11c3QgaGF2ZQ0KPiArCSAqIGJlZW4gY2FsbGVkIG9uIHRoZSBmcmFtZXIu DQo+ICsJICoNCj4gKwkgKiBSZXR1cm5zOiAwIGlmIHN1Y2Nlc3NmdWwsIGFuIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb3RoZXJ3aXNlDQo+ICsJICovDQo+ICsJaW50CSgqZ2V0X2NvbmZpZykoc3RydWN0 IGZyYW1lciAqZnJhbWVyLCBzdHJ1Y3QgZnJhbWVyX2NvbmZpZyAqY29uZmlnKTsNCj4gKw0KPiAr CXUzMiBmbGFnczsNCj4gKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsNCj4gK307DQo+ICsNCj4gKy8q Kg0KPiArICogc3RydWN0IGZyYW1lcl9wcm92aWRlciAtIHJlcHJlc2VudHMgdGhlIGZyYW1lciBw cm92aWRlcg0KPiArICogQGRldjogZnJhbWVyIHByb3ZpZGVyIGRldmljZQ0KPiArICogQGNoaWxk cmVuOiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCAoZGV2LT5vZl9ub2RlKSBj aGlsZCBub2RlDQo+ICsgKiBAb3duZXI6IHRoZSBtb2R1bGUgb3duZXIgaGF2aW5nIG9mX3hsYXRl DQo+ICsgKiBAbGlzdDogdG8gbWFpbnRhaW4gYSBsaW5rZWQgbGlzdCBvZiBmcmFtZXIgcHJvdmlk ZXJzDQo+ICsgKiBAb2ZfeGxhdGU6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gb2J0YWluIGZyYW1lciBp bnN0YW5jZSBmcm9tIGZyYW1lciBwb2ludGVyDQo+ICsgKi8NCj4gK3N0cnVjdCBmcmFtZXJfcHJv dmlkZXIgew0KPiArCXN0cnVjdCBkZXZpY2UJCSpkZXY7DQo+ICsJc3RydWN0IG1vZHVsZQkJKm93 bmVyOw0KPiArCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsNCj4gKwlzdHJ1Y3QgZnJhbWVyICogKCpv Zl94bGF0ZSkoc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJCSAgICBzdHJ1Y3Qgb2ZfcGhhbmRs ZV9hcmdzICphcmdzKTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmFtZXJf c2V0X2RydmRhdGEoc3RydWN0IGZyYW1lciAqZnJhbWVyLCB2b2lkICpkYXRhKQ0KPiArew0KPiAr CWRldl9zZXRfZHJ2ZGF0YSgmZnJhbWVyLT5kZXYsIGRhdGEpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgKmZyYW1lcl9nZXRfZHJ2ZGF0YShzdHJ1Y3QgZnJhbWVyICpmcmFtZXIp DQo+ICt7DQo+ICsJcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YSgmZnJhbWVyLT5kZXYpOw0KPiArfQ0K PiArDQo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfR0VORVJJQ19GUkFNRVIpDQo+ICsNCj4gKy8q IENyZWF0ZSBhbmQgZGVzdHJveSBhIGZyYW1lciAqLw0KPiArc3RydWN0IGZyYW1lciAqZnJhbWVy X2NyZWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwNCj4g KwkJCSAgICAgY29uc3Qgc3RydWN0IGZyYW1lcl9vcHMgKm9wcyk7DQo+ICt2b2lkIGZyYW1lcl9k ZXN0cm95KHN0cnVjdCBmcmFtZXIgKmZyYW1lcik7DQo+ICsNCj4gKy8qIGRldm0gdmVyc2lvbiAq Lw0KPiArc3RydWN0IGZyYW1lciAqZGV2bV9mcmFtZXJfY3JlYXRlKHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLA0KPiArCQkJCSAgY29uc3Qgc3RydWN0IGZyYW1l cl9vcHMgKm9wcyk7DQo+ICsNCj4gK3N0cnVjdCBmcmFtZXIgKmZyYW1lcl9wcm92aWRlcl9zaW1w bGVfb2ZfeGxhdGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJCQkgICAgICAgc3RydWN0IG9m X3BoYW5kbGVfYXJncyAqYXJncyk7DQo+ICsNCj4gK3N0cnVjdCBmcmFtZXJfcHJvdmlkZXIgKg0K PiArX19mcmFtZXJfcHJvdmlkZXJfb2ZfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgbW9kdWxlICpvd25lciwNCj4gKwkJCSAgICAgIHN0cnVjdCBmcmFtZXIgKigqb2ZfeGxhdGUp KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkJCQkgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAq YXJncykpOw0KPiArDQo+ICt2b2lkIGZyYW1lcl9wcm92aWRlcl9vZl91bnJlZ2lzdGVyKHN0cnVj dCBmcmFtZXJfcHJvdmlkZXIgKmZyYW1lcl9wcm92aWRlcik7DQo+ICsNCj4gK3N0cnVjdCBmcmFt ZXJfcHJvdmlkZXIgKg0KPiArX19kZXZtX2ZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3RlcihzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBtb2R1bGUgKm93bmVyLA0KPiArCQkJCSAgIHN0cnVjdCBm cmFtZXIgKigqb2ZfeGxhdGUpKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gKwkJCQkJCQkgICAgICBz dHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzICphcmdzKSk7DQo+ICsNCj4gK3ZvaWQgZnJhbWVyX25vdGlm eV9zdGF0dXNfY2hhbmdlKHN0cnVjdCBmcmFtZXIgKmZyYW1lcik7DQo+ICsNCj4gKyNlbHNlIC8q IElTX0VOQUJMRUQoQ09ORklHX0dFTkVSSUNfRlJBTUVSKSAqLw0KPiArDQo+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCBmcmFtZXIgKmZyYW1lcl9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgZGV2aWNlX25vZGUgKm5vZGUsDQo+ICsJCQkJCSAgIGNvbnN0IHN0cnVjdCBmcmFtZXJfb3Bz ICpvcHMpDQo+ICt7DQo+ICsJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbmxpbmUgdm9pZCBmcmFtZXJfZGVzdHJveShzdHJ1Y3QgZnJhbWVyICpmcmFtZXIp DQo+ICt7DQo+ICt9DQo+ICsNCj4gKy8qIGRldm0gdmVyc2lvbiAqLw0KPiArc3RhdGljIGlubGlu ZSBzdHJ1Y3QgZnJhbWVyICpkZXZtX2ZyYW1lcl9jcmVhdGUoc3RydWN0IGRldmljZSAqZGV2LCBz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsDQo+ICsJCQkJCQljb25zdCBzdHJ1Y3QgZnJhbWVyX29w cyAqb3BzKQ0KPiArew0KPiArCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBmcmFtZXIgKmZyYW1lcl9wcm92aWRlcl9zaW1wbGVfb2Zf eGxhdGUoc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJCQkJCSAgICAgc3RydWN0IG9mX3BoYW5k bGVfYXJncyAqYXJncykNCj4gK3sNCj4gKwlyZXR1cm4gRVJSX1BUUigtRU5PU1lTKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJhbWVyX3Byb3ZpZGVyICoNCj4gK19fZnJh bWVyX3Byb3ZpZGVyX29mX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1vZHVs ZSAqb3duZXIsDQo+ICsJCQkgICAgICBzdHJ1Y3QgZnJhbWVyICooKm9mX3hsYXRlKShzdHJ1Y3Qg ZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkJIHN0cnVjdCBvZl9waGFuZGxlX2FyZ3MgKmFyZ3MpKQ0K PiArew0KPiArCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGZy YW1lcl9wcm92aWRlcl9vZl91bnJlZ2lzdGVyKHN0cnVjdCBmcmFtZXJfcHJvdmlkZXIgKmZyYW1l cl9wcm92aWRlcikNCj4gK3sNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJh bWVyX3Byb3ZpZGVyICoNCj4gK19fZGV2bV9mcmFtZXJfcHJvdmlkZXJfb2ZfcmVnaXN0ZXIoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbW9kdWxlICpvd25lciwNCj4gKwkJCQkgICBzdHJ1Y3Qg ZnJhbWVyICooKm9mX3hsYXRlKShzdHJ1Y3QgZGV2aWNlICpkZXYsDQo+ICsJCQkJCQkJICAgICAg c3RydWN0IG9mX3BoYW5kbGVfYXJncyAqYXJncykpDQo+ICt7DQo+ICsJcmV0dXJuIEVSUl9QVFIo LUVOT1NZUyk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgZnJhbWVyX25vdGlmeV9zdGF0dXNfY2hhbmdl KHN0cnVjdCBmcmFtZXIgKmZyYW1lcikNCj4gK3sNCj4gK30NCj4gKw0KPiArI2VuZGlmIC8qIElT X0VOQUJMRUQoQ09ORklHX0dFTkVSSUNfRlJBTUVSKSAqLw0KPiArDQo+ICsjZGVmaW5lIGZyYW1l cl9wcm92aWRlcl9vZl9yZWdpc3RlcihkZXYsIHhsYXRlKQkJXA0KPiArCV9fZnJhbWVyX3Byb3Zp ZGVyX29mX3JlZ2lzdGVyKChkZXYpLCBUSElTX01PRFVMRSwgKHhsYXRlKSkNCj4gKw0KPiArI2Rl ZmluZSBkZXZtX2ZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3RlcihkZXYsIHhsYXRlKQlcDQo+ICsJ X19kZXZtX2ZyYW1lcl9wcm92aWRlcl9vZl9yZWdpc3RlcigoZGV2KSwgVEhJU19NT0RVTEUsICh4 bGF0ZSkpDQo+ICsNCj4gKyNlbmRpZiAvKiBfX0RSSVZFUlNfUFJPVklERVJfRlJBTUVSX0ggKi8N Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJhbWVyL2ZyYW1lci5oIGIvaW5jbHVkZS9s aW51eC9mcmFtZXIvZnJhbWVyLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMDAwLi5iNzM1MDI3ZjY4MDENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9pbmNsdWRl L2xpbnV4L2ZyYW1lci9mcmFtZXIuaA0KPiBAQCAtMCwwICsxLDIxNSBAQA0KPiArLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8NCj4gKy8qDQo+ICsgKiBHZW5l cmljIGZyYW1lciBoZWFkZXIgZmlsZQ0KPiArICoNCj4gKyAqIENvcHlyaWdodCAyMDIzIENTIEdS T1VQIEZyYW5jZQ0KPiArICoNCj4gKyAqIEF1dGhvcjogSGVydmUgQ29kaW5hIDxoZXJ2ZS5jb2Rp bmFAYm9vdGxpbi5jb20+DQo+ICsgKi8NCj4gKw0KPiArI2lmbmRlZiBfX0RSSVZFUlNfRlJBTUVS X0gNCj4gKyNkZWZpbmUgX19EUklWRVJTX0ZSQU1FUl9IDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51 eC9lcnIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L25vdGlmaWVyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4NCj4gKw0KPiArLyoq DQo+ICsgKiBlbnVtIGZyYW1lcl9pZmFjZSAtIEZyYW1lciBpbnRlcmZhY2UNCj4gKyAqLw0KPiAr ZW51bSBmcmFtZXJfaWZhY2Ugew0KPiArCUZSQU1FUl9JRkFDRV9FMSwgICAgICAvKiBFMSBpbnRl cmZhY2UgKi8NCj4gKwlGUkFNRVJfSUZBQ0VfVDEsICAgICAgLyogVDEgaW50ZXJmYWNlICovDQo+ ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIGVudW0gZnJhbWVyX2Nsb2NrX21vZGUgLSBGcmFtZXIg Y2xvY2sgbW9kZQ0KPiArICovDQo+ICtlbnVtIGZyYW1lcl9jbG9ja190eXBlIHsNCj4gKwlGUkFN RVJfQ0xPQ0tfRVhULCAvKiBFeHRlcm5hbCBjbG9jayAqLw0KPiArCUZSQU1FUl9DTE9DS19JTlQs IC8qIEludGVybmFsIGNsb2NrICovDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBm cmFtZXJfY29uZmlndXJhdGlvbiAtIEZyYW1lciBjb25maWd1cmF0aW9uDQo+ICsgKiBAbGluZV9p ZmFjZTogRnJhbWVyIGxpbmUgaW50ZXJmYWNlDQo+ICsgKiBAY2xvY2tfbW9kZTogRnJhbWVyIGNs b2NrIHR5cGUNCj4gKyAqIEBjbG9ja19yYXRlOiBGcmFtZXIgY2xvY2sgcmF0ZQ0KPiArICovDQo+ ICtzdHJ1Y3QgZnJhbWVyX2NvbmZpZyB7DQo+ICsJZW51bSBmcmFtZXJfaWZhY2UgaWZhY2U7DQo+ ICsJZW51bSBmcmFtZXJfY2xvY2tfdHlwZSBjbG9ja190eXBlOw0KPiArCXVuc2lnbmVkIGxvbmcg bGluZV9jbG9ja19yYXRlOw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgZnJhbWVy X3N0YXR1cyAtIEZyYW1lciBzdGF0dXMNCj4gKyAqIEBsaW5rX2lzX29uOiBGcmFtZXIgbGluayBz dGF0ZS4gdHJ1ZSwgdGhlIGxpbmsgaXMgb24sIGZhbHNlLCB0aGUgbGluayBpcyBvZmYuDQo+ICsg Ki8NCj4gK3N0cnVjdCBmcmFtZXJfc3RhdHVzIHsNCj4gKwlib29sIGxpbmtfaXNfb247DQo+ICt9 Ow0KPiArDQo+ICsvKioNCj4gKyAqIGZyYW1lcl9ldmVudCAtIGV2ZW50IGF2YWlsYWJsZSBmb3Ig bm90aWZpY2F0aW9uDQo+ICsgKi8NCj4gK2VudW0gZnJhbWVyX2V2ZW50IHsNCj4gKwlGUkFNRVJf RVZFTlRfU1RBVFVTLAkvKiBFdmVudCBub3RpZmllZCBvbiBmcmFtZXJfc3RhdHVzIGNoYW5nZXMg Ki8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGZyYW1lciAtIHJlcHJlc2VudHMg dGhlIGZyYW1lciBkZXZpY2UNCj4gKyAqIEBkZXY6IGZyYW1lciBkZXZpY2UNCj4gKyAqIEBpZDog aWQgb2YgdGhlIGZyYW1lciBkZXZpY2UNCj4gKyAqIEBvcHM6IGZ1bmN0aW9uIHBvaW50ZXJzIGZv ciBwZXJmb3JtaW5nIGZyYW1lciBvcGVyYXRpb25zDQo+ICsgKiBAbXV0ZXg6IG11dGV4IHRvIHBy b3RlY3QgZnJhbWVyX29wcw0KPiArICogQGluaXRfY291bnQ6IHVzZWQgdG8gcHJvdGVjdCB3aGVu IHRoZSBmcmFtZXIgaXMgdXNlZCBieSBtdWx0aXBsZSBjb25zdW1lcnMNCj4gKyAqIEBwb3dlcl9j b3VudDogdXNlZCB0byBwcm90ZWN0IHdoZW4gdGhlIGZyYW1lciBpcyB1c2VkIGJ5IG11bHRpcGxl IGNvbnN1bWVycw0KPiArICogQHB3cjogcG93ZXIgcmVndWxhdG9yIGFzc29jaWF0ZWQgd2l0aCB0 aGUgZnJhbWVyDQo+ICsgKiBAcG9sbGluZ190YXNrOiBwb2xsaW5nIHRhc2sgdXNlZCBpZiBmcmFt ZXIgbm90aWZpZXIgb3BlcmF0aW9ucyBhcmUgbm90IHByb3ZpZGVkDQo+ICsgKiBAcG9sbGluZ19u b3RpZmllcl9saXN0OiBub3RpZmllciBsaXN0IHVzZWQgYnkgdGhlIHBvbGxpbmcgdGFzaw0KPiAr ICogQHByZXZfc3RhdHVzOiBwcmV2aW91cyByZWFkIHN0YXR1cyB1c2VkIGJ5IHRoZSBwb2xsaW5n IHRhc2sgdG8gZGV0ZWN0IGNoYW5nZXMNCj4gKyAqLw0KPiArc3RydWN0IGZyYW1lciB7DQo+ICsJ c3RydWN0IGRldmljZQkJCWRldjsNCj4gKwlpbnQJCQkJaWQ7DQo+ICsJY29uc3Qgc3RydWN0IGZy YW1lcl9vcHMJCSpvcHM7DQo+ICsJc3RydWN0IG11dGV4CQkJbXV0ZXg7CS8qIFByb3RlY3QgZnJh bWVyICovDQo+ICsJaW50CQkJCWluaXRfY291bnQ7DQo+ICsJaW50CQkJCXBvd2VyX2NvdW50Ow0K PiArCXN0cnVjdCByZWd1bGF0b3IJCSpwd3I7DQo+ICsJc3RydWN0IHdvcmtfc3RydWN0CQlub3Rp Znlfc3RhdHVzX3dvcms7DQo+ICsJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQJbm90aWZp ZXJfbGlzdDsNCj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrCQlwb2xsaW5nX3dvcms7DQo+ICsJc3Ry dWN0IGZyYW1lcl9zdGF0dXMJCXByZXZfc3RhdHVzOw0KPiArfTsNCj4gKw0KPiArI2lmIElTX0VO QUJMRUQoQ09ORklHX0dFTkVSSUNfRlJBTUVSKQ0KPiAraW50IGZyYW1lcl9wbV9ydW50aW1lX2dl dChzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpOw0KPiAraW50IGZyYW1lcl9wbV9ydW50aW1lX2dldF9z eW5jKHN0cnVjdCBmcmFtZXIgKmZyYW1lcik7DQo+ICtpbnQgZnJhbWVyX3BtX3J1bnRpbWVfcHV0 KHN0cnVjdCBmcmFtZXIgKmZyYW1lcik7DQo+ICtpbnQgZnJhbWVyX3BtX3J1bnRpbWVfcHV0X3N5 bmMoc3RydWN0IGZyYW1lciAqZnJhbWVyKTsNCj4gK2ludCBmcmFtZXJfaW5pdChzdHJ1Y3QgZnJh bWVyICpmcmFtZXIpOw0KPiAraW50IGZyYW1lcl9leGl0KHN0cnVjdCBmcmFtZXIgKmZyYW1lcik7 DQo+ICtpbnQgZnJhbWVyX3Bvd2VyX29uKHN0cnVjdCBmcmFtZXIgKmZyYW1lcik7DQo+ICtpbnQg ZnJhbWVyX3Bvd2VyX29mZihzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpOw0KPiAraW50IGZyYW1lcl9n ZXRfc3RhdHVzKHN0cnVjdCBmcmFtZXIgKmZyYW1lciwgc3RydWN0IGZyYW1lcl9zdGF0dXMgKnN0 YXR1cyk7DQo+ICtpbnQgZnJhbWVyX2dldF9jb25maWcoc3RydWN0IGZyYW1lciAqZnJhbWVyLCBz dHJ1Y3QgZnJhbWVyX2NvbmZpZyAqY29uZmlnKTsNCj4gK2ludCBmcmFtZXJfc2V0X2NvbmZpZyhz dHJ1Y3QgZnJhbWVyICpmcmFtZXIsIGNvbnN0IHN0cnVjdCBmcmFtZXJfY29uZmlnICpjb25maWcp Ow0KPiAraW50IGZyYW1lcl9ub3RpZmllcl9yZWdpc3RlcihzdHJ1Y3QgZnJhbWVyICpmcmFtZXIs IHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOw0KPiAraW50IGZyYW1lcl9ub3RpZmllcl91bnJl Z2lzdGVyKHN0cnVjdCBmcmFtZXIgKmZyYW1lciwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7 DQo+ICsNCj4gK3N0cnVjdCBmcmFtZXIgKmZyYW1lcl9nZXQoc3RydWN0IGRldmljZSAqZGV2LCBj b25zdCBjaGFyICpjb25faWQpOw0KPiArdm9pZCBmcmFtZXJfcHV0KHN0cnVjdCBkZXZpY2UgKmRl diwgc3RydWN0IGZyYW1lciAqZnJhbWVyKTsNCj4gKw0KPiArc3RydWN0IGZyYW1lciAqZGV2bV9m cmFtZXJfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKTsNCj4gK3N0 cnVjdCBmcmFtZXIgKmRldm1fZnJhbWVyX29wdGlvbmFsX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYs IGNvbnN0IGNoYXIgKmNvbl9pZCk7DQo+ICsjZWxzZQ0KPiArc3RhdGljIGlubGluZSBpbnQgZnJh bWVyX3BtX3J1bnRpbWVfZ2V0KHN0cnVjdCBmcmFtZXIgKmZyYW1lcikNCj4gK3sNCj4gKwlpZiAo IWZyYW1lcikNCj4gKwkJcmV0dXJuIDA7DQo+ICsJcmV0dXJuIC1FTk9TWVM7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGZyYW1lcl9wbV9ydW50aW1lX2dldF9zeW5jKHN0cnVjdCBm cmFtZXIgKmZyYW1lcikNCj4gK3sNCj4gKwlpZiAoIWZyYW1lcikNCj4gKwkJcmV0dXJuIDA7DQo+ ICsJcmV0dXJuIC1FTk9TWVM7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IGZyYW1l cl9wbV9ydW50aW1lX3B1dChzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaWYgKCFm cmFtZXIpDQo+ICsJCXJldHVybiAwOw0KPiArCXJldHVybiAtRU5PU1lTOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW5saW5lIGludCBmcmFtZXJfcG1fcnVudGltZV9wdXRfc3luYyhzdHJ1Y3QgZnJh bWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaWYgKCFmcmFtZXIpDQo+ICsJCXJldHVybiAwOw0KPiAr CXJldHVybiAtRU5PU1lTOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludCBmcmFtZXJf aW5pdChzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaWYgKCFmcmFtZXIpDQo+ICsJ CXJldHVybiAwOw0KPiArCXJldHVybiAtRU5PU1lTOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5s aW5lIGludCBmcmFtZXJfZXhpdChzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaWYg KCFmcmFtZXIpDQo+ICsJCXJldHVybiAwOw0KPiArCXJldHVybiAtRU5PU1lTOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIGludCBmcmFtZXJfcG93ZXJfb24oc3RydWN0IGZyYW1lciAqZnJh bWVyKQ0KPiArew0KPiArCWlmICghZnJhbWVyKQ0KPiArCQlyZXR1cm4gMDsNCj4gKwlyZXR1cm4g LUVOT1NZUzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQgZnJhbWVyX3Bvd2VyX29m ZihzdHJ1Y3QgZnJhbWVyICpmcmFtZXIpDQo+ICt7DQo+ICsJaWYgKCFmcmFtZXIpDQo+ICsJCXJl dHVybiAwOw0KPiArCXJldHVybiAtRU5PU1lTOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IGludCBmcmFtZXJfZ2V0X3N0YXR1cyhzdHJ1Y3QgZnJhbWVyICpmcmFtZXIsIHN0cnVjdCBmcmFt ZXJfc3RhdHVzICpzdGF0dXMpDQo+ICt7DQo+ICsJcmV0dXJuIC1FTk9TWVM7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbmxpbmUgaW50IGZyYW1lcl9nZXRfY29uZmlnKHN0cnVjdCBmcmFtZXIgKmZy YW1lciwgc3RydWN0IGZyYW1lcl9jb25maWcgKmNvbmZpZykNCj4gK3sNCj4gKwlyZXR1cm4gLUVO T1NZUzsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBpbnQgZnJhbWVyX3NldF9jb25maWco c3RydWN0IGZyYW1lciAqZnJhbWVyLCBjb25zdCBzdHJ1Y3QgZnJhbWVyX2NvbmZpZyAqY29uZmln KQ0KPiArew0KPiArCWlmICghZnJhbWVyKQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXJldHVy biAtRU5PU1lTOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGludCBmcmFtZXJfbm90aWZp ZXJfcmVnaXN0ZXIoc3RydWN0IGZyYW1lciAqZnJhbWVyLA0KPiArCQkJCQkgICBzdHJ1Y3Qgbm90 aWZpZXJfYmxvY2sgKm5iKQ0KPiArew0KPiArCWlmICghZnJhbWVyKQ0KPiArCQlyZXR1cm4gMDsN Cj4gKw0KPiArCXJldHVybiAtRU5PU1lTOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIGlu dCBmcmFtZXJfbm90aWZpZXJfdW5yZWdpc3RlcihzdHJ1Y3QgZnJhbWVyICpmcmFtZXIsDQo+ICsJ CQkJCSAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikNCj4gK3sNCj4gKwlpZiAoIWZyYW1l cikNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlyZXR1cm4gLUVOT1NZUzsNCj4gK30NCj4gKw0K PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJhbWVyICpkZXZtX2ZyYW1lcl9nZXQoc3RydWN0IGRl dmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpDQo+ICt7DQo+ICsJcmV0dXJuIEVSUl9QVFIo LUVOT1NZUyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGZyYW1lciAqZGV2 bV9mcmFtZXJfb3B0aW9uYWxfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29u X2lkKQ0KPiArew0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsjZW5kaWYNCj4gKw0K PiArI2VuZGlmIC8qIF9fRFJJVkVSU19GUkFNRVJfSCAqLw0K