Received: by 2002:ac0:950c:0:0:0:0:0 with SMTP id f12csp2405247imc; Tue, 12 Mar 2019 13:10:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqy2aY1gUbHOIkvGFEs5n9R8xuLwhbUjLHYEFGEIxNiTTP3jKe30QPBRij/4eQMirxAMBxea X-Received: by 2002:a63:3fc8:: with SMTP id m191mr36997202pga.240.1552421410632; Tue, 12 Mar 2019 13:10:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552421410; cv=none; d=google.com; s=arc-20160816; b=EiSc6Dfqc1M+9ZkR1aqME1j1broldu0qZJYV9wKDWRp8xovOZg2Egasj3GJoU7N8yy tQgVFtNAEcTvJbQLRB1ZaVEmhY+p7q1rFxszeOCdMAI7Pm6H/CIXlqcy2pqUn46KnwfS 2KYzrHrw8skgjWpZDR5xUTL8jmvtWB2iJ3g7QFlKdfF2soxwbDgbKhuOx7/56ubInsKX dvcEkTXL2uCMaOr/RCbtUoSq0YEDM9m8E1NYrz7fgOVMHopQzTTPst3yWjI3bfESnLxl Y9fMaTF5hY3KXYZgzG5S44yG3Ko/z3QnD+79aQd6XZaKOkUSPniY5aklk9sdoWNdgb7/ ImOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature:dkim-signature; bh=AZckCYMsUwJ0CrYV4ICLDN3Sz32naj+jSY+1qXDqr3o=; b=UKsOTSqQZS7WyqOWQxWbhAqA8RGzOBq7IWB/JecKBTYEC25CpAdwvuqqfuCy240Rkt RXJwLegadA3VMOSmRY2ALwbVjNdGp9ANtJRIng3OPiuHlevzBpvZzP/KHCKHw3uxRt/7 2NLH+Sk1ih3zgQi9SQXVxjgTzYPBL8O/hvZ8MYdSRNCKLMQCpJg3qGLy9nZ9fBbbcb4E 0VCXeW3estIOgo4bYKMO7gFJbWIUf1+meCccfOg+XQzSm5s/RtldmMOgE10dDX8l2a/x P5UAW4dz/br8hZUBMaCKr3haY5B9wZ56OPWW9gzY/9qM2ln+zMvIz8WNaczRZ2Cr9MmT yPDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@fb.com header.s=facebook header.b="jl/6oyD+"; dkim=pass header.i=@fb.onmicrosoft.com header.s=selector1-fb-com header.b=LgrbH72l; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=fb.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d12si8070795pgq.156.2019.03.12.13.09.53; Tue, 12 Mar 2019 13:10:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@fb.com header.s=facebook header.b="jl/6oyD+"; dkim=pass header.i=@fb.onmicrosoft.com header.s=selector1-fb-com header.b=LgrbH72l; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=fb.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726923AbfCLUIw (ORCPT + 99 others); Tue, 12 Mar 2019 16:08:52 -0400 Received: from mx0a-00082601.pphosted.com ([67.231.145.42]:38978 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726534AbfCLUIv (ORCPT ); Tue, 12 Mar 2019 16:08:51 -0400 Received: from pps.filterd (m0044008.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x2CK6UJL025758; Tue, 12 Mar 2019 13:08:31 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=AZckCYMsUwJ0CrYV4ICLDN3Sz32naj+jSY+1qXDqr3o=; b=jl/6oyD+eTYw7/Mu2rY/GZ2K/Lv2XxYY9/rbA/MlLqs+iWLxji3F7GkiQ+Sz65IkM5ZP FlBsXF9sjn9ciGaUbJSDgEfzdwwR4NGJSesf3o9mucq7CLYw3C3340mOcYqT9ZVNrZOB fNxGtFjHQ5l3SC0NtHKJT04rPOHTs54vK2c= Received: from maileast.thefacebook.com ([199.201.65.23]) by mx0a-00082601.pphosted.com with ESMTP id 2r6j6ugba8-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Tue, 12 Mar 2019 13:08:31 -0700 Received: from frc-mbx06.TheFacebook.com (2620:10d:c0a1:f82::30) by frc-hub01.TheFacebook.com (2620:10d:c021:18::171) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Tue, 12 Mar 2019 13:08:29 -0700 Received: from frc-hub02.TheFacebook.com (2620:10d:c021:18::172) by frc-mbx06.TheFacebook.com (2620:10d:c0a1:f82::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Tue, 12 Mar 2019 13:08:28 -0700 Received: from NAM03-BY2-obe.outbound.protection.outlook.com (192.168.183.28) by o365-in.thefacebook.com (192.168.177.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5 via Frontend Transport; Tue, 12 Mar 2019 13:08:28 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector1-fb-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AZckCYMsUwJ0CrYV4ICLDN3Sz32naj+jSY+1qXDqr3o=; b=LgrbH72laDYow30pr73a6x0zhAlwoGqZRabnCEBcDxLBPaz2/3i60/dHVYXWksiR4SrtcWuCGeROespgEYArtAPzwKVuCJkawHPO7EmmbOhY7pw+G2y5fOWM4Awz31n/X4Mm8fLXYGn/o++gm6gVs/k3J8WFPIv4M8DLqKikEjs= Received: from MWHPR15MB1264.namprd15.prod.outlook.com (10.175.3.14) by MWHPR15MB1279.namprd15.prod.outlook.com (10.175.3.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1686.18; Tue, 12 Mar 2019 20:08:25 +0000 Received: from MWHPR15MB1264.namprd15.prod.outlook.com ([fe80::cc6:7ec2:94ef:f8cb]) by MWHPR15MB1264.namprd15.prod.outlook.com ([fe80::cc6:7ec2:94ef:f8cb%9]) with mapi id 15.20.1709.011; Tue, 12 Mar 2019 20:08:25 +0000 From: Calvin Owens To: Mimi Zohar CC: Peter Huewe , Jarkko Sakkinen , Jason Gunthorpe , "Arnd Bergmann" , Greg Kroah-Hartman , "linux-integrity@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Kernel Team Subject: Re: [PATCH] tpm: Make timeout logic simpler and more robust Thread-Topic: [PATCH] tpm: Make timeout logic simpler and more robust Thread-Index: AQHU2GXGLeYW3Qpbpky5KjnMPwFs0aYIOqYAgAAzOwA= Date: Tue, 12 Mar 2019 20:08:25 +0000 Message-ID: <20190312200820.GB5058@Haydn> References: <358e89ed2b766d51b5f57abf31ab7a925ac63379.1552348123.git.calvinowens@fb.com> <1552410298.24794.73.camel@linux.ibm.com> In-Reply-To: <1552410298.24794.73.camel@linux.ibm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BYAPR07CA0045.namprd07.prod.outlook.com (2603:10b6:a03:60::22) To MWHPR15MB1264.namprd15.prod.outlook.com (2603:10b6:320:24::14) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2620:10d:c090:200::ce7e] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6250f254-702e-4bfe-6cf6-08d6a7267b74 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(2017052603328)(7153060)(7193020);SRVR:MWHPR15MB1279; x-ms-traffictypediagnostic: MWHPR15MB1279: x-microsoft-exchange-diagnostics: 1;MWHPR15MB1279;20:hyGSEM/7BecMfNVg/57tCMKaIRcu/tb/1dtMIn4NJaJkmRC9AhpOiMi0h8Tvxs1ktU70f6BWmPlPPvcrSC5+Q5P446bAxY1xwLUv3Z06FvTnvI/0S047JHdNTYDvMI9RgLDASpU+S5esh7gVOpwBIoZrsJgx12CBDJaDwjso4g0= x-microsoft-antispam-prvs: x-forefront-prvs: 09749A275C x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(7916004)(376002)(366004)(136003)(346002)(39860400002)(396003)(189003)(199004)(76176011)(4326008)(486006)(476003)(5660300002)(6916009)(305945005)(25786009)(53936002)(2906002)(11346002)(446003)(6246003)(53946003)(8936002)(54906003)(52116002)(1076003)(30864003)(68736007)(102836004)(99286004)(6506007)(386003)(6512007)(9686003)(46003)(97736004)(71200400001)(8676002)(316002)(478600001)(33656002)(256004)(86362001)(14454004)(186003)(6436002)(14444005)(33716001)(7736002)(6116002)(6486002)(81166006)(81156014)(105586002)(229853002)(71190400001)(106356001)(569006);DIR:OUT;SFP:1102;SCL:1;SRVR:MWHPR15MB1279;H:MWHPR15MB1264.namprd15.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: fb.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ouVgiDZsQR2fTdNq9vnX+BKL00d6krAKruO8Bbk7n8rDsLGXnNUZu4kEW5rCVdz2qrV2+bmu0iP2p+4wxrJbU/SuFRMmY+aeR5OdqNGjE1mr9ntD57STfNH29i2THZ3fWDz0ELjDGeoYjeFfJ2hkOAbWNr1ay8v1+Vppl5pHk8nWvz6RQh/E6vryIvCC58Q9Mynwy4yN9vbR2XtTqDvMXF1DT2Y9CyEOIxLCrJ2gUU7bGh+QpJQl1Hvpebrj63yH1hy7FhWdbKNNTyA2RqSRJw20Jw3gtq5jhuY+uYQkpMjrpkHfSFBGSIFipQiOmv7/G7DBDC+9wiTvsRaSftKzIachcNanwbkoSwKbrPzldCf3YihZ1JFwiTIHBLSGn30Y5L32WjZqb3tDVodtGNxhmHfoT6p7R9FwWMcj0jKyIeU= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 6250f254-702e-4bfe-6cf6-08d6a7267b74 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Mar 2019 20:08:25.1845 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR15MB1279 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-03-12_11:,, signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVHVlc2RheSAwMy8xMiBhdCAxMzowNCAtMDQwMCwgTWltaSBab2hhciB3cm90ZToNCj4gT24g TW9uLCAyMDE5LTAzLTExIGF0IDE2OjU0IC0wNzAwLCBDYWx2aW4gT3dlbnMgd3JvdGU6DQo+ID4g V2UncmUgaGF2aW5nIGxvdHMgb2YgcHJvYmxlbXMgd2l0aCBUUE0gY29tbWFuZHMgdGltaW5nIG91 dCwgYW5kIHdlJ3JlDQo+ID4gc2VlaW5nIHRoZXNlIHByb2JsZW1zIGFjcm9zcyBsb3RzIG9mIGRp ZmZlcmVudCBoYXJkd2FyZSAoYm90aCB2MS92MikuDQo+ID4gDQo+ID4gSSBpbnN0cnVtZW50ZWQg dGhlIGRyaXZlciB0byBjb2xsZWN0IGxhdGVuY3kgZGF0YSwgYnV0IEkgd2Fzbid0IGFibGUgdG8N Cj4gPiBmaW5kIGFueSBzcGVjaWZpYyB0aW1lb3V0IHRvIGZpeDogaXQgc2VlbXMgbGlrZSBtYW55 IG9mIHRoZW0gYXJlIHRvbw0KPiA+IGFnZ3Jlc3NpdmUuIFNvIEkgdHJpZWQgcmVwbGFjaW5nIGFs bCB0aGUgdGltZW91dCBsb2dpYyB3aXRoIGEgc2luZ2xlDQo+ID4gdW5pdmVyc2FsIGxvbmcgdGlt ZW91dCwgYW5kIGZvdW5kIHRoYXQgbWFrZXMgb3VyIFRQTXMgMTAwJSByZWxpYWJsZS4NCj4gPiAN Cj4gPiBHaXZlbiB0aGF0IHRoaXMgdGltZW91dCBsb2dpYyBpcyB2ZXJ5IGNvbXBsZXgsIHByb2Js ZW1hdGljLCBhbmQgYXBwZWFycw0KPiA+IHRvIHNlcnZlIG5vIHJlYWwgcHVycG9zZSwgSSBwcm9w b3NlIHNpbXBseSBkZWxldGluZyBhbGwgb2YgaXQuDQo+IA0KPiBOb3JtYWxseSBiZWZvcmUgc2Vu ZGluZyBzdWNoIGEgbWFzc2l2ZSBjaGFuZ2UgbGlrZSB0aGlzLCBpbmNsdWRlZCBpbg0KPiB0aGUg YnVnIHJlcG9ydCBvciBwYXRjaCBkZXNjcmlwdGlvbiwgdGhlcmUgd291bGQgYmUgc29tZSBpbmRp Y2F0aW9uIGFzDQo+IHRvIHdoaWNoIGtlcm5lbCBpbnRyb2R1Y2VkIGEgcmVncmVzc2lvbi4gIEhh cyB0aGlzIGFsd2F5cyBiZWVuIGENCj4gcHJvYmxlbT8gSXMgdGhpcyBzb21ldGhpbmcgbmV3PyBI b3cgbmV3Pw0KDQpIb25lc3RseSB3ZSd2ZSBhbHdheXMgaGFkIHByb2JsZW1zIHdpdGggZmxha2lu ZXNzIGZyb20gdGhlc2UgZGV2aWNlcywNCmJ1dCBpdCBzZWVtcyB0byBoYXZlIHJlZ3Jlc3NlZCBz b21ldGltZSBiZXR3ZWVuIDQuMTEgYW5kIDQuMTYuDQoNCkkgd2lzaCBhIGhhZCBhIGJldHRlciBh bnN3ZXIgZm9yIHlvdTogd2UgbmVlZCBvbiB0aGUgb3JkZXIgb2YgYSBodW5kcmVkDQptYWNoaW5l cyB0byBzZWUgdGhlIGRpZmZlcmVuY2UsIGFuZCBzZXR0aW5nIHVwIHRoZXNlIDEwMCsgbWFjaGlu ZSB0ZXN0cw0KaXMgdW5mb3J0dW5hdGVseSBpbnZvbHZlZCBlbm91Z2ggdGhhdCBlLmcuIGJpc2Vj dGluZyBpdCBqdXN0IGlzbid0DQpmZWFzaWJsZSA6Lw0KDQpXaGF0IEkgY2FuIHNheSBmb3Igc3Vy ZSBpcyB0aGF0IHRoaXMgcGF0Y2ggbWFrZXMgZXZlcnl0aGluZyBtdWNoIGJldHRlcg0KZm9yIHVz LiBJZiB0aGVyZSdzIGFueXRoaW5nIGluIHBhcnRpY3VsYXIgeW91J2QgbGlrZSBtZSB0byB0ZXN0 LCBJIGhhdmUNCmFuIGFybXkgb2YgbWFjaGluZXMgSSdtIGhhcHB5IHRvIHB1dCB0byB1c2UsIGxl dCBtZSBrbm93IDopDQoNClRoYW5rcywNCkNhbHZpbg0KIA0KPiBNaW1pDQo+IA0KPiA+IA0KPiA+ IFNpZ25lZC1vZmYtYnk6IENhbHZpbiBPd2VucyA8Y2Fsdmlub3dlbnNAZmIuY29tPg0KPiA+IC0t LQ0KPiA+ICBkcml2ZXJzL2NoYXIvdHBtL3N0MzN6cDI0L3N0MzN6cDI0LmMgfCAgMjggKy0NCj4g PiAgZHJpdmVycy9jaGFyL3RwbS90cG0taW50ZXJmYWNlLmMgICAgIHwgIDQxICstLQ0KPiA+ICBk cml2ZXJzL2NoYXIvdHBtL3RwbS1zeXNmcy5jICAgICAgICAgfCAgMzQgLS0tDQo+ID4gIGRyaXZl cnMvY2hhci90cG0vdHBtLmggICAgICAgICAgICAgICB8ICA2MCArLS0tDQo+ID4gIGRyaXZlcnMv Y2hhci90cG0vdHBtMS1jbWQuYyAgICAgICAgICB8IDQyMyArKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCj4gPiAgZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jICAgICAgICAgIHwgMTIwIC0t LS0tLS0tDQo+ID4gIGRyaXZlcnMvY2hhci90cG0vdHBtX2NyYi5jICAgICAgICAgICB8ICAyMCAr LQ0KPiA+ICBkcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYyAgICAgfCAgIDYgLQ0KPiA+ ICBkcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5maW5lb24uYyAgfCAgMzMgKy0tDQo+ID4gIGRy aXZlcnMvY2hhci90cG0vdHBtX2kyY19udXZvdG9uLmMgICB8ICA0MiArLS0NCj4gPiAgZHJpdmVy cy9jaGFyL3RwbS90cG1fbnNjLmMgICAgICAgICAgIHwgICA2ICstDQo+ID4gIGRyaXZlcnMvY2hh ci90cG0vdHBtX3Rpc19jb3JlLmMgICAgICB8ICA5NiArLS0tLS0NCj4gPiAgZHJpdmVycy9jaGFy L3RwbS94ZW4tdHBtZnJvbnQuYyAgICAgIHwgIDE3ICstDQo+ID4gIDEzIGZpbGVzIGNoYW5nZWQs IDEwOCBpbnNlcnRpb25zKCspLCA4MTggZGVsZXRpb25zKC0pDQo+ID4gDQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvY2hhci90cG0vc3QzM3pwMjQvc3QzM3pwMjQuYyBiL2RyaXZlcnMvY2hhci90 cG0vc3QzM3pwMjQvc3QzM3pwMjQuYw0KPiA+IGluZGV4IDY0ZGM1NjA4NTlmMi4uNDMzYjlhNzJm MGVmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvY2hhci90cG0vc3QzM3pwMjQvc3QzM3pwMjQu Yw0KPiA+ICsrKyBiL2RyaXZlcnMvY2hhci90cG0vc3QzM3pwMjQvc3QzM3pwMjQuYw0KPiA+IEBA IC0xNTQsMTMgKzE1NCwxMyBAQCBzdGF0aWMgaW50IHJlcXVlc3RfbG9jYWxpdHkoc3RydWN0IHRw bV9jaGlwICpjaGlwKQ0KPiA+ICAJaWYgKHJldCA8IDApDQo+ID4gIAkJcmV0dXJuIHJldDsNCj4g PiANCj4gPiAtCXN0b3AgPSBqaWZmaWVzICsgY2hpcC0+dGltZW91dF9hOw0KPiA+ICsJc3RvcCA9 IGppZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUzsNCj4gPiANCj4gPiAgCS8q IFJlcXVlc3QgbG9jYWxpdHkgaXMgdXN1YWxseSBlZmZlY3RpdmUgYWZ0ZXIgdGhlIHJlcXVlc3Qg Ki8NCj4gPiAgCWRvIHsNCj4gPiAgCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCkpDQo+ID4gIAkJ CXJldHVybiB0cG1fZGV2LT5sb2NhbGl0eTsNCj4gPiAtCQltc2xlZXAoVFBNX1RJTUVPVVQpOw0K PiA+ICsJCW1zbGVlcChUUE1fVElNRU9VVF9QT0xMX01TKTsNCj4gPiAgCX0gd2hpbGUgKHRpbWVf YmVmb3JlKGppZmZpZXMsIHN0b3ApKTsNCj4gPiANCj4gPiAgCS8qIGNvdWxkIG5vdCBnZXQgbG9j YWxpdHkgKi8NCj4gPiBAQCAtMTkzLDcgKzE5Myw3IEBAIHN0YXRpYyBpbnQgZ2V0X2J1cnN0Y291 bnQoc3RydWN0IHRwbV9jaGlwICpjaGlwKQ0KPiA+ICAJaW50IGJ1cnN0Y250LCBzdGF0dXM7DQo+ ID4gIAl1OCB0ZW1wOw0KPiA+IA0KPiA+IC0Jc3RvcCA9IGppZmZpZXMgKyBjaGlwLT50aW1lb3V0 X2Q7DQo+ID4gKwlzdG9wID0gamlmZmllcyArIFRQTV9VTklWRVJTQUxfVElNRU9VVF9KSUZGSUVT Ow0KPiA+ICAJZG8gew0KPiA+ICAJCXN0YXR1cyA9IHRwbV9kZXYtPm9wcy0+cmVjdih0cG1fZGV2 LT5waHlfaWQsIFRQTV9TVFMgKyAxLA0KPiA+ICAJCQkJCSAgICAmdGVtcCwgMSk7DQo+ID4gQEAg LTIwOSw3ICsyMDksNyBAQCBzdGF0aWMgaW50IGdldF9idXJzdGNvdW50KHN0cnVjdCB0cG1fY2hp cCAqY2hpcCkNCj4gPiAgCQlidXJzdGNudCB8PSB0ZW1wIDw8IDg7DQo+ID4gIAkJaWYgKGJ1cnN0 Y250KQ0KPiA+ICAJCQlyZXR1cm4gYnVyc3RjbnQ7DQo+ID4gLQkJbXNsZWVwKFRQTV9USU1FT1VU KTsNCj4gPiArCQltc2xlZXAoVFBNX1RJTUVPVVRfUE9MTF9NUyk7DQo+ID4gIAl9IHdoaWxlICh0 aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7DQo+ID4gIAlyZXR1cm4gLUVCVVNZOw0KPiA+ICB9 IC8qIGdldF9idXJzdGNvdW50KCkgKi8NCj4gPiBAQCAtMjQ4LDExICsyNDgsMTEgQEAgc3RhdGlj IGJvb2wgd2FpdF9mb3JfdHBtX3N0YXRfY29uZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1h c2ssDQo+ID4gICAqIEBwYXJhbTogY2hlY2tfY2FuY2VsLCBkb2VzIHRoZSBjb21tYW5kIGNhbiBi ZSBjYW5jZWxsZWQgPw0KPiA+ICAgKiBAcmV0dXJuOiB0aGUgdHBtIHN0YXR1cywgMCBpZiBzdWNj ZXNzLCAtRVRJTUUgaWYgdGltZW91dCBpcyByZWFjaGVkLg0KPiA+ICAgKi8NCj4gPiAtc3RhdGlj IGludCB3YWl0X2Zvcl9zdGF0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggbWFzaywgdW5zaWdu ZWQgbG9uZyB0aW1lb3V0LA0KPiA+ICtzdGF0aWMgaW50IHdhaXRfZm9yX3N0YXQoc3RydWN0IHRw bV9jaGlwICpjaGlwLCB1OCBtYXNrLA0KPiA+ICAJCQl3YWl0X3F1ZXVlX2hlYWRfdCAqcXVldWUs IGJvb2wgY2hlY2tfY2FuY2VsKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3Qgc3QzM3pwMjRfZGV2ICp0 cG1fZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZjaGlwLT5kZXYpOw0KPiA+IC0JdW5zaWduZWQgbG9u ZyBzdG9wOw0KPiA+ICsJdW5zaWduZWQgbG9uZyBzdG9wLCB0aW1lb3V0Ow0KPiA+ICAJaW50IHJl dCA9IDA7DQo+ID4gIAlib29sIGNhbmNlbGVkID0gZmFsc2U7DQo+ID4gIAlib29sIGNvbmRpdGlv bjsNCj4gPiBAQCAtMjY0LDcgKzI2NCw3IEBAIHN0YXRpYyBpbnQgd2FpdF9mb3Jfc3RhdChzdHJ1 Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssIHVuc2lnbmVkIGxvbmcgdGltZW91dCwNCj4gPiAg CWlmICgoc3RhdHVzICYgbWFzaykgPT0gbWFzaykNCj4gPiAgCQlyZXR1cm4gMDsNCj4gPiANCj4g PiAtCXN0b3AgPSBqaWZmaWVzICsgdGltZW91dDsNCj4gPiArCXN0b3AgPSBqaWZmaWVzICsgVFBN X1VOSVZFUlNBTF9USU1FT1VUX0pJRkZJRVM7DQo+ID4gDQo+ID4gIAlpZiAoY2hpcC0+ZmxhZ3Mg JiBUUE1fQ0hJUF9GTEFHX0lSUSkgew0KPiA+ICAJCWN1cl9pbnRycyA9IHRwbV9kZXYtPmludHJz Ow0KPiA+IEBAIC0yOTYsNyArMjk2LDcgQEAgc3RhdGljIGludCB3YWl0X2Zvcl9zdGF0KHN0cnVj dCB0cG1fY2hpcCAqY2hpcCwgdTggbWFzaywgdW5zaWduZWQgbG9uZyB0aW1lb3V0LA0KPiA+IA0K PiA+ICAJfSBlbHNlIHsNCj4gPiAgCQlkbyB7DQo+ID4gLQkJCW1zbGVlcChUUE1fVElNRU9VVCk7 DQo+ID4gKwkJCW1zbGVlcChUUE1fVElNRU9VVF9QT0xMX01TKTsNCj4gPiAgCQkJc3RhdHVzID0g Y2hpcC0+b3BzLT5zdGF0dXMoY2hpcCk7DQo+ID4gIAkJCWlmICgoc3RhdHVzICYgbWFzaykgPT0g bWFzaykNCj4gPiAgCQkJCXJldHVybiAwOw0KPiA+IEBAIC0zMjEsNyArMzIxLDYgQEAgc3RhdGlj IGludCByZWN2X2RhdGEoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgY291 bnQpDQo+ID4gIAl3aGlsZSAoc2l6ZSA8IGNvdW50ICYmDQo+ID4gIAkgICAgICAgd2FpdF9mb3Jf c3RhdChjaGlwLA0KPiA+ICAJCQkgICAgIFRQTV9TVFNfREFUQV9BVkFJTCB8IFRQTV9TVFNfVkFM SUQsDQo+ID4gLQkJCSAgICAgY2hpcC0+dGltZW91dF9jLA0KPiA+ICAJCQkgICAgICZ0cG1fZGV2 LT5yZWFkX3F1ZXVlLCB0cnVlKSA9PSAwKSB7DQo+ID4gIAkJYnVyc3RjbnQgPSBnZXRfYnVyc3Rj b3VudChjaGlwKTsNCj4gPiAgCQlpZiAoYnVyc3RjbnQgPCAwKQ0KPiA+IEBAIC0zODQsNyArMzgz LDcgQEAgc3RhdGljIGludCBzdDMzenAyNF9zZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdW5z aWduZWQgY2hhciAqYnVmLA0KPiA+ICAJaWYgKChzdGF0dXMgJiBUUE1fU1RTX0NPTU1BTkRfUkVB RFkpID09IDApIHsNCj4gPiAgCQlzdDMzenAyNF9jYW5jZWwoY2hpcCk7DQo+ID4gIAkJaWYgKHdh aXRfZm9yX3N0YXQNCj4gPiAtCQkgICAgKGNoaXAsIFRQTV9TVFNfQ09NTUFORF9SRUFEWSwgY2hp cC0+dGltZW91dF9iLA0KPiA+ICsJCSAgICAoY2hpcCwgVFBNX1NUU19DT01NQU5EX1JFQURZLA0K PiA+ICAJCSAgICAgJnRwbV9kZXYtPnJlYWRfcXVldWUsIGZhbHNlKSA8IDApIHsNCj4gPiAgCQkJ cmV0ID0gLUVUSU1FOw0KPiA+ICAJCQlnb3RvIG91dF9lcnI7DQo+ID4gQEAgLTQzMCw3ICs0Mjks NiBAQCBzdGF0aWMgaW50IHN0MzN6cDI0X3NlbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1bnNp Z25lZCBjaGFyICpidWYsDQo+ID4gIAkJb3JkaW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAq KSAoYnVmICsgNikpKTsNCj4gPiANCj4gPiAgCQlyZXQgPSB3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQ TV9TVFNfREFUQV9BVkFJTCB8IFRQTV9TVFNfVkFMSUQsDQo+ID4gLQkJCQl0cG1fY2FsY19vcmRp bmFsX2R1cmF0aW9uKGNoaXAsIG9yZGluYWwpLA0KPiA+ICAJCQkJJnRwbV9kZXYtPnJlYWRfcXVl dWUsIGZhbHNlKTsNCj4gPiAgCQlpZiAocmV0IDwgMCkNCj4gPiAgCQkJZ290byBvdXRfZXJyOw0K PiA+IEBAIC01MzksMTIgKzUzNyw2IEBAIGludCBzdDMzenAyNF9wcm9iZSh2b2lkICpwaHlfaWQs IGNvbnN0IHN0cnVjdCBzdDMzenAyNF9waHlfb3BzICpvcHMsDQo+ID4gIAl0cG1fZGV2LT5waHlf aWQgPSBwaHlfaWQ7DQo+ID4gIAl0cG1fZGV2LT5vcHMgPSBvcHM7DQo+ID4gIAlkZXZfc2V0X2Ry dmRhdGEoJmNoaXAtPmRldiwgdHBtX2Rldik7DQo+ID4gLQ0KPiA+IC0JY2hpcC0+dGltZW91dF9h ID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7DQo+ID4gLQljaGlwLT50aW1l b3V0X2IgPSBtc2Vjc190b19qaWZmaWVzKFRJU19MT05HX1RJTUVPVVQpOw0KPiA+IC0JY2hpcC0+ dGltZW91dF9jID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7DQo+ID4gLQlj aGlwLT50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsNCj4g PiAtDQo+ID4gIAl0cG1fZGV2LT5sb2NhbGl0eSA9IExPQ0FMSVRZMDsNCj4gPiANCj4gPiAgCWlm IChpcnEpIHsNCj4gPiBAQCAtNjQ0LDcgKzYzNiw3IEBAIGludCBzdDMzenAyNF9wbV9yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICAJaWYgKGdwaW9faXNfdmFsaWQodHBtX2Rldi0+aW9f bHBjcGQpKSB7DQo+ID4gIAkJZ3Bpb19zZXRfdmFsdWUodHBtX2Rldi0+aW9fbHBjcGQsIDEpOw0K PiA+ICAJCXJldCA9IHdhaXRfZm9yX3N0YXQoY2hpcCwNCj4gPiAtCQkJCVRQTV9TVFNfVkFMSUQs IGNoaXAtPnRpbWVvdXRfYiwNCj4gPiArCQkJCVRQTV9TVFNfVkFMSUQsDQo+ID4gIAkJCQkmdHBt X2Rldi0+cmVhZF9xdWV1ZSwgZmFsc2UpOw0KPiA+ICAJfSBlbHNlIHsNCj4gPiAgCQlyZXQgPSB0 cG1fcG1fcmVzdW1lKGRldik7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBt LWludGVyZmFjZS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0taW50ZXJmYWNlLmMNCj4gPiBpbmRl eCBkOTQzOWY5YWJlNzguLjdjZWVmZTAyY2EzMiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2No YXIvdHBtL3RwbS1pbnRlcmZhY2UuYw0KPiA+ICsrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLWlu dGVyZmFjZS5jDQo+ID4gQEAgLTQzLDI1ICs0Myw2IEBAIG1vZHVsZV9wYXJhbV9uYW1lZChzdXNw ZW5kX3BjciwgdHBtX3N1c3BlbmRfcGNyLCB1aW50LCAwNjQ0KTsNCj4gPiAgTU9EVUxFX1BBUk1f REVTQyhzdXNwZW5kX3BjciwNCj4gPiAgCQkgIlBDUiB0byB1c2UgZm9yIGR1bW15IHdyaXRlcyB0 byBmYWNpbGl0YXRlIGZsdXNoIG9uIHN1c3BlbmQuIik7DQo+ID4gDQo+ID4gLS8qKg0KPiA+IC0g KiB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKCkgLSBjYWxjdWxhdGUgdGhlIG1heGltdW0gY29t bWFuZCBkdXJhdGlvbg0KPiA+IC0gKiBAY2hpcDogICAgVFBNIGNoaXAgdG8gdXNlLg0KPiA+IC0g KiBAb3JkaW5hbDogVFBNIGNvbW1hbmQgb3JkaW5hbC4NCj4gPiAtICoNCj4gPiAtICogVGhlIGZ1 bmN0aW9uIHJldHVybnMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdGhlIGNoaXAgY291bGQg dGFrZQ0KPiA+IC0gKiB0byByZXR1cm4gdGhlIHJlc3VsdCBmb3IgYSBwYXJ0aWN1bGFyIG9yZGlu YWwgaW4gamlmZmllcy4NCj4gPiAtICoNCj4gPiAtICogUmV0dXJuOiBBIG1heGltYWwgZHVyYXRp b24gdGltZSBmb3IgYW4gb3JkaW5hbCBpbiBqaWZmaWVzLg0KPiA+IC0gKi8NCj4gPiAtdW5zaWdu ZWQgbG9uZyB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwg dTMyIG9yZGluYWwpDQo+ID4gLXsNCj4gPiAtCWlmIChjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZM QUdfVFBNMikNCj4gPiAtCQlyZXR1cm4gdHBtMl9jYWxjX29yZGluYWxfZHVyYXRpb24oY2hpcCwg b3JkaW5hbCk7DQo+ID4gLQllbHNlDQo+ID4gLQkJcmV0dXJuIHRwbTFfY2FsY19vcmRpbmFsX2R1 cmF0aW9uKGNoaXAsIG9yZGluYWwpOw0KPiA+IC19DQo+ID4gLUVYUE9SVF9TWU1CT0xfR1BMKHRw bV9jYWxjX29yZGluYWxfZHVyYXRpb24pOw0KPiA+IC0NCj4gPiAgc3RhdGljIGludCB0cG1fdmFs aWRhdGVfY29tbWFuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsDQo+ID4gIAkJCQkgc3RydWN0IHRw bV9zcGFjZSAqc3BhY2UsDQo+ID4gIAkJCQkgY29uc3QgdTggKmNtZCwNCj4gPiBAQCAtMjM3LDcg KzIxOCw3IEBAIHN0YXRpYyBzc2l6ZV90IHRwbV90cnlfdHJhbnNtaXQoc3RydWN0IHRwbV9jaGlw ICpjaGlwLA0KPiA+ICAJaWYgKGNoaXAtPmZsYWdzICYgVFBNX0NISVBfRkxBR19JUlEpDQo+ID4g IAkJZ290byBvdXRfcmVjdjsNCj4gPiANCj4gPiAtCXN0b3AgPSBqaWZmaWVzICsgdHBtX2NhbGNf b3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsNCj4gPiArCXN0b3AgPSBqaWZmaWVzICsg VFBNX1VOSVZFUlNBTF9USU1FT1VUX0pJRkZJRVM7DQo+ID4gIAlkbyB7DQo+ID4gIAkJdTggc3Rh dHVzID0gY2hpcC0+b3BzLT5zdGF0dXMoY2hpcCk7DQo+ID4gIAkJaWYgKChzdGF0dXMgJiBjaGlw LT5vcHMtPnJlcV9jb21wbGV0ZV9tYXNrKSA9PQ0KPiA+IEBAIC0yNTAsNyArMjMxLDcgQEAgc3Rh dGljIHNzaXplX3QgdHBtX3RyeV90cmFuc21pdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsDQo+ID4g IAkJCWdvdG8gb3V0Ow0KPiA+ICAJCX0NCj4gPiANCj4gPiAtCQl0cG1fbXNsZWVwKFRQTV9USU1F T1VUX1BPTEwpOw0KPiA+ICsJCXRwbV9tc2xlZXAoVFBNX1RJTUVPVVRfUE9MTF9NUyk7DQo+ID4g IAkJcm1iKCk7DQo+ID4gIAl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7DQo+ ID4gDQo+ID4gQEAgLTMwNyw3ICsyODgsNyBAQCBzdGF0aWMgc3NpemVfdCB0cG1fdHJ5X3RyYW5z bWl0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwNCj4gPiAgICoNCj4gPiAgICogQSB3cmFwcGVyIGFy b3VuZCB0cG1fdHJ5X3RyYW5zbWl0IHRoYXQgaGFuZGxlcyBUUE0yX1JDX1JFVFJZDQo+ID4gICAq IHJldHVybnMgZnJvbSB0aGUgVFBNIGFuZCByZXRyYW5zbWl0cyB0aGUgY29tbWFuZCBhZnRlciBh IGRlbGF5IHVwDQo+ID4gLSAqIHRvIGEgbWF4aW11bSB3YWl0IG9mIFRQTTJfRFVSQVRJT05fTE9O Ry4NCj4gPiArICogdG8gYSBtYXhpbXVtIHdhaXQgb2YgVFBNX1VOSVZFUlNBTF9USU1FT1VUX01T Lg0KPiA+ICAgKg0KPiA+ICAgKiBOb3RlOiBUUE0xIG5ldmVyIHJldHVybnMgVFBNMl9SQ19SRVRS WSBzbyB0aGUgcmV0cnkgbG9naWMgaXMgVFBNMg0KPiA+ICAgKiBvbmx5DQo+ID4gQEAgLTMyMiw3 ICszMDMsNyBAQCBzc2l6ZV90IHRwbV90cmFuc21pdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHN0 cnVjdCB0cG1fc3BhY2UgKnNwYWNlLA0KPiA+ICAJc3RydWN0IHRwbV9vdXRwdXRfaGVhZGVyICpo ZWFkZXIgPSAoc3RydWN0IHRwbV9vdXRwdXRfaGVhZGVyICopYnVmOw0KPiA+ICAJLyogc3BhY2Ug Zm9yIGhlYWRlciBhbmQgaGFuZGxlcyAqLw0KPiA+ICAJdTggc2F2ZVtUUE1fSEVBREVSX1NJWkUg KyAzKnNpemVvZih1MzIpXTsNCj4gPiAtCXVuc2lnbmVkIGludCBkZWxheV9tc2VjID0gVFBNMl9E VVJBVElPTl9TSE9SVDsNCj4gPiArCXVuc2lnbmVkIGludCBkZWxheV9tc2VjID0gMjA7DQo+ID4g IAl1MzIgcmMgPSAwOw0KPiA+ICAJc3NpemVfdCByZXQ7DQo+ID4gIAljb25zdCBzaXplX3Qgc2F2 ZV9zaXplID0gbWluKHNwYWNlID8gc2l6ZW9mKHNhdmUpIDogVFBNX0hFQURFUl9TSVpFLA0KPiA+ IEBAIC0zNTEsNyArMzMyLDcgQEAgc3NpemVfdCB0cG1fdHJhbnNtaXQoc3RydWN0IHRwbV9jaGlw ICpjaGlwLCBzdHJ1Y3QgdHBtX3NwYWNlICpzcGFjZSwNCj4gPiAgCQlpZiAocmMgPT0gVFBNMl9S Q19URVNUSU5HICYmIGNjID09IFRQTTJfQ0NfU0VMRl9URVNUKQ0KPiA+ICAJCQlicmVhazsNCj4g PiANCj4gPiAtCQlpZiAoZGVsYXlfbXNlYyA+IFRQTTJfRFVSQVRJT05fTE9ORykgew0KPiA+ICsJ CWlmIChkZWxheV9tc2VjID4gVFBNX1VOSVZFUlNBTF9USU1FT1VUX01TKSB7DQo+ID4gIAkJCWlm IChyYyA9PSBUUE0yX1JDX1JFVFJZKQ0KPiA+ICAJCQkJZGV2X2VycigmY2hpcC0+ZGV2LCAiaW4g cmV0cnkgbG9vcFxuIik7DQo+ID4gIAkJCWVsc2UNCj4gPiBAQCAtNDEwLDE4ICszOTEsNiBAQCBz c2l6ZV90IHRwbV90cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBzdHJ1Y3QgdHBt X3NwYWNlICpzcGFjZSwNCj4gPiAgfQ0KPiA+ICBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fdHJhbnNt aXRfY21kKTsNCj4gPiANCj4gPiAtaW50IHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlw ICpjaGlwKQ0KPiA+IC17DQo+ID4gLQlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX0hB VkVfVElNRU9VVFMpDQo+ID4gLQkJcmV0dXJuIDA7DQo+ID4gLQ0KPiA+IC0JaWYgKGNoaXAtPmZs YWdzICYgVFBNX0NISVBfRkxBR19UUE0yKQ0KPiA+IC0JCXJldHVybiB0cG0yX2dldF90aW1lb3V0 cyhjaGlwKTsNCj4gPiAtCWVsc2UNCj4gPiAtCQlyZXR1cm4gdHBtMV9nZXRfdGltZW91dHMoY2hp cCk7DQo+ID4gLX0NCj4gPiAtRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dldF90aW1lb3V0cyk7DQo+ ID4gLQ0KPiA+ICAvKioNCj4gPiAgICogdHBtX2lzX3RwbTIgLSBkbyB3ZSBhIGhhdmUgYSBUUE0y IGNoaXA/DQo+ID4gICAqIEBjaGlwOglhICZzdHJ1Y3QgdHBtX2NoaXAgaW5zdGFuY2UsICVOVUxM IGZvciB0aGUgZGVmYXVsdCBjaGlwDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0v dHBtLXN5c2ZzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS1zeXNmcy5jDQo+ID4gaW5kZXggYjg4 ZTA4ZWMyYzU5Li5mMTgxM2FmZThkOWIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9jaGFyL3Rw bS90cG0tc3lzZnMuYw0KPiA+ICsrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLXN5c2ZzLmMNCj4g PiBAQCAtMjUyLDM4ICsyNTIsNiBAQCBzdGF0aWMgc3NpemVfdCBjYW5jZWxfc3RvcmUoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiAgfQ0KPiA+ ICBzdGF0aWMgREVWSUNFX0FUVFJfV08oY2FuY2VsKTsNCj4gPiANCj4gPiAtc3RhdGljIHNzaXpl X3QgZHVyYXRpb25zX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqYXR0ciwNCj4gPiAtCQkJICAgICAgY2hhciAqYnVmKQ0KPiA+IC17DQo+ID4gLQlzdHJ1 Y3QgdHBtX2NoaXAgKmNoaXAgPSB0b190cG1fY2hpcChkZXYpOw0KPiA+IC0NCj4gPiAtCWlmIChj aGlwLT5kdXJhdGlvbltUUE1fTE9OR10gPT0gMCkNCj4gPiAtCQlyZXR1cm4gMDsNCj4gPiAtDQo+ ID4gLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZCAlZCAlZCBbJXNdXG4iLA0KPiA+IC0JCSAgICAg ICBqaWZmaWVzX3RvX3VzZWNzKGNoaXAtPmR1cmF0aW9uW1RQTV9TSE9SVF0pLA0KPiA+IC0JCSAg ICAgICBqaWZmaWVzX3RvX3VzZWNzKGNoaXAtPmR1cmF0aW9uW1RQTV9NRURJVU1dKSwNCj4gPiAt CQkgICAgICAgamlmZmllc190b191c2VjcyhjaGlwLT5kdXJhdGlvbltUUE1fTE9OR10pLA0KPiA+ IC0JCSAgICAgICBjaGlwLT5kdXJhdGlvbl9hZGp1c3RlZA0KPiA+IC0JCSAgICAgICA/ICJhZGp1 c3RlZCIgOiAib3JpZ2luYWwiKTsNCj4gPiAtfQ0KPiA+IC1zdGF0aWMgREVWSUNFX0FUVFJfUk8o ZHVyYXRpb25zKTsNCj4gPiAtDQo+ID4gLXN0YXRpYyBzc2l6ZV90IHRpbWVvdXRzX3Nob3coc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiAtCQkJ ICAgICBjaGFyICpidWYpDQo+ID4gLXsNCj4gPiAtCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IHRv X3RwbV9jaGlwKGRldik7DQo+ID4gLQ0KPiA+IC0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQgJWQg JWQgJWQgWyVzXVxuIiwNCj4gPiAtCQkgICAgICAgamlmZmllc190b191c2VjcyhjaGlwLT50aW1l b3V0X2EpLA0KPiA+IC0JCSAgICAgICBqaWZmaWVzX3RvX3VzZWNzKGNoaXAtPnRpbWVvdXRfYiks DQo+ID4gLQkJICAgICAgIGppZmZpZXNfdG9fdXNlY3MoY2hpcC0+dGltZW91dF9jKSwNCj4gPiAt CQkgICAgICAgamlmZmllc190b191c2VjcyhjaGlwLT50aW1lb3V0X2QpLA0KPiA+IC0JCSAgICAg ICBjaGlwLT50aW1lb3V0X2FkanVzdGVkDQo+ID4gLQkJICAgICAgID8gImFkanVzdGVkIiA6ICJv cmlnaW5hbCIpOw0KPiA+IC19DQo+ID4gLXN0YXRpYyBERVZJQ0VfQVRUUl9STyh0aW1lb3V0cyk7 DQo+ID4gLQ0KPiA+ICBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHBtX2Rldl9hdHRyc1tdID0g ew0KPiA+ICAJJmRldl9hdHRyX3B1YmVrLmF0dHIsDQo+ID4gIAkmZGV2X2F0dHJfcGNycy5hdHRy LA0KPiA+IEBAIC0yOTMsOCArMjYxLDYgQEAgc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRwbV9k ZXZfYXR0cnNbXSA9IHsNCj4gPiAgCSZkZXZfYXR0cl90ZW1wX2RlYWN0aXZhdGVkLmF0dHIsDQo+ ID4gIAkmZGV2X2F0dHJfY2Fwcy5hdHRyLA0KPiA+ICAJJmRldl9hdHRyX2NhbmNlbC5hdHRyLA0K PiA+IC0JJmRldl9hdHRyX2R1cmF0aW9ucy5hdHRyLA0KPiA+IC0JJmRldl9hdHRyX3RpbWVvdXRz LmF0dHIsDQo+ID4gIAlOVUxMLA0KPiA+ICB9Ow0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2NoYXIvdHBtL3RwbS5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaA0KPiA+IGluZGV4IGYy N2QxZjM4YTkzZC4uZDVjMWM3ZTUyMDg2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvY2hhci90 cG0vdHBtLmgNCj4gPiArKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oDQo+ID4gQEAgLTUwLDE0 ICs1MCwxNyBAQCBlbnVtIHRwbV9jb25zdCB7DQo+ID4gIAlUUE1fTlVNX0VWRU5UX0xPR19GSUxF UyA9IDMsDQo+ID4gIH07DQo+ID4gDQo+ID4gLWVudW0gdHBtX3RpbWVvdXQgew0KPiA+IC0JVFBN X1RJTUVPVVQgPSA1LAkvKiBtc2VjcyAqLw0KPiA+IC0JVFBNX1RJTUVPVVRfUkVUUlkgPSAxMDAs IC8qIG1zZWNzICovDQo+ID4gLQlUUE1fVElNRU9VVF9SQU5HRV9VUyA9IDMwMCwJLyogdXNlY3Mg Ki8NCj4gPiAtCVRQTV9USU1FT1VUX1BPTEwgPSAxLAkvKiBtc2VjcyAqLw0KPiA+IC0JVFBNX1RJ TUVPVVRfVVNFQ1NfTUlOID0gMTAwLCAgICAgIC8qIHVzZWNzICovDQo+ID4gLQlUUE1fVElNRU9V VF9VU0VDU19NQVggPSA1MDAgICAgICAvKiB1c2VjcyAqLw0KPiA+IC19Ow0KPiA+ICsvKg0KPiA+ ICsgKiBVbml2ZXJzYWwgdGltZW91dCwgbG9uZyBlbm91Z2ggZm9yIGFsbCBjb21tYW5kcy4NCj4g PiArICovDQo+ID4gKyNkZWZpbmUgVFBNX1VOSVZFUlNBTF9USU1FT1VUX01TIDUwMDANCj4gPiAr I2RlZmluZSBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUyBtc2Vjc190b19qaWZmaWVzKFRQ TV9VTklWRVJTQUxfVElNRU9VVF9NUykNCj4gPiArDQo+ID4gKyNkZWZpbmUgVFBNX1RJTUVPVVRf UE9MTF9NUyAxDQo+ID4gKyNkZWZpbmUgVFBNX1RJTUVPVVRfUE9MTF9KSUZGSUVTIG1zZWNzX3Rv X2ppZmZpZXMoVFBNX1RJTUVPVVRfUE9MTF9NUykNCj4gPiArDQo+ID4gKyNkZWZpbmUgVFBNX1RJ TUVPVVRfVVNFQ1NfTUlOIDEwMA0KPiA+ICsjZGVmaW5lIFRQTV9USU1FT1VUX1VTRUNTX01BWCA1 MDANCj4gPiANCj4gPiAgLyogVFBNIGFkZHJlc3NlcyAqLw0KPiA+ICBlbnVtIHRwbV9hZGRyIHsN Cj4gPiBAQCAtNjUsMTYgKzY4LDYgQEAgZW51bSB0cG1fYWRkciB7DQo+ID4gIAlUUE1fQUREUiA9 IDB4NEUsDQo+ID4gIH07DQo+ID4gDQo+ID4gLS8qIEluZGV4ZXMgdGhlIGR1cmF0aW9uIGFycmF5 ICovDQo+ID4gLWVudW0gdHBtX2R1cmF0aW9uIHsNCj4gPiAtCVRQTV9TSE9SVCA9IDAsDQo+ID4g LQlUUE1fTUVESVVNID0gMSwNCj4gPiAtCVRQTV9MT05HID0gMiwNCj4gPiAtCVRQTV9MT05HX0xP TkcgPSAzLA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9OVU1fRFVSQVRJT05TID0g VFBNX1VOREVGSU5FRCwNCj4gPiAtfTsNCj4gPiAtDQo+ID4gICNkZWZpbmUgVFBNX1dBUk5fUkVU UlkgICAgICAgICAgMHg4MDANCj4gPiAgI2RlZmluZSBUUE1fV0FSTl9ET0lOR19TRUxGVEVTVCAw eDgwMg0KPiA+ICAjZGVmaW5lIFRQTV9FUlJfREVBQ1RJVkFURUQgICAgIDB4Ng0KPiA+IEBAIC04 OCwxOCArODEsNiBAQCBlbnVtIHRwbTJfY29uc3Qgew0KPiA+ICAJVFBNMl9QQ1JfU0VMRUNUX01J TiAgICAgPSAoKFRQTTJfUExBVEZPUk1fUENSICsgNykgLyA4KSwNCj4gPiAgfTsNCj4gPiANCj4g PiAtZW51bSB0cG0yX3RpbWVvdXRzIHsNCj4gPiAtCVRQTTJfVElNRU9VVF9BICAgICAgICAgID0g ICAgNzUwLA0KPiA+IC0JVFBNMl9USU1FT1VUX0IgICAgICAgICAgPSAgIDIwMDAsDQo+ID4gLQlU UE0yX1RJTUVPVVRfQyAgICAgICAgICA9ICAgIDIwMCwNCj4gPiAtCVRQTTJfVElNRU9VVF9EICAg ICAgICAgID0gICAgIDMwLA0KPiA+IC0JVFBNMl9EVVJBVElPTl9TSE9SVCAgICAgPSAgICAgMjAs DQo+ID4gLQlUUE0yX0RVUkFUSU9OX01FRElVTSAgICA9ICAgIDc1MCwNCj4gPiAtCVRQTTJfRFVS QVRJT05fTE9ORyAgICAgID0gICAyMDAwLA0KPiA+IC0JVFBNMl9EVVJBVElPTl9MT05HX0xPTkcg PSAzMDAwMDAsDQo+ID4gLQlUUE0yX0RVUkFUSU9OX0RFRkFVTFQgICA9IDEyMDAwMCwNCj4gPiAt fTsNCj4gPiAtDQo+ID4gIGVudW0gdHBtMl9zdHJ1Y3R1cmVzIHsNCj4gPiAgCVRQTTJfU1RfTk9f U0VTU0lPTlMJPSAweDgwMDEsDQo+ID4gIAlUUE0yX1NUX1NFU1NJT05TCT0gMHg4MDAyLA0KPiA+ IEBAIC0yNDQsMTQgKzIyNSw2IEBAIHN0cnVjdCB0cG1fY2hpcCB7DQo+ID4gDQo+ID4gIAlzdHJ1 Y3QgbXV0ZXggdHBtX211dGV4OwkvKiB0cG0gaXMgcHJvY2Vzc2luZyAqLw0KPiA+IA0KPiA+IC0J dW5zaWduZWQgbG9uZyB0aW1lb3V0X2E7IC8qIGppZmZpZXMgKi8NCj4gPiAtCXVuc2lnbmVkIGxv bmcgdGltZW91dF9iOyAvKiBqaWZmaWVzICovDQo+ID4gLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRf YzsgLyogamlmZmllcyAqLw0KPiA+IC0JdW5zaWduZWQgbG9uZyB0aW1lb3V0X2Q7IC8qIGppZmZp ZXMgKi8NCj4gPiAtCWJvb2wgdGltZW91dF9hZGp1c3RlZDsNCj4gPiAtCXVuc2lnbmVkIGxvbmcg ZHVyYXRpb25bVFBNX05VTV9EVVJBVElPTlNdOyAvKiBqaWZmaWVzICovDQo+ID4gLQlib29sIGR1 cmF0aW9uX2FkanVzdGVkOw0KPiA+IC0NCj4gPiAgCXN0cnVjdCBkZW50cnkgKmJpb3NfZGlyW1RQ TV9OVU1fRVZFTlRfTE9HX0ZJTEVTXTsNCj4gPiANCj4gPiAgCWNvbnN0IHN0cnVjdCBhdHRyaWJ1 dGVfZ3JvdXAgKmdyb3Vwc1szXTsNCj4gPiBAQCAtNTA2LDI5ICs0NzksMjQgQEAgc3NpemVfdCB0 cG1fdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgc3RydWN0IHRwbV9zcGFjZSAq c3BhY2UsDQo+ID4gIAkJCSB2b2lkICpidWYsIHNpemVfdCBidWZzaXosDQo+ID4gIAkJCSBzaXpl X3QgbWluX3JzcF9ib2R5X2xlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLA0KPiA+ICAJCQkgY29u c3QgY2hhciAqZGVzYyk7DQo+ID4gLWludCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hp cCAqKTsNCj4gPiAgaW50IHRwbV9hdXRvX3N0YXJ0dXAoc3RydWN0IHRwbV9jaGlwICpjaGlwKTsN Cj4gPiANCj4gPiAgaW50IHRwbTFfcG1fc3VzcGVuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHUz MiB0cG1fc3VzcGVuZF9wY3IpOw0KPiA+ICBpbnQgdHBtMV9hdXRvX3N0YXJ0dXAoc3RydWN0IHRw bV9jaGlwICpjaGlwKTsNCj4gPiAgaW50IHRwbTFfZG9fc2VsZnRlc3Qoc3RydWN0IHRwbV9jaGlw ICpjaGlwKTsNCj4gPiAtaW50IHRwbTFfZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqY2hp cCk7DQo+ID4gLXVuc2lnbmVkIGxvbmcgdHBtMV9jYWxjX29yZGluYWxfZHVyYXRpb24oc3RydWN0 IHRwbV9jaGlwICpjaGlwLCB1MzIgb3JkaW5hbCk7DQo+ID4gIGludCB0cG0xX3Bjcl9leHRlbmQo c3RydWN0IHRwbV9jaGlwICpjaGlwLCB1MzIgcGNyX2lkeCwgY29uc3QgdTggKmhhc2gsDQo+ID4g IAkJICAgIGNvbnN0IGNoYXIgKmxvZ19tc2cpOw0KPiA+ICBpbnQgdHBtMV9wY3JfcmVhZChzdHJ1 Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBwY3JfaWR4LCB1OCAqcmVzX2J1Zik7DQo+ID4gIHNzaXpl X3QgdHBtMV9nZXRjYXAoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1MzIgc3ViY2FwX2lkLCBjYXBf dCAqY2FwLA0KPiA+ICAJCSAgICBjb25zdCBjaGFyICpkZXNjLCBzaXplX3QgbWluX2NhcF9sZW5n dGgpOw0KPiA+ICBpbnQgdHBtMV9nZXRfcmFuZG9tKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTgg Km91dCwgc2l6ZV90IG1heCk7DQo+ID4gLXVuc2lnbmVkIGxvbmcgdHBtX2NhbGNfb3JkaW5hbF9k dXJhdGlvbihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBvcmRpbmFsKTsNCj4gPiAgaW50IHRw bV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gIGludCB0cG1fcG1fcmVzdW1l KHN0cnVjdCBkZXZpY2UgKmRldik7DQo+ID4gDQo+ID4gIHN0YXRpYyBpbmxpbmUgdm9pZCB0cG1f bXNsZWVwKHVuc2lnbmVkIGludCBkZWxheV9tc2VjKQ0KPiA+ICB7DQo+ID4gLQl1c2xlZXBfcmFu Z2UoKGRlbGF5X21zZWMgKiAxMDAwKSAtIFRQTV9USU1FT1VUX1JBTkdFX1VTLA0KPiA+IC0JCSAg ICAgZGVsYXlfbXNlYyAqIDEwMDApOw0KPiA+IC19Ow0KPiA+ICsJdXNsZWVwX3JhbmdlKChkZWxh eV9tc2VjICogMTAwMCkgLSAzMDAsIGRlbGF5X21zZWMgKiAxMDAwKTsNCj4gPiArfQ0KPiA+IA0K PiA+ICBzdHJ1Y3QgdHBtX2NoaXAgKnRwbV9maW5kX2dldF9vcHMoc3RydWN0IHRwbV9jaGlwICpj aGlwKTsNCj4gPiAgX19tdXN0X2NoZWNrIGludCB0cG1fdHJ5X2dldF9vcHMoc3RydWN0IHRwbV9j aGlwICpjaGlwKTsNCj4gPiBAQCAtNTU3LDcgKzUyNSw2IEBAIHN0YXRpYyBpbmxpbmUgdTMyIHRw bTJfcmNfdmFsdWUodTMyIHJjKQ0KPiA+ICAJcmV0dXJuIChyYyAmIEJJVCg3KSkgPyByYyAmIDB4 ZmYgOiByYzsNCj4gPiAgfQ0KPiA+IA0KPiA+IC1pbnQgdHBtMl9nZXRfdGltZW91dHMoc3RydWN0 IHRwbV9jaGlwICpjaGlwKTsNCj4gPiAgaW50IHRwbTJfcGNyX3JlYWQoc3RydWN0IHRwbV9jaGlw ICpjaGlwLCB1MzIgcGNyX2lkeCwgdTggKnJlc19idWYpOw0KPiA+ICBpbnQgdHBtMl9wY3JfZXh0 ZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTMyIHBjcl9pZHgsIHUzMiBjb3VudCwNCj4gPiAg CQkgICAgc3RydWN0IHRwbTJfZGlnZXN0ICpkaWdlc3RzKTsNCj4gPiBAQCAtNTc1LDcgKzU0Miw2 IEBAIHNzaXplX3QgdHBtMl9nZXRfdHBtX3B0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTMyIHBy b3BlcnR5X2lkLA0KPiA+IA0KPiA+ICBpbnQgdHBtMl9hdXRvX3N0YXJ0dXAoc3RydWN0IHRwbV9j aGlwICpjaGlwKTsNCj4gPiAgdm9pZCB0cG0yX3NodXRkb3duKHN0cnVjdCB0cG1fY2hpcCAqY2hp cCwgdTE2IHNodXRkb3duX3R5cGUpOw0KPiA+IC11bnNpZ25lZCBsb25nIHRwbTJfY2FsY19vcmRp bmFsX2R1cmF0aW9uKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTMyIG9yZGluYWwpOw0KPiA+ICBp bnQgdHBtMl9wcm9iZShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApOw0KPiA+ICBpbnQgdHBtMl9maW5k X2NjKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTMyIGNjKTsNCj4gPiAgaW50IHRwbTJfaW5pdF9z cGFjZShzdHJ1Y3QgdHBtX3NwYWNlICpzcGFjZSk7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Y2hhci90cG0vdHBtMS1jbWQuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtMS1jbWQuYw0KPiA+IGlu ZGV4IDZmMzA2MzM4OTUzYi4uOGM1MjU1OTA5ZjA3IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMv Y2hhci90cG0vdHBtMS1jbWQuYw0KPiA+ICsrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtMS1jbWQu Yw0KPiA+IEBAIC0yNCwyOTMgKzI0LDExIEBADQo+ID4gDQo+ID4gICNkZWZpbmUgVFBNX01BWF9P UkRJTkFMIDI0Mw0KPiA+IA0KPiA+IC0vKg0KPiA+IC0gKiBBcnJheSB3aXRoIG9uZSBlbnRyeSBw ZXIgb3JkaW5hbCBkZWZpbmluZyB0aGUgbWF4aW11bSBhbW91bnQNCj4gPiAtICogb2YgdGltZSB0 aGUgY2hpcCBjb3VsZCB0YWtlIHRvIHJldHVybiB0aGUgcmVzdWx0LiAgVGhlIG9yZGluYWwNCj4g PiAtICogZGVzaWduYXRpb24gb2Ygc2hvcnQsIG1lZGl1bSBvciBsb25nIGlzIGRlZmluZWQgaW4g YSB0YWJsZSBpbg0KPiA+IC0gKiBUQ0cgU3BlY2lmaWNhdGlvbiBUUE0gTWFpbiBQYXJ0IDIgVFBN IFN0cnVjdHVyZXMgU2VjdGlvbiAxNy4gVGhlDQo+ID4gLSAqIHZhbHVlcyBvZiB0aGUgU0hPUlQs IE1FRElVTSwgYW5kIExPTkcgZHVyYXRpb25zIGFyZSByZXRyaWV2ZWQNCj4gPiAtICogZnJvbSB0 aGUgY2hpcCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gd2l0aCBhIGNhbGwgdG8gdHBtX2dldF90aW1l b3V0cy4NCj4gPiAtICovDQo+ID4gLXN0YXRpYyBjb25zdCB1OCB0cG0xX29yZGluYWxfZHVyYXRp b25bVFBNX01BWF9PUkRJTkFMXSA9IHsNCj4gPiAtCVRQTV9VTkRFRklORUQsCQkvKiAwICovDQo+ ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRF RklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwJCS8qIDUg Ki8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBN X1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fU0hPUlQsCQkvKiAx MCAqLw0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQTV9MT05H LA0KPiA+IC0JVFBNX0xPTkcsDQo+ID4gLQlUUE1fTUVESVVNLAkJLyogMTUgKi8NCj4gPiAtCVRQ TV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9NRURJVU0sDQo+ID4gLQlUUE1f TE9ORywNCj4gPiAtCVRQTV9TSE9SVCwJCS8qIDIwICovDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4g LQlUUE1fTUVESVVNLA0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQTV9NRURJVU0sDQo+ID4g LQlUUE1fU0hPUlQsCQkvKiAyNSAqLw0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX01FRElV TSwNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9NRURJVU0s CQkvKiAzMCAqLw0KPiA+IC0JVFBNX0xPTkcsDQo+ID4gLQlUUE1fTUVESVVNLA0KPiA+IC0JVFBN X1NIT1JULA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1NIT1JULAkJLyogMzUgKi8NCj4g PiAtCVRQTV9NRURJVU0sDQo+ID4gLQlUUE1fTUVESVVNLA0KPiA+IC0JVFBNX1VOREVGSU5FRCwN Cj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fTUVESVVNLAkJLyogNDAgKi8NCj4gPiAt CVRQTV9MT05HLA0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQ TV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwJCS8qIDQ1ICovDQo+ID4gLQlUUE1fU0hPUlQsDQo+ ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fTE9ORywNCj4gPiAt CVRQTV9NRURJVU0sCQkvKiA1MCAqLw0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQTV9VTkRF RklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAt CVRQTV9VTkRFRklORUQsCQkvKiA1NSAqLw0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQ TV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwN Cj4gPiAtCVRQTV9NRURJVU0sCQkvKiA2MCAqLw0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQ TV9NRURJVU0sDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1f TUVESVVNLAkJLyogNjUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJ TkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlU UE1fU0hPUlQsCQkvKiA3MCAqLw0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1VOREVGSU5F RCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBN X1VOREVGSU5FRCwJCS8qIDc1ICovDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VO REVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+ IC0JVFBNX0xPTkcsCQkvKiA4MCAqLw0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9N RURJVU0sDQo+ID4gLQlUUE1fTE9ORywNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9VTkRF RklORUQsCQkvKiA4NSAqLw0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklO RUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQ TV9TSE9SVCwJCS8qIDkwICovDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELAkJ LyogOTUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+ IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fTUVESVVN LAkJLyogMTAwICovDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlU UE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQs CQkvKiAxMDUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0K PiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fU0hP UlQsCQkvKiAxMTAgKi8NCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAt CVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwJCS8qIDExNSAq Lw0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1VOREVGSU5F RCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fTE9ORywJCS8qIDEyMCAqLw0KPiA+ IC0JVFBNX0xPTkcsDQo+ID4gLQlUUE1fTUVESVVNLA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4g PiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQTV9TSE9SVCwJCS8qIDEyNSAqLw0KPiA+IC0JVFBNX1NI T1JULA0KPiA+IC0JVFBNX0xPTkcsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQs DQo+ID4gLQlUUE1fU0hPUlQsCQkvKiAxMzAgKi8NCj4gPiAtCVRQTV9NRURJVU0sDQo+ID4gLQlU UE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAt CVRQTV9VTkRFRklORUQsCQkvKiAxMzUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlU UE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQs DQo+ID4gLQlUUE1fU0hPUlQsCQkvKiAxNDAgKi8NCj4gPiAtCVRQTV9TSE9SVCwNCj4gPiAtCVRQ TV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwN Cj4gPiAtCVRQTV9VTkRFRklORUQsCQkvKiAxNDUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRF RklORUQsDQo+ID4gLQlUUE1fU0hPUlQsCQkvKiAxNTAgKi8NCj4gPiAtCVRQTV9NRURJVU0sDQo+ ID4gLQlUUE1fTUVESVVNLA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+ IC0JVFBNX1VOREVGSU5FRCwJCS8qIDE1NSAqLw0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAt CVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5F RCwNCj4gPiAtCVRQTV9TSE9SVCwJCS8qIDE2MCAqLw0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0J VFBNX1NIT1JULA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAt CVRQTV9VTkRFRklORUQsCQkvKiAxNjUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlU UE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQs DQo+ID4gLQlUUE1fTE9ORywJCS8qIDE3MCAqLw0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAt CVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5F RCwNCj4gPiAtCVRQTV9VTkRFRklORUQsCQkvKiAxNzUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQs DQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9V TkRFRklORUQsDQo+ID4gLQlUUE1fTUVESVVNLAkJLyogMTgwICovDQo+ID4gLQlUUE1fU0hPUlQs DQo+ID4gLQlUUE1fTUVESVVNLA0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQTV9NRURJVU0s DQo+ID4gLQlUUE1fTUVESVVNLAkJLyogMTg1ICovDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlU UE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQs DQo+ID4gLQlUUE1fVU5ERUZJTkVELAkJLyogMTkwICovDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0K PiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5E RUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwJCS8qIDE5NSAqLw0KPiA+IC0JVFBNX1VOREVG SU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0J VFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9TSE9SVCwJCS8qIDIwMCAqLw0KPiA+IC0JVFBNX1VO REVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+ IC0JVFBNX1NIT1JULA0KPiA+IC0JVFBNX1NIT1JULAkJLyogMjA1ICovDQo+ID4gLQlUUE1fU0hP UlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQs DQo+ID4gLQlUUE1fTUVESVVNLAkJLyogMjEwICovDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+ IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQTV9NRURJVU0sDQo+ID4gLQlUUE1fTUVESVVNLA0KPiA+ IC0JVFBNX1VOREVGSU5FRCwJCS8qIDIxNSAqLw0KPiA+IC0JVFBNX01FRElVTSwNCj4gPiAtCVRQ TV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1NIT1JULA0KPiA+ IC0JVFBNX1NIT1JULAkJLyogMjIwICovDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hP UlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fU0hPUlQsDQo+ID4gLQlUUE1fVU5ERUZJ TkVELAkJLyogMjI1ICovDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5F RCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBN X1NIT1JULAkJLyogMjMwICovDQo+ID4gLQlUUE1fTE9ORywNCj4gPiAtCVRQTV9NRURJVU0sDQo+ ID4gLQlUUE1fVU5ERUZJTkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRF RklORUQsCQkvKiAyMzUgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fVU5ERUZJ TkVELA0KPiA+IC0JVFBNX1VOREVGSU5FRCwNCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlU UE1fU0hPUlQsCQkvKiAyNDAgKi8NCj4gPiAtCVRQTV9VTkRFRklORUQsDQo+ID4gLQlUUE1fTUVE SVVNLA0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAqIHRwbTFfY2FsY19vcmRpbmFs X2R1cmF0aW9uKCkgLSBjYWxjdWxhdGUgdGhlIG1heGltdW0gY29tbWFuZCBkdXJhdGlvbg0KPiA+ IC0gKiBAY2hpcDogICAgVFBNIGNoaXAgdG8gdXNlLg0KPiA+IC0gKiBAb3JkaW5hbDogVFBNIGNv bW1hbmQgb3JkaW5hbC4NCj4gPiAtICoNCj4gPiAtICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhl IG1heGltdW0gYW1vdW50IG9mIHRpbWUgdGhlIGNoaXAgY291bGQgdGFrZQ0KPiA+IC0gKiB0byBy ZXR1cm4gdGhlIHJlc3VsdCBmb3IgYSBwYXJ0aWN1bGFyIG9yZGluYWwgaW4gamlmZmllcy4NCj4g PiAtICoNCj4gPiAtICogUmV0dXJuOiBBIG1heGltYWwgZHVyYXRpb24gdGltZSBmb3IgYW4gb3Jk aW5hbCBpbiBqaWZmaWVzLg0KPiA+IC0gKi8NCj4gPiAtdW5zaWduZWQgbG9uZyB0cG0xX2NhbGNf b3JkaW5hbF9kdXJhdGlvbihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBvcmRpbmFsKQ0KPiA+ IC17DQo+ID4gLQlpbnQgZHVyYXRpb25faWR4ID0gVFBNX1VOREVGSU5FRDsNCj4gPiAtCWludCBk dXJhdGlvbiA9IDA7DQo+ID4gLQ0KPiA+IC0JLyoNCj4gPiAtCSAqIFdlIG9ubHkgaGF2ZSBhIGR1 cmF0aW9uIHRhYmxlIGZvciBwcm90ZWN0ZWQgY29tbWFuZHMsIHdoZXJlIHRoZSB1cHBlcg0KPiA+ IC0JICogMTYgYml0cyBhcmUgMC4gRm9yIHRoZSBmZXcgb3RoZXIgb3JkaW5hbHMgdGhlIGZhbGxi YWNrIHdpbGwgYmUgdXNlZC4NCj4gPiAtCSAqLw0KPiA+IC0JaWYgKG9yZGluYWwgPCBUUE1fTUFY X09SRElOQUwpDQo+ID4gLQkJZHVyYXRpb25faWR4ID0gdHBtMV9vcmRpbmFsX2R1cmF0aW9uW29y ZGluYWxdOw0KPiA+IC0NCj4gPiAtCWlmIChkdXJhdGlvbl9pZHggIT0gVFBNX1VOREVGSU5FRCkN Cj4gPiAtCQlkdXJhdGlvbiA9IGNoaXAtPmR1cmF0aW9uW2R1cmF0aW9uX2lkeF07DQo+ID4gLQlp ZiAoZHVyYXRpb24gPD0gMCkNCj4gPiAtCQlyZXR1cm4gMiAqIDYwICogSFo7DQo+ID4gLQllbHNl DQo+ID4gLQkJcmV0dXJuIGR1cmF0aW9uOw0KPiA+IC19DQo+ID4gLQ0KPiA+ICAjZGVmaW5lIFRQ TV9PUkRfU1RBUlRVUCAxNTMNCj4gPiAgI2RlZmluZSBUUE1fU1RfQ0xFQVIgMQ0KPiA+IA0KPiA+ ICsjZGVmaW5lIFRQTV9USU1FT1VUX1JFVFJZIDEwMA0KPiA+ICsNCj4gPiAgLyoqDQo+ID4gICAq IHRwbV9zdGFydHVwKCkgLSB0dXJuIG9uIHRoZSBUUE0NCj4gPiAgICogQGNoaXA6IFRQTSBjaGlw IHRvIHVzZQ0KPiA+IEBAIC0zNDIsMTEyICs2MCw2IEBAIHN0YXRpYyBpbnQgdHBtMV9zdGFydHVw KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkNCj4gPiAgCXJldHVybiByYzsNCj4gPiAgfQ0KPiA+IA0K PiA+IC1pbnQgdHBtMV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQ0KPiA+IC17 DQo+ID4gLQljYXBfdCBjYXA7DQo+ID4gLQl1bnNpZ25lZCBsb25nIHRpbWVvdXRfb2xkWzRdLCB0 aW1lb3V0X2NoaXBbNF0sIHRpbWVvdXRfZWZmWzRdOw0KPiA+IC0Jc3NpemVfdCByYzsNCj4gPiAt DQo+ID4gLQlyYyA9IHRwbTFfZ2V0Y2FwKGNoaXAsIFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVCwg JmNhcCwgTlVMTCwNCj4gPiAtCQkJIHNpemVvZihjYXAudGltZW91dCkpOw0KPiA+IC0JaWYgKHJj ID09IFRQTV9FUlJfSU5WQUxJRF9QT1NUSU5JVCkgew0KPiA+IC0JCWlmICh0cG0xX3N0YXJ0dXAo Y2hpcCkpDQo+ID4gLQkJCXJldHVybiByYzsNCj4gPiAtDQo+ID4gLQkJcmMgPSB0cG0xX2dldGNh cChjaGlwLCBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQsICZjYXAsDQo+ID4gLQkJCQkgImF0dGVt cHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIsDQo+ID4gLQkJCQkgc2l6ZW9mKGNhcC50 aW1lb3V0KSk7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JaWYgKHJjKSB7DQo+ID4gLQkJZGV2X2Vy cigmY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCV6ZCkgb2NjdXJyZWQgYXR0ZW1wdGluZyB0byBk ZXRlcm1pbmUgdGhlIHRpbWVvdXRzXG4iLA0KPiA+IC0JCQlyYyk7DQo+ID4gLQkJcmV0dXJuIHJj Ow0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCXRpbWVvdXRfb2xkWzBdID0gamlmZmllc190b191c2Vj cyhjaGlwLT50aW1lb3V0X2EpOw0KPiA+IC0JdGltZW91dF9vbGRbMV0gPSBqaWZmaWVzX3RvX3Vz ZWNzKGNoaXAtPnRpbWVvdXRfYik7DQo+ID4gLQl0aW1lb3V0X29sZFsyXSA9IGppZmZpZXNfdG9f dXNlY3MoY2hpcC0+dGltZW91dF9jKTsNCj4gPiAtCXRpbWVvdXRfb2xkWzNdID0gamlmZmllc190 b191c2VjcyhjaGlwLT50aW1lb3V0X2QpOw0KPiA+IC0JdGltZW91dF9jaGlwWzBdID0gYmUzMl90 b19jcHUoY2FwLnRpbWVvdXQuYSk7DQo+ID4gLQl0aW1lb3V0X2NoaXBbMV0gPSBiZTMyX3RvX2Nw dShjYXAudGltZW91dC5iKTsNCj4gPiAtCXRpbWVvdXRfY2hpcFsyXSA9IGJlMzJfdG9fY3B1KGNh cC50aW1lb3V0LmMpOw0KPiA+IC0JdGltZW91dF9jaGlwWzNdID0gYmUzMl90b19jcHUoY2FwLnRp bWVvdXQuZCk7DQo+ID4gLQltZW1jcHkodGltZW91dF9lZmYsIHRpbWVvdXRfY2hpcCwgc2l6ZW9m KHRpbWVvdXRfZWZmKSk7DQo+ID4gLQ0KPiA+IC0JLyoNCj4gPiAtCSAqIFByb3ZpZGUgYWJpbGl0 eSBmb3IgdmVuZG9yIG92ZXJyaWRlcyBvZiB0aW1lb3V0IHZhbHVlcyBpbiBjYXNlDQo+ID4gLQkg KiBvZiBtaXNyZXBvcnRpbmcuDQo+ID4gLQkgKi8NCj4gPiAtCWlmIChjaGlwLT5vcHMtPnVwZGF0 ZV90aW1lb3V0cykNCj4gPiAtCQljaGlwLT50aW1lb3V0X2FkanVzdGVkID0NCj4gPiAtCQkJY2hp cC0+b3BzLT51cGRhdGVfdGltZW91dHMoY2hpcCwgdGltZW91dF9lZmYpOw0KPiA+IC0NCj4gPiAt CWlmICghY2hpcC0+dGltZW91dF9hZGp1c3RlZCkgew0KPiA+IC0JCS8qIFJlc3RvcmUgZGVmYXVs dCBpZiBjaGlwIHJlcG9ydGVkIDAgKi8NCj4gPiAtCQl1bnNpZ25lZCBpbnQgaTsNCj4gPiAtDQo+ ID4gLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGltZW91dF9lZmYpOyBpKyspIHsNCj4g PiAtCQkJaWYgKHRpbWVvdXRfZWZmW2ldKQ0KPiA+IC0JCQkJY29udGludWU7DQo+ID4gLQ0KPiA+ IC0JCQl0aW1lb3V0X2VmZltpXSA9IHRpbWVvdXRfb2xkW2ldOw0KPiA+IC0JCQljaGlwLT50aW1l b3V0X2FkanVzdGVkID0gdHJ1ZTsNCj4gPiAtCQl9DQo+ID4gLQ0KPiA+IC0JCWlmICh0aW1lb3V0 X2VmZlswXSAhPSAwICYmIHRpbWVvdXRfZWZmWzBdIDwgMTAwMCkgew0KPiA+IC0JCQkvKiB0aW1l b3V0cyBpbiBtc2VjIHJhdGhlciB1c2VjICovDQo+ID4gLQkJCWZvciAoaSA9IDA7IGkgIT0gQVJS QVlfU0laRSh0aW1lb3V0X2VmZik7IGkrKykNCj4gPiAtCQkJCXRpbWVvdXRfZWZmW2ldICo9IDEw MDA7DQo+ID4gLQkJCWNoaXAtPnRpbWVvdXRfYWRqdXN0ZWQgPSB0cnVlOw0KPiA+IC0JCX0NCj4g PiAtCX0NCj4gPiAtDQo+ID4gLQkvKiBSZXBvcnQgYWRqdXN0ZWQgdGltZW91dHMgKi8NCj4gPiAt CWlmIChjaGlwLT50aW1lb3V0X2FkanVzdGVkKSB7DQo+ID4gLQkJZGV2X2luZm8oJmNoaXAtPmRl diwgSFdfRVJSICJBZGp1c3RpbmcgcmVwb3J0ZWQgdGltZW91dHM6IEEgJWx1LT4lbHV1cyBCICVs dS0+JWx1dXMgQyAlbHUtPiVsdXVzIEQgJWx1LT4lbHV1c1xuIiwNCj4gPiAtCQkJIHRpbWVvdXRf Y2hpcFswXSwgdGltZW91dF9lZmZbMF0sDQo+ID4gLQkJCSB0aW1lb3V0X2NoaXBbMV0sIHRpbWVv dXRfZWZmWzFdLA0KPiA+IC0JCQkgdGltZW91dF9jaGlwWzJdLCB0aW1lb3V0X2VmZlsyXSwNCj4g PiAtCQkJIHRpbWVvdXRfY2hpcFszXSwgdGltZW91dF9lZmZbM10pOw0KPiA+IC0JfQ0KPiA+IC0N Cj4gPiAtCWNoaXAtPnRpbWVvdXRfYSA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dF9lZmZbMF0p Ow0KPiA+IC0JY2hpcC0+dGltZW91dF9iID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0X2VmZlsx XSk7DQo+ID4gLQljaGlwLT50aW1lb3V0X2MgPSB1c2Vjc190b19qaWZmaWVzKHRpbWVvdXRfZWZm WzJdKTsNCj4gPiAtCWNoaXAtPnRpbWVvdXRfZCA9IHVzZWNzX3RvX2ppZmZpZXModGltZW91dF9l ZmZbM10pOw0KPiA+IC0NCj4gPiAtCXJjID0gdHBtMV9nZXRjYXAoY2hpcCwgVFBNX0NBUF9QUk9Q X1RJU19EVVJBVElPTiwgJmNhcCwNCj4gPiAtCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0 aGUgZHVyYXRpb25zIiwNCj4gPiAtCQkJICBzaXplb2YoY2FwLmR1cmF0aW9uKSk7DQo+ID4gLQlp ZiAocmMpDQo+ID4gLQkJcmV0dXJuIHJjOw0KPiA+IC0NCj4gPiAtCWNoaXAtPmR1cmF0aW9uW1RQ TV9TSE9SVF0gPQ0KPiA+IC0JCXVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoY2FwLmR1cmF0 aW9uLnRwbV9zaG9ydCkpOw0KPiA+IC0JY2hpcC0+ZHVyYXRpb25bVFBNX01FRElVTV0gPQ0KPiA+ IC0JCXVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoY2FwLmR1cmF0aW9uLnRwbV9tZWRpdW0p KTsNCj4gPiAtCWNoaXAtPmR1cmF0aW9uW1RQTV9MT05HXSA9DQo+ID4gLQkJdXNlY3NfdG9famlm ZmllcyhiZTMyX3RvX2NwdShjYXAuZHVyYXRpb24udHBtX2xvbmcpKTsNCj4gPiAtCWNoaXAtPmR1 cmF0aW9uW1RQTV9MT05HX0xPTkddID0gMDsgLyogbm90IHVzZWQgdW5kZXIgMS4yICovDQo+ID4g LQ0KPiA+IC0JLyogVGhlIEJyb2FkY29tIEJDTTAxMDIgY2hpcHNldCBpbiBhIERlbGwgTGF0aXR1 ZGUgRDgyMCBnZXRzIHRoZSBhYm92ZQ0KPiA+IC0JICogdmFsdWUgd3JvbmcgYW5kIGFwcGFyZW50 bHkgcmVwb3J0cyBtc2VjcyByYXRoZXIgdGhhbiB1c2Vjcy4gU28gd2UNCj4gPiAtCSAqIGZpeCB1 cCB0aGUgcmVzdWx0aW5nIHRvby1zbWFsbCBUUE1fU0hPUlQgdmFsdWUgdG8gbWFrZSB0aGluZ3Mg d29yay4NCj4gPiAtCSAqIFdlIGFsc28gc2NhbGUgdGhlIFRQTV9NRURJVU0gYW5kIC1fTE9ORyB2 YWx1ZXMgYnkgMTAwMC4NCj4gPiAtCSAqLw0KPiA+IC0JaWYgKGNoaXAtPmR1cmF0aW9uW1RQTV9T SE9SVF0gPCAoSFogLyAxMDApKSB7DQo+ID4gLQkJY2hpcC0+ZHVyYXRpb25bVFBNX1NIT1JUXSA9 IEhaOw0KPiA+IC0JCWNoaXAtPmR1cmF0aW9uW1RQTV9NRURJVU1dICo9IDEwMDA7DQo+ID4gLQkJ Y2hpcC0+ZHVyYXRpb25bVFBNX0xPTkddICo9IDEwMDA7DQo+ID4gLQkJY2hpcC0+ZHVyYXRpb25f YWRqdXN0ZWQgPSB0cnVlOw0KPiA+IC0JCWRldl9pbmZvKCZjaGlwLT5kZXYsICJBZGp1c3Rpbmcg VFBNIHRpbWVvdXQgcGFyYW1ldGVycy4iKTsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQljaGlwLT5m bGFncyB8PSBUUE1fQ0hJUF9GTEFHX0hBVkVfVElNRU9VVFM7DQo+ID4gLQlyZXR1cm4gMDsNCj4g PiAtfQ0KPiA+IC0NCj4gPiAgI2RlZmluZSBUUE1fT1JEX1BDUl9FWFRFTkQgMjANCj4gPiAgaW50 IHRwbTFfcGNyX2V4dGVuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBwY3JfaWR4LCBjb25z dCB1OCAqaGFzaCwNCj4gPiAgCQkgICAgY29uc3QgY2hhciAqbG9nX21zZykNCj4gPiBAQCAtNjM5 LDEyICsyNTEsOSBAQCBpbnQgdHBtMV9kb19zZWxmdGVzdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAp DQo+ID4gIAlpbnQgcmM7DQo+ID4gIAl1bnNpZ25lZCBpbnQgbG9vcHM7DQo+ID4gIAl1bnNpZ25l ZCBpbnQgZGVsYXlfbXNlYyA9IDEwMDsNCj4gPiAtCXVuc2lnbmVkIGxvbmcgZHVyYXRpb247DQo+ ID4gIAl1OCBkdW1teVtUUE1fRElHRVNUX1NJWkVdOw0KPiA+IA0KPiA+IC0JZHVyYXRpb24gPSB0 cG0xX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBUUE1fT1JEX0NPTlRJTlVFX1NFTEZURVNU KTsNCj4gPiAtDQo+ID4gLQlsb29wcyA9IGppZmZpZXNfdG9fbXNlY3MoZHVyYXRpb24pIC8gZGVs YXlfbXNlYzsNCj4gPiArCWxvb3BzID0gVFBNX1VOSVZFUlNBTF9USU1FT1VUX01TIC8gZGVsYXlf bXNlYzsNCj4gPiANCj4gPiAgCXJjID0gdHBtMV9jb250aW51ZV9zZWxmdGVzdChjaGlwKTsNCj4g PiAgCWlmIChyYyA9PSBUUE1fRVJSX0lOVkFMSURfUE9TVElOSVQpIHsNCj4gPiBAQCAtNjk4LDEx ICszMDcsMzEgQEAgRVhQT1JUX1NZTUJPTF9HUEwodHBtMV9kb19zZWxmdGVzdCk7DQo+ID4gICAq Lw0KPiA+ICBpbnQgdHBtMV9hdXRvX3N0YXJ0dXAoc3RydWN0IHRwbV9jaGlwICpjaGlwKQ0KPiA+ ICB7DQo+ID4gKwljYXBfdCB1bnVzZWQ7DQo+ID4gIAlpbnQgcmM7DQo+ID4gDQo+ID4gLQlyYyA9 IHRwbTFfZ2V0X3RpbWVvdXRzKGNoaXApOw0KPiA+IC0JaWYgKHJjKQ0KPiA+IC0JCWdvdG8gb3V0 Ow0KPiA+ICsJLyoNCj4gPiArCSAqIFdlIG5vdyBpZ25vcmUgdGhlIHRpbWVvdXRzIHRoZSBkZXZp Y2Ugc3BlY2lmaWVzLCBidXQgdGhlIG9yaWdpbmFsDQo+ID4gKwkgKiBpbml0aWFsaXphdGlvbiBz ZXF1ZW5jZSBiZWdhbiBieSBhc2tpbmcgZm9yIHRoZW0gc28gd2Ugc3RpbGwgZG8uDQo+ID4gKwkg Ki8NCj4gPiArDQo+ID4gKwlyYyA9IHRwbTFfZ2V0Y2FwKGNoaXAsIFRQTV9DQVBfUFJPUF9USVNf VElNRU9VVCwgJnVudXNlZCwgTlVMTCwNCj4gPiArCQkJIHNpemVvZih1bnVzZWQudGltZW91dCkp Ow0KPiA+ICsJaWYgKHJjID09IFRQTV9FUlJfSU5WQUxJRF9QT1NUSU5JVCkgew0KPiA+ICsJCWlm ICh0cG0xX3N0YXJ0dXAoY2hpcCkpDQo+ID4gKwkJCXJldHVybiByYzsNCj4gPiArDQo+ID4gKwkJ cmMgPSB0cG0xX2dldGNhcChjaGlwLCBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQsICZ1bnVzZWQs DQo+ID4gKwkJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0aW1lb3V0cyIsDQo+ID4g KwkJCQkgc2l6ZW9mKHVudXNlZC50aW1lb3V0KSk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsNCj4g PiArCWlmIChyYykgew0KPiA+ICsJCWRldl9lcnIoJmNoaXAtPmRldiwgIlRQTSBmYWlsZWQgdG8g aW5pdCAoJWQpXG4iLCByYyk7DQo+ID4gKwkJcmV0dXJuIHJjOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiAgCXJjID0gdHBtMV9kb19zZWxmdGVzdChjaGlwKTsNCj4gPiAgCWlmIChyYykgew0KPiA+ICAJ CWRldl9lcnIoJmNoaXAtPmRldiwgIlRQTSBzZWxmIHRlc3QgZmFpbGVkXG4iKTsNCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jIGIvZHJpdmVycy9jaGFyL3RwbS90 cG0yLWNtZC5jDQo+ID4gaW5kZXggYTZiZWMxM2FmYTY5Li5hYjRkNmQ0Mjg4OGUgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jDQo+ID4gKysrIGIvZHJpdmVycy9j aGFyL3RwbS90cG0yLWNtZC5jDQo+ID4gQEAgLTQwLDEyMiArNDAsNiBAQCBzdGF0aWMgc3RydWN0 IHRwbTJfaGFzaCB0cG0yX2hhc2hfbWFwW10gPSB7DQo+ID4gIAl7SEFTSF9BTEdPX1NNM18yNTYs IFRQTTJfQUxHX1NNM18yNTZ9LA0KPiA+ICB9Ow0KPiA+IA0KPiA+IC1pbnQgdHBtMl9nZXRfdGlt ZW91dHMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQ0KPiA+IC17DQo+ID4gLQkvKiBGaXhlZCB0aW1l b3V0cyBmb3IgVFBNMiAqLw0KPiA+IC0JY2hpcC0+dGltZW91dF9hID0gbXNlY3NfdG9famlmZmll cyhUUE0yX1RJTUVPVVRfQSk7DQo+ID4gLQljaGlwLT50aW1lb3V0X2IgPSBtc2Vjc190b19qaWZm aWVzKFRQTTJfVElNRU9VVF9CKTsNCj4gPiAtCWNoaXAtPnRpbWVvdXRfYyA9IG1zZWNzX3RvX2pp ZmZpZXMoVFBNMl9USU1FT1VUX0MpOw0KPiA+IC0JY2hpcC0+dGltZW91dF9kID0gbXNlY3NfdG9f amlmZmllcyhUUE0yX1RJTUVPVVRfRCk7DQo+ID4gLQ0KPiA+IC0JLyogUFRQIHNwZWMgdGltZW91 dHMgKi8NCj4gPiAtCWNoaXAtPmR1cmF0aW9uW1RQTV9TSE9SVF0gPSBtc2Vjc190b19qaWZmaWVz KFRQTTJfRFVSQVRJT05fU0hPUlQpOw0KPiA+IC0JY2hpcC0+ZHVyYXRpb25bVFBNX01FRElVTV0g PSBtc2Vjc190b19qaWZmaWVzKFRQTTJfRFVSQVRJT05fTUVESVVNKTsNCj4gPiAtCWNoaXAtPmR1 cmF0aW9uW1RQTV9MT05HXSA9IG1zZWNzX3RvX2ppZmZpZXMoVFBNMl9EVVJBVElPTl9MT05HKTsN Cj4gPiAtDQo+ID4gLQkvKiBLZXkgY3JlYXRpb24gY29tbWFuZHMgbG9uZyB0aW1lb3V0cyAqLw0K PiA+IC0JY2hpcC0+ZHVyYXRpb25bVFBNX0xPTkdfTE9OR10gPQ0KPiA+IC0JCW1zZWNzX3RvX2pp ZmZpZXMoVFBNMl9EVVJBVElPTl9MT05HX0xPTkcpOw0KPiA+IC0NCj4gPiAtCWNoaXAtPmZsYWdz IHw9IFRQTV9DSElQX0ZMQUdfSEFWRV9USU1FT1VUUzsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gMDsN Cj4gPiAtfQ0KPiA+IC0NCj4gPiAtLyoqDQo+ID4gLSAqIHRwbTJfb3JkaW5hbF9kdXJhdGlvbl9p bmRleCgpIC0gcmV0dXJucyBhbiBpbmRleCB0byB0aGUgY2hpcCBkdXJhdGlvbiB0YWJsZQ0KPiA+ IC0gKiBAb3JkaW5hbDogVFBNIGNvbW1hbmQgb3JkaW5hbC4NCj4gPiAtICoNCj4gPiAtICogVGhl IGZ1bmN0aW9uIHJldHVybnMgYW4gaW5kZXggdG8gdGhlIGNoaXAgZHVyYXRpb24gdGFibGUNCj4g PiAtICogKGVudW0gdHBtX2R1cmF0aW9uKSwgdGhhdCBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1v dW50IG9mDQo+ID4gLSAqIHRpbWUgdGhlIGNoaXAgY291bGQgdGFrZSB0byByZXR1cm4gdGhlIHJl c3VsdCBmb3IgYSAgcGFydGljdWxhciBvcmRpbmFsLg0KPiA+IC0gKg0KPiA+IC0gKiBUaGUgdmFs dWVzIG9mIHRoZSBNRURJVU0sIGFuZCBMT05HIGR1cmF0aW9ucyBhcmUgdGFrZW4NCj4gPiAtICog ZnJvbSB0aGUgUEMgQ2xpZW50IFByb2ZpbGUgKFBUUCkgc3BlY2lmaWNhdGlvbiAoNzUwLCAyMDAw IG1zZWMpDQo+ID4gLSAqDQo+ID4gLSAqIExPTkdfTE9ORyBpcyBmb3IgY29tbWFuZHMgdGhhdCBn ZW5lcmF0ZXMga2V5cyB3aGljaCBlbXBpcmljYWxseSB0YWtlcw0KPiA+IC0gKiBhIGxvbmdlciB0 aW1lIG9uIHNvbWUgc3lzdGVtcy4NCj4gPiAtICoNCj4gPiAtICogUmV0dXJuOg0KPiA+IC0gKiAq IFRQTV9NRURJVU0NCj4gPiAtICogKiBUUE1fTE9ORw0KPiA+IC0gKiAqIFRQTV9MT05HX0xPTkcN Cj4gPiAtICogKiBUUE1fVU5ERUZJTkVEDQo+ID4gLSAqLw0KPiA+IC1zdGF0aWMgdTggdHBtMl9v cmRpbmFsX2R1cmF0aW9uX2luZGV4KHUzMiBvcmRpbmFsKQ0KPiA+IC17DQo+ID4gLQlzd2l0Y2gg KG9yZGluYWwpIHsNCj4gPiAtCS8qIFN0YXJ0dXAgKi8NCj4gPiAtCWNhc2UgVFBNMl9DQ19TVEFS VFVQOiAgICAgICAgICAgICAgICAgLyogMTQ0ICovDQo+ID4gLQkJcmV0dXJuIFRQTV9NRURJVU07 DQo+ID4gLQ0KPiA+IC0JY2FzZSBUUE0yX0NDX1NFTEZfVEVTVDogICAgICAgICAgICAgICAvKiAx NDMgKi8NCj4gPiAtCQlyZXR1cm4gVFBNX0xPTkc7DQo+ID4gLQ0KPiA+IC0JY2FzZSBUUE0yX0ND X0dFVF9SQU5ET006ICAgICAgICAgICAgICAvKiAxN0IgKi8NCj4gPiAtCQlyZXR1cm4gVFBNX0xP Tkc7DQo+ID4gLQ0KPiA+IC0JY2FzZSBUUE0yX0NDX1NFUVVFTkNFX1VQREFURTogICAgICAgICAv KiAxNUMgKi8NCj4gPiAtCQlyZXR1cm4gVFBNX01FRElVTTsNCj4gPiAtCWNhc2UgVFBNMl9DQ19T RVFVRU5DRV9DT01QTEVURTogICAgICAgLyogMTNFICovDQo+ID4gLQkJcmV0dXJuIFRQTV9NRURJ VU07DQo+ID4gLQljYXNlIFRQTTJfQ0NfRVZFTlRfU0VRVUVOQ0VfQ09NUExFVEU6IC8qIDE4NSAq Lw0KPiA+IC0JCXJldHVybiBUUE1fTUVESVVNOw0KPiA+IC0JY2FzZSBUUE0yX0NDX0hBU0hfU0VR VUVOQ0VfU1RBUlQ6ICAgICAvKiAxODYgKi8NCj4gPiAtCQlyZXR1cm4gVFBNX01FRElVTTsNCj4g PiAtDQo+ID4gLQljYXNlIFRQTTJfQ0NfVkVSSUZZX1NJR05BVFVSRTogICAgICAgIC8qIDE3NyAq Lw0KPiA+IC0JCXJldHVybiBUUE1fTE9ORzsNCj4gPiAtDQo+ID4gLQljYXNlIFRQTTJfQ0NfUENS X0VYVEVORDogICAgICAgICAgICAgIC8qIDE4MiAqLw0KPiA+IC0JCXJldHVybiBUUE1fTUVESVVN Ow0KPiA+IC0NCj4gPiAtCWNhc2UgVFBNMl9DQ19ISUVSQVJDSFlfQ09OVFJPTDogICAgICAgLyog MTIxICovDQo+ID4gLQkJcmV0dXJuIFRQTV9MT05HOw0KPiA+IC0JY2FzZSBUUE0yX0NDX0hJRVJB UkNIWV9DSEFOR0VfQVVUSDogICAvKiAxMjkgKi8NCj4gPiAtCQlyZXR1cm4gVFBNX0xPTkc7DQo+ ID4gLQ0KPiA+IC0JY2FzZSBUUE0yX0NDX0dFVF9DQVBBQklMSVRZOiAgICAgICAgICAvKiAxN0Eg Ki8NCj4gPiAtCQlyZXR1cm4gVFBNX01FRElVTTsNCj4gPiAtDQo+ID4gLQljYXNlIFRQTTJfQ0Nf TlZfUkVBRDogICAgICAgICAgICAgICAgIC8qIDE0RSAqLw0KPiA+IC0JCXJldHVybiBUUE1fTE9O RzsNCj4gPiAtDQo+ID4gLQljYXNlIFRQTTJfQ0NfQ1JFQVRFX1BSSU1BUlk6ICAgICAgICAgIC8q IDEzMSAqLw0KPiA+IC0JCXJldHVybiBUUE1fTE9OR19MT05HOw0KPiA+IC0JY2FzZSBUUE0yX0ND X0NSRUFURTogICAgICAgICAgICAgICAgICAvKiAxNTMgKi8NCj4gPiAtCQlyZXR1cm4gVFBNX0xP TkdfTE9ORzsNCj4gPiAtCWNhc2UgVFBNMl9DQ19DUkVBVEVfTE9BREVEOiAgICAgICAgICAgLyog MTkxICovDQo+ID4gLQkJcmV0dXJuIFRQTV9MT05HX0xPTkc7DQo+ID4gLQ0KPiA+IC0JZGVmYXVs dDoNCj4gPiAtCQlyZXR1cm4gVFBNX1VOREVGSU5FRDsNCj4gPiAtCX0NCj4gPiAtfQ0KPiA+IC0N Cj4gPiAtLyoqDQo+ID4gLSAqIHRwbTJfY2FsY19vcmRpbmFsX2R1cmF0aW9uKCkgLSBjYWxjdWxh dGUgdGhlIG1heGltdW0gY29tbWFuZCBkdXJhdGlvbg0KPiA+IC0gKiBAY2hpcDogICAgVFBNIGNo aXAgdG8gdXNlLg0KPiA+IC0gKiBAb3JkaW5hbDogVFBNIGNvbW1hbmQgb3JkaW5hbC4NCj4gPiAt ICoNCj4gPiAtICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRp bWUgdGhlIGNoaXAgY291bGQgdGFrZQ0KPiA+IC0gKiB0byByZXR1cm4gdGhlIHJlc3VsdCBmb3Ig YSBwYXJ0aWN1bGFyIG9yZGluYWwgaW4gamlmZmllcy4NCj4gPiAtICoNCj4gPiAtICogUmV0dXJu OiBBIG1heGltYWwgZHVyYXRpb24gdGltZSBmb3IgYW4gb3JkaW5hbCBpbiBqaWZmaWVzLg0KPiA+ IC0gKi8NCj4gPiAtdW5zaWduZWQgbG9uZyB0cG0yX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihzdHJ1 Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBvcmRpbmFsKQ0KPiA+IC17DQo+ID4gLQl1bnNpZ25lZCBp bnQgaW5kZXg7DQo+ID4gLQ0KPiA+IC0JaW5kZXggPSB0cG0yX29yZGluYWxfZHVyYXRpb25faW5k ZXgob3JkaW5hbCk7DQo+ID4gLQ0KPiA+IC0JaWYgKGluZGV4ICE9IFRQTV9VTkRFRklORUQpDQo+ ID4gLQkJcmV0dXJuIGNoaXAtPmR1cmF0aW9uW2luZGV4XTsNCj4gPiAtCWVsc2UNCj4gPiAtCQly ZXR1cm4gbXNlY3NfdG9famlmZmllcyhUUE0yX0RVUkFUSU9OX0RFRkFVTFQpOw0KPiA+IC19DQo+ ID4gLQ0KPiA+IC0NCj4gPiAgc3RydWN0IHRwbTJfcGNyX3JlYWRfb3V0IHsNCj4gPiAgCV9fYmUz Mgl1cGRhdGVfY250Ow0KPiA+ICAJX19iZTMyCXBjcl9zZWxlY3RzX2NudDsNCj4gPiBAQCAtOTg3 LDEwICs4NzEsNiBAQCBpbnQgdHBtMl9hdXRvX3N0YXJ0dXAoc3RydWN0IHRwbV9jaGlwICpjaGlw KQ0KPiA+ICB7DQo+ID4gIAlpbnQgcmM7DQo+ID4gDQo+ID4gLQlyYyA9IHRwbTJfZ2V0X3RpbWVv dXRzKGNoaXApOw0KPiA+IC0JaWYgKHJjKQ0KPiA+IC0JCWdvdG8gb3V0Ow0KPiA+IC0NCj4gPiAg CXJjID0gdHBtMl9kb19zZWxmdGVzdChjaGlwKTsNCj4gPiAgCWlmIChyYyAmJiByYyAhPSBUUE0y X1JDX0lOSVRJQUxJWkUpDQo+ID4gIAkJZ290byBvdXQ7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvY2hhci90cG0vdHBtX2NyYi5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fY3JiLmMNCj4gPiBp bmRleCAzNjk1MmVmOThmOTAuLmY2ODM2NjdlZDBlNCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L2NoYXIvdHBtL3RwbV9jcmIuYw0KPiA+ICsrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2NyYi5j DQo+ID4gQEAgLTExMiwxNCArMTEyLDEzIEBAIHN0cnVjdCB0cG0yX2NyYl9zbWMgew0KPiA+ICAJ dTMyIHNtY19mdW5jX2lkOw0KPiA+ICB9Ow0KPiA+IA0KPiA+IC1zdGF0aWMgYm9vbCBjcmJfd2Fp dF9mb3JfcmVnXzMyKHUzMiBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUsDQo+ID4g LQkJCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQpDQo+ID4gK3N0YXRpYyBib29sIGNyYl93YWl0X2Zv cl9yZWdfMzIodTMyIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSkNCj4gPiAgew0K PiA+ICAJa3RpbWVfdCBzdGFydDsNCj4gPiAgCWt0aW1lX3Qgc3RvcDsNCj4gPiANCj4gPiAgCXN0 YXJ0ID0ga3RpbWVfZ2V0KCk7DQo+ID4gLQlzdG9wID0ga3RpbWVfYWRkKHN0YXJ0LCBtc190b19r dGltZSh0aW1lb3V0KSk7DQo+ID4gKwlzdG9wID0ga3RpbWVfYWRkKHN0YXJ0LCBtc190b19rdGlt ZShUUE1fVU5JVkVSU0FMX1RJTUVPVVRfTVMpKTsNCj4gPiANCj4gPiAgCWRvIHsNCj4gPiAgCQlp ZiAoKGlvcmVhZDMyKHJlZykgJiBtYXNrKSA9PSB2YWx1ZSkNCj4gPiBAQCAtMTU3LDkgKzE1Niw3 IEBAIHN0YXRpYyBpbnQgX19jcmJfZ29faWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBj cmJfcHJpdiAqcHJpdikNCj4gPiAgCWlvd3JpdGUzMihDUkJfQ1RSTF9SRVFfR09fSURMRSwgJnBy aXYtPnJlZ3NfdC0+Y3RybF9yZXEpOw0KPiA+IA0KPiA+ICAJaWYgKCFjcmJfd2FpdF9mb3JfcmVn XzMyKCZwcml2LT5yZWdzX3QtPmN0cmxfcmVxLA0KPiA+IC0JCQkJIENSQl9DVFJMX1JFUV9HT19J RExFLyogbWFzayAqLywNCj4gPiAtCQkJCSAwLCAvKiB2YWx1ZSAqLw0KPiA+IC0JCQkJIFRQTTJf VElNRU9VVF9DKSkgew0KPiA+ICsJCQkJIENSQl9DVFJMX1JFUV9HT19JRExFLCAwKSkgew0KPiA+ ICAJCWRldl93YXJuKGRldiwgImdvSWRsZSB0aW1lZCBvdXRcbiIpOw0KPiA+ICAJCXJldHVybiAt RVRJTUU7DQo+ID4gIAl9DQo+ID4gQEAgLTE4Myw3ICsxODAsNiBAQCBzdGF0aWMgaW50IGNyYl9n b19pZGxlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkNCj4gPiAgICoNCj4gPiAgICogV3JpdGUgQ1JC X0NUUkxfUkVRX0NNRF9SRUFEWSB0byBUUE1fQ1JCX0NUUkxfUkVRDQo+ID4gICAqIGFuZCBwb2xs IHRpbGwgdGhlIGRldmljZSBhY2tub3dsZWRnZSBpdCBieSBjbGVhcmluZyB0aGUgYml0Lg0KPiA+ IC0gKiBUaGUgZGV2aWNlIHNob3VsZCByZXNwb25kIHdpdGhpbiBUSU1FT1VUX0MuDQo+ID4gICAq DQo+ID4gICAqIFRoZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgZm9yIGRldmljZXMgd2l0aCBBQ1BJ LXN0YXJ0IG1ldGhvZA0KPiA+ICAgKiBvciBTTUMtc3RhcnQgbWV0aG9kLg0KPiA+IEBAIC0xOTks OSArMTk1LDcgQEAgc3RhdGljIGludCBfX2NyYl9jbWRfcmVhZHkoc3RydWN0IGRldmljZSAqZGV2 LCBzdHJ1Y3QgY3JiX3ByaXYgKnByaXYpDQo+ID4gDQo+ID4gIAlpb3dyaXRlMzIoQ1JCX0NUUkxf UkVRX0NNRF9SRUFEWSwgJnByaXYtPnJlZ3NfdC0+Y3RybF9yZXEpOw0KPiA+ICAJaWYgKCFjcmJf d2FpdF9mb3JfcmVnXzMyKCZwcml2LT5yZWdzX3QtPmN0cmxfcmVxLA0KPiA+IC0JCQkJIENSQl9D VFJMX1JFUV9DTURfUkVBRFkgLyogbWFzayAqLywNCj4gPiAtCQkJCSAwLCAvKiB2YWx1ZSAqLw0K PiA+IC0JCQkJIFRQTTJfVElNRU9VVF9DKSkgew0KPiA+ICsJCQkJIENSQl9DVFJMX1JFUV9DTURf UkVBRFksIDApKSB7DQo+ID4gIAkJZGV2X3dhcm4oZGV2LCAiY21kUmVhZHkgdGltZWQgb3V0XG4i KTsNCj4gPiAgCQlyZXR1cm4gLUVUSU1FOw0KPiA+ICAJfQ0KPiA+IEBAIC0yMjcsOCArMjIxLDcg QEAgc3RhdGljIGludCBfX2NyYl9yZXF1ZXN0X2xvY2FsaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwN Cj4gPiAgCQlyZXR1cm4gMDsNCj4gPiANCj4gPiAgCWlvd3JpdGUzMihDUkJfTE9DX0NUUkxfUkVR VUVTVF9BQ0NFU1MsICZwcml2LT5yZWdzX2gtPmxvY19jdHJsKTsNCj4gPiAtCWlmICghY3JiX3dh aXRfZm9yX3JlZ18zMigmcHJpdi0+cmVnc19oLT5sb2Nfc3RhdGUsIHZhbHVlLCB2YWx1ZSwNCj4g PiAtCQkJCSBUUE0yX1RJTUVPVVRfQykpIHsNCj4gPiArCWlmICghY3JiX3dhaXRfZm9yX3JlZ18z MigmcHJpdi0+cmVnc19oLT5sb2Nfc3RhdGUsIHZhbHVlLCB2YWx1ZSkpIHsNCj4gPiAgCQlkZXZf d2FybihkZXYsICJUUE1fTE9DX1NUQVRFX3gucmVxdWVzdEFjY2VzcyB0aW1lZCBvdXRcbiIpOw0K PiA+ICAJCXJldHVybiAtRVRJTUU7DQo+ID4gIAl9DQo+ID4gQEAgLTI1NCw4ICsyNDcsNyBAQCBz dGF0aWMgaW50IF9fY3JiX3JlbGlucXVpc2hfbG9jYWxpdHkoc3RydWN0IGRldmljZSAqZGV2LA0K PiA+ICAJCXJldHVybiAwOw0KPiA+IA0KPiA+ICAJaW93cml0ZTMyKENSQl9MT0NfQ1RSTF9SRUxJ TlFVSVNILCAmcHJpdi0+cmVnc19oLT5sb2NfY3RybCk7DQo+ID4gLQlpZiAoIWNyYl93YWl0X2Zv cl9yZWdfMzIoJnByaXYtPnJlZ3NfaC0+bG9jX3N0YXRlLCBtYXNrLCB2YWx1ZSwNCj4gPiAtCQkJ CSBUUE0yX1RJTUVPVVRfQykpIHsNCj4gPiArCWlmICghY3JiX3dhaXRfZm9yX3JlZ18zMigmcHJp di0+cmVnc19oLT5sb2Nfc3RhdGUsIG1hc2ssIHZhbHVlKSkgew0KPiA+ICAJCWRldl93YXJuKGRl diwgIlRQTV9MT0NfU1RBVEVfeC5yZXF1ZXN0QWNjZXNzIHRpbWVkIG91dFxuIik7DQo+ID4gIAkJ cmV0dXJuIC1FVElNRTsNCj4gPiAgCX0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Rw bS90cG1faTJjX2F0bWVsLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYw0KPiA+ IGluZGV4IDk1Y2UyZTljY2RjNi4uYjA1ODgyOWVjY2Y4IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jDQo+ID4gKysrIGIvZHJpdmVycy9jaGFyL3RwbS90 cG1faTJjX2F0bWVsLmMNCj4gPiBAQCAtMTY5LDEyICsxNjksNiBAQCBzdGF0aWMgaW50IGkyY19h dG1lbF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPiA+ICAJaWYgKCFwcml2KQ0K PiA+ICAJCXJldHVybiAtRU5PTUVNOw0KPiA+IA0KPiA+IC0JLyogRGVmYXVsdCB0aW1lb3V0cyAq Lw0KPiA+IC0JY2hpcC0+dGltZW91dF9hID0gbXNlY3NfdG9famlmZmllcyhUUE1fSTJDX1NIT1JU X1RJTUVPVVQpOw0KPiA+IC0JY2hpcC0+dGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyhUUE1f STJDX0xPTkdfVElNRU9VVCk7DQo+ID4gLQljaGlwLT50aW1lb3V0X2MgPSBtc2Vjc190b19qaWZm aWVzKFRQTV9JMkNfU0hPUlRfVElNRU9VVCk7DQo+ID4gLQljaGlwLT50aW1lb3V0X2QgPSBtc2Vj c190b19qaWZmaWVzKFRQTV9JMkNfU0hPUlRfVElNRU9VVCk7DQo+ID4gLQ0KPiA+ICAJZGV2X3Nl dF9kcnZkYXRhKCZjaGlwLT5kZXYsIHByaXYpOw0KPiA+IA0KPiA+ICAJLyogVGhlcmUgaXMgbm8g a25vd24gd2F5IHRvIHByb2JlIGZvciB0aGlzIGRldmljZSwgYW5kIGFsbCB2ZXJzaW9uDQo+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19pbmZpbmVvbi5jIGIvZHJpdmVy cy9jaGFyL3RwbS90cG1faTJjX2luZmluZW9uLmMNCj4gPiBpbmRleCA5MDg2ZWRjOTA2NmIuLjYz NTRjZWEwMDM2YiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5m aW5lb24uYw0KPiA+ICsrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19pbmZpbmVvbi5jDQo+ ID4gQEAgLTUwLDcgKzUwLDcgQEANCj4gPiAgI2RlZmluZSBTTEVFUF9EVVJBVElPTl9SRVNFVF9I SSAyNjAwDQo+ID4gDQo+ID4gIC8qIHdlIHdhbnQgdG8gdXNlIHVzbGVlcF9yYW5nZSBpbnN0ZWFk IG9mIG1zbGVlcCBmb3IgdGhlIDVtcyBUUE1fVElNRU9VVCAqLw0KPiA+IC0jZGVmaW5lIFRQTV9U SU1FT1VUX1VTX0xPVyAoVFBNX1RJTUVPVVQgKiAxMDAwKQ0KPiA+ICsjZGVmaW5lIFRQTV9USU1F T1VUX1VTX0xPVyAoVFBNX1RJTUVPVVRfUE9MTF9NUyAqIDEwMDApDQo+ID4gICNkZWZpbmUgVFBN X1RJTUVPVVRfVVNfSEkgIChUUE1fVElNRU9VVF9VU19MT1cgKyAyMDAwKQ0KPiA+IA0KPiA+ICAv KiBleHBlY3RlZCB2YWx1ZSBmb3IgRElEVklEIHJlZ2lzdGVyICovDQo+ID4gQEAgLTMwNCwxMSAr MzA0LDYgQEAgZW51bSB0aXNfc3RhdHVzIHsNCj4gPiAgCVRQTV9TVFNfREFUQV9FWFBFQ1QgPSAw eDA4LA0KPiA+ICB9Ow0KPiA+IA0KPiA+IC1lbnVtIHRpc19kZWZhdWx0cyB7DQo+ID4gLQlUSVNf U0hPUlRfVElNRU9VVCA9IDc1MCwJLyogbXMgKi8NCj4gPiAtCVRJU19MT05HX1RJTUVPVVQgPSAy MDAwLAkvKiAyIHNlYyAqLw0KPiA+IC19Ow0KPiA+IC0NCj4gPiAgI2RlZmluZQlUUE1fQUNDRVNT KGwpCQkJKDB4MDAwMCB8ICgobCkgPDwgNCkpDQo+ID4gICNkZWZpbmUJVFBNX1NUUyhsKQkJCSgw eDAwMDEgfCAoKGwpIDw8IDQpKQ0KPiA+ICAjZGVmaW5lCVRQTV9EQVRBX0ZJRk8obCkJCSgweDAw MDUgfCAoKGwpIDw8IDQpKQ0KPiA+IEBAIC0zNTcsNyArMzUyLDcgQEAgc3RhdGljIGludCByZXF1 ZXN0X2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IGxvYykNCj4gPiAgCWlpY190 cG1fd3JpdGUoVFBNX0FDQ0VTUyhsb2MpLCAmYnVmLCAxKTsNCj4gPiANCj4gPiAgCS8qIHdhaXQg Zm9yIGJ1cnN0Y291bnQgKi8NCj4gPiAtCXN0b3AgPSBqaWZmaWVzICsgY2hpcC0+dGltZW91dF9h Ow0KPiA+ICsJc3RvcCA9IGppZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUzsN Cj4gPiAgCWRvIHsNCj4gPiAgCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCwgbG9jKSkNCj4gPiAg CQkJcmV0dXJuIGxvYzsNCj4gPiBAQCAtMzk5LDcgKzM5NCw3IEBAIHN0YXRpYyBzc2l6ZV90IGdl dF9idXJzdGNvdW50KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkNCj4gPiANCj4gPiAgCS8qIHdhaXQg Zm9yIGJ1cnN0Y291bnQgKi8NCj4gPiAgCS8qIHdoaWNoIHRpbWVvdXQgdmFsdWUsIHNwZWMgaGFz IDIgYW5zd2VycyAoYyAmIGQpICovDQo+ID4gLQlzdG9wID0gamlmZmllcyArIGNoaXAtPnRpbWVv dXRfZDsNCj4gPiArCXN0b3AgPSBqaWZmaWVzICsgVFBNX1VOSVZFUlNBTF9USU1FT1VUX0pJRkZJ RVM7DQo+ID4gIAlkbyB7DQo+ID4gIAkJLyogTm90ZTogU1RTIGlzIGxpdHRsZSBlbmRpYW4gKi8N Cj4gPiAgCQlpZiAoaWljX3RwbV9yZWFkKFRQTV9TVFModHBtX2Rldi5sb2NhbGl0eSkrMSwgYnVm LCAzKSA8IDApDQo+ID4gQEAgLTQxNSw4ICs0MTAsNyBAQCBzdGF0aWMgc3NpemVfdCBnZXRfYnVy c3Rjb3VudChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApDQo+ID4gIAlyZXR1cm4gLUVCVVNZOw0KPiA+ ICB9DQo+ID4gDQo+ID4gLXN0YXRpYyBpbnQgd2FpdF9mb3Jfc3RhdChzdHJ1Y3QgdHBtX2NoaXAg KmNoaXAsIHU4IG1hc2ssIHVuc2lnbmVkIGxvbmcgdGltZW91dCwNCj4gPiAtCQkJIGludCAqc3Rh dHVzKQ0KPiA+ICtzdGF0aWMgaW50IHdhaXRfZm9yX3N0YXQoc3RydWN0IHRwbV9jaGlwICpjaGlw LCB1OCBtYXNrLCBpbnQgKnN0YXR1cykNCj4gPiAgew0KPiA+ICAJdW5zaWduZWQgbG9uZyBzdG9w Ow0KPiA+IA0KPiA+IEBAIC00MjUsNyArNDE5LDcgQEAgc3RhdGljIGludCB3YWl0X2Zvcl9zdGF0 KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggbWFzaywgdW5zaWduZWQgbG9uZyB0aW1lb3V0LA0K PiA+ICAJaWYgKCgqc3RhdHVzICE9IDB4RkYpICYmICgqc3RhdHVzICYgbWFzaykgPT0gbWFzaykN Cj4gPiAgCQlyZXR1cm4gMDsNCj4gPiANCj4gPiAtCXN0b3AgPSBqaWZmaWVzICsgdGltZW91dDsN Cj4gPiArCXN0b3AgPSBqaWZmaWVzICsgVFBNX1VOSVZFUlNBTF9USU1FT1VUX0pJRkZJRVM7DQo+ ID4gIAlkbyB7DQo+ID4gIAkJLyogc2luY2Ugd2UganVzdCBjaGVja2VkIHRoZSBzdGF0dXMsIGdp dmUgdGhlIFRQTSBzb21lIHRpbWUgKi8NCj4gPiAgCQl1c2xlZXBfcmFuZ2UoVFBNX1RJTUVPVVRf VVNfTE9XLCBUUE1fVElNRU9VVF9VU19ISSk7DQo+ID4gQEAgLTUwMiw3ICs0OTYsNyBAQCBzdGF0 aWMgaW50IHRwbV90aXNfaTJjX3JlY3Yoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBz aXplX3QgY291bnQpDQo+ID4gIAkJZ290byBvdXQ7DQo+ID4gIAl9DQo+ID4gDQo+ID4gLQl3YWl0 X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnRpbWVvdXRfYywgJnN0YXR1cyk7 DQo+ID4gKwl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsICZzdGF0dXMpOw0KPiA+ ICAJaWYgKHN0YXR1cyAmIFRQTV9TVFNfREFUQV9BVkFJTCkgewkvKiByZXRyeT8gKi8NCj4gPiAg CQlkZXZfZXJyKCZjaGlwLT5kZXYsICJFcnJvciBsZWZ0IG92ZXIgZGF0YVxuIik7DQo+ID4gIAkJ c2l6ZSA9IC1FSU87DQo+ID4gQEAgLTUzNiw5ICs1MzAsNyBAQCBzdGF0aWMgaW50IHRwbV90aXNf aTJjX3NlbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgbGVuKQ0KPiA+ ICAJc3RhdHVzID0gdHBtX3Rpc19pMmNfc3RhdHVzKGNoaXApOw0KPiA+ICAJaWYgKChzdGF0dXMg JiBUUE1fU1RTX0NPTU1BTkRfUkVBRFkpID09IDApIHsNCj4gPiAgCQl0cG1fdGlzX2kyY19yZWFk eShjaGlwKTsNCj4gPiAtCQlpZiAod2FpdF9mb3Jfc3RhdA0KPiA+IC0JCSAgICAoY2hpcCwgVFBN X1NUU19DT01NQU5EX1JFQURZLA0KPiA+IC0JCSAgICAgY2hpcC0+dGltZW91dF9iLCAmc3RhdHVz KSA8IDApIHsNCj4gPiArCQlpZiAod2FpdF9mb3Jfc3RhdChjaGlwLCBUUE1fU1RTX0NPTU1BTkRf UkVBRFksICZzdGF0dXMpIDwgMCkgew0KPiA+ICAJCQlyYyA9IC1FVElNRTsNCj4gPiAgCQkJZ290 byBvdXRfZXJyOw0KPiA+ICAJCX0NCj4gPiBAQCAtNTY3LDggKzU1OSw3IEBAIHN0YXRpYyBpbnQg dHBtX3Rpc19pMmNfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBs ZW4pDQo+ID4gIAkJCWdvdG8gb3V0X2VycjsNCj4gPiAgCQl9DQo+ID4gDQo+ID4gLQkJd2FpdF9m b3Jfc3RhdChjaGlwLCBUUE1fU1RTX1ZBTElELA0KPiA+IC0JCQkgICAgICBjaGlwLT50aW1lb3V0 X2MsICZzdGF0dXMpOw0KPiA+ICsJCXdhaXRfZm9yX3N0YXQoY2hpcCwgVFBNX1NUU19WQUxJRCwg JnN0YXR1cyk7DQo+ID4gDQo+ID4gIAkJaWYgKChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfRVhQRUNU KSA9PSAwKSB7DQo+ID4gIAkJCXJjID0gLUVJTzsNCj4gPiBAQCAtNTc4LDcgKzU2OSw3IEBAIHN0 YXRpYyBpbnQgdHBtX3Rpc19pMmNfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYs IHNpemVfdCBsZW4pDQo+ID4gDQo+ID4gIAkvKiB3cml0ZSBsYXN0IGJ5dGUgKi8NCj4gPiAgCWlp Y190cG1fd3JpdGUoVFBNX0RBVEFfRklGTyh0cG1fZGV2LmxvY2FsaXR5KSwgJihidWZbY291bnRd KSwgMSk7DQo+ID4gLQl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnRp bWVvdXRfYywgJnN0YXR1cyk7DQo+ID4gKwl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFM SUQsICZzdGF0dXMpOw0KPiA+ICAJaWYgKChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfRVhQRUNUKSAh PSAwKSB7DQo+ID4gIAkJcmMgPSAtRUlPOw0KPiA+ICAJCWdvdG8gb3V0X2VycjsNCj4gPiBAQCAt NjI0LDEyICs2MTUsNiBAQCBzdGF0aWMgaW50IHRwbV90aXNfaTJjX2luaXQoc3RydWN0IGRldmlj ZSAqZGV2KQ0KPiA+ICAJaWYgKElTX0VSUihjaGlwKSkNCj4gPiAgCQlyZXR1cm4gUFRSX0VSUihj aGlwKTsNCj4gPiANCj4gPiAtCS8qIERlZmF1bHQgdGltZW91dHMgKi8NCj4gPiAtCWNoaXAtPnRp bWVvdXRfYSA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOw0KPiA+IC0JY2hp cC0+dGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyhUSVNfTE9OR19USU1FT1VUKTsNCj4gPiAt CWNoaXAtPnRpbWVvdXRfYyA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOw0K PiA+IC0JY2hpcC0+dGltZW91dF9kID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9V VCk7DQo+ID4gLQ0KPiA+ICAJaWYgKHJlcXVlc3RfbG9jYWxpdHkoY2hpcCwgMCkgIT0gMCkgew0K PiA+ICAJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IHJlcXVlc3QgbG9jYWxpdHlcbiIpOw0KPiA+ ICAJCXJjID0gLUVOT0RFVjsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1f aTJjX251dm90b24uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19udXZvdG9uLmMNCj4gPiBp bmRleCAyMTdmN2YxY2JkZTguLjM4YWIzOGI4YzRlNSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJz L2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jDQo+ID4gKysrIGIvZHJpdmVycy9jaGFyL3RwbS90 cG1faTJjX251dm90b24uYw0KPiA+IEBAIC0xNDksNyArMTQ5LDcgQEAgc3RhdGljIHZvaWQgaTJj X251dm90b25fcmVhZHkoc3RydWN0IHRwbV9jaGlwICpjaGlwKQ0KPiA+ICBzdGF0aWMgaW50IGky Y19udXZvdG9uX2dldF9idXJzdGNvdW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQo+ID4g IAkJCQkgICAgICBzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApDQo+ID4gIHsNCj4gPiAtCXVuc2lnbmVk IGxvbmcgc3RvcCA9IGppZmZpZXMgKyBjaGlwLT50aW1lb3V0X2Q7DQo+ID4gKwl1bnNpZ25lZCBs b25nIHN0b3AgPSBqaWZmaWVzICsgVFBNX1VOSVZFUlNBTF9USU1FT1VUX0pJRkZJRVM7DQo+ID4g IAlzMzIgc3RhdHVzOw0KPiA+ICAJaW50IGJ1cnN0X2NvdW50ID0gLTE7DQo+ID4gIAl1OCBkYXRh Ow0KPiA+IEBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGljIGJvb2wgaTJjX251dm90b25fY2hlY2tf c3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggbWFzaywgdTggdmFsdWUpDQo+ID4gIH0N Cj4gPiANCj4gPiAgc3RhdGljIGludCBpMmNfbnV2b3Rvbl93YWl0X2Zvcl9zdGF0KHN0cnVjdCB0 cG1fY2hpcCAqY2hpcCwgdTggbWFzaywgdTggdmFsdWUsDQo+ID4gLQkJCQkgICAgIHUzMiB0aW1l b3V0LCB3YWl0X3F1ZXVlX2hlYWRfdCAqcXVldWUpDQo+ID4gKwkJCQkgICAgIHdhaXRfcXVldWVf aGVhZF90ICpxdWV1ZSkNCj4gPiAgew0KPiA+ICAJaWYgKChjaGlwLT5mbGFncyAmIFRQTV9DSElQ X0ZMQUdfSVJRKSAmJiBxdWV1ZSkgew0KPiA+ICAJCXMzMiByYzsNCj4gPiBAQCAtMTkyLDcgKzE5 Miw3IEBAIHN0YXRpYyBpbnQgaTJjX251dm90b25fd2FpdF9mb3Jfc3RhdChzdHJ1Y3QgdHBtX2No aXAgKmNoaXAsIHU4IG1hc2ssIHU4IHZhbHVlLA0KPiA+ICAJCWVuYWJsZV9pcnEocHJpdi0+aXJx KTsNCj4gPiAgCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpxdWV1ZSwN Cj4gPiAgCQkJCQkJICAgICAgY3VyX2ludHJzICE9IHByaXYtPmludHJzLA0KPiA+IC0JCQkJCQkg ICAgICB0aW1lb3V0KTsNCj4gPiArCQkJCQkJICAgICAgVFBNX1VOSVZFUlNBTF9USU1FT1VUX0pJ RkZJRVMpOw0KPiA+ICAJCWlmIChyYyA+IDApDQo+ID4gIAkJCXJldHVybiAwOw0KPiA+ICAJCS8q IEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHRoZSBTSU5UIHBpbiBpcyBhc3NlcnRlZCwgc28g d2UNCj4gPiBAQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyBpbnQgaTJjX251dm90b25fd2FpdF9m b3Jfc3RhdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssIHU4IHZhbHVlLA0KPiA+IA0K PiA+ICAJCS8qIHVzZSBwb2xsaW5nIHRvIHdhaXQgZm9yIHRoZSBldmVudCAqLw0KPiA+ICAJCXRl bl9tc2VjID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoVFBNX0kyQ19SRVRSWV9ERUxBWV9M T05HKTsNCj4gPiAtCQlzdG9wID0gamlmZmllcyArIHRpbWVvdXQ7DQo+ID4gKwkJc3RvcCA9IGpp ZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUzsNCj4gPiAgCQlkbyB7DQo+ID4g IAkJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0ZW5fbXNlYykpDQo+ID4gIAkJCQl1c2xlZXBf cmFuZ2UoVFBNX0kyQ19SRVRSWV9ERUxBWV9TSE9SVCwNCj4gPiBAQCAtMjMwLDEzICsyMzAsMTMg QEAgc3RhdGljIGludCBpMmNfbnV2b3Rvbl93YWl0X2Zvcl9zdGF0KHN0cnVjdCB0cG1fY2hpcCAq Y2hpcCwgdTggbWFzaywgdTggdmFsdWUsDQo+ID4gIH0NCj4gPiANCj4gPiAgLyogd2FpdCBmb3Ig ZGF0YUF2YWlsIGZpZWxkIHRvIGJlIHNldCBpbiB0aGUgVFBNX1NUUyByZWdpc3RlciAqLw0KPiA+ IC1zdGF0aWMgaW50IGkyY19udXZvdG9uX3dhaXRfZm9yX2RhdGFfYXZhaWwoc3RydWN0IHRwbV9j aGlwICpjaGlwLCB1MzIgdGltZW91dCwNCj4gPiArc3RhdGljIGludCBpMmNfbnV2b3Rvbl93YWl0 X2Zvcl9kYXRhX2F2YWlsKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwNCj4gPiAgCQkJCQkgICB3YWl0 X3F1ZXVlX2hlYWRfdCAqcXVldWUpDQo+ID4gIHsNCj4gPiAgCXJldHVybiBpMmNfbnV2b3Rvbl93 YWl0X2Zvcl9zdGF0KGNoaXAsDQo+ID4gIAkJCQkJIFRQTV9TVFNfREFUQV9BVkFJTCB8IFRQTV9T VFNfVkFMSUQsDQo+ID4gIAkJCQkJIFRQTV9TVFNfREFUQV9BVkFJTCB8IFRQTV9TVFNfVkFMSUQs DQo+ID4gLQkJCQkJIHRpbWVvdXQsIHF1ZXVlKTsNCj4gPiArCQkJCQkgcXVldWUpOw0KPiA+ICB9 DQo+ID4gDQo+ID4gIC8qIFJlYWQgQGNvdW50IGJ5dGVzIGludG8gQGJ1ZiBmcm9tIFRQTV9SRF9G SUZPIHJlZ2lzdGVyICovDQo+ID4gQEAgLTI0OSw3ICsyNDksNiBAQCBzdGF0aWMgaW50IGkyY19u dXZvdG9uX3JlY3ZfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LA0KPiA+IA0KPiA+ICAJ d2hpbGUgKHNpemUgPCBjb3VudCAmJg0KPiA+ICAJICAgICAgIGkyY19udXZvdG9uX3dhaXRfZm9y X2RhdGFfYXZhaWwoY2hpcCwNCj4gPiAtCQkJCQkgICAgICAgY2hpcC0+dGltZW91dF9jLA0KPiA+ ICAJCQkJCSAgICAgICAmcHJpdi0+cmVhZF9xdWV1ZSkgPT0gMCkgew0KPiA+ICAJCWJ1cnN0X2Nv dW50ID0gaTJjX251dm90b25fZ2V0X2J1cnN0Y291bnQoY2xpZW50LCBjaGlwKTsNCj4gPiAgCQlp ZiAoYnVyc3RfY291bnQgPCAwKSB7DQo+ID4gQEAgLTMwMyw3ICszMDIsNyBAQCBzdGF0aWMgaW50 IGkyY19udXZvdG9uX3JlY3Yoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3Qg Y291bnQpDQo+ID4gIAkJICogdGFnLCBwYXJhbXNpemUsIGFuZCByZXN1bHQNCj4gPiAgCQkgKi8N Cj4gPiAgCQlzdGF0dXMgPSBpMmNfbnV2b3Rvbl93YWl0X2Zvcl9kYXRhX2F2YWlsKA0KPiA+IC0J CQljaGlwLCBjaGlwLT50aW1lb3V0X2MsICZwcml2LT5yZWFkX3F1ZXVlKTsNCj4gPiArCQkJY2hp cCwgJnByaXYtPnJlYWRfcXVldWUpOw0KPiA+ICAJCWlmIChzdGF0dXMgIT0gMCkgew0KPiA+ICAJ CQlkZXZfZXJyKGRldiwgIiVzKCkgdGltZW91dCBvbiBkYXRhQXZhaWxcbiIsIF9fZnVuY19fKTsN Cj4gPiAgCQkJc2l6ZSA9IC1FVElNRURPVVQ7DQo+ID4gQEAgLTM0Myw4ICszNDIsNyBAQCBzdGF0 aWMgaW50IGkyY19udXZvdG9uX3JlY3Yoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBz aXplX3QgY291bnQpDQo+ID4gIAkJfQ0KPiA+ICAJCWlmIChpMmNfbnV2b3Rvbl93YWl0X2Zvcl9z dGF0KA0KPiA+ICAJCQkgICAgY2hpcCwgVFBNX1NUU19WQUxJRCB8IFRQTV9TVFNfREFUQV9BVkFJ TCwNCj4gPiAtCQkJICAgIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnRpbWVvdXRfYywNCj4gPiAtCQkJ ICAgIE5VTEwpKSB7DQo+ID4gKwkJCSAgICBUUE1fU1RTX1ZBTElELCBOVUxMKSkgew0KPiA+ICAJ CQlkZXZfZXJyKGRldiwgIiVzKCkgZXJyb3IgbGVmdCBvdmVyIGRhdGFcbiIsIF9fZnVuY19fKTsN Cj4gPiAgCQkJc2l6ZSA9IC1FVElNRURPVVQ7DQo+ID4gIAkJCWNvbnRpbnVlOw0KPiA+IEBAIC0z NjksMTUgKzM2NywxMyBAQCBzdGF0aWMgaW50IGkyY19udXZvdG9uX3NlbmQoc3RydWN0IHRwbV9j aGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgbGVuKQ0KPiA+ICAJc3RydWN0IGRldmljZSAqZGV2 ID0gY2hpcC0+ZGV2LnBhcmVudDsNCj4gPiAgCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0 b19pMmNfY2xpZW50KGRldik7DQo+ID4gIAl1MzIgb3JkaW5hbDsNCj4gPiAtCXVuc2lnbmVkIGxv bmcgZHVyYXRpb247DQo+ID4gIAlzaXplX3QgY291bnQgPSAwOw0KPiA+ICAJaW50IGJ1cnN0X2Nv dW50LCBieXRlczJ3cml0ZSwgcmV0cmllcywgcmMgPSAtRUlPOw0KPiA+IA0KPiA+ICAJZm9yIChy ZXRyaWVzID0gMDsgcmV0cmllcyA8IFRQTV9SRVRSWTsgcmV0cmllcysrKSB7DQo+ID4gIAkJaTJj X251dm90b25fcmVhZHkoY2hpcCk7DQo+ID4gIAkJaWYgKGkyY19udXZvdG9uX3dhaXRfZm9yX3N0 YXQoY2hpcCwgVFBNX1NUU19DT01NQU5EX1JFQURZLA0KPiA+IC0JCQkJCSAgICAgIFRQTV9TVFNf Q09NTUFORF9SRUFEWSwNCj4gPiAtCQkJCQkgICAgICBjaGlwLT50aW1lb3V0X2IsIE5VTEwpKSB7 DQo+ID4gKwkJCQkJICAgICAgVFBNX1NUU19DT01NQU5EX1JFQURZLCBOVUxMKSkgew0KPiA+ICAJ CQlkZXZfZXJyKGRldiwgIiVzKCkgdGltZW91dCBvbiBjb21tYW5kUmVhZHlcbiIsDQo+ID4gIAkJ CQlfX2Z1bmNfXyk7DQo+ID4gIAkJCXJjID0gLUVJTzsNCj4gPiBAQCAtNDA5LDcgKzQwNSw2IEBA IHN0YXRpYyBpbnQgaTJjX251dm90b25fc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpi dWYsIHNpemVfdCBsZW4pDQo+ID4gIAkJCQkJCSAgICAgICBUUE1fU1RTX0VYUEVDVCwNCj4gPiAg CQkJCQkJICAgICAgIFRQTV9TVFNfVkFMSUQgfA0KPiA+ICAJCQkJCQkgICAgICAgVFBNX1NUU19F WFBFQ1QsDQo+ID4gLQkJCQkJCSAgICAgICBjaGlwLT50aW1lb3V0X2MsDQo+ID4gIAkJCQkJCSAg ICAgICBOVUxMKTsNCj4gPiAgCQkJaWYgKHJjIDwgMCkgew0KPiA+ICAJCQkJZGV2X2VycihkZXYs ICIlcygpIHRpbWVvdXQgb24gRXhwZWN0XG4iLA0KPiA+IEBAIC00MzMsOCArNDI4LDcgQEAgc3Rh dGljIGludCBpMmNfbnV2b3Rvbl9zZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwg c2l6ZV90IGxlbikNCj4gPiAgCQlkZXZfZGJnKGRldiwgIiVzKGxhc3QpOiAlMDJ4IiwgX19mdW5j X18sIGJ1Zltjb3VudF0pOw0KPiA+ICAJCXJjID0gaTJjX251dm90b25fd2FpdF9mb3Jfc3RhdChj aGlwLA0KPiA+ICAJCQkJCSAgICAgICBUUE1fU1RTX1ZBTElEIHwgVFBNX1NUU19FWFBFQ1QsDQo+ ID4gLQkJCQkJICAgICAgIFRQTV9TVFNfVkFMSUQsDQo+ID4gLQkJCQkJICAgICAgIGNoaXAtPnRp bWVvdXRfYywgTlVMTCk7DQo+ID4gKwkJCQkJICAgICAgIFRQTV9TVFNfVkFMSUQsIE5VTEwpOw0K PiA+ICAJCWlmIChyYykgew0KPiA+ICAJCQlkZXZfZXJyKGRldiwgIiVzKCkgdGltZW91dCBvbiBF eHBlY3QgdG8gY2xlYXJcbiIsDQo+ID4gIAkJCQlfX2Z1bmNfXyk7DQo+ID4gQEAgLTQ1NiwxMiAr NDUwLDExIEBAIHN0YXRpYyBpbnQgaTJjX251dm90b25fc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNo aXAsIHU4ICpidWYsIHNpemVfdCBsZW4pDQo+ID4gIAkJcmV0dXJuIHJjOw0KPiA+ICAJfQ0KPiA+ ICAJb3JkaW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgNikpKTsNCj4gPiAt CWR1cmF0aW9uID0gdHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsNCj4g PiANCj4gPiAtCXJjID0gaTJjX251dm90b25fd2FpdF9mb3JfZGF0YV9hdmFpbChjaGlwLCBkdXJh dGlvbiwgJnByaXYtPnJlYWRfcXVldWUpOw0KPiA+ICsJcmMgPSBpMmNfbnV2b3Rvbl93YWl0X2Zv cl9kYXRhX2F2YWlsKGNoaXAsICZwcml2LT5yZWFkX3F1ZXVlKTsNCj4gPiAgCWlmIChyYykgew0K PiA+IC0JCWRldl9lcnIoZGV2LCAiJXMoKSB0aW1lb3V0IGNvbW1hbmQgZHVyYXRpb24gJWxkXG4i LA0KPiA+IC0JCQlfX2Z1bmNfXywgZHVyYXRpb24pOw0KPiA+ICsJCWRldl9lcnIoZGV2LCAiJXMo KSB0aW1lb3V0IGNvbW1hbmQgZHVyYXRpb24gJWRcbiIsDQo+ID4gKwkJCV9fZnVuY19fLCBUUE1f VU5JVkVSU0FMX1RJTUVPVVRfTVMpOw0KPiA+ICAJCWkyY19udXZvdG9uX3JlYWR5KGNoaXApOw0K PiA+ICAJCXJldHVybiByYzsNCj4gPiAgCX0NCj4gPiBAQCAtNTcyLDEyICs1NjUsNiBAQCBzdGF0 aWMgaW50IGkyY19udXZvdG9uX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQo+ID4g DQo+ID4gIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5yZWFkX3F1ZXVlKTsNCj4gPiANCj4g PiAtCS8qIERlZmF1bHQgdGltZW91dHMgKi8NCj4gPiAtCWNoaXAtPnRpbWVvdXRfYSA9IG1zZWNz X3RvX2ppZmZpZXMoVFBNX0kyQ19TSE9SVF9USU1FT1VUKTsNCj4gPiAtCWNoaXAtPnRpbWVvdXRf YiA9IG1zZWNzX3RvX2ppZmZpZXMoVFBNX0kyQ19MT05HX1RJTUVPVVQpOw0KPiA+IC0JY2hpcC0+ dGltZW91dF9jID0gbXNlY3NfdG9famlmZmllcyhUUE1fSTJDX1NIT1JUX1RJTUVPVVQpOw0KPiA+ IC0JY2hpcC0+dGltZW91dF9kID0gbXNlY3NfdG9famlmZmllcyhUUE1fSTJDX1NIT1JUX1RJTUVP VVQpOw0KPiA+IC0NCj4gPiAgCWRldl9zZXRfZHJ2ZGF0YSgmY2hpcC0+ZGV2LCBwcml2KTsNCj4g PiANCj4gPiAgCS8qDQo+ID4gQEAgLTYwNSw3ICs1OTIsNiBAQCBzdGF0aWMgaW50IGkyY19udXZv dG9uX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsDQo+ID4gIAkJCXJjID0gaTJjX251 dm90b25fd2FpdF9mb3Jfc3RhdChjaGlwLA0KPiA+ICAJCQkJCQkgICAgICAgVFBNX1NUU19DT01N QU5EX1JFQURZLA0KPiA+ICAJCQkJCQkgICAgICAgVFBNX1NUU19DT01NQU5EX1JFQURZLA0KPiA+ IC0JCQkJCQkgICAgICAgY2hpcC0+dGltZW91dF9iLA0KPiA+ICAJCQkJCQkgICAgICAgTlVMTCk7 DQo+ID4gIAkJCWlmIChyYyA9PSAwKSB7DQo+ID4gIAkJCQkvKg0KPiA+IEBAIC02MjIsNyArNjA4 LDcgQEAgc3RhdGljIGludCBpMmNfbnV2b3Rvbl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50LA0KPiA+ICAJCQkJaTJjX251dm90b25fcmVhZHkoY2hpcCk7DQo+ID4gIAkJCX0gZWxzZSB7 DQo+ID4gIAkJCQkvKg0KPiA+IC0JCQkJICogdGltZW91dF9iIHJlYWNoZWQgLSBjb21tYW5kIHdh cw0KPiA+ICsJCQkJICogdGltZW91dCByZWFjaGVkIC0gY29tbWFuZCB3YXMNCj4gPiAgCQkJCSAq IGFib3J0ZWQuIFRJUyBzaG91bGQgbm93IGJlIGluIGlkbGUgc3RhdGUgLQ0KPiA+ICAJCQkJICog b25seSBUUE1fU1RTX1ZBTElEIHNob3VsZCBiZSBzZXQNCj4gPiAgCQkJCSAqLw0KPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9uc2MuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBt X25zYy5jDQo+ID4gaW5kZXggNWQ2Y2NlNzRjZDNmLi4yY2ZlNzk0NThiZGQgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMNCj4gPiArKysgYi9kcml2ZXJzL2NoYXIv dHBtL3RwbV9uc2MuYw0KPiA+IEBAIC04NSw3ICs4NSw3IEBAIHN0YXRpYyBpbnQgd2FpdF9mb3Jf c3RhdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssIHU4IHZhbCwgdTggKiBkYXRhKQ0K PiA+ICAJLyogd2FpdCBmb3Igc3RhdHVzICovDQo+ID4gIAlzdG9wID0gamlmZmllcyArIDEwICog SFo7DQo+ID4gIAlkbyB7DQo+ID4gLQkJbXNsZWVwKFRQTV9USU1FT1VUKTsNCj4gPiArCQltc2xl ZXAoVFBNX1RJTUVPVVRfUE9MTF9NUyk7DQo+ID4gIAkJKmRhdGEgPSBpbmIocHJpdi0+YmFzZSAr IDEpOw0KPiA+ICAJCWlmICgoKmRhdGEgJiBtYXNrKSA9PSB2YWwpDQo+ID4gIAkJCXJldHVybiAw Ow0KPiA+IEBAIC0xMDksOSArMTA5LDkgQEAgc3RhdGljIGludCBuc2Nfd2FpdF9mb3JfcmVhZHko c3RydWN0IHRwbV9jaGlwICpjaGlwKQ0KPiA+ICAJCXJldHVybiAwOw0KPiA+IA0KPiA+ICAJLyog d2FpdCBmb3Igc3RhdHVzICovDQo+ID4gLQlzdG9wID0gamlmZmllcyArIDEwMDsNCj4gPiArCXN0 b3AgPSBqaWZmaWVzICsgVFBNX1VOSVZFUlNBTF9USU1FT1VUX0pJRkZJRVM7DQo+ID4gIAlkbyB7 DQo+ID4gLQkJbXNsZWVwKFRQTV9USU1FT1VUKTsNCj4gPiArCQltc2xlZXAoVFBNX1RJTUVPVVRf UE9MTF9NUyk7DQo+ID4gIAkJc3RhdHVzID0gaW5iKHByaXYtPmJhc2UgKyBOU0NfU1RBVFVTKTsN Cj4gPiAgCQlpZiAoc3RhdHVzICYgTlNDX1NUQVRVU19PQkYpDQo+ID4gIAkJCXN0YXR1cyA9IGlu Yihwcml2LT5iYXNlICsgTlNDX0RBVEEpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIv dHBtL3RwbV90aXNfY29yZS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzX2NvcmUuYw0KPiA+ IGluZGV4IGJmN2U0OWNmYTY0My4uMGE1OTJlZmIyOGM0IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvY2hhci90cG0vdHBtX3Rpc19jb3JlLmMNCj4gPiArKysgYi9kcml2ZXJzL2NoYXIvdHBtL3Rw bV90aXNfY29yZS5jDQo+ID4gQEAgLTQ5LDEwICs0OSw5IEBAIHN0YXRpYyBib29sIHdhaXRfZm9y X3RwbV9zdGF0X2NvbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCBtYXNrLA0KPiA+ICB9DQo+ ID4gDQo+ID4gIHN0YXRpYyBpbnQgd2FpdF9mb3JfdHBtX3N0YXQoc3RydWN0IHRwbV9jaGlwICpj aGlwLCB1OCBtYXNrLA0KPiA+IC0JCXVuc2lnbmVkIGxvbmcgdGltZW91dCwgd2FpdF9xdWV1ZV9o ZWFkX3QgKnF1ZXVlLA0KPiA+IC0JCWJvb2wgY2hlY2tfY2FuY2VsKQ0KPiA+ICsJCXdhaXRfcXVl dWVfaGVhZF90ICpxdWV1ZSwgYm9vbCBjaGVja19jYW5jZWwpDQo+ID4gIHsNCj4gPiAtCXVuc2ln bmVkIGxvbmcgc3RvcDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgc3RvcCwgdGltZW91dDsNCj4gPiAg CWxvbmcgcmM7DQo+ID4gIAl1OCBzdGF0dXM7DQo+ID4gIAlib29sIGNhbmNlbGVkID0gZmFsc2U7 DQo+ID4gQEAgLTYyLDggKzYxLDcgQEAgc3RhdGljIGludCB3YWl0X2Zvcl90cG1fc3RhdChzdHJ1 Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssDQo+ID4gIAlpZiAoKHN0YXR1cyAmIG1hc2spID09 IG1hc2spDQo+ID4gIAkJcmV0dXJuIDA7DQo+ID4gDQo+ID4gLQlzdG9wID0gamlmZmllcyArIHRp bWVvdXQ7DQo+ID4gLQ0KPiA+ICsJc3RvcCA9IGppZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVP VVRfSklGRklFUzsNCj4gPiAgCWlmIChjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZMQUdfSVJRKSB7 DQo+ID4gIGFnYWluOg0KPiA+ICAJCXRpbWVvdXQgPSBzdG9wIC0gamlmZmllczsNCj4gPiBAQCAt MTAyLDcgKzEwMCw3IEBAIHN0YXRpYyBpbnQgd2FpdF9mb3JfdHBtX3N0YXQoc3RydWN0IHRwbV9j aGlwICpjaGlwLCB1OCBtYXNrLA0KPiA+ICBzdGF0aWMgaW50IHdhaXRfc3RhcnR1cChzdHJ1Y3Qg dHBtX2NoaXAgKmNoaXAsIGludCBsKQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3QgdHBtX3Rpc19kYXRh ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZjaGlwLT5kZXYpOw0KPiA+IC0JdW5zaWduZWQgbG9u ZyBzdG9wID0gamlmZmllcyArIGNoaXAtPnRpbWVvdXRfYTsNCj4gPiArCXVuc2lnbmVkIGxvbmcg c3RvcCA9IGppZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUzsNCj4gPiANCj4g PiAgCWRvIHsNCj4gPiAgCQlpbnQgcmM7DQo+ID4gQEAgLTExNCw3ICsxMTIsNyBAQCBzdGF0aWMg aW50IHdhaXRfc3RhcnR1cChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGludCBsKQ0KPiA+IA0KPiA+ ICAJCWlmIChhY2Nlc3MgJiBUUE1fQUNDRVNTX1ZBTElEKQ0KPiA+ICAJCQlyZXR1cm4gMDsNCj4g PiAtCQl0cG1fbXNsZWVwKFRQTV9USU1FT1VUKTsNCj4gPiArCQl0cG1fbXNsZWVwKFRQTV9USU1F T1VUX1BPTExfTVMpOw0KPiA+ICAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkp Ow0KPiA+ICAJcmV0dXJuIC0xOw0KPiA+ICB9DQo+ID4gQEAgLTE2Myw3ICsxNjEsNyBAQCBzdGF0 aWMgaW50IHJlbGVhc2VfbG9jYWxpdHkoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBpbnQgbCkNCj4g PiANCj4gPiAgCXRwbV90aXNfd3JpdGU4KHByaXYsIFRQTV9BQ0NFU1MobCksIFRQTV9BQ0NFU1Nf QUNUSVZFX0xPQ0FMSVRZKTsNCj4gPiANCj4gPiAtCXN0b3AgPSBqaWZmaWVzICsgY2hpcC0+dGlt ZW91dF9hOw0KPiA+ICsJc3RvcCA9IGppZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklG RklFUzsNCj4gPiANCj4gPiAgCWlmIChjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZMQUdfSVJRKSB7 DQo+ID4gIGFnYWluOg0KPiA+IEBAIC0xODYsNyArMTg0LDcgQEAgc3RhdGljIGludCByZWxlYXNl X2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IGwpDQo+ID4gIAkJZG8gew0KPiA+ ICAJCQlpZiAobG9jYWxpdHlfaW5hY3RpdmUoY2hpcCwgbCkpDQo+ID4gIAkJCQlyZXR1cm4gMDsN Cj4gPiAtCQkJdHBtX21zbGVlcChUUE1fVElNRU9VVCk7DQo+ID4gKwkJCXRwbV9tc2xlZXAoVFBN X1RJTUVPVVRfUE9MTF9NUyk7DQo+ID4gIAkJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywg c3RvcCkpOw0KPiA+ICAJfQ0KPiA+ICAJcmV0dXJuIC0xOw0KPiA+IEBAIC0yMDUsNyArMjAzLDcg QEAgc3RhdGljIGludCByZXF1ZXN0X2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50 IGwpDQo+ID4gIAlpZiAocmMgPCAwKQ0KPiA+ICAJCXJldHVybiByYzsNCj4gPiANCj4gPiAtCXN0 b3AgPSBqaWZmaWVzICsgY2hpcC0+dGltZW91dF9hOw0KPiA+ICsJc3RvcCA9IGppZmZpZXMgKyBU UE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUzsNCj4gPiANCj4gPiAgCWlmIChjaGlwLT5mbGFn cyAmIFRQTV9DSElQX0ZMQUdfSVJRKSB7DQo+ID4gIGFnYWluOg0KPiA+IEBAIC0yMjcsNyArMjI1 LDcgQEAgc3RhdGljIGludCByZXF1ZXN0X2xvY2FsaXR5KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwg aW50IGwpDQo+ID4gIAkJZG8gew0KPiA+ICAJCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCwgbCkp DQo+ID4gIAkJCQlyZXR1cm4gbDsNCj4gPiAtCQkJdHBtX21zbGVlcChUUE1fVElNRU9VVCk7DQo+ ID4gKwkJCXRwbV9tc2xlZXAoVFBNX1RJTUVPVVRfUE9MTF9NUyk7DQo+ID4gIAkJfSB3aGlsZSAo dGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOw0KPiA+ICAJfQ0KPiA+ICAJcmV0dXJuIC0xOw0K PiA+IEBAIC0yNjIsMTAgKzI2MCw3IEBAIHN0YXRpYyBpbnQgZ2V0X2J1cnN0Y291bnQoc3RydWN0 IHRwbV9jaGlwICpjaGlwKQ0KPiA+ICAJdTMyIHZhbHVlOw0KPiA+IA0KPiA+ICAJLyogd2FpdCBm b3IgYnVyc3Rjb3VudCAqLw0KPiA+IC0JaWYgKGNoaXAtPmZsYWdzICYgVFBNX0NISVBfRkxBR19U UE0yKQ0KPiA+IC0JCXN0b3AgPSBqaWZmaWVzICsgY2hpcC0+dGltZW91dF9hOw0KPiA+IC0JZWxz ZQ0KPiA+IC0JCXN0b3AgPSBqaWZmaWVzICsgY2hpcC0+dGltZW91dF9kOw0KPiA+ICsJc3RvcCA9 IGppZmZpZXMgKyBUUE1fVU5JVkVSU0FMX1RJTUVPVVRfSklGRklFUzsNCj4gPiAgCWRvIHsNCj4g PiAgCQlyYyA9IHRwbV90aXNfcmVhZDMyKHByaXYsIFRQTV9TVFMocHJpdi0+bG9jYWxpdHkpLCAm dmFsdWUpOw0KPiA+ICAJCWlmIChyYyA8IDApDQo+ID4gQEAgLTI4Nyw3ICsyODIsNiBAQCBzdGF0 aWMgaW50IHJlY3ZfZGF0YShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBj b3VudCkNCj4gPiAgCXdoaWxlIChzaXplIDwgY291bnQpIHsNCj4gPiAgCQlyYyA9IHdhaXRfZm9y X3RwbV9zdGF0KGNoaXAsDQo+ID4gIAkJCQkgVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19W QUxJRCwNCj4gPiAtCQkJCSBjaGlwLT50aW1lb3V0X2MsDQo+ID4gIAkJCQkgJnByaXYtPnJlYWRf cXVldWUsIHRydWUpOw0KPiA+ICAJCWlmIChyYyA8IDApDQo+ID4gIAkJCXJldHVybiByYzsNCj4g PiBAQCAtMzQxLDcgKzMzNSw3IEBAIHN0YXRpYyBpbnQgdHBtX3Rpc19yZWN2KHN0cnVjdCB0cG1f Y2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KPiA+ICAJCWdvdG8gb3V0Ow0KPiA+ ICAJfQ0KPiA+IA0KPiA+IC0JaWYgKHdhaXRfZm9yX3RwbV9zdGF0KGNoaXAsIFRQTV9TVFNfVkFM SUQsIGNoaXAtPnRpbWVvdXRfYywNCj4gPiArCWlmICh3YWl0X2Zvcl90cG1fc3RhdChjaGlwLCBU UE1fU1RTX1ZBTElELA0KPiA+ICAJCQkJJnByaXYtPmludF9xdWV1ZSwgZmFsc2UpIDwgMCkgew0K PiA+ICAJCXNpemUgPSAtRVRJTUU7DQo+ID4gIAkJZ290byBvdXQ7DQo+ID4gQEAgLTM3NCw3ICsz NjgsNyBAQCBzdGF0aWMgaW50IHRwbV90aXNfc2VuZF9kYXRhKHN0cnVjdCB0cG1fY2hpcCAqY2hp cCwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikNCj4gPiAgCWlmICgoc3RhdHVzICYgVFBNX1NU U19DT01NQU5EX1JFQURZKSA9PSAwKSB7DQo+ID4gIAkJdHBtX3Rpc19yZWFkeShjaGlwKTsNCj4g PiAgCQlpZiAod2FpdF9mb3JfdHBtX3N0YXQNCj4gPiAtCQkgICAgKGNoaXAsIFRQTV9TVFNfQ09N TUFORF9SRUFEWSwgY2hpcC0+dGltZW91dF9iLA0KPiA+ICsJCSAgICAoY2hpcCwgVFBNX1NUU19D T01NQU5EX1JFQURZLA0KPiA+ICAJCSAgICAgJnByaXYtPmludF9xdWV1ZSwgZmFsc2UpIDwgMCkg ew0KPiA+ICAJCQlyYyA9IC1FVElNRTsNCj4gPiAgCQkJZ290byBvdXRfZXJyOw0KPiA+IEBAIC0z OTYsNyArMzkwLDcgQEAgc3RhdGljIGludCB0cG1fdGlzX3NlbmRfZGF0YShzdHJ1Y3QgdHBtX2No aXAgKmNoaXAsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pDQo+ID4gDQo+ID4gIAkJY291bnQg Kz0gYnVyc3RjbnQ7DQo+ID4gDQo+ID4gLQkJaWYgKHdhaXRfZm9yX3RwbV9zdGF0KGNoaXAsIFRQ TV9TVFNfVkFMSUQsIGNoaXAtPnRpbWVvdXRfYywNCj4gPiArCQlpZiAod2FpdF9mb3JfdHBtX3N0 YXQoY2hpcCwgVFBNX1NUU19WQUxJRCwNCj4gPiAgCQkJCQkmcHJpdi0+aW50X3F1ZXVlLCBmYWxz ZSkgPCAwKSB7DQo+ID4gIAkJCXJjID0gLUVUSU1FOw0KPiA+ICAJCQlnb3RvIG91dF9lcnI7DQo+ ID4gQEAgLTQxMyw3ICs0MDcsNyBAQCBzdGF0aWMgaW50IHRwbV90aXNfc2VuZF9kYXRhKHN0cnVj dCB0cG1fY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikNCj4gPiAgCWlmIChy YyA8IDApDQo+ID4gIAkJZ290byBvdXRfZXJyOw0KPiA+IA0KPiA+IC0JaWYgKHdhaXRfZm9yX3Rw bV9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnRpbWVvdXRfYywNCj4gPiArCWlmICh3 YWl0X2Zvcl90cG1fc3RhdChjaGlwLCBUUE1fU1RTX1ZBTElELA0KPiA+ICAJCQkJJnByaXYtPmlu dF9xdWV1ZSwgZmFsc2UpIDwgMCkgew0KPiA+ICAJCXJjID0gLUVUSU1FOw0KPiA+ICAJCWdvdG8g b3V0X2VycjsNCj4gPiBAQCAtNDU5LDcgKzQ1Myw2IEBAIHN0YXRpYyBpbnQgdHBtX3Rpc19zZW5k X21haW4oc3RydWN0IHRwbV9jaGlwICpjaGlwLCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKQ0K PiA+ICAJc3RydWN0IHRwbV90aXNfZGF0YSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmY2hpcC0+ ZGV2KTsNCj4gPiAgCWludCByYzsNCj4gPiAgCXUzMiBvcmRpbmFsOw0KPiA+IC0JdW5zaWduZWQg bG9uZyBkdXI7DQo+ID4gDQo+ID4gIAlyYyA9IHRwbV90aXNfc2VuZF9kYXRhKGNoaXAsIGJ1Ziwg bGVuKTsNCj4gPiAgCWlmIChyYyA8IDApDQo+ID4gQEAgLTQ3Myw5ICs0NjYsOCBAQCBzdGF0aWMg aW50IHRwbV90aXNfc2VuZF9tYWluKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgY29uc3QgdTggKmJ1 Ziwgc2l6ZV90IGxlbikNCj4gPiAgCWlmIChjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZMQUdfSVJR KSB7DQo+ID4gIAkJb3JkaW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgNikp KTsNCj4gPiANCj4gPiAtCQlkdXIgPSB0cG1fY2FsY19vcmRpbmFsX2R1cmF0aW9uKGNoaXAsIG9y ZGluYWwpOw0KPiA+ICAJCWlmICh3YWl0X2Zvcl90cG1fc3RhdA0KPiA+IC0JCSAgICAoY2hpcCwg VFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwgZHVyLA0KPiA+ICsJCSAgICAoY2hp cCwgVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwNCj4gPiAgCQkgICAgICZwcml2 LT5yZWFkX3F1ZXVlLCBmYWxzZSkgPCAwKSB7DQo+ID4gIAkJCXJjID0gLUVUSU1FOw0KPiA+ICAJ CQlnb3RvIG91dF9lcnI7DQo+ID4gQEAgLTUxMCw0OCArNTAyLDYgQEAgc3RhdGljIGludCB0cG1f dGlzX3NlbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgbGVuKQ0KPiA+ ICAJcmV0dXJuIHJjOw0KPiA+ICB9DQo+ID4gDQo+ID4gLXN0cnVjdCB0aXNfdmVuZG9yX3RpbWVv dXRfb3ZlcnJpZGUgew0KPiA+IC0JdTMyIGRpZF92aWQ7DQo+ID4gLQl1bnNpZ25lZCBsb25nIHRp bWVvdXRfdXNbNF07DQo+ID4gLX07DQo+ID4gLQ0KPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHRp c192ZW5kb3JfdGltZW91dF9vdmVycmlkZSB2ZW5kb3JfdGltZW91dF9vdmVycmlkZXNbXSA9IHsN Cj4gPiAtCS8qIEF0bWVsIDMyMDQgKi8NCj4gPiAtCXsgMHgzMjA0MTExNCwgeyAoVElTX1NIT1JU X1RJTUVPVVQqMTAwMCksIChUSVNfTE9OR19USU1FT1VUKjEwMDApLA0KPiA+IC0JCQkoVElTX1NI T1JUX1RJTUVPVVQqMTAwMCksIChUSVNfU0hPUlRfVElNRU9VVCoxMDAwKSB9IH0sDQo+ID4gLX07 DQo+ID4gLQ0KPiA+IC1zdGF0aWMgYm9vbCB0cG1fdGlzX3VwZGF0ZV90aW1lb3V0cyhzdHJ1Y3Qg dHBtX2NoaXAgKmNoaXAsDQo+ID4gLQkJCQkgICAgdW5zaWduZWQgbG9uZyAqdGltZW91dF9jYXAp DQo+ID4gLXsNCj4gPiAtCXN0cnVjdCB0cG1fdGlzX2RhdGEgKnByaXYgPSBkZXZfZ2V0X2RydmRh dGEoJmNoaXAtPmRldik7DQo+ID4gLQlpbnQgaSwgcmM7DQo+ID4gLQl1MzIgZGlkX3ZpZDsNCj4g PiAtDQo+ID4gLQlpZiAoY2hpcC0+b3BzLT5jbGtfZW5hYmxlICE9IE5VTEwpDQo+ID4gLQkJY2hp cC0+b3BzLT5jbGtfZW5hYmxlKGNoaXAsIHRydWUpOw0KPiA+IC0NCj4gPiAtCXJjID0gdHBtX3Rp c19yZWFkMzIocHJpdiwgVFBNX0RJRF9WSUQoMCksICZkaWRfdmlkKTsNCj4gPiAtCWlmIChyYyA8 IDApDQo+ID4gLQkJZ290byBvdXQ7DQo+ID4gLQ0KPiA+IC0JZm9yIChpID0gMDsgaSAhPSBBUlJB WV9TSVpFKHZlbmRvcl90aW1lb3V0X292ZXJyaWRlcyk7IGkrKykgew0KPiA+IC0JCWlmICh2ZW5k b3JfdGltZW91dF9vdmVycmlkZXNbaV0uZGlkX3ZpZCAhPSBkaWRfdmlkKQ0KPiA+IC0JCQljb250 aW51ZTsNCj4gPiAtCQltZW1jcHkodGltZW91dF9jYXAsIHZlbmRvcl90aW1lb3V0X292ZXJyaWRl c1tpXS50aW1lb3V0X3VzLA0KPiA+IC0JCSAgICAgICBzaXplb2YodmVuZG9yX3RpbWVvdXRfb3Zl cnJpZGVzW2ldLnRpbWVvdXRfdXMpKTsNCj4gPiAtCQlyYyA9IHRydWU7DQo+ID4gLQl9DQo+ID4g LQ0KPiA+IC0JcmMgPSBmYWxzZTsNCj4gPiAtDQo+ID4gLW91dDoNCj4gPiAtCWlmIChjaGlwLT5v cHMtPmNsa19lbmFibGUgIT0gTlVMTCkNCj4gPiAtCQljaGlwLT5vcHMtPmNsa19lbmFibGUoY2hp cCwgZmFsc2UpOw0KPiA+IC0NCj4gPiAtCXJldHVybiByYzsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAg LyoNCj4gPiAgICogRWFybHkgcHJvYmluZyBmb3IgaVRQTSB3aXRoIFNUU19EQVRBX0VYUEVDVCBm bGF3Lg0KPiA+ICAgKiBUcnkgc2VuZGluZyBjb21tYW5kIHdpdGhvdXQgaXRwbSBmbGFnIHNldCBh bmQgaWYgdGhhdA0KPiA+IEBAIC04NDIsNyArNzkyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB0 cG1fY2xhc3Nfb3BzIHRwbV90aXMgPSB7DQo+ID4gIAkucmVjdiA9IHRwbV90aXNfcmVjdiwNCj4g PiAgCS5zZW5kID0gdHBtX3Rpc19zZW5kLA0KPiA+ICAJLmNhbmNlbCA9IHRwbV90aXNfcmVhZHks DQo+ID4gLQkudXBkYXRlX3RpbWVvdXRzID0gdHBtX3Rpc191cGRhdGVfdGltZW91dHMsDQo+ID4g IAkucmVxX2NvbXBsZXRlX21hc2sgPSBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElE LA0KPiA+ICAJLnJlcV9jb21wbGV0ZV92YWwgPSBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RT X1ZBTElELA0KPiA+ICAJLnJlcV9jYW5jZWxlZCA9IHRwbV90aXNfcmVxX2NhbmNlbGVkLA0KPiA+ IEBAIC04NzMsMTEgKzgyMiw2IEBAIGludCB0cG1fdGlzX2NvcmVfaW5pdChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCB0cG1fdGlzX2RhdGEgKnByaXYsIGludCBpcnEsDQo+ID4gDQo+ID4gIAlj aGlwLT5od3JuZy5xdWFsaXR5ID0gcHJpdi0+cm5nX3F1YWxpdHk7DQo+ID4gDQo+ID4gLQkvKiBN YXhpbXVtIHRpbWVvdXRzICovDQo+ID4gLQljaGlwLT50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZm aWVzKFRJU19USU1FT1VUX0FfTUFYKTsNCj4gPiAtCWNoaXAtPnRpbWVvdXRfYiA9IG1zZWNzX3Rv X2ppZmZpZXMoVElTX1RJTUVPVVRfQl9NQVgpOw0KPiA+IC0JY2hpcC0+dGltZW91dF9jID0gbXNl Y3NfdG9famlmZmllcyhUSVNfVElNRU9VVF9DX01BWCk7DQo+ID4gLQljaGlwLT50aW1lb3V0X2Qg PSBtc2Vjc190b19qaWZmaWVzKFRJU19USU1FT1VUX0RfTUFYKTsNCj4gPiAgCXByaXYtPnBoeV9v cHMgPSBwaHlfb3BzOw0KPiA+ICAJZGV2X3NldF9kcnZkYXRhKCZjaGlwLT5kZXYsIHByaXYpOw0K PiA+IA0KPiA+IEBAIC05NjcsMTYgKzkxMSw2IEBAIGludCB0cG1fdGlzX2NvcmVfaW5pdChzdHJ1 Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0cG1fdGlzX2RhdGEgKnByaXYsIGludCBpcnEsDQo+ID4g IAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5yZWFkX3F1ZXVlKTsNCj4gPiAgCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJnByaXYtPmludF9xdWV1ZSk7DQo+ID4gIAlpZiAoaXJxICE9IC0xKSB7DQo+ ID4gLQkJLyogQmVmb3JlIGRvaW5nIGlycSB0ZXN0aW5nIGlzc3VlIGEgY29tbWFuZCB0byB0aGUg VFBNIGluIHBvbGxpbmcgbW9kZQ0KPiA+IC0JCSAqIHRvIG1ha2Ugc3VyZSBpdCB3b3Jrcy4gTWF5 IGFzIHdlbGwgdXNlIHRoYXQgY29tbWFuZCB0byBzZXQgdGhlDQo+ID4gLQkJICogcHJvcGVyIHRp bWVvdXRzIGZvciB0aGUgZHJpdmVyLg0KPiA+IC0JCSAqLw0KPiA+IC0JCWlmICh0cG1fZ2V0X3Rp bWVvdXRzKGNoaXApKSB7DQo+ID4gLQkJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGdldCBUUE0g dGltZW91dHMgYW5kIGR1cmF0aW9uc1xuIik7DQo+ID4gLQkJCXJjID0gLUVOT0RFVjsNCj4gPiAt CQkJZ290byBvdXRfZXJyOw0KPiA+IC0JCX0NCj4gPiAtDQo+ID4gIAkJaWYgKGlycSkgew0KPiA+ ICAJCQl0cG1fdGlzX3Byb2JlX2lycV9zaW5nbGUoY2hpcCwgaW50bWFzaywgSVJRRl9TSEFSRUQs DQo+ID4gIAkJCQkJCSBpcnEpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3hl bi10cG1mcm9udC5jIGIvZHJpdmVycy9jaGFyL3RwbS94ZW4tdHBtZnJvbnQuYw0KPiA+IGluZGV4 IGIxNTBmODdmMzhmNS4uZmE5YTFjOTRjMTJmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvY2hh ci90cG0veGVuLXRwbWZyb250LmMNCj4gPiArKysgYi9kcml2ZXJzL2NoYXIvdHBtL3hlbi10cG1m cm9udC5jDQo+ID4gQEAgLTU2LDEwICs1Niw5IEBAIHN0YXRpYyBib29sIHdhaXRfZm9yX3RwbV9z dGF0X2NvbmQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCBtYXNrLA0KPiA+ICB9DQo+ID4gDQo+ ID4gIHN0YXRpYyBpbnQgd2FpdF9mb3JfdHBtX3N0YXQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1 OCBtYXNrLA0KPiA+IC0JCXVuc2lnbmVkIGxvbmcgdGltZW91dCwgd2FpdF9xdWV1ZV9oZWFkX3Qg KnF1ZXVlLA0KPiA+IC0JCWJvb2wgY2hlY2tfY2FuY2VsKQ0KPiA+ICsJCXdhaXRfcXVldWVfaGVh ZF90ICpxdWV1ZSwgYm9vbCBjaGVja19jYW5jZWwpDQo+ID4gIHsNCj4gPiAtCXVuc2lnbmVkIGxv bmcgc3RvcDsNCj4gPiArCXVuc2lnbmVkIGxvbmcgc3RvcCwgdGltZW91dDsNCj4gPiAgCWxvbmcg cmM7DQo+ID4gIAl1OCBzdGF0dXM7DQo+ID4gIAlib29sIGNhbmNlbGVkID0gZmFsc2U7DQo+ID4g QEAgLTY5LDcgKzY4LDcgQEAgc3RhdGljIGludCB3YWl0X2Zvcl90cG1fc3RhdChzdHJ1Y3QgdHBt X2NoaXAgKmNoaXAsIHU4IG1hc2ssDQo+ID4gIAlpZiAoKHN0YXR1cyAmIG1hc2spID09IG1hc2sp DQo+ID4gIAkJcmV0dXJuIDA7DQo+ID4gDQo+ID4gLQlzdG9wID0gamlmZmllcyArIHRpbWVvdXQ7 DQo+ID4gKwlzdG9wID0gamlmZmllcyArIFRQTV9VTklWRVJTQUxfVElNRU9VVF9KSUZGSUVTOw0K PiA+IA0KPiA+ICAJaWYgKGNoaXAtPmZsYWdzICYgVFBNX0NISVBfRkxBR19JUlEpIHsNCj4gPiAg YWdhaW46DQo+ID4gQEAgLTkxLDcgKzkwLDcgQEAgc3RhdGljIGludCB3YWl0X2Zvcl90cG1fc3Rh dChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssDQo+ID4gIAkJfQ0KPiA+ICAJfSBlbHNl IHsNCj4gPiAgCQlkbyB7DQo+ID4gLQkJCXRwbV9tc2xlZXAoVFBNX1RJTUVPVVQpOw0KPiA+ICsJ CQl0cG1fbXNsZWVwKFRQTV9USU1FT1VUX1BPTExfTVMpOw0KPiA+ICAJCQlzdGF0dXMgPSBjaGlw LT5vcHMtPnN0YXR1cyhjaGlwKTsNCj4gPiAgCQkJaWYgKChzdGF0dXMgJiBtYXNrKSA9PSBtYXNr KQ0KPiA+ICAJCQkJcmV0dXJuIDA7DQo+ID4gQEAgLTE0MSw3ICsxNDAsNiBAQCBzdGF0aWMgaW50 IHZ0cG1fc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBjb3VudCkN Cj4gPiAgCXVuc2lnbmVkIGludCBvZmZzZXQgPSBzaHJfZGF0YV9vZmZzZXQoc2hyKTsNCj4gPiAN Cj4gPiAgCXUzMiBvcmRpbmFsOw0KPiA+IC0JdW5zaWduZWQgbG9uZyBkdXJhdGlvbjsNCj4gPiAN Cj4gPiAgCWlmIChvZmZzZXQgPiBQQUdFX1NJWkUpDQo+ID4gIAkJcmV0dXJuIC1FSU5WQUw7DQo+ ID4gQEAgLTE1MCw3ICsxNDgsNyBAQCBzdGF0aWMgaW50IHZ0cG1fc2VuZChzdHJ1Y3QgdHBtX2No aXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBjb3VudCkNCj4gPiAgCQlyZXR1cm4gLUVJTlZBTDsN Cj4gPiANCj4gPiAgCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgYW55IGV4aXN0aW5nIGNvbW1h bmQgb3IgY2FuY2VsbGF0aW9uICovDQo+ID4gLQlpZiAod2FpdF9mb3JfdHBtX3N0YXQoY2hpcCwg VlRQTV9TVEFUVVNfSURMRSwgY2hpcC0+dGltZW91dF9jLA0KPiA+ICsJaWYgKHdhaXRfZm9yX3Rw bV9zdGF0KGNoaXAsIFZUUE1fU1RBVFVTX0lETEUsDQo+ID4gIAkJCSZwcml2LT5yZWFkX3F1ZXVl LCB0cnVlKSA8IDApIHsNCj4gPiAgCQl2dHBtX2NhbmNlbChjaGlwKTsNCj4gPiAgCQlyZXR1cm4g LUVUSU1FOw0KPiA+IEBAIC0xNjQsOSArMTYyLDggQEAgc3RhdGljIGludCB2dHBtX3NlbmQoc3Ry dWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgY291bnQpDQo+ID4gIAlub3RpZnlf cmVtb3RlX3ZpYV9ldnRjaG4ocHJpdi0+ZXZ0Y2huKTsNCj4gPiANCj4gPiAgCW9yZGluYWwgPSBi ZTMyX3RvX2NwdSgoKHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyKilidWYpLT5vcmRpbmFsKTsNCj4g PiAtCWR1cmF0aW9uID0gdHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsN Cj4gPiANCj4gPiAtCWlmICh3YWl0X2Zvcl90cG1fc3RhdChjaGlwLCBWVFBNX1NUQVRVU19JRExF LCBkdXJhdGlvbiwNCj4gPiArCWlmICh3YWl0X2Zvcl90cG1fc3RhdChjaGlwLCBWVFBNX1NUQVRV U19JRExFLA0KPiA+ICAJCQkmcHJpdi0+cmVhZF9xdWV1ZSwgdHJ1ZSkgPCAwKSB7DQo+ID4gIAkJ LyogZ290IGEgc2lnbmFsIG9yIHRpbWVvdXQsIHRyeSB0byBjYW5jZWwgKi8NCj4gPiAgCQl2dHBt X2NhbmNlbChjaGlwKTsNCj4gPiBAQCAtMTg3LDcgKzE4NCw3IEBAIHN0YXRpYyBpbnQgdnRwbV9y ZWN2KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQ0KPiA+ICAJ CXJldHVybiAtRUNBTkNFTEVEOw0KPiA+IA0KPiA+ICAJLyogSW4gdGhlb3J5IHRoZSB3YWl0IGF0 IHRoZSBlbmQgb2YgX3NlbmQgbWFrZXMgdGhpcyBvbmUgdW5uZWNlc3NhcnkgKi8NCj4gPiAtCWlm ICh3YWl0X2Zvcl90cG1fc3RhdChjaGlwLCBWVFBNX1NUQVRVU19SRVNVTFQsIGNoaXAtPnRpbWVv dXRfYywNCj4gPiArCWlmICh3YWl0X2Zvcl90cG1fc3RhdChjaGlwLCBWVFBNX1NUQVRVU19SRVNV TFQsDQo+ID4gIAkJCSZwcml2LT5yZWFkX3F1ZXVlLCB0cnVlKSA8IDApIHsNCj4gPiAgCQl2dHBt X2NhbmNlbChjaGlwKTsNCj4gPiAgCQlyZXR1cm4gLUVUSU1FOw0KPiANCg==