Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp1313943iog; Thu, 16 Jun 2022 03:53:05 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uIBemu0fdnqc0IE+MXnuDzyP+Tu2KCyaRFmkBomOd7AMaUnDcaSwLsOXKGskInpryxux5d X-Received: by 2002:a17:907:62a0:b0:6fe:69f3:88de with SMTP id nd32-20020a17090762a000b006fe69f388demr3867012ejc.214.1655376784982; Thu, 16 Jun 2022 03:53:04 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1655376784; cv=pass; d=google.com; s=arc-20160816; b=Ms9s2Yy5Z16wZMVfiNC7PnTsvnYPFUP28Fce2VKhIVg7+L5H35vZaxx9fsxMiGg/+4 u2dWu3EjTnn+IZ2TRDnY5EBDjuYWnMc6ek7SayVFTOThcW36IIDSaosj9oGm/BkCv6fk 6HEyv/k4jfCgWOv95cd89WEeAeYitFW0bId2Sp0IzXbRLwQs8xXSyuw0Vj+eDyjDHw9C LaJ2TdcxhbyHI4o81Bcb5xeDNQGCbfR6LciqQbx2mzVFTI4tHFy/N9YXoqbfnNjxOf01 tSpXYE1+A5QjDTArwX55xxfIQcB3hkQRNzMoTsCfXyTNPFaM6etHkZDnQgexZmtDkamJ tapQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=dn29rjNBhXNQND/4MAK4pDsjV5WOauk2jg15/s7UEGs=; b=LE/PjC+OtRcpC1h/TBTU3pP3eRLZKRtOBmfGTYLTGQme7jiGPakKeRmE4YHj1wYiEY ci+LE388a+gj24z6FA9R3VnPIuJ86Nx5+QSVeX5BPyjRHZluT6krpGtip3lbLHWbZISf oUSgHnonHcItopB75UeYcxhFT70dtsMMOue6qcV0q9f6GsF59it1Q/TcOThWrYyGg8+d qHVMSQMmPu6IDPROXKsL6XxM+HXaDTDTm1+GSX4DEkzF7JdYedUlEdyOMlddQ/3w5jQK HYoXKhpFUdKgszCt6GfT7sw1mD1ItI1BYfnbaZIouxMDoLjGT9yBudhZvo8WfZtyauPo m+Vw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b=h9COfM1L; arc=pass (i=1 spf=pass spfdomain=aspeedtech.com dkim=pass dkdomain=aspeedtech.com dmarc=pass fromdomain=aspeedtech.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id gt11-20020a1709072d8b00b0070560397963si1800265ejc.233.2022.06.16.03.52.39; Thu, 16 Jun 2022 03:53:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@aspeedtech.com header.s=selector1 header.b=h9COfM1L; arc=pass (i=1 spf=pass spfdomain=aspeedtech.com dkim=pass dkdomain=aspeedtech.com dmarc=pass fromdomain=aspeedtech.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1359822AbiFPKrw (ORCPT + 99 others); Thu, 16 Jun 2022 06:47:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34678 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229555AbiFPKru (ORCPT ); Thu, 16 Jun 2022 06:47:50 -0400 Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2123.outbound.protection.outlook.com [40.107.215.123]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EBD222B1A; Thu, 16 Jun 2022 03:47:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RCMMIHx8SBvmVDRDKhEg2CExtPSbIO9wksMhTaYNOXynF0Vgika37o7ffU61zG+SD7xoPSNPKA9qPkssGBNqTAM2RL2A2c/VC5lwGO9u8DfCPOXDQiTgLO5HuT3+N4RbSfgwaoROdUcNfRfLcen1YctijlgpuqVV7Ha7VLawqE/BgRjGVfv9MWs1llAgSHkfJVlEznLF9ZFFzvr7LYyO7Yq/hg2ACytqH8VtnGozgJQB9CH7Lk7TRVHZ91u1lsEE44ncRy++XRmbdACp63hjMQUa5lKA6zms357Wr3fhpadfN3GdfhPpQcK/KHl4K08RmhRKe8fDikhScYmitFwKXg== 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=dn29rjNBhXNQND/4MAK4pDsjV5WOauk2jg15/s7UEGs=; b=F0SWMYbFOW7Ytt5rHFft6g4DgB6Z6JvhOuYXy11kxlDnOsCYh3TabkXTYxEb7kbtqPZMjTtuMbdt5nsvBK7cNigNTP8GrAM4EqvcXyNf+ZIk10NWX2PJNfjlo/sDjEsYaUXjAhDTQxskxHttb2Cu1Y7VLp29vXyCml15Hs2KppFbiMLds+gKfJqXAZrsIs+1mKtLof4Qq9bn71ECWJL/Ou21rS4DFTzuTpO3Jwit9TPeEra2o43Al4HKPnxjDgO4otRo5ZuYNWojEUZGYHFzk70O97HMyjrs6yO2nXHUd1wuPkoK2rX3DLZLFwvED02A/O0SMoHUzzkd+/WEePdD6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=aspeedtech.com; dmarc=pass action=none header.from=aspeedtech.com; dkim=pass header.d=aspeedtech.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=aspeedtech.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dn29rjNBhXNQND/4MAK4pDsjV5WOauk2jg15/s7UEGs=; b=h9COfM1L1Dq/2V7xdkBJ+UR9JQUEWTTvsr1EQT9aPIwsqQ2dlycaAvpLyMqKQ9K1GfjyHiXYRWbBTthzUw9qkpN+R217qOp72bbZP1A3M1sBUiSZVfPewhGyqzNr3DCsK7+4b6eT7Q8nsvM/RyIcy34Vk5PZle21OFTTauahgU2ri03Ko5UcuWr3GhDU4ZJdnug+H6kFJiqgj5lvuaDhm+419F9926ERuBtqYaB8TQLNlpLvkx3JrrWfW8MHg5LKhr3ugLSQdNeOMlXgqv/NY6vKE1qQ/4Pha9XClxYc45N29W2elJSqyHZV6UTCVuvWVaIVkYHoYJaTPe7/sOnZCg== Received: from SEZPR06MB5269.apcprd06.prod.outlook.com (2603:1096:101:78::6) by TYZPR06MB5051.apcprd06.prod.outlook.com (2603:1096:400:1c8::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5353.14; Thu, 16 Jun 2022 10:47:40 +0000 Received: from SEZPR06MB5269.apcprd06.prod.outlook.com ([fe80::8588:9527:6e72:69c2]) by SEZPR06MB5269.apcprd06.prod.outlook.com ([fe80::8588:9527:6e72:69c2%5]) with mapi id 15.20.5332.015; Thu, 16 Jun 2022 10:47:40 +0000 From: Ryan Chen To: Quan Nguyen , Corey Minyard , Rob Herring , Krzysztof Kozlowski , Brendan Higgins , Benjamin Herrenschmidt , Joel Stanley , Andrew Jeffery , Wolfram Sang , "openipmi-developer@lists.sourceforge.net" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-i2c@vger.kernel.org" , "openbmc@lists.ozlabs.org" , "linux-arm-kernel@lists.infradead.org" , "linux-aspeed@lists.ozlabs.org" CC: Open Source Submission , "Thang Q . Nguyen" , Phong Vo Subject: RE: [PATCH v8 1/3] ipmi: ssif_bmc: Add SSIF BMC driver Thread-Topic: [PATCH v8 1/3] ipmi: ssif_bmc: Add SSIF BMC driver Thread-Index: AQHYgJb90zstHBjK00CLRN7bhr6k061R2ynQ Date: Thu, 16 Jun 2022 10:47:39 +0000 Message-ID: References: <20220615090259.1121405-1-quan@os.amperecomputing.com> <20220615090259.1121405-2-quan@os.amperecomputing.com> In-Reply-To: <20220615090259.1121405-2-quan@os.amperecomputing.com> Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=aspeedtech.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 2c35a866-24e2-41c6-4ccb-08da4f85a26a x-ms-traffictypediagnostic: TYZPR06MB5051:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 9H041KjajgzmjtTZX+BiRaaJ29Bqgyka6+Cg6Ozq6U4i6UBNTZyDLIkm4NMvmbLLfLiauFhftptGhMXf8LTfndqHGutrNwiCrW4fX9H6fmOc76MyjN6YS3PGBEIjq+5HrNuUqqZsZy01D0N5GXRjcZ/Cww6w2r2enXy8WA2dDY0HAsOEapqqeQKonLXLudOXEAfLVHbUnXwCFpx4syPjZ/XINE/Cw+/hLeB8PQa93mGfvKyViYMSWSteuXec/5MFMLQ0Vq8z6JAAEo/nM/cL048RJ1UPB+jFBKCpdJAA6oNRdzgJyjLM34e/m8WUHJaIHbeQ+oY6n0pNGEnpZhUBDJg2EHZKd9BLR+3M7gYdC1r9yR7HMclRVLnqCg5T5HgNiTPdrjS5WzAzm0n4UtQYslmDrbG/COcp9A18l66zq8+KIviFG1At4o7kIOjxBE5kJW7HEn5xjIuFX1T90fMsEfCKzLxVZLax2lJDysZ0/Dmz1Cw/7cNAXvCg8DxOtWuNJ07rvKGLRK6v770GBa6kPb52CyX+UXf8CVA5YtpjDeYm/JJ29NdkOMfLm5Nzjzk05Dpx5nkww5jhwOdpO+tnDhby5SeiR/6/u2yPAzdWuYRLaQMvpxUz+ACm2Cnq+phcGs13CuEqlKEkRSXGycQCiFja1Uct25UbvdWLxyqcfaw9ZatYjFHur3UCich9NmrB8TY4s4plwzJC6hJ45raZsehpa7vsS24IZn+uRano3XiAtMqH1H3F960prxKJlHf7QHBA7xobxwNTHbwTy5Uu//CKPerIeohxLmWjgoBgDZ+ata+dC5iRp5TNcMSPdV4U x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SEZPR06MB5269.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(396003)(39840400004)(136003)(346002)(366004)(66946007)(76116006)(66476007)(8676002)(66556008)(508600001)(66446008)(71200400001)(30864003)(2906002)(52536014)(4326008)(64756008)(966005)(8936002)(5660300002)(7416002)(33656002)(26005)(9686003)(86362001)(53546011)(6506007)(921005)(110136005)(7696005)(55016003)(122000001)(54906003)(38100700002)(83380400001)(316002)(186003)(38070700005)(41300700001)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?b0NqRFFQMjNhZzBrSmNJNlcxcnRva2I5Ui9JVWErVXdjVDljYmRKREpyMWdo?= =?utf-8?B?WXprU2pSOFpCejI0U2dlSlpGMC9BQ3psLzlPa3NpUHl6U0NzVVdubzdhck96?= =?utf-8?B?dzA1STlCejVyY2ZabFVKRUlJN000VzVkUTdTOVRDMmlYM0ZGR0xkUkdJOStL?= =?utf-8?B?NjQzU054dVFvSENnVGJJNlJsTTQ0Q05FRGVIRm9hd1kzZnZvOTFYejJvTEdZ?= =?utf-8?B?bjZqMTh2S3h5Ky9lOWdaSENRSXlkRXp1bHJrNlhqK0FDQ0NQSDlWdDQvZjYw?= =?utf-8?B?bStXeEVEcjV6OTA5eEs2Z3RWMnRXUFd0TW1mRCtrQ09WV3VkbTdyNUhMeEJy?= =?utf-8?B?Ym9QNEdoTjNXWWcyL2w5eDMxZWNDeHhzdlk3NnFZUmVyS3A0eGlrS3h6S2l2?= =?utf-8?B?TjRVWUR1aEx4dUN2OGE0UlhVaENUTXBHamhnaENkY0NSYWRyRlBub3NDd2xh?= =?utf-8?B?dEUvYnpxUXNUa0RXdlpqRk9GdWZSSmtZdVl6STF2WTVXT29oRFlBV0pUQm1x?= =?utf-8?B?ZUJLWnNtTWpMZlRONUtnMEJ4cGluN1luM0w3NXIxQXJ0NU9DTHlQaXF3blRz?= =?utf-8?B?NlhON0ZiQ3l4aFNockRQSXFlU1c1QmttaVZEWTN3a3FRVEloUGtoTTBsZkRO?= =?utf-8?B?VDkvMWlaMCtveURnbVArbUNnTkJRR0lNVk1hNFllQlU3Z3BBNWEyVms2VUVT?= =?utf-8?B?ZThkWmJsUCtsS1prNjg2cWMzV2ZDQUpPYU9QTUtJMVh3TlJzbE90R0pQMVFK?= =?utf-8?B?RGRGM3hqQlhTQ3B0K0JxMkdyNWJ5Z29mR0diSGI3elFyZkRWdXdEUjlnN25z?= =?utf-8?B?czFPWjVTMjdNNjNLRW9LSXpXN1BpSzY4UzBvSWxpd2dXdklvMnllZUVFUzBk?= =?utf-8?B?SkgvZ3FzSU9GOTEzT0ZmS0NwUktrT2pjNS9URDJsa2NhV2hMdlRxUWVacXo3?= =?utf-8?B?S29QSTF1a1ViSXdDekxXZFBORm1kSFdLVmdFVk9CSUwzOWYyQm8xb0N5Qmdk?= =?utf-8?B?b2tFLzR4UC9yaUM1WWo0VU1QYnBvOHI4ekQ1THBsbUNWc0NZeGhCRkF0MS9z?= =?utf-8?B?UHFrYm5yWnE1RWhZdVlZaWpMcUpYQkVCNFRlSHg2cno2ZGZBazkxU3lpZUJi?= =?utf-8?B?UUFHcGN3ZHc0blJjT0lHaDA5bGw5dVArZ0V6ejR2OW5namZsK29Hd3JBQjNo?= =?utf-8?B?N0NlbG9tMStEUDkxaFJMWGRrd3JKV1NtcUtXYzBWai93S2xzeU5xT3hjMVpD?= =?utf-8?B?MGxRMXFuVzVsZnZxNmV1YW9BU1F4SjYrbkVXcXV6d1Y2NlUyRnBHYmJlOFU5?= =?utf-8?B?N2hJaXVCcEF1aFhNays3SzBQYWdROG9rTCtrVng0OUx1ak5vV014WDVacm5u?= =?utf-8?B?QVlKcnVoVVFGbVN0WkxZcm9YRE56d25CdDFzbUFtMnk4K3VIb3pJY3lDSnBC?= =?utf-8?B?amJVSlEvbjZvb3UwcHBwUFNFeWZndjIzaFVxRHN5eDlBWlBhS2w2bzNkTzdL?= =?utf-8?B?UzIzK2JPVUh4bURQd0Vvcnh1aFV1ZDdZalpRd2JqbG45SFQ5WG14Mkl6R0s2?= =?utf-8?B?NDBUM2pmRS9oTXFFSzZpTG9XendneW0yTmxTS2Qxd0o2RTNMTVlibW03T2FP?= =?utf-8?B?K2hOeVhwUExBaW9QY0hPaHZKUFBYWEpzOXBXUGhKcjYwUVdDeHdLcmVhMHJK?= =?utf-8?B?MjVmenZ5MkFlemhGMUh6VkhaV3pEOFBNT0hHcnZlL2VUbG9VUHNCaFMwbHdI?= =?utf-8?B?NFpkczh1UzNFWkxoNEY5eEZkc245aXNWdUgzYk45SjNML05xM0pNL2lqS3dp?= =?utf-8?B?TXMvczZBaEVyUldNWGplLzBwZWdUcVgwc0VKeXc3R0xtMjJMYS9qMUVVeHJI?= =?utf-8?B?WkJCSm5LcUVKWloyM2ZuZExZaWZ0RXE0bWZCTklIRGI5N2paQmJpajBpSmdx?= =?utf-8?B?Smk0ZEk3cFFqcHFHRStaaWcrWlZmU255Rk5tNUVYZ0hNdHUrVHZhV25PTHZN?= =?utf-8?B?OHdxdjg0eXQ5Z2FSdThPSWZiSDg2OGJpam1pUTBMczVVdEtvTFdvZjRKOGFK?= =?utf-8?B?MFNWOUZleVRzS0o2eGpzUURWZExuejVNeDF3VThhTTJhV3NoWGhYVUkrRXJK?= =?utf-8?B?RDlmRm0wVVcwS2FLVFMvRVZCMTFjRzF4NVkwbTNIby9uYnM4T2NGQTlGRFJ2?= =?utf-8?B?djBJb3NFZ1prVTZpNWl2d0xYYjhiZDk3dDJBSXVjNWhiSlJuUGRVTG5sbUFF?= =?utf-8?B?YzMrc3ozWmRWM1NqYmlLc1dISmFiR1RVcGNnUGdXVkcxS1QrN09iWERhdkdk?= =?utf-8?B?UjE3V1VNbkNwRTIrY3NTZlBSdmkzYXpQRFo0R2t3ZmVIam1KbFRFczlpMXEv?= =?utf-8?Q?rZvp7XyI2Yft0C/M=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: aspeedtech.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SEZPR06MB5269.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2c35a866-24e2-41c6-4ccb-08da4f85a26a X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jun 2022 10:47:39.9841 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43d4aa98-e35b-4575-8939-080e90d5a249 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jYROivlkMlDsMWoD8YlLpkSvgWBIvqSJ8EsB6cGl6wYYwSOQr+JS6dyho1YeFjNiDTNQHsHnd0BeEYP1S36DogAIkHgYyXvAGaHUnnwgR18= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5051 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGVsbG8gTnF1eWVuLA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExp bnV4LWFzcGVlZA0KPiA8bGludXgtYXNwZWVkLWJvdW5jZXMrcnlhbl9jaGVuPWFzcGVlZHRlY2gu Y29tQGxpc3RzLm96bGFicy5vcmc+IE9uDQo+IEJlaGFsZiBPZiBRdWFuIE5ndXllbg0KPiBTZW50 OiBXZWRuZXNkYXksIEp1bmUgMTUsIDIwMjIgNTowMyBQTQ0KPiBUbzogUXVhbiBOZ3V5ZW4gPHF1 YW5Ab3MuYW1wZXJlY29tcHV0aW5nLmNvbT47IENvcmV5IE1pbnlhcmQNCj4gPG1pbnlhcmRAYWNt Lm9yZz47IFJvYiBIZXJyaW5nIDxyb2JoK2R0QGtlcm5lbC5vcmc+OyBLcnp5c3p0b2YgS296bG93 c2tpDQo+IDxrcnp5c3p0b2Yua296bG93c2tpK2R0QGxpbmFyby5vcmc+OyBCcmVuZGFuIEhpZ2dp bnMNCj4gPGJyZW5kYW5oaWdnaW5zQGdvb2dsZS5jb20+OyBCZW5qYW1pbiBIZXJyZW5zY2htaWR0 DQo+IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+OyBKb2VsIFN0YW5sZXkgPGpvZWxAam1zLmlk LmF1PjsgQW5kcmV3IEplZmZlcnkNCj4gPGFuZHJld0Bhai5pZC5hdT47IFdvbGZyYW0gU2FuZyA8 d3NhQGtlcm5lbC5vcmc+Ow0KPiBvcGVuaXBtaS1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2Uu bmV0OyBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsNCj4gbGludXgta2VybmVsQHZnZXIua2Vy bmVsLm9yZzsgbGludXgtaTJjQHZnZXIua2VybmVsLm9yZzsNCj4gb3BlbmJtY0BsaXN0cy5vemxh YnMub3JnOyBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7DQo+IGxpbnV4LWFz cGVlZEBsaXN0cy5vemxhYnMub3JnDQo+IENjOiBPcGVuIFNvdXJjZSBTdWJtaXNzaW9uIDxwYXRj aGVzQGFtcGVyZWNvbXB1dGluZy5jb20+OyBUaGFuZyBRIC4NCj4gTmd1eWVuIDx0aGFuZ0Bvcy5h bXBlcmVjb21wdXRpbmcuY29tPjsgUGhvbmcgVm8NCj4gPHBob25nQG9zLmFtcGVyZWNvbXB1dGlu Zy5jb20+DQo+IFN1YmplY3Q6IFtQQVRDSCB2OCAxLzNdIGlwbWk6IHNzaWZfYm1jOiBBZGQgU1NJ RiBCTUMgZHJpdmVyDQo+IA0KPiBUaGUgU01CdXMgc3lzdGVtIGludGVyZmFjZSAoU1NJRikgSVBN SSBCTUMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0NCj4gaW4tYmFuZCBJUE1JIGNvbW11 bmljYXRpb24gd2l0aCB0aGVpciBob3N0IGluIG1hbmFnZW1lbnQgKEJNQykgc2lkZS4NCj4gDQo+ IFRoYW5rcyBEYW4gZm9yIHRoZSBjb3B5X2Zyb21fdXNlcigpIGZpeCBpbiB0aGUgbGluayBiZWxv dy4NCj4gDQo+IExpbms6DQo+IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xpbnV4LWFybS1rZXJu ZWwvMjAyMjAzMTAxMTQxMTkuMTM3MzYtNC1xdWFuQG9zLmENCj4gbXBlcmVjb21wdXRpbmcuY29t Lw0KPiBTaWduZWQtb2ZmLWJ5OiBRdWFuIE5ndXllbiA8cXVhbkBvcy5hbXBlcmVjb21wdXRpbmcu Y29tPg0KPiAtLS0NCj4gdjg6DQo+ICAgKyBEcm9wcGVkIHNzaWZfYm1jLmggZmlsZSBhbmQgbW92 ZSBpdHMgY29udGVudCB0byBzc2lmX2JtYy5jICAgW0NvcmV5XQ0KPiAgICsgQWRkIHN0cnVjdCBp cG1pX3NzaWZfbXNnIHRvIGluY2x1ZGUvdWFwaS9saW51eC9pcG1pX3NzaWZfYm1jLmgNCj4gICBo ZWFkZXIgZmlsZQ0KPiBbQ29yZXldDQo+ICAgKyBVc2UgdW5zaWduZWQgaW50IGZvciBsZW4gZmll bGQgaW4gc3RydWN0IGlwbWlfc3NpZl9tc2cgICAgICAgW0NvcmV5XQ0KPiAgICsgQXZvaWQgdXNp bmcgcGFja2VkIHN0cnVjdHVyZQ0KPiBbQ29yZXldDQo+ICAgKyBBZGQgY29tbWVudCB0byBjbGFy aWZ5IHRoZSBsb2dpYyBmbG93ICAgICAgICAgICAgICAgICAgICAgICAgW0NvcmV5XQ0KPiAgICsg Rml4IG11bHRpcGFydCByZWFkIGVuZCB3aXRoIGxlbj0wIGlzc3VlICAgICAgICAgICAgICAgICAg ICAgIFtDb3JleV0NCj4gICArIFJlZmFjdG9yIGNvZGUgaGFuZGxlIHRoZSB0b28gYmlnIHJlcXVl c3QgbWVzc2FnZSAgICAgICAgICAgICBbQ29yZXldDQo+ICAgKyBGaXggY29kZSBpbmRlbnRhdGlv biBpc3N1ZQ0KPiBbQ29yZXldDQo+ICAgKyBDbGVhbiBidWZmZXIgYmVmb3JlIHJlY2VpdmluZyBy ZXF1ZXN0IHRvIGF2b2lkIGdhcmJhZ2UgICAgICAgIFtRdWFuXQ0KPiAgICsgRml4IHRoZSBsaWNl bnNlIHRvIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgICAgICBbUXVhbl0N Cj4gDQo+IHY3Og0KPiAgICsgUmVtb3ZlIHVubmVjY2Vzc2FyeSBkZWxfdGltZXIoKSBpbiByZXNw b25zZV90aW1lb3V0KCkgICAgICAgIFtDb3JleV0NCj4gICArIENoYW5nZSBjb21wYXRpYmxlIHN0 cmluZyBmcm9tICJhbXBlcmUsc3NpZi1ibWMiIHRvICJzc2lmLWJtYyIgIFtKYWVdDQo+ICAgKyBB ZGQgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3NpZl9ibWNfbWF0Y2gpLCBmaXggYmxhbmsgbGlu ZSAgICBbSmFlXQ0KPiAgICsgRHJvcHBlZCB0aGUgdXNlIG9mIHNzaWZfbXNnX2xlbigpIG1hY3Jv LCB1c2UgdGhlIGxlbiBkaXJlY3RseSBbUXVhbl0NCj4gICArIFNvbHZlIHBvc3NpYmxlIGlzc3Vl IGlmIGJvdGggcmVzcG9uc2UgdGltZXIgYW5kIHNzaWZfYm1jX3dyaXRlKCkNCj4gICBvY2N1cnJl ZCBhdCB0aGUgc2FtZSB0aW1lDQo+IFtDb3JleV0NCj4gICArIEZpeCB3cm9uZyByZXR1cm4gdHlw ZSBvZiBzc2lmX2JtY19wb2xsKCkgICAgICAgICBba2VybmVsIHJvYm90IHRlc3RdDQo+ICAgKyBS ZWZhY3RvciBhbmQgaW50cm9kdWNlIHNzaWZfcGFydF9idWZmZXIgc3RydWN0IHRvIHJlcGxhY2Ug dGhlDQo+ICAgcmVzcG9uc2VfYnVmIHRvIG1hbmFnZSBlYWNoIHNlbmQvcmVjZWl2ZSBwYXJ0IG9m IHNzaWYgICAgICAgICAgIFtRdWFuXQ0KPiAgICsgQ2hhbmdlIFNTSUZfQkFEX1NNQlVTIHN0YXRl IHRvIFNTSUZfQUJPUlRJTkcgc3RhdGUNCj4gW0NvcmV5XQ0KPiAgICsgU3VwcG9ydCBhYm9ydCBm ZWF0dXJlIHRvIHNraXAgdGhlIGN1cnJlbnQgYmFkIHJlcXVlc3QvcmVzcG9uc2UgYW5kDQo+ICAg d2FpdCB1bnRpbCBuZXh0IG5ldyByZXF1ZXN0DQo+IFtDb3JleV0NCj4gICArIFJlZmFjdG9yIHRo ZSBQRUMgY2FsY3VsYXRpb24gdG8gYXZvaWQgdGhlIHJlLWNhbGN1bGF0ZSB0aGUgUEVDIG9uDQo+ ICAgZWFjaCBJMkNfU0xBVkVfV1JJVEVfUkVDRUlWRUQgZXZlbnQNCj4gW1F1YW5dDQo+ICAgKyBG aXggdGhlIHVzZSBvZiBlcnJvci1wcm9uZWQgaWR4ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgW0NvcmV5XQ0KPiAgICsgRGVmZXIgdGhlIHRlc3QgZm9yIHZhbGlkIFNNQnVzIGNvbW1hbmQg dW50aWwgdGhlIHJlYWQvd3JpdGUgcGFydA0KPiAgIGlzIGRldGVybWluZWQNCj4gW1F1YW5dDQo+ ICAgKyBDaGFuZ2Uvc3BsaXQgdW5zdXBwb3J0ZWRfc21idXNfY21kKCkgdG8NCj4gICBzdXBwb3J0 ZWRfW3dyaXRlfHJlYWRdX2NtZCgpDQo+IFtDb3JleV0NCj4gICArIEFib3J0IHRoZSByZXF1ZXN0 IGlmIHNvbWVob3cgaXRzIHNpemUgZXhjZWVkZWQgMjU1IGJ5dGVzICAgICAgW1F1YW5dDQo+IA0K PiB2NjoNCj4gICArIERyb3AgdGhlIHVzZSBvZiBzbGF2ZV9lbmFibGUoKQ0KPiBbV29sZnJhbV0N Cj4gICArIE1ha2UgaTJjLWFzcGVlZCB0byBpc3N1ZSBSeENtZExhc3QgY29tbWFuZCBvbiBhbGwN Cj4gICBJMkNfU0xBVkVfV1JJVEVfUkVRVUVTVEVEIGV2ZW50IHRvIGFzc2VydCBOQUsgd2hlbiBz bGF2ZSBidXN5DQo+IFtRdWFuXQ0KPiAgICsgTWFrZSBpMmMgc2xhdmUgdG8gcmV0dXJuIC1FQlVT WSB3aGVuIGl0J3MgYnVzeSAgICAgICAgICAgICAgICBbUXVhbl0NCj4gICArIERyb3AgdGhlIGFi b3J0aW5nIGZlYXR1cmUgYXMgcmV0dXJuIENvbXBsZXRpb24gQ29kZSAweEZGIG1heSBzdG9wDQo+ ICAgaG9zdCB0byByZXRyeSBhbmQgbWFrZSBpcG1pX3NzaWYuc28gZmFpbHMgdG8gbG9hZCAgICAg ICAgICAgICAgIFtRdWFuXQ0KPiAgICsgQWRkIHRpbWVyIHRvIHJlY292ZXIgc2xhdmUgZnJvbSBi dXN5IHN0YXRlIHdoZW4gbm8gcmVzcG9uc2UgICBbUXVhbl0NCj4gICArIENsZWFuIHJlcXVlc3Qv cmVzcG9uc2UgYnVmZmVyIGFwcHJvcHJpYXRlbHkgICAgICAgICAgICAgICAgICAgW1F1YW5dDQo+ ICAgKyBBZGQgc29tZSBtaW5vciBjaGFuZ2Ugb24gZXJyb3IgYW5kIHdhcm5pbmcgbWVzc2FnZXMN Cj4gW1F1YW5dDQo+IA0KPiB2NToNCj4gICArIE5vbmUNCj4gDQo+IHY0Og0KPiAgICsgU2VuZCBy ZXNwb25zZSB3aXRoIENvbXBsZXRpb24gY29kZSAweEZGIHdoZW4gYWJvcnRpbmcNCj4gW1F1YW5d DQo+ICAgKyBBZGRlZCBib3VuZGluZyBjaGVjayBvbiBTTUJ1cyB3cml0ZXMgYW5kIHRoZSB3aG9s ZSByZXF1ZXN0ICAgICBbRGFuXQ0KPiAgICsgTW92ZWQgYnVmZmVyIHRvIGVuZCBvZiBzdHJ1Y3Qg c3NpZl9ibWNfY3R4IHRvIGF2b2lkIGNvbnRleHQNCj4gICAgIGNvcnJ1cHRpb24gaWYgc29tZWhv dyBidWZmZXIgaXMgd3JpdHRlbiBwYXN0IHRoZSBlbmQgICAgICAgICAgIFtEYW5dDQo+ICAgKyBS ZXR1cm4gLUVJTlZBTCBpZiB1c2Vyc3BhY2UgYnVmZmVyIHRvbyBzbWFsbCwgZG9udA0KPiAgICAg c2lsZW5jZSB0cnVuY2F0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtD b3JleSwNCj4gSm9lbF0NCj4gICArIE5vdCBuZWNlc3NhcnkgdG8gY2hlY2sgTk9OQkxPQ0sgaW4g bG9jaw0KPiBbQ29yZXldDQo+ICAgKyBFbmZvcmNlIG9uZSB1c2VyIGF0IGEgdGltZQ0KPiBbSm9l bF0NCj4gICArIFJlamVjdCB3cml0ZSB3aXRoIGludmFsaWQgcmVzcG9uc2UgbGVuZ3RoIGZyb20g dXNlcnNwYWNlICAgICBbQ29yZXldDQo+ICAgKyBBZGQgc3RhdGUgbWFjaGluZXMgZm9yIGJldHRl ciBzc2lmIGJtYyBzdGF0ZSBoYW5kbGluZyAgICAgICAgIFtRdWFuXQ0KPiAgICsgRHJvcCBzc2lm X2JtY19hc3BlZWQuYyBhbmQgbWFrZSBzc2lmX2JtYy5jIGlzIGdlbmVyaWMNCj4gICAgIFNTSUYg Qk1DIGRyaXZlcg0KPiBbUXVhbl0NCj4gICArIENoYW5nZSBjb21wYXRpYmxlIHN0cmluZyAiYXNw ZWVkLGFzdDI1MDAtc3NpZi1ibWMiIHRvDQo+ICAgICAiYW1wZXJlLHNzaWYtYm1jIg0KPiBbUXVh bl0NCj4gICArIEFib3J0IGN1cnJlbnQgcmVxdWVzdCB3aXRoIGludmFsaWQgU01CdXMgd3JpdGUg b3INCj4gICAgIGludmFsaWQgY29tbWFuZA0KPiBbUXVhbl0NCj4gICArIEFib3J0IGFsbCByZXF1 ZXN0IGlmIHRoZXJlIGlzIHBlbmRpbmcgcmVzcG9uc2UgICAgICAgICAgICAgICAgW1F1YW5dDQo+ ICAgKyBDaGFuZ2VkIHZhbGlkYXRlX3BlYygpIHRvIHZhbGlkYXRlX3JlcXVlc3QoKSAgICAgICAg ICAgICAgICAgIFtRdWFuXQ0KPiAgICsgQWRkIHVuc3VwcG9ydGVkX3NtYnVzX2NtZCgpIHRvIGhh bmRsZSB1bmtub3duIFNNQnVzIGNvbW1hbmQNCj4gW1F1YW5dDQo+ICAgKyBQcmludCBpbnRlcm5h bCBzdGF0ZSBzdHJpbmcgZm9yIGVhc2UgaW52ZXN0aWdhdGluZyBpc3N1ZSAgICAgIFtRdWFuXQ0K PiAgICsgTW92ZSB0byBSRUFEWSBzdGF0ZSBvbiBTTEFWRV9TVE9QIGV2ZW50DQo+IFtRdWFuXQ0K PiAgICsgQ2hhbmdlIGluaXRpbGl6ZV90cmFuc2ZlcigpIHRvIHByb2Nlc3Nfc21idXNfY21kKCkg ICAgICAgICAgICBbUXVhbl0NCj4gICArIEludHJvZHVjZSBmdW5jdGlvbnMgZm9yIGVhY2ggc2xh dmUgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgW1F1YW5dDQo+IA0KPiB2MzoNCj4gICArIFJl bW92ZWQgcmVkdW5kYW50IGxpY2Vuc2UgaW5mbw0KPiBbSm9lbF0NCj4gICArIFN3aXRjaGVkIHRv IHVzZSB0cmFkaXRpb25hbCBpZi1lbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgW0pvZWxd DQo+ICAgKyBSZW1vdmVkIHVudXNlZCBzc2lmX2JtY19pb2N0bCgpDQo+IFtKb2VsXQ0KPiAgICsg TWFkZSBoYW5kbGVfcmVxdWVzdCgpL2NvbXBsZXRlX3Jlc3BvbnNlKCkgdG8gcmV0dXJuIHZvaWQg ICAgICBbSm9lbF0NCj4gICArIFJlZmFjdG9yZWQgc2VuZF9zc2lmX2JtY19yZXNwb25zZSgpIGFu ZA0KPiAgIHJlY2VpdmVfc3NpZl9ibWNfcmVxdWVzdCgpDQo+IFtDb3JleV0NCj4gICArIFJlbW92 ZWQgbXV0ZXgNCj4gW0NvcmV5XQ0KPiAgICsgVXNlIHNwaW5fbG9jay91bmxvY2tfaXJxc2F2ZS9y ZXN0b3JlIGluIGNhbGxiYWNrICAgICAgICAgICAgIFtDb3JleV0NCj4gICArIFJlbW92ZWQgdGhl IHVubmVjZXNzYXJ5IG1lbXNldA0KPiBbQ29yZXldDQo+ICAgKyBTd2l0Y2ggdG8gdXNlIGRldl9l cnIoKQ0KPiBbQ29yZXldDQo+IA0KPiB2MjoNCj4gICArIEZpeGVkIGNvbXBpbGluZyBlcnJvciB3 aXRoIENPTVBJTEVfVEVTVCBmb3IgYXJjDQo+IA0KPiAgZHJpdmVycy9jaGFyL2lwbWkvS2NvbmZp ZyAgICAgICAgICB8ICAxMSArDQo+ICBkcml2ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZSAgICAgICAg IHwgICAxICsNCj4gIGRyaXZlcnMvY2hhci9pcG1pL3NzaWZfYm1jLmMgICAgICAgfCA4ODANCj4g KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gIGluY2x1ZGUvdWFwaS9saW51eC9pcG1p X3NzaWZfYm1jLmggfCAgMTYgKw0KPiAgNCBmaWxlcyBjaGFuZ2VkLCA5MDggaW5zZXJ0aW9ucygr KQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvY2hhci9pcG1pL3NzaWZfYm1jLmMgIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBpbmNsdWRlL3VhcGkvbGludXgvaXBtaV9zc2lmX2JtYy5oDQo+ IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvS2NvbmZpZyBiL2RyaXZlcnMvY2hh ci9pcG1pL0tjb25maWcgaW5kZXgNCj4gYjA2MWU2YjUxM2VkLi4xOGE4OTA5M2Q2NGUgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL0tjb25maWcNCj4gKysrIGIvZHJpdmVycy9jaGFy L2lwbWkvS2NvbmZpZw0KPiBAQCAtMTY5LDYgKzE2OSwxNyBAQCBjb25maWcgQVNQRUVEX0JUX0lQ TUlfQk1DDQo+ICAJICBmb3VuZCBvbiBBc3BlZWQgU09DcyAoQVNUMjQwMCBhbmQgQVNUMjUwMCku IFRoZSBkcml2ZXINCj4gIAkgIGltcGxlbWVudHMgdGhlIEJNQyBzaWRlIG9mIHRoZSBCVCBpbnRl cmZhY2UuDQo+IA0KPiArY29uZmlnIFNTSUZfSVBNSV9CTUMNCj4gKwl0cmlzdGF0ZSAiU1NJRiBJ UE1JIEJNQyBkcml2ZXIiDQo+ICsJc2VsZWN0IEkyQw0KPiArCXNlbGVjdCBJMkNfU0xBVkUNCj4g KwloZWxwDQo+ICsJICBUaGlzIGVuYWJsZXMgdGhlIElQTUkgU01CdXMgc3lzdGVtIGludGVyZmFj ZSAoU1NJRikgYXQgdGhlDQo+ICsJICBtYW5hZ2VtZW50IChCTUMpIHNpZGUuDQo+ICsNCj4gKwkg IFRoZSBkcml2ZXIgaW1wbGVtZW50cyB0aGUgQk1DIHNpZGUgb2YgdGhlIFNNQnVzIHN5c3RlbQ0K PiArCSAgaW50ZXJmYWNlIChTU0lGKS4NCj4gKw0KPiAgY29uZmlnIElQTUJfREVWSUNFX0lOVEVS RkFDRQ0KPiAgCXRyaXN0YXRlICdJUE1CIEludGVyZmFjZSBoYW5kbGVyJw0KPiAgCWRlcGVuZHMg b24gSTJDDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZSBiL2RyaXZl cnMvY2hhci9pcG1pL01ha2VmaWxlIGluZGV4DQo+IDdjZTc5MGVmYWQ5Mi4uY2I2MTM4YjhkZWQ5 IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZQ0KPiArKysgYi9kcml2 ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZQ0KPiBAQCAtMzAsMyArMzAsNCBAQCBvYmotJChDT05GSUdf QVNQRUVEX0JUX0lQTUlfQk1DKSArPSBidC1ibWMubw0KPiAgb2JqLSQoQ09ORklHX0FTUEVFRF9L Q1NfSVBNSV9CTUMpICs9IGtjc19ibWNfYXNwZWVkLm8NCj4gIG9iai0kKENPTkZJR19OUENNN1hY X0tDU19JUE1JX0JNQykgKz0ga2NzX2JtY19ucGNtN3h4Lm8NCj4gIG9iai0kKENPTkZJR19JUE1C X0RFVklDRV9JTlRFUkZBQ0UpICs9IGlwbWJfZGV2X2ludC5vDQo+ICtvYmotJChDT05GSUdfU1NJ Rl9JUE1JX0JNQykgKz0gc3NpZl9ibWMubw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lw bWkvc3NpZl9ibWMuYyBiL2RyaXZlcnMvY2hhci9pcG1pL3NzaWZfYm1jLmMgbmV3DQo+IGZpbGUg bW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMDAwLi4wYmZkNGI5YmJhZjENCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9zc2lmX2JtYy5jDQo+IEBAIC0wLDAgKzEs ODgwIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQo+ICsv Kg0KPiArICogVGhlIGRyaXZlciBmb3IgQk1DIHNpZGUgb2YgU1NJRiBpbnRlcmZhY2UNCj4gKyAq DQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtcGVyZSBDb21wdXRpbmcgTExDDQo+ICsgKg0K PiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51 eC9taXNjZGV2aWNlLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ICsjaW5jbHVk ZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvdGltZXIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVz Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvaXBtaV9zc2lmX2JtYy5oPg0KPiArDQo+ICsjZGVmaW5l IERFVklDRV9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXBtaS1zc2lmLWhvc3Qi DQo+ICsNCj4gKyNkZWZpbmUgR0VUXzhCSVRfQUREUihhZGRyXzdiaXQpICAgICAgICAgICAgICAg ICgoKGFkZHJfN2JpdCkgPDwgMSkgJg0KPiAweGZmKQ0KPiArDQo+ICsvKiBBIHN0YW5kYXJkIFNN QnVzIFRyYW5zYWN0aW9uIGlzIGxpbWl0ZWQgdG8gMzIgZGF0YSBieXRlcyAqLw0KPiArI2RlZmlu ZSBNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT04gICAgICAgICAgICAgMzINCj4gKy8qIFRyYW5z YWN0aW9uIGluY2x1ZGVzIHRoZSBhZGRyZXNzLCB0aGUgY29tbWFuZCwgdGhlIGxlbmd0aCBhbmQg dGhlIFBFQw0KPiBieXRlICovDQo+ICsjZGVmaW5lIE1BWF9UUkFOU0FDVElPTg0KPiAoTUFYX1BB WUxPQURfUEVSX1RSQU5TQUNUSU9OICsgNCkNCj4gKw0KPiArI2RlZmluZSBNQVhfSVBNSV9EQVRB X1BFUl9TVEFSVF9UUkFOU0FDVElPTiAgICAgMzANCj4gKyNkZWZpbmUgTUFYX0lQTUlfREFUQV9Q RVJfTUlERExFX1RSQU5TQUNUSU9OICAgIDMxDQo+ICsNCj4gKyNkZWZpbmUgU1NJRl9JUE1JX1NJ TkdMRVBBUlRfV1JJVEUgICAgICAgICAgICAgIDB4Mg0KPiArI2RlZmluZSBTU0lGX0lQTUlfU0lO R0xFUEFSVF9SRUFEICAgICAgICAgICAgICAgMHgzDQo+ICsjZGVmaW5lIFNTSUZfSVBNSV9NVUxU SVBBUlRfV1JJVEVfU1RBUlQgICAgICAgICAweDYNCj4gKyNkZWZpbmUgU1NJRl9JUE1JX01VTFRJ UEFSVF9XUklURV9NSURETEUgICAgICAgIDB4Nw0KPiArI2RlZmluZSBTU0lGX0lQTUlfTVVMVElQ QVJUX1dSSVRFX0VORCAgICAgICAgICAgMHg4DQo+ICsjZGVmaW5lIFNTSUZfSVBNSV9NVUxUSVBB UlRfUkVBRF9TVEFSVCAgICAgICAgICAweDMNCj4gKyNkZWZpbmUgU1NJRl9JUE1JX01VTFRJUEFS VF9SRUFEX01JRERMRSAgICAgICAgIDB4OQ0KPiArDQo+ICsvKg0KPiArICogSVBNSSAyLjAgU3Bl Yywgc2VjdGlvbiAxMi43IFNTSUYgVGltaW5nLA0KPiArICogUmVxdWVzdC10by1SZXNwb25zZSBU aW1lIGlzIFQ2bWF4KDI1MG1zKSAtIFQxbWF4KDIwbXMpIC0gM21zID0gMjI3bXMNCj4gKyAqIFJl Y292ZXIgc3NpZl9ibWMgZnJvbSBidXN5IHN0YXRlIGlmIGl0IHRha2VzIHVwIHRvIDUwMG1zICAq Lw0KPiArI2RlZmluZSBSRVNQT05TRV9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgNTAw IC8qIG1zICovDQo+ICsNCj4gK3N0cnVjdCBzc2lmX3BhcnRfYnVmZmVyIHsNCj4gKwl1OCBhZGRy ZXNzOw0KPiArCXU4IHNtYnVzX2NtZDsNCj4gKwl1OCBsZW5ndGg7DQo+ICsJdTggcGF5bG9hZFtN QVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT05dOw0KPiArCXU4IHBlYzsNCj4gKwl1OCBpbmRleDsN Cj4gK307DQo+ICsNCj4gKy8qDQo+ICsgKiBTU0lGIGludGVybmFsIHN0YXRlczoNCj4gKyAqICAg U1NJRl9SRUFEWSAgICAgICAgIDB4MDAgOiBSZWFkeSBzdGF0ZQ0KPiArICogICBTU0lGX1NUQVJU ICAgICAgICAgMHgwMSA6IFN0YXJ0IHNtYnVzIHRyYW5zYWN0aW9uDQo+ICsgKiAgIFNTSUZfU01C VVNfQ01EICAgICAweDAyIDogUmVjZWl2ZWQgU01CdXMgY29tbWFuZA0KPiArICogICBTU0lGX1JF UV9SRUNWSU5HICAgMHgwMyA6IFJlY2VpdmluZyByZXF1ZXN0DQo+ICsgKiAgIFNTSUZfUkVTX1NF TkRJTkcgICAweDA0IDogU2VuZGluZyByZXNwb25zZQ0KPiArICogICBTU0lGX0JBRF9TTUJVUyAg ICAgMHgwNSA6IEJhZCBTTWJ1cyB0cmFuc2FjdGlvbg0KPiArICovDQo+ICtlbnVtIHNzaWZfc3Rh dGUgew0KPiArCVNTSUZfUkVBRFksDQo+ICsJU1NJRl9TVEFSVCwNCj4gKwlTU0lGX1NNQlVTX0NN RCwNCj4gKwlTU0lGX1JFUV9SRUNWSU5HLA0KPiArCVNTSUZfUkVTX1NFTkRJTkcsDQo+ICsJU1NJ Rl9BQk9SVElORywNCj4gKwlTU0lGX1NUQVRFX01BWA0KPiArfTsNCj4gKw0KPiArc3RydWN0IHNz aWZfYm1jX2N0eCB7DQo+ICsJc3RydWN0IGkyY19jbGllbnQgICAgICAgKmNsaWVudDsNCj4gKwlz dHJ1Y3QgbWlzY2RldmljZSAgICAgICBtaXNjZGV2Ow0KPiArCWludCAgICAgICAgICAgICAgICAg ICAgIG1zZ19pZHg7DQo+ICsJYm9vbCAgICAgICAgICAgICAgICAgICAgcGVjX3N1cHBvcnQ7DQo+ ICsJLyogc3NpZiBibWMgc3BpbmxvY2sgKi8NCj4gKwlzcGlubG9ja190ICAgICAgICAgICAgICBs b2NrOw0KPiArCXdhaXRfcXVldWVfaGVhZF90ICAgICAgIHdhaXRfcXVldWU7DQo+ICsJdTggICAg ICAgICAgICAgICAgICAgICAgcnVubmluZzsNCj4gKwllbnVtIHNzaWZfc3RhdGUgICAgICAgICBz dGF0ZTsNCj4gKwkvKiBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlICovDQo+ICsJc3RydWN0 IHRpbWVyX2xpc3QgICAgICAgcmVzcG9uc2VfdGltZXI7DQo+ICsJYm9vbCAgICAgICAgICAgICAg ICAgICAgcmVzcG9uc2VfdGltZXJfaW5pdGVkOw0KPiArCS8qIEZsYWcgdG8gaWRlbnRpZnkgYSBN dWx0aS1wYXJ0IFJlYWQgVHJhbnNhY3Rpb24gKi8NCj4gKwlib29sICAgICAgICAgICAgICAgICAg ICBpc19zaW5nbGVwYXJ0X3JlYWQ7DQo+ICsJdTggICAgICAgICAgICAgICAgICAgICAgbmJ5dGVz X3Byb2Nlc3NlZDsNCj4gKwl1OCAgICAgICAgICAgICAgICAgICAgICByZW1haW5fbGVuOw0KPiAr CXU4ICAgICAgICAgICAgICAgICAgICAgIHJlY3ZfbGVuOw0KPiArCS8qIEJsb2NrIE51bWJlciBv ZiBhIE11bHRpLXBhcnQgUmVhZCBUcmFuc2FjdGlvbiAqLw0KPiArCXU4ICAgICAgICAgICAgICAg ICAgICAgIGJsb2NrX251bTsNCj4gKwlib29sICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2F2 YWlsYWJsZTsNCj4gKwlib29sICAgICAgICAgICAgICAgICAgICByZXNwb25zZV9pbl9wcm9ncmVz czsNCj4gKwlib29sICAgICAgICAgICAgICAgICAgICBidXN5Ow0KPiArCWJvb2wgICAgICAgICAg ICAgICAgICAgIGFib3J0aW5nOw0KPiArCS8qIEJ1ZmZlciBmb3IgU1NJRiBUcmFuc2FjdGlvbiBw YXJ0Ki8NCj4gKwlzdHJ1Y3Qgc3NpZl9wYXJ0X2J1ZmZlciBwYXJ0X2J1ZjsNCj4gKwlzdHJ1Y3Qg aXBtaV9zc2lmX21zZyAgICByZXNwb25zZTsNCj4gKwlzdHJ1Y3QgaXBtaV9zc2lmX21zZyAgICBy ZXF1ZXN0Ow0KPiArfTsNCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3NpZl9ibWNfY3R4 ICp0b19zc2lmX2JtYyhzdHJ1Y3QgZmlsZSAqZmlsZSkgew0KPiArCXJldHVybiBjb250YWluZXJf b2YoZmlsZS0+cHJpdmF0ZV9kYXRhLCBzdHJ1Y3Qgc3NpZl9ibWNfY3R4LCBtaXNjZGV2KTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGNvbnN0IGNoYXIgKnN0YXRlX3RvX3N0cmluZyhlbnVtIHNzaWZf c3RhdGUgc3RhdGUpIHsNCj4gKwlzd2l0Y2ggKHN0YXRlKSB7DQo+ICsJY2FzZSBTU0lGX1JFQURZ Og0KPiArCQlyZXR1cm4gIlNTSUZfUkVBRFkiOw0KPiArCWNhc2UgU1NJRl9TVEFSVDoNCj4gKwkJ cmV0dXJuICJTU0lGX1NUQVJUIjsNCj4gKwljYXNlIFNTSUZfU01CVVNfQ01EOg0KPiArCQlyZXR1 cm4gIlNTSUZfU01CVVNfQ01EIjsNCj4gKwljYXNlIFNTSUZfUkVRX1JFQ1ZJTkc6DQo+ICsJCXJl dHVybiAiU1NJRl9SRVFfUkVDVklORyI7DQo+ICsJY2FzZSBTU0lGX1JFU19TRU5ESU5HOg0KPiAr CQlyZXR1cm4gIlNTSUZfUkVTX1NFTkRJTkciOw0KPiArCWNhc2UgU1NJRl9BQk9SVElORzoNCj4g KwkJcmV0dXJuICJTU0lGX0FCT1JUSU5HIjsNCj4gKwlkZWZhdWx0Og0KPiArCQlyZXR1cm4gIlNT SUZfU1RBVEVfVU5LTk9XTiI7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsvKiBIYW5kbGUgU1NJRiBt ZXNzYWdlIHRoYXQgd2lsbCBiZSBzZW50IHRvIHVzZXIgKi8gc3RhdGljIHNzaXplX3QNCj4gK3Nz aWZfYm1jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBj b3VudCwgbG9mZl90DQo+ICsqcHBvcykgew0KPiArCXN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZf Ym1jID0gdG9fc3NpZl9ibWMoZmlsZSk7DQo+ICsJc3RydWN0IGlwbWlfc3NpZl9tc2cgbXNnOw0K PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJc3NpemVfdCByZXQ7DQo+ICsNCj4gKwlzcGlu X2xvY2tfaXJxc2F2ZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsNCj4gKwl3aGlsZSAoIXNzaWZf Ym1jLT5yZXF1ZXN0X2F2YWlsYWJsZSkgew0KPiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZz c2lmX2JtYy0+bG9jaywgZmxhZ3MpOw0KPiArCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxP Q0spDQo+ICsJCQlyZXR1cm4gLUVBR0FJTjsNCj4gKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1 cHRpYmxlKHNzaWZfYm1jLT53YWl0X3F1ZXVlLA0KPiArCQkJCQkgICAgICAgc3NpZl9ibWMtPnJl cXVlc3RfYXZhaWxhYmxlKTsNCj4gKwkJaWYgKHJldCkNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJ CXNwaW5fbG9ja19pcnFzYXZlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOw0KPiArCX0NCj4gKw0K PiArCWlmIChjb3VudCA8IG1pbl90KHNzaXplX3QsDQo+ICsJCQkgIHNpemVvZl9maWVsZChzdHJ1 Y3QgaXBtaV9zc2lmX21zZywgbGVuKSArDQo+IHNzaWZfYm1jLT5yZXF1ZXN0LmxlbiwNCj4gKwkJ CSAgc2l6ZW9mKHN0cnVjdCBpcG1pX3NzaWZfbXNnKSkpIHsNCj4gKwkJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsNCj4gKwkJcmV0ID0gLUVJTlZBTDsNCj4g Kwl9IGVsc2Ugew0KPiArCQljb3VudCA9IG1pbl90KHNzaXplX3QsDQo+ICsJCQkgICAgICBzaXpl b2ZfZmllbGQoc3RydWN0IGlwbWlfc3NpZl9tc2csIGxlbikgKw0KPiBzc2lmX2JtYy0+cmVxdWVz dC5sZW4sDQo+ICsJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwbWlfc3NpZl9tc2cpKTsNCj4gKwkJ bWVtY3B5KCZtc2csICZzc2lmX2JtYy0+cmVxdWVzdCwgY291bnQpOw0KPiArCQlzc2lmX2JtYy0+ cmVxdWVzdF9hdmFpbGFibGUgPSBmYWxzZTsNCj4gKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm c3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsNCj4gKw0KPiArCQlyZXQgPSBjb3B5X3RvX3VzZXIoYnVm LCAmbXNnLCBjb3VudCk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIChyZXQgPCAwKSA/IHJldCA6 IGNvdW50Ow0KPiArfQ0KPiArDQo+ICsvKiBIYW5kbGUgU1NJRiBtZXNzYWdlIHRoYXQgaXMgd3Jp dHRlbiBieSB1c2VyICovIHN0YXRpYyBzc2l6ZV90DQo+ICtzc2lmX2JtY193cml0ZShzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LA0KPiArCQkJ ICAgICAgbG9mZl90ICpwcG9zKQ0KPiArew0KPiArCXN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZf Ym1jID0gdG9fc3NpZl9ibWMoZmlsZSk7DQo+ICsJc3RydWN0IGlwbWlfc3NpZl9tc2cgbXNnOw0K PiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ICsJc3NpemVfdCByZXQ7DQo+ICsNCj4gKwlpZiAo Y291bnQgPiBzaXplb2Yoc3RydWN0IGlwbWlfc3NpZl9tc2cpKQ0KPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gKw0KPiArCWlmIChjb3B5X2Zyb21fdXNlcigmbXNnLCBidWYsIGNvdW50KSkNCj4gKwkJ cmV0dXJuIC1FRkFVTFQ7DQo+ICsNCj4gKwlpZiAoIW1zZy5sZW4gfHwgY291bnQgPCBzaXplb2Zf ZmllbGQoc3RydWN0IGlwbWlfc3NpZl9tc2csIGxlbikgKyBtc2cubGVuKQ0KPiArCQlyZXR1cm4g LUVJTlZBTDsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnFzYXZlKCZzc2lmX2JtYy0+bG9jaywgZmxh Z3MpOw0KPiArCXdoaWxlIChzc2lmX2JtYy0+cmVzcG9uc2VfaW5fcHJvZ3Jlc3MpIHsNCj4gKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsNCj4gKwkJaWYg KGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKQ0KPiArCQkJcmV0dXJuIC1FQUdBSU47DQo+ICsJ CXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShzc2lmX2JtYy0+d2FpdF9xdWV1ZSwNCj4g KwkJCQkJICAgICAgICFzc2lmX2JtYy0+cmVzcG9uc2VfaW5fcHJvZ3Jlc3MpOw0KPiArCQlpZiAo cmV0KQ0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNzaWZfYm1j LT5sb2NrLCBmbGFncyk7DQo+ICsJfQ0KPiArDQo+ICsJLyoNCj4gKwkgKiBUaGUgd3JpdGUgbXVz dCBjb21wbGV0ZSBiZWZvcmUgdGhlIHJlc3BvbnNlIHRpbWVvdXQgZmlyZWQsIG90aGVyd2lzZQ0K PiArCSAqIHRoZSByZXNwb25zZSBpcyBhYm9ydGVkIGFuZCB3YWl0IGZvciBuZXh0IHJlcXVlc3QN Cj4gKwkgKiBSZXR1cm4gLUVJTlZBTCBpZiB0aGUgcmVzcG9uc2UgaXMgYWJvcnRlZA0KPiArCSAq Lw0KPiArCXJldCA9IChzc2lmX2JtYy0+cmVzcG9uc2VfdGltZXJfaW5pdGVkKSA/IDAgOiAtRUlO VkFMOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gZXhpdDsNCj4gKw0KPiArCWRlbF90aW1lcigm c3NpZl9ibWMtPnJlc3BvbnNlX3RpbWVyKTsNCj4gKwlzc2lmX2JtYy0+cmVzcG9uc2VfdGltZXJf aW5pdGVkID0gZmFsc2U7DQo+ICsNCj4gKwltZW1jcHkoJnNzaWZfYm1jLT5yZXNwb25zZSwgJm1z ZywgY291bnQpOw0KPiArCXNzaWZfYm1jLT5pc19zaW5nbGVwYXJ0X3JlYWQgPSAobXNnLmxlbiA8 PQ0KPiArTUFYX1BBWUxPQURfUEVSX1RSQU5TQUNUSU9OKTsNCj4gKw0KPiArCXNzaWZfYm1jLT5y ZXNwb25zZV9pbl9wcm9ncmVzcyA9IHRydWU7DQo+ICsNCj4gKwkvKiBzc2lmX2JtYyBub3QgYnVz eSAqLw0KPiArCXNzaWZfYm1jLT5idXN5ID0gZmFsc2U7DQo+ICsNCj4gKwkvKiBDbGVhbiBvbGQg cmVxdWVzdCBidWZmZXIgKi8NCj4gKwltZW1zZXQoJnNzaWZfYm1jLT5yZXF1ZXN0LCAwLCBzaXpl b2Yoc3RydWN0IGlwbWlfc3NpZl9tc2cpKTsNCj4gK2V4aXQ6DQo+ICsJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsNCj4gKw0KPiArCXJldHVybiAocmV0IDwg MCkgPyByZXQgOiBjb3VudDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBzc2lmX2JtY19vcGVu KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSB7DQo+ICsJc3RydWN0IHNz aWZfYm1jX2N0eCAqc3NpZl9ibWMgPSB0b19zc2lmX2JtYyhmaWxlKTsNCj4gKwlpbnQgcmV0ID0g MDsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnEoJnNzaWZfYm1jLT5sb2NrKTsNCj4gKwlpZiAoIXNz aWZfYm1jLT5ydW5uaW5nKQ0KPiArCQlzc2lmX2JtYy0+cnVubmluZyA9IDE7DQo+ICsJZWxzZQ0K PiArCQlyZXQgPSAtRUJVU1k7DQo+ICsJc3Bpbl91bmxvY2tfaXJxKCZzc2lmX2JtYy0+bG9jayk7 DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgX19wb2xsX3Qgc3Np Zl9ibWNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkgew0KPiArCXN0 cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jID0gdG9fc3NpZl9ibWMoZmlsZSk7DQo+ICsJX19w b2xsX3QgbWFzayA9IDA7DQo+ICsNCj4gKwlwb2xsX3dhaXQoZmlsZSwgJnNzaWZfYm1jLT53YWl0 X3F1ZXVlLCB3YWl0KTsNCj4gKw0KPiArCXNwaW5fbG9ja19pcnEoJnNzaWZfYm1jLT5sb2NrKTsN Cj4gKwkvKiBUaGUgcmVxdWVzdCBpcyBhdmFpbGFibGUsIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBj YW4gZ2V0IHRoZSByZXF1ZXN0ICovDQo+ICsJaWYgKHNzaWZfYm1jLT5yZXF1ZXN0X2F2YWlsYWJs ZSkNCj4gKwkJbWFzayB8PSBQT0xMSU47DQo+ICsNCj4gKwlzcGluX3VubG9ja19pcnEoJnNzaWZf Ym1jLT5sb2NrKTsNCj4gKw0KPiArCXJldHVybiBtYXNrOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50IHNzaWZfYm1jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZp bGUpIHsNCj4gKwlzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9IHRvX3NzaWZfYm1jKGZp bGUpOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycSgmc3NpZl9ibWMtPmxvY2spOw0KPiArCXNzaWZf Ym1jLT5ydW5uaW5nID0gMDsNCj4gKwlzcGluX3VubG9ja19pcnEoJnNzaWZfYm1jLT5sb2NrKTsN Cj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogU3lzdGVtIGNhbGxz IHRvIGRldmljZSBpbnRlcmZhY2UgZm9yIHVzZXIgYXBwcyAgKi8gc3RhdGljIGNvbnN0DQo+ICtz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNzaWZfYm1jX2ZvcHMgPSB7DQo+ICsJLm93bmVyCQk9IFRI SVNfTU9EVUxFLA0KPiArCS5vcGVuCQk9IHNzaWZfYm1jX29wZW4sDQo+ICsJLnJlYWQJCT0gc3Np Zl9ibWNfcmVhZCwNCj4gKwkud3JpdGUJCT0gc3NpZl9ibWNfd3JpdGUsDQo+ICsJLnJlbGVhc2UJ PSBzc2lmX2JtY19yZWxlYXNlLA0KPiArCS5wb2xsCQk9IHNzaWZfYm1jX3BvbGwsDQo+ICt9Ow0K PiArDQo+ICsvKiBDYWxsZWQgd2l0aCBzc2lmX2JtYy0+bG9jayBoZWxkLiAqLw0KPiArc3RhdGlj IHZvaWQgY29tcGxldGVfcmVzcG9uc2Uoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMpIHsN Cj4gKwkvKiBJbnZhbGlkYXRlIHJlc3BvbnNlIGluIGJ1ZmZlciB0byBkZW5vdGUgaXQgaGF2aW5n IGJlZW4gc2VudC4gKi8NCj4gKwlzc2lmX2JtYy0+cmVzcG9uc2UubGVuID0gMDsNCj4gKwlzc2lm X2JtYy0+cmVzcG9uc2VfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsNCj4gKwlzc2lmX2JtYy0+bmJ5dGVz X3Byb2Nlc3NlZCA9IDA7DQo+ICsJc3NpZl9ibWMtPnJlbWFpbl9sZW4gPSAwOw0KPiArCXNzaWZf Ym1jLT5idXN5ID0gZmFsc2U7DQo+ICsJbWVtc2V0KCZzc2lmX2JtYy0+cGFydF9idWYsIDAsIHNp emVvZihzdHJ1Y3Qgc3NpZl9wYXJ0X2J1ZmZlcikpOw0KPiArCXdha2VfdXBfYWxsKCZzc2lmX2Jt Yy0+d2FpdF9xdWV1ZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHJlc3BvbnNlX3RpbWVv dXQoc3RydWN0IHRpbWVyX2xpc3QgKnQpIHsNCj4gKwlzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lm X2JtYyA9IGZyb21fdGltZXIoc3NpZl9ibWMsIHQsIHJlc3BvbnNlX3RpbWVyKTsNCj4gKwl1bnNp Z25lZCBsb25nIGZsYWdzOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNzaWZfYm1jLT5s b2NrLCBmbGFncyk7DQo+ICsNCj4gKwkvKiBEbyBub3RoaW5nIGlmIHRoZSByZXNwb25zZSBpcyBp biBwcm9ncmVzcyAqLw0KPiArCWlmICghc3NpZl9ibWMtPnJlc3BvbnNlX2luX3Byb2dyZXNzKSB7 DQo+ICsJCS8qIFJlY292ZXIgc3NpZl9ibWMgZnJvbSBidXN5ICovDQo+ICsJCXNzaWZfYm1jLT5i dXN5ID0gZmFsc2U7DQo+ICsJCXNzaWZfYm1jLT5yZXNwb25zZV90aW1lcl9pbml0ZWQgPSBmYWxz ZTsNCj4gKwkJLyogU2V0IGFib3J0aW5nIGZsYWcgKi8NCj4gKwkJc3NpZl9ibWMtPmFib3J0aW5n ID0gdHJ1ZTsNCj4gKwl9DQo+ICsNCj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzc2lmX2Jt Yy0+bG9jaywgZmxhZ3MpOyB9DQo+ICsNCj4gKy8qIENhbGxlZCB3aXRoIHNzaWZfYm1jLT5sb2Nr IGhlbGQuICovDQo+ICtzdGF0aWMgdm9pZCBoYW5kbGVfcmVxdWVzdChzdHJ1Y3Qgc3NpZl9ibWNf Y3R4ICpzc2lmX2JtYykgew0KPiArCS8qIHNldCBzc2lmX2JtYyB0byBidXN5IHdhaXRpbmcgZm9y IHJlc3BvbnNlICovDQo+ICsJc3NpZl9ibWMtPmJ1c3kgPSB0cnVlOw0KPiArCS8qIFJlcXVlc3Qg bWVzc2FnZSBpcyBhdmFpbGFibGUgdG8gcHJvY2VzcyAqLw0KPiArCXNzaWZfYm1jLT5yZXF1ZXN0 X2F2YWlsYWJsZSA9IHRydWU7DQo+ICsJLyogQ2xlYW4gb2xkIHJlc3BvbnNlIGJ1ZmZlciAqLw0K PiArCW1lbXNldCgmc3NpZl9ibWMtPnJlc3BvbnNlLCAwLCBzaXplb2Yoc3RydWN0IGlwbWlfc3Np Zl9tc2cpKTsNCj4gKwkvKiBUaGlzIGlzIHRoZSBuZXcgUkVBRCByZXF1ZXN0LiovDQo+ICsJd2Fr ZV91cF9hbGwoJnNzaWZfYm1jLT53YWl0X3F1ZXVlKTsNCj4gKw0KPiArCS8qIEFybWVkIHRpbWVy IHRvIHJlY292ZXIgc2xhdmUgZnJvbSBidXN5IHN0YXRlIGluIGNhc2Ugb2Ygbm8gcmVzcG9uc2Ug Ki8NCj4gKwlpZiAoIXNzaWZfYm1jLT5yZXNwb25zZV90aW1lcl9pbml0ZWQpIHsNCj4gKwkJdGlt ZXJfc2V0dXAoJnNzaWZfYm1jLT5yZXNwb25zZV90aW1lciwgcmVzcG9uc2VfdGltZW91dCwgMCk7 DQo+ICsJCXNzaWZfYm1jLT5yZXNwb25zZV90aW1lcl9pbml0ZWQgPSB0cnVlOw0KPiArCX0NCj4g Kwltb2RfdGltZXIoJnNzaWZfYm1jLT5yZXNwb25zZV90aW1lciwgamlmZmllcyArDQo+ICttc2Vj c190b19qaWZmaWVzKFJFU1BPTlNFX1RJTUVPVVQpKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgY2FsY3VsYXRlX3Jlc3BvbnNlX3BhcnRfcGVjKHN0cnVjdCBzc2lmX3BhcnRfYnVmZmVyICpw YXJ0KQ0KPiArew0KPiArCXU4IGFkZHIgPSBwYXJ0LT5hZGRyZXNzOw0KPiArDQo+ICsJLyogUEVD IC0gU3RhcnQgUmVhZCBBZGRyZXNzICovDQo+ICsJcGFydC0+cGVjID0gaTJjX3NtYnVzX3BlYygw LCAmYWRkciwgMSk7DQo+ICsJLyogUEVDIC0gU1NJRiBDb21tYW5kICovDQo+ICsJcGFydC0+cGVj ID0gaTJjX3NtYnVzX3BlYyhwYXJ0LT5wZWMsICZwYXJ0LT5zbWJ1c19jbWQsIDEpOw0KPiArCS8q IFBFQyAtIFJlc3RhcnQgV3JpdGUgQWRkcmVzcyAqLw0KPiArCWFkZHIgPSBhZGRyIHwgMHgwMTsN Cj4gKwlwYXJ0LT5wZWMgPSBpMmNfc21idXNfcGVjKHBhcnQtPnBlYywgJmFkZHIsIDEpOw0KPiAr CXBhcnQtPnBlYyA9IGkyY19zbWJ1c19wZWMocGFydC0+cGVjLCAmcGFydC0+bGVuZ3RoLCAxKTsN Cj4gKwlpZiAocGFydC0+bGVuZ3RoKQ0KPiArCQlwYXJ0LT5wZWMgPSBpMmNfc21idXNfcGVjKHBh cnQtPnBlYywgcGFydC0+cGF5bG9hZCwNCj4gcGFydC0+bGVuZ3RoKTsgfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBzZXRfc2luZ2xlcGFydF9yZXNwb25zZV9idWZmZXIoc3RydWN0IHNzaWZfYm1jX2N0 eA0KPiArKnNzaWZfYm1jKSB7DQo+ICsJc3RydWN0IHNzaWZfcGFydF9idWZmZXIgKnBhcnQgPSAm c3NpZl9ibWMtPnBhcnRfYnVmOw0KPiArDQo+ICsJcGFydC0+YWRkcmVzcyA9IEdFVF84QklUX0FE RFIoc3NpZl9ibWMtPmNsaWVudC0+YWRkcik7DQo+ICsJcGFydC0+bGVuZ3RoID0gKHU4KXNzaWZf Ym1jLT5yZXNwb25zZS5sZW47DQo+ICsNCj4gKwkvKiBDbGVhciB0aGUgcmVzdCB0byAwICovDQo+ ICsJbWVtc2V0KHBhcnQtPnBheWxvYWQgKyBwYXJ0LT5sZW5ndGgsIDAsDQo+IE1BWF9QQVlMT0FE X1BFUl9UUkFOU0FDVElPTiAtIHBhcnQtPmxlbmd0aCk7DQo+ICsJbWVtY3B5KCZwYXJ0LT5wYXls b2FkWzBdLCAmc3NpZl9ibWMtPnJlc3BvbnNlLnBheWxvYWRbMF0sDQo+ICtwYXJ0LT5sZW5ndGgp OyB9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHNldF9tdWx0aXBhcnRfcmVzcG9uc2VfYnVmZmVyKHN0 cnVjdCBzc2lmX2JtY19jdHgNCj4gKypzc2lmX2JtYykgew0KPiArCXN0cnVjdCBzc2lmX3BhcnRf YnVmZmVyICpwYXJ0ID0gJnNzaWZfYm1jLT5wYXJ0X2J1ZjsNCj4gKwl1OCBwYXJ0X2xlbiA9IDA7 DQo+ICsNCj4gKwlwYXJ0LT5hZGRyZXNzID0gR0VUXzhCSVRfQUREUihzc2lmX2JtYy0+Y2xpZW50 LT5hZGRyKTsNCj4gKwlzd2l0Y2ggKHBhcnQtPnNtYnVzX2NtZCkgew0KPiArCWNhc2UgU1NJRl9J UE1JX01VTFRJUEFSVF9SRUFEX1NUQVJUOg0KPiArCQkvKg0KPiArCQkgKiBSZWFkIFN0YXJ0IGxl bmd0aCBpcyAzMiBieXRlcy4NCj4gKwkJICogUmVhZCBTdGFydCB0cmFuc2ZlciBmaXJzdCAzMCBi eXRlcyBvZiBJUE1JIHJlc3BvbnNlDQo+ICsJCSAqIGFuZCAyIHNwZWNpYWwgY29kZSAweDAwLCAw eDAxLg0KPiArCQkgKi8NCj4gKwkJc3NpZl9ibWMtPm5ieXRlc19wcm9jZXNzZWQgPSAwOw0KPiAr CQlzc2lmX2JtYy0+YmxvY2tfbnVtID0gMDsNCj4gKwkJcGFydC0+bGVuZ3RoID0gTUFYX1BBWUxP QURfUEVSX1RSQU5TQUNUSU9OOw0KPiArCQlwYXJ0X2xlbiA9IE1BWF9JUE1JX0RBVEFfUEVSX1NU QVJUX1RSQU5TQUNUSU9OOw0KPiArCQlzc2lmX2JtYy0+cmVtYWluX2xlbiA9IHNzaWZfYm1jLT5y ZXNwb25zZS5sZW4gLSBwYXJ0X2xlbjsNCj4gKw0KPiArCQlwYXJ0LT5wYXlsb2FkWzBdID0gMHgw MDsgLyogU3RhcnQgRmxhZyAqLw0KPiArCQlwYXJ0LT5wYXlsb2FkWzFdID0gMHgwMTsgLyogU3Rh cnQgRmxhZyAqLw0KPiArDQo+ICsJCW1lbWNweSgmcGFydC0+cGF5bG9hZFsyXSwgJnNzaWZfYm1j LT5yZXNwb25zZS5wYXlsb2FkWzBdLA0KPiBwYXJ0X2xlbik7DQo+ICsJCWJyZWFrOw0KPiArDQo+ ICsJY2FzZSBTU0lGX0lQTUlfTVVMVElQQVJUX1JFQURfTUlERExFOg0KPiArCQkvKg0KPiArCQkg KiBJUE1JIFJFQUQgTWlkZGxlIG9yIFJFQUQgRW5kIG1lc3NhZ2VzIGNhbiBjYXJyeSB1cCB0byAz MQ0KPiBieXRlcw0KPiArCQkgKiBJUE1JIGRhdGEgcGx1cyBibG9jayBudW1iZXIgYnl0ZS4NCj4g KwkJICovDQo+ICsJCWlmIChzc2lmX2JtYy0+cmVtYWluX2xlbiA8PQ0KPiBNQVhfSVBNSV9EQVRB X1BFUl9NSURETEVfVFJBTlNBQ1RJT04pIHsNCj4gKwkJCS8qDQo+ICsJCQkgKiBUaGlzIGlzIFJF QUQgRW5kIG1lc3NhZ2UNCj4gKwkJCSAqICBSZXR1cm4gbGVuZ3RoIGlzIHRoZSByZW1haW5pbmcg cmVzcG9uc2UgZGF0YSBsZW5ndGgNCj4gKwkJCSAqICBwbHVzIGJsb2NrIG51bWJlcg0KPiArCQkJ ICogIEJsb2NrIG51bWJlciAweEZGIGlzIHRvIGluZGljYXRlIHRoaXMgaXMgbGFzdCBtZXNzYWdl DQo+ICsJCQkgKg0KPiArCQkJICovDQo+ICsJCQkvKiBDbGVhbiB0aGUgYnVmZmVyICovDQo+ICsJ CQltZW1zZXQoJnBhcnQtPnBheWxvYWRbMF0sIDAsDQo+IE1BWF9QQVlMT0FEX1BFUl9UUkFOU0FD VElPTik7DQo+ICsJCQlwYXJ0LT5sZW5ndGggPSBzc2lmX2JtYy0+cmVtYWluX2xlbiArIDE7DQo+ ICsJCQlwYXJ0X2xlbiA9IHNzaWZfYm1jLT5yZW1haW5fbGVuOw0KPiArCQkJc3NpZl9ibWMtPmJs b2NrX251bSA9IDB4RkY7DQo+ICsJCQlwYXJ0LT5wYXlsb2FkWzBdID0gc3NpZl9ibWMtPmJsb2Nr X251bTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCS8qDQo+ICsJCQkgKiBUaGlzIGlzIFJFQUQgTWlk ZGxlIG1lc3NhZ2UNCj4gKwkJCSAqICBSZXNwb25zZSBsZW5ndGggaXMgdGhlIG1heGltdW0gU01C VVMgdHJhbnNmZXIgbGVuZ3RoDQo+ICsJCQkgKiAgQmxvY2sgbnVtYmVyIGJ5dGUgaXMgaW5jcmVt ZW50ZWQNCj4gKwkJCSAqIFJldHVybiBsZW5ndGggaXMgbWF4aW11bSBTTUJVUyB0cmFuc2ZlciBs ZW5ndGgNCj4gKwkJCSAqLw0KPiArCQkJcGFydC0+bGVuZ3RoID0gTUFYX1BBWUxPQURfUEVSX1RS QU5TQUNUSU9OOw0KPiArCQkJcGFydF9sZW4gPSBNQVhfSVBNSV9EQVRBX1BFUl9NSURETEVfVFJB TlNBQ1RJT047DQo+ICsJCQlwYXJ0LT5wYXlsb2FkWzBdID0gc3NpZl9ibWMtPmJsb2NrX251bTsN Cj4gKwkJCXNzaWZfYm1jLT5ibG9ja19udW0rKzsNCj4gKwkJfQ0KPiArDQo+ICsJCXNzaWZfYm1j LT5yZW1haW5fbGVuIC09IHBhcnRfbGVuOw0KPiArCQltZW1jcHkoJnBhcnQtPnBheWxvYWRbMV0s IHNzaWZfYm1jLT5yZXNwb25zZS5wYXlsb2FkICsNCj4gc3NpZl9ibWMtPm5ieXRlc19wcm9jZXNz ZWQsDQo+ICsJCSAgICAgICBwYXJ0X2xlbik7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJZGVmYXVs dDoNCj4gKwkJLyogRG8gbm90IGV4cGVjdCB0byBnbyB0byB0aGlzIGNhc2UgKi8NCj4gKwkJZGV2 X2Vycigmc3NpZl9ibWMtPmNsaWVudC0+ZGV2LCAiJXM6IFVuZXhwZWN0ZWQgU01CdXMgY29tbWFu ZA0KPiAweCV4XG4iLA0KPiArCQkJX19mdW5jX18sIHBhcnQtPnNtYnVzX2NtZCk7DQo+ICsJCWJy ZWFrOw0KPiArCX0NCj4gKw0KPiArCXNzaWZfYm1jLT5uYnl0ZXNfcHJvY2Vzc2VkICs9IHBhcnRf bGVuOyB9DQo+ICsNCj4gK3N0YXRpYyBib29sIHN1cHBvcnRlZF9yZWFkX2NtZCh1OCBjbWQpDQo+ ICt7DQo+ICsJaWYgKGNtZCA9PSBTU0lGX0lQTUlfU0lOR0xFUEFSVF9SRUFEIHx8DQo+ICsJICAg IGNtZCA9PSBTU0lGX0lQTUlfTVVMVElQQVJUX1JFQURfU1RBUlQgfHwNCj4gKwkgICAgY21kID09 IFNTSUZfSVBNSV9NVUxUSVBBUlRfUkVBRF9NSURETEUpDQo+ICsJCXJldHVybiB0cnVlOw0KPiAr DQo+ICsJcmV0dXJuIGZhbHNlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBzdXBwb3J0ZWRf d3JpdGVfY21kKHU4IGNtZCkgew0KPiArCWlmIChjbWQgPT0gU1NJRl9JUE1JX1NJTkdMRVBBUlRf V1JJVEUgfHwNCj4gKwkgICAgY21kID09IFNTSUZfSVBNSV9NVUxUSVBBUlRfV1JJVEVfU1RBUlQg fHwNCj4gKwkgICAgY21kID09IFNTSUZfSVBNSV9NVUxUSVBBUlRfV1JJVEVfTUlERExFIHx8DQo+ ICsJICAgIGNtZCA9PSBTU0lGX0lQTUlfTVVMVElQQVJUX1dSSVRFX0VORCkNCj4gKwkJcmV0dXJu IHRydWU7DQo+ICsNCj4gKwlyZXR1cm4gZmFsc2U7DQo+ICt9DQo+ICsNCj4gKy8qIFByb2Nlc3Mg dGhlIElQTUkgcmVzcG9uc2UgdGhhdCB3aWxsIGJlIHJlYWQgYnkgbWFzdGVyICovIHN0YXRpYyB2 b2lkDQo+ICtoYW5kbGVfcmVhZF9wcm9jZXNzZWQoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9i bWMsIHU4ICp2YWwpIHsNCj4gKwlzdHJ1Y3Qgc3NpZl9wYXJ0X2J1ZmZlciAqcGFydCA9ICZzc2lm X2JtYy0+cGFydF9idWY7DQo+ICsNCj4gKwkvKiBtc2dfaWR4IHN0YXJ0IGZyb20gMCAqLw0KPiAr CWlmIChwYXJ0LT5pbmRleCA8IHBhcnQtPmxlbmd0aCkNCj4gKwkJKnZhbCA9IHBhcnQtPnBheWxv YWRbcGFydC0+aW5kZXhdOw0KPiArCWVsc2UgaWYgKHBhcnQtPmluZGV4ID09IHBhcnQtPmxlbmd0 aCAmJiBzc2lmX2JtYy0+cGVjX3N1cHBvcnQpDQo+ICsJCSp2YWwgPSBwYXJ0LT5wZWM7DQo+ICsJ ZWxzZQ0KPiArCQkqdmFsID0gMDsNCj4gKw0KPiArCXBhcnQtPmluZGV4Kys7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGhhbmRsZV93cml0ZV9yZWNlaXZlZChzdHJ1Y3Qgc3NpZl9ibWNfY3R4 ICpzc2lmX2JtYywgdTgNCj4gKyp2YWwpIHsNCj4gKwkvKg0KPiArCSAqIFRoZSBtc2dfaWR4IG11 c3QgYmUgMSB3aGVuIGZpcnN0IGVudGVyIFNTSUZfUkVRX1JFQ1ZJTkcgc3RhdGUNCj4gKwkgKiBB bmQgaXQgd291bGQgbmV2ZXIgZXhjZWVkZWQgMzYgYnl0ZXMgaW5jbHVkZWQgdGhlIDMyIGJ5dGVz IG1heA0KPiBwYXlsb2FkICsNCj4gKwkgKiB0aGUgYWRkcmVzcyArIHRoZSBjb21tYW5kICsgdGhl IGxlbiBhbmQgdGhlIFBFQy4NCj4gKwkgKi8NCj4gKwlpZiAoc3NpZl9ibWMtPm1zZ19pZHggPCAx ICB8fCBzc2lmX2JtYy0+bXNnX2lkeCA+IE1BWF9UUkFOU0FDVElPTikNCj4gKwkJcmV0dXJuOw0K PiArDQo+ICsJaWYgKHNzaWZfYm1jLT5tc2dfaWR4ID09IDEpIHsNCj4gKwkJc3NpZl9ibWMtPnBh cnRfYnVmLmxlbmd0aCA9ICp2YWw7DQo+ICsJCXNzaWZfYm1jLT5wYXJ0X2J1Zi5pbmRleCA9IDA7 DQo+ICsJfSBlbHNlIHsNCj4gKwkJc3NpZl9ibWMtPnBhcnRfYnVmLnBheWxvYWRbc3NpZl9ibWMt PnBhcnRfYnVmLmluZGV4KytdID0gKnZhbDsNCj4gKwl9DQo+ICsNCj4gKwlzc2lmX2JtYy0+bXNn X2lkeCsrOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCB2YWxpZGF0ZV9yZXF1ZXN0X3BhcnQo c3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMpIHsNCj4gKwlzdHJ1Y3Qgc3NpZl9wYXJ0X2J1 ZmZlciAqcGFydCA9ICZzc2lmX2JtYy0+cGFydF9idWY7DQo+ICsJYm9vbCByZXQgPSB0cnVlOw0K PiArCXU4IGNwZWM7DQo+ICsJdTggYWRkcjsNCj4gKw0KPiArCWlmIChwYXJ0LT5pbmRleCA9PSBw YXJ0LT5sZW5ndGgpIHsNCj4gKwkJLyogUEVDIGlzIG5vdCBpbmNsdWRlZCAqLw0KPiArCQlzc2lm X2JtYy0+cGVjX3N1cHBvcnQgPSBmYWxzZTsNCj4gKwkJcmV0ID0gdHJ1ZTsNCj4gKwkJZ290byBl eGl0Ow0KPiArCX0NCj4gKw0KPiArCWlmIChwYXJ0LT5pbmRleCAhPSBwYXJ0LT5sZW5ndGggKyAx KSB7DQo+ICsJCXJldCA9IGZhbHNlOw0KPiArCQlnb3RvIGV4aXQ7DQo+ICsJfQ0KPiArDQo+ICsJ LyogUEVDIGlzIGluY2x1ZGVkICovDQo+ICsJc3NpZl9ibWMtPnBlY19zdXBwb3J0ID0gdHJ1ZTsN Cj4gKwlwYXJ0LT5wZWMgPSBwYXJ0LT5wYXlsb2FkW3BhcnQtPmxlbmd0aF07DQo+ICsJYWRkciA9 IEdFVF84QklUX0FERFIoc3NpZl9ibWMtPmNsaWVudC0+YWRkcik7DQo+ICsJY3BlYyA9IGkyY19z bWJ1c19wZWMoMCwgJmFkZHIsIDEpOw0KPiArCWNwZWMgPSBpMmNfc21idXNfcGVjKGNwZWMsICZw YXJ0LT5zbWJ1c19jbWQsIDEpOw0KPiArCWNwZWMgPSBpMmNfc21idXNfcGVjKGNwZWMsICZwYXJ0 LT5sZW5ndGgsIDEpOw0KPiArCS8qDQo+ICsJICogQXMgU01CdXMgc3BlY2lmaWNhdGlvbiBkb2Vz IG5vdCBhbGxvdyB0aGUgbGVuZ3RoDQo+ICsJICogKGJ5dGUgY291bnQpIGluIHRoZSBXcml0ZS1C bG9jayBwcm90b2NvbCB0byBiZSB6ZXJvLg0KPiArCSAqIFRoZXJlZm9yZSwgaXQgaXMgaWxsZWdh bCB0byBoYXZlIHRoZSBsYXN0IE1pZGRsZQ0KPiArCSAqIHRyYW5zYWN0aW9uIGluIHRoZSBzZXF1 ZW5jZSBjYXJyeSAzMi1ieXRlIGFuZCBoYXZlDQo+ICsJICogYSBsZW5ndGggb2Yg4oCYMOKAmSBp biB0aGUgRW5kIHRyYW5zYWN0aW9uLg0KPiArCSAqIEJ1dCBzb21lIHVzZXJzIG1heSB0cnkgdG8g dXNlIHRoaXMgd2F5IGFuZCB3ZSBzaG91bGQNCj4gKwkgKiBwcmV2ZW50IHNzaWZfYm1jIGRyaXZl ciBicm9rZW4gaW4gdGhpcyBjYXNlLg0KPiArCSAqLw0KPiArCWlmIChwYXJ0LT5sZW5ndGgpDQo+ ICsJCWNwZWMgPSBpMmNfc21idXNfcGVjKGNwZWMsIHBhcnQtPnBheWxvYWQsIHBhcnQtPmxlbmd0 aCk7DQo+ICsNCj4gKwlpZiAoY3BlYyAhPSBwYXJ0LT5wZWMpDQo+ICsJCXJldCA9IGZhbHNlOw0K PiArDQo+ICtleGl0Og0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IHByb2Nlc3NfcmVxdWVzdF9wYXJ0KHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jKSB7DQo+ ICsJc3RydWN0IHNzaWZfcGFydF9idWZmZXIgKnBhcnQgPSAmc3NpZl9ibWMtPnBhcnRfYnVmOw0K PiArCXVuc2lnbmVkIGludCBsZW47DQo+ICsNCj4gKwlzd2l0Y2ggKHBhcnQtPnNtYnVzX2NtZCkg ew0KPiArCWNhc2UgU1NJRl9JUE1JX1NJTkdMRVBBUlRfV1JJVEU6DQo+ICsJCS8qIHNhdmUgdGhl IHdob2xlIHBhcnQgdG8gcmVxdWVzdCovDQo+ICsJCXNzaWZfYm1jLT5yZXF1ZXN0LmxlbiA9IHBh cnQtPmxlbmd0aDsNCj4gKwkJbWVtY3B5KHNzaWZfYm1jLT5yZXF1ZXN0LnBheWxvYWQsIHBhcnQt PnBheWxvYWQsIHBhcnQtPmxlbmd0aCk7DQo+ICsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBTU0lG X0lQTUlfTVVMVElQQVJUX1dSSVRFX1NUQVJUOg0KPiArCQlzc2lmX2JtYy0+cmVxdWVzdC5sZW4g PSAwOw0KPiArDQo+ICsJCWZhbGx0aHJvdWdoOw0KPiArCWNhc2UgU1NJRl9JUE1JX01VTFRJUEFS VF9XUklURV9NSURETEU6DQo+ICsJY2FzZSBTU0lGX0lQTUlfTVVMVElQQVJUX1dSSVRFX0VORDoN Cj4gKwkJbGVuID0gc3NpZl9ibWMtPnJlcXVlc3QubGVuICsgcGFydC0+bGVuZ3RoOw0KPiArCQkv KiBEbyB0aGUgYm91bmQgY2hlY2sgaGVyZSwgbm90IGFsbG93IHRoZSByZXF1ZXN0IGxlbiBleGNl ZWQgMjU0DQo+IGJ5dGVzICovDQo+ICsJCWlmIChsZW4gPiBJUE1JX1NTSUZfUEFZTE9BRF9NQVgp IHsNCj4gKwkJCWRldl93YXJuKCZzc2lmX2JtYy0+Y2xpZW50LT5kZXYsDQo+ICsJCQkJICJXYXJu OiBSZXF1ZXN0IGV4Y2VlZGVkIDI1NCBieXRlcywgYWJvcnRpbmciKTsNCj4gKwkJCS8qIFJlcXVl c3QgdG9vIGxvbmcsIGFib3J0aW5nICovDQo+ICsJCQlzc2lmX2JtYy0+YWJvcnRpbmcgPSAgdHJ1 ZTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCW1lbWNweShzc2lmX2JtYy0+cmVxdWVzdC5wYXlsb2Fk ICsgc3NpZl9ibWMtPnJlcXVlc3QubGVuLA0KPiArCQkJICAgICAgIHBhcnQtPnBheWxvYWQsIHBh cnQtPmxlbmd0aCk7DQo+ICsJCQlzc2lmX2JtYy0+cmVxdWVzdC5sZW4gKz0gcGFydC0+bGVuZ3Ro Ow0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCS8qIERvIG5vdCBleHBl Y3QgdG8gZ28gdG8gdGhpcyBjYXNlICovDQo+ICsJCWRldl9lcnIoJnNzaWZfYm1jLT5jbGllbnQt PmRldiwgIiVzOiBVbmV4cGVjdGVkIFNNQnVzIGNvbW1hbmQNCj4gMHgleFxuIiwNCj4gKwkJCV9f ZnVuY19fLCBwYXJ0LT5zbWJ1c19jbWQpOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc21idXNfY21kKHN0cnVjdCBzc2lmX2JtY19jdHggKnNz aWZfYm1jLCB1OCAqdmFsKSB7DQo+ICsJLyogU01CVVMgY29tbWFuZCBjYW4gdmFyeSAoc2luZ2xl IG9yIG11bHRpLXBhcnQpICovDQo+ICsJc3NpZl9ibWMtPnBhcnRfYnVmLnNtYnVzX2NtZCA9ICp2 YWw7DQo+ICsJc3NpZl9ibWMtPm1zZ19pZHggPSAxOw0KPiArCW1lbXNldCgmc3NpZl9ibWMtPnBh cnRfYnVmLnBheWxvYWRbMF0sIDAsDQo+ICtNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT04pOw0K PiArDQo+ICsJaWYgKCp2YWwgPT0gU1NJRl9JUE1JX1NJTkdMRVBBUlRfV1JJVEUgfHwgKnZhbCA9 PQ0KPiBTU0lGX0lQTUlfTVVMVElQQVJUX1dSSVRFX1NUQVJUKSB7DQo+ICsJCS8qDQo+ICsJCSAq IFRoZSByZXNwb25zZSBtYXliZSBub3QgY29tZSBpbi10aW1lLCBjYXVzaW5nIGhvc3QgU1NJRiBk cml2ZXINCj4gKwkJICogdG8gdGltZW91dCBhbmQgcmVzZW5kIGEgbmV3IHJlcXVlc3QuIEluIHN1 Y2ggY2FzZSBjaGVjayBmb3INCj4gKwkJICogcGVuZGluZyByZXNwb25zZSBhbmQgY2xlYXIgaXQN Cj4gKwkJICovDQo+ICsJCWlmIChzc2lmX2JtYy0+cmVzcG9uc2VfaW5fcHJvZ3Jlc3MpDQo+ICsJ CQljb21wbGV0ZV9yZXNwb25zZShzc2lmX2JtYyk7DQo+ICsNCj4gKwkJLyogVGhpcyBpcyBuZXcg cmVxdWVzdCwgZmxpcCBhYm9ydGluZyBmbGFnIGlmIHNldCAqLw0KPiArCQlpZiAoc3NpZl9ibWMt PmFib3J0aW5nKQ0KPiArCQkJc3NpZl9ibWMtPmFib3J0aW5nID0gZmFsc2U7DQo+ICsJfQ0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBvbl9yZWFkX3JlcXVlc3RlZF9ldmVudChzdHJ1Y3Qgc3Np Zl9ibWNfY3R4ICpzc2lmX2JtYywgdTgNCj4gKyp2YWwpIHsNCj4gKwlpZiAoc3NpZl9ibWMtPnN0 YXRlID09IFNTSUZfUkVBRFkgfHwNCj4gKwkgICAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfU1RB UlQgfHwNCj4gKwkgICAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfUkVRX1JFQ1ZJTkcgfHwNCj4g KwkgICAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfUkVTX1NFTkRJTkcpIHsNCj4gKwkJZGV2X3dh cm4oJnNzaWZfYm1jLT5jbGllbnQtPmRldiwNCj4gKwkJCSAiV2FybjogJXMgdW5leHBlY3RlZCBS RUFEIFJFUVVFU1RFRCBpbiBzdGF0ZT0lc1xuIiwNCj4gKwkJCSBfX2Z1bmNfXywgc3RhdGVfdG9f c3RyaW5nKHNzaWZfYm1jLT5zdGF0ZSkpOw0KPiArCQlzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX0FC T1JUSU5HOw0KPiArCQkqdmFsID0gMDsNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJfSBlbHNlIGlm IChzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TTUJVU19DTUQpIHsNCj4gKwkJaWYgKCFzdXBwb3J0 ZWRfcmVhZF9jbWQoc3NpZl9ibWMtPnBhcnRfYnVmLnNtYnVzX2NtZCkpIHsNCj4gKwkJCWRldl93 YXJuKCZzc2lmX2JtYy0+Y2xpZW50LT5kZXYsICJXYXJuOiBVbmtub3duIFNNQnVzDQo+IHJlYWQg Y29tbWFuZD0weCV4IiwNCj4gKwkJCQkgc3NpZl9ibWMtPnBhcnRfYnVmLnNtYnVzX2NtZCk7DQo+ ICsJCQlzc2lmX2JtYy0+YWJvcnRpbmcgPSB0cnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKHNz aWZfYm1jLT5hYm9ydGluZykNCj4gKwkJCXNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfQUJPUlRJTkc7 DQo+ICsJCWVsc2UNCj4gKwkJCXNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfUkVTX1NFTkRJTkc7DQo+ ICsJfQ0KPiArDQo+ICsJc3NpZl9ibWMtPm1zZ19pZHggPSAwOw0KPiArDQo+ICsJLyogU2VuZCAw IGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCAqLw0KPiArCWlmICghc3NpZl9ibWMtPnJlc3Bv bnNlX2luX3Byb2dyZXNzIHx8IHNzaWZfYm1jLT5zdGF0ZSA9PQ0KPiBTU0lGX0FCT1JUSU5HKSB7 DQo+ICsJCSp2YWwgPSAwOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHNzaWZf Ym1jLT5pc19zaW5nbGVwYXJ0X3JlYWQpDQo+ICsJCXNldF9zaW5nbGVwYXJ0X3Jlc3BvbnNlX2J1 ZmZlcihzc2lmX2JtYyk7DQo+ICsJZWxzZQ0KPiArCQlzZXRfbXVsdGlwYXJ0X3Jlc3BvbnNlX2J1 ZmZlcihzc2lmX2JtYyk7DQo+ICsNCj4gKwljYWxjdWxhdGVfcmVzcG9uc2VfcGFydF9wZWMoJnNz aWZfYm1jLT5wYXJ0X2J1Zik7DQo+ICsJc3NpZl9ibWMtPnBhcnRfYnVmLmluZGV4ID0gMDsNCj4g KwkqdmFsID0gc3NpZl9ibWMtPnBhcnRfYnVmLmxlbmd0aDsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHZvaWQgb25fcmVhZF9wcm9jZXNzZWRfZXZlbnQoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9i bWMsIHU4DQo+ICsqdmFsKSB7DQo+ICsJaWYgKHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1JFQURZ IHx8DQo+ICsJICAgIHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1NUQVJUIHx8DQo+ICsJICAgIHNz aWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1JFUV9SRUNWSU5HIHx8DQo+ICsJICAgIHNzaWZfYm1jLT5z dGF0ZSA9PSBTU0lGX1NNQlVTX0NNRCkgew0KPiArCQlkZXZfd2Fybigmc3NpZl9ibWMtPmNsaWVu dC0+ZGV2LA0KPiArCQkJICJXYXJuOiAlcyB1bmV4cGVjdGVkIFJFQUQgUFJPQ0VTU0VEIGluIHN0 YXRlPSVzXG4iLA0KPiArCQkJIF9fZnVuY19fLCBzdGF0ZV90b19zdHJpbmcoc3NpZl9ibWMtPnN0 YXRlKSk7DQo+ICsJCXNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfQUJPUlRJTkc7DQo+ICsJCSp2YWwg PSAwOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJLyogU2VuZCAwIGlmIHRoZXJlIGlz IG5vdGhpbmcgdG8gc2VuZCAqLw0KPiArCWlmICghc3NpZl9ibWMtPnJlc3BvbnNlX2luX3Byb2dy ZXNzIHx8IHNzaWZfYm1jLT5zdGF0ZSA9PQ0KPiBTU0lGX0FCT1JUSU5HKSB7DQo+ICsJCSp2YWwg PSAwOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJaGFuZGxlX3JlYWRfcHJvY2Vzc2Vk KHNzaWZfYm1jLCB2YWwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBvbl93cml0ZV9yZXF1 ZXN0ZWRfZXZlbnQoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMsIHU4DQo+ICsqdmFsKSB7 DQo+ICsJaWYgKHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1JFQURZIHx8IHNzaWZfYm1jLT5zdGF0 ZSA9PQ0KPiBTU0lGX1NNQlVTX0NNRCkgew0KPiArCQlzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX1NU QVJUOw0KPiArDQo+ICsJfSBlbHNlIGlmIChzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TVEFSVCB8 fA0KPiArCQkgICBzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9SRVFfUkVDVklORyB8fA0KPiArCQkg ICBzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9SRVNfU0VORElORykgew0KPiArCQlkZXZfd2Fybigm c3NpZl9ibWMtPmNsaWVudC0+ZGV2LA0KPiArCQkJICJXYXJuOiAlcyB1bmV4cGVjdGVkIFdSSVRF IFJFUVVFU1QgaW4gc3RhdGU9JXNcbiIsDQo+ICsJCQkgX19mdW5jX18sIHN0YXRlX3RvX3N0cmlu Zyhzc2lmX2JtYy0+c3RhdGUpKTsNCj4gKwkJc3NpZl9ibWMtPnN0YXRlID0gU1NJRl9BQk9SVElO RzsNCj4gKwkJcmV0dXJuOw0KDQpXaGVuIG1hc3RlciByZWFkIGhlcmUganVzdCByZXR1cm4uIA0K SW4gaTJjIHNsYXZlIGRldmljZSBkcml2ZXIgd2lsbCBub3QgaGFuZGxlIHRoaXMuDQpJdCBtYXkg cmV0dXJuIGEgdmFsdWUgdG8gbm90aWZ5IHNsYXZlIG5hY2suDQoNCj4gKwl9DQo+ICsNCj4gKwlz c2lmX2JtYy0+bXNnX2lkeCA9IDA7DQo+ICsJc3NpZl9ibWMtPnBhcnRfYnVmLmFkZHJlc3MgPSAq dmFsOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBvbl93cml0ZV9yZWNlaXZlZF9ldmVudChz dHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYywgdTgNCj4gKyp2YWwpIHsNCj4gKwlpZiAoc3Np Zl9ibWMtPnN0YXRlID09IFNTSUZfUkVBRFkgfHwNCj4gKwkgICAgc3NpZl9ibWMtPnN0YXRlID09 IFNTSUZfUkVTX1NFTkRJTkcpIHsNCj4gKwkJZGV2X3dhcm4oJnNzaWZfYm1jLT5jbGllbnQtPmRl diwNCj4gKwkJCSAiV2FybjogJXMgdW5leHBlY3RlZCBXUklURSBSRUNFSVZFRCBpbiBzdGF0ZT0l c1xuIiwNCj4gKwkJCSBfX2Z1bmNfXywgc3RhdGVfdG9fc3RyaW5nKHNzaWZfYm1jLT5zdGF0ZSkp Ow0KPiArCQlzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX0FCT1JUSU5HOw0KPiArDQo+ICsJfSBlbHNl IGlmIChzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TVEFSVCkgew0KPiArCQlzc2lmX2JtYy0+c3Rh dGUgPSBTU0lGX1NNQlVTX0NNRDsNCj4gKw0KPiArCX0gZWxzZSBpZiAoc3NpZl9ibWMtPnN0YXRl ID09IFNTSUZfU01CVVNfQ01EKSB7DQo+ICsJCWlmICghc3VwcG9ydGVkX3dyaXRlX2NtZChzc2lm X2JtYy0+cGFydF9idWYuc21idXNfY21kKSkgew0KPiArCQkJZGV2X3dhcm4oJnNzaWZfYm1jLT5j bGllbnQtPmRldiwgIldhcm46IFVua25vd24gU01CdXMNCj4gd3JpdGUgY29tbWFuZD0weCV4IiwN Cj4gKwkJCQkgc3NpZl9ibWMtPnBhcnRfYnVmLnNtYnVzX2NtZCk7DQo+ICsJCQlzc2lmX2JtYy0+ YWJvcnRpbmcgPSB0cnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKHNzaWZfYm1jLT5hYm9ydGlu ZykNCj4gKwkJCXNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfQUJPUlRJTkc7DQo+ICsJCWVsc2UNCj4g KwkJCXNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfUkVRX1JFQ1ZJTkc7DQo+ICsJfQ0KPiArDQo+ICsJ LyogVGhpcyBpcyByZXNwb25zZSBzZW5kaW5nIHN0YXRlICovDQo+ICsJaWYgKHNzaWZfYm1jLT5z dGF0ZSA9PSBTU0lGX1JFUV9SRUNWSU5HKQ0KPiArCQloYW5kbGVfd3JpdGVfcmVjZWl2ZWQoc3Np Zl9ibWMsIHZhbCk7DQo+ICsJZWxzZSBpZiAoc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfU01CVVNf Q01EKQ0KPiArCQlwcm9jZXNzX3NtYnVzX2NtZChzc2lmX2JtYywgdmFsKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIHZvaWQgb25fc3RvcF9ldmVudChzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2Jt YywgdTggKnZhbCkgew0KPiArCWlmIChzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9SRUFEWSB8fA0K PiArCSAgICBzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TVEFSVCB8fA0KPiArCSAgICBzc2lmX2Jt Yy0+c3RhdGUgPT0gU1NJRl9TTUJVU19DTUQgfHwNCj4gKwkgICAgc3NpZl9ibWMtPnN0YXRlID09 IFNTSUZfQUJPUlRJTkcpIHsNCj4gKwkJZGV2X3dhcm4oJnNzaWZfYm1jLT5jbGllbnQtPmRldiwN Cj4gKwkJCSAiV2FybjogJXMgdW5leHBlY3RlZCBTTEFWRSBTVE9QIGluIHN0YXRlPSVzXG4iLA0K PiArCQkJIF9fZnVuY19fLCBzdGF0ZV90b19zdHJpbmcoc3NpZl9ibWMtPnN0YXRlKSk7DQo+ICsJ CXNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfUkVBRFk7DQo+ICsNCj4gKwl9IGVsc2UgaWYgKHNzaWZf Ym1jLT5zdGF0ZSA9PSBTU0lGX1JFUV9SRUNWSU5HKSB7DQo+ICsJCWlmICh2YWxpZGF0ZV9yZXF1 ZXN0X3BhcnQoc3NpZl9ibWMpKSB7DQo+ICsJCQlwcm9jZXNzX3JlcXVlc3RfcGFydChzc2lmX2Jt Yyk7DQo+ICsJCQlpZiAoc3NpZl9ibWMtPnBhcnRfYnVmLnNtYnVzX2NtZCA9PQ0KPiBTU0lGX0lQ TUlfU0lOR0xFUEFSVF9XUklURSB8fA0KPiArCQkJICAgIHNzaWZfYm1jLT5wYXJ0X2J1Zi5zbWJ1 c19jbWQgPT0NCj4gU1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9FTkQpDQo+ICsJCQkJaGFuZGxl X3JlcXVlc3Qoc3NpZl9ibWMpOw0KPiArCQkJc3NpZl9ibWMtPnN0YXRlID0gU1NJRl9SRUFEWTsN Cj4gKwkJfSBlbHNlIHsNCj4gKwkJCS8qDQo+ICsJCQkgKiBBIEJNQyB0aGF0IHJlY2VpdmVzIGFu IGludmFsaWQgcmVxdWVzdCBkcm9wIHRoZSBkYXRhIGZvciB0aGUNCj4gd3JpdGUNCj4gKwkJCSAq IHRyYW5zYWN0aW9uIGFuZCBhbnkgZnVydGhlciB0cmFuc2FjdGlvbnMgKHJlYWQgb3Igd3JpdGUp IHVudGlsDQo+ICsJCQkgKiB0aGUgbmV4dCB2YWxpZCByZWFkIG9yIHdyaXRlIFN0YXJ0IHRyYW5z YWN0aW9uIGlzIHJlY2VpdmVkDQo+ICsJCQkgKi8NCj4gKwkJCWRldl9lcnIoJnNzaWZfYm1jLT5j bGllbnQtPmRldiwgIkVycm9yOiBpbnZhbGlkIHBlY1xuIik7DQo+ICsJCQlzc2lmX2JtYy0+YWJv cnRpbmcgPSB0cnVlOw0KPiArCQl9DQo+ICsJfSBlbHNlIGlmIChzc2lmX2JtYy0+c3RhdGUgPT0g U1NJRl9SRVNfU0VORElORykgew0KPiArCQlpZiAoc3NpZl9ibWMtPmlzX3NpbmdsZXBhcnRfcmVh ZCB8fCBzc2lmX2JtYy0+YmxvY2tfbnVtID09IDB4RkYpDQo+ICsJCQkvKiBJbnZhbGlkYXRlIHJl c3BvbnNlIGJ1ZmZlciB0byBkZW5vdGUgaXQgaXMgc2VudCAqLw0KPiArCQkJY29tcGxldGVfcmVz cG9uc2Uoc3NpZl9ibWMpOw0KPiArCQlzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX1JFQURZOw0KPiAr CX0NCj4gKw0KPiArCS8qIFJlc2V0IG1lc3NhZ2UgaW5kZXggKi8NCj4gKwlzc2lmX2JtYy0+bXNn X2lkeCA9IDA7DQo+ICt9DQo+ICsNCj4gKy8qDQo+ICsgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBo YW5kbGUgSTJDIHNsYXZlIGV2ZW50cyAgKi8gc3RhdGljIGludA0KPiArc3NpZl9ibWNfY2Ioc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCwgZW51bSBpMmNfc2xhdmVfZXZlbnQgZXZlbnQsIHU4DQo+ ICsqdmFsKSB7DQo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gKwlzdHJ1Y3Qgc3NpZl9ibWNf Y3R4ICpzc2lmX2JtYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KPiArCWludCByZXQg PSAwOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7 DQo+ICsNCj4gKwlzd2l0Y2ggKGV2ZW50KSB7DQo+ICsJY2FzZSBJMkNfU0xBVkVfUkVBRF9SRVFV RVNURUQ6DQo+ICsJCW9uX3JlYWRfcmVxdWVzdGVkX2V2ZW50KHNzaWZfYm1jLCB2YWwpOw0KPiAr CQlicmVhazsNCj4gKw0KPiArCWNhc2UgSTJDX1NMQVZFX1dSSVRFX1JFUVVFU1RFRDoNCj4gKwkJ b25fd3JpdGVfcmVxdWVzdGVkX2V2ZW50KHNzaWZfYm1jLCB2YWwpOw0KPiArCQlicmVhazsNCj4g Kw0KPiArCWNhc2UgSTJDX1NMQVZFX1JFQURfUFJPQ0VTU0VEOg0KPiArCQlvbl9yZWFkX3Byb2Nl c3NlZF9ldmVudChzc2lmX2JtYywgdmFsKTsNCj4gKwkJYnJlYWs7DQo+ICsNCj4gKwljYXNlIEky Q19TTEFWRV9XUklURV9SRUNFSVZFRDoNCj4gKwkJb25fd3JpdGVfcmVjZWl2ZWRfZXZlbnQoc3Np Zl9ibWMsIHZhbCk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJY2FzZSBJMkNfU0xBVkVfU1RPUDoN Cj4gKwkJb25fc3RvcF9ldmVudChzc2lmX2JtYywgdmFsKTsNCj4gKwkJYnJlYWs7DQo+ICsNCj4g KwlkZWZhdWx0Og0KPiArCQlkZXZfd2Fybigmc3NpZl9ibWMtPmNsaWVudC0+ZGV2LCAiV2Fybjog VW5rbm93biBpMmMgc2xhdmUNCj4gZXZlbnRcbiIpOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsN Cj4gKwlpZiAoIXNzaWZfYm1jLT5hYm9ydGluZyAmJiBzc2lmX2JtYy0+YnVzeSkNCj4gKwkJcmV0 ID0gLUVCVVNZOw0KPiArDQo+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3NpZl9ibWMtPmxv Y2ssIGZsYWdzKTsNCj4gKw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bnQgc3NpZl9ibWNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0 DQo+ICtpMmNfZGV2aWNlX2lkICppZCkgew0KPiArCXN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZf Ym1jOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlzc2lmX2JtYyA9IGRldm1fa3phbGxvYygmY2xp ZW50LT5kZXYsIHNpemVvZigqc3NpZl9ibWMpLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXNzaWZf Ym1jKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiArCXNwaW5fbG9ja19pbml0KCZzc2lm X2JtYy0+bG9jayk7DQo+ICsNCj4gKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzc2lmX2JtYy0+d2Fp dF9xdWV1ZSk7DQo+ICsJc3NpZl9ibWMtPnJlcXVlc3RfYXZhaWxhYmxlID0gZmFsc2U7DQo+ICsJ c3NpZl9ibWMtPnJlc3BvbnNlX2luX3Byb2dyZXNzID0gZmFsc2U7DQo+ICsJc3NpZl9ibWMtPmJ1 c3kgPSBmYWxzZTsNCj4gKwlzc2lmX2JtYy0+cmVzcG9uc2VfdGltZXJfaW5pdGVkID0gZmFsc2U7 DQo+ICsNCj4gKwkvKiBSZWdpc3RlciBtaXNjIGRldmljZSBpbnRlcmZhY2UgKi8NCj4gKwlzc2lm X2JtYy0+bWlzY2Rldi5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsNCj4gKwlzc2lmX2JtYy0+ bWlzY2Rldi5uYW1lID0gREVWSUNFX05BTUU7DQo+ICsJc3NpZl9ibWMtPm1pc2NkZXYuZm9wcyA9 ICZzc2lmX2JtY19mb3BzOw0KPiArCXNzaWZfYm1jLT5taXNjZGV2LnBhcmVudCA9ICZjbGllbnQt PmRldjsNCj4gKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZzc2lmX2JtYy0+bWlzY2Rldik7DQo+ICsJ aWYgKHJldCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwlzc2lmX2JtYy0+Y2xpZW50ID0gY2xp ZW50Ow0KPiArCXNzaWZfYm1jLT5jbGllbnQtPmZsYWdzIHw9IEkyQ19DTElFTlRfU0xBVkU7DQo+ ICsNCj4gKwkvKiBSZWdpc3RlciBJMkMgc2xhdmUgKi8NCj4gKwlpMmNfc2V0X2NsaWVudGRhdGEo Y2xpZW50LCBzc2lmX2JtYyk7DQo+ICsJcmV0ID0gaTJjX3NsYXZlX3JlZ2lzdGVyKGNsaWVudCwg c3NpZl9ibWNfY2IpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJbWlzY19kZXJlZ2lzdGVyKCZzc2lm X2JtYy0+bWlzY2Rldik7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCXJldHVybiAw Ow0KPiArb3V0Og0KPiArCWRldm1fa2ZyZWUoJmNsaWVudC0+ZGV2LCBzc2lmX2JtYyk7DQo+ICsJ cmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBzc2lmX2JtY19yZW1vdmUoc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCkgew0KPiArCXN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZf Ym1jID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQo+ICsNCj4gKwlpMmNfc2xhdmVfdW5y ZWdpc3RlcihjbGllbnQpOw0KPiArCW1pc2NfZGVyZWdpc3Rlcigmc3NpZl9ibWMtPm1pc2NkZXYp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHNzaWZfYm1jX21hdGNoW10gPSB7DQo+ICsJeyAuY29tcGF0aWJsZSA9ICJz c2lmLWJtYyIgfSwNCj4gKwl7IH0sDQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwg c3NpZl9ibWNfbWF0Y2gpOw0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2Vf aWQgc3NpZl9ibWNfaWRbXSA9IHsNCj4gKwl7IERFVklDRV9OQU1FLCAwIH0sDQo+ICsJeyB9LA0K PiArfTsNCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzc2lmX2JtY19pZCk7DQo+ICsNCj4g K3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBzc2lmX2JtY19kcml2ZXIgPSB7DQo+ICsJLmRyaXZl ciAgICAgICAgID0gew0KPiArCQkubmFtZSAgICAgICAgICAgPSBERVZJQ0VfTkFNRSwNCj4gKwkJ Lm9mX21hdGNoX3RhYmxlID0gc3NpZl9ibWNfbWF0Y2gsDQo+ICsJfSwNCj4gKwkucHJvYmUgICAg ICAgICAgPSBzc2lmX2JtY19wcm9iZSwNCj4gKwkucmVtb3ZlICAgICAgICAgPSBzc2lmX2JtY19y ZW1vdmUsDQo+ICsJLmlkX3RhYmxlICAgICAgID0gc3NpZl9ibWNfaWQsDQo+ICt9Ow0KPiArDQo+ ICttb2R1bGVfaTJjX2RyaXZlcihzc2lmX2JtY19kcml2ZXIpOw0KPiArDQo+ICtNT0RVTEVfQVVU SE9SKCJRdWFuIE5ndXllbiA8cXVhbkBvcy5hbXBlcmVjb21wdXRpbmcuY29tPiIpOw0KPiArTU9E VUxFX0FVVEhPUigiQ2h1b25nIFRyYW4gPGNodW9uZ0Bvcy5hbXBlcmVjb21wdXRpbmcuY29tPiIp Ow0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJMaW51eCBkZXZpY2UgZHJpdmVyIG9mIHRoZSBCTUMg SVBNSSBTU0lGDQo+ICtpbnRlcmZhY2UuIik7IE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsNCj4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pcG1pX3NzaWZfYm1jLmgNCj4gYi9pbmNsdWRl L3VhcGkvbGludXgvaXBtaV9zc2lmX2JtYy5oDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uOGI0ZjIzOWE2MWY0DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv aW5jbHVkZS91YXBpL2xpbnV4L2lwbWlfc3NpZl9ibWMuaA0KPiBAQCAtMCwwICsxLDE2IEBADQo+ ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5IFdJVEggTGludXgtc3lz Y2FsbC1ub3RlKi8NCj4gKy8qDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIsIEFtcGVyZSBDb21w dXRpbmcgTExDLg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX1VBUElfTElOVVhfSVBNSV9TU0lG X0JNQ19IDQo+ICsjZGVmaW5lIF9VQVBJX0xJTlVYX0lQTUlfU1NJRl9CTUNfSA0KPiArDQo+ICsv KiBNYXggbGVuZ3RoIG9mIGlwbWkgc3NpZiBtZXNzYWdlIEluY2x1ZGVkIG5ldGZuIGFuZCBjbWQg ZmllbGQgKi8NCj4gKyNkZWZpbmUgSVBNSV9TU0lGX1BBWUxPQURfTUFYICAgICAgICAgMjU0DQo+ ICtzdHJ1Y3QgaXBtaV9zc2lmX21zZyB7DQo+ICsJdW5zaWduZWQgaW50IGxlbjsNCj4gKwlfX3U4 ICAgIHBheWxvYWRbSVBNSV9TU0lGX1BBWUxPQURfTUFYXTsNCj4gK307DQo+ICsNCj4gKyNlbmRp ZiAvKiBfVUFQSV9MSU5VWF9JUE1JX1NTSUZfQk1DX0ggKi8NCj4gLS0NCj4gMi4zNS4xDQoNCg==