Received: by 2002:a05:7412:d8a:b0:e2:908c:2ebd with SMTP id b10csp2411849rdg; Mon, 16 Oct 2023 03:54:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGF+4UyieSahKwNfRMwsOTBYu/l6W3mp1oiSWKkLyKK3uN3825GEjUU1A3mf99JT7QmMdr/ X-Received: by 2002:a05:6358:720c:b0:141:162:b0d8 with SMTP id h12-20020a056358720c00b001410162b0d8mr17828547rwa.30.1697453644059; Mon, 16 Oct 2023 03:54:04 -0700 (PDT) Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id d9-20020a63d709000000b0054ff717395dsi10505328pgg.691.2023.10.16.03.54.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Oct 2023 03:54:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=OfYAniIe; arc=fail (body hash mismatch); spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 3453F805F5E9; Mon, 16 Oct 2023 03:53:56 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229668AbjJPKxz (ORCPT + 99 others); Mon, 16 Oct 2023 06:53:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232090AbjJPKxy (ORCPT ); Mon, 16 Oct 2023 06:53:54 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36B1083 for ; Mon, 16 Oct 2023 03:53:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697453629; x=1728989629; h=message-id:date:subject:to:cc:references:from: in-reply-to:mime-version:content-transfer-encoding; bh=n0vvOcyQAg1Atl/DP5mwueSzVxMGdd6LSrDGEsI82r4=; b=OfYAniIeAC6KahM1OQtjCw5i7LWRXHnwhoHtEhEyyn5D3JdrCdIpJ/Fa 35BDMnR1JjPnfEXB9973q6Ee3aDRIKicMgdqgf2TGs90BxbzMpKYapLpn n2rRCVJf0CO3UtOjpgoc+3APUA9oDuL1750pwP7lrxmtGXw5Gy5i9siFX fDQzSQiJed2kOcuVn/7qwDG2lpf8a3jBo4aLZaLkm8te0jwr8qhyJ//ha vAA8f56e5qx1FePZGACuq9ZcQ7UwS2L/Eyhyw3QGoEvzBAox6MugcZeuc Zx9dxDxuv+XNrLcu/w3zHQncYASXk3cy5FocGKzmQiJaAh7ge2bN1i4Dr Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10863"; a="388361264" X-IronPort-AV: E=Sophos;i="6.03,229,1694761200"; d="scan'208";a="388361264" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Oct 2023 03:53:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10863"; a="705579117" X-IronPort-AV: E=Sophos;i="6.03,229,1694761200"; d="scan'208";a="705579117" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by orsmga003.jf.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 16 Oct 2023 03:53:47 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32; Mon, 16 Oct 2023 03:53:47 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.32 via Frontend Transport; Mon, 16 Oct 2023 03:53:47 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.168) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.32; Mon, 16 Oct 2023 03:53:25 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=c3MK4F0rL07R+Ob4/C1rW9ngiSfV50Psjt9rfiHbRYVCW5Ct+/CCw1L/wWf1MG+LJOlUZIEOhMuRQR855HcGZtjBXqMXpuRuHNiHxDavdC8a8JB55DRZ4qKJ4VBSs+dDTbMZgaJRjE+uU2Av/YsCaiGCTe8blfZFGTD7nz9VMBzQVq/5wM3BV1APXeDCxfrjlEKIVJv10u3A83XCVX38Ka66SiuRkr9GrZVdN03E36dS8A2dgT8CHeqyJ8nchzoUyZdWDiVGWXGFIxeaZMSKRPsGhTVT7VoWQ2VUjoTfrGouSZWYKm5jGO1KZ7RAUeJm+lPgXR3a9rCEnIAEncCrXA== 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=mS5oPo+IE5PB+wNkoSmwiARr7WBzGgQXyMpuzVSqL74=; b=EmtkeloFssUJmSkZgmmkFnNHAUbcvJispQ0feDG1vH6qIcpA6U8Dp6oRalZtg+4oP1C1UA0EaoSTiUjRzLEBA/PlcKFJCB7lnD73EkBuWhVC74fWaalZzw2u614DumSbPn9QjnSWXd9qH/Yrf9/9GjgIgAK1HyPBi1vFKfPR6CiaBMN3nxWK8UZVF2yaieA6lSzsswtrc1y39+qbYazTJ4A2/MseZuaYUXibuNCx28v6F0bYJe+ef/zWO/iNfR7Crl2eI/5zJmnpBIJImorOK5mhpeznzSL17YgvZj6cKp9g7BaHaHgvVqcZFgrFjomYVZKPphZr1RwwcEzSZi4l0g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from MW5PR11MB5906.namprd11.prod.outlook.com (2603:10b6:303:1a0::21) by SA1PR11MB7109.namprd11.prod.outlook.com (2603:10b6:806:2ba::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6886.34; Mon, 16 Oct 2023 10:53:22 +0000 Received: from MW5PR11MB5906.namprd11.prod.outlook.com ([fe80::6c57:9517:b2a7:3385]) by MW5PR11MB5906.namprd11.prod.outlook.com ([fe80::6c57:9517:b2a7:3385%7]) with mapi id 15.20.6863.043; Mon, 16 Oct 2023 10:53:22 +0000 Message-ID: <30b7af7e-b3ab-4277-80a4-28bd4cf917d5@intel.com> Date: Mon, 16 Oct 2023 13:53:14 +0300 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 08/11] crypto: qat - add rate limiting feature to qat_4xxx Content-Language: en-US To: "Muszynski, Damian" , "herbert@gondor.apana.org.au" CC: "linux-crypto@vger.kernel.org" , qat-linux , "Cabiddu, Giovanni" References: <20231011121934.45255-1-damian.muszynski@intel.com> <0dfe871ec970482090680d4fa2423243@DM4PR11MB8129.namprd11.prod.outlook.com> From: Tero Kristo In-Reply-To: <0dfe871ec970482090680d4fa2423243@DM4PR11MB8129.namprd11.prod.outlook.com> X-ClientProxiedBy: FR2P281CA0038.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:92::11) To MW5PR11MB5906.namprd11.prod.outlook.com (2603:10b6:303:1a0::21) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MW5PR11MB5906:EE_|SA1PR11MB7109:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f308410-2324-4947-faf7-08dbce361d62 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2pogORFvVo0Uk4ETbl0pIv6krWXW6yDQX0TFWc8a5RiGQOlc5bdPGUMLIJqU0cRy/BQxWcy4YEGgNeNkIR7Ds15LCdCX9Z81+odvHR5ji+NxIoq720ftOV/MML0qGEvS85sT+LyMxJGHQM1NqNtGJH1yzUBff9J8iaP5FrWNmjsjLQuetd7I+zaeEeAmn5lRMKD1WuSF+I/CWHcrXUpyzYWJKdb4W9dGrSC1O2sKhatSaBo/WT1jNUUt0YlZ1wRkUCq4GsE6fiLAKvt7t3NvnFAw7b5Mt8gSlRkQ5EiC8d6/YtlmJziKL03sOCfPpxz7oL3c03gmIfEFxJWZZZL+MWbFMHGINEPupInJdRRFWT8lfm9Xro84wI/2l3Z43oyHdMNNBDOAbhz/Ymp5Ma4GZiz6UqIV/CtzP42oznKdDFLjaQlN4r8XehVMXyUuPkzrLX859L/EwKUooenJcZfJuL1Dno1F3JDrapv3fWqOkyLnzRu1v3gFh7KwPIYye7ZYfAWHuDfKJSqrvr0CKx062Cm37pKhbRg7u9zJrOwTOXY7cI7veNUDwiCAJ5Lb5tZMzRumh84Ad8ZW7i450+T2bIKnSQcwWWs3Mk9s6IgfSVw6Q8KcntmZKDX1hrWumQEAwmjjaRl0mwDw7jH0Z29vig== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW5PR11MB5906.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(366004)(396003)(39860400002)(136003)(346002)(376002)(230922051799003)(451199024)(1800799009)(64100799003)(186009)(36756003)(86362001)(31686004)(66556008)(66946007)(110136005)(66476007)(54906003)(316002)(31696002)(38100700002)(82960400001)(107886003)(53546011)(83380400001)(6506007)(26005)(2616005)(6512007)(6666004)(6486002)(30864003)(2906002)(8936002)(478600001)(44832011)(41300700001)(8676002)(5660300002)(4326008)(45980500001)(43740500002)(559001)(579004);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QTQrb2x0V3Q1YUZ3blZnYUhlb1p2cW1SZmhpQWR2RzJuV0l4eStvMFh3M2Fi?= =?utf-8?B?U2NOVnlSVXhsT1VVNGdIYk0yVitNYUNFbzBTSk15ajdjOE5udDNZZmE5QXdU?= =?utf-8?B?Rk1yOHpNMmU3UTNZMEFzcDNwM2VhNkxkdXFSYVhaZmR1L3prRGZiQmx5TjdT?= =?utf-8?B?SDJoUFlRN0xxTG55cXJvRUdWeUhGT0xZVjNVK1lKVzNXZGhJNlc0S2lHVURK?= =?utf-8?B?dUNiY3h3Z0I5Z3JwSmJNYitCWFc5emg2aEd5b3hUQW5uanI5Z2xuNUJXakJQ?= =?utf-8?B?dndWejBCTU1DTkc1S2RESDIyeGhoTkZ0SDVLZWRFOTQ2dUJPK0l6bG1aR1BH?= =?utf-8?B?ZkhrcDJRb3o4bksyNjJjZjhTMHpIazVnS0daT0w2eGQzSzJUaENDYW5ueXMr?= =?utf-8?B?ZTk2SURGNE9mUFVzcjE2Y2hQNFljNzhDK1VtV2JmYVV1RllnS3VVMTNtSXhu?= =?utf-8?B?c0ltSi9xNFp2aVNzSUc0U0hwYkREVnBCdVNHazVVUVFqQXRlYlZqWnFReTZw?= =?utf-8?B?eHJHWGYvby9uR3ZJbktMTUZmQVh1bDNkbitWUG44eWFFU01McG10ajk3ZVJ0?= =?utf-8?B?enNiNHNaRkY2OGlEU0txdExKcG00Vkp6YUd6eWtrQVBDTEZ0VmplOGRLWlJW?= =?utf-8?B?OGxHT1l3cWdzZ2pXZVpTK2hLanVKSGhzOGNaM2Y0aGJxYW91alNwOUdRbjls?= =?utf-8?B?WkMvUjlmdnliSnk2V1BhM2pSeWQ4SS9oS3plcWdieXRRU3lLZC94VGNjMUFo?= =?utf-8?B?bDdnd3poZmhSTlVOY1U1Q3puemJuVHV5SklOSEx1RTBWcS9tVFJkYWZ6d05Z?= =?utf-8?B?K0pwZlN3SW5ja21vSE9uY2I1VlZvWU8vTDJiSFVPZmNmNlV4VWxMVUFnN0VG?= =?utf-8?B?djVKT2xOSW1wYmhpenhNb3JXY3FDOFBzYWI1WUNXTnV4QU1oNHNZRFNCMkRp?= =?utf-8?B?N1ZnZjQ2WjZFNTFNTHZnWEFKT2h6dk4rNjFsOVdzMnZCUmhoZDFicUR2MXVl?= =?utf-8?B?UDRKcnhPZU42akxvNHR1RXFORzMrdVBDQUc1eU9TREpCU1g0U3JZWkhIS2tP?= =?utf-8?B?TmVkcTdPM0FjSlE5WWlkTmFFRFRiL0ZFdlBLaTBNM2c0ZlNYNzQzeEdnaEx1?= =?utf-8?B?REhXOWl6NXV4SGR3eFhyM0JSakppc2k1Q3B3OHgvelZ1dDY0cXNnQ2RJcnlO?= =?utf-8?B?OTU5TDY5ZjBiaHZGR1hNcUZhVkluL1dnbTM1bitwTGVmU2QvQjJVcUZ6emRY?= =?utf-8?B?U1FDRWYwOVQwRjkwSjgwMmhmeWdWeDQ2cStQaVpmd0hBZGNXMzdTNUJ0L2RQ?= =?utf-8?B?TFhWMVJLZ2k3TE5xbGpGd0EvSVpkdGExd2QrSmM5UDVWdHRpeGcvbmlvWjRz?= =?utf-8?B?SEcyQzBWZStDOUY2MEVWRDRlMWF5WHBLbTRUMUhpd0FVZzgxdCtIQm9KMTVK?= =?utf-8?B?bTZSM1FzOUlYaXUzT2xwd3IwMHMwdDNQNVJvVVBicjl2clZRWHZONEh4UG45?= =?utf-8?B?M3RWcWVrNklocXJTTGI2QmlJZDBGWDVyRUh6ZWRTaGFidnFrWEN3MzJEdUNw?= =?utf-8?B?MVRrMTlhcndlRXlTR0Mxd28raTB6UXlTZEpwRmhkMFFtcC9BZHZTOU9RMzF0?= =?utf-8?B?dnovdS9mejFVaGtQV2FqOG5NYmY2SkRVYkM3M2FaU09FaVduNXBEenJsZjJs?= =?utf-8?B?bm5aZy93VWxLa0tKekVVSkIxL25qN0EvWjA0VjRKS2M5cXAra0JuUUJCQnZF?= =?utf-8?B?UXg1OU9HZ0U0d0VUVHdFbVJLRnFBb2o0T1diQkJvUWN2WDZPSDE0R21QUk1y?= =?utf-8?B?dzdwc1JnbWJUWU13cmNzcWhYQVhsUTVXU3RFR0oyaDB6Um5mVlc4cVFGa25G?= =?utf-8?B?MiswRmhtRVlWTm9NcUZmZmhzclYxNFdxK2NtSnhPeHU0Q2VncU53b2JubTh3?= =?utf-8?B?YjArNWVWYWJidXBHcFVNeVlBWlBmZmRMTHlGT1pJR2pkYmVIaFpmMU81YW5V?= =?utf-8?B?bE1qcFB0VjRISTZIM09BZTZOZGYzRnNNdlZhWmdta3l6ZGRBN1NlbkEzSGQ1?= =?utf-8?B?Z2FTQUV5RTlyTXpCN3NXUVMxK2JuZS9hbkdoZkRtYVhqREdRN0svbm1PS0NP?= =?utf-8?B?eEU0U1hIYy90TUFQU1p3UzRpUnRaZzBXZGQrb1ZvL2ppeWJ6N2VqM0gyajVH?= =?utf-8?B?OXc9PQ==?= X-MS-Exchange-CrossTenant-Network-Message-Id: 1f308410-2324-4947-faf7-08dbce361d62 X-MS-Exchange-CrossTenant-AuthSource: MW5PR11MB5906.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2023 10:53:22.3842 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jwM8VCwXtPoO5R5v2Jw9HC3Cn48jhQ8DQm57vVuPzg0XVWXfZH11Ko+nnR0hUb3qvtHdUxq68snkefffDIYmbw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR11MB7109 X-OriginatorOrg: intel.com Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: base64 X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 16 Oct 2023 03:53:56 -0700 (PDT) SGVsbG8sCgpPbiAxMS8xMC8yMDIzIDE1OjE1LCBNdXN6eW5za2ksIERhbWlhbiB3cm90ZToKPiBU aGUgUmF0ZSBMaW1pdGluZyAoUkwpIGZlYXR1cmUgYWxsb3dzIHRvIGNvbnRyb2wgdGhlIHJhdGUg b2YgcmVxdWVzdHMKPiB0aGF0IGNhbiBiZSBzdWJtaXR0ZWQgb24gYSByaW5nIHBhaXIgKFJQKS4g VGhpcyBhbGxvd3Mgc2hhcmluZyBhIFFBVAo+IGRldmljZSBhbW9uZyBtdWx0aXBsZSB1c2VycyB3 aGlsZSBlbnN1cmluZyBhIGd1YXJhbnRlZWQgdGhyb3VnaHB1dC4KPiAKPiBDb25maWd1cmF0aW9u IG9mIFJMIGlzIGFjY29tcGxpc2hlZCB0aHJvdWdoIGVudGl0aWVzIGNhbGxlZCBTTEFzCj4gKFNl cnZpY2UgTGV2ZWwgQWdyZWVtZW50KS4gRWFjaCBTTEEgb2JqZWN0IGdldHMgYSB1bmlxdWUgaWRl bnRpZmllcgo+IGFuZCBkZWZpbmVzIHRoZSBsaW1pdGF0aW9ucyBmb3IgYSBzaW5nbGUgc2Vydmlj ZSBhY3Jvc3MgdXAgdG8gZm91cgo+IHJpbmcgcGFpcnMgKFJQcyBjb3VudCBhbGxvY2F0ZWQgdG8g YSBzaW5nbGUgVkYpLgo+IAo+IFRoZSByYXRlIGlzIGRldGVybWluZWQgdXNpbmcgdHdvIGZpZWxk czoKPiAgICAqIENJUiAoQ29tbWl0dGVkIEluZm9ybWF0aW9uIFJhdGUpLCBpLmUuLCB0aGUgZ3Vh cmFudGVlZCByYXRlLgo+ICAgICogUElSIChQZWFrIEluZm9ybWF0aW9uIFJhdGUpLCBpLmUuLCB0 aGUgbWF4aW11bSByYXRlIGFjaGlldmFibGUKPiAgICAgIHdoZW4gdGhlIGRldmljZSBoYXMgYXZh aWxhYmxlIHJlc291cmNlcy4KPiBUaGUgcmF0ZSB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiBwZXJt aWxsZSBzY2FsZSBpLmUuIDAtMTAwMC4KPiBSaW5nIHBhaXIgc2VsZWN0aW9uIGlzIGFjaGlldmVk IGJ5IHByb3ZpZGluZyBhIDY0LWJpdCBtYXNrLCB3aGVyZQo+IGVhY2ggYml0IGNvcnJlc3BvbmRz IHRvIG9uZSBvZiB0aGUgcmluZyBwYWlycy4KPiAKPiBUaGlzIGFkZHMgYW4gaW50ZXJmYWNlIGFu ZCBsb2dpYyB0aGF0IGFsbG93IHRvIGFkZCwgdXBkYXRlLCByZXRyaWV2ZQo+IGFuZCByZW1vdmUg YW4gU0xBLgo+IAo+IFNpZ25lZC1vZmYtYnk6IERhbWlhbiBNdXN6eW5za2kgPGRhbWlhbi5tdXN6 eW5za2lAaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5OiBHaW92YW5uaSBDYWJpZGR1IDxnaW92YW5u aS5jYWJpZGR1QGludGVsLmNvbT4KPiAtLS0KPiAgIC4uLi9pbnRlbC9xYXQvcWF0XzR4eHgvYWRm XzR4eHhfaHdfZGF0YS5jICAgICB8ICAgMjAgKwo+ICAgLi4uL2ludGVsL3FhdC9xYXRfNHh4eC9h ZGZfNHh4eF9od19kYXRhLmggICAgIHwgICAxMyArLQo+ICAgZHJpdmVycy9jcnlwdG8vaW50ZWwv cWF0L3FhdF9jb21tb24vTWFrZWZpbGUgIHwgICAgMiArCj4gICAuLi4vaW50ZWwvcWF0L3FhdF9j b21tb24vYWRmX2FjY2VsX2RldmljZXMuaCAgfCAgICAzICsKPiAgIC4uLi9jcnlwdG8vaW50ZWwv cWF0L3FhdF9jb21tb24vYWRmX2FkbWluLmMgICB8ICAgNDcgKwo+ICAgLi4uL2NyeXB0by9pbnRl bC9xYXQvcWF0X2NvbW1vbi9hZGZfYWRtaW4uaCAgIHwgICAgOCArCj4gICAuLi4vaW50ZWwvcWF0 L3FhdF9jb21tb24vYWRmX2dlbjRfaHdfZGF0YS5oICAgfCAgICA3ICsKPiAgIC4uLi9jcnlwdG8v aW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2luaXQuYyAgICB8ICAgIDkgKwo+ICAgZHJpdmVycy9j cnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3JsLmMgIHwgMTE3NiArKysrKysrKysrKysr KysrKwo+ICAgZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3JsLmggIHwg IDE2OSArKysKPiAgIC4uLi9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcmxfYWRtaW4uYyAgICAg ICB8ICAgOTggKysKPiAgIC4uLi9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcmxfYWRtaW4uaCAg ICAgICB8ICAgMTggKwo+ICAgLi4uL3FhdC9xYXRfY29tbW9uL2ljcF9xYXRfZndfaW5pdF9hZG1p bi5oICAgIHwgICAzOCArCj4gICAxMyBmaWxlcyBjaGFuZ2VkLCAxNjA3IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2NyeXB0by9pbnRl bC9xYXQvcWF0X2NvbW1vbi9hZGZfcmwuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Y3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9ybC5oCj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3JsX2FkbWluLmMKPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9h ZGZfcmxfYWRtaW4uaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQv cWF0XzR4eHgvYWRmXzR4eHhfaHdfZGF0YS5jIGIvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3Fh dF80eHh4L2FkZl80eHh4X2h3X2RhdGEuYwo+IGluZGV4IDhhODA3MDFiNzc5MS4uYmMzNzQ1ZjAw MThmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfNHh4eC9hZGZf NHh4eF9od19kYXRhLmMKPiArKysgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0XzR4eHgv YWRmXzR4eHhfaHdfZGF0YS5jCj4gQEAgLTM0Miw2ICszNDIsMjQgQEAgc3RhdGljIHUzMiBnZXRf aGVhcnRiZWF0X2Nsb2NrKHN0cnVjdCBhZGZfaHdfZGV2aWNlX2RhdGEgKnNlbGYpCj4gICAJcmV0 dXJuIEFERl80WFhYX0tQVF9DT1VOVEVSX0ZSRVE7Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQg YWRmX2luaXRfcmxfZGF0YShzdHJ1Y3QgYWRmX3JsX2h3X2RhdGEgKnJsX2RhdGEpCj4gK3sKPiAr CXJsX2RhdGEtPnBjaW91dF90Yl9vZmZzZXQgPSBBREZfR0VONF9STF9UT0tFTl9QQ0lFT1VUX0JV Q0tFVF9PRkZTRVQ7Cj4gKwlybF9kYXRhLT5wY2lpbl90Yl9vZmZzZXQgPSBBREZfR0VONF9STF9U T0tFTl9QQ0lFSU5fQlVDS0VUX09GRlNFVDsKPiArCXJsX2RhdGEtPnIybF9vZmZzZXQgPSBBREZf R0VONF9STF9SMkxfT0ZGU0VUOwo+ICsJcmxfZGF0YS0+bDJjX29mZnNldCA9IEFERl9HRU40X1JM X0wyQ19PRkZTRVQ7Cj4gKwlybF9kYXRhLT5jMnNfb2Zmc2V0ID0gQURGX0dFTjRfUkxfQzJTX09G RlNFVDsKPiArCj4gKwlybF9kYXRhLT5wY2llX3NjYWxlX2RpdiA9IEFERl80WFhYX1JMX1BDSUVf U0NBTEVfRkFDVE9SX0RJVjsKPiArCXJsX2RhdGEtPnBjaWVfc2NhbGVfbXVsID0gQURGXzRYWFhf UkxfUENJRV9TQ0FMRV9GQUNUT1JfTVVMOwo+ICsJcmxfZGF0YS0+ZGNwcl9jb3JyZWN0aW9uID0g QURGXzRYWFhfUkxfRENQUl9DT1JSRUNUSU9OOwo+ICsJcmxfZGF0YS0+bWF4X3RwW0FERl9TVkNf QVNZTV0gPSBBREZfNFhYWF9STF9NQVhfVFBfQVNZTTsKPiArCXJsX2RhdGEtPm1heF90cFtBREZf U1ZDX1NZTV0gPSBBREZfNFhYWF9STF9NQVhfVFBfU1lNOwo+ICsJcmxfZGF0YS0+bWF4X3RwW0FE Rl9TVkNfRENdID0gQURGXzRYWFhfUkxfTUFYX1RQX0RDOwo+ICsJcmxfZGF0YS0+c2Nhbl9pbnRl cnZhbCA9IEFERl80WFhYX1JMX1NDQU5TX1BFUl9TRUM7Cj4gKwlybF9kYXRhLT5zY2FsZV9yZWYg PSBBREZfNFhYWF9STF9TTElDRV9SRUY7Cj4gK30KPiArCj4gICBzdGF0aWMgdm9pZCBhZGZfZW5h YmxlX2Vycm9yX2NvcnJlY3Rpb24oc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldikKPiAg IHsKPiAgIAlzdHJ1Y3QgYWRmX2JhciAqbWlzY19iYXIgPSAmR0VUX0JBUlMoYWNjZWxfZGV2KVtB REZfNFhYWF9QTUlTQ19CQVJdOwo+IEBAIC01ODMsMTAgKzYwMSwxMiBAQCB2b2lkIGFkZl9pbml0 X2h3X2RhdGFfNHh4eChzdHJ1Y3QgYWRmX2h3X2RldmljZV9kYXRhICpod19kYXRhLCB1MzIgZGV2 X2lkKQo+ICAgCWh3X2RhdGEtPnN0b3BfdGltZXIgPSBhZGZfZ2VuNF90aW1lcl9zdG9wOwo+ICAg CWh3X2RhdGEtPmdldF9oYl9jbG9jayA9IGdldF9oZWFydGJlYXRfY2xvY2s7Cj4gICAJaHdfZGF0 YS0+bnVtX2hiX2N0cnMgPSBBREZfTlVNX0hCX0NOVF9QRVJfQUU7Cj4gKwlod19kYXRhLT5jbG9j a19mcmVxdWVuY3kgPSBBREZfNFhYWF9BRV9GUkVROwo+ICAgCj4gICAJYWRmX2dlbjRfaW5pdF9o d19jc3Jfb3BzKCZod19kYXRhLT5jc3Jfb3BzKTsKPiAgIAlhZGZfZ2VuNF9pbml0X3BmX3BmdmZf b3BzKCZod19kYXRhLT5wZnZmX29wcyk7Cj4gICAJYWRmX2dlbjRfaW5pdF9kY19vcHMoJmh3X2Rh dGEtPmRjX29wcyk7Cj4gKwlhZGZfaW5pdF9ybF9kYXRhKCZod19kYXRhLT5ybF9kYXRhKTsKPiAg IH0KPiAgIAo+ICAgdm9pZCBhZGZfY2xlYW5faHdfZGF0YV80eHh4KHN0cnVjdCBhZGZfaHdfZGV2 aWNlX2RhdGEgKmh3X2RhdGEpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2ludGVsL3Fh dC9xYXRfNHh4eC9hZGZfNHh4eF9od19kYXRhLmggYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQv cWF0XzR4eHgvYWRmXzR4eHhfaHdfZGF0YS5oCj4gaW5kZXggYmIzZDk1YThmYjIxLi41OTBjYmU4 MTZiN2IgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF80eHh4L2Fk Zl80eHh4X2h3X2RhdGEuaAo+ICsrKyBiL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfNHh4 eC9hZGZfNHh4eF9od19kYXRhLmgKPiBAQCAtNjUsOCArNjUsMTkgQEAKPiAgICNkZWZpbmUgQURG XzQwMlhYX0FTWU1fT0JKCSJxYXRfNDAyeHhfYXN5bS5iaW4iCj4gICAjZGVmaW5lIEFERl80MDJY WF9BRE1JTl9PQkoJInFhdF80MDJ4eF9hZG1pbi5iaW4iCj4gICAKPiArLyogUkwgY29uc3RhbnRz ICovCj4gKyNkZWZpbmUgQURGXzRYWFhfUkxfUENJRV9TQ0FMRV9GQUNUT1JfRElWCTEwMAo+ICsj ZGVmaW5lIEFERl80WFhYX1JMX1BDSUVfU0NBTEVfRkFDVE9SX01VTAkxMDIKPiArI2RlZmluZSBB REZfNFhYWF9STF9EQ1BSX0NPUlJFQ1RJT04JCTEKPiArI2RlZmluZSBBREZfNFhYWF9STF9TQ0FO U19QRVJfU0VDCQk5NTQKPiArI2RlZmluZSBBREZfNFhYWF9STF9NQVhfVFBfQVNZTQkJCTE3Mzc1 MFVMCj4gKyNkZWZpbmUgQURGXzRYWFhfUkxfTUFYX1RQX1NZTQkJCTk1MDAwVUwKPiArI2RlZmlu ZSBBREZfNFhYWF9STF9NQVhfVFBfREMJCQk0NTAwMFVMCj4gKyNkZWZpbmUgQURGXzRYWFhfUkxf U0xJQ0VfUkVGCQkJMTAwMFVMCj4gKwo+ICAgLyogQ2xvY2tzIGZyZXF1ZW5jeSAqLwo+IC0jZGVm aW5lIEFERl80WFhYX0tQVF9DT1VOVEVSX0ZSRVEgKDEwMCAqIEhaX1BFUl9NSFopCj4gKyNkZWZp bmUgQURGXzRYWFhfS1BUX0NPVU5URVJfRlJFUQkoMTAwICogSFpfUEVSX01IWikKPiArI2RlZmlu ZSBBREZfNFhYWF9BRV9GUkVRCQkoMTAwMCAqIEhaX1BFUl9NSFopCj4gICAKPiAgIC8qIHFhdF80 eHh4IGZ1c2UgYml0cyBhcmUgZGlmZmVyZW50IGZyb20gb2xkIEdFTnMsIHJlZGVmaW5lIHRoZW0g Ki8KPiAgIGVudW0gaWNwX3FhdF80eHh4X3NsaWNlX21hc2sgewo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRv L2ludGVsL3FhdC9xYXRfY29tbW9uL01ha2VmaWxlCj4gaW5kZXggMjA0YzdkMGFhMzFlLi43N2Y4 YzQ4NGQ0OWMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21t b24vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9N YWtlZmlsZQo+IEBAIC0yNiw2ICsyNiw4IEBAIGludGVsX3FhdC1vYmpzIDo9IGFkZl9jZmcubyBc Cj4gICAJcWF0X2FsZ3MubyBcCj4gICAJcWF0X2FzeW1fYWxncy5vIFwKPiAgIAlxYXRfYWxnc19z ZW5kLm8gXAo+ICsJYWRmX3JsLm8gXAo+ICsJYWRmX3JsX2FkbWluLm8gXAo+ICAgCXFhdF91Y2xv Lm8gXAo+ICAgCXFhdF9oYWwubyBcCj4gICAJcWF0X2JsLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2FjY2VsX2RldmljZXMuaCBiL2RyaXZl cnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9hY2NlbF9kZXZpY2VzLmgKPiBpbmRl eCA0NTc0MjIyNmE5NmYuLjM1YjgwNWI5YTEzNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2NyeXB0 by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWNjZWxfZGV2aWNlcy5oCj4gKysrIGIvZHJpdmVy cy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2FjY2VsX2RldmljZXMuaAo+IEBAIC04 LDYgKzgsNyBAQAo+ICAgI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gICAjaW5jbHVkZSA8bGludXgv cmF0ZWxpbWl0Lmg+Cj4gICAjaW5jbHVkZSAiYWRmX2NmZ19jb21tb24uaCIKPiArI2luY2x1ZGUg ImFkZl9ybC5oIgo+ICAgI2luY2x1ZGUgImFkZl9wZnZmX21zZy5oIgo+ICAgCj4gICAjZGVmaW5l IEFERl9ESDg5NVhDQ19ERVZJQ0VfTkFNRSAiZGg4OTV4Y2MiCj4gQEAgLTIxNSw2ICsyMTYsNyBA QCBzdHJ1Y3QgYWRmX2h3X2RldmljZV9kYXRhIHsKPiAgIAlzdHJ1Y3QgYWRmX3BmdmZfb3BzIHBm dmZfb3BzOwo+ICAgCXN0cnVjdCBhZGZfaHdfY3NyX29wcyBjc3Jfb3BzOwo+ICAgCXN0cnVjdCBh ZGZfZGNfb3BzIGRjX29wczsKPiArCXN0cnVjdCBhZGZfcmxfaHdfZGF0YSBybF9kYXRhOwo+ICAg CWNvbnN0IGNoYXIgKmZ3X25hbWU7Cj4gICAJY29uc3QgY2hhciAqZndfbW1wX25hbWU7Cj4gICAJ dTMyIGZ1c2VzOwo+IEBAIC0zMjUsNiArMzI3LDcgQEAgc3RydWN0IGFkZl9hY2NlbF9kZXYgewo+ ICAgCXN0cnVjdCBhZGZfYWNjZWxfcGNpIGFjY2VsX3BjaV9kZXY7Cj4gICAJc3RydWN0IGFkZl90 aW1lciAqdGltZXI7Cj4gICAJc3RydWN0IGFkZl9oZWFydGJlYXQgKmhlYXJ0YmVhdDsKPiArCXN0 cnVjdCBhZGZfcmwgKnJhdGVfbGltaXRpbmc7Cj4gICAJdW5pb24gewo+ICAgCQlzdHJ1Y3Qgewo+ ICAgCQkJLyogcHJvdGVjdHMgVkYyUEYgaW50ZXJydXB0cyBhY2Nlc3MgKi8KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2FkbWluLmMgYi9kcml2 ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfYWRtaW4uYwo+IGluZGV4IDlmZjAw ZWI0Y2M2Ny4uYjljZDIxZjc3MmQzIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY3J5cHRvL2ludGVs L3FhdC9xYXRfY29tbW9uL2FkZl9hZG1pbi5jCj4gKysrIGIvZHJpdmVycy9jcnlwdG8vaW50ZWwv cWF0L3FhdF9jb21tb24vYWRmX2FkbWluLmMKPiBAQCAtMzMwLDYgKzMzMCw1MyBAQCBzdGF0aWMg aW50IGFkZl9nZXRfZndfY2FwYWJpbGl0aWVzKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9k ZXYsIHUxNiAqY2FwcykKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICtpbnQgYWRmX3NlbmRf YWRtaW5fcmxfaW5pdChzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LAo+ICsJCQkgICBz dHJ1Y3QgaWNwX3FhdF9md19pbml0X2FkbWluX3NsaWNlX2NudCAqc2xpY2VzKQo+ICt7Cj4gKwl1 MzIgYWVfbWFzayA9IGFjY2VsX2Rldi0+aHdfZGV2aWNlLT5hZG1pbl9hZV9tYXNrOwo+ICsJc3Ry dWN0IGljcF9xYXRfZndfaW5pdF9hZG1pbl9yZXNwIHJlc3AgPSB7IH07Cj4gKwlzdHJ1Y3QgaWNw X3FhdF9md19pbml0X2FkbWluX3JlcSByZXEgPSB7IH07Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl cS5jbWRfaWQgPSBJQ1BfUUFUX0ZXX1JMX0lOSVQ7Cj4gKwo+ICsJcmV0ID0gYWRmX3NlbmRfYWRt aW4oYWNjZWxfZGV2LCAmcmVxLCAmcmVzcCwgYWVfbWFzayk7Cj4gKwlpZiAocmV0KQo+ICsJCXJl dHVybiByZXQ7Cj4gKwo+ICsJbWVtY3B5KHNsaWNlcywgJnJlc3Auc2xpY2VzLCBzaXplb2YoKnNs aWNlcykpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgYWRmX3NlbmRfYWRtaW5f cmxfYWRkX3VwZGF0ZShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LAo+ICsJCQkJIHN0 cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fcmVxICpyZXEpCj4gK3sKPiArCXUzMiBhZV9tYXNr ID0gYWNjZWxfZGV2LT5od19kZXZpY2UtPmFkbWluX2FlX21hc2s7Cj4gKwlzdHJ1Y3QgaWNwX3Fh dF9md19pbml0X2FkbWluX3Jlc3AgcmVzcCA9IHsgfTsKPiArCj4gKwkvKgo+ICsJICogcmVxIHN0 cnVjdCBmaWxsZWQgaW4gcmwgaW1wbGVtZW50YXRpb24uIFVzZWQgY29tbWFuZHMKPiArCSAqIElD UF9RQVRfRldfUkxfQUREIGZvciBhIG5ldyBTTEEKPiArCSAqIElDUF9RQVRfRldfUkxfVVBEQVRF IGZvciB1cGRhdGUgU0xBCj4gKwkgKi8KPiArCXJldHVybiBhZGZfc2VuZF9hZG1pbihhY2NlbF9k ZXYsIHJlcSwgJnJlc3AsIGFlX21hc2spOwo+ICt9Cj4gKwo+ICtpbnQgYWRmX3NlbmRfYWRtaW5f cmxfZGVsZXRlKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsIHUxNiBub2RlX2lkLAo+ ICsJCQkgICAgIHU4IG5vZGVfdHlwZSkKPiArewo+ICsJdTMyIGFlX21hc2sgPSBhY2NlbF9kZXYt Pmh3X2RldmljZS0+YWRtaW5fYWVfbWFzazsKPiArCXN0cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRt aW5fcmVzcCByZXNwID0geyB9Owo+ICsJc3RydWN0IGljcF9xYXRfZndfaW5pdF9hZG1pbl9yZXEg cmVxID0geyB9Owo+ICsKPiArCXJlcS5jbWRfaWQgPSBJQ1BfUUFUX0ZXX1JMX1JFTU9WRTsKPiAr CXJlcS5ub2RlX2lkID0gbm9kZV9pZDsKPiArCXJlcS5ub2RlX3R5cGUgPSBub2RlX3R5cGU7Cj4g Kwo+ICsJcmV0dXJuIGFkZl9zZW5kX2FkbWluKGFjY2VsX2RldiwgJnJlcSwgJnJlc3AsIGFlX21h c2spOwo+ICt9Cj4gKwo+ICAgLyoqCj4gICAgKiBhZGZfc2VuZF9hZG1pbl9pbml0KCkgLSBGdW5j dGlvbiBzZW5kcyBpbml0IG1lc3NhZ2UgdG8gRlcKPiAgICAqIEBhY2NlbF9kZXY6IFBvaW50ZXIg dG8gYWNjZWxlcmF0aW9uIGRldmljZS4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaW50 ZWwvcWF0L3FhdF9jb21tb24vYWRmX2FkbWluLmggYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQv cWF0X2NvbW1vbi9hZGZfYWRtaW4uaAo+IGluZGV4IDAzNTA3ZWMzYTUxZC4uNTVjYmNiYzY2Yzlm IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9h ZG1pbi5oCj4gKysrIGIvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2Fk bWluLmgKPiBAQCAtMyw2ICszLDggQEAKPiAgICNpZm5kZWYgQURGX0FETUlOCj4gICAjZGVmaW5l IEFERl9BRE1JTgo+ICAgCj4gKyNpbmNsdWRlICJpY3BfcWF0X2Z3X2luaXRfYWRtaW4uaCIKPiAr Cj4gICBzdHJ1Y3QgYWRmX2FjY2VsX2RldjsKPiAgIAo+ICAgaW50IGFkZl9pbml0X2FkbWluX2Nv bW1zKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpOwo+IEBAIC0xMiw2ICsxNCwxMiBA QCBpbnQgYWRmX2dldF9hZV9md19jb3VudGVycyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxf ZGV2LCB1MTYgYWUsIHU2NCAqcmVxcywgdQo+ICAgaW50IGFkZl9pbml0X2FkbWluX3BtKHN0cnVj dCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsIHUzMiBpZGxlX2RlbGF5KTsKPiAgIGludCBhZGZf c2VuZF9hZG1pbl90aW1fc3luYyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LCB1MzIg Y250KTsKPiAgIGludCBhZGZfc2VuZF9hZG1pbl9oYl90aW1lcihzdHJ1Y3QgYWRmX2FjY2VsX2Rl diAqYWNjZWxfZGV2LCB1aW50MzJfdCB0aWNrcyk7Cj4gK2ludCBhZGZfc2VuZF9hZG1pbl9ybF9p bml0KHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsCj4gKwkJCSAgIHN0cnVjdCBpY3Bf cWF0X2Z3X2luaXRfYWRtaW5fc2xpY2VfY250ICpzbGljZXMpOwo+ICtpbnQgYWRmX3NlbmRfYWRt aW5fcmxfYWRkX3VwZGF0ZShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LAo+ICsJCQkJ IHN0cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fcmVxICpyZXEpOwo+ICtpbnQgYWRmX3NlbmRf YWRtaW5fcmxfZGVsZXRlKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsIHUxNiBub2Rl X2lkLAo+ICsJCQkgICAgIHU4IG5vZGVfdHlwZSk7Cj4gICBpbnQgYWRmX2dldF9md190aW1lc3Rh bXAoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwgdTY0ICp0aW1lc3RhbXApOwo+ICAg aW50IGFkZl9nZXRfcG1faW5mbyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LCBkbWFf YWRkcl90IHBfc3RhdGVfYWRkciwgc2l6ZV90IGJ1ZmZfc2l6ZSk7Cj4gICBpbnQgYWRmX2dldF9j bnZfc3RhdHMoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwgdTE2IGFlLCB1MTYgKmVy cl9jbnQsIHUxNiAqbGF0ZXN0X2Vycik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2lu dGVsL3FhdC9xYXRfY29tbW9uL2FkZl9nZW40X2h3X2RhdGEuaCBiL2RyaXZlcnMvY3J5cHRvL2lu dGVsL3FhdC9xYXRfY29tbW9uL2FkZl9nZW40X2h3X2RhdGEuaAo+IGluZGV4IDAyZDdhMDE5ZWJm OC4uMTgxM2ZlMWQ1YTA2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9x YXRfY29tbW9uL2FkZl9nZW40X2h3X2RhdGEuaAo+ICsrKyBiL2RyaXZlcnMvY3J5cHRvL2ludGVs L3FhdC9xYXRfY29tbW9uL2FkZl9nZW40X2h3X2RhdGEuaAo+IEBAIC0xMzksNiArMTM5LDEzIEBA IGRvIHsgXAo+ICAgLyogTnVtYmVyIG9mIGhlYXJ0YmVhdCBjb3VudGVyIHBhaXJzICovCj4gICAj ZGVmaW5lIEFERl9OVU1fSEJfQ05UX1BFUl9BRSBBREZfTlVNX1RIUkVBRFNfUEVSX0FFCj4gICAK PiArLyogUmF0ZSBMaW1pdGluZyAqLwo+ICsjZGVmaW5lIEFERl9HRU40X1JMX1IyTF9PRkZTRVQJ CQkweDUwODAwMAo+ICsjZGVmaW5lIEFERl9HRU40X1JMX0wyQ19PRkZTRVQJCQkweDUwOTAwMAo+ ICsjZGVmaW5lIEFERl9HRU40X1JMX0MyU19PRkZTRVQJCQkweDUwODgxOAo+ICsjZGVmaW5lIEFE Rl9HRU40X1JMX1RPS0VOX1BDSUVJTl9CVUNLRVRfT0ZGU0VUCTB4NTA4ODAwCj4gKyNkZWZpbmUg QURGX0dFTjRfUkxfVE9LRU5fUENJRU9VVF9CVUNLRVRfT0ZGU0VUCTB4NTA4ODA0Cj4gKwo+ICAg dm9pZCBhZGZfZ2VuNF9zZXRfc3NtX3dkdGltZXIoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2Vs X2Rldik7Cj4gICB2b2lkIGFkZl9nZW40X2luaXRfaHdfY3NyX29wcyhzdHJ1Y3QgYWRmX2h3X2Nz cl9vcHMgKmNzcl9vcHMpOwo+ICAgaW50IGFkZl9nZW40X3JpbmdfcGFpcl9yZXNldChzdHJ1Y3Qg YWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LCB1MzIgYmFua19udW1iZXIpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfaW5pdC5jIGIvZHJpdmVy cy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX2luaXQuYwo+IGluZGV4IGI0Y2Y2MDVj Y2YzZS4uODI3YzcwYzQyMjFmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvY3J5cHRvL2ludGVsL3Fh dC9xYXRfY29tbW9uL2FkZl9pbml0LmMKPiArKysgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQv cWF0X2NvbW1vbi9hZGZfaW5pdC5jCj4gQEAgLTksNiArOSw3IEBACj4gICAjaW5jbHVkZSAiYWRm X2NvbW1vbl9kcnYuaCIKPiAgICNpbmNsdWRlICJhZGZfZGJnZnMuaCIKPiAgICNpbmNsdWRlICJh ZGZfaGVhcnRiZWF0LmgiCj4gKyNpbmNsdWRlICJhZGZfcmwuaCIKPiAgIAo+ICAgc3RhdGljIExJ U1RfSEVBRChzZXJ2aWNlX3RhYmxlKTsKPiAgIHN0YXRpYyBERUZJTkVfTVVURVgoc2VydmljZV9s b2NrKTsKPiBAQCAtMTMzLDYgKzEzNCw5IEBAIHN0YXRpYyBpbnQgYWRmX2Rldl9pbml0KHN0cnVj dCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpCj4gICAJfQo+ICAgCj4gICAJYWRmX2hlYXJ0YmVh dF9pbml0KGFjY2VsX2Rldik7Cj4gKwlyZXQgPSBhZGZfcmxfaW5pdChhY2NlbF9kZXYpOwo+ICsJ aWYgKHJldCAmJiByZXQgIT0gLUVPUE5PVFNVUFApCj4gKwkJcmV0dXJuIHJldDsKPiAgIAo+ICAg CS8qCj4gICAJICogU3Vic2VydmljZSBpbml0aWFsaXNhdGlvbiBpcyBkaXZpZGVkIGludG8gdHdv IHN0YWdlczogaW5pdCBhbmQgc3RhcnQuCj4gQEAgLTIwOCw2ICsyMTIsOSBAQCBzdGF0aWMgaW50 IGFkZl9kZXZfc3RhcnQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldikKPiAgIAl9Cj4g ICAKPiAgIAlhZGZfaGVhcnRiZWF0X3N0YXJ0KGFjY2VsX2Rldik7Cj4gKwlyZXQgPSBhZGZfcmxf c3RhcnQoYWNjZWxfZGV2KTsKPiArCWlmIChyZXQgJiYgcmV0ICE9IC1FT1BOT1RTVVBQKQo+ICsJ CXJldHVybiByZXQ7Cj4gICAKPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlcnZpY2UsICZzZXJ2 aWNlX3RhYmxlLCBsaXN0KSB7Cj4gICAJCWlmIChzZXJ2aWNlLT5ldmVudF9obGQoYWNjZWxfZGV2 LCBBREZfRVZFTlRfU1RBUlQpKSB7Cj4gQEAgLTI2Nyw2ICsyNzQsNyBAQCBzdGF0aWMgdm9pZCBh ZGZfZGV2X3N0b3Aoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldikKPiAgIAkgICAgIXRl c3RfYml0KEFERl9TVEFUVVNfU1RBUlRJTkcsICZhY2NlbF9kZXYtPnN0YXR1cykpCj4gICAJCXJl dHVybjsKPiAgIAo+ICsJYWRmX3JsX3N0b3AoYWNjZWxfZGV2KTsKPiAgIAlhZGZfZGJnZnNfcm0o YWNjZWxfZGV2KTsKPiAgIAo+ICAgCWNsZWFyX2JpdChBREZfU1RBVFVTX1NUQVJUSU5HLCAmYWNj ZWxfZGV2LT5zdGF0dXMpOwo+IEBAIC0zNTMsNiArMzYxLDcgQEAgc3RhdGljIHZvaWQgYWRmX2Rl dl9zaHV0ZG93bihzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KQo+ICAgCQkJY2xlYXJf Yml0KGFjY2VsX2Rldi0+YWNjZWxfaWQsIHNlcnZpY2UtPmluaXRfc3RhdHVzKTsKPiAgIAl9Cj4g ICAKPiArCWFkZl9ybF9leGl0KGFjY2VsX2Rldik7Cj4gICAJYWRmX2hlYXJ0YmVhdF9zaHV0ZG93 bihhY2NlbF9kZXYpOwo+ICAgCj4gICAJaHdfZGF0YS0+ZGlzYWJsZV9pb3YoYWNjZWxfZGV2KTsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3Js LmMgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcmwuYwo+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kZWM5OGEwNTZkY2UKPiAtLS0g L2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRm X3JsLmMKPiBAQCAtMCwwICsxLDExNzYgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQo+ICsvKiBDb3B5cmlnaHQoYykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAq Lwo+ICsKPiArI2RlZmluZSBkZXZfZm10KGZtdCkgIlJhdGVMaW1pdGluZzogIiBmbXQKPiArCj4g KyNpbmNsdWRlIDxhc20vZXJybm8uaD4KPiArI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgo+ICsKPiAr I2luY2x1ZGUgPGxpbnV4L2Rldl9wcmludGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pgo+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC91bml0cy5oPgo+ICsKPiArI2luY2x1ZGUgImFkZl9hY2NlbF9kZXZp Y2VzLmgiCj4gKyNpbmNsdWRlICJhZGZfY29tbW9uX2Rydi5oIgo+ICsjaW5jbHVkZSAiYWRmX3Js X2FkbWluLmgiCj4gKyNpbmNsdWRlICJhZGZfcmwuaCIKPiArCj4gKyNkZWZpbmUgUkxfVE9LRU5f R1JBTlVMQVJJVFlfUENJRUlOX0JVQ0tFVAkwVQo+ICsjZGVmaW5lIFJMX1RPS0VOX0dSQU5VTEFS SVRZX1BDSUVPVVRfQlVDS0VUCTBVCj4gKyNkZWZpbmUgUkxfVE9LRU5fUENJRV9TSVpFCQkJNjQK PiArI2RlZmluZSBSTF9UT0tFTl9BU1lNX1NJWkUJCQkxMDI0Cj4gKyNkZWZpbmUgUkxfQ1NSX1NJ WkUJCQkJNFUKPiArI2RlZmluZSBSTF9DQVBBQklMSVRZX01BU0sJCQlHRU5NQVNLKDYsIDQpCj4g KyNkZWZpbmUgUkxfQ0FQQUJJTElUWV9WQUxVRQkJCTB4NzAKPiArI2RlZmluZSBSTF9WQUxJREFU RV9OT05fWkVSTyhpbnB1dCkJCSgoaW5wdXQpID09IDApCj4gKyNkZWZpbmUgUk9PVF9NQVNLCQkJ CUdFTk1BU0soMSwgMCkKPiArI2RlZmluZSBDTFVTVEVSX01BU0sJCQkJR0VOTUFTSygzLCAwKQo+ ICsjZGVmaW5lIExFQUZfTUFTSwkJCQlHRU5NQVNLKDUsIDApCj4gKwo+ICtzdGF0aWMgaW50IHZh bGlkYXRlX3VzZXJfaW5wdXQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwKPiArCQkJ ICAgICAgIHN0cnVjdCBhZGZfcmxfc2xhX2lucHV0X2RhdGEgKnNsYV9pbiwKPiArCQkJICAgICAg IGJvb2wgaXNfdXBkYXRlKQo+ICt7Cj4gKwljb25zdCB1bnNpZ25lZCBsb25nIHJwX21hc2sgPSBz bGFfaW4tPnJwX21hc2s7Cj4gKwlzaXplX3QgcnBfbWFza19zaXplOwo+ICsJaW50IGksIGNudDsK PiArCj4gKwlpZiAoc2xhX2luLT5zbGFfaWQgPCBSTF9TTEFfRU1QVFlfSUQgfHwgc2xhX2luLT5z bGFfaWQgPj0gUkxfTk9ERVNfQ05UX01BWCkgewoKU2hvdWxkIHRoaXMgYmUgPD0gUkxfU0xBX0VN UFRZX0lEPyBBZGRpdGlvbmFsbHkgdGhpcyBjaGVjayBzZWVtcyAKdW5uZWNlc3NhcnkgYXMgc2lt aWxhciBjaGVjayBpcyBkb25lIGluIHRoZSB2YWxpZGF0ZV9zbGFfaWQoKSB3aGljaCBnZXRzIAph bHdheXMgY2FsbGVkIGluIHRoZSBzYW1lIHBhdGggd2hlcmUgdGhlIHZhbGlkYXRlX3VzZXJfaW5w dXQoKSBpcyBjYWxsZWQuCgo+ICsJCWRldl9ub3RpY2UoJkdFVF9ERVYoYWNjZWxfZGV2KSwgIldy b25nIFNMQSBJRFxuIik7Cj4gKwkJZ290byByZXRfaW52YWw7Cj4gKwl9Cj4gKwo+ICsJaWYgKHNs YV9pbi0+cGlyIDwgc2xhX2luLT5jaXIpIHsKPiArCQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2Vs X2RldiksCj4gKwkJCSAgICJQSVIgbXVzdCBiZSA+PSBDSVIsIHNldHRpbmcgUElSIHRvIENJUlxu Iik7Cj4gKwkJc2xhX2luLT5waXIgPSBzbGFfaW4tPmNpcjsKPiArCX0KPiArCj4gKwlpZiAoIWlz X3VwZGF0ZSkgewo+ICsJCWNudCA9IDA7Cj4gKwkJcnBfbWFza19zaXplID0gc2l6ZW9mKHNsYV9p bi0+cnBfbWFzaykgKiBCSVRTX1BFUl9CWVRFOwo+ICsJCWZvcl9lYWNoX3NldF9iaXQoaSwgJnJw X21hc2ssIHJwX21hc2tfc2l6ZSkgewo+ICsJCQlpZiAoKytjbnQgPiBSTF9SUF9DTlRfUEVSX0xF QUZfTUFYKSB7Cj4gKwkJCQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2VsX2RldiksCj4gKwkJCQkJ ICAgIlRvbyBtYW55IHJpbmcgcGFpcnMgc2VsZWN0ZWQgZm9yIHRoaXMgU0xBXG4iKTsKPiArCQkJ CWdvdG8gcmV0X2ludmFsOwoKVGhlIGVycm9yIGdvdG9zIHNlZW0gdXNlbGVzcyBpbiB0aGlzIGZ1 bmN0aW9uLCBtYXliZSBqdXN0IGRpcmVjdGx5IApyZXR1cm4gLUVJTlZBTC4KCj4gKwkJCX0KPiAr CQl9Cj4gKwo+ICsJCWlmIChzbGFfaW4tPnNydiA+PSBBREZfU1ZDX05PTkUpIHsKPiArCQkJZGV2 X25vdGljZSgmR0VUX0RFVihhY2NlbF9kZXYpLAo+ICsJCQkJICAgIldyb25nIHNlcnZpY2UgdHlw ZVxuIik7Cj4gKwkJCWdvdG8gcmV0X2ludmFsOwo+ICsJCX0KPiArCj4gKwkJaWYgKHNsYV9pbi0+ dHlwZSA+IFJMX0xFQUYpIHsKPiArCQkJZGV2X25vdGljZSgmR0VUX0RFVihhY2NlbF9kZXYpLAo+ ICsJCQkJICAgIldyb25nIG5vZGUgdHlwZVxuIik7Cj4gKwkJCWdvdG8gcmV0X2ludmFsOwo+ICsJ CX0KPiArCj4gKwkJaWYgKHNsYV9pbi0+cGFyZW50X2lkIDwgUkxfUEFSRU5UX0RFRkFVTFRfSUQg fHwKPiArCQkgICAgc2xhX2luLT5wYXJlbnRfaWQgPj0gUkxfTk9ERVNfQ05UX01BWCkgewo+ICsJ CQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2VsX2RldiksCj4gKwkJCQkgICAiV3JvbmcgcGFyZW50 IElEXG4iKTsKPiArCQkJZ290byByZXRfaW52YWw7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVy biAwOwo+ICsKPiArcmV0X2ludmFsOgo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdmFsaWRhdGVfc2xhX2lkKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYs IGludCBzbGFfaWQpCj4gK3sKPiArCXN0cnVjdCBybF9zbGEgKnNsYTsKPiArCj4gKwlpZiAoc2xh X2lkIDwgMCB8fCBzbGFfaWQgPj0gUkxfTk9ERVNfQ05UX01BWCkKPiArCQlnb3RvIHJldF9ub3Rf ZXhpc3RzOwo+ICsKPiArCXNsYSA9IGFjY2VsX2Rldi0+cmF0ZV9saW1pdGluZy0+c2xhW3NsYV9p ZF07Cj4gKwo+ICsJaWYgKCFzbGEpCj4gKwkJZ290byByZXRfbm90X2V4aXN0czsKPiArCj4gKwlp ZiAoc2xhLT50eXBlICE9IFJMX0xFQUYpIHsKPiArCQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2Vs X2RldiksCj4gKwkJCSAgICJUaGlzIElEIGlzIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2VcbiIp Owo+ICsJCWdvdG8gcmV0X2ludmFsOwoKTWF5YmUganVzdCBkaXJlY3QgcmV0dXJuIGhlcmUuCgo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArcmV0X25vdF9leGlzdHM6Cj4gKwlkZXZfbm90 aWNlKCZHRVRfREVWKGFjY2VsX2RldiksCj4gKwkJICAgIlNMQSB3aXRoIHByb3ZpZGVkIElEIGRv ZXMgbm90IGV4aXN0XG4iKTsKPiArcmV0X2ludmFsOgo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30K PiArCj4gKy8qKgo+ICsgKiBmaW5kX3BhcmVudCgpIC0gRmluZCB0aGUgcGFyZW50IGZvciBhIG5l dyBTTEEKPiArICogQHJsX2RhdGE6IHBvaW50ZXIgdG8gcmF0ZWxpbWl0aW5nIGRhdGEKPiArICog QHNsYV9pbjogcG9pbnRlciB0byB1c2VyIGlucHV0IGRhdGEgZm9yIGEgbmV3IFNMQQo+ICsgKgo+ ICsgKiBGdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgcGFyZW50IFNMQS4gSWYgdGhl IHBhcmVudCBJRCBpcyBwcm92aWRlZAo+ICsgKiBhcyBpbnB1dCBpbiB0aGUgdXNlciBkYXRhLCB0 aGVuIHN1Y2ggSUQgaXMgdmFsaWRhdGVkIGFuZCB0aGUgcGFyZW50IFNMQQo+ICsgKiBpcyByZXR1 cm5lZC4KPiArICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBkZWZhdWx0IHBhcmVudCBTTEEg KHJvb3Qgb3IgY2x1c3RlcikgZm9yCj4gKyAqIHRoZSBuZXcgb2JqZWN0Lgo+ICsgKgo+ICsgKiBS ZXR1cm46Cj4gKyAqICogUG9pbnRlciB0byB0aGUgcGFyZW50IFNMQSBvYmplY3QKPiArICogKiBO VUxMIC0gd2hlbiBwYXJlbnQgY2Fubm90IGJlIGZvdW5kCj4gKyAqLwo+ICtzdGF0aWMgc3RydWN0 IHJsX3NsYSAqZmluZF9wYXJlbnQoc3RydWN0IGFkZl9ybCAqcmxfZGF0YSwKPiArCQkJCSAgc3Ry dWN0IGFkZl9ybF9zbGFfaW5wdXRfZGF0YSAqc2xhX2luKQo+ICt7Cj4gKwlpbnQgaW5wdXRfcGFy ZW50X2lkID0gc2xhX2luLT5wYXJlbnRfaWQ7Cj4gKwlzdHJ1Y3Qgcmxfc2xhICpyb290ID0gTlVM TDsKPiArCXN0cnVjdCBybF9zbGEgKnBhcmVudF9zbGE7Cj4gKwlpbnQgaTsKPiArCj4gKwlpZiAo c2xhX2luLT50eXBlID09IFJMX1JPT1QpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJaWYgKGlu cHV0X3BhcmVudF9pZCA+IFJMX1BBUkVOVF9ERUZBVUxUX0lEKSB7Cj4gKwkJcGFyZW50X3NsYSA9 IHJsX2RhdGEtPnNsYVtpbnB1dF9wYXJlbnRfaWRdOwo+ICsJCS8qCj4gKwkJICogU0xBIGNhbiBi ZSBhIHBhcmVudCBpZiBpdCBoYXMgdGhlIHNhbWUgc2VydmljZSBhcyB0aGUgY2hpbGQKPiArCQkg KiBhbmQgaXRzIHR5cGUgaXMgaGlnaGVyIGluIHRoZSBoaWVyYXJjaHksCj4gKwkJICogZm9yIGV4 YW1wbGUgdGhlIHBhcmVudCB0eXBlIG9mIGEgTEVBRiBtdXN0IGJlIGEgQ0xVU1RFUi4KPiArCQkg Ki8KPiArCQlpZiAocGFyZW50X3NsYSAmJiBwYXJlbnRfc2xhLT5zcnYgPT0gc2xhX2luLT5zcnYg JiYKPiArCQkgICAgcGFyZW50X3NsYS0+dHlwZSA9PSBzbGFfaW4tPnR5cGUgLSAxKQo+ICsJCQly ZXR1cm4gcGFyZW50X3NsYTsKPiArCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwl9Cj4gKwo+ICsJLyog SWYgaW5wdXRfcGFyZW50X2lkIGlzIG5vdCB2YWxpZCwgZ2V0IHJvb3QgZm9yIHRoaXMgc2Vydmlj ZSB0eXBlLiAqLwo+ICsJZm9yIChpID0gMDsgaSA8IFJMX1JPT1RfTUFYOyBpKyspIHsKPiArCQlp ZiAocmxfZGF0YS0+cm9vdFtpXSAmJiBybF9kYXRhLT5yb290W2ldLT5zcnYgPT0gc2xhX2luLT5z cnYpIHsKPiArCQkJcm9vdCA9IHJsX2RhdGEtPnJvb3RbaV07Cj4gKwkJCWJyZWFrOwo+ICsJCX0K PiArCX0KPiArCj4gKwlpZiAoIXJvb3QpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJLyoKPiAr CSAqIElmIHRoZSB0eXBlIG9mIHRoaXMgU0xBIGlzIGNsdXN0ZXIsIHRoZW4gcmV0dXJuIHRoZSBy b290Lgo+ICsJICogT3RoZXJ3aXNlLCBmaW5kIHRoZSBkZWZhdWx0IChpLmUuIGZpcnN0KSBjbHVz dGVyIGZvciB0aGlzIHNlcnZpY2UuCj4gKwkgKi8KPiArCWlmIChzbGFfaW4tPnR5cGUgPT0gUkxf Q0xVU1RFUikKPiArCQlyZXR1cm4gcm9vdDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgUkxfQ0xV U1RFUl9NQVg7IGkrKykgewo+ICsJCWlmIChybF9kYXRhLT5jbHVzdGVyW2ldICYmIHJsX2RhdGEt PmNsdXN0ZXJbaV0tPnBhcmVudCA9PSByb290KQo+ICsJCQlyZXR1cm4gcmxfZGF0YS0+Y2x1c3Rl cltpXTsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGVudW0g YWRmX2NmZ19zZXJ2aWNlX3R5cGUgc3J2X3RvX2NmZ19zdmNfdHlwZShlbnVtIGFkZl9iYXNlX3Nl cnZpY2VzIHJsX3NydikKPiArewo+ICsJc3dpdGNoIChybF9zcnYpIHsKPiArCWNhc2UgQURGX1NW Q19BU1lNOgo+ICsJCXJldHVybiBBU1lNOwo+ICsJY2FzZSBBREZfU1ZDX1NZTToKPiArCQlyZXR1 cm4gU1lNOwo+ICsJY2FzZSBBREZfU1ZDX0RDOgo+ICsJCXJldHVybiBDT01QOwo+ICsJZGVmYXVs dDoKPiArCQlyZXR1cm4gVU5VU0VEOwo+ICsJfQo+ICt9Cj4gKwo+ICsvKioKPiArICogZ2V0X3Ns YV9hcnJfb2ZfdHlwZSgpIC0gUmV0dXJucyBhIHBvaW50ZXIgdG8gU0xBIHR5cGUgc3BlY2lmaWMg YXJyYXkKPiArICogQHJsX2RhdGE6IHBvaW50ZXIgdG8gcmF0ZWxpbWl0aW5nIGRhdGEKPiArICog QHR5cGU6IFNMQSB0eXBlCj4gKyAqIEBzbGFfYXJyOiBwb2ludGVyIHRvIHZhcmlhYmxlIHdoZXJl IHJlcXVlc3RlZCBwb2ludGVyIHdpbGwgYmUgc3RvcmVkCj4gKyAqCj4gKyAqIFJldHVybjogTWF4 IG51bWJlciBvZiBlbGVtZW50cyBhbGxvd2VkIGZvciB0aGUgcmV0dXJuZWQgYXJyYXkKPiArICov Cj4gK3N0YXRpYyB1MzIgZ2V0X3NsYV9hcnJfb2ZfdHlwZShzdHJ1Y3QgYWRmX3JsICpybF9kYXRh LCBlbnVtIHJsX25vZGVfdHlwZSB0eXBlLAo+ICsJCQkgICAgICAgc3RydWN0IHJsX3NsYSAqKipz bGFfYXJyKQo+ICt7Cj4gKwlzd2l0Y2ggKHR5cGUpIHsKPiArCWNhc2UgUkxfTEVBRjoKPiArCQkq c2xhX2FyciA9IHJsX2RhdGEtPmxlYWY7Cj4gKwkJcmV0dXJuIFJMX0xFQUZfTUFYOwo+ICsJY2Fz ZSBSTF9DTFVTVEVSOgo+ICsJCSpzbGFfYXJyID0gcmxfZGF0YS0+Y2x1c3RlcjsKPiArCQlyZXR1 cm4gUkxfQ0xVU1RFUl9NQVg7Cj4gKwljYXNlIFJMX1JPT1Q6Cj4gKwkJKnNsYV9hcnIgPSBybF9k YXRhLT5yb290Owo+ICsJCXJldHVybiBSTF9ST09UX01BWDsKPiArCWRlZmF1bHQ6Cj4gKwkJKnNs YV9hcnIgPSBOVUxMOwo+ICsJCXJldHVybiAwOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bCBpc19zZXJ2aWNlX2VuYWJsZWQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwKPiAr CQkJICAgICAgIGVudW0gYWRmX2Jhc2Vfc2VydmljZXMgcmxfc3J2KQo+ICt7Cj4gKwllbnVtIGFk Zl9jZmdfc2VydmljZV90eXBlIGFyYl9zcnYgPSBzcnZfdG9fY2ZnX3N2Y190eXBlKHJsX3Nydik7 Cj4gKwlzdHJ1Y3QgYWRmX2h3X2RldmljZV9kYXRhICpod19kYXRhID0gR0VUX0hXX0RBVEEoYWNj ZWxfZGV2KTsKPiArCXU4IHJwc19wZXJfYnVuZGxlID0gaHdfZGF0YS0+bnVtX2JhbmtzX3Blcl92 ZjsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBycHNfcGVyX2J1bmRsZTsgaSsr KSB7Cj4gKwkJaWYgKEdFVF9TUlZfVFlQRShhY2NlbF9kZXYsIGkpID09IGFyYl9zcnYpCj4gKwkJ CXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxzZTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIHByZXBhcmVfcnBfaWRzKCkgLSBDcmVhdGVzIGFuIGFycmF5IG9mIHJpbmcgcGFpciBJ RHMgZnJvbSBiaXRtYXNrCj4gKyAqIEBhY2NlbF9kZXY6IHBvaW50ZXIgdG8gYWNjZWxlcmF0aW9u IGRldmljZSBzdHJ1Y3R1cmUKPiArICogQHNsYTogU0xBIG9iamVjdCBkYXRhIHdoZXJlIHJlc3Vs dCB3aWxsIGJlIHdyaXR0ZW4KPiArICogQHJwX21hc2s6IGJpdG1hc2sgb2YgcmluZyBwYWlyIElE cwo+ICsgKgo+ICsgKiBGdW5jdGlvbiB0cmllcyB0byBjb252ZXJ0IHByb3ZpZGVkIGJpdG1hcCB0 byBhbiBhcnJheSBvZiBJRHMuIEl0IGNoZWNrcyBpZgo+ICsgKiBSUHMgYXJlbid0IGluIHVzZSwg YXJlIGFzc2lnbmVkIHRvIFNMQSAgc2VydmljZSBvciBpZiBhIG51bWJlciBvZiBwcm92aWRlZAo+ ICsgKiBJRHMgaXMgbm90IHRvbyBiaWcuIElmIHN1Y2Nlc3NmdWwsIHdyaXRlcyB0aGUgcmVzdWx0 IGludG8gdGhlIGZpZWxkCj4gKyAqIHNsYS0+cmluZ19wYWlyc19jbnQuCj4gKyAqCj4gKyAqIFJl dHVybjoKPiArICogKiAwCQktIG9rCj4gKyAqICogLUVJTlZBTAktIHJpbmcgcGFpcnMgYXJyYXkg Y2Fubm90IGJlIGNyZWF0ZWQgZnJvbSBwcm92aWRlZCBtYXNrCj4gKyAqLwo+ICtzdGF0aWMgaW50 IHByZXBhcmVfcnBfaWRzKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsIHN0cnVjdCBy bF9zbGEgKnNsYSwKPiArCQkJICBjb25zdCB1bnNpZ25lZCBsb25nIHJwX21hc2spCj4gK3sKPiAr CWVudW0gYWRmX2NmZ19zZXJ2aWNlX3R5cGUgYXJiX3NydiA9IHNydl90b19jZmdfc3ZjX3R5cGUo c2xhLT5zcnYpOwo+ICsJdTE2IHJwc19wZXJfYnVuZGxlID0gR0VUX0hXX0RBVEEoYWNjZWxfZGV2 KS0+bnVtX2JhbmtzX3Blcl92ZjsKPiArCWJvb2wgKnJwX2luX3VzZSA9IGFjY2VsX2Rldi0+cmF0 ZV9saW1pdGluZy0+cnBfaW5fdXNlOwo+ICsJc2l6ZV90IHJwX2NudF9tYXggPSBBUlJBWV9TSVpF KHNsYS0+cmluZ19wYWlyc19pZHMpOwo+ICsJdTE2IHJwX2lkX21heCA9IEdFVF9IV19EQVRBKGFj Y2VsX2RldiktPm51bV9iYW5rczsKPiArCXUxNiBjbnQgPSAwOwo+ICsJdTE2IHJwX2lkOwo+ICsK PiArCWZvcl9lYWNoX3NldF9iaXQocnBfaWQsICZycF9tYXNrLCBycF9pZF9tYXgpIHsKPiArCQlp ZiAoY250ID49IHJwX2NudF9tYXgpIHsKPiArCQkJZGV2X25vdGljZSgmR0VUX0RFVihhY2NlbF9k ZXYpLAo+ICsJCQkJICAgIkFzc2lnbmVkIG1vcmUgcmluZyBwYWlycyB0aGFuIHN1cHBvcnRlZCIp Owo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwo+ICsJCWlmIChycF9pbl91c2VbcnBf aWRdKSB7Cj4gKwkJCWRldl9ub3RpY2UoJkdFVF9ERVYoYWNjZWxfZGV2KSwKPiArCQkJCSAgICJS UCAldSBhbHJlYWR5IGFzc2lnbmVkIHRvIG90aGVyIFNMQSIsIHJwX2lkKTsKPiArCQkJcmV0dXJu IC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlpZiAoR0VUX1NSVl9UWVBFKGFjY2VsX2RldiwgcnBf aWQgJSBycHNfcGVyX2J1bmRsZSkgIT0gYXJiX3Nydikgewo+ICsJCQlkZXZfbm90aWNlKCZHRVRf REVWKGFjY2VsX2RldiksCj4gKwkJCQkgICAiUlAgJXUgZG9lcyBub3Qgc3VwcG9ydCBTTEEgc2Vy dmljZSIsIHJwX2lkKTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsKPiArCQlzbGEt PnJpbmdfcGFpcnNfaWRzW2NudCsrXSA9IHJwX2lkOwo+ICsJfQo+ICsKPiArCXNsYS0+cmluZ19w YWlyc19jbnQgPSBjbnQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG1hcmtfcnBzX3VzYWdlKHN0cnVjdCBybF9zbGEgKnNsYSwgYm9vbCAqcnBfaW5fdXNlLCBib29s IHVzZWQpCj4gK3sKPiArCXUxNiBycF9pZDsKPiArCWludCBpOwo+ICsKPiArCWZvciAoaSA9IDA7 IGkgPCBzbGEtPnJpbmdfcGFpcnNfY250OyBpKyspIHsKPiArCQlycF9pZCA9IHNsYS0+cmluZ19w YWlyc19pZHNbaV07Cj4gKwkJcnBfaW5fdXNlW3JwX2lkXSA9IHVzZWQ7Cj4gKwl9Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkIGFzc2lnbl9ycHNfdG9fbGVhZihzdHJ1Y3QgYWRmX2FjY2VsX2RldiAq YWNjZWxfZGV2LAo+ICsJCQkgICAgICAgc3RydWN0IHJsX3NsYSAqc2xhLCBib29sIGNsZWFyKQo+ ICt7Cj4gKwlzdHJ1Y3QgYWRmX2h3X2RldmljZV9kYXRhICpod19kYXRhID0gR0VUX0hXX0RBVEEo YWNjZWxfZGV2KTsKPiArCXZvaWQgX19pb21lbSAqcG1pc2NfYWRkciA9IGFkZl9nZXRfcG1pc2Nf YmFzZShhY2NlbF9kZXYpOwo+ICsJdTMyIGJhc2Vfb2Zmc2V0ID0gaHdfZGF0YS0+cmxfZGF0YS5y Mmxfb2Zmc2V0Owo+ICsJdTMyIG5vZGVfaWQgPSBjbGVhciA/IDBVIDogKHNsYS0+bm9kZV9pZCAm IExFQUZfTUFTSyk7Cj4gKwl1MzIgb2Zmc2V0Owo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IHNsYS0+cmluZ19wYWlyc19jbnQ7IGkrKykgewo+ICsJCW9mZnNldCA9IGJhc2Vfb2Zm c2V0ICsgKFJMX0NTUl9TSVpFICogc2xhLT5yaW5nX3BhaXJzX2lkc1tpXSk7Cj4gKwkJQURGX0NT Ul9XUihwbWlzY19hZGRyLCBvZmZzZXQsIG5vZGVfaWQpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBhc3NpZ25fbGVhZl90b19jbHVzdGVyKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2Nl bF9kZXYsCj4gKwkJCQkgICBzdHJ1Y3Qgcmxfc2xhICpzbGEsIGJvb2wgY2xlYXIpCj4gK3sKPiAr CXN0cnVjdCBhZGZfaHdfZGV2aWNlX2RhdGEgKmh3X2RhdGEgPSBHRVRfSFdfREFUQShhY2NlbF9k ZXYpOwo+ICsJdm9pZCBfX2lvbWVtICpwbWlzY19hZGRyID0gYWRmX2dldF9wbWlzY19iYXNlKGFj Y2VsX2Rldik7Cj4gKwl1MzIgYmFzZV9vZmZzZXQgPSBod19kYXRhLT5ybF9kYXRhLmwyY19vZmZz ZXQ7Cj4gKwl1MzIgbm9kZV9pZCA9IHNsYS0+bm9kZV9pZCAmIExFQUZfTUFTSzsKPiArCXUzMiBw YXJlbnRfaWQgPSBjbGVhciA/IDBVIDogKHNsYS0+cGFyZW50LT5ub2RlX2lkICYgQ0xVU1RFUl9N QVNLKTsKPiArCXUzMiBvZmZzZXQ7Cj4gKwo+ICsJb2Zmc2V0ID0gYmFzZV9vZmZzZXQgKyAoUkxf Q1NSX1NJWkUgKiBub2RlX2lkKTsKPiArCUFERl9DU1JfV1IocG1pc2NfYWRkciwgb2Zmc2V0LCBw YXJlbnRfaWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBhc3NpZ25fY2x1c3Rlcl90b19yb290 KHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsCj4gKwkJCQkgICBzdHJ1Y3Qgcmxfc2xh ICpzbGEsIGJvb2wgY2xlYXIpCj4gK3sKPiArCXN0cnVjdCBhZGZfaHdfZGV2aWNlX2RhdGEgKmh3 X2RhdGEgPSBHRVRfSFdfREFUQShhY2NlbF9kZXYpOwo+ICsJdm9pZCBfX2lvbWVtICpwbWlzY19h ZGRyID0gYWRmX2dldF9wbWlzY19iYXNlKGFjY2VsX2Rldik7Cj4gKwl1MzIgYmFzZV9vZmZzZXQg PSBod19kYXRhLT5ybF9kYXRhLmMyc19vZmZzZXQ7Cj4gKwl1MzIgbm9kZV9pZCA9IHNsYS0+bm9k ZV9pZCAmIENMVVNURVJfTUFTSzsKPiArCXUzMiBwYXJlbnRfaWQgPSBjbGVhciA/IDBVIDogKHNs YS0+cGFyZW50LT5ub2RlX2lkICYgUk9PVF9NQVNLKTsKPiArCXUzMiBvZmZzZXQ7Cj4gKwo+ICsJ b2Zmc2V0ID0gYmFzZV9vZmZzZXQgKyAoUkxfQ1NSX1NJWkUgKiBub2RlX2lkKTsKPiArCUFERl9D U1JfV1IocG1pc2NfYWRkciwgb2Zmc2V0LCBwYXJlbnRfaWQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBhc3NpZ25fbm9kZV90b19wYXJlbnQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rl diwKPiArCQkJCSAgc3RydWN0IHJsX3NsYSAqc2xhLCBib29sIGNsZWFyX2Fzc2lnbm1lbnQpCj4g K3sKPiArCXN3aXRjaCAoc2xhLT50eXBlKSB7Cj4gKwljYXNlIFJMX0xFQUY6Cj4gKwkJYXNzaWdu X3Jwc190b19sZWFmKGFjY2VsX2Rldiwgc2xhLCBjbGVhcl9hc3NpZ25tZW50KTsKPiArCQlhc3Np Z25fbGVhZl90b19jbHVzdGVyKGFjY2VsX2Rldiwgc2xhLCBjbGVhcl9hc3NpZ25tZW50KTsKPiAr CQlicmVhazsKPiArCWNhc2UgUkxfQ0xVU1RFUjoKPiArCQlhc3NpZ25fY2x1c3Rlcl90b19yb290 KGFjY2VsX2Rldiwgc2xhLCBjbGVhcl9hc3NpZ25tZW50KTsKPiArCQlicmVhazsKPiArCWRlZmF1 bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjYW5fcGFyZW50X2Fm Zm9yZF9zbGEoKSAtIFZlcmlmaWVzIGlmIHBhcmVudCBhbGxvd3MgdG8gY3JlYXRlIGFuIFNMQQo+ ICsgKiBAc2xhX2luOiBwb2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YSBmb3IgYSBuZXcgU0xBCj4g KyAqIEBzbGFfcGFyZW50OiBwb2ludGVyIHRvIHBhcmVudCBTTEEgb2JqZWN0Cj4gKyAqIEBzbGFf Y2lyOiBjdXJyZW50IGNoaWxkIENJUiB2YWx1ZSAob25seSBmb3IgdXBkYXRlKQo+ICsgKiBAaXNf dXBkYXRlOiByZXF1ZXN0IGlzIGEgdXBkYXRlCj4gKyAqCj4gKyAqIEFsZ29yaXRobSB2ZXJpZmll cyBpZiBwYXJlbnQgaGFzIGVub3VnaCByZW1haW5pbmcgYnVkZ2V0IHRvIHRha2UgYXNzaWdubWVu dAo+ICsgKiBvZiBhIGNoaWxkIHdpdGggcHJvdmlkZWQgcGFyYW1ldGVycy4gSW4gdXBkYXRlIGNh c2UgY3VycmVudCBDSVIgdmFsdWUgbXVzdCBiZQo+ICsgKiByZXR1cm5lZCB0byBidWRnZXQgZmly c3QuCj4gKyAqIFBJUiB2YWx1ZSBjYW5ub3QgZXhjZWVkIHRoZSBQSVIgYXNzaWduZWQgdG8gcGFy ZW50Lgo+ICsgKgo+ICsgKiBSZXR1cm46Cj4gKyAqICogdHJ1ZQktIFNMQSBjYW4gYmUgY3JlYXRl ZAo+ICsgKiAqIGZhbHNlCS0gU0xBIGNhbm5vdCBiZSBjcmVhdGVkCj4gKyAqLwo+ICtzdGF0aWMg Ym9vbCBjYW5fcGFyZW50X2FmZm9yZF9zbGEoc3RydWN0IGFkZl9ybF9zbGFfaW5wdXRfZGF0YSAq c2xhX2luLAo+ICsJCQkJICBzdHJ1Y3Qgcmxfc2xhICpzbGFfcGFyZW50LCB1MzIgc2xhX2NpciwK PiArCQkJCSAgYm9vbCBpc191cGRhdGUpCj4gK3sKPiArCXUzMiByZW1fY2lyID0gc2xhX3BhcmVu dC0+cmVtX2NpcjsKPiArCj4gKwlpZiAoaXNfdXBkYXRlKQo+ICsJCXJlbV9jaXIgKz0gc2xhX2Np cjsKPiArCj4gKwlpZiAoc2xhX2luLT5jaXIgPiByZW1fY2lyIHx8IHNsYV9pbi0+cGlyID4gc2xh X3BhcmVudC0+cGlyKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGNhbl9ub2RlX2FmZm9yZF91cGRhdGUoKSAtIFZlcmlmaWVzIGlm IFNMQSBjYW4gYmUgdXBkYXRlZCB3aXRoIGlucHV0IGRhdGEKPiArICogQHNsYV9pbjogcG9pbnRl ciB0byB1c2VyIGlucHV0IGRhdGEgZm9yIGEgbmV3IFNMQQo+ICsgKiBAc2xhOiBwb2ludGVyIHRv IFNMQSBvYmplY3Qgc2VsZWN0ZWQgZm9yIHVwZGF0ZQo+ICsgKgo+ICsgKiBBbGdvcml0aG0gdmVy aWZpZXMgaWYgYSBuZXcgQ0lSIHZhbHVlIGlzIGJpZyBlbm91Z2ggdG8gc2F0aXNmeSBjdXJyZW50 bHkKPiArICogYXNzaWduZWQgY2hpbGQgU0xBcyBhbmQgaWYgUElSIGNhbiBiZSB1cGRhdGVkCj4g KyAqCj4gKyAqIFJldHVybjoKPiArICogKiB0cnVlCS0gU0xBIGNhbiBiZSB1cGRhdGVkCj4gKyAq ICogZmFsc2UJLSBTTEEgY2Fubm90IGJlIHVwZGF0ZWQKPiArICovCj4gK3N0YXRpYyBib29sIGNh bl9ub2RlX2FmZm9yZF91cGRhdGUoc3RydWN0IGFkZl9ybF9zbGFfaW5wdXRfZGF0YSAqc2xhX2lu LAo+ICsJCQkJICAgc3RydWN0IHJsX3NsYSAqc2xhKQo+ICt7Cj4gKwl1MzIgY2lyX2luX3VzZSA9 IHNsYS0+Y2lyIC0gc2xhLT5yZW1fY2lyOwo+ICsKPiArCS8qIG5ldyBDSVIgY2Fubm90IGJlIHNt YWxsZXIgdGhlbiBjdXJyZW50bHkgY29uc3VtZWQgdmFsdWUgKi8KPiArCWlmIChjaXJfaW5fdXNl ID4gc2xhX2luLT5jaXIpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qIFBJUiBvZiByb290 L2NsdXN0ZXIgY2Fubm90IGJlIHJlZHVjZWQgaW4gbm9kZSB3aXRoIGFzc2lnbmVkIGNoaWxkcmVu ICovCj4gKwlpZiAoc2xhX2luLT5waXIgPCBzbGEtPnBpciAmJiBzbGEtPnR5cGUgIT0gUkxfTEVB RiAmJiBjaXJfaW5fdXNlID4gMCkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIHRy dWU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGlzX2Vub3VnaF9idWRnZXQoc3RydWN0IGFkZl9y bCAqcmxfZGF0YSwgc3RydWN0IHJsX3NsYSAqc2xhLAo+ICsJCQkgICAgIHN0cnVjdCBhZGZfcmxf c2xhX2lucHV0X2RhdGEgKnNsYV9pbiwKPiArCQkJICAgICBib29sIGlzX3VwZGF0ZSkKPiArewo+ ICsJdTMyIG1heF92YWwgPSBybF9kYXRhLT5kZXZpY2VfZGF0YS0+c2NhbGVfcmVmOwo+ICsJc3Ry dWN0IHJsX3NsYSAqcGFyZW50ID0gc2xhLT5wYXJlbnQ7Cj4gKwlib29sIHJldCA9IHRydWU7Cj4g Kwo+ICsJaWYgKHNsYV9pbi0+Y2lyID4gbWF4X3ZhbCB8fCBzbGFfaW4tPnBpciA+IG1heF92YWwp Cj4gKwkJcmV0ID0gZmFsc2U7Cj4gKwo+ICsJc3dpdGNoIChzbGEtPnR5cGUpIHsKPiArCWNhc2Ug UkxfTEVBRjoKPiArCQlyZXQgJj0gY2FuX3BhcmVudF9hZmZvcmRfc2xhKHNsYV9pbiwgcGFyZW50 LCBzbGEtPmNpciwKPiArCQkJCQkJICBpc191cGRhdGUpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBS TF9DTFVTVEVSOgo+ICsJCXJldCAmPSBjYW5fcGFyZW50X2FmZm9yZF9zbGEoc2xhX2luLCBwYXJl bnQsIHNsYS0+Y2lyLAo+ICsJCQkJCQkgIGlzX3VwZGF0ZSk7Cj4gKwo+ICsJCWlmIChpc191cGRh dGUpCj4gKwkJCXJldCAmPSBjYW5fbm9kZV9hZmZvcmRfdXBkYXRlKHNsYV9pbiwgc2xhKTsKPiAr Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFJMX1JPT1Q6Cj4gKwkJaWYgKGlzX3VwZGF0ZSkKPiArCQkJ cmV0ICY9IGNhbl9ub2RlX2FmZm9yZF91cGRhdGUoc2xhX2luLCBzbGEpOwo+ICsKPiArCQlicmVh azsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0ID0gZmFsc2U7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdXBkYXRlX2J1ZGdldChzdHJ1 Y3Qgcmxfc2xhICpzbGEsIHUzMiBvbGRfY2lyLCBib29sIGlzX3VwZGF0ZSkKPiArewo+ICsJdTMy IG5ld19yZW07Cj4gKwo+ICsJc3dpdGNoIChzbGEtPnR5cGUpIHsKPiArCWNhc2UgUkxfTEVBRjoK PiArCQlpZiAoaXNfdXBkYXRlKQo+ICsJCQlzbGEtPnBhcmVudC0+cmVtX2NpciArPSBvbGRfY2ly Owo+ICsKPiArCQlzbGEtPnBhcmVudC0+cmVtX2NpciAtPSBzbGEtPmNpcjsKPiArCQlzbGEtPnJl bV9jaXIgPSAwOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBSTF9DTFVTVEVSOgo+ICsJCWlmIChpc191 cGRhdGUpIHsKPiArCQkJc2xhLT5wYXJlbnQtPnJlbV9jaXIgKz0gb2xkX2NpcjsKPiArCQkJbmV3 X3JlbSA9IHNsYS0+Y2lyIC0gKG9sZF9jaXIgLSBzbGEtPnJlbV9jaXIpOwo+ICsJCQlzbGEtPnJl bV9jaXIgPSBuZXdfcmVtOwoKR2V0IHJpZCBvZiBuZXdfcmVtIGFuZCBkaXJlY3RseSBhc3NpZ24u Cgo+ICsJCX0gZWxzZSB7Cj4gKwkJCXNsYS0+cmVtX2NpciA9IHNsYS0+Y2lyOwo+ICsJCX0KPiAr Cj4gKwkJc2xhLT5wYXJlbnQtPnJlbV9jaXIgLT0gc2xhLT5jaXI7Cj4gKwkJYnJlYWs7Cj4gKwlj YXNlIFJMX1JPT1Q6Cj4gKwkJaWYgKGlzX3VwZGF0ZSkgewo+ICsJCQluZXdfcmVtID0gc2xhLT5j aXIgLSAob2xkX2NpciAtIHNsYS0+cmVtX2Npcik7Cj4gKwkJCXNsYS0+cmVtX2NpciA9IG5ld19y ZW07CgpTYW1lIGhlcmUuIFlvdSBhdm9pZCBvbmUgbG9jYWwgdmFyaWFibGUgdGhhdCB3YXkuCgo+ ICsJCX0gZWxzZSB7Cj4gKwkJCXNsYS0+cmVtX2NpciA9IHNsYS0+Y2lyOwo+ICsJCX0KPiArCQli cmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBnZXRfbmV4dF9mcmVlX3NsYV9pZCgpIC0gZmluZHMgbmV4dCBmcmVlIElEIGluIHRoZSBTTEEg YXJyYXkKPiArICogQHJsX2RhdGE6IFBvaW50ZXIgdG8gcmF0ZWxpbWl0aW5nIGRhdGEgc3RydWN0 dXJlCj4gKyAqCj4gKyAqIFJldHVybjoKPiArICogKiAwIDogUkxfTk9ERVNfQ05UX01BWAktIGNv cnJlY3QgSUQKPiArICogKiAtRU5PU1BDCQkJLSBhbGwgU0xBIHNsb3RzIGFyZSBpbiB1c2UKPiAr ICovCj4gK3N0YXRpYyBpbnQgZ2V0X25leHRfZnJlZV9zbGFfaWQoc3RydWN0IGFkZl9ybCAqcmxf ZGF0YSkKPiArewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCXdoaWxlIChpIDwgUkxfTk9ERVNfQ05U X01BWCAmJiBybF9kYXRhLT5zbGFbaSsrXSkKPiArCQk7Cj4gKwo+ICsJaWYgKGkgPT0gUkxfTk9E RVNfQ05UX01BWCkKPiArCQlyZXR1cm4gLUVOT1NQQzsKPiArCj4gKwlyZXR1cm4gaSAtIDE7Cj4g K30KPiArCj4gKy8qKgo+ICsgKiBnZXRfbmV4dF9mcmVlX25vZGVfaWQoKSAtIGZpbmRzIG5leHQg ZnJlZSBJRCBpbiB0aGUgYXJyYXkgb2YgdGhhdCBub2RlIHR5cGUKPiArICogQHJsX2RhdGE6IFBv aW50ZXIgdG8gcmF0ZWxpbWl0aW5nIGRhdGEgc3RydWN0dXJlCj4gKyAqIEBzbGE6IFBvaW50ZXIg dG8gU0xBIG9iamVjdCBmb3Igd2hpY2ggdGhlIElEIGlzIHNlYXJjaGVkCj4gKyAqCj4gKyAqIFJl dHVybjoKPiArICogKiAwIDogUkxfW05PREVfVFlQRV1fTUFYCS0gY29ycmVjdCBJRAo+ICsgKiAq IC1FTk9TUEMJCQktIGFsbCBzbG90cyBvZiB0aGF0IHR5cGUgYXJlIGluIHVzZQo+ICsgKi8KPiAr c3RhdGljIGludCBnZXRfbmV4dF9mcmVlX25vZGVfaWQoc3RydWN0IGFkZl9ybCAqcmxfZGF0YSwg c3RydWN0IHJsX3NsYSAqc2xhKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRmX2h3X2RldmljZV9kYXRhICpo d19kZXZpY2UgPSBHRVRfSFdfREFUQShybF9kYXRhLT5hY2NlbF9kZXYpOwo+ICsJaW50IG1heF9p ZCwgaSwgc3RlcCwgcnBfcGVyX2xlYWY7Cj4gKwlzdHJ1Y3Qgcmxfc2xhICoqc2xhX2xpc3Q7Cj4g Kwo+ICsJcnBfcGVyX2xlYWYgPSBod19kZXZpY2UtPm51bV9iYW5rcyAvIGh3X2RldmljZS0+bnVt X2JhbmtzX3Blcl92ZjsKPiArCj4gKwkvKgo+ICsJICogU3RhdGljIG5vZGVzIG1hcHBpbmc6Cj4g KwkgKiByb290MCAtIGNsdXN0ZXJbMCw0LDgsMTJdIC0gbGVhZlswLTE1XQo+ICsJICogcm9vdDEg LSBjbHVzdGVyWzEsNSw5LDEzXSAtIGxlYWZbMTYtMzFdCj4gKwkgKiByb290MiAtIGNsdXN0ZXJb Miw2LDEwLDE0XSAtIGxlYWZbMzItNDddCj4gKwkgKi8KPiArCXN3aXRjaCAoc2xhLT50eXBlKSB7 Cj4gKwljYXNlIFJMX0xFQUY6Cj4gKwkJaSA9IHNsYS0+c3J2ICogcnBfcGVyX2xlYWY7Cj4gKwkJ c3RlcCA9IDE7Cj4gKwkJbWF4X2lkID0gaSArIHJwX3Blcl9sZWFmOwo+ICsJCXNsYV9saXN0ID0g cmxfZGF0YS0+bGVhZjsKPiArCQlicmVhazsKPiArCWNhc2UgUkxfQ0xVU1RFUjoKPiArCQlpID0g c2xhLT5zcnY7Cj4gKwkJc3RlcCA9IDQ7Cj4gKwkJbWF4X2lkID0gUkxfQ0xVU1RFUl9NQVg7Cj4g KwkJc2xhX2xpc3QgPSBybF9kYXRhLT5jbHVzdGVyOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBSTF9S T09UOgo+ICsJCXJldHVybiBzbGEtPnNydjsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJd2hpbGUgKGkgPCBtYXhfaWQgJiYgc2xhX2xpc3RbaV0pCj4gKwkJ aSArPSBzdGVwOwo+ICsKPiArCWlmIChpID49IG1heF9pZCkKPiArCQlyZXR1cm4gLUVOT1NQQzsK PiArCj4gKwlyZXR1cm4gaTsKPiArfQo+ICsKPiArdTMyIGFkZl9ybF9jYWxjdWxhdGVfc2xpY2Vf dG9rZW5zKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsIHUzMiBzbGFfdmFsLAo+ICsJ CQkJICBlbnVtIGFkZl9iYXNlX3NlcnZpY2VzIHN2Y190eXBlKQo+ICt7Cj4gKwlzdHJ1Y3QgYWRm X3JsX2h3X2RhdGEgKmRldmljZV9kYXRhID0gJmFjY2VsX2Rldi0+aHdfZGV2aWNlLT5ybF9kYXRh Owo+ICsJc3RydWN0IGFkZl9od19kZXZpY2VfZGF0YSAqaHdfZGF0YSA9IEdFVF9IV19EQVRBKGFj Y2VsX2Rldik7Cj4gKwl1NjQgYXZhaWxfc2xpY2VfY3ljbGVzLCBhbGxvY2F0ZWRfdG9rZW5zOwo+ ICsKPiArCWlmICghc2xhX3ZhbCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlhdmFpbF9zbGljZV9j eWNsZXMgPSBod19kYXRhLT5jbG9ja19mcmVxdWVuY3k7Cj4gKwo+ICsJc3dpdGNoIChzdmNfdHlw ZSkgewo+ICsJY2FzZSBBREZfU1ZDX0FTWU06Cj4gKwkJYXZhaWxfc2xpY2VfY3ljbGVzICo9IGRl dmljZV9kYXRhLT5zbGljZXMucGtlX2NudDsKPiArCQlicmVhazsKPiArCWNhc2UgQURGX1NWQ19T WU06Cj4gKwkJYXZhaWxfc2xpY2VfY3ljbGVzICo9IGRldmljZV9kYXRhLT5zbGljZXMuY3BoX2Nu dDsKPiArCQlicmVhazsKPiArCWNhc2UgQURGX1NWQ19EQzoKPiArCQlhdmFpbF9zbGljZV9jeWNs ZXMgKj0gZGV2aWNlX2RhdGEtPnNsaWNlcy5kY3ByX2NudDsKPiArCQlicmVhazsKPiArCWRlZmF1 bHQ6Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJZG9fZGl2KGF2YWlsX3NsaWNlX2N5Y2xlcywg ZGV2aWNlX2RhdGEtPnNjYW5faW50ZXJ2YWwpOwo+ICsJYWxsb2NhdGVkX3Rva2VucyA9IGF2YWls X3NsaWNlX2N5Y2xlcyAqIHNsYV92YWw7Cj4gKwlkb19kaXYoYWxsb2NhdGVkX3Rva2VucywgZGV2 aWNlX2RhdGEtPnNjYWxlX3JlZik7Cj4gKwo+ICsJcmV0dXJuIGFsbG9jYXRlZF90b2tlbnM7Cj4g K30KPiArCj4gK3UzMiBhZGZfcmxfY2FsY3VsYXRlX2FlX2N5Y2xlcyhzdHJ1Y3QgYWRmX2FjY2Vs X2RldiAqYWNjZWxfZGV2LCB1MzIgc2xhX3ZhbCwKPiArCQkJICAgICAgIGVudW0gYWRmX2Jhc2Vf c2VydmljZXMgc3ZjX3R5cGUpCj4gK3sKPiArCXN0cnVjdCBhZGZfcmxfaHdfZGF0YSAqZGV2aWNl X2RhdGEgPSAmYWNjZWxfZGV2LT5od19kZXZpY2UtPnJsX2RhdGE7Cj4gKwlzdHJ1Y3QgYWRmX2h3 X2RldmljZV9kYXRhICpod19kYXRhID0gR0VUX0hXX0RBVEEoYWNjZWxfZGV2KTsKPiArCXU2NCBh bGxvY2F0ZWRfYWVfY3ljbGVzLCBhdmFpbF9hZV9jeWNsZXM7Cj4gKwo+ICsJaWYgKCFzbGFfdmFs KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWF2YWlsX2FlX2N5Y2xlcyA9IGh3X2RhdGEtPmNsb2Nr X2ZyZXF1ZW5jeTsKPiArCWF2YWlsX2FlX2N5Y2xlcyAqPSBod19kYXRhLT5nZXRfbnVtX2Flcyho d19kYXRhKSAtIDE7Cj4gKwlkb19kaXYoYXZhaWxfYWVfY3ljbGVzLCBkZXZpY2VfZGF0YS0+c2Nh bl9pbnRlcnZhbCk7Cj4gKwo+ICsJc2xhX3ZhbCAqPSBkZXZpY2VfZGF0YS0+bWF4X3RwW3N2Y190 eXBlXTsKPiArCXNsYV92YWwgLz0gZGV2aWNlX2RhdGEtPnNjYWxlX3JlZjsKPiArCj4gKwlhbGxv Y2F0ZWRfYWVfY3ljbGVzID0gKHNsYV92YWwgKiBhdmFpbF9hZV9jeWNsZXMpOwo+ICsJZG9fZGl2 KGFsbG9jYXRlZF9hZV9jeWNsZXMsIGRldmljZV9kYXRhLT5tYXhfdHBbc3ZjX3R5cGVdKTsKPiAr Cj4gKwlyZXR1cm4gYWxsb2NhdGVkX2FlX2N5Y2xlczsKPiArfQo+ICsKPiArdTMyIGFkZl9ybF9j YWxjdWxhdGVfcGNpX2J3KHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsIHUzMiBzbGFf dmFsLAo+ICsJCQkgICAgZW51bSBhZGZfYmFzZV9zZXJ2aWNlcyBzdmNfdHlwZSwgYm9vbCBpc19i d19vdXQpCj4gK3sKPiArCXN0cnVjdCBhZGZfcmxfaHdfZGF0YSAqZGV2aWNlX2RhdGEgPSAmYWNj ZWxfZGV2LT5od19kZXZpY2UtPnJsX2RhdGE7Cj4gKwl1NjQgc2xhX3RvX2J5dGVzLCBhbGxvY2F0 ZWRfYncsIHNsYV9zY2FsZWQ7Cj4gKwo+ICsJaWYgKCFzbGFfdmFsKQo+ICsJCXJldHVybiAwOwo+ ICsKPiArCXNsYV90b19ieXRlcyA9IHNsYV92YWw7Cj4gKwlzbGFfdG9fYnl0ZXMgKj0gZGV2aWNl X2RhdGEtPm1heF90cFtzdmNfdHlwZV07Cj4gKwlkb19kaXYoc2xhX3RvX2J5dGVzLCBkZXZpY2Vf ZGF0YS0+c2NhbGVfcmVmKTsKPiArCj4gKwlzbGFfdG9fYnl0ZXMgKj0gKHN2Y190eXBlID09IEFE Rl9TVkNfQVNZTSkgPyBSTF9UT0tFTl9BU1lNX1NJWkUgOgo+ICsJCQkJCQkgICAgIEJZVEVTX1BF Ul9NQklUOwo+ICsJaWYgKHN2Y190eXBlID09IEFERl9TVkNfREMgJiYgaXNfYndfb3V0KQo+ICsJ CXNsYV90b19ieXRlcyAqPSBkZXZpY2VfZGF0YS0+c2xpY2VzLmRjcHJfY250IC0KPiArCQkJCWRl dmljZV9kYXRhLT5kY3ByX2NvcnJlY3Rpb247Cj4gKwo+ICsJc2xhX3NjYWxlZCA9IHNsYV90b19i eXRlcyAqIGRldmljZV9kYXRhLT5wY2llX3NjYWxlX211bDsKPiArCWRvX2RpdihzbGFfc2NhbGVk LCBkZXZpY2VfZGF0YS0+cGNpZV9zY2FsZV9kaXYpOwo+ICsJYWxsb2NhdGVkX2J3ID0gc2xhX3Nj YWxlZDsKPiArCWRvX2RpdihhbGxvY2F0ZWRfYncsIFJMX1RPS0VOX1BDSUVfU0laRSk7Cj4gKwlk b19kaXYoYWxsb2NhdGVkX2J3LCBkZXZpY2VfZGF0YS0+c2Nhbl9pbnRlcnZhbCk7Cj4gKwo+ICsJ cmV0dXJuIGFsbG9jYXRlZF9idzsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFkZF9uZXdfc2xhX2Vu dHJ5KCkgLSBjcmVhdGVzIGEgbmV3IFNMQSBvYmplY3QgYW5kIGZpbGxzIGl0IHdpdGggdXNlciBk YXRhCj4gKyAqIEBhY2NlbF9kZXY6IHBvaW50ZXIgdG8gYWNjZWxlcmF0aW9uIGRldmljZSBzdHJ1 Y3R1cmUKPiArICogQHNsYV9pbjogcG9pbnRlciB0byB1c2VyIGlucHV0IGRhdGEgZm9yIGEgbmV3 IFNMQQo+ICsgKiBAc2xhX291dDogUG9pbnRlciB0byB2YXJpYWJsZSB0aGF0IHdpbGwgY29udGFp biB0aGUgYWRkcmVzcyBvZiBhIG5ldwo+ICsgKgkgICAgIFNMQSBvYmplY3QgaWYgdGhlIG9wZXJh dGlvbiBzdWNjZWVkcwo+ICsgKgo+ICsgKiBSZXR1cm46Cj4gKyAqICogMAkJLSBvawo+ICsgKiAq IC1FTk9NRU0JLSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKPiArICogKiAtRUlOVkFMCS0gaW52 YWxpZCB1c2VyIGlucHV0Cj4gKyAqICogLUVOT1NQQwktIGFsbCBhdmFpbGFibGUgU0xBcyBhcmUg aW4gdXNlCj4gKyAqLwo+ICtzdGF0aWMgaW50IGFkZF9uZXdfc2xhX2VudHJ5KHN0cnVjdCBhZGZf YWNjZWxfZGV2ICphY2NlbF9kZXYsCj4gKwkJCSAgICAgc3RydWN0IGFkZl9ybF9zbGFfaW5wdXRf ZGF0YSAqc2xhX2luLAo+ICsJCQkgICAgIHN0cnVjdCBybF9zbGEgKipzbGFfb3V0KQo+ICt7Cj4g KwlzdHJ1Y3QgYWRmX3JsICpybF9kYXRhID0gYWNjZWxfZGV2LT5yYXRlX2xpbWl0aW5nOwo+ICsJ c3RydWN0IHJsX3NsYSAqc2xhOwo+ICsJaW50IHJldCA9IDA7Cj4gKwo+ICsJc2xhID0ga3phbGxv YyhzaXplb2YoKnNsYSksIEdGUF9LRVJORUwpOwoKV2h5IG5vdCB1c2UgZGV2bV9remFsbG9jKCk/ IFlvdSBoYXZlIGFjY2VzcyB0byB0aGUgZGV2aWNlIGhhbmRsZS4KCj4gKwlpZiAoIXNsYSkgewo+ ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byByZXRfZXJyOwo+ICsJfQo+ICsJKnNsYV9vdXQg PSBzbGE7Cj4gKwo+ICsJaWYgKCFpc19zZXJ2aWNlX2VuYWJsZWQoYWNjZWxfZGV2LCBzbGFfaW4t PnNydikpIHsKPiArCQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2VsX2RldiksCj4gKwkJCSAgICJQ cm92aWRlZCBzZXJ2aWNlIGlzIG5vdCBlbmFibGVkXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ ICsJCWdvdG8gcmV0X2VycjsKPiArCX0KPiArCj4gKwlzbGEtPnNydiA9IHNsYV9pbi0+c3J2Owo+ ICsJc2xhLT50eXBlID0gc2xhX2luLT50eXBlOwo+ICsJcmV0ID0gZ2V0X25leHRfZnJlZV9ub2Rl X2lkKHJsX2RhdGEsIHNsYSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9ub3RpY2UoJkdF VF9ERVYoYWNjZWxfZGV2KSwKPiArCQkJICAgIkV4Y2VlZGVkIG51bWJlciBvZiBhdmFpbGFibGUg bm9kZXMgZm9yIHRoYXQgc2VydmljZVxuIik7Cj4gKwkJZ290byByZXRfZXJyOwo+ICsJfQo+ICsJ c2xhLT5ub2RlX2lkID0gcmV0Owo+ICsKPiArCXJldCA9IGdldF9uZXh0X2ZyZWVfc2xhX2lkKHJs X2RhdGEpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2Vs X2RldiksCj4gKwkJCSAgICJBbGxvY2F0ZWQgbWF4aW11bSBTTEFzIG51bWJlclxuIik7Cj4gKwkJ Z290byByZXRfZXJyOwo+ICsJfQo+ICsJc2xhLT5zbGFfaWQgPSByZXQ7Cj4gKwo+ICsJc2xhLT5w YXJlbnQgPSBmaW5kX3BhcmVudChybF9kYXRhLCBzbGFfaW4pOwo+ICsJaWYgKCFzbGEtPnBhcmVu dCAmJiBzbGEtPnR5cGUgIT0gUkxfUk9PVCkgewo+ICsJCWlmIChzbGFfaW4tPnBhcmVudF9pZCAh PSBSTF9QQVJFTlRfREVGQVVMVF9JRCkKPiArCQkJZGV2X25vdGljZSgmR0VUX0RFVihhY2NlbF9k ZXYpLAo+ICsJCQkJICAgIlByb3ZpZGVkIHBhcmVudCBJRCBkb2VzIG5vdCBleGlzdCBvciBjYW5u b3QgYmUgcGFyZW50IGZvciB0aGlzIFNMQS4iKTsKPiArCQllbHNlCj4gKwkJCWRldl9ub3RpY2Uo JkdFVF9ERVYoYWNjZWxfZGV2KSwKPiArCQkJCSAgICJVbmFibGUgdG8gZmluZCBwYXJlbnQgbm9k ZSBmb3IgdGhpcyBzZXJ2aWNlLiBJcyBzZXJ2aWNlIGVuYWJsZWQ/Iik7Cj4gKwkJcmV0ID0gLUVJ TlZBTDsKPiArCQlnb3RvIHJldF9lcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKHNsYS0+dHlwZSA9PSBS TF9MRUFGKSB7Cj4gKwkJcmV0ID0gcHJlcGFyZV9ycF9pZHMoYWNjZWxfZGV2LCBzbGEsIHNsYV9p bi0+cnBfbWFzayk7Cj4gKwkJaWYgKCFzbGEtPnJpbmdfcGFpcnNfY250IHx8IHJldCkgewo+ICsJ CQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2VsX2RldiksCj4gKwkJCQkgICAiVW5hYmxlIHRvIGZp bmQgcmluZyBwYWlycyB0byBhc3NpZ24gdG8gdGhlIGxlYWYiKTsKPiArCQkJaWYgKCFyZXQpCj4g KwkJCQlyZXQgPSAtRUlOVkFMOwo+ICsKPiArCQkJZ290byByZXRfZXJyOwo+ICsJCX0KPiArCX0K PiArCj4gKwlyZXQgPSAwOwo+ICsKPiArcmV0X2VycjoKPiArCS8qIEFsbG9jYXRlZCBzbGEgd2ls bCBiZSBmcmVlZCBhdCB0aGUgYm90dG9tIG9mIGNhbGxpbmcgZnVuY3Rpb24gKi8KCkkgd291bGQg cmF0aGVyIHJlY29tbWVuZCB5b3UgcmVsZWFzZSB0aGUgc2xhIGhlcmUgaWYgdGhlIGZ1bmN0aW9u IGZhaWxzLgoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW5pdGlhbGl6 ZV9kZWZhdWx0X25vZGVzKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYpCj4gK3sKPiAr CXN0cnVjdCBhZGZfcmwgKnJsX2RhdGEgPSBhY2NlbF9kZXYtPnJhdGVfbGltaXRpbmc7Cj4gKwlz dHJ1Y3QgYWRmX3JsX2h3X2RhdGEgKmRldmljZV9kYXRhID0gcmxfZGF0YS0+ZGV2aWNlX2RhdGE7 Cj4gKwlzdHJ1Y3QgYWRmX3JsX3NsYV9pbnB1dF9kYXRhIHNsYV9pbiA9IHsgfTsKPiArCWludCBy ZXQgPSAwOwo+ICsJaW50IGk7Cj4gKwo+ICsJLyogSW5pdCByb290IGZvciBlYWNoIGVuYWJsZWQg c2VydmljZSAqLwo+ICsJc2xhX2luLnR5cGUgPSBSTF9ST09UOwo+ICsJc2xhX2luLnBhcmVudF9p ZCA9IFJMX1BBUkVOVF9ERUZBVUxUX0lEOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBREZfU1ZD X05PTkU7IGkrKykgewo+ICsJCWlmICghaXNfc2VydmljZV9lbmFibGVkKGFjY2VsX2RldiwgaSkp Cj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlzbGFfaW4uY2lyID0gZGV2aWNlX2RhdGEtPnNjYWxl X3JlZjsKPiArCQlzbGFfaW4ucGlyID0gc2xhX2luLmNpcjsKPiArCQlzbGFfaW4uc3J2ID0gaTsK PiArCj4gKwkJcmV0ID0gYWRmX3JsX2FkZF9zbGEoYWNjZWxfZGV2LCAmc2xhX2luKTsKPiArCQlp ZiAocmV0KQo+ICsJCQlnb3RvIGVycl9yZXQ7Cj4gKwl9Cj4gKwo+ICsJLyogSW5pdCBkZWZhdWx0 IGNsdXN0ZXIgZm9yIGVhY2ggcm9vdCAqLwo+ICsJc2xhX2luLnR5cGUgPSBSTF9DTFVTVEVSOwo+ ICsJZm9yIChpID0gMDsgaSA8IEFERl9TVkNfTk9ORTsgaSsrKSB7Cj4gKwkJaWYgKCFybF9kYXRh LT5yb290W2ldKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJc2xhX2luLmNpciA9IHJsX2RhdGEt PnJvb3RbaV0tPmNpcjsKPiArCQlzbGFfaW4ucGlyID0gc2xhX2luLmNpcjsKPiArCQlzbGFfaW4u c3J2ID0gcmxfZGF0YS0+cm9vdFtpXS0+c3J2Owo+ICsKPiArCQlyZXQgPSBhZGZfcmxfYWRkX3Ns YShhY2NlbF9kZXYsICZzbGFfaW4pOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX3JldDsK PiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9yZXQ6Cj4gKwlkZXZfbm90aWNlKCZH RVRfREVWKGFjY2VsX2RldiksCj4gKwkJICAgIkluaXRpYWxpemF0aW9uIG9mIGRlZmF1bHQgbm9k ZXMgZmFpbGVkXG4iKTsKCmRldl9ub3RpY2UoKSBoZXJlIGFuZCB5b3UgYWxzbyBkbyBkZXZfZXJy KCkgZm9yIHRoZSBleGFjdCBzYW1lIHJlYXNvbiBpbiAKdGhlIGNhbGxlZSAoYWRmX3JsX3N0YXJ0 KCkuKSBZb3UgY2FuIG1ha2UgdGhpcyBmdW5jdGlvbiBjbGVhbmVyIGJ5IApyZW1vdmluZyB0aGUg ZGV2X25vdGljZSBoZXJlLCBhbmQgZGlyZWN0bHkgcmV0dXJuaW5nIGluIGVycm9yIGNhc2VzIAp3 aXRob3V0IGdvdG8uCgo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xl YXJfc2xhKHN0cnVjdCBhZGZfcmwgKnJsX2RhdGEsIHN0cnVjdCBybF9zbGEgKnNsYSkKPiArewo+ ICsJYm9vbCAqcnBfaW5fdXNlID0gcmxfZGF0YS0+cnBfaW5fdXNlOwo+ICsJc3RydWN0IHJsX3Ns YSAqKnNsYV90eXBlX2FyciA9IE5VTEw7Cj4gKwlpbnQgaSwgc2xhX2lkLCBub2RlX2lkOwo+ICsJ dTMyIG9sZF9jaXI7Cj4gKwo+ICsJc2xhX2lkID0gc2xhLT5zbGFfaWQ7Cj4gKwlub2RlX2lkID0g c2xhLT5ub2RlX2lkOwo+ICsJb2xkX2NpciA9IHNsYS0+Y2lyOwo+ICsJc2xhLT5jaXIgPSAwOwo+ ICsJc2xhLT5waXIgPSAwOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBzbGEtPnJpbmdfcGFpcnNf Y250OyBpKyspCj4gKwkJcnBfaW5fdXNlW3NsYS0+cmluZ19wYWlyc19pZHNbaV1dID0gZmFsc2U7 Cj4gKwo+ICsJdXBkYXRlX2J1ZGdldChzbGEsIG9sZF9jaXIsIHRydWUpOwo+ICsJZ2V0X3NsYV9h cnJfb2ZfdHlwZShybF9kYXRhLCBzbGEtPnR5cGUsICZzbGFfdHlwZV9hcnIpOwo+ICsJYXNzaWdu X25vZGVfdG9fcGFyZW50KHJsX2RhdGEtPmFjY2VsX2Rldiwgc2xhLCB0cnVlKTsKPiArCWFkZl9y bF9zZW5kX2FkbWluX2RlbGV0ZV9tc2cocmxfZGF0YS0+YWNjZWxfZGV2LCBub2RlX2lkLCBzbGEt PnR5cGUpOwo+ICsJbWFya19ycHNfdXNhZ2Uoc2xhLCBybF9kYXRhLT5ycF9pbl91c2UsIGZhbHNl KTsKPiArCj4gKwlrZnJlZShzbGEpOwo+ICsJcmxfZGF0YS0+c2xhW3NsYV9pZF0gPSBOVUxMOwo+ ICsJc2xhX3R5cGVfYXJyW25vZGVfaWRdID0gTlVMTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFk ZF91cGRhdGVfc2xhKCkgLSBoYW5kbGVzIHRoZSBjcmVhdGlvbiBhbmQgdGhlIHVwZGF0ZSBvZiBh biBTTEEKPiArICogQGFjY2VsX2RldjogcG9pbnRlciB0byBhY2NlbGVyYXRpb24gZGV2aWNlIHN0 cnVjdHVyZQo+ICsgKiBAc2xhX2luOiBwb2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YSBmb3IgYSBu ZXcvdXBkYXRlZCBTTEEKPiArICogQGlzX3VwZGF0ZTogZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGlz IGlzIGFuIHVwZGF0ZSBvciBhbiBhZGQgb3BlcmF0aW9uCj4gKyAqCj4gKyAqIFJldHVybjoKPiAr ICogKiAwCQktIG9rCj4gKyAqICogLUVOT01FTQktIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAo+ ICsgKiAqIC1FSU5WQUwJLSB1c2VyIGlucHV0IGRhdGEgY2Fubm90IGJlIHVzZWQgdG8gY3JlYXRl IFNMQQo+ICsgKiAqIC1FTk9TUEMJLSBhbGwgYXZhaWxhYmxlIFNMQXMgYXJlIGluIHVzZQo+ICsg Ki8KPiArc3RhdGljIGludCBhZGRfdXBkYXRlX3NsYShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNj ZWxfZGV2LAo+ICsJCQkgIHN0cnVjdCBhZGZfcmxfc2xhX2lucHV0X2RhdGEgKnNsYV9pbiwgYm9v bCBpc191cGRhdGUpCj4gK3sKPiArCXN0cnVjdCBhZGZfcmwgKnJsX2RhdGEgPSBhY2NlbF9kZXYt PnJhdGVfbGltaXRpbmc7Cj4gKwlzdHJ1Y3Qgcmxfc2xhICoqc2xhX3R5cGVfYXJyID0gTlVMTDsK PiArCXN0cnVjdCBybF9zbGEgKnNsYSA9IE5VTEw7Cj4gKwl1MzIgb2xkX2NpciA9IDA7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCWlmICghc2xhX2luKSB7Cj4gKwkJZGV2X3dhcm4oJkdFVF9ERVYoYWNj ZWxfZGV2KSwKPiArCQkJICJTTEEgaW5wdXQgZGF0YSBwb2ludGVyIGlzIG1pc3NpbmdcbiIpOwo+ ICsJCXJldCA9IC1FRkFVTFQ7Cj4gKwkJZ290byByZXRfZXJyOwo+ICsJfQo+ICsKPiArCS8qIElu cHV0IHZhbGlkYXRpb24gKi8KPiArCXJldCA9IHZhbGlkYXRlX3VzZXJfaW5wdXQoYWNjZWxfZGV2 LCBzbGFfaW4sIGlzX3VwZGF0ZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gcmV0X2VycjsKPiAr Cj4gKwltdXRleF9sb2NrKCZybF9kYXRhLT5ybF9sb2NrKTsKPiArCj4gKwlpZiAoaXNfdXBkYXRl KSB7Cj4gKwkJcmV0ID0gdmFsaWRhdGVfc2xhX2lkKGFjY2VsX2Rldiwgc2xhX2luLT5zbGFfaWQp Owo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gcmV0X2VycjsKPiArCj4gKwkJc2xhID0gcmxfZGF0 YS0+c2xhW3NsYV9pbi0+c2xhX2lkXTsKPiArCQlvbGRfY2lyID0gc2xhLT5jaXI7Cj4gKwl9IGVs c2Ugewo+ICsJCXJldCA9IGFkZF9uZXdfc2xhX2VudHJ5KGFjY2VsX2Rldiwgc2xhX2luLCAmc2xh KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIHJldF9lcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKCFp c19lbm91Z2hfYnVkZ2V0KHJsX2RhdGEsIHNsYSwgc2xhX2luLCBpc191cGRhdGUpKSB7Cj4gKwkJ ZGV2X25vdGljZSgmR0VUX0RFVihhY2NlbF9kZXYpLAo+ICsJCQkgICAiSW5wdXQgdmFsdWUgZXhj ZWVkcyB0aGUgcmVtYWluaW5nIGJ1ZGdldCVzXG4iLAo+ICsJCQkgICBpc191cGRhdGUgPyAiIG9y IG1vcmUgYnVkZ2V0IGlzIGFscmVhZHkgaW4gdXNlIiA6ICIiKTsKPiArCQlyZXQgPSAtRUlOVkFM Owo+ICsJCWdvdG8gcmV0X2VycjsKPiArCX0KPiArCXNsYS0+Y2lyID0gc2xhX2luLT5jaXI7Cj4g KwlzbGEtPnBpciA9IHNsYV9pbi0+cGlyOwo+ICsKPiArCS8qIEFwcGx5IFNMQSAqLwo+ICsJYXNz aWduX25vZGVfdG9fcGFyZW50KGFjY2VsX2Rldiwgc2xhLCBmYWxzZSk7Cj4gKwlyZXQgPSBhZGZf cmxfc2VuZF9hZG1pbl9hZGRfdXBkYXRlX21zZyhhY2NlbF9kZXYsIHNsYSwgaXNfdXBkYXRlKTsK PiArCWlmIChyZXQpIHsKPiArCQlkZXZfbm90aWNlKCZHRVRfREVWKGFjY2VsX2RldiksCj4gKwkJ CSAgICJGYWlsZWQgdG8gYXBwbHkgYW4gU0xBXG4iKTsKPiArCQlnb3RvIHJldF9lcnI7Cj4gKwl9 Cj4gKwl1cGRhdGVfYnVkZ2V0KHNsYSwgb2xkX2NpciwgaXNfdXBkYXRlKTsKPiArCj4gKwlpZiAo IWlzX3VwZGF0ZSkgewo+ICsJCW1hcmtfcnBzX3VzYWdlKHNsYSwgcmxfZGF0YS0+cnBfaW5fdXNl LCB0cnVlKTsKPiArCQlnZXRfc2xhX2Fycl9vZl90eXBlKHJsX2RhdGEsIHNsYS0+dHlwZSwgJnNs YV90eXBlX2Fycik7Cj4gKwkJc2xhX3R5cGVfYXJyW3NsYS0+bm9kZV9pZF0gPSBzbGE7Cj4gKwkJ cmxfZGF0YS0+c2xhW3NsYS0+c2xhX2lkXSA9IHNsYTsKPiArCX0KPiArCj4gKwlzbGFfaW4tPnNs YV9pZCA9IHNsYS0+c2xhX2lkOwo+ICsJZ290byByZXRfb2s7Cj4gKwo+ICtyZXRfZXJyOgo+ICsJ aWYgKCFpc191cGRhdGUgJiYgc2xhKSB7Cj4gKwkJc2xhX2luLT5zbGFfaWQgPSAtMTsKPiArCQlr ZnJlZShzbGEpOwo+ICsJfQo+ICtyZXRfb2s6Cj4gKwltdXRleF91bmxvY2soJnJsX2RhdGEtPnJs X2xvY2spOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGFkZl9ybF9hZGRf c2xhKCkgLSBoYW5kbGVzIHRoZSBjcmVhdGlvbiBvZiBhbiBTTEEKPiArICogQGFjY2VsX2Rldjog cG9pbnRlciB0byBhY2NlbGVyYXRpb24gZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAc2xhX2luOiBw b2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YSByZXF1aXJlZCB0byBhZGQgYW4gU0xBCj4gKyAqCj4g KyAqIFJldHVybjoKPiArICogKiAwCQktIG9rCj4gKyAqICogLUVOT01FTQktIG1lbW9yeSBhbGxv Y2F0aW9uIGZhaWxlZAo+ICsgKiAqIC1FSU5WQUwJLSBpbnZhbGlkIHVzZXIgaW5wdXQKPiArICog KiAtRU5PU1BDCS0gYWxsIGF2YWlsYWJsZSBTTEFzIGFyZSBpbiB1c2UKPiArICovCj4gK2ludCBh ZGZfcmxfYWRkX3NsYShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LAo+ICsJCSAgIHN0 cnVjdCBhZGZfcmxfc2xhX2lucHV0X2RhdGEgKnNsYV9pbikKPiArewo+ICsJcmV0dXJuIGFkZF91 cGRhdGVfc2xhKGFjY2VsX2Rldiwgc2xhX2luLCBmYWxzZSk7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBhZGZfcmxfdXBkYXRlX3NsYSgpIC0gaGFuZGxlcyB0aGUgdXBkYXRlIG9mIGFuIFNMQQo+ICsg KiBAYWNjZWxfZGV2OiBwb2ludGVyIHRvIGFjY2VsZXJhdGlvbiBkZXZpY2Ugc3RydWN0dXJlCj4g KyAqIEBzbGFfaW46IHBvaW50ZXIgdG8gdXNlciBpbnB1dCBkYXRhIHJlcXVpcmVkIHRvIHVwZGF0 ZSBhbiBTTEEKPiArICoKPiArICogUmV0dXJuOgo+ICsgKiAqIDAJCS0gb2sKPiArICogKiAtRUlO VkFMCS0gdXNlciBpbnB1dCBkYXRhIGNhbm5vdCBiZSB1c2VkIHRvIHVwZGF0ZSBTTEEKPiArICov Cj4gK2ludCBhZGZfcmxfdXBkYXRlX3NsYShzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2 LAo+ICsJCSAgICAgIHN0cnVjdCBhZGZfcmxfc2xhX2lucHV0X2RhdGEgKnNsYV9pbikKPiArewo+ ICsJcmV0dXJuIGFkZF91cGRhdGVfc2xhKGFjY2VsX2Rldiwgc2xhX2luLCB0cnVlKTsKPiArfQo+ ICsKPiArLyoqCj4gKyAqIGFkZl9ybF9nZXRfc2xhKCkgLSByZXR1cm5zIGFuIGV4aXN0aW5nIFNM QSBkYXRhCj4gKyAqIEBhY2NlbF9kZXY6IHBvaW50ZXIgdG8gYWNjZWxlcmF0aW9uIGRldmljZSBz dHJ1Y3R1cmUKPiArICogQHNsYV9pbjogcG9pbnRlciB0byB1c2VyIGRhdGEgd2hlcmUgU0xBIGlu Zm8gd2lsbCBiZSBzdG9yZWQKPiArICoKPiArICogVGhlIHNsYV9pZCBmb3Igd2hpY2ggZGF0YSBh cmUgcmVxdWVzdGVkIHNob3VsZCBiZSBzZXQgaW4gc2xhX2lkIHN0cnVjdHVyZQo+ICsgKgo+ICsg KiBSZXR1cm46Cj4gKyAqICogMAkJLSBvawo+ICsgKiAqIC1FSU5WQUwJLSBwcm92aWRlZCBzbGFf aWQgZG9lcyBub3QgZXhpc3QKPiArICovCj4gK2ludCBhZGZfcmxfZ2V0X3NsYShzdHJ1Y3QgYWRm X2FjY2VsX2RldiAqYWNjZWxfZGV2LAo+ICsJCSAgIHN0cnVjdCBhZGZfcmxfc2xhX2lucHV0X2Rh dGEgKnNsYV9pbikKPiArewo+ICsJc3RydWN0IHJsX3NsYSAqc2xhOwo+ICsJaW50IHJldCwgaTsK PiArCj4gKwlyZXQgPSB2YWxpZGF0ZV9zbGFfaWQoYWNjZWxfZGV2LCBzbGFfaW4tPnNsYV9pZCk7 Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc2xhID0gYWNjZWxfZGV2LT5y YXRlX2xpbWl0aW5nLT5zbGFbc2xhX2luLT5zbGFfaWRdOwo+ICsJc2xhX2luLT50eXBlID0gc2xh LT50eXBlOwo+ICsJc2xhX2luLT5zcnYgPSBzbGEtPnNydjsKPiArCXNsYV9pbi0+Y2lyID0gc2xh LT5jaXI7Cj4gKwlzbGFfaW4tPnBpciA9IHNsYS0+cGlyOwo+ICsJc2xhX2luLT5ycF9tYXNrID0g MFU7Cj4gKwlpZiAoc2xhLT5wYXJlbnQpCj4gKwkJc2xhX2luLT5wYXJlbnRfaWQgPSBzbGEtPnBh cmVudC0+c2xhX2lkOwo+ICsJZWxzZQo+ICsJCXNsYV9pbi0+cGFyZW50X2lkID0gUkxfUEFSRU5U X0RFRkFVTFRfSUQ7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHNsYS0+cmluZ19wYWlyc19jbnQ7 IGkrKykKPiArCQlzbGFfaW4tPnJwX21hc2sgfD0gQklUKHNsYS0+cmluZ19wYWlyc19pZHNbaV0p Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogYWRmX3JsX2dldF9jYXBh YmlsaXR5X3JlbWFpbmluZygpIC0gcmV0dXJucyB0aGUgcmVtYWluaW5nIFNMQSB2YWx1ZSAoQ0lS KSBmb3IKPiArICoJCQkJICAgICAgIHNlbGVjdGVkIHNlcnZpY2Ugb3IgcHJvdmlkZWQgc2xhX2lk Cj4gKyAqIEBhY2NlbF9kZXY6IHBvaW50ZXIgdG8gYWNjZWxlcmF0aW9uIGRldmljZSBzdHJ1Y3R1 cmUKPiArICogQHNydjogc2VydmljZSBJRCBmb3Igd2hpY2ggY2FwYWJpbGl0eSBpcyByZXF1ZXN0 ZWQKPiArICogQHNsYV9pZDogSUQgb2YgdGhlIGNsdXN0ZXIgb3Igcm9vdCB0byB3aGljaCB3ZSB3 YW50IGFzc2lnbiBhIG5ldyBTTEEKPiArICoKPiArICogQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIFNM QSBpZCBpcyB2YWxpZC4gSWYgaXQgaXMgYW5kIHRoZSBzZXJ2aWNlIG1hdGNoZXMKPiArICogdGhl IHJlcXVlc3RlZCBzZXJ2aWNlIGFuZCB0aGUgdHlwZSBpcyBjbHVzdGVyIG9yIHJvb3QsIHJldHVy biB0aGUgcmVtYWluaW5nCj4gKyAqIGNhcGFiaWxpdHkuCj4gKyAqIElmIHRoZSBwcm92aWRlZCBJ RCBkb2VzIG5vdCBtYXRjaCB0aGUgc2VydmljZSBvciB0eXBlLCByZXR1cm4gdGhlIHJlbWFpbmlu Zwo+ICsgKiBjYXBhY2l0eSBvZiB0aGUgZGVmYXVsdCBjbHVzdGVyIGZvciB0aGF0IHNlcnZpY2Uu Cj4gKyAqCj4gKyAqIFJldHVybjoKPiArICogKiBQb3NpdGl2ZSB2YWx1ZQktIGNvcnJlY3QgcmVt YWluaW5nIHZhbHVlCj4gKyAqICogLUVJTlZBTAkJLSBhbGdvcml0aG0gY2Fubm90IGZpbmQgYSBy ZW1haW5pbmcgdmFsdWUgZm9yIHByb3ZpZGVkIGRhdGEKPiArICovCj4gK2ludCBhZGZfcmxfZ2V0 X2NhcGFiaWxpdHlfcmVtYWluaW5nKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsCj4g KwkJCQkgICAgZW51bSBhZGZfYmFzZV9zZXJ2aWNlcyBzcnYsIGludCBzbGFfaWQpCj4gK3sKPiAr CXN0cnVjdCBhZGZfcmwgKnJsX2RhdGEgPSBhY2NlbF9kZXYtPnJhdGVfbGltaXRpbmc7Cj4gKwlz dHJ1Y3Qgcmxfc2xhICpzbGEgPSBOVUxMOwo+ICsJaW50IGk7Cj4gKwo+ICsJaWYgKHNydiA+PSBB REZfU1ZDX05PTkUpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKHNsYV9pZCA+IFJM X1NMQV9FTVBUWV9JRCAmJiAhdmFsaWRhdGVfc2xhX2lkKGFjY2VsX2Rldiwgc2xhX2lkKSkgewo+ ICsJCXNsYSA9IHJsX2RhdGEtPnNsYVtzbGFfaWRdOwo+ICsKPiArCQlpZiAoc2xhLT5zcnYgPT0g c3J2ICYmIHNsYS0+dHlwZSA8PSBSTF9DTFVTVEVSKQo+ICsJCQlnb3RvIHJldF9vazsKPiArCX0K PiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgUkxfQ0xVU1RFUl9NQVg7IGkrKykgewo+ICsJCWlmICgh cmxfZGF0YS0+Y2x1c3RlcltpXSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWlmIChybF9kYXRh LT5jbHVzdGVyW2ldLT5zcnYgPT0gc3J2KSB7Cj4gKwkJCXNsYSA9IHJsX2RhdGEtPmNsdXN0ZXJb aV07Cj4gKwkJCWdvdG8gcmV0X29rOwo+ICsJCX0KPiArCX0KPiArCj4gKwlyZXR1cm4gLUVJTlZB TDsKPiArcmV0X29rOgo+ICsJcmV0dXJuIHNsYS0+cmVtX2NpcjsKPiArfQo+ICsKPiArLyoqCj4g KyAqIGFkZl9ybF9yZW1vdmVfc2xhKCkgLSByZW1vdmVzIHByb3ZpZGVkIHNsYV9pZAo+ICsgKiBA YWNjZWxfZGV2OiBwb2ludGVyIHRvIGFjY2VsZXJhdGlvbiBkZXZpY2Ugc3RydWN0dXJlCj4gKyAq IEBzbGFfaWQ6IElEIG9mIHRoZSBjbHVzdGVyIG9yIHJvb3QgdG8gd2hpY2ggd2Ugd2FudCBhc3Np Z24gYW4gbmV3IFNMQQo+ICsgKgo+ICsgKiBSZXR1cm46Cj4gKyAqICogMAkJLSBvawo+ICsgKiAq IC1FSU5WQUwJLSB3cm9uZyBzbGFfaWQgb3IgaXQgc3RpbGwgaGF2ZSBhc3NpZ25lZCBjaGlsZHJl bgo+ICsgKi8KPiAraW50IGFkZl9ybF9yZW1vdmVfc2xhKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICph Y2NlbF9kZXYsIHUzMiBzbGFfaWQpCj4gK3sKPiArCXN0cnVjdCBhZGZfcmwgKnJsX2RhdGEgPSBh Y2NlbF9kZXYtPnJhdGVfbGltaXRpbmc7Cj4gKwlzdHJ1Y3Qgcmxfc2xhICpzbGE7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IHZhbGlkYXRlX3NsYV9pZChhY2NlbF9kZXYsIHNsYV9pZCk7Cj4g KwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJc2xhID0gcmxfZGF0YS0+c2xhW3Ns YV9pZF07Cj4gKwo+ICsJaWYgKHNsYS0+dHlwZSA8IFJMX0xFQUYgJiYgc2xhLT5yZW1fY2lyICE9 IHNsYS0+Y2lyKSB7Cj4gKwkJZGV2X25vdGljZSgmR0VUX0RFVihhY2NlbF9kZXYpLAo+ICsJCQkg ICAiVG8gcmVtb3ZlIHBhcmVudCBTTEEgYWxsIGl0cyBjaGlsZHJlbiBtdXN0IGJlIHJlbW92ZWQg Zmlyc3QiKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KCk11dGV4IGlzIG5vdCBwcm90ZWN0 aW5nIHRoZSBhYm92ZSBwb3J0aW9uIG9mIGNvZGUsIHdoaWNoIG1lYW5zIHlvdSBjYW4gCmNhbGwg Y2xlYXJfc2xhKCkgd2l0aCBpZGVudGljYWwgcG9pbnRlciB2YWx1ZSBtdWx0aXBsZSB0aW1lcy4K Cj4gKwo+ICsJbXV0ZXhfbG9jaygmcmxfZGF0YS0+cmxfbG9jayk7Cj4gKwljbGVhcl9zbGEocmxf ZGF0YSwgc2xhKTsKPiArCW11dGV4X3VubG9jaygmcmxfZGF0YS0+cmxfbG9jayk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBhZGZfcmxfcmVtb3ZlX3NsYV9hbGwoKSAt IHJlbW92ZXMgYWxsIFNMQXMgZnJvbSBkZXZpY2UKPiArICogQGFjY2VsX2RldjogcG9pbnRlciB0 byBhY2NlbGVyYXRpb24gZGV2aWNlIHN0cnVjdHVyZQo+ICsgKiBAaW5jbF9kZWZhdWx0OiBzZXQg dG8gdHJ1ZSBpZiBkZWZhdWx0IFNMQXMgYWxzbyBzaG91bGQgYmUgcmVtb3ZlZAo+ICsgKi8KPiAr dm9pZCBhZGZfcmxfcmVtb3ZlX3NsYV9hbGwoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rl diwgYm9vbCBpbmNsX2RlZmF1bHQpCj4gK3sKPiArCXN0cnVjdCBhZGZfcmwgKnJsX2RhdGEgPSBh Y2NlbF9kZXYtPnJhdGVfbGltaXRpbmc7Cj4gKwlpbnQgZW5kX3R5cGUgPSBpbmNsX2RlZmF1bHQg PyBSTF9ST09UIDogUkxfTEVBRjsKPiArCXN0cnVjdCBybF9zbGEgKipzbGFfdHlwZV9hcnIgPSBO VUxMOwo+ICsJdTMyIG1heF9pZDsKPiArCWludCBpLCBqOwo+ICsKPiArCW11dGV4X2xvY2soJnJs X2RhdGEtPnJsX2xvY2spOwo+ICsKPiArCS8qIFVucmVnaXN0ZXIgYW5kIHJlbW92ZSBhbGwgU0xB cyAqLwo+ICsJZm9yIChqID0gUkxfTEVBRjsgaiA+PSBlbmRfdHlwZTsgai0tKSB7Cj4gKwkJbWF4 X2lkID0gZ2V0X3NsYV9hcnJfb2ZfdHlwZShybF9kYXRhLCBqLCAmc2xhX3R5cGVfYXJyKTsKPiAr Cj4gKwkJZm9yIChpID0gMDsgaSA8IG1heF9pZDsgaSsrKSB7Cj4gKwkJCWlmICghc2xhX3R5cGVf YXJyW2ldKQo+ICsJCQkJY29udGludWU7Cj4gKwo+ICsJCQljbGVhcl9zbGEocmxfZGF0YSwgc2xh X3R5cGVfYXJyW2ldKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZybF9kYXRh LT5ybF9sb2NrKTsKPiArfQo+ICsKPiAraW50IGFkZl9ybF9pbml0KHN0cnVjdCBhZGZfYWNjZWxf ZGV2ICphY2NlbF9kZXYpCj4gK3sKPiArCXN0cnVjdCBhZGZfaHdfZGV2aWNlX2RhdGEgKmh3X2Rh dGEgPSBHRVRfSFdfREFUQShhY2NlbF9kZXYpOwo+ICsJc3RydWN0IGFkZl9ybF9od19kYXRhICpy bF9od19kYXRhID0gJmh3X2RhdGEtPnJsX2RhdGE7Cj4gKwlzdHJ1Y3QgYWRmX3JsICpybDsKPiAr CWludCByZXQgPSAwOwo+ICsKPiArCS8qIFZhbGlkYXRlIGRldmljZSBwYXJhbWV0ZXJzICovCj4g KwlpZiAoUkxfVkFMSURBVEVfTk9OX1pFUk8ocmxfaHdfZGF0YS0+bWF4X3RwW0FERl9TVkNfQVNZ TV0pIHx8Cj4gKwkgICAgUkxfVkFMSURBVEVfTk9OX1pFUk8ocmxfaHdfZGF0YS0+bWF4X3RwW0FE Rl9TVkNfU1lNXSkgfHwKPiArCSAgICBSTF9WQUxJREFURV9OT05fWkVSTyhybF9od19kYXRhLT5t YXhfdHBbQURGX1NWQ19EQ10pIHx8Cj4gKwkgICAgUkxfVkFMSURBVEVfTk9OX1pFUk8ocmxfaHdf ZGF0YS0+c2Nhbl9pbnRlcnZhbCkgfHwKPiArCSAgICBSTF9WQUxJREFURV9OT05fWkVSTyhybF9o d19kYXRhLT5wY2llX3NjYWxlX2RpdikgfHwKPiArCSAgICBSTF9WQUxJREFURV9OT05fWkVSTyhy bF9od19kYXRhLT5wY2llX3NjYWxlX211bCkgfHwKPiArCSAgICBSTF9WQUxJREFURV9OT05fWkVS TyhybF9od19kYXRhLT5zY2FsZV9yZWYpKSB7Cj4gKwkJcmV0ID0gLUVPUE5PVFNVUFA7Cj4gKwkJ Z290byBlcnJfcmV0Owo+ICsJfQo+ICsKPiArCXJsID0ga3phbGxvYyhzaXplb2YoKnJsKSwgR0ZQ X0tFUk5FTCk7CgpkZXZtX2t6YWxsb2MoKT8KCj4gKwlpZiAoIXJsKSB7Cj4gKwkJcmV0ID0gLUVO T01FTTsKPiArCQlnb3RvIGVycl9yZXQ7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfaW5pdCgmcmwtPnJs X2xvY2spOwo+ICsJcmwtPmRldmljZV9kYXRhID0gJmFjY2VsX2Rldi0+aHdfZGV2aWNlLT5ybF9k YXRhOwo+ICsJcmwtPmFjY2VsX2RldiA9IGFjY2VsX2RldjsKPiArCWFjY2VsX2Rldi0+cmF0ZV9s aW1pdGluZyA9IHJsOwo+ICsKPiArZXJyX3JldDoKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4g K2ludCBhZGZfcmxfc3RhcnQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldikKPiArewo+ ICsJc3RydWN0IGFkZl9ybF9od19kYXRhICpybF9od19kYXRhID0gJkdFVF9IV19EQVRBKGFjY2Vs X2RldiktPnJsX2RhdGE7Cj4gKwl2b2lkIF9faW9tZW0gKnBtaXNjX2FkZHIgPSBhZGZfZ2V0X3Bt aXNjX2Jhc2UoYWNjZWxfZGV2KTsKPiArCXUxNiBmd19jYXBzID0gIEdFVF9IV19EQVRBKGFjY2Vs X2RldiktPmZ3X2NhcGFiaWxpdGllczsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFhY2NlbF9k ZXYtPnJhdGVfbGltaXRpbmcpIHsKPiArCQlyZXQgPSAtRU9QTk9UU1VQUDsKPiArCQlnb3RvIHJl dF9lcnI7Cj4gKwl9Cj4gKwo+ICsJaWYgKChmd19jYXBzICYgUkxfQ0FQQUJJTElUWV9NQVNLKSAh PSBSTF9DQVBBQklMSVRZX1ZBTFVFKSB7Cj4gKwkJZGV2X2luZm8oJkdFVF9ERVYoYWNjZWxfZGV2 KSwgIm5vdCBzdXBwb3J0ZWRcbiIpOwo+ICsJCXJldCA9IC1FT1BOT1RTVVBQOwo+ICsJCWdvdG8g cmV0X2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJQURGX0NTUl9XUihwbWlzY19hZGRyLCBybF9od19kYXRh LT5wY2lpbl90Yl9vZmZzZXQsCj4gKwkJICAgUkxfVE9LRU5fR1JBTlVMQVJJVFlfUENJRUlOX0JV Q0tFVCk7Cj4gKwlBREZfQ1NSX1dSKHBtaXNjX2FkZHIsIHJsX2h3X2RhdGEtPnBjaW91dF90Yl9v ZmZzZXQsCj4gKwkJICAgUkxfVE9LRU5fR1JBTlVMQVJJVFlfUENJRU9VVF9CVUNLRVQpOwo+ICsK PiArCXJldCA9IGFkZl9ybF9zZW5kX2FkbWluX2luaXRfbXNnKGFjY2VsX2RldiwgJnJsX2h3X2Rh dGEtPnNsaWNlcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycigmR0VUX0RFVihhY2NlbF9k ZXYpLCAiaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKPiArCQlnb3RvIHJldF9mcmVlOwo+ICsJ fQo+ICsKPiArCXJldCA9IGluaXRpYWxpemVfZGVmYXVsdF9ub2RlcyhhY2NlbF9kZXYpOwo+ICsJ aWYgKHJldCkgewo+ICsJCWRldl9lcnIoJkdFVF9ERVYoYWNjZWxfZGV2KSwKPiArCQkJImZhaWxl ZCB0byBpbml0aWFsaXplIGRlZmF1bHQgU0xBc1xuIik7Cj4gKwkJZ290byByZXRfc2xhX3JtOwo+ ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArcmV0X3NsYV9ybToKPiArCWFkZl9ybF9yZW1v dmVfc2xhX2FsbChhY2NlbF9kZXYsIHRydWUpOwo+ICtyZXRfZnJlZToKPiArCWtmcmVlKGFjY2Vs X2Rldi0+cmF0ZV9saW1pdGluZyk7Cj4gKwlhY2NlbF9kZXYtPnJhdGVfbGltaXRpbmcgPSBOVUxM Owo+ICtyZXRfZXJyOgo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArdm9pZCBhZGZfcmxfc3Rv cChzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2KQo+ICt7Cj4gKwlpZiAoIWFjY2VsX2Rl di0+cmF0ZV9saW1pdGluZykKPiArCQlyZXR1cm47Cj4gKwo+ICsJYWRmX3JsX3JlbW92ZV9zbGFf YWxsKGFjY2VsX2RldiwgdHJ1ZSk7Cj4gK30KPiArCj4gK3ZvaWQgYWRmX3JsX2V4aXQoc3RydWN0 IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldikKPiArewo+ICsJaWYgKCFhY2NlbF9kZXYtPnJhdGVf bGltaXRpbmcpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWtmcmVlKGFjY2VsX2Rldi0+cmF0ZV9saW1p dGluZyk7Cj4gKwlhY2NlbF9kZXYtPnJhdGVfbGltaXRpbmcgPSBOVUxMOwo+ICt9Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9ybC5oIGIvZHJp dmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vYWRmX3JsLmgKPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMWNjYjY2MTNjOTJlCj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9ybC5oCj4g QEAgLTAsMCArMSwxNjkgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seSAqLwo+ICsvKiBDb3B5cmlnaHQoYykgMjAyMyBJbnRlbCBDb3Jwb3JhdGlvbiAqLwo+ICsK PiArI2lmbmRlZiBBREZfUkxfSF8KPiArI2RlZmluZSBBREZfUkxfSF8KPiArCj4gKyNpbmNsdWRl IDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiArCj4gK3N0cnVj dCBhZGZfYWNjZWxfZGV2Owo+ICsKPiArI2RlZmluZSBSTF9ST09UX01BWAkJNAo+ICsjZGVmaW5l IFJMX0NMVVNURVJfTUFYCQkxNgo+ICsjZGVmaW5lIFJMX0xFQUZfTUFYCQk2NAo+ICsjZGVmaW5l IFJMX05PREVTX0NOVF9NQVgJKFJMX1JPT1RfTUFYICsgUkxfQ0xVU1RFUl9NQVggKyBSTF9MRUFG X01BWCkKPiArI2RlZmluZSBSTF9SUF9DTlRfUEVSX0xFQUZfTUFYCTRVCj4gKyNkZWZpbmUgUkxf UlBfQ05UX01BWAkJNjQKPiArI2RlZmluZSBSTF9TTEFfRU1QVFlfSUQJCS0xCj4gKyNkZWZpbmUg UkxfUEFSRU5UX0RFRkFVTFRfSUQJLTEKPiArCj4gK2VudW0gcmxfbm9kZV90eXBlIHsKPiArCVJM X1JPT1QsCj4gKwlSTF9DTFVTVEVSLAo+ICsJUkxfTEVBRiwKPiArfTsKPiArCj4gK2VudW0gYWRm X2Jhc2Vfc2VydmljZXMgewo+ICsJQURGX1NWQ19BU1lNID0gMCwKPiArCUFERl9TVkNfU1lNLAo+ ICsJQURGX1NWQ19EQywKPiArCUFERl9TVkNfTk9ORSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBz dHJ1Y3QgYWRmX3JsX3NsYV9pbnB1dF9kYXRhIC0gcmF0ZWxpbWl0aW5nIHVzZXIgaW5wdXQgZGF0 YSBzdHJ1Y3R1cmUKPiArICogQHJwX21hc2s6IDY0IGJpdCBiaXRtYXNrIG9mIHJpbmcgcGFpciBJ RHMgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCB0byBTTEEuCj4gKyAqCSAgICAgRWcuIDB4NSAtPiBS UDAgYW5kIFJQMiBhc3NpZ25lZDsgMHhBMDA1IC0+IFJQMCwyLDEzLDE1IGFzc2lnbmVkLgo+ICsg KiBAc2xhX2lkOiBJRCBvZiBjdXJyZW50IFNMQSBmb3Igb3BlcmF0aW9ucyB1cGRhdGUsIHJtLCBn ZXQuIEZvciB0aGUgYWRkCj4gKyAqCSAgICBvcGVyYXRpb24sIHRoaXMgZmllbGQgd2lsbCBiZSB1 cGRhdGVkIHdpdGggdGhlIElEIG9mIHRoZSBuZXdseQo+ICsgKgkgICAgYWRkZWQgU0xBCj4gKyAq IEBwYXJlbnRfaWQ6IElEIG9mIHRoZSBTTEEgdG8gd2hpY2ggdGhlIGN1cnJlbnQgb25lIHNob3Vs ZCBiZSBhc3NpZ25lZC4KPiArICoJICAgICAgIFNldCB0byAtMSB0byByZWZlciB0byB0aGUgZGVm YXVsdCBwYXJlbnQuCj4gKyAqIEBjaXI6IENvbW1pdHRlZCBpbmZvcm1hdGlvbiByYXRlLiBSYXRl IGd1YXJhbnRlZWQgdG8gYmUgYWNoaWV2ZWQuIElucHV0IHZhbHVlCj4gKyAqCSBpcyBleHByZXNz ZWQgaW4gcGVybWlsbGUgc2NhbGUsIGkuZS4gMTAwMCByZWZlcnMgdG8gdGhlIG1heGltdW0KPiAr ICoJIGRldmljZSB0aHJvdWdocHV0IGZvciBhIHNlbGVjdGVkIHNlcnZpY2UuCj4gKyAqIEBwaXI6 IFBlYWsgaW5mb3JtYXRpb24gcmF0ZS4gTWF4aW11bSByYXRlIGF2YWlsYWJsZSB0aGF0IHRoZSBT TEEgY2FuIGFjaGlldmUuCj4gKyAqCSBJbnB1dCB2YWx1ZSBpcyBleHByZXNzZWQgaW4gcGVybWls bGUgc2NhbGUsIGkuZS4gMTAwMCByZWZlcnMgdG8KPiArICoJIHRoZSBtYXhpbXVtIGRldmljZSB0 aHJvdWdocHV0IGZvciBhIHNlbGVjdGVkIHNlcnZpY2UuCj4gKyAqIEB0eXBlOiBTTEEgdHlwZTog cm9vdCwgY2x1c3Rlciwgbm9kZQo+ICsgKiBAc3J2OiBTZXJ2aWNlIGFzc29jaWF0ZWQgdG8gdGhl IFNMQTogYXN5bSwgc3ltIGRjLgo+ICsgKgo+ICsgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRv IHBlcmZvcm0gb3BlcmF0aW9ucyBvbiBhbiBTTEEuCj4gKyAqIERlcGVuZGluZyBvbiB0aGUgb3Bl cmF0aW9uLCBzb21lIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLgo+ICsgKiBUaGUgZm9s bG93aW5nIGxpc3QgcmVwb3J0cyB3aGljaCBwYXJhbWV0ZXJzIHNob3VsZCBiZSBzZXQgZm9yIGVh Y2ggb3BlcmF0aW9uLgo+ICsgKgktIGFkZDogYWxsIGV4Y2VwdCBzbGFfaWQKPiArICoJLSB1cGRh dGU6IGNpciwgcGlyLCBzbGFfaWQKPiArICoJLSBybTogc2xhX2lkCj4gKyAqCS0gcm1fYWxsOiAt Cj4gKyAqCS0gZ2V0OiBzbGFfaWQKPiArICoJLSBnZXRfY2FwYWJpbGl0eV9yZW06IHNydiwgc2xh X2lkCj4gKyAqLwo+ICtzdHJ1Y3QgYWRmX3JsX3NsYV9pbnB1dF9kYXRhIHsKPiArCXU2NCBycF9t YXNrOwo+ICsJaW50IHNsYV9pZDsKPiArCWludCBwYXJlbnRfaWQ7Cj4gKwl1bnNpZ25lZCBpbnQg Y2lyOwo+ICsJdW5zaWduZWQgaW50IHBpcjsKPiArCWVudW0gcmxfbm9kZV90eXBlIHR5cGU7Cj4g KwllbnVtIGFkZl9iYXNlX3NlcnZpY2VzIHNydjsKPiArfTsKPiArCj4gK3N0cnVjdCBybF9zbGlj ZV9jbnQgewo+ICsJdTggZGNwcl9jbnQ7Cj4gKwl1OCBwa2VfY250Owo+ICsJdTggY3BoX2NudDsK PiArfTsKPiArCj4gK3N0cnVjdCBhZGZfcmxfaHdfZGF0YSB7Cj4gKwl1MzIgc2NhbGVfcmVmOwo+ ICsJdTMyIHNjYW5faW50ZXJ2YWw7Cj4gKwl1MzIgcjJsX29mZnNldDsKPiArCXUzMiBsMmNfb2Zm c2V0Owo+ICsJdTMyIGMyc19vZmZzZXQ7Cj4gKwl1MzIgcGNpaW5fdGJfb2Zmc2V0Owo+ICsJdTMy IHBjaW91dF90Yl9vZmZzZXQ7Cj4gKwl1MzIgcGNpZV9zY2FsZV9tdWw7Cj4gKwl1MzIgcGNpZV9z Y2FsZV9kaXY7Cj4gKwl1MzIgZGNwcl9jb3JyZWN0aW9uOwo+ICsJdTMyIG1heF90cFtSTF9ST09U X01BWF07Cj4gKwlzdHJ1Y3Qgcmxfc2xpY2VfY250IHNsaWNlczsKPiArfTsKPiArCj4gKy8qKgo+ ICsgKiBzdHJ1Y3QgYWRmX3JsIC0gcmF0ZWxpbWl0aW5nIGRhdGEgc3RydWN0dXJlCj4gKyAqIEBh Y2NlbF9kZXY6IHBvaW50ZXIgdG8gYWNjZWxlcmF0aW9uIGRldmljZSBkYXRhCj4gKyAqIEBkZXZp Y2VfZGF0YTogcG9pbnRlciB0byByYXRlIGxpbWl0aW5nIGRhdGEgc3BlY2lmaWMgdG8gYSBkZXZp Y2UgdHlwZSAob3IgcmV2aXNpb24pCj4gKyAqIEBzbGE6IGFycmF5IG9mIHBvaW50ZXJzIHRvIFNM QSBvYmplY3RzCj4gKyAqIEByb290OiBhcnJheSBvZiBwb2ludGVycyB0byByb290IHR5cGUgU0xB cywgZWxlbWVudCBudW1iZXIgcmVmbGVjdHMgbm9kZV9pZAo+ICsgKiBAY2x1c3RlcjogYXJyYXkg b2YgcG9pbnRlcnMgdG8gY2x1c3RlciB0eXBlIFNMQXMsIGVsZW1lbnQgbnVtYmVyIHJlZmxlY3Rz IG5vZGVfaWQKPiArICogQGxlYWY6IGFycmF5IG9mIHBvaW50ZXJzIHRvIGxlYWYgdHlwZSBTTEFz LCBlbGVtZW50IG51bWJlciByZWZsZWN0cyBub2RlX2lkCj4gKyAqIEBycF9pbl91c2U6IGFycmF5 IG9mIHJpbmcgcGFpciBJRHMgYWxyZWFkeSB1c2VkIGluIG9uZSBvZiBTTEFzCj4gKyAqIEBybF9s b2NrOiBtdXRleCBvYmplY3Qgd2hpY2ggaXMgcHJvdGVjdGluZyBkYXRhIGluIHRoaXMgc3RydWN0 dXJlCj4gKyAqIEBpbnB1dDogc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgdGhl IGRhdGEgcmVjZWl2ZWQgZnJvbSB1c2VyCj4gKyAqLwo+ICtzdHJ1Y3QgYWRmX3JsIHsKPiArCXN0 cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXY7Cj4gKwlzdHJ1Y3QgYWRmX3JsX2h3X2RhdGEg KmRldmljZV9kYXRhOwo+ICsJLyogbWFwcGluZyBzbGFfaWQgdG8gU0xBIG9iamVjdHMgKi8KPiAr CXN0cnVjdCBybF9zbGEgKnNsYVtSTF9OT0RFU19DTlRfTUFYXTsKPiArCXN0cnVjdCBybF9zbGEg KnJvb3RbUkxfUk9PVF9NQVhdOwo+ICsJc3RydWN0IHJsX3NsYSAqY2x1c3RlcltSTF9DTFVTVEVS X01BWF07Cj4gKwlzdHJ1Y3Qgcmxfc2xhICpsZWFmW1JMX0xFQUZfTUFYXTsKPiArCWJvb2wgcnBf aW5fdXNlW1JMX1JQX0NOVF9NQVhdOwo+ICsJLyogTXV0ZXggcHJvdGVjdGluZyB3cml0aW5nIHRv IFNMQXMgbGlzdHMgKi8KPiArCXN0cnVjdCBtdXRleCBybF9sb2NrOwo+ICt9Owo+ICsKPiArLyoq Cj4gKyAqIHN0cnVjdCBybF9zbGEgLSBTTEEgb2JqZWN0IGRhdGEgc3RydWN0dXJlCj4gKyAqIEBw YXJlbnQ6IHBvaW50ZXIgdG8gdGhlIHBhcmVudCBTTEEgKHJvb3QvY2x1c3RlcikKPiArICogQHR5 cGU6IFNMQSB0eXBlCj4gKyAqIEBzcnY6IHNlcnZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgU0xB Cj4gKyAqIEBzbGFfaWQ6IElEIG9mIHRoZSBTTEEsIHVzZWQgYXMgZWxlbWVudCBudW1iZXIgaW4g U0xBIGFycmF5IGFuZCBhcyBpZGVudGlmaWVyCj4gKyAqCSAgICBzaGFyZWQgd2l0aCB0aGUgdXNl cgo+ICsgKiBAbm9kZV9pZDogSUQgb2Ygbm9kZSwgZWFjaCBvZiBTTEEgdHlwZSBoYXZlIGEgc2Vw YXJhdGUgSUQgbGlzdAo+ICsgKiBAY2lyOiBjb21taXR0ZWQgaW5mb3JtYXRpb24gcmF0ZQo+ICsg KiBAcGlyOiBwZWFrIGluZm9ybWF0aW9uIHJhdGUgKFBJUiA+PSBDSVIpCj4gKyAqIEByZW1fY2ly OiBpZiB0aGlzIFNMQSBpcyBhIHBhcmVudCB0aGVuIHRoaXMgZmllbGQgcmVwcmVzZW50cyBhIHJl bWFpbmluZwo+ICsgKgkgICAgIHZhbHVlIHRvIGJlIHVzZWQgYnkgY2hpbGQgU0xBcy4KPiArICog QHJpbmdfcGFpcnNfaWRzOiBhcnJheSB3aXRoIG51bWVyaWMgcmluZyBwYWlycyBJRHMgYXNzaWdu ZWQgdG8gdGhpcyBTTEEKPiArICogQHJpbmdfcGFpcnNfY250OiBudW1iZXIgb2YgYXNzaWduZWQg cmluZyBwYWlycyBsaXN0ZWQgaW4gdGhlIGFycmF5IGFib3ZlCj4gKyAqLwo+ICtzdHJ1Y3Qgcmxf c2xhIHsKPiArCXN0cnVjdCBybF9zbGEgKnBhcmVudDsKPiArCWVudW0gcmxfbm9kZV90eXBlIHR5 cGU7Cj4gKwllbnVtIGFkZl9iYXNlX3NlcnZpY2VzIHNydjsKPiArCXUzMiBzbGFfaWQ7Cj4gKwl1 MzIgbm9kZV9pZDsKPiArCXUzMiBjaXI7Cj4gKwl1MzIgcGlyOwo+ICsJdTMyIHJlbV9jaXI7Cj4g Kwl1MTYgcmluZ19wYWlyc19pZHNbUkxfUlBfQ05UX1BFUl9MRUFGX01BWF07Cj4gKwl1MTYgcmlu Z19wYWlyc19jbnQ7Cj4gK307Cj4gKwo+ICtpbnQgYWRmX3JsX2FkZF9zbGEoc3RydWN0IGFkZl9h Y2NlbF9kZXYgKmFjY2VsX2RldiwKPiArCQkgICBzdHJ1Y3QgYWRmX3JsX3NsYV9pbnB1dF9kYXRh ICpzbGFfaW4pOwo+ICtpbnQgYWRmX3JsX3VwZGF0ZV9zbGEoc3RydWN0IGFkZl9hY2NlbF9kZXYg KmFjY2VsX2RldiwKPiArCQkgICAgICBzdHJ1Y3QgYWRmX3JsX3NsYV9pbnB1dF9kYXRhICpzbGFf aW4pOwo+ICtpbnQgYWRmX3JsX2dldF9zbGEoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rl diwKPiArCQkgICBzdHJ1Y3QgYWRmX3JsX3NsYV9pbnB1dF9kYXRhICpzbGFfaW4pOwo+ICtpbnQg YWRmX3JsX2dldF9jYXBhYmlsaXR5X3JlbWFpbmluZyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNj ZWxfZGV2LAo+ICsJCQkJICAgIGVudW0gYWRmX2Jhc2Vfc2VydmljZXMgc3J2LCBpbnQgc2xhX2lk KTsKPiAraW50IGFkZl9ybF9yZW1vdmVfc2xhKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9k ZXYsIHUzMiBzbGFfaWQpOwo+ICt2b2lkIGFkZl9ybF9yZW1vdmVfc2xhX2FsbChzdHJ1Y3QgYWRm X2FjY2VsX2RldiAqYWNjZWxfZGV2LCBib29sIGluY2xfZGVmYXVsdCk7Cj4gKwo+ICtpbnQgYWRm X3JsX2luaXQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldik7Cj4gK2ludCBhZGZfcmxf c3RhcnQoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldik7Cj4gK3ZvaWQgYWRmX3JsX3N0 b3Aoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldik7Cj4gK3ZvaWQgYWRmX3JsX2V4aXQo c3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2Rldik7Cj4gKwo+ICt1MzIgYWRmX3JsX2NhbGN1 bGF0ZV9wY2lfYncoc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwgdTMyIHNsYV92YWws Cj4gKwkJCSAgICBlbnVtIGFkZl9iYXNlX3NlcnZpY2VzIHN2Y190eXBlLCBib29sIGlzX2J3X291 dCk7Cj4gK3UzMiBhZGZfcmxfY2FsY3VsYXRlX2FlX2N5Y2xlcyhzdHJ1Y3QgYWRmX2FjY2VsX2Rl diAqYWNjZWxfZGV2LCB1MzIgc2xhX3ZhbCwKPiArCQkJICAgICAgIGVudW0gYWRmX2Jhc2Vfc2Vy dmljZXMgc3ZjX3R5cGUpOwo+ICt1MzIgYWRmX3JsX2NhbGN1bGF0ZV9zbGljZV90b2tlbnMoc3Ry dWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwgdTMyIHNsYV92YWwsCj4gKwkJCQkgIGVudW0g YWRmX2Jhc2Vfc2VydmljZXMgc3ZjX3R5cGUpOwo+ICsKPiArI2VuZGlmIC8qIEFERl9STF9IXyAq Lwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZf cmxfYWRtaW4uYyBiL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9ybF9h ZG1pbi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjgyMGZj YjJkNDJiZgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQv cWF0X2NvbW1vbi9hZGZfcmxfYWRtaW4uYwo+IEBAIC0wLDAgKzEsOTggQEAKPiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKiBDb3B5cmlnaHQoYykgMjAyMyBJ bnRlbCBDb3Jwb3JhdGlvbiAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiArCj4gKyNpbmNsdWRlICJhZGZfYWRtaW4uaCIK PiArI2luY2x1ZGUgImFkZl9hY2NlbF9kZXZpY2VzLmgiCj4gKyNpbmNsdWRlICJhZGZfcmxfYWRt aW4uaCIKPiArCj4gK3N0YXRpYyB2b2lkCj4gK3ByZXBfYWRtaW5fcmVxX21zZyhzdHJ1Y3Qgcmxf c2xhICpzbGEsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCj4gKwkJICAgc3RydWN0IGljcF9xYXRfZndf aW5pdF9hZG1pbl9zbGFfY29uZmlnX3BhcmFtcyAqZndfcGFyYW1zLAo+ICsJCSAgIHN0cnVjdCBp Y3BfcWF0X2Z3X2luaXRfYWRtaW5fcmVxICpyZXEsIGJvb2wgaXNfdXBkYXRlKQo+ICt7Cj4gKwly ZXEtPmNtZF9pZCA9IGlzX3VwZGF0ZSA/IElDUF9RQVRfRldfUkxfVVBEQVRFIDogSUNQX1FBVF9G V19STF9BREQ7Cj4gKwlyZXEtPmluaXRfY2ZnX3B0ciA9IGRtYV9hZGRyOwo+ICsJcmVxLT5pbml0 X2NmZ19zeiA9IHNpemVvZigqZndfcGFyYW1zKTsKPiArCXJlcS0+bm9kZV9pZCA9IHNsYS0+bm9k ZV9pZDsKPiArCXJlcS0+bm9kZV90eXBlID0gc2xhLT50eXBlOwo+ICsJcmVxLT5ycF9jb3VudCA9 IHNsYS0+cmluZ19wYWlyc19jbnQ7Cj4gKwlyZXEtPnN2Y190eXBlID0gc2xhLT5zcnY7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkCj4gK3ByZXBfYWRtaW5fcmVxX3BhcmFtcyhzdHJ1Y3QgYWRmX2Fj Y2VsX2RldiAqYWNjZWxfZGV2LCBzdHJ1Y3Qgcmxfc2xhICpzbGEsCj4gKwkJICAgICAgc3RydWN0 IGljcF9xYXRfZndfaW5pdF9hZG1pbl9zbGFfY29uZmlnX3BhcmFtcyAqZndfcGFyYW1zKQo+ICt7 Cj4gKwlmd19wYXJhbXMtPnBjaWVfaW5fY2lyID0KPiArCQlhZGZfcmxfY2FsY3VsYXRlX3BjaV9i dyhhY2NlbF9kZXYsIHNsYS0+Y2lyLCBzbGEtPnNydiwgZmFsc2UpOwo+ICsJZndfcGFyYW1zLT5w Y2llX2luX3BpciA9Cj4gKwkJYWRmX3JsX2NhbGN1bGF0ZV9wY2lfYncoYWNjZWxfZGV2LCBzbGEt PnBpciwgc2xhLT5zcnYsIGZhbHNlKTsKPiArCWZ3X3BhcmFtcy0+cGNpZV9vdXRfY2lyID0KPiAr CQlhZGZfcmxfY2FsY3VsYXRlX3BjaV9idyhhY2NlbF9kZXYsIHNsYS0+Y2lyLCBzbGEtPnNydiwg dHJ1ZSk7Cj4gKwlmd19wYXJhbXMtPnBjaWVfb3V0X3BpciA9Cj4gKwkJYWRmX3JsX2NhbGN1bGF0 ZV9wY2lfYncoYWNjZWxfZGV2LCBzbGEtPnBpciwgc2xhLT5zcnYsIHRydWUpOwo+ICsKPiArCWZ3 X3BhcmFtcy0+c2xpY2VfdXRpbF9jaXIgPQo+ICsJCWFkZl9ybF9jYWxjdWxhdGVfc2xpY2VfdG9r ZW5zKGFjY2VsX2Rldiwgc2xhLT5jaXIsIHNsYS0+c3J2KTsKPiArCWZ3X3BhcmFtcy0+c2xpY2Vf dXRpbF9waXIgPQo+ICsJCWFkZl9ybF9jYWxjdWxhdGVfc2xpY2VfdG9rZW5zKGFjY2VsX2Rldiwg c2xhLT5waXIsIHNsYS0+c3J2KTsKPiArCj4gKwlmd19wYXJhbXMtPmFlX3V0aWxfY2lyID0KPiAr CQlhZGZfcmxfY2FsY3VsYXRlX2FlX2N5Y2xlcyhhY2NlbF9kZXYsIHNsYS0+Y2lyLCBzbGEtPnNy dik7Cj4gKwlmd19wYXJhbXMtPmFlX3V0aWxfcGlyID0KPiArCQlhZGZfcmxfY2FsY3VsYXRlX2Fl X2N5Y2xlcyhhY2NlbF9kZXYsIHNsYS0+cGlyLCBzbGEtPnNydik7Cj4gKwo+ICsJbWVtY3B5KGZ3 X3BhcmFtcy0+cnBfaWRzLCBzbGEtPnJpbmdfcGFpcnNfaWRzLAo+ICsJICAgICAgIHNpemVvZihz bGEtPnJpbmdfcGFpcnNfaWRzKSk7Cj4gK30KPiArCj4gK2ludCBhZGZfcmxfc2VuZF9hZG1pbl9p bml0X21zZyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LAo+ICsJCQkgICAgICAgc3Ry dWN0IHJsX3NsaWNlX2NudCAqc2xpY2VzX2ludCkKPiArewo+ICsJc3RydWN0IGljcF9xYXRfZndf aW5pdF9hZG1pbl9zbGljZV9jbnQgc2xpY2VzX3Jlc3AgPSB7IH07Cj4gKwlpbnQgcmV0Owo+ICsK PiArCXJldCA9IGFkZl9zZW5kX2FkbWluX3JsX2luaXQoYWNjZWxfZGV2LCAmc2xpY2VzX3Jlc3Ap Owo+ICsJaWYgKHJldCkgPiArCQlnb3RvIGVycl9yZXQ7CgpKdXN0IHJldHVybiByZXQuCgotVGVy bwoKPiArCj4gKwlzbGljZXNfaW50LT5kY3ByX2NudCA9IHNsaWNlc19yZXNwLmRjcHJfY250Owo+ ICsJc2xpY2VzX2ludC0+cGtlX2NudCA9IHNsaWNlc19yZXNwLnBrZV9jbnQ7Cj4gKwkvKiBGb3Ig c3ltbWV0cmljIGNyeXB0bywgc2xpY2UgdG9rZW5zIGFyZSByZWxhdGl2ZSB0byB0aGUgVUNTIHNs aWNlICovCj4gKwlzbGljZXNfaW50LT5jcGhfY250ID0gc2xpY2VzX3Jlc3AudWNzX2NudDsKPiAr Cj4gK2Vycl9yZXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtpbnQgYWRmX3JsX3NlbmRf YWRtaW5fYWRkX3VwZGF0ZV9tc2coc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwKPiAr CQkJCSAgICAgc3RydWN0IHJsX3NsYSAqc2xhLCBib29sIGlzX3VwZGF0ZSkKPiArewo+ICsJc3Ry dWN0IGljcF9xYXRfZndfaW5pdF9hZG1pbl9zbGFfY29uZmlnX3BhcmFtcyAqZndfcGFyYW1zOwo+ ICsJc3RydWN0IGljcF9xYXRfZndfaW5pdF9hZG1pbl9yZXEgcmVxID0geyB9Owo+ICsJZG1hX2Fk ZHJfdCBkbWFfYWRkcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJZndfcGFyYW1zID0gZG1hX2FsbG9j X2NvaGVyZW50KCZHRVRfREVWKGFjY2VsX2RldiksIHNpemVvZigqZndfcGFyYW1zKSwKPiArCQkJ CSAgICAgICAmZG1hX2FkZHIsIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFmd19wYXJhbXMpCj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcHJlcF9hZG1pbl9yZXFfcGFyYW1zKGFjY2VsX2Rldiwg c2xhLCBmd19wYXJhbXMpOwo+ICsJcHJlcF9hZG1pbl9yZXFfbXNnKHNsYSwgZG1hX2FkZHIsIGZ3 X3BhcmFtcywgJnJlcSwgaXNfdXBkYXRlKTsKPiArCXJldCA9IGFkZl9zZW5kX2FkbWluX3JsX2Fk ZF91cGRhdGUoYWNjZWxfZGV2LCAmcmVxKTsKPiArCj4gKwlkbWFfZnJlZV9jb2hlcmVudCgmR0VU X0RFVihhY2NlbF9kZXYpLCBzaXplb2YoKmZ3X3BhcmFtcyksIGZ3X3BhcmFtcywKPiArCQkJICBk bWFfYWRkcik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAraW50IGFkZl9ybF9zZW5k X2FkbWluX2RlbGV0ZV9tc2coc3RydWN0IGFkZl9hY2NlbF9kZXYgKmFjY2VsX2RldiwgdTE2IG5v ZGVfaWQsCj4gKwkJCQkgdTggbm9kZV90eXBlKQo+ICt7Cj4gKwlyZXR1cm4gYWRmX3NlbmRfYWRt aW5fcmxfZGVsZXRlKGFjY2VsX2Rldiwgbm9kZV9pZCwgbm9kZV90eXBlKTsKPiArfQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9hZGZfcmxfYWRtaW4u aCBiL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2FkZl9ybF9hZG1pbi5oCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmRkNTQxOWI3ZTg5Ngo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1v bi9hZGZfcmxfYWRtaW4uaAo+IEBAIC0wLDAgKzEsMTggQEAKPiArLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwo+ICsvKiBDb3B5cmlnaHQoYykgMjAyMyBJbnRlbCBD b3Jwb3JhdGlvbiAqLwo+ICsKPiArI2lmbmRlZiBBREZfUkxfQURNSU5fSF8KPiArI2RlZmluZSBB REZfUkxfQURNSU5fSF8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArI2lu Y2x1ZGUgImFkZl9ybC5oIgo+ICsKPiAraW50IGFkZl9ybF9zZW5kX2FkbWluX2luaXRfbXNnKHN0 cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsCj4gKwkJCSAgICAgICBzdHJ1Y3Qgcmxfc2xp Y2VfY250ICpzbGljZXNfaW50KTsKPiAraW50IGFkZl9ybF9zZW5kX2FkbWluX2FkZF91cGRhdGVf bXNnKHN0cnVjdCBhZGZfYWNjZWxfZGV2ICphY2NlbF9kZXYsCj4gKwkJCQkgICAgIHN0cnVjdCBy bF9zbGEgKnNsYSwgYm9vbCBpc191cGRhdGUpOwo+ICtpbnQgYWRmX3JsX3NlbmRfYWRtaW5fZGVs ZXRlX21zZyhzdHJ1Y3QgYWRmX2FjY2VsX2RldiAqYWNjZWxfZGV2LCB1MTYgbm9kZV9pZCwKPiAr CQkJCSB1OCBub2RlX3R5cGUpOwo+ICsKPiArI2VuZGlmIC8qIEFERl9STF9BRE1JTl9IXyAqLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2NvbW1vbi9pY3BfcWF0 X2Z3X2luaXRfYWRtaW4uaCBiL2RyaXZlcnMvY3J5cHRvL2ludGVsL3FhdC9xYXRfY29tbW9uL2lj cF9xYXRfZndfaW5pdF9hZG1pbi5oCj4gaW5kZXggZTRkZTlhMzBlMGJkLi5jZDQxOGI1MWQ5ZjMg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jcnlwdG8vaW50ZWwvcWF0L3FhdF9jb21tb24vaWNwX3Fh dF9md19pbml0X2FkbWluLmgKPiArKysgYi9kcml2ZXJzL2NyeXB0by9pbnRlbC9xYXQvcWF0X2Nv bW1vbi9pY3BfcWF0X2Z3X2luaXRfYWRtaW4uaAo+IEBAIC01LDYgKzUsOCBAQAo+ICAgCj4gICAj aW5jbHVkZSAiaWNwX3FhdF9mdy5oIgo+ICAgCj4gKyNkZWZpbmUgUkxfTUFYX1JQX0lEUyAxNgo+ ICsKPiAgIGVudW0gaWNwX3FhdF9md19pbml0X2FkbWluX2NtZF9pZCB7Cj4gICAJSUNQX1FBVF9G V19JTklUX0FFID0gMCwKPiAgIAlJQ1BfUUFUX0ZXX1RSTkdfRU5BQkxFID0gMSwKPiBAQCAtMTks MTAgKzIxLDE0IEBAIGVudW0gaWNwX3FhdF9md19pbml0X2FkbWluX2NtZF9pZCB7Cj4gICAJSUNQ X1FBVF9GV19DUllQVE9fQ0FQQUJJTElUWV9HRVQgPSAxMCwKPiAgIAlJQ1BfUUFUX0ZXX0RDX0NI QUlOX0lOSVQgPSAxMSwKPiAgIAlJQ1BfUUFUX0ZXX0hFQVJUQkVBVF9USU1FUl9TRVQgPSAxMywK PiArCUlDUF9RQVRfRldfUkxfSU5JVCA9IDE1LAo+ICAgCUlDUF9RQVRfRldfVElNRVJfR0VUID0g MTksCj4gICAJSUNQX1FBVF9GV19DTlZfU1RBVFNfR0VUID0gMjAsCj4gICAJSUNQX1FBVF9GV19Q TV9TVEFURV9DT05GSUcgPSAxMjgsCj4gICAJSUNQX1FBVF9GV19QTV9JTkZPID0gMTI5LAo+ICsJ SUNQX1FBVF9GV19STF9BREQgPSAxMzQsCj4gKwlJQ1BfUUFUX0ZXX1JMX1VQREFURSA9IDEzNSwK PiArCUlDUF9RQVRfRldfUkxfUkVNT1ZFID0gMTM2LAo+ICAgfTsKPiAgIAo+ICAgZW51bSBpY3Bf cWF0X2Z3X2luaXRfYWRtaW5fcmVzcF9zdGF0dXMgewo+IEBAIC0zMCw2ICszNiwzMCBAQCBlbnVt IGljcF9xYXRfZndfaW5pdF9hZG1pbl9yZXNwX3N0YXR1cyB7Cj4gICAJSUNQX1FBVF9GV19JTklU X1JFU1BfU1RBVFVTX0ZBSUwKPiAgIH07Cj4gICAKPiArc3RydWN0IGljcF9xYXRfZndfaW5pdF9h ZG1pbl9zbGljZV9jbnQgewo+ICsJX191OCBjcHJfY250Owo+ICsJX191OCB4bHRfY250Owo+ICsJ X191OCBkY3ByX2NudDsKPiArCV9fdTggcGtlX2NudDsKPiArCV9fdTggd2F0X2NudDsKPiArCV9f dTggd2NwX2NudDsKPiArCV9fdTggdWNzX2NudDsKPiArCV9fdTggY3BoX2NudDsKPiArCV9fdTgg YXRoX2NudDsKPiArfTsKPiArCj4gK3N0cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fc2xhX2Nv bmZpZ19wYXJhbXMgewo+ICsJX191MzIgcGNpZV9pbl9jaXI7Cj4gKwlfX3UzMiBwY2llX2luX3Bp cjsKPiArCV9fdTMyIHBjaWVfb3V0X2NpcjsKPiArCV9fdTMyIHBjaWVfb3V0X3BpcjsKPiArCV9f dTMyIHNsaWNlX3V0aWxfY2lyOwo+ICsJX191MzIgc2xpY2VfdXRpbF9waXI7Cj4gKwlfX3UzMiBh ZV91dGlsX2NpcjsKPiArCV9fdTMyIGFlX3V0aWxfcGlyOwo+ICsJX191MTYgcnBfaWRzW1JMX01B WF9SUF9JRFNdOwo+ICt9Owo+ICsKPiAgIHN0cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fcmVx IHsKPiAgIAlfX3UxNiBpbml0X2NmZ19zejsKPiAgIAlfX3U4IHJlc3J2ZDE7Cj4gQEAgLTQ5LDYg Kzc5LDEzIEBAIHN0cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fcmVxIHsKPiAgIAkJc3RydWN0 IHsKPiAgIAkJCV9fdTMyIGhlYXJ0YmVhdF90aWNrczsKPiAgIAkJfTsKPiArCQlzdHJ1Y3Qgewo+ ICsJCQlfX3UxNiBub2RlX2lkOwo+ICsJCQlfX3U4IG5vZGVfdHlwZTsKPiArCQkJX191OCBzdmNf dHlwZTsKPiArCQkJX191OCByZXNydmQ1WzNdOwo+ICsJCQlfX3U4IHJwX2NvdW50Owo+ICsJCX07 Cj4gICAJCV9fdTMyIGlkbGVfZmlsdGVyOwo+ICAgCX07Cj4gICAKPiBAQCAtMTEwLDYgKzE0Nyw3 IEBAIHN0cnVjdCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fcmVzcCB7Cj4gICAJCQlfX3UzMiB1bnN1 Y2Nlc3NmdWxfY291bnQ7Cj4gICAJCQlfX3U2NCByZXNydmQ4Owo+ICAgCQl9Owo+ICsJCXN0cnVj dCBpY3BfcWF0X2Z3X2luaXRfYWRtaW5fc2xpY2VfY250IHNsaWNlczsKPiAgIAkJX191MTYgZndf Y2FwYWJpbGl0aWVzOwo+ICAgCX07Cj4gICB9IF9fcGFja2VkOwotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW50ZWwg RmlubGFuZCBPeQpSZWdpc3RlcmVkIEFkZHJlc3M6IFBMIDI4MSwgMDAxODEgSGVsc2lua2kgCkJ1 c2luZXNzIElkZW50aXR5IENvZGU6IDAzNTc2MDYgLSA0IApEb21pY2lsZWQgaW4gSGVsc2lua2kg CgpUaGlzIGUtbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIG1heSBjb250YWluIGNvbmZpZGVudGlh bCBtYXRlcmlhbCBmb3IKdGhlIHNvbGUgdXNlIG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnQocyku IEFueSByZXZpZXcgb3IgZGlzdHJpYnV0aW9uCmJ5IG90aGVycyBpcyBzdHJpY3RseSBwcm9oaWJp dGVkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQKcmVjaXBpZW50LCBwbGVhc2UgY29udGFj dCB0aGUgc2VuZGVyIGFuZCBkZWxldGUgYWxsIGNvcGllcy4K