From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id EC20C1B0FF for ; Wed, 12 Dec 2018 22:18:14 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 12 Dec 2018 13:18:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,346,1539673200"; d="scan'208";a="101062582" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by orsmga008.jf.intel.com with ESMTP; 12 Dec 2018 13:18:13 -0800 Received: from fmsmsx114.amr.corp.intel.com (10.18.116.8) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.408.0; Wed, 12 Dec 2018 13:18:13 -0800 Received: from fmsmsx120.amr.corp.intel.com ([169.254.15.52]) by FMSMSX114.amr.corp.intel.com ([169.254.6.66]) with mapi id 14.03.0415.000; Wed, 12 Dec 2018 13:18:12 -0800 From: "Stillwell Jr, Paul M" To: =?utf-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , "Lu, Wenzhuo" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v3 11/34] net/ice: Add common functions Thread-Index: AQHUkee3ZytBR5omPU+cdKWlVoK3vaV8DH0A//+PlaA= Date: Wed, 12 Dec 2018 21:18:12 +0000 Message-ID: References: <1542956179-80951-1-git-send-email-wenzhuo.lu@intel.com> <1544598004-27099-1-git-send-email-wenzhuo.lu@intel.com> <1544598004-27099-12-git-send-email-wenzhuo.lu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTgwNjliZmItZmM0MC00Mjc1LThiM2QtYjBjMGMyNDI0MmU2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiemJpM0pGR1pSdFhmcTcwSGE3TzZBQ1hzZ2ZrbVRaV1VmSktSTk9OSUhNQmMySE1McElSNitoTjQ1bWJHbTlqeiJ9 dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.1.200.106] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Mailman-Approved-At: Thu, 13 Dec 2018 13:33:58 +0100 Subject: Re: [dpdk-dev] [PATCH v3 11/34] net/ice: Add common functions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Dec 2018 21:18:16 -0000 LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCkZyb206IE1hdHRpYXMgUsO2bm5ibG9tIFttYWls dG86bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb21dIA0KU2VudDogV2VkbmVzZGF5LCBEZWNl bWJlciAxMiwgMjAxOCAxMTo1OSBBTQ0KVG86IEx1LCBXZW56aHVvIDx3ZW56aHVvLmx1QGludGVs LmNvbT47IGRldkBkcGRrLm9yZw0KQ2M6IFN0aWxsd2VsbCBKciwgUGF1bCBNIDxwYXVsLm0uc3Rp bGx3ZWxsLmpyQGludGVsLmNvbT4NClN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAx MS8zNF0gbmV0L2ljZTogQWRkIGNvbW1vbiBmdW5jdGlvbnMNCg0KT24gMjAxOC0xMi0xMiAwNzo1 OSwgV2Vuemh1byBMdSB3cm90ZToNCj4gRnJvbTogUGF1bCBNIFN0aWxsd2VsbCBKciA8cGF1bC5t LnN0aWxsd2VsbC5qckBpbnRlbC5jb20+DQo+IA0KPiBBZGQgY29kZSB0aGF0IG11bHRpcGxlIG90 aGVyIGZlYXR1cmVzIHVzZS4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFBhdWwgTSBTdGlsbHdlbGwg SnIgPHBhdWwubS5zdGlsbHdlbGwuanJAaW50ZWwuY29tPg0KPiAtLS0NCj4gICBkcml2ZXJzL25l dC9pY2UvYmFzZS9pY2VfY29tbW9uLmMgfCAzNTIxICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4gICBkcml2ZXJzL25ldC9pY2UvYmFzZS9pY2VfY29tbW9uLmggfCAgMTg2 ICsrDQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAzNzA3IGluc2VydGlvbnMoKykNCj4gICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvaWNlL2Jhc2UvaWNlX2NvbW1vbi5jDQo+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2ljZS9iYXNlL2ljZV9jb21tb24uaA0KPiANCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ljZS9iYXNlL2ljZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0 L2ljZS9iYXNlL2ljZV9jb21tb24uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw MDAwMDAwLi5kNDkyNjRkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvaWNl L2Jhc2UvaWNlX2NvbW1vbi5jDQo+IEBAIC0wLDAgKzEsMzUyMSBAQA0KPiArLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMDEtMjAx OA0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlICJpY2VfY29tbW9uLmgiDQo+ICsjaW5jbHVkZSAi aWNlX3NjaGVkLmgiDQo+ICsjaW5jbHVkZSAiaWNlX2FkbWlucV9jbWQuaCINCj4gKw0KPiArI2lu Y2x1ZGUgImljZV9mbG93LmgiDQo+ICsjaW5jbHVkZSAiaWNlX3N3aXRjaC5oIg0KPiArDQo+ICsj ZGVmaW5lIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UCTIwMA0KPiArDQo+ICsjZGVmaW5lIElDRV9Q Uk9HX0ZMRVhfRU5UUlkoaHcsIHJ4ZGlkLCBtZGlkLCBpZHgpIFwNCj4gKwl3cjMyKChodyksIEdM RkxYUF9SWERJRF9GTFhfV1JEXyMjaWR4KHJ4ZGlkKSwgXA0KPiArCSAgICAgKChJQ0VfUlhfT1BD X01ESUQgPDwgXA0KPiArCSAgICAgICBHTEZMWFBfUlhESURfRkxYX1dSRF8jI2lkeCMjX1JYRElE X09QQ09ERV9TKSAmIFwNCj4gKwkgICAgICBHTEZMWFBfUlhESURfRkxYX1dSRF8jI2lkeCMjX1JY RElEX09QQ09ERV9NKSB8IFwNCj4gKwkgICAgICgoKG1kaWQpIDw8IEdMRkxYUF9SWERJRF9GTFhf V1JEXyMjaWR4IyNfUFJPVF9NRElEX1MpICYgXA0KPiArCSAgICAgIEdMRkxYUF9SWERJRF9GTFhf V1JEXyMjaWR4IyNfUFJPVF9NRElEX00pKQ0KPiArDQo+ICsjZGVmaW5lIElDRV9QUk9HX0ZMR19F TlRSWShodywgcnhkaWQsIGZsZ18wLCBmbGdfMSwgZmxnXzIsIGZsZ18zLCBpZHgpIFwNCj4gKwl3 cjMyKChodyksIEdMRkxYUF9SWERJRF9GTEFHUyhyeGRpZCwgaWR4KSwgXA0KPiArCSAgICAgKCgo ZmxnXzApIDw8IEdMRkxYUF9SWERJRF9GTEFHU19GTEVYSUZMQUdfNE5fUykgJiBcDQo+ICsJICAg ICAgR0xGTFhQX1JYRElEX0ZMQUdTX0ZMRVhJRkxBR180Tl9NKSB8IFwNCj4gKwkgICAgICgoKGZs Z18xKSA8PCBHTEZMWFBfUlhESURfRkxBR1NfRkxFWElGTEFHXzROXzFfUykgJiBcDQo+ICsJICAg ICAgR0xGTFhQX1JYRElEX0ZMQUdTX0ZMRVhJRkxBR180Tl8xX00pIHwgXA0KPiArCSAgICAgKCgo ZmxnXzIpIDw8IEdMRkxYUF9SWERJRF9GTEFHU19GTEVYSUZMQUdfNE5fMl9TKSAmIFwNCj4gKwkg ICAgICBHTEZMWFBfUlhESURfRkxBR1NfRkxFWElGTEFHXzROXzJfTSkgfCBcDQo+ICsJICAgICAo KChmbGdfMykgPDwgR0xGTFhQX1JYRElEX0ZMQUdTX0ZMRVhJRkxBR180Tl8zX1MpICYgXA0KPiAr CSAgICAgIEdMRkxYUF9SWERJRF9GTEFHU19GTEVYSUZMQUdfNE5fM19NKSkNCj4gKw0KPiArDQo+ ICsvKioNCj4gKyAqIGljZV9zZXRfbWFjX3R5cGUgLSBTZXRzIE1BQyB0eXBlDQo+ICsgKiBAaHc6 IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQ0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24g c2V0cyB0aGUgTUFDIHR5cGUgb2YgdGhlIGFkYXB0ZXIgYmFzZWQgb24gdGhlDQo+ICsgKiB2ZW5k b3IgSUQgYW5kIGRldmljZSBJRCBzdG9yZWQgaW4gdGhlIGh3IHN0cnVjdHVyZS4NCj4gKyAqLw0K PiArc3RhdGljIGVudW0gaWNlX3N0YXR1cyBpY2Vfc2V0X21hY190eXBlKHN0cnVjdCBpY2VfaHcg Kmh3KQ0KPiArew0KPiArCWVudW0gaWNlX3N0YXR1cyBzdGF0dXMgPSBJQ0VfU1VDQ0VTUzsNCj4g Kw0KPiArCWljZV9kZWJ1ZyhodywgSUNFX0RCR19UUkFDRSwgImljZV9zZXRfbWFjX3R5cGVcbiIp Ow0KPiArDQo+ICsJaWYgKGh3LT52ZW5kb3JfaWQgPT0gSUNFX0lOVEVMX1ZFTkRPUl9JRCkgew0K PiArCQlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCWh3LT5t YWNfdHlwZSA9IElDRV9NQUNfR0VORVJJQzsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJfSBl bHNlIHsNCj4gKwkJc3RhdHVzID0gSUNFX0VSUl9ERVZJQ0VfTk9UX1NVUFBPUlRFRDsNCj4gKwl9 DQo+ICsNCg0KUmVtb3ZlIGJyYWNlcyBmcm9tIHNpbmdsZS1zdGF0ZW1lbnQgYmxvY2suDQoNCj4g KwlpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgImZvdW5kIG1hY190eXBlOiAlZCwgc3RhdHVz OiAlZFxuIiwNCj4gKwkJICBody0+bWFjX3R5cGUsIHN0YXR1cyk7DQo+ICsNCj4gKwlyZXR1cm4g c3RhdHVzOw0KPiArfQ0KPiArDQo+ICsjaWYgZGVmaW5lZChGUEdBX1NVUFBPUlQpIHx8IGRlZmlu ZWQoQ1ZMX0EwX1NVUFBPUlQpDQo+ICt2b2lkIGljZV9kZXZfb25ldGltZV9zZXR1cChzdHJ1Y3Qg aWNlX2h3ICpodykNCj4gK3sNCj4gKwkvKiBjb25maWd1cmUgUnggLSBzZXQgbm9uIHB4ZSBtb2Rl ICovDQo+ICsJd3IzMihodywgR0xMQU5fUkNUTF8wLCAweDEpOw0KPiArDQo+ICsNCj4gKw0KPiAr fQ0KPiArI2VuZGlmIC8qIEZQR0FfU1VQUE9SVCB8fCBDVkxfQTBfU1VQUE9SVCAqLw0KPiArDQo+ ICsvKioNCj4gKyAqIGljZV9jbGVhcl9wZl9jZmcgLSBDbGVhciBQRiBjb25maWd1cmF0aW9uDQo+ ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICoNCj4gKyAq IENsZWFycyBhbnkgZXhpc3RpbmcgUEYgY29uZmlndXJhdGlvbiAoVlNJcywgVlNJIGxpc3RzLCBz d2l0Y2ggcnVsZXMsIHBvcnQNCj4gKyAqIGNvbmZpZ3VyYXRpb24sIGZsb3cgZGlyZWN0b3IgZmls dGVycywgZXRjLikuDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfY2xlYXJfcGZfY2Zn KHN0cnVjdCBpY2VfaHcgKmh3KQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFfZGVzYyBkZXNjOw0K PiArDQo+ICsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoJmRlc2MsIGljZV9hcWNfb3Bj X2NsZWFyX3BmX2NmZyk7DQo+ICsNCj4gKwlyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCAmZGVz YywgTlVMTCwgMCwgTlVMTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2FxX21hbmFn ZV9tYWNfcmVhZCAtIG1hbmFnZSBNQUMgYWRkcmVzcyByZWFkIGNvbW1hbmQNCj4gKyAqIEBodzog cG9pbnRlciB0byB0aGUgaHcgc3RydWN0DQo+ICsgKiBAYnVmOiBhIHZpcnR1YWwgYnVmZmVyIHRv IGhvbGQgdGhlIG1hbmFnZSBNQUMgcmVhZCByZXNwb25zZQ0KPiArICogQGJ1Zl9zaXplOiBTaXpl IG9mIHRoZSB2aXJ0dWFsIGJ1ZmZlcg0KPiArICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0 YWlscyBzdHJ1Y3R1cmUgb3IgTlVMTA0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNl ZCB0byByZXR1cm4gcGVyIFBGIHN0YXRpb24gTUFDIGFkZHJlc3MgKDB4MDEwNykuDQo+ICsgKiBO T1RFOiBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGlzIGNvbW1hbmQsIE1BQyBhZGRy ZXNzIGluZm9ybWF0aW9uDQo+ICsgKiBpcyByZXR1cm5lZCBpbiB1c2VyIHNwZWNpZmllZCBidWZm ZXIuIFBsZWFzZSBpbnRlcnByZXQgdXNlciBzcGVjaWZpZWQNCj4gKyAqIGJ1ZmZlciBhcyAibWFu YWdlX21hY19yZWFkIiByZXNwb25zZS4NCj4gKyAqIFJlc3BvbnNlIHN1Y2ggYXMgdmFyaW91cyBN QUMgYWRkcmVzc2VzIGFyZSBzdG9yZWQgaW4gSFcgc3RydWN0IChwb3J0Lm1hYykNCj4gKyAqIGlj ZV9hcV9kaXNjb3Zlcl9jYXBzIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBm dW5jdGlvbiBpcyBjYWxsZWQuDQo+ICsgKi8NCj4gK3N0YXRpYyBlbnVtIGljZV9zdGF0dXMNCj4g K2ljZV9hcV9tYW5hZ2VfbWFjX3JlYWQoc3RydWN0IGljZV9odyAqaHcsIHZvaWQgKmJ1ZiwgdTE2 IGJ1Zl9zaXplLA0KPiArCQkgICAgICAgc3RydWN0IGljZV9zcV9jZCAqY2QpDQo+ICt7DQo+ICsJ c3RydWN0IGljZV9hcWNfbWFuYWdlX21hY19yZWFkX3Jlc3AgKnJlc3A7DQo+ICsJc3RydWN0IGlj ZV9hcWNfbWFuYWdlX21hY19yZWFkICpjbWQ7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7 DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0YXR1czsNCj4gKwl1MTYgZmxhZ3M7DQo+ICsJdTggaTsN Cj4gKw0KPiArCWNtZCA9ICZkZXNjLnBhcmFtcy5tYWNfcmVhZDsNCj4gKw0KPiArCWlmIChidWZf c2l6ZSA8IHNpemVvZigqcmVzcCkpDQo+ICsJCXJldHVybiBJQ0VfRVJSX0JVRl9UT09fU0hPUlQ7 DQo+ICsNCj4gKwlpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYygmZGVzYywgaWNlX2FxY19v cGNfbWFuYWdlX21hY19yZWFkKTsNCj4gKw0KPiArCXN0YXR1cyA9IGljZV9hcV9zZW5kX2NtZCho dywgJmRlc2MsIGJ1ZiwgYnVmX3NpemUsIGNkKTsNCj4gKwlpZiAoc3RhdHVzKQ0KPiArCQlyZXR1 cm4gc3RhdHVzOw0KPiArDQo+ICsJcmVzcCA9IChzdHJ1Y3QgaWNlX2FxY19tYW5hZ2VfbWFjX3Jl YWRfcmVzcCAqKWJ1ZjsNCj4gKwlmbGFncyA9IExFMTZfVE9fQ1BVKGNtZC0+ZmxhZ3MpICYgSUNF X0FRQ19NQU5fTUFDX1JFQURfTTsNCj4gKw0KPiArCWlmICghKGZsYWdzICYgSUNFX0FRQ19NQU5f TUFDX0xBTl9BRERSX1ZBTElEKSkgew0KPiArCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfTEFOLCAi Z290IGludmFsaWQgTUFDIGFkZHJlc3NcbiIpOw0KPiArCQlyZXR1cm4gSUNFX0VSUl9DRkc7DQo+ ICsJfQ0KPiArDQo+ICsJLyogQSBzaW5nbGUgcG9ydCBjYW4gcmVwb3J0IHVwIHRvIHR3byAoTEFO IGFuZCBXb0wpIGFkZHJlc3NlcyAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBjbWQtPm51bV9hZGRy OyBpKyspDQo+ICsJCWlmIChyZXNwW2ldLmFkZHJfdHlwZSA9PSBJQ0VfQVFDX01BTl9NQUNfQURE Ul9UWVBFX0xBTikgew0KPiArCQkJaWNlX21lbWNweShody0+cG9ydF9pbmZvLT5tYWMubGFuX2Fk ZHIsDQo+ICsJCQkJICAgcmVzcFtpXS5tYWNfYWRkciwgRVRIX0FMRU4sDQo+ICsJCQkJICAgSUNF X0RNQV9UT19OT05ETUEpOw0KPiArCQkJaWNlX21lbWNweShody0+cG9ydF9pbmZvLT5tYWMucGVy bV9hZGRyLA0KPiArCQkJCSAgIHJlc3BbaV0ubWFjX2FkZHIsDQo+ICsJCQkJICAgRVRIX0FMRU4s IElDRV9ETUFfVE9fTk9ORE1BKTsNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsNCj4gKwlyZXR1 cm4gSUNFX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2FxX2dldF9waHlf Y2FwcyAtIHJldHVybnMgUEhZIGNhcGFiaWxpdGllcw0KPiArICogQHBpOiBwb3J0IGluZm9ybWF0 aW9uIHN0cnVjdHVyZQ0KPiArICogQHF1YWxfbW9kczogcmVwb3J0IHF1YWxpZmllZCBtb2R1bGVz DQo+ICsgKiBAcmVwb3J0X21vZGU6IHJlcG9ydCBtb2RlIGNhcGFiaWxpdGllcw0KPiArICogQHBj YXBzOiBzdHJ1Y3R1cmUgZm9yIFBIWSBjYXBhYmlsaXRpZXMgdG8gYmUgZmlsbGVkDQo+ICsgKiBA Y2Q6IHBvaW50ZXIgdG8gY29tbWFuZCBkZXRhaWxzIHN0cnVjdHVyZSBvciBOVUxMDQo+ICsgKg0K PiArICogUmV0dXJucyB0aGUgdmFyaW91cyBQSFkgY2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBvbiB0 aGUgUG9ydCAoMHgwNjAwKQ0KPiArICovDQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9n ZXRfcGh5X2NhcHMoc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIHF1YWxfbW9kcywgdTgg cmVwb3J0X21vZGUsDQo+ICsJCSAgICBzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAq cGNhcHMsDQo+ICsJCSAgICBzdHJ1Y3QgaWNlX3NxX2NkICpjZCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg aWNlX2FxY19nZXRfcGh5X2NhcHMgKmNtZDsNCj4gKwl1MTYgcGNhcHNfc2l6ZSA9IHNpemVvZigq cGNhcHMpOw0KPiArCXN0cnVjdCBpY2VfYXFfZGVzYyBkZXNjOw0KPiArCWVudW0gaWNlX3N0YXR1 cyBzdGF0dXM7DQo+ICsNCj4gKwljbWQgPSAmZGVzYy5wYXJhbXMuZ2V0X3BoeTsNCj4gKw0KPiAr CWlmICghcGNhcHMgfHwgKHJlcG9ydF9tb2RlICYgfklDRV9BUUNfUkVQT1JUX01PREVfTSkgfHwg IXBpKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCWljZV9maWxsX2RmbHRf ZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBpY2VfYXFjX29wY19nZXRfcGh5X2NhcHMpOw0KPiArDQo+ ICsJaWYgKHF1YWxfbW9kcykNCj4gKwkJY21kLT5wYXJhbTAgfD0gQ1BVX1RPX0xFMTYoSUNFX0FR Q19HRVRfUEhZX1JRTSk7DQo+ICsNCj4gKwljbWQtPnBhcmFtMCB8PSBDUFVfVE9fTEUxNihyZXBv cnRfbW9kZSk7DQo+ICsJc3RhdHVzID0gaWNlX2FxX3NlbmRfY21kKHBpLT5odywgJmRlc2MsIHBj YXBzLCBwY2Fwc19zaXplLCBjZCk7DQo+ICsNCj4gKwlpZiAoc3RhdHVzID09IElDRV9TVUNDRVNT ICYmIHJlcG9ydF9tb2RlID09IElDRV9BUUNfUkVQT1JUX1RPUE9fQ0FQKSB7DQo+ICsJCXBpLT5w aHkucGh5X3R5cGVfbG93ID0gTEU2NF9UT19DUFUocGNhcHMtPnBoeV90eXBlX2xvdyk7DQo+ICsJ CXBpLT5waHkucGh5X3R5cGVfaGlnaCA9IExFNjRfVE9fQ1BVKHBjYXBzLT5waHlfdHlwZV9oaWdo KTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAqIGljZV9nZXRfbWVkaWFfdHlwZSAtIEdldHMgbWVkaWEgdHlwZQ0KPiArICogQHBpOiBwb3J0 IGluZm9ybWF0aW9uIHN0cnVjdHVyZQ0KPiArICovDQo+ICtzdGF0aWMgZW51bSBpY2VfbWVkaWFf dHlwZSBpY2VfZ2V0X21lZGlhX3R5cGUoc3RydWN0IGljZV9wb3J0X2luZm8gKnBpKQ0KPiArew0K PiArCXN0cnVjdCBpY2VfbGlua19zdGF0dXMgKmh3X2xpbmtfaW5mbzsNCj4gKw0KPiArCWlmICgh cGkpDQo+ICsJCXJldHVybiBJQ0VfTUVESUFfVU5LTk9XTjsNCj4gKw0KPiArCWh3X2xpbmtfaW5m byA9ICZwaS0+cGh5LmxpbmtfaW5mbzsNCj4gKwlpZiAoaHdfbGlua19pbmZvLT5waHlfdHlwZV9s b3cgJiYgaHdfbGlua19pbmZvLT5waHlfdHlwZV9oaWdoKQ0KPiArCQkvKiBJZiBtb3JlIHRoYW4g b25lIG1lZGlhIHR5cGUgaXMgc2VsZWN0ZWQsIHJlcG9ydCB1bmtub3duICovDQo+ICsJCXJldHVy biBJQ0VfTUVESUFfVU5LTk9XTjsNCj4gKw0KPiArCWlmIChod19saW5rX2luZm8tPnBoeV90eXBl X2xvdykgew0KPiArCQlzd2l0Y2ggKGh3X2xpbmtfaW5mby0+cGh5X3R5cGVfbG93KSB7DQo+ICsJ CWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDAwQkFTRV9TWDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZ UEVfTE9XXzEwMDBCQVNFX0xYOg0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1dfMTBHQkFTRV9T UjoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwR0JBU0VfTFI6DQo+ICsJCWNhc2UgSUNF X1BIWV9UWVBFX0xPV18xMEdfU0ZJX0MyQzoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzI1 R0JBU0VfU1I6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNUdCQVNFX0xSOg0KPiArCQlj YXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHX0FVSV9DMkM6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBF X0xPV180MEdCQVNFX1NSNDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzQwR0JBU0VfTFI0 Og0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1dfNTBHQkFTRV9TUjI6DQo+ICsJCWNhc2UgSUNF X1BIWV9UWVBFX0xPV181MEdCQVNFX0xSMjoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzUw R0JBU0VfU1I6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdCQVNFX0ZSOg0KPiArCQlj YXNlIElDRV9QSFlfVFlQRV9MT1dfNTBHQkFTRV9MUjoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVf TE9XXzEwMEdCQVNFX1NSNDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX0xS NDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX1NSMjoNCj4gKwkJY2FzZSBJ Q0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX0RSOg0KPiArCQkJcmV0dXJuIElDRV9NRURJQV9GSUJF UjsNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEJBU0VfVFg6DQo+ICsJCWNhc2UgSUNF X1BIWV9UWVBFX0xPV18xMDAwQkFTRV9UOg0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1dfMjUw MEJBU0VfVDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzVHQkFTRV9UOg0KPiArCQljYXNl IElDRV9QSFlfVFlQRV9MT1dfMTBHQkFTRV9UOg0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1df MjVHQkFTRV9UOg0KPiArCQkJcmV0dXJuIElDRV9NRURJQV9CQVNFVDsNCj4gKwkJY2FzZSBJQ0Vf UEhZX1RZUEVfTE9XXzEwR19TRklfREE6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNUdC QVNFX0NSOg0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9DUl9TOg0KPiArCQlj YXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9DUjE6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBF X0xPV180MEdCQVNFX0NSNDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzUwR0JBU0VfQ1Iy Og0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1dfNTBHQkFTRV9DUDoNCj4gKwkJY2FzZSBJQ0Vf UEhZX1RZUEVfTE9XXzEwMEdCQVNFX0NSNDoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEw MEdCQVNFX0NSX1BBTTQ6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDBHQkFTRV9DUDI6 DQo+ICsJCQlyZXR1cm4gSUNFX01FRElBX0RBOw0KPiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1df MTAwMEJBU0VfS1g6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNTAwQkFTRV9LWDoNCj4g KwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzI1MDBCQVNFX1g6DQo+ICsJCWNhc2UgSUNFX1BIWV9U WVBFX0xPV181R0JBU0VfS1I6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMEdCQVNFX0tS X0NSMToNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzI1R0JBU0VfS1I6DQo+ICsJCWNhc2Ug SUNFX1BIWV9UWVBFX0xPV18yNUdCQVNFX0tSMToNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9X XzI1R0JBU0VfS1JfUzoNCj4gKwkJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzQwR0JBU0VfS1I0Og0K PiArCQljYXNlIElDRV9QSFlfVFlQRV9MT1dfNTBHQkFTRV9LUl9QQU00Og0KPiArCQljYXNlIElD RV9QSFlfVFlQRV9MT1dfNTBHQkFTRV9LUjI6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18x MDBHQkFTRV9LUjQ6DQo+ICsJCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDBHQkFTRV9LUl9QQU00 Og0KPiArCQkJcmV0dXJuIElDRV9NRURJQV9CQUNLUExBTkU7DQo+ICsJCX0NCj4gKwl9IGVsc2Ug ew0KPiArCQlzd2l0Y2ggKGh3X2xpbmtfaW5mby0+cGh5X3R5cGVfaGlnaCkgew0KPiArCQljYXNl IElDRV9QSFlfVFlQRV9ISUdIXzEwMEdCQVNFX0tSMl9QQU00Og0KPiArCQkJcmV0dXJuIElDRV9N RURJQV9CQUNLUExBTkU7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIElDRV9NRURJQV9VTktO T1dOOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9hcV9nZXRfbGlua19pbmZvDQo+ICsg KiBAcGk6IHBvcnQgaW5mb3JtYXRpb24gc3RydWN0dXJlDQo+ICsgKiBAZW5hX2xzZTogZW5hYmxl L2Rpc2FibGUgTGlua1N0YXR1c0V2ZW50IHJlcG9ydGluZw0KPiArICogQGxpbms6IHBvaW50ZXIg dG8gbGluayBzdGF0dXMgc3RydWN0dXJlIC0gb3B0aW9uYWwNCj4gKyAqIEBjZDogcG9pbnRlciB0 byBjb21tYW5kIGRldGFpbHMgc3RydWN0dXJlIG9yIE5VTEwNCj4gKyAqDQo+ICsgKiBHZXQgTGlu ayBTdGF0dXMgKDB4NjA3KS4gUmV0dXJucyB0aGUgbGluayBzdGF0dXMgb2YgdGhlIGFkYXB0ZXIu DQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX2dldF9saW5rX2luZm8oc3Ry dWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGVuYV9sc2UsDQo+ICsJCSAgICAgc3RydWN0IGlj ZV9saW5rX3N0YXR1cyAqbGluaywgc3RydWN0IGljZV9zcV9jZCAqY2QpDQo+ICt7DQo+ICsJc3Ry dWN0IGljZV9saW5rX3N0YXR1cyAqaHdfbGlua19pbmZvX29sZCwgKmh3X2xpbmtfaW5mbzsNCj4g KwlzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua19zdGF0dXNfZGF0YSBsaW5rX2RhdGEgPSB7IDAgfTsN Cj4gKwlzdHJ1Y3QgaWNlX2FxY19nZXRfbGlua19zdGF0dXMgKnJlc3A7DQo+ICsJZW51bSBpY2Vf bWVkaWFfdHlwZSAqaHdfbWVkaWFfdHlwZTsNCj4gKwlzdHJ1Y3QgaWNlX2ZjX2luZm8gKmh3X2Zj X2luZm87DQo+ICsJYm9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7DQo+ICsJc3RydWN0IGljZV9hcV9k ZXNjIGRlc2M7DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0YXR1czsNCj4gKwl1MTYgY21kX2ZsYWdz Ow0KPiArDQo+ICsJaWYgKCFwaSkNCj4gKwkJcmV0dXJuIElDRV9FUlJfUEFSQU07DQoNCmlmIChw aSA9PSBOVUxMKQ0KDQpJJ20gY29uZnVzZWQgYnkgdGhpcyBjb21tZW50LiBUaGVyZSBhcmUgaHVu ZHJlZHMgb2YgdGhlc2UgdHlwZXMgb2YgZXhwcmVzc2lvbnMgaW4gRFBESyBjdXJyZW50bHkgc28g d2h5IHdvdWxkIHdlIGNoYW5nZSB0aGUgaW5zdGFuY2VzIGluIHRoaXMgZmlsZT8NCg0KPiArCWh3 X2xpbmtfaW5mb19vbGQgPSAmcGktPnBoeS5saW5rX2luZm9fb2xkOw0KPiArCWh3X21lZGlhX3R5 cGUgPSAmcGktPnBoeS5tZWRpYV90eXBlOw0KPiArCWh3X2xpbmtfaW5mbyA9ICZwaS0+cGh5Lmxp bmtfaW5mbzsNCj4gKwlod19mY19pbmZvID0gJnBpLT5mYzsNCj4gKw0KPiArCWljZV9maWxsX2Rm bHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBpY2VfYXFjX29wY19nZXRfbGlua19zdGF0dXMpOw0K PiArCWNtZF9mbGFncyA9IChlbmFfbHNlKSA/IElDRV9BUV9MU0VfRU5BIDogSUNFX0FRX0xTRV9E SVM7DQo+ICsJcmVzcCA9ICZkZXNjLnBhcmFtcy5nZXRfbGlua19zdGF0dXM7DQo+ICsJcmVzcC0+ Y21kX2ZsYWdzID0gQ1BVX1RPX0xFMTYoY21kX2ZsYWdzKTsNCj4gKwlyZXNwLT5scG9ydF9udW0g PSBwaS0+bHBvcnQ7DQo+ICsNCj4gKwlzdGF0dXMgPSBpY2VfYXFfc2VuZF9jbWQocGktPmh3LCAm ZGVzYywgJmxpbmtfZGF0YSwgc2l6ZW9mKGxpbmtfZGF0YSksDQo+ICsJCQkJIGNkKTsNCj4gKw0K PiArCWlmIChzdGF0dXMgIT0gSUNFX1NVQ0NFU1MpDQo+ICsJCXJldHVybiBzdGF0dXM7DQo+ICsN Cj4gKwkvKiBzYXZlIG9mZiBvbGQgbGluayBzdGF0dXMgaW5mb3JtYXRpb24gKi8NCj4gKwkqaHdf bGlua19pbmZvX29sZCA9ICpod19saW5rX2luZm87DQo+ICsNCj4gKwkvKiB1cGRhdGUgY3VycmVu dCBsaW5rIHN0YXR1cyBpbmZvcm1hdGlvbiAqLw0KPiArCWh3X2xpbmtfaW5mby0+bGlua19zcGVl ZCA9IExFMTZfVE9fQ1BVKGxpbmtfZGF0YS5saW5rX3NwZWVkKTsNCj4gKwlod19saW5rX2luZm8t PnBoeV90eXBlX2xvdyA9IExFNjRfVE9fQ1BVKGxpbmtfZGF0YS5waHlfdHlwZV9sb3cpOw0KPiAr CWh3X2xpbmtfaW5mby0+cGh5X3R5cGVfaGlnaCA9IExFNjRfVE9fQ1BVKGxpbmtfZGF0YS5waHlf dHlwZV9oaWdoKTsNCj4gKwkqaHdfbWVkaWFfdHlwZSA9IGljZV9nZXRfbWVkaWFfdHlwZShwaSk7 DQo+ICsJaHdfbGlua19pbmZvLT5saW5rX2luZm8gPSBsaW5rX2RhdGEubGlua19pbmZvOw0KPiAr CWh3X2xpbmtfaW5mby0+YW5faW5mbyA9IGxpbmtfZGF0YS5hbl9pbmZvOw0KPiArCWh3X2xpbmtf aW5mby0+ZXh0X2luZm8gPSBsaW5rX2RhdGEuZXh0X2luZm87DQo+ICsJaHdfbGlua19pbmZvLT5t YXhfZnJhbWVfc2l6ZSA9IExFMTZfVE9fQ1BVKGxpbmtfZGF0YS5tYXhfZnJhbWVfc2l6ZSk7DQo+ ICsJaHdfbGlua19pbmZvLT5mZWNfaW5mbyA9IGxpbmtfZGF0YS5jZmcgJiBJQ0VfQVFfRkVDX01B U0s7DQo+ICsJaHdfbGlua19pbmZvLT50b3BvX21lZGlhX2NvbmZsaWN0ID0gbGlua19kYXRhLnRv cG9fbWVkaWFfY29uZmxpY3Q7DQo+ICsJaHdfbGlua19pbmZvLT5wYWNpbmcgPSBsaW5rX2RhdGEu Y2ZnICYgSUNFX0FRX0NGR19QQUNJTkdfTTsNCj4gKw0KPiArCS8qIHVwZGF0ZSBmYyBpbmZvICov DQo+ICsJdHhfcGF1c2UgPSAhIShsaW5rX2RhdGEuYW5faW5mbyAmIElDRV9BUV9MSU5LX1BBVVNF X1RYKTsNCj4gKwlyeF9wYXVzZSA9ICEhKGxpbmtfZGF0YS5hbl9pbmZvICYgSUNFX0FRX0xJTktf UEFVU0VfUlgpOw0KPiArCWlmICh0eF9wYXVzZSAmJiByeF9wYXVzZSkNCj4gKwkJaHdfZmNfaW5m by0+Y3VycmVudF9tb2RlID0gSUNFX0ZDX0ZVTEw7DQo+ICsJZWxzZSBpZiAodHhfcGF1c2UpDQo+ ICsJCWh3X2ZjX2luZm8tPmN1cnJlbnRfbW9kZSA9IElDRV9GQ19UWF9QQVVTRTsNCj4gKwllbHNl IGlmIChyeF9wYXVzZSkNCj4gKwkJaHdfZmNfaW5mby0+Y3VycmVudF9tb2RlID0gSUNFX0ZDX1JY X1BBVVNFOw0KPiArCWVsc2UNCj4gKwkJaHdfZmNfaW5mby0+Y3VycmVudF9tb2RlID0gSUNFX0ZD X05PTkU7DQo+ICsNCj4gKwlod19saW5rX2luZm8tPmxzZV9lbmEgPQ0KPiArCQkhIShyZXNwLT5j bWRfZmxhZ3MgJiBDUFVfVE9fTEUxNihJQ0VfQVFfTFNFX0lTX0VOQUJMRUQpKTsNCj4gKw0KPiAr DQo+ICsJLyogc2F2ZSBsaW5rIHN0YXR1cyBpbmZvcm1hdGlvbiAqLw0KPiArCWlmIChsaW5rKQ0K PiArCQkqbGluayA9ICpod19saW5rX2luZm87DQo+ICsNCj4gKwkvKiBmbGFnIGNsZWFyZWQgc28g Y2FsbGluZyBmdW5jdGlvbnMgZG9uJ3QgY2FsbCBBUSBhZ2FpbiAqLw0KPiArCXBpLT5waHkuZ2V0 X2xpbmtfaW5mbyA9IGZhbHNlOw0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBpY2VfaW5pdF9mbGV4X2ZsYWdzDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8g dGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICogQHByb2ZfaWQ6IFJ4IERlc2NyaXB0b3IgQnVp bGRlciBwcm9maWxlIElEDQo+ICsgKg0KPiArICogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSBSeCBm bGV4IGZsYWdzDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGljZV9pbml0X2ZsZXhfZmxhZ3Moc3Ry dWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3J4ZGlkIHByb2ZfaWQpDQo+ICt7DQo+ICsJdTggaWR4 ID0gMDsNCj4gKw0KPiArCS8qIEZsZXgtZmxhZyBmaWVsZHMgKDAtMikgYXJlIHByb2dyYW1tZWQg d2l0aCBGTEc2NCBiaXRzIHdpdGggbGF5b3V0Og0KPiArCSAqIGZsZXhpZmxhZ3MwWzU6MF0gLSBU Q1AgZmxhZ3MsIGlzX3BhY2tldF9mcmFnbWVudGVkLCBpc19wYWNrZXRfVURQX0dSRQ0KPiArCSAq IGZsZXhpZmxhZ3MxWzM6MF0gLSBOb3QgdXNlZCBmb3IgZmxhZyBwcm9ncmFtbWluZw0KPiArCSAq IGZsZXhpZmxhZ3MyWzc6MF0gLSBUdW5uZWwgYW5kIFZMQU4gdHlwZXMNCj4gKwkgKiAyIGludmFs aWQgZmllbGRzIGluIGxhc3QgaW5kZXgNCj4gKwkgKi8NCj4gKwlzd2l0Y2ggKHByb2ZfaWQpIHsN Cj4gKwkvKiBSeCBmbGV4IGZsYWdzIGFyZSBjdXJyZW50bHkgcHJvZ3JhbW1lZCBmb3IgdGhlIE5J QyBwcm9maWxlcyBvbmx5Lg0KPiArCSAqIERpZmZlcmVudCBmbGFnIGJpdCBwcm9ncmFtbWluZyBj b25maWd1cmF0aW9ucyBjYW4gYmUgYWRkZWQgcGVyDQo+ICsJICogcHJvZmlsZSBhcyBuZWVkZWQu DQo+ICsJICovDQo+ICsJY2FzZSBJQ0VfUlhESURfRkxFWF9OSUM6DQo+ICsJY2FzZSBJQ0VfUlhE SURfRkxFWF9OSUNfMjoNCj4gKwkJSUNFX1BST0dfRkxHX0VOVFJZKGh3LCBwcm9mX2lkLCBJQ0Vf UlhGTEdfUEtUX0ZSRywNCj4gKwkJCQkgICBJQ0VfUlhGTEdfVURQX0dSRSwgSUNFX1JYRkxHX1BL VF9EU0ksDQo+ICsJCQkJICAgSUNFX1JYRkxHX0ZJTiwgaWR4KyspOw0KPiArCQkvKiBmbGV4IGZs YWcgMSBpcyBub3QgdXNlZCBmb3IgZmxleGktZmxhZyBwcm9ncmFtbWluZywgc2tpcHBpbmcNCj4g KwkJICogdGhlc2UgZm91ciBGTEc2NCBiaXRzLg0KPiArCQkgKi8NCj4gKwkJSUNFX1BST0dfRkxH X0VOVFJZKGh3LCBwcm9mX2lkLCBJQ0VfUlhGTEdfU1lOLCBJQ0VfUlhGTEdfUlNULA0KPiArCQkJ CSAgIElDRV9SWEZMR19QS1RfRFNJLCBJQ0VfUlhGTEdfUEtUX0RTSSwgaWR4KyspOw0KPiArCQlJ Q0VfUFJPR19GTEdfRU5UUlkoaHcsIHByb2ZfaWQsIElDRV9SWEZMR19QS1RfRFNJLA0KPiArCQkJ CSAgIElDRV9SWEZMR19QS1RfRFNJLCBJQ0VfUlhGTEdfRVZMQU5feDgxMDAsDQo+ICsJCQkJICAg SUNFX1JYRkxHX0VWTEFOX3g5MTAwLCBpZHgrKyk7DQo+ICsJCUlDRV9QUk9HX0ZMR19FTlRSWSho dywgcHJvZl9pZCwgSUNFX1JYRkxHX1ZMQU5feDgxMDAsDQo+ICsJCQkJICAgSUNFX1JYRkxHX1RO TF9WTEFOLCBJQ0VfUlhGTEdfVE5MX01BQywNCj4gKwkJCQkgICBJQ0VfUlhGTEdfVE5MMCwgaWR4 KyspOw0KPiArCQlJQ0VfUFJPR19GTEdfRU5UUlkoaHcsIHByb2ZfaWQsIElDRV9SWEZMR19UTkwx LCBJQ0VfUlhGTEdfVE5MMiwNCj4gKwkJCQkgICBJQ0VfUlhGTEdfUEtUX0RTSSwgSUNFX1JYRkxH X1BLVF9EU0ksIGlkeCk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJZGVmYXVsdDoNCj4gKwkJaWNl X2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkgICJGbGFnIHByb2dyYW1taW5nIGZvciBw cm9maWxlIElEICVkIG5vdCBzdXBwb3J0ZWRcbiIsDQo+ICsJCQkgIHByb2ZfaWQpOw0KPiArCX0N Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfaW5pdF9mbGV4X2ZsZHMNCj4gKyAqIEBodzog cG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlDQo+ICsgKiBAcHJvZl9pZDogUnggRGVz Y3JpcHRvciBCdWlsZGVyIHByb2ZpbGUgSUQNCj4gKyAqDQo+ICsgKiBGdW5jdGlvbiB0byBpbml0 aWFsaXplIGZsZXggZGVzY3JpcHRvcnMNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgaWNlX2luaXRf ZmxleF9mbGRzKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yeGRpZCBwcm9mX2lkKQ0KPiAr ew0KPiArCWVudW0gaWNlX2ZsZXhfcnhfbWRpZCBtZGlkOw0KPiArDQo+ICsJc3dpdGNoIChwcm9m X2lkKSB7DQo+ICsJY2FzZSBJQ0VfUlhESURfRkxFWF9OSUM6DQo+ICsJY2FzZSBJQ0VfUlhESURf RkxFWF9OSUNfMjoNCj4gKwkJSUNFX1BST0dfRkxFWF9FTlRSWShodywgcHJvZl9pZCwgSUNFX1JY X01ESURfSEFTSF9MT1csIDApOw0KPiArCQlJQ0VfUFJPR19GTEVYX0VOVFJZKGh3LCBwcm9mX2lk LCBJQ0VfUlhfTURJRF9IQVNIX0hJR0gsIDEpOw0KPiArCQlJQ0VfUFJPR19GTEVYX0VOVFJZKGh3 LCBwcm9mX2lkLCBJQ0VfUlhfTURJRF9GTE9XX0lEX0xPV0VSLCAyKTsNCj4gKw0KPiArCQltZGlk ID0gKHByb2ZfaWQgPT0gSUNFX1JYRElEX0ZMRVhfTklDXzIpID8NCj4gKwkJCUlDRV9SWF9NRElE X1NSQ19WU0kgOiBJQ0VfUlhfTURJRF9GTE9XX0lEX0hJR0g7DQo+ICsNCj4gKwkJSUNFX1BST0df RkxFWF9FTlRSWShodywgcHJvZl9pZCwgbWRpZCwgMyk7DQo+ICsNCj4gKwkJaWNlX2luaXRfZmxl eF9mbGFncyhodywgcHJvZl9pZCk7DQo+ICsJCWJyZWFrOw0KPiArDQo+ICsJZGVmYXVsdDoNCj4g KwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkgICJGaWVsZCBpbml0IGZvciBw cm9maWxlIElEICVkIG5vdCBzdXBwb3J0ZWRcbiIsDQo+ICsJCQkgIHByb2ZfaWQpOw0KPiArCX0N Cj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9pbml0X2ZsdHJfbWdtdF9zdHJ1Y3Qg LSBpbml0aWFsaXplcyBmaWx0ZXIgbWFuYWdlbWVudCBsaXN0IGFuZCBsb2Nrcw0KPiArICogQGh3 OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QNCj4gKyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0 YXR1cyBpY2VfaW5pdF9mbHRyX21nbXRfc3RydWN0KHN0cnVjdCBpY2VfaHcgKmh3KQ0KPiArew0K PiArCXN0cnVjdCBpY2Vfc3dpdGNoX2luZm8gKnN3Ow0KPiArDQo+ICsJaHctPnN3aXRjaF9pbmZv ID0gKHN0cnVjdCBpY2Vfc3dpdGNoX2luZm8gKikNCj4gKwkJCSAgaWNlX21hbGxvYyhodywgc2l6 ZW9mKCpody0+c3dpdGNoX2luZm8pKTsNCj4gKwlzdyA9IGh3LT5zd2l0Y2hfaW5mbzsNCj4gKw0K PiArCWlmICghc3cpDQo+ICsJCXJldHVybiBJQ0VfRVJSX05PX01FTU9SWTsNCg0KaWYgKHN3ID09 IE5VTEwpDQoNCj4gKw0KPiArCUlOSVRfTElTVF9IRUFEKCZzdy0+dnNpX2xpc3RfbWFwX2hlYWQp Ow0KPiArDQo+ICsJcmV0dXJuIGljZV9pbml0X2RlZl9zd19yZWNwKGh3KTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBpY2VfY2xlYW51cF9mbHRyX21nbXRfc3RydWN0IC0gY2xlYW51cCBmaWx0 ZXIgbWFuYWdlbWVudCBsaXN0IGFuZCBsb2Nrcw0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBo dyBzdHJ1Y3QNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQgaWNlX2NsZWFudXBfZmx0cl9tZ210X3N0 cnVjdChzdHJ1Y3QgaWNlX2h3ICpodykNCj4gK3sNCj4gKwlzdHJ1Y3QgaWNlX3N3aXRjaF9pbmZv ICpzdyA9IGh3LT5zd2l0Y2hfaW5mbzsNCj4gKwlzdHJ1Y3QgaWNlX3ZzaV9saXN0X21hcF9pbmZv ICp2X3Bvc19tYXA7DQo+ICsJc3RydWN0IGljZV92c2lfbGlzdF9tYXBfaW5mbyAqdl90bXBfbWFw Ow0KPiArCXN0cnVjdCBpY2Vfc3dfcmVjaXBlICpyZWNwczsNCj4gKwl1OCBpOw0KPiArDQo+ICsJ TElTVF9GT1JfRUFDSF9FTlRSWV9TQUZFKHZfcG9zX21hcCwgdl90bXBfbWFwLCAmc3ctPnZzaV9s aXN0X21hcF9oZWFkLA0KPiArCQkJCSBpY2VfdnNpX2xpc3RfbWFwX2luZm8sIGxpc3RfZW50cnkp IHsNCj4gKwkJTElTVF9ERUwoJnZfcG9zX21hcC0+bGlzdF9lbnRyeSk7DQo+ICsJCWljZV9mcmVl KGh3LCB2X3Bvc19tYXApOw0KPiArCX0NCj4gKwlyZWNwcyA9IGh3LT5zd2l0Y2hfaW5mby0+cmVj cF9saXN0Ow0KPiArCWZvciAoaSA9IDA7IGkgPCBJQ0VfTUFYX05VTV9SRUNJUEVTOyBpKyspIHsN Cj4gKwkJcmVjcHNbaV0ucm9vdF9yaWQgPSBpOw0KPiArDQo+ICsJCWlmIChyZWNwc1tpXS5hZHZf cnVsZSkgew0KPiArCQkJc3RydWN0IGljZV9hZHZfZmx0cl9tZ210X2xpc3RfZW50cnkgKnRtcF9l bnRyeTsNCj4gKwkJCXN0cnVjdCBpY2VfYWR2X2ZsdHJfbWdtdF9saXN0X2VudHJ5ICpsc3RfaXRy Ow0KPiArDQo+ICsJCQlpY2VfZGVzdHJveV9sb2NrKCZyZWNwc1tpXS5maWx0X3J1bGVfbG9jayk7 DQo+ICsJCQlMSVNUX0ZPUl9FQUNIX0VOVFJZX1NBRkUobHN0X2l0ciwgdG1wX2VudHJ5LA0KPiAr CQkJCQkJICZyZWNwc1tpXS5maWx0X3J1bGVzLA0KPiArCQkJCQkJIGljZV9hZHZfZmx0cl9tZ210 X2xpc3RfZW50cnksDQo+ICsJCQkJCQkgbGlzdF9lbnRyeSkgew0KPiArCQkJCUxJU1RfREVMKCZs c3RfaXRyLT5saXN0X2VudHJ5KTsNCj4gKwkJCQlpY2VfZnJlZShodywgbHN0X2l0ci0+bGt1cHMp Ow0KPiArCQkJCWljZV9mcmVlKGh3LCBsc3RfaXRyKTsNCj4gKwkJCX0NCj4gKwkJfSBlbHNlIHsN Cj4gKwkJCXN0cnVjdCBpY2VfZmx0cl9tZ210X2xpc3RfZW50cnkgKmxzdF9pdHIsICp0bXBfZW50 cnk7DQo+ICsNCj4gKwkJCWljZV9kZXN0cm95X2xvY2soJnJlY3BzW2ldLmZpbHRfcnVsZV9sb2Nr KTsNCj4gKwkJCUxJU1RfRk9SX0VBQ0hfRU5UUllfU0FGRShsc3RfaXRyLCB0bXBfZW50cnksDQo+ ICsJCQkJCQkgJnJlY3BzW2ldLmZpbHRfcnVsZXMsDQo+ICsJCQkJCQkgaWNlX2ZsdHJfbWdtdF9s aXN0X2VudHJ5LA0KPiArCQkJCQkJIGxpc3RfZW50cnkpIHsNCj4gKwkJCQlMSVNUX0RFTCgmbHN0 X2l0ci0+bGlzdF9lbnRyeSk7DQo+ICsJCQkJaWNlX2ZyZWUoaHcsIGxzdF9pdHIpOw0KPiArCQkJ fQ0KPiArCQl9DQo+ICsJfQ0KPiArCWljZV9ybV9hbGxfc3dfcmVwbGF5X3J1bGVfaW5mbyhodyk7 DQo+ICsJaWNlX2ZyZWUoaHcsIHN3LT5yZWNwX2xpc3QpOw0KPiArCWljZV9mcmVlKGh3LCBzdyk7 DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgSUNFX0ZXX0xPR19ERVNDX1NJWkUobikJKHNpemVvZihz dHJ1Y3QgaWNlX2FxY19md19sb2dnaW5nX2RhdGEpICsgXA0KPiArCSgoKG4pIC0gMSkgKiBzaXpl b2YoKChzdHJ1Y3QgaWNlX2FxY19md19sb2dnaW5nX2RhdGEgKikwKS0+ZW50cnkpKSkNCj4gKyNk ZWZpbmUgSUNFX0ZXX0xPR19ERVNDX1NJWkVfTUFYCVwNCj4gKwlJQ0VfRldfTE9HX0RFU0NfU0la RShJQ0VfQVFDX0ZXX0xPR19JRF9NQVgpDQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2NmZ19md19s b2cgLSBjb25maWd1cmUgRlcgbG9nZ2luZw0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBz dHJ1Y3QNCj4gKyAqIEBlbmFibGU6IGVuYWJsZSBjZXJ0YWluIEZXIGxvZ2dpbmcgZXZlbnRzIGlm IHRydWUsIGRpc2FibGUgYWxsIGlmIGZhbHNlDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiBl bmFibGVzL2Rpc2FibGVzIHRoZSBGVyBsb2dnaW5nIHZpYSBSeCBDUSBldmVudHMgYW5kIGEgVUFS VA0KPiArICogcG9ydCBiYXNlZCBvbiBwcmVkZXRlcm1pbmVkIGNvbmZpZ3VyYXRpb25zLiBGVyBs b2dnaW5nIHZpYSB0aGUgUnggQ1EgY2FuIGJlDQo+ICsgKiBlbmFibGVkL2Rpc2FibGVkIGZvciBp bmRpdmlkdWFsIFBGJ3MuIEhvd2V2ZXIsIEZXIGxvZ2dpbmcgdmlhIHRoZSBVQVJUIGNhbg0KPiAr ICogb25seSBiZSBlbmFibGVkL2Rpc2FibGVkIGZvciBhbGwgUEZzIG9uIHRoZSBzYW1lIGRldmlj ZS4NCj4gKyAqDQo+ICsgKiBUbyBlbmFibGUgb3ZlcmFsbCBGVyBsb2dnaW5nLCB0aGUgImNxX2Vu IiBhbmQgInVhcnRfZW4iIGVuYWJsZSBiaXRzIGluDQo+ICsgKiBody0+ZndfbG9nIG5lZWQgdG8g YmUgc2V0IGFjY29yZGluZ2x5LCBlLmcuIGJhc2VkIG9uIHVzZXItcHJvdmlkZWQgaW5wdXQsDQo+ ICsgKiBiZWZvcmUgaW5pdGlhbGl6aW5nIHRoZSBkZXZpY2UuDQo+ICsgKg0KPiArICogV2hlbiBy ZS9jb25maWd1cmluZyBGVyBsb2dnaW5nLCBjYWxsZXJzIG5lZWQgdG8gdXBkYXRlIHRoZSAiY2Zn IiBlbGVtZW50cyBvZg0KPiArICogdGhlIGh3LT5md19sb2cuZXZudHMgYXJyYXkgd2l0aCB0aGUg ZGVzaXJlZCBsb2dnaW5nIGV2ZW50IGNvbmZpZ3VyYXRpb25zIGZvcg0KPiArICogbW9kdWxlcyBv ZiBpbnRlcmVzdC4gV2hlbiBkaXNhYmxpbmcgRlcgbG9nZ2luZyBjb21wbGV0ZWx5LCB0aGUgY2Fs bGVycyBjYW4NCj4gKyAqIGp1c3QgcGFzcyBmYWxzZSBpbiB0aGUgImVuYWJsZSIgcGFyYW1ldGVy LiBPbiBjb21wbGV0aW9uLCB0aGUgZnVuY3Rpb24gd2lsbA0KPiArICogdXBkYXRlIHRoZSAiY3Vy IiBlbGVtZW50IG9mIHRoZSBody0+ZndfbG9nLmV2bnRzIGFycmF5IHdpdGggdGhlIHJlc3VsdGlu Zw0KPiArICogbG9nZ2luZyBldmVudCBjb25maWd1cmF0aW9ucyBvZiB0aGUgbW9kdWxlcyB0aGF0 IGFyZSBiZWluZyByZS9jb25maWd1cmVkLiBGVw0KPiArICogbG9nZ2luZyBtb2R1bGVzIHRoYXQg YXJlIG5vdCBwYXJ0IG9mIGEgcmVjb25maWd1cmF0aW9uIG9wZXJhdGlvbiByZXRhaW4gdGhlaXIN Cj4gKyAqIHByZXZpb3VzIHN0YXRlcy4NCj4gKyAqDQo+ICsgKiBCZWZvcmUgcmVzZXR0aW5nIHRo ZSBkZXZpY2UsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIGRyaXZlciBkaXNhYmxlcyBGVw0K PiArICogbG9nZ2luZyBiZWZvcmUgc2h1dHRpbmcgZG93biB0aGUgY29udHJvbCBxdWV1ZS4gV2hl biBkaXNhYmxpbmcgRlcgbG9nZ2luZw0KPiArICogKCJlbmFibGUiID0gZmFsc2UpLCB0aGUgbGF0 ZXN0IGNvbmZpZ3VyYXRpb25zIG9mIEZXIGxvZ2dpbmcgZXZlbnRzIHN0b3JlZCBpbg0KPiArICog aHctPmZ3X2xvZy5ldm50c1tdIGFyZSBub3Qgb3ZlcnJpZGRlbiB0byBhbGxvdyB0aGVtIHRvIGJl IHJlY29uZmlndXJlZCBhZnRlcg0KPiArICogYSBkZXZpY2UgcmVzZXQuDQo+ICsgKg0KPiArICog V2hlbiBlbmFibGluZyBGVyBsb2dnaW5nIHRvIGVtaXQgbG9nIG1lc3NhZ2VzIHZpYSB0aGUgUngg Q1EgZHVyaW5nIHRoZQ0KPiArICogZGV2aWNlJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIGEgbWVj aGFuaXNtIGFsdGVybmF0aXZlIHRvIGludGVycnVwdCBoYW5kbGVycw0KPiArICogbmVlZHMgdG8g YmUgdXNlZCB0byBleHRyYWN0IEZXIGxvZyBtZXNzYWdlcyBmcm9tIHRoZSBSeCBDUSBwZXJpb2Rp Y2FsbHkgYW5kDQo+ICsgKiB0byBwcmV2ZW50IHRoZSBSeCBDUSBmcm9tIGJlaW5nIGZ1bGwgYW5k IHN0YWxsaW5nIG90aGVyIHR5cGVzIG9mIGNvbnRyb2wNCj4gKyAqIG1lc3NhZ2VzIGZyb20gRlcg dG8gU1cuIEludGVycnVwdHMgYXJlIHR5cGljYWxseSBkaXNhYmxlZCBkdXJpbmcgdGhlIGRldmlj ZSdzDQo+ICsgKiBpbml0aWFsaXphdGlvbiBwaGFzZS4NCj4gKyAqLw0KPiArc3RhdGljIGVudW0g aWNlX3N0YXR1cyBpY2VfY2ZnX2Z3X2xvZyhzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBlbmFibGUp DQo+ICt7DQo+ICsJc3RydWN0IGljZV9hcWNfZndfbG9nZ2luZ19kYXRhICpkYXRhID0gTlVMTDsN Cj4gKwlzdHJ1Y3QgaWNlX2FxY19md19sb2dnaW5nICpjbWQ7DQo+ICsJZW51bSBpY2Vfc3RhdHVz IHN0YXR1cyA9IElDRV9TVUNDRVNTOw0KPiArCXUxNiBpLCBjaGdzID0gMCwgbGVuID0gMDsNCj4g KwlzdHJ1Y3QgaWNlX2FxX2Rlc2MgZGVzYzsNCj4gKwl1OCBhY3R2X2V2bnRzID0gMDsNCj4gKwl2 b2lkICpidWYgPSBOVUxMOw0KPiArDQo+ICsJaWYgKCFody0+ZndfbG9nLmNxX2VuICYmICFody0+ ZndfbG9nLnVhcnRfZW4pDQo+ICsJCXJldHVybiBJQ0VfU1VDQ0VTUzsNCj4gKw0KPiArCS8qIERp c2FibGUgRlcgbG9nZ2luZyBvbmx5IHdoZW4gdGhlIGNvbnRyb2wgcXVldWUgaXMgc3RpbGwgcmVz cG9uc2l2ZSAqLw0KPiArCWlmICghZW5hYmxlICYmDQo+ICsJICAgICghaHctPmZ3X2xvZy5hY3R2 X2V2bnRzIHx8ICFpY2VfY2hlY2tfc3FfYWxpdmUoaHcsICZody0+YWRtaW5xKSkpDQo+ICsJCXJl dHVybiBJQ0VfU1VDQ0VTUzsNCj4gKw0KPiArCWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNj KCZkZXNjLCBpY2VfYXFjX29wY19md19sb2dnaW5nKTsNCj4gKwljbWQgPSAmZGVzYy5wYXJhbXMu ZndfbG9nZ2luZzsNCj4gKw0KPiArCS8qIEluZGljYXRlIHdoaWNoIGNvbnRyb2xzIGFyZSB2YWxp ZCAqLw0KPiArCWlmIChody0+ZndfbG9nLmNxX2VuKQ0KPiArCQljbWQtPmxvZ19jdHJsX3ZhbGlk IHw9IElDRV9BUUNfRldfTE9HX0FRX1ZBTElEOw0KPiArDQo+ICsJaWYgKGh3LT5md19sb2cudWFy dF9lbikNCj4gKwkJY21kLT5sb2dfY3RybF92YWxpZCB8PSBJQ0VfQVFDX0ZXX0xPR19VQVJUX1ZB TElEOw0KPiArDQo+ICsJaWYgKGVuYWJsZSkgew0KPiArCQkvKiBGaWxsIGluIGFuIGFycmF5IG9m IGVudHJpZXMgd2l0aCBGVyBsb2dnaW5nIG1vZHVsZXMgYW5kDQo+ICsJCSAqIGxvZ2dpbmcgZXZl bnRzIGJlaW5nIHJlY29uZmlndXJlZC4NCj4gKwkJICovDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBJ Q0VfQVFDX0ZXX0xPR19JRF9NQVg7IGkrKykgew0KPiArCQkJdTE2IHZhbDsNCj4gKw0KPiArCQkJ LyogS2VlcCB0cmFjayBvZiBlbmFibGVkIGV2ZW50IHR5cGVzICovDQo+ICsJCQlhY3R2X2V2bnRz IHw9IGh3LT5md19sb2cuZXZudHNbaV0uY2ZnOw0KPiArDQo+ICsJCQlpZiAoaHctPmZ3X2xvZy5l dm50c1tpXS5jZmcgPT0gaHctPmZ3X2xvZy5ldm50c1tpXS5jdXIpDQo+ICsJCQkJY29udGludWU7 DQo+ICsNCj4gKwkJCWlmICghZGF0YSkgew0KPiArCQkJCWRhdGEgPSAoc3RydWN0IGljZV9hcWNf ZndfbG9nZ2luZ19kYXRhICopDQo+ICsJCQkJCWljZV9tYWxsb2MoaHcsDQo+ICsJCQkJCQkgICBJ Q0VfRldfTE9HX0RFU0NfU0laRV9NQVgpOw0KPiArCQkJCWlmICghZGF0YSkNCj4gKwkJCQkJcmV0 dXJuIElDRV9FUlJfTk9fTUVNT1JZOw0KPiArCQkJfQ0KPiArDQo+ICsJCQl2YWwgPSBpIDw8IElD RV9BUUNfRldfTE9HX0lEX1M7DQo+ICsJCQl2YWwgfD0gaHctPmZ3X2xvZy5ldm50c1tpXS5jZmcg PDwgSUNFX0FRQ19GV19MT0dfRU5fUzsNCj4gKwkJCWRhdGEtPmVudHJ5W2NoZ3MrK10gPSBDUFVf VE9fTEUxNih2YWwpOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogT25seSBlbmFibGUgRlcgbG9nZ2lu ZyBpZiBhdCBsZWFzdCBvbmUgbW9kdWxlIGlzIHNwZWNpZmllZC4NCj4gKwkJICogSWYgRlcgbG9n Z2luZyBpcyBjdXJyZW50bHkgZW5hYmxlZCBidXQgYWxsIG1vZHVsZXMgYXJlIG5vdA0KPiArCQkg KiBlbmFibGVkIHRvIGVtaXQgbG9nIG1lc3NhZ2VzLCBkaXNhYmxlIEZXIGxvZ2dpbmcgYWx0b2dl dGhlci4NCj4gKwkJICovDQo+ICsJCWlmIChhY3R2X2V2bnRzKSB7DQo+ICsJCQkvKiBMZWF2ZSBp ZiB0aGVyZSBpcyBlZmZlY3RpdmVseSBubyBjaGFuZ2UgKi8NCj4gKwkJCWlmICghY2hncykNCj4g KwkJCQlnb3RvIG91dDsNCj4gKw0KPiArCQkJaWYgKGh3LT5md19sb2cuY3FfZW4pDQo+ICsJCQkJ Y21kLT5sb2dfY3RybCB8PSBJQ0VfQVFDX0ZXX0xPR19BUV9FTjsNCj4gKw0KPiArCQkJaWYgKGh3 LT5md19sb2cudWFydF9lbikNCj4gKwkJCQljbWQtPmxvZ19jdHJsIHw9IElDRV9BUUNfRldfTE9H X1VBUlRfRU47DQo+ICsNCj4gKwkJCWJ1ZiA9IGRhdGE7DQo+ICsJCQlsZW4gPSBJQ0VfRldfTE9H X0RFU0NfU0laRShjaGdzKTsNCj4gKwkJCWRlc2MuZmxhZ3MgfD0gQ1BVX1RPX0xFMTYoSUNFX0FR X0ZMQUdfUkQpOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJc3RhdHVzID0gaWNlX2FxX3NlbmRf Y21kKGh3LCAmZGVzYywgYnVmLCBsZW4sIE5VTEwpOw0KPiArCWlmICghc3RhdHVzKSB7DQo+ICsJ CS8qIFVwZGF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvIHJlZmxlY3QgZXZlbnRzIGVu YWJsZWQuDQo+ICsJCSAqIGh3LT5md19sb2cuY3FfZW4gYW5kIGh3LT5md19sb2cudWFydF9lbiBp bmRpY2F0ZSBpZiB0aGUgRlcNCj4gKwkJICogbG9nZ2luZyBtb2RlIGlzIGVuYWJsZWQgZm9yIHRo ZSBkZXZpY2UuIFRoZXkgZG8gbm90IHJlZmxlY3QNCj4gKwkJICogYWN0dWFsIG1vZHVsZXMgYmVp bmcgZW5hYmxlZCB0byBlbWl0IGxvZyBtZXNzYWdlcy4gU28sIHRoZWlyDQo+ICsJCSAqIHZhbHVl cyByZW1haW4gdW5jaGFuZ2VkIGV2ZW4gd2hlbiBhbGwgbW9kdWxlcyBhcmUgZGlzYWJsZWQuDQo+ ICsJCSAqLw0KPiArCQl1MTYgY250ID0gZW5hYmxlID8gY2hncyA6ICh1MTYpSUNFX0FRQ19GV19M T0dfSURfTUFYOw0KPiArDQo+ICsJCWh3LT5md19sb2cuYWN0dl9ldm50cyA9IGFjdHZfZXZudHM7 DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgew0KPiArCQkJdTE2IHYsIG07DQo+ICsN Cj4gKwkJCWlmICghZW5hYmxlKSB7DQo+ICsJCQkJLyogV2hlbiBkaXNhYmxpbmcgYWxsIEZXIGxv Z2dpbmcgZXZlbnRzIGFzIHBhcnQNCj4gKwkJCQkgKiBvZiBkZXZpY2UncyBkZS1pbml0aWFsaXph dGlvbiwgdGhlIG9yaWdpbmFsDQo+ICsJCQkJICogY29uZmlndXJhdGlvbnMgYXJlIHJldGFpbmVk LCBhbmQgY2FuIGJlIHVzZWQNCj4gKwkJCQkgKiB0byByZWNvbmZpZ3VyZSBGVyBsb2dnaW5nIGxh dGVyIGlmIHRoZSBkZXZpY2UNCj4gKwkJCQkgKiBpcyByZS1pbml0aWFsaXplZC4NCj4gKwkJCQkg Ki8NCj4gKwkJCQlody0+ZndfbG9nLmV2bnRzW2ldLmN1ciA9IDA7DQo+ICsJCQkJY29udGludWU7 DQo+ICsJCQl9DQo+ICsNCj4gKwkJCXYgPSBMRTE2X1RPX0NQVShkYXRhLT5lbnRyeVtpXSk7DQo+ ICsJCQltID0gKHYgJiBJQ0VfQVFDX0ZXX0xPR19JRF9NKSA+PiBJQ0VfQVFDX0ZXX0xPR19JRF9T Ow0KPiArCQkJaHctPmZ3X2xvZy5ldm50c1ttXS5jdXIgPSBody0+ZndfbG9nLmV2bnRzW21dLmNm ZzsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArb3V0Og0KPiArCWlmIChkYXRhKQ0KPiArCQlpY2Vf ZnJlZShodywgZGF0YSk7DQo+ICsNCj4gKwlyZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIGljZV9vdXRwdXRfZndfbG9nDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3 IHN0cnVjdA0KPiArICogQGRlc2M6IHBvaW50ZXIgdG8gdGhlIEFRIG1lc3NhZ2UgZGVzY3JpcHRv cg0KPiArICogQGJ1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGFjY29tcGFueWluZyB0aGUgQVEg bWVzc2FnZQ0KPiArICoNCj4gKyAqIEZvcm1hdHMgYSBGVyBMb2cgbWVzc2FnZSBhbmQgb3V0cHV0 cyBpdCB2aWEgdGhlIHN0YW5kYXJkIGRyaXZlciBsb2dzLg0KPiArICovDQo+ICt2b2lkIGljZV9v dXRwdXRfZndfbG9nKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxX2Rlc2MgKmRlc2Ms IHZvaWQgKmJ1ZikNCj4gK3sNCj4gKwlpY2VfZGVidWcoaHcsIElDRV9EQkdfQVFfTVNHLCAiWyBG VyBMb2cgTXNnIFN0YXJ0IF1cbiIpOw0KPiArCWljZV9kZWJ1Z19hcnJheShodywgSUNFX0RCR19B UV9NU0csIDE2LCAxLCAodTggKilidWYsDQo+ICsJCQlMRTE2X1RPX0NQVShkZXNjLT5kYXRhbGVu KSk7DQo+ICsJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0FRX01TRywgIlsgRlcgTG9nIE1zZyBFbmQg XVxuIik7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2dldF9pdHJfaW50cmxfZ3JhbiAt IGRldGVybWluZSBpbnQvaW50cmwgZ3JhbnVsYXJpdHkNCj4gKyAqIEBodzogcG9pbnRlciB0byB0 aGUgaHcgc3RydWN0DQo+ICsgKg0KPiArICogRGV0ZXJtaW5lcyB0aGUgaXRyL2ludHJsIGdyYW51 bGFyaXRpZXMgYmFzZWQgb24gdGhlIG1heGltdW0gYWdncmVnYXRlDQo+ICsgKiBiYW5kd2lkdGgg YWNjb3JkaW5nIHRvIHRoZSBkZXZpY2UncyBjb25maWd1cmF0aW9uIGR1cmluZyBwb3dlci1vbi4N Cj4gKyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0YXR1cyBpY2VfZ2V0X2l0cl9pbnRybF9ncmFu KHN0cnVjdCBpY2VfaHcgKmh3KQ0KPiArew0KPiArCXU4IG1heF9hZ2dfYncgPSAocmQzMihodywg R0xfUFdSX01PREVfQ1RMKSAmDQo+ICsJCQkgR0xfUFdSX01PREVfQ1RMX0NBUl9NQVhfQldfTSkg Pj4NCj4gKwkJCUdMX1BXUl9NT0RFX0NUTF9DQVJfTUFYX0JXX1M7DQo+ICsNCj4gKwlzd2l0Y2gg KG1heF9hZ2dfYncpIHsNCj4gKwljYXNlIElDRV9NQVhfQUdHX0JXXzIwMEc6DQo+ICsJY2FzZSBJ Q0VfTUFYX0FHR19CV18xMDBHOg0KPiArCWNhc2UgSUNFX01BWF9BR0dfQldfNTBHOg0KPiArCQlo dy0+aXRyX2dyYW4gPSBJQ0VfSVRSX0dSQU5fQUJPVkVfMjU7DQo+ICsJCWh3LT5pbnRybF9ncmFu ID0gSUNFX0lOVFJMX0dSQU5fQUJPVkVfMjU7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSUNFX01B WF9BR0dfQldfMjVHOg0KPiArCQlody0+aXRyX2dyYW4gPSBJQ0VfSVRSX0dSQU5fTUFYXzI1Ow0K PiArCQlody0+aW50cmxfZ3JhbiA9IElDRV9JTlRSTF9HUkFOX01BWF8yNTsNCj4gKwkJYnJlYWs7 DQo+ICsJZGVmYXVsdDoNCj4gKwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkg ICJGYWlsZWQgdG8gZGV0ZXJtaW5lIGl0ci9pbnRybCBncmFudWxhcml0eVxuIik7DQo+ICsJCXJl dHVybiBJQ0VfRVJSX0NGRzsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gSUNFX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRp YWxpemF0aW9uIHJvdXRpbmUNCj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3Ry dWN0dXJlDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNl X2h3ICpodykNCj4gK3sNCj4gKwlzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAqcGNh cHM7DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0YXR1czsNCj4gKwl1MTYgbWFjX2J1Zl9sZW47DQo+ ICsJdm9pZCAqbWFjX2J1ZjsNCj4gKw0KPiArCWljZV9kZWJ1ZyhodywgSUNFX0RCR19UUkFDRSwg ImljZV9pbml0X2h3Iik7DQo+ICsNCj4gKw0KPiArCS8qIFNldCBNQUMgdHlwZSBiYXNlZCBvbiBE ZXZpY2VJRCAqLw0KPiArCXN0YXR1cyA9IGljZV9zZXRfbWFjX3R5cGUoaHcpOw0KPiArCWlmIChz dGF0dXMpDQo+ICsJCXJldHVybiBzdGF0dXM7DQo+ICsNCj4gKwlody0+cGZfaWQgPSAodTgpKHJk MzIoaHcsIFBGX0ZVTkNfUklEKSAmDQo+ICsJCQkgUEZfRlVOQ19SSURfRlVOQ1RJT05fTlVNQkVS X00pID4+DQo+ICsJCVBGX0ZVTkNfUklEX0ZVTkNUSU9OX05VTUJFUl9TOw0KPiArDQo+ICsNCj4g KwlzdGF0dXMgPSBpY2VfcmVzZXQoaHcsIElDRV9SRVNFVF9QRlIpOw0KPiArCWlmIChzdGF0dXMp DQo+ICsJCXJldHVybiBzdGF0dXM7DQo+ICsNCj4gKwlzdGF0dXMgPSBpY2VfZ2V0X2l0cl9pbnRy bF9ncmFuKGh3KTsNCj4gKwlpZiAoc3RhdHVzKQ0KPiArCQlyZXR1cm4gc3RhdHVzOw0KPiArDQo+ ICsNCj4gKwlzdGF0dXMgPSBpY2VfaW5pdF9hbGxfY3RybHEoaHcpOw0KPiArCWlmIChzdGF0dXMp DQo+ICsJCWdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7DQo+ICsNCj4gKwkvKiBFbmFibGUgRlcgbG9n Z2luZy4gTm90IGZhdGFsIGlmIHRoaXMgZmFpbHMuICovDQo+ICsJc3RhdHVzID0gaWNlX2NmZ19m d19sb2coaHcsIHRydWUpOw0KPiArCWlmIChzdGF0dXMpDQo+ICsJCWljZV9kZWJ1ZyhodywgSUNF X0RCR19JTklULCAiRmFpbGVkIHRvIGVuYWJsZSBGVyBsb2dnaW5nLlxuIik7DQo+ICsNCj4gKwlz dGF0dXMgPSBpY2VfY2xlYXJfcGZfY2ZnKGh3KTsNCj4gKwlpZiAoc3RhdHVzKQ0KPiArCQlnb3Rv IGVycl91bnJvbGxfY3Fpbml0Ow0KPiArDQo+ICsNCj4gKwlpY2VfY2xlYXJfcHhlX21vZGUoaHcp Ow0KPiArDQo+ICsJc3RhdHVzID0gaWNlX2luaXRfbnZtKGh3KTsNCj4gKwlpZiAoc3RhdHVzKQ0K PiArCQlnb3RvIGVycl91bnJvbGxfY3Fpbml0Ow0KPiArDQo+ICsJc3RhdHVzID0gaWNlX2dldF9j YXBzKGh3KTsNCj4gKwlpZiAoc3RhdHVzKQ0KPiArCQlnb3RvIGVycl91bnJvbGxfY3Fpbml0Ow0K PiArDQo+ICsJaHctPnBvcnRfaW5mbyA9IChzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqKQ0KPiArCQkJ aWNlX21hbGxvYyhodywgc2l6ZW9mKCpody0+cG9ydF9pbmZvKSk7DQo+ICsJaWYgKCFody0+cG9y dF9pbmZvKSB7DQo+ICsJCXN0YXR1cyA9IElDRV9FUlJfTk9fTUVNT1JZOw0KPiArCQlnb3RvIGVy cl91bnJvbGxfY3Fpbml0Ow0KPiArCX0NCj4gKw0KPiArCS8qIHNldCB0aGUgYmFjayBwb2ludGVy IHRvIGh3ICovDQo+ICsJaHctPnBvcnRfaW5mby0+aHcgPSBodzsNCj4gKw0KPiArCS8qIEluaXRp YWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIHN3aXRjaCBjb25maWd1cmF0aW9uIGRhdGEgKi8N Cj4gKwlzdGF0dXMgPSBpY2VfZ2V0X2luaXRpYWxfc3dfY2ZnKGh3KTsNCj4gKwlpZiAoc3RhdHVz KQ0KPiArCQlnb3RvIGVycl91bnJvbGxfYWxsb2M7DQo+ICsNCj4gKwlody0+ZXZiX3ZlYiA9IHRy dWU7DQo+ICsNCj4gKwkvKiBRdWVyeSB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBmb3IgVHggc2No ZWR1bGVyICovDQo+ICsJc3RhdHVzID0gaWNlX3NjaGVkX3F1ZXJ5X3Jlc19hbGxvYyhodyk7DQo+ ICsJaWYgKHN0YXR1cykgew0KPiArCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfU0NIRUQsDQo+ICsJ CQkgICJGYWlsZWQgdG8gZ2V0IHNjaGVkdWxlciBhbGxvY2F0ZWQgcmVzb3VyY2VzXG4iKTsNCj4g KwkJZ290byBlcnJfdW5yb2xsX2FsbG9jOw0KPiArCX0NCj4gKw0KPiArDQo+ICsJLyogSW5pdGlh bGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggc2NoZWR1bGVyIGRhdGEgKi8NCj4gKwlzdGF0dXMg PSBpY2Vfc2NoZWRfaW5pdF9wb3J0KGh3LT5wb3J0X2luZm8pOw0KPiArCWlmIChzdGF0dXMpDQo+ ICsJCWdvdG8gZXJyX3Vucm9sbF9zY2hlZDsNCj4gKw0KPiArCXBjYXBzID0gKHN0cnVjdCBpY2Vf YXFjX2dldF9waHlfY2Fwc19kYXRhICopDQo+ICsJCWljZV9tYWxsb2MoaHcsIHNpemVvZigqcGNh cHMpKTsNCj4gKwlpZiAoIXBjYXBzKSB7DQo+ICsJCXN0YXR1cyA9IElDRV9FUlJfTk9fTUVNT1JZ Ow0KPiArCQlnb3RvIGVycl91bnJvbGxfc2NoZWQ7DQo+ICsJfQ0KPiArDQo+ICsJLyogSW5pdGlh bGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggUEhZIGNhcGFiaWxpdGllcyAqLw0KPiArCXN0YXR1 cyA9IGljZV9hcV9nZXRfcGh5X2NhcHMoaHctPnBvcnRfaW5mbywgZmFsc2UsDQo+ICsJCQkJICAg ICBJQ0VfQVFDX1JFUE9SVF9UT1BPX0NBUCwgcGNhcHMsIE5VTEwpOw0KPiArCWljZV9mcmVlKGh3 LCBwY2Fwcyk7DQo+ICsJaWYgKHN0YXR1cykNCj4gKwkJZ290byBlcnJfdW5yb2xsX3NjaGVkOw0K PiArDQo+ICsJLyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggbGluayBpbmZvcm1h dGlvbiAqLw0KPiArCXN0YXR1cyA9IGljZV9hcV9nZXRfbGlua19pbmZvKGh3LT5wb3J0X2luZm8s IGZhbHNlLCBOVUxMLCBOVUxMKTsNCj4gKwlpZiAoc3RhdHVzKQ0KPiArCQlnb3RvIGVycl91bnJv bGxfc2NoZWQ7DQo+ICsJLyogbmVlZCBhIHZhbGlkIFNXIGVudHJ5IHBvaW50IHRvIGJ1aWxkIGEg VHggdHJlZSAqLw0KPiArCWlmICghaHctPnN3X2VudHJ5X3BvaW50X2xheWVyKSB7DQo+ICsJCWlj ZV9kZWJ1ZyhodywgSUNFX0RCR19TQ0hFRCwgImludmFsaWQgc3cgZW50cnkgcG9pbnRcbiIpOw0K PiArCQlzdGF0dXMgPSBJQ0VfRVJSX0NGRzsNCj4gKwkJZ290byBlcnJfdW5yb2xsX3NjaGVkOw0K PiArCX0NCj4gKwlJTklUX0xJU1RfSEVBRCgmaHctPmFnZ19saXN0KTsNCj4gKwkvKiBJbml0aWFs aXplIG1heCBidXJzdCBzaXplICovDQo+ICsJaWYgKCFody0+bWF4X2J1cnN0X3NpemUpDQo+ICsJ CWljZV9jZmdfcmxfYnVyc3Rfc2l6ZShodywgSUNFX1NDSEVEX0RGTFRfQlVSU1RfU0laRSk7DQo+ ICsNCj4gKwlzdGF0dXMgPSBpY2VfaW5pdF9mbHRyX21nbXRfc3RydWN0KGh3KTsNCj4gKwlpZiAo c3RhdHVzKQ0KPiArCQlnb3RvIGVycl91bnJvbGxfc2NoZWQ7DQo+ICsNCj4gKyNpZiBkZWZpbmVk KEZQR0FfU1VQUE9SVCkgfHwgZGVmaW5lZChDVkxfQTBfU1VQUE9SVCkNCj4gKwkvKiBzb21lIG9m IHRoZSByZWdpc3RlciB3cml0ZSB3b3JrYXJvdW5kcyB0byBnZXQgUnggd29ya2luZyAqLw0KPiAr CWljZV9kZXZfb25ldGltZV9zZXR1cChodyk7DQo+ICsjZW5kaWYgLyogRlBHQV9TVVBQT1JUIHx8 IENWTF9BMF9TVVBQT1JUICovDQo+ICsNCj4gKwkvKiBHZXQgTUFDIGluZm9ybWF0aW9uICovDQo+ ICsJLyogQSBzaW5nbGUgcG9ydCBjYW4gcmVwb3J0IHVwIHRvIHR3byAoTEFOIGFuZCBXb0wpIGFk ZHJlc3NlcyAqLw0KPiArCW1hY19idWYgPSBpY2VfY2FsbG9jKGh3LCAyLA0KPiArCQkJICAgICBz aXplb2Yoc3RydWN0IGljZV9hcWNfbWFuYWdlX21hY19yZWFkX3Jlc3ApKTsNCj4gKwltYWNfYnVm X2xlbiA9IDIgKiBzaXplb2Yoc3RydWN0IGljZV9hcWNfbWFuYWdlX21hY19yZWFkX3Jlc3ApOw0K PiArDQo+ICsJaWYgKCFtYWNfYnVmKSB7DQo+ICsJCXN0YXR1cyA9IElDRV9FUlJfTk9fTUVNT1JZ Ow0KPiArCQlnb3RvIGVycl91bnJvbGxfZmx0cl9tZ210X3N0cnVjdDsNCj4gKwl9DQo+ICsNCj4g KwlzdGF0dXMgPSBpY2VfYXFfbWFuYWdlX21hY19yZWFkKGh3LCBtYWNfYnVmLCBtYWNfYnVmX2xl biwgTlVMTCk7DQo+ICsJaWNlX2ZyZWUoaHcsIG1hY19idWYpOw0KPiArDQo+ICsJaWYgKHN0YXR1 cykNCj4gKwkJZ290byBlcnJfdW5yb2xsX2ZsdHJfbWdtdF9zdHJ1Y3Q7DQo+ICsNCj4gKwlpY2Vf aW5pdF9mbGV4X2ZsZHMoaHcsIElDRV9SWERJRF9GTEVYX05JQyk7DQo+ICsJaWNlX2luaXRfZmxl eF9mbGRzKGh3LCBJQ0VfUlhESURfRkxFWF9OSUNfMik7DQo+ICsNCj4gKw0KPiArCXJldHVybiBJ Q0VfU1VDQ0VTUzsNCj4gKw0KPiArZXJyX3Vucm9sbF9mbHRyX21nbXRfc3RydWN0Og0KPiArCWlj ZV9jbGVhbnVwX2ZsdHJfbWdtdF9zdHJ1Y3QoaHcpOw0KPiArZXJyX3Vucm9sbF9zY2hlZDoNCj4g KwlpY2Vfc2NoZWRfY2xlYW51cF9hbGwoaHcpOw0KPiArZXJyX3Vucm9sbF9hbGxvYzoNCj4gKwlp Y2VfZnJlZShodywgaHctPnBvcnRfaW5mbyk7DQo+ICsJaHctPnBvcnRfaW5mbyA9IE5VTEw7DQo+ ICtlcnJfdW5yb2xsX2NxaW5pdDoNCj4gKwlpY2Vfc2h1dGRvd25fYWxsX2N0cmxxKGh3KTsNCj4g KwlyZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9kZWluaXRfaHcg LSB1bnJvbGwgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucyBkb25lIGJ5IGljZV9pbml0X2h3DQo+ ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICoNCj4gKyAq IFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGR1cmluZyBub21pbmFsIG9wZXJhdGlvbiwgbm90 IGFzIGEgcmVzdWx0IG9mDQo+ICsgKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2lu aXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmcNCj4gKyAqIGFwcGxpY2FibGUgaW5p dGlhbGl6YXRpb25zIGlmIGl0IGZhaWxzIGZvciBhbnkgcmVhc29uLg0KPiArICovDQo+ICt2b2lk IGljZV9kZWluaXRfaHcoc3RydWN0IGljZV9odyAqaHcpDQo+ICt7DQo+ICsJaWNlX2NsZWFudXBf Zmx0cl9tZ210X3N0cnVjdChodyk7DQo+ICsNCj4gKwlpY2Vfc2NoZWRfY2xlYW51cF9hbGwoaHcp Ow0KPiArCWljZV9zY2hlZF9jbGVhcl9hZ2coaHcpOw0KPiArDQo+ICsJaWYgKGh3LT5wb3J0X2lu Zm8pIHsNCj4gKwkJaWNlX2ZyZWUoaHcsIGh3LT5wb3J0X2luZm8pOw0KPiArCQlody0+cG9ydF9p bmZvID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBBdHRlbXB0IHRvIGRpc2FibGUgRlcgbG9n Z2luZyBiZWZvcmUgc2h1dHRpbmcgZG93biBjb250cm9sIHF1ZXVlcyAqLw0KPiArCWljZV9jZmdf ZndfbG9nKGh3LCBmYWxzZSk7DQo+ICsJaWNlX3NodXRkb3duX2FsbF9jdHJscShodyk7DQo+ICsN Cj4gKwkvKiBDbGVhciBWU0kgY29udGV4dHMgaWYgbm90IGFscmVhZHkgY2xlYXJlZCAqLw0KPiAr CWljZV9jbGVhcl9hbGxfdnNpX2N0eChodyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNl X2NoZWNrX3Jlc2V0IC0gQ2hlY2sgdG8gc2VlIGlmIGEgZ2xvYmFsIHJlc2V0IGlzIGNvbXBsZXRl DQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICovDQo+ ICtlbnVtIGljZV9zdGF0dXMgaWNlX2NoZWNrX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KQ0KPiAr ew0KPiArCXUzMiBjbnQsIHJlZyA9IDAsIGdyc3RfZGVsYXk7DQo+ICsNCj4gKwkvKiBQb2xsIGZv ciBEZXZpY2UgQWN0aXZlIHN0YXRlIGluIGNhc2UgYSByZWNlbnQgQ09SRVIsIEdMT0JSLA0KPiAr CSAqIG9yIEVNUFIgaGFzIG9jY3VycmVkLiBUaGUgZ3JzdCBkZWxheSB2YWx1ZSBpcyBpbiAxMDBt cyB1bml0cy4NCj4gKwkgKiBBZGQgMXNlYyBmb3Igb3V0c3RhbmRpbmcgQVEgY29tbWFuZHMgdGhh dCBjYW4gdGFrZSBhIGxvbmcgdGltZS4NCj4gKwkgKi8NCj4gKyNkZWZpbmUgR0xHRU5fUlNUQ1RM CQkweDAwMEI4MTgwIC8qIFJlc2V0IFNvdXJjZTogUE9SICovDQo+ICsjZGVmaW5lIEdMR0VOX1JT VENUTF9HUlNUREVMX1MJMA0KPiArI2RlZmluZSBHTEdFTl9SU1RDVExfR1JTVERFTF9NCU1BS0VN QVNLKDB4M0YsIEdMR0VOX1JTVENUTF9HUlNUREVMX1MpDQo+ICsJZ3JzdF9kZWxheSA9ICgocmQz MihodywgR0xHRU5fUlNUQ1RMKSAmIEdMR0VOX1JTVENUTF9HUlNUREVMX00pID4+DQo+ICsJCSAg ICAgIEdMR0VOX1JTVENUTF9HUlNUREVMX1MpICsgMTA7DQo+ICsNCj4gKwlmb3IgKGNudCA9IDA7 IGNudCA8IGdyc3RfZGVsYXk7IGNudCsrKSB7DQo+ICsJCWljZV9tc2VjX2RlbGF5KDEwMCwgdHJ1 ZSk7DQo+ICsJCXJlZyA9IHJkMzIoaHcsIEdMR0VOX1JTVEFUKTsNCj4gKwkJaWYgKCEocmVnICYg R0xHRU5fUlNUQVRfREVWU1RBVEVfTSkpDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlp ZiAoY250ID09IGdyc3RfZGVsYXkpIHsNCj4gKwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQs DQo+ICsJCQkgICJHbG9iYWwgcmVzZXQgcG9sbGluZyBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsN Cj4gKwkJcmV0dXJuIElDRV9FUlJfUkVTRVRfRkFJTEVEOw0KPiArCX0NCj4gKw0KPiArI2RlZmlu ZSBJQ0VfUkVTRVRfRE9ORV9NQVNLCShHTE5WTV9VTERfQ09SRVJfRE9ORV9NIHwgXA0KPiArCQkJ CSBHTE5WTV9VTERfR0xPQlJfRE9ORV9NKQ0KPiArDQo+ICsJLyogRGV2aWNlIGlzIEFjdGl2ZTsg Y2hlY2sgR2xvYmFsIFJlc2V0IHByb2Nlc3NlcyBhcmUgZG9uZSAqLw0KPiArCWZvciAoY250ID0g MDsgY250IDwgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQ7IGNudCsrKSB7DQo+ICsJCXJlZyA9IHJk MzIoaHcsIEdMTlZNX1VMRCkgJiBJQ0VfUkVTRVRfRE9ORV9NQVNLOw0KPiArCQlpZiAocmVnID09 IElDRV9SRVNFVF9ET05FX01BU0spIHsNCj4gKwkJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklU LA0KPiArCQkJCSAgIkdsb2JhbCByZXNldCBwcm9jZXNzZXMgZG9uZS4gJWRcbiIsIGNudCk7DQo+ ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArCQlpY2VfbXNlY19kZWxheSgxMCwgdHJ1ZSk7DQo+ICsJ fQ0KPiArDQo+ICsJaWYgKGNudCA9PSBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVCkgew0KPiArCQlp Y2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwNCj4gKwkJCSAgIldhaXQgZm9yIFJlc2V0IERvbmUg dGltZWQgb3V0LiBHTE5WTV9VTEQgPSAweCV4XG4iLA0KPiArCQkJICByZWcpOw0KPiArCQlyZXR1 cm4gSUNFX0VSUl9SRVNFVF9GQUlMRUQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIElDRV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9wZl9yZXNldCAtIFJlc2V0IHRoZSBQ Rg0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUNCj4gKyAqDQo+ ICsgKiBJZiBhIGdsb2JhbCByZXNldCBoYXMgYmVlbiB0cmlnZ2VyZWQsIHRoaXMgZnVuY3Rpb24g Y2hlY2tzDQo+ICsgKiBmb3IgaXRzIGNvbXBsZXRpb24gYW5kIHRoZW4gaXNzdWVzIHRoZSBQRiBy ZXNldA0KPiArICovDQo+ICtzdGF0aWMgZW51bSBpY2Vfc3RhdHVzIGljZV9wZl9yZXNldChzdHJ1 Y3QgaWNlX2h3ICpodykNCj4gK3sNCj4gKwl1MzIgY250LCByZWc7DQo+ICsNCj4gKwkvKiBJZiBh dCBmdW5jdGlvbiBlbnRyeSBhIGdsb2JhbCByZXNldCB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywg aS5lLg0KPiArCSAqIHN0YXRlIGlzIG5vdCAnZGV2aWNlIGFjdGl2ZScgb3IgYW55IG9mIHRoZSBy ZXNldCBkb25lIGJpdHMgYXJlIG5vdA0KPiArCSAqIHNldCBpbiBHTE5WTV9VTEQsIHRoZXJlIGlz IG5vIG5lZWQgZm9yIGEgUEYgUmVzZXQ7IHBvbGwgdW50aWwgdGhlDQo+ICsJICogZ2xvYmFsIHJl c2V0IGlzIGRvbmUuDQo+ICsJICovDQo+ICsJaWYgKChyZDMyKGh3LCBHTEdFTl9SU1RBVCkgJiBH TEdFTl9SU1RBVF9ERVZTVEFURV9NKSB8fA0KPiArCSAgICAocmQzMihodywgR0xOVk1fVUxEKSAm IElDRV9SRVNFVF9ET05FX01BU0spIF4gSUNFX1JFU0VUX0RPTkVfTUFTSykgew0KPiArCQkvKiBw b2xsIG9uIGdsb2JhbCByZXNldCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgdW50aWwgZG9uZSAqLw0K PiArCQlpZiAoaWNlX2NoZWNrX3Jlc2V0KGh3KSkNCj4gKwkJCXJldHVybiBJQ0VfRVJSX1JFU0VU X0ZBSUxFRDsNCj4gKw0KPiArCQlyZXR1cm4gSUNFX1NVQ0NFU1M7DQo+ICsJfQ0KPiArDQo+ICsJ LyogUmVzZXQgdGhlIFBGICovDQo+ICsJcmVnID0gcmQzMihodywgUEZHRU5fQ1RSTCk7DQo+ICsN Cj4gKwl3cjMyKGh3LCBQRkdFTl9DVFJMLCAocmVnIHwgUEZHRU5fQ1RSTF9QRlNXUl9NKSk7DQo+ ICsNCj4gKwlmb3IgKGNudCA9IDA7IGNudCA8IElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQr Kykgew0KPiArCQlyZWcgPSByZDMyKGh3LCBQRkdFTl9DVFJMKTsNCj4gKwkJaWYgKCEocmVnICYg UEZHRU5fQ1RSTF9QRlNXUl9NKSkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCWljZV9tc2VjX2Rl bGF5KDEsIHRydWUpOw0KPiArCX0NCj4gKw0KPiArCWlmIChjbnQgPT0gSUNFX1BGX1JFU0VUX1dB SVRfQ09VTlQpIHsNCj4gKwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkgICJQ RiByZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cbiIpOw0KPiArCQlyZXR1cm4gSUNF X0VSUl9SRVNFVF9GQUlMRUQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIElDRV9TVUNDRVNTOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9yZXNldCAtIFBlcmZvcm0gZGlmZmVyZW50IHR5 cGVzIG9mIHJlc2V0DQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVy ZQ0KPiArICogQHJlcTogcmVzZXQgcmVxdWVzdA0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24g dHJpZ2dlcnMgYSByZXNldCBhcyBzcGVjaWZpZWQgYnkgdGhlIHJlcSBwYXJhbWV0ZXIuDQo+ICsg Kg0KPiArICogTm90ZToNCj4gKyAqIElmIGFueXRoaW5nIG90aGVyIHRoYW4gYSBQRiByZXNldCBp cyB0cmlnZ2VyZWQsIFBYRSBtb2RlIGlzIHJlc3RvcmVkLg0KPiArICogVGhpcyBoYXMgdG8gYmUg Y2xlYXJlZCB1c2luZyBpY2VfY2xlYXJfcHhlX21vZGUgYWdhaW4sIG9uY2UgdGhlIEFRDQo+ICsg KiBpbnRlcmZhY2UgaGFzIGJlZW4gcmVzdG9yZWQgaW4gdGhlIHJlYnVpbGQgZmxvdy4NCj4gKyAq Lw0KPiArZW51bSBpY2Vfc3RhdHVzIGljZV9yZXNldChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBp Y2VfcmVzZXRfcmVxIHJlcSkNCj4gK3sNCj4gKwl1MzIgdmFsID0gMDsNCj4gKw0KPiArCXN3aXRj aCAocmVxKSB7DQo+ICsJY2FzZSBJQ0VfUkVTRVRfUEZSOg0KPiArCQlyZXR1cm4gaWNlX3BmX3Jl c2V0KGh3KTsNCj4gKwljYXNlIElDRV9SRVNFVF9DT1JFUjoNCj4gKwkJaWNlX2RlYnVnKGh3LCBJ Q0VfREJHX0lOSVQsICJDb3JlUiByZXF1ZXN0ZWRcbiIpOw0KPiArCQl2YWwgPSBHTEdFTl9SVFJJ R19DT1JFUl9NOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElDRV9SRVNFVF9HTE9CUjoNCj4gKwkJ aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsICJHbG9iYWxSIHJlcXVlc3RlZFxuIik7DQo+ICsJ CXZhbCA9IEdMR0VOX1JUUklHX0dMT0JSX007DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFNOw0KPiArCX0NCj4gKw0KPiArCXZhbCB8PSByZDMyKGh3 LCBHTEdFTl9SVFJJRyk7DQo+ICsJd3IzMihodywgR0xHRU5fUlRSSUcsIHZhbCk7DQo+ICsJaWNl X2ZsdXNoKGh3KTsNCj4gKw0KPiArDQo+ICsJLyogd2FpdCBmb3IgdGhlIEZXIHRvIGJlIHJlYWR5 ICovDQo+ICsJcmV0dXJuIGljZV9jaGVja19yZXNldChodyk7DQo+ICt9DQo+ICsNCj4gKw0KPiAr DQo+ICsvKioNCj4gKyAqIGljZV9jb3B5X3J4cV9jdHhfdG9faHcNCj4gKyAqIEBodzogcG9pbnRl ciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlDQo+ICsgKiBAaWNlX3J4cV9jdHg6IHBvaW50ZXIg dG8gdGhlIHJ4cSBjb250ZXh0DQo+ICsgKiBAcnhxX2luZGV4OiB0aGUgaW5kZXggb2YgdGhlIFJ4 IHF1ZXVlDQo+ICsgKg0KPiArICogQ29waWVzIHJ4cSBjb250ZXh0IGZyb20gZGVuc2Ugc3RydWN0 dXJlIHRvIGh3IHJlZ2lzdGVyIHNwYWNlDQo+ICsgKi8NCj4gK3N0YXRpYyBlbnVtIGljZV9zdGF0 dXMNCj4gK2ljZV9jb3B5X3J4cV9jdHhfdG9faHcoc3RydWN0IGljZV9odyAqaHcsIHU4ICppY2Vf cnhxX2N0eCwgdTMyIHJ4cV9pbmRleCkNCj4gK3sNCj4gKwl1OCBpOw0KPiArDQo+ICsJaWYgKCFp Y2VfcnhxX2N0eCkNCj4gKwkJcmV0dXJuIElDRV9FUlJfQkFEX1BUUjsNCj4gKw0KPiArCWlmIChy eHFfaW5kZXggPiBRUlhfQ1RSTF9NQVhfSU5ERVgpDQo+ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFN Ow0KPiArDQo+ICsJLyogQ29weSBlYWNoIGR3b3JkIHNlcGFyYXRlbHkgdG8gaHcgKi8NCj4gKwlm b3IgKGkgPSAwOyBpIDwgSUNFX1JYUV9DVFhfU0laRV9EV09SRFM7IGkrKykgew0KPiArCQl3cjMy KGh3LCBRUlhfQ09OVEVYVChpLCByeHFfaW5kZXgpLA0KPiArCQkgICAgICooKHUzMiAqKShpY2Vf cnhxX2N0eCArIChpICogc2l6ZW9mKHUzMikpKSkpOw0KPiArDQo+ICsJCWljZV9kZWJ1Zyhodywg SUNFX0RCR19RQ1RYLCAicXJ4ZGF0YVslZF06ICUwOFhcbiIsIGksDQo+ICsJCQkgICooKHUzMiAq KShpY2VfcnhxX2N0eCArIChpICogc2l6ZW9mKHUzMikpKSkpOw0KPiArCX0NCj4gKw0KPiArCXJl dHVybiBJQ0VfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyogTEFOIFJ4IFF1ZXVlIENvbnRleHQg Ki8NCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWNlX2N0eF9lbGUgaWNlX3JsYW5fY3R4X2luZm9b XSA9IHsNCj4gKwkvKiBGaWVsZAkJV2lkdGgJTFNCICovDQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vf cmxhbl9jdHgsIGhlYWQsCQkxMywJMCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vfcmxhbl9jdHgs IGNwdWlkLAkJOCwJMTMpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3JsYW5fY3R4LCBiYXNlLAkJ NTcsCTMyKSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV9ybGFuX2N0eCwgcWxlbiwJCTEzLAk4OSks DQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vfcmxhbl9jdHgsIGRidWYsCQk3LAkxMDIpLA0KPiArCUlD RV9DVFhfU1RPUkUoaWNlX3JsYW5fY3R4LCBoYnVmLAkJNSwJMTA5KSwNCj4gKwlJQ0VfQ1RYX1NU T1JFKGljZV9ybGFuX2N0eCwgZHR5cGUsCQkyLAkxMTQpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNl X3JsYW5fY3R4LCBkc2l6ZSwJCTEsCTExNiksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vfcmxhbl9j dHgsIGNyY3N0cmlwLAkJMSwJMTE3KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV9ybGFuX2N0eCwg bDJ0c2VsLAkJMSwJMTE5KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV9ybGFuX2N0eCwgaHNwbGl0 XzAsCQk0LAkxMjApLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3JsYW5fY3R4LCBoc3BsaXRfMSwJ CTIsCTEyNCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vfcmxhbl9jdHgsIHNob3dpdiwJCTEsCTEy NyksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vfcmxhbl9jdHgsIHJ4bWF4LAkJMTQsCTE3NCksDQo+ ICsJSUNFX0NUWF9TVE9SRShpY2Vfcmxhbl9jdHgsIHRwaHJkZXNjX2VuYSwJMSwJMTkzKSwNCj4g KwlJQ0VfQ1RYX1NUT1JFKGljZV9ybGFuX2N0eCwgdHBod2Rlc2NfZW5hLAkxLAkxOTQpLA0KPiAr CUlDRV9DVFhfU1RPUkUoaWNlX3JsYW5fY3R4LCB0cGhkYXRhX2VuYSwJMSwJMTk1KSwNCj4gKwlJ Q0VfQ1RYX1NUT1JFKGljZV9ybGFuX2N0eCwgdHBoaGVhZF9lbmEsCTEsCTE5NiksDQo+ICsJSUNF X0NUWF9TVE9SRShpY2Vfcmxhbl9jdHgsIGxyeHF0aHJlc2gsCQkzLAkxOTgpLA0KPiArCXsgMCB9 DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIGljZV93cml0ZV9yeHFfY3R4DQo+ICsgKiBAaHc6 IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICogQHJsYW5fY3R4OiBwb2lu dGVyIHRvIHRoZSByeHEgY29udGV4dA0KPiArICogQHJ4cV9pbmRleDogdGhlIGluZGV4IG9mIHRo ZSBSeCBxdWV1ZQ0KPiArICoNCj4gKyAqIENvbnZlcnRzIHJ4cSBjb250ZXh0IGZyb20gc3BhcnNl IHRvIGRlbnNlIHN0cnVjdHVyZSBhbmQgdGhlbiB3cml0ZXMNCj4gKyAqIGl0IHRvIGh3IHJlZ2lz dGVyIHNwYWNlDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3dyaXRlX3J4cV9j dHgoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2Vfcmxhbl9jdHggKnJsYW5fY3R4LA0KPiAr CQkgIHUzMiByeHFfaW5kZXgpDQo+ICt7DQo+ICsJdTggY3R4X2J1ZltJQ0VfUlhRX0NUWF9TWl0g PSB7IDAgfTsNCj4gKw0KPiArCWljZV9zZXRfY3R4KCh1OCAqKXJsYW5fY3R4LCBjdHhfYnVmLCBp Y2Vfcmxhbl9jdHhfaW5mbyk7DQo+ICsJcmV0dXJuIGljZV9jb3B5X3J4cV9jdHhfdG9faHcoaHcs IGN0eF9idWYsIHJ4cV9pbmRleCk7DQo+ICt9DQo+ICsNCj4gKyNpZiAhZGVmaW5lZChOT19VTlVT RURfQ1RYX0NPREUpIHx8IGRlZmluZWQoQUVfRFJJVkVSKQ0KPiArLyoqDQo+ICsgKiBpY2VfY2xl YXJfcnhxX2N0eA0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUN Cj4gKyAqIEByeHFfaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgUnggcXVldWUgdG8gY2xlYXINCj4g KyAqDQo+ICsgKiBDbGVhcnMgcnhxIGNvbnRleHQgaW4gaHcgcmVnaXN0ZXIgc3BhY2UNCj4gKyAq Lw0KPiArZW51bSBpY2Vfc3RhdHVzIGljZV9jbGVhcl9yeHFfY3R4KHN0cnVjdCBpY2VfaHcgKmh3 LCB1MzIgcnhxX2luZGV4KQ0KPiArew0KPiArCXU4IGk7DQo+ICsNCj4gKwlpZiAocnhxX2luZGV4 ID4gUVJYX0NUUkxfTUFYX0lOREVYKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0K PiArCS8qIENsZWFyIGVhY2ggZHdvcmQgcmVnaXN0ZXIgc2VwYXJhdGVseSAqLw0KPiArCWZvciAo aSA9IDA7IGkgPCBJQ0VfUlhRX0NUWF9TSVpFX0RXT1JEUzsgaSsrKQ0KPiArCQl3cjMyKGh3LCBR UlhfQ09OVEVYVChpLCByeHFfaW5kZXgpLCAwKTsNCj4gKw0KPiArCXJldHVybiBJQ0VfU1VDQ0VT UzsNCj4gK30NCj4gKyNlbmRpZiAvKiAhTk9fVU5VU0VEX0NUWF9DT0RFIHx8IEFFX0RSSVZFUiAq Lw0KPiArDQo+ICsvKiBMQU4gVHggUXVldWUgQ29udGV4dCAqLw0KPiArY29uc3Qgc3RydWN0IGlj ZV9jdHhfZWxlIGljZV90bGFuX2N0eF9pbmZvW10gPSB7DQo+ICsJCQkJICAgIC8qIEZpZWxkCQkJ V2lkdGgJTFNCICovDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIGJhc2UsCQkJNTcs CTApLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCBwb3J0X251bSwJCQkzLAk1Nyks DQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIGNnZF9udW0sCQkJNSwJNjApLA0KPiAr CUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCBwZl9udW0sCQkJMywJNjUpLA0KPiArCUlDRV9D VFhfU1RPUkUoaWNlX3RsYW5fY3R4LCB2bXZmX251bSwJCQkxMCwJNjgpLA0KPiArCUlDRV9DVFhf U1RPUkUoaWNlX3RsYW5fY3R4LCB2bXZmX3R5cGUsCQkJMiwJNzgpLA0KPiArCUlDRV9DVFhfU1RP UkUoaWNlX3RsYW5fY3R4LCBzcmNfdnNpLAkJCTEwLAk4MCksDQo+ICsJSUNFX0NUWF9TVE9SRShp Y2VfdGxhbl9jdHgsIHRzeW5fZW5hLAkJCTEsCTkwKSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90 bGFuX2N0eCwgYWx0X3ZsYW4sCQkJMSwJOTIpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5f Y3R4LCBjcHVpZCwJCQk4LAk5MyksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIHdi X21vZGUsCQkJMSwJMTAxKSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90bGFuX2N0eCwgdHBocmRf ZGVzYywJCQkxLAkxMDIpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCB0cGhyZCwJ CQkxLAkxMDMpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCB0cGh3cl9kZXNjLAkJ CTEsCTEwNCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIGNtcHFfaWQsCQkJOSwJ MTA1KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90bGFuX2N0eCwgcW51bV9pbl9mdW5jLAkJMTQs CTExNCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIGl0cl9ub3RpZmljYXRpb25f bW9kZSwJMSwJMTI4KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90bGFuX2N0eCwgYWRqdXN0X3By b2ZfaWQsCQk2LAkxMjkpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCBxbGVuLAkJ CTEzLAkxMzUpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCBxdWFudGFfcHJvZl9p ZHgsCQk0LAkxNDgpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCB0c29fZW5hLAkJ CTEsCTE1MiksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIHRzb19xbnVtLAkJCTEx LAkxNTMpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3RsYW5fY3R4LCBsZWdhY3lfaW50LAkJCTEs CTE2NCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIGRyb3BfZW5hLAkJCTEsCTE2 NSksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdGxhbl9jdHgsIGNhY2hlX3Byb2ZfaWR4LAkJMiwJ MTY2KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90bGFuX2N0eCwgcGt0X3NoYXBlcl9wcm9mX2lk eCwJMywJMTY4KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90bGFuX2N0eCwgaW50X3Ffc3RhdGUs CQkxMTAsCTE3MSksDQo+ICsJeyAwIH0NCj4gK307DQo+ICsNCj4gKyNpZiAhZGVmaW5lZChOT19V TlVTRURfQ1RYX0NPREUpIHx8IGRlZmluZWQoQUVfRFJJVkVSKQ0KPiArLyoqDQo+ICsgKiBpY2Vf Y29weV90eF9jbXBsdG5xX2N0eF90b19odw0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJk d2FyZSBzdHJ1Y3R1cmUNCj4gKyAqIEBpY2VfdHhfY21wbHRucV9jdHg6IHBvaW50ZXIgdG8gdGhl IFR4IGNvbXBsZXRpb24gcXVldWUgY29udGV4dA0KPiArICogQHR4X2NtcGx0bnFfaW5kZXg6IHRo ZSBpbmRleCBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZQ0KPiArICoNCj4gKyAqIENvcGllcyBUeCBj b21wbGV0aW9uIHEgY29udGV4dCBmcm9tIGRlbnNlIHN0cnVjdHVyZSB0byBodyByZWdpc3RlciBz cGFjZQ0KPiArICovDQo+ICtzdGF0aWMgZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfY29weV90eF9j bXBsdG5xX2N0eF90b19odyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggKmljZV90eF9jbXBsdG5xX2N0 eCwNCj4gKwkJCSAgICAgIHUzMiB0eF9jbXBsdG5xX2luZGV4KQ0KPiArew0KPiArCXU4IGk7DQo+ ICsNCj4gKwlpZiAoIWljZV90eF9jbXBsdG5xX2N0eCkNCj4gKwkJcmV0dXJuIElDRV9FUlJfQkFE X1BUUjsNCj4gKw0KPiArCWlmICh0eF9jbXBsdG5xX2luZGV4ID4gR0xUQ0xBTl9DUV9DTlRYMF9N QVhfSU5ERVgpDQo+ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFNOw0KPiArDQo+ICsJLyogQ29weSBl YWNoIGR3b3JkIHNlcGFyYXRlbHkgdG8gaHcgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgSUNFX1RY X0NNUExUTlFfQ1RYX1NJWkVfRFdPUkRTOyBpKyspIHsNCj4gKwkJd3IzMihodywgR0xUQ0xBTl9D UV9DTlRYKGksIHR4X2NtcGx0bnFfaW5kZXgpLA0KPiArCQkgICAgICooKHUzMiAqKShpY2VfdHhf Y21wbHRucV9jdHggKyAoaSAqIHNpemVvZih1MzIpKSkpKTsNCj4gKw0KPiArCQlpY2VfZGVidWco aHcsIElDRV9EQkdfUUNUWCwgImNtcGx0bnFkYXRhWyVkXTogJTA4WFxuIiwgaSwNCj4gKwkJCSAg KigodTMyICopKGljZV90eF9jbXBsdG5xX2N0eCArIChpICogc2l6ZW9mKHUzMikpKSkpOw0KPiAr CX0NCj4gKw0KPiArCXJldHVybiBJQ0VfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLyogTEFOIFR4 IENvbXBsZXRpb24gUXVldWUgQ29udGV4dCAqLw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpY2Vf Y3R4X2VsZSBpY2VfdHhfY21wbHRucV9jdHhfaW5mb1tdID0gew0KPiArCQkJCSAgICAgICAvKiBG aWVsZAkJCVdpZHRoICAgTFNCICovDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfY21wbHRucV9j dHgsIGJhc2UsCQkJNTcsCTApLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2NtcGx0bnFfY3R4 LCBxX2xlbiwJCTE4LAk2NCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfY21wbHRucV9jdHgs IGdlbmVyYXRpb24sCQkxLAk5NiksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfY21wbHRucV9j dHgsIHdydF9wdHIsCQkyMiwJOTcpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2NtcGx0bnFf Y3R4LCBwZl9udW0sCQkzLAkxMjgpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2NtcGx0bnFf Y3R4LCB2bXZmX251bSwJCTEwLAkxMzEpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2NtcGx0 bnFfY3R4LCB2bXZmX3R5cGUsCQkyLAkxNDEpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2Nt cGx0bnFfY3R4LCB0cGhfZGVzY193ciwJCTEsCTE2MCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2Vf dHhfY21wbHRucV9jdHgsIGNwdWlkLAkJOCwJMTYxKSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90 eF9jbXBsdG5xX2N0eCwgY21wbHRuX2NhY2hlLAkJNTEyLAkxOTIpLA0KPiArCXsgMCB9DQo+ICt9 Ow0KPiArDQo+ICsvKioNCj4gKyAqIGljZV93cml0ZV90eF9jbXBsdG5xX2N0eA0KPiArICogQGh3 OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUNCj4gKyAqIEB0eF9jbXBsdG5xX2N0 eDogcG9pbnRlciB0byB0aGUgY29tcGxldGlvbiBxdWV1ZSBjb250ZXh0DQo+ICsgKiBAdHhfY21w bHRucV9pbmRleDogdGhlIGluZGV4IG9mIHRoZSBjb21wbGV0aW9uIHF1ZXVlDQo+ICsgKg0KPiAr ICogQ29udmVydHMgY29tcGxldGlvbiBxdWV1ZSBjb250ZXh0IGZyb20gc3BhcnNlIHRvIGRlbnNl IHN0cnVjdHVyZSBhbmQgdGhlbg0KPiArICogd3JpdGVzIGl0IHRvIGh3IHJlZ2lzdGVyIHNwYWNl DQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3dyaXRlX3R4X2NtcGx0bnFfY3R4 KHN0cnVjdCBpY2VfaHcgKmh3LA0KPiArCQkJIHN0cnVjdCBpY2VfdHhfY21wbHRucV9jdHggKnR4 X2NtcGx0bnFfY3R4LA0KPiArCQkJIHUzMiB0eF9jbXBsdG5xX2luZGV4KQ0KPiArew0KPiArCXU4 IGN0eF9idWZbSUNFX1RYX0NNUExUTlFfQ1RYX1NJWkVfRFdPUkRTICogc2l6ZW9mKHUzMildID0g eyAwIH07DQo+ICsNCj4gKwlpY2Vfc2V0X2N0eCgodTggKil0eF9jbXBsdG5xX2N0eCwgY3R4X2J1 ZiwgaWNlX3R4X2NtcGx0bnFfY3R4X2luZm8pOw0KPiArCXJldHVybiBpY2VfY29weV90eF9jbXBs dG5xX2N0eF90b19odyhodywgY3R4X2J1ZiwgdHhfY21wbHRucV9pbmRleCk7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICogaWNlX2NsZWFyX3R4X2NtcGx0bnFfY3R4DQo+ICsgKiBAaHc6IHBvaW50 ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICogQHR4X2NtcGx0bnFfaW5kZXg6IHRo ZSBpbmRleCBvZiB0aGUgY29tcGxldGlvbiBxdWV1ZSB0byBjbGVhcg0KPiArICoNCj4gKyAqIENs ZWFycyBUeCBjb21wbGV0aW9uIHF1ZXVlIGNvbnRleHQgaW4gaHcgcmVnaXN0ZXIgc3BhY2UNCj4g KyAqLw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfY2xlYXJfdHhfY21wbHRucV9jdHgoc3Ry dWN0IGljZV9odyAqaHcsIHUzMiB0eF9jbXBsdG5xX2luZGV4KQ0KPiArew0KPiArCXU4IGk7DQo+ ICsNCj4gKwlpZiAodHhfY21wbHRucV9pbmRleCA+IEdMVENMQU5fQ1FfQ05UWDBfTUFYX0lOREVY KQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCS8qIENsZWFyIGVhY2ggZHdv cmQgcmVnaXN0ZXIgc2VwYXJhdGVseSAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBJQ0VfVFhfQ01Q TFROUV9DVFhfU0laRV9EV09SRFM7IGkrKykNCj4gKwkJd3IzMihodywgR0xUQ0xBTl9DUV9DTlRY KGksIHR4X2NtcGx0bnFfaW5kZXgpLCAwKTsNCj4gKw0KPiArCXJldHVybiBJQ0VfU1VDQ0VTUzsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfY29weV90eF9kcmJlbGxfcV9jdHhfdG9faHcN Cj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlDQo+ICsgKiBAaWNl X3R4X2RyYmVsbF9xX2N0eDogcG9pbnRlciB0byB0aGUgZG9vcmJlbGwgcXVldWUgY29udGV4dA0K PiArICogQHR4X2RyYmVsbF9xX2luZGV4OiB0aGUgaW5kZXggb2YgdGhlIGRvb3JiZWxsIHF1ZXVl DQo+ICsgKg0KPiArICogQ29waWVzIGRvb3JiZWxsIHEgY29udGV4dCBmcm9tIGRlbnNlIHN0cnVj dHVyZSB0byBodyByZWdpc3RlciBzcGFjZQ0KPiArICovDQo+ICtzdGF0aWMgZW51bSBpY2Vfc3Rh dHVzDQo+ICtpY2VfY29weV90eF9kcmJlbGxfcV9jdHhfdG9faHcoc3RydWN0IGljZV9odyAqaHcs IHU4ICppY2VfdHhfZHJiZWxsX3FfY3R4LA0KPiArCQkJICAgICAgIHUzMiB0eF9kcmJlbGxfcV9p bmRleCkNCj4gK3sNCj4gKwl1OCBpOw0KPiArDQo+ICsJaWYgKCFpY2VfdHhfZHJiZWxsX3FfY3R4 KQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9CQURfUFRSOw0KPiArDQo+ICsJaWYgKHR4X2RyYmVsbF9x X2luZGV4ID4gUVRYX0NPTU1fREJMUV9EQkVMTF9NQVhfSU5ERVgpDQo+ICsJCXJldHVybiBJQ0Vf RVJSX1BBUkFNOw0KPiArDQo+ICsJLyogQ29weSBlYWNoIGR3b3JkIHNlcGFyYXRlbHkgdG8gaHcg Ki8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgSUNFX1RYX0RSQkVMTF9RX0NUWF9TSVpFX0RXT1JEUzsg aSsrKSB7DQo+ICsJCXdyMzIoaHcsIFFUWF9DT01NX0RCTFFfQ05UWChpLCB0eF9kcmJlbGxfcV9p bmRleCksDQo+ICsJCSAgICAgKigodTMyICopKGljZV90eF9kcmJlbGxfcV9jdHggKyAoaSAqIHNp emVvZih1MzIpKSkpKTsNCj4gKw0KPiArCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUUNUWCwgInR4 X2RyYmVsbF9xZGF0YVslZF06ICUwOFhcbiIsIGksDQo+ICsJCQkgICooKHUzMiAqKShpY2VfdHhf ZHJiZWxsX3FfY3R4ICsgKGkgKiBzaXplb2YodTMyKSkpKSk7DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIElDRV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvKiBMQU4gVHggRG9vcmJlbGwgUXVldWUg Q29udGV4dCBpbmZvICovDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGljZV9jdHhfZWxlIGljZV90 eF9kcmJlbGxfcV9jdHhfaW5mb1tdID0gew0KPiArCQkJCQkvKiBGaWVsZAkJV2lkdGggICBMU0Ig Ki8NCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90eF9kcmJlbGxfcV9jdHgsIGJhc2UsCQk1NywJMCks DQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfZHJiZWxsX3FfY3R4LCByaW5nX2xlbiwJCTEzLAk2 NCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfZHJiZWxsX3FfY3R4LCBwZl9udW0sCQkzLAk4 MCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfZHJiZWxsX3FfY3R4LCB2Zl9udW0sCQk4LAk4 NCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfZHJiZWxsX3FfY3R4LCB2bXZmX3R5cGUsCQky LAk5NCksDQo+ICsJSUNFX0NUWF9TVE9SRShpY2VfdHhfZHJiZWxsX3FfY3R4LCBjcHVpZCwJCTgs CTk2KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90eF9kcmJlbGxfcV9jdHgsIHRwaF9kZXNjX3Jk LAkJMSwJMTA0KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90eF9kcmJlbGxfcV9jdHgsIHRwaF9k ZXNjX3dyLAkJMSwJMTA4KSwNCj4gKwlJQ0VfQ1RYX1NUT1JFKGljZV90eF9kcmJlbGxfcV9jdHgs IGRiX3FfZW4sCQkxLAkxMTIpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2RyYmVsbF9xX2N0 eCwgcmRfaGVhZCwJCTEzLAkxMjgpLA0KPiArCUlDRV9DVFhfU1RPUkUoaWNlX3R4X2RyYmVsbF9x X2N0eCwgcmRfdGFpbCwJCTEzLAkxNDQpLA0KPiArCXsgMCB9DQo+ICt9Ow0KPiArDQo+ICsvKioN Cj4gKyAqIGljZV93cml0ZV90eF9kcmJlbGxfcV9jdHgNCj4gKyAqIEBodzogcG9pbnRlciB0byB0 aGUgaGFyZHdhcmUgc3RydWN0dXJlDQo+ICsgKiBAdHhfZHJiZWxsX3FfY3R4OiBwb2ludGVyIHRv IHRoZSBkb29yYmVsbCBxdWV1ZSBjb250ZXh0DQo+ICsgKiBAdHhfZHJiZWxsX3FfaW5kZXg6IHRo ZSBpbmRleCBvZiB0aGUgZG9vcmJlbGwgcXVldWUNCj4gKyAqDQo+ICsgKiBDb252ZXJ0cyBkb29y YmVsbCBxdWV1ZSBjb250ZXh0IGZyb20gc3BhcnNlIHRvIGRlbnNlIHN0cnVjdHVyZSBhbmQgdGhl bg0KPiArICogd3JpdGVzIGl0IHRvIGh3IHJlZ2lzdGVyIHNwYWNlDQo+ICsgKi8NCj4gK2VudW0g aWNlX3N0YXR1cw0KPiAraWNlX3dyaXRlX3R4X2RyYmVsbF9xX2N0eChzdHJ1Y3QgaWNlX2h3ICpo dywNCj4gKwkJCSAgc3RydWN0IGljZV90eF9kcmJlbGxfcV9jdHggKnR4X2RyYmVsbF9xX2N0eCwN Cj4gKwkJCSAgdTMyIHR4X2RyYmVsbF9xX2luZGV4KQ0KPiArew0KPiArCXU4IGN0eF9idWZbSUNF X1RYX0RSQkVMTF9RX0NUWF9TSVpFX0RXT1JEUyAqIHNpemVvZih1MzIpXSA9IHsgMCB9Ow0KPiAr DQo+ICsJaWNlX3NldF9jdHgoKHU4ICopdHhfZHJiZWxsX3FfY3R4LCBjdHhfYnVmLCBpY2VfdHhf ZHJiZWxsX3FfY3R4X2luZm8pOw0KPiArCXJldHVybiBpY2VfY29weV90eF9kcmJlbGxfcV9jdHhf dG9faHcoaHcsIGN0eF9idWYsIHR4X2RyYmVsbF9xX2luZGV4KTsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgKiBpY2VfY2xlYXJfdHhfZHJiZWxsX3FfY3R4DQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8g dGhlIGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICogQHR4X2RyYmVsbF9xX2luZGV4OiB0aGUgaW5k ZXggb2YgdGhlIGRvb3JiZWxsIHF1ZXVlIHRvIGNsZWFyDQo+ICsgKg0KPiArICogQ2xlYXJzIGRv b3JiZWxsIHF1ZXVlIGNvbnRleHQgaW4gaHcgcmVnaXN0ZXIgc3BhY2UNCj4gKyAqLw0KPiArZW51 bSBpY2Vfc3RhdHVzDQo+ICtpY2VfY2xlYXJfdHhfZHJiZWxsX3FfY3R4KHN0cnVjdCBpY2VfaHcg Kmh3LCB1MzIgdHhfZHJiZWxsX3FfaW5kZXgpDQo+ICt7DQo+ICsJdTggaTsNCj4gKw0KPiArCWlm ICh0eF9kcmJlbGxfcV9pbmRleCA+IFFUWF9DT01NX0RCTFFfREJFTExfTUFYX0lOREVYKQ0KPiAr CQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCS8qIENsZWFyIGVhY2ggZHdvcmQgcmVn aXN0ZXIgc2VwYXJhdGVseSAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBJQ0VfVFhfRFJCRUxMX1Ff Q1RYX1NJWkVfRFdPUkRTOyBpKyspDQo+ICsJCXdyMzIoaHcsIFFUWF9DT01NX0RCTFFfQ05UWChp LCB0eF9kcmJlbGxfcV9pbmRleCksIDApOw0KPiArDQo+ICsJcmV0dXJuIElDRV9TVUNDRVNTOw0K PiArfQ0KPiArI2VuZGlmIC8qICFOT19VTlVTRURfQ1RYX0NPREUgfHwgQUVfRFJJVkVSICovDQo+ ICsNCj4gKy8qKg0KPiArICogaWNlX2RlYnVnX2NxDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhl IGhhcmR3YXJlIHN0cnVjdHVyZQ0KPiArICogQG1hc2s6IGRlYnVnIG1hc2sNCj4gKyAqIEBkZXNj OiBwb2ludGVyIHRvIGNvbnRyb2wgcXVldWUgZGVzY3JpcHRvcg0KPiArICogQGJ1ZjogcG9pbnRl ciB0byBjb21tYW5kIGJ1ZmZlcg0KPiArICogQGJ1Zl9sZW46IG1heCBsZW5ndGggb2YgYnVmDQo+ ICsgKg0KPiArICogRHVtcHMgZGVidWcgbG9nIGFib3V0IGNvbnRyb2wgY29tbWFuZCB3aXRoIGRl c2NyaXB0b3IgY29udGVudHMuDQo+ICsgKi8NCj4gK3ZvaWQNCj4gK2ljZV9kZWJ1Z19jcShzdHJ1 Y3QgaWNlX2h3ICpodywgdTMyIG1hc2ssIHZvaWQgKmRlc2MsIHZvaWQgKmJ1ZiwgdTE2IGJ1Zl9s ZW4pDQo+ICt7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjICpjcV9kZXNjID0gKHN0cnVjdCBpY2Vf YXFfZGVzYyAqKWRlc2M7DQo+ICsJdTE2IGxlbjsNCj4gKw0KPiArCWlmICghKG1hc2sgJiBody0+ ZGVidWdfbWFzaykpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmICghZGVzYykNCj4gKwkJcmV0 dXJuOw0KPiArDQo+ICsJbGVuID0gTEUxNl9UT19DUFUoY3FfZGVzYy0+ZGF0YWxlbik7DQo+ICsN Cj4gKwlpY2VfZGVidWcoaHcsIG1hc2ssDQo+ICsJCSAgIkNRIENNRDogb3Bjb2RlIDB4JTA0WCwg ZmxhZ3MgMHglMDRYLCBkYXRhbGVuIDB4JTA0WCwgcmV0dmFsIDB4JTA0WFxuIiwNCj4gKwkJICBM RTE2X1RPX0NQVShjcV9kZXNjLT5vcGNvZGUpLA0KPiArCQkgIExFMTZfVE9fQ1BVKGNxX2Rlc2Mt PmZsYWdzKSwNCj4gKwkJICBMRTE2X1RPX0NQVShjcV9kZXNjLT5kYXRhbGVuKSwgTEUxNl9UT19D UFUoY3FfZGVzYy0+cmV0dmFsKSk7DQo+ICsJaWNlX2RlYnVnKGh3LCBtYXNrLCAiXHRjb29raWUg KGgsbCkgMHglMDhYIDB4JTA4WFxuIiwNCj4gKwkJICBMRTMyX1RPX0NQVShjcV9kZXNjLT5jb29r aWVfaGlnaCksDQo+ICsJCSAgTEUzMl9UT19DUFUoY3FfZGVzYy0+Y29va2llX2xvdykpOw0KPiAr CWljZV9kZWJ1ZyhodywgbWFzaywgIlx0cGFyYW0gKDAsMSkgIDB4JTA4WCAweCUwOFhcbiIsDQo+ ICsJCSAgTEUzMl9UT19DUFUoY3FfZGVzYy0+cGFyYW1zLmdlbmVyaWMucGFyYW0wKSwNCj4gKwkJ ICBMRTMyX1RPX0NQVShjcV9kZXNjLT5wYXJhbXMuZ2VuZXJpYy5wYXJhbTEpKTsNCj4gKwlpY2Vf ZGVidWcoaHcsIG1hc2ssICJcdGFkZHIgKGgsbCkgICAweCUwOFggMHglMDhYXG4iLA0KPiArCQkg IExFMzJfVE9fQ1BVKGNxX2Rlc2MtPnBhcmFtcy5nZW5lcmljLmFkZHJfaGlnaCksDQo+ICsJCSAg TEUzMl9UT19DUFUoY3FfZGVzYy0+cGFyYW1zLmdlbmVyaWMuYWRkcl9sb3cpKTsNCj4gKwlpZiAo YnVmICYmIGNxX2Rlc2MtPmRhdGFsZW4gIT0gMCkgew0KPiArCQlpY2VfZGVidWcoaHcsIG1hc2ss ICJCdWZmZXI6XG4iKTsNCj4gKwkJaWYgKGJ1Zl9sZW4gPCBsZW4pDQo+ICsJCQlsZW4gPSBidWZf bGVuOw0KPiArDQo+ICsJCWljZV9kZWJ1Z19hcnJheShodywgbWFzaywgMTYsIDEsICh1OCAqKWJ1 ZiwgbGVuKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gKw0KPiArLyogRlcgQWRtaW4gUXVldWUgY29t bWFuZCB3cmFwcGVycyAqLw0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9hcV9zZW5kX2NtZCAtIHNl bmQgRlcgQWRtaW4gUXVldWUgY29tbWFuZCB0byBGVyBBZG1pbiBRdWV1ZQ0KPiArICogQGh3OiBw b2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QNCj4gKyAqIEBkZXNjOiBkZXNjcmlwdG9yIGRlc2NyaWJp bmcgdGhlIGNvbW1hbmQNCj4gKyAqIEBidWY6IGJ1ZmZlciB0byB1c2UgZm9yIGluZGlyZWN0IGNv bW1hbmRzIChOVUxMIGZvciBkaXJlY3QgY29tbWFuZHMpDQo+ICsgKiBAYnVmX3NpemU6IHNpemUg b2YgYnVmZmVyIGZvciBpbmRpcmVjdCBjb21tYW5kcyAoMCBmb3IgZGlyZWN0IGNvbW1hbmRzKQ0K PiArICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUNCj4gKyAqDQo+ ICsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2VuZCBGVyBBZG1pbiBRdWV1ZSBjb21tYW5kcyB0byB0 aGUgRlcgQWRtaW4gUXVldWUuDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2Fx X3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxX2Rlc2MgKmRlc2MsIHZv aWQgKmJ1ZiwNCj4gKwkJdTE2IGJ1Zl9zaXplLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZCkNCj4gK3sN Cj4gKwlyZXR1cm4gaWNlX3NxX3NlbmRfY21kKGh3LCAmaHctPmFkbWlucSwgZGVzYywgYnVmLCBi dWZfc2l6ZSwgY2QpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9hcV9nZXRfZndfdmVy DQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdA0KPiArICogQGNkOiBwb2ludGVy IHRvIGNvbW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUgb3IgTlVMTA0KPiArICoNCj4gKyAqIEdldCB0 aGUgZmlybXdhcmUgdmVyc2lvbiAoMHgwMDAxKSBmcm9tIHRoZSBhZG1pbiBxdWV1ZSBjb21tYW5k cw0KPiArICovDQo+ICtlbnVtIGljZV9zdGF0dXMgaWNlX2FxX2dldF9md192ZXIoc3RydWN0IGlj ZV9odyAqaHcsIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFj X2dldF92ZXIgKnJlc3A7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsJZW51bSBp Y2Vfc3RhdHVzIHN0YXR1czsNCj4gKw0KPiArCXJlc3AgPSAmZGVzYy5wYXJhbXMuZ2V0X3ZlcjsN Cj4gKw0KPiArCWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBpY2VfYXFjX29w Y19nZXRfdmVyKTsNCj4gKw0KPiArCXN0YXR1cyA9IGljZV9hcV9zZW5kX2NtZChodywgJmRlc2Ms IE5VTEwsIDAsIGNkKTsNCj4gKw0KPiArCWlmICghc3RhdHVzKSB7DQo+ICsJCWh3LT5md19icmFu Y2ggPSByZXNwLT5md19icmFuY2g7DQo+ICsJCWh3LT5md19tYWpfdmVyID0gcmVzcC0+ZndfbWFq b3I7DQo+ICsJCWh3LT5md19taW5fdmVyID0gcmVzcC0+ZndfbWlub3I7DQo+ICsJCWh3LT5md19w YXRjaCA9IHJlc3AtPmZ3X3BhdGNoOw0KPiArCQlody0+ZndfYnVpbGQgPSBMRTMyX1RPX0NQVShy ZXNwLT5md19idWlsZCk7DQo+ICsJCWh3LT5hcGlfYnJhbmNoID0gcmVzcC0+YXBpX2JyYW5jaDsN Cj4gKwkJaHctPmFwaV9tYWpfdmVyID0gcmVzcC0+YXBpX21ham9yOw0KPiArCQlody0+YXBpX21p bl92ZXIgPSByZXNwLT5hcGlfbWlub3I7DQo+ICsJCWh3LT5hcGlfcGF0Y2ggPSByZXNwLT5hcGlf cGF0Y2g7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArDQo+ ICsvKioNCj4gKyAqIGljZV9hcV9xX3NodXRkb3duDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhl IGh3IHN0cnVjdA0KPiArICogQHVubG9hZGluZzogaXMgdGhlIGRyaXZlciB1bmxvYWRpbmcgaXRz ZWxmDQo+ICsgKg0KPiArICogVGVsbCB0aGUgRmlybXdhcmUgdGhhdCB3ZSdyZSBzaHV0dGluZyBk b3duIHRoZSBBZG1pblEgYW5kIHdoZXRoZXINCj4gKyAqIG9yIG5vdCB0aGUgZHJpdmVyIGlzIHVu bG9hZGluZyBhcyB3ZWxsICgweDAwMDMpLg0KPiArICovDQo+ICtlbnVtIGljZV9zdGF0dXMgaWNl X2FxX3Ffc2h1dGRvd24oc3RydWN0IGljZV9odyAqaHcsIGJvb2wgdW5sb2FkaW5nKQ0KPiArew0K PiArCXN0cnVjdCBpY2VfYXFjX3Ffc2h1dGRvd24gKmNtZDsNCj4gKwlzdHJ1Y3QgaWNlX2FxX2Rl c2MgZGVzYzsNCj4gKw0KPiArCWNtZCA9ICZkZXNjLnBhcmFtcy5xX3NodXRkb3duOw0KPiArDQo+ ICsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoJmRlc2MsIGljZV9hcWNfb3BjX3Ffc2h1 dGRvd24pOw0KPiArDQo+ICsJaWYgKHVubG9hZGluZykNCj4gKwkJY21kLT5kcml2ZXJfdW5sb2Fk aW5nID0gQ1BVX1RPX0xFMzIoSUNFX0FRQ19EUklWRVJfVU5MT0FESU5HKTsNCj4gKw0KPiArCXJl dHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZkZXNjLCBOVUxMLCAwLCBOVUxMKTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiBpY2VfYXFfcmVxX3Jlcw0KPiArICogQGh3OiBwb2ludGVyIHRvIHRo ZSBodyBzdHJ1Y3QNCj4gKyAqIEByZXM6IHJlc291cmNlIGlkDQo+ICsgKiBAYWNjZXNzOiBhY2Nl c3MgdHlwZQ0KPiArICogQHNkcF9udW1iZXI6IHJlc291cmNlIG51bWJlcg0KPiArICogQHRpbWVv dXQ6IHRoZSBtYXhpbXVtIHRpbWUgaW4gbXMgdGhhdCB0aGUgZHJpdmVyIG1heSBob2xkIHRoZSBy ZXNvdXJjZQ0KPiArICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUg b3IgTlVMTA0KPiArICoNCj4gKyAqIFJlcXVlc3RzIGNvbW1vbiByZXNvdXJjZSB1c2luZyB0aGUg YWRtaW4gcXVldWUgY29tbWFuZHMgKDB4MDAwOCkuDQo+ICsgKiBXaGVuIGF0dGVtcHRpbmcgdG8g YWNxdWlyZSB0aGUgR2xvYmFsIENvbmZpZyBMb2NrLCB0aGUgZHJpdmVyIGNhbg0KPiArICogbGVh cm4gb2YgdGhyZWUgc3RhdGVzOg0KPiArICogIDEpIElDRV9TVUNDRVNTIC0gICAgICAgIGFjcXVp cmVkIGxvY2ssIGFuZCBjYW4gcGVyZm9ybSBkb3dubG9hZCBwYWNrYWdlDQo+ICsgKiAgMikgSUNF X0VSUl9BUV9FUlJPUiAtICAgZGlkIG5vdCBnZXQgbG9jaywgZHJpdmVyIHNob3VsZCBmYWlsIHRv IGxvYWQNCj4gKyAqICAzKSBJQ0VfRVJSX0FRX05PX1dPUksgLSBkaWQgbm90IGdldCBsb2NrLCBi dXQgYW5vdGhlciBkcml2ZXIgaGFzDQo+ICsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vj Y2Vzc2Z1bGx5IGRvd25sb2FkZWQgdGhlIHBhY2thZ2U7IHRoZSBkcml2ZXIgZG9lcw0KPiArICog ICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXZlIHRvIGRvd25sb2FkIHRoZSBwYWNrYWdl IGFuZCBjYW4gY29udGludWUNCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5n DQo+ICsgKg0KPiArICogTm90ZSB0aGF0IGlmIHRoZSBjYWxsZXIgaXMgaW4gYW4gYWNxdWlyZSBs b2NrLCBwZXJmb3JtIGFjdGlvbiwgcmVsZWFzZSBsb2NrDQo+ICsgKiBwaGFzZSBvZiBvcGVyYXRp b24sIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIEZXIG1heSBkZXRlY3QgYSB0aW1lb3V0IGFuZCBp c3N1ZQ0KPiArICogYSBDT1JFUi4gSW4gdGhpcyBjYXNlLCB0aGUgZHJpdmVyIHdpbGwgcmVjZWl2 ZSBhIENPUkVSIGludGVycnVwdCBhbmQgd2lsbA0KPiArICogaGF2ZSB0byBkZXRlcm1pbmUgaXRz IGNhdXNlLiBUaGUgY2FsbGluZyB0aHJlYWQgdGhhdCBpcyBoYW5kbGluZyB0aGlzIGZsb3cNCj4g KyAqIHdpbGwgbGlrZWx5IGdldCBhbiBlcnJvciBwcm9wYWdhdGVkIGJhY2sgdG8gaXQgaW5kaWNh dGluZyB0aGUgRG93bmxvYWQNCj4gKyAqIFBhY2thZ2UsIFVwZGF0ZSBQYWNrYWdlIG9yIHRoZSBS ZWxlYXNlIFJlc291cmNlIEFRIGNvbW1hbmRzIHRpbWVkIG91dC4NCj4gKyAqLw0KPiArc3RhdGlj IGVudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX3JlcV9yZXMoc3RydWN0IGljZV9odyAqaHcsIGVu dW0gaWNlX2FxX3Jlc19pZHMgcmVzLA0KPiArCSAgICAgICBlbnVtIGljZV9hcV9yZXNfYWNjZXNz X3R5cGUgYWNjZXNzLCB1OCBzZHBfbnVtYmVyLCB1MzIgKnRpbWVvdXQsDQo+ICsJICAgICAgIHN0 cnVjdCBpY2Vfc3FfY2QgKmNkKQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFjX3JlcV9yZXMgKmNt ZF9yZXNwOw0KPiArCXN0cnVjdCBpY2VfYXFfZGVzYyBkZXNjOw0KPiArCWVudW0gaWNlX3N0YXR1 cyBzdGF0dXM7DQo+ICsNCj4gKwlpY2VfZGVidWcoaHcsIElDRV9EQkdfVFJBQ0UsICJpY2VfYXFf cmVxX3JlcyIpOw0KPiArDQo+ICsJY21kX3Jlc3AgPSAmZGVzYy5wYXJhbXMucmVzX293bmVyOw0K PiArDQo+ICsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoJmRlc2MsIGljZV9hcWNfb3Bj X3JlcV9yZXMpOw0KPiArDQo+ICsJY21kX3Jlc3AtPnJlc19pZCA9IENQVV9UT19MRTE2KHJlcyk7 DQo+ICsJY21kX3Jlc3AtPmFjY2Vzc190eXBlID0gQ1BVX1RPX0xFMTYoYWNjZXNzKTsNCj4gKwlj bWRfcmVzcC0+cmVzX251bWJlciA9IENQVV9UT19MRTMyKHNkcF9udW1iZXIpOw0KPiArCWNtZF9y ZXNwLT50aW1lb3V0ID0gQ1BVX1RPX0xFMzIoKnRpbWVvdXQpOw0KPiArCSp0aW1lb3V0ID0gMDsN Cj4gKw0KPiArCXN0YXR1cyA9IGljZV9hcV9zZW5kX2NtZChodywgJmRlc2MsIE5VTEwsIDAsIGNk KTsNCj4gKw0KPiArCS8qIFRoZSBjb21wbGV0aW9uIHNwZWNpZmllcyB0aGUgbWF4aW11bSB0aW1l IGluIG1zIHRoYXQgdGhlIGRyaXZlcg0KPiArCSAqIG1heSBob2xkIHRoZSByZXNvdXJjZSBpbiB0 aGUgVGltZW91dCBmaWVsZC4NCj4gKwkgKi8NCj4gKw0KPiArCS8qIEdsb2JhbCBjb25maWcgbG9j ayByZXNwb25zZSB1dGlsaXplcyBhbiBhZGRpdGlvbmFsIHN0YXR1cyBmaWVsZC4NCj4gKwkgKg0K PiArCSAqIElmIHRoZSBHbG9iYWwgY29uZmlnIGxvY2sgcmVzb3VyY2UgaXMgaGVsZCBieSBzb21l IG90aGVyIGRyaXZlciwgdGhlDQo+ICsJICogY29tbWFuZCBjb21wbGV0ZXMgd2l0aCBJQ0VfQVFf UkVTX0dMQkxfSU5fUFJPRyBpbiB0aGUgc3RhdHVzIGZpZWxkDQo+ICsJICogYW5kIHRoZSB0aW1l b3V0IGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSB0aW1lIHRoZSBjdXJyZW50IG93bmVyDQo+ ICsJICogb2YgdGhlIHJlc291cmNlIGhhcyB0byBmcmVlIGl0Lg0KPiArCSAqLw0KPiArCWlmIChy ZXMgPT0gSUNFX0dMT0JBTF9DRkdfTE9DS19SRVNfSUQpIHsNCj4gKwkJaWYgKExFMTZfVE9fQ1BV KGNtZF9yZXNwLT5zdGF0dXMpID09IElDRV9BUV9SRVNfR0xCTF9TVUNDRVNTKSB7DQo+ICsJCQkq dGltZW91dCA9IExFMzJfVE9fQ1BVKGNtZF9yZXNwLT50aW1lb3V0KTsNCj4gKwkJCXJldHVybiBJ Q0VfU1VDQ0VTUzsNCj4gKwkJfSBlbHNlIGlmIChMRTE2X1RPX0NQVShjbWRfcmVzcC0+c3RhdHVz KSA9PQ0KPiArCQkJICAgSUNFX0FRX1JFU19HTEJMX0lOX1BST0cpIHsNCj4gKwkJCSp0aW1lb3V0 ID0gTEUzMl9UT19DUFUoY21kX3Jlc3AtPnRpbWVvdXQpOw0KPiArCQkJcmV0dXJuIElDRV9FUlJf QVFfRVJST1I7DQo+ICsJCX0gZWxzZSBpZiAoTEUxNl9UT19DUFUoY21kX3Jlc3AtPnN0YXR1cykg PT0NCj4gKwkJCSAgIElDRV9BUV9SRVNfR0xCTF9ET05FKSB7DQo+ICsJCQlyZXR1cm4gSUNFX0VS Ul9BUV9OT19XT1JLOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogaW52YWxpZCBGVyByZXNwb25zZSwg Zm9yY2UgYSB0aW1lb3V0IGltbWVkaWF0ZWx5ICovDQo+ICsJCSp0aW1lb3V0ID0gMDsNCj4gKwkJ cmV0dXJuIElDRV9FUlJfQVFfRVJST1I7DQo+ICsJfQ0KPiArDQo+ICsJLyogSWYgdGhlIHJlc291 cmNlIGlzIGhlbGQgYnkgc29tZSBvdGhlciBkcml2ZXIsIHRoZSBjb21tYW5kIGNvbXBsZXRlcw0K PiArCSAqIHdpdGggYSBidXN5IHJldHVybiB2YWx1ZSBhbmQgdGhlIHRpbWVvdXQgZmllbGQgaW5k aWNhdGVzIHRoZSBtYXhpbXVtDQo+ICsJICogdGltZSB0aGUgY3VycmVudCBvd25lciBvZiB0aGUg cmVzb3VyY2UgaGFzIHRvIGZyZWUgaXQuDQo+ICsJICovDQo+ICsJaWYgKCFzdGF0dXMgfHwgaHct PmFkbWlucS5zcV9sYXN0X3N0YXR1cyA9PSBJQ0VfQVFfUkNfRUJVU1kpDQo+ICsJCSp0aW1lb3V0 ID0gTEUzMl9UT19DUFUoY21kX3Jlc3AtPnRpbWVvdXQpOw0KPiArDQo+ICsJcmV0dXJuIHN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfYXFfcmVsZWFzZV9yZXMNCj4gKyAqIEBo dzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0DQo+ICsgKiBAcmVzOiByZXNvdXJjZSBpZA0KPiAr ICogQHNkcF9udW1iZXI6IHJlc291cmNlIG51bWJlcg0KPiArICogQGNkOiBwb2ludGVyIHRvIGNv bW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUgb3IgTlVMTA0KPiArICoNCj4gKyAqIHJlbGVhc2UgY29t bW9uIHJlc291cmNlIHVzaW5nIHRoZSBhZG1pbiBxdWV1ZSBjb21tYW5kcyAoMHgwMDA5KQ0KPiAr ICovDQo+ICtzdGF0aWMgZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfYXFfcmVsZWFzZV9yZXMoc3Ry dWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19pZHMgcmVzLCB1OCBzZHBfbnVtYmVyLA0K PiArCQkgICBzdHJ1Y3QgaWNlX3NxX2NkICpjZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaWNlX2FxY19y ZXFfcmVzICpjbWQ7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsNCj4gKwlpY2Vf ZGVidWcoaHcsIElDRV9EQkdfVFJBQ0UsICJpY2VfYXFfcmVsZWFzZV9yZXMiKTsNCj4gKw0KPiAr CWNtZCA9ICZkZXNjLnBhcmFtcy5yZXNfb3duZXI7DQo+ICsNCj4gKwlpY2VfZmlsbF9kZmx0X2Rp cmVjdF9jbWRfZGVzYygmZGVzYywgaWNlX2FxY19vcGNfcmVsZWFzZV9yZXMpOw0KPiArDQo+ICsJ Y21kLT5yZXNfaWQgPSBDUFVfVE9fTEUxNihyZXMpOw0KPiArCWNtZC0+cmVzX251bWJlciA9IENQ VV9UT19MRTMyKHNkcF9udW1iZXIpOw0KPiArDQo+ICsJcmV0dXJuIGljZV9hcV9zZW5kX2NtZCho dywgJmRlc2MsIE5VTEwsIDAsIGNkKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfYWNx dWlyZV9yZXMNCj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlDQo+ICsgKiBA cmVzOiByZXNvdXJjZSBpZA0KPiArICogQGFjY2VzczogYWNjZXNzIHR5cGUgKHJlYWQgb3Igd3Jp dGUpDQo+ICsgKiBAdGltZW91dDogdGltZW91dCBpbiBtaWxsaXNlY29uZHMNCj4gKyAqDQo+ICsg KiBUaGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBhY3F1aXJlIHRoZSBvd25lcnNoaXAgb2Yg YSByZXNvdXJjZS4NCj4gKyAqLw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfYWNxdWlyZV9y ZXMoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19pZHMgcmVzLA0KPiArCQllbnVt IGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzLCB1MzIgdGltZW91dCkNCj4gK3sNCj4gKyNk ZWZpbmUgSUNFX1JFU19QT0xMSU5HX0RFTEFZX01TCTEwDQo+ICsJdTMyIGRlbGF5ID0gSUNFX1JF U19QT0xMSU5HX0RFTEFZX01TOw0KPiArCXUzMiB0aW1lX2xlZnQgPSB0aW1lb3V0Ow0KPiArCWVu dW0gaWNlX3N0YXR1cyBzdGF0dXM7DQo+ICsNCj4gKwlpY2VfZGVidWcoaHcsIElDRV9EQkdfVFJB Q0UsICJpY2VfYWNxdWlyZV9yZXMiKTsNCj4gKw0KPiArCXN0YXR1cyA9IGljZV9hcV9yZXFfcmVz KGh3LCByZXMsIGFjY2VzcywgMCwgJnRpbWVfbGVmdCwgTlVMTCk7DQo+ICsNCj4gKwkvKiBBIHJl dHVybiBjb2RlIG9mIElDRV9FUlJfQVFfTk9fV09SSyBtZWFucyB0aGF0IGFub3RoZXIgZHJpdmVy IGhhcw0KPiArCSAqIHByZXZpb3VzbHkgYWNxdWlyZWQgdGhlIHJlc291cmNlIGFuZCBwZXJmb3Jt ZWQgYW55IG5lY2Vzc2FyeSB1cGRhdGVzOw0KPiArCSAqIGluIHRoaXMgY2FzZSB0aGUgY2FsbGVy IGRvZXMgbm90IG9idGFpbiB0aGUgcmVzb3VyY2UgYW5kIGhhcyBubw0KPiArCSAqIGZ1cnRoZXIg d29yayB0byBkby4NCj4gKwkgKi8NCj4gKwlpZiAoc3RhdHVzID09IElDRV9FUlJfQVFfTk9fV09S SykNCj4gKwkJZ290byBpY2VfYWNxdWlyZV9yZXNfZXhpdDsNCj4gKw0KPiArCWlmIChzdGF0dXMp DQo+ICsJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19SRVMsDQo+ICsJCQkgICJyZXNvdXJjZSAlZCBh Y3F1aXJlIHR5cGUgJWQgZmFpbGVkLlxuIiwgcmVzLCBhY2Nlc3MpOw0KPiArDQo+ICsJLyogSWYg bmVjZXNzYXJ5LCBwb2xsIHVudGlsIHRoZSBjdXJyZW50IGxvY2sgb3duZXIgdGltZW91dHMgKi8N Cj4gKwl0aW1lb3V0ID0gdGltZV9sZWZ0Ow0KPiArCXdoaWxlIChzdGF0dXMgJiYgdGltZW91dCAm JiB0aW1lX2xlZnQpIHsNCj4gKwkJaWNlX21zZWNfZGVsYXkoZGVsYXksIHRydWUpOw0KPiArCQl0 aW1lb3V0ID0gKHRpbWVvdXQgPiBkZWxheSkgPyB0aW1lb3V0IC0gZGVsYXkgOiAwOw0KPiArCQlz dGF0dXMgPSBpY2VfYXFfcmVxX3JlcyhodywgcmVzLCBhY2Nlc3MsIDAsICZ0aW1lX2xlZnQsIE5V TEwpOw0KPiArDQo+ICsJCWlmIChzdGF0dXMgPT0gSUNFX0VSUl9BUV9OT19XT1JLKQ0KPiArCQkJ LyogbG9jayBmcmVlLCBidXQgbm8gd29yayB0byBkbyAqLw0KPiArCQkJYnJlYWs7DQo+ICsNCj4g KwkJaWYgKCFzdGF0dXMpDQo+ICsJCQkvKiBsb2NrIGFjcXVpcmVkICovDQo+ICsJCQlicmVhazsN Cj4gKwl9DQo+ICsJaWYgKHN0YXR1cyAmJiBzdGF0dXMgIT0gSUNFX0VSUl9BUV9OT19XT1JLKQ0K PiArCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfUkVTLCAicmVzb3VyY2UgYWNxdWlyZSB0aW1lZCBv dXQuXG4iKTsNCj4gKw0KPiAraWNlX2FjcXVpcmVfcmVzX2V4aXQ6DQo+ICsJaWYgKHN0YXR1cyA9 PSBJQ0VfRVJSX0FRX05PX1dPUkspIHsNCj4gKwkJaWYgKGFjY2VzcyA9PSBJQ0VfUkVTX1dSSVRF KQ0KPiArCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1JFUywNCj4gKwkJCQkgICJyZXNvdXJjZSBp bmRpY2F0ZXMgbm8gd29yayB0byBkby5cbiIpOw0KPiArCQllbHNlDQo+ICsJCQlpY2VfZGVidWco aHcsIElDRV9EQkdfUkVTLA0KPiArCQkJCSAgIldhcm5pbmc6IElDRV9FUlJfQVFfTk9fV09SSyBu b3QgZXhwZWN0ZWRcbiIpOw0KPiArCX0NCj4gKwlyZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAqIGljZV9yZWxlYXNlX3Jlcw0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBI VyBzdHJ1Y3R1cmUNCj4gKyAqIEByZXM6IHJlc291cmNlIGlkDQo+ICsgKg0KPiArICogVGhpcyBm dW5jdGlvbiB3aWxsIHJlbGVhc2UgYSByZXNvdXJjZSB1c2luZyB0aGUgcHJvcGVyIEFkbWluIENv bW1hbmQuDQo+ICsgKi8NCj4gK3ZvaWQgaWNlX3JlbGVhc2VfcmVzKHN0cnVjdCBpY2VfaHcgKmh3 LCBlbnVtIGljZV9hcV9yZXNfaWRzIHJlcykNCj4gK3sNCj4gKwllbnVtIGljZV9zdGF0dXMgc3Rh dHVzOw0KPiArCXUzMiB0b3RhbF9kZWxheSA9IDA7DQo+ICsNCj4gKwlpY2VfZGVidWcoaHcsIElD RV9EQkdfVFJBQ0UsICJpY2VfcmVsZWFzZV9yZXMiKTsNCj4gKw0KPiArCXN0YXR1cyA9IGljZV9h cV9yZWxlYXNlX3JlcyhodywgcmVzLCAwLCBOVUxMKTsNCj4gKw0KPiArCS8qIHRoZXJlIGFyZSBz b21lIHJhcmUgY2FzZXMgd2hlbiB0cnlpbmcgdG8gcmVsZWFzZSB0aGUgcmVzb3VyY2UNCj4gKwkg KiByZXN1bHRzIGluIGFuIGFkbWluIFEgdGltZW91dCwgc28gaGFuZGxlIHRoZW0gY29ycmVjdGx5 DQo+ICsJICovDQo+ICsJd2hpbGUgKChzdGF0dXMgPT0gSUNFX0VSUl9BUV9USU1FT1VUKSAmJg0K PiArCSAgICAgICAodG90YWxfZGVsYXkgPCBody0+YWRtaW5xLnNxX2NtZF90aW1lb3V0KSkgew0K PiArCQlpY2VfbXNlY19kZWxheSgxLCB0cnVlKTsNCj4gKwkJc3RhdHVzID0gaWNlX2FxX3JlbGVh c2VfcmVzKGh3LCByZXMsIDAsIE5VTEwpOw0KPiArCQl0b3RhbF9kZWxheSsrOw0KPiArCX0NCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfYXFfYWxsb2NfZnJlZV9yZXMgLSBjb21tYW5kIHRv IGFsbG9jYXRlL2ZyZWUgcmVzb3VyY2VzDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0 cnVjdA0KPiArICogQG51bV9lbnRyaWVzOiBudW1iZXIgb2YgcmVzb3VyY2UgZW50cmllcyBpbiBi dWZmZXINCj4gKyAqIEBidWY6IEluZGlyZWN0IGJ1ZmZlciB0byBob2xkIGRhdGEgcGFyYW1ldGVy cyBhbmQgcmVzcG9uc2UNCj4gKyAqIEBidWZfc2l6ZTogc2l6ZSBvZiBidWZmZXIgZm9yIGluZGly ZWN0IGNvbW1hbmRzDQo+ICsgKiBAb3BjOiBwYXNzIGluIHRoZSBjb21tYW5kIG9wY29kZQ0KPiAr ICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUgb3IgTlVMTA0KPiAr ICoNCj4gKyAqIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvY2F0ZS9mcmVlIHJlc291cmNlcyB1c2lu ZyB0aGUgYWRtaW4gcXVldWUgY29tbWFuZHMNCj4gKyAqLw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ ICtpY2VfYXFfYWxsb2NfZnJlZV9yZXMoc3RydWN0IGljZV9odyAqaHcsIHUxNiBudW1fZW50cmll cywNCj4gKwkJICAgICAgc3RydWN0IGljZV9hcWNfYWxsb2NfZnJlZV9yZXNfZWxlbSAqYnVmLCB1 MTYgYnVmX3NpemUsDQo+ICsJCSAgICAgIGVudW0gaWNlX2FkbWlucV9vcGMgb3BjLCBzdHJ1Y3Qg aWNlX3NxX2NkICpjZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgaWNlX2FxY19hbGxvY19mcmVlX3Jlc19j bWQgKmNtZDsNCj4gKwlzdHJ1Y3QgaWNlX2FxX2Rlc2MgZGVzYzsNCj4gKw0KPiArCWljZV9kZWJ1 ZyhodywgSUNFX0RCR19UUkFDRSwgImljZV9hcV9hbGxvY19mcmVlX3JlcyIpOw0KPiArDQo+ICsJ Y21kID0gJmRlc2MucGFyYW1zLnN3X3Jlc19jdHJsOw0KPiArDQo+ICsJaWYgKCFidWYpDQo+ICsJ CXJldHVybiBJQ0VfRVJSX1BBUkFNOw0KPiArDQo+ICsJaWYgKGJ1Zl9zaXplIDwgKG51bV9lbnRy aWVzICogc2l6ZW9mKGJ1Zi0+ZWxlbVswXSkpKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsN Cj4gKw0KPiArCWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBvcGMpOw0KPiAr DQo+ICsJZGVzYy5mbGFncyB8PSBDUFVfVE9fTEUxNihJQ0VfQVFfRkxBR19SRCk7DQo+ICsNCj4g KwljbWQtPm51bV9lbnRyaWVzID0gQ1BVX1RPX0xFMTYobnVtX2VudHJpZXMpOw0KPiArDQo+ICsJ cmV0dXJuIGljZV9hcV9zZW5kX2NtZChodywgJmRlc2MsIGJ1ZiwgYnVmX3NpemUsIGNkKTsNCj4g K30NCj4gKw0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9nZXRfbnVtX3Blcl9mdW5jIC0gZGV0ZXJt aW5lIG51bWJlciBvZiByZXNvdXJjZXMgcGVyIFBGDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhl IGh3IHN0cnVjdHVyZQ0KPiArICogQG1heDogdmFsdWUgdG8gYmUgZXZlbmx5IHNwbGl0IGJldHdl ZW4gZWFjaCBQRg0KPiArICoNCj4gKyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIHZhbGlkIGZ1 bmN0aW9ucyBieSBnb2luZyB0aHJvdWdoIHRoZSBiaXRtYXAgcmV0dXJuZWQNCj4gKyAqIGZyb20g cGFyc2luZyBjYXBhYmlsaXRpZXMgYW5kIHVzZSB0aGlzIHRvIGNhbGN1bGF0ZSB0aGUgbnVtYmVy IG9mIHJlc291cmNlcw0KPiArICogcGVyIFBGIGJhc2VkIG9uIHRoZSBtYXggdmFsdWUgcGFzc2Vk IGluLg0KPiArICovDQo+ICtzdGF0aWMgdTMyIGljZV9nZXRfbnVtX3Blcl9mdW5jKHN0cnVjdCBp Y2VfaHcgKmh3LCB1MzIgbWF4KQ0KPiArew0KPiArCXU4IGZ1bmNzOw0KPiArDQo+ICsjZGVmaW5l IElDRV9DQVBTX1ZBTElEX0ZVTkNTX00JMHhGRg0KPiArCWZ1bmNzID0gaWNlX2h3ZWlnaHQ4KGh3 LT5kZXZfY2Fwcy5jb21tb25fY2FwLnZhbGlkX2Z1bmN0aW9ucyAmDQo+ICsJCQkgICAgIElDRV9D QVBTX1ZBTElEX0ZVTkNTX00pOw0KPiArDQo+ICsJaWYgKCFmdW5jcykNCj4gKwkJcmV0dXJuIDA7 DQo+ICsNCj4gKwlyZXR1cm4gbWF4IC8gZnVuY3M7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog aWNlX3BhcnNlX2NhcHMgLSBwYXJzZSBmdW5jdGlvbi9kZXZpY2UgY2FwYWJpbGl0aWVzDQo+ICsg KiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdA0KPiArICogQGJ1ZjogcG9pbnRlciB0byBh IGJ1ZmZlciBjb250YWluaW5nIGZ1bmN0aW9uL2RldmljZSBjYXBhYmlsaXR5IHJlY29yZHMNCj4g KyAqIEBjYXBfY291bnQ6IG51bWJlciBvZiBjYXBhYmlsaXR5IHJlY29yZHMgaW4gdGhlIGxpc3QN Cj4gKyAqIEBvcGM6IHR5cGUgb2YgY2FwYWJpbGl0aWVzIGxpc3QgdG8gcGFyc2UNCj4gKyAqDQo+ ICsgKiBIZWxwZXIgZnVuY3Rpb24gdG8gcGFyc2UgZnVuY3Rpb24oMHgwMDBhKS9kZXZpY2UoMHgw MDBiKSBjYXBhYmlsaXRpZXMgbGlzdC4NCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4gK2ljZV9w YXJzZV9jYXBzKHN0cnVjdCBpY2VfaHcgKmh3LCB2b2lkICpidWYsIHUzMiBjYXBfY291bnQsDQo+ ICsJICAgICAgIGVudW0gaWNlX2FkbWlucV9vcGMgb3BjKQ0KPiArew0KPiArCXN0cnVjdCBpY2Vf YXFjX2xpc3RfY2Fwc19lbGVtICpjYXBfcmVzcDsNCj4gKwlzdHJ1Y3QgaWNlX2h3X2Z1bmNfY2Fw cyAqZnVuY19wID0gTlVMTDsNCj4gKwlzdHJ1Y3QgaWNlX2h3X2Rldl9jYXBzICpkZXZfcCA9IE5V TEw7DQo+ICsJc3RydWN0IGljZV9od19jb21tb25fY2FwcyAqY2FwczsNCj4gKwl1MzIgaTsNCj4g Kw0KPiArCWlmICghYnVmKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwljYXBfcmVzcCA9IChzdHJ1 Y3QgaWNlX2FxY19saXN0X2NhcHNfZWxlbSAqKWJ1ZjsNCj4gKw0KPiArCWlmIChvcGMgPT0gaWNl X2FxY19vcGNfbGlzdF9kZXZfY2Fwcykgew0KPiArCQlkZXZfcCA9ICZody0+ZGV2X2NhcHM7DQo+ ICsJCWNhcHMgPSAmZGV2X3AtPmNvbW1vbl9jYXA7DQo+ICsJfSBlbHNlIGlmIChvcGMgPT0gaWNl X2FxY19vcGNfbGlzdF9mdW5jX2NhcHMpIHsNCj4gKwkJZnVuY19wID0gJmh3LT5mdW5jX2NhcHM7 DQo+ICsJCWNhcHMgPSAmZnVuY19wLT5jb21tb25fY2FwOw0KPiArCX0gZWxzZSB7DQo+ICsJCWlj ZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCAid3Jvbmcgb3Bjb2RlXG4iKTsNCj4gKwkJcmV0dXJu Ow0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGNhcHMgJiYgaSA8IGNhcF9jb3VudDsgaSsr LCBjYXBfcmVzcCsrKSB7DQo+ICsJCXUzMiBsb2dpY2FsX2lkID0gTEUzMl9UT19DUFUoY2FwX3Jl c3AtPmxvZ2ljYWxfaWQpOw0KPiArCQl1MzIgcGh5c19pZCA9IExFMzJfVE9fQ1BVKGNhcF9yZXNw LT5waHlzX2lkKTsNCj4gKwkJdTMyIG51bWJlciA9IExFMzJfVE9fQ1BVKGNhcF9yZXNwLT5udW1i ZXIpOw0KPiArCQl1MTYgY2FwID0gTEUxNl9UT19DUFUoY2FwX3Jlc3AtPmNhcCk7DQo+ICsNCj4g KwkJc3dpdGNoIChjYXApIHsNCj4gKwkJY2FzZSBJQ0VfQVFDX0NBUFNfVkFMSURfRlVOQ1RJT05T Og0KPiArCQkJY2Fwcy0+dmFsaWRfZnVuY3Rpb25zID0gbnVtYmVyOw0KPiArCQkJaWNlX2RlYnVn KGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkJICAiSFcgY2FwczogVmFsaWQgRnVuY3Rpb25zID0g JWRcbiIsDQo+ICsJCQkJICBjYXBzLT52YWxpZF9mdW5jdGlvbnMpOw0KPiArCQkJYnJlYWs7DQo+ ICsJCWNhc2UgSUNFX0FRQ19DQVBTX1ZTSToNCj4gKwkJCWlmIChkZXZfcCkgew0KPiArCQkJCWRl dl9wLT5udW1fdnNpX2FsbG9jZF90b19ob3N0ID0gbnVtYmVyOw0KPiArCQkJCWljZV9kZWJ1Zyho dywgSUNFX0RCR19JTklULA0KPiArCQkJCQkgICJIVyBjYXBzOiBEZXYuVlNJIGNudCA9ICVkXG4i LA0KPiArCQkJCQkgIGRldl9wLT5udW1fdnNpX2FsbG9jZF90b19ob3N0KTsNCj4gKwkJCX0gZWxz ZSBpZiAoZnVuY19wKSB7DQo+ICsJCQkJZnVuY19wLT5ndWFyX251bV92c2kgPQ0KPiArCQkJCQlp Y2VfZ2V0X251bV9wZXJfZnVuYyhodywgSUNFX01BWF9WU0kpOw0KPiArCQkJCWljZV9kZWJ1Zyho dywgSUNFX0RCR19JTklULA0KPiArCQkJCQkgICJIVyBjYXBzOiBGdW5jLlZTSSBjbnQgPSAlZFxu IiwNCj4gKwkJCQkJICBudW1iZXIpOw0KPiArCQkJfQ0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2Ug SUNFX0FRQ19DQVBTX1JTUzoNCj4gKwkJCWNhcHMtPnJzc190YWJsZV9zaXplID0gbnVtYmVyOw0K PiArCQkJY2Fwcy0+cnNzX3RhYmxlX2VudHJ5X3dpZHRoID0gbG9naWNhbF9pZDsNCj4gKwkJCWlj ZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULA0KPiArCQkJCSAgIkhXIGNhcHM6IFJTUyB0YWJsZSBz aXplID0gJWRcbiIsDQo+ICsJCQkJICBjYXBzLT5yc3NfdGFibGVfc2l6ZSk7DQo+ICsJCQlpY2Vf ZGVidWcoaHcsIElDRV9EQkdfSU5JVCwNCj4gKwkJCQkgICJIVyBjYXBzOiBSU1MgdGFibGUgd2lk dGggPSAlZFxuIiwNCj4gKwkJCQkgIGNhcHMtPnJzc190YWJsZV9lbnRyeV93aWR0aCk7DQo+ICsJ CQlicmVhazsNCj4gKwkJY2FzZSBJQ0VfQVFDX0NBUFNfUlhRUzoNCj4gKwkJCWNhcHMtPm51bV9y eHEgPSBudW1iZXI7DQo+ICsJCQljYXBzLT5yeHFfZmlyc3RfaWQgPSBwaHlzX2lkOw0KPiArCQkJ aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkJICAiSFcgY2FwczogTnVtIFJ4IFFz ID0gJWRcbiIsIGNhcHMtPm51bV9yeHEpOw0KPiArCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lO SVQsDQo+ICsJCQkJICAiSFcgY2FwczogUnggZmlyc3QgcXVldWUgSUQgPSAlZFxuIiwNCj4gKwkJ CQkgIGNhcHMtPnJ4cV9maXJzdF9pZCk7DQo+ICsJCQlicmVhazsNCj4gKwkJY2FzZSBJQ0VfQVFD X0NBUFNfVFhRUzoNCj4gKwkJCWNhcHMtPm51bV90eHEgPSBudW1iZXI7DQo+ICsJCQljYXBzLT50 eHFfZmlyc3RfaWQgPSBwaHlzX2lkOw0KPiArCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQs DQo+ICsJCQkJICAiSFcgY2FwczogTnVtIFR4IFFzID0gJWRcbiIsIGNhcHMtPm51bV90eHEpOw0K PiArCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsDQo+ICsJCQkJICAiSFcgY2FwczogVHgg Zmlyc3QgcXVldWUgSUQgPSAlZFxuIiwNCj4gKwkJCQkgIGNhcHMtPnR4cV9maXJzdF9pZCk7DQo+ ICsJCQlicmVhazsNCj4gKwkJY2FzZSBJQ0VfQVFDX0NBUFNfTVNJWDoNCj4gKwkJCWNhcHMtPm51 bV9tc2l4X3ZlY3RvcnMgPSBudW1iZXI7DQo+ICsJCQljYXBzLT5tc2l4X3ZlY3Rvcl9maXJzdF9p ZCA9IHBoeXNfaWQ7DQo+ICsJCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwNCj4gKwkJCQkg ICJIVyBjYXBzOiBNU0lYIHZlY3RvciBjb3VudCA9ICVkXG4iLA0KPiArCQkJCSAgY2Fwcy0+bnVt X21zaXhfdmVjdG9ycyk7DQo+ICsJCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwNCj4gKwkJ CQkgICJIVyBjYXBzOiBNU0lYIGZpcnN0IHZlY3RvciBpbmRleCA9ICVkXG4iLA0KPiArCQkJCSAg Y2Fwcy0+bXNpeF92ZWN0b3JfZmlyc3RfaWQpOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2UgSUNF X0FRQ19DQVBTX01BWF9NVFU6DQo+ICsJCQljYXBzLT5tYXhfbXR1ID0gbnVtYmVyOw0KPiArCQkJ aWYgKGRldl9wKQ0KPiArCQkJCWljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULA0KPiArCQkJCQkg ICJIVyBjYXBzOiBEZXYuTWF4TVRVID0gJWRcbiIsDQo+ICsJCQkJCSAgY2Fwcy0+bWF4X210dSk7 DQo+ICsJCQllbHNlIGlmIChmdW5jX3ApDQo+ICsJCQkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lO SVQsDQo+ICsJCQkJCSAgIkhXIGNhcHM6IGZ1bmMuTWF4TVRVID0gJWRcbiIsDQo+ICsJCQkJCSAg Y2Fwcy0+bWF4X210dSk7DQo+ICsJCQlicmVhazsNCj4gKwkJZGVmYXVsdDoNCj4gKwkJCWljZV9k ZWJ1ZyhodywgSUNFX0RCR19JTklULA0KPiArCQkJCSAgIkhXIGNhcHM6IFVua25vd24gY2FwYWJp bGl0eVslZF06IDB4JXhcbiIsIGksDQo+ICsJCQkJICBjYXApOw0KPiArCQkJYnJlYWs7DQo+ICsJ CX0NCj4gKwl9DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2FxX2Rpc2NvdmVyX2NhcHMg LSBxdWVyeSBmdW5jdGlvbi9kZXZpY2UgY2FwYWJpbGl0aWVzDQo+ICsgKiBAaHc6IHBvaW50ZXIg dG8gdGhlIGh3IHN0cnVjdA0KPiArICogQGJ1ZjogYSB2aXJ0dWFsIGJ1ZmZlciB0byBob2xkIHRo ZSBjYXBhYmlsaXRpZXMNCj4gKyAqIEBidWZfc2l6ZTogU2l6ZSBvZiB0aGUgdmlydHVhbCBidWZm ZXINCj4gKyAqIEBjYXBfY291bnQ6IGNhcCBjb3VudCBuZWVkZWQgaWYgQVEgZXJyPT1FTk9NRU0N Cj4gKyAqIEBvcGM6IGNhcGFiaWxpdGllcyB0eXBlIHRvIGRpc2NvdmVyIC0gcGFzcyBpbiB0aGUg Y29tbWFuZCBvcGNvZGUNCj4gKyAqIEBjZDogcG9pbnRlciB0byBjb21tYW5kIGRldGFpbHMgc3Ry dWN0dXJlIG9yIE5VTEwNCj4gKyAqDQo+ICsgKiBHZXQgdGhlIGZ1bmN0aW9uKDB4MDAwYSkvZGV2 aWNlKDB4MDAwYikgY2FwYWJpbGl0aWVzIGRlc2NyaXB0aW9uIGZyb20NCj4gKyAqIHRoZSBmaXJt d2FyZS4NCj4gKyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX2Rpc2Nv dmVyX2NhcHMoc3RydWN0IGljZV9odyAqaHcsIHZvaWQgKmJ1ZiwgdTE2IGJ1Zl9zaXplLCB1MzIg KmNhcF9jb3VudCwNCj4gKwkJICAgICBlbnVtIGljZV9hZG1pbnFfb3BjIG9wYywgc3RydWN0IGlj ZV9zcV9jZCAqY2QpDQo+ICt7DQo+ICsJc3RydWN0IGljZV9hcWNfbGlzdF9jYXBzICpjbWQ7DQo+ ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0YXR1czsN Cj4gKw0KPiArCWNtZCA9ICZkZXNjLnBhcmFtcy5nZXRfY2FwOw0KPiArDQo+ICsJaWYgKG9wYyAh PSBpY2VfYXFjX29wY19saXN0X2Z1bmNfY2FwcyAmJg0KPiArCSAgICBvcGMgIT0gaWNlX2FxY19v cGNfbGlzdF9kZXZfY2FwcykNCj4gKwkJcmV0dXJuIElDRV9FUlJfUEFSQU07DQo+ICsNCj4gKwlp Y2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYygmZGVzYywgb3BjKTsNCj4gKw0KPiArCXN0YXR1 cyA9IGljZV9hcV9zZW5kX2NtZChodywgJmRlc2MsIGJ1ZiwgYnVmX3NpemUsIGNkKTsNCj4gKwlp ZiAoIXN0YXR1cykNCj4gKwkJaWNlX3BhcnNlX2NhcHMoaHcsIGJ1ZiwgTEUzMl9UT19DUFUoY21k LT5jb3VudCksIG9wYyk7DQo+ICsJZWxzZSBpZiAoaHctPmFkbWlucS5zcV9sYXN0X3N0YXR1cyA9 PSBJQ0VfQVFfUkNfRU5PTUVNKQ0KPiArCQkqY2FwX2NvdW50ID0gTEUzMl9UT19DUFUoY21kLT5j b3VudCk7DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2Vf ZGlzY292ZXJfY2FwcyAtIGdldCBpbmZvIGFib3V0IHRoZSBIVw0KPiArICogQGh3OiBwb2ludGVy IHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUNCj4gKyAqIEBvcGM6IGNhcGFiaWxpdGllcyB0eXBl IHRvIGRpc2NvdmVyIC0gcGFzcyBpbiB0aGUgY29tbWFuZCBvcGNvZGUNCj4gKyAqLw0KPiArc3Rh dGljIGVudW0gaWNlX3N0YXR1cw0KPiAraWNlX2Rpc2NvdmVyX2NhcHMoc3RydWN0IGljZV9odyAq aHcsIGVudW0gaWNlX2FkbWlucV9vcGMgb3BjKQ0KPiArew0KPiArCWVudW0gaWNlX3N0YXR1cyBz dGF0dXM7DQo+ICsJdTMyIGNhcF9jb3VudDsNCj4gKwl1MTYgY2J1Zl9sZW47DQo+ICsJdTggcmV0 cmllczsNCj4gKw0KPiArCS8qIFRoZSBkcml2ZXIgZG9lc24ndCBrbm93IGhvdyBtYW55IGNhcGFi aWxpdGllcyB0aGUgZGV2aWNlIHdpbGwgcmV0dXJuDQo+ICsJICogc28gdGhlIGJ1ZmZlciBzaXpl IHJlcXVpcmVkIGlzbid0IGtub3duIGFoZWFkIG9mIHRpbWUuIFRoZSBkcml2ZXINCj4gKwkgKiBz dGFydHMgd2l0aCBjYnVmX2xlbiBhbmQgaWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgaW5zdWZmaWNp ZW50LCB0aGUNCj4gKwkgKiBkZXZpY2UgcmV0dXJucyBJQ0VfQVFfUkNfRU5PTUVNIGFuZCBhbHNv IHRoZSBjYXBfY291bnQgaXQgbmVlZHMuDQo+ICsJICogVGhlIGRyaXZlciB0aGVuIGFsbG9jYXRl cyB0aGUgYnVmZmVyIGJhc2VkIG9uIHRoZSBjb3VudCBhbmQgcmV0cmllcw0KPiArCSAqIHRoZSBv cGVyYXRpb24uIFNvIGl0IGZvbGxvd3MgdGhhdCB0aGUgcmV0cnkgY291bnQgaXMgMi4NCj4gKwkg Ki8NCj4gKyNkZWZpbmUgSUNFX0dFVF9DQVBfQlVGX0NPVU5UCTQwDQo+ICsjZGVmaW5lIElDRV9H RVRfQ0FQX1JFVFJZX0NPVU5UCTINCj4gKw0KPiArCWNhcF9jb3VudCA9IElDRV9HRVRfQ0FQX0JV Rl9DT1VOVDsNCj4gKwlyZXRyaWVzID0gSUNFX0dFVF9DQVBfUkVUUllfQ09VTlQ7DQo+ICsNCj4g KwlkbyB7DQo+ICsJCXZvaWQgKmNidWY7DQo+ICsNCj4gKwkJY2J1Zl9sZW4gPSAodTE2KShjYXBf Y291bnQgKg0KPiArCQkJCSBzaXplb2Yoc3RydWN0IGljZV9hcWNfbGlzdF9jYXBzX2VsZW0pKTsN Cj4gKwkJY2J1ZiA9IGljZV9tYWxsb2MoaHcsIGNidWZfbGVuKTsNCj4gKwkJaWYgKCFjYnVmKQ0K DQo9PSBOVUxMDQoNCj4gKwkJCXJldHVybiBJQ0VfRVJSX05PX01FTU9SWTsNCj4gKw0KPiArCQlz dGF0dXMgPSBpY2VfYXFfZGlzY292ZXJfY2FwcyhodywgY2J1ZiwgY2J1Zl9sZW4sICZjYXBfY291 bnQsDQo+ICsJCQkJCSAgICAgIG9wYywgTlVMTCk7DQo+ICsJCWljZV9mcmVlKGh3LCBjYnVmKTsN Cj4gKw0KPiArCQlpZiAoIXN0YXR1cyB8fCBody0+YWRtaW5xLnNxX2xhc3Rfc3RhdHVzICE9IElD RV9BUV9SQ19FTk9NRU0pDQo+ICsJCQlicmVhazsNCj4gKw0KPiArCQkvKiBJZiBFTk9NRU0gaXMg cmV0dXJuZWQsIHRyeSBhZ2FpbiB3aXRoIGJpZ2dlciBidWZmZXIgKi8NCj4gKwl9IHdoaWxlICgt LXJldHJpZXMpOw0KPiArDQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBpY2VfZ2V0X2NhcHMgLSBnZXQgaW5mbyBhYm91dCB0aGUgSFcNCj4gKyAqIEBodzogcG9p bnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1 cyBpY2VfZ2V0X2NhcHMoc3RydWN0IGljZV9odyAqaHcpDQo+ICt7DQo+ICsJZW51bSBpY2Vfc3Rh dHVzIHN0YXR1czsNCj4gKw0KPiArCXN0YXR1cyA9IGljZV9kaXNjb3Zlcl9jYXBzKGh3LCBpY2Vf YXFjX29wY19saXN0X2Rldl9jYXBzKTsNCj4gKwlpZiAoIXN0YXR1cykNCj4gKwkJc3RhdHVzID0g aWNlX2Rpc2NvdmVyX2NhcHMoaHcsIGljZV9hcWNfb3BjX2xpc3RfZnVuY19jYXBzKTsNCj4gKw0K PiArCXJldHVybiBzdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2FxX21hbmFn ZV9tYWNfd3JpdGUgLSBtYW5hZ2UgTUFDIGFkZHJlc3Mgd3JpdGUgY29tbWFuZA0KPiArICogQGh3 OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QNCj4gKyAqIEBtYWNfYWRkcjogTUFDIGFkZHJlc3Mg dG8gYmUgd3JpdHRlbiBhcyBMQUEvTEFBK1dvTC9Qb3J0IGFkZHJlc3MNCj4gKyAqIEBmbGFnczog ZmxhZ3MgdG8gY29udHJvbCB3cml0ZSBiZWhhdmlvcg0KPiArICogQGNkOiBwb2ludGVyIHRvIGNv bW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUgb3IgTlVMTA0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rp b24gaXMgdXNlZCB0byB3cml0ZSBNQUMgYWRkcmVzcyB0byB0aGUgTlZNICgweDAxMDgpLg0KPiAr ICovDQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9tYW5hZ2VfbWFjX3dyaXRlKHN0cnVj dCBpY2VfaHcgKmh3LCBjb25zdCB1OCAqbWFjX2FkZHIsIHU4IGZsYWdzLA0KPiArCQkJc3RydWN0 IGljZV9zcV9jZCAqY2QpDQo+ICt7DQo+ICsJc3RydWN0IGljZV9hcWNfbWFuYWdlX21hY193cml0 ZSAqY21kOw0KPiArCXN0cnVjdCBpY2VfYXFfZGVzYyBkZXNjOw0KPiArDQo+ICsJY21kID0gJmRl c2MucGFyYW1zLm1hY193cml0ZTsNCj4gKwlpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYygm ZGVzYywgaWNlX2FxY19vcGNfbWFuYWdlX21hY193cml0ZSk7DQo+ICsNCj4gKwljbWQtPmZsYWdz ID0gZmxhZ3M7DQo+ICsNCj4gKw0KPiArCS8qIFByZXAgdmFsdWVzIGZvciBmbGFncywgc2FoLCBz YWwgKi8NCj4gKwljbWQtPnNhaCA9IEhUT05TKCooKGNvbnN0IHUxNiAqKW1hY19hZGRyKSk7DQo+ ICsJY21kLT5zYWwgPSBIVE9OTCgqKChjb25zdCB1MzIgKikobWFjX2FkZHIgKyAyKSkpOw0KDQpB bnkgcGFydGljdWxhciByZWFzb24gdGhlc2UgYXJlbid0IHJ0ZV9jcHVfdG9fYmVfMTYvMzI/DQoN Cj4gKw0KPiArCXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZkZXNjLCBOVUxMLCAwLCBjZCk7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2FxX2NsZWFyX3B4ZV9tb2RlDQo+ICsgKiBA aHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdA0KPiArICoNCj4gKyAqIFRlbGwgdGhlIGZpcm13 YXJlIHRoYXQgdGhlIGRyaXZlciBpcyB0YWtpbmcgb3ZlciBmcm9tIFBYRSAoMHgwMTEwKS4NCj4g KyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0YXR1cyBpY2VfYXFfY2xlYXJfcHhlX21vZGUoc3Ry dWN0IGljZV9odyAqaHcpDQo+ICt7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsN Cj4gKwlpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYygmZGVzYywgaWNlX2FxY19vcGNfY2xl YXJfcHhlX21vZGUpOw0KPiArCWRlc2MucGFyYW1zLmNsZWFyX3B4ZS5yeF9jbnQgPSBJQ0VfQVFD X0NMRUFSX1BYRV9SWF9DTlQ7DQo+ICsNCj4gKwlyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCAm ZGVzYywgTlVMTCwgMCwgTlVMTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2NsZWFy X3B4ZV9tb2RlIC0gY2xlYXIgcHhlIG9wZXJhdGlvbnMgbW9kZQ0KPiArICogQGh3OiBwb2ludGVy IHRvIHRoZSBodyBzdHJ1Y3QNCj4gKyAqDQo+ICsgKiBNYWtlIHN1cmUgYWxsIFBYRSBtb2RlIHNl dHRpbmdzIGFyZSBjbGVhcmVkLCBpbmNsdWRpbmcgdGhpbmdzDQo+ICsgKiBsaWtlIGRlc2NyaXB0 b3IgZmV0Y2gvd3JpdGUtYmFjayBtb2RlLg0KPiArICovDQo+ICt2b2lkIGljZV9jbGVhcl9weGVf bW9kZShzdHJ1Y3QgaWNlX2h3ICpodykNCj4gK3sNCj4gKwlpZiAoaWNlX2NoZWNrX3NxX2FsaXZl KGh3LCAmaHctPmFkbWlucSkpDQo+ICsJCWljZV9hcV9jbGVhcl9weGVfbW9kZShodyk7DQo+ICt9 DQo+ICsNCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfZ2V0X2xpbmtfc3BlZWRfYmFzZWRfb25fcGh5 X3R5cGUgLSByZXR1cm5zIGxpbmsgc3BlZWQNCj4gKyAqIEBwaHlfdHlwZV9sb3c6IGxvd2VyIHBh cnQgb2YgcGh5X3R5cGUNCj4gKyAqIEBwaHlfdHlwZV9oaWdoOiBoaWdoZXIgcGFydCBvZiBwaHlf dHlwZQ0KPiArICoNCj4gKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhbiBl bnRyeSBpbiBwaHkgdHlwZSBzdHJ1Y3R1cmUNCj4gKyAqIFtwaHlfdHlwZV9sb3csIHBoeV90eXBl X2hpZ2hdIHRvIGl0cyBjb3JyZXNwb25kaW5nIGxpbmsgc3BlZWQuDQo+ICsgKiBOb3RlOiBJbiB0 aGUgc3RydWN0dXJlIG9mIFtwaHlfdHlwZV9sb3csIHBoeV90eXBlX2hpZ2hdLCB0aGVyZSBzaG91 bGQNCj4gKyAqIGJlIG9uZSBiaXQgc2V0LCBhcyB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBv bmUgcGh5IHR5cGUgdG8gaXRzDQo+ICsgKiBzcGVlZC4NCj4gKyAqIElmIG5vIGJpdCBnZXRzIHNl dCwgSUNFX0xJTktfU1BFRURfVU5LTk9XTiB3aWxsIGJlIHJldHVybmVkDQo+ICsgKiBJZiBtb3Jl IHRoYW4gb25lIGJpdCBnZXRzIHNldCwgSUNFX0xJTktfU1BFRURfVU5LTk9XTiB3aWxsIGJlIHJl dHVybmVkDQo+ICsgKi8NCj4gK3N0YXRpYyB1MTYNCj4gK2ljZV9nZXRfbGlua19zcGVlZF9iYXNl ZF9vbl9waHlfdHlwZSh1NjQgcGh5X3R5cGVfbG93LCB1NjQgcGh5X3R5cGVfaGlnaCkNCj4gK3sN Cj4gKwl1MTYgc3BlZWRfcGh5X3R5cGVfaGlnaCA9IElDRV9BUV9MSU5LX1NQRUVEX1VOS05PV047 DQo+ICsJdTE2IHNwZWVkX3BoeV90eXBlX2xvdyA9IElDRV9BUV9MSU5LX1NQRUVEX1VOS05PV047 DQo+ICsNCj4gKwlzd2l0Y2ggKHBoeV90eXBlX2xvdykgew0KPiArCWNhc2UgSUNFX1BIWV9UWVBF X0xPV18xMDBCQVNFX1RYOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDBNX1NHTUlJOg0K PiArCQlzcGVlZF9waHlfdHlwZV9sb3cgPSBJQ0VfQVFfTElOS19TUEVFRF8xMDBNQjsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMDBCQVNFX1Q6DQo+ICsJY2FzZSBJ Q0VfUEhZX1RZUEVfTE9XXzEwMDBCQVNFX1NYOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18x MDAwQkFTRV9MWDoNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9MT1dfMTAwMEJBU0VfS1g6DQo+ICsJ Y2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzFHX1NHTUlJOg0KPiArCQlzcGVlZF9waHlfdHlwZV9sb3cg PSBJQ0VfQVFfTElOS19TUEVFRF8xMDAwTUI7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSUNFX1BI WV9UWVBFX0xPV18yNTAwQkFTRV9UOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNTAwQkFT RV9YOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNTAwQkFTRV9LWDoNCj4gKwkJc3BlZWRf cGh5X3R5cGVfbG93ID0gSUNFX0FRX0xJTktfU1BFRURfMjUwME1COw0KPiArCQlicmVhazsNCj4g KwljYXNlIElDRV9QSFlfVFlQRV9MT1dfNUdCQVNFX1Q6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVf TE9XXzVHQkFTRV9LUjoNCj4gKwkJc3BlZWRfcGh5X3R5cGVfbG93ID0gSUNFX0FRX0xJTktfU1BF RURfNUdCOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9MT1dfMTBHQkFTRV9U Og0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMEdfU0ZJX0RBOg0KPiArCWNhc2UgSUNFX1BI WV9UWVBFX0xPV18xMEdCQVNFX1NSOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMEdCQVNF X0xSOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMEdCQVNFX0tSX0NSMToNCj4gKwljYXNl IElDRV9QSFlfVFlQRV9MT1dfMTBHX1NGSV9BT0NfQUNDOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBF X0xPV18xMEdfU0ZJX0MyQzoNCj4gKwkJc3BlZWRfcGh5X3R5cGVfbG93ID0gSUNFX0FRX0xJTktf U1BFRURfMTBHQjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzI1R0JB U0VfVDoNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9DUjoNCj4gKwljYXNlIElD RV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9DUl9TOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18y NUdCQVNFX0NSMToNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9TUjoNCj4gKwlj YXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9MUjoNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9M T1dfMjVHQkFTRV9LUjoNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9MT1dfMjVHQkFTRV9LUl9TOg0K PiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNUdCQVNFX0tSMToNCj4gKwljYXNlIElDRV9QSFlf VFlQRV9MT1dfMjVHX0FVSV9BT0NfQUNDOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18yNUdf QVVJX0MyQzoNCj4gKwkJc3BlZWRfcGh5X3R5cGVfbG93ID0gSUNFX0FRX0xJTktfU1BFRURfMjVH QjsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzQwR0JBU0VfQ1I0Og0K PiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV180MEdCQVNFX1NSNDoNCj4gKwljYXNlIElDRV9QSFlf VFlQRV9MT1dfNDBHQkFTRV9MUjQ6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzQwR0JBU0Vf S1I0Og0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV180MEdfWExBVUlfQU9DX0FDQzoNCj4gKwlj YXNlIElDRV9QSFlfVFlQRV9MT1dfNDBHX1hMQVVJOg0KPiArCQlzcGVlZF9waHlfdHlwZV9sb3cg PSBJQ0VfQVFfTElOS19TUEVFRF80MEdCOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElDRV9QSFlf VFlQRV9MT1dfNTBHQkFTRV9DUjI6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzUwR0JBU0Vf U1IyOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdCQVNFX0xSMjoNCj4gKwljYXNlIElD RV9QSFlfVFlQRV9MT1dfNTBHQkFTRV9LUjI6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzUw R19MQVVJMl9BT0NfQUNDOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdfTEFVSTI6DQo+ ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzUwR19BVUkyX0FPQ19BQ0M6DQo+ICsJY2FzZSBJQ0Vf UEhZX1RZUEVfTE9XXzUwR19BVUkyOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdCQVNF X0NQOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdCQVNFX1NSOg0KPiArCWNhc2UgSUNF X1BIWV9UWVBFX0xPV181MEdCQVNFX0ZSOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdC QVNFX0xSOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV181MEdCQVNFX0tSX1BBTTQ6DQo+ICsJ Y2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzUwR19BVUkxX0FPQ19BQ0M6DQo+ICsJY2FzZSBJQ0VfUEhZ X1RZUEVfTE9XXzUwR19BVUkxOg0KPiArCQlzcGVlZF9waHlfdHlwZV9sb3cgPSBJQ0VfQVFfTElO S19TUEVFRF81MEdCOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElDRV9QSFlfVFlQRV9MT1dfMTAw R0JBU0VfQ1I0Og0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDBHQkFTRV9TUjQ6DQo+ICsJ Y2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX0xSNDoNCj4gKwljYXNlIElDRV9QSFlfVFlQ RV9MT1dfMTAwR0JBU0VfS1I0Og0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDBHX0NBVUk0 X0FPQ19BQ0M6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdfQ0FVSTQ6DQo+ICsJY2Fz ZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdfQVVJNF9BT0NfQUNDOg0KPiArCWNhc2UgSUNFX1BIWV9U WVBFX0xPV18xMDBHX0FVSTQ6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX0NS X1BBTTQ6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX0tSX1BBTTQ6DQo+ICsJ Y2FzZSBJQ0VfUEhZX1RZUEVfTE9XXzEwMEdCQVNFX0NQMjoNCj4gKwljYXNlIElDRV9QSFlfVFlQ RV9MT1dfMTAwR0JBU0VfU1IyOg0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0xPV18xMDBHQkFTRV9E UjoNCj4gKwkJc3BlZWRfcGh5X3R5cGVfbG93ID0gSUNFX0FRX0xJTktfU1BFRURfMTAwR0I7DQo+ ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCXNwZWVkX3BoeV90eXBlX2xvdyA9IElDRV9B UV9MSU5LX1NQRUVEX1VOS05PV047DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCXN3aXRj aCAocGh5X3R5cGVfaGlnaCkgew0KPiArCWNhc2UgSUNFX1BIWV9UWVBFX0hJR0hfMTAwR0JBU0Vf S1IyX1BBTTQ6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfSElHSF8xMDBHX0NBVUkyX0FPQ19BQ0M6 DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfSElHSF8xMDBHX0NBVUkyOg0KPiArCWNhc2UgSUNFX1BI WV9UWVBFX0hJR0hfMTAwR19BVUkyX0FPQ19BQ0M6DQo+ICsJY2FzZSBJQ0VfUEhZX1RZUEVfSElH SF8xMDBHX0FVSTI6DQo+ICsJCXNwZWVkX3BoeV90eXBlX2hpZ2ggPSBJQ0VfQVFfTElOS19TUEVF RF8xMDBHQjsNCj4gKwkJYnJlYWs7DQo+ICsJZGVmYXVsdDoNCj4gKwkJc3BlZWRfcGh5X3R5cGVf aGlnaCA9IElDRV9BUV9MSU5LX1NQRUVEX1VOS05PV047DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4g Kw0KPiArCWlmIChzcGVlZF9waHlfdHlwZV9sb3cgPT0gSUNFX0FRX0xJTktfU1BFRURfVU5LTk9X TiAmJg0KPiArCSAgICBzcGVlZF9waHlfdHlwZV9oaWdoID09IElDRV9BUV9MSU5LX1NQRUVEX1VO S05PV04pDQo+ICsJCXJldHVybiBJQ0VfQVFfTElOS19TUEVFRF9VTktOT1dOOw0KPiArCWVsc2Ug aWYgKHNwZWVkX3BoeV90eXBlX2xvdyAhPSBJQ0VfQVFfTElOS19TUEVFRF9VTktOT1dOICYmDQo+ ICsJCSBzcGVlZF9waHlfdHlwZV9oaWdoICE9IElDRV9BUV9MSU5LX1NQRUVEX1VOS05PV04pDQo+ ICsJCXJldHVybiBJQ0VfQVFfTElOS19TUEVFRF9VTktOT1dOOw0KPiArCWVsc2UgaWYgKHNwZWVk X3BoeV90eXBlX2xvdyAhPSBJQ0VfQVFfTElOS19TUEVFRF9VTktOT1dOICYmDQo+ICsJCSBzcGVl ZF9waHlfdHlwZV9oaWdoID09IElDRV9BUV9MSU5LX1NQRUVEX1VOS05PV04pDQo+ICsJCXJldHVy biBzcGVlZF9waHlfdHlwZV9sb3c7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gc3BlZWRfcGh5X3R5 cGVfaGlnaDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfdXBkYXRlX3BoeV90eXBlDQo+ ICsgKiBAcGh5X3R5cGVfbG93OiBwb2ludGVyIHRvIHRoZSBsb3dlciBwYXJ0IG9mIHBoeV90eXBl DQo+ICsgKiBAcGh5X3R5cGVfaGlnaDogcG9pbnRlciB0byB0aGUgaGlnaGVyIHBhcnQgb2YgcGh5 X3R5cGUNCj4gKyAqIEBsaW5rX3NwZWVkc19iaXRtYXA6IHRhcmdldGVkIGxpbmsgc3BlZWRzIGJp dG1hcA0KPiArICoNCj4gKyAqIE5vdGU6IEZvciB0aGUgbGlua19zcGVlZHNfYml0bWFwIHN0cnVj dHVyZSwgeW91IGNhbiBjaGVjayBpdCBhdA0KPiArICogW2ljZV9hcWNfZ2V0X2xpbmtfc3RhdHVz LT5saW5rX3NwZWVkXS4gQ2FsbGVyIGNhbiBwYXNzIGluDQo+ICsgKiBsaW5rX3NwZWVkc19iaXRt YXAgaW5jbHVkZSBtdWx0aXBsZSBzcGVlZHMuDQo+ICsgKg0KPiArICogRWFjaCBlbnRyeSBpbiB0 aGlzIFtwaHlfdHlwZV9sb3csIHBoeV90eXBlX2hpZ2hdIHN0cnVjdHVyZSB3aWxsDQo+ICsgKiBw cmVzZW50IGEgY2VydGFpbiBsaW5rIHNwZWVkLiBUaGlzIGhlbHBlciBmdW5jdGlvbiB3aWxsIHR1 cm4gb24gYml0cw0KPiArICogaW4gW3BoeV90eXBlX2xvdywgcGh5X3R5cGVfaGlnaF0gc3RydWN0 dXJlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZg0KPiArICogbGlua19zcGVlZHNfYml0bWFwIGlucHV0 IHBhcmFtZXRlci4NCj4gKyAqLw0KPiArdm9pZA0KPiAraWNlX3VwZGF0ZV9waHlfdHlwZSh1NjQg KnBoeV90eXBlX2xvdywgdTY0ICpwaHlfdHlwZV9oaWdoLA0KPiArCQkgICAgdTE2IGxpbmtfc3Bl ZWRzX2JpdG1hcCkNCj4gK3sNCj4gKwl1MTYgc3BlZWQgPSBJQ0VfQVFfTElOS19TUEVFRF9VTktO T1dOOw0KPiArCXU2NCBwdF9oaWdoOw0KPiArCXU2NCBwdF9sb3c7DQo+ICsJaW50IGluZGV4Ow0K PiArDQo+ICsJLyogV2UgZmlyc3QgY2hlY2sgd2l0aCBsb3cgcGFydCBvZiBwaHlfdHlwZSAqLw0K PiArCWZvciAoaW5kZXggPSAwOyBpbmRleCA8PSBJQ0VfUEhZX1RZUEVfTE9XX01BWF9JTkRFWDsg aW5kZXgrKykgew0KPiArCQlwdF9sb3cgPSBCSVRfVUxMKGluZGV4KTsNCj4gKwkJc3BlZWQgPSBp Y2VfZ2V0X2xpbmtfc3BlZWRfYmFzZWRfb25fcGh5X3R5cGUocHRfbG93LCAwKTsNCj4gKw0KPiAr CQlpZiAobGlua19zcGVlZHNfYml0bWFwICYgc3BlZWQpDQo+ICsJCQkqcGh5X3R5cGVfbG93IHw9 IEJJVF9VTEwoaW5kZXgpOw0KPiArCX0NCj4gKw0KPiArCS8qIFdlIHRoZW4gY2hlY2sgd2l0aCBo aWdoIHBhcnQgb2YgcGh5X3R5cGUgKi8NCj4gKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPD0gSUNF X1BIWV9UWVBFX0hJR0hfTUFYX0lOREVYOyBpbmRleCsrKSB7DQo+ICsJCXB0X2hpZ2ggPSBCSVRf VUxMKGluZGV4KTsNCj4gKwkJc3BlZWQgPSBpY2VfZ2V0X2xpbmtfc3BlZWRfYmFzZWRfb25fcGh5 X3R5cGUoMCwgcHRfaGlnaCk7DQo+ICsNCj4gKwkJaWYgKGxpbmtfc3BlZWRzX2JpdG1hcCAmIHNw ZWVkKQ0KPiArCQkJKnBoeV90eXBlX2hpZ2ggfD0gQklUX1VMTChpbmRleCk7DQo+ICsJfQ0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9hcV9zZXRfcGh5X2NmZw0KPiArICogQGh3OiBwb2lu dGVyIHRvIHRoZSBodyBzdHJ1Y3QNCj4gKyAqIEBscG9ydDogbG9naWNhbCBwb3J0IG51bWJlcg0K PiArICogQGNmZzogc3RydWN0dXJlIHdpdGggUEhZIGNvbmZpZ3VyYXRpb24gZGF0YSB0byBiZSBz ZXQNCj4gKyAqIEBjZDogcG9pbnRlciB0byBjb21tYW5kIGRldGFpbHMgc3RydWN0dXJlIG9yIE5V TEwNCj4gKyAqDQo+ICsgKiBTZXQgdGhlIHZhcmlvdXMgUEhZIGNvbmZpZ3VyYXRpb24gcGFyYW1l dGVycyBzdXBwb3J0ZWQgb24gdGhlIFBvcnQuDQo+ICsgKiBPbmUgb3IgbW9yZSBvZiB0aGUgU2V0 IFBIWSBjb25maWcgcGFyYW1ldGVycyBtYXkgYmUgaWdub3JlZCBpbiBhbiBNRlANCj4gKyAqIG1v ZGUgYXMgdGhlIFBGIG1heSBub3QgaGF2ZSB0aGUgcHJpdmlsZWdlIHRvIHNldCBzb21lIG9mIHRo ZSBQSFkgQ29uZmlnDQo+ICsgKiBwYXJhbWV0ZXJzLiBUaGlzIHN0YXR1cyB3aWxsIGJlIGluZGlj YXRlZCBieSB0aGUgY29tbWFuZCByZXNwb25zZSAoMHgwNjAxKS4NCj4gKyAqLw0KPiArZW51bSBp Y2Vfc3RhdHVzDQo+ICtpY2VfYXFfc2V0X3BoeV9jZmcoc3RydWN0IGljZV9odyAqaHcsIHU4IGxw b3J0LA0KPiArCQkgICBzdHJ1Y3QgaWNlX2FxY19zZXRfcGh5X2NmZ19kYXRhICpjZmcsIHN0cnVj dCBpY2Vfc3FfY2QgKmNkKQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFfZGVzYyBkZXNjOw0KPiAr DQo+ICsJaWYgKCFjZmcpDQo+ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFNOw0KDQo9PSBOVUxMDQoN Cj4gKw0KPiArCWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBpY2VfYXFjX29w Y19zZXRfcGh5X2NmZyk7DQo+ICsJZGVzYy5wYXJhbXMuc2V0X3BoeS5scG9ydF9udW0gPSBscG9y dDsNCj4gKwlkZXNjLmZsYWdzIHw9IENQVV9UT19MRTE2KElDRV9BUV9GTEFHX1JEKTsNCj4gKw0K PiArCXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZkZXNjLCBjZmcsIHNpemVvZigqY2ZnKSwg Y2QpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV91cGRhdGVfbGlua19pbmZvIC0gdXBk YXRlIHN0YXR1cyBvZiB0aGUgSFcgbmV0d29yayBsaW5rDQo+ICsgKiBAcGk6IHBvcnQgaW5mbyBz dHJ1Y3R1cmUgb2YgdGhlIGludGVyZXN0ZWQgbG9naWNhbCBwb3J0DQo+ICsgKi8NCj4gK2VudW0g aWNlX3N0YXR1cyBpY2VfdXBkYXRlX2xpbmtfaW5mbyhzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGkp DQo+ICt7DQo+ICsJc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKnBjYXBzOw0KPiAr CXN0cnVjdCBpY2VfcGh5X2luZm8gKnBoeV9pbmZvOw0KPiArCWVudW0gaWNlX3N0YXR1cyBzdGF0 dXM7DQo+ICsJc3RydWN0IGljZV9odyAqaHc7DQo+ICsNCj4gKwlpZiAoIXBpKQ0KPiArCQlyZXR1 cm4gSUNFX0VSUl9QQVJBTTsNCg0KPT0gTlVMTA0KDQo+ICsNCj4gKwlodyA9IHBpLT5odzsNCj4g Kw0KPiArCXBjYXBzID0gKHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICopDQo+ICsJ CWljZV9tYWxsb2MoaHcsIHNpemVvZigqcGNhcHMpKTsNCg0KTm8gY2FzdCByZXF1aXJlZC4NCg0K PiArCWlmICghcGNhcHMpDQo+ICsJCXJldHVybiBJQ0VfRVJSX05PX01FTU9SWTsNCg0KPT0gTlVM TA0KDQo+ICsNCj4gKwlwaHlfaW5mbyA9ICZwaS0+cGh5Ow0KPiArCXN0YXR1cyA9IGljZV9hcV9n ZXRfbGlua19pbmZvKHBpLCB0cnVlLCBOVUxMLCBOVUxMKTsNCj4gKwlpZiAoc3RhdHVzKQ0KPiAr CQlnb3RvIG91dDsNCj4gKw0KPiArCWlmIChwaHlfaW5mby0+bGlua19pbmZvLmxpbmtfaW5mbyAm IElDRV9BUV9NRURJQV9BVkFJTEFCTEUpIHsNCj4gKwkJc3RhdHVzID0gaWNlX2FxX2dldF9waHlf Y2FwcyhwaSwgZmFsc2UsIElDRV9BUUNfUkVQT1JUX1NXX0NGRywNCj4gKwkJCQkJICAgICBwY2Fw cywgTlVMTCk7DQo+ICsJCWlmIChzdGF0dXMpDQo+ICsJCQlnb3RvIG91dDsNCj4gKw0KPiArCQlp Y2VfbWVtY3B5KHBoeV9pbmZvLT5saW5rX2luZm8ubW9kdWxlX3R5cGUsICZwY2Fwcy0+bW9kdWxl X3R5cGUsDQo+ICsJCQkgICBzaXplb2YocGh5X2luZm8tPmxpbmtfaW5mby5tb2R1bGVfdHlwZSks DQo+ICsJCQkgICBJQ0VfTk9ORE1BX1RPX05PTkRNQSk7DQo+ICsJfQ0KPiArb3V0Og0KPiArCWlj ZV9mcmVlKGh3LCBwY2Fwcyk7DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgKiBpY2Vfc2V0X2ZjDQo+ICsgKiBAcGk6IHBvcnQgaW5mb3JtYXRpb24gc3RydWN0dXJl DQo+ICsgKiBAYXFfZmFpbHVyZXM6IHBvaW50ZXIgdG8gc3RhdHVzIGNvZGUsIHNwZWNpZmljIHRv IGljZV9zZXRfZmMgcm91dGluZQ0KPiArICogQGVuYV9hdXRvX2xpbmtfdXBkYXRlOiBlbmFibGUg YXV0b21hdGljIGxpbmsgdXBkYXRlDQo+ICsgKg0KPiArICogU2V0IHRoZSByZXF1ZXN0ZWQgZmxv dyBjb250cm9sIG1vZGUuDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3NldF9m YyhzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIHU4ICphcV9mYWlsdXJlcywgYm9vbCBlbmFfYXV0 b19saW5rX3VwZGF0ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgaWNlX2FxY19zZXRfcGh5X2NmZ19kYXRh IGNmZyA9IHsgMCB9Ow0KPiArCXN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpwY2Fw czsNCj4gKwllbnVtIGljZV9zdGF0dXMgc3RhdHVzOw0KPiArCXU4IHBhdXNlX21hc2sgPSAweDA7 DQo+ICsJc3RydWN0IGljZV9odyAqaHc7DQo+ICsNCj4gKwlpZiAoIXBpKQ0KPiArCQlyZXR1cm4g SUNFX0VSUl9QQVJBTTsNCg0KPT0gTlVMTA0KDQo+ICsJaHcgPSBwaS0+aHc7DQo+ICsJKmFxX2Zh aWx1cmVzID0gSUNFX1NFVF9GQ19BUV9GQUlMX05PTkU7DQo+ICsNCj4gKwlzd2l0Y2ggKHBpLT5m Yy5yZXFfbW9kZSkgew0KPiArCWNhc2UgSUNFX0ZDX0ZVTEw6DQo+ICsJCXBhdXNlX21hc2sgfD0g SUNFX0FRQ19QSFlfRU5fVFhfTElOS19QQVVTRTsNCj4gKwkJcGF1c2VfbWFzayB8PSBJQ0VfQVFD X1BIWV9FTl9SWF9MSU5LX1BBVVNFOw0KPiArCQlicmVhazsNCj4gKwljYXNlIElDRV9GQ19SWF9Q QVVTRToNCj4gKwkJcGF1c2VfbWFzayB8PSBJQ0VfQVFDX1BIWV9FTl9SWF9MSU5LX1BBVVNFOw0K PiArCQlicmVhazsNCj4gKwljYXNlIElDRV9GQ19UWF9QQVVTRToNCj4gKwkJcGF1c2VfbWFzayB8 PSBJQ0VfQVFDX1BIWV9FTl9UWF9MSU5LX1BBVVNFOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0 Og0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlwY2FwcyA9IChzdHJ1Y3QgaWNlX2FxY19n ZXRfcGh5X2NhcHNfZGF0YSAqKQ0KPiArCQlpY2VfbWFsbG9jKGh3LCBzaXplb2YoKnBjYXBzKSk7 DQoNCk5vIGNhc3QgcmVxdWlyZWQuDQoNCj4gKwlpZiAoIXBjYXBzKQ0KPiArCQlyZXR1cm4gSUNF X0VSUl9OT19NRU1PUlk7DQoNCj09IE5VTEwNCg0KPiArDQo+ICsJLyogR2V0IHRoZSBjdXJyZW50 IHBoeSBjb25maWcgKi8NCj4gKwlzdGF0dXMgPSBpY2VfYXFfZ2V0X3BoeV9jYXBzKHBpLCBmYWxz ZSwgSUNFX0FRQ19SRVBPUlRfU1dfQ0ZHLCBwY2FwcywNCj4gKwkJCQkgICAgIE5VTEwpOw0KPiAr CWlmIChzdGF0dXMpIHsNCj4gKwkJKmFxX2ZhaWx1cmVzID0gSUNFX1NFVF9GQ19BUV9GQUlMX0dF VDsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiArDQo+ICsJLyogY2xlYXIgdGhlIG9sZCBwYXVz ZSBzZXR0aW5ncyAqLw0KPiArCWNmZy5jYXBzID0gcGNhcHMtPmNhcHMgJiB+KElDRV9BUUNfUEhZ X0VOX1RYX0xJTktfUEFVU0UgfA0KPiArCQkJCSAgIElDRV9BUUNfUEhZX0VOX1JYX0xJTktfUEFV U0UpOw0KPiArCS8qIHNldCB0aGUgbmV3IGNhcGFiaWxpdGllcyAqLw0KPiArCWNmZy5jYXBzIHw9 IHBhdXNlX21hc2s7DQo+ICsJLyogSWYgdGhlIGNhcGFiaWxpdGllcyBoYXZlIGNoYW5nZWQsIHRo ZW4gc2V0IHRoZSBuZXcgY29uZmlnICovDQo+ICsJaWYgKGNmZy5jYXBzICE9IHBjYXBzLT5jYXBz KSB7DQo+ICsJCWludCByZXRyeV9jb3VudCwgcmV0cnlfbWF4ID0gMTA7DQo+ICsNCj4gKwkJLyog QXV0byByZXN0YXJ0IGxpbmsgc28gc2V0dGluZ3MgdGFrZSBlZmZlY3QgKi8NCj4gKwkJaWYgKGVu YV9hdXRvX2xpbmtfdXBkYXRlKQ0KPiArCQkJY2ZnLmNhcHMgfD0gSUNFX0FRX1BIWV9FTkFfQVVU T19MSU5LX1VQRFQ7DQo+ICsJCS8qIENvcHkgb3ZlciBhbGwgdGhlIG9sZCBzZXR0aW5ncyAqLw0K PiArCQljZmcucGh5X3R5cGVfaGlnaCA9IHBjYXBzLT5waHlfdHlwZV9oaWdoOw0KPiArCQljZmcu cGh5X3R5cGVfbG93ID0gcGNhcHMtPnBoeV90eXBlX2xvdzsNCj4gKwkJY2ZnLmxvd19wb3dlcl9j dHJsID0gcGNhcHMtPmxvd19wb3dlcl9jdHJsOw0KPiArCQljZmcuZWVlX2NhcCA9IHBjYXBzLT5l ZWVfY2FwOw0KPiArCQljZmcuZWVlcl92YWx1ZSA9IHBjYXBzLT5lZWVyX3ZhbHVlOw0KPiArCQlj ZmcubGlua19mZWNfb3B0ID0gcGNhcHMtPmxpbmtfZmVjX29wdGlvbnM7DQo+ICsNCj4gKwkJc3Rh dHVzID0gaWNlX2FxX3NldF9waHlfY2ZnKGh3LCBwaS0+bHBvcnQsICZjZmcsIE5VTEwpOw0KPiAr CQlpZiAoc3RhdHVzKSB7DQo+ICsJCQkqYXFfZmFpbHVyZXMgPSBJQ0VfU0VUX0ZDX0FRX0ZBSUxf U0VUOw0KPiArCQkJZ290byBvdXQ7DQo+ICsJCX0NCj4gKw0KPiArCQkvKiBVcGRhdGUgdGhlIGxp bmsgaW5mbw0KPiArCQkgKiBJdCBzb21ldGltZXMgdGFrZXMgYSByZWFsbHkgbG9uZyB0aW1lIGZv ciBsaW5rIHRvDQo+ICsJCSAqIGNvbWUgYmFjayBmcm9tIHRoZSBhdG9taWMgcmVzZXQuIFRodXMs IHdlIHdhaXQgYQ0KPiArCQkgKiBsaXR0bGUgYml0Lg0KPiArCQkgKi8NCj4gKwkJZm9yIChyZXRy eV9jb3VudCA9IDA7IHJldHJ5X2NvdW50IDwgcmV0cnlfbWF4OyByZXRyeV9jb3VudCsrKSB7DQo+ ICsJCQlzdGF0dXMgPSBpY2VfdXBkYXRlX2xpbmtfaW5mbyhwaSk7DQo+ICsNCj4gKwkJCWlmIChz dGF0dXMgPT0gSUNFX1NVQ0NFU1MpDQo+ICsJCQkJYnJlYWs7DQo+ICsNCj4gKwkJCWljZV9tc2Vj X2RlbGF5KDEwMCwgdHJ1ZSk7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAoc3RhdHVzKQ0KPiArCQkJ KmFxX2ZhaWx1cmVzID0gSUNFX1NFVF9GQ19BUV9GQUlMX1VQREFURTsNCj4gKwl9DQo+ICsNCj4g K291dDoNCj4gKwlpY2VfZnJlZShodywgcGNhcHMpOw0KPiArCXJldHVybiBzdGF0dXM7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2NvcHlfcGh5X2NhcHNfdG9fY2ZnIC0gQ29weSBQSFkg YWJpbGl0eSBkYXRhIHRvIGNvbmZpZ3VyYXRpb24gZGF0YQ0KPiArICogQGNhcHM6IFBIWSBhYmls aXR5IHN0cnVjdHVyZSB0byBjb3B5IGRhdGUgZnJvbQ0KPiArICogQGNmZzogUEhZIGNvbmZpZ3Vy YXRpb24gc3RydWN0dXJlIHRvIGNvcHkgZGF0YSB0bw0KPiArICoNCj4gKyAqIEhlbHBlciBmdW5j dGlvbiB0byBjb3B5IEFRQyBQSFkgZ2V0IGFiaWxpdHkgZGF0YSB0byBQSFkgc2V0IGNvbmZpZ3Vy YXRpb24NCj4gKyAqIGRhdGEgc3RydWN0dXJlDQo+ICsgKi8NCj4gK3ZvaWQNCj4gK2ljZV9jb3B5 X3BoeV9jYXBzX3RvX2NmZyhzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAqY2FwcywN Cj4gKwkJCSBzdHJ1Y3QgaWNlX2FxY19zZXRfcGh5X2NmZ19kYXRhICpjZmcpDQo+ICt7DQo+ICsJ aWYgKCFjYXBzIHx8ICFjZmcpDQo+ICsJCXJldHVybjsNCg0KPT0gTlVMTA0KDQo+ICsNCj4gKwlj ZmctPnBoeV90eXBlX2xvdyA9IGNhcHMtPnBoeV90eXBlX2xvdzsNCj4gKwljZmctPnBoeV90eXBl X2hpZ2ggPSBjYXBzLT5waHlfdHlwZV9oaWdoOw0KPiArCWNmZy0+Y2FwcyA9IGNhcHMtPmNhcHM7 DQo+ICsJY2ZnLT5sb3dfcG93ZXJfY3RybCA9IGNhcHMtPmxvd19wb3dlcl9jdHJsOw0KPiArCWNm Zy0+ZWVlX2NhcCA9IGNhcHMtPmVlZV9jYXA7DQo+ICsJY2ZnLT5lZWVyX3ZhbHVlID0gY2Fwcy0+ ZWVlcl92YWx1ZTsNCj4gKwljZmctPmxpbmtfZmVjX29wdCA9IGNhcHMtPmxpbmtfZmVjX29wdGlv bnM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2NmZ19waHlfZmVjIC0gQ29uZmlndXJl IFBIWSBGRUMgZGF0YSBiYXNlZCBvbiBGRUMgbW9kZQ0KPiArICogQGNmZzogUEhZIGNvbmZpZ3Vy YXRpb24gZGF0YSB0byBzZXQgRkVDIG1vZGUNCj4gKyAqIEBmZWM6IEZFQyBtb2RlIHRvIGNvbmZp Z3VyZQ0KPiArICoNCj4gKyAqIENhbGxlciBzaG91bGQgY29weSBpY2VfYXFjX2dldF9waHlfY2Fw c19kYXRhLmNhcHMgSUNFX0FRQ19QSFlfRU5fQVVUT19GRUMNCj4gKyAqIChiaXQgNykgYW5kIGlj ZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEubGlua19mZWNfb3B0aW9ucyB0byBjZmcuY2Fwcw0KPiAr ICogSUNFX0FRX1BIWV9FTkFfQVVUT19GRUMgKGJpdCA3KSBhbmQgY2ZnLmxpbmtfZmVjX29wdGlv bnMgYmVmb3JlIGNhbGxpbmcuDQo+ICsgKi8NCj4gK3ZvaWQNCj4gK2ljZV9jZmdfcGh5X2ZlYyhz dHJ1Y3QgaWNlX2FxY19zZXRfcGh5X2NmZ19kYXRhICpjZmcsIGVudW0gaWNlX2ZlY19tb2RlIGZl YykNCj4gK3sNCj4gKwlzd2l0Y2ggKGZlYykgew0KPiArCWNhc2UgSUNFX0ZFQ19CQVNFUjoNCj4g KwkJLyogQ2xlYXIgYXV0byBGRUMgYW5kIFJTIGJpdHMsIGFuZCBBTkQgQkFTRS1SIGFiaWxpdHkN Cj4gKwkJICogYml0cyBhbmQgT1IgcmVxdWVzdCBiaXRzLg0KPiArCQkgKi8NCj4gKwkJY2ZnLT5j YXBzICY9IH5JQ0VfQVFDX1BIWV9FTl9BVVRPX0ZFQzsNCj4gKwkJY2ZnLT5saW5rX2ZlY19vcHQg Jj0gSUNFX0FRQ19QSFlfRkVDXzEwR19LUl80MEdfS1I0X0VOIHwNCj4gKwkJCQkgICAgIElDRV9B UUNfUEhZX0ZFQ18yNUdfS1JfQ0xBVVNFNzRfRU47DQo+ICsJCWNmZy0+bGlua19mZWNfb3B0IHw9 IElDRV9BUUNfUEhZX0ZFQ18xMEdfS1JfNDBHX0tSNF9SRVEgfA0KPiArCQkJCSAgICAgSUNFX0FR Q19QSFlfRkVDXzI1R19LUl9SRVE7DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSUNFX0ZFQ19SUzoN Cj4gKwkJLyogQ2xlYXIgYXV0byBGRUMgYW5kIEJBU0UtUiBiaXRzLCBhbmQgQU5EIFJTIGFiaWxp dHkNCj4gKwkJICogYml0cyBhbmQgT1IgcmVxdWVzdCBiaXRzLg0KPiArCQkgKi8NCj4gKwkJY2Zn LT5jYXBzICY9IH5JQ0VfQVFDX1BIWV9FTl9BVVRPX0ZFQzsNCj4gKwkJY2ZnLT5saW5rX2ZlY19v cHQgJj0gSUNFX0FRQ19QSFlfRkVDXzI1R19SU19DTEFVU0U5MV9FTjsNCj4gKwkJY2ZnLT5saW5r X2ZlY19vcHQgfD0gSUNFX0FRQ19QSFlfRkVDXzI1R19SU181MjhfUkVRIHwNCj4gKwkJCQkgICAg IElDRV9BUUNfUEhZX0ZFQ18yNUdfUlNfNTQ0X1JFUTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJ Q0VfRkVDX05PTkU6DQo+ICsJCS8qIENsZWFyIGF1dG8gRkVDIGFuZCBhbGwgRkVDIG9wdGlvbiBi aXRzLiAqLw0KPiArCQljZmctPmNhcHMgJj0gfklDRV9BUUNfUEhZX0VOX0FVVE9fRkVDOw0KPiAr CQljZmctPmxpbmtfZmVjX29wdCAmPSB+SUNFX0FRQ19QSFlfRkVDX01BU0s7DQo+ICsJCWJyZWFr Ow0KPiArCWNhc2UgSUNFX0ZFQ19BVVRPOg0KPiArCQkvKiBBTkQgYXV0byBGRUMgYml0LCBhbmQg YWxsIGNhcHMgYml0cy4gKi8NCj4gKwkJY2ZnLT5jYXBzICY9IElDRV9BUUNfUEhZX0NBUFNfTUFT SzsNCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9nZXRf bGlua19zdGF0dXMgLSBnZXQgc3RhdHVzIG9mIHRoZSBIVyBuZXR3b3JrIGxpbmsNCj4gKyAqIEBw aTogcG9ydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gKyAqIEBsaW5rX3VwOiBwb2ludGVyIHRv IGJvb2wgKHRydWUvZmFsc2UgPSBsaW5rdXAvbGlua2Rvd24pDQo+ICsgKg0KPiArICogVmFyaWFi bGUgbGlua191cCBpcyB0cnVlIGlmIGxpbmsgaXMgdXAsIGZhbHNlIGlmIGxpbmsgaXMgZG93bi4N Cj4gKyAqIFRoZSB2YXJpYWJsZSBsaW5rX3VwIGlzIGludmFsaWQgaWYgc3RhdHVzIGlzIG5vbiB6 ZXJvLiBBcyBhDQo+ICsgKiByZXN1bHQgb2YgdGhpcyBjYWxsLCBsaW5rIHN0YXR1cyByZXBvcnRp bmcgYmVjb21lcyBlbmFibGVkDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfZ2V0X2xp bmtfc3RhdHVzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCAqbGlua191cCkNCj4gK3sN Cj4gKwlzdHJ1Y3QgaWNlX3BoeV9pbmZvICpwaHlfaW5mbzsNCj4gKwllbnVtIGljZV9zdGF0dXMg c3RhdHVzID0gSUNFX1NVQ0NFU1M7DQo+ICsNCj4gKwlpZiAoIXBpIHx8ICFsaW5rX3VwKQ0KPiAr CQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCg0KPT0gTlVMTA0KDQo+ICsNCj4gKwlwaHlfaW5mbyA9 ICZwaS0+cGh5Ow0KPiArDQo+ICsJaWYgKHBoeV9pbmZvLT5nZXRfbGlua19pbmZvKSB7DQo+ICsJ CXN0YXR1cyA9IGljZV91cGRhdGVfbGlua19pbmZvKHBpKTsNCj4gKw0KPiArCQlpZiAoc3RhdHVz KQ0KPiArCQkJaWNlX2RlYnVnKHBpLT5odywgSUNFX0RCR19MSU5LLA0KPiArCQkJCSAgImdldCBs aW5rIHN0YXR1cyBlcnJvciwgc3RhdHVzID0gJWRcbiIsDQo+ICsJCQkJICBzdGF0dXMpOw0KPiAr CX0NCj4gKw0KPiArCSpsaW5rX3VwID0gcGh5X2luZm8tPmxpbmtfaW5mby5saW5rX2luZm8gJiBJ Q0VfQVFfTElOS19VUDsNCj4gKw0KPiArCXJldHVybiBzdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICogaWNlX2FxX3NldF9saW5rX3Jlc3RhcnRfYW4NCj4gKyAqIEBwaTogcG9pbnRlciB0 byB0aGUgcG9ydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gKyAqIEBlbmFfbGluazogaWYgdHJ1 ZTogZW5hYmxlIGxpbmssIGlmIGZhbHNlOiBkaXNhYmxlIGxpbmsNCj4gKyAqIEBjZDogcG9pbnRl ciB0byBjb21tYW5kIGRldGFpbHMgc3RydWN0dXJlIG9yIE5VTEwNCj4gKyAqDQo+ICsgKiBTZXRz IHVwIHRoZSBsaW5rIGFuZCByZXN0YXJ0cyB0aGUgQXV0by1OZWdvdGlhdGlvbiBvdmVyIHRoZSBs aW5rLg0KPiArICovDQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9zZXRfbGlua19yZXN0 YXJ0X2FuKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBlbmFfbGluaywNCj4gKwkJCSAg IHN0cnVjdCBpY2Vfc3FfY2QgKmNkKQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFjX3Jlc3RhcnRf YW4gKmNtZDsNCj4gKwlzdHJ1Y3QgaWNlX2FxX2Rlc2MgZGVzYzsNCj4gKw0KPiArCWNtZCA9ICZk ZXNjLnBhcmFtcy5yZXN0YXJ0X2FuOw0KPiArDQo+ICsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21k X2Rlc2MoJmRlc2MsIGljZV9hcWNfb3BjX3Jlc3RhcnRfYW4pOw0KPiArDQo+ICsJY21kLT5jbWRf ZmxhZ3MgPSBJQ0VfQVFDX1JFU1RBUlRfQU5fTElOS19SRVNUQVJUOw0KPiArCWNtZC0+bHBvcnRf bnVtID0gcGktPmxwb3J0Ow0KPiArCWlmIChlbmFfbGluaykNCj4gKwkJY21kLT5jbWRfZmxhZ3Mg fD0gSUNFX0FRQ19SRVNUQVJUX0FOX0xJTktfRU5BQkxFOw0KPiArCWVsc2UNCj4gKwkJY21kLT5j bWRfZmxhZ3MgJj0gfklDRV9BUUNfUkVTVEFSVF9BTl9MSU5LX0VOQUJMRTsNCj4gKw0KPiArCXJl dHVybiBpY2VfYXFfc2VuZF9jbWQocGktPmh3LCAmZGVzYywgTlVMTCwgMCwgY2QpOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAqIGljZV9hcV9zZXRfZXZlbnRfbWFzaw0KPiArICogQGh3OiBwb2lu dGVyIHRvIHRoZSBodyBzdHJ1Y3QNCj4gKyAqIEBwb3J0X251bTogcG9ydCBudW1iZXIgb2YgdGhl IHBoeXNpY2FsIGZ1bmN0aW9uDQo+ICsgKiBAbWFzazogZXZlbnQgbWFzayB0byBiZSBzZXQNCj4g KyAqIEBjZDogcG9pbnRlciB0byBjb21tYW5kIGRldGFpbHMgc3RydWN0dXJlIG9yIE5VTEwNCj4g KyAqDQo+ICsgKiBTZXQgZXZlbnQgbWFzayAoMHgwNjEzKQ0KPiArICovDQo+ICtlbnVtIGljZV9z dGF0dXMNCj4gK2ljZV9hcV9zZXRfZXZlbnRfbWFzayhzdHJ1Y3QgaWNlX2h3ICpodywgdTggcG9y dF9udW0sIHUxNiBtYXNrLA0KPiArCQkgICAgICBzdHJ1Y3QgaWNlX3NxX2NkICpjZCkNCj4gK3sN Cj4gKwlzdHJ1Y3QgaWNlX2FxY19zZXRfZXZlbnRfbWFzayAqY21kOw0KPiArCXN0cnVjdCBpY2Vf YXFfZGVzYyBkZXNjOw0KPiArDQo+ICsJY21kID0gJmRlc2MucGFyYW1zLnNldF9ldmVudF9tYXNr Ow0KPiArDQo+ICsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21kX2Rlc2MoJmRlc2MsIGljZV9hcWNf b3BjX3NldF9ldmVudF9tYXNrKTsNCj4gKw0KPiArCWNtZC0+bHBvcnRfbnVtID0gcG9ydF9udW07 DQo+ICsNCj4gKwljbWQtPmV2ZW50X21hc2sgPSBDUFVfVE9fTEUxNihtYXNrKTsNCj4gKwlyZXR1 cm4gaWNlX2FxX3NlbmRfY21kKGh3LCAmZGVzYywgTlVMTCwgMCwgY2QpOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAqIGljZV9hcV9zZXRfbWFjX2xvb3BiYWNrDQo+ICsgKiBAaHc6IHBvaW50ZXIg dG8gdGhlIGh3IHN0cnVjdA0KPiArICogQGVuYV9scGJrOiBFbmFibGUgb3IgRGlzYWJsZSBsb29w YmFjaw0KPiArICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0YWlscyBzdHJ1Y3R1cmUgb3Ig TlVMTA0KPiArICoNCj4gKyAqIEVuYWJsZS9kaXNhYmxlIGxvb3BiYWNrIG9uIGEgZ2l2ZW4gcG9y dA0KPiArICovDQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9zZXRfbWFjX2xvb3BiYWNr KHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIGVuYV9scGJrLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZCkN Cj4gK3sNCj4gKwlzdHJ1Y3QgaWNlX2FxY19zZXRfbWFjX2xiICpjbWQ7DQo+ICsJc3RydWN0IGlj ZV9hcV9kZXNjIGRlc2M7DQo+ICsNCj4gKwljbWQgPSAmZGVzYy5wYXJhbXMuc2V0X21hY19sYjsN Cj4gKw0KPiArCWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBpY2VfYXFjX29w Y19zZXRfbWFjX2xiKTsNCj4gKwlpZiAoZW5hX2xwYmspDQo+ICsJCWNtZC0+bGJfbW9kZSA9IElD RV9BUV9NQUNfTEJfRU47DQo+ICsNCj4gKwlyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3LCAmZGVz YywgTlVMTCwgMCwgY2QpOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2FxX3Nl dF9wb3J0X2lkX2xlZA0KPiArICogQHBpOiBwb2ludGVyIHRvIHRoZSBwb3J0IGluZm9ybWF0aW9u DQo+ICsgKiBAaXNfb3JpZ19tb2RlOiBpcyB0aGlzIExFRCBzZXQgdG8gb3JpZ2luYWwgbW9kZSAo YnkgdGhlIG5ldC1saXN0KQ0KPiArICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0YWlscyBz dHJ1Y3R1cmUgb3IgTlVMTA0KPiArICoNCj4gKyAqIFNldCBMRUQgdmFsdWUgZm9yIHRoZSBnaXZl biBwb3J0ICgweDA2ZTkpDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX3Nl dF9wb3J0X2lkX2xlZChzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgaXNfb3JpZ19tb2Rl LA0KPiArCQkgICAgICAgc3RydWN0IGljZV9zcV9jZCAqY2QpDQo+ICt7DQo+ICsJc3RydWN0IGlj ZV9hcWNfc2V0X3BvcnRfaWRfbGVkICpjbWQ7DQo+ICsJc3RydWN0IGljZV9odyAqaHcgPSBwaS0+ aHc7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsNCj4gKwljbWQgPSAmZGVzYy5w YXJhbXMuc2V0X3BvcnRfaWRfbGVkOw0KPiArDQo+ICsJaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21k X2Rlc2MoJmRlc2MsIGljZV9hcWNfb3BjX3NldF9wb3J0X2lkX2xlZCk7DQo+ICsNCj4gKw0KPiAr CWlmIChpc19vcmlnX21vZGUpDQo+ICsJCWNtZC0+aWRlbnRfbW9kZSA9IElDRV9BUUNfUE9SVF9J REVOVF9MRURfT1JJRzsNCj4gKwllbHNlDQo+ICsJCWNtZC0+aWRlbnRfbW9kZSA9IElDRV9BUUNf UE9SVF9JREVOVF9MRURfQkxJTks7DQo+ICsNCj4gKwlyZXR1cm4gaWNlX2FxX3NlbmRfY21kKGh3 LCAmZGVzYywgTlVMTCwgMCwgY2QpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIF9faWNlX2Fx X2dldF9zZXRfcnNzX2x1dA0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1 Y3R1cmUNCj4gKyAqIEB2c2lfaWQ6IFZTSSBGVyBpbmRleA0KPiArICogQGx1dF90eXBlOiBMVVQg dGFibGUgdHlwZQ0KPiArICogQGx1dDogcG9pbnRlciB0byB0aGUgTFVUIGJ1ZmZlciBwcm92aWRl ZCBieSB0aGUgY2FsbGVyDQo+ICsgKiBAbHV0X3NpemU6IHNpemUgb2YgdGhlIExVVCBidWZmZXIN Cj4gKyAqIEBnbG9iX2x1dF9pZHg6IGdsb2JhbCBMVVQgaW5kZXgNCj4gKyAqIEBzZXQ6IHNldCB0 cnVlIHRvIHNldCB0aGUgdGFibGUsIGZhbHNlIHRvIGdldCB0aGUgdGFibGUNCj4gKyAqDQo+ICsg KiBJbnRlcm5hbCBmdW5jdGlvbiB0byBnZXQgKDB4MEIwNSkgb3Igc2V0ICgweDBCMDMpIFJTUyBs b29rIHVwIHRhYmxlDQo+ICsgKi8NCj4gK3N0YXRpYyBlbnVtIGljZV9zdGF0dXMNCj4gK19faWNl X2FxX2dldF9zZXRfcnNzX2x1dChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IHZzaV9pZCwgdTggbHV0 X3R5cGUsIHU4ICpsdXQsDQo+ICsJCQkgdTE2IGx1dF9zaXplLCB1OCBnbG9iX2x1dF9pZHgsIGJv b2wgc2V0KQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFjX2dldF9zZXRfcnNzX2x1dCAqY21kX3Jl c3A7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0 YXR1czsNCj4gKwl1MTYgZmxhZ3MgPSAwOw0KPiArDQo+ICsJY21kX3Jlc3AgPSAmZGVzYy5wYXJh bXMuZ2V0X3NldF9yc3NfbHV0Ow0KPiArDQo+ICsJaWYgKHNldCkgew0KPiArCQlpY2VfZmlsbF9k Zmx0X2RpcmVjdF9jbWRfZGVzYygmZGVzYywgaWNlX2FxY19vcGNfc2V0X3Jzc19sdXQpOw0KPiAr CQlkZXNjLmZsYWdzIHw9IENQVV9UT19MRTE2KElDRV9BUV9GTEFHX1JEKTsNCj4gKwl9IGVsc2Ug ew0KPiArCQlpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYygmZGVzYywgaWNlX2FxY19vcGNf Z2V0X3Jzc19sdXQpOw0KPiArCX0NCj4gKw0KPiArCWNtZF9yZXNwLT52c2lfaWQgPSBDUFVfVE9f TEUxNigoKHZzaV9pZCA8PA0KPiArCQkJCQkgSUNFX0FRQ19HU0VUX1JTU19MVVRfVlNJX0lEX1Mp ICYNCj4gKwkJCQkJSUNFX0FRQ19HU0VUX1JTU19MVVRfVlNJX0lEX00pIHwNCj4gKwkJCQkgICAg ICAgSUNFX0FRQ19HU0VUX1JTU19MVVRfVlNJX1ZBTElEKTsNCj4gKw0KPiArCXN3aXRjaCAobHV0 X3R5cGUpIHsNCj4gKwljYXNlIElDRV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1RZUEVfVlNJOg0K PiArCWNhc2UgSUNFX0FRQ19HU0VUX1JTU19MVVRfVEFCTEVfVFlQRV9QRjoNCj4gKwljYXNlIElD RV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1RZUEVfR0xPQkFMOg0KPiArCQlmbGFncyB8PSAoKGx1 dF90eXBlIDw8IElDRV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1RZUEVfUykgJg0KPiArCQkJICBJ Q0VfQVFDX0dTRVRfUlNTX0xVVF9UQUJMRV9UWVBFX00pOw0KPiArCQlicmVhazsNCj4gKwlkZWZh dWx0Og0KPiArCQlzdGF0dXMgPSBJQ0VfRVJSX1BBUkFNOw0KPiArCQlnb3RvIGljZV9hcV9nZXRf c2V0X3Jzc19sdXRfZXhpdDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAobHV0X3R5cGUgPT0gSUNFX0FR Q19HU0VUX1JTU19MVVRfVEFCTEVfVFlQRV9HTE9CQUwpIHsNCj4gKwkJZmxhZ3MgfD0gKChnbG9i X2x1dF9pZHggPDwgSUNFX0FRQ19HU0VUX1JTU19MVVRfR0xPQkFMX0lEWF9TKSAmDQo+ICsJCQkg IElDRV9BUUNfR1NFVF9SU1NfTFVUX0dMT0JBTF9JRFhfTSk7DQo+ICsNCj4gKwkJaWYgKCFzZXQp DQo+ICsJCQlnb3RvIGljZV9hcV9nZXRfc2V0X3Jzc19sdXRfc2VuZDsNCj4gKwl9IGVsc2UgaWYg KGx1dF90eXBlID09IElDRV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1RZUEVfUEYpIHsNCj4gKwkJ aWYgKCFzZXQpDQo+ICsJCQlnb3RvIGljZV9hcV9nZXRfc2V0X3Jzc19sdXRfc2VuZDsNCj4gKwl9 IGVsc2Ugew0KPiArCQlnb3RvIGljZV9hcV9nZXRfc2V0X3Jzc19sdXRfc2VuZDsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBMVVQgc2l6ZSBpcyBvbmx5IHZhbGlkIGZvciBHbG9iYWwgYW5kIFBGIHRhYmxl IHR5cGVzICovDQo+ICsJc3dpdGNoIChsdXRfc2l6ZSkgew0KPiArCWNhc2UgSUNFX0FRQ19HU0VU X1JTU19MVVRfVEFCTEVfU0laRV8xMjg6DQo+ICsJCWZsYWdzIHw9IChJQ0VfQVFDX0dTRVRfUlNT X0xVVF9UQUJMRV9TSVpFXzEyOF9GTEFHIDw8DQo+ICsJCQkgIElDRV9BUUNfR1NFVF9SU1NfTFVU X1RBQkxFX1NJWkVfUykgJg0KPiArCQkJIElDRV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1NJWkVf TTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJQ0VfQVFDX0dTRVRfUlNTX0xVVF9UQUJMRV9TSVpF XzUxMjoNCj4gKwkJZmxhZ3MgfD0gKElDRV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1NJWkVfNTEy X0ZMQUcgPDwNCj4gKwkJCSAgSUNFX0FRQ19HU0VUX1JTU19MVVRfVEFCTEVfU0laRV9TKSAmDQo+ ICsJCQkgSUNFX0FRQ19HU0VUX1JTU19MVVRfVEFCTEVfU0laRV9NOw0KPiArCQlicmVhazsNCj4g KwljYXNlIElDRV9BUUNfR1NFVF9SU1NfTFVUX1RBQkxFX1NJWkVfMks6DQo+ICsJCWlmIChsdXRf dHlwZSA9PSBJQ0VfQVFDX0dTRVRfUlNTX0xVVF9UQUJMRV9UWVBFX1BGKSB7DQo+ICsJCQlmbGFn cyB8PSAoSUNFX0FRQ19HU0VUX1JTU19MVVRfVEFCTEVfU0laRV8yS19GTEFHIDw8DQo+ICsJCQkJ ICBJQ0VfQVFDX0dTRVRfUlNTX0xVVF9UQUJMRV9TSVpFX1MpICYNCj4gKwkJCQkgSUNFX0FRQ19H U0VUX1JTU19MVVRfVEFCTEVfU0laRV9NOw0KPiArCQkJYnJlYWs7DQo+ICsJCX0NCj4gKwkJLyog ZmFsbC10aHJvdWdoICovDQo+ICsJZGVmYXVsdDoNCj4gKwkJc3RhdHVzID0gSUNFX0VSUl9QQVJB TTsNCj4gKwkJZ290byBpY2VfYXFfZ2V0X3NldF9yc3NfbHV0X2V4aXQ7DQo+ICsJfQ0KPiArDQo+ ICtpY2VfYXFfZ2V0X3NldF9yc3NfbHV0X3NlbmQ6DQo+ICsJY21kX3Jlc3AtPmZsYWdzID0gQ1BV X1RPX0xFMTYoZmxhZ3MpOw0KPiArCXN0YXR1cyA9IGljZV9hcV9zZW5kX2NtZChodywgJmRlc2Ms IGx1dCwgbHV0X3NpemUsIE5VTEwpOw0KPiArDQo+ICtpY2VfYXFfZ2V0X3NldF9yc3NfbHV0X2V4 aXQ6DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfYXFf Z2V0X3Jzc19sdXQNCj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJl DQo+ICsgKiBAdnNpX2hhbmRsZTogc29mdHdhcmUgVlNJIGhhbmRsZQ0KPiArICogQGx1dF90eXBl OiBMVVQgdGFibGUgdHlwZQ0KPiArICogQGx1dDogcG9pbnRlciB0byB0aGUgTFVUIGJ1ZmZlciBw cm92aWRlZCBieSB0aGUgY2FsbGVyDQo+ICsgKiBAbHV0X3NpemU6IHNpemUgb2YgdGhlIExVVCBi dWZmZXINCj4gKyAqDQo+ICsgKiBnZXQgdGhlIFJTUyBsb29rdXAgdGFibGUsIFBGIG9yIFZTSSB0 eXBlDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX2dldF9yc3NfbHV0KHN0 cnVjdCBpY2VfaHcgKmh3LCB1MTYgdnNpX2hhbmRsZSwgdTggbHV0X3R5cGUsDQo+ICsJCSAgIHU4 ICpsdXQsIHUxNiBsdXRfc2l6ZSkNCj4gK3sNCj4gKwlpZiAoIWljZV9pc192c2lfdmFsaWQoaHcs IHZzaV9oYW5kbGUpIHx8ICFsdXQpDQo+ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFNOw0KPiArDQo+ ICsJcmV0dXJuIF9faWNlX2FxX2dldF9zZXRfcnNzX2x1dChodywgaWNlX2dldF9od192c2lfbnVt KGh3LCB2c2lfaGFuZGxlKSwNCj4gKwkJCQkJbHV0X3R5cGUsIGx1dCwgbHV0X3NpemUsIDAsIGZh bHNlKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfYXFfc2V0X3Jzc19sdXQNCj4gKyAq IEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlDQo+ICsgKiBAdnNpX2hhbmRs ZTogc29mdHdhcmUgVlNJIGhhbmRsZQ0KPiArICogQGx1dF90eXBlOiBMVVQgdGFibGUgdHlwZQ0K PiArICogQGx1dDogcG9pbnRlciB0byB0aGUgTFVUIGJ1ZmZlciBwcm92aWRlZCBieSB0aGUgY2Fs bGVyDQo+ICsgKiBAbHV0X3NpemU6IHNpemUgb2YgdGhlIExVVCBidWZmZXINCj4gKyAqDQo+ICsg KiBzZXQgdGhlIFJTUyBsb29rdXAgdGFibGUsIFBGIG9yIFZTSSB0eXBlDQo+ICsgKi8NCj4gK2Vu dW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX3NldF9yc3NfbHV0KHN0cnVjdCBpY2VfaHcgKmh3LCB1 MTYgdnNpX2hhbmRsZSwgdTggbHV0X3R5cGUsDQo+ICsJCSAgIHU4ICpsdXQsIHUxNiBsdXRfc2l6 ZSkNCj4gK3sNCj4gKwlpZiAoIWljZV9pc192c2lfdmFsaWQoaHcsIHZzaV9oYW5kbGUpIHx8ICFs dXQpDQoNCj09IE5VTEwNCg0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCXJl dHVybiBfX2ljZV9hcV9nZXRfc2V0X3Jzc19sdXQoaHcsIGljZV9nZXRfaHdfdnNpX251bShodywg dnNpX2hhbmRsZSksDQo+ICsJCQkJCWx1dF90eXBlLCBsdXQsIGx1dF9zaXplLCAwLCB0cnVlKTsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBfX2ljZV9hcV9nZXRfc2V0X3Jzc19rZXkNCj4gKyAq IEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0DQo+ICsgKiBAdnNpX2lkOiBWU0kgRlcgaW5k ZXgNCj4gKyAqIEBrZXk6IHBvaW50ZXIgdG8ga2V5IGluZm8gc3RydWN0DQo+ICsgKiBAc2V0OiBz ZXQgdHJ1ZSB0byBzZXQgdGhlIGtleSwgZmFsc2UgdG8gZ2V0IHRoZSBrZXkNCj4gKyAqDQo+ICsg KiBnZXQgKDB4MEIwNCkgb3Igc2V0ICgweDBCMDIpIHRoZSBSU1Mga2V5IHBlciBWU0kNCj4gKyAq Lw0KPiArc3RhdGljIGVudW0NCj4gK2ljZV9zdGF0dXMgX19pY2VfYXFfZ2V0X3NldF9yc3Nfa2V5 KHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgdnNpX2lkLA0KPiArCQkJCSAgICBzdHJ1Y3QgaWNlX2Fx Y19nZXRfc2V0X3Jzc19rZXlzICprZXksDQo+ICsJCQkJICAgIGJvb2wgc2V0KQ0KPiArew0KPiAr CXN0cnVjdCBpY2VfYXFjX2dldF9zZXRfcnNzX2tleSAqY21kX3Jlc3A7DQo+ICsJdTE2IGtleV9z aXplID0gc2l6ZW9mKCprZXkpOw0KPiArCXN0cnVjdCBpY2VfYXFfZGVzYyBkZXNjOw0KPiArDQo+ ICsJY21kX3Jlc3AgPSAmZGVzYy5wYXJhbXMuZ2V0X3NldF9yc3Nfa2V5Ow0KPiArDQo+ICsJaWYg KHNldCkgew0KPiArCQlpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRfZGVzYygmZGVzYywgaWNlX2Fx Y19vcGNfc2V0X3Jzc19rZXkpOw0KPiArCQlkZXNjLmZsYWdzIHw9IENQVV9UT19MRTE2KElDRV9B UV9GTEFHX1JEKTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpY2VfZmlsbF9kZmx0X2RpcmVjdF9jbWRf ZGVzYygmZGVzYywgaWNlX2FxY19vcGNfZ2V0X3Jzc19rZXkpOw0KPiArCX0NCj4gKw0KPiArCWNt ZF9yZXNwLT52c2lfaWQgPSBDUFVfVE9fTEUxNigoKHZzaV9pZCA8PA0KPiArCQkJCQkgSUNFX0FR Q19HU0VUX1JTU19LRVlfVlNJX0lEX1MpICYNCj4gKwkJCQkJSUNFX0FRQ19HU0VUX1JTU19LRVlf VlNJX0lEX00pIHwNCj4gKwkJCQkgICAgICAgSUNFX0FRQ19HU0VUX1JTU19LRVlfVlNJX1ZBTElE KTsNCj4gKw0KPiArCXJldHVybiBpY2VfYXFfc2VuZF9jbWQoaHcsICZkZXNjLCBrZXksIGtleV9z aXplLCBOVUxMKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfYXFfZ2V0X3Jzc19rZXkN Cj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0DQo+ICsgKiBAdnNpX2hhbmRsZTog c29mdHdhcmUgVlNJIGhhbmRsZQ0KPiArICogQGtleTogcG9pbnRlciB0byBrZXkgaW5mbyBzdHJ1 Y3QNCj4gKyAqDQo+ICsgKiBnZXQgdGhlIFJTUyBrZXkgcGVyIFZTSQ0KPiArICovDQo+ICtlbnVt IGljZV9zdGF0dXMNCj4gK2ljZV9hcV9nZXRfcnNzX2tleShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2 IHZzaV9oYW5kbGUsDQo+ICsJCSAgIHN0cnVjdCBpY2VfYXFjX2dldF9zZXRfcnNzX2tleXMgKmtl eSkNCj4gK3sNCj4gKwlpZiAoIWljZV9pc192c2lfdmFsaWQoaHcsIHZzaV9oYW5kbGUpIHx8ICFr ZXkpDQo9PSBOVUxMDQo+ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFNOw0KPiArDQo+ICsJcmV0dXJu IF9faWNlX2FxX2dldF9zZXRfcnNzX2tleShodywgaWNlX2dldF9od192c2lfbnVtKGh3LCB2c2lf aGFuZGxlKSwNCj4gKwkJCQkJa2V5LCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog aWNlX2FxX3NldF9yc3Nfa2V5DQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdA0K PiArICogQHZzaV9oYW5kbGU6IHNvZnR3YXJlIFZTSSBoYW5kbGUNCj4gKyAqIEBrZXlzOiBwb2lu dGVyIHRvIGtleSBpbmZvIHN0cnVjdA0KPiArICoNCj4gKyAqIHNldCB0aGUgUlNTIGtleSBwZXIg VlNJDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX3NldF9yc3Nfa2V5KHN0 cnVjdCBpY2VfaHcgKmh3LCB1MTYgdnNpX2hhbmRsZSwNCj4gKwkJICAgc3RydWN0IGljZV9hcWNf Z2V0X3NldF9yc3Nfa2V5cyAqa2V5cykNCj4gK3sNCj4gKwlpZiAoIWljZV9pc192c2lfdmFsaWQo aHcsIHZzaV9oYW5kbGUpIHx8ICFrZXlzKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj09 IE5VTEwNCj4gKw0KPiArCXJldHVybiBfX2ljZV9hcV9nZXRfc2V0X3Jzc19rZXkoaHcsIGljZV9n ZXRfaHdfdnNpX251bShodywgdnNpX2hhbmRsZSksDQo+ICsJCQkJCWtleXMsIHRydWUpOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV9hcV9hZGRfbGFuX3R4cQ0KPiArICogQGh3OiBwb2lu dGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUNCj4gKyAqIEBudW1fcWdycHM6IE51bWJlciBv ZiBhZGRlZCBxdWV1ZSBncm91cHMNCj4gKyAqIEBxZ19saXN0OiBsaXN0IG9mIHF1ZXVlIGdyb3Vw cyB0byBiZSBhZGRlZA0KPiArICogQGJ1Zl9zaXplOiBzaXplIG9mIGJ1ZmZlciBmb3IgaW5kaXJl Y3QgY29tbWFuZA0KPiArICogQGNkOiBwb2ludGVyIHRvIGNvbW1hbmQgZGV0YWlscyBzdHJ1Y3R1 cmUgb3IgTlVMTA0KPiArICoNCj4gKyAqIEFkZCBUeCBMQU4gcXVldWUgKDB4MEMzMCkNCj4gKyAq DQo+ICsgKiBOT1RFOg0KPiArICogUHJpb3IgdG8gY2FsbGluZyBhZGQgVHggTEFOIHF1ZXVlOg0K PiArICogSW5pdGlhbGl6ZSB0aGUgZm9sbG93aW5nIGFzIHBhcnQgb2YgdGhlIFR4IHF1ZXVlIGNv bnRleHQ6DQo+ICsgKiBDb21wbGV0aW9uIHF1ZXVlIElEIGlmIHRoZSBxdWV1ZSB1c2VzIENvbXBs ZXRpb24gcXVldWUsIFF1YW50YSBwcm9maWxlLA0KPiArICogQ2FjaGUgcHJvZmlsZSBhbmQgUGFj a2V0IHNoYXBlciBwcm9maWxlLg0KPiArICoNCj4gKyAqIEFmdGVyIGFkZCBUeCBMQU4gcXVldWUg QVEgY29tbWFuZCBpcyBjb21wbGV0ZWQ6DQo+ICsgKiBJbnRlcnJ1cHRzIHNob3VsZCBiZSBhc3Nv Y2lhdGVkIHdpdGggc3BlY2lmaWMgcXVldWVzLA0KPiArICogQXNzb2NpYXRpb24gb2YgVHggcXVl dWUgdG8gRG9vcmJlbGwgcXVldWUgaXMgbm90IHBhcnQgb2YgQWRkIExBTiBUeCBxdWV1ZQ0KPiAr ICogZmxvdy4NCj4gKyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX2Fk ZF9sYW5fdHhxKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCBudW1fcWdycHMsDQo+ICsJCSAgIHN0cnVj dCBpY2VfYXFjX2FkZF90eF9xZ3JwICpxZ19saXN0LCB1MTYgYnVmX3NpemUsDQo+ICsJCSAgIHN0 cnVjdCBpY2Vfc3FfY2QgKmNkKQ0KPiArew0KPiArCXUxNiBpLCBzdW1faGVhZGVyX3NpemUsIHN1 bV9xX3NpemUgPSAwOw0KPiArCXN0cnVjdCBpY2VfYXFjX2FkZF90eF9xZ3JwICpsaXN0Ow0KPiAr CXN0cnVjdCBpY2VfYXFjX2FkZF90eHFzICpjbWQ7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRl c2M7DQo+ICsNCj4gKwlpY2VfZGVidWcoaHcsIElDRV9EQkdfVFJBQ0UsICJpY2VfYXFfYWRkX2xh bl90eHEiKTsNCj4gKw0KPiArCWNtZCA9ICZkZXNjLnBhcmFtcy5hZGRfdHhxczsNCj4gKw0KPiAr CWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBpY2VfYXFjX29wY19hZGRfdHhx cyk7DQo+ICsNCj4gKwlpZiAoIXFnX2xpc3QpDQo+ICsJCXJldHVybiBJQ0VfRVJSX1BBUkFNOw0K PT0gTlVMTA0KPiArDQo+ICsJaWYgKG51bV9xZ3JwcyA+IElDRV9MQU5fVFhRX01BWF9RR1JQUykN Cj4gKwkJcmV0dXJuIElDRV9FUlJfUEFSQU07DQo+ICsNCj4gKwlzdW1faGVhZGVyX3NpemUgPSBu dW1fcWdycHMgKg0KPiArCQkoc2l6ZW9mKCpxZ19saXN0KSAtIHNpemVvZigqcWdfbGlzdC0+dHhx cykpOw0KPiArDQo+ICsJbGlzdCA9IHFnX2xpc3Q7DQo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9x Z3JwczsgaSsrKSB7DQo+ICsJCXN0cnVjdCBpY2VfYXFjX2FkZF90eHFzX3BlcnEgKnEgPSBsaXN0 LT50eHFzOw0KPiArDQo+ICsJCXN1bV9xX3NpemUgKz0gbGlzdC0+bnVtX3R4cXMgKiBzaXplb2Yo KnEpOw0KPiArCQlsaXN0ID0gKHN0cnVjdCBpY2VfYXFjX2FkZF90eF9xZ3JwICopKHEgKyBsaXN0 LT5udW1fdHhxcyk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGJ1Zl9zaXplICE9IChzdW1faGVhZGVy X3NpemUgKyBzdW1fcV9zaXplKSkNCj4gKwkJcmV0dXJuIElDRV9FUlJfUEFSQU07DQo+ICsNCj4g KwlkZXNjLmZsYWdzIHw9IENQVV9UT19MRTE2KElDRV9BUV9GTEFHX1JEKTsNCj4gKw0KPiArCWNt ZC0+bnVtX3FncnBzID0gbnVtX3FncnBzOw0KPiArDQo+ICsJcmV0dXJuIGljZV9hcV9zZW5kX2Nt ZChodywgJmRlc2MsIHFnX2xpc3QsIGJ1Zl9zaXplLCBjZCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICogaWNlX2FxX2Rpc19sYW5fdHhxDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3 YXJlIHN0cnVjdHVyZQ0KPiArICogQG51bV9xZ3JwczogbnVtYmVyIG9mIGdyb3VwcyBpbiB0aGUg bGlzdA0KPiArICogQHFnX2xpc3Q6IHRoZSBsaXN0IG9mIGdyb3VwcyB0byBkaXNhYmxlDQo+ICsg KiBAYnVmX3NpemU6IHRoZSB0b3RhbCBzaXplIG9mIHRoZSBxZ19saXN0IGJ1ZmZlciBpbiBieXRl cw0KPiArICogQHJzdF9zcmM6IGlmIGNhbGxlZCBkdWUgdG8gcmVzZXQsIHNwZWNpZmllcyB0aGUg cnN0IHNvdXJjZQ0KPiArICogQHZtdmZfbnVtOiB0aGUgcmVsYXRpdmUgdm0gb3IgdmYgbnVtYmVy IHRoYXQgaXMgdW5kZXJnb2luZyB0aGUgcmVzZXQNCj4gKyAqIEBjZDogcG9pbnRlciB0byBjb21t YW5kIGRldGFpbHMgc3RydWN0dXJlIG9yIE5VTEwNCj4gKyAqDQo+ICsgKiBEaXNhYmxlIExBTiBU eCBxdWV1ZSAoMHgwQzMxKQ0KPiArICovDQo+ICtzdGF0aWMgZW51bSBpY2Vfc3RhdHVzDQo+ICtp Y2VfYXFfZGlzX2xhbl90eHEoc3RydWN0IGljZV9odyAqaHcsIHU4IG51bV9xZ3JwcywNCj4gKwkJ ICAgc3RydWN0IGljZV9hcWNfZGlzX3R4cV9pdGVtICpxZ19saXN0LCB1MTYgYnVmX3NpemUsDQo+ ICsJCSAgIGVudW0gaWNlX2Rpc3FfcnN0X3NyYyByc3Rfc3JjLCB1MTYgdm12Zl9udW0sDQo+ICsJ CSAgIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKQ0KPiArew0KPiArCXN0cnVjdCBpY2VfYXFjX2Rpc190 eHFzICpjbWQ7DQo+ICsJc3RydWN0IGljZV9hcV9kZXNjIGRlc2M7DQo+ICsJZW51bSBpY2Vfc3Rh dHVzIHN0YXR1czsNCj4gKwl1MTYgaSwgc3ogPSAwOw0KPiArDQo+ICsJaWNlX2RlYnVnKGh3LCBJ Q0VfREJHX1RSQUNFLCAiaWNlX2FxX2Rpc19sYW5fdHhxIik7DQo+ICsJY21kID0gJmRlc2MucGFy YW1zLmRpc190eHFzOw0KPiArCWljZV9maWxsX2RmbHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLCBp Y2VfYXFjX29wY19kaXNfdHhxcyk7DQo+ICsNCj4gKwkvKiBxZ19saXN0IGNhbiBiZSBOVUxMIG9u bHkgaW4gVk0vVkYgcmVzZXQgZmxvdyAqLw0KPiArCWlmICghcWdfbGlzdCAmJiAhcnN0X3NyYykN Cj4gKwkJcmV0dXJuIElDRV9FUlJfUEFSQU07DQo+ICsNCj4gKwlpZiAobnVtX3FncnBzID4gSUNF X0xBTl9UWFFfTUFYX1FHUlBTKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiAr CWNtZC0+bnVtX2VudHJpZXMgPSBudW1fcWdycHM7DQo+ICsNCj4gKwljbWQtPnZtdmZfYW5kX3Rp bWVvdXQgPSBDUFVfVE9fTEUxNigoNSA8PCBJQ0VfQVFDX1FfRElTX1RJTUVPVVRfUykgJg0KPiAr CQkJCQkgICAgSUNFX0FRQ19RX0RJU19USU1FT1VUX00pOw0KPiArDQo+ICsJc3dpdGNoIChyc3Rf c3JjKSB7DQo+ICsJY2FzZSBJQ0VfVk1fUkVTRVQ6DQo+ICsJCWNtZC0+Y21kX3R5cGUgPSBJQ0Vf QVFDX1FfRElTX0NNRF9WTV9SRVNFVDsNCj4gKwkJY21kLT52bXZmX2FuZF90aW1lb3V0IHw9DQo+ ICsJCQlDUFVfVE9fTEUxNih2bXZmX251bSAmIElDRV9BUUNfUV9ESVNfVk1WRl9OVU1fTSk7DQo+ ICsJCWJyZWFrOw0KPiArCWNhc2UgSUNFX05PX1JFU0VUOg0KPiArCWRlZmF1bHQ6DQo+ICsJCWJy ZWFrOw0KPiArCX0NCj4gKw0KPiArCS8qIGZsdXNoIHBpcGUgb24gdGltZSBvdXQgKi8NCj4gKwlj bWQtPmNtZF90eXBlIHw9IElDRV9BUUNfUV9ESVNfQ01EX0ZMVVNIX1BJUEU7DQo+ICsJLyogSWYg bm8gcXVldWUgZ3JvdXAgaW5mbywgd2UgYXJlIGluIGEgcmVzZXQgZmxvdy4gSXNzdWUgdGhlIEFR ICovDQo+ICsJaWYgKCFxZ19saXN0KQ0KPiArCQlnb3RvIGRvX2FxOw0KDQo9PSBOVUxMDQoNCj4g Kw0KPiArCS8qIHNldCBSRCBiaXQgdG8gaW5kaWNhdGUgdGhhdCBjb21tYW5kIGJ1ZmZlciBpcyBw cm92aWRlZCBieSB0aGUgZHJpdmVyDQo+ICsJICogYW5kIGl0IG5lZWRzIHRvIGJlIHJlYWQgYnkg dGhlIGZpcm13YXJlDQo+ICsJICovDQo+ICsJZGVzYy5mbGFncyB8PSBDUFVfVE9fTEUxNihJQ0Vf QVFfRkxBR19SRCk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3FncnBzOyArK2kpIHsN Cj4gKwkJLyogQ2FsY3VsYXRlIHRoZSBzaXplIHRha2VuIHVwIGJ5IHRoZSBxdWV1ZSBJRHMgaW4g dGhpcyBncm91cCAqLw0KPiArCQlzeiArPSBxZ19saXN0W2ldLm51bV9xcyAqIHNpemVvZihxZ19s aXN0W2ldLnFfaWQpOw0KPiArDQo+ICsJCS8qIEFkZCB0aGUgc2l6ZSBvZiB0aGUgZ3JvdXAgaGVh ZGVyICovDQo+ICsJCXN6ICs9IHNpemVvZihxZ19saXN0W2ldKSAtIHNpemVvZihxZ19saXN0W2ld LnFfaWQpOw0KPiArDQo+ICsJCS8qIElmIHRoZSBudW0gb2YgcXVldWVzIGlzIGV2ZW4sIGFkZCAy IGJ5dGVzIG9mIHBhZGRpbmcgKi8NCj4gKwkJaWYgKChxZ19saXN0W2ldLm51bV9xcyAlIDIpID09 IDApDQo+ICsJCQlzeiArPSAyOw0KPiArCX0NCj4gKw0KPiArCWlmIChidWZfc2l6ZSAhPSBzeikN Cj4gKwkJcmV0dXJuIElDRV9FUlJfUEFSQU07DQo+ICsNCj4gK2RvX2FxOg0KPiArCXN0YXR1cyA9 IGljZV9hcV9zZW5kX2NtZChodywgJmRlc2MsIHFnX2xpc3QsIGJ1Zl9zaXplLCBjZCk7DQo+ICsJ aWYgKHN0YXR1cykgew0KPiArCQlpZiAoIXFnX2xpc3QpDQo+ICsJCQlpY2VfZGVidWcoaHcsIElD RV9EQkdfU0NIRUQsICJWTSVkIGRpc2FibGUgZmFpbGVkICVkXG4iLA0KPiArCQkJCSAgdm12Zl9u dW0sIGh3LT5hZG1pbnEuc3FfbGFzdF9zdGF0dXMpOw0KPiArCQllbHNlDQo+ICsJCQlpY2VfZGVi dWcoaHcsIElDRV9EQkdfU0NIRUQsICJkaXNhYmxlIFEgJWQgZmFpbGVkICVkXG4iLA0KPiArCQkJ CSAgTEUxNl9UT19DUFUocWdfbGlzdFswXS5xX2lkWzBdKSwNCj4gKwkJCQkgIGh3LT5hZG1pbnEu c3FfbGFzdF9zdGF0dXMpOw0KPiArCX0NCj4gKwlyZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ ICsNCj4gKy8qIEVuZCBvZiBGVyBBZG1pbiBRdWV1ZSBjb21tYW5kIHdyYXBwZXJzICovDQo+ICsN Cj4gKy8qKg0KPiArICogaWNlX3dyaXRlX2J5dGUgLSB3cml0ZSBhIGJ5dGUgdG8gYSBwYWNrZWQg Y29udGV4dCBzdHJ1Y3R1cmUNCj4gKyAqIEBzcmNfY3R4OiAgdGhlIGNvbnRleHQgc3RydWN0dXJl IHRvIHJlYWQgZnJvbQ0KPiArICogQGRlc3RfY3R4OiB0aGUgY29udGV4dCB0byBiZSB3cml0dGVu IHRvDQo+ICsgKiBAY2VfaW5mbzogIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN0cnVjdCB0byBiZSBm aWxsZWQNCj4gKyAqLw0KPiArc3RhdGljIHZvaWQNCj4gK2ljZV93cml0ZV9ieXRlKHU4ICpzcmNf Y3R4LCB1OCAqZGVzdF9jdHgsIGNvbnN0IHN0cnVjdCBpY2VfY3R4X2VsZSAqY2VfaW5mbykNCj4g K3sNCj4gKwl1OCBzcmNfYnl0ZSwgZGVzdF9ieXRlLCBtYXNrOw0KPiArCXU4ICpmcm9tLCAqZGVz dDsNCj4gKwl1MTYgc2hpZnRfd2lkdGg7DQo+ICsNCj4gKwkvKiBjb3B5IGZyb20gdGhlIG5leHQg c3RydWN0IGZpZWxkICovDQo+ICsJZnJvbSA9IHNyY19jdHggKyBjZV9pbmZvLT5vZmZzZXQ7DQo+ ICsNCj4gKwkvKiBwcmVwYXJlIHRoZSBiaXRzIGFuZCBtYXNrICovDQo+ICsJc2hpZnRfd2lkdGgg PSBjZV9pbmZvLT5sc2IgJSA4Ow0KPiArCW1hc2sgPSAodTgpKEJJVChjZV9pbmZvLT53aWR0aCkg LSAxKTsNCj4gKw0KPiArCXNyY19ieXRlID0gKmZyb207DQo+ICsJc3JjX2J5dGUgJj0gbWFzazsN Cj4gKw0KPiArCS8qIHNoaWZ0IHRvIGNvcnJlY3QgYWxpZ25tZW50ICovDQo+ICsJbWFzayA8PD0g c2hpZnRfd2lkdGg7DQo+ICsJc3JjX2J5dGUgPDw9IHNoaWZ0X3dpZHRoOw0KPiArDQo+ICsJLyog Z2V0IHRoZSBjdXJyZW50IGJpdHMgZnJvbSB0aGUgdGFyZ2V0IGJpdCBzdHJpbmcgKi8NCj4gKwlk ZXN0ID0gZGVzdF9jdHggKyAoY2VfaW5mby0+bHNiIC8gOCk7DQo+ICsNCj4gKwlpY2VfbWVtY3B5 KCZkZXN0X2J5dGUsIGRlc3QsIHNpemVvZihkZXN0X2J5dGUpLCBJQ0VfRE1BX1RPX05PTkRNQSk7 DQo+ICsNCj4gKwlkZXN0X2J5dGUgJj0gfm1hc2s7CS8qIGdldCB0aGUgYml0cyBub3QgY2hhbmdp bmcgKi8NCj4gKwlkZXN0X2J5dGUgfD0gc3JjX2J5dGU7CS8qIGFkZCBpbiB0aGUgbmV3IGJpdHMg Ki8NCj4gKw0KPiArCS8qIHB1dCBpdCBhbGwgYmFjayAqLw0KPiArCWljZV9tZW1jcHkoZGVzdCwg JmRlc3RfYnl0ZSwgc2l6ZW9mKGRlc3RfYnl0ZSksIElDRV9OT05ETUFfVE9fRE1BKTsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgKiBpY2Vfd3JpdGVfd29yZCAtIHdyaXRlIGEgd29yZCB0byBhIHBh Y2tlZCBjb250ZXh0IHN0cnVjdHVyZQ0KPiArICogQHNyY19jdHg6ICB0aGUgY29udGV4dCBzdHJ1 Y3R1cmUgdG8gcmVhZCBmcm9tDQo+ICsgKiBAZGVzdF9jdHg6IHRoZSBjb250ZXh0IHRvIGJlIHdy aXR0ZW4gdG8NCj4gKyAqIEBjZV9pbmZvOiAgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RydWN0IHRv IGJlIGZpbGxlZA0KPiArICovDQo+ICtzdGF0aWMgdm9pZA0KPiAraWNlX3dyaXRlX3dvcmQodTgg KnNyY19jdHgsIHU4ICpkZXN0X2N0eCwgY29uc3Qgc3RydWN0IGljZV9jdHhfZWxlICpjZV9pbmZv KQ0KPiArew0KPiArCXUxNiBzcmNfd29yZCwgbWFzazsNCj4gKwlfX2xlMTYgZGVzdF93b3JkOw0K PiArCXU4ICpmcm9tLCAqZGVzdDsNCj4gKwl1MTYgc2hpZnRfd2lkdGg7DQo+ICsNCj4gKwkvKiBj b3B5IGZyb20gdGhlIG5leHQgc3RydWN0IGZpZWxkICovDQo+ICsJZnJvbSA9IHNyY19jdHggKyBj ZV9pbmZvLT5vZmZzZXQ7DQo+ICsNCj4gKwkvKiBwcmVwYXJlIHRoZSBiaXRzIGFuZCBtYXNrICov DQo+ICsJc2hpZnRfd2lkdGggPSBjZV9pbmZvLT5sc2IgJSA4Ow0KPiArCW1hc2sgPSBCSVQoY2Vf aW5mby0+d2lkdGgpIC0gMTsNCj4gKw0KPiArCS8qIGRvbid0IHN3aXp6bGUgdGhlIGJpdHMgdW50 aWwgYWZ0ZXIgdGhlIG1hc2sgYmVjYXVzZSB0aGUgbWFzayBiaXRzDQo+ICsJICogd2lsbCBiZSBp biBhIGRpZmZlcmVudCBiaXQgcG9zaXRpb24gb24gYmlnIGVuZGlhbiBtYWNoaW5lcw0KPiArCSAq Lw0KPiArCXNyY193b3JkID0gKih1MTYgKilmcm9tOw0KPiArCXNyY193b3JkICY9IG1hc2s7DQo+ ICsNCj4gKwkvKiBzaGlmdCB0byBjb3JyZWN0IGFsaWdubWVudCAqLw0KPiArCW1hc2sgPDw9IHNo aWZ0X3dpZHRoOw0KPiArCXNyY193b3JkIDw8PSBzaGlmdF93aWR0aDsNCj4gKw0KPiArCS8qIGdl dCB0aGUgY3VycmVudCBiaXRzIGZyb20gdGhlIHRhcmdldCBiaXQgc3RyaW5nICovDQo+ICsJZGVz dCA9IGRlc3RfY3R4ICsgKGNlX2luZm8tPmxzYiAvIDgpOw0KPiArDQo+ICsJaWNlX21lbWNweSgm ZGVzdF93b3JkLCBkZXN0LCBzaXplb2YoZGVzdF93b3JkKSwgSUNFX0RNQV9UT19OT05ETUEpOw0K PiArDQo+ICsJZGVzdF93b3JkICY9IH4oQ1BVX1RPX0xFMTYobWFzaykpOwkvKiBnZXQgdGhlIGJp dHMgbm90IGNoYW5naW5nICovDQo+ICsJZGVzdF93b3JkIHw9IENQVV9UT19MRTE2KHNyY193b3Jk KTsJLyogYWRkIGluIHRoZSBuZXcgYml0cyAqLw0KPiArDQo+ICsJLyogcHV0IGl0IGFsbCBiYWNr ICovDQo+ICsJaWNlX21lbWNweShkZXN0LCAmZGVzdF93b3JkLCBzaXplb2YoZGVzdF93b3JkKSwg SUNFX05PTkRNQV9UT19ETUEpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGljZV93cml0ZV9k d29yZCAtIHdyaXRlIGEgZHdvcmQgdG8gYSBwYWNrZWQgY29udGV4dCBzdHJ1Y3R1cmUNCj4gKyAq IEBzcmNfY3R4OiAgdGhlIGNvbnRleHQgc3RydWN0dXJlIHRvIHJlYWQgZnJvbQ0KPiArICogQGRl c3RfY3R4OiB0aGUgY29udGV4dCB0byBiZSB3cml0dGVuIHRvDQo+ICsgKiBAY2VfaW5mbzogIGEg ZGVzY3JpcHRpb24gb2YgdGhlIHN0cnVjdCB0byBiZSBmaWxsZWQNCj4gKyAqLw0KPiArc3RhdGlj IHZvaWQNCj4gK2ljZV93cml0ZV9kd29yZCh1OCAqc3JjX2N0eCwgdTggKmRlc3RfY3R4LCBjb25z dCBzdHJ1Y3QgaWNlX2N0eF9lbGUgKmNlX2luZm8pDQo+ICt7DQo+ICsJdTMyIHNyY19kd29yZCwg bWFzazsNCj4gKwlfX2xlMzIgZGVzdF9kd29yZDsNCj4gKwl1OCAqZnJvbSwgKmRlc3Q7DQo+ICsJ dTE2IHNoaWZ0X3dpZHRoOw0KPiArDQo+ICsJLyogY29weSBmcm9tIHRoZSBuZXh0IHN0cnVjdCBm aWVsZCAqLw0KPiArCWZyb20gPSBzcmNfY3R4ICsgY2VfaW5mby0+b2Zmc2V0Ow0KPiArDQo+ICsJ LyogcHJlcGFyZSB0aGUgYml0cyBhbmQgbWFzayAqLw0KPiArCXNoaWZ0X3dpZHRoID0gY2VfaW5m by0+bHNiICUgODsNCj4gKw0KPiArCS8qIGlmIHRoZSBmaWVsZCB3aWR0aCBpcyBleGFjdGx5IDMy IG9uIGFuIHg4NiBtYWNoaW5lLCB0aGVuIHRoZSBzaGlmdA0KPiArCSAqIG9wZXJhdGlvbiB3aWxs IG5vdCB3b3JrIGJlY2F1c2UgdGhlIFNITCBpbnN0cnVjdGlvbnMgY291bnQgaXMgbWFza2VkDQo+ ICsJICogdG8gNSBiaXRzIHNvIHRoZSBzaGlmdCB3aWxsIGRvIG5vdGhpbmcNCj4gKwkgKi8NCj4g KwlpZiAoY2VfaW5mby0+d2lkdGggPCAzMikNCj4gKwkJbWFzayA9IEJJVChjZV9pbmZvLT53aWR0 aCkgLSAxOw0KPiArCWVsc2UNCj4gKwkJbWFzayA9ICh1MzIpfjA7DQo+ICsNCj4gKwkvKiBkb24n dCBzd2l6emxlIHRoZSBiaXRzIHVudGlsIGFmdGVyIHRoZSBtYXNrIGJlY2F1c2UgdGhlIG1hc2sg Yml0cw0KPiArCSAqIHdpbGwgYmUgaW4gYSBkaWZmZXJlbnQgYml0IHBvc2l0aW9uIG9uIGJpZyBl bmRpYW4gbWFjaGluZXMNCj4gKwkgKi8NCj4gKwlzcmNfZHdvcmQgPSAqKHUzMiAqKWZyb207DQo+ ICsJc3JjX2R3b3JkICY9IG1hc2s7DQo+ICsNCj4gKwkvKiBzaGlmdCB0byBjb3JyZWN0IGFsaWdu bWVudCAqLw0KPiArCW1hc2sgPDw9IHNoaWZ0X3dpZHRoOw0KPiArCXNyY19kd29yZCA8PD0gc2hp ZnRfd2lkdGg7DQo+ICsNCj4gKwkvKiBnZXQgdGhlIGN1cnJlbnQgYml0cyBmcm9tIHRoZSB0YXJn ZXQgYml0IHN0cmluZyAqLw0KPiArCWRlc3QgPSBkZXN0X2N0eCArIChjZV9pbmZvLT5sc2IgLyA4 KTsNCj4gKw0KPiArCWljZV9tZW1jcHkoJmRlc3RfZHdvcmQsIGRlc3QsIHNpemVvZihkZXN0X2R3 b3JkKSwgSUNFX0RNQV9UT19OT05ETUEpOw0KPiArDQo+ICsJZGVzdF9kd29yZCAmPSB+KENQVV9U T19MRTMyKG1hc2spKTsJLyogZ2V0IHRoZSBiaXRzIG5vdCBjaGFuZ2luZyAqLw0KPiArCWRlc3Rf ZHdvcmQgfD0gQ1BVX1RPX0xFMzIoc3JjX2R3b3JkKTsJLyogYWRkIGluIHRoZSBuZXcgYml0cyAq Lw0KPiArDQo+ICsJLyogcHV0IGl0IGFsbCBiYWNrICovDQo+ICsJaWNlX21lbWNweShkZXN0LCAm ZGVzdF9kd29yZCwgc2l6ZW9mKGRlc3RfZHdvcmQpLCBJQ0VfTk9ORE1BX1RPX0RNQSk7DQo+ICt9 DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX3dyaXRlX3F3b3JkIC0gd3JpdGUgYSBxd29yZCB0byBh IHBhY2tlZCBjb250ZXh0IHN0cnVjdHVyZQ0KPiArICogQHNyY19jdHg6ICB0aGUgY29udGV4dCBz dHJ1Y3R1cmUgdG8gcmVhZCBmcm9tDQo+ICsgKiBAZGVzdF9jdHg6IHRoZSBjb250ZXh0IHRvIGJl IHdyaXR0ZW4gdG8NCj4gKyAqIEBjZV9pbmZvOiAgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RydWN0 IHRvIGJlIGZpbGxlZA0KPiArICovDQo+ICtzdGF0aWMgdm9pZA0KPiAraWNlX3dyaXRlX3F3b3Jk KHU4ICpzcmNfY3R4LCB1OCAqZGVzdF9jdHgsIGNvbnN0IHN0cnVjdCBpY2VfY3R4X2VsZSAqY2Vf aW5mbykNCj4gK3sNCj4gKwl1NjQgc3JjX3F3b3JkLCBtYXNrOw0KPiArCV9fbGU2NCBkZXN0X3F3 b3JkOw0KPiArCXU4ICpmcm9tLCAqZGVzdDsNCj4gKwl1MTYgc2hpZnRfd2lkdGg7DQo+ICsNCj4g KwkvKiBjb3B5IGZyb20gdGhlIG5leHQgc3RydWN0IGZpZWxkICovDQo+ICsJZnJvbSA9IHNyY19j dHggKyBjZV9pbmZvLT5vZmZzZXQ7DQo+ICsNCj4gKwkvKiBwcmVwYXJlIHRoZSBiaXRzIGFuZCBt YXNrICovDQo+ICsJc2hpZnRfd2lkdGggPSBjZV9pbmZvLT5sc2IgJSA4Ow0KPiArDQo+ICsJLyog aWYgdGhlIGZpZWxkIHdpZHRoIGlzIGV4YWN0bHkgNjQgb24gYW4geDg2IG1hY2hpbmUsIHRoZW4g dGhlIHNoaWZ0DQo+ICsJICogb3BlcmF0aW9uIHdpbGwgbm90IHdvcmsgYmVjYXVzZSB0aGUgU0hM IGluc3RydWN0aW9ucyBjb3VudCBpcyBtYXNrZWQNCj4gKwkgKiB0byA2IGJpdHMgc28gdGhlIHNo aWZ0IHdpbGwgZG8gbm90aGluZw0KPiArCSAqLw0KPiArCWlmIChjZV9pbmZvLT53aWR0aCA8IDY0 KQ0KPiArCQltYXNrID0gQklUX1VMTChjZV9pbmZvLT53aWR0aCkgLSAxOw0KPiArCWVsc2UNCj4g KwkJbWFzayA9ICh1NjQpfjA7DQo+ICsNCj4gKwkvKiBkb24ndCBzd2l6emxlIHRoZSBiaXRzIHVu dGlsIGFmdGVyIHRoZSBtYXNrIGJlY2F1c2UgdGhlIG1hc2sgYml0cw0KPiArCSAqIHdpbGwgYmUg aW4gYSBkaWZmZXJlbnQgYml0IHBvc2l0aW9uIG9uIGJpZyBlbmRpYW4gbWFjaGluZXMNCj4gKwkg Ki8NCj4gKwlzcmNfcXdvcmQgPSAqKHU2NCAqKWZyb207DQo+ICsJc3JjX3F3b3JkICY9IG1hc2s7 DQo+ICsNCj4gKwkvKiBzaGlmdCB0byBjb3JyZWN0IGFsaWdubWVudCAqLw0KPiArCW1hc2sgPDw9 IHNoaWZ0X3dpZHRoOw0KPiArCXNyY19xd29yZCA8PD0gc2hpZnRfd2lkdGg7DQo+ICsNCj4gKwkv KiBnZXQgdGhlIGN1cnJlbnQgYml0cyBmcm9tIHRoZSB0YXJnZXQgYml0IHN0cmluZyAqLw0KPiAr CWRlc3QgPSBkZXN0X2N0eCArIChjZV9pbmZvLT5sc2IgLyA4KTsNCj4gKw0KPiArCWljZV9tZW1j cHkoJmRlc3RfcXdvcmQsIGRlc3QsIHNpemVvZihkZXN0X3F3b3JkKSwgSUNFX0RNQV9UT19OT05E TUEpOw0KPiArDQo+ICsJZGVzdF9xd29yZCAmPSB+KENQVV9UT19MRTY0KG1hc2spKTsJLyogZ2V0 IHRoZSBiaXRzIG5vdCBjaGFuZ2luZyAqLw0KPiArCWRlc3RfcXdvcmQgfD0gQ1BVX1RPX0xFNjQo c3JjX3F3b3JkKTsJLyogYWRkIGluIHRoZSBuZXcgYml0cyAqLw0KPiArDQo+ICsJLyogcHV0IGl0 IGFsbCBiYWNrICovDQo+ICsJaWNlX21lbWNweShkZXN0LCAmZGVzdF9xd29yZCwgc2l6ZW9mKGRl c3RfcXdvcmQpLCBJQ0VfTk9ORE1BX1RPX0RNQSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICog aWNlX3NldF9jdHggLSBzZXQgY29udGV4dCBiaXRzIGluIHBhY2tlZCBzdHJ1Y3R1cmUNCj4gKyAq IEBzcmNfY3R4OiAgcG9pbnRlciB0byBhIGdlbmVyaWMgbm9uLXBhY2tlZCBjb250ZXh0IHN0cnVj dHVyZQ0KPiArICogQGRlc3RfY3R4OiBwb2ludGVyIHRvIG1lbW9yeSBmb3IgdGhlIHBhY2tlZCBz dHJ1Y3R1cmUNCj4gKyAqIEBjZV9pbmZvOiAgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc3RydWN0dXJl IHRvIGJlIHRyYW5zZm9ybWVkDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3Nl dF9jdHgodTggKnNyY19jdHgsIHU4ICpkZXN0X2N0eCwgY29uc3Qgc3RydWN0IGljZV9jdHhfZWxl ICpjZV9pbmZvKQ0KPiArew0KPiArCWludCBmOw0KPiArDQo+ICsJZm9yIChmID0gMDsgY2VfaW5m b1tmXS53aWR0aDsgZisrKSB7DQo+ICsJCS8qIFdlIGhhdmUgdG8gZGVhbCB3aXRoIGVhY2ggZWxl bWVudCBvZiB0aGUgRlcgcmVzcG9uc2UNCj4gKwkJICogdXNpbmcgdGhlIGNvcnJlY3Qgc2l6ZSBz byB0aGF0IHdlIGFyZSBjb3JyZWN0IHJlZ2FyZGxlc3MNCj4gKwkJICogb2YgdGhlIGVuZGlhbm5l c3Mgb2YgdGhlIG1hY2hpbmUuDQo+ICsJCSAqLw0KPiArCQlzd2l0Y2ggKGNlX2luZm9bZl0uc2l6 ZV9vZikgew0KPiArCQljYXNlIHNpemVvZih1OCk6DQo+ICsJCQlpY2Vfd3JpdGVfYnl0ZShzcmNf Y3R4LCBkZXN0X2N0eCwgJmNlX2luZm9bZl0pOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2Ugc2l6 ZW9mKHUxNik6DQo+ICsJCQlpY2Vfd3JpdGVfd29yZChzcmNfY3R4LCBkZXN0X2N0eCwgJmNlX2lu Zm9bZl0pOw0KPiArCQkJYnJlYWs7DQo+ICsJCWNhc2Ugc2l6ZW9mKHUzMik6DQo+ICsJCQlpY2Vf d3JpdGVfZHdvcmQoc3JjX2N0eCwgZGVzdF9jdHgsICZjZV9pbmZvW2ZdKTsNCj4gKwkJCWJyZWFr Ow0KPiArCQljYXNlIHNpemVvZih1NjQpOg0KPiArCQkJaWNlX3dyaXRlX3F3b3JkKHNyY19jdHgs IGRlc3RfY3R4LCAmY2VfaW5mb1tmXSk7DQo+ICsJCQlicmVhazsNCj4gKwkJZGVmYXVsdDoNCj4g KwkJCXJldHVybiBJQ0VfRVJSX0lOVkFMX1NJWkU7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwly ZXR1cm4gSUNFX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKw0KPiArDQo+ICsNCj4gKw0KPiArLyoq DQo+ICsgKiBpY2VfZW5hX3ZzaV90eHENCj4gKyAqIEBwaTogcG9ydCBpbmZvcm1hdGlvbiBzdHJ1 Y3R1cmUNCj4gKyAqIEB2c2lfaGFuZGxlOiBzb2Z0d2FyZSBWU0kgaGFuZGxlDQo+ICsgKiBAdGM6 IHRjIG51bWJlcg0KPiArICogQG51bV9xZ3JwczogTnVtYmVyIG9mIGFkZGVkIHF1ZXVlIGdyb3Vw cw0KPiArICogQGJ1ZjogbGlzdCBvZiBxdWV1ZSBncm91cHMgdG8gYmUgYWRkZWQNCj4gKyAqIEBi dWZfc2l6ZTogc2l6ZSBvZiBidWZmZXIgZm9yIGluZGlyZWN0IGNvbW1hbmQNCj4gKyAqIEBjZDog cG9pbnRlciB0byBjb21tYW5kIGRldGFpbHMgc3RydWN0dXJlIG9yIE5VTEwNCj4gKyAqDQo+ICsg KiBUaGlzIGZ1bmN0aW9uIGFkZHMgb25lIGxhbiBxDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1 cw0KPiAraWNlX2VuYV92c2lfdHhxKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgdTE2IHZzaV9o YW5kbGUsIHU4IHRjLCB1OCBudW1fcWdycHMsDQo+ICsJCXN0cnVjdCBpY2VfYXFjX2FkZF90eF9x Z3JwICpidWYsIHUxNiBidWZfc2l6ZSwNCj4gKwkJc3RydWN0IGljZV9zcV9jZCAqY2QpDQo+ICt7 DQo+ICsJc3RydWN0IGljZV9hcWNfdHhzY2hlZF9lbGVtX2RhdGEgbm9kZSA9IHsgMCB9Ow0KPiAr CXN0cnVjdCBpY2Vfc2NoZWRfbm9kZSAqcGFyZW50Ow0KPiArCWVudW0gaWNlX3N0YXR1cyBzdGF0 dXM7DQo+ICsJc3RydWN0IGljZV9odyAqaHc7DQo+ICsNCj4gKwlpZiAoIXBpIHx8IHBpLT5wb3J0 X3N0YXRlICE9IElDRV9TQ0hFRF9QT1JUX1NUQVRFX1JFQURZKQ0KPiArCQlyZXR1cm4gSUNFX0VS Ul9DRkc7DQo+ICsNCj4gKwlpZiAobnVtX3FncnBzID4gMSB8fCBidWYtPm51bV90eHFzID4gMSkN Cj4gKwkJcmV0dXJuIElDRV9FUlJfTUFYX0xJTUlUOw0KPiArDQo+ICsJaHcgPSBwaS0+aHc7DQo+ ICsNCj4gKwlpZiAoIWljZV9pc192c2lfdmFsaWQoaHcsIHZzaV9oYW5kbGUpKQ0KPiArCQlyZXR1 cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCWljZV9hY3F1aXJlX2xvY2soJnBpLT5zY2hlZF9s b2NrKTsNCj4gKw0KPiArCS8qIGZpbmQgYSBwYXJlbnQgbm9kZSAqLw0KPiArCXBhcmVudCA9IGlj ZV9zY2hlZF9nZXRfZnJlZV9xcGFyZW50KHBpLCB2c2lfaGFuZGxlLCB0YywNCj4gKwkJCQkJICAg IElDRV9TQ0hFRF9OT0RFX09XTkVSX0xBTik7DQo+ICsJaWYgKCFwYXJlbnQpIHsNCj4gKwkJc3Rh dHVzID0gSUNFX0VSUl9QQVJBTTsNCj4gKwkJZ290byBlbmFfdHhxX2V4aXQ7DQo+ICsJfQ0KPiAr DQo+ICsJYnVmLT5wYXJlbnRfdGVpZCA9IHBhcmVudC0+aW5mby5ub2RlX3RlaWQ7DQo+ICsJbm9k ZS5wYXJlbnRfdGVpZCA9IHBhcmVudC0+aW5mby5ub2RlX3RlaWQ7DQo+ICsJLyogTWFyayB0aGF0 IHRoZSB2YWx1ZXMgaW4gdGhlICJnZW5lcmljIiBzZWN0aW9uIGFzIHZhbGlkLiBUaGUgZGVmYXVs dA0KPiArCSAqIHZhbHVlIGluIHRoZSAiZ2VuZXJpYyIgc2VjdGlvbiBpcyB6ZXJvLiBUaGlzIG1l YW5zIHRoYXQgOg0KPiArCSAqIC0gU2NoZWR1bGluZyBtb2RlIGlzIEJ5dGVzIFBlciBTZWNvbmQg KEJQUyksIGluZGljYXRlZCBieSBCaXQgMC4NCj4gKwkgKiAtIDAgcHJpb3JpdHkgYW1vbmcgc2li bGluZ3MsIGluZGljYXRlZCBieSBCaXQgMS0zLg0KPiArCSAqIC0gV0ZRLCBpbmRpY2F0ZWQgYnkg Qml0IDQuDQo+ICsJICogLSAwIEFkanVzdG1lbnQgdmFsdWUgaXMgdXNlZCBpbiBQU00gY3JlZGl0 IHVwZGF0ZSBmbG93LCBpbmRpY2F0ZWQgYnkNCj4gKwkgKiBCaXQgNS02Lg0KPiArCSAqIC0gQml0 IDcgaXMgcmVzZXJ2ZWQuDQo+ICsJICogV2l0aG91dCBzZXR0aW5nIHRoZSBnZW5lcmljIHNlY3Rp b24gYXMgdmFsaWQgaW4gdmFsaWRfc2VjdGlvbnMsIHRoZQ0KPiArCSAqIEFkbWluIFEgY29tbWFu ZCB3aWxsIGZhaWwgd2l0aCBlcnJvciBjb2RlIElDRV9BUV9SQ19FSU5WQUwuDQo+ICsJICovDQo+ ICsJYnVmLT50eHFzWzBdLmluZm8udmFsaWRfc2VjdGlvbnMgPSBJQ0VfQVFDX0VMRU1fVkFMSURf R0VORVJJQzsNCj4gKw0KPiArCS8qIGFkZCB0aGUgbGFuIHEgKi8NCj4gKwlzdGF0dXMgPSBpY2Vf YXFfYWRkX2xhbl90eHEoaHcsIG51bV9xZ3JwcywgYnVmLCBidWZfc2l6ZSwgY2QpOw0KPiArCWlm IChzdGF0dXMgIT0gSUNFX1NVQ0NFU1MpIHsNCj4gKwkJaWNlX2RlYnVnKGh3LCBJQ0VfREJHX1ND SEVELCAiZW5hYmxlIFEgJWQgZmFpbGVkICVkXG4iLA0KPiArCQkJICBMRTE2X1RPX0NQVShidWYt PnR4cXNbMF0udHhxX2lkKSwNCj4gKwkJCSAgaHctPmFkbWlucS5zcV9sYXN0X3N0YXR1cyk7DQo+ ICsJCWdvdG8gZW5hX3R4cV9leGl0Ow0KPiArCX0NCj4gKw0KPiArCW5vZGUubm9kZV90ZWlkID0g YnVmLT50eHFzWzBdLnFfdGVpZDsNCj4gKwlub2RlLmRhdGEuZWxlbV90eXBlID0gSUNFX0FRQ19F TEVNX1RZUEVfTEVBRjsNCj4gKw0KPiArCS8qIGFkZCBhIGxlYWYgbm9kZSBpbnRvIHNjaGR1bGVy IHRyZWUgcSBsYXllciAqLw0KPiArCXN0YXR1cyA9IGljZV9zY2hlZF9hZGRfbm9kZShwaSwgaHct Pm51bV90eF9zY2hlZF9sYXllcnMgLSAxLCAmbm9kZSk7DQo+ICsNCj4gK2VuYV90eHFfZXhpdDoN Cj4gKwlpY2VfcmVsZWFzZV9sb2NrKCZwaS0+c2NoZWRfbG9jayk7DQo+ICsJcmV0dXJuIHN0YXR1 czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfZGlzX3ZzaV90eHENCj4gKyAqIEBwaTog cG9ydCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUNCj4gKyAqIEBudW1fcXVldWVzOiBudW1iZXIgb2Yg cXVldWVzDQo+ICsgKiBAcV9pZHM6IHBvaW50ZXIgdG8gdGhlIHFfaWQgYXJyYXkNCj4gKyAqIEBx X3RlaWRzOiBwb2ludGVyIHRvIHF1ZXVlIG5vZGUgdGVpZHMNCj4gKyAqIEByc3Rfc3JjOiBpZiBj YWxsZWQgZHVlIHRvIHJlc2V0LCBzcGVjaWZpZXMgdGhlIHJzdCBzb3VyY2UNCj4gKyAqIEB2bXZm X251bTogdGhlIHJlbGF0aXZlIHZtIG9yIHZmIG51bWJlciB0aGF0IGlzIHVuZGVyZ29pbmcgdGhl IHJlc2V0DQo+ICsgKiBAY2Q6IHBvaW50ZXIgdG8gY29tbWFuZCBkZXRhaWxzIHN0cnVjdHVyZSBv ciBOVUxMDQo+ICsgKg0KPiArICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIHF1ZXVlcyBhbmQgdGhl aXIgY29ycmVzcG9uZGluZyBub2RlcyBpbiBTVyBEQg0KPiArICovDQo+ICtlbnVtIGljZV9zdGF0 dXMNCj4gK2ljZV9kaXNfdnNpX3R4cShzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIHU4IG51bV9x dWV1ZXMsIHUxNiAqcV9pZHMsDQo+ICsJCXUzMiAqcV90ZWlkcywgZW51bSBpY2VfZGlzcV9yc3Rf c3JjIHJzdF9zcmMsIHUxNiB2bXZmX251bSwNCj4gKwkJc3RydWN0IGljZV9zcV9jZCAqY2QpDQo+ ICt7DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0YXR1cyA9IElDRV9FUlJfRE9FU19OT1RfRVhJU1Q7 DQo+ICsJc3RydWN0IGljZV9hcWNfZGlzX3R4cV9pdGVtIHFnX2xpc3Q7DQo+ICsJdTE2IGk7DQo+ ICsNCj4gKwlpZiAoIXBpIHx8IHBpLT5wb3J0X3N0YXRlICE9IElDRV9TQ0hFRF9QT1JUX1NUQVRF X1JFQURZKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9DRkc7DQo+ICsNCj4gKwkvKiBpZiBxdWV1ZSBp cyBkaXNhYmxlZCBhbHJlYWR5IHlldCB0aGUgZGlzYWJsZSBxdWV1ZSBjb21tYW5kIGhhcyB0byBi ZQ0KPiArCSAqIHNlbnQgdG8gY29tcGxldGUgdGhlIFZGIHJlc2V0LCB0aGVuIGNhbGwgaWNlX2Fx X2Rpc19sYW5fdHhxIHdpdGhvdXQNCj4gKwkgKiBhbnkgcXVldWUgaW5mb3JtYXRpb24NCj4gKwkg Ki8NCj4gKw0KPiArCWlmICghbnVtX3F1ZXVlcyAmJiByc3Rfc3JjKSA+ICsJCXJldHVybiBpY2Vf YXFfZGlzX2xhbl90eHEocGktPmh3LCAwLCBOVUxMLCAwLCByc3Rfc3JjLCB2bXZmX251bSwNCj4g KwkJCQkJICBOVUxMKTsNCj4gKw0KPiArCWljZV9hY3F1aXJlX2xvY2soJnBpLT5zY2hlZF9sb2Nr KTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBudW1fcXVldWVzOyBpKyspIHsNCj4gKwkJc3Ry dWN0IGljZV9zY2hlZF9ub2RlICpub2RlOw0KPiArDQo+ICsJCW5vZGUgPSBpY2Vfc2NoZWRfZmlu ZF9ub2RlX2J5X3RlaWQocGktPnJvb3QsIHFfdGVpZHNbaV0pOw0KPiArCQlpZiAoIW5vZGUpDQo+ ICsJCQljb250aW51ZTsNCj4gKwkJcWdfbGlzdC5wYXJlbnRfdGVpZCA9IG5vZGUtPmluZm8ucGFy ZW50X3RlaWQ7DQo+ICsJCXFnX2xpc3QubnVtX3FzID0gMTsNCj4gKwkJcWdfbGlzdC5xX2lkWzBd ID0gQ1BVX1RPX0xFMTYocV9pZHNbaV0pOw0KPiArCQlzdGF0dXMgPSBpY2VfYXFfZGlzX2xhbl90 eHEocGktPmh3LCAxLCAmcWdfbGlzdCwNCj4gKwkJCQkJICAgIHNpemVvZihxZ19saXN0KSwgcnN0 X3NyYywgdm12Zl9udW0sDQo+ICsJCQkJCSAgICBjZCk7DQo+ICsNCj4gKwkJaWYgKHN0YXR1cyAh PSBJQ0VfU1VDQ0VTUykNCj4gKwkJCWJyZWFrOw0KPiArCQlpY2VfZnJlZV9zY2hlZF9ub2RlKHBp LCBub2RlKTsNCj4gKwl9DQo+ICsJaWNlX3JlbGVhc2VfbG9jaygmcGktPnNjaGVkX2xvY2spOw0K PiArCXJldHVybiBzdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX2NmZ192c2lf cXMgLSBjb25maWd1cmUgdGhlIG5ldy9leGlzaXRpbmcgVlNJIHF1ZXVlcw0KPiArICogQHBpOiBw b3J0IGluZm9ybWF0aW9uIHN0cnVjdHVyZQ0KPiArICogQHZzaV9oYW5kbGU6IHNvZnR3YXJlIFZT SSBoYW5kbGUNCj4gKyAqIEB0Y19iaXRtYXA6IFRDIGJpdG1hcA0KPiArICogQG1heHFzOiBtYXgg cXVldWVzIGFycmF5IHBlciBUQw0KPiArICogQG93bmVyOiBsYW4gb3IgcmRtYQ0KPiArICoNCj4g KyAqIFRoaXMgZnVuY3Rpb24gYWRkcy91cGRhdGVzIHRoZSBWU0kgcXVldWVzIHBlciBUQy4NCj4g KyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0YXR1cw0KPiAraWNlX2NmZ192c2lfcXMoc3RydWN0 IGljZV9wb3J0X2luZm8gKnBpLCB1MTYgdnNpX2hhbmRsZSwgdTggdGNfYml0bWFwLA0KPiArCSAg ICAgICB1MTYgKm1heHFzLCB1OCBvd25lcikNCj4gK3sNCj4gKwllbnVtIGljZV9zdGF0dXMgc3Rh dHVzID0gSUNFX1NVQ0NFU1M7DQo+ICsJdTggaTsNCj4gKw0KPiArCWlmICghcGkgfHwgcGktPnBv cnRfc3RhdGUgIT0gSUNFX1NDSEVEX1BPUlRfU1RBVEVfUkVBRFkpDQo+ICsJCXJldHVybiBJQ0Vf RVJSX0NGRzsNCj4gKw0KPiArCWlmICghaWNlX2lzX3ZzaV92YWxpZChwaS0+aHcsIHZzaV9oYW5k bGUpKQ0KPiArCQlyZXR1cm4gSUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCWljZV9hY3F1aXJlX2xv Y2soJnBpLT5zY2hlZF9sb2NrKTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBJQ0VfTUFYX1RS QUZGSUNfQ0xBU1M7IGkrKykgew0KPiArCQkvKiBjb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9u bHkgaWYgVEMgbm9kZSBpcyBwcmVzZW50ICovDQo+ICsJCWlmICghaWNlX3NjaGVkX2dldF90Y19u b2RlKHBpLCBpKSkNCj4gKwkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCXN0YXR1cyA9IGljZV9zY2hl ZF9jZmdfdnNpKHBpLCB2c2lfaGFuZGxlLCBpLCBtYXhxc1tpXSwgb3duZXIsDQo+ICsJCQkJCSAg IGljZV9pc190Y19lbmEodGNfYml0bWFwLCBpKSk7DQo+ICsJCWlmIChzdGF0dXMpDQo+ICsJCQli cmVhazsNCj4gKwl9DQo+ICsNCj4gKwlpY2VfcmVsZWFzZV9sb2NrKCZwaS0+c2NoZWRfbG9jayk7 DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfY2ZnX3Zz aV9sYW4gLSBjb25maWd1cmUgVlNJIGxhbiBxdWV1ZXMNCj4gKyAqIEBwaTogcG9ydCBpbmZvcm1h dGlvbiBzdHJ1Y3R1cmUNCj4gKyAqIEB2c2lfaGFuZGxlOiBzb2Z0d2FyZSBWU0kgaGFuZGxlDQo+ ICsgKiBAdGNfYml0bWFwOiBUQyBiaXRtYXANCj4gKyAqIEBtYXhfbGFucXM6IG1heCBsYW4gcXVl dWVzIGFycmF5IHBlciBUQw0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gYWRkcy91cGRhdGVz IHRoZSBWU0kgbGFuIHF1ZXVlcyBwZXIgVEMuDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0K PiAraWNlX2NmZ192c2lfbGFuKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgdTE2IHZzaV9oYW5k bGUsIHU4IHRjX2JpdG1hcCwNCj4gKwkJdTE2ICptYXhfbGFucXMpDQo+ICt7DQo+ICsJcmV0dXJu IGljZV9jZmdfdnNpX3FzKHBpLCB2c2lfaGFuZGxlLCB0Y19iaXRtYXAsIG1heF9sYW5xcywNCj4g KwkJCSAgICAgIElDRV9TQ0hFRF9OT0RFX09XTkVSX0xBTik7DQo+ICt9DQo+ICsNCj4gKw0KPiAr DQo+ICsvKioNCj4gKyAqIGljZV9yZXBsYXlfcHJlX2luaXQgLSByZXBsYXkgcHJlIGluaXRpYWxp emF0aW9uDQo+ICsgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdA0KPiArICoNCj4gKyAq IEluaXRpYWxpemVzIHJlcXVpcmVkIGNvbmZpZyBkYXRhIGZvciBWU0ksIEZELCBBQ0wsIGFuZCBS U1MgYmVmb3JlIHJlcGxheS4NCj4gKyAqLw0KPiArc3RhdGljIGVudW0gaWNlX3N0YXR1cyBpY2Vf cmVwbGF5X3ByZV9pbml0KHN0cnVjdCBpY2VfaHcgKmh3KQ0KPiArew0KPiArCXN0cnVjdCBpY2Vf c3dpdGNoX2luZm8gKnN3ID0gaHctPnN3aXRjaF9pbmZvOw0KPiArCXU4IGk7DQo+ICsNCj4gKwkv KiBEZWxldGUgb2xkIGVudHJpZXMgZnJvbSByZXBsYXkgZmlsdGVyIGxpc3QgaGVhZCBpZiB0aGVy ZSBpcyBhbnkgKi8NCj4gKwlpY2Vfcm1fYWxsX3N3X3JlcGxheV9ydWxlX2luZm8oaHcpOw0KPiAr CS8qIEluIHN0YXJ0IG9mIHJlcGxheSwgbW92ZSBlbnRyaWVzIGludG8gcmVwbGF5X3J1bGVzIGxp c3QsIGl0DQo+ICsJICogd2lsbCBhbGxvdyBhZGRpbmcgcnVsZXMgZW50cmllcyBiYWNrIHRvIGZp bHRfcnVsZXMgbGlzdCwNCj4gKwkgKiB3aGljaCBpcyBvcGVyYXRpb25hbCBsaXN0Lg0KPiArCSAq Lw0KPiArCWZvciAoaSA9IDA7IGkgPCBJQ0VfTUFYX05VTV9SRUNJUEVTOyBpKyspDQo+ICsJCUxJ U1RfUkVQTEFDRV9JTklUKCZzdy0+cmVjcF9saXN0W2ldLmZpbHRfcnVsZXMsDQo+ICsJCQkJICAm c3ctPnJlY3BfbGlzdFtpXS5maWx0X3JlcGxheV9ydWxlcyk7DQo+ICsJaWNlX3NjaGVkX3JlcGxh eV9hZ2dfdnNpX3ByZWluaXQoaHcpOw0KPiArDQo+ICsJcmV0dXJuIGljZV9zY2hlZF9yZXBsYXlf dGNfbm9kZV9idyhodyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWNlX3JlcGxheV92c2kg LSByZXBsYXkgdnNpIGNvbmZpZ3VyYXRpb24NCj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcg c3RydWN0DQo+ICsgKiBAdnNpX2hhbmRsZTogZHJpdmVyIHZzaSBoYW5kbGUNCj4gKyAqDQo+ICsg KiBSZXN0b3JlIGFsbCBWU0kgY29uZmlndXJhdGlvbiBhZnRlciByZXNldC4gSXQgaXMgcmVxdWly ZWQgdG8gY2FsbCB0aGlzDQo+ICsgKiBmdW5jdGlvbiB3aXRoIG1haW4gVlNJIGZpcnN0Lg0KPiAr ICovDQo+ICtlbnVtIGljZV9zdGF0dXMgaWNlX3JlcGxheV92c2koc3RydWN0IGljZV9odyAqaHcs IHUxNiB2c2lfaGFuZGxlKQ0KPiArew0KPiArCWVudW0gaWNlX3N0YXR1cyBzdGF0dXM7DQo+ICsN Cj4gKwlpZiAoIWljZV9pc192c2lfdmFsaWQoaHcsIHZzaV9oYW5kbGUpKQ0KPiArCQlyZXR1cm4g SUNFX0VSUl9QQVJBTTsNCj4gKw0KPiArCS8qIFJlcGxheSBwcmUtaW5pdGlhbGl6YXRpb24gaWYg dGhlcmUgaXMgYW55ICovDQo+ICsJaWYgKHZzaV9oYW5kbGUgPT0gSUNFX01BSU5fVlNJX0hBTkRM RSkgew0KPiArCQlzdGF0dXMgPSBpY2VfcmVwbGF5X3ByZV9pbml0KGh3KTsNCj4gKwkJaWYgKHN0 YXR1cykNCj4gKwkJCXJldHVybiBzdGF0dXM7DQo+ICsJfQ0KPiArDQo+ICsJLyogUmVwbGF5IHBl ciBWU0kgYWxsIGZpbHRlcnMgKi8NCj4gKwlzdGF0dXMgPSBpY2VfcmVwbGF5X3ZzaV9hbGxfZmx0 cihodywgdnNpX2hhbmRsZSk7DQo+ICsJaWYgKCFzdGF0dXMpDQo+ICsJCXN0YXR1cyA9IGljZV9y ZXBsYXlfdnNpX2FnZyhodywgdnNpX2hhbmRsZSk7DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgKiBpY2VfcmVwbGF5X3Bvc3QgLSBwb3N0IHJlcGxheSBjb25maWd1 cmF0aW9uIGNsZWFudXANCj4gKyAqIEBodzogcG9pbnRlciB0byB0aGUgaHcgc3RydWN0DQo+ICsg Kg0KPiArICogUG9zdCByZXBsYXkgY2xlYW51cC4NCj4gKyAqLw0KPiArdm9pZCBpY2VfcmVwbGF5 X3Bvc3Qoc3RydWN0IGljZV9odyAqaHcpDQo+ICt7DQo+ICsJLyogRGVsZXRlIG9sZCBlbnRyaWVz IGZyb20gcmVwbGF5IGZpbHRlciBsaXN0IGhlYWQgKi8NCj4gKwlpY2Vfcm1fYWxsX3N3X3JlcGxh eV9ydWxlX2luZm8oaHcpOw0KPiArCWljZV9zY2hlZF9yZXBsYXlfYWdnKGh3KTsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgKiBpY2Vfc3RhdF91cGRhdGU0MCAtIHJlYWQgNDAgYml0IHN0YXQgZnJv bSB0aGUgY2hpcCBhbmQgdXBkYXRlIHN0YXQgdmFsdWVzDQo+ICsgKiBAaHc6IHB0ciB0byB0aGUg aGFyZHdhcmUgaW5mbw0KPiArICogQGhpcmVnOiBoaWdoIDMyIGJpdCBIVyByZWdpc3RlciB0byBy ZWFkIGZyb20NCj4gKyAqIEBsb3JlZzogbG93IDMyIGJpdCBIVyByZWdpc3RlciB0byByZWFkIGZy b20NCj4gKyAqIEBwcmV2X3N0YXRfbG9hZGVkOiBib29sIHRvIHNwZWNpZnkgaWYgcHJldmlvdXMg c3RhdHMgYXJlIGxvYWRlZA0KPiArICogQHByZXZfc3RhdDogcHRyIHRvIHByZXZpb3VzIGxvYWRl ZCBzdGF0IHZhbHVlDQo+ICsgKiBAY3VyX3N0YXQ6IHB0ciB0byBjdXJyZW50IHN0YXQgdmFsdWUN Cj4gKyAqLw0KPiArdm9pZA0KPiAraWNlX3N0YXRfdXBkYXRlNDAoc3RydWN0IGljZV9odyAqaHcs IHUzMiBoaXJlZywgdTMyIGxvcmVnLA0KPiArCQkgIGJvb2wgcHJldl9zdGF0X2xvYWRlZCwgdTY0 ICpwcmV2X3N0YXQsIHU2NCAqY3VyX3N0YXQpDQo+ICt7DQo+ICsJdTY0IG5ld19kYXRhOw0KPiAr DQo+ICsJbmV3X2RhdGEgPSByZDMyKGh3LCBsb3JlZyk7DQo+ICsJbmV3X2RhdGEgfD0gKCh1NjQp KHJkMzIoaHcsIGhpcmVnKSAmIDB4RkZGRikpIDw8IDMyOw0KPiArDQo+ICsJLyogZGV2aWNlIHN0 YXRzIGFyZSBub3QgcmVzZXQgYXQgUEZSLCB0aGV5IGxpa2VseSB3aWxsIG5vdCBiZSB6ZXJvZWQN Cj4gKwkgKiB3aGVuIHRoZSBkcml2ZXIgc3RhcnRzLiBTbyBzYXZlIHRoZSBmaXJzdCB2YWx1ZXMg cmVhZCBhbmQgdXNlIHRoZW0gYXMNCj4gKwkgKiBvZmZzZXRzIHRvIGJlIHN1YnRyYWN0ZWQgZnJv bSB0aGUgcmF3IHZhbHVlcyBpbiBvcmRlciB0byByZXBvcnQgc3RhdHMNCj4gKwkgKiB0aGF0IGNv dW50IGZyb20gemVyby4NCj4gKwkgKi8NCj4gKwlpZiAoIXByZXZfc3RhdF9sb2FkZWQpDQo+ICsJ CSpwcmV2X3N0YXQgPSBuZXdfZGF0YTsNCj4gKwlpZiAobmV3X2RhdGEgPj0gKnByZXZfc3RhdCkN Cj4gKwkJKmN1cl9zdGF0ID0gbmV3X2RhdGEgLSAqcHJldl9zdGF0Ow0KPiArCWVsc2UNCj4gKwkJ LyogdG8gbWFuYWdlIHRoZSBwb3RlbnRpYWwgcm9sbC1vdmVyICovDQo+ICsJCSpjdXJfc3RhdCA9 IChuZXdfZGF0YSArIEJJVF9VTEwoNDApKSAtICpwcmV2X3N0YXQ7DQo+ICsJKmN1cl9zdGF0ICY9 IDB4RkZGRkZGRkZGRlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpY2Vfc3RhdF91cGRh dGUzMiAtIHJlYWQgMzIgYml0IHN0YXQgZnJvbSB0aGUgY2hpcCBhbmQgdXBkYXRlIHN0YXQgdmFs dWVzDQo+ICsgKiBAaHc6IHB0ciB0byB0aGUgaGFyZHdhcmUgaW5mbw0KPiArICogQHJlZzogSFcg cmVnaXN0ZXIgdG8gcmVhZCBmcm9tDQo+ICsgKiBAcHJldl9zdGF0X2xvYWRlZDogYm9vbCB0byBz cGVjaWZ5IGlmIHByZXZpb3VzIHN0YXRzIGFyZSBsb2FkZWQNCj4gKyAqIEBwcmV2X3N0YXQ6IHB0 ciB0byBwcmV2aW91cyBsb2FkZWQgc3RhdCB2YWx1ZQ0KPiArICogQGN1cl9zdGF0OiBwdHIgdG8g Y3VycmVudCBzdGF0IHZhbHVlDQo+ICsgKi8NCj4gK3ZvaWQNCj4gK2ljZV9zdGF0X3VwZGF0ZTMy KHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgcmVnLCBib29sIHByZXZfc3RhdF9sb2FkZWQsDQo+ICsJ CSAgdTY0ICpwcmV2X3N0YXQsIHU2NCAqY3VyX3N0YXQpDQo+ICt7DQo+ICsJdTMyIG5ld19kYXRh Ow0KPiArDQo+ICsJbmV3X2RhdGEgPSByZDMyKGh3LCByZWcpOw0KPiArDQo+ICsJLyogZGV2aWNl IHN0YXRzIGFyZSBub3QgcmVzZXQgYXQgUEZSLCB0aGV5IGxpa2VseSB3aWxsIG5vdCBiZSB6ZXJv ZWQNCj4gKwkgKiB3aGVuIHRoZSBkcml2ZXIgc3RhcnRzLiBTbyBzYXZlIHRoZSBmaXJzdCB2YWx1 ZXMgcmVhZCBhbmQgdXNlIHRoZW0gYXMNCj4gKwkgKiBvZmZzZXRzIHRvIGJlIHN1YnRyYWN0ZWQg ZnJvbSB0aGUgcmF3IHZhbHVlcyBpbiBvcmRlciB0byByZXBvcnQgc3RhdHMNCj4gKwkgKiB0aGF0 IGNvdW50IGZyb20gemVyby4NCj4gKwkgKi8NCj4gKwlpZiAoIXByZXZfc3RhdF9sb2FkZWQpDQo+ ICsJCSpwcmV2X3N0YXQgPSBuZXdfZGF0YTsNCj4gKwlpZiAobmV3X2RhdGEgPj0gKnByZXZfc3Rh dCkNCj4gKwkJKmN1cl9zdGF0ID0gbmV3X2RhdGEgLSAqcHJldl9zdGF0Ow0KPiArCWVsc2UNCj4g KwkJLyogdG8gbWFuYWdlIHRoZSBwb3RlbnRpYWwgcm9sbC1vdmVyICovDQo+ICsJCSpjdXJfc3Rh dCA9IChuZXdfZGF0YSArIEJJVF9VTEwoMzIpKSAtICpwcmV2X3N0YXQ7DQo+ICt9DQo+ICsNCj4g Kw0KPiArLyoqDQo+ICsgKiBpY2Vfc2NoZWRfcXVlcnlfZWxlbSAtIHF1ZXJ5IGVsZW1lbnQgaW5m b3JtYXRpb24gZnJvbSBodw0KPiArICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QNCj4g KyAqIEBub2RlX3RlaWQ6IG5vZGUgdGVpZCB0byBiZSBxdWVyaWVkDQo+ICsgKiBAYnVmOiBidWZm ZXIgdG8gZWxlbWVudCBpbmZvcm1hdGlvbg0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gcXVl cmllcyBIVyBlbGVtZW50IGluZm9ybWF0aW9uDQo+ICsgKi8NCj4gK2VudW0gaWNlX3N0YXR1cw0K PiAraWNlX3NjaGVkX3F1ZXJ5X2VsZW0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBub2RlX3RlaWQs DQo+ICsJCSAgICAgc3RydWN0IGljZV9hcWNfZ2V0X2VsZW0gKmJ1ZikNCj4gK3sNCj4gKwl1MTYg YnVmX3NpemUsIG51bV9lbGVtX3JldCA9IDA7DQo+ICsJZW51bSBpY2Vfc3RhdHVzIHN0YXR1czsN Cj4gKw0KPiArCWJ1Zl9zaXplID0gc2l6ZW9mKCpidWYpOw0KPiArCWljZV9tZW1zZXQoYnVmLCAw LCBidWZfc2l6ZSwgSUNFX05PTkRNQV9NRU0pOw0KPiArCWJ1Zi0+Z2VuZXJpY1swXS5ub2RlX3Rl aWQgPSBDUFVfVE9fTEUzMihub2RlX3RlaWQpOw0KPiArCXN0YXR1cyA9IGljZV9hcV9xdWVyeV9z Y2hlZF9lbGVtcyhodywgMSwgYnVmLCBidWZfc2l6ZSwgJm51bV9lbGVtX3JldCwNCj4gKwkJCQkJ ICBOVUxMKTsNCj4gKwlpZiAoc3RhdHVzICE9IElDRV9TVUNDRVNTIHx8IG51bV9lbGVtX3JldCAh PSAxKQ0KPiArCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfU0NIRUQsICJxdWVyeSBlbGVtZW50IGZh aWxlZFxuIik7DQo+ICsJcmV0dXJuIHN0YXR1czsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvbmV0L2ljZS9iYXNlL2ljZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2ljZS9iYXNlL2ljZV9j b21tb24uaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4wODJhZTY2 DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvaWNlL2Jhc2UvaWNlX2NvbW1v bi5oDQo+IEBAIC0wLDAgKzEsMTg2IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAwMS0yMDE4DQo+ICsgKi8NCj4gKw0K PiArI2lmbmRlZiBfSUNFX0NPTU1PTl9IXw0KPiArI2RlZmluZSBfSUNFX0NPTU1PTl9IXw0KPiAr DQo+ICsjaW5jbHVkZSAiaWNlX3R5cGUuaCINCj4gKw0KPiArI2luY2x1ZGUgImljZV9zd2l0Y2gu aCINCj4gKw0KPiArLyogcHJvdG90eXBlIGZvciBmdW5jdGlvbnMgdXNlZCBmb3IgU1cgbG9ja3Mg Ki8NCj4gK3ZvaWQgaWNlX2ZyZWVfbGlzdChzdHJ1Y3QgTElTVF9IRUFEX1RZUEUgKmxpc3QpOw0K PiArdm9pZCBpY2VfaW5pdF9sb2NrKHN0cnVjdCBpY2VfbG9jayAqbG9jayk7DQo+ICt2b2lkIGlj ZV9hY3F1aXJlX2xvY2soc3RydWN0IGljZV9sb2NrICpsb2NrKTsNCj4gK3ZvaWQgaWNlX3JlbGVh c2VfbG9jayhzdHJ1Y3QgaWNlX2xvY2sgKmxvY2spOw0KPiArdm9pZCBpY2VfZGVzdHJveV9sb2Nr KHN0cnVjdCBpY2VfbG9jayAqbG9jayk7DQo+ICsNCj4gK3ZvaWQgKmljZV9hbGxvY19kbWFfbWVt KHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RtYV9tZW0gKm0sIHU2NCBzaXplKTsNCj4g K3ZvaWQgaWNlX2ZyZWVfZG1hX21lbShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kbWFf bWVtICptKTsNCj4gKw0KPiArYm9vbCBpY2Vfc3FfZG9uZShzdHJ1Y3QgaWNlX2h3ICpodywgc3Ry dWN0IGljZV9jdGxfcV9pbmZvICpjcSk7DQo+ICsNCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfbnZt X3ZhbGlkYXRlX2NoZWNrc3VtKHN0cnVjdCBpY2VfaHcgKmh3KTsNCj4gKw0KPiArdm9pZA0KPiAr aWNlX2RlYnVnX2NxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgbWFzaywgdm9pZCAqZGVzYywgdm9p ZCAqYnVmLCB1MTYgYnVmX2xlbik7DQo+ICtlbnVtIGljZV9zdGF0dXMgaWNlX2luaXRfaHcoc3Ry dWN0IGljZV9odyAqaHcpOw0KPiArdm9pZCBpY2VfZGVpbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3 KTsNCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfY2hlY2tfcmVzZXQoc3RydWN0IGljZV9odyAqaHcp Ow0KPiArZW51bSBpY2Vfc3RhdHVzIGljZV9yZXNldChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBp Y2VfcmVzZXRfcmVxIHJlcSk7DQo+ICsNCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfaW5pdF9hbGxf Y3RybHEoc3RydWN0IGljZV9odyAqaHcpOw0KPiArdm9pZCBpY2Vfc2h1dGRvd25fYWxsX2N0cmxx KHN0cnVjdCBpY2VfaHcgKmh3KTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2NsZWFuX3Jx X2VsZW0oc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EsDQo+ICsJ CSAgc3RydWN0IGljZV9ycV9ldmVudF9pbmZvICplLCB1MTYgKnBlbmRpbmcpOw0KPiArZW51bSBp Y2Vfc3RhdHVzDQo+ICtpY2VfZ2V0X2xpbmtfc3RhdHVzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpw aSwgYm9vbCAqbGlua191cCk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV91cGRhdGVfbGlu a19pbmZvKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4g K2ljZV9hY3F1aXJlX3JlcyhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2lkcyBy ZXMsDQo+ICsJCWVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MsIHUzMiB0aW1lb3V0 KTsNCj4gK3ZvaWQgaWNlX3JlbGVhc2VfcmVzKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9h cV9yZXNfaWRzIHJlcyk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9hbGxvY19mcmVl X3JlcyhzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG51bV9lbnRyaWVzLA0KPiArCQkgICAgICBzdHJ1 Y3QgaWNlX2FxY19hbGxvY19mcmVlX3Jlc19lbGVtICpidWYsIHUxNiBidWZfc2l6ZSwNCj4gKwkJ ICAgICAgZW51bSBpY2VfYWRtaW5xX29wYyBvcGMsIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKTsNCj4g K2VudW0gaWNlX3N0YXR1cyBpY2VfaW5pdF9udm0oc3RydWN0IGljZV9odyAqaHcpOw0KPiArZW51 bSBpY2Vfc3RhdHVzIGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZz ZXQsIHUxNiAqZGF0YSk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9yZWFkX3NyX2J1Zihz dHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICp3b3JkcywgdTE2ICpkYXRhKTsNCj4g K2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3NxX3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBz dHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxLA0KPiArCQlzdHJ1Y3QgaWNlX2FxX2Rlc2MgKmRlc2Ms IHZvaWQgKmJ1ZiwgdTE2IGJ1Zl9zaXplLA0KPiArCQlzdHJ1Y3QgaWNlX3NxX2NkICpjZCk7DQo+ ICt2b2lkIGljZV9jbGVhcl9weGVfbW9kZShzdHJ1Y3QgaWNlX2h3ICpodyk7DQo+ICsNCj4gK2Vu dW0gaWNlX3N0YXR1cyBpY2VfZ2V0X2NhcHMoc3RydWN0IGljZV9odyAqaHcpOw0KPiArDQo+ICsN Cj4gKw0KPiArI2lmIGRlZmluZWQoRlBHQV9TVVBQT1JUKSB8fCBkZWZpbmVkKENWTF9BMF9TVVBQ T1JUKQ0KPiArdm9pZCBpY2VfZGV2X29uZXRpbWVfc2V0dXAoc3RydWN0IGljZV9odyAqaHcpOw0K PiArI2VuZGlmIC8qIEZQR0FfU1VQUE9SVCB8fCBDVkxfQTBfU1VQUE9SVCAqLw0KPiArDQo+ICsN Cj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3dyaXRlX3J4cV9jdHgoc3RydWN0IGljZV9odyAq aHcsIHN0cnVjdCBpY2Vfcmxhbl9jdHggKnJsYW5fY3R4LA0KPiArCQkgIHUzMiByeHFfaW5kZXgp Ow0KPiArI2lmICFkZWZpbmVkKE5PX1VOVVNFRF9DVFhfQ09ERSkgfHwgZGVmaW5lZChBRV9EUklW RVIpDQo+ICtlbnVtIGljZV9zdGF0dXMgaWNlX2NsZWFyX3J4cV9jdHgoc3RydWN0IGljZV9odyAq aHcsIHUzMiByeHFfaW5kZXgpOw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfY2xlYXJfdHhf Y21wbHRucV9jdHgoc3RydWN0IGljZV9odyAqaHcsIHUzMiB0eF9jbXBsdG5xX2luZGV4KTsNCj4g K2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3dyaXRlX3R4X2NtcGx0bnFfY3R4KHN0cnVjdCBpY2Vf aHcgKmh3LA0KPiArCQkJIHN0cnVjdCBpY2VfdHhfY21wbHRucV9jdHggKnR4X2NtcGx0bnFfY3R4 LA0KPiArCQkJIHUzMiB0eF9jbXBsdG5xX2luZGV4KTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAr aWNlX2NsZWFyX3R4X2RyYmVsbF9xX2N0eChzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIHR4X2RyYmVs bF9xX2luZGV4KTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX3dyaXRlX3R4X2RyYmVsbF9x X2N0eChzdHJ1Y3QgaWNlX2h3ICpodywNCj4gKwkJCSAgc3RydWN0IGljZV90eF9kcmJlbGxfcV9j dHggKnR4X2RyYmVsbF9xX2N0eCwNCj4gKwkJCSAgdTMyIHR4X2RyYmVsbF9xX2luZGV4KTsNCj4g KyNlbmRpZiAvKiAhTk9fVU5VU0VEX0NUWF9DT0RFIHx8IEFFX0RSSVZFUiAqLw0KPiArDQo+ICtl bnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9nZXRfcnNzX2x1dChzdHJ1Y3QgaWNlX2h3ICpodywg dTE2IHZzaV9oYW5kbGUsIHU4IGx1dF90eXBlLCB1OCAqbHV0LA0KPiArCQkgICB1MTYgbHV0X3Np emUpOw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfYXFfc2V0X3Jzc19sdXQoc3RydWN0IGlj ZV9odyAqaHcsIHUxNiB2c2lfaGFuZGxlLCB1OCBsdXRfdHlwZSwgdTggKmx1dCwNCj4gKwkJICAg dTE2IGx1dF9zaXplKTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX2dldF9yc3Nfa2V5 KHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgdnNpX2hhbmRsZSwNCj4gKwkJICAgc3RydWN0IGljZV9h cWNfZ2V0X3NldF9yc3Nfa2V5cyAqa2V5cyk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9h cV9zZXRfcnNzX2tleShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IHZzaV9oYW5kbGUsDQo+ICsJCSAg IHN0cnVjdCBpY2VfYXFjX2dldF9zZXRfcnNzX2tleXMgKmtleXMpOw0KPiArDQo+ICtib29sIGlj ZV9jaGVja19zcV9hbGl2ZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9jdGxfcV9pbmZv ICpjcSk7DQo+ICtlbnVtIGljZV9zdGF0dXMgaWNlX2FxX3Ffc2h1dGRvd24oc3RydWN0IGljZV9o dyAqaHcsIGJvb2wgdW5sb2FkaW5nKTsNCj4gK3ZvaWQgaWNlX2ZpbGxfZGZsdF9kaXJlY3RfY21k X2Rlc2Moc3RydWN0IGljZV9hcV9kZXNjICpkZXNjLCB1MTYgb3Bjb2RlKTsNCj4gK2V4dGVybiBj b25zdCBzdHJ1Y3QgaWNlX2N0eF9lbGUgaWNlX3RsYW5fY3R4X2luZm9bXTsNCj4gK2VudW0gaWNl X3N0YXR1cw0KPiAraWNlX3NldF9jdHgodTggKnNyY19jdHgsIHU4ICpkZXN0X2N0eCwgY29uc3Qg c3RydWN0IGljZV9jdHhfZWxlICpjZV9pbmZvKTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNl X2FxX3NlbmRfY21kKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxX2Rlc2MgKmRlc2Ms DQo+ICsJCXZvaWQgKmJ1ZiwgdTE2IGJ1Zl9zaXplLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZCk7DQo+ ICtlbnVtIGljZV9zdGF0dXMgaWNlX2FxX2dldF9md192ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0 cnVjdCBpY2Vfc3FfY2QgKmNkKTsNCj4gKw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfYXFf Z2V0X3BoeV9jYXBzKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBxdWFsX21vZHMsIHU4 IHJlcG9ydF9tb2RlLA0KPiArCQkgICAgc3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEg KmNhcHMsDQo+ICsJCSAgICBzdHJ1Y3QgaWNlX3NxX2NkICpjZCk7DQo+ICt2b2lkDQo+ICtpY2Vf dXBkYXRlX3BoeV90eXBlKHU2NCAqcGh5X3R5cGVfbG93LCB1NjQgKnBoeV90eXBlX2hpZ2gsDQo+ ICsJCSAgICB1MTYgbGlua19zcGVlZHNfYml0bWFwKTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAr aWNlX2FxX21hbmFnZV9tYWNfd3JpdGUoc3RydWN0IGljZV9odyAqaHcsIGNvbnN0IHU4ICptYWNf YWRkciwgdTggZmxhZ3MsDQo+ICsJCQlzdHJ1Y3QgaWNlX3NxX2NkICpjZCk7DQo+ICsNCj4gK2Vu dW0gaWNlX3N0YXR1cyBpY2VfY2xlYXJfcGZfY2ZnKHN0cnVjdCBpY2VfaHcgKmh3KTsNCj4gK2Vu dW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX3NldF9waHlfY2ZnKHN0cnVjdCBpY2VfaHcgKmh3LCB1 OCBscG9ydCwNCj4gKwkJICAgc3RydWN0IGljZV9hcWNfc2V0X3BoeV9jZmdfZGF0YSAqY2ZnLCBz dHJ1Y3QgaWNlX3NxX2NkICpjZCk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9zZXRfZmMo c3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCB1OCAqYXFfZmFpbHVyZXMsDQo+ICsJICAgYm9vbCBl bmFfYXV0b19saW5rX3VwZGF0ZSk7DQo+ICt2b2lkDQo+ICtpY2VfY2ZnX3BoeV9mZWMoc3RydWN0 IGljZV9hcWNfc2V0X3BoeV9jZmdfZGF0YSAqY2ZnLCBlbnVtIGljZV9mZWNfbW9kZSBmZWMpOw0K PiArdm9pZA0KPiAraWNlX2NvcHlfcGh5X2NhcHNfdG9fY2ZnKHN0cnVjdCBpY2VfYXFjX2dldF9w aHlfY2Fwc19kYXRhICpjYXBzLA0KPiArCQkJIHN0cnVjdCBpY2VfYXFjX3NldF9waHlfY2ZnX2Rh dGEgKmNmZyk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9hcV9zZXRfbGlua19yZXN0YXJ0 X2FuKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgYm9vbCBlbmFfbGluaywNCj4gKwkJCSAgIHN0 cnVjdCBpY2Vfc3FfY2QgKmNkKTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX2dldF9s aW5rX2luZm8oc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCBib29sIGVuYV9sc2UsDQo+ICsJCSAg ICAgc3RydWN0IGljZV9saW5rX3N0YXR1cyAqbGluaywgc3RydWN0IGljZV9zcV9jZCAqY2QpOw0K PiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfYXFfc2V0X2V2ZW50X21hc2soc3RydWN0IGljZV9o dyAqaHcsIHU4IHBvcnRfbnVtLCB1MTYgbWFzaywNCj4gKwkJICAgICAgc3RydWN0IGljZV9zcV9j ZCAqY2QpOw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfYXFfc2V0X21hY19sb29wYmFjayhz dHJ1Y3QgaWNlX2h3ICpodywgYm9vbCBlbmFfbHBiaywgc3RydWN0IGljZV9zcV9jZCAqY2QpOw0K PiArDQo+ICsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAraWNlX2FxX3NldF9wb3J0X2lkX2xlZChz dHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIGJvb2wgaXNfb3JpZ19tb2RlLA0KPiArCQkgICAgICAg c3RydWN0IGljZV9zcV9jZCAqY2QpOw0KPiArDQo+ICsNCj4gKw0KPiArDQo+ICtlbnVtIGljZV9z dGF0dXMNCj4gK2ljZV9kaXNfdnNpX3R4cShzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIHU4IG51 bV9xdWV1ZXMsIHUxNiAqcV9pZHMsDQo+ICsJCXUzMiAqcV90ZWlkcywgZW51bSBpY2VfZGlzcV9y c3Rfc3JjIHJzdF9zcmMsIHUxNiB2bXZmX251bSwNCj4gKwkJc3RydWN0IGljZV9zcV9jZCAqY21k X2RldGFpbHMpOw0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfY2ZnX3ZzaV9sYW4oc3RydWN0 IGljZV9wb3J0X2luZm8gKnBpLCB1MTYgdnNpX2hhbmRsZSwgdTggdGNfYml0bWFwLA0KPiArCQl1 MTYgKm1heF9sYW5xcyk7DQo+ICtlbnVtIGljZV9zdGF0dXMNCj4gK2ljZV9lbmFfdnNpX3R4cShz dHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIHUxNiB2c2lfaGFuZGxlLCB1OCB0YywgdTggbnVtX3Fn cnBzLA0KPiArCQlzdHJ1Y3QgaWNlX2FxY19hZGRfdHhfcWdycCAqYnVmLCB1MTYgYnVmX3NpemUs DQo+ICsJCXN0cnVjdCBpY2Vfc3FfY2QgKmNkKTsNCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfcmVw bGF5X3ZzaShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IHZzaV9oYW5kbGUpOw0KPiArdm9pZCBpY2Vf cmVwbGF5X3Bvc3Qoc3RydWN0IGljZV9odyAqaHcpOw0KPiArdm9pZCBpY2Vfc2NoZWRfcmVwbGF5 X2FnZ192c2lfcHJlaW5pdChzdHJ1Y3QgaWNlX2h3ICpodyk7DQo+ICt2b2lkIGljZV9zY2hlZF9y ZXBsYXlfYWdnKHN0cnVjdCBpY2VfaHcgKmh3KTsNCj4gK2VudW0gaWNlX3N0YXR1cyBpY2Vfc2No ZWRfcmVwbGF5X3RjX25vZGVfYncoc3RydWN0IGljZV9odyAqaHcpOw0KPiArZW51bSBpY2Vfc3Rh dHVzIGljZV9yZXBsYXlfdnNpX2FnZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IHZzaV9oYW5kbGUp Ow0KPiArZW51bSBpY2Vfc3RhdHVzDQo+ICtpY2VfY2ZnX3RjX25vZGVfYndfYWxsb2Moc3RydWN0 IGljZV9wb3J0X2luZm8gKnBpLCB1OCB0YywNCj4gKwkJCSBlbnVtIGljZV9ybF90eXBlIHJsX3R5 cGUsIHU4IGJ3X2FsbG9jKTsNCj4gK2VudW0gaWNlX3N0YXR1cyBpY2VfY2ZnX3JsX2J1cnN0X3Np emUoc3RydWN0IGljZV9odyAqaHcsIHUzMiBieXRlcyk7DQo+ICt2b2lkIGljZV9vdXRwdXRfZndf bG9nKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2FxX2Rlc2MgKmRlc2MsIHZvaWQgKmJ1 Zik7DQo+ICt2b2lkDQo+ICtpY2Vfc3RhdF91cGRhdGU0MChzdHJ1Y3QgaWNlX2h3ICpodywgdTMy IGhpcmVnLCB1MzIgbG9yZWcsDQo+ICsJCSAgYm9vbCBwcmV2X3N0YXRfbG9hZGVkLCB1NjQgKnBy ZXZfc3RhdCwgdTY0ICpjdXJfc3RhdCk7DQo+ICt2b2lkDQo+ICtpY2Vfc3RhdF91cGRhdGUzMihz dHJ1Y3QgaWNlX2h3ICpodywgdTMyIHJlZywgYm9vbCBwcmV2X3N0YXRfbG9hZGVkLA0KPiArCQkg IHU2NCAqcHJldl9zdGF0LCB1NjQgKmN1cl9zdGF0KTsNCj4gK2VudW0gaWNlX3N0YXR1cw0KPiAr aWNlX3NjaGVkX3F1ZXJ5X2VsZW0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBub2RlX3RlaWQsDQo+ ICsJCSAgICAgc3RydWN0IGljZV9hcWNfZ2V0X2VsZW0gKmJ1Zik7DQo+ICsjZW5kaWYgLyogX0lD RV9DT01NT05fSF8gKi8NCj4gDQo=