From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F84CC433F5 for ; Thu, 9 Sep 2021 04:23:37 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 0B4FE61184 for ; Thu, 9 Sep 2021 04:23:37 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 0B4FE61184 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:Date: Message-ID:From:References:Cc:To:Subject:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=VZfeoALlHd6TVLPlrG0tSIMIAX/+hiuLClkQEnq3acs=; b=Or6Qt/mbxrpNyb9M8AAgZeg409 v30SUKRebhKrKbkCbaG/cItFsF3ilZnWAp20JbUpJsga+V7a7lwVxW1HjPKcR+3SjJthJUQN2IMH2 cWej+1TQjHiQhmm54zN8jaJ8WlLOO71NPnTQ/vpa7fLmHUjwVHfaBwxa9WIG2rZ7NRmBm8HXrk4N6 hlkS7qUT4GndoKhy1nqjeSr+Bv6CnUeLO83bUsjdRBw4VZGix+JR1fy08hAV+raEJD8CCl0fHvlvn w0JQROAwdXpk+kYnyhHzAK1DuyuNFIsWcO9tW55LLwHSf67DIm0dqew0uKxMAT1rwwWqFoKQKP6/3 lanrr6wQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mOBYh-008BE7-2p; Thu, 09 Sep 2021 04:21:07 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mOBYb-008BDk-4Z for linux-arm-kernel@lists.infradead.org; Thu, 09 Sep 2021 04:21:05 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9BD2731B; Wed, 8 Sep 2021 21:20:53 -0700 (PDT) Received: from [10.163.72.152] (unknown [10.163.72.152]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4998C3F73D; Wed, 8 Sep 2021 21:20:48 -0700 (PDT) Subject: Re: [PATCH 08/10] coresight: trbe: Workaround TRBE errat overwrite in FILL mode To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, coresight@lists.linaro.org, will@kernel.org, catalin.marinas@arm.com, james.morse@arm.com, mathieu.poirier@linaro.org, mike.leach@linaro.org, leo.yan@linaro.org, maz@kernel.org, mark.rutland@arm.com References: <20210728135217.591173-1-suzuki.poulose@arm.com> <20210728135217.591173-9-suzuki.poulose@arm.com> <7edeb6de-5de6-e9b1-c684-a7f5782d9a7b@arm.com> From: Anshuman Khandual Message-ID: <3b20c016-446a-1556-745f-7d8a6a2c47e3@arm.com> Date: Thu, 9 Sep 2021 09:51:51 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210908_212101_337164_6E3CEC53 X-CRM114-Status: GOOD ( 61.37 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA5LzcvMjEgMzoyOCBQTSwgU3V6dWtpIEsgUG91bG9zZSB3cm90ZToKPiBPbiAwMy8wOC8y MDIxIDExOjI1LCBBbnNodW1hbiBLaGFuZHVhbCB3cm90ZToKPj4KPj4KPj4gT24gNy8yOC8yMSA3 OjIyIFBNLCBTdXp1a2kgSyBQb3Vsb3NlIHdyb3RlOgo+Pj4gQVJNIE5lb3ZlcnNlLU4yICgjMjEz OTIwOCkgYW5kIENvcnRleC1BNzEwKCMjMjExOTg1OCkgc3VmZmVycyBmcm9tCj4+PiBhbiBlcnJh dHVtLCB3aGljaCB3aGVuIHRyaWdnZXJlZCwgbWlnaHQgY2F1c2UgdGhlIFRSQkUgdG8gb3Zlcndy aXRlCj4+PiB0aGUgdHJhY2UgZGF0YSBhbHJlYWR5IGNvbGxlY3RlZCBpbiBGSUxMIG1vZGUsIGlu IHRoZSBldmVudCBvZiBhIFdSQVAuCj4+PiBpLmUsIHRoZSBUUkJFIGRvZXNuJ3Qgc3RvcCB3cml0 aW5nIHRoZSBkYXRhLCBpbnN0ZWFkIHdyYXBzIHRvIHRoZSBiYXNlCj4+PiBhbmQgY291bGQgd3Jp dGUgdXB0byAzIGNhY2hlIGxpbmUgc2l6ZSB3b3J0aCB0cmFjZS4gVGh1cywgdGhpcyBjb3VsZAo+ Pj4gY29ycnVwdCB0aGUgdHJhY2UgYXQgdGhlICJCQVNFIiBwb2ludGVyLgo+Pj4KPj4+IFRoZSB3 b3JrYXJvdW5kIGlzIHRvIHByb2dyYW0gdGhlIHdyaXRlIHBvaW50ZXIgMjU2Ynl0ZXMgZnJvbSB0 aGUKPj4+IGJhc2UsIHN1Y2ggdGhhdCBpZiB0aGUgZXJyYXR1bSBpcyB0cmlnZ2VyZWQsIGl0IGRv ZXNuJ3Qgb3ZlcndyaXRlCj4+PiB0aGUgdHJhY2UgZGF0YSB0aGF0IHdhcyBjYXB0dXJlZC4gVGhp cyBza2lwcGVkIHJlZ2lvbiBjb3VsZCBiZQo+Pj4gcGFkZGVkIHdpdGggaWdub3JlIHBhY2tldHMg YXQgdGhlIGVuZCBvZiB0aGUgc2Vzc2lvbiwgc28gdGhhdAo+Pj4gdGhlIGRlY29kZXIgc2VlcyBh IGNvbnRpbnVvdXMgYnVmZmVyIHdpdGggc29tZSBwYWRkaW5nIGF0IHRoZQo+Pj4gYmVnaW5uaW5n LiBUaGUgdHJhY2UgZGF0YSB3cml0dGVuIGF0IHRoZSBiYXNlIGlzIGNvbnNpZGVyZWQKPj4+IGxv c3QgYXMgdGhlIGxpbWl0IGNvdWxkIGhhdmUgYmVlbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwZXJm Cj4+PiByaW5nIGJ1ZmZlciwgYW5kIGp1bXBpbmcgdG8gdGhlICJiYXNlIiBpcyBub3QgYWNjZXB0 YWJsZS4KPj4KPj4gSWYgdGhlIHdyaXRlIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBoYXZlIGFs d2F5cyBzdGFydGVkIGJleW9uZAo+PiBbYmFzZSArIDI1Nl0gYW5kIHRoZW4gd3JhcHMgYXJvdW5k LiBXaHkgY2Fubm90IHRoZSBpbml0aWFsIHRyYWNlCj4+IGF0IFtiYXNlIC4uIGJhc2UgKyAyNTZd IG5vdCB0byBiZSBjb25zaWRlcmVkIGZvciBwZXJmID8KPiAKPiBSZW1lbWJlciB0aGF0IHdlIGNv dWxkIGJlIGRlYWxpbmcgd2l0aCBhIHJlZ2lvbiB3aXRoaW4gdGhlIGxhcmdlcgo+IHJpbmcgYnVm ZmVyLgo+IAo+IFJpbmcgYnVmZmVyCj4gCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 IHdyaXRlIChoZWFkICsgMjU2KQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdgo+IMKg XC0tLS0tLS0tLXh4eHh4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KPiDCoMKg wqDCoMKgwqDCoMKgwqDCoCBewqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXsKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBeCj4gwqDCoMKgwqDCoCBoZWFkIHzCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IExpbWl0wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIFJpbmcgYnVmZmVyIGVuZAo+IAo+IEluIHRoaXMgY2FzZSwgeW91IGFyZSB0YWxraW5nIGFi b3V0IHRoZSBhcmVhIG1hcmtlZCBhcwo+ICJ4eHgiLCB3aGljaCBpZGVhbGx5IHNob3VsZCBiZSBh cHBlYXJpbmcganVzdCBhZnRlciBMaW1pdCwKPiBpbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiB0aGUg dHJhY2Ugd2l0aG91dCB0aGUgZXJyYXR1bS4KClJpZ2h0LgoKPiAKPiBUaHVzIGxlYXZpbmcgdGhl IGRhdGEgYXQgW2Jhc2UuLiBiYXNlKzI1Nl0gc2hvdWxkCj4gYmUgaWRlYWxseSBtb3ZlZCB0byB0 aGUgZW5kIChhZnRlciBsaW1pdCBwdHIpLiBBbmQgOgo+IAo+IDEpIFdlIGRvbid0IGFsd2F5cyBo YXZlIHNwYWNlIGFmdGVyIHRoZSAibGltaXQiIGluIHRoZSByaW5nIGJ1ZmZlci4KPiAyKSBXZSBk b24ndCBrbm93IGlmIHRoZSBlcnJhdHVtIHdhcyB0cmlnZ2VyZWQgYXQgYWxsLCB1bmRlciB0aGUK PiDCoMKgIG1pY3JvIGFyY2hpdGVjdHVyYWwgY29uZGl0aW9ucy4KPiAKPiBTbywgaXQgaXMgaWRl YWwgdG8gbGl2ZSB3aXRoIHRoaXMgaWdub3JpbmcgdGhlIHRyYWNlIGZvciBub3cuCgpCdXQgY291 bGQgbm90IHdlIGp1c3QgZG8gc29tZXRoaW5nIGxpa2UgdGhpcyBpbnN0ZWFkLgoKLSBXaGlsZSBy ZS1jb25maWd1cmluZyBhbmQgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0cmFjZSwgcGFkIHRoZSBlbnRp cmUKICBhcmVhIGkuZSBbYmFzZSAuLiBiYXNlICsgMjU2XSB3aXRoIGlnbm9yZSBwYWNrZXRzLgoK LSBBZnRlciBhbiB3cmFwIGV2ZW50LCBwdXNoIFtiYXNlIC4uIGJhc2UgKyAyNTZdIGludG8gdGhl IHBlcmYgcmluZwogIGJ1ZmZlciB2aWEgcGVyZl9hdXhfb3V0cHV0X2JlZ2luKCkvZW5kKCkganVz dCBhZnRlciBub3JtYWwgdHJhY2UKICBkYXRhIGNhcHR1cmUgKHBlcmYgcmluZyBidWZmZXIgaW5k aWNlcyB3b3VsZCBoYXZlIGdvdCBhZGp1c3RlZCB0bwogIGFjY2VwdCBzb21lIG5ldyBidWZmZXIg ZGF0YSkuCgpBZnRlcndhcmRzLCBpZiB0aGUgZXJyYXR1bSBpcyB0cmlnZ2VyZWQsIHJlYWwgdHJh Y2UgaXMgY2FwdHVyZWQuIEJ1dApvdGhlcndpc2UsIHRoZXJlIGlzIGFsd2F5cyBpZ25vcmUgcGFj a2V0cyBmb3IgdGhlIGRlY29kZXIgdG8gcGFyc2UuCgo+IAo+Pgo+Pj4gV2Ugc2V0IHRoZSBmbGFn cyBhbHJlYWR5IHRvIGluZGljYXRlIHRoYXQgc29tZSBhbW91bnQgb2YgdHJhY2UKPj4+IHdhcyBs b3N0IGR1cmluZyB0aGUgRklMTCBldmVudCBJUlEuIFNvIHRoaXMgaXMgZmluZS4KPj4KPj4gUmln aHQsIGZyb20gcGVyZiBkYXRhIGZsYWcgcG9pbnQgb2YgdmlldyBpdCBpcyBub3QgYSBwcm9ibGVt Lgo+PiBCdXQgSSBhbSBzdGlsbCB3b25kZXJpbmcgd2h5IGNhbm5vdCB0aGUgdHJhY2UgYXQgdGhl IGJhc2UgY2FuCj4+IG5vdCBiZSBjb25zdW1lZCBieSBwZXJmLgo+Pgo+IAo+IFBsZWFzZSBzZWUg YWJvdmUuCj4gCj4+Pgo+Pj4gT25lIGltcG9ydGFudCBjaGFuZ2Ugd2l0aCB0aGUgd29yayBhcm91 bmQgaXMsIHdlIHByb2dyYW0gdGhlCj4+PiBUUkJCQVNFUl9FTDEgdG8gY3VycmVudCBwYWdlIHdo ZXJlIHdlIGFyZSBhbGxvd2VkIHRvIHdyaXRlLgo+Pj4gT3RoZXJ3aXNlLCBpdCBjb3VsZCBvdmVy d3JpdGUgYSByZWdpb24gdGhhdCBtYXkgYmUgY29uc3VtZWQKPj4+IGJ5IHRoZSBwZXJmLiBUb3dh cmRzIHRoaXMsIHdlIGFsd2F5cyBtYWtlIHN1cmUgdGhhdCB0aGUKPj4KPj4gV2hpbGUgZW5hYmxp bmcgVFJCRSBhZnRlciByZXF1aXJlZCByZWNvbmZpZ3VyYXRpb24sIHRoaXMgd2lsbAo+PiBjYXVz ZSBib3RoIFRSQkJBU0VSX0VMMSBhbmQgVFJCUFRSX0VMMSB0byBjaGFuZ2UgZWFjaCB0aW1lCj4+ IGFyb3VuZCAoYmFzaWNhbGx5IFRSQkJBU0VSX0VMMSBmb2xsb3dzIGhhbmRsZS0+aGVhZCkgPwo+ IAo+IFllcy4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgVFJCRSBkb2Vzbid0IGNvcnJ1cHQg dGhlICJ0cmFjZQo+IGRhdGEiIGF0IHRoZSAic3RhcnQiIG9mIHRoZSBhY3R1YWwgcmluZyBidWZm ZXIgKG5vdCB0aGUgYXJlYQo+IHRoYXQgd2UgYXJlIGFsbG93ZWQgdG8gd3JpdGUpLiBJbiBhIG51 dHNoZWxsLCBUUkJFIGlzIG9ubHkgYWxsb3dlZAo+IHRvIHdyaXRlIHdpdGhpbiB0aGUgYXJlYSBb aGVhZCAuLi4gaGVhZCArIHNpemVdLgoKT2theS4KCj4gCj4+Cj4+PiAiaGFuZGxlLT5oZWFkIiBh bmQgdGh1cyB0aGUgdHJiZV93cml0ZSBpcyBQQUdFX1NJWkUgYWxpZ25lZCwKPj4+IHNvIHRoYXQg d2UgY2FuIHNldCB0aGUgQkFTRSB0byB0aGUgUEFHRSBiYXNlIGFuZCBtb3ZlIHRoZQo+Pj4gVFJC UFRSIHRvIHRoZSAyNTZieXRlcyBvZmZzZXQuCj4+Cj4+IE5vdyB0aGF0IGJhc2UgbmVlZHMgdG8g Zm9sbG93IGhhbmRsZS0+aGVhZCwgYm90aCBuZWVkcyB0byBiZQo+PiBQQUdFX1NJWkUgYWxpZ25l ZCAoaW5jbHVkaW5nIHRoZSB3cml0ZSBwb2ludGVyKSBiZWNhdXNlIGJhc2UKPj4gcG9pbnRlciBu ZWVkcyB0byBiZSBQQUdFX1NJWkUgYWxpZ25lZCA/Cj4gCj4gQmFzZSBtdXN0IGFsd2F5cyBiZSBw YWdlIGFsaWduZWQgZm9yIFRSQkUuIE5vdywgd2l0aCB0aGUgZXJyYXR1bSwKPiB0aGUgQmFzZSBt dXN0IGJlIHdpdGhpbiBbIGhlYWQgLi4uIGhlYWQgKyBzaXplIF0uIFRodXMgd2UgY2Fubm90Cj4g cHV0IFRSQlBUUiAod3JpdGUgcHRyKSBvdXRzaWRlIFtUUkJCQVNFUiAuLi4gVFJCTElNSVRSXSwg dGhlCj4gd3JpdGUgcHRyIGZvbGxvd3MgdGhlIGJhc2UgYW5kIGl0IGlzIHNoaWZ0ZWQgYnkgMjU2 Ynl0ZSB0byBhbGxvdwo+IHRoZSBzY3JhdGNoIHNwYWNlIGZvciBvdmVyd3JpdGUsIHdoZW4gdGhl IGVycmF0dW0gdHJpZ2dlcnMuCgpPa2F5LgoKPiAKPj4KPj4+Cj4+PiBDYzogTWlrZSBMZWFjaCA8 bWlrZS5sZWFjaEBsaW5hcm8ub3JnPgo+Pj4gQ2M6IE1hdGhpZXUgUG9pcmllciA8bWF0aGlldS5w b2lyaWVyQGxpbmFyby5vcmc+Cj4+PiBDYzogQW5zaHVtYW4gS2hhbmR1YWwgPGFuc2h1bWFuLmto YW5kdWFsQGFybS5jb20+Cj4+PiBDYzogTGVvIFlhbiA8bGVvLnlhbkBsaW5hcm8ub3JnPgo+Pj4g U2lnbmVkLW9mZi1ieTogU3V6dWtpIEsgUG91bG9zZSA8c3V6dWtpLnBvdWxvc2VAYXJtLmNvbT4K Pj4+IC0tLQo+Pj4gwqAgZHJpdmVycy9od3RyYWNpbmcvY29yZXNpZ2h0L2NvcmVzaWdodC10cmJl LmMgfCAxMTEgKysrKysrKysrKysrKysrKystLQo+Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDEwMiBp bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNpZ2h0LXRyYmUuYyBiL2RyaXZlcnMvaHd0cmFjaW5n L2NvcmVzaWdodC9jb3Jlc2lnaHQtdHJiZS5jCj4+PiBpbmRleCA5ZWEyODgxMzE4MmIuLmNkOTk3 ZWQ1ZDkxOCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvaHd0cmFjaW5nL2NvcmVzaWdodC9jb3Jl c2lnaHQtdHJiZS5jCj4+PiArKysgYi9kcml2ZXJzL2h3dHJhY2luZy9jb3Jlc2lnaHQvY29yZXNp Z2h0LXRyYmUuYwo+Pj4gQEAgLTE3LDYgKzE3LDcgQEAKPj4+IMKgIMKgICNpbmNsdWRlIDxhc20v YmFycmllci5oPgo+Pj4gwqAgI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+Cj4+PiArI2luY2x1ZGUg PGFzbS9jcHVmZWF0dXJlLmg+Cj4+PiDCoCDCoCAjaW5jbHVkZSAiY29yZXNpZ2h0LXNlbGYtaG9z dGVkLXRyYWNlLmgiCj4+PiDCoCAjaW5jbHVkZSAiY29yZXNpZ2h0LXRyYmUuaCIKPj4+IEBAIC04 NCw5ICs4NSwxNyBAQCBzdHJ1Y3QgdHJiZV9idWYgewo+Pj4gwqDCoCAqIHBlciBUUkJFIGluc3Rh bmNlLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBsaXN0IG9mIGVycmF0YSB0aGF0Cj4+PiDCoMKgICog YWZmZWN0cyB0aGUgZ2l2ZW4gaW5zdGFuY2Ugb2YgdGhlIFRSQkUuCj4+PiDCoMKgICovCj4+PiAt I2RlZmluZSBUUkJFX0VSUkFUQV9NQVjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAKPj4+ICsjZGVm aW5lIFRSQkVfV09SS0FST1VORF9PVkVSV1JJVEVfRklMTF9NT0RFwqDCoMKgIDAKPj4+ICsjZGVm aW5lIFRSQkVfRVJSQVRBX01BWMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxCj4+Cj4+ IEFsdGhvdWdoIEkgYW0gbm90IHN1cmUgaG93IHRvIGFjaGlldmUgaXQsIFRSQkVfRVJSQVRBX01B WCBzaG91bGQgYmUKPj4gZGVyaXZlZCBmcm9tIGVycmF0YSBjcHVjYXAgc3RhcnQgYW5kIGVuZCBt YXJrZXJzIHdoaWNoIGlkZW50aWZ5IGFsbAo+PiBUUkJFIHNwZWNpZmljIGVycmF0YXMuIFRoZSBo YXJkIGNvZGluZyBhYm92ZSBjb3VsZCBiZSBhdm9pZGVkLgo+IAo+IFRoaXMgbGV0cyB1cyBoYW5k IHBpY2sgdGhlIFRSQkUgZXJyYXRhIGFuZCBhdm9pZCBoYXZpbmcgdG8gZG8KPiBzb21ldGhpbmcg eW91IHNheSBpcyBoYXJkIHRvIGFjaGlldmUuIFdoYXQgZG8geW91IHRoaW5rIGlzCj4gcHJvYmxl bWF0aWMgd2l0aCB0aGlzIGFwcHJvYWNoID8KCk5vIHByb2JsZW0gYXMgc3VjaC4KCk5vdyB0aGF0 IHdlIGtub3cgdGhlIGFybTY0IGVycmF0dW1zIGFyZSBub3QgbGluZWFyIGFuZCBtaWdodCBhbHNv CmhhdmUgbm9uLVRSQkUgZXJyYXR1bXMgaW4tYmV0d2VlbiBpdHMgcmFuZ2UuIEhlbmNlIHRoZXJl IG1pZ2h0IG5vdApiZSBhbnkgQVJNNjRfVFJCRV9FUlJBVEFfU1RBUlQgYW5kIEFSTTY0X1RSQkVf RVJSQVRBX0VORCBtYXJrZXJzLAp3aGljaCBJIHdhcyBob3BpbmcgZm9yLiBUaGUgb3JpZ2luYWwg dGhvdWdodCB3YXMgdGhvc2UgcG90ZW50aWFsCm1hcmtlcnMgY291bGQgaGF2ZSBoZWxwZWQgZGVy aXZlIFRSQkVfRVJSQVRBX01BWCBhdXRvbWF0aWNhbGx5LgoKPiAKPj4KPj4+ICsKPj4+ICsvKgo+ Pj4gKyAqIFNhZmUgbGltaXQgZm9yIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXkgYmUgb3Zl cndyaXR0ZW4KPj4+ICsgKiB3aGVuIHRoZSBlcnJhdHVtIGlzIHRyaWdnZXJlZC4KPj4KPj4gU3Bl Y2lmeSB3aGljaCBlcnJhdGEgPwo+IAo+IFRoZXJlIGFyZSB0d28gZGlzdGluY3QgQ1BVIGVycmF0 YS4gSSB3aWxsIHRyeSB0byBtYWtlIGl0IGEgYml0IG1vcmUKPiBjbGVhci4KPiAKPj4KPj4+ICsg Ki8KPj4+ICsjZGVmaW5lIFRSQkVfV09SS0FST1VORF9PVkVSV1JJVEVfRklMTF9NT0RFX1NLSVDC oMKgwqAgMjU2Cj4+Cj4+IE5lZWRzIHRvIGhhdmUgX0JZVEVTLiBUUkJFX0VSUkFUQV9PVkVSV1JJ VEVfRklMTF9NT0RFX1NLSVBfQllURVMgPwo+Pgo+Pj4gwqAgwqAgc3RhdGljIHVuc2lnbmVkIGxv bmcgdHJiZV9lcnJhdGFfY3B1Y2Fwc1tUUkJFX0VSUkFUQV9NQVhdID0gewo+Pj4gK8KgwqDCoCBb VFJCRV9XT1JLQVJPVU5EX09WRVJXUklURV9GSUxMX01PREVdID0gQVJNNjRfV09SS0FST1VORF9U UkJFX09WRVJXUklURV9GSUxMX01PREUsCj4+Cj4+IHMvVFJCRV9XT1JLQVJPVU5EX09WRVJXUklU RV9GSUxMX01PREUvVFJCRV9FUlJBVEFfT1ZFUldSSVRFX0ZJTExfTU9ERSBpbnN0ZWFkID8KPj4K Pj4gQVJNNjRfV09SS0FST1VORF9UUkJFX1hYWCAtLS0tLT4gVFJCRV9FUlJBVEFfWFhYCj4gCj4g SSB0aGluayBXT1JLQVJPVU5EIHN0aWxsIG1ha2VzIGl0IGNsZWFyLCBhbmQgaXMgaW5saW5lIHdp dGggd2hhdCB3ZSBmb2xsb3cgaW4gZ2VuZXJpYyBhcm02NCBhbmQgSSB3b3VsZCBwcmVmZXIgdG8g a2VlcCB0aGF0LgoKU3VyZS4KCj4gCj4+Cj4+PiDCoCB9Owo+Pj4gwqAgwqAgLyoKPj4+IEBAIC01 MzEsMTAgKzU0MCwxMyBAQCBzdGF0aWMgZW51bSB0cmJlX2ZhdWx0X2FjdGlvbiB0cmJlX2dldF9m YXVsdF9hY3QodTY0IHRyYnNyKQo+Pj4gwqDCoMKgwqDCoCBpZiAoKGVjID09IFRSQkVfRUNfU1RB R0UxX0FCT1JUKSB8fCAoZWMgPT0gVFJCRV9FQ19TVEFHRTJfQUJPUlQpKQo+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiBUUkJFX0ZBVUxUX0FDVF9GQVRBTDsKPj4+IMKgIC3CoMKgwqAgaWYg KGlzX3RyYmVfd3JhcCh0cmJzcikgJiYgKGVjID09IFRSQkVfRUNfT1RIRVJTKSAmJiAoYnNjID09 IFRSQkVfQlNDX0ZJTExFRCkpIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCBpZiAoZ2V0X3RyYmVfd3Jp dGVfcG9pbnRlcigpID09IGdldF90cmJlX2Jhc2VfcG9pbnRlcigpKQo+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIFRSQkVfRkFVTFRfQUNUX1dSQVA7Cj4+PiAtwqDCoMKgIH0KPj4+ ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdmVyaWZ5 IHRoZSBUUkJQVFIgPT0gVFJCQkFTRVIgdG8gZGV0ZWN0Cj4+PiArwqDCoMKgwqAgKiBhIEZJTEwg ZXZlbnQuIE1vcmVvdmVyLCBDUFUgZXJyYXRhIGNvdWxkIG1ha2UgdGhpcyBjaGVjayBpbnZhbGlk Lgo+Pj4gK8KgwqDCoMKgICovCj4+Cj4+IFdoeSBzaG91bGQgdGhlIGNoZWNrIGJlIGRyb3BwZWQg Zm9yIENQVSBpbnN0YW5jZXMgd2hpY2ggZG9udCBoYXZlIHRoZSBlcnJhdGEgPwo+IAo+IEdvb2Qg cG9pbnQuwqAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBUUkJQVFIgIT0gVFJCQkFTRVIsIHRo YXQgaW5kaWNhdGVzIGEgVFJCRSBlcnJhdHVtLiBTbywgSSBkb24ndCBzZWUgdG9vIG11Y2ggdmFs dWUgaW4gaXQuIEkgY291bGQKPiBrZWVwIHRoYXQgYmFjayBpbiBieXBhc3NlZCBieSB0aGUgZXJy YXR1bSBjaGVjay4KCklmIChUUkJQVFIgIT0gVFJCQkFTRVIpIGlzIGEgZGVmaW5pdGl2ZSBpbmRp Y2F0b3IgZm9yIHRoZSBlcnJhdHVtJ3MgcHJlc2VuY2UKdGhpcyBjb3VsZCBhbHNvIGJlIHVzZWQg Zm9yIGNhcHR1cmluZyBbYmFzZSAuLiBiYXNlICsgMjU2XSBpbiB0aGUgcGVyZiByaW5nCmJ1ZmZl ciBhcyBtZW50aW9uZWQgYmVmb3JlLgoKPiAKPj4KPj4+ICvCoMKgwqAgaWYgKGlzX3RyYmVfd3Jh cCh0cmJzcikgJiYgKGVjID09IFRSQkVfRUNfT1RIRVJTKSAmJiAoYnNjID09IFRSQkVfQlNDX0ZJ TExFRCkpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFRSQkVfRkFVTFRfQUNUX1dSQVA7Cj4+ PiArCj4+PiDCoMKgwqDCoMKgIHJldHVybiBUUkJFX0ZBVUxUX0FDVF9TUFVSSU9VUzsKPj4+IMKg IH0KPj4+IMKgIEBAIC01NDQsNiArNTU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJiZV9n ZXRfdHJhY2Vfc2l6ZShzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxlICpoYW5kbGUsCj4+PiDCoCB7 Cj4+PiDCoMKgwqDCoMKgIHU2NCB3cml0ZTsKPj4+IMKgwqDCoMKgwqAgdTY0IHN0YXJ0X29mZiwg ZW5kX29mZjsKPj4+ICvCoMKgwqAgdTY0IHNpemU7Cj4+PiDCoCDCoMKgwqDCoMKgIC8qCj4+PiDC oMKgwqDCoMKgwqAgKiBJZiB0aGUgVFJCRSBoYXMgd3JhcHBlZCBhcm91bmQgdGhlIHdyaXRlIHBv aW50ZXIgaGFzCj4+PiBAQCAtNTU5LDcgKzU3MiwxOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyB0 cmJlX2dldF90cmFjZV9zaXplKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKPj4+ IMKgIMKgwqDCoMKgwqAgaWYgKFdBUk5fT05fT05DRShlbmRfb2ZmIDwgc3RhcnRfb2ZmKSkKPj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+IC3CoMKgwqAgcmV0dXJuIChlbmRfb2Zm IC0gc3RhcnRfb2ZmKTsKPj4+ICsKPj4+ICvCoMKgwqAgc2l6ZSA9IGVuZF9vZmYgLSBzdGFydF9v ZmY7Cj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBJZiB0aGUgVFJCRSBpcyBhZmZlY3Rl ZCBieSB0aGUgZm9sbG93aW5nIGVycmF0dW0sIHdlIG11c3QgZmlsbAo+Pj4gK8KgwqDCoMKgICog dGhlIHNwYWNlIHdlIHNraXBwZWQgd2l0aCBJR05PUkUgcGFja2V0cy4gQW5kIHdlIGFyZSBhbHdh eXMKPj4+ICvCoMKgwqDCoCAqIGd1YXJhbnRlZWQgdG8gaGF2ZSBhdCBsZWFzdCBhIFBBR0VfU0la RSBzcGFjZSBpbiB0aGUgYnVmZmVyLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGlmICh0 cmJlX2hhc19lcnJhdHVtKFRSQkVfV09SS0FST1VORF9PVkVSV1JJVEVfRklMTF9NT0RFLCBidWYt PmNwdWRhdGEpICYmCj4+PiArwqDCoMKgwqDCoMKgwqAgIVdBUk5fT04oc2l6ZSA8IFRSQkVfV09S S0FST1VORF9PVkVSV1JJVEVfRklMTF9NT0RFX1NLSVApKQo+Pgo+PiBXaHkgd2FybiBoZXJlID8g VGhlIHNraWQgY2FuIHNvbWUgdGltZXMgYmUgbGVzcyB0aGFuIDI1NiBieXRlcy4gT1IgYmVjYXVz ZQo+PiBub3cgd3JpdGUgcG9pbnRlciBhbGlnbm1lbnQgaXMgUEFHRV9TSVpFIChmcm9tIGxhdGVy IGNvZGUpLCBzaXplIHRvbyBuZWVkcwo+PiB0byBiZSBhbHdheXMgYSBQQUdFX1NJWkUgbXVsdGlw bGUgPwo+IAo+IEJlY2F1c2UsIHdlIGV4cGVjdCBhdCBsZWFzdCBhIHBhZ2Ugc2l6ZSB3b3J0aCBz cGFjZSBiZWZvcmUgd2UgcnVuLgo+IChTaW5jZSBCQVNFLCBXUklURSBhbmQgTElNSVQgYXJlIHBh Z2UgYWxpZ25lZCkuIElmIHRoYXQgZ3VhcmFudGVlIGlzIGJyb2tlbiwgd2UgaGF2ZSBzZXJpb3Vz IHByb2JsZW0gd2l0aCB0aGUgc2l6ZSBjYWxjdWxhdGlvbiBsb2dpYy4KCk9rYXkuCgo+IAo+Pgo+ Pj4gK8KgwqDCoMKgwqDCoMKgIF9fdHJiZV9wYWRfYnVmKGJ1Ziwgc3RhcnRfb2ZmLCBUUkJFX1dP UktBUk9VTkRfT1ZFUldSSVRFX0ZJTExfTU9ERV9TS0lQKTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0 dXJuIHNpemU7Cj4+PiDCoCB9Cj4+PiDCoCDCoCBzdGF0aWMgdm9pZCAqYXJtX3RyYmVfYWxsb2Nf YnVmZmVyKHN0cnVjdCBjb3Jlc2lnaHRfZGV2aWNlICpjc2RldiwKPj4+IEBAIC03MDQsMjAgKzcy OCw3MyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBhcm1fdHJiZV91cGRhdGVfYnVmZmVyKHN0cnVj dCBjb3Jlc2lnaHRfZGV2aWNlICpjc2RldiwKPj4+IMKgwqDCoMKgwqAgcmV0dXJuIHNpemU7Cj4+ PiDCoCB9Cj4+PiDCoCArCj4+PiArc3RhdGljIGludCB0cmJlX2FwcGx5X3dvcmtfYXJvdW5kX2Jl Zm9yZV9lbmFibGUoc3RydWN0IHRyYmVfYnVmICpidWYpCj4+PiArewo+Pj4gK8KgwqDCoCAvKgo+ Pj4gK8KgwqDCoMKgICogVFJCRV9XT1JLQVJPVU5EX09WRVJXUklURV9GSUxMX01PREUgY2F1c2Vz IHRoZSBUUkJFIHRvIG92ZXJ3cml0ZSBhIGZldyBjYWNoZQo+Pj4gK8KgwqDCoMKgICogbGluZSBz aXplIGZyb20gdGhlICJUUkJCQVNFUl9FTDEiIGluIHRoZSBldmVudCBvZiBhICJGSUxMIi4KPj4+ ICvCoMKgwqDCoCAqIFRodXMsIHdlIGNvdWxkIGxvb3NlIHNvbWUgYW1vdW50IG9mIHRoZSB0cmFj ZSBhdCB0aGUgYmFzZS4KPj4+ICvCoMKgwqDCoCAqCj4+PiArwqDCoMKgwqAgKiBUbyB3b3JrIGFy b3VuZCB0aGlzOgo+Pj4gK8KgwqDCoMKgICogLSBTb2Z0d2FyZSBtdXN0IGxlYXZlIDI1NmJ5dGVz IG9mIHNwYWNlIGZyb20gdGhlIGJhc2UsIHNvIHRoYXQKPj4+ICvCoMKgwqDCoCAqwqDCoCB0aGUg dHJhY2UgY29sbGVjdGVkIG5vdyBpcyBub3Qgb3ZlcndyaXR0ZW4uCj4+PiArwqDCoMKgwqAgKiAt IEZpbGwgdGhlIGZpcnN0IDI1NmJ5dGVzIHdpdGggSUdOT1JFIHBhY2tldHMgZm9yIHRoZSBkZWNv ZGVyCj4+PiArwqDCoMKgwqAgKsKgwqAgdG8gaWdub3JlIGF0IHRoZSBlbmQgb2YgdGhlIHNlc3Np b24sIHNvIHRoYXQgdGhlIGRlY29kZXIgaWdub3Jlcwo+Pj4gK8KgwqDCoMKgICrCoMKgIHRoaXMg Z2FwLgo+Pj4gK8KgwqDCoMKgICoKPj4+ICvCoMKgwqDCoCAqIFRoaXMgYWxzbyBtZWFucyB0aGF0 LCB0aGUgVFJCRSBkcml2ZXIgbXVzdCBzZXQgdGhlIFRSQkJBU0VSX0VMMQo+Pj4gK8KgwqDCoMKg ICogc3VjaCB0aGF0LCB3aGVuIHRoZSBlcnJhdHVtIGlzIHRyaWdnZXJlZCwgaXQgZG9lc24ndCBv dmVyd3JpdGUKPj4+ICvCoMKgwqDCoCAqIHRoZSAiYXJlYSIgb3V0c2lkZSB0aGUgYXJlYSBtYXJr ZWQgYnkgKGhhbmRsZS0+aGVhZCwgK3NpemUpLgo+Pj4gK8KgwqDCoMKgICogU28sIHdlIG1ha2Ug c3VyZSB0aGF0IHRoZSBoYW5kbGUtPmhlYWQgaXMgYWx3YXlzIFBBR0UgYWxpZ25lZCwKPj4+ICvC oMKgwqDCoCAqIGJ5IHR3ZWFraW5nIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQgZm9yIHRoZSBUUkJF ICh0cmJlX2FsaWduKS4KPj4+ICvCoMKgwqDCoCAqIEFuZCB3aGVuIHdlIGVuYWJsZSB0aGUgVFJC RSwKPj4+ICvCoMKgwqDCoCAqCj4+PiArwqDCoMKgwqAgKsKgwqAgLSBtb3ZlIHRoZSBUUkJQVFJf RUwxIHRvIDI1NmJ5dGVzIHBhc3QgdGhlIHN0YXJ0aW5nIHBvaW50Lgo+Pj4gK8KgwqDCoMKgICrC oMKgwqDCoCBTbyB0aGF0IGFueSB0cmFjZSBjb2xsZWN0ZWQgaW4gdGhpcyBydW4gaXMgbm90IG92 ZXJ3cml0dGVuLgo+Pj4gK8KgwqDCoMKgICoKPj4+ICvCoMKgwqDCoCAqwqDCoCAtIHNldCB0aGUg VFJCQkFTRVJfRUwxIHRvIHRoZSBvcmlnaW5hbCB0cmJlX3dyaXRlLiBUaGlzIHdpbGwKPj4+ICvC oMKgwqDCoCAqwqDCoMKgwqAgZW5zdXJlIHRoYXQsIGlmIHRoZSBUUkJFIGhpdHMgdGhlIGVycmF0 dW0sIGl0IHdvdWxkIG9ubHkKPj4+ICvCoMKgwqDCoCAqwqDCoMKgwqAgd3JpdGUgd2l0aGluIHRo ZSByZWdpb24gYWxsb3dlZCBmb3IgdGhlIFRSQkUuCj4+PiArwqDCoMKgwqAgKgo+Pj4gK8KgwqDC oMKgICogQXQgdGhlIHRyYWNlIGNvbGxlY3Rpb24gdGltZSwgd2UgYWx3YXlzIHBhZCB0aGUgc2tp cHBlZCBieXRlcwo+Pj4gK8KgwqDCoMKgICogd2l0aCBJR05PUkUgcGFja2V0cyB0byBtYWtlIHN1 cmUgdGhlIGRlY29kZXIgZG9lc24ndCBzZWUgYW55Cj4+PiArwqDCoMKgwqAgKiBvdmVyd3JpdHRl biBwYWNrZXRzLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGlmICh0cmJlX2hhc19lcnJh dHVtKFRSQkVfV09SS0FST1VORF9PVkVSV1JJVEVfRklMTF9NT0RFLCBidWYtPmNwdWRhdGEpKSB7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKFdBUk5fT04oIUlTX0FMSUdORUQoYnVmLT50cmJlX3dy aXRlLCBQQUdFX1NJWkUpKSkKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlO VkFMOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJ1Zi0+dHJiZV9od19iYXNlID0gYnVmLT50cmJlX3dy aXRlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJ1Zi0+dHJiZV93cml0ZSArPSBUUkJFX1dPUktBUk9V TkRfT1ZFUldSSVRFX0ZJTExfTU9ERV9TS0lQOwo+Pgo+PiBOb3Qgc3VyZSBpZiBJIHJlYWxseSB1 bmRlcnN0b29kIHRoaXMgY29ycmVjdGx5LCBidXQgd291bGQgbm90IHRoZQo+PiBhYm92ZSBrZWVw IG9uIHJlZHVjaW5nIHRoZSB1c2FibGUgYnVmZmVyIHNwYWNlIGZvciBUUkJFIGVhY2ggdGltZQo+ PiBhcm91bmQgPyBCVFcgYnVmZmVyIGFkanVzdG1lbnQgY29tcGxleGl0eSBoZXJlIHJlcXVpcmVz IGEgcHJvcGVyCj4gCj4gWWVzLCB1bmZvcnR1bmF0ZWx5LCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSBl dmVyeSB0aW1lIHRoZSBUUkJFIGlzCj4gdHVybmVkIE9OLCB3ZSBsZWF2ZSB0aGlzIHNwYWNlLiBX ZSBhbHdheXMgcmVjYWN1bGF0ZSB0aGUgb2Zmc2V0cwo+IGFueXdheSwgYmVmb3JlIHR1cm5pbmcg aXQgT04gYW5kIHRoaXMgYWRkaXRpb25hbCBzdGVwIG1ha2VzIHN1cmUgdGhhdAo+IHRoZSBXUklU RSBwdHIgaXMgbW92ZWQgMjU2Ynl0ZXMgKGFuZCBhbHNvIHRoZSBCQVNFIGlzIG1vdmVkIHRvIHRo ZQo+ICJoZWFkIikuCj4gCj4gSSBkb24ndCB0aGluayB0aGlzIGFkanVzdG1lbnQgY2hhbmdlcyBt dWNoLiBJdCBpcyBvbmx5IHNoaWZ0aW5nIHRoZQo+IHdyaXRlIHBvaW50ZXIgd2l0aGluIHRoZSBy ZWdpb24gW2hlYWQgLi4uIGxpbWl0XS4gVGhlIGNhbGN1bGF0aW9uCj4gb2YgdGhlIGhlYWQgYW5k IHRoZSBsaW1pdCBzdGlsbCByZW1haW5zIHRoZSBzYW1lLgoKT2theSwgZ290IGl0LgoKPiAKPj4g QVNDSUkgZGlhZ3JhbSBiYXNlZCBpbGx1c3RyYXRpb24gbGlrZSBiZWZvcmUuCj4+Cj4+PiArwqDC oMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gwqAgc3Rh dGljIGludCBfX2FybV90cmJlX2VuYWJsZShzdHJ1Y3QgdHJiZV9idWYgKmJ1ZiwKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcGVyZl9vdXRwdXRfaGFuZGxl ICpoYW5kbGUpCj4+PiDCoCB7Cj4+PiArwqDCoMKgIGludCByZXQgPSAwOwo+Pj4gKwo+Pj4gwqDC oMKgwqDCoCBidWYtPnRyYmVfbGltaXQgPSBjb21wdXRlX3RyYmVfYnVmZmVyX2xpbWl0KGhhbmRs ZSk7Cj4+PiDCoMKgwqDCoMKgIGJ1Zi0+dHJiZV93cml0ZSA9IGJ1Zi0+dHJiZV9iYXNlICsgUEVS Rl9JRFgyT0ZGKGhhbmRsZS0+aGVhZCwgYnVmKTsKPj4+IMKgwqDCoMKgwqAgaWYgKGJ1Zi0+dHJi ZV9saW1pdCA9PSBidWYtPnRyYmVfYmFzZSkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIHRyYmVfc3Rv cF9hbmRfdHJ1bmNhdGVfZXZlbnQoaGFuZGxlKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVOT1NQQzsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRU5PU1BDOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGdvdG8gZXJyOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgIC8qIFNldCB0 aGUgYmFzZSBvZiB0aGUgVFJCRSB0byB0aGUgYnVmZmVyIGJhc2UgKi8KPj4+IMKgwqDCoMKgwqAg YnVmLT50cmJlX2h3X2Jhc2UgPSBidWYtPnRyYmVfYmFzZTsKPj4+ICsKPj4+ICvCoMKgwqAgcmV0 ID0gdHJiZV9hcHBseV93b3JrX2Fyb3VuZF9iZWZvcmVfZW5hYmxlKGJ1Zik7Cj4+PiArwqDCoMKg IGlmIChyZXQpCj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnI7Cj4+PiArCj4+PiDCoMKgwqDC oMKgICp0aGlzX2NwdV9wdHIoYnVmLT5jcHVkYXRhLT5kcnZkYXRhLT5oYW5kbGUpID0gaGFuZGxl Owo+Pj4gwqDCoMKgwqDCoCB0cmJlX2VuYWJsZV9odyhidWYpOwo+Pj4gwqDCoMKgwqDCoCByZXR1 cm4gMDsKPj4+ICtlcnI6Cj4+PiArwqDCoMKgIHRyYmVfc3RvcF9hbmRfdHJ1bmNhdGVfZXZlbnQo aGFuZGxlKTsKPj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+IMKgIH0KPj4+IMKgIMKgIHN0YXRp YyBpbnQgYXJtX3RyYmVfZW5hYmxlKHN0cnVjdCBjb3Jlc2lnaHRfZGV2aWNlICpjc2RldiwgdTMy IG1vZGUsIHZvaWQgKmRhdGEpCj4+PiBAQCAtMTAwMyw3ICsxMDgwLDIzIEBAIHN0YXRpYyB2b2lk IGFybV90cmJlX3Byb2JlX2NwdSh2b2lkICppbmZvKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHBy X2VycigiVW5zdXBwb3J0ZWQgYWxpZ25tZW50IG9uIGNwdSAlZFxuIiwgY3B1KTsKPj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBnb3RvIGNwdV9jbGVhcjsKPj4+IMKgwqDCoMKgwqAgfQo+Pj4gLcKgwqDC oCBjcHVkYXRhLT50cmJlX2FsaWduID0gY3B1ZGF0YS0+dHJiZV9od19hbGlnbjsKPj4+ICsKPj4+ ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIElmIHRoZSBUUkJFIGlzIGFmZmVjdGVkIGJ5IGVy cmF0dW0gVFJCRV9XT1JLQVJPVU5EX09WRVJXUklURV9GSUxMX01PREUsCj4+Cj4+IEJldHRlciB0 byBhZGRyZXNzIGl0IHdpdGggdGhlIG9yaWdpbmFsIGVycmF0YSBuYW1lIGkuZQo+PiBBUk02NF9X T1JLQVJPVU5EX1RSQkVfT1ZFUldSSVRFX0ZJTExfTU9ERSBpbnN0ZWFkLiBCdXQgbm90IGEgYmln IGlzc3VlCj4+IHRob3VnaC4KPiAKPiBXZSBkZWFsIHdpdGggdGhlIFRSQkVfeHggbmFtZSBldmVy eXdoZXJlLCBmb3IgZXZlbiBjaGVja2luZyB0aGUgZXJyYXR1bSwKPiBzbyB1c2luZyB0aGUgb3Ro ZXIgb25lIGlzIGdvaW5nIHRvIGNvbmZ1c2UgdGhlIGNvZGUgcmVhZGluZy4KCk9rYXkuCgo+IAo+ Pgo+Pj4gK8KgwqDCoMKgICogd2UgbXVzdCBhbHdheXMgcHJvZ3JhbSB0aGUgVEJSUFRSX0VMMSwg MjU2Ynl0ZXMgZnJvbSBhIHBhZ2UKPj4+ICvCoMKgwqDCoCAqIGJvdW5kYXJ5LCB3aXRoIFRSQkJB U0VSX0VMMSBzZXQgdG8gdGhlIHBhZ2UsIHRvIHByZXZlbnQKPj4+ICvCoMKgwqDCoCAqIFRSQkUg b3Zlci13cml0aW5nIDI1NmJ5dGVzIGF0IFRSQkJBU0VSX0VMMSBvbiBGSUxMIGV2ZW50Lgo+Pj4g K8KgwqDCoMKgICoKPj4+ICvCoMKgwqDCoCAqIFRodXMgbWFrZSBzdXJlIHdlIGFsd2F5cyBhbGln biBvdXIgd3JpdGUgcG9pbnRlciB0byBhIFBBR0VfU0laRSwKPj4+ICvCoMKgwqDCoCAqIHdoaWNo IGFsc28gZ3VhcmFudGVlcyB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgYSBQQUdFX1NJWkUgc3BhY2Ug aW4KPj4+ICvCoMKgwqDCoCAqIHRoZSBidWZmZXIgKFRSQkxJTUlUUiBpcyBQQUdFIGFsaWduZWQp IGFuZCB0aHVzIHdlIGNhbiBza2lwCj4+PiArwqDCoMKgwqAgKiB0aGUgcmVxdWlyZWQgYnl0ZXMg YXQgdGhlIGJhc2UuCj4+PiArwqDCoMKgwqAgKi8KPj4KPj4gU2hvdWxkIG5vdCBUUkJQVFJfRUwx IGJlIGFsaWduZWQgdG8gMjU2IGJ5dGVzIGluc3RlYWQsIGFzIFRSQkJBU0VSX0VMMSBpcwo+PiBh bHdheXMgYXQgUEFHRV9TSVpFIGJvdW5kYXJ5LiBIZW5jZSBUUkJQVFJfRUwxIGNvdWxkIG5ldmVy IGJlIGluIGJldHdlZW4KPj4gYmFzZSBhbmQgW2Jhc2UgKyAyNTYgYnl0ZXNdLiBXaHkgYWxpZ25t ZW50IG5lZWRzIHRvIGdvIGFsbCB0aGUgd2F5IHVwdG8KPj4gUEFHRV9TSVpFIGluc3RlYWQgPyBP UiBhbSBJIG1pc3Npbmcgc29tZXRoaW5nIGhlcmUgPwo+IAo+IFBsZWFzZSBzZWUgdGhlIGRpYWdy YW0gYWJvdmUuIFdoZW4gdGhlIFRSQkUgd3JhcHMsIGl0IGp1bXBzIHRvIHRoZQo+IFRSQkJBU0VS LCBhbmQgaWYgdGhhdCBpcyBvdXRzaWRlIHRoZSByZWdpb24gcGVybWl0dGVkIGZvciBUUkJFLCBp LmUgW2hlYWQuLi4gaGVhZCArIHNpemVdLCB3ZSByaXNrIGNvcnJ1cHRpbmcgZGF0YSBwb3RlbnRp YWxseSBjb25zdW1lZCBieQo+IHRoZSB1c2Vyc3BhY2UuIFNvLCB3ZSBtdXN0IG1ha2Ugc3VyZSB0 aGF0IHRoZSBUUkJCQVNFUiBpcyB3aXRoaW4gdGhlCj4gW2hlYWQuLi5oZWFkK3NpemVdLCB3aGlj aCBpcyB3aHkgd2UgdXBkYXRlIHRoZSBod19iYXNlIGFjY29yZGluZ2x5Cj4gd2hlbiB3ZSBkZXRl Y3QgdGhlIGVycmF0dW0uCgpPa2F5LCBnb3QgaXQuCgo+IAo+Pgo+Pj4gK8KgwqDCoCBpZiAodHJi ZV9oYXNfZXJyYXR1bShUUkJFX1dPUktBUk9VTkRfT1ZFUldSSVRFX0ZJTExfTU9ERSwgY3B1ZGF0 YSkpCj4+PiArwqDCoMKgwqDCoMKgwqAgY3B1ZGF0YS0+dHJiZV9hbGlnbiA9IFBBR0VfU0laRTsK Pj4+ICvCoMKgwqAgZWxzZQo+Pj4gK8KgwqDCoMKgwqDCoMKgIGNwdWRhdGEtPnRyYmVfYWxpZ24g PSBjcHVkYXRhLT50cmJlX2h3X2FsaWduOwo+Pj4gKwo+Pj4gwqDCoMKgwqDCoCBjcHVkYXRhLT50 cmJlX2ZsYWcgPSBnZXRfdHJiZV9mbGFnX3VwZGF0ZSh0cmJpZHIpOwo+Pj4gwqDCoMKgwqDCoCBj cHVkYXRhLT5jcHUgPSBjcHU7Cj4+PiDCoMKgwqDCoMKgIGNwdWRhdGEtPmRydmRhdGEgPSBkcnZk YXRhOwo+Pj4KPj4KPj4gSSB3aWxsIHZpc2l0IHRoaXMgcGF0Y2ggYWdhaW4uIE5vdCBzdXJlIGlm IEkgcmVhbGx5IHVuZGVyc3RhbmQgYWxsIHRoaXMKPj4gY2hhbmdlcyBjb3JyZWN0bHkgZW5vdWdo Lgo+IAo+IFBsZWFzZSBsZXQgbWUga25vdyBpZiB5b3UgaGF2ZSBmdXJ0aGVyIHF1ZXN0aW9ucy4K ClN1cmUsIHdpbGwgZG8uCgo+IAo+IFRoYW5rcyBmb3IgdGFraW5nIGEgbG9vawo+IAo+IFN1enVr aQo+Pgo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K bGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGlu dXgtYXJtLWtlcm5lbAo=