Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp3976513img; Mon, 25 Mar 2019 23:59:22 -0700 (PDT) X-Google-Smtp-Source: APXvYqzJp+rjNBifDWR1rQ0WMYBeVdxN5VK5IGGQTBSszG39Vkx5MyMd13Ti25FewMO3IU2XldGP X-Received: by 2002:a62:7603:: with SMTP id r3mr28336456pfc.32.1553583561985; Mon, 25 Mar 2019 23:59:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553583561; cv=none; d=google.com; s=arc-20160816; b=hKdtPow2gjLMFz5RzE35Ml5uUOXY59504Rlo+XJWgUmSjpOIKX2KZYv3YFtpvdzqrI FRV4333hPZPMpOZfk7bX63z5O2fI2EdkxAPPN5noMBt/17SG19s4o0wNACehwZOa7rIv q8u1zvKkNtzu9hHDZmn/vi5umKzp7Yf2YkqWbu6+tyxGEUu2DXx1FSe2fW6bs/J3b2gZ xfwiijrzKB9UtJljEPdjkZ31zB5tcMJ7MRZLNJQprMlAPld9HcqgVFqALJjyi+3B9air lU/UOaDn2b+LhBXoTfnEGIfjiKw830LnwlDed2zWAqxskSlqupQK+fyYmUofrY4upYxX esCw== 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=zH3jmQ6kYP65MwgtOKyOJ7TBn/El7SiSMmyByGHOVRg=; b=dSEls6uS8tbzH+BbE1kyeCXqWYDE52Ycef4b+vepakQJH39QOvvMo8o+2qEwEBtVqM 3QfdgCRlknDzK9uM1eEELn/iD5C1WDwdcx9CmGKmLu7W1TwdoAptnsSE+S3c8sAVORuK cmZNY4sBFhjv1SFXYVhPuDG4ZpoYAgkzbY7Sqom7z/th/pwDKBGvR1n9Fk5QaIfxIAwQ WfW/NLAO2HKCPObT6KCmrW+j9B5jCx+0Tf7+kn1pR7dwzzvFokE8/LSUouSXTqOEczBD hHH69oaWwt3FZfFlIFweeXgCGRBR7LC6MLno9ISRMQmY3VGRzmDcd6iuYg1qAaMue+I1 aC8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector1 header.b=VjuofjSs; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 133si340414pfu.82.2019.03.25.23.59.06; Mon, 25 Mar 2019 23:59:21 -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=@nxp.com header.s=selector1 header.b=VjuofjSs; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731111AbfCZG5L (ORCPT + 99 others); Tue, 26 Mar 2019 02:57:11 -0400 Received: from mail-eopbgr150085.outbound.protection.outlook.com ([40.107.15.85]:35829 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1730591AbfCZG5K (ORCPT ); Tue, 26 Mar 2019 02:57:10 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zH3jmQ6kYP65MwgtOKyOJ7TBn/El7SiSMmyByGHOVRg=; b=VjuofjSsSLDlbeqHPttsJ9J8SShOYtEADQZNZqBvIX9fSl7myVTwa7k435ynGMQw7CNMqKVZkBhlTD9Zgu35VQkSpgvUz0wHNoh0d1bZIcucuWmZuA9WhnSKZKxe9ZF6CvpnCAemno/tqHFQ9tdgMoEdehv4mvIybTbz+6vzVsg= Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com (52.134.72.18) by DB3PR0402MB3850.eurprd04.prod.outlook.com (52.134.65.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.18; Tue, 26 Mar 2019 06:56:47 +0000 Received: from DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08]) by DB3PR0402MB3916.eurprd04.prod.outlook.com ([fe80::f1b4:a1fb:cfd1:3f08%7]) with mapi id 15.20.1730.019; Tue, 26 Mar 2019 06:56:47 +0000 From: Anson Huang To: =?utf-8?B?VXdlIEtsZWluZS1Lw7ZuaWc=?= CC: "thierry.reding@gmail.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux@armlinux.org.uk" , "stefan@agner.ch" , "otavio@ossystems.com.br" , Leonard Crestez , Robin Gong , "jan.tuerk@emtrion.com" , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , dl-linux-imx Subject: RE: [PATCH V9 2/5] pwm: Add i.MX TPM PWM driver support Thread-Topic: [PATCH V9 2/5] pwm: Add i.MX TPM PWM driver support Thread-Index: AQHU4FFOpecAv9hHzEalsnukYYli6aYcGhSAgAAfJkCAAUd2cA== Date: Tue, 26 Mar 2019 06:56:47 +0000 Message-ID: References: <1553218974-20464-1-git-send-email-Anson.Huang@nxp.com> <1553218974-20464-3-git-send-email-Anson.Huang@nxp.com> <20190325093017.glw2wfjxga2rddmu@pengutronix.de> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=anson.huang@nxp.com; x-originating-ip: [119.31.174.66] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 1c61f238-244b-428b-4e06-08d6b1b836e1 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600127)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020);SRVR:DB3PR0402MB3850; x-ms-traffictypediagnostic: DB3PR0402MB3850: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-forefront-prvs: 09888BC01D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(396003)(39860400002)(136003)(376002)(346002)(366004)(189003)(199004)(13464003)(7736002)(30864003)(25786009)(476003)(53946003)(2906002)(14444005)(97736004)(14454004)(44832011)(256004)(6306002)(486006)(71200400001)(8936002)(6916009)(71190400001)(6246003)(9686003)(7696005)(4326008)(6116002)(186003)(5660300002)(45080400002)(52536014)(7416002)(66574012)(53936002)(66066001)(3846002)(316002)(6436002)(55016002)(106356001)(74316002)(68736007)(26005)(11346002)(446003)(102836004)(478600001)(105586002)(229853002)(33656002)(53546011)(305945005)(93886005)(6506007)(76176011)(8676002)(966005)(81166006)(86362001)(99286004)(54906003)(81156014);DIR:OUT;SFP:1101;SCL:1;SRVR:DB3PR0402MB3850;H:DB3PR0402MB3916.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: m2YyalVChOOoO7RAJ8dJzpF48+2Uw2TKSEIbfj3bqw5H7N7yU+JP7T9jn1kTCvOjGpDmXw6t4H5GbqJrsbPQWjvr7L9uM86cXiA0lTOo3PgecrDyssD2MssO3sFcPV+5N4mVbGfjvl5vKawyTn6OqgbSu59H+dp02E7FjeWRScv0qTtJKxy2RNNTS1Yx3aibd3qTGgebu8e3pamP8uB+uysUo0NfrIbLivR2OLso4h1TggigjRrGMAthtG2JLAe0UikjEpRQZDr5qZ7ARIo/ZyOZHNVe9fiT3s3dsdet2wdmNMwy5+kZpJcVkAcKUcF40j99Yq5UFHRUy7eonoqzdSnmc9+NZ+4Ovd1lahruoIN1RPWz77doCMY+5aqSYv9kagMSzNnPlGNWApH47dE+7qE/1WErQE2rY03dtXtW9rc= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1c61f238-244b-428b-4e06-08d6b1b836e1 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2019 06:56:47.0696 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR0402MB3850 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGksIFV3ZQ0KDQpCZXN0IFJlZ2FyZHMhDQpBbnNvbiBIdWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQo+IEZyb206IEFuc29uIEh1YW5nDQo+IFNlbnQ6IDIwMTnlubQz5pyIMjXm l6UgMTk6NTkNCj4gVG86ICdVd2UgS2xlaW5lLUvDtm5pZycgPHUua2xlaW5lLWtvZW5pZ0BwZW5n dXRyb25peC5kZT4NCj4gQ2M6IHRoaWVycnkucmVkaW5nQGdtYWlsLmNvbTsgcm9iaCtkdEBrZXJu ZWwub3JnOyBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsNCj4gc2hhd25ndW9Aa2VybmVsLm9yZzsgcy5o YXVlckBwZW5ndXRyb25peC5kZTsga2VybmVsQHBlbmd1dHJvbml4LmRlOw0KPiBmZXN0ZXZhbUBn bWFpbC5jb207IGxpbnV4QGFybWxpbnV4Lm9yZy51azsgc3RlZmFuQGFnbmVyLmNoOw0KPiBvdGF2 aW9Ab3NzeXN0ZW1zLmNvbS5icjsgTGVvbmFyZCBDcmVzdGV6IDxsZW9uYXJkLmNyZXN0ZXpAbnhw LmNvbT47DQo+IFJvYmluIEdvbmcgPHlpYmluLmdvbmdAbnhwLmNvbT47IGphbi50dWVya0BlbXRy aW9uLmNvbTsgbGludXgtDQo+IHB3bUB2Z2VyLmtlcm5lbC5vcmc7IGRldmljZXRyZWVAdmdlci5r ZXJuZWwub3JnOyBsaW51eC1hcm0tDQo+IGtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOyBsaW51 eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBkbC1saW51eC1pbXgNCj4gPGxpbnV4LWlteEBueHAu Y29tPg0KPiBTdWJqZWN0OiBSRTogW1BBVENIIFY5IDIvNV0gcHdtOiBBZGQgaS5NWCBUUE0gUFdN IGRyaXZlciBzdXBwb3J0DQo+IA0KPiBIaSwgVXdlDQo+IA0KPiBCZXN0IFJlZ2FyZHMhDQo+IEFu c29uIEh1YW5nDQo+IA0KPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gRnJvbTog VXdlIEtsZWluZS1Lw7ZuaWcgW21haWx0bzp1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGVd DQo+ID4gU2VudDogMjAxOeW5tDPmnIgyNeaXpSAxNzozMA0KPiA+IFRvOiBBbnNvbiBIdWFuZyA8 YW5zb24uaHVhbmdAbnhwLmNvbT4NCj4gPiBDYzogdGhpZXJyeS5yZWRpbmdAZ21haWwuY29tOyBy b2JoK2R0QGtlcm5lbC5vcmc7DQo+ID4gbWFyay5ydXRsYW5kQGFybS5jb207IHNoYXduZ3VvQGtl cm5lbC5vcmc7IHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU7DQo+ID4ga2VybmVsQHBlbmd1dHJvbml4 LmRlOyBmZXN0ZXZhbUBnbWFpbC5jb207IGxpbnV4QGFybWxpbnV4Lm9yZy51azsNCj4gPiBzdGVm YW5AYWduZXIuY2g7IG90YXZpb0Bvc3N5c3RlbXMuY29tLmJyOyBMZW9uYXJkIENyZXN0ZXoNCj4g PiA8bGVvbmFyZC5jcmVzdGV6QG54cC5jb20+OyBSb2JpbiBHb25nIDx5aWJpbi5nb25nQG54cC5j b20+Ow0KPiA+IGphbi50dWVya0BlbXRyaW9uLmNvbTsgbGludXgtIHB3bUB2Z2VyLmtlcm5lbC5v cmc7DQo+ID4gZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWFybS0ga2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmc7DQo+ID4gbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgZGwt bGludXgtaW14IDxsaW51eC1pbXhAbnhwLmNvbT4NCj4gPiBTdWJqZWN0OiBSZTogW1BBVENIIFY5 IDIvNV0gcHdtOiBBZGQgaS5NWCBUUE0gUFdNIGRyaXZlciBzdXBwb3J0DQo+ID4NCj4gPiBPbiBG cmksIE1hciAyMiwgMjAxOSBhdCAwMTo0ODoxMUFNICswMDAwLCBBbnNvbiBIdWFuZyB3cm90ZToN Cj4gPiA+IGkuTVg3VUxQIGhhcyBUUE0oTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVs YXRpb24gTW9kdWxlKQ0KPiA+ID4gaW5zaWRlLCBpdCBjYW4gc3VwcG9ydCBtdWx0aXBsZSBQV00g Y2hhbm5lbHMsIGFsbCB0aGUgY2hhbm5lbHMgc2hhcmUNCj4gPiA+IHNhbWUgY291bnRlciBhbmQg cGVyaW9kIHNldHRpbmcsIGJ1dCBlYWNoIGNoYW5uZWwgY2FuIGNvbmZpZ3VyZSBpdHMNCj4gPiA+ IGR1dHkgYW5kIHBvbGFyaXR5IGluZGVwZW5kZW50bHkuDQo+ID4gPg0KPiA+ID4gVGhlcmUgYXJl IHNldmVyYWwgVFBNIG1vZHVsZXMgaW4gaS5NWDdVTFAsIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMg aW4NCj4gPiA+IFRQTSBtb2R1bGVzIGFyZSBkaWZmZXJlbnQsIGl0IGNhbiBiZSByZWFkIGZyb20g ZWFjaCBUUE0gbW9kdWxlJ3MNCj4gPiA+IFBBUkFNIHJlZ2lzdGVyLg0KPiA+ID4NCj4gPiA+IFNp Z25lZC1vZmYtYnk6IEFuc29uIEh1YW5nIDxBbnNvbi5IdWFuZ0BueHAuY29tPg0KPiA+ID4gLS0t DQo+ID4gPiBDaGFuZ2VzIHNpbmNlIFY4Og0KPiA+ID4gCS0gYWRkIG1vcmUgbGltaXRhdGlvbiBu b3RlcyBmb3IgcGVyaW9kL2R1dHkgdXBkYXRlIHVuLWF0b21pYw0KPiA+IGxpbWl0YXRpb25zOw0K PiA+ID4gCS0gYWRkIHdhaXRpbmcgZm9yIHBlcmlvZC9kdXR5IHVwZGF0ZSBhY3R1YWxseSBhcHBs aWVkIHRvIEhXOw0KPiA+ID4gCS0gbW92ZSB0aGUgZHV0eSB1cGRhdGUgaW50byBwZXJpb2QgdXBk YXRlIGZ1bmN0aW9uIHRvIG1ha2UgdGhlbSB0bw0KPiA+IGJlIHVwZGF0ZWQNCj4gPiA+IAkgIGFz IHRvZ2V0aGVyIGFzIHBvc3NpYWJsZTsNCj4gPiA+IAktIGRvbid0IGFsbG93IFBTIGNoYW5nZSBp ZiBjb3VudGVyIGlzIHJ1bm5pbmc7DQo+ID4gPiAJLSBzYXZlIGNoYW5uZWwgcG9sYXJpdHkgc2V0 dGluZ3MgYW5kIHJldHVybiBpdCBkaXJlY3RseSB3aGVuDQo+ID4gPiAuZ2V0X3N0YXRlDQo+ID4g aXMgY2FsbGVkLA0KPiA+ID4gCSAgYXMgdGhlIEhXIHBvbGFyaXR5IHNldHRpbmcgY291bGQgYmUg aW1wYWN0ZWQgYnkgZW5hYmxlIHN0YXR1cy4NCj4gPiA+IC0tLQ0KPiA+ID4gIGRyaXZlcnMvcHdt L0tjb25maWcgICAgICAgfCAgMTEgKw0KPiA+ID4gIGRyaXZlcnMvcHdtL01ha2VmaWxlICAgICAg fCAgIDEgKw0KPiA+ID4gIGRyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMgfCA1MTgNCj4gPiA+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiA+ICAzIGZp bGVzIGNoYW5nZWQsIDUzMCBpbnNlcnRpb25zKCspDQo+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMNCj4gPiA+DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9wd20vS2NvbmZpZyBiL2RyaXZlcnMvcHdtL0tjb25maWcgaW5kZXgNCj4gPiA+IDU0Zjgy MzguLjNlYTAzOTEgMTAwNjQ0DQo+ID4gPiAtLS0gYS9kcml2ZXJzL3B3bS9LY29uZmlnDQo+ID4g PiArKysgYi9kcml2ZXJzL3B3bS9LY29uZmlnDQo+ID4gPiBAQCAtMjEwLDYgKzIxMCwxNyBAQCBj b25maWcgUFdNX0lNWDI3DQo+ID4gPiAgCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1v ZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQ0KPiA+ID4gIAkgIHdpbGwgYmUgY2FsbGVk IHB3bS1pbXgyNy4NCj4gPiA+DQo+ID4gPiArY29uZmlnIFBXTV9JTVhfVFBNDQo+ID4gPiArCXRy aXN0YXRlICJpLk1YIFRQTSBQV00gc3VwcG9ydCINCj4gPiA+ICsJZGVwZW5kcyBvbiBBUkNIX01Y QyB8fCBDT01QSUxFX1RFU1QNCj4gPiA+ICsJZGVwZW5kcyBvbiBIQVZFX0NMSyAmJiBIQVNfSU9N RU0NCj4gPiA+ICsJaGVscA0KPiA+ID4gKwkgIEdlbmVyaWMgUFdNIGZyYW1ld29yayBkcml2ZXIg Zm9yIGkuTVg3VUxQIFRQTSBtb2R1bGUsIFRQTSdzDQo+ID4gZnVsbA0KPiA+ID4gKwkgIG5hbWUg aXMgTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0KPiA+ID4g Kw0KPiA+ID4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBN IGhlcmU6IHRoZSBtb2R1bGUNCj4gPiA+ICsJICB3aWxsIGJlIGNhbGxlZCBwd20taW14LXRwbS4N Cj4gPiA+ICsNCj4gPiA+ICBjb25maWcgUFdNX0paNDc0MA0KPiA+ID4gIAl0cmlzdGF0ZSAiSW5n ZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQiDQo+ID4gPiAgCWRlcGVuZHMgb24gTUFDSF9JTkdFTklD DQo+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vTWFrZWZpbGUgYi9kcml2ZXJzL3B3bS9N YWtlZmlsZSBpbmRleA0KPiA+ID4gNDQ4ODI1ZS4uYzM2ODU5OSAxMDA2NDQNCj4gPiA+IC0tLSBh L2RyaXZlcnMvcHdtL01ha2VmaWxlDQo+ID4gPiArKysgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0K PiA+ID4gQEAgLTE5LDYgKzE5LDcgQEAgb2JqLSQoQ09ORklHX1BXTV9ISUJWVCkJCSs9IHB3bS0N Cj4gPiBoaWJ2dC5vDQo+ID4gPiAgb2JqLSQoQ09ORklHX1BXTV9JTUcpCQkrPSBwd20taW1nLm8N Cj4gPiA+ICBvYmotJChDT05GSUdfUFdNX0lNWDEpCQkrPSBwd20taW14MS5vDQo+ID4gPiAgb2Jq LSQoQ09ORklHX1BXTV9JTVgyNykJCSs9IHB3bS1pbXgyNy5vDQo+ID4gPiArb2JqLSQoQ09ORklH X1BXTV9JTVhfVFBNKQkrPSBwd20taW14LXRwbS5vDQo+ID4gPiAgb2JqLSQoQ09ORklHX1BXTV9K WjQ3NDApCSs9IHB3bS1qejQ3NDAubw0KPiA+ID4gIG9iai0kKENPTkZJR19QV01fTFAzOTQzKQkr PSBwd20tbHAzOTQzLm8NCj4gPiA+ICBvYmotJChDT05GSUdfUFdNX0xQQzE4WFhfU0NUKQkrPSBw d20tbHBjMTh4eC1zY3Qubw0KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1pbXgt dHBtLmMgYi9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQo+ID4gbmV3DQo+ID4gPiBmaWxlIG1v ZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLjU4YWYwOTE1DQo+ID4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gPiArKysgYi9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQo+ID4gPiBAQCAtMCwwICsxLDUx OCBAQA0KPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gPiAr LyoNCj4gPiA+ICsgKiBDb3B5cmlnaHQgMjAxOC0yMDE5IE5YUC4NCj4gPiA+ICsgKg0KPiA+ID4g KyAqIExpbWl0YXRpb25zOg0KPiA+ID4gKyAqIC0gVGhlIFRQTSBjb3VudGVyIGFuZCBwZXJpb2Qg Y291bnRlciBhcmUgc2hhcmVkIGJldHdlZW4NCj4gPiA+ICsgKiAgIG11bHRpcGxlIGNoYW5uZWxz LCBzbyBhbGwgY2hhbm5lbHMgc2hvdWxkIHVzZSBzYW1lIHBlcmlvZA0KPiA+ID4gKyAqICAgc2V0 dGluZ3MuDQo+ID4gPiArICogLSBDaGFuZ2VzIHRvIHBvbGFyaXR5IGNhbm5vdCBiZSBsYXRjaGVk IGF0IHRoZSB0aW1lIG9mIHRoZQ0KPiA+ID4gKyAqICAgbmV4dCBwZXJpb2Qgc3RhcnQuDQo+ID4g PiArICogLSBUaGUgcGVyaW9kIGFuZCBkdXR5IGNoYW5nZXMgYXJlIE5PVCBhdG9taWMsIGlmIG5l dyBwZXJpb2QgYW5kDQo+ID4gPiArICogICBuZXcgZHV0eSBhcmUgcmVxdWVzdGVkIHNpbXVsdGFu ZW91c2x5IHdoZW4gY291bnRlciBpcyBydW5uaW5nLA0KPiA+ID4gKyAqICAgdGhlcmUgY291bGQg YmUgYSBzbWFsbCB3aW5kb3cgb2YgcnVubmluZyBvbGQgZHV0eSB3aXRoIG5ldw0KPiA+ID4gKyAq ICAgcGVyaW9kLCBhcyB0aGUgcGVyaW9kIGlzIHVwZGF0ZWQgYmVmb3JlIGR1dHkgaW4gdGhpcyBk cml2ZXIsIHRoZQ0KPiA+ID4gKyAqICAgcHJvYmFiaWxpdHkgaXMgdmVyeSBsb3csIE9OTFkgaGFw cGVuIHdoZW4gdGhlIFRQTSBjb3VudGVyIGNoYW5nZXMNCj4gPiA+ICsgKiAgIGZyb20gTU9EIHRv IHplcm8gYmV0d2VlbiB0aGUgY29uc2VjdXRpdmUgdXBkYXRlIG9mIHBlcmlvZCBhbmQNCj4gPiA+ ICsgKiAgIGR1dHkuDQo+ID4NCj4gPiBUaGUgd2luZG93IHRoYXQgdGhpcyBidWcgdHJpZ2dlcnMg aXMgc21hbGwsIGJ1dCBpZiBpdCBkb2VzLCB0aGUgd2luZG93DQo+ID4gd2hlcmUgdGhlIGludmFs aWQgY29tYmluYXRpb24gaXMgYXBwbGllZCwgaXNuJ3Qgc21hbGwtLS1pdCdzIG9uZQ0KPiA+IGNv bXBsZXRlIHBlcmlvZCBpZiBJJ20gbm90IG1pc3Rha2VuLiBTbyBJJ2Qgd3JpdGU6DQo+ID4NCj4g PiAgLSBDaGFuZ2luZyBwZXJpb2QgYW5kIGR1dHkgY3ljbGUgdG9nZXRoZXIgaXNuJ3QgYXRvbWlj LiBXaXRoIHRoZSB3cm9uZw0KPiA+ICAgIHRpbWluZyBpdCBtaWdodCBoYXBwZW4gdGhhdCBhIHBl cmlvZCBpcyBwcm9kdWNlZCB3aXRoIG9sZCBkdXR5IGN5Y2xlDQo+ID4gICAgYnV0IG5ldyBwZXJp b2Qgc2V0dGluZ3MuDQo+ID4NCj4gDQo+IE9LLCB0aGFua3MuDQo+IA0KPiA+ID4gKyAqLw0KPiA+ ID4gKw0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRmaWVsZC5oPg0KPiA+ID4gKyNpbmNsdWRl IDxsaW51eC9iaXRvcHMuaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gPiAr I2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5oPg0KPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZl9hZGRyZXNzLmg+DQo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o Pg0KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9wd20uaD4NCj4gPiA+ICsjaW5jbHVkZSA8bGludXgv c2xhYi5oPg0KPiA+ID4gKw0KPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fUEFSQU0JMHg0DQo+ ID4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9HTE9CQUwJMHg4DQo+ID4gPiArI2RlZmluZSBQV01f SU1YX1RQTV9TQwkJMHgxMA0KPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ05UCQkweDE0DQo+ ID4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9NT0QJCTB4MTgNCj4gPiA+ICsjZGVmaW5lIFBXTV9J TVhfVFBNX0NuU0MobikJKDB4MjAgKyAobikgKiAweDgpDQo+ID4gPiArI2RlZmluZSBQV01fSU1Y X1RQTV9DblYobikJKDB4MjQgKyAobikgKiAweDgpDQo+ID4gPiArDQo+ID4gPiArI2RlZmluZSBQ V01fSU1YX1RQTV9QQVJBTV9DSEFOCQkJR0VOTUFTSyg3LA0KPiA+IDApDQo+ID4gPiArDQo+ID4g PiArI2RlZmluZSBQV01fSU1YX1RQTV9TQ19QUwkJCUdFTk1BU0soMiwgMCkNCj4gPiA+ICsjZGVm aW5lIFBXTV9JTVhfVFBNX1NDX0NNT0QJCQlHRU5NQVNLKDQsDQo+IDMpDQo+ID4gPiArI2RlZmlu ZSBQV01fSU1YX1RQTV9TQ19DTU9EX0lOQ19FVkVSWV9DTEsNCj4gPiAJRklFTERfUFJFUChQV01f SU1YX1RQTV9TQ19DTU9ELCAxKQ0KPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fU0NfQ1BXTVMJ CQlCSVQoNSkNCj4gPiA+ICsNCj4gPiA+ICsjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfQ0hGCUJJ VCg3KQ0KPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19NU0IJQklUKDUpDQo+ID4gPiAr I2RlZmluZSBQV01fSU1YX1RQTV9DblNDX01TQQlCSVQoNCkNCj4gPiA+ICsNCj4gPiA+ICsvKg0K PiA+ID4gKyAqIFRoZSByZWZlcmVuY2UgbWFudWFsIGRlc2NyaWJlcyB0aGlzIGZpZWxkIGFzIHR3 byBzZXBhcmF0ZSBiaXRzLg0KPiA+ID4gK1RoZQ0KPiA+ID4gKyAqIHNhbWFudGljIG9mIHRoZSB0 d28gYml0cyBpc24ndCBvcnRob2dvbmFsIHRob3VnaCwgc28gdGhleSBhcmUNCj4gPiA+ICt0cmVh dGVkDQo+ID4NCj4gPiBzL3NhbWFudGljL3NlbWFudGljLw0KPiA+DQo+ID4gPiArICogdG9nZXRo ZXIgYXMgYSAyLWJpdCBmaWVsZCBoZXJlLg0KPiA+ID4gKyAqLw0KPiA+ID4gKyNkZWZpbmUgUFdN X0lNWF9UUE1fQ25TQ19FTFMJR0VOTUFTSygzLCAyKQ0KPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9U UE1fQ25TQ19FTFNfUE9MQVJJVFlfSU5WRVJTRUQJMHgxDQo+ID4gPiArI2RlZmluZSBQV01fSU1Y X1RQTV9DblNDX0VMU19JTlZFUlNFRA0KPiA+IAlGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX0NuU0Nf RUxTLCAxKQ0KPiA+ID4gKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19FTFNfTk9STUFMDQo+ID4g CUZJRUxEX1BSRVAoUFdNX0lNWF9UUE1fQ25TQ19FTFMsIDIpDQo+ID4gPiArDQo+ID4gPiArDQo+ ID4gPiArI2RlZmluZSBQV01fSU1YX1RQTV9NT0RfV0lEVEgJMTYNCj4gPiA+ICsjZGVmaW5lIFBX TV9JTVhfVFBNX01PRF9NT0QNCj4gPiAJR0VOTUFTSyhQV01fSU1YX1RQTV9NT0RfV0lEVEggLSAx LCAwKQ0KPiA+ID4gKw0KPiA+ID4gK3N0cnVjdCBpbXhfdHBtX3B3bV9jaGlwIHsNCj4gPiA+ICsJ c3RydWN0IHB3bV9jaGlwIGNoaXA7DQo+ID4gPiArCXN0cnVjdCBjbGsgKmNsazsNCj4gPiA+ICsJ dm9pZCBfX2lvbWVtICpiYXNlOw0KPiA+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gPiA+ICsJ dTMyIHVzZXJfY291bnQ7DQo+ID4gPiArCXUzMiBlbmFibGVfY291bnQ7DQo+ID4gPiArCXUzMiBy ZWFsX3BlcmlvZDsNCj4gPiA+ICt9Ow0KPiA+ID4gKw0KPiA+ID4gK3N0cnVjdCBpbXhfdHBtX3B3 bV9wYXJhbSB7DQo+ID4gPiArCXU4IHByZXNjYWxlOw0KPiA+ID4gKwl1MzIgbW9kOw0KPiA+ID4g Kwl1MzIgdmFsOw0KPiA+ID4gK307DQo+ID4gPiArDQo+ID4gPiArc3RydWN0IGlteF90cG1fcHdt X2NoYW5uZWwgew0KPiA+ID4gKwllbnVtIHB3bV9wb2xhcml0eSBwb2xhcml0eTsNCj4gPiA+ICt9 Ow0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlteF90cG1fcHdtX2NoaXAg KnRvX2lteF90cG1fcHdtX2NoaXAoc3RydWN0DQo+ID4gPiArcHdtX2NoaXAgKmNoaXApIHsNCj4g PiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCwg Y2hpcCk7IH0NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3JvdW5kX3N0 YXRlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCj4gPiA+ICsJCQkJICAgc3RydWN0IGlteF90cG1f cHdtX3BhcmFtICpwLA0KPiA+ID4gKwkJCQkgICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSwNCj4g PiA+ICsJCQkJICAgc3RydWN0IHB3bV9zdGF0ZSAqcmVhbF9zdGF0ZSkgew0KPiA+ID4gKwlzdHJ1 Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlwKTsNCj4g PiA+ICsJdTMyIHJhdGUsIHByZXNjYWxlLCBwZXJpb2RfY291bnQsIGNsb2NrX3VuaXQ7DQo+ID4g PiArCXU2NCB0bXA7DQo+ID4gPiArDQo+ID4gPiArCXJhdGUgPSBjbGtfZ2V0X3JhdGUodHBtLT5j bGspOw0KPiA+ID4gKwl0bXAgPSAodTY0KXN0YXRlLT5wZXJpb2QgKiByYXRlOw0KPiA+ID4gKwlj bG9ja191bml0ID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgTlNFQ19QRVJfU0VDKTsNCj4g PiA+ICsJaWYgKGNsb2NrX3VuaXQgPD0gUFdNX0lNWF9UUE1fTU9EX01PRCkNCj4gPiA+ICsJCXBy ZXNjYWxlID0gMDsNCj4gPiA+ICsJZWxzZQ0KPiA+ID4gKwkJcHJlc2NhbGUgPSBpbG9nMihjbG9j a191bml0KSArIDEgLQ0KPiA+IFBXTV9JTVhfVFBNX01PRF9XSURUSDsNCj4gPiA+ICsNCj4gPiA+ ICsJaWYgKCghRklFTERfRklUKFBXTV9JTVhfVFBNX1NDX1BTLCBwcmVzY2FsZSkpKQ0KPiA+ID4g KwkJcmV0dXJuIC1FUkFOR0U7DQo+ID4gPiArCXAtPnByZXNjYWxlID0gcHJlc2NhbGU7DQo+ID4g PiArDQo+ID4gPiArCXBlcmlvZF9jb3VudCA9IChjbG9ja191bml0ICsgKCgxIDw8IHByZXNjYWxl KSA+PiAxKSkgPj4gcHJlc2NhbGU7DQo+ID4gPiArCXAtPm1vZCA9IHBlcmlvZF9jb3VudDsNCj4g PiA+ICsNCj4gPiA+ICsJLyogY2FsY3VsYXRlIHJlYWwgcGVyaW9kIEhXIGNhbiBzdXBwb3J0ICov DQo+ID4gPiArCXRtcCA9ICh1NjQpcGVyaW9kX2NvdW50IDw8IHByZXNjYWxlOw0KPiA+ID4gKwl0 bXAgKj0gTlNFQ19QRVJfU0VDOw0KPiA+ID4gKwlyZWFsX3N0YXRlLT5wZXJpb2QgPSBESVZfUk9V TkRfQ0xPU0VTVF9VTEwodG1wLCByYXRlKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJ ICogaWYgZXZlbnR1YWxseSB0aGUgUFdNIG91dHB1dCBpcyBpbmFjdGl2ZSwgZWl0aGVyDQo+ID4g PiArCSAqIGR1dHkgY3ljbGUgaXMgMCBvciBzdGF0dXMgaXMgZGlzYWJsZWQsIG5lZWQgdG8NCj4g PiA+ICsJICogbWFrZSBzdXJlIHRoZSBvdXRwdXQgcGluIGlzIGluYWN0aXZlLg0KPiA+ID4gKwkg Ki8NCj4gPiA+ICsJaWYgKCFzdGF0ZS0+ZW5hYmxlZCkNCj4gPiA+ICsJCXJlYWxfc3RhdGUtPmR1 dHlfY3ljbGUgPSAwOw0KPiA+ID4gKwllbHNlDQo+ID4gPiArCQlyZWFsX3N0YXRlLT5kdXR5X2N5 Y2xlID0gc3RhdGUtPmR1dHlfY3ljbGU7DQo+ID4gPiArDQo+ID4gPiArCXRtcCA9ICh1NjQpcC0+ bW9kICogcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZTsNCj4gPiA+ICsJcC0+dmFsID0gRElWX1JPVU5E X0NMT1NFU1RfVUxMKHRtcCwgcmVhbF9zdGF0ZS0+cGVyaW9kKTsNCj4gPiA+ICsNCj4gPiA+ICsJ cmVhbF9zdGF0ZS0+cG9sYXJpdHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQo+ID4gPiArCXJlYWxfc3Rh dGUtPmVuYWJsZWQgPSBzdGF0ZS0+ZW5hYmxlZDsNCj4gPiA+ICsNCj4gPiA+ICsJcmV0dXJuIDA7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qIHRoaXMgZnVuY3Rpb24gaXMgc3VwcG9zZWQg dG8gYmUgY2FsbGVkIHdpdGggbXV0ZXggaG9sZCAqLyBzdGF0aWMNCj4gPiA+ICtpbnQgcHdtX2lt eF90cG1fc2V0dXBfcGVyaW9kX2R1dHkoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ID4gKwkJ CQkJIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQo+ID4gPiArCQkJCQkgc3RydWN0IGlteF90cG1f cHdtX3BhcmFtICpwKQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAg KnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gPiArCXVuc2lnbmVkIGxvbmcg dGltZW91dDsNCj4gPiA+ICsJdTMyIHZhbCwgY21vZCwgY3VyX3ByZXNjYWxlOw0KPiA+ID4gKw0K PiA+ID4gKwl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQo+ID4gPiAr CWNtb2QgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfQ01PRCwgdmFsKTsNCj4gPiA+ICsJY3Vy X3ByZXNjYWxlID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwpOw0KPiA+ID4gKwlp ZiAoY21vZCAmJiBjdXJfcHJlc2NhbGUgIT0gcC0+cHJlc2NhbGUpDQo+ID4gPiArCQlyZXR1cm4g LUVCVVNZOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBzZXQgVFBNIGNvdW50ZXIgcHJlc2NhbGUgKi8N Cj4gPiA+ICsJdmFsICY9IH5QV01fSU1YX1RQTV9TQ19QUzsNCj4gPiA+ICsJdmFsIHw9IEZJRUxE X1BSRVAoUFdNX0lNWF9UUE1fU0NfUFMsIHAtPnByZXNjYWxlKTsNCj4gPiA+ICsJd3JpdGVsKHZh bCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ ID4gKwkgKiBzZXQgcGVyaW9kIGNvdW50Og0KPiA+ID4gKwkgKiBpZiAoQ01PRFsxOjBdID0gMDow KSB0aGVuIE1PRCByZWdpc3RlciBpcyB1cGRhdGVkIHdoZW4gTU9EDQo+ID4gPiArCSAqIHJlZ2lz dGVyIGlzIHdyaXR0ZW4uDQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIGlmIChDTU9EWzE6MF0g4omg IDA6MCksIHRoZW4gTU9EIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgYWNjb3JkaW5nDQo+ID4gPiArCSAq IHRvIHRoZSBDUFdNUyBiaXQsIHRoYXQgaXM6DQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIGlmIHRo ZSBzZWxlY3RlZCBtb2RlIGlzIG5vdCBDUFdNIHRoZW4gTU9EIHJlZ2lzdGVyIGlzIHVwZGF0ZWQN Cj4gPiA+ICsJICogYWZ0ZXIgTU9EIHJlZ2lzdGVyIHdhcyB3cml0dGVuIGFuZCB0aGUgVFBNIGNv dW50ZXIgY2hhbmdlcyBmcm9tDQo+ID4gPiArCSAqIE1PRCB0byB6ZXJvLg0KPiA+ID4gKwkgKg0K PiA+ID4gKwkgKiBpZiB0aGUgc2VsZWN0ZWQgbW9kZSBpcyBDUFdNIHRoZW4gTU9EIHJlZ2lzdGVy IGlzIHVwZGF0ZWQgYWZ0ZXINCj4gPiA+ICsJICogTU9EIHJlZ2lzdGVyIHdhcyB3cml0dGVuIGFu ZCB0aGUgVFBNIGNvdW50ZXIgY2hhbmdlcyBmcm9tDQo+ID4gTU9EDQo+ID4gPiArCSAqIHRvIChN T0Qg4oCTIDEpLg0KPiA+DQo+ID4gR2l2ZW4gdGhhdCB0aGUgZHJpdmVyIGRvZXNuJ3QgbWFrZSB1 c2Ugb2YgQ1BXTSwgdGhpcyBjb21tZW50IGNvdWxkIGJlDQo+ID4gc2ltcGxpZmllZC4gSSdkIHdy aXRlOg0KPiA+DQo+ID4gCS8qDQo+ID4gCSAqIElmIHRoZSBQV00gaXMgZW5hYmxlZCAoQ01PRFsx OjBdIOKJoCAyYjAwKSwgdGhlIHBlcmlvZCBsZW5ndGgNCj4gPiAJICogaXMgbGF0Y2hlZCBpbnRv IGhhcmR3YXJlIHdoZW4gdGhlIG5leHQgcGVyaW9kIHN0YXJ0cy4NCj4gPiAJICovDQo+ID4NCj4g DQo+IE9LLCB0aGFua3MuDQo+IA0KPiA+IFRoaXMgaXMgZXZlbiB0cnVlIGZvciB0aGUgKGhlcmUg dW51c2VkKSBDUFdNIG1vZGUuIChUaGUgcmVmZXJlbmNlDQo+ID4gbWFudWFsIGlzbid0IGVudGly ZWx5IGNsZWFyIGhlcmUgSU1ITy4gSSBhc3N1bWUgaWYgTU9EID09IDQwMDAgYW5kIENOVA0KPiA+ ID09IDIwMDEgdGhlbiBNT0QgaXMgdGhlbiBjaGFuZ2VkIHRvIDIwMDAsIHRoZSBjdXJyZW50bHkg cnVubmluZyBwZXJpb2QNCj4gPiBpcyBjb21wbGV0ZWQgd2l0aCBhIGxlbmd0aCBvZiA0MDAwIHBy ZXNjYWxlZCBjbGsgY3ljbGVzPyEpDQo+IA0KPiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIGZy b20gUk0sIEkgdGhpbmsgc28uDQo+IA0KPiA+DQo+ID4gPiArCSAqLw0KPiA+ID4gKwl3cml0ZWwo cC0+bW9kLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9NT0QpOw0KPiA+ID4gKw0KPiA+ID4gKwkv Kg0KPiA+ID4gKwkgKiBzZXQgY2hhbm5lbCB2YWx1ZToNCj4gPiA+ICsJICogaWYgKENNT0RbMTow XSA9IDA6MCkgdGhlbiBDblYgcmVnaXN0ZXIgaXMgdXBkYXRlZCB3aGVuIENuVg0KPiA+ID4gKwkg KiByZWdpc3RlciBpcyB3cml0dGVuLg0KPiA+ID4gKwkgKg0KPiA+ID4gKwkgKiBpZiAoQ01PRFsx OjBdIOKJoCAwOjApLCB0aGVuIENuViByZWdpc3RlciBpcyB1cGRhdGVkIGFjY29yZGluZw0KPiA+ ID4gKwkgKiB0byB0aGUgc2VsZWN0ZWQgbW9kZSwgdGhhdCBpczoNCj4gPiA+ICsJICoNCj4gPiA+ ICsJICogaWYgdGhlIHNlbGVjdGVkIG1vZGUgaXMgb3V0cHV0IGNvbXBhcmUgdGhlbiBDblYgcmVn aXN0ZXIgaXMNCj4gPiA+ICsJICogdXBkYXRlZCBvbiB0aGUgbmV4dCBUUE0gY291bnRlciBpbmNy ZW1lbnQgKGVuZCBvZiB0aGUgcHJlc2NhbGVyDQo+ID4gPiArCSAqIGNvdW50aW5nKSBhZnRlciBD blYgcmVnaXN0ZXIgd2FzIHdyaXR0ZW4uDQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIGlmIHRoZSBz ZWxlY3RlZCBtb2RlIGlzIEVQV00gdGhlbiBDblYgcmVnaXN0ZXIgaXMgdXBkYXRlZCBhZnRlcg0K PiA+ID4gKwkgKiBDblYgcmVnaXN0ZXIgd2FzIHdyaXR0ZW4gYW5kIHRoZSBUUE0gY291bnRlciBj aGFuZ2VzIGZyb20gTU9EDQo+ID4gPiArCSAqIHRvIHplcm8uDQo+ID4gPiArCSAqDQo+ID4gPiAr CSAqIGlmIHRoZSBzZWxlY3RlZCBtb2RlIGlzIENQV00gdGhlbiBDblYgcmVnaXN0ZXIgaXMgdXBk YXRlZCBhZnRlcg0KPiA+ID4gKwkgKiBDblYgcmVnaXN0ZXIgd2FzIHdyaXR0ZW4gYW5kIHRoZSBU UE0gY291bnRlciBjaGFuZ2VzIGZyb20gTU9EDQo+ID4gPiArCSAqIHRvIChNT0Qg4oCTIDEpLg0K PiA+DQo+ID4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBhYm92ZSB0b28gdmVyYm9zZSBhbmQgY292 ZXJzIHN0dWZmIHRoYXQgaXMgbm90DQo+ID4gcmVsZXZhbnQgZm9yIHRoaXMgZHJpdmVyLiBBbHNv IHRoZSB1c2VkIHdvcmRpbmcgaXMgbm90IG9idmlvdXMgaWYgeW91DQo+ID4gZG9uJ3QgbG9vayBp bnRvIHRoZSByZWZlcmVuY2UgbWFudWFsLg0KPiANCj4gDQo+IE9LLCB0aGFua3MuDQo+IA0KPiA+ DQo+ID4gPiArCSAqLw0KPiA+ID4gKwl3cml0ZWwocC0+dmFsLCB0cG0tPmJhc2UgKyBQV01fSU1Y X1RQTV9DblYocHdtLT5od3B3bSkpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBtYWtlIHN1cmUgTU9E ICYgQ25WIHJlZ2lzdGVycyBhcmUgdXBkYXRlZCAqLw0KPiA+ID4gKwl0aW1lb3V0ID0gamlmZmll cyArIG1zZWNzX3RvX2ppZmZpZXModHBtLT5yZWFsX3BlcmlvZCAvDQo+ID4gPiArCQkJCQkgICAg IE5TRUNfUEVSX01TRUMgKyAxKTsNCj4gPiA+ICsJd2hpbGUgKHJlYWRsKHRwbS0+YmFzZSArIFBX TV9JTVhfVFBNX01PRCkgIT0gcC0+bW9kDQo+ID4gPiArCSAgICAgICB8fCByZWFkbCh0cG0tPmJh c2UgKyBQV01fSU1YX1RQTV9DblYocHdtLT5od3B3bSkpDQo+ID4gPiArCSAgICAgICAhPSBwLT52 YWwpIHsNCj4gPiA+ICsJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQ0KPiA+ID4g KwkJCXJldHVybiAtRVRJTUU7DQo+ID4gPiArCQljcHVfcmVsYXgoKTsNCj4gPiA+ICsJfQ0KPiA+ ID4gKw0KPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ICt9DQo+ID4gPiBbLi4uXQ0KPiA+ID4gK3N0 YXRpYyBpbnQgcHdtX2lteF90cG1fYXBwbHkoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KPiA+ID4g KwkJCSAgICAgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwNCj4gPiA+ICsJCQkgICAgIHN0cnVjdCBw d21fc3RhdGUgKnN0YXRlKQ0KPiA+ID4gK3sNCj4gPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2No aXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gPiArCXN0cnVjdCBpbXhf dHBtX3B3bV9wYXJhbSBwYXJhbTsNCj4gPiA+ICsJc3RydWN0IHB3bV9zdGF0ZSByZWFsX3N0YXRl Ow0KPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXQgPSBwd21faW14X3RwbV9y b3VuZF9zdGF0ZShjaGlwLCAmcGFyYW0sIHN0YXRlLCAmcmVhbF9zdGF0ZSk7DQo+ID4gPiArCWlm IChyZXQpDQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiA+ICsNCj4gPiA+ICsJbXV0ZXhf bG9jaygmdHBtLT5sb2NrKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogVFBNIGNv dW50ZXIgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGNoYW5uZWxzLCBzbw0KPiA+ID4gKwkgKiBwcmVz Y2FsZSBhbmQgcGVyaW9kIGNhbiBOT1QgYmUgbW9kaWZpZWQgd2hlbg0KPiA+ID4gKwkgKiB0aGVy ZSBhcmUgbXVsdGlwbGUgY2hhbm5lbHMgaW4gdXNlIHdpdGggZGlmZmVyZW50DQo+ID4gPiArCSAq IHBlcmlvZCBzZXR0aW5ncy4NCj4gPiA+ICsJICovDQo+ID4gPiArCWlmIChyZWFsX3N0YXRlLnBl cmlvZCAhPSB0cG0tPnJlYWxfcGVyaW9kKSB7DQo+ID4gPiArCQlpZiAodHBtLT51c2VyX2NvdW50 ID4gMSkgew0KPiA+ID4gKwkJCXJldCA9IC1FQlVTWTsNCj4gPiA+ICsJCQlnb3RvIGV4aXQ7DQo+ ID4gPiArCQl9DQo+ID4gPiArDQo+ID4gPiArCQlyZXQgPSBwd21faW14X3RwbV9zZXR1cF9wZXJp b2RfZHV0eShjaGlwLCBwd20sDQo+ID4gJnBhcmFtKTsNCj4gPiA+ICsJCWlmIChyZXQpDQo+ID4g PiArCQkJZ290byBleGl0Ow0KPiA+ID4gKw0KPiA+ID4gKwkJdHBtLT5yZWFsX3BlcmlvZCA9IHJl YWxfc3RhdGUucGVyaW9kOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+ID4gPiArCXJldCA9IHB3bV9p bXhfdHBtX2FwcGx5X2h3KGNoaXAsIHB3bSwgJnJlYWxfc3RhdGUpOw0KPiA+DQo+ID4gSXQncyB1 bmludHVpdGl2ZSBoZXJlIHRoYXQgYm90aCBwd21faW14X3RwbV9zZXR1cF9wZXJpb2RfZHV0eSBh bmQNCj4gPiBwd21faW14X3RwbV9hcHBseV9odyAocG90ZW50aWFsbHkpIGNvbmZpZ3VyZSB0aGUg ZHV0eSBjeWNsZS4gSSBkaWRuJ3QNCj4gPiB0aG91Z2h0IGl0IHRvIGFuIGVuZCwgYnV0IG1heWJl IHRoaXMgY291bGQgYmUgb3B0aW1pc2VkPw0KPiANCj4gDQo+IFRoaXMgaXMgYWxzbyBteSBjb25j ZXJuIHdoZW4gaW1wbGVtZW50aW5nIGl0LCBzaW5jZSBwZXJpb2QgbmVlZHMgdG8gYmUNCj4gY29u ZmlndXJlZCBiZWZvcmUgZHV0eSwgYW5kIHdlIHdhbnQgdG8gcHV0IHRoZXNlIDIgY29uZmlndXJh dGlvbnMgYXMgY2xvc2UNCj4gYXMgcG9zc2libGUsIHNvIGZvciB0aGUgcGVyaW9kIGNoYW5nZSwg SSBhbHNvIGNvbmZpZ3VyZSB0aGUgZHV0eSB0b2dldGhlciwgYnV0DQo+IGZvciBub3JtYWwgdXNl IGNhc2VzLCBwZXJpb2QgZG9lcyBOT1QgY2hhbmdlLCBzbyB3ZSBhbHNvIG5lZWQgdG8gY29uc2lk ZXINCj4gZHV0eSBjaGFuZ2UgT05MWSBjYXNlLCB0aGF0IGlzIHdoeSBJIHB1dCBhIGN1cnJlbnQg ZHV0eSBhbmQgcmVxdWVzdGVkIGR1dHkNCj4gY2hlY2sgaW4gdGhlIHB3bV9pbXhfdHBtX2FwcGx5 X2h3KCkgZnVuY3Rpb24uDQo+IA0KPiAgICAgICAgICBpZiAoc3RhdGUtPmR1dHlfY3ljbGUgIT0g Yy5kdXR5X2N5Y2xlKSB7DQo+ICAgICAgICAgICAgICAgICAgLyogc2V0IGR1dHkgY291bnRlciAq Lw0KPiAgICAgICAgICAgICAgICAgIHRtcCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBN X01PRCkgJg0KPiBQV01fSU1YX1RQTV9NT0RfTU9EOw0KPiAgICAgICAgICAgICAgICAgIHRtcCAq PSBzdGF0ZS0+ZHV0eV9jeWNsZTsNCj4gICAgICAgICAgICAgICAgICB2YWwgPSBESVZfUk9VTkRf Q0xPU0VTVF9VTEwodG1wLCBzdGF0ZS0+cGVyaW9kKTsNCj4gICAgICAgICAgICAgICAgICB3cml0 ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblYocHdtLT5od3B3bSkpOw0KPiANCj4g DQo+IFdlIGNhbiBhbHNvIHB1dCBhbGwgdGhlIGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyIGluIDEg ZnVuY3Rpb24sIGJ1dCB0aGF0IGFsc28NCj4gaW50cm9kdWNlIHNvbWUgY29uZnVzaW9uIEkgdGhp bmssIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc2VwYXJhdGUgdGhlDQo+IHBlcmlvZCBzZXR0aW5n cyAoZm9yIGFsbCBjaGFubmVscykgYW5kIG90aGVyIHNldHRpbmdzIChmb3IgZWFjaCBjaGFubmVs KSBpbiAyDQo+IGZ1bmN0aW9uLCBpdCBpcyBqdXN0IGJlY2F1c2UgdGhhdCB0aGUgZHV0eSBjaGFu Z2UgaXMgYmV0dGVyIHRvIGJlIHB1dCBhcyBjbG9zZSBhcw0KPiBwZXJpb2QgY2hhbmdlLCBzbyBJ IGRpZCBpdCB0aGlzIHdheS4gTWF5YmUgYWRkIHNvbWUgY29tbWVudHMgZm9yIGl0IGlzDQo+IGFj Y2VwdGFibGU/DQoNCkkganVzdCBzZW50IG91dCBWMTAgcGF0Y2ggc2V0IHRvIHJlbW92ZSB0aGUg IHB3bV9pbXhfdHBtX3NldHVwX3BlcmlvZF9kdXR5KCkNCmZ1bmN0aW9uLCBhbmQgcHV0IGFsbCB0 aGUgY29uZmlndXJhdGlvbnMgaW4gcHdtX2lteF90cG1fYXBwbHlfaHcoKSBmdW5jdGlvbiwNCnRo ZSBkZWZlY3QgaW50cm9kdWNlZCB3b3VsZCBiZSBhIHNsaWdodGx5IGxhdGVuY3kgYmV0d2VlbiBw ZXJpb2QgdXBkYXRlIGFuZCBkdXR5DQp1cGRhdGUsIGl0IGlzIHRyaXZpYWwgSSB0aGluaywgYnV0 IGl0IGNhbiBhdm9pZCB0aGUgZHVwbGljYXRlZCBjb2RlL2Z1bmN0aW9uIG9mIHNldHRpbmcgZHV0 eS4NCg0KVGhhbmtzLg0KQW5zb24uDQoNCg0KPiANCj4gDQo+ID4NCj4gPiA+ICtleGl0Og0KPiA+ ID4gKwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiBy ZXQ7DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyBpbnQgcHdtX2lteF90cG1fcmVx dWVzdChzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsIHN0cnVjdA0KPiA+ID4gK3B3bV9kZXZpY2UgKnB3 bSkgew0KPiA+ID4gKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9w d21fY2hpcChjaGlwKTsNCj4gPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoYW5uZWwgKmNoYW47 DQo+ID4gPiArDQo+ID4gPiArCWNoYW4gPSBkZXZtX2t6YWxsb2MoY2hpcC0+ZGV2LCBzaXplb2Yo KmNoYW4pLCBHRlBfS0VSTkVMKTsNCj4gPg0KPiA+IFRoZXJlIGlzIG5vIGFkdmFudGFnZSBpbiB1 c2luZyB0aGUgZGV2bSB2YXJpYW50IGhlcmUgYXMgdGhlIHJlcXVlc3RlZA0KPiA+IG1lbW9yeSBp cyBmcmVlZCBpbiAuZnJlZSBhbnlob3cuIFNvIHRoaXMgb25seSBhZGRzIGFkZGl0aW9uYWwgbWVt b3J5DQo+ID4gZm9vZHByaW50IGFuZCBydW50aW1lIG92ZXJoZWFkLg0KPiANCj4gTWFrZXMgc2Vu c2UsIEkgd2lsbCB1c2Uga3phbGxvYyBkaXJlY3RseSwgbG9va3MgbGlrZSBvdGhlciBwd20NCj4g ZHJpdmVyKGRyaXZlcnMvcHdtL3B3bS1zYW1zdW5nLmMpIGFsc28gaGFzIHN1Y2ggImlzc3VlIi4N Cj4gDQo+ID4NCj4gPiA+ICsJaWYgKCFjaGFuKQ0KPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ID4gPiArDQo+ID4gPiArCXB3bV9zZXRfY2hpcF9kYXRhKHB3bSwgY2hhbik7DQo+ID4gPiArDQo+ ID4gPiArCW11dGV4X2xvY2soJnRwbS0+bG9jayk7DQo+ID4gPiArCXRwbS0+dXNlcl9jb3VudCsr Ow0KPiA+ID4gKwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQo+ID4gPiArDQo+ID4gPiArCXJl dHVybiAwOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgdm9pZCBwd21faW14X3Rw bV9mcmVlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0DQo+ID4gcHdtX2RldmljZQ0KPiA+ ID4gKypwd20pIHsNCj4gPiA+ICsJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lt eF90cG1fcHdtX2NoaXAoY2hpcCk7DQo+ID4gPiArDQo+ID4gPiArCW11dGV4X2xvY2soJnRwbS0+ bG9jayk7DQo+ID4gPiArCXRwbS0+dXNlcl9jb3VudC0tOw0KPiA+ID4gKwltdXRleF91bmxvY2so JnRwbS0+bG9jayk7DQo+ID4gPiArDQo+ID4gPiArCWRldm1fa2ZyZWUoY2hpcC0+ZGV2LCBwd21f Z2V0X2NoaXBfZGF0YShwd20pKTsNCj4gPiA+ICsJcHdtX3NldF9jaGlwX2RhdGEocHdtLCBOVUxM KTsNCj4gPg0KPiA+IFRoZSBjYWxsIHRvIHB3bV9zZXRfY2hpcF9kYXRhIGNvdWxkIGJldHRlciBi ZSBkb25lIGluIHRoZSBQV00gY29yZS4NCj4gDQo+IFlvdSBtZWFudCBkb2luZyBhIG5ldyBwYXRj aCB0byBhZGQgaXQgaW4gUFdNIGNvcmUuYyBhZnRlciAtPmZyZWUgY2FsbD8NCj4gSWYgeWVzLCB0 aGVuIEkgdGhpbmsgdGhpcyBzaG91bGQgYmUgYW5vdGhlciB0b3BpYywgYXMgbWFueSBvdGhlciBw d20gZHJpdmVycw0KPiBhbHNvIGNhbGwgaXQgaW4gdGhlaXIgb3duIGRyaXZlciwgbWF5YmUgaXQg Y2FuIGJlIGltcHJvdmVkIGJ5IGFub3RoZXIgcGF0Y2g/DQo+IA0KPiBUaGFua3MsDQo+IEFuc29u Lg0KPiANCj4gPg0KPiA+ID4gK30NCj4gPg0KPiA+IC0tDQo+ID4gUGVuZ3V0cm9uaXggZS5LLiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVXdlIEtsZWluZS1Lw7ZuaWcgICAgICAgICAgICB8 DQo+ID4gSW5kdXN0cmlhbCBMaW51eCBTb2x1dGlvbnMgICAgICAgICAgICAgICAgIHwNCj4gPg0K PiBodHRwczovL2V1cjAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0 cCUzQSUyRiUyRnd3dy5wDQo+ID4NCj4gZW5ndXRyb25peC5kZSUyRiZhbXA7ZGF0YT0wMiU3QzAx JTdDYW5zb24uaHVhbmclNDBueHAuY29tJTdDYTcNCj4gPg0KPiAxOTM3YzlkNWU4NDAzMzMwOTAw OGQ2YjEwNDhjM2ElN0M2ODZlYTFkM2JjMmI0YzZmYTkyY2Q5OWM1YzMwMTYzDQo+ID4NCj4gNSU3 QzAlN0MwJTdDNjM2ODkxMDMwNDIzMDg3Mjg0JmFtcDtzZGF0YT1hM3hzdTlpYUFHdmZVWXYlMkZO bzYNCj4gPiBUNVV2dzZrJTJGNVZieUkyY0Z6c3JuQTRJTSUzRCZhbXA7cmVzZXJ2ZWQ9MCAgfA0K