Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp65522pxm; Tue, 22 Feb 2022 16:50:38 -0800 (PST) X-Google-Smtp-Source: ABdhPJzitE+Q9pUqHxBEKSbDl3jsMqVmu6YhgQ/exh9PIVqUa7SvCHoxlm+Q+EHShbn2u7Y1YzXF X-Received: by 2002:aa7:d949:0:b0:40f:2aa1:1bd1 with SMTP id l9-20020aa7d949000000b0040f2aa11bd1mr29573809eds.284.1645577438103; Tue, 22 Feb 2022 16:50:38 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1645577438; cv=pass; d=google.com; s=arc-20160816; b=h0wWih0qBRS/tcNtwO/TBAdH8Ksysv5Ncr1V30EkT+tcQnnLZuO47Jr4/7P5LVsxDL SuD8taXssx8/8ip/9s9HB506dUZ9+El47nXLlKQV0aaRKE7cRFLNIdc2FSdcWxZXjjtk DlpVDadpeXZIEOYLw3dV8LDaZLdN3ZwyqYVFOjI1AFlU7cSCSVI3BSpKY4UDaL5hguo3 OJgRg9vIAuSyUIMTRFITNo4Y1UmpCYlqnbqKJROyGKHQzLNL0tQ6XfPnOGzGybZZPVJ5 QKcQJmi6NMqowzEynoym1Iz1aZ+rocYrBSujldoAsxNtFw0KZj92Wtt3y55ZG2iusXiq DFFg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from; bh=geToGvgtyITvosjFEHcXVuXEWEMDtAN+APmdFoiKDwg=; b=uijGB56tZZtry3tnLvibPdXwvOQYI4rSAKJ0pyaDbhaycRQ0R8RsEl+hZPZnN4Iyfb jkea683hEJcYVnfJIG6yulvIqY/iUh7dcPDD0ICd4x9S7S7qySSEC++NSCQr0LkgMwLc hegpADP6yyzEQuDynTo7E0RlOQ6b5v2nQHATBmLjN1rzp4DHUIMP5Wj0pT9hRYAbV7xi pde9dFixn4pxJrOMlQWw9yrKp2QhNq56JuZawPcc3p+vGsb3M3YhXFBQzN9JtFc9IpiC cAbY4Tqp5ewBr2fWbG3Uwv2no+F24y+4+RGHY+sx+2qPd1DmvcaWXCjnpypY3E4t7JJ4 BUPQ== ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=csgroup.eu dkim=pass dkdomain=csgroup.eu dmarc=pass fromdomain=csgroup.eu); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id nb36si11235471ejc.90.2022.02.22.16.50.14; Tue, 22 Feb 2022 16:50:38 -0800 (PST) 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; arc=pass (i=1 spf=pass spfdomain=csgroup.eu dkim=pass dkdomain=csgroup.eu dmarc=pass fromdomain=csgroup.eu); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234833AbiBVSA0 (ORCPT + 99 others); Tue, 22 Feb 2022 13:00:26 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52722 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234825AbiBVSAZ (ORCPT ); Tue, 22 Feb 2022 13:00:25 -0500 Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-eopbgr90084.outbound.protection.outlook.com [40.107.9.84]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E85B17186C; Tue, 22 Feb 2022 09:59:57 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UHZoQS9GrP9RkGS0uUw3YEFZCCENmGOCL5jMcuDwrIKB+Y2dOXFYtAyzQGGJJqM2KhOJvhM5T7xUAT8GQO7/F7bXEKwwCnLV9+yKH3Z27Qw0ASOD5t9zy3LKy0bokBQb6KtA23cIzriW3pEm9lFUyZfPQXB7Lg3EpG4s1ATfJfk/S2b5tv8Ah+U96RHK4AGGflP+pDvlSfzcdYaQjx1gg3y0KhQXpFXNHhkUlsMrVkXcmceKNhU7SyKa2yhN33p+Ueit7XSxviTYMtr515JSB3mShL3SIY92PdEjVj2LxcNbZSWRyAk45ieLVdM4LgXkbsB4NjhO9kE1OhKJ70Wk6g== 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=geToGvgtyITvosjFEHcXVuXEWEMDtAN+APmdFoiKDwg=; b=GWyGRyCJciUoqYsvBhHXgdhuodZa2s7J4Lftx3nzHOB4dcm5PhF78PQ/kmlvjdKRoUC8hIx41fPP8XD8thZ+7oNfk/qaG1bjohHavyDS0Mpj8YSmviSxLh0unJSdfI7TDVivfuIph15fJUeJ+qTYDsdoidwlSmBFFETH3QSWubZe4eZPk7qEcEv2p3fpIGA94VgFVsDTsJOhIjpRIljn+szN7JN+E5x95OJsBW9N/4KKChOWRSkZQGfWa1VmwIJcKlcVjWo2y4z6bKxLPtdzIVR2QFp2SWPQSdyA93vSt3bh4pQh7wRm2LvOdMtDoGMru77GGMiUaqPPTag5tFRGdw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MR1P264MB3442.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:26::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.21; Tue, 22 Feb 2022 17:59:55 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::8142:2e6f:219b:646d]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::8142:2e6f:219b:646d%5]) with mapi id 15.20.5017.021; Tue, 22 Feb 2022 17:59:55 +0000 From: Christophe Leroy To: Aaron Tomlin , "mcgrof@kernel.org" CC: "cl@linux.com" , "pmladek@suse.com" , "mbenes@suse.cz" , "akpm@linux-foundation.org" , "jeyu@kernel.org" , "linux-kernel@vger.kernel.org" , "linux-modules@vger.kernel.org" , "void@manifault.com" , "atomlin@atomlin.com" , "allen.lkml@gmail.com" , "joe@perches.com" , "msuchanek@suse.de" , "oleksandr@natalenko.name" Subject: Re: [PATCH v8 11/13] module: Move sysfs support into a separate file Thread-Topic: [PATCH v8 11/13] module: Move sysfs support into a separate file Thread-Index: AQHYJ/ZbpvzGkeE8qUSM7dJh9TYloKyf3BAA Date: Tue, 22 Feb 2022 17:59:55 +0000 Message-ID: References: <20220222141303.1392190-1-atomlin@redhat.com> <20220222141303.1392190-12-atomlin@redhat.com> In-Reply-To: <20220222141303.1392190-12-atomlin@redhat.com> Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=csgroup.eu; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3afcf3a9-079c-4e14-5c93-08d9f62d21f9 x-ms-traffictypediagnostic: MR1P264MB3442: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: 3PwglN9cT6IKF4EIoSaT+rxcPhqa50cnQgwtzto2iEronDF5zl+6vRW4GNdCXpWQJHybwki924F8JfE3eKGcXGhomdBXnatWJjMp4CNzdXIOi72xF3p8Gf9zGu4ypJjncqSMtwfG8bGKmUGZdC+pVTolvG+nPdvUqawIjwK2rssEAChodQxPocC501jZMdpoZTxJj/WmvfU/aJv+pZIEC3CvB6TtPdLagdappqdP42IPEWWgsiWSw+mRe6vseLU0o4XvvSfD/v7GS44UTdcy/JpFjHLeYzWsSA73SdA+ECXzz9OO8Qo/VXq9nxxbXjLZwFeB/z/8NkElOIuL9/O9sM8EXA7Q6/YfC/by2Omgsgi7q/h06MGLLzkz4/MgCqac4imNcKZqi+F1/mk8xzenHDOOSzm3O4k0zM7qwqF2UIX0TbJGf8j0vmjCuem7ZE9HTgVRof9qdf7khzWjS6x5Ycp35G7rmKjWGxODENUk3ZcudKifHECAfrY6eg7WfademQDU2dmtuyD2zyShBGsCxrwe0DWp4oKkcXmSpI7u5VxWusphs7qTbGaP8tj+nLpC9KF0NIR7ToigfboziDIe0+bAGKSz2ZocB4phhwRTRt41oK9oxdqPps+JC5OF8M858KkCLp1T1vQxjPoQc+iqbuny59e95D9kS0yO/n/rD1J4OrRdqrvqmItyE6S9Z6+2yklBynnIOjM2TjUx/p+Zx0MP3doV6K48IaEfHBT3vT9FL9IYvIsL76mmhFQ2Nq+h/+AVupIqt9mT6LXl4BfdPg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(5660300002)(30864003)(7416002)(508600001)(6486002)(91956017)(66574015)(66946007)(76116006)(86362001)(66556008)(4326008)(64756008)(31696002)(8676002)(66446008)(316002)(8936002)(71200400001)(44832011)(66476007)(186003)(26005)(38100700002)(36756003)(122000001)(38070700005)(2906002)(2616005)(31686004)(110136005)(6512007)(54906003)(6506007)(83380400001)(45980500001)(43740500002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dExFWkRMZ2JVa3hDMjRCeEhESE10TGcwRlhJbWU5SlN0MmI3ZUJQdG9INUVi?= =?utf-8?B?QUlEcHJ5bTJJWGI1dTF5bCtIbU1TVVNVVk5kSjY4eW1VUkg1ei9ubW5DZTdh?= =?utf-8?B?bjJGWDVLVDdnRjEyTGhrcHZnR3dwaU5hZnB1SzJYM1dvVXRPU0c2WHo5bGRi?= =?utf-8?B?QnE3aEdtT0I5K243bzcxSDBONGFiVE4vbEFocVVqV01ja0JqQ3hJWE9vZ3py?= =?utf-8?B?amcrZWNXNXVld0gwY1dyMkNKQk41UGNkK3hxNHJhR0lGdm82bmJ0aWNCRnVw?= =?utf-8?B?SFlLckZhZ1FjZmhRUkxvWUFJTTJlNW50Z3dueklUcnI2amJuMXp1aFFiWE9r?= =?utf-8?B?YVdxYzc0OElEWjVBZG1hc0lQUnZSdndPUktncUxxdlhQS0gwdVl5emtpZ2Ri?= =?utf-8?B?c1RjMHI1K2oxdjd6bkZqS2dBenhQemFTeERUTTRaWG5NeVBsQmVhcW5BSVhr?= =?utf-8?B?Y09aUmlkcUpaMXZmbkE4VzNYZ3hBQXQ0SWQzck9qQjJVdlZVazVNZ0krdURM?= =?utf-8?B?YWhMajVzdkVNcUVucWJJRE5jcm1kRE9PalZZSFFzQXRhTHFMa0E5dkNHRllk?= =?utf-8?B?MkF2cHlLRzVaVm5JZGE0QlpkRXFQWDVselZsM2RuZXY0QlBIeG5zL2kzL2FJ?= =?utf-8?B?cHZUREdRWlUxbjJwYTdTZTd3UlRGWVk2Y081aXkwbzlUZzdvUFJkM014aHRi?= =?utf-8?B?QW1MS0NMYjVQaWo4UlNkNjZsemxwVXN2bFZEV0F6WURWZWRxL0pDQ0xIUGs0?= =?utf-8?B?dnV6emY4K2licW0rYXNYMW1VUTNZRkZnRk5sdDRFamhNcFN5WEhwYkxSbVp1?= =?utf-8?B?cXE1dlFXcXRWUWcrWVluMFRoK05WSU9KUzRJVjlGWHZ1SzdHVUdlS0R6VGZl?= =?utf-8?B?WEJ3L2Rtd2FiaFFNN1lHVE1BSkIyTDRoUExpb1ZKc2kydFd2WTh2M3hKSFlp?= =?utf-8?B?UUE5OWJDS2p1MDBiNDduNkFmN1JaczRZWjYrSHpvNkdiNFh4QXdsQ1g5Zzh5?= =?utf-8?B?cHZ3TzhPa1lNV003S3FsRnZaTFNqakxOdWt2R2QvU2d4cVIxQUFNSHR5czNx?= =?utf-8?B?b25SUk16OTZHMVBhakllcjVYb09UUGY1NUxTMFZNNHRSNFhCNTFlclNSQm5C?= =?utf-8?B?RUlVdG1xUHBnNSs0Y1FFb2lKQ0JjdVoybTEzL3JvYVdORDA1V0hRbHBsWUVa?= =?utf-8?B?SmE1b3hmK1R2K3BtcGY3WjdwZlowUys3SzJ1SWxiRWpSd2lLSFI2K1ZnWXAr?= =?utf-8?B?RjdyUURYSDZaZFFTRTlJeTJwRnMxV3BuR1kvc2hIZVcvd3RHZ3czUk1tbVd3?= =?utf-8?B?REszUFQzWit1aklTaDUvYitvQWI4MW8wZ0RyMi9ldzRlaHNhN1VuNndZK2Q2?= =?utf-8?B?UlBxWFlENHZrUHI0SXA1SEt5MkErMkw2WFJNbkFST1NCdFZUZVRBb21CZHNj?= =?utf-8?B?YTdQd25YdVVQUGdiUTFzRDFFVk9oU2JxQTJlMEprN0dvckNGaDNQRzB6T0dT?= =?utf-8?B?SXA2Ly9yQlZzenNPMkJ0cGdPSm9XcjRIMTYyM2hhd0hmeE0yKzcyeXMyUEpW?= =?utf-8?B?VnFHK0FFWWwxcUdEQ0dYaXY1MVkvbmJZMXlEUlA2ZFV4ZjJqaVBuS090cUll?= =?utf-8?B?YWw1L2p2K3Z6aFhoelNWOXorVEdYeFAwcWZxcVhmLzMzOTk3cGdUdCtxTmRL?= =?utf-8?B?TFZjYUFlMzhjVmp4bE9neDNMN3FkZ1NIajg5S3IyNGZsMlFwZkloSUhmbEll?= =?utf-8?B?akFlTDJuSnltRkNGQzJxVzhvdEIzZ2ZnSmxqUlVpNGJxamVyRVVJRG1telBX?= =?utf-8?B?NTd6VzRjZWV6NzN6R0FYTDd6ZXVCRElncjUyUVNBM3hQOGRXR3hkUit3TGJ1?= =?utf-8?B?cXh5M0dtNGpZaU9GYUVDT0RYbFRZSkR3THVQTFN1TWRWQ0Izam1uTGJpRGpo?= =?utf-8?B?RE1oZ1ZYQ3J3TTNtSDQwMEVaWG1uNGFDNzNka3RFVm1PaW5vNDFqMmRDZFNL?= =?utf-8?B?NExucEI1SE5SN3RtNUwzaDhobjIwS0FTeG1WQ3l5SUdqckY2YUJ0RW5ZeXBK?= =?utf-8?B?ZkJlNkJvRVZQQmI2clROeStKS1piOStJSE9YWG1IeERyMkhmS0R4eTJXaDV6?= =?utf-8?B?dzEvUEgybjZ6Y0xudUI5UTFQbWlaL3ZaeTNoQ2loeVRUUnpVdUk3VEVBZWd4?= =?utf-8?B?U3hVL1NaOGMyOFNqM1RjQXZ6MUo1NTVpYWFKVEJoSlEyQjdmNHVhMGdDMUFF?= =?utf-8?Q?I1Xo0WhHz0/tphG7BDmxa0DM1icYDp+PTNG6PSGlcw=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <684B622B5FBF9149A6F5B990534002B1@FRAP264.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 3afcf3a9-079c-4e14-5c93-08d9f62d21f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Feb 2022 17:59:55.2806 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: M8rhWiVudOz2yAcgWo6wFr4drH+4T2np324C6DAYRomfogMz6pEBnQQinhCkdO6ZwN+rbm24PE9Am275V4H/Q3fD9nSkvk89XhOFGJWqt7s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR1P264MB3442 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,NICE_REPLY_A, 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 DQoNCkxlIDIyLzAyLzIwMjIgw6AgMTU6MTMsIEFhcm9uIFRvbWxpbiBhIMOpY3JpdMKgOg0KPiBO byBmdW5jdGlvbmFsIGNoYW5nZS4NCj4gDQo+IFRoaXMgcGF0Y2ggbWlncmF0ZXMgbW9kdWxlIHN5 c2ZzIHN1cHBvcnQgb3V0IG9mIGNvcmUgY29kZSBpbnRvDQo+IGtlcm5lbC9tb2R1bGUvc3lzZnMu Yy4gSW4gYWRkaXRpb24gc2ltcGxlIGNvZGUgcmVmYWN0b3JpbmcgdG8NCj4gbWFrZSB0aGlzIHBv c3NpYmxlLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQWFyb24gVG9tbGluIDxhdG9tbGluQHJlZGhh dC5jb20+DQoNClJldmlld2VkLWJ5OiBDaHJpc3RvcGhlIExlcm95IDxjaHJpc3RvcGhlLmxlcm95 QGNzZ3JvdXAuZXU+DQoNCj4gLS0tDQo+ICAga2VybmVsL21vZHVsZS9NYWtlZmlsZSAgIHwgICAx ICsNCj4gICBrZXJuZWwvbW9kdWxlL2ludGVybmFsLmggfCAgMjEgKysNCj4gICBrZXJuZWwvbW9k dWxlL21haW4uYyAgICAgfCA0NjkgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQo+ICAga2VybmVsL21vZHVsZS9zeXNmcy5jICAgIHwgNDM2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKw0KPiAgIDQgZmlsZXMgY2hhbmdlZCwgNDYxIGluc2VydGlvbnMo KyksIDQ2NiBkZWxldGlvbnMoLSkNCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQga2VybmVsL21vZHVs ZS9zeXNmcy5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9NYWtlZmlsZSBiL2tl cm5lbC9tb2R1bGUvTWFrZWZpbGUNCj4gaW5kZXggOTQyOTZjOThhNjdmLi5jZjhkY2RjNmI1NWYg MTAwNjQ0DQo+IC0tLSBhL2tlcm5lbC9tb2R1bGUvTWFrZWZpbGUNCj4gKysrIGIva2VybmVsL21v ZHVsZS9NYWtlZmlsZQ0KPiBAQCAtMTYsMyArMTYsNCBAQCBvYmotJChDT05GSUdfU1RSSUNUX01P RFVMRV9SV1gpICs9IHN0cmljdF9yd3gubw0KPiAgIG9iai0kKENPTkZJR19ERUJVR19LTUVNTEVB SykgKz0gZGVidWdfa21lbWxlYWsubw0KPiAgIG9iai0kKENPTkZJR19LQUxMU1lNUykgKz0ga2Fs bHN5bXMubw0KPiAgIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jZnMubw0KPiArb2JqLSQo Q09ORklHX1NZU0ZTKSArPSBzeXNmcy5vDQo+IGRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL2lu dGVybmFsLmggYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgNCj4gaW5kZXggNmFmNDBjMmQxNDVm Li42MmQ3NDllZjY5NWUgMTAwNjQ0DQo+IC0tLSBhL2tlcm5lbC9tb2R1bGUvaW50ZXJuYWwuaA0K PiArKysgYi9rZXJuZWwvbW9kdWxlL2ludGVybmFsLmgNCj4gQEAgLTM0LDYgKzM0LDkgQEANCj4g ICBleHRlcm4gc3RydWN0IG11dGV4IG1vZHVsZV9tdXRleDsNCj4gICBleHRlcm4gc3RydWN0IGxp c3RfaGVhZCBtb2R1bGVzOw0KPiAgIA0KPiArZXh0ZXJuIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRl ICptb2RpbmZvX2F0dHJzW107DQo+ICtleHRlcm4gc2l6ZV90IG1vZGluZm9fYXR0cnNfY291bnQ7 DQo+ICsNCj4gICAvKiBQcm92aWRlZCBieSB0aGUgbGlua2VyICovDQo+ICAgZXh0ZXJuIGNvbnN0 IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiW107DQo+ICAgZXh0ZXJuIGNv bnN0IHN0cnVjdCBrZXJuZWxfc3ltYm9sIF9fc3RvcF9fX2tzeW10YWJbXTsNCj4gQEAgLTIwNCwz ICsyMDcsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfYnVpbGRfaWQoc3RydWN0IG1vZHVs ZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmYNCj4gICBzdGF0aWMgaW5saW5lIHZv aWQgbGF5b3V0X3N5bXRhYihzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBsb2FkX2luZm8gKmlu Zm8pIHsgfQ0KPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfa2FsbHN5bXMoc3RydWN0IG1vZHVs ZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKSB7IH0NCj4gICAjZW5kaWYgLyog Q09ORklHX0tBTExTWU1TICovDQo+ICsNCj4gKyNpZmRlZiBDT05GSUdfU1lTRlMNCj4gK2ludCBt b2Rfc3lzZnNfc2V0dXAoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZv ICppbmZvLA0KPiArCQkgICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLCB1bnNpZ25lZCBp bnQgbnVtX3BhcmFtcyk7DQo+ICt2b2lkIG1vZF9zeXNmc190ZWFyZG93bihzdHJ1Y3QgbW9kdWxl ICptb2QpOw0KPiArdm9pZCBpbml0X3BhcmFtX2xvY2soc3RydWN0IG1vZHVsZSAqbW9kKTsNCj4g KyNlbHNlIC8qICFDT05GSUdfU1lTRlMgKi8NCj4gK3N0YXRpYyBpbmxpbmUgaW50IG1vZF9zeXNm c19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsDQo+ICsJCQkgICAJICBjb25zdCBzdHJ1Y3QgbG9h ZF9pbmZvICppbmZvLA0KPiArCQkJICAgCSAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLA0K PiArCQkJICAgCSAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpDQo+ICt7DQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2Rfc3lzZnNfdGVhcmRvd24oc3Ry dWN0IG1vZHVsZSAqbW9kKSB7IH0NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3BhcmFtX2xv Y2soc3RydWN0IG1vZHVsZSAqbW9kKSB7IH0NCj4gKyNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8N Cj4gZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWlu LmMNCj4gaW5kZXggNDRiNmZkMWFjYzQ0Li5iOGE1OWI1YzNlM2EgMTAwNjQ0DQo+IC0tLSBhL2tl cm5lbC9tb2R1bGUvbWFpbi5jDQo+ICsrKyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jDQo+IEBAIC0x NCw5ICsxNCw3IEBADQo+ICAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gICAjaW5jbHVkZSA8 bGludXgva2FsbHN5bXMuaD4NCj4gICAjaW5jbHVkZSA8bGludXgvYnVpbGRpZC5oPg0KPiAtI2lu Y2x1ZGUgPGxpbnV4L2ZpbGUuaD4NCj4gICAjaW5jbHVkZSA8bGludXgvZnMuaD4NCj4gLSNpbmNs dWRlIDxsaW51eC9zeXNmcy5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gICAj aW5jbHVkZSA8bGludXgva2VybmVsX3JlYWRfZmlsZS5oPg0KPiAgICNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+IEBAIC05ODksNyArOTg3LDcgQEAgc3RhdGljIHNzaXplX3Qgc2hvd190YWludChz dHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsDQo+ICAgc3RhdGljIHN0cnVjdCBtb2R1bGVf YXR0cmlidXRlIG1vZGluZm9fdGFpbnQgPQ0KPiAgIAlfX0FUVFIodGFpbnQsIDA0NDQsIHNob3df dGFpbnQsIE5VTEwpOw0KPiAgIA0KPiAtc3RhdGljIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICpt b2RpbmZvX2F0dHJzW10gPSB7DQo+ICtzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbW9kaW5mb19h dHRyc1tdID0gew0KPiAgIAkmbW9kdWxlX3VldmVudCwNCj4gICAJJm1vZGluZm9fdmVyc2lvbiwN Cj4gICAJJm1vZGluZm9fc3JjdmVyc2lvbiwNCj4gQEAgLTEwMDMsNiArMTAwMSw4IEBAIHN0YXRp YyBzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbW9kaW5mb19hdHRyc1tdID0gew0KPiAgIAlOVUxM LA0KPiAgIH07DQo+ICAgDQo+ICtzaXplX3QgbW9kaW5mb19hdHRyc19jb3VudCA9IEFSUkFZX1NJ WkUobW9kaW5mb19hdHRycyk7DQo+ICsNCj4gICBzdGF0aWMgY29uc3QgY2hhciB2ZXJtYWdpY1td ID0gVkVSTUFHSUNfU1RSSU5HOw0KPiAgIA0KPiAgIHN0YXRpYyBpbnQgdHJ5X3RvX2ZvcmNlX2xv YWQoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBjaGFyICpyZWFzb24pDQo+IEBAIC0xMjUzLDQ2 OSArMTI1Myw2IEBAIHJlc29sdmVfc3ltYm9sX3dhaXQoc3RydWN0IG1vZHVsZSAqbW9kLA0KPiAg IAlyZXR1cm4ga3N5bTsNCj4gICB9DQo+ICAgDQo+IC0vKg0KPiAtICogL3N5cy9tb2R1bGUvZm9v L3NlY3Rpb25zIHN0dWZmDQo+IC0gKiBKLiBDb3JiZXQgPGNvcmJldEBsd24ubmV0Pg0KPiAtICov DQo+IC0jaWZkZWYgQ09ORklHX1NZU0ZTDQo+IC0NCj4gLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMN Cj4gLXN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyIHsNCj4gLQlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBi YXR0cjsNCj4gLQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7DQo+IC19Ow0KPiAtDQo+IC1zdHJ1Y3Qg bW9kdWxlX3NlY3RfYXR0cnMgew0KPiAtCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3JwOw0KPiAt CXVuc2lnbmVkIGludCBuc2VjdGlvbnM7DQo+IC0Jc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIgYXR0 cnNbXTsNCj4gLX07DQo+IC0NCj4gLSNkZWZpbmUgTU9EVUxFX1NFQ1RfUkVBRF9TSVpFICgzIC8q ICIweCIsICJcbiIgKi8gKyAoQklUU19QRVJfTE9ORyAvIDQpKQ0KPiAtc3RhdGljIHNzaXplX3Qg bW9kdWxlX3NlY3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmos DQo+IC0JCQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJhdHRyLA0KPiAtCQkJCWNoYXIgKmJ1Ziwg bG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQ0KPiAtew0KPiAtCXN0cnVjdCBtb2R1bGVfc2VjdF9h dHRyICpzYXR0ciA9DQo+IC0JCWNvbnRhaW5lcl9vZihiYXR0ciwgc3RydWN0IG1vZHVsZV9zZWN0 X2F0dHIsIGJhdHRyKTsNCj4gLQljaGFyIGJvdW5jZVtNT0RVTEVfU0VDVF9SRUFEX1NJWkUgKyAx XTsNCj4gLQlzaXplX3Qgd3JvdGU7DQo+IC0NCj4gLQlpZiAocG9zICE9IDApDQo+IC0JCXJldHVy biAtRUlOVkFMOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBTaW5jZSB3ZSdyZSBhIGJpbmFyeSByZWFk IGhhbmRsZXIsIHdlIG11c3QgYWNjb3VudCBmb3IgdGhlDQo+IC0JICogdHJhaWxpbmcgTlVMIGJ5 dGUgdGhhdCBzcHJpbnRmIHdpbGwgd3JpdGU6IGlmICJidWYiIGlzDQo+IC0JICogdG9vIHNtYWxs IHRvIGhvbGQgdGhlIE5VTCwgb3IgdGhlIE5VTCBpcyBleGFjdGx5IHRoZSBsYXN0DQo+IC0JICog Ynl0ZSwgdGhlIHJlYWQgd2lsbCBsb29rIGxpa2UgaXQgZ290IHRydW5jYXRlZCBieSBvbmUgYnl0 ZS4NCj4gLQkgKiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIHNwcmludGYgbmljZWx5IHRv IG5vdCB3cml0ZQ0KPiAtCSAqIHRoZSBOVUwsIHdlIGhhdmUgdG8gdXNlIGEgYm91bmNlIGJ1ZmZl ci4NCj4gLQkgKi8NCj4gLQl3cm90ZSA9IHNjbnByaW50Zihib3VuY2UsIHNpemVvZihib3VuY2Up LCAiMHglcHhcbiIsDQo+IC0JCQkga2FsbHN5bXNfc2hvd192YWx1ZShmaWxlLT5mX2NyZWQpDQo+ IC0JCQkJPyAodm9pZCAqKXNhdHRyLT5hZGRyZXNzIDogTlVMTCk7DQo+IC0JY291bnQgPSBtaW4o Y291bnQsIHdyb3RlKTsNCj4gLQltZW1jcHkoYnVmLCBib3VuY2UsIGNvdW50KTsNCj4gLQ0KPiAt CXJldHVybiBjb3VudDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgZnJlZV9zZWN0X2F0dHJz KHN0cnVjdCBtb2R1bGVfc2VjdF9hdHRycyAqc2VjdF9hdHRycykNCj4gLXsNCj4gLQl1bnNpZ25l ZCBpbnQgc2VjdGlvbjsNCj4gLQ0KPiAtCWZvciAoc2VjdGlvbiA9IDA7IHNlY3Rpb24gPCBzZWN0 X2F0dHJzLT5uc2VjdGlvbnM7IHNlY3Rpb24rKykNCj4gLQkJa2ZyZWUoc2VjdF9hdHRycy0+YXR0 cnNbc2VjdGlvbl0uYmF0dHIuYXR0ci5uYW1lKTsNCj4gLQlrZnJlZShzZWN0X2F0dHJzKTsNCj4g LX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgYWRkX3NlY3RfYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9k LCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0KPiAtew0KPiAtCXVuc2lnbmVkIGludCBu bG9hZGVkID0gMCwgaSwgc2l6ZVsyXTsNCj4gLQlzdHJ1Y3QgbW9kdWxlX3NlY3RfYXR0cnMgKnNl Y3RfYXR0cnM7DQo+IC0Jc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIgKnNhdHRyOw0KPiAtCXN0cnVj dCBiaW5fYXR0cmlidXRlICoqZ2F0dHI7DQo+IC0NCj4gLQkvKiBDb3VudCBsb2FkZWQgc2VjdGlv bnMgYW5kIGFsbG9jYXRlIHN0cnVjdHVyZXMgKi8NCj4gLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ aGRyLT5lX3NobnVtOyBpKyspDQo+IC0JCWlmICghc2VjdF9lbXB0eSgmaW5mby0+c2VjaGRyc1tp XSkpDQo+IC0JCQlubG9hZGVkKys7DQo+IC0Jc2l6ZVswXSA9IEFMSUdOKHN0cnVjdF9zaXplKHNl Y3RfYXR0cnMsIGF0dHJzLCBubG9hZGVkKSwNCj4gLQkJCXNpemVvZihzZWN0X2F0dHJzLT5ncnAu YmluX2F0dHJzWzBdKSk7DQo+IC0Jc2l6ZVsxXSA9IChubG9hZGVkICsgMSkgKiBzaXplb2Yoc2Vj dF9hdHRycy0+Z3JwLmJpbl9hdHRyc1swXSk7DQo+IC0Jc2VjdF9hdHRycyA9IGt6YWxsb2Moc2l6 ZVswXSArIHNpemVbMV0sIEdGUF9LRVJORUwpOw0KPiAtCWlmIChzZWN0X2F0dHJzID09IE5VTEwp DQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCS8qIFNldHVwIHNlY3Rpb24gYXR0cmlidXRlcy4gKi8N Cj4gLQlzZWN0X2F0dHJzLT5ncnAubmFtZSA9ICJzZWN0aW9ucyI7DQo+IC0Jc2VjdF9hdHRycy0+ Z3JwLmJpbl9hdHRycyA9ICh2b2lkICopc2VjdF9hdHRycyArIHNpemVbMF07DQo+IC0NCj4gLQlz ZWN0X2F0dHJzLT5uc2VjdGlvbnMgPSAwOw0KPiAtCXNhdHRyID0gJnNlY3RfYXR0cnMtPmF0dHJz WzBdOw0KPiAtCWdhdHRyID0gJnNlY3RfYXR0cnMtPmdycC5iaW5fYXR0cnNbMF07DQo+IC0JZm9y IChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgaSsrKSB7DQo+IC0JCUVsZl9TaGRyICpz ZWMgPSAmaW5mby0+c2VjaGRyc1tpXTsNCj4gLQkJaWYgKHNlY3RfZW1wdHkoc2VjKSkNCj4gLQkJ CWNvbnRpbnVlOw0KPiAtCQlzeXNmc19iaW5fYXR0cl9pbml0KCZzYXR0ci0+YmF0dHIpOw0KPiAt CQlzYXR0ci0+YWRkcmVzcyA9IHNlYy0+c2hfYWRkcjsNCj4gLQkJc2F0dHItPmJhdHRyLmF0dHIu bmFtZSA9DQo+IC0JCQlrc3RyZHVwKGluZm8tPnNlY3N0cmluZ3MgKyBzZWMtPnNoX25hbWUsIEdG UF9LRVJORUwpOw0KPiAtCQlpZiAoc2F0dHItPmJhdHRyLmF0dHIubmFtZSA9PSBOVUxMKQ0KPiAt CQkJZ290byBvdXQ7DQo+IC0JCXNlY3RfYXR0cnMtPm5zZWN0aW9ucysrOw0KPiAtCQlzYXR0ci0+ YmF0dHIucmVhZCA9IG1vZHVsZV9zZWN0X3JlYWQ7DQo+IC0JCXNhdHRyLT5iYXR0ci5zaXplID0g TU9EVUxFX1NFQ1RfUkVBRF9TSVpFOw0KPiAtCQlzYXR0ci0+YmF0dHIuYXR0ci5tb2RlID0gMDQw MDsNCj4gLQkJKihnYXR0cisrKSA9ICYoc2F0dHIrKyktPmJhdHRyOw0KPiAtCX0NCj4gLQkqZ2F0 dHIgPSBOVUxMOw0KPiAtDQo+IC0JaWYgKHN5c2ZzX2NyZWF0ZV9ncm91cCgmbW9kLT5ta29iai5r b2JqLCAmc2VjdF9hdHRycy0+Z3JwKSkNCj4gLQkJZ290byBvdXQ7DQo+IC0NCj4gLQltb2QtPnNl Y3RfYXR0cnMgPSBzZWN0X2F0dHJzOw0KPiAtCXJldHVybjsNCj4gLSAgb3V0Og0KPiAtCWZyZWVf c2VjdF9hdHRycyhzZWN0X2F0dHJzKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgcmVtb3Zl X3NlY3RfYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kKQ0KPiAtew0KPiAtCWlmIChtb2QtPnNlY3Rf YXR0cnMpIHsNCj4gLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtb2QtPm1rb2JqLmtvYmosDQo+IC0J CQkJICAgJm1vZC0+c2VjdF9hdHRycy0+Z3JwKTsNCj4gLQkJLyoNCj4gLQkJICogV2UgYXJlIHBv c2l0aXZlIHRoYXQgbm8gb25lIGlzIHVzaW5nIGFueSBzZWN0IGF0dHJzDQo+IC0JCSAqIGF0IHRo aXMgcG9pbnQuICBEZWFsbG9jYXRlIGltbWVkaWF0ZWx5Lg0KPiAtCQkgKi8NCj4gLQkJZnJlZV9z ZWN0X2F0dHJzKG1vZC0+c2VjdF9hdHRycyk7DQo+IC0JCW1vZC0+c2VjdF9hdHRycyA9IE5VTEw7 DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogL3N5cy9tb2R1bGUvZm9vL25vdGVzLy5z ZWN0aW9uLm5hbWUgZ2l2ZXMgY29udGVudHMgb2YgU0hUX05PVEUgc2VjdGlvbnMuDQo+IC0gKi8N Cj4gLQ0KPiAtc3RydWN0IG1vZHVsZV9ub3Rlc19hdHRycyB7DQo+IC0Jc3RydWN0IGtvYmplY3Qg KmRpcjsNCj4gLQl1bnNpZ25lZCBpbnQgbm90ZXM7DQo+IC0Jc3RydWN0IGJpbl9hdHRyaWJ1dGUg YXR0cnNbXTsNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBzc2l6ZV90IG1vZHVsZV9ub3Rlc19yZWFk KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qga29iamVjdCAqa29iaiwNCj4gLQkJCQkgc3RydWN0 IGJpbl9hdHRyaWJ1dGUgKmJpbl9hdHRyLA0KPiAtCQkJCSBjaGFyICpidWYsIGxvZmZfdCBwb3Ms IHNpemVfdCBjb3VudCkNCj4gLXsNCj4gLQkvKg0KPiAtCSAqIFRoZSBjYWxsZXIgY2hlY2tlZCB0 aGUgcG9zIGFuZCBjb3VudCBhZ2FpbnN0IG91ciBzaXplLg0KPiAtCSAqLw0KPiAtCW1lbWNweShi dWYsIGJpbl9hdHRyLT5wcml2YXRlICsgcG9zLCBjb3VudCk7DQo+IC0JcmV0dXJuIGNvdW50Ow0K PiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBmcmVlX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGVf bm90ZXNfYXR0cnMgKm5vdGVzX2F0dHJzLA0KPiAtCQkJICAgICB1bnNpZ25lZCBpbnQgaSkNCj4g LXsNCj4gLQlpZiAobm90ZXNfYXR0cnMtPmRpcikgew0KPiAtCQl3aGlsZSAoaS0tID4gMCkNCj4g LQkJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZShub3Rlc19hdHRycy0+ZGlyLA0KPiAtCQkJCQkgICAg ICAmbm90ZXNfYXR0cnMtPmF0dHJzW2ldKTsNCj4gLQkJa29iamVjdF9wdXQobm90ZXNfYXR0cnMt PmRpcik7DQo+IC0JfQ0KPiAtCWtmcmVlKG5vdGVzX2F0dHJzKTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIHZvaWQgYWRkX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0 IGxvYWRfaW5mbyAqaW5mbykNCj4gLXsNCj4gLQl1bnNpZ25lZCBpbnQgbm90ZXMsIGxvYWRlZCwg aTsNCj4gLQlzdHJ1Y3QgbW9kdWxlX25vdGVzX2F0dHJzICpub3Rlc19hdHRyczsNCj4gLQlzdHJ1 Y3QgYmluX2F0dHJpYnV0ZSAqbmF0dHI7DQo+IC0NCj4gLQkvKiBmYWlsZWQgdG8gY3JlYXRlIHNl Y3Rpb24gYXR0cmlidXRlcywgc28gY2FuJ3QgY3JlYXRlIG5vdGVzICovDQo+IC0JaWYgKCFtb2Qt PnNlY3RfYXR0cnMpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCS8qIENvdW50IG5vdGVzIHNlY3Rp b25zIGFuZCBhbGxvY2F0ZSBzdHJ1Y3R1cmVzLiAgKi8NCj4gLQlub3RlcyA9IDA7DQo+IC0JZm9y IChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9zaG51bTsgaSsrKQ0KPiAtCQlpZiAoIXNlY3RfZW1w dHkoJmluZm8tPnNlY2hkcnNbaV0pICYmDQo+IC0JCSAgICAoaW5mby0+c2VjaGRyc1tpXS5zaF90 eXBlID09IFNIVF9OT1RFKSkNCj4gLQkJCSsrbm90ZXM7DQo+IC0NCj4gLQlpZiAobm90ZXMgPT0g MCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0Jbm90ZXNfYXR0cnMgPSBremFsbG9jKHN0cnVjdF9z aXplKG5vdGVzX2F0dHJzLCBhdHRycywgbm90ZXMpLA0KPiAtCQkJICAgICAgR0ZQX0tFUk5FTCk7 DQo+IC0JaWYgKG5vdGVzX2F0dHJzID09IE5VTEwpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCW5v dGVzX2F0dHJzLT5ub3RlcyA9IG5vdGVzOw0KPiAtCW5hdHRyID0gJm5vdGVzX2F0dHJzLT5hdHRy c1swXTsNCj4gLQlmb3IgKGxvYWRlZCA9IGkgPSAwOyBpIDwgaW5mby0+aGRyLT5lX3NobnVtOyAr K2kpIHsNCj4gLQkJaWYgKHNlY3RfZW1wdHkoJmluZm8tPnNlY2hkcnNbaV0pKQ0KPiAtCQkJY29u dGludWU7DQo+IC0JCWlmIChpbmZvLT5zZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX05PVEUpIHsN Cj4gLQkJCXN5c2ZzX2Jpbl9hdHRyX2luaXQobmF0dHIpOw0KPiAtCQkJbmF0dHItPmF0dHIubmFt ZSA9IG1vZC0+c2VjdF9hdHRycy0+YXR0cnNbbG9hZGVkXS5iYXR0ci5hdHRyLm5hbWU7DQo+IC0J CQluYXR0ci0+YXR0ci5tb2RlID0gU19JUlVHTzsNCj4gLQkJCW5hdHRyLT5zaXplID0gaW5mby0+ c2VjaGRyc1tpXS5zaF9zaXplOw0KPiAtCQkJbmF0dHItPnByaXZhdGUgPSAodm9pZCAqKSBpbmZv LT5zZWNoZHJzW2ldLnNoX2FkZHI7DQo+IC0JCQluYXR0ci0+cmVhZCA9IG1vZHVsZV9ub3Rlc19y ZWFkOw0KPiAtCQkJKytuYXR0cjsNCj4gLQkJfQ0KPiAtCQkrK2xvYWRlZDsNCj4gLQl9DQo+IC0N Cj4gLQlub3Rlc19hdHRycy0+ZGlyID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgibm90ZXMiLCAm bW9kLT5ta29iai5rb2JqKTsNCj4gLQlpZiAoIW5vdGVzX2F0dHJzLT5kaXIpDQo+IC0JCWdvdG8g b3V0Ow0KPiAtDQo+IC0JZm9yIChpID0gMDsgaSA8IG5vdGVzOyArK2kpDQo+IC0JCWlmIChzeXNm c19jcmVhdGVfYmluX2ZpbGUobm90ZXNfYXR0cnMtPmRpciwNCj4gLQkJCQkJICAmbm90ZXNfYXR0 cnMtPmF0dHJzW2ldKSkNCj4gLQkJCWdvdG8gb3V0Ow0KPiAtDQo+IC0JbW9kLT5ub3Rlc19hdHRy cyA9IG5vdGVzX2F0dHJzOw0KPiAtCXJldHVybjsNCj4gLQ0KPiAtICBvdXQ6DQo+IC0JZnJlZV9u b3Rlc19hdHRycyhub3Rlc19hdHRycywgaSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHJl bW92ZV9ub3Rlc19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QpDQo+IC17DQo+IC0JaWYgKG1vZC0+ bm90ZXNfYXR0cnMpDQo+IC0JCWZyZWVfbm90ZXNfYXR0cnMobW9kLT5ub3Rlc19hdHRycywgbW9k LT5ub3Rlc19hdHRycy0+bm90ZXMpOw0KPiAtfQ0KPiAtDQo+IC0jZWxzZQ0KPiAtDQo+IC1zdGF0 aWMgaW5saW5lIHZvaWQgYWRkX3NlY3RfYXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kLA0KPiAtCQkJ CSAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykNCj4gLXsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIGlubGluZSB2b2lkIHJlbW92ZV9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4g LXsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlubGluZSB2b2lkIGFkZF9ub3Rlc19hdHRycyhzdHJ1 Y3QgbW9kdWxlICptb2QsDQo+IC0JCQkJICAgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykN Cj4gLXsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9ub3Rlc19hdHRy cyhzdHJ1Y3QgbW9kdWxlICptb2QpDQo+IC17DQo+IC19DQo+IC0jZW5kaWYgLyogQ09ORklHX0tB TExTWU1TICovDQo+IC0NCj4gLXN0YXRpYyB2b2lkIGRlbF91c2FnZV9saW5rcyhzdHJ1Y3QgbW9k dWxlICptb2QpDQo+IC17DQo+IC0jaWZkZWYgQ09ORklHX01PRFVMRV9VTkxPQUQNCj4gLQlzdHJ1 Y3QgbW9kdWxlX3VzZSAqdXNlOw0KPiAtDQo+IC0JbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsN Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVzZSwgJm1vZC0+dGFyZ2V0X2xpc3QsIHRhcmdldF9s aXN0KQ0KPiAtCQlzeXNmc19yZW1vdmVfbGluayh1c2UtPnRhcmdldC0+aG9sZGVyc19kaXIsIG1v ZC0+bmFtZSk7DQo+IC0JbXV0ZXhfdW5sb2NrKCZtb2R1bGVfbXV0ZXgpOw0KPiAtI2VuZGlmDQo+ IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgYWRkX3VzYWdlX2xpbmtzKHN0cnVjdCBtb2R1bGUgKm1v ZCkNCj4gLXsNCj4gLQlpbnQgcmV0ID0gMDsNCj4gLSNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9B RA0KPiAtCXN0cnVjdCBtb2R1bGVfdXNlICp1c2U7DQo+IC0NCj4gLQltdXRleF9sb2NrKCZtb2R1 bGVfbXV0ZXgpOw0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkodXNlLCAmbW9kLT50YXJnZXRfbGlz dCwgdGFyZ2V0X2xpc3QpIHsNCj4gLQkJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsodXNlLT50YXJn ZXQtPmhvbGRlcnNfZGlyLA0KPiAtCQkJCQkmbW9kLT5ta29iai5rb2JqLCBtb2QtPm5hbWUpOw0K PiAtCQlpZiAocmV0KQ0KPiAtCQkJYnJlYWs7DQo+IC0JfQ0KPiAtCW11dGV4X3VubG9jaygmbW9k dWxlX211dGV4KTsNCj4gLQlpZiAocmV0KQ0KPiAtCQlkZWxfdXNhZ2VfbGlua3MobW9kKTsNCj4g LSNlbmRpZg0KPiAtCXJldHVybiByZXQ7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIG1vZHVs ZV9yZW1vdmVfbW9kaW5mb19hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGludCBlbmQpOw0KPiAt DQo+IC1zdGF0aWMgaW50IG1vZHVsZV9hZGRfbW9kaW5mb19hdHRycyhzdHJ1Y3QgbW9kdWxlICpt b2QpDQo+IC17DQo+IC0Jc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKmF0dHI7DQo+IC0Jc3RydWN0 IG1vZHVsZV9hdHRyaWJ1dGUgKnRlbXBfYXR0cjsNCj4gLQlpbnQgZXJyb3IgPSAwOw0KPiAtCWlu dCBpOw0KPiAtDQo+IC0JbW9kLT5tb2RpbmZvX2F0dHJzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVj dCBtb2R1bGVfYXR0cmlidXRlKSAqDQo+IC0JCQkJCShBUlJBWV9TSVpFKG1vZGluZm9fYXR0cnMp ICsgMSkpLA0KPiAtCQkJCQlHRlBfS0VSTkVMKTsNCj4gLQlpZiAoIW1vZC0+bW9kaW5mb19hdHRy cykNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0NCj4gLQl0ZW1wX2F0dHIgPSBtb2QtPm1vZGlu Zm9fYXR0cnM7DQo+IC0JZm9yIChpID0gMDsgKGF0dHIgPSBtb2RpbmZvX2F0dHJzW2ldKTsgaSsr KSB7DQo+IC0JCWlmICghYXR0ci0+dGVzdCB8fCBhdHRyLT50ZXN0KG1vZCkpIHsNCj4gLQkJCW1l bWNweSh0ZW1wX2F0dHIsIGF0dHIsIHNpemVvZigqdGVtcF9hdHRyKSk7DQo+IC0JCQlzeXNmc19h dHRyX2luaXQoJnRlbXBfYXR0ci0+YXR0cik7DQo+IC0JCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9m aWxlKCZtb2QtPm1rb2JqLmtvYmosDQo+IC0JCQkJCSZ0ZW1wX2F0dHItPmF0dHIpOw0KPiAtCQkJ aWYgKGVycm9yKQ0KPiAtCQkJCWdvdG8gZXJyb3Jfb3V0Ow0KPiAtCQkJKyt0ZW1wX2F0dHI7DQo+ IC0JCX0NCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLQ0KPiAtZXJyb3Jfb3V0Og0KPiAt CWlmIChpID4gMCkNCj4gLQkJbW9kdWxlX3JlbW92ZV9tb2RpbmZvX2F0dHJzKG1vZCwgLS1pKTsN Cj4gLQllbHNlDQo+IC0JCWtmcmVlKG1vZC0+bW9kaW5mb19hdHRycyk7DQo+IC0JcmV0dXJuIGVy cm9yOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBtb2R1bGVfcmVtb3ZlX21vZGluZm9fYXR0 cnMoc3RydWN0IG1vZHVsZSAqbW9kLCBpbnQgZW5kKQ0KPiAtew0KPiAtCXN0cnVjdCBtb2R1bGVf YXR0cmlidXRlICphdHRyOw0KPiAtCWludCBpOw0KPiAtDQo+IC0JZm9yIChpID0gMDsgKGF0dHIg PSAmbW9kLT5tb2RpbmZvX2F0dHJzW2ldKTsgaSsrKSB7DQo+IC0JCWlmIChlbmQgPj0gMCAmJiBp ID4gZW5kKQ0KPiAtCQkJYnJlYWs7DQo+IC0JCS8qIHBpY2sgYSBmaWVsZCB0byB0ZXN0IGZvciBl bmQgb2YgbGlzdCAqLw0KPiAtCQlpZiAoIWF0dHItPmF0dHIubmFtZSkNCj4gLQkJCWJyZWFrOw0K PiAtCQlzeXNmc19yZW1vdmVfZmlsZSgmbW9kLT5ta29iai5rb2JqLCAmYXR0ci0+YXR0cik7DQo+ IC0JCWlmIChhdHRyLT5mcmVlKQ0KPiAtCQkJYXR0ci0+ZnJlZShtb2QpOw0KPiAtCX0NCj4gLQlr ZnJlZShtb2QtPm1vZGluZm9fYXR0cnMpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBtb2Rf a29iamVjdF9wdXQoc3RydWN0IG1vZHVsZSAqbW9kKQ0KPiAtew0KPiAtCURFQ0xBUkVfQ09NUExF VElPTl9PTlNUQUNLKGMpOw0KPiAtCW1vZC0+bWtvYmoua29ial9jb21wbGV0aW9uID0gJmM7DQo+ IC0Ja29iamVjdF9wdXQoJm1vZC0+bWtvYmoua29iaik7DQo+IC0Jd2FpdF9mb3JfY29tcGxldGlv bigmYyk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgbW9kX3N5c2ZzX2luaXQoc3RydWN0IG1v ZHVsZSAqbW9kKQ0KPiAtew0KPiAtCWludCBlcnI7DQo+IC0Jc3RydWN0IGtvYmplY3QgKmtvYmo7 DQo+IC0NCj4gLQlpZiAoIW1vZHVsZV9zeXNmc19pbml0aWFsaXplZCkgew0KPiAtCQlwcl9lcnIo IiVzOiBtb2R1bGUgc3lzZnMgbm90IGluaXRpYWxpemVkXG4iLCBtb2QtPm5hbWUpOw0KPiAtCQll cnIgPSAtRUlOVkFMOw0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+IC0NCj4gLQlrb2JqID0ga3Nl dF9maW5kX29iaihtb2R1bGVfa3NldCwgbW9kLT5uYW1lKTsNCj4gLQlpZiAoa29iaikgew0KPiAt CQlwcl9lcnIoIiVzOiBtb2R1bGUgaXMgYWxyZWFkeSBsb2FkZWRcbiIsIG1vZC0+bmFtZSk7DQo+ IC0JCWtvYmplY3RfcHV0KGtvYmopOw0KPiAtCQllcnIgPSAtRUlOVkFMOw0KPiAtCQlnb3RvIG91 dDsNCj4gLQl9DQo+IC0NCj4gLQltb2QtPm1rb2JqLm1vZCA9IG1vZDsNCj4gLQ0KPiAtCW1lbXNl dCgmbW9kLT5ta29iai5rb2JqLCAwLCBzaXplb2YobW9kLT5ta29iai5rb2JqKSk7DQo+IC0JbW9k LT5ta29iai5rb2JqLmtzZXQgPSBtb2R1bGVfa3NldDsNCj4gLQllcnIgPSBrb2JqZWN0X2luaXRf YW5kX2FkZCgmbW9kLT5ta29iai5rb2JqLCAmbW9kdWxlX2t0eXBlLCBOVUxMLA0KPiAtCQkJCSAg ICIlcyIsIG1vZC0+bmFtZSk7DQo+IC0JaWYgKGVycikNCj4gLQkJbW9kX2tvYmplY3RfcHV0KG1v ZCk7DQo+IC0NCj4gLW91dDoNCj4gLQlyZXR1cm4gZXJyOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg aW50IG1vZF9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsDQo+IC0JCQkgICBjb25zdCBz dHJ1Y3QgbG9hZF9pbmZvICppbmZvLA0KPiAtCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3Bh cmFtLA0KPiAtCQkJICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpDQo+IC17DQo+IC0JaW50IGVy cjsNCj4gLQ0KPiAtCWVyciA9IG1vZF9zeXNmc19pbml0KG1vZCk7DQo+IC0JaWYgKGVycikNCj4g LQkJZ290byBvdXQ7DQo+IC0NCj4gLQltb2QtPmhvbGRlcnNfZGlyID0ga29iamVjdF9jcmVhdGVf YW5kX2FkZCgiaG9sZGVycyIsICZtb2QtPm1rb2JqLmtvYmopOw0KPiAtCWlmICghbW9kLT5ob2xk ZXJzX2Rpcikgew0KPiAtCQllcnIgPSAtRU5PTUVNOw0KPiAtCQlnb3RvIG91dF91bnJlZzsNCj4g LQl9DQo+IC0NCj4gLQllcnIgPSBtb2R1bGVfcGFyYW1fc3lzZnNfc2V0dXAobW9kLCBrcGFyYW0s IG51bV9wYXJhbXMpOw0KPiAtCWlmIChlcnIpDQo+IC0JCWdvdG8gb3V0X3VucmVnX2hvbGRlcnM7 DQo+IC0NCj4gLQllcnIgPSBtb2R1bGVfYWRkX21vZGluZm9fYXR0cnMobW9kKTsNCj4gLQlpZiAo ZXJyKQ0KPiAtCQlnb3RvIG91dF91bnJlZ19wYXJhbTsNCj4gLQ0KPiAtCWVyciA9IGFkZF91c2Fn ZV9saW5rcyhtb2QpOw0KPiAtCWlmIChlcnIpDQo+IC0JCWdvdG8gb3V0X3VucmVnX21vZGluZm9f YXR0cnM7DQo+IC0NCj4gLQlhZGRfc2VjdF9hdHRycyhtb2QsIGluZm8pOw0KPiAtCWFkZF9ub3Rl c19hdHRycyhtb2QsIGluZm8pOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC0NCj4gLW91dF91bnJl Z19tb2RpbmZvX2F0dHJzOg0KPiAtCW1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhtb2QsIC0x KTsNCj4gLW91dF91bnJlZ19wYXJhbToNCj4gLQltb2R1bGVfcGFyYW1fc3lzZnNfcmVtb3ZlKG1v ZCk7DQo+IC1vdXRfdW5yZWdfaG9sZGVyczoNCj4gLQlrb2JqZWN0X3B1dChtb2QtPmhvbGRlcnNf ZGlyKTsNCj4gLW91dF91bnJlZzoNCj4gLQltb2Rfa29iamVjdF9wdXQobW9kKTsNCj4gLW91dDoN Cj4gLQlyZXR1cm4gZXJyOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBtb2Rfc3lzZnNfZmlu aShzdHJ1Y3QgbW9kdWxlICptb2QpDQo+IC17DQo+IC0JcmVtb3ZlX25vdGVzX2F0dHJzKG1vZCk7 DQo+IC0JcmVtb3ZlX3NlY3RfYXR0cnMobW9kKTsNCj4gLQltb2Rfa29iamVjdF9wdXQobW9kKTsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgaW5pdF9wYXJhbV9sb2NrKHN0cnVjdCBtb2R1bGUg Km1vZCkNCj4gLXsNCj4gLQltdXRleF9pbml0KCZtb2QtPnBhcmFtX2xvY2spOw0KPiAtfQ0KPiAt I2Vsc2UgLyogIUNPTkZJR19TWVNGUyAqLw0KPiAtDQo+IC1zdGF0aWMgaW50IG1vZF9zeXNmc19z ZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsDQo+IC0JCQkgICBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZv ICppbmZvLA0KPiAtCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3BhcmFtLA0KPiAtCQkJICAg dW5zaWduZWQgaW50IG51bV9wYXJhbXMpDQo+IC17DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyB2b2lkIG1vZF9zeXNmc19maW5pKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gLXsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgbW9kdWxlX3JlbW92ZV9tb2RpbmZvX2F0dHJzKHN0 cnVjdCBtb2R1bGUgKm1vZCwgaW50IGVuZCkNCj4gLXsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZv aWQgZGVsX3VzYWdlX2xpbmtzKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gLXsNCj4gLX0NCj4gLQ0K PiAtc3RhdGljIHZvaWQgaW5pdF9wYXJhbV9sb2NrKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gLXsN Cj4gLX0NCj4gLSNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8NCj4gLQ0KPiAtc3RhdGljIHZvaWQg bW9kX3N5c2ZzX3RlYXJkb3duKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gLXsNCj4gLQlkZWxfdXNh Z2VfbGlua3MobW9kKTsNCj4gLQltb2R1bGVfcmVtb3ZlX21vZGluZm9fYXR0cnMobW9kLCAtMSk7 DQo+IC0JbW9kdWxlX3BhcmFtX3N5c2ZzX3JlbW92ZShtb2QpOw0KPiAtCWtvYmplY3RfcHV0KG1v ZC0+bWtvYmouZHJpdmVyc19kaXIpOw0KPiAtCWtvYmplY3RfcHV0KG1vZC0+aG9sZGVyc19kaXIp Ow0KPiAtCW1vZF9zeXNmc19maW5pKG1vZCk7DQo+IC19DQo+IC0NCj4gICAvKg0KPiAgICAqIExL TSBSTy9OWCBwcm90ZWN0aW9uOiBwcm90ZWN0IG1vZHVsZSdzIHRleHQvcm8tZGF0YQ0KPiAgICAq IGZyb20gbW9kaWZpY2F0aW9uIGFuZCBhbnkgZGF0YSBmcm9tIGV4ZWN1dGlvbi4NCj4gZGlmZiAt LWdpdCBhL2tlcm5lbC9tb2R1bGUvc3lzZnMuYyBiL2tlcm5lbC9tb2R1bGUvc3lzZnMuYw0KPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmNlNjhmODIxZGNkMQ0K PiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2tlcm5lbC9tb2R1bGUvc3lzZnMuYw0KPiBAQCAtMCww ICsxLDQzNiBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0 ZXINCj4gKy8qDQo+ICsgKiBNb2R1bGUgc3lzZnMgc3VwcG9ydA0KPiArICoNCj4gKyAqIENvcHly aWdodCAoQykgMjAwOCBSdXN0eSBSdXNzZWxsDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGxp bnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L2ZzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9tdXRleC5oPg0KPiArI2luY2x1ZGUgImludGVybmFsLmgiDQo+ICsNCj4gKy8qDQo+ ICsgKiAvc3lzL21vZHVsZS9mb28vc2VjdGlvbnMgc3R1ZmYNCj4gKyAqIEouIENvcmJldCA8Y29y YmV0QGx3bi5uZXQ+DQo+ICsgKi8NCj4gKyNpZmRlZiBDT05GSUdfS0FMTFNZTVMNCj4gK3N0cnVj dCBtb2R1bGVfc2VjdF9hdHRyIHsNCj4gKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiYXR0cjsNCj4g Kwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgbW9kdWxlX3Nl Y3RfYXR0cnMgew0KPiArCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3JwOw0KPiArCXVuc2lnbmVk IGludCBuc2VjdGlvbnM7DQo+ICsJc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIgYXR0cnNbXTsNCj4g K307DQo+ICsNCj4gKyNkZWZpbmUgTU9EVUxFX1NFQ1RfUkVBRF9TSVpFICgzIC8qICIweCIsICJc biIgKi8gKyAoQklUU19QRVJfTE9ORyAvIDQpKQ0KPiArc3RhdGljIHNzaXplX3QgbW9kdWxlX3Nl Y3RfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtvYmplY3QgKmtvYmosDQo+ICsJCQkJ c3RydWN0IGJpbl9hdHRyaWJ1dGUgKmJhdHRyLA0KPiArCQkJCWNoYXIgKmJ1ZiwgbG9mZl90IHBv cywgc2l6ZV90IGNvdW50KQ0KPiArew0KPiArCXN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyICpzYXR0 ciA9DQo+ICsJCWNvbnRhaW5lcl9vZihiYXR0ciwgc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIsIGJh dHRyKTsNCj4gKwljaGFyIGJvdW5jZVtNT0RVTEVfU0VDVF9SRUFEX1NJWkUgKyAxXTsNCj4gKwlz aXplX3Qgd3JvdGU7DQo+ICsNCj4gKwlpZiAocG9zICE9IDApDQo+ICsJCXJldHVybiAtRUlOVkFM Ow0KPiArDQo+ICsJLyoNCj4gKwkgKiBTaW5jZSB3ZSdyZSBhIGJpbmFyeSByZWFkIGhhbmRsZXIs IHdlIG11c3QgYWNjb3VudCBmb3IgdGhlDQo+ICsJICogdHJhaWxpbmcgTlVMIGJ5dGUgdGhhdCBz cHJpbnRmIHdpbGwgd3JpdGU6IGlmICJidWYiIGlzDQo+ICsJICogdG9vIHNtYWxsIHRvIGhvbGQg dGhlIE5VTCwgb3IgdGhlIE5VTCBpcyBleGFjdGx5IHRoZSBsYXN0DQo+ICsJICogYnl0ZSwgdGhl IHJlYWQgd2lsbCBsb29rIGxpa2UgaXQgZ290IHRydW5jYXRlZCBieSBvbmUgYnl0ZS4NCj4gKwkg KiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gYXNrIHNwcmludGYgbmljZWx5IHRvIG5vdCB3cml0 ZQ0KPiArCSAqIHRoZSBOVUwsIHdlIGhhdmUgdG8gdXNlIGEgYm91bmNlIGJ1ZmZlci4NCj4gKwkg Ki8NCj4gKwl3cm90ZSA9IHNjbnByaW50Zihib3VuY2UsIHNpemVvZihib3VuY2UpLCAiMHglcHhc biIsDQo+ICsJCQkgIGthbGxzeW1zX3Nob3dfdmFsdWUoZmlsZS0+Zl9jcmVkKQ0KPiArCQkJCT8g KHZvaWQgKilzYXR0ci0+YWRkcmVzcyA6IE5VTEwpOw0KPiArCWNvdW50ID0gbWluKGNvdW50LCB3 cm90ZSk7DQo+ICsJbWVtY3B5KGJ1ZiwgYm91bmNlLCBjb3VudCk7DQo+ICsNCj4gKwlyZXR1cm4g Y291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZyZWVfc2VjdF9hdHRycyhzdHJ1Y3Qg bW9kdWxlX3NlY3RfYXR0cnMgKnNlY3RfYXR0cnMpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IHNl Y3Rpb247DQo+ICsNCj4gKwlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgc2VjdF9hdHRycy0+ bnNlY3Rpb25zOyBzZWN0aW9uKyspDQo+ICsJCWtmcmVlKHNlY3RfYXR0cnMtPmF0dHJzW3NlY3Rp b25dLmJhdHRyLmF0dHIubmFtZSk7DQo+ICsJa2ZyZWUoc2VjdF9hdHRycyk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGFkZF9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qg c3RydWN0IGxvYWRfaW5mbyAqaW5mbykNCj4gK3sNCj4gKwl1bnNpZ25lZCBpbnQgbmxvYWRlZCA9 IDAsIGksIHNpemVbMl07DQo+ICsJc3RydWN0IG1vZHVsZV9zZWN0X2F0dHJzICpzZWN0X2F0dHJz Ow0KPiArCXN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyICpzYXR0cjsNCj4gKwlzdHJ1Y3QgYmluX2F0 dHJpYnV0ZSAqKmdhdHRyOw0KPiArDQo+ICsJLyogQ291bnQgbG9hZGVkIHNlY3Rpb25zIGFuZCBh bGxvY2F0ZSBzdHJ1Y3R1cmVzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IGluZm8tPmhkci0+ZV9z aG51bTsgaSsrKQ0KPiArCQlpZiAoIXNlY3RfZW1wdHkoJmluZm8tPnNlY2hkcnNbaV0pKQ0KPiAr CQkJbmxvYWRlZCsrOw0KPiArCXNpemVbMF0gPSBBTElHTihzdHJ1Y3Rfc2l6ZShzZWN0X2F0dHJz LCBhdHRycywgbmxvYWRlZCksDQo+ICsJCQlzaXplb2Yoc2VjdF9hdHRycy0+Z3JwLmJpbl9hdHRy c1swXSkpOw0KPiArCXNpemVbMV0gPSAobmxvYWRlZCArIDEpICogc2l6ZW9mKHNlY3RfYXR0cnMt PmdycC5iaW5fYXR0cnNbMF0pOw0KPiArCXNlY3RfYXR0cnMgPSBremFsbG9jKHNpemVbMF0gKyBz aXplWzFdLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXNlY3RfYXR0cnMpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCS8qIFNldHVwIHNlY3Rpb24gYXR0cmlidXRlcy4gKi8NCj4gKwlzZWN0X2F0dHJz LT5ncnAubmFtZSA9ICJzZWN0aW9ucyI7DQo+ICsJc2VjdF9hdHRycy0+Z3JwLmJpbl9hdHRycyA9 ICh2b2lkICopc2VjdF9hdHRycyArIHNpemVbMF07DQo+ICsNCj4gKwlzZWN0X2F0dHJzLT5uc2Vj dGlvbnMgPSAwOw0KPiArCXNhdHRyID0gJnNlY3RfYXR0cnMtPmF0dHJzWzBdOw0KPiArCWdhdHRy ID0gJnNlY3RfYXR0cnMtPmdycC5iaW5fYXR0cnNbMF07DQo+ICsJZm9yIChpID0gMDsgaSA8IGlu Zm8tPmhkci0+ZV9zaG51bTsgaSsrKSB7DQo+ICsJCUVsZl9TaGRyICpzZWMgPSAmaW5mby0+c2Vj aGRyc1tpXTsNCj4gKw0KPiArCQlpZiAoc2VjdF9lbXB0eShzZWMpKQ0KPiArCQkJY29udGludWU7 DQo+ICsJCXN5c2ZzX2Jpbl9hdHRyX2luaXQoJnNhdHRyLT5iYXR0cik7DQo+ICsJCXNhdHRyLT5h ZGRyZXNzID0gc2VjLT5zaF9hZGRyOw0KPiArCQlzYXR0ci0+YmF0dHIuYXR0ci5uYW1lID0NCj4g KwkJCWtzdHJkdXAoaW5mby0+c2Vjc3RyaW5ncyArIHNlYy0+c2hfbmFtZSwgR0ZQX0tFUk5FTCk7 DQo+ICsJCWlmICghc2F0dHItPmJhdHRyLmF0dHIubmFtZSkNCj4gKwkJCWdvdG8gb3V0Ow0KPiAr CQlzZWN0X2F0dHJzLT5uc2VjdGlvbnMrKzsNCj4gKwkJc2F0dHItPmJhdHRyLnJlYWQgPSBtb2R1 bGVfc2VjdF9yZWFkOw0KPiArCQlzYXR0ci0+YmF0dHIuc2l6ZSA9IE1PRFVMRV9TRUNUX1JFQURf U0laRTsNCj4gKwkJc2F0dHItPmJhdHRyLmF0dHIubW9kZSA9IDA0MDA7DQo+ICsJCSooZ2F0dHIr KykgPSAmKHNhdHRyKyspLT5iYXR0cjsNCj4gKwl9DQo+ICsJKmdhdHRyID0gTlVMTDsNCj4gKw0K PiArCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJm1vZC0+bWtvYmoua29iaiwgJnNlY3RfYXR0cnMt PmdycCkpDQo+ICsJCWdvdG8gb3V0Ow0KPiArDQo+ICsJbW9kLT5zZWN0X2F0dHJzID0gc2VjdF9h dHRyczsNCj4gKwlyZXR1cm47DQo+ICtvdXQ6DQo+ICsJZnJlZV9zZWN0X2F0dHJzKHNlY3RfYXR0 cnMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCByZW1vdmVfc2VjdF9hdHRycyhzdHJ1Y3Qg bW9kdWxlICptb2QpDQo+ICt7DQo+ICsJaWYgKG1vZC0+c2VjdF9hdHRycykgew0KPiArCQlzeXNm c19yZW1vdmVfZ3JvdXAoJm1vZC0+bWtvYmoua29iaiwNCj4gKwkJCQkgICAmbW9kLT5zZWN0X2F0 dHJzLT5ncnApOw0KPiArCQkvKg0KPiArCQkgKiBXZSBhcmUgcG9zaXRpdmUgdGhhdCBubyBvbmUg aXMgdXNpbmcgYW55IHNlY3QgYXR0cnMNCj4gKwkJICogYXQgdGhpcyBwb2ludC4gIERlYWxsb2Nh dGUgaW1tZWRpYXRlbHkuDQo+ICsJCSAqLw0KPiArCQlmcmVlX3NlY3RfYXR0cnMobW9kLT5zZWN0 X2F0dHJzKTsNCj4gKwkJbW9kLT5zZWN0X2F0dHJzID0gTlVMTDsNCj4gKwl9DQo+ICt9DQo+ICsN Cj4gKy8qDQo+ICsgKiAvc3lzL21vZHVsZS9mb28vbm90ZXMvLnNlY3Rpb24ubmFtZSBnaXZlcyBj b250ZW50cyBvZiBTSFRfTk9URSBzZWN0aW9ucy4NCj4gKyAqLw0KPiArDQo+ICtzdHJ1Y3QgbW9k dWxlX25vdGVzX2F0dHJzIHsNCj4gKwlzdHJ1Y3Qga29iamVjdCAqZGlyOw0KPiArCXVuc2lnbmVk IGludCBub3RlczsNCj4gKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBhdHRyc1tdOw0KPiArfTsNCj4g Kw0KPiArc3RhdGljIHNzaXplX3QgbW9kdWxlX25vdGVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAs IHN0cnVjdCBrb2JqZWN0ICprb2JqLA0KPiArCQkJCSBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYmlu X2F0dHIsDQo+ICsJCQkJIGNoYXIgKmJ1ZiwgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50KQ0KPiAr ew0KPiArCS8qDQo+ICsJICogVGhlIGNhbGxlciBjaGVja2VkIHRoZSBwb3MgYW5kIGNvdW50IGFn YWluc3Qgb3VyIHNpemUuDQo+ICsJICovDQo+ICsJbWVtY3B5KGJ1ZiwgYmluX2F0dHItPnByaXZh dGUgKyBwb3MsIGNvdW50KTsNCj4gKwlyZXR1cm4gY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIGZyZWVfbm90ZXNfYXR0cnMoc3RydWN0IG1vZHVsZV9ub3Rlc19hdHRycyAqbm90ZXNf YXR0cnMsDQo+ICsJCQkgICAgIHVuc2lnbmVkIGludCBpKQ0KPiArew0KPiArCWlmIChub3Rlc19h dHRycy0+ZGlyKSB7DQo+ICsJCXdoaWxlIChpLS0gPiAwKQ0KPiArCQkJc3lzZnNfcmVtb3ZlX2Jp bl9maWxlKG5vdGVzX2F0dHJzLT5kaXIsDQo+ICsJCQkJCSAgICAgICZub3Rlc19hdHRycy0+YXR0 cnNbaV0pOw0KPiArCQlrb2JqZWN0X3B1dChub3Rlc19hdHRycy0+ZGlyKTsNCj4gKwl9DQo+ICsJ a2ZyZWUobm90ZXNfYXR0cnMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBhZGRfbm90ZXNf YXR0cnMoc3RydWN0IG1vZHVsZSAqbW9kLCBjb25zdCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvKQ0K PiArew0KPiArCXVuc2lnbmVkIGludCBub3RlcywgbG9hZGVkLCBpOw0KPiArCXN0cnVjdCBtb2R1 bGVfbm90ZXNfYXR0cnMgKm5vdGVzX2F0dHJzOw0KPiArCXN0cnVjdCBiaW5fYXR0cmlidXRlICpu YXR0cjsNCj4gKw0KPiArCS8qIGZhaWxlZCB0byBjcmVhdGUgc2VjdGlvbiBhdHRyaWJ1dGVzLCBz byBjYW4ndCBjcmVhdGUgbm90ZXMgKi8NCj4gKwlpZiAoIW1vZC0+c2VjdF9hdHRycykNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJLyogQ291bnQgbm90ZXMgc2VjdGlvbnMgYW5kIGFsbG9jYXRlIHN0 cnVjdHVyZXMuICAqLw0KPiArCW5vdGVzID0gMDsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+ aGRyLT5lX3NobnVtOyBpKyspDQo+ICsJCWlmICghc2VjdF9lbXB0eSgmaW5mby0+c2VjaGRyc1tp XSkgJiYNCj4gKwkJICAgIGluZm8tPnNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfTk9URSkNCj4g KwkJCSsrbm90ZXM7DQo+ICsNCj4gKwlpZiAobm90ZXMgPT0gMCkNCj4gKwkJcmV0dXJuOw0KPiAr DQo+ICsJbm90ZXNfYXR0cnMgPSBremFsbG9jKHN0cnVjdF9zaXplKG5vdGVzX2F0dHJzLCBhdHRy cywgbm90ZXMpLA0KPiArCQkJICAgICAgR0ZQX0tFUk5FTCk7DQo+ICsJaWYgKCFub3Rlc19hdHRy cykNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJbm90ZXNfYXR0cnMtPm5vdGVzID0gbm90ZXM7DQo+ ICsJbmF0dHIgPSAmbm90ZXNfYXR0cnMtPmF0dHJzWzBdOw0KPiArCWZvciAobG9hZGVkID0gaSA9 IDA7IGkgPCBpbmZvLT5oZHItPmVfc2hudW07ICsraSkgew0KPiArCQlpZiAoc2VjdF9lbXB0eSgm aW5mby0+c2VjaGRyc1tpXSkpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJaWYgKGluZm8tPnNlY2hk cnNbaV0uc2hfdHlwZSA9PSBTSFRfTk9URSkgew0KPiArCQkJc3lzZnNfYmluX2F0dHJfaW5pdChu YXR0cik7DQo+ICsJCQluYXR0ci0+YXR0ci5uYW1lID0gbW9kLT5zZWN0X2F0dHJzLT5hdHRyc1ts b2FkZWRdLmJhdHRyLmF0dHIubmFtZTsNCj4gKwkJCW5hdHRyLT5hdHRyLm1vZGUgPSAwNDQ0Ow0K PiArCQkJbmF0dHItPnNpemUgPSBpbmZvLT5zZWNoZHJzW2ldLnNoX3NpemU7DQo+ICsJCQluYXR0 ci0+cHJpdmF0ZSA9ICh2b2lkICopaW5mby0+c2VjaGRyc1tpXS5zaF9hZGRyOw0KPiArCQkJbmF0 dHItPnJlYWQgPSBtb2R1bGVfbm90ZXNfcmVhZDsNCj4gKwkJCSsrbmF0dHI7DQo+ICsJCX0NCj4g KwkJKytsb2FkZWQ7DQo+ICsJfQ0KPiArDQo+ICsJbm90ZXNfYXR0cnMtPmRpciA9IGtvYmplY3Rf Y3JlYXRlX2FuZF9hZGQoIm5vdGVzIiwgJm1vZC0+bWtvYmoua29iaik7DQo+ICsJaWYgKCFub3Rl c19hdHRycy0+ZGlyKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBu b3RlczsgKytpKQ0KPiArCQlpZiAoc3lzZnNfY3JlYXRlX2Jpbl9maWxlKG5vdGVzX2F0dHJzLT5k aXIsDQo+ICsJCQkJCSAgJm5vdGVzX2F0dHJzLT5hdHRyc1tpXSkpDQo+ICsJCQlnb3RvIG91dDsN Cj4gKw0KPiArCW1vZC0+bm90ZXNfYXR0cnMgPSBub3Rlc19hdHRyczsNCj4gKwlyZXR1cm47DQo+ ICsNCj4gK291dDoNCj4gKwlmcmVlX25vdGVzX2F0dHJzKG5vdGVzX2F0dHJzLCBpKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHZvaWQgcmVtb3ZlX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1v ZCkNCj4gK3sNCj4gKwlpZiAobW9kLT5ub3Rlc19hdHRycykNCj4gKwkJZnJlZV9ub3Rlc19hdHRy cyhtb2QtPm5vdGVzX2F0dHJzLCBtb2QtPm5vdGVzX2F0dHJzLT5ub3Rlcyk7DQo+ICt9DQo+ICsN Cj4gKyNlbHNlIC8qICFDT05GSUdfS0FMTFNZTVMgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBh ZGRfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIGNvbnN0IHN0cnVjdCBsb2FkX2luZm8g KmluZm8pIHsgfQ0KPiArc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9zZWN0X2F0dHJzKHN0cnVj dCBtb2R1bGUgKm1vZCkgeyB9DQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgYWRkX25vdGVzX2F0dHJz KHN0cnVjdCBtb2R1bGUgKm1vZCwgY29uc3Qgc3RydWN0IGxvYWRfaW5mbyAqaW5mbykgeyB9DQo+ ICtzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX25vdGVzX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1v ZCkgeyB9DQo+ICsjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovDQo+ICsNCj4gK3N0YXRpYyB2 b2lkIGRlbF91c2FnZV9saW5rcyhzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICt7DQo+ICsjaWZkZWYg Q09ORklHX01PRFVMRV9VTkxPQUQNCj4gKwlzdHJ1Y3QgbW9kdWxlX3VzZSAqdXNlOw0KPiArDQo+ ICsJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHVz ZSwgJm1vZC0+dGFyZ2V0X2xpc3QsIHRhcmdldF9saXN0KQ0KPiArCQlzeXNmc19yZW1vdmVfbGlu ayh1c2UtPnRhcmdldC0+aG9sZGVyc19kaXIsIG1vZC0+bmFtZSk7DQo+ICsJbXV0ZXhfdW5sb2Nr KCZtb2R1bGVfbXV0ZXgpOw0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYWRk X3VzYWdlX2xpbmtzKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gK3sNCj4gKwlpbnQgcmV0ID0gMDsN Cj4gKyNpZmRlZiBDT05GSUdfTU9EVUxFX1VOTE9BRA0KPiArCXN0cnVjdCBtb2R1bGVfdXNlICp1 c2U7DQo+ICsNCj4gKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOw0KPiArCWxpc3RfZm9yX2Vh Y2hfZW50cnkodXNlLCAmbW9kLT50YXJnZXRfbGlzdCwgdGFyZ2V0X2xpc3QpIHsNCj4gKwkJcmV0 ID0gc3lzZnNfY3JlYXRlX2xpbmsodXNlLT50YXJnZXQtPmhvbGRlcnNfZGlyLA0KPiArCQkJCQkm bW9kLT5ta29iai5rb2JqLCBtb2QtPm5hbWUpOw0KPiArCQlpZiAocmV0KQ0KPiArCQkJYnJlYWs7 DQo+ICsJfQ0KPiArCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsNCj4gKwlpZiAocmV0KQ0K PiArCQlkZWxfdXNhZ2VfbGlua3MobW9kKTsNCj4gKyNlbmRpZg0KPiArCXJldHVybiByZXQ7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhzdHJ1 Y3QgbW9kdWxlICptb2QsIGludCBlbmQpDQo+ICt7DQo+ICsJc3RydWN0IG1vZHVsZV9hdHRyaWJ1 dGUgKmF0dHI7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyAoYXR0ciA9ICZtb2Qt Pm1vZGluZm9fYXR0cnNbaV0pOyBpKyspIHsNCj4gKwkJaWYgKGVuZCA+PSAwICYmIGkgPiBlbmQp DQo+ICsJCQlicmVhazsNCj4gKwkJLyogcGljayBhIGZpZWxkIHRvIHRlc3QgZm9yIGVuZCBvZiBs aXN0ICovDQo+ICsJCWlmICghYXR0ci0+YXR0ci5uYW1lKQ0KPiArCQkJYnJlYWs7DQo+ICsJCXN5 c2ZzX3JlbW92ZV9maWxlKCZtb2QtPm1rb2JqLmtvYmosICZhdHRyLT5hdHRyKTsNCj4gKwkJaWYg KGF0dHItPmZyZWUpDQo+ICsJCQlhdHRyLT5mcmVlKG1vZCk7DQo+ICsJfQ0KPiArCWtmcmVlKG1v ZC0+bW9kaW5mb19hdHRycyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbW9kdWxlX2FkZF9t b2RpbmZvX2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgbW9kdWxl X2F0dHJpYnV0ZSAqYXR0cjsNCj4gKwlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqdGVtcF9hdHRy Ow0KPiArCWludCBlcnJvciA9IDA7DQo+ICsJaW50IGk7DQo+ICsNCj4gKwltb2QtPm1vZGluZm9f YXR0cnMgPSBremFsbG9jKChzaXplb2Yoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUpICoNCj4gKwkJ CQkJKG1vZGluZm9fYXR0cnNfY291bnQgKyAxKSksDQo+ICsJCQkJCUdGUF9LRVJORUwpOw0KPiAr CWlmICghbW9kLT5tb2RpbmZvX2F0dHJzKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gKw0KPiAr CXRlbXBfYXR0ciA9IG1vZC0+bW9kaW5mb19hdHRyczsNCj4gKwlmb3IgKGkgPSAwOyAoYXR0ciA9 IG1vZGluZm9fYXR0cnNbaV0pOyBpKyspIHsNCj4gKwkJaWYgKCFhdHRyLT50ZXN0IHx8IGF0dHIt PnRlc3QobW9kKSkgew0KPiArCQkJbWVtY3B5KHRlbXBfYXR0ciwgYXR0ciwgc2l6ZW9mKCp0ZW1w X2F0dHIpKTsNCj4gKwkJCXN5c2ZzX2F0dHJfaW5pdCgmdGVtcF9hdHRyLT5hdHRyKTsNCj4gKwkJ CWVycm9yID0gc3lzZnNfY3JlYXRlX2ZpbGUoJm1vZC0+bWtvYmoua29iaiwNCj4gKwkJCQkJCSAg JnRlbXBfYXR0ci0+YXR0cik7DQo+ICsJCQlpZiAoZXJyb3IpDQo+ICsJCQkJZ290byBlcnJvcl9v dXQ7DQo+ICsJCQkrK3RlbXBfYXR0cjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXJldHVybiAw Ow0KPiArDQo+ICtlcnJvcl9vdXQ6DQo+ICsJaWYgKGkgPiAwKQ0KPiArCQltb2R1bGVfcmVtb3Zl X21vZGluZm9fYXR0cnMobW9kLCAtLWkpOw0KPiArCWVsc2UNCj4gKwkJa2ZyZWUobW9kLT5tb2Rp bmZvX2F0dHJzKTsNCj4gKwlyZXR1cm4gZXJyb3I7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lk IG1vZF9rb2JqZWN0X3B1dChzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICt7DQo+ICsJREVDTEFSRV9D T01QTEVUSU9OX09OU1RBQ0soYyk7DQo+ICsNCj4gKwltb2QtPm1rb2JqLmtvYmpfY29tcGxldGlv biA9ICZjOw0KPiArCWtvYmplY3RfcHV0KCZtb2QtPm1rb2JqLmtvYmopOw0KPiArCXdhaXRfZm9y X2NvbXBsZXRpb24oJmMpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG1vZF9zeXNmc19pbml0 KHN0cnVjdCBtb2R1bGUgKm1vZCkNCj4gK3sNCj4gKwlpbnQgZXJyOw0KPiArCXN0cnVjdCBrb2Jq ZWN0ICprb2JqOw0KPiArDQo+ICsJaWYgKCFtb2R1bGVfc3lzZnNfaW5pdGlhbGl6ZWQpIHsNCj4g KwkJcHJfZXJyKCIlczogbW9kdWxlIHN5c2ZzIG5vdCBpbml0aWFsaXplZFxuIiwgbW9kLT5uYW1l KTsNCj4gKwkJZXJyID0gLUVJTlZBTDsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJ a29iaiA9IGtzZXRfZmluZF9vYmoobW9kdWxlX2tzZXQsIG1vZC0+bmFtZSk7DQo+ICsJaWYgKGtv YmopIHsNCj4gKwkJcHJfZXJyKCIlczogbW9kdWxlIGlzIGFscmVhZHkgbG9hZGVkXG4iLCBtb2Qt Pm5hbWUpOw0KPiArCQlrb2JqZWN0X3B1dChrb2JqKTsNCj4gKwkJZXJyID0gLUVJTlZBTDsNCj4g KwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJbW9kLT5ta29iai5tb2QgPSBtb2Q7DQo+ICsN Cj4gKwltZW1zZXQoJm1vZC0+bWtvYmoua29iaiwgMCwgc2l6ZW9mKG1vZC0+bWtvYmoua29iaikp Ow0KPiArCW1vZC0+bWtvYmoua29iai5rc2V0ID0gbW9kdWxlX2tzZXQ7DQo+ICsJZXJyID0ga29i amVjdF9pbml0X2FuZF9hZGQoJm1vZC0+bWtvYmoua29iaiwgJm1vZHVsZV9rdHlwZSwgTlVMTCwN Cj4gKwkJCQkgICAiJXMiLCBtb2QtPm5hbWUpOw0KPiArCWlmIChlcnIpDQo+ICsJCW1vZF9rb2Jq ZWN0X3B1dChtb2QpOw0KPiArDQo+ICtvdXQ6DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0K PiAraW50IG1vZF9zeXNmc19zZXR1cChzdHJ1Y3QgbW9kdWxlICptb2QsDQo+ICsJCSAgICBjb25z dCBzdHJ1Y3QgbG9hZF9pbmZvICppbmZvLA0KPiArCQkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAq a3BhcmFtLA0KPiArCQkJICAgdW5zaWduZWQgaW50IG51bV9wYXJhbXMpDQo+ICt7DQo+ICsJaW50 IGVycjsNCj4gKw0KPiArCWVyciA9IG1vZF9zeXNmc19pbml0KG1vZCk7DQo+ICsJaWYgKGVycikN Cj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwltb2QtPmhvbGRlcnNfZGlyID0ga29iamVjdF9jcmVh dGVfYW5kX2FkZCgiaG9sZGVycyIsICZtb2QtPm1rb2JqLmtvYmopOw0KPiArCWlmICghbW9kLT5o b2xkZXJzX2Rpcikgew0KPiArCQllcnIgPSAtRU5PTUVNOw0KPiArCQlnb3RvIG91dF91bnJlZzsN Cj4gKwl9DQo+ICsNCj4gKwllcnIgPSBtb2R1bGVfcGFyYW1fc3lzZnNfc2V0dXAobW9kLCBrcGFy YW0sIG51bV9wYXJhbXMpOw0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gb3V0X3VucmVnX2hvbGRl cnM7DQo+ICsNCj4gKwllcnIgPSBtb2R1bGVfYWRkX21vZGluZm9fYXR0cnMobW9kKTsNCj4gKwlp ZiAoZXJyKQ0KPiArCQlnb3RvIG91dF91bnJlZ19wYXJhbTsNCj4gKw0KPiArCWVyciA9IGFkZF91 c2FnZV9saW5rcyhtb2QpOw0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gb3V0X3VucmVnX21vZGlu Zm9fYXR0cnM7DQo+ICsNCj4gKwlhZGRfc2VjdF9hdHRycyhtb2QsIGluZm8pOw0KPiArCWFkZF9u b3Rlc19hdHRycyhtb2QsIGluZm8pOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsNCj4gK291dF91 bnJlZ19tb2RpbmZvX2F0dHJzOg0KPiArCW1vZHVsZV9yZW1vdmVfbW9kaW5mb19hdHRycyhtb2Qs IC0xKTsNCj4gK291dF91bnJlZ19wYXJhbToNCj4gKwltb2R1bGVfcGFyYW1fc3lzZnNfcmVtb3Zl KG1vZCk7DQo+ICtvdXRfdW5yZWdfaG9sZGVyczoNCj4gKwlrb2JqZWN0X3B1dChtb2QtPmhvbGRl cnNfZGlyKTsNCj4gK291dF91bnJlZzoNCj4gKwltb2Rfa29iamVjdF9wdXQobW9kKTsNCj4gK291 dDoNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtb2Rfc3lzZnNf ZmluaShzdHJ1Y3QgbW9kdWxlICptb2QpDQo+ICt7DQo+ICsJcmVtb3ZlX25vdGVzX2F0dHJzKG1v ZCk7DQo+ICsJcmVtb3ZlX3NlY3RfYXR0cnMobW9kKTsNCj4gKwltb2Rfa29iamVjdF9wdXQobW9k KTsNCj4gK30NCj4gKw0KPiArdm9pZCBtb2Rfc3lzZnNfdGVhcmRvd24oc3RydWN0IG1vZHVsZSAq bW9kKQ0KPiArew0KPiArCWRlbF91c2FnZV9saW5rcyhtb2QpOw0KPiArCW1vZHVsZV9yZW1vdmVf bW9kaW5mb19hdHRycyhtb2QsIC0xKTsNCj4gKwltb2R1bGVfcGFyYW1fc3lzZnNfcmVtb3ZlKG1v ZCk7DQo+ICsJa29iamVjdF9wdXQobW9kLT5ta29iai5kcml2ZXJzX2Rpcik7DQo+ICsJa29iamVj dF9wdXQobW9kLT5ob2xkZXJzX2Rpcik7DQo+ICsJbW9kX3N5c2ZzX2ZpbmkobW9kKTsNCj4gK30N Cj4gKw0KPiArdm9pZCBpbml0X3BhcmFtX2xvY2soc3RydWN0IG1vZHVsZSAqbW9kKQ0KPiArew0K PiArCW11dGV4X2luaXQoJm1vZC0+cGFyYW1fbG9jayk7DQo+ICt9