From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 59B78ECAAD5 for ; Mon, 5 Sep 2022 20:18:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=/lAotV1W2AArqV5lufQdu0lHOdd429wE3dg5QTQXjfU=; b=Dcz1KuV7go20CO 1sAWXA7dcQvCmutfzGsancptqoAWbB4CpDlwfECDEui6NGOXy6EnAxS7yLbEZjJl3kVUjC4h2ZNiK vUZKaN7Mtoc/cJGZoJsuyhWIyd00V6Pe8OA/M5GGdYEC0miw8A3lI66UB03XwF4tDJfg5X7EcNJ6t gfeix3rrDnUUH1Hy0DQ/NiOawQKx7rYqvbdtBpobBReYW7Gb+RcJbWWSZVyRJHc+6MWBc4ebVf1Ac SQAewAxF1Xpyz3/9Zbw+gPiw+Sgw/chG41YCxknHyeWSfTKRvxWLoC+uT1dgjmYiFwzMWPuvk/QcJ dZop1mfFpQNXEjtSCknw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oVIXf-00ADpS-IT; Mon, 05 Sep 2022 20:17:59 +0000 Received: from perceval.ideasonboard.com ([213.167.242.64]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oVIJk-009sy8-It for linux-phy@lists.infradead.org; Mon, 05 Sep 2022 20:03:42 +0000 Received: from pendragon.ideasonboard.com (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6C8BC6BC; Mon, 5 Sep 2022 22:03:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1662408214; bh=4KUacMLH2Q+kQSD5MjrcOz9e+RzSJdkEPdQhsqcirGY=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=nmQp5iAujSUd5m5OWOaLeZ7Q/Fr2N0gvuJXfxmw6VJ0RG9aDuSKCEf8noqIJ6C1NO YGuJOopG/hykTUJkG3FJpJdauyrZaG8CvLi4xK0wHvuGteX6KkurG9DbamZ7awS9OH BtfGjX3F20E2/BsuXjFauIUuUK9MvJqo4SH512kw= Date: Mon, 5 Sep 2022 23:03:19 +0300 From: Laurent Pinchart To: Marco Felsch Cc: mchehab@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, vkoul@kernel.org, kishon@ti.com, sakari.ailus@linux.intel.com, hverkuil@xs4all.nl, jacopo@jmondi.org, linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org, devicetree@vger.kernel.org, linux-media@vger.kernel.org, kernel@pengutronix.de Subject: Re: [PATCH 4/4] media: tc358746: add Toshiba TC358746 Parallel to CSI-2 bridge driver Message-ID: References: <20220818143307.967150-1-m.felsch@pengutronix.de> <20220818143307.967150-5-m.felsch@pengutronix.de> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20220818143307.967150-5-m.felsch@pengutronix.de> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220905_130337_386540_2761F5A7 X-CRM114-Status: GOOD ( 35.69 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org SGkgTWFyY28sCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIFRodSwgQXVnIDE4LCAyMDIy IGF0IDA0OjMzOjA3UE0gKzAyMDAsIE1hcmNvIEZlbHNjaCB3cm90ZToKPiBBZGRpbmcgc3VwcG9y dCBmb3IgdGhlIFRDMzU4NzQ2IHBhcmFsbGVsIDwtPiBNSVBJIENTSSBicmlkZ2UuIFRoaXMgY2hp cAo+IHN1cHBvcnRzIHR3byBvcGVyYXRpbmcgbW9kZXM6Cj4gICAxc3QpIHBhcmFsbGVsLWluIC0+ IG1pcGktY3NpIG91dAo+ICAgMm5kKSBtaXBpLWNzaSBpbiAtPiBwYXJhbGxlbCBvdXQKPiAKPiBU aGlzIHBhdGNoIG9ubHkgYWRkcyB0aGUgc3VwcG9ydCBmb3IgdGhlIDFzdCBtb2RlLgo+IAo+IFNp Z25lZC1vZmYtYnk6IE1hcmNvIEZlbHNjaCA8bS5mZWxzY2hAcGVuZ3V0cm9uaXguZGU+Cj4gLS0t Cj4gIGRyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcgICAgfCAgIDE3ICsKPiAgZHJpdmVycy9tZWRp YS9pMmMvTWFrZWZpbGUgICB8ICAgIDEgKwo+ICBkcml2ZXJzL21lZGlhL2kyYy90YzM1ODc0Ni5j IHwgMTY0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hh bmdlZCwgMTY2MyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21l ZGlhL2kyYy90YzM1ODc0Ni5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL0tj b25maWcgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnCj4gaW5kZXggNzgwNmQ0YjgxNzE2Li5h ZWZiOWM5ZTBjMDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwo+ICsr KyBiL2RyaXZlcnMvbWVkaWEvaTJjL0tjb25maWcKPiBAQCAtMTI3Miw2ICsxMjcyLDIzIEBAIGNv bmZpZyBWSURFT19UQzM1ODc0M19DRUMKPiAgCSAgV2hlbiBzZWxlY3RlZCB0aGUgdGMzNTg3NDMg d2lsbCBzdXBwb3J0IHRoZSBvcHRpb25hbAo+ICAJICBIRE1JIENFQyBmZWF0dXJlLgo+ICAKPiAr Y29uZmlnIFZJREVPX1RDMzU4NzQ2Cj4gKwl0cmlzdGF0ZSAiVG9zaGliYSBUQzM1ODc0NiBwYXJh bGxlbC1DU0kyIGJyaWRnZSIKPiArCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwo+ICsJc2Vs ZWN0IFZJREVPX1Y0TDJfU1VCREVWX0FQSQo+ICsJc2VsZWN0IE1FRElBX0NPTlRST0xMRVIKPiAr CXNlbGVjdCBWNEwyX0ZXTk9ERQo+ICsJc2VsZWN0IEdFTkVSSUNfUEhZX01JUElfRFBIWQo+ICsJ c2VsZWN0IFJFR01BUF9JMkMKPiArCXNlbGVjdCBDT01NT05fQ0xLCj4gKwloZWxwCj4gKwkgIFN1 cHBvcnQgZm9yIHRoZSBUb3NoaWJhIFRDMzU4NzQ2IHBhcmFsbGVsIHRvIE1JUEkgQ1NJLTIgYnJp ZGdlLgo+ICsJICBUaGUgYnJpZGdlIGNhbiB3b3JrIGluIGJvdGggZGlyZWN0aW9ucyBidXQgY3Vy cmVudGx5IG9ubHkgdGhlCj4gKwkgIHBhcmFsbGVsLWluIC8gY3NpLW91dCBwYXRoIGlzIHN1cHBv cnRlZC4KPiArCj4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZQo+ICsJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGMzNTg3NDYuCj4gKwo+ ICBjb25maWcgVklERU9fVFZQNTE0WAo+ICAJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRW UDUxNHggdmlkZW8gZGVjb2RlciIKPiAgCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvaTJj L01ha2VmaWxlCj4gaW5kZXggMGEyOTMzMTAzZGQ5Li5kMTA5NmMyYWI0ODAgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9tZWRpYS9pMmMvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL21lZGlhL2kyYy9N YWtlZmlsZQo+IEBAIC0xMTgsNiArMTE4LDcgQEAgb2JqLSQoQ09ORklHX1ZJREVPX1NPTllfQlRG X01QWCkgKz0gc29ueS1idGYtbXB4Lm8KPiAgb2JqLSQoQ09ORklHX1ZJREVPX1NSMDMwUEMzMCkg Kz0gc3IwMzBwYzMwLm8KPiAgb2JqLSQoQ09ORklHX1ZJREVPX1NUX01JUElEMDIpICs9IHN0LW1p cGlkMDIubwo+ICBvYmotJChDT05GSUdfVklERU9fVEMzNTg3NDMpICs9IHRjMzU4NzQzLm8KPiAr b2JqLSQoQ09ORklHX1ZJREVPX1RDMzU4NzQ2KSArPSB0YzM1ODc0Ni5vCj4gIG9iai0kKENPTkZJ R19WSURFT19UREExOTk3WCkgKz0gdGRhMTk5N3gubwo+ICBvYmotJChDT05GSUdfVklERU9fVERB NzQzMikgKz0gdGRhNzQzMi5vCj4gIG9iai0kKENPTkZJR19WSURFT19UREE5ODQwKSArPSB0ZGE5 ODQwLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvdGMzNTg3NDYuYyBiL2RyaXZl cnMvbWVkaWEvaTJjL3RjMzU4NzQ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uN2I3MWQwY2Y3MmE5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv bWVkaWEvaTJjL3RjMzU4NzQ2LmMKPiBAQCAtMCwwICsxLDE2NDUgQEAKPiArLy8gU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+ICsvKgo+ICsgKiBUQzM1ODc0NiAtIFBhcmFs bGVsIDwtPiBDU0ktMiBCcmlkZ2UKPiArICoKPiArICogQ29weXJpZ2h0IDIwMjIgTWFyY28gRmVs c2NoIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Cj4gKyAqCj4gKyAqIE5vdGVzOgo+ICsgKiAgLSBD dXJyZW50bHkgb25seSAnUGFyYWxsZWwtaW4gLT4gQ1NJLW91dCcgbW9kZSBpcyBzdXBwb3J0ZWQh Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+ICsjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS1taXBpLWRwaHku aD4KPiArI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9y dW50aW1lLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPG1lZGlh L3Y0bDItY3RybHMuaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Cj4gKyNpbmNs dWRlIDxtZWRpYS92NGwyLWZ3bm9kZS5oPgo+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1tYy5oPgo+ ICsKPiArLyogMTYtYml0IHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIENISVBJRF9SRUcJCQkweDAw MDAKPiArI2RlZmluZQkJQ0hJUElECQkJR0VOTUFTSygxNSwgOCkKPiArCj4gKyNkZWZpbmUgU1lT Q1RMX1JFRwkJCTB4MDAwMgo+ICsjZGVmaW5lCQlTUkVTRVQJCQlCSVQoMCkKPiArCj4gKyNkZWZp bmUgQ09ORkNUTF9SRUcJCQkweDAwMDQKPiArI2RlZmluZQkJUERBVEFGX01BU0sJCUdFTk1BU0so OSwgOCkKPiArI2RlZmluZQkJUERBVEFGX01PREUwCQkwCj4gKyNkZWZpbmUJCVBEQVRBRl9NT0RF MQkJMQo+ICsjZGVmaW5lCQlQREFUQUZfTU9ERTIJCTIKPiArI2RlZmluZQkJUERBVEFGKHZhbCkJ CUZJRUxEX1BSRVAoUERBVEFGX01BU0ssICh2YWwpKQo+ICsjZGVmaW5lCQlQUEVOCQkJQklUKDYp Cj4gKyNkZWZpbmUJCURBVEFMQU5FX01BU0sJCUdFTk1BU0soMSwgMCkKPiArCj4gKyNkZWZpbmUg RklGT0NUTF9SRUcJCQkweDAwMDYKPiArI2RlZmluZSBEQVRBRk1UX1JFRwkJCTB4MDAwOAo+ICsj ZGVmaW5lCQlQREZNVCh2YWwpCQlGSUVMRF9QUkVQKEdFTk1BU0soNywgNCksICh2YWwpKQo+ICsK PiArI2RlZmluZSBNQ0xLQ1RMX1JFRwkJCTB4MDAwYwo+ICsjZGVmaW5lCQlNQ0xLX0hJR0hfTUFT SwkJR0VOTUFTSygxNSwgOCkKPiArI2RlZmluZQkJTUNMS19MT1dfTUFTSwkJR0VOTUFTSyg3LCAw KQo+ICsjZGVmaW5lCQlNQ0xLX0hJR0godmFsKQkJRklFTERfUFJFUChNQ0xLX0hJR0hfTUFTSywg KHZhbCkpCj4gKyNkZWZpbmUJCU1DTEtfTE9XKHZhbCkJCUZJRUxEX1BSRVAoTUNMS19MT1dfTUFT SywgKHZhbCkpCj4gKwo+ICsjZGVmaW5lIFBMTENUTDBfUkVHCQkJMHgwMDE2Cj4gKyNkZWZpbmUJ CVBMTF9QUkRfTUFTSwkJR0VOTUFTSygxNSwgMTIpCj4gKyNkZWZpbmUJCVBMTF9QUkQodmFsKQkJ RklFTERfUFJFUChQTExfUFJEX01BU0ssICh2YWwpKQo+ICsjZGVmaW5lCQlQTExfRkJEX01BU0sJ CUdFTk1BU0soOCwgMCkKPiArI2RlZmluZQkJUExMX0ZCRCh2YWwpCQlGSUVMRF9QUkVQKFBMTF9G QkRfTUFTSywgKHZhbCkpCj4gKwo+ICsjZGVmaW5lIFBMTENUTDFfUkVHCQkJMHgwMDE4Cj4gKyNk ZWZpbmUJCVBMTF9GUlNfTUFTSwkJR0VOTUFTSygxMSwgMTApCj4gKyNkZWZpbmUJCVBMTF9GUlMo dmFsKQkJRklFTERfUFJFUChQTExfRlJTX01BU0ssICh2YWwpKQo+ICsjZGVmaW5lCQlDS0VOCQkJ QklUKDQpCj4gKyNkZWZpbmUJCVJFU0VUQgkJCUJJVCgxKQo+ICsjZGVmaW5lCQlQTExfRU4JCQlC SVQoMCkKPiArCj4gKyNkZWZpbmUgQ0xLQ1RMX1JFRwkJCTB4MDAyMAo+ICsjZGVmaW5lCQlNQ0xL RElWX01BU0sJCUdFTk1BU0soMywgMikKPiArI2RlZmluZQkJTUNMS0RJVih2YWwpCQlGSUVMRF9Q UkVQKE1DTEtESVZfTUFTSywgKHZhbCkpCj4gKyNkZWZpbmUJCU1DTEtESVZfOAkJMAo+ICsjZGVm aW5lCQlNQ0xLRElWXzQJCTEKPiArI2RlZmluZQkJTUNMS0RJVl8yCQkyCj4gKwo+ICsjZGVmaW5l IFdPUkRDTlRfUkVHCQkJMHgwMDIyCj4gKyNkZWZpbmUgUFBfTUlTQ19SRUcJCQkweDAwMzIKPiAr I2RlZmluZQkJRlJNU1RPUAkJCUJJVCgxNSkKPiArI2RlZmluZQkJUlNUUFRSCQkJQklUKDE0KQo+ ICsKPiArLyogMzItYml0IHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIENMV19EUEhZQ09OVFRYX1JF RwkJMHgwMTAwCj4gKyNkZWZpbmUgQ0xXX0NOVFJMX1JFRwkJCTB4MDE0MAo+ICsjZGVmaW5lIEQw V19DTlRSTF9SRUcJCQkweDAxNDQKPiArI2RlZmluZQkJTEFORURJU0FCTEUJCUJJVCgwKQo+ICsK PiArI2RlZmluZSBTVEFSVENOVFJMX1JFRwkJCTB4MDIwNAo+ICsjZGVmaW5lCQlTVEFSVAkJCUJJ VCgwKQo+ICsKPiArI2RlZmluZSBMSU5FSU5JVENOVF9SRUcJCQkweDAyMTAKPiArI2RlZmluZSBM UFRYVElNRUNOVF9SRUcJCQkweDAyMTQKPiArI2RlZmluZSBUQ0xLX0hFQURFUkNOVF9SRUcJCTB4 MDIxOAo+ICsjZGVmaW5lCQlUQ0xLX1pFUk9DTlQodmFsKQlGSUVMRF9QUkVQKEdFTk1BU0soMTUs IDgpLCAodmFsKSkKPiArI2RlZmluZQkJVENMS19QUkVQQVJFQ05UKHZhbCkJRklFTERfUFJFUChH RU5NQVNLKDYsIDApLCAodmFsKSkKPiArCj4gKyNkZWZpbmUgVENMS19UUkFJTENOVF9SRUcJCTB4 MDIxQwo+ICsjZGVmaW5lIFRIU19IRUFERVJDTlRfUkVHCQkweDAyMjAKPiArI2RlZmluZQkJVEhT X1pFUk9DTlQodmFsKQlGSUVMRF9QUkVQKEdFTk1BU0soMTQsIDgpLCAodmFsKSkKPiArI2RlZmlu ZQkJVEhTX1BSRVBBUkVDTlQodmFsKQlGSUVMRF9QUkVQKEdFTk1BU0soNiwgMCksICh2YWwpKQo+ ICsKPiArI2RlZmluZSBUV0FLRVVQX1JFRwkJCTB4MDIyNAo+ICsjZGVmaW5lIFRDTEtfUE9TVENO VF9SRUcJCTB4MDIyOAo+ICsjZGVmaW5lIFRIU19UUkFJTENOVF9SRUcJCTB4MDIyQwo+ICsjZGVm aW5lIEhTVFhWUkVHRU5fUkVHCQkJMHgwMjM0Cj4gKyNkZWZpbmUgVFhPUFRJT05DTlRSTF9SRUcJ CTB4MDIzOAo+ICsjZGVmaW5lIENTSV9DT05UUk9MX1JFRwkJCTB4MDQwQwo+ICsjZGVmaW5lCQlD U0lfTU9ERQkJQklUKDE1KQo+ICsjZGVmaW5lCQlUWEhTTUQJCQlCSVQoNykKPiArI2RlZmluZQkJ Tk9MKHZhbCkJCUZJRUxEX1BSRVAoR0VOTUFTSygyLCAxKSwgKHZhbCkpCj4gKwo+ICsjZGVmaW5l IENTSV9DT05GV19SRUcJCQkweDA1MDAKPiArI2RlZmluZQkJTU9ERSh2YWwpCQlGSUVMRF9QUkVQ KEdFTk1BU0soMzEsIDI5KSwgKHZhbCkpCj4gKyNkZWZpbmUJCU1PREVfU0VUCQkweDUKPiArI2Rl ZmluZQkJQUREUkVTUyh2YWwpCQlGSUVMRF9QUkVQKEdFTk1BU0soMjgsIDI0KSwgKHZhbCkpCj4g KyNkZWZpbmUJCUNTSV9DT05UUk9MX0FERFJFU1MJMHgzCj4gKyNkZWZpbmUJCURBVEEodmFsKQkJ RklFTERfUFJFUChHRU5NQVNLKDE1LCAwKSwgKHZhbCkpCj4gKwo+ICsjZGVmaW5lIENTSV9TVEFS VF9SRUcJCQkweDA1MTgKPiArI2RlZmluZQkJU1RSVAkJCUJJVCgwKQo+ICsKPiArc3RhdGljIGNv bnN0IHN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgdGMzNTg3NDZfZGVmX2ZtdCA9IHsKPiArCS53 aWR0aAkJPSA2NDAsCj4gKwkuaGVpZ2h0CQk9IDQ4MCwKPiArCS5jb2RlCQk9IE1FRElBX0JVU19G TVRfVVlWWThfMlg4LAo+ICsJLmZpZWxkCQk9IFY0TDJfRklFTERfTk9ORSwKPiArCS5jb2xvcnNw YWNlCT0gVjRMMl9DT0xPUlNQQUNFX0RFRkFVTFQsCj4gKwkueWNiY3JfZW5jCT0gVjRMMl9ZQ0JD Ul9FTkNfREVGQVVMVCwKPiArCS5xdWFudGl6YXRpb24JPSBWNEwyX1FVQU5USVpBVElPTl9ERUZB VUxULAo+ICsJLnhmZXJfZnVuYwk9IFY0TDJfWEZFUl9GVU5DX0RFRkFVTFQsCj4gK307Cj4gKwo+ ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHRjMzU4NzQ2X3N1cHBsaWVzW10gPSB7Cj4gKwki dmRkYyIsICJ2ZGRpbyIsICJ2ZGRtaXBpIgo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlUQzM1ODc0 Nl9TSU5LLAo+ICsJVEMzNTg3NDZfU09VUkNFLAo+ICsJVEMzNTg3NDZfTlJfUEFEUwo+ICt9Owo+ ICsKPiArc3RydWN0IHRjMzU4NzQ2IHsKPiArCXN0cnVjdCB2NGwyX3N1YmRldgkJc2Q7Cj4gKwlz dHJ1Y3QgbWVkaWFfcGFkCQlwYWRzW1RDMzU4NzQ2X05SX1BBRFNdOwo+ICsJc3RydWN0IHY0bDJf YXN5bmNfbm90aWZpZXIJbm90aWZpZXI7Cj4gKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10CW1i dXNmbXQ7CgpDb3VsZCB5b3UgdXNlIHRoZSBhY3RpdmUgc3RhdGUgQVBJIGluc3RlYWQgb2YgbWFu dWFsbHkgc3RvcmluZyBtYnVzZm10CmhlcmUgPyBJdCBpbnZvbHZlcwoKLSBJbXBsZW1lbnRpbmcg dGhlIC5pbml0X2NmZygpIG9wZXJhdGlvbgotIENhbGxpbmcgdjRsMl9zdWJkZXZfaW5pdF9maW5h bGl6ZSgpIGluIHByb2JlCi0gUmVwbGFjaW5nIGNhbGxzIHRvIF9fdGMzNTg3NDZfZ2V0X3BhZF9m b3JtYXQoKSB3aXRoCiAgdjRsMl9zdWJkZXZfZ2V0X3BhZF9mb3JtYXQoKQotIFByb3BhZ2F0aW5n IHRoZSBmb3JtYXQgZnJvbSBzaW5rIHRvIHNvdXJjZSBpbiB0YzM1ODc0Nl9zZXRfZm10KCkKLSBE cm9wcGluZyB0YzM1ODc0Nl9zcmNfbWJ1c19jb2RlKCkgZnJvbSB0YzM1ODc0Nl9nZXRfZm10KCkg YW5kIHNpbXBseQogIHJldHJpZXZpbmcgdGhlIGZvcm1hdCB1c2luZyB2NGwyX3N1YmRldl9nZXRf cGFkX2Zvcm1hdCgpIHRoZXJlCi0gRHJvcHBpbmcgdGhpcyBmaWVsZAoKVGhlIGZvcm1hdHMgZm9y IGJvdGggdGhlIEFDVElWRSBhbmQgVFJZIHN0YXRlcyB3aWxsIHRoZW4gYmUgc3RvcmVkIGluCnRo ZSBzdWJkZXYgc3RhdGUsIHVuY29uZGl0aW9uYWxseS4gWW91IGNhbiByZXRyaWV2ZSB0aGUgYWN0 aXZlIHN0YXRlCndpdGggdjRsMl9zdWJkZXZfZ2V0X2xvY2tlZF9hY3RpdmVfc3RhdGUoKSBpbiB0 YzM1ODc0Nl9zX3N0cmVhbSgpLgoKPiArCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludAljc2lf dmVwOwo+ICsKPiArCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlcgljdHJsX2hkbDsKPiArCj4gKwlz dHJ1Y3QgcmVnbWFwCQkJKnJlZ21hcDsKPiArCXN0cnVjdCBjbGsJCQkqcmVmY2xrOwo+ICsJc3Ry dWN0IGdwaW9fZGVzYwkJKnJlc2V0X2dwaW87Cj4gKwlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0 YQlzdXBwbGllc1tBUlJBWV9TSVpFKHRjMzU4NzQ2X3N1cHBsaWVzKV07Cj4gKwo+ICsJc3RydWN0 IGNsa19odwkJCW1jbGtfaHc7Cj4gKwl1bnNpZ25lZCBsb25nCQkJbWNsa19yYXRlOwo+ICsJdTgJ CQkJbWNsa19wcmVkaXY7Cj4gKwl1MTYJCQkJbWNsa19wb3N0ZGl2Owo+ICsKPiArCXVuc2lnbmVk IGxvbmcJCQlwbGxfcmF0ZTsKPiArCXU4CQkJCXBsbF9wb3N0X2RpdjsKPiArCXUxNgkJCQlwbGxf cHJlX2RpdjsKPiArCXUxNgkJCQlwbGxfbXVsOwo+ICsKPiArCXN0cnVjdCB2NGwyX2N0cmwJCSpz ZW5zb3JfcGNsa19jdHJsOwo+ICsKPiArI2RlZmluZSBUQzM1ODc0Nl9WQl9NQVhfU0laRQkJKDUx MSAqIDMyKQo+ICsjZGVmaW5lIFRDMzU4NzQ2X1ZCX0RFRkFVTFRfU0laRQkgICgxICogMzIpCj4g Kwl1bnNpZ25lZCBpbnQJCQl2Yl9zaXplOyAvKiBWaWRlbyBidWZmZXIgc2l6ZSBpbiBiaXRzICov Cj4gKwo+ICsJc3RydWN0IHBoeV9jb25maWd1cmVfb3B0c19taXBpX2RwaHkgZHBoeV9jZmc7Cj4g K307Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0YzM1ODc0NiAqdG9fdGMzNTg3NDYoc3Ry dWN0IHY0bDJfc3ViZGV2ICpzZCkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3Ry dWN0IHRjMzU4NzQ2LCBzZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRjMzU4 NzQ2ICpjbGtfaHdfdG9fdGMzNTg3NDYoc3RydWN0IGNsa19odyAqaHcpCj4gK3sKPiArCXJldHVy biBjb250YWluZXJfb2YoaHcsIHN0cnVjdCB0YzM1ODc0NiwgbWNsa19odyk7Cj4gK30KPiArCj4g K3N0cnVjdCB0YzM1ODc0Nl9mb3JtYXQgewo+ICsJdTMyCQljb2RlOwo+ICsJYm9vbAkJY3NpX2Zv cm1hdDsKPiArCXVuc2lnbmVkIGNoYXIJYnVzX3dpZHRoOwo+ICsJdW5zaWduZWQgY2hhcglicHA7 Cj4gKwkvKiBSZWdpc3RlciB2YWx1ZXMgKi8KPiArCXU4CQlwZGZvcm1hdDsgLyogUGVyaXBoZXJh bCBEYXRhIEZvcm1hdCAqLwo+ICsJdTgJCXBkYXRhZjsgICAvKiBQYXJhbGxlbCBEYXRhIEZvcm1h dCBPcHRpb24gKi8KPiArfTsKPiArCj4gK2VudW0gewo+ICsJUERGT1JNQVRfUkFXOCA9IDAsCj4g KwlQREZPUk1BVF9SQVcxMCwKPiArCVBERk9STUFUX1JBVzEyLAo+ICsJUERGT1JNQVRfUkdCODg4 LAo+ICsJUERGT1JNQVRfUkdCNjY2LAo+ICsJUERGT1JNQVRfUkdCNTY1LAo+ICsJUERGT1JNQVRf WVVWNDIyXzhCSVQsCj4gKwkvKiBSRVNFUlZFRCA9IDcgKi8KPiArCVBERk9STUFUX1JBVzE0ID0g OCwKPiArCVBERk9STUFUX1lVVjQyMl8xMEJJVCwKPiArCVBERk9STUFUX1lVVjQ0NCwKPiArfTsK PiArCj4gKy8qIENoZWNrIHRjMzU4NzQ2X3NyY19tYnVzX2NvZGUoKSBpZiB5b3UgYWRkIG5ldyBm b3JtYXRzICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGMzNTg3NDZfZm9ybWF0IHRjMzU4NzQ2 X2Zvcm1hdHNbXSA9IHsKPiArCXsKPiArCQkuY29kZSA9IE1FRElBX0JVU19GTVRfVVlWWThfMlg4 LAo+ICsJCS5idXNfd2lkdGggPSA4LAo+ICsJCS5icHAgPSAxNiwKPiArCQkucGRmb3JtYXQgPSBQ REZPUk1BVF9ZVVY0MjJfOEJJVCwKPiArCQkucGRhdGFmID0gUERBVEFGX01PREUwLAo+ICsJfSwg ewo+ICsJCS5jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZOF8xWDE2LAo+ICsJCS5jc2lfZm9ybWF0 ID0gdHJ1ZSwKPiArCQkuYnVzX3dpZHRoID0gMTYsCj4gKwkJLmJwcCA9IDE2LAo+ICsJCS5wZGZv cm1hdCA9IFBERk9STUFUX1lVVjQyMl84QklULAo+ICsJCS5wZGF0YWYgPSBQREFUQUZfTU9ERTEs Cj4gKwl9LCB7Cj4gKwkJLmNvZGUgPSBNRURJQV9CVVNfRk1UX1lVWVY4XzFYMTYsCj4gKwkJLmNz aV9mb3JtYXQgPSB0cnVlLAo+ICsJCS5idXNfd2lkdGggPSAxNiwKPiArCQkuYnBwID0gMTYsCj4g KwkJLnBkZm9ybWF0ID0gUERGT1JNQVRfWVVWNDIyXzhCSVQsCj4gKwkJLnBkYXRhZiA9IFBEQVRB Rl9NT0RFMiwKPiArCX0sIHsKPiArCQkuY29kZSA9IE1FRElBX0JVU19GTVRfVVlWWTEwXzJYMTAs Cj4gKwkJLmJ1c193aWR0aCA9IDEwLAo+ICsJCS5icHAgPSAyMCwKPiArCQkucGRmb3JtYXQgPSBQ REZPUk1BVF9ZVVY0MjJfMTBCSVQsCj4gKwkJLnBkYXRhZiA9IFBEQVRBRl9NT0RFMCwgLyogZG9u J3QgY2FyZSAqLwo+ICsJfSwgewo+ICsJCS8qIGluIGRhdGFzaGVldCBsaXN0ZWQgYXMgWVVWNDQ0 ICovCj4gKwkJLmNvZGUgPSBNRURJQV9CVVNfRk1UX0dCUjg4OF8xWDI0LAo+ICsJCS5jc2lfZm9y bWF0ID0gdHJ1ZSwKPiArCQkuYnVzX3dpZHRoID0gMjQsCj4gKwkJLmJwcCA9IDI0LAo+ICsJCS5w ZGZvcm1hdCA9IFBERk9STUFUX1lVVjQ0NCwKClRoaXMgbG9va3MgcXVpdGUgd2VpcmQsIGRvZXMg MjQtYml0IFJHQiByZWFsbHkgbWFwIHRvIHRoZSBDU0ktMiBZVVY0NDQKZGF0YSB0eXBlID8KCj4g KwkJLnBkYXRhZiA9IFBEQVRBRl9NT0RFMCwgLyogZG9uJ3QgY2FyZSAqLwo+ICsJfSwKPiArfTsK PiArCj4gKy8qIEdldCBuLXRoIGZvcm1hdCBmb3IgcGFkICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgdGMzNTg3NDZfZm9ybWF0ICoKPiArdGMzNTg3NDZfZ2V0X2Zvcm1hdF9ieV9pZHgodW5zaWdu ZWQgaW50IHBhZCwgdW5zaWduZWQgaW50IGluZGV4KQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgaWR4 ID0gMDsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCWlmIChwYWQgPj0gVEMzNTg3NDZfTlJf UEFEUykKPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKClRoYXQgc2hvdWxkIGJlIHRlc3Rl ZCBieSB0aGUgc3ViZGV2IGNvcmUsIEkgdGhpbmsgeW91IGNhbiBkcm9wIHRoZQpjaGVjay4gU2Ft ZSBiZWxvdy4KCj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGMzNTg3NDZfZm9y bWF0cyk7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCB0YzM1ODc0Nl9mb3JtYXQgKmZtdCA9ICZ0 YzM1ODc0Nl9mb3JtYXRzW2ldOwo+ICsKPiArCQlpZiAoKHBhZCA9PSBUQzM1ODc0Nl9TT1VSQ0Ug JiYgZm10LT5jc2lfZm9ybWF0KSB8fAo+ICsJCSAgICAocGFkID09IFRDMzU4NzQ2X1NJTkspKSB7 Cj4gKwkJCWlmIChpZHggPT0gaW5kZXgpCj4gKwkJCQlyZXR1cm4gZm10Owo+ICsJCQlpZHgrKzsK PiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGMzNTg3NDZfZm9ybWF0ICoKPiArdGMzNTg3NDZfZ2V0X2Zv cm1hdF9ieV9jb2RlKHVuc2lnbmVkIGludCBwYWQsIHUzMiBjb2RlKQo+ICt7Cj4gKwl1bnNpZ25l ZCBpbnQgaTsKPiArCj4gKwlpZiAocGFkID49IFRDMzU4NzQ2X05SX1BBRFMpCj4gKwkJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGMz NTg3NDZfZm9ybWF0cyk7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCB0YzM1ODc0Nl9mb3JtYXQg KmZtdCA9ICZ0YzM1ODc0Nl9mb3JtYXRzW2ldOwo+ICsKPiArCQlpZiAocGFkID09IFRDMzU4NzQ2 X1NJTksgJiYgZm10LT5jb2RlID09IGNvZGUpCj4gKwkJCXJldHVybiBmbXQ7Cj4gKwo+ICsJCWlm IChwYWQgPT0gVEMzNTg3NDZfU09VUkNFICYmIGZtdC0+Y3NpX2Zvcm1hdCAmJgo+ICsJCSAgICBm bXQtPmNvZGUgPT0gY29kZSkKPiArCQkJcmV0dXJuIGZtdDsKCllvdSBjb3VsZCBhbHNvIHdyaXRl CgoJCWlmIChwYWQgPT0gVEMzNTg3NDZfU09VUkNFICYmICFmbXQtPmNzaV9mb3JtYXQpCgkJCWNv bnRpbnVlOwoKCQlpZiAoZm10LT5jb2RlID09IGNvZGUpCgkJCXJldHVybiBmbXQ7CgpVcCB0byB5 b3UuCgo+ICsJfQo+ICsKPiArCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdTMyIHRjMzU4NzQ2X3NyY19tYnVzX2NvZGUodTMyIGNvZGUpCj4gK3sKPiArCXN3aXRj aCAoY29kZSkgewo+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1VZVlk4XzJYODoKPiArCQlyZXR1cm4g TUVESUFfQlVTX0ZNVF9VWVZZOF8xWDE2Owo+ICsJY2FzZSBNRURJQV9CVVNfRk1UX1VZVlkxMF8y WDEwOgo+ICsJCXJldHVybiBNRURJQV9CVVNfRk1UX1VZVlkxMF8xWDIwOwo+ICsJZGVmYXVsdDoK PiArCQlyZXR1cm4gY29kZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdGMzNTg3NDZf d3JpdGVhYmxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCj4gK3sK PiArCXN3aXRjaCAocmVnKSB7Cj4gKwljYXNlIFNZU0NUTF9SRUcgLi4uIENTSV9TVEFSVF9SRUc6 Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0K PiArfQo+ICsKPiArc3RhdGljIGJvb2wgdGMzNTg3NDZfcmVhZGFibGVfcmVnKHN0cnVjdCBkZXZp Y2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKPiArewo+ICsJc3dpdGNoIChyZWcpIHsKPiArCWNh c2UgQ0hJUElEX1JFRyAuLi4gQ1NJX1NUQVJUX1JFRzoKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IHJlZ21hcF9jb25maWcgdGMzNTg3NDZfcmVnbWFwX2NvbmZpZyA9IHsKPiArCS5uYW1l ID0gInRjMzU4NzQ2IiwKPiArCS5yZWdfYml0cyA9IDE2LAo+ICsJLnZhbF9iaXRzID0gMTYsCj4g KwkubWF4X3JlZ2lzdGVyID0gQ1NJX1NUQVJUX1JFRywKPiArCS53cml0ZWFibGVfcmVnID0gdGMz NTg3NDZfd3JpdGVhYmxlX3JlZywKPiArCS5yZWFkYWJsZV9yZWcgPSB0YzM1ODc0Nl9yZWFkYWJs ZV9yZWcsCj4gKwkucmVnX2Zvcm1hdF9lbmRpYW4gPSBSRUdNQVBfRU5ESUFOX0JJRywKPiArCS52 YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fQklHLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCB0YzM1ODc0Nl93cml0ZShzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2LCB1MzIgcmVnLCB1 MzIgdmFsKQo+ICt7Cj4gKwlzaXplX3QgY291bnQ7Cj4gKwo+ICsJLyogMzItYml0IHJlZ2lzdGVy cyBzdGFydGluZyBmcm9tIENMV19EUEhZQ09OVFRYICovCj4gKwljb3VudCA9IHJlZyA8IENMV19E UEhZQ09OVFRYX1JFRyA/IDEgOiAyOwo+ICsKPiArCXJldHVybiByZWdtYXBfYnVsa193cml0ZSh0 YzM1ODc0Ni0+cmVnbWFwLCByZWcsICZ2YWwsIGNvdW50KTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB0YzM1ODc0Nl9yZWFkKHN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYsIHUzMiByZWcsIHUzMiAq dmFsKQo+ICt7Cj4gKwlzaXplX3QgY291bnQ7Cj4gKwo+ICsJLyogMzItYml0IHJlZ2lzdGVycyBz dGFydGluZyBmcm9tIENMV19EUEhZQ09OVFRYICovCj4gKwljb3VudCA9IHJlZyA8IENMV19EUEhZ Q09OVFRYX1JFRyA/IDEgOiAyOwo+ICsJKnZhbCA9IDA7Cj4gKwo+ICsJcmV0dXJuIHJlZ21hcF9i dWxrX3JlYWQodGMzNTg3NDYtPnJlZ21hcCwgcmVnLCB2YWwsIGNvdW50KTsKPiArfQo+ICsKPiAr c3RhdGljIGludAo+ICt0YzM1ODc0Nl91cGRhdGVfYml0cyhzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4 NzQ2LCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCkKPiArewo+ICsJdTMyIHRtcCwgb3JpZzsK PiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfcmVhZCh0YzM1ODc0NiwgcmVnLCAm b3JpZyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJdG1wID0gb3JpZyAm IH5tYXNrOwo+ICsJdG1wIHw9IHZhbCAmIG1hc2s7Cj4gKwo+ICsJcmV0dXJuIHRjMzU4NzQ2X3dy aXRlKHRjMzU4NzQ2LCByZWcsIHRtcCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZf c2V0X2JpdHMoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiwgdTMyIHJlZywgdTMyIGJpdHMpCj4g K3sKPiArCXJldHVybiB0YzM1ODc0Nl91cGRhdGVfYml0cyh0YzM1ODc0NiwgcmVnLCBiaXRzLCBi aXRzKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9jbGVhcl9iaXRzKHN0cnVjdCB0 YzM1ODc0NiAqdGMzNTg3NDYsIHUzMiByZWcsIHUzMiBiaXRzKQo+ICt7Cj4gKwlyZXR1cm4gdGMz NTg3NDZfdXBkYXRlX2JpdHModGMzNTg3NDYsIHJlZywgYml0cywgMCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgdGMzNTg3NDZfc3dfcmVzZXQoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NikKPiAr ewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSB0YzM1ODc0Nl9zZXRfYml0cyh0YzM1ODc0Niwg U1lTQ1RMX1JFRywgU1JFU0VUKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4g Kwl1ZGVsYXkoMTApOwo+ICsKPiArCXJldHVybiB0YzM1ODc0Nl9jbGVhcl9iaXRzKHRjMzU4NzQ2 LCBTWVNDVExfUkVHLCBTUkVTRVQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50Cj4gK3RjMzU4NzQ2 X2FwcGx5X3BsbF9jb25maWcoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NikKPiArewo+ICsJdTgg cG9zdCA9IHRjMzU4NzQ2LT5wbGxfcG9zdF9kaXY7Cj4gKwl1MTYgcHJlID0gdGMzNTg3NDYtPnBs bF9wcmVfZGl2Owo+ICsJdTE2IG11bCA9IHRjMzU4NzQ2LT5wbGxfbXVsOwo+ICsJdTMyIHZhbCwg bWFzazsKPiArCWludCBlcnI7Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfcmVhZCh0YzM1ODc0Niwg UExMQ1RMMV9SRUcsICZ2YWwpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiAr CS8qIERvbid0IHRvdWNoIHRoZSBQTEwgaWYgcnVubmluZyAqLwo+ICsJaWYgKEZJRUxEX0dFVChQ TExfRU4sIHZhbCkgPT0gMSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwkvKiBQcmUtZGl2IGFuZCBN dWx0aXBsaWNhdG9yIGhhdmUgYSBpbnRlcm5hbCArMSBsb2dpYyAqLwo+ICsJdmFsID0gUExMX1BS RChwcmUgLSAxKSB8IFBMTF9GQkQobXVsIC0gMSk7Cj4gKwltYXNrID0gUExMX1BSRF9NQVNLIHwg UExMX0ZCRF9NQVNLOwo+ICsJZXJyID0gdGMzNTg3NDZfdXBkYXRlX2JpdHModGMzNTg3NDYsIFBM TENUTDBfUkVHLCBtYXNrLCB2YWwpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsK PiArCXZhbCA9IFBMTF9GUlMoaWxvZzIocG9zdCkpIHwgUkVTRVRCIHwgUExMX0VOOwo+ICsJbWFz ayA9IFBMTF9GUlNfTUFTSyB8IFJFU0VUQiB8IFBMTF9FTjsKPiArCXRjMzU4NzQ2X3VwZGF0ZV9i aXRzKHRjMzU4NzQ2LCBQTExDVEwxX1JFRywgbWFzaywgdmFsKTsKPiArCWlmIChlcnIpCj4gKwkJ cmV0dXJuIGVycjsKPiArCj4gKwl1ZGVsYXkoMTAwMCk7Cj4gKwo+ICsJcmV0dXJuIHRjMzU4NzQ2 X3NldF9iaXRzKHRjMzU4NzQ2LCBQTExDVEwxX1JFRywgQ0tFTik7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdGMzNTg3NDZfYXBwbHlfbWlzY19jb25maWcoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0 NikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gdGMzNTg3NDYtPnNkLmRldjsKPiArCWNv bnN0IHN0cnVjdCB0YzM1ODc0Nl9mb3JtYXQgKmZtdDsKPiArCXUzMiB2YWw7Cj4gKwlpbnQgZXJy Owo+ICsKPiArCWZtdCA9IHRjMzU4NzQ2X2dldF9mb3JtYXRfYnlfY29kZShUQzM1ODc0Nl9TSU5L LCB0YzM1ODc0Ni0+bWJ1c2ZtdC5jb2RlKTsKPiArCWlmIChJU19FUlIoZm10KSkKPiArCQlyZXR1 cm4gUFRSX0VSUihmbXQpOwoKbWJ1c2ZtdC5jb2RlIGlzIHN1cHBvc2VkIHRvIGhhdmUgYmVlbiB2 YWxpZGF0ZWQsIHNvIHlvdSBjYW4gZHJvcCB0aGUKZXJyb3IgY2hlY2sgaGVyZS4KCj4gKwo+ICsJ LyogU2VsZiBkZWZpbmVkIENTSSB1c2VyIGRhdGEgdHlwZSBpZCdzIGFyZSBub3Qgc3VwcG9ydGVk IHlldCAqLwo+ICsJdmFsID0gUERGTVQoZm10LT5wZGZvcm1hdCk7Cj4gKwlkZXZfZGJnKGRldiwg IkRBVEFGTVQ6IDB4JXhcbiIsIHZhbCk7Cj4gKwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0 NiwgREFUQUZNVF9SRUcsIHZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ ICsJdmFsID0gUERBVEFGKGZtdC0+cGRhdGFmKTsKPiArCWRldl9kYmcoZGV2LCAiQ09ORkNUTFtQ REFUQUZdOiAweCV4XG4iLCBmbXQtPnBkYXRhZik7Cj4gKwllcnIgPSB0YzM1ODc0Nl91cGRhdGVf Yml0cyh0YzM1ODc0NiwgQ09ORkNUTF9SRUcsIFBEQVRBRl9NQVNLLCB2YWwpOwo+ICsJaWYgKGVy cikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXZhbCA9IHRjMzU4NzQ2LT52Yl9zaXplIC8gMzI7 Cj4gKwlkZXZfZGJnKGRldiwgIkZJRk9DVEw6ICV1ICgweCV4KVxuIiwgdmFsLCB2YWwpOwo+ICsJ ZXJyID0gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIEZJRk9DVExfUkVHLCB2YWwpOwo+ICsJaWYg KGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCS8qIFRvdGFsIG51bWJlciBvZiBieXRlcyBm b3IgZWFjaCBsaW5lL3dpZHRoICovCj4gKwl2YWwgPSB0YzM1ODc0Ni0+bWJ1c2ZtdC53aWR0aCAq IGZtdC0+YnBwIC8gODsKPiArCWRldl9kYmcoZGV2LCAiV09SRENOVDogJXUgKDB4JXgpXG4iLCB2 YWwsIHZhbCk7Cj4gKwlyZXR1cm4gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIFdPUkRDTlRfUkVH LCB2YWwpOwo+ICt9Cj4gKwo+ICsjaWZuZGVmIE1IWgoKV2hlcmUgd291bGQgaXQgYmUgcHJldmlv dXNseSBkZWZpbmVkID8gVGhpcyBzb3VuZHMgbGlrZSBhc2tpbmcgZm9yCnRyb3VibGUgbGF0ZXIu Cgo+ICsjZGVmaW5lIE1IWgkJKDEwMDAgKiAxMDAwKQo+ICsjZW5kaWYKPiArCj4gKy8qIFVzZSBN SHogYXMgYmFzZSBzbyB0aGUgZGl2IG5lZWRzIG5vIHU2NCAqLwo+ICtzdGF0aWMgdTMyIHRjMzU4 NzQ2X2NmZ190b19jbnQodW5zaWduZWQgaW50IGNmZ192YWwsCj4gKwkJCSAgICAgICB1bnNpZ25l ZCBpbnQgY2xrX21oeiwKPiArCQkJICAgICAgIHVuc2lnbmVkIGludCB0aW1lX2Jhc2UpCj4gK3sK PiArCXJldHVybiBESVZfUk9VTkRfVVAoY2ZnX3ZhbCAqIGNsa19taHosIHRpbWVfYmFzZSk7Cj4g K30KPiArCj4gK3N0YXRpYyB1MzIgdGMzNTg3NDZfcHNfdG9fY250KHVuc2lnbmVkIGludCBjZmdf dmFsLAo+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgY2xrX21oeikKPiArewo+ICsJcmV0dXJuIHRj MzU4NzQ2X2NmZ190b19jbnQoY2ZnX3ZhbCwgY2xrX21oeiwgVVNFQ19QRVJfU0VDKTsKPiArfQo+ ICsKPiArc3RhdGljIHUzMiB0YzM1ODc0Nl91c190b19jbnQodW5zaWduZWQgaW50IGNmZ192YWws Cj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBjbGtfbWh6KQo+ICt7Cj4gKwlyZXR1cm4gdGMzNTg3 NDZfY2ZnX3RvX2NudChjZmdfdmFsLCBjbGtfbWh6LCAxKTsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB0YzM1ODc0Nl9hcHBseV9kcGh5X2NvbmZpZyhzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2KQo+ ICt7Cj4gKwlzdHJ1Y3QgcGh5X2NvbmZpZ3VyZV9vcHRzX21pcGlfZHBoeSAqY2ZnID0gJnRjMzU4 NzQ2LT5kcGh5X2NmZzsKPiArCWJvb2wgbm9uX2NvbnRfY2xrID0gISEodGMzNTg3NDYtPmNzaV92 ZXAuYnVzLm1pcGlfY3NpMi5mbGFncyAmCj4gKwkJCSAgICAgICBWNEwyX01CVVNfQ1NJMl9OT05D T05USU5VT1VTX0NMT0NLKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRjMzU4NzQ2LT5zZC5k ZXY7Cj4gKwl1bnNpZ25lZCBsb25nIGhzX2J5dGVfY2xrLCBoZl9jbGs7Cj4gKwl1MzIgdmFsLCB2 YWwyLCBscHR4Y250Owo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBUaGUgaHNfYnl0ZV9jbGsgaXMg YWxzbyBjYWxsZWQgU1lTQ0xLIGluIHRoZSBleGNlbCBzaGVldCAqLwo+ICsJaHNfYnl0ZV9jbGsg PSBjZmctPmhzX2Nsa19yYXRlIC8gODsKPiArCWhzX2J5dGVfY2xrIC89IE1IWjsKPiArCWhmX2Ns ayA9IGhzX2J5dGVfY2xrIC8gMjsKPiArCj4gKwl2YWwgPSB0YzM1ODc0Nl91c190b19jbnQoY2Zn LT5pbml0LCBoZl9jbGspIC0gMTsKPiArCWRldl9kYmcoZGV2LCAiTElORUlOSVRDTlQ6ICV1ICgw eCV4KVxuIiwgdmFsLCB2YWwpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIExJ TkVJTklUQ05UX1JFRywgdmFsKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4g Kwl2YWwgPSB0YzM1ODc0Nl9wc190b19jbnQoY2ZnLT5scHgsIGhzX2J5dGVfY2xrKSAtIDE7Cj4g KwlscHR4Y250ID0gdmFsOwo+ICsJZGV2X2RiZyhkZXYsICJMUFRYVElNRUNOVDogJXUgKDB4JXgp XG4iLCB2YWwsIHZhbCk7Cj4gKwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0NiwgTFBUWFRJ TUVDTlRfUkVHLCB2YWwpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXZh bCA9IHRjMzU4NzQ2X3BzX3RvX2NudChjZmctPmNsa19wcmVwYXJlLCBoc19ieXRlX2NsaykgLSAx Owo+ICsJdmFsMiA9IHRjMzU4NzQ2X3BzX3RvX2NudChjZmctPmNsa196ZXJvLCBoc19ieXRlX2Ns aykgLSAxOwo+ICsJZGV2X2RiZyhkZXYsICJUQ0xLX1BSRVBBUkVDTlQ6ICV1ICgweCV4KVxuIiwg dmFsLCB2YWwpOwo+ICsJZGV2X2RiZyhkZXYsICJUQ0xLX1pFUk9DTlQ6ICV1ICgweCV4KVxuIiwg dmFsMiwgdmFsMik7Cj4gKwlkZXZfZGJnKGRldiwgIlRDTEtfSEVBREVSQ05UOiAweCV4XG4iLAo+ ICsJCSh1MzIpKFRDTEtfUFJFUEFSRUNOVCh2YWwpIHwgVENMS19aRVJPQ05UKHZhbDIpKSk7Cj4g KwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0NiwgVENMS19IRUFERVJDTlRfUkVHLAo+ICsJ CQkgICAgIFRDTEtfUFJFUEFSRUNOVCh2YWwpIHwgVENMS19aRVJPQ05UKHZhbDIpKTsKPiArCWlm IChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl2YWwgPSB0YzM1ODc0Nl9wc190b19jbnQo Y2ZnLT5jbGtfdHJhaWwsIGhzX2J5dGVfY2xrKTsKPiArCWRldl9kYmcoZGV2LCAiVENMS19UUkFJ TENOVDogJXUgKDB4JXgpXG4iLCB2YWwsIHZhbCk7Cj4gKwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0 YzM1ODc0NiwgVENMS19UUkFJTENOVF9SRUcsIHZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVy biBlcnI7Cj4gKwo+ICsJdmFsID0gdGMzNTg3NDZfcHNfdG9fY250KGNmZy0+aHNfcHJlcGFyZSwg aHNfYnl0ZV9jbGspIC0gMTsKPiArCXZhbDIgPSB0YzM1ODc0Nl9wc190b19jbnQoY2ZnLT5oc196 ZXJvLCBoc19ieXRlX2NsaykgLSAxOwo+ICsJZGV2X2RiZyhkZXYsICJUSFNfUFJFUEFSRUNOVDog JXUgKDB4JXgpXG4iLCB2YWwsIHZhbCk7Cj4gKwlkZXZfZGJnKGRldiwgIlRIU19aRVJPQ05UOiAl dSAoMHgleClcbiIsIHZhbDIsIHZhbDIpOwo+ICsJZGV2X2RiZyhkZXYsICJUSFNfSEVBREVSQ05U OiAweCV4XG4iLAo+ICsJCSh1MzIpKFRIU19QUkVQQVJFQ05UKHZhbCkgfCBUSFNfWkVST0NOVCh2 YWwyKSkpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIFRIU19IRUFERVJDTlRf UkVHLAo+ICsJCQkgICAgIFRIU19QUkVQQVJFQ05UKHZhbCkgfCBUSFNfWkVST0NOVCh2YWwyKSk7 Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJLyogVFdBS0VVUCA+IDFtcyBp biBscHR4Y250IHN0ZXBzICovCj4gKwl2YWwgPSB0YzM1ODc0Nl91c190b19jbnQoY2ZnLT53YWtl dXAsIGhzX2J5dGVfY2xrKTsKPiArCXZhbCA9IHZhbCAvIChscHR4Y250ICsgMSkgLSAxOwo+ICsJ ZGV2X2RiZyhkZXYsICJUV0FLRVVQOiAldSAoMHgleClcbiIsIHZhbCwgdmFsKTsKPiArCWVyciA9 IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBUV0FLRVVQX1JFRywgdmFsKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwl2YWwgPSB0YzM1ODc0Nl9wc190b19jbnQoY2ZnLT5j bGtfcG9zdCwgaHNfYnl0ZV9jbGspOwo+ICsJZGV2X2RiZyhkZXYsICJUQ0xLX1BPU1RDTlQ6ICV1 ICgweCV4KVxuIiwgdmFsLCB2YWwpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYs IFRDTEtfUE9TVENOVF9SRUcsIHZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4g Kwo+ICsJdmFsID0gdGMzNTg3NDZfcHNfdG9fY250KGNmZy0+aHNfdHJhaWwsIGhzX2J5dGVfY2xr KTsKPiArCWRldl9kYmcoZGV2LCAiVEhTX1RSQUlMQ05UOiAldSAoMHgleClcbiIsIHZhbCwgdmFs KTsKPiArCWVyciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBUSFNfVFJBSUxDTlRfUkVHLCB2 YWwpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWRldl9kYmcoZGV2LCAi Q09OVENMS01PREU6ICV1Iiwgbm9uX2NvbnRfY2xrID8gMCA6IDEpOwo+ICsJcmV0dXJuICB0YzM1 ODc0Nl93cml0ZSh0YzM1ODc0NiwgVFhPUFRJT05DTlRSTF9SRUcsIG5vbl9jb250X2NsayA/IDAg OiAxKTsKPiArfQo+ICsKPiArI2RlZmluZSBNQVhfREFUQV9MQU5FUyA0Cj4gKwo+ICtzdGF0aWMg aW50IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbGFuZXMoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0Niwg aW50IGVuYWJsZSkKPiArewo+ICsJdW5zaWduZWQgaW50IGxhbmVzID0gdGMzNTg3NDYtPmRwaHlf Y2ZnLmxhbmVzOwo+ICsJdW5zaWduZWQgaW50IGxhbmU7Cj4gKwl1MzIgcmVnLCB2YWw7Cj4gKwlp bnQgZXJyOwo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X3VwZGF0ZV9iaXRzKHRjMzU4NzQ2LCBDT05G Q1RMX1JFRywgREFUQUxBTkVfTUFTSywKPiArCQkJCSAgIGxhbmVzIC0gMSk7Cj4gKwlpZiAoZXJy KQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJLyogQ2xvY2sgbGFuZSAqLwo+ICsJdmFsID0gZW5h YmxlID8gMCA6IExBTkVESVNBQkxFOwo+ICsJZGV2X2RiZyh0YzM1ODc0Ni0+c2QuZGV2LCAiQ0xX X0NOVFJMOiAweCV4XG4iLCB2YWwpOwo+ICsJZXJyID0gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYs IENMV19DTlRSTF9SRUcsIHZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ ICsJZm9yIChsYW5lID0gMDsgbGFuZSA8IE1BWF9EQVRBX0xBTkVTOyBsYW5lKyspIHsKPiArCQkv KiBEYXRhIGxhbmVzICovCj4gKwkJcmVnID0gRDBXX0NOVFJMX1JFRyArIGxhbmUgKiAweDQ7Cj4g KwkJdmFsID0gKGVuYWJsZSAmJiBsYW5lIDwgbGFuZXMpID8gMCA6IExBTkVESVNBQkxFOwo+ICsK PiArCQlkZXZfZGJnKHRjMzU4NzQ2LT5zZC5kZXYsICJEJXVXX0NOVFJMOiAweCV4XG4iLCBsYW5l LCB2YWwpOwo+ICsJCWVyciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCByZWcsIHZhbCk7Cj4g KwkJaWYgKGVycikKPiArCQkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwl2YWwgPSAwOwo+ICsJ aWYgKGVuYWJsZSkgewo+ICsJCS8qIENsb2NrIGxhbmUgKi8KPiArCQl2YWwgfD0gQklUKDApOwo+ ICsKPiArCQkvKiBEYXRhIGxhbmVzICovCj4gKwkJZm9yIChsYW5lID0gMTsgbGFuZSA8PSBsYW5l czsgbGFuZSsrKQo+ICsJCQl2YWwgfD0gQklUKGxhbmUpOwo+ICsJfQo+ICsKPiArCWRldl9kYmco dGMzNTg3NDYtPnNkLmRldiwgIkhTVFhWUkVHRU46IDB4JXhcbiIsIHZhbCk7Cj4gKwlyZXR1cm4g dGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIEhTVFhWUkVHRU5fUkVHLCB2YWwpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbW9kdWxlKHN0cnVjdCB0YzM1ODc0NiAq dGMzNTg3NDYsIGludCBlbmFibGUpCj4gK3sKPiArCXVuc2lnbmVkIGludCBsYW5lcyA9IHRjMzU4 NzQ2LT5kcGh5X2NmZy5sYW5lczsKPiArCWludCBlcnI7Cj4gKwo+ICsJLyoKPiArCSAqIFNUQVJU IGFuZCBTVFJUIGFyZSBvbmx5IHJlc2V0ZWQvZGlzYWJsZWQgYnkgc3cgcmVzZXQuIFRoaXMgaXMK PiArCSAqIHJlcXVpcmVkIHRvIHB1dCB0aGUgbGFuZSBzdGF0ZSBiYWNrIGludG8gTFAtMTEgc3Rh dGUuIFRoZSBzdyByZXNldAo+ICsJICogZG9uJ3QgcmVzZXQgcmVnaXN0ZXIgdmFsdWVzLgo+ICsJ ICovCj4gKwlpZiAoIWVuYWJsZSkKPiArCQlyZXR1cm4gdGMzNTg3NDZfc3dfcmVzZXQodGMzNTg3 NDYpOwo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBTVEFSVENOVFJMX1JF RywgU1RBUlQpOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWVyciA9IHRj MzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBDU0lfU1RBUlRfUkVHLCBTVFJUKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwkvKiBDU0lfQ09OVFJPTF9SRUcgaXMgb25seSBpbmRp cmVjdCBhY2Nlc3NpYmxlICovCj4gKwlyZXR1cm4gdGMzNTg3NDZfd3JpdGUodGMzNTg3NDYsIENT SV9DT05GV19SRUcsCj4gKwkJCSAgICAgIE1PREUoTU9ERV9TRVQpIHwKPiArCQkJICAgICAgQURE UkVTUyhDU0lfQ09OVFJPTF9BRERSRVNTKSB8Cj4gKwkJCSAgICAgIERBVEEoQ1NJX01PREUgfCBU WEhTTUQgfCBOT0wobGFuZXMgLSAxKSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2 X2VuYWJsZV9wYXJhbGxlbF9wb3J0KHN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYsIGludCBlbmFi bGUpCj4gK3sKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKGVuYWJsZSkgewo+ICsJCWVyciA9IHRj MzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBQUF9NSVNDX1JFRywgMCk7Cj4gKwkJaWYgKGVycikKPiAr CQkJcmV0dXJuIGVycjsKPiArCj4gKwkJcmV0dXJuIHRjMzU4NzQ2X3NldF9iaXRzKHRjMzU4NzQ2 LCBDT05GQ1RMX1JFRywgUFBFTik7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfc2V0X2Jp dHModGMzNTg3NDYsIFBQX01JU0NfUkVHLCBGUk1TVE9QKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0 dXJuIGVycjsKPiArCj4gKwllcnIgPSB0YzM1ODc0Nl9jbGVhcl9iaXRzKHRjMzU4NzQ2LCBDT05G Q1RMX1JFRywgUFBFTik7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJcmV0 dXJuIHRjMzU4NzQ2X3NldF9iaXRzKHRjMzU4NzQ2LCBQUF9NSVNDX1JFRywgUlNUUFRSKTsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnRjMzU4NzQ2X2dldF9y ZW1vdGVfc2Qoc3RydWN0IG1lZGlhX3BhZCAqcGFkKQo+ICt7Cj4gKwlwYWQgPSBtZWRpYV9wYWRf cmVtb3RlX3BhZF9maXJzdChwYWQpOwo+ICsJaWYgKCFwYWQpCj4gKwkJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsJcmV0dXJuIG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihwYWQtPmVudGl0eSk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCwgaW50IGVuYWJsZSkKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IHRv X3RjMzU4NzQ2KHNkKTsKPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc3JjOwo+ICsJaW50IGVycjsK PiArCj4gKwlkZXZfZGJnKHNkLT5kZXYsICIlc2FibGVcbiIsIGVuYWJsZSA/ICJlbiIgOiAiZGlz Iik7Cj4gKwo+ICsJc3JjID0gdGMzNTg3NDZfZ2V0X3JlbW90ZV9zZCgmdGMzNTg3NDYtPnBhZHNb VEMzNTg3NDZfU0lOS10pOwo+ICsJaWYgKCFzcmMpCj4gKwkJcmV0dXJuIC1FUElQRTsKPiArCj4g KwlpZiAoZW5hYmxlKSB7Cj4gKwkJZXJyID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldChzZC0+ ZGV2KTsKPiArCQlpZiAoZXJyKQo+ICsJCQlyZXR1cm4gZXJyOwo+ICsKPiArCQllcnIgPSB0YzM1 ODc0Nl9lbmFibGVfY3NpX2xhbmVzKHRjMzU4NzQ2LCAxKTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJ CXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koc2QtPmRldik7Cj4gKwkJCXBtX3J1bnRpbWVfcHV0 X3N5bmNfYXV0b3N1c3BlbmQoc2QtPmRldik7Cj4gKwkJCXJldHVybiBlcnI7CgpMb29rcyBsaWtl IGEgY2FuZGlkYXRlIGZvciBhIGdvdG8gc3RhdGVtZW50LgoKPiArCQl9Cj4gKwo+ICsJCWVyciA9 IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbW9kdWxlKHRjMzU4NzQ2LCAxKTsKPiArCQlpZiAoZXJyKSB7 Cj4gKwkJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koc2QtPmRldik7Cj4gKwkJCXBtX3J1bnRp bWVfcHV0X3N5bmNfYXV0b3N1c3BlbmQoc2QtPmRldik7Cj4gKwkJCXJldHVybiBlcnI7Cj4gKwkJ fQo+ICsKPiArCQllcnIgPSB0YzM1ODc0Nl9lbmFibGVfcGFyYWxsZWxfcG9ydCh0YzM1ODc0Niwg MSk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KHNkLT5k ZXYpOwo+ICsJCQlwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNwZW5kKHNkLT5kZXYpOwo+ICsJ CQlyZXR1cm4gZXJyOwo+ICsJCX0KPiArCj4gKwkJZXJyID0gdjRsMl9zdWJkZXZfY2FsbChzcmMs IHZpZGVvLCBzX3N0cmVhbSwgMSk7Cj4gKwkJaWYgKGVycikgewo+ICsJCQlwbV9ydW50aW1lX21h cmtfbGFzdF9idXN5KHNkLT5kZXYpOwo+ICsJCQlwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNw ZW5kKHNkLT5kZXYpOwo+ICsJCX0KPiArCj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwkv Kgo+ICsJICogTGFuZSBkaXNhYmxlIHRyaWdnZXIgc3RhdGUgY2hhbmdlIGZyb20gTFAtMTEgdG8g TFAtMDAKPiArCSAqIHRoZXJlZm9yZSBpdCBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIENTSSBtb2Rp bGUgaXMgZGlzYWJsZWQuCj4gKwkgKi8KPiArCWVyciA9IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbGFu ZXModGMzNTg3NDYsIDApOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWVy ciA9IHRjMzU4NzQ2X2VuYWJsZV9jc2lfbW9kdWxlKHRjMzU4NzQ2LCAwKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllcnIgPSB0YzM1ODc0Nl9lbmFibGVfcGFyYWxsZWxf cG9ydCh0YzM1ODc0NiwgMCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJ cG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShzZC0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5 bmNfYXV0b3N1c3BlbmQoc2QtPmRldik7Cj4gKwo+ICsJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwo c3JjLCB2aWRlbywgc19zdHJlYW0sIDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2 X2VudW1fbWJ1c19jb2RlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCj4gKwkJCQkgICBzdHJ1Y3Qg djRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAo+ICsJCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2 X21idXNfY29kZV9lbnVtICpjb2RlKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgdGMzNTg3NDZfZm9y bWF0ICpmbXQ7Cj4gKwo+ICsJZm10ID0gdGMzNTg3NDZfZ2V0X2Zvcm1hdF9ieV9pZHgoY29kZS0+ cGFkLCBjb2RlLT5pbmRleCk7Cj4gKwlpZiAoSVNfRVJSKGZtdCkpCj4gKwkJcmV0dXJuIFBUUl9F UlIoZm10KTsKPiArCj4gKwljb2RlLT5jb2RlID0gZm10LT5jb2RlOwo+ICsKPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqCj4gK19fdGMz NTg3NDZfZ2V0X3BhZF9mb3JtYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiArCQkJICBzdHJ1 Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAo+ICsJCQkgIHVuc2lnbmVkIGludCBwYWQs IHUzMiB3aGljaCkKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IHRvX3RjMzU4 NzQ2KHNkKTsKPiArCj4gKwlzd2l0Y2ggKHdoaWNoKSB7Cj4gKwljYXNlIFY0TDJfU1VCREVWX0ZP Uk1BVF9UUlk6Cj4gKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KHNkLCBzZF9z dGF0ZSwgcGFkKTsKPiArCWNhc2UgVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRToKPiArCQlyZXR1 cm4gJnRjMzU4NzQ2LT5tYnVzZm10Owo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gTlVMTDsKPiAr CX0KPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9nZXRfZm10KHN0cnVjdCB2NGwyX3N1 YmRldiAqc2QsCj4gKwkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc3RhdGUgKnNkX3N0YXRlLAo+ ICsJCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQo+ICt7Cj4gKwlzdHJ1 Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gdG9fdGMzNTg3NDYoc2QpOwo+ICsKPiArCWlmIChmb3Jt YXQtPnBhZCA+PSBUQzM1ODc0Nl9OUl9QQURTKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CWZvcm1hdC0+Zm9ybWF0ID0gdGMzNTg3NDYtPm1idXNmbXQ7Cj4gKwlpZiAoZm9ybWF0LT5wYWQg PT0gVEMzNTg3NDZfU09VUkNFKQo+ICsJCWZvcm1hdC0+Zm9ybWF0LmNvZGUgPSB0YzM1ODc0Nl9z cmNfbWJ1c19jb2RlKHRjMzU4NzQ2LT5tYnVzZm10LmNvZGUpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2X3NldF9mbXQoc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCwKPiArCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zdGF0ZSAqc2Rfc3RhdGUsCj4gKwkJ CSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmb3JtYXQpCj4gK3sKPiArCXN0cnVjdCB2 NGwyX21idXNfZnJhbWVmbXQgKm1idXNmb3JtYXQ7Cj4gKwljb25zdCBzdHJ1Y3QgdGMzNTg3NDZf Zm9ybWF0ICpmbXQ7Cj4gKwo+ICsJaWYgKGZvcm1hdC0+cGFkID49IFRDMzU4NzQ2X05SX1BBRFMp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogVGhlIHNyYyBmb2xsb3dzIHRoZSBwcm9w ZXJ0aWVzIGZyb20gdGhlIHNpbmsgKi8KPiArCWlmIChmb3JtYXQtPnBhZCA9PSBUQzM1ODc0Nl9T T1VSQ0UpCj4gKwkJcmV0dXJuIHRjMzU4NzQ2X2dldF9mbXQoc2QsIHNkX3N0YXRlLCBmb3JtYXQp Owo+ICsKPiArCW1idXNmb3JtYXQgPSBfX3RjMzU4NzQ2X2dldF9wYWRfZm9ybWF0KHNkLCBzZF9z dGF0ZSwgZm9ybWF0LT5wYWQsCj4gKwkJCQkJICAgICAgIGZvcm1hdC0+d2hpY2gpOwo+ICsJaWYg KCFtYnVzZm9ybWF0KQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCWZtdCA9IHRjMzU4NzQ2 X2dldF9mb3JtYXRfYnlfY29kZShmb3JtYXQtPnBhZCwgZm9ybWF0LT5mb3JtYXQuY29kZSk7Cj4g KwlpZiAoSVNfRVJSKGZtdCkpCj4gKwkJZm10ID0gdGMzNTg3NDZfZ2V0X2Zvcm1hdF9ieV9jb2Rl KGZvcm1hdC0+cGFkLCB0YzM1ODc0Nl9kZWZfZm10LmNvZGUpOwo+ICsKPiArCWZvcm1hdC0+Zm9y bWF0LmNvZGUgPSBmbXQtPmNvZGU7Cj4gKwlmb3JtYXQtPmZvcm1hdC5maWVsZCA9IFY0TDJfRklF TERfTk9ORTsKPiArCj4gKwlkZXZfZGJnKHNkLT5kZXYsICJVcGRhdGUgZm9ybWF0OiAldXgldSBj b2RlOjB4JXggLT4gJXV4JXUgY29kZToweCV4IiwKPiArCQltYnVzZm9ybWF0LT53aWR0aCwgbWJ1 c2Zvcm1hdC0+aGVpZ2h0LCBtYnVzZm9ybWF0LT5jb2RlLAo+ICsJCWZvcm1hdC0+Zm9ybWF0Lndp ZHRoLCBmb3JtYXQtPmZvcm1hdC5oZWlnaHQsIGZvcm1hdC0+Zm9ybWF0LmNvZGUpOwo+ICsKPiAr CSptYnVzZm9ybWF0ID0gZm9ybWF0LT5mb3JtYXQ7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRjMzU4NzQ2X2ZpbmRfcGxsX3NldHRpbmdzKHN0cnVj dCB0YzM1ODc0NiAqdGMzNTg3NDYsCj4gKwkJCQkJCXVuc2lnbmVkIGxvbmcgcmVmY2xrLAo+ICsJ CQkJCQl1bnNpZ25lZCBsb25nIGZvdXQpCj4gKwo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSB0YzM1ODc0Ni0+c2QuZGV2Owo+ICsJdW5zaWduZWQgbG9uZyBiZXN0X2ZyZXEgPSAwOwo+ICsJ dTMyIG1pbl9kZWx0YSA9IDB4ZmZmZmZmZmY7Cj4gKwl1MTYgcHJlZGl2X21heCA9IDE3Owo+ICsJ dTE2IHByZWRpdl9taW4gPSAxOwo+ICsJdTE2IG1fYmVzdCwgbXVsOwo+ICsJdTE2IHBfYmVzdCwg cDsKPiArCXU4IHBvc3RkaXY7Cj4gKwo+ICsJaWYgKGZvdXQgPiAxMDAwICogTUhaKSB7Cj4gKwkJ ZGV2X2VycihkZXYsICJIUy1DbG9jayBhYm92ZSAxIEdoeiBhcmUgbm90IHN1cHBvcnRlZFxuIik7 Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9IGVsc2UgaWYgKGZvdXQgPj0gNTAwICogTUhaKQo+ICsJCXBv c3RkaXYgPSAxOwo+ICsJZWxzZSBpZiAoZm91dCA+PSAyNTAgKiBNSFopCj4gKwkJcG9zdGRpdiA9 IDI7Cj4gKwllbHNlIGlmIChmb3V0ID49IDEyNSAqIE1IWikKPiArCQlwb3N0ZGl2ID0gNDsKPiAr CWVsc2UKPiArCQlwb3N0ZGl2ID0gODsKPiArCj4gKwlmb3IgKHAgPSBwcmVkaXZfbWluOyBwIDw9 IHByZWRpdl9tYXg7IHArKykgewo+ICsJCXVuc2lnbmVkIGxvbmcgZGVsdGEsIGZpbjsKPiArCQl1 NjQgdG1wOwo+ICsKPiArCQlmaW4gPSBESVZfUk9VTkRfQ0xPU0VTVChyZWZjbGssIHApOwo+ICsJ CWlmIChmaW4gPCA0ICogTUhaIHx8IGZpbiA+IDQwICogTUhaKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJdG1wID0gZm91dCAqIHAgKiBwb3N0ZGl2Owo+ICsJCWRvX2Rpdih0bXAsIGZpbik7Cj4g KwkJbXVsID0gdG1wOwo+ICsJCWlmIChtdWwgPiA1MTEpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiAr CQl0bXAgPSBtdWwgKiBmaW47Cj4gKwkJZG9fZGl2KHRtcCwgcCAqIHBvc3RkaXYpOwo+ICsKPiAr CQlkZWx0YSA9IGFicyhmb3V0IC0gdG1wKTsKPiArCQlpZiAoZGVsdGEgPCBtaW5fZGVsdGEpIHsK PiArCQkJcF9iZXN0ID0gcDsKPiArCQkJbV9iZXN0ID0gbXVsOwo+ICsJCQltaW5fZGVsdGEgPSBk ZWx0YTsKPiArCQkJYmVzdF9mcmVxID0gdG1wOwo+ICsJCX07Cj4gKwo+ICsJCWlmIChkZWx0YSA9 PSAwKQo+ICsJCQlicmVhazsKPiArCX07Cj4gKwo+ICsJaWYgKCFiZXN0X2ZyZXEpIHsKPiArCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCBmaW5kIFBMTCBmcmVxdWVuY3lcbiIpOwo+ICsJCXJldHVybiAw Owo+ICsJfQo+ICsKPiArCXRjMzU4NzQ2LT5wbGxfcG9zdF9kaXYgPSBwb3N0ZGl2Owo+ICsJdGMz NTg3NDYtPnBsbF9wcmVfZGl2ID0gcF9iZXN0Owo+ICsJdGMzNTg3NDYtPnBsbF9tdWwgPSBtX2Jl c3Q7Cj4gKwo+ICsJaWYgKGJlc3RfZnJlcSAhPSBmb3V0KQo+ICsJCWRldl93YXJuKGRldiwgIlJl cXVlc3QgUExMIGZyZXE6JWx1LCBmb3VuZCBQTEwgZnJlcTolbHVcbiIsCj4gKwkJCSBmb3V0LCBi ZXN0X2ZyZXEpOwo+ICsKPiArCWRldl9kYmcoZGV2LCAiRm91bmQgUExMIHNldHRpbmdzOiBmcmVx OiVsdSBwcmVkaXY6JXUgbXVsdGk6JXUgcG9zdGRpdjoldVxuIiwKPiArCQliZXN0X2ZyZXEsIHBf YmVzdCwgbV9iZXN0LCBwb3N0ZGl2KTsKPiArCj4gKwlyZXR1cm4gYmVzdF9mcmVxOwo+ICt9Cj4g Kwo+ICsjZGVmaW5lIFRDMzU4NzQ2X1BSRUNJU0lPTiAxMAo+ICsKPiArc3RhdGljIGludAo+ICt0 YzM1ODc0Nl9saW5rX3ZhbGlkYXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCBtZWRp YV9saW5rICpsaW5rLAo+ICsJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpzb3Vy Y2VfZm10LAo+ICsJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpzaW5rX2ZtdCkK PiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IHRvX3RjMzU4NzQ2KHNkKTsKPiAr CXVuc2lnbmVkIGxvbmcgY3NpX2JpdHJhdGUsIHNlbnNvcl9iaXRyYXRlOwo+ICsJY29uc3Qgc3Ry dWN0IHRjMzU4NzQ2X2Zvcm1hdCAqZm10Owo+ICsJdW5zaWduZWQgaW50IGZpZm9fc3osIHRtcCwg bjsKPiArCXM2NCBzZW5zb3JfcGNsa19yYXRlOwo+ICsKPiArCS8qIENoZWNrIHRoZSBGSUZPIHNl dHRpbmdzICovCj4gKwlmbXQgPSB0YzM1ODc0Nl9nZXRfZm9ybWF0X2J5X2NvZGUoVEMzNTg3NDZf U0lOSywgdGMzNTg3NDYtPm1idXNmbXQuY29kZSk7Cj4gKwlpZiAoSVNfRVJSKGZtdCkpCj4gKwkJ cmV0dXJuIFBUUl9FUlIoZm10KTsKPiArCj4gKwlzZW5zb3JfcGNsa19yYXRlID0gdjRsMl9jdHJs X2dfY3RybF9pbnQ2NCh0YzM1ODc0Ni0+c2Vuc29yX3BjbGtfY3RybCk7Cj4gKwlzZW5zb3JfYml0 cmF0ZSA9IHNlbnNvcl9wY2xrX3JhdGUgKiBmbXQtPmJ1c193aWR0aDsKPiArCj4gKwljc2lfYml0 cmF0ZSA9IHRjMzU4NzQ2LT5kcGh5X2NmZy5sYW5lcyAqIHRjMzU4NzQ2LT5wbGxfcmF0ZTsKPiAr Cj4gKwlkZXZfZGJnKHRjMzU4NzQ2LT5zZC5kZXYsCj4gKwkJIkZpZm8gc2V0dGluZ3MgcGFyYW1z OiBzZW5zb3ItYml0cmF0ZTolbHUgY3NpLWJpdHJhdGU6JWx1IiwKPiArCQlzZW5zb3JfYml0cmF0 ZSwgY3NpX2JpdHJhdGUpOwo+ICsKPiArCS8qIEF2b2lkIHBvc3NpYmxlIEZJRk8gb3ZlcmZsb3dz ICovCj4gKwlpZiAoY3NpX2JpdHJhdGUgPCBzZW5zb3JfYml0cmF0ZSkgewo+ICsJCWRldl9lcnIo c2QtPmRldiwKPiArCQkJIkxpbmsgdmFsaWRhdGlvbiBmYWlsZWQgY3NpLWJpdHJhdGU6JWx1IDwg c2Vuc29yLWJpdHJhdGU6JWx1XG4iLAo+ICsJCQljc2lfYml0cmF0ZSwgc2Vuc29yX2JpdHJhdGUp Owo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ICsKPiArCS8qIEJlc3QgY2FzZSAqLwo+ICsJ aWYgKGNzaV9iaXRyYXRlID09IHNlbnNvcl9iaXRyYXRlKSB7Cj4gKwkJdGMzNTg3NDYtPnZiX3Np emUgPSBUQzM1ODc0Nl9WQl9ERUZBVUxUX1NJWkU7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ ICsJLyoKPiArCSAqIEF2b2lkIHBvc3NpYmxlIEZJRk8gdW5kZXJmbG93IGluIGNhc2Ugb2YKPiAr CSAqIGNzaV9iaXRyYXRlID4gc2Vuc29yX2JpdHJhdGUuIEZvciBzdWNoIGNhc2UgdGhlIGNoaXAg aGFzIGEgaW50ZXJuYWwKPiArCSAqIGZpZm8gd2hpY2ggY2FuIGJlIHVzZWQgdG8gZGVsYXkgdGhl IGxpbmUgb3V0cHV0Lgo+ICsJICoKPiArCSAqIEZpZm8gc2l6ZSBjYWxjdWxhdGlvbjoKPiArCSAq Cj4gKwkgKiBmaWZvLXN6LCBpbWFnZS13aWR0aCAtIGluIGJpdHMKPiArCSAqIHNiciAgICAgICAg ICAgICAgICAgIC0gc2Vuc29yX2JpdHJhdGUgaW4gYml0cy9zCj4gKwkgKiBjc2lyICAgICAgICAg ICAgICAgICAtIGNzaV9iaXRyYXRlIGluIGJpdHMvcwo+ICsJICoKPiArCSAqICAgICAgICAgICAg ICAgIDEgICAgICAgICAgICAgMSAgICAgIDEKPiArCSAqIGltYWdlLXdpZHRoICogLS0tICsgZmlm by1zeiAtLS0gPj0gLS0tLSAqIGltYWdlLXdpZHRoCj4gKwkgKiAgICAgICAgICAgICAgIHNiciAg ICAgICAgICAgc2JyICAgIGNzaXIKPiArCSAqCj4gKwkgKiBmaWZvLXN6ID49IGFicyhzYnIvY3Np ciAqIGltYWdlLXdpZHRoIC0gaW1hZ2Utd2lkdGgpCj4gKwkgKiAgICAgICAgICAgICAgICBgLS0t LS3CtAo+ICsJICogICAgICAgICAgICAgICAgICAgbgo+ICsJICoKPiArCSAqLwo+ICsKPiArCXNl bnNvcl9iaXRyYXRlIC89IFRDMzU4NzQ2X1BSRUNJU0lPTjsKPiArCW4gPSBjc2lfYml0cmF0ZSAv IHNlbnNvcl9iaXRyYXRlOwo+ICsJdG1wID0gKHRjMzU4NzQ2LT5tYnVzZm10LndpZHRoICogVEMz NTg3NDZfUFJFQ0lTSU9OKSAvIG47Cj4gKwlmaWZvX3N6ID0gdGMzNTg3NDYtPm1idXNmbXQud2lk dGggLSB0bXA7Cj4gKwlmaWZvX3N6ICo9IGZtdC0+YnBwOwo+ICsJdGMzNTg3NDYtPnZiX3NpemUg PSByb3VuZF91cChmaWZvX3N6LCAzMik7Cj4gKwoKUGxlYXNlIGFsc28gY2FsbCB2NGwyX3N1YmRl dl9saW5rX3ZhbGlkYXRlX2RlZmF1bHQoKSBoZXJlLgoKSSB3b25kZXIgaWYgdGhlIGFib3ZlIGNh bGN1bGF0aW9uIHdvdWxkbid0IGJlIGJldHRlciBwZXJmb3JtZWQgaW4KLnNfc3RyZWFtKCkgKG9y IHJhdGhlciBpbiBhIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBieSAuc19zdHJlYW0oKSkgd2hlbgpl bmFibGluZyBzdHJlYW1pbmcuCgo+ICtvdXQ6Cj4gKwlkZXZfZGJnKHRjMzU4NzQ2LT5zZC5kZXYs Cj4gKwkJIkZvdW5kIEZJRk8gc2l6ZVtiaXRzXToldSAtPiBhbGlnbmVkIHRvIHNpemVbYml0c106 JXVcbiIsCj4gKwkJZmlmb19zeiwgdGMzNTg3NDYtPnZiX3NpemUpOwo+ICsKPiArCXJldHVybiB0 YzM1ODc0Ni0+dmJfc2l6ZSA+IFRDMzU4NzQ2X1ZCX01BWF9TSVpFID8gLUVJTlZBTCA6IDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfZ2V0X21idXNfY29uZmlnKHN0cnVjdCB2NGwy X3N1YmRldiAqc2QsIHVuc2lnbmVkIGludCBwYWQsCj4gKwkJCQkgICAgc3RydWN0IHY0bDJfbWJ1 c19jb25maWcgKmNvbmZpZykKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IHRv X3RjMzU4NzQ2KHNkKTsKPiArCj4gKwlpZiAocGFkICE9IFRDMzU4NzQ2X1NPVVJDRSkKPiArCQly ZXR1cm4gLUVJTlZBTDsKPiArCj4gKwljb25maWctPnR5cGUgPSBWNEwyX01CVVNfQ1NJMl9EUEhZ Owo+ICsJY29uZmlnLT5idXMubWlwaV9jc2kyID0gdGMzNTg3NDYtPmNzaV92ZXAuYnVzLm1pcGlf Y3NpMjsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9s aW5rX3NldHVwKHN0cnVjdCBtZWRpYV9lbnRpdHkgKmVudGl0eSwKPiArCQkJICAgICAgIGNvbnN0 IHN0cnVjdCBtZWRpYV9wYWQgKmxvY2FsLAo+ICsJCQkgICAgICAgY29uc3Qgc3RydWN0IG1lZGlh X3BhZCAqcmVtb3RlLCB1MzIgZmxhZ3MpCj4gK3sKPiArCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Qg PSBtZWRpYV9lbnRpdHlfdG9fdjRsMl9zdWJkZXYoZW50aXR5KTsKPiArCXN0cnVjdCB2NGwyX3N1 YmRldiAqc2Vuc29yX3NkID0KPiArCQltZWRpYV9lbnRpdHlfdG9fdjRsMl9zdWJkZXYocmVtb3Rl LT5lbnRpdHkpOwo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IHRvX3RjMzU4NzQ2KHNk KTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNkLT5kZXY7Cj4gKwlzdHJ1Y3QgdjRsMl9jdHJs ICpjdHJsOwo+ICsKPiArCS8qIG5vIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9uIHNvdXJjZSBwYWRz ICovCj4gKwlpZiAobG9jYWwtPmZsYWdzICYgTUVESUFfUEFEX0ZMX1NPVVJDRSkKPiArCQlyZXR1 cm4gMDsKPiArCj4gKwlkZXZfZGJnKGRldiwgImxpbmsgc2V0dXAgJyVzJzolZC0+JyVzJzolZFsl ZF0iLAo+ICsJCXJlbW90ZS0+ZW50aXR5LT5uYW1lLCByZW1vdGUtPmluZGV4LCBsb2NhbC0+ZW50 aXR5LT5uYW1lLAo+ICsJCWxvY2FsLT5pbmRleCwgZmxhZ3MgJiBNRURJQV9MTktfRkxfRU5BQkxF RCk7Cj4gKwo+ICsJLyogUmVxdWlyZWQgZm9yIHRoZSBmaWZvIGNhbGN1bGF0aW9uICovCj4gKwlj dHJsID0gdjRsMl9jdHJsX2ZpbmQoc2Vuc29yX3NkLT5jdHJsX2hhbmRsZXIsIFY0TDJfQ0lEX1BJ WEVMX1JBVEUpOwo+ICsJaWYgKCFjdHJsKSB7Cj4gKwkJZGV2X2VycihkZXYsICJTdWJkZXYgWyVz XSBtdXN0IHN1cHBvcnQgVjRMMl9DSURfUElYRUxfUkFURVxuIiwKPiArCQkJc2Vuc29yX3NkLT5u YW1lKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCXRjMzU4NzQ2LT5zZW5zb3JfcGNs a19jdHJsID0gY3RybDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IF9fbWF5YmVf dW51c2VkCj4gK3RjMzU4NzQ2X2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3Ry dWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCj4gK3sKPiArCXN0cnVjdCB0YzM1ODc0NiAqdGMz NTg3NDYgPSB0b190YzM1ODc0NihzZCk7Cj4gKwo+ICsJLyogMzItYml0IHJlZ2lzdGVycyBzdGFy dGluZyBmcm9tIENMV19EUEhZQ09OVFRYICovCj4gKwlyZWctPnNpemUgPSByZWctPnJlZyA8IENM V19EUEhZQ09OVFRYX1JFRyA/IDIgOiA0Owo+ICsKPiArCWlmIChwbV9ydW50aW1lX3Jlc3VtZV9h bmRfZ2V0KHNkLT5kZXYpKSB7Cj4gKwkJZGV2X2VycihzZC0+ZGV2LCAiRmFpbGVkIHRvIHJlc3Vt ZSB0aGUgZGV2aWNlXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwl0YzM1ODc0Nl9y ZWFkKHRjMzU4NzQ2LCByZWctPnJlZywgKHUzMiAqKSZyZWctPnZhbCk7Cj4gKwo+ICsJcG1fcnVu dGltZV9tYXJrX2xhc3RfYnVzeShzZC0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5bmNfYXV0 b3N1c3BlbmQoc2QtPmRldik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK2ludCBfX21h eWJlX3VudXNlZAo+ICt0YzM1ODc0Nl9zX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2Qs IGNvbnN0IHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQo+ICt7Cj4gKwlzdHJ1Y3QgdGMz NTg3NDYgKnRjMzU4NzQ2ID0gdG9fdGMzNTg3NDYoc2QpOwo+ICsKPiArCWlmIChwbV9ydW50aW1l X3Jlc3VtZV9hbmRfZ2V0KHNkLT5kZXYpKSB7Cj4gKwkJZGV2X2VycihzZC0+ZGV2LCAiRmFpbGVk IHRvIHJlc3VtZSB0aGUgZGV2aWNlXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gKwl0 YzM1ODc0Nl93cml0ZSh0YzM1ODc0NiwgKHUzMilyZWctPnJlZywgKHUzMilyZWctPnZhbCk7Cj4g Kwo+ICsJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShzZC0+ZGV2KTsKPiArCXBtX3J1bnRpbWVf cHV0X3N5bmNfYXV0b3N1c3BlbmQoc2QtPmRldik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGMzNTg3NDZfY29y ZV9vcHMgPSB7Cj4gKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCj4gKwkuZ19yZWdpc3Rl ciA9IHRjMzU4NzQ2X2dfcmVnaXN0ZXIsCj4gKwkuc19yZWdpc3RlciA9IHRjMzU4NzQ2X3NfcmVn aXN0ZXIsCj4gKyNlbmRpZgoKSGF2ZSB5b3UgZm91bmQgdGhpcyB0byBiZSB1c2VmdWwgPwoKPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHRjMzU4 NzQ2X3ZpZGVvX29wcyA9IHsKPiArCS5zX3N0cmVhbSA9IHRjMzU4NzQ2X3Nfc3RyZWFtLAo+ICt9 Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9wYWRfb3BzIHRjMzU4NzQ2 X3BhZF9vcHMgPSB7Cj4gKwkuZW51bV9tYnVzX2NvZGUgPSB0YzM1ODc0Nl9lbnVtX21idXNfY29k ZSwKPiArCS5zZXRfZm10ID0gdGMzNTg3NDZfc2V0X2ZtdCwKPiArCS5nZXRfZm10ID0gdGMzNTg3 NDZfZ2V0X2ZtdCwKPiArCS5saW5rX3ZhbGlkYXRlID0gdGMzNTg3NDZfbGlua192YWxpZGF0ZSwK PiArCS5nZXRfbWJ1c19jb25maWcgPSB0YzM1ODc0Nl9nZXRfbWJ1c19jb25maWcsCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0YzM1ODc0Nl9vcHMgPSB7 Cj4gKwkuY29yZSA9ICZ0YzM1ODc0Nl9jb3JlX29wcywKPiArCS52aWRlbyA9ICZ0YzM1ODc0Nl92 aWRlb19vcHMsCj4gKwkucGFkID0gJnRjMzU4NzQ2X3BhZF9vcHMsCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHRjMzU4NzQ2X2VudGl0eV9v cHMgPSB7Cj4gKwkuZ2V0X2Z3bm9kZV9wYWQgPSB2NGwyX3N1YmRldl9nZXRfZndub2RlX3BhZF8x X3RvXzEsCj4gKwkubGlua19zZXR1cCA9IHRjMzU4NzQ2X2xpbmtfc2V0dXAsCj4gKwkubGlua192 YWxpZGF0ZSA9IHY0bDJfc3ViZGV2X2xpbmtfdmFsaWRhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IHRjMzU4NzQ2X21jbGtfZW5hYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ICt7Cj4gKwlzdHJ1 Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gY2xrX2h3X3RvX3RjMzU4NzQ2KGh3KTsKPiArCXVuc2ln bmVkIGludCBkaXY7Cj4gKwl1MzIgdmFsOwo+ICsJaW50IGVycjsKPiArCj4gKwlkaXYgPSB0YzM1 ODc0Ni0+bWNsa19wb3N0ZGl2IC8gMjsKPiArCXZhbCA9IE1DTEtfSElHSChkaXYgLSAxKSB8IE1D TEtfTE9XKGRpdiAtIDEpOwo+ICsJZGV2X2RiZyh0YzM1ODc0Ni0+c2QuZGV2LCAiTUNMS0NUTDog JXUgKDB4JXgpXG4iLCB2YWwsIHZhbCk7Cj4gKwllcnIgPSB0YzM1ODc0Nl93cml0ZSh0YzM1ODc0 NiwgTUNMS0NUTF9SRUcsIHZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBlcnI7Cj4gKwo+ ICsJaWYgKHRjMzU4NzQ2LT5tY2xrX3ByZWRpdiA9PSA4KQo+ICsJCXZhbCA9IE1DTEtESVYoTUNM S0RJVl84KTsKPiArCWVsc2UgaWYgKHRjMzU4NzQ2LT5tY2xrX3ByZWRpdiA9PSA0KQo+ICsJCXZh bCA9IE1DTEtESVYoTUNMS0RJVl80KTsKPiArCWVsc2UKPiArCQl2YWwgPSBNQ0xLRElWKE1DTEtE SVZfMik7Cj4gKwo+ICsJZGV2X2RiZyh0YzM1ODc0Ni0+c2QuZGV2LCAiQ0xLQ1RMW01DTEtESVZd OiAldSAoMHgleClcbiIsIHZhbCwgdmFsKTsKPiArCXJldHVybiB0YzM1ODc0Nl91cGRhdGVfYml0 cyh0YzM1ODc0NiwgQ0xLQ1RMX1JFRywgTUNMS0RJVl9NQVNLLCB2YWwpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCB0YzM1ODc0Nl9tY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpCj4gK3sK PiArCXN0cnVjdCB0YzM1ODc0NiAqdGMzNTg3NDYgPSBjbGtfaHdfdG9fdGMzNTg3NDYoaHcpOwo+ ICsKPiArCXRjMzU4NzQ2X3dyaXRlKHRjMzU4NzQ2LCBNQ0xLQ1RMX1JFRywgMCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyBsb25nCj4gK3RjMzU4NzQ2X2ZpbmRfbWNsa19zZXR0aW5ncyhzdHJ1Y3QgdGMz NTg3NDYgKnRjMzU4NzQ2LCB1bnNpZ25lZCBsb25nIG1jbGtfcmF0ZSkKPiArewo+ICsJdW5zaWdu ZWQgbG9uZyBwbGxfcmF0ZSA9IHRjMzU4NzQ2LT5wbGxfcmF0ZTsKPiArCWNvbnN0IHVuc2lnbmVk IGNoYXIgcHJlZGl2W10gPSB7IDIsIDQsIDggfTsKPiArCXVuc2lnbmVkIGludCBtY2xrX3ByZWRp diwgbWNsa19wb3N0ZGl2Owo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gdGMzNTg3NDYtPnNkLmRl djsKPiArCXVuc2lnbmVkIGludCBwb3N0ZGl2LCBtY2xrZGl2Owo+ICsJdW5zaWduZWQgbG9uZyBi ZXN0X21jbGtfcmF0ZTsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCS8qCj4gKwkgKiAgICAg ICAgICAgICAgICAgICAgICAgICAgTUNMSy1EaXYKPiArCSAqICAgICAgICAgICAtLS0tLS0tLS0t LS0tLS0tLS0twrRgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwkgKiAgICAgICAgICDCtCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAKPiArCSAqICAgICAgICAgKy0t LS0tLS0tLS0tLS0rICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsJICogICAgICAg ICB8IE1DTEstUHJlRGl2IHwgICAgIHwgICAgICAgTUNMSy1Qb3N0RGl2ICAgICB8Cj4gKwkgKiBQ TEwgLS0+IHwgICAoMi80LzgpICAgfCAtLT4gfCAobWNsa19sb3cgKyBtY2xrX2hpZ2gpIHwgLS0+ IE1DTEsKPiArCSAqICAgICAgICAgKy0tLS0tLS0tLS0tLS0rICAgICArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKwo+ICsJICoKPiArCSAqIFRoZSByZWdpc3RlciB2YWx1ZSBvZiBtY2xrX2xvdy9o aWdoIGlzIG1jbGtfbG93L2hpZ2grMSwgaS5lLjoKPiArCSAqICAgbWNsa19sb3cvaGlnaCA9IDEg ICAtLT4gMiBNQ0xLLVJlZiBDb3VudHMKPiArCSAqICAgbWNsa19sb3cvaGlnaCA9IDI1NSAtLT4g MjU2IE1DTEstUmVmIENvdW50cyA9PSBtYXguCj4gKwkgKiBJZiBtY2xrX2xvdyBhbmQgbWNsa19o aWdoIGFyZSAwIHRoZW4gTUNMSyBpcyBkaXNhYmxlZC4KPiArCSAqCj4gKwkgKiBLZWVwIGl0IHNp bXBsZSBhbmQgc3VwcG9ydCA1MC81MCBkdXR5IGN5Y2xlcyBvbmx5IGZvciBub3csCj4gKwkgKiBz byB0aGUgY2FsYyB3aWxsIGJlOgo+ICsJICoKPiArCSAqICAgTUNMSyA9IFBMTCAvIChNQ0xLLVBy ZURpdiAqIDIgKiBNQ0xLLVBvc3REaXYpCj4gKwkgKi8KPiArCj4gKwlpZiAobWNsa19yYXRlID09 IHRjMzU4NzQ2LT5tY2xrX3JhdGUpCj4gKwkJcmV0dXJuIG1jbGtfcmF0ZTsKPiArCj4gKwkvKiBI aWdoZXN0IHBvc3NpYmxlIHJhdGUgKi8KPiArCW1jbGtkaXYgPSBwbGxfcmF0ZSAvIG1jbGtfcmF0 ZTsKPiArCWlmIChtY2xrZGl2IDw9IDgpIHsKPiArCQltY2xrX3ByZWRpdiA9IDI7Cj4gKwkJbWNs a19wb3N0ZGl2ID0gNDsKPiArCQliZXN0X21jbGtfcmF0ZSA9IHBsbF9yYXRlIC8gKDIgKiA0KTsK PiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwkvKiBGaXJzdCBjaGVjayB0aGUgcHJlZGl2ICov Cj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcmVkaXYpOyBpKyspIHsKPiArCQlwb3N0 ZGl2ID0gbWNsa2RpdiAvIHByZWRpdltpXTsKPiArCj4gKwkJaWYgKHBvc3RkaXYgJSAyKQo+ICsJ CQljb250aW51ZTsKPiArCj4gKwkJaWYgKHBvc3RkaXYgPj0gNCAmJiBwb3N0ZGl2IDw9IDUxMikg ewo+ICsJCQltY2xrX3ByZWRpdiA9IHByZWRpdltpXTsKPiArCQkJbWNsa19wb3N0ZGl2ID0gcG9z dGRpdjsKPiArCQkJYmVzdF9tY2xrX3JhdGUgPSBwbGxfcmF0ZSAvIChwcmVkaXZbaV0gKiBwb3N0 ZGl2KTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCS8qIE5vIHN1aXRhYmxl IHByZWRpdiBmb3VuZCwgc28gdHJ5IHRvIGFkanVzdCB0aGUgcG9zdGRpdiAqLwo+ICsJZm9yIChw b3N0ZGl2ID0gNDsgcG9zdGRpdiA8PSA1MTI7IHBvc3RkaXYgKz0gMikgewo+ICsJCXVuc2lnbmVk IGludCBwcmU7Cj4gKwo+ICsJCXByZSA9IG1jbGtkaXYgLyBwb3N0ZGl2Owo+ICsJCWlmIChwcmUg PT0gMiB8fCBwcmUgPT0gNCB8fCBwcmUgPT0gOCkgewo+ICsJCQltY2xrX3ByZWRpdiA9IHByZTsK PiArCQkJbWNsa19wb3N0ZGl2ID0gcG9zdGRpdjsKPiArCQkJYmVzdF9tY2xrX3JhdGUgPSBwbGxf cmF0ZSAvIChwcmUgKiBwb3N0ZGl2KTsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJfQo+ICsK PiArCS8qIFRoZSBNQ0xLIDwtPiBQTEwgZ2FwIGlzIHRvIGhpZ2ggLT4gdXNlIGxhcmdlc3QgcG9z c2libGUgZGl2ICovCj4gKwltY2xrX3ByZWRpdiA9IDg7Cj4gKwltY2xrX3Bvc3RkaXYgPSA1MTI7 Cj4gKwliZXN0X21jbGtfcmF0ZSA9IHBsbF9yYXRlIC8gKDggKiA1MTIpOwo+ICsKPiArb3V0Ogo+ ICsJdGMzNTg3NDYtPm1jbGtfcHJlZGl2ID0gbWNsa19wcmVkaXY7Cj4gKwl0YzM1ODc0Ni0+bWNs a19wb3N0ZGl2ID0gbWNsa19wb3N0ZGl2Owo+ICsJdGMzNTg3NDYtPm1jbGtfcmF0ZSA9IGJlc3Rf bWNsa19yYXRlOwo+ICsKPiArCWlmIChiZXN0X21jbGtfcmF0ZSAhPSBtY2xrX3JhdGUpCj4gKwkJ ZGV2X3dhcm4oZGV2LCAiUmVxdWVzdCBNQ0xLIGZyZXE6JWx1LCBmb3VuZCBNQ0xLIGZyZXE6JWx1 XG4iLAo+ICsJCQkgbWNsa19yYXRlLCBiZXN0X21jbGtfcmF0ZSk7Cj4gKwo+ICsJZGV2X2RiZyhk ZXYsICJGb3VuZCBNQ0xLIHNldHRpbmdzOiBmcmVxOiVsdSBwcmVkaXY6JXUgcG9zdGRpdjoldVxu IiwKPiArCQliZXN0X21jbGtfcmF0ZSwgbWNsa19wcmVkaXYsIG1jbGtfcG9zdGRpdik7Cj4gKwo+ ICsJcmV0dXJuIGJlc3RfbWNsa19yYXRlOwo+ICt9Cj4gKwo+ICt1bnNpZ25lZCBsb25nIHRjMzU4 NzQ2X3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBhcmVudF9y YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gY2xrX2h3X3RvX3RjMzU4 NzQ2KGh3KTsKPiArCXVuc2lnbmVkIGludCBwcmVkaXYsIHBvc3RkaXY7Cj4gKwl1MzIgdmFsOwo+ ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSB0YzM1ODc0Nl9yZWFkKHRjMzU4NzQ2LCBNQ0xLQ1RM X1JFRywgJnZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXBvc3RkaXYg PSBGSUVMRF9HRVQoTUNMS19MT1dfTUFTSywgdmFsKSArIDE7Cj4gKwlwb3N0ZGl2ICs9IEZJRUxE X0dFVChNQ0xLX0hJR0hfTUFTSywgdmFsKSArIDE7Cj4gKwo+ICsJZXJyID0gdGMzNTg3NDZfcmVh ZCh0YzM1ODc0NiwgQ0xLQ1RMX1JFRywgJnZhbCk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCXByZWRpdiA9IEZJRUxEX0dFVChNQ0xLRElWX01BU0ssIHZhbCk7Cj4gKwlpZiAo cHJlZGl2ID09IE1DTEtESVZfOCkKPiArCQlwcmVkaXYgPSA4Owo+ICsJZWxzZSBpZiAocHJlZGl2 ID09IE1DTEtESVZfNCkKPiArCQlwcmVkaXYgPSA0Owo+ICsJZWxzZQo+ICsJCXByZWRpdiA9IDI7 Cj4gKwo+ICsJcmV0dXJuIHRjMzU4NzQ2LT5wbGxfcmF0ZSAvIChwcmVkaXYgKiBwb3N0ZGl2KTsK PiArfQo+ICsKPiArc3RhdGljIGxvbmcgdGMzNTg3NDZfbWNsa19yb3VuZF9yYXRlKHN0cnVjdCBj bGtfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHJhdGUsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcg KnBhcmVudF9yYXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gY2xrX2h3 X3RvX3RjMzU4NzQ2KGh3KTsKPiArCj4gKwkqcGFyZW50X3JhdGUgPSB0YzM1ODc0Ni0+cGxsX3Jh dGU7Cj4gKwo+ICsJcmV0dXJuIHRjMzU4NzQ2X2ZpbmRfbWNsa19zZXR0aW5ncyh0YzM1ODc0Niwg cmF0ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfbWNsa19zZXRfcmF0ZShzdHJ1 Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyByYXRlLAo+ICsJCQkJICB1bnNpZ25lZCBsb25n IHBhcmVudF9yYXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gY2xrX2h3 X3RvX3RjMzU4NzQ2KGh3KTsKPiArCj4gKwl0YzM1ODc0Nl9maW5kX21jbGtfc2V0dGluZ3ModGMz NTg3NDYsIHJhdGUpOwo+ICsKPiArCXJldHVybiB0YzM1ODc0Nl9tY2xrX2VuYWJsZShodyk7Cj4g K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrX29wcyB0YzM1ODc0Nl9tY2xrX29wcyA9 IHsKPiArCS5lbmFibGUgPSB0YzM1ODc0Nl9tY2xrX2VuYWJsZSwKPiArCS5kaXNhYmxlID0gdGMz NTg3NDZfbWNsa19kaXNhYmxlLAo+ICsJLnJlY2FsY19yYXRlID0gdGMzNTg3NDZfcmVjYWxjX3Jh dGUsCj4gKwkucm91bmRfcmF0ZSA9IHRjMzU4NzQ2X21jbGtfcm91bmRfcmF0ZSwKPiArCS5zZXRf cmF0ZSA9IHRjMzU4NzQ2X21jbGtfc2V0X3JhdGUsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHRj MzU4NzQ2X25vdGlmeV9ib3VuZChzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIs Cj4gKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKPiArCQkJCSBzdHJ1Y3QgdjRsMl9hc3lu Y19zdWJkZXYgKmFzZCkKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9Cj4gKwkJ Y29udGFpbmVyX29mKG5vdGlmaWVyLCBzdHJ1Y3QgdGMzNTg3NDYsIG5vdGlmaWVyKTsKPiArCXN0 cnVjdCBtZWRpYV9wYWQgKnNpbmsgPSAmdGMzNTg3NDYtPnBhZHNbVEMzNTg3NDZfU0lOS107Cj4g Kwo+ICsJcmV0dXJuIHY0bDJfY3JlYXRlX2Z3bm9kZV9saW5rc190b19wYWQoc2QsIHNpbmssIE1F RElBX0xOS19GTF9FTkFCTEVEKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMgdGMzNTg3NDZfbm90aWZ5X29wcyA9IHsKPiArCS5i b3VuZCA9IHRjMzU4NzQ2X25vdGlmeV9ib3VuZCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdGMz NTg3NDZfYXN5bmNfcmVnaXN0ZXIoc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NikKPiArewo+ICsJ c3RydWN0IHY0bDJfZndub2RlX2VuZHBvaW50IHZlcCA9IHsKPiArCQkuYnVzX3R5cGUgPSBWNEwy X01CVVNfUEFSQUxMRUwsCj4gKwl9Owo+ICsJc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2Q7 Cj4gKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZXA7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVwID0g Zndub2RlX2dyYXBoX2dldF9lbmRwb2ludF9ieV9pZChkZXZfZndub2RlKHRjMzU4NzQ2LT5zZC5k ZXYpLAo+ICsJCQkJCSAgICAgVEMzNTg3NDZfU0lOSywgMCwgMCk7Cj4gKwlpZiAoIWVwKQo+ICsJ CXJldHVybiAtRU5PVENPTk47Cj4gKwo+ICsJZXJyID0gdjRsMl9md25vZGVfZW5kcG9pbnRfcGFy c2UoZXAsICZ2ZXApOwo+ICsJaWYgKGVycikgewo+ICsJCWZ3bm9kZV9oYW5kbGVfcHV0KGVwKTsK PiArCQlyZXR1cm4gZXJyOwo+ICsJfQo+ICsKPiArCXY0bDJfYXN5bmNfbmZfaW5pdCgmdGMzNTg3 NDYtPm5vdGlmaWVyKTsKPiArCWFzZCA9IHY0bDJfYXN5bmNfbmZfYWRkX2Z3bm9kZV9yZW1vdGUo JnRjMzU4NzQ2LT5ub3RpZmllciwgZXAsCj4gKwkJCQkJICAgICAgc3RydWN0IHY0bDJfYXN5bmNf c3ViZGV2KTsKPiArCWlmIChJU19FUlIoYXNkKSkgewo+ICsJCWZ3bm9kZV9oYW5kbGVfcHV0KGVw KTsKPiArCQlyZXR1cm4gUFRSX0VSUihhc2QpOwo+ICsJfQo+ICsKPiArCWZ3bm9kZV9oYW5kbGVf cHV0KGVwKTsKPiArCj4gKwl0YzM1ODc0Ni0+bm90aWZpZXIub3BzID0gJnRjMzU4NzQ2X25vdGlm eV9vcHM7Cj4gKwo+ICsJZXJyID0gdjRsMl9hc3luY19zdWJkZXZfbmZfcmVnaXN0ZXIoJnRjMzU4 NzQ2LT5zZCwgJnRjMzU4NzQ2LT5ub3RpZmllcik7Cj4gKwlpZiAoZXJyKSB7Cj4gKwkJdjRsMl9h c3luY19uZl9jbGVhbnVwKCZ0YzM1ODc0Ni0+bm90aWZpZXIpOwo+ICsJCXJldHVybiBlcnI7Cj4g Kwl9Cj4gKwo+ICsJdGMzNTg3NDYtPnNkLmZ3bm9kZSA9IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9p bnRfYnlfaWQoCj4gKwkJZGV2X2Z3bm9kZSh0YzM1ODc0Ni0+c2QuZGV2KSwgVEMzNTg3NDZfU09V UkNFLCAwLCAwKTsKPiArCj4gKwllcnIgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigmdGMz NTg3NDYtPnNkKTsKPiArCWlmIChlcnIpIHsKPiArCQl2NGwyX2FzeW5jX25mX3VucmVnaXN0ZXIo JnRjMzU4NzQ2LT5ub3RpZmllcik7Cj4gKwkJdjRsMl9hc3luY19uZl9jbGVhbnVwKCZ0YzM1ODc0 Ni0+bm90aWZpZXIpOwo+ICsJfQo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdGMzNTg3NDZfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJ c3RydWN0IGNsa19pbml0X2RhdGEgbWNsa19pbml0ZGF0YSA9IHsgfTsKPiArCXN0cnVjdCBkZXZp Y2UgKmRldiA9ICZjbGllbnQtPmRldjsKPiArCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCAq dmVwOwo+ICsJdW5zaWduZWQgbG9uZyBjc2lfbGlua19yYXRlOwo+ICsJc3RydWN0IHRjMzU4NzQ2 ICp0YzM1ODc0NjsKPiArCXN0cnVjdCBmd25vZGVfaGFuZGxlICplcDsKPiArCXVuc2lnbmVkIGNo YXIgY3NpX2xhbmVzOwo+ICsJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKPiArCXN0cnVjdCB2NGwy X2N0cmwgKmN0cmw7Cj4gKwl1bnNpZ25lZCBsb25nIHJlZmNsazsKPiArCXVuc2lnbmVkIGludCBp Owo+ICsJaW50IGVycjsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdGMzNTg3NDYgPSBkZXZtX2t6YWxs b2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKnRjMzU4NzQ2KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IXRjMzU4NzQ2KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXRjMzU4NzQ2LT5yZWdtYXAg PSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZ0YzM1ODc0Nl9yZWdtYXBfY29uZmlnKTsK PiArCWlmIChJU19FUlIodGMzNTg3NDYtPnJlZ21hcCkpCj4gKwkJcmV0dXJuIGRldl9lcnJfcHJv YmUoZGV2LCBQVFJfRVJSKHRjMzU4NzQ2LT5yZWdtYXApLAo+ICsJCQkJICAgICAiRmFpbGVkIHRv IGluaXQgcmVnbWFwXG4iKTsKPiArCj4gKwl0YzM1ODc0Ni0+cmVmY2xrID0gZGV2bV9jbGtfZ2V0 KGRldiwgInJlZmNsayIpOwo+ICsJaWYgKElTX0VSUih0YzM1ODc0Ni0+cmVmY2xrKSkKPiArCQly ZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIodGMzNTg3NDYtPnJlZmNsayksCj4gKwkJ CQkgICAgICJGYWlsZWQgdG8gZ2V0IHJlZmNsa1xuIik7Cj4gKwo+ICsJZXJyID0gY2xrX3ByZXBh cmVfZW5hYmxlKHRjMzU4NzQ2LT5yZWZjbGspOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZGV2 X2Vycl9wcm9iZShkZXYsIGVyciwKPiArCQkJCSAgICAgIkZhaWxlZCB0byBlbmFibGUgcmVmY2xr XG4iKTsKPiArCj4gKwlyZWZjbGsgPSBjbGtfZ2V0X3JhdGUodGMzNTg3NDYtPnJlZmNsayk7Cj4g KwljbGtfZGlzYWJsZV91bnByZXBhcmUodGMzNTg3NDYtPnJlZmNsayk7Cj4gKwo+ICsJaWYgKHJl ZmNsayA8IDYgKiBNSFogfHwgcmVmY2xrID4gNDAgKiBNSFopCj4gKwkJcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCAtRUlOVkFMLCAiSW52YWxpZCByZWZjbGsgcmFuZ2VcbiIpOwo+ICsKPiArCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRjMzU4NzQ2X3N1cHBsaWVzKTsgaSsrKQo+ICsJCXRj MzU4NzQ2LT5zdXBwbGllc1tpXS5zdXBwbHkgPSB0YzM1ODc0Nl9zdXBwbGllc1tpXTsKPiArCj4g KwllcnIgPSBkZXZtX3JlZ3VsYXRvcl9idWxrX2dldChkZXYsIEFSUkFZX1NJWkUodGMzNTg3NDZf c3VwcGxpZXMpLAo+ICsJCQkJICAgICAgdGMzNTg3NDYtPnN1cHBsaWVzKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBlcnIsICJGYWlsZWQgdG8gZ2V0IHN1cHBs aWVzXG4iKTsKPiArCj4gKwl0YzM1ODc0Ni0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29w dGlvbmFsKGRldiwgInJlc2V0IiwKPiArCQkJCQkJICAgICAgIEdQSU9EX09VVF9ISUdIKTsKPiAr CWlmIChJU19FUlIodGMzNTg3NDYtPnJlc2V0X2dwaW8pKQo+ICsJCXJldHVybiBkZXZfZXJyX3By b2JlKGRldiwgUFRSX0VSUih0YzM1ODc0Ni0+cmVzZXRfZ3BpbyksCj4gKwkJCQkgICAgICJGYWls ZWQgdG8gZ2V0IHJlc2V0LWdwaW9zXG4iKTsKPiArCj4gKwlzZCA9ICZ0YzM1ODc0Ni0+c2Q7Cj4g Kwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGMzNTg3NDZfb3BzKTsKPiArCXNk LT5mbGFncyB8PSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsKPiArCXNkLT5lbnRpdHkuZnVu Y3Rpb24gPSBNRURJQV9FTlRfRl9WSURfSUZfQlJJREdFOwo+ICsJc2QtPmVudGl0eS5vcHMgPSAm dGMzNTg3NDZfZW50aXR5X29wczsKPiArCj4gKwl0YzM1ODc0Ni0+cGFkc1tUQzM1ODc0Nl9TSU5L XS5mbGFncyA9IE1FRElBX1BBRF9GTF9TSU5LOwo+ICsJdGMzNTg3NDYtPnBhZHNbVEMzNTg3NDZf U09VUkNFXS5mbGFncyA9IE1FRElBX1BBRF9GTF9TT1VSQ0U7Cj4gKwllcnIgPSBtZWRpYV9lbnRp dHlfcGFkc19pbml0KCZzZC0+ZW50aXR5LCBUQzM1ODc0Nl9OUl9QQURTLAo+ICsJCQkJICAgICB0 YzM1ODc0Ni0+cGFkcyk7Cj4gKwlpZiAoZXJyKQo+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRl diwgZXJyLAo+ICsJCQkJICAgICAiRmFpbGVkIHRvIHNldHVwIG1lZGlhLWVudGl0eSBwYWRzXG4i KTsKPiArCj4gKwllcCA9IGZ3bm9kZV9ncmFwaF9nZXRfZW5kcG9pbnRfYnlfaWQoZGV2X2Z3bm9k ZShkZXYpLCBUQzM1ODc0Nl9TT1VSQ0UsCj4gKwkJCQkJICAgICAwLCAwKTsKPiArCWlmICghZXAp IHsKPiArCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgZW5kcG9pbnQgbm9kZVxuIik7Cj4gKwkJZXJy ID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycl9tYzsKPiArCX0KPiArCj4gKwkvKiBDdXJyZW50bHkg d2Ugb25seSBzdXBwb3J0ICdwYXJhbGxlbCBpbicgLT4gJ2NzaSBvdXQnICovCj4gKwl2ZXAgPSAm dGMzNTg3NDYtPmNzaV92ZXA7Cj4gKwl2ZXAtPmJ1c190eXBlID0gVjRMMl9NQlVTX0NTSTJfRFBI WTsKPiArCWVyciA9IHY0bDJfZndub2RlX2VuZHBvaW50X2FsbG9jX3BhcnNlKGVwLCB2ZXApOwo+ ICsJZndub2RlX2hhbmRsZV9wdXQoZXApOwo+ICsJaWYgKGVycikgewo+ICsJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIHBhcnNlIHNvdXJjZSBlbmRwb2ludFxuIik7Cj4gKwkJZ290byBlcnJfbWM7 Cj4gKwl9Cj4gKwo+ICsJY3NpX2xhbmVzID0gdmVwLT5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xh bmVzOwo+ICsJaWYgKGNzaV9sYW5lcyA9PSAwIHx8IGNzaV9sYW5lcyA+IDQgfHwKPiArCSAgICB2 ZXAtPm5yX29mX2xpbmtfZnJlcXVlbmNpZXMgPT0gMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZXJy b3I6IEludmFsaWQgQ1NJLTIgc2V0dGluZ3NcbiIpOwo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwkJ Z290byBlcnJfdmVwOwo+ICsJfQo+ICsKPiArCS8qIFRPRE86IEFkZCBzdXBwb3J0IHRvIGhhbmRs ZSBtdWx0aXBsZSBsaW5rIGZyZXF1ZW5jaWVzICovCj4gKwljc2lfbGlua19yYXRlID0gKHVuc2ln bmVkIGxvbmcpdmVwLT5saW5rX2ZyZXF1ZW5jaWVzWzBdOwo+ICsJdGMzNTg3NDYtPnBsbF9yYXRl ID0gdGMzNTg3NDZfZmluZF9wbGxfc2V0dGluZ3ModGMzNTg3NDYsIHJlZmNsaywKPiArCQkJCQkJ CWNzaV9saW5rX3JhdGUgKiAyKTsKPiArCWlmICghdGMzNTg3NDYtPnBsbF9yYXRlKSB7Cj4gKwkJ ZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIGVycl92ZXA7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gcGh5 X21pcGlfZHBoeV9nZXRfZGVmYXVsdF9jb25maWdfZm9yX2hzY2xrKHRjMzU4NzQ2LT5wbGxfcmF0 ZSwKPiArCQkJCQkJCSBjc2lfbGFuZXMsCj4gKwkJCQkJCQkgJnRjMzU4NzQ2LT5kcGh5X2NmZyk7 Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gZXJyX3ZlcDsKPiArCj4gKwl0YzM1ODc0Ni0+bWJ1c2Zt dCA9IHRjMzU4NzQ2X2RlZl9mbXQ7Cj4gKwl0YzM1ODc0Ni0+dmJfc2l6ZSA9IFRDMzU4NzQ2X1ZC X0RFRkFVTFRfU0laRTsKPiArCj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCB0YzM1ODc0Nik7Cj4g KwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXYsIDIwMCk7Cj4gKwlwbV9ydW50 aW1lX3VzZV9hdXRvc3VzcGVuZChkZXYpOwo+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKPiAr Cj4gKwllcnIgPSBwbV9ydW50aW1lX3Jlc3VtZV9hbmRfZ2V0KGRldik7Cj4gKwlpZiAoZXJyIDwg MCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc3VtZSB0aGUgZGV2aWNlXG4iKTsK PiArCQlnb3RvIGVycl92ZXA7Cj4gKwl9Cj4gKwo+ICsJIC8qIEVuc3VyZSB0aGF0IENTSSBpbnRl cmZhY2UgaXMgcHV0IGludG8gTFAtMTEgc3RhdGUgKi8KPiArCWVyciA9IHRjMzU4NzQ2X3N3X3Jl c2V0KHRjMzU4NzQ2KTsKPiArCWlmIChlcnIpIHsKPiArCQlwbV9ydW50aW1lX3B1dF9ub2lkbGUo ZGV2KTsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZXNldCB0aGUgZGV2aWNlXG4iKTsK PiArCQlnb3RvIGVycl9wbTsKPiArCX0KPiArCj4gKwllcnIgPSB0YzM1ODc0Nl9yZWFkKHRjMzU4 NzQ2LCBDSElQSURfUkVHLCAmdmFsKTsKPiArCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZGV2 KTsKPiArCXBtX3J1bnRpbWVfcHV0X3N5bmNfYXV0b3N1c3BlbmQoZGV2KTsKPiArCWlmIChlcnIp IHsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIGNoaXBpZFxuIik7Cj4gKwkJZXJy ID0gLUVOT0RFVjsKPiArCQlnb3RvIGVycl9wbTsKPiArCX0KPiArCj4gKwlpZiAoRklFTERfR0VU KENISVBJRCwgdmFsKSAhPSAweDQ0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGNoaXBp ZCAweCUwMnhcbiIsCj4gKwkJCSh1MzIpRklFTERfR0VUKENISVBJRCwgdmFsKSk7Cj4gKwkJZXJy ID0gLUVOT0RFVjsKPiArCQlnb3RvIGVycl9wbTsKPiArCX0KPiArCj4gKwkvKiBPcHRpb25hbCBN Q0xLIHByb3ZpZGVyIHN1cHBvcnQgKi8KPiArCWlmIChkZXZpY2VfcHJvcGVydHlfcHJlc2VudChk ZXYsICIjY2xvY2stY2VsbHMiKSkgewo+ICsJCWNvbnN0IGNoYXIgKm1jbGtfbmFtZTsKPiArCj4g KwkJLyogSW5pdCB0byBoaWdoZXN0IHBvc3NpYmVsIE1DTEsgKi8KPiArCQl0YzM1ODc0Ni0+bWNs a19wb3N0ZGl2ID0gNTEyOwo+ICsJCXRjMzU4NzQ2LT5tY2xrX3ByZWRpdiA9IDg7Cj4gKwo+ICsJ CW1jbGtfbmFtZSA9ICJ0YzM1ODc0Ni1tY2xrIjsKPiArCQlkZXZpY2VfcHJvcGVydHlfcmVhZF9z dHJpbmcoZGV2LCAiY2xvY2stb3V0cHV0LW5hbWVzIiwKPiArCQkJCQkgICAgJm1jbGtfbmFtZSk7 Cj4gKwo+ICsJCW1jbGtfaW5pdGRhdGEubmFtZSA9IG1jbGtfbmFtZTsKPiArCQltY2xrX2luaXRk YXRhLm9wcyA9ICZ0YzM1ODc0Nl9tY2xrX29wczsKPiArCQl0YzM1ODc0Ni0+bWNsa19ody5pbml0 ID0gJm1jbGtfaW5pdGRhdGE7Cj4gKwo+ICsJCWVyciA9IGRldm1fY2xrX2h3X3JlZ2lzdGVyKGRl diwgJnRjMzU4NzQ2LT5tY2xrX2h3KTsKPiArCQlpZiAoZXJyKSB7Cj4gKwkJCWRldl9lcnIoZGV2 LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG1jbGsgcHJvdmlkZXJcbiIpOwo+ICsJCQlnb3RvIGVycl9w bTsKPiArCQl9Cj4gKwo+ICsJCWVyciA9IGRldm1fb2ZfY2xrX2FkZF9od19wcm92aWRlcihkZXYs IG9mX2Nsa19od19zaW1wbGVfZ2V0LAo+ICsJCQkJCQkgICZ0YzM1ODc0Ni0+bWNsa19odyk7Cj4g KwkJaWYgKGVycikgewo+ICsJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBhZGQgbWNsayBwcm92 aWRlclxuIik7Cj4gKwkJCWdvdG8gZXJyX3BtOwo+ICsJCX0KPiArCX0KPiArCj4gKwl2NGwyX2N0 cmxfaGFuZGxlcl9pbml0KCZ0YzM1ODc0Ni0+Y3RybF9oZGwsIDEpOwo+ICsKPiArCWN0cmwgPSB2 NGwyX2N0cmxfbmV3X2ludF9tZW51KCZ0YzM1ODc0Ni0+Y3RybF9oZGwsIE5VTEwsCj4gKwkJCQkg ICAgICBWNEwyX0NJRF9MSU5LX0ZSRVEsIDAsIDAsCj4gKwkJCQkgICAgICB2ZXAtPmxpbmtfZnJl cXVlbmNpZXMpOwo+ICsJaWYgKGN0cmwpCj4gKwkJY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZM QUdfUkVBRF9PTkxZOwo+ICsKPiArCXRjMzU4NzQ2LT5zZC5jdHJsX2hhbmRsZXIgPSAmdGMzNTg3 NDYtPmN0cmxfaGRsOwo+ICsJaWYgKHRjMzU4NzQ2LT5jdHJsX2hkbC5lcnJvcikgewo+ICsJCWVy ciA9IHRjMzU4NzQ2LT5jdHJsX2hkbC5lcnJvcjsKPiArCQlnb3RvIGVycl9wbTsKPiArCX0KPiAr Cj4gKwl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmdGMzNTg3NDYtPmN0cmxfaGRsKTsKPiArCj4g KwllcnIgPSB0YzM1ODc0Nl9hc3luY19yZWdpc3Rlcih0YzM1ODc0Nik7Cj4gKwlpZiAoZXJyIDwg MCkKPiArCQlnb3RvIGVycl9jdHJsOwo+ICsKPiArCWRldl9pbmZvKGRldiwgIiVzIGZvdW5kIEAg MHgleCAoJXMpXG4iLCBjbGllbnQtPm5hbWUsCj4gKwkJICBjbGllbnQtPmFkZHIsIGNsaWVudC0+ YWRhcHRlci0+bmFtZSk7CgpJJ2Qgc2tpcCB0aGlzIHRvIGF2b2lkIGFkZGluZyBub2lzZSB0byB0 aGUga2VybmVsIGxvZyBhdCBib290IHRpbWUuIEkKd291bGQgYWxzbyBwcm9iYWJseSBzcGxpdCBz b21lIG9mIHRoZSBjb2RlIG91dCBvZiB0aGUgcHJvYmUgZnVuY3Rpb24gYXMKaXQncyBmYWlybHkg bGFyZ2UuIFVwIHRvIHlvdS4KCj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfY3RybDoKPiAr CXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnRjMzU4NzQ2LT5jdHJsX2hkbCk7Cj4gK2Vycl9wbToK PiArCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwo+ICsJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVk KGRldik7Cj4gKwlwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7Cj4gK2Vycl92 ZXA6Cj4gKwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKHZlcCk7Cj4gK2Vycl9tYzoKPiArCW1l ZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IHRjMzU4NzQ2X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xp ZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRh KGNsaWVudCk7Cj4gKwlzdHJ1Y3QgdGMzNTg3NDYgKnRjMzU4NzQ2ID0gdG9fdGMzNTg3NDYoc2Qp Owo+ICsKPiArCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnRjMzU4NzQ2LT5jdHJsX2hkbCk7Cj4g Kwl2NGwyX2Z3bm9kZV9lbmRwb2ludF9mcmVlKCZ0YzM1ODc0Ni0+Y3NpX3ZlcCk7Cj4gKwl2NGwy X2FzeW5jX25mX3VucmVnaXN0ZXIoJnRjMzU4NzQ2LT5ub3RpZmllcik7Cj4gKwl2NGwyX2FzeW5j X25mX2NsZWFudXAoJnRjMzU4NzQ2LT5ub3RpZmllcik7Cj4gKwl2NGwyX2FzeW5jX3VucmVnaXN0 ZXJfc3ViZGV2KHNkKTsKPiArCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKClRo aXMgc2hvdWxkbid0IGJlIG5lZWRlZCB2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KCkgc2hv dWxkIGJlCmVub3VnaC4KCj4gKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0eSk7Cj4g Kwo+ICsJcG1fcnVudGltZV9kaXNhYmxlKHNkLT5kZXYpOwo+ICsJcG1fcnVudGltZV9zZXRfc3Vz cGVuZGVkKHNkLT5kZXYpOwo+ICsJcG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZChzZC0+ ZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCB0YzM1ODc0Nl9z dXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1 ODc0NiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFy ZSh0YzM1ODc0Ni0+cmVmY2xrKTsKPiArCj4gKwlyZXR1cm4gcmVndWxhdG9yX2J1bGtfZGlzYWJs ZShBUlJBWV9TSVpFKHRjMzU4NzQ2X3N1cHBsaWVzKSwKPiArCQkJCSAgICAgIHRjMzU4NzQ2LT5z dXBwbGllcyk7CgpTaG91bGRuJ3QgeW91IHJlZW5hYmxlIHRoZSBjbG9jayBpZiB0aGlzIGZhaWxz ID8KCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdGMzNTg3NDZfcmVzdW1lKHN0cnVjdCBkZXZpY2Ug KmRldikKPiArewo+ICsJc3RydWN0IHRjMzU4NzQ2ICp0YzM1ODc0NiA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ICsJaW50IGVycjsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUodGMzNTg3NDYtPnJl c2V0X2dwaW8sIDEpOwo+ICsKPiArCWVyciA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9T SVpFKHRjMzU4NzQ2X3N1cHBsaWVzKSwKPiArCQkJCSAgICB0YzM1ODc0Ni0+c3VwcGxpZXMpOwo+ ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCS8qIG1pbi4gMjAwbnMgKi8KPiAr CXVzbGVlcF9yYW5nZSgxMCwgMjApOwo+ICsKPiArCWdwaW9kX3NldF92YWx1ZSh0YzM1ODc0Ni0+ cmVzZXRfZ3BpbywgMCk7Cj4gKwo+ICsJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRjMzU4NzQ2 LT5yZWZjbGspOwo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwoKVGhlIHJlZ3VsYXRvcnMg bmVlZCB0byBiZSBkaXNhYmxlZCBpbiBjYXNlIG9mIGZhaWx1cmUgaGVyZSBhbmQgYmVsb3cKKGFu ZCBzbyBkb2VzIHRoZSBjbG9jayBiZWxvdykuCgo+ICsKPiArCS8qIG1pbi4gNzAwdXMgLi4uIDFt cyAqLwo+ICsJdXNsZWVwX3JhbmdlKDEwMDAsIDE1MDApOwo+ICsKPiArCS8qIFN5bmMgc3RhdGUg Ki8KPiArCWVyciA9IHRjMzU4NzQ2X2FwcGx5X3BsbF9jb25maWcodGMzNTg3NDYpOwo+ICsJaWYg KGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWVyciA9IHRjMzU4NzQ2X2FwcGx5X2RwaHlf Y29uZmlnKHRjMzU4NzQ2KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwly ZXR1cm4gdGMzNTg3NDZfYXBwbHlfbWlzY19jb25maWcodGMzNTg3NDYpOwoKRG9lcyBhbGwgdGhp cyBiZWxvbmcgdG8gdGhlIFBNIHJlc3VtZSBoYW5kbGVyID8gSXQgc2VlbXMgY29uZmlndXJhdGlv bgpjb3VsZCBiZSBoYW5kbGVkIGluIC5zX3N0cmVhbSgpIGluc3RlYWQuCgo+ICt9Cj4gKwo+ICtE RUZJTkVfUlVOVElNRV9ERVZfUE1fT1BTKHRjMzU4NzQ2X3BtX29wcywgdGMzNTg3NDZfc3VzcGVu ZCwKPiArCQkJICB0YzM1ODc0Nl9yZXN1bWUsIE5VTEwpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBvZl9kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgdGMzNTg3NDZfb2ZfbWF0Y2hbXSA9IHsK PiArCXsgLmNvbXBhdGlibGUgPSAidG9zaGliYSx0YzM1ODc0NiIgfSwKPiArCXsgfSwKPiArfTsK PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGMzNTg3NDZfb2ZfbWF0Y2gpOwo+ICsKPiArc3Rh dGljIHN0cnVjdCBpMmNfZHJpdmVyIHRjMzU4NzQ2X2RyaXZlciA9IHsKPiArCS5kcml2ZXIgPSB7 Cj4gKwkJLm5hbWUgPSAidGMzNTg3NDYiLAo+ICsJCS5wbSA9IHBtX3B0cigmdGMzNTg3NDZfcG1f b3BzKSwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSB0YzM1ODc0Nl9vZl9tYXRjaCwKPiArCX0sCj4g KwkucHJvYmVfbmV3ID0gdGMzNTg3NDZfcHJvYmUsCj4gKwkucmVtb3ZlID0gdGMzNTg3NDZfcmVt b3ZlLAo+ICt9Owo+ICsKPiArbW9kdWxlX2kyY19kcml2ZXIodGMzNTg3NDZfZHJpdmVyKTsKPiAr Cj4gK01PRFVMRV9ERVNDUklQVElPTigiVG9zaGliYSBUQzM1ODc0NiBQYXJhbGxlbCB0byBDU0kt MiBicmlkZ2UgZHJpdmVyIik7Cj4gK01PRFVMRV9BVVRIT1IoIk1hcmNvIEZlbHNjaCA8a2VybmVs QHBlbmd1dHJvbml4LmRlPiIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7CgotLSAKUmVnYXJk cywKCkxhdXJlbnQgUGluY2hhcnQKCi0tIApsaW51eC1waHkgbWFpbGluZyBsaXN0CmxpbnV4LXBo eUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHBzOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LXBoeQo=