Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp894035ybi; Fri, 14 Jun 2019 05:14:58 -0700 (PDT) X-Google-Smtp-Source: APXvYqxxqCCBUTDlw5vEH1eT2V03u20kzAle0At/Zkf5DJ8fxot9nQW/lb691Ypf9voHUwfMbW+d X-Received: by 2002:a63:4104:: with SMTP id o4mr36591353pga.345.1560514498267; Fri, 14 Jun 2019 05:14:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560514498; cv=none; d=google.com; s=arc-20160816; b=FIRFtbNRA7W6SPRLE5dvYFwd25CPfxlZ+qmxxS5F5zb6HG0/LO4qtHpXedIydtnEi1 ybxicAZOw9mdC56NRHz+K1lMCOmNX31PVAHf+c9Fl+eHYi5r+tI7xUDygpm8Zjn2IOtu jl8OK0RRZCuslLtUvpx7Ctf4q5GZa6CuyFfT+D7axBTkyjVbWGsq4xxDOrer+ypHDnnF b8h70sT2BxIXZBB1tSTEcBLPSwx3xOz8pw3p1P5xqKpBj4c3RkRczIIJ7c4TOW3u9IQK 5vzzlIlNLqGooJ4GiMyYylzIK0tfcxH8wsDaZgDUSbZWIf8rZF+RkQLhbgn036uenojo aG/w== 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=n0zLFlK/pu83mTz9SOjEgQhE8bI5qWdlOY08H1Q9a2o=; b=L0EuaylFn+jvW33XQs5PH4wSF0GlJN54XZuqlFOzumoxcvyzvLzl1fPs5YWn6Xp5Mi qBSoSpqpiH2yqNvb9eebCU9ByUVy3igYjH4B0P2wOFAjzjI9Y8YC/e3BY0XihOJz+Xso qmbK5xyAj4J6Yv/GELbMf0k8RJoQRL1OwkTMtI+xo4wu2iQh2CYoGDFwUwFnx2/VgaGx gn2QYbU5OvYZNjEVJ0eAIbQcGaYOzNJaJuT3rUVX4h5XoT2+7f2BqpU/XaY0cog4kZsf 4Ll+nDm6DRfzmLVVBlLpDJ40WEEXFbK+9gu+KLlZTkp4PS47QtWFTkU3YsqBFgdzOGA1 EuTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xilinx.onmicrosoft.com header.s=selector1-xilinx-onmicrosoft-com header.b=YFaC3C3O; 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 i8si2196017pju.32.2019.06.14.05.14.41; Fri, 14 Jun 2019 05:14:58 -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=@xilinx.onmicrosoft.com header.s=selector1-xilinx-onmicrosoft-com header.b=YFaC3C3O; 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 S1727806AbfFNMNI (ORCPT + 99 others); Fri, 14 Jun 2019 08:13:08 -0400 Received: from mail-eopbgr690086.outbound.protection.outlook.com ([40.107.69.86]:60934 "EHLO NAM04-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727536AbfFNMNH (ORCPT ); Fri, 14 Jun 2019 08:13:07 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xilinx.onmicrosoft.com; s=selector1-xilinx-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n0zLFlK/pu83mTz9SOjEgQhE8bI5qWdlOY08H1Q9a2o=; b=YFaC3C3OrBg/gcI4ZKLBScVkioz9FaM5AflZuw2vuh3YYTprxaVkt2fsj2DmE5s/jjSFtibphjGbMoIPuwDKPhruF8g4bxyVXyyUIswROCzYXFAVMbO54XFhcBrd7RCJuBTh8jYCtg0rNY9uVnlRqwxvyDjPeeIMnsheHDOWPus= Received: from CH2PR02MB6088.namprd02.prod.outlook.com (52.132.228.94) by CH2PR02MB6104.namprd02.prod.outlook.com (52.132.228.158) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1987.12; Fri, 14 Jun 2019 12:12:44 +0000 Received: from CH2PR02MB6088.namprd02.prod.outlook.com ([fe80::d109:38a2:f2d5:b351]) by CH2PR02MB6088.namprd02.prod.outlook.com ([fe80::d109:38a2:f2d5:b351%7]) with mapi id 15.20.1965.017; Fri, 14 Jun 2019 12:12:44 +0000 From: Vishal Sagar To: Hyun Kwon CC: Hyun Kwon , Laurent Pinchart , Mauro Carvalho Chehab , Michal Simek , Rob Herring , Mark Rutland , "linux-kernel@vger.kernel.org" , "linux-media@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , Dinesh Kumar , Sandip Kothari , Vishal Sagar Subject: RE: [PATCH 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Topic: [PATCH 2/2] media: v4l: xilinx: Add Xilinx UHD-SDI Rx Subsystem driver Thread-Index: AQHVGt1y9b6kdvITzkGymcoGfLMXzqaaMmUAgADlC1A= Date: Fri, 14 Jun 2019 12:12:43 +0000 Message-ID: References: <1559656556-79174-1-git-send-email-vishal.sagar@xilinx.com> <1559656556-79174-3-git-send-email-vishal.sagar@xilinx.com> <20190613220507.GA2473@smtp.xilinx.com> In-Reply-To: <20190613220507.GA2473@smtp.xilinx.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=vsagar@xilinx.com; x-originating-ip: [149.199.50.133] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0c13284b-3ff9-4de6-a907-08d6f0c19b0c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:CH2PR02MB6104; x-ms-traffictypediagnostic: CH2PR02MB6104: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1186; x-forefront-prvs: 0068C7E410 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(346002)(39860400002)(366004)(396003)(136003)(51914003)(13464003)(54094003)(43544003)(199004)(52314003)(189003)(25786009)(7736002)(6506007)(102836004)(66446008)(478600001)(6246003)(52536014)(186003)(66066001)(86362001)(4326008)(53946003)(71200400001)(71190400001)(30864003)(305945005)(99286004)(53546011)(6636002)(54906003)(5660300002)(33656002)(7696005)(2906002)(26005)(74316002)(76176011)(476003)(256004)(316002)(64756008)(486006)(55016002)(68736007)(53936002)(14454004)(14444005)(11346002)(446003)(9686003)(81166006)(8936002)(107886003)(73956011)(66556008)(81156014)(229853002)(6862004)(6436002)(76116006)(8676002)(6116002)(3846002)(66476007)(66946007)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:CH2PR02MB6104;H:CH2PR02MB6088.namprd02.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX: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: aBod90ozpX71ojL2ssJ7tAfcgFVID/ixvoiL5+RvyLP83mA+L4WQsZeHWZQ3fA35YSzzr3CxD7EQAPcrBGzyfw7olGndQYOQRlN+8yfGwMDIPcJmoIZa3o2LylK4tY2gvWAkqIuU0jOd0A696CwGo7Qf+8SDLAAl7HljKNmNP3p/xjm7JpEIuY/AlIy9DbtpZLZMDKQ5u7dSevBohmhIwL0hx9O1GKlpaR5mo0o8Ix9++GjItuhfPW2dkswoabBPjni57OH0SJ2ttTdYUTZfjFUvVTdHUx3XHX6L84M34wBksIdO9tZX5A1fovtOVjW1KumJQYa3AtKxrEpIOz41UEBa9/c6J/YZ6Zt9QycUrmUq+sCB0RGdqpVkqYqHeT2yPVuDsVLq1U0/zSdMKZ5BmryMAzyhBjpUs5w1g9nSXDc= 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: 0c13284b-3ff9-4de6-a907-08d6f0c19b0c X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2019 12:12:43.8317 (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-CrossTenant-userprincipalname: vsagar@xilinx.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR02MB6104 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSHl1biwNCg0KVGhhbmtzIGZvciByZXZpZXdpbmcgdGhlIGNvZGUuIA0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEh5dW4gS3dvbiBbbWFpbHRvOmh5dW4ua3dvbkB4 aWxpbnguY29tXQ0KPiBTZW50OiBGcmlkYXksIEp1bmUgMTQsIDIwMTkgMzozNSBBTQ0KPiBUbzog VmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4NCj4gQ2M6IEh5dW4gS3dvbiA8 aHl1bmtAeGlsaW54LmNvbT47IExhdXJlbnQgUGluY2hhcnQNCj4gPGxhdXJlbnQucGluY2hhcnRA aWRlYXNvbmJvYXJkLmNvbT47IE1hdXJvIENhcnZhbGhvIENoZWhhYg0KPiA8bWNoZWhhYkBrZXJu ZWwub3JnPjsgTWljaGFsIFNpbWVrIDxtaWNoYWxzQHhpbGlueC5jb20+OyBSb2IgSGVycmluZw0K PiA8cm9iaCtkdEBrZXJuZWwub3JnPjsgTWFyayBSdXRsYW5kIDxtYXJrLnJ1dGxhbmRAYXJtLmNv bT47IGxpbnV4LQ0KPiBrZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eC1tZWRpYUB2Z2VyLmtl cm5lbC5vcmc7IGxpbnV4LWFybS0NCj4ga2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7IGRldmlj ZXRyZWVAdmdlci5rZXJuZWwub3JnOyBEaW5lc2ggS3VtYXINCj4gPGRpbmVzaGtAeGlsaW54LmNv bT47IFNhbmRpcCBLb3RoYXJpIDxzYW5kaXBrQHhpbGlueC5jb20+DQo+IFN1YmplY3Q6IFJlOiBb UEFUQ0ggMi8yXSBtZWRpYTogdjRsOiB4aWxpbng6IEFkZCBYaWxpbnggVUhELVNESSBSeCBTdWJz eXN0ZW0NCj4gZHJpdmVyDQo+IA0KPiBIaSBWaXNoYWwsDQo+IA0KPiBUaGFua3MgZm9yIHRoZSBw YXRjaC4NCj4gDQo+IE9uIFR1ZSwgMjAxOS0wNi0wNCBhdCAwNjo1NTo1NiAtMDcwMCwgVmlzaGFs IFNhZ2FyIHdyb3RlOg0KPiA+IFRoZSBYaWxpbnggVUhELVNESSBSeCBzdWJzeXN0ZW0gc29mdCBJ UCBpcyB1c2VkIHRvIGNhcHR1cmUgbmF0aXZlIFNESQ0KPiA+IHN0cmVhbXMgZnJvbSBTREkgc291 cmNlcyBsaWtlIFNESSBicm9hZGNhc3QgZXF1aXBtZW50IGxpa2UgY2FtZXJhcyBhbmQNCj4gPiBt aXhlcnMuIFRoaXMgYmxvY2sgb3V0cHV0cyBlaXRoZXIgbmF0aXZlIFNESSwgbmF0aXZlIHZpZGVv IG9yDQo+ID4gQVhJNC1TdHJlYW0gY29tcGxpYW50IGRhdGEgc3RyZWFtIGZvciBmdXJ0aGVyIHBy b2Nlc3NpbmcuIFBsZWFzZSByZWZlcg0KPiA+IHRvIFBHMjkwIGZvciBkZXRhaWxzLg0KPiA+DQo+ ID4gVGhlIGRyaXZlciBpcyB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgSVAgdG8gYWRkIGZyYW1lciwg c2VhcmNoIGZvcg0KPiA+IHNwZWNpZmljIG1vZGVzLCBnZXQgdGhlIGRldGVjdGVkIG1vZGUsIHN0 cmVhbSBwYXJhbWV0ZXJzLCBlcnJvcnMsIGV0Yy4NCj4gPiBJdCBhbHNvIGdlbmVyYXRlcyBldmVu dHMgZm9yIHZpZGVvIGxvY2svdW5sb2NrLCBicmlkZ2Ugb3Zlci91bmRlciBmbG93Lg0KPiA+DQo+ ID4gVGhlIGRyaXZlciBzdXBwb3J0cyBvbmx5IDEwIGJwYyBZVVYgNDIyIG1lZGlhIGJ1cyBmb3Jt YXQuIEl0IGFsc28NCj4gPiBkZWNvZGVzIHRoZSBzdHJlYW0gcGFyYW1ldGVycyBiYXNlZCBvbiB0 aGUgU1QzNTIgcGFja2V0IGVtYmVkZGVkIGluIHRoZQ0KPiA+IHN0cmVhbS4gSW4gY2FzZSB0aGUg U1QzNTIgcGFja2V0IGlzbid0IHByZXNlbnQgaW4gdGhlIHN0cmVhbSwgdGhlIGNvcmUncw0KPiA+ IGRldGVjdGVkIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8gc2V0IHN0cmVhbSBwcm9wZXJ0aWVzLg0K PiA+DQo+ID4gVGhlIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgb25seSB0aGUgQVhJNC1TdHJl YW0gY29uZmlndXJhdGlvbi4NCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFZpc2hhbCBTYWdhciA8 dmlzaGFsLnNhZ2FyQHhpbGlueC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0veGlsaW54L0tjb25maWcgICAgICAgICAgfCAgIDExICsNCj4gPiAgZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS94aWxpbngvTWFrZWZpbGUgICAgICAgICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3hpbGlueC94aWxpbngtc2Rpcnhzcy5jIHwgMTg0Ng0KPiArKysrKysr KysrKysrKysrKysrKysrKysNCj4gPiAgaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC1zZGlyeHNz LmggICAgICAgICAgICB8ICAgNjMgKw0KPiA+ICBpbmNsdWRlL3VhcGkvbGludXgveGlsaW54LXY0 bDItY29udHJvbHMuaCAgICAgIHwgICAzMCArDQo+ID4gIGluY2x1ZGUvdWFwaS9saW51eC94aWxp bngtdjRsMi1ldmVudHMuaCAgICAgICAgfCAgICA5ICsNCj4gPiAgNiBmaWxlcyBjaGFuZ2VkLCAx OTYwIGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEv cGxhdGZvcm0veGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGluY2x1ZGUvdWFwaS9saW51eC94aWxpbngtc2Rpcnhzcy5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS94aWxpbngvS2NvbmZpZw0KPiBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4gPiBpbmRleCBjZDFhMGZkLi4wYzY4Y2FhIDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L0tjb25maWcNCj4g PiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9LY29uZmlnDQo+ID4gQEAgLTIw LDYgKzIwLDE3IEBAIGNvbmZpZyBWSURFT19YSUxJTlhfQ1NJMlJYU1MNCj4gPiAgCSAgQnJpZGdl LiBUaGUgZHJpdmVyIGlzIHVzZWQgdG8gc2V0IHRoZSBudW1iZXIgb2YgYWN0aXZlIGxhbmVzIGFu ZA0KPiA+ICAJICBnZXQgc2hvcnQgcGFja2V0IGRhdGEuDQo+ID4NCj4gPiArY29uZmlnIFZJREVP X1hJTElOWF9TRElSWFNTDQo+ID4gKwl0cmlzdGF0ZSAiWGlsaW54IFVIRCBTREkgUnggU3Vic3lz dGVtIg0KPiA+ICsJaGVscA0KPiA+ICsJICBEcml2ZXIgZm9yIFhpbGlueCBVSEQtU0RJIFJ4IFN1 YnN5c3RlbS4gVGhpcyBpcyBhIFY0TCBzdWItZGV2aWNlDQo+ID4gKwkgIGJhc2VkIGRyaXZlciB0 aGF0IHRha2VzIGlucHV0IGZyb20gYSBTREkgc291cmNlIGxpa2UgU0RJIGNhbWVyYSBhbmQNCj4g PiArCSAgY29udmVydHMgaXQgaW50byBhbiBBWEk0LVN0cmVhbS4gVGhlIHN1YnN5c3RlbSBjb21w cmlzZXMgb2YgYSBTTVBURQ0KPiA+ICsJICBVSEQtU0RJIFJ4IGNvcmUsIGEgU0RJIFJ4IHRvIE5h dGl2ZSBWaWRlbyBicmlkZ2UgYW5kIGEgVmlkZW8gSW4gdG8NCj4gPiArCSAgQVhJNC1TdHJlYW0g YnJpZGdlLiBUaGUgZHJpdmVyIGlzIHVzZWQgdG8gc2V0IGRpZmZlcmVudCBzdHJlYW0NCj4gPiAr CSAgZGV0ZWN0aW9uIG1vZGVzIGFuZCBpZGVudGlmeSBzdHJlYW0gcHJvcGVydGllcyB0byBwcm9w ZXJseSBjb25maWd1cmUNCj4gPiArCSAgZG93bnN0cmVhbS4NCj4gPiArDQo+ID4gIGNvbmZpZyBW SURFT19YSUxJTlhfVFBHDQo+ID4gIAl0cmlzdGF0ZSAiWGlsaW54IFZpZGVvIFRlc3QgUGF0dGVy biBHZW5lcmF0b3IiDQo+ID4gIAlkZXBlbmRzIG9uIFZJREVPX1hJTElOWA0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmlsZQ0KPiBiL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4gaW5kZXggNjExOWEzNC4uMjIzZjJl YSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3hpbGlueC9NYWtlZmls ZQ0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0veGlsaW54L01ha2VmaWxlDQo+ID4g QEAgLTQsNSArNCw2IEBAIHhpbGlueC12aWRlby1vYmpzICs9IHhpbGlueC1kbWEubyB4aWxpbngt dmlwLm8geGlsaW54LXZpcHAubw0KPiA+DQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlgp ICs9IHhpbGlueC12aWRlby5vDQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlhfQ1NJMlJY U1MpICs9IHhpbGlueC1jc2kycnhzcy5vDQo+ID4gK29iai0kKENPTkZJR19WSURFT19YSUxJTlhf U0RJUlhTUykgKz0geGlsaW54LXNkaXJ4c3Mubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fWElM SU5YX1RQRykgKz0geGlsaW54LXRwZy5vDQo+ID4gIG9iai0kKENPTkZJR19WSURFT19YSUxJTlhf VlRDKSArPSB4aWxpbngtdnRjLm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v eGlsaW54L3hpbGlueC1zZGlyeHNzLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAuLmJhMmQ5ZDANCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS94aWxpbngveGlsaW54LXNkaXJ4c3MuYw0KPiA+IEBAIC0wLDAgKzEs MTg0NiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCj4gPiAr LyoNCj4gPiArICogRHJpdmVyIGZvciBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbQ0KPiA+ICsgKg0K PiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE5IFhpbGlueCwgSW5jLg0KPiA+ICsgKg0K PiA+ICsgKiBDb250YWN0czogVmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGlsaW54LmNvbT4N Cg0KPHNuaXA+DQoNCj4gPiArLyoNCj4gPiArICogU0RJIFJ4IHJlZ2lzdGVyIG1hcCwgYml0bWFz ayBhbmQgb2Zmc2V0cw0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBYU0RJUlhfUlNUX0NUUkxfUkVH CQkweDAwDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX1JFRwkJMHgwNA0KPiA+ICsjZGVm aW5lIFhTRElSWF9HTEJMX0lFUl9SRUcJCTB4MEMNCj4gPiArI2RlZmluZSBYU0RJUlhfSVNSX1JF RwkJCTB4MTANCj4gPiArI2RlZmluZSBYU0RJUlhfSUVSX1JFRwkJCTB4MTQNCj4gPiArI2RlZmlu ZSBYU0RJUlhfU1QzNTJfVkFMSURfUkVHCQkweDE4DQo+ID4gKyNkZWZpbmUgWFNESVJYX1NUMzUy X0RTMV9SRUcJCTB4MUMNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFMzX1JFRwkJMHgyMA0K PiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzVfUkVHCQkweDI0DQo+ID4gKyNkZWZpbmUgWFNE SVJYX1NUMzUyX0RTN19SRUcJCTB4MjgNCj4gPiArI2RlZmluZSBYU0RJUlhfU1QzNTJfRFM5X1JF RwkJMHgyQw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzExX1JFRwkJMHgzMA0KPiA+ICsj ZGVmaW5lIFhTRElSWF9TVDM1Ml9EUzEzX1JFRwkJMHgzNA0KPiA+ICsjZGVmaW5lIFhTRElSWF9T VDM1Ml9EUzE1X1JFRwkJMHgzOA0KPiA+ICsjZGVmaW5lIFhTRElSWF9WRVJTSU9OX1JFRwkJMHgz Qw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TU19DT05GSUdfUkVHCQkweDQwDQo+ID4gKyNkZWZpbmUg WFNESVJYX01PREVfREVUX1NUQVRfUkVHCTB4NDQNCj4gPiArI2RlZmluZSBYU0RJUlhfVFNfREVU X1NUQVRfUkVHCQkweDQ4DQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9TVEFUX1JFRwkJMHg0Qw0K PiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0VOX1JFRwkweDUwDQo+ID4gKyNkZWZpbmUg WFNESVJYX0VESF9FUlJDTlRfUkVHCQkweDU0DQo+ID4gKyNkZWZpbmUgWFNESVJYX0NSQ19FUlJD TlRfUkVHCQkweDU4DQo+ID4gKyNkZWZpbmUgWFNESVJYX1ZJRF9MT0NLX1dJTkRPV19SRUcJMHg1 Qw0KPiA+ICsjZGVmaW5lIFhTRElSWF9TQl9SWF9TVFNfUkVHCQkweDYwDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFhTRElSWF9SU1RfQ1RSTF9TU19FTl9NQVNLCQkJQklUKDApDQo+ID4gKyNkZWZpbmUg WFNESVJYX1JTVF9DVFJMX1NSU1RfTUFTSwkJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9S U1RfQ1RSTF9SU1RfQ1JDX0VSUkNOVF9NQVNLCQlCSVQoMikNCj4gPiArI2RlZmluZSBYU0RJUlhf UlNUX0NUUkxfUlNUX0VESF9FUlJDTlRfTUFTSwkJQklUKDMpDQo+ID4gKyNkZWZpbmUgWFNESVJY X1JTVF9DVFJMX1NESVJYX0JSSURHRV9FTkJfTUFTSwkJQklUKDgpDQo+ID4gKyNkZWZpbmUgWFNE SVJYX1JTVF9DVFJMX1ZJRElOX0FYSTRTX01PRF9FTkJfTUFTSwlCSVQoOSkNCj4gDQo+IEknZCBy YXRoZXIgcHV0IHRoZXNlIHVuZGVyIGNvcnJlc3BvbmRpbmcgb2Zmc2V0cy4gSW4gdGhhdCB3YXks IGl0J2QgYmUgZWFzaWVyDQo+IHRvIGZvbGxvdy4gVXAgdG8geW91Lg0KPiANCg0KSSB3b3VsZCBs aWtlIHRvIGtlZXAgdGhpcyBhcyBpcy4NCg0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfTURM X0NUUkxfRlJNX0VOX01BU0sJCUJJVCg0KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9N T0RFX0RFVF9FTl9NQVNLCUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RF X0hEX0VOX01BU0sJCUJJVCg4KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFX1NE X0VOX01BU0sJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9NRExfQ1RSTF9NT0RFXzNHX0VO X01BU0sJCUJJVCgxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV82R19FTl9N QVNLCQlCSVQoMTEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX01ETF9DVFJMX01PREVfMTJHSV9FTl9N QVNLCUJJVCgxMikNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV8xMkdGX0VOX01B U0sJQklUKDEzKQ0KPiANCj4gVGhlc2UgYXJlIG5vdCBhY3R1YWxseSBtYXNrLCBzbyBJJ2QgcmVt b3ZlIF9NQVNLLiBCdXQgaXQgbWF5YmUganVzdCBtZS4NCj4gDQoNCkkgd291bGQgbGlrZSB0byBr ZWVwIHRoaXMgYXMgaXMuDQoNCj4gPiArI2RlZmluZSBYU0RJUlhfTURMX0NUUkxfTU9ERV9BVVRP X0RFVF9NQVNLCUdFTk1BU0soMTMsIDgpDQo+ID4gKw0KDQo8c25pcD4NCg0KPiA+ICsjZGVmaW5l IFhTRElSWF9NT0RFXzEyR0lfTUFTSwkweDUNCj4gPiArI2RlZmluZSBYU0RJUlhfTU9ERV8xMkdG X01BU0sJMHg2DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBNYXhpbXVtIG51bWJlciBvZiBldmVu dHMgcGVyIGZpbGUgaGFuZGxlLg0KPiA+ICsgKi8NCj4gDQo+IE5pdCwgVGhpcyBkb2Vzbid0IGhh dmUgdG8gYmUgbXVsdGllbGluZSBjb21tZW50Lg0KPiANCg0KSSB3aWxsIG1ha2UgdGhpcyBhIHNp bmdsZSBsaW5lIGNvbW1lbnQgaW4gdjIuDQoNCj4gPiArI2RlZmluZSBYU0RJUlhfTUFYX0VWRU5U UwkoMTI4KQ0KPiA+ICsNCj4gPiArLyogU1QzNTIgcmVsYXRlZCBtYWNyb3MgKi8NCg0KPHNuaXA+ DQoNCj4gPiArc3RydWN0IHhzZGlyeHNzX2NvcmUgew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 Ow0KPiA+ICsJdm9pZCBfX2lvbWVtICppb21lbTsNCj4gPiArCWludCBpcnE7DQo+ID4gKwlib29s IGluY2x1ZGVfZWRoOw0KPiANCj4gSSB3b25kZXIgaWYgdGhpcyBpcyByZXF1aXJlZC4gSSBndWVz cyBpdCdzIG5vdCBjcml0aWNhbCBhbnl3YXksIHNvIHVwIHRvIHlvdS4NCj4gDQoNCkkgd291bGQg a2VlcCB0aGlzIGFzIGl0IGlzIGFzIGl04oCZcyBhIElQIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRp b24uDQoNCj4gPiArCWludCBtb2RlOw0KPiA+ICsJc3RydWN0IGNsayAqYXhpX2NsazsNCj4gPiAr CXN0cnVjdCBjbGsgKnNkaXJ4X2NsazsNCj4gPiArCXN0cnVjdCBjbGsgKnZpZG91dF9jbGs7DQo+ ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IHhzZGlyeHNzX3N0YXRlIC0g U0RJIFJ4IFN1YnN5c3RlbSBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqIEBjb3JlOiBDb3JlIHN0 cnVjdHVyZSBmb3IgTUlQSSBTREkgUnggU3Vic3lzdGVtDQo+ID4gKyAqIEBzdWJkZXY6IFRoZSB2 NGwyIHN1YmRldiBzdHJ1Y3R1cmUNCj4gPiArICogQGN0cmxfaGFuZGxlcjogY29udHJvbCBoYW5k bGVyDQo+ID4gKyAqIEBldmVudDogSG9sZHMgdGhlIHZpZGVvIHVubG9jayBldmVudA0KPiA+ICsg KiBAZm9ybWF0czogQWN0aXZlIFY0TDIgZm9ybWF0cyBvbiBlYWNoIHBhZA0KPiA+ICsgKiBAZGVm YXVsdF9mb3JtYXQ6IGRlZmF1bHQgVjRMMiBtZWRpYSBidXMgZm9ybWF0DQo+ID4gKyAqIEBmcmFt ZV9pbnRlcnZhbDogQ2FwdHVyZXMgdGhlIGZyYW1lIHJhdGUNCj4gPiArICogQHZpcF9mb3JtYXQ6 IGZvcm1hdCBpbmZvcm1hdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBhY3RpdmUgZm9ybWF0DQo+ ID4gKyAqIEBwYWRzOiBtZWRpYSBwYWRzDQo+ID4gKyAqIEBzdHJlYW1pbmc6IEZsYWcgZm9yIHN0 b3Jpbmcgc3RyZWFtaW5nIHN0YXRlDQo+ID4gKyAqIEB2aWRsb2NrZWQ6IEZsYWcgaW5kaWNhdGlu ZyBTREkgUnggaGFzIGxvY2tlZCBvbnRvIHZpZGVvIHN0cmVhbQ0KPiA+ICsgKiBAdHNfaXNfaW50 ZXJsYWNlZDogRmxhZyBpbmRpY2F0aW5nIFRyYW5zcG9ydCBTdHJlYW0gaXMgaW50ZXJsYWNlZC4N Cj4gPiArICoNCj4gPiArICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGRldmljZSBkcml2 ZXIgcmVsYXRlZCBwYXJhbWV0ZXJzDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgeHNkaXJ4c3Nfc3Rh dGUgew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX2NvcmUgY29yZTsNCj4gPiArCXN0cnVjdCB2NGwy X3N1YmRldiBzdWJkZXY7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3RybF9oYW5k bGVyOw0KPiA+ICsJc3RydWN0IHY0bDJfZXZlbnQgZXZlbnQ7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9t YnVzX2ZyYW1lZm10IGZvcm1hdHNbWFNESVJYX01FRElBX1BBRFNdOw0KPiANCj4gSXQncyBhbHdh eXMgc2luZ2xlIHBvcnQsIHNvIHRoaXMgZG9lc24ndCBoYXZlIHRvIGJlIGFuIGFycmF5Lg0KPiAN Cg0KSSB3aWxsIGZpeCB0aGlzIGluIHYyLg0KDQo+ID4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1l Zm10IGRlZmF1bHRfZm9ybWF0Ow0KPiA+ICsJc3RydWN0IHY0bDJfZnJhY3QgZnJhbWVfaW50ZXJ2 YWw7DQo+ID4gKwljb25zdCBzdHJ1Y3QgeHZpcF92aWRlb19mb3JtYXQgKnZpcF9mb3JtYXQ7DQo+ ID4gKwlzdHJ1Y3QgbWVkaWFfcGFkIHBhZHNbWFNESVJYX01FRElBX1BBRFNdOw0KPiANCj4gRGl0 dG8uDQo+IA0KDQpJIHdpbGwgZml4IHRoaXMgaW4gdjIuDQoNCj4gPiArCWJvb2wgc3RyZWFtaW5n Ow0KPiA+ICsJYm9vbCB2aWRsb2NrZWQ7DQo+ID4gKwlib29sIHRzX2lzX2ludGVybGFjZWQ7DQo+ ID4gK307DQo+ID4gKw0KDQo8c25pcD4NCg0KPiA+ICsNCj4gPiArCWRldl9kYmcoY29yZS0+ZGV2 LCAibWFzayA9IDB4JXhcbiIsIG1hc2spOw0KPiA+ICsNCj4gPiArCXZhbCA9IHhzZGlyeHNzX3Jl YWQoY29yZSwgWFNESVJYX01ETF9DVFJMX1JFRyk7DQo+ID4gKwl2YWwgJj0gfihYU0RJUlhfTURM X0NUUkxfTU9ERV9ERVRfRU5fTUFTSyk7DQo+ID4gKwl2YWwgJj0gfihYU0RJUlhfTURMX0NUUkxf TU9ERV9BVVRPX0RFVF9NQVNLKTsNCj4gPiArCXZhbCAmPSB+KFhTRElSWF9NRExfQ1RSTF9GT1JD RURfTU9ERV9NQVNLKTsNCj4gDQo+ICgpIGlzIG5vdCBuZWVkZWQgaGVyZS4gSSdkIGF2b2lkIHVu bmVlZGVkICgpLg0KPiANCg0KSSB3aWxsIGZpeCB0aGlzIGluIHYyLg0KDQo+ID4gKw0KPiA+ICsJ aWYgKGh3ZWlnaHQxNihtYXNrKSA+IDEpIHsNCg0KPHNuaXA+DQoNCj4gPiArCX0gZWxzZSB7DQo+ ID4gKwkJLyogRml4ZWQgTW9kZSAqLw0KPiA+ICsJCXUzMiBmb3JjZWRfbW9kZV9tYXNrID0gMDsN Cj4gDQo+IFNldHRpbmcgdGhpcyB1bmRlciBkZWZhdWx0IGJlbG93IHdvdWxkIG1ha2UgaXQgY2xl YXJlci4gQnV0IHVwIHRvIHlvdS4NCj4gDQoNCkkgd2lsbCBmaXggdGhpcyBpbiB2Mi4NCg0KPiA+ ICsNCj4gPiArCQlkZXZfZGJnKGNvcmUtPmRldiwgIkRldGVjdCBmaXhlZCBtb2RlXG4iKTsNCj4g PiArDQoNCjxzbmlwPg0KDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2RpcnhfZ2xvYmFsaW50 cihzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbCBmbGFnKQ0KPiA+ICt7DQo+ID4gKwlp ZiAoZmxhZykNCj4gDQo+IFRoZSBmbGFnIGNhbiBiZSBkZXRlcm1pbmVkIGF0IGJ1aWxkIHRpbWUs IHNvIHRoaXMgJ2lmJyBpc24ndCBuZWVkZWQuIFRoZW4NCj4gdGhlIGRpc2FibGluZyBjYWxsIGNh biBiZSBhZGRlZCB0byB4c2Rpcnhzc19yZW1vdmUoKS4NCj4gDQoNCkkgd2lsbCB0cnkgdG8gdGFr ZSBjYXJlIG9mIHRoaXMgaW4gdjIuDQoNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJY X0dMQkxfSUVSX1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfR0xCTF9JTlRSX0VOX01BU0spOw0K PiA+ICsJZWxzZQ0KPiA+ICsJCXhzZGlyeHNzX2Nscihjb3JlLCBYU0RJUlhfR0xCTF9JRVJfUkVH LA0KPiA+ICsJCQkgICAgIFhTRElSWF9HTEJMX0lOVFJfRU5fTUFTSyk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIHhzZGlyeF9jbGVhcmludHIoc3RydWN0IHhzZGlyeHNzX2NvcmUg KmNvcmUsIHUzMiBtYXNrKQ0KPiA+ICt7DQo+ID4gKwl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJY X0lTUl9SRUcsIG1hc2spOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rpcnhf dmlkX2JyaWRnZV9jb250cm9sKHN0cnVjdCB4c2Rpcnhzc19jb3JlICpjb3JlLCBib29sDQo+IGVu YWJsZSkNCj4gPiArew0KPiA+ICsJaWYgKGVuYWJsZSkNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29y ZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfU0RJ UlhfQlJJREdFX0VOQl9NQVNLKTsNCj4gPiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIoY29y ZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4gPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfU0RJ UlhfQlJJREdFX0VOQl9NQVNLKTsNCj4gDQo+IEV2ZW4gdGhlc2UgY2FuIGJlIGlubGluZWQuIEkg ZG9uJ3Qgc2VlIG5lZWQgZm9yIGhhdmluZyBkeW5hbWljIGNoZWNrLg0KPiANCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4X2F4aXM0X2JyaWRnZV9jb250cm9sKHN0cnVjdCB4 c2Rpcnhzc19jb3JlICpjb3JlLCBib29sDQo+IGVuYWJsZSkNCj4gPiArew0KPiA+ICsJaWYgKGVu YWJsZSkNCj4gPiArCQl4c2Rpcnhzc19zZXQoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywNCj4g PiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsNCj4g PiArCWVsc2UNCj4gPiArCQl4c2Rpcnhzc19jbHIoY29yZSwgWFNESVJYX1JTVF9DVFJMX1JFRywN Cj4gPiArCQkJICAgICBYU0RJUlhfUlNUX0NUUkxfVklESU5fQVhJNFNfTU9EX0VOQl9NQVNLKTsN Cj4gDQo+IERpdHRvLg0KPiANCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgeHNkaXJ4 X3N0cmVhbWZsb3dfY29udHJvbChzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSwgYm9vbA0KPiBl bmFibGUpDQo+ID4gK3sNCj4gPiArCS8qIFRoZSBzZGkgdG8gbmF0aXZlIGJyaWRnZSBpcyBmb2xs b3dlZCBieSBuYXRpdmUgdG8gYXhpczQgYnJpZGdlICovDQo+ID4gKwlpZiAoZW5hYmxlKSB7DQo+ ID4gKwkJeHNkaXJ4X2F4aXM0X2JyaWRnZV9jb250cm9sKGNvcmUsIGVuYWJsZSk7DQo+ID4gKwkJ eHNkaXJ4X3ZpZF9icmlkZ2VfY29udHJvbChjb3JlLCBlbmFibGUpOw0KPiA+ICsJfSBlbHNlIHsN Cj4gPiArCQl4c2RpcnhfdmlkX2JyaWRnZV9jb250cm9sKGNvcmUsIGVuYWJsZSk7DQo+ID4gKwkJ eHNkaXJ4X2F4aXM0X2JyaWRnZV9jb250cm9sKGNvcmUsIGVuYWJsZSk7DQo+ID4gKwl9DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHhzZGlyeF9zdHJlYW1kb3duY2Ioc3RydWN0IHhz ZGlyeHNzX2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArCXhzZGlyeF9zdHJlYW1mbG93X2NvbnRy b2woY29yZSwgZmFsc2UpOw0KPiA+ICt9DQo+IA0KPiBUaGVzZSB0aGluIHdyYXBlcnMgZG9uJ3Qg c2VlbSB1c2VmdWwuIFdvdWxkbid0IGl0IGJlIGJldHRlciB0byBpbmxpbmUgbW9zdCBvZg0KPiB0 aGVzZT8NCj4gDQoNCkkgd2lsbCBpbmxpbmUgdGhlc2UgZnVuY3Rpb25zIGluIHYyLg0KDQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rpcnhzc19nZXRfZnJhbWVyYXRlKHN0cnVjdCB2NGwyX2Zy YWN0ICpmcmFtZV9pbnRlcnZhbCwNCj4gPiArCQkJCSAgIHUzMiBmcmFtZXJhdGUpDQoNCjxzbmlw Pg0KDQo+ID4gKwl2YWwgPSB4c2Rpcnhzc19yZWFkKGNvcmUsIFhTRElSWF9UU19ERVRfU1RBVF9S RUcpOw0KPiA+ICsJaWYgKHZhbGlkICYgWFNESVJYX1NUMzUyX1ZBTElEX0RTMV9NQVNLKSB7DQo+ ID4gKwkJcGF5bG9hZCA9IHhzZGlyeHNzX3JlYWQoY29yZSwgWFNESVJYX1NUMzUyX0RTMV9SRUcp Ow0KPiA+ICsJCWJ5dGUxID0gKHBheWxvYWQgPj4gWFNUMzUyX1BBWUxPQURfQllURTFfU0hJRlQp ICYNCj4gPiArCQkJCVhTVDM1Ml9QQVlMT0FEX0JZVEVfTUFTSzsNCj4gPiArCQlhY3RpdmVfbHVt YSA9IChwYXlsb2FkICYNCj4gWFNUMzUyX0JZVEUzX0FDVF9MVU1BX0NPVU5UX01BU0spID4+DQo+ ID4gKwkJCQlYU1QzNTJfQllURTNfQUNUX0xVTUFfQ09VTlRfT0ZGU0VUOw0KPiA+ICsJCXBpY190 eXBlID0gKHBheWxvYWQgJiBYU1QzNTJfQllURTJfUElDX1RZUEVfTUFTSykgPj4NCj4gPiArCQkJ CVhTVDM1Ml9CWVRFMl9QSUNfVFlQRV9PRkZTRVQ7DQo+ID4gKwkJZnJhbWVyYXRlID0gKHBheWxv YWQgPj4gWFNUMzUyX0JZVEUyX0ZQU19TSElGVCkgJg0KPiA+ICsJCQkJWFNUMzUyX0JZVEUyX0ZQ U19NQVNLOw0KPiA+ICsJCXRzY2FuID0gKHBheWxvYWQgJiBYU1QzNTJfQllURTJfVFNfVFlQRV9N QVNLKSA+Pg0KPiA+ICsJCQkJWFNUMzUyX0JZVEUyX1RTX1RZUEVfT0ZGU0VUOw0KPiANCj4gUGxl YXNlIGFsaWduIGNvbnNpc3RlbnRseSB0aHJvdWdob3V0IHRoZSBwYXRjaC4gSSBiZWxpZXZlIHRo ZSBjaGVja3BhdGNoDQo+IC0tc3RyaWN0IHdhcm5zIG9uIHRoZXNlLg0KPiANCg0KQ2hlY2twYXRj aCBkaWRuJ3Qgd2FybiBhYm91dCB0aGVzZS4NCg0KPiA+ICsJCXNhbXBsaW5nID0gKHBheWxvYWQg JiBYU1QzNTJfQllURTNfQ09MT1JfRk9STUFUX01BU0spDQo+ID4+DQo+ID4gKwkJCSAgIFhTVDM1 Ml9CWVRFM19DT0xPUl9GT1JNQVRfT0ZGU0VUOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQlkZXZf ZGJnKGNvcmUtPmRldiwgIk5vIFNUMzUyIHBheWxvYWQgYXZhaWxhYmxlIDogTW9kZSA9DQo+ICVk XG4iLA0KPiA+ICsJCQltb2RlKTsNCj4gPiArCQlmcmFtZXJhdGUgPSAodmFsICYgWFNESVJYX1RT X0RFVF9TVEFUX1JBVEVfTUFTSykgPj4NCj4gPiArCQkJCVhTRElSWF9UU19ERVRfU1RBVF9SQVRF X09GRlNFVDsNCj4gPiArCQl0c2NhbiA9ICh2YWwgJiBYU0RJUlhfVFNfREVUX1NUQVRfU0NBTl9N QVNLKSA+Pg0KPiA+ICsJCQkJWFNESVJYX1RTX0RFVF9TVEFUX1NDQU5fT0ZGU0VUOw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCWZhbWlseSA9ICh2YWwgJiBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZ X01BU0spID4+DQo+ID4gKwkJICBYU0RJUlhfVFNfREVUX1NUQVRfRkFNSUxZX09GRlNFVDsNCj4g DQo+IEp1c3Qgbml0LiBBbGlnbm1lbnQuDQoNCk9rIEkgd2lsbCBmaXggdGhpcyBpbiB2Mi4NCg0K PiANCj4gPiArCXN0YXRlLT50c19pc19pbnRlcmxhY2VkID0gdHNjYW4gPyBmYWxzZSA6IHRydWU7 DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJ0c19pc19pbnRlcmxhY2VkID0gJWQs IGZhbWlseSA9ICVkXG4iLA0KPiA+ICsJCXN0YXRlLT50c19pc19pbnRlcmxhY2VkLCBmYW1pbHkp Ow0KPiA+ICsNCj4gPiArCXN3aXRjaCAobW9kZSkgew0KPiA+ICsJY2FzZSBYU0RJUlhfTU9ERV9I RF9NQVNLOg0KPiA+ICsJCWlmICghdmFsaWQpIHsNCj4gPiArCQkJLyogTm8gcGF5bG9hZCBvYnRh aW5lZCAqLw0KPiA+ICsJCQlkZXZfZGJnKGNvcmUtPmRldiwgImZyYW1lIHJhdGUgOiAlZCwgdHNj YW4gPSAlZFxuIiwNCj4gPiArCQkJCWZyYW1lcmF0ZSwgdHNjYW4pOw0KPiA+ICsJCQkvKg0KPiA+ ICsJCQkgKiBOT1RFIDogQSBwcm9ncmVzc2l2ZSBzZWdtZW50ZWQgZnJhbWUgcFNGIHdpbGwgYmUN Cj4gPiArCQkJICogcmVwb3J0ZWQgaW5jb3JyZWN0bHkgYXMgSW50ZXJsYWNlZCBhcyB3ZSByZWx5 IG9uIElQJ3MNCj4gPiArCQkJICogdHJhbnNwb3J0IHNjYW4gbG9ja2VkIGJpdC4NCj4gPiArCQkJ ICovDQo+ID4gKwkJCWRldl93YXJuKGNvcmUtPmRldiwgInBTRiB3aWxsIGJlIGluY29ycmVjdGx5 IHJlcG9ydGVkIGFzDQo+IEludGVybGFjZWRcbiIpOw0KPiA+ICsNCj4gPiArCQkJc3dpdGNoIChm cmFtZXJhdGUpIHsNCj4gPiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV8yM185OEha Og0KPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRFXzI0SFo6DQo+ID4gKwkJCWNh c2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfMjVIWjoNCj4gPiArCQkJY2FzZSBYU0RJUlhfVFNf REVUX1NUQVRfUkFURV8yOV85N0haOg0KPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9S QVRFXzMwSFo6DQo+ID4gKwkJCQlpZiAoZmFtaWx5ID09IFhTRElSWF9TTVBURV9TVF8yOTYpIHsN Cj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJCQlmb3JtYXQtPmhlaWdo dCA9IDcyMDsNCj4gPiArCQkJCQlmb3JtYXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ ICsJCQkJfSBlbHNlIGlmIChmYW1pbHkgPT0gWFNESVJYX1NNUFRFX1NUXzIwNDhfMikgew0KPiA+ ICsJCQkJCWZvcm1hdC0+d2lkdGggPSAyMDQ4Ow0KPiA+ICsJCQkJCWZvcm1hdC0+aGVpZ2h0ID0g MTA4MDsNCj4gPiArCQkJCQlpZiAodHNjYW4pDQo+ID4gKwkJCQkJCWZvcm1hdC0+ZmllbGQgPQ0K PiBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gKwkJCQkJZWxzZQ0KPiA+ICsJCQkJCQlmb3JtYXQtPmZp ZWxkID0NCj4gPiArCQkJCQkJCVY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsJCQkJfSBlbHNl IHsNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTkyMDsNCj4gPiArCQkJCQlmb3JtYXQtPmhl aWdodCA9IDEwODA7DQo+ID4gKwkJCQkJaWYgKHRzY2FuKQ0KPiA+ICsJCQkJCQlmb3JtYXQtPmZp ZWxkID0NCj4gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCQkJCWVsc2UNCj4gPiArCQkJCQkJZm9y bWF0LT5maWVsZCA9DQo+ID4gKwkJCQkJCQlWNEwyX0ZJRUxEX0FMVEVSTkFURTsNCj4gPiArCQkJ CX0NCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQljYXNlIFhTRElSWF9UU19ERVRfU1RBVF9SQVRF XzUwSFo6DQo+ID4gKwkJCWNhc2UgWFNESVJYX1RTX0RFVF9TVEFUX1JBVEVfNTlfOTRIWjoNCj4g PiArCQkJY2FzZSBYU0RJUlhfVFNfREVUX1NUQVRfUkFURV82MEhaOg0KPiA+ICsJCQkJaWYgKGZh bWlseSA9PSBYU0RJUlhfU01QVEVfU1RfMjc0KSB7DQo+ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9 IDE5MjA7DQo+ID4gKwkJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ICsJCQkJfSBlbHNl IHsNCj4gPiArCQkJCQlmb3JtYXQtPndpZHRoID0gMTI4MDsNCj4gPiArCQkJCQlmb3JtYXQtPmhl aWdodCA9IDcyMDsNCj4gPiArCQkJCX0NCj4gPiArCQkJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJ RUxEX05PTkU7DQo+ID4gKwkJCQlicmVhazsNCj4gPiArCQkJZGVmYXVsdDoNCj4gPiArCQkJCWZv cm1hdC0+d2lkdGggPSAxOTIwOw0KPiA+ICsJCQkJZm9ybWF0LT5oZWlnaHQgPSAxMDgwOw0KPiA+ ICsJCQkJZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gPiArCQkJfQ0KPiA+ICsJ CX0gZWxzZSB7DQo+ID4gKwkJCWRldl9kYmcoY29yZS0+ZGV2LCAiR290IHRoZSBwYXlsb2FkXG4i KTsNCj4gPiArCQkJc3dpdGNoIChieXRlMSkgew0KPiA+ICsJCQljYXNlIFhTVDM1Ml9CWVRFMV9T VDI5Ml8xeDcyMExfMV81RzoNCj4gPiArCQkJCS8qIFNNUFRFIFNUIDI5Mi0xIGZvciA3MjAgbGlu ZSBwYXlsb2FkcyAqLw0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9IDEyODA7DQo+ID4gKwkJCQlm b3JtYXQtPmhlaWdodCA9IDcyMDsNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsJCQljYXNlIFhTVDM1 Ml9CWVRFMV9TVDI5Ml8xeDEwODBMXzFfNUc6DQo+ID4gKwkJCQkvKiBTTVBURSBTVCAyOTItMSBm b3IgMTA4MCBsaW5lIHBheWxvYWRzICovDQo+ID4gKwkJCQlmb3JtYXQtPmhlaWdodCA9IDEwODA7 DQo+ID4gKwkJCQlpZiAoYWN0aXZlX2x1bWEpDQo+ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9IDIw NDg7DQo+ID4gKwkJCQllbHNlDQo+ID4gKwkJCQkJZm9ybWF0LT53aWR0aCA9IDE5MjA7DQo+ID4g KwkJCQlicmVhazsNCj4gPiArCQkJZGVmYXVsdDoNCj4gPiArCQkJCWRldl9kYmcoY29yZS0+ZGV2 LCAiVW5rbm93biBIRCBNb2RlIFNNUFRFDQo+IHN0YW5kYXJkXG4iKTsNCj4gPiArCQkJCXJldHVy biAtRUlOVkFMOw0KPiA+ICsJCQl9DQo+ID4gKwkJfQ0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2Fz ZSBYU0RJUlhfTU9ERV9TRF9NQVNLOg0KPiA+ICsJCWZvcm1hdC0+ZmllbGQgPSBWNEwyX0ZJRUxE X0FMVEVSTkFURTsNCj4gPiArDQo+ID4gKwkJc3dpdGNoIChmYW1pbHkpIHsNCj4gPiArCQljYXNl IFhTRElSWF9OVFNDOg0KPiA+ICsJCQlmb3JtYXQtPndpZHRoID0gNzIwOw0KPiA+ICsJCQlmb3Jt YXQtPmhlaWdodCA9IDQ4NjsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJY2FzZSBYU0RJUlhfUEFM Og0KPiA+ICsJCQlmb3JtYXQtPndpZHRoID0gNzIwOw0KPiA+ICsJCQlmb3JtYXQtPmhlaWdodCA9 IDU3NjsNCj4gPiArCQkJYnJlYWs7DQo+ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJZGV2X2RiZyhj b3JlLT5kZXYsICJVbmtub3duIFNEIE1vZGUgU01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJ CQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhT RElSWF9NT0RFXzNHX01BU0s6DQo+ID4gKwkJc3dpdGNoIChieXRlMSkgew0KPiA+ICsJCWNhc2Ug WFNUMzUyX0JZVEUxX1NUNDI1XzIwMDhfNzUwTF8zR0I6DQo+ID4gKwkJCS8qIFNlYyA0LjEuNi4x IFNNUFRFIDQyNS0yMDA4ICovDQo+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1QzNzJfMng3MjBM XzNHQjoNCj4gPiArCQkJLyogVGFibGUgMTMgU01QVEUgNDI1LTIwMDggKi8NCj4gPiArCQkJZm9y bWF0LT53aWR0aCA9IDEyODA7DQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0gNzIwOw0KPiA+ICsJ CQlicmVhazsNCj4gPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDQyNV8yMDA4XzExMjVMXzNHQToN Cj4gPiArCQkJLyogU1QzNTIgVGFibGUgU01QVEUgNDI1LTEgKi8NCj4gPiArCQljYXNlIFhTVDM1 Ml9CWVRFMV9TVDM3Ml9ETF8zR0I6DQo+ID4gKwkJCS8qIFRhYmxlIDEzIFNNUFRFIDQyNS0yMDA4 ICovDQo+ID4gKwkJY2FzZSBYU1QzNTJfQllURTFfU1QzNzJfMngxMDgwTF8zR0I6DQo+ID4gKwkJ CS8qIFRhYmxlIDEzIFNNUFRFIDQyNS0yMDA4ICovDQo+ID4gKwkJCWZvcm1hdC0+aGVpZ2h0ID0g MTA4MDsNCj4gPiArCQkJaWYgKGFjdGl2ZV9sdW1hKQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0aCA9 IDIwNDg7DQo+ID4gKwkJCWVsc2UNCj4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSAxOTIwOw0KPiA+ ICsJCQlicmVhazsNCj4gPiArCQlkZWZhdWx0Og0KPiA+ICsJCQlkZXZfZGJnKGNvcmUtPmRldiwg IlVua25vd24gM0cgTW9kZSBTTVBURQ0KPiBzdGFuZGFyZFxuIik7DQo+ID4gKwkJCXJldHVybiAt RUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgWFNESVJYX01PREVf NkdfTUFTSzoNCj4gPiArCQlzd2l0Y2ggKGJ5dGUxKSB7DQo+ID4gKwkJY2FzZSBYU1QzNTJfQllU RTFfU1QyMDgxXzEwX0RMXzIxNjBMXzZHOg0KPiA+ICsJCQkvKiBEdWFsIGxpbmsgNkcgKi8NCj4g PiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIwODFfMTBfMjE2MExfNkc6DQo+ID4gKwkJCS8qIFRh YmxlIDMgU01QVEUgU1QgMjA4MS0xMCAqLw0KPiA+ICsJCQlmb3JtYXQtPmhlaWdodCA9IDIxNjA7 DQo+ID4gKwkJCWlmIChhY3RpdmVfbHVtYSkNCj4gPiArCQkJCWZvcm1hdC0+d2lkdGggPSA0MDk2 Ow0KPiA+ICsJCQllbHNlDQo+ID4gKwkJCQlmb3JtYXQtPndpZHRoID0gMzg0MDsNCj4gPiArCQkJ YnJlYWs7DQo+ID4gKwkJZGVmYXVsdDoNCj4gPiArCQkJZGV2X2RiZyhjb3JlLT5kZXYsICJVbmtu b3duIDZHIE1vZGUgU01QVEUNCj4gc3RhbmRhcmRcbiIpOw0KPiA+ICsJCQlyZXR1cm4gLUVJTlZB TDsNCj4gPiArCQl9DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIFhTRElSWF9NT0RFXzEyR0lf TUFTSzoNCj4gPiArCWNhc2UgWFNESVJYX01PREVfMTJHRl9NQVNLOg0KPiA+ICsJCXN3aXRjaCAo Ynl0ZTEpIHsNCj4gPiArCQljYXNlIFhTVDM1Ml9CWVRFMV9TVDIwODJfMTBfMjE2MExfMTJHOg0K PiA+ICsJCQkvKiBTZWN0aW9uIDQuMy4xIFNNUFRFIFNUIDIwODItMTAgKi8NCj4gPiArCQkJZm9y bWF0LT5oZWlnaHQgPSAyMTYwOw0KPiA+ICsJCQlpZiAoYWN0aXZlX2x1bWEpDQo+ID4gKwkJCQlm b3JtYXQtPndpZHRoID0gNDA5NjsNCj4gPiArCQkJZWxzZQ0KPiA+ICsJCQkJZm9ybWF0LT53aWR0 aCA9IDM4NDA7DQo+ID4gKwkJCWJyZWFrOw0KPiA+ICsJCWRlZmF1bHQ6DQo+ID4gKwkJCWRldl9k YmcoY29yZS0+ZGV2LCAiVW5rbm93biAxMkcgTW9kZSBTTVBURQ0KPiBzdGFuZGFyZFxuIik7DQo+ ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4gPiArCQlicmVhazsNCj4gPiArCWRl ZmF1bHQ6DQo+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJJbnZhbGlkIE1vZGVcbiIpOw0KPiA+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiANCj4gQ291bGQgeW91IHBsZWFzZSB0YWtl IGFub3RoZXIgbG9vayBpZiB0aGlzIGNhbiBiZSBvcmdhbml6ZWQgc2ltcGxlcj8gVGhpcyBpcw0K PiBhIGxpdHRsZSB0b28gbWFueSBzd2l0Y2ggLSBjYXNlIGFuZCBpZiBzdGF0ZW1lbnRzLg0KPiAN Cg0KSSBhbSB1bmFibGUgdG8gY29tZSB1cCB3aXRoIGEgYmV0dGVyIHdheS4gOigNCkkgd291bGQg YXBwcmVjaWF0ZSBpZiBhbnlvbmUgY2FuIGhlbHAgcmVnYXJkaW5nIHRoaXMgb3IgaWYgdGhpcyBu ZWVkcyBtb3JlIGRvY3VtZW50YXRpb24NCnRvIHVuZGVyc3RhbmQgZWFzaWx5Lg0KDQo+ID4gKw0K PiA+ICsJaWYgKHZhbGlkKSB7DQo+ID4gKwkJaWYgKHBpY190eXBlKQ0KPiA+ICsJCQlmb3JtYXQt PmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KPiA+ICsJCWVsc2UNCj4gPiArCQkJZm9ybWF0LT5m aWVsZCA9IFY0TDJfRklFTERfQUxURVJOQVRFOw0KPiA+ICsJfQ0KPiA+ICsNCg0KPHNuaXA+DQoN Cj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkN Cj4gPiArew0KPiA+ICsJaW50IHJldCA9IDA7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUg KnhzZGlyeHNzID0NCj4gPiArCQljb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwNCj4gDQo+IFRo aXMgZG9lc24ndCBoYXZlIHRvIGJlIGEgbmV3IGxpbmUuDQo+IA0KDQpPayBidXQga2VlcGluZyBj b250YWluZXJfb2Ygb24gc2FtZSBsaW5lIG1ha2VzIHRoZSBiZWxvdyBsaW5lIGdvIGJleW9uZCA4 MCBjaGFyIGxpbWl0Lg0KU28ga2VlcGluZyBpdCBhcyBpdCBpcy4NCg0KPiA+ICsJCQkgICAgIHN0 cnVjdCB4c2Rpcnhzc19zdGF0ZSwgY3RybF9oYW5kbGVyKTsNCj4gPiArCXN0cnVjdCB4c2Rpcnhz c19jb3JlICpjb3JlID0gJnhzZGlyeHNzLT5jb3JlOw0KPiA+ICsNCj4gPiArCWRldl9kYmcoY29y ZS0+ZGV2LCAic2V0IGN0cmwgaWQgPSAweCUwOHggdmFsID0gMHglMDh4XG4iLA0KPiA+ICsJCWN0 cmwtPmlkLCBjdHJsLT52YWwpOw0KPiA+ICsNCj4gPiArCWlmICh4c2Rpcnhzcy0+c3RyZWFtaW5n KSB7DQo+ID4gKwkJZGV2X2Vycihjb3JlLT5kZXYsICJDYW5ub3Qgc2V0IGNvbnRyb2xzIHdoaWxl IHN0cmVhbWluZ1xuIik7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJeHNkaXJ4X2NvcmVfZGlzYWJsZShjb3JlKTsNCj4gDQo+IE5vdCBzdXJlIHdoeSB0aGlz IGlzIG5lZWRlZCBoZXJlLiBDYW4gdGhpcyBiZSBwYXJ0IG9mIHNfc3RyZWFtPw0KPiANCg0KVGhl IGNvcmUgaXMgZW5hYmxlZCBzbyB0aGF0IHRoZSBTREkgUnggY2FuIGF0IGxlYXN0IGRlY29kZSB0 aGUgc3RyZWFtIHR5cGUgaW50bw0KV2lkdGgsaGVpZ2h0LCBmcmFtZSBpbnRlcnZhbCBhbmQgcHJv Z3Jlc3NpdmUvaW50ZXJsYWNlIHR5cGUuIFRoZSBzdWJzeXN0ZW0gc3RhcnRzDQpUbyBzZW5kIG91 dCBkYXRhIG9ubHkgd2hlbiB0aGUgU0RJIHRvIFZpZGVvIGFuZCBWaWRlbyB0byBBWEk0IFN0cmVh bSBicmlkZ2VzIGFyZSBlbmFibGVkLg0KDQpUaGUgYnJpZGdlcyBhcmUgZW5hYmxlZCBpbiBzX3N0 cmVhbSgpLg0KDQpUaGlzIGlzIGdldHRpbmcgZGlzYWJsZWQgYW5kIGVuYWJsZWQgaW4gdGhlIHNf Y3RybCBzbyB0aGF0IHRoZSBjb3JlIHByb3BlcnRpZXMgY2FuDQpCZSBtb2RpZmllZC4NCg0KPiA+ ICsJc3dpdGNoIChjdHJsLT5pZCkgew0KPiA+ICsJY2FzZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhf RlJBTUVSOg0KDQo8c25pcD4NCg0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX2xvZ19zdGF0dXMo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IHhzZGlyeHNzX3N0 YXRlICp4c2RpcnhzcyA9IHRvX3hzZGlyeHNzc3RhdGUoc2QpOw0KPiA+ICsJc3RydWN0IHhzZGly eHNzX2NvcmUgKmNvcmUgPSAmeHNkaXJ4c3MtPmNvcmU7DQo+ID4gKwl1MzIgZGF0YSwgaTsNCj4g DQo+ICdkYXRhJyBjYW4gYmUgZGVjbGFyZWQgaW5zaWRlIHRoZSBmb3IgbG9vcCBiZWxvdy4NCj4g DQoNCk9rIEkgd2lsbCBmaXggdGhpcyBpbiB2Mi4NCg0KPiA+ICsNCj4gPiArCXY0bDJfaW5mbyhz ZCwgIioqKioqIFNESSBSeCBzdWJzeXN0ZW0gcmVnIGR1bXAgc3RhcnQgKioqKipcbiIpOw0KPiA+ ICsJZm9yIChpID0gMDsgaSA8IDB4Mjg7IGkrKykgew0KPiA+ICsJCWRhdGEgPSB4c2Rpcnhzc19y ZWFkKGNvcmUsIGkgKiA0KTsNCj4gPiArCQl2NGwyX2luZm8oc2QsICJvZmZzZXQgMHglMDh4IGRh dGEgMHglMDh4XG4iLA0KPiA+ICsJCQkgIGkgKiA0LCBkYXRhKTsNCj4gPiArCX0NCj4gPiArCXY0 bDJfaW5mbyhzZCwgIioqKioqIFNESSBSeCBzdWJzeXN0ZW0gcmVnIGR1bXAgZW5kICoqKioqXG4i KTsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rp cnhzc19zdGFydF9zdHJlYW0oc3RydWN0IHhzZGlyeHNzX3N0YXRlICp4c2RpcnhzcykNCj4gPiAr ew0KPiA+ICsJeHNkaXJ4X3N0cmVhbWZsb3dfY29udHJvbCgmeHNkaXJ4c3MtPmNvcmUsIHRydWUp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB4c2Rpcnhzc19zdG9wX3N0cmVhbShz dHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzKQ0KPiA+ICt7DQo+ID4gKwl4c2Rpcnhfc3Ry ZWFtZmxvd19jb250cm9sKCZ4c2Rpcnhzcy0+Y29yZSwgZmFsc2UpOw0KPiA+ICt9DQo+IA0KPiBE aXR0by4gTm90IHN1cmUgaWYgdGhlc2Ugc2luZ2xlIGxpbmVyIHdyYXBwZXJzIGFyZSB1c2VmdWwu DQo+IA0KDQpJIGhhZCBrZXB0IHRoZW0gZm9yIHJlYWRhYmlsaXR5IHB1cnBvc2UuIEJ1dCBvayBJ IHdpbGwgcmVtb3ZlIHRoZXNlIGluIHYyLg0KDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeHNk aXJ4c3NfZ19mcmFtZV9pbnRlcnZhbCAtIEdldCB0aGUgZnJhbWUgaW50ZXJ2YWwNCg0KPHNuaXA+ DQoNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgeHNkaXJ4c3NfZ2V0X2Zvcm1hdChzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkLA0KPiA+ICsJCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9j b25maWcgKmNmZywNCj4gPiArCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmbXQpDQo+ IA0KPiBQbGVhc2UgY2hlY2sgdGhlIGFsaWdubWVudC4NCj4gDQoNCkkgd2lsbCBmaXggdGhpcyBp biB2Mi4NCg0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0g dG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3NfY29yZSAqY29yZSA9 ICZ4c2Rpcnhzcy0+Y29yZTsNCj4gPiArDQo+ID4gKwlpZiAoIXhzZGlyeHNzLT52aWRsb2NrZWQp IHsNCj4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgIlZpZGVvIG5vdCBsb2NrZWQhXG4iKTsNCj4g PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlmbXQtPmZvcm1hdCA9 ICpfX3hzZGlyeHNzX2dldF9wYWRfZm9ybWF0KHhzZGlyeHNzLCBjZmcsDQo+ID4gKwkJCQkJCSBm bXQtPnBhZCwgZm10LT53aGljaCk7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJT dHJlYW0gd2lkdGggPSAlZCBoZWlnaHQgPSAlZCBGaWVsZCA9ICVkXG4iLA0KPiA+ICsJCWZtdC0+ Zm9ybWF0LndpZHRoLCBmbXQtPmZvcm1hdC5oZWlnaHQsIGZtdC0+Zm9ybWF0LmZpZWxkKTsNCj4g PiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhz ZGlyeHNzX3NldF9mb3JtYXQgLSBUaGlzIGlzIHVzZWQgdG8gc2V0IHRoZSBwYWQgZm9ybWF0DQo+ ID4gKyAqIEBzZDogUG9pbnRlciB0byBWNEwyIFN1YiBkZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAq IEBjZmc6IFBvaW50ZXIgdG8gc3ViIGRldmljZSBwYWQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ ID4gKyAqIEBmbXQ6IFBvaW50ZXIgdG8gcGFkIGxldmVsIG1lZGlhIGJ1cyBmb3JtYXQNCj4gPiAr ICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCB0aGUgcGFkIGZvcm1hdC4N Cj4gPiArICogU2luY2UgdGhlIHBhZCBmb3JtYXQgaXMgZml4ZWQgaW4gaGFyZHdhcmUsIGl0IGNh bid0IGJlDQo+ID4gKyAqIG1vZGlmaWVkIG9uIHJ1biB0aW1lLg0KPiA+ICsgKg0KPiA+ICsgKiBS ZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCB4c2Rpcnhzc19z ZXRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKwkJCSAgICAgICBzdHJ1Y3Qg djRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2ZnLA0KPiA+ICsJCQkJc3RydWN0IHY0bDJfc3ViZGV2 X2Zvcm1hdCAqZm10KQ0KPiANCj4gUGxlYXNlIGNoZWNrIHRoZSBhbGlnbm1lbnQuDQo+IA0KDQpJ IHdpbGwgZml4IHRoaXMgaW4gdjIuDQoNCj4gPiArew0KPiA+ICsJc3RydWN0IHY0bDJfbWJ1c19m cmFtZWZtdCAqX19mb3JtYXQ7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNz ID0gdG9feHNkaXJ4c3NzdGF0ZShzZCk7DQo+ID4gKw0KPiA+ICsJZGV2X2RiZyh4c2Rpcnhzcy0+ Y29yZS5kZXYsDQo+ID4gKwkJInNldCB3aWR0aCAlZCBoZWlnaHQgJWQgY29kZSAlZCBmaWVsZCAl ZCBjb2xvcnNwYWNlICVkXG4iLA0KPiA+ICsJCWZtdC0+Zm9ybWF0LndpZHRoLCBmbXQtPmZvcm1h dC5oZWlnaHQsDQo+ID4gKwkJZm10LT5mb3JtYXQuY29kZSwgZm10LT5mb3JtYXQuZmllbGQsDQo+ ID4gKwkJZm10LT5mb3JtYXQuY29sb3JzcGFjZSk7DQo+ID4gKw0KPiA+ICsJX19mb3JtYXQgPSBf X3hzZGlyeHNzX2dldF9wYWRfZm9ybWF0KHhzZGlyeHNzLCBjZmcsDQoNCjxzbmlwPg0KDQo+ID4g Kw0KPiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgInhsbngsbGluZS1y YXRlIiwNCj4gPiArCQkJCSAgICAgICZzZGlfc3RkKTsNCj4gDQo+IFNpbmdsZSBsaW5lIGlzIGVu b3VnaC4NCj4gDQoNCk9rIEkgd2lsbCBnZXQgaXQgdG8gYSBzaW5nbGUgbGluZSBpbiB2Mi4NCg0K PiA+ICsJaWYgKHJldCA8IDApIHsNCj4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgInhsbngsbGlu ZS1yYXRlIHByb3BlcnR5IG5vdCBmb3VuZFxuIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiAr CX0NCj4gPiArDQo+ID4gKwlpZiAoIXN0cm5jbXAoc2RpX3N0ZCwgIjEyR19TRElfOERTIiwgWFNE SVJYX01BWF9TVFJfTEVOR1RIKSkgew0KPiA+ICsJCWNvcmUtPm1vZGUgPSBYU0RJUlhTU19TRElf U1REXzEyR184RFM7DQo+ID4gKwl9IGVsc2UgaWYgKCFzdHJuY21wKHNkaV9zdGQsICI2R19TREki LCBYU0RJUlhfTUFYX1NUUl9MRU5HVEgpKSB7DQo+ID4gKwkJY29yZS0+bW9kZSA9IFhTRElSWFNT X1NESV9TVERfNkc7DQo+ID4gKwl9IGVsc2UgaWYgKCFzdHJuY21wKHNkaV9zdGQsICIzR19TREki LCBYU0RJUlhfTUFYX1NUUl9MRU5HVEgpKSB7DQo+ID4gKwkJY29yZS0+bW9kZSA9IFhTRElSWFNT X1NESV9TVERfM0c7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAi SW52YWxpZCBMaW5lIFJhdGVcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0K PiA+ICsJZGV2X2RiZyhjb3JlLT5kZXYsICJTREkgUnggTGluZSBSYXRlID0gJXMsIG1vZGUgPSAl ZFxuIiwgc2RpX3N0ZCwNCj4gPiArCQljb3JlLT5tb2RlKTsNCj4gPiArDQo+ID4gKwlwb3J0cyA9 IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5vZGUsICJwb3J0cyIpOw0KPiA+ICsJaWYgKCFwb3J0cykN Cj4gPiArCQlwb3J0cyA9IG5vZGU7DQo+ID4gKw0KPiA+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9k ZShwb3J0cywgcG9ydCkgew0KPiA+ICsJCWNvbnN0IHN0cnVjdCB4dmlwX3ZpZGVvX2Zvcm1hdCAq Zm9ybWF0Ow0KPiA+ICsJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kcG9pbnQ7DQo+ID4gKw0KPiA+ ICsJCWlmICghcG9ydC0+bmFtZSB8fCBvZl9ub2RlX2NtcChwb3J0LT5uYW1lLCAicG9ydCIpKQ0K PiA+ICsJCQljb250aW51ZTsNCj4gPiArDQo+ID4gKwkJZm9ybWF0ID0geHZpcF9vZl9nZXRfZm9y bWF0KHBvcnQpOw0KPiA+ICsJCWlmIChJU19FUlIoZm9ybWF0KSkgew0KPiA+ICsJCQlkZXZfZXJy KGNvcmUtPmRldiwgImludmFsaWQgZm9ybWF0IGluIERUIik7DQo+ID4gKwkJCXJldHVybiBQVFJf RVJSKGZvcm1hdCk7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlkZXZfZGJnKGNvcmUtPmRldiwg InZmX2NvZGUgPSAlZCBicGMgPSAlZCBicHAgPSAlZFxuIiwNCj4gPiArCQkJZm9ybWF0LT52Zl9j b2RlLCBmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmJwcCk7DQo+IA0KPiBUaGUgY29tbWl0IG1lbnRp b25zIHRoaXMgZHJpdmVyIHN1cHBvcnRzIG9ubHkgMTBicGMuIFdvdWxkbid0IGl0IGJlIGJldHRl ciB0bw0KPiBjaGVjayBpdCBoZXJlPw0KPiANCg0KWWVzIEkgd2lsbCBhZGQgYSBjaGVjayBmb3Ig d2lkdGggdG8gYmUgMTAgaGVyZS4gDQoNCj4gPiArDQo+ID4gKwkJaWYgKGZvcm1hdC0+dmZfY29k ZSAhPSBYVklQX1ZGX1lVVl80MjIgJiYNCj4gPiArCQkgICAgZm9ybWF0LT52Zl9jb2RlICE9IFhW SVBfVkZfWVVWXzQyMCkgew0KPiA+ICsJCQlkZXZfZXJyKGNvcmUtPmRldiwgIkluY29ycmVjdCBV RzkzNCB2aWRlbyBmb3JtYXQNCj4gc2V0LlxuIik7DQo+IA0KPiBZb3UgY2FuIG1ha2UgdGhpcyBz aW5nbGUgbGluZSBhcyBiZWxvdywNCj4gDQo+IAlkZXZfZXJyKGNvcmUtPmRldiwNCj4gCQkiSW5j b3JyZWN0IFVHOTM0IHZpZGVvIGZvcm1hdCBzZXQuXG4iKTsNCj4gDQoNCk9rIHdpbGwgZml4IHRo aXMgaW4gdjIuDQoNCj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJCXhz ZGlyeHNzLT52aXBfZm9ybWF0ID0gZm9ybWF0Ow0KPiA+ICsNCj4gPiArCQllbmRwb2ludCA9IG9m X2dldF9uZXh0X2NoaWxkKHBvcnQsIE5VTEwpOw0KPiA+ICsJCWlmICghZW5kcG9pbnQpIHsNCj4g PiArCQkJZGV2X2Vycihjb3JlLT5kZXYsICJObyBwb3J0IGF0XG4iKTsNCj4gPiArCQkJcmV0dXJu IC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKiBDb3VudCB0aGUgbnVtYmVyIG9m IHBvcnRzLiAqLw0KPiA+ICsJCW5wb3J0cysrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChu cG9ydHMgIT0gMSkgew0KPiA+ICsJCWRldl9lcnIoY29yZS0+ZGV2LCAiaW52YWxpZCBudW1iZXIg b2YgcG9ydHMgJXVcbiIsIG5wb3J0cyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgKi8NCj4gPiArCWNv cmUtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5vZGUsIDApOw0KPiA+ICsNCj4gPiArCXJl dCA9IGRldm1fcmVxdWVzdF9pcnEoY29yZS0+ZGV2LCBjb3JlLT5pcnEsIHhzZGlyeHNzX2lycV9o YW5kbGVyLA0KPiA+ICsJCQkgICAgICAgSVJRRl9TSEFSRUQsICJ4aWxpbngtc2RpcnhzcyIsIHhz ZGlyeHNzKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlkZXZfZXJyKGNvcmUtPmRldiwgIkVy ciA9ICVkIEludGVycnVwdCBoYW5kbGVyIHJlZyBmYWlsZWQhXG4iLA0KPiA+ICsJCQlyZXQpOw0K PiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQoNCjxzbmlwPg0KDQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ug ew0KPiA+ICsJCWRldl9kYmcoeHNkaXJ4c3MtPmNvcmUuZGV2LCAiTm90IHJlZ2lzdGVyaW5nIHRo ZSBFREggY29udHJvbHMNCj4gYXMgRURIIGlzIGRpc2FibGVkIGluIElQXG4iKTsNCj4gDQo+IElz IHRoaXMgd29ydGggYmVpbmcgaGVyZT8gVGhlcmUncyBhbHJlYWR5IGFuIGVxdWl2YWxlbnQgcHJp bnQgZm9yIGR0IGlzIHBhcnNlZC4NCj4gDQoNCkFncmVlLiBJIHdpbGwgcmVtb3ZlIHRoaXMgaW4g djIuDQoNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoeHNkaXJ4c3MtPmN0cmxfaGFuZGxlci5l cnJvcikgew0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgY29udHJv bHNcbiIpOw0KPiA+ICsJCXJldCA9IHhzZGlyeHNzLT5jdHJsX2hhbmRsZXIuZXJyb3I7DQo+ID4g KwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlzdWJkZXYtPmN0cmxfaGFuZGxl ciA9ICZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyOw0KPiA+ICsNCj4gPiArCXJldCA9IHY0bDJfY3Ry bF9oYW5kbGVyX3NldHVwKCZ4c2Rpcnhzcy0+Y3RybF9oYW5kbGVyKTsNCj4gPiArCWlmIChyZXQg PCAwKSB7DQo+ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHNldCBjb250cm9s c1xuIik7DQo+ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCB4c2Rpcnhzcyk7DQo+ID4gKw0KPiA+ICsJcmV0ID0gdjRsMl9h c3luY19yZWdpc3Rlcl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArCWlmIChyZXQgPCAwKSB7DQo+ID4g KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldlxuIik7DQo+ ID4gKwkJZ290byBlcnJvcjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwl4c2Rpcnhzcy0+c3RyZWFt aW5nID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJZGV2X2luZm8oeHNkaXJ4c3MtPmNvcmUuZGV2LCAi WGlsaW54IFNESSBSeCBTdWJzeXN0ZW0gZGV2aWNlIGZvdW5kIVxuIik7DQo+ID4gKw0KPiA+ICsJ eHNkaXJ4X2NvcmVfZW5hYmxlKGNvcmUpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICtl cnJvcjoNCj4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnhzZGlyeHNzLT5jdHJsX2hhbmRs ZXIpOw0KPiA+ICsJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ZW50aXR5KTsNCj4gPiAr DQo+ID4gK2Nsa19lcnI6DQo+ID4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoY29yZS0+dmlkb3V0 X2Nsayk7DQo+ID4gK3ZpZG91dF9jbGtfZXJyOg0KPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KGNvcmUtPnNkaXJ4X2Nsayk7DQo+ID4gK3J4X2Nsa19lcnI6DQo+ID4gKwljbGtfZGlzYWJsZV91 bnByZXBhcmUoY29yZS0+YXhpX2Nsayk7DQo+ID4gKwlyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHhzZGlyeHNzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgeHNkaXJ4c3Nfc3RhdGUgKnhzZGlyeHNzID0g cGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1 YmRldiA9ICZ4c2Rpcnhzcy0+c3ViZGV2Ow0KPiA+ICsNCj4gPiArCXY0bDJfYXN5bmNfdW5yZWdp c3Rlcl9zdWJkZXYoc3ViZGV2KTsNCj4gPiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnhzZGly eHNzLT5jdHJsX2hhbmRsZXIpOw0KPiA+ICsJbWVkaWFfZW50aXR5X2NsZWFudXAoJnN1YmRldi0+ ZW50aXR5KTsNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c2Rpcnhzcy0+Y29yZS52aWRv dXRfY2xrKTsNCj4gPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4c2Rpcnhzcy0+Y29yZS5zZGly eF9jbGspOw0KPiA+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHhzZGlyeHNzLT5jb3JlLmF4aV9j bGspOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHhzZGlyeHNzX29mX2lkX3RhYmxlW10gPSB7DQo+ID4gKwl7IC5j b21wYXRpYmxlID0gInhsbngsdi1zbXB0ZS11aGRzZGktcngtc3MiIH0sDQo+ID4gKwl7IH0NCj4g PiArfTsNCj4gPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeHNkaXJ4c3Nfb2ZfaWRfdGFibGUp Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHNkaXJ4c3NfZHJp dmVyID0gew0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQkubmFtZQkJPSAieGlsaW54LXNkaXJ4 c3MiLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZQk9IHhzZGlyeHNzX29mX2lkX3RhYmxlLA0KPiA+ ICsJfSwNCj4gPiArCS5wcm9iZQkJCT0geHNkaXJ4c3NfcHJvYmUsDQo+ID4gKwkucmVtb3ZlCQkJ PSB4c2Rpcnhzc19yZW1vdmUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICttb2R1bGVfcGxhdGZvcm1f ZHJpdmVyKHhzZGlyeHNzX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfQVVUSE9SKCJWaXNo YWwgU2FnYXIgPHZzYWdhckB4aWxpbnguY29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04o IlhpbGlueCBTREkgUnggU3Vic3lzdGVtIERyaXZlciIpOw0KPiA+ICtNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtc2Rp cnhzcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC0NCj4gc2Rpcnhzcy5oDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi45ODNhNDNiDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtc2Rpcnhzcy5oDQo+ ID4gQEAgLTAsMCArMSw2MyBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiBYaWxpbnggU0RJIFJ4IFN1YnN5c3RlbSBtb2RlIGFu ZCBmbGFnIGRlZmluaXRpb25zLg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkg WGlsaW54LCBJbmMuDQo+ID4gKyAqDQo+ID4gKyAqIENvbnRhY3RzOiBWaXNoYWwgU2FnYXIgPHZp c2hhbC5zYWdhckB4aWxpbnguY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNp Zm5kZWYgX19VQVBJX1hJTElOWF9TRElSWFNTX0hfXw0KPiA+ICsjZGVmaW5lIF9fVUFQSV9YSUxJ TlhfU0RJUlhTU19IX18NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBU aGlzIGVudW0gaXMgdXNlZCB0byBwcmVwYXJlIHRoZSBiaXRtYXNrIG9mIG1vZGVzIHRvIGJlIGRl dGVjdGVkDQo+ID4gKyAqLw0KPiA+ICtlbnVtIHsNCj4gPiArCVhTRElSWF9NT0RFX1NEX09GRlNF VCA9IDAsDQo+ID4gKwlYU0RJUlhfTU9ERV9IRF9PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV8z R19PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9ERV82R19PRkZTRVQsDQo+ID4gKwlYU0RJUlhfTU9E RV8xMkdJX09GRlNFVCwNCj4gPiArCVhTRElSWF9NT0RFXzEyR0ZfT0ZGU0VULA0KPiA+ICsJWFNE SVJYX01PREVfTlVNX1NVUFBPUlRFRCwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgWFNE SVJYX0RFVEVDVF9BTExfTU9ERVMNCj4gCShCSVQoWFNESVJYX01PREVfU0RfT0ZGU0VUKSB8IFwN Cj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfSERfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQo WFNESVJYX01PREVfM0dfT0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfNkdf T0ZGU0VUKSB8IFwNCj4gPiArCQkJCQlCSVQoWFNESVJYX01PREVfMTJHSV9PRkZTRVQpIHwgXA0K PiA+ICsJCQkJCUJJVChYU0RJUlhfTU9ERV8xMkdGX09GRlNFVCkpDQo+ID4gKw0KPiA+ICsvKg0K PiA+ICsgKiBFREggRXJyb3IgVHlwZXMNCj4gPiArICogQU5DIC0gQW5jaWxsYXJ5IERhdGEgUGFj a2V0IEVycm9ycw0KPiA+ICsgKiBGRiAtIEZ1bGwgRmllbGQgRXJyb3JzDQo+ID4gKyAqIEFQIC0g QWN0aXZlIFBvcnRpb24gRXJyb3JzDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJ UlhfRURIX0VSUkNOVF9BTkNfRURIX0VSUgkJQklUKDApDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VE SF9FUlJDTlRfQU5DX0VEQV9FUlIJCUJJVCgxKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJS Q05UX0FOQ19JREhfRVJSCQlCSVQoMikNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9B TkNfSURBX0VSUgkJQklUKDMpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfQU5DX1VF U19FUlIJCUJJVCg0KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0VESF9FUlIJ CUJJVCg1KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0VEQV9FUlIJCUJJVCg2 KQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0lESF9FUlIJCUJJVCg3KQ0KPiA+ ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX0lEQV9FUlIJCUJJVCg4KQ0KPiA+ICsjZGVm aW5lIFhTRElSWF9FREhfRVJSQ05UX0ZGX1VFU19FUlIJCUJJVCg5KQ0KPiA+ICsjZGVmaW5lIFhT RElSWF9FREhfRVJSQ05UX0FQX0VESF9FUlIJCUJJVCgxMCkNCj4gPiArI2RlZmluZSBYU0RJUlhf RURIX0VSUkNOVF9BUF9FREFfRVJSCQlCSVQoMTEpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9F UlJDTlRfQVBfSURIX0VSUgkJQklUKDEyKQ0KPiA+ICsjZGVmaW5lIFhTRElSWF9FREhfRVJSQ05U X0FQX0lEQV9FUlIJCUJJVCgxMykNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0VSUkNOVF9BUF9V RVNfRVJSCQlCSVQoMTQpDQo+ID4gKyNkZWZpbmUgWFNESVJYX0VESF9FUlJDTlRfUEtUX0NIS1NV TV9FUlIJQklUKDE1KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBYU0RJUlhfRURIX0FMTEVSUl9NQVNL CQkweEZGRkYNCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfX1VBUElfWElMSU5YX1NESVJYU1NfSF9f ICovDQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1jb250 cm9scy5oDQo+IGIvaW5jbHVkZS91YXBpL2xpbnV4L3hpbGlueC12NGwyLWNvbnRyb2xzLmgNCj4g PiBpbmRleCBmMDIzNjIzLi40YzY4YTEwIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9s aW51eC94aWxpbngtdjRsMi1jb250cm9scy5oDQo+ID4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4 L3hpbGlueC12NGwyLWNvbnRyb2xzLmgNCj4gPiBAQCAtODMsNCArODMsMzQgQEANCj4gPiAgLyog UmVzZXQgYWxsIGV2ZW50IGNvdW50ZXJzICovDQo+ID4gICNkZWZpbmUgVjRMMl9DSURfWElMSU5Y X01JUElDU0lTU19SRVNFVF9DT1VOVEVSUw0KPiAoVjRMMl9DSURfWElMSU5YX01JUElDU0lTUyAr IDIpDQo+ID4NCj4gPiArLyoNCj4gPiArICogWGlsaW54IFNESSBSeCBTdWJzeXN0ZW0NCj4gPiAr ICovDQo+ID4gKw0KPiA+ICsvKiBCYXNlIElEICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElM SU5YX1NESVJYCQkJKFY0TDJfQ0lEX1VTRVJfQkFTRSArDQo+IDB4YzEwMCkNCj4gPiArDQo+ID4g Ky8qIEZyYW1lciBDb250cm9sICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NESVJY X0ZSQU1FUgkJKFY0TDJfQ0lEX1hJTElOWF9TRElSWA0KPiArIDEpDQo+ID4gKy8qIFZpZGVvIExv Y2sgV2luZG93IENvbnRyb2wgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9YSUxJTlhfU0RJUlhf VklETE9DS19XSU5ET1cNCj4gCShWNEwyX0NJRF9YSUxJTlhfU0RJUlggKyAyKQ0KPiA+ICsvKiBF REggRXJyb3IgTWFzayBDb250cm9sICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5YX1NE SVJYX0VESF9FUlJDTlRfRU5BQkxFDQo+IAkoVjRMMl9DSURfWElMSU5YX1NESVJYICsgMykNCj4g PiArLyogTW9kZSBzZWFyY2ggQ29udHJvbCAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElO WF9TRElSWF9TRUFSQ0hfTU9ERVMJKFY0TDJfQ0lEX1hJTElOWF9TRElSWA0KPiArIDQpDQo+ID4g Ky8qIEdldCBEZXRlY3RlZCBNb2RlIGNvbnRyb2wgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJRF9Y SUxJTlhfU0RJUlhfTU9ERV9ERVRFQ1QJKFY0TDJfQ0lEX1hJTElOWF9TRElSWA0KPiArIDUpDQo+ ID4gKy8qIEdldCBDUkMgZXJyb3Igc3RhdHVzICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElM SU5YX1NESVJYX0NSQwkJKFY0TDJfQ0lEX1hJTElOWF9TRElSWA0KPiArIDYpDQo+ID4gKy8qIEdl dCBFREggZXJyb3IgY291bnQgY29udHJvbCAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfQ0lEX1hJTElO WF9TRElSWF9FREhfRVJSQ05UCShWNEwyX0NJRF9YSUxJTlhfU0RJUlgNCj4gKyA3KQ0KPiA+ICsv KiBHZXQgRURIIHN0YXR1cyBjb250cm9sICovDQo+ID4gKyNkZWZpbmUgVjRMMl9DSURfWElMSU5Y X1NESVJYX0VESF9TVEFUVVMJKFY0TDJfQ0lEX1hJTElOWF9TRElSWA0KPiArIDgpDQo+ID4gKy8q IEdldCBUcmFuc3BvcnQgSW50ZXJsYWNlZCBzdGF0dXMgKi8NCj4gPiArI2RlZmluZSBWNEwyX0NJ RF9YSUxJTlhfU0RJUlhfVFNfSVNfSU5URVJMQUNFRA0KPiAJKFY0TDJfQ0lEX1hJTElOWF9TRElS WCArIDkpDQo+ID4gKy8qIEdldCBBY3RpdmUgU3RyZWFtcyBjb3VudCAqLw0KPiA+ICsjZGVmaW5l IFY0TDJfQ0lEX1hJTElOWF9TRElSWF9BQ1RJVkVfU1RSRUFNUw0KPiAJKFY0TDJfQ0lEX1hJTElO WF9TRElSWCArIDEwKQ0KPiA+ICsvKiBJcyBNb2RlIDNHQiAqLw0KPiA+ICsjZGVmaW5lIFY0TDJf Q0lEX1hJTElOWF9TRElSWF9JU18zR0IJCShWNEwyX0NJRF9YSUxJTlhfU0RJUlgNCj4gKyAxMSkN Cj4gPiArDQo+ID4gICNlbmRpZiAvKiBfX1VBUElfWElMSU5YX1Y0TDJfQ09OVFJPTFNfSF9fICov DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtdjRsMi1ldmVudHMu aCBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngtDQo+IHY0bDItZXZlbnRzLmgNCj4gPiBpbmRl eCAyYWEzNTdjLi43YjQ3NTk1IDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC94 aWxpbngtdjRsMi1ldmVudHMuaA0KPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51eC94aWxpbngt djRsMi1ldmVudHMuaA0KPiA+IEBAIC0xOCw0ICsxOCwxMyBAQA0KPiA+ICAvKiBTdHJlYW0gTGlu ZSBCdWZmZXIgZnVsbCAqLw0KPiA+ICAjZGVmaW5lIFY0TDJfRVZFTlRfWExOWENTSVJYX1NMQkYJ KFY0TDJfRVZFTlRfWExOWENTSVJYX0NMQVNTDQo+IHwgMHgxKQ0KPiA+DQo+ID4gKy8qIFhpbGlu eCBTTVBURSBVSEQtU0RJIFJYIFN1YnN5c3RlbSAqLw0KPiA+ICsjZGVmaW5lIFY0TDJfRVZFTlRf WExOWFNESVJYX0NMQVNTCShWNEwyX0VWRU5UX1BSSVZBVEVfU1RBUlQgfA0KPiAweDIwMCkNCj4g PiArLyogVmlkZW8gVW5sb2NrIGV2ZW50ICovDQo+ID4gKyNkZWZpbmUgVjRMMl9FVkVOVF9YTE5Y U0RJUlhfVklEVU5MT0NLDQo+IAkoVjRMMl9FVkVOVF9YTE5YU0RJUlhfQ0xBU1MgfCAweDEpDQo+ ID4gKy8qIFZpZGVvIGluIHRvIEFYSTQgU3RyZWFtIGNvcmUgdW5kZXJmbG93ZWQgKi8NCj4gPiAr I2RlZmluZSBWNEwyX0VWRU5UX1hMTlhTRElSWF9VTkRFUkZMT1cNCj4gCShWNEwyX0VWRU5UX1hM TlhTRElSWF9DTEFTUyB8IDB4MikNCj4gPiArLyogVmlkZW8gaW4gdG8gQVhJNCBTdHJlYW0gY29y ZSBvdmVyZmxvd2VkICovDQo+ID4gKyNkZWZpbmUgVjRMMl9FVkVOVF9YTE5YU0RJUlhfT1ZFUkZM T1cNCj4gCShWNEwyX0VWRU5UX1hMTlhTRElSWF9DTEFTUyB8IDB4MykNCj4gDQo+IENvdWxkIHlv dSBwbGVhc2UgZG91YmxlLWNoZWNrIGlmIGFsbCBldmVudHMgLyBjb250cm9scyBhcmUgaGFyZC1y ZXF1aXJlZD8gTW9yZQ0KPiBvZiB0aGVzZSB3aWxsIG1ha2UgZ2VuZXJpYyB2NGwgYXBwbGljYXRp b25zIGhhcmRlciB0byBydW4gb24gdGhpcyBkcml2ZXIuIEl0J2QNCj4gYmUgbmljZXIgaWYgc29t ZSBvZiB0aGVzZSAoZXgsIGZyb20gc2RpIHNwZWMpIGNhbiBiZSBzaGFyZWQgZm9yIGFueSBzZGkg aWYNCj4gcG9zc2libGU/DQo+IA0KDQpJIHdpbGwgZG9jdW1lbnQgdGhlc2UgY29udHJvbHMgYW5k IGV2ZW50cyBpbiBkZXRhaWwgaW4gdjIuDQpJIHRoaW5rIHRoZXNlIGFyZSBuZWVkZWQgYXMgdGhl eSBhcmUgc3BlY2lmaWMgdG8gWGlsaW54IGltcGxlbWVudGF0aW9uLg0KDQpSZWdhcmRzDQpWaXNo YWwgU2FnYXINCg0KPiBUaGFua3MsDQo+IC1oeXVuDQo+IA0KPiA+ICsNCj4gPiAgI2VuZGlmIC8q IF9fVUFQSV9YSUxJTlhfVjRMMl9FVkVOVFNfSF9fICovDQo+ID4gLS0NCj4gPiAxLjguMy4xDQo+ ID4NCj4gPg0K