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 91CA2C433F5 for ; Wed, 15 Dec 2021 18:35:43 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=j92COMPm0ZwAPTiSQz8paYK8gQt4F3rQ5OlhBX61Rh4=; b=vxBnsVY8+KSD7o q5Jxs6GR/nZoOwPWuWsXGcDkmelA+zQwhIMNr4uWQKbxmuIO/aDEatHpmAlnLD4szyH6TPSZ+g2F+ AHbKFLTNQRnXfOALFQcylGHEFRsskV85NP+WH65SaGG5HwctPY2/WWp5r8XTNtbr6FXkglnceOdKW gxIEm8gq1THKELGBkllFn31JBBlwbGPuXi9cXNi2vaROihuCRIH/wt9kmLs0ZjHT+heaUv3Mqpgdw feNHuoY/PlIEc9Xutl4NdfQASqAE/+9xg75koAXTV7YTvwHEFMwHN6LJvMxJ13R8rVhnEkJqweN9i VuL/MJFBigyT6NSkN05g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxZ69-002GDJ-7n; Wed, 15 Dec 2021 18:33:53 +0000 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mxZ62-002GCA-BZ for linux-arm-kernel@lists.infradead.org; Wed, 15 Dec 2021 18:33:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1639593226; x=1671129226; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=Bqwbkxr0wiceI6jZizY/g/S70Ax6tR601faVJAwge0s=; b=onC1QPdOAQXxedPLwLd8OSEdtzQpq507mh1B78sbokc/yMGhi74lUXvk g6VwPD6Mksf+A1vhnoGqBa1P/AcgQHVtW1WK+1WnyqROisddeAd9XRqyh nRHTT0UjqD1pYNBSjPyCBYGuGCKFNPcSMHT6R7AJFjhEWCXlOHJwSB7wH A=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.qualcomm.com with ESMTP; 15 Dec 2021 10:33:44 -0800 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg04-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 15 Dec 2021 10:33:43 -0800 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.19; Wed, 15 Dec 2021 10:33:43 -0800 Received: from [10.50.9.33] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.19; Wed, 15 Dec 2021 10:33:38 -0800 Message-ID: <394aa08d-82b2-07ff-758e-921028672023@quicinc.com> Date: Thu, 16 Dec 2021 00:03:33 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH V6 2/7] soc: qcom: dcc:Add driver support for Data Capture and Compare unit(DCC) Content-Language: en-CA To: Alex Elder , Andy Gross , "Bjorn Andersson" , Rob Herring CC: , , , , , , , References: From: Souradeep Chowdhury In-Reply-To: X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211215_103346_501471_14C611CC X-CRM114-Status: GOOD ( 61.11 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDEyLzE0LzIwMjEgNDowNiBBTSwgQWxleCBFbGRlciB3cm90ZToKPiBPbiA4LzEwLzIxIDEy OjU0IFBNLCBTb3VyYWRlZXAgQ2hvd2RodXJ5IHdyb3RlOgo+PiBUaGUgRENDIGlzIGEgRE1BIEVu Z2luZSBkZXNpZ25lZCB0byBjYXB0dXJlIGFuZCBzdG9yZSBkYXRhCj4+IGR1cmluZyBzeXN0ZW0g Y3Jhc2ggb3Igc29mdHdhcmUgdHJpZ2dlcnMuVGhlIERDQyBvcGVyYXRlcwo+PiBiYXNlZCBvbiB1 c2VyIGlucHV0cyB2aWEgdGhlIHN5c2ZzIGludGVyZmFjZS5UaGUgdXNlciBnaXZlcwo+PiBhZGRy ZXNzZXMgYXMgaW5wdXRzIGFuZCB0aGVzZSBhZGRyZXNzZXMgYXJlIHN0b3JlZCBpbiB0aGUKPj4g Zm9ybSBvZiBsaW5rZWRsaXN0cy5JbiBjYXNlIG9mIGEgc3lzdGVtIGNyYXNoIG9yIGEgbWFudWFs Cj4+IHNvZnR3YXJlIHRyaWdnZXIgYnkgdGhlIHVzZXIgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJm YWNlLAo+PiB0aGUgZGNjIGNhcHR1cmVzIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBhdCB0aGVzZSBh ZGRyZXNzZXMuCj4+IFRoaXMgcGF0Y2ggY29udGFpbnMgdGhlIGRyaXZlciB3aGljaCBoYXMgYWxs IHRoZSBtZXRob2RzCj4+IHBlcnRhaW5pbmcgdG8gdGhlIHN5c2ZzIGludGVyZmFjZSwgYXV4aWxp YXJ5IGZ1bmN0aW9ucyB0bwo+PiBzdXBwb3J0IGFsbCB0aGUgZm91ciBmdW5kYW1lbnRhbCBvcGVy YXRpb25zIG9mIGRjYyBuYW1lbHkKPj4gcmVhZCwgd3JpdGUsIGZpcnN0IHJlYWQgdGhlbiB3cml0 ZSBhbmQgbG9vcC5UaGUgcHJvYmUgbWV0aG9kCj4+IGhlcmUgaW5zdGFudGlhdGVzIGFsbCB0aGUg cmVzb3VyY2VzIG5lY2Vzc2FyeSBmb3IgZGNjIHRvCj4+IG9wZXJhdGUgbWFpbmx5IHRoZSBkZWRp Y2F0ZWQgZGNjIHNyYW0gd2hlcmUgaXQgc3RvcmVzIHRoZQo+PiB2YWx1ZXMuVGhlIERDQyBkcml2 ZXIgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcwo+PiB3aXRob3V0IGdvaW5nIGZv ciBhIHJlYm9vdCBzaW5jZSBpdCBjYW4gcGVyZm9ybSBtYW51YWwKPj4gdHJpZ2dlcnMuCj4KPiBJ IGRvbid0IHVuZGVyc3RhbmQgd2hhdCB5b3UncmUgdHJ5aW5nIHRvIHNheSB3aXRoIHRoZSBsYXN0 Cj4gc2VudGVuY2UgYWJvdmUuCj4KU28gRENDIGhhcyBib3RoIHNvZnR3YXJlIGFuZCBoYXJkd2Fy ZSB0cmlnZ2Vycy4gVGhlIGZvcm1lciBjYW4gYmUgCnRyaWdnZXJlZCBieSB0aGUgdXNlciBieSBk b2luZyBhCgplY2hvIDEgPiB0cmlnZ2VyIGZyb20gdXNlciBzcGFjZSB3aGlsZSB0aGUgbGF0ZXIg aGFwcGVucyBkdXJpbmcgYSBjcmFzaC4KCj4+IEFsc28gYWRkZWQgdGhlIGRvY3VtZW50YXRpb24g Zm9yIHN5c2ZzIGVudHJpZXMKPj4gYW5kIGV4cGxhaW5lZCB0aGUgZnVuY3Rpb25hbGl0aWVzIG9m IGVhY2ggc3lzZnMgZmlsZSB0aGF0Cj4+IGhhcyBiZWVuIGNyZWF0ZWQgZm9yIGRjYy4KPgo+IENv dWxkIHRoZXNlIGZpbGVzIGFsbCBsYW5kIGluIGRlYnVnZnMsIGF0IGxlYXN0IGluaXRpYWxseT8K PiBJIGd1ZXNzIGlmIHlvdSBnZXQgaXQgcmlnaHQgaXQncyBmaW5lIGluIHN5c2ZzLCBidXQgdW5s aWtlCj4gc3lzZnMsIGRlYnVnZnMgaXMgbm90IGNvbnNpZGVyZWQgYSBzdGFibGUgdXNlciBzcGFj ZSBBUEkuCj4KQWNrLldpbGwgbW92ZSB0aGlzIHRvIGRlYnVnZnMKPj4gVGhlIGZvbGxvd2luZyBp cyB0aGUganVzdGlmaWNhdGlvbiBvZiB1c2luZyBzeXNmcyBpbnRlcmZhY2UKPj4gb3ZlciB0aGUg b3RoZXIgYWx0ZXJuYXRpdmVzIGxpa2UgaW9jdGxzCj4+Cj4+IGkpIEFzIGNhbiBiZSBzZWVuIGZy b20gdGhlIHN5c2ZzIGF0dHJpYnV0ZSBkZXNjcmlwdGlvbnMsCj4+IG1vc3Qgb2YgaXQgZG9lcyBi YXNpYyBoYXJkd2FyZSBtYW5pcHVsYXRpb25zIGxpa2UgZGNjX2VuYWJsZSwKPj4gZGNjX2Rpc2Fi bGUsIGNvbmZpZyByZXNldCBldGMuIEFzIGEgcmVzdWx0IHN5c2ZzIGlzIHByZWZlcnJlZAo+PiBv dmVyIGlvY3RsIGFzIHdlIGp1c3QgbmVlZCB0byBlbnRlciBhIDAgb3IgMS4KPj4KPj4gaWkpIEV4 aXN0aW5nIHNpbWlsYXIgZGVidWcgaGFyZHdhcmVzIGFyZSB0aGVyZSBmb3Igd2hpY2ggZHJpdmVy cwo+PiBoYXZlIGJlZW4gd3JpdHRlbiB1c2luZyBzeXNmcyBpbnRlcmZhY2UuT25lIHN1Y2ggZXhh bXBsZSBpcyB0aGUKPj4gY29yZXNpZ2h0LWV0bS10cmFjZSBkcml2ZXIuQSBjbG9zZXIgYW5hbG9n IGNhbiBhbHNvIGJlIHRoZSB3YXRjaGRvZwo+PiBzdWJzeXN0ZW1zIHRob3VnaCBpdCBpcyBpb2N0 bHMgYmFzZWQuCj4KPiBFdmVuIGlmIGl0IGV2ZW50dWFsbHkgYmVjb21lcyBhIHN5c2ZzIGludGVy ZmFjZSwgaXQgbWlnaHQKPiBiZSBiZXR0ZXIgdG8gaW5pdGlhbGx5IGxhbmQgaXQgaW4gZGVidWdm cy7CoCAoTWF5YmUgb3RoZXJzCj4gZGlzYWdyZWUuKQoKQWNrCgo+Cj4gR2VuZXJhbGx5LCBpdCBs b29rcyB0byBtZSBsaWtlIHRoaXMgYWx3YXlzIHJlYWRzIG1lbW9yeSBpbgo+IDMyLWJpdCB1bml0 cy7CoCBJIG1pZ2h0IGhhdmUgbWlzc2VkIGl0LCBidXQgaWYgdGhhdCBpcyBub3QKPiBkb2N1bWVu dGVkIGl0IHNob3VsZCBiZS7CoCBBbHNvLCBpcyBpdCBPSyB0byBwcm92aWRlIGFuCj4gYWRkcmVz cyB0aGF0IGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5P8KgIEkKPiBwcmVzdW1l IG1lbW9yeSBpcyBpbnRlcnByZXRlZCBhcyBDUFUgZW5kaWFuOyBkb2VzIHRoYXQKPiBwcm9kdWNl IHRoZSBtb3N0IG1lYW5pbmdmdWwgcmVzdWx0cyBpZiB0aGUgb2Zmc2V0IGlzbid0Cj4gYWxpZ25l ZD8KPgpBZGRyZXNzIGFsb25nIHdpdGggb2Zmc2V0IGhhcyB0byBiZSB2YWxpZCB0byBjYXB0dXJl IHRoZSByZXN1bHRzLgoKCj4gTW9yZSBjb21tZW50cywgYmVsb3cuCj4KPiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtQWxleAo+Cj4+IFNpZ25lZC1vZmYtYnk6IFNvdXJh ZGVlcCBDaG93ZGh1cnkgPHNjaG93ZGh1QGNvZGVhdXJvcmEub3JnPgo+PiAtLS0KPj4gwqAgRG9j dW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItZGNjIHzCoCAxMTQgKysKPj4gwqAg ZHJpdmVycy9zb2MvcWNvbS9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHzCoMKgwqAgOCArCj4+IMKgIGRyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvc29jL3Fj b20vZGNjLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgMTU0OSAK Pj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+PiDCoCA0IGZpbGVzIGNoYW5nZWQsIDE2 NzIgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9B QkkvdGVzdGluZy9zeXNmcy1kcml2ZXItZGNjCj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL3NvYy9xY29tL2RjYy5jCj4+Cj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90 ZXN0aW5nL3N5c2ZzLWRyaXZlci1kY2MgCj4+IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9z eXNmcy1kcml2ZXItZGNjCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAu LjA1ZDI0ZjAKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0 aW5nL3N5c2ZzLWRyaXZlci1kY2MKPgo+IFRocm91Z2hvdXQgdGhpcyBmaWxlLCBhZGQgYSBzcGFj ZSBvciB0d28gYWZ0ZXIgZWFjaCBwZXJpb2QuCj4KPj4gQEAgLTAsMCArMSwxMTQgQEAKPj4gK1do YXQ6wqDCoMKgwqDCoMKgwqDCoMKgwqAgL3N5cy9idXMvcGxhdGZvcm0vZGV2aWNlcy8uLi4vdHJp Z2dlcgo+PiArRGF0ZTrCoMKgwqDCoMKgwqDCoMKgwqDCoCBNYXJjaCAyMDIxCj4KPiBQcm9iYWJs eSB1cGRhdGUgdGhlc2UgZGF0ZXMgd2hlbiB0aGUgY29kZSBpcyBjbG9zZSB0bwo+IGdldHRpbmcg YWNjZXB0ZWQuCgpBY2sKCj4KPj4gK0NvbnRhY3Q6wqDCoMKgwqDCoMKgwqAgU291cmFkZWVwIENo b3dkaHVyeSA8c2Nob3dkaHVAY29kZWF1cm9yYS5vcmc+Cj4+ICtEZXNjcmlwdGlvbjoKPj4gK8Kg wqDCoMKgwqDCoMKgIFRoaXMgaXMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgbWFudWFsIHNvZnR3 YXJlCj4KPiBUcnkgdG8gcmV3b3JkIGVhY2ggb2YgdGhlIGRlc2NyaXB0aW9ucyBzbyB0aGV5IGRv bid0Cj4gdGFsayBhYm91dCAidGhpcyBzeXNmcyBpbnRlcmZhY2UuIsKgIEVhY2ggb25lIG9mIHRo ZXNlCj4gKmlzKiBkZXNjcmliaW5nIGEgc3lzZnMgaW50ZXJmYWNlIGZpbGUsIHNvIHRoYXQgY2Fu IGJlCj4gb21pdHRlZCBmcm9tIHRoZSBkZXNjcmlwdGlvbi7CoCBGb3IgZXhhbXBsZToKPgo+IMKg wqDCoCBUaGlzIGZpbGUgaXMgdXNlZCB0byBwZXJmb3JtIGEgbWFudWFsIHRyaWdnZXIKPiDCoMKg wqAgb3BlcmF0aW9uLCBjYXVzaW5nIGFsbCBsaXN0cyBvZiBtZW1vcnkgb3BlcmF0aW9ucwo+IMKg wqDCoCB0byBiZSBleGVjdXRlZC4KPgo+IE9yIHNvbWV0aGluZyBhbG9uZyB0aG9zZSBsaW5lcy4K QWNrCj4KPj4gK8KgwqDCoMKgwqDCoMKgIHRyaWdnZXJzLlRoZSB1c2VyIGNhbiBzaW1wbHkgZW50 ZXIgYSAxIGFnYWluc3QKPj4gK8KgwqDCoMKgwqDCoMKgIHRoZSBzeXNmcyBmaWxlIGFuZCBlbmFi bGUgYSBtYW51YWwgdHJpZ2dlci4KPj4gK8KgwqDCoMKgwqDCoMKgIEV4YW1wbGU6Cj4+ICvCoMKg wqDCoMKgwqDCoCBlY2hvwqAgMSA+IC9zeXMvYnVzL3BsYXRmb3JtL2RldmljZXMvLi4uL3RyaWdn ZXIKPj4gKwo+PiArV2hhdDrCoMKgwqDCoMKgwqDCoMKgwqDCoCAvc3lzL2J1cy9wbGF0Zm9ybS9k ZXZpY2VzLy4uLi9lbmFibGUKPj4gK0RhdGU6wqDCoMKgwqDCoMKgwqDCoMKgwqAgTWFyY2ggMjAy MQo+PiArQ29udGFjdDrCoMKgwqDCoMKgwqDCoCBTb3VyYWRlZXAgQ2hvd2RodXJ5IDxzY2hvd2Ro dUBjb2RlYXVyb3JhLm9yZz4KPj4gK0Rlc2NyaXB0aW9uOgo+PiArwqDCoMKgwqDCoMKgwqAgVGhp cyBzeXNmcyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgZW5hYmxpbmcgdGhlCj4+ICvCoMKgwqDCoMKg wqDCoCB0aGUgZGNjIGhhcmR3YXJlLldpdGhvdXQgdGhpcyBiZWluZyBzZXQgdG8gMSwKPj4gK8Kg wqDCoMKgwqDCoMKgIHRoZSBkY2MgaGFyZHdhcmUgY2Vhc2VzIHRvIGZ1bmN0aW9uLgo+Cj4gVGhp cyBjb3VsZC9zaG91bGQgdXNlIGEgc3RhbmRhcmQgQm9vbGVhbiBpbnRlcmZhY2UuwqAgVGhhdCBp cywKPiBwYXJzZSB0aGUgaW5wdXQgaW4geW91ciBjb2RlIHVzaW5nIGtzdHJ0b2Jvb2woKSBvbiB0 aGUgYnVmZmVyCj4gcGFzc2VkIHRvIHlvdXIgc3RvcmUgZnVuY3Rpb24uCgpBY2sKCj4KPgo+Cj4+ ICvCoMKgwqDCoMKgwqDCoCBFeGFtcGxlOgo+PiArwqDCoMKgwqDCoMKgwqAgZWNob8KgIDAgPiAv c3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzLy4uLi9lbmFibGUKPj4gK8KgwqDCoMKgwqDCoMKgIChk aXNhYmxlIGludGVyZmFjZSkKPj4gK8KgwqDCoMKgwqDCoMKgIGVjaG/CoCAxID4gL3N5cy9idXMv cGxhdGZvcm0vZGV2aWNlcy8uLi4vZW5hYmxlCj4+ICvCoMKgwqDCoMKgwqDCoCAoZW5hYmxlIGlu dGVyZmFjZSkKPj4gKwo+PiArV2hhdDrCoMKgwqDCoMKgwqDCoMKgwqDCoCAvc3lzL2J1cy9wbGF0 Zm9ybS9kZXZpY2VzLy4uLi9jb25maWcKPj4gK0RhdGU6wqDCoMKgwqDCoMKgwqDCoMKgwqAgTWFy Y2ggMjAyMQo+PiArQ29udGFjdDrCoMKgwqDCoMKgwqDCoCBTb3VyYWRlZXAgQ2hvd2RodXJ5IDxz Y2hvd2RodUBjb2RlYXVyb3JhLm9yZz4KPj4gK0Rlc2NyaXB0aW9uOgo+PiArwqDCoMKgwqDCoMKg wqAgVGhpcyBpcyB0aGUgbW9zdCBjb21tb25seSB1c2VkIHN5c2ZzIGludGVyZmFjZQo+PiArwqDC oMKgwqDCoMKgwqAgZmlsZSBhbmQgdGhpcyBiYXNpY2FsbHkgc3RvcmVzIHRoZSBhZGRyZXNzZXMg b2YKPgo+IEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoaXMgaXMgdGhlICJtb3N0IGNvbW1vbmx5IHVz ZWQiIGZpbGUuCj4gSnVzdCBkZXNjcmliZSB3aGF0IGl0IGRvZXMuCj4KPiBJZiBJIHVuZGVyc3Rh bmQgaXQgcmlnaHQsIHlvdSB3cml0ZSBhIG1lbW9yeSBvZmZzZXQgYW5kCj4gYW4gKG9wdGlvbmFs KSBudW1iZXIgb2YgY29uc2VjdXRpdmUgbWVtb3J5IGFkZHJlc3NlcyB0bwo+IGJlIHJlYWQuCgpU aGF0J3MgcmlnaHQuwqAgQWNrLgoKPgo+PiArwqDCoMKgwqDCoMKgwqAgdGhlIHJlZ2lzdGVycyB3 aGljaCBuZWVkcyB0byBiZSByZWFkIGluIGNhc2Ugb2YKPj4gK8KgwqDCoMKgwqDCoMKgIGEgaGFy ZHdhcmUgY3Jhc2ggb3IgbWFudWFsIHNvZnR3YXJlIHRyaWdnZXJzLgo+PiArwqDCoMKgwqDCoMKg wqAgRXhhbXBsZToKPj4gK8KgwqDCoMKgwqDCoMKgIGVjaG/CoCAweDgwMDAwMDEwIDEwID4gL3N5 cy9idXMvcGxhdGZvcm0vZGV2aWNlcy8uLi9jb25maWcKPj4gK8KgwqDCoMKgwqDCoMKgIFRoaXMg c3BlY2lmaWVzIHRoYXQgMTAgd29yZHMgc3RhcnRpbmcgZnJvbSBhZGRyZXNzCj4+ICvCoMKgwqDC oMKgwqDCoCAweDgwMDAwMDEwIGlzIHRvIGJlIHJlYWQuSW4gY2FzZSB0aGVyZSBhcmUgbm8gd29y ZHMgdG8gYmUKPj4gK8KgwqDCoMKgwqDCoMKgIHNwZWNpZmllZCB3ZSBjYW4gc2ltcGx5IGVudGVy IHRoZSBhZGRyZXNzLgo+Cj4gSSBkb24ndCBrbm93IHdoYXQgImluIGNhc2UgdGhlcmUgYXJlIG5v IHdvcmRzIHRvIGJlIHNwZWNpZmllZCIKPiBtZWFucy7CoCBEb2VzIHRoYXQganVzdCBtZWFuIG1l bW9yeSBhdCBleGFjdGx5IG9uZSBvZmZzZXQgaXMKPiByZWFkIGlzIGltcGxpZWQgaWYgYSBjb3Vu dCBpcyBub3Qgc3BlY2lmaWVkPwoKVGhhdCdzIGNvcnJlY3QuV2lsbCB1cGRhdGUgYWNjb3JkaW5n bHkKCj4KPgo+PiArCj4+ICtXaGF0OsKgwqDCoMKgwqDCoMKgwqDCoMKgIC9zeXMvYnVzL3BsYXRm b3JtL2RldmljZXMvLi4uL2NvbmZpZ193cml0ZQo+PiArRGF0ZTrCoMKgwqDCoMKgwqDCoMKgwqDC oCBNYXJjaCAyMDIxCj4+ICtDb250YWN0OsKgwqDCoMKgwqDCoMKgIFNvdXJhZGVlcCBDaG93ZGh1 cnkgPHNjaG93ZGh1QGNvZGVhdXJvcmEub3JnPgo+PiArRGVzY3JpcHRpb246Cj4+ICvCoMKgwqDC oMKgwqDCoCBUaGlzIGZpbGUgYWxsb3dzIHVzZXIgdG8gd3JpdGUgYSB2YWx1ZSB0byB0aGUgcmVn aXN0ZXIKPj4gK8KgwqDCoMKgwqDCoMKgIGFkZHJlc3MgZ2l2ZW4gYXMgYXJndW1lbnQuVGhlIHZh bHVlcyBhcmUgZW50ZXJlZCBpbiB0aGUKPj4gK8KgwqDCoMKgwqDCoMKgIGZvcm0gb2YgPHJlZ2lz dGVyX2FkZHJlc3M+IDx2YWx1ZT4uVGhlIHJlYXNvbiBmb3IgdGhpcwo+PiArwqDCoMKgwqDCoMKg wqAgZmVhdHVyZSBvZiBkY2MgaXMgdGhhdCBmb3IgYWNjZXNzaW5nIGNlcnRhaW4gcmVnaXN0ZXJz Cj4+ICvCoMKgwqDCoMKgwqDCoCBpdCBpcyBuZWNlc3NhcnkgdG8gc2V0IHNvbWUgYml0cyBvZiBz b2Ugb3RoZXIgcmVnaXN0ZXIuCj4+ICvCoMKgwqDCoMKgwqDCoCBUaGF0IGlzIGFjaGlldmFibGUg YnkgZ2l2aW5nIERDQyB0aGlzIHByaXZlbGVnZS4KPj4gK8KgwqDCoMKgwqDCoMKgIEV4YW1wbGU6 Cj4+ICvCoMKgwqDCoMKgwqDCoCBlY2hvIDB4ODAwMDAwMDAgMHhGRiA+IAo+PiAvc3lzL2J1cy9w bGF0Zm9ybS9kZXZpY2VzLy4uLi9jb25maWdfd3JpdGUKPj4gKwo+PiArV2hhdDrCoMKgwqDCoMKg wqDCoMKgwqDCoCAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzLy4uLi9jb25maWdfcmVzZXQKPj4g K0RhdGU6wqDCoMKgwqDCoMKgwqDCoMKgwqAgTWFyY2ggMjAyMQo+PiArQ29udGFjdDrCoMKgwqDC oMKgwqDCoCBTb3VyYWRlZXAgQ2hvd2RodXJ5IDxzY2hvd2RodUBjb2RlYXVyb3JhLm9yZz4KPj4g K0Rlc2NyaXB0aW9uOgo+PiArwqDCoMKgwqDCoMKgwqAgVGhpcyBmaWxlIGlzIHVzZWQgdG8gcmVz ZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YKPj4gK8KgwqDCoMKgwqDCoMKgIGEgZGNjIGRyaXZlciB0 byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgo+Cj4gV2hhdCBkb2VzIGl0IG1lYW4gdG8gInJl c2V0IHRoZSBkcml2ZXIgdG8gdGhlIGRlZmF1bHQiPwo+IERvZXMgdGhhdCBtZWFuIGFsbCBsaXN0 cyBvZiBvcGVyYXRpb25zIHN1cHBsaWVkIHByZXZpb3VzbHkKPiBhcmUgZm9yZ290dGVuLCBhbmQg dGhlIGxpc3RzIGJlY29tZSBlbXB0eSBhbmQgZGlzYWJsZWQ/CgpUaGF0J3MgY29ycmVjdC4gV2ls bCB1cGRhdGUgYWNjb3JkaW5nbHkuCgo+Cj4+ICvCoMKgwqDCoMKgwqDCoCBFeGFtcGxlOgo+PiAr wqDCoMKgwqDCoMKgwqAgZWNob8KgIDEgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzLy4uLi9j b25maWdfcmVzZXQKPj4gKwo+PiArV2hhdDrCoMKgwqDCoMKgwqDCoMKgwqDCoCAvc3lzL2J1cy9w bGF0Zm9ybS9kZXZpY2VzLy4uLi9sb29wCj4+ICtEYXRlOsKgwqDCoMKgwqDCoMKgIE1hcmNoIDIw MjEKPj4gK0NvbnRhY3Q6wqDCoMKgwqDCoMKgwqAgU291cmFkZWVwIENob3dkaHVyeSA8c2Nob3dk aHVAY29kZWF1cm9yYS5vcmc+Cj4+ICtEZXNjcmlwdGlvbjoKPgo+IENhbiBsb29waW5nIGJlIGRv bmUgZm9yIGEgd3JpdGUgb3IgcmVhZC9tb2RpZnkvd3JpdGUgb3BlcmF0aW9uLAo+IG9yIGlzIGl0 IG9ubHkgdXNlZCBmb3IgcmVhZHM/CgpMb29waW5nIGlzIG9ubHkgZm9yIHJlYWQgb3BlcmF0aW9u cy4KCj4KPiBOb3cgc2tpcHBpbmcgYWhlYWQgdG8gdGhlIGNvZGUuCj4KPj4gK8KgwqDCoMKgwqDC oMKgIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGVudGVyIHRoZSBsb29wIGNvdW50IGFzIGRjYwo+PiAr wqDCoMKgwqDCoMKgwqAgZHJpdmVyIGdpdmVzIHRoZSBvcHRpb24gdG8gbG9vcCBtdWx0aXBsZSB0 aW1lcyBvbgo+PiArwqDCoMKgwqDCoMKgwqAgdGhlIHNhbWUgcmVnaXN0ZXIgYW5kIHN0b3JlIHRo ZSB2YWx1ZXMgZm9yIGVhY2gKPgo+IC4gLiAuCj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc29j L3Fjb20vZGNjLmMgYi9kcml2ZXJzL3NvYy9xY29tL2RjYy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmRhZjQzODgKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9k cml2ZXJzL3NvYy9xY29tL2RjYy5jCj4+IEBAIC0wLDAgKzEsMTU0OSBAQAo+PiArLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAo YykgMjAxNS0yMDIxLCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K Pj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4KPj4gKyNpbmNsdWRl IDxsaW51eC9iaXRvcHMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Cj4+ICsjaW5jbHVk ZSA8bGludXgvZGVsYXkuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9mcy5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L2lvLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4gKyNpbmNsdWRlIDxs aW51eC9vZl9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4K Pj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5o Pgo+PiArCj4+ICsjZGVmaW5lIFRJTUVPVVRfVVPCoMKgwqDCoMKgwqDCoCA1MDAwCj4KPiBUaGlz IHRpbWVvdXQgaXMgb25seSB1c2VkIHdoZW4gcG9sbGluZyB0aGUgU1RBVFVTIHJlZ2lzdGVyIHRv Cj4gZGV0ZXJtaW5lIHdoZW4gdGhlIERDQyBoYXJkd2FyZSBpcyAicmVhZHkiLsKgIE1heWJlIHRo ZSBuYW1lCj4gY291bGQgcmVmbGVjdCB0aGF0IChTVEFUVVNfUkVBRFlfVElNRU9VVD8pLgo+CkFj awo+IEkgdGhpbmsgdGhlIG5leHQgdHdvIG1pZ2h0IGJlIGJldHRlciBpbXBsZW1lbnRlZCBhcyBm dW5jdGlvbnMuCj4gSXQgd291bGQgYWxsb3cgdGhlIGNvbXBpbGVyIHRvIGRvIHNvbWUgYWRkaXRp b25hbCB0eXBlIGNoZWNraW5nLgoKQWNrCgo+Cj4KPj4gKyNkZWZpbmUgZGNjX3dyaXRlbChkcnZk YXRhLCB2YWwsIG9mZinCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ ICvCoMKgwqAgd3JpdGVsKCh2YWwpLCBkcnZkYXRhLT5iYXNlICsgZGNjX29mZnNldF9jb252KGRy dmRhdGEsIG9mZikpCj4+ICsjZGVmaW5lIGRjY19yZWFkbChkcnZkYXRhLCBvZmYpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICvCoMKgwqAgcmVhZGwo ZHJ2ZGF0YS0+YmFzZSArIGRjY19vZmZzZXRfY29udihkcnZkYXRhLCBvZmYpKQo+PiArCj4+ICsj ZGVmaW5lIERDQ19TUkFNX05PREUgImRjY19zcmFtIgo+PiArCj4+ICsvKiBEQ0MgcmVnaXN0ZXJz ICovCj4+ICsjZGVmaW5lIERDQ19IV19JTkZPwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDA0Cj4+ ICsjZGVmaW5lIERDQ19MTF9OVU1fSU5GT8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxMAo+PiAr I2RlZmluZSBEQ0NfU1RBVFVTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDFDCj4+ICsjZGVmaW5l IERDQ19MTF9MT0NLKG0pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMHgzNCArIDB4ODAgKiBtKQo+ PiArI2RlZmluZSBEQ0NfTExfQ0ZHKG0pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoMHgzOCArIDB4 ODAgKiBtKQo+PiArI2RlZmluZSBEQ0NfTExfQkFTRShtKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KDB4M2MgKyAweDgwICogbSkKPj4gKyNkZWZpbmUgRENDX0ZEX0JBU0UobSnCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICgweDQwICsgMHg4MCAqIG0pCj4+ICsjZGVmaW5lIERDQ19MTF9USU1FT1VUKG0p wqDCoMKgwqDCoMKgwqAgKDB4NDQgKyAweDgwICogbSkKPj4gKyNkZWZpbmUgRENDX0xMX0lOVF9F TkFCTEUobSnCoMKgwqDCoMKgwqDCoCAoMHg0QyArIDB4ODAgKiBtKQo+PiArI2RlZmluZSBEQ0Nf TExfSU5UX1NUQVRVUyhtKcKgwqDCoMKgwqDCoMKgICgweDUwICsgMHg4MCAqIG0pCj4+ICsjZGVm aW5lIERDQ19MTF9TV19UUklHR0VSKG0pwqDCoMKgwqDCoMKgwqAgKDB4NjAgKyAweDgwICogbSkK Pj4gKyNkZWZpbmUgRENDX0xMX0JVU19BQ0NFU1NfU1RBVFVTKG0pwqDCoMKgICgweDY0ICsgMHg4 MCAqIG0pCj4KPiBUaGUgTUFQX0xFVkVMIGFuZCBNQVBfT0ZGU0VUIGRlZmluaXRpb25zIGJlbG93 LCB0b2dldGhlcgo+IHdpdGggdGhlIGZ1bmN0aW9uIGRjY19vZmZzZXRfY29udigpLCBhcmUgYSBj bGV2ZXIgd2F5IHRvCj4gaGF2ZSB0aGUgYWJvdmUgc2V0IG9mIG9mZnNldHMgIndvcmsiIGJ5IG1h cHBpbmcgdGhlbSB0bwo+IChhdCBsZWFzdCkgdGhyZWUgZGlzdGluY3QgImFjdHVhbCIgYWRkcmVz c2VzLsKgIFRoYXQgaXM6Cj4KPiDCoMKgwqAgaWYgKG1hcF92ZXIgPT0gMSkKPgo+IMKgwqDCoMKg wqDCoMKgIGlmICgwIDw9IG9mZnNldCA8IE1BUF9MRVZFTF8xKQo+Cj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhY3R1YWxfb2Zmc2V0ID0gb2Zmc2V0Cj4KPiDCoMKgwqDCoMKgwqDCoCBlbHNlIGlm IChNQVBfTEVWRUxfMSA8PSBvZmZzZXQgPCBNQVBfTEVWRUxfMikKPgo+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYWN0dWFsX29mZnNldCA9IG9mZnNldCAtIE1BUF9PRkZTRVRfMQo+Cj4gwqDCoMKg wqDCoMKgwqAgZWxzZSBpZiAoTUFQX0xFVkVMXzIgPD0gb2Zmc2V0IDwgTUFQX0xFVkVMXzMpCj4K PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjdHVhbF9vZmZzZXQgPSBvZmZzZXQgLSBNQVBfT0ZG U0VUXzIKPgo+IMKgwqDCoMKgwqDCoMKgIGVsc2UKPgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YWN0dWFsX29mZnNldCA9IG9mZnNldCAtIE1BUF9PRkZTRVRfMwo+Cj4gwqDCoMKgIGVsc2UKPiDC oGlmIChtYXBfdmVyID09IDIpCj4gwqDCoMKgwqDCoMKgwqAgaWYgKDAgPD0gb2Zmc2V0IDwgTUFQ X0xFVkVMXzEpCj4KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFjdHVhbF9vZmZzZXQgPSBvZmZz ZXQKPgo+IMKgwqDCoMKgwqDCoMKgIGVsc2UKPgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWN0 dWFsX29mZnNldCA9IG9mZnNldCAtIE1BUF9PRkZTRVRfNAo+Cj4gwqDCoMKgIGVsc2UKPiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGFjdHVhbF9vZmZzZXQgPSBvZmZzZXQKPgo+IFRoaXMgaXMgYSBi aXQgbWVzc3ksIGJ1dCBvdGhlciB3YXlzIG9mIGRvaW5nIGl0IGFyZW4ndAo+IGxpa2VseSB0byBi ZSBhbnkgY2xlYW5lci7CoCBSZWdhcmRsZXNzLCB0aGlzIHdob2xlIG1hcHBpbmcKPiBwcm9jZXNz IHNob3VsZCBiZSBleHBsYWluZWQgaW4gY29tbWVudHMuCgpBY2sKCj4KPj4gKyNkZWZpbmUgREND X01BUF9MRVZFTDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTgKPj4gKyNkZWZpbmUgRENDX01B UF9MRVZFTDLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MzQKPj4gKyNkZWZpbmUgRENDX01BUF9M RVZFTDPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4NEMKPj4gKwo+PiArI2RlZmluZSBEQ0NfTUFQ X09GRlNFVDHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTAKPj4gKyNkZWZpbmUgRENDX01BUF9P RkZTRVQywqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDE4Cj4+ICsjZGVmaW5lIERDQ19NQVBfT0ZG U0VUM8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxQwo+PiArI2RlZmluZSBEQ0NfTUFQX09GRlNF VDTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4OAo+PiArCj4+ICsjZGVmaW5lIERDQ19GSVhfTE9P UF9PRkZTRVTCoMKgwqDCoMKgwqDCoCAxNgo+PiArI2RlZmluZSBEQ0NfVkVSX0lORk9fQklUwqDC oMKgwqDCoMKgwqAgOQo+PiArCj4+ICsjZGVmaW5lIERDQ19SRUFEwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAwCj4+ICsjZGVmaW5lIERDQ19XUklURcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMQo+PiAr I2RlZmluZSBEQ0NfTE9PUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMgo+PiArI2RlZmluZSBEQ0Nf UkVBRF9XUklURcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMwo+PiArCj4+ICsjZGVmaW5lIE1BWF9E Q0NfT0ZGU0VUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDksIDIpCj4+ICsjZGVmaW5l IE1BWF9EQ0NfTEVOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDYsIDApCj4+ICsjZGVm aW5lIE1BWF9MT09QX0NOVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSyg3LCAwKQo+PiAr Cj4+ICsjZGVmaW5lIERDQ19BRERSX0RFU0NSSVBUT1LCoMKgwqDCoMKgwqDCoCAweDAwCj4+ICsj ZGVmaW5lIERDQ19BRERSX0xJTUlUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAyNwo+PiArI2RlZmlu ZSBEQ0NfQUREUl9PRkZfUkFOR0XCoMKgwqDCoMKgwqDCoCA4Cj4+ICsjZGVmaW5lIERDQ19BRERS X1JBTkdFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDMxLCA0KQo+PiArI2RlZmluZSBE Q0NfTE9PUF9ERVNDUklQVE9SwqDCoMKgwqDCoMKgwqAgQklUKDMwKQo+PiArI2RlZmluZSBEQ0Nf UkRfTU9EX1dSX0RFU0NSSVBUT1LCoMKgwqAgQklUKDMxKQo+PiArI2RlZmluZSBEQ0NfTElOS19E RVNDUklQVE9SwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygzMSwgMzApCj4+ICsKPj4gKyNkZWZpbmUg RENDX1JFQURfSU5EwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAwCj4+ICsjZGVmaW5lIERDQ19X UklURV9JTkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChCSVQoMjgpKQo+PiArCj4+ICsjZGVmaW5l IERDQ19BSEJfSU5EwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDAwCj4+ICsjZGVmaW5lIERDQ19B UEJfSU5EwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMjkpCj4+ICsKPj4gKyNkZWZpbmUgREND X01BWF9MSU5LX0xJU1TCoMKgwqDCoMKgwqDCoCA4Cj4+ICsjZGVmaW5lIERDQ19JTlZBTElEX0xJ TktfTElTVMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soNywgMCkKPj4gKwo+PiArI2RlZmluZSBEQ0Nf VkVSX01BU0sxwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDYsIDApCj4+ICsjZGVmaW5l IERDQ19WRVJfTUFTSzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soNSwgMCkKPj4gKwo+ PiArI2RlZmluZSBEQ0NfUkRfTU9EX1dSX0FERFLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAw eEMxMDVFCj4+ICsKPj4gK3N0cnVjdCBxY29tX2RjY19jb25maWcgewo+Cj4gTm8gbmVlZCBmb3Ig InFjb21fIiBpbiB0aGUgdHlwZSBuYW1lIGhlcmUuCgpBY2sKCj4KPgo+PiArwqDCoMKgIGludCBk Y2NfcmFtX29mZnNldDsKPj4gK307Cj4+ICsKPj4gK2VudW0gZGNjX2Rlc2NyaXB0b3JfdHlwZSB7 Cj4+ICvCoMKgwqAgRENDX0FERFJfVFlQRSwKPj4gK8KgwqDCoCBEQ0NfTE9PUF9UWVBFLAo+PiAr wqDCoMKgIERDQ19SRUFEX1dSSVRFX1RZUEUsCj4+ICvCoMKgwqAgRENDX1dSSVRFX1RZUEUKPj4g K307Cj4+ICsKPj4gK2VudW0gZGNjX21lbV9tYXBfdmVyIHsKPj4gK8KgwqDCoCBEQ0NfTUVNX01B UF9WRVIxID0gMSwKPj4gK8KgwqDCoCBEQ0NfTUVNX01BUF9WRVIyID0gMiwKPj4gK8KgwqDCoCBE Q0NfTUVNX01BUF9WRVIzID0gMwo+Cj4gVGhpcyBlbnVtZXJhdGVkIHR5cGUgZG9lc24ndCByZWFs bHkgYWRkIGFueSB2YWx1ZS7CoCBKdXN0IHVzZSAxLCAyLCBhbmQgMwo+IGZvciB5b3VyIHZlcnNp b24gbnVtYmVycyBpbiB0aGUgZmV3IHBsYWNlcyB0aGlzIGlzIHVzZWQgaW4gY29kZS4gSWYgaXQK PiBnZXRzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzIG9uZS10by1vbmUgbWFwcGluZyBpbiB0 aGUgZnV0dXJlLCBhZGQKPiBhIHR5cGUgbGlrZSB0aGlzLgogwqBBY2sKPgo+PiArfTsKPj4gKwo+ PiArc3RydWN0IGRjY19jb25maWdfZW50cnkgewo+Cj4gLiAuIC4KPgo+PiArc3RhdGljIGJvb2wg ZGNjX3JlYWR5KHN0cnVjdCBkY2NfZHJ2ZGF0YSAqZHJ2ZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCB1 MzIgdmFsOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuICFyZWFkbF9wb2xsX3RpbWVvdXQoKGRydmRh dGEtPmJhc2UgKyAKPj4gZGNjX29mZnNldF9jb252KGRydmRhdGEsIERDQ19TVEFUVVMpKSwKPgo+ IFVzZSBkY2NfcmVhZGwoZHJ2ZGF0YSwgb2Zmc2V0KSBoZXJlLgpBY2sKPgo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZhbCwgKEZJRUxEX0dFVChHRU5NQVNLKDEsIDApLCB2YWwp ID09IDApLCAxLCAKPj4gVElNRU9VVF9VUyk7Cj4KPiBVc2UgIUZJRUxEX0dFVCguLi4pIGhlcmUu CkFjawo+Cj4KPiBJcyB0aGUgMSBtaWNyb3NlY29uZCBkZWxheSByZXF1aXJlZD8KCkFjawoKPgo+ Cj4+ICsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkY2NfcmVhZF9zdGF0dXMoc3RydWN0IGRj Y19kcnZkYXRhICpkcnZkYXRhKQo+PiArewo+PiArwqDCoMKgIGludCBjdXJyX2xpc3Q7Cj4+ICvC oMKgwqAgdTMyIGJ1c19zdGF0dXM7Cj4+ICvCoMKgwqAgdTMyIGxsX2NmZzsKPj4gK8KgwqDCoCB1 MzIgdG1wX2xsX2NmZzsKPj4gKwo+PiArwqDCoMKgIGZvciAoY3Vycl9saXN0ID0gMDsgY3Vycl9s aXN0IDwgZHJ2ZGF0YS0+bnJfbGlua19saXN0OyAKPj4gY3Vycl9saXN0KyspIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGlmICghZHJ2ZGF0YS0+ZW5hYmxlW2N1cnJfbGlzdF0pCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBidXNfc3RhdHVz ID0gZGNjX3JlYWRsKGRydmRhdGEsIAo+PiBEQ0NfTExfQlVTX0FDQ0VTU19TVEFUVVMoY3Vycl9s aXN0KSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChidXNfc3RhdHVzKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZHJ2ZGF0YS0+ZGV2LAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICJSZWFkIGFjY2VzcyBlcnJvciBmb3IgbGlzdCAlZCBlcnI6IDB4 JXguXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN1cnJfbGlzdCwgYnVz X3N0YXR1cyk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGxfY2ZnID0gZGNjX3Jl YWRsKGRydmRhdGEsIERDQ19MTF9DRkcoY3Vycl9saXN0KSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHRtcF9sbF9jZmcgPSBsbF9jZmcgJiB+QklUKDkpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkY2Nfd3JpdGVsKGRydmRhdGEsIHRtcF9sbF9jZmcsIERDQ19MTF9DRkcoY3Vycl9s aXN0KSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRjY193cml0ZWwoZHJ2ZGF0YSwgMHgz LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERDQ19MTF9CVVNfQUNDRVNTX1NU QVRVUyhjdXJyX2xpc3QpKTsKPgo+IFdoYXQgZG9lcyB3cml0aW5nIDEgdG8gdGhlIGJvdHRvbSB0 d28gYml0cyBvZiB0aGUgU1RBVFVTCj4gcmVnaXN0ZXIgZG8/wqAgQ2FuIHlvdSByZXByZXNlbnQg dGhhdCB3aXRoIGEgbWFzaywgd2hpY2gKPiBkZWZpbmVzIHRoZSByZWdpc3RlciBmaWVsZD8KCkFj ay4gVGhpcyBpcyB1c2VkIHRvIHNldCB0aGUgc3RhdHVzIGJpdHMgZm9yIERDQyB0byBjb25maWd1 cmUgdGhlIApsaW5rZWRsaXN0LgoKPgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkY2Nfd3Jp dGVsKGRydmRhdGEsIGxsX2NmZywgRENDX0xMX0NGRyhjdXJyX2xpc3QpKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9EQVRBOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGRjY19zd190cmlnZ2VyKHN0cnVjdCBkY2NfZHJ2ZGF0YSAqZHJ2ZGF0YSkKPj4gK3sKPj4g K8KgwqDCoCBpbnQgcmV0Owo+PiArwqDCoMKgIGludCBjdXJyX2xpc3Q7Cj4+ICvCoMKgwqAgdTMy IGxsX2NmZzsKPj4gK8KgwqDCoCB1MzIgdG1wX2xsX2NmZzsKPj4gKwo+PiArwqDCoMKgIG11dGV4 X2xvY2soJmRydmRhdGEtPm11dGV4KTsKPj4gKwo+PiArwqDCoMKgIGZvciAoY3Vycl9saXN0ID0g MDsgY3Vycl9saXN0IDwgZHJ2ZGF0YS0+bnJfbGlua19saXN0OyAKPj4gY3Vycl9saXN0KyspIHsK Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZHJ2ZGF0YS0+ZW5hYmxlW2N1cnJfbGlzdF0pCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+PiArwqDCoMKgwqDCoMKgwqAgbGxfY2Zn ID0gZGNjX3JlYWRsKGRydmRhdGEsIERDQ19MTF9DRkcoY3Vycl9saXN0KSk7Cj4+ICvCoMKgwqDC oMKgwqDCoCB0bXBfbGxfY2ZnID0gbGxfY2ZnICYgfkJJVCg5KTsKPgo+IFdoYXQgZG9lcyBiaXQg OSBvZiB0aGlzIHJlZ2lzdGVyIHJlcHJlc2VudD/CoCBXaHkgaXMgaXQgdHVybmVkCj4gb2ZmIGhl cmU/Cj4KVGhpcyBiaXQgbmVlZHMgdG8gYmUgc2V0IGZvciB0aGUgc29mdHdhcmUgdHJpZ2dlciB0 byBoYXBwZW4gYXMgcGVyIHRoZQoKRENDIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24uCgo+PiArwqDC oMKgwqDCoMKgwqAgZGNjX3dyaXRlbChkcnZkYXRhLCB0bXBfbGxfY2ZnLCBEQ0NfTExfQ0ZHKGN1 cnJfbGlzdCkpOwo+PiArwqDCoMKgwqDCoMKgwqAgZGNjX3dyaXRlbChkcnZkYXRhLCAxLCBEQ0Nf TExfU1dfVFJJR0dFUihjdXJyX2xpc3QpKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGRjY193cml0ZWwo ZHJ2ZGF0YSwgbGxfY2ZnLCBEQ0NfTExfQ0ZHKGN1cnJfbGlzdCkpOwo+Cj4gRG9lcyB0aGlzIGFz c3VtZSB0aGF0IGJpdCA5IG9mIHRoZSByZWdpc3RlciB3YXMgb3JpZ2luYWxseSBzZXQ/CgpZZXMu IFRoaXMgaXMgdGhlIHByZWRlZmluZWQgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9uIGZvciB0aGUgREND IHNvZnR3YXJlIAp0cmlnZ2VyCgp0byB0YWtlIHBsYWNlLgoKPgo+Cj4+ICvCoMKgwqAgfQo+PiAr Cj4+ICvCoMKgwqAgaWYgKCFkY2NfcmVhZHkoZHJ2ZGF0YSkpIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGRldl9lcnIoZHJ2ZGF0YS0+ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRENDIGlz IGJ1c3kgYWZ0ZXIgcmVjZWl2aW5nIHN3IHRpZ2dlci5cbiIpOwo+PiArwqDCoMKgwqDCoMKgwqAg cmV0ID0gLUVCVVNZOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4+ICvCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqAgcmV0ID0gZGNjX3JlYWRfc3RhdHVzKGRydmRhdGEpOwo+PiArCj4+ICtl cnI6Cj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZkcnZkYXRhLT5tdXRleCk7Cj4+ICvCoMKgwqAg cmV0dXJuIHJldDsKPj4gK30KPj4gKwo+Cj4gLiAuIC4KPgo+PiArc3RhdGljIGludCBfX2RjY19s bF9jZmcoc3RydWN0IGRjY19kcnZkYXRhICpkcnZkYXRhLCBpbnQgY3Vycl9saXN0KQo+PiArewo+ PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArwqDCoMKgIHUzMiB0b3RhbF9sZW4sIHBvczsKPj4g K8KgwqDCoCBzdHJ1Y3QgZGNjX2NvbmZpZ19lbnRyeSAqZW50cnk7Cj4+ICvCoMKgwqAgc3RydWN0 IGRjY19jZmdfYXR0ciBjZmc7Cj4+ICvCoMKgwqAgc3RydWN0IGRjY19jZmdfbG9vcF9hdHRyIGNm Z19sb29wOwo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KCZjZmcsIDAsIHNpemVvZihjZmcpKTsKPj4g K8KgwqDCoCBtZW1zZXQoJmNmZ19sb29wLCAwLCBzaXplb2YoY2ZnX2xvb3ApKTsKPj4gK8KgwqDC oCBjZmcuc3JhbV9vZmZzZXQgPSBkcnZkYXRhLT5yYW1fY2ZnICogNDsKPj4gK8KgwqDCoCB0b3Rh bF9sZW4gPSAwOwo+PiArCj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmRy dmRhdGEtPmNmZ19oZWFkW2N1cnJfbGlzdF0sIGxpc3QpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHN3 aXRjaCAoZW50cnktPmRlc2NfdHlwZSkgewo+PiArwqDCoMKgwqDCoMKgwqAgY2FzZSBEQ0NfUkVB RF9XUklURV9UWVBFOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBfZGNjX2xsX2Nm Z19yZWFkX3dyaXRlKGRydmRhdGEsIGVudHJ5LCAmY2ZnKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG92 ZXJzdGVwOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKg wqDCoMKgwqAgY2FzZSBEQ0NfTE9PUF9UWVBFOgo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXQgPSBfZGNjX2xsX2NmZ19sb29wKGRydmRhdGEsIGVudHJ5LCAmY2ZnLCAmY2ZnX2xvb3AsIAo+ PiAmdG90YWxfbGVuKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG92ZXJzdGVwOwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBicmVhazsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgY2FzZSBEQ0NfV1JJ VEVfVFlQRToKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gX2RjY19sbF9jZmdfd3Jp dGUoZHJ2ZGF0YSwgZW50cnksICZjZmcsICZ0b3RhbF9sZW4pOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8g b3ZlcnN0ZXA7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBkZWZhdWx0Ogo+Cj4gVXNlIHRoaXMgaW5zdGVhZCBvZiAiZGVmYXVsdCI6Cj4g wqDCoMKgwqDCoMKgwqAgY2FzZSBEQ0NfQUREUl9UWVBFOgoKQWNrCgo+Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldCA9IF9kY2NfbGxfY2ZnX2RlZmF1bHQoZHJ2ZGF0YSwgZW50cnksICZj ZmcsICZwb3MsIAo+PiAmdG90YWxfbGVuKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIG92ZXJzdGVwOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4g K8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY2ZnLmxpbmspIHsKPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IGRjY19zcmFtX3dyaXRlbChkcnZkYXRhLCBjZmcubGluaywgY2ZnLnNyYW1fb2Zm c2V0KTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGdvdG8gb3ZlcnN0ZXA7Cj4+ICvCoMKgwqDCoMKgwqDCoCBjZmcuc3JhbV9vZmZzZXQgKz0g NDsKPj4gK8KgwqDCoCB9Cj4KPiAuIC4gLgo+Cj4+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfc2hv dyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICvCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUg KmF0dHIsIGNoYXIgKmJ1ZikKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArwqDCoMKgIGJv b2wgZGNjX2VuYWJsZSA9IGZhbHNlOwo+PiArwqDCoMKgIHN0cnVjdCBkY2NfZHJ2ZGF0YSAqZHJ2 ZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArCj4+ICvCoMKgwqAgbXV0ZXhfbG9jaygm ZHJ2ZGF0YS0+bXV0ZXgpOwo+PiArwqDCoMKgIGlmIChkcnZkYXRhLT5jdXJyX2xpc3QgPj0gZHJ2 ZGF0YS0+bnJfbGlua19saXN0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIlNl bGVjdCBsaW5rIGxpc3QgdG8gcHJvZ3JhbSB1c2luZyBjdXJyX2xpc3RcbiIpOwo+Cj4gQ2FuIHRo aXMgYWN0dWFsbHkgaGFwcGVuP8KgIElzbid0IGN1cnJfbGlzdCBpbml0aWFsbHkgMD8KPiBBbmQg Y2FuJ3QgeW91IGNvbnN0cmFpbiB0aGUgc3RvcmUgZnVuY3Rpb24gZm9yIGN1cnJfbGlzdAo+IHNv IGl0IG5ldmVyIGV4Y2VlZHMgbnJfbGlua19saXN0PwoKQWNrCgo+Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXQgPSAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgZGNjX2VuYWJsZSA9IGlzX2RjY19lbmFibGVkKGRydmRhdGEpOwo+ PiArCj4+ICvCoMKgwqAgcmV0ID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKHVuc2lnbmVkIGludClkY2NfZW5hYmxl ID4gK2VycjoKPj4gK8KgwqDCoCBtdXRleF91bmxvY2soJmRydmRhdGEtPm11dGV4KTsKPj4gK8Kg wqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3NpemVfdCBlbmFibGVfc3Rv cmUoc3RydWN0IGRldmljZSAqZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCj4+ICt7Cj4+ICvCoMKgwqAg aW50IHJldCA9IDA7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyB2YWw7Cj4+ICvCoMKgwqAgc3Ry dWN0IGRjY19kcnZkYXRhICpkcnZkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4+ICsKPj4g K8KgwqDCoCBpZiAoa3N0cnRvdWwoYnVmLCAxNiwgJnZhbCkpCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVJTlZBTDsKPgo+IEkgcmVjb21tZW5kIHVzaW5nIGtzdHJ0b2Jvb2woKSBoZXJlLgoK QWNrCgo+Cj4KPj4gKwo+PiArwqDCoMKgIGlmICh2YWwpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQg PSBkY2NfZW5hYmxlKGRydmRhdGEpOwo+PiArwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKg IGRjY19kaXNhYmxlKGRydmRhdGEpOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFyZXQpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXQgPSBzaXplOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+ PiArfQo+Cj4gLiAuIC4KPgo+PiArc3RhdGljIHNzaXplX3QgY29uZmlnX3dyaXRlX3N0b3JlKHN0 cnVjdCBkZXZpY2UgKmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6 ZV90IHNpemUpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHJldDsKPj4gK8KgwqDCoCBpbnQgbnZhbDsK Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgYWRkciwgd3JpdGVfdmFsOwo+PiArwqDCoMKgIGludCBh cGJfYnVzID0gMDsKPj4gK8KgwqDCoCBzdHJ1Y3QgZGNjX2RydmRhdGEgKmRydmRhdGEgPSBkZXZf Z2V0X2RydmRhdGEoZGV2KTsKPj4gKwo+PiArwqDCoMKgIG11dGV4X2xvY2soJmRydmRhdGEtPm11 dGV4KTsKPj4gKwo+PiArwqDCoMKgIG52YWwgPSBzc2NhbmYoYnVmLCAiJXggJXggJWQiLCAmYWRk ciwgJndyaXRlX3ZhbCwgJmFwYl9idXMpOwo+Cj4gWW91IGRpZG4ndCBkb2N1bWVudCBpbiB0aGUg c3lzZnMgZG9jdW1lbnRhdGlvbiB0aGUgb3B0aW9uYWwKPiB0aGlyZCBhcmd1bWVudCBoZXJlLCB3 aGljaCBzcGVjaWZ5IEFQQiByYXRoZXIgdGhhbiBBSEIgYnVzLgpBY2sKPgo+Cj4+ICvCoMKgwqAg aWYgKG52YWwgPD0gMSB8fCBudmFsID4gMykgewo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJ TlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyOwo+PiArwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgIGlmIChkcnZkYXRhLT5jdXJyX2xpc3QgPj0gZHJ2ZGF0YS0+bnJfbGlua19saXN0KSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIlNlbGVjdCBsaW5rIGxpc3QgdG8gcHJv Z3JhbSB1c2luZyBjdXJyX2xpc3RcbiIpOwo+Cj4gSGVyZSBhZ2FpbiAoYW5kIGV2ZXJ5d2hlcmUg ZWxzZSksIGF2b2lkIHRoaXMgcG9zc2libGUgZXJyb3IKPiBjb25kaXRpb24gYnkgZ3VhcmFudGVl aW5nIGl0IHdpbGwgbmV2ZXIgYmUgYXNzaWduZWQgYSB2YWx1ZQo+IHRoYXQncyBsYXJnZXIgdGhh biBucl9saW5rX2xpc3QuCkFjawo+Cj4KPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycjsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCBpZiAobnZhbCA9PSAzICYmIGFwYl9idXMgIT0gMCkKPj4gK8KgwqDCoMKgwqDCoMKgIGFwYl9i dXMgPSAxOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gZGNjX2FkZF93cml0ZShkcnZkYXRhLCBhZGRy LCB3cml0ZV92YWwsIGFwYl9idXMpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKg wqDCoCBnb3RvIGVycjsKPj4gKwo+PiArwqDCoMKgIG11dGV4X3VubG9jaygmZHJ2ZGF0YS0+bXV0 ZXgpOwo+PiArwqDCoMKgIHJldHVybiBzaXplOwo+PiArZXJyOgo+PiArwqDCoMKgIG11dGV4X3Vu bG9jaygmZHJ2ZGF0YS0+bXV0ZXgpOwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBERVZJQ0VfQVRUUl9XTyhjb25maWdfd3JpdGUpOwo+PiArCj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRjY19hdHRyc1tdID0gewo+PiArwqDCoMKg ICZkZXZfYXR0cl90cmlnZ2VyLAo+PiArwqDCoMKgICZkZXZfYXR0cl9lbmFibGUsCj4+ICvCoMKg wqAgJmRldl9hdHRyX2NvbmZpZywKPj4gK8KgwqDCoCAmZGV2X2F0dHJfY29uZmlnX3Jlc2V0LAo+ PiArwqDCoMKgICZkZXZfYXR0cl9yZWFkeSwKPj4gK8KgwqDCoCAmZGV2X2F0dHJfaW50ZXJydXB0 X2Rpc2FibGUsCj4+ICvCoMKgwqAgJmRldl9hdHRyX2xvb3AsCj4+ICvCoMKgwqAgJmRldl9hdHRy X3JkX21vZF93ciwKPj4gK8KgwqDCoCAmZGV2X2F0dHJfY3Vycl9saXN0LAo+PiArwqDCoMKgICZk ZXZfYXR0cl9jb25maWdfd3JpdGUsCj4+ICvCoMKgwqAgTlVMTCwKPj4gK307Cj4+ICsKPj4gK3N0 YXRpYyBpbnQgZGNjX2NyZWF0ZV9maWxlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgZGV2aWNlX2F0dHJp YnV0ZSAqKmF0dHJzKQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwLCBpOwo+Cj4gQ2FudCB0 aGVzZSBiZSBpbml0aWFsaXplZCBhdXRvbWF0aWNhbGx5IGFzIGFuIGF0dHJpYnV0ZSBncm91cAo+ IG9yIHNvbWV0aGluZz/CoCBNYXliZSBJJ20gZ2V0dGluZyBjb25mdXNlZC4KQWNrLiBBdHRyIGdy b3VwIGNhbiBiZSB1c2VkIGluIHRoaXMgY2FzZS4KPgo+Cj4+ICvCoMKgwqAgZm9yIChpID0gMDsg YXR0cnNbaV0gIT0gTlVMTDsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBkZXZpY2Vf Y3JlYXRlX2ZpbGUoZGV2LCBhdHRyc1tpXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0KSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiRENDOiBDb3VsZG4ndCBj cmVhdGUgc3lzZnMgYXR0cmlidXRlOiAlc1xuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBhdHRyc1tpXS0+YXR0ci5uYW1lKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZGNjX3NyYW1fb3BlbihzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZGNj X2RydmRhdGEgKmRydmRhdGEgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKPj4gK8KgwqDC oMKgwqDCoMKgIHN0cnVjdCBkY2NfZHJ2ZGF0YSwKPj4gK8KgwqDCoMKgwqDCoMKgIHNyYW1fZGV2 KTsKPj4gK8KgwqDCoCBmaWxlLT5wcml2YXRlX2RhdGEgPSBkcnZkYXRhOwo+PiArCj4+ICvCoMKg wqAgcmV0dXJuwqDCoMKgIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IGRjY19zcmFt X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXplX3QgbGVuLCBsb2ZmX3Qg KnBwb3MpCj4+ICt7Cj4+ICvCoMKgwqAgdW5zaWduZWQgY2hhciAqYnVmOwo+PiArwqDCoMKgIHN0 cnVjdCBkY2NfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPj4gKwo+PiAr wqDCoMKgIC8qIEVPRiBjaGVjayAqLwo+PiArwqDCoMKgIGlmIChkcnZkYXRhLT5yYW1fc2l6ZSA8 PSAqcHBvcykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgaWYg KCgqcHBvcyArIGxlbikgPiBkcnZkYXRhLT5yYW1fc2l6ZSkKPj4gK8KgwqDCoMKgwqDCoMKgIGxl biA9IChkcnZkYXRhLT5yYW1fc2l6ZSAtICpwcG9zKTsKPj4gKwo+PiArwqDCoMKgIGJ1ZiA9IGt6 YWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIWJ1ZikKPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgbWVtY3B5X2Zyb21pbyhidWYs IGRydmRhdGEtPnJhbV9iYXNlICsgKnBwb3MsIGxlbik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoY29w eV90b191c2VyKGRhdGEsIGJ1ZiwgbGVuKSkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2Vycihk cnZkYXRhLT5kZXYsICJEQ0M6IENvdWxkbid0IGNvcHkgYWxsIGRhdGEgdG8gdXNlclxuIik7Cj4K PiBEb24ndCBhbGxvdyB1c2VyIGlucHV0IChpLmUuLCBwcm92aWRpbmcgYSBiYWQgYnVmZmVyIHBv aW50ZXIKPiBpbiB0aGlzIGNhc2UpIGxlYWQgdG8gc3BhbW1pbmcgdGhlIGxvZy7CoCBUaGUgRUZB VUxUIGVycm9yIGlzCj4gZW5vdWdoIHRvIGV4cGxhaW4gd2hhdCB0aGUgcHJvYmxlbSBpcy7CoCBJ biBnZW5lcmFseSwgSSBkb24ndAo+IHRoaW5rIHlvdSBzaG91bGQgY2FsbCBkZXZfZXJyKCkgaW4g dGhlc2Ugc3lzZnMgZnVuY3Rpb25zLgoKQWNrCgo+Cj4KPj4gK8KgwqDCoMKgwqDCoMKgIGtmcmVl KGJ1Zik7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVGQVVMVDsKPj4gK8KgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoCAqcHBvcyArPSBsZW47Cj4+ICsKPj4gK8KgwqDCoCBrZnJlZShidWYpOwo+ PiArCj4+ICvCoMKgwqAgcmV0dXJuIGxlbjsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0 cnVjdCBmaWxlX29wZXJhdGlvbnMgZGNjX3NyYW1fZm9wcyA9IHsKPj4gK8KgwqDCoCAub3duZXLC oMKgwqDCoMKgwqDCoCA9IFRISVNfTU9EVUxFLAo+PiArwqDCoMKgIC5vcGVuwqDCoMKgwqDCoMKg wqAgPSBkY2Nfc3JhbV9vcGVuLAo+PiArwqDCoMKgIC5yZWFkwqDCoMKgwqDCoMKgwqAgPSBkY2Nf c3JhbV9yZWFkLAo+PiArwqDCoMKgIC5sbHNlZWvCoMKgwqDCoMKgwqDCoCA9IG5vX2xsc2VlaywK Pj4gK307Cj4KPgo+IFNpbmNlIGRjY19zcmFtX2Rldl9pbml0KCkgZG9lcyBub3RoaW5nIGJ1dCBj YWxsIHRoaXMgZnVuY3Rpb24sCj4gd2h5IG5vdCBqdXN0IGluY29ycG9yYXRlIG9uZSBpbnRvIHRo ZSBvdGhlcj/CoCBTYW1lIHRoaW5nIGdvZXMKPiBmb3IgZGNjX3NyYW1fZGV2X2V4aXQoKSBhbmQg ZGNjX3NyYW1fZGV2X2RlcmVnaXN0ZXIoKS4KQWNrCj4KPgo+PiArc3RhdGljIGludCBkY2Nfc3Jh bV9kZXZfcmVnaXN0ZXIoc3RydWN0IGRjY19kcnZkYXRhICpkcnZkYXRhKQo+PiArewo+PiArwqDC oMKgIGludCByZXQ7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2aWNlOwo+PiArwqDCoMKg IGRldl90IGRldjsKPj4gKwo+PiArwqDCoMKgIHJldCA9IGFsbG9jX2NocmRldl9yZWdpb24oJmRl diwgMCwgMSwgRENDX1NSQU1fTk9ERSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZXJyX2FsbG9jOwo+PiArCj4+ICvCoMKgwqAgY2Rldl9pbml0KCZkcnZkYXRh LT5zcmFtX2RldiwgJmRjY19zcmFtX2ZvcHMpOwo+PiArCj4+ICvCoMKgwqAgZHJ2ZGF0YS0+c3Jh bV9kZXYub3duZXIgPSBUSElTX01PRFVMRTsKPj4gK8KgwqDCoCByZXQgPSBjZGV2X2FkZCgmZHJ2 ZGF0YS0+c3JhbV9kZXYsIGRldiwgMSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZXJyX2NkZXZfYWRkOwo+PiArCj4+ICvCoMKgwqAgZHJ2ZGF0YS0+c3JhbV9j bGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgRENDX1NSQU1fTk9ERSk7Cj4+ICvCoMKg wqAgaWYgKElTX0VSUihkcnZkYXRhLT5zcmFtX2NsYXNzKSkgewo+PiArwqDCoMKgwqDCoMKgwqAg cmV0ID0gUFRSX0VSUihkcnZkYXRhLT5zcmFtX2NsYXNzKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGdv dG8gZXJyX2NsYXNzX2NyZWF0ZTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBkZXZpY2Ug PSBkZXZpY2VfY3JlYXRlKGRydmRhdGEtPnNyYW1fY2xhc3MsIE5VTEwsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRydmRhdGEtPnNyYW1fZGV2LmRl diwgZHJ2ZGF0YSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgRENDX1NSQU1fTk9ERSk7Cj4+ICvCoMKgwqAgaWYgKElTX0VSUihkZXZpY2UpKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBQVFJfRVJSKGRldmljZSk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBnb3RvIGVycl9kZXZfY3JlYXRlOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVy biAwOwo+PiArZXJyX2Rldl9jcmVhdGU6Cj4+ICvCoMKgwqAgY2xhc3NfZGVzdHJveShkcnZkYXRh LT5zcmFtX2NsYXNzKTsKPj4gK2Vycl9jbGFzc19jcmVhdGU6Cj4+ICvCoMKgwqAgY2Rldl9kZWwo JmRydmRhdGEtPnNyYW1fZGV2KTsKPj4gK2Vycl9jZGV2X2FkZDoKPj4gK8KgwqDCoCB1bnJlZ2lz dGVyX2NocmRldl9yZWdpb24oZHJ2ZGF0YS0+c3JhbV9kZXYuZGV2LCAxKTsKPj4gK2Vycl9hbGxv YzoKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkY2Nf c3JhbV9kZXZfZGVyZWdpc3RlcihzdHJ1Y3QgZGNjX2RydmRhdGEgKmRydmRhdGEpCj4+ICt7Cj4+ ICvCoMKgwqAgZGV2aWNlX2Rlc3Ryb3koZHJ2ZGF0YS0+c3JhbV9jbGFzcywgZHJ2ZGF0YS0+c3Jh bV9kZXYuZGV2KTsKPj4gK8KgwqDCoCBjbGFzc19kZXN0cm95KGRydmRhdGEtPnNyYW1fY2xhc3Mp Owo+PiArwqDCoMKgIGNkZXZfZGVsKCZkcnZkYXRhLT5zcmFtX2Rldik7Cj4+ICvCoMKgwqAgdW5y ZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRydmRhdGEtPnNyYW1fZGV2LmRldiwgMSk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgZGNjX3NyYW1fZGV2X2luaXQoc3RydWN0IGRjY19kcnZkYXRhICpk cnZkYXRhKQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvCoMKgwqAgcmV0 ID0gZGNjX3NyYW1fZGV2X3JlZ2lzdGVyKGRydmRhdGEpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRydmRhdGEtPmRldiwgIkRDQzogc3JhbSBub2RlIG5v dCByZWdpc3RlcmVkLlxuIik7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgdm9pZCBkY2Nfc3JhbV9kZXZfZXhpdChzdHJ1Y3QgZGNjX2RydmRhdGEgKmRy dmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgZGNjX3NyYW1fZGV2X2RlcmVnaXN0ZXIoZHJ2ZGF0YSk7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZGNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4gK8KgwqDCoCBpbnQgcmV0ID0g MCwgaSwgZW5hYmxlX3NpemUsIG5yX2NvbmZpZ19zaXplLCBjZmdfaGVhZF9zaXplOwo+PiArwqDC oMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICvCoMKgwqAgc3RydWN0IGRj Y19kcnZkYXRhICpkY2M7Cj4+ICvCoMKgwqAgc3RydWN0IHJlc291cmNlICpyZXM7Cj4+ICvCoMKg wqAgY29uc3Qgc3RydWN0IHFjb21fZGNjX2NvbmZpZyAqY2ZnOwo+PiArCj4+ICvCoMKgwqAgZGNj ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkY2MpLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDC oCBpZiAoIWRjYykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvC oMKgwqAgZGNjLT5kZXYgPSAmcGRldi0+ZGV2Owo+PiArwqDCoMKgIHBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIGRjYyk7Cj4+ICsKPj4gK8KgwqDCoCBkY2MtPmJhc2UgPSBkZXZtX3BsYXRmb3Jt X2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7Cj4KPiBJIG1lbnRpb25lZCBlYXJsaWVyLCBpdCBt aWdodCBiZSBuaWNlIHRvIGdpdmUgdGhlc2UgbWVtb3J5Cj4gcmFuZ2VzIGEgbmFtZSBtb3JlIG1l YW5pbmdmdWwgdGhhbiAwIGFuZCAxLgpSZWFzb24gZXhwbGFpbmVkIGluIHRoZSByZXBseSBvbiB0 aGUgcHJldmlvdXMgcGF0Y2guCj4KPgo+PiArwqDCoMKgIGlmIChJU19FUlIoZGNjLT5iYXNlKSkK Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGRjYy0+YmFzZSk7Cj4+ICsKPj4gK8Kg wqDCoCBkY2MtPnJhbV9iYXNlID0gZGV2bV9wbGF0Zm9ybV9nZXRfYW5kX2lvcmVtYXBfcmVzb3Vy Y2UocGRldiwgMSwgCj4+ICZyZXMpOwo+PiArwqDCoMKgIGlmIChJU19FUlIoZGNjLT5yYW1fYmFz ZSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihkY2MtPnJhbV9iYXNlKTsKPj4g Kwo+PiArwqDCoMKgIGRjYy0+cmFtX3NpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7Cj4KPiBEaWQg eW91IGFscmVhZHkgdGFrZSBjYXJlIG9mIHJlbWFwcGluZyB3aXRoIHRoZSBjYWxsIGp1c3QgYWJv dmU/CkFjawo+Cj4KPj4gK8KgwqDCoCBkY2MtPnJhbV9iYXNlID0gZGV2bV9pb3JlbWFwKGRldiwg cmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKPj4gK8KgwqDCoCBpZiAoIWRjYy0+cmFt X2Jhc2UpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPgo+IEluIGFueSBjYXNl LCBJIHRoaW5rIHRoaXMgc2Vjb25kIG1lbW9yeSByZWdpb24gaXMgbW9yZSBsaWtlCj4gbWVtb3J5 IHNwYWNlIHRoYW4gSS9PIHNwYWNlLsKgIElmIHNvLCBtZW1yZW1hcHBpbmcgaXQgbWlnaHQKPiBi ZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCgogwqBBY2sKCj4KPgo+PiArwqDCoMKgIGNmZyA9IG9m X2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRldi0+ZGV2KTsKPj4gK8KgwqDCoCBkY2MtPnJhbV9v ZmZzZXQgPSBjZmctPmRjY19yYW1fb2Zmc2V0Owo+PiArCj4+ICvCoMKgwqAgdmFsID0gZGNjX3Jl YWRsKGRjYywgRENDX0hXX0lORk8pOwo+Cj4gQ2FuIHlvdSBwcm92aWRlIGEgc2hvcnQgYmxvY2sg b2YgY29kZSB0aGF0IGV4cGxhaW5zIGluIEVuZ2xpc2gKPiB3aGF0IHRoZSBuZXh0IHNldCBvZiBp ZiBzdGF0ZW1lbnRzIGFyZSBkb2luZywgYW5kIHdoeT8KClNvIGhlcmUgSSBhbSBmaW5kaW5nIG91 dCB0aGUgbWVtb3J5IG1hcCB2ZXJzaW9uIG9mIERDQyBieSByZWFkaW5nIApEQ0NfSFdfSU5GTyBy ZWdpc3Rlci4KCklmIERDQ19WRVJfSU5GT19CSVQoOSkgb2YgRENDX0hXX0lORk8gaXMgc2V0IHRo ZW4KCm1lbW9yeSBtYXAgdmVyc2lvbiBpcyAzIGFuZCBtYXggc3VwcG9ydGVkIGxpbmsgbGlzdCBp cyB0aGUgdmFsdWUgYXQgCnJlZ2lzdGVyIERDQ19MTF9OVU1fSU5GTy4KCklmwqAgYWxsIHRoZSBm aXJzdCA3IGJpdHMoMHg3Rikgb2YgRENDX0hXX0lORk8gaXMgc2V0LCB0aGVuCgptZW1vcnkgbWFw IHZlcnNpb24gaXMgMiBhbmTCoCBtYXggc3VwcG9ydGVkIGxpbmsgbGlzdCBpcyB0aGUgdmFsdWUg YXQgCnJlZ2lzdGVyIERDQ19MTF9OVU1fSU5GTy4KCklmIG5vbmUgb2YgdGhlIGFib3ZlIGlzIHRy dWUgdGhlbgoKTWVtb3J5IG1hcCB2ZXJzaW9uIGlzIDEgYW5kIG1heCBzdXBwb3J0ZWQgbGluayBs aXN0IGlzIApEQ0NfTUFYX0xJTktfTElTVChwcmVkZWZpbmVkKSB3aGljaCBpcyA4LgoKPgo+PiAr wqDCoMKgIGlmIChGSUVMRF9HRVQoQklUKERDQ19WRVJfSU5GT19CSVQpLCB2YWwpKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBkY2MtPm1lbV9tYXBfdmVyID0gRENDX01FTV9NQVBfVkVSMzsKPj4gK8Kg wqDCoMKgwqDCoMKgIGRjYy0+bnJfbGlua19saXN0ID0gZGNjX3JlYWRsKGRjYywgRENDX0xMX05V TV9JTkZPKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkY2MtPm5yX2xpbmtfbGlzdCA9PSAwKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm7CoMKgwqAgLUVJTlZBTDsKPj4gK8KgwqDC oCB9IGVsc2UgaWYgKCh2YWwgJiBEQ0NfVkVSX01BU0syKSA9PSBEQ0NfVkVSX01BU0syKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBkY2MtPm1lbV9tYXBfdmVyID0gRENDX01FTV9NQVBfVkVSMjsKPj4g K8KgwqDCoMKgwqDCoMKgIGRjYy0+bnJfbGlua19saXN0ID0gZGNjX3JlYWRsKGRjYywgRENDX0xM X05VTV9JTkZPKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkY2MtPm5yX2xpbmtfbGlzdCA9PSAw KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm7CoMKgwqAgLUVJTlZBTDsKPj4gK8Kg wqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgZGNjLT5tZW1fbWFwX3ZlciA9IERDQ19N RU1fTUFQX1ZFUjE7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkY2MtPm5yX2xpbmtfbGlzdCA9IERDQ19N QVhfTElOS19MSVNUOwo+PiArwqDCoMKgIH0KPgo+IFdoYXQgZG9lcyBiaXQgNiBpbiB0aGUgSFdf SU5GTyByZWdpc3RlciByZXByZXNlbnQ/CgpUaGlzIGdpdmVzIHRoZSBsb29wX29mZnNldCB2YWx1 ZSB0eXBlIGZvciB0aGUgZGNjIHZlcnNpb24gd2hpY2ggaXMgdXNlZCBpbgoKY2FzZSBvZiBsb29w IGFkZHJlc3Nlcy4KCj4KPgo+PiArwqDCoMKgIGlmICgodmFsICYgQklUKDYpKSA9PSBCSVQoNikp Cj4KPiDCoMKgwqDCoGlmICh2YWwgJiBCSVQoNikpCj4KPj4gK8KgwqDCoMKgwqDCoMKgIGRjYy0+ bG9vcG9mZiA9IERDQ19GSVhfTE9PUF9PRkZTRVQ7Cj4+ICvCoMKgwqAgZWxzZQo+PiArwqDCoMKg wqDCoMKgwqAgZGNjLT5sb29wb2ZmID0gZ2V0X2JpdG1hc2tfb3JkZXIoKGRjYy0+cmFtX3NpemUg Kwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRjYy0+cmFtX29mZnNldCkgLyA0 IC0gMSk7Cj4+ICsKPj4gK8KgwqDCoCBtdXRleF9pbml0KCZkY2MtPm11dGV4KTsKPj4gK8KgwqDC oCAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYWxsIGVudHJpZXMgYXQgb25jZSAqLwo+PiArwqDCoMKg IGVuYWJsZV9zaXplID0gZGNjLT5ucl9saW5rX2xpc3QgKiBzaXplb2YoYm9vbCk7Cj4+ICvCoMKg wqAgbnJfY29uZmlnX3NpemUgPSBkY2MtPm5yX2xpbmtfbGlzdCAqIHNpemVvZihzaXplX3QpOwo+ PiArwqDCoMKgIGNmZ19oZWFkX3NpemUgPSBkY2MtPm5yX2xpbmtfbGlzdCAqIHNpemVvZihzdHJ1 Y3QgbGlzdF9oZWFkKTsKPj4gKwo+PiArwqDCoMKgIGRjYy0+ZW5hYmxlID0gZGV2bV9remFsbG9j KGRldiwgZW5hYmxlX3NpemUgKyBucl9jb25maWdfc2l6ZSArIAo+PiBjZmdfaGVhZF9zaXplLCBH RlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIWRjYy0+ZW5hYmxlKQo+PiArwqDCoMKgwqDCoMKg wqAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gK8KgwqDCoCBkY2MtPm5yX2NvbmZpZ8KgID0gKHNp emVfdCAqKShkY2MtPmVuYWJsZSArIGRjYy0+bnJfbGlua19saXN0KTsKPj4gK8KgwqDCoCBkY2Mt PmNmZ19oZWFkID0gKHN0cnVjdCBsaXN0X2hlYWQgKikoZGNjLT5ucl9jb25maWcgKyAKPj4gZGNj LT5ucl9saW5rX2xpc3QpOwo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IGRjYy0+bnJf bGlua19saXN0OyBpKyspCj4+ICvCoMKgwqDCoMKgwqDCoCBJTklUX0xJU1RfSEVBRCgmZGNjLT5j ZmdfaGVhZFtpXSk7Cj4+ICsKPj4gK8KgwqDCoCBkY2MtPmN1cnJfbGlzdCA9IERDQ19JTlZBTElE X0xJTktfTElTVDsKPj4gK8KgwqDCoCByZXQgPSBkY2Nfc3JhbV9kZXZfaW5pdChkY2MpOwo+PiAr wqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvC oMKgwqAgcmV0dXJuIGRjY19jcmVhdGVfZmlsZXMoZGV2LCBkY2NfYXR0cnMpOwo+Cj4gSWYgZGNj X2NyZWF0ZV9maWxlcygpIHJldHVybnMgYW4gZXJyb3IsIHlvdSBhcmUgbm90IGNhbGxpbmcKPiBk Y2Nfc3JhbV9kZXZfZXhpdCgpIHRvIGNsZWFuIHRoaW5ncyB1cC4KCkFjawoKPgo+Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgZGNjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBkY2NfZHJ2ZGF0YSAqZHJ2ZGF0YSA9IHBsYXRmb3Jt X2dldF9kcnZkYXRhKHBkZXYpOwo+PiArCj4+ICvCoMKgwqAgZGNjX3NyYW1fZGV2X2V4aXQoZHJ2 ZGF0YSk7Cj4+ICsKPj4gK8KgwqDCoCBkY2NfY29uZmlnX3Jlc2V0KGRydmRhdGEpOwo+PiArCj4+ ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcWNv bV9kY2NfY29uZmlnIHNtODE1MF9jZmcgPSB7Cj4+ICvCoMKgwqAgLmRjY19yYW1fb2Zmc2V0wqDC oMKgID0gMHg1MDAwLAo+Cj4gSWYgeW91IGtub3cgeW91J2xsIGJlIGFkZGluZyBtb3JlIGZpZWxk cyB0aGVyZSdzIG5vdGhpbmcKPiB3cm9uZyB3aXRoIHRoaXMsIGJ1dCBpZiB0aGUgb25seSB0aGlu ZyB5b3UncmUgc3RvcmluZyBpcwo+IHRoZSBSQU0gb2Zmc2V0LCB0aGVyZSdzIG5vIG5lZWQgdG8g ZGVmaW5lIHRoYXQgd2l0aGluIGEKPiBzdHJ1Y3R1cmUuwqAgSnVzdCBkbyBzb21ldGhpbmcgbGlr ZToKPgo+IMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJxY29tLHNtODE1MC1kY2MiLCAuZGF0YSA9 ICh2b2lkICopMHg1MDAwIH0sCj4KQWNrCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHFjb21fZGNjX2NvbmZpZyBzYzcyODBfY2ZnID0gewo+PiArwqDCoMKgIC5kY2NfcmFtX29m ZnNldCA9IDB4MTIwMDAsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHFjb21f ZGNjX2NvbmZpZyBzYzcxODBfY2ZnID0gewo+PiArwqDCoMKgIC5kY2NfcmFtX29mZnNldCA9IDB4 NjAwMCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcWNvbV9kY2NfY29uZmln IHNkbTg0NV9jZmcgPSB7Cj4+ICvCoMKgwqAgLmRjY19yYW1fb2Zmc2V0ID0gMHg2MDAwLAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZGNjX21hdGNoX3Rh YmxlW10gPSB7Cj4+ICvCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJxY29tLHNtODE1MC1kY2MiLCAu ZGF0YSA9ICZzbTgxNTBfY2ZnIH0sCj4+ICvCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJxY29tLHNj NzI4MC1kY2MiLCAuZGF0YSA9ICZzYzcyODBfY2ZnIH0sCj4+ICvCoMKgwqAgeyAuY29tcGF0aWJs ZSA9ICJxY29tLHNjNzE4MC1kY2MiLCAuZGF0YSA9ICZzYzcxODBfY2ZnIH0sCj4+ICvCoMKgwqAg eyAuY29tcGF0aWJsZSA9ICJxY29tLHNkbTg0NS1kY2MiLCAuZGF0YSA9ICZzZG04NDVfY2ZnIH0s Cj4+ICvCoMKgwqAgeyB9Cj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZGNjX21h dGNoX3RhYmxlKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGNjX2Ry aXZlciA9IHsKPj4gK8KgwqDCoCAucHJvYmUgPSBkY2NfcHJvYmUsCj4+ICvCoMKgwqAgLnJlbW92 ZcKgwqDCoCA9IGRjY19yZW1vdmUsCj4+ICvCoMKgwqAgLmRyaXZlcsKgwqDCoCA9IHsKPj4gK8Kg wqDCoMKgwqDCoMKgIC5uYW1lID0gInFjb20tZGNjIiwKPj4gK8KgwqDCoMKgwqDCoMKgIC5vZl9t YXRjaF90YWJsZcKgwqDCoCA9IGRjY19tYXRjaF90YWJsZSwKPj4gK8KgwqDCoCB9LAo+PiArfTsK Pj4gKwo+PiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkY2NfZHJpdmVyKTsKPj4gKwo+PiArTU9E VUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJRdWFsY29tbSBU ZWNobm9sb2dpZXMgSW5jLiBEQ0MgZHJpdmVyIik7Cj4+ICsKPj4KPgo+Cj4KCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFp bGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK