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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 4D1A9C4740A for ; Mon, 9 Sep 2019 13:00:31 +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 15008218AF for ; Mon, 9 Sep 2019 13:00:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="WYVB+WOH"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ti.com header.i=@ti.com header.b="KA0R82BJ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 15008218AF Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=ti.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Reply-To:Content-ID:Content-Description :Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dZMlm/l7t8jqE2+EeiMHr8fYKqccyyzXO8IKYmd9G0c=; b=WYVB+WOHzRhIuy d1jtz5SJf7pJ0LarrCvFW4U/NzvKoPQrspt7TNq6zjesJwK7g2q5ytSduOlVUnourvWagos9WR6K7 litG9J8gflhpEhtPm8fkxBvomiStk7dvtxYwLDIs5jspum1TiHIJ02RWknUTNm2y8lubXLFwtJ7dr kQJE93yDeiqPEZ5thBeh1yRyG7/D8UQr/5FDKj85z2AMM84C2nw1K11nO3waU/fJBMGt02b1lRPxo o/A4JvNV8aDasvRp1/3+vlbH7IEGqMvOixeeJKNJtFLAQS7AcSxIsQXP7urjn8+q842VC4nsvMRuQ J1vr3Gh4vaGl+SfDPqSA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i7JHM-0007vQ-Pc; Mon, 09 Sep 2019 13:00:24 +0000 Received: from fllv0015.ext.ti.com ([198.47.19.141]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1i7JHG-0007uz-MZ for linux-arm-kernel@lists.infradead.org; Mon, 09 Sep 2019 13:00:22 +0000 Received: from fllv0034.itg.ti.com ([10.64.40.246]) by fllv0015.ext.ti.com (8.15.2/8.15.2) with ESMTP id x89D0Bms112937; Mon, 9 Sep 2019 08:00:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1568034011; bh=4lqQX7rdUF84bviuVr+za8Q2BVAw9BrK95GZEzi1OeQ=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=KA0R82BJyOczNU/iS6vDH/+MwhvnCCJBj3CgfnqLlOryIqthYto98hRhWvU+zGv2D Zg964QxLsMCaTKxAeKDxvVBeU/guRFevsIOq9XMUcxZEkJFytlT2C2Z6BVrG2PQ+Jq AGvrZVyGJf+wZC+xsmXPdMTz16DeYuNB9t46Vb2k= Received: from DFLE103.ent.ti.com (dfle103.ent.ti.com [10.64.6.24]) by fllv0034.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x89D0Bm0080529 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Mon, 9 Sep 2019 08:00:11 -0500 Received: from DFLE104.ent.ti.com (10.64.6.25) by DFLE103.ent.ti.com (10.64.6.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Mon, 9 Sep 2019 08:00:10 -0500 Received: from lelv0327.itg.ti.com (10.180.67.183) by DFLE104.ent.ti.com (10.64.6.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Mon, 9 Sep 2019 08:00:10 -0500 Received: from [192.168.2.6] (ileax41-snat.itg.ti.com [10.172.224.153]) by lelv0327.itg.ti.com (8.15.2/8.15.2) with ESMTP id x89D07aa051765; Mon, 9 Sep 2019 08:00:07 -0500 Subject: Re: [PATCH v2 02/14] soc: ti: k3: add navss ringacc driver To: Tero Kristo , , , , References: <20190730093450.12664-1-peter.ujfalusi@ti.com> <20190730093450.12664-3-peter.ujfalusi@ti.com> <13e5c02f-7060-3a30-56cb-a9caca9fc85b@ti.com> From: Peter Ujfalusi Message-ID: Date: Mon, 9 Sep 2019 16:00:38 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 MIME-Version: 1.0 In-Reply-To: <13e5c02f-7060-3a30-56cb-a9caca9fc85b@ti.com> Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190909_060018_851914_7EA1AA25 X-CRM114-Status: GOOD ( 32.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, grygorii.strashko@ti.com, lokeshvutla@ti.com, j-keerthy@ti.com, linux-kernel@vger.kernel.org, tony@atomide.com, dmaengine@vger.kernel.org, dan.j.williams@intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGksCgpHcnlnb3JpaSwgY2FuIHlvdSB0YWtlIGEgbG9vaz8KCk9uIDA5LzA5LzIwMTkgOS4wOSwg VGVybyBLcmlzdG8gd3JvdGU6Cj4gSGksCj4gCj4gTW9zdGx5IHNvbWUgY29zbWV0aWMgY29tbWVu dHMgYmVsb3csIG90aGVyIHRoYW4gdGhhdCBzZWVtcyBmaW5lIHRvIG1lLgo+IAo+IE9uIDMwLzA3 LzIwMTkgMTI6MzQsIFBldGVyIFVqZmFsdXNpIHdyb3RlOgo+PiBGcm9tOiBHcnlnb3JpaSBTdHJh c2hrbyA8Z3J5Z29yaWkuc3RyYXNoa29AdGkuY29tPgo+Pgo+PiBUaGUgUmluZyBBY2NlbGVyYXRv ciAoUklOR0FDQyBvciBSQSkgcHJvdmlkZXMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIHRvCj4+IGVu YWJsZSBzdHJhaWdodGZvcndhcmQgcGFzc2luZyBvZiB3b3JrIGJldHdlZW4gYSBwcm9kdWNlciBh bmQgYSBjb25zdW1lci4KPj4gVGhlcmUgaXMgb25lIFJJTkdBQ0MgbW9kdWxlIHBlciBOQVZTUyBv biBUSSBBTTY1eCBTb0NzLgo+Pgo+PiBUaGUgUklOR0FDQyBjb252ZXJ0cyBjb25zdGFudC1hZGRy ZXNzIHJlYWQgYW5kIHdyaXRlIGFjY2Vzc2VzIHRvCj4+IGVxdWl2YWxlbnQKPj4gcmVhZCBvciB3 cml0ZSBhY2Nlc3NlcyB0byBhIGNpcmN1bGFyIGRhdGEgc3RydWN0dXJlIGluIG1lbW9yeS4gVGhl Cj4+IFJJTkdBQ0MKPj4gZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgZWFjaCBETUEgY29udHJvbGxl ciB3aGljaCBuZWVkcyB0byBhY2Nlc3MgcmluZwo+PiBlbGVtZW50cyBmcm9tIGhhdmluZyB0byBr bm93IHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSByaW5nIChiYXNlIGFkZHJlc3MsCj4+IGN1cnJl bnQgb2Zmc2V0KS4gVGhlIERNQSBjb250cm9sbGVyIHBlcmZvcm1zIGEgcmVhZCBvciB3cml0ZSBh Y2Nlc3MgdG8gYQo+PiBzcGVjaWZpYyBhZGRyZXNzIHJhbmdlICh3aGljaCBtYXBzIHRvIHRoZSBz b3VyY2UgaW50ZXJmYWNlIG9uIHRoZQo+PiBSSU5HQUNDKQo+PiBhbmQgdGhlIFJJTkdBQ0MgcmVw bGFjZXMgdGhlIGFkZHJlc3MgZm9yIHRoZSB0cmFuc2FjdGlvbiB3aXRoIGEgbmV3Cj4+IGFkZHJl c3MKPj4gd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGhlYWQgb3IgdGFpbCBlbGVtZW50IG9mIHRo ZSByaW5nIChoZWFkIGZvcgo+PiByZWFkcywKPj4gdGFpbCBmb3Igd3JpdGVzKS4gU2luY2UgdGhl IFJJTkdBQ0MgbWFpbnRhaW5zIHRoZSBzdGF0ZSwgbXVsdGlwbGUgRE1BCj4+IGNvbnRyb2xsZXJz IG9yIGNoYW5uZWxzIGFyZSBhbGxvd2VkIHRvIGNvaGVyZW50bHkgc2hhcmUgdGhlIHNhbWUgcmlu Z3MgYXMKPj4gYXBwbGljYWJsZS4gVGhlIFJJTkdBQ0MgaXMgYWJsZSB0byBwbGFjZSBkYXRhIHdo aWNoIGlzIGRlc3RpbmVkIHRvd2FyZHMKPj4gc29mdHdhcmUgaW50byBjYWNoZWQgbWVtb3J5IGRp cmVjdGx5Lgo+Pgo+PiBTdXBwb3J0ZWQgcmluZyBtb2RlczoKPj4gLSBSaW5nIE1vZGUKPj4gLSBN ZXNzYWdpbmcgTW9kZQo+PiAtIENyZWRlbnRpYWxzIE1vZGUKPj4gLSBRdWV1ZSBNYW5hZ2VyIE1v ZGUKPj4KPj4gVEktU0NJIGludGVncmF0aW9uOgo+Pgo+PiBUZXhhcyBJbnN0cnVtZW50J3MgU3lz dGVtIENvbnRyb2wgSW50ZXJmYWNlIChUSS1TQ0kpIE1lc3NhZ2UgUHJvdG9jb2wgbm93Cj4+IGhh cyBjb250cm9sIG92ZXIgUmluZ2FjYyBtb2R1bGUgcmVzb3VyY2VzIG1hbmFnZW1lbnQgKFJNKSBh bmQgUmluZ3MKPj4gY29uZmlndXJhdGlvbi4KPj4KPj4gVGhlIGNvcnJlc3BvbmRpbmcgc3VwcG9y dCBvZiBUSS1TQ0kgUmluZ2FjYyBtb2R1bGUgUk0gcHJvdG9jb2wKPj4gaW50cm9kdWNlZCBhcyBv cHRpb24gdGhyb3VnaCBEVCBwYXJhbWV0ZXJzOgo+PiAtIHRpLHNjaTogcGhhbmRsZSBvbiBUSS1T Q0kgZmlybXdhcmUgY29udHJvbGxlciBEVCBub2RlCj4+IC0gdGksc2NpLWRldi1pZDogVEktU0NJ IGRldmljZSBpZGVudGlmaWVyIGFzIHBlciBUSS1TQ0kgZmlybXdhcmUgc3BlYwo+Pgo+PiBpZiBi b3RoIHBhcmFtZXRlcnMgcHJlc2VudCAtIFJpbmdhY2MgZHJpdmVyIHdpbGwgY29uZmlndXJlL2Zy ZWUvcmVzZXQKPj4gUmluZ3MKPj4gdXNpbmcgVEktU0NJIE1lc3NhZ2UgUmluZ2FjYyBSTSBQcm90 b2NvbC4KPj4KPj4gVGhlIFJpbmdhY2MgZHJpdmVyIG1hbmFnZXMgUmluZ3MgYWxsb2NhdGlvbiBi eSBpdHNlbGYgbm93IGFuZCByZXF1ZXN0cwo+PiBUSS1TQ0kgZmlybXdhcmUgdG8gYWxsb2NhdGUg YW5kIGNvbmZpZ3VyZSBzcGVjaWZpYyBSaW5ncyBvbmx5LiBJdCdzIGRvbmUKPj4gdGhpcyB3YXkg YmVjYXVzZSwgTGludXggZHJpdmVyIGltcGxlbWVudHMgdHdvIHN0YWdlIFJpbmdzIGFsbG9jYXRp b24gYW5kCj4+IGNvbmZpZ3VyYXRpb24gKGFsbG9jYXRlIHJpbmcgYW5kIGNvbmZpZ3VyZSByaW5n KSB3aGlsZSBJLVNDSSBNZXNzYWdlCj4gCj4gSS1TQ0kgc2hvdWxkIGJlIFRJLVNDSSBJIGJlbGll dmUuCgpZZXMsIGl0IHN1cHBvc2VkIHRvIGJlLgoKPiAKPj4gUHJvdG9jb2wgc3VwcG9ydHMgb25s eSBvbmUgY29tYmluZWQgb3BlcmF0aW9uIChhbGxvY2F0ZStjb25maWd1cmUpLgo+Pgo+PiBHcnln b3JpaSBTdHJhc2hrbyA8Z3J5Z29yaWkuc3RyYXNoa29AdGkuY29tPgo+IAo+IEFib3ZlIHNlZW1z IHRvIGJlIG1pc3NpbmcgU29CPwoKT2gsIGl0IGlzIHJlYWxseSBtaXNzaW5nLgoKPiAKPj4gU2ln bmVkLW9mZi1ieTogUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KPj4gLS0t Cj4+IMKgIGRyaXZlcnMvc29jL3RpL0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKg IDE3ICsKPj4gwqAgZHJpdmVycy9zb2MvdGkvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoCB8 wqDCoMKgIDEgKwo+PiDCoCBkcml2ZXJzL3NvYy90aS9rMy1yaW5nYWNjLmPCoMKgwqDCoMKgwqAg fCAxMTkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgIGluY2x1ZGUvbGludXgv c29jL3RpL2szLXJpbmdhY2MuaCB8wqAgMjYyICsrKysrKysKPj4gwqAgNCBmaWxlcyBjaGFuZ2Vk LCAxNDcxIGluc2VydGlvbnMoKykKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvc29j L3RpL2szLXJpbmdhY2MuYwo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9z b2MvdGkvazMtcmluZ2FjYy5oCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9LY29u ZmlnIGIvZHJpdmVycy9zb2MvdGkvS2NvbmZpZwo+PiBpbmRleCBjZjU0NWY0MjhkMDMuLjEwYzc2 ZmFhNTAzZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9zb2MvdGkvS2NvbmZpZwo+PiArKysgYi9k cml2ZXJzL3NvYy90aS9LY29uZmlnCj4+IEBAIC04MCw2ICs4MCwyMyBAQCBjb25maWcgVElfU0NJ X1BNX0RPTUFJTlMKPj4gwqDCoMKgwqDCoMKgwqAgY2FsbGVkIHRpX3NjaV9wbV9kb21haW5zLiBO b3RlIHRoaXMgaXMgbmVlZGVkIGVhcmx5IGluIGJvb3QKPj4gYmVmb3JlCj4+IMKgwqDCoMKgwqDC oMKgIHJvb3RmcyBtYXkgYmUgYXZhaWxhYmxlLgo+PiDCoCArY29uZmlnIFRJX0szX1JJTkdBQ0MK Pj4gK8KgwqDCoCB0cmlzdGF0ZSAiSzMgUmluZyBhY2NlbGVyYXRvciBTdWIgU3lzdGVtIgo+PiAr wqDCoMKgIGRlcGVuZHMgb24gQVJDSF9LMyB8fCBDT01QSUxFX1RFU1QKPj4gK8KgwqDCoCBkZXBl bmRzIG9uIFRJX1NDSV9JTlRBX0lSUUNISVAKPj4gK8KgwqDCoCBkZWZhdWx0IHkKPj4gK8KgwqDC oCBoZWxwCj4+ICvCoMKgwqDCoMKgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgSzMgUmluZyBh Y2NlbGVyYXRvciBtb2R1bGUuCj4+ICvCoMKgwqDCoMKgIFRoZSBSaW5nIEFjY2VsZXJhdG9yIChS SU5HQUNDIG9yIFJBKcKgIHByb3ZpZGVzIGhhcmR3YXJlCj4+IGFjY2VsZXJhdGlvbgo+PiArwqDC oMKgwqDCoCB0byBlbmFibGUgc3RyYWlnaHRmb3J3YXJkIHBhc3Npbmcgb2Ygd29yayBiZXR3ZWVu IGEgcHJvZHVjZXIKPj4gK8KgwqDCoMKgwqAgYW5kIGEgY29uc3VtZXIuIFRoZXJlIGlzIG9uZSBS SU5HQUNDIG1vZHVsZSBwZXIgTkFWU1Mgb24gVEkKPj4gQU02NXggU29Dcwo+PiArwqDCoMKgwqDC oCBJZiB1bnN1cmUsIHNheSBOLgo+PiArCj4+ICtjb25maWcgVElfSzNfUklOR0FDQ19ERUJVRwo+ PiArwqDCoMKgIHRyaXN0YXRlICJLMyBSaW5nIGFjY2VsZXJhdG9yIFN1YiBTeXN0ZW0gdGVzdHMg YW5kIGRlYnVnIgo+PiArwqDCoMKgIGRlcGVuZHMgb24gVElfSzNfUklOR0FDQwo+PiArwqDCoMKg IGRlZmF1bHQgbgo+PiArCj4+IMKgIGVuZGlmICMgU09DX1RJCj4+IMKgIMKgIGNvbmZpZyBUSV9T Q0lfSU5UQV9NU0lfRE9NQUlOCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NvYy90aS9NYWtlZmls ZSBiL2RyaXZlcnMvc29jL3RpL01ha2VmaWxlCj4+IGluZGV4IGIzODY4ZDM5MmQ0Zi4uY2M0YmM4 YjA4YmY1IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3NvYy90aS9NYWtlZmlsZQo+PiArKysgYi9k cml2ZXJzL3NvYy90aS9NYWtlZmlsZQo+PiBAQCAtOSwzICs5LDQgQEAgb2JqLSQoQ09ORklHX0FN WDNfUE0pwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBwbTMzeHgubwo+PiDCoCBvYmotJChDT05G SUdfV0tVUF9NM19JUEMpwqDCoMKgwqDCoMKgwqAgKz0gd2t1cF9tM19pcGMubwo+PiDCoCBvYmot JChDT05GSUdfVElfU0NJX1BNX0RPTUFJTlMpwqDCoMKgwqDCoMKgwqAgKz0gdGlfc2NpX3BtX2Rv bWFpbnMubwo+PiDCoCBvYmotJChDT05GSUdfVElfU0NJX0lOVEFfTVNJX0RPTUFJTinCoMKgwqAg Kz0gdGlfc2NpX2ludGFfbXNpLm8KPj4gK29iai0kKENPTkZJR19USV9LM19SSU5HQUNDKcKgwqDC oMKgwqDCoMKgICs9IGszLXJpbmdhY2Mubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvdGkv azMtcmluZ2FjYy5jIGIvZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDAxZGZjOTYzMzE5Cj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9zb2MvdGkvazMtcmluZ2FjYy5jCj4+IEBAIC0wLDAgKzEs MTE5MSBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8qCj4+ ICsgKiBUSSBLMyBOQVZTUyBSaW5nIEFjY2VsZXJhdG9yIHN1YnN5c3RlbSBkcml2ZXIKPj4gKyAq Cj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVk IC0gaHR0cDovL3d3dy50aS5jb20KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvZG1h LW1hcHBpbmcuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv cGxhdGZvcm1fZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3NvYy90aS9rMy1yaW5nYWNjLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv c29jL3RpL3RpX3NjaV9wcm90b2NvbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NvYy90aS90aV9z Y2lfaW50YV9tc2kuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KPj4gKyNpbmNsdWRl IDxsaW51eC9pcnFkb21haW4uaD4KPj4gKwo+PiArc3RhdGljIExJU1RfSEVBRChrM19yaW5nYWNj X2xpc3QpOwo+PiArc3RhdGljIERFRklORV9NVVRFWChrM19yaW5nYWNjX2xpc3RfbG9jayk7Cj4+ ICsKPj4gKyNpZmRlZiBDT05GSUdfVElfSzNfUklOR0FDQ19ERUJVRwo+PiArI2RlZmluZcKgwqDC oCBrM19uYXZfZGJnKGRldiwgYXJnLi4uKSBkZXZfZXJyKGRldiwgYXJnKQo+IAo+IGRldl9lcnIg c2VlbXMgZXhhZ2dlcmF0aW9uIGZvciBkZWJ1ZyBwdXJwb3NlcywgbWF5YmUganVzdCBkZXZfaW5m by4KPiAKPj4gK3N0YXRpY8KgwqDCoCB2b2lkIGRiZ193cml0ZWwodTMyIHYsIHZvaWQgX19pb21l bSAqcmVnKQo+PiArewo+PiArwqDCoMKgIHByX2VycigiV1JJVEVMKDMyKTogdiglMDhYKS0tPnJl ZyglcClcbiIsIHYsIHJlZyk7Cj4gCj4gQWdhaW4sIG1heWJlIGp1c3QgcHJfaW5mby4KCkkgdGhp bmsgSSdsbCBqdXN0IGRyb3AgQ09ORklHX1RJX0szX1JJTkdBQ0NfREVCVUcgYWx0b2dldGhlciBh bG9uZyB3aXRoCmRiZ193cml0ZWwvZGJnX3JlYWRsL2szX25hdl9kYmcgYW5kIHVzZSBkZXZfZGJn KCkgd2hlbiBhcHByb3ByaWF0ZS4KCj4gCj4+ICvCoMKgwqAgd3JpdGVsKHYsIHJlZyk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpY8KgwqDCoCB1MzIgZGJnX3JlYWRsKHZvaWQgX19pb21lbSAqcmVnKQo+ PiArewo+PiArwqDCoMKgIHUzMiB2Owo+PiArCj4+ICvCoMKgwqAgdiA9IHJlYWRsKHJlZyk7Cj4+ ICvCoMKgwqAgcHJfZXJyKCJSRUFETCgzMik6IHYoJTA4WCk8LS1yZWcoJXApXG4iLCB2LCByZWcp Owo+PiArwqDCoMKgIHJldHVybiB2Owo+PiArfQo+PiArI2Vsc2UKPj4gKyNkZWZpbmXCoMKgwqAg azNfbmF2X2RiZyhkZXYsIGFyZy4uLikgZGV2X2RiZyhkZXYsIGFyZykKPj4gKyNkZWZpbmUgZGJn X3dyaXRlbCh2LCByZWcpIHdyaXRlbCh2LCByZWcpCj4gCj4gRG8geW91IG5lZWQgdG8gdXNlIGhh cmQgd3JpdGVsLCB3cml0ZWxfcmVsYXhlZCBpcyBub3QgZW5vdWdoPwoKbm90IHN1cmUgaWYgd2Ug cmVhbGx5IG5lZWQgdGhlIGJhcnJpZXJzLCBidXQgX19yYXdfd3JpdGVsKCkgc2hvdWxkIGJlCmZp bmUgaGVyZSBpbWhvCgo+PiArCj4+ICsjZGVmaW5lIGRiZ19yZWFkbChyZWcpIHJlYWRsKHJlZykK PiAKPiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgcmVhZD8KCl9fcmF3X3JlYWRsKCkgY291bGQgYmUg ZmluZSBpbiBhbHNvLgoKLi4uCgo+PiArLyoqCj4+ICsgKiBzdHJ1Y3QgazNfcmluZ2FjYyAtIFJp bmdzIGFjY2VsZXJhdG9yIGRlc2NyaXB0b3IKPj4gKyAqCj4+ICsgKiBAZGV2IC0gcG9pbnRlciBv biBSQSBkZXZpY2UKPj4gKyAqIEBwcm94eV9nY2ZnIC0gUkEgcHJveHkgZ2xvYmFsIGNvbmZpZyBy ZWdpc3RlcnMKPj4gKyAqIEBwcm94eV90YXJnZXRfYmFzZSAtIFJBIHByb3h5IGRhdGFwYXRoIHJl Z2lvbgo+PiArICogQG51bV9yaW5ncyAtIG51bWJlciBvZiByaW5nIGluIFJBCj4+ICsgKiBAcm1f Z3BfcmFuZ2UgLSBnZW5lcmFsIHB1cnBvc2UgcmluZ3MgcmFuZ2UgZnJvbSB0aXNjaQo+PiArICog QGRtYV9yaW5nX3Jlc2V0X3F1aXJrIC0gRE1BIHJlc2V0IHcvYSBlbmFibGUKPj4gKyAqIEBudW1f cHJveGllcyAtIG51bWJlciBvZiBSQSBwcm94aWVzCj4+ICsgKiBAcmluZ3MgLSBhcnJheSBvZiBy aW5ncyBkZXNjcmlwdG9ycyAoc3RydWN0IEBrM19yaW5nKQo+PiArICogQGxpc3QgLSBsaXN0IG9m IFJBcyBpbiB0aGUgc3lzdGVtCj4+ICsgKiBAdGlzY2kgLSBwb2ludGVyIHRpLXNjaSBoYW5kbGUK Pj4gKyAqIEB0aXNjaV9yaW5nX29wcyAtIHRpLXNjaSByaW5ncyBvcHMKPj4gKyAqIEB0aXNjaV9k ZXZfaWQgLSB0aS1zY2kgZGV2aWNlIGlkCj4+ICsgKi8KPj4gK3N0cnVjdCBrM19yaW5nYWNjIHsK Pj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICvCoMKgwqAgc3RydWN0IGszX3Jpbmdh Y2NfcHJveHlfZ2NmZ19yZWdzIF9faW9tZW0gKnByb3h5X2djZmc7Cj4+ICvCoMKgwqAgdm9pZCBf X2lvbWVtICpwcm94eV90YXJnZXRfYmFzZTsKPj4gK8KgwqDCoCB1MzIgbnVtX3JpbmdzOyAvKiBu dW1iZXIgb2YgcmluZ3MgaW4gUmluZ2FjYyBtb2R1bGUgKi8KPj4gK8KgwqDCoCB1bnNpZ25lZCBs b25nICpyaW5nc19pbnVzZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgdGlfc2NpX3Jlc291cmNlICpybV9n cF9yYW5nZTsKPj4gKwo+PiArwqDCoMKgIGJvb2wgZG1hX3JpbmdfcmVzZXRfcXVpcms7Cj4+ICvC oMKgwqAgdTMyIG51bV9wcm94aWVzOwo+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgKnByb3h5X2lu dXNlOwo+IAo+IHByb3h5X2ludXNlIGlzIG5vdCBkb2N1bWVudGVkIGFib3ZlLgoKSSBzZWUsIEkn bGwgdXBkYXRlIHRoZSBkb2N1bWVudGF0aW9uLgoKPj4gKwo+PiArwqDCoMKgIHN0cnVjdCBrM19y aW5nICpyaW5nczsKPj4gK8KgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4+ICvCoMKgwqAg c3RydWN0IG11dGV4IHJlcV9sb2NrOyAvKiBwcm90ZWN0IHJpbmdzIGFsbG9jYXRpb24gKi8KPj4g Kwo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCB0aV9zY2lfaGFuZGxlICp0aXNjaTsKPj4gK8KgwqDC oCBjb25zdCBzdHJ1Y3QgdGlfc2NpX3JtX3JpbmdhY2Nfb3BzICp0aXNjaV9yaW5nX29wczsKPj4g K8KgwqDCoCB1MzLCoCB0aXNjaV9kZXZfaWQ7Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgbG9uZyBr M19yaW5nYWNjX3JpbmdfZ2V0X2ZpZm9fcG9zKHN0cnVjdCBrM19yaW5nICpyaW5nKQo+PiArewo+ PiArwqDCoMKgIHJldHVybiBLM19SSU5HQUNDX0ZJRk9fV0lORE9XX1NJWkVfQllURVMgLQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqAgKDQgPDwgcmluZy0+ZWxtX3NpemUpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCAqazNfcmluZ2FjY19nZXRfZWxtX2FkZHIoc3RydWN0IGszX3JpbmcgKnJp bmcsIHUzMiBpZHgpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIChpZHggKiAoNCA8PCByaW5nLT5l bG1fc2l6ZSkgKyByaW5nLT5yaW5nX21lbV92aXJ0KTsKPiAKPiBUaGUgYXJpdGhtZXRpYyBoZXJl IHNlZW1zIGJhY2t3YXJkcyBjb21wYXJlZCB0byBtb3N0IG90aGVyIGNvZGUgSSd2ZQo+IHNlZW4u IEl0IHdvdWxkIGJlIG1vcmUgcmVhZGFibGUgaWYgeW91IGhhdmUgaXQgbGlrZToKPiAKPiByaW5n LT5yaW5nX21lbV92aXJ0ICsgaWR4ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpOwoKWWVzLCBJJ2xs IHVwZGF0ZS4KCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1 c2hfbWVtKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKPj4gK3N0YXRpYyBpbnQg azNfcmluZ2FjY19yaW5nX3BvcF9tZW0oc3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0p Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGszX3Jpbmdfb3BzIGszX3JpbmdfbW9kZV9yaW5nX29w cyA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgIC5wdXNoX3RhaWwgPSBrM19yaW5nYWNjX3JpbmdfcHVz aF9tZW0sCj4+ICvCoMKgwqDCoMKgwqDCoCAucG9wX2hlYWQgPSBrM19yaW5nYWNjX3JpbmdfcG9w X21lbSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaW8o c3RydWN0IGszX3JpbmcgKnJpbmcsIHZvaWQgKmVsZW0pOwo+PiArc3RhdGljIGludCBrM19yaW5n YWNjX3JpbmdfcG9wX2lvKHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkICplbGVtKTsKPj4gK3N0 YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbyhzdHJ1Y3QgazNfcmluZyAqcmlu Zywgdm9pZAo+PiAqZWxlbSk7Cj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wb3BfdGFp bF9pbyhzdHJ1Y3QgazNfcmluZyAqcmluZywgdm9pZAo+PiAqZWxlbSk7Cj4+ICsKPj4gK3N0YXRp YyBzdHJ1Y3QgazNfcmluZ19vcHMgazNfcmluZ19tb2RlX21zZ19vcHMgPSB7Cj4+ICvCoMKgwqDC oMKgwqDCoCAucHVzaF90YWlsID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaW8sCj4+ICvCoMKgwqDC oMKgwqDCoCAucHVzaF9oZWFkID0gazNfcmluZ2FjY19yaW5nX3B1c2hfaGVhZF9pbywKPj4gK8Kg wqDCoMKgwqDCoMKgIC5wb3BfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19wb3BfdGFpbF9pbywKPj4g K8KgwqDCoMKgwqDCoMKgIC5wb3BfaGVhZCA9IGszX3JpbmdhY2NfcmluZ19wb3BfaW8sCj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW50IGszX3JpbmdhY2NfcmluZ19wdXNoX2hlYWRfcHJveHkoc3Ry dWN0IGszX3JpbmcgKnJpbmcsIHZvaWQKPj4gKmVsZW0pOwo+PiArc3RhdGljIGludCBrM19yaW5n YWNjX3JpbmdfcHVzaF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkCj4+ICpl bGVtKTsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX3BvcF9oZWFkX3Byb3h5KHN0cnVj dCBrM19yaW5nICpyaW5nLCB2b2lkCj4+ICplbGVtKTsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2Fj Y19yaW5nX3BvcF90YWlsX3Byb3h5KHN0cnVjdCBrM19yaW5nICpyaW5nLCB2b2lkCj4+ICplbGVt KTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBrM19yaW5nX29wcyBrM19yaW5nX21vZGVfcHJveHlf b3BzID0gewo+PiArwqDCoMKgwqDCoMKgwqAgLnB1c2hfdGFpbCA9IGszX3JpbmdhY2NfcmluZ19w dXNoX3RhaWxfcHJveHksCj4+ICvCoMKgwqDCoMKgwqDCoCAucHVzaF9oZWFkID0gazNfcmluZ2Fj Y19yaW5nX3B1c2hfaGVhZF9wcm94eSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5wb3BfdGFpbCA9IGsz X3JpbmdhY2NfcmluZ19wb3BfdGFpbF9wcm94eSwKPj4gK8KgwqDCoMKgwqDCoMKgIC5wb3BfaGVh ZCA9IGszX3JpbmdhY2NfcmluZ19wb3BfaGVhZF9wcm94eSwKPj4gK307Cj4+ICsKPj4gKyNpZmRl ZiBDT05GSUdfVElfSzNfUklOR0FDQ19ERUJVRwo+PiArdm9pZCBrM19yaW5nYWNjX3JpbmdfZHVt cChzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSByaW5nLT5wYXJlbnQtPmRldjsKPj4gKwo+PiArwqDCoMKgIGszX25hdl9kYmcoZGV2LCAi ZHVtcCByaW5nOiAlZFxuIiwgcmluZy0+cmluZ19pZCk7Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhk ZXYsICJkdW1wIG1lbSB2aXJ0ICVwLCBkbWEgJXBhZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgIHJpbmctPnJpbmdfbWVtX3ZpcnQsICZyaW5nLT5yaW5nX21lbV9kbWEpOwo+PiArwqDCoMKg IGszX25hdl9kYmcoZGV2LCAiZHVtcCBlbG1zaXplICVkLCBzaXplICVkLCBtb2RlICVkLCBwcm94 eV9pZCAlZFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmctPmVsbV9zaXplLCByaW5n LT5zaXplLCByaW5nLT5tb2RlLCByaW5nLT5wcm94eV9pZCk7Cj4+ICsKPj4gK8KgwqDCoCBrM19u YXZfZGJnKGRldiwgImR1bXAgcmluZ19ydF9yZWdzOiBkYiUwOHhcbiIsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoCByZWFkbCgmcmluZy0+cnQtPmRiKSk7Cj4gCj4gV2h5IG5vdCB1c2UgcmVhZGxf cmVsYXhlZCBpbiB0aGlzIGZ1bmM/CgpfX3Jhd19yZWFkbCgpIG1pZ2h0IGJlIGVub3VnaD8KCj4g Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhkZXYsICJkdW1wIG9jYyUwOHhcbiIsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoCByZWFkbCgmcmluZy0+cnQtPm9jYykpOwo+PiArwqDCoMKgIGszX25hdl9k YmcoZGV2LCAiZHVtcCBpbmR4JTA4eFxuIiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHJlYWRs KCZyaW5nLT5ydC0+aW5keCkpOwo+PiArwqDCoMKgIGszX25hdl9kYmcoZGV2LCAiZHVtcCBod29j YyUwOHhcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCByZWFkbCgmcmluZy0+cnQtPmh3b2Nj KSk7Cj4+ICvCoMKgwqAgazNfbmF2X2RiZyhkZXYsICJkdW1wIGh3aW5keCUwOHhcbiIsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoCByZWFkbCgmcmluZy0+cnQtPmh3aW5keCkpOwo+PiArCj4+ICvC oMKgwqAgaWYgKHJpbmctPnJpbmdfbWVtX3ZpcnQpCj4+ICvCoMKgwqDCoMKgwqDCoCBwcmludF9o ZXhfZHVtcChLRVJOX0VSUiwgImR1bXAgcmluZ19tZW1fdmlydCAiLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERVTVBfUFJFRklYX05PTkUsIDE2LCAxLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmctPnJpbmdfbWVtX3ZpcnQsIDE2 ICogOCwgZmFsc2UpOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5n X2R1bXApOwo+IAo+IERvIHlvdSByZWFsbHkgbmVlZCB0byBleHBvcnQgYSBkZWJ1ZyBmdW5jdGlv bj8KCkl0IG1pZ2h0IGNvbWUgaGVscGZ1bCBmb3IgY2xpZW50cyB0byBkdW1wIHRoZSByaW5nIHN0 YXR1cyBydW50aW1lLCBidXQKc2luY2Ugd2UgZG9uJ3QgaGF2ZSB1c2VycywgSSdsbCBtb3ZlIGl0 IHRvIHN0YXRpYy4KCj4+ICsjZW5kaWYKPj4gKwo+PiArc3RydWN0IGszX3JpbmcgKmszX3Jpbmdh Y2NfcmVxdWVzdF9yaW5nKHN0cnVjdCBrM19yaW5nYWNjICpyaW5nYWNjLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IGlkLCB1MzIgZmxhZ3MpCj4+ICt7Cj4+ ICvCoMKgwqAgaW50IHByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKPj4gKwo+ PiArwqDCoMKgIG11dGV4X2xvY2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKPj4gKwo+PiArwqDCoMKg IGlmIChpZCA9PSBLM19SSU5HQUNDX1JJTkdfSURfQU5ZKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAv KiBSZXF1ZXN0IGZvciBhbnkgZ2VuZXJhbCBwdXJwb3NlIHJpbmcgKi8KPj4gK8KgwqDCoMKgwqDC oMKgIHN0cnVjdCB0aV9zY2lfcmVzb3VyY2VfZGVzYyAqZ3BfcmluZ3MgPQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcmluZ2FjYy0+cm1fZ3BfcmFu Z2UtPmRlc2NbMF07Cj4+ICvCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHNpemU7Cj4+ICsK Pj4gK8KgwqDCoMKgwqDCoMKgIHNpemUgPSBncF9yaW5ncy0+c3RhcnQgKyBncF9yaW5ncy0+bnVt Owo+PiArwqDCoMKgwqDCoMKgwqAgaWQgPSBmaW5kX25leHRfemVyb19iaXQocmluZ2FjYy0+cmlu Z3NfaW51c2UsIHNpemUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBncF9yaW5ncy0+c3RhcnQpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGlkID09IHNpemUpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3I7Cj4+ICvCoMKgwqAgfSBlbHNlIGlm IChpZCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3I7Cj4+ICvCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqAgaWYgKHRlc3RfYml0KGlkLCByaW5nYWNjLT5yaW5nc19pbnVzZSkgJiYK Pj4gK8KgwqDCoMKgwqDCoMKgICEocmluZ2FjYy0+cmluZ3NbaWRdLmZsYWdzICYgSzNfUklOR19G TEFHX1NIQVJFRCkpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycm9yOwo+PiArwqDCoMKgIGVs c2UgaWYgKHJpbmdhY2MtPnJpbmdzW2lkXS5mbGFncyAmIEszX1JJTkdfRkxBR19TSEFSRUQpCj4+ ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4gKwo+PiArwqDCoMKgIGlmIChmbGFncyAmIEsz X1JJTkdBQ0NfUklOR19VU0VfUFJPWFkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHByb3h5X2lkID0g ZmluZF9uZXh0X3plcm9fYml0KHJpbmdhY2MtPnByb3h5X2ludXNlLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+bnVtX3Byb3hp ZXMsIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHByb3h5X2lkID09IHJpbmdhY2MtPm51bV9w cm94aWVzKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycm9yOwo+PiArwqDCoMKg IH0KPj4gKwo+PiArwqDCoMKgIGlmICghdHJ5X21vZHVsZV9nZXQocmluZ2FjYy0+ZGV2LT5kcml2 ZXItPm93bmVyKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZXJyb3I7Cj4+ICsKPj4gK8KgwqDC oCBpZiAocHJveHlfaWQgIT0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRCkgewo+PiArwqDCoMKg wqDCoMKgwqAgc2V0X2JpdChwcm94eV9pZCwgcmluZ2FjYy0+cHJveHlfaW51c2UpOwo+PiArwqDC oMKgwqDCoMKgwqAgcmluZ2FjYy0+cmluZ3NbaWRdLnByb3h5X2lkID0gcHJveHlfaWQ7Cj4+ICvC oMKgwqDCoMKgwqDCoCBrM19uYXZfZGJnKHJpbmdhY2MtPmRldiwgIkdpdmluZyByaW5nIyVkIHBy b3h5IyVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZCwgcHJveHlfaWQp Owo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBrM19uYXZfZGJnKHJpbmdh Y2MtPmRldiwgIkdpdmluZyByaW5nIyVkXG4iLCBpZCk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqAgc2V0X2JpdChpZCwgcmluZ2FjYy0+cmluZ3NfaW51c2UpOwo+PiArb3V0Ogo+PiArwqDC oMKgIHJpbmdhY2MtPnJpbmdzW2lkXS51c2VfY291bnQrKzsKPj4gK8KgwqDCoCBtdXRleF91bmxv Y2soJnJpbmdhY2MtPnJlcV9sb2NrKTsKPj4gK8KgwqDCoCByZXR1cm4gJnJpbmdhY2MtPnJpbmdz W2lkXTsKPj4gKwo+PiArZXJyb3I6Cj4+ICvCoMKgwqAgbXV0ZXhfdW5sb2NrKCZyaW5nYWNjLT5y ZXFfbG9jayk7Cj4+ICvCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9M X0dQTChrM19yaW5nYWNjX3JlcXVlc3RfcmluZyk7Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGszX3Jp bmdhY2NfcmluZ19yZXNldF9zY2koc3RydWN0IGszX3JpbmcgKnJpbmcpCj4+ICt7Cj4+ICvCoMKg wqAgc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7Cj4+ICvCoMKgwqAg aW50IHJldDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IHJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzLT5j b25maWcoCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPnRpc2NpLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBUSV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfQ09VTlRfVkFMSUQs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPnRpc2NpX2Rldl9pZCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+cmluZ19pZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmluZy0+c2l6ZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgMCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMCk7Cj4+ ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIocmluZ2FjYy0+ZGV2 LCAiVElTQ0kgcmVzZXQgcmluZyBmYWlsICglZCkgcmluZ19pZHgKPj4gJWRcbiIsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldCwgcmluZy0+cmluZ19pZCk7Cj4gCj4gUmV0dXJuIHZhbHVl IG9mIHNjaSBvcHMgaXMgbWFza2VkLCB3aHkgbm90IHJldHVybiBpdCBhbmQgbGV0IHRoZSBjYWxs ZXIKPiBoYW5kbGUgaXQgcHJvcGVybHk/Cj4gCj4gU2FtZSBjb21tZW50IGZvciBhbnl0aGluZyBz aW1pbGFyIHRoYXQgZm9sbG93cy4KCkhybSwgdGhlcmUgaXMgbm90IG11Y2ggYSBjYWxsZXIgY2Fu IGRvIG90aGVyIHRoYW4gUEFOSUMgaW4gY2FzZSB0aGUgcmluZwpjb25maWd1cmF0aW9uIGZhaWxz LgpJIGNhbiBwcm9iYWdhdGUgdGhlIGVycm9yLCBidXQgbm90IHN1cmUgd2hhdCBhY3Rpb24gY2Fu IGJlIHRha2VuLCBpZiBhbnkuCgo+PiArfQo+PiArCj4+ICt2b2lkIGszX3JpbmdhY2NfcmluZ19y ZXNldChzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBpZiAoIXJpbmcgfHwg IShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybjsKPj4gKwo+PiArwqDCoMKgIHJpbmctPm9jYyA9IDA7Cj4+ICvCoMKgwqAgcmluZy0+ZnJl ZSA9IDA7Cj4+ICvCoMKgwqAgcmluZy0+cmluZGV4ID0gMDsKPj4gK8KgwqDCoCByaW5nLT53aW5k ZXggPSAwOwo+PiArCj4+ICvCoMKgwqAgazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5nKTsK Pj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfcmluZ19yZXNldCk7Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGszX3JpbmdhY2NfcmluZ19yZWNvbmZpZ19xbW9kZV9zY2koc3RydWN0 IGszX3JpbmcgKnJpbmcsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVudW0gazNfcmluZ19tb2RlIG1vZGUpCj4+ICt7Cj4+ICvCoMKgwqAg c3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7Cj4+ICvCoMKgwqAgaW50 IHJldDsKPj4gKwo+PiArwqDCoMKgIHJldCA9IHJpbmdhY2MtPnRpc2NpX3Jpbmdfb3BzLT5jb25m aWcoCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmdhY2MtPnRpc2NpLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBUSV9TQ0lfTVNHX1ZBTFVFX1JNX1JJTkdfTU9ERV9WQUxJRCwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+dGlzY2lfZGV2X2lkLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCByaW5nLT5yaW5nX2lkLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtb2RlLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAwKTsKPj4gK8KgwqDCoCBp ZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihyaW5nYWNjLT5kZXYsICJUSVNDSSBy ZWNvbmYgcW1vZGUgZmFpbCAoJWQpIHJpbmdfaWR4Cj4+ICVkXG4iLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQsIHJpbmctPnJpbmdfaWQpOwo+PiArfQo+PiArCj4+ICt2b2lkIGszX3Jp bmdhY2NfcmluZ19yZXNldF9kbWEoc3RydWN0IGszX3JpbmcgKnJpbmcsIHUzMiBvY2MpCj4+ICt7 Cj4+ICvCoMKgwqAgaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVT WSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJpbmct PnBhcmVudC0+ZG1hX3JpbmdfcmVzZXRfcXVpcmspCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIW9jYykKPj4gK8KgwqDCoMKgwqDCoMKgIG9jYyA9IGRiZ19y ZWFkbCgmcmluZy0+cnQtPm9jYyk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAob2NjKSB7Cj4+ICvCoMKg wqDCoMKgwqDCoCB1MzIgZGJfcmluZ19jbnQsIGRiX3JpbmdfY250X2N1cjsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgazNfbmF2X2RiZyhyaW5nLT5wYXJlbnQtPmRldiwgIiVzICV1IG9jYzogJXVc biIsIF9fZnVuY19fLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nLT5yaW5n X2lkLCBvY2MpOwo+PiArwqDCoMKgwqDCoMKgwqAgLyogMi4gUmVzZXQgdGhlIHJpbmcgKi8KPiAK PiAyPyBXaGVyZSBpcyAxPwoKT2gsIEknbGwgZml4IHRoZSBudW1iZXJpbmcuCgo+IAo+PiArwqDC oMKgwqDCoMKgwqAgazNfcmluZ2FjY19yaW5nX3Jlc2V0X3NjaShyaW5nKTsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiAzLiBTZXR1cCB0aGUgcmluZyBp biByaW5nL2Rvb3JiZWxsIG1vZGUKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiAoaWYgbm90IGFscmVh ZHkgaW4gdGhpcyBtb2RlKQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKgwqDCoMKg wqAgaWYgKHJpbmctPm1vZGUgIT0gSzNfUklOR0FDQ19SSU5HX01PREVfUklORykKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaSgKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmcsIEszX1JJTkdBQ0Nf UklOR19NT0RFX1JJTkcpOwo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKg wqAgKiA0LiBSaW5nIHRoZSBkb29yYmVsbCAyKioyMiDigJMgcmluZ09jYyB0aW1lcy4KPj4gK8Kg wqDCoMKgwqDCoMKgwqAgKiBUaGlzIHdpbGwgd3JhcCB0aGUgaW50ZXJuYWwgVURNQVAgcmluZyBz dGF0ZSBvY2N1cGFuY3kKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBjb3VudGVyICh3aGljaCBpcyAy MS1iaXRzIHdpZGUpIHRvIDAuCj4+ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+ICvCoMKgwqDCoMKg wqDCoCBkYl9yaW5nX2NudCA9ICgxVSA8PCAyMikgLSBvY2M7Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgIHdoaWxlIChkYl9yaW5nX2NudCAhPSAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBSaW5nIHRoZSBkb29yYmVsbCB3aXRo IHRoZSBtYXhpbXVtIGNvdW50IGVhY2gKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGl0 ZXJhdGlvbiBpZiBwb3NzaWJsZSB0byBtaW5pbWl6ZSB0aGUgdG90YWwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIG9mIHdyaXRlcwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICov Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkYl9yaW5nX2NudCA+IEszX1JJTkdBQ0Nf TUFYX0RCX1JJTkdfQ05UKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRiX3Jp bmdfY250X2N1ciA9IEszX1JJTkdBQ0NfTUFYX0RCX1JJTkdfQ05UOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGJfcmlu Z19jbnRfY3VyID0gZGJfcmluZ19jbnQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg d3JpdGVsKGRiX3JpbmdfY250X2N1ciwgJnJpbmctPnJ0LT5kYik7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGRiX3JpbmdfY250IC09IGRiX3JpbmdfY250X2N1cjsKPj4gK8KgwqDCoMKgwqDC oMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogNS4gUmVzdG9yZSB0aGUgb3JpZ2luYWwg cmluZyBtb2RlIChpZiBub3QgcmluZyBtb2RlKSAqLwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJp bmctPm1vZGUgIT0gSzNfUklOR0FDQ19SSU5HX01PREVfUklORykKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgazNfcmluZ2FjY19yaW5nX3JlY29uZmlnX3Ftb2RlX3NjaShyaW5nLCByaW5nLT5t b2RlKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAvKiAyLiBSZXNldCB0aGUgcmluZyAq Lwo+IAo+IEFnYWluIDI/CgpJJ2xsIGRyb3AgdGhlICcyLicKCj4gCj4+ICvCoMKgwqAgazNfcmlu Z2FjY19yaW5nX3Jlc2V0KHJpbmcpOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmlu Z2FjY19yaW5nX3Jlc2V0X2RtYSk7Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGszX3JpbmdhY2Nfcmlu Z19mcmVlX3NjaShzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3Qg azNfcmluZ2FjYyAqcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+ PiArCj4+ICvCoMKgwqAgcmV0ID0gcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMtPmNvbmZpZygKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+dGlzY2ksCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIFRJX1NDSV9NU0dfVkFMVUVfUk1fQUxMX05PX09SREVSLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaV9kZXZfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJpbmctPnJpbmdfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDApOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvC oMKgwqDCoMKgwqDCoCBkZXZfZXJyKHJpbmdhY2MtPmRldiwgIlRJU0NJIHJpbmcgZnJlZSBmYWls ICglZCkgcmluZ19pZHggJWRcbiIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCwgcmlu Zy0+cmluZ19pZCk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBrM19yaW5nYWNjX3JpbmdfZnJlZShzdHJ1 Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgazNfcmluZ2FjYyAqcmlu Z2FjYzsKPj4gKwo+PiArwqDCoMKgIGlmICghcmluZykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgcmluZ2FjYyA9IHJpbmctPnBhcmVudDsKPj4gKwo+ PiArwqDCoMKgIGszX25hdl9kYmcocmluZy0+cGFyZW50LT5kZXYsICJmbGFnczogMHglMDh4XG4i LCByaW5nLT5mbGFncyk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXRlc3RfYml0KHJpbmctPnJpbmdf aWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlO VkFMOwo+PiArCj4+ICvCoMKgwqAgbXV0ZXhfbG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKC0tcmluZy0+dXNlX2NvdW50KQo+PiArwqDCoMKgwqDCoMKgwqAgZ290 byBvdXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19C VVNZKSkKPj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gbm9faW5pdDsKPj4gKwo+PiArwqDCoMKgIGsz X3JpbmdhY2NfcmluZ19mcmVlX3NjaShyaW5nKTsKPj4gKwo+PiArwqDCoMKgIGRtYV9mcmVlX2Nv aGVyZW50KHJpbmdhY2MtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmct PnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByaW5nLT5yaW5nX21lbV92aXJ0LCByaW5nLT5yaW5nX21lbV9kbWEpOwo+PiArwqDCoMKg IHJpbmctPmZsYWdzID0gMDsKPj4gK8KgwqDCoCByaW5nLT5vcHMgPSBOVUxMOwo+PiArwqDCoMKg IGlmIChyaW5nLT5wcm94eV9pZCAhPSBLM19SSU5HQUNDX1BST1hZX05PVF9VU0VEKSB7Cj4+ICvC oMKgwqDCoMKgwqDCoCBjbGVhcl9iaXQocmluZy0+cHJveHlfaWQsIHJpbmdhY2MtPnByb3h5X2lu dXNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJpbmctPnByb3h5ID0gTlVMTDsKPj4gK8KgwqDCoMKg wqDCoMKgIHJpbmctPnByb3h5X2lkID0gSzNfUklOR0FDQ19QUk9YWV9OT1RfVVNFRDsKPj4gK8Kg wqDCoCB9Cj4+ICsKPj4gK25vX2luaXQ6Cj4+ICvCoMKgwqAgY2xlYXJfYml0KHJpbmctPnJpbmdf aWQsIHJpbmdhY2MtPnJpbmdzX2ludXNlKTsKPj4gKwo+PiArwqDCoMKgIG1vZHVsZV9wdXQocmlu Z2FjYy0+ZGV2LT5kcml2ZXItPm93bmVyKTsKPj4gKwo+PiArb3V0Ogo+PiArwqDCoMKgIG11dGV4 X3VubG9jaygmcmluZ2FjYy0+cmVxX2xvY2spOwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+ PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2ZyZWUpOwo+PiArCj4+ICt1MzIg azNfcmluZ2FjY19nZXRfcmluZ19pZChzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8Kg wqDCoCBpZiAoIXJpbmcpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+ PiArwqDCoMKgIHJldHVybiByaW5nLT5yaW5nX2lkOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9H UEwoazNfcmluZ2FjY19nZXRfcmluZ19pZCk7Cj4+ICsKPj4gK3UzMiBrM19yaW5nYWNjX2dldF90 aXNjaV9kZXZfaWQoc3RydWN0IGszX3JpbmcgKnJpbmcpCj4+ICt7Cj4+ICvCoMKgwqAgaWYgKCFy aW5nKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPiAKPiBXaGF0IGlm IHBhcmVudCBpcyBOVUxMPyBDYW4gaXQgZXZlciBiZSBoZXJlPwoKTm8sIHBhcmVudCBjYW4gbm90 IGJlIE5VTEwgYXMgdGhlIGNsaWVudCB3b3VsZCBub3QgaGF2ZSB0aGUgcmluZyBpbiB0aGUKZmly c3QgcGxhY2UuCgo+IAo+PiArwqDCoMKgIHJldHVybiByaW5nLT5wYXJlbnQtPnRpc2NpX2Rldl9p ZDsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3Rpc2NpX2Rldl9p ZCk7Cj4+ICsKPj4gK2ludCBrM19yaW5nYWNjX2dldF9yaW5nX2lycV9udW0oc3RydWN0IGszX3Jp bmcgKnJpbmcpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IGlycV9udW07Cj4+ICsKPj4gK8KgwqDCoCBp ZiAoIXJpbmcpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDC oMKgIGlycV9udW0gPSB0aV9zY2lfaW50YV9tc2lfZ2V0X3ZpcnEocmluZy0+cGFyZW50LT5kZXYs Cj4+IHJpbmctPnJpbmdfaWQpOwo+PiArwqDCoMKgIGlmIChpcnFfbnVtIDw9IDApCj4+ICvCoMKg wqDCoMKgwqDCoCBpcnFfbnVtID0gLUVJTlZBTDsKPj4gK8KgwqDCoCByZXR1cm4gaXJxX251bTsK Pj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGszX3JpbmdhY2NfZ2V0X3JpbmdfaXJxX251bSk7 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgazNfcmluZ2FjY19yaW5nX2NmZ19zY2koc3RydWN0IGszX3Jp bmcgKnJpbmcpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSBy aW5nLT5wYXJlbnQ7Cj4+ICvCoMKgwqAgdTMyIHJpbmdfaWR4Owo+PiArwqDCoMKgIGludCByZXQ7 Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJpbmdhY2MtPnRpc2NpKQo+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCByaW5nX2lkeCA9IHJpbmctPnJpbmdfaWQ7 Cj4+ICvCoMKgwqAgcmV0ID0gcmluZ2FjYy0+dGlzY2lfcmluZ19vcHMtPmNvbmZpZygKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZ2FjYy0+dGlzY2ksCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIFRJX1NDSV9NU0dfVkFMVUVfUk1fQUxMX05PX09SREVSLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByaW5nYWNjLT50aXNjaV9kZXZfaWQsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJpbmdfaWR4LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb3dlcl8zMl9iaXRzKHJp bmctPnJpbmdfbWVtX2RtYSksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVwcGVyXzMyX2Jp dHMocmluZy0+cmluZ19tZW1fZG1hKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+ c2l6ZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+bW9kZSwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmluZy0+ZWxtX3NpemUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IDApOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKHJpbmdh Y2MtPmRldiwgIlRJU0NJIGNvbmZpZyByaW5nIGZhaWwgKCVkKSByaW5nX2lkeAo+PiAlZFxuIiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0LCByaW5nX2lkeCk7Cj4+ICsKPj4gK8KgwqDC oCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtpbnQgazNfcmluZ2FjY19yaW5nX2NmZyhzdHJ1 Y3QgazNfcmluZyAqcmluZywgc3RydWN0IGszX3JpbmdfY2ZnICpjZmcpCj4+ICt7Cj4+ICvCoMKg wqAgc3RydWN0IGszX3JpbmdhY2MgKnJpbmdhY2MgPSByaW5nLT5wYXJlbnQ7Cj4+ICvCoMKgwqAg aW50IHJldCA9IDA7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIXJpbmcgfHwgIWNmZykKPj4gK8KgwqDC oMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgIGlmIChjZmctPmVsbV9zaXplID4g SzNfUklOR0FDQ19SSU5HX0VMU0laRV8yNTYgfHwKPj4gK8KgwqDCoMKgwqDCoMKgIGNmZy0+bW9k ZSA+IEszX1JJTkdBQ0NfUklOR19NT0RFX1FNIHx8Cj4+ICvCoMKgwqDCoMKgwqDCoCBjZmctPnNp emUgJiB+SzNfUklOR0FDQ19DRkdfUklOR19TSVpFX0VMQ05UX01BU0sgfHwKPj4gK8KgwqDCoMKg wqDCoMKgICF0ZXN0X2JpdChyaW5nLT5yaW5nX2lkLCByaW5nYWNjLT5yaW5nc19pbnVzZSkpCj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKgIGlmIChyaW5n LT51c2VfY291bnQgIT0gMSkKPiAKPiBIbW0sIGlzbid0IHRoaXMgYSBmYWlsdXJlIGFjdHVhbGx5 PwoKWWVzLCBpdCBpczogLUVCVVNZCgo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ICsK Pj4gK8KgwqDCoCByaW5nLT5zaXplID0gY2ZnLT5zaXplOwo+PiArwqDCoMKgIHJpbmctPmVsbV9z aXplID0gY2ZnLT5lbG1fc2l6ZTsKPj4gK8KgwqDCoCByaW5nLT5tb2RlID0gY2ZnLT5tb2RlOwo+ PiArwqDCoMKgIHJpbmctPm9jYyA9IDA7Cj4+ICvCoMKgwqAgcmluZy0+ZnJlZSA9IDA7Cj4+ICvC oMKgwqAgcmluZy0+cmluZGV4ID0gMDsKPj4gK8KgwqDCoCByaW5nLT53aW5kZXggPSAwOwo+PiAr Cj4+ICvCoMKgwqAgaWYgKHJpbmctPnByb3h5X2lkICE9IEszX1JJTkdBQ0NfUFJPWFlfTk9UX1VT RUQpCj4+ICvCoMKgwqDCoMKgwqDCoCByaW5nLT5wcm94eSA9IHJpbmdhY2MtPnByb3h5X3Rhcmdl dF9iYXNlICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmluZy0+cHJv eHlfaWQgKiBLM19SSU5HQUNDX1BST1hZX1RBUkdFVF9TVEVQOwo+PiArCj4+ICvCoMKgwqAgc3dp dGNoIChyaW5nLT5tb2RlKSB7Cj4+ICvCoMKgwqAgY2FzZSBLM19SSU5HQUNDX1JJTkdfTU9ERV9S SU5HOgo+PiArwqDCoMKgwqDCoMKgwqAgcmluZy0+b3BzID0gJmszX3JpbmdfbW9kZV9yaW5nX29w czsKPj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+PiArwqDCoMKgIGNhc2UgSzNfUklOR0FDQ19S SU5HX01PREVfUU06Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAq IEluIFF1ZXVlIG1vZGUgZWxtX3NpemUgY2FuIGJlIDggb25seSBhbmQgZWFjaCBvcGVyYXRpb24K Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiB1c2VzIDIgZWxlbWVudCBzbG90cwo+PiArwqDCoMKgwqDC oMKgwqDCoCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGNmZy0+ZWxtX3NpemUgIT0gSzNfUklO R0FDQ19SSU5HX0VMU0laRV84IHx8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNmZy0+c2l6 ZSAlIDIpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2ZyZWVfcHJveHk7Cj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiBlbHNlLCBmYWxsIHRocm91Z2ggKi8KPj4gK8KgwqDCoCBjYXNl IEszX1JJTkdBQ0NfUklOR19NT0RFX01FU1NBR0U6Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmlu Zy0+cHJveHkpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmctPm9wcyA9ICZrM19yaW5n X21vZGVfcHJveHlfb3BzOwo+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByaW5nLT5vcHMgPSAmazNfcmluZ19tb2RlX21zZ19vcHM7Cj4+ICvCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBkZWZhdWx0Ogo+PiArwqDCoMKgwqDCoMKgwqAgcmlu Zy0+b3BzID0gTlVMTDsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FSU5WQUw7Cj4+ICvCoMKg wqDCoMKgwqDCoCBnb3RvIGVycl9mcmVlX3Byb3h5Owo+PiArwqDCoMKgIH07Cj4+ICsKPj4gK8Kg wqDCoCByaW5nLT5yaW5nX21lbV92aXJ0ID0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1h X2FsbG9jX2NvaGVyZW50KHJpbmdhY2MtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmctPnNpemUgKiAoNCA8PCByaW5nLT5lbG1fc2l6ZSks Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmcmluZy0+ cmluZ19tZW1fZG1hLCBHRlBfS0VSTkVMKTsKPj4gK8KgwqDCoCBpZiAoIXJpbmctPnJpbmdfbWVt X3ZpcnQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIocmluZ2FjYy0+ZGV2LCAiRmFpbGVk IHRvIGFsbG9jIHJpbmcgbWVtXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FTk9NRU07 Cj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9mcmVlX29wczsKPj4gK8KgwqDCoCB9Cj4+ICsK Pj4gK8KgwqDCoCByZXQgPSBrM19yaW5nYWNjX3JpbmdfY2ZnX3NjaShyaW5nKTsKPj4gKwo+PiAr wqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9mcmVlX21lbTsKPj4g Kwo+PiArwqDCoMKgIHJpbmctPmZsYWdzIHw9IEszX1JJTkdfRkxBR19CVVNZOwo+PiArwqDCoMKg IHJpbmctPmZsYWdzIHw9IChjZmctPmZsYWdzICYgSzNfUklOR0FDQ19SSU5HX1NIQVJFRCkgPwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBLM19SSU5HX0ZMQUdfU0hBUkVEIDogMDsKPj4gKwo+ PiArwqDCoMKgIGszX3JpbmdhY2NfcmluZ19kdW1wKHJpbmcpOwo+PiArCj4+ICvCoMKgwqAgcmV0 dXJuIDA7Cj4+ICsKPj4gK2Vycl9mcmVlX21lbToKPj4gK8KgwqDCoCBkbWFfZnJlZV9jb2hlcmVu dChyaW5nYWNjLT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByaW5nLT5zaXpl ICogKDQgPDwgcmluZy0+ZWxtX3NpemUpLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmluZy0+cmluZ19tZW1fdmlydCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJpbmct PnJpbmdfbWVtX2RtYSk7Cj4+ICtlcnJfZnJlZV9vcHM6Cj4+ICvCoMKgwqAgcmluZy0+b3BzID0g TlVMTDsKPj4gK2Vycl9mcmVlX3Byb3h5Ogo+PiArwqDCoMKgIHJpbmctPnByb3h5ID0gTlVMTDsK Pj4gK8KgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoazNfcmlu Z2FjY19yaW5nX2NmZyk7Cj4+ICsKPj4gK3UzMiBrM19yaW5nYWNjX3JpbmdfZ2V0X3NpemUoc3Ry dWN0IGszX3JpbmcgKnJpbmcpCj4+ICt7Cj4+ICvCoMKgwqAgaWYgKCFyaW5nIHx8ICEocmluZy0+ ZmxhZ3MgJiBLM19SSU5HX0ZMQUdfQlVTWSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJ TlZBTDsKPj4gKwo+PiArwqDCoMKgIHJldHVybiByaW5nLT5zaXplOwo+PiArfQo+PiArRVhQT1JU X1NZTUJPTF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9zaXplKTsKPj4gKwo+PiArdTMyIGszX3Jp bmdhY2NfcmluZ19nZXRfZnJlZShzdHJ1Y3QgazNfcmluZyAqcmluZykKPj4gK3sKPj4gK8KgwqDC oCBpZiAoIXJpbmcgfHwgIShyaW5nLT5mbGFncyAmIEszX1JJTkdfRkxBR19CVVNZKSkKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+PiArCj4+ICvCoMKgwqAgaWYgKCFyaW5nLT5m cmVlKQo+PiArwqDCoMKgwqDCoMKgwqAgcmluZy0+ZnJlZSA9IHJpbmctPnNpemUgLSBkYmdfcmVh ZGwoJnJpbmctPnJ0LT5vY2MpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJpbmctPmZyZWU7Cj4+ ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUpOwo+PiAr Cj4+ICt1MzIgazNfcmluZ2FjY19yaW5nX2dldF9vY2Moc3RydWN0IGszX3JpbmcgKnJpbmcpCj4+ ICt7Cj4+ICvCoMKgwqAgaWYgKCFyaW5nIHx8ICEocmluZy0+ZmxhZ3MgJiBLM19SSU5HX0ZMQUdf QlVTWSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArwqDCoMKg IHJldHVybiBkYmdfcmVhZGwoJnJpbmctPnJ0LT5vY2MpOwo+PiArfQo+PiArRVhQT1JUX1NZTUJP TF9HUEwoazNfcmluZ2FjY19yaW5nX2dldF9vY2MpOwo+PiArCj4+ICt1MzIgazNfcmluZ2FjY19y aW5nX2lzX2Z1bGwoc3RydWN0IGszX3JpbmcgKnJpbmcpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJu ICFrM19yaW5nYWNjX3JpbmdfZ2V0X2ZyZWUocmluZyk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9M X0dQTChrM19yaW5nYWNjX3JpbmdfaXNfZnVsbCk7Cj4+ICsKPj4gK2VudW0gazNfcmluZ2FjY19h Y2Nlc3NfbW9kZSB7Cj4+ICvCoMKgwqAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QVVNIX0hFQUQs Cj4+ICvCoMKgwqAgSzNfUklOR0FDQ19BQ0NFU1NfTU9ERV9QT1BfSEVBRCwKPj4gK8KgwqDCoCBL M19SSU5HQUNDX0FDQ0VTU19NT0RFX1BVU0hfVEFJTCwKPj4gK8KgwqDCoCBLM19SSU5HQUNDX0FD Q0VTU19NT0RFX1BPUF9UQUlMLAo+PiArwqDCoMKgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUEVF S19IRUFELAo+PiArwqDCoMKgIEszX1JJTkdBQ0NfQUNDRVNTX01PREVfUEVFS19UQUlMLAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIGludCBrM19yaW5nYWNjX3JpbmdfY2ZnX3Byb3h5KHN0cnVjdCBr M19yaW5nICpyaW5nLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBlbnVtIGszX3JpbmdhY2NfcHJveHlfYWNjZXNzX21vZGUgbW9kZSkKPj4gK3sKPj4gK8KgwqDC oCB1MzIgdmFsOwo+PiArCj4+ICvCoMKgwqAgdmFsID0gcmluZy0+cmluZ19pZDsKPj4gK8KgwqDC oCB2YWwgfD0gbW9kZSA8PCAxNjsKPj4gK8KgwqDCoCB2YWwgfD0gcmluZy0+ZWxtX3NpemUgPDwg MjQ7Cj4gCj4gV291bGQgYmUgbmljZSB0byBoYXZlIHRoZXNlIG1hZ2ljIHNoaWZ0cyBhcyBkZWZp bmVzLgoKT0ssIEknbGwgYWRkIGRlZmluZXMgZm9yIHRoZSBtYWdpYyBzaGlmdHMuCgo+IAo+PiAr wqDCoMKgIGRiZ193cml0ZWwodmFsLCAmcmluZy0+cHJveHktPmNvbnRyb2wpOwo+PiArwqDCoMKg IHJldHVybiAwOwo+PiArfQo+PiArCgpUaGFua3MgZm9yIHRoZSByZXZpZXcsCi0gUMOpdGVyCgpU ZXhhcyBJbnN0cnVtZW50cyBGaW5sYW5kIE95LCBQb3Jra2FsYW5rYXR1IDIyLCAwMDE4MCBIZWxz aW5raS4KWS10dW5udXMvQnVzaW5lc3MgSUQ6IDA2MTU1MjEtNC4gS290aXBhaWtrYS9Eb21pY2ls ZTogSGVsc2lua2kKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK