From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.3 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 26399C2BA80 for ; Wed, 8 Apr 2020 12:21:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D6D182076D for ; Wed, 8 Apr 2020 12:21:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="P08OLRpi" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727832AbgDHMVe (ORCPT ); Wed, 8 Apr 2020 08:21:34 -0400 Received: from Mailgw01.mediatek.com ([1.203.163.78]:4209 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726605AbgDHMVe (ORCPT ); Wed, 8 Apr 2020 08:21:34 -0400 X-UUID: c1456610675b49ae9bbc055177eb0e6f-20200408 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=FaN9rWR8tar4N1KLPXtHZGAhyWo6A2On8lsl7cRnSjc=; b=P08OLRpiRtK5cadaqnau8sNKzpt7FnYKvU7xoKcXvhhzDdTD4nkihmrsK7YAKylaP2kneluWl2B9nwPAdoaaTAxqcfs8RlnMgmgyBoZO9xhA4eIMgBjDVeiA9VRaP47mw/PbXFMXrXS76oBy4je82at4zWJIcooxsFmbRwFlCXs=; X-UUID: c1456610675b49ae9bbc055177eb0e6f-20200408 Received: from mtkcas32.mediatek.inc [(172.27.4.253)] by mailgw01.mediatek.com (envelope-from ) (mailgw01.mediatek.com ESMTP with TLS) with ESMTP id 1662647381; Wed, 08 Apr 2020 20:19:10 +0800 Received: from MTKCAS36.mediatek.inc (172.27.4.186) by MTKMBS31N2.mediatek.inc (172.27.4.87) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 8 Apr 2020 20:19:11 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS36.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 8 Apr 2020 20:19:09 +0800 Message-ID: <1586348342.8804.26.camel@mhfsdcap03> Subject: Re: [V6, 2/2] media: i2c: ov02a10: Add OV02A10 image sensor driver From: Dongchun Zhu To: CC: , , , , , , , , , , , , , , , Date: Wed, 8 Apr 2020 20:19:02 +0800 In-Reply-To: <3144f7e47a804e6c90a57b9b25797077@mtkmbs05n1.mediatek.inc> References: <20191211112849.16705-1-dongchun.zhu@mediatek.com> <20191211112849.16705-3-dongchun.zhu@mediatek.com> <20191213094417.GI32441@paasikivi.fi.intel.com> <3144f7e47a804e6c90a57b9b25797077@mtkmbs05n1.mediatek.inc> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: D440CFBDC33F19060C6540BC57B858D1F006D2CBF980F881E6E91AA58E4E80B32000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org SGVsbG8gU2FrYXJpLA0KDQpUaGFua3MgZm9yIHRoZSByZXZpZXcuIFNvcnJ5IGZvciB0aGUgbGF0 ZSByZXBseS4NCg0KT24gRnJpLCAyMDE5LTEyLTEzIGF0IDEyOjQ0ICswMzAwLCBTYWthcmkgQWls dXMgd3JvdGU6DQo+IEhpIERvbmdjaHVuLA0KPiANCj4gT24gV2VkLCBEZWMgMTEsIDIwMTkgYXQg MDc6Mjg6NDlQTSArMDgwMCwgRG9uZ2NodW4gWmh1IHdyb3RlOg0KPiA+IEFkZCBhIFY0TDIgc3Vi LWRldmljZSBkcml2ZXIgZm9yIE9WMDJBMTAgaW1hZ2Ugc2Vuc29yLiBUaGUgT1YwMkExMCBpcw0K PiA+IGEgMS81IiBDTU9TIHNlbnNvciBmcm9tIE9tbml2aXNpb24sIGFzdXBwb3J0aW5nIG91dHB1 dCBmb3JtYXQ6IDEwLWJpdCBSYXcuDQo+ID4NCj4gPiBUaGlzIGNoaXAgaGFzIGEgc2luZ2xlIE1J UEkgbGFuZSBpbnRlcmZhY2UgYW5kIHVzZSB0aGUgSTJDIGJ1cyBmb3INCj4gPiBjb250cm9sIGFu ZCB0aGUgQ1NJLTIgYnVzIGZvciBkYXRhLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogRG9uZ2No dW4gWmh1IDxkb25nY2h1bi56aHVAbWVkaWF0ZWsuY29tPg0KPiA+IC0tLQ0KPiA+ICBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9tZWRpYS9pMmMvS2Nv bmZpZyAgIHwgICAxMSArDQo+ID4gIGRyaXZlcnMvbWVkaWEvaTJjL01ha2VmaWxlICB8ICAgIDEg Kw0KPiA+ICBkcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMgfCAxMTAyDQo+ID4gKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICA0IGZpbGVzIGNoYW5nZWQs IDExMTUgaW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRp YS9pMmMvb3YwMmExMC5jDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlO VEFJTkVSUyBpbmRleCA5MmE4NjhjLi5lMjk0NTMwIDEwMDY0NA0KPiA+IC0tLSBhL01BSU5UQUlO RVJTDQo+ID4gKysrIGIvTUFJTlRBSU5FUlMNCj4gPiBAQCAtMTIxMzUsNiArMTIxMzUsNyBAQCBN OkRvbmdjaHVuIFpodSA8ZG9uZ2NodW4uemh1QG1lZGlhdGVrLmNvbT4NCj4gPiAgTDpsaW51eC1t ZWRpYUB2Z2VyLmtlcm5lbC5vcmcNCj4gPiAgVDpnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFf dHJlZS5naXQNCj4gPiAgUzpNYWludGFpbmVkDQo+ID4gK0Y6ZHJpdmVycy9tZWRpYS9pMmMvb3Yw MmExMC5jDQo+ID4gIEY6RG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2ky Yy9vdjAyYTEwLnR4dA0KPiA+DQo+ID4gIE9NTklWSVNJT04gT1YyNjgwIFNFTlNPUiBEUklWRVIN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvbWVk aWEvaTJjL0tjb25maWcNCj4gPiBpbmRleCBjNjhlMDAyLi5kM2U4YzQxIDEwMDY0NA0KPiA+IC0t LSBhL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL2ky Yy9LY29uZmlnDQo+ID4gQEAgLTY0MCw2ICs2NDAsMTcgQEAgY29uZmlnIFZJREVPX0lNWDM1NQ0K PiA+ICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6 IHRoZQ0KPiA+ICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbXgzNTUuDQo+ID4NCj4gPiArY29u ZmlnIFZJREVPX09WMDJBMTANCj4gPiArdHJpc3RhdGUgIk9tbmlWaXNpb24gT1YwMkExMCBzZW5z b3Igc3VwcG9ydCINCj4gPiArZGVwZW5kcyBvbiBJMkMgJiYgVklERU9fVjRMMiAmJiBWSURFT19W NEwyX1NVQkRFVl9BUEkNCj4gPiArc2VsZWN0IFY0TDJfRldOT0RFDQo+ID4gK2hlbHANCj4gPiAr ICBUaGlzIGlzIGEgVmlkZW80TGludXgyIHNlbnNvciBkcml2ZXIgZm9yIHRoZSBPbW5pVmlzaW9u DQo+ID4gKyAgT1YwMkExMCBjYW1lcmEuDQo+ID4gKw0KPiA+ICsgIFRvIGNvbXBpbGUgdGhpcyBk cml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQ0KPiA+ICsgIG1vZHVsZSB3aWxs IGJlIGNhbGxlZCBvdjAyYTEwLg0KPiA+ICsNCj4gPiAgY29uZmlnIFZJREVPX09WMjY0MA0KPiA+ ICB0cmlzdGF0ZSAiT21uaVZpc2lvbiBPVjI2NDAgc2Vuc29yIHN1cHBvcnQiDQo+ID4gIGRlcGVu ZHMgb24gVklERU9fVjRMMiAmJiBJMkMNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9p MmMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KPiA+IGluZGV4IGMxNDdi YjkuLmIzNzY5ZDcgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUN Cj4gPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZQ0KPiA+IEBAIC02Myw2ICs2Myw3 IEBAIG9iai0kKENPTkZJR19WSURFT19WUDI3U01QWCkgKz0gdnAyN3NtcHgubw0KPiA+ICBvYmot JChDT05GSUdfVklERU9fU09OWV9CVEZfTVBYKSArPSBzb255LWJ0Zi1tcHgubw0KPiA+ICBvYmot JChDT05GSUdfVklERU9fVVBENjQwMzFBKSArPSB1cGQ2NDAzMWEubw0KPiA+ICBvYmotJChDT05G SUdfVklERU9fVVBENjQwODMpICs9IHVwZDY0MDgzLm8NCj4gPiArb2JqLSQoQ09ORklHX1ZJREVP X09WMDJBMTApICs9IG92MDJhMTAubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fT1YyNjQwKSAr PSBvdjI2NDAubw0KPiA+ICBvYmotJChDT05GSUdfVklERU9fT1YyNjgwKSArPSBvdjI2ODAubw0K PiA+ICBvYmotJChDT05GSUdfVklERU9fT1YyNjg1KSArPSBvdjI2ODUubyBkaWZmIC0tZ2l0DQo+ ID4gYS9kcml2ZXJzL21lZGlhL2kyYy9vdjAyYTEwLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9vdjAy YTEwLmMgbmV3IGZpbGUNCj4gPiBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwLi4wYjkzMGY2DQo+ ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL292MDJhMTAuYw0K PiA+IEBAIC0wLDAgKzEsMTEwMiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMA0KPiA+ICsvLyBDb3B5cmlnaHQgKGMpIDIwMTkgTWVkaWFUZWsgSW5jLg0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXku aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgv Z3Bpby9jb25zdW1lci5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4N Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPiAjaW5jbHVkZSA8bWVk aWEvbWVkaWEtZW50aXR5Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWFzeW5jLmg+ICNp bmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+ICNpbmNsdWRlDQo+ID4gKzxtZWRpYS92NGwyLXN1 YmRldi5oPiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUuaD4NCj4gPiArDQo+ID4gKyNkZWZp bmUgQ0hJUF9JRDB4MjUwOQ0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfUkVHX0NISVBfSURfSDB4MDIN Cj4gPiArI2RlZmluZSBPVjAyQTEwX1JFR19DSElQX0lEX0wweDAzDQo+ID4gKyNkZWZpbmUgT1Yw MkExMF9JRChfbXNiLCBfbHNiKSgoX21zYikgPDwgOCB8IChfbHNiKSkNCj4gPiArDQo+ID4gKy8q IEJpdFsxXSB2ZXJ0aWNhbCB1cHNpZGUgZG93biAqLw0KPiA+ICsvKiBCaXRbMF0gaG9yaXpvbnRh bCBtaXJyb3IgKi8NCj4gPiArI2RlZmluZSBSRUdfTUlSUk9SX0ZMSVBfQ09OVFJPTDB4M2YNCj4g PiArDQo+ID4gKy8qIE9yaWVudGF0aW9uICovDQo+ID4gKyNkZWZpbmUgUkVHX01JUlJPUl9GTElQ X0VOQUJMRTB4MDMNCj4gPiArDQo+ID4gKy8qIEJpdFs3XSBjbG9jayBIUyBtb2RlIGVuYWJsZQ0K PiA+ICsgKiAwOiBDbG9jayBjb250aW51ZQ0KPiA+ICsgKiAxOiBDbG9jayBIUw0KPiA+ICsgKiBC aXRbNjoyXSBIUyBWT0QgYWRqdXN0DQo+ID4gKyAqIEJpdFsxOjBdIFAgVkhJIGFkanVzdA0KPiA+ ICsgKi8NCj4gPiArI2RlZmluZSBSRUdfSFNfTU9ERV9CTEMweDlkDQo+ID4gKw0KPiA+ICsjZGVm aW5lIENMT0NLX0hTX01PREVfRU5BQkxFQklUKDcpDQo+ID4gKw0KPiA+ICsvKiBCaXRbMjowXSBN SVBJIHRyYW5zbWlzc2lvbiBzcGVlZCBzZWxlY3QgKi8NCj4gPiArI2RlZmluZSBUWF9TUEVFRF9B UkVBX1NFTDB4YTENCj4gPiArDQo+ID4gKyNkZWZpbmUgUkVHX1BBR0VfU1dJVENIMHhmZA0KPiA+ ICsjZGVmaW5lIFJFR19HTE9CQUxfRUZGRUNUSVZFMHgwMQ0KPiA+ICsjZGVmaW5lIFJFR19FTkFC TEVCSVQoMCkNCj4gPiArI2RlZmluZSBPVjAyQTEwX01BU0tfOF9CSVRTMHhmZg0KPiA+ICsNCj4g PiArI2RlZmluZSBSRUdfU0NfQ1RSTF9NT0RFMHhhYw0KPiA+ICsjZGVmaW5lIFNDX0NUUkxfTU9E RV9TVEFOREJZMHgwMA0KPiA+ICsjZGVmaW5lIFNDX0NUUkxfTU9ERV9TVFJFQU1JTkcweDAxDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIE9WMDJBMTBfRVhQX1NISUZUOA0KPiA+ICsjZGVmaW5lIE9WMDJB MTBfUkVHX0VYUE9TVVJFX0gweDAzDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9SRUdfRVhQT1NVUkVf TDB4MDQNCj4gPiArI2RlZmluZU9WMDJBMTBfRVhQT1NVUkVfTUlONA0KPiA+ICsjZGVmaW5lIE9W MDJBMTBfRVhQT1NVUkVfTUFYX01BUkdJTjQNCj4gPiArI2RlZmluZU9WMDJBMTBfRVhQT1NVUkVf U1RFUDENCj4gPiArDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9WVFNfU0hJRlQ4DQo+ID4gKyNkZWZp bmUgT1YwMkExMF9SRUdfVlRTX0gweDA1DQo+ID4gKyNkZWZpbmUgT1YwMkExMF9SRUdfVlRTX0ww eDA2DQo+ID4gKyNkZWZpbmUgT1YwMkExMF9WVFNfTUFYMHgyMDlmDQo+ID4gKyNkZWZpbmUgT1Yw MkExMF9WVFNfTUlOMHgwNGNmDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9CQVNJQ19MSU5FMTIyNA0K PiA+ICsNCj4gPiArI2RlZmluZSBPVjAyQTEwX1JFR19HQUlOMHgyNA0KPiA+ICsjZGVmaW5lIE9W MDJBMTBfR0FJTl9NSU4weDEwDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9HQUlOX01BWDB4ZjgNCj4g PiArI2RlZmluZSBPVjAyQTEwX0dBSU5fU1RFUDB4MDENCj4gPiArI2RlZmluZSBPVjAyQTEwX0dB SU5fREVGQVVMVDB4NDANCj4gPiArDQo+ID4gKy8qIFRlc3QgcGF0dGVybiBjb250cm9sICovDQo+ ID4gKyNkZWZpbmUgT1YwMkExMF9SRUdfVEVTVF9QQVRURVJOMHhiNg0KPiA+ICsjZGVmaW5lIE9W MDJBMTBfVEVTVF9QQVRURVJOX0VOQUJMRUJJVCgwKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBIWl9Q RVJfTUhaMTAwMDAwMEwNCj4gPiArI2RlZmluZSBPVjAyQTEwX0xJTktfRlJFUV8zOTBNSFooMzkw ICogSFpfUEVSX01IWikNCj4gPiArI2RlZmluZSBPVjAyQTEwX0VDTEtfRlJFUSgyNCAqIEhaX1BF Ul9NSFopDQo+ID4gKyNkZWZpbmUgT1YwMkExMF9EQVRBX0xBTkVTMQ0KPiA+ICsjZGVmaW5lIE9W MDJBMTBfQklUU19QRVJfU0FNUExFMTANCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBjaGFyICog Y29uc3Qgb3YwMmExMF9zdXBwbHlfbmFtZXNbXSA9IHsNCj4gPiArImRvdmRkIiwvKiBEaWdpdGFs IEkvTyBwb3dlciAqLw0KPiA+ICsiYXZkZCIsLyogQW5hbG9nIHBvd2VyICovDQo+ID4gKyJkdmRk IiwvKiBEaWdpdGFsIGNvcmUgcG93ZXIgKi8NCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUg T1YwMkExMF9OVU1fU1VQUExJRVMgQVJSQVlfU0laRShvdjAyYTEwX3N1cHBseV9uYW1lcykNCj4g PiArDQo+ID4gK3N0cnVjdCBvdjAyYTEwX3JlZyB7DQo+ID4gK3U4IGFkZHI7DQo+ID4gK3U4IHZh bDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBvdjAyYTEwX3JlZ19saXN0IHsNCj4gPiAr dTMyIG51bV9vZl9yZWdzOw0KPiA+ICtjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgKnJlZ3M7DQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3Qgb3YwMmExMF9tb2RlIHsNCj4gPiArdTMyIHdpZHRo Ow0KPiA+ICt1MzIgaGVpZ2h0Ow0KPiA+ICt1MzIgZXhwX2RlZjsNCj4gPiArdTMyIGh0c19kZWY7 DQo+ID4gK3UzMiB2dHNfZGVmOw0KPiA+ICtjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCBy ZWdfbGlzdDsgfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBvdjAyYTEwIHsNCj4gPiArdTMyZWNsa19m cmVxOw0KPiA+ICt1MzIgICAgICAgICAgICAgICAgICAgICBtaXBpX2Nsb2NrX3R4X3NwZWVkOw0K PiA+ICsNCj4gPiArc3RydWN0IGNsayplY2xrOw0KPiA+ICtzdHJ1Y3QgZ3Bpb19kZXNjKnBkX2dw aW87DQo+ID4gK3N0cnVjdCBncGlvX2Rlc2Mqbl9yc3RfZ3BpbzsNCj4gPiArc3RydWN0IHJlZ3Vs YXRvcl9idWxrX2RhdGEgc3VwcGxpZXNbT1YwMkExMF9OVU1fU1VQUExJRVNdOw0KPiA+ICsNCj4g PiArYm9vbHN0cmVhbWluZzsNCj4gPiArYm9vbHVwc2lkZV9kb3duOw0KPiA+ICtib29sbWlwaV9j bG9ja19oc19tb2RlX2VuYWJsZTsNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFNlcmlhbGl6ZSBj b250cm9sIGFjY2VzcywgZ2V0L3NldCBmb3JtYXQsIGdldCBzZWxlY3Rpb24NCj4gPiArICogYW5k IHN0YXJ0IHN0cmVhbWluZy4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBtdXRleG11dGV4Ow0KPiA+ ICtzdHJ1Y3QgdjRsMl9zdWJkZXZzdWJkZXY7DQo+ID4gK3N0cnVjdCBtZWRpYV9wYWRwYWQ7DQo+ ID4gK3N0cnVjdCB2NGwyX2N0cmwqYW5hbF9nYWluOw0KPiA+ICtzdHJ1Y3QgdjRsMl9jdHJsKmV4 cG9zdXJlOw0KPiA+ICtzdHJ1Y3QgdjRsMl9jdHJsKmhibGFuazsNCj4gPiArc3RydWN0IHY0bDJf Y3RybCp2Ymxhbms7DQo+ID4gK3N0cnVjdCB2NGwyX2N0cmwqdGVzdF9wYXR0ZXJuOw0KPiA+ICtz dHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10Zm10Ow0KPiA+ICtzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRs ZXIgY3RybF9oYW5kbGVyOw0KPiA+ICsNCj4gPiArY29uc3Qgc3RydWN0IG92MDJhMTBfbW9kZSAq Y3VyX21vZGU7IH07DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBvdjAyYTEwICp0 b19vdjAyYTEwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpIHsNCj4gPiArcmV0dXJuIGNvbnRhaW5l cl9vZihzZCwgc3RydWN0IG92MDJhMTAsIHN1YmRldik7IH0NCj4gPiArDQo+ID4gKy8qDQo+ID4g KyAqIGVjbGsgMjRNaHoNCj4gPiArICogcGNsayAzOU1oeg0KPiA+ICsgKiBsaW5lbGVuZ3RoIDkz NCgweDNhNikNCj4gPiArICogZnJhbWVsZW5ndGggMTM5MCgweDU2RSkNCj4gPiArICogZ3JhYndp bmRvd193aWR0aCAxNjAwDQo+ID4gKyAqIGdyYWJ3aW5kb3dfaGVpZ2h0IDEyMDANCj4gPiArICog bWF4X2ZyYW1lcmF0ZSAzMGZwcw0KPiA+ICsgKiBtaXBpX2RhdGFyYXRlIHBlciBsYW5lIDc4ME1i cHMNCj4gPiArICovDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWcgb3YwMmEx MF8xNjAweDEyMDBfcmVnc1tdID0gew0KPiA+ICt7MHhmZCwgMHgwMX0sDQo+ID4gK3sweGFjLCAw eDAwfSwNCj4gPiArezB4ZmQsIDB4MDB9LA0KPiA+ICt7MHgyZiwgMHgyOX0sDQo+ID4gK3sweDM0 LCAweDAwfSwNCj4gPiArezB4MzUsIDB4MjF9LA0KPiA+ICt7MHgzMCwgMHgxNX0sDQo+ID4gK3sw eDMzLCAweDAxfSwNCj4gPiArezB4ZmQsIDB4MDF9LA0KPiA+ICt7MHg0NCwgMHgwMH0sDQo+ID4g K3sweDJhLCAweDRjfSwNCj4gPiArezB4MmIsIDB4MWV9LA0KPiA+ICt7MHgyYywgMHg2MH0sDQo+ ID4gK3sweDI1LCAweDExfSwNCj4gPiArezB4MDMsIDB4MDF9LA0KPiA+ICt7MHgwNCwgMHhhZX0s DQo+ID4gK3sweDA5LCAweDAwfSwNCj4gPiArezB4MGEsIDB4MDJ9LA0KPiA+ICt7MHgwNiwgMHhh Nn0sDQo+ID4gK3sweDMxLCAweDAwfSwNCj4gPiArezB4MjQsIDB4NDB9LA0KPiA+ICt7MHgwMSwg MHgwMX0sDQo+ID4gK3sweGZiLCAweDczfSwNCj4gPiArezB4ZmQsIDB4MDF9LA0KPiA+ICt7MHgx NiwgMHgwNH0sDQo+ID4gK3sweDFjLCAweDA5fSwNCj4gPiArezB4MjEsIDB4NDJ9LA0KPiA+ICt7 MHgxMiwgMHgwNH0sDQo+ID4gK3sweDEzLCAweDEwfSwNCj4gPiArezB4MTEsIDB4NDB9LA0KPiA+ ICt7MHgzMywgMHg4MX0sDQo+ID4gK3sweGQwLCAweDAwfSwNCj4gPiArezB4ZDEsIDB4MDF9LA0K PiA+ICt7MHhkMiwgMHgwMH0sDQo+ID4gK3sweDUwLCAweDEwfSwNCj4gPiArezB4NTEsIDB4MjN9 LA0KPiA+ICt7MHg1MiwgMHgyMH0sDQo+ID4gK3sweDUzLCAweDEwfSwNCj4gPiArezB4NTQsIDB4 MDJ9LA0KPiA+ICt7MHg1NSwgMHgyMH0sDQo+ID4gK3sweDU2LCAweDAyfSwNCj4gPiArezB4NTgs IDB4NDh9LA0KPiA+ICt7MHg1ZCwgMHgxNX0sDQo+ID4gK3sweDVlLCAweDA1fSwNCj4gPiArezB4 NjYsIDB4NjZ9LA0KPiA+ICt7MHg2OCwgMHg2OH0sDQo+ID4gK3sweDZiLCAweDAwfSwNCj4gPiAr ezB4NmMsIDB4MDB9LA0KPiA+ICt7MHg2ZiwgMHg0MH0sDQo+ID4gK3sweDcwLCAweDQwfSwNCj4g PiArezB4NzEsIDB4MGF9LA0KPiA+ICt7MHg3MiwgMHhmMH0sDQo+ID4gK3sweDczLCAweDEwfSwN Cj4gPiArezB4NzUsIDB4ODB9LA0KPiA+ICt7MHg3NiwgMHgxMH0sDQo+ID4gK3sweDg0LCAweDAw fSwNCj4gPiArezB4ODUsIDB4MTB9LA0KPiA+ICt7MHg4NiwgMHgxMH0sDQo+ID4gK3sweDg3LCAw eDAwfSwNCj4gPiArezB4OGEsIDB4MjJ9LA0KPiA+ICt7MHg4YiwgMHgyMn0sDQo+ID4gK3sweDE5 LCAweGYxfSwNCj4gPiArezB4MjksIDB4MDF9LA0KPiA+ICt7MHhmZCwgMHgwMX0sDQo+ID4gK3sw eDlkLCAweDE2fSwNCj4gPiArezB4YTAsIDB4Mjl9LA0KPiA+ICt7MHhhMSwgMHgwM30sDQo+ID4g K3sweGFkLCAweDYyfSwNCj4gPiArezB4YWUsIDB4MDB9LA0KPiA+ICt7MHhhZiwgMHg4NX0sDQo+ ID4gK3sweGIxLCAweDAxfSwNCj4gPiArezB4OGUsIDB4MDZ9LA0KPiA+ICt7MHg4ZiwgMHg0MH0s DQo+ID4gK3sweDkwLCAweDA0fSwNCj4gPiArezB4OTEsIDB4YjB9LA0KPiA+ICt7MHg0NSwgMHgw MX0sDQo+ID4gK3sweDQ2LCAweDAwfSwNCj4gPiArezB4NDcsIDB4NmN9LA0KPiA+ICt7MHg0OCwg MHgwM30sDQo+ID4gK3sweDQ5LCAweDhifSwNCj4gPiArezB4NGEsIDB4MDB9LA0KPiA+ICt7MHg0 YiwgMHgwN30sDQo+ID4gK3sweDRjLCAweDA0fSwNCj4gPiArezB4NGQsIDB4Yjd9LA0KPiA+ICt7 MHhmMCwgMHg0MH0sDQo+ID4gK3sweGYxLCAweDQwfSwNCj4gPiArezB4ZjIsIDB4NDB9LA0KPiA+ ICt7MHhmMywgMHg0MH0sDQo+ID4gK3sweDNmLCAweDAwfSwNCj4gPiArezB4ZmQsIDB4MDF9LA0K PiA+ICt7MHgwNSwgMHgwMH0sDQo+ID4gK3sweDA2LCAweGE2fSwNCj4gPiArezB4ZmQsIDB4MDF9 LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBvdjAyYTEw X3Rlc3RfcGF0dGVybl9tZW51W10gPSB7DQo+ID4gKyJEaXNhYmxlZCIsDQo+ID4gKyJDb2xvciBC YXIiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHM2NCBsaW5rX2ZyZXFfbWVu dV9pdGVtc1tdID0gew0KPiA+ICtPVjAyQTEwX0xJTktfRlJFUV8zOTBNSFosDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdGF0aWMgdTY0IHRvX3BpeGVsX3JhdGUodTMyIGZfaW5kZXgpDQo+ID4gK3sN Cj4gPiArdTY0IHBpeGVsX3JhdGUgPSBsaW5rX2ZyZXFfbWVudV9pdGVtc1tmX2luZGV4XSAqIDIg KiBPVjAyQTEwX0RBVEFfTEFORVM7DQo+ID4gKw0KPiA+ICtkb19kaXYocGl4ZWxfcmF0ZSwgT1Yw MkExMF9CSVRTX1BFUl9TQU1QTEUpOw0KPiA+ICsNCj4gPiArcmV0dXJuIHBpeGVsX3JhdGU7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3YwMmExMF9tb2RlIHN1cHBv cnRlZF9tb2Rlc1tdID0gew0KPiA+ICt7DQo+ID4gKy53aWR0aCA9IDE2MDAsDQo+ID4gKy5oZWln aHQgPSAxMjAwLA0KPiA+ICsuZXhwX2RlZiA9IDB4MDFhZSwNCj4gPiArLmh0c19kZWYgPSAweDAz YTYsDQo+ID4gKy52dHNfZGVmID0gMHgwNTZlLA0KPiA+ICsucmVnX2xpc3QgPSB7DQo+ID4gKy5u dW1fb2ZfcmVncyA9IEFSUkFZX1NJWkUob3YwMmExMF8xNjAweDEyMDBfcmVncyksDQo+ID4gKy5y ZWdzID0gb3YwMmExMF8xNjAweDEyMDBfcmVncywNCj4gPiArfSwNCj4gPiArfSwNCj4gPiArfTsN Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF93cml0ZV9hcnJheShzdHJ1Y3Qgb3YwMmEx MCAqb3YwMmExMCwNCj4gPiArICAgICAgIGNvbnN0IHN0cnVjdCBvdjAyYTEwX3JlZ19saXN0ICpy X2xpc3QpDQo+ID4gK3sNCj4gPiArc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0 X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQo+ID4gK3Vuc2lnbmVkIGludCBpOw0KPiA+ ICtpbnQgcmV0Ow0KPiA+ICsNCj4gPiArZm9yIChpID0gMDsgaSA8IHJfbGlzdC0+bnVtX29mX3Jl Z3M7IGkrKykgew0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwg cl9saXN0LT5yZWdzW2ldLmFkZHIsDQo+ID4gK3JfbGlzdC0+cmVnc1tpXS52YWwpOw0KPiA+ICtp ZiAocmV0IDwgMCkNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF9yZWFkX3NtYnVzKHN0 cnVjdCBvdjAyYTEwICpvdjAyYTEwLCB1bnNpZ25lZCBjaGFyIHJlZywNCj4gPiArICAgICAgdW5z aWduZWQgY2hhciAqdmFsKQ0KPiA+ICt7DQo+ID4gK3N0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQg PSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KPiA+ICtpbnQgcmV0Ow0K PiA+ICsNCj4gPiArcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsN Cj4gPiArDQo+ID4gK2lmIChyZXQgPCAwKQ0KPiA+ICtyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiAr KnZhbCA9ICh1bnNpZ25lZCBjaGFyKXJldDsNCj4gPiArDQo+ID4gK3JldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfbW9kX3JlZyhzdHJ1Y3Qgb3YwMmExMCAq b3YwMmExMCwgdTggcmVnLCB1OCBtYXNrLCB1OCB2YWwpDQo+ID4gK3sNCj4gPiArc3RydWN0IGky Y19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7 DQo+ID4gK3U4IHJlYWR2YWw7DQo+ID4gK2ludCByZXQ7DQo+ID4gKw0KPiA+ICtyZXQgPSBvdjAy YTEwX3JlYWRfc21idXMob3YwMmExMCwgcmVnLCAmcmVhZHZhbCk7DQo+ID4gK2lmIChyZXQpDQo+ ID4gK3JldHVybiByZXQ7DQo+ID4gKw0KPiA+ICt2YWwgPSAocmVhZHZhbCAmIH5tYXNrKSB8ICh2 YWwgJiBtYXNrKTsNCj4gPiArDQo+ID4gK3JldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRh KGNsaWVudCwgcmVnLCB2YWwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBvdjAy YTEwX2ZpbGxfZm10KGNvbnN0IHN0cnVjdCBvdjAyYTEwX21vZGUgKm1vZGUsDQo+ID4gKyAgICAg c3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KQ0KPiA+ICt7DQo+ID4gK2ZtdC0+d2lkdGgg PSBtb2RlLT53aWR0aDsNCj4gPiArZm10LT5oZWlnaHQgPSBtb2RlLT5oZWlnaHQ7DQo+ID4gK2Zt dC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgb3YwMmExMF9zZXRfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsDQo+ID4gKyAgIHN0cnVj dCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKyAgIHN0cnVjdCB2NGwyX3N1YmRl dl9mb3JtYXQgKmZtdCkNCj4gPiArew0KPiA+ICtzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRv X292MDJhMTAoc2QpOw0KPiA+ICtzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCA9 ICZmbXQtPmZvcm1hdDsNCj4gPiArDQo+ID4gK211dGV4X2xvY2soJm92MDJhMTAtPm11dGV4KTsN Cj4gPiArDQo+ID4gK2lmIChvdjAyYTEwLT5zdHJlYW1pbmcpIHsNCj4gPiArbXV0ZXhfdW5sb2Nr KCZvdjAyYTEwLT5tdXRleCk7DQo+ID4gK3JldHVybiAtRUJVU1k7DQo+ID4gK30NCj4gPiArDQo+ ID4gKy8qIE9ubHkgb25lIHNlbnNvciBtb2RlIHN1cHBvcnRlZCAqLw0KPiA+ICttYnVzX2ZtdC0+ Y29kZSA9IG92MDJhMTAtPmZtdC5jb2RlOw0KPiA+ICtvdjAyYTEwX2ZpbGxfZm10KG92MDJhMTAt PmN1cl9tb2RlLCBtYnVzX2ZtdCk7DQo+ID4gK292MDJhMTAtPmZtdCA9IGZtdC0+Zm9ybWF0Ow0K PiA+ICsNCj4gPiArbXV0ZXhfdW5sb2NrKCZvdjAyYTEwLT5tdXRleCk7DQo+ID4gKw0KPiA+ICty ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX2dldF9mbXQo c3RydWN0IHY0bDJfc3ViZGV2ICpzZCwNCj4gPiArICAgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9j b25maWcgKmNmZywNCj4gPiArICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm10KQ0KPiA+ ICt7DQo+ID4gK3N0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQo+ID4g K3N0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKm1idXNfZm10ID0gJmZtdC0+Zm9ybWF0Ow0KPiA+ ICsNCj4gPiArbXV0ZXhfbG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KPiA+ICsNCj4gPiArZm10LT5m b3JtYXQgPSBvdjAyYTEwLT5mbXQ7DQo+ID4gK21idXNfZm10LT5jb2RlID0gb3YwMmExMC0+Zm10 LmNvZGU7DQo+ID4gK292MDJhMTBfZmlsbF9mbXQob3YwMmExMC0+Y3VyX21vZGUsIG1idXNfZm10 KTsNCj4gPiArDQo+ID4gK211dGV4X3VubG9jaygmb3YwMmExMC0+bXV0ZXgpOw0KPiA+ICsNCj4g PiArcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF9lbnVt X21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLA0KPiA+ICsgIHN0cnVjdCB2NGwyX3N1 YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKyAgc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29k ZV9lbnVtICpjb2RlKQ0KPiA+ICt7DQo+ID4gK3N0cnVjdCBvdjAyYTEwICpvdjAyYTEwID0gdG9f b3YwMmExMChzZCk7DQo+ID4gKw0KPiA+ICtpZiAoY29kZS0+aW5kZXggPj0gQVJSQVlfU0laRShz dXBwb3J0ZWRfbW9kZXMpKQ0KPiA+ICtyZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gK2NvZGUt PmNvZGUgPSBvdjAyYTEwLT5mbXQuY29kZTsNCj4gDQo+IERvIHlvdSBwbGFuIHRvIGhhdmUgYSBk aWZmZXJlbnQgZm9ybWF0IGFzIHdlbGwgYXMgYSBkaWZmZXJlbnQgcmVzb2x1dGlvbg0KPiBmb3Ig ZWFjaCBtb2RlPw0KPiANCg0KTm8gcGxhbiBmb3IgdGhlIG1vbWVudCwgYXMgT1YwMkExMCBzdXBw b3J0cyBVWEdBICgxNjAwWDEyMDApIHJlc29sdXRpb24NCnRvIHRoZSBtYXhpbXVtLA0KYW5kIHRo aXMgc2l6ZSBpcyBuZWFyIHRvIHRoZSBsb3dlciBsaW1pdCBvZiBtb3N0IHNtYXJ0IG1vYmlsZSBk ZXZpY2VzLg0KDQo+ID4gKw0KPiA+ICtyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBvdjAyYTEwX2VudW1fZnJhbWVfc2l6ZXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwN Cj4gPiArICAgIHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnICpjZmcsDQo+ID4gKyAgICBz dHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtICpmc2UpDQo+ID4gK3sNCj4gPiAraWYg KGZzZS0+aW5kZXggPj0gQVJSQVlfU0laRShzdXBwb3J0ZWRfbW9kZXMpKQ0KPiA+ICtyZXR1cm4g LUVJTlZBTDsNCj4gPiArDQo+ID4gK2ZzZS0+bWluX3dpZHRoICA9IHN1cHBvcnRlZF9tb2Rlc1tm c2UtPmluZGV4XS53aWR0aDsNCj4gPiArZnNlLT5tYXhfd2lkdGggID0gc3VwcG9ydGVkX21vZGVz W2ZzZS0+aW5kZXhdLndpZHRoOw0KPiA+ICtmc2UtPm1heF9oZWlnaHQgPSBzdXBwb3J0ZWRfbW9k ZXNbZnNlLT5pbmRleF0uaGVpZ2h0Ow0KPiA+ICtmc2UtPm1pbl9oZWlnaHQgPSBzdXBwb3J0ZWRf bW9kZXNbZnNlLT5pbmRleF0uaGVpZ2h0Ow0KPiA+ICsNCj4gPiArcmV0dXJuIDA7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF9jaGVja19zZW5zb3JfaWQoc3RydWN0IG92 MDJhMTAgKm92MDJhMTApDQo+ID4gK3sNCj4gPiArc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQo+ID4gK3UxNiBpZDsNCj4g PiArdTggY2hpcF9pZF9oOw0KPiA+ICt1OCBjaGlwX2lkX2w7DQo+ID4gK2ludCByZXQ7DQo+ID4g Kw0KPiA+ICsvKiBDaGVjayBzZW5zb3IgcmV2aXNpb24gKi8NCj4gPiArcmV0ID0gb3YwMmExMF9y ZWFkX3NtYnVzKG92MDJhMTAsIE9WMDJBMTBfUkVHX0NISVBfSURfSCwgJmNoaXBfaWRfaCk7DQo+ ID4gK2lmIChyZXQpDQo+ID4gK3JldHVybiByZXQ7DQo+ID4gKw0KPiA+ICtyZXQgPSBvdjAyYTEw X3JlYWRfc21idXMob3YwMmExMCwgT1YwMkExMF9SRUdfQ0hJUF9JRF9MLCAmY2hpcF9pZF9sKTsN Cj4gPiAraWYgKHJldCkNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gK2lkID0gT1YwMkEx MF9JRChjaGlwX2lkX2gsIGNoaXBfaWRfbCk7DQo+ID4gK2lmIChpZCAhPSBDSElQX0lEKSB7DQo+ ID4gK2Rldl9lcnIoJmNsaWVudC0+ZGV2LCAiVW5leHBlY3RlZCBzZW5zb3IgaWQoJTA0eClcbiIs IGlkKTsNCj4gPiArcmV0dXJuIC1FSU5WQUw7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Rldl9kYmco JmNsaWVudC0+ZGV2LCAiRGV0ZWN0ZWQgT1YlMDRYIHNlbnNvclxuIiwgaWQpOw0KPiA+ICsNCj4g PiArcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVz ZWQgb3YwMmExMF9wb3dlcl9vbihzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gK3sNCj4gPiArc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsNCj4gPiArc3RydWN0 IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOw0KPiA+ICtzdHJ1 Y3Qgb3YwMmExMCAqb3YwMmExMCA9IHRvX292MDJhMTAoc2QpOw0KPiA+ICtpbnQgcmV0Ow0KPiA+ ICsNCj4gPiArZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKG92MDJhMTAtPm5fcnN0X2dwaW8sIDAp Ow0KPiA+ICtncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+cGRfZ3BpbywgMSk7DQo+ ID4gKw0KPiA+ICtyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUob3YwMmExMC0+ZWNsayk7DQo+ID4g K2lmIChyZXQgPCAwKSB7DQo+ID4gK2Rldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBlY2xr XG4iKTsNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArcmV0ID0gcmVndWxh dG9yX2J1bGtfZW5hYmxlKE9WMDJBMTBfTlVNX1NVUFBMSUVTLCBvdjAyYTEwLT5zdXBwbGllcyk7 DQo+ID4gK2lmIChyZXQgPCAwKSB7DQo+ID4gK2Rldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJs ZSByZWd1bGF0b3JzXG4iKTsNCj4gPiArZ290byBkaXNhYmxlX2NsazsNCj4gPiArfQ0KPiA+ICt1 c2xlZXBfcmFuZ2UoNTAwMCwgNjAwMCk7DQo+ID4gKw0KPiA+ICtncGlvZF9zZXRfdmFsdWVfY2Fu c2xlZXAob3YwMmExMC0+cGRfZ3BpbywgMCk7DQo+ID4gK3VzbGVlcF9yYW5nZSg1MDAwLCA2MDAw KTsNCj4gPiArDQo+ID4gK2dwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChvdjAyYTEwLT5uX3JzdF9n cGlvLCAxKTsNCj4gPiArdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOw0KPiA+ICsNCj4gPiArcmV0 ID0gb3YwMmExMF9jaGVja19zZW5zb3JfaWQob3YwMmExMCk7DQo+ID4gK2lmIChyZXQpDQo+ID4g K2dvdG8gZGlzYWJsZV9yZWd1bGF0b3I7DQo+ID4gKw0KPiA+ICtyZXR1cm4gMDsNCj4gPiArDQo+ ID4gK2Rpc2FibGVfcmVndWxhdG9yOg0KPiA+ICtyZWd1bGF0b3JfYnVsa19kaXNhYmxlKE9WMDJB MTBfTlVNX1NVUFBMSUVTLCBvdjAyYTEwLT5zdXBwbGllcyk7DQo+ID4gK2Rpc2FibGVfY2xrOg0K PiA+ICtjbGtfZGlzYWJsZV91bnByZXBhcmUob3YwMmExMC0+ZWNsayk7DQo+ID4gKw0KPiA+ICty ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2Vk IG92MDJhMTBfcG93ZXJfb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICtzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOw0KPiA+ICtzdHJ1Y3Qg djRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQo+ID4gK3N0cnVj dCBvdjAyYTEwICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQo+ID4gKw0KPiA+ICtncGlvZF9z ZXRfdmFsdWVfY2Fuc2xlZXAob3YwMmExMC0+bl9yc3RfZ3BpbywgMCk7DQo+ID4gK2Nsa19kaXNh YmxlX3VucHJlcGFyZShvdjAyYTEwLT5lY2xrKTsNCj4gPiArZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNs ZWVwKG92MDJhMTAtPnBkX2dwaW8sIDEpOw0KPiA+ICtyZWd1bGF0b3JfYnVsa19kaXNhYmxlKE9W MDJBMTBfTlVNX1NVUFBMSUVTLCBvdjAyYTEwLT5zdXBwbGllcyk7DQo+ID4gKw0KPiA+ICtyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBfX292MDJhMTBfc3RhcnRfc3Ry ZWFtKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwKQ0KPiA+ICt7DQo+ID4gK3N0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KPiA+ ICtjb25zdCBzdHJ1Y3Qgb3YwMmExMF9yZWdfbGlzdCAqcmVnX2xpc3Q7DQo+ID4gK2ludCByZXQ7 DQo+ID4gKw0KPiA+ICsvKiBBcHBseSBkZWZhdWx0IHZhbHVlcyBvZiBjdXJyZW50IG1vZGUgKi8N Cj4gPiArcmVnX2xpc3QgPSAmb3YwMmExMC0+Y3VyX21vZGUtPnJlZ19saXN0Ow0KPiA+ICtyZXQg PSBvdjAyYTEwX3dyaXRlX2FycmF5KG92MDJhMTAsIHJlZ19saXN0KTsNCj4gPiAraWYgKHJldCkN Cj4gPiArcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKy8qIEFwcGx5IGN1c3RvbWl6ZWQgdmFsdWVz IGZyb20gdXNlciAqLw0KPiA+ICtyZXQgPSBfX3Y0bDJfY3RybF9oYW5kbGVyX3NldHVwKG92MDJh MTAtPnN1YmRldi5jdHJsX2hhbmRsZXIpOw0KPiA+ICtpZiAocmV0KQ0KPiA+ICtyZXR1cm4gcmV0 Ow0KPiA+ICsNCj4gPiArLyogU2V0IG9yaWVudGF0aW9uIHRvIDE4MCBkZWdyZWUgKi8NCj4gPiAr aWYgKG92MDJhMTAtPnVwc2lkZV9kb3duKSB7DQo+ID4gK3JldCA9IGkyY19zbWJ1c193cml0ZV9i eXRlX2RhdGEoY2xpZW50LCBSRUdfTUlSUk9SX0ZMSVBfQ09OVFJPTCwNCj4gPiArUkVHX01JUlJP Ul9GTElQX0VOQUJMRSk7DQo+ID4gK2lmIChyZXQpIHsNCj4gPiArZGV2X2VycigmY2xpZW50LT5k ZXYsICJmYWlsZWQgdG8gc2V0IG9yaWVudGF0aW9uXG4iKTsNCj4gPiArcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dM T0JBTF9FRkZFQ1RJVkUsDQo+ID4gK1JFR19FTkFCTEUpOw0KPiA+ICtpZiAocmV0IDwgMCkNCj4g PiArcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogU2V0IGNsb2NrIGxhbmUgdHJh bnNtaXNzaW9uIG1vZGUgYWNjb3JkaW5nIHRvIERUIHByb3BlcnR5ICovDQo+ID4gK3JldCA9IG92 MDJhMTBfbW9kX3JlZyhvdjAyYTEwLCBSRUdfSFNfTU9ERV9CTEMsIENMT0NLX0hTX01PREVfRU5B QkxFLA0KPiA+ICsgICAgICBvdjAyYTEwLT5taXBpX2Nsb2NrX2hzX21vZGVfZW5hYmxlID8NCj4g PiArICAgICAgQ0xPQ0tfSFNfTU9ERV9FTkFCTEUgOiAwKTsNCj4gPiAraWYgKHJldCA8IDApDQo+ ID4gK3JldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsvKiBTZXQgbWlwaSBUWCBzcGVlZCBhY2NvcmRp bmcgdG8gRFQgcHJvcGVydHkgKi8NCj4gPiArcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0 YShjbGllbnQsIFRYX1NQRUVEX0FSRUFfU0VMLA0KPiA+ICtvdjAyYTEwLT5taXBpX2Nsb2NrX3R4 X3NwZWVkKTsNCj4gPiAraWYgKHJldCA8IDApDQo+ID4gK3JldHVybiByZXQ7DQo+ID4gKw0KPiA+ ICsvKiBTZXQgc3RyZWFtIG9uIHJlZ2lzdGVyICovDQo+ID4gK3JldHVybiBpMmNfc21idXNfd3Jp dGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCj4gPiArIFNDX0NUUkxfTU9E RV9TVFJFQU1JTkcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fb3YwMmExMF9z dG9wX3N0cmVhbShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCj4gPiArew0KPiA+ICtzdHJ1Y3Qg aTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2 KTsNCj4gPiArDQo+ID4gK3JldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwg UkVHX1NDX0NUUkxfTU9ERSwNCj4gPiArIFNDX0NUUkxfTU9ERV9TVEFOREJZKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX2VudGl0eV9pbml0X2NmZyhzdHJ1Y3QgdjRs Ml9zdWJkZXYgKnNkLA0KPiA+ICsgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyAqY2Zn KQ0KPiA+ICt7DQo+ID4gK3N0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10ID0gew0KPiA+ICsu d2hpY2ggPSBjZmcgPyBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZDQo+ID4gKyAgICAgOiBWNEwyX1NV QkRFVl9GT1JNQVRfQUNUSVZFLA0KPiA+ICsuZm9ybWF0ID0gew0KPiA+ICsud2lkdGggPSAxNjAw LA0KPiA+ICsuaGVpZ2h0ID0gMTIwMA0KPiA+ICt9DQo+ID4gK307DQo+ID4gKw0KPiA+ICtvdjAy YTEwX3NldF9mbXQoc2QsIGNmZywgJmZtdCk7DQo+ID4gKw0KPiA+ICtyZXR1cm4gMDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QsIGludCBvbikNCj4gPiArew0KPiA+ICtzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9 IHRvX292MDJhMTAoc2QpOw0KPiA+ICtzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9n ZXRfc3ViZGV2ZGF0YSgmb3YwMmExMC0+c3ViZGV2KTsNCj4gPiAraW50IHJldDsNCj4gPiArDQo+ ID4gK2Rldl9kYmcoJmNsaWVudC0+ZGV2LCAib3YwMmExMCBzX3N0cmVhbSAoJWQpXG4iLCBvbik7 DQo+ID4gK211dGV4X2xvY2soJm92MDJhMTAtPm11dGV4KTsNCj4gPiArDQo+ID4gK2lmIChvdjAy YTEwLT5zdHJlYW1pbmcgPT0gb24pDQo+ID4gK2dvdG8gdW5sb2NrX2FuZF9yZXR1cm47DQo+ID4g Kw0KPiA+ICtpZiAob24pIHsNCj4gPiArcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmY2xpZW50 LT5kZXYpOw0KPiA+ICtpZiAocmV0IDwgMCkgew0KPiA+ICtwbV9ydW50aW1lX3B1dF9ub2lkbGUo JmNsaWVudC0+ZGV2KTsNCj4gPiArZ290byB1bmxvY2tfYW5kX3JldHVybjsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArcmV0ID0gX19vdjAyYTEwX3N0YXJ0X3N0cmVhbShvdjAyYTEwKTsNCj4gPiAraWYg KHJldCkgew0KPiA+ICtfX292MDJhMTBfc3RvcF9zdHJlYW0ob3YwMmExMCk7DQo+ID4gK292MDJh MTAtPnN0cmVhbWluZyA9ICFvbjsNCj4gPiArZ290byBlcnJfcnBtX3B1dDsNCj4gPiArfQ0KPiA+ ICt9IGVsc2Ugew0KPiA+ICtfX292MDJhMTBfc3RvcF9zdHJlYW0ob3YwMmExMCk7DQo+ID4gK3Bt X3J1bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQo+ID4gK30NCj4gPiArDQo+ID4gK292MDJhMTAt PnN0cmVhbWluZyA9IG9uOw0KPiA+ICttdXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4KTsNCj4g PiArDQo+ID4gK3JldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX3JwbV9wdXQ6DQo+ID4gK3BtX3J1 bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQo+ID4gK3VubG9ja19hbmRfcmV0dXJuOg0KPiA+ICtt dXRleF91bmxvY2soJm92MDJhMTAtPm11dGV4KTsNCj4gPiArDQo+ID4gK3JldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBvdjAyYTEw X3BtX29wcyA9IHsNCj4gPiArU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3Jj ZV9zdXNwZW5kLA0KPiA+ICtwbV9ydW50aW1lX2ZvcmNlX3Jlc3VtZSkNCj4gPiArU0VUX1JVTlRJ TUVfUE1fT1BTKG92MDJhMTBfcG93ZXJfb2ZmLCBvdjAyYTEwX3Bvd2VyX29uLCBOVUxMKQ0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArLyoNCj4gPiArICogb3YwMmExMF9zZXRfZXhwb3N1cmUgLSBGdW5j dGlvbiBjYWxsZWQgd2hlbiBzZXR0aW5nIGV4cG9zdXJlIHRpbWUNCj4gPiArICogQHByaXY6IFBv aW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKiBAdmFsOiBWYXJpYWJsZSBmb3IgZXhw b3N1cmUgdGltZSwgaW4gdGhlIHVuaXQgb2YgbWljcm8tc2Vjb25kDQo+ID4gKyAqDQo+ID4gKyAq IFNldCBleHBvc3VyZSB0aW1lIGJhc2VkIG9uIGlucHV0IHZhbHVlLg0KPiA+ICsgKg0KPiA+ICsg KiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGludCBvdjAyYTEw X3NldF9leHBvc3VyZShzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCwgaW50IHZhbCkNCj4gPiArew0K PiA+ICtzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3Yw MmExMC0+c3ViZGV2KTsNCj4gPiAraW50IHJldDsNCj4gPiArDQo+ID4gK3JldCA9IGkyY19zbWJ1 c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfUEFHRV9TV0lUQ0gsIFJFR19FTkFCTEUpOw0K PiA+ICtpZiAocmV0IDwgMCkNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gK3JldCA9IGky Y19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBPVjAyQTEwX1JFR19FWFBPU1VSRV9ILA0K PiA+ICsoKHZhbCA+PiBPVjAyQTEwX0VYUF9TSElGVCkgJg0KPiA+ICtPVjAyQTEwX01BU0tfOF9C SVRTKSk7DQo+ID4gK2lmIChyZXQgPCAwKQ0KPiA+ICtyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiAr cmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX0VYUE9T VVJFX0wsDQo+ID4gKyh2YWwgJiBPVjAyQTEwX01BU0tfOF9CSVRTKSk7DQo+ID4gK2lmIChyZXQg PCAwKQ0KPiA+ICtyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArcmV0dXJuIGkyY19zbWJ1c193cml0 ZV9ieXRlX2RhdGEoY2xpZW50LCBSRUdfR0xPQkFMX0VGRkVDVElWRSwNCj4gPiArIFJFR19FTkFC TEUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBfc2V0X2dhaW4oc3Ry dWN0IG92MDJhMTAgKm92MDJhMTAsIGludCB2YWwpDQo+ID4gK3sNCj4gPiArc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJm92MDJhMTAtPnN1YmRldik7DQo+ ID4gK2ludCByZXQ7DQo+ID4gKw0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRh KGNsaWVudCwgUkVHX1BBR0VfU1dJVENILCBSRUdfRU5BQkxFKTsNCj4gPiAraWYgKHJldCA8IDAp DQo+ID4gK3JldHVybiByZXQ7DQo+ID4gKw0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0 ZV9kYXRhKGNsaWVudCwgT1YwMkExMF9SRUdfR0FJTiwNCj4gPiArKHZhbCAmIE9WMDJBMTBfTUFT S184X0JJVFMpKTsNCj4gPiAraWYgKHJldCA8IDApDQo+ID4gK3JldHVybiByZXQ7DQo+ID4gKw0K PiA+ICtyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19HTE9CQUxf RUZGRUNUSVZFLA0KPiA+ICsgUkVHX0VOQUJMRSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgb3YwMmExMF9zZXRfdmJsYW5rKHN0cnVjdCBvdjAyYTEwICpvdjAyYTEwLCBpbnQgdmFs KQ0KPiA+ICt7DQo+ID4gK3N0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJk ZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KPiA+ICtpbnQgcmV0Ow0KPiA+ICsNCj4gPiArcmV0 ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIFJFR19QQUdFX1NXSVRDSCwgUkVH X0VOQUJMRSk7DQo+ID4gK2lmIChyZXQgPCAwKQ0KPiA+ICtyZXR1cm4gcmV0Ow0KPiA+ICsNCj4g PiArcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJBMTBfUkVHX1ZU U19ILA0KPiA+ICsoKCh2YWwgKyBvdjAyYTEwLT5jdXJfbW9kZS0+aGVpZ2h0IC0NCj4gPiArT1Yw MkExMF9CQVNJQ19MSU5FKSA+Pg0KPiA+ICtPVjAyQTEwX1ZUU19TSElGVCkgJg0KPiA+ICtPVjAy QTEwX01BU0tfOF9CSVRTKSk7DQo+ID4gK2lmIChyZXQgPCAwKQ0KPiA+ICtyZXR1cm4gcmV0Ow0K PiA+ICsNCj4gPiArcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIE9WMDJB MTBfUkVHX1ZUU19MLA0KPiA+ICsoKHZhbCArIG92MDJhMTAtPmN1cl9tb2RlLT5oZWlnaHQgLQ0K PiA+ICtPVjAyQTEwX0JBU0lDX0xJTkUpICYNCj4gPiArT1YwMkExMF9NQVNLXzhfQklUUykpOw0K PiA+ICtpZiAocmV0IDwgMCkNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gK3JldHVybiBp MmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQo+ ID4gKyBSRUdfRU5BQkxFKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBvdjAyYTEw X3NldF90ZXN0X3BhdHRlcm4oc3RydWN0IG92MDJhMTAgKm92MDJhMTAsIGludCBwYXR0ZXJuKQ0K PiA+ICt7DQo+ID4gK3N0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZk YXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0KPiA+ICtpbnQgcmV0Ow0KPiA+ICsNCj4gPiAraWYgKHBh dHRlcm4pDQo+ID4gK3BhdHRlcm4gPSBPVjAyQTEwX1RFU1RfUEFUVEVSTl9FTkFCTEU7DQo+ID4g Kw0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1BBR0Vf U1dJVENILCBSRUdfRU5BQkxFKTsNCj4gPiAraWYgKHJldCA8IDApDQo+ID4gK3JldHVybiByZXQ7 DQo+ID4gKw0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgT1Yw MkExMF9SRUdfVEVTVF9QQVRURVJOLA0KPiA+ICtwYXR0ZXJuKTsNCj4gPiAraWYgKHJldCA8IDAp DQo+ID4gK3JldHVybiByZXQ7DQo+ID4gKw0KPiA+ICtyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0 ZV9kYXRhKGNsaWVudCwgUkVHX0dMT0JBTF9FRkZFQ1RJVkUsDQo+ID4gK1JFR19FTkFCTEUpOw0K PiA+ICtpZiAocmV0IDwgMCkNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gK3JldHVybiBp MmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgUkVHX1NDX0NUUkxfTU9ERSwNCj4gPiAr IFNDX0NUUkxfTU9ERV9TVFJFQU1JTkcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IG92MDJhMTBfc2V0X2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkNCj4gPiArew0KPiA+ICtz dHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLA0KPiA+ ICsgICAgICAgc3RydWN0IG92MDJhMTAsIGN0cmxfaGFuZGxlcik7DQo+ID4gK3N0cnVjdCBpMmNf Y2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZvdjAyYTEwLT5zdWJkZXYpOw0K PiA+ICtzNjQgbWF4X2V4cG87DQo+ID4gK2ludCByZXQ7DQo+ID4gKw0KPiA+ICsvKiBQcm9wYWdh dGUgY2hhbmdlIG9mIGN1cnJlbnQgY29udHJvbCB0byBhbGwgcmVsYXRlZCBjb250cm9scyAqLw0K PiA+ICtpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfVkJMQU5LKSB7DQo+ID4gKy8qIFVwZGF0ZSBt YXggZXhwb3N1cmUgd2hpbGUgbWVldGluZyBleHBlY3RlZCB2YmxhbmtpbmcgKi8NCj4gPiArbWF4 X2V4cG8gPSBvdjAyYTEwLT5jdXJfbW9kZS0+aGVpZ2h0ICsgY3RybC0+dmFsIC0NCj4gPiArICAg T1YwMkExMF9FWFBPU1VSRV9NQVhfTUFSR0lOOw0KPiA+ICtfX3Y0bDJfY3RybF9tb2RpZnlfcmFu Z2Uob3YwMmExMC0+ZXhwb3N1cmUsDQo+ID4gKyBvdjAyYTEwLT5leHBvc3VyZS0+bWluaW11bSwg bWF4X2V4cG8sDQo+ID4gKyBvdjAyYTEwLT5leHBvc3VyZS0+c3RlcCwNCj4gPiArIG92MDJhMTAt PmV4cG9zdXJlLT5kZWZhdWx0X3ZhbHVlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogVjRMMiBj b250cm9scyB2YWx1ZXMgd2lsbCBiZSBhcHBsaWVkIG9ubHkgd2hlbiBwb3dlciBpcyBhbHJlYWR5 IHVwICovDQo+ID4gK2lmICghcG1fcnVudGltZV9nZXRfaWZfaW5fdXNlKCZjbGllbnQtPmRldikp DQo+ID4gK3JldHVybiAwOw0KPiA+ICsNCj4gPiArc3dpdGNoIChjdHJsLT5pZCkgew0KPiA+ICtj YXNlIFY0TDJfQ0lEX0VYUE9TVVJFOg0KPiA+ICtyZXQgPSBvdjAyYTEwX3NldF9leHBvc3VyZShv djAyYTEwLCBjdHJsLT52YWwpOw0KPiA+ICticmVhazsNCj4gPiArY2FzZSBWNEwyX0NJRF9BTkFM T0dVRV9HQUlOOg0KPiA+ICtyZXQgPSBvdjAyYTEwX3NldF9nYWluKG92MDJhMTAsIGN0cmwtPnZh bCk7DQo+ID4gK2JyZWFrOw0KPiA+ICtjYXNlIFY0TDJfQ0lEX1ZCTEFOSzoNCj4gPiArcmV0ID0g b3YwMmExMF9zZXRfdmJsYW5rKG92MDJhMTAsIGN0cmwtPnZhbCk7DQo+ID4gK2JyZWFrOw0KPiA+ ICtjYXNlIFY0TDJfQ0lEX1RFU1RfUEFUVEVSTjoNCj4gPiArcmV0ID0gb3YwMmExMF9zZXRfdGVz dF9wYXR0ZXJuKG92MDJhMTAsIGN0cmwtPnZhbCk7DQo+ID4gK2JyZWFrOw0KPiA+ICtkZWZhdWx0 Og0KPiA+ICtyZXQgPSAtRUlOVkFMOw0KPiA+ICticmVhazsNCj4gPiArfTsNCj4gPiArDQo+ID4g K3BtX3J1bnRpbWVfcHV0KCZjbGllbnQtPmRldik7DQo+ID4gKw0KPiA+ICtyZXR1cm4gcmV0Ow0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVv X29wcyBvdjAyYTEwX3ZpZGVvX29wcyA9IHsNCj4gPiArLnNfc3RyZWFtID0gb3YwMmExMF9zX3N0 cmVhbSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJk ZXZfcGFkX29wcyBvdjAyYTEwX3BhZF9vcHMgPSB7DQo+ID4gKy5pbml0X2NmZyA9IG92MDJhMTBf ZW50aXR5X2luaXRfY2ZnLA0KPiA+ICsuZW51bV9tYnVzX2NvZGUgPSBvdjAyYTEwX2VudW1fbWJ1 c19jb2RlLA0KPiA+ICsuZW51bV9mcmFtZV9zaXplID0gb3YwMmExMF9lbnVtX2ZyYW1lX3NpemVz LA0KPiA+ICsuZ2V0X2ZtdCA9IG92MDJhMTBfZ2V0X2ZtdCwNCj4gPiArLnNldF9mbXQgPSBvdjAy YTEwX3NldF9mbXQsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0 bDJfc3ViZGV2X29wcyBvdjAyYTEwX3N1YmRldl9vcHMgPSB7DQo+ID4gKy52aWRlbz0gJm92MDJh MTBfdmlkZW9fb3BzLA0KPiA+ICsucGFkPSAmb3YwMmExMF9wYWRfb3BzLA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtZWRpYV9lbnRpdHlfb3BlcmF0aW9ucyBvdjAy YTEwX3N1YmRldl9lbnRpdHlfb3BzID0gew0KPiA+ICsubGlua192YWxpZGF0ZSA9IHY0bDJfc3Vi ZGV2X2xpbmtfdmFsaWRhdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHY0bDJfY3RybF9vcHMgb3YwMmExMF9jdHJsX29wcyA9IHsNCj4gPiArLnNfY3RybCA9IG92 MDJhMTBfc2V0X2N0cmwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG92MDJhMTBf aW5pdGlhbGl6ZV9jb250cm9scyhzdHJ1Y3Qgb3YwMmExMCAqb3YwMmExMCkNCj4gPiArew0KPiA+ ICtzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmb3YwMmEx MC0+c3ViZGV2KTsNCj4gPiArY29uc3Qgc3RydWN0IG92MDJhMTBfbW9kZSAqbW9kZTsNCj4gPiAr c3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoYW5kbGVyOw0KPiA+ICtzdHJ1Y3QgdjRsMl9jdHJs ICpjdHJsOw0KPiA+ICt1NjQgZXhwb3N1cmVfbWF4Ow0KPiA+ICt1MzIgcGl4ZWxfcmF0ZSwgaF9i bGFuazsNCj4gPiAraW50IHJldDsNCj4gPiArDQo+ID4gK2hhbmRsZXIgPSAmb3YwMmExMC0+Y3Ry bF9oYW5kbGVyOw0KPiA+ICttb2RlID0gb3YwMmExMC0+Y3VyX21vZGU7DQo+ID4gK3JldCA9IHY0 bDJfY3RybF9oYW5kbGVyX2luaXQoaGFuZGxlciwgNyk7DQo+ID4gK2lmIChyZXQpDQo+ID4gK3Jl dHVybiByZXQ7DQo+ID4gKw0KPiA+ICtoYW5kbGVyLT5sb2NrID0gJm92MDJhMTAtPm11dGV4Ow0K PiA+ICsNCj4gPiArY3RybCA9IHY0bDJfY3RybF9uZXdfaW50X21lbnUoaGFuZGxlciwgTlVMTCwg VjRMMl9DSURfTElOS19GUkVRLCAwLCAwLA0KPiA+ICsgICAgICBsaW5rX2ZyZXFfbWVudV9pdGVt cyk7DQo+ID4gK2lmIChjdHJsKQ0KPiA+ICtjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19S RUFEX09OTFk7DQo+ID4gKw0KPiA+ICtwaXhlbF9yYXRlID0gdG9fcGl4ZWxfcmF0ZSgwKTsNCj4g PiArdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgTlVMTCwgVjRMMl9DSURfUElYRUxfUkFURSwg MCwgcGl4ZWxfcmF0ZSwgMSwNCj4gPiArICBwaXhlbF9yYXRlKTsNCj4gPiArDQo+ID4gK2hfYmxh bmsgPSBtb2RlLT5odHNfZGVmIC0gbW9kZS0+d2lkdGg7DQo+ID4gK292MDJhMTAtPmhibGFuayA9 IHY0bDJfY3RybF9uZXdfc3RkKGhhbmRsZXIsIE5VTEwsIFY0TDJfQ0lEX0hCTEFOSywNCj4gPiAr ICAgIGhfYmxhbmssIGhfYmxhbmssIDEsIGhfYmxhbmspOw0KPiA+ICtpZiAob3YwMmExMC0+aGJs YW5rKQ0KPiA+ICtvdjAyYTEwLT5oYmxhbmstPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1JFQURf T05MWTsNCj4gPiArDQo+ID4gK292MDJhMTAtPnZibGFuayA9IHY0bDJfY3RybF9uZXdfc3RkKGhh bmRsZXIsICZvdjAyYTEwX2N0cmxfb3BzLA0KPiA+ICsgICAgVjRMMl9DSURfVkJMQU5LLCBtb2Rl LT52dHNfZGVmIC0NCj4gPiArICAgIG1vZGUtPmhlaWdodCwNCj4gPiArICAgIE9WMDJBMTBfVlRT X01BWCAtIG1vZGUtPmhlaWdodCwgMSwNCj4gPiArICAgIG1vZGUtPnZ0c19kZWYgLSBtb2RlLT5o ZWlnaHQpOw0KPiA+ICsNCj4gPiArZXhwb3N1cmVfbWF4ID0gbW9kZS0+dnRzX2RlZiAtIDQ7DQo+ ID4gK292MDJhMTAtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwgJm92MDJh MTBfY3RybF9vcHMsDQo+ID4gKyAgICAgIFY0TDJfQ0lEX0VYUE9TVVJFLA0KPiA+ICsgICAgICBP VjAyQTEwX0VYUE9TVVJFX01JTiwNCj4gPiArICAgICAgZXhwb3N1cmVfbWF4LA0KPiA+ICsgICAg ICBPVjAyQTEwX0VYUE9TVVJFX1NURVAsDQo+ID4gKyAgICAgIG1vZGUtPmV4cF9kZWYpOw0KPiA+ ICsNCj4gPiArb3YwMmExMC0+YW5hbF9nYWluID0gdjRsMl9jdHJsX25ld19zdGQoaGFuZGxlciwg Jm92MDJhMTBfY3RybF9vcHMsDQo+ID4gKyAgICAgICBWNEwyX0NJRF9BTkFMT0dVRV9HQUlOLA0K PiA+ICsgICAgICAgT1YwMkExMF9HQUlOX01JTiwNCj4gPiArICAgICAgIE9WMDJBMTBfR0FJTl9N QVgsDQo+ID4gKyAgICAgICBPVjAyQTEwX0dBSU5fU1RFUCwNCj4gPiArICAgICAgIE9WMDJBMTBf R0FJTl9ERUZBVUxUKTsNCj4gPiArDQo+ID4gK292MDJhMTAtPnRlc3RfcGF0dGVybiA9DQo+ID4g K3Y0bDJfY3RybF9uZXdfc3RkX21lbnVfaXRlbXMoaGFuZGxlciwgJm92MDJhMTBfY3RybF9vcHMs DQo+ID4gKyAgICAgVjRMMl9DSURfVEVTVF9QQVRURVJOLA0KPiA+ICsgICAgIEFSUkFZX1NJWkUo b3YwMmExMF90ZXN0X3BhdHRlcm5fbWVudSkgLQ0KPiA+ICsgICAgIDEsIDAsIDAsDQo+ID4gKyAg ICAgb3YwMmExMF90ZXN0X3BhdHRlcm5fbWVudSk7DQo+ID4gKw0KPiA+ICtpZiAoaGFuZGxlci0+ ZXJyb3IpIHsNCj4gPiArcmV0ID0gaGFuZGxlci0+ZXJyb3I7DQo+ID4gK2Rldl9lcnIoJmNsaWVu dC0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgY29udHJvbHMoJWQpXG4iLCByZXQpOw0KPiA+ICtnb3Rv IGVycl9mcmVlX2hhbmRsZXI7DQo+ID4gK30NCj4gPiArDQo+ID4gK292MDJhMTAtPnN1YmRldi5j dHJsX2hhbmRsZXIgPSBoYW5kbGVyOw0KPiA+ICsNCj4gPiArcmV0dXJuIDA7DQo+ID4gKw0KPiA+ ICtlcnJfZnJlZV9oYW5kbGVyOg0KPiA+ICt2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKGhhbmRsZXIp Ow0KPiA+ICsNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBvdjAyYTEwX2NoZWNrX2h3Y2ZnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG92MDJhMTAg Km92MDJhMTApDQo+ID4gK3sNCj4gPiArc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmVwOw0KPiA+ICtz dHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gZGV2X2Z3bm9kZShkZXYpOw0KPiA+ICtzdHJ1 Y3QgdjRsMl9md25vZGVfZW5kcG9pbnQgYnVzX2NmZyA9IHsNCj4gPiArLmJ1c190eXBlID0gVjRM Ml9NQlVTX0NTSTJfRFBIWQ0KPiA+ICt9Ow0KPiA+ICt1bnNpZ25lZCBpbnQgaSwgajsNCj4gPiAr aW50IHJldDsNCj4gPiArDQo+ID4gK2lmICghZndub2RlKQ0KPiA+ICtyZXR1cm4gLUVOWElPOw0K PiA+ICsNCj4gPiArZXAgPSBmd25vZGVfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZndub2RlLCBO VUxMKTsNCj4gPiAraWYgKCFlcCkNCj4gPiArcmV0dXJuIC1FTlhJTzsNCj4gPiArDQo+ID4gK3Jl dCA9IHY0bDJfZndub2RlX2VuZHBvaW50X2FsbG9jX3BhcnNlKGVwLCAmYnVzX2NmZyk7DQo+ID4g K2Z3bm9kZV9oYW5kbGVfcHV0KGVwKTsNCj4gPiAraWYgKHJldCkNCj4gPiArcmV0dXJuIHJldDsN Cj4gPiArDQo+ID4gKy8qIE9wdGlvbmFsIGluZGljYXRpb24gb2YgbWlwaSBjbG9jayBsYW5lIG1v ZGUgKi8NCj4gPiAraWYgKGJ1c19jZmcuYnVzLm1pcGlfY3NpMi5mbGFncyAmIFY0TDJfTUJVU19D U0kyX05PTkNPTlRJTlVPVVNfQ0xPQ0spDQo+ID4gK292MDJhMTAtPm1pcGlfY2xvY2tfaHNfbW9k ZV9lbmFibGUgPSB0cnVlOw0KPiA+ICsNCj4gPiAraWYgKCFidXNfY2ZnLm5yX29mX2xpbmtfZnJl cXVlbmNpZXMpIHsNCj4gPiArZGV2X2VycihkZXYsICJubyBsaW5rIGZyZXF1ZW5jaWVzIGRlZmlu ZWQiKTsNCj4gPiArcmV0ID0gLUVJTlZBTDsNCj4gPiArZ290byBjaGVja19od2NmZ19lcnJvcjsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGlua19mcmVx X21lbnVfaXRlbXMpOyBpKyspIHsNCj4gPiArZm9yIChqID0gMDsgaiA8IGJ1c19jZmcubnJfb2Zf bGlua19mcmVxdWVuY2llczsgaisrKSB7DQo+ID4gK2lmIChsaW5rX2ZyZXFfbWVudV9pdGVtc1tp XSA9PQ0KPiA+ICtidXNfY2ZnLmxpbmtfZnJlcXVlbmNpZXNbal0pDQo+ID4gK2JyZWFrOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtpZiAoaiA9PSBidXNfY2ZnLm5yX29mX2xpbmtfZnJlcXVlbmNpZXMp IHsNCj4gPiArZGV2X2VycihkZXYsICJubyBsaW5rIGZyZXF1ZW5jeSAlbGxkIHN1cHBvcnRlZCIs DQo+ID4gK2xpbmtfZnJlcV9tZW51X2l0ZW1zW2ldKTsNCj4gPiArcmV0ID0gLUVJTlZBTDsNCj4g PiArZ290byBjaGVja19od2NmZ19lcnJvcjsNCj4gPiArfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtj aGVja19od2NmZ19lcnJvcjoNCj4gPiArdjRsMl9md25vZGVfZW5kcG9pbnRfZnJlZSgmYnVzX2Nm Zyk7DQo+ID4gKw0KPiA+ICtyZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IG92MDJhMTBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gPiArew0KPiA+ ICtzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7DQo+ID4gK3N0cnVjdCBvdjAyYTEw ICpvdjAyYTEwOw0KPiA+ICt1bnNpZ25lZCBpbnQgcm90YXRpb247DQo+ID4gK3Vuc2lnbmVkIGlu dCBjbG9ja19sYW5lX3R4X3NwZWVkOw0KPiA+ICt1bnNpZ25lZCBpbnQgaTsNCj4gPiAraW50IHJl dDsNCj4gPiArDQo+ID4gK292MDJhMTAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm92MDJh MTApLCBHRlBfS0VSTkVMKTsNCj4gPiAraWYgKCFvdjAyYTEwKQ0KPiA+ICtyZXR1cm4gLUVOT01F TTsNCj4gPiArDQo+ID4gK3JldCA9IG92MDJhMTBfY2hlY2tfaHdjZmcoZGV2LCBvdjAyYTEwKTsN Cj4gPiAraWYgKHJldCkgew0KPiA+ICtkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjaGVjayBIVyBj b25maWd1cmF0aW9uOiAlZCIsIHJldCk7DQo+ID4gK3JldHVybiByZXQ7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3Y0bDJfaTJjX3N1YmRldl9pbml0KCZvdjAyYTEwLT5zdWJkZXYsIGNsaWVudCwgJm92 MDJhMTBfc3ViZGV2X29wcyk7DQo+ID4gK292MDJhMTAtPnVwc2lkZV9kb3duID0gZmFsc2U7DQo+ ID4gK292MDJhMTAtPmZtdC5jb2RlID0gTUVESUFfQlVTX0ZNVF9TQkdHUjEwXzFYMTA7DQo+ID4g Kw0KPiA+ICsvKiBPcHRpb25hbCBpbmRpY2F0aW9uIG9mIHBoeXNpY2FsIHJvdGF0aW9uIG9mIHNl bnNvciAqLw0KPiA+ICtyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoZGV2X2Z3bm9kZShk ZXYpLCAicm90YXRpb24iLCAmcm90YXRpb24pOw0KPiA+ICtpZiAoIXJldCkgew0KPiA+ICtvdjAy YTEwLT51cHNpZGVfZG93biA9IHJvdGF0aW9uID09IDE4MDsNCj4gPiAraWYgKHJvdGF0aW9uID09 IDE4MCkgew0KPiA+ICtvdjAyYTEwLT51cHNpZGVfZG93biA9IHRydWU7DQo+ID4gK292MDJhMTAt PmZtdC5jb2RlID0gTUVESUFfQlVTX0ZNVF9TUkdHQjEwXzFYMTA7DQo+ID4gK30NCj4gPiArfSBl bHNlIHsNCj4gPiArZGV2X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCByb3RhdGlvblxuIik7DQo+ IA0KPiBUaGUgcHJvcGVydHkgaXMgb3B0aW9uYWw7IHlvdSBzaG91bGRuJ3Qgd2FybiBpdCdzIG1p c3NpbmcgaW4gdGhhdCBjYXNlLg0KPiANCg0KVGhhbmtzIGZvciB0aGUgcmVtaW5kZXIuDQpGaXhl ZCBpbiBuZXh0IHJlbGVhc2UuDQoNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogT3B0aW9uYWwgaW5k aWNhdGlvbiBvZiBtaXBpIFRYIHNwZWVkICovDQo+ID4gK3JldCA9IGZ3bm9kZV9wcm9wZXJ0eV9y ZWFkX3UzMihkZXZfZndub2RlKGRldiksICJvdnRpLG1pcGktdHgtc3BlZWQiLA0KPiA+ICsgICAg ICAgJmNsb2NrX2xhbmVfdHhfc3BlZWQpOw0KPiA+ICsNCj4gDQo+IFBsZWFzZSBzZWUgbXkgY29t bWVudHMgb24gdjUuDQo+IA0KDQpTb3JyeSBmb3Igbm90IGFkZHJlc3NpbmcgdGhhdC4NCkZpeGVk IGluIG5leHQgcmVsZWFzZS4NCg0KPiA+ICtpZiAoIXJldCkNCj4gPiArb3YwMmExMC0+bWlwaV9j bG9ja190eF9zcGVlZCA9IGNsb2NrX2xhbmVfdHhfc3BlZWQ7DQo+ID4gK2Vsc2UNCj4gPiArZGV2 X3dhcm4oZGV2LCAiZmFpbGVkIHRvIGdldCBtaXBpIHR4IHNwZWVkLCB1c2luZyBkZWZhdWx0Li4u XG4iKTsNCj4gPiArDQo+ID4gKy8qIEdldCBzeXN0ZW0gY2xvY2sgKGVjbGspICovDQo+ID4gK292 MDJhMTAtPmVjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAiZWNsayIpOw0KPiA+ICtpZiAoSVNfRVJS KG92MDJhMTAtPmVjbGspKSB7DQo+ID4gK3JldCA9IFBUUl9FUlIob3YwMmExMC0+ZWNsayk7DQo+ ID4gK2Rldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBlY2xrICVkXG4iLCByZXQpOw0KPiA+ICty ZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtyZXQgPSBmd25vZGVfcHJvcGVydHlfcmVh ZF91MzIoZGV2X2Z3bm9kZShkZXYpLCAiY2xvY2stZnJlcXVlbmN5IiwNCj4gPiArICAgICAgICZv djAyYTEwLT5lY2xrX2ZyZXEpOw0KPiA+ICtpZiAocmV0KSB7DQo+ID4gK2Rldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGdldCBlY2xrIGZyZXF1ZW5jeVxuIik7DQo+ID4gK3JldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3JldCA9IGNsa19zZXRfcmF0ZShvdjAyYTEwLT5lY2xrLCBvdjAyYTEw LT5lY2xrX2ZyZXEpOw0KPiA+ICtpZiAocmV0KSB7DQo+ID4gK2Rldl9lcnIoZGV2LCAiZmFpbGVk IHRvIHNldCBlY2xrIGZyZXF1ZW5jeSAoMjRNSHopXG4iKTsNCj4gPiArcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICsNCj4gPiAraWYgKGNsa19nZXRfcmF0ZShvdjAyYTEwLT5lY2xrKSAhPSBPVjAy QTEwX0VDTEtfRlJFUSkgew0KPiA+ICtkZXZfd2FybihkZXYsICJ3cm9uZyBlY2xrIGZyZXF1ZW5j eSAlZCBIeiwgZXhwZWN0ZWQ6ICVkIEh6XG4iLA0KPiA+ICsgb3YwMmExMC0+ZWNsa19mcmVxLCBP VjAyQTEwX0VDTEtfRlJFUSk7DQo+ID4gK3JldHVybiAtRUlOVkFMOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtvdjAyYTEwLT5wZF9ncGlvID0gZGV2bV9ncGlvZF9nZXQoZGV2LCAicG93ZXJkb3duIiwg R1BJT0RfT1VUX0hJR0gpOw0KPiA+ICtpZiAoSVNfRVJSKG92MDJhMTAtPnBkX2dwaW8pKSB7DQo+ ID4gK3JldCA9IFBUUl9FUlIob3YwMmExMC0+cGRfZ3Bpbyk7DQo+ID4gK2Rldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGdldCBwb3dlcmRvd24tZ3Bpb3MgJWRcbiIsIHJldCk7DQo+ID4gK3JldHVybiBy ZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK292MDJhMTAtPm5fcnN0X2dwaW8gPSBkZXZtX2dwaW9k X2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9MT1cpOw0KPiA+ICtpZiAoSVNfRVJSKG92MDJh MTAtPm5fcnN0X2dwaW8pKSB7DQo+ID4gK3JldCA9IFBUUl9FUlIob3YwMmExMC0+bl9yc3RfZ3Bp byk7DQo+ID4gK2Rldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldC1ncGlvcyAlZFxuIiwg cmV0KTsNCj4gPiArcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArZm9yIChpID0gMDsg aSA8IE9WMDJBMTBfTlVNX1NVUFBMSUVTOyBpKyspDQo+ID4gK292MDJhMTAtPnN1cHBsaWVzW2ld LnN1cHBseSA9IG92MDJhMTBfc3VwcGx5X25hbWVzW2ldOw0KPiA+ICsNCj4gPiArcmV0ID0gZGV2 bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBPVjAyQTEwX05VTV9TVVBQTElFUywNCj4gPiArICAg ICAgb3YwMmExMC0+c3VwcGxpZXMpOw0KPiA+ICtpZiAocmV0KSB7DQo+ID4gK2Rldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIGdldCByZWd1bGF0b3JzXG4iKTsNCj4gPiArcmV0dXJuIHJldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArbXV0ZXhfaW5pdCgmb3YwMmExMC0+bXV0ZXgpOw0KPiA+ICtvdjAyYTEw LT5jdXJfbW9kZSA9ICZzdXBwb3J0ZWRfbW9kZXNbMF07DQo+ID4gK3JldCA9IG92MDJhMTBfaW5p dGlhbGl6ZV9jb250cm9scyhvdjAyYTEwKTsNCj4gPiAraWYgKHJldCkgew0KPiA+ICtkZXZfZXJy KGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIGNvbnRyb2xzXG4iKTsNCj4gPiArZ290byBlcnJf ZGVzdHJveV9tdXRleDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArb3YwMmExMC0+c3ViZGV2LmZsYWdz IHw9IFY0TDJfU1VCREVWX0ZMX0hBU19ERVZOT0RFOw0KPiA+ICtvdjAyYTEwLT5zdWJkZXYuZW50 aXR5Lm9wcyA9ICZvdjAyYTEwX3N1YmRldl9lbnRpdHlfb3BzOw0KPiA+ICtvdjAyYTEwLT5zdWJk ZXYuZW50aXR5LmZ1bmN0aW9uID0gTUVESUFfRU5UX0ZfQ0FNX1NFTlNPUjsNCj4gPiArb3YwMmEx MC0+cGFkLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsNCj4gPiArcmV0ID0gbWVkaWFfZW50 aXR5X3BhZHNfaW5pdCgmb3YwMmExMC0+c3ViZGV2LmVudGl0eSwgMSwgJm92MDJhMTAtPnBhZCk7 DQo+ID4gK2lmIChyZXQgPCAwKSB7DQo+ID4gK2Rldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQg ZW50aXR5IHBhZHM6ICVkIiwgcmV0KTsNCj4gPiArZ290byBlcnJfZnJlZV9oYW5kbGVyOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtyZXQgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigmb3YwMmEx MC0+c3ViZGV2KTsNCj4gPiAraWYgKHJldCkgew0KPiA+ICtkZXZfZXJyKGRldiwgImZhaWxlZCB0 byByZWdpc3RlciBWNEwyIHN1YmRldjogJWQiLCByZXQpOw0KPiA+ICtnb3RvIGVycl9jbGVhbl9l bnRpdHk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3BtX3J1bnRpbWVfZW5hYmxlKGRldik7DQo+ID4g K2lmICghcG1fcnVudGltZV9lbmFibGVkKGRldikpIHsNCj4gPiArcmV0ID0gb3YwMmExMF9wb3dl cl9vbihkZXYpOw0KPiA+ICtpZiAocmV0IDwgMCkgew0KPiA+ICtkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBwb3dlciBvbjogJWRcbiIsIHJldCk7DQo+ID4gK2dvdG8gZXJyX2NsZWFuX2VudGl0eTsN Cj4gPiArfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtyZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl9j bGVhbl9lbnRpdHk6DQo+ID4gK21lZGlhX2VudGl0eV9jbGVhbnVwKCZvdjAyYTEwLT5zdWJkZXYu ZW50aXR5KTsNCj4gPiArZXJyX2ZyZWVfaGFuZGxlcjoNCj4gPiArdjRsMl9jdHJsX2hhbmRsZXJf ZnJlZShvdjAyYTEwLT5zdWJkZXYuY3RybF9oYW5kbGVyKTsNCj4gPiArZXJyX2Rlc3Ryb3lfbXV0 ZXg6DQo+ID4gK211dGV4X2Rlc3Ryb3koJm92MDJhMTAtPm11dGV4KTsNCj4gPiArDQo+ID4gK3Jl dHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgb3YwMmExMF9yZW1vdmUo c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkNCj4gPiArew0KPiA+ICtzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7DQo+ID4gK3N0cnVjdCBvdjAyYTEw ICpvdjAyYTEwID0gdG9fb3YwMmExMChzZCk7DQo+ID4gKw0KPiA+ICt2NGwyX2FzeW5jX3VucmVn aXN0ZXJfc3ViZGV2KHNkKTsNCj4gPiArbWVkaWFfZW50aXR5X2NsZWFudXAoJnNkLT5lbnRpdHkp Ow0KPiA+ICt2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKHNkLT5jdHJsX2hhbmRsZXIpOw0KPiA+ICtw bV9ydW50aW1lX2Rpc2FibGUoJmNsaWVudC0+ZGV2KTsNCj4gPiAraWYgKCFwbV9ydW50aW1lX3N0 YXR1c19zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KSkNCj4gPiArb3YwMmExMF9wb3dlcl9vZmYoJmNs aWVudC0+ZGV2KTsNCj4gPiArcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCZjbGllbnQtPmRldik7 DQo+ID4gK211dGV4X2Rlc3Ryb3koJm92MDJhMTAtPm11dGV4KTsNCj4gPiArDQo+ID4gK3JldHVy biAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBvdjAyYTEwX29mX21hdGNoW10gPSB7DQo+ID4gK3sgLmNvbXBhdGlibGUgPSAib3Z0aSxvdjAy YTEwIiB9LA0KPiA+ICt7fQ0KPiA+ICt9Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBv djAyYTEwX29mX21hdGNoKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBv djAyYTEwX2kyY19kcml2ZXIgPSB7DQo+ID4gKy5kcml2ZXIgPSB7DQo+ID4gKy5uYW1lID0gIm92 MDJhMTAiLA0KPiA+ICsucG0gPSAmb3YwMmExMF9wbV9vcHMsDQo+ID4gKy5vZl9tYXRjaF90YWJs ZSA9IG92MDJhMTBfb2ZfbWF0Y2gsDQo+ID4gK30sDQo+ID4gKy5wcm9iZV9uZXc9ICZvdjAyYTEw X3Byb2JlLA0KPiA+ICsucmVtb3ZlPSAmb3YwMmExMF9yZW1vdmUsDQo+ID4gK307DQo+ID4gKw0K PiA+ICttb2R1bGVfaTJjX2RyaXZlcihvdjAyYTEwX2kyY19kcml2ZXIpOw0KPiA+ICsNCj4gPiAr TU9EVUxFX0FVVEhPUigiRG9uZ2NodW4gWmh1IDxkb25nY2h1bi56aHVAbWVkaWF0ZWsuY29tPiIp Ow0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk9tbmlWaXNpb24gT1YwMkExMCBzZW5zb3IgZHJp dmVyIik7DQo+ID4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gPiArDQo+IA0KPiAtLQ0K PiBSZWdhcmRzLA0KPiANCj4gU2FrYXJpIEFpbHVzDQo+ICoqKioqKioqKioqKioqKioqKioqKk1F RElBVEVLIENvbmZpZGVudGlhbC9JbnRlcm5hbCBVc2UqKioqKioqKioqKioqKioqKioqKioNCg0K