Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6440374imu; Wed, 30 Jan 2019 14:59:09 -0800 (PST) X-Google-Smtp-Source: ALg8bN51EuG/FJotOJuDuIDYsYMq5OSiC0/InAR2JDJ5rGWZj5V1znGwIAZDCdi9N+wWWT24rUGU X-Received: by 2002:a17:902:8d94:: with SMTP id v20mr32083462plo.194.1548889149798; Wed, 30 Jan 2019 14:59:09 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548889149; cv=none; d=google.com; s=arc-20160816; b=0ag0c3EFH3ym7GvyCmRdfRtSA6vAYQg8aToRT7ltQqtMBXwBuX09eq893aA3FHmLk7 z9RemiMaEjUjgOGN4MCX5szQWuuIKVLI+ArvfoKkZwzw51m8tu0FwmoGzacKa46qESBL CUIMI9dLUQXaW4trmkp/dLlZ2RXpbm4wv3Mvis+7ORb1uUmsNuudW7MbhHMHRNz9wwjx i8SxxKqW97iEWSc9i8vvBIDSk8hvmilkyVB/CqBYnMW5kJd4VveaDIPOlSabicyoNh/P m8NPorD0lhth/n5KoDMvACQxL+KpT88PtSvpzD1D6yJz4VJwMbAU0UZ2p1+1QC6Zk+SW EbZQ== 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-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=lDv8CqvSELNkjDRFeroQYk+kzPA8DpXJjXdjp9v1erI=; b=Z2vJSnKm81tNmt0OI5hMZrB9p7YoqF2Q+6zABPttoiqCz126SjW3KtCSxPkkByap3/ Tmv/wuCelTRT+oQsuoIIDE7CvyhTR7jxIap/kCZngReeMzLMQ8bsdaAVj2rFR1lsOxa4 d/1awSzJktsI3OPFhyKBodN2KVF1QlvAz06UEupT/lUgfCfGPAKz/+gIoCtAArLHyy7F L+5GJW9/3Ql5f0S83fO2RgC1vx5E6J3SWi+IEEMlr+DLU98V/D0QrWmYvMgYFTMFhwWY 7XuzWo44pRcuTAt3miSOghAOJNQrvBK0pajoScg4MUVjrEMeFQbiV3xZchjxO3hUMXUp aFvQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@Mellanox.com header.s=selector1 header.b=t6IZLtI6; 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=mellanox.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b10si2818589plz.233.2019.01.30.14.58.54; Wed, 30 Jan 2019 14:59:09 -0800 (PST) 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=@Mellanox.com header.s=selector1 header.b=t6IZLtI6; 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=mellanox.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387795AbfA3Ur7 (ORCPT + 99 others); Wed, 30 Jan 2019 15:47:59 -0500 Received: from mail-eopbgr80075.outbound.protection.outlook.com ([40.107.8.75]:20128 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726531AbfA3Ur7 (ORCPT ); Wed, 30 Jan 2019 15:47:59 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lDv8CqvSELNkjDRFeroQYk+kzPA8DpXJjXdjp9v1erI=; b=t6IZLtI6hXi9PjfV1bdB7DsTIKRnK5FezOFOiPSu0EP7TZqZi1XIa93OdkRYjb7Pa7ro7ZeFiFntN3JqaT7m5Y1T7+FEkcgldr3ztomYxGe/HjpWUEO607Bec/gs/6etXWxMSXdbwE2i9HtOzAq5CW+nraFftTLyqwYpWCTpeto= Received: from DB6PR05MB3223.eurprd05.prod.outlook.com (10.175.232.149) by DB6PR05MB4774.eurprd05.prod.outlook.com (10.168.25.13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1580.16; Wed, 30 Jan 2019 20:47:48 +0000 Received: from DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::d935:9a6c:c7a3:1320]) by DB6PR05MB3223.eurprd05.prod.outlook.com ([fe80::d935:9a6c:c7a3:1320%2]) with mapi id 15.20.1580.017; Wed, 30 Jan 2019 20:47:48 +0000 From: Liming Sun To: Andy Shevchenko CC: Andy Shevchenko , Darren Hart , Vadim Pasternak , David Woods , Platform Driver , Linux Kernel Mailing List Subject: RE: [PATCH v1 1/1] platform/mellanox: Add bootctl driver for Mellanox BlueField Soc Thread-Topic: [PATCH v1 1/1] platform/mellanox: Add bootctl driver for Mellanox BlueField Soc Thread-Index: AQHUuBWSgorN9Oha0kyXFJVXsER32KXGzLEAgAE3meA= Date: Wed, 30 Jan 2019 20:47:48 +0000 Message-ID: References: <0b74e9ad12360b56bc0a3c2ca972798c424f2610.1548790896.git.lsun@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=lsun@mellanox.com; x-originating-ip: [216.156.69.42] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;DB6PR05MB4774;6:kj8PFKv3uwkD/aSDewVtHZPEQeDm572IcdeYJG9AEvNlK+k/5vCniWYwx8rQh3QUtq4KnVMdHFDI8d3HuEhqKGh8nEDf9oSIupDr0Hrbx12F+7KYCmsBAAq2OI/X7hdmaokOSd/dx7Rnp3ts8wUeVuNFx33wa0ubSTQUblu8wAOb1msIZmInCa15M3i4iyyCvngbJe0CpKPmGqEmpbcb5As5DvWPvSAWGmCU8ZSD7R2FSvMDiYFz+nNdt62h/pzHFLQieCoI722zzDanlStIS3yXIFK8DSULpNCW4AV9HrCj+0JalP/0D51/+sSRrJaOnMU3AY4k7ljPN2gLQPKjYLJT/+WKM3XSqa/Fda3qVnwXssjgYDK4O6knTjEyLw5e32yezTBgRgLXKROjlSfPdoaSVe30GAq4uKdpTswpAv6I8qu/n0e0cG2BkCSVcmQPW24ztq51Q5f/fIXrObgL6g==;5:ghgJPKbJrDGxkI9rS7qzNVsZ/F6wIx0qYYTdRrd6pLVfLYUgpdX56nOoZeMb81qSniT8YFIE+itelH1p+APMdM78TaCTxOtKPkmEtrgdTBAf0hjq3Swu+X0lCghFRJu6BCDjILVqHGGog4ecrKgwr0YNvT2zAPPrtwfjrXJbTRM9PAQ+7Eu6jL37hw7/AUlD9uUrlEQIwDSHXZumYWjXJw==;7:ImR6mMUbjj2yH/3+z3HQ9Pc+g3eoEudnoI/ajGUa7B9hUoueez1MjCK6/HzVlmJhMcLPX4AUOz06mb2jQn3tNlLFv8GaElr7Ho4ChINuq7goauvIbOfpub98WMwVDORRmGR6+eZLPxFQBOtlGkI1LQ== x-ms-office365-filtering-correlation-id: 22e2170b-2de3-4766-2ed4-08d686f43212 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020);SRVR:DB6PR05MB4774; x-ms-traffictypediagnostic: DB6PR05MB4774: x-microsoft-antispam-prvs: x-forefront-prvs: 0933E9FD8D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(136003)(39860400002)(346002)(376002)(366004)(396003)(199004)(189003)(13464003)(51914003)(11346002)(53546011)(446003)(106356001)(3846002)(6116002)(2906002)(6506007)(486006)(8676002)(186003)(97736004)(102836004)(26005)(71190400001)(305945005)(71200400001)(7736002)(6916009)(74316002)(476003)(81166006)(86362001)(81156014)(478600001)(8936002)(14454004)(66066001)(68736007)(14444005)(229853002)(53946003)(53936002)(316002)(25786009)(39060400002)(9686003)(4326008)(54906003)(99286004)(6246003)(105586002)(55016002)(33656002)(7696005)(30864003)(256004)(76176011)(6436002)(21314003);DIR:OUT;SFP:1101;SCL:1;SRVR:DB6PR05MB4774;H:DB6PR05MB3223.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 1UfiwmlQTZJj8ijsJxzAuAm0jPviyb6DsOtoenV+2kcF4IpLk/Qw+KnSXKz23Ik7K80av858tjjAD2tuS988ouL0Z9NmAwFrsQup/yW4Sggfa7JtjmbR7ILYJEGWnlJK9KjfEiWB3YccQj8m17vI+wYLoAHqNZSNubvs4Q39T9mC4r3bQZQwj3ErcXAtebqm6UX58KMBWOhW6IdC1+wh6l8VU8jIbTh2j9xHvGs7C78mcITAdgeF1Z/OzhDlact/O1FOQzITPiqA5SRCzHKHR6+MM2U3CViNQvCpwGKm1tDi5A6IopQa7nkM283lOSQYjUikN9uxLb7JNjXgb74v9iQrx+Upg/ECOTHNGL16kvMsAngxJmOcn+NtZNBUqGVy6ZIPnE+AzQAXJhrdstsbZfZ240DTUExqeGQv/7Z2ip8= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 22e2170b-2de3-4766-2ed4-08d686f43212 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2019 20:47:48.7847 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR05MB4774 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org VGhhbmtzIEFuZHkgZm9yIHRoZSBjb21tZW50cyEgUGxlYXNlIGFsc28gc2VlIG15IHJlc3BvbnNl IGlubGluZS4NCg0KSSBkbyBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgdGhlICJyZXR1cm4gdmFsdWUg c2hhZG93IGFuIGVycm9yIiBjb21tZW50LiBDb3VsZCB5b3UgaGVscCB0YWtlIGEgbG9vayBpZiBJ IHVuZGVyc3RhbmQgaXQgY29ycmVjdGx5Pw0KDQpSZWdhcmRzLA0KTGltaW5nDQogDQo+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2 Y2hlbmtvQGdtYWlsLmNvbT4NCj4gU2VudDogVHVlc2RheSwgSmFudWFyeSAyOSwgMjAxOSA1OjAz IFBNDQo+IFRvOiBMaW1pbmcgU3VuIDxsc3VuQG1lbGxhbm94LmNvbT4NCj4gQ2M6IEFuZHkgU2hl dmNoZW5rbyA8YW5keUBpbmZyYWRlYWQub3JnPjsgRGFycmVuIEhhcnQgPGR2aGFydEBpbmZyYWRl YWQub3JnPjsgVmFkaW0gUGFzdGVybmFrIDx2YWRpbXBAbWVsbGFub3guY29tPjsgRGF2aWQNCj4g V29vZHMgPGR3b29kc0BtZWxsYW5veC5jb20+OyBQbGF0Zm9ybSBEcml2ZXIgPHBsYXRmb3JtLWRy aXZlci14ODZAdmdlci5rZXJuZWwub3JnPjsgTGludXggS2VybmVsIE1haWxpbmcgTGlzdCA8bGlu dXgtDQo+IGtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEg MS8xXSBwbGF0Zm9ybS9tZWxsYW5veDogQWRkIGJvb3RjdGwgZHJpdmVyIGZvciBNZWxsYW5veCBC bHVlRmllbGQgU29jDQo+IA0KPiBPbiBUdWUsIEphbiAyOSwgMjAxOSBhdCAxMDo1OSBQTSBMaW1p bmcgU3VuIDxsc3VuQG1lbGxhbm94LmNvbT4gd3JvdGU6DQo+ID4NCj4gPiBUaGlzIGNvbW1pdCBh ZGRzIHRoZSBib290Y3RsIHBsYXRmb3JtIGRyaXZlciBmb3IgTWVsbGFub3ggQmx1ZUZpZWxkDQo+ ID4gU29jLCB3aGljaCBjb250cm9scyB0aGUgZU1NQyBib290IHBhcnRpdGlvbiBzd2FwcGluZyBh bmQgcmVsYXRlZA0KPiA+IHdhdGNoZG9nIGNvbmZpZ3VyYXRpb24uDQo+IA0KPiBUaGFua3MgZm9y IHRoZSBwYXRjaC4NCj4gDQo+IE15IGNvbW1lbnRzIGJlbG93Lg0KPiANCj4gRmlyc3Qgb2YgYWxs LCBpcyBpdCBhIHJlYWwgd2F0Y2hkb2cgd2l0aCBhIGRyaXZlcj8gSSB0aGluayB3YXRjaGRvZyBp bg0KPiB0aGF0IGNhc2Ugc2hvdWxkIGJlIHNldCB1cCB0aHJvdWdoIHN0YW5kYXJkIHdhdGNoZG9n IGZhY2lsaXRpZXMuDQoNClRoaXMgaXMgbm90IGEgd2F0Y2hkb2cgZHJpdmVyIGl0c2VsZi4gSW5z dGVhZCwgaXQgcHJvdmlkZXMgaW50ZXJmYWNlIHRvIA0KdXNlci1zcGFjZSBhbmQgdXNlIEFSTSBT TUMgY2FsbHMgdG8gQVRGIHRvIGNvbmZpZ3VyZSByZWdpc3RlcnMgYW5kDQp3YXRjaGRvZy4gSSds bCB1cGRhdGUgdGhlIGNvbW1pdCBtZXNzYWdlIGluIHYyIHRvIGNsYXJpZnkgaXQuDQoNCj4gDQo+ ID4gUmV2aWV3ZWQtYnk6IERhdmlkIFdvb2RzIDxkd29vZHNAbWVsbGFub3guY29tPg0KPiANCj4g QXMgZm9yIE1lbGxhbm94IHRlYW0gSSB3b3VsZCByZWNvbW1lbmQgdG8gdGFrZSB0aGlzIHJldmll dyBhcyBmZXcNCj4gYmFzaWNzIG9mIGtlcm5lbCBwcm9ncmFtbWluZyBzdHlsZSBhbmQgc29tZSBz dGFuZGFyZCBwcmFjdGljZXMuDQoNClRoYW5rcyENCg0KPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBM aW1pbmcgU3VuIDxsc3VuQG1lbGxhbm94LmNvbT4NCj4gDQo+ID4gK2NvbmZpZyBNTFhCRl9CT09U Q1RMDQo+ID4gKyAgICAgICB0cmlzdGF0ZSAiTWVsbGFub3ggQmx1ZUZpZWxkIEZpcm13YXJlIEJv b3QgQ29udHJvbCBkcml2ZXIiDQo+ID4gKyAgICAgICBkZXBlbmRzIG9uIEFSTTY0DQo+IA0KPiA+ ICsgICAgICAgZGVmYXVsdCBtDQo+IA0KPiBXaHk/IFdoYXQgd291bGQgaGFwcGVuIGlmIHVzZXIg Y2hvb3NlcyBuPw0KDQpXaWxsIHJlbW92ZSB0aGUgIiBkZWZhdWx0IG0iIGluIHYyLg0KDQo+IA0K PiA+ICsgICAgICAgaGVscA0KPiA+ICsgICAgICAgICAgVGhlIE1lbGxhbm94IEJsdWVGaWVsZCBm aXJtd2FyZSBpbXBsZW1lbnRzIGZ1bmN0aW9uYWxpdHkgdG8NCj4gPiArICAgICAgICAgIHJlcXVl c3Qgc3dhcHBpbmcgdGhlIHByaW1hcnkgYW5kIGFsdGVybmF0ZSBlTU1DIGJvb3QNCj4gPiArICAg ICAgICAgIHBhcnRpdGlvbiwgYW5kIHRvIHNldCB1cCBhIHdhdGNoZG9nIHRoYXQgY2FuIHVuZG8g dGhhdCBzd2FwDQo+ID4gKyAgICAgICAgICBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IGJvb3QgdXAg Y29ycmVjdGx5LiAgVGhpcyBkcml2ZXINCj4gPiArICAgICAgICAgIHByb3ZpZGVzIHN5c2ZzIGFj Y2VzcyB0byB0aGUgZmlybXdhcmUsIHRvIGJlIHVzZWQgaW4NCj4gPiArICAgICAgICAgIGNvbmp1 bmN0aW9uIHdpdGggdGhlIGVNTUMgZGV2aWNlIGRyaXZlciB0byBkbyBhbnkgbmVjZXNzYXJ5DQo+ ID4gKyAgICAgICAgICBpbml0aWFsIHN3YXAgb2YgdGhlIGJvb3QgcGFydGl0aW9uLg0KPiANCj4g PiArc3RydWN0IG1seGJmX2Jvb3RjdGxfbmFtZSB7DQo+ID4gKyAgICAgICBpbnQgdmFsdWU7DQo+ ID4gKyAgICAgICBjb25zdCBjaGFyIG5hbWVbMTJdOw0KPiANCj4gQ2FuJ3Qgd2UgZG8gc2ltcGxl DQo+IA0KPiBjb25zdCBjaGFyICpuYW1lOw0KPiANCj4gPw0KPiANCj4gV2h5IGRvIHdlIG5lZWQg dGhlIGxpbWl0YXRpb24uIFdoeSBpcyBpdCBoYXJkIGNvZGVkIGxpa2UgdGhpcz8NCg0KSSBkb24n dCBzZWUgYW55IHJlYXNvbiB0byBoYXJkY29kZSBpdC4gV2lsbCB1cGRhdGUgaXQgaW4gdjIgYXMg c3VnZ2VzdGVkLg0KDQo+IA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBtbHhi Zl9ib290Y3RsX25hbWUgYm9vdF9uYW1lc1tdID0gew0KPiA+ICsgICAgICAgeyBNTFhCRl9CT09U Q1RMX0VYVEVSTkFMLCAgICAgICAiZXh0ZXJuYWwiICAgICAgfSwNCj4gPiArICAgICAgIHsgTUxY QkZfQk9PVENUTF9FTU1DLCAgICAgICAgICAgImVtbWMiICAgICAgICAgIH0sDQo+ID4gKyAgICAg ICB7IE1MTlhfQk9PVENUTF9TV0FQX0VNTUMsICAgICAgICJzd2FwX2VtbWMiICAgICB9LA0KPiA+ ICsgICAgICAgeyBNTFhCRl9CT09UQ1RMX0VNTUNfTEVHQUNZLCAgICAiZW1tY19sZWdhY3kiICAg fSwNCj4gPiArICAgICAgIHsgTUxYQkZfQk9PVENUTF9OT05FLCAgICAgICAgICAgIm5vbmUiICAg ICAgICAgIH0sDQo+IA0KPiA+ICsgICAgICAgeyAtMSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIiAgICAgICAgICAgICAgfQ0KPiANCj4gLTEgaXMgdXN1YWxseSBhIGJhZCBpZGVhIGZvciB0 ZXJtaW5hdG9yLiBJdCdzIG5vdCBpbiBhbGlnbiB3aXRoIG1hbnkNCj4gb3RoZXIgc3RydWN0dXJl cyB3aGljaCByZXF1aXJlIHRlcm1pbmF0b3IuDQoNCldpbGwgdXBkYXRlIGluIHYyIHRvIHJlbW92 ZSB0aGUgdGVybWluYXRvciBhbmQgdXNlIEFSUkFZX1NJWkUoKQ0KdG8gbG9vcCBpdCBpbnN0ZWFk Lg0KDQo+IA0KPiA+ICt9Ow0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBjaGFyIG1seGJmX2Jvb3Rj dGxfbGlmZWN5Y2xlX3N0YXRlc1tdWzE2XSA9IHsNCj4gDQo+IHN0YXRpYyBjb25zdCBjaGFyICog Y29uc3QgLi4uID8NCg0KV2lsbCB1cGRhdGUgaXQgaW4gdjIuDQoNCj4gDQo+ID4gKyAgICAgICBb MF0gPSAic29mdF9ub25fc2VjdXJlIiwNCj4gPiArICAgICAgIFsxXSA9ICJzZWN1cmUiLA0KPiA+ ICsgICAgICAgWzJdID0gImhhcmRfbm9uX3NlY3VyZSIsDQo+ID4gKyAgICAgICBbM10gPSAicm1h IiwNCj4gPiArfTsNCj4gDQo+ID4gKy8qIFN5bnRhY3RpYyBzdWdhciB0byBhdm9pZCBoYXZpbmcg dG8gc3BlY2lmeSBhbiB1bnVzZWQgYXJndW1lbnQuICovDQo+ID4gKyNkZWZpbmUgbWx4YmZfYm9v dGN0bF9zbWNfY2FsbDAoc21jX29wKSBtbHhiZl9ib290Y3RsX3NtY19jYWxsMShzbWNfb3AsIDAp DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJlc2V0X2FjdGlvbl90b192YWwoY29uc3QgY2hhciAq YWN0aW9uLCBzaXplX3QgbGVuKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbWx4YmZfYm9v dGN0bF9uYW1lICpibjsNCj4gPiArDQo+IA0KPiA+ICsgICAgICAgLyogQWNjZXB0IHN0cmluZyBl aXRoZXIgd2l0aCBvciB3aXRob3V0IGEgbmV3bGluZSB0ZXJtaW5hdG9yICovDQo+ID4gKyAgICAg ICBpZiAoYWN0aW9uW2xlbi0xXSA9PSAnXG4nKQ0KPiA+ICsgICAgICAgICAgICAgICAtLWxlbjsN Cj4gDQo+IEZvciBhIGxvbmcgdGltZSB3ZSBoYXZlIHN5c2ZzX3N0cmVxKCkgQVBJLg0KDQpUaGFu a3MsIHdpbGwgdXBkYXRlIGl0IGluIHYyLg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICAgIGZvciAo Ym4gPSBib290X25hbWVzOyBibi0+dmFsdWUgPj0gMDsgKytibikNCj4gPiArICAgICAgICAgICAg ICAgaWYgKHN0cm5jbXAoYm4tPm5hbWUsIGFjdGlvbiwgbGVuKSA9PSAwKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiBibi0+dmFs dWU7DQo+ID4gK30NCj4gDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHBvc3RfcmVzZXRfd2RvZ19zdG9y ZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkNCj4gPiArew0KPiA+ ICsgICAgICAgaW50IGVycjsNCj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgd2F0Y2hkb2c7DQo+ ID4gKw0KPiA+ICsgICAgICAgZXJyID0ga3N0cnRvdWwoYnVmLCAxMCwgJndhdGNoZG9nKTsNCj4g PiArICAgICAgIGlmIChlcnIpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBlcnI7DQo+ID4g Kw0KPiANCj4gPiArICAgICAgIGlmIChtbHhiZl9ib290Y3RsX3NtY19jYWxsMShNTFhCRl9CT09U Q1RMX1NFVF9QT1NUX1JFU0VUX1dET0csDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2F0Y2hkb2cpIDwgMCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7DQo+IA0KPiBJZiB0aGF0IGNhbGwgcmV0dXJucyBhbiBlcnJvciBpdCBzaG91bGRuJ3QgYmUg c2hhZG93ZWQgaGVyZS4NCg0KTm90IHN1cmUgSSB1bmRlcnN0YW5kIHRoaXMgY29tbWVudCBjb3Jy ZWN0bHkgb3Igbm90Lg0KVGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGJ5IERSSVZFUl9BVFRSX1JX KCksIHdoaWNoIGFwcGVhcnMgdG8gZXhwZWN0DQpzc2l6ZV90IG9yIGFuIGVycm9yIGNvZGUgYXMg cmV0dXJuIHZhbHVlIGFjY29yZGluZyB0byBvdGhlciBleGFtcGxlcyBJIHNhdy4NCg0KPiANCj4g PiArDQo+ID4gKyAgICAgICByZXR1cm4gY291bnQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBzc2l6ZV90IHJlc2V0X2FjdGlvbl9zaG93KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNo YXIgKmJ1ZikNCj4gPiArew0KPiANCj4gPiArICAgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVz XG4iLCByZXNldF9hY3Rpb25fdG9fc3RyaW5nKA0KPiA+ICsgICAgICAgICAgICAgICBtbHhiZl9i b290Y3RsX3NtY19jYWxsMChNTFhCRl9CT09UQ1RMX0dFVF9SRVNFVF9BQ1RJT04pKSk7DQo+IA0K PiBXb3VsZG4ndCBiZSBlYXN5IHRvIHBhcnNlIHRoaXMgYXMNCj4gDQo+IGludCBhY3Rpb24gPSAu Li5jYWxsMCgpOw0KPiByZXR1cm4gc3ByaW50ZiguLi4pOw0KPiANCj4gPw0KPiANCj4gKGludCBp cyBhbiBhcmJpdHJhcnkgdHlwZSBoZXJlLCBjaG9vc2Ugb25lIHRoYXQgc3VpdHMpDQoNCkRvbmUu IFdpbGwgdXBkYXRlIGl0IGluIHYyLg0KDQo+IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg c3NpemVfdCByZXNldF9hY3Rpb25fc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXpl X3QgY291bnQpDQo+ID4gK3sNCj4gPiArICAgICAgIGludCBhY3Rpb24gPSByZXNldF9hY3Rpb25f dG9fdmFsKGJ1ZiwgY291bnQpOw0KPiA+ICsNCj4gDQo+ID4gKyAgICAgICBpZiAoYWN0aW9uIDwg MCB8fCBhY3Rpb24gPT0gTUxYQkZfQk9PVENUTF9OT05FKQ0KPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsNCj4gDQo+IERvbid0IHNoYWRvdyBhbiBlcnJvci4NCg0KVGhpcyBvbmUg aXMgYWxzbyB0aGUgc2FtZSwgd2hpY2ggaXMgZGVmaW5lZCBieSBEUklWRVJfQVRUUl9SVygpIGFu ZA0KZXhwZWN0cyBzc2l6ZV90IG9yIGVycm9yIGNvZGUgYXMgcmV0dXJuIHZhbHVlLiBQbGVhc2Ug Y29ycmVjdCBtZSBpZiBJIGFtIHdyb25nLg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICAgIGlmICht bHhiZl9ib290Y3RsX3NtY19jYWxsMShNTFhCRl9CT09UQ1RMX1NFVF9SRVNFVF9BQ1RJT04sIGFj dGlvbikgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gDQo+IFNh bWUuDQoNClNhbWUuDQoNCj4gDQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIGNvdW50Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3NpemVfdCBzZWNvbmRfcmVzZXRfYWN0aW9uX3Nob3co c3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVmKQ0KPiA+ICt7DQo+IA0KPiA+ICsg ICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHJlc2V0X2FjdGlvbl90b19zdHJpbmco DQo+ID4gKyAgICAgICAgICAgICAgIG1seGJmX2Jvb3RjdGxfc21jX2NhbGwwKA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIE1MWEJGX0JPT1RDVExfR0VUX1NFQ09ORF9SRVNFVF9BQ1RJT04p KSk7DQo+IA0KPiBVc2UgdGVtcCB2YXJpYWJsZS4NCg0KRG9uZS4gV2lsbCB1cGRhdGUgaXQgaW4g djIuDQoNCj4gDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHNlY29uZF9yZXNl dF9hY3Rpb25fc3RvcmUoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNv dW50KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBpbnQgYWN0aW9uID0gcmVzZXRfYWN0aW9uX3RvX3Zh bChidWYsIGNvdW50KTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoYWN0aW9uIDwgMCkNCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+IA0KPiBEb24ndCBzaGFkb3cgYW4gZXJy b3IuDQoNClNhbWUgeHh4X3N0b3JlKCkgZnVuY3Rpb24gZGVmaW5lZCBieSBEUklWRVJfQVRUUl9S VygpDQoNCj4gDQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKG1seGJmX2Jvb3RjdGxfc21jX2NhbGwx KE1MWEJGX0JPT1RDVExfU0VUX1NFQ09ORF9SRVNFVF9BQ1RJT04sDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKSA8IDApDQo+ID4gKyAgICAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOw0KPiANCj4gU2FtZS4NCg0KU2FtZQ0KDQo+IA0KPiA+ICsNCj4gPiAr ICAgICAgIHJldHVybiBjb3VudDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3Qg bGlmZWN5Y2xlX3N0YXRlX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY2hhciAqYnVm KQ0KPiA+ICt7DQo+IA0KPiA+ICsgICAgICAgaW50IGxjX3N0YXRlID0gbWx4YmZfYm9vdGN0bF9z bWNfY2FsbDEoDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNTFhCRl9CT09U Q1RMX0dFVF9UQkJfRlVTRV9TVEFUVVMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBNTFhCRl9CT09UQ1RMX0ZVU0VfU1RBVFVTX0xJRkVDWUNMRSk7DQo+IA0KPiBTcGxpdCBp dCBhcw0KPiANCj4gaW50IC4uLjsNCj4gDQo+IC4uLiA9IGNhbGwxKCk7DQo+IGlmICguLi4pDQoN CkRvbmUuIFdpbGwgdXBkYXRlIGl0IGluIHYyLg0KDQo+IA0KPiA+ICsNCj4gPiArICAgICAgIGlm IChsY19zdGF0ZSA8IDApDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiAN Cj4gRG9uJ3Qgc2hhZG93IGFuIGVycm9yLg0KDQpTYW1lIGFzIGFib3ZlLCB3aGljaCBzZWVtcyBl eHBlY3RlZCB0byByZXR1cm4gZXJyb3IgY29kZSBpbiBzdWNoDQpmdW5jdGlvbnMuDQoNCj4gDQo+ ID4gKw0KPiA+ICsgICAgICAgbGNfc3RhdGUgJj0gKE1MWEJGX0JPT1RDVExfU0JfTU9ERV9URVNU X01BU0sgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIE1MWEJGX0JPT1RDVExfU0JfTU9ERV9T RUNVUkVfTUFTSyk7DQo+IA0KPiBCZXR0ZXIgdG8gc3BsaXQgbGlrZQ0KPiANCj4geHh4ID0NCj4g IChBIHwgQik7DQoNCkl0IHNlZW1zIGhhcmQgdG8gZG8gIihBIHwgQik7IiB3aXRoaW4gODAgY2hh cmFjdGVycyBwbHVzIHRoZSBpbmRlbnRzLg0KDQo+IA0KPiA+ICsgICAgICAgLyoNCj4gPiArICAg ICAgICAqIElmIHRoZSB0ZXN0IGJpdHMgYXJlIHNldCwgd2Ugc3BlY2lmeSB0aGF0IHRoZSBjdXJy ZW50IHN0YXRlIG1heSBiZQ0KPiA+ICsgICAgICAgICogZHVlIHRvIHVzaW5nIHRoZSB0ZXN0IGJp dHMuDQo+ID4gKyAgICAgICAgKi8NCj4gDQo+ID4gKyAgICAgICBpZiAoKGxjX3N0YXRlICYgTUxY QkZfQk9PVENUTF9TQl9NT0RFX1RFU1RfTUFTSykgIT0gMCkgew0KPiANCj4gJyAhPSAwJyBpcyBy ZWR1bmRhbnQuDQoNClJlbW92ZWQuIFdpbGwgdXBkYXRlIGl0IGluIHYyLg0KDQo+IA0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgICAgbGNfc3RhdGUgJj0gTUxYQkZfQk9PVENUTF9TQl9NT0RFX1NF Q1VSRV9NQVNLOw0KPiA+ICsNCj4gDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBzcHJpbnRm KGJ1ZiwgIiVzKHRlc3QpXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt bHhiZl9ib290Y3RsX2xpZmVjeWNsZV9zdGF0ZXNbbGNfc3RhdGVdKTsNCj4gDQo+IE9uZSBsaW5l Pw0KDQpJdCBzZWVtcyBoYXJkIHRvIGZpdCB0aGVtIGludG8gODAgY2hhcmFjdGVycyBpbiBvbmUg bGluZS4NCg0KPiANCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gc3By aW50ZihidWYsICIlc1xuIiwgbWx4YmZfYm9vdGN0bF9saWZlY3ljbGVfc3RhdGVzW2xjX3N0YXRl XSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IHNlY3VyZV9ib290X2Z1c2Vf c3RhdGVfc2hvdyhzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBjaGFyICpidWYpDQo+ID4gK3sN Cj4gPiArICAgICAgIGludCBrZXk7DQo+ID4gKyAgICAgICBpbnQgYnVmX2xlbiA9IDA7DQo+ID4g KyAgICAgICBpbnQgdXBwZXJfa2V5X3VzZWQgPSAwOw0KPiA+ICsgICAgICAgaW50IHNiX2tleV9z dGF0ZSA9IG1seGJmX2Jvb3RjdGxfc21jX2NhbGwxKA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUxYQkZfQk9PVENUTF9HRVRfVEJCX0ZVU0VfU1RBVFVTLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxYQkZfQk9PVENUTF9GVVNFX1NUQVRVU19LRVlT KTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoc2Jfa2V5X3N0YXRlIDwgMCkNCj4gPiArICAgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiANCj4gPiArICAgICAgIGZvciAoa2V5 ID0gTUxYQkZfU0JfS0VZX05VTSAtIDE7IGtleSA+PSAwOyBrZXktLSkgew0KPiANCj4gSSdtIG5v dCBzdXJlIGl0J3MgYSBnb29kIGlkZWEgdG8gcHV0IHNldmVyYWwgbGluZXMgaW4gb25lIHN5c2Zz IGF0dHJpYnV0ZS4NCg0KV2lsbCB1cGRhdGUgaXQgaW4gdjIuDQoNCj4gDQo+ID4gKyAgICAgICAg ICAgICAgIGludCBidXJudCA9ICgoc2Jfa2V5X3N0YXRlICYgKDEgPDwga2V5KSkgIT0gMCk7DQo+ IA0KPiBSZWR1bmRhbnQgICcgIT0gMCcsIHJlZHVuZGFudCBwYXJlbnMuDQoNCldpbGwgdXBkYXRl IGl0IGluIHYyLg0KDQo+IA0KPiA+ICsgICAgICAgICAgICAgICBpbnQgdmFsaWQgPSAoKHNiX2tl eV9zdGF0ZSAmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgKGtleSAr IE1MWEJGX1NCX0tFWV9OVU0pKSkgIT0gMCk7DQo+IA0KPiBTYW1lLg0KDQpXaWxsIHVwZGF0ZSBp dCBpbiB2Mi4NCg0KPiANCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGJ1Zl9sZW4gKz0gc3By aW50ZihidWYgKyBidWZfbGVuLCAiVmVyJWQ6Iiwga2V5KTsNCj4gPiArICAgICAgICAgICAgICAg aWYgKHVwcGVyX2tleV91c2VkKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1 cm50KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9sZW4gKz0gc3By aW50ZihidWYgKyBidWZfbGVuLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlZCIpOw0KPiANCj4gT2gsIHdoeSBub3QganVz dA0KPiANCj4gY29uc3QgY2hhciAqc3RhdHVzOw0KPiANCj4gaWYgKC4uLikgew0KPiAuLi4NCj4g IHN0YXR1cyA9ICIxIjsNCj4gLi4uDQo+IHN0YXR1cyA9ICIyIjsNCj4gLi4uDQo+IH0NCj4gbGVu ID0gc25wcmludGYoYnVmICsgbGVuLCAuLi4sIHN0YXR1cyk7DQo+IA0KPiA/DQoNCkdvb2QgaWRl YSEgV2lsbCB1cGRhdGUgaXQgaW4gdjIuDQoNCj4gDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJ1Zl9sZW4gKz0gc3ByaW50ZihidWYgKyBidWZfbGVuLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2FzdGVkIik7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh2YWxpZCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYnVmX2xlbiArPSBzcHJpbnRmKGJ1ZiArIGJ1Zl9sZW4sDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJ bnZhbGlkIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zl9sZW4gKz0gc3ByaW50 ZihidWYgKyBidWZfbGVuLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiU2tpcHBlZCIpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBpZiAoYnVybnQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh2YWxpZCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1cHBlcl9rZXlfdXNlZCA9IDE7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1Zl9sZW4gKz0gc3ByaW50ZihidWYgKyBidWZfbGVuLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW4g dXNlIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2xlbiArPSBzcHJpbnRm KGJ1ZiArIGJ1Zl9sZW4sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJCdXJuIGluY29tcGxldGUiKTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHZhbGlkKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBidWZfbGVuICs9IHNwcmludGYoYnVmICsgYnVmX2xlbiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQiKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2xlbiArPSBzcHJpbnRmKGJ1ZiArIGJ1Zl9s ZW4sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJGcmVlIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgIGJ1Zl9sZW4gKz0gc3ByaW50Zihi dWYgKyBidWZfbGVuLCAiXG4iKTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBy ZXR1cm4gYnVmX2xlbjsNCj4gPiArfQ0KPiA+ICsNCj4gDQo+ID4gKyNkZWZpbmUgTUxYQkZfQk9P VENUTF9EUlZfQVRUUihfbmFtZSkgRFJJVkVSX0FUVFJfUlcoX25hbWUpDQo+IA0KPiBXaGF0IHRo ZSBwb2ludD8NCg0KU2VlbXMgbm8gcG9pbnQuLi4gV2lsbCB1cGRhdGUgaXQgaW4gdjIuDQoNCj4g DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1seGJmX2Jvb3RjdGxfYXR0cl9n cm91cCA9IHsNCj4gPiArICAgICAgIC5hdHRycyA9IG1seGJmX2Jvb3RjdGxfZGV2X2F0dHJzDQo+ IA0KPiArIGNvbW1hLg0KPiANCj4gPiArfTsNCj4gDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg YWNwaV9kZXZpY2VfaWQgbWx4YmZfYm9vdGN0bF9hY3BpX2lkc1tdID0gew0KPiA+ICsgICAgICAg eyJNTE5YQkYwNCIsIDB9LA0KPiANCj4gPiArICAgICAgIHt9LA0KPiANCj4gTm8gY29tbWEgZm9y IHRlcm1pbmF0b3IgbGluZS4NCj4gDQo+ID4gK307DQoNCkRvbmUuIFdpbGwgdXBkYXRlIGl0IGlu IHYyLg0KDQo+IA0KPiANCj4gPiArc3RhdGljIGludCBtbHhiZl9ib290Y3RsX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBhcm1f c21jY2NfcmVzIHJlczsNCj4gPiArDQo+ID4gKyAgICAgICAvKg0KPiA+ICsgICAgICAgICogRW5z dXJlIHdlIGhhdmUgdGhlIFVVSUQgd2UgZXhwZWN0IGZvciB0aGlzIHNlcnZpY2UuDQo+ID4gKyAg ICAgICAgKiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uYWxpdHkgd2Ugd2FudCBpcyBwcmVzZW50IGlu IHRoZSBmaXJzdA0KPiA+ICsgICAgICAgICogcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGlzIHNlcnZp Y2UsIHNvIHdlIGRvbid0IGNoZWNrIHRoZSB2ZXJzaW9uLg0KPiA+ICsgICAgICAgICovDQo+ID4g KyAgICAgICBhcm1fc21jY2Nfc21jKE1MWEJGX0JPT1RDVExfU0lQX1NWQ19VSUQsIDAsIDAsIDAs IDAsIDAsIDAsIDAsICZyZXMpOw0KPiANCj4gDQo+IA0KPiA+ICsgICAgICAgaWYgKHJlcy5hMCAh PSAweDg5YzAzNmI0IHx8IHJlcy5hMSAhPSAweDExZTZlN2Q3IHx8DQo+ID4gKyAgICAgICAgICAg cmVzLmEyICE9IDB4MWEwMDk3ODcgfHwgcmVzLmEzICE9IDB4YzRiZjAwY2EpDQo+IA0KPiBXaGF0 IGlzIHRoaXM/IQ0KPiANCj4gQ2FuIHlvdSB1c2UgVVVJRCBBUEk/DQoNClllcywgaXQgaXMgVVVJ RCBjb21wYXJpc29uLiBUaGUgU01DIGNhbGwgcmV0dXJucyBmb3VyICd1bnNpZ25lZCBsb25nJyBm cm9tIEFURg0KdG8gcmVwcmVzZW50IHRoZSBVVUlELiBUaGVyZSBzZWVtcyBubyBleGlzdGluZyBB UElzIGluIHVhcGkvbGludXgvdXVpZC5oIHRvDQpjb21wYXJlIHN1Y2ggc3BlY2lhbCBmb3JtYXQu IEhvdyBhYm91dCByZXBsYWNpbmcgaXQgd2l0aCBjb21tZW50IGFuZCBNQUNST3MNCmluc3RlYWQg b2YgdGhlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gbWFrZSBpdCBtb3JlIHJlYWRhYmxlPw0KDQo+IA0K PiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKyAgICAgICAv Kg0KPiA+ICsgICAgICAgICogV2hlbiB3YXRjaGRvZyBpcyB1c2VkLCBpdCBzZXRzIGJvb3QgbW9k ZSB0byBNTFhCRl9CT09UQ1RMX1NXQVBfRU1NQw0KPiA+ICsgICAgICAgICogaW4gY2FzZSBvZiBi b290IGZhaWx1cmVzLiBIb3dldmVyIGl0IGRvZXNuJ3QgY2xlYXIgdGhlIHN0YXRlIGlmIHRoZXJl DQo+ID4gKyAgICAgICAgKiBpcyBubyBmYWlsdXJlLiBSZXN0b3JlIHRoZSBkZWZhdWx0IGJvb3Qg bW9kZSBoZXJlIHRvIGF2b2lkIGFueQ0KPiA+ICsgICAgICAgICogdW5uZWNlc3NhcnkgYm9vdCBw YXJ0aXRpb24gc3dhcHBpbmcuDQo+ID4gKyAgICAgICAgKi8NCj4gPiArICAgICAgIGlmIChtbHhi Zl9ib290Y3RsX3NtY19jYWxsMShNTFhCRl9CT09UQ1RMX1NFVF9SRVNFVF9BQ1RJT04sDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUxYQkZfQk9PVENUTF9FTU1DKSA8 IDApDQo+IA0KPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoIlVuYWJsZSB0byByZXNldCB0aGUg RU1NQyBib290IG1vZGVcbiIpOw0KPiANCj4gV2h5IHByXz8gU2hvdWxkbid0IGJlIGRldl8/DQoN Clllcywgd2lsbCB1cGRhdGUgaXQgaW4gdjIuDQoNCj4gDQo+ID4gKw0KPiA+ICsgICAgICAgcHJf aW5mbygiJXMgKHZlcnNpb24gJXMpXG4iLCBNTFhCRl9CT09UQ1RMX0RSSVZFUl9ERVNDUklQVElP TiwNCj4gDQo+IERpdHRvLg0KDQpXaWxsIHVwZGF0ZSBpdCBpbiB2MiAoYnkganVzdCByZW1vdmlu ZyB0aGlzIGxpbmUpIGFjY29yZGluZyB0byBuZXh0IGNvbW1lbnQuDQoNCj4gDQo+ID4gKyAgICAg ICAgICAgICAgIE1MWEJGX0JPT1RDVExfRFJJVkVSX1ZFUlNJT04pOw0KPiANCj4gTm8sIHRoZSBk cml2ZXIgdmVyc2lvbiBpcyBhIGdpdCBTSEEgc3VtIG9mIHRoZSBjZXJ0YWluIHRyZWUgc3RhdGUu DQo+IFJlbW92ZSB0aGlzIGRlZmluaXRpb24gY29tcGxldGVseS4NCg0KV2lsbCB1cGRhdGUgaXQg aW4gdjIuDQoNCj4gDQo+IA0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiANCj4gPiArc3RhdGljIGludCBtbHhiZl9ib290Y3RsX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiAr fQ0KPiANCj4gV2FzdGUgb2YgbGluZXMuDQoNClJlbW92ZWQuIFdpbGwgdXBkYXRlIGl0IGluIHYy Lg0KDQo+IA0KPiA+ICsvKiBBUk0gU3RhbmRhcmQgU2VydmljZSBDYWxscyB2ZXJzaW9uIG51bWJl cnMgKi8NCj4gPiArI2RlZmluZSBNTFhCRl9CT09UQ1RMX1NWQ19WRVJTSU9OX01BSk9SICAgICAg ICAgICAgICAgIDB4MA0KPiA+ICsjZGVmaW5lIE1MWEJGX0JPT1RDVExfU1ZDX1ZFUlNJT05fTUlO T1IgICAgICAgICAgICAgICAgMHgyDQo+ID4gKw0KPiA+ICsvKiBOdW1iZXIgb2Ygc3ZjIGNhbGxz IGRlZmluZWQuICovDQo+ID4gKyNkZWZpbmUgTUxYQkZfQk9PVENUTF9OVU1fU1ZDX0NBTExTIDEy DQo+ID4gKw0KPiA+ICsvKiBWYWxpZCByZXNldCBhY3Rpb25zIGZvciBNTFhCRl9CT09UQ1RMX1NF VF9SRVNFVF9BQ1RJT04uICovDQo+IA0KPiA+ICsjZGVmaW5lIE1MWEJGX0JPT1RDVExfRVhURVJO QUwgMCAvKiBOb3QgYm9vdCBmcm9tIGVNTUMgKi8NCj4gPiArI2RlZmluZSBNTFhCRl9CT09UQ1RM X0VNTUMgICAgIDEgLyogRnJvbSBwcmltYXJ5IGVNTUMgYm9vdCBwYXJ0aXRpb24gKi8NCj4gPiAr I2RlZmluZSBNTE5YX0JPT1RDVExfU1dBUF9FTU1DIDIgLyogU3dhcCBlTU1DIGJvb3QgcGFydGl0 aW9ucyBhbmQgcmVib290ICovDQo+ID4gKyNkZWZpbmUgTUxYQkZfQk9PVENUTF9FTU1DX0xFR0FD WSAgICAgIDMgLyogRnJvbSBwcmltYXJ5IGVNTUMgaW4gbGVnYWN5IG1vZGUgKi8NCj4gDQo+IFNp bmNlIHlvdSBoYXZlIHRoaXMgYXMgYSBzZXF1ZW50aWFsIHN0YXJ0aW5nIGZyb20gMCB5b3UgbWF5 IHJlZGVmaW5lDQo+ICBib290X25hbWVzW10gIGFzIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qg YW5kIHVzZSBzeXNmc19tYXRjaF9zdHJpbmcoKSBhYm92ZS4NCg0KVGhlIE1MWEJGX0JPT1RDVExf Tk9ORSBpcyBub3Qgc2VxdWVudGlhbC4gQ29uc2lkZXJpbmcgaXQgbmVlZHMgdG8NCm1hdGNoIGJv dGggdGhlIGFjdGlvbiBpZCBhbmQgdGhlIHN0cmluZyBuYW1lIChpbiBtbHhiZl9ib290Y3RsX3Jl c2V0X2FjdGlvbl90b192YWwNCmFuZCBtbHhiZl9ib290Y3RsX3Jlc2V0X2FjdGlvbl90b19zdHJp bmcpLCB1c2luZyBhIGZvciBsb29wIGFuZCBzeXNmc19zdHJlcSgpDQptaWdodCBiZSBtb3JlIGNv bnNpc3RlbnQgaGVyZS4gQW5vdGhlciByZWFzb24gaXMgdGhhdCBtb3JlIG5hbWVzIGFuZCBhY3Rp b25zDQptaWdodCBiZSBhZGRlZCBsYXRlciBmb3IgbmV3IGJvYXJkcywgYW5kIHRoZSBhY3Rpb25z IG5lZWRzIHRvIGJlIHRoZSBzYW1lDQphcyBkZWZpbmVkIGluIEFURi4gU28ga2VlcCB0aGUgY3Vy cmVudCBzdHJ1Y3R1cmUgY291bGQgYmUgbW9yZSBmbGV4aWJsZSBmb3INCmZ1dHVyZSBleHBhbnNp b24uDQoNCj4gDQo+ID4gKy8qIEVycm9yIHZhbHVlcyAobm9uLXplcm8pLiAqLw0KPiA+ICsjZGVm aW5lIE1MWEJGX0JPT1RDVExfU01DQ0NfSU5WQUxJRF9QQVJBTUVURVJTIC0yDQo+IA0KPiBJcyBp dCBjb21pbmcgZnJvbSBoYXJkd2FyZSAvIGZpcm13YXJlID8NCj4gT3RoZXJ3aXNlIHVzZSBzdGFu ZGFyZCBtZWFuaW5nZnVsIGtlcm5lbCBlcnJvciBjb2Rlcy4NCg0KUmVtb3ZlZCB0aGlzIGxpbmUu IFdpbGwgdXBkYXRlIGl0IGluIHYyLg0KDQo+IA0KPiAtLQ0KPiBXaXRoIEJlc3QgUmVnYXJkcywN Cj4gQW5keSBTaGV2Y2hlbmtvDQo=