Received: by 2002:a05:6359:6284:b0:131:369:b2a3 with SMTP id se4csp5252482rwb; Wed, 9 Aug 2023 00:41:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEwPrxH/Xt6Q18gcTWi/3wzda+IKSW1UOEIbj09Z3pfwl1Kvv1PQJf1mBMi2Vot+goOXGqG X-Received: by 2002:a17:907:1dd5:b0:99b:f44e:6daa with SMTP id og21-20020a1709071dd500b0099bf44e6daamr1357620ejc.62.1691566912866; Wed, 09 Aug 2023 00:41:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691566912; cv=none; d=google.com; s=arc-20160816; b=xWCL1WEGY3HjFkmEW9kg7dbxYWELJgBmDisB0NRPBIT1dW9jwAjIOIhBjt4GeKmtdT 2YLT0MEfH5JQY6ArZml2hr31coHSxlq7xx7QrcyUmbUUeZRACz55rcKHygsubtVr47os KX6huVDSKkwFzSGFsOPF28Wd2liymIE4EYkquvBdsp+hsbB4MsT0BPN0tqwpNTq7i0AM gl4Rguz7OhlDP/FXE9TLwD/3S28csPmXXBw5JHKeIyBUYGjuiZUkWjdVQDAAWl0uxTTz iG8rDgWIE9/HinSQsXEEPEO6MFIsxaamJOgrBdCfx4Pr/I2ngbQJNUPEUPfMLDoSY1ex /0tw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:authenticated-by; bh=iWUHXvsMdiaUfq1U8kc6JejFy8ep1b61FqDkreuI4Lo=; fh=T9XGBtMKnxEmIujS2zzqwXyNDhH+24P8NJcYuaqeovk=; b=fwkNt9giBfPfA6DUoAKqc4e7O4Nn9F97qAQZJMFV6SojI6aVgpbZUikPibY1esH6Nl PXfNnWcnhZ9ENIWmj9vWyzQ0XesuNVCMgPriuUad4uPP6eEwtKmZW+akk5KyXxxSZq/K 11WA9lUOzyn6Oqslb1nTFc8qfUlUxe+wC7g31v8tyN4Oz/EacRPYAFclWsulqxwpQgyo yzBLzEQK1Rwho9z6039DqM4xACc+qzC64nKV79VMvRdoklsOBRvje2B4pma2JUttgFQ3 LvdoyBWMP2vU1NJLoiffNZeO2H6kf85OIoojdCgunKcao5L2kYzSV5LG/kJBJGJOrrEk Mejg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id y14-20020a17090629ce00b00977e729a2f7si8049030eje.951.2023.08.09.00.41.27; Wed, 09 Aug 2023 00:41:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229683AbjHIGzN (ORCPT + 99 others); Wed, 9 Aug 2023 02:55:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229533AbjHIGzM (ORCPT ); Wed, 9 Aug 2023 02:55:12 -0400 Received: from rtits2.realtek.com.tw (rtits2.realtek.com [211.75.126.72]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 5FF2E1BF7; Tue, 8 Aug 2023 23:55:08 -0700 (PDT) Authenticated-By: X-SpamFilter-By: ArmorX SpamTrap 5.77 with qID 3796sHtmD017187, This message is accepted by code: ctloc85258 Received: from mail.realtek.com (rtexh36506.realtek.com.tw[172.21.6.27]) by rtits2.realtek.com.tw (8.15.2/2.81/5.90) with ESMTPS id 3796sHtmD017187 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 9 Aug 2023 14:54:17 +0800 Received: from RTEXMBS02.realtek.com.tw (172.21.6.95) by RTEXH36506.realtek.com.tw (172.21.6.27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.17; Wed, 9 Aug 2023 14:54:33 +0800 Received: from RTEXMBS04.realtek.com.tw (172.21.6.97) by RTEXMBS02.realtek.com.tw (172.21.6.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.7; Wed, 9 Aug 2023 14:54:32 +0800 Received: from RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d]) by RTEXMBS04.realtek.com.tw ([fe80::e138:e7f1:4709:ff4d%5]) with mapi id 15.01.2375.007; Wed, 9 Aug 2023 14:54:32 +0800 From: Justin Lai To: Heiner Kallweit , "kuba@kernel.org" CC: "davem@davemloft.net" , "edumazet@google.com" , "pabeni@redhat.com" , "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" Subject: RE: [PATCH] net/ethernet/realtek: Add Realtek automotive PCIe driver Thread-Topic: [PATCH] net/ethernet/realtek: Add Realtek automotive PCIe driver Thread-Index: AQHZxeQMA/4O5CExTkOPXZ48NozVXK/aDAKAgAeDkLA= Date: Wed, 9 Aug 2023 06:54:32 +0000 Message-ID: <2f64343884d149e5b6a1555fe9fea8c5@realtek.com> References: <20230803082513.6523-1-justinlai0215@realtek.com> In-Reply-To: Accept-Language: zh-TW, en-US Content-Language: zh-TW X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.21.210.185] x-kse-serverinfo: RTEXMBS02.realtek.com.tw, 9 x-kse-antispam-interceptor-info: fallback x-kse-antivirus-interceptor-info: fallback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-KSE-AntiSpam-Interceptor-Info: fallback X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,LOTS_OF_MONEY, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org PiBPbiAwMy4wOC4yMDIzIDEwOjI1LCBqdXN0aW5sYWkwMjE1IHdyb3RlOg0KPiA+IFRoaXMgcGF0 Y2ggaXMgdG8gYWRkIHRoZSBldGhlcm5ldCBkZXZpY2UgZHJpdmVyIGZvciB0aGUgUENJZSBpbnRl cmZhY2Ugb2YNCj4gUmVhbHRlayBBdXRvbW90aXZlIEV0aGVybmV0IFN3aXRjaCwNCj4gPiBhcHBs aWNhYmxlIHRvIFJUTDkwNTQsIFJUTDkwNjgsIFJUTDkwNzIsIFJUTDkwNzUsIFJUTDkwNjgsIFJU TDkwNzEuDQo+ID4NCj4gLSBBIHJlYWwgYXV0aG9yJ3MgbmFtZSB3b3VsZCBiZSBuaWNlLg0KPiAt IEEgbGluayB0byB0aGUgY2hpcCBkYXRhIHNoZWV0cyB3b3VsZCBiZSBoZWxwZnVsLg0KPiAtIFJl YWQgdGhlIG5ldGRldiBjb2RlIHJ1bGVzLg0KPiAgIC0gVGhlIG5ldC1uZXh0IHBhdGNoIGFubm90 YXRpb24gaXMgbWlzc2luZy4NCj4gICAtIFJldmVyc2UgY2hyaXN0bWFzIHRyZWUNCj4gICAtIC4u DQo+IC0gTm90IGFkZGluZyBhIE1BSU5UQUlORVJTIGVudHJ5Pw0KPiANCj4gSW4gZ2VuZXJhbCB0 aGUgY29kZSBxdWFsaXR5IGRvZXNuJ3QgbWVldCBtYWlubGluZSByZXF1aXJlbWVudHMsIGUuZy4g dGhlcmUncw0KPiBhIGxvdCBvZiB1bm5lY2Vzc2FyeSBjYXN0aW5nLg0KPiANCj4gQW5kIG5vIFBI WSBoYW5kbGluZyBhdCBhbGwgaW4gdGhlIGRyaXZlcj8NCj4gDQoNClRoYW5rIHlvdSBmb3IgeW91 ciByZXBseSwgSSB3aWxsIHJlZmVyIHRvIHlvdXIgc3VnZ2VzdGlvbnMgdG8gbW9kaWZ5IG15IGNv ZGUsIGFuZCBhZGQgc29tZSBpbmZvcm1hdGlvbiBtZW50aW9uZWQgYWJvdmUuDQoNCj4gPiBTaWdu ZWQtb2ZmLWJ5OiBqdXN0aW5sYWkwMjE1IDxqdXN0aW5sYWkwMjE1QHJlYWx0ZWsuY29tPg0KPiA+ IC0tLQ0KPiA+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcgICAgICAgICAg fCAgIDE3ICsNCj4gPiAgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZSAgICAg ICAgIHwgICAgMSArDQo+ID4gIGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvTWFr ZWZpbGUgICB8ICAgMTAgKw0KPiA+ICBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNl L3J0YXNlLmggICAgfCAgNjU0ICsrKw0KPiA+ICAuLi4vbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRh c2UvcnRhc2VfbWFpbi5jICAgfCA0Nzk3ICsrKysrKysrKysrKysrKysrDQo+ID4gIC4uLi9uZXQv ZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9zcmlvdi5jICB8ICAzMjggKysNCj4gPiAgLi4u L25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX3NyaW92LmggIHwgICAzMCArDQo+ID4g IDcgZmlsZXMgY2hhbmdlZCwgNTgzNyBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlDQo+ID4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNl LmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsv cnRhc2UvcnRhc2VfbWFpbi5jDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9l dGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlX3NyaW92LmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2Vfc3Jpb3YuaA0KPiA+ DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZw0K PiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZw0KPiA+IGluZGV4IDkzZDlk ZjU1YjM2MS4uMDI1MGQxYzM4NzRiIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVy bmV0L3JlYWx0ZWsvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0 ZWsvS2NvbmZpZw0KPiA+IEBAIC0xMTMsNCArMTEzLDIxIEBAIGNvbmZpZyBSODE2OQ0KPiA+ICAg ICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTog dGhlIG1vZHVsZQ0KPiA+ICAgICAgICAgd2lsbCBiZSBjYWxsZWQgcjgxNjkuICBUaGlzIGlzIHJl Y29tbWVuZGVkLg0KPiA+DQo+ID4gK2NvbmZpZyBSVEFTRQ0KPiA+ICsgICAgIHRyaXN0YXRlICJS ZWFsdGVrIEF1dG9tb3RpdmUgU3dpdGNoDQo+IDkwNTQvOTA2OC85MDcyLzkwNzUvOTA2OC85MDcx IFBDSWUgSW50ZXJmYWNlIHN1cHBvcnQiDQo+ID4gKyAgICAgZGVwZW5kcyBvbiBQQ0kNCj4gPiAr ICAgICBzZWxlY3QgQ1JDMzINCj4gPiArICAgICBoZWxwDQo+ID4gKyAgICAgICBTYXkgWSBoZXJl IGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0bw0KPiA+ ICsgICAgICAgdGhlIGZvbGxvd2luZyBmYW1pbGllczoNCj4gPiArICAgICAgIFJUTDkwNTQgNUdC aXQgRXRoZXJuZXQNCj4gPiArICAgICAgIFJUTDkwNjggNUdCaXQgRXRoZXJuZXQNCj4gPiArICAg ICAgIFJUTDkwNzIgNUdCaXQgRXRoZXJuZXQNCj4gPiArICAgICAgIFJUTDkwNzUgNUdCaXQgRXRo ZXJuZXQNCj4gPiArICAgICAgIFJUTDkwNjggNUdCaXQgRXRoZXJuZXQNCj4gPiArICAgICAgIFJU TDkwNzEgNUdCaXQgRXRoZXJuZXQNCj4gPiArDQo+ID4gKyAgICAgICBUbyBjb21waWxlIHRoaXMg ZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlDQo+ID4gKyAgICAg ICB3aWxsIGJlIGNhbGxlZCBydGFzZS4gIFRoaXMgaXMgcmVjb21tZW5kZWQuDQo+ID4gKw0KPiA+ ICBlbmRpZiAjIE5FVF9WRU5ET1JfUkVBTFRFSw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlDQo+IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVh bHRlay9NYWtlZmlsZQ0KPiA+IGluZGV4IDJlMWQ3OGIxMDZiMC4uMGMxYzE2ZjYzZTlhIDEwMDY0 NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGUNCj4gPiAr KysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlDQo+ID4gQEAgLTgsMyAr OCw0IEBAIG9iai0kKENPTkZJR184MTM5VE9PKSArPSA4MTM5dG9vLm8NCj4gPiAgb2JqLSQoQ09O RklHX0FUUCkgKz0gYXRwLm8NCj4gPiAgcjgxNjktb2JqcyArPSByODE2OV9tYWluLm8gcjgxNjlf ZmlybXdhcmUubyByODE2OV9waHlfY29uZmlnLm8NCj4gPiAgb2JqLSQoQ09ORklHX1I4MTY5KSAr PSByODE2OS5vDQo+ID4gK29iai0kKENPTkZJR19SVEFTRSkgKz0gcnRhc2UvDQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvTWFrZWZpbGUNCj4gYi9k cml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL01ha2VmaWxlDQo+ID4gbmV3IGZpbGUg bW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjYxZmUyZjllMDM0NA0KPiA+IC0t LSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNl L01ha2VmaWxlDQo+ID4gQEAgLTAsMCArMSwxMCBAQA0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQo+ID4gKyMgQ29weXJpZ2h0KGMpIDIwMjMgUmVhbHRlayBTZW1pY29u ZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKw0KPiA+ICsjDQo+ID4gKyMg TWFrZWZpbGUgZm9yIHRoZSBSZWFsdGVrIFBDSWUgZHJpdmVyDQo+ID4gKyMNCj4gPiArDQo+ID4g K29iai0kKENPTkZJR19SVEFTRSkgKz0gcnRhc2Uubw0KPiA+ICsNCj4gPiArcnRhc2Utb2JqcyA6 PSBydGFzZV9tYWluLm8gcnRhc2Vfc3Jpb3Yubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9ldGhlcm5ldC9yZWFsdGVrL3J0YXNlL3J0YXNlLmgNCj4gYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9yZWFsdGVrL3J0YXNlL3J0YXNlLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uNzY2MTkzOTE0MzczDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2UuaA0KPiA+IEBAIC0w LDAgKzEsNjU0IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov DQo+ID4gKy8qDQo+ID4gKyAqICBydGFzZSBpcyB0aGUgTGludXggZGV2aWNlIGRyaXZlciByZWxl YXNlZCBmb3IgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaA0KPiA+ICsgKiAgY29udHJvbGxlcnMg d2l0aCBQQ0ktRXhwcmVzcyBpbnRlcmZhY2UuDQo+ID4gKyAqDQo+ID4gKyAqICBDb3B5cmlnaHQo YykgMjAyMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N Cj4gPiArICoNCj4gPiArICogIEF1dGhvcjoNCj4gPiArICogIFJlYWx0ZWsgQVJEIHNvZnR3YXJl IHRlYW0NCj4gPiArICogIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5jaHUgU2NpZW5j ZSBQYXJrLCBIc2luY2h1IDMwMCwgVGFpd2FuDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4g Pg0KPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiArICogIFRoaXMgcHJvZHVjdCBp cyBjb3ZlcmVkIGJ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgcGF0ZW50czoNCj4gPiAr ICogIFVTNiw1NzAsODg0LCBVUzYsMTE1LDc3NiwgYW5kIFVTNiwzMjcsNjI1Lg0KPiA+ICsNCj4g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KPiAqKioqKioqKioqKioqKi8NCj4gPiArDQo+ID4gKyNpZm5kZWYgUlRBU0VfSF8N Cj4gPiArI2RlZmluZSBSVEFTRV9IXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L3ZlcnNp b24uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4NCj4gPiArDQo+ID4gKyNkZWZp bmUgUlRMX0FMTE9DX1NLQl9JTlRSKG5hcGksIGxlbmd0aCkgbmFwaV9hbGxvY19za2IoJihuYXBp KSwgbGVuZ3RoKQ0KPiA+ICsNCj4gV2hhdCdzIHRoZSBiZW5lZml0IG9mIHRoaXM/DQo+IA0KPiA+ ICsjZGVmaW5lIE5FVElGX0ZfQUxMX0NTVU0gTkVUSUZfRl9DU1VNX01BU0sNCj4gPiArDQo+IERp dG8NCj4gDQo+ID4gKyNkZWZpbmUgRU5BQkxFX1JUQVNFX1BST0NGUw0KPiA+ICsNCj4gVXNlIHN0 YW5kYXJkIGtlcm5lbCBtZWFucyBpbnN0ZWFkIG9mIGFkZGluZyBwcm9wcmlldGFyeSBwcm9jc2Zz IHN0dWZmLg0KPiANCj4gPiArI2RlZmluZSBORVRJRl9GX0hXX1ZMQU5fUlggTkVUSUZfRl9IV19W TEFOX0NUQUdfUlgNCj4gPiArI2RlZmluZSBORVRJRl9GX0hXX1ZMQU5fVFggTkVUSUZfRl9IV19W TEFOX0NUQUdfVFgNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ09ORklHX1NSSU9WIDENCj4gPiArDQo+ IFdoeSBub3QgYWx3YXlzIGVuYWJsZSBpdD8NCj4gDQo+ID4gKyNpZm5kZWYgTkVUSUZfRl9SWEFM TA0KPiA+ICsjZGVmaW5lIE5FVElGX0ZfUlhBTEwgMHUNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiBB bGwgdGhpcyBzdHVmZiBzZWVtcyB0byBjb21lIGZyb20gYSB2ZW5kb3IgZHJpdmVyIHRoYXQgaGFz IHRvIHN1cHBvcnQNCj4gbXVsdGlwbGUga2VybmVsIHZlcnNpb25zLiBUaGkgc2NhbiBiZSBzaW1w bGlmaWVkIG5vdy4NCj4gDQo+ID4gKyNpZm5kZWYgTkVUSUZfRl9SWEZDUw0KPiA+ICsjZGVmaW5l IE5FVElGX0ZfUlhGQ1MgMHUNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIFNFVF9O RVRERVZfREVWDQo+ID4gKyNkZWZpbmUgU0VUX05FVERFVl9ERVYobmV0LCBwZGV2KQ0KPiA+ICsj ZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYgU0VUX01PRFVMRV9PV05FUg0KPiA+ICsjZGVmaW5l IFNFVF9NT0RVTEVfT1dORVIoZGV2KQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYg U0FfU0hJUlENCj4gPiArI2RlZmluZSBTQV9TSElSUSBJUlFGX1NIQVJFRA0KPiA+ICsjZW5kaWYN Cj4gPiArDQo+ID4gKyNpZm5kZWYgTkVUSUZfRl9HU08NCj4gPiArI2RlZmluZSBnc29fc2l6ZSB0 c29fc2l6ZQ0KPiA+ICsjZGVmaW5lIGdzb19zZWdzIHRzb19zZWdzDQo+ID4gKyNlbmRpZg0KPiA+ ICsNCj4gPiArI2lmbmRlZiBkbWFfbWFwcGluZ19lcnJvcg0KPiA+ICsjZGVmaW5lIGRtYV9tYXBw aW5nX2Vycm9yKGEsIGIpIDANCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIG5ldGlm X2Vycg0KPiA+ICsjZGVmaW5lIG5ldGlmX2VycihhLCBiLCBjLCBkKQ0KPiA+ICsjZW5kaWYNCj4g PiArDQo+ID4gKyNpZm5kZWYgRkFMU0UNCj4gPiArI2RlZmluZSBGQUxTRSAwDQo+ID4gKyNlbmRp Zg0KPiA+ICsNCj4gPiArI2lmbmRlZiBUUlVFDQo+ID4gKyNkZWZpbmUgVFJVRSAxDQo+ID4gKyNl bmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBmYWxzZQ0KPiA+ICsjZGVmaW5lIGZhbHNlIDANCj4g PiArI2VuZGlmDQo+ID4gKw0KPiA+ICsjaWZuZGVmIHRydWUNCj4gPiArI2RlZmluZSB0cnVlIDEN Cj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsvKiB0aGUgbG93IDMyIGJpdCBhZGRyZXNzIG9mIHJl Y2VpdmUgYnVmZmVyIG11c3QgYmUgOC1ieXRlIGFsaWdubWVudC4gKi8NCj4gPiArI2RlZmluZSBS VEtfUlhfQUxJR04gKDh1KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBOQVBJX1NVRkZJWCAgICItTkFQ SSINCj4gPiArI2RlZmluZSBSVEFTRV9WRVJTSU9OICIxLjAwMi4wNiIgTkFQSV9TVUZGSVhSZW1v dmUgdGhpcw0KPiANCj4gPiArI2RlZmluZSBNT0RVTEVOQU1FICAgICJydGFzZSINCj4gPiArI2Rl ZmluZSBQRlggICAgICAgICAgIE1PRFVMRU5BTUUgIjogIg0KPiA+ICsNCj4gPiArI2RlZmluZSBH UExfQ0xBSU0gXA0KPiA+ICsgICAgICJydGFzZSAgQ29weXJpZ2h0IChDKSAyMDIxICBSZWFsdGVr IEFSRCBzb2Z0d2FyZSB0ZWFtXG5cDQo+ID4gKyAgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGgg QUJTT0xVVEVMWSBOTyBXQVJSQU5UWTtcblwNCj4gPiArICAgICBmb3IgZGV0YWlscywgcGxlYXNl IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG5cDQo+ID4gKyAgICAgVGhpcyBp cyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCB1 bmRlcg0KPiBjZXJ0YWluIGNvbmRpdGlvbnM7IFxuIFwNCj4gPiArICAgICBzZWUgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuIg0KPiA+ICsNCj4gPiArI2lmZGVmIFJUQVNFX0RFQlVH DQo+ID4gKyNkZWZpbmUgYXNzZXJ0KGV4cHIpDQo+IFwNCj4gPiArICAgICBkbw0KPiB7DQo+ICAg ICAgICAgICAgICAgICAgICAgICAgIFwNCj4gPiArICAgICAgICAgICAgIGlmICghKGV4cHIpKQ0K PiB7DQo+ICAgICAgIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcHJfaW5mbygiQXNzZXJ0 aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwNCj4gI2V4cHIsIF9fRklMRV9fLCBfX2Z1 bmNfXywgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTElORV9fKTsNCj4g XA0KPiA+ICsgICAgICAgICAgICAgfQ0KPiBcDQo+ID4gKyAgICAgfSB3aGlsZSAoMCkNCj4gPiAr I2RlZmluZSBkcHJpbnRrKGZtdCwgYXJncy4uLikgcHJfaW5mbyhQRlggZm10LCAjI2FyZ3MpDQo+ ID4gKyNlbHNlDQo+ID4gKyNkZWZpbmUgYXNzZXJ0KGV4cHIpDQo+ID4gKyNkZWZpbmUgZHByaW50 ayhmbXQsIGFyZ3MuLi4pDQo+ID4gKyNlbmRpZiAvKiBSVEFTRV9ERUJVRyAqLw0KPiA+ICsNCj4g PiArI2RlZmluZSBSVEFTRV9NU0dfREVGQVVMVCAoTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19Q Uk9CRSB8DQo+IE5FVElGX01TR19JRlVQIHwgTkVUSUZfTVNHX0lGRE9XTikNCj4gPiArDQo+ID4g KyNkZWZpbmUgVFhfQlVGRlNfQVZBSUwocmluZykgKChyaW5nKS0+ZGlydHlfaWR4ICsgTlVNX0RF U0MgLQ0KPiAocmluZyktPmN1cl9pZHggLSAxKQ0KPiA+ICsNCj4gPiArLyogTUFDIGFkZHJlc3Mg bGVuZ3RoICovDQo+ID4gKyNpZm5kZWYgTUFDX0FERFJfTEVODQo+ID4gKyNkZWZpbmUgTUFDX0FE RFJfTEVOIDZ1DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArI2lmbmRlZiBORVRJRl9GX1RTTzYN Cj4gPiArI2RlZmluZSBORVRJRl9GX1RTTzYgMHUNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFJYX0RNQV9CVVJTVF8yNTYgICAgICAgNHUNCj4gPiArI2RlZmluZSBUWF9ETUFfQlVS U1RfVU5MSU1JVEVEIDd1DQo+ID4gKyNkZWZpbmUgSlVNQk9fRlJBTUVfMUsgICAgICAgICAoRVRI X0RBVEFfTEVOKQ0KPiA+ICsjZGVmaW5lIEpVTUJPX0ZSQU1FXzlLICAgICAgICAgKCg5ICogMTAy NCkgLSBFVEhfSExFTiAtDQo+IFZMQU5fSExFTiAtIEVUSF9GQ1NfTEVOKQ0KPiA+ICsNCj4gPiAr LyogMyBtZWFucyBJbnRlckZyYW1lR2FwID0gdGhlIHNob3J0ZXN0IG9uZSAqLw0KPiA+ICsjZGVm aW5lIElOVEVSRlJBTUVHQVAgMHgwM3UNCj4gPiArDQo+ID4gKyNkZWZpbmUgUlRBU0VfUkVHU19T SVpFICAgICAoMjU2dSkNCj4gPiArI2RlZmluZSBSVEFTRV9QQ0lfUkVHU19TSVpFICgweDEwMCkN Cj4gPiArI2RlZmluZSBSVEFTRV9OQVBJX1dFSUdIVCAgICg2NCkNCj4gPiArDQo+ID4gKyNkZWZp bmUgUlRBU0VfVFhfVElNRU9VVCAoNiAqIEhaKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBUWF9EVVBM SUNBVEVfRElSVFlJRFhfQ09VTlQgM3UNCj4gPiArLyogU2V0IHRpbWVvdXQgdG8gMXMgKDB4Nzcz NTk0MCA9IDFzIC8gOG5zKSAqLw0KPiA+ICsjZGVmaW5lIFRJTUVPVVRfU0VUX1RJTUUgMHg3NzM1 OTQwdQ0KPiA+ICsNCj4gPiArI2RlZmluZSBWTEFOX0ZJTFRFUl9FTlRSWV9OVU0gMzJ1DQo+ID4g Ky8qIE51bWJlciBvZiBUeCBxdWV1ZXMgKi8NCj4gPiArI2RlZmluZSBOVU1fVFhfUVVFVUUgOHUN Cj4gPiArLyogTnVtYmVyIG9mIFJ4IHF1ZXVlcyAqLw0KPiA+ICsjZGVmaW5lIE5VTV9SWF9RVUVV RSA0dQ0KPiA+ICsvKiBOdW1iZXIgb2YgVHggZGVzY3JpcHRvciByZWdpc3RlcnMgKi8NCj4gPiAr I2RlZmluZSBOVU1fVFhfREVTQyAxMDI0dQ0KPiA+ICsNCj4gPiArLyogZGVmYXVsdCB0eCBpbnRl cnJ1cHQgbWl0aWdhdGlvbiwgbnVtID0gNjQsIHRpbWUgPSAxMzEuMDcydXMgKi8NCj4gPiArI2Rl ZmluZSBUWF9JTlRfTUlUSUdBVElPTiAweDM0NDh1DQo+ID4gKy8qIGRlZmF1bHQgcnggaW50ZXJy dXB0IG1pdGlnYXRpb24sIG51bSA9IDY0LCB0aW1lID0gMTMxLjA3MnVzICovDQo+ID4gKyNkZWZp bmUgUlhfSU5UX01JVElHQVRJT04gMHgzNDQ4dQ0KPiA+ICsNCj4gPiArI2RlZmluZSBOVU1fTVNJ WCA0dQ0KPiA+ICsNCj4gPiArLyogMHgwNUYzID0gMTUyMmJ5ZSArIDEgKi8NCj4gPiArI2RlZmlu ZSBSWF9CVUZfU0laRSAweDA1RjN1DQo+ID4gKw0KPiA+ICsvKiB3cml0ZS9yZWFkIE1NSU8gcmVn aXN0ZXIgKi8NCj4gPiArI2RlZmluZSBSVExfVzgocmVnLCB2YWw4KSAgIHdyaXRlYigodmFsOCks IGlvYWRkciArIChyZWcpKQ0KPiA+ICsjZGVmaW5lIFJUTF9XMTYocmVnLCB2YWwxNikgd3JpdGV3 KCh2YWwxNiksIGlvYWRkciArIChyZWcpKQ0KPiA+ICsjZGVmaW5lIFJUTF9XMzIocmVnLCB2YWwz Mikgd3JpdGVsKCh2YWwzMiksIGlvYWRkciArIChyZWcpKQ0KPiA+ICsjZGVmaW5lIFJUTF9SOChy ZWcpICAgICAgICAgcmVhZGIoaW9hZGRyICsgKHJlZykpDQo+ID4gKyNkZWZpbmUgUlRMX1IxNihy ZWcpICAgICAgICByZWFkdyhpb2FkZHIgKyAocmVnKSkNCj4gPiArI2RlZmluZSBSVExfUjMyKHJl ZykgICAgICAgIHJlYWRsKGlvYWRkciArIChyZWcpKQ0KPiA+ICsNCj4gPiArI2lmbmRlZiBETUFf NjRCSVRfTUFTSw0KPiA+ICsjZGVmaW5lIERNQV82NEJJVF9NQVNLIDB4RkZGRkZGRkZGRkZGRkZG RnVMTA0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNpZm5kZWYgRE1BXzMyQklUX01BU0sNCj4g PiArI2RlZmluZSBETUFfMzJCSVRfTUFTSyAweDAwMDAwMDAwRkZGRkZGRkZ1TEwNCj4gPiArI2Vu ZGlmDQo+ID4gKw0KPiA+DQo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKioqKioqKioqLw0KPiA+ICsjZGVm aW5lIFJUTF9ORVRJRl9SWF9TQ0hFRFVMRV9QUkVQKGRldiwgbmFwaSkNCj4gbmFwaV9zY2hlZHVs ZV9wcmVwKG5hcGkpDQo+ID4gKyNkZWZpbmUgX19SVExfTkVUSUZfUlhfU0NIRURVTEUoZGV2LCBu YXBpKSAgICBfX25hcGlfc2NoZWR1bGUobmFwaSkNCj4gPiArDQo+ID4NCj4gKy8qKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAq KioqKioqKioqKioqKiovDQo+ID4gKyNpZm5kZWYgbW9kdWxlX3BhcmFtDQo+ID4gKyNkZWZpbmUg bW9kdWxlX3BhcmFtKHYsIHQsIHApIE1PRFVMRV9QQVJNKHYsICJpIikNCj4gPiArI2VuZGlmDQo+ ID4gKw0KPiA+ICsjaWZuZGVmIFBDSV9ERVZJQ0UNCj4gPiArI2RlZmluZSBQQ0lfREVWSUNFKHZl bmQsIGRldikgXA0KPiA+ICsgICAgIC52ZW5kb3IgPSAodmVuZCksIC5kZXZpY2UgPSAoZGV2KSwg LnN1YnZlbmRvciA9DQo+IFBDSV9BTllfSUQsIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lEDQo+ID4g KyNlbmRpZg0KPiA+ICsNCj4gPg0KPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKi8NCj4gPiAr LyogUlRBU0VfcmVnaXN0ZXJzICovDQo+ID4gKyNkZWZpbmUgTUFDMCAgICAgICAgICAgICAgICAw eDAwMDB1DQo+ID4gKyNkZWZpbmUgTUFDNCAgICAgICAgICAgICAgICAweDAwMDR1DQo+ID4gKyNk ZWZpbmUgTUFSMCAgICAgICAgICAgICAgICAweDAwMDh1DQo+ID4gKyNkZWZpbmUgTUFSMSAgICAg ICAgICAgICAgICAweDAwMEN1DQo+ID4gKyNkZWZpbmUgRFRDQ1IwICAgICAgICAgICAgICAweDAw MTB1DQo+ID4gKyNkZWZpbmUgRFRDQ1I0ICAgICAgICAgICAgICAweDAwMTR1DQo+ID4gKyNkZWZp bmUgRkNSICAgICAgICAgICAgICAgICAweDAwMTh1DQo+ID4gKyNkZWZpbmUgTEJLX0NUUkwgICAg ICAgICAgICAweDAwMUF1DQo+ID4gKyNkZWZpbmUgVFhfREVTQ19TVEFSVF9BRERSMCAweDAwMjB1 DQo+ID4gKyNkZWZpbmUgVFhfREVTQ19TVEFSVF9BRERSNCAweDAwMjR1DQo+ID4gKyNkZWZpbmUg VFhfREVTQ19DT01NQU5EICAgICAweDAwMjh1DQo+ID4gKyNkZWZpbmUgQ0hJUF9DTUQgICAgICAg ICAgICAweDAwMzd1DQo+ID4gKyNkZWZpbmUgSU1SMCAgICAgICAgICAgICAgICAweDAwMzh1DQo+ ID4gKyNkZWZpbmUgSVNSMCAgICAgICAgICAgICAgICAweDAwM0N1DQo+ID4gKyNkZWZpbmUgSU1S MSAgICAgICAgICAgICAgICAweDA4MDB1DQo+ID4gKyNkZWZpbmUgSVNSMSAgICAgICAgICAgICAg ICAweDA4MDJ1DQo+ID4gKyNkZWZpbmUgVFhfQ09ORklHXzAgICAgICAgICAweDAwNDB1DQo+ID4g KyNkZWZpbmUgUlhfQ09ORklHXzAgICAgICAgICAweDAwNDR1DQo+ID4gKyNkZWZpbmUgUlhfQ09O RklHXzEgICAgICAgICAweDAwNDZ1DQo+ID4gKyNkZWZpbmUgRUVNICAgICAgICAgICAgICAgICAw eDAwNTB1DQo+ID4gKyNkZWZpbmUgVERGTlIgICAgICAgICAgICAgICAweDAwNTd1DQo+ID4gKyNk ZWZpbmUgVFBQT0xMICAgICAgICAgICAgICAweDAwOTB1DQo+ID4gKyNkZWZpbmUgUERSICAgICAg ICAgICAgICAgICAweDAwQjB1DQo+ID4gKyNkZWZpbmUgRklGT1IgICAgICAgICAgICAgICAweDAw RDN1DQo+ID4gKyNkZWZpbmUgUENQUiAgICAgICAgICAgICAgICAweDAwRDh1DQo+ID4gKyNkZWZp bmUgUk1TICAgICAgICAgICAgICAgICAweDAwREF1DQo+ID4gKyNkZWZpbmUgQ1BMVVNfQ01EICAg ICAgICAgICAweDAwREF1DQo+ID4gKyNkZWZpbmUgUTBfUlhfREVTQ19BRERSMCAgICAweDAwRTR1 DQo+ID4gKyNkZWZpbmUgUTBfUlhfREVTQ19BRERSNCAgICAweDAwRTh1DQo+ID4gKyNkZWZpbmUg UTFfUlhfREVTQ19BRERSMCAgICAweDQwMDB1DQo+ID4gKyNkZWZpbmUgUTFfUlhfREVTQ19BRERS NCAgICAweDQwMDR1DQo+ID4gKyNkZWZpbmUgTVRQUyAgICAgICAgICAgICAgICAweDAwRUN1DQo+ ID4gKyNkZWZpbmUgTUlTQyAgICAgICAgICAgICAgICAweDAwRjJ1DQo+ID4gKyNkZWZpbmUgVENU UjAgICAgICAgICAgICAgICAweDAwNDh1DQo+ID4gKyNkZWZpbmUgVElNRU9VVDBfQUREUiAgICAg ICAweDAwNTh1DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFRGVU5fQ1RSTCAgIDB4MDQwMHUNCj4gPiAr I2RlZmluZSBUWF9DT05GSUdfMSAweDIwM0V1DQo+ID4gKyNkZWZpbmUgVE9LU0VMICAgICAgMHgy MDQ2dQ0KPiA+ICsjZGVmaW5lIFRYUUNSRFRfMCAgIDB4MjUwMHUNCj4gPiArI2RlZmluZSBSRklG T05GVUxMICAweDQ0MDZ1DQo+ID4gKyNkZWZpbmUgVlFDVFJMICAgICAgMHg0ODAwdQ0KPiA+ICsj ZGVmaW5lIElOVF9NSVRJX1RYIDB4MEEwMHUNCj4gPiArI2RlZmluZSBJTlRfTUlUSV9SWCAweDBB ODB1DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZGTVNHREFUQV8wIDB4NzEwMHUNCj4gPiArI2RlZmlu ZSBWRk1TR0RBVEFfMiAweDcxMDR1DQo+ID4gKyNkZWZpbmUgUEZNU0dJQ1JSRVEgMHg3MTQwdQ0K PiA+ICsjZGVmaW5lIFBGTVNHSU1SICAgIDB4NzE0OHUNCj4gPiArI2RlZmluZSBQRk1TR1ZGMSAg ICAweDcyMDB1DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFZGX01BQ18wIDB4NzI5NHUNCj4gPiArI2Rl ZmluZSBWRl9NQUNfMiAweDcyOTZ1DQo+ID4gKyNkZWZpbmUgVkZfTUFDXzQgMHg3Mjk4dQ0KPiA+ ICsNCj4gPiArI2RlZmluZSBSWF9QQ1BfVEFCTEUgICAgIDB4NzJENHUNCj4gPiArI2RlZmluZSBW TEFOX0VOVFJZX01FTV8wIDB4NzIzNHUNCj4gPiArI2RlZmluZSBWTEFOX0VOVFJZXzAgICAgIDB4 QUM4MHUNCj4gPiArDQo+ID4gKy8qIFJUQVNFX3JlZ2lzdGVyX2NvbnRlbnQgKi8NCj4gPiArLyog SW50ZXJydXB0U3RhdHVzQml0cyAwICovDQo+ID4gKyNkZWZpbmUgVE9LNyAgICAgQklUKDMwKQ0K PiA+ICsjZGVmaW5lIFRPSzYgICAgIEJJVCgyOCkNCj4gPiArI2RlZmluZSBUT0s1ICAgICBCSVQo MjYpDQo+ID4gKyNkZWZpbmUgVE9LNCAgICAgQklUKDI0KQ0KPiA+ICsjZGVmaW5lIE1CWCAgICAg IEJJVCgxNikNCj4gPiArI2RlZmluZSBUSU1FT1VUMCBCSVQoMTQpDQo+ID4gKyNkZWZpbmUgRk9W VyAgICAgQklUKDYpDQo+ID4gKyNkZWZpbmUgUkRVICAgICAgQklUKDQpDQo+ID4gKyNkZWZpbmUg VE9LICAgICAgQklUKDIpDQo+ID4gKyNkZWZpbmUgUk9LICAgICAgQklUKDApDQo+ID4gKw0KPiA+ ICsvKiBJbnRlcnJ1cHRTdGF0dXNCaXRzIDF+MyAqLw0KPiA+ICsjZGVmaW5lIFFfVE9LIEJJVCg0 KQ0KPiA+ICsjZGVmaW5lIFFfUkRVIEJJVCgxKQ0KPiA+ICsjZGVmaW5lIFFfUk9LIEJJVCgwKQ0K PiA+ICsNCj4gPiArLyogQ2hpcENtZFJlZ0JpdHMgKi8NCj4gPiArI2RlZmluZSBTVE9QX1JFUSAg ICAgIEJJVCg3KQ0KPiA+ICsjZGVmaW5lIFNUT1BfUkVRX0RPTkUgQklUKDYpDQo+ID4gKyNkZWZp bmUgUkUgICAgICAgICAgICBCSVQoMykNCj4gPiArI2RlZmluZSBURSAgICAgICAgICAgIEJJVCgy KQ0KPiA+ICsNCj4gPiArLyogQ2ZnOTM0NkJpdHMgKi8NCj4gPiArI2RlZmluZSBFRU1fVW5sb2Nr IDB4QzB1DQo+ID4gKw0KPiA+ICsvKiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gMCAqLw0KPiA+ICsj ZGVmaW5lIFJYX1NJTkdMRV9GRVRDSCAgQklUKDE0KQ0KPiA+ICsjZGVmaW5lIFJYX1NJTkdMRV9U QUcgICAgQklUKDEzKQ0KPiA+ICsjZGVmaW5lIFJYX01YX0RNQV9NQVNLICAgMHg3DQo+ID4gKyNk ZWZpbmUgUlhfTVhfRE1BX1NISUZUICA4dQ0KPiA+ICsjZGVmaW5lIEFDUFRfRkxPVyAgICAgICAg QklUKDcpDQo+ID4gKyNkZWZpbmUgQUNDRVBUX0VSUiAgICAgICBCSVQoNSkNCj4gPiArI2RlZmlu ZSBBQ0NFUFRfUlVOVCAgICAgIEJJVCg0KQ0KPiA+ICsjZGVmaW5lIEFDQ0VQVF9CUk9BRENBU1Qg QklUKDMpDQo+ID4gKyNkZWZpbmUgQUNDRVBUX01VTFRJQ0FTVCBCSVQoMikNCj4gPiArI2RlZmlu ZSBBQ0NFUFRfTVlQSFlTICAgIEJJVCgxKQ0KPiA+ICsjZGVmaW5lIEFDQ0VQVF9BTExQSFlTICAg QklUKDApDQo+ID4gKyNkZWZpbmUgQUNDRVBUX01BU0sNCj4gXA0KPiA+ICsgICAgIChBQ1BUX0ZM T1cgfCBBQ0NFUFRfRVJSIHwgQUNDRVBUX1JVTlQgfCBBQ0NFUFRfQlJPQURDQVNUDQo+IHwgQUND RVBUX01VTFRJQ0FTVCBcDQo+ID4gKyAgICAgIHwgQUNDRVBUX01ZUEhZUyB8IEFDQ0VQVF9BTExQ SFlTKQ0KPiA+ICsNCj4gPiArLyogUmVjZWl2ZSBDb25maWd1cmF0aW9uIDEgKi8NCj4gPiArI2Rl ZmluZSBSWF9NQVhfRkVUQ0hfREVTQ19NQVNLICAweDFGDQo+ID4gKyNkZWZpbmUgUlhfTUFYX0ZF VENIX0RFU0NfU0hJRlQgMTF1DQo+ID4gKyNkZWZpbmUgUlhfTkVXX0RFU0NfRk9STUFUX0VOICAg QklUKDgpDQo+ID4gKyNkZWZpbmUgT1VURVJfVkxBTl9ERVRBR19FTiAgICAgQklUKDcpDQo+ID4g KyNkZWZpbmUgSU5ORVJfVkxBTl9ERVRBR19FTiAgICAgQklUKDYpDQo+ID4gKyNkZWZpbmUgUENJ RV9ORVdfRkxPVyAgICAgICAgICAgQklUKDIpDQo+ID4gKyNkZWZpbmUgUENJRV9SRUxPQURfRW4g ICAgICAgICAgQklUKDApDQo+ID4gKw0KPiA+ICsvKiBUeENvbmZpZ0JpdHMgKi8NCj4gPiArI2Rl ZmluZSBUWF9JTlRFUl9GUkFNRV9HQVBfTUFTSyAgMHgzdQ0KPiA+ICsjZGVmaW5lIFRYX0lOVEVS X0ZSQU1FX0dBUF9TSElGVCAyNHUNCj4gPiArI2RlZmluZSBUWF9ETUFfTUFTSyAgICAgICAgICAg ICAgMHg3dQ0KPiA+ICsvKiBETUEgYnVyc3QgdmFsdWUgKDAtNykgaXMgc2hpZnQgdGhpcyBtYW55 IGJpdHMgKi8NCj4gPiArI2RlZmluZSBUWF9ETUFfU0hJRlQgOHUNCj4gPiArDQo+ID4gKy8qIFRG dW5DdHJsICovDQo+ID4gKyNkZWZpbmUgVFhfTkVXX0RFU0NfRk9STUFUX0VOIEJJVCgwKQ0KPiA+ ICsNCj4gPiArLyogVHhEZXNjQ29tbWFuZCAqLw0KPiA+ICsjZGVmaW5lIFRYX0RFU0NfQ01EX0NT IEJJVCgxNSkNCj4gPiArI2RlZmluZSBUWF9ERVNDX0NNRF9XRSBCSVQoMTQpDQo+ID4gKw0KPiA+ ICsvKiBDUGx1c0NtZCAqLw0KPiA+ICsjZGVmaW5lIEZPUkNFX1JYRkxPV19FTiBCSVQoMTEpDQo+ ID4gKyNkZWZpbmUgRk9SQ0VfVFhGTE9XX0VOIEJJVCgxMCkNCj4gPiArI2RlZmluZSBSWF9DSEtT VU0gICAgICAgQklUKDUpDQo+ID4gKw0KPiA+ICsvKiBNSVNDICovDQo+ID4gKyNkZWZpbmUgUlhf RFZfR0FURV9FTiBCSVQoMykNCj4gPiArDQo+ID4gKy8qIFJlc2V0Q291bnRlckNvbW1hbmQgKi8N Cj4gPiArI2RlZmluZSBDT1VOVEVSX1JFU0VUIEJJVCgwKQ0KPiA+ICsvKiBEdW1wQ291bnRlckNv bW1hbmQgKi8NCj4gPiArI2RlZmluZSBDT1VOVEVSX0RVTVAgQklUKDMpDQo+ID4gKw0KPiA+ICsv KiBPQ1AgYWNjZXNzICovDQo+ID4gKyNkZWZpbmUgT0NQUl9XUklURSAgICAgICAgICAweDgwMDAw MDAwdQ0KPiA+ICsjZGVmaW5lIE9DUFJfQUREUl9SRUdfU0hJRlQgMTZ1DQo+ID4gKw0KPiA+ICsv KiBNQ1UgQ29tbWFuZCAqLw0KPiA+ICsjZGVmaW5lIFRYX0ZJRk9fRU1QVFkgQklUKDUpDQo+ID4g KyNkZWZpbmUgUlhfRklGT19FTVBUWSBCSVQoNCkNCj4gPiArDQo+ID4gKy8qIEZ1bmN0aW9uIENv bnRyb2wgUmVnaXN0ZXIgKi8NCj4gPiArI2RlZmluZSBGQ1JfVFhfTE9PUEJBQ0tfRU4gQklUKDkp DQo+ID4gKyNkZWZpbmUgRkNSX1RFICAgICAgICAgICAgIEJJVCg4KQ0KPiA+ICsjZGVmaW5lIEZD Ul9SWFFfTUFTSyAgICAgICAweDN1DQo+ID4gKyNkZWZpbmUgRkNSX1JYUV9TSElGVCAgICAgIDR1 DQo+ID4gKyNkZWZpbmUgRkNSX01BUl9FTiAgICAgICAgIEJJVCgzKQ0KPiA+ICsjZGVmaW5lIEZD Ul9CQVJfRU4gICAgICAgICBCSVQoMikNCj4gPiArI2RlZmluZSBGQ1JfVkxBTl9GVFJfRU4gICAg QklUKDEpDQo+ID4gKyNkZWZpbmUgRkNSX1JFICAgICAgICAgICAgIEJJVCgwKQ0KPiA+ICsNCj4g PiArLyogTG9vcGJhY2sgQ29udHJvbCAqLw0KPiA+ICsjZGVmaW5lIExCS19BVExEIEJJVCgxKQ0K PiA+ICsjZGVmaW5lIExCS19DTFIgIEJJVCgwKQ0KPiA+ICsNCj4gPiArLyogUENQIFJlZ2lzdGVy ICovDQo+ID4gKyNkZWZpbmUgUENQUl9WTEFOX0ZUUl9FTiBCSVQoNikNCj4gPiArDQo+ID4gKy8q UlRBU0VfcmVnaXN0ZXJfY29udGVudCBFTkQgKi8NCj4gPiArDQo+ID4gKy8qIF9EZXNjU3RhdHVz Qml0ICovDQo+ID4gKyNkZWZpbmUgREVTQ19PV04gQklUKDMxKSAvKiBEZXNjcmlwdG9yIGlzIG93 bmVkIGJ5IE5JQyAqLw0KPiA+ICsjZGVmaW5lIFJJTkdfRU5EIEJJVCgzMCkgLyogRW5kIG9mIGRl c2NyaXB0b3IgcmluZyAqLw0KPiA+ICsNCj4gPiArLyogVHggcHJpdmF0ZSAqLw0KPiA+ICsvKi0t LS0tLSBvZmZzZXQgMCBvZiB0eCBkZXNjcmlwdG9yIC0tLS0tLSovDQo+ID4gKyNkZWZpbmUgVFhf RklSU1RfRlJBRyBCSVQoMjkpIC8qIFR4IEZpcnN0IHNlZ21lbnQgb2YgYSBwYWNrZXQgKi8NCj4g PiArI2RlZmluZSBUWF9MQVNUX0ZSQUcgIEJJVCgyOCkgLyogVHggRmluYWwgc2VnbWVudCBvZiBh IHBhY2tldCAqLw0KPiA+ICsjZGVmaW5lIEdJQU5UX1NFTkRfVjQgQklUKDI2KSAvKiBUQ1AgR2lh bnQgU2VuZCBPZmZsb2FkIFY0IChHU092NCkgKi8NCj4gPiArI2RlZmluZSBHSUFOVF9TRU5EX1Y2 IEJJVCgyNSkgLyogVENQIEdpYW50IFNlbmQgT2ZmbG9hZCBWNiAoR1NPdjYpICovDQo+ID4gKyNk ZWZpbmUgVFhfVkxBTl9UQUcgICBCSVQoMTcpIC8qIEFkZCBWTEFOIHRhZyAqLw0KPiA+ICsNCj4g PiArLyotLS0tLS0gb2Zmc2V0IDQgb2YgdHggZGVzY3JpcHRvciAtLS0tLS0qLw0KPiA+ICsjZGVm aW5lIFRYX1VEUENTX0MgQklUKDMxKSAvKiBDYWxjdWxhdGUgVURQL0lQIGNoZWNrc3VtICovDQo+ ID4gKyNkZWZpbmUgVFhfVENQQ1NfQyBCSVQoMzApIC8qIENhbGN1bGF0ZSBUQ1AvSVAgY2hlY2tz dW0gKi8NCj4gPiArI2RlZmluZSBUWF9JUENTX0MgIEJJVCgyOSkgLyogQ2FsY3VsYXRlIElQIGNo ZWNrc3VtICovDQo+ID4gKyNkZWZpbmUgVFhfSVBWNkZfQyBCSVQoMjgpIC8qIEluZGljYXRlIGl0 IGlzIGFuIElQdjYgcGFja2V0ICovDQo+ID4gKw0KPiA+ICsvKiBSeCBwcml2YXRlICovDQo+ID4g Ky8qLS0tLS0tIG9mZnNldCAyOCBvZiByeCBkZXNjcmlwdG9yIC0tLS0tLSovDQo+ID4gKyNkZWZp bmUgUlhfRklSU1RfRlJBRyBCSVQoMjUpIC8qIFJ4IEZpcnN0IHNlZ21lbnQgb2YgYSBwYWNrZXQg Ki8NCj4gPiArI2RlZmluZSBSWF9MQVNUX0ZSQUcgIEJJVCgyNCkgLyogUnggRmluYWwgc2VnbWVu dCBvZiBhIHBhY2tldCAqLw0KPiA+ICsjZGVmaW5lIFJYX1JFUyAgICAgICAgQklUKDIwKQ0KPiA+ ICsjZGVmaW5lIFJYX1JVTlQgICAgICAgQklUKDE5KQ0KPiA+ICsjZGVmaW5lIFJYX1JXVCAgICAg ICAgQklUKDE4KQ0KPiA+ICsjZGVmaW5lIFJYX0NSQyAgICAgICAgQklUKDE2KQ0KPiA+ICsNCj4g PiArI2RlZmluZSBSWF9WNkYgICAgICAgICAgIEJJVCgzMSkNCj4gPiArI2RlZmluZSBSWF9WNEYg ICAgICAgICAgIEJJVCgzMCkNCj4gPiArI2RlZmluZSBSWF9VRFBUICAgICAgICAgIEJJVCgyOSkN Cj4gPiArI2RlZmluZSBSWF9UQ1BUICAgICAgICAgIEJJVCgyOCkNCj4gPiArI2RlZmluZSBSWF9J UEYgICAgICAgICAgIEJJVCgyNikgLyogSVAgY2hlY2tzdW0gZmFpbGVkICovDQo+ID4gKyNkZWZp bmUgUlhfVURQRiAgICAgICAgICBCSVQoMjUpIC8qIFVEUC9JUCBjaGVja3N1bSBmYWlsZWQgKi8N Cj4gPiArI2RlZmluZSBSWF9UQ1BGICAgICAgICAgIEJJVCgyNCkgLyogVENQL0lQIGNoZWNrc3Vt IGZhaWxlZCAqLw0KPiA+ICsjZGVmaW5lIFJYX0xCS19GSUZPX0ZVTEwgQklUKDE3KSAvKiBMb29w YmFjayBGSUZPIEZ1bGwgKi8NCj4gPiArI2RlZmluZSBSWF9WTEFOX1RBRyAgICAgIEJJVCgxNikg LyogVkxBTiB0YWcgYXZhaWxhYmxlICovDQo+ID4gKy8qIF9EZXNjU3RhdHVzQml0IEVORCAqLw0K PiA+ICsNCj4gPiArLyogc3dfZmxhZ19jb250ZW50ICovDQo+ID4gKyNkZWZpbmUgU1dGX1NSSU9W X0VOQUJMRUQgQklUKDApDQo+ID4gKyNkZWZpbmUgU1dGX01TSV9FTkFCTEVEICAgQklUKDEpDQo+ ID4gKyNkZWZpbmUgU1dGX01TSVhfRU5BQkxFRCAgQklUKDIpDQo+ID4gKw0KPiA+ICsjZGVmaW5l IFJTVkRfTUFTSyAweDNGRkZDMDAwdQ0KPiA+ICsNCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ ICsgICAgIHUzMiBvcHRzMTsNCj4gTW9zdCBsaWtlbHkgdGhpcyBzaG91bGQgYmUgX19sZTMyLg0K PiBTaW1pbGFyIGZvciB0aGUgb3RoZXIgZGVzY3JpcHRvciBmaWVsZHMuDQo+IA0KPiA+ICsgICAg IHUzMiBvcHRzMjsNCj4gPiArICAgICB1NjQgYWRkcjsNCj4gPiArICAgICB1MzIgb3B0czM7DQo+ ID4gKyAgICAgdTMyIHJlc2VydmVkMTsNCj4gPiArICAgICB1MzIgcmVzZXJ2ZWQyOw0KPiA+ICsg ICAgIHUzMiByZXNlcnZlZDM7DQo+ID4gK30gdHhfZGVzYzsNCj4gPiArDQo+ID4gK3R5cGVkZWYg dW5pb24gew0KPiA+ICsgICAgIHN0cnVjdCB7DQo+ID4gKyAgICAgICAgICAgICB1NjQgaGVhZGVy X2J1Zl9hZGRyOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHJlc2VydmVkMTsNCj4gPiArICAgICAg ICAgICAgIHUzMiBvcHRzX2hlYWRlcl9sZW47DQo+ID4gKyAgICAgICAgICAgICB1NjQgYWRkcjsN Cj4gPiArICAgICAgICAgICAgIHUzMiByZXNlcnZlZDI7DQo+ID4gKyAgICAgICAgICAgICB1MzIg b3B0czE7DQo+ID4gKyAgICAgfSBkZXNjX2NtZDsNCj4gPiArDQo+ID4gKyAgICAgc3RydWN0IHsN Cj4gPiArICAgICAgICAgICAgIHUzMiByZXNlcnZlZDE7DQo+ID4gKyAgICAgICAgICAgICB1MzIg cmVzZXJ2ZWQyOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHJzczsNCj4gPiArICAgICAgICAgICAg IHUzMiBvcHRzNDsNCj4gPiArICAgICAgICAgICAgIHUzMiByZXNlcnZlZDM7DQo+ID4gKyAgICAg ICAgICAgICB1MzIgb3B0czM7DQo+ID4gKyAgICAgICAgICAgICB1MzIgb3B0czI7DQo+ID4gKyAg ICAgICAgICAgICB1MzIgb3B0czE7DQo+ID4gKyAgICAgfSBkZXNjX3N0YXR1czsNCj4gPiArDQo+ ID4gKyAgICAgc3RydWN0IHsNCj4gPiArICAgICAgICAgICAgIHUzMiByZXNlcnZlZDE7DQo+ID4g KyAgICAgICAgICAgICB1MzIgcmVzZXJ2ZWQyOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHJlc2Vy dmVkMzsNCj4gPiArICAgICAgICAgICAgIHUzMiByZXNlcnZlZDQ7DQo+ID4gKyAgICAgICAgICAg ICB1MzIgdGltZV9zdGFtcF8wXzMxOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHRpbWVfc3RhbXBf MzJfNjM7DQo+ID4gKyAgICAgICAgICAgICB1MzIgdGltZV9zdGFtcF82NF83OTsNCj4gPiArICAg ICAgICAgICAgIHUzMiBvcHRzMTsNCj4gPiArICAgICB9IGRlc2NfcHRwOw0KPiA+ICsNCj4gPiAr ICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICAgdTMyIHJzdmQxOw0KPiA+ICsgICAgICAg ICAgICAgdTMyIHJzdmQyOw0KPiA+ICsgICAgICAgICAgICAgdTMyIHJzdmQzOw0KPiA+ICsgICAg ICAgICAgICAgdTMyIHJzdmQ0Ow0KPiA+ICsgICAgICAgICAgICAgdTMyIHJzdmQ1Ow0KPiA+ICsg ICAgICAgICAgICAgdTMyIHJzdmQ2Ow0KPiA+ICsgICAgICAgICAgICAgdTMyIG9wdHMyOw0KPiA+ ICsgICAgICAgICAgICAgdTMyIG9wdHMxOw0KPiA+ICsgICAgIH0gZGVzY19yc2M7DQo+ID4gK30g cnhfZGVzYzsNCj4gPiArDQo+ID4gKyNkZWZpbmUgQ01EX0RCR19SRUFEICAgICAgICAxdQ0KPiA+ ICsjZGVmaW5lIENNRF9EQkdfV1JJVEUgICAgICAgMnUNCj4gPiArI2RlZmluZSBDTURfUkVHX1JF QUQxNiAgICAgIDN1DQo+ID4gKyNkZWZpbmUgQ01EX1JFR19XUklURTE2ICAgICA0dQ0KPiA+ICsj ZGVmaW5lIENNRF9SRUdfUkVBRDMyICAgICAgNXUNCj4gPiArI2RlZmluZSBDTURfUkVHX1dSSVRF MzIgICAgIDZ1DQo+ID4gKyNkZWZpbmUgQ01EX0dFVF9SWFFPUyAgICAgICA3dQ0KPiA+ICsjZGVm aW5lIENNRF9TRVRfUlhRT1MgICAgICAgOHUNCj4gPiArI2RlZmluZSBDTURfR0VUX1RJTVNJRyAg ICAgIDl1DQo+ID4gKyNkZWZpbmUgQ01EX1NFVF9USU1TSUcgICAgICAxMHUNCj4gPiArI2RlZmlu ZSBTSU9fUFJJVl9SVEtfUkVHICAgIChTSU9DREVWUFJJVkFURSArIDYpDQo+ID4gKyNkZWZpbmUg U0lPX1BSSVZfUlRLX1JYUU9TICAoU0lPQ0RFVlBSSVZBVEUgKyA3KQ0KPiA+ICsjZGVmaW5lIFNJ T19USU1FT1VUX1NJR19TRVQgKFNJT0NERVZQUklWQVRFICsgOCkNCj4gPiArI2RlZmluZSBTSU9f UFJJVl9SVEtfUFRNICAgIChTSU9DREVWUFJJVkFURSArIDkpDQo+ID4gKyNkZWZpbmUgU0lPX1BS SVZfUlRLX0lORk8gICAoU0lPQ0RFVlBSSVZBVEUgKyAxMCkNCj4gPiArI2RlZmluZSBUSU1FT1VU X0lOSVQgICAgICAgIDANCj4gPiArI2RlZmluZSBUSU1FT1VUX0VSUk9SICAgICAgIDk5DQo+ID4g KyNkZWZpbmUgRFdPUkRfTU9EICAgICAgICAgICAxNg0KPiA+ICsNCj4gPiArc3RydWN0IHJ0YXNl X3B0bV9jbWRfdCB7DQo+ID4gKyAgICAgLyogZGlzYWJsZTowLCBlbmFibGU6MSAqLw0KPiA+ICsg ICAgIHU4IGVuYWJsZTsNCj4gPiArICAgICB1OCB0eXBlOw0KPiA+ICsgICAgIHU4IGJpdHM7DQo+ ID4gKyAgICAgdTMyIHJlZ19hZGRyOw0KPiA+ICsgICAgIHUzMiBwdG1fYWRkcjsNCj4gPiArICAg ICB1MzIgcmVnX3ZhbHVlOw0KPiA+ICsgICAgIHU2NCBwdHBfc2Vjb25kOw0KPiA+ICsgICAgIHUz MiBwdHBfbmFub19zZWNvbmQ7DQo+ID4gKyAgICAgdTY0IHB0bV90aW1lOw0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RydWN0IHJlZ19ydyB7DQo+ID4gKyAgICAgdTE2IGNtZDsNCj4gPiArICAgICB1 MTYgYWRkcjsNCj4gPiArICAgICB1MzIgdmFsOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0 IHJ0a19xb3Mgew0KPiA+ICsgICAgIHUxNiBjbWQ7DQo+ID4gKyAgICAgdTggcGNwOw0KPiA+ICsg ICAgIHU4IHRjOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHJ0a190aW1lb3V0X3NpZyB7 DQo+ID4gKyAgICAgdTE2IGNtZDsNCj4gPiArICAgICB1MTYgc3RhdGU7DQo+ID4gK307DQo+ID4g Kw0KPiA+ICsjaWZkZWYgQ09ORklHX1NSSU9WDQo+ID4gK3N0cnVjdCB2Zl9pbmZvIHsNCj4gPiAr ICAgICBzdHJ1Y3QgcGNpX2RldiAqdmZfcGNpX2RldjsNCj4gPiArICAgICB1OCBzdGF0dXM7DQo+ ID4gKyAgICAgdTggdmZfbWFjW0VUSF9BTEVOXTsNCj4gPiArICAgICB1MzIgbWNfZmlsdGVyWzJd Ow0KPiA+ICt9Ow0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyNkZWZpbmUgTlVNX0RFU0MgICAg ICAgICAgICAgICAgMTAyNHUNCj4gPiArI2RlZmluZSBSVEFTRV9UWF9SSU5HX0RFU0NfU0laRSAo TlVNX0RFU0MgKiBzaXplb2YodHhfZGVzYykpDQo+ID4gKyNkZWZpbmUgUlRBU0VfUlhfUklOR19E RVNDX1NJWkUgKE5VTV9ERVNDICogc2l6ZW9mKHJ4X2Rlc2MpKQ0KPiA+ICsjZGVmaW5lIFZMQU5f RU5UUllfQ0FSRUJJVCAgICAgIDB4RjAwMDAwMDB1DQo+ID4gKw0KPiA+ICsvKiB0eHFvcyBoYXJk d2FyZSBkZWZpbml0aW9ucyAqLw0KPiA+ICsjZGVmaW5lIFJUQVNFXzFUX0NMT0NLICAgICAgICAg ICAgNjR1DQo+ID4gKyNkZWZpbmUgUlRBU0VfMVRfUE9XRVIgICAgICAgICAgICAxMDAwMDAwMHUN Cj4gPiArI2RlZmluZSBSVEFTRV9JRExFU0xPUEVfSU5UX1NISUZUIDI1dQ0KPiA+ICsNCj4gPiAr c3RydWN0IHJ0YXNlX2ludF92ZWN0b3Igew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRl ICp0cDsNCj4gPiArICAgICB1bnNpZ25lZCBpbnQgaXJxOw0KPiA+ICsgICAgIHU4IHN0YXR1czsN Cj4gPiArICAgICB1OCBuYW1lWzIwXTsNCj4gPiArICAgICB1MTYgaW5kZXg7DQo+ID4gKyAgICAg dTE2IGltcl9hZGRyOw0KPiA+ICsgICAgIHUxNiBpc3JfYWRkcjsNCj4gPiArICAgICB1MzIgaW1y Ow0KPiA+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgcmluZ19saXN0Ow0KPiA+ICsgICAgIHN0cnVj dCBuYXBpX3N0cnVjdCBuYXBpOw0KPiA+ICsgICAgIGludCB3ZWlnaHQ7DQo+ID4gKyAgICAgaW50 ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0cnVjdCBydGFzZV9yaW5nIHsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2Vf aW50X3ZlY3RvciAqaXZlYzsNCj4gPiArICAgICB2b2lkICpkZXNjOw0KPiA+ICsgICAgIGRtYV9h ZGRyX3QgcGh5X2FkZHI7DQo+ID4gKyAgICAgdTMyIGN1cl9pZHg7DQo+ID4gKyAgICAgdTMyIGRp cnR5X2lkeDsNCj4gPiArICAgICB1MzIgcHJpdl9kaXJ0eV9pZHg7DQo+ID4gKyAgICAgdTggZHVw bGljYXRlX2RpcnR5X2NvdW50Ow0KPiA+ICsgICAgIHUxNiBpbmRleDsNCj4gPiArDQo+ID4gKyAg ICAgc3RydWN0IHNrX2J1ZmYgKnNrYnVmZltOVU1fREVTQ107DQo+ID4gKyAgICAgdW5pb24gew0K PiA+ICsgICAgICAgICAgICAgdTMyIGxlbltOVU1fREVTQ107DQo+ID4gKyAgICAgICAgICAgICBk bWFfYWRkcl90IGRhdGFfcGh5X2FkZHJbTlVNX0RFU0NdOw0KPiA+ICsgICAgIH0gbWlzOw0KPiA+ ICsNCj4gPiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJpbmdfZW50cnk7DQo+ID4gKyAgICAgczMy ICgqcmluZ19oYW5kbGVyKShzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZywgczMyIGJ1ZGdldCk7DQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcnRhc2VfdHhxb3Mgew0KPiA+ICsgICAgIHMzMiBo aWNyZWRpdDsNCj4gPiArICAgICBzMzIgbG9jcmVkaXQ7DQo+ID4gKyAgICAgczMyIGlkbGVzbG9w ZTsNCj4gPiArICAgICBzMzIgc2VuZHNsb3BlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0 IHJ0YXNlX3ByaXZhdGUgew0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqbW1pb19hZGRyOyAvKiBt ZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8NCj4gPiArDQo+ID4gKyNpZmRlZiBSREJHX01T SVgNCj4gPiArICAgICB1OCBfX2lvbWVtICptc2l4X2FkZHI7DQo+ID4gKyNlbmRpZg0KPiA+ICsN Cj4gPiArICAgICB1MzIgc3dfZmxhZzsNCj4gPiArICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXNn X3dvcms7DQo+ID4gKyAgICAgc3RydWN0IHdvcmtfc3RydWN0IHdhdGNoZG9nX3dvcms7DQo+ID4g KyAgICAgdTMyIG1jX2ZpbHRlclsyXTsNCj4gPiArDQo+ID4gKyAgICAgc3RydWN0IHBjaV9kZXYg KnBkZXY7IC8qIEluZGV4IG9mIFBDSSBkZXZpY2UgKi8NCj4gPiArICAgICBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2Ow0KPiA+ICsgICAgIHNwaW5sb2NrX3QgbG9jazsgICAgICAvKiBzcGluIGxvY2sg ZmxhZyAqLw0KPiA+ICsgICAgIHUzMiBtc2dfZW5hYmxlOw0KPiA+ICsgICAgIHUxNiBtYXhfanVt Ym9fZnJhbWVfc2l6ZTsNCj4gPiArICAgICB1OCBtY2ZnOw0KPiA+ICsgICAgIHUzMiByeF9idWZf c3o7DQo+ID4gKw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9yaW5nIHR4X3JpbmdbTlVNX1RYX1FV RVVFXTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfdHhxb3MgdHhfcW9zW05VTV9UWF9RVUVVRV07 DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3JpbmcgcnhfcmluZ1tOVU1fUlhfUVVFVUVdOw0KPiA+ ICsgICAgIHN0cnVjdCBydGFzZV9jb3VudGVycyAqdGFsbHlfdmFkZHI7DQo+ID4gKyAgICAgZG1h X2FkZHJfdCB0YWxseV9wYWRkcjsNCj4gPiArDQo+ID4gKyAgICAgdTMyIHZsYW5fZmlsdGVyX2N0 cmw7DQo+ID4gKyAgICAgdTE2IHZsYW5fZmlsdGVyX3ZpZFtWTEFOX0ZJTFRFUl9FTlRSWV9OVU1d Ow0KPiA+ICsNCj4gPiArICAgICBzdHJ1Y3QgZGVsYXllZF93b3JrIHRhc2s7DQo+ID4gKyAgICAg dTggaHdfaWNfdmVyX3Vua25vd247DQo+ID4gKyAgICAgdTggcmFuZG9tX21hYzsNCj4gPiArICAg ICB1OCBvcmdfbWFjX2FkZHJbTUFDX0FERFJfTEVOXTsNCj4gPiArDQo+ID4gKyNpZmRlZiBFTkFC TEVfUlRBU0VfUFJPQ0ZTDQo+ID4gKyAgICAgLyogUHJvY2ZzIHN1cHBvcnQgKi8NCj4gPiArICAg ICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZGlyOw0KPiA+ICsjZW5kaWYNCj4gPiArI2lm ZGVmIENPTkZJR19TUklPVg0KPiA+ICsgICAgIHN0cnVjdCB2Zl9pbmZvICp2Zl9pbmZvOw0KPiA+ ICsgICAgIHUxNiBudW1fdmZzOw0KPiA+ICsgICAgIHUxNiB0b3RhbF92ZnM7DQo+ID4gKyNlbmRp Zg0KPiA+ICsgICAgIHN0cnVjdCBtc2l4X2VudHJ5IG1zaXhfZW50cnlbTlVNX01TSVhdOw0KPiA+ ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yIGludF92ZWN0b3JbTlVNX01TSVhdOw0KPiA+ ICsNCj4gPiArICAgICB1MTYgdHhfcXVldWVfY3RybDsNCj4gPiArICAgICB1MTYgZnVuY190eF9x dWV1ZV9udW07DQo+ID4gKyAgICAgdTE2IGZ1bmNfcnhfcXVldWVfbnVtOw0KPiA+ICsgICAgIHUx NiBpbnRfbnVtczsNCj4gPiArICAgICB1MTYgdHhfaW50X21pdDsNCj4gPiArICAgICB1MTYgcnhf aW50X21pdDsNCj4gPiArDQo+ID4gKyAgICAgLyogdGltZW91dCBzdGF0ZSAqLw0KPiA+ICsgICAg IHUxNiB0aW1lb3V0X3N0YXRlOw0KPiA+ICsNCj4gPiArICAgICAvKiBwdG0gKi8NCj4gPiArICAg ICB1OCBwdG1fc3VwcG9ydDsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIG1jZmcgKi8NCj4gPiAr I2RlZmluZSBDRkdfTUVUSE9EXzEgICAgICAgKDB1KQ0KPiA+ICsjZGVmaW5lIENGR19NRVRIT0Rf REVGQVVMVCAoMXUpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIExTT182NEsgNjQwMDANCj4gPiArDQo+ ID4gKyNkZWZpbmUgTklDX01JTl9QSFlTX0JVRl9DT1VOVCAgICAgICgyKQ0KPiA+ICsjZGVmaW5l IE5JQ19NQVhfUEhZU19CVUZfQ09VTlRfTFNPMiAoMTYgKiA0KQ0KPiA+ICsNCj4gPiArI2RlZmlu ZSBHVFRDUEhPX1NISUZUIDE4DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFRDUEhPX1NISUZUIDE4dQ0K PiA+ICsjZGVmaW5lIFRDUEhPX01BWCAgIDB4M0ZGdQ0KPiA+ICsNCj4gPiArI2RlZmluZSBNU1Nf TUFYIDB4MDdGRnUgLyogTVNTIHZhbHVlICovDQo+ID4gKw0KPiA+ICt2b2lkIHJ0YXNlX2h3X3Jl c2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiA+ICt2b2lkIHJ0YXNlX3R4X2Ns ZWFyKHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCk7DQo+ID4gK3ZvaWQgcnRhc2VfcnhfY2xlYXIo c3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKTsNCj4gPiArczMyIHJ0YXNlX2luaXRfcmluZyhjb25z dCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArdm9pZCBydGFzZV9od19zdGFydChjb25z dCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArdm9pZCBydGFzZV9od19zZXRfcnhfcGFj a2V0X2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gPiArdm9pZCBydGFzZV9mdW5j X2VuYWJsZShjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApOw0KPiA+ICt2b2lkIHJ0YXNl X2Z1bmNfZGlzYWJsZShjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApOw0KPiA+ICsNCj4g PiArI2VuZGlmIC8qIFJUQVNFX0hfICovDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0 aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5jDQo+IGIvZHJpdmVycy9uZXQvZXRoZXJu ZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9tYWluLmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTY3NDRiZDdmNmFjDQo+ID4gLS0tIC9kZXYvbnVsbA0K PiA+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2VfbWFpbi5j DQo+ID4gQEAgLTAsMCArMSw0Nzk3IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqICBydGFzZSBpcyB0aGUgTGludXggZGV2aWNlIGRy aXZlciByZWxlYXNlZCBmb3IgUmVhbHRlayBBdXRvbW90aXZlIFN3aXRjaA0KPiA+ICsgKiAgY29u dHJvbGxlcnMgd2l0aCBQQ0ktRXhwcmVzcyBpbnRlcmZhY2UuDQo+ID4gKyAqDQo+ID4gKyAqICBD b3B5cmlnaHQoYykgMjAyMyBSZWFsdGVrIFNlbWljb25kdWN0b3IgQ29ycC4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4NCj4gPiArICoNCj4gPiArICogIEF1dGhvcjoNCj4gPiArICogIFJlYWx0ZWsgQVJE IHNvZnR3YXJlIHRlYW0NCj4gPiArICogIE5vLiAyLCBJbm5vdmF0aW9uIFJvYWQgSUksIEhzaW5j aHUgU2NpZW5jZSBQYXJrLCBIc2luY2h1IDMwMCwgVGFpd2FuDQo+ID4gKyAqDQo+ID4gKyAqLw0K PiA+ICsNCj4gPg0KPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiArICogIFRoaXMg cHJvZHVjdCBpcyBjb3ZlcmVkIGJ5IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgcGF0ZW50 czoNCj4gPiArICogIFVTNiw1NzAsODg0LCBVUzYsMTE1LDc3NiwgYW5kIFVTNiwzMjcsNjI1Lg0K PiA+ICsNCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioqKioqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9ldGhl cmRldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2lmX3ZsYW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9pcC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXB2Ni5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvdGNwLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3ByZWZldGNoLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21kaW8u aD4NCj4gPiArI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4NCj4gPiArI2luY2x1ZGUgPG5l dC9wa3RfY2xzLmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4gPiArI2lu Y2x1ZGUgPGFzbS9pcnEuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlICJydGFzZS5oIg0KPiA+ICsj aWZkZWYgQ09ORklHX1NSSU9WDQo+ID4gKyNpbmNsdWRlICJydGFzZV9zcmlvdi5oIg0KPiA+ICsj ZW5kaWYNCj4gPiArDQo+ID4gKyNpZmRlZiBFTkFCTEVfUlRBU0VfUFJPQ0ZTDQo+ID4gKyNpbmNs dWRlIDxsaW51eC9wcm9jX2ZzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPg0K PiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKy8qIE1heGltdW0gbnVtYmVyIG9mIG11bHRpY2FzdCBh ZGRyZXNzZXMgdG8gZmlsdGVyICh2cy4gUngtYWxsLW11bHRpY2FzdCkuDQo+ID4gKyAqIFRoZSBS VEwgY2hpcHMgdXNlIGEgNjQgZWxlbWVudCBoYXNoIHRhYmxlIGJhc2VkIG9uIHRoZSBFdGhlcm5l dCBDUkMuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndv cmtfcXVldWU7DQo+ID4gKw0KPiA+ICsjZGVmaW5lIF9SKE5BTUUsIE1BQywgSlVNX0ZSQU1FX1Na KQ0KPiBcDQo+ID4gKw0KPiB7DQo+ICAgXA0KPiA+ICsgICAgICAgICAgICAgLm5hbWUgPSBOQU1F LCAubWNmZyA9IE1BQywgLmp1bWJvX2ZyYW1lX3N6ID0NCj4gSlVNX0ZSQU1FX1NaIFwNCj4gPiAr ICAgICB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHsNCj4gPiArICAgICBjb25z dCBjaGFyICpuYW1lOw0KPiA+ICsgICAgIHU4IG1jZmc7DQo+ID4gKyAgICAgdTE2IGp1bWJvX2Zy YW1lX3N6Ow0KPiA+ICt9IHJ0bF9jaGlwX2luZm9bXSA9IHtfUigiUlRMOTA3MiIsIENGR19NRVRI T0RfMSwgSlVNQk9fRlJBTUVfOUspLA0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgX1Io IlVua25vd24iLCBDRkdfTUVUSE9EX0RFRkFVTFQsDQo+IEpVTUJPX0ZSQU1FXzFLKX07DQo+ID4g KyN1bmRlZiBfUg0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0YXNl X3BjaV90YmxbXSA9IHsNCj4gPiArICAgICB7DQo+ID4gKyAgICAgICAgICAgICBQQ0lfREVWSUNF KFBDSV9WRU5ET1JfSURfUkVBTFRFSywgMHg5MDZBKSwNCj4gPiArICAgICB9LA0KPiA+ICsgICAg IHsNCj4gPiArICAgICAgICAgICAgIDAsDQo+ID4gKyAgICAgfSwNCj4gPiArfTsNCj4gPiArDQo+ ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBydGFzZV9wY2lfdGJsKTsNCj4gPiArTU9EVUxF X0FVVEhPUigiUmVhbHRlayBBUkQgU29mdHdhcmUgVGVhbSIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIlJlYWx0ZWsgQXV0b21vdGl2ZSBTd2l0Y2ggRXRoZXJuZXQgYW5kIE5ldHdvcmsNCj4g UENJZSBEcml2ZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiA+ICtNT0RVTEVf VkVSU0lPTihSVEFTRV9WRVJTSU9OKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qgew0KPiA+ ICsgICAgIHUzMiBtc2dfZW5hYmxlOw0KPiA+ICt9IGRlYnVnID0gey0xfTsNCj4gPiArDQo+ID4N Cj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KPiAqKioqKioqKioqKioqKioqDQo+ID4gKyAqIE1vZHVsZSBQYXJhbWV0ZXJz DQo+ID4gKw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqLw0KPiANCj4gTW9kdWxlIHBhcmFt ZXRlcnMgYXJlIGRpc2NvdXJhZ2VkLiBVc2UgZXRodG9vbCBvcHMgYXMgZmFyIGFzIHBvc3NpYmxl Lg0KPiANCj4gPiArc3RhdGljIHVuc2lnbmVkIGludCB0eHFfY3RybCA9IDE7DQo+ID4gK3N0YXRp YyB1bnNpZ25lZCBpbnQgZnVuY190eHFfbnVtID0gMTsNCj4gPiArc3RhdGljIHVuc2lnbmVkIGlu dCBmdW5jX3J4cV9udW0gPSAxOw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGludGVycnVwdF9u dW0gPSAxOw0KPiA+ICtzdGF0aWMgaW50IHJ4X2NvcHlicmVhazsNCj4gPiArDQo+ID4gK21vZHVs ZV9wYXJhbSh0eHFfY3RybCwgdWludCwgMCk7DQo+ID4gK01PRFVMRV9QQVJNX0RFU0ModHhxX2N0 cmwsICJUaGUgbWF4aW11bSBudW1iZXIgb2YgVFggcXVldWVzIGZvcg0KPiBQRiBhbmQgVkZzLiIp Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3BhcmFtKGZ1bmNfdHhxX251bSwgdWludCwgMCk7DQo+ID4g K01PRFVMRV9QQVJNX0RFU0MoZnVuY190eHFfbnVtLCAiVFggcXVldWUgbnVtYmVyIGZvciB0aGlz DQo+IGZ1bmN0aW9uLiIpOw0KPiA+ICsNCj4gPiArbW9kdWxlX3BhcmFtKGZ1bmNfcnhxX251bSwg dWludCwgMCk7DQo+ID4gK01PRFVMRV9QQVJNX0RFU0MoZnVuY19yeHFfbnVtLCAiUlggcXVldWUg bnVtYmVyIGZvciB0aGlzDQo+IGZ1bmN0aW9uLiIpOw0KPiA+ICsNCj4gPiArbW9kdWxlX3BhcmFt KGludGVycnVwdF9udW0sIHVpbnQsIDApOw0KPiA+ICtNT0RVTEVfUEFSTV9ERVNDKGludGVycnVw dF9udW0sICJJbnRlcnJ1cHQgVmVjdG9yIG51bWJlciBmb3IgdGhpcw0KPiBmdW5jdGlvbi4iKTsN Cj4gPiArDQo+ID4gK21vZHVsZV9wYXJhbShyeF9jb3B5YnJlYWssIGludCwgMCk7DQo+ID4gK01P RFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLCAiQ29weSBicmVha3BvaW50IGZvcg0KPiBjb3B5 LW9ubHktdGlueS1mcmFtZXMiKTsNCj4gPiArDQo+ID4NCj4gKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioq KioqKioqDQo+ID4gKyAqIEZ1bmN0aW9uIFByb3RvdHlwZQ0KPiA+ICsNCj4gKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAq KioqKioqKioqKioqKi8NCj4gDQo+IE5vIGZvcndhcmQgZGVjbGFyYXRpb25zIHBsZWFzZS4NCj4g DQo+ID4gK3N0YXRpYyBpbnQgcnRhc2Vfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4g PiArc3RhdGljIG5ldGRldl90eF90IHJ0YXNlX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNr Yiwgc3RydWN0IG5ldF9kZXZpY2UNCj4gKmRldik7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3Nl dF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNl X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTsNCj4gPiAr c3RhdGljIGludCBydGFzZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBu ZXdfbXR1KTsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSk7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNl X2dldF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3Rh dHM2NA0KPiAqc3RhdHMpOw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3ZsYW5fcnhfYWRkX3ZpZChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG9jb2wsDQo+IHUxNiB2aWQpOw0KPiA+ ICtzdGF0aWMgaW50IHJ0YXNlX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRl diwgX19iZTE2IHByb3RvY29sLA0KPiB1MTYgdmlkKTsNCj4gPiArc3RhdGljIGludCBydGFzZV9z ZXR1cF90YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIHRjX3NldHVwX3R5cGUgdHlwZSwN Cj4gdm9pZCAqdHlwZV9kYXRhKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBydGFz ZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsNCj4gPiArc3RhdGljIGly cXJldHVybl90IHJ0YXNlX3FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7 DQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2h3X2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KTsNCj4gPiArc3RhdGljIGludCBydGFzZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsN Cj4gPiArc3RhdGljIHZvaWQgcnRhc2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4g PiArc3RhdGljIHZvaWQgcnRhc2VfaW5pdF9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYpOw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9yYXJfc2V0KGNvbnN0IHN0cnVjdCBydGFzZV9w cml2YXRlICp0cCwgY29uc3QgdWludDhfdA0KPiAqYWRkcik7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0 YXNlX2Rlc2NfYWRkcl9maWxsKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCk7DQo+ID4g K3N0YXRpYyB2b2lkIHJ0YXNlX3R4X2Rlc2NfaW5pdChzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAs IHUxNiBpZHgpOw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9yeF9kZXNjX2luaXQoc3RydWN0IHJ0 YXNlX3ByaXZhdGUgKnRwLCB1MTYgaWR4KTsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vfc2V0X21h cihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApOw0KPiA+ICtzdGF0aWMgczMyIHR4X2hh bmRsZXIoc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHMzMiBidWRnZXQpOw0KPiA+ICtzdGF0aWMg czMyIHJ4X2hhbmRsZXIoc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHMzMiBidWRnZXQpOw0KPiA+ ICtzdGF0aWMgczMyIHJ0YXNlX3J4cW9zKGNvbnN0IHN0cnVjdCBpZnJlcSAqaWZyLCBjb25zdCBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApOw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3BvbGwoc3Ry dWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KTsNCj4gPiArc3RhdGljIHZvaWQgcnRh c2Vfc3dfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQo+ID4gK3N0YXRpYyB2b2lkIHJ0 YXNlX2R1bXBfdGFsbHlfY291bnRlcihjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsDQo+ IGRtYV9hZGRyX3QgcGFkZHIpOw0KPiA+ICtzdGF0aWMgczMyIHJ0YXNlX3B0bShjb25zdCBzdHJ1 Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKTsNCj4gPiArc3Rh dGljIHMzMiBydGFzZV9wdG1fZnVuY3Rpb24oY29uc3Qgc3RydWN0IGlmcmVxICppZnIsIGNvbnN0 IHN0cnVjdA0KPiBydGFzZV9wcml2YXRlICp0cCk7DQo+ID4gK3N0YXRpYyBzMzIgcnRhc2VfcHRt X2dldF9jbG9jayhjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNl X3ByaXZhdGUgKnRwKTsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1fc3djX3NldChjb25zdCBz dHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZhdGUgKnRwKTsNCj4g PiArc3RhdGljIHMzMiBydGFzZV9wdG1fc3djX2dldChjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwg Y29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZhdGUgKnRwKTsNCj4gPiArc3RhdGljIHMzMiBydGFz ZV9wdG1fcmVnX2dldChjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0 YXNlX3ByaXZhdGUgKnRwKTsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1fcmVnX3NldChjb25z dCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZhdGUgKnRwKTsN Cj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1fYXV0b191cGRhdGUoY29uc3Qgc3RydWN0IGlmcmVx ICppZnIsIGNvbnN0IHN0cnVjdA0KPiBydGFzZV9wcml2YXRlICp0cCk7DQo+ID4gK3N0YXRpYyB2 b2lkIGR1bXBfdHhfZGVzYyhjb25zdCBzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZyk7DQo+ID4gK3N0 YXRpYyBzMzIgcnRhc2VfZGVidWdfbXNnKGNvbnN0IHN0cnVjdCBpZnJlcSAqaWZyLCBjb25zdCBz dHJ1Y3QNCj4gcnRhc2VfcHJpdmF0ZSAqdHApOw0KPiA+ICtzdGF0aWMgdm9pZCBtYWNfb2NwX3dy aXRlKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTE2IHJlZ19hZGRyLCB1MTYNCj4g dmFsdWUpOw0KPiA+ICtzdGF0aWMgdTE2IG1hY19vY3BfcmVhZChjb25zdCBzdHJ1Y3QgcnRhc2Vf cHJpdmF0ZSAqdHAsIHUxNiByZWdfYWRkcik7DQo+ID4gK3N0YXRpYyBzMzIgcmVnX2Z1bihjb25z dCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKTsNCj4g PiArc3RhdGljIHMzMiB0aW1lb3V0X3NpZyhjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgc3RydWN0 IHJ0YXNlX3ByaXZhdGUgKnRwKTsNCj4gPiArDQo+ID4NCj4gKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqKioq KioqKioqDQo+ID4gKyAqIEZ1bmN0aW9uDQo+ID4gKw0KPiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioq KioqLw0KPiA+ICsjaWZuZGVmIFNFVF9FVEhUT09MX09QUw0KPiA+ICsjZGVmaW5lIFNFVF9FVEhU T09MX09QUyhuZXRkZXYsIG9wcykgKChuZXRkZXYpLT5ldGh0b29sX29wcyA9IChvcHMpKQ0KPiA+ ICsjZW5kaWYgLyogU0VUX0VUSFRPT0xfT1BTICovDQo+ID4gKw0KPiA+ICtzdHJ1Y3QgcnRhc2Vf Y291bnRlcnMgew0KPiA+ICsgICAgIHU2NCB0eF9wYWNrZXRzOw0KPiBBbHNvIGhlcmUgbW9zdCBs aWtlbHkgdGhpcyBzaG91bGQgYmUgX19sZTY0Lg0KPiANCj4gPiArICAgICB1NjQgcnhfcGFja2V0 czsNCj4gPiArICAgICB1NjQgdHhfZXJyb3JzOw0KPiA+ICsgICAgIHUzMiByeF9lcnJvcnM7DQo+ ID4gKyAgICAgdTE2IHJ4X21pc3NlZDsNCj4gPiArICAgICB1MTYgYWxpZ25fZXJyb3JzOw0KPiA+ ICsgICAgIHUzMiB0eF9vbmVfY29sbGlzaW9uOw0KPiA+ICsgICAgIHUzMiB0eF9tdWx0aV9jb2xs aXNpb247DQo+ID4gKyAgICAgdTY0IHJ4X3VuaWNhc3Q7DQo+ID4gKyAgICAgdTY0IHJ4X2Jyb2Fk Y2FzdDsNCj4gPiArICAgICB1MzIgcnhfbXVsdGljYXN0Ow0KPiA+ICsgICAgIHUxNiB0eF9hYm9y dGVkOw0KPiA+ICsgICAgIHUxNiB0eF91bmRlcnVuOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArI2lm ZGVmIEVOQUJMRV9SVEFTRV9QUk9DRlMNCj4gPg0KPiArLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioq KioNCj4gPiArICogUFJPQ0ZTIFNUVUZGDQo+ID4gKw0KPiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioq KioqLw0KPiA+ICtzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpydGFzZV9wcm9jOw0KPiA+ ICtzdGF0aWMgczMyIHByb2NfaW5pdF9udW07DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFz ZV9kdW1wX3RhbGx5X2NvdW50ZXIoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLA0KPiBk bWFfYWRkcl90IHBhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIg PSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUzMiBjbWQ7DQo+ID4gKyAgICAgdTMyIHdhaXRf Y250Ow0KPiA+ICsNCj4gPiArICAgICBSVExfVzMyKERUQ0NSNCwgKHUzMikocGFkZHIgPj4gMzIp KTsNCj4gPiArICAgICBjbWQgPSAodTMyKShwYWRkciAmIERNQV9CSVRfTUFTSygzMikpOw0KPiA+ ICsgICAgIFJUTF9XMzIoRFRDQ1IwLCBjbWQpOw0KPiA+ICsgICAgIFJUTF9XMzIoRFRDQ1IwLCAo dTMyKShjbWQgfCBDT1VOVEVSX0RVTVApKTsNCj4gPiArDQo+ID4gKyAgICAgd2FpdF9jbnQgPSAw Ow0KPiA+ICsgICAgIHdoaWxlICgoUlRMX1IzMihEVENDUjApICYgQ09VTlRFUl9EVU1QKSAhPSAw dSkgew0KPiA+ICsgICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEwLCAyMCk7DQo+ID4gKw0KPiA+ ICsgICAgICAgICAgICAgd2FpdF9jbnQrKzsNCj4gPiArICAgICAgICAgICAgIGlmICh3YWl0X2Nu dCA+IDIwdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHByb2NfZ2V0X3RhbGx5X2NvdW50ZXIoc3Ry dWN0IHNlcV9maWxlICptLCB2b2lkICp2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0 IG5ldF9kZXZpY2UgKmRldiA9IG0tPnByaXZhdGU7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRh c2VfY291bnRlcnMgKmNvdW50ZXJzID0gTlVMTDsNCj4gPiArICAgICBkbWFfYWRkcl90IHBhZGRy Ow0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKw0KPiA+ICsgICAgICh2b2lk KXY7DQo+ID4gKyAgICAgc2VxX3B1dHMobSwgIlxuRHVtcCBUYWxseSBDb3VudGVyXG4iKTsNCj4g PiArDQo+ID4gKyAgICAgY291bnRlcnMgPSB0cC0+dGFsbHlfdmFkZHI7DQo+ID4gKyAgICAgcGFk ZHIgPSB0cC0+dGFsbHlfcGFkZHI7DQo+ID4gKyAgICAgaWYgKCFjb3VudGVycykgew0KPiA+ICsg ICAgICAgICAgICAgc2VxX3B1dHMobSwgIlxuRHVtcCBUYWxseSBDb3VudGVyIEZhaWxcbiIpOw0K PiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICBzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArICAgICBydGFzZV9k dW1wX3RhbGx5X2NvdW50ZXIodHAsIHBhZGRyKTsNCj4gPiArICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICBzZXFfcHV0cyhtLCAi U3RhdGlzdGljc1x0VmFsdWVcbi0tLS0tLS0tLS1cdC0tLS0tXG4iKTsNCj4gPiArICAgICBzZXFf cHJpbnRmKG0sICJ0eF9wYWNrZXRzXHQlbGxkXG4iLA0KPiBsZTY0X3RvX2NwdShjb3VudGVycy0+ dHhfcGFja2V0cykpOw0KPiA+ICsgICAgIHNlcV9wcmludGYobSwgInJ4X3BhY2tldHNcdCVsbGRc biIsDQo+IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT5yeF9wYWNrZXRzKSk7DQo+ID4gKyAgICAgc2Vx X3ByaW50ZihtLCAidHhfZXJyb3JzXHQlbGxkXG4iLCBsZTY0X3RvX2NwdShjb3VudGVycy0+dHhf ZXJyb3JzKSk7DQo+ID4gKyAgICAgc2VxX3ByaW50ZihtLCAicnhfbWlzc2VkXHQlbGxkXG4iLA0K PiBsZTY0X3RvX2NwdShjb3VudGVycy0+cnhfbWlzc2VkKSk7DQo+ID4gKyAgICAgc2VxX3ByaW50 ZihtLCAiYWxpZ25fZXJyb3JzXHQlbGxkXG4iLA0KPiBsZTY0X3RvX2NwdShjb3VudGVycy0+YWxp Z25fZXJyb3JzKSk7DQo+ID4gKyAgICAgc2VxX3ByaW50ZihtLCAidHhfb25lX2NvbGxpc2lvblx0 JWxsZFxuIiwNCj4gbGU2NF90b19jcHUoY291bnRlcnMtPnR4X29uZV9jb2xsaXNpb24pKTsNCj4g PiArICAgICBzZXFfcHJpbnRmKG0sICJ0eF9tdWx0aV9jb2xsaXNpb25cdCVsbGRcbiIsDQo+IGxl NjRfdG9fY3B1KGNvdW50ZXJzLT50eF9tdWx0aV9jb2xsaXNpb24pKTsNCj4gPiArICAgICBzZXFf cHJpbnRmKG0sICJyeF91bmljYXN0XHQlbGxkXG4iLA0KPiBsZTY0X3RvX2NwdShjb3VudGVycy0+ cnhfdW5pY2FzdCkpOw0KPiA+ICsgICAgIHNlcV9wcmludGYobSwgInJ4X2Jyb2FkY2FzdFx0JWxs ZFxuIiwNCj4gbGU2NF90b19jcHUoY291bnRlcnMtPnJ4X2Jyb2FkY2FzdCkpOw0KPiA+ICsgICAg IHNlcV9wcmludGYobSwgInJ4X211bHRpY2FzdFx0JWxsZFxuIiwNCj4gbGU2NF90b19jcHUoY291 bnRlcnMtPnJ4X211bHRpY2FzdCkpOw0KPiA+ICsgICAgIHNlcV9wcmludGYobSwgInR4X2Fib3J0 ZWRcdCVsbGRcbiIsDQo+IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50eF9hYm9ydGVkKSk7DQo+ID4g KyAgICAgc2VxX3ByaW50ZihtLCAidHhfdW5kZXJ1blx0JWxsZFxuIiwNCj4gbGU2NF90b19jcHUo Y291bnRlcnMtPnR4X3VuZGVydW4pKTsNCj4gPiArDQo+ID4gKyAgICAgc2VxX3B1dGMobSwgJ1xu Jyk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQgcHJvY19nZXRfcGNpX3JlZ2lzdGVycyhzdHJ1Y3Qgc2VxX2ZpbGUg Km0sIHZvaWQgKnYpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gbS0+cHJpdmF0ZTsNCj4gPiArICAgICBzMzIgbiA9IDA7DQo+ID4gKyAgICAgczMyIG1h eF9yZWdfc2l6ZSA9IFJUQVNFX1BDSV9SRUdTX1NJWkU7DQo+ID4gKyAgICAgdTMyIGR3b3JkX3Jk Ow0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7 DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKyAgICAgKHZvaWQp djsNCj4gPiArICAgICBzZXFfcHV0cyhtLCAiXG5EdW1wIFBDSSBSZWdpc3RlcnNcbiIpOw0KPiA+ ICsgICAgIHNlcV9wdXRzKG0sICJcbk9mZnNldFx0VmFsdWVcbi0tLS0tLVx0LS0tLS1cbiAiKTsN Cj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ ID4gKw0KPiA+ICsgICAgIHdoaWxlIChuIDwgbWF4X3JlZ19zaXplKSB7DQo+ID4gKyAgICAgICAg ICAgICBpZiAoKG4gJSBEV09SRF9NT0QpID09IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IHNlcV9wcmludGYobSwgIlxuMHglMDN4Olx0Iiwgbik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBuLCAmZHdvcmRfcmQpOw0KPiA+ICsg ICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAiJTA4eCAiLCBkd29yZF9yZCk7DQo+ID4gKyAgICAg ICAgICAgICBuICs9IDQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBuID0gMHgxMTA7 DQo+ID4gKyAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBuLCAmZHdvcmRfcmQp Ow0KPiA+ICsgICAgIHNlcV9wcmludGYobSwgIlxuMHglMDN4Olx0JTA4eCAiLCBuLCBkd29yZF9y ZCk7DQo+ID4gKyAgICAgbiA9IDB4NzBDOw0KPiA+ICsgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29y ZCh0cC0+cGRldiwgbiwgJmR3b3JkX3JkKTsNCj4gPiArICAgICBzZXFfcHJpbnRmKG0sICJcbjB4 JTAzeDpcdCUwOHggIiwgbiwgZHdvcmRfcmQpOw0KPiA+ICsNCj4gPiArICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICBzZXFfcHV0 YyhtLCAnXG4nKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgcnRhc2VfcHJvY19tb2R1bGVfaW5pdCh2b2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAg LyogY3JlYXRlIC9wcm9jL25ldC9ydGFzZSAqLw0KPiA+ICsgICAgIHJ0YXNlX3Byb2MgPSBwcm9j X21rZGlyKE1PRFVMRU5BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKCFydGFzZV9wcm9jKQ0KPiA+ICsgICAgICAgICAgICAgZHByaW50aygiY2Fubm90IGNyZWF0 ZSAlcyBwcm9jIGVudHJ5XG4iLCBNT0RVTEVOQU1FKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyog c2VxX2ZpbGUgd3JhcHBlcnMgZm9yIHByb2NmaWxlIHNob3cgcm91dGluZXMuDQo+ID4gKyAqLw0K PiA+ICtzdGF0aWMgaW50IHJ0YXNlX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnBfaW5vZGUsIHN0 cnVjdCBmaWxlICpwX2ZpbGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2ID0gcHJvY19nZXRfcGFyZW50X2RhdGEocF9pbm9kZSk7DQo+ID4gKyAgICAgaW50ICgqc2hv dykoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpID0gcGRlX2RhdGEocF9pbm9kZSk7DQo+ ID4gKw0KPiA+ICsgICAgIHJldHVybiBzaW5nbGVfb3BlbihwX2ZpbGUsIHNob3csIGRldik7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcnRhc2VfcHJv Y19mb3BzID0gew0KPiA+ICsgICAgIC5wcm9jX29wZW4gPSBydGFzZV9wcm9jX29wZW4sDQo+ID4g KyAgICAgLnByb2NfcmVhZCA9IHNlcV9yZWFkLA0KPiA+ICsgICAgIC5wcm9jX2xzZWVrID0gc2Vx X2xzZWVrLA0KPiA+ICsgICAgIC5wcm9jX3JlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwNCj4gPiAr fTsNCj4gPiArDQo+ID4gKy8qIFRhYmxlIG9mIHByb2MgZmlsZXMgd2UgbmVlZCB0byBjcmVhdGUu DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRhc2VfcHJvY19maWxlIHsNCj4gPiArICAgICBjaGFy IG5hbWVbMTJdOw0KPiA+ICsgICAgIGludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2 b2lkICp2KTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRhc2Vf cHJvY19maWxlIHJ0YXNlX3Byb2NfZmlsZXNbXSA9IHsNCj4gPiArICAgICB7InRhbGx5IiwgJnBy b2NfZ2V0X3RhbGx5X2NvdW50ZXJ9LCB7InBjaV9yZWdzIiwNCj4gJnByb2NfZ2V0X3BjaV9yZWdp c3RlcnN9LCB7IiJ9fTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3Byb2NfaW5pdChz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRh c2VfcHJvY19maWxlICpmOw0KPiA+ICsgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyID0g TlVMTDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJ0YXNlX3Byb2MgJiYgIXRwLT5wcm9jX2Rpcikg ew0KPiA+ICsgICAgICAgICAgICAgZGlyID0gcHJvY19ta2Rpcl9kYXRhKGRldi0+bmFtZSwgMCwg cnRhc2VfcHJvYywgZGV2KTsNCj4gPiArICAgICAgICAgICAgIGlmICghZGlyKSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIG5ldGRldl9pbmZvKGRldiwgIlVuYWJsZSB0byBpbml0aWFsaXpl DQo+IC9wcm9jL25ldC8lcy8lc1xuIiwgTU9EVUxFTkFNRSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg Z290byBvdXQ7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg dHAtPnByb2NfZGlyID0gZGlyOw0KPiA+ICsgICAgICAgICAgICAgcHJvY19pbml0X251bSsrOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgIGZvciAoZiA9IHJ0YXNlX3Byb2NfZmlsZXM7IGYtPm5h bWVbMF0gIT0gJ1wwJzsgZisrKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9j X2NyZWF0ZV9kYXRhKGYtPm5hbWUsIFNfSUZSRUcgfA0KPiBTX0lSVUdPLCBkaXIsICZydGFzZV9w cm9jX2ZvcHMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGYtPnNob3cpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOVUxMKSB7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X2luZm8oZGV2LCAiVW5hYmxlIHRv IGluaXRpYWxpemUNCj4gL3Byb2MvbmV0LyVzLyVzLyVzXG4iLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PRFVMRU5BTUUsDQo+IGRldi0+bmFtZSwgZi0+ bmFtZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgdm9pZCBydGFzZV9wcm9jX3JlbW92ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2 X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHRwLT5wcm9jX2Rpcikgew0KPiA+ICsg ICAgICAgICAgICAgcmVtb3ZlX3Byb2Nfc3VidHJlZShkZXYtPm5hbWUsIHJ0YXNlX3Byb2MpOw0K PiA+ICsgICAgICAgICAgICAgcHJvY19pbml0X251bS0tOw0KPiA+ICsgICAgICAgICAgICAgdHAt PnByb2NfZGlyID0gTlVMTDsNCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gKyNlbmRp ZiAvKiBFTkFCTEVfUlRBU0VfUFJPQ0ZTICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtYWNf b2NwX3dyaXRlKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTE2IHJlZ19hZGRyLCB1 MTYNCj4gdmFsdWUpDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRw LT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIGRhdGEzMjsNCj4gPiArDQo+ID4gKyAgICAgV0FS Tl9PTl9PTkNFKHJlZ19hZGRyICUgMnUpOw0KPiA+ICsNCj4gPiArICAgICBkYXRhMzIgPSAoKHUz MilyZWdfYWRkciAvIDJ1KTsNCj4gPiArICAgICBkYXRhMzIgPDw9IE9DUFJfQUREUl9SRUdfU0hJ RlQ7DQo+ID4gKyAgICAgZGF0YTMyICs9IHZhbHVlOw0KPiA+ICsgICAgIGRhdGEzMiB8PSBPQ1BS X1dSSVRFOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzMyKFBEUiwgZGF0YTMyKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHUxNiBtYWNfb2NwX3JlYWQoY29uc3Qgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwLCB1MTYgcmVnX2FkZHIpDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0g KmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIGRhdGEzMjsNCj4gPiArICAg ICB1MTYgZGF0YTE2ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTl9PTkNFKHJlZ19hZGRy ICUgMnUpOw0KPiA+ICsNCj4gPiArICAgICBkYXRhMzIgPSAoKHUzMilyZWdfYWRkciAvIDJ1KTsN Cj4gPiArICAgICBkYXRhMzIgPDw9IE9DUFJfQUREUl9SRUdfU0hJRlQ7DQo+ID4gKw0KPiA+ICsg ICAgIFJUTF9XMzIoUERSLCBkYXRhMzIpOw0KPiA+ICsgICAgIGRhdGExNiA9ICh1MTYpUlRMX1Iz MihQRFIpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gZGF0YTE2Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBydGFzZV9pbnRlcnJ1cHRfbWl0aWdhdGlvbihjb25zdCBzdHJ1Y3Qg cnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRk ciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIGkgPSAwOw0KPiA+ICsNCj4gPiArICAg ICAvKiB0eCBpbnRlcnJ1cHQgbWl0aWdhdGlvbiAqLw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBp IDwgdHAtPmZ1bmNfdHhfcXVldWVfbnVtOyBpKyspDQo+ID4gKyAgICAgICAgICAgICBSVExfVzE2 KChJTlRfTUlUSV9UWCArIChpICogMnUpKSwgdHAtPnR4X2ludF9taXQpOw0KPiA+ICsNCj4gPiAr ICAgICAvKiByeCBpbnRlcnJ1cHQgbWl0aWdhdGlvbiAqLw0KPiA+ICsgICAgIGZvciAoaSA9IDB1 OyBpIDwgdHAtPmZ1bmNfcnhfcXVldWVfbnVtOyBpKyspDQo+ID4gKyAgICAgICAgICAgICBSVExf VzE2KChJTlRfTUlUSV9SWCArIChpICogMnUpKSwgdHAtPnJ4X2ludF9taXQpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRhc2VfZW5hYmxlX2h3X2ludGVycnVwdChj b25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBz dHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9ICZ0cC0+aW50X3ZlY3RvclswXTsNCj4gPiAr ICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMy IGkgPSAwOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzMyKGl2ZWMtPmltcl9hZGRyLCBpdmVjLT5p bXIpOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAxOyBpIDwgdHAtPmludF9udW1zOyBpKysp IHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAtPmludF92ZWN0b3JbaV07DQo+ID4gKyAg ICAgICAgICAgICBSVExfVzE2KGl2ZWMtPmltcl9hZGRyLCAodTE2KWl2ZWMtPmltcik7DQo+ID4g KyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9pcnFfbWFza19h bmRfYWNrKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAg IGNvbnN0IHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjID0gJnRwLT5pbnRfdmVjdG9yWzBd Ow0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiAr ICAgICB1OCBpID0gMDsNCj4gPiArDQo+ID4gKyAgICAgUlRMX1czMihpdmVjLT5pbXJfYWRkciwg MCk7DQo+ID4gKyAgICAgUlRMX1czMihpdmVjLT5pc3JfYWRkciwgUlRMX1IzMihpdmVjLT5pc3Jf YWRkcikpOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAxOyBpIDwgdHAtPmludF9udW1zOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAtPmludF92ZWN0b3JbaV07DQo+ID4g KyAgICAgICAgICAgICBSVExfVzE2KGl2ZWMtPmltcl9hZGRyLCAwKTsNCj4gPiArICAgICAgICAg ICAgIFJUTF9XMTYoaXZlYy0+aXNyX2FkZHIsIFJUTF9SMTYoaXZlYy0+aXNyX2FkZHIpKTsNCj4g PiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX25pY19yZXNl dChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qg c3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICB2 b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2IGkgPSAw Ow0KPiA+ICsgICAgIHUxNiByeF9jb25maWc7DQo+ID4gKw0KPiA+ICsgICAgIHJ4X2NvbmZpZyA9 IFJUTF9SMTYoUlhfQ09ORklHXzApOw0KPiA+ICsgICAgIFJUTF9XMTYoUlhfQ09ORklHXzAsICh1 MTYpKHJ4X2NvbmZpZyAmIH5BQ0NFUFRfTUFTSykpOw0KPiA+ICsNCj4gPiArICAgICAvKiByeGR2 X2dhdGVkX2VuIC0gbWFzayByeGR2IGluIFBIWUlPICovDQo+ID4gKyAgICAgUlRMX1c4KE1JU0Ms ICh1OCkoUlRMX1I4KE1JU0MpIHwgUlhfRFZfR0FURV9FTikpOw0KPiA+ICsgICAgIC8qIHN0b3Ag YW55IFRMUCByZXF1ZXN0IGZyb20gUENJZSAqLw0KPiA+ICsgICAgIFJUTF9XOChDSElQX0NNRCwg KHU4KShSVExfUjgoQ0hJUF9DTUQpIHwgU1RPUF9SRVEpKTsNCj4gPiArICAgICBtZGVsYXkoMik7 DQo+ID4gKw0KPiA+ICsgICAgIC8qIHdhaXQgVExQIHJlcXVlc3QgZG9uZSAqLw0KPiA+ICsgICAg IGZvciAoaSA9IDB1OyBpIDwgMTUwMHU7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgaWYgKChS VExfUjgoQ0hJUF9DTUQpICYgU1RPUF9SRVFfRE9ORSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHVzbGVlcF9yYW5nZSgx MDAsIDExMCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiB3YWl0IEZJRk8gZW1w dHkgKi8NCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IDEwMDB1OyBpKyspIHsNCj4gPiArICAg ICAgICAgICAgIGlmICgoUlRMX1I4KEZJRk9SKSAmIChUWF9GSUZPX0VNUFRZIHwgUlhfRklGT19F TVBUWSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgPT0gKFRYX0ZJRk9fRU1QVFkgfCBSWF9GSUZP X0VNUFRZKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsNCj4gPiArICAgICB9DQo+ID4gKw0K PiA+ICsgICAgIFJUTF9XOChDSElQX0NNRCwgKHU4KShSVExfUjgoQ0hJUF9DTUQpICYgfihURSB8 IFJFKSkpOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzgoQ0hJUF9DTUQsICh1OCkoUlRMX1I4KENI SVBfQ01EKSAmIH5TVE9QX1JFUSkpOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzE2KFJYX0NPTkZJ R18wLCByeF9jb25maWcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9u aWNfZW5hYmxlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAg ICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAgICB1 MTYgcmNyID0gUlRMX1IxNihSWF9DT05GSUdfMSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFBDSWUg UExBIHJlbG9hZCAqLw0KPiA+ICsgICAgIFJUTF9XMTYoUlhfQ09ORklHXzEsICh1MTYpKHJjciAm IH5QQ0lFX1JFTE9BRF9FbikpOw0KPiA+ICsgICAgIFJUTF9XMTYoUlhfQ09ORklHXzEsICh1MTYp KHJjciB8IFBDSUVfUkVMT0FEX0VuKSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFNldCBQQ0llIFRF ICYgUkUgKi8NCj4gPiArICAgICBSVExfVzgoQ0hJUF9DTUQsICh1OCkoUlRMX1I4KENISVBfQ01E KSB8IChURSB8IFJFKSkpOw0KPiA+ICsNCj4gPiArICAgICAvKiBDbGVhciByeGR2X2dhdGVkX2Vu ICovDQo+ID4gKyAgICAgUlRMX1c4KE1JU0MsICh1OCkoUlRMX1I4KE1JU0MpICYgflJYX0RWX0dB VEVfRU4pKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBydGFzZV9mdW5jX2VuYWJsZShjb25z dCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB1MTYgaSA9IDB1 Ow0KPiA+ICsgICAgIHUxNiBjciA9IDB1Ow0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRy ID0gdHAtPm1taW9fYWRkcjsNCj4gPiArDQo+ID4gKyAgICAgLyogUG9sbGluZyBmdW5jdGlvbiBU RSAmIFJFICovDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCAxNTAwdTsgaSsrKSB7DQo+ID4g KyAgICAgICAgICAgICBpZiAoKFJUTF9SMTYoRkNSKSAmIChGQ1JfVEUgfCBGQ1JfUkUpKSA9PSAw dSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgdXNsZWVwX3JhbmdlKDEwMCwgMTEwKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsg ICAgIC8qIFNldCBmdW5jdGlvbiBURSAmIFJFICovDQo+ID4gKyAgICAgY3IgPSBSVExfUjE2KEZD Uik7DQo+ID4gKyAgICAgY3IgfD0gKHUxNikoRkNSX1RFIHwgRkNSX1JFKTsNCj4gPiArICAgICBS VExfVzE2KEZDUiwgY3IpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHJ0YXNlX2Z1bmNfZGlz YWJsZShjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB1 MTYgaSA9IDA7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRy Ow0KPiA+ICsNCj4gPiArICAgICAvKiBDbGVhciBmdW5jdGlvbiBURSAmIFJFICovDQo+ID4gKyAg ICAgUlRMX1cxNihGQ1IsICh1MTYpKFJUTF9SMTYoRkNSKSAmIH4oRkNSX1RFIHwgRkNSX1JFKSkp Ow0KPiA+ICsNCj4gPiArICAgICAvKiBQb2xsaW5nIGZ1bmN0aW9uIFRFICYgUkUgKi8NCj4gPiAr ICAgICBmb3IgKGkgPSAwdTsgaSA8IDE1MDB1OyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIGlm ICgoUlRMX1IxNihGQ1IpICYgKEZDUl9URSB8IEZDUl9SRSkpID09IDB1KQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICB1c2xlZXBfcmFu Z2UoMTAwLCAxMTApOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBydGFz ZV9od19yZXNldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAg ICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4g PiArDQo+ID4gKyAgICAgLyogZGlzYWJsZSAmIGNsZWFyIGludGVycnVwdHMgKi8NCj4gPiArICAg ICBydGFzZV9pcnFfbWFza19hbmRfYWNrKHRwKTsNCj4gPiArDQo+ID4gKyAgICAgLyogbmljIHJl c2V0ICovDQo+ID4gKyAgICAgcnRhc2VfbmljX3Jlc2V0KGRldik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2VuYWJsZV9FRU1fd3JpdGUoY29uc3Qgc3RydWN0IHJ0YXNl X3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0 cC0+bW1pb19hZGRyOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzgoRUVNLCAoUlRMX1I4KEVFTSkg fCBFRU1fVW5sb2NrKSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2Rp c2FibGVfRUVNX3dyaXRlKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0K PiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArDQo+ ID4gKyAgICAgUlRMX1c4KEVFTSwgKFJUTF9SOChFRU0pICYgKHU4KSh+RUVNX1VubG9jaykpKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1MzIgcnRhc2VfdHhfdmxhbl90YWco Y29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCBjb25zdA0KPiBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHRhZzsNCj4gPiArDQo+ID4gKyAgICAgKHZvaWQp dHA7DQo+ID4gKw0KPiA+ICsgICAgIHRhZyA9IChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpICE9 IDB1KSA/ICh1MzIpKFRYX1ZMQU5fVEFHIHwNCj4gc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2ti KSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog MHgwMHU7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiB0YWc7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBzMzIgcnRhc2Vfcnhfdmxhbl9za2IocnhfZGVzYyAqZGVzYywgc3RydWN0IHNrX2J1 ZmYgKnNrYikNCj4gPiArew0KPiA+ICsgICAgIHUzMiBvcHRzMiA9IGxlMzJfdG9fY3B1KGRlc2Mt PmRlc2Nfc3RhdHVzLm9wdHMyKTsNCj4gPiArICAgICBzMzIgcmV0ID0gLTE7DQo+ID4gKw0KPiA+ ICsjaWZkZWYgUlRBU0VfREVCVUcNCj4gPiArICAgICBpZiAob3B0czIgJiBSWF9MQktfRklGT19G VUxMKQ0KPiA+ICsgICAgICAgICAgICAgcHJfYWxlcnQoIlBGIHJlY2VpdmUgbG9vcGJhY2sgZmlm byBmdWxsLi4uIik7DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ID4gKyAgICAgaWYgKChv cHRzMiAmIFJYX1ZMQU5fVEFHKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIF9fdmxhbl9od2Fj Y2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksDQo+IHN3YWIxNihvcHRzMiAmIDB4 RkZGRnUpKTsNCj4gPiArDQo+ID4gKyAgICAgZGVzYy0+ZGVzY19zdGF0dXMub3B0czIgPSAwOw0K PiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBuZXRkZXZf ZmVhdHVyZXNfdCBydGFzZV9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwNCj4g bmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRh c2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIG5ldGRldl9mZWF0 dXJlc190IGZlYXR1cmVzX2ZpeCA9IGZlYXR1cmVzOw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxh Z3MpOw0KPiA+ICsgICAgIGlmIChkZXYtPm10dSA+IE1TU19NQVgpDQo+ID4gKyAgICAgICAgICAg ICBmZWF0dXJlc19maXggJj0gfk5FVElGX0ZfQUxMX1RTTzsNCj4gPiArDQo+ID4gKyAgICAgaWYg KGRldi0+bXR1ID4gKHUzMilFVEhfREFUQV9MRU4pIHsNCj4gPiArICAgICAgICAgICAgIGZlYXR1 cmVzX2ZpeCAmPSB+TkVUSUZfRl9BTExfVFNPOw0KPiA+ICsgICAgICAgICAgICAgZmVhdHVyZXNf Zml4ICY9IH5ORVRJRl9GX0FMTF9DU1VNOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICByZXR1 cm4gZmVhdHVyZXNfZml4Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgczMyIHJ0YXNlX2h3 X3NldF9mZWF0dXJlcyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LA0KPiBuZXRkZXZfZmVh dHVyZXNfdCBmZWF0dXJlcykNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9w cml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICpp b2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUxNiByeF9jb25maWc7DQo+ID4gKw0K PiA+ICsgICAgIHJ4X2NvbmZpZyA9IFJUTF9SMTYoUlhfQ09ORklHXzApOw0KPiA+ICsgICAgIGlm ICgoZmVhdHVyZXMgJiBORVRJRl9GX1JYQUxMKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJ4 X2NvbmZpZyB8PSAodTE2KShBQ0NFUFRfRVJSIHwgQUNDRVBUX1JVTlQpOw0KPiA+ICsgICAgIGVs c2UNCj4gPiArICAgICAgICAgICAgIHJ4X2NvbmZpZyAmPSAodTE2KSh+KEFDQ0VQVF9FUlIgfCBB Q0NFUFRfUlVOVCkpOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzE2KFJYX0NPTkZJR18wLCByeF9j b25maWcpOw0KPiA+ICsNCj4gPiArICAgICByeF9jb25maWcgPSBSVExfUjE2KFJYX0NPTkZJR18x KTsNCj4gPiArICAgICBpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1ZMQU5fUlgpICE9 IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcnhfY29uZmlnIHw9ICh1MTYpKElOTkVSX1ZMQU5fREVU QUdfRU4gfA0KPiBPVVRFUl9WTEFOX0RFVEFHX0VOKTsNCj4gPiArICAgICBlbHNlDQo+ID4gKyAg ICAgICAgICAgICByeF9jb25maWcgJj0gKHUxNikofihJTk5FUl9WTEFOX0RFVEFHX0VOIHwNCj4g T1VURVJfVkxBTl9ERVRBR19FTikpOw0KPiA+ICsNCj4gPiArICAgICBSVExfVzE2KFJYX0NPTkZJ R18xLCByeF9jb25maWcpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKGZlYXR1cmVzICYgTkVUSUZf Rl9SWENTVU0pICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgUlRMX1cxNihDUExVU19DTUQsICh1 MTYpKFJUTF9SMTYoQ1BMVVNfQ01EKSB8DQo+IFJYX0NIS1NVTSkpOw0KPiA+ICsgICAgIGVsc2UN Cj4gPiArICAgICAgICAgICAgIFJUTF9XMTYoQ1BMVVNfQ01ELCAodTE2KShSVExfUjE2KENQTFVT X0NNRCkgJg0KPiB+UlhfQ0hLU1VNKSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3NldF9mZWF0dXJlcyhzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2LCBuZXRkZXZfZmVhdHVyZXNfdA0KPiBmZWF0dXJlcykNCj4gPiArew0KPiA+ ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4g KyAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXNfc2V0ID0gZmVhdHVyZXM7DQo+ID4gKyAg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKyAgICAgZmVhdHVyZXNfc2V0ICY9 IE5FVElGX0ZfUlhBTEwgfCBORVRJRl9GX1JYQ1NVTSB8DQo+IE5FVElGX0ZfSFdfVkxBTl9SWDsN Cj4gPiArDQo+ID4gKyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ ID4gKyAgICAgaWYgKChmZWF0dXJlc19zZXQgXiBkZXYtPmZlYXR1cmVzKSAhPSAwdSkgew0KPiA+ ICsgICAgICAgICAgICAgaWYgKHJ0YXNlX2h3X3NldF9mZWF0dXJlcyhkZXYsIGZlYXR1cmVzX3Nl dCkgIT0gMCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X2FsZXJ0KGRldiwgInVu YWJsZSB0byBzZXQgaHcgZmVhdHVyZVxuIik7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhciBydGFzZV9nc3Ry aW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7DQo+ID4gKyAgICAgInR4X3BhY2tldHMiLCAgICJy eF9wYWNrZXRzIiwgICAgICAgICAgICJ0eF9lcnJvcnMiLA0KPiAicnhfZXJyb3JzIiwgInJ4X21p c3NlZCIsDQo+ID4gKyAgICAgImFsaWduX2Vycm9ycyIsICJ0eF9zaW5nbGVfY29sbGlzaW9ucyIs ICJ0eF9tdWx0aV9jb2xsaXNpb25zIiwgInVuaWNhc3QiLA0KPiAiYnJvYWRjYXN0IiwNCj4gPiAr ICAgICAibXVsdGljYXN0IiwgICAgInR4X2Fib3J0ZWQiLCAgICAgICAgICAgInR4X3VuZGVycnVu IiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2dldF9tYWNfdmVyc2lv bihzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAsIGNvbnN0IHZvaWQNCj4gX19pb21lbSAqaW9hZGRy KQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHJlZ192YWwsIGh3X3ZlcjsNCj4gPiArDQo+ID4gKyAg ICAgcmVnX3ZhbCA9IFJUTF9SMzIoVFhfQ09ORklHXzApOw0KPiA+ICsgICAgIGh3X3ZlciA9IHJl Z192YWwgJiAweDdDODAwMDAwdTsNCj4gPiArDQo+ID4gKyAgICAgc3dpdGNoIChod192ZXIpIHsN Cj4gPiArICAgICBjYXNlIDB4MDA4MDAwMDA6DQo+ID4gKyAgICAgICAgICAgICB0cC0+bWNmZyA9 IENGR19NRVRIT0RfMTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2Ug MHgwNDAwMDAwMDoNCj4gPiArICAgICBjYXNlIDB4MDQ4MDAwMDA6DQo+ID4gKyAgICAgICAgICAg ICB0cC0+bWNmZyA9IENGR19NRVRIT0RfMTsNCj4gPiArICAgICAgICAgICAgIHRwLT5wdG1fc3Vw cG9ydCA9IDE7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArDQo+ID4gKyAgICAgZGVm YXVsdDoNCj4gPiArICAgICAgICAgICAgIG5ldGRldl9pbmZvKHRwLT5kZXYsICJ1bmtub3duIGNo aXAgdmVyc2lvbiAoJXgpXG4iLA0KPiBod192ZXIpOw0KPiA+ICsgICAgICAgICAgICAgdHAtPm1j ZmcgPSBDRkdfTUVUSE9EX0RFRkFVTFQ7DQo+ID4gKyAgICAgICAgICAgICB0cC0+aHdfaWNfdmVy X3Vua25vd24gPSBUUlVFOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9wcmludF9tYWNfdmVyc2lvbihj b25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICBzMTYgaTsN Cj4gPiArICAgICBib29sIGZsYWcgPSBmYWxzZTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0g KHMxNikoQVJSQVlfU0laRShydGxfY2hpcF9pbmZvKSAtIDF1KTsgaSA+PSAwOyBpLS0pIHsNCj4g PiArICAgICAgICAgICAgIGlmICh0cC0+bWNmZyA9PSBydGxfY2hpcF9pbmZvW2ldLm1jZmcpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZHByaW50aygiUmVhbHRlayBQQ0llIEZhbWlseSBD b250cm9sbGVyIG1jZmcgPQ0KPiAlMDRkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJ0bF9jaGlwX2luZm9baV0ubWNmZyk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGZsYWcgPSB0cnVlOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAg ICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZmxhZykNCj4g PiArICAgICAgICAgICAgIGRwcmludGsoIm1hY192ZXJzaW9uID09IFVua25vd25cbiIpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV90YWxseV9jb3VudGVyX2FkZHJfZmls bChjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lk IF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKw0KPiA+ICsgICAgIGlmICh0 cC0+dGFsbHlfcGFkZHIgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIFJUTF9XMzIoRFRDQ1I0 LCAodTMyKSh0cC0+dGFsbHlfcGFkZHIgPj4gMzIpKTsNCj4gPiArICAgICAgICAgICAgIFJUTF9X MzIoRFRDQ1IwLCAodTMyKSh0cC0+dGFsbHlfcGFkZHIgJg0KPiAoRE1BX0JJVF9NQVNLKDMyKSkp KTsNCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3Rh bGx5X2NvdW50ZXJfY2xlYXIoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7 DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsN Cj4gPiArICAgICBpZiAodHAtPnRhbGx5X3BhZGRyICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAg ICBSVExfVzMyKERUQ0NSNCwgKHUzMikodHAtPnRhbGx5X3BhZGRyID4+IDMyKSk7DQo+ID4gKyAg ICAgICAgICAgICBSVExfVzMyKERUQ0NSMCwgKHUzMikoKHRwLT50YWxseV9wYWRkciAmDQo+IChE TUFfQklUX01BU0soMzIpKSkgfCBDT1VOVEVSX1JFU0VUKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9 DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVINCj4gPiArDQo+ ID4gKy8qIFBvbGxpbmcgJ2ludGVycnVwdCcgLSB1c2VkIGJ5IHRoaW5ncyBsaWtlIG5ldGNvbnNv bGUgdG8gc2VuZCBza2JzDQo+ID4gKyAqIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWVuYWJsZSBpbnRl cnJ1cHRzLiBJdCdzIG5vdCBjYWxsZWQgd2hpbGUNCj4gPiArICogdGhlIGludGVycnVwdCByb3V0 aW5lIGlzIGV4ZWN1dGluZy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX25ldHBv bGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0cnVj dCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgY29uc3Qg c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGRldjsNCj4gPiArDQo+ID4gKyAgICAgZGlzYWJs ZV9pcnEocGRldi0+aXJxKTsNCj4gPiArICAgICBydGFzZV9pbnRlcnJ1cHQoKHMzMilwZGV2LT5p cnEsIGRldik7DQo+ID4gKyAgICAgZW5hYmxlX2lycShwZGV2LT5pcnEpOw0KPiA+ICt9DQo+ID4g KyNlbmRpZg0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfbWJ4X3NldF92Zm1jKGNvbnN0 IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTggdmZuKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29u c3Qgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsNCj4gPiArICAg ICB0cC0+dmZfaW5mb1t2Zm5dLm1jX2ZpbHRlclswXSA9IFJUTF9SMzIoVkZNU0dEQVRBXzAgKyAo KHUzMil2Zm4gKg0KPiA4dSkpOw0KPiA+ICsgICAgIHRwLT52Zl9pbmZvW3Zmbl0ubWNfZmlsdGVy WzFdID0gUlRMX1IzMihWRk1TR0RBVEFfMiArICgodTMyKXZmbiAqDQo+IDh1KSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX21zZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykNCj4gPiArew0KPiA+ICsgICAgIHN0YXRpYyB2b2lkICgqY29uc3QgcnRhc2VfbWJ4 X2Z1bmNbXSkoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLA0KPiB1OCB2Zm4pID0gew0K PiA+ICsgICAgICAgICAgICAgcnRhc2VfbWJ4X3NldF92Zm1jLA0KPiA+ICsgICAgIH07DQo+ID4g KyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHdvcmss IHN0cnVjdA0KPiBydGFzZV9wcml2YXRlLCBtc2dfd29yayk7DQo+ID4gKyAgICAgdm9pZCBfX2lv bWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHU4IHN0YXR1cyA9IDA7DQo+ ID4gKw0KPiA+ICsgICAgIHN0YXR1cyA9IFJUTF9SOChQRk1TR0lDUlJFUSk7DQo+ID4gKyAgICAg aWYgKHN0YXR1cyAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgdTE2IGkgPSAwdTsNCj4gPiAr DQo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwdTsgaSA8IHRwLT5udW1fdmZzOyBpKyspIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBCSVQoaSkpICE9IDB1KSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRhc2VfbWJ4X2Z1bmNbMF0odHAs IGkpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTF9XOChQRk1TR1ZGMSAr IChpICogNHUpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTgp KFJUTF9SOChQRk1TR1ZGMSArDQo+ICgodTMyKWkgKiA0dSkpIHwgQklUKDEpKSk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAg ICAgIHJ0YXNlX3NldF9tYXIodHApOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgUlRM X1c4KFBGTVNHSUNSUkVRLCBzdGF0dXMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9p ZCBydGFzZV93YXRjaGRvZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gPiArew0K PiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZih3b3JrLCBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSwNCj4gd2F0Y2hkb2dfd29yayk7DQo+ID4gKyAgICAgdm9pZCBf X2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9y aW5nICpyaW5nID0gJnRwLT50eF9yaW5nWzBdOw0KPiA+ICsNCj4gPiArICAgICAvKiBDaGVjayBp ZiB0aGVyZSBpcyBhIHBhY2tldCB0byB0cmFuc21pdC4gKi8NCj4gPiArICAgICBpZiAocmluZy0+ Y3VyX2lkeCAhPSByaW5nLT5kaXJ0eV9pZHgpIHsNCj4gPiArICAgICAgICAgICAgIC8qIERldGVy bWluZSBpZiBkaXJ0eV9pZHggaGFzIGNoYW5nZWQuICovDQo+ID4gKyAgICAgICAgICAgICBpZiAo cmluZy0+ZGlydHlfaWR4ID09IHJpbmctPnByaXZfZGlydHlfaWR4KSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIC8qIERldGVybWluZSB3aGV0aGVyIHRoZSBUeGZpZm8gaXMgZW1wdHkuICov DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICgoUlRMX1I4KEZJRk9SKSAmIFRYX0ZJRk9f RU1QVFkpID09DQo+IFRYX0ZJRk9fRU1QVFkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAvKiBJZiBpdCBpcyByZXBlYXRlZGx5IGNoZWNrZWQgdGhhdCB0aGUNCj4gZGlydHlf aWR4IGhhcyBub3QgY2hhbmdlZCAzDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICogdGltZXMsIHRoZSBzb2Z0d2FyZSB3aWxsIGJlIHJlc2V0Lg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChyaW5nLT5kdXBsaWNhdGVfZGlydHlfY291bnQgPj0NCj4gVFhfRFVQTElDQVRFX0RJUlRZSURY X0NPVU5UKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRhc2Vf c3dfcmVzZXQodHAtPmRldik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz ZQ0KPiA+ICsNCj4gcmluZy0+ZHVwbGljYXRlX2RpcnR5X2NvdW50Kys7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmluZy0+ZHVwbGljYXRlX2RpcnR5X2NvdW50ID0gMDsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgfQ0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgcmluZy0+ZHVwbGljYXRlX2RpcnR5X2NvdW50ID0gMDsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmluZy0+cHJpdl9kaXJ0eV9pZHggPSByaW5nLT5kaXJ0eV9pZHg7DQo+ID4gKyAgICAg ICAgICAgICB9DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHJpbmctPmR1 cGxpY2F0ZV9kaXJ0eV9jb3VudCA9IDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAv KiByZXNldCB0aW1lciAqLw0KPiA+ICsgICAgIFJUTF9XMzIoVENUUjAsIDB4MCk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2luaXRfaW50X3ZlY3RvcihzdHJ1Y3QgcnRh c2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB1MTYgaSA9IDB1Ow0KPiA+ICsNCj4g PiArICAgICAvKiBpbnRlcnJ1cHQgdmVjdG9yIDAgKi8NCj4gPiArICAgICB0cC0+aW50X3ZlY3Rv clswXS50cCA9IHRwOw0KPiA+ICsgICAgIG1lbXNldCh0cC0+aW50X3ZlY3RvclswXS5uYW1lLCAw eDAsIDIwKTsNCj4gPiArICAgICB0cC0+aW50X3ZlY3RvclswXS5pbmRleCA9IDA7DQo+ID4gKyAg ICAgdHAtPmludF92ZWN0b3JbMF0uaW1yX2FkZHIgPSBJTVIwOw0KPiA+ICsgICAgIHRwLT5pbnRf dmVjdG9yWzBdLmlzcl9hZGRyID0gSVNSMDsNCj4gPiArICAgICB0cC0+aW50X3ZlY3RvclswXS5p bXIgPSAodTMyKShST0sgfCBSRFUgfCBUT0sgfCBNQlggfCBUT0s0IHwgVE9LNQ0KPiB8IFRPSzYg fCBUT0s3IHwgVElNRU9VVDApOw0KPiA+ICsgICAgIElOSVRfTElTVF9IRUFEKCZ0cC0+aW50X3Zl Y3RvclswXS5yaW5nX2xpc3QpOw0KPiA+ICsgICAgIHRwLT5pbnRfdmVjdG9yWzBdLndlaWdodCA9 IFJUQVNFX05BUElfV0VJR0hUOw0KPiA+ICsgICAgIHRwLT5pbnRfdmVjdG9yWzBdLnBvbGwgPSBy dGFzZV9wb2xsOw0KPiA+ICsgICAgIG5ldGlmX25hcGlfYWRkKHRwLT5kZXYsICZ0cC0+aW50X3Zl Y3RvclswXS5uYXBpLA0KPiB0cC0+aW50X3ZlY3RvclswXS5wb2xsLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgIHRwLT5pbnRfdmVjdG9yWzBdLndlaWdodCk7DQo+ID4gKyAgICAgbmFwaV9lbmFi bGUoJnRwLT5pbnRfdmVjdG9yWzBdLm5hcGkpOw0KPiA+ICsNCj4gPiArICAgICAvKiBpbnRlcnJ1 cHQgdmVjdG9yIDEgfiAzICovDQo+ID4gKyAgICAgZm9yIChpID0gMTsgaSA8IHRwLT5pbnRfbnVt czsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICB0cC0+aW50X3ZlY3RvcltpXS50cCA9IHRwOw0K PiA+ICsgICAgICAgICAgICAgbWVtc2V0KHRwLT5pbnRfdmVjdG9yW2ldLm5hbWUsIDB4MCwgMjAp Ow0KPiA+ICsgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0uaW5kZXggPSBpOw0KPiA+ICsg ICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0uaW1yX2FkZHIgPSAoSU1SMSArICgoaSAtIDF1 KSAqIDR1KSk7DQo+ID4gKyAgICAgICAgICAgICB0cC0+aW50X3ZlY3RvcltpXS5pc3JfYWRkciA9 IChJU1IxICsgKChpIC0gMXUpICogNHUpKTsNCj4gPiArICAgICAgICAgICAgIHRwLT5pbnRfdmVj dG9yW2ldLmltciA9ICh1MzIpKFFfUk9LIHwgUV9SRFUgfCBRX1RPSyk7DQo+ID4gKyAgICAgICAg ICAgICBJTklUX0xJU1RfSEVBRCgmdHAtPmludF92ZWN0b3JbaV0ucmluZ19saXN0KTsNCj4gPiAr ICAgICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLndlaWdodCA9IFJUQVNFX05BUElfV0VJR0hU Ow0KPiA+ICsgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0ucG9sbCA9IHJ0YXNlX3BvbGw7 DQo+ID4gKyAgICAgICAgICAgICBuZXRpZl9uYXBpX2FkZCh0cC0+ZGV2LCAmdHAtPmludF92ZWN0 b3JbaV0ubmFwaSwNCj4gdHAtPmludF92ZWN0b3JbaV0ucG9sbCwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLndlaWdodCk7DQo+ID4gKyAgICAgICAg ICAgICBuYXBpX2VuYWJsZSgmdHAtPmludF92ZWN0b3JbaV0ubmFwaSk7DQo+ID4gKyAgICAgfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9pbml0X3NvZnR3YXJlX3Zhcmlh YmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRh c2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsNCj4gPiArICAgICBzcGlu X2xvY2tfaW5pdCgmdHAtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICAvKiBhc3NpZ24gbW9kdWxl IHBhcmFtZXRlcnMgKi8NCj4gPiArICAgICB0cC0+dHhfcXVldWVfY3RybCA9ICh1MTYpdHhxX2N0 cmw7DQo+ID4gKyAgICAgdHAtPmZ1bmNfdHhfcXVldWVfbnVtID0gKHUxNilmdW5jX3R4cV9udW07 DQo+ID4gKyAgICAgdHAtPmZ1bmNfcnhfcXVldWVfbnVtID0gKHUxNilmdW5jX3J4cV9udW07DQo+ ID4gKyAgICAgdHAtPmludF9udW1zID0gKHUxNilpbnRlcnJ1cHRfbnVtOw0KPiA+ICsgICAgIHRw LT50eF9pbnRfbWl0ID0gVFhfSU5UX01JVElHQVRJT047DQo+ID4gKyAgICAgdHAtPnJ4X2ludF9t aXQgPSBSWF9JTlRfTUlUSUdBVElPTjsNCj4gPiArDQo+ID4gKyAgICAgdHAtPnN3X2ZsYWcgPSAw Ow0KPiA+ICsgICAgIHRwLT5udW1fdmZzID0gMDsNCj4gPiArDQo+ID4gKyAgICAgLyogaW5pdGlh bCB0aW1lb3V0IHN0YXRlICovDQo+ID4gKyAgICAgdHAtPnRpbWVvdXRfc3RhdGUgPSBUSU1FT1VU X0lOSVQ7DQo+ID4gKw0KPiA+ICsgICAgIC8qIG5ldywgaW50ZXJydXRwIHZhcmlhYmxlcyBpbml0 ICovDQo+ID4gKyAgICAgcnRhc2VfaW5pdF9pbnRfdmVjdG9yKHRwKTsNCj4gPiArDQo+ID4gKyAg ICAgdHAtPm1heF9qdW1ib19mcmFtZV9zaXplID0NCj4gcnRsX2NoaXBfaW5mb1t0cC0+bWNmZ10u anVtYm9fZnJhbWVfc3o7DQo+ID4gKyAgICAgLyogTVRVIHJhbmdlOiA2MCAtIGh3LXNwZWNpZmlj IG1heCAqLw0KPiA+ICsgICAgIGRldi0+bWluX210dSA9IEVUSF9aTEVOOw0KPiA+ICsgICAgIGRl di0+bWF4X210dSA9IHRwLT5tYXhfanVtYm9fZnJhbWVfc2l6ZTsNCj4gPiArDQo+ID4gKyAgICAg SU5JVF9XT1JLKCZ0cC0+bXNnX3dvcmssIHJ0YXNlX21zZ193b3JrKTsNCj4gPiArICAgICBJTklU X1dPUksoJnRwLT53YXRjaGRvZ193b3JrLCBydGFzZV93YXRjaGRvZ193b3JrKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfaW5pdF9oYXJkd2FyZShjb25zdCBzdHJ1Y3Qg cnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRk ciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2IGk7DQo+ID4gKw0KPiA+ICsgICAgIC8q IHZsYW4gZmlsdGVyIHRhYmxlICovDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCBWTEFOX0ZJ TFRFUl9FTlRSWV9OVU07IGkrKykNCj4gPiArICAgICAgICAgICAgIFJUTF9XMzIoKFZMQU5fRU5U UllfMCArIChpICogNHUpKSwgMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0 YXNlX3JlbGVhc2VfYm9hcmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBuZXRfZGV2aWNl DQo+ICpkZXYsIHZvaWQgX19pb21lbSAqaW9hZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qg c3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4g KyAgICAgcnRhc2VfcmFyX3NldCh0cCwgdHAtPm9yZ19tYWNfYWRkcik7DQo+ID4gKyAgICAgaW91 bm1hcChpb2FkZHIpOw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfTVNJWF9FTkFC TEVEKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHBjaV9kaXNhYmxlX21zaXgocGRldik7DQo+ ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgcGNpX2Rpc2FibGVfbXNpKHBkZXYpOw0K PiA+ICsNCj4gPiArICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOw0KPiA+ICsgICAgIHBj aV9kaXNhYmxlX2RldmljZShwZGV2KTsNCj4gPiArICAgICBmcmVlX25ldGRldihkZXYpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9od19hZGRyZXNzX3NldChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBjb25zdCB1OA0KPiBtYWNfYWRkcltNQUNfQUREUl9MRU5dKQ0KPiA+ ICt7DQo+ID4gKyAgICAgZXRoX2h3X2FkZHJfc2V0KGRldiwgbWFjX2FkZHIpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgczMyIHJ0YXNlX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0g bmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBjb25zdCB2b2lkIF9faW9tZW0gKmlvYWRkciA9 IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIGk7DQo+ID4gKyAgICAgdTggbWFjX2FkZHJb TUFDX0FERFJfTEVOXTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IE1BQ19BRERS X0xFTjsgaSsrKQ0KPiA+ICsgICAgICAgICAgICAgbWFjX2FkZHJbaV0gPSBSVExfUjgoTUFDMCAr IGkpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHIp KSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRpZl9lcnIodHAsIHByb2JlLCBkZXYsICJJbnZhbGlk IGV0aGVyIGFkZHIgJXBNXG4iLA0KPiBtYWNfYWRkcik7DQo+ID4gKyAgICAgICAgICAgICBldGhf aHdfYWRkcl9yYW5kb20oZGV2KTsNCj4gPiArICAgICAgICAgICAgIGV0aGVyX2FkZHJfY29weSht YWNfYWRkciwgZGV2LT5kZXZfYWRkcik7DQo+ID4gKyAgICAgICAgICAgICBuZXRpZl9pbmZvKHRw LCBwcm9iZSwgZGV2LCAiUmFuZG9tIGV0aGVyIGFkZHIgJXBNXG4iLA0KPiBtYWNfYWRkcik7DQo+ ID4gKyAgICAgICAgICAgICB0cC0+cmFuZG9tX21hYyA9IDE7DQo+ID4gKyAgICAgfQ0KPiA+ICsN Cj4gPiArICAgICBydGFzZV9od19hZGRyZXNzX3NldChkZXYsIG1hY19hZGRyKTsNCj4gPiArICAg ICBydGFzZV9yYXJfc2V0KHRwLCBtYWNfYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGtlZXAg dGhlIG9yaWdpbmFsIE1BQyBhZGRyZXNzICovDQo+ID4gKyAgICAgbWVtY3B5KHRwLT5vcmdfbWFj X2FkZHIsIGRldi0+ZGV2X2FkZHIsIE1BQ19BRERSX0xFTik7DQo+ID4gKyAgICAgbWVtY3B5KGRl di0+cGVybV9hZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsNCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHJ0YXNlX3NldF9tYWNfYWRk cmVzcyAtIENoYW5nZSB0aGUgRXRoZXJuZXQgQWRkcmVzcyBvZiB0aGUgTklDDQo+ID4gKyAqIEBk ZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUNCj4gPiArICogQHA6ICAgcG9p bnRlciB0byBhbiBhZGRyZXNzIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm4gMCBv biBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgaW50 IHJ0YXNlX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQ0K PiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYo ZGV2KTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOw0KPiA+ICsg ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKyAgICAgczMyIHJjID0gMDsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCh1OCAqKSZhZGRyLT5zYV9kYXRhKSkg ew0KPiA+ICsgICAgICAgICAgICAgcmMgPSAtRUFERFJOT1RBVkFJTDsNCj4gPiArICAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFn cyk7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19hZGRyZXNzX3NldChkZXYsICh1OCAqKSZh ZGRyLT5zYV9kYXRhKTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3Jhcl9zZXQodHAsIGRldi0+ ZGV2X2FkZHIpOw0KPiA+ICsgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAt PmxvY2ssIGZsYWdzKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByYzsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyogcnRhc2VfcmFyX3NldCAtIFB1dHMgYW4gZXRoZXJuZXQg YWRkcmVzcyBpbnRvIGEgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyLg0KPiA+ICsgKg0KPiA+ICsg KiB0cCAtIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIGZvciBkcml2ZXINCj4gPiArICogYWRk ciAtIEFkZHJlc3MgdG8gcHV0IGludG8gcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyDQo+ID4gKyAq Lw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9yYXJfc2V0KGNvbnN0IHN0cnVjdCBydGFzZV9wcml2 YXRlICp0cCwgY29uc3QgdWludDhfdCAqYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHZvaWQgX19p b21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAgICB1MzIgcmFyX2xvdyA9IDA7 DQo+ID4gKyAgICAgdTMyIHJhcl9oaWdoID0gMDsNCj4gPiArDQo+ID4gKyAgICAgcmFyX2xvdyA9 ICgodWludDMyX3QpYWRkclswXSB8ICgodWludDMyX3QpYWRkclsxXSA8PCA4KSB8DQo+ICgodWlu dDMyX3QpYWRkclsyXSA8PCAxNikNCj4gPiArICAgICAgICAgICAgICAgIHwgKCh1aW50MzJfdClh ZGRyWzNdIDw8IDI0KSk7DQo+ID4gKw0KPiA+ICsgICAgIHJhcl9oaWdoID0gKCh1aW50MzJfdClh ZGRyWzRdIHwgKCh1aW50MzJfdClhZGRyWzVdIDw8IDgpKTsNCj4gPiArDQo+ID4gKyAgICAgcnRh c2VfZW5hYmxlX0VFTV93cml0ZSh0cCk7DQo+ID4gKyAgICAgUlRMX1czMihNQUMwLCByYXJfbG93 KTsNCj4gPiArICAgICBSVExfVzMyKE1BQzQsIHJhcl9oaWdoKTsNCj4gPiArICAgICBydGFzZV9k aXNhYmxlX0VFTV93cml0ZSh0cCk7DQo+ID4gKyAgICAgUlRMX1cxNihMQktfQ1RSTCwgKHUxNiko TEJLX0FUTEQgfCBMQktfQ0xSKSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzMzIgcmVn X2Z1bihjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUg KnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19h ZGRyOw0KPiA+ICsgICAgIHZvaWQgKnVzZXJhZGRyID0gKHZvaWQgKilpZnItPmlmcl9kYXRhOw0K PiA+ICsgICAgIHN0cnVjdCByZWdfcncgcmVnOw0KPiA+ICsgICAgIHMzMiByYyA9IDA7DQo+ID4g Kw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmcmVnLCB1c2VyYWRkciwgc2l6ZW9mKHN0 cnVjdCByZWdfcncpKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgcmMgPSAtRUZBVUxUOw0K PiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAvKiBkZWJ1ZyBjaGFubmVsIHJlYWQgKi8NCj4gPiArICAgICBpZiAocmVnLmNtZCA9PSBDTURf REJHX1JFQUQpIHsNCj4gPiArICAgICAgICAgICAgIHJlZy52YWwgPSBtYWNfb2NwX3JlYWQodHAs IHJlZy5hZGRyKTsNCj4gPiArICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIs ICZyZWcsIHNpemVvZihzdHJ1Y3QgcmVnX3J3KSkgIT0gMHUpDQo+IHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgcmMgPSAtRUZBVUxUOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3Rv IG91dDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIG5ldGRldl9pbmZv KHRwLT5kZXYsICJcdHJlYWQgcmVnIDB4JTA0eCA9IDB4JTA0eCIsDQo+IHJlZy5hZGRyLCByZWcu dmFsKTsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgLyogZGVidWcgY2hhbm5lbCB3cml0ZSAqLw0K PiA+ICsgICAgIGVsc2UgaWYgKHJlZy5jbWQgPT0gQ01EX0RCR19XUklURSkgew0KPiA+ICsgICAg ICAgICAgICAgbWFjX29jcF93cml0ZSh0cCwgcmVnLmFkZHIsICh1MTYpcmVnLnZhbCk7DQo+ID4g KyAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2LCAiXHR3cml0ZSByZWcgMHglMDR4ID0g MHglMDR4IiwNCj4gcmVnLmFkZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBtYWNf b2NwX3JlYWQodHAsIHJlZy5hZGRyKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIC8qIG1taW8g cmVhZDE2ICovDQo+ID4gKyAgICAgZWxzZSBpZiAocmVnLmNtZCA9PSBDTURfUkVHX1JFQUQxNikg ew0KPiA+ICsgICAgICAgICAgICAgcmVnLnZhbCA9IFJUTF9SMTYocmVnLmFkZHIpOw0KPiA+ICsg ICAgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJnJlZywgc2l6ZW9mKHN0cnVj dCByZWdfcncpKSAhPSAwdSkNCj4gew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IC1F RkFVTFQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAg ICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2luZm8odHAtPmRldiwgIlx0cmVhZCBN TUlPIDB4JTA0eCA9IDB4JTA0eCIsDQo+IHJlZy5hZGRyLCByZWcudmFsKTsNCj4gPiArICAgICB9 DQo+ID4gKyAgICAgLyogbW1pbyB3cml0ZTE2ICovDQo+ID4gKyAgICAgZWxzZSBpZiAocmVnLmNt ZCA9PSBDTURfUkVHX1dSSVRFMTYpIHsNCj4gPiArICAgICAgICAgICAgIFJUTF9XMTYocmVnLmFk ZHIsICh1MTYpcmVnLnZhbCk7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2 LCAiXHR3cml0ZSBNTUlPIDB4JTA0eCA9IDB4JTA0eCIsDQo+IHJlZy5hZGRyLCBSVExfUjE2KHJl Zy5hZGRyKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIC8qIG1taW8gcmVhZDMyICovDQo+ID4g KyAgICAgZWxzZSBpZiAocmVnLmNtZCA9PSBDTURfUkVHX1JFQUQzMikgew0KPiA+ICsgICAgICAg ICAgICAgcmVnLnZhbCA9IFJUTF9SMzIocmVnLmFkZHIpOw0KPiA+ICsgICAgICAgICAgICAgaWYg KGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJnJlZywgc2l6ZW9mKHN0cnVjdCByZWdfcncpKSAhPSAw dSkNCj4gew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IC1FRkFVTFQ7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgICAgICAgICAgbmV0ZGV2X2luZm8odHAtPmRldiwgIlx0cmVhZCBNTUlPIDB4JTA0eCA9IDB4 JTA4eCIsDQo+IHJlZy5hZGRyLCByZWcudmFsKTsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgLyog bW1pbyB3cml0ZTMyICovDQo+ID4gKyAgICAgZWxzZSBpZiAocmVnLmNtZCA9PSBDTURfUkVHX1dS SVRFMzIpIHsNCj4gPiArICAgICAgICAgICAgIFJUTF9XMzIocmVnLmFkZHIsIHJlZy52YWwpOw0K PiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2luZm8odHAtPmRldiwgIlx0d3JpdGUgTU1JTyAweCUw NHggPSAweCUwOHgiLA0KPiByZWcuYWRkciwgUlRMX1IxNihyZWcuYWRkcikpOw0KPiA+ICsgICAg IH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2LCAicmVnIGNv bW1hbmQgZXJyb3IuXG4iKTsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgcHJfaW5mbygiXHRcbiIp Ow0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHMzMiBydGFzZV9yeHFvcyhjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29u c3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lv bWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHZvaWQgKnVzZXJhZGRyID0g KHZvaWQgKilpZnItPmlmcl9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCBydGtfcW9zIHFvc19jb25m aWc7DQo+ID4gKyAgICAgdTE2IG9mZnNldCA9IDA7DQo+ID4gKyAgICAgdTMyIHJlZ1YgPSAwOw0K PiA+ICsgICAgIHMzMiByYyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNl cigmcW9zX2NvbmZpZywgdXNlcmFkZHIsIHNpemVvZihzdHJ1Y3QgcnRrX3FvcykpICE9DQo+IDB1 KSB7DQo+ID4gKyAgICAgICAgICAgICByYyA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgICAgICAgICBn b3RvIG91dDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChxb3NfY29uZmlnLnBj cCA8IDR1KQ0KPiA+ICsgICAgICAgICAgICAgb2Zmc2V0ID0gKCh1MTYpcW9zX2NvbmZpZy5wY3Ag KiAzdSk7DQo+ID4gKyAgICAgZWxzZSBpZiAocW9zX2NvbmZpZy5wY3AgPCA4dSkNCj4gPiArICAg ICAgICAgICAgIG9mZnNldCA9ICgoKCh1MTYpcW9zX2NvbmZpZy5wY3AgLSA0dSkgKiAzdSkgKyAx NnUpOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIG9mZnNldCA9IDI4Ow0KPiA+ ICsNCj4gPiArICAgICBpZiAocW9zX2NvbmZpZy5jbWQgPT0gQ01EX0dFVF9SWFFPUykgew0KPiA+ ICsgICAgICAgICAgICAgcmVnViA9IFJUTF9SMzIoUlhfUENQX1RBQkxFKTsNCj4gPiArICAgICAg ICAgICAgIHFvc19jb25maWcudGMgPSAodTgpKChyZWdWID4+IG9mZnNldCkgJiAweDd1KTsNCj4g PiArICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZxb3NfY29uZmlnLCBz aXplb2Yoc3RydWN0DQo+IHJ0a19xb3MpKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICByYyA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0K PiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0gZWxzZSBpZiAocW9zX2NvbmZpZy5jbWQg PT0gQ01EX1NFVF9SWFFPUykgew0KPiA+ICsgICAgICAgICAgICAgcmVnViA9IFJUTF9SMzIoUlhf UENQX1RBQkxFKTsNCj4gPiArICAgICAgICAgICAgIHJlZ1YgJj0gfigodTMyKTB4N3UgPDwgb2Zm c2V0KTsNCj4gPiArICAgICAgICAgICAgIHJlZ1YgfD0gKCh1MzIpcW9zX2NvbmZpZy50YyA8PCBv ZmZzZXQpOw0KPiA+ICsgICAgICAgICAgICAgUlRMX1czMihSWF9QQ1BfVEFCTEUsIHJlZ1YpOw0K PiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2 LCAicnhxb3MgY29tbWFuZCBlcnJvci5cbiIpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBwcl9p bmZvKCJcdFxuIik7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuIHJjOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgczMyIHRpbWVvdXRfc2lnKGNvbnN0IHN0cnVjdCBpZnJl cSAqaWZyLCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lk ICp1c2VyYWRkciA9ICh2b2lkICopaWZyLT5pZnJfZGF0YTsNCj4gPiArICAgICBzdHJ1Y3QgcnRr X3RpbWVvdXRfc2lnIHJ0a190aW1lb3V0X3NpZzsNCj4gPiArICAgICBzMzIgcmMgPSAwOw0KPiA+ ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnJ0a190aW1lb3V0X3NpZywgdXNlcmFk ZHIsIHNpemVvZihzdHJ1Y3QNCj4gcnRrX3RpbWVvdXRfc2lnKSkgIT0gMHUpIHsNCj4gPiArICAg ICAgICAgICAgIHJjID0gLUVGQVVMVDsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAg ICAgICAgaWYgKHJ0a190aW1lb3V0X3NpZy5jbWQgPT0gQ01EX0dFVF9USU1TSUcpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgcnRrX3RpbWVvdXRfc2lnLnN0YXRlID0gdHAtPnRpbWVvdXRf c3RhdGU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoY29weV90b191c2Vy KHVzZXJhZGRyLCAmcnRrX3RpbWVvdXRfc2lnLA0KPiBzaXplb2Yoc3RydWN0IHJ0a190aW1lb3V0 X3NpZykpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAhPSAwdSkNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgICAgICAgICB9 IGVsc2UgaWYgKHJ0a190aW1lb3V0X3NpZy5jbWQgPT0gQ01EX1NFVF9USU1TSUcpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgdHAtPnRpbWVvdXRfc3RhdGUgPSBydGtfdGltZW91dF9zaWcu c3RhdGU7DQo+ID4gKyAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2LCAiJXMgY29tbWFuZCBlcnJvci5cbiIsDQo+IF9fZnVu Y19fKTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAg IHJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG0oY29u c3Qgc3RydWN0IGlmcmVxICppZnIsIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4g PiArew0KPiA+ICsgICAgIGNvbnN0IHZvaWQgKnVzZXJhZGRyID0gKHZvaWQgKilpZnItPmlmcl9k YXRhOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wdG1fY21kX3QgY21kOw0KPiA+ICsgICAgIHMz MiByZXQ7DQo+ID4gKyAgICAgdTMyIHNpemU7DQo+ID4gKw0KPiA+ICsgICAgIHN0YXRpYyBzMzIg KCpjb25zdCBwdG1fY21kX2luZm9bXSkoY29uc3Qgc3RydWN0IGlmcmVxICppZnIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcnRhc2Vf cHJpdmF0ZQ0KPiAqdHApID0gew0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfcHRtX2Z1bmN0aW9u LCBydGFzZV9wdG1fZ2V0X2Nsb2NrLA0KPiBydGFzZV9wdG1fc3djX2dldCwgICAgIHJ0YXNlX3B0 bV9yZWdfZ2V0LA0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfcHRtX3N3Y19zZXQsICBydGFzZV9w dG1fcmVnX3NldCwNCj4gcnRhc2VfcHRtX2F1dG9fdXBkYXRlLA0KPiA+ICsgICAgIH07DQo+ID4g Kw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyYWRkciwgc2l6ZW9mKHN0 cnVjdA0KPiBydGFzZV9wdG1fY21kX3QpKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgcmV0 ID0gLUVGQVVMVDsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgc2l6ZSA9 ICh1MzIpQVJSQVlfU0laRShwdG1fY21kX2luZm8pOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg IGlmIChjbWQudHlwZSA+PSBzaXplKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSAt RUZBVUxUOw0KPiA+ICsgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICByZXQgPSBwdG1fY21kX2luZm9bY21kLnR5cGVdKGlmciwgdHApOw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMz MiBydGFzZV9wdG1fZnVuY3Rpb24oY29uc3Qgc3RydWN0IGlmcmVxICppZnIsIGNvbnN0IHN0cnVj dA0KPiBydGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHZvaWQgKnVz ZXJhZGRyID0gKHZvaWQgKilpZnItPmlmcl9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9w dG1fY21kX3QgY21kOw0KPiA+ICsgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBkZXY7 DQo+ID4gKyAgICAgczMyIHB0bV9wb3MgPSAwOw0KPiA+ICsgICAgIHMzMiByZXQgPSAwOw0KPiA+ ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmFkZHIsIHNpemVvZihz dHJ1Y3QNCj4gcnRhc2VfcHRtX2NtZF90KSkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHJl dCA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHB0bV9w b3MgPSAoczMyKShwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LA0KPiBQQ0lfRVhUX0NBUF9J RF9QVE0pKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAocHRtX3BvcyA9PSAwKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIG5ldGRldl9pbmZvKHRwLT5kZXYsICJjYW4ndCBmaW5k IHB0bSBwb3NpdGlvbi4iKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVM VDsNCj4gPiArICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGlmIChjbWQuZW5hYmxlID09IDF1KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLyogcHRtIGVuYWJsZSAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBj aV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBwdG1fcG9zICsNCj4gOCwgMHgxdSk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY21kLmVuYWJsZSA9PSAwdSkgew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHB0bSBkaXNhYmxlICovDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIHB0bV9w b3MgKw0KPiA4LCAweDB1KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ZGV2LCAiJXMg Y29tbWFuZA0KPiBlcnJvci5cbiIsIF9fZnVuY19fKTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgfQ0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1fcmVn X2dldChjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZh dGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0 cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHZvaWQgKnVzZXJhZGRyID0gKHZvaWQgKilpZnItPmlm cl9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wdG1fY21kX3QgY21kOw0KPiA+ICsgICAg IHMzMiByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwg dXNlcmFkZHIsIHNpemVvZihzdHJ1Y3QNCj4gcnRhc2VfcHRtX2NtZF90KSkgIT0gMHUpIHsNCj4g PiArICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiAr ICAgICAgICAgICAgIGNtZC5yZWdfdmFsdWUgPSBSVExfUjE2KGNtZC5yZWdfYWRkcik7DQo+ID4g KyAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmY21kLCBzaXplb2Yoc3Ry dWN0DQo+IHJ0YXNlX3B0bV9jbWRfdCkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICByZXQgPSAtRUZBVUxUOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJl dDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1fcmVnX3NldChjb25z dCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZhdGUgKnRwKQ0K PiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0K PiA+ICsgICAgIGNvbnN0IHZvaWQgKnVzZXJhZGRyID0gKHZvaWQgKilpZnItPmlmcl9kYXRhOw0K PiA+ICsgICAgIHN0cnVjdCBydGFzZV9wdG1fY21kX3QgY21kOw0KPiA+ICsgICAgIHMzMiByZXQg PSAwOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgdXNlcmFkZHIs IHNpemVvZihzdHJ1Y3QNCj4gcnRhc2VfcHRtX2NtZF90KSkgIT0gMHUpIHsNCj4gPiArICAgICAg ICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAg ICAgIGlmIChjbWQuYml0cyA9PSAxNnUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9X MTYoY21kLnJlZ19hZGRyLCAodTE2KWNtZC5yZWdfdmFsdWUpOw0KPiA+ICsgICAgICAgICAgICAg ZWxzZSBpZiAoY21kLmJpdHMgPT0gMzJ1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBSVExf VzMyKGNtZC5yZWdfYWRkciwgY21kLnJlZ192YWx1ZSk7DQo+ID4gKyAgICAgICAgICAgICBlbHNl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG5ldGRldl9pbmZvKHRwLT5kZXYsICIlcyBjb21t YW5kIGVycm9yLlxuIiwNCj4gX19mdW5jX18pOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1f YXV0b191cGRhdGUoY29uc3Qgc3RydWN0IGlmcmVxICppZnIsIGNvbnN0IHN0cnVjdA0KPiBydGFz ZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHZvaWQgKnVzZXJhZGRyID0g KHZvaWQgKilpZnItPmlmcl9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0g dHAtPnBkZXY7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3B0bV9jbWRfdCBjbWQ7DQo+ID4gKyAg ICAgczMyIHB0bV9wb3MgPSAwOw0KPiA+ICsgICAgIHMzMiByZXQgPSAwOw0KPiA+ICsNCj4gPiAr ICAgICBwdG1fcG9zID0gKHMzMikocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwNCj4gUENJ X0VYVF9DQVBfSURfUFRNKSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigm Y21kLCB1c2VyYWRkciwgc2l6ZW9mKHN0cnVjdA0KPiBydGFzZV9wdG1fY21kX3QpKSAhPSAwdSkg ew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsNCj4gPiArICAgICB9IGVsc2Ugew0K PiA+ICsgICAgICAgICAgICAgaWYgKHB0bV9wb3MgPT0gMCkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBuZXRkZXZfd2Fybih0cC0+ZGV2LCAiY2FuJ3QgZmluZCBwdG0gcG9zaXRpb24uIik7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgICAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoY21kLmVuYWJsZSA9 PSAxdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfd3JpdGVfY29uZmln X2J5dGUocGRldiwgcHRtX3BvcyArDQo+IDIwLCAweDF1KTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV93cml0ZV9j b25maWdfYnl0ZShwZGV2LCBwdG1fcG9zICsNCj4gMjAsIDB4MHUpOw0KPiA+ICsgICAgICAgICAg ICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0K PiA+ICsNCj4gPg0KPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiArICogRXRodG9v bCBPcGVyYXRpb25zDQo+ID4gKw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqLw0KPiA+ICtz dGF0aWMgdm9pZCBydGFzZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1 Y3QgZXRodG9vbF9kcnZpbmZvDQo+ICpkcnZpbmZvKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qg c3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4g KyAgICAgc3Ryc2NweShkcnZpbmZvLT5kcml2ZXIsIE1PRFVMRU5BTUUsIDMyKTsNCj4gPiArICAg ICBzdHJzY3B5KGRydmluZm8tPnZlcnNpb24sIFJUQVNFX1ZFUlNJT04sIDMyKTsNCj4gPiArICAg ICBzdHJzY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZSh0cC0+cGRldiksIDMyKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArI3VuZGVmIGV0aHRvb2xfb3BfZ2V0X2xpbmsNCj4gPiArI2RlZmlu ZSBldGh0b29sX29wX2dldF9saW5rIF9rY19ldGh0b29sX29wX2dldF9saW5rDQo+ID4gK3N0YXRp YyB1MzIgX2tjX2V0aHRvb2xfb3BfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4g PiArew0KPiA+ICsgICAgIHJldHVybiBuZXRpZl9jYXJyaWVyX29rKGRldikgPyAxdSA6IDB1Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX2dldF9zZXR0aW5ncyhzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QNCj4gZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQ0K PiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2 X3ByaXYoZGV2KTsNCj4gPiArICAgICBjb25zdCB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5t bWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIHN1cHBvcnRlZCA9IDA7DQo+ID4gKyAgICAgdTMyIGFk dmVydGlzaW5nID0gMDsNCj4gPiArICAgICB1MzIgc3BlZWQgPSAwOw0KPiA+ICsgICAgIHUxNiB2 YWx1ZSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHN1cHBvcnRlZCB8PSAodTMyKShTVVBQT1JURURf TUlJIHwgU1VQUE9SVEVEX1BhdXNlKTsNCj4gPiArDQo+ID4gKyAgICAgYWR2ZXJ0aXNpbmcgfD0g KHUzMilBRFZFUlRJU0VEX01JSTsNCj4gPiArDQo+ID4gKyAgICAgLyogc3BlZWQgKi8NCj4gPiAr ICAgICBzd2l0Y2ggKHRwLT5wZGV2LT5idXMtPmN1cl9idXNfc3BlZWQpIHsNCj4gPiArICAgICBj YXNlIFBDSUVfU1BFRURfMl81R1Q6DQo+ID4gKyAgICAgICAgICAgICBzcGVlZCA9IFNQRUVEXzEw MDA7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFBDSUVfU1BFRURf NV8wR1Q6DQo+ID4gKyAgICAgICAgICAgICBzcGVlZCA9IFNQRUVEXzI1MDA7DQo+ID4gKyAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFBDSUVfU1BFRURfOF8wR1Q6DQo+ID4gKyAg ICAgICAgICAgICBzcGVlZCA9IFNQRUVEXzUwMDA7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsN Cj4gPiArICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgLyogbm90aGluZyB0byBkby4g Ki8NCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgLyogcGF1c2UgKi8NCj4gPiArICAgICB2YWx1ZSA9IFJUTF9SMTYoQ1BMVVNfQ01EKTsNCj4g PiArICAgICBpZiAoKHZhbHVlICYgKEZPUkNFX1RYRkxPV19FTiB8IEZPUkNFX1JYRkxPV19FTikp ID09DQo+IChGT1JDRV9UWEZMT1dfRU4gfCBGT1JDRV9SWEZMT1dfRU4pKQ0KPiA+ICsgICAgICAg ICAgICAgYWR2ZXJ0aXNpbmcgfD0gKHUzMilBRFZFUlRJU0VEX1BhdXNlOw0KPiA+ICsgICAgIGVs c2UgaWYgKCh2YWx1ZSAmIEZPUkNFX1RYRkxPV19FTikgIT0gMHUpDQo+ID4gKyAgICAgICAgICAg ICBhZHZlcnRpc2luZyB8PSAodTMyKUFEVkVSVElTRURfQXN5bV9QYXVzZTsNCj4gPiArICAgICBl bHNlIGlmICgodmFsdWUgJiBGT1JDRV9SWEZMT1dfRU4pICE9IDB1KQ0KPiA+ICsgICAgICAgICAg ICAgYWR2ZXJ0aXNpbmcgfD0gKHUzMikoQURWRVJUSVNFRF9QYXVzZSB8DQo+IEFEVkVSVElTRURf QXN5bV9QYXVzZSk7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2lu Zm8oZGV2LCAicGF1c2UgaXMgZGlzYWJsZVxuIik7DQo+ID4gKw0KPiA+ICsNCj4gZXRodG9vbF9j b252ZXJ0X2xlZ2FjeV91MzJfdG9fbGlua19tb2RlKGNtZC0+bGlua19tb2Rlcy5zdXBwb3J0ZWQs DQo+IHN1cHBvcnRlZCk7DQo+ID4gKw0KPiBldGh0b29sX2NvbnZlcnRfbGVnYWN5X3UzMl90b19s aW5rX21vZGUoY21kLT5saW5rX21vZGVzLmFkdmVydGlzaW5nLA0KPiBhZHZlcnRpc2luZyk7DQo+ ID4gKyAgICAgY21kLT5iYXNlLnNwZWVkID0gc3BlZWQ7DQo+ID4gKyAgICAgY21kLT5iYXNlLmR1 cGxleCA9IERVUExFWF9GVUxMOw0KPiA+ICsgICAgIGNtZC0+YmFzZS5wb3J0ID0gUE9SVF9NSUk7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBydGFzZV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QN Cj4gZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0 cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgY29u c3Qgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUxNiB2 YWx1ZSA9IFJUTF9SMTYoQ1BMVVNfQ01EKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCh2YWx1ZSAm IChGT1JDRV9UWEZMT1dfRU4gfCBGT1JDRV9SWEZMT1dfRU4pKSA9PQ0KPiAoRk9SQ0VfVFhGTE9X X0VOIHwgRk9SQ0VfUlhGTE9XX0VOKSkgew0KPiA+ICsgICAgICAgICAgICAgcGF1c2UtPnJ4X3Bh dXNlID0gMTsNCj4gPiArICAgICAgICAgICAgIHBhdXNlLT50eF9wYXVzZSA9IDE7DQo+ID4gKyAg ICAgfSBlbHNlIGlmICgodmFsdWUgJiBGT1JDRV9UWEZMT1dfRU4pICE9IDB1KSB7DQo+ID4gKyAg ICAgICAgICAgICBwYXVzZS0+dHhfcGF1c2UgPSAxOw0KPiA+ICsgICAgIH0gZWxzZSBpZiAoKHZh bHVlICYgRk9SQ0VfUlhGTE9XX0VOKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgcGF1c2Ut PnJ4X3BhdXNlID0gMTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgLyog bm90IGVuYWJsZSBwYXVzZSAqLw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBydGFzZV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1 Y3QNCj4gZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0 IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAg dm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUxNiB2YWx1 ZSA9IFJUTF9SMTYoQ1BMVVNfQ01EKTsNCj4gPiArDQo+ID4gKyAgICAgdmFsdWUgJj0gKHUxNiko fihGT1JDRV9UWEZMT1dfRU4gfCBGT1JDRV9SWEZMT1dfRU4pKTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKHBhdXNlLT50eF9wYXVzZSA9PSAxdSkNCj4gPiArICAgICAgICAgICAgIHZhbHVlIHw9ICh1 MTYpRk9SQ0VfVFhGTE9XX0VOOw0KPiA+ICsNCj4gPiArICAgICBpZiAocGF1c2UtPnJ4X3BhdXNl ID09IDF1KQ0KPiA+ICsgICAgICAgICAgICAgdmFsdWUgfD0gKHUxNilGT1JDRV9SWEZMT1dfRU47 DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMTYoQ1BMVVNfQ01ELCB2YWx1ZSk7DQo+ID4gKyAgICAg cmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgcnRhc2VfZ2V0X21zZ2xl dmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1 Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsNCj4gPiArICAg ICByZXR1cm4gdHAtPm1zZ19lbmFibGU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHJ0YXNlX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihk ZXYpOw0KPiA+ICsNCj4gPiArICAgICB0cC0+bXNnX2VuYWJsZSA9IHZhbHVlOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OA0KPiAqZGF0YSkNCj4gPiArew0KPiA+ICsgICAgICh2 b2lkKWRldjsNCj4gPiArDQo+ID4gKyAgICAgc3dpdGNoIChzdHJpbmdzZXQpIHsNCj4gPiArICAg ICBjYXNlIEVUSF9TU19TVEFUUzoNCj4gPiArICAgICAgICAgICAgIG1lbWNweShkYXRhLCAodTgg KikmcnRhc2VfZ3N0cmluZ3MsDQo+IHNpemVvZihydGFzZV9nc3RyaW5ncykpOw0KPiA+ICsgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIC8q IG5vdGhpbmcgdG8gZG8uICovDQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICB9 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2VfZ2V0X3NzZXRfY291bnQoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpDQo+ID4gK3sNCj4gPiArICAgICBpbnQgcmV0 ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgKHZvaWQpZGV2Ow0KPiA+ICsNCj4gPiArICAgICBzd2l0 Y2ggKHNzZXQpIHsNCj4gPiArICAgICBjYXNlIEVUSF9TU19TVEFUUzoNCj4gPiArICAgICAgICAg ICAgIHJldCA9IChpbnQpKEFSUkFZX1NJWkUocnRhc2VfZ3N0cmluZ3MpKTsNCj4gPiArICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXQg PSAtRU9QTk9UU1VQUDsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgcnRhc2VfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0 DQo+IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIGNv bnN0IHN0cnVjdCBydGFzZV9jb3VudGVycyAqY291bnRlcnM7DQo+ID4gKyAgICAgZG1hX2FkZHJf dCBwYWRkcjsNCj4gPiArICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsNCj4gPiArICAg ICBBU1NFUlRfUlROTCgpOw0KPiA+ICsNCj4gPiArICAgICAodm9pZClzdGF0czsNCj4gPiArICAg ICBjb3VudGVycyA9IHRwLT50YWxseV92YWRkcjsNCj4gPiArICAgICBwYWRkciA9IHRwLT50YWxs eV9wYWRkcjsNCj4gPiArICAgICBpZiAoIWNvdW50ZXJzKQ0KPiA+ICsgICAgICAgICAgICAgZ290 byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxh Z3MpOw0KPiA+ICsgICAgIHJ0YXNlX2R1bXBfdGFsbHlfY291bnRlcih0cCwgcGFkZHIpOw0KPiA+ ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKw0K PiA+ICsgICAgIGRhdGFbMF0gPSBsZTY0X3RvX2NwdShjb3VudGVycy0+dHhfcGFja2V0cyk7DQo+ ID4gKyAgICAgZGF0YVsxXSA9IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT5yeF9wYWNrZXRzKTsNCj4g PiArICAgICBkYXRhWzJdID0gbGU2NF90b19jcHUoY291bnRlcnMtPnR4X2Vycm9ycyk7DQo+ID4g KyAgICAgZGF0YVszXSA9IGxlMzJfdG9fY3B1KGNvdW50ZXJzLT5yeF9lcnJvcnMpOw0KPiA+ICsg ICAgIGRhdGFbNF0gPSBsZTE2X3RvX2NwdShjb3VudGVycy0+cnhfbWlzc2VkKTsNCj4gPiArICAg ICBkYXRhWzVdID0gbGUxNl90b19jcHUoY291bnRlcnMtPmFsaWduX2Vycm9ycyk7DQo+ID4gKyAg ICAgZGF0YVs2XSA9IGxlMzJfdG9fY3B1KGNvdW50ZXJzLT50eF9vbmVfY29sbGlzaW9uKTsNCj4g PiArICAgICBkYXRhWzddID0gbGUzMl90b19jcHUoY291bnRlcnMtPnR4X211bHRpX2NvbGxpc2lv bik7DQo+ID4gKyAgICAgZGF0YVs4XSA9IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT5yeF91bmljYXN0 KTsNCj4gPiArICAgICBkYXRhWzldID0gbGU2NF90b19jcHUoY291bnRlcnMtPnJ4X2Jyb2FkY2Fz dCk7DQo+ID4gKyAgICAgZGF0YVsxMF0gPSBsZTMyX3RvX2NwdShjb3VudGVycy0+cnhfbXVsdGlj YXN0KTsNCj4gPiArICAgICBkYXRhWzExXSA9IGxlMTZfdG9fY3B1KGNvdW50ZXJzLT50eF9hYm9y dGVkKTsNCj4gPiArICAgICBkYXRhWzEyXSA9IGxlMTZfdG9fY3B1KGNvdW50ZXJzLT50eF91bmRl cnVuKTsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICByZXR1cm47DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRhc2VfZXRodG9vbF9vcHMg PSB7DQo+ID4gKyAgICAgLmdldF9kcnZpbmZvID0gcnRhc2VfZ2V0X2RydmluZm8sDQo+ID4gKyAg ICAgLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywNCj4gPiArICAgICAuZ2V0X2xpbmtf a3NldHRpbmdzID0gcnRhc2VfZ2V0X3NldHRpbmdzLA0KPiA+ICsgICAgIC5nZXRfcGF1c2VwYXJh bSA9IHJ0YXNlX2dldF9wYXVzZXBhcmFtLA0KPiA+ICsgICAgIC5zZXRfcGF1c2VwYXJhbSA9IHJ0 YXNlX3NldF9wYXVzZXBhcmFtLA0KPiA+ICsgICAgIC5nZXRfbXNnbGV2ZWwgPSBydGFzZV9nZXRf bXNnbGV2ZWwsDQo+ID4gKyAgICAgLnNldF9tc2dsZXZlbCA9IHJ0YXNlX3NldF9tc2dsZXZlbCwN Cj4gPiArICAgICAuZ2V0X3N0cmluZ3MgPSBydGFzZV9nZXRfc3RyaW5ncywNCj4gPiArICAgICAu Z2V0X3NzZXRfY291bnQgPSBydGFzZV9nZXRfc3NldF9jb3VudCwNCj4gPiArICAgICAuZ2V0X2V0 aHRvb2xfc3RhdHMgPSBydGFzZV9nZXRfZXRodG9vbF9zdGF0cywNCj4gPiArICAgICAuZ2V0X3Rz X2luZm8gPSBldGh0b29sX29wX2dldF90c19pbmZvLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPg0KPiAr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqDQo+ICoqKioqKioqKioqKioqKioNCj4gPiArICogRXRodG9vbCBDb21wYXRpYmlsaXR5 DQo+ID4gKw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioqKioqKioqLw0KPiA+ICsjaWZkZWYgRVRIVE9P TF9PUFNfQ09NUEFUDQo+ID4gK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfc2V0dGluZ3Moc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdXNlcmFkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgZXRodG9vbF9jbWQgY21kID0ge0VUSFRPT0xfR1NFVH07DQo+ID4gKyAgICAgaW50IGVycjsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKCFldGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKQ0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBlcnIgPSBl dGh0b29sX29wcy0+Z2V0X3NldHRpbmdzKGRldiwgJmNtZCk7DQo+ID4gKyAgICAgaWYgKGVyciA8 IDApDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArICAgICBpZiAo Y29weV90b191c2VyKHVzZXJhZGRyLCAmY21kLCBzaXplb2YoY21kKSkgIT0gMHUpDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCB2b2lkICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBldGh0 b29sX2NtZCBjbWQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPnNldF9zZXR0 aW5ncykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ID4g KyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJhZGRyLCBzaXplb2YoY21kKSkgIT0g MHUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIGV0aHRvb2xfb3BzLT5zZXRfc2V0dGluZ3MoZGV2LCAmY21kKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYsIHZvaWQgKnVzZXJhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xf ZHJ2aW5mbyBpbmZvOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0g ZXRodG9vbF9vcHM7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzLT5nZXRfZHJ2aW5mbykNCj4g PiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ID4gKyAgICAgbWVt c2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOw0KPiA+ICsgICAgIGluZm8uY21kID0gRVRIVE9P TF9HRFJWSU5GTzsNCj4gPiArICAgICBvcHMtPmdldF9kcnZpbmZvKGRldiwgJmluZm8pOw0KPiA+ ICsNCj4gPiArICAgICBpZiAob3BzLT5zZWxmX3Rlc3RfY291bnQpDQo+ID4gKyAgICAgICAgICAg ICBpbmZvLnRlc3RpbmZvX2xlbiA9IG9wcy0+c2VsZl90ZXN0X2NvdW50KGRldik7DQo+ID4gKyAg ICAgaWYgKG9wcy0+Z2V0X3N0YXRzX2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgaW5mby5uX3N0 YXRzID0gb3BzLT5nZXRfc3RhdHNfY291bnQoZGV2KTsNCj4gPiArICAgICBpZiAob3BzLT5nZXRf cmVnc19sZW4pDQo+ID4gKyAgICAgICAgICAgICBpbmZvLnJlZ2R1bXBfbGVuID0gb3BzLT5nZXRf cmVnc19sZW4oZGV2KTsNCj4gPiArICAgICBpZiAob3BzLT5nZXRfZWVwcm9tX2xlbikNCj4gPiAr ICAgICAgICAgICAgIGluZm8uZWVkdW1wX2xlbiA9IG9wcy0+Z2V0X2VlcHJvbV9sZW4oZGV2KTsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmluZm8sIHNpemVv ZihpbmZvKSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsNCj4gPiAr ICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX2dl dF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJhZGRyKQ0KPiA+ICt7DQo+ ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfcmVncyByZWdzOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVj dCBldGh0b29sX29wcyAqb3BzID0gZXRodG9vbF9vcHM7DQo+ID4gKyAgICAgdm9pZCAqcmVnYnVm Ow0KPiA+ICsgICAgIGludCByZWdsZW4sIHJldDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMt PmdldF9yZWdzIHx8ICFvcHMtPmdldF9yZWdzX2xlbikNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZyZWdz LCB1c2VyYWRkciwgc2l6ZW9mKHJlZ3MpKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUZBVUxUOw0KPiA+ICsNCj4gPiArICAgICByZWdsZW4gPSBvcHMtPmdldF9yZWdzX2xlbihk ZXYpOw0KPiA+ICsgICAgIGlmIChyZWdzLmxlbiA+IHJlZ2xlbikNCj4gPiArICAgICAgICAgICAg IHJlZ3MubGVuID0gcmVnbGVuOw0KPiA+ICsNCj4gPiArICAgICByZWdidWYgPSBrbWFsbG9jKHJl Z2xlbiwgR0ZQX1VTRVIpOw0KPiA+ICsgICAgIGlmICghcmVnYnVmKQ0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIG9wcy0+Z2V0X3JlZ3MoZGV2LCAm cmVncywgcmVnYnVmKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gLUVGQVVMVDsNCj4gPiArICAg ICBpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCAmcmVncywgc2l6ZW9mKHJlZ3MpKSAhPSAwdSkN Cj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIHVzZXJhZGRyICs9IG9mZnNl dG9mKHN0cnVjdCBldGh0b29sX3JlZ3MsIGRhdGEpOw0KPiA+ICsgICAgIGlmIChjb3B5X3RvX3Vz ZXIodXNlcmFkZHIsIHJlZ2J1ZiwgcmVnbGVuKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIGdv dG8gb3V0Ow0KPiA+ICsgICAgIHJldCA9IDA7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAg a2ZyZWUocmVnYnVmKTsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFy ICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8gd29s ID0ge0VUSFRPT0xfR1dPTH07DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPmdl dF93b2wpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ ICsgICAgIGV0aHRvb2xfb3BzLT5nZXRfd29sKGRldiwgJndvbCk7DQo+ID4gKw0KPiA+ICsgICAg IGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZ3b2wsIHNpemVvZih3b2wpKSAhPSAwdSkNCj4g PiArICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGV0aHRvb2xfc2V0X3dvbChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCBjaGFyICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBldGh0 b29sX3dvbGluZm8gd29sOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWV0aHRvb2xfb3BzLT5zZXRf d29sKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoY29weV9mcm9tX3VzZXIoJndvbCwgdXNlcmFkZHIsIHNpemVvZih3b2wpKSAhPSAw dSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gZXRodG9vbF9vcHMtPnNldF93b2woZGV2LCAmd29sKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBldGh0b29sX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 LCBjaGFyICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBldGh0b29sX3ZhbHVl IGVkYXRhID0ge0VUSFRPT0xfR01TR0xWTH07DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9v bF9vcHMtPmdldF9tc2dsZXZlbCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQ UDsNCj4gPiArDQo+ID4gKyAgICAgZWRhdGEuZGF0YSA9IGV0aHRvb2xfb3BzLT5nZXRfbXNnbGV2 ZWwoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmVk YXRhLCBzaXplb2YoZWRhdGEpKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUZB VUxUOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IGV0aHRvb2xfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJh ZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGE7DQo+ID4g Kw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPnNldF9tc2dsZXZlbCkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfZnJv bV91c2VyKCZlZGF0YSwgdXNlcmFkZHIsIHNpemVvZihlZGF0YSkpICE9IDB1KQ0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsgICAgIGV0aHRvb2xfb3BzLT5z ZXRfbXNnbGV2ZWwoZGV2LCBlZGF0YS5kYXRhKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX253YXlfcmVzZXQoc3RydWN0IG5ldF9k ZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPm53YXlfcmVz ZXQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiANCj4g VGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBjb3JlIGFscmVhZHkuIFNhbWUgYXBwbGllcyB0byBvdGhl ciBldGh0b29sIG9wcyBhcyB3ZWxsLg0KPiANCj4gPiArICAgICByZXR1cm4gZXRodG9vbF9vcHMt Pm53YXlfcmVzZXQoZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0b29s X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJhZGRyKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGEgPSB7RVRIVE9PTF9HTElOS307 DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPmdldF9saW5rKQ0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBlZGF0YS5kYXRh ID0gZXRodG9vbF9vcHMtPmdldF9saW5rKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5 X3RvX3VzZXIodXNlcmFkZHIsICZlZGF0YSwgc2l6ZW9mKGVkYXRhKSkgIT0gMHUpDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgdm9pZCAqdXNlcmFkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9v bF9lZXByb20gZWVwcm9tOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3Bz ID0gZXRodG9vbF9vcHM7DQo+ID4gKyAgICAgdTggKmRhdGE7DQo+ID4gKyAgICAgaW50IHJldDsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMtPmdldF9lZXByb20gfHwgIW9wcy0+Z2V0X2VlcHJv bV9sZW4pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmZWVwcm9tLCB1c2VyYWRkciwgc2l6ZW9mKGVlcHJv bSkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ ICsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFuZCB6ZXJvICovDQo+ID4gKyAgICAgaWYgKGVlcHJv bS5vZmZzZXQgKyBlZXByb20ubGVuIDw9IGVlcHJvbS5vZmZzZXQpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgLyogQ2hlY2sgZm9yIGV4Y2VlZGlu ZyB0b3RhbCBlZXByb20gbGVuICovDQo+ID4gKyAgICAgaWYgKGVlcHJvbS5vZmZzZXQgKyBlZXBy b20ubGVuID4gb3BzLT5nZXRfZWVwcm9tX2xlbihkZXYpKQ0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIGRhdGEgPSBrbWFsbG9jKGVlcHJvbS5sZW4s IEdGUF9VU0VSKTsNCj4gPiArICAgICBpZiAoIWRhdGEpDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gLUVGQVVMVDsNCj4gPiArICAgICBp ZiAoY29weV9mcm9tX3VzZXIoZGF0YSwgdXNlcmFkZHIgKyBzaXplb2YoZWVwcm9tKSwgZWVwcm9t LmxlbikgIT0NCj4gMHUpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4g KyAgICAgcmV0ID0gb3BzLT5nZXRfZWVwcm9tKGRldiwgJmVlcHJvbSwgZGF0YSk7DQo+ID4gKyAg ICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArICAg ICByZXQgPSAtRUZBVUxUOw0KPiA+ICsgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZl ZXByb20sIHNpemVvZihlZXByb20pKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0 Ow0KPiA+ICsgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIgKyBzaXplb2YoZWVwcm9tKSwg ZGF0YSwgZWVwcm9tLmxlbikgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4g PiArICAgICByZXQgPSAwOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIGtmcmVlKGRhdGEp Ow0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg ZXRodG9vbF9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnVzZXJhZGRy KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tIGVlcHJvbTsNCj4gPiAr ICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGV0aHRvb2xfb3BzOw0KPiA+ICsg ICAgIHU4ICpkYXRhOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmICgh b3BzLT5zZXRfZWVwcm9tIHx8ICFvcHMtPmdldF9lZXByb21fbGVuKQ0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3Vz ZXIoJmVlcHJvbSwgdXNlcmFkZHIsIHNpemVvZihlZXByb20pKSAhPSAwdSkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArICAgICAvKiBDaGVjayBmb3Igd3Jh cCBhbmQgemVybyAqLw0KPiA+ICsgICAgIGlmIChlZXByb20ub2Zmc2V0ICsgZWVwcm9tLmxlbiA8 PSBlZXByb20ub2Zmc2V0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4g Kw0KPiA+ICsgICAgIC8qIENoZWNrIGZvciBleGNlZWRpbmcgdG90YWwgZWVwcm9tIGxlbiAqLw0K PiA+ICsgICAgIGlmIChlZXByb20ub2Zmc2V0ICsgZWVwcm9tLmxlbiA+IG9wcy0+Z2V0X2VlcHJv bV9sZW4oZGV2KSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArICAgICBkYXRhID0ga21hbGxvYyhlZXByb20ubGVuLCBHRlBfVVNFUik7DQo+ID4gKyAgICAg aWYgKCFkYXRhKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ ICsgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gKyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKGRhdGEs IHVzZXJhZGRyICsgc2l6ZW9mKGVlcHJvbSksIGVlcHJvbS5sZW4pICE9DQo+IDB1KQ0KPiA+ICsg ICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IG9wcy0+c2V0X2Vl cHJvbShkZXYsICZlZXByb20sIGRhdGEpOw0KPiA+ICsgICAgIGlmIChyZXQpDQo+ID4gKyAgICAg ICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2Vy YWRkciArIHNpemVvZihlZXByb20pLCBkYXRhLCBlZXByb20ubGVuKSAhPSAwdSkNCj4gPiArICAg ICAgICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAga2Zy ZWUoZGF0YSk7DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBldGh0b29sX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lk ICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlIGNv YWxlc2NlID0ge0VUSFRPT0xfR0NPQUxFU0NFfTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFldGh0 b29sX29wcy0+Z2V0X2NvYWxlc2NlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FT1BOT1RT VVBQOw0KPiA+ICsNCj4gPiArICAgICBldGh0b29sX29wcy0+Z2V0X2NvYWxlc2NlKGRldiwgJmNv YWxlc2NlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmNv YWxlc2NlLCBzaXplb2YoY29hbGVzY2UpKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUZBVUxUOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IGV0aHRvb2xfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQg KnVzZXJhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgY29h bGVzY2U7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPmdldF9jb2FsZXNjZSkN Cj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ID4gKyAgICAg aWYgKGNvcHlfZnJvbV91c2VyKCZjb2FsZXNjZSwgdXNlcmFkZHIsIHNpemVvZihjb2FsZXNjZSkp ICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsg ICAgIHJldHVybiBldGh0b29sX29wcy0+c2V0X2NvYWxlc2NlKGRldiwgJmNvYWxlc2NlKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX2dldF9yaW5ncGFyYW0oc3RydWN0 IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdXNlcmFkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgZXRodG9vbF9yaW5ncGFyYW0gcmluZ3BhcmFtID0ge0VUSFRPT0xfR1JJTkdQQVJBTX07DQo+ ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPmdldF9yaW5ncGFyYW0pDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsgICAgIGV0aHRvb2xf b3BzLT5nZXRfcmluZ3BhcmFtKGRldiwgJnJpbmdwYXJhbSk7DQo+ID4gKw0KPiA+ICsgICAgIGlm IChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZyaW5ncGFyYW0sIHNpemVvZihyaW5ncGFyYW0pKSAh PSAwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsgICAgIHJldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGV0aHRvb2xfc2V0X3JpbmdwYXJh bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsg ICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSByaW5ncGFyYW07DQo+ID4gKw0KPiA+ICsgICAg IGlmICghZXRodG9vbF9vcHMtPmdldF9yaW5ncGFyYW0pDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmcmlu Z3BhcmFtLCB1c2VyYWRkciwgc2l6ZW9mKHJpbmdwYXJhbSkpICE9IDB1KQ0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBldGh0b29sX29w cy0+c2V0X3JpbmdwYXJhbShkZXYsICZyaW5ncGFyYW0pOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IGV0aHRvb2xfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg dm9pZCAqdXNlcmFkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBh cmFtIHBhdXNlcGFyYW0gPQ0KPiB7RVRIVE9PTF9HUEFVU0VQQVJBTX07DQo+ID4gKw0KPiA+ICsg ICAgIGlmICghZXRodG9vbF9vcHMtPmdldF9wYXVzZXBhcmFtKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBldGh0b29sX29wcy0+Z2V0X3Bh dXNlcGFyYW0oZGV2LCAmcGF1c2VwYXJhbSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X3Rv X3VzZXIodXNlcmFkZHIsICZwYXVzZXBhcmFtLCBzaXplb2YocGF1c2VwYXJhbSkpICE9IDB1KQ0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp1c2VyYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gcGF1c2VwYXJhbTsNCj4gPiArDQo+ID4gKyAgICAgaWYg KCFldGh0b29sX29wcy0+Z2V0X3BhdXNlcGFyYW0pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g LUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmcGF1c2Vw YXJhbSwgdXNlcmFkZHIsIHNpemVvZihwYXVzZXBhcmFtKSkgIT0NCj4gMHUpDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGV0aHRvb2xf b3BzLT5zZXRfcGF1c2VwYXJhbShkZXYsICZwYXVzZXBhcmFtKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBldGh0b29sX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs IGNoYXIgKnVzZXJhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfdmFsdWUg ZWRhdGEgPSB7RVRIVE9PTF9HUlhDU1VNfTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFldGh0b29s X29wcy0+Z2V0X3J4X2NzdW0pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7 DQo+ID4gKw0KPiA+ICsgICAgIGVkYXRhLmRhdGEgPSBldGh0b29sX29wcy0+Z2V0X3J4X2NzdW0o ZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmVkYXRh LCBzaXplb2YoZWRhdGEpKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUZBVUxU Ow0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGV0 aHRvb2xfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqdXNlcmFkZHIp DQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKCFldGh0b29sX29wcy0+c2V0X3J4X2NzdW0pDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNl cigmZWRhdGEsIHVzZXJhZGRyLCBzaXplb2YoZWRhdGEpKSAhPSAwdSkNCj4gPiArICAgICAgICAg ICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArICAgICBldGh0b29sX29wcy0+c2V0X3J4 X2NzdW0oZGV2LCBlZGF0YS5kYXRhKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBldGh0b29sX2dldF90eF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYsIGNoYXIgKnVzZXJhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xf dmFsdWUgZWRhdGEgPSB7RVRIVE9PTF9HVFhDU1VNfTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFl dGh0b29sX29wcy0+Z2V0X3R4X2NzdW0pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVPUE5P VFNVUFA7DQo+ID4gKw0KPiA+ICsgICAgIGVkYXRhLmRhdGEgPSBldGh0b29sX29wcy0+Z2V0X3R4 X2NzdW0oZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwg JmVkYXRhLCBzaXplb2YoZWRhdGEpKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAt RUZBVUxUOw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGV0aHRvb2xfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqdXNl cmFkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YTsNCj4g PiArDQo+ID4gKyAgICAgaWYgKCFldGh0b29sX29wcy0+c2V0X3R4X2NzdW0pDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zy b21fdXNlcigmZWRhdGEsIHVzZXJhZGRyLCBzaXplb2YoZWRhdGEpKSAhPSAwdSkNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gZXRodG9v bF9vcHMtPnNldF90eF9jc3VtKGRldiwgZWRhdGEuZGF0YSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAq dXNlcmFkZHIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YSA9 IHtFVEhUT09MX0dTR307DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMtPmdldF9z ZykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ID4gKyAg ICAgZWRhdGEuZGF0YSA9IGV0aHRvb2xfb3BzLT5nZXRfc2coZGV2KTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmVkYXRhLCBzaXplb2YoZWRhdGEpKSAhPSAw dSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOw0KPiA+ICsgICAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGV0aHRvb2xfc2V0X3NnKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0 IGV0aHRvb2xfdmFsdWUgZWRhdGE7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghZXRodG9vbF9vcHMt PnNldF9zZykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZlZGF0YSwgdXNlcmFkZHIsIHNpemVvZihlZGF0 YSkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7DQo+ID4gKw0KPiA+ ICsgICAgIHJldHVybiBldGh0b29sX29wcy0+c2V0X3NnKGRldiwgZWRhdGEuZGF0YSk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZXRodG9vbF9nZXRfdHNvKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIGNoYXIgKnVzZXJhZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGV0aHRv b2xfdmFsdWUgZWRhdGEgPSB7RVRIVE9PTF9HVFNPfTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFl dGh0b29sX29wcy0+Z2V0X3RzbykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQ UDsNCj4gPiArDQo+ID4gKyAgICAgZWRhdGEuZGF0YSA9IGV0aHRvb2xfb3BzLT5nZXRfdHNvKGRl dik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZlZGF0YSwg c2l6ZW9mKGVkYXRhKSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsN Cj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBldGh0 b29sX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqdXNlcmFkZHIpDQo+ID4g K3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKCFldGh0b29sX29wcy0+c2V0X3RzbykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAt RU9QTk9UU1VQUDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZlZGF0YSwg dXNlcmFkZHIsIHNpemVvZihlZGF0YSkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBldGh0b29sX29wcy0+c2V0X3Rzbyhk ZXYsIGVkYXRhLmRhdGEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGV0aHRvb2xf c2VsZl90ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJhZGRyKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IGV0aHRvb2xfdGVzdCB0ZXN0Ow0KPiA+ICsgICAgIGNvbnN0IHN0 cnVjdCBldGh0b29sX29wcyAqb3BzID0gZXRodG9vbF9vcHM7DQo+ID4gKyAgICAgdTY0ICpkYXRh Ow0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzLT5zZWxmX3Rl c3QgfHwgIW9wcy0+c2VsZl90ZXN0X2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F T1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIoJnRlc3QsIHVz ZXJhZGRyLCBzaXplb2YodGVzdCkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F RkFVTFQ7DQo+ID4gKw0KPiA+ICsgICAgIHRlc3QubGVuID0gb3BzLT5zZWxmX3Rlc3RfY291bnQo ZGV2KTsNCj4gPiArICAgICBkYXRhID0ga21hbGxvYyh0ZXN0LmxlbiAqIHNpemVvZih1NjQpLCBH RlBfVVNFUik7DQo+ID4gKyAgICAgaWYgKCFkYXRhKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIG9wcy0+c2VsZl90ZXN0KGRldiwgJnRlc3QsIGRh dGEpOw0KPiA+ICsNCj4gPiArICAgICByZXQgPSAtRUZBVUxUOw0KPiA+ICsgICAgIGlmIChjb3B5 X3RvX3VzZXIodXNlcmFkZHIsICZ0ZXN0LCBzaXplb2YodGVzdCkpICE9IDB1KQ0KPiA+ICsgICAg ICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgdXNlcmFkZHIgKz0gc2l6ZW9mKHRlc3QpOw0K PiA+ICsgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsIGRhdGEsIHRlc3QubGVuICogc2l6 ZW9mKHU2NCkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAg cmV0ID0gMDsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICBrZnJlZShkYXRhKTsNCj4gPiAr ICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGV0aHRvb2xf Z2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdXNlcmFkZHIpDQo+ID4g K3sNCj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncyBnc3RyaW5nczsNCj4gPiArICAg ICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGV0aHRvb2xfb3BzOw0KPiA+ICsgICAg IHU4ICpkYXRhOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3Bz LT5nZXRfc3RyaW5ncykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU9QTk9UU1VQUDsNCj4g PiArDQo+ID4gKyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZnc3RyaW5ncywgdXNlcmFkZHIsIHNp emVvZihnc3RyaW5ncykpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7 DQo+ID4gKw0KPiA+ICsgICAgIHN3aXRjaCAoZ3N0cmluZ3Muc3RyaW5nX3NldCkgew0KPiA+ICsg ICAgIGNhc2UgRVRIX1NTX1RFU1Q6DQo+ID4gKyAgICAgICAgICAgICBpZiAoIW9wcy0+c2VsZl90 ZXN0X2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7 DQo+ID4gKyAgICAgICAgICAgICBnc3RyaW5ncy5sZW4gPSBvcHMtPnNlbGZfdGVzdF9jb3VudChk ZXYpOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgY2FzZSBFVEhfU1NfU1RB VFM6DQo+ID4gKyAgICAgICAgICAgICBpZiAoIW9wcy0+Z2V0X3N0YXRzX2NvdW50KQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKyAgICAgICAgICAg ICBnc3RyaW5ncy5sZW4gPSBvcHMtPmdldF9zdGF0c19jb3VudChkZXYpOw0KPiA+ICsgICAgICAg ICAgICAgYnJlYWs7DQo+ID4gKyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgZGF0YSA9IGttYWxsb2Mo Z3N0cmluZ3MubGVuICogRVRIX0dTVFJJTkdfTEVOLCBHRlBfVVNFUik7DQo+ID4gKyAgICAgaWYg KCFkYXRhKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsg ICAgIG9wcy0+Z2V0X3N0cmluZ3MoZGV2LCBnc3RyaW5ncy5zdHJpbmdfc2V0LCBkYXRhKTsNCj4g PiArDQo+ID4gKyAgICAgcmV0ID0gLUVGQVVMVDsNCj4gPiArICAgICBpZiAoY29weV90b191c2Vy KHVzZXJhZGRyLCAmZ3N0cmluZ3MsIHNpemVvZihnc3RyaW5ncykpICE9IDB1KQ0KPiA+ICsgICAg ICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgdXNlcmFkZHIgKz0gc2l6ZW9mKGdzdHJpbmdz KTsNCj4gPiArICAgICBpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBkYXRhLCBnc3RyaW5ncy5s ZW4gKiBFVEhfR1NUUklOR19MRU4pICE9DQo+IDB1KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBv dXQ7DQo+ID4gKyAgICAgcmV0ID0gMDsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICBrZnJl ZShkYXRhKTsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IGV0aHRvb2xfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICp1c2Vy YWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBldGh0b29sX3ZhbHVlIGlkOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoIWV0aHRvb2xfb3BzLT5waHlzX2lkKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIo JmlkLCB1c2VyYWRkciwgc2l6ZW9mKGlkKSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGV0aHRvb2xfb3BzLT5waHlzX2lk KGRldiwgaWQuZGF0YSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZXRodG9vbF9n ZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdXNlcmFkZHIpDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyBzdGF0czsNCj4gPiArICAgICBjb25zdCBz dHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGV0aHRvb2xfb3BzOw0KPiA+ICsgICAgIHU2NCAqZGF0 YTsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcy0+Z2V0X2V0 aHRvb2xfc3RhdHMgfHwgIW9wcy0+Z2V0X3N0YXRzX2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FT1BOT1RTVVBQOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29weV9mcm9tX3VzZXIo JnN0YXRzLCB1c2VyYWRkciwgc2l6ZW9mKHN0YXRzKSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKyAgICAgc3RhdHMubl9zdGF0cyA9IG9wcy0+ Z2V0X3N0YXRzX2NvdW50KGRldik7DQo+ID4gKyAgICAgZGF0YSA9IGttYWxsb2Moc3RhdHMubl9z dGF0cyAqIHNpemVvZih1NjQpLCBHRlBfVVNFUik7DQo+ID4gKyAgICAgaWYgKCFkYXRhKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIG9wcy0+Z2V0 X2V0aHRvb2xfc3RhdHMoZGV2LCAmc3RhdHMsIGRhdGEpOw0KPiA+ICsNCj4gPiArICAgICByZXQg PSAtRUZBVUxUOw0KPiA+ICsgICAgIGlmIChjb3B5X3RvX3VzZXIodXNlcmFkZHIsICZzdGF0cywg c2l6ZW9mKHN0YXRzKSkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiAr ICAgICB1c2VyYWRkciArPSBzaXplb2Yoc3RhdHMpOw0KPiA+ICsgICAgIGlmIChjb3B5X3RvX3Vz ZXIodXNlcmFkZHIsIGRhdGEsIHN0YXRzLm5fc3RhdHMgKiBzaXplb2YodTY0KSkgIT0gMHUpDQo+ ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICByZXQgPSAwOw0KPiA+ICsNCj4g PiArb3V0Og0KPiA+ICsgICAgIGtmcmVlKGRhdGEpOw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZXRodG9vbF9pb2N0bChzdHJ1Y3QgaWZyZXEg KmlmcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBfX2Rldl9n ZXRfYnlfbmFtZShpZnItPmlmcl9uYW1lKTsNCj4gPiArICAgICB2b2lkICp1c2VyYWRkciA9ICh2 b2lkICopaWZyLT5pZnJfZGF0YTsNCj4gPiArICAgICB1MzIgZXRoY21kOw0KPiA+ICsNCj4gPiAr ICAgICAvKiBYWFg6IFRoaXMgY2FuIGJlIHB1c2hlZCBkb3duIGludG8gdGhlIGV0aHRvb2xfKiBo YW5kbGVycyB0aGF0DQo+ID4gKyAgICAgICogbmVlZCBpdC4gIEtlZXAgZXhpc3RpbmcgYmVoYXZp b3IgZm9yIHRoZSBtb21lbnQuDQo+ID4gKyAgICAgICovDQo+ID4gKyAgICAgaWYgKCFjYXBhYmxl KENBUF9ORVRfQURNSU4pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FUEVSTTsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKCFkZXYgfHwgIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpDQo+ID4g KyAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlf ZnJvbV91c2VyKCZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YoZXRoY21kKSkgIT0gMHUpDQo+ID4g KyAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsNCj4gPiArDQo+ID4gKyAgICAgc3dpdGNoIChl dGhjbWQpIHsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfR1NFVDoNCj4gPiArICAgICAgICAgICAg IHJldHVybiBldGh0b29sX2dldF9zZXR0aW5ncyhkZXYsIHVzZXJhZGRyKTsNCj4gPiArICAgICBj YXNlIEVUSFRPT0xfU1NFVDoNCj4gPiArICAgICAgICAgICAgIHJldHVybiBldGh0b29sX3NldF9z ZXR0aW5ncyhkZXYsIHVzZXJhZGRyKTsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfR0RSVklORk86 DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9nZXRfZHJ2aW5mbyhkZXYsIHVzZXJh ZGRyKTsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfR1JFR1M6DQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gZXRodG9vbF9nZXRfcmVncyhkZXYsIHVzZXJhZGRyKTsNCj4gPiArICAgICBjYXNlIEVU SFRPT0xfR1dPTDoNCj4gPiArICAgICAgICAgICAgIHJldHVybiBldGh0b29sX2dldF93b2woZGV2 LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgY2FzZSBFVEhUT09MX1NXT0w6DQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gZXRodG9vbF9zZXRfd29sKGRldiwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNh c2UgRVRIVE9PTF9HTVNHTFZMOg0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIGV0aHRvb2xfZ2V0 X21zZ2xldmVsKGRldiwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9TTVNHTFZM Og0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIGV0aHRvb2xfc2V0X21zZ2xldmVsKGRldiwgdXNl cmFkZHIpOw0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9OV0FZX1JTVDoNCj4gPiArICAgICAgICAg ICAgIHJldHVybiBldGh0b29sX253YXlfcmVzZXQoZGV2KTsNCj4gPiArICAgICBjYXNlIEVUSFRP T0xfR0xJTks6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9nZXRfbGluayhkZXYs IHVzZXJhZGRyKTsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfR0VFUFJPTToNCj4gPiArICAgICAg ICAgICAgIHJldHVybiBldGh0b29sX2dldF9lZXByb20oZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAg ICAgY2FzZSBFVEhUT09MX1NFRVBST006DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9v bF9zZXRfZWVwcm9tKGRldiwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9HQ09B TEVTQ0U6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9nZXRfY29hbGVzY2UoZGV2 LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgY2FzZSBFVEhUT09MX1NDT0FMRVNDRToNCj4gPiArICAg ICAgICAgICAgIHJldHVybiBldGh0b29sX3NldF9jb2FsZXNjZShkZXYsIHVzZXJhZGRyKTsNCj4g PiArICAgICBjYXNlIEVUSFRPT0xfR1JJTkdQQVJBTToNCj4gPiArICAgICAgICAgICAgIHJldHVy biBldGh0b29sX2dldF9yaW5ncGFyYW0oZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgY2FzZSBF VEhUT09MX1NSSU5HUEFSQU06DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9zZXRf cmluZ3BhcmFtKGRldiwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9HUEFVU0VQ QVJBTToNCj4gPiArICAgICAgICAgICAgIHJldHVybiBldGh0b29sX2dldF9wYXVzZXBhcmFtKGRl diwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9TUEFVU0VQQVJBTToNCj4gPiAr ICAgICAgICAgICAgIHJldHVybiBldGh0b29sX3NldF9wYXVzZXBhcmFtKGRldiwgdXNlcmFkZHIp Ow0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9HUlhDU1VNOg0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIGV0aHRvb2xfZ2V0X3J4X2NzdW0oZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgY2FzZSBF VEhUT09MX1NSWENTVU06DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9zZXRfcnhf Y3N1bShkZXYsIHVzZXJhZGRyKTsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfR1RYQ1NVTToNCj4g PiArICAgICAgICAgICAgIHJldHVybiBldGh0b29sX2dldF90eF9jc3VtKGRldiwgdXNlcmFkZHIp Ow0KPiA+ICsgICAgIGNhc2UgRVRIVE9PTF9TVFhDU1VNOg0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIGV0aHRvb2xfc2V0X3R4X2NzdW0oZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgY2FzZSBF VEhUT09MX0dTRzoNCj4gPiArICAgICAgICAgICAgIHJldHVybiBldGh0b29sX2dldF9zZyhkZXYs IHVzZXJhZGRyKTsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfU1NHOg0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIGV0aHRvb2xfc2V0X3NnKGRldiwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNhc2Ug RVRIVE9PTF9HVFNPOg0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIGV0aHRvb2xfZ2V0X3Rzbyhk ZXYsIHVzZXJhZGRyKTsNCj4gPiArICAgICBjYXNlIEVUSFRPT0xfU1RTTzoNCj4gPiArICAgICAg ICAgICAgIHJldHVybiBldGh0b29sX3NldF90c28oZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAgICAg Y2FzZSBFVEhUT09MX1RFU1Q6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9zZWxm X3Rlc3QoZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgY2FzZSBFVEhUT09MX0dTVFJJTkdTOg0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIGV0aHRvb2xfZ2V0X3N0cmluZ3MoZGV2LCB1c2VyYWRk cik7DQo+ID4gKyAgICAgY2FzZSBFVEhUT09MX1BIWVNfSUQ6DQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gZXRodG9vbF9waHlzX2lkKGRldiwgdXNlcmFkZHIpOw0KPiA+ICsgICAgIGNhc2UgRVRI VE9PTF9HU1RBVFM6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZXRodG9vbF9nZXRfc3RhdHMo ZGV2LCB1c2VyYWRkcik7DQo+ID4gKyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIHJl dHVybiAtRU9QTk9UU1VQUDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAt RU9QTk9UU1VQUDsNCj4gPiArfQ0KPiA+ICsjZW5kaWYgLyogRVRIVE9PTF9PUFNfQ09NUEFUICov DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3Npb2NkZXZwcml2YXRlKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCB2b2lkDQo+IF9fdXNlciAqZGF0YSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY21kKQ0KPiA+ICt7DQo+ID4gKyAg ICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAg ICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgKHZvaWQpZGF0YTsNCj4gPiArDQo+ID4g KyAgICAgaWYgKCh0cC0+cHRtX3N1cHBvcnQgPT0gMHUpICYmIChjbWQgPT0gU0lPX1BSSVZfUlRL X1BUTSkpIHsNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FT1BOT1RTVVBQOw0KPiA+ICsgICAg ICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBzd2l0Y2gg KGNtZCkgew0KPiA+ICsgICAgIGNhc2UgU0lPX1BSSVZfUlRLX1JFRzoNCj4gPiArICAgICAgICAg ICAgIHJldCA9IHJlZ19mdW4oaWZyLCB0cCk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4g PiArICAgICBjYXNlIFNJT19QUklWX1JUS19SWFFPUzoNCj4gPiArICAgICAgICAgICAgIHJldCA9 IHJ0YXNlX3J4cW9zKGlmciwgdHApOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAg ICAgY2FzZSBTSU9fVElNRU9VVF9TSUdfU0VUOg0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gdGlt ZW91dF9zaWcoaWZyLCB0cCk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBj YXNlIFNJT19QUklWX1JUS19QVE06DQo+ID4gKyAgICAgICAgICAgICByZXQgPSBydGFzZV9wdG0o aWZyLCB0cCk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFNJT19Q UklWX1JUS19JTkZPOg0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gcnRhc2VfZGVidWdfbXNnKGlm ciwgdHApOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgIGRlZmF1 bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRU9QTk9UU1VQUDsNCj4gPiArICAgICAgICAg ICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICByZXR1 cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX2RvX2lvY3RsKHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQ0KPiA+ICt7 DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYo ZGV2KTsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgKHZvaWQpaWZy Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoKHRwLT5wdG1fc3VwcG9ydCA9PSAwdSkgJiYgKGNtZCA9 PSBTSU9fUFJJVl9SVEtfUFRNKSkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNV UFA7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIHN3aXRjaCAoY21kKSB7DQo+ID4gKyNpZmRlZiBFVEhUT09MX09QU19DT01QQVQNCj4g PiArICAgICBjYXNlIFNJT0NFVEhUT09MOg0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gZXRodG9v bF9pb2N0bChpZnIpOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyNlbmRpZg0KPiA+ ICsNCj4gPiArICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVPUE5PVFNV UFA7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICtv dXQ6DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMz MiBydGFzZV9hbGxvY19tc2l4KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcnRhc2VfcHJp dmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB1MTYgaSA9IDA7DQo+ID4gKyAgICAgczMyIHJj ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgbWVtc2V0KHRwLT5tc2l4X2VudHJ5LCAweDAsIE5VTV9N U0lYICogc2l6ZW9mKHN0cnVjdA0KPiBtc2l4X2VudHJ5KSk7DQo+ID4gKyAgICAgZm9yIChpID0g MHU7IGkgPCBOVU1fTVNJWDsgaSsrKQ0KPiA+ICsgICAgICAgICAgICAgdHAtPm1zaXhfZW50cnlb aV0uZW50cnkgPSAodTE2KWk7DQo+ID4gKw0KPiA+ICsgICAgIHJjID0gcGNpX2VuYWJsZV9tc2l4 X3JhbmdlKHBkZXYsIHRwLT5tc2l4X2VudHJ5LCAoczMyKXRwLT5pbnRfbnVtcywNCj4gKHMzMil0 cC0+aW50X251bXMpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKHUxNilyYyA9PSB0cC0+aW50X251 bXMpIHsNCj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmludF9udW1zOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdHAtPmludF92ZWN0b3JbaV0uaXJxID0g KHUzMikocGNpX2lycV92ZWN0b3IocGRldiwNCj4gKHUzMilpKSk7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHRwLT5pbnRfdmVjdG9yW2ldLnN0YXR1cyA9IDE7DQo+ID4gKyAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmM7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBzMzIgcnRhc2VfYWxsb2NfaW50ZXJydXB0KHN0cnVjdCBwY2lfZGV2 ICpwZGV2LCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZQ0KPiAqdHApDQo+IA0KPiBCeSB1c2luZyBwY2lf YWxsb2NfaXJxX3ZlY3RvcnMoKSBhIGxvdCBpZiB0aGlzIHN0dWZmIGhlcmUgc2hvdWxkbid0IGJl IG5lZWRlZC4NCj4gDQo+ID4gK3sNCj4gPiArICAgICBzMzIgcmMgPSAwOw0KPiA+ICsNCj4gPiAr ICAgICByYyA9IHJ0YXNlX2FsbG9jX21zaXgocGRldiwgdHApOw0KPiA+ICsgICAgIGlmICgodTE2 KXJjICE9IHRwLT5pbnRfbnVtcykgew0KPiA+ICsgICAgICAgICAgICAgcmMgPSBwY2lfZW5hYmxl X21zaShwZGV2KTsNCj4gPiArICAgICAgICAgICAgIGlmIChyYyAhPSAwKQ0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2MNCj4gaW50 ZXJydXB0LihNU0kpXG4iKTsNCj4gPiArICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgdHAtPnN3X2ZsYWcgfD0gKHUzMilTV0ZfTVNJX0VOQUJMRUQ7DQo+ID4gKyAg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHRwLT5zd19mbGFnIHw9ICh1MzIpU1dGX01T SVhfRU5BQkxFRDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByYzsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfcmVzZXRfaW50ZXJydXB0KHN0cnVj dCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QNCj4gcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4g K3sNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX01TSVhfRU5BQkxFRCkgIT0gMHUp DQo+ID4gKyAgICAgICAgICAgICBwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOw0KPiA+ICsgICAgIGVs c2UgaWYgKCh0cC0+c3dfZmxhZyAmIFNXRl9NU0lfRU5BQkxFRCkgIT0gMHUpDQo+ID4gKyAgICAg ICAgICAgICBwY2lfZGlzYWJsZV9tc2kocGRldik7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsgICAg ICAgICAgICAgbmV0ZGV2X2luZm8odHAtPmRldiwgImludGVycnVwdCBpcyBuZXZlciBlbmFibGVk XG4iKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogcnRhc2VfaW5pdF9ib2FyZCAtDQo+ID4gKyAq IEBwZGV2OiBQQ0kgZGV2aWNlIHN0cnVjdA0KPiA+ICsgKiBAZGV2X291dDoNCj4gPiArICogQGlv YWRkcl9vdXQ6DQo+ID4gKyAqDQo+ID4gKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZl IG9uIGZhaWx1cmUNCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2VfaW5pdF9ib2FyZChz dHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IG5ldF9kZXZpY2UNCj4gKipkZXZfb3V0LA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBfX2lvbWVtICoqaW9hZGRyX291dCkNCj4g PiArew0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyOw0KPiA+ICsgICAgIHN0cnVjdCBu ZXRfZGV2aWNlICpkZXY7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwOw0KPiA+ ICsgICAgIGludCByYyA9IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIGFzc2VydChpb2FkZHJf b3V0KTsNCj4gPiArDQo+ID4gKyAgICAgLyogZGV2IHplcm9lZCBpbiBhbGxvY19ldGhlcmRldiAq Lw0KPiA+ICsgICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKChzMzIpKHNpemVvZihzdHJ1Y3Qg cnRhc2VfcHJpdmF0ZSkpLA0KPiBmdW5jX3R4cV9udW0pOw0KPiA+ICsgICAgIGlmICghZGV2KSB7 DQo+ID4gKyAgICAgICAgICAgICBpZiAobmV0aWZfbXNnX2RydigmZGVidWcpICE9IDB1KQ0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxs b2MgbmV3DQo+IGV0aGVybmV0XG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVy cl9vdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBTRVRfTU9EVUxFX09XTkVSKGRl dik7DQo+ID4gKyAgICAgU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsNCj4gPiArICAg ICB0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdHAtPmRldiA9IGRldjsNCj4gPiAr ICAgICB0cC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KChzMzIpZGVidWcubXNnX2VuYWJs ZSwNCj4gKHMzMilSVEFTRV9NU0dfREVGQVVMVCk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGVuYWJs ZSBkZXZpY2UgKGluY2wuIFBDSSBQTSB3YWtldXAgYW5kIGhvdHBsdWcgc2V0dXApICovDQo+ID4g KyAgICAgcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsNCj4gPiArICAgICBpZiAocmMgPCAw KSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSAhPSAwdSkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZW5hYmxlIGZhaWx1 cmVcbiIpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX291dF9mcmVlX2RldjsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIG1ha2Ugc3VyZSBQQ0kgYmFzZSBhZGRy IDEgaXMgTU1JTyAqLw0KPiA+ICsgICAgIGlmICgocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIp ICYgKHU2NClJT1JFU09VUkNFX01FTSkgPT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChu ZXRpZl9tc2dfcHJvYmUodHApICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZf ZXJyKCZwZGV2LT5kZXYsICJyZWdpb24gIzEgbm90IGFuIE1NSU8NCj4gcmVzb3VyY2UsIGFib3J0 aW5nXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICByYyA9IC1FTk9ERVY7DQo+ID4gKyAg ICAgICAgICAgICBnb3RvIGVycl9vdXRfZGlzYWJsZTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIC8qIGNoZWNrIGZvciB3ZWlyZC9icm9rZW4gUENJIHJlZ2lvbiByZXBvcnRpbmcgKi8N Cj4gPiArICAgICBpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCAyKSA8IFJUQVNFX1JFR1NfU0la RSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkgIT0gMHUpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgUENJ IHJlZ2lvbiBzaXplKHMpLA0KPiBhYm9ydGluZ1xuIik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgcmMgPSAtRU5PREVWOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0X2Rpc2FibGU7 DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMo cGRldiwgTU9EVUxFTkFNRSk7DQo+ID4gKyAgICAgaWYgKHJjIDwgMCkgew0KPiA+ICsgICAgICAg ICAgICAgaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkgIT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZXF1ZXN0DQo+IHJlZ2lvbnMu XG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9vdXRfZGlzYWJsZTsNCj4g PiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50 KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpDQo+ID09IDApDQo+ID4gKyAgICAgICAgICAg ICBkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsNCj4gPiArICAgICBlbHNlIGlmIChk bWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsDQo+IERNQV9CSVRfTUFTSygzMikp ICE9IDApDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9vdXRfZnJlZV9yZXM7DQo+ID4gKyAg ICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgcHJfaW5mbygiRE1BX0JJVF9NQVNLOiAzMlxuIik7 DQo+ID4gKw0KPiA+ICsgICAgIHBjaV9zZXRfbWFzdGVyKHBkZXYpOw0KPiA+ICsNCj4gPiArICAg ICAvKiBpb3JlbWFwIE1NSU8gcmVnaW9uICovDQo+ID4gKyAgICAgaW9hZGRyID0gaW9yZW1hcChw Y2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMiksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwNCj4gMikp Ow0KPiA+ICsgICAgIGlmICghaW9hZGRyKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAobmV0aWZf bXNnX3Byb2JlKHRwKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycigm cGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8sDQo+IGFib3J0aW5nXG4iKTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICByYyA9IC1FSU87DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9v dXRfZnJlZV9yZXM7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBJZGVudGlmeSBj aGlwIGF0dGFjaGVkIHRvIGJvYXJkICovDQo+ID4gKyAgICAgcnRhc2VfZ2V0X21hY192ZXJzaW9u KHRwLCBpb2FkZHIpOw0KPiA+ICsgICAgIHJ0YXNlX3ByaW50X21hY192ZXJzaW9uKHRwKTsNCj4g PiArDQo+ID4gKyAgICAgKmlvYWRkcl9vdXQgPSBpb2FkZHI7DQo+ID4gKyAgICAgKmRldl9vdXQg PSBkZXY7DQo+ID4gKyAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICtlcnJfb3V0X2ZyZWVfcmVz Og0KPiA+ICsgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7DQo+ID4gKw0KPiA+ICtlcnJf b3V0X2Rpc2FibGU6DQo+ID4gKyAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOw0KPiA+ICsN Cj4gPiArZXJyX291dF9mcmVlX2RldjoNCj4gPiArICAgICBmcmVlX25ldGRldihkZXYpOw0KPiA+ ICsNCj4gPiArZXJyX291dDoNCj4gPiArICAgICAqaW9hZGRyX291dCA9IE5VTEw7DQo+ID4gKyAg ICAgKmRldl9vdXQgPSBOVUxMOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiBy YzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29w cyBydGFzZV9uZXRkZXZfb3BzID0gew0KPiA+ICsgICAgIC5uZG9fb3BlbiA9IHJ0YXNlX29wZW4s DQo+ID4gKyAgICAgLm5kb19zdG9wID0gcnRhc2VfY2xvc2UsDQo+ID4gKyAgICAgLm5kb19zdGFy dF94bWl0ID0gcnRhc2Vfc3RhcnRfeG1pdCwNCj4gPiArICAgICAubmRvX3NldF9yeF9tb2RlID0g cnRhc2Vfc2V0X3J4X21vZGUsDQo+ID4gKyAgICAgLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBydGFz ZV9zZXRfbWFjX2FkZHJlc3MsDQo+ID4gKyAgICAgLm5kb19zaW9jZGV2cHJpdmF0ZSA9IHJ0YXNl X3Npb2NkZXZwcml2YXRlLA0KPiA+ICsgICAgIC5uZG9fZXRoX2lvY3RsID0gcnRhc2VfZG9faW9j dGwsDQo+ID4gKyAgICAgLm5kb19jaGFuZ2VfbXR1ID0gcnRhc2VfY2hhbmdlX210dSwNCj4gPiAr ICAgICAubmRvX3R4X3RpbWVvdXQgPSBydGFzZV90eF90aW1lb3V0LA0KPiA+ICsgICAgIC5uZG9f Z2V0X3N0YXRzNjQgPSBydGFzZV9nZXRfc3RhdHM2NCwNCj4gPiArICAgICAubmRvX3ZsYW5fcnhf YWRkX3ZpZCA9IHJ0YXNlX3ZsYW5fcnhfYWRkX3ZpZCwNCj4gPiArICAgICAubmRvX3ZsYW5fcnhf a2lsbF92aWQgPSBydGFzZV92bGFuX3J4X2tpbGxfdmlkLA0KPiA+ICsjaWZkZWYgQ09ORklHX05F VF9QT0xMX0NPTlRST0xMRVINCj4gPiArICAgICAubmRvX3BvbGxfY29udHJvbGxlciA9IHJ0YXNl X25ldHBvbGwsDQo+ID4gKyNlbmRpZg0KPiA+ICsjaWZkZWYgSUZMQV9WRl9NQVgNCj4gPiArICAg ICAubmRvX3NldF92Zl9tYWMgPSBydGFzZV9zZXRfdmZfbWFjLA0KPiA+ICsgICAgIC5uZG9fZ2V0 X3ZmX2NvbmZpZyA9IHJ0YXNlX2dldF92Zl9jb25maWcsDQo+ID4gKyNlbmRpZiAvKiBJRkxBX1ZG X01BWCAqLw0KPiA+ICsgICAgIC5uZG9fc2V0dXBfdGMgPSBydGFzZV9zZXR1cF90YywNCj4gPiAr ICAgICAubmRvX2ZpeF9mZWF0dXJlcyA9IHJ0YXNlX2ZpeF9mZWF0dXJlcywNCj4gPiArICAgICAu bmRvX3NldF9mZWF0dXJlcyA9IHJ0YXNlX3NldF9mZWF0dXJlcywNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2luaXRfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgZGV2LT5uZXRkZXZfb3BzID0gJnJ0YXNlX25ldGRldl9v cHM7DQo+ID4gKw0KPiA+ICsgICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZydGFzZV9ldGh0b29s X29wcyk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHJ0YXNlX2luaXRfb25lIC0gUENJIERldmlj ZSBJbml0aWFsaXphdGlvbg0KPiA+ICsgKiBAcGRldjogUENJIGRldmljZSBzdHJ1Y3QNCj4gPiAr ICogQGVudDogZW50cnkgaW4gcnRseHh4X3BjaV90YmwNCj4gPiArICoNCj4gPiArICogUmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQ0KPiA+ICsgKi8NCj4gPiArc3RhdGlj IGludCBydGFzZV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBj aV9kZXZpY2VfaWQNCj4gKmVudCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYgPSBOVUxMOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cDsNCj4gPiAr ICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IE5VTEw7DQo+ID4gKyAgICAgaW50IHJjOw0KPiA+ ICsNCj4gPiArICAgICAodm9pZCllbnQ7DQo+IERvbid0IGRvIHRoaXMuDQo+IA0KPiA+ICsgICAg IGFzc2VydChwZGV2KTsNCj4gPiArICAgICBhc3NlcnQoZW50KTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKChwZGV2LT5pc19waHlzZm4gPT0gMHUpICYmIChwZGV2LT5pc192aXJ0Zm4gIT0gMHUpKSB7 DQo+ID4gKyAgICAgICAgICAgICBwcl9pbmZvKCIlcyBUaGlzIG1vZHVsZSBkb2VzIG5vdCBzdXBw b3J0IGEgdmlydHVhbA0KPiBmdW5jdGlvbi4iLCBNT0RVTEVOQU1FKTsNCj4gPiArICAgICAgICAg ICAgIHJjID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKG5ldGlmX21zZ19kcnYoJmRlYnVnKSAhPSAwdSkNCj4g PiArICAgICAgICAgICAgIHByX2luZm8oIiVzIEF1dG9tb3RpdmUgU3dpdGNoIEV0aGVybmV0IGRy aXZlciAlcw0KPiBsb2FkZWRcbiIsIE1PRFVMRU5BTUUsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIFJUQVNFX1ZFUlNJT04pOw0KPiA+ICsNCj4gPiArICAgICByYyA9IHJ0YXNlX2luaXRfYm9h cmQocGRldiwgJmRldiwgJmlvYWRkcik7DQo+ID4gKyAgICAgaWYgKHJjICE9IDApDQo+ID4gKyAg ICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgdHAgPSBuZXRkZXZfcHJpdihk ZXYpOw0KPiA+ICsgICAgIGFzc2VydChpb2FkZHIpOw0KPiA+ICsgICAgIHRwLT5tbWlvX2FkZHIg PSBpb2FkZHI7DQo+ID4gKyAgICAgdHAtPnBkZXYgPSBwZGV2Ow0KPiA+ICsgICAgIGRldi0+dHN0 YXRzID0gZGV2bV9uZXRkZXZfYWxsb2NfcGNwdV9zdGF0cygmcGRldi0+ZGV2LCBzdHJ1Y3QNCj4g cGNwdV9zd19uZXRzdGF0cyk7DQo+ID4gKyAgICAgaWYgKCFkZXYtPnRzdGF0cykNCj4gPiArICAg ICAgICAgICAgIGdvdG8gZXJyX291dF8xOw0KPiA+ICsNCj4gPiArICAgICBydGFzZV9pbml0X3Nv ZnR3YXJlX3ZhcmlhYmxlKGRldik7DQo+ID4gKyAgICAgcnRhc2VfaW5pdF9oYXJkd2FyZSh0cCk7 DQo+ID4gKw0KPiA+ICsgICAgIHJjID0gcnRhc2VfYWxsb2NfaW50ZXJydXB0KHBkZXYsIHRwKTsN Cj4gPiArICAgICBpZiAocmMgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgcHJfZXJyKCJ1bmFibGUg dG8gYWxsb2MgTVNJWC9NU0lcbiIpOw0KPiA+ICsNCj4gPiArICAgICBydGFzZV9pbml0X25ldGRl dl9vcHMoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUQVNF X1RYX1RJTUVPVVQ7DQo+ID4gKyAgICAgZGV2LT5pcnEgPSAoczMyKXBkZXYtPmlycTsNCj4gPiAr ICAgICBkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsNCj4gPiArDQo+ID4g KyAgICAgZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZM QU5fUlg7DQo+ID4gKyNpZmRlZiBSVExfSFdfVkxBTl9GSUxURVINCj4gPiArICAgICBkZXYtPmZl YXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9DVEFHX0ZJTFRFUjsNCj4gPiArI2VuZGlmDQo+ID4g Kw0KPiA+ICsgICAgIGlmICh0cC0+bWNmZyAhPSBDRkdfTUVUSE9EX0RFRkFVTFQpIHsNCj4gPiAr ICAgICAgICAgICAgIGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOw0KPiA+ICsgICAg ICAgICAgICAgZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1JYQ1NVTSB8IE5FVElGX0ZfU0cgfA0K PiBORVRJRl9GX1RTTzsNCj4gPiArICAgICAgICAgICAgIGRldi0+aHdfZmVhdHVyZXMgPSBORVRJ Rl9GX1NHIHwgTkVUSUZfRl9JUF9DU1VNIHwNCj4gTkVUSUZfRl9UU08gfCBORVRJRl9GX1JYQ1NV TQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTkVUSUZfRl9IV19WTEFO X1RYIHwNCj4gTkVUSUZfRl9IV19WTEFOX1JYOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT52bGFu X2ZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8DQo+IE5FVElGX0ZfVFNP IHwgTkVUSUZfRl9ISUdIRE1BOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5wcml2X2ZsYWdzIHw9 IElGRl9MSVZFX0FERFJfQ0hBTkdFOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5od19mZWF0dXJl cyB8PSBORVRJRl9GX1JYQUxMOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5od19mZWF0dXJlcyB8 PSBORVRJRl9GX1JYRkNTOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5od19mZWF0dXJlcyB8PSBO RVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfVFNPNjsNCj4gPiArICAgICAgICAgICAgIGRldi0+ ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzY7DQo+ID4gKyAgICAg ICAgICAgICBuZXRpZl9zZXRfdHNvX21heF9zaXplKGRldiwgTFNPXzY0Syk7DQo+ID4gKyAgICAg ICAgICAgICBuZXRpZl9zZXRfdHNvX21heF9zZWdzKGRldiwNCj4gTklDX01BWF9QSFlTX0JVRl9D T1VOVF9MU08yKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChydGFzZV9nZXRf bWFjX2FkZHJlc3MoZGV2KSAhPSAwKQ0KPiA+ICsgICAgICAgICAgICAgcHJfYWxlcnQoInVuYWJs ZSB0byBnZXQgbWFjIGFkZHJlc3NcbiIpOw0KPiA+ICsNCj4gPiArICAgICB0cC0+dGFsbHlfdmFk ZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwNCj4gc2l6ZW9mKCp0cC0+dGFsbHlf dmFkZHIpLCAmdHAtPnRhbGx5X3BhZGRyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHRlBfS0VSTkVMKTsNCj4gPiArICAgICBpZiAoIXRwLT50YWxseV92 YWRkcikgew0KPiA+ICsgICAgICAgICAgICAgcmMgPSAtRU5PTUVNOw0KPiA+ICsgICAgICAgICAg ICAgZ290byBlcnJfb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcnRhc2VfdGFs bHlfY291bnRlcl9jbGVhcih0cCk7DQo+ID4gKw0KPiA+ICsgICAgIHBjaV9zZXRfZHJ2ZGF0YShw ZGV2LCBkZXYpOw0KPiA+ICsNCj4gPiArICAgICByYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpOw0K PiA+ICsgICAgIGlmIChyYyAhPSAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0Ow0K PiA+ICsNCj4gPiArICAgICBwcl9pbmZvKCIlczogVGhpcyBwcm9kdWN0IGlzIGNvdmVyZWQgYnkg b25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZw0KPiBwYXRlbnRzOiBVUzYsNTcwLDg4NCwgVVM2 LDExNSw3NzYsIGFuZCBVUzYsMzI3LDYyNS5cbiIsDQo+ID4gKyAgICAgICAgICAgICBNT0RVTEVO QU1FKTsNCj4gPiArDQo+ID4gKyAgICAgbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsNCj4gPiArDQo+ ID4gKyAgICAgcHJfaW5mbygiJXMiLCBHUExfQ0xBSU0pOw0KPiA+ICsgICAgIGdvdG8gb3V0Ow0K PiA+ICsNCj4gPiArZXJyX291dDoNCj4gPiArICAgICBpZiAodHAtPnRhbGx5X3ZhZGRyKSB7DQo+ ID4gKyAgICAgICAgICAgICBkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBzaXplb2YoKnRw LT50YWxseV92YWRkciksDQo+IHRwLT50YWxseV92YWRkciwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT50YWxseV9wYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgdHAtPnRhbGx5X3ZhZGRyID0gTlVMTDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICtlcnJf b3V0XzE6DQo+ID4gKyAgICAgcnRhc2VfcmVsZWFzZV9ib2FyZChwZGV2LCBkZXYsIGlvYWRkcik7 DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuIHJjOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBydGFzZV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0K PiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0 YShwZGV2KTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJp dihkZXYpOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjOw0KPiA+ICsg ICAgIHUzMiBpID0gMHU7DQo+ID4gKw0KPiA+ICsgICAgIGFzc2VydChkZXYpOw0KPiA+ICsgICAg IGFzc2VydCh0cCk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmludF9u dW1zOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAtPmludF92ZWN0b3JbaV07 DQo+ID4gKyAgICAgICAgICAgICBuZXRpZl9uYXBpX2RlbCgmaXZlYy0+bmFwaSk7DQo+ID4gKyAg ICAgfQ0KPiA+ICsNCj4gPiArI2lmZGVmIENPTkZJR19TUklPVg0KPiA+ICsgICAgIGlmICh0cC0+ bnVtX3ZmcyAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHJ0YXNlX2Rpc2FibGVfc3Jp b3YodHApICE9IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2FsZXJ0KCJ1bmFibGUg dG8gZGlzYWJsZSBzcmlvdlxuIik7DQo+ID4gKyAgICAgfQ0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ ID4gKyAgICAgdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsNCj4gPiArICAgICBydGFzZV9yZXNldF9p bnRlcnJ1cHQocGRldiwgdHApOw0KPiA+ICsjaWZkZWYgRU5BQkxFX1JUQVNFX1BST0NGUw0KPiA+ ICsgICAgIHJ0YXNlX3Byb2NfcmVtb3ZlKGRldik7DQo+ID4gKyNlbmRpZg0KPiA+ICsgICAgIGlm ICh0cC0+dGFsbHlfdmFkZHIpIHsNCj4gPiArICAgICAgICAgICAgIGRtYV9mcmVlX2NvaGVyZW50 KCZwZGV2LT5kZXYsIHNpemVvZigqdHAtPnRhbGx5X3ZhZGRyKSwNCj4gdHAtPnRhbGx5X3ZhZGRy LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnRhbGx5X3BhZGRyKTsN Cj4gPiArICAgICAgICAgICAgIHRwLT50YWxseV92YWRkciA9IE5VTEw7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICBydGFzZV9yZWxlYXNlX2JvYXJkKHBkZXYsIGRldiwgdHAtPm1taW9f YWRkcik7DQo+ID4gKyAgICAgcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9zZXRfcnhidWZzaXplKHN0cnVjdCBydGFzZV9w cml2YXRlICp0cCwgY29uc3Qgc3RydWN0DQo+IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ ICsgICAgIHUzMiBtdHUgPSBkZXYtPm10dTsNCj4gPiArDQo+ID4gKyAgICAgdHAtPnJ4X2J1Zl9z eiA9IChtdHUgPiAodTMyKUVUSF9EQVRBX0xFTikgPyAobXR1ICsNCj4gKHUzMilFVEhfSExFTiAr IDh1ICsgMXUpIDogUlhfQlVGX1NJWkU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lk IHJ0YXNlX2ZyZWVfZGVzYyhzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wZGV2Ow0KPiA+ICsgICAgIHUzMiBpID0g MDsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCB0cC0+ZnVuY190eF9xdWV1ZV9u dW07IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHRwLT50eF9yaW5nW2ldLmRlc2MpIHsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwN Cj4gUlRBU0VfVFhfUklOR19ERVNDX1NJWkUsIHRwLT50eF9yaW5nW2ldLmRlc2MsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT50eF9yaW5nW2ldLnBoeV9h ZGRyKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X3JpbmdbaV0uZGVzYyA9IE5V TEw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBm b3IgKGkgPSAwdTsgaSA8IHRwLT5mdW5jX3J4X3F1ZXVlX251bTsgaSsrKSB7DQo+ID4gKyAgICAg ICAgICAgICBpZiAodHAtPnJ4X3JpbmdbaV0uZGVzYykgew0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LA0KPiBSVEFTRV9SWF9SSU5HX0RFU0Nf U0laRSwgdHAtPnJ4X3JpbmdbaV0uZGVzYywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdHAtPnJ4X3JpbmdbaV0ucGh5X2FkZHIpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICB0cC0+cnhfcmluZ1tpXS5kZXNjID0gTlVMTDsNCj4gPiArICAgICAgICAgICAg IH0NCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzMzIgcnRhc2VfYWxs b2NfZGVzYyhzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wZGV2Ow0KPiA+ICsgICAgIHUzMiBpID0gMDsNCj4gPiAr ICAgICBzMzIgcmV0dmFsID0gMDsNCj4gPiArDQo+ID4gKyAgICAgLyogYWxsb2NhdGUgdHggZGVz Y3JpcHRvciByaW5ncyAqLw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNfdHhf cXVldWVfbnVtOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIHRwLT50eF9yaW5nW2ldLmRlc2Mg PSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwNCj4gUlRBU0VfVFhfUklOR19ERVNDX1NJ WkUsDQo+ID4gKw0KPiAmdHAtPnR4X3JpbmdbaV0ucGh5X2FkZHIsIEdGUF9LRVJORUwpOw0KPiA+ ICsgICAgICAgICAgICAgaWYgKCF0cC0+dHhfcmluZ1tpXS5kZXNjKSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldHZhbCA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgaWYgKHJldHZhbCA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICAvKiBhbGxvY2F0ZSByeCBk ZXNjcmlwdG9yIHJpbmdzICovDQo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwdTsgaSA8IHRw LT5mdW5jX3J4X3F1ZXVlX251bTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHRw LT5yeF9yaW5nW2ldLmRlc2MgPQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRt YV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LA0KPiBSVEFTRV9SWF9SSU5HX0RFU0NfU0laRSwN Cj4gPiArDQo+ICZ0cC0+cnhfcmluZ1tpXS5waHlfYWRkciwgR0ZQX0tFUk5FTCk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGlmICghdHAtPnJ4X3JpbmdbaV0uZGVzYykgew0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIH0N Cj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVy biByZXR2YWw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2Vfb3BlbihzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZh dGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcGNpX2Rl diAqcGRldiA9IHRwLT5wZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yICpp dmVjID0gJnRwLT5pbnRfdmVjdG9yWzBdOw0KPiA+ICsgICAgIGludCByZXR2YWw7DQo+ID4gKyAg ICAgdTE2IGk7DQo+ID4gKw0KPiA+ICsjaWZkZWYgRU5BQkxFX1JUQVNFX1BST0NGUw0KPiA+ICsg ICAgIHJ0YXNlX3Byb2NfaW5pdChkZXYpOw0KPiA+ICsjZW5kaWYNCj4gPiArICAgICBydGFzZV9z ZXRfcnhidWZzaXplKHRwLCBkZXYpOw0KPiA+ICsNCj4gPiArICAgICByZXR2YWwgPSBydGFzZV9h bGxvY19kZXNjKHRwKTsNCj4gPiArICAgICBpZiAocmV0dmFsIDwgMCkNCj4gPiArICAgICAgICAg ICAgIGdvdG8gZXJyX2ZyZWVfYWxsX2FsbG9jYXRlZF9tZW07DQo+ID4gKw0KPiA+ICsgICAgIHJl dHZhbCA9IHJ0YXNlX2luaXRfcmluZyhkZXYpOw0KPiA+ICsgICAgIGlmIChyZXR2YWwgPCAwKQ0K PiA+ICsgICAgICAgICAgICAgZ290byBlcnJfZnJlZV9hbGxfYWxsb2NhdGVkX21lbTsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkgIT0gMHUpIHsNCj4gPiArICAgICAg ICAgICAgIG5ldGRldl9pbmZvKGRldiwgIiVzOiAweCVseCwNCj4gJTIuMng6JTIuMng6JTIuMng6 JTIuMng6JTIuMng6JTIuMngsIElSUSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgIGRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsDQo+IGRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ ZGV2X2FkZHJbMV0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPmRldl9hZGRy WzJdLCBkZXYtPmRldl9hZGRyWzNdLA0KPiBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRy WzVdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5pcnEpOw0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgSU5JVF9ERUxBWUVEX1dPUksoJnRwLT50YXNrLCBOVUxMKTsN Cj4gPiArDQo+ID4gKyAgICAgcnRhc2VfaHdfY29uZmlnKGRldik7DQo+ID4gKw0KPiA+ICsgICAg IGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfTVNJWF9FTkFCTEVEKSAhPSAwdSkgew0KPiA+ICsgICAg ICAgICAgICAgcmV0dmFsID0gcmVxdWVzdF9pcnEoaXZlYy0+aXJxLCBydGFzZV9pbnRlcnJ1cHQs IDAsDQo+IGRldi0+bmFtZSwgZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAvKiByZXF1 ZXN0IG90aGVyIGludGVycnVwdHMgdG8gaGFuZGxlIG11bHRpcXVldWUgKi8NCj4gPiArICAgICAg ICAgICAgIGZvciAoaSA9IDE7IGkgPCB0cC0+aW50X251bXM7IGkrKykgew0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpdmVjID0gJnRwLT5pbnRfdmVjdG9yW2ldOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChpdmVjLT5zdGF0dXMgPT0gMXUpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoKGNoYXIgKikmaXZlYy0+bmFtZSwN Cj4gIiVzX2ludCVpIiwgZGV2LT5uYW1lLCBpKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlcXVlc3RfaXJxKGl2ZWMtPmlycSwNCj4gcnRhc2Vf cV9pbnRlcnJ1cHQsIDAsDQo+ID4gKw0KPiAoY2hhciAqKSZpdmVjLT5uYW1lLCBpdmVjKTsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIH0NCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9IGVsc2UgaWYgKCh0cC0+c3df ZmxhZyAmIFNXRl9NU0lfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHJldHZh bCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcnRhc2VfaW50ZXJydXB0LCAwLA0KPiBkZXYtPm5h bWUsIGRldik7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHJldHZhbCA9 IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgcnRhc2VfaW50ZXJydXB0LCBTQV9TSElSUSwNCj4gZGV2 LT5uYW1lLCBkZXYpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKHJldHZhbCAh PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfZXJyKGRldiwgIiVzOiBjYW4ndCByZXF1 ZXN0IE1TSVggaW50ZXJydXB0LiBFcnJvcjoNCj4gJWQiLCBkZXYtPm5hbWUsIHJldHZhbCk7DQo+ ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9mcmVlX2FsbF9hbGxvY2F0ZWRfbWVtOw0KPiA+ICsg ICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogYWx3YXlzIGxpbmssIHNvIHN0YXJ0IHRvIHRyYW5z bWl0ICYgcmVjZWl2ZSAqLw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfU1JJT1Zf RU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2Z1bmNfZW5hYmxlKHRw KTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2VuYWJsZV9od19pbnRlcnJ1cHQodHApOw0KPiA+ ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19zdGFydChkZXYpOw0K PiA+ICsgICAgIH0NCj4gPiArICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7DQo+ID4gKyAgICAg bmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsgICAgIGlmIChuZXRpZl9tc2dfaWZ1cCh0cCkg IT0gMHUpDQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfaW5mbyhkZXYsIFBGWCAiJXM6IGxpbmsg dXBcbiIsIGRldi0+bmFtZSk7DQo+ID4gKw0KPiA+ICsgICAgIGdvdG8gb3V0Ow0KPiA+ICsNCj4g PiArZXJyX2ZyZWVfYWxsX2FsbG9jYXRlZF9tZW06DQo+ID4gKyAgICAgcnRhc2VfZnJlZV9kZXNj KHRwKTsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICByZXR1cm4gcmV0dmFsOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9zZXRfbWFyKGNvbnN0IHN0cnVjdCBydGFz ZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0g dHAtPm1taW9fYWRkcjsNCj4gPiArICAgICB1MzIgbWNfZmlsdGVyWzJdOw0KPiA+ICsNCj4gPiAr ICAgICBtY19maWx0ZXJbMF0gPSB0cC0+bWNfZmlsdGVyWzBdOw0KPiA+ICsgICAgIG1jX2ZpbHRl clsxXSA9IHRwLT5tY19maWx0ZXJbMV07DQo+ID4gKw0KPiA+ICsgICAgIGlmICgodHAtPnN3X2Zs YWcgJiBTV0ZfU1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIHU4IGkg PSAwdTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAwdTsgaSA8IHRwLT5udW1f dmZzOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbWNfZmlsdGVyWzBdIHw9IHRw LT52Zl9pbmZvW2ldLm1jX2ZpbHRlclswXTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbWNf ZmlsdGVyWzFdIHw9IHRwLT52Zl9pbmZvW2ldLm1jX2ZpbHRlclsxXTsNCj4gPiArICAgICAgICAg ICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMzIoTUFSMCwgbWNfZmls dGVyWzBdKTsNCj4gPiArICAgICBSVExfVzMyKE1BUjEsIG1jX2ZpbHRlclsxXSk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3ZvaWQgcnRhc2VfaHdfc2V0X3J4X3BhY2tldF9maWx0ZXIoc3RydWN0IG5l dF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0 cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0 cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHN0YXRpYyBjb25zdCBzMzIgbXVsdGljYXN0X2ZpbHRl cl9saW1pdCA9IDMyOw0KPiA+ICsgICAgIHUzMiBtY19maWx0ZXJbMl07IC8qIE11bHRpY2FzdCBo YXNoIGZpbHRlciAqLw0KPiA+ICsgICAgIHUxNiByeF9tb2RlID0gKHUxNikoUlRMX1IxNihSWF9D T05GSUdfMCkgJiB+QUNDRVBUX01BU0spOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKGRldi0+Zmxh Z3MgJiBJRkZfUFJPTUlTQykgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIC8qIFVuY29uZGl0 aW9uYWxseSBsb2cgbmV0IHRhcHMuICovDQo+ID4gKyAgICAgICAgICAgICBpZiAobmV0aWZfbXNn X2xpbmsodHApICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZXRkZXZfbm90aWNl KGRldiwgIiVzOiBQcm9taXNjdW91cyBtb2RlDQo+IGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOw0K PiA+ICsNCj4gPiArICAgICAgICAgICAgIHJ4X21vZGUgfD0NCj4gPiArICAgICAgICAgICAgICAg ICAgICAgKHUxNikoQUNDRVBUX0JST0FEQ0FTVCB8DQo+IEFDQ0VQVF9NVUxUSUNBU1QgfCBBQ0NF UFRfTVlQSFlTIHwgQUNDRVBUX0FMTFBIWVMpOw0KPiA+ICsgICAgICAgICAgICAgbWNfZmlsdGVy WzBdID0gMHhGRkZGRkZGRnU7DQo+ID4gKyAgICAgICAgICAgICBtY19maWx0ZXJbMV0gPSAweEZG RkZGRkZGdTsNCj4gPiArICAgICB9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11 bHRpY2FzdF9maWx0ZXJfbGltaXQpDQo+ID4gKyAgICAgICAgICAgICAgICB8fCAoKGRldi0+Zmxh Z3MgJiBJRkZfQUxMTVVMVEkpICE9IDB1KSkgew0KPiA+ICsgICAgICAgICAgICAgLyogVG9vIG1h bnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovDQo+ID4g KyAgICAgICAgICAgICByeF9tb2RlIHw9ICh1MTYpKEFDQ0VQVF9CUk9BRENBU1QgfA0KPiBBQ0NF UFRfTVVMVElDQVNUIHwgQUNDRVBUX01ZUEhZUyk7DQo+ID4gKyAgICAgICAgICAgICBtY19maWx0 ZXJbMF0gPSAweEZGRkZGRkZGdTsNCj4gPiArICAgICAgICAgICAgIG1jX2ZpbHRlclsxXSA9IDB4 RkZGRkZGRkZ1Ow0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHJ4X21v ZGUgfD0gKHUxNikoQUNDRVBUX0JST0FEQ0FTVCB8DQo+IEFDQ0VQVF9NWVBIWVMpOw0KPiA+ICsg ICAgICAgICAgICAgbWNfZmlsdGVyWzBdID0gMHU7DQo+ID4gKyAgICAgICAgICAgICBtY19maWx0 ZXJbMV0gPSAwdTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAvKiBjbGFuZy1mb3JtYXQgb2Zm ICovDQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihoYSwgZGV2KSB7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHUzMiBiaXRfbnIgPSAoZXRoZXJfY3JjKEVUSF9B TEVOLCBoYS0+YWRkcikgPj4NCj4gMjYpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAoKHUzMikxdSA8PCAoYml0X25yICYNCj4gMzF1 KSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ4X21vZGUgfD0gKHUxNilBQ0NFUFRfTVVM VElDQVNUOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgLyogY2xhbmct Zm9ybWF0IG9uICovDQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAoKGRldi0+ZmVh dHVyZXMgJiBORVRJRl9GX1JYQUxMKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgIHJ4X21vZGUg fD0gKHUxNikoQUNDRVBUX0VSUiB8IEFDQ0VQVF9SVU5UKTsNCj4gPiArDQo+ID4gKyAgICAgdHAt Pm1jX2ZpbHRlclswXSA9IHN3YWIzMihtY19maWx0ZXJbMV0pOw0KPiA+ICsgICAgIHRwLT5tY19m aWx0ZXJbMV0gPSBzd2FiMzIobWNfZmlsdGVyWzBdKTsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2Vf c2V0X21hcih0cCk7DQo+ID4gKyAgICAgUlRMX1cxNihSWF9DT05GSUdfMCwgcnhfbW9kZSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3NldF9yeF9tb2RlKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAq dHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ ID4gKw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ ICsNCj4gPiArICAgICBydGFzZV9od19zZXRfcnhfcGFja2V0X2ZpbHRlcihkZXYpOw0KPiA+ICsN Cj4gPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9od19jb25maWcoc3RydWN0IG5ldF9k ZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRl ICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIg PSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUzMiByZWdfZGF0YSA9IDA7DQo+ID4gKw0KPiA+ ICsgICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfU1JJT1ZfRU5BQkxFRCkgPT0gMHUpDQo+ID4g KyAgICAgICAgICAgICBydGFzZV9od19yZXNldChkZXYpOw0KPiA+ICsNCj4gPiArICAgICAvKiBT ZXQgUnggRE1BIGJ1cnN0ICovDQo+ID4gKyAgICAgcmVnX2RhdGEgPSBSVExfUjE2KFJYX0NPTkZJ R18wKTsNCj4gPiArICAgICByZWdfZGF0YSAmPSAodTMyKSh+KFJYX1NJTkdMRV9UQUcgfCBSWF9T SU5HTEVfRkVUQ0gpKTsNCj4gPiArICAgICByZWdfZGF0YSAmPSB+KCh1MzIpUlhfTVhfRE1BX01B U0sgPDwgUlhfTVhfRE1BX1NISUZUKTsNCj4gPiArICAgICByZWdfZGF0YSB8PSAoKHUzMilSWF9E TUFfQlVSU1RfMjU2IDw8IFJYX01YX0RNQV9TSElGVCk7DQo+ID4gKyAgICAgUlRMX1cxNihSWF9D T05GSUdfMCwgKHUxNilyZWdfZGF0YSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIE5ldyBSeCBEZXNj cml0cG9yICovDQo+ID4gKyAgICAgcmVnX2RhdGEgPSBSVExfUjE2KFJYX0NPTkZJR18xKTsNCj4g PiArICAgICByZWdfZGF0YSB8PSAodTMyKVJYX05FV19ERVNDX0ZPUk1BVF9FTjsNCj4gPiArICAg ICByZWdfZGF0YSB8PSAodTMyKVBDSUVfTkVXX0ZMT1c7DQo+ID4gKyAgICAgLyogUnggRmV0Y2gg RGVzYyBOdW1iZXIgKi8NCj4gPiArICAgICByZWdfZGF0YSAmPSB+KCh1MzIpUlhfTUFYX0ZFVENI X0RFU0NfTUFTSyA8PA0KPiBSWF9NQVhfRkVUQ0hfREVTQ19TSElGVCk7DQo+ID4gKyAgICAgcmVn X2RhdGEgfD0gKCh1MzIpMHhGIDw8IFJYX01BWF9GRVRDSF9ERVNDX1NISUZUKTsNCj4gPiArICAg ICBSVExfVzE2KFJYX0NPTkZJR18xLCAodTE2KXJlZ19kYXRhKTsNCj4gPiArDQo+ID4gKyAgICAg LyogUnggcXVldWUgbnVtYmVycyAqLw0KPiA+ICsgICAgIHJlZ19kYXRhID0gUlRMX1IxNihGQ1Ip Ow0KPiA+ICsgICAgIHJlZ19kYXRhICY9IH4oRkNSX1JYUV9NQVNLIDw8IEZDUl9SWFFfU0hJRlQp Ow0KPiA+ICsgICAgIHN3aXRjaCAodHAtPmZ1bmNfcnhfcXVldWVfbnVtKSB7DQo+ID4gKyAgICAg Y2FzZSAxOg0KPiA+ICsgICAgICAgICAgICAgcmVnX2RhdGEgfD0gKDB4MXUgPDwgRkNSX1JYUV9T SElGVCk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIDI6DQo+ID4g KyAgICAgICAgICAgICByZWdfZGF0YSB8PSAoMHgydSA8PCBGQ1JfUlhRX1NISUZUKTsNCj4gPiAr ICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgNDoNCj4gPiArICAgICAgICAgICAg IHJlZ19kYXRhIHw9ICgweDN1IDw8IEZDUl9SWFFfU0hJRlQpOw0KPiA+ICsgICAgICAgICAgICAg YnJlYWs7DQo+ID4gKyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIC8qIG5vdGhpbmcg dG8gZG8uICovDQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICB9DQo+ID4gKyAg ICAgUlRMX1cxNihGQ1IsICh1MTYpcmVnX2RhdGEpOw0KPiA+ICsNCj4gPiArICAgICAvKiBpbnRl cnJ1cHQgbWl0aWdhdGlvbiAqLw0KPiA+ICsgICAgIHJ0YXNlX2ludGVycnVwdF9taXRpZ2F0aW9u KHRwKTsNCj4gPiArDQo+ID4gKyAgICAgLyogU2V0IFR4IERNQSBidXJzdCBzaXplIGFuZCBJbnRl cmZyYW1lIEdhcCBUaW1lICovDQo+ID4gKyAgICAgcmVnX2RhdGEgPSBSVExfUjMyKFRYX0NPTkZJ R18wKTsNCj4gPiArICAgICByZWdfZGF0YSAmPSB+KCgodTMyKVRYX0RNQV9NQVNLIDw8IFRYX0RN QV9TSElGVCkNCj4gPiArICAgICAgICAgICAgICAgICAgIHwgKCh1MzIpVFhfSU5URVJfRlJBTUVf R0FQX01BU0sgPDwNCj4gVFhfSU5URVJfRlJBTUVfR0FQX1NISUZUKSk7DQo+ID4gKyAgICAgcmVn X2RhdGEgfD0gKCgodTMyKVRYX0RNQV9CVVJTVF9VTkxJTUlURUQgPDwgVFhfRE1BX1NISUZUKQ0K PiA+ICsgICAgICAgICAgICAgICAgICB8ICgodTMyKUlOVEVSRlJBTUVHQVAgPDwNCj4gVFhfSU5U RVJfRlJBTUVfR0FQX1NISUZUKSk7DQo+ID4gKyAgICAgUlRMX1czMihUWF9DT05GSUdfMCwgcmVn X2RhdGEpOw0KPiA+ICsNCj4gPiArICAgICAvKiBOZXcgVHggRGVzY3JpcHRvciAqLw0KPiA+ICsg ICAgIFJUTF9XMTYoVEZVTl9DVFJMLCAodTE2KShSVExfUjE2KFRGVU5fQ1RSTCkgfA0KPiBUWF9O RVdfREVTQ19GT1JNQVRfRU4pKTsNCj4gPiArDQo+ID4gKyAgICAgLyogVHggRmV0Y2ggRGVzYyBO dW1iZXIgKi8NCj4gPiArICAgICBSVExfVzgoVERGTlIsIDB4MTApOw0KPiA+ICsNCj4gPiArICAg ICAvKiB0YWcgbnVtIHNlbGVjdCAqLw0KPiA+ICsgICAgIHJlZ19kYXRhID0gUlRMX1IxNihNVFBT KTsNCj4gPiArICAgICByZWdfZGF0YSAmPSB+KCh1MzIpMHg3dSA8PCA4KTsNCj4gPiArICAgICBy ZWdfZGF0YSB8PSAoKHUzMikweDR1IDw8IDgpOw0KPiA+ICsgICAgIFJUTF9XMTYoTVRQUywgKHUx NilyZWdfZGF0YSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFR4IHF1ZXVlIG51bWJlcnMgKi8NCj4g PiArICAgICByZWdfZGF0YSA9IFJUTF9SMTYoVFhfQ09ORklHXzEpOw0KPiA+ICsgICAgIHJlZ19k YXRhICY9IH4oKHUzMikweDN1IDw8IDEwKTsNCj4gPiArICAgICBzd2l0Y2ggKHRwLT50eF9xdWV1 ZV9jdHJsKSB7DQo+ID4gKyAgICAgY2FzZSAxOg0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ ID4gKyAgICAgY2FzZSAyOg0KPiA+ICsgICAgICAgICAgICAgcmVnX2RhdGEgfD0gKCh1MzIpMHgx dSA8PCAxMCk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIDM6DQo+ ID4gKyAgICAgY2FzZSA0Og0KPiA+ICsgICAgICAgICAgICAgcmVnX2RhdGEgfD0gKCh1MzIpMHgy dSA8PCAxMCk7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBkZWZhdWx0Og0K PiA+ICsgICAgICAgICAgICAgcmVnX2RhdGEgfD0gKCh1MzIpMHgzdSA8PCAxMCk7DQo+ID4gKyAg ICAgICAgICAgICBicmVhazsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgUlRMX1cxNihUWF9DT05G SUdfMSwgKHUxNilyZWdfZGF0YSk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFRPSyBjb25kaXRpb24g Ki8NCj4gPiArICAgICBSVExfVzE2KFRPS1NFTCwgMHg1NTU1KTsNCj4gPiArDQo+ID4gKyAgICAg cnRhc2VfdGFsbHlfY291bnRlcl9hZGRyX2ZpbGwodHApOw0KPiA+ICsgICAgIHJ0YXNlX2Rlc2Nf YWRkcl9maWxsKHRwKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJ0YXNlX2h3X3NldF9mZWF0dXJl cyhkZXYsIGRldi0+ZmVhdHVyZXMpICE9IDApDQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfYWxl cnQoZGV2LCAidW5hYmxlIHRvIHNldCBodyBmZWF0dXJlc1xuIik7DQo+ID4gKw0KPiA+ICsgICAg IC8qIFRCRDogZW5hYmxlIGZsb3cgY29udHJvbCAqLw0KPiA+ICsgICAgIHJlZ19kYXRhID0gUlRM X1IxNihDUExVU19DTUQpOw0KPiA+ICsgICAgIHJlZ19kYXRhIHw9ICh1MzIpKEZPUkNFX1RYRkxP V19FTiB8IEZPUkNFX1JYRkxPV19FTik7DQo+ID4gKyAgICAgUlRMX1cxNihDUExVU19DTUQsICh1 MTYpcmVnX2RhdGEpOw0KPiA+ICsgICAgIC8qIFNldCBOZWFyIEZJRk8gVGhyZXNob2xkIC0gcngg bWlzc2VkIGlzc3VlLiAqLw0KPiA+ICsgICAgIFJUTF9XMTYoUkZJRk9ORlVMTCwgMHgxOTApOw0K PiA+ICsNCj4gPiArICAgICBSVExfVzE2KFJNUywgKHUxNil0cC0+cnhfYnVmX3N6KTsNCj4gPiAr DQo+ID4gKyAgICAgLyogU2V0IFJ4IHBhY2tldCBmaWx0ZXIgKi8NCj4gPiArICAgICBydGFzZV9o d19zZXRfcnhfcGFja2V0X2ZpbHRlcihkZXYpOw0KPiA+ICsNCj4gPiArICAgICAvKiBlbmFibGUg ZXBoeSBpbnRlcnJ1cHQgKi8NCj4gPiArICAgICBtYWNfb2NwX3dyaXRlKHRwLCAweEVBRDAsIDB4 RkYwNyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcnRhc2VfaHdfc3RhcnQoY29uc3Qgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFz ZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVt ICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsNCj4gPiArICAgICAvKiBzZXQgd2F0Y2hk b2cgdGltZSAqLw0KPiA+ICsgICAgIFJUTF9XMzIoVElNRU9VVDBfQUREUiwgVElNRU9VVF9TRVRf VElNRSk7DQo+ID4gKyAgICAgLyogcmVzZXQgdGltZXIgKi8NCj4gPiArICAgICBSVExfVzMyKFRD VFIwLCAweDApOw0KPiA+ICsNCj4gPiArICAgICBydGFzZV9uaWNfZW5hYmxlKGRldik7DQo+ID4g KyAgICAgcnRhc2VfZW5hYmxlX2h3X2ludGVycnVwdCh0cCk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgcnRhc2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQg bmV3X210dSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5l dGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKyAgICAgdW5zaWdu ZWQgbG9uZyBmbGFnczsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCh0cC0+c3dfZmxhZyAmIFNXRl9T UklPVl9FTkFCTEVEKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVQRVJNOw0K PiA+ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKyAgICAgZGV2 LT5tdHUgPSAodTMyKW5ld19tdHU7DQo+ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFuZXRpZl9ydW5uaW5nKGRl dikpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2Vf ZG93bihkZXYpOw0KPiA+ICsNCj4gPiArICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ss IGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2Vfc2V0X3J4YnVmc2l6ZSh0cCwgZGV2KTsN Cj4gPiArDQo+ID4gKyAgICAgcmV0ID0gcnRhc2VfaW5pdF9yaW5nKGRldik7DQo+ID4gKw0KPiA+ ICsgICAgIGlmIChyZXQgPCAwKSB7DQo+ID4gKyAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0 Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOw0K PiA+ICsgICAgIG5ldGlmX2NhcnJpZXJfb2ZmKGRldik7DQo+ID4gKyAgICAgcnRhc2VfaHdfY29u ZmlnKGRldik7DQo+ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZs YWdzKTsNCj4gPiArDQo+ID4gKyAgICAgLyogYWx3YXlzIGxpbmssIHNvIHN0YXJ0IHRvIHRyYW5z bWl0ICYgcmVjZWl2ZSAqLw0KPiA+ICsgICAgIHJ0YXNlX2h3X3N0YXJ0KGRldik7DQo+ID4gKyAg ICAgbmV0aWZfY2Fycmllcl9vbihkZXYpOw0KPiA+ICsgICAgIG5ldGlmX3dha2VfcXVldWUoZGV2 KTsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICBuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRl dik7DQo+ID4gKw0KPiA+ICtlcnJfb3V0Og0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBydGFzZV9tYWtlX3VudXNhYmxlX2J5X2Fz aWMocnhfZGVzYyAqZGVzYykNCj4gPiArew0KPiA+ICsgICAgIGRlc2MtPmRlc2NfY21kLmFkZHIg PSAweDBCQURCQURCQURCQURCQUR1TEw7DQo+ID4gKyAgICAgZGVzYy0+ZGVzY19jbWQub3B0czEg Jj0gfmNwdV90b19sZTMyKERFU0NfT1dOIHwgUlNWRF9NQVNLKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGlubGluZSB2b2lkIHJ0YXNlX21hcmtfdG9fYXNpYyhyeF9kZXNjICpkZXNjLCB1 MzIgcnhfYnVmX3N6KQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIGVvciA9ICh1MzIpKGxlMzJfdG9f Y3B1KGRlc2MtPmRlc2NfY21kLm9wdHMxKSAmIFJJTkdfRU5EKTsNCj4gPiArDQo+ID4gKyAgICAg ZGVzYy0+ZGVzY19jbWQub3B0czEgPSBjcHVfdG9fbGUzMihERVNDX09XTiB8IGVvciB8IHJ4X2J1 Zl9zeik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBydGFzZV9tYXBf dG9fYXNpYyhyeF9kZXNjICpkZXNjLCBkbWFfYWRkcl90IG1hcHBpbmcsDQo+IHUzMiByeF9idWZf c3opDQo+ID4gK3sNCj4gPiArICAgICBkZXNjLT5kZXNjX2NtZC5hZGRyID0gY3B1X3RvX2xlNjQo bWFwcGluZyk7DQo+ID4gKyAgICAgLyogbWFrZSBzdXJlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGhh cyBiZWVuIHVwZGF0ZWQgKi8NCj4gPiArICAgICB3bWIoKTsNCj4gPiArICAgICBydGFzZV9tYXJr X3RvX2FzaWMoZGVzYywgcnhfYnVmX3N6KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMz MiBydGFzZV9hbGxvY19yeF9za2IoY29uc3Qgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0cnVj dCBza19idWZmDQo+ICoqcF9za19idWZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICByeF9kZXNjICpkZXNjLCBkbWFfYWRkcl90ICpyeF9waHlfYWRkciwNCj4gdTMyIHJ4X2J1Zl9z eiwgdTggaW5faW50cikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9y ICppdmVjID0gcmluZy0+aXZlYzsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAgPSBpdmVjLT50cDsNCj4gPiArICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsN Cj4gPiArICAgICBkbWFfYWRkcl90IG1hcHBpbmc7DQo+ID4gKyAgICAgczMyIHJldCA9IDA7DQo+ ID4gKw0KPiA+ICsgICAgIGlmIChpbl9pbnRyICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgc2ti ID0gUlRMX0FMTE9DX1NLQl9JTlRSKGl2ZWMtPm5hcGksIChyeF9idWZfc3ogKw0KPiBSVEtfUlhf QUxJR04pKTsNCj4gPiArICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICBza2IgPSBkZXZfYWxs b2Nfc2tiKChyeF9idWZfc3ogKyBSVEtfUlhfQUxJR04pKTsNCj4gPiArDQo+ID4gKyAgICAgaWYg KHVubGlrZWx5KCFza2IpKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfb3V0Ow0KPiA+ICsN Cj4gPiArICAgICBza2JfcmVzZXJ2ZShza2IsIChzMzIpUlRLX1JYX0FMSUdOKTsNCj4gPiArDQo+ ID4gKyAgICAgbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKCZ0cC0+cGRldi0+ZGV2LCBza2ItPmRh dGEsIHJ4X2J1Zl9zeiwNCj4gRE1BX0ZST01fREVWSUNFKTsNCj4gPiArICAgICBpZiAodW5saWtl bHkoZG1hX21hcHBpbmdfZXJyb3IoJnRwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSkgew0KPiA+ICsg ICAgICAgICAgICAgaWYgKHVubGlrZWx5KG5ldF9yYXRlbGltaXQoKSkpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIG5ldGlmX2Vycih0cCwgZHJ2LCB0cC0+ZGV2LCAiRmFpbGVkIHRvIG1hcCBS WA0KPiBETUEhXG4iKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7DQo+ ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAqcF9za19idWZmID0gc2tiOw0KPiA+ICsgICAg ICpyeF9waHlfYWRkciA9IG1hcHBpbmc7DQo+ID4gKyAgICAgcnRhc2VfbWFwX3RvX2FzaWMoZGVz YywgbWFwcGluZywgcnhfYnVmX3N6KTsNCj4gPiArICAgICBnb3RvIG91dDsNCj4gPiArDQo+ID4g K2Vycl9vdXQ6DQo+ID4gKyAgICAgaWYgKHNrYikNCj4gPiArICAgICAgICAgICAgIGRldl9rZnJl ZV9za2Ioc2tiKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gLUVOT01FTTsNCj4gPiArICAgICBy dGFzZV9tYWtlX3VudXNhYmxlX2J5X2FzaWMoZGVzYyk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4g KyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vf cnhfcmluZ19jbGVhcihzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZykNCj4gPiArew0KPiA+ICsgICAg IHUzMiBpOw0KPiA+ICsgICAgIHJ4X2Rlc2MgKmRlc2M7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0 IHJ0YXNlX3ByaXZhdGUgKnRwID0gcmluZy0+aXZlYy0+dHA7DQo+ID4gKw0KPiA+ICsgICAgIGZv ciAoaSA9IDB1OyBpIDwgTlVNX0RFU0M7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgZGVzYyA9 IHJpbmctPmRlc2MgKyAoc2l6ZW9mKHJ4X2Rlc2MpICogaSk7DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgaWYgKHJpbmctPnNrYnVmZltpXSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBk bWFfdW5tYXBfc2luZ2xlKCZ0cC0+cGRldi0+ZGV2LA0KPiByaW5nLT5taXMuZGF0YV9waHlfYWRk cltpXSwgdHAtPnJ4X2J1Zl9zeiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBETUFfRlJPTV9ERVZJQ0UpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgZGV2X2tmcmVlX3NrYihyaW5nLT5za2J1ZmZbaV0pOw0KPiA+ICsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgcmluZy0+c2tidWZmW2ldID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJ0YXNlX21ha2VfdW51c2FibGVfYnlfYXNpYyhkZXNjKTsNCj4gPiArICAg ICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcnRhc2Vf cnhfY2xlYXIoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMy IGk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNfcnhfcXVldWVf bnVtOyBpKyspDQo+ID4gKyAgICAgICAgICAgICBydGFzZV9yeF9yaW5nX2NsZWFyKCZ0cC0+cnhf cmluZ1tpXSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgcnRhc2VfcnhfcmluZ19m aWxsKHN0cnVjdCBydGFzZV9yaW5nICpyaW5nLCB1MzIgcmluZ19zdGFydCwgdTMyDQo+IHJpbmdf ZW5kLCB1OCBpbl9pbnRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gcmluZy0+aXZlYy0+dHA7DQo+ID4gKyAgICAgdTMyIGN1cjsNCj4gPiArDQo+ ID4gKyAgICAgZm9yIChjdXIgPSByaW5nX3N0YXJ0OyAocmluZ19lbmQgLSBjdXIpID4gMHU7IGN1 cisrKSB7DQo+ID4gKyAgICAgICAgICAgICBzMzIgcmV0ID0gMDsNCj4gPiArICAgICAgICAgICAg IHUzMiBpID0gY3VyICUgTlVNX0RFU0M7DQo+ID4gKyAgICAgICAgICAgICByeF9kZXNjICpkZXNj ID0gcmluZy0+ZGVzYyArIChzaXplb2YocnhfZGVzYykgKiBpKTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICBpZiAocmluZy0+c2tidWZmW2ldKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICByZXQgPSBydGFzZV9hbGxvY19yeF9z a2IocmluZywgJnJpbmctPnNrYnVmZltpXSwgZGVzYywNCj4gJnJpbmctPm1pcy5kYXRhX3BoeV9h ZGRyW2ldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5y eF9idWZfc3osIGluX2ludHIpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJldCA8IDApDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIChjdXIgLSByaW5nX3N0YXJ0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSB2b2lkIHJ0YXNlX21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHJ4X2Rlc2MgKmRlc2Mp DQo+ID4gK3sNCj4gPiArICAgICBkZXNjLT5kZXNjX2NtZC5vcHRzMSB8PSBjcHVfdG9fbGUzMihS SU5HX0VORCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2Rlc2NfYWRk cl9maWxsKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCkNCj4gPiArew0KPiA+ICsgICAg IHUxNiBpID0gMDsNCj4gPiArICAgICB1MTYgY21kID0gMDsNCj4gPiArICAgICBjb25zdCBzdHJ1 Y3QgcnRhc2VfcmluZyAqcmluZzsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRw LT5tbWlvX2FkZHI7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNf dHhfcXVldWVfbnVtOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIHJpbmcgPSAmdHAtPnR4X3Jp bmdbaV07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgUlRMX1czMihUWF9ERVNDX1NUQVJUX0FE RFIwLCAodTMyKShyaW5nLT5waHlfYWRkciAmDQo+IERNQV9CSVRfTUFTSygzMikpKTsNCj4gPiAr ICAgICAgICAgICAgIFJUTF9XMzIoVFhfREVTQ19TVEFSVF9BRERSNCwgKHUzMikocmluZy0+cGh5 X2FkZHINCj4gPj4gMzIpKTsNCj4gPiArICAgICAgICAgICAgIGNtZCA9IGkgfCAodTE2KVRYX0RF U0NfQ01EX1dFIHwNCj4gKHUxNilUWF9ERVNDX0NNRF9DUzsNCj4gPiArICAgICAgICAgICAgIFJU TF9XMTYoVFhfREVTQ19DT01NQU5ELCBjbWQpOw0KPiA+ICsgICAgICAgICAgICAgdXNsZWVwX3Jh bmdlKDEwMCwgMTEwKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9IDB1 OyBpIDwgdHAtPmZ1bmNfcnhfcXVldWVfbnVtOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIHJp bmcgPSAmdHAtPnJ4X3JpbmdbaV07DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKGkgPT0g MHUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgUlRMX1czMihRMF9SWF9ERVNDX0FERFIw LA0KPiAodTMyKSgocmluZy0+cGh5X2FkZHIgJiBETUFfQklUX01BU0soMzIpKSkpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBSVExfVzMyKFEwX1JYX0RFU0NfQUREUjQsDQo+ICh1MzIpKHJp bmctPnBoeV9hZGRyID4+IDMyKSk7DQo+ID4gKyAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBSVExfVzMyKChRMV9SWF9ERVNDX0FERFIwICsgKChpIC0gMXUp ICogOHUpKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTMyKShyaW5nLT5w aHlfYWRkciAmDQo+IERNQV9CSVRfTUFTSygzMikpKTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgUlRMX1czMigoUTFfUlhfREVTQ19BRERSNCArICgoaSAtIDF1KSAqIDh1KSksDQo+ICh1MzIp KHJpbmctPnBoeV9hZGRyID4+IDMyKSk7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAg fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV90eF9kZXNjX2luaXQoc3Ry dWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCB1MTYgaWR4KQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIGkg PSAwOw0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9yaW5nICpyaW5nID0gJnRwLT50eF9yaW5nW2lk eF07DQo+ID4gKyAgICAgdHhfZGVzYyAqZGVzYzsNCj4gPiArDQo+ID4gKyAgICAgbWVtc2V0KHJp bmctPmRlc2MsIDB4MCwgUlRBU0VfVFhfUklOR19ERVNDX1NJWkUpOw0KPiA+ICsgICAgIG1lbXNl dChyaW5nLT5za2J1ZmYsIDB4MCwgKE5VTV9ERVNDICogc2l6ZW9mKHN0cnVjdCBza19idWZmICop KSk7DQo+ID4gKyAgICAgcmluZy0+Y3VyX2lkeCA9IDA7DQo+ID4gKyAgICAgcmluZy0+ZGlydHlf aWR4ID0gMDsNCj4gPiArICAgICByaW5nLT5wcml2X2RpcnR5X2lkeCA9IDA7DQo+ID4gKyAgICAg cmluZy0+ZHVwbGljYXRlX2RpcnR5X2NvdW50ID0gMDsNCj4gPiArICAgICByaW5nLT5pbmRleCA9 IGlkeDsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCBOVU1fREVTQzsgaSsrKSB7 DQo+ID4gKyAgICAgICAgICAgICByaW5nLT5taXMubGVuW2ldID0gMDsNCj4gPiArICAgICAgICAg ICAgIGlmICgoTlVNX0RFU0MgLSAxdSkgPT0gaSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBkZXNjID0gcmluZy0+ZGVzYyArIChzaXplb2YodHhfZGVzYykgKiBpKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgZGVzYy0+b3B0czEgPSBjcHVfdG9fbGUzMihSSU5HX0VORCk7DQo+ID4g KyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByaW5nLT5yaW5n X2hhbmRsZXIgPSB0eF9oYW5kbGVyOw0KPiA+ICsgICAgIGlmIChpZHggPCA0dSkgew0KPiA+ICsg ICAgICAgICAgICAgcmluZy0+aXZlYyA9ICZ0cC0+aW50X3ZlY3RvcltpZHhdOw0KPiA+ICsgICAg ICAgICAgICAgbGlzdF9hZGRfdGFpbCgmcmluZy0+cmluZ19lbnRyeSwNCj4gJnRwLT5pbnRfdmVj dG9yW2lkeF0ucmluZ19saXN0KTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAg ICAgcmluZy0+aXZlYyA9ICZ0cC0+aW50X3ZlY3RvclswXTsNCj4gPiArICAgICAgICAgICAgIGxp c3RfYWRkX3RhaWwoJnJpbmctPnJpbmdfZW50cnksDQo+ICZ0cC0+aW50X3ZlY3RvclswXS5yaW5n X2xpc3QpOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRh c2VfcnhfZGVzY19pbml0KHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTE2IGlkeCkNCj4gPiAr ew0KPiA+ICsgICAgIHUxNiBpID0gMDsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcmluZyAqcmlu ZyA9ICZ0cC0+cnhfcmluZ1tpZHhdOw0KPiA+ICsNCj4gPiArICAgICBtZW1zZXQocmluZy0+ZGVz YywgMHgwLCBSVEFTRV9SWF9SSU5HX0RFU0NfU0laRSk7DQo+ID4gKyAgICAgbWVtc2V0KHJpbmct PnNrYnVmZiwgMHgwLCAoTlVNX0RFU0MgKiBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikpKTsNCj4g PiArICAgICByaW5nLT5jdXJfaWR4ID0gMDsNCj4gPiArICAgICByaW5nLT5kaXJ0eV9pZHggPSAw Ow0KPiA+ICsgICAgIHJpbmctPmluZGV4ID0gaWR4Ow0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkg PSAwdTsgaSA8IE5VTV9ERVNDOyBpKyspDQo+ID4gKyAgICAgICAgICAgICByaW5nLT5taXMuZGF0 YV9waHlfYWRkcltpXSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHJpbmctPnJpbmdfaGFuZGxlciA9 IHJ4X2hhbmRsZXI7DQo+ID4gKyAgICAgcmluZy0+aXZlYyA9ICZ0cC0+aW50X3ZlY3RvcltpZHhd Ow0KPiA+ICsgICAgIGxpc3RfYWRkX3RhaWwoJnJpbmctPnJpbmdfZW50cnksICZ0cC0+aW50X3Zl Y3RvcltpZHhdLnJpbmdfbGlzdCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3MzMiBydGFzZV9pbml0 X3JpbmcoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdTE2 IGkgPSAwOw0KPiA+ICsgICAgIHMzMiByYyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoaSA9 IDB1OyBpIDwgdHAtPmZ1bmNfdHhfcXVldWVfbnVtOyBpKyspDQo+ID4gKyAgICAgICAgICAgICBy dGFzZV90eF9kZXNjX2luaXQodHAsIGkpOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwdTsg aSA8IHRwLT5mdW5jX3J4X3F1ZXVlX251bTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBydGFz ZV9yeF9kZXNjX2luaXQodHAsIGkpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJ0YXNlX3J4X3Jp bmdfZmlsbCgmdHAtPnJ4X3JpbmdbaV0sIDAsIE5VTV9ERVNDLCAwKSAhPQ0KPiBOVU1fREVTQykN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfb3V0Ow0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgIHJ0YXNlX21hcmtfYXNfbGFzdF9kZXNjcmlwdG9yKHRwLT5yeF9yaW5nW2ldLmRl c2MNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHNp emVvZihyeF9kZXNjKSAqDQo+IChOVU1fREVTQyAtIDF1KSkpOw0KPiA+ICsgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICtlcnJfb3V0Og0KPiA+ICsgICAgIHJ0 YXNlX3J4X2NsZWFyKHRwKTsNCj4gPiArICAgICByYyA9IC1FTk9NRU07DQo+ID4gK291dDoNCj4g PiArICAgICByZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgUlRLX09QVFMx X0RFQlVHX1ZBTFVFIDB4MEJBREJFRUYNCj4gPiArI2RlZmluZSBSVEtfTUFHSUNfTlVNQkVSICAg ICAgMHgwQkFEQkFEQkFEQkFEQkFEdUxMDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3VubWFwX3R4 X3NrYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIGxlbiwgdHhfZGVzYw0KPiAqZGVzYykNCj4g PiArew0KPiA+ICsgICAgIGRtYV91bm1hcF9zaW5nbGUoJnBkZXYtPmRldiwgbGU2NF90b19jcHUo ZGVzYy0+YWRkciksIGxlbiwNCj4gRE1BX1RPX0RFVklDRSk7DQo+ID4gKyAgICAgZGVzYy0+b3B0 czEgPSBjcHVfdG9fbGUzMihSVEtfT1BUUzFfREVCVUdfVkFMVUUpOw0KPiA+ICsgICAgIGRlc2Mt Pm9wdHMyID0gMHgwMDsNCj4gPiArICAgICBkZXNjLT5hZGRyID0gUlRLX01BR0lDX05VTUJFUjsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfdHhfY2xlYXJfcmFuZ2Uoc3Ry dWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHUzMiBzdGFydCwgdTMyIG4pDQo+ID4gK3sNCj4gPiArICAg ICB1MzIgaTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSByaW5n LT5pdmVjLT50cDsNCj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtPmRldjsN Cj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCBuOyBpKyspIHsNCj4gPiArICAgICAg ICAgICAgIHUzMiBlbnRyeSA9IChzdGFydCArIGkpICUgTlVNX0RFU0M7DQo+ID4gKyAgICAgICAg ICAgICB1MzIgbGVuID0gcmluZy0+bWlzLmxlbltlbnRyeV07DQo+ID4gKw0KPiA+ICsgICAgICAg ICAgICAgaWYgKGxlbiAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c2tfYnVmZiAqc2tiID0gcmluZy0+c2tidWZmW2VudHJ5XTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJ0YXNlX3VubWFwX3R4X3NrYih0cC0+cGRldiwgbGVuLCByaW5nLT5kZXNj ICsNCj4gKHNpemVvZih0eF9kZXNjKSAqIGVudHJ5KSk7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIHJpbmctPm1pcy5sZW5bZW50cnldID0gMDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg aWYgKHNrYikgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+c3RhdHMu dHhfZHJvcHBlZCsrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9rZnJl ZV9za2JfYW55KHNrYik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+ c2tidWZmW2VudHJ5XSA9IE5VTEw7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQgcnRh c2VfdHhfY2xlYXIoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAg dTE2IGk7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmc7DQo+ID4gKw0KPiA+ICsg ICAgIGZvciAoaSA9IDB1OyBpIDwgdHAtPmZ1bmNfdHhfcXVldWVfbnVtOyBpKyspIHsNCj4gPiAr ICAgICAgICAgICAgIHJpbmcgPSAmdHAtPnR4X3JpbmdbaV07DQo+ID4gKyAgICAgICAgICAgICBy dGFzZV90eF9jbGVhcl9yYW5nZShyaW5nLCByaW5nLT5kaXJ0eV9pZHgsIE5VTV9ERVNDKTsNCj4g PiArICAgICAgICAgICAgIHJpbmctPmN1cl9pZHggPSAwOw0KPiA+ICsgICAgICAgICAgICAgcmlu Zy0+ZGlydHlfaWR4ID0gMDsNCj4gPiArICAgICAgICAgICAgIHJpbmctPnByaXZfZGlydHlfaWR4 ID0gMDsNCj4gPiArICAgICAgICAgICAgIHJpbmctPmR1cGxpY2F0ZV9kaXJ0eV9jb3VudCA9IDA7 DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV93YWl0 X2Zvcl9xdWllc2NlbmNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjOw0KPiA+ICsgICAgIHUzMiBpOw0K PiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgdHAtPmludF9udW1zOyBpKyspIHsNCj4g PiArICAgICAgICAgICAgIGl2ZWMgPSAmdHAtPmludF92ZWN0b3JbaV07DQo+ID4gKyAgICAgICAg ICAgICBzeW5jaHJvbml6ZV9pcnEoaXZlYy0+aXJxKTsNCj4gPiArICAgICAgICAgICAgIC8qIFdh aXQgZm9yIGFueSBwZW5kaW5nIE5BUEkgdGFzayB0byBjb21wbGV0ZSAqLw0KPiA+ICsgICAgICAg ICAgICAgbmFwaV9kaXNhYmxlKCZpdmVjLT5uYXBpKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIHJ0YXNlX2lycV9tYXNrX2FuZF9hY2sodHApOw0KPiA+ICsNCj4gPiArICAgICBmb3Ig KGkgPSAwOyBpIDwgdHAtPmludF9udW1zOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIGl2ZWMg PSAmdHAtPmludF92ZWN0b3JbaV07DQo+ID4gKyAgICAgICAgICAgICBuYXBpX2VuYWJsZSgmaXZl Yy0+bmFwaSk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBk dW1wX3R4X2Rlc2MoY29uc3Qgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcpDQo+ID4gK3sNCj4gPiAr ICAgICBjb25zdCB0eF9kZXNjICpkZXNjOw0KPiA+ICsgICAgIHUxNiBpID0gMHU7DQo+ID4gKw0K PiA+ICsgICAgIHByX2luZm8oIiVzOiVkIiwgX19mdW5jX18sIF9fTElORV9fKTsNCj4gPiArICAg ICBmb3IgKGkgPSAwdTsgaSA8IE5VTV9UWF9ERVNDOyBpKyspIHsNCj4gPiArICAgICAgICAgICAg IGRlc2MgPSByaW5nLT5kZXNjICsgKHNpemVvZih0eF9kZXNjKSAqIGkpOw0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgIHByX2luZm8oIm9wdHMxID0gMHgleCIsIGRlc2MtPm9wdHMxKTsNCj4gPiAr ICAgICAgICAgICAgIHByX2luZm8oIm9wdHMyID0gMHgleCIsIGRlc2MtPm9wdHMyKTsNCj4gPiAr ICAgICAgICAgICAgIHByX2luZm8oImFkZHIgID0gMHglbGx4IiwgZGVzYy0+YWRkcik7DQo+ID4g KyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgczMyIHJ0YXNlX2RlYnVnX21zZyhj b25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZhdGUgKnRw KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmc7DQo+ID4g KyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHMz MiBuID0gMDsNCj4gPiArICAgICBzMzIgbWF4X3JlZ19zaXplID0gUlRBU0VfUENJX1JFR1NfU0la RTsNCj4gPiArICAgICB1MzIgZHdvcmRfcmQ7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNl X2NvdW50ZXJzICpjb3VudGVyczsNCj4gPiArICAgICBkbWFfYWRkcl90IHBhZGRyOw0KPiA+ICsg ICAgIHUzMiBjbWQ7DQo+ID4gKyAgICAgdTMyIHdhaXRfY250Ow0KPiA+ICsNCj4gPiArICAgICBw cl9pbmZvKCJEcml2ZXIgSW5mbzoiKTsNCj4gPiArICAgICBwcl9pbmZvKCJpbnQgdmVjdG9yIGly cSA9ICVpIiwgdHAtPmludF92ZWN0b3JbMF0uaXJxKTsNCj4gPiArDQo+ID4gKyAgICAgcmluZyA9 ICZ0cC0+dHhfcmluZ1swXTsNCj4gPiArICAgICBwcl9pbmZvKCJUeCBkZXNjcmlwdG9yIGluZm86 Iik7DQo+ID4gKyAgICAgcHJfaW5mbygiVHggY3VyX2lkeCA9IDB4JXgiLCByaW5nLT5jdXJfaWR4 KTsNCj4gPiArICAgICBwcl9pbmZvKCJUeCBkaXJ0eV9pZHggPSAweCV4IiwgcmluZy0+ZGlydHlf aWR4KTsNCj4gPiArICAgICBwcl9pbmZvKCJUeCBwaHlfYWRkciA9IDB4JWxseCIsIHJpbmctPnBo eV9hZGRyKTsNCj4gPiArICAgICBkdW1wX3R4X2Rlc2MocmluZyk7DQo+ID4gKw0KPiA+ICsgICAg IHJpbmcgPSAmdHAtPnJ4X3JpbmdbMF07DQo+ID4gKyAgICAgcHJfaW5mbygiUnggZGVzY3JpcHRv ciBpbmZvOiIpOw0KPiA+ICsgICAgIHByX2luZm8oIlJ4IGN1cl9pZHggPSAweCV4IiwgcmluZy0+ Y3VyX2lkeCk7DQo+ID4gKyAgICAgcHJfaW5mbygiUnggZGlydHlfaWR4ID0gMHgleCIsIHJpbmct PmRpcnR5X2lkeCk7DQo+ID4gKyAgICAgcHJfaW5mbygiUnggcGh5X2FkZHIgPSAweCVsbHgiLCBy aW5nLT5waHlfYWRkcik7DQo+ID4gKw0KPiA+ICsgICAgIHByX2luZm8oIkRldmljZSBSZWdpc3Rl cnM6Iik7DQo+ID4gKyAgICAgcHJfaW5mbygiQ2hpcCBDb21tYW5kID0gMHglMDJ4IiwgUlRMX1I4 KENISVBfQ01EKSk7DQo+ID4gKyAgICAgcHJfaW5mbygiSU1SID0gJTA4eCIsIFJUTF9SMzIoSU1S MCkpOw0KPiA+ICsgICAgIHByX2luZm8oIklTUiA9ICUwOHgiLCBSVExfUjMyKElTUjApKTsNCj4g PiArICAgICBwcl9pbmZvKCJCb290IEN0cmwgUmVnKDB4RTAwNCkgPSAlMDR4IiwgUlRMX1IxNigw eDYwMDQpKTsNCj4gPiArICAgICBwcl9pbmZvKCJFUEhZIElTUigweEUwMTQpID0gJTA0eCIsIFJU TF9SMTYoMHg2MDE0KSk7DQo+ID4gKyAgICAgcHJfaW5mbygiRVBIWSBJTVIoMHhFMDE2KSA9ICUw NHgiLCBSVExfUjE2KDB4NjAxNikpOw0KPiA+ICsgICAgIHByX2luZm8oIkNMS1NXIFNFVCBSRUco MHhFMDE4KSA9ICUwNHgiLCBSVExfUjE2KDB4NjAxOCkpOw0KPiA+ICsNCj4gPiArICAgICBwcl9p bmZvKCJEdW1wIFBDSSBSZWdpc3RlcnM6Iik7DQo+ID4gKw0KPiA+ICsgICAgIHdoaWxlIChuIDwg bWF4X3JlZ19zaXplKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoKG4gJSBEV09SRF9NT0QpID09 IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2luZm8oIlxuMHglMDN4Olx0Iiwgbik7 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKHRwLT5wZGV2 LCBuLCAmZHdvcmRfcmQpOw0KPiA+ICsgICAgICAgICAgICAgcHJfaW5mbygiJTA4eCAiLCBkd29y ZF9yZCk7DQo+ID4gKyAgICAgICAgICAgICBuICs9IDQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4g PiArICAgICBwcl9pbmZvKCJEdW1wIFRhbGx5IENvdW50ZXI6Iik7DQo+ID4gKyAgICAgY291bnRl cnMgPSB0cC0+dGFsbHlfdmFkZHI7DQo+ID4gKyAgICAgcGFkZHIgPSB0cC0+dGFsbHlfcGFkZHI7 DQo+ID4gKyAgICAgUlRMX1czMihEVENDUjQsICh1MzIpKHBhZGRyID4+IDMyKSk7DQo+ID4gKyAg ICAgY21kID0gKHUzMikocGFkZHIgJiBETUFfQklUX01BU0soMzIpKTsNCj4gPiArICAgICBSVExf VzMyKERUQ0NSMCwgY21kKTsNCj4gPiArICAgICBSVExfVzMyKERUQ0NSMCwgKHUzMikoY21kIHwg Q09VTlRFUl9EVU1QKSk7DQo+ID4gKyAgICAgd2FpdF9jbnQgPSAwOw0KPiA+ICsgICAgIHdoaWxl ICgoUlRMX1IzMihEVENDUjApICYgQ09VTlRFUl9EVU1QKSAhPSAwdSkgew0KPiA+ICsgICAgICAg ICAgICAgdXNsZWVwX3JhbmdlKDEwLCAyMCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgd2Fp dF9jbnQrKzsNCj4gPiArICAgICAgICAgICAgIGlmICh3YWl0X2NudCA+IDIwdSkNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHByX2luZm8o InR4X3BhY2tldHNcdCVsbGRcbiIsIGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50eF9wYWNrZXRzKSk7 DQo+ID4gKyAgICAgcHJfaW5mbygicnhfcGFja2V0c1x0JWxsZFxuIiwgbGU2NF90b19jcHUoY291 bnRlcnMtPnJ4X3BhY2tldHMpKTsNCj4gPiArICAgICBwcl9pbmZvKCJ0eF9lcnJvcnNcdCVsbGRc biIsIGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50eF9lcnJvcnMpKTsNCj4gPiArICAgICBwcl9pbmZv KCJyeF9taXNzZWRcdCVsbGRcbiIsIGxlNjRfdG9fY3B1KGNvdW50ZXJzLT5yeF9taXNzZWQpKTsN Cj4gPiArICAgICBwcl9pbmZvKCJhbGlnbl9lcnJvcnNcdCVsbGRcbiIsIGxlNjRfdG9fY3B1KGNv dW50ZXJzLT5hbGlnbl9lcnJvcnMpKTsNCj4gPiArICAgICBwcl9pbmZvKCJ0eF9vbmVfY29sbGlz aW9uXHQlbGxkXG4iLA0KPiBsZTY0X3RvX2NwdShjb3VudGVycy0+dHhfb25lX2NvbGxpc2lvbikp Ow0KPiA+ICsgICAgIHByX2luZm8oInR4X211bHRpX2NvbGxpc2lvblx0JWxsZFxuIiwNCj4gbGU2 NF90b19jcHUoY291bnRlcnMtPnR4X211bHRpX2NvbGxpc2lvbikpOw0KPiA+ICsgICAgIHByX2lu Zm8oInJ4X3VuaWNhc3RcdCVsbGRcbiIsIGxlNjRfdG9fY3B1KGNvdW50ZXJzLT5yeF91bmljYXN0 KSk7DQo+ID4gKyAgICAgcHJfaW5mbygicnhfYnJvYWRjYXN0XHQlbGxkXG4iLA0KPiBsZTY0X3Rv X2NwdShjb3VudGVycy0+cnhfYnJvYWRjYXN0KSk7DQo+ID4gKyAgICAgcHJfaW5mbygicnhfbXVs dGljYXN0XHQlbGxkXG4iLCBsZTY0X3RvX2NwdShjb3VudGVycy0+cnhfbXVsdGljYXN0KSk7DQo+ ID4gKyAgICAgcHJfaW5mbygidHhfYWJvcnRlZFx0JWxsZFxuIiwgbGU2NF90b19jcHUoY291bnRl cnMtPnR4X2Fib3J0ZWQpKTsNCj4gPiArICAgICBwcl9pbmZvKCJ0eF91bmRlcnVuXHQlbGxkXG4i LCBsZTY0X3RvX2NwdShjb3VudGVycy0+dHhfdW5kZXJ1bikpOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vfc3dfcmVzZXQo c3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9w cml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBm bGFnczsNCj4gPiArDQo+ID4gKyAgICAgbmV0ZGV2X2luZm8oZGV2LCAiJXMgaXMgdHJpZ2dlcmVk LiIsIF9fZnVuY19fKTsNCj4gPiArICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZs YWdzKTsNCj4gPiArICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7DQo+ID4gKyAgICAgbmV0aWZf Y2Fycmllcl9vZmYoZGV2KTsNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9W X0VOQUJMRUQpICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9pcnFfbWFza19hbmRf YWNrKHRwKTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2Z1bmNfZGlzYWJsZSh0cCk7DQo+ID4g KyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2h3X3Jlc2V0KGRldik7DQo+ ID4gKyAgICAgfQ0KPiA+ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBm bGFncyk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIExldCdzIHdhaXQgYSBiaXQgd2hpbGUgYW55IChh c3luYykgaXJxIGxhbmRzIG9uICovDQo+ID4gKyAgICAgcnRhc2Vfd2FpdF9mb3JfcXVpZXNjZW5j ZShkZXYpOw0KPiA+ICsgICAgIHJ0YXNlX3R4X2NsZWFyKHRwKTsNCj4gPiArICAgICBydGFzZV9y eF9jbGVhcih0cCk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChydGFzZV9pbml0X3JpbmcoZGV2KSAh PSAwKQ0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2FsZXJ0KGRldiwgInVuYWJsZSB0byBpbml0 IHJpbmdcbiIpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9W X0VOQUJMRUQpICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9mdW5jX2VuYWJsZSh0 cCk7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9lbmFibGVfaHdfaW50ZXJydXB0KHRwKTsNCj4g PiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfaHdfY29uZmlnKGRldik7 DQo+ID4gKyAgICAgICAgICAgICAvKiBhbHdheXMgbGluaywgc28gc3RhcnQgdG8gdHJhbnNtaXQg JiByZWNlaXZlICovDQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19zdGFydChkZXYpOw0KPiA+ ICsgICAgIH0NCj4gPiArICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7DQo+ID4gKyAgICAgbmV0 aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsNCj4gPiArICAgICAvKiBTZXQgdGltZW91dF9zdGF0 ZSAqLw0KPiA+ICsgICAgIHRwLT50aW1lb3V0X3N0YXRlID0gVElNRU9VVF9FUlJPUjsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2VfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSkNCj4gPiArew0KPiA+ICsgICAgICh2b2lk KXR4cXVldWU7DQo+ID4gKyAgICAgcnRhc2Vfc3dfcmVzZXQoZGV2KTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHMzMiBydGFzZV94bWl0X2ZyYWdzKHN0cnVjdCBydGFzZV9yaW5nICpyaW5n LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzINCj4gb3B0czEsIHUzMiBvcHRzMikNCj4gPiArew0K PiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IHJpbmctPml2ZWMtPnRw Ow0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKmluZm8gPSBza2Jfc2hp bmZvKHNrYik7DQo+ID4gKyAgICAgdTMyIGN1cl9mcmFnLCBlbnRyeTsNCj4gPiArICAgICB0eF9k ZXNjICp0eGQgPSBOVUxMOw0KPiA+ICsgICAgIGNvbnN0IHU4IG5yX2ZyYWdzID0gaW5mby0+bnJf ZnJhZ3M7DQo+ID4gKyAgICAgdTY0IHBrdF9sZW5fY250ID0gMDsNCj4gPiArICAgICBzMzIgcmMg PSAwOw0KPiA+ICsNCj4gPiArICAgICBlbnRyeSA9IHJpbmctPmN1cl9pZHg7DQo+ID4gKyAgICAg Zm9yIChjdXJfZnJhZyA9IDA7IGN1cl9mcmFnIDwgbnJfZnJhZ3M7IGN1cl9mcmFnKyspIHsNCj4g PiArICAgICAgICAgICAgIGNvbnN0IHNrYl9mcmFnX3QgKmZyYWcgPSAmaW5mby0+ZnJhZ3NbY3Vy X2ZyYWddOw0KPiA+ICsgICAgICAgICAgICAgZG1hX2FkZHJfdCBtYXBwaW5nOw0KPiA+ICsgICAg ICAgICAgICAgdTMyIHN0YXR1cywgbGVuOw0KPiA+ICsgICAgICAgICAgICAgdm9pZCAqYWRkcjsN Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICBlbnRyeSA9IChlbnRyeSArIDF1KSAlIE5VTV9ERVND Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHR4ZCA9IHJpbmctPmRlc2MgKyAoc2l6ZW9mKHR4 X2Rlc2MpICogZW50cnkpOw0KPiA+ICsgICAgICAgICAgICAgbGVuID0gc2tiX2ZyYWdfc2l6ZShm cmFnKTsNCj4gPiArICAgICAgICAgICAgIGFkZHIgPSBza2JfZnJhZ19hZGRyZXNzKGZyYWcpOw0K PiA+ICsgICAgICAgICAgICAgbWFwcGluZyA9IGRtYV9tYXBfc2luZ2xlKCZ0cC0+cGRldi0+ZGV2 LCBhZGRyLCBsZW4sDQo+IERNQV9UT19ERVZJQ0UpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg IGlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcigmdHAtPnBkZXYtPmRldiwNCj4gbWFwcGlu ZykpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICh1bmxpa2VseShuZXRfcmF0ZWxp bWl0KCkpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX2Vycih0cCwg ZHJ2LCB0cC0+ZGV2LCAiRmFpbGVkIHRvDQo+IG1hcCBUWCBmcmFnbWVudHMgRE1BIVxuIik7DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7DQo+ID4gKyAgICAg ICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKCgoZW50cnkgKyAxdSkgJSBO VU1fREVTQykgPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IChvcHRz MSB8IGxlbiB8ICh1MzIpUklOR19FTkQpOw0KPiA+ICsgICAgICAgICAgICAgZWxzZQ0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBvcHRzMSB8IGxlbjsNCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICBpZiAoY3VyX2ZyYWcgPT0gKCh1MzIpbnJfZnJhZ3MgLSAxdSkpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgcmluZy0+c2tidWZmW2VudHJ5XSA9IHNrYjsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgc3RhdHVzIHw9ICh1MzIpVFhfTEFTVF9GUkFHOw0KPiA+ICsgICAg ICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHR4ZC0+YWRkciA9IGNwdV90b19s ZTY0KG1hcHBpbmcpOw0KPiA+ICsgICAgICAgICAgICAgcmluZy0+bWlzLmxlbltlbnRyeV0gPSBs ZW47DQo+ID4gKyAgICAgICAgICAgICB0eGQtPm9wdHMyID0gY3B1X3RvX2xlMzIob3B0czIpOw0K PiA+ICsgICAgICAgICAgICAgLyogbWFrZSBzdXJlIHRoZSBvcGVyYXRpbmcgZmllbGRzIGhhdmUg YmVlbiB1cGRhdGVkICovDQo+ID4gKyAgICAgICAgICAgICB3bWIoKTsNCj4gPiArICAgICAgICAg ICAgIHR4ZC0+b3B0czEgPSBjcHVfdG9fbGUzMihzdGF0dXMpOw0KPiA+ICsgICAgICAgICAgICAg cGt0X2xlbl9jbnQgKz0gbGVuOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmMgPSAo czMyKWN1cl9mcmFnOw0KPiA+ICsgICAgIGdvdG8gb3V0Ow0KPiA+ICsNCj4gPiArZXJyX291dDoN Cj4gPiArICAgICBydGFzZV90eF9jbGVhcl9yYW5nZShyaW5nLCByaW5nLT5jdXJfaWR4ICsgMXUs IGN1cl9mcmFnKTsNCj4gPiArICAgICByYyA9IC1FSU87DQo+ID4gK291dDoNCj4gPiArICAgICBy ZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgX19iZTE2IGdldF9w cm90b2NvbChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KPiA+ICt7DQo+ID4gKyAgICAgX19i ZTE2IHByb3RvY29sOw0KPiA+ICsNCj4gPiArICAgICBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9u cyhFVEhfUF84MDIxUSkpDQo+ID4gKyAgICAgICAgICAgICBwcm90b2NvbCA9IHZsYW5fZXRoX2hk cihza2IpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOw0KPiA+ICsgICAgIGVsc2UNCj4gPiAr ICAgICAgICAgICAgIHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIHByb3RvY29sOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHUzMiBy dGFzZV90eF9jc3VtKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNl DQo+ICpkZXYpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgY3N1bV9jbWQgPSAwOw0KPiA+ICsgICAg IHU4IHN3X2NhbGNfY3N1bSA9IEZBTFNFOw0KPiA+ICsNCj4gPiArICAgICBpZiAoc2tiLT5pcF9z dW1tZWQgPT0gKHU4KUNIRUNLU1VNX1BBUlRJQUwpIHsNCj4gPiArICAgICAgICAgICAgIHU4IGlw X3Byb3RvY29sID0gSVBQUk9UT19SQVc7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgc3dpdGNo IChnZXRfcHJvdG9jb2woc2tiKSkgew0KPiA+ICsgICAgICAgICAgICAgY2FzZSBodG9ucyhFVEhf UF9JUCk6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICgoZGV2LT5mZWF0dXJlcyAmIE5F VElGX0ZfSVBfQ1NVTSkgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpcF9wcm90b2NvbCA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjc3VtX2NtZCA9ICh1MzIpVFhfSVBDU19DOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsg ICAgICAgICAgICAgY2FzZSBodG9ucyhFVEhfUF9JUFY2KToNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgaWYgKChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUFY2X0NTVU0pICE9IDB1KSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHRyYW5zcG9ydF9vZmZzZXQgPQ0K PiAodTMyKXNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmICgodHJhbnNwb3J0X29mZnNldCA+IDB1KSAmJg0KPiAodHJh bnNwb3J0X29mZnNldCA8PSBUQ1BIT19NQVgpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpcF9wcm90b2NvbCA9DQo+IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3VtX2NtZCA9DQo+ ICh1MzIpVFhfSVBWNkZfQzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNzdW1fY21kIHw9IHRyYW5zcG9ydF9vZmZzZXQNCj4gPDwgVENQSE9fU0hJRlQ7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAg ZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KG5ldF9yYXRl bGltaXQoKSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHByaW50aygiY2hl Y2tzdW1fcGFydGlhbCBwcm90bz0leCFcbiIsDQo+IHNrYi0+cHJvdG9jb2wpOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgaWYgKGlwX3Byb3RvY29sID09ICh1OClJUFBST1RPX1RDUCkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgY3N1bV9jbWQgfD0gKHUzMilUWF9UQ1BDU19DOw0K PiA+ICsgICAgICAgICAgICAgZWxzZSBpZiAoaXBfcHJvdG9jb2wgPT0gKHU4KUlQUFJPVE9fVURQ KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjc3VtX2NtZCB8PSAodTMyKVRYX1VEUENTX0M7 DQo+ID4gKyAgICAgICAgICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG5ldGRl dl9pbmZvKGRldiwgIiVzIGNvbW1hbmQgZXJyb3IuXG4iLA0KPiBfX2Z1bmNfXyk7DQo+ID4gKw0K PiA+ICsgICAgICAgICAgICAgaWYgKGNzdW1fY21kID09IDB1KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHN3X2NhbGNfY3N1bSA9IFRSVUU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IFdBUk5fT04oMSk7IC8qIHdlIG5lZWQgYSBXQVJOKCkgKi8NCj4gPiArICAgICAgICAgICAgIH0N Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChzd19jYWxjX2NzdW0gIT0gMHUpIHsN Cj4gPiArICAgICAgICAgICAgIHNrYl9jaGVja3N1bV9oZWxwKHNrYik7DQo+ID4gKyAgICAgICAg ICAgICBjc3VtX2NtZCA9IDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g Y3N1bV9jbWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHJ0YXNlX2NzdW1fd29ya2Fyb3VuZCgp DQo+ID4gKyAqIFRoZSBodyBsaW1pdGVzIHRoZSB2YWx1ZSB0aGUgdHJhbnNwb3J0IG9mZnNldC4g V2hlbiB0aGUgb2Zmc2V0IGlzIG91dCBvZg0KPiB0aGUNCj4gPiArICogcmFuZ2UsIGNhbGN1bGF0 ZSB0aGUgY2hlY2tzdW0gYnkgc3cuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9j c3VtX3dvcmthcm91bmQoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCBzdHJ1Y3QNCj4g c2tfYnVmZiAqc2tiKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMg KnN0YXRzOw0KPiA+ICsNCj4gPiArICAgICBpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSAh PSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMgPSB0 cC0+ZGV2LT5mZWF0dXJlczsNCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpzZWdz ID0gTlVMTDsNCj4gPiArICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpuc2tiOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgIGZlYXR1cmVzICY9IH4oTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBW Nl9DU1VNIHwNCj4gTkVUSUZfRl9UU082KTsNCj4gPiArICAgICAgICAgICAgIHNlZ3MgPSBza2Jf Z3NvX3NlZ21lbnQoc2tiLCBmZWF0dXJlcyk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoSVNfRVJS KHNlZ3MpIHx8ICghc2VncykpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZHJvcDsN Cj4gPiArDQo+ID4gKyAgICAgICAgICAgICBkbyB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IG5za2IgPSBzZWdzOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBzZWdzID0gc2Vncy0+bmV4 dDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbnNrYi0+bmV4dCA9IE5VTEw7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHJ0YXNlX3N0YXJ0X3htaXQobnNrYiwgdHAtPmRldik7DQo+ID4g KyAgICAgICAgICAgICB9IHdoaWxlIChzZWdzKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBk ZXZfY29uc3VtZV9za2JfYW55KHNrYik7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4g PiArICAgICB9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09ICh1OClDSEVDS1NVTV9QQVJUSUFM KSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2tiX2NoZWNrc3VtX2hlbHAoc2tiKSA8IDApDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZHJvcDsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICBydGFzZV9zdGFydF94bWl0KHNrYiwgdHAtPmRldik7DQo+ID4gKyAgICAgICAgICAgICBn b3RvIG91dDsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgZ290byBkcm9w Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gK2Ryb3A6DQo+ID4gKyAgICAgc3RhdHMgPSAmdHAt PmRldi0+c3RhdHM7DQo+ID4gKyAgICAgc3RhdHMtPnR4X2Ryb3BwZWQrKzsNCj4gPiArICAgICBk ZXZfa2ZyZWVfc2tiX2FueShza2IpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVy bjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogbXNkbl9naWFudF9zZW5kX2NoZWNrKCkNCj4gPiAr ICogQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudCBvZiBtaWNyb3NvZnQsIHRoZSBUQ1AgUHNldWRv IEhlYWRlciBleGNsdWRlcw0KPiB0aGUNCj4gPiArICogcGFja2V0IGxlbmd0aCBmb3IgSVB2NiBU Q1AgbGFyZ2UgcGFja2V0cy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBzMzIgbXNkbl9naWFudF9z ZW5kX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBz dHJ1Y3QgaXB2NmhkciAqaXB2Nmg7DQo+ID4gKyAgICAgc3RydWN0IHRjcGhkciAqdGg7DQo+ID4g KyAgICAgczMyIHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gc2tiX2Nvd19oZWFkKHNrYiwg MCk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChyZXQgPT0gMCkgew0KPiA+ICsgICAgICAgICAgICAg aXB2NmggPSBpcHY2X2hkcihza2IpOw0KPiA+ICsgICAgICAgICAgICAgdGggPSB0Y3BfaGRyKHNr Yik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgdGgtPmNoZWNrID0gMDsNCj4gPiArICAgICAg ICAgICAgIHRoLT5jaGVjayA9IH50Y3BfdjZfY2hlY2soMCwgJmlwdjZoLT5zYWRkciwNCj4gJmlw djZoLT5kYWRkciwgMCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0 Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgbmV0ZGV2X3R4X3QgcnRhc2Vfc3RhcnRfeG1p dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZQ0KPiAqZGV2KQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsN Cj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZzsNCj4gPiArICAgICB1MzIgcV9pZHg7 DQo+ID4gKyAgICAgdTMyIGVudHJ5Ow0KPiA+ICsgICAgIHR4X2Rlc2MgKnR4ZDsNCj4gPiArICAg ICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgZG1hX2Fk ZHJfdCBtYXBwaW5nOw0KPiA+ICsgICAgIHUzMiBsZW47DQo+ID4gKyAgICAgdTMyIG9wdHMxOw0K PiA+ICsgICAgIHUzMiBvcHRzMjsNCj4gPiArICAgICBuZXRkZXZfdHhfdCByZXQgPSBORVRERVZf VFhfT0s7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArICAgICB1NjQgbGFy Z2Vfc2VuZF9lbjsNCj4gPiArICAgICBzMzIgZnJhZ3M7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5f bG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsNCj4gPiArICAgICAvKiBtdWx0 aXF1ZXVlcyAqLw0KPiA+ICsgICAgIHFfaWR4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7 DQo+ID4gKyAgICAgcmluZyA9ICZ0cC0+dHhfcmluZ1txX2lkeF07DQo+ID4gKw0KPiA+ICsgICAg IGlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTChyaW5nKSA8IHNrYl9zaGluZm8oc2tiKS0+bnJf ZnJhZ3MpKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAobmV0aWZfbXNnX2Rydih0cCkgIT0gMHUp DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG5ldGRldl9lcnIoZGV2LCAiJXM6IEJVRyEgVHgg UmluZyBmdWxsIHdoZW4NCj4gcXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgIGdvdG8gZXJyX3N0b3A7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICBlbnRyeSA9IHJpbmctPmN1cl9pZHggJSBOVU1fREVTQzsNCj4gPiArICAgICB0eGQgPSBy aW5nLT5kZXNjICsgKHNpemVvZih0eF9kZXNjKSAqIGVudHJ5KTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKHVubGlrZWx5KGxlMzJfdG9fY3B1KHR4ZC0+b3B0czEpICYgREVTQ19PV04pKQ0KPiA+ICsg ICAgICAgICAgICAgZ290byBlcnJfc3RvcDsNCj4gPiArDQo+ID4gKyAgICAgb3B0czEgPSAodTMy KURFU0NfT1dOOw0KPiA+ICsgICAgIG9wdHMyID0gcnRhc2VfdHhfdmxhbl90YWcodHAsIHNrYik7 DQo+ID4gKyAgICAgbGFyZ2Vfc2VuZF9lbiA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmICgoZGV2 LT5mZWF0dXJlcyAmIChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNikpICE9IDB1KSB7DQo+ID4g KyAgICAgICAgICAgICB1MzIgbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsNCj4gPiAr DQo+ID4gKyAgICAgICAgICAgICAvKiBUQ1AgU2VnbWVudGF0aW9uIE9mZmxvYWQgKG9yIFRDUCBM YXJnZSBTZW5kKSAqLw0KPiA+ICsgICAgICAgICAgICAgaWYgKG1zcyAhPSAwdSkgew0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICB1MzIgdHJhbnNwb3J0X29mZnNldCA9DQo+ICh1MzIpc2tiX3Ry YW5zcG9ydF9vZmZzZXQoc2tiKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGFz c2VydCgodHJhbnNwb3J0X29mZnNldCAlIDIpID09IDApOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBzd2l0Y2ggKGdldF9wcm90b2NvbChza2IpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGNhc2UgaHRvbnMoRVRIX1BfSVApOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0cmFuc3BvcnRfb2Zmc2V0IDw9IDEyOHUpIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG9wdHMxIHw9DQo+ICh1MzIpR0lBTlRfU0VORF9WNDsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMxIHw9IHRyYW5zcG9y dF9vZmZzZXQgPDwNCj4gR1RUQ1BIT19TSElGVDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9wdHMyIHw9IG1pbihtc3MsIE1TU19NQVgpDQo+IDw8IDE4Ow0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFyZ2Vfc2VuZF9lbiA9IDE7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjYXNlIGh0 b25zKEVUSF9QX0lQVjYpOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICht c2RuX2dpYW50X3NlbmRfY2hlY2soc2tiKSAhPSAwKSB7DQo+ID4gKw0KPiBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcnRhc2VfY3N1bV93b3JrYXJvdW5kKHRwLA0KPiBza2IpOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAodHJhbnNwb3J0X29mZnNldCA8PSAxMjh1KSB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzMSB8PQ0KPiAodTMyKUdJQU5UX1NFTkRf VjY7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzMSB8PSB0 cmFuc3BvcnRfb2Zmc2V0IDw8DQo+IEdUVENQSE9fU0hJRlQ7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvcHRzMiB8PSBtaW4obXNzLCBNU1NfTUFYKQ0KPiA8PCAx ODsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhcmdlX3NlbmRf ZW4gPSAxOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHko bmV0X3JhdGVsaW1pdCgpKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRwcmludGsoInRzbyBwcm90bz0leCFcbiIsDQo+IHNrYi0+cHJvdG9jb2wpOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGxhcmdl X3NlbmRfZW4gPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBl cnJfZG1hXzA7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICBpZiAobGFyZ2Vfc2VuZF9lbiA9PSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHNr Yi0+aXBfc3VtbWVkID09ICh1OClDSEVDS1NVTV9QQVJUSUFMKQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBvcHRzMiB8PSBydGFzZV90eF9jc3VtKHNrYiwgZGV2KTsNCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIGZyYWdzID0gcnRhc2VfeG1pdF9mcmFncyhyaW5nLCBza2IsIG9wdHMx LCBvcHRzMik7DQo+ID4gKyAgICAgaWYgKHVubGlrZWx5KGZyYWdzIDwgMCkpDQo+ID4gKyAgICAg ICAgICAgICBnb3RvIGVycl9kbWFfMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGZyYWdzICE9IDAp IHsNCj4gPiArICAgICAgICAgICAgIGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7DQo+ID4gKyAgICAg ICAgICAgICBvcHRzMSB8PSAodTMyKVRYX0ZJUlNUX0ZSQUc7DQo+ID4gKyAgICAgfSBlbHNlIHsN Cj4gPiArICAgICAgICAgICAgIGxlbiA9IHNrYi0+bGVuOw0KPiA+ICsgICAgICAgICAgICAgcmlu Zy0+c2tidWZmW2VudHJ5XSA9IHNrYjsNCj4gPiArICAgICAgICAgICAgIG9wdHMxIHw9ICh1MzIp KFRYX0ZJUlNUX0ZSQUcgfCBUWF9MQVNUX0ZSQUcpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgaWYgKCgoKGVudHJ5ICsgMXUpICUgTlVNX0RFU0MpID09IDB1KSkNCj4gPiArICAgICAg ICAgICAgIG9wdHMxIHw9IChsZW4gfCAodTMyKVJJTkdfRU5EKTsNCj4gPiArICAgICBlbHNlDQo+ ID4gKyAgICAgICAgICAgICBvcHRzMSB8PSBsZW47DQo+ID4gKw0KPiA+ICsgICAgIG1hcHBpbmcg PSBkbWFfbWFwX3NpbmdsZSgmdHAtPnBkZXYtPmRldiwgc2tiLT5kYXRhLCBsZW4sDQo+IERNQV9U T19ERVZJQ0UpOw0KPiA+ICsNCj4gPiArICAgICBpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJy b3IoJnRwLT5wZGV2LT5kZXYsIG1hcHBpbmcpKSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHVu bGlrZWx5KG5ldF9yYXRlbGltaXQoKSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG5ldGlm X2Vycih0cCwgZHJ2LCBkZXYsICJGYWlsZWQgdG8gbWFwIFRYDQo+IERNQSFcbiIpOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyX2RtYV8xOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ ID4gKyAgICAgcmluZy0+bWlzLmxlbltlbnRyeV0gPSBsZW47DQo+ID4gKyAgICAgdHhkLT5hZGRy ID0gY3B1X3RvX2xlNjQobWFwcGluZyk7DQo+ID4gKyAgICAgdHhkLT5vcHRzMiA9IGNwdV90b19s ZTMyKG9wdHMyKTsNCj4gPiArICAgICB0eGQtPm9wdHMxID0gY3B1X3RvX2xlMzIob3B0czEgJiB+ REVTQ19PV04pOw0KPiA+ICsgICAgIC8qIG1ha2Ugc3VyZSB0aGUgb3BlcmF0aW5nIGZpZWxkcyBo YXZlIGJlZW4gdXBkYXRlZCAqLw0KPiA+ICsgICAgIHdtYigpOw0KPiA+ICsgICAgIHR4ZC0+b3B0 czEgPSBjcHVfdG9fbGUzMihvcHRzMSk7DQo+ID4gKyAgICAgc2tiX3R4X3RpbWVzdGFtcChza2Ip Ow0KPiA+ICsNCj4gPiArICAgICAvKiB0eCBuZWVkcyB0byBzZWUgZGVzY3JpcHRvciBjaGFuZ2Vz IGJlZm9yZSB1cGRhdGVkIGN1cl9pZHggKi8NCj4gPiArICAgICBzbXBfd21iKCk7DQo+ID4gKyAg ICAgcmluZy0+Y3VyX2lkeCArPSAodTMyKWZyYWdzICsgMXU7DQo+ID4gKw0KPiA+ICsgICAgIC8q IG1ha2Ugc3VyZSBkaXNjcmlwdG9yIGhhcyBiZWVuIHVwZGF0ZWQgYmVmb3JlIGhhcmR3YXJlIHBv bGxpbmcgKi8NCj4gPiArICAgICB3bWIoKTsNCj4gPiArICAgICAvKiBzZXQgcG9sbGluZyBiaXQg Ki8NCj4gPiArICAgICBSVExfVzgoVFBQT0xMLCAodTgpKEJJVChyaW5nLT5pbmRleCkpKTsNCj4g PiArDQo+ID4gKyAgICAgaWYgKFRYX0JVRkZTX0FWQUlMKHJpbmcpIDwgTUFYX1NLQl9GUkFHUykg ew0KPiA+ICsgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOw0KPiA+ICsgICAgICAg ICAgICAgLyogbWFrZSBzdXJlIGN1cl9pZHggYW5kIGRpcnR5X2lkeCBoYXZlIGJlZW4gdXBkYXRl ZCAqLw0KPiA+ICsgICAgICAgICAgICAgc21wX3JtYigpOw0KPiA+ICsgICAgICAgICAgICAgaWYg KFRYX0JVRkZTX0FWQUlMKHJpbmcpID49IE1BWF9TS0JfRlJBR1MpDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gKyAg ICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICtlcnJfZG1hXzE6DQo+ID4gKyAgICAgcmluZy0+c2ti dWZmW2VudHJ5XSA9IE5VTEw7DQo+ID4gKyAgICAgcnRhc2VfdHhfY2xlYXJfcmFuZ2UocmluZywg cmluZy0+Y3VyX2lkeCArIDF1LCAodTMyKWZyYWdzKTsNCj4gPiArDQo+ID4gK2Vycl9kbWFfMDoN Cj4gPiArICAgICBkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsNCj4gPiArICAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgIGRldl9rZnJlZV9za2Jf YW55KHNrYik7DQo+ID4gKyAgICAgcmV0ID0gTkVUREVWX1RYX09LOw0KPiA+ICsgICAgIGdvdG8g b3V0Ow0KPiA+ICsNCj4gPiArZXJyX3N0b3A6DQo+ID4gKyAgICAgbmV0aWZfc3RvcF9xdWV1ZShk ZXYpOw0KPiA+ICsgICAgIHJldCA9IE5FVERFVl9UWF9CVVNZOw0KPiA+ICsgICAgIGRldi0+c3Rh dHMudHhfZHJvcHBlZCsrOw0KPiA+ICsgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5s b2NrLCBmbGFncyk7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiB0eF9oYW5kbGVyKHN0cnVjdCBydGFzZV9yaW5n ICpyaW5nLCBzMzIgYnVkZ2V0KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNl X3ByaXZhdGUgKnRwID0gcmluZy0+aXZlYy0+dHA7DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZp Y2UgKmRldiA9IHRwLT5kZXY7DQo+ID4gKyAgICAgdTMyIGRpcnR5X3R4Ow0KPiA+ICsgICAgIHUz MiB0eF9sZWZ0Ow0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRk cjsNCj4gPiArICAgICBzMzIgd29ya2RvbmUgPSAwOw0KPiA+ICsNCj4gPiArICAgICBkaXJ0eV90 eCA9IHJpbmctPmRpcnR5X2lkeDsNCj4gPiArICAgICAvKiBtYWtlIHN1cmUgdGhlIGluZGV4IGhh cyBiZWVuIHVwZGF0ZWQgKi8NCj4gPiArICAgICBzbXBfcm1iKCk7DQo+ID4gKyAgICAgdHhfbGVm dCA9IHJpbmctPmN1cl9pZHggLSBkaXJ0eV90eDsNCj4gPiArDQo+ID4gKyAgICAgd2hpbGUgKHR4 X2xlZnQgPiAwdSkgew0KPiA+ICsgICAgICAgICAgICAgdTMyIGVudHJ5ID0gZGlydHlfdHggJSBO VU1fREVTQzsNCj4gPiArICAgICAgICAgICAgIHR4X2Rlc2MgKmRlc2MgPSByaW5nLT5kZXNjICsg KHNpemVvZih0eF9kZXNjKSAqIGVudHJ5KTsNCj4gPiArICAgICAgICAgICAgIHUzMiBsZW4gPSBy aW5nLT5taXMubGVuW2VudHJ5XTsNCj4gPiArICAgICAgICAgICAgIHUzMiBzdGF0dXM7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgLyogbWFrZSBzdXJlIGRpc2NyaXB0b3IgaGFzIGJlZW4gdXBk YXRlZCAqLw0KPiA+ICsgICAgICAgICAgICAgcm1iKCk7DQo+ID4gKyAgICAgICAgICAgICBzdGF0 dXMgPSBsZTMyX3RvX2NwdShkZXNjLT5vcHRzMSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg aWYgKChzdGF0dXMgJiBERVNDX09XTikgIT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgdHhfbGVmdCA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGRldi0+c3RhdHMudHhf Ynl0ZXMgKz0gbGVuOw0KPiA+ICsgICAgICAgICAgICAgZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7 DQo+ID4gKyAgICAgICAgICAgICBydGFzZV91bm1hcF90eF9za2IodHAtPnBkZXYsIGxlbiwgZGVz Yyk7DQo+ID4gKyAgICAgICAgICAgICByaW5nLT5taXMubGVuW2VudHJ5XSA9IDA7DQo+ID4gKyAg ICAgICAgICAgICBpZiAocmluZy0+c2tidWZmW2VudHJ5XSkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBkZXZfY29uc3VtZV9za2JfYW55KHJpbmctPnNrYnVmZltlbnRyeV0pOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICByaW5nLT5za2J1ZmZbZW50cnldID0gTlVMTDsNCj4gPiArICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIGRpcnR5X3R4Kys7DQo+ID4gKyAgICAgICAg ICAgICB0eF9sZWZ0LS07DQo+ID4gKyAgICAgICAgICAgICB3b3JrZG9uZSsrOw0KPiA+ICsNCj4g PiArICAgICAgICAgICAgIGlmICh3b3JrZG9uZSA9PSBidWRnZXQpIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgdHhfbGVmdCA9IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAg aWYgKHJpbmctPmRpcnR5X2lkeCAhPSBkaXJ0eV90eCkgew0KPiA+ICsgICAgICAgICAgICAgcmlu Zy0+ZGlydHlfaWR4ID0gZGlydHlfdHg7DQo+ID4gKyAgICAgICAgICAgICAvKiBtYWtlIHN1cmUg dGhlIGluZGV4IGhhcyBiZWVuIHVwZGF0ZWQgKi8NCj4gPiArICAgICAgICAgICAgIHNtcF93bWIo KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYp ICYmIChUWF9CVUZGU19BVkFJTChyaW5nKSA+PQ0KPiBNQVhfU0tCX0ZSQUdTKSkNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGUgaW5kZXggaGFzIGJlZW4gdXBkYXRlZCAqLw0KPiA+ ICsgICAgICAgICAgICAgc21wX3JtYigpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJpbmctPmN1 cl9pZHggIT0gZGlydHlfdHgpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIFJUTF9XOChUUFBP TEwsICh1OCkoQklUKHJpbmctPmluZGV4KSkpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIHdvcmtkb25lOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHMz MiBydGFzZV9mcmFnbWVudGVkX2ZyYW1lKHUzMiBzdGF0dXMpDQo+ID4gK3sNCj4gPiArICAgICBz MzIgcmV0Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoKHN0YXR1cyAmIChSWF9GSVJTVF9GUkFHIHwg UlhfTEFTVF9GUkFHKSkgIT0gKFJYX0ZJUlNUX0ZSQUcgfA0KPiBSWF9MQVNUX0ZSQUcpKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0ID0gMTsNCj4gPiArICAgICBlbHNlDQo+ID4gKyAgICAgICAgICAg ICByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgcnRhc2VfcnhfY3N1bShjb25zdCBzdHJ1Y3QgcnRhc2Vf cHJpdmF0ZSAqdHAsIHN0cnVjdA0KPiBza19idWZmICpza2IsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHJ4X2Rlc2MgKmRlc2MpDQo+ID4gK3sNCj4gPiArICAgICB1 MzIgb3B0czIgPSBsZTMyX3RvX2NwdShkZXNjLT5kZXNjX3N0YXR1cy5vcHRzMik7DQo+ID4gKw0K PiA+ICsgICAgICh2b2lkKXRwOw0KPiA+ICsNCj4gPiArICAgICAvKiByeCBjc3VtIG9mZmxvYWQg Ki8NCj4gPiArICAgICBpZiAoKCgob3B0czIgJiBSWF9WNEYpICE9IDB1KSAmJiAoKG9wdHMyICYg UlhfSVBGKSA9PSAwdSkpIHx8ICgob3B0czINCj4gJiBSWF9WNkYpICE9IDB1KSkgew0KPiA+ICsg ICAgICAgICAgICAgaWYgKCgoKG9wdHMyICYgUlhfVENQVCkgIT0gMHUpICYmICgob3B0czIgJiBS WF9UQ1BGKSA9PQ0KPiAwdSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgfHwgKCgob3B0czIgJiBS WF9VRFBUKSAhPSAwdSkgJiYgKChvcHRzMiAmIFJYX1VEUEYpDQo+ID09IDB1KSkpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FS WTsNCj4gPiArICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IHNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsNCj4gPiArICAgICAgICAgICAgIH0NCj4g PiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgc2tiLT5pcF9zdW1tZWQgPSBDSEVD S1NVTV9OT05FOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGlu ZSBzMzIgcnRhc2VfdHJ5X3J4X2NvcHkoY29uc3Qgc3RydWN0IHJ0YXNlX3JpbmcgKnJpbmcsIHN0 cnVjdA0KPiBza19idWZmICoqcF9za19idWZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1MzIgcGt0X3NpemUsIHJ4X2Rlc2MgKmRlc2MsIHUzMg0KPiByeF9idWZfc3op DQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9IHJpbmct Pml2ZWM7DQo+ID4gKyAgICAgczMyIHJldCA9IC0xOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKHMz Milwa3Rfc2l6ZSA8IHJ4X2NvcHlicmVhaykgew0KPiA+ICsgICAgICAgICAgICAgc3RydWN0IHNr X2J1ZmYgKnNrYjsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBza2IgPSBSVExfQUxMT0NfU0tC X0lOVFIoaXZlYy0+bmFwaSwgKCh1MzIpcGt0X3NpemUgKw0KPiAodTMyKVJUS19SWF9BTElHTikp Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKHNrYikgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1OCAqcF9za19idWZmX2RhdGE7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICBwX3NrX2J1ZmZfZGF0YSA9IHBfc2tfYnVmZlswXS0+ZGF0YTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgc2tiX3Jlc2VydmUoc2tiLCAoczMyKVJUS19SWF9BTElHTik7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHByZWZldGNoKHBfc2tfYnVmZl9kYXRhIC0gUlRLX1JYX0FMSUdO KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHNrYi0+ZGF0YSwgcF9za19idWZm X2RhdGEsDQo+ICh1NjQpcGt0X3NpemUpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAqcF9z a19idWZmID0gc2tiOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGFzZV9tYXJrX3RvX2Fz aWMoZGVzYywgcnhfYnVmX3N6KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsN Cj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKyAgICAgcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIHJ0YXNlX3J4X3NrYihjb25z dCBzdHJ1Y3QgcnRhc2VfcmluZyAqcmluZywgc3RydWN0IHNrX2J1ZmYNCj4gKnNrYikNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9pbnRfdmVjdG9yICppdmVjID0gcmluZy0+aXZlYzsN Cj4gPiArDQo+ID4gKyAgICAgbmFwaV9ncm9fcmVjZWl2ZSgmaXZlYy0+bmFwaSwgc2tiKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiByeF9oYW5kbGVyKHN0cnVjdCBydGFzZV9yaW5n ICpyaW5nLCBzMzIgYnVkZ2V0KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNl X3ByaXZhdGUgKnRwID0gcmluZy0+aXZlYy0+dHA7DQo+ID4gKyAgICAgc3RydWN0IG5ldF9kZXZp Y2UgKmRldiA9IHRwLT5kZXY7DQo+ID4gKyAgICAgdTMyIGN1cl9yeDsNCj4gPiArICAgICB1MzIg ZGVsdGE7DQo+ID4gKyAgICAgdTMyIGVudHJ5Ow0KPiA+ICsgICAgIHMzMiB3b3JrZG9uZSA9IDA7 DQo+ID4gKyAgICAgcnhfZGVzYyAqZGVzYzsNCj4gPiArICAgICB1MzIgc3RhdHVzOw0KPiA+ICsg ICAgIHN0cnVjdCBza19idWZmICpza2I7DQo+ID4gKyAgICAgdTMyIHBrdF9zaXplOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoIXJpbmctPmRlc2MpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIHJ4X291 dDsNCj4gPiArDQo+ID4gKyAgICAgY3VyX3J4ID0gcmluZy0+Y3VyX2lkeDsNCj4gPiArICAgICBl bnRyeSA9IGN1cl9yeCAlICh1MzIpTlVNX0RFU0M7DQo+ID4gKyAgICAgZGVzYyA9IHJpbmctPmRl c2MgKyAoc2l6ZW9mKHJ4X2Rlc2MpICogZW50cnkpOw0KPiA+ICsNCj4gPiArICAgICBkbyB7DQo+ ID4gKyAgICAgICAgICAgICAvKiBtYWtlIHN1cmUgZGlzY3JpcHRvciBoYXMgYmVlbiB1cGRhdGVk ICovDQo+ID4gKyAgICAgICAgICAgICBybWIoKTsNCj4gPiArICAgICAgICAgICAgIHN0YXR1cyA9 IGxlMzJfdG9fY3B1KGRlc2MtPmRlc2Nfc3RhdHVzLm9wdHMxKTsNCj4gPiArDQo+ID4gKyAgICAg ICAgICAgICBpZiAoKHN0YXR1cyAmIERFU0NfT1dOKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKHVubGlrZWx5KHN0 YXR1cyAmIFJYX1JFUykpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldGlmX21z Z19yeF9lcnIodHApICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l dGRldl9pbmZvKGRldiwgIiVzOiBSeCBFUlJPUi4gc3RhdHVzDQo+ID0gJTA4eFxuIiwgZGV2LT5u YW1lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1 cyk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXYtPnN0YXRzLnJ4X2Vycm9y cysrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiAoUlhf UldUIHwgUlhfUlVOVCkpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgaWYgKChzdGF0dXMgJiBSWF9DUkMpICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOw0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgaWYgKChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEFMTCkg IT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwcm9jZXNzX3Br dDsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNlX21hcmtfdG9fYXNpYyhk ZXNjLCB0cC0+cnhfYnVmX3N6KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7 DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICtwcm9jZXNzX3BrdDoNCj4gPiArICAg ICAgICAgICAgIGlmIChsaWtlbHkoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYRkNTKSA9PSAw dSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBrdF9zaXplID0gKHN0YXR1cyAmIDB4MDAw MDNGRkZ1KSAtIDR1Ow0KPiA+ICsgICAgICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBwa3Rfc2l6ZSA9IChzdGF0dXMgJiAweDAwMDAzRkZGdSk7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgLyogVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IGluY29taW5nIGZyYWdt ZW50ZWQNCj4gPiArICAgICAgICAgICAgICAqIGZyYW1lcy4gVGhleSBhcmUgc2VlbiBhcyBhIHN5 bXB0b20gb2Ygb3Zlci1tdHUNCj4gPiArICAgICAgICAgICAgICAqIHNpemVkIGZyYW1lcy4NCj4g PiArICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAgaWYgKHVubGlrZWx5KHJ0YXNl X2ZyYWdtZW50ZWRfZnJhbWUoc3RhdHVzKSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldi0+ c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBydGFz ZV9tYXJrX3RvX2FzaWMoZGVzYywgdHAtPnJ4X2J1Zl9zeik7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgIHNrYiA9IHJpbmctPnNrYnVmZltlbnRyeV07DQo+ID4gKyAgICAgICAgICAgICBkbWFf c3luY19zaW5nbGVfZm9yX2NwdSgmdHAtPnBkZXYtPmRldiwNCj4gcmluZy0+bWlzLmRhdGFfcGh5 X2FkZHJbZW50cnldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dHAtPnJ4X2J1Zl9zeiwNCj4gRE1BX0ZST01fREVWSUNFKTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICBpZiAocnRhc2VfdHJ5X3J4X2NvcHkocmluZywgJnNrYiwgcGt0X3NpemUsIGRlc2MsDQo+ IHRwLT5yeF9idWZfc3opICE9IDApIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZG1hX3Vu bWFwX3NpbmdsZSgmdHAtPnBkZXYtPmRldiwNCj4gcmluZy0+bWlzLmRhdGFfcGh5X2FkZHJbZW50 cnldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5yeF9i dWZfc3osDQo+IERNQV9GUk9NX0RFVklDRSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJp bmctPnNrYnVmZltlbnRyeV0gPSBOVUxMOw0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoJnRwLT5w ZGV2LT5kZXYsDQo+IHJpbmctPm1pcy5kYXRhX3BoeV9hZGRyW2VudHJ5XSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnJ4X2J1Zl9zeiwN Cj4gRE1BX0ZST01fREVWSUNFKTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgICAgICAgICBpZiAoKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1JYQ1NVTSkgIT0gMHUpDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNlX3J4X2NzdW0odHAsIHNrYiwgZGVzYyk7DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgc2tiLT5kZXYgPSBkZXY7DQo+ID4gKyAgICAgICAgICAg ICBza2JfcHV0KHNrYiwgcGt0X3NpemUpOw0KPiA+ICsgICAgICAgICAgICAgc2tiLT5wcm90b2Nv bCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBp ZiAoc2tiLT5wa3RfdHlwZSA9PSAodTgpUEFDS0VUX01VTFRJQ0FTVCkNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICBpZiAocnRhc2Vfcnhfdmxhbl9za2IoZGVzYywgc2tiKSA8IDApDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJ0YXNlX3J4X3NrYihyaW5nLCBza2IpOw0KPiA+ICsNCj4gPiArICAgICAg ICAgICAgIGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gKHU2NClwa3Rfc2l6ZTsNCj4gPiArICAgICAg ICAgICAgIGRldi0+c3RhdHMucnhfcGFja2V0cysrOw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgICAg ICAgICB3b3JrZG9uZSsrOw0KPiA+ICsgICAgICAgICAgICAgY3VyX3J4Kys7DQo+ID4gKyAgICAg ICAgICAgICBlbnRyeSA9IGN1cl9yeCAlIE5VTV9ERVNDOw0KPiA+ICsgICAgICAgICAgICAgZGVz YyA9IHJpbmctPmRlc2MgKyAoc2l6ZW9mKHJ4X2Rlc2MpICogZW50cnkpOw0KPiA+ICsgICAgICAg ICAgICAgcHJlZmV0Y2goZGVzYyk7DQo+ID4gKw0KPiA+ICsgICAgIH0gd2hpbGUgKHdvcmtkb25l ICE9IGJ1ZGdldCk7DQo+ID4gKw0KPiA+ICsgICAgIHJpbmctPmN1cl9pZHggPSBjdXJfcng7DQo+ ID4gKyAgICAgZGVsdGEgPSBydGFzZV9yeF9yaW5nX2ZpbGwocmluZywgcmluZy0+ZGlydHlfaWR4 LCByaW5nLT5jdXJfaWR4LCAxKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKChkZWx0YSA9PSAwdSkg JiYgKHdvcmtkb25lICE9IDApICYmIG5ldGlmX21zZ19pbnRyKHRwKSkNCj4gPiArICAgICAgICAg ICAgIG5ldGRldl9pbmZvKGRldiwgIiVzOiBubyBSeCBidWZmZXIgYWxsb2NhdGVkXG4iLA0KPiBk ZXYtPm5hbWUpOw0KPiA+ICsNCj4gPiArICAgICByaW5nLT5kaXJ0eV9pZHggKz0gZGVsdGE7DQo+ ID4gKw0KPiA+ICsgICAgIC8qIEZJWE1FOiB1bnRpbCB0aGVyZSBpcyBwZXJpb2RpYyB0aW1lciB0 byB0cnkgYW5kIHJlZmlsbCB0aGUgcmluZywNCj4gPiArICAgICAgKiBhIHRlbXBvcmFyeSBzaG9y dGFnZSBtYXkgZGVmaW5pdGVseSBraWxsIHRoZSBSeCBwcm9jZXNzLg0KPiA+ICsgICAgICAqIC0g ZGlzYWJsZSB0aGUgYXNpYyB0byB0cnkgYW5kIGF2b2lkIGFuIG92ZXJmbG93IGFuZCBraWNrIGl0 IGFnYWluDQo+ID4gKyAgICAgICogICBhZnRlciByZWZpbGwgPw0KPiA+ICsgICAgICAqIC0gaG93 IGRvIG90aGVycyBkcml2ZXIgaGFuZGxlIHRoaXMgY29uZGl0aW9uIChVaCBvaC4uLikuDQo+ID4g KyAgICAgICovDQo+ID4gKyAgICAgaWYgKCgocmluZy0+ZGlydHlfaWR4ICsgTlVNX0RFU0MpID09 IHJpbmctPmN1cl9pZHgpICYmDQo+IG5ldGlmX21zZ19pbnRyKHRwKSkNCj4gPiArICAgICAgICAg ICAgIG5ldGRldl9lbWVyZyhkZXYsICIlczogUnggYnVmZmVycyBleGhhdXN0ZWRcbiIsDQo+IGRl di0+bmFtZSk7DQo+ID4gKw0KPiA+ICtyeF9vdXQ6DQo+ID4gKyAgICAgcmV0dXJuIHdvcmtkb25l Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiAgVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgUlhR MCBhbmQgVFhRMCwgVFhRNH43IGludGVycnV0cCBzdGF0dXMuDQo+ID4gKyAqLw0KPiA+ICtzdGF0 aWMgaXJxcmV0dXJuX3QgcnRhc2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5j ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5l dF9kZXZpY2UgKilkZXZfaW5zdGFuY2U7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUg KnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3Rv ciAqaXZlYyA9ICZ0cC0+aW50X3ZlY3RvclswXTsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlv YWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTMyIHN0YXR1czsNCj4gPiArICAgICBz MzIgaGFuZGxlZCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgICh2b2lkKWlycTsNCj4gPiArDQo+ID4g KyAgICAgZG8gew0KPiA+ICsgICAgICAgICAgICAgc3RhdHVzID0gUlRMX1IzMihpdmVjLT5pc3Jf YWRkcik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKChzdGF0dXMgJiBNQlgpICE9IDB1 KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBxdWV1ZV93b3JrKHdvcmtfcXVldWUsICZ0cC0+ bXNnX3dvcmspOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgVElNRU9V VDApICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBxdWV1ZV93b3JrKHdvcmtfcXVl dWUsICZ0cC0+d2F0Y2hkb2dfd29yayk7DQo+ID4gKw0KPiA+ICsjaWZkZWYgUlRMREJHDQo+ID4g KyAgICAgICAgICAgICBpZiAoc3RhdHVzICYgUkRVKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBuZXRkZXZfaW5mbyhkZXYsICJQRiByZWNlaXZlIFJEVSAhISEhISEhISEiKTsNCj4gPiArDQo+ ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGhhbmRsZWQgPSAxOw0KPiA+ICsg ICAgICAgICAgICAgUlRMX1czMihpdmVjLT5pbXJfYWRkciwgMHgwKTsNCj4gPiArICAgICAgICAg ICAgIFJUTF9XMzIoaXZlYy0+aXNyX2FkZHIsICh1MzIpKHN0YXR1cyAmIH5GT1ZXKSk7DQo+ID4g Kw0KPiA+ICsgICAgICAgICAgICAgc3RhdHVzICY9ICh1MzIpKH5NQlgpOw0KPiA+ICsgICAgICAg ICAgICAgaWYgKChzdGF0dXMgJiBpdmVjLT5pbXIpICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGlmIChsaWtlbHkoUlRMX05FVElGX1JYX1NDSEVEVUxFX1BSRVAoZGV2LA0KPiAm aXZlYy0+bmFwaSkpKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUlRMX05F VElGX1JYX1NDSEVEVUxFKGRldiwNCj4gJml2ZWMtPm5hcGkpOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBlbHNlIGlmIChuZXRpZl9tc2dfaW50cih0cCkgIT0gMHUpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X2luZm8oZGV2LCAiJXM6IGludGVycnVwdCAlMDh4 IGluDQo+IHBvbGxcbiIsIGRldi0+bmFtZSwgc3RhdHVzKTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBSVExfVzMyKGl2ZWMtPmlt cl9hZGRyLCAodTMyKShpdmVjLT5pbXIgJg0KPiB+TUJYKSk7DQo+ID4gKyAgICAgICAgICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIH0gd2hpbGUgKGZhbHNlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0 dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qICBUaGUgaW50 ZXJydXB0IGhhbmRsZXIgZG9lcyBSWFExJlRYUTEgb3IgUlhRMiZUWFEyIG9yDQo+IFJYUTMmVFhR MyBpbnRlcnJ1dHANCj4gPiArICogIHN0YXR1cyBhY2NvcmRpbmcgdG8gaW50ZXJydXB0IHZlY3Rv ci4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBydGFzZV9xX2ludGVycnVwdChp bnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcnRh c2VfaW50X3ZlY3RvciAqaXZlYyA9IChzdHJ1Y3QgcnRhc2VfaW50X3ZlY3Rvcg0KPiAqKWRldl9p bnN0YW5jZTsNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBpdmVj LT50cDsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ ID4gKyAgICAgdTE2IHN0YXR1czsNCj4gPiArICAgICBpbnQgaGFuZGxlZCA9IDA7DQo+ID4gKw0K PiA+ICsgICAgICh2b2lkKWlycTsNCj4gPiArDQo+ID4gKyAgICAgZG8gew0KPiA+ICsgICAgICAg ICAgICAgc3RhdHVzID0gUlRMX1IxNihpdmVjLT5pc3JfYWRkcik7DQo+ID4gKw0KPiA+ICsgICAg ICAgICAgICAgaGFuZGxlZCA9IDE7DQo+ID4gKyAgICAgICAgICAgICBSVExfVzE2KGl2ZWMtPmlt cl9hZGRyLCAweDApOw0KPiA+ICsgICAgICAgICAgICAgUlRMX1cxNihpdmVjLT5pc3JfYWRkciwg c3RhdHVzKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAvKiBkb24ndCBzdXBwb3J0IHdpdGhv dXQgTkFQSSAqLw0KPiA+ICsgICAgICAgICAgICAgaWYgKGxpa2VseShSVExfTkVUSUZfUlhfU0NI RURVTEVfUFJFUChkZXYsDQo+ICZpdmVjLT5uYXBpKSkpDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIF9fUlRMX05FVElGX1JYX1NDSEVEVUxFKGRldiwgJml2ZWMtPm5hcGkpOw0KPiA+ICsgICAg ICAgICAgICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBuZXRkZXZfaW5mbyh0cC0+ ZGV2LCAiJXM6IGludGVycnVwdCAlMDR4IGluDQo+IHBvbGxcbiIsIGl2ZWMtPm5hbWUsIHN0YXR1 cyk7DQo+ID4gKw0KPiA+ICsgICAgIH0gd2hpbGUgKGZhbHNlKTsNCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgcnRhc2VfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpDQo+ID4g K3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfaW50X3ZlY3RvciAqaXZlYyA9IGNvbnRh aW5lcl9vZihuYXBpLCBzdHJ1Y3QNCj4gcnRhc2VfaW50X3ZlY3RvciwgbmFwaSk7DQo+ID4gKyAg ICAgY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gaXZlYy0+dHA7DQo+ID4gKyAgICAg dm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHN0cnVjdCBy dGFzZV9yaW5nICpyaW5nOw0KPiA+ICsgICAgIGludCB0b3RhbF93b3JrZG9uZSA9IDA7DQo+ID4g KyAgICAgczMyIHdvcmtkb25lID0gMDsNCj4gPiArICAgICBzMzIgY2xlYW5fZmxhZyA9IDE7DQo+ ID4gKw0KPiA+ICsgICAgIC8qIGNsYW5nLWZvcm1hdCBvZmYgKi8NCj4gPiArICAgICBsaXN0X2Zv cl9lYWNoX2VudHJ5KHJpbmcsICZpdmVjLT5yaW5nX2xpc3QsIHJpbmdfZW50cnkpIHsNCj4gPiAr ICAgICAgICAgICAgIHdvcmtkb25lID0gcmluZy0+cmluZ19oYW5kbGVyKHJpbmcsIGJ1ZGdldCk7 DQo+ID4gKyAgICAgICAgICAgICB0b3RhbF93b3JrZG9uZSArPSB3b3JrZG9uZTsNCj4gPiArICAg ICAgICAgICAgIGlmICh3b3JrZG9uZSA9PSBidWRnZXQpDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGNsZWFuX2ZsYWcgPSAwOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICAvKiBjbGFuZy1mb3Jt YXQgb24gKi8NCj4gPiArDQo+ID4gKyAgICAgaWYgKGNsZWFuX2ZsYWcgIT0gMCkgew0KPiA+ICsg ICAgICAgICAgICAgdG90YWxfd29ya2RvbmUgPSBtaW4odG90YWxfd29ya2RvbmUsIGJ1ZGdldCAt IDEpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKGxpa2VseShuYXBpX2NvbXBsZXRlX2RvbmUobmFw aSwgdG90YWxfd29ya2RvbmUpKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoaXZl Yy0+aW5kZXggPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRMX1cz MihpdmVjLT5pbXJfYWRkciwgaXZlYy0+aW1yKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ZWxzZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJUTF9XMTYoaXZlYy0+aW1y X2FkZHIsDQo+ICh1MTYpaXZlYy0+aW1yKTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAg ICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgLyogc3RpbGwgbmVlZCB0byBwb2xsICovDQo+ ID4gKyAgICAgICAgICAgICB0b3RhbF93b3JrZG9uZSA9IGJ1ZGdldDsNCj4gPiArICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgIHJldHVybiB0b3RhbF93b3JrZG9uZTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgcnRhc2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsN Cj4gPiArICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiA+ICsgICAgIHUzMiBpID0gMHU7DQo+ ID4gKw0KPiA+ICsgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAg LyogR2l2ZSBhIHJhY2luZyBoYXJkX3N0YXJ0X3htaXQgYSBmZXcgY3ljbGVzIHRvIGNvbXBsZXRl LiAqLw0KPiA+ICsgICAgIHN5bmNocm9uaXplX3JjdSgpOw0KPiA+ICsNCj4gPiArICAgICBzcGlu X2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgbmV0aWZf Y2Fycmllcl9vZmYoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCh0cC0+c3dfZmxhZyAmIFNX Rl9TUklPVl9FTkFCTEVEKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfaXJxX21h c2tfYW5kX2Fjayh0cCk7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9mdW5jX2Rpc2FibGUodHAp Ow0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19yZXNldChk ZXYpOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmdHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMHU7IGkgPCB0 cC0+aW50X251bXM7IGkrKykNCj4gPiArICAgICAgICAgICAgIHN5bmNocm9uaXplX2lycSh0cC0+ aW50X3ZlY3RvcltpXS5pcnEpOw0KPiA+ICsNCj4gPiArICAgICBzcGluX2xvY2tfaXJxc2F2ZSgm dHAtPmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgcnRhc2VfdHhfY2xlYXIodHApOw0K PiA+ICsNCj4gPiArICAgICBydGFzZV9yeF9jbGVhcih0cCk7DQo+ID4gKw0KPiA+ICsgICAgIHNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgcnRhc2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7 DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC0+cGRldjsNCj4gPiAr ICAgICB1MzIgaSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX2Rvd24oZGV2KTsNCj4gPiAr DQo+ID4gKyAgICAgaWYgKCh0cC0+c3dfZmxhZyAmIFNXRl9NU0lYX0VOQUJMRUQpICE9IDB1KSB7 DQo+ID4gKyAgICAgICAgICAgICBmcmVlX2lycSh0cC0+aW50X3ZlY3RvcltpXS5pcnEsIGRldik7 DQo+ID4gKyAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgdHAtPmludF9udW1zOyBpKyspDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGZyZWVfaXJxKHRwLT5pbnRfdmVjdG9yW2ldLmlycSwg JnRwLT5pbnRfdmVjdG9yW2ldKTsNCj4gPiArDQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgIGZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsNCj4gPiArICAgICB9DQo+ID4gKw0K PiA+ICsgICAgIHJ0YXNlX2ZyZWVfZGVzYyh0cCk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBydGFzZV9zaHV0ZG93bihzdHJ1Y3Qg cGNpX2RldiAqcGRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYg PSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG5ldGlm X3J1bm5pbmcoZGV2KSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHJ0YXNlX2Nsb3NlKGRldikg IT0gMCkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X2FsZXJ0KGRldiwgInVuYWJs ZSB0byBjbG9zZVxuIik7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHJ0YXNlX3Jlc2V0X2ludGVy cnVwdChwZGV2LCB0cCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX2dl dF9zdGF0czY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2 NA0KPiAqc3RhdHMpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBydGFzZV9j b3VudGVycyAqY291bnRlcnMgPSB0cC0+dGFsbHlfdmFkZHI7DQo+ID4gKyAgICAgZG1hX2FkZHJf dCBwYWRkciA9IHRwLT50YWxseV9wYWRkcjsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvdW50ZXJz KSB7DQo+ID4gKyAgICAgICAgICAgICBuZXRkZXZfc3RhdHNfdG9fc3RhdHM2NChzdGF0cywgJmRl di0+c3RhdHMpOw0KPiA+ICsgICAgICAgICAgICAgZGV2X2ZldGNoX3N3X25ldHN0YXRzKHN0YXRz LCBkZXYtPnRzdGF0cyk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgLyogRmV0Y2ggYWRkaXRp b25hbCBjb3VudGVyIHZhbHVlcyBtaXNzaW5nIGluIHN0YXRzIGNvbGxlY3RlZA0KPiBieSBkcml2 ZXIgZnJvbSB0YWxseQ0KPiA+ICsgICAgICAgICAgICAgICogY291bnRlcg0KPiA+ICsgICAgICAg ICAgICAgICovDQo+ID4gKyAgICAgICAgICAgICBydGFzZV9kdW1wX3RhbGx5X2NvdW50ZXIodHAs IHBhZGRyKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICBzdGF0cy0+dHhfZXJyb3JzID0gbGU2 NF90b19jcHUoY291bnRlcnMtPnR4X2Vycm9ycyk7DQo+ID4gKyAgICAgICAgICAgICBzdGF0cy0+ Y29sbGlzaW9ucyA9DQo+IGxlNjRfdG9fY3B1KGNvdW50ZXJzLT50eF9tdWx0aV9jb2xsaXNpb24p Ow0KPiA+ICsgICAgICAgICAgICAgc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0NCj4gbGU2NF90 b19jcHUoY291bnRlcnMtPnR4X2Fib3J0ZWQpOw0KPiA+ICsgICAgICAgICAgICAgc3RhdHMtPnJ4 X21pc3NlZF9lcnJvcnMgPQ0KPiBsZTY0X3RvX2NwdShjb3VudGVycy0+cnhfbWlzc2VkKTsNCj4g PiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHJ0YXNlX3ZsYW5fZmls dGVyKGNvbnN0IHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCwgdTggZW5hYmxlZCkNCj4gPiArew0K PiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAg ICB1MTYgdG1wID0gMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGVuYWJsZWQgPT0gMXUpIHsNCj4g PiArICAgICAgICAgICAgIC8qIFBGQ1IgKi8NCj4gPiArICAgICAgICAgICAgIHRtcCA9IFJUTF9S MTYoRkNSKTsNCj4gPiArICAgICAgICAgICAgIGlmICgodG1wICYgRkNSX1ZMQU5fRlRSX0VOKSA9 PSAwdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgUlRMX1cxNihGQ1IsICh1MTYpKHRtcCB8 IEZDUl9WTEFOX0ZUUl9FTikpOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIC8qIFBDUFIgKi8N Cj4gPiArICAgICAgICAgICAgIHRtcCA9IFJUTF9SMTYoUENQUik7DQo+ID4gKyAgICAgICAgICAg ICBpZiAoKHRtcCAmIFBDUFJfVkxBTl9GVFJfRU4pID09IDB1KQ0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBSVExfVzE2KFBDUFIsICh1MTYpKHRtcCB8DQo+IFBDUFJfVkxBTl9GVFJfRU4pKTsN Cj4gPiArDQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIC8qIFBGQ1IgKi8N Cj4gPiArICAgICAgICAgICAgIHRtcCA9IFJUTF9SMTYoRkNSKTsNCj4gPiArICAgICAgICAgICAg IGlmICgodG1wICYgRkNSX1ZMQU5fRlRSX0VOKSAhPSAwdSkNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgUlRMX1cxNihGQ1IsICh1MTYpKHRtcCAmDQo+IH5GQ1JfVkxBTl9GVFJfRU4pKTsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICAvKiBQQ1BSICovDQo+ID4gKyAgICAgICAgICAgICB0bXAg PSBSVExfUjE2KFBDUFIpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKCh0bXAgJiBQQ1BSX1ZMQU5f RlRSX0VOKSA9PSAwdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgUlRMX1cxNihQQ1BSLCAo dTE2KSh0bXAgJg0KPiB+UENQUl9WTEFOX0ZUUl9FTikpOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9k ZXZpY2UgKmRldiwgX19iZTE2IHByb3RvY29sLA0KPiB1MTYgdmlkKQ0KPiA+ICt7DQo+ID4gKyAg ICAgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAg ICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdTE2IGkg PSAwdTsNCj4gPiArICAgICB1MTYgdG1wX21lbSA9IDA7DQo+ID4gKyAgICAgaW50IHJldCA9IDA7 DQo+ID4gKw0KPiA+ICsgICAgIGlmIChiZTE2X3RvX2NwdShwcm90b2NvbCkgIT0gKHUxNilFVEhf UF84MDIxUSkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAgICAg ICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyogdmxhbiBm aWx0ZXIgdGFibGUgKi8NCj4gPiArICAgICBmb3IgKGkgPSAwdTsgaSA8IFZMQU5fRklMVEVSX0VO VFJZX05VTTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoKHRwLT52bGFuX2ZpbHRlcl9j dHJsICYgQklUKGkpKSA9PSAwdSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0cC0+dmxh bl9maWx0ZXJfY3RybCB8PSAodTMyKUJJVChpKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg dHAtPnZsYW5fZmlsdGVyX3ZpZFtpXSA9IHZpZDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg UlRMX1czMigoVkxBTl9FTlRSWV8wICsgKGkgKiA0dSkpLCAodmlkIHwNCj4gVkxBTl9FTlRSWV9D QVJFQklUKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0bXBfbWVtID0gUlRM X1IxNigoVkxBTl9FTlRSWV9NRU1fMCArDQo+ICgoaSAvIDJ1KSAqIDJ1KSkpOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICB0bXBfbWVtIHw9ICgodTE2KTB4MXUgPDwgKChpICUgMnUpICogOHUp KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgUlRMX1cxNigoVkxBTl9FTlRSWV9NRU1fMCAr ICgoaSAvIDJ1KSAqIDJ1KSksDQo+IHRtcF9tZW0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsg ICAgIGlmIChpID09IFZMQU5fRklMVEVSX0VOVFJZX05VTSkgew0KPiA+ICsgICAgICAgICAgICAg cmV0ID0gLUVOT01FTTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgLyog Y2hlY2sgdmxhbiBmaWx0ZXIgZW5hYmxlZCAqLw0KPiA+ICsgICAgICAgICAgICAgcnRhc2Vfdmxh bl9maWx0ZXIodHAsIDF1KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAg ICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV92bGFu X3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90b2NvbCwNCj4g dTE2IHZpZCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5l dGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1p b19hZGRyOw0KPiA+ICsgICAgIHUxNiBpID0gMHU7DQo+ID4gKyAgICAgdTE2IHRtcF9tZW0gPSAw Ow0KPiA+ICsgICAgIHMzMiByYyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChiZTE2X3RvX2Nw dShwcm90b2NvbCkgIT0gKHUxNilFVEhfUF84MDIxUSkgew0KPiA+ICsgICAgICAgICAgICAgcmMg PSAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7DQo+ID4gKyAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAvKiB2bGFuIGZpbHRlciB0YWJsZSAqLw0KPiA+ICsgICAgIGZvciAoaSA9 IDB1OyBpIDwgVkxBTl9GSUxURVJfRU5UUllfTlVNOyBpKyspIHsNCj4gPiArICAgICAgICAgICAg IGlmICh0cC0+dmxhbl9maWx0ZXJfdmlkW2ldID09IHZpZCkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICB0cC0+dmxhbl9maWx0ZXJfY3RybCAmPSAodTMyKSh+QklUKGkpKTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgdHAtPnZsYW5fZmlsdGVyX3ZpZFtpXSA9IDA7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIFJUTF9XMzIoKFZMQU5fRU5UUllfMCArIChpICogNHUpKSwgMCk7DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0bXBfbWVtID0gUlRMX1IxNigoVkxBTl9F TlRSWV9NRU1fMCArDQo+ICgoaSAvIDJ1KSAqIDJ1KSkpOw0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICB0bXBfbWVtICY9ICh+KCh1MTYpMHgxdSA8PCAoKGkgJSAydSkgKiA4dSkpKTsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgUlRMX1cxNigoVkxBTl9FTlRSWV9NRU1fMCArICgoaSAvIDJ1 KSAqIDJ1KSksDQo+IHRtcF9tZW0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsN Cj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIGNo ZWNrIHZsYW4gZmlsdGVyIGVuYWJsZWQgKi8NCj4gPiArICAgICBpZiAodHAtPnZsYW5fZmlsdGVy X2N0cmwgPT0gMHUpIHsNCj4gPiArICAgICAgICAgICAgIC8qIGRpc2FibGUgdmxhbiBmaWx0ZXIg Ki8NCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3ZsYW5fZmlsdGVyKHRwLCAwdSk7DQo+ID4gKyAg ICAgfQ0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByYzsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vfc2V0X2h3X2Nicyhjb25zdCBzdHJ1Y3QgcnRhc2Vf cHJpdmF0ZSAqdHAsIHUzMiBxdWV1ZSkNCj4gPiArew0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAq aW9hZGRyID0gdHAtPm1taW9fYWRkcjsNCj4gPiArICAgICB1MzIgaSA9IDA7DQo+ID4gKyAgICAg dTMyIGlkbGUgPSAodTMyKXRwLT50eF9xb3NbcXVldWVdLmlkbGVzbG9wZSAqIFJUQVNFXzFUX0NM T0NLOw0KPiA+ICsgICAgIHUzMiByZWdWID0gMDsNCj4gPiArDQo+ID4gKyAgICAgcmVnViA9IGlk bGUgLyBSVEFTRV8xVF9QT1dFUjsNCj4gPiArICAgICByZWdWIDw8PSBSVEFTRV9JRExFU0xPUEVf SU5UX1NISUZUOw0KPiA+ICsgICAgIGlkbGUgJT0gUlRBU0VfMVRfUE9XRVI7DQo+ID4gKyAgICAg Zm9yIChpID0gMDsgaSA8IFJUQVNFX0lETEVTTE9QRV9JTlRfU0hJRlQ7IGkrKykgew0KPiA+ICsg ICAgICAgICAgICAgaWRsZSAqPSAydTsNCj4gPiArICAgICAgICAgICAgIGlmICgoaWRsZSAvIFJU QVNFXzFUX1BPV0VSKSA9PSAxdSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmVnViB8PSAo KHUzMikweDF1IDw8DQo+IChSVEFTRV9JRExFU0xPUEVfSU5UX1NISUZUIC0gaSAtIDF1KSk7DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWRsZSAlPSBSVEFTRV8xVF9QT1dFUjsNCj4gPiArICAg ICB9DQo+ID4gKyAgICAgUlRMX1czMigoVFhRQ1JEVF8wICsgKHF1ZXVlICogNHUpKSwgcmVnVik7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2Vfc2V0dXBfdGNfY2JzKHN0cnVj dCBydGFzZV9wcml2YXRlICp0cCwgY29uc3Qgc3RydWN0DQo+IHRjX2Nic19xb3B0X29mZmxvYWQg KnFvcHQpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgcXVldWUgPSAodTMyKXFvcHQtPnF1ZXVlOw0K PiA+ICsNCj4gPiArICAgICAvKiByZWNvcmQgc2V0dGluZ3MgKi8NCj4gPiArICAgICB0cC0+dHhf cW9zW3F1ZXVlXS5oaWNyZWRpdCA9IHFvcHQtPmhpY3JlZGl0Ow0KPiA+ICsgICAgIHRwLT50eF9x b3NbcXVldWVdLmxvY3JlZGl0ID0gcW9wdC0+bG9jcmVkaXQ7DQo+ID4gKyAgICAgdHAtPnR4X3Fv c1txdWV1ZV0uaWRsZXNsb3BlID0gcW9wdC0+aWRsZXNsb3BlOw0KPiA+ICsgICAgIHRwLT50eF9x b3NbcXVldWVdLnNlbmRzbG9wZSA9IHFvcHQtPnNlbmRzbG9wZTsNCj4gPiArDQo+ID4gKyAgICAg Lyogc2V0IGhhcmR3YXJlIGNicyAqLw0KPiA+ICsgICAgIHJ0YXNlX3NldF9od19jYnModHAsIHF1 ZXVlKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgcnRhc2Vfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSB0Y19z ZXR1cF90eXBlIHR5cGUsDQo+IHZvaWQgKnR5cGVfZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKyAgICAgaW50 IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHN3aXRjaCAodHlwZSkgew0KPiA+ICsgICAgIGNh c2UgVENfU0VUVVBfUURJU0NfTVFQUklPOg0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgY2FzZSBUQ19TRVRVUF9CTE9DSzoNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ ICsgICAgIGNhc2UgVENfU0VUVVBfUURJU0NfQ0JTOg0KPiA+ICsgICAgICAgICAgICAgcmV0ID0g cnRhc2Vfc2V0dXBfdGNfY2JzKHRwLCB0eXBlX2RhdGEpOw0KPiA+ICsgICAgICAgICAgICAgYnJl YWs7DQo+ID4gKyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FT1BOT1RT VVBQOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX1BNDQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYs IHBtX21lc3NhZ2VfdCBzdGF0ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOw0KPiA+ICsNCj4gPiArICAgICAodm9pZClzdGF0ZTsNCj4gPiArDQo+ID4gKyAgICAgaWYg KCFuZXRpZl9ydW5uaW5nKGRldikpDQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiAr DQo+ID4gKyAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOw0KPiA+ICsNCj4gPiArICAgICBuZXRp Zl9jYXJyaWVyX29mZihkZXYpOw0KPiA+ICsNCj4gPiArICAgICBuZXRpZl9kZXZpY2VfZGV0YWNo KGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxh Z3MpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9WX0VOQUJM RUQpICE9IDB1KSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9pcnFfbWFza19hbmRfYWNrKHRw KTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2Z1bmNfZGlzYWJsZSh0cCk7DQo+ID4gKyAgICAg fSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX2h3X3Jlc2V0KGRldik7DQo+ID4gKyAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywg ZmxhZ3MpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHBjaV9zYXZlX3N0YXRlKHBkZXYp Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCBydGFzZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsg ICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ID4gKw0K PiA+ICsgICAgIHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsNCj4gPiArICAgICBw Y2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsNCj4gPiArICAgICBwY2lfZW5hYmxlX3dha2UocGRldiwg UENJX0QwLCAwKTsNCj4gPiArDQo+ID4gKyAgICAgLyogcmVzdG9yZSBsYXN0IG1vZGlmaWVkIG1h YyBhZGRyZXNzICovDQo+ID4gKyAgICAgcnRhc2VfcmFyX3NldCh0cCwgZGV2LT5kZXZfYWRkcik7 DQo+ID4gKw0KPiA+ICsgICAgIGlmICghbmV0aWZfcnVubmluZyhkZXYpKQ0KPiA+ICsgICAgICAg ICAgICAgZ290byBvdXQ7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX3dhaXRfZm9yX3F1aWVzY2Vu Y2UoZGV2KTsNCj4gPiArICAgICBuZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7DQo+ID4gKw0KPiA+ ICsgICAgIHJ0YXNlX3R4X2NsZWFyKHRwKTsNCj4gPiArICAgICBydGFzZV9yeF9jbGVhcih0cCk7 DQo+ID4gKw0KPiA+ICsgICAgIGlmIChydGFzZV9pbml0X3JpbmcoZGV2KSAhPSAwKQ0KPiA+ICsg ICAgICAgICAgICAgbmV0ZGV2X2FsZXJ0KGRldiwgInVuYWJsZSB0byBpbml0IHJpbmdcbiIpOw0K PiA+ICsNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9WX0VOQUJMRUQpICE9 IDB1KSB7DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9mdW5jX2VuYWJsZSh0cCk7DQo+ID4gKyAg ICAgICAgICAgICBydGFzZV9lbmFibGVfaHdfaW50ZXJydXB0KHRwKTsNCj4gPiArICAgICB9IGVs c2Ugew0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfaHdfY29uZmlnKGRldik7DQo+ID4gKyAgICAg ICAgICAgICAvKiBhbHdheXMgbGluaywgc28gc3RhcnQgdG8gdHJhbnNtaXQgJiByZWNlaXZlICov DQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19zdGFydChkZXYpOw0KPiA+ICsgICAgIH0NCj4g PiArICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7DQo+ID4gKyAgICAgbmV0aWZfd2FrZV9xdWV1 ZShkZXYpOw0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsjZW5kaWYgLyogQ09ORklHX1BNICovDQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Ry dWN0IHBjaV9kcml2ZXIgcnRhc2VfcGNpX2RyaXZlciA9IHsNCj4gPiArICAgICAubmFtZSA9IE1P RFVMRU5BTUUsDQo+ID4gKyAgICAgLmlkX3RhYmxlID0gcnRhc2VfcGNpX3RibCwNCj4gPiArICAg ICAucHJvYmUgPSBydGFzZV9pbml0X29uZSwNCj4gPiArICAgICAucmVtb3ZlID0gcnRhc2VfcmVt b3ZlX29uZSwNCj4gPiArICAgICAuc2h1dGRvd24gPSBydGFzZV9zaHV0ZG93biwNCj4gPiArI2lm ZGVmIENPTkZJR19QTQ0KPiA+ICsgICAgIC5zdXNwZW5kID0gcnRhc2Vfc3VzcGVuZCwNCj4gPiAr ICAgICAucmVzdW1lID0gcnRhc2VfcmVzdW1lLA0KPiA+ICsjZW5kaWYNCj4gPiArI2lmZGVmIENP TkZJR19TUklPVg0KPiA+ICsgICAgIC5zcmlvdl9jb25maWd1cmUgPSBydGFzZV9wY2lfc3Jpb3Zf Y29uZmlndXJlLA0KPiA+ICsjZW5kaWYNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qICBydGFzZSBz d2l0Y2ggY29udHJvbCBmdW5jdGlvbg0KPiA+ICsgKi8NCj4gDQo+IFBsZWFzZSB1c2Ugc3RhbmRh cmQga2VybmVsIG1lYW5zIGluc3RlYWQgb2YgcHJvcHJpZXRhcnkgaW50ZXJmYWNlcy4NCj4gDQo+ ID4gKyNkZWZpbmUgU1dDX0RSSVZFUl9OQU1FICAicnRhc2Vfc3djIg0KPiA+ICsjZGVmaW5lIFNX Q19EUklWRVJfTUFKT1IgMjAwDQo+ID4gKyNkZWZpbmUgU1dDX0NNRF9SRUdfR0VUICA3MA0KPiA+ ICsjZGVmaW5lIFNXQ19DTURfUkVHX1NFVCAgNzENCj4gPiArI2RlZmluZSBTV0NfQ01EX1RZUEVf OCAgIDANCj4gPiArI2RlZmluZSBTV0NfQ01EX1RZUEVfMTYgIDENCj4gPiArI2RlZmluZSBTV0Nf Q01EX1RZUEVfMzIgIDINCj4gPiArI2RlZmluZSBTV0NfUEFHRV9BRERSICAgIDB4ODAwMA0KPiA+ ICsjZGVmaW5lIFNXQ19QQUdFX01BU0sgICAgMHhGRkZGODAwMHUNCj4gPiArI2RlZmluZSBTV0Nf QUREUl9NQVNLICAgIDB4MDAwMDdGRkZ1DQo+ID4gKw0KPiA+ICsjaWZkZWYgU1dDX0RSSVZFUl9E QkcNCj4gPiArI2RlZmluZSBTV0NfRFJJVkVSX0lORk8oZm10LCBhcmcuLi4pIHByX2luZm8oIiVz OiVkICIgZm10LCBfX2Z1bmNfXywNCj4gX19MSU5FX18sICMjYXJnKQ0KPiA+ICsjZWxzZQ0KPiA+ ICsjZGVmaW5lIFNXQ19EUklWRVJfSU5GTyhmbXQsIGFyZy4uLikNCj4gPiArI2VuZGlmDQo+ID4g Kw0KPiA+ICtzdHJ1Y3QgcnRhc2Vfc3djX2NtZF90IHsNCj4gPiArICAgICB1OCB0eXBlOw0KPiA+ ICsgICAgIHUzMiByZWdfYWRkcjsNCj4gPiArICAgICB1MzIgcmVnX3ZhbHVlOw0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RydWN0IHJ0YXNlX3N3Y19kZXZfdCB7DQo+ID4gKyAgICAgc3RydWN0IGNk ZXYgc3djX2NkZXY7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICpzd2NfaW9hZGRyOw0KPiA+ICsg ICAgIHUxNiBpbml0X2ZsYWc7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHJ0 YXNlX3N3Y19kZXZfdCBydGFzZV9zd2NfZGV2aWNlOw0KPiA+ICtzdGF0aWMgc3RydWN0IHBjaV9k ZXZpY2VfaWQgcnRhc2Vfc3djX3BjaV90YWJsZVtdID0gew0KPiA+ICsgICAgIHsNCj4gPiArICAg ICAgICAgICAgIFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLCAweDkwNkYpLA0KPiA+ ICsgICAgIH0sDQo+ID4gKyAgICAgew0KPiA+ICsgICAgICAgICAgICAgMCwNCj4gPiArICAgICB9 LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBydGFzZV9zd2Nfb3BlbihzdHJ1Y3Qg aW5vZGUgKnBfaW5vZGUsIHN0cnVjdCBmaWxlICpwX2ZpbGUpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgcnRhc2Vfc3djX2Rldl90ICpzd2NfZGV2ID0NCj4gPiArICAgICAgICAgICAgIGNvbnRh aW5lcl9vZihwX2lub2RlLT5pX2NkZXYsIHN0cnVjdCBydGFzZV9zd2NfZGV2X3QsDQo+IHN3Y19j ZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgcF9maWxlLT5wcml2YXRlX2RhdGEgPSBzd2NfZGV2Ow0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBydGFzZV9zd2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnBfaW5vZGUsIHN0cnVjdCBmaWxlICpw X2ZpbGUpDQo+ID4gK3sNCj4gPiArICAgICAodm9pZClwX2lub2RlOw0KPiA+ICsgICAgICh2b2lk KXBfZmlsZTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHJ0YXNlX3N3Y19nZXRfZnJvbV9wdG0oc3RydWN0IHJ0YXNlX3B0bV9jbWRf dCAqY21kKQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgdm9pZCBfX2lvbWVtICppb2FkZHIgPSBy dGFzZV9zd2NfZGV2aWNlLnN3Y19pb2FkZHI7DQo+ID4gKyAgICAgdTMyIGFkZHIgPSBjbWQtPnJl Z19hZGRyICYgKHUzMilTV0NfQUREUl9NQVNLOw0KPiA+ICsNCj4gPiArICAgICBjbWQtPnJlZ192 YWx1ZSA9IFJUTF9SMzIoYWRkcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzMzIgcnRh c2VfcHRtX2dldF9jbG9jayhjb25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+ IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2Fk ZHIgPSBydGFzZV9zd2NfZGV2aWNlLnN3Y19pb2FkZHI7DQo+ID4gKyAgICAgdm9pZCAqdXNlcmFk ZHIgPSAodm9pZCAqKWlmci0+aWZyX2RhdGE7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3B0bV9j bWRfdCBjbWQ7DQo+ID4gKyAgICAgczMyIGk7DQo+ID4gKyAgICAgdTMyIHBhZ2VfYWRkcjsNCj4g PiArICAgICB1NjQgdG1wID0gMDsNCj4gPiArICAgICBzMzIgcmV0ID0gMDsNCj4gPiArDQo+ID4g KyAgICAgbWVtc2V0KCZjbWQsIDAsIHNpemVvZihzdHJ1Y3QgcnRhc2VfcHRtX2NtZF90KSk7DQo+ ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1c2VyYWRkciwgc2l6ZW9m KHN0cnVjdA0KPiBydGFzZV9wdG1fY21kX3QpKSAhPSAwdSkgew0KPiA+ICsgICAgICAgICAgICAg cmV0ID0gLUVGQVVMVDsNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgcGFnZV9hZGRyID0gY21kLnJlZ19hZGRyICYgU1dDX1BBR0VfTUFT SzsNCj4gPiArICAgICBSVExfVzMyKFNXQ19QQUdFX0FERFIsIHBhZ2VfYWRkcik7DQo+ID4gKw0K PiA+ICsgICAgIGNtZC5wdHBfc2Vjb25kID0gMDsNCj4gPiArICAgICBjbWQucHRwX25hbm9fc2Vj b25kID0gMDsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgew0KPiA+ ICsgICAgICAgICAgICAgcnRhc2Vfc3djX2dldF9mcm9tX3B0bSgmY21kKTsNCj4gPiArICAgICAg ICAgICAgIGNtZC5yZWdfYWRkciArPSA0dTsNCj4gPiArICAgICAgICAgICAgIGlmIChpID09IDAp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY21kLnB0cF9uYW5vX3NlY29uZCA9IGNtZC5y ZWdfdmFsdWU7DQo+ID4gKyAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICB0bXAgPSAoKHU2NCljbWQucmVnX3ZhbHVlIDw8ICgzMnUgKiAoKHU2NClpIC0NCj4g MXUpKSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNtZC5wdHBfc2Vjb25kICs9IHRtcDsN Cj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlvYWRk ciA9IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgY21kLnB0bV90aW1lID0gMDsNCj4gPiArDQo+ ID4gKyAgICAgZm9yIChpID0gMTsgaSA8IDM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgY21k LnB0bV90aW1lICs9ICgodTY0KVJUTF9SMzIoY21kLnB0bV9hZGRyKSA8PCAoMzJ1ICoNCj4gKCh1 NjQpaSAtIDF1KSkpOw0KPiA+ICsgICAgICAgICAgICAgY21kLnB0bV9hZGRyICs9IDR1Ow0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmNt ZCwgc2l6ZW9mKHN0cnVjdCBydGFzZV9wdG1fY21kX3QpKSAhPQ0KPiAwdSkNCj4gPiArICAgICAg ICAgICAgIHJldCA9IC1FRkFVTFQ7DQo+ID4gKw0KPiA+ICtvdXQ6DQo+ID4gKyAgICAgcmV0dXJu IHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHMzMiBydGFzZV9wdG1fc3djX2dldChj b25zdCBzdHJ1Y3QgaWZyZXEgKmlmciwgY29uc3Qgc3RydWN0DQo+IHJ0YXNlX3ByaXZhdGUgKnRw KQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSBydGFzZV9zd2NfZGV2 aWNlLnN3Y19pb2FkZHI7DQo+ID4gKyAgICAgdm9pZCAqdXNlcmFkZHIgPSAodm9pZCAqKWlmci0+ aWZyX2RhdGE7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3B0bV9jbWRfdCBjbWQ7DQo+ID4gKyAg ICAgdTMyIHBhZ2VfYWRkcjsNCj4gPiArICAgICBzMzIgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAg ICAgKHZvaWQpdHA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjb3B5X2Zyb21fdXNlcigmY21kLCB1 c2VyYWRkciwgc2l6ZW9mKHN0cnVjdA0KPiBydGFzZV9wdG1fY21kX3QpKSAhPSAwdSkgew0KPiA+ ICsgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0 Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcGFnZV9hZGRyID0gY21kLnJlZ19hZGRy ICYgU1dDX1BBR0VfTUFTSzsNCj4gPiArICAgICBSVExfVzMyKFNXQ19QQUdFX0FERFIsIHBhZ2Vf YWRkcik7DQo+ID4gKyAgICAgcnRhc2Vfc3djX2dldF9mcm9tX3B0bSgmY21kKTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmNtZCwgc2l6ZW9mKHN0cnVjdCBy dGFzZV9wdG1fY21kX3QpKSAhPQ0KPiAwdSkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVG QVVMVDsNCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ ID4gK291dDoNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgczMyIHJ0YXNlX3B0bV9zd2Nfc2V0KGNvbnN0IHN0cnVjdCBpZnJlcSAqaWZyLCBjb25zdCBz dHJ1Y3QNCj4gcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9t ZW0gKmlvYWRkciA9IHJ0YXNlX3N3Y19kZXZpY2Uuc3djX2lvYWRkcjsNCj4gPiArICAgICBjb25z dCB2b2lkICp1c2VyYWRkciA9ICh2b2lkICopaWZyLT5pZnJfZGF0YTsNCj4gPiArICAgICBzdHJ1 Y3QgcnRhc2VfcHRtX2NtZF90IGNtZDsNCj4gPiArICAgICB1MzIgcGFnZV9hZGRyOw0KPiA+ICsg ICAgIHUzMiBhZGRyOw0KPiA+ICsgICAgIHMzMiByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAgICAo dm9pZCl0cDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJh ZGRyLCBzaXplb2Yoc3RydWN0DQo+IHJ0YXNlX3B0bV9jbWRfdCkpICE9IDB1KSB7DQo+ID4gKyAg ICAgICAgICAgICByZXQgPSAtRUZBVUxUOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgICAgICBwYWdlX2FkZHIgPSBjbWQucmVnX2FkZHIgJiBTV0NfUEFHRV9NQVNLOw0KPiA+ICsg ICAgICAgICAgICAgYWRkciA9IGNtZC5yZWdfYWRkciAmIFNXQ19BRERSX01BU0s7DQo+ID4gKyAg ICAgICAgICAgICBSVExfVzMyKFNXQ19QQUdFX0FERFIsIHBhZ2VfYWRkcik7DQo+ID4gKyAgICAg ICAgICAgICBSVExfVzMyKGFkZHIsIGNtZC5yZWdfdmFsdWUpOw0KPiA+ICsgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg cnRhc2Vfc3djX3JlZ19nZXQoc3RydWN0IHJ0YXNlX3N3Y19jbWRfdCAqY21kKQ0KPiA+ICt7DQo+ ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSBydGFzZV9zd2NfZGV2aWNlLnN3Y19pb2Fk ZHI7DQo+ID4gKyAgICAgdTMyIHBhZ2VfYWRkciA9IGNtZC0+cmVnX2FkZHIgJiBTV0NfUEFHRV9N QVNLOw0KPiA+ICsgICAgIHUzMiBhZGRyID0gY21kLT5yZWdfYWRkciAmIFNXQ19BRERSX01BU0s7 DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMzIoU1dDX1BBR0VfQUREUiwgcGFnZV9hZGRyKTsNCj4g PiArICAgICBzd2l0Y2ggKGNtZC0+dHlwZSkgew0KPiA+ICsgICAgIGNhc2UgU1dDX0NNRF9UWVBF Xzg6DQo+ID4gKyAgICAgICAgICAgICBjbWQtPnJlZ192YWx1ZSA9IFJUTF9SOChhZGRyKTsNCj4g PiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgU1dDX0NNRF9UWVBFXzE2Og0K PiA+ICsgICAgICAgICAgICAgY21kLT5yZWdfdmFsdWUgPSBSVExfUjE2KGFkZHIpOw0KPiA+ICsg ICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgY2FzZSBTV0NfQ01EX1RZUEVfMzI6DQo+ID4g KyAgICAgZGVmYXVsdDoNCj4gPiArICAgICAgICAgICAgIGNtZC0+cmVnX3ZhbHVlID0gUlRMX1Iz MihhZGRyKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vfc3djX3JlZ19zZXQoY29uc3Qgc3RydWN0IHJ0 YXNlX3N3Y19jbWRfdCAqY21kKQ0KPiA+ICt7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICppb2Fk ZHIgPSBydGFzZV9zd2NfZGV2aWNlLnN3Y19pb2FkZHI7DQo+ID4gKyAgICAgdTMyIHBhZ2VfYWRk ciA9IGNtZC0+cmVnX2FkZHIgJiBTV0NfUEFHRV9NQVNLOw0KPiA+ICsgICAgIHUzMiBhZGRyID0g Y21kLT5yZWdfYWRkciAmIFNXQ19BRERSX01BU0s7DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMzIo U1dDX1BBR0VfQUREUiwgcGFnZV9hZGRyKTsNCj4gPiArICAgICBzd2l0Y2ggKGNtZC0+dHlwZSkg ew0KPiA+ICsgICAgIGNhc2UgU1dDX0NNRF9UWVBFXzg6DQo+ID4gKyAgICAgICAgICAgICBSVExf VzgoYWRkciwgKHU4KWNtZC0+cmVnX3ZhbHVlKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgIGNhc2UgU1dDX0NNRF9UWVBFXzE2Og0KPiA+ICsgICAgICAgICAgICAgUlRMX1cx NihhZGRyLCAodTE2KWNtZC0+cmVnX3ZhbHVlKTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0K PiA+ICsgICAgIGNhc2UgU1dDX0NNRF9UWVBFXzMyOg0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4g KyAgICAgICAgICAgICBSVExfVzMyKGFkZHIsIGNtZC0+cmVnX3ZhbHVlKTsNCj4gPiArICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGxv bmcgcnRhc2Vfc3djX2lvY3RsKHN0cnVjdCBmaWxlICpwX2ZpbGUsIHVuc2lnbmVkIGludCBjbWQs IHVuc2lnbmVkDQo+IGxvbmcgYXJnKQ0KPiA+ICt7DQo+ID4gKyAgICAgbG9uZyByYyA9IDA7DQo+ ID4gKyAgICAgc3RydWN0IHJ0YXNlX3N3Y19jbWRfdCBzd19jbWQ7DQo+ID4gKw0KPiA+ICsgICAg ICh2b2lkKXBfZmlsZTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJ0YXNlX3N3Y19kZXZpY2UuaW5p dF9mbGFnID09IDF1KSB7DQo+ID4gKyAgICAgICAgICAgICByYyA9IC1FTlhJTzsNCj4gPiArICAg ICAgICAgICAgIGdvdG8gb3V0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmMgPSAo czY0KShjb3B5X2Zyb21fdXNlcigmc3dfY21kLCAodm9pZCAqKWFyZywgc2l6ZW9mKHN0cnVjdA0K PiBydGFzZV9zd2NfY21kX3QpKSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChyYyAhPSAwKSB7DQo+ ID4gKyAgICAgICAgICAgICBTV0NfRFJJVkVSX0lORk8oInJ0YXNlX3N3YyBjb3B5X2Zyb21fdXNl ciBmYWlsZWQuIik7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHN3aXRj aCAoY21kKSB7DQo+ID4gKyAgICAgICAgICAgICBjYXNlIFNXQ19DTURfUkVHX0dFVDoNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgcnRhc2Vfc3djX3JlZ19nZXQoJnN3X2NtZCk7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHJjID0gKHM2NCkoY29weV90b191c2VyKCh2b2lkICopYXJnLCAm c3dfY21kLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplb2Yoc3RydWN0DQo+IHJ0YXNlX3N3Y19jbWRfdCkpKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgY2FzZSBTV0NfQ01EX1JF R19TRVQ6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJ0YXNlX3N3Y19yZWdfc2V0KCZzd19j bWQpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IChzNjQpKGNvcHlfdG9fdXNlcigo dm9pZCAqKWFyZywgJnN3X2NtZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdA0KPiBydGFzZV9zd2NfY21kX3QpKSk7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGRl ZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOT1RUWTsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAg fQ0KPiA+ICsNCj4gPiArb3V0Og0KPiA+ICsgICAgIHJldHVybiByYzsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnRhc2Vfc3djX2ZvcHMg PSB7DQo+ID4gKyAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKyAgICAgLm9wZW4gPSBy dGFzZV9zd2Nfb3BlbiwNCj4gPiArICAgICAucmVsZWFzZSA9IHJ0YXNlX3N3Y19yZWxlYXNlLA0K PiA+ICsgICAgIC51bmxvY2tlZF9pb2N0bCA9IHJ0YXNlX3N3Y19pb2N0bCwNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgcnRhc2Vfc3djX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpw ZGV2LCBjb25zdCBzdHJ1Y3QNCj4gcGNpX2RldmljZV9pZCAqZW50KQ0KPiA+ICt7DQo+ID4gKyAg ICAgaW50IHJjOw0KPiA+ICsgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyID0gTlVMTDsNCj4gPiAr ICAgICBkZXZfdCBkZXZubyA9IE1LREVWKFNXQ19EUklWRVJfTUFKT1IsIDApOw0KPiA+ICsNCj4g PiArICAgICAodm9pZCllbnQ7DQo+ID4gKw0KPiA+ICsgICAgIHJ0YXNlX3N3Y19kZXZpY2UuaW5p dF9mbGFnID0gMTsNCj4gPiArICAgICByYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KPiA+ ICsNCj4gPiArICAgICBpZiAocmMgIT0gMCkNCj4gPiArICAgICAgICAgICAgIFNXQ19EUklWRVJf SU5GTygicnRhc2Vfc3djIGVuYWJsZSBkZXZpY2UgZmFpbGVkLiIpOw0KPiA+ICsgICAgIGVsc2UN Cj4gPiArICAgICAgICAgICAgIHJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBTV0NfRFJJ VkVSX05BTUUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAocmMgPT0gMCkgew0KPiA+ICsgICAgICAg ICAgICAgcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsDQo+IERNQV9C SVRfTUFTSyg2NCkpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHJjICE9IDApDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJjID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2 LA0KPiBETUFfQklUX01BU0soMzIpKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlm IChyYyAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBTV0NfRFJJVkVSX0lORk8oInJ0YXNlX3N3 YyByZXF1ZXN0IHJlZ2lvbnMgZmFpbGVkLiIpOw0KPiA+ICsgICAgICAgICAgICAgcGNpX2Rpc2Fi bGVfZGV2aWNlKHBkZXYpOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBw Y2lfc2V0X21hc3RlcihwZGV2KTsNCj4gPiArICAgICAgICAgICAgIGlvYWRkciA9IGlvcmVtYXAo cGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLA0KPiBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDAp KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmICghaW9hZGRyKSB7DQo+ID4gKyAg ICAgICAgICAgICBTV0NfRFJJVkVSX0lORk8oInJ0YXNlX3N3YyBpb3JlbWFwIGZhaWxlZC4iKTsN Cj4gPiArICAgICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7DQo+ID4gKyAgICAg ICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4g PiArICAgICAgICAgICAgIHJjID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXZubywgMSwNCj4g U1dDX0RSSVZFUl9OQU1FKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGlmIChyYyAh PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBTV0NfRFJJVkVSX0lORk8oInJ0YXNlX3N3YyByZWdp c3RlciBjaGFyYWN0ZXIgZGV2aWNlDQo+IGZhaWxlZC4iKTsNCj4gPiArICAgICAgICAgICAgIGlv dW5tYXAoaW9hZGRyKTsNCj4gPiArICAgICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRl dik7DQo+ID4gKyAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7DQo+ID4gKyAg ICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3N3Y19kZXZpY2Uuc3djX2lvYWRk ciA9IGlvYWRkcjsNCj4gPiArICAgICAgICAgICAgIGNkZXZfaW5pdCgmcnRhc2Vfc3djX2Rldmlj ZS5zd2NfY2RldiwgJnJ0YXNlX3N3Y19mb3BzKTsNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3N3 Y19kZXZpY2Uuc3djX2NkZXYub3duZXIgPSBUSElTX01PRFVMRTsNCj4gPiArICAgICAgICAgICAg IGNkZXZfYWRkKCZydGFzZV9zd2NfZGV2aWNlLnN3Y19jZGV2LCBkZXZubywgMSk7DQo+ID4gKyAg ICAgICAgICAgICBydGFzZV9zd2NfZGV2aWNlLmluaXRfZmxhZyA9IDA7DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gcmM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIHJ0YXNlX3N3Y19yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ ID4gKyAgICAgaW91bm1hcChydGFzZV9zd2NfZGV2aWNlLnN3Y19pb2FkZHIpOw0KPiA+ICsgICAg IHBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7DQo+ID4gKyAgICAgcGNpX2Rpc2FibGVfZGV2aWNl KHBkZXYpOw0KPiA+ICsgICAgIGNkZXZfZGVsKCZydGFzZV9zd2NfZGV2aWNlLnN3Y19jZGV2KTsN Cj4gPiArICAgICB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYoU1dDX0RSSVZFUl9NQUpP UiwgMCksIDEpOw0KPiA+ICsgICAgIHJ0YXNlX3N3Y19kZXZpY2UuaW5pdF9mbGFnID0gMTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0YXNlX3N3Y19wY2lf ZHJpdmVyID0gew0KPiA+ICsgICAgIC5uYW1lID0gU1dDX0RSSVZFUl9OQU1FLA0KPiA+ICsgICAg IC5pZF90YWJsZSA9IHJ0YXNlX3N3Y19wY2lfdGFibGUsDQo+ID4gKyAgICAgLnByb2JlID0gcnRh c2Vfc3djX2luaXRfb25lLA0KPiA+ICsgICAgIC5yZW1vdmUgPSBydGFzZV9zd2NfcmVtb3ZlX29u ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19pbml0IHJ0YXNlX2luaXRfbW9k dWxlKHZvaWQpDQo+ID4gK3sNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAg ICAgd29ya19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJydGFzZV93b3Jr X3F1ZXVlIik7DQo+IA0KPiBXaHkgZG9uJ3QgeW91IHVzZSBvbmUgb2YgdGhlIHN5c3RlbSB3b3Jr cXVldWVzPw0KPiANCj4gPiArICAgICBpZiAoIXdvcmtfcXVldWUpIHsNCj4gPiArICAgICAgICAg ICAgIHJldCA9IC1FTk9NRU07DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArI2lmZGVmIEVOQUJM RV9SVEFTRV9QUk9DRlMNCj4gPiArICAgICAgICAgICAgIHJ0YXNlX3Byb2NfbW9kdWxlX2luaXQo KTsNCj4gPiArI2VuZGlmDQo+ID4gKyAgICAgICAgICAgICByZXQgPSBwY2lfcmVnaXN0ZXJfZHJp dmVyKCZydGFzZV9wY2lfZHJpdmVyKTsNCj4gPiArICAgICAgICAgICAgIGlmIChyZXQgIT0gMCkg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3F1ZXVl KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcHJfYWxlcnQoInJ0YXNlX3BjaV9kcml2ZXIg cmVnaXN0ZXIgZmFpbGVkLiIpOw0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnRhc2Vfc3djX3Bj aV9kcml2ZXIpOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAg IGlmIChyZXQgIT0gMCkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBwY2lfdW5yZWdpc3Rl cl9kcml2ZXIoJnJ0YXNlX3BjaV9kcml2ZXIpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBk ZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3F1ZXVlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg cHJfYWxlcnQoInJ0YXNlX3N3Y19wY2lfZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZC4iKTsNCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCBydGFzZV9jbGVhbnVwX21v ZHVsZSh2b2lkKQ0KPiA+ICt7DQo+ID4gKyAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZydGFz ZV9zd2NfcGNpX2RyaXZlcik7DQo+ID4gKw0KPiA+ICsgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZl cigmcnRhc2VfcGNpX2RyaXZlcik7DQo+ID4gKyNpZmRlZiBFTkFCTEVfUlRBU0VfUFJPQ0ZTDQo+ ID4gKyAgICAgaWYgKHJ0YXNlX3Byb2MpIHsNCj4gPiArICAgICAgICAgICAgIHJlbW92ZV9wcm9j X3N1YnRyZWUoTU9EVUxFTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOw0KPiA+ICsgICAgICAgICAg ICAgcnRhc2VfcHJvYyA9IE5VTEw7DQo+ID4gKyAgICAgfQ0KPiA+ICsjZW5kaWYNCj4gPiArICAg ICBkZXN0cm95X3dvcmtxdWV1ZSh3b3JrX3F1ZXVlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArbW9k dWxlX2luaXQocnRhc2VfaW5pdF9tb2R1bGUpOw0KPiA+ICttb2R1bGVfZXhpdChydGFzZV9jbGVh bnVwX21vZHVsZSk7DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0 ZWsvcnRhc2UvcnRhc2Vfc3Jpb3YuYw0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsv cnRhc2UvcnRhc2Vfc3Jpb3YuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXgg MDAwMDAwMDAwMDAwLi45NDQxZDU5YTMyNzENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIv ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9zcmlvdi5jDQo+ID4gQEAg LTAsMCArMSwzMjggQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN Cj4gPiArLyoNCj4gPiArICogIENvcHlyaWdodChjKSAyMDIzIFJlYWx0ZWsgU2VtaWNvbmR1Y3Rv ciBDb3JwLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KPiA+ICsgKg0KPiA+ICsgKiAgQXV0aG9yOg0K PiA+ICsgKiAgUmVhbHRlayBBUkQxIHNvZnR3YXJlIHRlYW0NCj4gPiArICovDQo+ID4gKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L3J0bmV0bGluay5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInJ0YXNlLmgiDQo+ID4gKyNp bmNsdWRlICJydGFzZV9zcmlvdi5oIg0KPiA+ICsNCj4gPg0KPiArLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioq KioqKioqKioNCj4gPiArICogIEZ1bmN0aW9uDQo+ID4gKw0KPiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioq KioqKioqLw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX2FsbG9jYXRlX3ZmX2RhdGEoc3RydWN0IHJ0 YXNlX3ByaXZhdGUgKnRwLCBpbnQgbnVtX3ZmcykNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQg PSAwOw0KPiA+ICsNCj4gPiArICAgICB0cC0+dmZfaW5mbyA9IGtjYWxsb2MoKHU2NCludW1fdmZz LCBzaXplb2Yoc3RydWN0IHZmX2luZm8pLA0KPiBHRlBfS0VSTkVMKTsNCj4gPiArICAgICBpZiAo IXRwLT52Zl9pbmZvKQ0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsNCj4gPiArICAg ICBlbHNlDQo+ID4gKyAgICAgICAgICAgICB0cC0+bnVtX3ZmcyA9ICh1MTYpbnVtX3ZmczsNCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgcnRhc2VfZ2V0X3Zmcyhjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHApDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wZGV2Ow0KPiA+ICsgICAgIHN0 cnVjdCBwY2lfZGV2ICp2Zl9wZGV2ID0gTlVMTDsNCj4gPiArICAgICB1MTYgdmVuZG9yID0gcGRl di0+dmVuZG9yOw0KPiA+ICsgICAgIGludCBpbmRleCA9IDA7DQo+ID4gKyAgICAgdTE2IHZmX2lk ID0gMDsNCj4gPiArICAgICBpbnQgc3Jpb3ZfcG9zID0gMDsNCj4gPiArDQo+ID4gKyAgICAgc3Jp b3ZfcG9zID0gKHMzMilwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LA0KPiBQQ0lfRVhUX0NB UF9JRF9TUklPVik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChzcmlvdl9wb3MgPT0gMCkgew0KPiA+ ICsgICAgICAgICAgICAgc3Jpb3Zfd2FybigiXHRjYW4ndCBmaW5kIHNyaW92IHBvc2l0aW9uLiIp Ow0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBwY2lfcmVhZF9jb25maWdf d29yZChwZGV2LCBzcmlvdl9wb3MgKyBQQ0lfU1JJT1ZfVkZfRElELA0KPiAmdmZfaWQpOw0KPiA+ ICsgICAgICAgICAgICAgc3Jpb3ZfaW5mbygicnRhc2UgVkYgRGV2aWNlIElEID0gJTA0eCIsIHZm X2lkKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICB2Zl9wZGV2ID0gcGNpX2dldF9kZXZpY2Uo dmVuZG9yLCB2Zl9pZCwgTlVMTCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgZm9yICg7IHZm X3BkZXYgIT0gTlVMTDsgdmZfcGRldiA9IHBjaV9nZXRfZGV2aWNlKHZlbmRvciwNCj4gdmZfaWQs IHZmX3BkZXYpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICh2Zl9wZGV2LT5pc192 aXJ0Zm4gPT0gMHUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 DQo+ID4gKw0KPiA+ICsjaWZkZWYgQ09ORklHX1BDSV9JT1YNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgaWYgKHZmX3BkZXYtPnBoeXNmbiAhPSBwZGV2KQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICBwY2lfZGV2X2dldCh2Zl9wZGV2KTsNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgdHAtPnZmX2luZm9baW5kZXhdLnZmX3BjaV9kZXYgPSB2Zl9wZGV2Ow0KPiA+ ICsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKCsraW5kZXggPj0gKHMzMil0cC0+bnVt X3ZmcykNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPiArICAg ICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIHNyaW92X2luZm8oIiVzLi4uaW5kZXggPSAl aSIsIF9fZnVuY19fLCBpbmRleCk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgdm9pZCBydGFzZV9zcmlvdl9od19zZXR0aW5ncyhzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAq dHApDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2Fk ZHI7DQo+ID4gKyAgICAgdTE2IHRtcF9yZWcgPSAwOw0KPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQo+ID4gKw0KPiA+ICsgICAgIHNyaW92X2luZm8oIiVzLi4udmZfbnVtID0gJWkiLCBf X2Z1bmNfXywgdHAtPm51bV92ZnMpOw0KPiA+ICsgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+ bG9jaywgZmxhZ3MpOw0KPiA+ICsgICAgIGlmICh0cC0+bnVtX3ZmcyAhPSAwdSkgew0KPiA+ICsg ICAgICAgICAgICAgLyogc2VsZWN0IHJ4cSBudW1iZXIgKi8NCj4gPiArICAgICAgICAgICAgIHRt cF9yZWcgPSBSVExfUjE2KFZRQ1RSTCk7DQo+ID4gKyAgICAgICAgICAgICB0bXBfcmVnICY9ICh1 MTYpKH4oMHg3dSA8PCAydSkpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKHRwLT5udW1fdmZzID09 IDF1KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0bXBfcmVnIHw9ICgweDN1IDw8IDJ1KTsN Cj4gPiArICAgICAgICAgICAgIGVsc2UgaWYgKHRwLT5udW1fdmZzIDw9IDN1KQ0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICB0bXBfcmVnIHw9ICgweDR1IDw8IDJ1KTsNCj4gPiArICAgICAgICAg ICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdG1wX3JlZyB8PSAoMHg1dSA8PCAy dSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgUlRMX1cxNihWUUNUUkwsIHRtcF9yZWcpOw0K PiA+ICsgICAgICAgICAgICAgc3Jpb3ZfaW5mbygiVlFDVFJMID0gJTA0eCIsIFJUTF9SMTYoVlFD VFJMKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgLyogTWFpbGJveCBpbnRlcnJ1cHQgbWFz ayAqLw0KPiA+ICsgICAgICAgICAgICAgUlRMX1c4KFBGTVNHSU1SLCAweDdGKTsNCj4gPiArDQo+ ID4gKyAgICAgICAgICAgICB0cC0+c3dfZmxhZyB8PSAodTMyKVNXRl9TUklPVl9FTkFCTEVEOw0K PiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAvKiByZXN0b3JlIHJ4cSBudW1i ZXIgVEJEOiByZXN0b3JlIFBGIHJ4cSAqLw0KPiA+ICsgICAgICAgICAgICAgdG1wX3JlZyA9IFJU TF9SMTYoVlFDVFJMKTsNCj4gPiArICAgICAgICAgICAgIHRtcF9yZWcgJj0gKHUxNikofigweDd1 IDw8IDJ1KSk7DQo+ID4gKyAgICAgICAgICAgICB0bXBfcmVnIHw9ICgweDJ1IDw8IDJ1KTsNCj4g PiArICAgICAgICAgICAgIFJUTF9XMTYoVlFDVFJMLCB0bXBfcmVnKTsNCj4gPiArICAgICAgICAg ICAgIHNyaW92X2luZm8oIlZRQ1RSTCA9ICUwNHgiLCBSVExfUjE2KFZRQ1RSTCkpOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgIC8qIE1haWxib3ggaW50ZXJydXB0IG1hc2sgKi8NCj4gPiArICAg ICAgICAgICAgIFJUTF9XOChQRk1TR0lNUiwgMHgwKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAg ICB0cC0+c3dfZmxhZyAmPSAodTMyKSh+U1dGX1NSSU9WX0VOQUJMRUQpOw0KPiA+ICsgICAgIH0N Cj4gPiArICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzMzIgcnRhc2VfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcnRhc2VfcHJp dmF0ZSAqdHApDQo+ID4gK3sNCj4gPiArICAgICB1MTYgbnVtX3ZmcyA9IHRwLT5udW1fdmZzOw0K PiA+ICsgICAgIHUxNiBpbmRleCA9IDA7DQo+ID4gKyAgICAgczMyIHJldCA9IDA7DQo+ID4gKw0K PiA+ICsgICAgIHRwLT5udW1fdmZzID0gMDsNCj4gPiArICAgICBmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBudW1fdmZzOyBpbmRleCsrKSB7DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2Rl diAqdmZfcGRldiA9IHRwLT52Zl9pbmZvW2luZGV4XS52Zl9wY2lfZGV2Ow0KPiA+ICsNCj4gPiAr ICAgICAgICAgICAgIGlmICh2Zl9wZGV2KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBj aV9kZXZfcHV0KHZmX3BkZXYpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB0cC0+dmZfaW5m b1tpbmRleF0udmZfcGNpX2RldiA9IE5VTEw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAg ICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKiBmcmVlIHZmX2luZm8gKi8NCj4gPiArICAgICBrZnJl ZSh0cC0+dmZfaW5mbyk7DQo+ID4gKyAgICAgdHAtPnZmX2luZm8gPSBOVUxMOw0KPiA+ICsNCj4g PiArICAgICAvKiBwY2kgZGlzYWJlIHNyaW92Ki8NCj4gPiArICAgICBpZiAocGNpX3Zmc19hc3Np Z25lZCh0cC0+cGRldikgIT0gMCkgew0KPiA+ICsgICAgICAgICAgICAgc3Jpb3Zfd2FybigiVkZz IGFyZSBhc3NpZ25lZCAhIik7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRVBFUk07DQo+ID4g KyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIHBjaV9kaXNhYmxlX3NyaW92KHRwLT5w ZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgICAvKiBzcmlvdiBoYXJkd2FyZSBzZXR0aW5n cyAqLw0KPiA+ICsgICAgICAgICAgICAgcnRhc2Vfc3Jpb3ZfaHdfc2V0dGluZ3ModHApOw0KPiA+ ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBydGFzZV9wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCBpbnQgbnVtX3ZmcykNCj4gPiArew0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7DQo+ID4gKyAgICAgc3RydWN0IHJ0YXNlX3By aXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsNCj4gPiArICAgICBpbnQgZXJyID0gMDsNCj4g PiArICAgICB1MTYgZXhpc3RlZF92ZnMgPSAodTE2KXBjaV9udW1fdmYocGRldik7DQo+ID4gKyAg ICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmICh0cC0+bnVtX3ZmcyA9PSAodTMy KW51bV92ZnMpDQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoKGV4aXN0ZWRfdmZzICE9IDB1KSAmJiAoZXhpc3RlZF92ZnMgIT0gKHUzMiludW1f dmZzKSkgew0KPiA+ICsgICAgICAgICAgICAgZXJyID0gcnRhc2VfZGlzYWJsZV9zcmlvdih0cCk7 DQo+ID4gKyAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0ID0gZXJyOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsNCj4g PiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9IGVsc2UgaWYgKChleGlzdGVkX3ZmcyAhPSAw dSkgJiYgKGV4aXN0ZWRfdmZzID09ICh1MzIpbnVtX3ZmcykpIHsNCj4gPiArICAgICAgICAgICAg IHJldCA9IG51bV92ZnM7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAgICB9 IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgc3Jpb3Zfd2FybigiZXhpc3RlZF92ZnMgPSAwXG4i KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGVyciA9IHJ0YXNlX2FsbG9jYXRlX3Zm X2RhdGEodHAsIG51bV92ZnMpOw0KPiA+ICsgICAgIGlmIChlcnIgIT0gMCkgew0KPiA+ICsgICAg ICAgICAgICAgc3Jpb3Zfd2FybigiYWxsb2NhdGUgdmYgZGF0YSBmYWlsZWQuIik7DQo+ID4gKyAg ICAgICAgICAgICByZXQgPSBlcnI7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiAr ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVt X3Zmcyk7DQo+ID4gKyAgICAgaWYgKGVyciAhPSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBzcmlv dl93YXJuKCJwY2lfZW5hYmxlX3NyaW92IGZhaWxlZDogJWRcbiIsIGVycik7DQo+ID4gKyAgICAg ICAgICAgICByZXQgPSBlcnI7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsNCj4gPiArICAg ICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIHNyaW92IGhhcmR3YXJlIHNldHRpbmdzICovDQo+ID4g KyAgICAgcnRhc2Vfc3Jpb3ZfaHdfc2V0dGluZ3ModHApOw0KPiA+ICsNCj4gPiArICAgICBydGFz ZV9nZXRfdmZzKHRwKTsNCj4gPiArDQo+ID4gK291dDoNCj4gPiArICAgICByZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHJ0YXNlX3BjaV9zcmlvdl9kaXNhYmxlKHN0 cnVjdCBwY2lfZGV2ICpwZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IG5ldF9k ZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArICAgICBzdHJ1Y3QgcnRh c2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiA+ICsgICAgIGludCBlcnI7DQo+ ID4gKw0KPiA+ICsgICAgIGlmICgodHAtPm51bV92ZnMgPT0gMHUpICYmIChwY2lfbnVtX3ZmKHBk ZXYpID09IDApKQ0KPiA+ICsgICAgICAgICAgICAgZXJyID0gLUVJTlZBTDsNCj4gPiArICAgICBl bHNlDQo+ID4gKyAgICAgICAgICAgICBlcnIgPSBydGFzZV9kaXNhYmxlX3NyaW92KHRwKTsNCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIGVycjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogVEJEOiBu ZWVkIHRvIG1vZGlmeSwgbm93IGFsbCBlbmFibGUgKi8NCj4gPiArc3RhdGljIHZvaWQgcnRhc2Vf c3Jpb3ZfY3IoY29uc3Qgc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwKQ0KPiA+ICt7DQo+ID4gKyAg ICAgdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOw0KPiA+ICsgICAgIHUxNiBj ciA9IFJUTF9SMTYoRkNSKTsNCj4gPiArDQo+ID4gKyAgICAgY3IgfD0gKHUxNikoRkNSX0JBUl9F TiB8IEZDUl9NQVJfRU4gfCBGQ1JfVFhfTE9PUEJBQ0tfRU4pOw0KPiA+ICsgICAgIFJUTF9XMTYo RkNSLCBjcik7DQo+ID4gKw0KPiA+ICsgICAgIFJUTF9XMTYoTEJLX0NUUkwsICh1MTYpKExCS19B VExEIHwgTEJLX0NMUikpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgcnRhc2VfcGNpX3NyaW92 X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG51bV92ZnMpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0K PiA+ICsgICAgIHN0cnVjdCBydGFzZV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7DQo+ ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIHNyaW92X2luZm8oIiVzLi4u JWkiLCBfX2Z1bmNfXywgbnVtX3Zmcyk7DQo+ID4gKw0KPiA+ICsgICAgIG5ldGlmX3N0b3BfcXVl dWUoZGV2KTsNCj4gPiArICAgICBpZiAoKHRwLT5zd19mbGFnICYgU1dGX1NSSU9WX0VOQUJMRUQp ICE9IDB1KQ0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfZnVuY19kaXNhYmxlKHRwKTsNCj4gPiAr DQo+ID4gKyAgICAgcnRhc2VfaHdfcmVzZXQoZGV2KTsNCj4gPiArICAgICBydGFzZV90eF9jbGVh cih0cCk7DQo+ID4gKyAgICAgcnRhc2VfcnhfY2xlYXIodHApOw0KPiA+ICsNCj4gPiArICAgICBp ZiAocnRhc2VfaW5pdF9yaW5nKGRldikgIT0gMCkNCj4gPiArICAgICAgICAgICAgIG5ldGRldl9p bmZvKHRwLT5kZXYsICJ1bmFibGUgdG8gaW5pdCByaW5nXG4iKTsNCj4gPiArDQo+ID4gKyAgICAg aWYgKG51bV92ZnMgPT0gMCkNCj4gPiArICAgICAgICAgICAgIHJldCA9IHJ0YXNlX3BjaV9zcmlv dl9kaXNhYmxlKHBkZXYpOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHJldCA9 IHJ0YXNlX3BjaV9zcmlvdl9lbmFibGUocGRldiwgbnVtX3Zmcyk7DQo+ID4gKw0KPiA+ICsgICAg IGlmIChyZXQgIT0gLUVJTlZBTCkgew0KPiA+ICsgICAgICAgICAgICAgbWRlbGF5KDEwKTsNCj4g PiArDQo+ID4gKyAgICAgICAgICAgICBydGFzZV9od19zZXRfcnhfcGFja2V0X2ZpbHRlcihkZXYp Ow0KPiA+ICsgICAgICAgICAgICAgcnRhc2VfaHdfc3RhcnQoZGV2KTsNCj4gPiArICAgICAgICAg ICAgIGlmICgodHAtPnN3X2ZsYWcgJiBTV0ZfU1JJT1ZfRU5BQkxFRCkgIT0gMHUpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgcnRhc2VfZnVuY19lbmFibGUodHApOw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBydGFzZV9zcmlvdl9jcih0cCk7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOw0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgcnRsX3NldF92Zl9tYWMoc3RydWN0IHJ0YXNlX3ByaXZhdGUgKnRwLCBpbnQgdmYs IGNvbnN0IHU4ICptYWMpDQo+ID4gK3sNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKmlvYWRkciA9 IHRwLT5tbWlvX2FkZHI7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArICAg ICB1MTYgdG1wOw0KPiA+ICsNCj4gPiArICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ss IGZsYWdzKTsNCj4gPiArDQo+ID4gKyAgICAgdG1wID0gKCh1MTYpbWFjWzBdIDw8IDgpIHwgKHUx NiltYWNbMV07DQo+ID4gKyAgICAgUlRMX1cxNigoKHMzMilWRl9NQUNfMCArICh2ZiAqIDgpKSwg dG1wKTsNCj4gPiArICAgICB0bXAgPSAoKHUxNiltYWNbMl0gPDwgOCkgfCAodTE2KW1hY1szXTsN Cj4gPiArICAgICBSVExfVzE2KCgoczMyKVZGX01BQ18yICsgKHZmICogOCkpLCB0bXApOw0KPiA+ ICsgICAgIHRtcCA9ICgodTE2KW1hY1s0XSA8PCA4KSB8ICh1MTYpbWFjWzVdOw0KPiA+ICsgICAg IFJUTF9XMTYoKChzMzIpVkZfTUFDXzQgKyAodmYgKiA4KSksIHRtcCk7DQo+ID4gKw0KPiA+ICsg ICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7DQo+ID4gK30NCj4g PiArDQo+ID4gKyNpZmRlZiBJRkxBX1ZGX01BWA0KPiA+ICtpbnQgcnRhc2Vfc2V0X3ZmX21hYyhz dHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHU4ICptYWMpDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgcnRhc2VfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KPiA+ ICsgICAgIHN0cnVjdCB2Zl9pbmZvICp2Zl9pbmZvID0gTlVMTDsNCj4gPiArICAgICBpbnQgcmV0 ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgc3Jpb3ZfaW5mbygiJXM6dmYgPSAlaSwgTUFDOiUwMng6 JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IiwNCj4gX19mdW5jX18sIHZmLCBtYWNbMF0sIG1hY1sx XSwNCj4gPiArICAgICAgICAgICAgICAgIG1hY1syXSwgbWFjWzNdLCBtYWNbNF0sIG1hY1s1XSk7 DQo+ID4gKw0KPiA+ICsgICAgIGlmICh2ZiA+PSAoczE2KXRwLT5udW1fdmZzKSB7DQo+ID4gKyAg ICAgICAgICAgICByZXQgPSAtRUlOVkFMOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgICAgICB2Zl9pbmZvID0gJnRwLT52Zl9pbmZvW3ZmXTsNCj4gPiArDQo+ID4gKyAgICAgICAg ICAgICBpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHJ0bF9zZXRfdmZfbWFjKHRwLCB2ZiwgbWFjKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgbWVtY3B5KHZmX2luZm8tPnZmX21hYywgbWFjLCBFVEhfQUxFTik7DQo+ID4gKyAgICAg ICAgICAgICB9IGVsc2UgaWYgKGlzX3plcm9fZXRoZXJfYWRkcihtYWMpKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJ0bF9zZXRfdmZfbWFjKHRwLCB2ZiwgbWFjKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgbWVtY3B5KHZmX2luZm8tPnZmX21hYywgbWFjLCBFVEhfQUxFTik7DQo+ ID4gKyAgICAgICAgICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQg PSAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHJ0YXNlX2dldF92Zl9j b25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCBzdHJ1Y3QgaWZsYV92Zl9p bmZvDQo+ICppdmkpDQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHAgPSBuZXRkZXZfcHJpdihuZXRkZXYpOw0KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCB2Zl9p bmZvICp2Zl9pbmZvID0gTlVMTDsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4g KyAgICAgc3Jpb3ZfaW5mbygiJXMuLi4laSIsIF9fZnVuY19fLCB2Zik7DQo+ID4gKw0KPiA+ICsg ICAgIGlmICh2ZiA+PSAoczE2KXRwLT5udW1fdmZzKSB7DQo+ID4gKyAgICAgICAgICAgICBzcmlv dl9pbmZvKCIlcy4uLiVpIEVJTlZBTCIsIF9fZnVuY19fLCB2Zik7DQo+ID4gKyAgICAgICAgICAg ICByZXQgPSAtRUlOVkFMOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICB2 Zl9pbmZvID0gJnRwLT52Zl9pbmZvW3ZmXTsNCj4gPiArICAgICAgICAgICAgIGl2aS0+dmYgPSAo dTMyKXZmOw0KPiA+ICsgICAgICAgICAgICAgbWVtY3B5KGl2aS0+bWFjLCB2Zl9pbmZvLT52Zl9t YWMsIEVUSF9BTEVOKTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArI2VuZGlmDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVy bmV0L3JlYWx0ZWsvcnRhc2UvcnRhc2Vfc3Jpb3YuaA0KPiBiL2RyaXZlcnMvbmV0L2V0aGVybmV0 L3JlYWx0ZWsvcnRhc2UvcnRhc2Vfc3Jpb3YuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42MmRhZmJkMThmOWENCj4gPiAtLS0gL2Rldi9udWxsDQo+ ID4gKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9ydGFzZS9ydGFzZV9zcmlvdi5o DQo+ID4gQEAgLTAsMCArMSwzMCBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiAgQ29weXJpZ2h0KGMpIDIwMjMgUmVhbHRlayBT ZW1pY29uZHVjdG9yIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyAqDQo+ID4gKyAq ICBBdXRob3I6DQo+ID4gKyAqICBSZWFsdGVrIEFSRCBzb2Z0d2FyZSB0ZWFtDQo+ID4gKyAqLw0K PiA+ICsjaWZuZGVmIFJUQVNFX1NSSU9WX0hfDQo+ID4gKyNkZWZpbmUgUlRBU0VfU1JJT1ZfSF8N Cj4gPiArDQo+ID4gKy8qICBEZWZpbmVzDQo+ID4gKyAqLw0KPiA+ICsjaWZkZWYgU1JJT1ZfREVC VUcNCj4gPiArI2RlZmluZSBzcmlvdl93YXJuKGZvcm1hdCwgYXJncy4uLikgcHJfd2FybmluZyhm b3JtYXQsICMjYXJncykNCj4gPiArI2RlZmluZSBzcmlvdl9pbmZvKGZvcm1hdCwgYXJncy4uLikg cHJfaW5mbyhmb3JtYXQsICMjYXJncykNCj4gPiArI2Vsc2UNCj4gPiArI2RlZmluZSBzcmlvdl93 YXJuKGZvcm1hdCwgYXJncy4uLikNCj4gPiArI2RlZmluZSBzcmlvdl9pbmZvKGZvcm1hdCwgYXJn cy4uLikNCj4gPiArI2VuZGlmDQo+ID4gKw0KPiA+ICsvKiAgRnVuY3Rpb24gUHJvdG90eXBlDQo+ ID4gKyAqLw0KPiA+ICtzMzIgcnRhc2VfZGlzYWJsZV9zcmlvdihzdHJ1Y3QgcnRhc2VfcHJpdmF0 ZSAqdHApOw0KPiA+ICtpbnQgcnRhc2VfcGNpX3NyaW92X2NvbmZpZ3VyZShzdHJ1Y3QgcGNpX2Rl diAqcGRldiwgaW50IG51bV92ZnMpOw0KPiA+ICsjaWZkZWYgSUZMQV9WRl9NQVgNCj4gPiAraW50 IHJ0YXNlX3NldF92Zl9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCB1OCAq bWFjKTsNCj4gPiAraW50IHJ0YXNlX2dldF92Zl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKm5l dGRldiwgaW50IHZmLCBzdHJ1Y3QgaWZsYV92Zl9pbmZvDQo+ICppdmkpOw0KPiA+ICsjZW5kaWYN Cj4gPiArDQo+ID4gKyNlbmRpZiAvKiBSVEFTRV9TUklPVl9IXyAqLw0KPiANCj4gDQo+IC0tLS0t LVBsZWFzZSBjb25zaWRlciB0aGUgZW52aXJvbm1lbnQgYmVmb3JlIHByaW50aW5nIHRoaXMgZS1t YWlsLg0K