Received: by 2002:ac0:aed5:0:0:0:0:0 with SMTP id t21csp372571imb; Fri, 1 Mar 2019 03:04:13 -0800 (PST) X-Google-Smtp-Source: APXvYqxH845ANKw1WjkxVQKjHN30nLLYXDUjt/H165C4QiT3Z5sUVa4aDD1nkZ3qTwE1DWeIYK+D X-Received: by 2002:a65:5c07:: with SMTP id u7mr4302076pgr.320.1551438253604; Fri, 01 Mar 2019 03:04:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551438253; cv=none; d=google.com; s=arc-20160816; b=qvCWSZEJw8FqB+aEyD2OrIgMjpYibPqVPRtdyxw8li3QTrziaPt3RJ61Bwb41Zh3l0 JLGwuLA2miwcwtkLhp6By8caJfw8fBwYZGv8MTiUBU0RaK1MhDwCfFVPt1L8I+qP2GlB 94URmAu9cHv51Aw70y6frQEAiXe+UqhZEHaw+Rg+s9Al4uSnpYTKrpp61KY4lGfsZBlO oaPRE8vCSUHHhStRwj9XNAs2WjdHBoiusRU0ar24RCt1wl7TXYwgYz2jRwWHisjw3U0t DrfE7GQiRdi3dsC5qYb+a/dSyTkAjPRu+wpoP+5c9kwOhfjYaN6M4pnW3m1m/ieEAOch ykEw== 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=aYAplsS1jN2KrpjmGMvN2CAiAkrrCeGvjEwbUwTwz1c=; b=jkY9nkNbECs02XceoF/iEqLZZvNlc9FL7EQ9Zm1iYjHq8k/jE7Tp6J+TkKMlRb0Qh3 tKryA7fshNLzTqlR+E/EL041xXPV2rglOvKzjS0BA2WG7lvDlYWbsuhpxay9zLam0PVP 4G8T0QqHXhD5BTnUnnnUC/po+H12UvGadyDDeqrAYwlnUD2HJmUsfbIF+O/bTdlYZC/V yHitZhXD9uOIz0YDkjjPgWacV7x0JseXalylehSCD4YU8ncujKfiwfUS20qov47LlDRn QnIm5HFW8jkdOznnFoHnfdwNgY8156z0ZTE/aEqALuuxkXiid6NXymCpemAwUDV3f3ZJ t+Ow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=HLqxmyYK; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a72si20786015pfj.216.2019.03.01.03.03.53; Fri, 01 Mar 2019 03:04:13 -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=@xilinx.onmicrosoft.com header.s=selector1-xilinx-com header.b=HLqxmyYK; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387724AbfCALCl (ORCPT + 99 others); Fri, 1 Mar 2019 06:02:41 -0500 Received: from mail-eopbgr800040.outbound.protection.outlook.com ([40.107.80.40]:6816 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727932AbfCALCk (ORCPT ); Fri, 1 Mar 2019 06:02:40 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aYAplsS1jN2KrpjmGMvN2CAiAkrrCeGvjEwbUwTwz1c=; b=HLqxmyYK/jMO40lt1WsnLiVb7iKH8aPJSLH9PTB/Hs7HeG1EDInIZS1Vux5TwNRTa99t2HK7dQ4N57D8dyTmrZvrUQnMRGUtFZMs9KUuEdIfxITocaN2g82bk1rTXpI8HzxZ9iOaJyuTS+WDKuim4m8BIKEOUICnopnIEj2Ir60= Received: from MWHPR02MB2623.namprd02.prod.outlook.com (10.168.206.9) by MWHPR02MB2813.namprd02.prod.outlook.com (10.175.50.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1665.16; Fri, 1 Mar 2019 11:02:30 +0000 Received: from MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::c89d:e485:cb5e:89cf]) by MWHPR02MB2623.namprd02.prod.outlook.com ([fe80::c89d:e485:cb5e:89cf%5]) with mapi id 15.20.1665.015; Fri, 1 Mar 2019 11:02:30 +0000 From: Naga Sureshkumar Relli To: Vignesh Raghavendra , "broonie@kernel.org" , "bbrezillon@kernel.org" CC: "linux-spi@vger.kernel.org" , "dwmw2@infradead.org" , "marek.vasut@gmail.com" , "richard@nod.at" , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , Michal Simek , "nagasuresh12@gmail.com" Subject: RE: [RFC PATCH 2/2] spi: spi-mem: Add support for Zynq QSPI controller Thread-Topic: [RFC PATCH 2/2] spi: spi-mem: Add support for Zynq QSPI controller Thread-Index: AQHUzzOoSBENcbUE5E66VjcEuxsjhqX2j+qAgAAInUA= Date: Fri, 1 Mar 2019 11:02:30 +0000 Message-ID: References: <1551337361-11665-1-git-send-email-naga.sureshkumar.relli@xilinx.com> <48dafcc4-1b9d-9ce2-9228-78e73252781f@ti.com> In-Reply-To: <48dafcc4-1b9d-9ce2-9228-78e73252781f@ti.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=nagasure@xilinx.com; x-originating-ip: [149.199.50.132] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b0f60658-ddec-4ac1-7364-08d69e356654 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:MWHPR02MB2813; x-ms-traffictypediagnostic: MWHPR02MB2813: x-microsoft-exchange-diagnostics: =?utf-8?B?MTtNV0hQUjAyTUIyODEzOzIzOnJya01UdkQvZm9Td1J3cTg4OTZ1d1llWVdp?= =?utf-8?B?QmlZbCs1U0tTMmhnL3NsR09vM2RlV2tmQmZQL2s5UFVqSmZZWXRFcFZIZWZ6?= =?utf-8?B?NFBSR0RHbUVTY2xrWGREQ0U2ekNpU0tTelhYd2VGVlppamMrYXJCOWtGcTg3?= =?utf-8?B?Yjd1dW93YkpNNnFoRzBxQ2pZclMvbTJleWp2bEJWZytJbUViWnpGcXNZWlZG?= =?utf-8?B?QnZUNlRKdERIemR2MVZ6RmFSV04xYWZKL0VmVVJoaS90Q3pUcTZOdTF3UHJY?= =?utf-8?B?TUovL3E0WGtaTWUvY25lNm1KQ1JuWW1zdWJLVXpIMmdHcjAyL0xlUzBNdFZP?= =?utf-8?B?dkdaY3JBb2s5dXVTSklocEx0aG9tRmNrOXFWZkhhVDlSOUw5OFZNMCtHTDFE?= =?utf-8?B?Q2N2OU5ja2Z4OUVhNjc4SXBxcWh6VzYwUytrZVVvTlFxTjFHM2ZYcE9mN0JI?= =?utf-8?B?ZnM3QitJSjVOSnN3SzBsTHRUSkpuMkl6VlVCZEhHQ3FCaWs2RW5Ib3VwTWlW?= =?utf-8?B?dDdlWmpzSDJmL2grQmFTVE5uTzVYQ0ppcTAzSlpCcXdPU0praVA2VFplTFV3?= =?utf-8?B?OHlGbElwcTNibnNITjcxRE9YbS8rYTZwSkxmUEx6VzlPczVBNStYd3Q2Sjd3?= =?utf-8?B?b3BTRzNqdnVEL3R0TXVJNWJEN2MxOWtPU1lxSFo1dWZ5T0x0WEFFZHp2YUdQ?= =?utf-8?B?YlF1UndzSi9uSEVjQ3FOM2c5MUxEU0ltcVZmam1NSHFKeTVyRnNiendhSTNE?= =?utf-8?B?NEhCOVVQWHkreEgzeC9COHphZXI4dEVKYmdLYTA0S1FpaXllSUplY0lqUlB6?= =?utf-8?B?QWlpWHpVek1weVYxZ1laeEpRTkk4RW9wSjNJdG1QWC9VWDZwMXNxU1lZNFkv?= =?utf-8?B?WHUveFZhTzBBR0ZBRGJ2ejZXd2RSeExvSm4zQlRvNGt5QllxeEZUZlAzZ3Nt?= =?utf-8?B?WUI1NWVvaGIxQkNkUjN6QW1QQnhtRWZQYTkvT1dGYnFLSnRmMk4xNDlqUlpN?= =?utf-8?B?KzBiV0VvYTR6UC9NK2srQmlMVFMvTTVxNUx4d0ZXQ1ZXYTI0TlA2VDFsRUVO?= =?utf-8?B?bmlhQzFxNjArNGNiZkR5R0EwUHVpUzI3SUdSOVRlUkl4ZDNHRHpuWHB4QjZi?= =?utf-8?B?S2VwVjI4ZDdnYWpOUzFMVU1YdFU3YWJyODRKUVFKZU05OVB0cEtwR1R3M3du?= =?utf-8?B?cmM2MG83NEI4bXNxZUI3YXY1SCtrY2VEdVBLL0RmcVYvRnZ3S2s3NE8wOTY3?= =?utf-8?B?dFVzQmtTTzNoUUlVSnh1SlhCRzgrWVBKcll5a1JTamczVFJiYytTNGZYUmFr?= =?utf-8?B?am1Lb3ZsYnk3S2RVb3BzRTFiSUlWaitZZzkzSHFxMjc2TytkSm1XalJsYnJW?= =?utf-8?B?V25MenFRbElsSy9WU09lSFpibVNFWHFSbFBiYVJMQzlyc0dLdG0rWlF4NW50?= =?utf-8?B?eVNvN0JvWlA3ZHNkY2NOcmN2L25JekpBeDlSNkZVckZCRWdJMkxzUHo1NWFr?= =?utf-8?B?NCtqNHFTdTJXbUpEUUR5VXYyOEVDZTJqdkRTOVdFMTgxZnJaVW90b0o3VERi?= =?utf-8?B?dmJOb2hIYU1EdElrQ0tLa2ZidXdUVGRrcG5iSmFUMzQ0aFVFOWJidkhoVThi?= =?utf-8?B?SDZ1Q3E2RnZsTVhsS0liVTFEWktORDVOY3pDR01uRlJlQ2gwQmNrcGlReEkr?= =?utf-8?B?dXNNVUZFdG1ucm5BSVJFamN0NXBMZS85czhaNnE0V0l3bGFiQm0va1VraHZm?= =?utf-8?B?NC9kdWxNNHV0WFI2MlhzSDNST0hiOTlxSTAyaEdpcGZxQ053aEV1NjVFZjhB?= =?utf-8?B?SUppQVhMcDJ2YmlDNjJxM2poS0dRME1HbGZNTmx5ZEZkRVp0cXl0TnRJK2lS?= =?utf-8?B?bDdGYjJnaytwdlQ0bUhYdVpLYzI0Q1p0SU5qZ0VNa1ZnQUN3dkg0NzZTejNt?= =?utf-8?Q?FDgQZQwEp1muidJQ91cAhY5yKroXLM=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 09634B1196 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(396003)(376002)(39860400002)(136003)(366004)(51914003)(13464003)(189003)(199004)(6506007)(30864003)(53546011)(2201001)(229853002)(105586002)(106356001)(102836004)(86362001)(33656002)(25786009)(11346002)(305945005)(7736002)(256004)(446003)(5660300002)(71190400001)(71200400001)(316002)(14444005)(74316002)(54906003)(110136005)(52536013)(3846002)(6116002)(68736007)(2501003)(55016002)(186003)(6436002)(2906002)(478600001)(99286004)(81166006)(97736004)(8676002)(66066001)(81156014)(14454004)(26005)(53936002)(8936002)(6246003)(7416002)(53946003)(4326008)(76176011)(9686003)(7696005)(486006)(476003)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR02MB2813;H:MWHPR02MB2623.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: xilinx.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: uMxyrc3QLZLHYKQgc8SSXroJnPmeABBqhsmO4HGJUytPJSiJ/19n8reoHH5um+Hn2lyvQvN9FryrwV2dunoXNLcFH/2yAwqmeYwIx1yqu0LYyGtGJinixM/uZI8dkPnoKV4TqMLkJoMYzdsjwtHoGKlHr6VyxVP8TrqzWLLMpD3aoGK3J5v0aiSl+kd5jn1s10m1KhgkKSuaBC5G+zek7todooKwpVe3rmpvU2RbL2wXGnvRLEGIdnJbYCpHLYr0KmRCqAzPmNMPZHU4AOoinoEsHkK7yFts4D0l8kqAgdPStq0nBadmH83gtEZ+lJCPYNfKuBT4GWysXCEX/HJlMP0wRGxXzpEeoh4l9znITPSAH6+BVQrNnvkM+BraPqcc2X2cfXj3902mnRuGie5osbzRb3xeNL8jkIWG9ByTcv4= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-Network-Message-Id: b0f60658-ddec-4ac1-7364-08d69e356654 X-MS-Exchange-CrossTenant-originalarrivaltime: 01 Mar 2019 11:02:30.4007 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR02MB2813 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgVmlnbmVzaCwNCg0KVGhhbmtzIGZvciB0aGUgcmV2aWV3Lg0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IFZpZ25lc2ggUmFnaGF2ZW5kcmEgPHZpZ25lc2hyQHRpLmNv bT4NCj4gU2VudDogRnJpZGF5LCBNYXJjaCAxLCAyMDE5IDM6NDIgUE0NCj4gVG86IE5hZ2EgU3Vy ZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlQHhpbGlueC5jb20+OyBicm9vbmllQGtlcm5lbC5vcmc7 DQo+IGJicmV6aWxsb25Aa2VybmVsLm9yZw0KPiBDYzogbGludXgtc3BpQHZnZXIua2VybmVsLm9y ZzsgZHdtdzJAaW5mcmFkZWFkLm9yZzsgbWFyZWsudmFzdXRAZ21haWwuY29tOw0KPiByaWNoYXJk QG5vZC5hdDsgbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2Vy Lmtlcm5lbC5vcmc7IE1pY2hhbCBTaW1law0KPiA8bWljaGFsc0B4aWxpbnguY29tPjsgbmFnYXN1 cmVzaDEyQGdtYWlsLmNvbQ0KPiBTdWJqZWN0OiBSZTogW1JGQyBQQVRDSCAyLzJdIHNwaTogc3Bp LW1lbTogQWRkIHN1cHBvcnQgZm9yIFp5bnEgUVNQSSBjb250cm9sbGVyDQo+IA0KPiANCj4gDQo+ IE9uIDI4LzAyLzE5IDEyOjMyIFBNLCBOYWdhIFN1cmVzaGt1bWFyIFJlbGxpIHdyb3RlOg0KPiA+ IEFkZCBzdXBwb3J0IGZvciBRU1BJIGNvbnRyb2xsZXIgZHJpdmVyIHVzZWQgYnkgWGlsaW54IFp5 bnEgU09DLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogTmFnYSBTdXJlc2hrdW1hciBSZWxsaQ0K PiA+IDxuYWdhLnN1cmVzaGt1bWFyLnJlbGxpQHhpbGlueC5jb20+DQo+ID4gLS0tDQo+ID4gIGRy aXZlcnMvc3BpL0tjb25maWcgICAgICAgICB8ICAgOCArDQo+ID4gIGRyaXZlcnMvc3BpL01ha2Vm aWxlICAgICAgICB8ICAgMSArDQo+ID4gIGRyaXZlcnMvc3BpL3NwaS16eW5xLXFzcGkuYyB8IDc4 MA0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4g IDMgZmlsZXMgY2hhbmdlZCwgNzg5IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvc3BpL3NwaS16eW5xLXFzcGkuYw0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3BpL0tjb25maWcgYi9kcml2ZXJzL3NwaS9LY29uZmlnIGluZGV4DQo+ID4gOWY4OWNi MS4uZjEyYzg4MCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnDQo+ID4gKysr IGIvZHJpdmVycy9zcGkvS2NvbmZpZw0KPiA+IEBAIC04MTYsNiArODE2LDE0IEBAIGNvbmZpZyBT UElfWFRFTlNBX1hURlBHQQ0KPiA+ICAJICAxNiBiaXQgd29yZHMgaW4gU1BJIG1vZGUgMCwgYXV0 b21hdGljYWxseSBhc3NlcnRpbmcgQ1Mgb24gdHJhbnNmZXINCj4gPiAgCSAgc3RhcnQgYW5kIGRl YXNzZXJ0aW5nIG9uIGVuZC4NCj4gPg0KPiA+ICtjb25maWcgU1BJX1pZTlFfUVNQSQ0KPiA+ICsJ dHJpc3RhdGUgIlhpbGlueCBaeW5xIFFTUEkgY29udHJvbGxlciINCj4gPiArCWRlcGVuZHMgb24g QVJDSF9aWU5RDQo+ID4gKwloZWxwDQo+ID4gKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0 aGUgWnlucSBRdWFkIFNQSSBjb250cm9sbGVyDQo+ID4gKwkgIGluIG1hc3RlciBtb2RlLg0KPiA+ ICsJICBUaGlzIGNvbnRyb2xsZXIgb25seSBzdXBwb3J0cyBTUEkgbWVtb3J5IGludGVyZmFjZS4N Cj4gPiArDQo+ID4gIGNvbmZpZyBTUElfWllOUU1QX0dRU1BJDQo+ID4gIAl0cmlzdGF0ZSAiWGls aW54IFp5bnFNUCBHUVNQSSBjb250cm9sbGVyIg0KPiA+ICAJZGVwZW5kcyBvbiBTUElfTUFTVEVS ICYmIEhBU19ETUENCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2 ZXJzL3NwaS9NYWtlZmlsZSBpbmRleA0KPiA+IGYyOTYyNzAuLjU2NWRiNGQgMTAwNjQ0DQo+ID4g LS0tIGEvZHJpdmVycy9zcGkvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3NwaS9NYWtlZmls ZQ0KPiA+IEBAIC0xMTUsNiArMTE1LDcgQEAgb2JqLSQoQ09ORklHX1NQSV9YQ09NTSkJCSs9IHNw aS14Y29tbS5vDQo+ID4gIG9iai0kKENPTkZJR19TUElfWElMSU5YKQkJKz0gc3BpLXhpbGlueC5v DQo+ID4gIG9iai0kKENPTkZJR19TUElfWExQKQkJCSs9IHNwaS14bHAubw0KPiA+ICBvYmotJChD T05GSUdfU1BJX1hURU5TQV9YVEZQR0EpCQkrPSBzcGkteHRlbnNhLXh0ZnBnYS5vDQo+ID4gK29i ai0kKENPTkZJR19TUElfWllOUV9RU1BJKQkJKz0gc3BpLXp5bnEtcXNwaS5vDQo+ID4gIG9iai0k KENPTkZJR19TUElfWllOUU1QX0dRU1BJKQkJKz0gc3BpLXp5bnFtcC1ncXNwaS5vDQo+ID4NCj4g PiAgIyBTUEkgc2xhdmUgcHJvdG9jb2wgaGFuZGxlcnMNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9zcGkvc3BpLXp5bnEtcXNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLXp5bnEtcXNwaS5jDQo+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMC4uODdjOWVjMg0KPiA+IC0tLSAvZGV2 L251bGwNCj4gPiArKysgYi9kcml2ZXJzL3NwaS9zcGktenlucS1xc3BpLmMNCj4gPiBAQCAtMCww ICsxLDc4MCBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4g PiArLyoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDE5IFhpbGlueCwgSW5jLg0KPiA+ICsgKg0K PiA+ICsgKiBBdXRob3I6IE5hZ2EgU3VyZXNoa3VtYXIgUmVsbGkgPG5hZ2FzdXJlQHhpbGlueC5j b20+ICAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJx Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv c3BpL3NwaS1tZW0uaD4NCj4gPiArDQo+ID4gKy8qIFJlZ2lzdGVyIG9mZnNldCBkZWZpbml0aW9u cyAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9DT05GSUdfT0ZGU0VUCQkweDAwIC8qIENvbmZp Z3VyYXRpb24gIFJlZ2lzdGVyLCBSVw0KPiAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9TVEFU VVNfT0ZGU0VUCQkweDA0IC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIsIFJPDQo+ICovDQo+ ID4gKyNkZWZpbmUgWllOUV9RU1BJX0lFTl9PRkZTRVQJCTB4MDggLyogSW50ZXJydXB0IEVuYWJs ZSBSZWdpc3RlciwNCj4gV08gKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfSURJU19PRkZTRVQJ CTB4MEMgLyogSW50ZXJydXB0IERpc2FibGUgUmVnLCBXTw0KPiAqLw0KPiA+ICsjZGVmaW5lIFpZ TlFfUVNQSV9JTUFTS19PRkZTRVQJCTB4MTAgLyogSW50ZXJydXB0IEVuYWJsZWQgTWFzaw0KPiBS ZWcsUk8gKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfRU5BQkxFX09GRlNFVAkJMHgxNCAvKiBF bmFibGUvRGlzYWJsZSBSZWdpc3RlciwgUlcNCj4gKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElf REVMQVlfT0ZGU0VUCQkweDE4IC8qIERlbGF5IFJlZ2lzdGVyLCBSVyAqLw0KPiA+ICsjZGVmaW5l IFpZTlFfUVNQSV9UWERfMDBfMDBfT0ZGU0VUCTB4MUMgLyogVHJhbnNtaXQgNC1ieXRlIGluc3Qs IFdPICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX1RYRF8wMF8wMV9PRkZTRVQJMHg4MCAvKiBU cmFuc21pdCAxLWJ5dGUgaW5zdCwgV08gKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfVFhEXzAw XzEwX09GRlNFVAkweDg0IC8qIFRyYW5zbWl0IDItYnl0ZSBpbnN0LCBXTyAqLw0KPiA+ICsjZGVm aW5lIFpZTlFfUVNQSV9UWERfMDBfMTFfT0ZGU0VUCTB4ODggLyogVHJhbnNtaXQgMy1ieXRlIGlu c3QsIFdPICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX1JYRF9PRkZTRVQJCTB4MjAgLyogRGF0 YSBSZWNlaXZlIFJlZ2lzdGVyLCBSTyAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9TSUNfT0ZG U0VUCQkweDI0IC8qIFNsYXZlIElkbGUgQ291bnQgUmVnaXN0ZXIsDQo+IFJXICovDQo+ID4gKyNk ZWZpbmUgWllOUV9RU1BJX1RYX1RIUkVTSF9PRkZTRVQJMHgyOCAvKiBUWCBGSUZPIFdhdGVybWFy ayBSZWcsDQo+IFJXICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX1JYX1RIUkVTSF9PRkZTRVQJ MHgyQyAvKiBSWCBGSUZPIFdhdGVybWFyayBSZWcsDQo+IFJXICovDQo+ID4gKyNkZWZpbmUgWllO UV9RU1BJX0dQSU9fT0ZGU0VUCQkweDMwIC8qIEdQSU8gUmVnaXN0ZXIsIFJXICovDQo+ID4gKyNk ZWZpbmUgWllOUV9RU1BJX0xJTkVBUl9DRkdfT0ZGU0VUCTB4QTAgLyogTGluZWFyIEFkYXB0ZXIg Q29uZmlnIFJlZiwNCj4gUlcgKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfTU9EX0lEX09GRlNF VAkJMHhGQyAvKiBNb2R1bGUgSUQgUmVnaXN0ZXIsIFJPICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ ICsgKiBRU1BJIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgYml0IE1hc2tzDQo+ID4gKyAqDQo+ID4g KyAqIFRoaXMgcmVnaXN0ZXIgY29udGFpbnMgdmFyaW91cyBjb250cm9sIGJpdHMgdGhhdCBlZmZl Y3QgdGhlDQo+ID4gK29wZXJhdGlvbg0KPiA+ICsgKiBvZiB0aGUgUVNQSSBjb250cm9sbGVyDQo+ ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9DT05GSUdfSUZNT0RFX01BU0sJMHg4MDAw MDAwMCAvKiBGbGFzaCBNZW1vcnkNCj4gSW50ZXJmYWNlICovDQo+ID4gKyNkZWZpbmUgWllOUV9R U1BJX0NPTkZJR19NQU5TUlRfTUFTSwkweDAwMDEwMDAwIC8qIE1hbnVhbCBUWA0KPiBTdGFydCAq Lw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9DT05GSUdfTUFOU1JURU5fTUFTSwkweDAwMDA4MDAw IC8qIEVuYWJsZQ0KPiBNYW51YWwgVFggTW9kZSAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9D T05GSUdfU1NGT1JDRV9NQVNLCTB4MDAwMDQwMDAgLyogTWFudWFsIENoaXANCj4gU2VsZWN0ICov DQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX0NPTkZJR19CRFJBVEVfTUFTSwkweDAwMDAwMDM4IC8q IEJhdWQgUmF0ZSBEaXZpc29yDQo+IE1hc2sgKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfQ09O RklHX0NQSEFfTUFTSwkweDAwMDAwMDA0IC8qIENsb2NrIFBoYXNlIENvbnRyb2wNCj4gKi8NCj4g PiArI2RlZmluZSBaWU5RX1FTUElfQ09ORklHX0NQT0xfTUFTSwkweDAwMDAwMDAyIC8qIENsb2Nr IFBvbGFyaXR5IENvbnRyb2wNCj4gKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfQ09ORklHX1NT Q1RSTF9NQVNLCTB4MDAwMDA0MDAgLyogU2xhdmUgU2VsZWN0IE1hc2sgKi8NCj4gPiArI2RlZmlu ZSBaWU5RX1FTUElfQ09ORklHX0ZXSURUSF9NQVNLCTB4MDAwMDAwQzAgLyogRklGTyB3aWR0aA0K PiAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9DT05GSUdfTVNUUkVOX01BU0sJMHgwMDAwMDAw MSAvKiBNYXN0ZXIgTW9kZQ0KPiAqLw0KPiA+ICsNCj4gDQo+IENvbnZlcnQgdG8gR0VOTUFTSygp IGFuZCBCSVQoKSBtYWNyb3MNCk9rLCBJIHdpbGwgdXBkYXRlIGl0Lg0KPiANCj4gPiArLyoNCj4g PiArICogUVNQSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIC0gQmF1ZCByYXRlIGFuZCBzbGF2ZSBz ZWxlY3QNCj4gPiArICoNCj4gPiArICogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGUg Y2FsY3VsYXRpb24gb2YgYmF1ZCByYXRlIGRpdmlzb3INCj4gPiArYW5kDQo+ID4gKyAqIHNldHRp bmcgdGhlIHNsYXZlIHNlbGVjdC4NCj4gPiArICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX0JB VURfRElWX01BWAkJNyAvKiBCYXVkIHJhdGUgZGl2aXNvciBtYXhpbXVtICovDQo+ID4gKyNkZWZp bmUgWllOUV9RU1BJX0JBVURfRElWX1NISUZUCTMgLyogQmF1ZCByYXRlIGRpdmlzb3Igc2hpZnQg aW4gQ1IgKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfU1NfU0hJRlQJCTEwIC8qIFNsYXZlIFNl bGVjdCBmaWVsZCBzaGlmdCBpbiBDUiAqLw0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogUVNQSSBJ bnRlcnJ1cHQgUmVnaXN0ZXJzIGJpdCBNYXNrcw0KPiA+ICsgKg0KPiA+ICsgKiBBbGwgdGhlIGZv dXIgaW50ZXJydXB0IHJlZ2lzdGVycyAoU3RhdHVzL01hc2svRW5hYmxlL0Rpc2FibGUpIGhhdmUN Cj4gPiArdGhlIHNhbWUNCj4gPiArICogYml0IGRlZmluaXRpb25zLg0KPiA+ICsgKi8NCj4gPiAr I2RlZmluZSBaWU5RX1FTUElfSVhSX1JYX09WRVJGTE9XX01BU0sJMHgwMDAwMDAwMSAvKiBRU1BJ IFJYDQo+IEZJRk8gT3ZlcmZsb3cgKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfSVhSX1RYTkZV TExfTUFTSwkweDAwMDAwMDA0IC8qIFFTUEkgVFggRklGTw0KPiBPdmVyZmxvdyAqLw0KPiA+ICsj ZGVmaW5lIFpZTlFfUVNQSV9JWFJfVFhGVUxMX01BU0sJMHgwMDAwMDAwOCAvKiBRU1BJIFRYIEZJ Rk8gaXMgZnVsbA0KPiAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9JWFJfUlhORU1UWV9NQVNL CTB4MDAwMDAwMTAgLyogUVNQSSBSWCBGSUZPIE5vdA0KPiBFbXB0eSAqLw0KPiA+ICsjZGVmaW5l IFpZTlFfUVNQSV9JWFJfUlhGX0ZVTExfTUFTSwkweDAwMDAwMDIwIC8qIFFTUEkgUlggRklGTyBp cyBmdWxsDQo+ICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX0lYUl9UWEZfVU5EUkZMT1dfTUFT SwkweDAwMDAwMDQwIC8qIFFTUEkgVFgNCj4gRklGTyBVbmRlcmZsb3cgKi8NCj4gPiArI2RlZmlu ZSBaWU5RX1FTUElfSVhSX0FMTF9NQVNLDQo+IAkoWllOUV9RU1BJX0lYUl9SWF9PVkVSRkxPV19N QVNLIHwgXA0KPiA+ICsJCQkJCVpZTlFfUVNQSV9JWFJfVFhORlVMTF9NQVNLIHwgXA0KPiA+ICsJ CQkJCVpZTlFfUVNQSV9JWFJfVFhGVUxMX01BU0sgfCBcDQo+ID4gKwkJCQkJWllOUV9RU1BJX0lY Ul9SWE5FTVRZX01BU0sgfCBcDQo+ID4gKwkJCQkJWllOUV9RU1BJX0lYUl9SWEZfRlVMTF9NQVNL IHwgXA0KPiA+ICsJCQkJCVpZTlFfUVNQSV9JWFJfVFhGX1VORFJGTE9XX01BU0spDQo+ID4gKyNk ZWZpbmUgWllOUV9RU1BJX0lYUl9SWFRYX01BU0sNCj4gCShaWU5RX1FTUElfSVhSX1RYTkZVTExf TUFTSyB8IFwNCj4gPiArCQkJCQlaWU5RX1FTUElfSVhSX1JYTkVNVFlfTUFTSykNCj4gPiArDQo+ IA0KPiBDb252ZXJ0IHRvIEdFTk1BU0soKSBhbmQgQklUKCkgbWFjcm9zDQpPaywgd2lsbCBjaGFu Z2UgaXQuDQo+IA0KPiA+ICsvKg0KPiA+ICsgKiBRU1BJIEVuYWJsZSBSZWdpc3RlciBiaXQgTWFz a3MNCj4gPiArICoNCj4gPiArICogVGhpcyByZWdpc3RlciBpcyB1c2VkIHRvIGVuYWJsZSBvciBk aXNhYmxlIHRoZSBRU1BJIGNvbnRyb2xsZXIgICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX0VO QUJMRV9FTkFCTEVfTUFTSwkweDAwMDAwMDAxIC8qIFFTUEkgRW5hYmxlDQo+IEJpdCBNYXNrICov DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBRU1BJIExpbmVhciBDb25maWd1cmF0aW9uIFJlZ2lz dGVyDQo+ID4gKyAqDQo+ID4gKyAqIEl0IGlzIG5hbWVkIExpbmVhciBDb25maWd1cmF0aW9uIGJ1 dCBpdCBjb250cm9scyBvdGhlciBtb2RlcyB3aGVuDQo+ID4gK25vdCBpbg0KPiA+ICsgKiBsaW5l YXIgbW9kZSBhbHNvLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBaWU5RX1FTUElfTENGR19UV09f TUVNX01BU0sJMHg0MDAwMDAwMCAvKiBMUVNQSSBUd28NCj4gbWVtb3JpZXMgTWFzayAqLw0KPiA+ ICsjZGVmaW5lIFpZTlFfUVNQSV9MQ0ZHX1NFUF9CVVNfTUFTSwkweDIwMDAwMDAwIC8qIExRU1BJ IFNlcGFyYXRlIGJ1cw0KPiBNYXNrICovDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX0xDRkdfVV9Q QUdFX01BU0sJMHgxMDAwMDAwMCAvKiBMUVNQSSBVcHBlciBQYWdlDQo+IE1hc2sgKi8NCj4gPiAr DQo+IA0KPiBDb252ZXJ0IHRvIEdFTk1BU0soKSBhbmQgQklUKCkgbWFjcm9zDQpPaywgd2lsbCBj aGFuZ2UgaXQNCj4gDQo+ID4gKyNkZWZpbmUgWllOUV9RU1BJX0xDRkdfRFVNTVlfU0hJRlQJOA0K PiA+ICsNCj4gPiArI2RlZmluZSBaWU5RX1FTUElfRkFTVF9SRUFEX1FPVVRfQ09ERQkweDZCIC8q IHJlYWQgaW5zdHJ1Y3Rpb24gY29kZQ0KPiAqLw0KPiA+ICsjZGVmaW5lIFpZTlFfUVNQSV9GSUZP X0RFUFRICQk2MyAvKiBGSUZPIGRlcHRoIGluIHdvcmRzICovDQo+ID4gKyNkZWZpbmUgWllOUV9R U1BJX1JYX1RIUkVTSE9MRAkJMzIgLyogUnggRklGTyB0aHJlc2hvbGQgbGV2ZWwgKi8NCj4gPiAr I2RlZmluZSBaWU5RX1FTUElfVFhfVEhSRVNIT0xECQkxIC8qIFR4IEZJRk8gdGhyZXNob2xkIGxl dmVsICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBUaGUgbW9kZWJpdHMgY29uZmlndXJhYmxl IGJ5IHRoZSBkcml2ZXIgdG8gbWFrZSB0aGUgU1BJIHN1cHBvcnQNCj4gPiArZGlmZmVyZW50DQo+ ID4gKyAqIGRhdGEgZm9ybWF0cw0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBNT0RFQklUUwkJCShT UElfQ1BPTCB8IFNQSV9DUEhBKQ0KPiA+ICsNCj4gDQo+IFJlbmFtZSBhcyBaWU5RX1FTUElfTU9E RUJJVFMgdG8gYXZvaWQgbmFtZXNwYWNlIGNvbmZsaWN0cw0KT2ssIHdpbGwgdXBkYXRlLg0KPiAN Cj4gPiArLyogRGVmYXVsdCBudW1iZXIgb2YgY2hpcCBzZWxlY3RzICovDQo+ID4gKyNkZWZpbmUg WllOUV9RU1BJX0RFRkFVTFRfTlVNX0NTCTENCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1 Y3QgenlucV9xc3BpIC0gRGVmaW5lcyBxc3BpIGRyaXZlciBpbnN0YW5jZQ0KPiA+ICsgKiBAcmVn czoJCVZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgUVNQSSBjb250cm9sbGVyIHJlZ2lzdGVycw0KPiA+ ICsgKiBAcmVmY2xrOgkJUG9pbnRlciB0byB0aGUgcGVyaXBoZXJhbCBjbG9jaw0KPiA+ICsgKiBA cGNsazoJCVBvaW50ZXIgdG8gdGhlIEFQQiBjbG9jaw0KPiA+ICsgKiBAaXJxOgkJSVJRIG51bWJl cg0KPiA+ICsgKiBAdHhidWY6CQlQb2ludGVyIHRvIHRoZSBUWCBidWZmZXINCj4gPiArICogQHJ4 YnVmOgkJUG9pbnRlciB0byB0aGUgUlggYnVmZmVyDQo+ID4gKyAqIEB0eF9ieXRlczoJCU51bWJl ciBvZiBieXRlcyBsZWZ0IHRvIHRyYW5zZmVyDQo+ID4gKyAqIEByeF9ieXRlczoJCU51bWJlciBv ZiBieXRlcyBsZWZ0IHRvIHJlY2VpdmUNCj4gPiArICogQGRhdGFfY29tcGxldGlvbjoJY29tcGxl dGlvbiBzdHJ1Y3R1cmUNCj4gPiArICovDQo+ID4gK3N0cnVjdCB6eW5xX3FzcGkgew0KPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsJdm9pZCBfX2lvbWVtICpyZWdzOw0KPiA+ICsJc3Ry dWN0IGNsayAqcmVmY2xrOw0KPiA+ICsJc3RydWN0IGNsayAqcGNsazsNCj4gPiArCWludCBpcnE7 DQo+ID4gKwl1OCAqdHhidWY7DQo+ID4gKwl1OCAqcnhidWY7DQo+ID4gKwlpbnQgdHhfYnl0ZXM7 DQo+ID4gKwlpbnQgcnhfYnl0ZXM7DQo+ID4gKwlzdHJ1Y3QgY29tcGxldGlvbiBkYXRhX2NvbXBs ZXRpb247DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBJbmxpbmUgZnVuY3Rpb25z IGZvciB0aGUgUVNQSSBjb250cm9sbGVyIHJlYWQvd3JpdGUgICovIHN0YXRpYw0KPiA+ICtpbmxp bmUgdTMyIHp5bnFfcXNwaV9yZWFkKHN0cnVjdCB6eW5xX3FzcGkgKnhxc3BpLCB1MzIgb2Zmc2V0 KSB7DQo+ID4gKwlyZXR1cm4gcmVhZGxfcmVsYXhlZCh4cXNwaS0+cmVncyArIG9mZnNldCk7IH0N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCB6eW5xX3FzcGlfd3JpdGUoc3RydWN0IHp5 bnFfcXNwaSAqeHFzcGksIHUzMiBvZmZzZXQsDQo+ID4gKwkJCQkgICB1MzIgdmFsKQ0KPiA+ICt7 DQo+ID4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHhxc3BpLT5yZWdzICsgb2Zmc2V0KTsgfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFfcXNwaV9pbml0X2h3IC0gSW5pdGlhbGl6ZSB0aGUg aGFyZHdhcmUNCj4gPiArICogQHhxc3BpOglQb2ludGVyIHRvIHRoZSB6eW5xX3FzcGkgc3RydWN0 dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBkZWZhdWx0IHNldHRpbmdzIG9mIHRoZSBRU1BJIGNv bnRyb2xsZXIncyBjb25maWd1cmFibGUNCj4gPiArcGFyYW1ldGVycyBvbg0KPiA+ICsgKiByZXNl dCBhcmUNCj4gPiArICoJLSBNYXN0ZXIgbW9kZQ0KPiA+ICsgKgktIEJhdWQgcmF0ZSBkaXZpc29y IGlzIHNldCB0byAyDQo+ID4gKyAqCS0gVHggdGhyZXNob2xkIHNldCB0byAxbCBSeCB0aHJlc2hv bGQgc2V0IHRvIDMyDQo+ID4gKyAqCS0gRmxhc2ggbWVtb3J5IGludGVyZmFjZSBtb2RlIGVuYWJs ZWQNCj4gPiArICoJLSBTaXplIG9mIHRoZSB3b3JkIHRvIGJlIHRyYW5zZmVycmVkIGFzIDggYml0 DQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zDQo+ ID4gKyAqCS0gRGlzYWJsZSBhbmQgY2xlYXIgYWxsIHRoZSBpbnRlcnJ1cHRzDQo+ID4gKyAqCS0g RW5hYmxlIG1hbnVhbCBzbGF2ZSBzZWxlY3QNCj4gPiArICoJLSBFbmFibGUgbWFudWFsIHN0YXJ0 DQo+ID4gKyAqCS0gRGVzZWxlY3QgYWxsIHRoZSBjaGlwIHNlbGVjdCBsaW5lcw0KPiA+ICsgKgkt IFNldCB0aGUgc2l6ZSBvZiB0aGUgd29yZCB0byBiZSB0cmFuc2ZlcnJlZCBhcyAzMiBiaXQNCj4g PiArICoJLSBTZXQgdGhlIGxpdHRsZSBlbmRpYW4gbW9kZSBvZiBUWCBGSUZPIGFuZA0KPiA+ICsg KgktIEVuYWJsZSB0aGUgUVNQSSBjb250cm9sbGVyDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9p ZCB6eW5xX3FzcGlfaW5pdF9odyhzdHJ1Y3QgenlucV9xc3BpICp4cXNwaSkgew0KPiA+ICsJdTMy IGNvbmZpZ19yZWc7DQo+ID4gKw0KPiA+ICsJenlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FT UElfRU5BQkxFX09GRlNFVCwgMCk7DQo+ID4gKwl6eW5xX3FzcGlfd3JpdGUoeHFzcGksIFpZTlFf UVNQSV9JRElTX09GRlNFVCwNCj4gPiArWllOUV9RU1BJX0lYUl9BTExfTUFTSyk7DQo+ID4gKw0K PiA+ICsJLyogRGlzYWJsZSBsaW5lYXIgbW9kZSBhcyB0aGUgYm9vdCBsb2FkZXIgbWF5IGhhdmUg dXNlZCBpdCAqLw0KPiA+ICsJenlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FTUElfTElORUFS X0NGR19PRkZTRVQsIDApOw0KPiA+ICsNCj4gPiArCS8qIENsZWFyIHRoZSBSWCBGSUZPICovDQo+ ID4gKwl3aGlsZSAoenlucV9xc3BpX3JlYWQoeHFzcGksIFpZTlFfUVNQSV9TVEFUVVNfT0ZGU0VU KSAmDQo+ID4gKwkJCSAgICAgIFpZTlFfUVNQSV9JWFJfUlhORU1UWV9NQVNLKQ0KPiA+ICsJCXp5 bnFfcXNwaV9yZWFkKHhxc3BpLCBaWU5RX1FTUElfUlhEX09GRlNFVCk7DQo+ID4gKw0KPiA+ICsJ enlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FTUElfU1RBVFVTX09GRlNFVCwNCj4gWllOUV9R U1BJX0lYUl9BTExfTUFTSyk7DQo+ID4gKwljb25maWdfcmVnID0genlucV9xc3BpX3JlYWQoeHFz cGksIFpZTlFfUVNQSV9DT05GSUdfT0ZGU0VUKTsNCj4gPiArCWNvbmZpZ19yZWcgJj0gfihaWU5R X1FTUElfQ09ORklHX01TVFJFTl9NQVNLIHwNCj4gPiArCQkJWllOUV9RU1BJX0NPTkZJR19DUE9M X01BU0sgfA0KPiA+ICsJCQlaWU5RX1FTUElfQ09ORklHX0NQSEFfTUFTSyB8DQo+ID4gKwkJCVpZ TlFfUVNQSV9DT05GSUdfQkRSQVRFX01BU0sgfA0KPiA+ICsJCQlaWU5RX1FTUElfQ09ORklHX1NT Rk9SQ0VfTUFTSyB8DQo+ID4gKwkJCVpZTlFfUVNQSV9DT05GSUdfTUFOU1JURU5fTUFTSyB8DQo+ ID4gKwkJCVpZTlFfUVNQSV9DT05GSUdfTUFOU1JUX01BU0spOw0KPiA+ICsJY29uZmlnX3JlZyB8 PSAoWllOUV9RU1BJX0NPTkZJR19NU1RSRU5fTUFTSyB8DQo+ID4gKwkJICAgICAgIFpZTlFfUVNQ SV9DT05GSUdfU1NGT1JDRV9NQVNLIHwNCj4gPiArCQkgICAgICAgWllOUV9RU1BJX0NPTkZJR19G V0lEVEhfTUFTSyB8DQo+ID4gKwkJICAgICAgIFpZTlFfUVNQSV9DT05GSUdfSUZNT0RFX01BU0sp Ow0KPiA+ICsJenlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FTUElfQ09ORklHX09GRlNFVCwg Y29uZmlnX3JlZyk7DQo+ID4gKw0KPiA+ICsJenlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FT UElfUlhfVEhSRVNIX09GRlNFVCwNCj4gPiArCQkJWllOUV9RU1BJX1JYX1RIUkVTSE9MRCk7DQo+ ID4gKwl6eW5xX3FzcGlfd3JpdGUoeHFzcGksIFpZTlFfUVNQSV9UWF9USFJFU0hfT0ZGU0VULA0K PiA+ICsJCQlaWU5RX1FTUElfVFhfVEhSRVNIT0xEKTsNCj4gPiArDQo+ID4gKwl6eW5xX3FzcGlf d3JpdGUoeHFzcGksIFpZTlFfUVNQSV9FTkFCTEVfT0ZGU0VULA0KPiA+ICsJCQlaWU5RX1FTUElf RU5BQkxFX0VOQUJMRV9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB6eW5x X3FzcGlfY2hlY2tfYnVzd2lkdGgodTggd2lkdGgpIHsNCj4gPiArCXN3aXRjaCAod2lkdGgpIHsN Cj4gPiArCWNhc2UgMToNCj4gPiArCWNhc2UgMjoNCj4gPiArCWNhc2UgNDoNCj4gPiArCQlyZXR1 cm4gMDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gLUVOT1RTVVBQOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCB6eW5xX3FzcGlfc3VwcG9ydHNfb3Aoc3RydWN0IHNwaV9t ZW0gKm1lbSwNCj4gPiArCQkJCSAgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQ0KPiA+ICt7 DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCXJldCA9IHp5bnFfcXNwaV9jaGVja19idXN3 aWR0aChvcC0+Y21kLmJ1c3dpZHRoKTsNCj4gPiArDQo+ID4gKwlpZiAob3AtPmFkZHIubmJ5dGVz KQ0KPiA+ICsJCXJldCB8PSB6eW5xX3FzcGlfY2hlY2tfYnVzd2lkdGgob3AtPmFkZHIuYnVzd2lk dGgpOw0KPiA+ICsNCj4gPiArCWlmIChvcC0+ZHVtbXkubmJ5dGVzKQ0KPiA+ICsJCXJldCB8PSB6 eW5xX3FzcGlfY2hlY2tfYnVzd2lkdGgob3AtPmR1bW15LmJ1c3dpZHRoKTsNCj4gPiArDQo+ID4g KwlpZiAob3AtPmRhdGEubmJ5dGVzKQ0KPiA+ICsJCXJldCB8PSB6eW5xX3FzcGlfY2hlY2tfYnVz d2lkdGgob3AtPmRhdGEuYnVzd2lkdGgpOw0KPiA+ICsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJ cmV0dXJuIGZhbHNlOw0KPiA+ICsNCj4gDQo+IHNwaV9tZW1fZGVmYXVsdF9zdXBwb3J0c19vcCgp IGFscmVhZHkgaGFzIHRoaXMgY29kZS4NCj4gQ291bGQgeW91IGNoYW5nZSwgc3BpX21lbV9zdXBw b3J0c19vcCgpIHRvIGNhbGwNCj4gc3BpX21lbV9kZWZhdWx0X3N1cHBvcnRzX29wKCkgZmlyc3Qg YmVmb3JlIGNvbnRyb2xsZXIgc3BlY2lmaWMNCj4gLT5zdXBwb3J0c19vcCgpPyBTbyB0aGF0LCBh Ym92ZSBjb2RlIGNhbiBiZSBkcm9wcGVkLg0KT2ssIEkgd2lsbCB1cGRhdGUgaXQuDQo+IA0KPiA+ ICsJLyoNCj4gPiArCSAqIFRoZSBudW1iZXIgb2YgYWRkcmVzcyBieXRlcyBzaG91bGQgYmUgZXF1 YWwgdG8gb3IgbGVzcyB0aGFuIDMgYnl0ZXMuDQo+ID4gKwkgKi8NCj4gPiArCWlmIChvcC0+YWRk ci5uYnl0ZXMgPiAzKQ0KPiA+ICsJCXJldHVybiBmYWxzZTsNCj4gPiArDQo+IA0KPiBIbW0sIGhv dyBkb2VzIHRoZSBkcml2ZXIgaGFuZGxlIGZsYXNoIGRldmljZXMgPjE2TUIgaW4gc2l6ZT8gTm90 IHN1cHBvcnRlZD8NClp5bnEgUVNQSSBjb250cm9sbGVyIGRvZXNuJ3Qgc3VwcG9ydCA0IGJ5dGUg YWRkcmVzc2luZy4NClNvIHRvIHN1cHBvcnQgPiAxNk1CIHNpemUsIHdlIGhhdmUgdG8gdXNlIEVB UihleHRlbmRlZCBhZGRyZXNzIHJlZ2lzdGVyKS4NCkFzIGl0IGlzIGluaXRpYWwgdmVyc2lvbiBv ZiBkcml2ZXIsIEkgaGF2ZW4ndCBhZGRlZCB0aGlzIGNvZGUuIFRoaXMgbmVlZHMgdG8gYmUgYWRk ZWQgaW4gc3BpLW5vci5jLg0KUHJldmlvdXNseSBJIGhhdmUgc2VudCBhbiBSRkMgcGF0Y2ggdG8g c3VwcG9ydCBhbGwgdGhlc2UuDQpCdXQgQm9yaXMgc3VnZ2VzdGVkIHRvIHVwc3RyZWFtIHRoZSBi YXNpYyBvbmUgZmlyc3QgdW5kZXIgc3BpLW1lbSBmcmFtZSB3b3JrLg0KTm90IG9ubHkgdGhpcyBz dXBwb3J0LCB0aGVyZSBhcmUgb3RoZXIgZmVhdHVyZXMgbGlrZSBkdWFsIHBhcmFsbGVsIGFuZCBk dWFsIHN0YWNrZWQuDQpBbGwgdGhlc2UgZmVhdHVyZXMgcmVxdWlyZSBhZGRpdGlvbmFsIHN1cHBv cnQgZnJvbSBzcGktbm9yIGZyYW1ld29yay4NCldlIGhhdmUgYW5vdGhlciBRU1BJIGNvbnRyb2xs ZXIgb24gWnlucU1QIFNPQywgd2hpY2ggaXMgYWxzbyBzaW1pbGFyKGJ1dCBpdCBzdXBwb3J0cyA0 Qnl0ZSBhZGRyZXNzaW5nKS4NClNvIGJ5IGNvbnNvbGlkYXRpbmcgYWxsIHRoZXNlLCBJIHNlbnQg dGhpcyBwYXRjaC4NCg0KUGxlYXNlIGxldCBtZSBrbm93IHlvdXIgc3VnZ2VzdGlvbiBvbiB0aGlz Lg0KPiANCj4gPiArCXJldHVybiB0cnVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogenlucV9xc3BpX3J4Zmlmb19vcCAtIFJlYWQgMS4uNCBieXRlcyBmcm9tIFJ4RklGTyB0byBS WCBidWZmZXINCj4gPiArICogQHhxc3BpOglQb2ludGVyIHRvIHRoZSB6eW5xX3FzcGkgc3RydWN0 dXJlDQo+ID4gKyAqIEBzaXplOglOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZCAoMS4uNCkNCj4g PiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHp5bnFfcXNwaV9yeGZpZm9fb3Aoc3RydWN0IHp5bnFf cXNwaSAqeHFzcGksIHVuc2lnbmVkIGludA0KPiA+ICtzaXplKSB7DQo+ID4gKwl1MzIgZGF0YTsN Cj4gPiArDQo+ID4gKwlkYXRhID0genlucV9xc3BpX3JlYWQoeHFzcGksIFpZTlFfUVNQSV9SWERf T0ZGU0VUKTsNCj4gPiArDQo+ID4gKwlpZiAoeHFzcGktPnJ4YnVmKSB7DQo+ID4gKwkJbWVtY3B5 KHhxc3BpLT5yeGJ1ZiwgKCh1OCAqKSZkYXRhKSArIDQgLSBzaXplLCBzaXplKTsNCj4gPiArCQl4 cXNwaS0+cnhidWYgKz0gc2l6ZTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl4cXNwaS0+cnhfYnl0 ZXMgLT0gc2l6ZTsNCj4gPiArCWlmICh4cXNwaS0+cnhfYnl0ZXMgPCAwKQ0KPiA+ICsJCXhxc3Bp LT5yeF9ieXRlcyA9IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6eW5xX3Fz cGlfdHhmaWZvX29wIC0gV3JpdGUgMS4uNCBieXRlcyBmcm9tIFRYIGJ1ZmZlciB0byBUeEZJRk8N Cj4gPiArICogQHhxc3BpOglQb2ludGVyIHRvIHRoZSB6eW5xX3FzcGkgc3RydWN0dXJlDQo+ID4g KyAqIEBzaXplOglOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgd3JpdHRlbiAoMS4uNCkNCj4gPiArICov DQo+ID4gK3N0YXRpYyB2b2lkIHp5bnFfcXNwaV90eGZpZm9fb3Aoc3RydWN0IHp5bnFfcXNwaSAq eHFzcGksIHVuc2lnbmVkIGludA0KPiA+ICtzaXplKSB7DQo+ID4gKwlzdGF0aWMgY29uc3QgdW5z aWduZWQgaW50IG9mZnNldFs0XSA9IHsNCj4gPiArCQlaWU5RX1FTUElfVFhEXzAwXzAxX09GRlNF VCwgWllOUV9RU1BJX1RYRF8wMF8xMF9PRkZTRVQsDQo+ID4gKwkJWllOUV9RU1BJX1RYRF8wMF8x MV9PRkZTRVQsIFpZTlFfUVNQSV9UWERfMDBfMDBfT0ZGU0VUDQo+IH07DQo+ID4gKwl1MzIgZGF0 YTsNCj4gPiArDQo+ID4gKwlpZiAoeHFzcGktPnR4YnVmKSB7DQo+ID4gKwkJZGF0YSA9IDB4ZmZm ZmZmZmY7DQo+ID4gKwkJbWVtY3B5KCZkYXRhLCB4cXNwaS0+dHhidWYsIHNpemUpOw0KPiA+ICsJ CXhxc3BpLT50eGJ1ZiArPSBzaXplOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlkYXRhID0gMDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwl4cXNwaS0+dHhfYnl0ZXMgLT0gc2l6ZTsNCj4gPiArCXp5 bnFfcXNwaV93cml0ZSh4cXNwaSwgb2Zmc2V0W3NpemUgLSAxXSwgZGF0YSk7IH0NCj4gPiArDQo+ ID4gKy8qKg0KPiA+ICsgKiB6eW5xX3FzcGlfY2hpcHNlbGVjdCAtIFNlbGVjdCBvciBkZXNlbGVj dCB0aGUgY2hpcCBzZWxlY3QgbGluZQ0KPiA+ICsgKiBAc3BpOglQb2ludGVyIHRvIHRoZSBzcGlf ZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAYXNzZXJ0OgkxIGZvciBzZWxlY3Qgb3IgMCBmb3Ig ZGVzZWxlY3QgdGhlIGNoaXAgc2VsZWN0IGxpbmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lk IHp5bnFfcXNwaV9jaGlwc2VsZWN0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGJvb2wgYXNzZXJ0 KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0cmwgPSBzcGktPm1hc3Rl cjsNCj4gPiArCXN0cnVjdCB6eW5xX3FzcGkgKnhxc3BpID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2Rl dmRhdGEoY3RybCk7DQo+ID4gKwl1MzIgY29uZmlnX3JlZzsNCj4gPiArDQo+ID4gKwljb25maWdf cmVnID0genlucV9xc3BpX3JlYWQoeHFzcGksIFpZTlFfUVNQSV9DT05GSUdfT0ZGU0VUKTsNCj4g PiArCWlmIChhc3NlcnQpIHsNCj4gPiArCQkvKiBTZWxlY3QgdGhlIHNsYXZlICovDQo+ID4gKwkJ Y29uZmlnX3JlZyAmPSB+WllOUV9RU1BJX0NPTkZJR19TU0NUUkxfTUFTSzsNCj4gPiArCQljb25m aWdfcmVnIHw9ICgoKH4oQklUKHNwaS0+Y2hpcF9zZWxlY3QpKSkgPDwNCj4gPiArCQkJCVpZTlFf UVNQSV9TU19TSElGVCkgJg0KPiA+ICsJCQkJWllOUV9RU1BJX0NPTkZJR19TU0NUUkxfTUFTSyk7 DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWNvbmZpZ19yZWcgfD0gWllOUV9RU1BJX0NPTkZJR19T U0NUUkxfTUFTSzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl6eW5xX3FzcGlfd3JpdGUoeHFzcGks IFpZTlFfUVNQSV9DT05GSUdfT0ZGU0VULCBjb25maWdfcmVnKTsgfQ0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIHp5bnFfcXNwaV9jb25maWdfb3AgLSBDb25maWd1cmUgUVNQSSBjb250cm9sbGVy IGZvciBzcGVjaWZpZWQgdHJhbnNmZXINCj4gPiArICogQHhxc3BpOglQb2ludGVyIHRvIHRoZSB6 eW5xX3FzcGkgc3RydWN0dXJlDQo+ID4gKyAqIEBxc3BpOglQb2ludGVyIHRvIHRoZSBzcGlfZGV2 aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBTZXRzIHRoZSBvcGVyYXRpb25hbCBtb2Rl IG9mIFFTUEkgY29udHJvbGxlciBmb3IgdGhlIG5leHQgUVNQSQ0KPiA+ICt0cmFuc2ZlciBhbmQN Cj4gPiArICogc2V0cyB0aGUgcmVxdWVzdGVkIGNsb2NrIGZyZXF1ZW5jeS4NCj4gPiArICoNCj4g PiArICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3MgYW5kIC1FSU5WQUwgb24gaW52YWxpZCBpbnB1dCBw YXJhbWV0ZXINCj4gPiArICoNCj4gPiArICogTm90ZTogSWYgdGhlIHJlcXVlc3RlZCBmcmVxdWVu Y3kgaXMgbm90IGFuIGV4YWN0IG1hdGNoIHdpdGggd2hhdA0KPiA+ICtjYW4gYmUNCj4gPiArICog b2J0YWluZWQgdXNpbmcgdGhlIHByZXNjYWxhciB2YWx1ZSwgdGhlIGRyaXZlciBzZXRzIHRoZSBj bG9jaw0KPiA+ICtmcmVxdWVuY3kgd2hpY2gNCj4gPiArICogaXMgbG93ZXIgdGhhbiB0aGUgcmVx dWVzdGVkIGZyZXF1ZW5jeSAobWF4aW11bSBsb3dlcikgZm9yIHRoZQ0KPiA+ICt0cmFuc2Zlci4g SWYNCj4gPiArICogdGhlIHJlcXVlc3RlZCBmcmVxdWVuY3kgaXMgaGlnaGVyIG9yIGxvd2VyIHRo YW4gdGhhdCBpcyBzdXBwb3J0ZWQNCj4gPiArYnkgdGhlIFFTUEkNCj4gPiArICogY29udHJvbGxl ciB0aGUgZHJpdmVyIHdpbGwgc2V0IHRoZSBoaWdoZXN0IG9yIGxvd2VzdCBmcmVxdWVuY3kNCj4g PiArc3VwcG9ydGVkIGJ5DQo+ID4gKyAqIGNvbnRyb2xsZXIuDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgaW50IHp5bnFfcXNwaV9jb25maWdfb3Aoc3RydWN0IHp5bnFfcXNwaSAqeHFzcGksIHN0cnVj dA0KPiA+ICtzcGlfZGV2aWNlICpzcGkpIHsNCj4gPiArCXUzMiBjb25maWdfcmVnLCBiYXVkX3Jh dGVfdmFsID0gMDsNCj4gPiArDQo+ID4gKwkvKiBTZXQgdGhlIGNsb2NrIGZyZXF1ZW5jeSAqLw0K PiA+ICsJd2hpbGUgKChiYXVkX3JhdGVfdmFsIDwgWllOUV9RU1BJX0JBVURfRElWX01BWCkgICYm DQo+ID4gKwkgICAgICAgKGNsa19nZXRfcmF0ZSh4cXNwaS0+cmVmY2xrKSAvICgyIDw8IGJhdWRf cmF0ZV92YWwpKSA+DQo+ID4gKwkJc3BpLT5tYXhfc3BlZWRfaHopDQo+ID4gKwkJYmF1ZF9yYXRl X3ZhbCsrOw0KPiANCj4gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCBieSB1c2luZyBESVZfUk9VTkRf VVAoKSB0byBmaW5kIGJhdWRfcmF0ZV92YWwNClllcywgSSB3aWxsIG1vZGlmeSBpdC4NCg0KVGhh bmtzLA0KTmFnYSBTdXJlc2hrdW1hciBSZWxsaQ0KPiANCj4gDQo+IA0KPiBSZWdhcmRzDQo+IFZp Z25lc2gNCj4gDQo+ID4gKwljb25maWdfcmVnID0genlucV9xc3BpX3JlYWQoeHFzcGksIFpZTlFf UVNQSV9DT05GSUdfT0ZGU0VUKTsNCj4gPiArDQo+ID4gKwkvKiBTZXQgdGhlIFFTUEkgY2xvY2sg cGhhc2UgYW5kIGNsb2NrIHBvbGFyaXR5ICovDQo+ID4gKwljb25maWdfcmVnICY9ICh+WllOUV9R U1BJX0NPTkZJR19DUEhBX01BU0spICYNCj4gPiArCQkgICAgICAoflpZTlFfUVNQSV9DT05GSUdf Q1BPTF9NQVNLKTsNCj4gPiArCWlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkNCj4gPiArCQljb25m aWdfcmVnIHw9IFpZTlFfUVNQSV9DT05GSUdfQ1BIQV9NQVNLOw0KPiA+ICsJaWYgKHNwaS0+bW9k ZSAmIFNQSV9DUE9MKQ0KPiA+ICsJCWNvbmZpZ19yZWcgfD0gWllOUV9RU1BJX0NPTkZJR19DUE9M X01BU0s7DQo+ID4gKw0KPiA+ICsJY29uZmlnX3JlZyAmPSB+WllOUV9RU1BJX0NPTkZJR19CRFJB VEVfTUFTSzsNCj4gPiArCWNvbmZpZ19yZWcgfD0gKGJhdWRfcmF0ZV92YWwgPDwgWllOUV9RU1BJ X0JBVURfRElWX1NISUZUKTsNCj4gPiArCXp5bnFfcXNwaV93cml0ZSh4cXNwaSwgWllOUV9RU1BJ X0NPTkZJR19PRkZTRVQsIGNvbmZpZ19yZWcpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucV9xc3BpX3NldHVwIC0gQ29uZmlndXJl IHRoZSBRU1BJIGNvbnRyb2xsZXINCj4gPiArICogQHNwaToJUG9pbnRlciB0byB0aGUgc3BpX2Rl dmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogU2V0cyB0aGUgb3BlcmF0aW9uYWwgbW9k ZSBvZiBRU1BJIGNvbnRyb2xsZXIgZm9yIHRoZSBuZXh0IFFTUEkNCj4gPiArdHJhbnNmZXIsIGJh dWQNCj4gPiArICogcmF0ZSBhbmQgZGl2aXNvciB2YWx1ZSB0byBzZXR1cCB0aGUgcmVxdWVzdGVk IHFzcGkgY2xvY2suDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIGFuZCBl cnJvciB2YWx1ZSBvbiBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHp5bnFfcXNw aV9zZXR1cF9vcChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKSB7DQo+ID4gKwlzdHJ1Y3Qgc3BpX2Nv bnRyb2xsZXIgKmN0cmwgPSBzcGktPm1hc3RlcjsNCj4gPiArCXN0cnVjdCB6eW5xX3FzcGkgKnFz cGkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShjdHJsKTsNCj4gPiArDQo+ID4gKwlpZiAo Y3RybC0+YnVzeSkNCj4gPiArCQlyZXR1cm4gLUVCVVNZOw0KPiA+ICsNCj4gPiArCWNsa19lbmFi bGUocXNwaS0+cmVmY2xrKTsNCj4gPiArCWNsa19lbmFibGUocXNwaS0+cGNsayk7DQo+ID4gKwl6 eW5xX3FzcGlfd3JpdGUocXNwaSwgWllOUV9RU1BJX0VOQUJMRV9PRkZTRVQsDQo+ID4gKwkJCVpZ TlFfUVNQSV9FTkFCTEVfRU5BQkxFX01BU0spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucV9xc3BpX3dyaXRlX29wIC0gRmlsbHMg dGhlIFRYIEZJRk8gd2l0aCBhcyBtYW55IGJ5dGVzIGFzIHBvc3NpYmxlDQo+ID4gKyAqIEB4cXNw aToJUG9pbnRlciB0byB0aGUgenlucV9xc3BpIHN0cnVjdHVyZQ0KPiA+ICsgKiBAdHhjb3VudDoJ TWF4aW11bSBudW1iZXIgb2Ygd29yZHMgdG8gd3JpdGUNCj4gPiArICogQHR4ZW1wdHk6CUluZGlj YXRlcyB0aGF0IFR4RklGTyBpcyBlbXB0eQ0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgenlu cV9xc3BpX3dyaXRlX29wKHN0cnVjdCB6eW5xX3FzcGkgKnhxc3BpLCBpbnQgdHhjb3VudCwNCj4g PiArCQkJICAgICAgIGJvb2wgdHhlbXB0eSkNCj4gPiArew0KPiA+ICsJaW50IGNvdW50LCBsZW4s IGs7DQo+ID4gKw0KPiA+ICsJbGVuID0geHFzcGktPnR4X2J5dGVzOw0KPiA+ICsJaWYgKGxlbiAm JiBsZW4gPCA0KSB7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBXZSBtdXN0IGVtcHR5IHRoZSBUeEZJ Rk8gYmV0d2VlbiBhY2Nlc3NlcyB0byBUWEQwLA0KPiA+ICsJCSAqIFRYRDEsIFRYRDIsIFRYRDMu DQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKHR4ZW1wdHkpDQo+ID4gKwkJCXp5bnFfcXNwaV90eGZp Zm9fb3AoeHFzcGksIGxlbik7DQo+ID4gKw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwljb3VudCA9IGxlbiAvIDQ7DQo+ID4gKwlpZiAoY291bnQgPiB0eGNvdW50KQ0KPiA+ ICsJCWNvdW50ID0gdHhjb3VudDsNCj4gPiArDQo+ID4gKwlpZiAoeHFzcGktPnR4YnVmKSB7DQo+ ID4gKwkJd3JpdGVzbCh4cXNwaS0+cmVncyArIFpZTlFfUVNQSV9UWERfMDBfMDBfT0ZGU0VULA0K PiA+ICsJCQl4cXNwaS0+dHhidWYsIGNvdW50KTsNCj4gPiArCQl4cXNwaS0+dHhidWYgKz0gY291 bnQgKiA0Ow0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlmb3IgKGsgPSAwOyBrIDwgY291bnQ7IGsr KykNCj4gPiArCQkJd3JpdGVsX3JlbGF4ZWQoMCwgeHFzcGktPnJlZ3MgKw0KPiA+ICsJCQkJCSAg WllOUV9RU1BJX1RYRF8wMF8wMF9PRkZTRVQpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXhxc3Bp LT50eF9ieXRlcyAtPSBjb3VudCAqIDQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg KiB6eW5xX3FzcGlfcmVhZF9vcCAtIERyYWlucyB0aGUgUlggRklGTyBieSBhcyBtYW55IGJ5dGVz IGFzIHBvc3NpYmxlDQo+ID4gKyAqIEB4cXNwaToJUG9pbnRlciB0byB0aGUgenlucV9xc3BpIHN0 cnVjdHVyZQ0KPiA+ICsgKiBAcnhjb3VudDoJTWF4aW11bSBudW1iZXIgb2Ygd29yZHMgdG8gcmVh ZA0KPiA+ICsgKi8NCj4gPiArc3RhdGljIHZvaWQgenlucV9xc3BpX3JlYWRfb3Aoc3RydWN0IHp5 bnFfcXNwaSAqeHFzcGksIGludCByeGNvdW50KSB7DQo+ID4gKwlpbnQgY291bnQsIGxlbiwgazsN Cj4gPiArDQo+ID4gKwlsZW4gPSB4cXNwaS0+cnhfYnl0ZXMgLSB4cXNwaS0+dHhfYnl0ZXM7DQo+ ID4gKwljb3VudCA9IGxlbiAvIDQ7DQo+ID4gKwlpZiAoY291bnQgPiByeGNvdW50KQ0KPiA+ICsJ CWNvdW50ID0gcnhjb3VudDsNCj4gPiArCWlmICh4cXNwaS0+cnhidWYpIHsNCj4gPiArCQlyZWFk c2woeHFzcGktPnJlZ3MgKyBaWU5RX1FTUElfUlhEX09GRlNFVCwNCj4gPiArCQkgICAgICAgeHFz cGktPnJ4YnVmLCBjb3VudCk7DQo+ID4gKwkJeHFzcGktPnJ4YnVmICs9IGNvdW50ICogNDsNCj4g PiArCX0gZWxzZSB7DQo+ID4gKwkJZm9yIChrID0gMDsgayA8IGNvdW50OyBrKyspDQo+ID4gKwkJ CXJlYWRsX3JlbGF4ZWQoeHFzcGktPnJlZ3MgKyBaWU5RX1FTUElfUlhEX09GRlNFVCk7DQo+ID4g Kwl9DQo+ID4gKwl4cXNwaS0+cnhfYnl0ZXMgLT0gY291bnQgKiA0Ow0KPiA+ICsJbGVuIC09IGNv dW50ICogNDsNCj4gPiArDQo+ID4gKwlpZiAobGVuICYmIGxlbiA8IDQgJiYgY291bnQgPCByeGNv dW50KQ0KPiA+ICsJCXp5bnFfcXNwaV9yeGZpZm9fb3AoeHFzcGksIGxlbik7DQo+ID4gK30NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6eW5xX3FzcGlfaXJxIC0gSW50ZXJydXB0IHNlcnZpY2Ug cm91dGluZSBvZiB0aGUgUVNQSSBjb250cm9sbGVyDQo+ID4gKyAqIEBpcnE6CUlSUSBudW1iZXIN Cj4gPiArICogQGRldl9pZDoJUG9pbnRlciB0byB0aGUgeHFzcGkgc3RydWN0dXJlDQo+ID4gKyAq DQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBUWCBlbXB0eSBvbmx5Lg0KPiA+ICsgKiBP biBUWCBlbXB0eSBpbnRlcnJ1cHQgdGhpcyBmdW5jdGlvbiByZWFkcyB0aGUgcmVjZWl2ZWQgZGF0 YSBmcm9tDQo+ID4gK1JYIEZJRk8gYW5kDQo+ID4gKyAqIGZpbGxzIHRoZSBUWCBGSUZPIGlmIHRo ZXJlIGlzIGFueSBkYXRhIHJlbWFpbmluZyB0byBiZSB0cmFuc2ZlcnJlZC4NCj4gPiArICoNCj4g PiArICogUmV0dXJuOglJUlFfSEFORExFRCB3aGVuIGludGVycnVwdCBpcyBoYW5kbGVkOyBJUlFf Tk9ORSBvdGhlcndpc2UuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaXJxcmV0dXJuX3QgenlucV9x c3BpX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpIHsNCj4gPiArCXUzMiBpbnRyX3N0YXR1czsN Cj4gPiArCWJvb2wgdHhlbXB0eTsNCj4gPiArCXN0cnVjdCB6eW5xX3FzcGkgKnhxc3BpID0gKHN0 cnVjdCB6eW5xX3FzcGkgKilkZXZfaWQ7DQo+ID4gKw0KPiA+ICsJaW50cl9zdGF0dXMgPSB6eW5x X3FzcGlfcmVhZCh4cXNwaSwgWllOUV9RU1BJX1NUQVRVU19PRkZTRVQpOw0KPiA+ICsJenlucV9x c3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FTUElfU1RBVFVTX09GRlNFVCwgaW50cl9zdGF0dXMpOw0K PiA+ICsNCj4gPiArCWlmICgoaW50cl9zdGF0dXMgJiBaWU5RX1FTUElfSVhSX1RYTkZVTExfTUFT SykgfHwNCj4gPiArCSAgICAoaW50cl9zdGF0dXMgJiBaWU5RX1FTUElfSVhSX1JYTkVNVFlfTUFT SykpIHsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIFRoaXMgYml0IGlzIHNldCB3aGVuIFR4IEZJRk8g aGFzIDwgVEhSRVNIT0xEIGVudHJpZXMuDQo+ID4gKwkJICogV2UgaGF2ZSB0aGUgVEhSRVNIT0xE IHZhbHVlIHNldCB0byAxLA0KPiA+ICsJCSAqIHNvIHRoaXMgYml0IGluZGljYXRlcyBUeCBGSUZP IGlzIGVtcHR5Lg0KPiA+ICsJCSAqLw0KPiA+ICsJCXR4ZW1wdHkgPSAhIShpbnRyX3N0YXR1cyAm IFpZTlFfUVNQSV9JWFJfVFhORlVMTF9NQVNLKTsNCj4gPiArCQkvKiBSZWFkIG91dCB0aGUgZGF0 YSBmcm9tIHRoZSBSWCBGSUZPICovDQo+ID4gKwkJenlucV9xc3BpX3JlYWRfb3AoeHFzcGksIFpZ TlFfUVNQSV9SWF9USFJFU0hPTEQpOw0KPiA+ICsJCWlmICh4cXNwaS0+dHhfYnl0ZXMpIHsNCj4g PiArCQkJLyogVGhlcmUgaXMgbW9yZSBkYXRhIHRvIHNlbmQgKi8NCj4gPiArCQkJenlucV9xc3Bp X3dyaXRlX29wKHhxc3BpLCBaWU5RX1FTUElfUlhfVEhSRVNIT0xELA0KPiA+ICsJCQkJCSAgIHR4 ZW1wdHkpOw0KPiA+ICsJCX0gZWxzZSB7DQo+ID4gKwkJCS8qDQo+ID4gKwkJCSAqIElmIHRyYW5z ZmVyIGFuZCByZWNlaXZlIGlzIGNvbXBsZXRlZCB0aGVuIG9ubHkgc2VuZA0KPiA+ICsJCQkgKiBj b21wbGV0ZSBzaWduYWwuDQo+ID4gKwkJCSAqLw0KPiA+ICsJCQlpZiAoIXhxc3BpLT5yeF9ieXRl cykgew0KPiA+ICsJCQkJenlucV9xc3BpX3dyaXRlKHhxc3BpLA0KPiA+ICsJCQkJCQlaWU5RX1FT UElfSURJU19PRkZTRVQsDQo+ID4gKwkJCQkJCVpZTlFfUVNQSV9JWFJfUlhUWF9NQVNLKTsNCj4g PiArCQkJCWNvbXBsZXRlKCZ4cXNwaS0+ZGF0YV9jb21wbGV0aW9uKTsNCj4gPiArCQkJfQ0KPiA+ ICsJCX0NCj4gPiArCQlyZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIElSUV9OT05FOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogenlucV9x c3BpX2V4ZWNfbWVtX29wKCkgLSBJbml0aWF0ZXMgdGhlIFFTUEkgdHJhbnNmZXINCj4gPiArICog QG1lbTogdGhlIFNQSSBtZW1vcnkNCj4gPiArICogQG9wOiB0aGUgbWVtb3J5IG9wZXJhdGlvbiB0 byBleGVjdXRlDQo+ID4gKyAqDQo+ID4gKyAqIEV4ZWN1dGVzIGEgbWVtb3J5IG9wZXJhdGlvbi4N Cj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBmaXJzdCBzZWxlY3RzIHRoZSBjaGlwIGFu ZCBzdGFydHMgdGhlIG1lbW9yeSBvcGVyYXRpb24uDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjog MCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuDQo+ ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHp5bnFfcXNwaV9leGVjX21lbV9vcChzdHJ1Y3Qgc3Bp X21lbSAqbWVtLA0KPiA+ICsJCQkJIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkNCj4gPiAr ew0KPiA+ICsJc3RydWN0IHp5bnFfcXNwaSAqeHFzcGkgPSBzcGlfY29udHJvbGxlcl9nZXRfZGV2 ZGF0YShtZW0tPnNwaS0+bWFzdGVyKTsNCj4gPiArCWludCBlcnIgPSAwLCBpOw0KPiA+ICsJdTgg KnRtcGJ1ZjsNCj4gPiArDQo+ID4gKwlkZXZfZGJnKHhxc3BpLT5kZXYsICJjbWQ6JSN4IG1vZGU6 JWQuJWQuJWQuJWRcbiIsDQo+ID4gKwkJb3AtPmNtZC5vcGNvZGUsIG9wLT5jbWQuYnVzd2lkdGgs IG9wLT5hZGRyLmJ1c3dpZHRoLA0KPiA+ICsJCW9wLT5kdW1teS5idXN3aWR0aCwgb3AtPmRhdGEu YnVzd2lkdGgpOw0KPiA+ICsNCj4gPiArCXp5bnFfcXNwaV9jaGlwc2VsZWN0KG1lbS0+c3BpLCB0 cnVlKTsNCj4gPiArCXp5bnFfcXNwaV9jb25maWdfb3AoeHFzcGksIG1lbS0+c3BpKTsNCj4gPiAr DQo+ID4gKwlpZiAob3AtPmNtZC5vcGNvZGUpIHsNCj4gPiArCQlyZWluaXRfY29tcGxldGlvbigm eHFzcGktPmRhdGFfY29tcGxldGlvbik7DQo+ID4gKwkJeHFzcGktPnR4YnVmID0gKHU4ICopJm9w LT5jbWQub3Bjb2RlOw0KPiA+ICsJCXhxc3BpLT5yeGJ1ZiA9IE5VTEw7DQo+ID4gKwkJeHFzcGkt PnR4X2J5dGVzID0gc2l6ZW9mKG9wLT5jbWQub3Bjb2RlKTsNCj4gPiArCQl4cXNwaS0+cnhfYnl0 ZXMgPSBzaXplb2Yob3AtPmNtZC5vcGNvZGUpOw0KPiA+ICsJCXp5bnFfcXNwaV93cml0ZV9vcCh4 cXNwaSwgWllOUV9RU1BJX0ZJRk9fREVQVEgsIHRydWUpOw0KPiA+ICsJCXp5bnFfcXNwaV93cml0 ZSh4cXNwaSwgWllOUV9RU1BJX0lFTl9PRkZTRVQsDQo+ID4gKwkJCQlaWU5RX1FTUElfSVhSX1JY VFhfTUFTSyk7DQo+ID4gKwkJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVf dGltZW91dCgmeHFzcGktPmRhdGFfY29tcGxldGlvbiwNCj4gPiArCQkJCQkJCSAgICAgICBtc2Vj c190b19qaWZmaWVzKDEwMDApKSkgew0KPiA+ICsJCQllcnIgPSAtRVRJTUVET1VUOw0KPiA+ICsJ CX0NCj4gPiArCX0NCj4gPiArCXp5bnFfcXNwaV9jb25maWdfb3AoeHFzcGksIG1lbS0+c3BpKTsN Cj4gPiArCWlmIChvcC0+YWRkci5uYnl0ZXMpIHsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgb3At PmFkZHIubmJ5dGVzOyBpKyspIHsNCj4gPiArCQkJeHFzcGktPnR4YnVmW2ldID0gb3AtPmFkZHIu dmFsID4+DQo+ID4gKwkJCQkJKDggKiAob3AtPmFkZHIubmJ5dGVzIC0gaSAtIDEpKTsNCj4gPiAr CQl9DQo+ID4gKw0KPiA+ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZ4cXNwaS0+ZGF0YV9jb21wbGV0 aW9uKTsNCj4gPiArCQl4cXNwaS0+cnhidWYgPSBOVUxMOw0KPiA+ICsJCXhxc3BpLT50eF9ieXRl cyA9IG9wLT5hZGRyLm5ieXRlczsNCj4gPiArCQl4cXNwaS0+cnhfYnl0ZXMgPSBvcC0+YWRkci5u Ynl0ZXM7DQo+ID4gKwkJenlucV9xc3BpX3dyaXRlX29wKHhxc3BpLCBaWU5RX1FTUElfRklGT19E RVBUSCwgdHJ1ZSk7DQo+ID4gKwkJenlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FTUElfSUVO X09GRlNFVCwNCj4gPiArCQkJCVpZTlFfUVNQSV9JWFJfUlhUWF9NQVNLKTsNCj4gPiArCQlpZiAo IXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZ4cXNwaS0+ZGF0YV9j b21wbGV0aW9uLA0KPiA+ICsJCQkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7 DQo+ID4gKwkJCWVyciA9IC1FVElNRURPVVQ7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJenlu cV9xc3BpX2NvbmZpZ19vcCh4cXNwaSwgbWVtLT5zcGkpOw0KPiA+ICsJaWYgKG9wLT5kdW1teS5u Ynl0ZXMpIHsNCj4gPiArCQl0bXBidWYgPSBremFsbG9jKG9wLT5kdW1teS5uYnl0ZXMsIEdGUF9L RVJORUwpOw0KPiA+ICsJCW1lbXNldCh0bXBidWYsIDB4ZmYsIG9wLT5kdW1teS5uYnl0ZXMpOw0K PiA+ICsJCXJlaW5pdF9jb21wbGV0aW9uKCZ4cXNwaS0+ZGF0YV9jb21wbGV0aW9uKTsNCj4gPiAr CQl4cXNwaS0+dHhidWYgPSB0bXBidWY7DQo+ID4gKwkJeHFzcGktPnJ4YnVmID0gTlVMTDsNCj4g PiArCQl4cXNwaS0+dHhfYnl0ZXMgPSBvcC0+ZHVtbXkubmJ5dGVzOw0KPiA+ICsJCXhxc3BpLT5y eF9ieXRlcyA9IG9wLT5kdW1teS5uYnl0ZXM7DQo+ID4gKwkJenlucV9xc3BpX3dyaXRlX29wKHhx c3BpLCBaWU5RX1FTUElfRklGT19ERVBUSCwgdHJ1ZSk7DQo+ID4gKwkJenlucV9xc3BpX3dyaXRl KHhxc3BpLCBaWU5RX1FTUElfSUVOX09GRlNFVCwNCj4gPiArCQkJCVpZTlFfUVNQSV9JWFJfUlhU WF9NQVNLKTsNCj4gPiArCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90 aW1lb3V0KCZ4cXNwaS0+ZGF0YV9jb21wbGV0aW9uLA0KPiA+ICsJCQkJCQkJICAgICAgIG1zZWNz X3RvX2ppZmZpZXMoMTAwMCkpKSB7DQo+ID4gKwkJCWVyciA9IC1FVElNRURPVVQ7DQo+ID4gKwkJ fQ0KPiA+ICsJCWtmcmVlKHRtcGJ1Zik7DQo+ID4gKwl9DQo+ID4gKwl6eW5xX3FzcGlfY29uZmln X29wKHhxc3BpLCBtZW0tPnNwaSk7DQo+ID4gKwlpZiAob3AtPmRhdGEubmJ5dGVzKSB7DQo+ID4g KwkJcmVpbml0X2NvbXBsZXRpb24oJnhxc3BpLT5kYXRhX2NvbXBsZXRpb24pOw0KPiA+ICsJCWlm IChvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX09VVCkgew0KPiA+ICsJCQl4cXNwaS0+dHhi dWYgPSAodTggKilvcC0+ZGF0YS5idWYub3V0Ow0KPiA+ICsJCQl4cXNwaS0+dHhfYnl0ZXMgPSBv cC0+ZGF0YS5uYnl0ZXM7DQo+ID4gKwkJCXhxc3BpLT5yeGJ1ZiA9IE5VTEw7DQo+ID4gKwkJCXhx c3BpLT5yeF9ieXRlcyA9IG9wLT5kYXRhLm5ieXRlczsNCj4gPiArCQl9IGVsc2Ugew0KPiA+ICsJ CQl4cXNwaS0+dHhidWYgPSBOVUxMOw0KPiA+ICsJCQl4cXNwaS0+cnhidWYgPSAodTggKilvcC0+ ZGF0YS5idWYuaW47DQo+ID4gKwkJCXhxc3BpLT5yeF9ieXRlcyA9IG9wLT5kYXRhLm5ieXRlczsN Cj4gPiArCQkJeHFzcGktPnR4X2J5dGVzID0gb3AtPmRhdGEubmJ5dGVzOw0KPiA+ICsJCX0NCj4g PiArDQo+ID4gKwkJenlucV9xc3BpX3dyaXRlX29wKHhxc3BpLCBaWU5RX1FTUElfRklGT19ERVBU SCwgdHJ1ZSk7DQo+ID4gKwkJenlucV9xc3BpX3dyaXRlKHhxc3BpLCBaWU5RX1FTUElfSUVOX09G RlNFVCwNCj4gPiArCQkJCVpZTlFfUVNQSV9JWFJfUlhUWF9NQVNLKTsNCj4gPiArCQlpZiAoIXdh aXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZ4cXNwaS0+ZGF0YV9jb21w bGV0aW9uLA0KPiA+ICsJCQkJCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpKSB7DQo+ ID4gKwkJCWVyciA9IC1FVElNRURPVVQ7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsJenlucV9x c3BpX2NoaXBzZWxlY3QobWVtLT5zcGksIGZhbHNlKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZXJy Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVy X21lbV9vcHMgenlucV9xc3BpX21lbV9vcHMgPSB7DQo+ID4gKwkuc3VwcG9ydHNfb3AgPSB6eW5x X3FzcGlfc3VwcG9ydHNfb3AsDQo+ID4gKwkuZXhlY19vcCA9IHp5bnFfcXNwaV9leGVjX21lbV9v cCwNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB6eW5xX3FzcGlfcHJvYmUgLSBQ cm9iZSBtZXRob2QgZm9yIHRoZSBRU1BJIGRyaXZlcg0KPiA+ICsgKiBAcGRldjoJUG9pbnRlciB0 byB0aGUgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGZ1 bmN0aW9uIGluaXRpYWxpemVzIHRoZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzIGFuZCB0aGUgaGFy ZHdhcmUuDQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzIGFuZCBlcnJvciB2 YWx1ZSBvbiBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50IHp5bnFfcXNwaV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7DQo+ID4gKwlpbnQgcmV0ID0gMDsNCj4g PiArCXN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RscjsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwZGV2LT5kZXY7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9u b2RlOw0KPiA+ICsJc3RydWN0IHp5bnFfcXNwaSAqeHFzcGk7DQo+ID4gKwlzdHJ1Y3QgcmVzb3Vy Y2UgKnJlczsNCj4gPiArCXUzMiBudW1fY3M7DQo+ID4gKw0KPiA+ICsJY3RsciA9IHNwaV9hbGxv Y19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCp4cXNwaSkpOw0KPiA+ICsJaWYgKCFjdGxyKQ0K PiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiArCXhxc3BpID0gc3BpX2NvbnRyb2xs ZXJfZ2V0X2RldmRhdGEoY3Rscik7DQo+ID4gKwl4cXNwaS0+ZGV2ID0gZGV2Ow0KPiA+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgeHFzcGkpOw0KPiA+ICsJY3Rsci0+bWVtX29wcyA9ICZ6 eW5xX3FzcGlfbWVtX29wczsNCj4gPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2 LCBJT1JFU09VUkNFX01FTSwgMCk7DQo+ID4gKwl4cXNwaS0+cmVncyA9IGRldm1faW9yZW1hcF9y ZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOw0KPiA+ICsJaWYgKElTX0VSUih4cXNwaS0+cmVncykp IHsNCj4gPiArCQlyZXQgPSBQVFJfRVJSKHhxc3BpLT5yZWdzKTsNCj4gPiArCQlnb3RvIHJlbW92 ZV9tYXN0ZXI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJeHFzcGktPnBjbGsgPSBkZXZtX2Nsa19n ZXQoJnBkZXYtPmRldiwgInBjbGsiKTsNCj4gPiArCWlmIChJU19FUlIoeHFzcGktPnBjbGspKSB7 DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNsayBjbG9jayBub3QgZm91bmQuXG4iKTsN Cj4gPiArCQlyZXQgPSBQVFJfRVJSKHhxc3BpLT5wY2xrKTsNCj4gPiArCQlnb3RvIHJlbW92ZV9t YXN0ZXI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaW5pdF9jb21wbGV0aW9uKCZ4cXNwaS0+ZGF0 YV9jb21wbGV0aW9uKTsNCj4gPiArDQo+ID4gKwl4cXNwaS0+cmVmY2xrID0gZGV2bV9jbGtfZ2V0 KCZwZGV2LT5kZXYsICJyZWZfY2xrIik7DQo+ID4gKwlpZiAoSVNfRVJSKHhxc3BpLT5yZWZjbGsp KSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVmX2NsayBjbG9jayBub3QgZm91bmQu XG4iKTsNCj4gPiArCQlyZXQgPSBQVFJfRVJSKHhxc3BpLT5yZWZjbGspOw0KPiA+ICsJCWdvdG8g cmVtb3ZlX21hc3RlcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBjbGtfcHJlcGFyZV9l bmFibGUoeHFzcGktPnBjbGspOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoJnBk ZXYtPmRldiwgIlVuYWJsZSB0byBlbmFibGUgQVBCIGNsb2NrLlxuIik7DQo+ID4gKwkJZ290byBy ZW1vdmVfbWFzdGVyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZSh4cXNwaS0+cmVmY2xrKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJVbmFibGUgdG8gZW5hYmxlIGRldmljZSBjbG9jay5cbiIpOw0KPiA+ICsJCWdv dG8gY2xrX2Rpc19wY2xrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFFTUEkgY29udHJvbGxl ciBpbml0aWFsaXphdGlvbnMgKi8NCj4gPiArCXp5bnFfcXNwaV9pbml0X2h3KHhxc3BpKTsNCj4g PiArDQo+ID4gKwl4cXNwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gPiAr CWlmICh4cXNwaS0+aXJxIDw9IDApIHsNCj4gPiArCQlyZXQgPSAtRU5YSU87DQo+ID4gKwkJZGV2 X2VycigmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlIG5vdCBmb3VuZFxuIik7DQo+ID4gKwkJZ290 byByZW1vdmVfbWFzdGVyOw0KPiA+ICsJfQ0KPiA+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgm cGRldi0+ZGV2LCB4cXNwaS0+aXJxLCB6eW5xX3FzcGlfaXJxLA0KPiA+ICsJCQkgICAgICAgMCwg cGRldi0+bmFtZSwgeHFzcGkpOw0KPiA+ICsJaWYgKHJldCAhPSAwKSB7DQo+ID4gKwkJcmV0ID0g LUVOWElPOw0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxu Iik7DQo+ID4gKwkJZ290byByZW1vdmVfbWFzdGVyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAibnVtLWNzIiwNCj4g PiArCQkJCSAgICZudW1fY3MpOw0KPiA+ICsJaWYgKHJldCA8IDApDQo+ID4gKwkJY3Rsci0+bnVt X2NoaXBzZWxlY3QgPSBaWU5RX1FTUElfREVGQVVMVF9OVU1fQ1M7DQo+ID4gKwllbHNlDQo+ID4g KwkJY3Rsci0+bnVtX2NoaXBzZWxlY3QgPSBudW1fY3M7DQo+ID4gKwljdGxyLT5tb2RlX2JpdHMg PSAgU1BJX1JYX0RVQUwgfCBTUElfUlhfUVVBRCB8DQo+ID4gKwkJCSAgICBTUElfVFhfRFVBTCB8 IFNQSV9UWF9RVUFEOw0KPiA+ICsJY3Rsci0+bWVtX29wcyA9ICZ6eW5xX3FzcGlfbWVtX29wczsN Cj4gPiArCWN0bHItPnNldHVwID0genlucV9xc3BpX3NldHVwX29wOw0KPiA+ICsJY3Rsci0+bWF4 X3NwZWVkX2h6ID0gY2xrX2dldF9yYXRlKHhxc3BpLT5yZWZjbGspIC8gMjsNCj4gPiArCWN0bHIt PmRldi5vZl9ub2RlID0gbnA7DQo+ID4gKwlyZXQgPSBzcGlfcmVnaXN0ZXJfY29udHJvbGxlcihj dGxyKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzcGlf cmVnaXN0ZXJfbWFzdGVyIGZhaWxlZFxuIik7DQo+ID4gKwkJZ290byBjbGtfZGlzX2FsbDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArY2xrX2Rpc19hbGw6 DQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoeHFzcGktPnJlZmNsayk7DQo+ID4gK2Nsa19k aXNfcGNsazoNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4cXNwaS0+cGNsayk7DQo+ID4g K3JlbW92ZV9tYXN0ZXI6DQo+ID4gKwlzcGlfY29udHJvbGxlcl9wdXQoY3Rscik7DQo+ID4gKw0K PiA+ICsJcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHp5bnFf cXNwaV9yZW1vdmUgLSBSZW1vdmUgbWV0aG9kIGZvciB0aGUgUVNQSSBkcml2ZXINCj4gPiArICog QHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3R1cmUNCj4gPiArICoN Cj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgYSBkZXZpY2UgaXMgcGh5c2ljYWxs eSByZW1vdmVkIGZyb20gdGhlDQo+ID4gK3N5c3RlbSBvcg0KPiA+ICsgKiBpZiB0aGUgZHJpdmVy IG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZC4gSXQgZnJlZXMgYWxsIHJlc291cmNlcw0KPiA+ICth bGxvY2F0ZWQgdG8NCj4gPiArICogdGhlIGRldmljZS4NCj4gPiArICoNCj4gPiArICogUmV0dXJu OgkwIG9uIHN1Y2Nlc3MgYW5kIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4g K3N0YXRpYyBpbnQgenlucV9xc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KSB7DQo+ID4gKwlzdHJ1Y3QgenlucV9xc3BpICp4cXNwaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOw0KPiA+ICsNCj4gPiArCXp5bnFfcXNwaV93cml0ZSh4cXNwaSwgWllOUV9RU1BJX0VO QUJMRV9PRkZTRVQsIDApOw0KPiA+ICsNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4cXNw aS0+cmVmY2xrKTsNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4cXNwaS0+cGNsayk7DQo+ ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHp5bnFfcXNwaV9vZl9tYXRjaFtdID0gew0KPiA+ICsJeyAuY29t cGF0aWJsZSA9ICJ4bG54LHp5bnEtcXNwaS0xLjAiLCB9LA0KPiA+ICsJeyAvKiBlbmQgb2YgdGFi bGUgKi8gfQ0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgenlu cV9xc3BpX29mX21hdGNoKTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHp5bnFfcXNwaV9kcml2 ZXIgLSBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBRU1BJIHBsYXRmb3JtIGRyaXZlcg0KPiA+ ICsqLyBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eW5xX3FzcGlfZHJpdmVyID0gew0K PiA+ICsJLnByb2JlID0genlucV9xc3BpX3Byb2JlLA0KPiA+ICsJLnJlbW92ZSA9IHp5bnFfcXNw aV9yZW1vdmUsDQo+ID4gKwkuZHJpdmVyID0gew0KPiA+ICsJCS5uYW1lID0gInp5bnEtcXNwaSIs DQo+ID4gKwkJLm9mX21hdGNoX3RhYmxlID0genlucV9xc3BpX29mX21hdGNoLA0KPiA+ICsJfSwN Cj4gPiArfTsNCj4gPiArDQo+ID4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoenlucV9xc3BpX2Ry aXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsNCj4gPiAr TU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggWnlucSBRU1BJIGRyaXZlciIpOyBNT0RVTEVfTElD RU5TRSgiR1BMIik7DQo+ID4NCg0K