Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp4493636ybl; Mon, 3 Feb 2020 20:08:24 -0800 (PST) X-Google-Smtp-Source: APXvYqxWbImLIrms65K357Q4CPgdR5M21vmJklRr6KK4Uy+dcTd+LmV8pUYm4aK9B0uGdaAaq8FY X-Received: by 2002:a05:6830:3151:: with SMTP id c17mr7565197ots.182.1580789304176; Mon, 03 Feb 2020 20:08:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580789304; cv=none; d=google.com; s=arc-20160816; b=ZSw9nwo7H/NR9+dWBm42FujuUufE6ZbThCjhtUqwQzKcqqFFaflZErTwEsQjkRC4dZ CIPMqKJTKK9OKjKXOivvfE1zJKRAu9Tsg/elXfIl4s9fclI+j3O957ehF6vjDzF2pZ6L dUH2Dmc1/8JC5X098H6GA84ouZe9Nz1cb4Sa/W76Rs0poeDTsGJiZ8OPNOWrJmJJK79R H+LXP5twIM3oWfwo9tciGcFjzY+9XBxAqp1ozKhBKPRLDLj48A9kwmha5bInRpCo+dR+ UCM7s7bm7+sV8FN8HUuUbfUbzBCLHeVPwnHykF7kKY6uYaI9ow3nnf/8CmqQMQfDHtW0 cDBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:references :message-id:date:thread-index:thread-topic:subject:cc:to:from :dkim-signature; bh=UKz/U12vmfrcgcBekXGd+NUAZTL5Tf/JBXdLka1ZOBM=; b=tQ0iDNI7nIljs6cnotzvhNC9PISZ1dRxMY6I8U9j5oUZX9OM4QLaKFLz9QKBjEu34x 2x8iRLNqmkEhaIzFoaAACvNPHCVJ6bzyedC1mZwnhoXGAneN9PCOMZJbKl6G9oWPxbvy IxOhvcnSikFJ0WSuOx33I/97j2L86wjIvkaGo479kslh/X9OoMB+SGRi5vVGWfW8I6QZ 9u/FgaVnF/xKYEPJUmhmpMmu9y0klYKAURq61upj3XWj2D40Pcy7xw4gUrw0cfAglLxW rVCrjO77d0xGKqEDGzhRhLbqY7GZMg+hcKQFfY7KDfg7MXYsRJ67IcUhZA7Tlgf/WdiQ MvRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@alliedtelesis.co.nz header.s=mail181024 header.b=Tipj0fMH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alliedtelesis.co.nz Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x25si2868773oie.261.2020.02.03.20.08.11; Mon, 03 Feb 2020 20:08:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@alliedtelesis.co.nz header.s=mail181024 header.b=Tipj0fMH; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=alliedtelesis.co.nz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727128AbgBDEG4 (ORCPT + 99 others); Mon, 3 Feb 2020 23:06:56 -0500 Received: from gate2.alliedtelesis.co.nz ([202.36.163.20]:54436 "EHLO gate2.alliedtelesis.co.nz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726924AbgBDEGz (ORCPT ); Mon, 3 Feb 2020 23:06:55 -0500 Received: from mmarshal3.atlnz.lc (mmarshal3.atlnz.lc [10.32.18.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by gate2.alliedtelesis.co.nz (Postfix) with ESMTPS id 6299A891AA for ; Tue, 4 Feb 2020 17:06:52 +1300 (NZDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alliedtelesis.co.nz; s=mail181024; t=1580789212; bh=UKz/U12vmfrcgcBekXGd+NUAZTL5Tf/JBXdLka1ZOBM=; h=From:To:CC:Subject:Date:References:In-Reply-To; b=Tipj0fMHtvs4nLCTLqlSIxBR7OBD1Hg5vVSUV2ZuIN0seOmG2URwRlzuMlM2sRhzI Ki9+9Kene/Y8/A4CYe9y3wAklHwP30fNbGXFzxi32ssi49QZJykdOOn3spiCUQ/5pi BXnimxUdzJBzu9U+21RG3V2K2VW7OWCgnIGVTtiS2BqXMZXcY3ZlTHZrpA4KKy8xHA gZT52CbajRDwWIxT0avQ4bFv/5K2mppO5sk8b/EvoJzFh5OCQ/cvDlfWFUhZWMy5+P /eAqN2DcGgM4R6tWa2cp517VfSbWcAHZ8S30yOYNVa8oX3/yBj8pDJJ4cbcTOWm+sY Sp0FM5RtAx4gw== Received: from svr-chch-ex1.atlnz.lc (Not Verified[10.32.16.77]) by mmarshal3.atlnz.lc with Trustwave SEG (v7,5,8,10121) id ; Tue, 04 Feb 2020 17:06:52 +1300 Received: from svr-chch-ex1.atlnz.lc (2001:df5:b000:bc8::77) by svr-chch-ex1.atlnz.lc (2001:df5:b000:bc8::77) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 4 Feb 2020 17:06:51 +1300 Received: from svr-chch-ex1.atlnz.lc ([fe80::409d:36f5:8899:92e8]) by svr-chch-ex1.atlnz.lc ([fe80::409d:36f5:8899:92e8%12]) with mapi id 15.00.1473.005; Tue, 4 Feb 2020 17:06:51 +1300 From: Chris Packham To: "gregkh@linuxfoundation.org" , "devel@driverdev.osuosl.org" CC: "frank@generalsoftwareinc.com" , "aaro.koskinen@iki.fi" , "ddaney.cavm@gmail.com" , "laura.lazzati.15@gmail.com" , "linux-kernel@vger.kernel.org" , "nishkadg.linux@gmail.com" , "pundirsumit11@gmail.com" Subject: Re: [PATCH 2/2] staging: octeon-usb: delete the octeon usb host controller driver Thread-Topic: [PATCH 2/2] staging: octeon-usb: delete the octeon usb host controller driver Thread-Index: AQHV2xCGcg+YSdv44EOHhleAvPSNjA== Date: Tue, 4 Feb 2020 04:06:51 +0000 Message-ID: References: <20191210091509.3546251-1-gregkh@linuxfoundation.org> <20191210091509.3546251-2-gregkh@linuxfoundation.org> In-Reply-To: <20191210091509.3546251-2-gregkh@linuxfoundation.org> Accept-Language: en-NZ, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.1 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [2001:df5:b000:22:4cc:2ac4:9aa5:522d] Content-Type: text/plain; charset="utf-8" Content-ID: <7185E6C32CA37A49A1276888236267BA@atlnz.lc> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gVHVlLCAyMDE5LTEyLTEwIGF0IDEwOjE1ICswMTAwLCBHcmVnIEtyb2FoLUhhcnRtYW4gd3Jv dGU6DQo+IFRoaXMgZHJpdmVyIHdhcyBtZXJnZWQgYmFjayBpbiAyMDEzIGFuZCBzaG93cyBubyBw cm9ncmVzcyB0b3dhcmQgZXZlcnkNCj4gYmVpbmcgbWVyZ2VkIGludG8gdGhlICJjb3JyZWN0IiBw YXJ0IG9mIHRoZSBrZXJuZWwuICBUaGUgY29kZSBkb2Vzbid0DQo+IGV2ZW4gYnVpbGQgZm9yIGFu eW9uZSB1bmxlc3MgeW91IGhhdmUgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtDQo+IHNl bGVjdGVkLCBzbyBvZGRzIGFyZSBpdCBkb2Vzbid0IGV2ZW4gd29yayBhbnltb3JlLg0KPiANCj4g UmVtb3ZlIGl0IGZvciBub3cgYW5kIGlzIHNvbWVvbmUgY29tZXMgYWxvbmcgdGhhdCBoYXMgdGhl IGhhcmR3YXJlIGFuZA0KPiBpcyB3aWxsaW5nIHRvIGZpeCBpdCB1cCwgaXQgY2FuIGJlIHJldmVy dGVkLg0KPiANCj4gQ2M6IEFhcm8gS29za2luZW4gPGFhcm8ua29za2luZW5AaWtpLmZpPg0KPiBD YzogRGF2aWQgRGFuZXkgPGRkYW5leS5jYXZtQGdtYWlsLmNvbT4NCj4gQ2M6IE5pc2hrYSBEYXNn dXB0YSA8bmlzaGthZGcubGludXhAZ21haWwuY29tPg0KPiBDYzogSGltYWRyaSBQYW5keWEgPGhp bWFkcmkxOC4wN0BnbWFpbC5jb20+DQo+IENjOiAiRnJhbmsgQS4gQ2FuY2lvIEJlbGxvIiA8ZnJh bmtAZ2VuZXJhbHNvZnR3YXJlaW5jLmNvbT4NCj4gQ2M6IFN1bWl0IFB1bmRpciA8cHVuZGlyc3Vt aXQxMUBnbWFpbC5jb20+DQo+IENjOiBMYXVyYSBMYXp6YXRpIDxsYXVyYS5sYXp6YXRpLjE1QGdt YWlsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGlu dXhmb3VuZGF0aW9uLm9yZz4NCj4gLS0tDQoNClNpbWlsYXJseSB3ZSdkIHJlYWxseSBsaWtlIHRv IGtlZXAgdGhpcyB0b28uDQoNCg0KPiAgZHJpdmVycy9zdGFnaW5nL0tjb25maWcgICAgICAgICAg ICAgICAgIHwgICAgMiAtDQo+ICBkcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgICAgICAgICAgICAg ICAgfCAgICAxIC0NCj4gIGRyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL0tjb25maWcgICAgICB8 ICAgMTEgLQ0KPiAgZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2IvTWFrZWZpbGUgICAgIHwgICAg MiAtDQo+ICBkcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9UT0RPICAgICAgICAgfCAgICA4IC0N Cj4gIGRyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL29jdGVvbi1oY2QuYyB8IDM3MzcgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0NCj4gIGRyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL29jdGVvbi1o Y2QuaCB8IDE4NDcgLS0tLS0tLS0tLS0NCj4gIDcgZmlsZXMgY2hhbmdlZCwgNTYwOCBkZWxldGlv bnMoLSkNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9L Y29uZmlnDQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2Iv TWFrZWZpbGUNCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVz Yi9UT0RPDQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2Iv b2N0ZW9uLWhjZC5jDQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL29jdGVv bi11c2Ivb2N0ZW9uLWhjZC5oDQo+IA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tj b25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZw0KPiBpbmRleCAxNWQzNTQ5ZTdjYzcuLjE5 OGJmNTliYzFlNiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcNCj4gKysr IGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcNCj4gQEAgLTQyLDggKzQyLDYgQEAgc291cmNlICJk cml2ZXJzL3N0YWdpbmcvcnRsODE4OGV1L0tjb25maWciDQo+ICANCj4gIHNvdXJjZSAiZHJpdmVy cy9zdGFnaW5nL3J0czUyMDgvS2NvbmZpZyINCj4gIA0KPiAtc291cmNlICJkcml2ZXJzL3N0YWdp bmcvb2N0ZW9uLXVzYi9LY29uZmlnIg0KPiAtDQo+ICBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy92 dDY2NTUvS2NvbmZpZyINCj4gIA0KPiAgc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L0tj b25maWciDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUgYi9kcml2ZXJz L3N0YWdpbmcvTWFrZWZpbGUNCj4gaW5kZXggYzUyMTIwNDIyMGI1Li5iZjIzMGE4MzAzMzggMTAw NjQ0DQo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL3N0 YWdpbmcvTWFrZWZpbGUNCj4gQEAgLTEyLDcgKzEyLDYgQEAgb2JqLSQoQ09ORklHX1I4NzEyVSkJ CSs9IHJ0bDg3MTIvDQo+ICBvYmotJChDT05GSUdfUjgxODhFVSkJCSs9IHJ0bDgxODhldS8NCj4g IG9iai0kKENPTkZJR19SVFM1MjA4KQkJKz0gcnRzNTIwOC8NCj4gIG9iai0kKENPTkZJR19ORVRM T0dJQ19YTFJfTkVUKQkrPSBuZXRsb2dpYy8NCj4gLW9iai0kKENPTkZJR19PQ1RFT05fVVNCKQkr PSBvY3Rlb24tdXNiLw0KPiAgb2JqLSQoQ09ORklHX1ZUNjY1NSkJCSs9IHZ0NjY1NS8NCj4gIG9i ai0kKENPTkZJR19WVDY2NTYpCQkrPSB2dDY2NTYvDQo+ICBvYmotJChDT05GSUdfVk1FX0JVUykJ CSs9IHZtZS8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL0tjb25m aWcgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9LY29uZmlnDQo+IGRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NA0KPiBpbmRleCA2YTVkODQyZWUwZjIuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9k cml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9LY29uZmlnDQo+ICsrKyAvZGV2L251bGwNCj4gQEAg LTEsMTEgKzAsMCBAQA0KPiAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiAt Y29uZmlnIE9DVEVPTl9VU0INCj4gLQl0cmlzdGF0ZSAiQ2F2aXVtIE5ldHdvcmtzIE9jdGVvbiBV U0Igc3VwcG9ydCINCj4gLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU09DICYmIFVTQg0KPiAt CWhlbHANCj4gLQkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFVTQiBob3N0IGNvbnRyb2xsZXIgb24g c29tZSBDYXZpdW0NCj4gLQkgIE5ldHdvcmtzJyBwcm9kdWN0cyBpbiB0aGUgT2N0ZW9uIGZhbWls eS4NCj4gLQ0KPiAtCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZS4gVGhlIG1vZHVsZQ0KPiAtCSAgd2lsbCBiZSBjYWxsZWQgb2N0ZW9uLWhjZC4NCj4g LQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2IvTWFrZWZpbGUgYi9k cml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9NYWtlZmlsZQ0KPiBkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggOTg3M2EwMTMwYWQ1Li4wMDAwMDAwMDAwMDANCj4gLS0tIGEvZHJpdmVy cy9zdGFnaW5nL29jdGVvbi11c2IvTWFrZWZpbGUNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwy ICswLDAgQEANCj4gLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gLW9iai0k e0NPTkZJR19PQ1RFT05fVVNCfSA6PSBvY3Rlb24taGNkLm8NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvc3RhZ2luZy9vY3Rlb24tdXNiL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9U T0RPDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAyYjI5YWNjYTVjYWEuLjAw MDAwMDAwMDAwMA0KPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9UT0RPDQo+ICsr KyAvZGV2L251bGwNCj4gQEAgLTEsOCArMCwwIEBADQo+IC1UaGlzIGRyaXZlciBpcyBmdW5jdGlv bmFsIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgb24gRWRnZVJvdXRlciBMaXRlLA0KPiAtRC1MaW5rIERT Ui0xMDAwTiBhbmQgRUJINTYwMCBldmFsdWF0aW9uIGJvYXJkIHdpdGggVVNCIG1hc3Mgc3RvcmFn ZS4NCj4gLQ0KPiAtVE9ETzoNCj4gLQktIGtlcm5lbCBjb2Rpbmcgc3R5bGUNCj4gLQktIGNoZWNr cGF0Y2ggd2FybmluZ3MNCj4gLQ0KPiAtQ29udGFjdDogQWFybyBLb3NraW5lbiA8YWFyby5rb3Nr aW5lbkBpa2kuZmk+DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9v Y3Rlb24taGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9vY3Rlb24taGNkLmMNCj4g ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDU4MmM5MTg3NTU5ZC4uMDAwMDAwMDAw MDAwDQo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24tdXNiL29jdGVvbi1oY2QuYw0KPiAr KysgL2Rldi9udWxsDQo+IEBAIC0xLDM3MzcgKzAsMCBAQA0KPiAtLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gLS8qDQo+IC0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KPiAtICog TGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9m IHRoaXMgYXJjaGl2ZQ0KPiAtICogZm9yIG1vcmUgZGV0YWlscy4NCj4gLSAqDQo+IC0gKiBDb3B5 cmlnaHQgKEMpIDIwMDggQ2F2aXVtIE5ldHdvcmtzDQo+IC0gKg0KPiAtICogU29tZSBwYXJ0cyBv ZiB0aGUgY29kZSB3ZXJlIG9yaWdpbmFsbHkgcmVsZWFzZWQgdW5kZXIgQlNEIGxpY2Vuc2U6DQo+ IC0gKg0KPiAtICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgQ2F2aXVtIE5ldHdvcmtzIChzdXBw b3J0QGNhdml1bS5jb20pLiBBbGwgcmlnaHRzDQo+IC0gKiByZXNlcnZlZC4NCj4gLSAqDQo+IC0g KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo IG9yIHdpdGhvdXQNCj4gLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCj4gLSAqIG1ldDoNCj4gLSAqDQo+IC0g KiAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQNCj4gLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQo+IC0gKg0KPiAtICogICAqIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUNCj4gLSAqICAgICBj b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu Zw0KPiAtICogICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZA0KPiAtICogICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCj4g LSAqDQo+IC0gKiAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBDYXZpdW0gTmV0d29ya3Mgbm9yIHRo ZSBuYW1lcyBvZg0KPiAtICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzDQo+IC0gKiAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuDQo+IC0gKiAgICAgcGVybWlzc2lv bi4NCj4gLSAqDQo+IC0gKiBUaGlzIFNvZnR3YXJlLCBpbmNsdWRpbmcgdGVjaG5pY2FsIGRhdGEs IG1heSBiZSBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0DQo+IC0gKiBjb250cm9sIGxhd3MsIGluY2x1 ZGluZyB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IGFuZCBpdHMgYXNzb2NpYXRl ZA0KPiAtICogcmVndWxhdGlvbnMsIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IgaW1w b3J0IHJlZ3VsYXRpb25zIGluIG90aGVyDQo+IC0gKiBjb3VudHJpZXMuDQo+IC0gKg0KPiAtICog VE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIFRIRSBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCAiQVMgSVMiDQo+IC0gKiBBTkQgV0lUSCBBTEwgRkFVTFRTIEFORCBDQVZJVU0gTkVU V09SS1MgTUFLRVMgTk8gUFJPTUlTRVMsIFJFUFJFU0VOVEFUSU9OUyBPUg0KPiAtICogV0FSUkFO VElFUywgRUlUSEVSIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSwgT1IgT1RIRVJXSVNFLCBX SVRIIFJFU1BFQ1QgVE8NCj4gLSAqIFRIRSBTT0ZUV0FSRSwgSU5DTFVESU5HIElUUyBDT05ESVRJ T04sIElUUyBDT05GT1JNSVRZIFRPIEFOWSBSRVBSRVNFTlRBVElPTg0KPiAtICogT1IgREVTQ1JJ UFRJT04sIE9SIFRIRSBFWElTVEVOQ0UgT0YgQU5ZIExBVEVOVCBPUiBQQVRFTlQgREVGRUNUUywg QU5EIENBVklVTQ0KPiAtICogU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTEwgSU1QTElFRCAoSUYg QU5ZKSBXQVJSQU5USUVTIE9GIFRJVExFLA0KPiAtICogTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZS SU5HRU1FTlQsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBMQUNLIE9GDQo+IC0g KiBWSVJVU0VTLCBBQ0NVUkFDWSBPUiBDT01QTEVURU5FU1MsIFFVSUVUIEVOSk9ZTUVOVCwgUVVJ RVQgUE9TU0VTU0lPTiBPUg0KPiAtICogQ09SUkVTUE9OREVOQ0UgVE8gREVTQ1JJUFRJT04uIFRI RSBFTlRJUkUgUklTSyBBUklTSU5HIE9VVCBPRiBVU0UgT1INCj4gLSAqIFBFUkZPUk1BTkNFIE9G IFRIRSBTT0ZUV0FSRSBMSUVTIFdJVEggWU9VLg0KPiAtICovDQo+IC0NCj4gLSNpbmNsdWRlIDxs aW51eC91c2IuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+IC0jaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvdXNiL2hjZC5oPg0KPiAtI2luY2x1ZGUg PGxpbnV4L3ByZWZldGNoLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4NCj4g LSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gLQ0KPiAtI2luY2x1ZGUgPGFz bS9vY3Rlb24vb2N0ZW9uLmg+DQo+IC0NCj4gLSNpbmNsdWRlICJvY3Rlb24taGNkLmgiDQo+IC0N Cj4gLS8qKg0KPiAtICogZW51bSBjdm14X3VzYl9zcGVlZCAtIHRoZSBwb3NzaWJsZSBVU0IgZGV2 aWNlIHNwZWVkcw0KPiAtICoNCj4gLSAqIEBDVk1YX1VTQl9TUEVFRF9ISUdIOiBEZXZpY2UgaXMg b3BlcmF0aW9uIGF0IDQ4ME1icHMNCj4gLSAqIEBDVk1YX1VTQl9TUEVFRF9GVUxMOiBEZXZpY2Ug aXMgb3BlcmF0aW9uIGF0IDEyTWJwcw0KPiAtICogQENWTVhfVVNCX1NQRUVEX0xPVzogIERldmlj ZSBpcyBvcGVyYXRpb24gYXQgMS41TWJwcw0KPiAtICovDQo+IC1lbnVtIGN2bXhfdXNiX3NwZWVk IHsNCj4gLQlDVk1YX1VTQl9TUEVFRF9ISUdIID0gMCwNCj4gLQlDVk1YX1VTQl9TUEVFRF9GVUxM ID0gMSwNCj4gLQlDVk1YX1VTQl9TUEVFRF9MT1cgPSAyLA0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+ IC0gKiBlbnVtIGN2bXhfdXNiX3RyYW5zZmVyIC0gdGhlIHBvc3NpYmxlIFVTQiB0cmFuc2ZlciB0 eXBlcw0KPiAtICoNCj4gLSAqIEBDVk1YX1VTQl9UUkFOU0ZFUl9DT05UUk9MOgkgICBVU0IgdHJh bnNmZXIgdHlwZSBjb250cm9sIGZvciBodWIgYW5kIHN0YXR1cw0KPiAtICoJCQkJICAgdHJhbnNm ZXJzDQo+IC0gKiBAQ1ZNWF9VU0JfVFJBTlNGRVJfSVNPQ0hST05PVVM6IFVTQiB0cmFuc2ZlciB0 eXBlIGlzb2Nocm9ub3VzIGZvciBsb3cNCj4gLSAqCQkJCSAgIHByaW9yaXR5IHBlcmlvZGljIHRy YW5zZmVycw0KPiAtICogQENWTVhfVVNCX1RSQU5TRkVSX0JVTEs6CSAgIFVTQiB0cmFuc2ZlciB0 eXBlIGJ1bGsgZm9yIGxhcmdlIGxvdyBwcmlvcml0eQ0KPiAtICoJCQkJICAgdHJhbnNmZXJzDQo+ IC0gKiBAQ1ZNWF9VU0JfVFJBTlNGRVJfSU5URVJSVVBUOiAgIFVTQiB0cmFuc2ZlciB0eXBlIGlu dGVycnVwdCBmb3IgaGlnaCBwcmlvcml0eQ0KPiAtICoJCQkJICAgcGVyaW9kaWMgdHJhbnNmZXJz DQo+IC0gKi8NCj4gLWVudW0gY3ZteF91c2JfdHJhbnNmZXIgew0KPiAtCUNWTVhfVVNCX1RSQU5T RkVSX0NPTlRST0wgPSAwLA0KPiAtCUNWTVhfVVNCX1RSQU5TRkVSX0lTT0NIUk9OT1VTID0gMSwN Cj4gLQlDVk1YX1VTQl9UUkFOU0ZFUl9CVUxLID0gMiwNCj4gLQlDVk1YX1VTQl9UUkFOU0ZFUl9J TlRFUlJVUFQgPSAzLA0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBlbnVtIGN2bXhfdXNiX2Rp cmVjdGlvbiAtIHRoZSB0cmFuc2ZlciBkaXJlY3Rpb25zDQo+IC0gKg0KPiAtICogQENWTVhfVVNC X0RJUkVDVElPTl9PVVQ6IERhdGEgaXMgdHJhbnNmZXJyaW5nIGZyb20gT2N0ZW9uIHRvIHRoZSBk ZXZpY2UvaG9zdA0KPiAtICogQENWTVhfVVNCX0RJUkVDVElPTl9JTjogIERhdGEgaXMgdHJhbnNm ZXJyaW5nIGZyb20gdGhlIGRldmljZS9ob3N0IHRvIE9jdGVvbg0KPiAtICovDQo+IC1lbnVtIGN2 bXhfdXNiX2RpcmVjdGlvbiB7DQo+IC0JQ1ZNWF9VU0JfRElSRUNUSU9OX09VVCwNCj4gLQlDVk1Y X1VTQl9ESVJFQ1RJT05fSU4sDQo+IC19Ow0KPiAtDQo+IC0vKioNCj4gLSAqIGVudW0gY3ZteF91 c2Jfc3RhdHVzIC0gcG9zc2libGUgY2FsbGJhY2sgZnVuY3Rpb24gc3RhdHVzIGNvZGVzDQo+IC0g Kg0KPiAtICogQENWTVhfVVNCX1NUQVRVU19PSzoJCSAgVGhlIHRyYW5zYWN0aW9uIC8gb3BlcmF0 aW9uIGZpbmlzaGVkIHdpdGhvdXQNCj4gLSAqCQkJCSAgYW55IGVycm9ycw0KPiAtICogQENWTVhf VVNCX1NUQVRVU19TSE9SVDoJICBGSVhNRTogVGhpcyBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVu dGVkDQo+IC0gKiBAQ1ZNWF9VU0JfU1RBVFVTX0NBTkNFTDoJICBUaGUgdHJhbnNhY3Rpb24gd2Fz IGNhbmNlbGVkIHdoaWxlIGluIGZsaWdodA0KPiAtICoJCQkJICBieSBhIHVzZXIgY2FsbCB0byBj dm14X3VzYl9jYW5jZWwNCj4gLSAqIEBDVk1YX1VTQl9TVEFUVVNfRVJST1I6CSAgVGhlIHRyYW5z YWN0aW9uIGFib3J0ZWQgd2l0aCBhbiB1bmV4cGVjdGVkDQo+IC0gKgkJCQkgIGVycm9yIHN0YXR1 cw0KPiAtICogQENWTVhfVVNCX1NUQVRVU19TVEFMTDoJICBUaGUgdHJhbnNhY3Rpb24gcmVjZWl2 ZWQgYSBVU0IgU1RBTEwgcmVzcG9uc2UNCj4gLSAqCQkJCSAgZnJvbSB0aGUgZGV2aWNlDQo+IC0g KiBAQ1ZNWF9VU0JfU1RBVFVTX1hBQ1RFUlI6CSAgVGhlIHRyYW5zYWN0aW9uIGZhaWxlZCB3aXRo IGFuIGVycm9yIGZyb20gdGhlDQo+IC0gKgkJCQkgIGRldmljZSBldmVuIGFmdGVyIGEgbnVtYmVy IG9mIHJldHJpZXMNCj4gLSAqIEBDVk1YX1VTQl9TVEFUVVNfREFUQVRHTEVSUjoJICBUaGUgdHJh bnNhY3Rpb24gZmFpbGVkIHdpdGggYSBkYXRhIHRvZ2dsZQ0KPiAtICoJCQkJICBlcnJvciBldmVu IGFmdGVyIGEgbnVtYmVyIG9mIHJldHJpZXMNCj4gLSAqIEBDVk1YX1VTQl9TVEFUVVNfQkFCQkxF RVJSOgkgIFRoZSB0cmFuc2FjdGlvbiBmYWlsZWQgd2l0aCBhIGJhYmJsZSBlcnJvcg0KPiAtICog QENWTVhfVVNCX1NUQVRVU19GUkFNRUVSUjoJICBUaGUgdHJhbnNhY3Rpb24gZmFpbGVkIHdpdGgg YSBmcmFtZSBlcnJvcg0KPiAtICoJCQkJICBldmVuIGFmdGVyIGEgbnVtYmVyIG9mIHJldHJpZXMN Cj4gLSAqLw0KPiAtZW51bSBjdm14X3VzYl9zdGF0dXMgew0KPiAtCUNWTVhfVVNCX1NUQVRVU19P SywNCj4gLQlDVk1YX1VTQl9TVEFUVVNfU0hPUlQsDQo+IC0JQ1ZNWF9VU0JfU1RBVFVTX0NBTkNF TCwNCj4gLQlDVk1YX1VTQl9TVEFUVVNfRVJST1IsDQo+IC0JQ1ZNWF9VU0JfU1RBVFVTX1NUQUxM LA0KPiAtCUNWTVhfVVNCX1NUQVRVU19YQUNURVJSLA0KPiAtCUNWTVhfVVNCX1NUQVRVU19EQVRB VEdMRVJSLA0KPiAtCUNWTVhfVVNCX1NUQVRVU19CQUJCTEVFUlIsDQo+IC0JQ1ZNWF9VU0JfU1RB VFVTX0ZSQU1FRVJSLA0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBzdHJ1Y3QgY3ZteF91c2Jf cG9ydF9zdGF0dXMgLSB0aGUgVVNCIHBvcnQgc3RhdHVzIGluZm9ybWF0aW9uDQo+IC0gKg0KPiAt ICogQHBvcnRfZW5hYmxlZDoJMSA9IFVzYiBwb3J0IGlzIGVuYWJsZWQsIDAgPSBkaXNhYmxlZA0K PiAtICogQHBvcnRfb3Zlcl9jdXJyZW50OgkxID0gT3ZlciBjdXJyZW50IGRldGVjdGVkLCAwID0g T3ZlciBjdXJyZW50IG5vdA0KPiAtICoJCQlkZXRlY3RlZC4gT2N0ZW9uIGRvZXNuJ3Qgc3VwcG9y dCBvdmVyIGN1cnJlbnQgZGV0ZWN0aW9uLg0KPiAtICogQHBvcnRfcG93ZXJlZDoJMSA9IFBvcnQg cG93ZXIgaXMgYmVpbmcgc3VwcGxpZWQgdG8gdGhlIGRldmljZSwgMCA9DQo+IC0gKgkJCXBvd2Vy IGlzIG9mZi4gT2N0ZW9uIGRvZXNuJ3Qgc3VwcG9ydCB0dXJuaW5nIHBvcnQgcG93ZXINCj4gLSAq CQkJb2ZmLg0KPiAtICogQHBvcnRfc3BlZWQ6CQlDdXJyZW50IHBvcnQgc3BlZWQuDQo+IC0gKiBA Y29ubmVjdGVkOgkJMSA9IEEgZGV2aWNlIGlzIGNvbm5lY3RlZCB0byB0aGUgcG9ydCwgMCA9IE5v IGRldmljZSBpcw0KPiAtICoJCQljb25uZWN0ZWQuDQo+IC0gKiBAY29ubmVjdF9jaGFuZ2U6CTEg PSBEZXZpY2UgY29ubmVjdGVkIHN0YXRlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3Qgc2V0DQo+IC0g KgkJCXN0YXR1cyBjYWxsLg0KPiAtICovDQo+IC1zdHJ1Y3QgY3ZteF91c2JfcG9ydF9zdGF0dXMg ew0KPiAtCXUzMiByZXNlcnZlZAkJCTogMjU7DQo+IC0JdTMyIHBvcnRfZW5hYmxlZAkJOiAxOw0K PiAtCXUzMiBwb3J0X292ZXJfY3VycmVudAkJOiAxOw0KPiAtCXUzMiBwb3J0X3Bvd2VyZWQJCTog MTsNCj4gLQllbnVtIGN2bXhfdXNiX3NwZWVkIHBvcnRfc3BlZWQJOiAyOw0KPiAtCXUzMiBjb25u ZWN0ZWQJCQk6IDE7DQo+IC0JdTMyIGNvbm5lY3RfY2hhbmdlCQk6IDE7DQo+IC19Ow0KPiAtDQo+ IC0vKioNCj4gLSAqIHN0cnVjdCBjdm14X3VzYl9pc29fcGFja2V0IC0gZGVzY3JpcHRvciBmb3Ig SXNvY2hyb25vdXMgcGFja2V0cw0KPiAtICoNCj4gLSAqIEBvZmZzZXQ6CVRoaXMgaXMgdGhlIG9m ZnNldCBpbiBieXRlcyBpbnRvIHRoZSBtYWluIGJ1ZmZlciB3aGVyZSB0aGlzIGRhdGENCj4gLSAq CQlpcyBzdG9yZWQuDQo+IC0gKiBAbGVuZ3RoOglUaGlzIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMg b2YgdGhlIGRhdGEuDQo+IC0gKiBAc3RhdHVzOglUaGlzIGlzIHRoZSBzdGF0dXMgb2YgdGhpcyBp bmRpdmlkdWFsIHBhY2tldCB0cmFuc2Zlci4NCj4gLSAqLw0KPiAtc3RydWN0IGN2bXhfdXNiX2lz b19wYWNrZXQgew0KPiAtCWludCBvZmZzZXQ7DQo+IC0JaW50IGxlbmd0aDsNCj4gLQllbnVtIGN2 bXhfdXNiX3N0YXR1cyBzdGF0dXM7DQo+IC19Ow0KPiAtDQo+IC0vKioNCj4gLSAqIGVudW0gY3Zt eF91c2JfaW5pdGlhbGl6ZV9mbGFncyAtIGZsYWdzIHVzZWQgYnkgdGhlIGluaXRpYWxpemF0aW9u IGZ1bmN0aW9uDQo+IC0gKg0KPiAtICogQENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tf WE9fWEk6ICAgIFRoZSBVU0IgcG9ydCB1c2VzIGEgMTJNSHogY3J5c3RhbA0KPiAtICoJCQkJCSAg ICAgIGFzIGNsb2NrIHNvdXJjZSBhdCBVU0JfWE8gYW5kDQo+IC0gKgkJCQkJICAgICAgVVNCX1hJ Lg0KPiAtICogQENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfWE9fR05EOiAgIFRoZSBV U0IgcG9ydCB1c2VzIDEyLzI0LzQ4TUh6IDIuNVYNCj4gLSAqCQkJCQkgICAgICBib2FyZCBjbG9j ayBzb3VyY2UgYXQgVVNCX1hPLg0KPiAtICoJCQkJCSAgICAgIFVTQl9YSSBzaG91bGQgYmUgdGll ZCB0byBHTkQuDQo+IC0gKiBAQ1ZNWF9VU0JfSU5JVElBTElaRV9GTEFHU19DTE9DS19NSFpfTUFT SzogTWFzayBmb3IgY2xvY2sgc3BlZWQgZmllbGQNCj4gLSAqIEBDVk1YX1VTQl9JTklUSUFMSVpF X0ZMQUdTX0NMT0NLXzEyTUhaOiAgICBTcGVlZCBvZiByZWZlcmVuY2UgY2xvY2sgb3INCj4gLSAq CQkJCQkgICAgICBjcnlzdGFsDQo+IC0gKiBAQ1ZNWF9VU0JfSU5JVElBTElaRV9GTEFHU19DTE9D S18yNE1IWjogICAgU3BlZWQgb2YgcmVmZXJlbmNlIGNsb2NrDQo+IC0gKiBAQ1ZNWF9VU0JfSU5J VElBTElaRV9GTEFHU19DTE9DS180OE1IWjogICAgU3BlZWQgb2YgcmVmZXJlbmNlIGNsb2NrDQo+ IC0gKiBAQ1ZNWF9VU0JfSU5JVElBTElaRV9GTEFHU19OT19ETUE6CSAgICAgIERpc2FibGUgRE1B IGFuZCB1c2VkIHBvbGxlZCBJTyBmb3INCj4gLSAqCQkJCQkgICAgICBkYXRhIHRyYW5zZmVyIHVz ZSBmb3IgdGhlIFVTQg0KPiAtICovDQo+IC1lbnVtIGN2bXhfdXNiX2luaXRpYWxpemVfZmxhZ3Mg ew0KPiAtCUNWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfWE9fWEkJCT0gMSA8PCAwLA0K PiAtCUNWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfWE9fR05ECQk9IDEgPDwgMSwNCj4g LQlDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX0NMT0NLX01IWl9NQVNLCT0gMyA8PCAzLA0KPiAt CUNWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfMTJNSFoJCT0gMSA8PCAzLA0KPiAtCUNW TVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfMjRNSFoJCT0gMiA8PCAzLA0KPiAtCUNWTVhf VVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfNDhNSFoJCT0gMyA8PCAzLA0KPiAtCS8qIEJpdHMg My00IHVzZWQgdG8gZW5jb2RlIHRoZSBjbG9jayBmcmVxdWVuY3kgKi8NCj4gLQlDVk1YX1VTQl9J TklUSUFMSVpFX0ZMQUdTX05PX0RNQQkJPSAxIDw8IDUsDQo+IC19Ow0KPiAtDQo+IC0vKioNCj4g LSAqIGVudW0gY3ZteF91c2JfcGlwZV9mbGFncyAtIGludGVybmFsIGZsYWdzIGZvciBhIHBpcGUu DQo+IC0gKg0KPiAtICogQENWTVhfVVNCX1BJUEVfRkxBR1NfU0NIRURVTEVEOiBVc2VkIGludGVy bmFsbHkgdG8gZGV0ZXJtaW5lIGlmIGEgcGlwZSBpcw0KPiAtICoJCQkJICAgYWN0aXZlbHkgdXNp bmcgaGFyZHdhcmUuDQo+IC0gKiBAQ1ZNWF9VU0JfUElQRV9GTEFHU19ORUVEX1BJTkc6IFVzZWQg aW50ZXJuYWxseSB0byBkZXRlcm1pbmUgaWYgYSBoaWdoIHNwZWVkDQo+IC0gKgkJCQkgICBwaXBl IGlzIGluIHRoZSBwaW5nIHN0YXRlLg0KPiAtICovDQo+IC1lbnVtIGN2bXhfdXNiX3BpcGVfZmxh Z3Mgew0KPiAtCUNWTVhfVVNCX1BJUEVfRkxBR1NfU0NIRURVTEVECT0gMSA8PCAxNywNCj4gLQlD Vk1YX1VTQl9QSVBFX0ZMQUdTX05FRURfUElORwk9IDEgPDwgMTgsDQo+IC19Ow0KPiAtDQo+IC0v KiBNYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBmYWlsZWQgdHJhbnNhY3Rpb25zICov DQo+IC0jZGVmaW5lIE1BWF9SRVRSSUVTCQkzDQo+IC0NCj4gLS8qIE1heGltdW0gbnVtYmVyIG9m IGhhcmR3YXJlIGNoYW5uZWxzIHN1cHBvcnRlZCBieSB0aGUgVVNCIGJsb2NrICovDQo+IC0jZGVm aW5lIE1BWF9DSEFOTkVMUwkJOA0KPiAtDQo+IC0vKg0KPiAtICogVGhlIGxvdyBsZXZlbCBoYXJk d2FyZSBjYW4gdHJhbnNmZXIgYSBtYXhpbXVtIG9mIHRoaXMgbnVtYmVyIG9mIGJ5dGVzIGluIGVh Y2gNCj4gLSAqIHRyYW5zZmVyLiBUaGUgZmllbGQgaXMgMTkgYml0cyB3aWRlDQo+IC0gKi8NCj4g LSNkZWZpbmUgTUFYX1RSQU5TRkVSX0JZVEVTCSgoMSA8PCAxOSkgLSAxKQ0KPiAtDQo+IC0vKg0K PiAtICogVGhlIGxvdyBsZXZlbCBoYXJkd2FyZSBjYW4gdHJhbnNmZXIgYSBtYXhpbXVtIG9mIHRo aXMgbnVtYmVyIG9mIHBhY2tldHMgaW4NCj4gLSAqIGVhY2ggdHJhbnNmZXIuIFRoZSBmaWVsZCBp cyAxMCBiaXRzIHdpZGUNCj4gLSAqLw0KPiAtI2RlZmluZSBNQVhfVFJBTlNGRVJfUEFDS0VUUwko KDEgPDwgMTApIC0gMSkNCj4gLQ0KPiAtLyoqDQo+IC0gKiBMb2dpY2FsIHRyYW5zYWN0aW9ucyBt YXkgdGFrZSBudW1lcm91cyBsb3cgbGV2ZWwNCj4gLSAqIHRyYW5zYWN0aW9ucywgZXNwZWNpYWxs eSB3aGVuIHNwbGl0cyBhcmUgY29uY2VybmVkLiBUaGlzDQo+IC0gKiBlbnVtIHJlcHJlc2VudHMg YWxsIG9mIHRoZSBwb3NzaWJsZSBzdGFnZXMgYSB0cmFuc2FjdGlvbiBjYW4NCj4gLSAqIGJlIGlu LiBOb3RlIHRoYXQgc3BsaXQgY29tcGxldGVzIGFyZSBhbHdheXMgZXZlbi4gVGhpcyBpcyBzbw0K PiAtICogdGhlIE5BSyBoYW5kbGVyIGNhbiBiYWNrdXAgdG8gdGhlIHByZXZpb3VzIGxvdyBsZXZl bA0KPiAtICogdHJhbnNhY3Rpb24gd2l0aCBhIHNpbXBsZSBjbGVhcmluZyBvZiBiaXQgMC4NCj4g LSAqLw0KPiAtZW51bSBjdm14X3VzYl9zdGFnZSB7DQo+IC0JQ1ZNWF9VU0JfU1RBR0VfTk9OX0NP TlRST0wsDQo+IC0JQ1ZNWF9VU0JfU1RBR0VfTk9OX0NPTlRST0xfU1BMSVRfQ09NUExFVEUsDQo+ IC0JQ1ZNWF9VU0JfU1RBR0VfU0VUVVAsDQo+IC0JQ1ZNWF9VU0JfU1RBR0VfU0VUVVBfU1BMSVRf Q09NUExFVEUsDQo+IC0JQ1ZNWF9VU0JfU1RBR0VfREFUQSwNCj4gLQlDVk1YX1VTQl9TVEFHRV9E QVRBX1NQTElUX0NPTVBMRVRFLA0KPiAtCUNWTVhfVVNCX1NUQUdFX1NUQVRVUywNCj4gLQlDVk1Y X1VTQl9TVEFHRV9TVEFUVVNfU1BMSVRfQ09NUExFVEUsDQo+IC19Ow0KPiAtDQo+IC0vKioNCj4g LSAqIHN0cnVjdCBjdm14X3VzYl90cmFuc2FjdGlvbiAtIGRlc2NyaWJlcyBlYWNoIHBlbmRpbmcg VVNCIHRyYW5zYWN0aW9uDQo+IC0gKgkJCQkgcmVnYXJkbGVzcyBvZiB0eXBlLiBUaGVzZSBhcmUg bGlua2VkIHRvZ2V0aGVyDQo+IC0gKgkJCQkgdG8gZm9ybSBhIGxpc3Qgb2YgcGVuZGluZyByZXF1 ZXN0cyBmb3IgYSBwaXBlLg0KPiAtICoNCj4gLSAqIEBub2RlOgkJTGlzdCBub2RlIGZvciB0cmFu c2FjdGlvbnMgaW4gdGhlIHBpcGUuDQo+IC0gKiBAdHlwZToJCVR5cGUgb2YgdHJhbnNhY3Rpb24s IGR1cGxpY2F0ZWQgb2YgdGhlIHBpcGUuDQo+IC0gKiBAZmxhZ3M6CQlTdGF0ZSBmbGFncyBmb3Ig dGhpcyB0cmFuc2FjdGlvbi4NCj4gLSAqIEBidWZmZXI6CQlVc2VyJ3MgcGh5c2ljYWwgYnVmZmVy IGFkZHJlc3MgdG8gcmVhZC93cml0ZS4NCj4gLSAqIEBidWZmZXJfbGVuZ3RoOglTaXplIG9mIHRo ZSB1c2VyJ3MgYnVmZmVyIGluIGJ5dGVzLg0KPiAtICogQGNvbnRyb2xfaGVhZGVyOglGb3IgY29u dHJvbCB0cmFuc2FjdGlvbnMsIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIDgNCj4gLSAqCQkJYnl0 ZSBzdGFuZGFyZCBoZWFkZXIuDQo+IC0gKiBAaXNvX3N0YXJ0X2ZyYW1lOglGb3IgSVNPIHRyYW5z YWN0aW9ucywgdGhlIHN0YXJ0aW5nIGZyYW1lIG51bWJlci4NCj4gLSAqIEBpc29fbnVtYmVyX3Bh Y2tldHM6CUZvciBJU08gdHJhbnNhY3Rpb25zLCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gdGhl DQo+IC0gKgkJCXJlcXVlc3QuDQo+IC0gKiBAaXNvX3BhY2tldHM6CUZvciBJU08gdHJhbnNhY3Rp b25zLCB0aGUgc3ViIHBhY2tldHMgaW4gdGhlIHJlcXVlc3QuDQo+IC0gKiBAYWN0dWFsX2J5dGVz OglBY3R1YWwgYnl0ZXMgdHJhbnNmZXIgZm9yIHRoaXMgdHJhbnNhY3Rpb24uDQo+IC0gKiBAc3Rh Z2U6CQlGb3IgY29udHJvbCB0cmFuc2FjdGlvbnMsIHRoZSBjdXJyZW50IHN0YWdlLg0KPiAtICog QHVyYjoJCVVSQi4NCj4gLSAqLw0KPiAtc3RydWN0IGN2bXhfdXNiX3RyYW5zYWN0aW9uIHsNCj4g LQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7DQo+IC0JZW51bSBjdm14X3VzYl90cmFuc2ZlciB0eXBl Ow0KPiAtCXU2NCBidWZmZXI7DQo+IC0JaW50IGJ1ZmZlcl9sZW5ndGg7DQo+IC0JdTY0IGNvbnRy b2xfaGVhZGVyOw0KPiAtCWludCBpc29fc3RhcnRfZnJhbWU7DQo+IC0JaW50IGlzb19udW1iZXJf cGFja2V0czsNCj4gLQlzdHJ1Y3QgY3ZteF91c2JfaXNvX3BhY2tldCAqaXNvX3BhY2tldHM7DQo+ IC0JaW50IHhmZXJzaXplOw0KPiAtCWludCBwa3RjbnQ7DQo+IC0JaW50IHJldHJpZXM7DQo+IC0J aW50IGFjdHVhbF9ieXRlczsNCj4gLQllbnVtIGN2bXhfdXNiX3N0YWdlIHN0YWdlOw0KPiAtCXN0 cnVjdCB1cmIgKnVyYjsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogc3RydWN0IGN2bXhfdXNi X3BpcGUgLSBhIHBpcGUgcmVwcmVzZW50cyBhIHZpcnR1YWwgY29ubmVjdGlvbiBiZXR3ZWVuIE9j dGVvbg0KPiAtICoJCQkgIGFuZCBzb21lIFVTQiBkZXZpY2UuIEl0IGNvbnRhaW5zIGEgbGlzdCBv ZiBwZW5kaW5nDQo+IC0gKgkJCSAgcmVxdWVzdCB0byB0aGUgZGV2aWNlLg0KPiAtICoNCj4gLSAq IEBub2RlOgkJTGlzdCBub2RlIGZvciBwaXBlIGxpc3QNCj4gLSAqIEBuZXh0OgkJUGlwZSBhZnRl ciB0aGlzIG9uZSBpbiB0aGUgbGlzdA0KPiAtICogQHRyYW5zYWN0aW9uczoJTGlzdCBvZiBwZW5k aW5nIHRyYW5zYWN0aW9ucw0KPiAtICogQGludGVydmFsOgkJRm9yIHBlcmlvZGljIHBpcGVzLCB0 aGUgaW50ZXJ2YWwgYmV0d2VlbiBwYWNrZXRzIGluDQo+IC0gKgkJCWZyYW1lcw0KPiAtICogQG5l eHRfdHhfZnJhbWU6CVRoZSBuZXh0IGZyYW1lIHRoaXMgcGlwZSBpcyBhbGxvd2VkIHRvIHRyYW5z bWl0IG9uDQo+IC0gKiBAZmxhZ3M6CQlTdGF0ZSBmbGFncyBmb3IgdGhpcyBwaXBlDQo+IC0gKiBA ZGV2aWNlX3NwZWVkOglTcGVlZCBvZiBkZXZpY2UgY29ubmVjdGVkIHRvIHRoaXMgcGlwZQ0KPiAt ICogQHRyYW5zZmVyX3R5cGU6CVR5cGUgb2YgdHJhbnNhY3Rpb24gc3VwcG9ydGVkIGJ5IHRoaXMg cGlwZQ0KPiAtICogQHRyYW5zZmVyX2RpcjoJSU4gb3IgT1VULiBJZ25vcmVkIGZvciBDb250cm9s DQo+IC0gKiBAbXVsdGlfY291bnQ6CU1heCBwYWNrZXQgaW4gYSByb3cgZm9yIHRoZSBkZXZpY2UN Cj4gLSAqIEBtYXhfcGFja2V0OgkJVGhlIGRldmljZSdzIG1heGltdW0gcGFja2V0IHNpemUgaW4g Ynl0ZXMNCj4gLSAqIEBkZXZpY2VfYWRkcjoJVVNCIGRldmljZSBhZGRyZXNzIGF0IG90aGVyIGVu ZCBvZiBwaXBlDQo+IC0gKiBAZW5kcG9pbnRfbnVtOglVU0IgZW5kcG9pbnQgbnVtYmVyIGF0IG90 aGVyIGVuZCBvZiBwaXBlDQo+IC0gKiBAaHViX2RldmljZV9hZGRyOglIdWIgYWRkcmVzcyB0aGlz IGRldmljZSBpcyBjb25uZWN0ZWQgdG8NCj4gLSAqIEBodWJfcG9ydDoJCUh1YiBwb3J0IHRoaXMg ZGV2aWNlIGlzIGNvbm5lY3RlZCB0bw0KPiAtICogQHBpZF90b2dnbGU6CQlUaGlzIHRvZ2dsZXMg YmV0d2VlbiAwLzEgb24gZXZlcnkgcGFja2V0IHNlbmQgdG8gdHJhY2sNCj4gLSAqCQkJdGhlIGRh dGEgcGlkIG5lZWRlZA0KPiAtICogQGNoYW5uZWw6CQlIYXJkd2FyZSBETUEgY2hhbm5lbCBmb3Ig dGhpcyBwaXBlDQo+IC0gKiBAc3BsaXRfc2NfZnJhbWU6CVRoZSBsb3cgb3JkZXIgYml0cyBvZiB0 aGUgZnJhbWUgbnVtYmVyIHRoZSBzcGxpdA0KPiAtICoJCQljb21wbGV0ZSBzaG91bGQgYmUgc2Vu dCBvbg0KPiAtICovDQo+IC1zdHJ1Y3QgY3ZteF91c2JfcGlwZSB7DQo+IC0Jc3RydWN0IGxpc3Rf aGVhZCBub2RlOw0KPiAtCXN0cnVjdCBsaXN0X2hlYWQgdHJhbnNhY3Rpb25zOw0KPiAtCXU2NCBp bnRlcnZhbDsNCj4gLQl1NjQgbmV4dF90eF9mcmFtZTsNCj4gLQllbnVtIGN2bXhfdXNiX3BpcGVf ZmxhZ3MgZmxhZ3M7DQo+IC0JZW51bSBjdm14X3VzYl9zcGVlZCBkZXZpY2Vfc3BlZWQ7DQo+IC0J ZW51bSBjdm14X3VzYl90cmFuc2ZlciB0cmFuc2Zlcl90eXBlOw0KPiAtCWVudW0gY3ZteF91c2Jf ZGlyZWN0aW9uIHRyYW5zZmVyX2RpcjsNCj4gLQlpbnQgbXVsdGlfY291bnQ7DQo+IC0JdTE2IG1h eF9wYWNrZXQ7DQo+IC0JdTggZGV2aWNlX2FkZHI7DQo+IC0JdTggZW5kcG9pbnRfbnVtOw0KPiAt CXU4IGh1Yl9kZXZpY2VfYWRkcjsNCj4gLQl1OCBodWJfcG9ydDsNCj4gLQl1OCBwaWRfdG9nZ2xl Ow0KPiAtCXU4IGNoYW5uZWw7DQo+IC0Jczggc3BsaXRfc2NfZnJhbWU7DQo+IC19Ow0KPiAtDQo+ IC1zdHJ1Y3QgY3ZteF91c2JfdHhfZmlmbyB7DQo+IC0Jc3RydWN0IHsNCj4gLQkJaW50IGNoYW5u ZWw7DQo+IC0JCWludCBzaXplOw0KPiAtCQl1NjQgYWRkcmVzczsNCj4gLQl9IGVudHJ5W01BWF9D SEFOTkVMUyArIDFdOw0KPiAtCWludCBoZWFkOw0KPiAtCWludCB0YWlsOw0KPiAtfTsNCj4gLQ0K PiAtLyoqDQo+IC0gKiBzdHJ1Y3Qgb2N0ZW9uX2hjZCAtIHRoZSBzdGF0ZSBvZiB0aGUgVVNCIGJs b2NrDQo+IC0gKg0KPiAtICogbG9jazoJCSAgIFNlcmlhbGl6YXRpb24gbG9jay4NCj4gLSAqIGlu aXRfZmxhZ3M6CQkgICBGbGFncyBwYXNzZWQgdG8gaW5pdGlhbGl6ZS4NCj4gLSAqIGluZGV4OgkJ ICAgV2hpY2ggVVNCIGJsb2NrIHRoaXMgaXMgZm9yLg0KPiAtICogaWRsZV9oYXJkd2FyZV9jaGFu bmVsczogQml0IHNldCBmb3IgZXZlcnkgaWRsZSBoYXJkd2FyZSBjaGFubmVsLg0KPiAtICogdXNi Y3hfaHBydDoJCSAgIFN0b3JlZCBwb3J0IHN0YXR1cyBzbyB3ZSBkb24ndCBuZWVkIHRvIHJlYWQg YSBDU1IgdG8NCj4gLSAqCQkJICAgZGV0ZXJtaW5lIHNwbGl0cy4NCj4gLSAqIHBpcGVfZm9yX2No YW5uZWw6CSAgIE1hcCBjaGFubmVscyB0byBwaXBlcy4NCj4gLSAqIHBpcGU6CQkgICBTdG9yYWdl IGZvciBwaXBlcy4NCj4gLSAqIGluZGVudDoJCSAgIFVzZWQgYnkgZGVidWcgb3V0cHV0IHRvIGlu ZGVudCBmdW5jdGlvbnMuDQo+IC0gKiBwb3J0X3N0YXR1czoJCSAgIExhc3QgcG9ydCBzdGF0dXMg dXNlZCBmb3IgY2hhbmdlIG5vdGlmaWNhdGlvbi4NCj4gLSAqIGlkbGVfcGlwZXM6CQkgICBMaXN0 IG9mIG9wZW4gcGlwZXMgdGhhdCBoYXZlIG5vIHRyYW5zYWN0aW9ucy4NCj4gLSAqIGFjdGl2ZV9w aXBlczoJICAgQWN0aXZlIHBpcGVzIGluZGV4ZWQgYnkgdHJhbnNmZXIgdHlwZS4NCj4gLSAqIGZy YW1lX251bWJlcjoJICAgSW5jcmVtZW50cyBldmVyeSBTT0YgaW50ZXJydXB0IGZvciB0aW1lIGtl ZXBpbmcuDQo+IC0gKiBhY3RpdmVfc3BsaXQ6CSAgIFBvaW50cyB0byB0aGUgY3VycmVudCBhY3Rp dmUgc3BsaXQsIG9yIE5VTEwuDQo+IC0gKi8NCj4gLXN0cnVjdCBvY3Rlb25faGNkIHsNCj4gLQlz cGlubG9ja190IGxvY2s7IC8qIHNlcmlhbGl6YXRpb24gbG9jayAqLw0KPiAtCWludCBpbml0X2Zs YWdzOw0KPiAtCWludCBpbmRleDsNCj4gLQlpbnQgaWRsZV9oYXJkd2FyZV9jaGFubmVsczsNCj4g LQl1bmlvbiBjdm14X3VzYmN4X2hwcnQgdXNiY3hfaHBydDsNCj4gLQlzdHJ1Y3QgY3ZteF91c2Jf cGlwZSAqcGlwZV9mb3JfY2hhbm5lbFtNQVhfQ0hBTk5FTFNdOw0KPiAtCWludCBpbmRlbnQ7DQo+ IC0Jc3RydWN0IGN2bXhfdXNiX3BvcnRfc3RhdHVzIHBvcnRfc3RhdHVzOw0KPiAtCXN0cnVjdCBs aXN0X2hlYWQgaWRsZV9waXBlczsNCj4gLQlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZV9waXBlc1s0 XTsNCj4gLQl1NjQgZnJhbWVfbnVtYmVyOw0KPiAtCXN0cnVjdCBjdm14X3VzYl90cmFuc2FjdGlv biAqYWN0aXZlX3NwbGl0Ow0KPiAtCXN0cnVjdCBjdm14X3VzYl90eF9maWZvIHBlcmlvZGljOw0K PiAtCXN0cnVjdCBjdm14X3VzYl90eF9maWZvIG5vbnBlcmlvZGljOw0KPiAtfTsNCj4gLQ0KPiAt LyoNCj4gLSAqIFRoaXMgbWFjcm8gbG9naWNhbGx5IHNldHMgYSBzaW5nbGUgZmllbGQgaW4gYSBD U1IuIEl0IGRvZXMgdGhlIHNlcXVlbmNlDQo+IC0gKiByZWFkLCBtb2RpZnksIGFuZCB3cml0ZQ0K PiAtICovDQo+IC0jZGVmaW5lIFVTQl9TRVRfRklFTEQzMihhZGRyZXNzLCBfdW5pb24sIGZpZWxk LCB2YWx1ZSkJCVwNCj4gLQlkbyB7CQkJCQkJCVwNCj4gLQkJdW5pb24gX3VuaW9uIGM7CQkJCQlc DQo+IC0JCQkJCQkJCVwNCj4gLQkJYy51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwgYWRk cmVzcyk7CVwNCj4gLQkJYy5zLmZpZWxkID0gdmFsdWU7CQkJCVwNCj4gLQkJY3ZteF91c2Jfd3Jp dGVfY3NyMzIodXNiLCBhZGRyZXNzLCBjLnUzMik7CVwNCj4gLQl9IHdoaWxlICgwKQ0KPiAtDQo+ IC0vKiBSZXR1cm5zIHRoZSBJTyBhZGRyZXNzIHRvIHB1c2gvcG9wIHN0dWZmIGRhdGEgZnJvbSB0 aGUgRklGT3MgKi8NCj4gLSNkZWZpbmUgVVNCX0ZJRk9fQUREUkVTUyhjaGFubmVsLCB1c2JfaW5k ZXgpIFwNCj4gLQkoQ1ZNWF9VU0JDWF9HT1RHQ1RMKHVzYl9pbmRleCkgKyAoKGNoYW5uZWwpICsg MSkgKiAweDEwMDApDQo+IC0NCj4gLS8qKg0KPiAtICogc3RydWN0IG9jdGVvbl90ZW1wX2J1ZmZl ciAtIGEgYm91bmNlIGJ1ZmZlciBmb3IgVVNCIHRyYW5zZmVycw0KPiAtICogQG9yaWdfYnVmZmVy OiB0aGUgb3JpZ2luYWwgYnVmZmVyIHBhc3NlZCBieSB0aGUgVVNCIHN0YWNrDQo+IC0gKiBAZGF0 YToJIHRoZSBuZXdseSBhbGxvY2F0ZWQgdGVtcG9yYXJ5IGJ1ZmZlciAoZXhjbHVkaW5nIG1ldGEt ZGF0YSkNCj4gLSAqDQo+IC0gKiBCb3RoIHRoZSBETUEgZW5naW5lIGFuZCBGSUZPIG1vZGUgd2ls bCBhbHdheXMgdHJhbnNmZXIgZnVsbCAzMi1iaXQgd29yZHMuIElmDQo+IC0gKiB0aGUgYnVmZmVy IGlzIHRvbyBzaG9ydCwgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIHRlbXBvcmFyeSBvbmUsIGFuZCB0 aGlzIHN0cnVjdA0KPiAtICogcmVwcmVzZW50cyBpdC4NCj4gLSAqLw0KPiAtc3RydWN0IG9jdGVv bl90ZW1wX2J1ZmZlciB7DQo+IC0Jdm9pZCAqb3JpZ19idWZmZXI7DQo+IC0JdTggZGF0YVswXTsN Cj4gLX07DQo+IC0NCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9oY2QgKm9jdGVvbl90b19o Y2Qoc3RydWN0IG9jdGVvbl9oY2QgKnApDQo+IC17DQo+IC0JcmV0dXJuIGNvbnRhaW5lcl9vZigo dm9pZCAqKXAsIHN0cnVjdCB1c2JfaGNkLCBoY2RfcHJpdik7DQo+IC19DQo+IC0NCj4gLS8qKg0K PiAtICogb2N0ZW9uX2FsbG9jX3RlbXBfYnVmZmVyIC0gYWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVm ZmVyIGZvciBVU0IgdHJhbnNmZXINCj4gLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIChp ZiBuZWVkZWQpDQo+IC0gKiBAdXJiOglVUkIuDQo+IC0gKiBAbWVtX2ZsYWdzOglNZW1vcnkgYWxs b2NhdGlvbiBmbGFncy4NCj4gLSAqDQo+IC0gKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIHRl bXBvcmFyeSBib3VuY2UgYnVmZmVyIHdoZW5ldmVyIGl0J3MgbmVlZGVkDQo+IC0gKiBkdWUgdG8g SFcgbGltaXRhdGlvbnMuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQgb2N0ZW9uX2FsbG9jX3RlbXBf YnVmZmVyKHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKQ0KPiAtew0KPiAtCXN0cnVj dCBvY3Rlb25fdGVtcF9idWZmZXIgKnRlbXA7DQo+IC0NCj4gLQlpZiAodXJiLT5udW1fc2dzIHx8 IHVyYi0+c2cgfHwNCj4gLQkgICAgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNG RVJfRE1BX01BUCkgfHwNCj4gLQkgICAgISh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggJSBz aXplb2YodTMyKSkpDQo+IC0JCXJldHVybiAwOw0KPiAtDQo+IC0JdGVtcCA9IGttYWxsb2MoQUxJ R04odXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCBzaXplb2YodTMyKSkgKw0KPiAtCQkgICAg ICAgc2l6ZW9mKCp0ZW1wKSwgbWVtX2ZsYWdzKTsNCj4gLQlpZiAoIXRlbXApDQo+IC0JCXJldHVy biAtRU5PTUVNOw0KPiAtDQo+IC0JdGVtcC0+b3JpZ19idWZmZXIgPSB1cmItPnRyYW5zZmVyX2J1 ZmZlcjsNCj4gLQlpZiAodXNiX3VyYl9kaXJfb3V0KHVyYikpDQo+IC0JCW1lbWNweSh0ZW1wLT5k YXRhLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwNCj4gLQkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVm ZmVyX2xlbmd0aCk7DQo+IC0JdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB0ZW1wLT5kYXRhOw0KPiAt CXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FMSUdORURfVEVNUF9CVUZGRVI7DQo+IC0NCj4g LQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBvY3Rlb25fZnJlZV90ZW1wX2J1 ZmZlciAtIGZyZWUgYSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgYnkgVVNCIHRyYW5zZmVycy4NCj4g LSAqIEB1cmI6IFVSQi4NCj4gLSAqDQo+IC0gKiBGcmVlcyBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkg b2N0ZW9uX2FsbG9jX3RlbXBfYnVmZmVyKCkuDQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lkIG9jdGVv bl9mcmVlX3RlbXBfYnVmZmVyKHN0cnVjdCB1cmIgKnVyYikNCj4gLXsNCj4gLQlzdHJ1Y3Qgb2N0 ZW9uX3RlbXBfYnVmZmVyICp0ZW1wOw0KPiAtCXNpemVfdCBsZW5ndGg7DQo+IC0NCj4gLQlpZiAo ISh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0FMSUdORURfVEVNUF9CVUZGRVIpKQ0KPiAtCQly ZXR1cm47DQo+IC0NCj4gLQl0ZW1wID0gY29udGFpbmVyX29mKHVyYi0+dHJhbnNmZXJfYnVmZmVy LCBzdHJ1Y3Qgb2N0ZW9uX3RlbXBfYnVmZmVyLA0KPiAtCQkJICAgIGRhdGEpOw0KPiAtCWlmICh1 c2JfdXJiX2Rpcl9pbih1cmIpKSB7DQo+IC0JCWlmICh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkN Cj4gLQkJCWxlbmd0aCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsNCj4gLQkJZWxzZQ0K PiAtCQkJbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOw0KPiAtDQo+IC0JCW1lbWNweSh0ZW1w LT5vcmlnX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCk7DQo+IC0JfQ0KPiAt CXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdGVtcC0+b3JpZ19idWZmZXI7DQo+IC0JdXJiLT50cmFu c2Zlcl9mbGFncyAmPSB+VVJCX0FMSUdORURfVEVNUF9CVUZGRVI7DQo+IC0Ja2ZyZWUodGVtcCk7 DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogb2N0ZW9uX21hcF91cmJfZm9yX2RtYSAtIE9jdGVv bi1zcGVjaWZpYyBtYXBfdXJiX2Zvcl9kbWEoKS4NCj4gLSAqIEBoY2Q6CVVTQiBIQ0Qgc3RydWN0 dXJlLg0KPiAtICogQHVyYjoJVVJCLg0KPiAtICogQG1lbV9mbGFnczoJTWVtb3J5IGFsbG9jYXRp b24gZmxhZ3MuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQgb2N0ZW9uX21hcF91cmJfZm9yX2RtYShz dHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsDQo+IC0JCQkJICBnZnBfdCBtZW1f ZmxhZ3MpDQo+IC17DQo+IC0JaW50IHJldDsNCj4gLQ0KPiAtCXJldCA9IG9jdGVvbl9hbGxvY190 ZW1wX2J1ZmZlcih1cmIsIG1lbV9mbGFncyk7DQo+IC0JaWYgKHJldCkNCj4gLQkJcmV0dXJuIHJl dDsNCj4gLQ0KPiAtCXJldCA9IHVzYl9oY2RfbWFwX3VyYl9mb3JfZG1hKGhjZCwgdXJiLCBtZW1f ZmxhZ3MpOw0KPiAtCWlmIChyZXQpDQo+IC0JCW9jdGVvbl9mcmVlX3RlbXBfYnVmZmVyKHVyYik7 DQo+IC0NCj4gLQlyZXR1cm4gcmV0Ow0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIG9jdGVvbl91 bm1hcF91cmJfZm9yX2RtYSAtIE9jdGVvbi1zcGVjaWZpYyB1bm1hcF91cmJfZm9yX2RtYSgpDQo+ IC0gKiBAaGNkOglVU0IgSENEIHN0cnVjdHVyZS4NCj4gLSAqIEB1cmI6CVVSQi4NCj4gLSAqLw0K PiAtc3RhdGljIHZvaWQgb2N0ZW9uX3VubWFwX3VyYl9mb3JfZG1hKHN0cnVjdCB1c2JfaGNkICpo Y2QsIHN0cnVjdCB1cmIgKnVyYikNCj4gLXsNCj4gLQl1c2JfaGNkX3VubWFwX3VyYl9mb3JfZG1h KGhjZCwgdXJiKTsNCj4gLQlvY3Rlb25fZnJlZV90ZW1wX2J1ZmZlcih1cmIpOw0KPiAtfQ0KPiAt DQo+IC0vKioNCj4gLSAqIFJlYWQgYSBVU0IgMzJiaXQgQ1NSLiBJdCBwZXJmb3JtcyB0aGUgbmVj ZXNzYXJ5IGFkZHJlc3Mgc3dpenpsZQ0KPiAtICogZm9yIDMyYml0IENTUnMgYW5kIGxvZ3MgdGhl IHZhbHVlIGluIGEgcmVhZGFibGUgZm9ybWF0IGlmDQo+IC0gKiBkZWJ1Z2dpbmcgaXMgb24uDQo+ IC0gKg0KPiAtICogQHVzYjogICAgIFVTQiBibG9jayB0aGlzIGFjY2VzcyBpcyBmb3INCj4gLSAq IEBhZGRyZXNzOiA2NGJpdCBhZGRyZXNzIHRvIHJlYWQNCj4gLSAqDQo+IC0gKiBSZXR1cm5zOiBS ZXN1bHQgb2YgdGhlIHJlYWQNCj4gLSAqLw0KPiAtc3RhdGljIGlubGluZSB1MzIgY3ZteF91c2Jf cmVhZF9jc3IzMihzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiLCB1NjQgYWRkcmVzcykNCj4gLXsNCj4g LQlyZXR1cm4gY3ZteF9yZWFkNjRfdWludDMyKGFkZHJlc3MgXiA0KTsNCj4gLX0NCj4gLQ0KPiAt LyoqDQo+IC0gKiBXcml0ZSBhIFVTQiAzMmJpdCBDU1IuIEl0IHBlcmZvcm1zIHRoZSBuZWNlc3Nh cnkgYWRkcmVzcw0KPiAtICogc3dpenpsZSBmb3IgMzJiaXQgQ1NScyBhbmQgbG9ncyB0aGUgdmFs dWUgaW4gYSByZWFkYWJsZSBmb3JtYXQNCj4gLSAqIGlmIGRlYnVnZ2luZyBpcyBvbi4NCj4gLSAq DQo+IC0gKiBAdXNiOiAgICAgVVNCIGJsb2NrIHRoaXMgYWNjZXNzIGlzIGZvcg0KPiAtICogQGFk ZHJlc3M6IDY0Yml0IGFkZHJlc3MgdG8gd3JpdGUNCj4gLSAqIEB2YWx1ZTogICBWYWx1ZSB0byB3 cml0ZQ0KPiAtICovDQo+IC1zdGF0aWMgaW5saW5lIHZvaWQgY3ZteF91c2Jfd3JpdGVfY3NyMzIo c3RydWN0IG9jdGVvbl9oY2QgKnVzYiwNCj4gLQkJCQkJdTY0IGFkZHJlc3MsIHUzMiB2YWx1ZSkN Cj4gLXsNCj4gLQljdm14X3dyaXRlNjRfdWludDMyKGFkZHJlc3MgXiA0LCB2YWx1ZSk7DQo+IC0J Y3ZteF9yZWFkNjRfdWludDY0KENWTVhfVVNCTlhfRE1BMF9JTkJfQ0hOMCh1c2ItPmluZGV4KSk7 DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogUmV0dXJuIG5vbiB6ZXJvIGlmIHRoaXMgcGlwZSBj b25uZWN0cyB0byBhIG5vbiBISUdIIHNwZWVkDQo+IC0gKiBkZXZpY2UgdGhyb3VnaCBhIGhpZ2gg c3BlZWQgaHViLg0KPiAtICoNCj4gLSAqIEB1c2I6ICAgIFVTQiBibG9jayB0aGlzIGFjY2VzcyBp cyBmb3INCj4gLSAqIEBwaXBlOiAgIFBpcGUgdG8gY2hlY2sNCj4gLSAqDQo+IC0gKiBSZXR1cm5z OiBOb24gemVybyBpZiB3ZSBuZWVkIHRvIGRvIHNwbGl0IHRyYW5zYWN0aW9ucw0KPiAtICovDQo+ IC1zdGF0aWMgaW5saW5lIGludCBjdm14X3VzYl9waXBlX25lZWRzX3NwbGl0KHN0cnVjdCBvY3Rl b25faGNkICp1c2IsDQo+IC0JCQkJCSAgICBzdHJ1Y3QgY3ZteF91c2JfcGlwZSAqcGlwZSkNCj4g LXsNCj4gLQlyZXR1cm4gcGlwZS0+ZGV2aWNlX3NwZWVkICE9IENWTVhfVVNCX1NQRUVEX0hJR0gg JiYNCj4gLQkgICAgICAgdXNiLT51c2JjeF9ocHJ0LnMucHJ0c3BkID09IENWTVhfVVNCX1NQRUVE X0hJR0g7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogVHJpdmlhbCB1dGlsaXR5IGZ1bmN0aW9u IHRvIHJldHVybiB0aGUgY29ycmVjdCBQSUQgZm9yIGEgcGlwZQ0KPiAtICoNCj4gLSAqIEBwaXBl OiAgIHBpcGUgdG8gY2hlY2sNCj4gLSAqDQo+IC0gKiBSZXR1cm5zOiBQSUQgZm9yIHBpcGUNCj4g LSAqLw0KPiAtc3RhdGljIGlubGluZSBpbnQgY3ZteF91c2JfZ2V0X2RhdGFfcGlkKHN0cnVjdCBj dm14X3VzYl9waXBlICpwaXBlKQ0KPiAtew0KPiAtCWlmIChwaXBlLT5waWRfdG9nZ2xlKQ0KPiAt CQlyZXR1cm4gMjsgLyogRGF0YTEgKi8NCj4gLQlyZXR1cm4gMDsgLyogRGF0YTAgKi8NCj4gLX0N Cj4gLQ0KPiAtLyogTG9vcHMgdGhyb3VnaCByZWdpc3RlciB1bnRpbCB0eGZmbHNoIG9yIHJ4ZmZs c2ggYmVjb21lIHplcm8uKi8NCj4gLXN0YXRpYyBpbnQgY3ZteF93YWl0X3R4X3J4KHN0cnVjdCBv Y3Rlb25faGNkICp1c2IsIGludCBmZmxzaF90eXBlKQ0KPiAtew0KPiAtCWludCByZXN1bHQ7DQo+ IC0JdTY0IGFkZHJlc3MgPSBDVk1YX1VTQkNYX0dSU1RDVEwodXNiLT5pbmRleCk7DQo+IC0JdTY0 IGRvbmUgPSBjdm14X2dldF9jeWNsZSgpICsgMTAwICoNCj4gLQkJICAgKHU2NClvY3Rlb25fZ2V0 X2Nsb2NrX3JhdGUgLyAxMDAwMDAwOw0KPiAtCXVuaW9uIGN2bXhfdXNiY3hfZ3JzdGN0bCBjOw0K PiAtDQo+IC0Jd2hpbGUgKDEpIHsNCj4gLQkJYy51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVz YiwgYWRkcmVzcyk7DQo+IC0JCWlmIChmZmxzaF90eXBlID09IDAgJiYgYy5zLnR4ZmZsc2ggPT0g MCkgew0KPiAtCQkJcmVzdWx0ID0gMDsNCj4gLQkJCWJyZWFrOw0KPiAtCQl9IGVsc2UgaWYgKGZm bHNoX3R5cGUgPT0gMSAmJiBjLnMucnhmZmxzaCA9PSAwKSB7DQo+IC0JCQlyZXN1bHQgPSAwOw0K PiAtCQkJYnJlYWs7DQo+IC0JCX0gZWxzZSBpZiAoY3ZteF9nZXRfY3ljbGUoKSA+IGRvbmUpIHsN Cj4gLQkJCXJlc3VsdCA9IC0xOw0KPiAtCQkJYnJlYWs7DQo+IC0JCX0NCj4gLQ0KPiAtCQlfX2Rl bGF5KDEwMCk7DQo+IC0JfQ0KPiAtCXJldHVybiByZXN1bHQ7DQo+IC19DQo+IC0NCj4gLXN0YXRp YyB2b2lkIGN2bXhfZmlmb19zZXR1cChzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiKQ0KPiAtew0KPiAt CXVuaW9uIGN2bXhfdXNiY3hfZ2h3Y2ZnMyB1c2JjeF9naHdjZmczOw0KPiAtCXVuaW9uIGN2bXhf dXNiY3hfZ25wdHhmc2l6IG5wc2l6Ow0KPiAtCXVuaW9uIGN2bXhfdXNiY3hfaHB0eGZzaXogcHNp ejsNCj4gLQ0KPiAtCXVzYmN4X2dod2NmZzMudTMyID0gY3ZteF91c2JfcmVhZF9jc3IzMih1c2Is DQo+IC0JCQkJCQlDVk1YX1VTQkNYX0dIV0NGRzModXNiLT5pbmRleCkpOw0KPiAtDQo+IC0JLyoN Cj4gLQkgKiBQcm9ncmFtIHRoZSBVU0JDX0dSWEZTSVogcmVnaXN0ZXIgdG8gc2VsZWN0IHRoZSBz aXplIG9mIHRoZSByZWNlaXZlDQo+IC0JICogRklGTyAoMjUlKS4NCj4gLQkgKi8NCj4gLQlVU0Jf U0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9HUlhGU0laKHVzYi0+aW5kZXgpLCBjdm14X3VzYmN4X2dy eGZzaXosDQo+IC0JCQlyeGZkZXAsIHVzYmN4X2dod2NmZzMucy5kZmlmb2RlcHRoIC8gNCk7DQo+ IC0NCj4gLQkvKg0KPiAtCSAqIFByb2dyYW0gdGhlIFVTQkNfR05QVFhGU0laIHJlZ2lzdGVyIHRv IHNlbGVjdCB0aGUgc2l6ZSBhbmQgdGhlIHN0YXJ0DQo+IC0JICogYWRkcmVzcyBvZiB0aGUgbm9u LXBlcmlvZGljIHRyYW5zbWl0IEZJRk8gZm9yIG5vbnBlcmlvZGljDQo+IC0JICogdHJhbnNhY3Rp b25zICg1MCUpLg0KPiAtCSAqLw0KPiAtCW5wc2l6LnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIo dXNiLCBDVk1YX1VTQkNYX0dOUFRYRlNJWih1c2ItPmluZGV4KSk7DQo+IC0JbnBzaXoucy5ucHR4 ZmRlcCA9IHVzYmN4X2dod2NmZzMucy5kZmlmb2RlcHRoIC8gMjsNCj4gLQlucHNpei5zLm5wdHhm c3RhZGRyID0gdXNiY3hfZ2h3Y2ZnMy5zLmRmaWZvZGVwdGggLyA0Ow0KPiAtCWN2bXhfdXNiX3dy aXRlX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9HTlBUWEZTSVoodXNiLT5pbmRleCksIG5wc2l6LnUz Mik7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFByb2dyYW0gdGhlIFVTQkNfSFBUWEZTSVogcmVnaXN0 ZXIgdG8gc2VsZWN0IHRoZSBzaXplIGFuZCBzdGFydA0KPiAtCSAqIGFkZHJlc3Mgb2YgdGhlIHBl cmlvZGljIHRyYW5zbWl0IEZJRk8gZm9yIHBlcmlvZGljIHRyYW5zYWN0aW9ucw0KPiAtCSAqICgy NSUpLg0KPiAtCSAqLw0KPiAtCXBzaXoudTMyID0gY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsIENW TVhfVVNCQ1hfSFBUWEZTSVoodXNiLT5pbmRleCkpOw0KPiAtCXBzaXoucy5wdHhmc2l6ZSA9IHVz YmN4X2dod2NmZzMucy5kZmlmb2RlcHRoIC8gNDsNCj4gLQlwc2l6LnMucHR4ZnN0YWRkciA9IDMg KiB1c2JjeF9naHdjZmczLnMuZGZpZm9kZXB0aCAvIDQ7DQo+IC0JY3ZteF91c2Jfd3JpdGVfY3Ny MzIodXNiLCBDVk1YX1VTQkNYX0hQVFhGU0laKHVzYi0+aW5kZXgpLCBwc2l6LnUzMik7DQo+IC0N Cj4gLQkvKiBGbHVzaCBhbGwgRklGT3MgKi8NCj4gLQlVU0JfU0VUX0ZJRUxEMzIoQ1ZNWF9VU0JD WF9HUlNUQ1RMKHVzYi0+aW5kZXgpLA0KPiAtCQkJY3ZteF91c2JjeF9ncnN0Y3RsLCB0eGZudW0s IDB4MTApOw0KPiAtCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0dSU1RDVEwodXNiLT5pbmRl eCksDQo+IC0JCQljdm14X3VzYmN4X2dyc3RjdGwsIHR4ZmZsc2gsIDEpOw0KPiAtCWN2bXhfd2Fp dF90eF9yeCh1c2IsIDApOw0KPiAtCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0dSU1RDVEwo dXNiLT5pbmRleCksDQo+IC0JCQljdm14X3VzYmN4X2dyc3RjdGwsIHJ4ZmZsc2gsIDEpOw0KPiAt CWN2bXhfd2FpdF90eF9yeCh1c2IsIDEpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIFNodXRk b3duIGEgVVNCIHBvcnQgYWZ0ZXIgYSBjYWxsIHRvIGN2bXhfdXNiX2luaXRpYWxpemUoKS4NCj4g LSAqIFRoZSBwb3J0IHNob3VsZCBiZSBkaXNhYmxlZCB3aXRoIGFsbCBwaXBlcyBjbG9zZWQgd2hl biB0aGlzDQo+IC0gKiBmdW5jdGlvbiBpcyBjYWxsZWQuDQo+IC0gKg0KPiAtICogQHVzYjogVVNC IGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5pdGlhbGl6ZSgpLg0KPiAtICoN Cj4gLSAqIFJldHVybnM6IDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0KPiAtICovDQo+IC1z dGF0aWMgaW50IGN2bXhfdXNiX3NodXRkb3duKHN0cnVjdCBvY3Rlb25faGNkICp1c2IpDQo+IC17 DQo+IC0JdW5pb24gY3ZteF91c2JueF9jbGtfY3RsIHVzYm5fY2xrX2N0bDsNCj4gLQ0KPiAtCS8q IE1ha2Ugc3VyZSBhbGwgcGlwZXMgYXJlIGNsb3NlZCAqLw0KPiAtCWlmICghbGlzdF9lbXB0eSgm dXNiLT5pZGxlX3BpcGVzKSB8fA0KPiAtCSAgICAhbGlzdF9lbXB0eSgmdXNiLT5hY3RpdmVfcGlw ZXNbQ1ZNWF9VU0JfVFJBTlNGRVJfSVNPQ0hST05PVVNdKSB8fA0KPiAtCSAgICAhbGlzdF9lbXB0 eSgmdXNiLT5hY3RpdmVfcGlwZXNbQ1ZNWF9VU0JfVFJBTlNGRVJfSU5URVJSVVBUXSkgfHwNCj4g LQkgICAgIWxpc3RfZW1wdHkoJnVzYi0+YWN0aXZlX3BpcGVzW0NWTVhfVVNCX1RSQU5TRkVSX0NP TlRST0xdKSB8fA0KPiAtCSAgICAhbGlzdF9lbXB0eSgmdXNiLT5hY3RpdmVfcGlwZXNbQ1ZNWF9V U0JfVFJBTlNGRVJfQlVMS10pKQ0KPiAtCQlyZXR1cm4gLUVCVVNZOw0KPiAtDQo+IC0JLyogRGlz YWJsZSB0aGUgY2xvY2tzIGFuZCBwdXQgdGhlbSBpbiBwb3dlciBvbiByZXNldCAqLw0KPiAtCXVz Ym5fY2xrX2N0bC51NjQgPSBjdm14X3JlYWQ2NF91aW50NjQoQ1ZNWF9VU0JOWF9DTEtfQ1RMKHVz Yi0+aW5kZXgpKTsNCj4gLQl1c2JuX2Nsa19jdGwucy5lbmFibGUgPSAxOw0KPiAtCXVzYm5fY2xr X2N0bC5zLnBvciA9IDE7DQo+IC0JdXNibl9jbGtfY3RsLnMuaGNsa19yc3QgPSAxOw0KPiAtCXVz Ym5fY2xrX2N0bC5zLnByc3QgPSAwOw0KPiAtCXVzYm5fY2xrX2N0bC5zLmhyc3QgPSAwOw0KPiAt CWN2bXhfd3JpdGU2NF91aW50NjQoQ1ZNWF9VU0JOWF9DTEtfQ1RMKHVzYi0+aW5kZXgpLCB1c2Ju X2Nsa19jdGwudTY0KTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBJ bml0aWFsaXplIGEgVVNCIHBvcnQgZm9yIHVzZS4gVGhpcyBtdXN0IGJlIGNhbGxlZCBiZWZvcmUg YW55DQo+IC0gKiBvdGhlciBhY2Nlc3MgdG8gdGhlIE9jdGVvbiBVU0IgcG9ydCBpcyBtYWRlLiBU aGUgcG9ydCBzdGFydHMNCj4gLSAqIG9mZiBpbiB0aGUgZGlzYWJsZWQgc3RhdGUuDQo+IC0gKg0K PiAtICogQGRldjoJIFBvaW50ZXIgdG8gc3RydWN0IGRldmljZSBmb3IgbG9nZ2luZyBwdXJwb3Nl cy4NCj4gLSAqIEB1c2I6CSBQb2ludGVyIHRvIHN0cnVjdCBvY3Rlb25faGNkLg0KPiAtICoNCj4g LSAqIFJldHVybnM6IDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0KPiAtICovDQo+IC1zdGF0 aWMgaW50IGN2bXhfdXNiX2luaXRpYWxpemUoc3RydWN0IGRldmljZSAqZGV2LA0KPiAtCQkJICAg ICAgIHN0cnVjdCBvY3Rlb25faGNkICp1c2IpDQo+IC17DQo+IC0JaW50IGNoYW5uZWw7DQo+IC0J aW50IGRpdmlzb3I7DQo+IC0JaW50IHJldHJpZXMgPSAwOw0KPiAtCXVuaW9uIGN2bXhfdXNiY3hf aGNmZyB1c2JjeF9oY2ZnOw0KPiAtCXVuaW9uIGN2bXhfdXNibnhfY2xrX2N0bCB1c2JuX2Nsa19j dGw7DQo+IC0JdW5pb24gY3ZteF91c2JjeF9naW50c3RzIHVzYmNfZ2ludHN0czsNCj4gLQl1bmlv biBjdm14X3VzYmN4X2dhaGJjZmcgdXNiY3hfZ2FoYmNmZzsNCj4gLQl1bmlvbiBjdm14X3VzYmN4 X2dpbnRtc2sgdXNiY3hfZ2ludG1zazsNCj4gLQl1bmlvbiBjdm14X3VzYmN4X2d1c2JjZmcgdXNi Y3hfZ3VzYmNmZzsNCj4gLQl1bmlvbiBjdm14X3VzYm54X3VzYnBfY3RsX3N0YXR1cyB1c2JuX3Vz YnBfY3RsX3N0YXR1czsNCj4gLQ0KPiAtcmV0cnk6DQo+IC0JLyoNCj4gLQkgKiBQb3dlciBPbiBS ZXNldCBhbmQgUEhZIEluaXRpYWxpemF0aW9uDQo+IC0JICoNCj4gLQkgKiAxLiBXYWl0IGZvciBE Q09LIHRvIGFzc2VydCAobm90aGluZyB0byBkbykNCj4gLQkgKg0KPiAtCSAqIDJhLiBXcml0ZSBV U0JOMC8xX0NMS19DVExbUE9SXSA9IDEgYW5kDQo+IC0JICogICAgIFVTQk4wLzFfQ0xLX0NUTFtI UlNULFBSU1QsSENMS19SU1RdID0gMA0KPiAtCSAqLw0KPiAtCXVzYm5fY2xrX2N0bC51NjQgPSBj dm14X3JlYWQ2NF91aW50NjQoQ1ZNWF9VU0JOWF9DTEtfQ1RMKHVzYi0+aW5kZXgpKTsNCj4gLQl1 c2JuX2Nsa19jdGwucy5wb3IgPSAxOw0KPiAtCXVzYm5fY2xrX2N0bC5zLmhyc3QgPSAwOw0KPiAt CXVzYm5fY2xrX2N0bC5zLnByc3QgPSAwOw0KPiAtCXVzYm5fY2xrX2N0bC5zLmhjbGtfcnN0ID0g MDsNCj4gLQl1c2JuX2Nsa19jdGwucy5lbmFibGUgPSAwOw0KPiAtCS8qDQo+IC0JICogMmIuIFNl bGVjdCB0aGUgVVNCIHJlZmVyZW5jZSBjbG9jay9jcnlzdGFsIHBhcmFtZXRlcnMgYnkgd3JpdGlu Zw0KPiAtCSAqICAgICBhcHByb3ByaWF0ZSB2YWx1ZXMgdG8gVVNCTjAvMV9DTEtfQ1RMW1BfQ19T RUwsIFBfUlRZUEUsIFBfQ09NX09OXQ0KPiAtCSAqLw0KPiAtCWlmICh1c2ItPmluaXRfZmxhZ3Mg JiBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX0NMT0NLX1hPX0dORCkgew0KPiAtCQkvKg0KPiAt CQkgKiBUaGUgVVNCIHBvcnQgdXNlcyAxMi8yNC80OE1IeiAyLjVWIGJvYXJkIGNsb2NrDQo+IC0J CSAqIHNvdXJjZSBhdCBVU0JfWE8uIFVTQl9YSSBzaG91bGQgYmUgdGllZCB0byBHTkQuDQo+IC0J CSAqIE1vc3QgT2N0ZW9uIGV2YWx1YXRpb24gYm9hcmRzIHJlcXVpcmUgdGhpcyBzZXR0aW5nDQo+ IC0JCSAqLw0KPiAtCQlpZiAoT0NURU9OX0lTX01PREVMKE9DVEVPTl9DTjNYWFgpIHx8DQo+IC0J CSAgICBPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NONTZYWCkgfHwNCj4gLQkJICAgIE9DVEVPTl9J U19NT0RFTChPQ1RFT05fQ041MFhYKSkNCj4gLQkJCS8qIEZyb20gQ041NlhYLENONTBYWCxDTjMx WFgsQ04zMFhYIG1hbnVhbHMgKi8NCj4gLQkJCXVzYm5fY2xrX2N0bC5zLnBfcnR5cGUgPSAyOyAv KiBwX3JjbGs9MSAmIHBfeGVuYm49MCAqLw0KPiAtCQllbHNlDQo+IC0JCQkvKiBGcm9tIENONTJY WCBtYW51YWwgKi8NCj4gLQkJCXVzYm5fY2xrX2N0bC5zLnBfcnR5cGUgPSAxOw0KPiAtDQo+IC0J CXN3aXRjaCAodXNiLT5pbml0X2ZsYWdzICYNCj4gLQkJCUNWTVhfVVNCX0lOSVRJQUxJWkVfRkxB R1NfQ0xPQ0tfTUhaX01BU0spIHsNCj4gLQkJY2FzZSBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdT X0NMT0NLXzEyTUhaOg0KPiAtCQkJdXNibl9jbGtfY3RsLnMucF9jX3NlbCA9IDA7DQo+IC0JCQli cmVhazsNCj4gLQkJY2FzZSBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX0NMT0NLXzI0TUhaOg0K PiAtCQkJdXNibl9jbGtfY3RsLnMucF9jX3NlbCA9IDE7DQo+IC0JCQlicmVhazsNCj4gLQkJY2Fz ZSBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX0NMT0NLXzQ4TUhaOg0KPiAtCQkJdXNibl9jbGtf Y3RsLnMucF9jX3NlbCA9IDI7DQo+IC0JCQlicmVhazsNCj4gLQkJfQ0KPiAtCX0gZWxzZSB7DQo+ IC0JCS8qDQo+IC0JCSAqIFRoZSBVU0IgcG9ydCB1c2VzIGEgMTJNSHogY3J5c3RhbCBhcyBjbG9j ayBzb3VyY2UNCj4gLQkJICogYXQgVVNCX1hPIGFuZCBVU0JfWEkNCj4gLQkJICovDQo+IC0JCWlm IChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOM1hYWCkpDQo+IC0JCQkvKiBGcm9tIENOMzFYWCxD TjMwWFggbWFudWFsICovDQo+IC0JCQl1c2JuX2Nsa19jdGwucy5wX3J0eXBlID0gMzsgLyogcF9y Y2xrPTEgJiBwX3hlbmJuPTEgKi8NCj4gLQkJZWxzZQ0KPiAtCQkJLyogRnJvbSBDTjU2WFgsQ041 MlhYLENONTBYWCBtYW51YWxzLiAqLw0KPiAtCQkJdXNibl9jbGtfY3RsLnMucF9ydHlwZSA9IDA7 DQo+IC0NCj4gLQkJdXNibl9jbGtfY3RsLnMucF9jX3NlbCA9IDA7DQo+IC0JfQ0KPiAtCS8qDQo+ IC0JICogMmMuIFNlbGVjdCB0aGUgSENMSyB2aWEgd3JpdGluZyBVU0JOMC8xX0NMS19DVExbRElW SURFLCBESVZJREUyXSBhbmQNCj4gLQkgKiAgICAgc2V0dGluZyBVU0JOMC8xX0NMS19DVExbRU5B QkxFXSA9IDEuIERpdmlkZSB0aGUgY29yZSBjbG9jayBkb3duDQo+IC0JICogICAgIHN1Y2ggdGhh dCBVU0IgaXMgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gMTI1TWh6DQo+IC0JICovDQo+IC0JZGl2 aXNvciA9IERJVl9ST1VORF9VUChvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSwgMTI1MDAwMDAwKTsN Cj4gLQkvKiBMb3dlciB0aGFuIDQgZG9lc24ndCBzZWVtIHRvIHdvcmsgcHJvcGVybHkgKi8NCj4g LQlpZiAoZGl2aXNvciA8IDQpDQo+IC0JCWRpdmlzb3IgPSA0Ow0KPiAtCXVzYm5fY2xrX2N0bC5z LmRpdmlkZSA9IGRpdmlzb3I7DQo+IC0JdXNibl9jbGtfY3RsLnMuZGl2aWRlMiA9IDA7DQo+IC0J Y3ZteF93cml0ZTY0X3VpbnQ2NChDVk1YX1VTQk5YX0NMS19DVEwodXNiLT5pbmRleCksIHVzYm5f Y2xrX2N0bC51NjQpOw0KPiAtDQo+IC0JLyogMmQuIFdyaXRlIFVTQk4wLzFfQ0xLX0NUTFtIQ0xL X1JTVF0gPSAxICovDQo+IC0JdXNibl9jbGtfY3RsLnMuaGNsa19yc3QgPSAxOw0KPiAtCWN2bXhf d3JpdGU2NF91aW50NjQoQ1ZNWF9VU0JOWF9DTEtfQ1RMKHVzYi0+aW5kZXgpLCB1c2JuX2Nsa19j dGwudTY0KTsNCj4gLQkvKiAyZS4gIFdhaXQgNjQgY29yZS1jbG9jayBjeWNsZXMgZm9yIEhDTEsg dG8gc3RhYmlsaXplICovDQo+IC0JX19kZWxheSg2NCk7DQo+IC0JLyoNCj4gLQkgKiAzLiBQcm9n cmFtIHRoZSBwb3dlci1vbiByZXNldCBmaWVsZCBpbiB0aGUgVVNCTiBjbG9jay1jb250cm9sDQo+ IC0JICogICAgcmVnaXN0ZXI6DQo+IC0JICogICAgVVNCTl9DTEtfQ1RMW1BPUl0gPSAwDQo+IC0J ICovDQo+IC0JdXNibl9jbGtfY3RsLnMucG9yID0gMDsNCj4gLQljdm14X3dyaXRlNjRfdWludDY0 KENWTVhfVVNCTlhfQ0xLX0NUTCh1c2ItPmluZGV4KSwgdXNibl9jbGtfY3RsLnU2NCk7DQo+IC0J LyogNC4gV2FpdCAxIG1zIGZvciBQSFkgY2xvY2sgdG8gc3RhcnQgKi8NCj4gLQltZGVsYXkoMSk7 DQo+IC0JLyoNCj4gLQkgKiA1LiBQcm9ncmFtIHRoZSBSZXNldCBpbnB1dCBmcm9tIGF1dG9tYXRp YyB0ZXN0IGVxdWlwbWVudCBmaWVsZCBpbiB0aGUNCj4gLQkgKiAgICBVU0JQIGNvbnRyb2wgYW5k IHN0YXR1cyByZWdpc3RlcjoNCj4gLQkgKiAgICBVU0JOX1VTQlBfQ1RMX1NUQVRVU1tBVEVfUkVT RVRdID0gMQ0KPiAtCSAqLw0KPiAtCXVzYm5fdXNicF9jdGxfc3RhdHVzLnU2NCA9DQo+IC0JCWN2 bXhfcmVhZDY0X3VpbnQ2NChDVk1YX1VTQk5YX1VTQlBfQ1RMX1NUQVRVUyh1c2ItPmluZGV4KSk7 DQo+IC0JdXNibl91c2JwX2N0bF9zdGF0dXMucy5hdGVfcmVzZXQgPSAxOw0KPiAtCWN2bXhfd3Jp dGU2NF91aW50NjQoQ1ZNWF9VU0JOWF9VU0JQX0NUTF9TVEFUVVModXNiLT5pbmRleCksDQo+IC0J CQkgICAgdXNibl91c2JwX2N0bF9zdGF0dXMudTY0KTsNCj4gLQkvKiA2LiBXYWl0IDEwIGN5Y2xl cyAqLw0KPiAtCV9fZGVsYXkoMTApOw0KPiAtCS8qDQo+IC0JICogNy4gQ2xlYXIgQVRFX1JFU0VU IGZpZWxkIGluIHRoZSBVU0JOIGNsb2NrLWNvbnRyb2wgcmVnaXN0ZXI6DQo+IC0JICogICAgVVNC Tl9VU0JQX0NUTF9TVEFUVVNbQVRFX1JFU0VUXSA9IDANCj4gLQkgKi8NCj4gLQl1c2JuX3VzYnBf Y3RsX3N0YXR1cy5zLmF0ZV9yZXNldCA9IDA7DQo+IC0JY3ZteF93cml0ZTY0X3VpbnQ2NChDVk1Y X1VTQk5YX1VTQlBfQ1RMX1NUQVRVUyh1c2ItPmluZGV4KSwNCj4gLQkJCSAgICB1c2JuX3VzYnBf Y3RsX3N0YXR1cy51NjQpOw0KPiAtCS8qDQo+IC0JICogOC4gUHJvZ3JhbSB0aGUgUEhZIHJlc2V0 IGZpZWxkIGluIHRoZSBVU0JOIGNsb2NrLWNvbnRyb2wgcmVnaXN0ZXI6DQo+IC0JICogICAgVVNC Tl9DTEtfQ1RMW1BSU1RdID0gMQ0KPiAtCSAqLw0KPiAtCXVzYm5fY2xrX2N0bC5zLnByc3QgPSAx Ow0KPiAtCWN2bXhfd3JpdGU2NF91aW50NjQoQ1ZNWF9VU0JOWF9DTEtfQ1RMKHVzYi0+aW5kZXgp LCB1c2JuX2Nsa19jdGwudTY0KTsNCj4gLQkvKg0KPiAtCSAqIDkuIFByb2dyYW0gdGhlIFVTQlAg Y29udHJvbCBhbmQgc3RhdHVzIHJlZ2lzdGVyIHRvIHNlbGVjdCBob3N0IG9yDQo+IC0JICogICAg ZGV2aWNlIG1vZGUuIFVTQk5fVVNCUF9DVExfU1RBVFVTW0hTVF9NT0RFXSA9IDAgZm9yIGhvc3Qs ID0gMSBmb3INCj4gLQkgKiAgICBkZXZpY2UNCj4gLQkgKi8NCj4gLQl1c2JuX3VzYnBfY3RsX3N0 YXR1cy5zLmhzdF9tb2RlID0gMDsNCj4gLQljdm14X3dyaXRlNjRfdWludDY0KENWTVhfVVNCTlhf VVNCUF9DVExfU1RBVFVTKHVzYi0+aW5kZXgpLA0KPiAtCQkJICAgIHVzYm5fdXNicF9jdGxfc3Rh dHVzLnU2NCk7DQo+IC0JLyogMTAuIFdhaXQgMSB1cyAqLw0KPiAtCXVkZWxheSgxKTsNCj4gLQkv Kg0KPiAtCSAqIDExLiBQcm9ncmFtIHRoZSBocmVzZXRfbiBmaWVsZCBpbiB0aGUgVVNCTiBjbG9j ay1jb250cm9sIHJlZ2lzdGVyOg0KPiAtCSAqICAgICBVU0JOX0NMS19DVExbSFJTVF0gPSAxDQo+ IC0JICovDQo+IC0JdXNibl9jbGtfY3RsLnMuaHJzdCA9IDE7DQo+IC0JY3ZteF93cml0ZTY0X3Vp bnQ2NChDVk1YX1VTQk5YX0NMS19DVEwodXNiLT5pbmRleCksIHVzYm5fY2xrX2N0bC51NjQpOw0K PiAtCS8qIDEyLiBQcm9jZWVkIHRvIFVTQiBjb3JlIGluaXRpYWxpemF0aW9uICovDQo+IC0JdXNi bl9jbGtfY3RsLnMuZW5hYmxlID0gMTsNCj4gLQljdm14X3dyaXRlNjRfdWludDY0KENWTVhfVVNC TlhfQ0xLX0NUTCh1c2ItPmluZGV4KSwgdXNibl9jbGtfY3RsLnU2NCk7DQo+IC0JdWRlbGF5KDEp Ow0KPiAtDQo+IC0JLyoNCj4gLQkgKiBVU0IgQ29yZSBJbml0aWFsaXphdGlvbg0KPiAtCSAqDQo+ IC0JICogMS4gUmVhZCBVU0JDX0dIV0NGRzEsIFVTQkNfR0hXQ0ZHMiwgVVNCQ19HSFdDRkczLCBV U0JDX0dIV0NGRzQgdG8NCj4gLQkgKiAgICBkZXRlcm1pbmUgVVNCIGNvcmUgY29uZmlndXJhdGlv biBwYXJhbWV0ZXJzLg0KPiAtCSAqDQo+IC0JICogICAgTm90aGluZyBuZWVkZWQNCj4gLQkgKg0K PiAtCSAqIDIuIFByb2dyYW0gdGhlIGZvbGxvd2luZyBmaWVsZHMgaW4gdGhlIGdsb2JhbCBBSEIg Y29uZmlndXJhdGlvbg0KPiAtCSAqICAgIHJlZ2lzdGVyIChVU0JDX0dBSEJDRkcpDQo+IC0JICog ICAgRE1BIG1vZGUsIFVTQkNfR0FIQkNGR1tETUFFbl06IDEgPSBETUEgbW9kZSwgMCA9IHNsYXZl IG1vZGUNCj4gLQkgKiAgICBCdXJzdCBsZW5ndGgsIFVTQkNfR0FIQkNGR1tIQlNUTEVOXSA9IDAN Cj4gLQkgKiAgICBOb25wZXJpb2RpYyBUeEZJRk8gZW1wdHkgbGV2ZWwgKHNsYXZlIG1vZGUgb25s eSksDQo+IC0JICogICAgVVNCQ19HQUhCQ0ZHW05QVFhGRU1QTFZMXQ0KPiAtCSAqICAgIFBlcmlv ZGljIFR4RklGTyBlbXB0eSBsZXZlbCAoc2xhdmUgbW9kZSBvbmx5KSwNCj4gLQkgKiAgICBVU0JD X0dBSEJDRkdbUFRYRkVNUExWTF0NCj4gLQkgKiAgICBHbG9iYWwgaW50ZXJydXB0IG1hc2ssIFVT QkNfR0FIQkNGR1tHTEJMSU5UUk1TS10gPSAxDQo+IC0JICovDQo+IC0JdXNiY3hfZ2FoYmNmZy51 MzIgPSAwOw0KPiAtCXVzYmN4X2dhaGJjZmcucy5kbWFlbiA9ICEodXNiLT5pbml0X2ZsYWdzICYN Cj4gLQkJCQkgIENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfTk9fRE1BKTsNCj4gLQl1c2JjeF9n YWhiY2ZnLnMuaGJzdGxlbiA9IDA7DQo+IC0JdXNiY3hfZ2FoYmNmZy5zLm5wdHhmZW1wbHZsID0g MTsNCj4gLQl1c2JjeF9nYWhiY2ZnLnMucHR4ZmVtcGx2bCA9IDE7DQo+IC0JdXNiY3hfZ2FoYmNm Zy5zLmdsYmxpbnRybXNrID0gMTsNCj4gLQljdm14X3VzYl93cml0ZV9jc3IzMih1c2IsIENWTVhf VVNCQ1hfR0FIQkNGRyh1c2ItPmluZGV4KSwNCj4gLQkJCSAgICAgdXNiY3hfZ2FoYmNmZy51MzIp Ow0KPiAtDQo+IC0JLyoNCj4gLQkgKiAzLiBQcm9ncmFtIHRoZSBmb2xsb3dpbmcgZmllbGRzIGlu IFVTQkNfR1VTQkNGRyByZWdpc3Rlci4NCj4gLQkgKiAgICBIUy9GUyB0aW1lb3V0IGNhbGlicmF0 aW9uLCBVU0JDX0dVU0JDRkdbVE9VVENBTF0gPSAwDQo+IC0JICogICAgVUxQSSBERFIgc2VsZWN0 LCBVU0JDX0dVU0JDRkdbRERSU0VMXSA9IDANCj4gLQkgKiAgICBVU0IgdHVybmFyb3VuZCB0aW1l LCBVU0JDX0dVU0JDRkdbVVNCVFJEVElNXSA9IDB4NQ0KPiAtCSAqICAgIFBIWSBsb3ctcG93ZXIg Y2xvY2sgc2VsZWN0LCBVU0JDX0dVU0JDRkdbUEhZTFBXUkNMS1NFTF0gPSAwDQo+IC0JICovDQo+ IC0JdXNiY3hfZ3VzYmNmZy51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQkJ CUNWTVhfVVNCQ1hfR1VTQkNGRyh1c2ItPmluZGV4KSk7DQo+IC0JdXNiY3hfZ3VzYmNmZy5zLnRv dXRjYWwgPSAwOw0KPiAtCXVzYmN4X2d1c2JjZmcucy5kZHJzZWwgPSAwOw0KPiAtCXVzYmN4X2d1 c2JjZmcucy51c2J0cmR0aW0gPSAweDU7DQo+IC0JdXNiY3hfZ3VzYmNmZy5zLnBoeWxwd3JjbGtz ZWwgPSAwOw0KPiAtCWN2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9HVVNCQ0ZH KHVzYi0+aW5kZXgpLA0KPiAtCQkJICAgICB1c2JjeF9ndXNiY2ZnLnUzMik7DQo+IC0NCj4gLQkv Kg0KPiAtCSAqIDQuIFRoZSBzb2Z0d2FyZSBtdXN0IHVubWFzayB0aGUgZm9sbG93aW5nIGJpdHMg aW4gdGhlIFVTQkNfR0lOVE1TSw0KPiAtCSAqICAgIHJlZ2lzdGVyLg0KPiAtCSAqICAgIE9URyBp bnRlcnJ1cHQgbWFzaywgVVNCQ19HSU5UTVNLW09UR0lOVE1TS10gPSAxDQo+IC0JICogICAgTW9k ZSBtaXNtYXRjaCBpbnRlcnJ1cHQgbWFzaywgVVNCQ19HSU5UTVNLW01PREVNSVNNU0tdID0gMQ0K PiAtCSAqLw0KPiAtCXVzYmN4X2dpbnRtc2sudTMyID0gY3ZteF91c2JfcmVhZF9jc3IzMih1c2Is DQo+IC0JCQkJCQlDVk1YX1VTQkNYX0dJTlRNU0sodXNiLT5pbmRleCkpOw0KPiAtCXVzYmN4X2dp bnRtc2sucy5vdGdpbnRtc2sgPSAxOw0KPiAtCXVzYmN4X2dpbnRtc2sucy5tb2RlbWlzbXNrID0g MTsNCj4gLQl1c2JjeF9naW50bXNrLnMuaGNoaW50bXNrID0gMTsNCj4gLQl1c2JjeF9naW50bXNr LnMuc29mbXNrID0gMDsNCj4gLQkvKiBXZSBuZWVkIFJYIEZJRk8gaW50ZXJydXB0cyBpZiB3ZSBk b24ndCBoYXZlIERNQSAqLw0KPiAtCWlmICh1c2ItPmluaXRfZmxhZ3MgJiBDVk1YX1VTQl9JTklU SUFMSVpFX0ZMQUdTX05PX0RNQSkNCj4gLQkJdXNiY3hfZ2ludG1zay5zLnJ4Zmx2bG1zayA9IDE7 DQo+IC0JY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNiLCBDVk1YX1VTQkNYX0dJTlRNU0sodXNiLT5p bmRleCksDQo+IC0JCQkgICAgIHVzYmN4X2dpbnRtc2sudTMyKTsNCj4gLQ0KPiAtCS8qDQo+IC0J ICogRGlzYWJsZSBhbGwgY2hhbm5lbCBpbnRlcnJ1cHRzLiBXZSdsbCBlbmFibGUgdGhlbSBwZXIg Y2hhbm5lbCBsYXRlci4NCj4gLQkgKi8NCj4gLQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwg ODsgY2hhbm5lbCsrKQ0KPiAtCQljdm14X3VzYl93cml0ZV9jc3IzMih1c2IsDQo+IC0JCQkJICAg ICBDVk1YX1VTQkNYX0hDSU5UTVNLWChjaGFubmVsLCB1c2ItPmluZGV4KSwNCj4gLQkJCQkgICAg IDApOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBIb3N0IFBvcnQgSW5pdGlhbGl6YXRpb24NCj4gLQkg Kg0KPiAtCSAqIDEuIFByb2dyYW0gdGhlIGhvc3QtcG9ydCBpbnRlcnJ1cHQtbWFzayBmaWVsZCB0 byB1bm1hc2ssDQo+IC0JICogICAgVVNCQ19HSU5UTVNLW1BSVElOVF0gPSAxDQo+IC0JICovDQo+ IC0JVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfR0lOVE1TSyh1c2ItPmluZGV4KSwNCj4gLQkJ CWN2bXhfdXNiY3hfZ2ludG1zaywgcHJ0aW50bXNrLCAxKTsNCj4gLQlVU0JfU0VUX0ZJRUxEMzIo Q1ZNWF9VU0JDWF9HSU5UTVNLKHVzYi0+aW5kZXgpLA0KPiAtCQkJY3ZteF91c2JjeF9naW50bXNr LCBkaXNjb25uaW50bXNrLCAxKTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogMi4gUHJvZ3JhbSB0aGUg VVNCQ19IQ0ZHIHJlZ2lzdGVyIHRvIHNlbGVjdCBmdWxsLXNwZWVkIGhvc3QNCj4gLQkgKiAgICBv ciBoaWdoLXNwZWVkIGhvc3QuDQo+IC0JICovDQo+IC0JdXNiY3hfaGNmZy51MzIgPSBjdm14X3Vz Yl9yZWFkX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9IQ0ZHKHVzYi0+aW5kZXgpKTsNCj4gLQl1c2Jj eF9oY2ZnLnMuZnNsc3N1cHAgPSAwOw0KPiAtCXVzYmN4X2hjZmcucy5mc2xzcGNsa3NlbCA9IDA7 DQo+IC0JY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNiLCBDVk1YX1VTQkNYX0hDRkcodXNiLT5pbmRl eCksIHVzYmN4X2hjZmcudTMyKTsNCj4gLQ0KPiAtCWN2bXhfZmlmb19zZXR1cCh1c2IpOw0KPiAt DQo+IC0JLyoNCj4gLQkgKiBJZiB0aGUgY29udHJvbGxlciBpcyBnZXR0aW5nIHBvcnQgZXZlbnRz IHJpZ2h0IGFmdGVyIHRoZSByZXNldCwgaXQNCj4gLQkgKiBtZWFucyB0aGUgaW5pdGlhbGl6YXRp b24gZmFpbGVkLiBUcnkgcmVzZXR0aW5nIHRoZSBjb250cm9sbGVyIGFnYWluDQo+IC0JICogaW4g c3VjaCBjYXNlLiBUaGlzIGlzIHNlZW4gdG8gaGFwcGVuIGFmdGVyIGNvbGQgYm9vdCBvbiBEU1It MTAwME4uDQo+IC0JICovDQo+IC0JdXNiY19naW50c3RzLnUzMiA9IGN2bXhfdXNiX3JlYWRfY3Ny MzIodXNiLA0KPiAtCQkJCQkgICAgICAgQ1ZNWF9VU0JDWF9HSU5UU1RTKHVzYi0+aW5kZXgpKTsN Cj4gLQljdm14X3VzYl93cml0ZV9jc3IzMih1c2IsIENWTVhfVVNCQ1hfR0lOVFNUUyh1c2ItPmlu ZGV4KSwNCj4gLQkJCSAgICAgdXNiY19naW50c3RzLnUzMik7DQo+IC0JZGV2X2RiZyhkZXYsICJn aW50c3RzIGFmdGVyIHJlc2V0OiAweCV4XG4iLCAoaW50KXVzYmNfZ2ludHN0cy51MzIpOw0KPiAt CWlmICghdXNiY19naW50c3RzLnMuZGlzY29ubmludCAmJiAhdXNiY19naW50c3RzLnMucHJ0aW50 KQ0KPiAtCQlyZXR1cm4gMDsNCj4gLQlpZiAocmV0cmllcysrID49IDUpDQo+IC0JCXJldHVybiAt RUFHQUlOOw0KPiAtCWRldl9pbmZvKGRldiwgImNvbnRyb2xsZXIgcmVzZXQgZmFpbGVkIChnaW50 c3RzPTB4JXgpIC0gcmV0cnlpbmdcbiIsDQo+IC0JCSAoaW50KXVzYmNfZ2ludHN0cy51MzIpOw0K PiAtCW1zbGVlcCg1MCk7DQo+IC0JY3ZteF91c2Jfc2h1dGRvd24odXNiKTsNCj4gLQltc2xlZXAo NTApOw0KPiAtCWdvdG8gcmV0cnk7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogUmVzZXQgYSBV U0IgcG9ydC4gQWZ0ZXIgdGhpcyBjYWxsIHN1Y2NlZWRzLCB0aGUgVVNCIHBvcnQgaXMNCj4gLSAq IG9ubGluZSBhbmQgc2VydmljaW5nIHJlcXVlc3RzLg0KPiAtICoNCj4gLSAqIEB1c2I6IFVTQiBk ZXZpY2Ugc3RhdGUgcG9wdWxhdGVkIGJ5IGN2bXhfdXNiX2luaXRpYWxpemUoKS4NCj4gLSAqLw0K PiAtc3RhdGljIHZvaWQgY3ZteF91c2JfcmVzZXRfcG9ydChzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNi KQ0KPiAtew0KPiAtCXVzYi0+dXNiY3hfaHBydC51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVz YiwNCj4gLQkJCQkJCSAgQ1ZNWF9VU0JDWF9IUFJUKHVzYi0+aW5kZXgpKTsNCj4gLQ0KPiAtCS8q IFByb2dyYW0gdGhlIHBvcnQgcmVzZXQgYml0IHRvIHN0YXJ0IHRoZSByZXNldCBwcm9jZXNzICov DQo+IC0JVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSFBSVCh1c2ItPmluZGV4KSwgY3ZteF91 c2JjeF9ocHJ0LA0KPiAtCQkJcHJ0cnN0LCAxKTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogV2FpdCBh dCBsZWFzdCA1MG1zIChoaWdoIHNwZWVkKSwgb3IgMTBtcyAoZnVsbCBzcGVlZCkgZm9yIHRoZSBy ZXNldA0KPiAtCSAqIHByb2Nlc3MgdG8gY29tcGxldGUuDQo+IC0JICovDQo+IC0JbWRlbGF5KDUw KTsNCj4gLQ0KPiAtCS8qIFByb2dyYW0gdGhlIHBvcnQgcmVzZXQgYml0IHRvIDAsIFVTQkNfSFBS VFtQUlRSU1RdID0gMCAqLw0KPiAtCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0hQUlQodXNi LT5pbmRleCksIGN2bXhfdXNiY3hfaHBydCwNCj4gLQkJCXBydHJzdCwgMCk7DQo+IC0NCj4gLQkv Kg0KPiAtCSAqIFJlYWQgdGhlIHBvcnQgc3BlZWQgZmllbGQgdG8gZ2V0IHRoZSBlbnVtZXJhdGVk IHNwZWVkLA0KPiAtCSAqIFVTQkNfSFBSVFtQUlRTUERdLg0KPiAtCSAqLw0KPiAtCXVzYi0+dXNi Y3hfaHBydC51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQkJCSAgQ1ZNWF9V U0JDWF9IUFJUKHVzYi0+aW5kZXgpKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBEaXNhYmxl IGEgVVNCIHBvcnQuIEFmdGVyIHRoaXMgY2FsbCB0aGUgVVNCIHBvcnQgd2lsbCBub3QNCj4gLSAq IGdlbmVyYXRlIGRhdGEgdHJhbnNmZXJzIGFuZCB3aWxsIG5vdCBnZW5lcmF0ZSBldmVudHMuDQo+ IC0gKiBUcmFuc2FjdGlvbnMgaW4gcHJvY2VzcyB3aWxsIGZhaWwgYW5kIGNhbGwgdGhlaXINCj4g LSAqIGFzc29jaWF0ZWQgY2FsbGJhY2tzLg0KPiAtICoNCj4gLSAqIEB1c2I6IFVTQiBkZXZpY2Ug c3RhdGUgcG9wdWxhdGVkIGJ5IGN2bXhfdXNiX2luaXRpYWxpemUoKS4NCj4gLSAqDQo+IC0gKiBS ZXR1cm5zOiAwIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4NCj4gLSAqLw0KPiAtc3RhdGljIGlu dCBjdm14X3VzYl9kaXNhYmxlKHN0cnVjdCBvY3Rlb25faGNkICp1c2IpDQo+IC17DQo+IC0JLyog RGlzYWJsZSB0aGUgcG9ydCAqLw0KPiAtCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0hQUlQo dXNiLT5pbmRleCksIGN2bXhfdXNiY3hfaHBydCwNCj4gLQkJCXBydGVuYSwgMSk7DQo+IC0JcmV0 dXJuIDA7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogR2V0IHRoZSBjdXJyZW50IHN0YXRlIG9m IHRoZSBVU0IgcG9ydC4gVXNlIHRoaXMgY2FsbCB0bw0KPiAtICogZGV0ZXJtaW5lIGlmIHRoZSB1 c2IgcG9ydCBoYXMgYW55dGhpbmcgY29ubmVjdGVkLCBpcyBlbmFibGVkLA0KPiAtICogb3IgaGFz IHNvbWUgc29ydCBvZiBlcnJvciBjb25kaXRpb24uIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcw0K PiAtICogY2FsbCBoYXMgImNoYW5nZWQiIGJpdHMgdG8gc2lnbmFsIG9mIHRoZSB2YWx1ZSBvZiBz b21lIGZpZWxkcw0KPiAtICogaGF2ZSBjaGFuZ2VkIGJldHdlZW4gY2FsbHMuDQo+IC0gKg0KPiAt ICogQHVzYjogVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5pdGlhbGl6 ZSgpLg0KPiAtICoNCj4gLSAqIFJldHVybnM6IFBvcnQgc3RhdHVzIGluZm9ybWF0aW9uDQo+IC0g Ki8NCj4gLXN0YXRpYyBzdHJ1Y3QgY3ZteF91c2JfcG9ydF9zdGF0dXMgY3ZteF91c2JfZ2V0X3N0 YXR1cyhzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiKQ0KPiAtew0KPiAtCXVuaW9uIGN2bXhfdXNiY3hf aHBydCB1c2JjX2hwcnQ7DQo+IC0Jc3RydWN0IGN2bXhfdXNiX3BvcnRfc3RhdHVzIHJlc3VsdDsN Cj4gLQ0KPiAtCW1lbXNldCgmcmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7DQo+IC0NCj4gLQl1 c2JjX2hwcnQudTMyID0gY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsIENWTVhfVVNCQ1hfSFBSVCh1 c2ItPmluZGV4KSk7DQo+IC0JcmVzdWx0LnBvcnRfZW5hYmxlZCA9IHVzYmNfaHBydC5zLnBydGVu YTsNCj4gLQlyZXN1bHQucG9ydF9vdmVyX2N1cnJlbnQgPSB1c2JjX2hwcnQucy5wcnRvdnJjdXJy YWN0Ow0KPiAtCXJlc3VsdC5wb3J0X3Bvd2VyZWQgPSB1c2JjX2hwcnQucy5wcnRwd3I7DQo+IC0J cmVzdWx0LnBvcnRfc3BlZWQgPSB1c2JjX2hwcnQucy5wcnRzcGQ7DQo+IC0JcmVzdWx0LmNvbm5l Y3RlZCA9IHVzYmNfaHBydC5zLnBydGNvbm5zdHM7DQo+IC0JcmVzdWx0LmNvbm5lY3RfY2hhbmdl ID0NCj4gLQkJcmVzdWx0LmNvbm5lY3RlZCAhPSB1c2ItPnBvcnRfc3RhdHVzLmNvbm5lY3RlZDsN Cj4gLQ0KPiAtCXJldHVybiByZXN1bHQ7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogT3BlbiBh IHZpcnR1YWwgcGlwZSBiZXR3ZWVuIHRoZSBob3N0IGFuZCBhIFVTQiBkZXZpY2UuIEEgcGlwZQ0K PiAtICogbXVzdCBiZSBvcGVuZWQgYmVmb3JlIGRhdGEgY2FuIGJlIHRyYW5zZmVycmVkIGJldHdl ZW4gYSBkZXZpY2UNCj4gLSAqIGFuZCBPY3Rlb24uDQo+IC0gKg0KPiAtICogQHVzYjoJICAgICBV U0IgZGV2aWNlIHN0YXRlIHBvcHVsYXRlZCBieSBjdm14X3VzYl9pbml0aWFsaXplKCkuDQo+IC0g KiBAZGV2aWNlX2FkZHI6DQo+IC0gKgkJICAgICBVU0IgZGV2aWNlIGFkZHJlc3MgdG8gb3BlbiB0 aGUgcGlwZSB0bw0KPiAtICoJCSAgICAgKDAtMTI3KS4NCj4gLSAqIEBlbmRwb2ludF9udW06DQo+ IC0gKgkJICAgICBVU0IgZW5kcG9pbnQgbnVtYmVyIHRvIG9wZW4gdGhlIHBpcGUgdG8NCj4gLSAq CQkgICAgICgwLTE1KS4NCj4gLSAqIEBkZXZpY2Vfc3BlZWQ6DQo+IC0gKgkJICAgICBUaGUgc3Bl ZWQgb2YgdGhlIGRldmljZSB0aGUgcGlwZSBpcyBnb2luZw0KPiAtICoJCSAgICAgdG8uIFRoaXMg bXVzdCBtYXRjaCB0aGUgZGV2aWNlJ3Mgc3BlZWQsDQo+IC0gKgkJICAgICB3aGljaCBtYXkgYmUg ZGlmZmVyZW50IHRoYW4gdGhlIHBvcnQgc3BlZWQuDQo+IC0gKiBAbWF4X3BhY2tldDoJICAgICBU aGUgbWF4aW11bSBwYWNrZXQgbGVuZ3RoIHRoZSBkZXZpY2UgY2FuDQo+IC0gKgkJICAgICB0cmFu c21pdC9yZWNlaXZlIChsb3cgc3BlZWQ9MC04LCBmdWxsDQo+IC0gKgkJICAgICBzcGVlZD0wLTEw MjMsIGhpZ2ggc3BlZWQ9MC0xMDI0KS4gVGhpcyB2YWx1ZQ0KPiAtICoJCSAgICAgY29tZXMgZnJv bSB0aGUgc3RhbmRhcmQgZW5kcG9pbnQgZGVzY3JpcHRvcg0KPiAtICoJCSAgICAgZmllbGQgd01h eFBhY2tldFNpemUgYml0cyA8MTA6MD4uDQo+IC0gKiBAdHJhbnNmZXJfdHlwZToNCj4gLSAqCQkg ICAgIFRoZSB0eXBlIG9mIHRyYW5zZmVyIHRoaXMgcGlwZSBpcyBmb3IuDQo+IC0gKiBAdHJhbnNm ZXJfZGlyOg0KPiAtICoJCSAgICAgVGhlIGRpcmVjdGlvbiB0aGUgcGlwZSBpcyBpbi4gVGhpcyBp cyBub3QNCj4gLSAqCQkgICAgIHVzZWQgZm9yIGNvbnRyb2wgcGlwZXMuDQo+IC0gKiBAaW50ZXJ2 YWw6CSAgICAgRm9yIElTT0NIUk9OT1VTIGFuZCBJTlRFUlJVUFQgdHJhbnNmZXJzLA0KPiAtICoJ CSAgICAgdGhpcyBpcyBob3cgb2Z0ZW4gdGhlIHRyYW5zZmVyIGlzIHNjaGVkdWxlZA0KPiAtICoJ CSAgICAgZm9yLiBBbGwgb3RoZXIgdHJhbnNmZXJzIHNob3VsZCBzcGVjaWZ5DQo+IC0gKgkJICAg ICB6ZXJvLiBUaGUgdW5pdHMgYXJlIGluIGZyYW1lcyAoODAwMC9zZWMgYXQNCj4gLSAqCQkgICAg IGhpZ2ggc3BlZWQsIDEwMDAvc2VjIGZvciBmdWxsIHNwZWVkKS4NCj4gLSAqIEBtdWx0aV9jb3Vu dDoNCj4gLSAqCQkgICAgIEZvciBoaWdoIHNwZWVkIGRldmljZXMsIHRoaXMgaXMgdGhlIG1heGlt dW0NCj4gLSAqCQkgICAgIGFsbG93ZWQgbnVtYmVyIG9mIHBhY2tldCBwZXIgbWljcm9mcmFtZS4N Cj4gLSAqCQkgICAgIFNwZWNpZnkgemVybyBmb3Igbm9uIGhpZ2ggc3BlZWQgZGV2aWNlcy4gVGhp cw0KPiAtICoJCSAgICAgdmFsdWUgY29tZXMgZnJvbSB0aGUgc3RhbmRhcmQgZW5kcG9pbnQgZGVz Y3JpcHRvcg0KPiAtICoJCSAgICAgZmllbGQgd01heFBhY2tldFNpemUgYml0cyA8MTI6MTE+Lg0K PiAtICogQGh1Yl9kZXZpY2VfYWRkcjoNCj4gLSAqCQkgICAgIEh1YiBkZXZpY2UgYWRkcmVzcyB0 aGlzIGRldmljZSBpcyBjb25uZWN0ZWQNCj4gLSAqCQkgICAgIHRvLiBEZXZpY2VzIGNvbm5lY3Rl ZCBkaXJlY3RseSB0byBPY3Rlb24NCj4gLSAqCQkgICAgIHVzZSB6ZXJvLiBUaGlzIGlzIG9ubHkg dXNlZCB3aGVuIHRoZSBkZXZpY2UNCj4gLSAqCQkgICAgIGlzIGZ1bGwvbG93IHNwZWVkIGJlaGlu ZCBhIGhpZ2ggc3BlZWQgaHViLg0KPiAtICoJCSAgICAgVGhlIGFkZHJlc3Mgd2lsbCBiZSBvZiB0 aGUgaGlnaCBzcGVlZCBodWIsDQo+IC0gKgkJICAgICBub3QgYW5kIGZ1bGwgc3BlZWQgaHVicyBh ZnRlciBpdC4NCj4gLSAqIEBodWJfcG9ydDoJICAgICBXaGljaCBwb3J0IG9uIHRoZSBodWIgdGhl IGRldmljZSBpcw0KPiAtICoJCSAgICAgY29ubmVjdGVkLiBVc2UgemVybyBmb3IgZGV2aWNlcyBj b25uZWN0ZWQNCj4gLSAqCQkgICAgIGRpcmVjdGx5IHRvIE9jdGVvbi4gTGlrZSBodWJfZGV2aWNl X2FkZHIsDQo+IC0gKgkJICAgICB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgZnVsbC9sb3cgc3BlZWQN Cj4gLSAqCQkgICAgIGRldmljZXMgYmVoaW5kIGEgaGlnaCBzcGVlZCBodWIuDQo+IC0gKg0KPiAt ICogUmV0dXJuczogQSBub24tTlVMTCB2YWx1ZSBpcyBhIHBpcGUuIE5VTEwgbWVhbnMgYW4gZXJy b3IuDQo+IC0gKi8NCj4gLXN0YXRpYyBzdHJ1Y3QgY3ZteF91c2JfcGlwZSAqY3ZteF91c2Jfb3Bl bl9waXBlKHN0cnVjdCBvY3Rlb25faGNkICp1c2IsDQo+IC0JCQkJCQlpbnQgZGV2aWNlX2FkZHIs DQo+IC0JCQkJCQlpbnQgZW5kcG9pbnRfbnVtLA0KPiAtCQkJCQkJZW51bSBjdm14X3VzYl9zcGVl ZA0KPiAtCQkJCQkJCWRldmljZV9zcGVlZCwNCj4gLQkJCQkJCWludCBtYXhfcGFja2V0LA0KPiAt CQkJCQkJZW51bSBjdm14X3VzYl90cmFuc2Zlcg0KPiAtCQkJCQkJCXRyYW5zZmVyX3R5cGUsDQo+ IC0JCQkJCQllbnVtIGN2bXhfdXNiX2RpcmVjdGlvbg0KPiAtCQkJCQkJCXRyYW5zZmVyX2RpciwN Cj4gLQkJCQkJCWludCBpbnRlcnZhbCwgaW50IG11bHRpX2NvdW50LA0KPiAtCQkJCQkJaW50IGh1 Yl9kZXZpY2VfYWRkciwNCj4gLQkJCQkJCWludCBodWJfcG9ydCkNCj4gLXsNCj4gLQlzdHJ1Y3Qg Y3ZteF91c2JfcGlwZSAqcGlwZTsNCj4gLQ0KPiAtCXBpcGUgPSBremFsbG9jKHNpemVvZigqcGlw ZSksIEdGUF9BVE9NSUMpOw0KPiAtCWlmICghcGlwZSkNCj4gLQkJcmV0dXJuIE5VTEw7DQo+IC0J aWYgKChkZXZpY2Vfc3BlZWQgPT0gQ1ZNWF9VU0JfU1BFRURfSElHSCkgJiYNCj4gLQkgICAgKHRy YW5zZmVyX2RpciA9PSBDVk1YX1VTQl9ESVJFQ1RJT05fT1VUKSAmJg0KPiAtCSAgICAodHJhbnNm ZXJfdHlwZSA9PSBDVk1YX1VTQl9UUkFOU0ZFUl9CVUxLKSkNCj4gLQkJcGlwZS0+ZmxhZ3MgfD0g Q1ZNWF9VU0JfUElQRV9GTEFHU19ORUVEX1BJTkc7DQo+IC0JcGlwZS0+ZGV2aWNlX2FkZHIgPSBk ZXZpY2VfYWRkcjsNCj4gLQlwaXBlLT5lbmRwb2ludF9udW0gPSBlbmRwb2ludF9udW07DQo+IC0J cGlwZS0+ZGV2aWNlX3NwZWVkID0gZGV2aWNlX3NwZWVkOw0KPiAtCXBpcGUtPm1heF9wYWNrZXQg PSBtYXhfcGFja2V0Ow0KPiAtCXBpcGUtPnRyYW5zZmVyX3R5cGUgPSB0cmFuc2Zlcl90eXBlOw0K PiAtCXBpcGUtPnRyYW5zZmVyX2RpciA9IHRyYW5zZmVyX2RpcjsNCj4gLQlJTklUX0xJU1RfSEVB RCgmcGlwZS0+dHJhbnNhY3Rpb25zKTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogQWxsIHBpcGVzIHVz ZSBpbnRlcnZhbCB0byByYXRlIGxpbWl0IE5BSyBwcm9jZXNzaW5nLiBGb3JjZSBhbg0KPiAtCSAq IGludGVydmFsIGlmIG9uZSB3YXNuJ3Qgc3VwcGxpZWQNCj4gLQkgKi8NCj4gLQlpZiAoIWludGVy dmFsKQ0KPiAtCQlpbnRlcnZhbCA9IDE7DQo+IC0JaWYgKGN2bXhfdXNiX3BpcGVfbmVlZHNfc3Bs aXQodXNiLCBwaXBlKSkgew0KPiAtCQlwaXBlLT5pbnRlcnZhbCA9IGludGVydmFsICogODsNCj4g LQkJLyogRm9yY2Ugc3RhcnQgc3BsaXRzIHRvIGJlIHNjaGVkdWxlIG9uIHVGcmFtZSAwICovDQo+ IC0JCXBpcGUtPm5leHRfdHhfZnJhbWUgPSAoKHVzYi0+ZnJhbWVfbnVtYmVyICsgNykgJiB+Nykg Kw0KPiAtCQkJCQlwaXBlLT5pbnRlcnZhbDsNCj4gLQl9IGVsc2Ugew0KPiAtCQlwaXBlLT5pbnRl cnZhbCA9IGludGVydmFsOw0KPiAtCQlwaXBlLT5uZXh0X3R4X2ZyYW1lID0gdXNiLT5mcmFtZV9u dW1iZXIgKyBwaXBlLT5pbnRlcnZhbDsNCj4gLQl9DQo+IC0JcGlwZS0+bXVsdGlfY291bnQgPSBt dWx0aV9jb3VudDsNCj4gLQlwaXBlLT5odWJfZGV2aWNlX2FkZHIgPSBodWJfZGV2aWNlX2FkZHI7 DQo+IC0JcGlwZS0+aHViX3BvcnQgPSBodWJfcG9ydDsNCj4gLQlwaXBlLT5waWRfdG9nZ2xlID0g MDsNCj4gLQlwaXBlLT5zcGxpdF9zY19mcmFtZSA9IC0xOw0KPiAtCWxpc3RfYWRkX3RhaWwoJnBp cGUtPm5vZGUsICZ1c2ItPmlkbGVfcGlwZXMpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBXZSBkb24n dCBuZWVkIHRvIHRlbGwgdGhlIGhhcmR3YXJlIGFib3V0IHRoaXMgcGlwZSB5ZXQgc2luY2UNCj4g LQkgKiBpdCBkb2Vzbid0IGhhdmUgYW55IHN1Ym1pdHRlZCByZXF1ZXN0cw0KPiAtCSAqLw0KPiAt DQo+IC0JcmV0dXJuIHBpcGU7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogUG9sbCB0aGUgUlgg RklGT3MgYW5kIHJlbW92ZSBkYXRhIGFzIG5lZWRlZC4gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVz ZWQNCj4gLSAqIGluIG5vbiBETUEgbW9kZS4gSXQgaXMgdmVyeSBpbXBvcnRhbnQgdGhhdCB0aGlz IGZ1bmN0aW9uIGJlIGNhbGxlZCBxdWlja2x5DQo+IC0gKiBlbm91Z2ggdG8gcHJldmVudCBGSUZP IG92ZXJmbG93Lg0KPiAtICoNCj4gLSAqIEB1c2I6CVVTQiBkZXZpY2Ugc3RhdGUgcG9wdWxhdGVk IGJ5IGN2bXhfdXNiX2luaXRpYWxpemUoKS4NCj4gLSAqLw0KPiAtc3RhdGljIHZvaWQgY3ZteF91 c2JfcG9sbF9yeF9maWZvKHN0cnVjdCBvY3Rlb25faGNkICp1c2IpDQo+IC17DQo+IC0JdW5pb24g Y3ZteF91c2JjeF9ncnhzdHNwaCByeF9zdGF0dXM7DQo+IC0JaW50IGNoYW5uZWw7DQo+IC0JaW50 IGJ5dGVzOw0KPiAtCXU2NCBhZGRyZXNzOw0KPiAtCXUzMiAqcHRyOw0KPiAtDQo+IC0Jcnhfc3Rh dHVzLnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCQkgICAgQ1ZNWF9VU0JD WF9HUlhTVFNQSCh1c2ItPmluZGV4KSk7DQo+IC0JLyogT25seSByZWFkIGRhdGEgaWYgSU4gZGF0 YSBpcyB0aGVyZSAqLw0KPiAtCWlmIChyeF9zdGF0dXMucy5wa3RzdHMgIT0gMikNCj4gLQkJcmV0 dXJuOw0KPiAtCS8qIENoZWNrIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlICovDQo+IC0JaWYgKCFy eF9zdGF0dXMucy5iY250KQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQljaGFubmVsID0gcnhfc3Rh dHVzLnMuY2hudW07DQo+IC0JYnl0ZXMgPSByeF9zdGF0dXMucy5iY250Ow0KPiAtCWlmICghYnl0 ZXMpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCS8qIEdldCB3aGVyZSB0aGUgRE1BIGVuZ2luZSB3 b3VsZCBoYXZlIHdyaXR0ZW4gdGhpcyBkYXRhICovDQo+IC0JYWRkcmVzcyA9IGN2bXhfcmVhZDY0 X3VpbnQ2NChDVk1YX1VTQk5YX0RNQTBfSU5CX0NITjAodXNiLT5pbmRleCkgKw0KPiAtCQkJCSAg ICAgY2hhbm5lbCAqIDgpOw0KPiAtDQo+IC0JcHRyID0gY3ZteF9waHlzX3RvX3B0cihhZGRyZXNz KTsNCj4gLQljdm14X3dyaXRlNjRfdWludDY0KENWTVhfVVNCTlhfRE1BMF9JTkJfQ0hOMCh1c2It PmluZGV4KSArIGNoYW5uZWwgKiA4LA0KPiAtCQkJICAgIGFkZHJlc3MgKyBieXRlcyk7DQo+IC0N Cj4gLQkvKiBMb29wIHdyaXRpbmcgdGhlIEZJRk8gZGF0YSBmb3IgdGhpcyBwYWNrZXQgaW50byBt ZW1vcnkgKi8NCj4gLQl3aGlsZSAoYnl0ZXMgPiAwKSB7DQo+IC0JCSpwdHIrKyA9IGN2bXhfdXNi X3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCQlVU0JfRklGT19BRERSRVNTKGNoYW5uZWwsIHVzYi0+ aW5kZXgpKTsNCj4gLQkJYnl0ZXMgLT0gNDsNCj4gLQl9DQo+IC0JQ1ZNWF9TWU5DVzsNCj4gLX0N Cj4gLQ0KPiAtLyoqDQo+IC0gKiBGaWxsIHRoZSBUWCBoYXJkd2FyZSBmaWZvIHdpdGggZGF0YSBv dXQgb2YgdGhlIHNvZnR3YXJlDQo+IC0gKiBmaWZvcw0KPiAtICoNCj4gLSAqIEB1c2I6CSAgICBV U0IgZGV2aWNlIHN0YXRlIHBvcHVsYXRlZCBieSBjdm14X3VzYl9pbml0aWFsaXplKCkuDQo+IC0g KiBAZmlmbzoJICAgIFNvZnR3YXJlIGZpZm8gdG8gdXNlDQo+IC0gKiBAYXZhaWxhYmxlOgkgICAg QW1vdW50IG9mIHNwYWNlIGluIHRoZSBoYXJkd2FyZSBmaWZvDQo+IC0gKg0KPiAtICogUmV0dXJu czogTm9uIHplcm8gaWYgdGhlIGhhcmR3YXJlIGZpZm8gd2FzIHRvbyBzbWFsbCBhbmQgbmVlZHMN Cj4gLSAqCSAgICB0byBiZSBzZXJ2aWNlZCBhZ2Fpbi4NCj4gLSAqLw0KPiAtc3RhdGljIGludCBj dm14X3VzYl9maWxsX3R4X2h3KHN0cnVjdCBvY3Rlb25faGNkICp1c2IsDQo+IC0JCQkgICAgICAg c3RydWN0IGN2bXhfdXNiX3R4X2ZpZm8gKmZpZm8sIGludCBhdmFpbGFibGUpDQo+IC17DQo+IC0J LyoNCj4gLQkgKiBXZSdyZSBkb25lIGVpdGhlciB3aGVuIHRoZXJlIGlzbid0IGFueW1vcmUgc3Bh Y2Ugb3IgdGhlIHNvZnR3YXJlIEZJRk8NCj4gLQkgKiBpcyBlbXB0eQ0KPiAtCSAqLw0KPiAtCXdo aWxlIChhdmFpbGFibGUgJiYgKGZpZm8tPmhlYWQgIT0gZmlmby0+dGFpbCkpIHsNCj4gLQkJaW50 IGkgPSBmaWZvLT50YWlsOw0KPiAtCQljb25zdCB1MzIgKnB0ciA9IGN2bXhfcGh5c190b19wdHIo Zmlmby0+ZW50cnlbaV0uYWRkcmVzcyk7DQo+IC0JCXU2NCBjc3JfYWRkcmVzcyA9IFVTQl9GSUZP X0FERFJFU1MoZmlmby0+ZW50cnlbaV0uY2hhbm5lbCwNCj4gLQkJCQkJCSAgIHVzYi0+aW5kZXgp IF4gNDsNCj4gLQkJaW50IHdvcmRzID0gYXZhaWxhYmxlOw0KPiAtDQo+IC0JCS8qIExpbWl0IHRo ZSBhbW91bnQgb2YgZGF0YSB0byB3aGF0IHRoZSBTVyBmaWZvIGhhcyAqLw0KPiAtCQlpZiAoZmlm by0+ZW50cnlbaV0uc2l6ZSA8PSBhdmFpbGFibGUpIHsNCj4gLQkJCXdvcmRzID0gZmlmby0+ZW50 cnlbaV0uc2l6ZTsNCj4gLQkJCWZpZm8tPnRhaWwrKzsNCj4gLQkJCWlmIChmaWZvLT50YWlsID4g TUFYX0NIQU5ORUxTKQ0KPiAtCQkJCWZpZm8tPnRhaWwgPSAwOw0KPiAtCQl9DQo+IC0NCj4gLQkJ LyogVXBkYXRlIHRoZSBuZXh0IGxvY2F0aW9ucyBhbmQgY291bnRzICovDQo+IC0JCWF2YWlsYWJs ZSAtPSB3b3JkczsNCj4gLQkJZmlmby0+ZW50cnlbaV0uYWRkcmVzcyArPSB3b3JkcyAqIDQ7DQo+ IC0JCWZpZm8tPmVudHJ5W2ldLnNpemUgLT0gd29yZHM7DQo+IC0NCj4gLQkJLyoNCj4gLQkJICog V3JpdGUgdGhlIEhXIGZpZm8gZGF0YS4gVGhlIHJlYWQgZXZlcnkgdGhyZWUgd3JpdGVzIGlzIGR1 ZQ0KPiAtCQkgKiB0byBhbiBlcnJhdGEgb24gQ04zWFhYIGNoaXBzDQo+IC0JCSAqLw0KPiAtCQl3 aGlsZSAod29yZHMgPiAzKSB7DQo+IC0JCQljdm14X3dyaXRlNjRfdWludDMyKGNzcl9hZGRyZXNz LCAqcHRyKyspOw0KPiAtCQkJY3ZteF93cml0ZTY0X3VpbnQzMihjc3JfYWRkcmVzcywgKnB0cisr KTsNCj4gLQkJCWN2bXhfd3JpdGU2NF91aW50MzIoY3NyX2FkZHJlc3MsICpwdHIrKyk7DQo+IC0J CQljdm14X3JlYWQ2NF91aW50NjQoDQo+IC0JCQkJCUNWTVhfVVNCTlhfRE1BMF9JTkJfQ0hOMCh1 c2ItPmluZGV4KSk7DQo+IC0JCQl3b3JkcyAtPSAzOw0KPiAtCQl9DQo+IC0JCWN2bXhfd3JpdGU2 NF91aW50MzIoY3NyX2FkZHJlc3MsICpwdHIrKyk7DQo+IC0JCWlmICgtLXdvcmRzKSB7DQo+IC0J CQljdm14X3dyaXRlNjRfdWludDMyKGNzcl9hZGRyZXNzLCAqcHRyKyspOw0KPiAtCQkJaWYgKC0t d29yZHMpDQo+IC0JCQkJY3ZteF93cml0ZTY0X3VpbnQzMihjc3JfYWRkcmVzcywgKnB0cisrKTsN Cj4gLQkJfQ0KPiAtCQljdm14X3JlYWQ2NF91aW50NjQoQ1ZNWF9VU0JOWF9ETUEwX0lOQl9DSE4w KHVzYi0+aW5kZXgpKTsNCj4gLQl9DQo+IC0JcmV0dXJuIGZpZm8tPmhlYWQgIT0gZmlmby0+dGFp bDsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBDaGVjayB0aGUgaGFyZHdhcmUgRklGT3MgYW5k IGZpbGwgdGhlbSBhcyBuZWVkZWQNCj4gLSAqDQo+IC0gKiBAdXNiOglVU0IgZGV2aWNlIHN0YXRl IHBvcHVsYXRlZCBieSBjdm14X3VzYl9pbml0aWFsaXplKCkuDQo+IC0gKi8NCj4gLXN0YXRpYyB2 b2lkIGN2bXhfdXNiX3BvbGxfdHhfZmlmbyhzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiKQ0KPiAtew0K PiAtCWlmICh1c2ItPnBlcmlvZGljLmhlYWQgIT0gdXNiLT5wZXJpb2RpYy50YWlsKSB7DQo+IC0J CXVuaW9uIGN2bXhfdXNiY3hfaHB0eHN0cyB0eF9zdGF0dXM7DQo+IC0NCj4gLQkJdHhfc3RhdHVz LnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCQlDVk1YX1VTQkNYX0hQVFhT VFModXNiLT5pbmRleCkpOw0KPiAtCQlpZiAoY3ZteF91c2JfZmlsbF90eF9odyh1c2IsICZ1c2It PnBlcmlvZGljLA0KPiAtCQkJCQl0eF9zdGF0dXMucy5wdHhmc3BjYXZhaWwpKQ0KPiAtCQkJVVNC X1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfR0lOVE1TSyh1c2ItPmluZGV4KSwNCj4gLQkJCQkJY3Zt eF91c2JjeF9naW50bXNrLCBwdHhmZW1wbXNrLCAxKTsNCj4gLQkJZWxzZQ0KPiAtCQkJVVNCX1NF VF9GSUVMRDMyKENWTVhfVVNCQ1hfR0lOVE1TSyh1c2ItPmluZGV4KSwNCj4gLQkJCQkJY3ZteF91 c2JjeF9naW50bXNrLCBwdHhmZW1wbXNrLCAwKTsNCj4gLQl9DQo+IC0NCj4gLQlpZiAodXNiLT5u b25wZXJpb2RpYy5oZWFkICE9IHVzYi0+bm9ucGVyaW9kaWMudGFpbCkgew0KPiAtCQl1bmlvbiBj dm14X3VzYmN4X2ducHR4c3RzIHR4X3N0YXR1czsNCj4gLQ0KPiAtCQl0eF9zdGF0dXMudTMyID0g Y3ZteF91c2JfcmVhZF9jc3IzMih1c2IsDQo+IC0JCQkJCUNWTVhfVVNCQ1hfR05QVFhTVFModXNi LT5pbmRleCkpOw0KPiAtCQlpZiAoY3ZteF91c2JfZmlsbF90eF9odyh1c2IsICZ1c2ItPm5vbnBl cmlvZGljLA0KPiAtCQkJCQl0eF9zdGF0dXMucy5ucHR4ZnNwY2F2YWlsKSkNCj4gLQkJCVVTQl9T RVRfRklFTEQzMihDVk1YX1VTQkNYX0dJTlRNU0sodXNiLT5pbmRleCksDQo+IC0JCQkJCWN2bXhf dXNiY3hfZ2ludG1zaywgbnB0eGZlbXBtc2ssIDEpOw0KPiAtCQllbHNlDQo+IC0JCQlVU0JfU0VU X0ZJRUxEMzIoQ1ZNWF9VU0JDWF9HSU5UTVNLKHVzYi0+aW5kZXgpLA0KPiAtCQkJCQljdm14X3Vz YmN4X2dpbnRtc2ssIG5wdHhmZW1wbXNrLCAwKTsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLS8qKg0K PiAtICogRmlsbCB0aGUgVFggRklGTyB3aXRoIGFuIG91dGdvaW5nIHBhY2tldA0KPiAtICoNCj4g LSAqIEB1c2I6CSAgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5pdGlh bGl6ZSgpLg0KPiAtICogQGNoYW5uZWw6CSAgQ2hhbm5lbCBudW1iZXIgdG8gZ2V0IHBhY2tldCBm cm9tDQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lkIGN2bXhfdXNiX2ZpbGxfdHhfZmlmbyhzdHJ1Y3Qg b2N0ZW9uX2hjZCAqdXNiLCBpbnQgY2hhbm5lbCkNCj4gLXsNCj4gLQl1bmlvbiBjdm14X3VzYmN4 X2hjY2hhcnggaGNjaGFyOw0KPiAtCXVuaW9uIGN2bXhfdXNiY3hfaGNzcGx0eCB1c2JjX2hjc3Bs dDsNCj4gLQl1bmlvbiBjdm14X3VzYmN4X2hjdHNpenggdXNiY19oY3RzaXo7DQo+IC0Jc3RydWN0 IGN2bXhfdXNiX3R4X2ZpZm8gKmZpZm87DQo+IC0NCj4gLQkvKiBXZSBvbmx5IG5lZWQgdG8gZmls bCBkYXRhIG9uIG91dGJvdW5kIGNoYW5uZWxzICovDQo+IC0JaGNjaGFyLnUzMiA9IGN2bXhfdXNi X3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJQ1ZNWF9VU0JDWF9IQ0NIQVJYKGNoYW5uZWwsIHVzYi0+ aW5kZXgpKTsNCj4gLQlpZiAoaGNjaGFyLnMuZXBkaXIgIT0gQ1ZNWF9VU0JfRElSRUNUSU9OX09V VCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JLyogT1VUIFNwbGl0cyBvbmx5IGhhdmUgZGF0YSBv biB0aGUgc3RhcnQgYW5kIG5vdCB0aGUgY29tcGxldGUgKi8NCj4gLQl1c2JjX2hjc3BsdC51MzIg PSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQlDVk1YX1VTQkNYX0hDU1BMVFgoY2hh bm5lbCwgdXNiLT5pbmRleCkpOw0KPiAtCWlmICh1c2JjX2hjc3BsdC5zLnNwbHRlbmEgJiYgdXNi Y19oY3NwbHQucy5jb21wc3BsdCkNCj4gLQkJcmV0dXJuOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBG aW5kIG91dCBob3cgbWFueSBieXRlcyB3ZSBuZWVkIHRvIGZpbGwgYW5kIGNvbnZlcnQgaXQgaW50 byAzMmJpdA0KPiAtCSAqIHdvcmRzLg0KPiAtCSAqLw0KPiAtCXVzYmNfaGN0c2l6LnUzMiA9IGN2 bXhfdXNiX3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCUNWTVhfVVNCQ1hfSENUU0laWChjaGFubmVs LCB1c2ItPmluZGV4KSk7DQo+IC0JaWYgKCF1c2JjX2hjdHNpei5zLnhmZXJzaXplKQ0KPiAtCQly ZXR1cm47DQo+IC0NCj4gLQlpZiAoKGhjY2hhci5zLmVwdHlwZSA9PSBDVk1YX1VTQl9UUkFOU0ZF Ul9JTlRFUlJVUFQpIHx8DQo+IC0JICAgIChoY2NoYXIucy5lcHR5cGUgPT0gQ1ZNWF9VU0JfVFJB TlNGRVJfSVNPQ0hST05PVVMpKQ0KPiAtCQlmaWZvID0gJnVzYi0+cGVyaW9kaWM7DQo+IC0JZWxz ZQ0KPiAtCQlmaWZvID0gJnVzYi0+bm9ucGVyaW9kaWM7DQo+IC0NCj4gLQlmaWZvLT5lbnRyeVtm aWZvLT5oZWFkXS5jaGFubmVsID0gY2hhbm5lbDsNCj4gLQlmaWZvLT5lbnRyeVtmaWZvLT5oZWFk XS5hZGRyZXNzID0NCj4gLQkJY3ZteF9yZWFkNjRfdWludDY0KENWTVhfVVNCTlhfRE1BMF9PVVRC X0NITjAodXNiLT5pbmRleCkgKw0KPiAtCQkJCSAgIGNoYW5uZWwgKiA4KTsNCj4gLQlmaWZvLT5l bnRyeVtmaWZvLT5oZWFkXS5zaXplID0gKHVzYmNfaGN0c2l6LnMueGZlcnNpemUgKyAzKSA+PiAy Ow0KPiAtCWZpZm8tPmhlYWQrKzsNCj4gLQlpZiAoZmlmby0+aGVhZCA+IE1BWF9DSEFOTkVMUykN Cj4gLQkJZmlmby0+aGVhZCA9IDA7DQo+IC0NCj4gLQljdm14X3VzYl9wb2xsX3R4X2ZpZm8odXNi KTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBQZXJmb3JtIGNoYW5uZWwgc3BlY2lmaWMgc2V0 dXAgZm9yIENvbnRyb2wgdHJhbnNhY3Rpb25zLiBBbGwNCj4gLSAqIHRoZSBnZW5lcmljIHN0dWZm IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gZG9uZSBpbiBjdm14X3VzYl9zdGFydF9jaGFubmVsKCku DQo+IC0gKg0KPiAtICogQHVzYjoJICBVU0IgZGV2aWNlIHN0YXRlIHBvcHVsYXRlZCBieSBjdm14 X3VzYl9pbml0aWFsaXplKCkuDQo+IC0gKiBAY2hhbm5lbDoJICBDaGFubmVsIHRvIHNldHVwDQo+ IC0gKiBAcGlwZToJICBQaXBlIGZvciBjb250cm9sIHRyYW5zYWN0aW9uDQo+IC0gKi8NCj4gLXN0 YXRpYyB2b2lkIGN2bXhfdXNiX3N0YXJ0X2NoYW5uZWxfY29udHJvbChzdHJ1Y3Qgb2N0ZW9uX2hj ZCAqdXNiLA0KPiAtCQkJCQkgICBpbnQgY2hhbm5lbCwNCj4gLQkJCQkJICAgc3RydWN0IGN2bXhf dXNiX3BpcGUgKnBpcGUpDQo+IC17DQo+IC0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IG9jdGVvbl90 b19oY2QodXNiKTsNCj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoY2QtPnNlbGYuY29udHJvbGxl cjsNCj4gLQlzdHJ1Y3QgY3ZteF91c2JfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uID0NCj4gLQkJ bGlzdF9maXJzdF9lbnRyeSgmcGlwZS0+dHJhbnNhY3Rpb25zLCB0eXBlb2YoKnRyYW5zYWN0aW9u KSwNCj4gLQkJCQkgbm9kZSk7DQo+IC0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqaGVhZGVyID0N Cj4gLQkJY3ZteF9waHlzX3RvX3B0cih0cmFuc2FjdGlvbi0+Y29udHJvbF9oZWFkZXIpOw0KPiAt CWludCBieXRlc190b190cmFuc2ZlciA9IHRyYW5zYWN0aW9uLT5idWZmZXJfbGVuZ3RoIC0NCj4g LQkJdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlczsNCj4gLQlpbnQgcGFja2V0c190b190cmFuc2Zl cjsNCj4gLQl1bmlvbiBjdm14X3VzYmN4X2hjdHNpenggdXNiY19oY3RzaXo7DQo+IC0NCj4gLQl1 c2JjX2hjdHNpei51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQlDVk1YX1VT QkNYX0hDVFNJWlgoY2hhbm5lbCwgdXNiLT5pbmRleCkpOw0KPiAtDQo+IC0Jc3dpdGNoICh0cmFu c2FjdGlvbi0+c3RhZ2UpIHsNCj4gLQljYXNlIENWTVhfVVNCX1NUQUdFX05PTl9DT05UUk9MOg0K PiAtCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfTk9OX0NPTlRST0xfU1BMSVRfQ09NUExFVEU6DQo+IC0J CWRldl9lcnIoZGV2LCAiJXM6IEVSUk9SIC0gTm9uIGNvbnRyb2wgc3RhZ2VcbiIsIF9fZnVuY19f KTsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBDVk1YX1VTQl9TVEFHRV9TRVRVUDoNCj4gLQkJdXNi Y19oY3RzaXoucy5waWQgPSAzOyAvKiBTZXR1cCAqLw0KPiAtCQlieXRlc190b190cmFuc2ZlciA9 IHNpemVvZigqaGVhZGVyKTsNCj4gLQkJLyogQWxsIENvbnRyb2wgb3BlcmF0aW9ucyBzdGFydCB3 aXRoIGEgc2V0dXAgZ29pbmcgT1VUICovDQo+IC0JCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNY X0hDQ0hBUlgoY2hhbm5lbCwgdXNiLT5pbmRleCksDQo+IC0JCQkJY3ZteF91c2JjeF9oY2NoYXJ4 LCBlcGRpciwNCj4gLQkJCQlDVk1YX1VTQl9ESVJFQ1RJT05fT1VUKTsNCj4gLQkJLyoNCj4gLQkJ ICogU2V0dXAgc2VuZCB0aGUgY29udHJvbCBoZWFkZXIgaW5zdGVhZCBvZiB0aGUgYnVmZmVyIGRh dGEuIFRoZQ0KPiAtCQkgKiBidWZmZXIgZGF0YSB3aWxsIGJlIHVzZWQgaW4gdGhlIG5leHQgc3Rh Z2UNCj4gLQkJICovDQo+IC0JCWN2bXhfd3JpdGU2NF91aW50NjQoQ1ZNWF9VU0JOWF9ETUEwX09V VEJfQ0hOMCh1c2ItPmluZGV4KSArDQo+IC0JCQkJCWNoYW5uZWwgKiA4LA0KPiAtCQkJCSAgICB0 cmFuc2FjdGlvbi0+Y29udHJvbF9oZWFkZXIpOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIENWTVhf VVNCX1NUQUdFX1NFVFVQX1NQTElUX0NPTVBMRVRFOg0KPiAtCQl1c2JjX2hjdHNpei5zLnBpZCA9 IDM7IC8qIFNldHVwICovDQo+IC0JCWJ5dGVzX3RvX3RyYW5zZmVyID0gMDsNCj4gLQkJLyogQWxs IENvbnRyb2wgb3BlcmF0aW9ucyBzdGFydCB3aXRoIGEgc2V0dXAgZ29pbmcgT1VUICovDQo+IC0J CVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0hDQ0hBUlgoY2hhbm5lbCwgdXNiLT5pbmRleCks DQo+IC0JCQkJY3ZteF91c2JjeF9oY2NoYXJ4LCBlcGRpciwNCj4gLQkJCQlDVk1YX1VTQl9ESVJF Q1RJT05fT1VUKTsNCj4gLQ0KPiAtCQlVU0JfU0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9IQ1NQTFRY KGNoYW5uZWwsIHVzYi0+aW5kZXgpLA0KPiAtCQkJCWN2bXhfdXNiY3hfaGNzcGx0eCwgY29tcHNw bHQsIDEpOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIENWTVhfVVNCX1NUQUdFX0RBVEE6DQo+IC0J CXVzYmNfaGN0c2l6LnMucGlkID0gY3ZteF91c2JfZ2V0X2RhdGFfcGlkKHBpcGUpOw0KPiAtCQlp ZiAoY3ZteF91c2JfcGlwZV9uZWVkc19zcGxpdCh1c2IsIHBpcGUpKSB7DQo+IC0JCQlpZiAoaGVh ZGVyLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKQ0KPiAtCQkJCWJ5dGVzX3RvX3RyYW5zZmVy ID0gMDsNCj4gLQkJCWVsc2UgaWYgKGJ5dGVzX3RvX3RyYW5zZmVyID4gcGlwZS0+bWF4X3BhY2tl dCkNCj4gLQkJCQlieXRlc190b190cmFuc2ZlciA9IHBpcGUtPm1heF9wYWNrZXQ7DQo+IC0JCX0N Cj4gLQkJVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLCB1c2ItPmlu ZGV4KSwNCj4gLQkJCQljdm14X3VzYmN4X2hjY2hhcngsIGVwZGlyLA0KPiAtCQkJCSgoaGVhZGVy LT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSA/DQo+IC0JCQkJCUNWTVhfVVNCX0RJUkVDVElP Tl9JTiA6DQo+IC0JCQkJCUNWTVhfVVNCX0RJUkVDVElPTl9PVVQpKTsNCj4gLQkJYnJlYWs7DQo+ IC0JY2FzZSBDVk1YX1VTQl9TVEFHRV9EQVRBX1NQTElUX0NPTVBMRVRFOg0KPiAtCQl1c2JjX2hj dHNpei5zLnBpZCA9IGN2bXhfdXNiX2dldF9kYXRhX3BpZChwaXBlKTsNCj4gLQkJaWYgKCEoaGVh ZGVyLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSkNCj4gLQkJCWJ5dGVzX3RvX3RyYW5zZmVy ID0gMDsNCj4gLQkJVVNCX1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLCB1 c2ItPmluZGV4KSwNCj4gLQkJCQljdm14X3VzYmN4X2hjY2hhcngsIGVwZGlyLA0KPiAtCQkJCSgo aGVhZGVyLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSA/DQo+IC0JCQkJCUNWTVhfVVNCX0RJ UkVDVElPTl9JTiA6DQo+IC0JCQkJCUNWTVhfVVNCX0RJUkVDVElPTl9PVVQpKTsNCj4gLQkJVVNC X1NFVF9GSUVMRDMyKENWTVhfVVNCQ1hfSENTUExUWChjaGFubmVsLCB1c2ItPmluZGV4KSwNCj4g LQkJCQljdm14X3VzYmN4X2hjc3BsdHgsIGNvbXBzcGx0LCAxKTsNCj4gLQkJYnJlYWs7DQo+IC0J Y2FzZSBDVk1YX1VTQl9TVEFHRV9TVEFUVVM6DQo+IC0JCXVzYmNfaGN0c2l6LnMucGlkID0gY3Zt eF91c2JfZ2V0X2RhdGFfcGlkKHBpcGUpOw0KPiAtCQlieXRlc190b190cmFuc2ZlciA9IDA7DQo+ IC0JCVVTQl9TRVRfRklFTEQzMihDVk1YX1VTQkNYX0hDQ0hBUlgoY2hhbm5lbCwgdXNiLT5pbmRl eCksDQo+IC0JCQkJY3ZteF91c2JjeF9oY2NoYXJ4LCBlcGRpciwNCj4gLQkJCQkoKGhlYWRlci0+ YlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikgPw0KPiAtCQkJCQlDVk1YX1VTQl9ESVJFQ1RJT05f T1VUIDoNCj4gLQkJCQkJQ1ZNWF9VU0JfRElSRUNUSU9OX0lOKSk7DQo+IC0JCWJyZWFrOw0KPiAt CWNhc2UgQ1ZNWF9VU0JfU1RBR0VfU1RBVFVTX1NQTElUX0NPTVBMRVRFOg0KPiAtCQl1c2JjX2hj dHNpei5zLnBpZCA9IGN2bXhfdXNiX2dldF9kYXRhX3BpZChwaXBlKTsNCj4gLQkJYnl0ZXNfdG9f dHJhbnNmZXIgPSAwOw0KPiAtCQlVU0JfU0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9IQ0NIQVJYKGNo YW5uZWwsIHVzYi0+aW5kZXgpLA0KPiAtCQkJCWN2bXhfdXNiY3hfaGNjaGFyeCwgZXBkaXIsDQo+ IC0JCQkJKChoZWFkZXItPmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pID8NCj4gLQkJCQkJQ1ZN WF9VU0JfRElSRUNUSU9OX09VVCA6DQo+IC0JCQkJCUNWTVhfVVNCX0RJUkVDVElPTl9JTikpOw0K PiAtCQlVU0JfU0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9IQ1NQTFRYKGNoYW5uZWwsIHVzYi0+aW5k ZXgpLA0KPiAtCQkJCWN2bXhfdXNiY3hfaGNzcGx0eCwgY29tcHNwbHQsIDEpOw0KPiAtCQlicmVh azsNCj4gLQl9DQo+IC0NCj4gLQkvKg0KPiAtCSAqIE1ha2Ugc3VyZSB0aGUgdHJhbnNmZXIgbmV2 ZXIgZXhjZWVkcyB0aGUgYnl0ZSBsaW1pdCBvZiB0aGUgaGFyZHdhcmUuDQo+IC0JICogRnVydGhl ciBieXRlcyB3aWxsIGJlIHNlbnQgYXMgY29udGludWVkIHRyYW5zYWN0aW9ucw0KPiAtCSAqLw0K PiAtCWlmIChieXRlc190b190cmFuc2ZlciA+IE1BWF9UUkFOU0ZFUl9CWVRFUykgew0KPiAtCQkv KiBSb3VuZCBNQVhfVFJBTlNGRVJfQllURVMgdG8gYSBtdWx0aXBsZSBvZiBvdXQgcGFja2V0IHNp emUgKi8NCj4gLQkJYnl0ZXNfdG9fdHJhbnNmZXIgPSBNQVhfVFJBTlNGRVJfQllURVMgLyBwaXBl LT5tYXhfcGFja2V0Ow0KPiAtCQlieXRlc190b190cmFuc2ZlciAqPSBwaXBlLT5tYXhfcGFja2V0 Ow0KPiAtCX0NCj4gLQ0KPiAtCS8qDQo+IC0JICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcGFj a2V0cyB0byB0cmFuc2Zlci4gSWYgdGhlIGxlbmd0aCBpcyB6ZXJvDQo+IC0JICogd2Ugc3RpbGwg bmVlZCB0byB0cmFuc2ZlciBvbmUgcGFja2V0DQo+IC0JICovDQo+IC0JcGFja2V0c190b190cmFu c2ZlciA9IERJVl9ST1VORF9VUChieXRlc190b190cmFuc2ZlciwNCj4gLQkJCQkJICAgcGlwZS0+ bWF4X3BhY2tldCk7DQo+IC0JaWYgKHBhY2tldHNfdG9fdHJhbnNmZXIgPT0gMCkgew0KPiAtCQlw YWNrZXRzX3RvX3RyYW5zZmVyID0gMTsNCj4gLQl9IGVsc2UgaWYgKChwYWNrZXRzX3RvX3RyYW5z ZmVyID4gMSkgJiYNCj4gLQkJCSh1c2ItPmluaXRfZmxhZ3MgJiBDVk1YX1VTQl9JTklUSUFMSVpF X0ZMQUdTX05PX0RNQSkpIHsNCj4gLQkJLyoNCj4gLQkJICogTGltaXQgdG8gb25lIHBhY2tldCB3 aGVuIG5vdCB1c2luZyBETUEuIENoYW5uZWxzIG11c3QgYmUNCj4gLQkJICogcmVzdGFydGVkIGJl dHdlZW4gZXZlcnkgcGFja2V0IGZvciBJTiB0cmFuc2FjdGlvbnMsIHNvIHRoZXJlDQo+IC0JCSAq IGlzIG5vIHJlYXNvbiB0byBkbyBtdWx0aXBsZSBwYWNrZXRzIGluIGEgcm93DQo+IC0JCSAqLw0K PiAtCQlwYWNrZXRzX3RvX3RyYW5zZmVyID0gMTsNCj4gLQkJYnl0ZXNfdG9fdHJhbnNmZXIgPSBw YWNrZXRzX3RvX3RyYW5zZmVyICogcGlwZS0+bWF4X3BhY2tldDsNCj4gLQl9IGVsc2UgaWYgKHBh Y2tldHNfdG9fdHJhbnNmZXIgPiBNQVhfVFJBTlNGRVJfUEFDS0VUUykgew0KPiAtCQkvKg0KPiAt CQkgKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHBhY2tldCBhbmQgZGF0YSB0cmFuc2ZlcnJlZCB0byB3 aGF0IHRoZQ0KPiAtCQkgKiBoYXJkd2FyZSBjYW4gaGFuZGxlDQo+IC0JCSAqLw0KPiAtCQlwYWNr ZXRzX3RvX3RyYW5zZmVyID0gTUFYX1RSQU5TRkVSX1BBQ0tFVFM7DQo+IC0JCWJ5dGVzX3RvX3Ry YW5zZmVyID0gcGFja2V0c190b190cmFuc2ZlciAqIHBpcGUtPm1heF9wYWNrZXQ7DQo+IC0JfQ0K PiAtDQo+IC0JdXNiY19oY3RzaXoucy54ZmVyc2l6ZSA9IGJ5dGVzX3RvX3RyYW5zZmVyOw0KPiAt CXVzYmNfaGN0c2l6LnMucGt0Y250ID0gcGFja2V0c190b190cmFuc2ZlcjsNCj4gLQ0KPiAtCWN2 bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9IQ1RTSVpYKGNoYW5uZWwsIHVzYi0+ aW5kZXgpLA0KPiAtCQkJICAgICB1c2JjX2hjdHNpei51MzIpOw0KPiAtfQ0KPiAtDQo+IC0vKioN Cj4gLSAqIFN0YXJ0IGEgY2hhbm5lbCB0byBwZXJmb3JtIHRoZSBwaXBlJ3MgaGVhZCB0cmFuc2Fj dGlvbg0KPiAtICoNCj4gLSAqIEB1c2I6CSAgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkg Y3ZteF91c2JfaW5pdGlhbGl6ZSgpLg0KPiAtICogQGNoYW5uZWw6CSAgQ2hhbm5lbCB0byBzZXR1 cA0KPiAtICogQHBpcGU6CSAgUGlwZSB0byBzdGFydA0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCBj dm14X3VzYl9zdGFydF9jaGFubmVsKHN0cnVjdCBvY3Rlb25faGNkICp1c2IsIGludCBjaGFubmVs LA0KPiAtCQkJCSAgIHN0cnVjdCBjdm14X3VzYl9waXBlICpwaXBlKQ0KPiAtew0KPiAtCXN0cnVj dCBjdm14X3VzYl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24gPQ0KPiAtCQlsaXN0X2ZpcnN0X2Vu dHJ5KCZwaXBlLT50cmFuc2FjdGlvbnMsIHR5cGVvZigqdHJhbnNhY3Rpb24pLA0KPiAtCQkJCSBu b2RlKTsNCj4gLQ0KPiAtCS8qIE1ha2Ugc3VyZSBhbGwgd3JpdGVzIHRvIHRoZSBETUEgcmVnaW9u IGdldCBmbHVzaGVkICovDQo+IC0JQ1ZNWF9TWU5DVzsNCj4gLQ0KPiAtCS8qIEF0dGFjaCB0aGUg Y2hhbm5lbCB0byB0aGUgcGlwZSAqLw0KPiAtCXVzYi0+cGlwZV9mb3JfY2hhbm5lbFtjaGFubmVs XSA9IHBpcGU7DQo+IC0JcGlwZS0+Y2hhbm5lbCA9IGNoYW5uZWw7DQo+IC0JcGlwZS0+ZmxhZ3Mg fD0gQ1ZNWF9VU0JfUElQRV9GTEFHU19TQ0hFRFVMRUQ7DQo+IC0NCj4gLQkvKiBNYXJrIHRoaXMg Y2hhbm5lbCBhcyBpbiB1c2UgKi8NCj4gLQl1c2ItPmlkbGVfaGFyZHdhcmVfY2hhbm5lbHMgJj0g figxIDw8IGNoYW5uZWwpOw0KPiAtDQo+IC0JLyogRW5hYmxlIHRoZSBjaGFubmVsIGludGVycnVw dCBiaXRzICovDQo+IC0Jew0KPiAtCQl1bmlvbiBjdm14X3VzYmN4X2hjaW50eCB1c2JjX2hjaW50 Ow0KPiAtCQl1bmlvbiBjdm14X3VzYmN4X2hjaW50bXNreCB1c2JjX2hjaW50bXNrOw0KPiAtCQl1 bmlvbiBjdm14X3VzYmN4X2hhaW50bXNrIHVzYmNfaGFpbnRtc2s7DQo+IC0NCj4gLQkJLyogQ2xl YXIgYWxsIGNoYW5uZWwgc3RhdHVzIGJpdHMgKi8NCj4gLQkJdXNiY19oY2ludC51MzIgPSBjdm14 X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQkJQ1ZNWF9VU0JDWF9IQ0lOVFgoY2hhbm5lbCwg dXNiLT5pbmRleCkpOw0KPiAtDQo+IC0JCWN2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwNCj4gLQkJ CQkgICAgIENWTVhfVVNCQ1hfSENJTlRYKGNoYW5uZWwsIHVzYi0+aW5kZXgpLA0KPiAtCQkJCSAg ICAgdXNiY19oY2ludC51MzIpOw0KPiAtDQo+IC0JCXVzYmNfaGNpbnRtc2sudTMyID0gMDsNCj4g LQkJdXNiY19oY2ludG1zay5zLmNoaGx0ZG1zayA9IDE7DQo+IC0JCWlmICh1c2ItPmluaXRfZmxh Z3MgJiBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX05PX0RNQSkgew0KPiAtCQkJLyoNCj4gLQkJ CSAqIENoYW5uZWxzIG5lZWQgdGhlc2UgZXh0cmEgaW50ZXJydXB0cyB3aGVuIHdlIGFyZW4ndA0K PiAtCQkJICogaW4gRE1BIG1vZGUuDQo+IC0JCQkgKi8NCj4gLQkJCXVzYmNfaGNpbnRtc2sucy5k YXRhdGdsZXJybXNrID0gMTsNCj4gLQkJCXVzYmNfaGNpbnRtc2sucy5mcm1vdnJ1bm1zayA9IDE7 DQo+IC0JCQl1c2JjX2hjaW50bXNrLnMuYmJsZXJybXNrID0gMTsNCj4gLQkJCXVzYmNfaGNpbnRt c2sucy54YWN0ZXJybXNrID0gMTsNCj4gLQkJCWlmIChjdm14X3VzYl9waXBlX25lZWRzX3NwbGl0 KHVzYiwgcGlwZSkpIHsNCj4gLQkJCQkvKg0KPiAtCQkJCSAqIFNwbGl0cyBkb24ndCBnZW5lcmF0 ZSB4ZmVyY29tcGwsIHNvIHdlIG5lZWQNCj4gLQkJCQkgKiBBQ0sgYW5kIE5ZRVQuDQo+IC0JCQkJ ICovDQo+IC0JCQkJdXNiY19oY2ludG1zay5zLm55ZXRtc2sgPSAxOw0KPiAtCQkJCXVzYmNfaGNp bnRtc2sucy5hY2ttc2sgPSAxOw0KPiAtCQkJfQ0KPiAtCQkJdXNiY19oY2ludG1zay5zLm5ha21z ayA9IDE7DQo+IC0JCQl1c2JjX2hjaW50bXNrLnMuc3RhbGxtc2sgPSAxOw0KPiAtCQkJdXNiY19o Y2ludG1zay5zLnhmZXJjb21wbG1zayA9IDE7DQo+IC0JCX0NCj4gLQkJY3ZteF91c2Jfd3JpdGVf Y3NyMzIodXNiLA0KPiAtCQkJCSAgICAgQ1ZNWF9VU0JDWF9IQ0lOVE1TS1goY2hhbm5lbCwgdXNi LT5pbmRleCksDQo+IC0JCQkJICAgICB1c2JjX2hjaW50bXNrLnUzMik7DQo+IC0NCj4gLQkJLyog RW5hYmxlIHRoZSBjaGFubmVsIGludGVycnVwdCB0byBwcm9wYWdhdGUgKi8NCj4gLQkJdXNiY19o YWludG1zay51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQkJQ1ZNWF9VU0JD WF9IQUlOVE1TSyh1c2ItPmluZGV4KSk7DQo+IC0JCXVzYmNfaGFpbnRtc2sucy5oYWludG1zayB8 PSAxIDw8IGNoYW5uZWw7DQo+IC0JCWN2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwgQ1ZNWF9VU0JD WF9IQUlOVE1TSyh1c2ItPmluZGV4KSwNCj4gLQkJCQkgICAgIHVzYmNfaGFpbnRtc2sudTMyKTsN Cj4gLQl9DQo+IC0NCj4gLQkvKiBTZXR1cCB0aGUgbG9jYXRpb24gdGhlIERNQSBlbmdpbmUgdXNl cy4gKi8NCj4gLQl7DQo+IC0JCXU2NCByZWc7DQo+IC0JCXU2NCBkbWFfYWRkcmVzcyA9IHRyYW5z YWN0aW9uLT5idWZmZXIgKw0KPiAtCQkJCSAgdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlczsNCj4g LQ0KPiAtCQlpZiAodHJhbnNhY3Rpb24tPnR5cGUgPT0gQ1ZNWF9VU0JfVFJBTlNGRVJfSVNPQ0hS T05PVVMpDQo+IC0JCQlkbWFfYWRkcmVzcyA9IHRyYW5zYWN0aW9uLT5idWZmZXIgKw0KPiAtCQkJ CQl0cmFuc2FjdGlvbi0+aXNvX3BhY2tldHNbMF0ub2Zmc2V0ICsNCj4gLQkJCQkJdHJhbnNhY3Rp b24tPmFjdHVhbF9ieXRlczsNCj4gLQ0KPiAtCQlpZiAocGlwZS0+dHJhbnNmZXJfZGlyID09IENW TVhfVVNCX0RJUkVDVElPTl9PVVQpDQo+IC0JCQlyZWcgPSBDVk1YX1VTQk5YX0RNQTBfT1VUQl9D SE4wKHVzYi0+aW5kZXgpOw0KPiAtCQllbHNlDQo+IC0JCQlyZWcgPSBDVk1YX1VTQk5YX0RNQTBf SU5CX0NITjAodXNiLT5pbmRleCk7DQo+IC0JCWN2bXhfd3JpdGU2NF91aW50NjQocmVnICsgY2hh bm5lbCAqIDgsIGRtYV9hZGRyZXNzKTsNCj4gLQl9DQo+IC0NCj4gLQkvKiBTZXR1cCBib3RoIHRo ZSBzaXplIG9mIHRoZSB0cmFuc2ZlciBhbmQgdGhlIFNQTElUIGNoYXJhY3RlcmlzdGljcyAqLw0K PiAtCXsNCj4gLQkJdW5pb24gY3ZteF91c2JjeF9oY3NwbHR4IHVzYmNfaGNzcGx0ID0gey51MzIg PSAwfTsNCj4gLQkJdW5pb24gY3ZteF91c2JjeF9oY3RzaXp4IHVzYmNfaGN0c2l6ID0gey51MzIg PSAwfTsNCj4gLQkJaW50IHBhY2tldHNfdG9fdHJhbnNmZXI7DQo+IC0JCWludCBieXRlc190b190 cmFuc2ZlciA9IHRyYW5zYWN0aW9uLT5idWZmZXJfbGVuZ3RoIC0NCj4gLQkJCXRyYW5zYWN0aW9u LT5hY3R1YWxfYnl0ZXM7DQo+IC0NCj4gLQkJLyoNCj4gLQkJICogSVNPQ0hST05PVVMgdHJhbnNh Y3Rpb25zIHN0b3JlIGVhY2ggaW5kaXZpZHVhbCB0cmFuc2ZlciBzaXplDQo+IC0JCSAqIGluIHRo ZSBwYWNrZXQgc3RydWN0dXJlLCBub3QgdGhlIGdsb2JhbCBidWZmZXJfbGVuZ3RoDQo+IC0JCSAq Lw0KPiAtCQlpZiAodHJhbnNhY3Rpb24tPnR5cGUgPT0gQ1ZNWF9VU0JfVFJBTlNGRVJfSVNPQ0hS T05PVVMpDQo+IC0JCQlieXRlc190b190cmFuc2ZlciA9DQo+IC0JCQkJdHJhbnNhY3Rpb24tPmlz b19wYWNrZXRzWzBdLmxlbmd0aCAtDQo+IC0JCQkJdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlczsN Cj4gLQ0KPiAtCQkvKg0KPiAtCQkgKiBXZSBuZWVkIHRvIGRvIHNwbGl0IHRyYW5zYWN0aW9ucyB3 aGVuIHdlIGFyZSB0YWxraW5nIHRvIG5vbg0KPiAtCQkgKiBoaWdoIHNwZWVkIGRldmljZXMgdGhh dCBhcmUgYmVoaW5kIGEgaGlnaCBzcGVlZCBodWINCj4gLQkJICovDQo+IC0JCWlmIChjdm14X3Vz Yl9waXBlX25lZWRzX3NwbGl0KHVzYiwgcGlwZSkpIHsNCj4gLQkJCS8qDQo+IC0JCQkgKiBPbiB0 aGUgc3RhcnQgc3BsaXQgcGhhc2UgKHN0YWdlIGlzIGV2ZW4pIHJlY29yZCB0aGUNCj4gLQkJCSAq IGZyYW1lIG51bWJlciB3ZSB3aWxsIG5lZWQgdG8gc2VuZCB0aGUgc3BsaXQgY29tcGxldGUuDQo+ IC0JCQkgKiBXZSBvbmx5IHN0b3JlIHRoZSBsb3dlciB0d28gYml0cyBzaW5jZSB0aGUgdGltZSBh aGVhZA0KPiAtCQkJICogY2FuIG9ubHkgYmUgdHdvIGZyYW1lcw0KPiAtCQkJICovDQo+IC0JCQlp ZiAoKHRyYW5zYWN0aW9uLT5zdGFnZSAmIDEpID09IDApIHsNCj4gLQkJCQlpZiAodHJhbnNhY3Rp b24tPnR5cGUgPT0gQ1ZNWF9VU0JfVFJBTlNGRVJfQlVMSykNCj4gLQkJCQkJcGlwZS0+c3BsaXRf c2NfZnJhbWUgPQ0KPiAtCQkJCQkJKHVzYi0+ZnJhbWVfbnVtYmVyICsgMSkgJiAweDdmOw0KPiAt CQkJCWVsc2UNCj4gLQkJCQkJcGlwZS0+c3BsaXRfc2NfZnJhbWUgPQ0KPiAtCQkJCQkJKHVzYi0+ ZnJhbWVfbnVtYmVyICsgMikgJiAweDdmOw0KPiAtCQkJfSBlbHNlIHsNCj4gLQkJCQlwaXBlLT5z cGxpdF9zY19mcmFtZSA9IC0xOw0KPiAtCQkJfQ0KPiAtDQo+IC0JCQl1c2JjX2hjc3BsdC5zLnNw bHRlbmEgPSAxOw0KPiAtCQkJdXNiY19oY3NwbHQucy5odWJhZGRyID0gcGlwZS0+aHViX2Rldmlj ZV9hZGRyOw0KPiAtCQkJdXNiY19oY3NwbHQucy5wcnRhZGRyID0gcGlwZS0+aHViX3BvcnQ7DQo+ IC0JCQl1c2JjX2hjc3BsdC5zLmNvbXBzcGx0ID0gKHRyYW5zYWN0aW9uLT5zdGFnZSA9PQ0KPiAt CQkJCUNWTVhfVVNCX1NUQUdFX05PTl9DT05UUk9MX1NQTElUX0NPTVBMRVRFKTsNCj4gLQ0KPiAt CQkJLyoNCj4gLQkJCSAqIFNQTElUIHRyYW5zYWN0aW9ucyBjYW4gb25seSBldmVyIHRyYW5zbWl0 IG9uZSBkYXRhDQo+IC0JCQkgKiBwYWNrZXQgc28gbGltaXQgdGhlIHRyYW5zZmVyIHNpemUgdG8g dGhlIG1heCBwYWNrZXQNCj4gLQkJCSAqIHNpemUNCj4gLQkJCSAqLw0KPiAtCQkJaWYgKGJ5dGVz X3RvX3RyYW5zZmVyID4gcGlwZS0+bWF4X3BhY2tldCkNCj4gLQkJCQlieXRlc190b190cmFuc2Zl ciA9IHBpcGUtPm1heF9wYWNrZXQ7DQo+IC0NCj4gLQkJCS8qDQo+IC0JCQkgKiBJU09DSFJPTk9V UyBPVVQgc3BsaXRzIGFyZSB1bmlxdWUgaW4gdGhhdCB0aGV5IGxpbWl0DQo+IC0JCQkgKiBkYXRh IHRyYW5zZmVycyB0byAxODggYnl0ZSBjaHVua3MgcmVwcmVzZW50aW5nIHRoZQ0KPiAtCQkJICog YmVnaW4vbWlkZGxlL2VuZCBvZiB0aGUgZGF0YSBvciBhbGwNCj4gLQkJCSAqLw0KPiAtCQkJaWYg KCF1c2JjX2hjc3BsdC5zLmNvbXBzcGx0ICYmDQo+IC0JCQkgICAgKHBpcGUtPnRyYW5zZmVyX2Rp ciA9PSBDVk1YX1VTQl9ESVJFQ1RJT05fT1VUKSAmJg0KPiAtCQkJICAgIChwaXBlLT50cmFuc2Zl cl90eXBlID09DQo+IC0JCQkgICAgIENWTVhfVVNCX1RSQU5TRkVSX0lTT0NIUk9OT1VTKSkgew0K PiAtCQkJCS8qDQo+IC0JCQkJICogQ2xlYXIgdGhlIHNwbGl0IGNvbXBsZXRlIGZyYW1lIG51bWJl ciBhcw0KPiAtCQkJCSAqIHRoZXJlIGlzbid0IGdvaW5nIHRvIGJlIGEgc3BsaXQgY29tcGxldGUN Cj4gLQkJCQkgKi8NCj4gLQkJCQlwaXBlLT5zcGxpdF9zY19mcmFtZSA9IC0xOw0KPiAtCQkJCS8q DQo+IC0JCQkJICogU2VlIGlmIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyB0cmFuc2ZlciBhbmQgc2VudA0K PiAtCQkJCSAqIGRhdGENCj4gLQkJCQkgKi8NCj4gLQkJCQlpZiAodHJhbnNhY3Rpb24tPmFjdHVh bF9ieXRlcyA9PSAwKSB7DQo+IC0JCQkJCS8qDQo+IC0JCQkJCSAqIE5vdGhpbmcgc2VudCB5ZXQs IHRoaXMgaXMgZWl0aGVyIGENCj4gLQkJCQkJICogYmVnaW4gb3IgdGhlIGVudGlyZSBwYXlsb2Fk DQo+IC0JCQkJCSAqLw0KPiAtCQkJCQlpZiAoYnl0ZXNfdG9fdHJhbnNmZXIgPD0gMTg4KQ0KPiAt CQkJCQkJLyogRW50aXJlIHBheWxvYWQgaW4gb25lIGdvICovDQo+IC0JCQkJCQl1c2JjX2hjc3Bs dC5zLnhhY3Rwb3MgPSAzOw0KPiAtCQkJCQllbHNlDQo+IC0JCQkJCQkvKiBGaXJzdCBwYXJ0IG9m IHBheWxvYWQgKi8NCj4gLQkJCQkJCXVzYmNfaGNzcGx0LnMueGFjdHBvcyA9IDI7DQo+IC0JCQkJ fSBlbHNlIHsNCj4gLQkJCQkJLyoNCj4gLQkJCQkJICogQ29udGludWluZyB0aGUgcHJldmlvdXMg ZGF0YSwgd2UgbXVzdA0KPiAtCQkJCQkgKiBlaXRoZXIgYmUgaW4gdGhlIG1pZGRsZSBvciBhdCB0 aGUgZW5kDQo+IC0JCQkJCSAqLw0KPiAtCQkJCQlpZiAoYnl0ZXNfdG9fdHJhbnNmZXIgPD0gMTg4 KQ0KPiAtCQkJCQkJLyogRW5kIG9mIHBheWxvYWQgKi8NCj4gLQkJCQkJCXVzYmNfaGNzcGx0LnMu eGFjdHBvcyA9IDE7DQo+IC0JCQkJCWVsc2UNCj4gLQkJCQkJCS8qIE1pZGRsZSBvZiBwYXlsb2Fk ICovDQo+IC0JCQkJCQl1c2JjX2hjc3BsdC5zLnhhY3Rwb3MgPSAwOw0KPiAtCQkJCX0NCj4gLQkJ CQkvKg0KPiAtCQkJCSAqIEFnYWluLCB0aGUgdHJhbnNmZXIgc2l6ZSBpcyBsaW1pdGVkIHRvIDE4 OA0KPiAtCQkJCSAqIGJ5dGVzDQo+IC0JCQkJICovDQo+IC0JCQkJaWYgKGJ5dGVzX3RvX3RyYW5z ZmVyID4gMTg4KQ0KPiAtCQkJCQlieXRlc190b190cmFuc2ZlciA9IDE4ODsNCj4gLQkJCX0NCj4g LQkJfQ0KPiAtDQo+IC0JCS8qDQo+IC0JCSAqIE1ha2Ugc3VyZSB0aGUgdHJhbnNmZXIgbmV2ZXIg ZXhjZWVkcyB0aGUgYnl0ZSBsaW1pdCBvZiB0aGUNCj4gLQkJICogaGFyZHdhcmUuIEZ1cnRoZXIg Ynl0ZXMgd2lsbCBiZSBzZW50IGFzIGNvbnRpbnVlZA0KPiAtCQkgKiB0cmFuc2FjdGlvbnMNCj4g LQkJICovDQo+IC0JCWlmIChieXRlc190b190cmFuc2ZlciA+IE1BWF9UUkFOU0ZFUl9CWVRFUykg ew0KPiAtCQkJLyoNCj4gLQkJCSAqIFJvdW5kIE1BWF9UUkFOU0ZFUl9CWVRFUyB0byBhIG11bHRp cGxlIG9mIG91dCBwYWNrZXQNCj4gLQkJCSAqIHNpemUNCj4gLQkJCSAqLw0KPiAtCQkJYnl0ZXNf dG9fdHJhbnNmZXIgPSBNQVhfVFJBTlNGRVJfQllURVMgLw0KPiAtCQkJCXBpcGUtPm1heF9wYWNr ZXQ7DQo+IC0JCQlieXRlc190b190cmFuc2ZlciAqPSBwaXBlLT5tYXhfcGFja2V0Ow0KPiAtCQl9 DQo+IC0NCj4gLQkJLyoNCj4gLQkJICogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0 byB0cmFuc2Zlci4gSWYgdGhlIGxlbmd0aCBpcw0KPiAtCQkgKiB6ZXJvIHdlIHN0aWxsIG5lZWQg dG8gdHJhbnNmZXIgb25lIHBhY2tldA0KPiAtCQkgKi8NCj4gLQkJcGFja2V0c190b190cmFuc2Zl ciA9DQo+IC0JCQlESVZfUk9VTkRfVVAoYnl0ZXNfdG9fdHJhbnNmZXIsIHBpcGUtPm1heF9wYWNr ZXQpOw0KPiAtCQlpZiAocGFja2V0c190b190cmFuc2ZlciA9PSAwKSB7DQo+IC0JCQlwYWNrZXRz X3RvX3RyYW5zZmVyID0gMTsNCj4gLQkJfSBlbHNlIGlmICgocGFja2V0c190b190cmFuc2ZlciA+ IDEpICYmDQo+IC0JCQkgICAodXNiLT5pbml0X2ZsYWdzICYNCj4gLQkJCSAgICBDVk1YX1VTQl9J TklUSUFMSVpFX0ZMQUdTX05PX0RNQSkpIHsNCj4gLQkJCS8qDQo+IC0JCQkgKiBMaW1pdCB0byBv bmUgcGFja2V0IHdoZW4gbm90IHVzaW5nIERNQS4gQ2hhbm5lbHMgbXVzdA0KPiAtCQkJICogYmUg cmVzdGFydGVkIGJldHdlZW4gZXZlcnkgcGFja2V0IGZvciBJTg0KPiAtCQkJICogdHJhbnNhY3Rp b25zLCBzbyB0aGVyZSBpcyBubyByZWFzb24gdG8gZG8gbXVsdGlwbGUNCj4gLQkJCSAqIHBhY2tl dHMgaW4gYSByb3cNCj4gLQkJCSAqLw0KPiAtCQkJcGFja2V0c190b190cmFuc2ZlciA9IDE7DQo+ IC0JCQlieXRlc190b190cmFuc2ZlciA9IHBhY2tldHNfdG9fdHJhbnNmZXIgKg0KPiAtCQkJCXBp cGUtPm1heF9wYWNrZXQ7DQo+IC0JCX0gZWxzZSBpZiAocGFja2V0c190b190cmFuc2ZlciA+IE1B WF9UUkFOU0ZFUl9QQUNLRVRTKSB7DQo+IC0JCQkvKg0KPiAtCQkJICogTGltaXQgdGhlIG51bWJl ciBvZiBwYWNrZXQgYW5kIGRhdGEgdHJhbnNmZXJyZWQgdG8NCj4gLQkJCSAqIHdoYXQgdGhlIGhh cmR3YXJlIGNhbiBoYW5kbGUNCj4gLQkJCSAqLw0KPiAtCQkJcGFja2V0c190b190cmFuc2ZlciA9 IE1BWF9UUkFOU0ZFUl9QQUNLRVRTOw0KPiAtCQkJYnl0ZXNfdG9fdHJhbnNmZXIgPSBwYWNrZXRz X3RvX3RyYW5zZmVyICoNCj4gLQkJCQlwaXBlLT5tYXhfcGFja2V0Ow0KPiAtCQl9DQo+IC0NCj4g LQkJdXNiY19oY3RzaXoucy54ZmVyc2l6ZSA9IGJ5dGVzX3RvX3RyYW5zZmVyOw0KPiAtCQl1c2Jj X2hjdHNpei5zLnBrdGNudCA9IHBhY2tldHNfdG9fdHJhbnNmZXI7DQo+IC0NCj4gLQkJLyogVXBk YXRlIHRoZSBEQVRBMC9EQVRBMSB0b2dnbGUgKi8NCj4gLQkJdXNiY19oY3RzaXoucy5waWQgPSBj dm14X3VzYl9nZXRfZGF0YV9waWQocGlwZSk7DQo+IC0JCS8qDQo+IC0JCSAqIEhpZ2ggc3BlZWQg cGlwZXMgbWF5IG5lZWQgYSBoYXJkd2FyZSBwaW5nIGJlZm9yZSB0aGV5IHN0YXJ0DQo+IC0JCSAq Lw0KPiAtCQlpZiAocGlwZS0+ZmxhZ3MgJiBDVk1YX1VTQl9QSVBFX0ZMQUdTX05FRURfUElORykN Cj4gLQkJCXVzYmNfaGN0c2l6LnMuZG9wbmcgPSAxOw0KPiAtDQo+IC0JCWN2bXhfdXNiX3dyaXRl X2NzcjMyKHVzYiwNCj4gLQkJCQkgICAgIENWTVhfVVNCQ1hfSENTUExUWChjaGFubmVsLCB1c2It PmluZGV4KSwNCj4gLQkJCQkgICAgIHVzYmNfaGNzcGx0LnUzMik7DQo+IC0JCWN2bXhfdXNiX3dy aXRlX2NzcjMyKHVzYiwNCj4gLQkJCQkgICAgIENWTVhfVVNCQ1hfSENUU0laWChjaGFubmVsLCB1 c2ItPmluZGV4KSwNCj4gLQkJCQkgICAgIHVzYmNfaGN0c2l6LnUzMik7DQo+IC0JfQ0KPiAtDQo+ IC0JLyogU2V0dXAgdGhlIEhvc3QgQ2hhbm5lbCBDaGFyYWN0ZXJpc3RpY3MgUmVnaXN0ZXIgKi8N Cj4gLQl7DQo+IC0JCXVuaW9uIGN2bXhfdXNiY3hfaGNjaGFyeCB1c2JjX2hjY2hhciA9IHsudTMy ID0gMH07DQo+IC0NCj4gLQkJLyoNCj4gLQkJICogU2V0IHRoZSBzdGFydGZyYW1lIG9kZC9ldmVu IHByb3Blcmx5LiBUaGlzIGlzIG9ubHkgdXNlZCBmb3INCj4gLQkJICogcGVyaW9kaWMNCj4gLQkJ ICovDQo+IC0JCXVzYmNfaGNjaGFyLnMub2RkZnJtID0gdXNiLT5mcmFtZV9udW1iZXIgJiAxOw0K PiAtDQo+IC0JCS8qDQo+IC0JCSAqIFNldCB0aGUgbnVtYmVyIG9mIGJhY2sgdG8gYmFjayBwYWNr ZXRzIGFsbG93ZWQgYnkgdGhpcw0KPiAtCQkgKiBlbmRwb2ludC4gU3BsaXQgdHJhbnNhY3Rpb25z IGludGVycHJldCAiZWMiIGFzIHRoZSBudW1iZXIgb2YNCj4gLQkJICogaW1tZWRpYXRlIHJldHJp ZXMgb2YgZmFpbHVyZS4gVGhlc2UgcmV0cmllcyBoYXBwZW4gdG9vDQo+IC0JCSAqIHF1aWNrbHks IHNvIHdlIGRpc2FibGUgdGhlc2UgZW50aXJlbHkgZm9yIHNwbGl0cw0KPiAtCQkgKi8NCj4gLQkJ aWYgKGN2bXhfdXNiX3BpcGVfbmVlZHNfc3BsaXQodXNiLCBwaXBlKSkNCj4gLQkJCXVzYmNfaGNj aGFyLnMuZWMgPSAxOw0KPiAtCQllbHNlIGlmIChwaXBlLT5tdWx0aV9jb3VudCA8IDEpDQo+IC0J CQl1c2JjX2hjY2hhci5zLmVjID0gMTsNCj4gLQkJZWxzZSBpZiAocGlwZS0+bXVsdGlfY291bnQg PiAzKQ0KPiAtCQkJdXNiY19oY2NoYXIucy5lYyA9IDM7DQo+IC0JCWVsc2UNCj4gLQkJCXVzYmNf aGNjaGFyLnMuZWMgPSBwaXBlLT5tdWx0aV9jb3VudDsNCj4gLQ0KPiAtCQkvKiBTZXQgdGhlIHJl c3Qgb2YgdGhlIGVuZHBvaW50IHNwZWNpZmljIHNldHRpbmdzICovDQo+IC0JCXVzYmNfaGNjaGFy LnMuZGV2YWRkciA9IHBpcGUtPmRldmljZV9hZGRyOw0KPiAtCQl1c2JjX2hjY2hhci5zLmVwdHlw ZSA9IHRyYW5zYWN0aW9uLT50eXBlOw0KPiAtCQl1c2JjX2hjY2hhci5zLmxzcGRkZXYgPQ0KPiAt CQkJKHBpcGUtPmRldmljZV9zcGVlZCA9PSBDVk1YX1VTQl9TUEVFRF9MT1cpOw0KPiAtCQl1c2Jj X2hjY2hhci5zLmVwZGlyID0gcGlwZS0+dHJhbnNmZXJfZGlyOw0KPiAtCQl1c2JjX2hjY2hhci5z LmVwbnVtID0gcGlwZS0+ZW5kcG9pbnRfbnVtOw0KPiAtCQl1c2JjX2hjY2hhci5zLm1wcyA9IHBp cGUtPm1heF9wYWNrZXQ7DQo+IC0JCWN2bXhfdXNiX3dyaXRlX2NzcjMyKHVzYiwNCj4gLQkJCQkg ICAgIENWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLCB1c2ItPmluZGV4KSwNCj4gLQkJCQkgICAg IHVzYmNfaGNjaGFyLnUzMik7DQo+IC0JfQ0KPiAtDQo+IC0JLyogRG8gdHJhbnNhY3Rpb24gdHlw ZSBzcGVjaWZpYyBmaXh1cHMgYXMgbmVlZGVkICovDQo+IC0Jc3dpdGNoICh0cmFuc2FjdGlvbi0+ dHlwZSkgew0KPiAtCWNhc2UgQ1ZNWF9VU0JfVFJBTlNGRVJfQ09OVFJPTDoNCj4gLQkJY3ZteF91 c2Jfc3RhcnRfY2hhbm5lbF9jb250cm9sKHVzYiwgY2hhbm5lbCwgcGlwZSk7DQo+IC0JCWJyZWFr Ow0KPiAtCWNhc2UgQ1ZNWF9VU0JfVFJBTlNGRVJfQlVMSzoNCj4gLQljYXNlIENWTVhfVVNCX1RS QU5TRkVSX0lOVEVSUlVQVDoNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBDVk1YX1VTQl9UUkFOU0ZF Ul9JU09DSFJPTk9VUzoNCj4gLQkJaWYgKCFjdm14X3VzYl9waXBlX25lZWRzX3NwbGl0KHVzYiwg cGlwZSkpIHsNCj4gLQkJCS8qDQo+IC0JCQkgKiBJU08gdHJhbnNhY3Rpb25zIHJlcXVpcmUgZGlm ZmVyZW50IFBJRHMgZGVwZW5kaW5nIG9uDQo+IC0JCQkgKiBkaXJlY3Rpb24gYW5kIGhvdyBtYW55 IHBhY2tldHMgYXJlIG5lZWRlZA0KPiAtCQkJICovDQo+IC0JCQlpZiAocGlwZS0+dHJhbnNmZXJf ZGlyID09IENWTVhfVVNCX0RJUkVDVElPTl9PVVQpIHsNCj4gLQkJCQlpZiAocGlwZS0+bXVsdGlf Y291bnQgPCAyKSAvKiBOZWVkIERBVEEwICovDQo+IC0JCQkJCVVTQl9TRVRfRklFTEQzMigNCj4g LQkJCQkJCUNWTVhfVVNCQ1hfSENUU0laWChjaGFubmVsLA0KPiAtCQkJCQkJCQkgICB1c2ItPmlu ZGV4KSwNCj4gLQkJCQkJCWN2bXhfdXNiY3hfaGN0c2l6eCwgcGlkLCAwKTsNCj4gLQkJCQllbHNl IC8qIE5lZWQgTURBVEEgKi8NCj4gLQkJCQkJVVNCX1NFVF9GSUVMRDMyKA0KPiAtCQkJCQkJQ1ZN WF9VU0JDWF9IQ1RTSVpYKGNoYW5uZWwsDQo+IC0JCQkJCQkJCSAgIHVzYi0+aW5kZXgpLA0KPiAt CQkJCQkJY3ZteF91c2JjeF9oY3RzaXp4LCBwaWQsIDMpOw0KPiAtCQkJfQ0KPiAtCQl9DQo+IC0J CWJyZWFrOw0KPiAtCX0NCj4gLQl7DQo+IC0JCXVuaW9uIGN2bXhfdXNiY3hfaGN0c2l6eCB1c2Jj X2hjdHNpeiA9IHsgLnUzMiA9DQo+IC0JCQljdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJ CQkJICAgIENWTVhfVVNCQ1hfSENUU0laWChjaGFubmVsLA0KPiAtCQkJCQkJCSAgICAgICB1c2It PmluZGV4KSkNCj4gLQkJfTsNCj4gLQkJdHJhbnNhY3Rpb24tPnhmZXJzaXplID0gdXNiY19oY3Rz aXoucy54ZmVyc2l6ZTsNCj4gLQkJdHJhbnNhY3Rpb24tPnBrdGNudCA9IHVzYmNfaGN0c2l6LnMu cGt0Y250Ow0KPiAtCX0NCj4gLQkvKiBSZW1lbWJlciB3aGVuIHdlIHN0YXJ0IGEgc3BsaXQgdHJh bnNhY3Rpb24gKi8NCj4gLQlpZiAoY3ZteF91c2JfcGlwZV9uZWVkc19zcGxpdCh1c2IsIHBpcGUp KQ0KPiAtCQl1c2ItPmFjdGl2ZV9zcGxpdCA9IHRyYW5zYWN0aW9uOw0KPiAtCVVTQl9TRVRfRklF TEQzMihDVk1YX1VTQkNYX0hDQ0hBUlgoY2hhbm5lbCwgdXNiLT5pbmRleCksDQo+IC0JCQljdm14 X3VzYmN4X2hjY2hhcngsIGNoZW5hLCAxKTsNCj4gLQlpZiAodXNiLT5pbml0X2ZsYWdzICYgQ1ZN WF9VU0JfSU5JVElBTElaRV9GTEFHU19OT19ETUEpDQo+IC0JCWN2bXhfdXNiX2ZpbGxfdHhfZmlm byh1c2IsIGNoYW5uZWwpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIEZpbmQgYSBwaXBlIHRo YXQgaXMgcmVhZHkgdG8gYmUgc2NoZWR1bGVkIHRvIGhhcmR3YXJlLg0KPiAtICogQHVzYjoJIFVT QiBkZXZpY2Ugc3RhdGUgcG9wdWxhdGVkIGJ5IGN2bXhfdXNiX2luaXRpYWxpemUoKS4NCj4gLSAq IEB4ZmVyX3R5cGU6CSBUcmFuc2ZlciB0eXBlDQo+IC0gKg0KPiAtICogUmV0dXJuczogUGlwZSBv ciBOVUxMIGlmIG5vbmUgYXJlIHJlYWR5DQo+IC0gKi8NCj4gLXN0YXRpYyBzdHJ1Y3QgY3ZteF91 c2JfcGlwZSAqY3ZteF91c2JfZmluZF9yZWFkeV9waXBlKHN0cnVjdCBvY3Rlb25faGNkICp1c2Is DQo+IC0JCWVudW0gY3ZteF91c2JfdHJhbnNmZXIgeGZlcl90eXBlKQ0KPiAtew0KPiAtCXN0cnVj dCBsaXN0X2hlYWQgKmxpc3QgPSB1c2ItPmFjdGl2ZV9waXBlcyArIHhmZXJfdHlwZTsNCj4gLQl1 NjQgY3VycmVudF9mcmFtZSA9IHVzYi0+ZnJhbWVfbnVtYmVyOw0KPiAtCXN0cnVjdCBjdm14X3Vz Yl9waXBlICpwaXBlOw0KPiAtDQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShwaXBlLCBsaXN0LCBu b2RlKSB7DQo+IC0JCXN0cnVjdCBjdm14X3VzYl90cmFuc2FjdGlvbiAqdCA9DQo+IC0JCQlsaXN0 X2ZpcnN0X2VudHJ5KCZwaXBlLT50cmFuc2FjdGlvbnMsIHR5cGVvZigqdCksDQo+IC0JCQkJCSBu b2RlKTsNCj4gLQkJaWYgKCEocGlwZS0+ZmxhZ3MgJiBDVk1YX1VTQl9QSVBFX0ZMQUdTX1NDSEVE VUxFRCkgJiYgdCAmJg0KPiAtCQkgICAgKHBpcGUtPm5leHRfdHhfZnJhbWUgPD0gY3VycmVudF9m cmFtZSkgJiYNCj4gLQkJICAgICgocGlwZS0+c3BsaXRfc2NfZnJhbWUgPT0gLTEpIHx8DQo+IC0J CSAgICAgKCgoKGludCljdXJyZW50X2ZyYW1lIC0gcGlwZS0+c3BsaXRfc2NfZnJhbWUpICYgMHg3 ZikgPA0KPiAtCQkgICAgICAweDQwKSkgJiYNCj4gLQkJICAgICghdXNiLT5hY3RpdmVfc3BsaXQg fHwgKHVzYi0+YWN0aXZlX3NwbGl0ID09IHQpKSkgew0KPiAtCQkJcHJlZmV0Y2godCk7DQo+IC0J CQlyZXR1cm4gcGlwZTsNCj4gLQkJfQ0KPiAtCX0NCj4gLQlyZXR1cm4gTlVMTDsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIHN0cnVjdCBjdm14X3VzYl9waXBlICpjdm14X3VzYl9uZXh0X3BpcGUoc3Ry dWN0IG9jdGVvbl9oY2QgKnVzYiwNCj4gLQkJCQkJCWludCBpc19zb2YpDQo+IC17DQo+IC0Jc3Ry dWN0IGN2bXhfdXNiX3BpcGUgKnBpcGU7DQo+IC0NCj4gLQkvKiBGaW5kIGEgcGlwZSBuZWVkaW5n IHNlcnZpY2UuICovDQo+IC0JaWYgKGlzX3NvZikgew0KPiAtCQkvKg0KPiAtCQkgKiBPbmx5IHBy b2Nlc3MgcGVyaW9kaWMgcGlwZXMgb24gU09GIGludGVycnVwdHMuIFRoaXMgd2F5IHdlDQo+IC0J CSAqIGFyZSBzdXJlIHRoYXQgdGhlIHBlcmlvZGljIGRhdGEgaXMgc2VudCBpbiB0aGUgYmVnaW5u aW5nIG9mDQo+IC0JCSAqIHRoZSBmcmFtZS4NCj4gLQkJICovDQo+IC0JCXBpcGUgPSBjdm14X3Vz Yl9maW5kX3JlYWR5X3BpcGUodXNiLA0KPiAtCQkJCQkJQ1ZNWF9VU0JfVFJBTlNGRVJfSVNPQ0hS T05PVVMpOw0KPiAtCQlpZiAocGlwZSkNCj4gLQkJCXJldHVybiBwaXBlOw0KPiAtCQlwaXBlID0g Y3ZteF91c2JfZmluZF9yZWFkeV9waXBlKHVzYiwNCj4gLQkJCQkJCUNWTVhfVVNCX1RSQU5TRkVS X0lOVEVSUlVQVCk7DQo+IC0JCWlmIChwaXBlKQ0KPiAtCQkJcmV0dXJuIHBpcGU7DQo+IC0JfQ0K PiAtCXBpcGUgPSBjdm14X3VzYl9maW5kX3JlYWR5X3BpcGUodXNiLCBDVk1YX1VTQl9UUkFOU0ZF Ul9DT05UUk9MKTsNCj4gLQlpZiAocGlwZSkNCj4gLQkJcmV0dXJuIHBpcGU7DQo+IC0JcmV0dXJu IGN2bXhfdXNiX2ZpbmRfcmVhZHlfcGlwZSh1c2IsIENWTVhfVVNCX1RSQU5TRkVSX0JVTEspOw0K PiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIENhbGxlZCB3aGVuZXZlciBhIHBpcGUgbWlnaHQgbmVl ZCB0byBiZSBzY2hlZHVsZWQgdG8gdGhlDQo+IC0gKiBoYXJkd2FyZS4NCj4gLSAqDQo+IC0gKiBA dXNiOgkgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5pdGlhbGl6ZSgp Lg0KPiAtICogQGlzX3NvZjoJIFRydWUgaWYgdGhpcyBzY2hlZHVsZSB3YXMgY2FsbGVkIG9uIGEg U09GIGludGVycnVwdC4NCj4gLSAqLw0KPiAtc3RhdGljIHZvaWQgY3ZteF91c2Jfc2NoZWR1bGUo c3RydWN0IG9jdGVvbl9oY2QgKnVzYiwgaW50IGlzX3NvZikNCj4gLXsNCj4gLQlpbnQgY2hhbm5l bDsNCj4gLQlzdHJ1Y3QgY3ZteF91c2JfcGlwZSAqcGlwZTsNCj4gLQlpbnQgbmVlZF9zb2Y7DQo+ IC0JZW51bSBjdm14X3VzYl90cmFuc2ZlciB0dHlwZTsNCj4gLQ0KPiAtCWlmICh1c2ItPmluaXRf ZmxhZ3MgJiBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX05PX0RNQSkgew0KPiAtCQkvKg0KPiAt CQkgKiBXaXRob3V0IERNQSB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgdG8gbm90IHNjaGVkdWxlIHNv bWV0aGluZw0KPiAtCQkgKiBhdCB0aGUgZW5kIG9mIGEgZnJhbWUgYW5kIGNhdXNlIGFuIG92ZXJy dW4uDQo+IC0JCSAqLw0KPiAtCQl1bmlvbiBjdm14X3VzYmN4X2hmbnVtIGhmbnVtID0gew0KPiAt CQkJLnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCQkJQ1ZNWF9VU0JDWF9I Rk5VTSh1c2ItPmluZGV4KSkNCj4gLQkJfTsNCj4gLQ0KPiAtCQl1bmlvbiBjdm14X3VzYmN4X2hm aXIgaGZpciA9IHsNCj4gLQkJCS51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJ CQkJCUNWTVhfVVNCQ1hfSEZJUih1c2ItPmluZGV4KSkNCj4gLQkJfTsNCj4gLQ0KPiAtCQlpZiAo aGZudW0ucy5mcnJlbSA8IGhmaXIucy5mcmludCAvIDQpDQo+IC0JCQlnb3RvIGRvbmU7DQo+IC0J fQ0KPiAtDQo+IC0Jd2hpbGUgKHVzYi0+aWRsZV9oYXJkd2FyZV9jaGFubmVscykgew0KPiAtCQkv KiBGaW5kIGFuIGlkbGUgY2hhbm5lbCAqLw0KPiAtCQljaGFubmVsID0gX19mbHModXNiLT5pZGxl X2hhcmR3YXJlX2NoYW5uZWxzKTsNCj4gLQkJaWYgKHVubGlrZWx5KGNoYW5uZWwgPiA3KSkNCj4g LQkJCWJyZWFrOw0KPiAtDQo+IC0JCXBpcGUgPSBjdm14X3VzYl9uZXh0X3BpcGUodXNiLCBpc19z b2YpOw0KPiAtCQlpZiAoIXBpcGUpDQo+IC0JCQlicmVhazsNCj4gLQ0KPiAtCQljdm14X3VzYl9z dGFydF9jaGFubmVsKHVzYiwgY2hhbm5lbCwgcGlwZSk7DQo+IC0JfQ0KPiAtDQo+IC1kb25lOg0K PiAtCS8qDQo+IC0JICogT25seSBlbmFibGUgU09GIGludGVycnVwdHMgd2hlbiB3ZSBoYXZlIHRy YW5zYWN0aW9ucyBwZW5kaW5nIGluIHRoZQ0KPiAtCSAqIGZ1dHVyZSB0aGF0IG1pZ2h0IG5lZWQg dG8gYmUgc2NoZWR1bGVkDQo+IC0JICovDQo+IC0JbmVlZF9zb2YgPSAwOw0KPiAtCWZvciAodHR5 cGUgPSBDVk1YX1VTQl9UUkFOU0ZFUl9DT05UUk9MOw0KPiAtCSAgICAgdHR5cGUgPD0gQ1ZNWF9V U0JfVFJBTlNGRVJfSU5URVJSVVBUOyB0dHlwZSsrKSB7DQo+IC0JCWxpc3RfZm9yX2VhY2hfZW50 cnkocGlwZSwgJnVzYi0+YWN0aXZlX3BpcGVzW3R0eXBlXSwgbm9kZSkgew0KPiAtCQkJaWYgKHBp cGUtPm5leHRfdHhfZnJhbWUgPiB1c2ItPmZyYW1lX251bWJlcikgew0KPiAtCQkJCW5lZWRfc29m ID0gMTsNCj4gLQkJCQlicmVhazsNCj4gLQkJCX0NCj4gLQkJfQ0KPiAtCX0NCj4gLQlVU0JfU0VU X0ZJRUxEMzIoQ1ZNWF9VU0JDWF9HSU5UTVNLKHVzYi0+aW5kZXgpLA0KPiAtCQkJY3ZteF91c2Jj eF9naW50bXNrLCBzb2Ztc2ssIG5lZWRfc29mKTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQg b2N0ZW9uX3VzYl91cmJfY29tcGxldGVfY2FsbGJhY2soc3RydWN0IG9jdGVvbl9oY2QgKnVzYiwN Cj4gLQkJCQkJICAgICBlbnVtIGN2bXhfdXNiX3N0YXR1cyBzdGF0dXMsDQo+IC0JCQkJCSAgICAg c3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUsDQo+IC0JCQkJCSAgICAgc3RydWN0IGN2bXhfdXNi X3RyYW5zYWN0aW9uDQo+IC0JCQkJCQkqdHJhbnNhY3Rpb24sDQo+IC0JCQkJCSAgICAgaW50IGJ5 dGVzX3RyYW5zZmVycmVkLA0KPiAtCQkJCQkgICAgIHN0cnVjdCB1cmIgKnVyYikNCj4gLXsNCj4g LQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gb2N0ZW9uX3RvX2hjZCh1c2IpOw0KPiAtCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGhjZC0+c2VsZi5jb250cm9sbGVyOw0KPiAtDQo+IC0JaWYgKGxpa2VseShz dGF0dXMgPT0gQ1ZNWF9VU0JfU1RBVFVTX09LKSkNCj4gLQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0g Ynl0ZXNfdHJhbnNmZXJyZWQ7DQo+IC0JZWxzZQ0KPiAtCQl1cmItPmFjdHVhbF9sZW5ndGggPSAw Ow0KPiAtDQo+IC0JdXJiLT5oY3ByaXYgPSBOVUxMOw0KPiAtDQo+IC0JLyogRm9yIElzb2Nocm9u b3VzIHRyYW5zYWN0aW9ucyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgVVJCIHBhY2tldCBzdGF0dXMN Cj4gLQkgKiBsaXN0IGZyb20gZGF0YSBpbiBvdXIgcHJpdmF0ZSBjb3B5DQo+IC0JICovDQo+IC0J aWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsNCj4gLQkJ aW50IGk7DQo+IC0JCS8qDQo+IC0JCSAqIFRoZSBwb2ludGVyIHRvIHRoZSBwcml2YXRlIGxpc3Qg aXMgc3RvcmVkIGluIHRoZSBzZXR1cF9wYWNrZXQNCj4gLQkJICogZmllbGQuDQo+IC0JCSAqLw0K PiAtCQlzdHJ1Y3QgY3ZteF91c2JfaXNvX3BhY2tldCAqaXNvX3BhY2tldCA9DQo+IC0JCQkoc3Ry dWN0IGN2bXhfdXNiX2lzb19wYWNrZXQgKil1cmItPnNldHVwX3BhY2tldDsNCj4gLQkJLyogUmVj YWxjdWxhdGUgdGhlIHRyYW5zZmVyIHNpemUgYnkgYWRkaW5nIHVwIGVhY2ggcGFja2V0ICovDQo+ IC0JCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7DQo+IC0JCWZvciAoaSA9IDA7IGkgPCB1cmItPm51 bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsNCj4gLQkJCWlmIChpc29fcGFja2V0W2ldLnN0YXR1cyA9 PSBDVk1YX1VTQl9TVEFUVVNfT0spIHsNCj4gLQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0 YXR1cyA9IDA7DQo+IC0JCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0N Cj4gLQkJCQkJaXNvX3BhY2tldFtpXS5sZW5ndGg7DQo+IC0JCQkJdXJiLT5hY3R1YWxfbGVuZ3Ro ICs9DQo+IC0JCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aDsNCj4gLQkJ CX0gZWxzZSB7DQo+IC0JCQkJZGV2X2RiZyhkZXYsICJJU09DSFJPTk9VUyBwYWNrZXQ9JWQgb2Yg JWQgc3RhdHVzPSVkIHBpcGU9JXAgdHJhbnNhY3Rpb249JXAgc2l6ZT0lZFxuIiwNCj4gLQkJCQkJ aSwgdXJiLT5udW1iZXJfb2ZfcGFja2V0cywNCj4gLQkJCQkJaXNvX3BhY2tldFtpXS5zdGF0dXMs IHBpcGUsDQo+IC0JCQkJCXRyYW5zYWN0aW9uLCBpc29fcGFja2V0W2ldLmxlbmd0aCk7DQo+IC0J CQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPSAtRVJFTU9URUlPOw0KPiAtCQkJfQ0K PiAtCQl9DQo+IC0JCS8qIEZyZWUgdGhlIHByaXZhdGUgbGlzdCBub3cgdGhhdCB3ZSBkb24ndCBu ZWVkIGl0IGFueW1vcmUgKi8NCj4gLQkJa2ZyZWUoaXNvX3BhY2tldCk7DQo+IC0JCXVyYi0+c2V0 dXBfcGFja2V0ID0gTlVMTDsNCj4gLQl9DQo+IC0NCj4gLQlzd2l0Y2ggKHN0YXR1cykgew0KPiAt CWNhc2UgQ1ZNWF9VU0JfU1RBVFVTX09LOg0KPiAtCQl1cmItPnN0YXR1cyA9IDA7DQo+IC0JCWJy ZWFrOw0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RBVFVTX0NBTkNFTDoNCj4gLQkJaWYgKHVyYi0+c3Rh dHVzID09IDApDQo+IC0JCQl1cmItPnN0YXR1cyA9IC1FTk9FTlQ7DQo+IC0JCWJyZWFrOw0KPiAt CWNhc2UgQ1ZNWF9VU0JfU1RBVFVTX1NUQUxMOg0KPiAtCQlkZXZfZGJnKGRldiwgInN0YXR1cz1z dGFsbCBwaXBlPSVwIHRyYW5zYWN0aW9uPSVwIHNpemU9JWRcbiIsDQo+IC0JCQlwaXBlLCB0cmFu c2FjdGlvbiwgYnl0ZXNfdHJhbnNmZXJyZWQpOw0KPiAtCQl1cmItPnN0YXR1cyA9IC1FUElQRTsN Cj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBDVk1YX1VTQl9TVEFUVVNfQkFCQkxFRVJSOg0KPiAtCQlk ZXZfZGJnKGRldiwgInN0YXR1cz1iYWJibGUgcGlwZT0lcCB0cmFuc2FjdGlvbj0lcCBzaXplPSVk XG4iLA0KPiAtCQkJcGlwZSwgdHJhbnNhY3Rpb24sIGJ5dGVzX3RyYW5zZmVycmVkKTsNCj4gLQkJ dXJiLT5zdGF0dXMgPSAtRVBJUEU7DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RB VFVTX1NIT1JUOg0KPiAtCQlkZXZfZGJnKGRldiwgInN0YXR1cz1zaG9ydCBwaXBlPSVwIHRyYW5z YWN0aW9uPSVwIHNpemU9JWRcbiIsDQo+IC0JCQlwaXBlLCB0cmFuc2FjdGlvbiwgYnl0ZXNfdHJh bnNmZXJyZWQpOw0KPiAtCQl1cmItPnN0YXR1cyA9IC1FUkVNT1RFSU87DQo+IC0JCWJyZWFrOw0K PiAtCWNhc2UgQ1ZNWF9VU0JfU1RBVFVTX0VSUk9SOg0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RBVFVT X1hBQ1RFUlI6DQo+IC0JY2FzZSBDVk1YX1VTQl9TVEFUVVNfREFUQVRHTEVSUjoNCj4gLQljYXNl IENWTVhfVVNCX1NUQVRVU19GUkFNRUVSUjoNCj4gLQkJZGV2X2RiZyhkZXYsICJzdGF0dXM9JWQg cGlwZT0lcCB0cmFuc2FjdGlvbj0lcCBzaXplPSVkXG4iLA0KPiAtCQkJc3RhdHVzLCBwaXBlLCB0 cmFuc2FjdGlvbiwgYnl0ZXNfdHJhbnNmZXJyZWQpOw0KPiAtCQl1cmItPnN0YXR1cyA9IC1FUFJP VE87DQo+IC0JCWJyZWFrOw0KPiAtCX0NCj4gLQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChv Y3Rlb25fdG9faGNkKHVzYiksIHVyYik7DQo+IC0Jc3Bpbl91bmxvY2soJnVzYi0+bG9jayk7DQo+ IC0JdXNiX2hjZF9naXZlYmFja191cmIob2N0ZW9uX3RvX2hjZCh1c2IpLCB1cmIsIHVyYi0+c3Rh dHVzKTsNCj4gLQlzcGluX2xvY2soJnVzYi0+bG9jayk7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAt ICogU2lnbmFsIHRoZSBjb21wbGV0aW9uIG9mIGEgdHJhbnNhY3Rpb24gYW5kIGZyZWUgaXQuIFRo ZQ0KPiAtICogdHJhbnNhY3Rpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHBpcGUgdHJhbnNh Y3Rpb24gbGlzdC4NCj4gLSAqDQo+IC0gKiBAdXNiOgkgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0 ZWQgYnkgY3ZteF91c2JfaW5pdGlhbGl6ZSgpLg0KPiAtICogQHBpcGU6CSBQaXBlIHRoZSB0cmFu c2FjdGlvbiBpcyBvbg0KPiAtICogQHRyYW5zYWN0aW9uOg0KPiAtICoJCSBUcmFuc2FjdGlvbiB0 aGF0IGNvbXBsZXRlZA0KPiAtICogQGNvbXBsZXRlX2NvZGU6DQo+IC0gKgkJIENvbXBsZXRpb24g Y29kZQ0KPiAtICovDQo+IC1zdGF0aWMgdm9pZCBjdm14X3VzYl9jb21wbGV0ZShzdHJ1Y3Qgb2N0 ZW9uX2hjZCAqdXNiLA0KPiAtCQkJICAgICAgc3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUsDQo+ IC0JCQkgICAgICBzdHJ1Y3QgY3ZteF91c2JfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLA0KPiAt CQkJICAgICAgZW51bSBjdm14X3VzYl9zdGF0dXMgY29tcGxldGVfY29kZSkNCj4gLXsNCj4gLQkv KiBJZiB0aGlzIHdhcyBhIHNwbGl0IHRoZW4gY2xlYXIgb3VyIHNwbGl0IGluIHByb2dyZXNzIG1h cmtlciAqLw0KPiAtCWlmICh1c2ItPmFjdGl2ZV9zcGxpdCA9PSB0cmFuc2FjdGlvbikNCj4gLQkJ dXNiLT5hY3RpdmVfc3BsaXQgPSBOVUxMOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBJc29jaHJvbm91 cyB0cmFuc2FjdGlvbnMgbmVlZCBleHRyYSBwcm9jZXNzaW5nIGFzIHRoZXkgbWlnaHQgbm90IGJl DQo+IC0JICogZG9uZSBhZnRlciBhIHNpbmdsZSBkYXRhIHRyYW5zZmVyDQo+IC0JICovDQo+IC0J aWYgKHVubGlrZWx5KHRyYW5zYWN0aW9uLT50eXBlID09IENWTVhfVVNCX1RSQU5TRkVSX0lTT0NI Uk9OT1VTKSkgew0KPiAtCQkvKiBVcGRhdGUgdGhlIG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJl ZCBpbiB0aGlzIElTTyBwYWNrZXQgKi8NCj4gLQkJdHJhbnNhY3Rpb24tPmlzb19wYWNrZXRzWzBd Lmxlbmd0aCA9IHRyYW5zYWN0aW9uLT5hY3R1YWxfYnl0ZXM7DQo+IC0JCXRyYW5zYWN0aW9uLT5p c29fcGFja2V0c1swXS5zdGF0dXMgPSBjb21wbGV0ZV9jb2RlOw0KPiAtDQo+IC0JCS8qDQo+IC0J CSAqIElmIHRoZXJlIGFyZSBtb3JlIElTT3MgcGVuZGluZyBhbmQgd2Ugc3VjY2VlZGVkLCBzY2hl ZHVsZSB0aGUNCj4gLQkJICogbmV4dCBvbmUNCj4gLQkJICovDQo+IC0JCWlmICgodHJhbnNhY3Rp b24tPmlzb19udW1iZXJfcGFja2V0cyA+IDEpICYmDQo+IC0JCSAgICAoY29tcGxldGVfY29kZSA9 PSBDVk1YX1VTQl9TVEFUVVNfT0spKSB7DQo+IC0JCQkvKiBObyBieXRlcyB0cmFuc2ZlcnJlZCBm b3IgdGhpcyBwYWNrZXQgYXMgb2YgeWV0ICovDQo+IC0JCQl0cmFuc2FjdGlvbi0+YWN0dWFsX2J5 dGVzID0gMDsNCj4gLQkJCS8qIE9uZSBsZXNzIElTTyB3YWl0aW5nIHRvIHRyYW5zZmVyICovDQo+ IC0JCQl0cmFuc2FjdGlvbi0+aXNvX251bWJlcl9wYWNrZXRzLS07DQo+IC0JCQkvKiBJbmNyZW1l bnQgdG8gdGhlIG5leHQgbG9jYXRpb24gaW4gb3VyIHBhY2tldCBhcnJheSAqLw0KPiAtCQkJdHJh bnNhY3Rpb24tPmlzb19wYWNrZXRzKys7DQo+IC0JCQl0cmFuc2FjdGlvbi0+c3RhZ2UgPSBDVk1Y X1VTQl9TVEFHRV9OT05fQ09OVFJPTDsNCj4gLQkJCXJldHVybjsNCj4gLQkJfQ0KPiAtCX0NCj4g LQ0KPiAtCS8qIFJlbW92ZSB0aGUgdHJhbnNhY3Rpb24gZnJvbSB0aGUgcGlwZSBsaXN0ICovDQo+ IC0JbGlzdF9kZWwoJnRyYW5zYWN0aW9uLT5ub2RlKTsNCj4gLQlpZiAobGlzdF9lbXB0eSgmcGlw ZS0+dHJhbnNhY3Rpb25zKSkNCj4gLQkJbGlzdF9tb3ZlX3RhaWwoJnBpcGUtPm5vZGUsICZ1c2It PmlkbGVfcGlwZXMpOw0KPiAtCW9jdGVvbl91c2JfdXJiX2NvbXBsZXRlX2NhbGxiYWNrKHVzYiwg Y29tcGxldGVfY29kZSwgcGlwZSwNCj4gLQkJCQkJIHRyYW5zYWN0aW9uLA0KPiAtCQkJCQkgdHJh bnNhY3Rpb24tPmFjdHVhbF9ieXRlcywNCj4gLQkJCQkJIHRyYW5zYWN0aW9uLT51cmIpOw0KPiAt CWtmcmVlKHRyYW5zYWN0aW9uKTsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0gKiBTdWJtaXQgYSB1 c2IgdHJhbnNhY3Rpb24gdG8gYSBwaXBlLiBDYWxsZWQgZm9yIGFsbCB0eXBlcw0KPiAtICogb2Yg dHJhbnNhY3Rpb25zLg0KPiAtICoNCj4gLSAqIEB1c2I6DQo+IC0gKiBAcGlwZToJICAgIFdoaWNo IHBpcGUgdG8gc3VibWl0IHRvLg0KPiAtICogQHR5cGU6CSAgICBUcmFuc2FjdGlvbiB0eXBlDQo+ IC0gKiBAYnVmZmVyOgkgICAgVXNlciBidWZmZXIgZm9yIHRoZSB0cmFuc2FjdGlvbg0KPiAtICog QGJ1ZmZlcl9sZW5ndGg6DQo+IC0gKgkJICAgIFVzZXIgYnVmZmVyJ3MgbGVuZ3RoIGluIGJ5dGVz DQo+IC0gKiBAY29udHJvbF9oZWFkZXI6DQo+IC0gKgkJICAgIEZvciBjb250cm9sIHRyYW5zYWN0 aW9ucywgdGhlIDggYnl0ZSBzdGFuZGFyZCBoZWFkZXINCj4gLSAqIEBpc29fc3RhcnRfZnJhbWU6 DQo+IC0gKgkJICAgIEZvciBJU08gdHJhbnNhY3Rpb25zLCB0aGUgc3RhcnQgZnJhbWUNCj4gLSAq IEBpc29fbnVtYmVyX3BhY2tldHM6DQo+IC0gKgkJICAgIEZvciBJU08sIHRoZSBudW1iZXIgb2Yg cGFja2V0IGluIHRoZSB0cmFuc2FjdGlvbi4NCj4gLSAqIEBpc29fcGFja2V0czoNCj4gLSAqCQkg ICAgQSBkZXNjcmlwdGlvbiBvZiBlYWNoIElTTyBwYWNrZXQNCj4gLSAqIEB1cmI6CSAgICBVUkIg Zm9yIHRoZSBjYWxsYmFjaw0KPiAtICoNCj4gLSAqIFJldHVybnM6IFRyYW5zYWN0aW9uIG9yIE5V TEwgb24gZmFpbHVyZS4NCj4gLSAqLw0KPiAtc3RhdGljIHN0cnVjdCBjdm14X3VzYl90cmFuc2Fj dGlvbiAqY3ZteF91c2Jfc3VibWl0X3RyYW5zYWN0aW9uKA0KPiAtCQkJCXN0cnVjdCBvY3Rlb25f aGNkICp1c2IsDQo+IC0JCQkJc3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUsDQo+IC0JCQkJZW51 bSBjdm14X3VzYl90cmFuc2ZlciB0eXBlLA0KPiAtCQkJCXU2NCBidWZmZXIsDQo+IC0JCQkJaW50 IGJ1ZmZlcl9sZW5ndGgsDQo+IC0JCQkJdTY0IGNvbnRyb2xfaGVhZGVyLA0KPiAtCQkJCWludCBp c29fc3RhcnRfZnJhbWUsDQo+IC0JCQkJaW50IGlzb19udW1iZXJfcGFja2V0cywNCj4gLQkJCQlz dHJ1Y3QgY3ZteF91c2JfaXNvX3BhY2tldCAqaXNvX3BhY2tldHMsDQo+IC0JCQkJc3RydWN0IHVy YiAqdXJiKQ0KPiAtew0KPiAtCXN0cnVjdCBjdm14X3VzYl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rp b247DQo+IC0NCj4gLQlpZiAodW5saWtlbHkocGlwZS0+dHJhbnNmZXJfdHlwZSAhPSB0eXBlKSkN Cj4gLQkJcmV0dXJuIE5VTEw7DQo+IC0NCj4gLQl0cmFuc2FjdGlvbiA9IGt6YWxsb2Moc2l6ZW9m KCp0cmFuc2FjdGlvbiksIEdGUF9BVE9NSUMpOw0KPiAtCWlmICh1bmxpa2VseSghdHJhbnNhY3Rp b24pKQ0KPiAtCQlyZXR1cm4gTlVMTDsNCj4gLQ0KPiAtCXRyYW5zYWN0aW9uLT50eXBlID0gdHlw ZTsNCj4gLQl0cmFuc2FjdGlvbi0+YnVmZmVyID0gYnVmZmVyOw0KPiAtCXRyYW5zYWN0aW9uLT5i dWZmZXJfbGVuZ3RoID0gYnVmZmVyX2xlbmd0aDsNCj4gLQl0cmFuc2FjdGlvbi0+Y29udHJvbF9o ZWFkZXIgPSBjb250cm9sX2hlYWRlcjsNCj4gLQkvKiBGSVhNRTogVGhpcyBpcyBub3QgdXNlZCwg aW1wbGVtZW50IGl0LiAqLw0KPiAtCXRyYW5zYWN0aW9uLT5pc29fc3RhcnRfZnJhbWUgPSBpc29f c3RhcnRfZnJhbWU7DQo+IC0JdHJhbnNhY3Rpb24tPmlzb19udW1iZXJfcGFja2V0cyA9IGlzb19u dW1iZXJfcGFja2V0czsNCj4gLQl0cmFuc2FjdGlvbi0+aXNvX3BhY2tldHMgPSBpc29fcGFja2V0 czsNCj4gLQl0cmFuc2FjdGlvbi0+dXJiID0gdXJiOw0KPiAtCWlmICh0cmFuc2FjdGlvbi0+dHlw ZSA9PSBDVk1YX1VTQl9UUkFOU0ZFUl9DT05UUk9MKQ0KPiAtCQl0cmFuc2FjdGlvbi0+c3RhZ2Ug PSBDVk1YX1VTQl9TVEFHRV9TRVRVUDsNCj4gLQllbHNlDQo+IC0JCXRyYW5zYWN0aW9uLT5zdGFn ZSA9IENWTVhfVVNCX1NUQUdFX05PTl9DT05UUk9MOw0KPiAtDQo+IC0JaWYgKCFsaXN0X2VtcHR5 KCZwaXBlLT50cmFuc2FjdGlvbnMpKSB7DQo+IC0JCWxpc3RfYWRkX3RhaWwoJnRyYW5zYWN0aW9u LT5ub2RlLCAmcGlwZS0+dHJhbnNhY3Rpb25zKTsNCj4gLQl9IGVsc2Ugew0KPiAtCQlsaXN0X2Fk ZF90YWlsKCZ0cmFuc2FjdGlvbi0+bm9kZSwgJnBpcGUtPnRyYW5zYWN0aW9ucyk7DQo+IC0JCWxp c3RfbW92ZV90YWlsKCZwaXBlLT5ub2RlLA0KPiAtCQkJICAgICAgICZ1c2ItPmFjdGl2ZV9waXBl c1twaXBlLT50cmFuc2Zlcl90eXBlXSk7DQo+IC0NCj4gLQkJLyoNCj4gLQkJICogV2UgbWF5IG5l ZWQgdG8gc2NoZWR1bGUgdGhlIHBpcGUgaWYgdGhpcyB3YXMgdGhlIGhlYWQgb2YgdGhlDQo+IC0J CSAqIHBpcGUuDQo+IC0JCSAqLw0KPiAtCQljdm14X3VzYl9zY2hlZHVsZSh1c2IsIDApOw0KPiAt CX0NCj4gLQ0KPiAtCXJldHVybiB0cmFuc2FjdGlvbjsNCj4gLX0NCj4gLQ0KPiAtLyoqDQo+IC0g KiBDYWxsIHRvIHN1Ym1pdCBhIFVTQiBCdWxrIHRyYW5zZmVyIHRvIGEgcGlwZS4NCj4gLSAqDQo+ IC0gKiBAdXNiOgkgICAgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5p dGlhbGl6ZSgpLg0KPiAtICogQHBpcGU6CSAgICBIYW5kbGUgdG8gdGhlIHBpcGUgZm9yIHRoZSB0 cmFuc2Zlci4NCj4gLSAqIEB1cmI6CSAgICBVUkIuDQo+IC0gKg0KPiAtICogUmV0dXJuczogQSBz dWJtaXR0ZWQgdHJhbnNhY3Rpb24gb3IgTlVMTCBvbiBmYWlsdXJlLg0KPiAtICovDQo+IC1zdGF0 aWMgc3RydWN0IGN2bXhfdXNiX3RyYW5zYWN0aW9uICpjdm14X3VzYl9zdWJtaXRfYnVsaygNCj4g LQkJCQkJCXN0cnVjdCBvY3Rlb25faGNkICp1c2IsDQo+IC0JCQkJCQlzdHJ1Y3QgY3ZteF91c2Jf cGlwZSAqcGlwZSwNCj4gLQkJCQkJCXN0cnVjdCB1cmIgKnVyYikNCj4gLXsNCj4gLQlyZXR1cm4g Y3ZteF91c2Jfc3VibWl0X3RyYW5zYWN0aW9uKHVzYiwgcGlwZSwgQ1ZNWF9VU0JfVFJBTlNGRVJf QlVMSywNCj4gLQkJCQkJICAgdXJiLT50cmFuc2Zlcl9kbWEsDQo+IC0JCQkJCSAgIHVyYi0+dHJh bnNmZXJfYnVmZmVyX2xlbmd0aCwNCj4gLQkJCQkJICAgMCwgLyogY29udHJvbF9oZWFkZXIgKi8N Cj4gLQkJCQkJICAgMCwgLyogaXNvX3N0YXJ0X2ZyYW1lICovDQo+IC0JCQkJCSAgIDAsIC8qIGlz b19udW1iZXJfcGFja2V0cyAqLw0KPiAtCQkJCQkgICBOVUxMLCAvKiBpc29fcGFja2V0cyAqLw0K PiAtCQkJCQkgICB1cmIpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIENhbGwgdG8gc3VibWl0 IGEgVVNCIEludGVycnVwdCB0cmFuc2ZlciB0byBhIHBpcGUuDQo+IC0gKg0KPiAtICogQHVzYjoJ ICAgIFVTQiBkZXZpY2Ugc3RhdGUgcG9wdWxhdGVkIGJ5IGN2bXhfdXNiX2luaXRpYWxpemUoKS4N Cj4gLSAqIEBwaXBlOgkgICAgSGFuZGxlIHRvIHRoZSBwaXBlIGZvciB0aGUgdHJhbnNmZXIuDQo+ IC0gKiBAdXJiOgkgICAgVVJCIHJldHVybmVkIHdoZW4gdGhlIGNhbGxiYWNrIGlzIGNhbGxlZC4N Cj4gLSAqDQo+IC0gKiBSZXR1cm5zOiBBIHN1Ym1pdHRlZCB0cmFuc2FjdGlvbiBvciBOVUxMIG9u IGZhaWx1cmUuDQo+IC0gKi8NCj4gLXN0YXRpYyBzdHJ1Y3QgY3ZteF91c2JfdHJhbnNhY3Rpb24g KmN2bXhfdXNiX3N1Ym1pdF9pbnRlcnJ1cHQoDQo+IC0JCQkJCQlzdHJ1Y3Qgb2N0ZW9uX2hjZCAq dXNiLA0KPiAtCQkJCQkJc3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUsDQo+IC0JCQkJCQlzdHJ1 Y3QgdXJiICp1cmIpDQo+IC17DQo+IC0JcmV0dXJuIGN2bXhfdXNiX3N1Ym1pdF90cmFuc2FjdGlv bih1c2IsIHBpcGUsDQo+IC0JCQkJCSAgIENWTVhfVVNCX1RSQU5TRkVSX0lOVEVSUlVQVCwNCj4g LQkJCQkJICAgdXJiLT50cmFuc2Zlcl9kbWEsDQo+IC0JCQkJCSAgIHVyYi0+dHJhbnNmZXJfYnVm ZmVyX2xlbmd0aCwNCj4gLQkJCQkJICAgMCwgLyogY29udHJvbF9oZWFkZXIgKi8NCj4gLQkJCQkJ ICAgMCwgLyogaXNvX3N0YXJ0X2ZyYW1lICovDQo+IC0JCQkJCSAgIDAsIC8qIGlzb19udW1iZXJf cGFja2V0cyAqLw0KPiAtCQkJCQkgICBOVUxMLCAvKiBpc29fcGFja2V0cyAqLw0KPiAtCQkJCQkg ICB1cmIpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIENhbGwgdG8gc3VibWl0IGEgVVNCIENv bnRyb2wgdHJhbnNmZXIgdG8gYSBwaXBlLg0KPiAtICoNCj4gLSAqIEB1c2I6CSAgICBVU0IgZGV2 aWNlIHN0YXRlIHBvcHVsYXRlZCBieSBjdm14X3VzYl9pbml0aWFsaXplKCkuDQo+IC0gKiBAcGlw ZToJICAgIEhhbmRsZSB0byB0aGUgcGlwZSBmb3IgdGhlIHRyYW5zZmVyLg0KPiAtICogQHVyYjoJ ICAgIFVSQi4NCj4gLSAqDQo+IC0gKiBSZXR1cm5zOiBBIHN1Ym1pdHRlZCB0cmFuc2FjdGlvbiBv ciBOVUxMIG9uIGZhaWx1cmUuDQo+IC0gKi8NCj4gLXN0YXRpYyBzdHJ1Y3QgY3ZteF91c2JfdHJh bnNhY3Rpb24gKmN2bXhfdXNiX3N1Ym1pdF9jb250cm9sKA0KPiAtCQkJCQkJc3RydWN0IG9jdGVv bl9oY2QgKnVzYiwNCj4gLQkJCQkJCXN0cnVjdCBjdm14X3VzYl9waXBlICpwaXBlLA0KPiAtCQkJ CQkJc3RydWN0IHVyYiAqdXJiKQ0KPiAtew0KPiAtCWludCBidWZmZXJfbGVuZ3RoID0gdXJiLT50 cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOw0KPiAtCXU2NCBjb250cm9sX2hlYWRlciA9IHVyYi0+c2V0 dXBfZG1hOw0KPiAtCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmhlYWRlciA9IGN2bXhfcGh5c190 b19wdHIoY29udHJvbF9oZWFkZXIpOw0KPiAtDQo+IC0JaWYgKChoZWFkZXItPmJSZXF1ZXN0VHlw ZSAmIFVTQl9ESVJfSU4pID09IDApDQo+IC0JCWJ1ZmZlcl9sZW5ndGggPSBsZTE2X3RvX2NwdSho ZWFkZXItPndMZW5ndGgpOw0KPiAtDQo+IC0JcmV0dXJuIGN2bXhfdXNiX3N1Ym1pdF90cmFuc2Fj dGlvbih1c2IsIHBpcGUsDQo+IC0JCQkJCSAgIENWTVhfVVNCX1RSQU5TRkVSX0NPTlRST0wsDQo+ IC0JCQkJCSAgIHVyYi0+dHJhbnNmZXJfZG1hLCBidWZmZXJfbGVuZ3RoLA0KPiAtCQkJCQkgICBj b250cm9sX2hlYWRlciwNCj4gLQkJCQkJICAgMCwgLyogaXNvX3N0YXJ0X2ZyYW1lICovDQo+IC0J CQkJCSAgIDAsIC8qIGlzb19udW1iZXJfcGFja2V0cyAqLw0KPiAtCQkJCQkgICBOVUxMLCAvKiBp c29fcGFja2V0cyAqLw0KPiAtCQkJCQkgICB1cmIpOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAq IENhbGwgdG8gc3VibWl0IGEgVVNCIElzb2Nocm9ub3VzIHRyYW5zZmVyIHRvIGEgcGlwZS4NCj4g LSAqDQo+IC0gKiBAdXNiOgkgICAgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91 c2JfaW5pdGlhbGl6ZSgpLg0KPiAtICogQHBpcGU6CSAgICBIYW5kbGUgdG8gdGhlIHBpcGUgZm9y IHRoZSB0cmFuc2Zlci4NCj4gLSAqIEB1cmI6CSAgICBVUkIgcmV0dXJuZWQgd2hlbiB0aGUgY2Fs bGJhY2sgaXMgY2FsbGVkLg0KPiAtICoNCj4gLSAqIFJldHVybnM6IEEgc3VibWl0dGVkIHRyYW5z YWN0aW9uIG9yIE5VTEwgb24gZmFpbHVyZS4NCj4gLSAqLw0KPiAtc3RhdGljIHN0cnVjdCBjdm14 X3VzYl90cmFuc2FjdGlvbiAqY3ZteF91c2Jfc3VibWl0X2lzb2Nocm9ub3VzKA0KPiAtCQkJCQkJ c3RydWN0IG9jdGVvbl9oY2QgKnVzYiwNCj4gLQkJCQkJCXN0cnVjdCBjdm14X3VzYl9waXBlICpw aXBlLA0KPiAtCQkJCQkJc3RydWN0IHVyYiAqdXJiKQ0KPiAtew0KPiAtCXN0cnVjdCBjdm14X3Vz Yl9pc29fcGFja2V0ICpwYWNrZXRzOw0KPiAtDQo+IC0JcGFja2V0cyA9IChzdHJ1Y3QgY3ZteF91 c2JfaXNvX3BhY2tldCAqKXVyYi0+c2V0dXBfcGFja2V0Ow0KPiAtCXJldHVybiBjdm14X3VzYl9z dWJtaXRfdHJhbnNhY3Rpb24odXNiLCBwaXBlLA0KPiAtCQkJCQkgICBDVk1YX1VTQl9UUkFOU0ZF Ul9JU09DSFJPTk9VUywNCj4gLQkJCQkJICAgdXJiLT50cmFuc2Zlcl9kbWEsDQo+IC0JCQkJCSAg IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwNCj4gLQkJCQkJICAgMCwgLyogY29udHJvbF9o ZWFkZXIgKi8NCj4gLQkJCQkJICAgdXJiLT5zdGFydF9mcmFtZSwNCj4gLQkJCQkJICAgdXJiLT5u dW1iZXJfb2ZfcGFja2V0cywNCj4gLQkJCQkJICAgcGFja2V0cywgdXJiKTsNCj4gLX0NCj4gLQ0K PiAtLyoqDQo+IC0gKiBDYW5jZWwgb25lIG91dHN0YW5kaW5nIHJlcXVlc3QgaW4gYSBwaXBlLiBD YW5jZWxpbmcgYSByZXF1ZXN0DQo+IC0gKiBjYW4gZmFpbCBpZiB0aGUgdHJhbnNhY3Rpb24gaGFz IGFscmVhZHkgY29tcGxldGVkIGJlZm9yZSBjYW5jZWwNCj4gLSAqIGlzIGNhbGxlZC4gRXZlbiBh ZnRlciBhIHN1Y2Nlc3NmdWwgY2FuY2VsIGNhbGwsIGl0IG1heSB0YWtlDQo+IC0gKiBhIGZyYW1l IG9yIHR3byBmb3IgdGhlIGN2bXhfdXNiX3BvbGwoKSBmdW5jdGlvbiB0byBjYWxsIHRoZQ0KPiAt ICogYXNzb2NpYXRlZCBjYWxsYmFjay4NCj4gLSAqDQo+IC0gKiBAdXNiOgkgVVNCIGRldmljZSBz dGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5pdGlhbGl6ZSgpLg0KPiAtICogQHBpcGU6CSBQ aXBlIHRvIGNhbmNlbCByZXF1ZXN0cyBpbi4NCj4gLSAqIEB0cmFuc2FjdGlvbjogVHJhbnNhY3Rp b24gdG8gY2FuY2VsLCByZXR1cm5lZCBieSB0aGUgc3VibWl0IGZ1bmN0aW9uLg0KPiAtICoNCj4g LSAqIFJldHVybnM6IDAgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLg0KPiAtICovDQo+IC1zdGF0 aWMgaW50IGN2bXhfdXNiX2NhbmNlbChzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiLA0KPiAtCQkJICAg c3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUsDQo+IC0JCQkgICBzdHJ1Y3QgY3ZteF91c2JfdHJh bnNhY3Rpb24gKnRyYW5zYWN0aW9uKQ0KPiAtew0KPiAtCS8qDQo+IC0JICogSWYgdGhlIHRyYW5z YWN0aW9uIGlzIHRoZSBIRUFEIG9mIHRoZSBxdWV1ZSBhbmQgc2NoZWR1bGVkLiBXZSBuZWVkIHRv DQo+IC0JICogdHJlYXQgaXQgc3BlY2lhbA0KPiAtCSAqLw0KPiAtCWlmIChsaXN0X2ZpcnN0X2Vu dHJ5KCZwaXBlLT50cmFuc2FjdGlvbnMsIHR5cGVvZigqdHJhbnNhY3Rpb24pLCBub2RlKSA9PQ0K PiAtCSAgICB0cmFuc2FjdGlvbiAmJiAocGlwZS0+ZmxhZ3MgJiBDVk1YX1VTQl9QSVBFX0ZMQUdT X1NDSEVEVUxFRCkpIHsNCj4gLQkJdW5pb24gY3ZteF91c2JjeF9oY2NoYXJ4IHVzYmNfaGNjaGFy Ow0KPiAtDQo+IC0JCXVzYi0+cGlwZV9mb3JfY2hhbm5lbFtwaXBlLT5jaGFubmVsXSA9IE5VTEw7 DQo+IC0JCXBpcGUtPmZsYWdzICY9IH5DVk1YX1VTQl9QSVBFX0ZMQUdTX1NDSEVEVUxFRDsNCj4g LQ0KPiAtCQlDVk1YX1NZTkNXOw0KPiAtDQo+IC0JCXVzYmNfaGNjaGFyLnUzMiA9IGN2bXhfdXNi X3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCUNWTVhfVVNCQ1hfSENDSEFSWChwaXBlLT5jaGFubmVs LCB1c2ItPmluZGV4KSk7DQo+IC0JCS8qDQo+IC0JCSAqIElmIHRoZSBjaGFubmVsIGlzbid0IGVu YWJsZWQgdGhlbiB0aGUgdHJhbnNhY3Rpb24gYWxyZWFkeQ0KPiAtCQkgKiBjb21wbGV0ZWQuDQo+ IC0JCSAqLw0KPiAtCQlpZiAodXNiY19oY2NoYXIucy5jaGVuYSkgew0KPiAtCQkJdXNiY19oY2No YXIucy5jaGRpcyA9IDE7DQo+IC0JCQljdm14X3VzYl93cml0ZV9jc3IzMih1c2IsDQo+IC0JCQkJ CSAgICAgQ1ZNWF9VU0JDWF9IQ0NIQVJYKHBpcGUtPmNoYW5uZWwsDQo+IC0JCQkJCQkJCXVzYi0+ aW5kZXgpLA0KPiAtCQkJCQkgICAgIHVzYmNfaGNjaGFyLnUzMik7DQo+IC0JCX0NCj4gLQl9DQo+ IC0JY3ZteF91c2JfY29tcGxldGUodXNiLCBwaXBlLCB0cmFuc2FjdGlvbiwgQ1ZNWF9VU0JfU1RB VFVTX0NBTkNFTCk7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogQ2Fu Y2VsIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyBpbiBhIHBpcGUuIExvZ2ljYWxseSBhbGwgdGhp cw0KPiAtICogZG9lcyBpcyBjYWxsIGN2bXhfdXNiX2NhbmNlbCgpIGluIGEgbG9vcC4NCj4gLSAq DQo+IC0gKiBAdXNiOgkgVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5p dGlhbGl6ZSgpLg0KPiAtICogQHBpcGU6CSBQaXBlIHRvIGNhbmNlbCByZXF1ZXN0cyBpbi4NCj4g LSAqDQo+IC0gKiBSZXR1cm5zOiAwIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4NCj4gLSAqLw0K PiAtc3RhdGljIGludCBjdm14X3VzYl9jYW5jZWxfYWxsKHN0cnVjdCBvY3Rlb25faGNkICp1c2Is DQo+IC0JCQkgICAgICAgc3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUpDQo+IC17DQo+IC0Jc3Ry dWN0IGN2bXhfdXNiX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwgKm5leHQ7DQo+IC0NCj4gLQkv KiBTaW1wbHkgbG9vcCB0aHJvdWdoIGFuZCBhdHRlbXB0IHRvIGNhbmNlbCBlYWNoIHRyYW5zYWN0 aW9uICovDQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRyYW5zYWN0aW9uLCBuZXh0LCAm cGlwZS0+dHJhbnNhY3Rpb25zLCBub2RlKSB7DQo+IC0JCWludCByZXN1bHQgPSBjdm14X3VzYl9j YW5jZWwodXNiLCBwaXBlLCB0cmFuc2FjdGlvbik7DQo+IC0NCj4gLQkJaWYgKHVubGlrZWx5KHJl c3VsdCAhPSAwKSkNCj4gLQkJCXJldHVybiByZXN1bHQ7DQo+IC0JfQ0KPiAtCXJldHVybiAwOw0K PiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIENsb3NlIGEgcGlwZSBjcmVhdGVkIHdpdGggY3ZteF91 c2Jfb3Blbl9waXBlKCkuDQo+IC0gKg0KPiAtICogQHVzYjoJIFVTQiBkZXZpY2Ugc3RhdGUgcG9w dWxhdGVkIGJ5IGN2bXhfdXNiX2luaXRpYWxpemUoKS4NCj4gLSAqIEBwaXBlOgkgUGlwZSB0byBj bG9zZS4NCj4gLSAqDQo+IC0gKiBSZXR1cm5zOiAwIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4g RUJVU1kgaXMgcmV0dXJuZWQgaWYgdGhlIHBpcGUgaGFzDQo+IC0gKgkgICAgb3V0c3RhbmRpbmcg dHJhbnNmZXJzLg0KPiAtICovDQo+IC1zdGF0aWMgaW50IGN2bXhfdXNiX2Nsb3NlX3BpcGUoc3Ry dWN0IG9jdGVvbl9oY2QgKnVzYiwNCj4gLQkJCSAgICAgICBzdHJ1Y3QgY3ZteF91c2JfcGlwZSAq cGlwZSkNCj4gLXsNCj4gLQkvKiBGYWlsIGlmIHRoZSBwaXBlIGhhcyBwZW5kaW5nIHRyYW5zYWN0 aW9ucyAqLw0KPiAtCWlmICghbGlzdF9lbXB0eSgmcGlwZS0+dHJhbnNhY3Rpb25zKSkNCj4gLQkJ cmV0dXJuIC1FQlVTWTsNCj4gLQ0KPiAtCWxpc3RfZGVsKCZwaXBlLT5ub2RlKTsNCj4gLQlrZnJl ZShwaXBlKTsNCj4gLQ0KPiAtCXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIEdl dCB0aGUgY3VycmVudCBVU0IgcHJvdG9jb2wgbGV2ZWwgZnJhbWUgbnVtYmVyLiBUaGUgZnJhbWUN Cj4gLSAqIG51bWJlciBpcyBhbHdheXMgaW4gdGhlIHJhbmdlIG9mIDAtMHg3ZmYuDQo+IC0gKg0K PiAtICogQHVzYjogVVNCIGRldmljZSBzdGF0ZSBwb3B1bGF0ZWQgYnkgY3ZteF91c2JfaW5pdGlh bGl6ZSgpLg0KPiAtICoNCj4gLSAqIFJldHVybnM6IFVTQiBmcmFtZSBudW1iZXINCj4gLSAqLw0K PiAtc3RhdGljIGludCBjdm14X3VzYl9nZXRfZnJhbWVfbnVtYmVyKHN0cnVjdCBvY3Rlb25faGNk ICp1c2IpDQo+IC17DQo+IC0JdW5pb24gY3ZteF91c2JjeF9oZm51bSB1c2JjX2hmbnVtOw0KPiAt DQo+IC0JdXNiY19oZm51bS51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwgQ1ZNWF9VU0JD WF9IRk5VTSh1c2ItPmluZGV4KSk7DQo+IC0NCj4gLQlyZXR1cm4gdXNiY19oZm51bS5zLmZybnVt Ow0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZCBjdm14X3VzYl90cmFuc2Zlcl9jb250cm9sKHN0 cnVjdCBvY3Rlb25faGNkICp1c2IsDQo+IC0JCQkJICAgICAgc3RydWN0IGN2bXhfdXNiX3BpcGUg KnBpcGUsDQo+IC0JCQkJICAgICAgc3RydWN0IGN2bXhfdXNiX3RyYW5zYWN0aW9uICp0cmFuc2Fj dGlvbiwNCj4gLQkJCQkgICAgICB1bmlvbiBjdm14X3VzYmN4X2hjY2hhcnggdXNiY19oY2NoYXIs DQo+IC0JCQkJICAgICAgaW50IGJ1ZmZlcl9zcGFjZV9sZWZ0LA0KPiAtCQkJCSAgICAgIGludCBi eXRlc19pbl9sYXN0X3BhY2tldCkNCj4gLXsNCj4gLQlzd2l0Y2ggKHRyYW5zYWN0aW9uLT5zdGFn ZSkgew0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfTk9OX0NPTlRST0w6DQo+IC0JY2FzZSBDVk1Y X1VTQl9TVEFHRV9OT05fQ09OVFJPTF9TUExJVF9DT01QTEVURToNCj4gLQkJLyogVGhpcyBzaG91 bGQgYmUgaW1wb3NzaWJsZSAqLw0KPiAtCQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRy YW5zYWN0aW9uLA0KPiAtCQkJCSAgQ1ZNWF9VU0JfU1RBVFVTX0VSUk9SKTsNCj4gLQkJYnJlYWs7 DQo+IC0JY2FzZSBDVk1YX1VTQl9TVEFHRV9TRVRVUDoNCj4gLQkJcGlwZS0+cGlkX3RvZ2dsZSA9 IDE7DQo+IC0JCWlmIChjdm14X3VzYl9waXBlX25lZWRzX3NwbGl0KHVzYiwgcGlwZSkpIHsNCj4g LQkJCXRyYW5zYWN0aW9uLT5zdGFnZSA9DQo+IC0JCQkJQ1ZNWF9VU0JfU1RBR0VfU0VUVVBfU1BM SVRfQ09NUExFVEU7DQo+IC0JCX0gZWxzZSB7DQo+IC0JCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0 ICpoZWFkZXIgPQ0KPiAtCQkJCWN2bXhfcGh5c190b19wdHIodHJhbnNhY3Rpb24tPmNvbnRyb2xf aGVhZGVyKTsNCj4gLQkJCWlmIChoZWFkZXItPndMZW5ndGgpDQo+IC0JCQkJdHJhbnNhY3Rpb24t PnN0YWdlID0gQ1ZNWF9VU0JfU1RBR0VfREFUQTsNCj4gLQkJCWVsc2UNCj4gLQkJCQl0cmFuc2Fj dGlvbi0+c3RhZ2UgPSBDVk1YX1VTQl9TVEFHRV9TVEFUVVM7DQo+IC0JCX0NCj4gLQkJYnJlYWs7 DQo+IC0JY2FzZSBDVk1YX1VTQl9TVEFHRV9TRVRVUF9TUExJVF9DT01QTEVURToNCj4gLQkJew0K PiAtCQkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqaGVhZGVyID0NCj4gLQkJCQljdm14X3BoeXNf dG9fcHRyKHRyYW5zYWN0aW9uLT5jb250cm9sX2hlYWRlcik7DQo+IC0JCQlpZiAoaGVhZGVyLT53 TGVuZ3RoKQ0KPiAtCQkJCXRyYW5zYWN0aW9uLT5zdGFnZSA9IENWTVhfVVNCX1NUQUdFX0RBVEE7 DQo+IC0JCQllbHNlDQo+IC0JCQkJdHJhbnNhY3Rpb24tPnN0YWdlID0gQ1ZNWF9VU0JfU1RBR0Vf U1RBVFVTOw0KPiAtCQl9DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfREFU QToNCj4gLQkJaWYgKGN2bXhfdXNiX3BpcGVfbmVlZHNfc3BsaXQodXNiLCBwaXBlKSkgew0KPiAt CQkJdHJhbnNhY3Rpb24tPnN0YWdlID0gQ1ZNWF9VU0JfU1RBR0VfREFUQV9TUExJVF9DT01QTEVU RTsNCj4gLQkJCS8qDQo+IC0JCQkgKiBGb3Igc2V0dXAgT1VUIGRhdGEgdGhhdCBhcmUgc3BsaXRz LA0KPiAtCQkJICogdGhlIGhhcmR3YXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGNvdW50DQo+IC0JCQkg KiB0cmFuc2ZlcnJlZCBkYXRhLiBIZXJlIHdlIG1hbnVhbGx5DQo+IC0JCQkgKiB1cGRhdGUgdGhl IGRhdGEgdHJhbnNmZXJyZWQNCj4gLQkJCSAqLw0KPiAtCQkJaWYgKCF1c2JjX2hjY2hhci5zLmVw ZGlyKSB7DQo+IC0JCQkJaWYgKGJ1ZmZlcl9zcGFjZV9sZWZ0IDwgcGlwZS0+bWF4X3BhY2tldCkN Cj4gLQkJCQkJdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlcyArPQ0KPiAtCQkJCQkJYnVmZmVyX3Nw YWNlX2xlZnQ7DQo+IC0JCQkJZWxzZQ0KPiAtCQkJCQl0cmFuc2FjdGlvbi0+YWN0dWFsX2J5dGVz ICs9DQo+IC0JCQkJCQlwaXBlLT5tYXhfcGFja2V0Ow0KPiAtCQkJfQ0KPiAtCQl9IGVsc2UgaWYg KChidWZmZXJfc3BhY2VfbGVmdCA9PSAwKSB8fA0KPiAtCQkJICAgKGJ5dGVzX2luX2xhc3RfcGFj a2V0IDwgcGlwZS0+bWF4X3BhY2tldCkpIHsNCj4gLQkJCXBpcGUtPnBpZF90b2dnbGUgPSAxOw0K PiAtCQkJdHJhbnNhY3Rpb24tPnN0YWdlID0gQ1ZNWF9VU0JfU1RBR0VfU1RBVFVTOw0KPiAtCQl9 DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfREFUQV9TUExJVF9DT01QTEVU RToNCj4gLQkJaWYgKChidWZmZXJfc3BhY2VfbGVmdCA9PSAwKSB8fA0KPiAtCQkgICAgKGJ5dGVz X2luX2xhc3RfcGFja2V0IDwgcGlwZS0+bWF4X3BhY2tldCkpIHsNCj4gLQkJCXBpcGUtPnBpZF90 b2dnbGUgPSAxOw0KPiAtCQkJdHJhbnNhY3Rpb24tPnN0YWdlID0gQ1ZNWF9VU0JfU1RBR0VfU1RB VFVTOw0KPiAtCQl9IGVsc2Ugew0KPiAtCQkJdHJhbnNhY3Rpb24tPnN0YWdlID0gQ1ZNWF9VU0Jf U1RBR0VfREFUQTsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4gLQljYXNlIENWTVhfVVNCX1NUQUdF X1NUQVRVUzoNCj4gLQkJaWYgKGN2bXhfdXNiX3BpcGVfbmVlZHNfc3BsaXQodXNiLCBwaXBlKSkN Cj4gLQkJCXRyYW5zYWN0aW9uLT5zdGFnZSA9DQo+IC0JCQkJQ1ZNWF9VU0JfU1RBR0VfU1RBVFVT X1NQTElUX0NPTVBMRVRFOw0KPiAtCQllbHNlDQo+IC0JCQljdm14X3VzYl9jb21wbGV0ZSh1c2Is IHBpcGUsIHRyYW5zYWN0aW9uLA0KPiAtCQkJCQkgIENWTVhfVVNCX1NUQVRVU19PSyk7DQo+IC0J CWJyZWFrOw0KPiAtCWNhc2UgQ1ZNWF9VU0JfU1RBR0VfU1RBVFVTX1NQTElUX0NPTVBMRVRFOg0K PiAtCQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uLCBDVk1YX1VTQl9T VEFUVVNfT0spOw0KPiAtCQlicmVhazsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lk IGN2bXhfdXNiX3RyYW5zZmVyX2J1bGsoc3RydWN0IG9jdGVvbl9oY2QgKnVzYiwNCj4gLQkJCQkg ICBzdHJ1Y3QgY3ZteF91c2JfcGlwZSAqcGlwZSwNCj4gLQkJCQkgICBzdHJ1Y3QgY3ZteF91c2Jf dHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLA0KPiAtCQkJCSAgIHVuaW9uIGN2bXhfdXNiY3hfaGNp bnR4IHVzYmNfaGNpbnQsDQo+IC0JCQkJICAgaW50IGJ1ZmZlcl9zcGFjZV9sZWZ0LA0KPiAtCQkJ CSAgIGludCBieXRlc19pbl9sYXN0X3BhY2tldCkNCj4gLXsNCj4gLQkvKg0KPiAtCSAqIFRoZSBv bmx5IHRpbWUgYSBidWxrIHRyYW5zZmVyIGlzbid0IGNvbXBsZXRlIHdoZW4gaXQgZmluaXNoZXMg d2l0aA0KPiAtCSAqIGFuIEFDSyBpcyBkdXJpbmcgYSBzcGxpdCB0cmFuc2FjdGlvbi4gRm9yIHNw bGl0cyB3ZSBuZWVkIHRvIGNvbnRpbnVlDQo+IC0JICogdGhlIHRyYW5zZmVyIGlmIG1vcmUgZGF0 YSBpcyBuZWVkZWQuDQo+IC0JICovDQo+IC0JaWYgKGN2bXhfdXNiX3BpcGVfbmVlZHNfc3BsaXQo dXNiLCBwaXBlKSkgew0KPiAtCQlpZiAodHJhbnNhY3Rpb24tPnN0YWdlID09IENWTVhfVVNCX1NU QUdFX05PTl9DT05UUk9MKQ0KPiAtCQkJdHJhbnNhY3Rpb24tPnN0YWdlID0NCj4gLQkJCQlDVk1Y X1VTQl9TVEFHRV9OT05fQ09OVFJPTF9TUExJVF9DT01QTEVURTsNCj4gLQkJZWxzZSBpZiAoYnVm ZmVyX3NwYWNlX2xlZnQgJiYNCj4gLQkJCSAoYnl0ZXNfaW5fbGFzdF9wYWNrZXQgPT0gcGlwZS0+ bWF4X3BhY2tldCkpDQo+IC0JCQl0cmFuc2FjdGlvbi0+c3RhZ2UgPSBDVk1YX1VTQl9TVEFHRV9O T05fQ09OVFJPTDsNCj4gLQkJZWxzZQ0KPiAtCQkJY3ZteF91c2JfY29tcGxldGUodXNiLCBwaXBl LCB0cmFuc2FjdGlvbiwNCj4gLQkJCQkJICBDVk1YX1VTQl9TVEFUVVNfT0spOw0KPiAtCX0gZWxz ZSB7DQo+IC0JCWlmICgocGlwZS0+ZGV2aWNlX3NwZWVkID09IENWTVhfVVNCX1NQRUVEX0hJR0gp ICYmDQo+IC0JCSAgICAocGlwZS0+dHJhbnNmZXJfZGlyID09IENWTVhfVVNCX0RJUkVDVElPTl9P VVQpICYmDQo+IC0JCSAgICAodXNiY19oY2ludC5zLm5haykpDQo+IC0JCQlwaXBlLT5mbGFncyB8 PSBDVk1YX1VTQl9QSVBFX0ZMQUdTX05FRURfUElORzsNCj4gLQkJaWYgKCFidWZmZXJfc3BhY2Vf bGVmdCB8fA0KPiAtCQkgICAgKGJ5dGVzX2luX2xhc3RfcGFja2V0IDwgcGlwZS0+bWF4X3BhY2tl dCkpDQo+IC0JCQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uLA0KPiAt CQkJCQkgIENWTVhfVVNCX1NUQVRVU19PSyk7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg dm9pZCBjdm14X3VzYl90cmFuc2Zlcl9pbnRyKHN0cnVjdCBvY3Rlb25faGNkICp1c2IsDQo+IC0J CQkJICAgc3RydWN0IGN2bXhfdXNiX3BpcGUgKnBpcGUsDQo+IC0JCQkJICAgc3RydWN0IGN2bXhf dXNiX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwNCj4gLQkJCQkgICBpbnQgYnVmZmVyX3NwYWNl X2xlZnQsDQo+IC0JCQkJICAgaW50IGJ5dGVzX2luX2xhc3RfcGFja2V0KQ0KPiAtew0KPiAtCWlm IChjdm14X3VzYl9waXBlX25lZWRzX3NwbGl0KHVzYiwgcGlwZSkpIHsNCj4gLQkJaWYgKHRyYW5z YWN0aW9uLT5zdGFnZSA9PSBDVk1YX1VTQl9TVEFHRV9OT05fQ09OVFJPTCkgew0KPiAtCQkJdHJh bnNhY3Rpb24tPnN0YWdlID0NCj4gLQkJCQlDVk1YX1VTQl9TVEFHRV9OT05fQ09OVFJPTF9TUExJ VF9DT01QTEVURTsNCj4gLQkJfSBlbHNlIGlmIChidWZmZXJfc3BhY2VfbGVmdCAmJg0KPiAtCQkJ ICAgKGJ5dGVzX2luX2xhc3RfcGFja2V0ID09IHBpcGUtPm1heF9wYWNrZXQpKSB7DQo+IC0JCQl0 cmFuc2FjdGlvbi0+c3RhZ2UgPSBDVk1YX1VTQl9TVEFHRV9OT05fQ09OVFJPTDsNCj4gLQkJfSBl bHNlIHsNCj4gLQkJCXBpcGUtPm5leHRfdHhfZnJhbWUgKz0gcGlwZS0+aW50ZXJ2YWw7DQo+IC0J CQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uLA0KPiAtCQkJCQkgIENW TVhfVVNCX1NUQVRVU19PSyk7DQo+IC0JCX0NCj4gLQl9IGVsc2UgaWYgKCFidWZmZXJfc3BhY2Vf bGVmdCB8fA0KPiAtCQkgICAoYnl0ZXNfaW5fbGFzdF9wYWNrZXQgPCBwaXBlLT5tYXhfcGFja2V0 KSkgew0KPiAtCQlwaXBlLT5uZXh0X3R4X2ZyYW1lICs9IHBpcGUtPmludGVydmFsOw0KPiAtCQlj dm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uLCBDVk1YX1VTQl9TVEFUVVNf T0spOw0KPiAtCX0NCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgY3ZteF91c2JfdHJhbnNmZXJf aXNvYyhzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiLA0KPiAtCQkJCSAgIHN0cnVjdCBjdm14X3VzYl9w aXBlICpwaXBlLA0KPiAtCQkJCSAgIHN0cnVjdCBjdm14X3VzYl90cmFuc2FjdGlvbiAqdHJhbnNh Y3Rpb24sDQo+IC0JCQkJICAgaW50IGJ1ZmZlcl9zcGFjZV9sZWZ0LA0KPiAtCQkJCSAgIGludCBi eXRlc19pbl9sYXN0X3BhY2tldCwNCj4gLQkJCQkgICBpbnQgYnl0ZXNfdGhpc190cmFuc2ZlcikN Cj4gLXsNCj4gLQlpZiAoY3ZteF91c2JfcGlwZV9uZWVkc19zcGxpdCh1c2IsIHBpcGUpKSB7DQo+ IC0JCS8qDQo+IC0JCSAqIElTT0NIUk9OT1VTIE9VVCBzcGxpdHMgZG9uJ3QgcmVxdWlyZSBhIGNv bXBsZXRlIHNwbGl0IHN0YWdlLg0KPiAtCQkgKiBJbnN0ZWFkIHRoZXkgdXNlIGEgc2VxdWVuY2Ug b2YgYmVnaW4gT1VUIHNwbGl0cyB0byB0cmFuc2Zlcg0KPiAtCQkgKiB0aGUgZGF0YSAxODggYnl0 ZXMgYXQgYSB0aW1lLiBPbmNlIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZSwNCj4gLQkJICogdGhl IHBpcGUgc2xlZXBzIHVudGlsIHRoZSBuZXh0IHNjaGVkdWxlIGludGVydmFsLg0KPiAtCQkgKi8N Cj4gLQkJaWYgKHBpcGUtPnRyYW5zZmVyX2RpciA9PSBDVk1YX1VTQl9ESVJFQ1RJT05fT1VUKSB7 DQo+IC0JCQkvKg0KPiAtCQkJICogSWYgbm8gc3BhY2UgbGVmdCBvciB0aGlzIHdhc24ndCBhIG1h eCBzaXplIHBhY2tldA0KPiAtCQkJICogdGhlbiB0aGlzIHRyYW5zZmVyIGlzIGNvbXBsZXRlLiBP dGhlcndpc2Ugc3RhcnQgaXQNCj4gLQkJCSAqIGFnYWluIHRvIHNlbmQgdGhlIG5leHQgMTg4IGJ5 dGVzDQo+IC0JCQkgKi8NCj4gLQkJCWlmICghYnVmZmVyX3NwYWNlX2xlZnQgfHwgKGJ5dGVzX3Ro aXNfdHJhbnNmZXIgPCAxODgpKSB7DQo+IC0JCQkJcGlwZS0+bmV4dF90eF9mcmFtZSArPSBwaXBl LT5pbnRlcnZhbDsNCj4gLQkJCQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0 aW9uLA0KPiAtCQkJCQkJICBDVk1YX1VTQl9TVEFUVVNfT0spOw0KPiAtCQkJfQ0KPiAtCQkJcmV0 dXJuOw0KPiAtCQl9DQo+IC0JCWlmICh0cmFuc2FjdGlvbi0+c3RhZ2UgPT0NCj4gLQkJICAgIENW TVhfVVNCX1NUQUdFX05PTl9DT05UUk9MX1NQTElUX0NPTVBMRVRFKSB7DQo+IC0JCQkvKg0KPiAt CQkJICogV2UgYXJlIGluIHRoZSBpbmNvbWluZyBkYXRhIHBoYXNlLiBLZWVwIGdldHRpbmcgZGF0 YQ0KPiAtCQkJICogdW50aWwgd2UgcnVuIG91dCBvZiBzcGFjZSBvciBnZXQgYSBzbWFsbCBwYWNr ZXQNCj4gLQkJCSAqLw0KPiAtCQkJaWYgKChidWZmZXJfc3BhY2VfbGVmdCA9PSAwKSB8fA0KPiAt CQkJICAgIChieXRlc19pbl9sYXN0X3BhY2tldCA8IHBpcGUtPm1heF9wYWNrZXQpKSB7DQo+IC0J CQkJcGlwZS0+bmV4dF90eF9mcmFtZSArPSBwaXBlLT5pbnRlcnZhbDsNCj4gLQkJCQljdm14X3Vz Yl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uLA0KPiAtCQkJCQkJICBDVk1YX1VTQl9T VEFUVVNfT0spOw0KPiAtCQkJfQ0KPiAtCQl9IGVsc2Ugew0KPiAtCQkJdHJhbnNhY3Rpb24tPnN0 YWdlID0NCj4gLQkJCQlDVk1YX1VTQl9TVEFHRV9OT05fQ09OVFJPTF9TUExJVF9DT01QTEVURTsN Cj4gLQkJfQ0KPiAtCX0gZWxzZSB7DQo+IC0JCXBpcGUtPm5leHRfdHhfZnJhbWUgKz0gcGlwZS0+ aW50ZXJ2YWw7DQo+IC0JCWN2bXhfdXNiX2NvbXBsZXRlKHVzYiwgcGlwZSwgdHJhbnNhY3Rpb24s IENWTVhfVVNCX1NUQVRVU19PSyk7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC0vKioNCj4gLSAqIFBv bGwgYSBjaGFubmVsIGZvciBzdGF0dXMNCj4gLSAqDQo+IC0gKiBAdXNiOiAgICAgVVNCIGRldmlj ZQ0KPiAtICogQGNoYW5uZWw6IENoYW5uZWwgdG8gcG9sbA0KPiAtICoNCj4gLSAqIFJldHVybnM6 IFplcm8gb24gc3VjY2Vzcw0KPiAtICovDQo+IC1zdGF0aWMgaW50IGN2bXhfdXNiX3BvbGxfY2hh bm5lbChzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiLCBpbnQgY2hhbm5lbCkNCj4gLXsNCj4gLQlzdHJ1 Y3QgdXNiX2hjZCAqaGNkID0gb2N0ZW9uX3RvX2hjZCh1c2IpOw0KPiAtCXN0cnVjdCBkZXZpY2Ug KmRldiA9IGhjZC0+c2VsZi5jb250cm9sbGVyOw0KPiAtCXVuaW9uIGN2bXhfdXNiY3hfaGNpbnR4 IHVzYmNfaGNpbnQ7DQo+IC0JdW5pb24gY3ZteF91c2JjeF9oY3RzaXp4IHVzYmNfaGN0c2l6Ow0K PiAtCXVuaW9uIGN2bXhfdXNiY3hfaGNjaGFyeCB1c2JjX2hjY2hhcjsNCj4gLQlzdHJ1Y3QgY3Zt eF91c2JfcGlwZSAqcGlwZTsNCj4gLQlzdHJ1Y3QgY3ZteF91c2JfdHJhbnNhY3Rpb24gKnRyYW5z YWN0aW9uOw0KPiAtCWludCBieXRlc190aGlzX3RyYW5zZmVyOw0KPiAtCWludCBieXRlc19pbl9s YXN0X3BhY2tldDsNCj4gLQlpbnQgcGFja2V0c19wcm9jZXNzZWQ7DQo+IC0JaW50IGJ1ZmZlcl9z cGFjZV9sZWZ0Ow0KPiAtDQo+IC0JLyogUmVhZCB0aGUgaW50ZXJydXB0IHN0YXR1cyBiaXRzIGZv ciB0aGUgY2hhbm5lbCAqLw0KPiAtCXVzYmNfaGNpbnQudTMyID0gY3ZteF91c2JfcmVhZF9jc3Iz Mih1c2IsDQo+IC0JCQkJQ1ZNWF9VU0JDWF9IQ0lOVFgoY2hhbm5lbCwgdXNiLT5pbmRleCkpOw0K PiAtDQo+IC0JaWYgKHVzYi0+aW5pdF9mbGFncyAmIENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1Nf Tk9fRE1BKSB7DQo+IC0JCXVzYmNfaGNjaGFyLnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIodXNi LA0KPiAtCQkJCUNWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLCB1c2ItPmluZGV4KSk7DQo+IC0N Cj4gLQkJaWYgKHVzYmNfaGNjaGFyLnMuY2hlbmEgJiYgdXNiY19oY2NoYXIucy5jaGRpcykgew0K PiAtCQkJLyoNCj4gLQkJCSAqIFRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIENOMzFYWCB3aGlj aCBjYW4gY2F1c2UNCj4gLQkJCSAqIGludGVycnVwdCBJTiB0cmFuc2ZlcnMgdG8gZ2V0IHN0dWNr IHVudGlsIHdlIGRvIGENCj4gLQkJCSAqIHdyaXRlIG9mIEhDQ0hBUlggd2l0aG91dCBjaGFuZ2lu ZyB0aGluZ3MNCj4gLQkJCSAqLw0KPiAtCQkJY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNiLA0KPiAt CQkJCQkgICAgIENWTVhfVVNCQ1hfSENDSEFSWChjaGFubmVsLA0KPiAtCQkJCQkJCQl1c2ItPmlu ZGV4KSwNCj4gLQkJCQkJICAgICB1c2JjX2hjY2hhci51MzIpOw0KPiAtCQkJcmV0dXJuIDA7DQo+ IC0JCX0NCj4gLQ0KPiAtCQkvKg0KPiAtCQkgKiBJbiBub24gRE1BIG1vZGUgdGhlIGNoYW5uZWxz IGRvbid0IGhhbHQgdGhlbXNlbHZlcy4gV2UgbmVlZA0KPiAtCQkgKiB0byBtYW51YWxseSBkaXNh YmxlIGNoYW5uZWxzIHRoYXQgYXJlIGxlZnQgcnVubmluZw0KPiAtCQkgKi8NCj4gLQkJaWYgKCF1 c2JjX2hjaW50LnMuY2hobHRkKSB7DQo+IC0JCQlpZiAodXNiY19oY2NoYXIucy5jaGVuYSkgew0K PiAtCQkJCXVuaW9uIGN2bXhfdXNiY3hfaGNpbnRtc2t4IGhjaW50bXNrOw0KPiAtCQkJCS8qIERp c2FibGUgYWxsIGludGVycnVwdHMgZXhjZXB0IENISExURCAqLw0KPiAtCQkJCWhjaW50bXNrLnUz MiA9IDA7DQo+IC0JCQkJaGNpbnRtc2sucy5jaGhsdGRtc2sgPSAxOw0KPiAtCQkJCWN2bXhfdXNi X3dyaXRlX2NzcjMyKHVzYiwNCj4gLQkJCQkJCSAgICAgQ1ZNWF9VU0JDWF9IQ0lOVE1TS1goY2hh bm5lbCwgdXNiLT5pbmRleCksDQo+IC0JCQkJCQkgICAgIGhjaW50bXNrLnUzMik7DQo+IC0JCQkJ dXNiY19oY2NoYXIucy5jaGRpcyA9IDE7DQo+IC0JCQkJY3ZteF91c2Jfd3JpdGVfY3NyMzIodXNi LA0KPiAtCQkJCQkJICAgICBDVk1YX1VTQkNYX0hDQ0hBUlgoY2hhbm5lbCwgdXNiLT5pbmRleCks DQo+IC0JCQkJCQkgICAgIHVzYmNfaGNjaGFyLnUzMik7DQo+IC0JCQkJcmV0dXJuIDA7DQo+IC0J CQl9IGVsc2UgaWYgKHVzYmNfaGNpbnQucy54ZmVyY29tcGwpIHsNCj4gLQkJCQkvKg0KPiAtCQkJ CSAqIFN1Y2Nlc3NmdWwgSU4vT1VUIHdpdGggdHJhbnNmZXIgY29tcGxldGUuDQo+IC0JCQkJICog Q2hhbm5lbCBoYWx0IGlzbid0IG5lZWRlZC4NCj4gLQkJCQkgKi8NCj4gLQkJCX0gZWxzZSB7DQo+ IC0JCQkJZGV2X2VycihkZXYsICJVU0IlZDogQ2hhbm5lbCAlZCBpbnRlcnJ1cHQgd2l0aG91dCBo YWx0XG4iLA0KPiAtCQkJCQl1c2ItPmluZGV4LCBjaGFubmVsKTsNCj4gLQkJCQlyZXR1cm4gMDsN Cj4gLQkJCX0NCj4gLQkJfQ0KPiAtCX0gZWxzZSB7DQo+IC0JCS8qDQo+IC0JCSAqIFRoZXJlIGlz IGFyZSBubyBpbnRlcnJ1cHRzIHRoYXQgd2UgbmVlZCB0byBwcm9jZXNzIHdoZW4gdGhlDQo+IC0J CSAqIGNoYW5uZWwgaXMgc3RpbGwgcnVubmluZw0KPiAtCQkgKi8NCj4gLQkJaWYgKCF1c2JjX2hj aW50LnMuY2hobHRkKQ0KPiAtCQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAtDQo+IC0JLyogRGlzYWJs ZSB0aGUgY2hhbm5lbCBpbnRlcnJ1cHRzIG5vdyB0aGF0IGl0IGlzIGRvbmUgKi8NCj4gLQljdm14 X3VzYl93cml0ZV9jc3IzMih1c2IsIENWTVhfVVNCQ1hfSENJTlRNU0tYKGNoYW5uZWwsIHVzYi0+ aW5kZXgpLCAwKTsNCj4gLQl1c2ItPmlkbGVfaGFyZHdhcmVfY2hhbm5lbHMgfD0gKDEgPDwgY2hh bm5lbCk7DQo+IC0NCj4gLQkvKiBNYWtlIHN1cmUgdGhpcyBjaGFubmVsIGlzIHRpZWQgdG8gYSB2 YWxpZCBwaXBlICovDQo+IC0JcGlwZSA9IHVzYi0+cGlwZV9mb3JfY2hhbm5lbFtjaGFubmVsXTsN Cj4gLQlwcmVmZXRjaChwaXBlKTsNCj4gLQlpZiAoIXBpcGUpDQo+IC0JCXJldHVybiAwOw0KPiAt CXRyYW5zYWN0aW9uID0gbGlzdF9maXJzdF9lbnRyeSgmcGlwZS0+dHJhbnNhY3Rpb25zLA0KPiAt CQkJCSAgICAgICB0eXBlb2YoKnRyYW5zYWN0aW9uKSwNCj4gLQkJCQkgICAgICAgbm9kZSk7DQo+ IC0JcHJlZmV0Y2godHJhbnNhY3Rpb24pOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBEaXNjb25uZWN0 IHRoaXMgcGlwZSBmcm9tIHRoZSBIVyBjaGFubmVsLiBMYXRlciB0aGUgc2NoZWR1bGUNCj4gLQkg KiBmdW5jdGlvbiB3aWxsIGZpZ3VyZSBvdXQgd2hpY2ggcGlwZSBuZWVkcyB0byBnbw0KPiAtCSAq Lw0KPiAtCXVzYi0+cGlwZV9mb3JfY2hhbm5lbFtjaGFubmVsXSA9IE5VTEw7DQo+IC0JcGlwZS0+ ZmxhZ3MgJj0gfkNWTVhfVVNCX1BJUEVfRkxBR1NfU0NIRURVTEVEOw0KPiAtDQo+IC0JLyoNCj4g LQkgKiBSZWFkIHRoZSBjaGFubmVsIGNvbmZpZyBpbmZvIHNvIHdlIGNhbiBmaWd1cmUgb3V0IGhv dyBtdWNoIGRhdGENCj4gLQkgKiB0cmFuc2ZlcnJlZA0KPiAtCSAqLw0KPiAtCXVzYmNfaGNjaGFy LnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJQ1ZNWF9VU0JDWF9IQ0NIQVJY KGNoYW5uZWwsIHVzYi0+aW5kZXgpKTsNCj4gLQl1c2JjX2hjdHNpei51MzIgPSBjdm14X3VzYl9y ZWFkX2NzcjMyKHVzYiwNCj4gLQkJCUNWTVhfVVNCQ1hfSENUU0laWChjaGFubmVsLCB1c2ItPmlu ZGV4KSk7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIENhbGN1bGF0aW5nIHRoZSBudW1iZXIgb2YgYnl0 ZXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkIGlzIGRlcGVuZGVudA0KPiAtCSAqIG9uIHRoZSB0 cmFuc2ZlciBkaXJlY3Rpb24NCj4gLQkgKi8NCj4gLQlwYWNrZXRzX3Byb2Nlc3NlZCA9IHRyYW5z YWN0aW9uLT5wa3RjbnQgLSB1c2JjX2hjdHNpei5zLnBrdGNudDsNCj4gLQlpZiAodXNiY19oY2No YXIucy5lcGRpcikgew0KPiAtCQkvKg0KPiAtCQkgKiBJTiB0cmFuc2FjdGlvbnMgYXJlIGVhc3ku IEZvciBldmVyeSBieXRlIHJlY2VpdmVkIHRoZQ0KPiAtCQkgKiBoYXJkd2FyZSBkZWNyZW1lbnRz IHhmZXJzaXplLiBBbGwgd2UgbmVlZCB0byBkbyBpcyBzdWJ0cmFjdA0KPiAtCQkgKiB0aGUgY3Vy cmVudCB2YWx1ZSBvZiB4ZmVyc2l6ZSBmcm9tIGl0cyBzdGFydGluZyB2YWx1ZSBhbmQgd2UNCj4g LQkJICoga25vdyBob3cgbWFueSBieXRlcyB3ZXJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlcg0KPiAt CQkgKi8NCj4gLQkJYnl0ZXNfdGhpc190cmFuc2ZlciA9IHRyYW5zYWN0aW9uLT54ZmVyc2l6ZSAt DQo+IC0JCQl1c2JjX2hjdHNpei5zLnhmZXJzaXplOw0KPiAtCX0gZWxzZSB7DQo+IC0JCS8qDQo+ IC0JCSAqIE9VVCB0cmFuc2FjdGlvbiBkb24ndCBkZWNyZW1lbnQgeGZlcnNpemUuIEluc3RlYWQg cGt0Y250IGlzDQo+IC0JCSAqIGRlY3JlbWVudGVkIG9uIGV2ZXJ5IHN1Y2Nlc3NmdWwgcGFja2V0 IHNlbmQuIFRoZSBoYXJkd2FyZQ0KPiAtCQkgKiBkb2VzIHRoaXMgd2hlbiBpdCByZWNlaXZlcyBh biBBQ0ssIG9yIE5ZRVQuIElmIGl0IGRvZXNuJ3QNCj4gLQkJICogcmVjZWl2ZSBvbmUgb2YgdGhl c2UgcmVzcG9uc2VzIHBrdGNudCBkb2Vzbid0IGNoYW5nZQ0KPiAtCQkgKi8NCj4gLQkJYnl0ZXNf dGhpc190cmFuc2ZlciA9IHBhY2tldHNfcHJvY2Vzc2VkICogdXNiY19oY2NoYXIucy5tcHM7DQo+ IC0JCS8qDQo+IC0JCSAqIFRoZSBsYXN0IHBhY2tldCBtYXkgbm90IGJlIGEgZnVsbCB0cmFuc2Zl ciBpZiB3ZSBkaWRuJ3QgaGF2ZQ0KPiAtCQkgKiBlbm91Z2ggZGF0YQ0KPiAtCQkgKi8NCj4gLQkJ aWYgKGJ5dGVzX3RoaXNfdHJhbnNmZXIgPiB0cmFuc2FjdGlvbi0+eGZlcnNpemUpDQo+IC0JCQli eXRlc190aGlzX3RyYW5zZmVyID0gdHJhbnNhY3Rpb24tPnhmZXJzaXplOw0KPiAtCX0NCj4gLQkv KiBGaWd1cmUgb3V0IGhvdyBtYW55IGJ5dGVzIHdlcmUgaW4gdGhlIGxhc3QgcGFja2V0IG9mIHRo ZSB0cmFuc2ZlciAqLw0KPiAtCWlmIChwYWNrZXRzX3Byb2Nlc3NlZCkNCj4gLQkJYnl0ZXNfaW5f bGFzdF9wYWNrZXQgPSBieXRlc190aGlzX3RyYW5zZmVyIC0NCj4gLQkJCShwYWNrZXRzX3Byb2Nl c3NlZCAtIDEpICogdXNiY19oY2NoYXIucy5tcHM7DQo+IC0JZWxzZQ0KPiAtCQlieXRlc19pbl9s YXN0X3BhY2tldCA9IGJ5dGVzX3RoaXNfdHJhbnNmZXI7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIEFz IGEgc3BlY2lhbCBjYXNlLCBzZXR1cCB0cmFuc2FjdGlvbnMgb3V0cHV0IHRoZSBzZXR1cCBoZWFk ZXIsIG5vdA0KPiAtCSAqIHRoZSB1c2VyJ3MgZGF0YS4gRm9yIHRoaXMgcmVhc29uIHdlIGRvbid0 IGNvdW50IHNldHVwIGRhdGEgYXMgYnl0ZXMNCj4gLQkgKiB0cmFuc2ZlcnJlZA0KPiAtCSAqLw0K PiAtCWlmICgodHJhbnNhY3Rpb24tPnN0YWdlID09IENWTVhfVVNCX1NUQUdFX1NFVFVQKSB8fA0K PiAtCSAgICAodHJhbnNhY3Rpb24tPnN0YWdlID09IENWTVhfVVNCX1NUQUdFX1NFVFVQX1NQTElU X0NPTVBMRVRFKSkNCj4gLQkJYnl0ZXNfdGhpc190cmFuc2ZlciA9IDA7DQo+IC0NCj4gLQkvKg0K PiAtCSAqIEFkZCB0aGUgYnl0ZXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJ1bm5pbmcgdG90YWwuIEl0 IGlzIGltcG9ydGFudCB0aGF0DQo+IC0JICogYnl0ZXNfdGhpc190cmFuc2ZlciBkb2Vzbid0IGNv dW50IGFueSBkYXRhIHRoYXQgbmVlZHMgdG8gYmUNCj4gLQkgKiByZXRyYW5zbWl0dGVkDQo+IC0J ICovDQo+IC0JdHJhbnNhY3Rpb24tPmFjdHVhbF9ieXRlcyArPSBieXRlc190aGlzX3RyYW5zZmVy Ow0KPiAtCWlmICh0cmFuc2FjdGlvbi0+dHlwZSA9PSBDVk1YX1VTQl9UUkFOU0ZFUl9JU09DSFJP Tk9VUykNCj4gLQkJYnVmZmVyX3NwYWNlX2xlZnQgPSB0cmFuc2FjdGlvbi0+aXNvX3BhY2tldHNb MF0ubGVuZ3RoIC0NCj4gLQkJCXRyYW5zYWN0aW9uLT5hY3R1YWxfYnl0ZXM7DQo+IC0JZWxzZQ0K PiAtCQlidWZmZXJfc3BhY2VfbGVmdCA9IHRyYW5zYWN0aW9uLT5idWZmZXJfbGVuZ3RoIC0NCj4g LQkJCXRyYW5zYWN0aW9uLT5hY3R1YWxfYnl0ZXM7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFdlIG5l ZWQgdG8gcmVtZW1iZXIgdGhlIFBJRCB0b2dnbGUgc3RhdGUgZm9yIHRoZSBuZXh0IHRyYW5zYWN0 aW9uLg0KPiAtCSAqIFRoZSBoYXJkd2FyZSBhbHJlYWR5IHVwZGF0ZWQgaXQgZm9yIHRoZSBuZXh0 IHRyYW5zYWN0aW9uDQo+IC0JICovDQo+IC0JcGlwZS0+cGlkX3RvZ2dsZSA9ICEodXNiY19oY3Rz aXoucy5waWQgPT0gMCk7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIEZvciBoaWdoIHNwZWVkIGJ1bGsg b3V0LCBhc3N1bWUgdGhlIG5leHQgdHJhbnNhY3Rpb24gd2lsbCBuZWVkIHRvIGRvDQo+IC0JICog YSBwaW5nIGJlZm9yZSBwcm9jZWVkaW5nLiBJZiB0aGlzIGlzbid0IHRydWUgdGhlIEFDSyBwcm9j ZXNzaW5nIGJlbG93DQo+IC0JICogd2lsbCBjbGVhciB0aGlzIGZsYWcNCj4gLQkgKi8NCj4gLQlp ZiAoKHBpcGUtPmRldmljZV9zcGVlZCA9PSBDVk1YX1VTQl9TUEVFRF9ISUdIKSAmJg0KPiAtCSAg ICAocGlwZS0+dHJhbnNmZXJfdHlwZSA9PSBDVk1YX1VTQl9UUkFOU0ZFUl9CVUxLKSAmJg0KPiAt CSAgICAocGlwZS0+dHJhbnNmZXJfZGlyID09IENWTVhfVVNCX0RJUkVDVElPTl9PVVQpKQ0KPiAt CQlwaXBlLT5mbGFncyB8PSBDVk1YX1VTQl9QSVBFX0ZMQUdTX05FRURfUElORzsNCj4gLQ0KPiAt CWlmIChXQVJOX09OX09OQ0UoYnl0ZXNfdGhpc190cmFuc2ZlciA8IDApKSB7DQo+IC0JCS8qDQo+ IC0JCSAqIEluIHNvbWUgcmFyZSBjYXNlcyB0aGUgRE1BIGVuZ2luZSBzZWVtcyB0byBnZXQgc3R1 Y2sgYW5kDQo+IC0JCSAqIGtlZXBzIHN1YnN0cmFjdGluZyBzYW1lIGJ5dGUgY291bnQgb3ZlciBh bmQgb3ZlciBhZ2Fpbi4gSW4NCj4gLQkJICogc3VjaCBjYXNlIHdlIGp1c3QgbmVlZCB0byBmYWls IGV2ZXJ5IHRyYW5zYWN0aW9uLg0KPiAtCQkgKi8NCj4gLQkJY3ZteF91c2JfY29tcGxldGUodXNi LCBwaXBlLCB0cmFuc2FjdGlvbiwNCj4gLQkJCQkgIENWTVhfVVNCX1NUQVRVU19FUlJPUik7DQo+ IC0JCXJldHVybiAwOw0KPiAtCX0NCj4gLQ0KPiAtCWlmICh1c2JjX2hjaW50LnMuc3RhbGwpIHsN Cj4gLQkJLyoNCj4gLQkJICogU1RBTEwgYXMgYSByZXNwb25zZSBtZWFucyB0aGlzIHRyYW5zYWN0 aW9uIGNhbm5vdCBiZQ0KPiAtCQkgKiBjb21wbGV0ZWQgYmVjYXVzZSB0aGUgZGV2aWNlIGNhbid0 IHByb2Nlc3MgdHJhbnNhY3Rpb25zLiBUZWxsDQo+IC0JCSAqIHRoZSB1c2VyLiBBbnkgZGF0YSB0 aGF0IHdhcyB0cmFuc2ZlcnJlZCB3aWxsIGJlIGNvdW50ZWQgb24NCj4gLQkJICogdGhlIGFjdHVh bCBieXRlcyB0cmFuc2ZlcnJlZA0KPiAtCQkgKi8NCj4gLQkJcGlwZS0+cGlkX3RvZ2dsZSA9IDA7 DQo+IC0JCWN2bXhfdXNiX2NvbXBsZXRlKHVzYiwgcGlwZSwgdHJhbnNhY3Rpb24sDQo+IC0JCQkJ ICBDVk1YX1VTQl9TVEFUVVNfU1RBTEwpOw0KPiAtCX0gZWxzZSBpZiAodXNiY19oY2ludC5zLnhh Y3RlcnIpIHsNCj4gLQkJLyoNCj4gLQkJICogWGFjdEVyciBhcyBhIHJlc3BvbnNlIG1lYW5zIHRo ZSBkZXZpY2Ugc2lnbmFsZWQNCj4gLQkJICogc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIHRyYW5z ZmVyLiBGb3IgZXhhbXBsZSwgUElEDQo+IC0JCSAqIHRvZ2dsZSBlcnJvcnMgY2F1c2UgdGhlc2Uu DQo+IC0JCSAqLw0KPiAtCQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9u LA0KPiAtCQkJCSAgQ1ZNWF9VU0JfU1RBVFVTX1hBQ1RFUlIpOw0KPiAtCX0gZWxzZSBpZiAodXNi Y19oY2ludC5zLmJibGVycikgew0KPiAtCQkvKiBCYWJibGUgRXJyb3IgKEJibEVycikgKi8NCj4g LQkJY3ZteF91c2JfY29tcGxldGUodXNiLCBwaXBlLCB0cmFuc2FjdGlvbiwNCj4gLQkJCQkgIENW TVhfVVNCX1NUQVRVU19CQUJCTEVFUlIpOw0KPiAtCX0gZWxzZSBpZiAodXNiY19oY2ludC5zLmRh dGF0Z2xlcnIpIHsNCj4gLQkJLyogRGF0YSB0b2dnbGUgZXJyb3IgKi8NCj4gLQkJY3ZteF91c2Jf Y29tcGxldGUodXNiLCBwaXBlLCB0cmFuc2FjdGlvbiwNCj4gLQkJCQkgIENWTVhfVVNCX1NUQVRV U19EQVRBVEdMRVJSKTsNCj4gLQl9IGVsc2UgaWYgKHVzYmNfaGNpbnQucy5ueWV0KSB7DQo+IC0J CS8qDQo+IC0JCSAqIE5ZRVQgYXMgYSByZXNwb25zZSBpcyBvbmx5IGFsbG93ZWQgaW4gdGhyZWUg Y2FzZXM6IGFzIGENCj4gLQkJICogcmVzcG9uc2UgdG8gYSBwaW5nLCBhcyBhIHJlc3BvbnNlIHRv IGEgc3BsaXQgdHJhbnNhY3Rpb24sIGFuZA0KPiAtCQkgKiBhcyBhIHJlc3BvbnNlIHRvIGEgYnVs ayBvdXQuIFRoZSBwaW5nIGNhc2UgaXMgaGFuZGxlZCBieQ0KPiAtCQkgKiBoYXJkd2FyZSwgc28g d2Ugb25seSBoYXZlIHNwbGl0cyBhbmQgYnVsayBvdXQNCj4gLQkJICovDQo+IC0JCWlmICghY3Zt eF91c2JfcGlwZV9uZWVkc19zcGxpdCh1c2IsIHBpcGUpKSB7DQo+IC0JCQl0cmFuc2FjdGlvbi0+ cmV0cmllcyA9IDA7DQo+IC0JCQkvKg0KPiAtCQkJICogSWYgdGhlcmUgaXMgbW9yZSBkYXRhIHRv IGdvIHRoZW4gd2UgbmVlZCB0byB0cnkNCj4gLQkJCSAqIGFnYWluLiBPdGhlcndpc2UgdGhpcyB0 cmFuc2FjdGlvbiBpcyBjb21wbGV0ZQ0KPiAtCQkJICovDQo+IC0JCQlpZiAoKGJ1ZmZlcl9zcGFj ZV9sZWZ0ID09IDApIHx8DQo+IC0JCQkgICAgKGJ5dGVzX2luX2xhc3RfcGFja2V0IDwgcGlwZS0+ bWF4X3BhY2tldCkpDQo+IC0JCQkJY3ZteF91c2JfY29tcGxldGUodXNiLCBwaXBlLA0KPiAtCQkJ CQkJICB0cmFuc2FjdGlvbiwNCj4gLQkJCQkJCSAgQ1ZNWF9VU0JfU1RBVFVTX09LKTsNCj4gLQkJ fSBlbHNlIHsNCj4gLQkJCS8qDQo+IC0JCQkgKiBTcGxpdCB0cmFuc2FjdGlvbnMgcmV0cnkgdGhl IHNwbGl0IGNvbXBsZXRlIDQgdGltZXMNCj4gLQkJCSAqIHRoZW4gcmV3aW5kIHRvIHRoZSBzdGFy dCBzcGxpdCBhbmQgZG8gdGhlIGVudGlyZQ0KPiAtCQkJICogdHJhbnNhY3Rpb25zIGFnYWluDQo+ IC0JCQkgKi8NCj4gLQkJCXRyYW5zYWN0aW9uLT5yZXRyaWVzKys7DQo+IC0JCQlpZiAoKHRyYW5z YWN0aW9uLT5yZXRyaWVzICYgMHgzKSA9PSAwKSB7DQo+IC0JCQkJLyoNCj4gLQkJCQkgKiBSZXdp bmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNhY3Rpb24gYnkNCj4gLQkJCQkgKiBhbmRp bmcgb2ZmIHRoZSBzcGxpdCBjb21wbGV0ZSBiaXQNCj4gLQkJCQkgKi8NCj4gLQkJCQl0cmFuc2Fj dGlvbi0+c3RhZ2UgJj0gfjE7DQo+IC0JCQkJcGlwZS0+c3BsaXRfc2NfZnJhbWUgPSAtMTsNCj4g LQkJCX0NCj4gLQkJfQ0KPiAtCX0gZWxzZSBpZiAodXNiY19oY2ludC5zLmFjaykgew0KPiAtCQl0 cmFuc2FjdGlvbi0+cmV0cmllcyA9IDA7DQo+IC0JCS8qDQo+IC0JCSAqIFRoZSBBQ0sgYml0IGNh biBvbmx5IGJlIGNoZWNrZWQgYWZ0ZXIgdGhlIG90aGVyIGVycm9yIGJpdHMuDQo+IC0JCSAqIFRo aXMgaXMgYmVjYXVzZSBhIG11bHRpIHBhY2tldCB0cmFuc2ZlciBtYXkgc3VjY2VlZCBpbiBhDQo+ IC0JCSAqIG51bWJlciBvZiBwYWNrZXRzIGFuZCB0aGVuIGdldCBhIGRpZmZlcmVudCByZXNwb25z ZSBvbiB0aGUNCj4gLQkJICogbGFzdCBwYWNrZXQuIEluIHRoaXMgY2FzZSBib3RoIEFDSyBhbmQg dGhlIGxhc3QgcmVzcG9uc2UgYml0DQo+IC0JCSAqIHdpbGwgYmUgc2V0LiBJZiBub25lIG9mIHRo ZSBvdGhlciByZXNwb25zZSBiaXRzIGlzIHNldCwgdGhlbg0KPiAtCQkgKiB0aGUgbGFzdCBwYWNr ZXQgbXVzdCBoYXZlIGJlZW4gYW4gQUNLDQo+IC0JCSAqDQo+IC0JCSAqIFNpbmNlIHdlIGdvdCBh biBBQ0ssIHdlIGtub3cgd2UgZG9uJ3QgbmVlZCB0byBkbyBhIHBpbmcgb24NCj4gLQkJICogdGhp cyBwaXBlDQo+IC0JCSAqLw0KPiAtCQlwaXBlLT5mbGFncyAmPSB+Q1ZNWF9VU0JfUElQRV9GTEFH U19ORUVEX1BJTkc7DQo+IC0NCj4gLQkJc3dpdGNoICh0cmFuc2FjdGlvbi0+dHlwZSkgew0KPiAt CQljYXNlIENWTVhfVVNCX1RSQU5TRkVSX0NPTlRST0w6DQo+IC0JCQljdm14X3VzYl90cmFuc2Zl cl9jb250cm9sKHVzYiwgcGlwZSwgdHJhbnNhY3Rpb24sDQo+IC0JCQkJCQkgIHVzYmNfaGNjaGFy LA0KPiAtCQkJCQkJICBidWZmZXJfc3BhY2VfbGVmdCwNCj4gLQkJCQkJCSAgYnl0ZXNfaW5fbGFz dF9wYWNrZXQpOw0KPiAtCQkJYnJlYWs7DQo+IC0JCWNhc2UgQ1ZNWF9VU0JfVFJBTlNGRVJfQlVM SzoNCj4gLQkJCWN2bXhfdXNiX3RyYW5zZmVyX2J1bGsodXNiLCBwaXBlLCB0cmFuc2FjdGlvbiwN Cj4gLQkJCQkJICAgICAgIHVzYmNfaGNpbnQsIGJ1ZmZlcl9zcGFjZV9sZWZ0LA0KPiAtCQkJCQkg ICAgICAgYnl0ZXNfaW5fbGFzdF9wYWNrZXQpOw0KPiAtCQkJYnJlYWs7DQo+IC0JCWNhc2UgQ1ZN WF9VU0JfVFJBTlNGRVJfSU5URVJSVVBUOg0KPiAtCQkJY3ZteF91c2JfdHJhbnNmZXJfaW50cih1 c2IsIHBpcGUsIHRyYW5zYWN0aW9uLA0KPiAtCQkJCQkgICAgICAgYnVmZmVyX3NwYWNlX2xlZnQs DQo+IC0JCQkJCSAgICAgICBieXRlc19pbl9sYXN0X3BhY2tldCk7DQo+IC0JCQlicmVhazsNCj4g LQkJY2FzZSBDVk1YX1VTQl9UUkFOU0ZFUl9JU09DSFJPTk9VUzoNCj4gLQkJCWN2bXhfdXNiX3Ry YW5zZmVyX2lzb2ModXNiLCBwaXBlLCB0cmFuc2FjdGlvbiwNCj4gLQkJCQkJICAgICAgIGJ1ZmZl cl9zcGFjZV9sZWZ0LA0KPiAtCQkJCQkgICAgICAgYnl0ZXNfaW5fbGFzdF9wYWNrZXQsDQo+IC0J CQkJCSAgICAgICBieXRlc190aGlzX3RyYW5zZmVyKTsNCj4gLQkJCWJyZWFrOw0KPiAtCQl9DQo+ IC0JfSBlbHNlIGlmICh1c2JjX2hjaW50LnMubmFrKSB7DQo+IC0JCS8qDQo+IC0JCSAqIElmIHRo aXMgd2FzIGEgc3BsaXQgdGhlbiBjbGVhciBvdXIgc3BsaXQgaW4gcHJvZ3Jlc3MgbWFya2VyLg0K PiAtCQkgKi8NCj4gLQkJaWYgKHVzYi0+YWN0aXZlX3NwbGl0ID09IHRyYW5zYWN0aW9uKQ0KPiAt CQkJdXNiLT5hY3RpdmVfc3BsaXQgPSBOVUxMOw0KPiAtCQkvKg0KPiAtCQkgKiBOQUsgYXMgYSBy ZXNwb25zZSBtZWFucyB0aGUgZGV2aWNlIGNvdWxkbid0IGFjY2VwdCB0aGUNCj4gLQkJICogdHJh bnNhY3Rpb24sIGJ1dCBpdCBzaG91bGQgYmUgcmV0cmllZCBpbiB0aGUgZnV0dXJlLiBSZXdpbmQN Cj4gLQkJICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJhbnNhY3Rpb24gYnkgYW5kaW5nIG9m ZiB0aGUgc3BsaXQNCj4gLQkJICogY29tcGxldGUgYml0LiBSZXRyeSBpbiB0aGUgbmV4dCBpbnRl cnZhbA0KPiAtCQkgKi8NCj4gLQkJdHJhbnNhY3Rpb24tPnJldHJpZXMgPSAwOw0KPiAtCQl0cmFu c2FjdGlvbi0+c3RhZ2UgJj0gfjE7DQo+IC0JCXBpcGUtPm5leHRfdHhfZnJhbWUgKz0gcGlwZS0+ aW50ZXJ2YWw7DQo+IC0JCWlmIChwaXBlLT5uZXh0X3R4X2ZyYW1lIDwgdXNiLT5mcmFtZV9udW1i ZXIpDQo+IC0JCQlwaXBlLT5uZXh0X3R4X2ZyYW1lID0gdXNiLT5mcmFtZV9udW1iZXIgKw0KPiAt CQkJCXBpcGUtPmludGVydmFsIC0NCj4gLQkJCQkodXNiLT5mcmFtZV9udW1iZXIgLSBwaXBlLT5u ZXh0X3R4X2ZyYW1lKSAlDQo+IC0JCQkJcGlwZS0+aW50ZXJ2YWw7DQo+IC0JfSBlbHNlIHsNCj4g LQkJc3RydWN0IGN2bXhfdXNiX3BvcnRfc3RhdHVzIHBvcnQ7DQo+IC0NCj4gLQkJcG9ydCA9IGN2 bXhfdXNiX2dldF9zdGF0dXModXNiKTsNCj4gLQkJaWYgKHBvcnQucG9ydF9lbmFibGVkKSB7DQo+ IC0JCQkvKiBXZSdsbCByZXRyeSB0aGUgZXhhY3Qgc2FtZSB0cmFuc2FjdGlvbiBhZ2FpbiAqLw0K PiAtCQkJdHJhbnNhY3Rpb24tPnJldHJpZXMrKzsNCj4gLQkJfSBlbHNlIHsNCj4gLQkJCS8qDQo+ IC0JCQkgKiBXZSBnZXQgY2hhbm5lbCBoYWx0ZWQgaW50ZXJydXB0cyB3aXRoIG5vIHJlc3VsdCBi aXRzDQo+IC0JCQkgKiBzZXRzIHdoZW4gdGhlIGNhYmxlIGlzIHVucGx1Z2dlZA0KPiAtCQkJICov DQo+IC0JCQljdm14X3VzYl9jb21wbGV0ZSh1c2IsIHBpcGUsIHRyYW5zYWN0aW9uLA0KPiAtCQkJ CQkgIENWTVhfVVNCX1NUQVRVU19FUlJPUik7DQo+IC0JCX0NCj4gLQl9DQo+IC0JcmV0dXJuIDA7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIG9jdGVvbl91c2JfcG9ydF9jYWxsYmFjayhzdHJ1 Y3Qgb2N0ZW9uX2hjZCAqdXNiKQ0KPiAtew0KPiAtCXNwaW5fdW5sb2NrKCZ1c2ItPmxvY2spOw0K PiAtCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMob2N0ZW9uX3RvX2hjZCh1c2IpKTsNCj4gLQlzcGlu X2xvY2soJnVzYi0+bG9jayk7DQo+IC19DQo+IC0NCj4gLS8qKg0KPiAtICogUG9sbCB0aGUgVVNC IGJsb2NrIGZvciBzdGF0dXMgYW5kIGNhbGwgYWxsIG5lZWRlZCBjYWxsYmFjaw0KPiAtICogaGFu ZGxlcnMuIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgY2FsbGVkIGluIHRoZSBpbnRlcnJ1 cHQNCj4gLSAqIGhhbmRsZXIgZm9yIHRoZSBVU0IgY29udHJvbGxlci4gSXQgY2FuIGFsc28gYmUg Y2FsbGVkDQo+IC0gKiBwZXJpb2RpY2FsbHkgaW4gYSBsb29wIGZvciBub24taW50ZXJydXB0IGJh c2VkIG9wZXJhdGlvbi4NCj4gLSAqDQo+IC0gKiBAdXNiOiBVU0IgZGV2aWNlIHN0YXRlIHBvcHVs YXRlZCBieSBjdm14X3VzYl9pbml0aWFsaXplKCkuDQo+IC0gKg0KPiAtICogUmV0dXJuczogMCBv ciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQgY3ZteF91c2Jf cG9sbChzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiKQ0KPiAtew0KPiAtCXVuaW9uIGN2bXhfdXNiY3hf aGZudW0gdXNiY19oZm51bTsNCj4gLQl1bmlvbiBjdm14X3VzYmN4X2dpbnRzdHMgdXNiY19naW50 c3RzOw0KPiAtDQo+IC0JcHJlZmV0Y2hfcmFuZ2UodXNiLCBzaXplb2YoKnVzYikpOw0KPiAtDQo+ IC0JLyogVXBkYXRlIHRoZSBmcmFtZSBjb3VudGVyICovDQo+IC0JdXNiY19oZm51bS51MzIgPSBj dm14X3VzYl9yZWFkX2NzcjMyKHVzYiwgQ1ZNWF9VU0JDWF9IRk5VTSh1c2ItPmluZGV4KSk7DQo+ IC0JaWYgKCh1c2ItPmZyYW1lX251bWJlciAmIDB4M2ZmZikgPiB1c2JjX2hmbnVtLnMuZnJudW0p DQo+IC0JCXVzYi0+ZnJhbWVfbnVtYmVyICs9IDB4NDAwMDsNCj4gLQl1c2ItPmZyYW1lX251bWJl ciAmPSB+MHgzZmZmdWxsOw0KPiAtCXVzYi0+ZnJhbWVfbnVtYmVyIHw9IHVzYmNfaGZudW0ucy5m cm51bTsNCj4gLQ0KPiAtCS8qIFJlYWQgdGhlIHBlbmRpbmcgaW50ZXJydXB0cyAqLw0KPiAtCXVz YmNfZ2ludHN0cy51MzIgPSBjdm14X3VzYl9yZWFkX2NzcjMyKHVzYiwNCj4gLQkJCQkJICAgICAg IENWTVhfVVNCQ1hfR0lOVFNUUyh1c2ItPmluZGV4KSk7DQo+IC0NCj4gLQkvKiBDbGVhciB0aGUg aW50ZXJydXB0cyBub3cgdGhhdCB3ZSBrbm93IGFib3V0IHRoZW0gKi8NCj4gLQljdm14X3VzYl93 cml0ZV9jc3IzMih1c2IsIENWTVhfVVNCQ1hfR0lOVFNUUyh1c2ItPmluZGV4KSwNCj4gLQkJCSAg ICAgdXNiY19naW50c3RzLnUzMik7DQo+IC0NCj4gLQlpZiAodXNiY19naW50c3RzLnMucnhmbHZs KSB7DQo+IC0JCS8qDQo+IC0JCSAqIFJ4RklGTyBOb24tRW1wdHkgKFJ4Rkx2bCkNCj4gLQkJICog SW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhY2tldCBwZW5kaW5nIHRvIGJl DQo+IC0JCSAqIHJlYWQgZnJvbSB0aGUgUnhGSUZPLg0KPiAtCQkgKg0KPiAtCQkgKiBJbiBETUEg bW9kZSB0aGlzIGlzIGhhbmRsZWQgYnkgaGFyZHdhcmUNCj4gLQkJICovDQo+IC0JCWlmICh1c2It PmluaXRfZmxhZ3MgJiBDVk1YX1VTQl9JTklUSUFMSVpFX0ZMQUdTX05PX0RNQSkNCj4gLQkJCWN2 bXhfdXNiX3BvbGxfcnhfZmlmbyh1c2IpOw0KPiAtCX0NCj4gLQlpZiAodXNiY19naW50c3RzLnMu cHR4ZmVtcCB8fCB1c2JjX2dpbnRzdHMucy5ucHR4ZmVtcCkgew0KPiAtCQkvKiBGaWxsIHRoZSBU eCBGSUZPcyB3aGVuIG5vdCBpbiBETUEgbW9kZSAqLw0KPiAtCQlpZiAodXNiLT5pbml0X2ZsYWdz ICYgQ1ZNWF9VU0JfSU5JVElBTElaRV9GTEFHU19OT19ETUEpDQo+IC0JCQljdm14X3VzYl9wb2xs X3R4X2ZpZm8odXNiKTsNCj4gLQl9DQo+IC0JaWYgKHVzYmNfZ2ludHN0cy5zLmRpc2Nvbm5pbnQg fHwgdXNiY19naW50c3RzLnMucHJ0aW50KSB7DQo+IC0JCXVuaW9uIGN2bXhfdXNiY3hfaHBydCB1 c2JjX2hwcnQ7DQo+IC0JCS8qDQo+IC0JCSAqIERpc2Nvbm5lY3QgRGV0ZWN0ZWQgSW50ZXJydXB0 IChEaXNjb25uSW50KQ0KPiAtCQkgKiBBc3NlcnRlZCB3aGVuIGEgZGV2aWNlIGRpc2Nvbm5lY3Qg aXMgZGV0ZWN0ZWQuDQo+IC0JCSAqDQo+IC0JCSAqIEhvc3QgUG9ydCBJbnRlcnJ1cHQgKFBydElu dCkNCj4gLQkJICogVGhlIGNvcmUgc2V0cyB0aGlzIGJpdCB0byBpbmRpY2F0ZSBhIGNoYW5nZSBp biBwb3J0IHN0YXR1cyBvZg0KPiAtCQkgKiBvbmUgb2YgdGhlIE8yUCBVU0IgY29yZSBwb3J0cyBp biBIb3N0IG1vZGUuIFRoZSBhcHBsaWNhdGlvbg0KPiAtCQkgKiBtdXN0IHJlYWQgdGhlIEhvc3Qg UG9ydCBDb250cm9sIGFuZCBTdGF0dXMgKEhQUlQpIHJlZ2lzdGVyIHRvDQo+IC0JCSAqIGRldGVy bWluZSB0aGUgZXhhY3QgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBpbnRlcnJ1cHQuIFRoZQ0KPiAt CQkgKiBhcHBsaWNhdGlvbiBtdXN0IGNsZWFyIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMgYml0IGlu IHRoZSBIb3N0DQo+IC0JCSAqIFBvcnQgQ29udHJvbCBhbmQgU3RhdHVzIHJlZ2lzdGVyIHRvIGNs ZWFyIHRoaXMgYml0Lg0KPiAtCQkgKg0KPiAtCQkgKiBDYWxsIHRoZSB1c2VyJ3MgcG9ydCBjYWxs YmFjaw0KPiAtCQkgKi8NCj4gLQkJb2N0ZW9uX3VzYl9wb3J0X2NhbGxiYWNrKHVzYik7DQo+IC0J CS8qIENsZWFyIHRoZSBwb3J0IGNoYW5nZSBiaXRzICovDQo+IC0JCXVzYmNfaHBydC51MzIgPQ0K PiAtCQkJY3ZteF91c2JfcmVhZF9jc3IzMih1c2IsIENWTVhfVVNCQ1hfSFBSVCh1c2ItPmluZGV4 KSk7DQo+IC0JCXVzYmNfaHBydC5zLnBydGVuYSA9IDA7DQo+IC0JCWN2bXhfdXNiX3dyaXRlX2Nz cjMyKHVzYiwgQ1ZNWF9VU0JDWF9IUFJUKHVzYi0+aW5kZXgpLA0KPiAtCQkJCSAgICAgdXNiY19o cHJ0LnUzMik7DQo+IC0JfQ0KPiAtCWlmICh1c2JjX2dpbnRzdHMucy5oY2hpbnQpIHsNCj4gLQkJ LyoNCj4gLQkJICogSG9zdCBDaGFubmVscyBJbnRlcnJ1cHQgKEhDaEludCkNCj4gLQkJICogVGhl IGNvcmUgc2V0cyB0aGlzIGJpdCB0byBpbmRpY2F0ZSB0aGF0IGFuIGludGVycnVwdCBpcw0KPiAt CQkgKiBwZW5kaW5nIG9uIG9uZSBvZiB0aGUgY2hhbm5lbHMgb2YgdGhlIGNvcmUgKGluIEhvc3Qg bW9kZSkuDQo+IC0JCSAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHJlYWQgdGhlIEhvc3QgQWxsIENo YW5uZWxzIEludGVycnVwdA0KPiAtCQkgKiAoSEFJTlQpIHJlZ2lzdGVyIHRvIGRldGVybWluZSB0 aGUgZXhhY3QgbnVtYmVyIG9mIHRoZSBjaGFubmVsDQo+IC0JCSAqIG9uIHdoaWNoIHRoZSBpbnRl cnJ1cHQgb2NjdXJyZWQsIGFuZCB0aGVuIHJlYWQgdGhlDQo+IC0JCSAqIGNvcnJlc3BvbmRpbmcg SG9zdCBDaGFubmVsLW4gSW50ZXJydXB0IChIQ0lOVG4pIHJlZ2lzdGVyIHRvDQo+IC0JCSAqIGRl dGVybWluZSB0aGUgZXhhY3QgY2F1c2Ugb2YgdGhlIGludGVycnVwdC4gVGhlIGFwcGxpY2F0aW9u DQo+IC0JCSAqIG11c3QgY2xlYXIgdGhlIGFwcHJvcHJpYXRlIHN0YXR1cyBiaXQgaW4gdGhlIEhD SU5UbiByZWdpc3Rlcg0KPiAtCQkgKiB0byBjbGVhciB0aGlzIGJpdC4NCj4gLQkJICovDQo+IC0J CXVuaW9uIGN2bXhfdXNiY3hfaGFpbnQgdXNiY19oYWludDsNCj4gLQ0KPiAtCQl1c2JjX2hhaW50 LnUzMiA9IGN2bXhfdXNiX3JlYWRfY3NyMzIodXNiLA0KPiAtCQkJCQlDVk1YX1VTQkNYX0hBSU5U KHVzYi0+aW5kZXgpKTsNCj4gLQkJd2hpbGUgKHVzYmNfaGFpbnQudTMyKSB7DQo+IC0JCQlpbnQg Y2hhbm5lbDsNCj4gLQ0KPiAtCQkJY2hhbm5lbCA9IF9fZmxzKHVzYmNfaGFpbnQudTMyKTsNCj4g LQkJCWN2bXhfdXNiX3BvbGxfY2hhbm5lbCh1c2IsIGNoYW5uZWwpOw0KPiAtCQkJdXNiY19oYWlu dC51MzIgXj0gMSA8PCBjaGFubmVsOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0JY3ZteF91c2Jf c2NoZWR1bGUodXNiLCB1c2JjX2dpbnRzdHMucy5zb2YpOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+ IC19DQo+IC0NCj4gLS8qIGNvbnZlcnQgYmV0d2VlbiBhbiBIQ0QgcG9pbnRlciBhbmQgdGhlIGNv cnJlc3BvbmRpbmcgc3RydWN0IG9jdGVvbl9oY2QgKi8NCj4gLXN0YXRpYyBpbmxpbmUgc3RydWN0 IG9jdGVvbl9oY2QgKmhjZF90b19vY3Rlb24oc3RydWN0IHVzYl9oY2QgKmhjZCkNCj4gLXsNCj4g LQlyZXR1cm4gKHN0cnVjdCBvY3Rlb25faGNkICopKGhjZC0+aGNkX3ByaXYpOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgaXJxcmV0dXJuX3Qgb2N0ZW9uX3VzYl9pcnEoc3RydWN0IHVzYl9oY2QgKmhj ZCkNCj4gLXsNCj4gLQlzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiID0gaGNkX3RvX29jdGVvbihoY2Qp Ow0KPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+IC0NCj4gLQlzcGluX2xvY2tfaXJxc2F2ZSgm dXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JY3ZteF91c2JfcG9sbCh1c2IpOw0KPiAtCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnVzYi0+bG9jaywgZmxhZ3MpOw0KPiAtCXJldHVybiBJUlFfSEFORExF RDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBvY3Rlb25fdXNiX3N0YXJ0KHN0cnVjdCB1c2Jf aGNkICpoY2QpDQo+IC17DQo+IC0JaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7DQo+IC0J cmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIG9jdGVvbl91c2Jfc3RvcChzdHJ1 Y3QgdXNiX2hjZCAqaGNkKQ0KPiAtew0KPiAtCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOw0K PiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IG9jdGVvbl91c2JfZ2V0X2ZyYW1lX251bWJlcihzdHJ1 Y3QgdXNiX2hjZCAqaGNkKQ0KPiAtew0KPiAtCXN0cnVjdCBvY3Rlb25faGNkICp1c2IgPSBoY2Rf dG9fb2N0ZW9uKGhjZCk7DQo+IC0NCj4gLQlyZXR1cm4gY3ZteF91c2JfZ2V0X2ZyYW1lX251bWJl cih1c2IpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IG9jdGVvbl91c2JfdXJiX2VucXVldWUo c3RydWN0IHVzYl9oY2QgKmhjZCwNCj4gLQkJCQkgIHN0cnVjdCB1cmIgKnVyYiwNCj4gLQkJCQkg IGdmcF90IG1lbV9mbGFncykNCj4gLXsNCj4gLQlzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiID0gaGNk X3RvX29jdGVvbihoY2QpOw0KPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9IGhjZC0+c2VsZi5jb250 cm9sbGVyOw0KPiAtCXN0cnVjdCBjdm14X3VzYl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24gPSBO VUxMOw0KPiAtCXN0cnVjdCBjdm14X3VzYl9waXBlICpwaXBlOw0KPiAtCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQo+IC0Jc3RydWN0IGN2bXhfdXNiX2lzb19wYWNrZXQgKmlzb19wYWNrZXQ7DQo+IC0J c3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCA9IHVyYi0+ZXA7DQo+IC0JaW50IHJjOw0KPiAt DQo+IC0JdXJiLT5zdGF0dXMgPSAwOw0KPiAtCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2ItPmxvY2ss IGZsYWdzKTsNCj4gLQ0KPiAtCXJjID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7 DQo+IC0JaWYgKHJjKSB7DQo+IC0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYi0+bG9jaywg ZmxhZ3MpOw0KPiAtCQlyZXR1cm4gcmM7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKCFlcC0+aGNwcml2 KSB7DQo+IC0JCWVudW0gY3ZteF91c2JfdHJhbnNmZXIgdHJhbnNmZXJfdHlwZTsNCj4gLQkJZW51 bSBjdm14X3VzYl9zcGVlZCBzcGVlZDsNCj4gLQkJaW50IHNwbGl0X2RldmljZSA9IDA7DQo+IC0J CWludCBzcGxpdF9wb3J0ID0gMDsNCj4gLQ0KPiAtCQlzd2l0Y2ggKHVzYl9waXBldHlwZSh1cmIt PnBpcGUpKSB7DQo+IC0JCWNhc2UgUElQRV9JU09DSFJPTk9VUzoNCj4gLQkJCXRyYW5zZmVyX3R5 cGUgPSBDVk1YX1VTQl9UUkFOU0ZFUl9JU09DSFJPTk9VUzsNCj4gLQkJCWJyZWFrOw0KPiAtCQlj YXNlIFBJUEVfSU5URVJSVVBUOg0KPiAtCQkJdHJhbnNmZXJfdHlwZSA9IENWTVhfVVNCX1RSQU5T RkVSX0lOVEVSUlVQVDsNCj4gLQkJCWJyZWFrOw0KPiAtCQljYXNlIFBJUEVfQ09OVFJPTDoNCj4g LQkJCXRyYW5zZmVyX3R5cGUgPSBDVk1YX1VTQl9UUkFOU0ZFUl9DT05UUk9MOw0KPiAtCQkJYnJl YWs7DQo+IC0JCWRlZmF1bHQ6DQo+IC0JCQl0cmFuc2Zlcl90eXBlID0gQ1ZNWF9VU0JfVFJBTlNG RVJfQlVMSzsNCj4gLQkJCWJyZWFrOw0KPiAtCQl9DQo+IC0JCXN3aXRjaCAodXJiLT5kZXYtPnNw ZWVkKSB7DQo+IC0JCWNhc2UgVVNCX1NQRUVEX0xPVzoNCj4gLQkJCXNwZWVkID0gQ1ZNWF9VU0Jf U1BFRURfTE9XOw0KPiAtCQkJYnJlYWs7DQo+IC0JCWNhc2UgVVNCX1NQRUVEX0ZVTEw6DQo+IC0J CQlzcGVlZCA9IENWTVhfVVNCX1NQRUVEX0ZVTEw7DQo+IC0JCQlicmVhazsNCj4gLQkJZGVmYXVs dDoNCj4gLQkJCXNwZWVkID0gQ1ZNWF9VU0JfU1BFRURfSElHSDsNCj4gLQkJCWJyZWFrOw0KPiAt CQl9DQo+IC0JCS8qDQo+IC0JCSAqIEZvciBzbG93IGRldmljZXMgb24gaGlnaCBzcGVlZCBwb3J0 cyB3ZSBuZWVkIHRvIGZpbmQgdGhlIGh1Yg0KPiAtCQkgKiB0aGF0IGRvZXMgdGhlIHNwZWVkIHRy YW5zbGF0aW9uIHNvIHdlIGtub3cgd2hlcmUgdG8gc2VuZCB0aGUNCj4gLQkJICogc3BsaXQgdHJh bnNhY3Rpb25zLg0KPiAtCQkgKi8NCj4gLQkJaWYgKHNwZWVkICE9IENWTVhfVVNCX1NQRUVEX0hJ R0gpIHsNCj4gLQkJCS8qDQo+IC0JCQkgKiBTdGFydCBhdCB0aGlzIGRldmljZSBhbmQgd29yayBv dXIgd2F5IHVwIHRoZSB1c2INCj4gLQkJCSAqIHRyZWUuDQo+IC0JCQkgKi8NCj4gLQkJCXN0cnVj dCB1c2JfZGV2aWNlICpkZXYgPSB1cmItPmRldjsNCj4gLQ0KPiAtCQkJd2hpbGUgKGRldi0+cGFy ZW50KSB7DQo+IC0JCQkJLyoNCj4gLQkJCQkgKiBJZiBvdXIgcGFyZW50IGlzIGhpZ2ggc3BlZWQg dGhlbiBoZSdsbA0KPiAtCQkJCSAqIHJlY2VpdmUgdGhlIHNwbGl0cy4NCj4gLQkJCQkgKi8NCj4g LQkJCQlpZiAoZGV2LT5wYXJlbnQtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSB7DQo+IC0JCQkJ CXNwbGl0X2RldmljZSA9IGRldi0+cGFyZW50LT5kZXZudW07DQo+IC0JCQkJCXNwbGl0X3BvcnQg PSBkZXYtPnBvcnRudW07DQo+IC0JCQkJCWJyZWFrOw0KPiAtCQkJCX0NCj4gLQkJCQkvKg0KPiAt CQkJCSAqIE1vdmUgdXAgdGhlIHRyZWUgb25lIGxldmVsLiBJZiB3ZSBtYWtlIGl0IGFsbA0KPiAt CQkJCSAqIHRoZSB3YXkgdXAgdGhlIHRyZWUsIHRoZW4gdGhlIHBvcnQgbXVzdCBub3QNCj4gLQkJ CQkgKiBiZSBpbiBoaWdoIHNwZWVkIG1vZGUgYW5kIHdlIGRvbid0IG5lZWQgYQ0KPiAtCQkJCSAq IHNwbGl0Lg0KPiAtCQkJCSAqLw0KPiAtCQkJCWRldiA9IGRldi0+cGFyZW50Ow0KPiAtCQkJfQ0K PiAtCQl9DQo+IC0JCXBpcGUgPSBjdm14X3VzYl9vcGVuX3BpcGUodXNiLCB1c2JfcGlwZWRldmlj ZSh1cmItPnBpcGUpLA0KPiAtCQkJCQkgIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwgc3Bl ZWQsDQo+IC0JCQkJCSAgbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpDQo+IC0J CQkJCSAgJiAweDdmZiwNCj4gLQkJCQkJICB0cmFuc2Zlcl90eXBlLA0KPiAtCQkJCQkgIHVzYl9w aXBlaW4odXJiLT5waXBlKSA/DQo+IC0JCQkJCQlDVk1YX1VTQl9ESVJFQ1RJT05fSU4gOg0KPiAt CQkJCQkJQ1ZNWF9VU0JfRElSRUNUSU9OX09VVCwNCj4gLQkJCQkJICB1cmItPmludGVydmFsLA0K PiAtCQkJCQkgIChsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSkNCj4gLQkJCQkJ ICAgPj4gMTEpICYgMHgzLA0KPiAtCQkJCQkgIHNwbGl0X2RldmljZSwgc3BsaXRfcG9ydCk7DQo+ IC0JCWlmICghcGlwZSkgew0KPiAtCQkJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1 cmIpOw0KPiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+ IC0JCQlkZXZfZGJnKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgcGlwZVxuIik7DQo+IC0JCQlyZXR1 cm4gLUVOT01FTTsNCj4gLQkJfQ0KPiAtCQllcC0+aGNwcml2ID0gcGlwZTsNCj4gLQl9IGVsc2Ug ew0KPiAtCQlwaXBlID0gZXAtPmhjcHJpdjsNCj4gLQl9DQo+IC0NCj4gLQlzd2l0Y2ggKHVzYl9w aXBldHlwZSh1cmItPnBpcGUpKSB7DQo+IC0JY2FzZSBQSVBFX0lTT0NIUk9OT1VTOg0KPiAtCQlk ZXZfZGJnKGRldiwgIlN1Ym1pdCBpc29jaHJvbm91cyB0byAlZC4lZFxuIiwNCj4gLQkJCXVzYl9w aXBlZGV2aWNlKHVyYi0+cGlwZSksDQo+IC0JCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkp Ow0KPiAtCQkvKg0KPiAtCQkgKiBBbGxvY2F0ZSBhIHN0cnVjdHVyZSB0byB1c2UgZm9yIG91ciBw cml2YXRlIGxpc3Qgb2YNCj4gLQkJICogaXNvY2hyb25vdXMgcGFja2V0cy4NCj4gLQkJICovDQo+ IC0JCWlzb19wYWNrZXQgPSBrbWFsbG9jX2FycmF5KHVyYi0+bnVtYmVyX29mX3BhY2tldHMsDQo+ IC0JCQkJCSAgIHNpemVvZihzdHJ1Y3QgY3ZteF91c2JfaXNvX3BhY2tldCksDQo+IC0JCQkJCSAg IEdGUF9BVE9NSUMpOw0KPiAtCQlpZiAoaXNvX3BhY2tldCkgew0KPiAtCQkJaW50IGk7DQo+IC0J CQkvKiBGaWxsIHRoZSBsaXN0IHdpdGggdGhlIGRhdGEgZnJvbSB0aGUgVVJCICovDQo+IC0JCQlm b3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7DQo+IC0JCQkJaXNv X3BhY2tldFtpXS5vZmZzZXQgPQ0KPiAtCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNl dDsNCj4gLQkJCQlpc29fcGFja2V0W2ldLmxlbmd0aCA9DQo+IC0JCQkJCXVyYi0+aXNvX2ZyYW1l X2Rlc2NbaV0ubGVuZ3RoOw0KPiAtCQkJCWlzb19wYWNrZXRbaV0uc3RhdHVzID0gQ1ZNWF9VU0Jf U1RBVFVTX0VSUk9SOw0KPiAtCQkJfQ0KPiAtCQkJLyoNCj4gLQkJCSAqIFN0b3JlIGEgcG9pbnRl ciB0byB0aGUgbGlzdCBpbiB0aGUgVVJCIHNldHVwX3BhY2tldA0KPiAtCQkJICogZmllbGQuIFdl IGtub3cgdGhpcyBjdXJyZW50bHkgaXNuJ3QgYmVpbmcgdXNlZCBhbmQNCj4gLQkJCSAqIHRoaXMg c2F2ZXMgdXMgYSBidW5jaCBvZiBsb2dpYy4NCj4gLQkJCSAqLw0KPiAtCQkJdXJiLT5zZXR1cF9w YWNrZXQgPSAoY2hhciAqKWlzb19wYWNrZXQ7DQo+IC0JCQl0cmFuc2FjdGlvbiA9IGN2bXhfdXNi X3N1Ym1pdF9pc29jaHJvbm91cyh1c2IsDQo+IC0JCQkJCQkJCSAgcGlwZSwgdXJiKTsNCj4gLQkJ CS8qDQo+IC0JCQkgKiBJZiBzdWJtaXQgZmFpbGVkIHdlIG5lZWQgdG8gZnJlZSBvdXIgcHJpdmF0 ZSBwYWNrZXQNCj4gLQkJCSAqIGxpc3QuDQo+IC0JCQkgKi8NCj4gLQkJCWlmICghdHJhbnNhY3Rp b24pIHsNCj4gLQkJCQl1cmItPnNldHVwX3BhY2tldCA9IE5VTEw7DQo+IC0JCQkJa2ZyZWUoaXNv X3BhY2tldCk7DQo+IC0JCQl9DQo+IC0JCX0NCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBQSVBFX0lO VEVSUlVQVDoNCj4gLQkJZGV2X2RiZyhkZXYsICJTdWJtaXQgaW50ZXJydXB0IHRvICVkLiVkXG4i LA0KPiAtCQkJdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwNCj4gLQkJCXVzYl9waXBlZW5kcG9p bnQodXJiLT5waXBlKSk7DQo+IC0JCXRyYW5zYWN0aW9uID0gY3ZteF91c2Jfc3VibWl0X2ludGVy cnVwdCh1c2IsIHBpcGUsIHVyYik7DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgUElQRV9DT05UUk9M Og0KPiAtCQlkZXZfZGJnKGRldiwgIlN1Ym1pdCBjb250cm9sIHRvICVkLiVkXG4iLA0KPiAtCQkJ dXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSwNCj4gLQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5w aXBlKSk7DQo+IC0JCXRyYW5zYWN0aW9uID0gY3ZteF91c2Jfc3VibWl0X2NvbnRyb2wodXNiLCBw aXBlLCB1cmIpOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIFBJUEVfQlVMSzoNCj4gLQkJZGV2X2Ri ZyhkZXYsICJTdWJtaXQgYnVsayB0byAlZC4lZFxuIiwNCj4gLQkJCXVzYl9waXBlZGV2aWNlKHVy Yi0+cGlwZSksDQo+IC0JCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSkpOw0KPiAtCQl0cmFu c2FjdGlvbiA9IGN2bXhfdXNiX3N1Ym1pdF9idWxrKHVzYiwgcGlwZSwgdXJiKTsNCj4gLQkJYnJl YWs7DQo+IC0JfQ0KPiAtCWlmICghdHJhbnNhY3Rpb24pIHsNCj4gLQkJdXNiX2hjZF91bmxpbmtf dXJiX2Zyb21fZXAoaGNkLCB1cmIpOw0KPiAtCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2It PmxvY2ssIGZsYWdzKTsNCj4gLQkJZGV2X2RiZyhkZXYsICJGYWlsZWQgdG8gc3VibWl0XG4iKTsN Cj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0JfQ0KPiAtCXVyYi0+aGNwcml2ID0gdHJhbnNhY3Rp b247DQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0J cmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgb2N0ZW9uX3VzYl91cmJfZGVxdWV1 ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLA0KPiAtCQkJCSAgc3RydWN0IHVyYiAqdXJiLA0KPiAtCQkJ CSAgaW50IHN0YXR1cykNCj4gLXsNCj4gLQlzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiID0gaGNkX3Rv X29jdGVvbihoY2QpOw0KPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+IC0JaW50IHJjOw0KPiAt DQo+IC0JaWYgKCF1cmItPmRldikNCj4gLQkJcmV0dXJuIC1FSU5WQUw7DQo+IC0NCj4gLQlzcGlu X2xvY2tfaXJxc2F2ZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0NCj4gLQlyYyA9IHVzYl9oY2Rf Y2hlY2tfdW5saW5rX3VyYihoY2QsIHVyYiwgc3RhdHVzKTsNCj4gLQlpZiAocmMpDQo+IC0JCWdv dG8gb3V0Ow0KPiAtDQo+IC0JdXJiLT5zdGF0dXMgPSBzdGF0dXM7DQo+IC0JY3ZteF91c2JfY2Fu Y2VsKHVzYiwgdXJiLT5lcC0+aGNwcml2LCB1cmItPmhjcHJpdik7DQo+IC0NCj4gLW91dDoNCj4g LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2ItPmxvY2ssIGZsYWdzKTsNCj4gLQ0KPiAtCXJl dHVybiByYzsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQgb2N0ZW9uX3VzYl9lbmRwb2ludF9k aXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsDQo+IC0JCQkJCXN0cnVjdCB1c2JfaG9zdF9lbmRw b2ludCAqZXApDQo+IC17DQo+IC0Jc3RydWN0IGRldmljZSAqZGV2ID0gaGNkLT5zZWxmLmNvbnRy b2xsZXI7DQo+IC0NCj4gLQlpZiAoZXAtPmhjcHJpdikgew0KPiAtCQlzdHJ1Y3Qgb2N0ZW9uX2hj ZCAqdXNiID0gaGNkX3RvX29jdGVvbihoY2QpOw0KPiAtCQlzdHJ1Y3QgY3ZteF91c2JfcGlwZSAq cGlwZSA9IGVwLT5oY3ByaXY7DQo+IC0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+IC0NCj4gLQkJ c3Bpbl9sb2NrX2lycXNhdmUoJnVzYi0+bG9jaywgZmxhZ3MpOw0KPiAtCQljdm14X3VzYl9jYW5j ZWxfYWxsKHVzYiwgcGlwZSk7DQo+IC0JCWlmIChjdm14X3VzYl9jbG9zZV9waXBlKHVzYiwgcGlw ZSkpDQo+IC0JCQlkZXZfZGJnKGRldiwgIkNsb3NpbmcgcGlwZSAlcCBmYWlsZWRcbiIsIHBpcGUp Ow0KPiAtCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2ItPmxvY2ssIGZsYWdzKTsNCj4gLQkJ ZXAtPmhjcHJpdiA9IE5VTEw7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50IG9jdGVv bl91c2JfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikNCj4g LXsNCj4gLQlzdHJ1Y3Qgb2N0ZW9uX2hjZCAqdXNiID0gaGNkX3RvX29jdGVvbihoY2QpOw0KPiAt CXN0cnVjdCBjdm14X3VzYl9wb3J0X3N0YXR1cyBwb3J0X3N0YXR1czsNCj4gLQl1bnNpZ25lZCBs b25nIGZsYWdzOw0KPiAtDQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVzYi0+bG9jaywgZmxhZ3Mp Ow0KPiAtCXBvcnRfc3RhdHVzID0gY3ZteF91c2JfZ2V0X3N0YXR1cyh1c2IpOw0KPiAtCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnVzYi0+bG9jaywgZmxhZ3MpOw0KPiAtCWJ1ZlswXSA9IHBvcnRf c3RhdHVzLmNvbm5lY3RfY2hhbmdlIDw8IDE7DQo+IC0NCj4gLQlyZXR1cm4gYnVmWzBdICE9IDA7 DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgb2N0ZW9uX3VzYl9odWJfY29udHJvbChzdHJ1Y3Qg dXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwNCj4gLQkJCQkgIHUxNiB3SW5k ZXgsIGNoYXIgKmJ1ZiwgdTE2IHdMZW5ndGgpDQo+IC17DQo+IC0Jc3RydWN0IG9jdGVvbl9oY2Qg KnVzYiA9IGhjZF90b19vY3Rlb24oaGNkKTsNCj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoY2Qt PnNlbGYuY29udHJvbGxlcjsNCj4gLQlzdHJ1Y3QgY3ZteF91c2JfcG9ydF9zdGF0dXMgdXNiX3Bv cnRfc3RhdHVzOw0KPiAtCWludCBwb3J0X3N0YXR1czsNCj4gLQlzdHJ1Y3QgdXNiX2h1Yl9kZXNj cmlwdG9yICpkZXNjOw0KPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+IC0NCj4gLQlzd2l0Y2gg KHR5cGVSZXEpIHsNCj4gLQljYXNlIENsZWFySHViRmVhdHVyZToNCj4gLQkJZGV2X2RiZyhkZXYs ICJDbGVhckh1YkZlYXR1cmVcbiIpOw0KPiAtCQlzd2l0Y2ggKHdWYWx1ZSkgew0KPiAtCQljYXNl IENfSFVCX0xPQ0FMX1BPV0VSOg0KPiAtCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoNCj4gLQkJ CS8qIE5vdGhpbmcgcmVxdWlyZWQgaGVyZSAqLw0KPiAtCQkJYnJlYWs7DQo+IC0JCWRlZmF1bHQ6 DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4gLQljYXNlIENs ZWFyUG9ydEZlYXR1cmU6DQo+IC0JCWRldl9kYmcoZGV2LCAiQ2xlYXJQb3J0RmVhdHVyZVxuIik7 DQo+IC0JCWlmICh3SW5kZXggIT0gMSkgew0KPiAtCQkJZGV2X2RiZyhkZXYsICIgSU5WQUxJRFxu Iik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtDQo+IC0JCXN3aXRjaCAod1Zh bHVlKSB7DQo+IC0JCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6DQo+IC0JCQlkZXZfZGJnKGRl diwgIiBFTkFCTEVcbiIpOw0KPiAtCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnVzYi0+bG9jaywgZmxh Z3MpOw0KPiAtCQkJY3ZteF91c2JfZGlzYWJsZSh1c2IpOw0KPiAtCQkJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JCQlicmVhazsNCj4gLQkJY2FzZSBVU0Jf UE9SVF9GRUFUX1NVU1BFTkQ6DQo+IC0JCQlkZXZfZGJnKGRldiwgIiBTVVNQRU5EXG4iKTsNCj4g LQkJCS8qIE5vdCBzdXBwb3J0ZWQgb24gT2N0ZW9uICovDQo+IC0JCQlicmVhazsNCj4gLQkJY2Fz ZSBVU0JfUE9SVF9GRUFUX1BPV0VSOg0KPiAtCQkJZGV2X2RiZyhkZXYsICIgUE9XRVJcbiIpOw0K PiAtCQkJLyogTm90IHN1cHBvcnRlZCBvbiBPY3Rlb24gKi8NCj4gLQkJCWJyZWFrOw0KPiAtCQlj YXNlIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SOg0KPiAtCQkJZGV2X2RiZyhkZXYsICIgSU5ESUNB VE9SXG4iKTsNCj4gLQkJCS8qIFBvcnQgaW5pZGljYXRvciBub3Qgc3VwcG9ydGVkICovDQo+IC0J CQlicmVhazsNCj4gLQkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoNCj4gLQkJCWRl dl9kYmcoZGV2LCAiIENfQ09OTkVDVElPTlxuIik7DQo+IC0JCQkvKiBDbGVhcnMgZHJpdmVycyBp bnRlcm5hbCBjb25uZWN0IHN0YXR1cyBjaGFuZ2UgZmxhZyAqLw0KPiAtCQkJc3Bpbl9sb2NrX2ly cXNhdmUoJnVzYi0+bG9jaywgZmxhZ3MpOw0KPiAtCQkJdXNiLT5wb3J0X3N0YXR1cyA9IGN2bXhf dXNiX2dldF9zdGF0dXModXNiKTsNCj4gLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYi0+ bG9jaywgZmxhZ3MpOw0KPiAtCQkJYnJlYWs7DQo+IC0JCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JF U0VUOg0KPiAtCQkJZGV2X2RiZyhkZXYsICIgQ19SRVNFVFxuIik7DQo+IC0JCQkvKg0KPiAtCQkJ ICogQ2xlYXJzIHRoZSBkcml2ZXIncyBpbnRlcm5hbCBQb3J0IFJlc2V0IENoYW5nZSBmbGFnLg0K PiAtCQkJICovDQo+IC0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+ IC0JCQl1c2ItPnBvcnRfc3RhdHVzID0gY3ZteF91c2JfZ2V0X3N0YXR1cyh1c2IpOw0KPiAtCQkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JCQlicmVhazsN Cj4gLQkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOg0KPiAtCQkJZGV2X2RiZyhkZXYsICIg Q19FTkFCTEVcbiIpOw0KPiAtCQkJLyoNCj4gLQkJCSAqIENsZWFycyB0aGUgZHJpdmVyJ3MgaW50 ZXJuYWwgUG9ydCBFbmFibGUvRGlzYWJsZQ0KPiAtCQkJICogQ2hhbmdlIGZsYWcuDQo+IC0JCQkg Ki8NCj4gLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2ItPmxvY2ssIGZsYWdzKTsNCj4gLQkJCXVz Yi0+cG9ydF9zdGF0dXMgPSBjdm14X3VzYl9nZXRfc3RhdHVzKHVzYik7DQo+IC0JCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZ1c2ItPmxvY2ssIGZsYWdzKTsNCj4gLQkJCWJyZWFrOw0KPiAtCQlj YXNlIFVTQl9QT1JUX0ZFQVRfQ19TVVNQRU5EOg0KPiAtCQkJZGV2X2RiZyhkZXYsICIgQ19TVVNQ RU5EXG4iKTsNCj4gLQkJCS8qDQo+IC0JCQkgKiBDbGVhcnMgdGhlIGRyaXZlcidzIGludGVybmFs IFBvcnQgU3VzcGVuZCBDaGFuZ2UNCj4gLQkJCSAqIGZsYWcsIHdoaWNoIGlzIHNldCB3aGVuIHJl c3VtZSBzaWduYWxpbmcgb24gdGhlIGhvc3QNCj4gLQkJCSAqIHBvcnQgaXMgY29tcGxldGUuDQo+ IC0JCQkgKi8NCj4gLQkJCWJyZWFrOw0KPiAtCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NV UlJFTlQ6DQo+IC0JCQlkZXZfZGJnKGRldiwgIiBDX09WRVJfQ1VSUkVOVFxuIik7DQo+IC0JCQkv KiBDbGVhcnMgdGhlIGRyaXZlcidzIG92ZXJjdXJyZW50IENoYW5nZSBmbGFnICovDQo+IC0JCQlz cGluX2xvY2tfaXJxc2F2ZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JCQl1c2ItPnBvcnRfc3Rh dHVzID0gY3ZteF91c2JfZ2V0X3N0YXR1cyh1c2IpOw0KPiAtCQkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JCQlicmVhazsNCj4gLQkJZGVmYXVsdDoNCj4g LQkJCWRldl9kYmcoZGV2LCAiIFVOS05PV05cbiIpOw0KPiAtCQkJcmV0dXJuIC1FSU5WQUw7DQo+ IC0JCX0NCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBHZXRIdWJEZXNjcmlwdG9yOg0KPiAtCQlkZXZf ZGJnKGRldiwgIkdldEh1YkRlc2NyaXB0b3JcbiIpOw0KPiAtCQlkZXNjID0gKHN0cnVjdCB1c2Jf aHViX2Rlc2NyaXB0b3IgKilidWY7DQo+IC0JCWRlc2MtPmJEZXNjTGVuZ3RoID0gOTsNCj4gLQkJ ZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsNCj4gLQkJZGVzYy0+Yk5iclBvcnRzID0gMTsN Cj4gLQkJZGVzYy0+d0h1YkNoYXJhY3RlcmlzdGljcyA9IGNwdV90b19sZTE2KDB4MDgpOw0KPiAt CQlkZXNjLT5iUHdyT24yUHdyR29vZCA9IDE7DQo+IC0JCWRlc2MtPmJIdWJDb250ckN1cnJlbnQg PSAwOw0KPiAtCQlkZXNjLT51LmhzLkRldmljZVJlbW92YWJsZVswXSA9IDA7DQo+IC0JCWRlc2Mt PnUuaHMuRGV2aWNlUmVtb3ZhYmxlWzFdID0gMHhmZjsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSBH ZXRIdWJTdGF0dXM6DQo+IC0JCWRldl9kYmcoZGV2LCAiR2V0SHViU3RhdHVzXG4iKTsNCj4gLQkJ KihfX2xlMzIgKilidWYgPSAwOw0KPiAtCQlicmVhazsNCj4gLQljYXNlIEdldFBvcnRTdGF0dXM6 DQo+IC0JCWRldl9kYmcoZGV2LCAiR2V0UG9ydFN0YXR1c1xuIik7DQo+IC0JCWlmICh3SW5kZXgg IT0gMSkgew0KPiAtCQkJZGV2X2RiZyhkZXYsICIgSU5WQUxJRFxuIik7DQo+IC0JCQlyZXR1cm4g LUVJTlZBTDsNCj4gLQkJfQ0KPiAtDQo+IC0JCXNwaW5fbG9ja19pcnFzYXZlKCZ1c2ItPmxvY2ss IGZsYWdzKTsNCj4gLQkJdXNiX3BvcnRfc3RhdHVzID0gY3ZteF91c2JfZ2V0X3N0YXR1cyh1c2Ip Ow0KPiAtCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2ItPmxvY2ssIGZsYWdzKTsNCj4gLQkJ cG9ydF9zdGF0dXMgPSAwOw0KPiAtDQo+IC0JCWlmICh1c2JfcG9ydF9zdGF0dXMuY29ubmVjdF9j aGFuZ2UpIHsNCj4gLQkJCXBvcnRfc3RhdHVzIHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfQ19DT05O RUNUSU9OKTsNCj4gLQkJCWRldl9kYmcoZGV2LCAiIENfQ09OTkVDVElPTlxuIik7DQo+IC0JCX0N Cj4gLQ0KPiAtCQlpZiAodXNiX3BvcnRfc3RhdHVzLnBvcnRfZW5hYmxlZCkgew0KPiAtCQkJcG9y dF9zdGF0dXMgfD0gKDEgPDwgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRSk7DQo+IC0JCQlkZXZfZGJn KGRldiwgIiBDX0VOQUJMRVxuIik7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAodXNiX3BvcnRfc3Rh dHVzLmNvbm5lY3RlZCkgew0KPiAtCQkJcG9ydF9zdGF0dXMgfD0gKDEgPDwgVVNCX1BPUlRfRkVB VF9DT05ORUNUSU9OKTsNCj4gLQkJCWRldl9kYmcoZGV2LCAiIENPTk5FQ1RJT05cbiIpOw0KPiAt CQl9DQo+IC0NCj4gLQkJaWYgKHVzYl9wb3J0X3N0YXR1cy5wb3J0X2VuYWJsZWQpIHsNCj4gLQkJ CXBvcnRfc3RhdHVzIHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfRU5BQkxFKTsNCj4gLQkJCWRldl9k YmcoZGV2LCAiIEVOQUJMRVxuIik7DQo+IC0JCX0NCj4gLQ0KPiAtCQlpZiAodXNiX3BvcnRfc3Rh dHVzLnBvcnRfb3Zlcl9jdXJyZW50KSB7DQo+IC0JCQlwb3J0X3N0YXR1cyB8PSAoMSA8PCBVU0Jf UE9SVF9GRUFUX09WRVJfQ1VSUkVOVCk7DQo+IC0JCQlkZXZfZGJnKGRldiwgIiBPVkVSX0NVUlJF TlRcbiIpOw0KPiAtCQl9DQo+IC0NCj4gLQkJaWYgKHVzYl9wb3J0X3N0YXR1cy5wb3J0X3Bvd2Vy ZWQpIHsNCj4gLQkJCXBvcnRfc3RhdHVzIHw9ICgxIDw8IFVTQl9QT1JUX0ZFQVRfUE9XRVIpOw0K PiAtCQkJZGV2X2RiZyhkZXYsICIgUE9XRVJcbiIpOw0KPiAtCQl9DQo+IC0NCj4gLQkJaWYgKHVz Yl9wb3J0X3N0YXR1cy5wb3J0X3NwZWVkID09IENWTVhfVVNCX1NQRUVEX0hJR0gpIHsNCj4gLQkJ CXBvcnRfc3RhdHVzIHw9IFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRDsNCj4gLQkJCWRldl9kYmco ZGV2LCAiIEhJR0hTUEVFRFxuIik7DQo+IC0JCX0gZWxzZSBpZiAodXNiX3BvcnRfc3RhdHVzLnBv cnRfc3BlZWQgPT0gQ1ZNWF9VU0JfU1BFRURfTE9XKSB7DQo+IC0JCQlwb3J0X3N0YXR1cyB8PSAo MSA8PCBVU0JfUE9SVF9GRUFUX0xPV1NQRUVEKTsNCj4gLQkJCWRldl9kYmcoZGV2LCAiIExPV1NQ RUVEXG4iKTsNCj4gLQkJfQ0KPiAtDQo+IC0JCSooKF9fbGUzMiAqKWJ1ZikgPSBjcHVfdG9fbGUz Mihwb3J0X3N0YXR1cyk7DQo+IC0JCWJyZWFrOw0KPiAtCWNhc2UgU2V0SHViRmVhdHVyZToNCj4g LQkJZGV2X2RiZyhkZXYsICJTZXRIdWJGZWF0dXJlXG4iKTsNCj4gLQkJLyogTm8gSFVCIGZlYXR1 cmVzIHN1cHBvcnRlZCAqLw0KPiAtCQlicmVhazsNCj4gLQljYXNlIFNldFBvcnRGZWF0dXJlOg0K PiAtCQlkZXZfZGJnKGRldiwgIlNldFBvcnRGZWF0dXJlXG4iKTsNCj4gLQkJaWYgKHdJbmRleCAh PSAxKSB7DQo+IC0JCQlkZXZfZGJnKGRldiwgIiBJTlZBTElEXG4iKTsNCj4gLQkJCXJldHVybiAt RUlOVkFMOw0KPiAtCQl9DQo+IC0NCj4gLQkJc3dpdGNoICh3VmFsdWUpIHsNCj4gLQkJY2FzZSBV U0JfUE9SVF9GRUFUX1NVU1BFTkQ6DQo+IC0JCQlkZXZfZGJnKGRldiwgIiBTVVNQRU5EXG4iKTsN Cj4gLQkJCXJldHVybiAtRUlOVkFMOw0KPiAtCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6DQo+ IC0JCQlkZXZfZGJnKGRldiwgIiBQT1dFUlxuIik7DQo+IC0JCQkvKg0KPiAtCQkJICogUHJvZ3Jh bSB0aGUgcG9ydCBwb3dlciBiaXQgdG8gZHJpdmUgVkJVUyBvbiB0aGUgVVNCLg0KPiAtCQkJICov DQo+IC0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JCQlVU0Jf U0VUX0ZJRUxEMzIoQ1ZNWF9VU0JDWF9IUFJUKHVzYi0+aW5kZXgpLA0KPiAtCQkJCQljdm14X3Vz YmN4X2hwcnQsIHBydHB3ciwgMSk7DQo+IC0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2It PmxvY2ssIGZsYWdzKTsNCj4gLQkJCXJldHVybiAwOw0KPiAtCQljYXNlIFVTQl9QT1JUX0ZFQVRf UkVTRVQ6DQo+IC0JCQlkZXZfZGJnKGRldiwgIiBSRVNFVFxuIik7DQo+IC0JCQlzcGluX2xvY2tf aXJxc2F2ZSgmdXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JCQljdm14X3VzYl9yZXNldF9wb3J0KHVz Yik7DQo+IC0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2ItPmxvY2ssIGZsYWdzKTsNCj4g LQkJCXJldHVybiAwOw0KPiAtCQljYXNlIFVTQl9QT1JUX0ZFQVRfSU5ESUNBVE9SOg0KPiAtCQkJ ZGV2X2RiZyhkZXYsICIgSU5ESUNBVE9SXG4iKTsNCj4gLQkJCS8qIE5vdCBzdXBwb3J0ZWQgKi8N Cj4gLQkJCWJyZWFrOw0KPiAtCQlkZWZhdWx0Og0KPiAtCQkJZGV2X2RiZyhkZXYsICIgVU5LTk9X TlxuIik7DQo+IC0JCQlyZXR1cm4gLUVJTlZBTDsNCj4gLQkJfQ0KPiAtCQlicmVhazsNCj4gLQlk ZWZhdWx0Og0KPiAtCQlkZXZfZGJnKGRldiwgIlVua25vd24gcm9vdCBodWIgcmVxdWVzdFxuIik7 DQo+IC0JCXJldHVybiAtRUlOVkFMOw0KPiAtCX0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0K PiAtc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2N0ZW9uX2hjX2RyaXZlciA9IHsNCj4g LQkuZGVzY3JpcHRpb24JCT0gIk9jdGVvbiBVU0IiLA0KPiAtCS5wcm9kdWN0X2Rlc2MJCT0gIk9j dGVvbiBIb3N0IENvbnRyb2xsZXIiLA0KPiAtCS5oY2RfcHJpdl9zaXplCQk9IHNpemVvZihzdHJ1 Y3Qgb2N0ZW9uX2hjZCksDQo+IC0JLmlycQkJCT0gb2N0ZW9uX3VzYl9pcnEsDQo+IC0JLmZsYWdz CQkJPSBIQ0RfTUVNT1JZIHwgSENEX0RNQSB8IEhDRF9VU0IyLA0KPiAtCS5zdGFydAkJCT0gb2N0 ZW9uX3VzYl9zdGFydCwNCj4gLQkuc3RvcAkJCT0gb2N0ZW9uX3VzYl9zdG9wLA0KPiAtCS51cmJf ZW5xdWV1ZQkJPSBvY3Rlb25fdXNiX3VyYl9lbnF1ZXVlLA0KPiAtCS51cmJfZGVxdWV1ZQkJPSBv Y3Rlb25fdXNiX3VyYl9kZXF1ZXVlLA0KPiAtCS5lbmRwb2ludF9kaXNhYmxlCT0gb2N0ZW9uX3Vz Yl9lbmRwb2ludF9kaXNhYmxlLA0KPiAtCS5nZXRfZnJhbWVfbnVtYmVyCT0gb2N0ZW9uX3VzYl9n ZXRfZnJhbWVfbnVtYmVyLA0KPiAtCS5odWJfc3RhdHVzX2RhdGEJPSBvY3Rlb25fdXNiX2h1Yl9z dGF0dXNfZGF0YSwNCj4gLQkuaHViX2NvbnRyb2wJCT0gb2N0ZW9uX3VzYl9odWJfY29udHJvbCwN Cj4gLQkubWFwX3VyYl9mb3JfZG1hCT0gb2N0ZW9uX21hcF91cmJfZm9yX2RtYSwNCj4gLQkudW5t YXBfdXJiX2Zvcl9kbWEJPSBvY3Rlb25fdW5tYXBfdXJiX2Zvcl9kbWEsDQo+IC19Ow0KPiAtDQo+ IC1zdGF0aWMgaW50IG9jdGVvbl91c2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikNCj4gLXsNCj4gLQlpbnQgc3RhdHVzOw0KPiAtCWludCBpbml0aWFsaXplX2ZsYWdzOw0KPiAt CWludCB1c2JfbnVtOw0KPiAtCXN0cnVjdCByZXNvdXJjZSAqcmVzX21lbTsNCj4gLQlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKnVzYm5fbm9kZTsNCj4gLQlpbnQgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsNCj4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiAtCXN0cnVj dCBvY3Rlb25faGNkICp1c2I7DQo+IC0Jc3RydWN0IHVzYl9oY2QgKmhjZDsNCj4gLQl1MzIgY2xv Y2tfcmF0ZSA9IDQ4MDAwMDAwOw0KPiAtCWJvb2wgaXNfY3J5c3RhbF9jbG9jayA9IGZhbHNlOw0K PiAtCWNvbnN0IGNoYXIgKmNsb2NrX3R5cGU7DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlpZiAoIWRl di0+b2Zfbm9kZSkgew0KPiAtCQlkZXZfZXJyKGRldiwgIkVycm9yOiBlbXB0eSBvZl9ub2RlXG4i KTsNCj4gLQkJcmV0dXJuIC1FTlhJTzsNCj4gLQl9DQo+IC0JdXNibl9ub2RlID0gZGV2LT5vZl9u b2RlLT5wYXJlbnQ7DQo+IC0NCj4gLQlpID0gb2ZfcHJvcGVydHlfcmVhZF91MzIodXNibl9ub2Rl LA0KPiAtCQkJCSAiY2xvY2stZnJlcXVlbmN5IiwgJmNsb2NrX3JhdGUpOw0KPiAtCWlmIChpKQ0K PiAtCQlpID0gb2ZfcHJvcGVydHlfcmVhZF91MzIodXNibl9ub2RlLA0KPiAtCQkJCQkgInJlZmNs ay1mcmVxdWVuY3kiLCAmY2xvY2tfcmF0ZSk7DQo+IC0JaWYgKGkpIHsNCj4gLQkJZGV2X2Vycihk ZXYsICJObyBVU0JOIFwiY2xvY2stZnJlcXVlbmN5XCJcbiIpOw0KPiAtCQlyZXR1cm4gLUVOWElP Ow0KPiAtCX0NCj4gLQlzd2l0Y2ggKGNsb2NrX3JhdGUpIHsNCj4gLQljYXNlIDEyMDAwMDAwOg0K PiAtCQlpbml0aWFsaXplX2ZsYWdzID0gQ1ZNWF9VU0JfSU5JVElBTElaRV9GTEFHU19DTE9DS18x Mk1IWjsNCj4gLQkJYnJlYWs7DQo+IC0JY2FzZSAyNDAwMDAwMDoNCj4gLQkJaW5pdGlhbGl6ZV9m bGFncyA9IENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfMjRNSFo7DQo+IC0JCWJyZWFr Ow0KPiAtCWNhc2UgNDgwMDAwMDA6DQo+IC0JCWluaXRpYWxpemVfZmxhZ3MgPSBDVk1YX1VTQl9J TklUSUFMSVpFX0ZMQUdTX0NMT0NLXzQ4TUhaOw0KPiAtCQlicmVhazsNCj4gLQlkZWZhdWx0Og0K PiAtCQlkZXZfZXJyKGRldiwgIklsbGVnYWwgVVNCTiBcImNsb2NrLWZyZXF1ZW5jeVwiICV1XG4i LA0KPiAtCQkJY2xvY2tfcmF0ZSk7DQo+IC0JCXJldHVybiAtRU5YSU87DQo+IC0JfQ0KPiAtDQo+ IC0JaSA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHVzYm5fbm9kZSwNCj4gLQkJCQkgICAgImNh dml1bSxyZWZjbGstdHlwZSIsICZjbG9ja190eXBlKTsNCj4gLQlpZiAoaSkNCj4gLQkJaSA9IG9m X3Byb3BlcnR5X3JlYWRfc3RyaW5nKHVzYm5fbm9kZSwNCj4gLQkJCQkJICAgICJyZWZjbGstdHlw ZSIsICZjbG9ja190eXBlKTsNCj4gLQ0KPiAtCWlmICghaSAmJiBzdHJjbXAoImNyeXN0YWwiLCBj bG9ja190eXBlKSA9PSAwKQ0KPiAtCQlpc19jcnlzdGFsX2Nsb2NrID0gdHJ1ZTsNCj4gLQ0KPiAt CWlmIChpc19jcnlzdGFsX2Nsb2NrKQ0KPiAtCQlpbml0aWFsaXplX2ZsYWdzIHw9IENWTVhfVVNC X0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfWE9fWEk7DQo+IC0JZWxzZQ0KPiAtCQlpbml0aWFsaXpl X2ZsYWdzIHw9IENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfQ0xPQ0tfWE9fR05EOw0KPiAtDQo+ IC0JcmVzX21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwg MCk7DQo+IC0JaWYgKCFyZXNfbWVtKSB7DQo+IC0JCWRldl9lcnIoZGV2LCAiZm91bmQgbm8gbWVt b3J5IHJlc291cmNlXG4iKTsNCj4gLQkJcmV0dXJuIC1FTlhJTzsNCj4gLQl9DQo+IC0JdXNiX251 bSA9IChyZXNfbWVtLT5zdGFydCA+PiA0NCkgJiAxOw0KPiAtDQo+IC0JaWYgKGlycSA8IDApIHsN Cj4gLQkJLyogRGVmZWN0aXZlIGRldmljZSB0cmVlLCBidXQgd2Uga25vdyBob3cgdG8gZml4IGl0 LiAqLw0KPiAtCQlpcnFfaHdfbnVtYmVyX3QgaHdpcnEgPSB1c2JfbnVtID8gKDEgPDwgNikgKyAx NyA6IDU2Ow0KPiAtDQo+IC0JCWlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCBod2lycSk7 DQo+IC0JfQ0KPiAtDQo+IC0JLyoNCj4gLQkgKiBTZXQgdGhlIERNQSBtYXNrIHRvIDY0Yml0cyBz byB3ZSBnZXQgYnVmZmVycyBhbHJlYWR5IHRyYW5zbGF0ZWQgZm9yDQo+IC0JICogRE1BLg0KPiAt CSAqLw0KPiAtCWkgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9N QVNLKDY0KSk7DQo+IC0JaWYgKGkpDQo+IC0JCXJldHVybiBpOw0KPiAtDQo+IC0JLyoNCj4gLQkg KiBPbmx5IGNuNTJYWCBhbmQgY241NlhYIGhhdmUgRFdDX09URyBVU0IgaGFyZHdhcmUgYW5kIHRo ZQ0KPiAtCSAqIElPQiBwcmlvcml0eSByZWdpc3RlcnMuICBVbmRlciBoZWF2eSBuZXR3b3JrIGxv YWQgVVNCDQo+IC0JICogaGFyZHdhcmUgY2FuIGJlIHN0YXJ2ZWQgYnkgdGhlIElPQiBjYXVzaW5n IGEgY3Jhc2guICBHaXZlDQo+IC0JICogaXQgYSBwcmlvcml0eSBib29zdCBpZiBpdCBoYXMgYmVl biB3YWl0aW5nIG1vcmUgdGhhbiA0MDANCj4gLQkgKiBjeWNsZXMgdG8gYXZvaWQgdGhpcyBzaXR1 YXRpb24uDQo+IC0JICoNCj4gLQkgKiBUZXN0aW5nIGluZGljYXRlcyB0aGF0IGEgY250X3ZhbCBv ZiA4MTkyIGlzIG5vdCBzdWZmaWNpZW50LA0KPiAtCSAqIGJ1dCBubyBmYWlsdXJlcyBhcmUgc2Vl biB3aXRoIDQwOTYuICBXZSBjaG9vc2UgYSB2YWx1ZSBvZg0KPiAtCSAqIDQwMCB0byBnaXZlIGEg c2FmZXR5IGZhY3RvciBvZiAxMC4NCj4gLQkgKi8NCj4gLQlpZiAoT0NURU9OX0lTX01PREVMKE9D VEVPTl9DTjUyWFgpIHx8IE9DVEVPTl9JU19NT0RFTChPQ1RFT05fQ041NlhYKSkgew0KPiAtCQl1 bmlvbiBjdm14X2lvYl9uMmNfbDJjX3ByaV9jbnQgcHJpX2NudDsNCj4gLQ0KPiAtCQlwcmlfY250 LnU2NCA9IDA7DQo+IC0JCXByaV9jbnQucy5jbnRfZW5iID0gMTsNCj4gLQkJcHJpX2NudC5zLmNu dF92YWwgPSA0MDA7DQo+IC0JCWN2bXhfd3JpdGVfY3NyKENWTVhfSU9CX04yQ19MMkNfUFJJX0NO VCwgcHJpX2NudC51NjQpOw0KPiAtCX0NCj4gLQ0KPiAtCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZv Y3Rlb25faGNfZHJpdmVyLCBkZXYsIGRldl9uYW1lKGRldikpOw0KPiAtCWlmICghaGNkKSB7DQo+ IC0JCWRldl9kYmcoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgSENEXG4iKTsN Cj4gLQkJcmV0dXJuIC0xOw0KPiAtCX0NCj4gLQloY2QtPnVzZXNfbmV3X3BvbGxpbmcgPSAxOw0K PiAtCXVzYiA9IChzdHJ1Y3Qgb2N0ZW9uX2hjZCAqKWhjZC0+aGNkX3ByaXY7DQo+IC0NCj4gLQlz cGluX2xvY2tfaW5pdCgmdXNiLT5sb2NrKTsNCj4gLQ0KPiAtCXVzYi0+aW5pdF9mbGFncyA9IGlu aXRpYWxpemVfZmxhZ3M7DQo+IC0NCj4gLQkvKiBJbml0aWFsaXplIHRoZSBVU0Igc3RhdGUgc3Ry dWN0dXJlICovDQo+IC0JdXNiLT5pbmRleCA9IHVzYl9udW07DQo+IC0JSU5JVF9MSVNUX0hFQUQo JnVzYi0+aWRsZV9waXBlcyk7DQo+IC0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodXNiLT5h Y3RpdmVfcGlwZXMpOyBpKyspDQo+IC0JCUlOSVRfTElTVF9IRUFEKCZ1c2ItPmFjdGl2ZV9waXBl c1tpXSk7DQo+IC0NCj4gLQkvKiBEdWUgdG8gYW4gZXJyYXRhLCBDTjMxWFggZG9lc24ndCBzdXBw b3J0IERNQSAqLw0KPiAtCWlmIChPQ1RFT05fSVNfTU9ERUwoT0NURU9OX0NOMzFYWCkpIHsNCj4g LQkJdXNiLT5pbml0X2ZsYWdzIHw9IENWTVhfVVNCX0lOSVRJQUxJWkVfRkxBR1NfTk9fRE1BOw0K PiAtCQkvKiBPbmx5IHVzZSBvbmUgY2hhbm5lbCB3aXRoIG5vbiBETUEgKi8NCj4gLQkJdXNiLT5p ZGxlX2hhcmR3YXJlX2NoYW5uZWxzID0gMHgxOw0KPiAtCX0gZWxzZSBpZiAoT0NURU9OX0lTX01P REVMKE9DVEVPTl9DTjVYWFgpKSB7DQo+IC0JCS8qIENONVhYWCBoYXZlIGFuIGVycmF0YSB3aXRo IGNoYW5uZWwgMyAqLw0KPiAtCQl1c2ItPmlkbGVfaGFyZHdhcmVfY2hhbm5lbHMgPSAweGY3Ow0K PiAtCX0gZWxzZSB7DQo+IC0JCXVzYi0+aWRsZV9oYXJkd2FyZV9jaGFubmVscyA9IDB4ZmY7DQo+ IC0JfQ0KPiAtDQo+IC0Jc3RhdHVzID0gY3ZteF91c2JfaW5pdGlhbGl6ZShkZXYsIHVzYik7DQo+ IC0JaWYgKHN0YXR1cykgew0KPiAtCQlkZXZfZGJnKGRldiwgIlVTQiBpbml0aWFsaXphdGlvbiBm YWlsZWQgd2l0aCAlZFxuIiwgc3RhdHVzKTsNCj4gLQkJdXNiX3B1dF9oY2QoaGNkKTsNCj4gLQkJ cmV0dXJuIC0xOw0KPiAtCX0NCj4gLQ0KPiAtCXN0YXR1cyA9IHVzYl9hZGRfaGNkKGhjZCwgaXJx LCAwKTsNCj4gLQlpZiAoc3RhdHVzKSB7DQo+IC0JCWRldl9kYmcoZGV2LCAiVVNCIGFkZCBIQ0Qg ZmFpbGVkIHdpdGggJWRcbiIsIHN0YXR1cyk7DQo+IC0JCXVzYl9wdXRfaGNkKGhjZCk7DQo+IC0J CXJldHVybiAtMTsNCj4gLQl9DQo+IC0JZGV2aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxmLmNv bnRyb2xsZXIpOw0KPiAtDQo+IC0JZGV2X2luZm8oZGV2LCAiUmVnaXN0ZXJlZCBIQ0QgZm9yIHBv cnQgJWQgb24gaXJxICVkXG4iLCB1c2JfbnVtLCBpcnEpOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+ IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgb2N0ZW9uX3VzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikNCj4gLXsNCj4gLQlpbnQgc3RhdHVzOw0KPiAtCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZwZGV2LT5kZXY7DQo+IC0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOw0KPiAtCXN0cnVjdCBvY3Rlb25faGNkICp1c2IgPSBoY2RfdG9fb2N0ZW9uKGhj ZCk7DQo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gLQ0KPiAtCXVzYl9yZW1vdmVfaGNkKGhj ZCk7DQo+IC0Jc3Bpbl9sb2NrX2lycXNhdmUoJnVzYi0+bG9jaywgZmxhZ3MpOw0KPiAtCXN0YXR1 cyA9IGN2bXhfdXNiX3NodXRkb3duKHVzYik7DQo+IC0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm dXNiLT5sb2NrLCBmbGFncyk7DQo+IC0JaWYgKHN0YXR1cykNCj4gLQkJZGV2X2RiZyhkZXYsICJV U0Igc2h1dGRvd24gZmFpbGVkIHdpdGggJWRcbiIsIHN0YXR1cyk7DQo+IC0NCj4gLQl1c2JfcHV0 X2hjZChoY2QpOw0KPiAtDQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9jdGVvbl91c2JfbWF0Y2hbXSA9IHsNCj4gLQl7DQo+IC0J CS5jb21wYXRpYmxlID0gImNhdml1bSxvY3Rlb24tNTc1MC11c2JjIiwNCj4gLQl9LA0KPiAtCXt9 LA0KPiAtfTsNCj4gLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9jdGVvbl91c2JfbWF0Y2gpOw0K PiAtDQo+IC1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvY3Rlb25fdXNiX2RyaXZlciA9 IHsNCj4gLQkuZHJpdmVyID0gew0KPiAtCQkubmFtZQkJPSAib2N0ZW9uLWhjZCIsDQo+IC0JCS5v Zl9tYXRjaF90YWJsZSA9IG9jdGVvbl91c2JfbWF0Y2gsDQo+IC0JfSwNCj4gLQkucHJvYmUgICAg ICA9IG9jdGVvbl91c2JfcHJvYmUsDQo+IC0JLnJlbW92ZSAgICAgPSBvY3Rlb25fdXNiX3JlbW92 ZSwNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBpbnQgX19pbml0IG9jdGVvbl91c2JfZHJpdmVyX2lu aXQodm9pZCkNCj4gLXsNCj4gLQlpZiAodXNiX2Rpc2FibGVkKCkpDQo+IC0JCXJldHVybiAwOw0K PiAtDQo+IC0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2N0ZW9uX3VzYl9kcml2 ZXIpOw0KPiAtfQ0KPiAtbW9kdWxlX2luaXQob2N0ZW9uX3VzYl9kcml2ZXJfaW5pdCk7DQo+IC0N Cj4gLXN0YXRpYyB2b2lkIF9fZXhpdCBvY3Rlb25fdXNiX2RyaXZlcl9leGl0KHZvaWQpDQo+IC17 DQo+IC0JaWYgKHVzYl9kaXNhYmxlZCgpKQ0KPiAtCQlyZXR1cm47DQo+IC0NCj4gLQlwbGF0Zm9y bV9kcml2ZXJfdW5yZWdpc3Rlcigmb2N0ZW9uX3VzYl9kcml2ZXIpOw0KPiAtfQ0KPiAtbW9kdWxl X2V4aXQob2N0ZW9uX3VzYl9kcml2ZXJfZXhpdCk7DQo+IC0NCj4gLU1PRFVMRV9MSUNFTlNFKCJH UEwiKTsNCj4gLU1PRFVMRV9BVVRIT1IoIkNhdml1bSwgSW5jLiA8c3VwcG9ydEBjYXZpdW0uY29t PiIpOw0KPiAtTU9EVUxFX0RFU0NSSVBUSU9OKCJDYXZpdW0gSW5jLiBPQ1RFT04gVVNCIEhvc3Qg ZHJpdmVyLiIpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2Ivb2N0 ZW9uLWhjZC5oIGIvZHJpdmVycy9zdGFnaW5nL29jdGVvbi11c2Ivb2N0ZW9uLWhjZC5oDQo+IGRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCA5ZWQ2MTljOTNhNGUuLjAwMDAwMDAwMDAw MA0KPiAtLS0gYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9vY3Rlb24taGNkLmgNCj4gKysr IC9kZXYvbnVsbA0KPiBAQCAtMSwxODQ3ICswLDAgQEANCj4gLS8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wICovDQo+IC0vKg0KPiAtICogT2N0ZW9uIEhDRCBoYXJkd2FyZSByZWdp c3RlciBkZWZpbml0aW9ucy4NCj4gLSAqDQo+IC0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KPiAtICog TGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2Yg dGhpcyBhcmNoaXZlDQo+IC0gKiBmb3IgbW9yZSBkZXRhaWxzLg0KPiAtICoNCj4gLSAqIFNvbWUg cGFydHMgb2YgdGhlIGNvZGUgd2VyZSBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIEJTRCBsaWNl bnNlOg0KPiAtICoNCj4gLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDEwIENhdml1bSBOZXR3b3Jr cyAoc3VwcG9ydEBjYXZpdW0uY29tKS4gQWxsIHJpZ2h0cw0KPiAtICogcmVzZXJ2ZWQuDQo+IC0g Kg0KPiAtICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt cywgd2l0aCBvciB3aXRob3V0DQo+IC0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQo+IC0gKiBtZXQ6DQo+IC0g Kg0KPiAtICogICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0 aGUgYWJvdmUgY29weXJpZ2h0DQo+IC0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiAtICoNCj4gLSAqICAgKiBSZWRp c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQo+IC0g KiAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcNCj4gLSAqICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQNCj4gLSAqICAgICB3aXRoIHRoZSBkaXN0cmlidXRp b24uDQo+IC0gKg0KPiAtICogICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2F2aXVtIE5ldHdvcmtz IG5vciB0aGUgbmFtZXMgb2YNCj4gLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KPiAtICogICAgIGRlcml2ZWQgZnJvbSB0 aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbg0KPiAtICogICAgIHBl cm1pc3Npb24uDQo+IC0gKg0KPiAtICogVGhpcyBTb2Z0d2FyZSwgaW5jbHVkaW5nIHRlY2huaWNh bCBkYXRhLCBtYXkgYmUgc3ViamVjdCB0byBVLlMuIGV4cG9ydA0KPiAtICogY29udHJvbCBsYXdz LCBpbmNsdWRpbmcgdGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCBhbmQgaXRzIGFz c29jaWF0ZWQNCj4gLSAqIHJlZ3VsYXRpb25zLCBhbmQgbWF5IGJlIHN1YmplY3QgdG8gZXhwb3J0 IG9yIGltcG9ydCByZWd1bGF0aW9ucyBpbiBvdGhlcg0KPiAtICogY291bnRyaWVzLg0KPiAtICoN Cj4gLSAqIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIg0KPiAtICogQU5EIFdJVEggQUxMIEZBVUxUUyBBTkQgQ0FW SVVNIE5FVFdPUktTIE1BS0VTIE5PIFBST01JU0VTLCBSRVBSRVNFTlRBVElPTlMgT1INCj4gLSAq IFdBUlJBTlRJRVMsIEVJVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlksIE9SIE9USEVS V0lTRSwgV0lUSCBSRVNQRUNUIFRPDQo+IC0gKiBUSEUgU09GVFdBUkUsIElOQ0xVRElORyBJVFMg Q09ORElUSU9OLCBJVFMgQ09ORk9STUlUWSBUTyBBTlkgUkVQUkVTRU5UQVRJT04NCj4gLSAqIE9S IERFU0NSSVBUSU9OLCBPUiBUSEUgRVhJU1RFTkNFIE9GIEFOWSBMQVRFTlQgT1IgUEFURU5UIERF RkVDVFMsIEFORCBDQVZJVU0NCj4gLSAqIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQUxMIElNUExJ RUQgKElGIEFOWSkgV0FSUkFOVElFUyBPRiBUSVRMRSwNCj4gLSAqIE1FUkNIQU5UQUJJTElUWSwg Tk9OSU5GUklOR0VNRU5ULCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTEFDSyBP Rg0KPiAtICogVklSVVNFUywgQUNDVVJBQ1kgT1IgQ09NUExFVEVORVNTLCBRVUlFVCBFTkpPWU1F TlQsIFFVSUVUIFBPU1NFU1NJT04gT1INCj4gLSAqIENPUlJFU1BPTkRFTkNFIFRPIERFU0NSSVBU SU9OLiBUSEUgRU5USVJFIFJJU0sgQVJJU0lORyBPVVQgT0YgVVNFIE9SDQo+IC0gKiBQRVJGT1JN QU5DRSBPRiBUSEUgU09GVFdBUkUgTElFUyBXSVRIIFlPVS4NCj4gLSAqLw0KPiAtDQo+IC0jaWZu ZGVmIF9fT0NURU9OX0hDRF9IX18NCj4gLSNkZWZpbmUgX19PQ1RFT05fSENEX0hfXw0KPiAtDQo+ IC0jaW5jbHVkZSA8YXNtL2JpdGZpZWxkLmg+DQo+IC0NCj4gLSNkZWZpbmUgQ1ZNWF9VU0JDWEJB U0UgMHgwMDAxNkYwMDEwMDAwMDAwdWxsDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hSRUcxKHJlZywg YmlkKSBcDQo+IC0JKENWTVhfQUREX0lPX1NFRyhDVk1YX1VTQkNYQkFTRSB8IHJlZykgKyBcDQo+ IC0JICgoYmlkKSAmIDEpICogMHgxMDAwMDAwMDAwMDB1bGwpDQo+IC0jZGVmaW5lIENWTVhfVVNC Q1hSRUcyKHJlZywgYmlkLCBvZmYpIFwNCj4gLQkoQ1ZNWF9BRERfSU9fU0VHKENWTVhfVVNCQ1hC QVNFIHwgcmVnKSArIFwNCj4gLQkgKCgob2ZmKSAmIDcpICsgKChiaWQpICYgMSkgKiAweDgwMDAw MDAwMDB1bGwpICogMzIpDQo+IC0NCj4gLSNkZWZpbmUgQ1ZNWF9VU0JDWF9HQUhCQ0ZHKGJpZCkJ CUNWTVhfVVNCQ1hSRUcxKDB4MDA4LCBiaWQpDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hfR0hXQ0ZH MyhiaWQpCQlDVk1YX1VTQkNYUkVHMSgweDA0YywgYmlkKQ0KPiAtI2RlZmluZSBDVk1YX1VTQkNY X0dJTlRNU0soYmlkKQkJQ1ZNWF9VU0JDWFJFRzEoMHgwMTgsIGJpZCkNCj4gLSNkZWZpbmUgQ1ZN WF9VU0JDWF9HSU5UU1RTKGJpZCkJCUNWTVhfVVNCQ1hSRUcxKDB4MDE0LCBiaWQpDQo+IC0jZGVm aW5lIENWTVhfVVNCQ1hfR05QVFhGU0laKGJpZCkJQ1ZNWF9VU0JDWFJFRzEoMHgwMjgsIGJpZCkN Cj4gLSNkZWZpbmUgQ1ZNWF9VU0JDWF9HTlBUWFNUUyhiaWQpCUNWTVhfVVNCQ1hSRUcxKDB4MDJj LCBiaWQpDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hfR09UR0NUTChiaWQpCQlDVk1YX1VTQkNYUkVH MSgweDAwMCwgYmlkKQ0KPiAtI2RlZmluZSBDVk1YX1VTQkNYX0dSU1RDVEwoYmlkKQkJQ1ZNWF9V U0JDWFJFRzEoMHgwMTAsIGJpZCkNCj4gLSNkZWZpbmUgQ1ZNWF9VU0JDWF9HUlhGU0laKGJpZCkJ CUNWTVhfVVNCQ1hSRUcxKDB4MDI0LCBiaWQpDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hfR1JYU1RT UEgoYmlkKQlDVk1YX1VTQkNYUkVHMSgweDAyMCwgYmlkKQ0KPiAtI2RlZmluZSBDVk1YX1VTQkNY X0dVU0JDRkcoYmlkKQkJQ1ZNWF9VU0JDWFJFRzEoMHgwMGMsIGJpZCkNCj4gLSNkZWZpbmUgQ1ZN WF9VU0JDWF9IQUlOVChiaWQpCQlDVk1YX1VTQkNYUkVHMSgweDQxNCwgYmlkKQ0KPiAtI2RlZmlu ZSBDVk1YX1VTQkNYX0hBSU5UTVNLKGJpZCkJQ1ZNWF9VU0JDWFJFRzEoMHg0MTgsIGJpZCkNCj4g LSNkZWZpbmUgQ1ZNWF9VU0JDWF9IQ0NIQVJYKG9mZiwgYmlkKQlDVk1YX1VTQkNYUkVHMigweDUw MCwgYmlkLCBvZmYpDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hfSENGRyhiaWQpCQlDVk1YX1VTQkNY UkVHMSgweDQwMCwgYmlkKQ0KPiAtI2RlZmluZSBDVk1YX1VTQkNYX0hDSU5UTVNLWChvZmYsIGJp ZCkJQ1ZNWF9VU0JDWFJFRzIoMHg1MGMsIGJpZCwgb2ZmKQ0KPiAtI2RlZmluZSBDVk1YX1VTQkNY X0hDSU5UWChvZmYsIGJpZCkJQ1ZNWF9VU0JDWFJFRzIoMHg1MDgsIGJpZCwgb2ZmKQ0KPiAtI2Rl ZmluZSBDVk1YX1VTQkNYX0hDU1BMVFgob2ZmLCBiaWQpCUNWTVhfVVNCQ1hSRUcyKDB4NTA0LCBi aWQsIG9mZikNCj4gLSNkZWZpbmUgQ1ZNWF9VU0JDWF9IQ1RTSVpYKG9mZiwgYmlkKQlDVk1YX1VT QkNYUkVHMigweDUxMCwgYmlkLCBvZmYpDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hfSEZJUihiaWQp CQlDVk1YX1VTQkNYUkVHMSgweDQwNCwgYmlkKQ0KPiAtI2RlZmluZSBDVk1YX1VTQkNYX0hGTlVN KGJpZCkJCUNWTVhfVVNCQ1hSRUcxKDB4NDA4LCBiaWQpDQo+IC0jZGVmaW5lIENWTVhfVVNCQ1hf SFBSVChiaWQpCQlDVk1YX1VTQkNYUkVHMSgweDQ0MCwgYmlkKQ0KPiAtI2RlZmluZSBDVk1YX1VT QkNYX0hQVFhGU0laKGJpZCkJQ1ZNWF9VU0JDWFJFRzEoMHgxMDAsIGJpZCkNCj4gLSNkZWZpbmUg Q1ZNWF9VU0JDWF9IUFRYU1RTKGJpZCkJCUNWTVhfVVNCQ1hSRUcxKDB4NDEwLCBiaWQpDQo+IC0N Cj4gLSNkZWZpbmUgQ1ZNWF9VU0JOWEJJRDEoYmlkKSAoKChiaWQpICYgMSkgKiAweDEwMDAwMDAw dWxsKQ0KPiAtI2RlZmluZSBDVk1YX1VTQk5YQklEMihiaWQpICgoKGJpZCkgJiAxKSAqIDB4MTAw MDAwMDAwMDAwdWxsKQ0KPiAtDQo+IC0jZGVmaW5lIENWTVhfVVNCTlhSRUcxKHJlZywgYmlkKSBc DQo+IC0JKENWTVhfQUREX0lPX1NFRygweDAwMDExODAwNjgwMDAwMDB1bGwgfCByZWcpICsgQ1ZN WF9VU0JOWEJJRDEoYmlkKSkNCj4gLSNkZWZpbmUgQ1ZNWF9VU0JOWFJFRzIocmVnLCBiaWQpIFwN Cj4gLQkoQ1ZNWF9BRERfSU9fU0VHKDB4MDAwMTZGMDAwMDAwMDAwMHVsbCB8IHJlZykgKyBDVk1Y X1VTQk5YQklEMihiaWQpKQ0KPiAtDQo+IC0jZGVmaW5lIENWTVhfVVNCTlhfQ0xLX0NUTChiaWQp CQlDVk1YX1VTQk5YUkVHMSgweDEwLCBiaWQpDQo+IC0jZGVmaW5lIENWTVhfVVNCTlhfRE1BMF9J TkJfQ0hOMChiaWQpCUNWTVhfVVNCTlhSRUcyKDB4ODE4LCBiaWQpDQo+IC0jZGVmaW5lIENWTVhf VVNCTlhfRE1BMF9PVVRCX0NITjAoYmlkKQlDVk1YX1VTQk5YUkVHMigweDg1OCwgYmlkKQ0KPiAt I2RlZmluZSBDVk1YX1VTQk5YX1VTQlBfQ1RMX1NUQVRVUyhiaWQpCUNWTVhfVVNCTlhSRUcxKDB4 MTgsIGJpZCkNCj4gLQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2dhaGJjZmcNCj4gLSAqDQo+ IC0gKiBDb3JlIEFIQiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChHQUhCQ0ZHKQ0KPiAtICoNCj4g LSAqIFRoaXMgcmVnaXN0ZXIgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZSBjb3JlIGFmdGVy IHBvd2VyLW9uIG9yIGEgY2hhbmdlIGluDQo+IC0gKiBtb2RlIG9mIG9wZXJhdGlvbi4gVGhpcyBy ZWdpc3RlciBtYWlubHkgY29udGFpbnMgQUhCIHN5c3RlbS1yZWxhdGVkDQo+IC0gKiBjb25maWd1 cmF0aW9uIHBhcmFtZXRlcnMuIFRoZSBBSEIgaXMgdGhlIHByb2Nlc3NvciBpbnRlcmZhY2UgdG8g dGhlIE8yUCBVU0INCj4gLSAqIGNvcmUuIEluIGdlbmVyYWwsIHNvZnR3YXJlIG5lZWQgbm90IGtu b3cgYWJvdXQgdGhpcyBpbnRlcmZhY2UgZXhjZXB0IHRvDQo+IC0gKiBwcm9ncmFtIHRoZSB2YWx1 ZXMgYXMgc3BlY2lmaWVkLg0KPiAtICoNCj4gLSAqIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHByb2dy YW0gdGhpcyByZWdpc3RlciBhcyBwYXJ0IG9mIHRoZSBPMlAgVVNCIGNvcmUNCj4gLSAqIGluaXRp YWxpemF0aW9uLiBEbyBub3QgY2hhbmdlIHRoaXMgcmVnaXN0ZXIgYWZ0ZXIgdGhlIGluaXRpYWwg cHJvZ3JhbW1pbmcuDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hfZ2FoYmNmZyB7DQo+IC0J dTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JjeF9nYWhiY2ZnX3MNCj4g LQkgKiBAcHR4ZmVtcGx2bDogUGVyaW9kaWMgVHhGSUZPIEVtcHR5IExldmVsIChQVHhGRW1wTHZs KQ0KPiAtCSAqCVNvZnR3YXJlIHNob3VsZCBzZXQgdGhpcyBiaXQgdG8gMHgxLg0KPiAtCSAqCUlu ZGljYXRlcyB3aGVuIHRoZSBQZXJpb2RpYyBUeEZJRk8gRW1wdHkgSW50ZXJydXB0IGJpdCBpbiB0 aGUNCj4gLQkgKglDb3JlIEludGVycnVwdCByZWdpc3RlciAoR0lOVFNUUy5QVHhGRW1wKSBpcyB0 cmlnZ2VyZWQuIFRoaXMNCj4gLQkgKgliaXQgaXMgdXNlZCBvbmx5IGluIFNsYXZlIG1vZGUuDQo+ IC0JICoJKiAxJ2IwOiBHSU5UU1RTLlBUeEZFbXAgaW50ZXJydXB0IGluZGljYXRlcyB0aGF0IHRo ZSBQZXJpb2RpYw0KPiAtCSAqCVR4RklGTyBpcyBoYWxmIGVtcHR5DQo+IC0JICoJKiAxJ2IxOiBH SU5UU1RTLlBUeEZFbXAgaW50ZXJydXB0IGluZGljYXRlcyB0aGF0IHRoZSBQZXJpb2RpYw0KPiAt CSAqCVR4RklGTyBpcyBjb21wbGV0ZWx5IGVtcHR5DQo+IC0JICogQG5wdHhmZW1wbHZsOiBOb24t UGVyaW9kaWMgVHhGSUZPIEVtcHR5IExldmVsIChOUFR4RkVtcEx2bCkNCj4gLQkgKglTb2Z0d2Fy ZSBzaG91bGQgc2V0IHRoaXMgYml0IHRvIDB4MS4NCj4gLQkgKglJbmRpY2F0ZXMgd2hlbiB0aGUg Tm9uLVBlcmlvZGljIFR4RklGTyBFbXB0eSBJbnRlcnJ1cHQgYml0IGluDQo+IC0JICoJdGhlIENv cmUgSW50ZXJydXB0IHJlZ2lzdGVyIChHSU5UU1RTLk5QVHhGRW1wKSBpcyB0cmlnZ2VyZWQuDQo+ IC0JICoJVGhpcyBiaXQgaXMgdXNlZCBvbmx5IGluIFNsYXZlIG1vZGUuDQo+IC0JICoJKiAxJ2Iw OiBHSU5UU1RTLk5QVHhGRW1wIGludGVycnVwdCBpbmRpY2F0ZXMgdGhhdCB0aGUgTm9uLQ0KPiAt CSAqCVBlcmlvZGljIFR4RklGTyBpcyBoYWxmIGVtcHR5DQo+IC0JICoJKiAxJ2IxOiBHSU5UU1RT Lk5QVHhGRW1wIGludGVycnVwdCBpbmRpY2F0ZXMgdGhhdCB0aGUgTm9uLQ0KPiAtCSAqCVBlcmlv ZGljIFR4RklGTyBpcyBjb21wbGV0ZWx5IGVtcHR5DQo+IC0JICogQGRtYWVuOiBETUEgRW5hYmxl IChETUFFbikNCj4gLQkgKgkqIDEnYjA6IENvcmUgb3BlcmF0ZXMgaW4gU2xhdmUgbW9kZQ0KPiAt CSAqCSogMSdiMTogQ29yZSBvcGVyYXRlcyBpbiBhIERNQSBtb2RlDQo+IC0JICogQGhic3RsZW46 IEJ1cnN0IExlbmd0aC9UeXBlIChIQnN0TGVuKQ0KPiAtCSAqCVRoaXMgZmllbGQgaGFzIG5vdCBl ZmZlY3QgYW5kIHNob3VsZCBiZSBsZWZ0IGFzIDB4MC4NCj4gLQkgKiBAZ2xibGludHJtc2s6IEds b2JhbCBJbnRlcnJ1cHQgTWFzayAoR2xibEludHJNc2spDQo+IC0JICoJU29mdHdhcmUgc2hvdWxk IHNldCB0aGlzIGZpZWxkIHRvIDB4MS4NCj4gLQkgKglUaGUgYXBwbGljYXRpb24gdXNlcyB0aGlz IGJpdCB0byBtYXNrIG9yIHVubWFzayB0aGUgaW50ZXJydXB0DQo+IC0JICoJbGluZSBhc3NlcnRp b24gdG8gaXRzZWxmLiBJcnJlc3BlY3RpdmUgb2YgdGhpcyBiaXQncyBzZXR0aW5nLA0KPiAtCSAq CXRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyBhcmUgdXBkYXRlZCBieSB0aGUgY29yZS4N Cj4gLQkgKgkqIDEnYjA6IE1hc2sgdGhlIGludGVycnVwdCBhc3NlcnRpb24gdG8gdGhlIGFwcGxp Y2F0aW9uLg0KPiAtCSAqCSogMSdiMTogVW5tYXNrIHRoZSBpbnRlcnJ1cHQgYXNzZXJ0aW9uIHRv IHRoZSBhcHBsaWNhdGlvbi4NCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgY3ZteF91c2JjeF9nYWhiY2Zn X3Mgew0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF85XzMxCTogMjMsDQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIHB0eGZlbXBsdmwJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9G SUVMRCh1MzIgbnB0eGZlbXBsdmwJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNl cnZlZF82XzYJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBkbWFlbgkJOiAxLA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBoYnN0bGVuCQk6IDQsDQo+IC0JCV9fQklURklFTERfRklF TEQodTMyIGdsYmxpbnRybXNrCTogMSwNCj4gLQkJOykpKSkpKSkNCj4gLQl9IHM7DQo+IC19Ow0K PiAtDQo+IC0vKioNCj4gLSAqIGN2bXhfdXNiYyNfZ2h3Y2ZnMw0KPiAtICoNCj4gLSAqIFVzZXIg SFcgQ29uZmlnMyBSZWdpc3RlciAoR0hXQ0ZHMykNCj4gLSAqDQo+IC0gKiBUaGlzIHJlZ2lzdGVy IGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgb2YgdGhlIE8yUCBVU0IgY29yZS4N Cj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9naHdjZmczIHsNCj4gLQl1MzIgdTMyOw0KPiAt CS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4X2dod2NmZzNfcw0KPiAtCSAqIEBkZmlmb2Rl cHRoOiBERklGTyBEZXB0aCAoRGZpZm9EZXB0aCkNCj4gLQkgKglUaGlzIHZhbHVlIGlzIGluIHRl cm1zIG9mIDMyLWJpdCB3b3Jkcy4NCj4gLQkgKgkqIE1pbmltdW0gdmFsdWUgaXMgMzINCj4gLQkg KgkqIE1heGltdW0gdmFsdWUgaXMgMzI3NjgNCj4gLQkgKiBAYWhicGh5c3luYzogQUhCIGFuZCBQ SFkgU3luY2hyb25vdXMgKEFoYlBoeVN5bmMpDQo+IC0JICoJSW5kaWNhdGVzIHdoZXRoZXIgQUhC IGFuZCBQSFkgY2xvY2tzIGFyZSBzeW5jaHJvbm91cyB0bw0KPiAtCSAqCWVhY2ggb3RoZXIuDQo+ IC0JICoJKiAxJ2IwOiBObw0KPiAtCSAqCSogMSdiMTogWWVzDQo+IC0JICoJVGhpcyBiaXQgaXMg dGllZCB0byAxLg0KPiAtCSAqIEByc3R0eXBlOiBSZXNldCBTdHlsZSBmb3IgQ2xvY2tlZCBhbHdh eXMgQmxvY2tzIGluIFJUTCAoUnN0VHlwZSkNCj4gLQkgKgkqIDEnYjA6IEFzeW5jaHJvbm91cyBy ZXNldCBpcyB1c2VkIGluIHRoZSBjb3JlDQo+IC0JICoJKiAxJ2IxOiBTeW5jaHJvbm91cyByZXNl dCBpcyB1c2VkIGluIHRoZSBjb3JlDQo+IC0JICogQG9wdGZlYXR1cmU6IE9wdGlvbmFsIEZlYXR1 cmVzIFJlbW92ZWQgKE9wdEZlYXR1cmUpDQo+IC0JICoJSW5kaWNhdGVzIHdoZXRoZXIgdGhlIFVz ZXIgSUQgcmVnaXN0ZXIsIEdQSU8gaW50ZXJmYWNlIHBvcnRzLA0KPiAtCSAqCWFuZCBTT0YgdG9n Z2xlIGFuZCBjb3VudGVyIHBvcnRzIHdlcmUgcmVtb3ZlZCBmb3IgZ2F0ZSBjb3VudA0KPiAtCSAq CW9wdGltaXphdGlvbi4NCj4gLQkgKiBAdmVuZG9yX2NvbnRyb2xfaW50ZXJmYWNlX3N1cHBvcnQ6 IFZlbmRvciBDb250cm9sIEludGVyZmFjZSBTdXBwb3J0DQo+IC0JICoJKiAxJ2IwOiBWZW5kb3Ig Q29udHJvbCBJbnRlcmZhY2UgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgY29yZS4NCj4gLQkgKgkq IDEnYjE6IFZlbmRvciBDb250cm9sIEludGVyZmFjZSBpcyBhdmFpbGFibGUuDQo+IC0JICogQGky Y19zZWxlY3Rpb246IEkyQyBTZWxlY3Rpb24NCj4gLQkgKgkqIDEnYjA6IEkyQyBJbnRlcmZhY2Ug aXMgbm90IGF2YWlsYWJsZSBvbiB0aGUgY29yZS4NCj4gLQkgKgkqIDEnYjE6IEkyQyBJbnRlcmZh Y2UgaXMgYXZhaWxhYmxlIG9uIHRoZSBjb3JlLg0KPiAtCSAqIEBvdGdlbjogT1RHIEZ1bmN0aW9u IEVuYWJsZWQgKE90Z0VuKQ0KPiAtCSAqCVRoZSBhcHBsaWNhdGlvbiB1c2VzIHRoaXMgYml0IHRv IGluZGljYXRlIHRoZSBPMlAgVVNCIGNvcmUncw0KPiAtCSAqCU9URyBjYXBhYmlsaXRpZXMuDQo+ IC0JICoJKiAxJ2IwOiBOb3QgT1RHIGNhcGFibGUNCj4gLQkgKgkqIDEnYjE6IE9URyBDYXBhYmxl DQo+IC0JICogQHBrdHNpemV3aWR0aDogV2lkdGggb2YgUGFja2V0IFNpemUgQ291bnRlcnMgKFBr dFNpemVXaWR0aCkNCj4gLQkgKgkqIDMnYjAwMDogNCBiaXRzDQo+IC0JICoJKiAzJ2IwMDE6IDUg Yml0cw0KPiAtCSAqCSogMydiMDEwOiA2IGJpdHMNCj4gLQkgKgkqIDMnYjAxMTogNyBiaXRzDQo+ IC0JICoJKiAzJ2IxMDA6IDggYml0cw0KPiAtCSAqCSogMydiMTAxOiA5IGJpdHMNCj4gLQkgKgkq IDMnYjExMDogMTAgYml0cw0KPiAtCSAqCSogT3RoZXJzOiBSZXNlcnZlZA0KPiAtCSAqIEB4ZmVy c2l6ZXdpZHRoOiBXaWR0aCBvZiBUcmFuc2ZlciBTaXplIENvdW50ZXJzIChYZmVyU2l6ZVdpZHRo KQ0KPiAtCSAqCSogNCdiMDAwMDogMTEgYml0cw0KPiAtCSAqCSogNCdiMDAwMTogMTIgYml0cw0K PiAtCSAqCS0gLi4uDQo+IC0JICoJKiA0J2IxMDAwOiAxOSBiaXRzDQo+IC0JICoJKiBPdGhlcnM6 IFJlc2VydmVkDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfZ2h3Y2ZnM19zIHsNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgZGZpZm9kZXB0aAkJCQk6IDE2LA0KPiAtCQlfX0JJVEZJ RUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8xM18xNQkJCTogMywNCj4gLQkJX19CSVRGSUVMRF9GSUVM RCh1MzIgYWhicGh5c3luYwkJCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHJzdHR5 cGUJCQkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBvcHRmZWF0dXJlCQkJCTogMSwN Cj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgdmVuZG9yX2NvbnRyb2xfaW50ZXJmYWNlX3N1cHBv cnQJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBpMmNfc2VsZWN0aW9uCQkJOiAxLA0K PiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBvdGdlbgkJCQk6IDEsDQo+IC0JCV9fQklURklFTERf RklFTEQodTMyIHBrdHNpemV3aWR0aAkJCTogMywNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIg eGZlcnNpemV3aWR0aAkJCTogNCwNCj4gLQkJOykpKSkpKSkpKSkNCj4gLQl9IHM7DQo+IC19Ow0K PiAtDQo+IC0vKioNCj4gLSAqIGN2bXhfdXNiYyNfZ2ludG1zaw0KPiAtICoNCj4gLSAqIENvcmUg SW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKEdJTlRNU0spDQo+IC0gKg0KPiAtICogVGhpcyByZWdp c3RlciB3b3JrcyB3aXRoIHRoZSBDb3JlIEludGVycnVwdCByZWdpc3RlciB0byBpbnRlcnJ1cHQg dGhlDQo+IC0gKiBhcHBsaWNhdGlvbi4gV2hlbiBhbiBpbnRlcnJ1cHQgYml0IGlzIG1hc2tlZCwg dGhlIGludGVycnVwdCBhc3NvY2lhdGVkIHdpdGgNCj4gLSAqIHRoYXQgYml0IHdpbGwgbm90IGJl IGdlbmVyYXRlZC4gSG93ZXZlciwgdGhlIENvcmUgSW50ZXJydXB0IChHSU5UU1RTKQ0KPiAtICog cmVnaXN0ZXIgYml0IGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBpbnRlcnJ1cHQgd2lsbCBzdGlsbCBi ZSBzZXQuDQo+IC0gKiBNYXNrIGludGVycnVwdDogMSdiMCwgVW5tYXNrIGludGVycnVwdDogMSdi MQ0KPiAtICovDQo+IC11bmlvbiBjdm14X3VzYmN4X2dpbnRtc2sgew0KPiAtCXUzMiB1MzI7DQo+ IC0JLyoqDQo+IC0JICogc3RydWN0IGN2bXhfdXNiY3hfZ2ludG1za19zDQo+IC0JICogQHdrdXBp bnRtc2s6IFJlc3VtZS9SZW1vdGUgV2FrZXVwIERldGVjdGVkIEludGVycnVwdCBNYXNrDQo+IC0J ICoJKFdrVXBJbnRNc2spDQo+IC0JICogQHNlc3NyZXFpbnRtc2s6IFNlc3Npb24gUmVxdWVzdC9O ZXcgU2Vzc2lvbiBEZXRlY3RlZCBJbnRlcnJ1cHQgTWFzaw0KPiAtCSAqCShTZXNzUmVxSW50TXNr KQ0KPiAtCSAqIEBkaXNjb25uaW50bXNrOiBEaXNjb25uZWN0IERldGVjdGVkIEludGVycnVwdCBN YXNrIChEaXNjb25uSW50TXNrKQ0KPiAtCSAqIEBjb25pZHN0c2Nobmdtc2s6IENvbm5lY3RvciBJ RCBTdGF0dXMgQ2hhbmdlIE1hc2sgKENvbklEU3RzQ2huZ01zaykNCj4gLQkgKiBAcHR4ZmVtcG1z azogUGVyaW9kaWMgVHhGSUZPIEVtcHR5IE1hc2sgKFBUeEZFbXBNc2spDQo+IC0JICogQGhjaGlu dG1zazogSG9zdCBDaGFubmVscyBJbnRlcnJ1cHQgTWFzayAoSENoSW50TXNrKQ0KPiAtCSAqIEBw cnRpbnRtc2s6IEhvc3QgUG9ydCBJbnRlcnJ1cHQgTWFzayAoUHJ0SW50TXNrKQ0KPiAtCSAqIEBm ZXRzdXNwbXNrOiBEYXRhIEZldGNoIFN1c3BlbmRlZCBNYXNrIChGZXRTdXNwTXNrKQ0KPiAtCSAq IEBpbmNvbXBscG1zazogSW5jb21wbGV0ZSBQZXJpb2RpYyBUcmFuc2ZlciBNYXNrIChpbmNvbXBs UE1zaykNCj4gLQkgKglJbmNvbXBsZXRlIElzb2Nocm9ub3VzIE9VVCBUcmFuc2ZlciBNYXNrDQo+ IC0JICoJKGluY29tcElTT09VVE1zaykNCj4gLQkgKiBAaW5jb21waXNvaW5tc2s6IEluY29tcGxl dGUgSXNvY2hyb25vdXMgSU4gVHJhbnNmZXIgTWFzaw0KPiAtCSAqCQkgICAgKGluY29tcElTT0lO TXNrKQ0KPiAtCSAqIEBvZXBpbnRtc2s6IE9VVCBFbmRwb2ludHMgSW50ZXJydXB0IE1hc2sgKE9F UEludE1zaykNCj4gLQkgKiBAaW5lcGludG1zazogSU4gRW5kcG9pbnRzIEludGVycnVwdCBNYXNr IChJTkVQSW50TXNrKQ0KPiAtCSAqIEBlcG1pc21zazogRW5kcG9pbnQgTWlzbWF0Y2ggSW50ZXJy dXB0IE1hc2sgKEVQTWlzTXNrKQ0KPiAtCSAqIEBlb3BmbXNrOiBFbmQgb2YgUGVyaW9kaWMgRnJh bWUgSW50ZXJydXB0IE1hc2sgKEVPUEZNc2spDQo+IC0JICogQGlzb291dGRyb3Btc2s6IElzb2No cm9ub3VzIE9VVCBQYWNrZXQgRHJvcHBlZCBJbnRlcnJ1cHQgTWFzaw0KPiAtCSAqCShJU09PdXRE cm9wTXNrKQ0KPiAtCSAqIEBlbnVtZG9uZW1zazogRW51bWVyYXRpb24gRG9uZSBNYXNrIChFbnVt RG9uZU1zaykNCj4gLQkgKiBAdXNicnN0bXNrOiBVU0IgUmVzZXQgTWFzayAoVVNCUnN0TXNrKQ0K PiAtCSAqIEB1c2JzdXNwbXNrOiBVU0IgU3VzcGVuZCBNYXNrIChVU0JTdXNwTXNrKQ0KPiAtCSAq IEBlcmx5c3VzcG1zazogRWFybHkgU3VzcGVuZCBNYXNrIChFcmx5U3VzcE1zaykNCj4gLQkgKiBA aTJjaW50OiBJMkMgSW50ZXJydXB0IE1hc2sgKEkyQ0lOVCkNCj4gLQkgKiBAdWxwaWNraW50bXNr OiBVTFBJIENhcmtpdCBJbnRlcnJ1cHQgTWFzayAoVUxQSUNLSU5UTXNrKQ0KPiAtCSAqCUkyQyBD YXJraXQgSW50ZXJydXB0IE1hc2sgKEkyQ0NLSU5UTXNrKQ0KPiAtCSAqIEBnb3V0bmFrZWZmbXNr OiBHbG9iYWwgT1VUIE5BSyBFZmZlY3RpdmUgTWFzayAoR09VVE5ha0VmZk1zaykNCj4gLQkgKiBA Z2lubmFrZWZmbXNrOiBHbG9iYWwgTm9uLVBlcmlvZGljIElOIE5BSyBFZmZlY3RpdmUgTWFzaw0K PiAtCSAqCQkgIChHSU5OYWtFZmZNc2spDQo+IC0JICogQG5wdHhmZW1wbXNrOiBOb24tUGVyaW9k aWMgVHhGSUZPIEVtcHR5IE1hc2sgKE5QVHhGRW1wTXNrKQ0KPiAtCSAqIEByeGZsdmxtc2s6IFJl Y2VpdmUgRklGTyBOb24tRW1wdHkgTWFzayAoUnhGTHZsTXNrKQ0KPiAtCSAqIEBzb2Ztc2s6IFN0 YXJ0IG9mIChtaWNybylGcmFtZSBNYXNrIChTb2ZNc2spDQo+IC0JICogQG90Z2ludG1zazogT1RH IEludGVycnVwdCBNYXNrIChPVEdJbnRNc2spDQo+IC0JICogQG1vZGVtaXNtc2s6IE1vZGUgTWlz bWF0Y2ggSW50ZXJydXB0IE1hc2sgKE1vZGVNaXNNc2spDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2 bXhfdXNiY3hfZ2ludG1za19zIHsNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgd2t1cGludG1z awkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBzZXNzcmVxaW50bXNrCTogMSwNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgZGlzY29ubmludG1zawk6IDEsDQo+IC0JCV9fQklURklF TERfRklFTEQodTMyIGNvbmlkc3RzY2huZ21zawk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQo dTMyIHJlc2VydmVkXzI3XzI3CTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcHR4ZmVt cG1zawkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBoY2hpbnRtc2sJCTogMSwNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcHJ0aW50bXNrCQk6IDEsDQo+IC0JCV9fQklURklFTERf RklFTEQodTMyIHJlc2VydmVkXzIzXzIzCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIg ZmV0c3VzcG1zawkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBpbmNvbXBscG1zawk6 IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGluY29tcGlzb2lubXNrCTogMSwNCj4gLQkJ X19CSVRGSUVMRF9GSUVMRCh1MzIgb2VwaW50bXNrCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklF TEQodTMyIGluZXBpbnRtc2sJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgZXBtaXNt c2sJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcmVzZXJ2ZWRfMTZfMTYJOiAxLA0K PiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBlb3BmbXNrCQk6IDEsDQo+IC0JCV9fQklURklFTERf RklFTEQodTMyIGlzb291dGRyb3Btc2sJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBl bnVtZG9uZW1zawk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHVzYnJzdG1zawkJOiAx LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiB1c2JzdXNwbXNrCQk6IDEsDQo+IC0JCV9fQklU RklFTERfRklFTEQodTMyIGVybHlzdXNwbXNrCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 MzIgaTJjaW50CQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHVscGlja2ludG1zawk6 IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGdvdXRuYWtlZmZtc2sJOiAxLA0KPiAtCQlf X0JJVEZJRUxEX0ZJRUxEKHUzMiBnaW5uYWtlZmZtc2sJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJ RUxEKHUzMiBucHR4ZmVtcG1zawk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHJ4Zmx2 bG1zawkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBzb2Ztc2sJCTogMSwNCj4gLQkJ X19CSVRGSUVMRF9GSUVMRCh1MzIgb3RnaW50bXNrCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklF TEQodTMyIG1vZGVtaXNtc2sJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcmVzZXJ2 ZWRfMF8wCTogMSwNCj4gLQkJOykpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpDQo+IC0J fSBzOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2dpbnRzdHMNCj4gLSAq DQo+IC0gKiBDb3JlIEludGVycnVwdCBSZWdpc3RlciAoR0lOVFNUUykNCj4gLSAqDQo+IC0gKiBU aGlzIHJlZ2lzdGVyIGludGVycnVwdHMgdGhlIGFwcGxpY2F0aW9uIGZvciBzeXN0ZW0tbGV2ZWwg ZXZlbnRzIGluIHRoZQ0KPiAtICogY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbiAoRGV2aWNlIG1v ZGUgb3IgSG9zdCBtb2RlKS4gSXQgaXMgc2hvd24gaW4NCj4gLSAqIEludGVycnVwdC4gU29tZSBv ZiB0aGUgYml0cyBpbiB0aGlzIHJlZ2lzdGVyIGFyZSB2YWxpZCBvbmx5IGluIEhvc3QgbW9kZSwN Cj4gLSAqIHdoaWxlIG90aGVycyBhcmUgdmFsaWQgaW4gRGV2aWNlIG1vZGUgb25seS4gVGhpcyBy ZWdpc3RlciBhbHNvIGluZGljYXRlcyB0aGUNCj4gLSAqIGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRp b24uIEluIG9yZGVyIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgb2YNCj4gLSAq IHR5cGUgUl9TU19XQywgdGhlIGFwcGxpY2F0aW9uIG11c3Qgd3JpdGUgMSdiMSBpbnRvIHRoZSBi aXQuIFRoZSBGSUZPIHN0YXR1cw0KPiAtICogaW50ZXJydXB0cyBhcmUgcmVhZCBvbmx5OyBvbmNl IHNvZnR3YXJlIHJlYWRzIGZyb20gb3Igd3JpdGVzIHRvIHRoZSBGSUZPDQo+IC0gKiB3aGlsZSBz ZXJ2aWNpbmcgdGhlc2UgaW50ZXJydXB0cywgRklGTyBpbnRlcnJ1cHQgY29uZGl0aW9ucyBhcmUg Y2xlYXJlZA0KPiAtICogYXV0b21hdGljYWxseS4NCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2Jj eF9naW50c3RzIHsNCj4gLQl1MzIgdTMyOw0KPiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3Vz YmN4X2dpbnRzdHNfcw0KPiAtCSAqIEB3a3VwaW50OiBSZXN1bWUvUmVtb3RlIFdha2V1cCBEZXRl Y3RlZCBJbnRlcnJ1cHQgKFdrVXBJbnQpDQo+IC0JICoJSW4gRGV2aWNlIG1vZGUsIHRoaXMgaW50 ZXJydXB0IGlzIGFzc2VydGVkIHdoZW4gYSByZXN1bWUgaXMNCj4gLQkgKglkZXRlY3RlZCBvbiB0 aGUgVVNCLiBJbiBIb3N0IG1vZGUsIHRoaXMgaW50ZXJydXB0IGlzIGFzc2VydGVkDQo+IC0JICoJ d2hlbiBhIHJlbW90ZSB3YWtldXAgaXMgZGV0ZWN0ZWQgb24gdGhlIFVTQi4NCj4gLQkgKglGb3Ig bW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXNlIHRoaXMgaW50ZXJydXB0LCBzZWUgIlBhcnRp YWwNCj4gLQkgKglQb3dlci1Eb3duIGFuZCBDbG9jayBHYXRpbmcgUHJvZ3JhbW1pbmcgTW9kZWwi IG9uDQo+IC0JICoJcGFnZSAzNTMuDQo+IC0JICogQHNlc3NyZXFpbnQ6IFNlc3Npb24gUmVxdWVz dC9OZXcgU2Vzc2lvbiBEZXRlY3RlZCBJbnRlcnJ1cHQNCj4gLQkgKgkJKFNlc3NSZXFJbnQpDQo+ IC0JICoJSW4gSG9zdCBtb2RlLCB0aGlzIGludGVycnVwdCBpcyBhc3NlcnRlZCB3aGVuIGEgc2Vz c2lvbiByZXF1ZXN0DQo+IC0JICoJaXMgZGV0ZWN0ZWQgZnJvbSB0aGUgZGV2aWNlLiBJbiBEZXZp Y2UgbW9kZSwgdGhpcyBpbnRlcnJ1cHQgaXMNCj4gLQkgKglhc3NlcnRlZCB3aGVuIHRoZSB1dG1p b3RnX2J2YWxpZCBzaWduYWwgZ29lcyBoaWdoLg0KPiAtCSAqCUZvciBtb3JlIGluZm9ybWF0aW9u IG9uIGhvdyB0byB1c2UgdGhpcyBpbnRlcnJ1cHQsIHNlZSAiUGFydGlhbA0KPiAtCSAqCVBvd2Vy LURvd24gYW5kIENsb2NrIEdhdGluZyBQcm9ncmFtbWluZyBNb2RlbCIgb24NCj4gLQkgKglwYWdl IDM1My4NCj4gLQkgKiBAZGlzY29ubmludDogRGlzY29ubmVjdCBEZXRlY3RlZCBJbnRlcnJ1cHQg KERpc2Nvbm5JbnQpDQo+IC0JICoJQXNzZXJ0ZWQgd2hlbiBhIGRldmljZSBkaXNjb25uZWN0IGlz IGRldGVjdGVkLg0KPiAtCSAqIEBjb25pZHN0c2Nobmc6IENvbm5lY3RvciBJRCBTdGF0dXMgQ2hh bmdlIChDb25JRFN0c0NobmcpDQo+IC0JICoJVGhlIGNvcmUgc2V0cyB0aGlzIGJpdCB3aGVuIHRo ZXJlIGlzIGEgY2hhbmdlIGluIGNvbm5lY3RvciBJRA0KPiAtCSAqCXN0YXR1cy4NCj4gLQkgKiBA cHR4ZmVtcDogUGVyaW9kaWMgVHhGSUZPIEVtcHR5IChQVHhGRW1wKQ0KPiAtCSAqCUFzc2VydGVk IHdoZW4gdGhlIFBlcmlvZGljIFRyYW5zbWl0IEZJRk8gaXMgZWl0aGVyIGhhbGYgb3INCj4gLQkg Kgljb21wbGV0ZWx5IGVtcHR5IGFuZCB0aGVyZSBpcyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIGVu dHJ5IHRvIGJlDQo+IC0JICoJd3JpdHRlbiBpbiB0aGUgUGVyaW9kaWMgUmVxdWVzdCBRdWV1ZS4g VGhlIGhhbGYgb3IgY29tcGxldGVseQ0KPiAtCSAqCWVtcHR5IHN0YXR1cyBpcyBkZXRlcm1pbmVk IGJ5IHRoZSBQZXJpb2RpYyBUeEZJRk8gRW1wdHkgTGV2ZWwNCj4gLQkgKgliaXQgaW4gdGhlIENv cmUgQUhCIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4gLQkgKgkoR0FIQkNGRy5QVHhGRW1wTHZs KS4NCj4gLQkgKiBAaGNoaW50OiBIb3N0IENoYW5uZWxzIEludGVycnVwdCAoSENoSW50KQ0KPiAt CSAqCVRoZSBjb3JlIHNldHMgdGhpcyBiaXQgdG8gaW5kaWNhdGUgdGhhdCBhbiBpbnRlcnJ1cHQg aXMgcGVuZGluZw0KPiAtCSAqCW9uIG9uZSBvZiB0aGUgY2hhbm5lbHMgb2YgdGhlIGNvcmUgKGlu IEhvc3QgbW9kZSkuIFRoZQ0KPiAtCSAqCWFwcGxpY2F0aW9uIG11c3QgcmVhZCB0aGUgSG9zdCBB bGwgQ2hhbm5lbHMgSW50ZXJydXB0IChIQUlOVCkNCj4gLQkgKglyZWdpc3RlciB0byBkZXRlcm1p bmUgdGhlIGV4YWN0IG51bWJlciBvZiB0aGUgY2hhbm5lbCBvbiB3aGljaA0KPiAtCSAqCXRoZSBp bnRlcnJ1cHQgb2NjdXJyZWQsIGFuZCB0aGVuIHJlYWQgdGhlIGNvcnJlc3BvbmRpbmcgSG9zdA0K PiAtCSAqCUNoYW5uZWwtbiBJbnRlcnJ1cHQgKEhDSU5UbikgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5l IHRoZSBleGFjdA0KPiAtCSAqCWNhdXNlIG9mIHRoZSBpbnRlcnJ1cHQuIFRoZSBhcHBsaWNhdGlv biBtdXN0IGNsZWFyIHRoZQ0KPiAtCSAqCWFwcHJvcHJpYXRlIHN0YXR1cyBiaXQgaW4gdGhlIEhD SU5UbiByZWdpc3RlciB0byBjbGVhciB0aGlzIGJpdC4NCj4gLQkgKiBAcHJ0aW50OiBIb3N0IFBv cnQgSW50ZXJydXB0IChQcnRJbnQpDQo+IC0JICoJVGhlIGNvcmUgc2V0cyB0aGlzIGJpdCB0byBp bmRpY2F0ZSBhIGNoYW5nZSBpbiBwb3J0IHN0YXR1cyBvZg0KPiAtCSAqCW9uZSBvZiB0aGUgTzJQ IFVTQiBjb3JlIHBvcnRzIGluIEhvc3QgbW9kZS4gVGhlIGFwcGxpY2F0aW9uIG11c3QNCj4gLQkg KglyZWFkIHRoZSBIb3N0IFBvcnQgQ29udHJvbCBhbmQgU3RhdHVzIChIUFJUKSByZWdpc3RlciB0 bw0KPiAtCSAqCWRldGVybWluZSB0aGUgZXhhY3QgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcyBpbnRl cnJ1cHQuIFRoZQ0KPiAtCSAqCWFwcGxpY2F0aW9uIG11c3QgY2xlYXIgdGhlIGFwcHJvcHJpYXRl IHN0YXR1cyBiaXQgaW4gdGhlIEhvc3QNCj4gLQkgKglQb3J0IENvbnRyb2wgYW5kIFN0YXR1cyBy ZWdpc3RlciB0byBjbGVhciB0aGlzIGJpdC4NCj4gLQkgKiBAZmV0c3VzcDogRGF0YSBGZXRjaCBT dXNwZW5kZWQgKEZldFN1c3ApDQo+IC0JICoJVGhpcyBpbnRlcnJ1cHQgaXMgdmFsaWQgb25seSBp biBETUEgbW9kZS4gVGhpcyBpbnRlcnJ1cHQNCj4gLQkgKglpbmRpY2F0ZXMgdGhhdCB0aGUgY29y ZSBoYXMgc3RvcHBlZCBmZXRjaGluZyBkYXRhIGZvciBJTg0KPiAtCSAqCWVuZHBvaW50cyBkdWUg dG8gdGhlIHVuYXZhaWxhYmlsaXR5IG9mIFR4RklGTyBzcGFjZSBvciBSZXF1ZXN0DQo+IC0JICoJ UXVldWUgc3BhY2UuIFRoaXMgaW50ZXJydXB0IGlzIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGZv ciBhbg0KPiAtCSAqCWVuZHBvaW50IG1pc21hdGNoIGFsZ29yaXRobS4NCj4gLQkgKiBAaW5jb21w bHA6IEluY29tcGxldGUgUGVyaW9kaWMgVHJhbnNmZXIgKGluY29tcGxQKQ0KPiAtCSAqCUluIEhv c3QgbW9kZSwgdGhlIGNvcmUgc2V0cyB0aGlzIGludGVycnVwdCBiaXQgd2hlbiB0aGVyZSBhcmUN Cj4gLQkgKglpbmNvbXBsZXRlIHBlcmlvZGljIHRyYW5zYWN0aW9ucyBzdGlsbCBwZW5kaW5nIHdo aWNoIGFyZQ0KPiAtCSAqCXNjaGVkdWxlZCBmb3IgdGhlIGN1cnJlbnQgbWljcm9mcmFtZS4NCj4g LQkgKglJbmNvbXBsZXRlIElzb2Nocm9ub3VzIE9VVCBUcmFuc2ZlciAoaW5jb21wSVNPT1VUKQ0K PiAtCSAqCVRoZSBEZXZpY2UgbW9kZSwgdGhlIGNvcmUgc2V0cyB0aGlzIGludGVycnVwdCB0byBp bmRpY2F0ZSB0aGF0DQo+IC0JICoJdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGlzb2Nocm9ub3VzIE9V VCBlbmRwb2ludCBvbiB3aGljaCB0aGUNCj4gLQkgKgl0cmFuc2ZlciBpcyBub3QgY29tcGxldGVk IGluIHRoZSBjdXJyZW50IG1pY3JvZnJhbWUuIFRoaXMNCj4gLQkgKglpbnRlcnJ1cHQgaXMgYXNz ZXJ0ZWQgYWxvbmcgd2l0aCB0aGUgRW5kIG9mIFBlcmlvZGljIEZyYW1lDQo+IC0JICoJSW50ZXJy dXB0IChFT1BGKSBiaXQgaW4gdGhpcyByZWdpc3Rlci4NCj4gLQkgKiBAaW5jb21waXNvaW46IElu Y29tcGxldGUgSXNvY2hyb25vdXMgSU4gVHJhbnNmZXIgKGluY29tcElTT0lOKQ0KPiAtCSAqCVRo ZSBjb3JlIHNldHMgdGhpcyBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhdCBs ZWFzdA0KPiAtCSAqCW9uZSBpc29jaHJvbm91cyBJTiBlbmRwb2ludCBvbiB3aGljaCB0aGUgdHJh bnNmZXIgaXMgbm90DQo+IC0JICoJY29tcGxldGVkIGluIHRoZSBjdXJyZW50IG1pY3JvZnJhbWUu IFRoaXMgaW50ZXJydXB0IGlzIGFzc2VydGVkDQo+IC0JICoJYWxvbmcgd2l0aCB0aGUgRW5kIG9m IFBlcmlvZGljIEZyYW1lIEludGVycnVwdCAoRU9QRikgYml0IGluDQo+IC0JICoJdGhpcyByZWdp c3Rlci4NCj4gLQkgKiBAb2VwaW50OiBPVVQgRW5kcG9pbnRzIEludGVycnVwdCAoT0VQSW50KQ0K PiAtCSAqCVRoZSBjb3JlIHNldHMgdGhpcyBiaXQgdG8gaW5kaWNhdGUgdGhhdCBhbiBpbnRlcnJ1 cHQgaXMgcGVuZGluZw0KPiAtCSAqCW9uIG9uZSBvZiB0aGUgT1VUIGVuZHBvaW50cyBvZiB0aGUg Y29yZSAoaW4gRGV2aWNlIG1vZGUpLiBUaGUNCj4gLQkgKglhcHBsaWNhdGlvbiBtdXN0IHJlYWQg dGhlIERldmljZSBBbGwgRW5kcG9pbnRzIEludGVycnVwdA0KPiAtCSAqCShEQUlOVCkgcmVnaXN0 ZXIgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBudW1iZXIgb2YgdGhlIE9VVA0KPiAtCSAqCWVuZHBv aW50IG9uIHdoaWNoIHRoZSBpbnRlcnJ1cHQgb2NjdXJyZWQsIGFuZCB0aGVuIHJlYWQgdGhlDQo+ IC0JICoJY29ycmVzcG9uZGluZyBEZXZpY2UgT1VUIEVuZHBvaW50LW4gSW50ZXJydXB0IChET0VQ SU5UbikNCj4gLQkgKglyZWdpc3RlciB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IGNhdXNlIG9mIHRo ZSBpbnRlcnJ1cHQuIFRoZQ0KPiAtCSAqCWFwcGxpY2F0aW9uIG11c3QgY2xlYXIgdGhlIGFwcHJv cHJpYXRlIHN0YXR1cyBiaXQgaW4gdGhlDQo+IC0JICoJY29ycmVzcG9uZGluZyBET0VQSU5UbiBy ZWdpc3RlciB0byBjbGVhciB0aGlzIGJpdC4NCj4gLQkgKiBAaWVwaW50OiBJTiBFbmRwb2ludHMg SW50ZXJydXB0IChJRVBJbnQpDQo+IC0JICoJVGhlIGNvcmUgc2V0cyB0aGlzIGJpdCB0byBpbmRp Y2F0ZSB0aGF0IGFuIGludGVycnVwdCBpcyBwZW5kaW5nDQo+IC0JICoJb24gb25lIG9mIHRoZSBJ TiBlbmRwb2ludHMgb2YgdGhlIGNvcmUgKGluIERldmljZSBtb2RlKS4gVGhlDQo+IC0JICoJYXBw bGljYXRpb24gbXVzdCByZWFkIHRoZSBEZXZpY2UgQWxsIEVuZHBvaW50cyBJbnRlcnJ1cHQNCj4g LQkgKgkoREFJTlQpIHJlZ2lzdGVyIHRvIGRldGVybWluZSB0aGUgZXhhY3QgbnVtYmVyIG9mIHRo ZSBJTg0KPiAtCSAqCWVuZHBvaW50IG9uIHdoaWNoIHRoZSBpbnRlcnJ1cHQgb2NjdXJyZWQsIGFu ZCB0aGVuIHJlYWQgdGhlDQo+IC0JICoJY29ycmVzcG9uZGluZyBEZXZpY2UgSU4gRW5kcG9pbnQt biBJbnRlcnJ1cHQgKERJRVBJTlRuKQ0KPiAtCSAqCXJlZ2lzdGVyIHRvIGRldGVybWluZSB0aGUg ZXhhY3QgY2F1c2Ugb2YgdGhlIGludGVycnVwdC4gVGhlDQo+IC0JICoJYXBwbGljYXRpb24gbXVz dCBjbGVhciB0aGUgYXBwcm9wcmlhdGUgc3RhdHVzIGJpdCBpbiB0aGUNCj4gLQkgKgljb3JyZXNw b25kaW5nIERJRVBJTlRuIHJlZ2lzdGVyIHRvIGNsZWFyIHRoaXMgYml0Lg0KPiAtCSAqIEBlcG1p czogRW5kcG9pbnQgTWlzbWF0Y2ggSW50ZXJydXB0IChFUE1pcykNCj4gLQkgKglJbmRpY2F0ZXMg dGhhdCBhbiBJTiB0b2tlbiBoYXMgYmVlbiByZWNlaXZlZCBmb3IgYSBub24tcGVyaW9kaWMNCj4g LQkgKgllbmRwb2ludCwgYnV0IHRoZSBkYXRhIGZvciBhbm90aGVyIGVuZHBvaW50IGlzIHByZXNl bnQgaW4gdGhlDQo+IC0JICoJdG9wIG9mIHRoZSBOb24tUGVyaW9kaWMgVHJhbnNtaXQgRklGTyBh bmQgdGhlIElOIGVuZHBvaW50DQo+IC0JICoJbWlzbWF0Y2ggY291bnQgcHJvZ3JhbW1lZCBieSB0 aGUgYXBwbGljYXRpb24gaGFzIGV4cGlyZWQuDQo+IC0JICogQGVvcGY6IEVuZCBvZiBQZXJpb2Rp YyBGcmFtZSBJbnRlcnJ1cHQgKEVPUEYpDQo+IC0JICoJSW5kaWNhdGVzIHRoYXQgdGhlIHBlcmlv ZCBzcGVjaWZpZWQgaW4gdGhlIFBlcmlvZGljIEZyYW1lDQo+IC0JICoJSW50ZXJ2YWwgZmllbGQg b2YgdGhlIERldmljZSBDb25maWd1cmF0aW9uIHJlZ2lzdGVyDQo+IC0JICoJKERDRkcuUGVyRnJJ bnQpIGhhcyBiZWVuIHJlYWNoZWQgaW4gdGhlIGN1cnJlbnQgbWljcm9mcmFtZS4NCj4gLQkgKiBA aXNvb3V0ZHJvcDogSXNvY2hyb25vdXMgT1VUIFBhY2tldCBEcm9wcGVkIEludGVycnVwdCAoSVNP T3V0RHJvcCkNCj4gLQkgKglUaGUgY29yZSBzZXRzIHRoaXMgYml0IHdoZW4gaXQgZmFpbHMgdG8g d3JpdGUgYW4gaXNvY2hyb25vdXMgT1VUDQo+IC0JICoJcGFja2V0IGludG8gdGhlIFJ4RklGTyBi ZWNhdXNlIHRoZSBSeEZJRk8gZG9lc24ndCBoYXZlDQo+IC0JICoJZW5vdWdoIHNwYWNlIHRvIGFj Y29tbW9kYXRlIGEgbWF4aW11bSBwYWNrZXQgc2l6ZSBwYWNrZXQNCj4gLQkgKglmb3IgdGhlIGlz b2Nocm9ub3VzIE9VVCBlbmRwb2ludC4NCj4gLQkgKiBAZW51bWRvbmU6IEVudW1lcmF0aW9uIERv bmUgKEVudW1Eb25lKQ0KPiAtCSAqCVRoZSBjb3JlIHNldHMgdGhpcyBiaXQgdG8gaW5kaWNhdGUg dGhhdCBzcGVlZCBlbnVtZXJhdGlvbiBpcw0KPiAtCSAqCWNvbXBsZXRlLiBUaGUgYXBwbGljYXRp b24gbXVzdCByZWFkIHRoZSBEZXZpY2UgU3RhdHVzIChEU1RTKQ0KPiAtCSAqCXJlZ2lzdGVyIHRv IG9idGFpbiB0aGUgZW51bWVyYXRlZCBzcGVlZC4NCj4gLQkgKiBAdXNicnN0OiBVU0IgUmVzZXQg KFVTQlJzdCkNCj4gLQkgKglUaGUgY29yZSBzZXRzIHRoaXMgYml0IHRvIGluZGljYXRlIHRoYXQg YSByZXNldCBpcyBkZXRlY3RlZCBvbg0KPiAtCSAqCXRoZSBVU0IuDQo+IC0JICogQHVzYnN1c3A6 IFVTQiBTdXNwZW5kIChVU0JTdXNwKQ0KPiAtCSAqCVRoZSBjb3JlIHNldHMgdGhpcyBiaXQgdG8g aW5kaWNhdGUgdGhhdCBhIHN1c3BlbmQgd2FzIGRldGVjdGVkDQo+IC0JICoJb24gdGhlIFVTQi4g VGhlIGNvcmUgZW50ZXJzIHRoZSBTdXNwZW5kZWQgc3RhdGUgd2hlbiB0aGVyZQ0KPiAtCSAqCWlz IG5vIGFjdGl2aXR5IG9uIHRoZSBwaHlfbGluZV9zdGF0ZV9pIHNpZ25hbCBmb3IgYW4gZXh0ZW5k ZWQNCj4gLQkgKglwZXJpb2Qgb2YgdGltZS4NCj4gLQkgKiBAZXJseXN1c3A6IEVhcmx5IFN1c3Bl bmQgKEVybHlTdXNwKQ0KPiAtCSAqCVRoZSBjb3JlIHNldHMgdGhpcyBiaXQgdG8gaW5kaWNhdGUg dGhhdCBhbiBJZGxlIHN0YXRlIGhhcyBiZWVuDQo+IC0JICoJZGV0ZWN0ZWQgb24gdGhlIFVTQiBm b3IgMyBtcy4NCj4gLQkgKiBAaTJjaW50OiBJMkMgSW50ZXJydXB0IChJMkNJTlQpDQo+IC0JICoJ VGhpcyBiaXQgaXMgYWx3YXlzIDB4MC4NCj4gLQkgKiBAdWxwaWNraW50OiBVTFBJIENhcmtpdCBJ bnRlcnJ1cHQgKFVMUElDS0lOVCkNCj4gLQkgKglUaGlzIGJpdCBpcyBhbHdheXMgMHgwLg0KPiAt CSAqIEBnb3V0bmFrZWZmOiBHbG9iYWwgT1VUIE5BSyBFZmZlY3RpdmUgKEdPVVROYWtFZmYpDQo+ IC0JICoJSW5kaWNhdGVzIHRoYXQgdGhlIFNldCBHbG9iYWwgT1VUIE5BSyBiaXQgaW4gdGhlIERl dmljZSBDb250cm9sDQo+IC0JICoJcmVnaXN0ZXIgKERDVEwuU0dPVVROYWspLCBzZXQgYnkgdGhl IGFwcGxpY2F0aW9uLCBoYXMgdGFrZW4NCj4gLQkgKgllZmZlY3QgaW4gdGhlIGNvcmUuIFRoaXMg Yml0IGNhbiBiZSBjbGVhcmVkIGJ5IHdyaXRpbmcgdGhlIENsZWFyDQo+IC0JICoJR2xvYmFsIE9V VCBOQUsgYml0IGluIHRoZSBEZXZpY2UgQ29udHJvbCByZWdpc3Rlcg0KPiAtCSAqCShEQ1RMLkNH T1VUTmFrKS4NCj4gLQkgKiBAZ2lubmFrZWZmOiBHbG9iYWwgSU4gTm9uLVBlcmlvZGljIE5BSyBF ZmZlY3RpdmUgKEdJTk5ha0VmZikNCj4gLQkgKglJbmRpY2F0ZXMgdGhhdCB0aGUgU2V0IEdsb2Jh bCBOb24tUGVyaW9kaWMgSU4gTkFLIGJpdCBpbiB0aGUNCj4gLQkgKglEZXZpY2UgQ29udHJvbCBy ZWdpc3RlciAoRENUTC5TR05QSW5OYWspLCBzZXQgYnkgdGhlDQo+IC0JICoJYXBwbGljYXRpb24s IGhhcyB0YWtlbiBlZmZlY3QgaW4gdGhlIGNvcmUuIFRoYXQgaXMsIHRoZSBjb3JlIGhhcw0KPiAt CSAqCXNhbXBsZWQgdGhlIEdsb2JhbCBJTiBOQUsgYml0IHNldCBieSB0aGUgYXBwbGljYXRpb24u IFRoaXMgYml0DQo+IC0JICoJY2FuIGJlIGNsZWFyZWQgYnkgY2xlYXJpbmcgdGhlIENsZWFyIEds b2JhbCBOb24tUGVyaW9kaWMgSU4NCj4gLQkgKglOQUsgYml0IGluIHRoZSBEZXZpY2UgQ29udHJv bCByZWdpc3RlciAoRENUTC5DR05QSW5OYWspLg0KPiAtCSAqCVRoaXMgaW50ZXJydXB0IGRvZXMg bm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBhIE5BSyBoYW5kc2hha2UNCj4gLQkgKglpcyBzZW50 IG91dCBvbiB0aGUgVVNCLiBUaGUgU1RBTEwgYml0IHRha2VzIHByZWNlZGVuY2Ugb3Zlcg0KPiAt CSAqCXRoZSBOQUsgYml0Lg0KPiAtCSAqIEBucHR4ZmVtcDogTm9uLVBlcmlvZGljIFR4RklGTyBF bXB0eSAoTlBUeEZFbXApDQo+IC0JICoJVGhpcyBpbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgd2hlbiB0 aGUgTm9uLVBlcmlvZGljIFR4RklGTyBpcw0KPiAtCSAqCWVpdGhlciBoYWxmIG9yIGNvbXBsZXRl bHkgZW1wdHksIGFuZCB0aGVyZSBpcyBzcGFjZSBmb3IgYXQgbGVhc3QNCj4gLQkgKglvbmUgZW50 cnkgdG8gYmUgd3JpdHRlbiB0byB0aGUgTm9uLVBlcmlvZGljIFRyYW5zbWl0IFJlcXVlc3QNCj4g LQkgKglRdWV1ZS4gVGhlIGhhbGYgb3IgY29tcGxldGVseSBlbXB0eSBzdGF0dXMgaXMgZGV0ZXJt aW5lZCBieQ0KPiAtCSAqCXRoZSBOb24tUGVyaW9kaWMgVHhGSUZPIEVtcHR5IExldmVsIGJpdCBp biB0aGUgQ29yZSBBSEINCj4gLQkgKglDb25maWd1cmF0aW9uIHJlZ2lzdGVyIChHQUhCQ0ZHLk5Q VHhGRW1wTHZsKS4NCj4gLQkgKiBAcnhmbHZsOiBSeEZJRk8gTm9uLUVtcHR5IChSeEZMdmwpDQo+ IC0JICoJSW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhY2tldCBwZW5kaW5n IHRvIGJlIHJlYWQNCj4gLQkgKglmcm9tIHRoZSBSeEZJRk8uDQo+IC0JICogQHNvZjogU3RhcnQg b2YgKG1pY3JvKUZyYW1lIChTb2YpDQo+IC0JICoJSW4gSG9zdCBtb2RlLCB0aGUgY29yZSBzZXRz IHRoaXMgYml0IHRvIGluZGljYXRlIHRoYXQgYW4gU09GDQo+IC0JICoJKEZTKSwgbWljcm8tU09G IChIUyksIG9yIEtlZXAtQWxpdmUgKExTKSBpcyB0cmFuc21pdHRlZCBvbiB0aGUNCj4gLQkgKglV U0IuIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHdyaXRlIGEgMSB0byB0aGlzIGJpdCB0byBjbGVhciB0 aGUNCj4gLQkgKglpbnRlcnJ1cHQuDQo+IC0JICoJSW4gRGV2aWNlIG1vZGUsIGluIHRoZSBjb3Jl IHNldHMgdGhpcyBiaXQgdG8gaW5kaWNhdGUgdGhhdCBhbg0KPiAtCSAqCVNPRiB0b2tlbiBoYXMg YmVlbiByZWNlaXZlZCBvbiB0aGUgVVNCLiBUaGUgYXBwbGljYXRpb24gY2FuIHJlYWQNCj4gLQkg Kgl0aGUgRGV2aWNlIFN0YXR1cyByZWdpc3RlciB0byBnZXQgdGhlIGN1cnJlbnQgKG1pY3JvKWZy YW1lDQo+IC0JICoJbnVtYmVyLiBUaGlzIGludGVycnVwdCBpcyBzZWVuIG9ubHkgd2hlbiB0aGUg Y29yZSBpcyBvcGVyYXRpbmcNCj4gLQkgKglhdCBlaXRoZXIgSFMgb3IgRlMuDQo+IC0JICogQG90 Z2ludDogT1RHIEludGVycnVwdCAoT1RHSW50KQ0KPiAtCSAqCVRoZSBjb3JlIHNldHMgdGhpcyBi aXQgdG8gaW5kaWNhdGUgYW4gT1RHIHByb3RvY29sIGV2ZW50LiBUaGUNCj4gLQkgKglhcHBsaWNh dGlvbiBtdXN0IHJlYWQgdGhlIE9URyBJbnRlcnJ1cHQgU3RhdHVzIChHT1RHSU5UKQ0KPiAtCSAq CXJlZ2lzdGVyIHRvIGRldGVybWluZSB0aGUgZXhhY3QgZXZlbnQgdGhhdCBjYXVzZWQgdGhpcw0K PiAtCSAqCWludGVycnVwdC4gVGhlIGFwcGxpY2F0aW9uIG11c3QgY2xlYXIgdGhlIGFwcHJvcHJp YXRlIHN0YXR1cyBiaXQNCj4gLQkgKglpbiB0aGUgR09UR0lOVCByZWdpc3RlciB0byBjbGVhciB0 aGlzIGJpdC4NCj4gLQkgKiBAbW9kZW1pczogTW9kZSBNaXNtYXRjaCBJbnRlcnJ1cHQgKE1vZGVN aXMpDQo+IC0JICoJVGhlIGNvcmUgc2V0cyB0aGlzIGJpdCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBp cyB0cnlpbmcgdG8gYWNjZXNzOg0KPiAtCSAqCSogQSBIb3N0IG1vZGUgcmVnaXN0ZXIsIHdoZW4g dGhlIGNvcmUgaXMgb3BlcmF0aW5nIGluIERldmljZQ0KPiAtCSAqCW1vZGUNCj4gLQkgKgkqIEEg RGV2aWNlIG1vZGUgcmVnaXN0ZXIsIHdoZW4gdGhlIGNvcmUgaXMgb3BlcmF0aW5nIGluIEhvc3QN Cj4gLQkgKgltb2RlDQo+IC0JICoJVGhlIHJlZ2lzdGVyIGFjY2VzcyBpcyBjb21wbGV0ZWQgb24g dGhlIEFIQiB3aXRoIGFuIE9LQVkNCj4gLQkgKglyZXNwb25zZSwgYnV0IGlzIGlnbm9yZWQgYnkg dGhlIGNvcmUgaW50ZXJuYWxseSBhbmQgZG9lc24ndA0KPiAtCSAqCWFmZmVjdCB0aGUgb3BlcmF0 aW9uIG9mIHRoZSBjb3JlLg0KPiAtCSAqIEBjdXJtb2Q6IEN1cnJlbnQgTW9kZSBvZiBPcGVyYXRp b24gKEN1ck1vZCkNCj4gLQkgKglJbmRpY2F0ZXMgdGhlIGN1cnJlbnQgbW9kZSBvZiBvcGVyYXRp b24uDQo+IC0JICoJKiAxJ2IwOiBEZXZpY2UgbW9kZQ0KPiAtCSAqCSogMSdiMTogSG9zdCBtb2Rl DQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfZ2ludHN0c19zIHsNCj4gLQkJX19CSVRG SUVMRF9GSUVMRCh1MzIgd2t1cGludAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBz ZXNzcmVxaW50CQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGRpc2Nvbm5pbnQJCTog MSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgY29uaWRzdHNjaG5nCTogMSwNCj4gLQkJX19C SVRGSUVMRF9GSUVMRCh1MzIgcmVzZXJ2ZWRfMjdfMjcJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJ RUxEKHUzMiBwdHhmZW1wCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGhjaGludAkJ OiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwcnRpbnQJCTogMSwNCj4gLQkJX19CSVRG SUVMRF9GSUVMRCh1MzIgcmVzZXJ2ZWRfMjNfMjMJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxE KHUzMiBmZXRzdXNwCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGluY29tcGxwCQk6 IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGluY29tcGlzb2luCTogMSwNCj4gLQkJX19C SVRGSUVMRF9GSUVMRCh1MzIgb2VwaW50CQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IGllcGludAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBlcG1pcwkJOiAxLA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8xNl8xNgk6IDEsDQo+IC0JCV9fQklURklF TERfRklFTEQodTMyIGVvcGYJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgaXNvb3V0 ZHJvcAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBlbnVtZG9uZQkJOiAxLA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiB1c2Jyc3QJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVM RCh1MzIgdXNic3VzcAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBlcmx5c3VzcAkJ OiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBpMmNpbnQJCTogMSwNCj4gLQkJX19CSVRG SUVMRF9GSUVMRCh1MzIgdWxwaWNraW50CQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IGdvdXRuYWtlZmYJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgZ2lubmFrZWZmCQk6 IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIG5wdHhmZW1wCQk6IDEsDQo+IC0JCV9fQklU RklFTERfRklFTEQodTMyIHJ4Zmx2bAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBz b2YJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgb3RnaW50CQk6IDEsDQo+IC0JCV9f QklURklFTERfRklFTEQodTMyIG1vZGVtaXMJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 MzIgY3VybW9kCQk6IDEsDQo+IC0JCTspKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKQ0K PiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3ZteF91c2JjI19nbnB0eGZzaXoN Cj4gLSAqDQo+IC0gKiBOb24tUGVyaW9kaWMgVHJhbnNtaXQgRklGTyBTaXplIFJlZ2lzdGVyIChH TlBUWEZTSVopDQo+IC0gKg0KPiAtICogVGhlIGFwcGxpY2F0aW9uIGNhbiBwcm9ncmFtIHRoZSBS QU0gc2l6ZSBhbmQgdGhlIG1lbW9yeSBzdGFydCBhZGRyZXNzIGZvciB0aGUNCj4gLSAqIE5vbi1Q ZXJpb2RpYyBUeEZJRk8uDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hfZ25wdHhmc2l6IHsN Cj4gLQl1MzIgdTMyOw0KPiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4X2ducHR4ZnNp el9zDQo+IC0JICogQG5wdHhmZGVwOiBOb24tUGVyaW9kaWMgVHhGSUZPIERlcHRoIChOUFR4RkRl cCkNCj4gLQkgKglUaGlzIHZhbHVlIGlzIGluIHRlcm1zIG9mIDMyLWJpdCB3b3Jkcy4NCj4gLQkg KglNaW5pbXVtIHZhbHVlIGlzIDE2DQo+IC0JICoJTWF4aW11bSB2YWx1ZSBpcyAzMjc2OA0KPiAt CSAqIEBucHR4ZnN0YWRkcjogTm9uLVBlcmlvZGljIFRyYW5zbWl0IFJBTSBTdGFydCBBZGRyZXNz IChOUFR4RlN0QWRkcikNCj4gLQkgKglUaGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBtZW1vcnkgc3Rh cnQgYWRkcmVzcyBmb3IgTm9uLVBlcmlvZGljDQo+IC0JICoJVHJhbnNtaXQgRklGTyBSQU0uDQo+ IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfZ25wdHhmc2l6X3Mgew0KPiAtCQlfX0JJVEZJ RUxEX0ZJRUxEKHUzMiBucHR4ZmRlcAkJOiAxNiwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIg bnB0eGZzdGFkZHIJOiAxNiwNCj4gLQkJOykpDQo+IC0JfSBzOw0KPiAtfTsNCj4gLQ0KPiAtLyoq DQo+IC0gKiBjdm14X3VzYmMjX2ducHR4c3RzDQo+IC0gKg0KPiAtICogTm9uLVBlcmlvZGljIFRy YW5zbWl0IEZJRk8vUXVldWUgU3RhdHVzIFJlZ2lzdGVyIChHTlBUWFNUUykNCj4gLSAqDQo+IC0g KiBUaGlzIHJlYWQtb25seSByZWdpc3RlciBjb250YWlucyB0aGUgZnJlZSBzcGFjZSBpbmZvcm1h dGlvbiBmb3IgdGhlDQo+IC0gKiBOb24tUGVyaW9kaWMgVHhGSUZPIGFuZCB0aGUgTm9uLVBlcmlv ZGljIFRyYW5zbWl0IFJlcXVlc3QgUXVldWUuDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hf Z25wdHhzdHMgew0KPiAtCXUzMiB1MzI7DQo+IC0JLyoqDQo+IC0JICogc3RydWN0IGN2bXhfdXNi Y3hfZ25wdHhzdHNfcw0KPiAtCSAqIEBucHR4cXRvcDogVG9wIG9mIHRoZSBOb24tUGVyaW9kaWMg VHJhbnNtaXQgUmVxdWVzdCBRdWV1ZSAoTlBUeFFUb3ApDQo+IC0JICoJRW50cnkgaW4gdGhlIE5v bi1QZXJpb2RpYyBUeCBSZXF1ZXN0IFF1ZXVlIHRoYXQgaXMgY3VycmVudGx5DQo+IC0JICoJYmVp bmcgcHJvY2Vzc2VkIGJ5IHRoZSBNQUMuDQo+IC0JICoJKiBCaXRzIFszMDoyN106IENoYW5uZWwv ZW5kcG9pbnQgbnVtYmVyDQo+IC0JICoJKiBCaXRzIFsyNjoyNV06DQo+IC0JICoJLSAyJ2IwMDog SU4vT1VUIHRva2VuDQo+IC0JICoJLSAyJ2IwMTogWmVyby1sZW5ndGggdHJhbnNtaXQgcGFja2V0 IChkZXZpY2UgSU4vaG9zdCBPVVQpDQo+IC0JICoJLSAyJ2IxMDogUElORy9DU1BMSVQgdG9rZW4N Cj4gLQkgKgktIDInYjExOiBDaGFubmVsIGhhbHQgY29tbWFuZA0KPiAtCSAqCSogQml0IFsyNF06 IFRlcm1pbmF0ZSAobGFzdCBlbnRyeSBmb3Igc2VsZWN0ZWQgY2hhbm5lbC9lbmRwb2ludCkNCj4g LQkgKiBAbnB0eHFzcGNhdmFpbDogTm9uLVBlcmlvZGljIFRyYW5zbWl0IFJlcXVlc3QgUXVldWUg U3BhY2UgQXZhaWxhYmxlDQo+IC0JICoJKE5QVHhRU3BjQXZhaWwpDQo+IC0JICoJSW5kaWNhdGVz IHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIE5vbi0NCj4gLQkgKglQ ZXJpb2RpYyBUcmFuc21pdCBSZXF1ZXN0IFF1ZXVlLiBUaGlzIHF1ZXVlIGhvbGRzIGJvdGggSU4N Cj4gLQkgKglhbmQgT1VUIHJlcXVlc3RzIGluIEhvc3QgbW9kZS4gRGV2aWNlIG1vZGUgaGFzIG9u bHkgSU4NCj4gLQkgKglyZXF1ZXN0cy4NCj4gLQkgKgkqIDgnaDA6IE5vbi1QZXJpb2RpYyBUcmFu c21pdCBSZXF1ZXN0IFF1ZXVlIGlzIGZ1bGwNCj4gLQkgKgkqIDgnaDE6IDEgbG9jYXRpb24gYXZh aWxhYmxlDQo+IC0JICoJKiA4J2gyOiAyIGxvY2F0aW9ucyBhdmFpbGFibGUNCj4gLQkgKgkqIG46 IG4gbG9jYXRpb25zIGF2YWlsYWJsZSAoMC4uOCkNCj4gLQkgKgkqIE90aGVyczogUmVzZXJ2ZWQN Cj4gLQkgKiBAbnB0eGZzcGNhdmFpbDogTm9uLVBlcmlvZGljIFR4RklGTyBTcGFjZSBBdmFpbCAo TlBUeEZTcGNBdmFpbCkNCj4gLQkgKglJbmRpY2F0ZXMgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNl IGF2YWlsYWJsZSBpbiB0aGUgTm9uLQ0KPiAtCSAqCVBlcmlvZGljIFR4RklGTy4NCj4gLQkgKglW YWx1ZXMgYXJlIGluIHRlcm1zIG9mIDMyLWJpdCB3b3Jkcy4NCj4gLQkgKgkqIDE2J2gwOiBOb24t UGVyaW9kaWMgVHhGSUZPIGlzIGZ1bGwNCj4gLQkgKgkqIDE2J2gxOiAxIHdvcmQgYXZhaWxhYmxl DQo+IC0JICoJKiAxNidoMjogMiB3b3JkcyBhdmFpbGFibGUNCj4gLQkgKgkqIDE2J2huOiBuIHdv cmRzIGF2YWlsYWJsZSAod2hlcmUgMC4uMzI3NjgpDQo+IC0JICoJKiAxNidoODAwMDogMzI3Njgg d29yZHMgYXZhaWxhYmxlDQo+IC0JICoJKiBPdGhlcnM6IFJlc2VydmVkDQo+IC0JICovDQo+IC0J c3RydWN0IGN2bXhfdXNiY3hfZ25wdHhzdHNfcyB7DQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IHJlc2VydmVkXzMxXzMxCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgbnB0eHF0b3AJ CTogNywNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgbnB0eHFzcGNhdmFpbAk6IDgsDQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIG5wdHhmc3BjYXZhaWwJOiAxNiwNCj4gLQkJOykpKSkNCj4g LQl9IHM7DQo+IC19Ow0KPiAtDQo+IC0vKioNCj4gLSAqIGN2bXhfdXNiYyNfZ3JzdGN0bA0KPiAt ICoNCj4gLSAqIENvcmUgUmVzZXQgUmVnaXN0ZXIgKEdSU1RDVEwpDQo+IC0gKg0KPiAtICogVGhl IGFwcGxpY2F0aW9uIHVzZXMgdGhpcyByZWdpc3RlciB0byByZXNldCB2YXJpb3VzIGhhcmR3YXJl IGZlYXR1cmVzIGluc2lkZQ0KPiAtICogdGhlIGNvcmUuDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhf dXNiY3hfZ3JzdGN0bCB7DQo+IC0JdTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3Zt eF91c2JjeF9ncnN0Y3RsX3MNCj4gLQkgKiBAYWhiaWRsZTogQUhCIE1hc3RlciBJZGxlIChBSEJJ ZGxlKQ0KPiAtCSAqCUluZGljYXRlcyB0aGF0IHRoZSBBSEIgTWFzdGVyIFN0YXRlIE1hY2hpbmUg aXMgaW4gdGhlIElETEUNCj4gLQkgKgljb25kaXRpb24uDQo+IC0JICogQGRtYXJlcTogRE1BIFJl cXVlc3QgU2lnbmFsIChETUFSZXEpDQo+IC0JICoJSW5kaWNhdGVzIHRoYXQgdGhlIERNQSByZXF1 ZXN0IGlzIGluIHByb2dyZXNzLiBVc2VkIGZvciBkZWJ1Zy4NCj4gLQkgKiBAdHhmbnVtOiBUeEZJ Rk8gTnVtYmVyIChUeEZOdW0pDQo+IC0JICoJVGhpcyBpcyB0aGUgRklGTyBudW1iZXIgdGhhdCBt dXN0IGJlIGZsdXNoZWQgdXNpbmcgdGhlIFR4RklGTw0KPiAtCSAqCUZsdXNoIGJpdC4gVGhpcyBm aWVsZCBtdXN0IG5vdCBiZSBjaGFuZ2VkIHVudGlsIHRoZSBjb3JlIGNsZWFycw0KPiAtCSAqCXRo ZSBUeEZJRk8gRmx1c2ggYml0Lg0KPiAtCSAqCSogNSdoMDogTm9uLVBlcmlvZGljIFR4RklGTyBm bHVzaA0KPiAtCSAqCSogNSdoMTogUGVyaW9kaWMgVHhGSUZPIDEgZmx1c2ggaW4gRGV2aWNlIG1v ZGUgb3IgUGVyaW9kaWMNCj4gLQkgKglUeEZJRk8gZmx1c2ggaW4gSG9zdCBtb2RlDQo+IC0JICoJ KiA1J2gyOiBQZXJpb2RpYyBUeEZJRk8gMiBmbHVzaCBpbiBEZXZpY2UgbW9kZQ0KPiAtCSAqCS0g Li4uDQo+IC0JICoJKiA1J2hGOiBQZXJpb2RpYyBUeEZJRk8gMTUgZmx1c2ggaW4gRGV2aWNlIG1v ZGUNCj4gLQkgKgkqIDUnaDEwOiBGbHVzaCBhbGwgdGhlIFBlcmlvZGljIGFuZCBOb24tUGVyaW9k aWMgVHhGSUZPcyBpbiB0aGUNCj4gLQkgKgljb3JlDQo+IC0JICogQHR4ZmZsc2g6IFR4RklGTyBG bHVzaCAoVHhGRmxzaCkNCj4gLQkgKglUaGlzIGJpdCBzZWxlY3RpdmVseSBmbHVzaGVzIGEgc2lu Z2xlIG9yIGFsbCB0cmFuc21pdCBGSUZPcywgYnV0DQo+IC0JICoJY2Fubm90IGRvIHNvIGlmIHRo ZSBjb3JlIGlzIGluIHRoZSBtaWRzdCBvZiBhIHRyYW5zYWN0aW9uLg0KPiAtCSAqCVRoZSBhcHBs aWNhdGlvbiBtdXN0IG9ubHkgd3JpdGUgdGhpcyBiaXQgYWZ0ZXIgY2hlY2tpbmcgdGhhdCB0aGUN Cj4gLQkgKgljb3JlIGlzIG5laXRoZXIgd3JpdGluZyB0byB0aGUgVHhGSUZPIG5vciByZWFkaW5n IGZyb20gdGhlDQo+IC0JICoJVHhGSUZPLg0KPiAtCSAqCVRoZSBhcHBsaWNhdGlvbiBtdXN0IHdh aXQgdW50aWwgdGhlIGNvcmUgY2xlYXJzIHRoaXMgYml0IGJlZm9yZQ0KPiAtCSAqCXBlcmZvcm1p bmcgYW55IG9wZXJhdGlvbnMuIFRoaXMgYml0IHRha2VzIDggY2xvY2tzIChvZiBwaHlfY2xrDQo+ IC0JICoJb3IgaGNsaywgd2hpY2hldmVyIGlzIHNsb3dlcikgdG8gY2xlYXIuDQo+IC0JICogQHJ4 ZmZsc2g6IFJ4RklGTyBGbHVzaCAoUnhGRmxzaCkNCj4gLQkgKglUaGUgYXBwbGljYXRpb24gY2Fu IGZsdXNoIHRoZSBlbnRpcmUgUnhGSUZPIHVzaW5nIHRoaXMgYml0LCBidXQNCj4gLQkgKgltdXN0 IGZpcnN0IGVuc3VyZSB0aGF0IHRoZSBjb3JlIGlzIG5vdCBpbiB0aGUgbWlkZGxlIG9mIGENCj4g LQkgKgl0cmFuc2FjdGlvbi4NCj4gLQkgKglUaGUgYXBwbGljYXRpb24gbXVzdCBvbmx5IHdyaXRl IHRvIHRoaXMgYml0IGFmdGVyIGNoZWNraW5nIHRoYXQNCj4gLQkgKgl0aGUgY29yZSBpcyBuZWl0 aGVyIHJlYWRpbmcgZnJvbSB0aGUgUnhGSUZPIG5vciB3cml0aW5nIHRvIHRoZQ0KPiAtCSAqCVJ4 RklGTy4NCj4gLQkgKglUaGUgYXBwbGljYXRpb24gbXVzdCB3YWl0IHVudGlsIHRoZSBiaXQgaXMg Y2xlYXJlZCBiZWZvcmUNCj4gLQkgKglwZXJmb3JtaW5nIGFueSBvdGhlciBvcGVyYXRpb25zLiBU aGlzIGJpdCB3aWxsIHRha2UgOCBjbG9ja3MNCj4gLQkgKgkoc2xvd2VzdCBvZiBQSFkgb3IgQUhC IGNsb2NrKSB0byBjbGVhci4NCj4gLQkgKiBAaW50a25xZmxzaDogSU4gVG9rZW4gU2VxdWVuY2Ug TGVhcm5pbmcgUXVldWUgRmx1c2ggKElOVGtuUUZsc2gpDQo+IC0JICoJVGhlIGFwcGxpY2F0aW9u IHdyaXRlcyB0aGlzIGJpdCB0byBmbHVzaCB0aGUgSU4gVG9rZW4gU2VxdWVuY2UNCj4gLQkgKglM ZWFybmluZyBRdWV1ZS4NCj4gLQkgKiBAZnJtY250cnJzdDogSG9zdCBGcmFtZSBDb3VudGVyIFJl c2V0IChGcm1DbnRyUnN0KQ0KPiAtCSAqCVRoZSBhcHBsaWNhdGlvbiB3cml0ZXMgdGhpcyBiaXQg dG8gcmVzZXQgdGhlIChtaWNybylmcmFtZSBudW1iZXINCj4gLQkgKgljb3VudGVyIGluc2lkZSB0 aGUgY29yZS4gV2hlbiB0aGUgKG1pY3JvKWZyYW1lIGNvdW50ZXIgaXMgcmVzZXQsDQo+IC0JICoJ dGhlIHN1YnNlcXVlbnQgU09GIHNlbnQgb3V0IGJ5IHRoZSBjb3JlIHdpbGwgaGF2ZSBhDQo+IC0J ICoJKG1pY3JvKWZyYW1lIG51bWJlciBvZiAwLg0KPiAtCSAqIEBoc2Z0cnN0OiBIQ2xrIFNvZnQg UmVzZXQgKEhTZnRSc3QpDQo+IC0JICoJVGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhpcyBiaXQgdG8g Zmx1c2ggdGhlIGNvbnRyb2wgbG9naWMgaW4gdGhlDQo+IC0JICoJQUhCIENsb2NrIGRvbWFpbi4g T25seSBBSEIgQ2xvY2sgRG9tYWluIHBpcGVsaW5lcyBhcmUgcmVzZXQuDQo+IC0JICoJKiBGSUZP cyBhcmUgbm90IGZsdXNoZWQgd2l0aCB0aGlzIGJpdC4NCj4gLQkgKgkqIEFsbCBzdGF0ZSBtYWNo aW5lcyBpbiB0aGUgQUhCIGNsb2NrIGRvbWFpbiBhcmUgcmVzZXQgdG8gdGhlDQo+IC0JICoJSWRs ZSBzdGF0ZSBhZnRlciB0ZXJtaW5hdGluZyB0aGUgdHJhbnNhY3Rpb25zIG9uIHRoZSBBSEIsDQo+ IC0JICoJZm9sbG93aW5nIHRoZSBwcm90b2NvbC4NCj4gLQkgKgkqIENTUiBjb250cm9sIGJpdHMg dXNlZCBieSB0aGUgQUhCIGNsb2NrIGRvbWFpbiBzdGF0ZQ0KPiAtCSAqCW1hY2hpbmVzIGFyZSBj bGVhcmVkLg0KPiAtCSAqCSogVG8gY2xlYXIgdGhpcyBpbnRlcnJ1cHQsIHN0YXR1cyBtYXNrIGJp dHMgdGhhdCBjb250cm9sIHRoZQ0KPiAtCSAqCWludGVycnVwdCBzdGF0dXMgYW5kIGFyZSBnZW5l cmF0ZWQgYnkgdGhlIEFIQiBjbG9jayBkb21haW4NCj4gLQkgKglzdGF0ZSBtYWNoaW5lIGFyZSBj bGVhcmVkLg0KPiAtCSAqCSogQmVjYXVzZSBpbnRlcnJ1cHQgc3RhdHVzIGJpdHMgYXJlIG5vdCBj bGVhcmVkLCB0aGUgYXBwbGljYXRpb24NCj4gLQkgKgljYW4gZ2V0IHRoZSBzdGF0dXMgb2YgYW55 IGNvcmUgZXZlbnRzIHRoYXQgb2NjdXJyZWQgYWZ0ZXIgaXQgc2V0DQo+IC0JICoJdGhpcyBiaXQu DQo+IC0JICoJVGhpcyBpcyBhIHNlbGYtY2xlYXJpbmcgYml0IHRoYXQgdGhlIGNvcmUgY2xlYXJz IGFmdGVyIGFsbA0KPiAtCSAqCW5lY2Vzc2FyeSBsb2dpYyBpcyByZXNldCBpbiB0aGUgY29yZS4g VGhpcyBtYXkgdGFrZSBzZXZlcmFsDQo+IC0JICoJY2xvY2tzLCBkZXBlbmRpbmcgb24gdGhlIGNv cmUncyBjdXJyZW50IHN0YXRlLg0KPiAtCSAqIEBjc2Z0cnN0OiBDb3JlIFNvZnQgUmVzZXQgKENT ZnRSc3QpDQo+IC0JICoJUmVzZXRzIHRoZSBoY2xrIGFuZCBwaHlfY2xvY2sgZG9tYWlucyBhcyBm b2xsb3dzOg0KPiAtCSAqCSogQ2xlYXJzIHRoZSBpbnRlcnJ1cHRzIGFuZCBhbGwgdGhlIENTUiBy ZWdpc3RlcnMgZXhjZXB0IHRoZQ0KPiAtCSAqCWZvbGxvd2luZyByZWdpc3RlciBiaXRzOg0KPiAt CSAqCS0gUENHQ0NUTC5Sc3RQZHduTW9kdWxlDQo+IC0JICoJLSBQQ0dDQ1RMLkdhdGVIY2xrDQo+ IC0JICoJLSBQQ0dDQ1RMLlB3ckNsbXANCj4gLQkgKgktIFBDR0NDVEwuU3RvcFBQaHlMUHdyQ2xr U2VsY2xrDQo+IC0JICoJLSBHVVNCQ0ZHLlBoeUxQd3JDbGtTZWwNCj4gLQkgKgktIEdVU0JDRkcu RERSU2VsDQo+IC0JICoJLSBHVVNCQ0ZHLlBIWVNlbA0KPiAtCSAqCS0gR1VTQkNGRy5GU0ludGYN Cj4gLQkgKgktIEdVU0JDRkcuVUxQSV9VVE1JX1NlbA0KPiAtCSAqCS0gR1VTQkNGRy5QSFlJZg0K PiAtCSAqCS0gSENGRy5GU0xTUGNsa1NlbA0KPiAtCSAqCS0gRENGRy5EZXZTcGQNCj4gLQkgKgkq IEFsbCBtb2R1bGUgc3RhdGUgbWFjaGluZXMgKGV4Y2VwdCB0aGUgQUhCIFNsYXZlIFVuaXQpIGFy ZQ0KPiAtCSAqCXJlc2V0IHRvIHRoZSBJRExFIHN0YXRlLCBhbmQgYWxsIHRoZSB0cmFuc21pdCBG SUZPcyBhbmQgdGhlDQo+IC0JICoJcmVjZWl2ZSBGSUZPIGFyZSBmbHVzaGVkLg0KPiAtCSAqCSog QW55IHRyYW5zYWN0aW9ucyBvbiB0aGUgQUhCIE1hc3RlciBhcmUgdGVybWluYXRlZCBhcyBzb29u DQo+IC0JICoJYXMgcG9zc2libGUsIGFmdGVyIGdyYWNlZnVsbHkgY29tcGxldGluZyB0aGUgbGFz dCBkYXRhIHBoYXNlIG9mDQo+IC0JICoJYW4gQUhCIHRyYW5zZmVyLiBBbnkgdHJhbnNhY3Rpb25z IG9uIHRoZSBVU0IgYXJlIHRlcm1pbmF0ZWQNCj4gLQkgKglpbW1lZGlhdGVseS4NCj4gLQkgKglU aGUgYXBwbGljYXRpb24gY2FuIHdyaXRlIHRvIHRoaXMgYml0IGFueSB0aW1lIGl0IHdhbnRzIHRv IHJlc2V0DQo+IC0JICoJdGhlIGNvcmUuIFRoaXMgaXMgYSBzZWxmLWNsZWFyaW5nIGJpdCBhbmQg dGhlIGNvcmUgY2xlYXJzIHRoaXMNCj4gLQkgKgliaXQgYWZ0ZXIgYWxsIHRoZSBuZWNlc3Nhcnkg bG9naWMgaXMgcmVzZXQgaW4gdGhlIGNvcmUsIHdoaWNoDQo+IC0JICoJbWF5IHRha2Ugc2V2ZXJh bCBjbG9ja3MsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUNCj4gLQkgKglj b3JlLiBPbmNlIHRoaXMgYml0IGlzIGNsZWFyZWQgc29mdHdhcmUgc2hvdWxkIHdhaXQgYXQgbGVh c3QgMw0KPiAtCSAqCVBIWSBjbG9ja3MgYmVmb3JlIGRvaW5nIGFueSBhY2Nlc3MgdG8gdGhlIFBI WSBkb21haW4NCj4gLQkgKgkoc3luY2hyb25pemF0aW9uIGRlbGF5KS4gU29mdHdhcmUgc2hvdWxk IGFsc28gc2hvdWxkIGNoZWNrIHRoYXQNCj4gLQkgKgliaXQgMzEgb2YgdGhpcyByZWdpc3RlciBp cyAxIChBSEIgTWFzdGVyIGlzIElETEUpIGJlZm9yZQ0KPiAtCSAqCXN0YXJ0aW5nIGFueSBvcGVy YXRpb24uDQo+IC0JICoJVHlwaWNhbGx5IHNvZnR3YXJlIHJlc2V0IGlzIHVzZWQgZHVyaW5nIHNv ZnR3YXJlIGRldmVsb3BtZW50DQo+IC0JICoJYW5kIGFsc28gd2hlbiB5b3UgZHluYW1pY2FsbHkg Y2hhbmdlIHRoZSBQSFkgc2VsZWN0aW9uIGJpdHMNCj4gLQkgKglpbiB0aGUgVVNCIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXJzIGxpc3RlZCBhYm92ZS4gV2hlbiB5b3UNCj4gLQkgKgljaGFuZ2UgdGhl IFBIWSwgdGhlIGNvcnJlc3BvbmRpbmcgY2xvY2sgZm9yIHRoZSBQSFkgaXMNCj4gLQkgKglzZWxl Y3RlZCBhbmQgdXNlZCBpbiB0aGUgUEhZIGRvbWFpbi4gT25jZSBhIG5ldyBjbG9jayBpcw0KPiAt CSAqCXNlbGVjdGVkLCB0aGUgUEhZIGRvbWFpbiBoYXMgdG8gYmUgcmVzZXQgZm9yIHByb3BlciBv cGVyYXRpb24uDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfZ3JzdGN0bF9zIHsNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgYWhiaWRsZQkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJ RUxEKHUzMiBkbWFyZXEJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcmVzZXJ2ZWRf MTFfMjkJOiAxOSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgdHhmbnVtCQk6IDUsDQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIHR4ZmZsc2gJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVM RCh1MzIgcnhmZmxzaAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBpbnRrbnFmbHNo CQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGZybWNudHJyc3QJCTogMSwNCj4gLQkJ X19CSVRGSUVMRF9GSUVMRCh1MzIgaHNmdHJzdAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxE KHUzMiBjc2Z0cnN0CQk6IDEsDQo+IC0JCTspKSkpKSkpKSkpDQo+IC0JfSBzOw0KPiAtfTsNCj4g LQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2dyeGZzaXoNCj4gLSAqDQo+IC0gKiBSZWNlaXZl IEZJRk8gU2l6ZSBSZWdpc3RlciAoR1JYRlNJWikNCj4gLSAqDQo+IC0gKiBUaGUgYXBwbGljYXRp b24gY2FuIHByb2dyYW0gdGhlIFJBTSBzaXplIHRoYXQgbXVzdCBiZSBhbGxvY2F0ZWQgdG8gdGhl DQo+IC0gKiBSeEZJRk8uDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hfZ3J4ZnNpeiB7DQo+ IC0JdTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JjeF9ncnhmc2l6X3MN Cj4gLQkgKiBAcnhmZGVwOiBSeEZJRk8gRGVwdGggKFJ4RkRlcCkNCj4gLQkgKglUaGlzIHZhbHVl IGlzIGluIHRlcm1zIG9mIDMyLWJpdCB3b3Jkcy4NCj4gLQkgKgkqIE1pbmltdW0gdmFsdWUgaXMg MTYNCj4gLQkgKgkqIE1heGltdW0gdmFsdWUgaXMgMzI3NjgNCj4gLQkgKi8NCj4gLQlzdHJ1Y3Qg Y3ZteF91c2JjeF9ncnhmc2l6X3Mgew0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZl ZF8xNl8zMQk6IDE2LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByeGZkZXAJCTogMTYsDQo+ IC0JCTspKQ0KPiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3ZteF91c2JjI19n cnhzdHNwaA0KPiAtICoNCj4gLSAqIFJlY2VpdmUgU3RhdHVzIFJlYWQgYW5kIFBvcCBSZWdpc3Rl ciwgSG9zdCBNb2RlIChHUlhTVFNQSCkNCj4gLSAqDQo+IC0gKiBBIHJlYWQgdG8gdGhlIFJlY2Vp dmUgU3RhdHVzIFJlYWQgYW5kIFBvcCByZWdpc3RlciByZXR1cm5zIGFuZCBhZGRpdGlvbmFsbHkN Cj4gLSAqIHBvcHMgdGhlIHRvcCBkYXRhIGVudHJ5IG91dCBvZiB0aGUgUnhGSUZPLg0KPiAtICog VGhpcyBEZXNjcmlwdGlvbiBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGNvcmUgaXMgaW4gSG9zdCBN b2RlLiBGb3IgRGV2aWNlIE1vZGUNCj4gLSAqIHVzZSBVU0JDX0dSWFNUU1BEIGluc3RlYWQuDQo+ IC0gKiBOT1RFOiBHUlhTVFNQSCBhbmQgR1JYU1RTUEQgYXJlIHBoeXNpY2FsbHkgdGhlIHNhbWUg cmVnaXN0ZXIgYW5kIHNoYXJlIHRoZQ0KPiAtICoJIHNhbWUgb2Zmc2V0IGluIHRoZSBPMlAgVVNC IGNvcmUuIFRoZSBvZmZzZXQgZGlmZmVyZW5jZSBzaG93biBpbiB0aGlzDQo+IC0gKgkgZG9jdW1l bnQgaXMgZm9yIHNvZnR3YXJlIGNsYXJpdHkgYW5kIGlzIGFjdHVhbGx5IGlnbm9yZWQgYnkgdGhl DQo+IC0gKiAgICAgICBoYXJkd2FyZS4NCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9ncnhz dHNwaCB7DQo+IC0JdTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JjeF9n cnhzdHNwaF9zDQo+IC0JICogQHBrdHN0czogUGFja2V0IFN0YXR1cyAoUGt0U3RzKQ0KPiAtCSAq CUluZGljYXRlcyB0aGUgc3RhdHVzIG9mIHRoZSByZWNlaXZlZCBwYWNrZXQNCj4gLQkgKgkqIDQn YjAwMTA6IElOIGRhdGEgcGFja2V0IHJlY2VpdmVkDQo+IC0JICoJKiA0J2IwMDExOiBJTiB0cmFu c2ZlciBjb21wbGV0ZWQgKHRyaWdnZXJzIGFuIGludGVycnVwdCkNCj4gLQkgKgkqIDQnYjAxMDE6 IERhdGEgdG9nZ2xlIGVycm9yICh0cmlnZ2VycyBhbiBpbnRlcnJ1cHQpDQo+IC0JICoJKiA0J2Iw MTExOiBDaGFubmVsIGhhbHRlZCAodHJpZ2dlcnMgYW4gaW50ZXJydXB0KQ0KPiAtCSAqCSogT3Ro ZXJzOiBSZXNlcnZlZA0KPiAtCSAqIEBkcGlkOiBEYXRhIFBJRCAoRFBJRCkNCj4gLQkgKgkqIDIn YjAwOiBEQVRBMA0KPiAtCSAqCSogMidiMTA6IERBVEExDQo+IC0JICoJKiAyJ2IwMTogREFUQTIN Cj4gLQkgKgkqIDInYjExOiBNREFUQQ0KPiAtCSAqIEBiY250OiBCeXRlIENvdW50IChCQ250KQ0K PiAtCSAqCUluZGljYXRlcyB0aGUgYnl0ZSBjb3VudCBvZiB0aGUgcmVjZWl2ZWQgSU4gZGF0YSBw YWNrZXQNCj4gLQkgKiBAY2hudW06IENoYW5uZWwgTnVtYmVyIChDaE51bSkNCj4gLQkgKglJbmRp Y2F0ZXMgdGhlIGNoYW5uZWwgbnVtYmVyIHRvIHdoaWNoIHRoZSBjdXJyZW50IHJlY2VpdmVkDQo+ IC0JICoJcGFja2V0IGJlbG9uZ3MuDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfZ3J4 c3RzcGhfcyB7DQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHJlc2VydmVkXzIxXzMxCTogMTEs DQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHBrdHN0cwkJOiA0LA0KPiAtCQlfX0JJVEZJRUxE X0ZJRUxEKHUzMiBkcGlkCQk6IDIsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGJjbnQJCTog MTEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGNobnVtCQk6IDQsDQo+IC0JCTspKSkpKQ0K PiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3ZteF91c2JjI19ndXNiY2ZnDQo+ IC0gKg0KPiAtICogQ29yZSBVU0IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoR1VTQkNGRykNCj4g LSAqDQo+IC0gKiBUaGlzIHJlZ2lzdGVyIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgY29y ZSBhZnRlciBwb3dlci1vbiBvciBhIGNoYW5naW5nDQo+IC0gKiB0byBIb3N0IG1vZGUgb3IgRGV2 aWNlIG1vZGUuIEl0IGNvbnRhaW5zIFVTQiBhbmQgVVNCLVBIWSByZWxhdGVkDQo+IC0gKiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcnMuIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHByb2dyYW0gdGhpcyBy ZWdpc3RlciBiZWZvcmUNCj4gLSAqIHN0YXJ0aW5nIGFueSB0cmFuc2FjdGlvbnMgb24gZWl0aGVy IHRoZSBBSEIgb3IgdGhlIFVTQi4gRG8gbm90IG1ha2UgY2hhbmdlcw0KPiAtICogdG8gdGhpcyBy ZWdpc3RlciBhZnRlciB0aGUgaW5pdGlhbCBwcm9ncmFtbWluZy4NCj4gLSAqLw0KPiAtdW5pb24g Y3ZteF91c2JjeF9ndXNiY2ZnIHsNCj4gLQl1MzIgdTMyOw0KPiAtCS8qKg0KPiAtCSAqIHN0cnVj dCBjdm14X3VzYmN4X2d1c2JjZmdfcw0KPiAtCSAqIEBvdGdpMmNzZWw6IFVUTUlGUyBvciBJMkMg SW50ZXJmYWNlIFNlbGVjdCAoT3RnSTJDU2VsKQ0KPiAtCSAqCVRoaXMgYml0IGlzIGFsd2F5cyAw eDAuDQo+IC0JICogQHBoeWxwd3JjbGtzZWw6IFBIWSBMb3ctUG93ZXIgQ2xvY2sgU2VsZWN0IChQ aHlMUHdyQ2xrU2VsKQ0KPiAtCSAqCVNvZnR3YXJlIHNob3VsZCBzZXQgdGhpcyBiaXQgdG8gMHgw Lg0KPiAtCSAqCVNlbGVjdHMgZWl0aGVyIDQ4MC1NSHogb3IgNDgtTUh6IChsb3ctcG93ZXIpIFBI WSBtb2RlLiBJbg0KPiAtCSAqCUZTIGFuZCBMUyBtb2RlcywgdGhlIFBIWSBjYW4gdXN1YWxseSBv cGVyYXRlIG9uIGEgNDgtTUh6DQo+IC0JICoJY2xvY2sgdG8gc2F2ZSBwb3dlci4NCj4gLQkgKgkq IDEnYjA6IDQ4MC1NSHogSW50ZXJuYWwgUExMIGNsb2NrDQo+IC0JICoJKiAxJ2IxOiA0OC1NSHog RXh0ZXJuYWwgQ2xvY2sNCj4gLQkgKglJbiA0ODAgTUh6IG1vZGUsIHRoZSBVVE1JIGludGVyZmFj ZSBvcGVyYXRlcyBhdCBlaXRoZXIgNjAgb3INCj4gLQkgKgkzMC1NSHosIGRlcGVuZGluZyB1cG9u IHdoZXRoZXIgOC0gb3IgMTYtYml0IGRhdGEgd2lkdGggaXMNCj4gLQkgKglzZWxlY3RlZC4gSW4g NDgtTUh6IG1vZGUsIHRoZSBVVE1JIGludGVyZmFjZSBvcGVyYXRlcyBhdCA0OA0KPiAtCSAqCU1I eiBpbiBGUyBtb2RlIGFuZCBhdCBlaXRoZXIgNDggb3IgNiBNSHogaW4gTFMgbW9kZQ0KPiAtCSAq CShkZXBlbmRpbmcgb24gdGhlIFBIWSB2ZW5kb3IpLg0KPiAtCSAqCVRoaXMgYml0IGRyaXZlcyB0 aGUgdXRtaV9mc2xzX2xvd19wb3dlciBjb3JlIG91dHB1dCBzaWduYWwsIGFuZA0KPiAtCSAqCWlz IHZhbGlkIG9ubHkgZm9yIFVUTUkrIFBIWXMuDQo+IC0JICogQHVzYnRyZHRpbTogVVNCIFR1cm5h cm91bmQgVGltZSAoVVNCVHJkVGltKQ0KPiAtCSAqCVNldHMgdGhlIHR1cm5hcm91bmQgdGltZSBp biBQSFkgY2xvY2tzLg0KPiAtCSAqCVNwZWNpZmllcyB0aGUgcmVzcG9uc2UgdGltZSBmb3IgYSBN QUMgcmVxdWVzdCB0byB0aGUgUGFja2V0DQo+IC0JICoJRklGTyBDb250cm9sbGVyIChQRkMpIHRv IGZldGNoIGRhdGEgZnJvbSB0aGUgREZJRk8gKFNQUkFNKS4NCj4gLQkgKglUaGlzIG11c3QgYmUg cHJvZ3JhbW1lZCB0byAweDUuDQo+IC0JICogQGhucGNhcDogSE5QLUNhcGFibGUgKEhOUENhcCkN Cj4gLQkgKglUaGlzIGJpdCBpcyBhbHdheXMgMHgwLg0KPiAtCSAqIEBzcnBjYXA6IFNSUC1DYXBh YmxlIChTUlBDYXApDQo+IC0JICoJVGhpcyBiaXQgaXMgYWx3YXlzIDB4MC4NCj4gLQkgKiBAZGRy c2VsOiBVTFBJIEREUiBTZWxlY3QgKEREUlNlbCkNCj4gLQkgKglTb2Z0d2FyZSBzaG91bGQgc2V0 IHRoaXMgYml0IHRvIDB4MC4NCj4gLQkgKiBAcGh5c2VsOiBVU0IgMi4wIEhpZ2gtU3BlZWQgUEhZ IG9yIFVTQiAxLjEgRnVsbC1TcGVlZCBTZXJpYWwNCj4gLQkgKglTb2Z0d2FyZSBzaG91bGQgc2V0 IHRoaXMgYml0IHRvIDB4MC4NCj4gLQkgKiBAZnNpbnRmOiBGdWxsLVNwZWVkIFNlcmlhbCBJbnRl cmZhY2UgU2VsZWN0IChGU0ludGYpDQo+IC0JICoJU29mdHdhcmUgc2hvdWxkIHNldCB0aGlzIGJp dCB0byAweDAuDQo+IC0JICogQHVscGlfdXRtaV9zZWw6IFVMUEkgb3IgVVRNSSsgU2VsZWN0IChV TFBJX1VUTUlfU2VsKQ0KPiAtCSAqCVRoaXMgYml0IGlzIGFsd2F5cyAweDAuDQo+IC0JICogQHBo eWlmOiBQSFkgSW50ZXJmYWNlIChQSFlJZikNCj4gLQkgKglUaGlzIGJpdCBpcyBhbHdheXMgMHgx Lg0KPiAtCSAqIEB0b3V0Y2FsOiBIUy9GUyBUaW1lb3V0IENhbGlicmF0aW9uIChUT3V0Q2FsKQ0K PiAtCSAqCVRoZSBudW1iZXIgb2YgUEhZIGNsb2NrcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBwcm9n cmFtcyBpbiB0aGlzDQo+IC0JICoJZmllbGQgaXMgYWRkZWQgdG8gdGhlIGhpZ2gtc3BlZWQvZnVs bC1zcGVlZCBpbnRlcnBhY2tldCB0aW1lb3V0DQo+IC0JICoJZHVyYXRpb24gaW4gdGhlIGNvcmUg dG8gYWNjb3VudCBmb3IgYW55IGFkZGl0aW9uYWwgZGVsYXlzDQo+IC0JICoJaW50cm9kdWNlZCBi eSB0aGUgUEhZLiBUaGlzIG1heSBiZSByZXF1aXJlZCwgc2luY2UgdGhlIGRlbGF5DQo+IC0JICoJ aW50cm9kdWNlZCBieSB0aGUgUEhZIGluIGdlbmVyYXRpbmcgdGhlIGxpbmVzdGF0ZSBjb25kaXRp b24gbWF5DQo+IC0JICoJdmFyeSBmcm9tIG9uZSBQSFkgdG8gYW5vdGhlci4NCj4gLQkgKglUaGUg VVNCIHN0YW5kYXJkIHRpbWVvdXQgdmFsdWUgZm9yIGhpZ2gtc3BlZWQgb3BlcmF0aW9uIGlzDQo+ IC0JICoJNzM2IHRvIDgxNiAoaW5jbHVzaXZlKSBiaXQgdGltZXMuIFRoZSBVU0Igc3RhbmRhcmQg dGltZW91dA0KPiAtCSAqCXZhbHVlIGZvciBmdWxsLXNwZWVkIG9wZXJhdGlvbiBpcyAxNiB0byAx OCAoaW5jbHVzaXZlKSBiaXQNCj4gLQkgKgl0aW1lcy4gVGhlIGFwcGxpY2F0aW9uIG11c3QgcHJv Z3JhbSB0aGlzIGZpZWxkIGJhc2VkIG9uIHRoZQ0KPiAtCSAqCXNwZWVkIG9mIGVudW1lcmF0aW9u LiBUaGUgbnVtYmVyIG9mIGJpdCB0aW1lcyBhZGRlZCBwZXIgUEhZDQo+IC0JICoJY2xvY2sgYXJl Og0KPiAtCSAqCUhpZ2gtc3BlZWQgb3BlcmF0aW9uOg0KPiAtCSAqCSogT25lIDMwLU1IeiBQSFkg Y2xvY2sgPSAxNiBiaXQgdGltZXMNCj4gLQkgKgkqIE9uZSA2MC1NSHogUEhZIGNsb2NrID0gOCBi aXQgdGltZXMNCj4gLQkgKglGdWxsLXNwZWVkIG9wZXJhdGlvbjoNCj4gLQkgKgkqIE9uZSAzMC1N SHogUEhZIGNsb2NrID0gMC40IGJpdCB0aW1lcw0KPiAtCSAqCSogT25lIDYwLU1IeiBQSFkgY2xv Y2sgPSAwLjIgYml0IHRpbWVzDQo+IC0JICoJKiBPbmUgNDgtTUh6IFBIWSBjbG9jayA9IDAuMjUg Yml0IHRpbWVzDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfZ3VzYmNmZ19zIHsNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcmVzZXJ2ZWRfMTdfMzEJOiAxNSwNCj4gLQkJX19CSVRG SUVMRF9GSUVMRCh1MzIgb3RnaTJjc2VsCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IHBoeWxwd3JjbGtzZWwJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8x NF8xNAk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHVzYnRyZHRpbQkJOiA0LA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBobnBjYXAJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVM RCh1MzIgc3JwY2FwCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGRkcnNlbAkJOiAx LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwaHlzZWwJCTogMSwNCj4gLQkJX19CSVRGSUVM RF9GSUVMRCh1MzIgZnNpbnRmCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHVscGlf dXRtaV9zZWwJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwaHlpZgkJOiAxLA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiB0b3V0Y2FsCQk6IDMsDQo+IC0JCTspKSkpKSkpKSkpKSkp DQo+IC0JfSBzOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hhaW50DQo+ IC0gKg0KPiAtICogSG9zdCBBbGwgQ2hhbm5lbHMgSW50ZXJydXB0IFJlZ2lzdGVyIChIQUlOVCkN Cj4gLSAqDQo+IC0gKiBXaGVuIGEgc2lnbmlmaWNhbnQgZXZlbnQgb2NjdXJzIG9uIGEgY2hhbm5l bCwgdGhlIEhvc3QgQWxsIENoYW5uZWxzIEludGVycnVwdA0KPiAtICogcmVnaXN0ZXIgaW50ZXJy dXB0cyB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIEhvc3QgQ2hhbm5lbHMgSW50ZXJydXB0IGJp dCBvZg0KPiAtICogdGhlIENvcmUgSW50ZXJydXB0IHJlZ2lzdGVyIChHSU5UU1RTLkhDaEludCku IFRoaXMgaXMgc2hvd24gaW4gSW50ZXJydXB0Lg0KPiAtICogVGhlcmUgaXMgb25lIGludGVycnVw dCBiaXQgcGVyIGNoYW5uZWwsIHVwIHRvIGEgbWF4aW11bSBvZiAxNiBiaXRzLiBCaXRzIGluDQo+ IC0gKiB0aGlzIHJlZ2lzdGVyIGFyZSBzZXQgYW5kIGNsZWFyZWQgd2hlbiB0aGUgYXBwbGljYXRp b24gc2V0cyBhbmQgY2xlYXJzIGJpdHMNCj4gLSAqIGluIHRoZSBjb3JyZXNwb25kaW5nIEhvc3Qg Q2hhbm5lbC1uIEludGVycnVwdCByZWdpc3Rlci4NCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2Jj eF9oYWludCB7DQo+IC0JdTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2Jj eF9oYWludF9zDQo+IC0JICogQGhhaW50OiBDaGFubmVsIEludGVycnVwdHMgKEhBSU5UKQ0KPiAt CSAqCU9uZSBiaXQgcGVyIGNoYW5uZWw6IEJpdCAwIGZvciBDaGFubmVsIDAsIGJpdCAxNSBmb3Ig Q2hhbm5lbCAxNQ0KPiAtCSAqLw0KPiAtCXN0cnVjdCBjdm14X3VzYmN4X2hhaW50X3Mgew0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8xNl8zMQk6IDE2LA0KPiAtCQlfX0JJVEZJ RUxEX0ZJRUxEKHUzMiBoYWludAkJOiAxNiwNCj4gLQkJOykpDQo+IC0JfSBzOw0KPiAtfTsNCj4g LQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hhaW50bXNrDQo+IC0gKg0KPiAtICogSG9zdCBB bGwgQ2hhbm5lbHMgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKEhBSU5UTVNLKQ0KPiAtICoNCj4g LSAqIFRoZSBIb3N0IEFsbCBDaGFubmVsIEludGVycnVwdCBNYXNrIHJlZ2lzdGVyIHdvcmtzIHdp dGggdGhlIEhvc3QgQWxsIENoYW5uZWwNCj4gLSAqIEludGVycnVwdCByZWdpc3RlciB0byBpbnRl cnJ1cHQgdGhlIGFwcGxpY2F0aW9uIHdoZW4gYW4gZXZlbnQgb2NjdXJzIG9uIGENCj4gLSAqIGNo YW5uZWwuIFRoZXJlIGlzIG9uZSBpbnRlcnJ1cHQgbWFzayBiaXQgcGVyIGNoYW5uZWwsIHVwIHRv IGEgbWF4aW11bSBvZiAxNg0KPiAtICogYml0cy4NCj4gLSAqIE1hc2sgaW50ZXJydXB0OiAxJ2Iw IFVubWFzayBpbnRlcnJ1cHQ6IDEnYjENCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9oYWlu dG1zayB7DQo+IC0JdTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JjeF9o YWludG1za19zDQo+IC0JICogQGhhaW50bXNrOiBDaGFubmVsIEludGVycnVwdCBNYXNrIChIQUlO VE1zaykNCj4gLQkgKglPbmUgYml0IHBlciBjaGFubmVsOiBCaXQgMCBmb3IgY2hhbm5lbCAwLCBi aXQgMTUgZm9yIGNoYW5uZWwgMTUNCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgY3ZteF91c2JjeF9oYWlu dG1za19zIHsNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcmVzZXJ2ZWRfMTZfMzEJOiAxNiwN Cj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgaGFpbnRtc2sJCTogMTYsDQo+IC0JCTspKQ0KPiAt CX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3ZteF91c2JjI19oY2NoYXIjDQo+IC0g Kg0KPiAtICogSG9zdCBDaGFubmVsLW4gQ2hhcmFjdGVyaXN0aWNzIFJlZ2lzdGVyIChIQ0NIQVIp DQo+IC0gKg0KPiAtICovDQo+IC11bmlvbiBjdm14X3VzYmN4X2hjY2hhcnggew0KPiAtCXUzMiB1 MzI7DQo+IC0JLyoqDQo+IC0JICogc3RydWN0IGN2bXhfdXNiY3hfaGNjaGFyeF9zDQo+IC0JICog QGNoZW5hOiBDaGFubmVsIEVuYWJsZSAoQ2hFbmEpDQo+IC0JICoJVGhpcyBmaWVsZCBpcyBzZXQg YnkgdGhlIGFwcGxpY2F0aW9uIGFuZCBjbGVhcmVkIGJ5IHRoZSBPVEcNCj4gLQkgKglob3N0Lg0K PiAtCSAqCSogMSdiMDogQ2hhbm5lbCBkaXNhYmxlZA0KPiAtCSAqCSogMSdiMTogQ2hhbm5lbCBl bmFibGVkDQo+IC0JICogQGNoZGlzOiBDaGFubmVsIERpc2FibGUgKENoRGlzKQ0KPiAtCSAqCVRo ZSBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgYml0IHRvIHN0b3AgdHJhbnNtaXR0aW5nL3JlY2Vpdmlu Zw0KPiAtCSAqCWRhdGEgb24gYSBjaGFubmVsLCBldmVuIGJlZm9yZSB0aGUgdHJhbnNmZXIgZm9y IHRoYXQgY2hhbm5lbCBpcw0KPiAtCSAqCWNvbXBsZXRlLiBUaGUgYXBwbGljYXRpb24gbXVzdCB3 YWl0IGZvciB0aGUgQ2hhbm5lbCBEaXNhYmxlZA0KPiAtCSAqCWludGVycnVwdCBiZWZvcmUgdHJl YXRpbmcgdGhlIGNoYW5uZWwgYXMgZGlzYWJsZWQuDQo+IC0JICogQG9kZGZybTogT2RkIEZyYW1l IChPZGRGcm0pDQo+IC0JICoJVGhpcyBmaWVsZCBpcyBzZXQgKHJlc2V0KSBieSB0aGUgYXBwbGlj YXRpb24gdG8gaW5kaWNhdGUgdGhhdA0KPiAtCSAqCXRoZSBPVEcgaG9zdCBtdXN0IHBlcmZvcm0g YSB0cmFuc2ZlciBpbiBhbiBvZGQgKG1pY3JvKWZyYW1lLg0KPiAtCSAqCVRoaXMgZmllbGQgaXMg YXBwbGljYWJsZSBmb3Igb25seSBwZXJpb2RpYyAoaXNvY2hyb25vdXMgYW5kDQo+IC0JICoJaW50 ZXJydXB0KSB0cmFuc2FjdGlvbnMuDQo+IC0JICoJKiAxJ2IwOiBFdmVuIChtaWNybylmcmFtZQ0K PiAtCSAqCSogMSdiMTogT2RkIChtaWNybylmcmFtZQ0KPiAtCSAqIEBkZXZhZGRyOiBEZXZpY2Ug QWRkcmVzcyAoRGV2QWRkcikNCj4gLQkgKglUaGlzIGZpZWxkIHNlbGVjdHMgdGhlIHNwZWNpZmlj IGRldmljZSBzZXJ2aW5nIGFzIHRoZSBkYXRhDQo+IC0JICoJc291cmNlIG9yIHNpbmsuDQo+IC0J ICogQGVjOiBNdWx0aSBDb3VudCAoTUMpIC8gRXJyb3IgQ291bnQgKEVDKQ0KPiAtCSAqCVdoZW4g dGhlIFNwbGl0IEVuYWJsZSBiaXQgb2YgdGhlIEhvc3QgQ2hhbm5lbC1uIFNwbGl0IENvbnRyb2wN Cj4gLQkgKglyZWdpc3RlciAoSENTUExUbi5TcGx0RW5hKSBpcyByZXNldCAoMSdiMCksIHRoaXMg ZmllbGQgaW5kaWNhdGVzDQo+IC0JICoJdG8gdGhlIGhvc3QgdGhlIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgdGhhdCBzaG91bGQgYmUgZXhlY3V0ZWQNCj4gLQkgKglwZXIgbWljcm9mcmFtZSBmb3Ig dGhpcyBlbmRwb2ludC4NCj4gLQkgKgkqIDInYjAwOiBSZXNlcnZlZC4gVGhpcyBmaWVsZCB5aWVs ZHMgdW5kZWZpbmVkIHJlc3VsdHMuDQo+IC0JICoJKiAyJ2IwMTogMSB0cmFuc2FjdGlvbg0KPiAt CSAqCSogMidiMTA6IDIgdHJhbnNhY3Rpb25zIHRvIGJlIGlzc3VlZCBmb3IgdGhpcyBlbmRwb2lu dCBwZXINCj4gLQkgKgltaWNyb2ZyYW1lDQo+IC0JICoJKiAyJ2IxMTogMyB0cmFuc2FjdGlvbnMg dG8gYmUgaXNzdWVkIGZvciB0aGlzIGVuZHBvaW50IHBlcg0KPiAtCSAqCW1pY3JvZnJhbWUNCj4g LQkgKglXaGVuIEhDU1BMVG4uU3BsdEVuYSBpcyBzZXQgKDEnYjEpLCB0aGlzIGZpZWxkIGluZGlj YXRlcyB0aGUNCj4gLQkgKgludW1iZXIgb2YgaW1tZWRpYXRlIHJldHJpZXMgdG8gYmUgcGVyZm9y bWVkIGZvciBhIHBlcmlvZGljIHNwbGl0DQo+IC0JICoJdHJhbnNhY3Rpb25zIG9uIHRyYW5zYWN0 aW9uIGVycm9ycy4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byBhdA0KPiAtCSAqCWxlYXN0IDIn YjAxLg0KPiAtCSAqIEBlcHR5cGU6IEVuZHBvaW50IFR5cGUgKEVQVHlwZSkNCj4gLQkgKglJbmRp Y2F0ZXMgdGhlIHRyYW5zZmVyIHR5cGUgc2VsZWN0ZWQuDQo+IC0JICoJKiAyJ2IwMDogQ29udHJv bA0KPiAtCSAqCSogMidiMDE6IElzb2Nocm9ub3VzDQo+IC0JICoJKiAyJ2IxMDogQnVsaw0KPiAt CSAqCSogMidiMTE6IEludGVycnVwdA0KPiAtCSAqIEBsc3BkZGV2OiBMb3ctU3BlZWQgRGV2aWNl IChMU3BkRGV2KQ0KPiAtCSAqCVRoaXMgZmllbGQgaXMgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbiB0 byBpbmRpY2F0ZSB0aGF0IHRoaXMNCj4gLQkgKgljaGFubmVsIGlzIGNvbW11bmljYXRpbmcgdG8g YSBsb3ctc3BlZWQgZGV2aWNlLg0KPiAtCSAqIEBlcGRpcjogRW5kcG9pbnQgRGlyZWN0aW9uIChF UERpcikNCj4gLQkgKglJbmRpY2F0ZXMgd2hldGhlciB0aGUgdHJhbnNhY3Rpb24gaXMgSU4gb3Ig T1VULg0KPiAtCSAqCSogMSdiMDogT1VUDQo+IC0JICoJKiAxJ2IxOiBJTg0KPiAtCSAqIEBlcG51 bTogRW5kcG9pbnQgTnVtYmVyIChFUE51bSkNCj4gLQkgKglJbmRpY2F0ZXMgdGhlIGVuZHBvaW50 IG51bWJlciBvbiB0aGUgZGV2aWNlIHNlcnZpbmcgYXMgdGhlDQo+IC0JICoJZGF0YSBzb3VyY2Ug b3Igc2luay4NCj4gLQkgKiBAbXBzOiBNYXhpbXVtIFBhY2tldCBTaXplIChNUFMpDQo+IC0JICoJ SW5kaWNhdGVzIHRoZSBtYXhpbXVtIHBhY2tldCBzaXplIG9mIHRoZSBhc3NvY2lhdGVkIGVuZHBv aW50Lg0KPiAtCSAqLw0KPiAtCXN0cnVjdCBjdm14X3VzYmN4X2hjY2hhcnhfcyB7DQo+IC0JCV9f QklURklFTERfRklFTEQodTMyIGNoZW5hCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IGNoZGlzCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIG9kZGZybQkJOiAxLA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBkZXZhZGRyCQk6IDcsDQo+IC0JCV9fQklURklFTERfRklF TEQodTMyIGVjCQkJOiAyLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBlcHR5cGUJCTogMiwN Cj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgbHNwZGRldgkJOiAxLA0KPiAtCQlfX0JJVEZJRUxE X0ZJRUxEKHUzMiByZXNlcnZlZF8xNl8xNgk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IGVwZGlyCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGVwbnVtCQk6IDQsDQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIG1wcwkJOiAxMSwNCj4gLQkJOykpKSkpKSkpKSkpDQo+IC0J fSBzOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hjZmcNCj4gLSAqDQo+ IC0gKiBIb3N0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKEhDRkcpDQo+IC0gKg0KPiAtICogVGhp cyByZWdpc3RlciBjb25maWd1cmVzIHRoZSBjb3JlIGFmdGVyIHBvd2VyLW9uLiBEbyBub3QgbWFr ZSBjaGFuZ2VzIHRvIHRoaXMNCj4gLSAqIHJlZ2lzdGVyIGFmdGVyIGluaXRpYWxpemluZyB0aGUg aG9zdC4NCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9oY2ZnIHsNCj4gLQl1MzIgdTMyOw0K PiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4X2hjZmdfcw0KPiAtCSAqIEBmc2xzc3Vw cDogRlMtIGFuZCBMUy1Pbmx5IFN1cHBvcnQgKEZTTFNTdXBwKQ0KPiAtCSAqCVRoZSBhcHBsaWNh dGlvbiB1c2VzIHRoaXMgYml0IHRvIGNvbnRyb2wgdGhlIGNvcmUncyBlbnVtZXJhdGlvbg0KPiAt CSAqCXNwZWVkLiBVc2luZyB0aGlzIGJpdCwgdGhlIGFwcGxpY2F0aW9uIGNhbiBtYWtlIHRoZSBj b3JlDQo+IC0JICoJZW51bWVyYXRlIGFzIGEgRlMgaG9zdCwgZXZlbiBpZiB0aGUgY29ubmVjdGVk IGRldmljZSBzdXBwb3J0cw0KPiAtCSAqCUhTIHRyYWZmaWMuIERvIG5vdCBtYWtlIGNoYW5nZXMg dG8gdGhpcyBmaWVsZCBhZnRlciBpbml0aWFsDQo+IC0JICoJcHJvZ3JhbW1pbmcuDQo+IC0JICoJ KiAxJ2IwOiBIUy9GUy9MUywgYmFzZWQgb24gdGhlIG1heGltdW0gc3BlZWQgc3VwcG9ydGVkIGJ5 DQo+IC0JICoJdGhlIGNvbm5lY3RlZCBkZXZpY2UNCj4gLQkgKgkqIDEnYjE6IEZTL0xTLW9ubHks IGV2ZW4gaWYgdGhlIGNvbm5lY3RlZCBkZXZpY2UgY2FuIHN1cHBvcnQgSFMNCj4gLQkgKiBAZnNs c3BjbGtzZWw6IEZTL0xTIFBIWSBDbG9jayBTZWxlY3QgKEZTTFNQY2xrU2VsKQ0KPiAtCSAqCVdo ZW4gdGhlIGNvcmUgaXMgaW4gRlMgSG9zdCBtb2RlDQo+IC0JICoJKiAyJ2IwMDogUEhZIGNsb2Nr IGlzIHJ1bm5pbmcgYXQgMzAvNjAgTUh6DQo+IC0JICoJKiAyJ2IwMTogUEhZIGNsb2NrIGlzIHJ1 bm5pbmcgYXQgNDggTUh6DQo+IC0JICoJKiBPdGhlcnM6IFJlc2VydmVkDQo+IC0JICoJV2hlbiB0 aGUgY29yZSBpcyBpbiBMUyBIb3N0IG1vZGUNCj4gLQkgKgkqIDInYjAwOiBQSFkgY2xvY2sgaXMg cnVubmluZyBhdCAzMC82MCBNSHouIFdoZW4gdGhlDQo+IC0JICoJVVRNSSsvVUxQSSBQSFkgTG93 IFBvd2VyIG1vZGUgaXMgbm90IHNlbGVjdGVkLCB1c2UNCj4gLQkgKgkzMC82MCBNSHouDQo+IC0J ICoJKiAyJ2IwMTogUEhZIGNsb2NrIGlzIHJ1bm5pbmcgYXQgNDggTUh6LiBXaGVuIHRoZSBVVE1J Kw0KPiAtCSAqCVBIWSBMb3cgUG93ZXIgbW9kZSBpcyBzZWxlY3RlZCwgdXNlIDQ4TUh6IGlmIHRo ZSBQSFkNCj4gLQkgKglzdXBwbGllcyBhIDQ4IE1IeiBjbG9jayBkdXJpbmcgTFMgbW9kZS4NCj4g LQkgKgkqIDInYjEwOiBQSFkgY2xvY2sgaXMgcnVubmluZyBhdCA2IE1Iei4gSW4gVVNCIDEuMSBG UyBtb2RlLA0KPiAtCSAqCXVzZSA2IE1IeiB3aGVuIHRoZSBVVE1JKyBQSFkgTG93IFBvd2VyIG1v ZGUgaXMNCj4gLQkgKglzZWxlY3RlZCBhbmQgdGhlIFBIWSBzdXBwbGllcyBhIDYgTUh6IGNsb2Nr IGR1cmluZyBMUw0KPiAtCSAqCW1vZGUuIElmIHlvdSBzZWxlY3QgYSA2IE1IeiBjbG9jayBkdXJp bmcgTFMgbW9kZSwgeW91IG11c3QNCj4gLQkgKglkbyBhIHNvZnQgcmVzZXQuDQo+IC0JICoJKiAy J2IxMTogUmVzZXJ2ZWQNCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgY3ZteF91c2JjeF9oY2ZnX3Mgew0K PiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8zXzMxCTogMjksDQo+IC0JCV9fQklU RklFTERfRklFTEQodTMyIGZzbHNzdXBwCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMy IGZzbHNwY2xrc2VsCTogMiwNCj4gLQkJOykpKQ0KPiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8q Kg0KPiAtICogY3ZteF91c2JjI19oY2ludCMNCj4gLSAqDQo+IC0gKiBIb3N0IENoYW5uZWwtbiBJ bnRlcnJ1cHQgUmVnaXN0ZXIgKEhDSU5UKQ0KPiAtICoNCj4gLSAqIFRoaXMgcmVnaXN0ZXIgaW5k aWNhdGVzIHRoZSBzdGF0dXMgb2YgYSBjaGFubmVsIHdpdGggcmVzcGVjdCB0byBVU0ItIGFuZA0K PiAtICogQUhCLXJlbGF0ZWQgZXZlbnRzLiBUaGUgYXBwbGljYXRpb24gbXVzdCByZWFkIHRoaXMg cmVnaXN0ZXIgd2hlbiB0aGUgSG9zdA0KPiAtICogQ2hhbm5lbHMgSW50ZXJydXB0IGJpdCBvZiB0 aGUgQ29yZSBJbnRlcnJ1cHQgcmVnaXN0ZXIgKEdJTlRTVFMuSENoSW50KSBpcw0KPiAtICogc2V0 LiBCZWZvcmUgdGhlIGFwcGxpY2F0aW9uIGNhbiByZWFkIHRoaXMgcmVnaXN0ZXIsIGl0IG11c3Qg Zmlyc3QgcmVhZA0KPiAtICogdGhlIEhvc3QgQWxsIENoYW5uZWxzIEludGVycnVwdCAoSEFJTlQp IHJlZ2lzdGVyIHRvIGdldCB0aGUgZXhhY3QgY2hhbm5lbA0KPiAtICogbnVtYmVyIGZvciB0aGUg SG9zdCBDaGFubmVsLW4gSW50ZXJydXB0IHJlZ2lzdGVyLiBUaGUgYXBwbGljYXRpb24gbXVzdCBj bGVhcg0KPiAtICogdGhlIGFwcHJvcHJpYXRlIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIHRvIGNsZWFy IHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgaW4gdGhlDQo+IC0gKiBIQUlOVCBhbmQgR0lOVFNUUyBy ZWdpc3RlcnMuDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hfaGNpbnR4IHsNCj4gLQl1MzIg dTMyOw0KPiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4X2hjaW50eF9zDQo+IC0JICog QGRhdGF0Z2xlcnI6IERhdGEgVG9nZ2xlIEVycm9yIChEYXRhVGdsRXJyKQ0KPiAtCSAqIEBmcm1v dnJ1bjogRnJhbWUgT3ZlcnJ1biAoRnJtT3ZydW4pDQo+IC0JICogQGJibGVycjogQmFiYmxlIEVy cm9yIChCYmxFcnIpDQo+IC0JICogQHhhY3RlcnI6IFRyYW5zYWN0aW9uIEVycm9yIChYYWN0RXJy KQ0KPiAtCSAqIEBueWV0OiBOWUVUIFJlc3BvbnNlIFJlY2VpdmVkIEludGVycnVwdCAoTllFVCkN Cj4gLQkgKiBAYWNrOiBBQ0sgUmVzcG9uc2UgUmVjZWl2ZWQgSW50ZXJydXB0IChBQ0spDQo+IC0J ICogQG5hazogTkFLIFJlc3BvbnNlIFJlY2VpdmVkIEludGVycnVwdCAoTkFLKQ0KPiAtCSAqIEBz dGFsbDogU1RBTEwgUmVzcG9uc2UgUmVjZWl2ZWQgSW50ZXJydXB0IChTVEFMTCkNCj4gLQkgKiBA YWhiZXJyOiBUaGlzIGJpdCBpcyBhbHdheXMgMHgwLg0KPiAtCSAqIEBjaGhsdGQ6IENoYW5uZWwg SGFsdGVkIChDaEhsdGQpDQo+IC0JICoJSW5kaWNhdGVzIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQg YWJub3JtYWxseSBlaXRoZXIgYmVjYXVzZSBvZg0KPiAtCSAqCWFueSBVU0IgdHJhbnNhY3Rpb24g ZXJyb3Igb3IgaW4gcmVzcG9uc2UgdG8gZGlzYWJsZSByZXF1ZXN0IGJ5DQo+IC0JICoJdGhlIGFw cGxpY2F0aW9uLg0KPiAtCSAqIEB4ZmVyY29tcGw6IFRyYW5zZmVyIENvbXBsZXRlZCAoWGZlckNv bXBsKQ0KPiAtCSAqCVRyYW5zZmVyIGNvbXBsZXRlZCBub3JtYWxseSB3aXRob3V0IGFueSBlcnJv cnMuDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfaGNpbnR4X3Mgew0KPiAtCQlfX0JJ VEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8xMV8zMQk6IDIxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJ RUxEKHUzMiBkYXRhdGdsZXJyCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGZybW92 cnVuCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGJibGVycgkJOiAxLA0KPiAtCQlf X0JJVEZJRUxEX0ZJRUxEKHUzMiB4YWN0ZXJyCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQo dTMyIG55ZXQJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgYWNrCQk6IDEsDQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIG5hawkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUz MiBzdGFsbAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBhaGJlcnIJCTogMSwNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgY2hobHRkCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklF TEQodTMyIHhmZXJjb21wbAkJOiAxLA0KPiAtCQk7KSkpKSkpKSkpKSkpDQo+IC0JfSBzOw0KPiAt fTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hjaW50bXNrIw0KPiAtICoNCj4gLSAq IEhvc3QgQ2hhbm5lbC1uIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyIChIQ0lOVE1TS24pDQo+IC0g Kg0KPiAtICogVGhpcyByZWdpc3RlciByZWZsZWN0cyB0aGUgbWFzayBmb3IgZWFjaCBjaGFubmVs IHN0YXR1cyBkZXNjcmliZWQgaW4gdGhlDQo+IC0gKiBwcmV2aW91cyBzZWN0aW9uLg0KPiAtICog TWFzayBpbnRlcnJ1cHQ6IDEnYjAgVW5tYXNrIGludGVycnVwdDogMSdiMQ0KPiAtICovDQo+IC11 bmlvbiBjdm14X3VzYmN4X2hjaW50bXNreCB7DQo+IC0JdTMyIHUzMjsNCj4gLQkvKioNCj4gLQkg KiBzdHJ1Y3QgY3ZteF91c2JjeF9oY2ludG1za3hfcw0KPiAtCSAqIEBkYXRhdGdsZXJybXNrOiBE YXRhIFRvZ2dsZSBFcnJvciBNYXNrIChEYXRhVGdsRXJyTXNrKQ0KPiAtCSAqIEBmcm1vdnJ1bm1z azogRnJhbWUgT3ZlcnJ1biBNYXNrIChGcm1PdnJ1bk1zaykNCj4gLQkgKiBAYmJsZXJybXNrOiBC YWJibGUgRXJyb3IgTWFzayAoQmJsRXJyTXNrKQ0KPiAtCSAqIEB4YWN0ZXJybXNrOiBUcmFuc2Fj dGlvbiBFcnJvciBNYXNrIChYYWN0RXJyTXNrKQ0KPiAtCSAqIEBueWV0bXNrOiBOWUVUIFJlc3Bv bnNlIFJlY2VpdmVkIEludGVycnVwdCBNYXNrIChOeWV0TXNrKQ0KPiAtCSAqIEBhY2ttc2s6IEFD SyBSZXNwb25zZSBSZWNlaXZlZCBJbnRlcnJ1cHQgTWFzayAoQWNrTXNrKQ0KPiAtCSAqIEBuYWtt c2s6IE5BSyBSZXNwb25zZSBSZWNlaXZlZCBJbnRlcnJ1cHQgTWFzayAoTmFrTXNrKQ0KPiAtCSAq IEBzdGFsbG1zazogU1RBTEwgUmVzcG9uc2UgUmVjZWl2ZWQgSW50ZXJydXB0IE1hc2sgKFN0YWxs TXNrKQ0KPiAtCSAqIEBhaGJlcnJtc2s6IEFIQiBFcnJvciBNYXNrIChBSEJFcnJNc2spDQo+IC0J ICogQGNoaGx0ZG1zazogQ2hhbm5lbCBIYWx0ZWQgTWFzayAoQ2hIbHRkTXNrKQ0KPiAtCSAqIEB4 ZmVyY29tcGxtc2s6IFRyYW5zZmVyIENvbXBsZXRlZCBNYXNrIChYZmVyQ29tcGxNc2spDQo+IC0J ICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfaGNpbnRtc2t4X3Mgew0KPiAtCQlfX0JJVEZJRUxE X0ZJRUxEKHUzMiByZXNlcnZlZF8xMV8zMQkJOiAyMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 MzIgZGF0YXRnbGVycm1zawkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBmcm1vdnJ1 bm1zawkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBiYmxlcnJtc2sJCQk6IDEsDQo+ IC0JCV9fQklURklFTERfRklFTEQodTMyIHhhY3RlcnJtc2sJCQk6IDEsDQo+IC0JCV9fQklURklF TERfRklFTEQodTMyIG55ZXRtc2sJCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIGFj a21zawkJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgbmFrbXNrCQkJOiAxLA0KPiAt CQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBzdGFsbG1zawkJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9G SUVMRCh1MzIgYWhiZXJybXNrCQkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBjaGhs dGRtc2sJCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHhmZXJjb21wbG1zawkJOiAx LA0KPiAtCQk7KSkpKSkpKSkpKSkpDQo+IC0JfSBzOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0g KiBjdm14X3VzYmMjX2hjc3BsdCMNCj4gLSAqDQo+IC0gKiBIb3N0IENoYW5uZWwtbiBTcGxpdCBD b250cm9sIFJlZ2lzdGVyIChIQ1NQTFQpDQo+IC0gKg0KPiAtICovDQo+IC11bmlvbiBjdm14X3Vz YmN4X2hjc3BsdHggew0KPiAtCXUzMiB1MzI7DQo+IC0JLyoqDQo+IC0JICogc3RydWN0IGN2bXhf dXNiY3hfaGNzcGx0eF9zDQo+IC0JICogQHNwbHRlbmE6IFNwbGl0IEVuYWJsZSAoU3BsdEVuYSkN Cj4gLQkgKglUaGUgYXBwbGljYXRpb24gc2V0cyB0aGlzIGZpZWxkIHRvIGluZGljYXRlIHRoYXQg dGhpcyBjaGFubmVsIGlzDQo+IC0JICoJZW5hYmxlZCB0byBwZXJmb3JtIHNwbGl0IHRyYW5zYWN0 aW9ucy4NCj4gLQkgKiBAY29tcHNwbHQ6IERvIENvbXBsZXRlIFNwbGl0IChDb21wU3BsdCkNCj4g LQkgKglUaGUgYXBwbGljYXRpb24gc2V0cyB0aGlzIGZpZWxkIHRvIHJlcXVlc3QgdGhlIE9URyBo b3N0IHRvDQo+IC0JICoJcGVyZm9ybSBhIGNvbXBsZXRlIHNwbGl0IHRyYW5zYWN0aW9uLg0KPiAt CSAqIEB4YWN0cG9zOiBUcmFuc2FjdGlvbiBQb3NpdGlvbiAoWGFjdFBvcykNCj4gLQkgKglUaGlz IGZpZWxkIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gc2VuZCBhbGwsIGZpcnN0LA0K PiAtCSAqCW1pZGRsZSwgb3IgbGFzdCBwYXlsb2FkcyB3aXRoIGVhY2ggT1VUIHRyYW5zYWN0aW9u Lg0KPiAtCSAqCSogMidiMTE6IEFsbC4gVGhpcyBpcyB0aGUgZW50aXJlIGRhdGEgcGF5bG9hZCBp cyBvZiB0aGlzDQo+IC0JICoJdHJhbnNhY3Rpb24gKHdoaWNoIGlzIGxlc3MgdGhhbiBvciBlcXVh bCB0byAxODggYnl0ZXMpLg0KPiAtCSAqCSogMidiMTA6IEJlZ2luLiBUaGlzIGlzIHRoZSBmaXJz dCBkYXRhIHBheWxvYWQgb2YgdGhpcw0KPiAtCSAqCXRyYW5zYWN0aW9uICh3aGljaCBpcyBsYXJn ZXIgdGhhbiAxODggYnl0ZXMpLg0KPiAtCSAqCSogMidiMDA6IE1pZC4gVGhpcyBpcyB0aGUgbWlk ZGxlIHBheWxvYWQgb2YgdGhpcyB0cmFuc2FjdGlvbg0KPiAtCSAqCSh3aGljaCBpcyBsYXJnZXIg dGhhbiAxODggYnl0ZXMpLg0KPiAtCSAqCSogMidiMDE6IEVuZC4gVGhpcyBpcyB0aGUgbGFzdCBw YXlsb2FkIG9mIHRoaXMgdHJhbnNhY3Rpb24NCj4gLQkgKgkod2hpY2ggaXMgbGFyZ2VyIHRoYW4g MTg4IGJ5dGVzKS4NCj4gLQkgKiBAaHViYWRkcjogSHViIEFkZHJlc3MgKEh1YkFkZHIpDQo+IC0J ICoJVGhpcyBmaWVsZCBob2xkcyB0aGUgZGV2aWNlIGFkZHJlc3Mgb2YgdGhlIHRyYW5zYWN0aW9u DQo+IC0JICoJdHJhbnNsYXRvcidzIGh1Yi4NCj4gLQkgKiBAcHJ0YWRkcjogUG9ydCBBZGRyZXNz IChQcnRBZGRyKQ0KPiAtCSAqCVRoaXMgZmllbGQgaXMgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBy ZWNpcGllbnQgdHJhbnNhY3Rpb24NCj4gLQkgKgl0cmFuc2xhdG9yLg0KPiAtCSAqLw0KPiAtCXN0 cnVjdCBjdm14X3VzYmN4X2hjc3BsdHhfcyB7DQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHNw bHRlbmEJCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHJlc2VydmVkXzE3XzMwCQk6 IDE0LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBjb21wc3BsdAkJCTogMSwNCj4gLQkJX19C SVRGSUVMRF9GSUVMRCh1MzIgeGFjdHBvcwkJCTogMiwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 MzIgaHViYWRkcgkJCTogNywNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcHJ0YWRkcgkJCTog NywNCj4gLQkJOykpKSkpKQ0KPiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3Zt eF91c2JjI19oY3RzaXojDQo+IC0gKg0KPiAtICogSG9zdCBDaGFubmVsLW4gVHJhbnNmZXIgU2l6 ZSBSZWdpc3RlciAoSENUU0laKQ0KPiAtICoNCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9o Y3RzaXp4IHsNCj4gLQl1MzIgdTMyOw0KPiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4 X2hjdHNpenhfcw0KPiAtCSAqIEBkb3BuZzogRG8gUGluZyAoRG9QbmcpDQo+IC0JICoJU2V0dGlu ZyB0aGlzIGZpZWxkIHRvIDEgZGlyZWN0cyB0aGUgaG9zdCB0byBkbyBQSU5HIHByb3RvY29sLg0K PiAtCSAqIEBwaWQ6IFBJRCAoUGlkKQ0KPiAtCSAqCVRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtcyB0 aGlzIGZpZWxkIHdpdGggdGhlIHR5cGUgb2YgUElEIHRvIHVzZQ0KPiAtCSAqCWZvciB0aGUgaW5p dGlhbCB0cmFuc2FjdGlvbi4gVGhlIGhvc3Qgd2lsbCBtYWludGFpbiB0aGlzIGZpZWxkDQo+IC0J ICoJZm9yIHRoZSByZXN0IG9mIHRoZSB0cmFuc2Zlci4NCj4gLQkgKgkqIDInYjAwOiBEQVRBMA0K PiAtCSAqCSogMidiMDE6IERBVEEyDQo+IC0JICoJKiAyJ2IxMDogREFUQTENCj4gLQkgKgkqIDIn YjExOiBNREFUQSAobm9uLWNvbnRyb2wpL1NFVFVQIChjb250cm9sKQ0KPiAtCSAqIEBwa3RjbnQ6 IFBhY2tldCBDb3VudCAoUGt0Q250KQ0KPiAtCSAqCVRoaXMgZmllbGQgaXMgcHJvZ3JhbW1lZCBi eSB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZXhwZWN0ZWQNCj4gLQkgKgludW1iZXIgb2YgcGFj a2V0cyB0byBiZSB0cmFuc21pdHRlZCAoT1VUKSBvciByZWNlaXZlZCAoSU4pLg0KPiAtCSAqCVRo ZSBob3N0IGRlY3JlbWVudHMgdGhpcyBjb3VudCBvbiBldmVyeSBzdWNjZXNzZnVsDQo+IC0JICoJ dHJhbnNtaXNzaW9uIG9yIHJlY2VwdGlvbiBvZiBhbiBPVVQvSU4gcGFja2V0LiBPbmNlIHRoaXMg Y291bnQNCj4gLQkgKglyZWFjaGVzIHplcm8sIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnRlcnJ1cHRl ZCB0byBpbmRpY2F0ZSBub3JtYWwNCj4gLQkgKgljb21wbGV0aW9uLg0KPiAtCSAqIEB4ZmVyc2l6 ZTogVHJhbnNmZXIgU2l6ZSAoWGZlclNpemUpDQo+IC0JICoJRm9yIGFuIE9VVCwgdGhpcyBmaWVs ZCBpcyB0aGUgbnVtYmVyIG9mIGRhdGEgYnl0ZXMgdGhlIGhvc3Qgd2lsbA0KPiAtCSAqCXNlbmQg ZHVyaW5nIHRoZSB0cmFuc2Zlci4NCj4gLQkgKglGb3IgYW4gSU4sIHRoaXMgZmllbGQgaXMgdGhl IGJ1ZmZlciBzaXplIHRoYXQgdGhlIGFwcGxpY2F0aW9uDQo+IC0JICoJaGFzIHJlc2VydmVkIGZv ciB0aGUgdHJhbnNmZXIuIFRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0bw0KPiAtCSAqCXBy b2dyYW0gdGhpcyBmaWVsZCBhcyBhbiBpbnRlZ2VyIG11bHRpcGxlIG9mIHRoZSBtYXhpbXVtIHBh Y2tldA0KPiAtCSAqCXNpemUgZm9yIElOIHRyYW5zYWN0aW9ucyAocGVyaW9kaWMgYW5kIG5vbi1w ZXJpb2RpYykuDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfaGN0c2l6eF9zIHsNCj4g LQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgZG9wbmcJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVM RCh1MzIgcGlkCQk6IDIsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHBrdGNudAkJOiAxMCwN Cj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgeGZlcnNpemUJCTogMTksDQo+IC0JCTspKSkpDQo+ IC0JfSBzOw0KPiAtfTsNCj4gLQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hmaXINCj4gLSAq DQo+IC0gKiBIb3N0IEZyYW1lIEludGVydmFsIFJlZ2lzdGVyIChIRklSKQ0KPiAtICoNCj4gLSAq IFRoaXMgcmVnaXN0ZXIgc3RvcmVzIHRoZSBmcmFtZSBpbnRlcnZhbCBpbmZvcm1hdGlvbiBmb3Ig dGhlIGN1cnJlbnQgc3BlZWQgdG8NCj4gLSAqIHdoaWNoIHRoZSBPMlAgVVNCIGNvcmUgaGFzIGVu dW1lcmF0ZWQuDQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hfaGZpciB7DQo+IC0JdTMyIHUz MjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JjeF9oZmlyX3MNCj4gLQkgKiBAZnJp bnQ6IEZyYW1lIEludGVydmFsIChGckludCkNCj4gLQkgKglUaGUgdmFsdWUgdGhhdCB0aGUgYXBw bGljYXRpb24gcHJvZ3JhbXMgdG8gdGhpcyBmaWVsZCBzcGVjaWZpZXMNCj4gLQkgKgl0aGUgaW50 ZXJ2YWwgYmV0d2VlbiB0d28gY29uc2VjdXRpdmUgU09GcyAoRlMpIG9yIG1pY3JvLQ0KPiAtCSAq CVNPRnMgKEhTKSBvciBLZWVwLUFsaXZlIHRva2VucyAoSFMpLiBUaGlzIGZpZWxkIGNvbnRhaW5z IHRoZQ0KPiAtCSAqCW51bWJlciBvZiBQSFkgY2xvY2tzIHRoYXQgY29uc3RpdHV0ZSB0aGUgcmVx dWlyZWQgZnJhbWUNCj4gLQkgKglpbnRlcnZhbC4gVGhlIGRlZmF1bHQgdmFsdWUgc2V0IGluIHRo aXMgZmllbGQgZm9yIGEgRlMgb3BlcmF0aW9uDQo+IC0JICoJd2hlbiB0aGUgUEhZIGNsb2NrIGZy ZXF1ZW5jeSBpcyA2MCBNSHouIFRoZSBhcHBsaWNhdGlvbiBjYW4NCj4gLQkgKgl3cml0ZSBhIHZh bHVlIHRvIHRoaXMgcmVnaXN0ZXIgb25seSBhZnRlciB0aGUgUG9ydCBFbmFibGUgYml0IG9mDQo+ IC0JICoJdGhlIEhvc3QgUG9ydCBDb250cm9sIGFuZCBTdGF0dXMgcmVnaXN0ZXIgKEhQUlQuUHJ0 RW5hUG9ydCkNCj4gLQkgKgloYXMgYmVlbiBzZXQuIElmIG5vIHZhbHVlIGlzIHByb2dyYW1tZWQs IHRoZSBjb3JlIGNhbGN1bGF0ZXMNCj4gLQkgKgl0aGUgdmFsdWUgYmFzZWQgb24gdGhlIFBIWSBj bG9jayBzcGVjaWZpZWQgaW4gdGhlIEZTL0xTIFBIWQ0KPiAtCSAqCUNsb2NrIFNlbGVjdCBmaWVs ZCBvZiB0aGUgSG9zdCBDb25maWd1cmF0aW9uIHJlZ2lzdGVyDQo+IC0JICoJKEhDRkcuRlNMU1Bj bGtTZWwpLiBEbyBub3QgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkDQo+IC0JICoJYWZ0 ZXIgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbi4NCj4gLQkgKgkqIDEyNSB1cyAoUEhZIGNsb2Nr IGZyZXF1ZW5jeSBmb3IgSFMpDQo+IC0JICoJKiAxIG1zIChQSFkgY2xvY2sgZnJlcXVlbmN5IGZv ciBGUy9MUykNCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgY3ZteF91c2JjeF9oZmlyX3Mgew0KPiAtCQlf X0JJVEZJRUxEX0ZJRUxEKHUzMiByZXNlcnZlZF8xNl8zMQkJOiAxNiwNCj4gLQkJX19CSVRGSUVM RF9GSUVMRCh1MzIgZnJpbnQJCQk6IDE2LA0KPiAtCQk7KSkNCj4gLQl9IHM7DQo+IC19Ow0KPiAt DQo+IC0vKioNCj4gLSAqIGN2bXhfdXNiYyNfaGZudW0NCj4gLSAqDQo+IC0gKiBIb3N0IEZyYW1l IE51bWJlci9GcmFtZSBUaW1lIFJlbWFpbmluZyBSZWdpc3RlciAoSEZOVU0pDQo+IC0gKg0KPiAt ICogVGhpcyByZWdpc3RlciBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUgbnVtYmVyLg0KPiAt ICogSXQgYWxzbyBpbmRpY2F0ZXMgdGhlIHRpbWUgcmVtYWluaW5nIChpbiB0ZXJtcyBvZiB0aGUg bnVtYmVyIG9mIFBIWSBjbG9ja3MpDQo+IC0gKiBpbiB0aGUgY3VycmVudCAobWljcm8pZnJhbWUu DQo+IC0gKi8NCj4gLXVuaW9uIGN2bXhfdXNiY3hfaGZudW0gew0KPiAtCXUzMiB1MzI7DQo+IC0J LyoqDQo+IC0JICogc3RydWN0IGN2bXhfdXNiY3hfaGZudW1fcw0KPiAtCSAqIEBmcnJlbTogRnJh bWUgVGltZSBSZW1haW5pbmcgKEZyUmVtKQ0KPiAtCSAqCUluZGljYXRlcyB0aGUgYW1vdW50IG9m IHRpbWUgcmVtYWluaW5nIGluIHRoZSBjdXJyZW50DQo+IC0JICoJbWljcm9mcmFtZSAoSFMpIG9y IGZyYW1lIChGUy9MUyksIGluIHRlcm1zIG9mIFBIWSBjbG9ja3MuDQo+IC0JICoJVGhpcyBmaWVs ZCBkZWNyZW1lbnRzIG9uIGVhY2ggUEhZIGNsb2NrLiBXaGVuIGl0IHJlYWNoZXMNCj4gLQkgKgl6 ZXJvLCB0aGlzIGZpZWxkIGlzIHJlbG9hZGVkIHdpdGggdGhlIHZhbHVlIGluIHRoZSBGcmFtZQ0K PiAtCSAqCUludGVydmFsIHJlZ2lzdGVyIGFuZCBhIG5ldyBTT0YgaXMgdHJhbnNtaXR0ZWQgb24g dGhlIFVTQi4NCj4gLQkgKiBAZnJudW06IEZyYW1lIE51bWJlciAoRnJOdW0pDQo+IC0JICoJVGhp cyBmaWVsZCBpbmNyZW1lbnRzIHdoZW4gYSBuZXcgU09GIGlzIHRyYW5zbWl0dGVkIG9uIHRoZQ0K PiAtCSAqCVVTQiwgYW5kIGlzIHJlc2V0IHRvIDAgd2hlbiBpdCByZWFjaGVzIDE2J2gzRkZGLg0K PiAtCSAqLw0KPiAtCXN0cnVjdCBjdm14X3VzYmN4X2hmbnVtX3Mgew0KPiAtCQlfX0JJVEZJRUxE X0ZJRUxEKHUzMiBmcnJlbQkJOiAxNiwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgZnJudW0J CTogMTYsDQo+IC0JCTspKQ0KPiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3Zt eF91c2JjI19ocHJ0DQo+IC0gKg0KPiAtICogSG9zdCBQb3J0IENvbnRyb2wgYW5kIFN0YXR1cyBS ZWdpc3RlciAoSFBSVCkNCj4gLSAqDQo+IC0gKiBUaGlzIHJlZ2lzdGVyIGlzIGF2YWlsYWJsZSBp biBib3RoIEhvc3QgYW5kIERldmljZSBtb2Rlcy4NCj4gLSAqIEN1cnJlbnRseSwgdGhlIE9URyBI b3N0IHN1cHBvcnRzIG9ubHkgb25lIHBvcnQuDQo+IC0gKiBBIHNpbmdsZSByZWdpc3RlciBob2xk cyBVU0IgcG9ydC1yZWxhdGVkIGluZm9ybWF0aW9uIHN1Y2ggYXMgVVNCIHJlc2V0LA0KPiAtICog ZW5hYmxlLCBzdXNwZW5kLCByZXN1bWUsIGNvbm5lY3Qgc3RhdHVzLCBhbmQgdGVzdCBtb2RlIGZv ciBlYWNoIHBvcnQuIFRoZQ0KPiAtICogUl9TU19XQyBiaXRzIGluIHRoaXMgcmVnaXN0ZXIgY2Fu IHRyaWdnZXIgYW4gaW50ZXJydXB0IHRvIHRoZSBhcHBsaWNhdGlvbg0KPiAtICogdGhyb3VnaCB0 aGUgSG9zdCBQb3J0IEludGVycnVwdCBiaXQgb2YgdGhlIENvcmUgSW50ZXJydXB0IHJlZ2lzdGVy DQo+IC0gKiAoR0lOVFNUUy5QcnRJbnQpLiBPbiBhIFBvcnQgSW50ZXJydXB0LCB0aGUgYXBwbGlj YXRpb24gbXVzdCByZWFkIHRoaXMNCj4gLSAqIHJlZ2lzdGVyIGFuZCBjbGVhciB0aGUgYml0IHRo YXQgY2F1c2VkIHRoZSBpbnRlcnJ1cHQuIEZvciB0aGUgUl9TU19XQyBiaXRzLA0KPiAtICogdGhl IGFwcGxpY2F0aW9uIG11c3Qgd3JpdGUgYSAxIHRvIHRoZSBiaXQgdG8gY2xlYXIgdGhlIGludGVy cnVwdC4NCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9ocHJ0IHsNCj4gLQl1MzIgdTMyOw0K PiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4X2hwcnRfcw0KPiAtCSAqIEBwcnRzcGQ6 IFBvcnQgU3BlZWQgKFBydFNwZCkNCj4gLQkgKglJbmRpY2F0ZXMgdGhlIHNwZWVkIG9mIHRoZSBk ZXZpY2UgYXR0YWNoZWQgdG8gdGhpcyBwb3J0Lg0KPiAtCSAqCSogMidiMDA6IEhpZ2ggc3BlZWQN Cj4gLQkgKgkqIDInYjAxOiBGdWxsIHNwZWVkDQo+IC0JICoJKiAyJ2IxMDogTG93IHNwZWVkDQo+ IC0JICoJKiAyJ2IxMTogUmVzZXJ2ZWQNCj4gLQkgKiBAcHJ0dHN0Y3RsOiBQb3J0IFRlc3QgQ29u dHJvbCAoUHJ0VHN0Q3RsKQ0KPiAtCSAqCVRoZSBhcHBsaWNhdGlvbiB3cml0ZXMgYSBub256ZXJv IHZhbHVlIHRvIHRoaXMgZmllbGQgdG8gcHV0DQo+IC0JICoJdGhlIHBvcnQgaW50byBhIFRlc3Qg bW9kZSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHBhdHRlcm4gaXMNCj4gLQkgKglzaWduYWxlZCBv biB0aGUgcG9ydC4NCj4gLQkgKgkqIDQnYjAwMDA6IFRlc3QgbW9kZSBkaXNhYmxlZA0KPiAtCSAq CSogNCdiMDAwMTogVGVzdF9KIG1vZGUNCj4gLQkgKgkqIDQnYjAwMTA6IFRlc3RfSyBtb2RlDQo+ IC0JICoJKiA0J2IwMDExOiBUZXN0X1NFMF9OQUsgbW9kZQ0KPiAtCSAqCSogNCdiMDEwMDogVGVz dF9QYWNrZXQgbW9kZQ0KPiAtCSAqCSogNCdiMDEwMTogVGVzdF9Gb3JjZV9FbmFibGUNCj4gLQkg KgkqIE90aGVyczogUmVzZXJ2ZWQNCj4gLQkgKglQcnRTcGQgbXVzdCBiZSB6ZXJvIChpLmUuIHRo ZSBpbnRlcmZhY2UgbXVzdCBiZSBpbiBoaWdoLXNwZWVkDQo+IC0JICoJbW9kZSkgdG8gdXNlIHRo ZSBQcnRUc3RDdGwgdGVzdCBtb2Rlcy4NCj4gLQkgKiBAcHJ0cHdyOiBQb3J0IFBvd2VyIChQcnRQ d3IpDQo+IC0JICoJVGhlIGFwcGxpY2F0aW9uIHVzZXMgdGhpcyBmaWVsZCB0byBjb250cm9sIHBv d2VyIHRvIHRoaXMgcG9ydCwNCj4gLQkgKglhbmQgdGhlIGNvcmUgY2xlYXJzIHRoaXMgYml0IG9u IGFuIG92ZXJjdXJyZW50IGNvbmRpdGlvbi4NCj4gLQkgKgkqIDEnYjA6IFBvd2VyIG9mZg0KPiAt CSAqCSogMSdiMTogUG93ZXIgb24NCj4gLQkgKiBAcHJ0bG5zdHM6IFBvcnQgTGluZSBTdGF0dXMg KFBydExuU3RzKQ0KPiAtCSAqCUluZGljYXRlcyB0aGUgY3VycmVudCBsb2dpYyBsZXZlbCBVU0Ig ZGF0YSBsaW5lcw0KPiAtCSAqCSogQml0IFsxMF06IExvZ2ljIGxldmVsIG9mIEQtDQo+IC0JICoJ KiBCaXQgWzExXTogTG9naWMgbGV2ZWwgb2YgRCsNCj4gLQkgKiBAcHJ0cnN0OiBQb3J0IFJlc2V0 IChQcnRSc3QpDQo+IC0JICoJV2hlbiB0aGUgYXBwbGljYXRpb24gc2V0cyB0aGlzIGJpdCwgYSBy ZXNldCBzZXF1ZW5jZSBpcw0KPiAtCSAqCXN0YXJ0ZWQgb24gdGhpcyBwb3J0LiBUaGUgYXBwbGlj YXRpb24gbXVzdCB0aW1lIHRoZSByZXNldA0KPiAtCSAqCXBlcmlvZCBhbmQgY2xlYXIgdGhpcyBi aXQgYWZ0ZXIgdGhlIHJlc2V0IHNlcXVlbmNlIGlzDQo+IC0JICoJY29tcGxldGUuDQo+IC0JICoJ KiAxJ2IwOiBQb3J0IG5vdCBpbiByZXNldA0KPiAtCSAqCSogMSdiMTogUG9ydCBpbiByZXNldA0K PiAtCSAqCVRoZSBhcHBsaWNhdGlvbiBtdXN0IGxlYXZlIHRoaXMgYml0IHNldCBmb3IgYXQgbGVh c3QgYQ0KPiAtCSAqCW1pbmltdW0gZHVyYXRpb24gbWVudGlvbmVkIGJlbG93IHRvIHN0YXJ0IGEg cmVzZXQgb24gdGhlDQo+IC0JICoJcG9ydC4gVGhlIGFwcGxpY2F0aW9uIGNhbiBsZWF2ZSBpdCBz ZXQgZm9yIGFub3RoZXIgMTAgbXMgaW4NCj4gLQkgKglhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQg bWluaW11bSBkdXJhdGlvbiwgYmVmb3JlIGNsZWFyaW5nDQo+IC0JICoJdGhlIGJpdCwgZXZlbiB0 aG91Z2ggdGhlcmUgaXMgbm8gbWF4aW11bSBsaW1pdCBzZXQgYnkgdGhlDQo+IC0JICoJVVNCIHN0 YW5kYXJkLg0KPiAtCSAqCSogSGlnaCBzcGVlZDogNTAgbXMNCj4gLQkgKgkqIEZ1bGwgc3BlZWQv TG93IHNwZWVkOiAxMCBtcw0KPiAtCSAqIEBwcnRzdXNwOiBQb3J0IFN1c3BlbmQgKFBydFN1c3Ap DQo+IC0JICoJVGhlIGFwcGxpY2F0aW9uIHNldHMgdGhpcyBiaXQgdG8gcHV0IHRoaXMgcG9ydCBp biBTdXNwZW5kDQo+IC0JICoJbW9kZS4gVGhlIGNvcmUgb25seSBzdG9wcyBzZW5kaW5nIFNPRnMg d2hlbiB0aGlzIGlzIHNldC4NCj4gLQkgKglUbyBzdG9wIHRoZSBQSFkgY2xvY2ssIHRoZSBhcHBs aWNhdGlvbiBtdXN0IHNldCB0aGUgUG9ydA0KPiAtCSAqCUNsb2NrIFN0b3AgYml0LCB3aGljaCB3 aWxsIGFzc2VydCB0aGUgc3VzcGVuZCBpbnB1dCBwaW4gb2YNCj4gLQkgKgl0aGUgUEhZLg0KPiAt CSAqCVRoZSByZWFkIHZhbHVlIG9mIHRoaXMgYml0IHJlZmxlY3RzIHRoZSBjdXJyZW50IHN1c3Bl bmQNCj4gLQkgKglzdGF0dXMgb2YgdGhlIHBvcnQuIFRoaXMgYml0IGlzIGNsZWFyZWQgYnkgdGhl IGNvcmUgYWZ0ZXIgYQ0KPiAtCSAqCXJlbW90ZSB3YWtldXAgc2lnbmFsIGlzIGRldGVjdGVkIG9y IHRoZSBhcHBsaWNhdGlvbiBzZXRzDQo+IC0JICoJdGhlIFBvcnQgUmVzZXQgYml0IG9yIFBvcnQg UmVzdW1lIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIG9yIHRoZQ0KPiAtCSAqCVJlc3VtZS9SZW1vdGUg V2FrZXVwIERldGVjdGVkIEludGVycnVwdCBiaXQgb3INCj4gLQkgKglEaXNjb25uZWN0IERldGVj dGVkIEludGVycnVwdCBiaXQgaW4gdGhlIENvcmUgSW50ZXJydXB0DQo+IC0JICoJcmVnaXN0ZXIg KEdJTlRTVFMuV2tVcEludCBvciBHSU5UU1RTLkRpc2Nvbm5JbnQsDQo+IC0JICoJcmVzcGVjdGl2 ZWx5KS4NCj4gLQkgKgkqIDEnYjA6IFBvcnQgbm90IGluIFN1c3BlbmQgbW9kZQ0KPiAtCSAqCSog MSdiMTogUG9ydCBpbiBTdXNwZW5kIG1vZGUNCj4gLQkgKiBAcHJ0cmVzOiBQb3J0IFJlc3VtZSAo UHJ0UmVzKQ0KPiAtCSAqCVRoZSBhcHBsaWNhdGlvbiBzZXRzIHRoaXMgYml0IHRvIGRyaXZlIHJl c3VtZSBzaWduYWxpbmcgb24NCj4gLQkgKgl0aGUgcG9ydC4gVGhlIGNvcmUgY29udGludWVzIHRv IGRyaXZlIHRoZSByZXN1bWUgc2lnbmFsDQo+IC0JICoJdW50aWwgdGhlIGFwcGxpY2F0aW9uIGNs ZWFycyB0aGlzIGJpdC4NCj4gLQkgKglJZiB0aGUgY29yZSBkZXRlY3RzIGEgVVNCIHJlbW90ZSB3 YWtldXAgc2VxdWVuY2UsIGFzDQo+IC0JICoJaW5kaWNhdGVkIGJ5IHRoZSBQb3J0IFJlc3VtZS9S ZW1vdGUgV2FrZXVwIERldGVjdGVkDQo+IC0JICoJSW50ZXJydXB0IGJpdCBvZiB0aGUgQ29yZSBJ bnRlcnJ1cHQgcmVnaXN0ZXINCj4gLQkgKgkoR0lOVFNUUy5Xa1VwSW50KSwgdGhlIGNvcmUgc3Rh cnRzIGRyaXZpbmcgcmVzdW1lDQo+IC0JICoJc2lnbmFsaW5nIHdpdGhvdXQgYXBwbGljYXRpb24g aW50ZXJ2ZW50aW9uIGFuZCBjbGVhcnMgdGhpcyBiaXQNCj4gLQkgKgl3aGVuIGl0IGRldGVjdHMg YSBkaXNjb25uZWN0IGNvbmRpdGlvbi4gVGhlIHJlYWQgdmFsdWUgb2YNCj4gLQkgKgl0aGlzIGJp dCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY29yZSBpcyBjdXJyZW50bHkgZHJpdmluZw0KPiAtCSAq CXJlc3VtZSBzaWduYWxpbmcuDQo+IC0JICoJKiAxJ2IwOiBObyByZXN1bWUgZHJpdmVuDQo+IC0J ICoJKiAxJ2IxOiBSZXN1bWUgZHJpdmVuDQo+IC0JICogQHBydG92cmN1cnJjaG5nOiBQb3J0IE92 ZXJjdXJyZW50IENoYW5nZSAoUHJ0T3ZyQ3VyckNobmcpDQo+IC0JICoJVGhlIGNvcmUgc2V0cyB0 aGlzIGJpdCB3aGVuIHRoZSBzdGF0dXMgb2YgdGhlIFBvcnQNCj4gLQkgKglPdmVyY3VycmVudCBB Y3RpdmUgYml0IChiaXQgNCkgaW4gdGhpcyByZWdpc3RlciBjaGFuZ2VzLg0KPiAtCSAqIEBwcnRv dnJjdXJyYWN0OiBQb3J0IE92ZXJjdXJyZW50IEFjdGl2ZSAoUHJ0T3ZyQ3VyckFjdCkNCj4gLQkg KglJbmRpY2F0ZXMgdGhlIG92ZXJjdXJyZW50IGNvbmRpdGlvbiBvZiB0aGUgcG9ydC4NCj4gLQkg KgkqIDEnYjA6IE5vIG92ZXJjdXJyZW50IGNvbmRpdGlvbg0KPiAtCSAqCSogMSdiMTogT3ZlcmN1 cnJlbnQgY29uZGl0aW9uDQo+IC0JICogQHBydGVuY2huZzogUG9ydCBFbmFibGUvRGlzYWJsZSBD aGFuZ2UgKFBydEVuQ2huZykNCj4gLQkgKglUaGUgY29yZSBzZXRzIHRoaXMgYml0IHdoZW4gdGhl IHN0YXR1cyBvZiB0aGUgUG9ydCBFbmFibGUgYml0DQo+IC0JICoJWzJdIG9mIHRoaXMgcmVnaXN0 ZXIgY2hhbmdlcy4NCj4gLQkgKiBAcHJ0ZW5hOiBQb3J0IEVuYWJsZSAoUHJ0RW5hKQ0KPiAtCSAq CUEgcG9ydCBpcyBlbmFibGVkIG9ubHkgYnkgdGhlIGNvcmUgYWZ0ZXIgYSByZXNldCBzZXF1ZW5j ZSwNCj4gLQkgKglhbmQgaXMgZGlzYWJsZWQgYnkgYW4gb3ZlcmN1cnJlbnQgY29uZGl0aW9uLCBh IGRpc2Nvbm5lY3QNCj4gLQkgKgljb25kaXRpb24sIG9yIGJ5IHRoZSBhcHBsaWNhdGlvbiBjbGVh cmluZyB0aGlzIGJpdC4gVGhlDQo+IC0JICoJYXBwbGljYXRpb24gY2Fubm90IHNldCB0aGlzIGJp dCBieSBhIHJlZ2lzdGVyIHdyaXRlLiBJdCBjYW4gb25seQ0KPiAtCSAqCWNsZWFyIGl0IHRvIGRp c2FibGUgdGhlIHBvcnQuIFRoaXMgYml0IGRvZXMgbm90IHRyaWdnZXIgYW55DQo+IC0JICoJaW50 ZXJydXB0IHRvIHRoZSBhcHBsaWNhdGlvbi4NCj4gLQkgKgkqIDEnYjA6IFBvcnQgZGlzYWJsZWQN Cj4gLQkgKgkqIDEnYjE6IFBvcnQgZW5hYmxlZA0KPiAtCSAqIEBwcnRjb25uZGV0OiBQb3J0IENv bm5lY3QgRGV0ZWN0ZWQgKFBydENvbm5EZXQpDQo+IC0JICoJVGhlIGNvcmUgc2V0cyB0aGlzIGJp dCB3aGVuIGEgZGV2aWNlIGNvbm5lY3Rpb24gaXMgZGV0ZWN0ZWQNCj4gLQkgKgl0byB0cmlnZ2Vy IGFuIGludGVycnVwdCB0byB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhlIEhvc3QgUG9ydA0KPiAt CSAqCUludGVycnVwdCBiaXQgb2YgdGhlIENvcmUgSW50ZXJydXB0IHJlZ2lzdGVyIChHSU5UU1RT LlBydEludCkuDQo+IC0JICoJVGhlIGFwcGxpY2F0aW9uIG11c3Qgd3JpdGUgYSAxIHRvIHRoaXMg Yml0IHRvIGNsZWFyIHRoZQ0KPiAtCSAqCWludGVycnVwdC4NCj4gLQkgKiBAcHJ0Y29ubnN0czog UG9ydCBDb25uZWN0IFN0YXR1cyAoUHJ0Q29ublN0cykNCj4gLQkgKgkqIDA6IE5vIGRldmljZSBp cyBhdHRhY2hlZCB0byB0aGUgcG9ydC4NCj4gLQkgKgkqIDE6IEEgZGV2aWNlIGlzIGF0dGFjaGVk IHRvIHRoZSBwb3J0Lg0KPiAtCSAqLw0KPiAtCXN0cnVjdCBjdm14X3VzYmN4X2hwcnRfcyB7DQo+ IC0JCV9fQklURklFTERfRklFTEQodTMyIHJlc2VydmVkXzE5XzMxCTogMTMsDQo+IC0JCV9fQklU RklFTERfRklFTEQodTMyIHBydHNwZAkJOiAyLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBw cnR0c3RjdGwJCTogNCwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcHJ0cHdyCQk6IDEsDQo+ IC0JCV9fQklURklFTERfRklFTEQodTMyIHBydGxuc3RzCQk6IDIsDQo+IC0JCV9fQklURklFTERf RklFTEQodTMyIHJlc2VydmVkXzlfOQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHBy dHJzdAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwcnRzdXNwCQk6IDEsDQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIHBydHJlcwkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxE KHUzMiBwcnRvdnJjdXJyY2huZwk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTMyIHBydG92 cmN1cnJhY3QJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwcnRlbmNobmcJCTogMSwN Cj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcHJ0ZW5hCQk6IDEsDQo+IC0JCV9fQklURklFTERf RklFTEQodTMyIHBydGNvbm5kZXQJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1MzIgcHJ0 Y29ubnN0cwkJOiAxLA0KPiAtCQk7KSkpKSkpKSkpKSkpKSkpDQo+IC0JfSBzOw0KPiAtfTsNCj4g LQ0KPiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hwdHhmc2l6DQo+IC0gKg0KPiAtICogSG9zdCBQ ZXJpb2RpYyBUcmFuc21pdCBGSUZPIFNpemUgUmVnaXN0ZXIgKEhQVFhGU0laKQ0KPiAtICoNCj4g LSAqIFRoaXMgcmVnaXN0ZXIgaG9sZHMgdGhlIHNpemUgYW5kIHRoZSBtZW1vcnkgc3RhcnQgYWRk cmVzcyBvZiB0aGUgUGVyaW9kaWMNCj4gLSAqIFR4RklGTywgYXMgc2hvd24gaW4gRmlndXJlcyAz MTAgYW5kIDMxMS4NCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9ocHR4ZnNpeiB7DQo+IC0J dTMyIHUzMjsNCj4gLQkvKioNCj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JjeF9ocHR4ZnNpel9zDQo+ IC0JICogQHB0eGZzaXplOiBIb3N0IFBlcmlvZGljIFR4RklGTyBEZXB0aCAoUFR4RlNpemUpDQo+ IC0JICoJVGhpcyB2YWx1ZSBpcyBpbiB0ZXJtcyBvZiAzMi1iaXQgd29yZHMuDQo+IC0JICoJKiBN aW5pbXVtIHZhbHVlIGlzIDE2DQo+IC0JICoJKiBNYXhpbXVtIHZhbHVlIGlzIDMyNzY4DQo+IC0J ICogQHB0eGZzdGFkZHI6IEhvc3QgUGVyaW9kaWMgVHhGSUZPIFN0YXJ0IEFkZHJlc3MgKFBUeEZT dEFkZHIpDQo+IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfaHB0eGZzaXpfcyB7DQo+IC0J CV9fQklURklFTERfRklFTEQodTMyIHB0eGZzaXplCTogMTYsDQo+IC0JCV9fQklURklFTERfRklF TEQodTMyIHB0eGZzdGFkZHIJOiAxNiwNCj4gLQkJOykpDQo+IC0JfSBzOw0KPiAtfTsNCj4gLQ0K PiAtLyoqDQo+IC0gKiBjdm14X3VzYmMjX2hwdHhzdHMNCj4gLSAqDQo+IC0gKiBIb3N0IFBlcmlv ZGljIFRyYW5zbWl0IEZJRk8vUXVldWUgU3RhdHVzIFJlZ2lzdGVyIChIUFRYU1RTKQ0KPiAtICoN Cj4gLSAqIFRoaXMgcmVhZC1vbmx5IHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBmcmVlIHNwYWNlIGlu Zm9ybWF0aW9uIGZvciB0aGUgUGVyaW9kaWMNCj4gLSAqIFR4RklGTyBhbmQgdGhlIFBlcmlvZGlj IFRyYW5zbWl0IFJlcXVlc3QgUXVldWUNCj4gLSAqLw0KPiAtdW5pb24gY3ZteF91c2JjeF9ocHR4 c3RzIHsNCj4gLQl1MzIgdTMyOw0KPiAtCS8qKg0KPiAtCSAqIHN0cnVjdCBjdm14X3VzYmN4X2hw dHhzdHNfcw0KPiAtCSAqIEBwdHhxdG9wOiBUb3Agb2YgdGhlIFBlcmlvZGljIFRyYW5zbWl0IFJl cXVlc3QgUXVldWUgKFBUeFFUb3ApDQo+IC0JICoJVGhpcyBpbmRpY2F0ZXMgdGhlIGVudHJ5IGlu IHRoZSBQZXJpb2RpYyBUeCBSZXF1ZXN0IFF1ZXVlIHRoYXQNCj4gLQkgKglpcyBjdXJyZW50bHkg YmVpbmcgcHJvY2Vzc2VzIGJ5IHRoZSBNQUMuDQo+IC0JICoJVGhpcyByZWdpc3RlciBpcyB1c2Vk IGZvciBkZWJ1Z2dpbmcuDQo+IC0JICoJKiBCaXQgWzMxXTogT2RkL0V2ZW4gKG1pY3JvKWZyYW1l DQo+IC0JICoJLSAxJ2IwOiBzZW5kIGluIGV2ZW4gKG1pY3JvKWZyYW1lDQo+IC0JICoJLSAxJ2Ix OiBzZW5kIGluIG9kZCAobWljcm8pZnJhbWUNCj4gLQkgKgkqIEJpdHMgWzMwOjI3XTogQ2hhbm5l bC9lbmRwb2ludCBudW1iZXINCj4gLQkgKgkqIEJpdHMgWzI2OjI1XTogVHlwZQ0KPiAtCSAqCS0g MidiMDA6IElOL09VVA0KPiAtCSAqCS0gMidiMDE6IFplcm8tbGVuZ3RoIHBhY2tldA0KPiAtCSAq CS0gMidiMTA6IENTUExJVA0KPiAtCSAqCS0gMidiMTE6IERpc2FibGUgY2hhbm5lbCBjb21tYW5k DQo+IC0JICoJKiBCaXQgWzI0XTogVGVybWluYXRlIChsYXN0IGVudHJ5IGZvciB0aGUgc2VsZWN0 ZWQNCj4gLQkgKgljaGFubmVsL2VuZHBvaW50KQ0KPiAtCSAqIEBwdHhxc3BjYXZhaWw6IFBlcmlv ZGljIFRyYW5zbWl0IFJlcXVlc3QgUXVldWUgU3BhY2UgQXZhaWxhYmxlDQo+IC0JICoJKFBUeFFT cGNBdmFpbCkNCj4gLQkgKglJbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBmcmVlIGxvY2F0aW9ucyBh dmFpbGFibGUgdG8gYmUgd3JpdHRlbg0KPiAtCSAqCWluIHRoZSBQZXJpb2RpYyBUcmFuc21pdCBS ZXF1ZXN0IFF1ZXVlLiBUaGlzIHF1ZXVlIGhvbGRzIGJvdGgNCj4gLQkgKglJTiBhbmQgT1VUIHJl cXVlc3RzLg0KPiAtCSAqCSogOCdoMDogUGVyaW9kaWMgVHJhbnNtaXQgUmVxdWVzdCBRdWV1ZSBp cyBmdWxsDQo+IC0JICoJKiA4J2gxOiAxIGxvY2F0aW9uIGF2YWlsYWJsZQ0KPiAtCSAqCSogOCdo MjogMiBsb2NhdGlvbnMgYXZhaWxhYmxlDQo+IC0JICoJKiBuOiBuIGxvY2F0aW9ucyBhdmFpbGFi bGUgKDAuLjgpDQo+IC0JICoJKiBPdGhlcnM6IFJlc2VydmVkDQo+IC0JICogQHB0eGZzcGNhdmFp bDogUGVyaW9kaWMgVHJhbnNtaXQgRGF0YSBGSUZPIFNwYWNlIEF2YWlsYWJsZQ0KPiAtCSAqCQkg IChQVHhGU3BjQXZhaWwpDQo+IC0JICoJSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZnJlZSBsb2Nh dGlvbnMgYXZhaWxhYmxlIHRvIGJlIHdyaXR0ZW4NCj4gLQkgKgl0byBpbiB0aGUgUGVyaW9kaWMg VHhGSUZPLg0KPiAtCSAqCVZhbHVlcyBhcmUgaW4gdGVybXMgb2YgMzItYml0IHdvcmRzDQo+IC0J ICoJKiAxNidoMDogUGVyaW9kaWMgVHhGSUZPIGlzIGZ1bGwNCj4gLQkgKgkqIDE2J2gxOiAxIHdv cmQgYXZhaWxhYmxlDQo+IC0JICoJKiAxNidoMjogMiB3b3JkcyBhdmFpbGFibGUNCj4gLQkgKgkq IDE2J2huOiBuIHdvcmRzIGF2YWlsYWJsZSAod2hlcmUgMC4uMzI3NjgpDQo+IC0JICoJKiAxNido ODAwMDogMzI3Njggd29yZHMgYXZhaWxhYmxlDQo+IC0JICoJKiBPdGhlcnM6IFJlc2VydmVkDQo+ IC0JICovDQo+IC0Jc3RydWN0IGN2bXhfdXNiY3hfaHB0eHN0c19zIHsNCj4gLQkJX19CSVRGSUVM RF9GSUVMRCh1MzIgcHR4cXRvcAkJOiA4LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwdHhx c3BjYXZhaWwJOiA4LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHUzMiBwdHhmc3BjYXZhaWwJOiAx NiwNCj4gLQkJOykpKQ0KPiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3ZteF91 c2JuI19jbGtfY3RsDQo+IC0gKg0KPiAtICogVVNCTl9DTEtfQ1RMID0gVVNCTidzIENsb2NrIENv bnRyb2wNCj4gLSAqDQo+IC0gKiBUaGlzIHJlZ2lzdGVyIGlzIHVzZWQgdG8gY29udHJvbCB0aGUg ZnJlcXVlbmN5IG9mIHRoZSBoY2xrIGFuZCB0aGUNCj4gLSAqIGhyZXNldCBhbmQgcGh5X3JzdCBz aWduYWxzLg0KPiAtICovDQo+IC11bmlvbiBjdm14X3VzYm54X2Nsa19jdGwgew0KPiAtCXU2NCB1 NjQ7DQo+IC0JLyoqDQo+IC0JICogc3RydWN0IGN2bXhfdXNibnhfY2xrX2N0bF9zDQo+IC0JICog QGRpdmlkZTI6IFRoZSAnaGNsaycgdXNlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBpcyBkZXJpdmVk DQo+IC0JICoJZnJvbSB0aGUgZWNsay4NCj4gLQkgKglBbHNvIHNlZSB0aGUgZmllbGQgRElWSURF LiBESVZJREUyPDE+IG11c3QgY3VycmVudGx5DQo+IC0JICoJYmUgemVybyBiZWNhdXNlIGl0IGlz IG5vdCBpbXBsZW1lbnRlZCwgc28gdGhlIG1heGltdW0NCj4gLQkgKglyYXRpbyBvZiBlY2xrL2hj bGsgaXMgY3VycmVudGx5IDE2Lg0KPiAtCSAqCVRoZSBhY3R1YWwgZGl2aWRlIG51bWJlciBmb3Ig aGNsayBpczoNCj4gLQkgKgkoRElWSURFMiArIDEpICogKERJVklERSArIDEpDQo+IC0JICogQGhj bGtfcnN0OiBXaGVuIHRoaXMgZmllbGQgaXMgJzAnIHRoZSBIQ0xLLURJVklERVIgdXNlZCB0bw0K PiAtCSAqCWdlbmVyYXRlIHRoZSBoY2xrIGluIHRoZSBVU0IgU3Vic3lzdGVtIGlzIGhlbGQNCj4g LQkgKglpbiByZXNldC4gVGhpcyBiaXQgbXVzdCBiZSBzZXQgdG8gJzAnIGJlZm9yZQ0KPiAtCSAq CWNoYW5naW5nIHRoZSB2YWx1ZSBvcyBESVZJREUgaW4gdGhpcyByZWdpc3Rlci4NCj4gLQkgKglU aGUgcmVzZXQgdG8gdGhlIEhDTEtfRElWSURFUmlzIGFsc28gYXNzZXJ0ZWQNCj4gLQkgKgl3aGVu IGNvcmUgcmVzZXQgaXMgYXNzZXJ0ZWQuDQo+IC0JICogQHBfeF9vbjogRm9yY2UgVVNCLVBIWSBv biBkdXJpbmcgc3VzcGVuZC4NCj4gLQkgKgknMScgVVNCLVBIWSBYTyBibG9jayBpcyBwb3dlcmVk LWRvd24gZHVyaW5nDQo+IC0JICoJc3VzcGVuZC4NCj4gLQkgKgknMCcgVVNCLVBIWSBYTyBibG9j ayBpcyBwb3dlcmVkLXVwIGR1cmluZw0KPiAtCSAqCXN1c3BlbmQuDQo+IC0JICoJVGhlIHZhbHVl IG9mIHRoaXMgZmllbGQgbXVzdCBiZSBzZXQgd2hpbGUgUE9SIGlzDQo+IC0JICoJYWN0aXZlLg0K PiAtCSAqIEBwX3J0eXBlOiBQSFkgcmVmZXJlbmNlIGNsb2NrIHR5cGUNCj4gLQkgKglPbiBDTjUw WFgvQ041MlhYL0NONTZYWCB0aGUgdmFsdWVzIGFyZToNCj4gLQkgKgkJJzAnIFRoZSBVU0ItUEhZ IHVzZXMgYSAxMk1IeiBjcnlzdGFsIGFzIGEgY2xvY2sgc291cmNlDQo+IC0JICoJCSAgICBhdCB0 aGUgVVNCX1hPIGFuZCBVU0JfWEkgcGlucy4NCj4gLQkgKgkJJzEnIFJlc2VydmVkLg0KPiAtCSAq CQknMicgVGhlIFVTQl9QSFkgdXNlcyAxMi8yNC80OE1IeiAyLjVWIGJvYXJkIGNsb2NrIGF0IHRo ZQ0KPiAtCSAqCQkgICAgVVNCX1hPIHBpbi4gVVNCX1hJIHNob3VsZCBiZSB0aWVkIHRvIGdyb3Vu ZCBpbiB0aGlzDQo+IC0JICoJCSAgICBjYXNlLg0KPiAtCSAqCQknMycgUmVzZXJ2ZWQuDQo+IC0J ICoJT24gQ04zeHh4IGJpdHMgMTQgYW5kIDE1IGFyZSBwX3hlbmJuIGFuZCBwX3JjbGsgYW5kIHZh bHVlcyBhcmU6DQo+IC0JICoJCScwJyBSZXNlcnZlZC4NCj4gLQkgKgkJJzEnIFJlc2VydmVkLg0K PiAtCSAqCQknMicgVGhlIFBIWSBQTEwgdXNlcyB0aGUgWE8gYmxvY2sgb3V0cHV0IGFzIGEgcmVm ZXJlbmNlLg0KPiAtCSAqCQkgICAgVGhlIFhPIGJsb2NrIHVzZXMgYW4gZXh0ZXJuYWwgY2xvY2sg c3VwcGxpZWQgb24gdGhlDQo+IC0JICoJCSAgICBYTyBwaW4uIFVTQl9YSSBzaG91bGQgYmUgdGll ZCB0byBncm91bmQgZm9yIHRoaXMNCj4gLQkgKgkJICAgIHVzYWdlLg0KPiAtCSAqCQknMycgVGhl IFhPIGJsb2NrIHVzZXMgdGhlIGNsb2NrIGZyb20gYSBjcnlzdGFsLg0KPiAtCSAqIEBwX2NvbV9v bjogJzAnIEZvcmNlIFVTQi1QSFkgWE8gQmlhcywgQmFuZGdhcCBhbmQgUExMIHRvDQo+IC0JICoJ cmVtYWluIHBvd2VyZWQgaW4gU3VzcGVuZCBNb2RlLg0KPiAtCSAqCScxJyBUaGUgVVNCLVBIWSBY TyBCaWFzLCBCYW5kZ2FwIGFuZCBQTEwgYXJlDQo+IC0JICoJcG93ZXJlZCBkb3duIGluIHN1c3Bl bmQgbW9kZS4NCj4gLQkgKglUaGUgdmFsdWUgb2YgdGhpcyBmaWVsZCBtdXN0IGJlIHNldCB3aGls ZSBQT1IgaXMNCj4gLQkgKglhY3RpdmUuDQo+IC0JICogQHBfY19zZWw6IFBoeSBjbG9jayBzcGVl ZCBzZWxlY3QuDQo+IC0JICoJU2VsZWN0cyB0aGUgcmVmZXJlbmNlIGNsb2NrIC8gY3J5c3RhbCBm cmVxdWVuY3kuDQo+IC0JICoJJzExJzogUmVzZXJ2ZWQNCj4gLQkgKgknMTAnOiA0OCBNSHogKHJl c2VydmVkIHdoZW4gYSBjcnlzdGFsIGlzIHVzZWQpDQo+IC0JICoJJzAxJzogMjQgTUh6IChyZXNl cnZlZCB3aGVuIGEgY3J5c3RhbCBpcyB1c2VkKQ0KPiAtCSAqCScwMCc6IDEyIE1Ieg0KPiAtCSAq CVRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIG11c3QgYmUgc2V0IHdoaWxlIFBPUiBpcw0KPiAtCSAq CWFjdGl2ZS4NCj4gLQkgKglOT1RFOiBpZiBhIGNyeXN0YWwgaXMgdXNlZCBhcyBhIHJlZmVyZW5j ZSBjbG9jaywNCj4gLQkgKgl0aGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIDEyIE1Iei4NCj4gLQkg KiBAY2Rpdl9ieXA6IFVzZWQgdG8gZW5hYmxlIHRoZSBieXBhc3MgaW5wdXQgdG8gdGhlIFVTQl9D TEtfRElWLg0KPiAtCSAqIEBzZF9tb2RlOiBTY2FsZWRvd24gbW9kZSBmb3IgdGhlIFVTQkMuIENv bnRyb2wgdGltaW5nIGV2ZW50cw0KPiAtCSAqCWluIHRoZSBVU0JDLCBmb3Igbm9ybWFsIG9wZXJh dGlvbiB0aGlzIG11c3QgYmUgJzAnLg0KPiAtCSAqIEBzX2Jpc3Q6IFN0YXJ0cyBiaXN0IG9uIHRo ZSBoY2xrIG1lbW9yaWVzLCBkdXJpbmcgdGhlICcwJw0KPiAtCSAqCXRvICcxJyB0cmFuc2l0aW9u Lg0KPiAtCSAqIEBwb3I6IFBvd2VyIE9uIFJlc2V0IGZvciB0aGUgUEhZLg0KPiAtCSAqCVJlc2V0 cyBhbGwgdGhlIFBIWVMgcmVnaXN0ZXJzIGFuZCBzdGF0ZSBtYWNoaW5lcy4NCj4gLQkgKiBAZW5h YmxlOiBXaGVuICcxJyBhbGxvd3MgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGhjbGsuIFdoZW4NCj4g LQkgKgknMCcgdGhlIGhjbGsgd2lsbCBub3QgYmUgZ2VuZXJhdGVkLiBTRUUgRElWSURFDQo+IC0J ICoJZmllbGQgb2YgdGhpcyByZWdpc3Rlci4NCj4gLQkgKiBAcHJzdDogV2hlbiB0aGlzIGZpZWxk IGlzICcwJyB0aGUgcmVzZXQgYXNzb2NpYXRlZCB3aXRoDQo+IC0JICoJdGhlIHBoeV9jbGsgZnVu Y3Rpb25hbGl0eSBpbiB0aGUgVVNCIFN1YnN5c3RlbSBpcw0KPiAtCSAqCWhlbHAgaW4gcmVzZXQu IFRoaXMgYml0IHNob3VsZCBub3QgYmUgc2V0IHRvICcxJw0KPiAtCSAqCXVudGlsIHRoZSB0aW1l IGl0IHRha2VzIDYgY2xvY2tzIChoY2xrIG9yIHBoeV9jbGssDQo+IC0JICoJd2hpY2hldmVyIGlz IHNsb3dlcikgaGFzIHBhc3NlZC4gVW5kZXIgbm9ybWFsDQo+IC0JICoJb3BlcmF0aW9uIG9uY2Ug dGhpcyBiaXQgaXMgc2V0IHRvICcxJyBpdCBzaG91bGQgbm90DQo+IC0JICoJYmUgc2V0IHRvICcw Jy4NCj4gLQkgKiBAaHJzdDogV2hlbiB0aGlzIGZpZWxkIGlzICcwJyB0aGUgcmVzZXQgYXNzb2Np YXRlZCB3aXRoDQo+IC0JICoJdGhlIGhjbGsgZnVuY3Rpb2FubGl0eSBpbiB0aGUgVVNCIFN1YnN5 c3RlbSBpcw0KPiAtCSAqCWhlbGQgaW4gcmVzZXQuVGhpcyBiaXQgc2hvdWxkIG5vdCBiZSBzZXQg dG8gJzEnDQo+IC0JICoJdW50aWwgMTJtcyBhZnRlciBwaHlfY2xrIGlzIHN0YWJsZS4gVW5kZXIg bm9ybWFsDQo+IC0JICoJb3BlcmF0aW9uLCBvbmNlIHRoaXMgYml0IGlzIHNldCB0byAnMScgaXQg c2hvdWxkDQo+IC0JICoJbm90IGJlIHNldCB0byAnMCcuDQo+IC0JICogQGRpdmlkZTogVGhlIGZy ZXF1ZW5jeSBvZiAnaGNsaycgdXNlZCBieSB0aGUgVVNCIHN1YnN5c3RlbQ0KPiAtCSAqCWlzIHRo ZSBlY2xrIGZyZXF1ZW5jeSBkaXZpZGVkIGJ5IHRoZSB2YWx1ZSBvZg0KPiAtCSAqCShESVZJREUy ICsgMSkgKiAoRElWSURFICsgMSksIGFsc28gc2VlIHRoZSBmaWVsZA0KPiAtCSAqCURJVklERTIg b2YgdGhpcyByZWdpc3Rlci4NCj4gLQkgKglUaGUgaGNsayBmcmVxdWVuY3kgc2hvdWxkIGJlIGxl c3MgdGhhbiAxMjVNaHouDQo+IC0JICoJQWZ0ZXIgd3JpdGluZyBhIHZhbHVlIHRvIHRoaXMgZmll bGQgdGhlIFNXIHNob3VsZA0KPiAtCSAqCXJlYWQgdGhlIGZpZWxkIGZvciB0aGUgdmFsdWUgd3Jp dHRlbi4NCj4gLQkgKglUaGUgRU5BQkxFIGZpZWxkIG9mIHRoaXMgcmVnaXN0ZXIgc2hvdWxkIG5v dCBiZSBzZXQNCj4gLQkgKgl1bnRpbCBBRlRFUiB0aGlzIGZpZWxkIGlzIHNldCBhbmQgdGhlbiBy ZWFkLg0KPiAtCSAqLw0KPiAtCXN0cnVjdCBjdm14X3VzYm54X2Nsa19jdGxfcyB7DQo+IC0JCV9f QklURklFTERfRklFTEQodTY0IHJlc2VydmVkXzIwXzYzCTogNDQsDQo+IC0JCV9fQklURklFTERf RklFTEQodTY0IGRpdmlkZTIJCTogMiwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgaGNsa19y c3QJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgcF94X29uCQk6IDEsDQo+IC0JCV9f QklURklFTERfRklFTEQodTY0IHBfcnR5cGUJCTogMiwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 NjQgcF9jb21fb24JCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgcF9jX3NlbAkJOiAy LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCBjZGl2X2J5cAkJOiAxLA0KPiAtCQlfX0JJVEZJ RUxEX0ZJRUxEKHU2NCBzZF9tb2RlCQk6IDIsDQo+IC0JCV9fQklURklFTERfRklFTEQodTY0IHNf YmlzdAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCBwb3IJCTogMSwNCj4gLQkJX19C SVRGSUVMRF9GSUVMRCh1NjQgZW5hYmxlCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTY0 IHByc3QJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgaHJzdAkJOiAxLA0KPiAtCQlf X0JJVEZJRUxEX0ZJRUxEKHU2NCBkaXZpZGUJCTogMywNCj4gLQkJOykpKSkpKSkpKSkpKSkpKQ0K PiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLS8qKg0KPiAtICogY3ZteF91c2JuI191c2JwX2N0bF9z dGF0dXMNCj4gLSAqDQo+IC0gKiBVU0JOX1VTQlBfQ1RMX1NUQVRVUyA9IFVTQlAgQ29udHJvbCBB bmQgU3RhdHVzIFJlZ2lzdGVyDQo+IC0gKg0KPiAtICogQ29udGFpbnMgZ2VuZXJhbCBjb250cm9s IGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gZm9yIHRoZSBVU0JOIGJsb2NrLg0KPiAtICovDQo+IC11 bmlvbiBjdm14X3VzYm54X3VzYnBfY3RsX3N0YXR1cyB7DQo+IC0JdTY0IHU2NDsNCj4gLQkvKioN Cj4gLQkgKiBzdHJ1Y3QgY3ZteF91c2JueF91c2JwX2N0bF9zdGF0dXNfcw0KPiAtCSAqIEB0eHJp c2V0dW5lOiBIUyBUcmFuc21pdHRlciBSaXNlL0ZhbGwgVGltZSBBZGp1c3RtZW50DQo+IC0JICog QHR4dnJlZnR1bmU6IEhTIERDIFZvbHRhZ2UgTGV2ZWwgQWRqdXN0bWVudA0KPiAtCSAqIEB0eGZz bHN0dW5lOiBGUy9MUyBTb3VyY2UgSW1wZWRhbmNlIEFkanVzdG1lbnQNCj4gLQkgKiBAdHhoc3h2 dHVuZTogVHJhbnNtaXR0ZXIgSGlnaC1TcGVlZCBDcm9zc292ZXIgQWRqdXN0bWVudA0KPiAtCSAq IEBzcXJ4dHVuZTogU3F1ZWxjaCBUaHJlc2hvbGQgQWRqdXN0bWVudA0KPiAtCSAqIEBjb21wZGlz dHVuZTogRGlzY29ubmVjdCBUaHJlc2hvbGQgQWRqdXN0bWVudA0KPiAtCSAqIEBvdGd0dW5lOiBW QlVTIFZhbGlkIFRocmVzaG9sZCBBZGp1c3RtZW50DQo+IC0JICogQG90Z2Rpc2FibGU6IE9URyBC bG9jayBEaXNhYmxlDQo+IC0JICogQHBvcnRyZXNldDogUGVyX1BvcnQgUmVzZXQNCj4gLQkgKiBA ZHJ2dmJ1czogRHJpdmUgVkJVUw0KPiAtCSAqIEBsc2Jpc3Q6IExvdy1TcGVlZCBCSVNUIEVuYWJs ZS4NCj4gLQkgKiBAZnNiaXN0OiBGdWxsLVNwZWVkIEJJU1QgRW5hYmxlLg0KPiAtCSAqIEBoc2Jp c3Q6IEhpZ2gtU3BlZWQgQklTVCBFbmFibGUuDQo+IC0JICogQGJpc3RfZG9uZTogUEhZIEJpc3Qg RG9uZS4NCj4gLQkgKglBc3NlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgQklTVCBzZXF1ZW5j ZS4NCj4gLQkgKiBAYmlzdF9lcnI6IFBIWSBCaXN0IEVycm9yLg0KPiAtCSAqCUluZGljYXRlcyBh biBpbnRlcm5hbCBlcnJvciB3YXMgZGV0ZWN0ZWQgZHVyaW5nDQo+IC0JICoJdGhlIEJJU1Qgc2Vx dWVuY2UuDQo+IC0JICogQHRkYXRhX291dDogUEhZIFRlc3QgRGF0YSBPdXQuDQo+IC0JICoJUHJl c2VudHMgZWl0aGVyIGludGVybmFsbHkgZ2VuZXJhdGVkIHNpZ25hbHMgb3INCj4gLQkgKgl0ZXN0 IHJlZ2lzdGVyIGNvbnRlbnRzLCBiYXNlZCB1cG9uIHRoZSB2YWx1ZSBvZg0KPiAtCSAqCXRlc3Rf ZGF0YV9vdXRfc2VsLg0KPiAtCSAqIEBzaWRkcTogRHJpdmVzIHRoZSBVU0JQIChVU0ItUEhZKSBT SUREUSBpbnB1dC4NCj4gLQkgKglOb3JtYWxseSBzaG91bGQgYmUgc2V0IHRvIHplcm8uDQo+IC0J ICoJV2hlbiBjdXN0b21lcnMgaGF2ZSBubyBpbnRlbnQgdG8gdXNlIFVTQiBQSFkNCj4gLQkgKglp bnRlcmZhY2UsIHRoZXkgc2hvdWxkOg0KPiAtCSAqCS0gc3RpbGwgcHJvdmlkZSAzLjNWIHRvIFVT Ql9WREQzMywgYW5kDQo+IC0JICoJLSB0aWUgVVNCX1JFWFQgdG8gMy4zViBzdXBwbHksIGFuZA0K PiAtCSAqCS0gc2V0IFVTQk4qX1VTQlBfQ1RMX1NUQVRVU1tTSUREUV09MQ0KPiAtCSAqIEB0eHBy ZWVtcGhhc2lzdHVuZTogSFMgVHJhbnNtaXR0ZXIgUHJlLUVtcGhhc2lzIEVuYWJsZQ0KPiAtCSAq IEBkbWFfYm1vZGU6IFdoZW4gc2V0IHRvIDEgdGhlIEwyQyBETUEgYWRkcmVzcyB3aWxsIGJlIHVw ZGF0ZWQNCj4gLQkgKgl3aXRoIGJ5dGUtY291bnRzIGJldHdlZW4gcGFja2V0cy4gV2hlbiBzZXQg dG8gMA0KPiAtCSAqCXRoZSBMMkMgRE1BIGFkZHJlc3MgaXMgaW5jcmVtZW50ZWQgdG8gdGhlIG5l eHQNCj4gLQkgKgk0LWJ5dGUgYWxpZ25lZCBhZGRyZXNzIGFmdGVyIGFkZGluZyBieXRlLWNvdW50 Lg0KPiAtCSAqIEB1c2JjX2VuZDogQmlnZW5kaWFuIGlucHV0IHRvIHRoZSBVU0IgQ29yZS4gVGhp cyBzaG91bGQgYmUNCj4gLQkgKglzZXQgdG8gJzAnIGZvciBvcGVyYXRpb24uDQo+IC0JICogQHVz YnBfYmlzdDogUEhZLCBUaGlzIGlzIGNsZWFyZWQgJzAnIHRvIHJ1biBCSVNUIG9uIHRoZSBVU0JQ Lg0KPiAtCSAqIEB0Y2xrOiBQSFkgVGVzdCBDbG9jaywgdXNlZCB0byBsb2FkIFREQVRBX0lOIHRv IHRoZSBVU0JQLg0KPiAtCSAqIEBkcF9wdWxsZDogUEhZIERQX1BVTExET1dOIGlucHV0IHRvIHRo ZSBVU0ItUEhZLg0KPiAtCSAqCVRoaXMgc2lnbmFsIGVuYWJsZXMgdGhlIHB1bGwtZG93biByZXNp c3RhbmNlIG9uDQo+IC0JICoJdGhlIEQrIGxpbmUuICcxJyBwdWxsIGRvd24tcmVzaXN0YW5jZSBp cyBjb25uZWN0ZWQNCj4gLQkgKgl0byBEKy8gJzAnIHB1bGwgZG93biByZXNpc3RhbmNlIGlzIG5v dCBjb25uZWN0ZWQNCj4gLQkgKgl0byBEKy4gV2hlbiBhbiBBL0IgZGV2aWNlIGlzIGFjdGluZyBh cyBhIGhvc3QNCj4gLQkgKgkoZG93bnN0cmVhbS1mYWNpbmcgcG9ydCksIGRwX3B1bGxkb3duIGFu ZA0KPiAtCSAqCWRtX3B1bGxkb3duIGFyZSBlbmFibGVkLiBUaGlzIG11c3Qgbm90IHRvZ2dsZQ0K PiAtCSAqCWR1cmluZyBub3JtYWwgb3BlcmF0aW9uLg0KPiAtCSAqIEBkbV9wdWxsZDogUEhZIERN X1BVTExET1dOIGlucHV0IHRvIHRoZSBVU0ItUEhZLg0KPiAtCSAqCVRoaXMgc2lnbmFsIGVuYWJs ZXMgdGhlIHB1bGwtZG93biByZXNpc3RhbmNlIG9uDQo+IC0JICoJdGhlIEQtIGxpbmUuICcxJyBw dWxsIGRvd24tcmVzaXN0YW5jZSBpcyBjb25uZWN0ZWQNCj4gLQkgKgl0byBELS4gJzAnIHB1bGwg ZG93biByZXNpc3RhbmNlIGlzIG5vdCBjb25uZWN0ZWQNCj4gLQkgKgl0byBELS4gV2hlbiBhbiBB L0IgZGV2aWNlIGlzIGFjdGluZyBhcyBhIGhvc3QNCj4gLQkgKgkoZG93bnN0cmVhbS1mYWNpbmcg cG9ydCksIGRwX3B1bGxkb3duIGFuZA0KPiAtCSAqCWRtX3B1bGxkb3duIGFyZSBlbmFibGVkLiBU aGlzIG11c3Qgbm90IHRvZ2dsZQ0KPiAtCSAqCWR1cmluZyBub3JtYWwgb3BlcmF0aW9uLg0KPiAt CSAqIEBoc3RfbW9kZTogV2hlbiAnMCcgdGhlIFVTQiBpcyBhY3RpbmcgYXMgSE9TVCwgd2hlbiAn MScNCj4gLQkgKglVU0IgaXMgYWN0aW5nIGFzIGRldmljZS4gVGhpcyBmaWVsZCBuZWVkcyB0byBi ZQ0KPiAtCSAqCXNldCB3aGlsZSB0aGUgVVNCIGlzIGluIHJlc2V0Lg0KPiAtCSAqIEB0dW5pbmc6 IFRyYW5zbWl0dGVyIFR1bmluZyBmb3IgSGlnaC1TcGVlZCBPcGVyYXRpb24uDQo+IC0JICoJVHVu ZXMgdGhlIGN1cnJlbnQgc3VwcGx5IGFuZCByaXNlL2ZhbGwgb3V0cHV0DQo+IC0JICoJdGltZXMg Zm9yIGhpZ2gtc3BlZWQgb3BlcmF0aW9uLg0KPiAtCSAqCVsyMDoxOV0gPT0gMTE6IEN1cnJlbnQg c3VwcGx5IGluY3JlYXNlZA0KPiAtCSAqCWFwcHJveGltYXRlbHkgOSUNCj4gLQkgKglbMjA6MTld ID09IDEwOiBDdXJyZW50IHN1cHBseSBpbmNyZWFzZWQNCj4gLQkgKglhcHByb3hpbWF0ZWx5IDQu NSUNCj4gLQkgKglbMjA6MTldID09IDAxOiBEZXNpZ24gZGVmYXVsdC4NCj4gLQkgKglbMjA6MTld ID09IDAwOiBDdXJyZW50IHN1cHBseSBkZWNyZWFzZWQNCj4gLQkgKglhcHByb3hpbWF0ZWx5IDQu NSUNCj4gLQkgKglbMjI6MjFdID09IDExOiBSaXNlIGFuZCBmYWxsIHRpbWVzIGFyZSBpbmNyZWFz ZWQuDQo+IC0JICoJWzIyOjIxXSA9PSAxMDogRGVzaWduIGRlZmF1bHQuDQo+IC0JICoJWzIyOjIx XSA9PSAwMTogUmlzZSBhbmQgZmFsbCB0aW1lcyBhcmUgZGVjcmVhc2VkLg0KPiAtCSAqCVsyMjoy MV0gPT0gMDA6IFJpc2UgYW5kIGZhbGwgdGltZXMgYXJlIGRlY3JlYXNlZA0KPiAtCSAqCWZ1cnRo ZXIgYXMgY29tcGFyZWQgdG8gdGhlIDAxIHNldHRpbmcuDQo+IC0JICogQHR4X2JzX2VuaDogVHJh bnNtaXQgQml0IFN0dWZmaW5nIG9uIFsxNTo4XS4NCj4gLQkgKglFbmFibGVzIG9yIGRpc2FibGVz IGJpdCBzdHVmZmluZyBvbiBkYXRhWzE1OjhdDQo+IC0JICoJd2hlbiBiaXQtc3R1ZmZpbmcgaXMg ZW5hYmxlZC4NCj4gLQkgKiBAdHhfYnNfZW46IFRyYW5zbWl0IEJpdCBTdHVmZmluZyBvbiBbNzow XS4NCj4gLQkgKglFbmFibGVzIG9yIGRpc2FibGVzIGJpdCBzdHVmZmluZyBvbiBkYXRhWzc6MF0N Cj4gLQkgKgl3aGVuIGJpdC1zdHVmZmluZyBpcyBlbmFibGVkLg0KPiAtCSAqIEBsb29wX2VuYjog UEhZIExvb3BiYWNrIFRlc3QgRW5hYmxlLg0KPiAtCSAqCScxJzogRHVyaW5nIGRhdGEgdHJhbnNt aXNzaW9uIHRoZSByZWNlaXZlIGlzDQo+IC0JICoJZW5hYmxlZC4NCj4gLQkgKgknMCc6IER1cmlu ZyBkYXRhIHRyYW5zbWlzc2lvbiB0aGUgcmVjZWl2ZSBpcw0KPiAtCSAqCWRpc2FibGVkLg0KPiAt CSAqCU11c3QgYmUgJzAnIGZvciBub3JtYWwgb3BlcmF0aW9uLg0KPiAtCSAqIEB2dGVzdF9lbmI6 IEFuYWxvZyBUZXN0IFBpbiBFbmFibGUuDQo+IC0JICoJJzEnIFRoZSBQSFkncyBhbmFsb2dfdGVz dCBwaW4gaXMgZW5hYmxlZCBmb3IgdGhlDQo+IC0JICoJaW5wdXQgYW5kIG91dHB1dCBvZiBhcHBs aWNhYmxlIGFuYWxvZyB0ZXN0IHNpZ25hbHMuDQo+IC0JICoJJzAnIFRIZSBhbmFsb2dfdGVzdCBw aW4gaXMgZGlzYWJsZWQuDQo+IC0JICogQGJpc3RfZW5iOiBCdWlsdC1JbiBTZWxmIFRlc3QgRW5h YmxlLg0KPiAtCSAqCVVzZWQgdG8gYWN0aXZhdGUgQklTVCBpbiB0aGUgUEhZLg0KPiAtCSAqIEB0 ZGF0YV9zZWw6IFRlc3QgRGF0YSBPdXQgU2VsZWN0Lg0KPiAtCSAqCScxJyB0ZXN0X2RhdGFfb3V0 WzM6MF0gKFBIWSkgcmVnaXN0ZXIgY29udGVudHMNCj4gLQkgKglhcmUgb3V0cHV0LiAnMCcgaW50 ZXJuYWxseSBnZW5lcmF0ZWQgc2lnbmFscyBhcmUNCj4gLQkgKglvdXRwdXQuDQo+IC0JICogQHRh ZGRyX2luOiBNb2RlIEFkZHJlc3MgZm9yIFRlc3QgSW50ZXJmYWNlLg0KPiAtCSAqCVNwZWNpZmll cyB0aGUgcmVnaXN0ZXIgYWRkcmVzcyBmb3Igd3JpdGluZyB0byBvcg0KPiAtCSAqCXJlYWRpbmcg ZnJvbSB0aGUgUEhZIHRlc3QgaW50ZXJmYWNlIHJlZ2lzdGVyLg0KPiAtCSAqIEB0ZGF0YV9pbjog SW50ZXJuYWwgVGVzdGluZyBSZWdpc3RlciBJbnB1dCBEYXRhIGFuZCBTZWxlY3QNCj4gLQkgKglU aGlzIGlzIGEgdGVzdCBidXMuIERhdGEgaXMgcHJlc2VudCBvbiBbMzowXSwNCj4gLQkgKglhbmQg aXRzIGNvcnJlc3BvbmRpbmcgc2VsZWN0IChlbmFibGUpIGlzIHByZXNlbnQNCj4gLQkgKglvbiBi aXRzIFs3OjRdLg0KPiAtCSAqIEBhdGVfcmVzZXQ6IFJlc2V0IGlucHV0IGZyb20gYXV0b21hdGlj IHRlc3QgZXF1aXBtZW50Lg0KPiAtCSAqCVRoaXMgaXMgYSB0ZXN0IHNpZ25hbC4gV2hlbiB0aGUg VVNCIENvcmUgaXMNCj4gLQkgKglwb3dlcmVkIHVwIChub3QgaW4gU3VzbmVkIE1vZGUpLCBhbiBh dXRvbWF0aWMNCj4gLQkgKgl0ZXN0ZXIgY2FuIHVzZSB0aGlzIHRvIGRpc2FibGUgcGh5X2Nsb2Nr IGFuZA0KPiAtCSAqCWZyZWVfY2xrLCB0aGVuIHJlLWVuYWJsZSB0aGVtIHdpdGggYW4gYWxpZ25l ZA0KPiAtCSAqCXBoYXNlLg0KPiAtCSAqCScxJzogVGhlIHBoeV9jbGsgYW5kIGZyZWVfY2xrIG91 dHB1dHMgYXJlDQo+IC0JICoJZGlzYWJsZWQuICIwIjogVGhlIHBoeV9jbG9jayBhbmQgZnJlZV9j bGsgb3V0cHV0cw0KPiAtCSAqCWFyZSBhdmFpbGFibGUgd2l0aGluIGEgc3BlY2lmaWMgcGVyaW9k IGFmdGVyIHRoZQ0KPiAtCSAqCWRlLWFzc2VydGlvbi4NCj4gLQkgKi8NCj4gLQlzdHJ1Y3QgY3Zt eF91c2JueF91c2JwX2N0bF9zdGF0dXNfcyB7DQo+IC0JCV9fQklURklFTERfRklFTEQodTY0IHR4 cmlzZXR1bmUJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgdHh2cmVmdHVuZQkJOiA0 LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCB0eGZzbHN0dW5lCQk6IDQsDQo+IC0JCV9fQklU RklFTERfRklFTEQodTY0IHR4aHN4dnR1bmUJCTogMiwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 NjQgc3FyeHR1bmUJCTogMywNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgY29tcGRpc3R1bmUJ OiAzLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCBvdGd0dW5lCQk6IDMsDQo+IC0JCV9fQklU RklFTERfRklFTEQodTY0IG90Z2Rpc2FibGUJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1 NjQgcG9ydHJlc2V0CQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTY0IGRydnZidXMJCTog MSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgbHNiaXN0CQk6IDEsDQo+IC0JCV9fQklURklF TERfRklFTEQodTY0IGZzYmlzdAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCBoc2Jp c3QJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgYmlzdF9kb25lCQk6IDEsDQo+IC0J CV9fQklURklFTERfRklFTEQodTY0IGJpc3RfZXJyCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklF TEQodTY0IHRkYXRhX291dAkJOiA0LA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCBzaWRkcQkJ OiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCB0eHByZWVtcGhhc2lzdHVuZQk6IDEsDQo+ IC0JCV9fQklURklFTERfRklFTEQodTY0IGRtYV9ibW9kZQkJOiAxLA0KPiAtCQlfX0JJVEZJRUxE X0ZJRUxEKHU2NCB1c2JjX2VuZAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCB1c2Jw X2Jpc3QJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgdGNsawkJOiAxLA0KPiAtCQlf X0JJVEZJRUxEX0ZJRUxEKHU2NCBkcF9wdWxsZAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxE KHU2NCBkbV9wdWxsZAkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCBoc3RfbW9kZQkJ OiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCB0dW5pbmcJCTogNCwNCj4gLQkJX19CSVRG SUVMRF9GSUVMRCh1NjQgdHhfYnNfZW5oCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTY0 IHR4X2JzX2VuCQk6IDEsDQo+IC0JCV9fQklURklFTERfRklFTEQodTY0IGxvb3BfZW5iCQk6IDEs DQo+IC0JCV9fQklURklFTERfRklFTEQodTY0IHZ0ZXN0X2VuYgkJOiAxLA0KPiAtCQlfX0JJVEZJ RUxEX0ZJRUxEKHU2NCBiaXN0X2VuYgkJOiAxLA0KPiAtCQlfX0JJVEZJRUxEX0ZJRUxEKHU2NCB0 ZGF0YV9zZWwJCTogMSwNCj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgdGFkZHJfaW4JCTogNCwN Cj4gLQkJX19CSVRGSUVMRF9GSUVMRCh1NjQgdGRhdGFfaW4JCTogOCwNCj4gLQkJX19CSVRGSUVM RF9GSUVMRCh1NjQgYXRlX3Jlc2V0CQk6IDEsDQo+IC0JCTspKSkpKSkpKSkpKSkpKSkpKSkpKSkp KSkpKSkpKSkpKSkpKQ0KPiAtCX0gczsNCj4gLX07DQo+IC0NCj4gLSNlbmRpZiAvKiBfX09DVEVP Tl9IQ0RfSF9fICovDQo=