From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CBB5FC43381 for ; Thu, 28 Mar 2019 02:10:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6FB5F2173C for ; Thu, 28 Mar 2019 02:10:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="qwlvL/U0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726681AbfC1CKd (ORCPT ); Wed, 27 Mar 2019 22:10:33 -0400 Received: from mail-eopbgr30053.outbound.protection.outlook.com ([40.107.3.53]:61566 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725948AbfC1CKd (ORCPT ); Wed, 27 Mar 2019 22:10:33 -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=HZ+oITH9MCZdLJFpSIuOKSBDkzf3mzui9V5y+Pbmk9E=; b=qwlvL/U0yWVJ1QRlskhgiMsTBVRaiJuKSzATHR3CbhU3y2rj/cenNBCgVGIXLC0Nh4aKfoPenrthQevj3WYwa9+LTYnxr+Zd4vNMDCXZ+loDz4M2m33nEL2B/o5VrQXPtPynHp1cZOsTFxt7QS5vU0mmUg6PG9vzFGYLYRmXn7c= Received: from AM6PR04MB5781.eurprd04.prod.outlook.com (20.179.3.19) by AM6PR04MB4472.eurprd04.prod.outlook.com (20.176.242.212) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1730.19; Thu, 28 Mar 2019 02:09:55 +0000 Received: from AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::30cc:e034:1f7a:2cc7]) by AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::30cc:e034:1f7a:2cc7%2]) with mapi id 15.20.1750.014; Thu, 28 Mar 2019 02:09:55 +0000 From: "Z.q. Hou" To: Lorenzo Pieralisi CC: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , Leo Li , "catalin.marinas@arm.com" , "will.deacon@arm.com" , Mingkai Hu , "M.h. Lian" , Xiaowei Bao Subject: RE: [PATCHv4 16/28] PCI: mobiveil: refactor Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv4 16/28] PCI: mobiveil: refactor Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHU1+1JKH7BRWLFLk+IghztSVt2gqYeRHCAgACM1qCAAQbRgIAAh4pg Date: Thu, 28 Mar 2019 02:09:55 +0000 Message-ID: References: <20190311093130.7209-1-Zhiqiang.Hou@nxp.com> <20190311093130.7209-17-Zhiqiang.Hou@nxp.com> <20190326173421.GB10666@e107981-ln.cambridge.arm.com> <20190327173905.GA19093@red-moon> In-Reply-To: <20190327173905.GA19093@red-moon> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f640779b-b24c-491e-042f-08d6b32278ec 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:AM6PR04MB4472; x-ms-traffictypediagnostic: AM6PR04MB4472: x-microsoft-antispam-prvs: x-forefront-prvs: 0990C54589 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(346002)(376002)(396003)(39860400002)(136003)(189003)(13464003)(199004)(52314003)(81156014)(76176011)(6916009)(86362001)(7696005)(99286004)(25786009)(66066001)(229853002)(6246003)(4326008)(81166006)(52536014)(5660300002)(68736007)(71190400001)(305945005)(74316002)(7416002)(8936002)(71200400001)(3846002)(6116002)(9686003)(54906003)(316002)(53946003)(97736004)(7736002)(486006)(30864003)(53936002)(256004)(2906002)(8676002)(55016002)(93886005)(6506007)(476003)(446003)(106356001)(6436002)(14444005)(53546011)(5024004)(102836004)(11346002)(186003)(105586002)(14454004)(478600001)(33656002)(26005)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB4472;H:AM6PR04MB5781.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: XYDj7gPZNsHarCWKl15hEewtoMFr4hx5A6JH8DkG8tmMYyoNAYwoWh1Uha8RskQjmYcOqLH24YSqO5FhDLmS6Ygmp18hE+58sZfd32qgy9qhmevwuHLz0QOxTrokBGVKVZY8jfaXaywVaARzwNiA3chdxjYlC3ObWS031+DN3vGUEJUyUyPvK+mJBWKRb9KaTV+8Oa0x14S/GkvOv3vHvF07V2SnxRlqki0+okBiQZkUzo2mj5NuwIbzuH7c3lPWGeFXTfkH9MYTmJotAeHUdPnlz7VqVTl7Bkuv82wTOd8JqU/NFShJWXGMsLIi4a2NBvHHRVkjzniY5QlcbTbnFznSNqKTkeKXugpB3ObA/H/GJbZbIU4to0NsHfhv/msrukgw68JHYYdSY3deOl6EDJC4t9+MKj+XlojnoUizUIk= 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: f640779b-b24c-491e-042f-08d6b32278ec X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Mar 2019 02:09:55.7036 (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: AM6PR04MB4472 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org SGkgTG9yZW56bywNCg0KVGhhbmtzIGEgbG90IGZvciB5b3VyIGNvbW1lbnRzIQ0KDQo+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IExvcmVuem8gUGllcmFsaXNpIDxsb3Jlbnpv LnBpZXJhbGlzaUBhcm0uY29tPg0KPiBTZW50OiAyMDE55bm0M+aciDI45pelIDE6MzkNCj4gVG86 IFoucS4gSG91IDx6aGlxaWFuZy5ob3VAbnhwLmNvbT4NCj4gQ2M6IGxpbnV4LXBjaUB2Z2VyLmtl cm5lbC5vcmc7IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZzsNCj4gZGV2aWNl dHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7DQo+IGJo ZWxnYWFzQGdvb2dsZS5jb207IHJvYmgrZHRAa2VybmVsLm9yZzsgbWFyay5ydXRsYW5kQGFybS5j b207DQo+IGwuc3VicmFobWFueWFAbW9iaXZlaWwuY28uaW47IHNoYXduZ3VvQGtlcm5lbC5vcmc7 IExlbyBMaQ0KPiA8bGVveWFuZy5saUBueHAuY29tPjsgY2F0YWxpbi5tYXJpbmFzQGFybS5jb207 IHdpbGwuZGVhY29uQGFybS5jb207DQo+IE1pbmdrYWkgSHUgPG1pbmdrYWkuaHVAbnhwLmNvbT47 IE0uaC4gTGlhbiA8bWluZ2h1YW4ubGlhbkBueHAuY29tPjsNCj4gWGlhb3dlaSBCYW8gPHhpYW93 ZWkuYmFvQG54cC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0h2NCAxNi8yOF0gUENJOiBtb2Jp dmVpbDogcmVmYWN0b3IgTW9iaXZlaWwgUENJZSBIb3N0DQo+IEJyaWRnZSBJUCBkcml2ZXINCj4g DQo+IE9uIFdlZCwgTWFyIDI3LCAyMDE5IGF0IDAyOjA0OjAwQU0gKzAwMDAsIFoucS4gSG91IHdy b3RlOg0KPiA+IEhpIExvcmVuem8sDQo+ID4NCj4gPiBUaGFua3MgZm9yIHlvdXIgY29tbWVudHMh DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBMb3Jl bnpvIFBpZXJhbGlzaSA8bG9yZW56by5waWVyYWxpc2lAYXJtLmNvbT4NCj4gPiA+IFNlbnQ6IDIw MTnlubQz5pyIMjfml6UgMTozNA0KPiA+ID4gVG86IFoucS4gSG91IDx6aGlxaWFuZy5ob3VAbnhw LmNvbT4NCj4gPiA+IENjOiBsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmc7DQo+ID4gPiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9y ZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gPiA+IGJoZWxnYWFzQGdvb2dsZS5j b207IHJvYmgrZHRAa2VybmVsLm9yZzsgbWFyay5ydXRsYW5kQGFybS5jb207DQo+ID4gPiBsLnN1 YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluOyBzaGF3bmd1b0BrZXJuZWwub3JnOyBMZW8gTGkNCj4g PiA+IDxsZW95YW5nLmxpQG54cC5jb20+OyBjYXRhbGluLm1hcmluYXNAYXJtLmNvbTsNCj4gd2ls bC5kZWFjb25AYXJtLmNvbTsNCj4gPiA+IE1pbmdrYWkgSHUgPG1pbmdrYWkuaHVAbnhwLmNvbT47 IE0uaC4gTGlhbg0KPiA8bWluZ2h1YW4ubGlhbkBueHAuY29tPjsNCj4gPiA+IFhpYW93ZWkgQmFv IDx4aWFvd2VpLmJhb0BueHAuY29tPg0KPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSHY0IDE2LzI4 XSBQQ0k6IG1vYml2ZWlsOiByZWZhY3RvciBNb2JpdmVpbCBQQ0llIEhvc3QNCj4gPiA+IEJyaWRn ZSBJUCBkcml2ZXINCj4gPiA+DQo+ID4gPiBPbiBNb24sIE1hciAxMSwgMjAxOSBhdCAwOTozMjow NEFNICswMDAwLCBaLnEuIEhvdSB3cm90ZToNCj4gPiA+ID4gRnJvbTogSG91IFpoaXFpYW5nIDxa aGlxaWFuZy5Ib3VAbnhwLmNvbT4NCj4gPiA+ID4NCj4gPiA+ID4gQXMgdGhlIE1vYml2ZWlsIFBD SWUgY29udHJvbGxlciBzdXBwb3J0IFJDJkVQIERBVUwgbW9kZSwgYW5kIHRvIG1ha2UNCj4gPiA+ ID4gcGxhdGZvcm1zIHdoaWNoIGludGVncmF0ZWQgdGhlIE1vYml2ZWlsIFBDSWUgSVAgbW9yZSBl YXN5IHRvIGFkZCB0aGVpcg0KPiA+ID4gPiBkcml2ZXJzLCB0aGlzIHBhdGNoIG1vdmVkIHRoZSBN b2JpdmVpbCBkcml2ZXIgdG8gYSBuZXcgZGlyZWN0b3J5DQo+ID4gPiA+ICdkcml2ZXJzL3BjaS9j b250cm9sbGVyL21vYml2ZWlsJyBhbmQgcmVmYWN0b3JlZCBpdCBhY2NvcmRpbmcgdG8gdGhlDQo+ ID4gPiA+IGFic3RyYWN0aW9uIG9mIFJDJkVQIChFUCBkcml2ZXIgd2lsbCBiZSBhZGRlZCBsYXRl cikuDQo+ID4gPg0KPiA+ID4gSSBkbyBub3Qgd2FudCB0byBjcmVhdGUgYSBzdWJkaXJlY3Rvcnkg Zm9yIGV2ZXJ5IGNvbnRyb2xsZXIgdGhhdCBjYW4gd29yayBpbg0KPiA+ID4gUkMmRVAgc28gZHJv cCB0aGlzIHBhdGNoLCBtb3JlIHNvIGdpdmVuIHRoYXQgaXQgd2lsbCBiZSByZXF1aXJlZCAibGF0 ZXIiLCB3ZQ0KPiA+ID4gd2lsbCBjcmVhdGUgYSBkaXJlY3Rvcnkgd2hlbiBhbmQgaWYgd2UgYWN0 dWFsbHkgaGF2ZSB0by4NCj4gPg0KPiA+IFBsZWFzZSBkb24ndCBkcm9wIHRoaXMgcGF0Y2gsIFhp YW93ZWkgQmFvIGhhcyBzZW50IHYxIG9mIHRoZSBFUCBtb2RlDQo+ID4gZHJpdmVyLCB3aGljaCBp cyBkZXBlbmRzIG9uIHRoaXMgcGF0Y2guDQo+IA0KPiBJIHVuZGVyc3RhbmQgYnV0IGhlIHdpbGwg aGF2ZSB0byByZWJhc2UgdGhhdCBjb2RlIGFueXdheSwgSSBkbw0KPiBub3Qgd2FudCB0byBjcmVh dGUgYSBkaXJlY3RvcnkgZm9yIG1vYml2ZWlsIGJlZm9yZSBJIHNlZSBvdGhlcg0KPiBJUHMgYnVp bHQgb24gaXQsIHdlIGRpZCBub3QgZG8gaXQgZm9yIHRoZSBjYWRlbmNlIGFuZCByb2NrY2hpcA0K PiBjb250cm9sbGVycyBlaXRoZXIuIFNvIHlvdSB3aWxsIGhhdmUgdG8gZHJvcCB0aGlzIHBhdGNo IGFuZA0KPiByZXdvcmsgaXQuDQoNCkl0J3MgZGlmZmVyZW50IGZyb20gY2FkZW5jZSBhbmQgcm9j a2NoaXAgY2FzZXMsIHRoZXkgb25seSBoYXZlIDEgZHJpdmVyLCBzbyBkbyBub3QgbmVlZCB0byBj cmVhdGUgYSBkaXJlY3RvcnksIHdoaWxlIHdlIGhhdmUgTlhQJ3MgTFgyMTYwIHBsYXRmb3JtIGFu ZCBNb2JpdmVpbCdzIEZQR0EgcGxhdGZvcm0gYm90aCB1c2UgTW9iaXZlaWwncyBHUEVYIElQLCBz byB3ZSBhbHJlYWR5IGhhdmUgMiBkcml2ZXJzLCBzbyBJIHRoaW5rIGl0IGlzIHJlYXNvbmFibGUg dG8gY29sbGVjdCBpbnRvIGFuIG5ldyBkaXJlY3RvcnkuDQoNClRoYW5rcywNClpoaXFpYW5nDQoN Cj4gVGhhbmtzLA0KPiBMb3JlbnpvDQo+IA0KPiA+ID4gVGhhbmtzLA0KPiA+ID4gTG9yZW56bw0K PiA+ID4NCj4gPiA+ID4gU2lnbmVkLW9mZi1ieTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VA bnhwLmNvbT4NCj4gPiA+ID4gUmV2aWV3ZWQtYnk6IE1pbmdodWFuIExpYW4gPE1pbmdodWFuLkxp YW5AbnhwLmNvbT4NCj4gPiA+ID4gUmV2aWV3ZWQtYnk6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxs LnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KPiA+ID4gPiAtLS0NCj4gPiA+ID4gVjQ6DQo+ ID4gPiA+ICAtIG5vIGNoYW5nZQ0KPiA+ID4gPg0KPiA+ID4gPiAgTUFJTlRBSU5FUlMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstDQo+ID4gPiA+ICBkcml2ZXJzL3Bj aS9jb250cm9sbGVyL0tjb25maWcgICAgICAgICAgICAgICAgfCAgMTEgKy0NCj4gPiA+ID4gIGRy aXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMiArLQ0KPiA+ ID4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29uZmlnICAgICAgIHwgIDI0 ICsNCj4gPiA+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUgICAg ICB8ICAgNCArDQo+ID4gPiA+ICAuLi4vcGNpZS1tb2JpdmVpbC1ob3N0LmN9ICAgICAgICAgICAg ICAgICAgICAgfCA1MjgNCj4gKysrLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiA+ICAuLi4vY29udHJv bGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYyAgfCAgNTQgKysNCj4gPiA+ID4gIC4u Li9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMgICB8IDIyOCArKysrKysr Kw0KPiA+ID4gPiAgLi4uL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuaCAg IHwgMTg3ICsrKysrKysNCj4gPiA+ID4gIDkgZmlsZXMgY2hhbmdlZCwgNTg3IGluc2VydGlvbnMo KyksIDQ1MyBkZWxldGlvbnMoLSkgIGNyZWF0ZSBtb2RlDQo+ID4gPiA+IDEwMDY0NCBkcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcNCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQo+ID4gPiA+ICBy ZW5hbWUgZHJpdmVycy9wY2kvY29udHJvbGxlci97cGNpZS1tb2JpdmVpbC5jID0+DQo+ID4gPiA+ IG1vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5jfSAoNTUlKSAgY3JlYXRlIG1vZGUgMTAwNjQ0 DQo+ID4gPiA+IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1w bGF0LmMNCj4gPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVy L21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuYw0KPiA+ID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oDQo+ID4gPiA+DQo+ ID4gPiA+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTIGluZGV4DQo+ID4g PiA+IDFlNjQyNzlmMzM4YS4uMTAxM2U3NGIxNGYyIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9NQUlO VEFJTkVSUw0KPiA+ID4gPiArKysgYi9NQUlOVEFJTkVSUw0KPiA+ID4gPiBAQCAtMTE4NzcsNyAr MTE4NzcsNyBAQCBNOglTdWJyYWhtYW55YSBMaW5nYXBwYQ0KPiA+ID4gPGwuc3VicmFobWFueWFA bW9iaXZlaWwuY28uaW4+DQo+ID4gPiA+ICBMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnDQo+ ID4gPiA+ICBTOglTdXBwb3J0ZWQNCj4gPiA+ID4gIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJl ZS9iaW5kaW5ncy9wY2kvbW9iaXZlaWwtcGNpZS50eHQNCj4gPiA+ID4gLUY6CWRyaXZlcnMvcGNp L2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gPiA+ICtGOglkcml2ZXJzL3BjaS9jb250 cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwqDQo+ID4gPiA+DQo+ID4gPiA+ICBQQ0kgRFJJ VkVSIEZPUiBNVkVCVSAoTWFydmVsbCBBcm1hZGEgMzcwIGFuZCBBcm1hZGEgWFAgU09DDQo+ID4g PiBzdXBwb3J0KQ0KPiA+ID4gPiAgTToJVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9u aUBib290bGluLmNvbT4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvS2NvbmZpZw0KPiA+ID4gPiBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyBpbmRl eCA2NjcxOTQ2ZGJmNjYuLjBlOTgxZWQwMGE3NQ0KPiA+ID4gPiAxMDA2NDQNCj4gPiA+ID4gLS0t IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+ID4gPiBAQCAtMjQxLDE2ICsyNDEsNiBAQCBjb25m aWcgUENJRV9NRURJQVRFSw0KPiA+ID4gPiAgCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBl bmFibGUgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24NCj4gPiA+ID4gIAkgIE1lZGlhVGVrIFNv Q3MuDQo+ID4gPiA+DQo+ID4gPiA+IC1jb25maWcgUENJRV9NT0JJVkVJTA0KPiA+ID4gPiAtCWJv b2wgIk1vYml2ZWlsIEFYSSBQQ0llIGNvbnRyb2xsZXIiDQo+ID4gPiA+IC0JZGVwZW5kcyBvbiBB UkNIX1pZTlFNUCB8fCBDT01QSUxFX1RFU1QNCj4gPiA+ID4gLQlkZXBlbmRzIG9uIE9GDQo+ID4g PiA+IC0JZGVwZW5kcyBvbiBQQ0lfTVNJX0lSUV9ET01BSU4NCj4gPiA+ID4gLQloZWxwDQo+ID4g PiA+IC0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUg TW9iaXZlaWwgQVhJIFBDSWUNCj4gPiA+ID4gLQkgIFNvZnQgSVAuIEl0IGhhcyB1cCB0byA4IG91 dGJvdW5kIGFuZCBpbmJvdW5kIHdpbmRvd3MNCj4gPiA+ID4gLQkgIGZvciBhZGRyZXNzIHRyYW5z bGF0aW9uIGFuZCBpdCBpcyBhIFBDSWUgR2VuNCBJUC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAgY29u ZmlnIFBDSUVfVEFOR09fU01QODc1OQ0KPiA+ID4gPiAgCWJvb2wgIlRhbmdvIFNNUDg3NTkgUENJ ZSBjb250cm9sbGVyIChEQU5HRVJPVVMpIg0KPiA+ID4gPiAgCWRlcGVuZHMgb24gQVJDSF9UQU5H TyAmJiBQQ0lfTVNJICYmIE9GIEBAIC0yODEsNCArMjcxLDUNCj4gQEANCj4gPiA+IGNvbmZpZw0K PiA+ID4gPiBWTUQNCj4gPiA+ID4gIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2bWQuDQo+ID4g PiA+DQo+ID4gPiA+ICBzb3VyY2UgImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvZHdjL0tjb25maWci DQo+ID4gPiA+ICtzb3VyY2UgImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZp ZyINCj4gPiA+ID4gIGVuZG1lbnUNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvTWFrZWZpbGUNCj4gPiA+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2Vm aWxlIGluZGV4IGQ1NmE1MDc0OTVjNS4uYjc5YTYxNTA0MWEwDQo+ID4gPiA+IDEwMDY0NA0KPiA+ ID4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQo+ID4gPiA+ICsrKyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCj4gPiA+ID4gQEAgLTI2LDExICsyNiwx MSBAQCBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUCkgKz0NCj4gcGNpZS1yb2NrY2hpcC5vDQo+ ID4gPiA+ICBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9FUCkgKz0gcGNpZS1yb2NrY2hpcC1l cC5vDQo+ID4gPiA+ICBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2llLXJv Y2tjaGlwLWhvc3Qubw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUspICs9IHBj aWUtbWVkaWF0ZWsubw0KPiA+ID4gPiAtb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUwpICs9IHBj aWUtbW9iaXZlaWwubw0KPiA+ID4gPiAgb2JqLSQoQ09ORklHX1BDSUVfVEFOR09fU01QODc1OSkg Kz0gcGNpZS10YW5nby5vDQo+ID4gPiA+ICBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ ID4gPiAgIyBwY2llLWhpc2kubyBxdWlya3MgYXJlIG5lZWRlZCBldmVuIHdpdGhvdXQgQ09ORklH X1BDSUVfRFcNCj4gPiA+ID4gIG9iai15CQkJCSs9IGR3Yy8NCj4gPiA+ID4gK29iai15CQkJCSs9 IG1vYml2ZWlsLw0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiAgIyBUaGUgZm9sbG93aW5nIGRy aXZlcnMgYXJlIGZvciBkZXZpY2VzIHRoYXQgdXNlIHRoZSBnZW5lcmljIEFDUEkNCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KPiA+ ID4gPiBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KPiA+ID4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjY0MzQzYzA3 YmZlZA0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KPiA+ID4gPiBAQCAtMCwwICsxLDI0IEBADQo+ID4g PiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gPiA+ICsNCj4gPiA+ ID4gK21lbnUgIk1vYml2ZWlsIFBDSWUgQ29yZSBTdXBwb3J0Ig0KPiA+ID4gPiArCWRlcGVuZHMg b24gUENJDQo+ID4gPiA+ICsNCj4gPiA+ID4gK2NvbmZpZyBQQ0lFX01PQklWRUlMDQo+ID4gPiA+ ICsJYm9vbA0KPiA+ID4gPiArDQo+ID4gPiA+ICtjb25maWcgUENJRV9NT0JJVkVJTF9IT1NUDQo+ ID4gPiA+ICsgICAgICAgIGJvb2wNCj4gPiA+ID4gKwlkZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RP TUFJTg0KPiA+ID4gPiArICAgICAgICBzZWxlY3QgUENJRV9NT0JJVkVJTA0KPiA+ID4gPiArDQo+ ID4gPiA+ICtjb25maWcgUENJRV9NT0JJVkVJTF9QTEFUDQo+ID4gPiA+ICsJYm9vbCAiTW9iaXZl aWwgQVhJIFBDSWUgY29udHJvbGxlciINCj4gPiA+ID4gKwlkZXBlbmRzIG9uIEFSQ0hfWllOUU1Q IHx8IENPTVBJTEVfVEVTVA0KPiA+ID4gPiArCWRlcGVuZHMgb24gT0YNCj4gPiA+ID4gKwlzZWxl Y3QgUENJRV9NT0JJVkVJTF9IT1NUDQo+ID4gPiA+ICsJaGVscA0KPiA+ID4gPiArCSAgU2F5IFkg aGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE1vYml2ZWlsIEFYSSBQ Q0llDQo+ID4gPiA+ICsJICBTb2Z0IElQLiBJdCBoYXMgdXAgdG8gOCBvdXRib3VuZCBhbmQgaW5i b3VuZCB3aW5kb3dzDQo+ID4gPiA+ICsJICBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgaXQg aXMgYSBQQ0llIEdlbjQgSVAuDQo+ID4gPiA+ICsNCj4gPiA+ID4gK2VuZG1lbnUNCj4gPiA+ID4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUNCj4g PiA+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQo+ID4gPiA+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWZiNmQx YzY1MDRkDQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9wY2kv Y29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KPiA+ID4gPiBAQCAtMCwwICsxLDQgQEANCj4g PiA+ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiA+ID4gK29iai0k KENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWlsLm8NCj4gPiA+ID4gK29iai0k KENPTkZJR19QQ0lFX01PQklWRUlMX0hPU1QpICs9IHBjaWUtbW9iaXZlaWwtaG9zdC5vDQo+ID4g PiA+ICtvYmotJChDT05GSUdfUENJRV9NT0JJVkVJTF9QTEFUKSArPSBwY2llLW1vYml2ZWlsLXBs YXQubw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1v Yml2ZWlsLmMNCj4gPiA+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUt bW9iaXZlaWwtaG9zdC5jDQo+ID4gPiA+IHNpbWlsYXJpdHkgaW5kZXggNTUlDQo+ID4gPiA+IHJl bmFtZSBmcm9tIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gPiA+ IHJlbmFtZSB0byBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwt aG9zdC5jDQo+ID4gPiA+IGluZGV4IDkyMTAxNjVmZThjMC4uZGM1MzI0ZDk0NDY2IDEwMDY0NA0K PiA+ID4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYw0KPiA+ ID4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwt aG9zdC5jDQo+ID4gPiA+IEBAIC00LDkgKzQsOSBAQA0KPiA+ID4gPiAgICoNCj4gPiA+ID4gICAq IENvcHlyaWdodCAoYykgMjAxOCBNb2JpdmVpbCBJbmMuDQo+ID4gPiA+ICAgKiBBdXRob3I6IFN1 YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KPiA+ID4g PiArICogUmVmYWN0b3I6IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcuSG91QG54cC5jb20+DQo+ID4g PiA+ICAgKi8NCj4gPiA+ID4NCj4gPiA+ID4gLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ ID4gPiAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4NCj4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCj4gPiA+ID4gQEAg LTIzLDI3NSArMjMsMjEgQEANCj4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4NCj4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gPiA+DQo+ID4gPiA+ IC0jaW5jbHVkZSAiLi4vcGNpLmgiDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qIHJlZ2lzdGVyIG9m ZnNldHMgYW5kIGJpdCBwb3NpdGlvbnMgKi8NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoNCj4gPiA+ ID4gLSAqIHRyYW5zbGF0aW9uIHRhYmxlcyBhcmUgZ3JvdXBlZCBpbnRvIHdpbmRvd3MsIGVhY2gg d2luZG93IHJlZ2lzdGVycw0KPiA+ID4gPiBhcmUNCj4gPiA+ID4gLSAqIGdyb3VwZWQgaW50byBi bG9ja3Mgb2YgNCBvciAxNiByZWdpc3RlcnMgZWFjaA0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC0j ZGVmaW5lIFBBQl9SRUdfQkxPQ0tfU0laRQkJMTYNCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0VYVF9S RUdfQkxPQ0tfU0laRQkJNA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0jZGVmaW5lIFBBQl9SRUdfQURE UihvZmZzZXQsIHdpbikJXA0KPiA+ID4gPiAtCShvZmZzZXQgKyAod2luICogUEFCX1JFR19CTE9D S19TSVpFKSkNCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0VYVF9SRUdfQUREUihvZmZzZXQsIHdpbikJ XA0KPiA+ID4gPiAtCShvZmZzZXQgKyAod2luICogUEFCX0VYVF9SRUdfQkxPQ0tfU0laRSkpDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSNkZWZpbmUgTFRTU01fU1RBVFVTCQkJMHgwNDA0DQo+ID4gPiA+ IC0jZGVmaW5lICBMVFNTTV9TVEFUVVNfTDBfTUFTSwkJMHgzZg0KPiA+ID4gPiAtI2RlZmluZSAg TFRTU01fU1RBVFVTX0wwCQkweDJkDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0NU UkwJCQkweDA4MDgNCj4gPiA+ID4gLSNkZWZpbmUgIEFNQkFfUElPX0VOQUJMRV9TSElGVAkJMA0K PiA+ID4gPiAtI2RlZmluZSAgUEVYX1BJT19FTkFCTEVfU0hJRlQJCTENCj4gPiA+ID4gLSNkZWZp bmUgIFBBR0VfU0VMX1NISUZUCQkJMTMNCj4gPiA+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX01BU0sJ CQkweDNmDQo+ID4gPiA+IC0jZGVmaW5lICBQQUdFX0xPX01BU0sJCQkweDNmZg0KPiA+ID4gPiAt I2RlZmluZSAgUEFHRV9TRUxfT0ZGU0VUX1NISUZUCQkxMA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0j ZGVmaW5lIFBBQl9BWElfUElPX0NUUkwJCTB4MDg0MA0KPiA+ID4gPiAtI2RlZmluZSAgQVBJT19F Tl9NQVNLCQkJMHhmDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNkZWZpbmUgUEFCX1BFWF9QSU9fQ1RS TAkJMHgwOGMwDQo+ID4gPiA+IC0jZGVmaW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQgkJMHgwYjBjDQo+ID4g PiA+IC0jZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19TVEFUCQkweDBiMWMNCj4gPiA+ID4gLSNk ZWZpbmUgIFBBQl9JTlRQX0lOVFhfTUFTSwkJMHgwMWUwDQo+ID4gPiA+IC0jZGVmaW5lICBQQUJf SU5UUF9NU0lfTUFTSwkJMHg4DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0FYSV9B TUFQX0NUUkwod2luKQkJUEFCX1JFR19BRERSKDB4MGJhMCwNCj4gd2luKQ0KPiA+ID4gPiAtI2Rl ZmluZSAgV0lOX0VOQUJMRV9TSElGVAkJMA0KPiA+ID4gPiAtI2RlZmluZSAgV0lOX1RZUEVfU0hJ RlQJCQkxDQo+ID4gPiA+IC0jZGVmaW5lICBXSU5fVFlQRV9NQVNLCQkJMHgzDQo+ID4gPiA+IC0j ZGVmaW5lICBXSU5fU0laRV9TSElGVAkJCTEwDQo+ID4gPiA+IC0jZGVmaW5lICBXSU5fU0laRV9N QVNLCQkJMHgzZmZmZmYNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtI2RlZmluZSBQQUJfRVhUX0FYSV9B TUFQX1NJWkUod2luKQ0KPiAJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsDQo+ID4gPiB3aW4pDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikN Cj4gPiA+IAlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQ0KPiA+ID4gPiAtI2RlZmluZSBQ QUJfQVhJX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9SRUdfQUREUigweDBiYTQsDQo+IHdpbikNCj4g PiA+ID4gLSNkZWZpbmUgIEFYSV9XSU5ET1dfQUxJR05fTUFTSwkJMw0KPiA+ID4gPiAtDQo+ID4g PiA+IC0jZGVmaW5lIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHgw YmE4LA0KPiA+ID4gd2luKQ0KPiA+ID4gPiAtI2RlZmluZSAgUEFCX0JVU19TSElGVAkJCTI0DQo+ ID4gPiA+IC0jZGVmaW5lICBQQUJfREVWSUNFX1NISUZUCQkxOQ0KPiA+ID4gPiAtI2RlZmluZSAg UEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0jZGVmaW5lIFBBQl9B WElfQU1BUF9QRVhfV0lOX0god2luKQ0KPiAJUEFCX1JFR19BRERSKDB4MGJhYywNCj4gPiA+IHdp bikNCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0lOVFBfQVhJX1BJT19DTEFTUwkJMHg0NzQNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtI2RlZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FE RFIoMHg0YmEwLA0KPiB3aW4pDQo+ID4gPiA+IC0jZGVmaW5lICBBTUFQX0NUUkxfRU5fU0hJRlQJ CTANCj4gPiA+ID4gLSNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX1NISUZUCQkxDQo+ID4gPiA+IC0j ZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9NQVNLCQkzDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNkZWZp bmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pDQo+IAlQQUJfRVhUX1JFR19BRERSKDB4YmVm MCwNCj4gPiA+IHdpbikNCj4gPiA+ID4gLSNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9BWElfV0lO KHdpbikNCj4gPiA+IAlQQUJfRVhUX1JFR19BRERSKDB4YjRhMCwgd2luKQ0KPiA+ID4gPiAtI2Rl ZmluZSBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9SRUdfQUREUigweDRiYTQsDQo+IHdp bikNCj4gPiA+ID4gLSNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW4pDQo+IAlQQUJf UkVHX0FERFIoMHg0YmE4LA0KPiA+ID4gd2luKQ0KPiA+ID4gPiAtI2RlZmluZSBQQUJfUEVYX0FN QVBfUEVYX1dJTl9IKHdpbikNCj4gCVBBQl9SRUdfQUREUigweDRiYWMsDQo+ID4gPiB3aW4pDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLS8qIHN0YXJ0aW5nIG9mZnNldCBvZiBJTlRYIGJpdHMgaW4gc3Rh dHVzIHJlZ2lzdGVyICovDQo+ID4gPiA+IC0jZGVmaW5lIFBBQl9JTlRYX1NUQVJUCQkJNQ0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0vKiBzdXBwb3J0ZWQgbnVtYmVyIG9mIE1TSSBpbnRlcnJ1cHRzICov DQo+ID4gPiA+IC0jZGVmaW5lIFBDSV9OVU1fTVNJCQkJMTYNCj4gPiA+ID4gLQ0KPiA+ID4gPiAt LyogTVNJIHJlZ2lzdGVycyAqLw0KPiA+ID4gPiAtI2RlZmluZSBNU0lfQkFTRV9MT19PRkZTRVQJ CTB4MDQNCj4gPiA+ID4gLSNkZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4DQo+ID4gPiA+ IC0jZGVmaW5lIE1TSV9TSVpFX09GRlNFVAkJCTB4MGMNCj4gPiA+ID4gLSNkZWZpbmUgTVNJX0VO QUJMRV9PRkZTRVQJCTB4MTQNCj4gPiA+ID4gLSNkZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4 MTgNCj4gPiA+ID4gLSNkZWZpbmUgTVNJX0RBVEFfT0ZGU0VUCQkJMHgyMA0KPiA+ID4gPiAtI2Rl ZmluZSBNU0lfQUREUl9MX09GRlNFVAkJMHgyNA0KPiA+ID4gPiAtI2RlZmluZSBNU0lfQUREUl9I X09GRlNFVAkJMHgyOA0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKiBvdXRib3VuZCBhbmQgaW5ib3Vu ZCB3aW5kb3cgZGVmaW5pdGlvbnMgKi8NCj4gPiA+ID4gLSNkZWZpbmUgV0lOX05VTV8wCQkJMA0K PiA+ID4gPiAtI2RlZmluZSBXSU5fTlVNXzEJCQkxDQo+ID4gPiA+IC0jZGVmaW5lIENGR19XSU5E T1dfVFlQRQkJCTANCj4gPiA+ID4gLSNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkxDQo+ID4gPiA+ IC0jZGVmaW5lIE1FTV9XSU5ET1dfVFlQRQkJCTINCj4gPiA+ID4gLSNkZWZpbmUgSUJfV0lOX1NJ WkUJCQkoKHU2NCkyNTYgKiAxMDI0ICogMTAyNCAqIDEwMjQpDQo+ID4gPiA+IC0jZGVmaW5lIE1B WF9QSU9fV0lORE9XUwkJCTgNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyogUGFyYW1ldGVycyBmb3Ig dGhlIHdhaXRpbmcgZm9yIGxpbmsgdXAgcm91dGluZSAqLw0KPiA+ID4gPiAtI2RlZmluZSBMSU5L X1dBSVRfTUFYX1JFVFJJRVMJCTEwDQo+ID4gPiA+IC0jZGVmaW5lIExJTktfV0FJVF9NSU4JCQk5 MDAwMA0KPiA+ID4gPiAtI2RlZmluZSBMSU5LX1dBSVRfTUFYCQkJMTAwMDAwDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSNkZWZpbmUgUEFHRURfQUREUl9CTkRSWQkJMHhjMDANCj4gPiA+ID4gLSNkZWZp bmUgT0ZGU0VUX1RPX1BBR0VfQUREUihvZmYpCVwNCj4gPiA+ID4gLQkoKG9mZiAmIFBBR0VfTE9f TUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KPiA+ID4gPiAtI2RlZmluZSBPRkZTRVRfVE9fUEFH RV9JRFgob2ZmKQkJXA0KPiA+ID4gPiAtCSgob2ZmID4+IFBBR0VfU0VMX09GRlNFVF9TSElGVCkg JiBQQUdFX1NFTF9NQVNLKQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdHJ1Y3QgbW9iaXZlaWxfbXNp IHsJCQkvKiBNU0kgaW5mb3JtYXRpb24gKi8NCj4gPiA+ID4gLQlzdHJ1Y3QgbXV0ZXggbG9jazsJ CS8qIHByb3RlY3QgYml0bWFwIHZhcmlhYmxlICovDQo+ID4gPiA+IC0Jc3RydWN0IGlycV9kb21h aW4gKm1zaV9kb21haW47DQo+ID4gPiA+IC0Jc3RydWN0IGlycV9kb21haW4gKmRldl9kb21haW47 DQo+ID4gPiA+IC0JcGh5c19hZGRyX3QgbXNpX3BhZ2VzX3BoeXM7DQo+ID4gPiA+IC0JaW50IG51 bV9vZl92ZWN0b3JzOw0KPiA+ID4gPiAtCURFQ0xBUkVfQklUTUFQKG1zaV9pcnFfaW5fdXNlLCBQ Q0lfTlVNX01TSSk7DQo+ID4gPiA+IC19Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdHJ1Y3QgbW9i aXZlaWxfcGNpZSB7DQo+ID4gPiA+IC0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsNCj4g PiA+ID4gLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsNCj4gPiA+ID4gLQl2b2lkIF9faW9t ZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFzZTsJLyogZW5kcG9pbnQgY29uZmlnIGJhc2UNCj4gKi8N Cj4gPiA+ID4gLQl2b2lkIF9faW9tZW0gKmNzcl9heGlfc2xhdmVfYmFzZTsJLyogcm9vdCBwb3J0 IGNvbmZpZyBiYXNlICovDQo+ID4gPiA+IC0Jdm9pZCBfX2lvbWVtICphcGJfY3NyX2Jhc2U7CS8q IE1TSSByZWdpc3RlciBiYXNlICovDQo+ID4gPiA+IC0JcGh5c19hZGRyX3QgcGNpZV9yZWdfYmFz ZTsJLyogUGh5c2ljYWwgUENJZSBDb250cm9sbGVyIEJhc2UgKi8NCj4gPiA+ID4gLQlzdHJ1Y3Qg aXJxX2RvbWFpbiAqaW50eF9kb21haW47DQo+ID4gPiA+IC0JcmF3X3NwaW5sb2NrX3QgaW50eF9t YXNrX2xvY2s7DQo+ID4gPiA+IC0JaW50IGlycTsNCj4gPiA+ID4gLQlpbnQgYXBpb193aW5zOw0K PiA+ID4gPiAtCWludCBwcGlvX3dpbnM7DQo+ID4gPiA+IC0JaW50IG9iX3dpbnNfY29uZmlndXJl ZDsJCS8qIGNvbmZpZ3VyZWQgb3V0Ym91bmQgd2luZG93cyAqLw0KPiA+ID4gPiAtCWludCBpYl93 aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIGluYm91bmQgd2luZG93cyAqLw0KPiA+ID4g PiAtCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOw0KPiA+ID4gPiAtCWNoYXIgcm9vdF9idXNf bnI7DQo+ID4gPiA+IC0Jc3RydWN0IG1vYml2ZWlsX21zaSBtc2k7DQo+ID4gPiA+IC19Ow0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0vKg0KPiA+ID4gPiAtICogbW9iaXZlaWxfcGNpZV9zZWxfcGFnZSAt IHJvdXRpbmUgdG8gYWNjZXNzIHBhZ2VkIHJlZ2lzdGVyDQo+ID4gPiA+IC0gKg0KPiA+ID4gPiAt ICogUmVnaXN0ZXJzIHdob3NlIGFkZHJlc3MgZ3JlYXRlciB0aGFuIFBBR0VEX0FERFJfQk5EUlkg KDB4YzAwKQ0KPiBhcmUNCj4gPiA+ID4gcGFnZWQsDQo+ID4gPiA+IC0gKiBmb3IgdGhpcyBzY2hl bWUgdG8gd29yayBleHRyYWN0ZWQgaGlnaGVyIDYgYml0cyBvZiB0aGUgb2Zmc2V0IHdpbGwNCj4g PiA+ID4gYmUNCj4gPiA+ID4gLSAqIHdyaXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9mIFBBQl9DVFJM IHJlZ2lzdGVyIGFuZCByZXN0IG9mIHRoZSBsb3dlcg0KPiA+ID4gPiAxMA0KPiA+ID4gPiAtICog Yml0cyBlbmFibGVkIHdpdGggUEFHRURfQUREUl9CTkRSWSBhcmUgdXNlZCBhcyBvZmZzZXQgb2Yg dGhlDQo+ID4gPiByZWdpc3Rlci4NCj4gPiA+ID4gLSAqLw0KPiA+ID4gPiAtc3RhdGljIHZvaWQg bW9iaXZlaWxfcGNpZV9zZWxfcGFnZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTgNCj4g PiA+ID4gcGdfaWR4KSAtew0KPiA+ID4gPiAtCXUzMiB2YWw7DQo+ID4gPiA+IC0NCj4gPiA+ID4g LQl2YWwgPSByZWFkbChwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQo+ID4g PiA+IC0JdmFsICY9IH4oUEFHRV9TRUxfTUFTSyA8PCBQQUdFX1NFTF9TSElGVCk7DQo+ID4gPiA+ IC0JdmFsIHw9IChwZ19pZHggJiBQQUdFX1NFTF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsNCj4g PiA+ID4gLQ0KPiA+ID4gPiAtCXdyaXRlbCh2YWwsIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSAr IFBBQl9DVFJMKTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtc3RhdGljIHZvaWQg Km1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIN Cj4gPiA+ID4gb2ZmKSAtew0KPiA+ID4gPiAtCWlmIChvZmYgPCBQQUdFRF9BRERSX0JORFJZKSB7 DQo+ID4gPiA+IC0JCS8qIEZvciBkaXJlY3RseSBhY2Nlc3NlZCByZWdpc3RlcnMsIGNsZWFyIHRo ZSBwZ19zZWwgZmllbGQgKi8NCj4gPiA+ID4gLQkJbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2ll LCAwKTsNCj4gPiA+ID4gLQkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIG9mZjsN Cj4gPiA+ID4gLQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQltb2JpdmVpbF9wY2llX3NlbF9wYWdl KHBjaWUsIE9GRlNFVF9UT19QQUdFX0lEWChvZmYpKTsNCj4gPiA+ID4gLQlyZXR1cm4gcGNpZS0+ Y3NyX2F4aV9zbGF2ZV9iYXNlICsgT0ZGU0VUX1RPX1BBR0VfQUREUihvZmYpOw0KPiA+ID4gPiAt fQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcmVhZCh2b2lk IF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgKnZhbCkNCj4gPiA+ID4gLXsNCj4gPiA+ID4g LQlpZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkgew0KPiA+ID4gPiAtCQkqdmFsID0g MDsNCj4gPiA+ID4gLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiA+ ID4gLQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlzd2l0Y2ggKHNpemUpIHsNCj4gPiA+ID4gLQlj YXNlIDQ6DQo+ID4gPiA+IC0JCSp2YWwgPSByZWFkbChhZGRyKTsNCj4gPiA+ID4gLQkJYnJlYWs7 DQo+ID4gPiA+IC0JY2FzZSAyOg0KPiA+ID4gPiAtCQkqdmFsID0gcmVhZHcoYWRkcik7DQo+ID4g PiA+IC0JCWJyZWFrOw0KPiA+ID4gPiAtCWNhc2UgMToNCj4gPiA+ID4gLQkJKnZhbCA9IHJlYWRi KGFkZHIpOw0KPiA+ID4gPiAtCQlicmVhazsNCj4gPiA+ID4gLQlkZWZhdWx0Og0KPiA+ID4gPiAt CQkqdmFsID0gMDsNCj4gPiA+ID4gLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJF UjsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlyZXR1cm4gUENJQklPU19TVUND RVNTRlVMOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgaW50IG1vYml2 ZWlsX3BjaWVfd3JpdGUodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCj4g PiA+ID4gLXsNCj4gPiA+ID4gLQlpZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkNCj4g PiA+ID4gLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtCXN3aXRjaCAoc2l6ZSkgew0KPiA+ID4gPiAtCWNhc2UgNDoNCj4gPiA+ID4gLQkJ d3JpdGVsKHZhbCwgYWRkcik7DQo+ID4gPiA+IC0JCWJyZWFrOw0KPiA+ID4gPiAtCWNhc2UgMjoN Cj4gPiA+ID4gLQkJd3JpdGV3KHZhbCwgYWRkcik7DQo+ID4gPiA+IC0JCWJyZWFrOw0KPiA+ID4g PiAtCWNhc2UgMToNCj4gPiA+ID4gLQkJd3JpdGViKHZhbCwgYWRkcik7DQo+ID4gPiA+IC0JCWJy ZWFrOw0KPiA+ID4gPiAtCWRlZmF1bHQ6DQo+ID4gPiA+IC0JCXJldHVybiBQQ0lCSU9TX0JBRF9S RUdJU1RFUl9OVU1CRVI7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JcmV0dXJu IFBDSUJJT1NfU1VDQ0VTU0ZVTDsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtc3Rh dGljIHUzMiBjc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZiwgc2l6 ZV90IHNpemUpDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0Jdm9pZCAqYWRkcjsNCj4gPiA+ID4gLQl1 MzIgdmFsOw0KPiA+ID4gPiAtCWludCByZXQ7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlhZGRyID0g bW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAt CXJldCA9IG1vYml2ZWlsX3BjaWVfcmVhZChhZGRyLCBzaXplLCAmdmFsKTsNCj4gPiA+ID4gLQlp ZiAocmV0KQ0KPiA+ID4gPiAtCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJyZWFkIENTUiBh ZGRyZXNzIGZhaWxlZFxuIik7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlyZXR1cm4gdmFsOw0KPiA+ ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgdm9pZCBjc3Jfd3JpdGUoc3RydWN0 IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsDQo+ID4gPiA+IHNpemVfdCBz aXplKSAtew0KPiA+ID4gPiAtCXZvaWQgKmFkZHI7DQo+ID4gPiA+IC0JaW50IHJldDsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtCWFkZHIgPSBtb2JpdmVpbF9wY2llX2NvbXBfYWRkcihwY2llLCBvZmYp Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JcmV0ID0gbW9iaXZlaWxfcGNpZV93cml0ZShhZGRyLCBz aXplLCB2YWwpOw0KPiA+ID4gPiAtCWlmIChyZXQpDQo+ID4gPiA+IC0JCWRldl9lcnIoJnBjaWUt PnBkZXYtPmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7DQo+ID4gPiA+IC19DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyB1MzIgY3NyX3JlYWRsKHN0cnVjdCBtb2JpdmVpbF9w Y2llICpwY2llLCB1MzIgb2ZmKSAtew0KPiA+ID4gPiAtCXJldHVybiBjc3JfcmVhZChwY2llLCBv ZmYsIDB4NCk7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyB2b2lkIGNz cl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYpDQo+ ID4gPiA+IC17DQo+ID4gPiA+IC0JY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDQpOw0KPiA+ ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgYm9vbCBtb2JpdmVpbF9wY2llX2xp bmtfdXAoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpIC17DQo+ID4gPiA+IC0JcmV0dXJuIChj c3JfcmVhZGwocGNpZSwgTFRTU01fU1RBVFVTKSAmDQo+ID4gPiA+IC0JCUxUU1NNX1NUQVRVU19M MF9NQVNLKSA9PSBMVFNTTV9TVEFUVVNfTDA7DQo+ID4gPiA+IC19DQo+ID4gPiA+ICsjaW5jbHVk ZSAicGNpZS1tb2JpdmVpbC5oIg0KPiA+ID4gPg0KPiA+ID4gPiAgc3RhdGljIGJvb2wgbW9iaXZl aWxfcGNpZV92YWxpZF9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQNCj4gPiA+ ID4gaW50IGRldmZuKSAgew0KPiA+ID4gPiAgCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llID0g YnVzLT5zeXNkYXRhOw0KPiA+ID4gPg0KPiA+ID4gPiAgCS8qIE9ubHkgb25lIGRldmljZSBkb3du IG9uIGVhY2ggcm9vdCBwb3J0ICovDQo+ID4gPiA+IC0JaWYgKChidXMtPm51bWJlciA9PSBwY2ll LT5yb290X2J1c19ucikgJiYgKGRldmZuID4gMCkpDQo+ID4gPiA+ICsJaWYgKChidXMtPm51bWJl ciA9PSBwY2llLT5ycC5yb290X2J1c19ucikgJiYgKGRldmZuID4gMCkpDQo+ID4gPiA+ICAJCXJl dHVybiBmYWxzZTsNCj4gPiA+ID4NCj4gPiA+ID4gIAkvKg0KPiA+ID4gPiAgCSAqIERvIG5vdCBy ZWFkIG1vcmUgdGhhbiBvbmUgZGV2aWNlIG9uIHRoZSBidXMgZGlyZWN0bHkNCj4gPiA+ID4gIAkg KiBhdHRhY2hlZCB0byBSQw0KPiA+ID4gPiAgCSAqLw0KPiA+ID4gPiAtCWlmICgoYnVzLT5wcmlt YXJ5ID09IHBjaWUtPnJvb3RfYnVzX25yKSAmJiAoZGV2Zm4gPiAwKSkNCj4gPiA+ID4gKwlpZiAo KGJ1cy0+cHJpbWFyeSA9PSBwY2llLT5ycC5yb290X2J1c19ucikgJiYgKGRldmZuID4gMCkpDQo+ ID4gPiA+ICAJCXJldHVybiBmYWxzZTsNCj4gPiA+ID4NCj4gPiA+ID4gIAlyZXR1cm4gdHJ1ZTsN Cj4gPiA+ID4gQEAgLTMxMSw3ICs1Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW9tZW0NCj4gKm1vYml2 ZWlsX3BjaWVfbWFwX2J1cyhzdHJ1Y3QNCj4gPiA+IHBjaV9idXMgKmJ1cywNCj4gPiA+ID4gIAkJ cmV0dXJuIE5VTEw7DQo+ID4gPiA+DQo+ID4gPiA+ICAJLyogUkMgY29uZmlnIGFjY2VzcyAqLw0K PiA+ID4gPiAtCWlmIChidXMtPm51bWJlciA9PSBwY2llLT5yb290X2J1c19ucikNCj4gPiA+ID4g KwlpZiAoYnVzLT5udW1iZXIgPT0gcGNpZS0+cnAucm9vdF9idXNfbnIpDQo+ID4gPiA+ICAJCXJl dHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsNCj4gPiA+ID4NCj4gPiA+ID4g IAkvKg0KPiA+ID4gPiBAQCAtMzI2LDcgKzcyLDcgQEAgc3RhdGljIHZvaWQgX19pb21lbQ0KPiAq bW9iaXZlaWxfcGNpZV9tYXBfYnVzKHN0cnVjdA0KPiA+ID4gPiBwY2lfYnVzICpidXMsDQo+ID4g PiA+DQo+ID4gPiA+ICAJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0FYSV9BTUFQX1BFWF9X SU5fTChXSU5fTlVNXzApKTsNCj4gPiA+ID4NCj4gPiA+ID4gLQlyZXR1cm4gcGNpZS0+Y29uZmln X2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7DQo+ID4gPiA+ICsJcmV0dXJuIHBjaWUtPnJwLmNvbmZp Z19heGlfc2xhdmVfYmFzZSArIHdoZXJlOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAg c3RhdGljIHN0cnVjdCBwY2lfb3BzIG1vYml2ZWlsX3BjaWVfb3BzID0geyBAQCAtMzQwLDcgKzg2 LDcgQEANCj4gc3RhdGljDQo+ID4gPiA+IHZvaWQgbW9iaXZlaWxfcGNpZV9pc3Ioc3RydWN0IGly cV9kZXNjICpkZXNjKQ0KPiA+ID4gPiAgCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNj X2dldF9jaGlwKGRlc2MpOw0KPiA+ID4gPiAgCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llID0g aXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNjKTsNCj4gPiA+ID4gIAlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KPiA+ID4gPiAtCXN0cnVjdCBtb2JpdmVpbF9tc2kg Km1zaSA9ICZwY2llLT5tc2k7DQo+ID4gPiA+ICsJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0g JnBjaWUtPnJwLm1zaTsNCj4gPiA+ID4gIAl1MzIgbXNpX2RhdGEsIG1zaV9hZGRyX2xvLCBtc2lf YWRkcl9oaTsNCj4gPiA+ID4gIAl1MzIgaW50cl9zdGF0dXMsIG1zaV9zdGF0dXM7DQo+ID4gPiA+ ICAJdW5zaWduZWQgbG9uZyBzaGlmdGVkX3N0YXR1czsNCj4gPiA+ID4gQEAgLTM2NSw3ICsxMTEs NyBAQCBzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX2lzcihzdHJ1Y3QgaXJxX2Rlc2MNCj4gKmRl c2MpDQo+ID4gPiA+ICAJCXNoaWZ0ZWRfc3RhdHVzID4+PSBQQUJfSU5UWF9TVEFSVDsNCj4gPiA+ ID4gIAkJZG8gew0KPiA+ID4gPiAgCQkJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZzaGlmdGVkX3N0 YXR1cywgUENJX05VTV9JTlRYKSB7DQo+ID4gPiA+IC0JCQkJdmlycSA9IGlycV9maW5kX21hcHBp bmcocGNpZS0+aW50eF9kb21haW4sDQo+ID4gPiA+ICsJCQkJdmlycSA9IGlycV9maW5kX21hcHBp bmcocGNpZS0+cnAuaW50eF9kb21haW4sDQo+ID4gPiA+ICAJCQkJCQkJYml0ICsgMSk7DQo+ID4g PiA+ICAJCQkJaWYgKHZpcnEpDQo+ID4gPiA+ICAJCQkJCWdlbmVyaWNfaGFuZGxlX2lycSh2aXJx KTsNCj4gPiA+ID4gQEAgLTQyOCwxMCArMTc0LDEwIEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNp ZV9wYXJzZV9kdChzdHJ1Y3QNCj4gPiA+IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQo+ID4gPiA+ICAJ LyogbWFwIGNvbmZpZyByZXNvdXJjZSAqLw0KPiA+ID4gPiAgCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sDQo+ID4gPiA+ICAJCQkJCSAgICJj b25maWdfYXhpX3NsYXZlIik7DQo+ID4gPiA+IC0JcGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNl ID0gZGV2bV9wY2lfcmVtYXBfY2ZnX3Jlc291cmNlKGRldiwNCj4gcmVzKTsNCj4gPiA+ID4gLQlp ZiAoSVNfRVJSKHBjaWUtPmNvbmZpZ19heGlfc2xhdmVfYmFzZSkpDQo+ID4gPiA+IC0JCXJldHVy biBQVFJfRVJSKHBjaWUtPmNvbmZpZ19heGlfc2xhdmVfYmFzZSk7DQo+ID4gPiA+IC0JcGNpZS0+ b2JfaW9fcmVzID0gcmVzOw0KPiA+ID4gPiArCXBjaWUtPnJwLmNvbmZpZ19heGlfc2xhdmVfYmFz ZSA9DQo+IGRldm1fcGNpX3JlbWFwX2NmZ19yZXNvdXJjZShkZXYsDQo+ID4gPiByZXMpOw0KPiA+ ID4gPiArCWlmIChJU19FUlIocGNpZS0+cnAuY29uZmlnX2F4aV9zbGF2ZV9iYXNlKSkNCj4gPiA+ ID4gKwkJcmV0dXJuIFBUUl9FUlIocGNpZS0+cnAuY29uZmlnX2F4aV9zbGF2ZV9iYXNlKTsNCj4g PiA+ID4gKwlwY2llLT5ycC5vYl9pb19yZXMgPSByZXM7DQo+ID4gPiA+DQo+ID4gPiA+ICAJLyog bWFwIGNzciByZXNvdXJjZSAqLw0KPiA+ID4gPiAgCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sDQo+IEBADQo+ID4gPiAtNDQxLDEyDQo+ID4g PiA+ICsxODcsNiBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQoc3RydWN0IG1v Yml2ZWlsX3BjaWUNCj4gKnBjaWUpDQo+ID4gPiA+ICAJCXJldHVybiBQVFJfRVJSKHBjaWUtPmNz cl9heGlfc2xhdmVfYmFzZSk7DQo+ID4gPiA+ICAJcGNpZS0+cGNpZV9yZWdfYmFzZSA9IHJlcy0+ c3RhcnQ7DQo+ID4gPiA+DQo+ID4gPiA+IC0JLyogbWFwIE1TSSBjb25maWcgcmVzb3VyY2UgKi8N Cj4gPiA+ID4gLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVT T1VSQ0VfTUVNLA0KPiA+ID4gImFwYl9jc3IiKTsNCj4gPiA+ID4gLQlwY2llLT5hcGJfY3NyX2Jh c2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3VyY2UoZGV2LCByZXMpOw0KPiA+ID4gPiAtCWlm IChJU19FUlIocGNpZS0+YXBiX2Nzcl9iYXNlKSkNCj4gPiA+ID4gLQkJcmV0dXJuIFBUUl9FUlIo cGNpZS0+YXBiX2Nzcl9iYXNlKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgCS8qIHJlYWQgdGhlIG51 bWJlciBvZiB3aW5kb3dzIHJlcXVlc3RlZCAqLw0KPiA+ID4gPiAgCWlmIChvZl9wcm9wZXJ0eV9y ZWFkX3UzMihub2RlLCAiYXBpby13aW5zIiwgJnBjaWUtPmFwaW9fd2lucykpDQo+ID4gPiA+ICAJ CXBjaWUtPmFwaW9fd2lucyA9IE1BWF9QSU9fV0lORE9XUzsNCj4gPiA+ID4gQEAgLTQ1NCwxMTkg KzE5NCwxNSBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQoc3RydWN0DQo+ID4g PiBtb2JpdmVpbF9wY2llICpwY2llKQ0KPiA+ID4gPiAgCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3Uz Mihub2RlLCAicHBpby13aW5zIiwgJnBjaWUtPnBwaW9fd2lucykpDQo+ID4gPiA+ICAJCXBjaWUt PnBwaW9fd2lucyA9IE1BWF9QSU9fV0lORE9XUzsNCj4gPiA+ID4NCj4gPiA+ID4gLQlwY2llLT5p cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KPiA+ID4gPiAtCWlmIChwY2llLT5pcnEg PD0gMCkgew0KPiA+ID4gPiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgSVJROiAlZFxu IiwgcGNpZS0+aXJxKTsNCj4gPiA+ID4gLQkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gPiA+IC0JfQ0K PiA+ID4gPiAtDQo+ID4gPiA+ICAJcmV0dXJuIDA7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4g PiA+IC1zdGF0aWMgdm9pZCBwcm9ncmFtX2liX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUsIGludA0KPiB3aW5fbnVtLA0KPiA+ID4gPiAtCQkJICAgICAgIHU2NCBjcHVfYWRkciwg dTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0J dTMyIHZhbHVlOw0KPiA+ID4gPiAtCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCj4gPiA+ID4g LQ0KPiA+ID4gPiAtCWlmICh3aW5fbnVtID49IHBjaWUtPnBwaW9fd2lucykgew0KPiA+ID4gPiAt CQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQo+ID4gPiA+IC0JCQkiRVJST1I6IG1heCBpbmJv dW5kIHdpbmRvd3MgcmVhY2hlZCAhXG4iKTsNCj4gPiA+ID4gLQkJcmV0dXJuOw0KPiA+ID4gPiAt CX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCXZhbHVlID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9QRVhf QU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiA+ID4gLQl2YWx1ZSAmPSB+KEFNQVBfQ1RSTF9UWVBF X01BU0sgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQgfA0KPiA+ID4gPiAtCQkgV0lOX1NJWkVfTUFT SyA8PCBXSU5fU0laRV9TSElGVCk7DQo+ID4gPiA+IC0JdmFsdWUgfD0gKHR5cGUgPDwgQU1BUF9D VFJMX1RZUEVfU0hJRlQpIHwgKDEgPDwNCj4gPiA+IEFNQVBfQ1RSTF9FTl9TSElGVCkgfA0KPiA+ ID4gPiAtCQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9TSVpFX01BU0sgPDwNCj4gV0lO X1NJWkVfU0hJRlQpOw0KPiA+ID4gPiAtCWNzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhf QU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCWNzcl93cml0ZWwocGNp ZSwgdXBwZXJfMzJfYml0cyhzaXplNjQpLA0KPiA+ID4gPiAtCQkgICBQQUJfRVhUX1BFWF9BTUFQ X1NJWkVOKHdpbl9udW0pKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCWNzcl93cml0ZWwocGNpZSwg bG93ZXJfMzJfYml0cyhjcHVfYWRkciksDQo+ID4gPiA+IC0JCSAgIFBBQl9QRVhfQU1BUF9BWElf V0lOKHdpbl9udW0pKTsNCj4gPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMo Y3B1X2FkZHIpLA0KPiA+ID4gPiAtCQkgICBQQUJfRVhUX1BFWF9BTUFQX0FYSV9XSU4od2luX251 bSkpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRz KHBjaV9hZGRyKSwNCj4gPiA+ID4gLQkJICAgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW5fbnVt KSk7DQo+ID4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwN Cj4gPiA+ID4gLQkJICAgUEFCX1BFWF9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gPiA+ IC0NCj4gPiA+ID4gLQlwY2llLT5pYl93aW5zX2NvbmZpZ3VyZWQrKzsNCj4gPiA+ID4gLX0NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtLyoNCj4gPiA+ID4gLSAqIHJvdXRpbmUgdG8gcHJvZ3JhbSB0aGUg b3V0Ym91bmQgd2luZG93cw0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC1zdGF0aWMgdm9pZCBwcm9n cmFtX29iX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludA0KPiB3aW5fbnVt LA0KPiA+ID4gPiAtCQkJICAgICAgIHU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlw ZSwgdTY0IHNpemUpDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQl1MzIgdmFsdWU7 DQo+ID4gPiA+IC0JdTY0IHNpemU2NCA9IH4oc2l6ZSAtIDEpOw0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0JaWYgKHdpbl9udW0gPj0gcGNpZS0+YXBpb193aW5zKSB7DQo+ID4gPiA+IC0JCWRldl9lcnIo JnBjaWUtPnBkZXYtPmRldiwNCj4gPiA+ID4gLQkJCSJFUlJPUjogbWF4IG91dGJvdW5kIHdpbmRv d3MgcmVhY2hlZCAhXG4iKTsNCj4gPiA+ID4gLQkJcmV0dXJuOw0KPiA+ID4gPiAtCX0NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtCS8qDQo+ID4gPiA+IC0JICogcHJvZ3JhbSBFbmFibGUgQml0IHRvIDEs IFR5cGUgQml0IHRvICgwMCkgYmFzZSAyLCBBWEkgV2luZG93IFNpemUNCj4gQml0DQo+ID4gPiA+ IC0JICogdG8gNCBLQiBpbiBQQUJfQVhJX0FNQVBfQ1RSTCByZWdpc3Rlcg0KPiA+ID4gPiAtCSAq Lw0KPiA+ID4gPiAtCXZhbHVlID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9BWElfQU1BUF9DVFJMKHdp bl9udW0pKTsNCj4gPiA+ID4gLQl2YWx1ZSAmPSB+KFdJTl9UWVBFX01BU0sgPDwgV0lOX1RZUEVf U0hJRlQgfA0KPiA+ID4gPiAtCQkgV0lOX1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7DQo+ ID4gPiA+IC0JdmFsdWUgfD0gMSA8PCBXSU5fRU5BQkxFX1NISUZUIHwgdHlwZSA8PCBXSU5fVFlQ RV9TSElGVCB8DQo+ID4gPiA+IC0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVf TUFTSyA8PA0KPiBXSU5fU0laRV9TSElGVCk7DQo+ID4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCB2 YWx1ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0J Y3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHNpemU2NCksDQo+ID4gPiBQQUJfRVhUX0FY SV9BTUFQX1NJWkUod2luX251bSkpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JLyoNCj4gPiA+ID4g LQkgKiBwcm9ncmFtIEFYSSB3aW5kb3cgYmFzZSB3aXRoIGFwcHJvcHJpYXRlIHZhbHVlIGluDQo+ ID4gPiA+IC0JICogUEFCX0FYSV9BTUFQX0FYSV9XSU4wIHJlZ2lzdGVyDQo+ID4gPiA+IC0JICov DQo+ID4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSAmDQo+ ID4gPiAofkFYSV9XSU5ET1dfQUxJR05fTUFTSyksDQo+ID4gPiA+IC0JCSAgIFBBQl9BWElfQU1B UF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMy X2JpdHMoY3B1X2FkZHIpLA0KPiA+ID4gPiAtCQkgICBQQUJfRVhUX0FYSV9BTUFQX0FYSV9XSU4o d2luX251bSkpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCBsb3dlcl8z Ml9iaXRzKHBjaV9hZGRyKSwNCj4gPiA+ID4gLQkJICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3 aW5fbnVtKSk7DQo+ID4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9h ZGRyKSwNCj4gPiA+ID4gLQkJICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLQlwY2llLT5vYl93aW5zX2NvbmZpZ3VyZWQrKzsNCj4gPiA+ID4g LX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtc3RhdGljIGludCBtb2JpdmVpbF9icmluZ3VwX2xpbmso c3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpIC17DQo+ID4gPiA+IC0JaW50IHJldHJpZXM7DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLQkvKiBjaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8N Cj4gPiA+ID4gLQlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTElOS19XQUlUX01BWF9SRVRS SUVTOyByZXRyaWVzKyspIHsNCj4gPiA+ID4gLQkJaWYgKG1vYml2ZWlsX3BjaWVfbGlua191cChw Y2llKSkNCj4gPiA+ID4gLQkJCXJldHVybiAwOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JCXVzbGVl cF9yYW5nZShMSU5LX1dBSVRfTUlOLCBMSU5LX1dBSVRfTUFYKTsNCj4gPiA+ID4gLQl9DQo+ID4g PiA+IC0NCj4gPiA+ID4gLQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJsaW5rIG5ldmVyIGNh bWUgdXBcbiIpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JcmV0dXJuIC1FVElNRURPVVQ7DQo+ID4g PiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVfZW5h YmxlX21zaShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkgIHsNCj4gPiA+ID4gIAlwaHlzX2Fk ZHJfdCBtc2dfYWRkciA9IHBjaWUtPnBjaWVfcmVnX2Jhc2U7DQo+ID4gPiA+IC0Jc3RydWN0IG1v Yml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCj4gPiA+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxf bXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KPiA+ID4gPg0KPiA+ID4gPiAtCXBjaWUtPm1zaS5u dW1fb2ZfdmVjdG9ycyA9IFBDSV9OVU1fTVNJOw0KPiA+ID4gPiArCW1zaS0+bnVtX29mX3ZlY3Rv cnMgPSBQQ0lfTlVNX01TSTsNCj4gPiA+ID4gIAltc2ktPm1zaV9wYWdlc19waHlzID0gKHBoeXNf YWRkcl90KW1zZ19hZGRyOw0KPiA+ID4gPg0KPiA+ID4gPiAgCXdyaXRlbF9yZWxheGVkKGxvd2Vy XzMyX2JpdHMobXNnX2FkZHIpLA0KPiA+ID4gPiBAQCAtNjA0LDkgKzI0MCw2IEBAIHN0YXRpYyBp bnQgbW9iaXZlaWxfaG9zdF9pbml0KHN0cnVjdA0KPiBtb2JpdmVpbF9wY2llDQo+ID4gPiAqcGNp ZSkNCj4gPiA+ID4gIAlwYWJfY3RybCB8PSAoMSA8PCBBTUJBX1BJT19FTkFCTEVfU0hJRlQpIHwg KDEgPDwNCj4gPiA+IFBFWF9QSU9fRU5BQkxFX1NISUZUKTsNCj4gPiA+ID4gIAljc3Jfd3JpdGVs KHBjaWUsIHBhYl9jdHJsLCBQQUJfQ1RSTCk7DQo+ID4gPiA+DQo+ID4gPiA+IC0JY3NyX3dyaXRl bChwY2llLCAoUEFCX0lOVFBfSU5UWF9NQVNLIHwgUEFCX0lOVFBfTVNJX01BU0spLA0KPiA+ID4g PiAtCQkgICBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgCS8q DQo+ID4gPiA+ICAJICogcHJvZ3JhbSBQSU8gRW5hYmxlIEJpdCB0byAxIGFuZCBDb25maWcgV2lu ZG93IEVuYWJsZSBCaXQgdG8gMQ0KPiBpbg0KPiA+ID4gPiAgCSAqIFBBQl9BWElfUElPX0NUUkwg UmVnaXN0ZXINCj4gPiA+ID4gQEAgLTYyOCwyMCArMjYxLDI0IEBAIHN0YXRpYyBpbnQgbW9iaXZl aWxfaG9zdF9pbml0KHN0cnVjdA0KPiBtb2JpdmVpbF9wY2llDQo+ID4gPiAqcGNpZSkNCj4gPiA+ ID4gIAkgKi8NCj4gPiA+ID4NCj4gPiA+ID4gIAkvKiBjb25maWcgb3V0Ym91bmQgdHJhbnNsYXRp b24gd2luZG93ICovDQo+ID4gPiA+IC0JcHJvZ3JhbV9vYl93aW5kb3dzKHBjaWUsIFdJTl9OVU1f MCwgcGNpZS0+b2JfaW9fcmVzLT5zdGFydCwNCj4gMCwNCj4gPiA+ID4gLQkJCSAgIENGR19XSU5E T1dfVFlQRSwNCj4gcmVzb3VyY2Vfc2l6ZShwY2llLT5vYl9pb19yZXMpKTsNCj4gPiA+ID4gKwlw cm9ncmFtX29iX3dpbmRvd3MocGNpZSwgV0lOX05VTV8wLA0KPiBwY2llLT5ycC5vYl9pb19yZXMt PnN0YXJ0LCAwLA0KPiA+ID4gPiArCQkJICAgQ0ZHX1dJTkRPV19UWVBFLA0KPiByZXNvdXJjZV9z aXplKHBjaWUtPnJwLm9iX2lvX3JlcykpOw0KPiA+ID4gPg0KPiA+ID4gPiAgCS8qIG1lbW9yeSBp bmJvdW5kIHRyYW5zbGF0aW9uIHdpbmRvdyAqLw0KPiA+ID4gPiAgCXByb2dyYW1faWJfd2luZG93 cyhwY2llLCBXSU5fTlVNXzAsIDAsIDAsDQo+IE1FTV9XSU5ET1dfVFlQRSwNCj4gPiA+IElCX1dJ Tl9TSVpFKTsNCj4gPiA+ID4NCj4gPiA+ID4gIAkvKiBHZXQgdGhlIEkvTyBhbmQgbWVtb3J5IHJh bmdlcyBmcm9tIERUICovDQo+ID4gPiA+ICAJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeSh3 aW4sICZwY2llLT5yZXNvdXJjZXMpIHsNCj4gPiA+ID4gLQkJaWYgKHJlc291cmNlX3R5cGUod2lu LT5yZXMpID09IElPUkVTT1VSQ0VfTUVNKQ0KPiA+ID4gPiArCQlpZiAocmVzb3VyY2VfdHlwZSh3 aW4tPnJlcykgPT0gSU9SRVNPVVJDRV9NRU0pIHsNCj4gPiA+ID4gIAkJCXR5cGUgPSBNRU1fV0lO RE9XX1RZUEU7DQo+ID4gPiA+IC0JCWVsc2UgaWYgKHJlc291cmNlX3R5cGUod2luLT5yZXMpID09 IElPUkVTT1VSQ0VfSU8pDQo+ID4gPiA+ICsJCX0gZWxzZSBpZiAocmVzb3VyY2VfdHlwZSh3aW4t PnJlcykgPT0gSU9SRVNPVVJDRV9JTykgew0KPiA+ID4gPiAgCQkJdHlwZSA9IElPX1dJTkRPV19U WVBFOw0KPiA+ID4gPiAtCQllbHNlDQo+ID4gPiA+ICsJCX0gZWxzZSBpZiAocmVzb3VyY2VfdHlw ZSh3aW4tPnJlcykgPT0gSU9SRVNPVVJDRV9CVVMpIHsNCj4gPiA+ID4gKwkJCXBjaWUtPnJwLnJv b3RfYnVzX25yID0gd2luLT5yZXMtPnN0YXJ0Ow0KPiA+ID4gPiArCQkJY29udGludWU7DQo+ID4g PiA+ICsJCX0gZWxzZSB7DQo+ID4gPiA+ICAJCQljb250aW51ZTsNCj4gPiA+ID4gKwkJfQ0KPiA+ ID4gPg0KPiA+ID4gPiAgCQkvKiBjb25maWd1cmUgb3V0Ym91bmQgdHJhbnNsYXRpb24gd2luZG93 ICovDQo+ID4gPiA+ICAJCXByb2dyYW1fb2Jfd2luZG93cyhwY2llLCBwY2llLT5vYl93aW5zX2Nv bmZpZ3VyZWQsDQo+ID4gPiA+IEBAIC02NTYsOSArMjkzLDYgQEAgc3RhdGljIGludCBtb2JpdmVp bF9ob3N0X2luaXQoc3RydWN0DQo+IG1vYml2ZWlsX3BjaWUNCj4gPiA+ICpwY2llKQ0KPiA+ID4g PiAgCXZhbHVlIHw9IChQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCAxNik7DQo+ID4gPiA+ICAJY3Ny X3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0lOVFBfQVhJX1BJT19DTEFTUyk7DQo+ID4gPiA+DQo+ ID4gPiA+IC0JLyogc2V0dXAgTVNJIGhhcmR3YXJlIHJlZ2lzdGVycyAqLw0KPiA+ID4gPiAtCW1v Yml2ZWlsX3BjaWVfZW5hYmxlX21zaShwY2llKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgCXJldHVy biAwOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiBAQCAtNjcxLDExICszMDUsMTEgQEAg c3RhdGljIHZvaWQgbW9iaXZlaWxfbWFza19pbnR4X2lycShzdHJ1Y3QNCj4gPiA+IGlycV9kYXRh ICpkYXRhKQ0KPiA+ID4gPg0KPiA+ID4gPiAgCXBjaWUgPSBpcnFfZGVzY19nZXRfY2hpcF9kYXRh KGRlc2MpOw0KPiA+ID4gPiAgCW1hc2sgPSAxIDw8ICgoZGF0YS0+aHdpcnEgKyBQQUJfSU5UWF9T VEFSVCkgLSAxKTsNCj4gPiA+ID4gLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaWUtPmludHhf bWFza19sb2NrLCBmbGFncyk7DQo+ID4gPiA+ICsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2ll LT5ycC5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KPiA+ID4gPiAgCXNoaWZ0ZWRfdmFsID0gY3Ny X3JlYWRsKHBjaWUsIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+ID4gPiAgCXNoaWZ0ZWRf dmFsICY9IH5tYXNrOw0KPiA+ID4gPiAgCWNzcl93cml0ZWwocGNpZSwgc2hpZnRlZF92YWwsIFBB Ql9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+ID4gPiAtCXJhd19zcGluX3VubG9ja19pcnFyZXN0 b3JlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KPiA+ID4gPiArCXJhd19zcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZwY2llLT5ycC5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KPiA+ID4g PiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAgc3RhdGljIHZvaWQgbW9iaXZlaWxfdW5tYXNrX2ludHhf aXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCj4gPiA+ID4gQEAgLTY4NywxMSArMzIxLDExIEBA IHN0YXRpYyB2b2lkIG1vYml2ZWlsX3VubWFza19pbnR4X2lycShzdHJ1Y3QNCj4gPiA+IGlycV9k YXRhICpkYXRhKQ0KPiA+ID4gPg0KPiA+ID4gPiAgCXBjaWUgPSBpcnFfZGVzY19nZXRfY2hpcF9k YXRhKGRlc2MpOw0KPiA+ID4gPiAgCW1hc2sgPSAxIDw8ICgoZGF0YS0+aHdpcnEgKyBQQUJfSU5U WF9TVEFSVCkgLSAxKTsNCj4gPiA+ID4gLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaWUtPmlu dHhfbWFza19sb2NrLCBmbGFncyk7DQo+ID4gPiA+ICsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZw Y2llLT5ycC5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KPiA+ID4gPiAgCXNoaWZ0ZWRfdmFsID0g Y3NyX3JlYWRsKHBjaWUsIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KPiA+ID4gPiAgCXNoaWZ0 ZWRfdmFsIHw9IG1hc2s7DQo+ID4gPiA+ICAJY3NyX3dyaXRlbChwY2llLCBzaGlmdGVkX3ZhbCwg UEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7DQo+ID4gPiA+IC0JcmF3X3NwaW5fdW5sb2NrX2lycXJl c3RvcmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7DQo+ID4gPiA+ICsJcmF3X3NwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPnJwLmludHhfbWFza19sb2NrLCBmbGFncyk7DQo+ID4g PiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+ICBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGludHhfaXJx X2NoaXAgPSB7DQo+ID4gPiA+IEBAIC03NTksNyArMzkzLDcgQEAgc3RhdGljIGludCBtb2JpdmVp bF9pcnFfbXNpX2RvbWFpbl9hbGxvYyhzdHJ1Y3QNCj4gPiA+IGlycV9kb21haW4gKmRvbWFpbiwN Cj4gPiA+ID4gIAkJCQkJIHVuc2lnbmVkIGludCBucl9pcnFzLCB2b2lkICphcmdzKQ0KPiA+ID4g PiAgew0KPiA+ID4gPiAgCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llID0gZG9tYWluLT5ob3N0 X2RhdGE7DQo+ID4gPiA+IC0Jc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPm1zaTsN Cj4gPiA+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KPiA+ ID4gPiAgCXVuc2lnbmVkIGxvbmcgYml0Ow0KPiA+ID4gPg0KPiA+ID4gPiAgCVdBUk5fT04obnJf aXJxcyAhPSAxKTsNCj4gPiA+ID4gQEAgLTc4Niw3ICs0MjAsNyBAQCBzdGF0aWMgdm9pZA0KPiBt b2JpdmVpbF9pcnFfbXNpX2RvbWFpbl9mcmVlKHN0cnVjdA0KPiA+ID4gaXJxX2RvbWFpbiAqZG9t YWluLA0KPiA+ID4gPiAgew0KPiA+ID4gPiAgCXN0cnVjdCBpcnFfZGF0YSAqZCA9IGlycV9kb21h aW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQo+ID4gPiA+ICAJc3RydWN0IG1vYml2ZWls X3BjaWUgKnBjaWUgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsNCj4gPiA+ID4gLQlz dHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+bXNpOw0KPiA+ID4gPiArCXN0cnVjdCBt b2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5ycC5tc2k7DQo+ID4gPiA+DQo+ID4gPiA+ICAJbXV0 ZXhfbG9jaygmbXNpLT5sb2NrKTsNCj4gPiA+ID4NCj4gPiA+ID4gQEAgLTgwNyw5ICs0NDEsOSBA QCBzdGF0aWMgaW50IG1vYml2ZWlsX2FsbG9jYXRlX21zaV9kb21haW5zKHN0cnVjdA0KPiA+ID4g bW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiA+ID4gIHsNCj4gPiA+ID4gIAlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KPiA+ID4gPiAgCXN0cnVjdCBmd25vZGVfaGFuZGxl ICpmd25vZGUgPQ0KPiBvZl9ub2RlX3RvX2Z3bm9kZShkZXYtPm9mX25vZGUpOw0KPiA+ID4gPiAt CXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQo+ID4gPiA+ICsJc3RydWN0 IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPnJwLm1zaTsNCj4gPiA+ID4NCj4gPiA+ID4gLQlt dXRleF9pbml0KCZwY2llLT5tc2kubG9jayk7DQo+ID4gPiA+ICsJbXV0ZXhfaW5pdCgmbXNpLT5s b2NrKTsNCj4gPiA+ID4gIAltc2ktPmRldl9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIo TlVMTCwNCj4gPiA+IG1zaS0+bnVtX29mX3ZlY3RvcnMsDQo+ID4gPiA+ICAJCQkJCQkmbXNpX2Rv bWFpbl9vcHMsIHBjaWUpOw0KPiA+ID4gPiAgCWlmICghbXNpLT5kZXZfZG9tYWluKSB7DQo+ID4g PiA+IEBAIC04MzYsMTUgKzQ3MCwxNSBAQCBzdGF0aWMgaW50DQo+IG1vYml2ZWlsX3BjaWVfaW5p dF9pcnFfZG9tYWluKHN0cnVjdA0KPiA+ID4gbW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiA+ID4g IAlpbnQgcmV0Ow0KPiA+ID4gPg0KPiA+ID4gPiAgCS8qIHNldHVwIElOVHggKi8NCj4gPiA+ID4g LQlwY2llLT5pbnR4X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihub2RlLCBQQ0lfTlVN X0lOVFgsDQo+ID4gPiA+IC0JCQkJCQkgICZpbnR4X2RvbWFpbl9vcHMsIHBjaWUpOw0KPiA+ID4g PiArCXBjaWUtPnJwLmludHhfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5vZGUsDQo+ IFBDSV9OVU1fSU5UWCwNCj4gPiA+ID4gKwkJCQkJCSAgICAgJmludHhfZG9tYWluX29wcywgcGNp ZSk7DQo+ID4gPiA+DQo+ID4gPiA+IC0JaWYgKCFwY2llLT5pbnR4X2RvbWFpbikgew0KPiA+ID4g PiArCWlmICghcGNpZS0+cnAuaW50eF9kb21haW4pIHsNCj4gPiA+ID4gIAkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZ2V0IGEgSU5UeCBJUlEgZG9tYWluXG4iKTsNCj4gPiA+ID4gIAkJcmV0dXJu IC1FTk9NRU07DQo+ID4gPiA+ICAJfQ0KPiA+ID4gPg0KPiA+ID4gPiAtCXJhd19zcGluX2xvY2tf aW5pdCgmcGNpZS0+aW50eF9tYXNrX2xvY2spOw0KPiA+ID4gPiArCXJhd19zcGluX2xvY2tfaW5p dCgmcGNpZS0+cnAuaW50eF9tYXNrX2xvY2spOw0KPiA+ID4gPg0KPiA+ID4gPiAgCS8qIHNldHVw IE1TSSAqLw0KPiA+ID4gPiAgCXJldCA9IG1vYml2ZWlsX2FsbG9jYXRlX21zaV9kb21haW5zKHBj aWUpOw0KPiA+ID4gPiBAQCAtODU0LDI0ICs0ODgsNTggQEAgc3RhdGljIGludA0KPiBtb2JpdmVp bF9wY2llX2luaXRfaXJxX2RvbWFpbihzdHJ1Y3QNCj4gPiA+IG1vYml2ZWlsX3BjaWUgKnBjaWUp DQo+ID4gPiA+ICAJcmV0dXJuIDA7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC1zdGF0 aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikN Cj4gPiA+ID4gK3N0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9pbnRlcnJ1cHRfaW5pdChzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KPiA+ID4gPiArCXN0cnVjdCByZXNvdXJjZSAqcmVz Ow0KPiA+ID4gPiArCWludCByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpZiAocGNpZS0+cnAu b3BzLT5pbnRlcnJ1cHRfaW5pdCkNCj4gPiA+ID4gKwkJcmV0dXJuIHBjaWUtPnJwLm9wcy0+aW50 ZXJydXB0X2luaXQocGNpZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBtYXAgTVNJIGNvbmZp ZyByZXNvdXJjZSAqLw0KPiA+ID4gPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5h bWUocGNpZS0+cGRldiwNCj4gSU9SRVNPVVJDRV9NRU0sDQo+ID4gPiA+ICsJCQkJCSAgICJhcGJf Y3NyIik7DQo+ID4gPiA+ICsJcGNpZS0+YXBiX2Nzcl9iYXNlID0gZGV2bV9wY2lfcmVtYXBfY2Zn X3Jlc291cmNlKGRldiwgcmVzKTsNCj4gPiA+ID4gKwlpZiAoSVNfRVJSKHBjaWUtPmFwYl9jc3Jf YmFzZSkpDQo+ID4gPiA+ICsJCXJldHVybiBQVFJfRVJSKHBjaWUtPmFwYl9jc3JfYmFzZSk7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBzZXR1cCBNU0kgaGFyZHdhcmUgcmVnaXN0ZXJzICovDQo+ ID4gPiA+ICsJbW9iaXZlaWxfcGNpZV9lbmFibGVfbXNpKHBjaWUpOw0KPiA+ID4gPiArDQo+ID4g PiA+ICsJcGNpZS0+cnAuaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwY2llLT5wZGV2LCAwKTsNCj4g PiA+ID4gKwlpZiAocGNpZS0+cnAuaXJxIDw9IDApIHsNCj4gPiA+ID4gKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gbWFwIElSUTogJWRcbiIsIHBjaWUtPnJwLmlycSk7DQo+ID4gPiA+ICsJCXJl dHVybiAtRU5PREVWOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qIGluaXRp YWxpemUgdGhlIElSUSBkb21haW5zICovDQo+ID4gPiA+ICsJcmV0ID0gbW9iaXZlaWxfcGNpZV9p bml0X2lycV9kb21haW4ocGNpZSk7DQo+ID4gPiA+ICsJaWYgKHJldCkgew0KPiA+ID4gPiArCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCBjcmVhdGluZyBJUlEgRG9tYWluXG4iKTsNCj4gPiA+ID4gKwkJ cmV0dXJuIHJldDsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlpcnFfc2V0X2No YWluZWRfaGFuZGxlcl9hbmRfZGF0YShwY2llLT5ycC5pcnEsDQo+ID4gPiA+ICsJCQkJCSBtb2Jp dmVpbF9wY2llX2lzciwgcGNpZSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBFbmFibGUgaW50 ZXJydXB0cyAqLw0KPiA+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgKFBBQl9JTlRQX0lOVFhfTUFT SyB8IFBBQl9JTlRQX01TSV9NQVNLKSwNCj4gPiA+ID4gKwkJICAgUEFCX0lOVFBfQU1CQV9NSVND X0VOQik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gK30NCj4gPiA+ ID4gKw0KPiA+ID4gPiAraW50IG1vYml2ZWlsX3BjaWVfaG9zdF9wcm9iZShzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSkNCj4gPiA+ID4gIHsNCj4gPiA+ID4gLQlzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZTsNCj4gPiA+ID4gIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOw0KPiA+ID4gPiAgCXN0cnVj dCBwY2lfYnVzICpjaGlsZDsNCj4gPiA+ID4gIAlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlk Z2U7DQo+ID4gPiA+IC0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gPiA+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KPiA+ID4gPiAgCXJlc291 cmNlX3NpemVfdCBpb2Jhc2U7DQo+ID4gPiA+ICAJaW50IHJldDsNCj4gPiA+ID4NCj4gPiA+ID4g LQkvKiBhbGxvY2F0ZSB0aGUgUENJZSBwb3J0ICovDQo+ID4gPiA+IC0JYnJpZGdlID0gZGV2bV9w Y2lfYWxsb2NfaG9zdF9icmlkZ2UoZGV2LCBzaXplb2YoKnBjaWUpKTsNCj4gPiA+ID4gLQlpZiAo IWJyaWRnZSkNCj4gPiA+ID4gLQkJcmV0dXJuIC1FTk9NRU07DQo+ID4gPiA+IC0NCj4gPiA+ID4g LQlwY2llID0gcGNpX2hvc3RfYnJpZGdlX3ByaXYoYnJpZGdlKTsNCj4gPiA+ID4gLQ0KPiA+ID4g PiAtCXBjaWUtPnBkZXYgPSBwZGV2Ow0KPiA+ID4gPiArCUlOSVRfTElTVF9IRUFEKCZwY2llLT5y ZXNvdXJjZXMpOw0KPiA+ID4gPg0KPiA+ID4gPiAgCXJldCA9IG1vYml2ZWlsX3BjaWVfcGFyc2Vf ZHQocGNpZSk7DQo+ID4gPiA+ICAJaWYgKHJldCkgew0KPiA+ID4gPiBAQCAtODc5LDcgKzU0Nywx MCBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0DQo+ID4gPiBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQo+ID4gPiA+ICAJCXJldHVybiByZXQ7DQo+ID4gPiA+ICAJfQ0KPiA+ ID4gPg0KPiA+ID4gPiAtCUlOSVRfTElTVF9IRUFEKCZwY2llLT5yZXNvdXJjZXMpOw0KPiA+ID4g PiArCS8qIGFsbG9jYXRlIHRoZSBQQ0llIHBvcnQgKi8NCj4gPiA+ID4gKwlicmlkZ2UgPSBkZXZt X3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYsIDApOw0KPiA+ID4gPiArCWlmICghYnJpZGdlKQ0K PiA+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPiA+ID4NCj4gPiA+ID4gIAkvKiBwYXJzZSB0 aGUgaG9zdCBicmlkZ2UgYmFzZSBhZGRyZXNzZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgZmlsZSAq Lw0KPiA+ID4gPiAgCXJldCA9IGRldm1fb2ZfcGNpX2dldF9ob3N0X2JyaWRnZV9yZXNvdXJjZXMo ZGV2LCAwLCAweGZmLA0KPiA+ID4gPiBAQCAtODk5LDE1ICs1NzAsMTIgQEAgc3RhdGljIGludCBt b2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdA0KPiA+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiA+ID4gPiAgCQlnb3RvIGVycm9yOw0KPiA+ID4gPiAgCX0NCj4gPiA+ID4NCj4gPiA+ID4gLQkv KiBpbml0aWFsaXplIHRoZSBJUlEgZG9tYWlucyAqLw0KPiA+ID4gPiAtCXJldCA9IG1vYml2ZWls X3BjaWVfaW5pdF9pcnFfZG9tYWluKHBjaWUpOw0KPiA+ID4gPiArCXJldCA9IG1vYml2ZWlsX3Bj aWVfaW50ZXJydXB0X2luaXQocGNpZSk7DQo+ID4gPiA+ICAJaWYgKHJldCkgew0KPiA+ID4gPiAt CQlkZXZfZXJyKGRldiwgIkZhaWxlZCBjcmVhdGluZyBJUlEgRG9tYWluXG4iKTsNCj4gPiA+ID4g KwkJZGV2X2VycihkZXYsICJJbnRlcnJ1cHQgaW5pdCBmYWlsZWRcbiIpOw0KPiA+ID4gPiAgCQln b3RvIGVycm9yOw0KPiA+ID4gPiAgCX0NCj4gPiA+ID4NCj4gPiA+ID4gLQlpcnFfc2V0X2NoYWlu ZWRfaGFuZGxlcl9hbmRfZGF0YShwY2llLT5pcnEsIG1vYml2ZWlsX3BjaWVfaXNyLA0KPiBwY2ll KTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgCXJldCA9IGRldm1fcmVxdWVzdF9wY2lfYnVzX3Jlc291 cmNlcyhkZXYsICZwY2llLT5yZXNvdXJjZXMpOw0KPiA+ID4gPiAgCWlmIChyZXQpDQo+ID4gPiA+ ICAJCWdvdG8gZXJyb3I7DQo+ID4gPiA+IEBAIC05MTYsNyArNTg0LDcgQEAgc3RhdGljIGludCBt b2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdA0KPiA+ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiA+ID4gPiAgCWxpc3Rfc3BsaWNlX2luaXQoJnBjaWUtPnJlc291cmNlcywgJmJyaWRnZS0+d2lu ZG93cyk7DQo+ID4gPiA+ICAJYnJpZGdlLT5kZXYucGFyZW50ID0gZGV2Ow0KPiA+ID4gPiAgCWJy aWRnZS0+c3lzZGF0YSA9IHBjaWU7DQo+ID4gPiA+IC0JYnJpZGdlLT5idXNuciA9IHBjaWUtPnJv b3RfYnVzX25yOw0KPiA+ID4gPiArCWJyaWRnZS0+YnVzbnIgPSBwY2llLT5ycC5yb290X2J1c19u cjsNCj4gPiA+ID4gIAlicmlkZ2UtPm9wcyA9ICZtb2JpdmVpbF9wY2llX29wczsNCj4gPiA+ID4g IAlicmlkZ2UtPm1hcF9pcnEgPSBvZl9pcnFfcGFyc2VfYW5kX21hcF9wY2k7DQo+ID4gPiA+ICAJ YnJpZGdlLT5zd2l6emxlX2lycSA9IHBjaV9jb21tb25fc3dpenpsZTsNCj4gPiA+ID4gQEAgLTk0 NCwyNSArNjEyLDMgQEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdA0KPiA+ ID4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ID4gPiAgCXBjaV9mcmVlX3Jlc291cmNlX2xp c3QoJnBjaWUtPnJlc291cmNlcyk7DQo+ID4gPiA+ICAJcmV0dXJuIHJldDsNCj4gPiA+ID4gIH0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbW9i aXZlaWxfcGNpZV9vZl9tYXRjaFtdID0gew0KPiA+ID4gPiAtCXsuY29tcGF0aWJsZSA9ICJtYnZs LGdwZXg0MC1wY2llIix9LA0KPiA+ID4gPiAtCXt9LA0KPiA+ID4gPiAtfTsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCk7 DQo+ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1vYml2 ZWlsX3BjaWVfZHJpdmVyID0gew0KPiA+ID4gPiAtCS5wcm9iZSA9IG1vYml2ZWlsX3BjaWVfcHJv YmUsDQo+ID4gPiA+IC0JLmRyaXZlciA9IHsNCj4gPiA+ID4gLQkJLm5hbWUgPSAibW9iaXZlaWwt cGNpZSIsDQo+ID4gPiA+IC0JCS5vZl9tYXRjaF90YWJsZSA9IG1vYml2ZWlsX3BjaWVfb2ZfbWF0 Y2gsDQo+ID4gPiA+IC0JCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwNCj4gPiA+ID4gLQl9 LA0KPiA+ID4gPiAtfTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtYnVpbHRpbl9wbGF0Zm9ybV9kcml2 ZXIobW9iaXZlaWxfcGNpZV9kcml2ZXIpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC1NT0RVTEVfTElD RU5TRSgiR1BMIHYyIik7DQo+ID4gPiA+IC1NT0RVTEVfREVTQ1JJUFRJT04oIk1vYml2ZWlsIFBD SWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOw0KPiA+ID4gPiAtTU9EVUxFX0FVVEhPUigiU3Vi cmFobWFueWEgTGluZ2FwcGENCj4gPiA+IDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPiIp Ow0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9w Y2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2 ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jDQo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjE2YzYyZjM1NTY4DQo+ID4gPiA+IC0tLSAvZGV2 L251bGwNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2ll LW1vYml2ZWlsLXBsYXQuYw0KPiA+ID4gPiBAQCAtMCwwICsxLDU0IEBADQo+ID4gPiA+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAq IFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRy b2xsZXINCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZl aWwgSW5jLg0KPiA+ID4gPiArICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJy YWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCj4gPiA+ID4gKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBI b3UgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfcGNpLmg+DQo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+DQo+ ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gPiA+ICsjaW5j bHVkZSA8bGludXgvc2xhYi5oPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSAicGNpZS1t b2JpdmVpbC5oIg0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiA+ID4gK3sNCj4gPiA+ID4g KwlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZTsNCj4gPiA+ID4gKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcGNpZSA9IGRldm1fa3phbGxv YyhkZXYsIHNpemVvZigqcGNpZSksIEdGUF9LRVJORUwpOw0KPiA+ID4gPiArCWlmICghcGNpZSkN Cj4gPiA+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlwY2llLT5w ZGV2ID0gcGRldjsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVybiBtb2JpdmVpbF9wY2llX2hv c3RfcHJvYmUocGNpZSk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2hbXSA9IHsNCj4g PiA+ID4gKwl7LmNvbXBhdGlibGUgPSAibWJ2bCxncGV4NDAtcGNpZSIsfSwNCj4gPiA+ID4gKwl7 fSwNCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtb2JpdmVpbF9wY2llX2RyaXZlciA9IHsNCj4gPiA+ID4g KwkucHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2JlLA0KPiA+ID4gPiArCS5kcml2ZXIgPSB7DQo+ ID4gPiA+ICsJCS5uYW1lID0gIm1vYml2ZWlsLXBjaWUiLA0KPiA+ID4gPiArCQkub2ZfbWF0Y2hf dGFibGUgPSBtb2JpdmVpbF9wY2llX29mX21hdGNoLA0KPiA+ID4gPiArCQkuc3VwcHJlc3NfYmlu ZF9hdHRycyA9IHRydWUsDQo+ID4gPiA+ICsJfSwNCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4g PiA+ID4gK2J1aWx0aW5fcGxhdGZvcm1fZHJpdmVyKG1vYml2ZWlsX3BjaWVfZHJpdmVyKTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPiA+ID4gPiArTU9E VUxFX0RFU0NSSVBUSU9OKCJNb2JpdmVpbCBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIiKTsN Cj4gPiA+ID4gK01PRFVMRV9BVVRIT1IoIlN1YnJhaG1hbnlhIExpbmdhcHBhDQo+ID4gPiA8bC5z dWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4iKTsNCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5jDQo+ID4gPiBiL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5jDQo+ID4gPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWU2NzhhNjA4MjVk DQo+ID4gPiA+IC0tLSAvZGV2L251bGwNCj4gPiA+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMNCj4gPiA+ID4gQEAgLTAsMCArMSwyMjggQEAN Cj4gPiA+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gPiA+ICsv Kg0KPiA+ID4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQ Q0llIEhvc3QgY29udHJvbGxlcg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIENvcHlyaWdodCAo YykgMjAxOCBNb2JpdmVpbCBJbmMuDQo+ID4gPiA+ICsgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExp bmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KPiA+ID4gPiArICogUmVmYWN0 b3I6IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcuSG91QG54cC5jb20+DQo+ID4gPiA+ICsgKi8NCj4g PiA+ID4gKw0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gPiA+ICsjaW5j bHVkZSA8bGludXgvaW5pdC5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K PiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjaW5jbHVkZSAicGNpZS1t b2JpdmVpbC5oIg0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogbW9iaXZlaWxf cGNpZV9zZWxfcGFnZSAtIHJvdXRpbmUgdG8gYWNjZXNzIHBhZ2VkIHJlZ2lzdGVyDQo+ID4gPiA+ ICsgKg0KPiA+ID4gPiArICogUmVnaXN0ZXJzIHdob3NlIGFkZHJlc3MgZ3JlYXRlciB0aGFuIFBB R0VEX0FERFJfQk5EUlkgKDB4YzAwKQ0KPiBhcmUNCj4gPiA+IHBhZ2VkLA0KPiA+ID4gPiArICog Zm9yIHRoaXMgc2NoZW1lIHRvIHdvcmsgZXh0cmFjdGVkIGhpZ2hlciA2IGJpdHMgb2YgdGhlIG9m ZnNldCB3aWxsIGJlDQo+ID4gPiA+ICsgKiB3cml0dGVuIHRvIHBnX3NlbCBmaWVsZCBvZiBQQUJf Q1RSTCByZWdpc3RlciBhbmQgcmVzdCBvZiB0aGUgbG93ZXIgMTANCj4gPiA+ID4gKyAqIGJpdHMg ZW5hYmxlZCB3aXRoIFBBR0VEX0FERFJfQk5EUlkgYXJlIHVzZWQgYXMgb2Zmc2V0IG9mIHRoZQ0K PiA+ID4gcmVnaXN0ZXIuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyB2b2lkIG1vYml2 ZWlsX3BjaWVfc2VsX3BhZ2Uoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHU4DQo+IHBnX2lk eCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl1MzIgdmFsOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJ dmFsID0gcmVhZGwocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOw0KPiA+ID4g PiArCXZhbCAmPSB+KFBBR0VfU0VMX01BU0sgPDwgUEFHRV9TRUxfU0hJRlQpOw0KPiA+ID4gPiAr CXZhbCB8PSAocGdfaWR4ICYgUEFHRV9TRUxfTUFTSykgPDwgUEFHRV9TRUxfU0hJRlQ7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwl3cml0ZWwodmFsLCBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQ QUJfQ1RSTCk7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyB2b2lkICpt b2JpdmVpbF9wY2llX2NvbXBfYWRkcihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyDQo+ IG9mZikNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwlpZiAob2ZmIDwgUEFHRURfQUREUl9CTkRSWSkg ew0KPiA+ID4gPiArCQkvKiBGb3IgZGlyZWN0bHkgYWNjZXNzZWQgcmVnaXN0ZXJzLCBjbGVhciB0 aGUgcGdfc2VsIGZpZWxkICovDQo+ID4gPiA+ICsJCW1vYml2ZWlsX3BjaWVfc2VsX3BhZ2UocGNp ZSwgMCk7DQo+ID4gPiA+ICsJCXJldHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBvZmY7 DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJbW9iaXZlaWxfcGNpZV9zZWxfcGFn ZShwY2llLCBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKSk7DQo+ID4gPiA+ICsJcmV0dXJuIHBjaWUt PmNzcl9heGlfc2xhdmVfYmFzZSArIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKTsNCj4gPiA+ID4g K30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3JlYWQodm9p ZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ ICsJaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpIHsNCj4gPiA+ID4gKwkJKnZhbCA9 IDA7DQo+ID4gPiA+ICsJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQo+ID4g PiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3dpdGNoIChzaXplKSB7DQo+ID4gPiA+ICsJ Y2FzZSA0Og0KPiA+ID4gPiArCQkqdmFsID0gcmVhZGwoYWRkcik7DQo+ID4gPiA+ICsJCWJyZWFr Ow0KPiA+ID4gPiArCWNhc2UgMjoNCj4gPiA+ID4gKwkJKnZhbCA9IHJlYWR3KGFkZHIpOw0KPiA+ ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIDE6DQo+ID4gPiA+ICsJCSp2YWwgPSByZWFk YihhZGRyKTsNCj4gPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ID4g KwkJKnZhbCA9IDA7DQo+ID4gPiA+ICsJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1C RVI7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIFBDSUJJT1NfU1VD Q0VTU0ZVTDsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGludCBtb2Jp dmVpbF9wY2llX3dyaXRlKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHNpemUsIHUzMiB2YWwpDQo+ ID4gPiA+ICt7DQo+ID4gPiA+ICsJaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpDQo+ ID4gPiA+ICsJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwlzd2l0Y2ggKHNpemUpIHsNCj4gPiA+ID4gKwljYXNlIDQ6DQo+ID4gPiA+ICsJ CXdyaXRlbCh2YWwsIGFkZHIpOw0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIDI6 DQo+ID4gPiA+ICsJCXdyaXRldyh2YWwsIGFkZHIpOw0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ ID4gKwljYXNlIDE6DQo+ID4gPiA+ICsJCXdyaXRlYih2YWwsIGFkZHIpOw0KPiA+ID4gPiArCQli cmVhazsNCj4gPiA+ID4gKwlkZWZhdWx0Og0KPiA+ID4gPiArCQlyZXR1cm4gUENJQklPU19CQURf UkVHSVNURVJfTlVNQkVSOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldHVy biBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3Uz MiBjc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZiwgc2l6ZV90IHNp emUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJdm9pZCAqYWRkcjsNCj4gPiA+ID4gKwl1MzIgdmFs Ow0KPiA+ID4gPiArCWludCByZXQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlhZGRyID0gbW9iaXZl aWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCXJldCA9 IG1vYml2ZWlsX3BjaWVfcmVhZChhZGRyLCBzaXplLCAmdmFsKTsNCj4gPiA+ID4gKwlpZiAocmV0 KQ0KPiA+ID4gPiArCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJyZWFkIENTUiBhZGRyZXNz IGZhaWxlZFxuIik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlyZXR1cm4gdmFsOw0KPiA+ID4gPiAr fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICt2b2lkIGNzcl93cml0ZShzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZiwgc2l6ZV90IHNpemUpDQo+ID4gPiA+ICt7DQo+ID4g PiA+ICsJdm9pZCAqYWRkcjsNCj4gPiA+ID4gKwlpbnQgcmV0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJYWRkciA9IG1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHBjaWUsIG9mZik7DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNpemUsIHZhbCk7DQo+ ID4gPiA+ICsJaWYgKHJldCkNCj4gPiA+ID4gKwkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAi d3JpdGUgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ ID4gPiArYm9vbCBtb2JpdmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJaWYgKHBjaWUtPm9wcy0+bGlua191cCkNCj4gPiA+ ID4gKwkJcmV0dXJuIHBjaWUtPm9wcy0+bGlua191cChwY2llKTsNCj4gPiA+ID4gKw0KPiA+ID4g PiArCXJldHVybiAoY3NyX3JlYWRsKHBjaWUsIExUU1NNX1NUQVRVUykgJg0KPiA+ID4gPiArCQlM VFNTTV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOw0KPiA+ID4gPiArfQ0KPiA+ ID4gPiArDQo+ID4gPiA+ICt2b2lkIHByb2dyYW1faWJfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxf cGNpZSAqcGNpZSwgaW50IHdpbl9udW0sDQo+IHU2NA0KPiA+ID4gY3B1X2FkZHIsDQo+ID4gPiA+ ICsJCQl1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSkNCj4gPiA+ID4gK3sNCj4gPiA+ ID4gKwl1MzIgdmFsdWU7DQo+ID4gPiA+ICsJdTY0IHNpemU2NCA9IH4oc2l6ZSAtIDEpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJaWYgKHdpbl9udW0gPj0gcGNpZS0+cHBpb193aW5zKSB7DQo+ID4g PiA+ICsJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwNCj4gPiA+ID4gKwkJCSJFUlJPUjogbWF4 IGluYm91bmQgd2luZG93cyByZWFjaGVkICFcbiIpOw0KPiA+ID4gPiArCQlyZXR1cm47DQo+ID4g PiA+ICsJfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsJdmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFC X1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+ID4gPiArCXZhbHVlICY9IH4oQU1BUF9DVFJM X1RZUEVfTUFTSyA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCB8DQo+ID4gPiA+ICsJCSBXSU5fU0la RV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsNCj4gPiA+ID4gKwl2YWx1ZSB8PSAodHlwZSA8PCBB TUFQX0NUUkxfVFlQRV9TSElGVCkgfCAoMSA8PA0KPiA+ID4gQU1BUF9DVFJMX0VOX1NISUZUKSB8 DQo+ID4gPiA+ICsJCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyA8PA0K PiBXSU5fU0laRV9TSElGVCk7DQo+ID4gPiA+ICsJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFC X1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJY3NyX3dyaXRl bChwY2llLCB1cHBlcl8zMl9iaXRzKHNpemU2NCksDQo+ID4gPiA+ICsJCSAgIFBBQl9FWFRfUEVY X0FNQVBfU0laRU4od2luX251bSkpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJY3NyX3dyaXRlbChw Y2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCj4gPiA+ID4gKwkJICAgUEFCX1BFWF9BTUFQ X0FYSV9XSU4od2luX251bSkpOw0KPiA+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJf Yml0cyhjcHVfYWRkciksDQo+ID4gPiA+ICsJCSAgIFBBQl9FWFRfUEVYX0FNQVBfQVhJX1dJTih3 aW5fbnVtKSk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMy X2JpdHMocGNpX2FkZHIpLA0KPiA+ID4gPiArCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJTl9MKHdp bl9udW0pKTsNCj4gPiA+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2Fk ZHIpLA0KPiA+ID4gPiArCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCj4g PiA+ID4gKw0KPiA+ID4gPiArCXBjaWUtPmliX3dpbnNfY29uZmlndXJlZCsrOw0KPiA+ID4gPiAr fQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKg0KPiA+ID4gPiArICogcm91dGluZSB0byBwcm9ncmFt IHRoZSBvdXRib3VuZCB3aW5kb3dzDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3ZvaWQgcHJvZ3Jh bV9vYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4g dTY0DQo+ID4gPiBjcHVfYWRkciwNCj4gPiA+ID4gKwkJCXU2NCBwY2lfYWRkciwgdTMyIHR5cGUs IHU2NCBzaXplKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArDQo+ID4gPiA+ICsJdTMyIHZhbHVlOw0K PiA+ID4gPiArCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiAr CWlmICh3aW5fbnVtID49IHBjaWUtPmFwaW9fd2lucykgew0KPiA+ID4gPiArCQlkZXZfZXJyKCZw Y2llLT5wZGV2LT5kZXYsDQo+ID4gPiA+ICsJCQkiRVJST1I6IG1heCBvdXRib3VuZCB3aW5kb3dz IHJlYWNoZWQgIVxuIik7DQo+ID4gPiA+ICsJCXJldHVybjsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwkvKg0KPiA+ID4gPiArCSAqIHByb2dyYW0gRW5hYmxlIEJpdCB0byAxLCBU eXBlIEJpdCB0byAoMDApIGJhc2UgMiwgQVhJIFdpbmRvdyBTaXplDQo+IEJpdA0KPiA+ID4gPiAr CSAqIHRvIDQgS0IgaW4gUEFCX0FYSV9BTUFQX0NUUkwgcmVnaXN0ZXINCj4gPiA+ID4gKwkgKi8N Cj4gPiA+ID4gKwl2YWx1ZSA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBfQ1RSTCh3aW5f bnVtKSk7DQo+ID4gPiA+ICsJdmFsdWUgJj0gfihXSU5fVFlQRV9NQVNLIDw8IFdJTl9UWVBFX1NI SUZUIHwNCj4gPiA+ID4gKwkJIFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KPiA+ ID4gPiArCXZhbHVlIHw9IDEgPDwgV0lOX0VOQUJMRV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZUEVf U0hJRlQgfA0KPiA+ID4gPiArCQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9TSVpFX01B U0sgPDwNCj4gV0lOX1NJWkVfU0hJRlQpOw0KPiA+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgdmFs dWUsIFBBQl9BWElfQU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWNz cl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhzaXplNjQpLA0KPiA+ID4gUEFCX0VYVF9BWElf QU1BUF9TSVpFKHdpbl9udW0pKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCS8qDQo+ID4gPiA+ICsJ ICogcHJvZ3JhbSBBWEkgd2luZG93IGJhc2Ugd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZSBpbg0KPiA+ ID4gPiArCSAqIFBBQl9BWElfQU1BUF9BWElfV0lOMCByZWdpc3Rlcg0KPiA+ID4gPiArCSAqLw0K PiA+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRkcikgJg0KPiA+ ID4gKH5BWElfV0lORE9XX0FMSUdOX01BU0spLA0KPiA+ID4gPiArCQkgICBQQUJfQVhJX0FNQVBf QVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gPiA+ICsJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9i aXRzKGNwdV9hZGRyKSwNCj4gPiA+ID4gKwkJICAgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdp bl9udW0pKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJf Yml0cyhwY2lfYWRkciksDQo+ID4gPiA+ICsJCSAgIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2lu X251bSkpOw0KPiA+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhwY2lfYWRk ciksDQo+ID4gPiA+ICsJCSAgIFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luX251bSkpOw0KPiA+ ID4gPiArDQo+ID4gPiA+ICsJcGNpZS0+b2Jfd2luc19jb25maWd1cmVkKys7DQo+ID4gPiA+ICt9 DQo+ID4gPiA+ICsNCj4gPiA+ID4gK2ludCBtb2JpdmVpbF9icmluZ3VwX2xpbmsoc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJaW50IHJldHJpZXM7DQo+ ID4gPiA+ICsNCj4gPiA+ID4gKwkvKiBjaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8N Cj4gPiA+ID4gKwlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTElOS19XQUlUX01BWF9SRVRS SUVTOyByZXRyaWVzKyspIHsNCj4gPiA+ID4gKwkJaWYgKG1vYml2ZWlsX3BjaWVfbGlua191cChw Y2llKSkNCj4gPiA+ID4gKwkJCXJldHVybiAwOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCXVzbGVl cF9yYW5nZShMSU5LX1dBSVRfTUlOLCBMSU5LX1dBSVRfTUFYKTsNCj4gPiA+ID4gKwl9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJsaW5rIG5ldmVyIGNh bWUgdXBcbiIpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJcmV0dXJuIC1FVElNRURPVVQ7DQo+ID4g PiA+ICt9DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2 ZWlsL3BjaWUtbW9iaXZlaWwuaA0KPiA+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2 ZWlsL3BjaWUtbW9iaXZlaWwuaA0KPiA+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ID4g PiBpbmRleCAwMDAwMDAwMDAwMDAuLmViNGNiNjEyOTFhOA0KPiA+ID4gPiAtLS0gL2Rldi9udWxs DQo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2Jp dmVpbC5oDQo+ID4gPiA+IEBAIC0wLDAgKzEsMTg3IEBADQo+ID4gPiA+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ID4gPiArLyoNCj4gPiA+ID4gKyAqIFBDSWUg aG9zdCBjb250cm9sbGVyIGRyaXZlciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRyb2xsZXIN Cj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5j Lg0KPiA+ID4gPiArICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55 YUBtb2JpdmVpbC5jby5pbj4NCj4gPiA+ID4gKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3UgPFpo aXFpYW5nLkhvdUBueHAuY29tPg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNp Zm5kZWYgX1BDSUVfTU9CSVZFSUxfSA0KPiA+ID4gPiArI2RlZmluZSBfUENJRV9NT0JJVkVJTF9I DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9pcnEuaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4NCj4g PiA+ID4gKyNpbmNsdWRlICIuLi8uLi9wY2kuaCINCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogcmVn aXN0ZXIgb2Zmc2V0cyBhbmQgYml0IHBvc2l0aW9ucyAqLw0KPiA+ID4gPiArDQo+ID4gPiA+ICsv Kg0KPiA+ID4gPiArICogdHJhbnNsYXRpb24gdGFibGVzIGFyZSBncm91cGVkIGludG8gd2luZG93 cywgZWFjaCB3aW5kb3cgcmVnaXN0ZXJzDQo+IGFyZQ0KPiA+ID4gPiArICogZ3JvdXBlZCBpbnRv IGJsb2NrcyBvZiA0IG9yIDE2IHJlZ2lzdGVycyBlYWNoDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4g KyNkZWZpbmUgUEFCX1JFR19CTE9DS19TSVpFCQkxNg0KPiA+ID4gPiArI2RlZmluZSBQQUJfRVhU X1JFR19CTE9DS19TSVpFCQk0DQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNkZWZpbmUgUEFCX1JFR19B RERSKG9mZnNldCwgd2luKQlcDQo+ID4gPiA+ICsJKG9mZnNldCArICh3aW4gKiBQQUJfUkVHX0JM T0NLX1NJWkUpKQ0KPiA+ID4gPiArI2RlZmluZSBQQUJfRVhUX1JFR19BRERSKG9mZnNldCwgd2lu KQlcDQo+ID4gPiA+ICsJKG9mZnNldCArICh3aW4gKiBQQUJfRVhUX1JFR19CTE9DS19TSVpFKSkN Cj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBMVFNTTV9TVEFUVVMJCQkweDA0MDQNCj4gPiA+ ID4gKyNkZWZpbmUgIExUU1NNX1NUQVRVU19MMF9NQVNLCQkweDNmDQo+ID4gPiA+ICsjZGVmaW5l ICBMVFNTTV9TVEFUVVNfTDAJCTB4MmQNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBQQUJf Q1RSTAkJCTB4MDgwOA0KPiA+ID4gPiArI2RlZmluZSAgQU1CQV9QSU9fRU5BQkxFX1NISUZUCQkw DQo+ID4gPiA+ICsjZGVmaW5lICBQRVhfUElPX0VOQUJMRV9TSElGVAkJMQ0KPiA+ID4gPiArI2Rl ZmluZSAgUEFHRV9TRUxfU0hJRlQJCQkxMw0KPiA+ID4gPiArI2RlZmluZSAgUEFHRV9TRUxfTUFT SwkJCTB4M2YNCj4gPiA+ID4gKyNkZWZpbmUgIFBBR0VfTE9fTUFTSwkJCTB4M2ZmDQo+ID4gPiA+ ICsjZGVmaW5lICBQQUdFX1NFTF9PRkZTRVRfU0hJRlQJCTEwDQo+ID4gPiA+ICsNCj4gPiA+ID4g KyNkZWZpbmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgwODQwDQo+ID4gPiA+ICsjZGVmaW5lICBBUElP X0VOX01BU0sJCQkweGYNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBQQUJfUEVYX1BJT19D VFJMCQkweDA4YzANCj4gPiA+ID4gKyNkZWZpbmUgIFBJT19FTkFCTEVfU0hJRlQJCTANCj4gPiA+ ID4gKw0KPiA+ID4gPiArI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfRU5CCQkweDBiMGMNCj4g PiA+ID4gKyNkZWZpbmUgUEFCX0lOVFBfQU1CQV9NSVNDX1NUQVQJCTB4MGIxYw0KPiA+ID4gPiAr I2RlZmluZSAgUEFCX0lOVFBfSU5UWF9NQVNLCQkweDAxZTANCj4gPiA+ID4gKyNkZWZpbmUgIFBB Ql9JTlRQX01TSV9NQVNLCQkweDgNCj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBQQUJfQVhJ X0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIoMHgwYmEwLA0KPiB3aW4pDQo+ID4gPiA+ICsj ZGVmaW5lICBXSU5fRU5BQkxFX1NISUZUCQkwDQo+ID4gPiA+ICsjZGVmaW5lICBXSU5fVFlQRV9T SElGVAkJCTENCj4gPiA+ID4gKyNkZWZpbmUgIFdJTl9UWVBFX01BU0sJCQkweDMNCj4gPiA+ID4g KyNkZWZpbmUgIFdJTl9TSVpFX1NISUZUCQkJMTANCj4gPiA+ID4gKyNkZWZpbmUgIFdJTl9TSVpF X01BU0sJCQkweDNmZmZmZg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFBBQl9FWFRfQVhJ X0FNQVBfU0laRSh3aW4pDQo+IAlQQUJfRVhUX1JFR19BRERSKDB4YmFmMCwNCj4gPiA+IHdpbikN Cj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBQQUJfRVhUX0FYSV9BTUFQX0FYSV9XSU4od2lu KQ0KPiA+ID4gCVBBQl9FWFRfUkVHX0FERFIoMHg4MGEwLCB3aW4pDQo+ID4gPiA+ICsjZGVmaW5l IFBBQl9BWElfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4MGJhNCwNCj4gd2luKQ0K PiA+ID4gPiArI2RlZmluZSAgQVhJX1dJTkRPV19BTElHTl9NQVNLCQkzDQo+ID4gPiA+ICsNCj4g PiA+ID4gKyNkZWZpbmUgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3aW4pDQo+IAlQQUJfUkVHX0FE RFIoMHgwYmE4LA0KPiA+ID4gd2luKQ0KPiA+ID4gPiArI2RlZmluZSAgUEFCX0JVU19TSElGVAkJ CTI0DQo+ID4gPiA+ICsjZGVmaW5lICBQQUJfREVWSUNFX1NISUZUCQkxOQ0KPiA+ID4gPiArI2Rl ZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5l IFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luKQ0KPiAJUEFCX1JFR19BRERSKDB4MGJhYywNCj4g PiA+IHdpbikNCj4gPiA+ID4gKyNkZWZpbmUgUEFCX0lOVFBfQVhJX1BJT19DTEFTUwkJMHg0NzQN Cj4gPiA+ID4gKw0KPiA+ID4gPiArI2RlZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3aW4pCQlQQUJf UkVHX0FERFIoMHg0YmEwLA0KPiA+ID4gd2luKQ0KPiA+ID4gPiArI2RlZmluZSAgQU1BUF9DVFJM X0VOX1NISUZUCQkwDQo+ID4gPiA+ICsjZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9TSElGVAkJMQ0K PiA+ID4gPiArI2RlZmluZSAgQU1BUF9DVFJMX1RZUEVfTUFTSwkJMw0KPiA+ID4gPiArDQo+ID4g PiA+ICsjZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4od2luKQ0KPiAJUEFCX0VYVF9SRUdf QUREUigweGJlZjAsDQo+ID4gPiB3aW4pDQo+ID4gPiA+ICsjZGVmaW5lIFBBQl9FWFRfUEVYX0FN QVBfQVhJX1dJTih3aW4pDQo+ID4gPiAJUEFCX0VYVF9SRUdfQUREUigweGI0YTAsIHdpbikNCj4g PiA+ID4gKyNkZWZpbmUgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHg0 YmE0LA0KPiB3aW4pDQo+ID4gPiA+ICsjZGVmaW5lIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2lu KQ0KPiAJUEFCX1JFR19BRERSKDB4NGJhOCwNCj4gPiA+IHdpbikNCj4gPiA+ID4gKyNkZWZpbmUg UEFCX1BFWF9BTUFQX1BFWF9XSU5fSCh3aW4pDQo+IAlQQUJfUkVHX0FERFIoMHg0YmFjLA0KPiA+ ID4gd2luKQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiBzdGFydGluZyBvZmZzZXQgb2YgSU5UWCBi aXRzIGluIHN0YXR1cyByZWdpc3RlciAqLw0KPiA+ID4gPiArI2RlZmluZSBQQUJfSU5UWF9TVEFS VAkJCTUNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogc3VwcG9ydGVkIG51bWJlciBvZiBNU0kgaW50 ZXJydXB0cyAqLw0KPiA+ID4gPiArI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQo+ID4gPiA+ICsN Cj4gPiA+ID4gKy8qIE1TSSByZWdpc3RlcnMgKi8NCj4gPiA+ID4gKyNkZWZpbmUgTVNJX0JBU0Vf TE9fT0ZGU0VUCQkweDA0DQo+ID4gPiA+ICsjZGVmaW5lIE1TSV9CQVNFX0hJX09GRlNFVAkJMHgw OA0KPiA+ID4gPiArI2RlZmluZSBNU0lfU0laRV9PRkZTRVQJCQkweDBjDQo+ID4gPiA+ICsjZGVm aW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQo+ID4gPiA+ICsjZGVmaW5lIE1TSV9TVEFUVVNf T0ZGU0VUCQkweDE4DQo+ID4gPiA+ICsjZGVmaW5lIE1TSV9EQVRBX09GRlNFVAkJCTB4MjANCj4g PiA+ID4gKyNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQNCj4gPiA+ID4gKyNkZWZpbmUg TVNJX0FERFJfSF9PRkZTRVQJCTB4MjgNCj4gPiA+ID4gKw0KPiA+ID4gPiArLyogb3V0Ym91bmQg YW5kIGluYm91bmQgd2luZG93IGRlZmluaXRpb25zICovDQo+ID4gPiA+ICsjZGVmaW5lIFdJTl9O VU1fMAkJCTANCj4gPiA+ID4gKyNkZWZpbmUgV0lOX05VTV8xCQkJMQ0KPiA+ID4gPiArI2RlZmlu ZSBDRkdfV0lORE9XX1RZUEUJCQkwDQo+ID4gPiA+ICsjZGVmaW5lIElPX1dJTkRPV19UWVBFCQkJ MQ0KPiA+ID4gPiArI2RlZmluZSBNRU1fV0lORE9XX1RZUEUJCQkyDQo+ID4gPiA+ICsjZGVmaW5l IElCX1dJTl9TSVpFCQkJKCh1NjQpMjU2ICogMTAyNCAqIDEwMjQgKiAxMDI0KQ0KPiA+ID4gPiAr I2RlZmluZSBNQVhfUElPX1dJTkRPV1MJCQk4DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIFBhcmFt ZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRpbmUgKi8NCj4gPiA+ID4gKyNk ZWZpbmUgTElOS19XQUlUX01BWF9SRVRSSUVTCQkxMA0KPiA+ID4gPiArI2RlZmluZSBMSU5LX1dB SVRfTUlOCQkJOTAwMDANCj4gPiA+ID4gKyNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEwMDAwMA0K PiA+ID4gPiArDQo+ID4gPiA+ICsjZGVmaW5lIFBBR0VEX0FERFJfQk5EUlkJCTB4YzAwDQo+ID4g PiA+ICsjZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQo+ID4gPiA+ICsJKChvZmYg JiBQQUdFX0xPX01BU0spIHwgUEFHRURfQUREUl9CTkRSWSkNCj4gPiA+ID4gKyNkZWZpbmUgT0ZG U0VUX1RPX1BBR0VfSURYKG9mZikJCVwNCj4gPiA+ID4gKwkoKG9mZiA+PiBQQUdFX1NFTF9PRkZT RVRfU0hJRlQpICYgUEFHRV9TRUxfTUFTSykNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RydWN0IG1v Yml2ZWlsX3BjaWU7DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0cnVjdCBtb2JpdmVpbF9tc2kgewkJ CS8qIE1TSSBpbmZvcm1hdGlvbiAqLw0KPiA+ID4gPiArCXN0cnVjdCBtdXRleCBsb2NrOwkJLyog cHJvdGVjdCBiaXRtYXAgdmFyaWFibGUgKi8NCj4gPiA+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAq bXNpX2RvbWFpbjsNCj4gPiA+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZGV2X2RvbWFpbjsNCj4g PiA+ID4gKwlwaHlzX2FkZHJfdCBtc2lfcGFnZXNfcGh5czsNCj4gPiA+ID4gKwlpbnQgbnVtX29m X3ZlY3RvcnM7DQo+ID4gPiA+ICsJREVDTEFSRV9CSVRNQVAobXNpX2lycV9pbl91c2UsIFBDSV9O VU1fTVNJKTsNCj4gPiA+ID4gK307DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0cnVjdCBtb2JpdmVp bF9ycF9vcHMgew0KPiA+ID4gPiArCWludCAoKmludGVycnVwdF9pbml0KShzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSk7DQo+ID4gPiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdHJ1Y3Qg cm9vdF9wb3J0IHsNCj4gPiA+ID4gKwl1OCByb290X2J1c19ucjsNCj4gPiA+ID4gKwl2b2lkIF9f aW9tZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFzZTsJLyogZW5kcG9pbnQgY29uZmlnIGJhc2UNCj4g Ki8NCj4gPiA+ID4gKwlzdHJ1Y3QgcmVzb3VyY2UgKm9iX2lvX3JlczsNCj4gPiA+ID4gKwlzdHJ1 Y3QgbW9iaXZlaWxfcnBfb3BzICpvcHM7DQo+ID4gPiA+ICsJaW50IGlycTsNCj4gPiA+ID4gKwly YXdfc3BpbmxvY2tfdCBpbnR4X21hc2tfbG9jazsNCj4gPiA+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFp biAqaW50eF9kb21haW47DQo+ID4gPiA+ICsJc3RydWN0IG1vYml2ZWlsX21zaSBtc2k7DQo+ID4g PiA+ICt9Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICtzdHJ1Y3QgbW9iaXZlaWxfcGFiX29wcyB7DQo+ ID4gPiA+ICsJaW50ICgqbGlua191cCkoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KPiA+ ID4gPiArfTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RydWN0IG1vYml2ZWlsX3BjaWUgew0KPiA+ ID4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQo+ID4gPiA+ICsJc3RydWN0IGxp c3RfaGVhZCByZXNvdXJjZXM7DQo+ID4gPiA+ICsJdm9pZCBfX2lvbWVtICpjc3JfYXhpX3NsYXZl X2Jhc2U7CS8qIFBBQiByZWdpc3RlcnMgYmFzZSAqLw0KPiA+ID4gPiArCXBoeXNfYWRkcl90IHBj aWVfcmVnX2Jhc2U7CS8qIFBoeXNpY2FsIFBDSWUgQ29udHJvbGxlciBCYXNlICovDQo+ID4gPiA+ ICsJdm9pZCBfX2lvbWVtICphcGJfY3NyX2Jhc2U7CS8qIE1TSSByZWdpc3RlciBiYXNlICovDQo+ ID4gPiA+ICsJdTMyIGFwaW9fd2luczsNCj4gPiA+ID4gKwl1MzIgcHBpb193aW5zOw0KPiA+ID4g PiArCXUzMiBvYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIG91dGJvdW5kIHdpbmRv d3MNCj4gKi8NCj4gPiA+ID4gKwl1MzIgaWJfd2luc19jb25maWd1cmVkOwkJLyogY29uZmlndXJl ZCBpbmJvdW5kIHdpbmRvd3MgKi8NCj4gPiA+ID4gKwljb25zdCBzdHJ1Y3QgbW9iaXZlaWxfcGFi X29wcyAqb3BzOw0KPiA+ID4gPiArCXN0cnVjdCByb290X3BvcnQgcnA7DQo+ID4gPiA+ICt9Ow0K PiA+ID4gPiArDQo+ID4gPiA+ICtpbnQgbW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKHN0cnVjdCBt b2JpdmVpbF9wY2llICpwY2llKTsNCj4gPiA+ID4gK2Jvb2wgbW9iaXZlaWxfcGNpZV9saW5rX3Vw KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKTsNCj4gPiA+ID4gK2ludCBtb2JpdmVpbF9icmlu Z3VwX2xpbmsoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KPiA+ID4gPiArdm9pZCBwcm9n cmFtX29iX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0K PiB1NjQNCj4gPiA+IGNwdV9hZGRyLA0KPiA+ID4gPiArCQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlw ZSwgdTY0IHNpemUpOw0KPiA+ID4gPiArdm9pZCBwcm9ncmFtX2liX3dpbmRvd3Moc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0KPiB1NjQNCj4gPiA+IGNwdV9hZGRyLA0K PiA+ID4gPiArCQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpOw0KPiA+ID4gPiAr dTMyIGNzcl9yZWFkKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmLCBzaXplX3Qg c2l6ZSk7DQo+ID4gPiA+ICt2b2lkIGNzcl93cml0ZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNp ZSwgdTMyIHZhbCwgdTMyIG9mZiwgc2l6ZV90IHNpemUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICtz dGF0aWMgaW5saW5lIHUzMiBjc3JfcmVhZGwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiBvZmYpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwg MHg0KTsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIGlubGluZSB2b2lk IGNzcl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYp DQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDQpOw0K PiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZW5kaWYgLyogX1BDSUVfTU9CSVZFSUxf SCAqLw0KPiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjE3LjENCj4gPiA+ID4NCj4gPg0KPiA+IFRoYW5r cywNCj4gPiBaaGlxaWFuZw0K