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=-8.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=ham 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 87742C433DF for ; Fri, 22 May 2020 09:41:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6232520814 for ; Fri, 22 May 2020 09:41:05 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="nXX4NErV" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729669AbgEVJlE (ORCPT ); Fri, 22 May 2020 05:41:04 -0400 Received: from mailgw02.mediatek.com ([210.61.82.184]:5646 "EHLO mailgw02.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1728356AbgEVJlB (ORCPT ); Fri, 22 May 2020 05:41:01 -0400 X-UUID: d141f3387a524b1b8b885be3e7ed01d6-20200522 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=dJWWkmSPn/WrX3LTeJK3KaHNokHZNiuo0PXui+/Ql9M=; b=nXX4NErV/joViBvqLk5bWF3IDYoA4hs+fP/axQp9Ht/57EfC5pM/W+D13wH1w8HeeTkYOzreJLLDJR2Rgq2YJALAfIQU7Rt2HtdUfrWlemXNNVL1hcm1kTh7MPxr9kvuptw6OxmrhD5ub+TPUNxn5EIQ64UcPGy3rhBw9VYpWtk=; X-UUID: d141f3387a524b1b8b885be3e7ed01d6-20200522 Received: from mtkcas10.mediatek.inc [(172.21.101.39)] by mailgw02.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 191410581; Fri, 22 May 2020 17:40:36 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs05n2.mediatek.inc (172.21.101.140) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 22 May 2020 17:40:32 +0800 Received: from [172.21.77.4] (172.21.77.4) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 22 May 2020 17:40:34 +0800 Message-ID: <1590140434.4392.22.camel@mtksdaap41> Subject: Re: [PATCH v8 3/3] PM / AVS: SVS: Introduce SVS engine From: Roger Lu To: Enric Balletbo Serra CC: Kevin Hilman , Rob Herring , Nicolas Boichat , Stephen Boyd , Mark Rutland , Nishanth Menon , Angus Lin , "devicetree@vger.kernel.org" , Linux PM list , linux-kernel , Xiaoqing Liu , YT Lee , Fan Chen , "moderated list:ARM/Mediatek SoC support" , HenryC Chen , Charles Yang , Matthias Brugger , Linux ARM Date: Fri, 22 May 2020 17:40:34 +0800 In-Reply-To: References: <20200518092403.22647-1-roger.lu@mediatek.com> <20200518092403.22647-4-roger.lu@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DQpIaSBFbnJpYywNCg0KT24gVHVlLCAyMDIwLTA1LTE5IGF0IDE3OjMwICswMjAwLCBFbnJpYyBC YWxsZXRibyBTZXJyYSB3cm90ZToNCj4gSGkgUm9nZXIsDQo+IA0KPiBUaGFuayB5b3UgZm9yIHlv dXIgcGF0Y2guIEkgaGF2ZSB0aGUgZmVlbGluZyB0aGF0IHRoaXMgZHJpdmVyIGlzDQo+IGNvbXBs ZXggYW5kIGRpZmZpY3VsdCB0byBmb2xsb3cgYW5kIEkgYW0gd29uZGVyaW5nIGlmIGl0IHdvdWxk bid0IGJlDQo+IGJldHRlciBpZiB5b3UgY2FuIHNlbmQgYSB2ZXJzaW9uIHRoYXQgc2ltcGx5IGFk ZHMgYmFzaWMgZnVuY3Rpb25hbGl0eQ0KPiBmb3Igbm93LiBTb21lIGNvbW1lbnRzIGJlbG93Lg0K DQpUaGFua3MgZm9yIHRoZSBhZHZpY2VzLiBJJ2xsIHN1Ym1pdCBTVlMgdjkgd2l0aCBiYXNpYyBm dW5jdGlvbmFsaXR5DQpwYXRjaCArIHN0ZXAgYnkgc3RlcCBmdW5jdGlvbmFsaXRpZXMnIHBhdGNo ZXMuIA0KDQo+IA0KPiBNaXNzYXRnZSBkZSBSb2dlciBMdSA8cm9nZXIubHVAbWVkaWF0ZWsuY29t PiBkZWwgZGlhIGRsLiwgMTggZGUgbWFpZw0KPiAyMDIwIGEgbGVzIDExOjI1Og0KPiA+DQo+ID4g VGhlIFNWUyAoU21hcnQgVm9sdGFnZSBTY2FsaW5nKSBlbmdpbmUgaXMgYSBwaWVjZQ0KPiA+IG9m IGhhcmR3YXJlIHdoaWNoIGlzIHVzZWQgdG8gY2FsY3VsYXRlIG9wdGltaXplZA0KPiA+IHZvbHRh Z2UgdmFsdWVzIG9mIHNldmVyYWwgcG93ZXIgZG9tYWlucywNCj4gPiBlLmcuIENQVS9HUFUvQ0NJ LCBhY2NvcmRpbmcgdG8gY2hpcCBwcm9jZXNzIGNvcm5lciwNCj4gPiB0ZW1wZXJhdHVyZXMsIGFu ZCBvdGhlciBmYWN0b3JzLiBUaGVuIERWRlMgZHJpdmVyDQo+ID4gY291bGQgYXBwbHkgdGhvc2Ug b3B0aW1pemVkIHZvbHRhZ2UgdmFsdWVzIHRvIHJlZHVjZQ0KPiA+IHBvd2VyIGNvbnN1bXB0aW9u Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogUm9nZXIgTHUgPHJvZ2VyLmx1QG1lZGlhdGVrLmNv bT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVycy9wb3dlci9hdnMvS2NvbmZpZyAgICAgfCAgIDEwICsN Cj4gPiAgZHJpdmVycy9wb3dlci9hdnMvTWFrZWZpbGUgICAgfCAgICAxICsNCj4gPiAgZHJpdmVy cy9wb3dlci9hdnMvbXRrX3N2cy5jICAgfCAyMTE5ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKw0KPiA+ICBpbmNsdWRlL2xpbnV4L3Bvd2VyL210a19zdnMuaCB8ICAgMjMgKw0KPiA+ ICA0IGZpbGVzIGNoYW5nZWQsIDIxNTMgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9wb3dlci9hdnMvbXRrX3N2cy5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL2xpbnV4L3Bvd2VyL210a19zdnMuaA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvcG93ZXIvYXZzL0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL2F2cy9LY29uZmlnDQo+ID4g aW5kZXggY2RiNDIzN2JmZDAyLi42NzA4OWFjNjA0MGUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy cy9wb3dlci9hdnMvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvcG93ZXIvYXZzL0tjb25maWcN Cj4gPiBAQCAtMzUsMyArMzUsMTMgQEAgY29uZmlnIFJPQ0tDSElQX0lPRE9NQUlODQo+ID4gICAg ICAgICAgIFNheSB5IGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgaW8gZG9tYWlucyBvbiBSb2NrY2hp cCBTb0NzLiBJdCBpcw0KPiA+ICAgICAgICAgICBuZWNlc3NhcnkgZm9yIHRoZSBpbyBkb21haW4g c2V0dGluZyBvZiB0aGUgU29DIHRvIG1hdGNoIHRoZQ0KPiA+ICAgICAgICAgICB2b2x0YWdlIHN1 cHBsaWVkIGJ5IHRoZSByZWd1bGF0b3JzLg0KPiA+ICsNCj4gPiArY29uZmlnIE1US19TVlMNCj4g PiArICAgICAgIGJvb2wgIk1lZGlhVGVrIFNtYXJ0IFZvbHRhZ2UgU2NhbGluZyhTVlMpIg0KPiAN Cj4gQ2FuJ3QgYmUgdGhpcyBhIG1vZHVsZT8gV2h5PyBJbiBzdWNoIGNhc2UsIHlvdSBzaG91bGQg dXNlIHRyaXN0YXRlIG9wdGlvbg0KDQpHZW5lcmFsbHksIE1US19TVlMgaXMgbmVlZGVkIGluIE1U SyBTb0MobXQ4MXh4KSBwcm9kdWN0cy4gU28sIHdlIGRvbid0IHByb3ZpZGUNCm1vZHVsZSBvcHRp b24gaW4gY29uZmlnLiBJZiwgc29tZWhvdywgU1ZTIGlzbid0IG5lZWRlZCwgd2Ugc3VnZ2VzdA0K Q09ORklHX01US19TVlM9biB0byBiZSBzZXQuDQoNCj4gDQo+ID4gKyAgICAgICBkZXBlbmRzIG9u IFBPV0VSX0FWUyAmJiBNVEtfRUZVU0UgJiYgTlZNRU0NCj4gPiArICAgICAgIGhlbHANCj4gPiAr ICAgICAgICAgVGhlIFNWUyBlbmdpbmUgaXMgYSBwaWVjZSBvZiBoYXJkd2FyZSB3aGljaCBpcyB1 c2VkIHRvIGNhbGN1bGF0ZQ0KPiA+ICsgICAgICAgICBvcHRpbWl6ZWQgdm9sdGFnZSB2YWx1ZXMg b2Ygc2V2ZXJhbCBwb3dlciBkb21haW5zLCBlLmcuDQo+ID4gKyAgICAgICAgIENQVSBjbHVzdGVy cy9HUFUvQ0NJLCBhY2NvcmRpbmcgdG8gY2hpcCBwcm9jZXNzIGNvcm5lciwgdGVtcGVyYXR1cmVz LA0KPiA+ICsgICAgICAgICBhbmQgb3RoZXIgZmFjdG9ycy4gVGhlbiBEVkZTIGRyaXZlciBjb3Vs ZCBhcHBseSB0aG9zZSBvcHRpbWl6ZWQgdm9sdGFnZQ0KPiA+ICsgICAgICAgICB2YWx1ZXMgdG8g cmVkdWNlIHBvd2VyIGNvbnN1bXB0aW9uLg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2Vy L2F2cy9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvYXZzL01ha2VmaWxlDQo+ID4gaW5kZXggOTAw N2QwNTg1M2UyLi4yMzFhZGYwNzg1ODIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wb3dlci9h dnMvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3Bvd2VyL2F2cy9NYWtlZmlsZQ0KPiA+IEBA IC0yLDMgKzIsNCBAQA0KPiA+ICBvYmotJChDT05GSUdfUE9XRVJfQVZTX09NQVApICAgICAgICAg ICArPSBzbWFydHJlZmxleC5vDQo+ID4gIG9iai0kKENPTkZJR19RQ09NX0NQUikgICAgICAgICAg ICAgICAgICs9IHFjb20tY3ByLm8NCj4gPiAgb2JqLSQoQ09ORklHX1JPQ0tDSElQX0lPRE9NQUlO KSAgICAgICAgICAgICAgICArPSByb2NrY2hpcC1pby1kb21haW4ubw0KPiA+ICtvYmotJChDT05G SUdfTVRLX1NWUykgICAgICAgICAgICAgICAgICArPSBtdGtfc3ZzLm8NCj4gDQo+IFdpbGwgdGhp cyBkcml2ZXIgYmUgU29DIHNwZWNpZmljIG9yIHRoZSBpZGVhIGlzIHRvIHN1cHBvcnQgZGlmZmVy ZW50DQo+IFNvQ3M/IElmIHRoZSBhbnN3ZXIgdG8gdGhlIGZpcnN0IHF1ZXN0aW9uIGlzIHllcywg cGxlYXNlIG5hbWUgdGhlIGZpbGUNCj4gd2l0aCB0aGUgU29DIHByZWZpeCAoaS5lIG10ODE4M19z dnMpLiBIb3dldmVyLCBJZiB0aGUgYW5zd2VyIHRvIHRoZQ0KPiBzZWNvbmQgcXVlc3Rpb24gaXMg eWVzLCBtYWtlIHN1cmUgeW91IHByZWZpeCBjb21tb24NCj4gZnVuY3Rpb25zL3N0cnVjdHMvZGVm aW5lcyB3aXRoIGEgZ2VuZXJpYyBwcmVmaXggbXRrX3N2cyBidXQgdXNlIHRoZQ0KPiBTb0MgcHJl Zml4IGZvciB0aGUgb25lcyB5b3UgZXhwZWN0IHdpbGwgYmUgZGlmZmVyZW50IGJldHdlZW4gU29D LCBpLmUNCj4gbXQ4MTgzX3N2c18uIFRoaXMgaGVscHMgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBk cml2ZXIuIEFsc28sIHRyeSB0bw0KPiBhdm9pZCB0b28gZ2VuZXJpYyBuYW1lcy4NCg0KTVRLX1NW UyBpcyBkZXNpZ25lZCBmb3Igc3VwcG9ydGluZyBkaWZmZXJlbnQgTVRLIFNvQ3MuVGhlcmVmb3Jl LCB0aGUgYW5zd2VyIGlzIHNlY29uZA0KcXVlc3Rpb24gYW5kIHRoYW5rcyBmb3IgdGhlIGhlYWRz LXVwLg0KDQo+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2F2cy9tdGtfc3ZzLmMg Yi9kcml2ZXJzL3Bvd2VyL2F2cy9tdGtfc3ZzLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYTQwODNiM2VmMTc1DQo+ID4gLS0tIC9kZXYvbnVsbA0K PiA+ICsrKyBiL2RyaXZlcnMvcG93ZXIvYXZzL210a19zdnMuYw0KPiA+IEBAIC0wLDAgKzEsMjEx OSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiANCj4gSSBz dXNwZWN0IHlvdSB3YW50IHRoaXMgb25seSBHUEx2MiBjb21wbGlhbnQuIFVzZSBHUEwtMi4wLW9u bHkNCg0KT0suIEknbGwgdXNlIEdQTC0yLjAtb25seS5UaGFua3MuDQoNCj4gDQo+ID4gKy8qDQo+ ID4gKyAqIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuDQo+ID4gKyAqLw0KPiA+ICsN Cj4gPiArI2RlZmluZSBwcl9mbXQoZm10KSAgICAiW210a19zdnNdICIgZm10DQo+IA0KPiBJIGRv bid0IHNlZSBhbnkgcmVhc29uIHRvIHVzZSBwcl9mbXQgaW4gdGhpcyBkcml2ZXIuIFVzZSBkZXZf Kg0KPiBmdW5jdGlvbnMgaW5zdGVhZCBhbmQgcmVtb3ZlIHRoZSBhYm92ZS4NCg0KT2suIEkgd2ls bCByZW1vdmUgaXQuIFRoYW5rcy4NCg0KPiANCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9i aXRzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2NvbXBsZXRpb24uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1 bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9udm1lbS1jb25zdW1lci5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX29w cC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG1fcW9zLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9wbV9ydW50aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wb3dlci9tdGtfc3ZzLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9yZWd1 bGF0b3IvY29uc3VtZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3Ro ZXJtYWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4NCj4gPiArDQo+ID4gKy8q IHN2cyAxLWxpbmUgc3cgaWQgKi8NCj4gPiArI2RlZmluZSBTVlNfQ1BVX0xJVFRMRSAgICAgICAg ICAgICAgICAgQklUKDApDQo+ID4gKyNkZWZpbmUgU1ZTX0NQVV9CSUcgICAgICAgICAgICAgICAg ICAgIEJJVCgxKQ0KPiA+ICsjZGVmaW5lIFNWU19DQ0kgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCgyKQ0KPiA+ICsjZGVmaW5lIFNWU19HUFUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJJVCgzKQ0KPiA+ICsNCj4gPiArLyogc3ZzIGJhbmsgbW9kZSBzdXBwb3J0ICov DQo+ID4gKyNkZWZpbmUgU1ZTQl9NT0RFX0FMTF9ESVNBQkxFICAgICAgICAgICgwKQ0KPiANCj4g bml0OiBTVlNfQk1PREVfPw0KDQpPaC4gSWYgd2UgYWRkIGJhbmsgd29yZGluZyBsaWtlIFNWU19C eHh4LCBpdCBtaWdodCBjYXVzZSBzb21lIGNvbmZ1c2lvbiB3aGVuIEIgY29tYmluZXMNCndpdGgg b3RoZXIgd29yZHMuIFNvLCBJJ2xsIGtlZXAgU1ZTQiBmb3IgU1ZTIEJhbmsgcmVwcmVzZW50YXRp b24uDQpFLmc6IFNWU19CRENfU0lHTkVEX0JJVCBtaWdodCBsZWFkIHRvIGJlIGV4cGxhaW5lZCBk aWZmZXJlbnRseSAoIlNWUyBiYW5rICsgRENfU0lHTkVEX0JJVCIgb3IgIlNWUyArIEJEQ19TSUdO RURfQklUIikNCiAgICAgLSAiU1ZTIGJhbmsgKyBEQ19TSUdORURfQklUIiBpcyB3aGF0IHdlIHdh bnQgZm9yIG5hbWluZyBTVlNfQkRDX1NJR05FRF9CSVQgYnV0IGl0IG1pZ2h0IGJlIG1pc3VuZGVy c3Rvb2QuDQoNCj4gDQo+ID4gKyNkZWZpbmUgU1ZTQl9NT0RFX0lOSVQwMSAgICAgICAgICAgICAg IEJJVCgxKQ0KPiA+ICsjZGVmaW5lIFNWU0JfTU9ERV9JTklUMDIgICAgICAgICAgICAgICBCSVQo MikNCj4gPiArI2RlZmluZSBTVlNCX01PREVfTU9OICAgICAgICAgICAgICAgICAgQklUKDMpDQo+ ID4gKw0KPiA+ICsvKiBzdnMgYmFuayBpbml0MDEgY29uZGl0aW9uICovDQo+ID4gKyNkZWZpbmUg U1ZTQl9JTklUMDFfVk9MVF9JR05PUkUgICAgICAgICAgICAgICAgQklUKDEpDQo+ID4gKyNkZWZp bmUgU1ZTQl9JTklUMDFfVk9MVF9JTkNfT05MWSAgICAgIEJJVCgyKQ0KPiA+ICsNCj4gPiArLyog c3ZzIGJhbmsgY29tbW9uIHNldHRpbmcgKi8NCj4gPiArI2RlZmluZSBISUdIX1RFTVBfTUFYICAg ICAgICAgICAgICAgICAgKFUzMl9NQVgpDQo+IA0KPiBuaXQ6IFNWU18qDQoNCm9rLiBJIHdpbGwg YWRkIFNWUyBvciBTVlNCIHdoZW4gaXQgcmVmZXJzIHRvIFNWUyBCQU5LLg0KDQo+IA0KPiA+ICsj ZGVmaW5lIFJVTkNPTkZJR19ERUZBVUxUICAgICAgICAgICAgICAoMHg4MDAwMDAwMCkNCj4gDQo+ IEJ0dywgdGhlcmUgaXMgYW55IHB1YmxpYyBkYXRhc2hlZXQgd2hlcmUgSSBjYW4gc2VlIHRob3Nl IGFkZHJlc3NlcyBhbmQNCj4gcmVnaXN0ZXJzIGFuZCBiaXQgZmllbGRzPw0KDQpFeGN1c2UgdXMs IHRoZXJlIGlzIG5vIHB1YmxpYyBkYXRhc2hlZXQuIFdlIGNhbiByZXBseSBpdCBvbiBwYXRjaHdv cmsuIFRoYW5rcy4NCg0KPiANCj4gPiArI2RlZmluZSBEQ19TSUdORURfQklUICAgICAgICAgICAg ICAgICAgKDB4ODAwMCkNCj4gPiArI2RlZmluZSBJTlRFTl9JTklUMHggICAgICAgICAgICAgICAg ICAgKDB4MDAwMDVmMDEpDQo+ID4gKyNkZWZpbmUgSU5URU5fTU9OVk9QRU4gICAgICAgICAgICAg ICAgICgweDAwZmYwMDAwKQ0KPiA+ICsjZGVmaW5lIFNWU0VOX09GRiAgICAgICAgICAgICAgICAg ICAgICAoMHgwKQ0KPiA+ICsjZGVmaW5lIFNWU0VOX01BU0sgICAgICAgICAgICAgICAgICAgICAo MHg3KQ0KPiA+ICsjZGVmaW5lIFNWU0VOX0lOSVQwMSAgICAgICAgICAgICAgICAgICAoMHgxKQ0K PiA+ICsjZGVmaW5lIFNWU0VOX0lOSVQwMiAgICAgICAgICAgICAgICAgICAoMHg1KQ0KPiA+ICsj ZGVmaW5lIFNWU0VOX01PTiAgICAgICAgICAgICAgICAgICAgICAoMHgyKQ0KPiA+ICsjZGVmaW5l IElOVFNUU19NT05WT1AgICAgICAgICAgICAgICAgICAoMHgwMGZmMDAwMCkNCj4gPiArI2RlZmlu ZSBJTlRTVFNfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgICAoMHgxKQ0KPiA+ICsjZGVm aW5lIElOVFNUU19DTEVBTiAgICAgICAgICAgICAgICAgICAoMHgwMGZmZmZmZikNCj4gPiArDQo+ ID4gKyNkZWZpbmUgcHJvY19mb3BzX3J3KG5hbWUpIFwNCj4gPiArICAgICAgIHN0YXRpYyBpbnQg bmFtZSAjIyBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsICAgICAgXA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUgKmZpbGUpICAgICAg ICBcDQo+ID4gKyAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHNpbmdsZV9vcGVu KGZpbGUsIG5hbWUgIyMgX3Byb2Nfc2hvdywgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUERFX0RBVEEoaW5vZGUpKTsgICAgICAgICAgICBcDQo+ID4gKyAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwNCj4gPiArICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgbmFtZSAjIyBfcHJv Y19mb3BzID0geyAgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAucHJvY19vcGVuICAgICAgPSBu YW1lICMjIF9wcm9jX29wZW4sICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgICAgICAgIC5wcm9j X3JlYWQgICAgICA9IHNlcV9yZWFkLCAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAg ICAgICAgICAgLnByb2NfbHNlZWsgICAgID0gc2VxX2xzZWVrLCAgICAgICAgICAgICAgICAgICAg XA0KPiA+ICsgICAgICAgICAgICAgICAucHJvY19yZWxlYXNlICAgPSBzaW5nbGVfcmVsZWFzZSwg ICAgICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgICAgICAgIC5wcm9jX3dyaXRlICAgICA9IG5h bWUgIyMgX3Byb2Nfd3JpdGUsICAgICAgICAgIFwNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4g KyNkZWZpbmUgcHJvY19mb3BzX3JvKG5hbWUpIFwNCj4gPiArICAgICAgIHN0YXRpYyBpbnQgbmFt ZSAjIyBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsICAgICAgXA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGZpbGUgKmZpbGUpICAgICAgICBc DQo+ID4gKyAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHNpbmdsZV9vcGVuKGZp bGUsIG5hbWUgIyMgX3Byb2Nfc2hvdywgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUERFX0RBVEEoaW5vZGUpKTsgICAgICAgICAgICBcDQo+ID4gKyAgICAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN Cj4gPiArICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgbmFtZSAjIyBfcHJvY19m b3BzID0geyAgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAucHJvY19vcGVuICAgICAgPSBuYW1l ICMjIF9wcm9jX29wZW4sICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgICAgICAgIC5wcm9jX3Jl YWQgICAgICA9IHNlcV9yZWFkLCAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAg ICAgICAgLnByb2NfbHNlZWsgICAgID0gc2VxX2xzZWVrLCAgICAgICAgICAgICAgICAgICAgXA0K PiA+ICsgICAgICAgICAgICAgICAucHJvY19yZWxlYXNlICAgPSBzaW5nbGVfcmVsZWFzZSwgICAg ICAgICAgICAgICBcDQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsjZGVmaW5lIHByb2NfZW50 cnkobmFtZSkgICAgICAge19fc3RyaW5naWZ5KG5hbWUpLCAmbmFtZSAjIyBfcHJvY19mb3BzfQ0K PiA+ICsNCj4gDQo+IC9wcm9jIGlzIHVzdWFsbHkgdGhlIG9sZCB3YXkgb2YgZXhwb3J0aW5nIGZp bGVzIHRvIHVzZXJzcGFjZSwgc28NCj4gdW5sZXNzIHlvdSBoYXZlIGEgcmVhbGx5IGdvb2QgcmVh c29uIHVzZSBzeXNmcyBpbnN0ZWFkLCBvciBldmVuDQo+IGJldHRlciwgaWYgaXQgaXMgb25seSBm b3IgZGVidWcgcHVycG9zZXMgdXNlIGRlYnVnZnMuIEFsc28sIHlvdSBzaG91bGQNCj4gZG9jdW1l bnQgdGhlIGVudHJpZXMgaW4gRG9jdW1lbnRhdGlvbi4NCg0KT2suIEknbGwgY2hhbmdlIGl0IHRv IGRlYnVnZnMgYW5kIGNvdWxkIHlvdSBnaXZlIHVzIGFuIGV4YW1wbGUgYWJvdXQgZW50cmllcyBp biBkb2N1bWVudGF0aW9uPw0KV2UgY2FuIGZvbGxvdyB0aGVtLiBUaGFua3MuDQoNCj4gDQo+ID4g K3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXRrX3N2c19sb2NrKTsNCj4gPiArc3RydWN0IG10a19z dnM7DQo+ID4gKw0KPiA+ICtlbnVtIHN2c2JfcGhhc2Ugew0KPiANCj4gbml0OiBtdGtfc3ZzX2Jw aGFzZT8NCg0KZGl0dG8NCg0KPiANCj4gPiArICAgICAgIFNWU0JfUEhBU0VfSU5JVDAxID0gMCwN Cj4gDQo+IG5pdDogU1ZTX0JQSEFTRV8/DQoNCmRpdHRvDQoNCj4gDQo+ID4gKyAgICAgICBTVlNC X1BIQVNFX0lOSVQwMiwNCj4gPiArICAgICAgIFNWU0JfUEhBU0VfTU9OLA0KPiA+ICsgICAgICAg U1ZTQl9QSEFTRV9FUlJPUiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2VudW0gcmVnX2luZGV4IHsN Cj4gDQo+IG5pdDogc3ZzX3JlZ19pbmRleD8NCg0KT0suIFRoYW5rcy4NCg0KPiANCj4gPiArICAg ICAgIFRFTVBNT05DVEwwID0gMCwNCj4gPiArICAgICAgIFRFTVBNT05DVEwxLA0KPiA+ICsgICAg ICAgVEVNUE1PTkNUTDIsDQo+ID4gKyAgICAgICBURU1QTU9OSU5ULA0KPiA+ICsgICAgICAgVEVN UE1PTklOVFNUUywNCj4gPiArICAgICAgIFRFTVBNT05JREVUMCwNCj4gPiArICAgICAgIFRFTVBN T05JREVUMSwNCj4gPiArICAgICAgIFRFTVBNT05JREVUMiwNCj4gPiArICAgICAgIFRFTVBIMk5U SFJFLA0KPiA+ICsgICAgICAgVEVNUEhUSFJFLA0KPiA+ICsgICAgICAgVEVNUENUSFJFLA0KPiA+ ICsgICAgICAgVEVNUE9GRlNFVEgsDQo+ID4gKyAgICAgICBURU1QT0ZGU0VUTCwNCj4gPiArICAg ICAgIFRFTVBNU1JDVEwwLA0KPiA+ICsgICAgICAgVEVNUE1TUkNUTDEsDQo+ID4gKyAgICAgICBU RU1QQUhCUE9MTCwNCj4gPiArICAgICAgIFRFTVBBSEJUTywNCj4gPiArICAgICAgIFRFTVBBRENQ TlAwLA0KPiA+ICsgICAgICAgVEVNUEFEQ1BOUDEsDQo+ID4gKyAgICAgICBURU1QQURDUE5QMiwN Cj4gPiArICAgICAgIFRFTVBBRENNVVgsDQo+ID4gKyAgICAgICBURU1QQURDRVhULA0KPiA+ICsg ICAgICAgVEVNUEFEQ0VYVDEsDQo+ID4gKyAgICAgICBURU1QQURDRU4sDQo+ID4gKyAgICAgICBU RU1QUE5QTVVYQUREUiwNCj4gPiArICAgICAgIFRFTVBBRENNVVhBRERSLA0KPiA+ICsgICAgICAg VEVNUEFEQ0VYVEFERFIsDQo+ID4gKyAgICAgICBURU1QQURDRVhUMUFERFIsDQo+ID4gKyAgICAg ICBURU1QQURDRU5BRERSLA0KPiA+ICsgICAgICAgVEVNUEFEQ1ZBTElEQUREUiwNCj4gPiArICAg ICAgIFRFTVBBRENWT0xUQUREUiwNCj4gPiArICAgICAgIFRFTVBSRENUUkwsDQo+ID4gKyAgICAg ICBURU1QQURDVkFMSURNQVNLLA0KPiA+ICsgICAgICAgVEVNUEFEQ1ZPTFRBR0VTSElGVCwNCj4g PiArICAgICAgIFRFTVBBRENXUklURUNUUkwsDQo+ID4gKyAgICAgICBURU1QTVNSMCwNCj4gPiAr ICAgICAgIFRFTVBNU1IxLA0KPiA+ICsgICAgICAgVEVNUE1TUjIsDQo+ID4gKyAgICAgICBURU1Q QURDSEFERFIsDQo+ID4gKyAgICAgICBURU1QSU1NRDAsDQo+ID4gKyAgICAgICBURU1QSU1NRDEs DQo+ID4gKyAgICAgICBURU1QSU1NRDIsDQo+ID4gKyAgICAgICBURU1QTU9OSURFVDMsDQo+ID4g KyAgICAgICBURU1QQURDUE5QMywNCj4gPiArICAgICAgIFRFTVBNU1IzLA0KPiA+ICsgICAgICAg VEVNUElNTUQzLA0KPiA+ICsgICAgICAgVEVNUFBST1RDVEwsDQo+ID4gKyAgICAgICBURU1QUFJP VFRBLA0KPiA+ICsgICAgICAgVEVNUFBST1RUQiwNCj4gPiArICAgICAgIFRFTVBQUk9UVEMsDQo+ ID4gKyAgICAgICBURU1QU1BBUkUwLA0KPiA+ICsgICAgICAgVEVNUFNQQVJFMSwNCj4gPiArICAg ICAgIFRFTVBTUEFSRTIsDQo+ID4gKyAgICAgICBURU1QU1BBUkUzLA0KPiA+ICsgICAgICAgVEVN UE1TUjBfMSwNCj4gPiArICAgICAgIFRFTVBNU1IxXzEsDQo+ID4gKyAgICAgICBURU1QTVNSMl8x LA0KPiA+ICsgICAgICAgVEVNUE1TUjNfMSwNCj4gPiArICAgICAgIERFU0NIQVIsDQo+ID4gKyAg ICAgICBURU1QQ0hBUiwNCj4gPiArICAgICAgIERFVENIQVIsDQo+ID4gKyAgICAgICBBR0VDSEFS LA0KPiA+ICsgICAgICAgRENDT05GSUcsDQo+ID4gKyAgICAgICBBR0VDT05GSUcsDQo+ID4gKyAg ICAgICBGUkVRUENUMzAsDQo+ID4gKyAgICAgICBGUkVRUENUNzQsDQo+ID4gKyAgICAgICBMSU1J VFZBTFMsDQo+ID4gKyAgICAgICBWQk9PVCwNCj4gPiArICAgICAgIERFVFdJTkRPVywNCj4gPiAr ICAgICAgIENPTkZJRywNCj4gPiArICAgICAgIFRTQ0FMQ1MsDQo+ID4gKyAgICAgICBSVU5DT05G SUcsDQo+ID4gKyAgICAgICBTVlNFTiwNCj4gPiArICAgICAgIElOSVQyVkFMUywNCj4gPiArICAg ICAgIERDVkFMVUVTLA0KPiA+ICsgICAgICAgQUdFVkFMVUVTLA0KPiA+ICsgICAgICAgVk9QMzAs DQo+ID4gKyAgICAgICBWT1A3NCwNCj4gPiArICAgICAgIFRFTVAsDQo+ID4gKyAgICAgICBJTlRT VFMsDQo+ID4gKyAgICAgICBJTlRTVFNSQVcsDQo+ID4gKyAgICAgICBJTlRFTiwNCj4gPiArICAg ICAgIENIS0lOVCwNCj4gPiArICAgICAgIENIS1NISUZULA0KPiA+ICsgICAgICAgU1RBVFVTLA0K PiA+ICsgICAgICAgVkRFU0lHTjMwLA0KPiA+ICsgICAgICAgVkRFU0lHTjc0LA0KPiA+ICsgICAg ICAgRFZUMzAsDQo+ID4gKyAgICAgICBEVlQ3NCwNCj4gPiArICAgICAgIEFHRUNPVU5ULA0KPiA+ ICsgICAgICAgU01TVEFURTAsDQo+ID4gKyAgICAgICBTTVNUQVRFMSwNCj4gPiArICAgICAgIENU TDAsDQo+ID4gKyAgICAgICBERVNERVRTRUMsDQo+ID4gKyAgICAgICBURU1QQUdFU0VDLA0KPiA+ ICsgICAgICAgQ1RSTFNQQVJFMCwNCj4gPiArICAgICAgIENUUkxTUEFSRTEsDQo+ID4gKyAgICAg ICBDVFJMU1BBUkUyLA0KPiA+ICsgICAgICAgQ1RSTFNQQVJFMywNCj4gPiArICAgICAgIENPUkVT RUwsDQo+ID4gKyAgICAgICBUSEVSTUlOVFNULA0KPiA+ICsgICAgICAgSU5UU1QsDQo+ID4gKyAg ICAgICBUSFNUQUdFMFNULA0KPiA+ICsgICAgICAgVEhTVEFHRTFTVCwNCj4gPiArICAgICAgIFRI U1RBR0UyU1QsDQo+ID4gKyAgICAgICBUSEFIQlNUMCwNCj4gPiArICAgICAgIFRIQUhCU1QxLA0K PiA+ICsgICAgICAgU1BBUkUwLA0KPiA+ICsgICAgICAgU1BBUkUxLA0KPiA+ICsgICAgICAgU1BB UkUyLA0KPiA+ICsgICAgICAgU1BBUkUzLA0KPiA+ICsgICAgICAgVEhTTFBFVkVCLA0KPiA+ICsg ICAgICAgcmVnX251bSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCB1MzIgc3Zz X3JlZ3NfdjJbXSA9IHsNCj4gDQo+IElzIHRoaXMgU29DIHNwZWNpZmljIG9yIHNoYXJlZCBiZXR3 ZWVuIFNvQ3M/DQoNClNoYXJlZCBiZXR3ZWVuIFNvQ3MuIFNvbWUgU1ZTIGluIE1USyBTb0NzIHVz ZSB2MiByZWdpc3RlciBtYXAuDQoNCj4gDQo+ID4gKyAgICAgICBbVEVNUE1PTkNUTDBdICAgICAg ICAgICA9IDB4MDAwLA0KPiA+ICsgICAgICAgW1RFTVBNT05DVEwxXSAgICAgICAgICAgPSAweDAw NCwNCj4gPiArICAgICAgIFtURU1QTU9OQ1RMMl0gICAgICAgICAgID0gMHgwMDgsDQo+ID4gKyAg ICAgICBbVEVNUE1PTklOVF0gICAgICAgICAgICA9IDB4MDBjLA0KPiA+ICsgICAgICAgW1RFTVBN T05JTlRTVFNdICAgICAgICAgPSAweDAxMCwNCj4gPiArICAgICAgIFtURU1QTU9OSURFVDBdICAg ICAgICAgID0gMHgwMTQsDQo+ID4gKyAgICAgICBbVEVNUE1PTklERVQxXSAgICAgICAgICA9IDB4 MDE4LA0KPiA+ICsgICAgICAgW1RFTVBNT05JREVUMl0gICAgICAgICAgPSAweDAxYywNCj4gPiAr ICAgICAgIFtURU1QSDJOVEhSRV0gICAgICAgICAgID0gMHgwMjQsDQo+ID4gKyAgICAgICBbVEVN UEhUSFJFXSAgICAgICAgICAgICA9IDB4MDI4LA0KPiA+ICsgICAgICAgW1RFTVBDVEhSRV0gICAg ICAgICAgICAgPSAweDAyYywNCj4gPiArICAgICAgIFtURU1QT0ZGU0VUSF0gICAgICAgICAgID0g MHgwMzAsDQo+ID4gKyAgICAgICBbVEVNUE9GRlNFVExdICAgICAgICAgICA9IDB4MDM0LA0KPiA+ ICsgICAgICAgW1RFTVBNU1JDVEwwXSAgICAgICAgICAgPSAweDAzOCwNCj4gPiArICAgICAgIFtU RU1QTVNSQ1RMMV0gICAgICAgICAgID0gMHgwM2MsDQo+ID4gKyAgICAgICBbVEVNUEFIQlBPTExd ICAgICAgICAgICA9IDB4MDQwLA0KPiA+ICsgICAgICAgW1RFTVBBSEJUT10gICAgICAgICAgICAg PSAweDA0NCwNCj4gPiArICAgICAgIFtURU1QQURDUE5QMF0gICAgICAgICAgID0gMHgwNDgsDQo+ ID4gKyAgICAgICBbVEVNUEFEQ1BOUDFdICAgICAgICAgICA9IDB4MDRjLA0KPiA+ICsgICAgICAg W1RFTVBBRENQTlAyXSAgICAgICAgICAgPSAweDA1MCwNCj4gPiArICAgICAgIFtURU1QQURDTVVY XSAgICAgICAgICAgID0gMHgwNTQsDQo+ID4gKyAgICAgICBbVEVNUEFEQ0VYVF0gICAgICAgICAg ICA9IDB4MDU4LA0KPiA+ICsgICAgICAgW1RFTVBBRENFWFQxXSAgICAgICAgICAgPSAweDA1YywN Cj4gPiArICAgICAgIFtURU1QQURDRU5dICAgICAgICAgICAgID0gMHgwNjAsDQo+ID4gKyAgICAg ICBbVEVNUFBOUE1VWEFERFJdICAgICAgICA9IDB4MDY0LA0KPiA+ICsgICAgICAgW1RFTVBBRENN VVhBRERSXSAgICAgICAgPSAweDA2OCwNCj4gPiArICAgICAgIFtURU1QQURDRVhUQUREUl0gICAg ICAgID0gMHgwNmMsDQo+ID4gKyAgICAgICBbVEVNUEFEQ0VYVDFBRERSXSAgICAgICA9IDB4MDcw LA0KPiA+ICsgICAgICAgW1RFTVBBRENFTkFERFJdICAgICAgICAgPSAweDA3NCwNCj4gPiArICAg ICAgIFtURU1QQURDVkFMSURBRERSXSAgICAgID0gMHgwNzgsDQo+ID4gKyAgICAgICBbVEVNUEFE Q1ZPTFRBRERSXSAgICAgICA9IDB4MDdjLA0KPiA+ICsgICAgICAgW1RFTVBSRENUUkxdICAgICAg ICAgICAgPSAweDA4MCwNCj4gPiArICAgICAgIFtURU1QQURDVkFMSURNQVNLXSAgICAgID0gMHgw ODQsDQo+ID4gKyAgICAgICBbVEVNUEFEQ1ZPTFRBR0VTSElGVF0gICA9IDB4MDg4LA0KPiA+ICsg ICAgICAgW1RFTVBBRENXUklURUNUUkxdICAgICAgPSAweDA4YywNCj4gPiArICAgICAgIFtURU1Q TVNSMF0gICAgICAgICAgICAgID0gMHgwOTAsDQo+ID4gKyAgICAgICBbVEVNUE1TUjFdICAgICAg ICAgICAgICA9IDB4MDk0LA0KPiA+ICsgICAgICAgW1RFTVBNU1IyXSAgICAgICAgICAgICAgPSAw eDA5OCwNCj4gPiArICAgICAgIFtURU1QQURDSEFERFJdICAgICAgICAgID0gMHgwOWMsDQo+ID4g KyAgICAgICBbVEVNUElNTUQwXSAgICAgICAgICAgICA9IDB4MGEwLA0KPiA+ICsgICAgICAgW1RF TVBJTU1EMV0gICAgICAgICAgICAgPSAweDBhNCwNCj4gPiArICAgICAgIFtURU1QSU1NRDJdICAg ICAgICAgICAgID0gMHgwYTgsDQo+ID4gKyAgICAgICBbVEVNUE1PTklERVQzXSAgICAgICAgICA9 IDB4MGIwLA0KPiA+ICsgICAgICAgW1RFTVBBRENQTlAzXSAgICAgICAgICAgPSAweDBiNCwNCj4g PiArICAgICAgIFtURU1QTVNSM10gICAgICAgICAgICAgID0gMHgwYjgsDQo+ID4gKyAgICAgICBb VEVNUElNTUQzXSAgICAgICAgICAgICA9IDB4MGJjLA0KPiA+ICsgICAgICAgW1RFTVBQUk9UQ1RM XSAgICAgICAgICAgPSAweDBjMCwNCj4gPiArICAgICAgIFtURU1QUFJPVFRBXSAgICAgICAgICAg ID0gMHgwYzQsDQo+ID4gKyAgICAgICBbVEVNUFBST1RUQl0gICAgICAgICAgICA9IDB4MGM4LA0K PiA+ICsgICAgICAgW1RFTVBQUk9UVENdICAgICAgICAgICAgPSAweDBjYywNCj4gPiArICAgICAg IFtURU1QU1BBUkUwXSAgICAgICAgICAgID0gMHgwZjAsDQo+ID4gKyAgICAgICBbVEVNUFNQQVJF MV0gICAgICAgICAgICA9IDB4MGY0LA0KPiA+ICsgICAgICAgW1RFTVBTUEFSRTJdICAgICAgICAg ICAgPSAweDBmOCwNCj4gPiArICAgICAgIFtURU1QU1BBUkUzXSAgICAgICAgICAgID0gMHgwZmMs DQo+ID4gKyAgICAgICBbVEVNUE1TUjBfMV0gICAgICAgICAgICA9IDB4MTkwLA0KPiA+ICsgICAg ICAgW1RFTVBNU1IxXzFdICAgICAgICAgICAgPSAweDE5NCwNCj4gPiArICAgICAgIFtURU1QTVNS Ml8xXSAgICAgICAgICAgID0gMHgxOTgsDQo+ID4gKyAgICAgICBbVEVNUE1TUjNfMV0gICAgICAg ICAgICA9IDB4MWI4LA0KPiA+ICsgICAgICAgW0RFU0NIQVJdICAgICAgICAgICAgICAgPSAweGMw MCwNCj4gPiArICAgICAgIFtURU1QQ0hBUl0gICAgICAgICAgICAgID0gMHhjMDQsDQo+ID4gKyAg ICAgICBbREVUQ0hBUl0gICAgICAgICAgICAgICA9IDB4YzA4LA0KPiA+ICsgICAgICAgW0FHRUNI QVJdICAgICAgICAgICAgICAgPSAweGMwYywNCj4gPiArICAgICAgIFtEQ0NPTkZJR10gICAgICAg ICAgICAgID0gMHhjMTAsDQo+ID4gKyAgICAgICBbQUdFQ09ORklHXSAgICAgICAgICAgICA9IDB4 YzE0LA0KPiA+ICsgICAgICAgW0ZSRVFQQ1QzMF0gICAgICAgICAgICAgPSAweGMxOCwNCj4gPiAr ICAgICAgIFtGUkVRUENUNzRdICAgICAgICAgICAgID0gMHhjMWMsDQo+ID4gKyAgICAgICBbTElN SVRWQUxTXSAgICAgICAgICAgICA9IDB4YzIwLA0KPiA+ICsgICAgICAgW1ZCT09UXSAgICAgICAg ICAgICAgICAgPSAweGMyNCwNCj4gPiArICAgICAgIFtERVRXSU5ET1ddICAgICAgICAgICAgID0g MHhjMjgsDQo+ID4gKyAgICAgICBbQ09ORklHXSAgICAgICAgICAgICAgICA9IDB4YzJjLA0KPiA+ ICsgICAgICAgW1RTQ0FMQ1NdICAgICAgICAgICAgICAgPSAweGMzMCwNCj4gPiArICAgICAgIFtS VU5DT05GSUddICAgICAgICAgICAgID0gMHhjMzQsDQo+ID4gKyAgICAgICBbU1ZTRU5dICAgICAg ICAgICAgICAgICA9IDB4YzM4LA0KPiA+ICsgICAgICAgW0lOSVQyVkFMU10gICAgICAgICAgICAg PSAweGMzYywNCj4gPiArICAgICAgIFtEQ1ZBTFVFU10gICAgICAgICAgICAgID0gMHhjNDAsDQo+ ID4gKyAgICAgICBbQUdFVkFMVUVTXSAgICAgICAgICAgICA9IDB4YzQ0LA0KPiA+ICsgICAgICAg W1ZPUDMwXSAgICAgICAgICAgICAgICAgPSAweGM0OCwNCj4gPiArICAgICAgIFtWT1A3NF0gICAg ICAgICAgICAgICAgID0gMHhjNGMsDQo+ID4gKyAgICAgICBbVEVNUF0gICAgICAgICAgICAgICAg ICA9IDB4YzUwLA0KPiA+ICsgICAgICAgW0lOVFNUU10gICAgICAgICAgICAgICAgPSAweGM1NCwN Cj4gPiArICAgICAgIFtJTlRTVFNSQVddICAgICAgICAgICAgID0gMHhjNTgsDQo+ID4gKyAgICAg ICBbSU5URU5dICAgICAgICAgICAgICAgICA9IDB4YzVjLA0KPiA+ICsgICAgICAgW0NIS0lOVF0g ICAgICAgICAgICAgICAgPSAweGM2MCwNCj4gPiArICAgICAgIFtDSEtTSElGVF0gICAgICAgICAg ICAgID0gMHhjNjQsDQo+ID4gKyAgICAgICBbU1RBVFVTXSAgICAgICAgICAgICAgICA9IDB4YzY4 LA0KPiA+ICsgICAgICAgW1ZERVNJR04zMF0gICAgICAgICAgICAgPSAweGM2YywNCj4gPiArICAg ICAgIFtWREVTSUdONzRdICAgICAgICAgICAgID0gMHhjNzAsDQo+ID4gKyAgICAgICBbRFZUMzBd ICAgICAgICAgICAgICAgICA9IDB4Yzc0LA0KPiA+ICsgICAgICAgW0RWVDc0XSAgICAgICAgICAg ICAgICAgPSAweGM3OCwNCj4gPiArICAgICAgIFtBR0VDT1VOVF0gICAgICAgICAgICAgID0gMHhj N2MsDQo+ID4gKyAgICAgICBbU01TVEFURTBdICAgICAgICAgICAgICA9IDB4YzgwLA0KPiA+ICsg ICAgICAgW1NNU1RBVEUxXSAgICAgICAgICAgICAgPSAweGM4NCwNCj4gPiArICAgICAgIFtDVEww XSAgICAgICAgICAgICAgICAgID0gMHhjODgsDQo+ID4gKyAgICAgICBbREVTREVUU0VDXSAgICAg ICAgICAgICA9IDB4Y2UwLA0KPiA+ICsgICAgICAgW1RFTVBBR0VTRUNdICAgICAgICAgICAgPSAw eGNlNCwNCj4gPiArICAgICAgIFtDVFJMU1BBUkUwXSAgICAgICAgICAgID0gMHhjZjAsDQo+ID4g KyAgICAgICBbQ1RSTFNQQVJFMV0gICAgICAgICAgICA9IDB4Y2Y0LA0KPiA+ICsgICAgICAgW0NU UkxTUEFSRTJdICAgICAgICAgICAgPSAweGNmOCwNCj4gPiArICAgICAgIFtDVFJMU1BBUkUzXSAg ICAgICAgICAgID0gMHhjZmMsDQo+ID4gKyAgICAgICBbQ09SRVNFTF0gICAgICAgICAgICAgICA9 IDB4ZjAwLA0KPiA+ICsgICAgICAgW1RIRVJNSU5UU1RdICAgICAgICAgICAgPSAweGYwNCwNCj4g PiArICAgICAgIFtJTlRTVF0gICAgICAgICAgICAgICAgID0gMHhmMDgsDQo+ID4gKyAgICAgICBb VEhTVEFHRTBTVF0gICAgICAgICAgICA9IDB4ZjBjLA0KPiA+ICsgICAgICAgW1RIU1RBR0UxU1Rd ICAgICAgICAgICAgPSAweGYxMCwNCj4gPiArICAgICAgIFtUSFNUQUdFMlNUXSAgICAgICAgICAg ID0gMHhmMTQsDQo+ID4gKyAgICAgICBbVEhBSEJTVDBdICAgICAgICAgICAgICA9IDB4ZjE4LA0K PiA+ICsgICAgICAgW1RIQUhCU1QxXSAgICAgICAgICAgICAgPSAweGYxYywNCj4gPiArICAgICAg IFtTUEFSRTBdICAgICAgICAgICAgICAgID0gMHhmMjAsDQo+ID4gKyAgICAgICBbU1BBUkUxXSAg ICAgICAgICAgICAgICA9IDB4ZjI0LA0KPiA+ICsgICAgICAgW1NQQVJFMl0gICAgICAgICAgICAg ICAgPSAweGYyOCwNCj4gPiArICAgICAgIFtTUEFSRTNdICAgICAgICAgICAgICAgID0gMHhmMmMs DQo+ID4gKyAgICAgICBbVEhTTFBFVkVCXSAgICAgICAgICAgICA9IDB4ZjMwLA0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RydWN0IHRoZXJtYWxfcGFyYW1ldGVyIHsNCj4gDQo+IEluIGdlbmVyYWws IG5vdCBvbmx5IGluIHRoaXMgc3RydWN0LCB3b3VsZCBiZSBnb29kIGhhdmUgc29tZQ0KPiBkb2N1 bWVudGF0aW9uIHRvIGhhdmUgYSBiZXR0ZXIgdW5kZXN0YW5kaW5nIG9mIHRoZSBmaWVsZHMuIFRo YXQgbWFrZXMNCj4gdGhlIGpvYiBvZiB0aGUgcmV2aWV3ZXIgYSBiaXQgZWFzaWVyLg0KDQpPay4g Q291bGQgeW91IHNoYXJlIGEgZG9jdW1lbnRhdGlvbiBleGFtcGxlIHRvIHVzPyBXZSdsbCBzaGFy ZSB0aGUNCmluZm9ybWF0aW9uIGFzIG11Y2ggYXMgd2UgY2FuLiBUaGFua3MgYSBsb3QuDQoNCj4g DQo+ID4gKyAgICAgICBpbnQgYWRjX2dlX3Q7DQo+ID4gKyAgICAgICBpbnQgYWRjX29lX3Q7DQo+ ID4gKyAgICAgICBpbnQgZ2U7DQo+ID4gKyAgICAgICBpbnQgb2U7DQo+ID4gKyAgICAgICBpbnQg Z2FpbjsNCj4gPiArICAgICAgIGludCBvX3Z0c2FiYjsNCj4gPiArICAgICAgIGludCBvX3Z0c21j dTE7DQo+ID4gKyAgICAgICBpbnQgb192dHNtY3UyOw0KPiA+ICsgICAgICAgaW50IG9fdnRzbWN1 MzsNCj4gPiArICAgICAgIGludCBvX3Z0c21jdTQ7DQo+ID4gKyAgICAgICBpbnQgb192dHNtY3U1 Ow0KPiA+ICsgICAgICAgaW50IGRlZ2NfY2FsaTsNCj4gPiArICAgICAgIGludCBhZGNfY2FsaV9l bl90Ow0KPiA+ICsgICAgICAgaW50IG9fc2xvcGU7DQo+ID4gKyAgICAgICBpbnQgb19zbG9wZV9z aWduOw0KPiA+ICsgICAgICAgaW50IHRzX2lkOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0 IHN2c19iYW5rX29wcyB7DQo+ID4gKyAgICAgICB2b2lkICgqc2V0X2ZyZXFzX3BjdCkoc3RydWN0 IG10a19zdnMgKnN2cyk7DQo+ID4gKyAgICAgICB2b2lkICgqZ2V0X3ZvcHMpKHN0cnVjdCBtdGtf c3ZzICpzdnMpOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHN2c19iYW5rIHsNCj4gPiAr ICAgICAgIHN0cnVjdCBzdnNfYmFua19vcHMgKm9wczsNCj4gPiArICAgICAgIHN0cnVjdCBjb21w bGV0aW9uIGluaXRfY29tcGxldGlvbjsNCj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldjsN Cj4gPiArICAgICAgIHN0cnVjdCByZWd1bGF0b3IgKmJ1Y2s7DQo+ID4gKyAgICAgICBzdHJ1Y3Qg bXV0ZXggbG9jazsgICAgICAvKiBMb2NrIHRvIHByb3RlY3QgdXBkYXRlIHZvbHRhZ2UgcHJvY2Vz cyAqLw0KPiA+ICsgICAgICAgYm9vbCBzdXNwZW5kZWQ7DQo+ID4gKyAgICAgICBib29sIG10Y21v c19yZXF1ZXN0Ow0KPiA+ICsgICAgICAgczMyIHZvbHRfb2Zmc2V0Ow0KPiA+ICsgICAgICAgdTMy IG1vZGVfc3VwcG9ydDsNCj4gPiArICAgICAgIHUzMiBvcHBfZnJlcXNbMTZdOw0KPiA+ICsgICAg ICAgdTMyIGZyZXFzX3BjdFsxNl07DQo+ID4gKyAgICAgICB1MzIgb3BwX3ZvbHRzWzE2XTsNCj4g PiArICAgICAgIHUzMiBpbml0MDJfdm9sdHNbMTZdOw0KPiA+ICsgICAgICAgdTMyIHZvbHRzWzE2 XTsNCj4gPiArICAgICAgIHUzMiByZWdfZGF0YVszXVtyZWdfbnVtXTsNCj4gPiArICAgICAgIHUz MiBmcmVxX2Jhc2U7DQo+ID4gKyAgICAgICB1MzIgdmJvb3Q7DQo+ID4gKyAgICAgICB1MzIgdm9s dF9zdGVwOw0KPiA+ICsgICAgICAgdTMyIHZvbHRfYmFzZTsNCj4gPiArICAgICAgIHUzMiBpbml0 MDFfdm9sdF9mbGFnOw0KPiA+ICsgICAgICAgdTMyIHBoYXNlOw0KPiA+ICsgICAgICAgdTMyIHZt YXg7DQo+ID4gKyAgICAgICB1MzIgdm1pbjsNCj4gPiArICAgICAgIHUzMiBidHM7DQo+ID4gKyAg ICAgICB1MzIgbXRzOw0KPiA+ICsgICAgICAgdTMyIGJkZXM7DQo+ID4gKyAgICAgICB1MzIgbWRl czsNCj4gPiArICAgICAgIHUzMiBtdGRlczsNCj4gPiArICAgICAgIHUzMiBkY2JkZXQ7DQo+ID4g KyAgICAgICB1MzIgZGNtZGV0Ow0KPiA+ICsgICAgICAgdTMyIGR0aGk7DQo+ID4gKyAgICAgICB1 MzIgZHRsbzsNCj4gPiArICAgICAgIHUzMiBkZXRfd2luZG93Ow0KPiA+ICsgICAgICAgdTMyIGRl dF9tYXg7DQo+ID4gKyAgICAgICB1MzIgYWdlX2NvbmZpZzsNCj4gPiArICAgICAgIHUzMiBhZ2Vf dm9mZnNldF9pbjsNCj4gPiArICAgICAgIHUzMiBhZ2VtOw0KPiA+ICsgICAgICAgdTMyIGRjX2Nv bmZpZzsNCj4gPiArICAgICAgIHUzMiBkY192b2Zmc2V0X2luOw0KPiA+ICsgICAgICAgdTMyIGR2 dF9maXhlZDsNCj4gPiArICAgICAgIHUzMiB2Y287DQo+ID4gKyAgICAgICB1MzIgY2hrX3NoaWZ0 Ow0KPiA+ICsgICAgICAgdTMyIHN2c190ZW1wOw0KPiA+ICsgICAgICAgdTMyIHVwcGVyX3RlbXBf Ym91bmQ7DQo+ID4gKyAgICAgICB1MzIgbG93ZXJfdGVtcF9ib3VuZDsNCj4gPiArICAgICAgIHUz MiBoaWdoX3RlbXBfdGhyZWFzaG9sZDsNCj4gPiArICAgICAgIHUzMiBoaWdoX3RlbXBfb2Zmc2V0 Ow0KPiA+ICsgICAgICAgdTMyIGxvd190ZW1wX3RocmVhc2hvbGQ7DQo+ID4gKyAgICAgICB1MzIg bG93X3RlbXBfb2Zmc2V0Ow0KPiA+ICsgICAgICAgdTMyIGNvcmVfc2VsOw0KPiA+ICsgICAgICAg dTMyIG9wcF9jb3VudDsNCj4gPiArICAgICAgIHUzMiBpbnRfc3Q7DQo+ID4gKyAgICAgICB1MzIg c3lzdGVtY2xrX2VuOw0KPiA+ICsgICAgICAgdTMyIHN3X2lkOw0KPiA+ICsgICAgICAgdTMyIGJh bmtfaWQ7DQo+ID4gKyAgICAgICB1MzIgY3RsMDsNCj4gPiArICAgICAgIHU4ICpvZl9jb21wYXRp YmxlOw0KPiA+ICsgICAgICAgdTggKm5hbWU7DQo+ID4gKyAgICAgICB1OCAqdHpvbmVfbmFtZTsN Cj4gPiArICAgICAgIHU4ICpidWNrX25hbWU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qg c3ZzX3BsYXRmb3JtIHsNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqYmFua3M7DQo+ID4g KyAgICAgICBib29sICgqZWZ1c2VfcGFyc2luZykoc3RydWN0IG10a19zdnMgKnN2cyk7DQo+ID4g KyAgICAgICBib29sIGZha2VfZWZ1c2U7DQo+ID4gKyAgICAgICBib29sIG5lZWRfaHdfcmVzZXQ7 DQo+ID4gKyAgICAgICBjb25zdCB1MzIgKnJlZ3M7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25n IGlycWZsYWdzOw0KPiA+ICsgICAgICAgdTMyIGJhbmtfbnVtOw0KPiA+ICsgICAgICAgdTMyIGVm dXNlX251bTsNCj4gPiArICAgICAgIHUzMiBlZnVzZV9jaGVjazsNCj4gPiArICAgICAgIHUzMiB0 aGVybWFsX2VmdXNlX251bTsNCj4gPiArICAgICAgIHU4ICpuYW1lOw0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RydWN0IG10a19zdnMgew0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHN2c19wbGF0 Zm9ybSAqcGxhdGZvcm07DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKmJhbms7DQo+ID4g KyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKyAgICAgICB2b2lkIF9faW9tZW0gKmJh c2U7DQo+ID4gKyAgICAgICBzdHJ1Y3QgY2xrICptYWluX2NsazsNCj4gPiArICAgICAgIHUzMiAq ZWZ1c2U7DQo+ID4gKyAgICAgICB1MzIgKnRoZXJtYWxfZWZ1c2U7DQo+ID4gK307DQo+ID4gKw0K PiA+ICt1bnNpZ25lZCBsb25nIGNsYWltX210a19zdnNfbG9jayh2b2lkKQ0KPiA+ICsgICAgICAg X19hY3F1aXJlcygmbXRrX3N2c19sb2NrKQ0KPiA+ICt7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiA+ICsNCj4gPiArICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZtdGtfc3Zz X2xvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gZmxhZ3M7DQo+ID4gK30N Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoY2xhaW1fbXRrX3N2c19sb2NrKTsNCj4gDQo+IElzIHRo aXMgdXNlZCBmb3IgYW4gZXh0ZXJuYWwgbW9kdWxlPyBBRkFJQ1Mgbm8sIHNvIG5vIG5lZWQgdG8g ZXhwb3J0DQo+IGFuZCB5b3UgY2FuIHJlcGxhY2UgZGlyZWN0bHkgdGhlIGNhbGxlcnMgb2YgdGhp cyB3aXRoIHRoZQ0KPiBzcGluX2xvY2tfaXJxc2F2ZSBkaXJlY3RseS4gSWYgeW91IHBsYW4gdG8g dXNlIHRoaXMgaW4gdGhlIGZ1dHVyZSBmb3INCj4gb3RoZXIgbW9kdWxlcywgZXhwb3J0IHdoZW4g aXMgcmVhbGx5IG5lZWRlZCB0byBiZSBleHBvcnRlZC4NCg0KVGhpcyBleHBvcnQgQVBJIGlzIHVz ZWQgYnkgbXQ4MTgzIHRoZXJtYWwuDQpodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNo LzExNDUyODM1Lw0KDQo+IA0KPiA+ICsNCj4gPiArdm9pZCByZWxlYXNlX210a19zdnNfbG9jayh1 bnNpZ25lZCBsb25nIGZsYWdzKQ0KPiA+ICsgICAgICAgX19yZWxlYXNlcygmbXRrX3N2c19sb2Nr KQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtdGtfc3ZzX2xv Y2ssIGZsYWdzKTsNCj4gPiArfQ0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChyZWxlYXNlX210a19z dnNfbG9jayk7DQo+ID4gKw0KPiANCj4gZGl0dG8NCj4gDQo+ID4gK3N0YXRpYyB1MzIgcGVyY2Vu dCh1MzIgbnVtZXJhdG9yLCB1MzIgZGVub21pbmF0b3IpDQo+ID4gK3sNCj4gPiArICAgICAgIHUz MiBwY3Q7DQo+ID4gKw0KPiA+ICsgICAgICAgLyogSWYgbm90IGRpdmlkZSAxMDAwLCAibnVtZXJh dG9yICogMTAwIiB3b3VsZCBiZSBkYXRhIG92ZXJmbG93LiAqLw0KPiA+ICsgICAgICAgbnVtZXJh dG9yIC89IDEwMDA7DQo+ID4gKyAgICAgICBkZW5vbWluYXRvciAvPSAxMDAwOw0KPiA+ICsgICAg ICAgcGN0ID0gKChudW1lcmF0b3IgKiAxMDApICsgZGVub21pbmF0b3IgLSAxKSAvIGRlbm9taW5h dG9yOw0KPiA+ICsgICAgICAgcGN0ICY9IEdFTk1BU0soNywgMCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgcmV0dXJuIHBjdDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUzMiBzdnNfcmVhZGwo c3RydWN0IG10a19zdnMgKnN2cywgZW51bSByZWdfaW5kZXggcmdfaSkNCj4gPiArew0KPiA+ICsg ICAgICAgcmV0dXJuIHJlYWRsKHN2cy0+YmFzZSArIHN2cy0+cGxhdGZvcm0tPnJlZ3NbcmdfaV0p Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzdnNfd3JpdGVsKHN0cnVjdCBtdGtf c3ZzICpzdnMsIHUzMiB2YWwsIGVudW0gcmVnX2luZGV4IHJnX2kpDQo+ID4gK3sNCj4gPiArICAg ICAgIHdyaXRlbCh2YWwsIHN2cy0+YmFzZSArIHN2cy0+cGxhdGZvcm0tPnJlZ3NbcmdfaV0pOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzdnNfc3dpdGNoX2Jhbmsoc3RydWN0IG10 a19zdnMgKnN2cykNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNiID0g c3ZzLT5iYW5rOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzLCBzdnNiLT5jb3Jl X3NlbCwgQ09SRVNFTCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgc3ZzYl92b2x0 X3RvX29wcF92b2x0KHUzMiBzdnNiX3ZvbHQsIHUzMiBzdnNiX3ZvbHRfc3RlcCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3ZzYl92b2x0X2Jhc2UpDQo+ID4gK3sN Cj4gPiArICAgICAgIHUzMiB1X3ZvbHQ7DQo+ID4gKw0KPiA+ICsgICAgICAgdV92b2x0ID0gKHN2 c2Jfdm9sdCAqIHN2c2Jfdm9sdF9zdGVwKSArIHN2c2Jfdm9sdF9iYXNlOw0KPiA+ICsNCj4gPiAr ICAgICAgIHJldHVybiB1X3ZvbHQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgc3Zz Yl9nZXRfem9uZV90ZW1wZXJhdHVyZShzdHJ1Y3Qgc3ZzX2JhbmsgKnN2c2IsIGludCAqdHpvbmVf dGVtcCkNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHRoZXJtYWxfem9uZV9kZXZpY2UgKnR6 ZDsNCj4gPiArDQo+ID4gKyAgICAgICB0emQgPSB0aGVybWFsX3pvbmVfZ2V0X3pvbmVfYnlfbmFt ZShzdnNiLT50em9uZV9uYW1lKTsNCj4gPiArICAgICAgIGlmIChJU19FUlIodHpkKSkNCj4gPiAr ICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIodHpkKTsNCj4gPiArDQo+ID4gKyAgICAgICBy ZXR1cm4gdGhlcm1hbF96b25lX2dldF90ZW1wKHR6ZCwgdHpvbmVfdGVtcCk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgc3ZzYl9zZXRfdm9sdHMoc3RydWN0IHN2c19iYW5rICpzdnNi LCBib29sIGZvcmNlX3VwZGF0ZSkNCj4gPiArew0KPiA+ICsgICAgICAgdTMyIGksIHN2c2Jfdm9s dCwgb3BwX3ZvbHQsIHRlbXBfb2Zmc2V0ID0gMDsNCj4gPiArICAgICAgIGludCB0em9uZV90ZW1w LCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgbXV0ZXhfbG9jaygmc3ZzYi0+bG9jayk7DQo+ID4g Kw0KPiA+ICsgICAgICAgLyoNCj4gPiArICAgICAgICAqIElmIGJhbmsgaXMgc3VzcGVuZGVkLCBp dCBtZWFucyBzaWduZWQtb2ZmIHZvbHRhZ2VzIGFyZSBhcHBsaWVkLg0KPiA+ICsgICAgICAgICog RG9uJ3QgbmVlZCB0byB1cGRhdGUgb3BwIHZvbHRhZ2UgYW55bW9yZS4NCj4gPiArICAgICAgICAq Lw0KPiA+ICsgICAgICAgaWYgKHN2c2ItPnN1c3BlbmRlZCAmJiAhZm9yY2VfdXBkYXRlKSB7DQo+ ID4gKyAgICAgICAgICAgICAgIHByX25vdGljZSgiJXM6IGJhbmsgaXMgc3VzcGVuZGVkXG4iLCBz dnNiLT5uYW1lKTsNCj4gDQo+IFJlcGxhY2UgYWxsIHByXyogZm9yIGRldl8qIGFuZCBJdHMgYmV0 dGVyIHRvIGJlIHF1aWV0LCB0aGlzIG1lc3NhZ2VzDQo+IGxvb2tzIHRvIG1lIGZvciBhIGRldl9k YmcgY2FuZGlkYXRlLCBub3QgYSBub3RpY2UuDQoNCjEuIE9rLiBJJ2xsIHVzZSBkZXZfKiBpbnN0 ZWFkLiBUaGFua3MuDQoyLiBVc3VhbGx5LCBubyB2b2x0YWdlcyBuZWVkIHRvIGJlIHVwZGF0ZWQg YnkgdGhpcyBzdnMgYmFuayBhZnRlciBpdCBpcyBzdXNwZW5kZWQuDQpUaGVyZWZvcmUsIGlmIHRo aXMgbG9nIGlzIHByaW50ZWQsIGl0IG1lYW5zIHNvbWV0aGluZyBuZWVkcyB0byBiZSBub3RpY2Vk Lg0KDQo+IA0KPiA+ICsgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJnN2c2ItPmxvY2spOw0K PiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICAgIC8qIEdldCB0aGVybWFsIGVmZmVjdCAqLw0KPiA+ICsgICAgICAgaWYgKHN2 c2ItPnBoYXNlID09IFNWU0JfUEhBU0VfTU9OKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChz dnNiLT5zdnNfdGVtcCA+IHN2c2ItPnVwcGVyX3RlbXBfYm91bmQgJiYNCj4gPiArICAgICAgICAg ICAgICAgICAgIHN2c2ItPnN2c190ZW1wIDwgc3ZzYi0+bG93ZXJfdGVtcF9ib3VuZCkgew0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IHN2c190ZW1wIGlzIGFibm9ybWFs ICgweCV4KT9cbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm5h bWUsIHN2c2ItPnN2c190ZW1wKTsNCj4gDQo+IGRldl9lcnIgYW5kIEkgYW0gbm90IHN1cmUgaWYg dGhlIGVycm9yIGxldmVsIGlzIGFwcHJvcHJpYXRlIGhlcmUNCg0KMS4gc3ZzX3RlbXAgcmVmbGVj dHMgU1ZTIEhXIGNvbmRpdGlvbi4gSWYgU1ZTIGJhbmsgaW5mb3JtcyB0byB1cGRhdGUgdm9sdGFn ZXMNCmJ1dCBpdHMgc3ZzX3RlbXAgaXMgYWJub3JtYWwuIEl0J3MgYSB3YXJuaW5nIGhlYWRzLXVw IHRvIHVzDQoyLCBJJ2xsIGNoYW5nZSBpdCB0byBkZXZfd2FybmluZy4NCg0KPiANCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJnN2c2ItPmxvY2spOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICByZXQgPSBzdnNiX2dldF96b25lX3RlbXBlcmF0 dXJlKHN2c2IsICZ0em9uZV90ZW1wKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJldCkgew0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IGNhbm5vdCBnZXQgem9uZSBc IiVzXCIgdGVtcGVyYXR1cmUoJWQpXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdnNiLT5uYW1lLCBzdnNiLT50em9uZV9uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHByX2VycigiJXM6IHNldCBzaWduZWQtb2ZmIHZvbHRhZ2UgdGhpcyB0aW1l LlxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bmFtZSk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BIQVNFX0VSUk9S Ow0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAo dHpvbmVfdGVtcCA+PSBzdnNiLT5oaWdoX3RlbXBfdGhyZWFzaG9sZCkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICB0ZW1wX29mZnNldCArPSBzdnNiLT5oaWdoX3RlbXBfb2Zmc2V0Ow0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHR6b25lX3RlbXAgPD0gc3ZzYi0+bG93X3RlbXBf dGhyZWFzaG9sZCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX29mZnNldCArPSBz dnNiLT5sb3dfdGVtcF9vZmZzZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAg Lyogdm1pbiA8PSBzdnNiX3ZvbHQgKG9wcF92b2x0KSA8PSBzaWduZWQtb2ZmIHZvbHRhZ2UgKi8N Cj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdnNiLT5vcHBfY291bnQ7IGkrKykgew0KPiA+ ICsgICAgICAgICAgICAgICBpZiAoc3ZzYi0+cGhhc2UgPT0gU1ZTQl9QSEFTRV9NT04pIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiX3ZvbHQgPSBtYXgoKHN2c2ItPnZvbHRzW2ld ICsgc3ZzYi0+dm9sdF9vZmZzZXQgKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGVtcF9vZmZzZXQpLCBzdnNiLT52bWluKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBvcHBfdm9sdCA9IHN2c2Jfdm9sdF90b19vcHBfdm9sdChzdnNiX3ZvbHQsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZzYi0+dm9sdF9zdGVwLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPnZvbHRfYmFzZSk7DQo+ID4gKyAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoc3ZzYi0+cGhhc2UgPT0gU1ZTQl9QSEFTRV9JTklUMDIpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiX3ZvbHQgPSBtYXgoKHN2c2ItPmluaXQwMl92 b2x0c1tpXSArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dnNiLT52b2x0X29mZnNldCksIHN2c2ItPnZtaW4pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIG9wcF92b2x0ID0gc3ZzYl92b2x0X3RvX29wcF92b2x0KHN2c2Jfdm9sdCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNi LT52b2x0X3N0ZXAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdF9iYXNlKTsNCj4gPiArICAgICAgICAgICAgICAg fSBlbHNlIGlmIChzdnNiLT5waGFzZSA9PSBTVlNCX1BIQVNFX0VSUk9SKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgb3BwX3ZvbHQgPSBzdnNiLT5vcHBfdm9sdHNbaV07DQo+ID4gKyAg ICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJfZXJy KCIlczogdW5rbm93biBwaGFzZTogJXU/XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdnNiLT5uYW1lLCBzdnNiLT5waGFzZSk7DQo+IA0KPiBJIHRoaW5rIHRoYXQgdXNp bmcgYSBnb3RvIGhlcmUgYW5kIHNvbWUgcGxhY2VzIGJlbG93IHdpbGwgaGVscCB0aGUgcmVhZGFi aWxpdHkuDQoNCk9rLiBJJ2xsIHJlcGxhY2UgaXQgd2l0aCBnb3RvLiBUaGFua3MuDQoNCj4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byB1bmxvY2tfbXV0ZXgNCj4gICAgICAgICAgICAgICAgIFsuLi5dDQo+ ICAgICAgICAgICAgICAgIHVubG9ja19tdXRleDoNCj4gICAgICAgICAgICAgICAgICAgICAgIG11 dGV4X3VubG9jaygmc3ZzYi0+bG9jayk7DQo+ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g cmV0Ow0KPiANCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJnN2c2It PmxvY2spOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBvcHBfdm9sdCA9 IG1pbihvcHBfdm9sdCwgc3ZzYi0+b3BwX3ZvbHRzW2ldKTsNCj4gPiArICAgICAgICAgICAgICAg cmV0ID0gZGV2X3BtX29wcF9hZGp1c3Rfdm9sdGFnZShzdnNiLT5kZXYsIHN2c2ItPm9wcF9mcmVx c1tpXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvcHBfdm9sdCwgb3BwX3ZvbHQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3ZzYi0+b3BwX3ZvbHRzW2ldKTsNCj4gPiArICAgICAgICAgICAg ICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IHNl dCB2b2x0YWdlIGZhaWxlZDogJWRcbiIsIHN2c2ItPm5hbWUsIHJldCk7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZzdnNiLT5sb2NrKTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAg ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgbXV0ZXhfdW5sb2NrKCZzdnNiLT5sb2NrKTsNCj4g PiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHUz MiBpbnRlcnBvbGF0ZSh1MzIgZjAsIHUzMiBmMSwgdTMyIHYwLCB1MzIgdjEsIHUzMiBmeCkNCj4g PiArew0KPiA+ICsgICAgICAgdTMyIHZ5Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmICh2MCA9PSB2 MSB8fCBmMCA9PSBmMSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHYwOw0KPiA+ICsNCj4g PiArICAgICAgIC8qICoxMDAgdG8gaGF2ZSBkZWNpbWFsIGZyYWN0aW9uIGZhY3RvciwgKzk5IGZv ciByb3VuZGluZyB1cC4gKi8NCj4gPiArICAgICAgIHZ5ID0gKHYwICogMTAwKSAtICgoKCh2MCAt IHYxKSAqIDEwMCkgLyAoZjAgLSBmMSkpICogKGYwIC0gZngpKTsNCj4gPiArICAgICAgIHZ5ID0g KHZ5ICsgOTkpIC8gMTAwOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiB2eTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3ZzX2dldF92b3BzX3YyKHN0cnVjdCBtdGtfc3ZzICpz dnMpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYiA9IHN2cy0+YmFu azsNCj4gPiArICAgICAgIHUzMiB0ZW1wLCBpOw0KPiA+ICsNCj4gPiArICAgICAgIHRlbXAgPSBz dnNfcmVhZGwoc3ZzLCBWT1AzMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1s2XSA9ICh0ZW1w ID4+IDI0KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1s0XSA9ICh0 ZW1wID4+IDE2KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1syXSA9 ICh0ZW1wID4+IDgpICAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1sw XSA9ICh0ZW1wICYgR0VOTUFTSyg3LCAwKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgdGVtcCA9IHN2 c19yZWFkbChzdnMsIFZPUDc0KTsNCj4gPiArICAgICAgIHN2c2ItPnZvbHRzWzE0XSA9ICh0ZW1w ID4+IDI0KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICBzdnNiLT52b2x0c1sxMl0gPSAo dGVtcCA+PiAxNikgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgc3ZzYi0+dm9sdHNbMTBd ID0gKHRlbXAgPj4gOCkgICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgIHN2c2ItPnZvbHRz WzhdID0gKHRlbXAgJiBHRU5NQVNLKDcsIDApKTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGkg PSAwOyBpIDw9IDc7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICBpZiAoaSA8IDcpIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0c1soaSAqIDIpICsgMV0gPQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGUoc3ZzYi0+ZnJlcXNf cGN0W2kgKiAyXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2c2ItPmZyZXFzX3BjdFsoaSArIDEpICogMl0sDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0c1tpICogMl0sDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0c1soaSArIDEp ICogMl0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dnNiLT5mcmVxc19wY3RbKGkgKiAyKSArIDFdKTsNCj4gPiArICAgICAgICAgICAgICAgfSBlbHNl IGlmIChpID09IDcpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0c1so aSAqIDIpICsgMV0gPQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJw b2xhdGUoc3ZzYi0+ZnJlcXNfcGN0WyhpIC0gMSkgKiAyXSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmZyZXFzX3BjdFtpICogMl0sDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT52b2x0c1so aSAtIDEpICogMl0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdnNiLT52b2x0c1tpICogMl0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdnNiLT5mcmVxc19wY3RbKGkgKiAyKSArIDFdKTsNCj4gPiArICAg ICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBzdnNfc2V0X2ZyZXFzX3BjdF92MihzdHJ1Y3QgbXRrX3N2cyAqc3ZzKQ0KPiA+ICt7DQo+ ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2c2IgPSBzdnMtPmJhbms7DQo+ID4gKw0KPiA+ ICsgICAgICAgc3ZzX3dyaXRlbChzdnMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ ZnJlcXNfcGN0WzZdIDw8IDI0KSAmIEdFTk1BU0soMzEsIDI0KSkgfA0KPiA+ICsgICAgICAgICAg ICAgICAgICAoKHN2c2ItPmZyZXFzX3BjdFs0XSA8PCAxNikgJiBHRU5NQVNLKDIzLCAxNikpIHwN Cj4gPiArICAgICAgICAgICAgICAgICAgKChzdnNiLT5mcmVxc19wY3RbMl0gPDwgOCkgJiBHRU5N QVNLKDE1LCA4KSkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAoc3ZzYi0+ZnJlcXNfcGN0WzBd ICYgR0VOTUFTSyg3LCAwKSksDQo+ID4gKyAgICAgICAgICAgICAgICAgIEZSRVFQQ1QzMCk7DQo+ ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2cywNCj4gPiArICAgICAgICAgICAgICAgICAgKChzdnNi LT5mcmVxc19wY3RbMTRdIDw8IDI0KSAmIEdFTk1BU0soMzEsIDI0KSkgfA0KPiA+ICsgICAgICAg ICAgICAgICAgICAoKHN2c2ItPmZyZXFzX3BjdFsxMl0gPDwgMTYpICYgR0VOTUFTSygyMywgMTYp KSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZnJlcXNfcGN0WzEwXSA8PCA4KSAm IEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICgoc3ZzYi0+ZnJlcXNf cGN0WzhdKSAmIEdFTk1BU0soNywgMCkpLA0KPiA+ICsgICAgICAgICAgICAgICAgICBGUkVRUENU NzQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBzdnNfc2V0X3BoYXNlKHN0cnVj dCBtdGtfc3ZzICpzdnMsIHUzMiB0YXJnZXRfcGhhc2UpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0 cnVjdCBzdnNfYmFuayAqc3ZzYiA9IHN2cy0+YmFuazsNCj4gPiArICAgICAgIHUzMiBkZXNfY2hh ciwgdGVtcF9jaGFyLCBkZXRfY2hhciwgbGltaXRfdmFsczsNCj4gPiArICAgICAgIHUzMiBpbml0 MnZhbHMsIHRzX2NhbGNzLCB2YWwsIGZpbHRlciwgaTsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNf c3dpdGNoX2Jhbmsoc3ZzKTsNCj4gPiArDQo+ID4gKyAgICAgICBkZXNfY2hhciA9ICgoc3ZzYi0+ YmRlcyA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgIChz dnNiLT5tZGVzICYgR0VOTUFTSyg3LCAwKSk7DQo+ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2cywg ZGVzX2NoYXIsIERFU0NIQVIpOw0KPiA+ICsNCj4gPiArICAgICAgIHRlbXBfY2hhciA9ICgoc3Zz Yi0+dmNvIDw8IDE2KSAmIEdFTk1BU0soMjMsIDE2KSkgfA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgKChzdnNiLT5tdGRlcyA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAoc3ZzYi0+ZHZ0X2ZpeGVkICYgR0VOTUFTSyg3LCAwKSk7DQo+ID4gKyAgICAg ICBzdnNfd3JpdGVsKHN2cywgdGVtcF9jaGFyLCBURU1QQ0hBUik7DQo+ID4gKw0KPiA+ICsgICAg ICAgZGV0X2NoYXIgPSAoKHN2c2ItPmRjYmRldCA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ ID4gKyAgICAgICAgICAgICAgICAgIChzdnNiLT5kY21kZXQgJiBHRU5NQVNLKDcsIDApKTsNCj4g PiArICAgICAgIHN2c193cml0ZWwoc3ZzLCBkZXRfY2hhciwgREVUQ0hBUik7DQo+ID4gKw0KPiA+ ICsgICAgICAgc3ZzX3dyaXRlbChzdnMsIHN2c2ItPmRjX2NvbmZpZywgRENDT05GSUcpOw0KPiA+ ICsgICAgICAgc3ZzX3dyaXRlbChzdnMsIHN2c2ItPmFnZV9jb25maWcsIEFHRUNPTkZJRyk7DQo+ ID4gKw0KPiA+ICsgICAgICAgaWYgKCFzdnNiLT5hZ2VtKSB7DQo+ID4gKyAgICAgICAgICAgICAg IHN2c193cml0ZWwoc3ZzLCBSVU5DT05GSUdfREVGQVVMVCwgUlVOQ09ORklHKTsNCj4gPiArICAg ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgIHZhbCA9IDB4MDsNCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSArPSAyKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZmlsdGVyID0gMHgzIDw8IGk7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIGlmICghKHN2c2ItPmFnZV9jb25maWcgJiBmaWx0ZXIpKQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9ICgweDEgPDwgaSk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmFsIHw9IChzdnNiLT5hZ2VfY29uZmlnICYgZmlsdGVyKTsNCj4gPiArICAgICAgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNfd3JpdGVsKHN2cywgdmFsLCBSVU5DT05G SUcpOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHN2c2ItPm9wcy0+c2V0X2Zy ZXFzX3BjdChzdnMpOw0KPiA+ICsNCj4gPiArICAgICAgIGxpbWl0X3ZhbHMgPSAoKHN2c2ItPnZt YXggPDwgMjQpICYgR0VOTUFTSygzMSwgMjQpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg KChzdnNiLT52bWluIDw8IDE2KSAmIEdFTk1BU0soMjMsIDE2KSkgfA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICgoc3ZzYi0+ZHRoaSA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKSB8DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgKHN2c2ItPmR0bG8gJiBHRU5NQVNLKDcsIDApKTsNCj4gPiArICAg ICAgIHN2c193cml0ZWwoc3ZzLCBsaW1pdF92YWxzLCBMSU1JVFZBTFMpOw0KPiA+ICsgICAgICAg c3ZzX3dyaXRlbChzdnMsIChzdnNiLT52Ym9vdCAmIEdFTk1BU0soNywgMCkpLCBWQk9PVCk7DQo+ ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2cywgKHN2c2ItPmRldF93aW5kb3cgJiBHRU5NQVNLKDE1 LCAwKSksIERFVFdJTkRPVyk7DQo+ID4gKyAgICAgICBzdnNfd3JpdGVsKHN2cywgKHN2c2ItPmRl dF9tYXggJiBHRU5NQVNLKDE1LCAwKSksIENPTkZJRyk7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYg KHN2c2ItPmNoa19zaGlmdCkNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIChz dnNiLT5jaGtfc2hpZnQgJiBHRU5NQVNLKDcsIDApKSwgQ0hLU0hJRlQpOw0KPiA+ICsNCj4gPiAr ICAgICAgIGlmIChzdnNiLT5jdGwwKQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNfd3JpdGVsKHN2 cywgc3ZzYi0+Y3RsMCwgQ1RMMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzX3dyaXRlbChzdnMs IElOVFNUU19DTEVBTiwgSU5UU1RTKTsNCj4gPiArDQo+ID4gKyAgICAgICBzd2l0Y2ggKHRhcmdl dF9waGFzZSkgew0KPiA+ICsgICAgICAgY2FzZSBTVlNCX1BIQVNFX0lOSVQwMToNCj4gPiArICAg ICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIElOVEVOX0lOSVQweCwgSU5URU4pOw0KPiA+ICsg ICAgICAgICAgICAgICBzdnNfd3JpdGVsKHN2cywgU1ZTRU5fSU5JVDAxLCBTVlNFTik7DQo+ID4g KyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgY2FzZSBTVlNCX1BIQVNFX0lOSVQw MjoNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIElOVEVOX0lOSVQweCwgSU5U RU4pOw0KPiA+ICsgICAgICAgICAgICAgICBpbml0MnZhbHMgPSAoKHN2c2ItPmFnZV92b2Zmc2V0 X2luIDw8IDE2KSAmIEdFTk1BU0soMzEsIDE2KSkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc3ZzYi0+ZGNfdm9mZnNldF9pbiAmIEdFTk1BU0soMTUsIDApKTsNCj4gPiArICAg ICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIGluaXQydmFscywgSU5JVDJWQUxTKTsNCj4gPiAr ICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIFNWU0VOX0lOSVQwMiwgU1ZTRU4pOw0KPiA+ ICsgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIGNhc2UgU1ZTQl9QSEFTRV9NT046 DQo+ID4gKyAgICAgICAgICAgICAgIHRzX2NhbGNzID0gKChzdnNiLT5idHMgPDwgMTIpICYgR0VO TUFTSygyMywgMTIpKSB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHN2c2ItPm10 cyAmIEdFTk1BU0soMTEsIDApKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMs IHRzX2NhbGNzLCBUU0NBTENTKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMs IElOVEVOX01PTlZPUEVOLCBJTlRFTik7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c193cml0ZWwo c3ZzLCBTVlNFTl9NT04sIFNWU0VOKTsNCj4gPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgICBXQVJOX09OKDEpOw0KPiA+ICsg ICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSB2b2lkIHN2c19pbml0MDFfaXNyX2hhbmRsZXIoc3RydWN0IG10a19zdnMg KnN2cykNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNiID0gc3ZzLT5i YW5rOw0KPiA+ICsgICAgICAgZW51bSByZWdfaW5kZXggcmdfaTsNCj4gPiArDQo+ID4gKyAgICAg ICBwcl9ub3RpY2UoIiVzOiAlczogVkRONzQ6MHglMDh4LCBWRE4zMDoweCUwOHgsIERDVkFMVUVT OjB4JTA4eFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lLCBfX2Z1bmNfXywg c3ZzX3JlYWRsKHN2cywgVkRFU0lHTjc0KSwNCj4gPiArICAgICAgICAgICAgICAgICBzdnNfcmVh ZGwoc3ZzLCBWREVTSUdOMzApLCBzdnNfcmVhZGwoc3ZzLCBEQ1ZBTFVFUykpOw0KPiA+ICsNCj4g PiArICAgICAgIGZvciAocmdfaSA9IFRFTVBNT05DVEwwOyByZ19pIDwgcmVnX251bTsgcmdfaSsr KQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNiLT5yZWdfZGF0YVtTVlNCX1BIQVNFX0lOSVQwMV1b cmdfaV0gPSBzdnNfcmVhZGwoc3ZzLCByZ19pKTsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNiLT5w aGFzZSA9IFNWU0JfUEhBU0VfSU5JVDAxOw0KPiA+ICsgICAgICAgc3ZzYi0+ZGNfdm9mZnNldF9p biA9IH4oc3ZzX3JlYWRsKHN2cywgRENWQUxVRVMpICYgR0VOTUFTSygxNSwgMCkpICsgMTsNCj4g PiArICAgICAgIGlmIChzdnNiLT5pbml0MDFfdm9sdF9mbGFnID09IFNWU0JfSU5JVDAxX1ZPTFRf SUdOT1JFKQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNiLT5kY192b2Zmc2V0X2luID0gMDsNCj4g PiArICAgICAgIGVsc2UgaWYgKChzdnNiLT5kY192b2Zmc2V0X2luICYgRENfU0lHTkVEX0JJVCkg JiYNCj4gPiArICAgICAgICAgICAgICAgIChzdnNiLT5pbml0MDFfdm9sdF9mbGFnID09IFNWU0Jf SU5JVDAxX1ZPTFRfSU5DX09OTFkpKQ0KPiA+ICsgICAgICAgICAgICAgICBzdnNiLT5kY192b2Zm c2V0X2luID0gMDsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNiLT5hZ2Vfdm9mZnNldF9pbiA9IHN2 c19yZWFkbChzdnMsIEFHRVZBTFVFUykgJiBHRU5NQVNLKDE1LCAwKTsNCj4gPiArDQo+ID4gKyAg ICAgICBzdnNfd3JpdGVsKHN2cywgU1ZTRU5fT0ZGLCBTVlNFTik7DQo+ID4gKyAgICAgICBzdnNf d3JpdGVsKHN2cywgSU5UU1RTX0NPTVBMRVRFLCBJTlRTVFMpOw0KPiA+ICsNCj4gPiArICAgICAg IC8qIHN2cyBpbml0MDEgY2xvY2sgZ2F0aW5nICovDQo+ID4gKyAgICAgICBzdnNiLT5jb3JlX3Nl bCAmPSB+c3ZzYi0+c3lzdGVtY2xrX2VuOw0KPiA+ICsgICAgICAgY29tcGxldGUoJnN2c2ItPmlu aXRfY29tcGxldGlvbik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBz dnNfaW5pdDAyX2lzcl9oYW5kbGVyKHN0cnVjdCBtdGtfc3ZzICpzdnMpDQo+ID4gK3sNCj4gPiAr ICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYiA9IHN2cy0+YmFuazsNCj4gPiArICAgICAgIGVu dW0gcmVnX2luZGV4IHJnX2k7DQo+ID4gKw0KPiA+ICsgICAgICAgcHJfbm90aWNlKCIlczogJXM6 IFZPUDc0OjB4JTA4eCwgVk9QMzA6MHglMDh4LCBEQ1ZBTFVFUzoweCUwOHhcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgc3ZzYi0+bmFtZSwgX19mdW5jX18sIHN2c19yZWFkbChzdnMsIFZPUDc0 KSwNCj4gPiArICAgICAgICAgICAgICAgICBzdnNfcmVhZGwoc3ZzLCBWT1AzMCksIHN2c19yZWFk bChzdnMsIERDVkFMVUVTKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChyZ19pID0gVEVNUE1P TkNUTDA7IHJnX2kgPCByZWdfbnVtOyByZ19pKyspDQo+ID4gKyAgICAgICAgICAgICAgIHN2c2It PnJlZ19kYXRhW1NWU0JfUEhBU0VfSU5JVDAyXVtyZ19pXSA9IHN2c19yZWFkbChzdnMsIHJnX2kp Ow0KPiA+ICsNCj4gPiArICAgICAgIHN2c2ItPnBoYXNlID0gU1ZTQl9QSEFTRV9JTklUMDI7DQo+ ID4gKyAgICAgICBzdnNiLT5vcHMtPmdldF92b3BzKHN2cyk7DQo+ID4gKyAgICAgICBtZW1jcHko c3ZzYi0+aW5pdDAyX3ZvbHRzLCBzdnNiLT52b2x0cywgc2l6ZW9mKHUzMikgKiBzdnNiLT5vcHBf Y291bnQpOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzLCBTVlNFTl9PRkYsIFNW U0VOKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzLCBJTlRTVFNfQ09NUExFVEUsIElOVFNU Uyk7DQo+ID4gKw0KPiA+ICsgICAgICAgY29tcGxldGUoJnN2c2ItPmluaXRfY29tcGxldGlvbik7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzdnNfbW9uX21vZGVfaXNy X2hhbmRsZXIoc3RydWN0IG10a19zdnMgKnN2cykNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0 IHN2c19iYW5rICpzdnNiID0gc3ZzLT5iYW5rOw0KPiA+ICsgICAgICAgZW51bSByZWdfaW5kZXgg cmdfaTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKHJnX2kgPSBURU1QTU9OQ1RMMDsgcmdfaSA8 IHJlZ19udW07IHJnX2krKykNCj4gPiArICAgICAgICAgICAgICAgc3ZzYi0+cmVnX2RhdGFbU1ZT Ql9QSEFTRV9NT05dW3JnX2ldID0gc3ZzX3JlYWRsKHN2cywgcmdfaSk7DQo+ID4gKw0KPiA+ICsg ICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BIQVNFX01PTjsNCj4gPiArICAgICAgIHN2c2ItPnN2 c190ZW1wID0gc3ZzX3JlYWRsKHN2cywgVEVNUCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAg ICAgc3ZzYi0+b3BzLT5nZXRfdm9wcyhzdnMpOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193cml0 ZWwoc3ZzLCBJTlRTVFNfTU9OVk9QLCBJTlRTVFMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW5saW5lIHZvaWQgc3ZzX2Vycm9yX2lzcl9oYW5kbGVyKHN0cnVjdCBtdGtfc3ZzICpzdnMp DQo+ID4gK3sNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3AgPSBz dnMtPnBsYXRmb3JtOw0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNiID0gc3ZzLT5i YW5rOw0KPiA+ICsgICAgICAgZW51bSByZWdfaW5kZXggcmdfaTsNCj4gPiArDQo+ID4gKyAgICAg ICBwcl9lcnIoIiVzKCk6ICVzKCVzKSIsIF9fZnVuY19fLCBzdnNwLT5uYW1lLCBzdnNiLT5uYW1l KTsNCj4gPiArICAgICAgIHByX2VycigiQ09SRVNFTCgweCV4KSA9IDB4JTA4eFxuIiwNCj4gPiAr ICAgICAgICAgICAgICBzdnNwLT5yZWdzW0NPUkVTRUxdLCBzdnNfcmVhZGwoc3ZzLCBDT1JFU0VM KSksDQo+ID4gKyAgICAgICBwcl9lcnIoIlNWU0VOKDB4JXgpID0gMHglMDh4LCBJTlRTVFMoMHgl eCkgPSAweCUwOHhcbiIsDQo+ID4gKyAgICAgICAgICAgICAgc3ZzcC0+cmVnc1tTVlNFTl0sIHN2 c19yZWFkbChzdnMsIFNWU0VOKSwNCj4gPiArICAgICAgICAgICAgICBzdnNwLT5yZWdzW0lOVFNU U10sIHN2c19yZWFkbChzdnMsIElOVFNUUykpOw0KPiA+ICsgICAgICAgcHJfZXJyKCJTTVNUQVRF MCgweCV4KSA9IDB4JTA4eCwgU01TVEFURTEoMHgleCkgPSAweCUwOHhcbiIsDQo+ID4gKyAgICAg ICAgICAgICAgc3ZzcC0+cmVnc1tTTVNUQVRFMF0sIHN2c19yZWFkbChzdnMsIFNNU1RBVEUwKSwN Cj4gPiArICAgICAgICAgICAgICBzdnNwLT5yZWdzW1NNU1RBVEUxXSwgc3ZzX3JlYWRsKHN2cywg U01TVEFURTEpKTsNCj4gPiArICAgICAgIHByX2VycigiVEVNUCgweCV4KSA9IDB4JTA4eCwgVEVN UE1TUjAoMHgleCkgPSAweCUwOHhcbiIsDQo+ID4gKyAgICAgICAgICAgICAgc3ZzcC0+cmVnc1tU RU1QXSwgc3ZzX3JlYWRsKHN2cywgVEVNUCksDQo+ID4gKyAgICAgICAgICAgICAgc3ZzcC0+cmVn c1tURU1QTVNSMF0sIHN2c19yZWFkbChzdnMsIFRFTVBNU1IwKSk7DQo+ID4gKyAgICAgICBwcl9l cnIoIlRFTVBNU1IxKDB4JXgpID0gMHglMDh4LCBURU1QTVNSMigweCV4KSA9IDB4JTA4eFxuIiwN Cj4gPiArICAgICAgICAgICAgICBzdnNwLT5yZWdzW1RFTVBNU1IxXSwgc3ZzX3JlYWRsKHN2cywg VEVNUE1TUjEpLA0KPiA+ICsgICAgICAgICAgICAgIHN2c3AtPnJlZ3NbVEVNUE1TUjJdLCBzdnNf cmVhZGwoc3ZzLCBURU1QTVNSMikpOw0KPiA+ICsgICAgICAgcHJfZXJyKCJURU1QTU9OQ1RMMCgw eCV4KSA9IDB4JTA4eCwgVEVNUE1TUkNUTDEoMHgleCkgPSAweCUwOHhcbiIsDQo+ID4gKyAgICAg ICAgICAgICAgc3ZzcC0+cmVnc1tURU1QTU9OQ1RMMF0sIHN2c19yZWFkbChzdnMsIFRFTVBNT05D VEwwKSwNCj4gPiArICAgICAgICAgICAgICBzdnNwLT5yZWdzW1RFTVBNU1JDVEwxXSwgc3ZzX3Jl YWRsKHN2cywgVEVNUE1TUkNUTDEpKTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKHJnX2kgPSBU RU1QTU9OQ1RMMDsgcmdfaSA8IHJlZ19udW07IHJnX2krKykNCj4gPiArICAgICAgICAgICAgICAg c3ZzYi0+cmVnX2RhdGFbU1ZTQl9QSEFTRV9NT05dW3JnX2ldID0gc3ZzX3JlYWRsKHN2cywgcmdf aSk7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzYi0+bW9kZV9zdXBwb3J0ID0gU1ZTQl9NT0RFX0FM TF9ESVNBQkxFOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdnNiLT5waGFzZSAhPSBTVlNCX1BI QVNFX0lOSVQwMSkNCj4gPiArICAgICAgICAgICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BIQVNF X0VSUk9SOw0KPiA+ICsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzLCBTVlNFTl9PRkYsIFNW U0VOKTsNCj4gPiArICAgICAgIHN2c193cml0ZWwoc3ZzLCBJTlRTVFNfQ0xFQU4sIElOVFNUUyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBzdnNfaXNyKGludCBpcnEs IHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBtdGtfc3ZzICpzdnMgPSAo c3RydWN0IG10a19zdnMgKilkYXRhOw0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHN2c19wbGF0 Zm9ybSAqc3ZzcCA9IHN2cy0+cGxhdGZvcm07DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2Jhbmsg KnN2c2IgPSBOVUxMOw0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArICAg ICAgIHUzMiBpZHgsIGludF9zdHMsIHN2c19lbjsNCj4gPiArDQo+ID4gKyAgICAgICBmbGFncyA9 IGNsYWltX210a19zdnNfbG9jaygpOw0KPiA+ICsgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBz dnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYiA9ICZzdnNw LT5iYW5rc1tpZHhdOw0KPiA+ICsgICAgICAgICAgICAgICBzdnMtPmJhbmsgPSBzdnNiOw0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHN2c2ItPmludF9zdCAmIHN2c19yZWFkbChzdnMs IElOVFNUKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgIGlmICghc3ZzYi0+c3VzcGVuZGVkKSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgc3ZzX3N3aXRjaF9iYW5rKHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgaW50X3N0cyA9IHN2c19yZWFkbChzdnMsIElOVFNUUyk7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgc3ZzX2VuID0gc3ZzX3JlYWRsKHN2cywgU1ZTRU4pOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50X3N0cyA9PSBJTlRTVFNfQ09NUExFVEUg JiYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdnNfZW4gJiBTVlNFTl9NQVNL KSA9PSBTVlNFTl9JTklUMDEpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3ZzX2luaXQwMV9pc3JfaGFuZGxlcihzdnMpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGVsc2UgaWYgKChpbnRfc3RzID09IElOVFNUU19DT01QTEVURSkgJiYNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKHN2c19lbiAmIFNWU0VOX01BU0spID09IFNWU0VOX0lO SVQwMikpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNfaW5pdDAyX2lz cl9oYW5kbGVyKHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoISEo aW50X3N0cyAmIElOVFNUU19NT05WT1ApKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3ZzX21vbl9tb2RlX2lzcl9oYW5kbGVyKHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzX2Vy cm9yX2lzcl9oYW5kbGVyKHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsgICAgICAgcmVsZWFz ZV9tdGtfc3ZzX2xvY2soZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdnNiLT5waGFz ZSAhPSBTVlNCX1BIQVNFX0lOSVQwMSkNCj4gPiArICAgICAgICAgICAgICAgc3ZzYl9zZXRfdm9s dHMoc3ZzYiwgZmFsc2UpOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiBJUlFfSEFORExFRDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgc3ZzX21vbl9tb2RlKHN0cnVjdCBtdGtf c3ZzICpzdnMpDQo+ID4gK3sNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBzdnNfcGxhdGZvcm0g KnN2c3AgPSBzdnMtPnBsYXRmb3JtOw0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNi Ow0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArICAgICAgIHUzMiBpZHg7 DQo+ID4gKw0KPiA+ICsgICAgICAgZmxhZ3MgPSBjbGFpbV9tdGtfc3ZzX2xvY2soKTsNCj4gPiAr ICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlkeCsrKSB7DQo+ID4g KyAgICAgICAgICAgICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4gPiArICAgICAgICAg ICAgICAgc3ZzLT5iYW5rID0gc3ZzYjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmICgh KHN2c2ItPm1vZGVfc3VwcG9ydCAmIFNWU0JfTU9ERV9NT04pKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3NldF9w aGFzZShzdnMsIFNWU0JfUEhBU0VfTU9OKTsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIHJl bGVhc2VfbXRrX3N2c19sb2NrKGZsYWdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBzdnNfaW5pdDAyKHN0cnVjdCBtdGtfc3ZzICpzdnMpDQo+ID4gK3sNCj4gPiArICAgICAgIGNv bnN0IHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3AgPSBzdnMtPnBsYXRmb3JtOw0KPiA+ICsgICAg ICAgc3RydWN0IHN2c19iYW5rICpzdnNiOw0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn cywgdGltZV9sZWZ0Ow0KPiA+ICsgICAgICAgdTMyIGlkeDsNCj4gPiArDQo+ID4gKyAgICAgICBm b3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBpZHgrKykgew0KPiA+ICsgICAgICAg ICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4gKyAgICAgICAgICAgICAgIHN2 cy0+YmFuayA9IHN2c2I7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIShzdnNiLT5t b2RlX3N1cHBvcnQgJiBTVlNCX01PREVfSU5JVDAyKSkNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBjb250aW51ZTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHJlaW5pdF9jb21wbGV0 aW9uKCZzdnNiLT5pbml0X2NvbXBsZXRpb24pOw0KPiA+ICsgICAgICAgICAgICAgICBmbGFncyA9 IGNsYWltX210a19zdnNfbG9jaygpOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNfc2V0X3BoYXNl KHN2cywgU1ZTQl9QSEFTRV9JTklUMDIpOw0KPiA+ICsgICAgICAgICAgICAgICByZWxlYXNlX210 a19zdnNfbG9jayhmbGFncyk7DQo+ID4gKyAgICAgICAgICAgICAgIHRpbWVfbGVmdCA9DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzdnNi LT5pbml0X2NvbXBsZXRpb24sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOw0KPiA+ICsgICAgICAg ICAgICAgICBpZiAoIXRpbWVfbGVmdCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHBy X2VycigiJXM6IGluaXQwMiBjb21wbGV0aW9uIHRpbWVvdXRcbiIsIHN2c2ItPm5hbWUpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7DQo+ID4gKyAgICAgICAgICAg ICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNfaW5pdDAxKHN0cnVjdCBtdGtfc3ZzICpzdnMp DQo+ID4gK3sNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3AgPSBz dnMtPnBsYXRmb3JtOw0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNiOw0KPiA+ICsg ICAgICAgc3RydWN0IHBtX3Fvc19yZXF1ZXN0ICpxb3NfcmVxdWVzdDsNCj4gPiArICAgICAgIHVu c2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVfbGVmdDsNCj4gPiArICAgICAgIGJvb2wgc2VhcmNoX2Rv bmU7DQo+ID4gKyAgICAgICBpbnQgcmV0ID0gLUVQRVJNOw0KPiA+ICsgICAgICAgdTMyIG9wcF9m cmVxcywgb3BwX3Zib290LCBidWNrX3ZvbHQsIGlkeCwgaTsNCj4gPiArDQo+ID4gKyAgICAgICBx b3NfcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKCpxb3NfcmVxdWVzdCksIEdGUF9LRVJORUwpOw0K PiA+ICsgICAgICAgaWYgKCFxb3NfcmVxdWVzdCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgICAgLyogTGV0IENQVXMgbGVhdmUgaWRsZS1vZmYg c3RhdGUgZm9yIGluaXRpYWxpemluZyBzdnNfaW5pdDAxLiAqLw0KPiA+ICsgICAgICAgY3B1X2xh dGVuY3lfcW9zX2FkZF9yZXF1ZXN0KHFvc19yZXF1ZXN0LCAwKTsNCj4gPiArDQo+ID4gKyAgICAg ICAvKg0KPiA+ICsgICAgICAgICogU29tZXRpbWVzIHR3byBzdnMgYmFua3MgdXNlIHRoZSBzYW1l IGJ1Y2suDQo+ID4gKyAgICAgICAgKiBUaGVyZWZvcmUsIHdlIHNldCBlYWNoIHN2cyBiYW5rIHRv IHZib290IHZvbHRhZ2UgZmlyc3QuDQo+ID4gKyAgICAgICAgKi8NCj4gPiArICAgICAgIGZvciAo aWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlkeCsrKSB7DQo+ID4gKyAgICAgICAgICAg ICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4gPiArICAgICAgICAgICAgICAgc2VhcmNo X2RvbmUgPSBmYWxzZTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IHJlZ3VsYXRv cl9zZXRfbW9kZShzdnNiLT5idWNrLCBSRUdVTEFUT1JfTU9ERV9GQVNUKTsNCj4gPiArICAgICAg ICAgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9ub3RpY2Uo IiVzOiBmYWlsIHRvIHNldCBmYXN0IG1vZGU6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lLCByZXQpOw0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgaWYgKHN2c2ItPm10Y21vc19yZXF1ZXN0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmV0ID0gcmVndWxhdG9yX2VuYWJsZShzdnNiLT5idWNrKTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcl9lcnIoIiVzOiBmYWlsIHRvIGVuYWJsZSAlcyBwb3dlcjogJWRcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bmFtZSwgc3ZzYi0+YnVj a19uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBp bml0MDFfZmluaXNoOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZGV2X3BtX2RvbWFpbl9hdHRhY2goc3ZzYi0+ ZGV2LCBmYWxzZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgew0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCIlczogYXR0YWNoIHBtIGRv bWFpbiBmYWlsOiAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdnNiLT5uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ290byBpbml0MDFfZmluaXNoOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcG1fcnVudGltZV9lbmFibGUoc3ZzYi0+ ZGV2KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBwbV9ydW50aW1lX2dldF9z eW5jKHN2c2ItPmRldik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA8IDAp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IHR1cm4g bXRjbW9zIG9uIGZhaWw6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN2c2ItPm5hbWUsIHJldCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnb3RvIGluaXQwMV9maW5pc2g7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg fQ0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAvKg0K PiA+ICsgICAgICAgICAgICAgICAgKiBGaW5kIHRoZSBmYXN0ZXN0IGZyZXEgdGhhdCBjYW4gYmUg cnVuIGF0IHZib290IGFuZA0KPiA+ICsgICAgICAgICAgICAgICAgKiBmaXggdG8gdGhhdCBmcmVx IHVudGlsIHN2c19pbml0MDEgaXMgZG9uZS4NCj4gPiArICAgICAgICAgICAgICAgICovDQo+ID4g KyAgICAgICAgICAgICAgIG9wcF92Ym9vdCA9IHN2c2Jfdm9sdF90b19vcHBfdm9sdChzdnNiLT52 Ym9vdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2c2ItPnZvbHRfc3RlcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN2c2ItPnZvbHRfYmFzZSk7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ZzYi0+b3BwX2NvdW50OyBpKyspIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBvcHBfZnJlcXMgPSBzdnNiLT5vcHBfZnJlcXNbaV07DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hfZG9uZSAmJiBzdnNiLT5vcHBfdm9s dHNbaV0gPD0gb3BwX3Zib290KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZXQgPSBkZXZfcG1fb3BwX2FkanVzdF92b2x0YWdlKHN2c2ItPmRldiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg b3BwX2ZyZXFzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcHBfdmJvb3QsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wcF92Ym9vdCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb3BwX3Zib290KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJfZXJyKCIlczogc2V0IHZvbHRhZ2UgZmFpbGVkOiAlZFxuIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUsIHJldCk7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5pdDAxX2Zp bmlzaDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hfZG9uZSA9IHRydWU7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRldl9wbV9vcHBfZGlzYWJsZShzdnNiLT5kZXYsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+b3BwX2ZyZXFz W2ldKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAg IH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAvKiBzdnMgYmFuayBpbml0MDEg YmVnaW5zICovDQo+ID4gKyAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVt OyBpZHgrKykgew0KPiA+ICsgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07 DQo+ID4gKyAgICAgICAgICAgICAgIHN2cy0+YmFuayA9IHN2c2I7DQo+ID4gKw0KPiA+ICsgICAg ICAgICAgICAgICBpZiAoIShzdnNiLT5tb2RlX3N1cHBvcnQgJiBTVlNCX01PREVfSU5JVDAxKSkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICAgIG9wcF92Ym9vdCA9IHN2c2Jfdm9sdF90b19vcHBfdm9sdChzdnNiLT52Ym9vdCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2 c2ItPnZvbHRfc3RlcCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN2c2ItPnZvbHRfYmFzZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg ICBidWNrX3ZvbHQgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Uoc3ZzYi0+YnVjayk7DQo+ID4gKyAg ICAgICAgICAgICAgIGlmIChidWNrX3ZvbHQgIT0gb3BwX3Zib290KSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgcHJfZXJyKCIlczogYnVjayB2b2x0YWdlOiAldSwgZXhwZWN0ZWQgdmJv b3Q6ICV1XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5uYW1l LCBidWNrX3ZvbHQsIG9wcF92Ym9vdCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0 ID0gLUVQRVJNOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5pdDAxX2Zpbmlz aDsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaW5p dF9jb21wbGV0aW9uKCZzdnNiLT5pbml0X2NvbXBsZXRpb24pOw0KPiA+ICsgICAgICAgICAgICAg ICBmbGFncyA9IGNsYWltX210a19zdnNfbG9jaygpOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNf c2V0X3BoYXNlKHN2cywgU1ZTQl9QSEFTRV9JTklUMDEpOw0KPiA+ICsgICAgICAgICAgICAgICBy ZWxlYXNlX210a19zdnNfbG9jayhmbGFncyk7DQo+ID4gKyAgICAgICAgICAgICAgIHRpbWVfbGVm dCA9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbl90aW1l b3V0KCZzdnNiLT5pbml0X2NvbXBsZXRpb24sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOw0KPiA+ ICsgICAgICAgICAgICAgICBpZiAoIXRpbWVfbGVmdCkgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIHByX2VycigiJXM6IGluaXQwMSBjb21wbGV0aW9uIHRpbWVvdXRcbiIsIHN2c2ItPm5h bWUpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBnb3RvIGluaXQwMV9maW5pc2g7DQo+ID4gKyAgICAgICAgICAg ICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gK2luaXQwMV9maW5pc2g6DQo+ID4gKyAg ICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBpZHgrKykgew0KPiA+ICsg ICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4gKw0KPiA+ICsgICAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ZzYi0+b3BwX2NvdW50OyBpKyspDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgZGV2X3BtX29wcF9lbmFibGUoc3ZzYi0+ZGV2LCBzdnNiLT5v cHBfZnJlcXNbaV0pOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgaWYgKHJlZ3VsYXRvcl9z ZXRfbW9kZShzdnNiLT5idWNrLCBSRUdVTEFUT1JfTU9ERV9OT1JNQUwpKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHByX25vdGljZSgiJXM6IGZhaWwgdG8gc2V0IG5vcm1hbCBtb2RlOiAl ZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bmFtZSwg cmV0KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdnNiLT5tdGNtb3NfcmVxdWVz dCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbV9ydW50aW1lX3B1dF9zeW5j KHN2c2ItPmRldikpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIo IiVzOiB0dXJuIG10Y21vcyBvZmYgZmFpbDogJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bmFtZSwgcmV0KTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICBwbV9ydW50aW1lX2Rpc2FibGUoc3ZzYi0+ZGV2KTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBkZXZfcG1fZG9tYWluX2RldGFjaChzdnNiLT5kZXYsIDApOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWd1bGF0b3JfZGlzYWJsZShzdnNiLT5idWNrKSkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IGZhaWwgdG8g ZGlzYWJsZSAlcyBwb3dlcjogJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3ZzYi0+bmFtZSwgc3ZzYi0+YnVja19uYW1lLCByZXQpOw0KPiA+ICsgICAg ICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgY3B1X2xhdGVu Y3lfcW9zX3JlbW92ZV9yZXF1ZXN0KHFvc19yZXF1ZXN0KTsNCj4gPiArICAgICAgIGtmcmVlKHFv c19yZXF1ZXN0KTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHN2c19zdGFydChzdHJ1Y3QgbXRrX3N2cyAqc3ZzKQ0KPiA+ICt7 DQo+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICAgIHJldCA9IHN2c19pbml0 MDEoc3ZzKTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVy biByZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0gc3ZzX2luaXQwMihzdnMpOw0KPiA+ICsg ICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ ID4gKyAgICAgICBzdnNfbW9uX21vZGUoc3ZzKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBzdnNfbXQ4MTgzX2VmdXNlX3Bh cnNpbmcoc3RydWN0IG10a19zdnMgKnN2cykNCj4gPiArew0KPiA+ICsgICAgICAgY29uc3Qgc3Ry dWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCA9IHN2cy0+cGxhdGZvcm07DQo+ID4gKyAgICAgICBzdHJ1 Y3QgdGhlcm1hbF9wYXJhbWV0ZXIgdHA7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2 c2I7DQo+ID4gKyAgICAgICBib29sIG1vbl9tb2RlX3N1cHBvcnQgPSB0cnVlOw0KPiA+ICsgICAg ICAgaW50IGZvcm1hdFs2XSwgeF9yb29tdFs2XSwgdGJfcm9vbXQgPSAwOw0KPiA+ICsgICAgICAg c3RydWN0IG52bWVtX2NlbGwgKmNlbGw7DQo+ID4gKyAgICAgICBzaXplX3QgbGVuOw0KPiA+ICsg ICAgICAgdTMyIGlkeCwgaSwgZnRfcGdtLCBtdHMsIHRlbXAwLCB0ZW1wMSwgdGVtcDI7DQo+ID4g Kw0KPiA+ICsgICAgICAgaWYgKHN2c3AtPmZha2VfZWZ1c2UpIHsNCj4gPiArICAgICAgICAgICAg ICAgcHJfbm90aWNlKCJmYWtlIGVmdXNlXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzLT5l ZnVzZVswXSA9IDB4MDAzMTAwODA7DQo+ID4gKyAgICAgICAgICAgICAgIHN2cy0+ZWZ1c2VbMV0g PSAweGFiZmJmNzU3Ow0KPiA+ICsgICAgICAgICAgICAgICBzdnMtPmVmdXNlWzJdID0gMHg0N2M3 NDdjNzsNCj4gPiArICAgICAgICAgICAgICAgc3ZzLT5lZnVzZVszXSA9IDB4YWJmYmY3NTc7DQo+ ID4gKyAgICAgICAgICAgICAgIHN2cy0+ZWZ1c2VbNF0gPSAweGU3ZmNhMGVjOw0KPiA+ICsgICAg ICAgICAgICAgICBzdnMtPmVmdXNlWzVdID0gMHg0N2JmNGI4ODsNCj4gPiArICAgICAgICAgICAg ICAgc3ZzLT5lZnVzZVs2XSA9IDB4YWJmYjhmYTU7DQo+ID4gKyAgICAgICAgICAgICAgIHN2cy0+ ZWZ1c2VbN10gPSAweGFiZmIyMTdiOw0KPiA+ICsgICAgICAgICAgICAgICBzdnMtPmVmdXNlWzhd ID0gMHg0YmYzNGJlMTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzLT5lZnVzZVs5XSA9IDB4YWJm YjY3MGQ7DQo+ID4gKyAgICAgICAgICAgICAgIHN2cy0+ZWZ1c2VbMTZdID0gMHhhYmZiYzY1MzsN Cj4gPiArICAgICAgICAgICAgICAgc3ZzLT5lZnVzZVsxN10gPSAweDQ3ZjM0N2UxOw0KPiA+ICsg ICAgICAgICAgICAgICBzdnMtPmVmdXNlWzE4XSA9IDB4YWJmYmQ4NDg7DQo+ID4gKyAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHN2c3AtPmVmdXNlX251bTsgaSsr KQ0KPiA+ICsgICAgICAgICAgICAgICBpZiAoc3ZzLT5lZnVzZVtpXSkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBwcl9ub3RpY2UoIk1fSFdfUkVTJWQ6IDB4JTA4eFxuIiwgaSwgc3ZzLT5l ZnVzZVtpXSk7DQo+ID4gKw0KPiA+ICsgICAgICAgLyogc3ZzIGVmdXNlIHBhcnNpbmcgKi8NCj4g PiArICAgICAgIGZ0X3BnbSA9IChzdnMtPmVmdXNlWzBdID4+IDQpICYgR0VOTUFTSygzLCAwKTsN Cj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBp ZHgrKykgew0KPiA+ICsgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ ID4gKyAgICAgICAgICAgICAgIGlmIChmdF9wZ20gPD0gMSkNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBzdnNiLT5pbml0MDFfdm9sdF9mbGFnID0gU1ZTQl9JTklUMDFfVk9MVF9JR05PUkU7 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBzd2l0Y2ggKHN2c2ItPnN3X2lkKSB7DQo+ID4g KyAgICAgICAgICAgICAgIGNhc2UgU1ZTX0NQVV9MSVRUTEU6DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgc3ZzYi0+YmRlcyA9IHN2cy0+ZWZ1c2VbMTZdICYgR0VOTUFTSyg3LCAwKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5tZGVzID0gKHN2cy0+ZWZ1c2VbMTZdID4+ IDgpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5k Y2JkZXQgPSAoc3ZzLT5lZnVzZVsxNl0gPj4gMTYpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBzdnNiLT5kY21kZXQgPSAoc3ZzLT5lZnVzZVsxNl0gPj4gMjQp ICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5tdGRl cyAgPSAoc3ZzLT5lZnVzZVsxN10gPj4gMTYpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0X3BnbSA8PSAzKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdF9vZmZzZXQgKz0gMTA7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZzYi0+dm9sdF9vZmZzZXQgKz0gMjsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNfQ1BVX0JJRzoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzdnNiLT5iZGVzID0gc3ZzLT5lZnVzZVsxOF0gJiBHRU5NQVNLKDcs IDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm1kZXMgPSAoc3ZzLT5lZnVz ZVsxOF0gPj4gOCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHN2c2ItPmRjYmRldCA9IChzdnMtPmVmdXNlWzE4XSA+PiAxNikgJiBHRU5NQVNLKDcsIDApOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmRjbWRldCA9IChzdnMtPmVmdXNlWzE4 XSA+PiAyNCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2 c2ItPm10ZGVzICA9IHN2cy0+ZWZ1c2VbMTddICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0X3BnbSA8PSAzKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdF9vZmZzZXQgKz0gMTU7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZzYi0+dm9sdF9vZmZzZXQgKz0gMTI7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgU1ZTX0NDSToNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBzdnNiLT5iZGVzID0gc3ZzLT5lZnVzZVs0XSAmIEdFTk1BU0soNywgMCk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bWRlcyA9IChzdnMtPmVmdXNlWzRd ID4+IDgpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNi LT5kY2JkZXQgPSAoc3ZzLT5lZnVzZVs0XSA+PiAxNikgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPmRjbWRldCA9IChzdnMtPmVmdXNlWzRdID4+IDI0 KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bXRk ZXMgID0gKHN2cy0+ZWZ1c2VbNV0gPj4gMTYpICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ0X3BnbSA8PSAzKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+dm9sdF9vZmZzZXQgKz0gMTA7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3ZzYi0+dm9sdF9vZmZzZXQgKz0gMjsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNfR1BVOg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHN2c2ItPmJkZXMgPSBzdnMtPmVmdXNlWzZdICYgR0VOTUFTSyg3LCAwKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5tZGVzID0gKHN2cy0+ZWZ1c2VbNl0g Pj4gOCkgJiBHRU5NQVNLKDcsIDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2It PmRjYmRldCA9IChzdnMtPmVmdXNlWzZdID4+IDE2KSAmIEdFTk1BU0soNywgMCk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ZGNtZGV0ID0gKHN2cy0+ZWZ1c2VbNl0gPj4gMjQp ICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5tdGRl cyAgPSBzdnMtPmVmdXNlWzVdICYgR0VOTUFTSyg3LCAwKTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgaWYgKGZ0X3BnbSA+PSAyKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdnNiLT5mcmVxX2Jhc2UgPSA4MDAwMDAwMDA7IC8qIDgwME1IeiAqLw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ZHZ0X2ZpeGVkID0gMjsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBpZiAoc3ZzcC0+ZmFrZV9lZnVzZSkgew0KPiA+ICsgICAgICAg ICAgICAgICBzdnMtPnRoZXJtYWxfZWZ1c2VbMF0gPSAweDAyODczZjY5Ow0KPiA+ICsgICAgICAg ICAgICAgICBzdnMtPnRoZXJtYWxfZWZ1c2VbMV0gPSAweGExMWQ5MTQyOw0KPiA+ICsgICAgICAg ICAgICAgICBzdnMtPnRoZXJtYWxfZWZ1c2VbMl0gPSAweGEyNTI2OTAwOw0KPiA+ICsgICAgICAg fSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgLyogR2V0IHRoZXJtYWwgZWZ1c2UgYnkgbnZt ZW0gKi8NCj4gPiArICAgICAgICAgICAgICAgY2VsbCA9IG52bWVtX2NlbGxfZ2V0KHN2cy0+ZGV2 LCAiY2FsaWJyYXRpb24tZGF0YSIpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoSVNfRVJSKGNl bGwpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcHJfZXJyKCJubyB0aGVybWFsIGVm dXNlPyBkaXNhYmxlIG1vbiBtb2RlXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBm b3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBpZHgrKykgew0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bW9kZV9zdXBwb3J0ICY9IH5TVlNC X01PREVfTU9OOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQo+ID4gKyAgICAgICAgICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHN2cy0+dGhlcm1hbF9lZnVzZSA9ICh1MzIgKilu dm1lbV9jZWxsX3JlYWQoY2VsbCwgJmxlbik7DQo+ID4gKyAgICAgICAgICAgICAgIG52bWVtX2Nl bGxfcHV0KGNlbGwpOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIC8qIFRoZXJt YWwgZWZ1c2UgcGFyc2luZyAqLw0KPiA+ICsgICAgICAgdHAuYWRjX2dlX3QgPSAoc3ZzLT50aGVy bWFsX2VmdXNlWzFdID4+IDIyKSAmIEdFTk1BU0soOSwgMCk7DQo+ID4gKyAgICAgICB0cC5hZGNf b2VfdCA9IChzdnMtPnRoZXJtYWxfZWZ1c2VbMV0gPj4gMTIpICYgR0VOTUFTSyg5LCAwKTsNCj4g PiArDQo+ID4gKyAgICAgICB0cC5vX3Z0c21jdTEgPSAoc3ZzLT50aGVybWFsX2VmdXNlWzBdID4+ IDE3KSAmIEdFTk1BU0soOCwgMCk7DQo+ID4gKyAgICAgICB0cC5vX3Z0c21jdTIgPSAoc3ZzLT50 aGVybWFsX2VmdXNlWzBdID4+IDgpICYgR0VOTUFTSyg4LCAwKTsNCj4gPiArICAgICAgIHRwLm9f dnRzbWN1MyA9IHN2cy0+dGhlcm1hbF9lZnVzZVsxXSAmIEdFTk1BU0soOCwgMCk7DQo+ID4gKyAg ICAgICB0cC5vX3Z0c21jdTQgPSAoc3ZzLT50aGVybWFsX2VmdXNlWzJdID4+IDIzKSAmIEdFTk1B U0soOCwgMCk7DQo+ID4gKyAgICAgICB0cC5vX3Z0c21jdTUgPSAoc3ZzLT50aGVybWFsX2VmdXNl WzJdID4+IDUpICYgR0VOTUFTSyg4LCAwKTsNCj4gPiArICAgICAgIHRwLm9fdnRzYWJiID0gKHN2 cy0+dGhlcm1hbF9lZnVzZVsyXSA+PiAxNCkgJiBHRU5NQVNLKDgsIDApOw0KPiA+ICsNCj4gPiAr ICAgICAgIHRwLmRlZ2NfY2FsaSA9IChzdnMtPnRoZXJtYWxfZWZ1c2VbMF0gPj4gMSkgJiBHRU5N QVNLKDUsIDApOw0KPiA+ICsgICAgICAgdHAuYWRjX2NhbGlfZW5fdCA9IHN2cy0+dGhlcm1hbF9l ZnVzZVswXSAmIEJJVCgwKTsNCj4gPiArICAgICAgIHRwLm9fc2xvcGVfc2lnbiA9IChzdnMtPnRo ZXJtYWxfZWZ1c2VbMF0gPj4gNykgJiBCSVQoMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgdHAudHNf aWQgPSAoc3ZzLT50aGVybWFsX2VmdXNlWzFdID4+IDkpICYgQklUKDApOw0KPiA+ICsgICAgICAg dHAub19zbG9wZSA9IChzdnMtPnRoZXJtYWxfZWZ1c2VbMF0gPj4gMjYpICYgR0VOTUFTSyg1LCAw KTsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAodHAuYWRjX2NhbGlfZW5fdCA9PSAxKSB7DQo+ID4g KyAgICAgICAgICAgICAgIGlmICghdHAudHNfaWQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgdHAub19zbG9wZSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoKHRwLmFk Y19nZV90IDwgMjY1IHx8IHRwLmFkY19nZV90ID4gNzU4KSB8fA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgKHRwLmFkY19vZV90IDwgMjY1IHx8IHRwLmFkY19vZV90ID4gNzU4KSB8fA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgKHRwLm9fdnRzbWN1MSA8IC04IHx8IHRwLm9fdnRzbWN1MSA+IDQ4 NCkgfHwNCj4gPiArICAgICAgICAgICAgICAgICAgICh0cC5vX3Z0c21jdTIgPCAtOCB8fCB0cC5v X3Z0c21jdTIgPiA0ODQpIHx8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAodHAub192dHNtY3Uz IDwgLTggfHwgdHAub192dHNtY3UzID4gNDg0KSB8fA0KPiA+ICsgICAgICAgICAgICAgICAgICAg KHRwLm9fdnRzbWN1NCA8IC04IHx8IHRwLm9fdnRzbWN1NCA+IDQ4NCkgfHwNCj4gPiArICAgICAg ICAgICAgICAgICAgICh0cC5vX3Z0c21jdTUgPCAtOCB8fCB0cC5vX3Z0c21jdTUgPiA0ODQpIHx8 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAodHAub192dHNhYmIgPCAtOCB8fCB0cC5vX3Z0c2Fi YiA+IDQ4NCkgfHwNCj4gPiArICAgICAgICAgICAgICAgICAgICh0cC5kZWdjX2NhbGkgPCAxIHx8 IHRwLmRlZ2NfY2FsaSA+IDYzKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2Vy cigiYmFkIHRoZXJtYWwgZWZ1c2UgZGF0YSwgZGlzYWJsZSBtb24gbW9kZVxuIik7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgbW9uX21vZGVfc3VwcG9ydCA9IGZhbHNlOw0KPiA+ICsgICAg ICAgICAgICAgICB9DQo+ID4gKyAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICBw cl9lcnIoIm5vIHRoZXJtYWwgZWZ1c2UgZGF0YSwgZGlzYWJsZSBtb24gbW9kZVxuIik7DQo+ID4g KyAgICAgICAgICAgICAgIG1vbl9tb2RlX3N1cHBvcnQgPSBmYWxzZTsNCj4gPiArICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICBpZiAoIW1vbl9tb2RlX3N1cHBvcnQpIHsNCj4gPiArICAgICAg ICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4KyspIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+bW9kZV9zdXBwb3J0ICY9IH5TVlNCX01PREVf TU9OOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB0cC5nZSA9ICgo dHAuYWRjX2dlX3QgLSA1MTIpICogMTAwMDApIC8gNDA5NjsNCj4gPiArICAgICAgIHRwLm9lID0g KHRwLmFkY19vZV90IC0gNTEyKTsNCj4gPiArICAgICAgIHRwLmdhaW4gPSAoMTAwMDAgKyB0cC5n ZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9ybWF0WzBdID0gKHRwLm9fdnRzbWN1MSArIDMzNTAg LSB0cC5vZSk7DQo+ID4gKyAgICAgICBmb3JtYXRbMV0gPSAodHAub192dHNtY3UyICsgMzM1MCAt IHRwLm9lKTsNCj4gPiArICAgICAgIGZvcm1hdFsyXSA9ICh0cC5vX3Z0c21jdTMgKyAzMzUwIC0g dHAub2UpOw0KPiA+ICsgICAgICAgZm9ybWF0WzNdID0gKHRwLm9fdnRzbWN1NCArIDMzNTAgLSB0 cC5vZSk7DQo+ID4gKyAgICAgICBmb3JtYXRbNF0gPSAodHAub192dHNtY3U1ICsgMzM1MCAtIHRw Lm9lKTsNCj4gPiArICAgICAgIGZvcm1hdFs1XSA9ICh0cC5vX3Z0c2FiYiArIDMzNTAgLSB0cC5v ZSk7DQo+ID4gKw0KPiA+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IDY7IGkrKykNCj4gPiArICAg ICAgICAgICAgICAgeF9yb29tdFtpXSA9ICgoKGZvcm1hdFtpXSAqIDEwMDAwKSAvIDQwOTYpICog MTAwMDApIC8gdHAuZ2FpbjsNCj4gPiArDQo+ID4gKyAgICAgICB0ZW1wMCA9ICgxMDAwMCAqIDEw MDAwMCAvIHRwLmdhaW4pICogMTUgLyAxODsNCj4gPiArDQo+ID4gKyAgICAgICBpZiAoIXRwLm9f c2xvcGVfc2lnbikNCj4gPiArICAgICAgICAgICAgICAgbXRzID0gKHRlbXAwICogMTApIC8gKDE1 MzQgKyB0cC5vX3Nsb3BlICogMTApOw0KPiA+ICsgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAg ICAgICBtdHMgPSAodGVtcDAgKiAxMCkgLyAoMTUzNCAtIHRwLm9fc2xvcGUgKiAxMCk7DQo+ID4g Kw0KPiA+ICsgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBzdnNwLT5iYW5rX251bTsgaWR4Kysp IHsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYiA9ICZzdnNwLT5iYW5rc1tpZHhdOw0KPiA+ICsg ICAgICAgICAgICAgICBzdnNiLT5tdHMgPSBtdHM7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg ICBzd2l0Y2ggKHN2c2ItPnN3X2lkKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNhc2UgU1ZTX0NQ VV9MSVRUTEU6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgdGJfcm9vbXQgPSB4X3Jvb210 WzNdOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAg ICAgICBjYXNlIFNWU19DUFVfQklHOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHRiX3Jv b210ID0geF9yb29tdFs0XTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4g PiArICAgICAgICAgICAgICAgY2FzZSBTVlNfQ0NJOg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHRiX3Jvb210ID0geF9yb29tdFszXTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNfR1BVOg0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHRiX3Jvb210ID0geF9yb29tdFsxXTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgZGVmYXVsdDoNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgdGVtcDAgPSAodHAuZGVnY19jYWxpICogMTAgLyAyKTsNCj4gPiAr ICAgICAgICAgICAgICAgdGVtcDEgPSAoKDEwMDAwICogMTAwMDAwIC8gNDA5NiAvIHRwLmdhaW4p ICoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgdHAub2UgKyB0Yl9yb29tdCAqIDEwKSAq IDE1IC8gMTg7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIXRwLm9fc2xvcGVfc2ln bikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB0ZW1wMiA9IHRlbXAxICogMTAwIC8gKDE1 MzQgKyB0cC5vX3Nsb3BlICogMTApOw0KPiA+ICsgICAgICAgICAgICAgICBlbHNlDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgdGVtcDIgPSB0ZW1wMSAqIDEwMCAvICgxNTM0IC0gdHAub19z bG9wZSAqIDEwKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIHN2c2ItPmJ0cyA9ICh0ZW1w MCArIHRlbXAyIC0gMjUwKSAqIDQgLyAxMDsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICByZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgc3ZzX2lz X3N1cHBvcnRlZChzdHJ1Y3QgbXRrX3N2cyAqc3ZzKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBjb25z dCBzdHJ1Y3Qgc3ZzX3BsYXRmb3JtICpzdnNwID0gc3ZzLT5wbGF0Zm9ybTsNCj4gPiArICAgICAg IHN0cnVjdCBudm1lbV9jZWxsICpjZWxsOw0KPiA+ICsgICAgICAgc2l6ZV90IGxlbjsNCj4gPiAr ICAgICAgIGJvb2wgcmV0Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdnNwLT5mYWtlX2VmdXNl KSB7DQo+ID4gKyAgICAgICAgICAgICAgIGxlbiA9IHN2c3AtPmVmdXNlX251bSAqIHNpemVvZih1 MzIpOw0KPiA+ICsgICAgICAgICAgICAgICBzdnMtPmVmdXNlID0gZGV2bV9remFsbG9jKHN2cy0+ ZGV2LCBsZW4sIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIXN2cy0+ZWZ1 c2UpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIm5vIG1lbW9yeSBmb3Ig YWxsb2NhdGluZyBzdnNfZWZ1c2VcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgbGVuID0gc3ZzcC0+dGhlcm1hbF9lZnVzZV9udW0gKiBzaXplb2YodTMyKTsNCj4gPiAr ICAgICAgICAgICAgICAgc3ZzLT50aGVybWFsX2VmdXNlID0gZGV2bV9remFsbG9jKHN2cy0+ZGV2 LCBsZW4sIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoIXN2cy0+dGhlcm1h bF9lZnVzZSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2Vycigibm8gbWVtb3J5 IGZvciBhbGxvY2F0aW5nIHN2c190aGVybWFsX2VmdXNlXG4iKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgIGdvdG8gc3ZzcF9lZnVzZV9wYXJzaW5nOw0KPiA+ICsgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgIC8qIEdldCBzdnMgZWZ1c2UgYnkgbnZtZW0gKi8NCj4gPiAr ICAgICAgIGNlbGwgPSBudm1lbV9jZWxsX2dldChzdnMtPmRldiwgInN2cy1jYWxpYnJhdGlvbi1k YXRhIik7DQo+ID4gKyAgICAgICBpZiAoSVNfRVJSKGNlbGwpKSB7DQo+ID4gKyAgICAgICAgICAg ICAgIHByX2Vycigibm8gXCJzdnMtY2FsaWJyYXRpb24tZGF0YVwiIGZyb20gZHRzPyBkaXNhYmxl IHN2c1xuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gPiArICAgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgICBzdnMtPmVmdXNlID0gKHUzMiAqKW52bWVtX2NlbGxfcmVh ZChjZWxsLCAmbGVuKTsNCj4gPiArICAgICAgIG52bWVtX2NlbGxfcHV0KGNlbGwpOw0KPiA+ICsN Cj4gPiArICAgICAgIGlmICghc3ZzLT5lZnVzZVtzdnNwLT5lZnVzZV9jaGVja10pIHsNCj4gPiAr ICAgICAgICAgICAgICAgcHJfZXJyKCJzdnNfZWZ1c2VbJXVdID0gMHgleD9cbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICBzdnNwLT5lZnVzZV9jaGVjaywgc3ZzLT5lZnVzZVtzdnNwLT5l ZnVzZV9jaGVja10pOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQo+ID4gKyAg ICAgICB9DQo+ID4gKw0KPiA+ICtzdnNwX2VmdXNlX3BhcnNpbmc6DQo+ID4gKyAgICAgICByZXQg PSBzdnNwLT5lZnVzZV9wYXJzaW5nKHN2cyk7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNfcmVzb3VyY2Vfc2V0dXAoc3Ry dWN0IG10a19zdnMgKnN2cykNCj4gPiArew0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHN2c19w bGF0Zm9ybSAqc3ZzcCA9IHN2cy0+cGxhdGZvcm07DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2Jh bmsgKnN2c2I7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Ow0KPiA+ ICsgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCA9IE5VTEw7DQo+ID4gKyAgICAgICBzdHJ1 Y3QgZGV2X3BtX29wcCAqb3BwOw0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmcmVxOw0KPiA+ ICsgICAgICAgaW50IGNvdW50LCByZXQ7DQo+ID4gKyAgICAgICB1MzIgaWR4LCBpOw0KPiA+ICsN Cj4gPiArICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlkeCsrKSB7 DQo+ID4gKyAgICAgICAgICAgICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICAgIHN3aXRjaCAoc3ZzYi0+c3dfaWQpIHsNCj4gPiArICAgICAgICAg ICAgICAgY2FzZSBTVlNfQ1BVX0xJVFRMRToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBz dnNiLT5uYW1lID0gIlNWU19DUFVfTElUVExFIjsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNfQ1BVX0JJRzoNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lID0gIlNWU19DUFVfQklHIjsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgY2FzZSBTVlNf Q0NJOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUgPSAiU1ZTX0NDSSI7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAg IGNhc2UgU1ZTX0dQVToNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5uYW1lID0g IlNWU19HUFUiOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAg ICAgICAgICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIFdBUk5fT04o MSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAg ICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIC8qIEFkZCBzdnMgYmFu ayBkZXZpY2UgZm9yIG9wcC10YWJsZS9tdGNtb3MvYnVjayBjb250cm9sICovDQo+ID4gKyAgICAg ICAgICAgICAgIHBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2Moc3ZzYi0+bmFtZSwgMCk7DQo+ ID4gKyAgICAgICAgICAgICAgIGlmICghcGRldikgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIHByX2VycigiJXM6IGZhaWwgdG8gYWxsb2MgcGRldiBmb3Igc3ZzX2JhbmtcbiIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUpOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHN2cy0+ZGV2 LT5vZl9ub2RlLCBucCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZl9kZXZp Y2VfaXNfY29tcGF0aWJsZShucCwgc3ZzYi0+b2ZfY29tcGF0aWJsZSkpIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBkZXYtPmRldi5vZl9ub2RlID0gbnA7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICAgIHJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7DQo+ID4gKyAgICAgICAgICAgICAg IGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBmYWls IHRvIGFkZCBzdnNfYmFuayBkZXZpY2U6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdnNiLT5uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgIHN2c2ItPmRldiA9ICZwZGV2LT5kZXY7DQo+ID4gKyAgICAgICAgICAgICAgIGRldl9z ZXRfZHJ2ZGF0YShzdnNiLT5kZXYsIHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGRl dl9wbV9vcHBfb2ZfYWRkX3RhYmxlKHN2c2ItPmRldik7DQo+ID4gKyAgICAgICAgICAgICAgIGlm IChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBmYWlsIHRv IGFkZCBvcHAgdGFibGU6ICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdnNiLT5uYW1lLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy ZXQ7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIG11 dGV4X2luaXQoJnN2c2ItPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYi0+ YnVjayA9IGRldm1fcmVndWxhdG9yX2dldF9vcHRpb25hbChzdnNiLT5kZXYsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+ YnVja19uYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgaWYgKElTX0VSUihzdnNiLT5idWNrKSkg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiJXM6IGNhbm5vdCBnZXQgcmVn dWxhdG9yIFwiJXMtc3VwcGx5XCJcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2c2ItPm5hbWUsIHN2c2ItPmJ1Y2tfbmFtZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIFBUUl9FUlIoc3ZzYi0+YnVjayk7DQo+ID4gKyAgICAgICAgICAgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGNvdW50ID0gZGV2X3BtX29wcF9nZXRfb3BwX2Nv dW50KHN2c2ItPmRldik7DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdnNiLT5vcHBfY291bnQg IT0gY291bnQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBvcHBf Y291bnQgbm90IFwiJXVcIiBidXQgZ2V0IFwiJWRcIj9cbiIsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUsIHN2c2ItPm9wcF9jb3VudCwgY291bnQpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsNCj4gPiArICAgICAgICAgICAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgZm9yIChpID0gMCwgZnJlcSA9IFUzMl9N QVg7IGkgPCBzdnNiLT5vcHBfY291bnQ7IGkrKywgZnJlcS0tKSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgb3BwID0gZGV2X3BtX29wcF9maW5kX2ZyZXFfZmxvb3Ioc3ZzYi0+ZGV2LCAm ZnJlcSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX0VSUihvcHApKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiBlcnJvciBvcHAg ZW50cnkhISwgZXJyID0gJWxkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN2c2ItPm5hbWUsIFBUUl9FUlIob3BwKSk7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihvcHApOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgc3ZzYi0+b3Bw X2ZyZXFzW2ldID0gZnJlcTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiLT5vcHBf dm9sdHNbaV0gPSBkZXZfcG1fb3BwX2dldF92b2x0YWdlKG9wcCk7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3ZzYi0+ZnJlcXNfcGN0W2ldID0gcGVyY2VudChzdnNiLT5vcHBfZnJlcXNb aV0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdnNiLT5mcmVxX2Jhc2UpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGRldl9w bV9vcHBfcHV0KG9wcCk7DQo+ID4gKyAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBzdnNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0 cnVjdCBtdGtfc3ZzICpzdnMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArICAgICAgIGNv bnN0IHN0cnVjdCBzdnNfcGxhdGZvcm0gKnN2c3AgPSBzdnMtPnBsYXRmb3JtOw0KPiA+ICsgICAg ICAgc3RydWN0IHN2c19iYW5rICpzdnNiOw0KPiA+ICsgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn czsNCj4gPiArICAgICAgIGludCByZXQ7DQo+ID4gKyAgICAgICB1MzIgaWR4Ow0KPiA+ICsNCj4g PiArICAgICAgIC8qIFdhaXQgaWYgdGhlcmUgaXMgcHJvY2Vzc2luZyBzdnNfaXNyKCkuIFN1c3Bl bmQgYWxsIGJhbmtzLiAqLw0KPiA+ICsgICAgICAgZmxhZ3MgPSBjbGFpbV9tdGtfc3ZzX2xvY2so KTsNCj4gPiArICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlkeCsr KSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4gPiAr ICAgICAgICAgICAgICAgc3ZzLT5iYW5rID0gc3ZzYjsNCj4gPiArICAgICAgICAgICAgICAgc3Zz X3N3aXRjaF9iYW5rKHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c193cml0ZWwoc3ZzLCBT VlNFTl9PRkYsIFNWU0VOKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIElO VFNUU19DTEVBTiwgSU5UU1RTKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYi0+c3VzcGVuZGVk ID0gdHJ1ZTsNCj4gPiArICAgICAgIH0NCj4gPiArICAgICAgIHJlbGVhc2VfbXRrX3N2c19sb2Nr KGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IHN2c3AtPmJh bmtfbnVtOyBpZHgrKykgew0KPiA+ICsgICAgICAgICAgICAgICBzdnNiID0gJnN2c3AtPmJhbmtz W2lkeF07DQo+ID4gKyAgICAgICAgICAgICAgIGlmIChzdnNiLT5waGFzZSAhPSBTVlNCX1BIQVNF X0lOSVQwMSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPnBoYXNlID0gU1ZT Ql9QSEFTRV9FUlJPUjsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzdnNiX3NldF92b2x0 cyhzdnNiLCB0cnVlKTsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAgIGlmIChzdnNwLT5uZWVkX2h3X3Jlc2V0KSB7DQo+ID4gKyAgICAgICAg ICAgICAgIHJldCA9IGRldmljZV9yZXNldChzdnMtPmRldik7DQo+ID4gKyAgICAgICAgICAgICAg IGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIoIiVzOiByZXQg PSAlZFxuIiwgX19mdW5jX18sIHJldCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsNCj4gPiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShzdnMtPm1haW5fY2xrKTsNCj4gPiArDQo+ ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNf cmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IG10 a19zdnMgKnN2cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsgICAgICAgY29uc3Qgc3Ry dWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCA9IHN2cy0+cGxhdGZvcm07DQo+ID4gKyAgICAgICBzdHJ1 Y3Qgc3ZzX2JhbmsgKnN2c2I7DQo+ID4gKyAgICAgICBpbnQgcmV0Ow0KPiA+ICsgICAgICAgdTMy IGlkeDsNCj4gPiArDQo+ID4gKyAgICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc3ZzLT5t YWluX2Nsayk7DQo+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgIHBy X2VycigiY2Fubm90IGVuYWJsZSBtYWluX2NsaywgZGlzYWJsZSBzdnNcbiIpOw0KPiA+ICsgICAg ICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg IGZvciAoaWR4ID0gMDsgaWR4IDwgc3ZzcC0+YmFua19udW07IGlkeCsrKSB7DQo+ID4gKyAgICAg ICAgICAgICAgIHN2c2IgPSAmc3ZzcC0+YmFua3NbaWR4XTsNCj4gPiArICAgICAgICAgICAgICAg c3ZzYi0+c3VzcGVuZGVkID0gZmFsc2U7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAg ICAgcmV0ID0gc3ZzX2luaXQwMihzdnMpOw0KPiA+ICsgICAgICAgaWYgKHJldCkNCj4gPiArICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICAgICBzdnNfbW9uX21vZGUo c3ZzKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBzdnNfZGVidWdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAq dikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5rICpzdnNiID0gKHN0cnVjdCBz dnNfYmFuayAqKW0tPnByaXZhdGU7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKHN2c2ItPnBoYXNl ID09IFNWU0JfUEhBU0VfSU5JVDAxKQ0KPiA+ICsgICAgICAgICAgICAgICBzZXFfcHV0cyhtLCAi aW5pdDFcbiIpOw0KPiA+ICsgICAgICAgZWxzZSBpZiAoc3ZzYi0+cGhhc2UgPT0gU1ZTQl9QSEFT RV9JTklUMDIpDQo+ID4gKyAgICAgICAgICAgICAgIHNlcV9wdXRzKG0sICJpbml0MlxuIik7DQo+ ID4gKyAgICAgICBlbHNlIGlmIChzdnNiLT5waGFzZSA9PSBTVlNCX1BIQVNFX01PTikNCj4gPiAr ICAgICAgICAgICAgICAgc2VxX3B1dHMobSwgIm1vbiBtb2RlXG4iKTsNCj4gPiArICAgICAgIGVs c2UgaWYgKHN2c2ItPnBoYXNlID09IFNWU0JfUEhBU0VfRVJST1IpDQo+ID4gKyAgICAgICAgICAg ICAgIHNlcV9wdXRzKG0sICJkaXNhYmxlZFxuIik7DQo+ID4gKyAgICAgICBlbHNlDQo+ID4gKyAg ICAgICAgICAgICAgIHNlcV9wdXRzKG0sICJ1bmtub3duXG4iKTsNCj4gPiArDQo+ID4gKyAgICAg ICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3Qgc3ZzX2RlYnVn X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQ0KPiA+ ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2c2IgPSAoc3RydWN0IHN2c19iYW5r ICopUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSk7DQo+ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3N2 cyAqc3ZzID0gZGV2X2dldF9kcnZkYXRhKHN2c2ItPmRldik7DQo+ID4gKyAgICAgICB1bnNpZ25l ZCBsb25nIGZsYWdzOw0KPiA+ICsgICAgICAgaW50IGVuYWJsZWQsIHJldDsNCj4gPiArICAgICAg IGNoYXIgKmJ1ZiA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKGNvdW50ID49IFBBR0Vf U0laRSkNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsg ICAgICAgYnVmID0gKGNoYXIgKiltZW1kdXBfdXNlcl9udWwoYnVmZmVyLCBjb3VudCk7DQo+ID4g KyAgICAgICBpZiAoSVNfRVJSKGJ1ZikpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJf RVJSKGJ1Zik7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0ga3N0cnRvaW50KGJ1ZiwgMTAsICZl bmFibGVkKTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVy biByZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgaWYgKCFlbmFibGVkKSB7DQo+ID4gKyAgICAgICAg ICAgICAgIGZsYWdzID0gY2xhaW1fbXRrX3N2c19sb2NrKCk7DQo+ID4gKyAgICAgICAgICAgICAg IHN2cy0+YmFuayA9IHN2c2I7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c2ItPm1vZGVfc3VwcG9y dCA9IFNWU0JfTU9ERV9BTExfRElTQUJMRTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3N3aXRj aF9iYW5rKHN2cyk7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c193cml0ZWwoc3ZzLCBTVlNFTl9P RkYsIFNWU0VOKTsNCj4gPiArICAgICAgICAgICAgICAgc3ZzX3dyaXRlbChzdnMsIElOVFNUU19D TEVBTiwgSU5UU1RTKTsNCj4gPiArICAgICAgICAgICAgICAgcmVsZWFzZV9tdGtfc3ZzX2xvY2so ZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc3ZzYi0+cGhhc2UgPSBTVlNCX1BI QVNFX0VSUk9SOw0KPiA+ICsgICAgICAgICAgICAgICBzdnNiX3NldF92b2x0cyhzdnNiLCB0cnVl KTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBrZnJlZShidWYpOw0KPiA+ICsN Cj4gPiArICAgICAgIHJldHVybiBjb3VudDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArcHJvY19mb3Bz X3J3KHN2c19kZWJ1Zyk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHN2c19kdW1wX3Byb2Nfc2hv dyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVj dCBtdGtfc3ZzICpzdnMgPSAoc3RydWN0IG10a19zdnMgKiltLT5wcml2YXRlOw0KPiA+ICsgICAg ICAgY29uc3Qgc3RydWN0IHN2c19wbGF0Zm9ybSAqc3ZzcCA9IHN2cy0+cGxhdGZvcm07DQo+ID4g KyAgICAgICBzdHJ1Y3Qgc3ZzX2JhbmsgKnN2c2I7DQo+ID4gKyAgICAgICB1bnNpZ25lZCBsb25n IHN2c19yZWdfYWRkcjsNCj4gPiArICAgICAgIHUzMiBpZHgsIGksIGo7DQo+ID4gKw0KPiA+ICsg ICAgICAgZm9yIChpID0gMDsgaSA8IHN2c3AtPmVmdXNlX251bTsgaSsrKQ0KPiA+ICsgICAgICAg ICAgICAgICBpZiAoc3ZzLT5lZnVzZSAmJiBzdnMtPmVmdXNlW2ldKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgIHNlcV9wcmludGYobSwgIk1fSFdfUkVTJWQgPSAweCUwOHhcbiIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzdnMtPmVmdXNlW2ldKTsNCj4g PiArDQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3ZzcC0+dGhlcm1hbF9lZnVzZV9udW07 IGkrKykNCj4gPiArICAgICAgICAgICAgICAgaWYgKHN2cy0+dGhlcm1hbF9lZnVzZSkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKG0sICJUSEVSTUFMX0VGVVNFJWQgPSAw eCUwOHhcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzdnMt PnRoZXJtYWxfZWZ1c2VbaV0pOw0KPiA+ICsNCj4gPiArICAgICAgIGZvciAoaWR4ID0gMDsgaWR4 IDwgc3ZzcC0+YmFua19udW07IGlkeCsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIHN2c2IgPSAm c3ZzcC0+YmFua3NbaWR4XTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaSA9IFNW U0JfUEhBU0VfSU5JVDAxOyBpIDw9IFNWU0JfUEhBU0VfTU9OOyBpKyspIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKG0sICJCYW5rX251bWJlciA9ICV1XG4iLCBzdnNi LT5iYW5rX2lkKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBT VlNCX1BIQVNFX01PTikNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcV9w cmludGYobSwgIm1vZGUgPSBpbml0JWRcbiIsIGkgKyAxKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXFfcHV0 cyhtLCAibW9kZSA9IG1vblxuIik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGZvciAoaiA9IFRFTVBNT05DVEwwOyBqIDwgcmVnX251bTsgaisrKSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdnNfcmVnX2FkZHIgPSAodW5zaWduZWQgbG9uZykoc3Zz LT5iYXNlICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdnNwLT5yZWdzW2pdKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlcV9wcmludGYobSwgIjB4JTA4bHggPSAweCUwOHhcbiIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c19yZWdfYWRkciwg c3ZzYi0+cmVnX2RhdGFbaV1bal0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0NCj4g PiArICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtwcm9jX2ZvcHNfcm8oc3ZzX2R1bXApOw0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBzdnNfc3RhdHVzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBzdnNfYmFuayAqc3ZzYiA9 IChzdHJ1Y3Qgc3ZzX2JhbmsgKiltLT5wcml2YXRlOw0KPiA+ICsgICAgICAgc3RydWN0IGRldl9w bV9vcHAgKm9wcDsNCj4gPiArICAgICAgIHVuc2lnbmVkIGxvbmcgZnJlcTsNCj4gPiArICAgICAg IGludCB0em9uZV90ZW1wLCByZXQ7DQo+ID4gKyAgICAgICB1MzIgaTsNCj4gPiArDQo+ID4gKyAg ICAgICByZXQgPSBzdnNiX2dldF96b25lX3RlbXBlcmF0dXJlKHN2c2IsICZ0em9uZV90ZW1wKTsN Cj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIHNlcV9wcmludGYobSwg IiVzOiBjYW5ub3QgZ2V0IHpvbmUgXCIlc1wiIHRlbXBlcmF0dXJlXG4iLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUsIHN2c2ItPnR6b25lX25hbWUpOw0KPiA+ICsg ICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICBzZXFfcHJpbnRmKG0sICIlczogdGVtcGVy YXR1cmUgPSAlZFxuIiwgc3ZzYi0+bmFtZSwgdHpvbmVfdGVtcCk7DQo+ID4gKw0KPiA+ICsgICAg ICAgZm9yIChpID0gMCwgZnJlcSA9IFUzMl9NQVg7IGkgPCBzdnNiLT5vcHBfY291bnQ7IGkrKywg ZnJlcS0tKSB7DQo+ID4gKyAgICAgICAgICAgICAgIG9wcCA9IGRldl9wbV9vcHBfZmluZF9mcmVx X2Zsb29yKHN2c2ItPmRldiwgJmZyZXEpOw0KPiA+ICsgICAgICAgICAgICAgICBpZiAoSVNfRVJS KG9wcCkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBzZXFfcHJpbnRmKG0sICIlczog ZXJyb3Igb3BwIGVudHJ5ISEsIGVyciA9ICVsZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUsIFBUUl9FUlIob3BwKSk7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIob3BwKTsNCj4gPiArICAgICAgICAgICAgICAg fQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAib3BwX2ZyZXFzWyUw MnVdOiAlbHUsIHZvbHRzWyUwMnVdOiAlbHUsICIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgaSwgZnJlcSwgaSwgZGV2X3BtX29wcF9nZXRfdm9sdGFnZShvcHApKTsNCj4gPiArICAg ICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAic3ZzYl92b2x0c1slMDJ1XTogMHgleCwgZnJlcXNf cGN0WyUwMnVdOiAldVxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBzdnNi LT52b2x0c1tpXSwgaSwgc3ZzYi0+ZnJlcXNfcGN0W2ldKTsNCj4gPiArICAgICAgICAgICAgICAg ZGV2X3BtX29wcF9wdXQob3BwKTsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArcHJvY19mb3BzX3JvKHN2c19zdGF0dXMpOw0K PiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNfdm9sdF9vZmZzZXRfcHJvY19zaG93KHN0cnVjdCBz ZXFfZmlsZSAqbSwgdm9pZCAqdikNCj4gPiArew0KPiA+ICsgICAgICAgc3RydWN0IHN2c19iYW5r ICpzdnNiID0gKHN0cnVjdCBzdnNfYmFuayAqKW0tPnByaXZhdGU7DQo+ID4gKw0KPiA+ICsgICAg ICAgc2VxX3ByaW50ZihtLCAiJWRcbiIsIHN2c2ItPnZvbHRfb2Zmc2V0KTsNCj4gPiArDQo+ID4g KyAgICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3Qgc3Zz X3ZvbHRfb2Zmc2V0X3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZl ciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg Y291bnQsIGxvZmZfdCAqcG9zKQ0KPiA+ICt7DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2Jhbmsg KnN2c2IgPSAoc3RydWN0IHN2c19iYW5rICopUERFX0RBVEEoZmlsZV9pbm9kZShmaWxlKSk7DQo+ ID4gKyAgICAgICBjaGFyICpidWYgPSBOVUxMOw0KPiA+ICsgICAgICAgczMyIHZvbHRfb2Zmc2V0 Ow0KPiA+ICsNCj4gPiArICAgICAgIGlmIChjb3VudCA+PSBQQUdFX1NJWkUpDQo+ID4gKyAgICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICAgIGJ1ZiA9IChjaGFy ICopbWVtZHVwX3VzZXJfbnVsKGJ1ZmZlciwgY291bnQpOw0KPiA+ICsgICAgICAgaWYgKElTX0VS UihidWYpKQ0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihidWYpOw0KPiA+ICsN Cj4gPiArICAgICAgIGlmICgha3N0cnRvaW50KGJ1ZiwgMTAsICZ2b2x0X29mZnNldCkpIHsNCj4g PiArICAgICAgICAgICAgICAgc3ZzYi0+dm9sdF9vZmZzZXQgPSB2b2x0X29mZnNldDsNCj4gPiAr ICAgICAgICAgICAgICAgc3ZzYl9zZXRfdm9sdHMoc3ZzYiwgdHJ1ZSk7DQo+ID4gKyAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgICAga2ZyZWUoYnVmKTsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1 cm4gY291bnQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3Byb2NfZm9wc19ydyhzdnNfdm9sdF9vZmZz ZXQpOw0KPiA+ICsNCj4gPiArc3RhdGljIGludCBzdnNfY3JlYXRlX3N2c19wcm9jZnMoc3RydWN0 IG10a19zdnMgKnN2cykNCj4gPiArew0KPiA+ICsgICAgICAgY29uc3Qgc3RydWN0IHN2c19wbGF0 Zm9ybSAqc3ZzcCA9IHN2cy0+cGxhdGZvcm07DQo+ID4gKyAgICAgICBzdHJ1Y3Qgc3ZzX2Jhbmsg KnN2c2I7DQo+ID4gKyAgICAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnN2c19kaXIsICpiYW5r X2RpcjsNCj4gPiArICAgICAgIHUzMiBpZHgsIGk7DQo+ID4gKw0KPiA+ICsgICAgICAgc3RydWN0 IHBlbnRyeSB7DQo+ID4gKyAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7DQo+ID4gKyAg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwcm9jX29wcyAqZm9wczsNCj4gPiArICAgICAgIH07 DQo+ID4gKw0KPiA+ICsgICAgICAgc3RydWN0IHBlbnRyeSBzdnNfZW50cmllc1tdID0gew0KPiA+ ICsgICAgICAgICAgICAgICBwcm9jX2VudHJ5KHN2c19kdW1wKSwNCj4gPiArICAgICAgIH07DQo+ ID4gKw0KPiA+ICsgICAgICAgc3RydWN0IHBlbnRyeSBiYW5rX2VudHJpZXNbXSA9IHsNCj4gPiAr ICAgICAgICAgICAgICAgcHJvY19lbnRyeShzdnNfZGVidWcpLA0KPiA+ICsgICAgICAgICAgICAg ICBwcm9jX2VudHJ5KHN2c19zdGF0dXMpLA0KPiA+ICsgICAgICAgICAgICAgICBwcm9jX2VudHJ5 KHN2c192b2x0X29mZnNldCksDQo+ID4gKyAgICAgICB9Ow0KPiA+ICsNCj4gPiArICAgICAgIHN2 c19kaXIgPSBwcm9jX21rZGlyKCJzdnMiLCBOVUxMKTsNCj4gPiArICAgICAgIGlmICghc3ZzX2Rp cikgew0KPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoIm1rZGlyIC9wcm9jL3N2cyBmYWlsZWRc biIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVQRVJNOw0KPiA+ICsgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN2c19lbnRyaWVz KTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgIGlmICghcHJvY19jcmVhdGVfZGF0YShzdnNf ZW50cmllc1tpXS5uYW1lLCAwNjY0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3ZzX2Rpciwgc3ZzX2VudHJpZXNbaV0uZm9wcywgc3ZzKSkgew0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgIHByX2VycigiY3JlYXRlIC9wcm9jL3N2cy8lcyBmYWlsZWRcbiIs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2c19lbnRyaWVzW2ldLm5hbWUp Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07DQo+ID4gKyAgICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGlkeCA9 IDA7IGlkeCA8IHN2c3AtPmJhbmtfbnVtOyBpZHgrKykgew0KPiA+ICsgICAgICAgICAgICAgICBz dnNiID0gJnN2c3AtPmJhbmtzW2lkeF07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICBpZiAo c3ZzYi0+bW9kZV9zdXBwb3J0ID09IFNWU0JfTU9ERV9BTExfRElTQUJMRSkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgIGJh bmtfZGlyID0gcHJvY19ta2RpcihzdnNiLT5uYW1lLCBzdnNfZGlyKTsNCj4gPiArICAgICAgICAg ICAgICAgaWYgKCFiYW5rX2Rpcikgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHByX2Vy cigibWtkaXIgL3Byb2Mvc3ZzLyVzIGZhaWxlZFxuIiwgc3ZzYi0+bmFtZSk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUEVSTTsNCj4gPiArICAgICAgICAgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYmFu a19lbnRyaWVzKTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9j X2NyZWF0ZV9kYXRhKGJhbmtfZW50cmllc1tpXS5uYW1lLCAwNjY0LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYW5rX2RpciwgYmFua19lbnRyaWVz W2ldLmZvcHMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN2c2IpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcl9lcnIo ImNyZWF0ZSAvcHJvYy9zdnMvJXMvJXMgZmFpbGVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN2c2ItPm5hbWUsIGJhbmtfZW50cmllc1tpXS5uYW1lKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRVBFUk07DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICB9DQo+ID4gKyAg ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBzdHJ1Y3Qgc3ZzX2Jhbmtfb3BzIHN2c19tdDgxODNfYmFua3Nfb3BzID0gew0KPiA+ ICsgICAgICAgLnNldF9mcmVxc19wY3QgID0gc3ZzX3NldF9mcmVxc19wY3RfdjIsDQo+ID4gKyAg ICAgICAuZ2V0X3ZvcHMgICAgICAgPSBzdnNfZ2V0X3ZvcHNfdjIsDQo+ID4gK307DQo+ID4gKw0K PiA+ICtzdGF0aWMgc3RydWN0IHN2c19iYW5rIHN2c19tdDgxODNfYmFua3NbNF0gPSB7DQo+ID4g KyAgICAgICB7DQo+ID4gKyAgICAgICAgICAgICAgIC5vZl9jb21wYXRpYmxlICAgICAgICAgID0g Im1lZGlhdGVrLG10ODE4My1zdnMtY3B1LWxpdHRsZSIsDQo+ID4gKyAgICAgICAgICAgICAgIC5z d19pZCAgICAgICAgICAgICAgICAgID0gU1ZTX0NQVV9MSVRUTEUsDQo+ID4gKyAgICAgICAgICAg ICAgIC5iYW5rX2lkICAgICAgICAgICAgICAgID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLm9w cyAgICAgICAgICAgICAgICAgICAgPSAmc3ZzX210ODE4M19iYW5rc19vcHMsDQo+ID4gKyAgICAg ICAgICAgICAgIC50em9uZV9uYW1lICAgICAgICAgICAgID0gInR6dHM0IiwNCj4gPiArICAgICAg ICAgICAgICAgLmJ1Y2tfbmFtZSAgICAgICAgICAgICAgPSAidmNwdS1saXR0bGUiLA0KPiA+ICsg ICAgICAgICAgICAgICAubXRjbW9zX3JlcXVlc3QgICAgICAgICA9IGZhbHNlLA0KPiA+ICsgICAg ICAgICAgICAgICAuaW5pdDAxX3ZvbHRfZmxhZyAgICAgICA9IFNWU0JfSU5JVDAxX1ZPTFRfSU5D X09OTFksDQo+ID4gKyAgICAgICAgICAgICAgIC5tb2RlX3N1cHBvcnQgICAgICAgICAgID0gU1ZT Ql9NT0RFX0lOSVQwMSB8IFNWU0JfTU9ERV9JTklUMDIsDQo+ID4gKyAgICAgICAgICAgICAgIC5v cHBfY291bnQgICAgICAgICAgICAgID0gMTYsDQo+ID4gKyAgICAgICAgICAgICAgIC5mcmVxX2Jh c2UgICAgICAgICAgICAgID0gMTk4OTAwMDAwMCwNCj4gPiArICAgICAgICAgICAgICAgLnZib290 ICAgICAgICAgICAgICAgICAgPSAweDMwLA0KPiA+ICsgICAgICAgICAgICAgICAudm9sdF9zdGVw ICAgICAgICAgICAgICA9IDYyNTAsDQo+ID4gKyAgICAgICAgICAgICAgIC52b2x0X2Jhc2UgICAg ICAgICAgICAgID0gNTAwMDAwLA0KPiA+ICsgICAgICAgICAgICAgICAudm9sdF9vZmZzZXQgICAg ICAgICAgICA9IDAsDQo+ID4gKyAgICAgICAgICAgICAgIC52bWF4ICAgICAgICAgICAgICAgICAg ID0gMHg2NCwNCj4gPiArICAgICAgICAgICAgICAgLnZtaW4gICAgICAgICAgICAgICAgICAgPSAw eDE4LA0KPiA+ICsgICAgICAgICAgICAgICAuZHRoaSAgICAgICAgICAgICAgICAgICA9IDB4MSwN Cj4gPiArICAgICAgICAgICAgICAgLmR0bG8gICAgICAgICAgICAgICAgICAgPSAweGZlLA0KPiA+ ICsgICAgICAgICAgICAgICAuZGV0X3dpbmRvdyAgICAgICAgICAgICA9IDB4YTI4LA0KPiA+ICsg ICAgICAgICAgICAgICAuZGV0X21heCAgICAgICAgICAgICAgICA9IDB4ZmZmZiwNCj4gPiArICAg ICAgICAgICAgICAgLmFnZV9jb25maWcgICAgICAgICAgICAgPSAweDU1NTU1NSwNCj4gPiArICAg ICAgICAgICAgICAgLmFnZW0gICAgICAgICAgICAgICAgICAgPSAwLA0KPiA+ICsgICAgICAgICAg ICAgICAuZGNfY29uZmlnICAgICAgICAgICAgICA9IDB4NTU1NTU1LA0KPiA+ICsgICAgICAgICAg ICAgICAuZHZ0X2ZpeGVkICAgICAgICAgICAgICA9IDB4NywNCj4gPiArICAgICAgICAgICAgICAg LnZjbyAgICAgICAgICAgICAgICAgICAgPSAweDEwLA0KPiA+ICsgICAgICAgICAgICAgICAuY2hr X3NoaWZ0ICAgICAgICAgICAgICA9IDB4NzcsDQo+ID4gKyAgICAgICAgICAgICAgIC51cHBlcl90 ZW1wX2JvdW5kICAgICAgID0gMHg2NCwNCj4gPiArICAgICAgICAgICAgICAgLmxvd2VyX3RlbXBf Ym91bmQgICAgICAgPSAweGIyLA0KPiA+ICsgICAgICAgICAgICAgICAuaGlnaF90ZW1wX3RocmVh c2hvbGQgICA9IEhJR0hfVEVNUF9NQVgsDQo+ID4gKyAgICAgICAgICAgICAgIC5sb3dfdGVtcF90 aHJlYXNob2xkICAgID0gMjUwMDAsDQo+ID4gKyAgICAgICAgICAgICAgIC5sb3dfdGVtcF9vZmZz ZXQgICAgICAgID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLmNvcmVfc2VsICAgICAgICAgICAg ICAgPSAweDhmZmYwMDAwLA0KPiA+ICsgICAgICAgICAgICAgICAuc3lzdGVtY2xrX2VuICAgICAg ICAgICA9IEJJVCgzMSksDQo+ID4gKyAgICAgICAgICAgICAgIC5pbnRfc3QgICAgICAgICAgICAg ICAgID0gQklUKDApLA0KPiA+ICsgICAgICAgICAgICAgICAuY3RsMCAgICAgICAgICAgICAgICAg ICA9IDB4MDAwMTAwMDEsDQo+ID4gKyAgICAgICB9LA0KPiA+ICsgICAgICAgew0KPiA+ICsgICAg ICAgICAgICAgICAub2ZfY29tcGF0aWJsZSAgICAgICAgICA9ICJtZWRpYXRlayxtdDgxODMtc3Zz LWNwdS1iaWciLA0KPiA+ICsgICAgICAgICAgICAgICAuc3dfaWQgICAgICAgICAgICAgICAgICA9 IFNWU19DUFVfQklHLA0KPiA+ICsgICAgICAgICAgICAgICAuYmFua19pZCAgICAgICAgICAgICAg ICA9IDEsDQo+ID4gKyAgICAgICAgICAgICAgIC5vcHMgICAgICAgICAgICAgICAgICAgID0gJnN2 c19tdDgxODNfYmFua3Nfb3BzLA0KPiA+ICsgICAgICAgICAgICAgICAudHpvbmVfbmFtZSAgICAg ICAgICAgICA9ICJ0enRzNSIsDQo+ID4gKyAgICAgICAgICAgICAgIC5idWNrX25hbWUgICAgICAg ICAgICAgID0gInZjcHUtYmlnIiwNCj4gPiArICAgICAgICAgICAgICAgLm10Y21vc19yZXF1ZXN0 ICAgICAgICAgPSBmYWxzZSwNCj4gPiArICAgICAgICAgICAgICAgLmluaXQwMV92b2x0X2ZsYWcg ICAgICAgPSBTVlNCX0lOSVQwMV9WT0xUX0lOQ19PTkxZLA0KPiA+ICsgICAgICAgICAgICAgICAu bW9kZV9zdXBwb3J0ICAgICAgICAgICA9IFNWU0JfTU9ERV9JTklUMDEgfCBTVlNCX01PREVfSU5J VDAyLA0KPiA+ICsgICAgICAgICAgICAgICAub3BwX2NvdW50ICAgICAgICAgICAgICA9IDE2LA0K PiA+ICsgICAgICAgICAgICAgICAuZnJlcV9iYXNlICAgICAgICAgICAgICA9IDE5ODkwMDAwMDAs DQo+ID4gKyAgICAgICAgICAgICAgIC52Ym9vdCAgICAgICAgICAgICAgICAgID0gMHgzMCwNCj4g PiArICAgICAgICAgICAgICAgLnZvbHRfc3RlcCAgICAgICAgICAgICAgPSA2MjUwLA0KPiA+ICsg ICAgICAgICAgICAgICAudm9sdF9iYXNlICAgICAgICAgICAgICA9IDUwMDAwMCwNCj4gPiArICAg ICAgICAgICAgICAgLnZvbHRfb2Zmc2V0ICAgICAgICAgICAgPSAwLA0KPiA+ICsgICAgICAgICAg ICAgICAudm1heCAgICAgICAgICAgICAgICAgICA9IDB4NTgsDQo+ID4gKyAgICAgICAgICAgICAg IC52bWluICAgICAgICAgICAgICAgICAgID0gMHgxMCwNCj4gPiArICAgICAgICAgICAgICAgLmR0 aGkgICAgICAgICAgICAgICAgICAgPSAweDEsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdGxvICAg ICAgICAgICAgICAgICAgID0gMHhmZSwNCj4gPiArICAgICAgICAgICAgICAgLmRldF93aW5kb3cg ICAgICAgICAgICAgPSAweGEyOCwNCj4gPiArICAgICAgICAgICAgICAgLmRldF9tYXggICAgICAg ICAgICAgICAgPSAweGZmZmYsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VfY29uZmlnICAgICAg ICAgICAgID0gMHg1NTU1NTUsDQo+ID4gKyAgICAgICAgICAgICAgIC5hZ2VtICAgICAgICAgICAg ICAgICAgID0gMCwNCj4gPiArICAgICAgICAgICAgICAgLmRjX2NvbmZpZyAgICAgICAgICAgICAg PSAweDU1NTU1NSwNCj4gPiArICAgICAgICAgICAgICAgLmR2dF9maXhlZCAgICAgICAgICAgICAg PSAweDcsDQo+ID4gKyAgICAgICAgICAgICAgIC52Y28gICAgICAgICAgICAgICAgICAgID0gMHgx MCwNCj4gPiArICAgICAgICAgICAgICAgLmNoa19zaGlmdCAgICAgICAgICAgICAgPSAweDc3LA0K PiA+ICsgICAgICAgICAgICAgICAudXBwZXJfdGVtcF9ib3VuZCAgICAgICA9IDB4NjQsDQo+ID4g KyAgICAgICAgICAgICAgIC5sb3dlcl90ZW1wX2JvdW5kICAgICAgID0gMHhiMiwNCj4gPiArICAg ICAgICAgICAgICAgLmhpZ2hfdGVtcF90aHJlYXNob2xkICAgPSBISUdIX1RFTVBfTUFYLA0KPiA+ ICsgICAgICAgICAgICAgICAubG93X3RlbXBfdGhyZWFzaG9sZCAgICA9IDI1MDAwLA0KPiA+ICsg ICAgICAgICAgICAgICAubG93X3RlbXBfb2Zmc2V0ICAgICAgICA9IDAsDQo+ID4gKyAgICAgICAg ICAgICAgIC5jb3JlX3NlbCAgICAgICAgICAgICAgID0gMHg4ZmZmMDAwMSwNCj4gPiArICAgICAg ICAgICAgICAgLnN5c3RlbWNsa19lbiAgICAgICAgICAgPSBCSVQoMzEpLA0KPiA+ICsgICAgICAg ICAgICAgICAuaW50X3N0ICAgICAgICAgICAgICAgICA9IEJJVCgxKSwNCj4gPiArICAgICAgICAg ICAgICAgLmN0bDAgICAgICAgICAgICAgICAgICAgPSAweDAwMDAwMDAxLA0KPiA+ICsgICAgICAg fSwNCj4gPiArICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgLm9mX2NvbXBhdGlibGUgICAg ICAgICAgPSAibWVkaWF0ZWssbXQ4MTgzLXN2cy1jY2kiLA0KPiA+ICsgICAgICAgICAgICAgICAu c3dfaWQgICAgICAgICAgICAgICAgICA9IFNWU19DQ0ksDQo+ID4gKyAgICAgICAgICAgICAgIC5i YW5rX2lkICAgICAgICAgICAgICAgID0gMiwNCj4gPiArICAgICAgICAgICAgICAgLm9wcyAgICAg ICAgICAgICAgICAgICAgPSAmc3ZzX210ODE4M19iYW5rc19vcHMsDQo+ID4gKyAgICAgICAgICAg ICAgIC50em9uZV9uYW1lICAgICAgICAgICAgID0gInR6dHM0IiwNCj4gPiArICAgICAgICAgICAg ICAgLmJ1Y2tfbmFtZSAgICAgICAgICAgICAgPSAidmNjaSIsDQo+ID4gKyAgICAgICAgICAgICAg IC5tdGNtb3NfcmVxdWVzdCAgICAgICAgID0gZmFsc2UsDQo+ID4gKyAgICAgICAgICAgICAgIC5p bml0MDFfdm9sdF9mbGFnICAgICAgID0gU1ZTQl9JTklUMDFfVk9MVF9JTkNfT05MWSwNCj4gPiAr ICAgICAgICAgICAgICAgLm1vZGVfc3VwcG9ydCAgICAgICAgICAgPSBTVlNCX01PREVfSU5JVDAx IHwgU1ZTQl9NT0RFX0lOSVQwMiwNCj4gPiArICAgICAgICAgICAgICAgLm9wcF9jb3VudCAgICAg ICAgICAgICAgPSAxNiwNCj4gPiArICAgICAgICAgICAgICAgLmZyZXFfYmFzZSAgICAgICAgICAg ICAgPSAxMTk2MDAwMDAwLA0KPiA+ICsgICAgICAgICAgICAgICAudmJvb3QgICAgICAgICAgICAg ICAgICA9IDB4MzAsDQo+ID4gKyAgICAgICAgICAgICAgIC52b2x0X3N0ZXAgICAgICAgICAgICAg ID0gNjI1MCwNCj4gPiArICAgICAgICAgICAgICAgLnZvbHRfYmFzZSAgICAgICAgICAgICAgPSA1 MDAwMDAsDQo+ID4gKyAgICAgICAgICAgICAgIC52b2x0X29mZnNldCAgICAgICAgICAgID0gMCwN Cj4gPiArICAgICAgICAgICAgICAgLnZtYXggICAgICAgICAgICAgICAgICAgPSAweDY0LA0KPiA+ ICsgICAgICAgICAgICAgICAudm1pbiAgICAgICAgICAgICAgICAgICA9IDB4MTgsDQo+ID4gKyAg ICAgICAgICAgICAgIC5kdGhpICAgICAgICAgICAgICAgICAgID0gMHgxLA0KPiA+ICsgICAgICAg ICAgICAgICAuZHRsbyAgICAgICAgICAgICAgICAgICA9IDB4ZmUsDQo+ID4gKyAgICAgICAgICAg ICAgIC5kZXRfd2luZG93ICAgICAgICAgICAgID0gMHhhMjgsDQo+ID4gKyAgICAgICAgICAgICAg IC5kZXRfbWF4ICAgICAgICAgICAgICAgID0gMHhmZmZmLA0KPiA+ICsgICAgICAgICAgICAgICAu YWdlX2NvbmZpZyAgICAgICAgICAgICA9IDB4NTU1NTU1LA0KPiA+ICsgICAgICAgICAgICAgICAu YWdlbSAgICAgICAgICAgICAgICAgICA9IDAsDQo+ID4gKyAgICAgICAgICAgICAgIC5kY19jb25m aWcgICAgICAgICAgICAgID0gMHg1NTU1NTUsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdnRfZml4 ZWQgICAgICAgICAgICAgID0gMHg3LA0KPiA+ICsgICAgICAgICAgICAgICAudmNvICAgICAgICAg ICAgICAgICAgICA9IDB4MTAsDQo+ID4gKyAgICAgICAgICAgICAgIC5jaGtfc2hpZnQgICAgICAg ICAgICAgID0gMHg3NywNCj4gPiArICAgICAgICAgICAgICAgLnVwcGVyX3RlbXBfYm91bmQgICAg ICAgPSAweDY0LA0KPiA+ICsgICAgICAgICAgICAgICAubG93ZXJfdGVtcF9ib3VuZCAgICAgICA9 IDB4YjIsDQo+ID4gKyAgICAgICAgICAgICAgIC5oaWdoX3RlbXBfdGhyZWFzaG9sZCAgID0gSElH SF9URU1QX01BWCwNCj4gPiArICAgICAgICAgICAgICAgLmxvd190ZW1wX3RocmVhc2hvbGQgICAg PSAyNTAwMCwNCj4gPiArICAgICAgICAgICAgICAgLmxvd190ZW1wX29mZnNldCAgICAgICAgPSAw LA0KPiA+ICsgICAgICAgICAgICAgICAuY29yZV9zZWwgICAgICAgICAgICAgICA9IDB4OGZmZjAw MDIsDQo+ID4gKyAgICAgICAgICAgICAgIC5zeXN0ZW1jbGtfZW4gICAgICAgICAgID0gQklUKDMx KSwNCj4gPiArICAgICAgICAgICAgICAgLmludF9zdCAgICAgICAgICAgICAgICAgPSBCSVQoMiks DQo+ID4gKyAgICAgICAgICAgICAgIC5jdGwwICAgICAgICAgICAgICAgICAgID0gMHgwMDEwMDAw MywNCj4gPiArICAgICAgIH0sDQo+ID4gKyAgICAgICB7DQo+ID4gKyAgICAgICAgICAgICAgIC5v Zl9jb21wYXRpYmxlICAgICAgICAgID0gIm1lZGlhdGVrLG10ODE4My1zdnMtZ3B1IiwNCj4gPiAr ICAgICAgICAgICAgICAgLnN3X2lkICAgICAgICAgICAgICAgICAgPSBTVlNfR1BVLA0KPiA+ICsg ICAgICAgICAgICAgICAuYmFua19pZCAgICAgICAgICAgICAgICA9IDMsDQo+ID4gKyAgICAgICAg ICAgICAgIC5vcHMgICAgICAgICAgICAgICAgICAgID0gJnN2c19tdDgxODNfYmFua3Nfb3BzLA0K PiA+ICsgICAgICAgICAgICAgICAudHpvbmVfbmFtZSAgICAgICAgICAgICA9ICJ0enRzMiIsDQo+ ID4gKyAgICAgICAgICAgICAgIC5idWNrX25hbWUgICAgICAgICAgICAgID0gInZncHUiLA0KPiA+ ICsgICAgICAgICAgICAgICAubXRjbW9zX3JlcXVlc3QgICAgICAgICA9IHRydWUsDQo+ID4gKyAg ICAgICAgICAgICAgIC5pbml0MDFfdm9sdF9mbGFnICAgICAgID0gU1ZTQl9JTklUMDFfVk9MVF9J TkNfT05MWSwNCj4gPiArICAgICAgICAgICAgICAgLm1vZGVfc3VwcG9ydCAgICAgICAgICAgPSBT VlNCX01PREVfSU5JVDAxIHwgU1ZTQl9NT0RFX0lOSVQwMiB8DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1ZTQl9NT0RFX01PTiwNCj4gPiArICAgICAgICAg ICAgICAgLm9wcF9jb3VudCAgICAgICAgICAgICAgPSAxNiwNCj4gPiArICAgICAgICAgICAgICAg LmZyZXFfYmFzZSAgICAgICAgICAgICAgPSA5MDAwMDAwMDAsDQo+ID4gKyAgICAgICAgICAgICAg IC52Ym9vdCAgICAgICAgICAgICAgICAgID0gMHgzMCwNCj4gPiArICAgICAgICAgICAgICAgLnZv bHRfc3RlcCAgICAgICAgICAgICAgPSA2MjUwLA0KPiA+ICsgICAgICAgICAgICAgICAudm9sdF9i YXNlICAgICAgICAgICAgICA9IDUwMDAwMCwNCj4gPiArICAgICAgICAgICAgICAgLnZvbHRfb2Zm c2V0ICAgICAgICAgICAgPSAwLA0KPiA+ICsgICAgICAgICAgICAgICAudm1heCAgICAgICAgICAg ICAgICAgICA9IDB4NDAsDQo+ID4gKyAgICAgICAgICAgICAgIC52bWluICAgICAgICAgICAgICAg ICAgID0gMHgxNCwNCj4gPiArICAgICAgICAgICAgICAgLmR0aGkgICAgICAgICAgICAgICAgICAg PSAweDEsDQo+ID4gKyAgICAgICAgICAgICAgIC5kdGxvICAgICAgICAgICAgICAgICAgID0gMHhm ZSwNCj4gPiArICAgICAgICAgICAgICAgLmRldF93aW5kb3cgICAgICAgICAgICAgPSAweGEyOCwN Cj4gPiArICAgICAgICAgICAgICAgLmRldF9tYXggICAgICAgICAgICAgICAgPSAweGZmZmYsDQo+ ID4gKyAgICAgICAgICAgICAgIC5hZ2VfY29uZmlnICAgICAgICAgICAgID0gMHg1NTU1NTUsDQo+ ID4gKyAgICAgICAgICAgICAgIC5hZ2VtICAgICAgICAgICAgICAgICAgID0gMCwNCj4gPiArICAg ICAgICAgICAgICAgLmRjX2NvbmZpZyAgICAgICAgICAgICAgPSAweDU1NTU1NSwNCj4gPiArICAg ICAgICAgICAgICAgLmR2dF9maXhlZCAgICAgICAgICAgICAgPSAweDMsDQo+ID4gKyAgICAgICAg ICAgICAgIC52Y28gICAgICAgICAgICAgICAgICAgID0gMHgxMCwNCj4gPiArICAgICAgICAgICAg ICAgLmNoa19zaGlmdCAgICAgICAgICAgICAgPSAweDc3LA0KPiA+ICsgICAgICAgICAgICAgICAu dXBwZXJfdGVtcF9ib3VuZCAgICAgICA9IDB4NjQsDQo+ID4gKyAgICAgICAgICAgICAgIC5sb3dl cl90ZW1wX2JvdW5kICAgICAgID0gMHhiMiwNCj4gPiArICAgICAgICAgICAgICAgLmhpZ2hfdGVt cF90aHJlYXNob2xkICAgPSBISUdIX1RFTVBfTUFYLA0KPiA+ICsgICAgICAgICAgICAgICAubG93 X3RlbXBfdGhyZWFzaG9sZCAgICA9IDI1MDAwLA0KPiA+ICsgICAgICAgICAgICAgICAubG93X3Rl bXBfb2Zmc2V0ICAgICAgICA9IDMsDQo+ID4gKyAgICAgICAgICAgICAgIC5jb3JlX3NlbCAgICAg ICAgICAgICAgID0gMHg4ZmZmMDAwMywNCj4gPiArICAgICAgICAgICAgICAgLnN5c3RlbWNsa19l biAgICAgICAgICAgPSBCSVQoMzEpLA0KPiA+ICsgICAgICAgICAgICAgICAuaW50X3N0ICAgICAg ICAgICAgICAgICA9IEJJVCgzKSwNCj4gPiArICAgICAgICAgICAgICAgLmN0bDAgICAgICAgICAg ICAgICAgICAgPSAweDAwMDUwMDAxLA0KPiA+ICsgICAgICAgfSwNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ZzX3BsYXRmb3JtIHN2c19tdDgxODNfcGxhdGZvcm0g PSB7DQo+ID4gKyAgICAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9ICJtdDgxODMtc3ZzIiwN Cj4gPiArICAgICAgIC5iYW5rcyAgICAgICAgICAgICAgICAgID0gc3ZzX210ODE4M19iYW5rcywN Cj4gPiArICAgICAgIC5lZnVzZV9wYXJzaW5nICAgICAgICAgID0gc3ZzX210ODE4M19lZnVzZV9w YXJzaW5nLA0KPiA+ICsgICAgICAgLnJlZ3MgICAgICAgICAgICAgICAgICAgPSBzdnNfcmVnc192 MiwNCj4gPiArICAgICAgIC5pcnFmbGFncyAgICAgICAgICAgICAgID0gSVJRRl9UUklHR0VSX0xP VyB8IElSUUZfT05FU0hPVCwNCj4gPiArICAgICAgIC5uZWVkX2h3X3Jlc2V0ICAgICAgICAgID0g ZmFsc2UsDQo+ID4gKyAgICAgICAuZmFrZV9lZnVzZSAgICAgICAgICAgICA9IGZhbHNlLA0KPiA+ ICsgICAgICAgLmJhbmtfbnVtICAgICAgICAgICAgICAgPSA0LA0KPiA+ICsgICAgICAgLmVmdXNl X251bSAgICAgICAgICAgICAgPSAyNSwNCj4gPiArICAgICAgIC5lZnVzZV9jaGVjayAgICAgICAg ICAgID0gMiwNCj4gPiArICAgICAgIC50aGVybWFsX2VmdXNlX251bSAgICAgID0gMywNCj4gPiAr fTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19zdnNf b2ZfbWF0Y2hbXSA9IHsNCj4gPiArICAgICAgIHsNCj4gPiArICAgICAgICAgICAgICAgLmNvbXBh dGlibGUgPSAibWVkaWF0ZWssbXQ4MTgzLXN2cyIsDQo+ID4gKyAgICAgICAgICAgICAgIC5kYXRh ID0gJnN2c19tdDgxODNfcGxhdGZvcm0sDQo+ID4gKyAgICAgICB9LCB7DQo+ID4gKyAgICAgICAg ICAgICAgIC8qIFNlbnRpbmVsICovDQo+ID4gKyAgICAgICB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArc3RhdGljIGludCBzdnNfYWRkX3RoZXJtYWxfZGV2aWNlX2xpbmsoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqc3ZzX3BkZXYpDQo+ID4gK3sNCj4gPiArICAgICAgIHN0cnVjdCBkZXZpY2Vfbm9k ZSAqdGhlcm1fbm9kZTsNCj4gPiArICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnRoZXJt X3BkZXY7DQo+ID4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlX2xpbmsgICpzdXBfbGluazsNCj4gPiAr ICAgICAgIGNoYXIgY29uc3QgKnRoZXJtX25vZGVfbmFtZVtdID0geyJ0aGVybWFsIn07DQo+ID4g KyAgICAgICB1MzIgaTsNCj4gPiArDQo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlf U0laRSh0aGVybV9ub2RlX25hbWUpOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgdGhlcm1f bm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsIHRoZXJtX25vZGVfbmFtZVtpXSk7DQo+ ID4gKyAgICAgICAgICAgICAgIGlmICh0aGVybV9ub2RlKQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIGlmICghdGhl cm1fbm9kZSkgew0KPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoIm5vIGF2YWlsYWJsZSB0aGVy bWFsIG5vZGU/IHBhc3MgZGV2aWNlIGxpbmtcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICB0aGVybV9wZGV2ID0gb2Zf ZmluZF9kZXZpY2VfYnlfbm9kZSh0aGVybV9ub2RlKTsNCj4gPiArICAgICAgIGlmICghdGhlcm1f cGRldikgew0KPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoIm5vIFwiJXBPRlwiIHBsYXRmb3Jt IGRldmljZT8gcGFzcyBkZXZpY2UgbGlua1xuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg IHRoZXJtX25vZGUpOw0KPiA+ICsgICAgICAgICAgICAgICBvZl9ub2RlX3B1dCh0aGVybV9ub2Rl KTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgb2Zfbm9kZV9wdXQodGhlcm1fbm9kZSk7DQo+ID4gKw0KPiA+ICsgICAgICAg c3VwX2xpbmsgPSBkZXZpY2VfbGlua19hZGQoJnN2c19wZGV2LT5kZXYsICZ0aGVybV9wZGV2LT5k ZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETF9GTEFHX0FVVE9S RU1PVkVfQ09OU1VNRVIpOw0KPiA+ICsNCj4gPiArICAgICAgIGlmIChzdXBfbGluay0+c3RhdHVz ID09IERMX1NUQVRFX0RPUk1BTlQpDQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAtRVBST0JF X0RFRkVSOw0KPiA+ICsNCj4gPiArICAgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IHN2c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ ICt7DQo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9kZXZfaWQ7DQo+ ID4gKyAgICAgICBzdHJ1Y3QgbXRrX3N2cyAqc3ZzOw0KPiA+ICsgICAgICAgaW50IHJldDsNCj4g PiArICAgICAgIHUzMiBzdnNfaXJxOw0KPiA+ICsNCj4gPiArICAgICAgIHJldCA9IHN2c19hZGRf dGhlcm1hbF9kZXZpY2VfbGluayhwZGV2KTsNCj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqc3ZzKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKyAgICAg ICBpZiAoIXN2cykNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0K PiA+ICsgICAgICAgc3ZzLT5kZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsgICAgICAgaWYgKCFzdnMt PmRldi0+b2Zfbm9kZSkgew0KPiA+ICsgICAgICAgICAgICAgICBwcl9lcnIoImNhbm5vdCBmaW5k IGRldmljZSBub2RlXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzLT5iYXNlID0gb2ZfaW9tYXAoc3Zz LT5kZXYtPm9mX25vZGUsIDApOw0KPiA+ICsgICAgICAgaWYgKElTX0VSUihzdnMtPmJhc2UpKSB7 DQo+ID4gKyAgICAgICAgICAgICAgIHByX2VycigiY2Fubm90IGZpbmQgc3ZzIHJlZ2lzdGVyIGJh c2VcbiIpOw0KPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihzdnMtPmJhc2UpOw0K PiA+ICsgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgIG9mX2Rldl9pZCA9IG9mX21hdGNoX25v ZGUobXRrX3N2c19vZl9tYXRjaCwgc3ZzLT5kZXYtPm9mX25vZGUpOw0KPiA+ICsgICAgICAgaWYg KCFvZl9kZXZfaWQgfHwgIW9mX2Rldl9pZC0+ZGF0YSkNCj4gPiArICAgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzLT5wbGF0Zm9ybSA9IG9mX2Rldl9p ZC0+ZGF0YTsNCj4gPiArICAgICAgIGRldl9zZXRfZHJ2ZGF0YShzdnMtPmRldiwgc3ZzKTsNCj4g PiArDQo+ID4gKyAgICAgICBzdnNfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoc3ZzLT5kZXYt Pm9mX25vZGUsIDApOw0KPiA+ICsgICAgICAgcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2ly cShzdnMtPmRldiwgc3ZzX2lycSwgTlVMTCwgc3ZzX2lzciwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3ZzLT5wbGF0Zm9ybS0+aXJxZmxhZ3MsICJtdGstc3Zz IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZzKTsNCj4g PiArICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAgcHJfZXJyKCJyZWdpc3Rl ciBpcnEoJWQpIGZhaWxlZDogJWRcbiIsIHN2c19pcnEsIHJldCk7DQo+ID4gKyAgICAgICAgICAg ICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgc3ZzLT5t YWluX2NsayA9IGRldm1fY2xrX2dldChzdnMtPmRldiwgIm1haW4iKTsNCj4gPiArICAgICAgIGlm IChJU19FUlIoc3ZzLT5tYWluX2NsaykpIHsNCj4gPiArICAgICAgICAgICAgICAgcHJfZXJyKCJm YWlsZWQgdG8gZ2V0IGNsb2NrOiAlbGRcbiIsIFBUUl9FUlIoc3ZzLT5tYWluX2NsaykpOw0KPiA+ ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihzdnMtPm1haW5fY2xrKTsNCj4gPiArICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc3ZzLT5t YWluX2Nsayk7DQo+ID4gKyAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgIHBy X2VycigiY2Fubm90IGVuYWJsZSBtYWluIGNsazogJWRcbiIsIHJldCk7DQo+ID4gKyAgICAgICAg ICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgaWYg KCFzdnNfaXNfc3VwcG9ydGVkKHN2cykpIHsNCj4gPiArICAgICAgICAgICAgICAgcHJfbm90aWNl KCJzdnMgaXMgbm90IHN1cHBvcnRlZFxuIik7DQo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IC1F UEVSTTsNCj4gPiArICAgICAgICAgICAgICAgZ290byBzdnNfcHJvYmVfZmFpbDsNCj4gPiArICAg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICByZXQgPSBzdnNfcmVzb3VyY2Vfc2V0dXAoc3ZzKTsN Cj4gPiArICAgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gc3ZzX3Byb2Jl X2ZhaWw7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0gc3ZzX3N0YXJ0KHN2cyk7DQo+ID4gKyAg ICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICBnb3RvIHN2c19wcm9iZV9mYWlsOw0K PiA+ICsNCj4gPiArICAgICAgIHJldCA9IHN2c19jcmVhdGVfc3ZzX3Byb2NmcyhzdnMpOw0KPiA+ ICsgICAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgICAgZ290byBzdnNfcHJvYmVfZmFp bDsNCj4gPiArDQo+ID4gKyAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gK3N2c19wcm9iZV9m YWlsOg0KPiA+ICsgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHN2cy0+bWFpbl9jbGspOw0K PiA+ICsNCj4gPiArICAgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzdnNfcG1fb3BzID0gew0KPiA+ICsgICAgICAgLnN1 c3BlbmQgICAgICAgID0gc3ZzX3N1c3BlbmQsDQo+ID4gKyAgICAgICAucmVzdW1lICAgICAgICAg PSBzdnNfcmVzdW1lLA0KPiA+ICt9Ow0KPiANCj4gQmV0dGVyIHVzZSB0aGUgUE0gbWFjcm9zIHRv IGRlZmluZSB0aGF0IHN0cnVjdA0KDQpPay4gSSdsbCB1c2UgUE0gbWFjcm9zIGluc3RlYWQuIFRo YW5rcy4NCg0KPiANCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN2 c19kcml2ZXIgPSB7DQo+ID4gKyAgICAgICAucHJvYmUgID0gc3ZzX3Byb2JlLA0KPiA+ICsgICAg ICAgLmRyaXZlciA9IHsNCj4gPiArICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIm10 ay1zdnMiLA0KPiA+ICsgICAgICAgICAgICAgICAucG0gICAgICAgICAgICAgPSAmc3ZzX3BtX29w cywNCj4gPiArICAgICAgICAgICAgICAgLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG10 a19zdnNfb2ZfbWF0Y2gpLA0KPiA+ICsgICAgICAgfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgX19pbml0IHN2c19pbml0KHZvaWQpDQo+ID4gK3sNCj4gPiArICAgICAgIGludCBy ZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZz dnNfZHJpdmVyKTsNCj4gPiArICAgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgICAg cHJfZXJyKCJzdnMgcGxhdGZvcm0gZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZDogJWRcbiIsIHJldCk7 DQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgICB9DQo+ID4gKw0K PiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK2xhdGVfaW5pdGNhbGxf c3luYyhzdnNfaW5pdCk7DQo+IA0KPiBXaHk/IENhbid0IGJlIHRoaXMgYSBtb2R1bGVfcGxhdGZv cm1fZHJpdmVyPw0KDQpUaGVyZSBpcyBhbiBlcnJvciB3aGVuIFNWUyB1c2VzIG1vZHVsZV9wbGF0 Zm9ybV9kcml2ZXI/KCkgYXMgYmVsb3cuDQotIEluIG10ODE4MywgR1BVIE9QUCB0YWJsZSBhc3Nv Y2lhdGVzIHdpdGggIjIiIG9wcC1taWNyb3ZvbHQgcHJvcGVydHkgKE9QUCB0YWJsZSBnZW5lcmFs bHkgc3VwcGxpZXMgIjEiKQ0KYW5kIGl0IGNhdXNlIFNWUyBHUFUgZmFpbHMgdG8gZG8gZGV2X3Bt X29wcF9vZl9hZGRfdGFibGUoKSB3aGVuIHVzaW5nIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoKS4N Ci0gTG9va3MgbGlrZSBTVlMtR1BVIG5lZWRzIEdQVSBkcml2ZXIgaGFuZGxlIGl0cyAidHdvIG9w cC1taWNyb3ZvbHQgcHJvcGVydHkiIGZpcnN0Lg0KDQojR1BVIE9QUCB0YWJsZSB3aXRoIHR3byBv cHAtbWljcm92b2x0IHByb3BlcnR5DQpodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNo LzExNDIzMDA5Lw0KDQpbICAgIDguNTA0MTY1XSBwbGF0Zm9ybSBTVlNfR1BVLjA6IG9wcF9wYXJz ZV9zdXBwbGllczogSW52YWxpZCBudW1iZXIgb2YgZWxlbWVudHMgaW4gb3BwLW1pY3Jvdm9sdCBw cm9wZXJ0eSAoMikgd2l0aCBzdXBwbGllcyAoMSkNClsgICAgOC41MTU1NDVdIHBsYXRmb3JtIFNW U19HUFUuMDogX29mX2FkZF9vcHBfdGFibGVfdjI6IEZhaWxlZCB0byBhZGQgT1BQLCAtMjINClsg ICAgOC41MjI2MDBdIFttdGtfc3ZzXSBTVlNfR1BVOiBmYWlsIHRvIGFkZCBvcHAgdGFibGU6IC0y Mg0KDQo+IA0KPiA+ICsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBTVlMgRHJp dmVyIHYxLjAiKTsNCj4gDQo+IERvbid0IHB1dCB0aGUgdmVyc2lvbiBpbiB0aGUgZGVzY3JpcHRp b24sIHRoZXJlIGlzIGEgTU9EVUxFX1ZFUlNJT04NCj4gZm9yIHRoYXQgcHVycG9zZS4NCj4gDQo+ IEFsc28gd291bGQgYmUgZ29vZCBoYXZlIHRoZSBNT0RVTEVfQVVUSE9SDQoNClN1cmUuIFRoYW5r cyBmb3IgcG9pbnRpbmcgaXQgb3V0Lg0KDQo+IA0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 DQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG93ZXIvbXRrX3N2cy5oIGIvaW5jbHVk ZS9saW51eC9wb3dlci9tdGtfc3ZzLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uNWMwMzk4MmUzNTc2DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsr KyBiL2luY2x1ZGUvbGludXgvcG93ZXIvbXRrX3N2cy5oDQo+IA0KPiBJIGRvbid0IHRoaW5rIHRo aXMgZmlsZSBpcyBuZWVkZWQganVzdCByZW1vdmUgaXQuDQoNClRoaXMgZXhwb3J0IGlzIHVzZWQg YnkgbXQ4MTgzIHRoZXJtYWwuDQpodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEx NDUyODM1Lw0KDQo+IA0KPiA+IEBAIC0wLDAgKzEsMjMgQEANCj4gPiArLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDIw IE1lZGlhVGVrIEluYy4NCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9fTVRLX1NWU19I X18NCj4gPiArI2RlZmluZSBfX01US19TVlNfSF9fDQo+ID4gKw0KPiA+ICsjaWYgSVNfRU5BQkxF RChDT05GSUdfTVRLX1NWUykNCj4gPiArdW5zaWduZWQgbG9uZyBjbGFpbV9tdGtfc3ZzX2xvY2so dm9pZCk7DQo+ID4gK3ZvaWQgcmVsZWFzZV9tdGtfc3ZzX2xvY2sodW5zaWduZWQgbG9uZyBmbGFn cyk7DQo+ID4gKyNlbHNlDQo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjbGFpbV9t dGtfc3ZzX2xvY2sodm9pZCkNCj4gPiArew0KPiA+ICsgICAgICAgcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCByZWxlYXNlX210a19zdnNfbG9jayh1bnNp Z25lZCBsb25nIGZsYWdzKQ0KPiA+ICt7DQo+ID4gK30NCj4gPiArI2VuZGlmIC8qIENPTkZJR19N VEtfU1ZTICovDQo+ID4gKw0KPiA+ICsjZW5kaWYgLyogX19NVEtfU1ZTX0hfXyAqLw0KPiA+IC0t DQo+ID4gMi4xOC4wDQo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18NCj4gPiBMaW51eC1tZWRpYXRlayBtYWlsaW5nIGxpc3QNCj4gPiBMaW51eC1tZWRp YXRla0BsaXN0cy5pbmZyYWRlYWQub3JnDQo+ID4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcv bWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlaw0KDQoNCg0K